@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.
- package/README.md +755 -0
- package/dist/cardsetupintent-D2gBMj3e.d.mts +35 -0
- package/dist/cardsetupintent-D2gBMj3e.d.mts.map +1 -0
- package/dist/connect-card-DO2EJxu6.mjs +19 -0
- package/dist/connect-card-DO2EJxu6.mjs.map +1 -0
- package/dist/connect-card-EaOlRbPS.d.mts +25 -0
- package/dist/connect-card-EaOlRbPS.d.mts.map +1 -0
- package/dist/connect-tunnel-x-BhVAej5Q.mjs +44 -0
- package/dist/connect-tunnel-x-BhVAej5Q.mjs.map +1 -0
- package/dist/connect-tunnel-x-Ce423Pa2.d.mts +92 -0
- package/dist/connect-tunnel-x-Ce423Pa2.d.mts.map +1 -0
- package/dist/index.d.mts +11 -0
- package/dist/index.d.mts.map +1 -0
- package/dist/index.mjs +69 -0
- package/dist/index.mjs.map +1 -0
- package/dist/next-action-handlers-DTsWjUIA.mjs +53 -0
- package/dist/next-action-handlers-DTsWjUIA.mjs.map +1 -0
- package/dist/payment-methods/card.d.mts +22 -0
- package/dist/payment-methods/card.d.mts.map +1 -0
- package/dist/payment-methods/card.mjs +183 -0
- package/dist/payment-methods/card.mjs.map +1 -0
- package/dist/payment-methods/google-pay.d.mts +49 -0
- package/dist/payment-methods/google-pay.d.mts.map +1 -0
- package/dist/payment-methods/google-pay.mjs +135 -0
- package/dist/payment-methods/google-pay.mjs.map +1 -0
- package/dist/payment-methods/next-action-handlers.d.mts +24 -0
- package/dist/payment-methods/next-action-handlers.d.mts.map +1 -0
- package/dist/payment-methods/next-action-handlers.mjs +3 -0
- package/dist/payment-methods/paypal.d.mts +49 -0
- package/dist/payment-methods/paypal.d.mts.map +1 -0
- package/dist/payment-methods/paypal.mjs +93 -0
- package/dist/payment-methods/paypal.mjs.map +1 -0
- package/dist/payment-methods/stripe-google-pay-adapter.d.mts +2 -0
- package/dist/payment-methods/stripe-google-pay-adapter.mjs +3 -0
- package/dist/penpal/connect-card.d.mts +4 -0
- package/dist/penpal/connect-card.mjs +4 -0
- package/dist/penpal/connect-tunnel-x.d.mts +3 -0
- package/dist/penpal/connect-tunnel-x.mjs +4 -0
- package/dist/penpal-BFKeZTVz.mjs +16 -0
- package/dist/penpal-BFKeZTVz.mjs.map +1 -0
- package/dist/publiccardcheckoutresponse-wxFCeVdO.d.mts +40 -0
- package/dist/publiccardcheckoutresponse-wxFCeVdO.d.mts.map +1 -0
- package/dist/stripe-google-pay-adapter-CkV5HWI-.d.mts +54 -0
- package/dist/stripe-google-pay-adapter-CkV5HWI-.d.mts.map +1 -0
- package/dist/stripe-google-pay-adapter-DMDArVp2.mjs +163 -0
- package/dist/stripe-google-pay-adapter-DMDArVp2.mjs.map +1 -0
- package/dist/types-6mOKdjCh.d.mts +64 -0
- package/dist/types-6mOKdjCh.d.mts.map +1 -0
- package/dist/utils-h0dxplHy.mjs +62 -0
- package/dist/utils-h0dxplHy.mjs.map +1 -0
- 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":"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"}
|
|
@@ -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
|
+
}
|