@payment-kit-js/vanilla 0.5.16 → 0.5.18

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (45) hide show
  1. package/dist/{bnpl-shared-DGs1YzS9.mjs → bnpl-shared-CL900HFN.mjs} +2 -2
  2. package/dist/{bnpl-shared-DGs1YzS9.mjs.map → bnpl-shared-CL900HFN.mjs.map} +1 -1
  3. package/dist/{bnpl-shared-BQwCBD45.d.mts → bnpl-shared-D-Kd58Qz.d.mts} +2 -2
  4. package/dist/{bnpl-shared-BQwCBD45.d.mts.map → bnpl-shared-D-Kd58Qz.d.mts.map} +1 -1
  5. package/dist/cdn/paymentkit.js +194 -59
  6. package/dist/cdn/paymentkit.js.map +3 -3
  7. package/dist/cdn/paymentkit.min.js +24 -24
  8. package/dist/cdn/paymentkit.min.js.map +3 -3
  9. package/dist/connect-card-CZhzK_Tp.d.mts.map +1 -1
  10. package/dist/index.d.mts +2 -2
  11. package/dist/index.mjs +11 -4
  12. package/dist/index.mjs.map +1 -1
  13. package/dist/{next-action-handlers-CLOt1wzO.mjs → next-action-handlers-BZ5gynXe.mjs} +18 -18
  14. package/dist/next-action-handlers-BZ5gynXe.mjs.map +1 -0
  15. package/dist/payment-methods/affirm.d.mts +2 -2
  16. package/dist/payment-methods/affirm.mjs +2 -2
  17. package/dist/payment-methods/afterpay.d.mts +2 -2
  18. package/dist/payment-methods/afterpay.mjs +2 -2
  19. package/dist/payment-methods/apple-pay.d.mts +16 -7
  20. package/dist/payment-methods/apple-pay.d.mts.map +1 -1
  21. package/dist/payment-methods/apple-pay.mjs +12 -14
  22. package/dist/payment-methods/apple-pay.mjs.map +1 -1
  23. package/dist/payment-methods/bnpl-shared.d.mts +2 -2
  24. package/dist/payment-methods/bnpl-shared.mjs +2 -2
  25. package/dist/payment-methods/card.d.mts +1 -1
  26. package/dist/payment-methods/card.d.mts.map +1 -1
  27. package/dist/payment-methods/card.mjs +8 -4
  28. package/dist/payment-methods/card.mjs.map +1 -1
  29. package/dist/payment-methods/google-pay.d.mts +25 -3
  30. package/dist/payment-methods/google-pay.d.mts.map +1 -1
  31. package/dist/payment-methods/google-pay.mjs +131 -10
  32. package/dist/payment-methods/google-pay.mjs.map +1 -1
  33. package/dist/payment-methods/klarna.d.mts +2 -2
  34. package/dist/payment-methods/klarna.mjs +2 -2
  35. package/dist/payment-methods/next-action-handlers.mjs +1 -1
  36. package/dist/payment-methods/paypal.d.mts +1 -1
  37. package/dist/payment-methods/paypal.mjs +1 -1
  38. package/dist/{types-B3mjYfOm.d.mts → types-Cjcc3xak.d.mts} +6 -9
  39. package/dist/types-Cjcc3xak.d.mts.map +1 -0
  40. package/dist/{utils-Dc6zwOe1.mjs → utils-DIqrx4XF.mjs} +10 -7
  41. package/dist/utils-DIqrx4XF.mjs.map +1 -0
  42. package/package.json +2 -2
  43. package/dist/next-action-handlers-CLOt1wzO.mjs.map +0 -1
  44. package/dist/types-B3mjYfOm.d.mts.map +0 -1
  45. package/dist/utils-Dc6zwOe1.mjs.map +0 -1
@@ -1 +0,0 @@
1
- {"version":3,"file":"utils-Dc6zwOe1.mjs","names":["ENV_TO_SLUG: Record<string, string>"],"sources":["../src/utils/checkout-request-id.ts","../src/utils/validate-form-fields.ts","../src/utils/index.ts"],"sourcesContent":["import { nanoid } from \"nanoid\";\n\n/**\n * Maps PaymentKit environment to request ID env slug.\n * This must match the backend's env slug format.\n */\nconst ENV_TO_SLUG: Record<string, string> = {\n local: \"dev\",\n tunnel: \"dev\",\n sandbox: \"stg\",\n production: \"prod\",\n};\n\n// Window key for storing the request ID across PaymentKit instantiations\nconst WINDOW_KEY = \"__paymentKitRequestId__\";\n\n/**\n * Generates a checkout request ID for correlating all API calls within a checkout session.\n *\n * Format: pk_{env}_{nanoid(12)}\n * - pk = PaymentKit.js (client-generated)\n * - env = dev, stg, or prod\n * - nanoid(12) = 12 character random string\n *\n * Example: pk_stg_a1b2c3d4e5f6\n */\nexport function generateCheckoutRequestId(environment: string): string {\n const envSlug = ENV_TO_SLUG[environment] || \"dev\";\n const randomPart = nanoid(12);\n return `pk_${envSlug}_${randomPart}`;\n}\n\n/**\n * Gets or creates a checkout request ID, storing it in window for idempotency.\n *\n * This ensures the same request ID is used across:\n * - Multiple PaymentKit instantiations on the same page\n * - All analytics events and API calls within a checkout session\n *\n * The ID is generated once on first call and reused thereafter.\n */\nexport function getOrCreateCheckoutRequestId(environment: string): string {\n if (typeof window !== \"undefined\" && window[WINDOW_KEY]) {\n return window[WINDOW_KEY] as string;\n }\n\n const requestId = generateCheckoutRequestId(environment);\n\n if (typeof window !== \"undefined\") {\n (window as Record<string, unknown>)[WINDOW_KEY] = requestId;\n }\n\n return requestId;\n}\n\n/**\n * Creates RequestOptions with the x-request-id header set.\n */\nexport function withRequestId(checkoutRequestId: string) {\n return {\n headers: {\n \"x-request-id\": checkoutRequestId,\n },\n };\n}\n","import * as v from \"valibot\";\nimport type { FormErrorCodes, PaymentKitErrors, PaymentKitFields } from \"../types\";\n\ntype Options = {\n optionalZipCode?: boolean;\n};\n\nexport const validateFormFields = async (fields: PaymentKitFields, options: Options = {}) => {\n const schema = v.object({\n customer_name: v.pipe(\n v.string(\"required\"),\n v.nonEmpty(\"required\"),\n v.minLength(4, \"invalid\"),\n v.maxLength(40, \"invalid\"),\n ),\n customer_email: v.pipe(v.string(\"required\"), v.nonEmpty(\"required\"), v.email(\"invalid\")),\n customer_country: v.pipe(v.string(\"required\"), v.nonEmpty(\"required\")),\n customer_zip_code: options.optionalZipCode\n ? v.pipe(v.string(\"required\"))\n : v.pipe(v.string(\"required\"), v.nonEmpty(\"required\")),\n });\n\n const result = v.safeParse(schema, fields);\n\n if (result.issues) {\n const errors = result.issues.reduce((errors, issue) => {\n const field = v.getDotPath(issue) as keyof PaymentKitErrors;\n\n errors[field] = issue.kind === \"schema\" ? \"required\" : (issue.message as FormErrorCodes);\n return errors;\n }, {} as PaymentKitErrors);\n return { isSuccess: false, errors };\n }\n\n return { isSuccess: true };\n};\n","import type { PaymentMethod } from \"../types\";\n\nexport { generateCheckoutRequestId, getOrCreateCheckoutRequestId, withRequestId } from \"./checkout-request-id\";\nexport { validateFormFields } from \"./validate-form-fields\";\n\nexport const $ = (selector: string) => {\n const ele = document.querySelector(selector);\n if (!ele) {\n throw new Error(`Cannot find element with selector: ${selector}`);\n }\n return ele;\n};\n\nexport const definePaymentMethod = <TExternalFuncs, TName extends string>(\n paymentMethod: PaymentMethod<TExternalFuncs, TName>,\n) => paymentMethod;\n\nexport const createCheckoutIFrame = (type: string, baseUrl: string, params?: Record<string, string>) => {\n const iframe = document.createElement(\"iframe\");\n\n const searchParams = new URLSearchParams(params);\n const searchParamsStr = searchParams.toString();\n\n iframe.src = `${baseUrl}/embeds/v1/${type}${searchParamsStr ? `?${searchParamsStr}` : \"\"}`;\n\n Object.assign(iframe.style, { width: \"100%\", height: \"100%\", border: \"none\" });\n\n return iframe;\n};\n\n/**\n * Collects browser and client information for fraud detection.\n */\nexport function collectFraudMetadata() {\n return {\n ipAddress: undefined, // IP address should be collected server-side\n browserInfo: {\n userAgent: navigator.userAgent,\n language: navigator.language,\n screenHeight: window.screen.height,\n screenWidth: window.screen.width,\n colorDepth: window.screen.colorDepth,\n timezone: Intl.DateTimeFormat().resolvedOptions().timeZone,\n },\n processorFraudInfo: undefined,\n };\n}\n\ntype AddressInput = {\n line1?: string;\n line2?: string;\n city?: string;\n state?: string;\n zip_code?: string;\n country?: string;\n};\n\ntype AddressOutput = {\n line1?: string;\n line2?: string;\n city?: string;\n state?: string;\n zipCode?: string;\n country?: string;\n};\n\n/**\n * Maps address fields from snake_case to camelCase format.\n */\nexport function mapAddress(address?: AddressInput): AddressOutput | undefined {\n if (!address) return undefined;\n\n return {\n line1: address.line1,\n line2: address.line2,\n city: address.city,\n state: address.state,\n zipCode: address.zip_code,\n country: address.country,\n };\n}\n"],"mappings":";;;;;;;;AAMA,MAAMA,cAAsC;CAC1C,OAAO;CACP,QAAQ;CACR,SAAS;CACT,YAAY;CACb;AAGD,MAAM,aAAa;;;;;;;;;;;AAYnB,SAAgB,0BAA0B,aAA6B;AAGrE,QAAO,MAFS,YAAY,gBAAgB,MAEvB,GADF,OAAO,GAAG;;;;;;;;;;;AAa/B,SAAgB,6BAA6B,aAA6B;AACxE,KAAI,OAAO,WAAW,eAAe,OAAO,YAC1C,QAAO,OAAO;CAGhB,MAAM,YAAY,0BAA0B,YAAY;AAExD,KAAI,OAAO,WAAW,YACpB,CAAC,OAAmC,cAAc;AAGpD,QAAO;;;;;AAMT,SAAgB,cAAc,mBAA2B;AACvD,QAAO,EACL,SAAS,EACP,gBAAgB,mBACjB,EACF;;;;;ACxDH,MAAa,qBAAqB,OAAO,QAA0B,UAAmB,EAAE,KAAK;CAC3F,MAAM,SAAS,EAAE,OAAO;EACtB,eAAe,EAAE,KACf,EAAE,OAAO,WAAW,EACpB,EAAE,SAAS,WAAW,EACtB,EAAE,UAAU,GAAG,UAAU,EACzB,EAAE,UAAU,IAAI,UAAU,CAC3B;EACD,gBAAgB,EAAE,KAAK,EAAE,OAAO,WAAW,EAAE,EAAE,SAAS,WAAW,EAAE,EAAE,MAAM,UAAU,CAAC;EACxF,kBAAkB,EAAE,KAAK,EAAE,OAAO,WAAW,EAAE,EAAE,SAAS,WAAW,CAAC;EACtE,mBAAmB,QAAQ,kBACvB,EAAE,KAAK,EAAE,OAAO,WAAW,CAAC,GAC5B,EAAE,KAAK,EAAE,OAAO,WAAW,EAAE,EAAE,SAAS,WAAW,CAAC;EACzD,CAAC;CAEF,MAAM,SAAS,EAAE,UAAU,QAAQ,OAAO;AAE1C,KAAI,OAAO,OAOT,QAAO;EAAE,WAAW;EAAO,QANZ,OAAO,OAAO,QAAQ,QAAQ,UAAU;GACrD,MAAM,QAAQ,EAAE,WAAW,MAAM;AAEjC,UAAO,SAAS,MAAM,SAAS,WAAW,aAAc,MAAM;AAC9D,UAAO;KACN,EAAE,CAAqB;EACS;AAGrC,QAAO,EAAE,WAAW,MAAM;;;;;AC7B5B,MAAa,KAAK,aAAqB;CACrC,MAAM,MAAM,SAAS,cAAc,SAAS;AAC5C,KAAI,CAAC,IACH,OAAM,IAAI,MAAM,sCAAsC,WAAW;AAEnE,QAAO;;AAGT,MAAa,uBACX,kBACG;AAEL,MAAa,wBAAwB,MAAc,SAAiB,WAAoC;CACtG,MAAM,SAAS,SAAS,cAAc,SAAS;CAG/C,MAAM,kBADe,IAAI,gBAAgB,OAAO,CACX,UAAU;AAE/C,QAAO,MAAM,GAAG,QAAQ,aAAa,OAAO,kBAAkB,IAAI,oBAAoB;AAEtF,QAAO,OAAO,OAAO,OAAO;EAAE,OAAO;EAAQ,QAAQ;EAAQ,QAAQ;EAAQ,CAAC;AAE9E,QAAO;;;;;AAMT,SAAgB,uBAAuB;AACrC,QAAO;EACL,WAAW;EACX,aAAa;GACX,WAAW,UAAU;GACrB,UAAU,UAAU;GACpB,cAAc,OAAO,OAAO;GAC5B,aAAa,OAAO,OAAO;GAC3B,YAAY,OAAO,OAAO;GAC1B,UAAU,KAAK,gBAAgB,CAAC,iBAAiB,CAAC;GACnD;EACD,oBAAoB;EACrB"}