@payment-kit-js/vanilla 0.1.0-alpha.0

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 (51) hide show
  1. package/README.md +755 -0
  2. package/dist/cardsetupintent-D2gBMj3e.d.mts +35 -0
  3. package/dist/cardsetupintent-D2gBMj3e.d.mts.map +1 -0
  4. package/dist/connect-card-DO2EJxu6.mjs +19 -0
  5. package/dist/connect-card-DO2EJxu6.mjs.map +1 -0
  6. package/dist/connect-card-EaOlRbPS.d.mts +25 -0
  7. package/dist/connect-card-EaOlRbPS.d.mts.map +1 -0
  8. package/dist/connect-tunnel-x-BhVAej5Q.mjs +44 -0
  9. package/dist/connect-tunnel-x-BhVAej5Q.mjs.map +1 -0
  10. package/dist/connect-tunnel-x-Ce423Pa2.d.mts +92 -0
  11. package/dist/connect-tunnel-x-Ce423Pa2.d.mts.map +1 -0
  12. package/dist/index.d.mts +11 -0
  13. package/dist/index.d.mts.map +1 -0
  14. package/dist/index.mjs +69 -0
  15. package/dist/index.mjs.map +1 -0
  16. package/dist/next-action-handlers-DTsWjUIA.mjs +53 -0
  17. package/dist/next-action-handlers-DTsWjUIA.mjs.map +1 -0
  18. package/dist/payment-methods/card.d.mts +22 -0
  19. package/dist/payment-methods/card.d.mts.map +1 -0
  20. package/dist/payment-methods/card.mjs +183 -0
  21. package/dist/payment-methods/card.mjs.map +1 -0
  22. package/dist/payment-methods/google-pay.d.mts +49 -0
  23. package/dist/payment-methods/google-pay.d.mts.map +1 -0
  24. package/dist/payment-methods/google-pay.mjs +135 -0
  25. package/dist/payment-methods/google-pay.mjs.map +1 -0
  26. package/dist/payment-methods/next-action-handlers.d.mts +24 -0
  27. package/dist/payment-methods/next-action-handlers.d.mts.map +1 -0
  28. package/dist/payment-methods/next-action-handlers.mjs +3 -0
  29. package/dist/payment-methods/paypal.d.mts +49 -0
  30. package/dist/payment-methods/paypal.d.mts.map +1 -0
  31. package/dist/payment-methods/paypal.mjs +93 -0
  32. package/dist/payment-methods/paypal.mjs.map +1 -0
  33. package/dist/payment-methods/stripe-google-pay-adapter.d.mts +2 -0
  34. package/dist/payment-methods/stripe-google-pay-adapter.mjs +3 -0
  35. package/dist/penpal/connect-card.d.mts +4 -0
  36. package/dist/penpal/connect-card.mjs +4 -0
  37. package/dist/penpal/connect-tunnel-x.d.mts +3 -0
  38. package/dist/penpal/connect-tunnel-x.mjs +4 -0
  39. package/dist/penpal-BFKeZTVz.mjs +16 -0
  40. package/dist/penpal-BFKeZTVz.mjs.map +1 -0
  41. package/dist/publiccardcheckoutresponse-wxFCeVdO.d.mts +40 -0
  42. package/dist/publiccardcheckoutresponse-wxFCeVdO.d.mts.map +1 -0
  43. package/dist/stripe-google-pay-adapter-CkV5HWI-.d.mts +54 -0
  44. package/dist/stripe-google-pay-adapter-CkV5HWI-.d.mts.map +1 -0
  45. package/dist/stripe-google-pay-adapter-DMDArVp2.mjs +163 -0
  46. package/dist/stripe-google-pay-adapter-DMDArVp2.mjs.map +1 -0
  47. package/dist/types-6mOKdjCh.d.mts +64 -0
  48. package/dist/types-6mOKdjCh.d.mts.map +1 -0
  49. package/dist/utils-h0dxplHy.mjs +62 -0
  50. package/dist/utils-h0dxplHy.mjs.map +1 -0
  51. package/package.json +60 -0
@@ -0,0 +1,163 @@
1
+ //#region src/payment-methods/stripe-google-pay-adapter.ts
2
+ let GooglePayMockScenario = /* @__PURE__ */ function(GooglePayMockScenario$1) {
3
+ GooglePayMockScenario$1["None"] = "none";
4
+ GooglePayMockScenario$1["Success"] = "success";
5
+ GooglePayMockScenario$1["Cancelled"] = "cancelled";
6
+ return GooglePayMockScenario$1;
7
+ }({});
8
+ var StripeGooglePayAdapter = class {
9
+ stripe = null;
10
+ paymentRequest = null;
11
+ mockScenario;
12
+ constructor(mockScenario) {
13
+ this.mockScenario = mockScenario ?? GooglePayMockScenario.None;
14
+ }
15
+ initialize(publishableKey) {
16
+ switch (this.mockScenario) {
17
+ case GooglePayMockScenario.None: {
18
+ console.log("[GooglePay] initialize called");
19
+ if (!window.Stripe) {
20
+ console.log("[GooglePay] Stripe.js not loaded");
21
+ return false;
22
+ }
23
+ this.stripe = window.Stripe(publishableKey);
24
+ const success = this.stripe !== null;
25
+ console.log("[GooglePay] initialize result:", success);
26
+ return success;
27
+ }
28
+ case GooglePayMockScenario.Success:
29
+ case GooglePayMockScenario.Cancelled:
30
+ console.log("[MockGooglePay] initialize called");
31
+ console.log("[MockGooglePay] initialize result:", true);
32
+ return true;
33
+ }
34
+ }
35
+ createPaymentRequest(config) {
36
+ switch (this.mockScenario) {
37
+ case GooglePayMockScenario.None:
38
+ console.log("[GooglePay] createPaymentRequest called", config);
39
+ if (!this.stripe) throw new Error("Stripe not initialized");
40
+ this.paymentRequest = this.stripe.paymentRequest(config);
41
+ console.log("[GooglePay] paymentRequest created");
42
+ return;
43
+ case GooglePayMockScenario.Success:
44
+ case GooglePayMockScenario.Cancelled:
45
+ console.log("[MockGooglePay] createPaymentRequest called", config);
46
+ return;
47
+ }
48
+ }
49
+ async canMakePayment() {
50
+ switch (this.mockScenario) {
51
+ case GooglePayMockScenario.None: {
52
+ console.log("[GooglePay] canMakePayment called");
53
+ if (!this.paymentRequest) {
54
+ console.log("[GooglePay] canMakePayment: no paymentRequest");
55
+ return false;
56
+ }
57
+ const result = await this.paymentRequest.canMakePayment();
58
+ const isAvailable = result?.googlePay ?? false;
59
+ console.log("[GooglePay] canMakePayment result:", {
60
+ result,
61
+ isAvailable
62
+ });
63
+ return isAvailable;
64
+ }
65
+ case GooglePayMockScenario.Success:
66
+ case GooglePayMockScenario.Cancelled:
67
+ console.log("[MockGooglePay] canMakePayment called");
68
+ console.log("[MockGooglePay] canMakePayment result:", {
69
+ result: { googlePay: true },
70
+ isAvailable: true
71
+ });
72
+ return true;
73
+ }
74
+ }
75
+ async showPaymentSheet() {
76
+ switch (this.mockScenario) {
77
+ case GooglePayMockScenario.None:
78
+ console.log("[GooglePay] showPaymentSheet called");
79
+ if (!this.paymentRequest) {
80
+ console.log("[GooglePay] showPaymentSheet: no paymentRequest");
81
+ return {
82
+ success: false,
83
+ error: "Payment request not created"
84
+ };
85
+ }
86
+ return new Promise((resolve) => {
87
+ this.paymentRequest.on("paymentmethod", (event) => {
88
+ console.log("[GooglePay] showPaymentSheet: paymentmethod event", { paymentMethodId: event.paymentMethod.id });
89
+ resolve({
90
+ success: true,
91
+ paymentMethodId: event.paymentMethod.id,
92
+ complete: (status) => {
93
+ console.log("[GooglePay] complete called:", status);
94
+ event.complete(status);
95
+ }
96
+ });
97
+ });
98
+ this.paymentRequest.on("cancel", () => {
99
+ console.log("[GooglePay] showPaymentSheet: cancelled by user");
100
+ resolve({
101
+ success: false,
102
+ cancelled: true
103
+ });
104
+ });
105
+ console.log("[GooglePay] showing payment sheet...");
106
+ this.paymentRequest.show();
107
+ });
108
+ case GooglePayMockScenario.Success:
109
+ console.log("[MockGooglePay] showPaymentSheet: success");
110
+ await new Promise((resolve) => setTimeout(resolve, 500));
111
+ return {
112
+ success: true,
113
+ paymentMethodId: "pm_mock_123456789",
114
+ complete: (status) => console.log(`[MockGooglePay] complete: ${status}`)
115
+ };
116
+ case GooglePayMockScenario.Cancelled:
117
+ console.log("[MockGooglePay] showPaymentSheet: cancelled");
118
+ await new Promise((resolve) => setTimeout(resolve, 500));
119
+ return {
120
+ success: false,
121
+ cancelled: true
122
+ };
123
+ }
124
+ }
125
+ async confirmCardSetup(clientSecret, paymentMethodId) {
126
+ switch (this.mockScenario) {
127
+ case GooglePayMockScenario.None: {
128
+ console.log("[GooglePay] confirmCardSetup called", {
129
+ clientSecret: `${clientSecret.slice(0, 20)}...`,
130
+ paymentMethodId
131
+ });
132
+ if (!this.stripe) {
133
+ console.log("[GooglePay] confirmCardSetup: Stripe not initialized");
134
+ return {
135
+ success: false,
136
+ error: "Stripe not initialized"
137
+ };
138
+ }
139
+ const { error } = await this.stripe.confirmCardSetup(clientSecret, { payment_method: paymentMethodId });
140
+ if (error) {
141
+ console.log("[GooglePay] confirmCardSetup error:", error);
142
+ return {
143
+ success: false,
144
+ error: error.message ?? "Card setup failed"
145
+ };
146
+ }
147
+ console.log("[GooglePay] confirmCardSetup success");
148
+ return { success: true };
149
+ }
150
+ case GooglePayMockScenario.Success:
151
+ console.log("[MockGooglePay] confirmCardSetup called", {
152
+ clientSecret,
153
+ paymentMethodId
154
+ });
155
+ return { success: true };
156
+ case GooglePayMockScenario.Cancelled: throw new Error("confirmCardSetup should not be called when scenario is Cancelled");
157
+ }
158
+ }
159
+ };
160
+
161
+ //#endregion
162
+ export { StripeGooglePayAdapter as n, GooglePayMockScenario as t };
163
+ //# sourceMappingURL=stripe-google-pay-adapter-DMDArVp2.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"stripe-google-pay-adapter-DMDArVp2.mjs","names":[],"sources":["../src/payment-methods/stripe-google-pay-adapter.ts"],"sourcesContent":["import type { PaymentRequest, PaymentRequestPaymentMethodEvent, Stripe, StripeConstructor } from \"@stripe/stripe-js\";\n\n// Stripe.js must be loaded via script tag for PCI compliance\ndeclare global {\n interface Window {\n Stripe?: StripeConstructor;\n }\n}\n\nexport interface PaymentRequestConfig {\n country: string;\n currency: string;\n total: { label: string; amount: number };\n requestPayerName: boolean;\n requestPayerEmail: boolean;\n}\n\nexport type ShowPaymentSheetResult =\n | { success: true; paymentMethodId: string; complete: (status: \"success\" | \"fail\") => void }\n | { success: false; cancelled: true }\n | { success: false; error: string };\n\nexport type ConfirmResult = { success: true } | { success: false; error: string };\n\nexport enum GooglePayMockScenario {\n None = \"none\",\n Success = \"success\",\n Cancelled = \"cancelled\",\n}\n\nexport class StripeGooglePayAdapter {\n private stripe: Stripe | null = null;\n private paymentRequest: PaymentRequest | null = null;\n private mockScenario: GooglePayMockScenario;\n\n constructor(mockScenario?: GooglePayMockScenario) {\n this.mockScenario = mockScenario ?? GooglePayMockScenario.None;\n }\n\n initialize(publishableKey: string): boolean {\n switch (this.mockScenario) {\n case GooglePayMockScenario.None: {\n console.log(\"[GooglePay] initialize called\");\n if (!window.Stripe) {\n console.log(\"[GooglePay] Stripe.js not loaded\");\n return false;\n }\n this.stripe = window.Stripe(publishableKey);\n const success = this.stripe !== null;\n console.log(\"[GooglePay] initialize result:\", success);\n return success;\n }\n case GooglePayMockScenario.Success:\n case GooglePayMockScenario.Cancelled: {\n console.log(\"[MockGooglePay] initialize called\");\n console.log(\"[MockGooglePay] initialize result:\", true);\n return true;\n }\n }\n }\n\n createPaymentRequest(config: PaymentRequestConfig): void {\n switch (this.mockScenario) {\n case GooglePayMockScenario.None: {\n console.log(\"[GooglePay] createPaymentRequest called\", config);\n if (!this.stripe) {\n throw new Error(\"Stripe not initialized\");\n }\n this.paymentRequest = this.stripe.paymentRequest(config);\n console.log(\"[GooglePay] paymentRequest created\");\n return;\n }\n case GooglePayMockScenario.Success:\n case GooglePayMockScenario.Cancelled: {\n console.log(\"[MockGooglePay] createPaymentRequest called\", config);\n return;\n }\n }\n }\n\n async canMakePayment(): Promise<boolean> {\n switch (this.mockScenario) {\n case GooglePayMockScenario.None: {\n console.log(\"[GooglePay] canMakePayment called\");\n if (!this.paymentRequest) {\n console.log(\"[GooglePay] canMakePayment: no paymentRequest\");\n return false;\n }\n const result = await this.paymentRequest.canMakePayment();\n const isAvailable = result?.googlePay ?? false;\n console.log(\"[GooglePay] canMakePayment result:\", { result, isAvailable });\n return isAvailable;\n }\n case GooglePayMockScenario.Success:\n case GooglePayMockScenario.Cancelled: {\n console.log(\"[MockGooglePay] canMakePayment called\");\n console.log(\"[MockGooglePay] canMakePayment result:\", { result: { googlePay: true }, isAvailable: true });\n return true;\n }\n }\n }\n\n async showPaymentSheet(): Promise<ShowPaymentSheetResult> {\n switch (this.mockScenario) {\n case GooglePayMockScenario.None: {\n console.log(\"[GooglePay] showPaymentSheet called\");\n if (!this.paymentRequest) {\n console.log(\"[GooglePay] showPaymentSheet: no paymentRequest\");\n return { success: false, error: \"Payment request not created\" };\n }\n\n return new Promise((resolve) => {\n // biome-ignore lint/style/noNonNullAssertion: checked above\n this.paymentRequest!.on(\"paymentmethod\", (event: PaymentRequestPaymentMethodEvent) => {\n console.log(\"[GooglePay] showPaymentSheet: paymentmethod event\", {\n paymentMethodId: event.paymentMethod.id,\n });\n resolve({\n success: true,\n paymentMethodId: event.paymentMethod.id,\n complete: (status) => {\n console.log(\"[GooglePay] complete called:\", status);\n event.complete(status);\n },\n });\n });\n\n // biome-ignore lint/style/noNonNullAssertion: checked above\n this.paymentRequest!.on(\"cancel\", () => {\n console.log(\"[GooglePay] showPaymentSheet: cancelled by user\");\n resolve({ success: false, cancelled: true });\n });\n\n console.log(\"[GooglePay] showing payment sheet...\");\n // biome-ignore lint/style/noNonNullAssertion: checked above\n this.paymentRequest!.show();\n });\n }\n case GooglePayMockScenario.Success: {\n console.log(\"[MockGooglePay] showPaymentSheet: success\");\n await new Promise((resolve) => setTimeout(resolve, 500));\n return {\n success: true,\n paymentMethodId: \"pm_mock_123456789\",\n complete: (status) => console.log(`[MockGooglePay] complete: ${status}`),\n };\n }\n case GooglePayMockScenario.Cancelled: {\n console.log(\"[MockGooglePay] showPaymentSheet: cancelled\");\n await new Promise((resolve) => setTimeout(resolve, 500));\n return { success: false, cancelled: true };\n }\n }\n }\n\n async confirmCardSetup(clientSecret: string, paymentMethodId: string): Promise<ConfirmResult> {\n switch (this.mockScenario) {\n case GooglePayMockScenario.None: {\n console.log(\"[GooglePay] confirmCardSetup called\", {\n clientSecret: `${clientSecret.slice(0, 20)}...`,\n paymentMethodId,\n });\n if (!this.stripe) {\n console.log(\"[GooglePay] confirmCardSetup: Stripe not initialized\");\n return { success: false, error: \"Stripe not initialized\" };\n }\n\n const { error } = await this.stripe.confirmCardSetup(clientSecret, {\n payment_method: paymentMethodId,\n });\n\n if (error) {\n console.log(\"[GooglePay] confirmCardSetup error:\", error);\n return { success: false, error: error.message ?? \"Card setup failed\" };\n }\n\n console.log(\"[GooglePay] confirmCardSetup success\");\n return { success: true };\n }\n case GooglePayMockScenario.Success: {\n console.log(\"[MockGooglePay] confirmCardSetup called\", { clientSecret, paymentMethodId });\n return { success: true };\n }\n case GooglePayMockScenario.Cancelled: {\n throw new Error(\"confirmCardSetup should not be called when scenario is Cancelled\");\n }\n }\n }\n}\n"],"mappings":";AAwBA,IAAY,0EAAL;AACL;AACA;AACA;;;AAGF,IAAa,yBAAb,MAAoC;CAClC,AAAQ,SAAwB;CAChC,AAAQ,iBAAwC;CAChD,AAAQ;CAER,YAAY,cAAsC;AAChD,OAAK,eAAe,gBAAgB,sBAAsB;;CAG5D,WAAW,gBAAiC;AAC1C,UAAQ,KAAK,cAAb;GACE,KAAK,sBAAsB,MAAM;AAC/B,YAAQ,IAAI,gCAAgC;AAC5C,QAAI,CAAC,OAAO,QAAQ;AAClB,aAAQ,IAAI,mCAAmC;AAC/C,YAAO;;AAET,SAAK,SAAS,OAAO,OAAO,eAAe;IAC3C,MAAM,UAAU,KAAK,WAAW;AAChC,YAAQ,IAAI,kCAAkC,QAAQ;AACtD,WAAO;;GAET,KAAK,sBAAsB;GAC3B,KAAK,sBAAsB;AACzB,YAAQ,IAAI,oCAAoC;AAChD,YAAQ,IAAI,sCAAsC,KAAK;AACvD,WAAO;;;CAKb,qBAAqB,QAAoC;AACvD,UAAQ,KAAK,cAAb;GACE,KAAK,sBAAsB;AACzB,YAAQ,IAAI,2CAA2C,OAAO;AAC9D,QAAI,CAAC,KAAK,OACR,OAAM,IAAI,MAAM,yBAAyB;AAE3C,SAAK,iBAAiB,KAAK,OAAO,eAAe,OAAO;AACxD,YAAQ,IAAI,qCAAqC;AACjD;GAEF,KAAK,sBAAsB;GAC3B,KAAK,sBAAsB;AACzB,YAAQ,IAAI,+CAA+C,OAAO;AAClE;;;CAKN,MAAM,iBAAmC;AACvC,UAAQ,KAAK,cAAb;GACE,KAAK,sBAAsB,MAAM;AAC/B,YAAQ,IAAI,oCAAoC;AAChD,QAAI,CAAC,KAAK,gBAAgB;AACxB,aAAQ,IAAI,gDAAgD;AAC5D,YAAO;;IAET,MAAM,SAAS,MAAM,KAAK,eAAe,gBAAgB;IACzD,MAAM,cAAc,QAAQ,aAAa;AACzC,YAAQ,IAAI,sCAAsC;KAAE;KAAQ;KAAa,CAAC;AAC1E,WAAO;;GAET,KAAK,sBAAsB;GAC3B,KAAK,sBAAsB;AACzB,YAAQ,IAAI,wCAAwC;AACpD,YAAQ,IAAI,0CAA0C;KAAE,QAAQ,EAAE,WAAW,MAAM;KAAE,aAAa;KAAM,CAAC;AACzG,WAAO;;;CAKb,MAAM,mBAAoD;AACxD,UAAQ,KAAK,cAAb;GACE,KAAK,sBAAsB;AACzB,YAAQ,IAAI,sCAAsC;AAClD,QAAI,CAAC,KAAK,gBAAgB;AACxB,aAAQ,IAAI,kDAAkD;AAC9D,YAAO;MAAE,SAAS;MAAO,OAAO;MAA+B;;AAGjE,WAAO,IAAI,SAAS,YAAY;AAE9B,UAAK,eAAgB,GAAG,kBAAkB,UAA4C;AACpF,cAAQ,IAAI,qDAAqD,EAC/D,iBAAiB,MAAM,cAAc,IACtC,CAAC;AACF,cAAQ;OACN,SAAS;OACT,iBAAiB,MAAM,cAAc;OACrC,WAAW,WAAW;AACpB,gBAAQ,IAAI,gCAAgC,OAAO;AACnD,cAAM,SAAS,OAAO;;OAEzB,CAAC;OACF;AAGF,UAAK,eAAgB,GAAG,gBAAgB;AACtC,cAAQ,IAAI,kDAAkD;AAC9D,cAAQ;OAAE,SAAS;OAAO,WAAW;OAAM,CAAC;OAC5C;AAEF,aAAQ,IAAI,uCAAuC;AAEnD,UAAK,eAAgB,MAAM;MAC3B;GAEJ,KAAK,sBAAsB;AACzB,YAAQ,IAAI,4CAA4C;AACxD,UAAM,IAAI,SAAS,YAAY,WAAW,SAAS,IAAI,CAAC;AACxD,WAAO;KACL,SAAS;KACT,iBAAiB;KACjB,WAAW,WAAW,QAAQ,IAAI,6BAA6B,SAAS;KACzE;GAEH,KAAK,sBAAsB;AACzB,YAAQ,IAAI,8CAA8C;AAC1D,UAAM,IAAI,SAAS,YAAY,WAAW,SAAS,IAAI,CAAC;AACxD,WAAO;KAAE,SAAS;KAAO,WAAW;KAAM;;;CAKhD,MAAM,iBAAiB,cAAsB,iBAAiD;AAC5F,UAAQ,KAAK,cAAb;GACE,KAAK,sBAAsB,MAAM;AAC/B,YAAQ,IAAI,uCAAuC;KACjD,cAAc,GAAG,aAAa,MAAM,GAAG,GAAG,CAAC;KAC3C;KACD,CAAC;AACF,QAAI,CAAC,KAAK,QAAQ;AAChB,aAAQ,IAAI,uDAAuD;AACnE,YAAO;MAAE,SAAS;MAAO,OAAO;MAA0B;;IAG5D,MAAM,EAAE,UAAU,MAAM,KAAK,OAAO,iBAAiB,cAAc,EACjE,gBAAgB,iBACjB,CAAC;AAEF,QAAI,OAAO;AACT,aAAQ,IAAI,uCAAuC,MAAM;AACzD,YAAO;MAAE,SAAS;MAAO,OAAO,MAAM,WAAW;MAAqB;;AAGxE,YAAQ,IAAI,uCAAuC;AACnD,WAAO,EAAE,SAAS,MAAM;;GAE1B,KAAK,sBAAsB;AACzB,YAAQ,IAAI,2CAA2C;KAAE;KAAc;KAAiB,CAAC;AACzF,WAAO,EAAE,SAAS,MAAM;GAE1B,KAAK,sBAAsB,UACzB,OAAM,IAAI,MAAM,mEAAmE"}
@@ -0,0 +1,64 @@
1
+ import { t as TunnelXIFrameConnection } from "./connect-tunnel-x-Ce423Pa2.mjs";
2
+ import { t as CardErrorCode } from "./connect-card-EaOlRbPS.mjs";
3
+
4
+ //#region src/types.d.ts
5
+ type FormFieldNames = "customer_name" | "customer_email" | "customer_country" | "customer_zip_code";
6
+ type FormErrorCodes = "required" | "invalid";
7
+ type TInternalFuncs = {
8
+ submitPayment: (fields: PaymentKitFields, options?: unknown) => Promise<{
9
+ data: {
10
+ [key: string]: unknown;
11
+ };
12
+ errors?: never;
13
+ } | {
14
+ data?: never;
15
+ errors: PaymentKitErrors;
16
+ }>;
17
+ cleanup?: () => void;
18
+ };
19
+ type PaymentKit = <T extends readonly PaymentMethod<unknown>[]>(options: {
20
+ baseUrl: string;
21
+ apiBaseUrl: string;
22
+ secureToken: string;
23
+ paymentMethods: T;
24
+ }) => ExternalFuncsMapByPm<T> & {
25
+ submit: PaymentKitSubmitHandler<T>;
26
+ cleanup: () => void;
27
+ };
28
+ type PaymentKitSubmitHandler<T extends readonly PaymentMethod<unknown>[]> = <N extends keyof ExternalFuncsMapByPm<T>>(options: {
29
+ fields: PaymentKitFields;
30
+ paymentMethod: N;
31
+ options?: unknown;
32
+ onError: (error: PaymentKitErrors) => void;
33
+ onSuccess: (data: {
34
+ [key: string]: unknown;
35
+ }) => void;
36
+ }) => void;
37
+ type PaymentKitStates = {
38
+ baseUrl: string;
39
+ apiBaseUrl: string;
40
+ secureToken: string;
41
+ tunnelXConnection: TunnelXIFrameConnection;
42
+ };
43
+ type PaymentKitErrors = {
44
+ root?: string;
45
+ card_pan?: CardErrorCode;
46
+ card_exp?: CardErrorCode;
47
+ card_cvc?: CardErrorCode;
48
+ paypal?: string;
49
+ google_pay?: string;
50
+ processor_id?: string;
51
+ amount?: string;
52
+ currency?: string;
53
+ country?: string;
54
+ } & { [key in FormFieldNames]?: FormErrorCodes | string };
55
+ type PaymentKitFields = { [key in FormFieldNames]: string };
56
+ type PaymentMethod<TExternalFuncs = unknown, TName = string> = (paymentKitStates: PaymentKitStates) => {
57
+ name: TName;
58
+ externalFuncs: TExternalFuncs;
59
+ internalFuncs: TInternalFuncs;
60
+ };
61
+ type ExternalFuncsMapByPm<T extends readonly PaymentMethod<unknown>[]> = { [K in T[number] as ReturnType<K>["name"]]: ReturnType<K>["externalFuncs"] };
62
+ //#endregion
63
+ export { PaymentKitFields as n, PaymentMethod as r, PaymentKit as t };
64
+ //# sourceMappingURL=types-6mOKdjCh.d.mts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types-6mOKdjCh.d.mts","names":[],"sources":["../src/types.ts"],"sourcesContent":[],"mappings":";;;;KAGK,cAAA;KAEO,cAAA;AAFP,KAIO,cAAA,GAJO;EAEP,aAAA,EAAA,CAAA,MAAc,EAId,gBAJc,EAAA,OAAA,CAAA,EAAA,OAAA,EAAA,GAMnB,OANmB,CAAA;IAEd,IAAA,EAAA;MAEA,CAAA,GAAA,EAAA,MAAA,CAAA,EAAA,OAAA;IAEkF,CAAA;IAAvF,MAAA,CAAA,EAAA,KAAA;EAAO,CAAA,GAAA;IAIF,IAAA,CAAA,EAAA,KAAU;IAAuB,MAAA,EAJiD,gBAIjD;EAK3B,CAAA,CAAA;EACS,OAAA,CAAA,EAAA,GAAA,GAAA,IAAA;CAArB;AAC4B,KAPtB,UAAA,GAOsB,CAAA,UAAA,SAPW,aAOX,CAAA,OAAA,CAAA,EAAA,CAAA,CAAA,OAAA,EAAA;EAAxB,OAAA,EAAA,MAAA;EAAuB,UAAA,EAAA,MAAA;EAI5B,WAAA,EAAA,MAAA;EAA2C,cAAA,EAN9B,CAM8B;CACT,EAAA,GANjC,oBAMiC,CANZ,CAMY,CAAA,GAAA;EAArB,MAAA,EALR,uBAKQ,CALgB,CAKhB,CAAA;EAER,OAAA,EAAA,GAAA,GAAA,IAAA;CACO;KAJZ,uBAMc,CAAA,UAAA,SAN6B,aAM7B,CAAA,OAAA,CAAA,EAAA,CAAA,GAAA,CAAA,UAAA,MALD,oBAKC,CALoB,CAKpB,CAAA,CAAA,CAAA,OAAA,EAAA;EAAgB,MAAA,EAHzB,gBAGyB;EAIvB,aAAA,EANK,CAML;EAOA,OAAA,CAAA,EAAA,OAAA;EAEC,OAAA,EAAA,CAAA,KAAA,EAbM,gBAaN,EAAA,GAAA,IAAA;EACA,SAAA,EAAA,CAAA,IAAA,EAAA;IACA,CAAA,GAAA,EAAA,MAAA,CAAA,EAAA,OAAA;EAOC,CAAA,EAAA,GAAA,IAAA;CAAkB,EAAA,GAAA,IAAA;AAAc,KAlBlC,gBAAA,GAkBkC;EAElC,OAAA,EAAA,MAAA;EAEA,UAAA,EAAA,MAAa;EAAgE,WAAA,EAAA,MAAA;EACjF,iBAAA,EAnBa,uBAmBb;CACS;AACA,KAlBL,gBAAA,GAkBK;EAAc,IAAA,CAAA,EAAA,MAAA;EAGnB,QAAA,CAAA,EAnBC,aAmBmB;EAAoB,QAAA,CAAA,EAlBvC,aAkBuC;EAC5C,QAAA,CAAA,EAlBK,aAkBL;EAAwB,MAAA,CAAA,EAAA,MAAA;EAAX,UAAA,CAAA,EAAA,MAAA;EAAmC,YAAA,CAAA,EAAA,MAAA;EAAX,MAAA,CAAA,EAAA,MAAA;EAAU,QAAA,CAAA,EAAA,MAAA;;cAXzC,kBAAkB;KAEpB,gBAAA,aAA6B;KAE7B,6EAA6E;QACjF;iBACS;iBACA;;KAGL,wCAAwC,oCAC5C,aAAa,WAAW,aAAa,WAAW"}
@@ -0,0 +1,62 @@
1
+ import * as v from "valibot";
2
+
3
+ //#region src/utils/validate-form-fields.ts
4
+ const validateFormFields = async (fields, options = {}) => {
5
+ const schema = v.object({
6
+ customer_name: v.pipe(v.string("required"), v.nonEmpty("required"), v.minLength(4, "invalid"), v.maxLength(40, "invalid")),
7
+ customer_email: v.pipe(v.string("required"), v.nonEmpty("required"), v.email("invalid")),
8
+ customer_country: v.pipe(v.string("required"), v.nonEmpty("required")),
9
+ customer_zip_code: options.optionalZipCode ? v.pipe(v.string("required")) : v.pipe(v.string("required"), v.nonEmpty("required"))
10
+ });
11
+ const result = v.safeParse(schema, fields);
12
+ if (result.issues) return {
13
+ isSuccess: false,
14
+ errors: result.issues.reduce((errors, issue) => {
15
+ const field = v.getDotPath(issue);
16
+ errors[field] = issue.kind === "schema" ? "required" : issue.message;
17
+ return errors;
18
+ }, {})
19
+ };
20
+ return { isSuccess: true };
21
+ };
22
+
23
+ //#endregion
24
+ //#region src/utils/index.ts
25
+ const $ = (selector) => {
26
+ const ele = document.querySelector(selector);
27
+ if (!ele) throw new Error(`Cannot find element with selector: ${selector}`);
28
+ return ele;
29
+ };
30
+ const definePaymentMethod = (paymentMethod) => paymentMethod;
31
+ const createCheckoutIFrame = (type, baseUrl, params) => {
32
+ const iframe = document.createElement("iframe");
33
+ const searchParamsStr = new URLSearchParams(params).toString();
34
+ iframe.src = `${baseUrl}/embeds/v1/${type}${searchParamsStr ? `?${searchParamsStr}` : ""}`;
35
+ Object.assign(iframe.style, {
36
+ width: "100%",
37
+ height: "100%",
38
+ border: "none"
39
+ });
40
+ return iframe;
41
+ };
42
+ /**
43
+ * Collects browser and client information for fraud detection.
44
+ */
45
+ function collectFraudMetadata() {
46
+ return {
47
+ ipAddress: void 0,
48
+ browserInfo: {
49
+ userAgent: navigator.userAgent,
50
+ language: navigator.language,
51
+ screenHeight: window.screen.height,
52
+ screenWidth: window.screen.width,
53
+ colorDepth: window.screen.colorDepth,
54
+ timezone: Intl.DateTimeFormat().resolvedOptions().timeZone
55
+ },
56
+ processorFraudInfo: void 0
57
+ };
58
+ }
59
+
60
+ //#endregion
61
+ export { validateFormFields as a, definePaymentMethod as i, collectFraudMetadata as n, createCheckoutIFrame as r, $ as t };
62
+ //# sourceMappingURL=utils-h0dxplHy.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"utils-h0dxplHy.mjs","names":[],"sources":["../src/utils/validate-form-fields.ts","../src/utils/index.ts"],"sourcesContent":["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 { 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":";;;AAOA,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;;;;;AC9B5B,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"}
package/package.json ADDED
@@ -0,0 +1,60 @@
1
+ {
2
+ "name": "@payment-kit-js/vanilla",
3
+ "version": "0.1.0-alpha.0",
4
+ "main": "./dist/index.mjs",
5
+ "types": "./dist/index.d.mts",
6
+ "module": "./dist/index.mjs",
7
+ "exports": {
8
+ ".": "./dist/index.mjs",
9
+ "./payment-methods/card": "./dist/payment-methods/card.mjs",
10
+ "./payment-methods/google-pay": "./dist/payment-methods/google-pay.mjs",
11
+ "./payment-methods/next-action-handlers": "./dist/payment-methods/next-action-handlers.mjs",
12
+ "./payment-methods/paypal": "./dist/payment-methods/paypal.mjs",
13
+ "./payment-methods/stripe-google-pay-adapter": "./dist/payment-methods/stripe-google-pay-adapter.mjs",
14
+ "./penpal/connect-card": "./dist/penpal/connect-card.mjs",
15
+ "./penpal/connect-tunnel-x": "./dist/penpal/connect-tunnel-x.mjs",
16
+ "./package.json": "./package.json"
17
+ },
18
+ "license": "MIT",
19
+ "description": "Vanilla JavaScript SDK for PaymentKit",
20
+ "keywords": [
21
+ "payment",
22
+ "payments",
23
+ "paymentkit",
24
+ "checkout",
25
+ "stripe",
26
+ "paypal",
27
+ "googlepay",
28
+ "card",
29
+ "sdk"
30
+ ],
31
+ "repository": {
32
+ "type": "git",
33
+ "url": "https://github.com/ProjectPayAdly/core.git",
34
+ "directory": "frontend/payment-kit-js/vanilla"
35
+ },
36
+ "bugs": {
37
+ "url": "https://github.com/ProjectPayAdly/core/issues"
38
+ },
39
+ "homepage": "https://github.com/ProjectPayAdly/core#readme",
40
+ "files": [
41
+ "dist",
42
+ "README.md"
43
+ ],
44
+ "scripts": {
45
+ "dev": "yarn tsdown --watch ./src",
46
+ "build": "yarn tsdown"
47
+ },
48
+ "packageManager": "yarn@4.10.3",
49
+ "dependencies": {
50
+ "penpal": "^7.0.4",
51
+ "valibot": "^1.1.0"
52
+ },
53
+ "devDependencies": {
54
+ "@pkg/sdk": "0.10.16",
55
+ "@pkg/tsconfig": "0.0.0",
56
+ "tsdown": "^0.15.10",
57
+ "typescript": "^5.9.3"
58
+ },
59
+ "stableVersion": "0.1.0"
60
+ }