diff --git a/vtex/actions/payments/delete.ts b/vtex/actions/payments/delete.ts new file mode 100644 index 000000000..341ecee37 --- /dev/null +++ b/vtex/actions/payments/delete.ts @@ -0,0 +1,39 @@ +import { AppContext } from "../../mod.ts"; +import { parseCookie } from "../../utils/vtexId.ts"; + +export interface DeleteCard { + deletePaymentToken: boolean; +} + +interface Props { + id: string; +} + +async function loader( + { id }: Props, + req: Request, + ctx: AppContext, +): Promise { + const { io } = ctx; + const { cookie, payload } = parseCookie(req.headers, ctx.account); + + if (!payload?.sub || !payload?.userId) { + return null; + } + + const mutation = `mutation DeleteCreditCardToken($tokenId: ID!) { + deletePaymentToken(tokenId: $tokenId) @context(provider: "vtex.my-cards-graphql@2.x") + }`; + + try { + return await io.query({ + query: mutation, + variables: { tokenId: id }, + }, { headers: { cookie } }); + } catch (e) { + console.error(e); + return null; + } +} + +export default loader; diff --git a/vtex/loaders/payments/info.ts b/vtex/loaders/payments/info.ts new file mode 100644 index 000000000..3390d23fd --- /dev/null +++ b/vtex/loaders/payments/info.ts @@ -0,0 +1,55 @@ +import { AppContext } from "../../mod.ts"; +import { parseCookie } from "../../utils/vtexId.ts"; + +const query = `query getPaymentSystems { + paymentSystems { + name + groupName + requiresDocument + displayDocument + validator { + regex + mask + cardCodeMask + cardCodeRegex + } + } +}`; + +export interface PaymentSystem { + name: string; + groupName: string; + requiresDocument: boolean; + displayDocument: boolean; + validator: { + regex: string | null; + mask: string | null; + cardCodeMask: string | null; + cardCodeRegex: string | null; + }; +} + +export default async function loader( + _props: unknown, + req: Request, + ctx: AppContext, +) { + const { io } = ctx; + const { cookie, payload } = parseCookie(req.headers, ctx.account); + + if (!payload?.sub || !payload?.userId) { + return null; + } + + try { + const data = await io.query<{ paymentSystems: PaymentSystem[] }, null>( + { query }, + { headers: { cookie } }, + ); + + return data.paymentSystems; + } catch (e) { + console.error(e); + return null; + } +} diff --git a/vtex/loaders/payments/userPayments.ts b/vtex/loaders/payments/userPayments.ts new file mode 100644 index 000000000..78cd5f2d0 --- /dev/null +++ b/vtex/loaders/payments/userPayments.ts @@ -0,0 +1,61 @@ +// fetch("https://www.als.com/_v/private/graphql/v1?workspace=master&maxAge=long&appsEtag=remove&domain=store&locale=en-US&__bindingId=d8649f18-3877-43de-88e6-c45a81eddc02", { +// "headers": { +// "content-type": "application/json", +// }, +// "body": "{\"operationName\":\"Payments\",\"variables\":{},\"extensions\":{\"persistedQuery\":{\"version\":1,\"sha256Hash\":\"95af11127e44f1857144e38f18635e0d085113c3bfdda3e4b8bc99ae63e14e60\",\"sender\":\"vtex.my-cards@1.x\",\"provider\":\"vtex.store-graphql@2.x\"}}}", +// "method": "POST" +// }) + +import { AppContext } from "../../mod.ts"; +import { parseCookie } from "../../utils/vtexId.ts"; + +export interface Payment { + accountStatus: string | null; + cardNumber: string; + expirationDate: string; + id: string; + isExpired: boolean; + paymentSystem: string; + paymentSystemName: string; +} + +async function loader( + _props: unknown, + req: Request, + ctx: AppContext, +): Promise { + const { io } = ctx; + const { cookie, payload } = parseCookie(req.headers, ctx.account); + + if (!payload?.sub || !payload?.userId) { + return null; + } + + const query = `query getUserPayments { + profile { + payments { + accountStatus + cardNumber + expirationDate + id + isExpired + paymentSystem + paymentSystemName + } + } + }`; + + try { + const data = await io.query<{ profile: { payments: Payment[] } }, null>( + { query }, + { headers: { cookie } }, + ); + + return data.profile.payments; + } catch (e) { + console.error(e); + return null; + } +} + +export default loader; diff --git a/vtex/manifest.gen.ts b/vtex/manifest.gen.ts index ce1452cdb..d50f9fdc5 100644 --- a/vtex/manifest.gen.ts +++ b/vtex/manifest.gen.ts @@ -22,11 +22,12 @@ import * as $$$$$$$$$16 from "./actions/cart/updateUser.ts"; import * as $$$$$$$$$17 from "./actions/masterdata/createDocument.ts"; import * as $$$$$$$$$18 from "./actions/newsletter/subscribe.ts"; import * as $$$$$$$$$19 from "./actions/notifyme.ts"; -import * as $$$$$$$$$20 from "./actions/review/submit.ts"; -import * as $$$$$$$$$21 from "./actions/sessions/delete.ts"; -import * as $$$$$$$$$22 from "./actions/trigger.ts"; -import * as $$$$$$$$$23 from "./actions/wishlist/addItem.ts"; -import * as $$$$$$$$$24 from "./actions/wishlist/removeItem.ts"; +import * as $$$$$$$$$20 from "./actions/payments/delete.ts"; +import * as $$$$$$$$$21 from "./actions/review/submit.ts"; +import * as $$$$$$$$$22 from "./actions/sessions/delete.ts"; +import * as $$$$$$$$$23 from "./actions/trigger.ts"; +import * as $$$$$$$$$24 from "./actions/wishlist/addItem.ts"; +import * as $$$$$$$$$25 from "./actions/wishlist/removeItem.ts"; import * as $$$$0 from "./handlers/sitemap.ts"; import * as $$$0 from "./loaders/cart.ts"; import * as $$$1 from "./loaders/categories/tree.ts"; @@ -53,18 +54,20 @@ import * as $$$21 from "./loaders/options/productIdByTerm.ts"; import * as $$$22 from "./loaders/orders/list.ts"; import * as $$$23 from "./loaders/paths/PDPDefaultPath.ts"; import * as $$$24 from "./loaders/paths/PLPDefaultPath.ts"; -import * as $$$25 from "./loaders/product/extend.ts"; -import * as $$$26 from "./loaders/product/extensions/detailsPage.ts"; -import * as $$$27 from "./loaders/product/extensions/list.ts"; -import * as $$$28 from "./loaders/product/extensions/listingPage.ts"; -import * as $$$29 from "./loaders/product/extensions/suggestions.ts"; -import * as $$$30 from "./loaders/product/wishlist.ts"; -import * as $$$31 from "./loaders/proxy.ts"; -import * as $$$32 from "./loaders/sessions/info.ts"; -import * as $$$33 from "./loaders/user.ts"; -import * as $$$34 from "./loaders/wishlist.ts"; -import * as $$$35 from "./loaders/workflow/product.ts"; -import * as $$$36 from "./loaders/workflow/products.ts"; +import * as $$$25 from "./loaders/payments/info.ts"; +import * as $$$26 from "./loaders/payments/userPayments.ts"; +import * as $$$27 from "./loaders/product/extend.ts"; +import * as $$$28 from "./loaders/product/extensions/detailsPage.ts"; +import * as $$$29 from "./loaders/product/extensions/list.ts"; +import * as $$$30 from "./loaders/product/extensions/listingPage.ts"; +import * as $$$31 from "./loaders/product/extensions/suggestions.ts"; +import * as $$$32 from "./loaders/product/wishlist.ts"; +import * as $$$33 from "./loaders/proxy.ts"; +import * as $$$34 from "./loaders/sessions/info.ts"; +import * as $$$35 from "./loaders/user.ts"; +import * as $$$36 from "./loaders/wishlist.ts"; +import * as $$$37 from "./loaders/workflow/product.ts"; +import * as $$$38 from "./loaders/workflow/products.ts"; import * as $$$$$$0 from "./sections/Analytics/Vtex.tsx"; import * as $$$$$$$$$$0 from "./workflows/events.ts"; import * as $$$$$$$$$$1 from "./workflows/product/index.ts"; @@ -96,18 +99,20 @@ const manifest = { "vtex/loaders/orders/list.ts": $$$22, "vtex/loaders/paths/PDPDefaultPath.ts": $$$23, "vtex/loaders/paths/PLPDefaultPath.ts": $$$24, - "vtex/loaders/product/extend.ts": $$$25, - "vtex/loaders/product/extensions/detailsPage.ts": $$$26, - "vtex/loaders/product/extensions/list.ts": $$$27, - "vtex/loaders/product/extensions/listingPage.ts": $$$28, - "vtex/loaders/product/extensions/suggestions.ts": $$$29, - "vtex/loaders/product/wishlist.ts": $$$30, - "vtex/loaders/proxy.ts": $$$31, - "vtex/loaders/sessions/info.ts": $$$32, - "vtex/loaders/user.ts": $$$33, - "vtex/loaders/wishlist.ts": $$$34, - "vtex/loaders/workflow/product.ts": $$$35, - "vtex/loaders/workflow/products.ts": $$$36, + "vtex/loaders/payments/info.ts": $$$25, + "vtex/loaders/payments/userPayments.ts": $$$26, + "vtex/loaders/product/extend.ts": $$$27, + "vtex/loaders/product/extensions/detailsPage.ts": $$$28, + "vtex/loaders/product/extensions/list.ts": $$$29, + "vtex/loaders/product/extensions/listingPage.ts": $$$30, + "vtex/loaders/product/extensions/suggestions.ts": $$$31, + "vtex/loaders/product/wishlist.ts": $$$32, + "vtex/loaders/proxy.ts": $$$33, + "vtex/loaders/sessions/info.ts": $$$34, + "vtex/loaders/user.ts": $$$35, + "vtex/loaders/wishlist.ts": $$$36, + "vtex/loaders/workflow/product.ts": $$$37, + "vtex/loaders/workflow/products.ts": $$$38, }, "handlers": { "vtex/handlers/sitemap.ts": $$$$0, @@ -136,11 +141,12 @@ const manifest = { "vtex/actions/masterdata/createDocument.ts": $$$$$$$$$17, "vtex/actions/newsletter/subscribe.ts": $$$$$$$$$18, "vtex/actions/notifyme.ts": $$$$$$$$$19, - "vtex/actions/review/submit.ts": $$$$$$$$$20, - "vtex/actions/sessions/delete.ts": $$$$$$$$$21, - "vtex/actions/trigger.ts": $$$$$$$$$22, - "vtex/actions/wishlist/addItem.ts": $$$$$$$$$23, - "vtex/actions/wishlist/removeItem.ts": $$$$$$$$$24, + "vtex/actions/payments/delete.ts": $$$$$$$$$20, + "vtex/actions/review/submit.ts": $$$$$$$$$21, + "vtex/actions/sessions/delete.ts": $$$$$$$$$22, + "vtex/actions/trigger.ts": $$$$$$$$$23, + "vtex/actions/wishlist/addItem.ts": $$$$$$$$$24, + "vtex/actions/wishlist/removeItem.ts": $$$$$$$$$25, }, "workflows": { "vtex/workflows/events.ts": $$$$$$$$$$0,