@paygood1/collect-core 0.8.0 → 0.10.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 +30 -9
- package/dist/adapters/basistheory/customer-details-mount.d.ts +18 -0
- package/dist/adapters/basistheory/customer-details-mount.d.ts.map +1 -0
- package/dist/adapters/basistheory/customer-details-mount.js +282 -0
- package/dist/adapters/basistheory/customer-details-mount.js.map +1 -0
- package/dist/adapters/basistheory/prepare-mount-root.d.ts +8 -0
- package/dist/adapters/basistheory/prepare-mount-root.d.ts.map +1 -0
- package/dist/adapters/basistheory/prepare-mount-root.js +34 -0
- package/dist/adapters/basistheory/prepare-mount-root.js.map +1 -0
- package/dist/adapters/basistheory/provider.d.ts +2 -2
- package/dist/adapters/basistheory/provider.d.ts.map +1 -1
- package/dist/adapters/basistheory/provider.js +58 -38
- package/dist/adapters/basistheory/provider.js.map +1 -1
- package/dist/core/card-collect-core.d.ts +4 -2
- package/dist/core/card-collect-core.d.ts.map +1 -1
- package/dist/core/card-collect-core.js +12 -6
- package/dist/core/card-collect-core.js.map +1 -1
- package/dist/customer-details/mount.d.ts +18 -0
- package/dist/customer-details/mount.d.ts.map +1 -0
- package/dist/customer-details/mount.js +282 -0
- package/dist/customer-details/mount.js.map +1 -0
- package/dist/customer-details/regions.d.ts +18 -0
- package/dist/customer-details/regions.d.ts.map +1 -0
- package/dist/customer-details/regions.js +79 -0
- package/dist/customer-details/regions.js.map +1 -0
- package/dist/customer-details/types.d.ts +24 -0
- package/dist/customer-details/types.d.ts.map +1 -0
- package/dist/customer-details/types.js +57 -0
- package/dist/customer-details/types.js.map +1 -0
- package/dist/index.d.ts +7 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +4 -0
- package/dist/index.js.map +1 -1
- package/dist/ports/tokenization-provider.d.ts +2 -2
- package/dist/ports/tokenization-provider.d.ts.map +1 -1
- package/dist/runtime/element-manager.d.ts +6 -2
- package/dist/runtime/element-manager.d.ts.map +1 -1
- package/dist/runtime/element-manager.js +28 -2
- package/dist/runtime/element-manager.js.map +1 -1
- package/dist/runtime/prepare-mount-root.d.ts +8 -0
- package/dist/runtime/prepare-mount-root.d.ts.map +1 -0
- package/dist/runtime/prepare-mount-root.js +35 -0
- package/dist/runtime/prepare-mount-root.js.map +1 -0
- package/dist/runtime/tokenize.d.ts +2 -2
- package/dist/runtime/tokenize.d.ts.map +1 -1
- package/dist/runtime/tokenize.js +2 -2
- package/dist/runtime/tokenize.js.map +1 -1
- package/dist/types.d.ts +23 -3
- package/dist/types.d.ts.map +1 -1
- package/dist/types.js +2 -0
- package/dist/types.js.map +1 -1
- package/dist/validation/config.d.ts +1 -0
- package/dist/validation/config.d.ts.map +1 -1
- package/dist/validation/config.js +10 -1
- package/dist/validation/config.js.map +1 -1
- package/package.json +2 -2
package/README.md
CHANGED
|
@@ -112,14 +112,24 @@ const core = await createCardCollectCore(
|
|
|
112
112
|
},
|
|
113
113
|
{
|
|
114
114
|
onReady: () => console.log("ready"),
|
|
115
|
-
onTokenized: (result) =>
|
|
115
|
+
onTokenized: (result) => {
|
|
116
|
+
if (result.kind === "token_intent") {
|
|
117
|
+
console.log(result.tokenIntentId);
|
|
118
|
+
} else {
|
|
119
|
+
console.log(result.tokenId);
|
|
120
|
+
}
|
|
121
|
+
},
|
|
116
122
|
onError: (error) => console.error(error)
|
|
117
123
|
}
|
|
118
124
|
);
|
|
119
125
|
|
|
120
126
|
await core.mount({ targetId: "card-element-target" });
|
|
121
|
-
|
|
122
|
-
|
|
127
|
+
|
|
128
|
+
// One-off checkout: create a short-lived token intent (default)
|
|
129
|
+
const intent = await core.tokenize({ saveCard: false });
|
|
130
|
+
|
|
131
|
+
// Save card on file or subscription checkout: create a persistent token
|
|
132
|
+
const token = await core.tokenize({ saveCard: true });
|
|
123
133
|
```
|
|
124
134
|
|
|
125
135
|
Bank account example:
|
|
@@ -146,16 +156,27 @@ await bankCore.mount({ targetId: "bank-element-target" });
|
|
|
146
156
|
|
|
147
157
|
## Tokenization result
|
|
148
158
|
|
|
149
|
-
`core.tokenize()` and `onTokenized` receive a
|
|
159
|
+
`core.tokenize({ saveCard })` and `onTokenized` receive a discriminated
|
|
160
|
+
`TokenizationResult`:
|
|
150
161
|
|
|
151
162
|
```ts
|
|
152
|
-
|
|
153
|
-
tokenId: string;
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
163
|
+
type TokenizationResult =
|
|
164
|
+
| { kind: "token"; tokenId: string; fingerprint: string; type: "card" | "bank_account" }
|
|
165
|
+
| {
|
|
166
|
+
kind: "token_intent";
|
|
167
|
+
tokenIntentId: string;
|
|
168
|
+
fingerprint: string;
|
|
169
|
+
type: "card" | "bank_account";
|
|
170
|
+
};
|
|
157
171
|
```
|
|
158
172
|
|
|
173
|
+
Pass `saveCard: false` (default for one-off checkouts) to create a short-lived
|
|
174
|
+
token intent via Basis Theory. Pass `saveCard: true` when the payment method
|
|
175
|
+
should be stored on the customer (subscriptions, explicit save-card opt-in).
|
|
176
|
+
|
|
177
|
+
Your backend should charge one-off payments using `tokenIntentId` and store
|
|
178
|
+
saved payment methods using `tokenId`.
|
|
179
|
+
|
|
159
180
|
`instrument` is an optional field you can pass in the `createCardCollectCore` init config object; it defaults to `"card"` when omitted.
|
|
160
181
|
|
|
161
182
|
`allowedBankCountries` is optional and only applies when `instrument` is
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { type CustomerDetails } from "../../customer-details/types";
|
|
2
|
+
export interface CustomerDetailsMountOptions {
|
|
3
|
+
defaultBillingAddressExpanded?: boolean;
|
|
4
|
+
defaultCustomerDetails?: Partial<CustomerDetails>;
|
|
5
|
+
disabled?: boolean;
|
|
6
|
+
}
|
|
7
|
+
export interface CustomerDetailsMountCallbacks {
|
|
8
|
+
onChange?: (payload: unknown) => void;
|
|
9
|
+
onCustomerDetailsChange?: (details: CustomerDetails) => void;
|
|
10
|
+
}
|
|
11
|
+
export interface CustomerDetailsHandle {
|
|
12
|
+
getValue: () => CustomerDetails;
|
|
13
|
+
isComplete: () => boolean;
|
|
14
|
+
setDisabled: (disabled: boolean) => void;
|
|
15
|
+
cleanup: () => void;
|
|
16
|
+
}
|
|
17
|
+
export declare function mountCustomerDetailsSection(container: HTMLElement, options: CustomerDetailsMountOptions, callbacks: CustomerDetailsMountCallbacks): CustomerDetailsHandle;
|
|
18
|
+
//# sourceMappingURL=customer-details-mount.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"customer-details-mount.d.ts","sourceRoot":"","sources":["../../../src/adapters/basistheory/customer-details-mount.ts"],"names":[],"mappings":"AAAA,OAAO,EAOL,KAAK,eAAe,EACrB,MAAM,8BAA8B,CAAC;AA4BtC,MAAM,WAAW,2BAA2B;IAC1C,6BAA6B,CAAC,EAAE,OAAO,CAAC;IACxC,sBAAsB,CAAC,EAAE,OAAO,CAAC,eAAe,CAAC,CAAC;IAClD,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AAED,MAAM,WAAW,6BAA6B;IAC5C,QAAQ,CAAC,EAAE,CAAC,OAAO,EAAE,OAAO,KAAK,IAAI,CAAC;IACtC,uBAAuB,CAAC,EAAE,CAAC,OAAO,EAAE,eAAe,KAAK,IAAI,CAAC;CAC9D;AAED,MAAM,WAAW,qBAAqB;IACpC,QAAQ,EAAE,MAAM,eAAe,CAAC;IAChC,UAAU,EAAE,MAAM,OAAO,CAAC;IAC1B,WAAW,EAAE,CAAC,QAAQ,EAAE,OAAO,KAAK,IAAI,CAAC;IACzC,OAAO,EAAE,MAAM,IAAI,CAAC;CACrB;AAED,wBAAgB,2BAA2B,CACzC,SAAS,EAAE,WAAW,EACtB,OAAO,EAAE,2BAA2B,EACpC,SAAS,EAAE,6BAA6B,GACvC,qBAAqB,CAkSvB"}
|
|
@@ -0,0 +1,282 @@
|
|
|
1
|
+
import { createEmptyCustomerDetails, formatBillingAddressSummary, getBillingFieldLabels, isCustomerDetailsComplete } from "../../customer-details/types";
|
|
2
|
+
import { getBillingCountryOptions, getRegionOptions } from "../../customer-details/regions";
|
|
3
|
+
const FIELD_GAP = "0.625rem";
|
|
4
|
+
const INPUT_STYLE = {
|
|
5
|
+
width: "100%",
|
|
6
|
+
border: "1px solid #d0d5dd",
|
|
7
|
+
borderRadius: "10px",
|
|
8
|
+
background: "#ffffff",
|
|
9
|
+
padding: "10px 12px",
|
|
10
|
+
fontSize: "16px",
|
|
11
|
+
fontWeight: "500",
|
|
12
|
+
color: "#101828",
|
|
13
|
+
boxShadow: "inset 0 1px 2px rgba(16,24,40,0.05)",
|
|
14
|
+
boxSizing: "border-box"
|
|
15
|
+
};
|
|
16
|
+
function applyInputStyle(element) {
|
|
17
|
+
Object.assign(element.style, INPUT_STYLE);
|
|
18
|
+
}
|
|
19
|
+
function applySelectStyle(element, muted) {
|
|
20
|
+
applyInputStyle(element);
|
|
21
|
+
element.style.cursor = "pointer";
|
|
22
|
+
element.style.color = muted ? "#98a2b3" : "#101828";
|
|
23
|
+
}
|
|
24
|
+
export function mountCustomerDetailsSection(container, options, callbacks) {
|
|
25
|
+
let value = createEmptyCustomerDetails(options.defaultCustomerDetails);
|
|
26
|
+
const labels = () => getBillingFieldLabels(value.billingAddress.country);
|
|
27
|
+
const regionOptions = () => getRegionOptions(value.billingAddress.country);
|
|
28
|
+
const root = document.createElement("div");
|
|
29
|
+
root.dataset.paygoodCardCollect = "customer-details";
|
|
30
|
+
Object.assign(root.style, {
|
|
31
|
+
display: "flex",
|
|
32
|
+
flexDirection: "column",
|
|
33
|
+
gap: FIELD_GAP,
|
|
34
|
+
marginBottom: "0.75rem"
|
|
35
|
+
});
|
|
36
|
+
const fullNameInput = document.createElement("input");
|
|
37
|
+
fullNameInput.id = "paygood-customer-full-name";
|
|
38
|
+
fullNameInput.dataset.paygoodCardCollect = "customer-name";
|
|
39
|
+
fullNameInput.type = "text";
|
|
40
|
+
fullNameInput.autocomplete = "name";
|
|
41
|
+
fullNameInput.placeholder = "Full name";
|
|
42
|
+
fullNameInput.setAttribute("aria-label", "Full name");
|
|
43
|
+
fullNameInput.value = value.fullName;
|
|
44
|
+
applyInputStyle(fullNameInput);
|
|
45
|
+
root.appendChild(fullNameInput);
|
|
46
|
+
const billingDetails = document.createElement("details");
|
|
47
|
+
billingDetails.dataset.paygoodCardCollect = "billing-address";
|
|
48
|
+
billingDetails.open = options.defaultBillingAddressExpanded ?? false;
|
|
49
|
+
Object.assign(billingDetails.style, {
|
|
50
|
+
border: "1px solid #eaecf0",
|
|
51
|
+
borderRadius: "10px",
|
|
52
|
+
padding: "0.625rem 0.875rem",
|
|
53
|
+
background: "#fcfcfd"
|
|
54
|
+
});
|
|
55
|
+
const summary = document.createElement("summary");
|
|
56
|
+
Object.assign(summary.style, {
|
|
57
|
+
cursor: "pointer",
|
|
58
|
+
fontWeight: "600",
|
|
59
|
+
color: "#101828",
|
|
60
|
+
listStylePosition: "outside"
|
|
61
|
+
});
|
|
62
|
+
const summaryTitle = document.createElement("span");
|
|
63
|
+
summaryTitle.textContent = "Billing address";
|
|
64
|
+
summary.appendChild(summaryTitle);
|
|
65
|
+
const summaryPreview = document.createElement("span");
|
|
66
|
+
summaryPreview.dataset.paygoodCardCollect = "billing-address-summary";
|
|
67
|
+
Object.assign(summaryPreview.style, {
|
|
68
|
+
marginLeft: "0.5rem",
|
|
69
|
+
fontWeight: "400",
|
|
70
|
+
color: "#475467"
|
|
71
|
+
});
|
|
72
|
+
summary.appendChild(summaryPreview);
|
|
73
|
+
billingDetails.appendChild(summary);
|
|
74
|
+
const billingFields = document.createElement("div");
|
|
75
|
+
Object.assign(billingFields.style, {
|
|
76
|
+
display: "flex",
|
|
77
|
+
flexDirection: "column",
|
|
78
|
+
gap: FIELD_GAP,
|
|
79
|
+
marginTop: "0.625rem"
|
|
80
|
+
});
|
|
81
|
+
const countrySelect = document.createElement("select");
|
|
82
|
+
countrySelect.id = "paygood-billing-country";
|
|
83
|
+
countrySelect.dataset.paygoodCardCollect = "billing-country";
|
|
84
|
+
countrySelect.setAttribute("aria-label", "Country");
|
|
85
|
+
applySelectStyle(countrySelect, false);
|
|
86
|
+
countrySelect.style.width = "fit-content";
|
|
87
|
+
countrySelect.style.maxWidth = "100%";
|
|
88
|
+
for (const option of getBillingCountryOptions()) {
|
|
89
|
+
const optionElement = document.createElement("option");
|
|
90
|
+
optionElement.value = option.value;
|
|
91
|
+
optionElement.textContent = `${option.flag} ${option.label}`;
|
|
92
|
+
countrySelect.appendChild(optionElement);
|
|
93
|
+
}
|
|
94
|
+
countrySelect.value = value.billingAddress.country;
|
|
95
|
+
billingFields.appendChild(countrySelect);
|
|
96
|
+
const line1Input = document.createElement("input");
|
|
97
|
+
line1Input.id = "paygood-billing-line1";
|
|
98
|
+
line1Input.dataset.paygoodCardCollect = "billing-line1";
|
|
99
|
+
line1Input.type = "text";
|
|
100
|
+
line1Input.autocomplete = "billing address-line1";
|
|
101
|
+
line1Input.placeholder = "Address line 1";
|
|
102
|
+
line1Input.setAttribute("aria-label", "Address line 1");
|
|
103
|
+
applyInputStyle(line1Input);
|
|
104
|
+
billingFields.appendChild(line1Input);
|
|
105
|
+
const line2Input = document.createElement("input");
|
|
106
|
+
line2Input.id = "paygood-billing-line2";
|
|
107
|
+
line2Input.dataset.paygoodCardCollect = "billing-line2";
|
|
108
|
+
line2Input.type = "text";
|
|
109
|
+
line2Input.autocomplete = "billing address-line2";
|
|
110
|
+
line2Input.placeholder = "Address line 2 (optional)";
|
|
111
|
+
line2Input.setAttribute("aria-label", "Address line 2");
|
|
112
|
+
applyInputStyle(line2Input);
|
|
113
|
+
billingFields.appendChild(line2Input);
|
|
114
|
+
const cityInput = document.createElement("input");
|
|
115
|
+
cityInput.id = "paygood-billing-city";
|
|
116
|
+
cityInput.dataset.paygoodCardCollect = "billing-city";
|
|
117
|
+
cityInput.type = "text";
|
|
118
|
+
cityInput.autocomplete = "billing address-level2";
|
|
119
|
+
cityInput.placeholder = "City";
|
|
120
|
+
cityInput.setAttribute("aria-label", "City");
|
|
121
|
+
applyInputStyle(cityInput);
|
|
122
|
+
billingFields.appendChild(cityInput);
|
|
123
|
+
const regionPostalRow = document.createElement("div");
|
|
124
|
+
regionPostalRow.dataset.paygoodCardCollect = "billing-region-postal-row";
|
|
125
|
+
Object.assign(regionPostalRow.style, {
|
|
126
|
+
display: "flex",
|
|
127
|
+
flexWrap: "wrap",
|
|
128
|
+
gap: "12px",
|
|
129
|
+
alignItems: "flex-start"
|
|
130
|
+
});
|
|
131
|
+
const regionWrap = document.createElement("div");
|
|
132
|
+
Object.assign(regionWrap.style, { flex: "1.5 1 160px", minWidth: "0" });
|
|
133
|
+
const regionSelect = document.createElement("select");
|
|
134
|
+
regionSelect.id = "paygood-billing-region";
|
|
135
|
+
regionSelect.dataset.paygoodCardCollect = "billing-region";
|
|
136
|
+
applySelectStyle(regionSelect, true);
|
|
137
|
+
regionWrap.appendChild(regionSelect);
|
|
138
|
+
regionPostalRow.appendChild(regionWrap);
|
|
139
|
+
const postalWrap = document.createElement("div");
|
|
140
|
+
Object.assign(postalWrap.style, { flex: "1 1 120px", minWidth: "0" });
|
|
141
|
+
const postalInput = document.createElement("input");
|
|
142
|
+
postalInput.id = "paygood-billing-postal-code";
|
|
143
|
+
postalInput.dataset.paygoodCardCollect = "billing-postal-code";
|
|
144
|
+
postalInput.type = "text";
|
|
145
|
+
postalInput.autocomplete = "billing postal-code";
|
|
146
|
+
applyInputStyle(postalInput);
|
|
147
|
+
postalWrap.appendChild(postalInput);
|
|
148
|
+
regionPostalRow.appendChild(postalWrap);
|
|
149
|
+
billingFields.appendChild(regionPostalRow);
|
|
150
|
+
billingDetails.appendChild(billingFields);
|
|
151
|
+
root.appendChild(billingDetails);
|
|
152
|
+
container.appendChild(root);
|
|
153
|
+
function rebuildRegionSelect() {
|
|
154
|
+
const fieldLabels = labels();
|
|
155
|
+
regionSelect.setAttribute("aria-label", fieldLabels.region);
|
|
156
|
+
regionSelect.innerHTML = "";
|
|
157
|
+
const placeholder = document.createElement("option");
|
|
158
|
+
placeholder.value = "";
|
|
159
|
+
placeholder.textContent = fieldLabels.region;
|
|
160
|
+
regionSelect.appendChild(placeholder);
|
|
161
|
+
for (const option of regionOptions()) {
|
|
162
|
+
const optionElement = document.createElement("option");
|
|
163
|
+
optionElement.value = option.code;
|
|
164
|
+
optionElement.textContent = option.label;
|
|
165
|
+
regionSelect.appendChild(optionElement);
|
|
166
|
+
}
|
|
167
|
+
regionSelect.value = value.billingAddress.region;
|
|
168
|
+
applySelectStyle(regionSelect, !value.billingAddress.region);
|
|
169
|
+
}
|
|
170
|
+
function updateSummaryPreview() {
|
|
171
|
+
const preview = formatBillingAddressSummary(value.billingAddress);
|
|
172
|
+
if (billingDetails.open || !preview) {
|
|
173
|
+
summaryPreview.textContent = "";
|
|
174
|
+
summaryPreview.hidden = true;
|
|
175
|
+
return;
|
|
176
|
+
}
|
|
177
|
+
summaryPreview.textContent = `· ${preview}`;
|
|
178
|
+
summaryPreview.hidden = false;
|
|
179
|
+
}
|
|
180
|
+
function syncInputsFromValue() {
|
|
181
|
+
fullNameInput.value = value.fullName;
|
|
182
|
+
countrySelect.value = value.billingAddress.country;
|
|
183
|
+
line1Input.value = value.billingAddress.line1;
|
|
184
|
+
line2Input.value = value.billingAddress.line2;
|
|
185
|
+
cityInput.value = value.billingAddress.city;
|
|
186
|
+
rebuildRegionSelect();
|
|
187
|
+
postalInput.placeholder = labels().postalCode;
|
|
188
|
+
postalInput.setAttribute("aria-label", labels().postalCode);
|
|
189
|
+
postalInput.value = value.billingAddress.postalCode;
|
|
190
|
+
updateSummaryPreview();
|
|
191
|
+
}
|
|
192
|
+
function emitChange(field) {
|
|
193
|
+
const complete = isCustomerDetailsComplete(value);
|
|
194
|
+
callbacks.onCustomerDetailsChange?.(value);
|
|
195
|
+
callbacks.onChange?.({
|
|
196
|
+
field,
|
|
197
|
+
payload: { value, isComplete: complete }
|
|
198
|
+
});
|
|
199
|
+
callbacks.onChange?.({
|
|
200
|
+
field: "customer_details",
|
|
201
|
+
payload: { value, isComplete: complete }
|
|
202
|
+
});
|
|
203
|
+
}
|
|
204
|
+
function updateBillingAddress(patch) {
|
|
205
|
+
value = {
|
|
206
|
+
...value,
|
|
207
|
+
billingAddress: {
|
|
208
|
+
...value.billingAddress,
|
|
209
|
+
...patch
|
|
210
|
+
}
|
|
211
|
+
};
|
|
212
|
+
syncInputsFromValue();
|
|
213
|
+
emitChange("billing_address");
|
|
214
|
+
}
|
|
215
|
+
billingDetails.addEventListener("toggle", updateSummaryPreview);
|
|
216
|
+
syncInputsFromValue();
|
|
217
|
+
fullNameInput.addEventListener("input", () => {
|
|
218
|
+
value = { ...value, fullName: fullNameInput.value };
|
|
219
|
+
emitChange("full_name");
|
|
220
|
+
});
|
|
221
|
+
countrySelect.addEventListener("change", () => {
|
|
222
|
+
updateBillingAddress({
|
|
223
|
+
country: countrySelect.value,
|
|
224
|
+
region: ""
|
|
225
|
+
});
|
|
226
|
+
emitChange("billing_country");
|
|
227
|
+
});
|
|
228
|
+
line1Input.addEventListener("input", () => {
|
|
229
|
+
updateBillingAddress({ line1: line1Input.value });
|
|
230
|
+
emitChange("billing_line1");
|
|
231
|
+
});
|
|
232
|
+
line2Input.addEventListener("input", () => {
|
|
233
|
+
updateBillingAddress({ line2: line2Input.value });
|
|
234
|
+
emitChange("billing_line2");
|
|
235
|
+
});
|
|
236
|
+
cityInput.addEventListener("input", () => {
|
|
237
|
+
updateBillingAddress({ city: cityInput.value });
|
|
238
|
+
emitChange("billing_city");
|
|
239
|
+
});
|
|
240
|
+
regionSelect.addEventListener("change", () => {
|
|
241
|
+
updateBillingAddress({ region: regionSelect.value });
|
|
242
|
+
applySelectStyle(regionSelect, !regionSelect.value);
|
|
243
|
+
emitChange("billing_region");
|
|
244
|
+
});
|
|
245
|
+
postalInput.addEventListener("input", () => {
|
|
246
|
+
updateBillingAddress({ postalCode: postalInput.value });
|
|
247
|
+
emitChange("billing_postal_code");
|
|
248
|
+
});
|
|
249
|
+
const disabled = options.disabled ?? false;
|
|
250
|
+
for (const element of [
|
|
251
|
+
fullNameInput,
|
|
252
|
+
countrySelect,
|
|
253
|
+
line1Input,
|
|
254
|
+
line2Input,
|
|
255
|
+
cityInput,
|
|
256
|
+
regionSelect,
|
|
257
|
+
postalInput
|
|
258
|
+
]) {
|
|
259
|
+
element.disabled = disabled;
|
|
260
|
+
}
|
|
261
|
+
return {
|
|
262
|
+
getValue: () => value,
|
|
263
|
+
isComplete: () => isCustomerDetailsComplete(value),
|
|
264
|
+
setDisabled: (nextDisabled) => {
|
|
265
|
+
for (const element of [
|
|
266
|
+
fullNameInput,
|
|
267
|
+
countrySelect,
|
|
268
|
+
line1Input,
|
|
269
|
+
line2Input,
|
|
270
|
+
cityInput,
|
|
271
|
+
regionSelect,
|
|
272
|
+
postalInput
|
|
273
|
+
]) {
|
|
274
|
+
element.disabled = nextDisabled;
|
|
275
|
+
}
|
|
276
|
+
},
|
|
277
|
+
cleanup: () => {
|
|
278
|
+
root.remove();
|
|
279
|
+
}
|
|
280
|
+
};
|
|
281
|
+
}
|
|
282
|
+
//# sourceMappingURL=customer-details-mount.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"customer-details-mount.js","sourceRoot":"","sources":["../../../src/adapters/basistheory/customer-details-mount.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import type { CollectCoreConfig, CollectCoreEvents } from "../../types";
|
|
2
|
+
import { type CustomerDetailsHandle } from "./customer-details-mount";
|
|
3
|
+
export interface PreparedMountRoot {
|
|
4
|
+
paymentRoot: HTMLElement;
|
|
5
|
+
customerDetailsHandle: CustomerDetailsHandle | null;
|
|
6
|
+
}
|
|
7
|
+
export declare function prepareMountRoot(parent: HTMLElement, config: CollectCoreConfig, events: Pick<CollectCoreEvents, "onChange" | "onCustomerDetailsChange">): PreparedMountRoot;
|
|
8
|
+
//# sourceMappingURL=prepare-mount-root.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"prepare-mount-root.d.ts","sourceRoot":"","sources":["../../../src/adapters/basistheory/prepare-mount-root.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AACxE,OAAO,EAEL,KAAK,qBAAqB,EAC3B,MAAM,0BAA0B,CAAC;AAElC,MAAM,WAAW,iBAAiB;IAChC,WAAW,EAAE,WAAW,CAAC;IACzB,qBAAqB,EAAE,qBAAqB,GAAG,IAAI,CAAC;CACrD;AAED,wBAAgB,gBAAgB,CAC9B,MAAM,EAAE,WAAW,EACnB,MAAM,EAAE,iBAAiB,EACzB,MAAM,EAAE,IAAI,CAAC,iBAAiB,EAAE,UAAU,GAAG,yBAAyB,CAAC,GACtE,iBAAiB,CAuCnB"}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
import { mountCustomerDetailsSection } from "./customer-details-mount";
|
|
2
|
+
export function prepareMountRoot(parent, config, events) {
|
|
3
|
+
parent.innerHTML = "";
|
|
4
|
+
const outerWrapper = document.createElement("div");
|
|
5
|
+
Object.assign(outerWrapper.style, {
|
|
6
|
+
display: "flex",
|
|
7
|
+
flexDirection: "column",
|
|
8
|
+
gap: "0.75rem",
|
|
9
|
+
width: "100%",
|
|
10
|
+
maxWidth: "100%",
|
|
11
|
+
boxSizing: "border-box"
|
|
12
|
+
});
|
|
13
|
+
let customerDetailsHandle = null;
|
|
14
|
+
if (config.collectCustomerDetails !== false) {
|
|
15
|
+
customerDetailsHandle = mountCustomerDetailsSection(outerWrapper, {
|
|
16
|
+
defaultBillingAddressExpanded: config.defaultBillingAddressExpanded,
|
|
17
|
+
defaultCustomerDetails: config.defaultCustomerDetails
|
|
18
|
+
}, {
|
|
19
|
+
onChange: events.onChange,
|
|
20
|
+
onCustomerDetailsChange: events.onCustomerDetailsChange
|
|
21
|
+
});
|
|
22
|
+
}
|
|
23
|
+
const paymentRoot = document.createElement("div");
|
|
24
|
+
paymentRoot.dataset.paygoodCardCollect = "payment-fields";
|
|
25
|
+
Object.assign(paymentRoot.style, {
|
|
26
|
+
width: "100%",
|
|
27
|
+
maxWidth: "100%",
|
|
28
|
+
boxSizing: "border-box"
|
|
29
|
+
});
|
|
30
|
+
outerWrapper.appendChild(paymentRoot);
|
|
31
|
+
parent.appendChild(outerWrapper);
|
|
32
|
+
return { paymentRoot, customerDetailsHandle };
|
|
33
|
+
}
|
|
34
|
+
//# sourceMappingURL=prepare-mount-root.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"prepare-mount-root.js","sourceRoot":"","sources":["../../../src/adapters/basistheory/prepare-mount-root.ts"],"names":[],"mappings":"AACA,OAAO,EACL,2BAA2B,EAE5B,MAAM,0BAA0B,CAAC;AAOlC,MAAM,UAAU,gBAAgB,CAC9B,MAAmB,EACnB,MAAyB,EACzB,MAAuE;IAEvE,MAAM,CAAC,SAAS,GAAG,EAAE,CAAC;IAEtB,MAAM,YAAY,GAAG,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;IACnD,MAAM,CAAC,MAAM,CAAC,YAAY,CAAC,KAAK,EAAE;QAChC,OAAO,EAAE,MAAM;QACf,aAAa,EAAE,QAAQ;QACvB,GAAG,EAAE,SAAS;QACd,KAAK,EAAE,MAAM;QACb,QAAQ,EAAE,MAAM;QAChB,SAAS,EAAE,YAAY;KACxB,CAAC,CAAC;IAEH,IAAI,qBAAqB,GAAiC,IAAI,CAAC;IAC/D,IAAI,MAAM,CAAC,sBAAsB,KAAK,KAAK,EAAE,CAAC;QAC5C,qBAAqB,GAAG,2BAA2B,CACjD,YAAY,EACZ;YACE,6BAA6B,EAAE,MAAM,CAAC,6BAA6B;YACnE,sBAAsB,EAAE,MAAM,CAAC,sBAAsB;SACtD,EACD;YACE,QAAQ,EAAE,MAAM,CAAC,QAAQ;YACzB,uBAAuB,EAAE,MAAM,CAAC,uBAAuB;SACxD,CACF,CAAC;IACJ,CAAC;IAED,MAAM,WAAW,GAAG,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;IAClD,WAAW,CAAC,OAAO,CAAC,kBAAkB,GAAG,gBAAgB,CAAC;IAC1D,MAAM,CAAC,MAAM,CAAC,WAAW,CAAC,KAAK,EAAE;QAC/B,KAAK,EAAE,MAAM;QACb,QAAQ,EAAE,MAAM;QAChB,SAAS,EAAE,YAAY;KACxB,CAAC,CAAC;IACH,YAAY,CAAC,WAAW,CAAC,WAAW,CAAC,CAAC;IACtC,MAAM,CAAC,WAAW,CAAC,YAAY,CAAC,CAAC;IAEjC,OAAO,EAAE,WAAW,EAAE,qBAAqB,EAAE,CAAC;AAChD,CAAC"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import type { ElementProviderPort, MountedInstrument } from "../../ports/element-provider";
|
|
2
2
|
import type { TokenizationProviderPort } from "../../ports/tokenization-provider";
|
|
3
|
-
import type { CollectCoreConfig, InstrumentHandle, MountOptions, TokenizationResult } from "../../types";
|
|
3
|
+
import type { CollectCoreConfig, InstrumentHandle, MountOptions, TokenizationResult, TokenizeOptions } from "../../types";
|
|
4
4
|
export declare class BasisTheoryAdapter implements ElementProviderPort, TokenizationProviderPort {
|
|
5
5
|
private btClient;
|
|
6
6
|
private config;
|
|
@@ -9,6 +9,6 @@ export declare class BasisTheoryAdapter implements ElementProviderPort, Tokeniza
|
|
|
9
9
|
private createElementWithFallback;
|
|
10
10
|
initialize(config: CollectCoreConfig): Promise<void>;
|
|
11
11
|
mount(options: MountOptions): Promise<MountedInstrument>;
|
|
12
|
-
tokenize(handle: InstrumentHandle): Promise<TokenizationResult>;
|
|
12
|
+
tokenize(handle: InstrumentHandle, options: TokenizeOptions): Promise<TokenizationResult>;
|
|
13
13
|
}
|
|
14
14
|
//# sourceMappingURL=provider.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"provider.d.ts","sourceRoot":"","sources":["../../../src/adapters/basistheory/provider.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,mBAAmB,EAAE,iBAAiB,EAAE,MAAM,8BAA8B,CAAC;AAC3F,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,mCAAmC,CAAC;AAClF,OAAO,KAAK,EACV,iBAAiB,EACjB,gBAAgB,EAChB,YAAY,EAGZ,kBAAkB,
|
|
1
|
+
{"version":3,"file":"provider.d.ts","sourceRoot":"","sources":["../../../src/adapters/basistheory/provider.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,mBAAmB,EAAE,iBAAiB,EAAE,MAAM,8BAA8B,CAAC;AAC3F,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,mCAAmC,CAAC;AAClF,OAAO,KAAK,EACV,iBAAiB,EACjB,gBAAgB,EAChB,YAAY,EAGZ,kBAAkB,EAClB,eAAe,EAChB,MAAM,aAAa,CAAC;AA2MrB,qBAAa,kBAAmB,YAAW,mBAAmB,EAAE,wBAAwB;IACtF,OAAO,CAAC,QAAQ,CAAkC;IAClD,OAAO,CAAC,MAAM,CAAkC;IAChD,OAAO,CAAC,OAAO,CAAmD;IAClE,OAAO,CAAC,SAAS,CAAK;IAEtB,OAAO,CAAC,yBAAyB;IAwB3B,UAAU,CAAC,MAAM,EAAE,iBAAiB,GAAG,OAAO,CAAC,IAAI,CAAC;IAapD,KAAK,CAAC,OAAO,EAAE,YAAY,GAAG,OAAO,CAAC,iBAAiB,CAAC;IAgRxD,QAAQ,CAAC,MAAM,EAAE,gBAAgB,EAAE,OAAO,EAAE,eAAe,GAAG,OAAO,CAAC,kBAAkB,CAAC;CA8ChG"}
|
|
@@ -60,12 +60,44 @@ function resolveFingerprintExpression(instrument, element) {
|
|
|
60
60
|
}
|
|
61
61
|
return "{{ data }}";
|
|
62
62
|
}
|
|
63
|
+
function buildTokenizationPayload(instrument, element) {
|
|
64
|
+
const bankComposite = getBankComposite(element);
|
|
65
|
+
const cardComposite = isCompositeElement(element) && element.tokenType === "card" ? element : null;
|
|
66
|
+
return {
|
|
67
|
+
type: bankComposite
|
|
68
|
+
? bankComposite.tokenType
|
|
69
|
+
: cardComposite
|
|
70
|
+
? cardComposite.tokenType
|
|
71
|
+
: toBasisTheoryTokenType(instrument),
|
|
72
|
+
data: bankComposite
|
|
73
|
+
? bankComposite.elements.reduce((acc, current) => {
|
|
74
|
+
acc[current.field] = current.element;
|
|
75
|
+
return acc;
|
|
76
|
+
}, {})
|
|
77
|
+
: cardComposite
|
|
78
|
+
? buildCardTokenData(cardComposite.elements)
|
|
79
|
+
: element,
|
|
80
|
+
fingerprintExpression: resolveFingerprintExpression(instrument, element),
|
|
81
|
+
...(bankComposite?.metadata ? { metadata: bankComposite.metadata } : {})
|
|
82
|
+
};
|
|
83
|
+
}
|
|
63
84
|
function toMountSelector(targetId) {
|
|
64
85
|
if (targetId.startsWith("#") || targetId.startsWith(".") || targetId.startsWith("[")) {
|
|
65
86
|
return targetId;
|
|
66
87
|
}
|
|
67
88
|
return `#${targetId}`;
|
|
68
89
|
}
|
|
90
|
+
function resolvePaymentParent(options) {
|
|
91
|
+
if (options.paymentMount) {
|
|
92
|
+
return options.paymentMount;
|
|
93
|
+
}
|
|
94
|
+
const parent = document.querySelector(toMountSelector(options.targetId));
|
|
95
|
+
if (!parent) {
|
|
96
|
+
throw new Error(`Mount container not found: ${options.targetId}`);
|
|
97
|
+
}
|
|
98
|
+
parent.innerHTML = "";
|
|
99
|
+
return parent;
|
|
100
|
+
}
|
|
69
101
|
function isCompositeElement(element) {
|
|
70
102
|
return element.kind === "composite";
|
|
71
103
|
}
|
|
@@ -135,10 +167,7 @@ export class BasisTheoryAdapter {
|
|
|
135
167
|
let mountedElement;
|
|
136
168
|
if (instrument === "bank_account") {
|
|
137
169
|
const isMobileViewport = window.matchMedia("(max-width: 640px)").matches;
|
|
138
|
-
const
|
|
139
|
-
if (!parent) {
|
|
140
|
-
throw new Error(`Mount container not found: ${options.targetId}`);
|
|
141
|
-
}
|
|
170
|
+
const paymentRoot = resolvePaymentParent(options);
|
|
142
171
|
const wrapper = document.createElement("div");
|
|
143
172
|
wrapper.style.display = "grid";
|
|
144
173
|
wrapper.style.gap = "12px";
|
|
@@ -160,7 +189,7 @@ export class BasisTheoryAdapter {
|
|
|
160
189
|
},
|
|
161
190
|
changeCallbacks: [],
|
|
162
191
|
cleanup: () => {
|
|
163
|
-
|
|
192
|
+
paymentRoot.innerHTML = "";
|
|
164
193
|
}
|
|
165
194
|
};
|
|
166
195
|
const remountBankFields = async (nextMarket) => {
|
|
@@ -196,17 +225,12 @@ export class BasisTheoryAdapter {
|
|
|
196
225
|
wrapper.appendChild(countrySelect);
|
|
197
226
|
}
|
|
198
227
|
wrapper.appendChild(fieldsContainer);
|
|
199
|
-
|
|
200
|
-
parent.appendChild(wrapper);
|
|
228
|
+
paymentRoot.appendChild(wrapper);
|
|
201
229
|
bankShell.composite = await mountBankFieldsForMarket(bankMarket, fieldsContainer, this.btClient, options.options ?? {}, uniqueId);
|
|
202
230
|
mountedElement = bankShell;
|
|
203
231
|
}
|
|
204
232
|
else if (instrument === "card") {
|
|
205
|
-
const
|
|
206
|
-
if (!parent) {
|
|
207
|
-
throw new Error(`Mount container not found: ${options.targetId}`);
|
|
208
|
-
}
|
|
209
|
-
parent.innerHTML = "";
|
|
233
|
+
const paymentRoot = resolvePaymentParent(options);
|
|
210
234
|
const isMobileViewport = window.matchMedia("(max-width: 640px)").matches;
|
|
211
235
|
const wrapper = document.createElement("div");
|
|
212
236
|
wrapper.style.display = "grid";
|
|
@@ -247,7 +271,7 @@ export class BasisTheoryAdapter {
|
|
|
247
271
|
wrapper.appendChild(numberHost);
|
|
248
272
|
wrapper.appendChild(expiryHost);
|
|
249
273
|
wrapper.appendChild(cvcHost);
|
|
250
|
-
|
|
274
|
+
paymentRoot.appendChild(wrapper);
|
|
251
275
|
const cardOptions = (options.options ?? {});
|
|
252
276
|
const placeholders = (cardOptions.placeholder ?? {});
|
|
253
277
|
const cardStyle = (cardOptions.style ?? {});
|
|
@@ -295,7 +319,7 @@ export class BasisTheoryAdapter {
|
|
|
295
319
|
],
|
|
296
320
|
tokenType: "card",
|
|
297
321
|
cleanup: () => {
|
|
298
|
-
|
|
322
|
+
paymentRoot.innerHTML = "";
|
|
299
323
|
}
|
|
300
324
|
};
|
|
301
325
|
}
|
|
@@ -371,7 +395,7 @@ export class BasisTheoryAdapter {
|
|
|
371
395
|
}
|
|
372
396
|
};
|
|
373
397
|
}
|
|
374
|
-
async tokenize(handle) {
|
|
398
|
+
async tokenize(handle, options) {
|
|
375
399
|
if (!this.btClient || !this.config) {
|
|
376
400
|
throw new Error("BasisTheoryAdapter must be initialized before tokenization.");
|
|
377
401
|
}
|
|
@@ -380,35 +404,31 @@ export class BasisTheoryAdapter {
|
|
|
380
404
|
if (!element) {
|
|
381
405
|
throw new Error(`Unknown instrument handle: ${handle.id}`);
|
|
382
406
|
}
|
|
383
|
-
const
|
|
384
|
-
const
|
|
385
|
-
|
|
386
|
-
|
|
387
|
-
|
|
388
|
-
|
|
389
|
-
|
|
390
|
-
|
|
391
|
-
|
|
392
|
-
? bankComposite.elements.reduce((acc, current) => {
|
|
393
|
-
acc[current.field] = current.element;
|
|
394
|
-
return acc;
|
|
395
|
-
}, {})
|
|
396
|
-
: cardComposite
|
|
397
|
-
? buildCardTokenData(cardComposite.elements)
|
|
398
|
-
: element,
|
|
399
|
-
fingerprintExpression: resolveFingerprintExpression(instrument, element),
|
|
400
|
-
...(bankComposite?.metadata ? { metadata: bankComposite.metadata } : {})
|
|
401
|
-
});
|
|
402
|
-
const tokenId = String(response.id ?? "");
|
|
403
|
-
if (!tokenId) {
|
|
404
|
-
throw new Error("Tokenization succeeded but no token id was returned.");
|
|
407
|
+
const payload = buildTokenizationPayload(instrument, element);
|
|
408
|
+
const response = options.saveCard
|
|
409
|
+
? await this.btClient.tokens.create(payload)
|
|
410
|
+
: await this.btClient.tokenIntents.create(payload);
|
|
411
|
+
const id = String(response.id ?? "");
|
|
412
|
+
if (!id) {
|
|
413
|
+
throw new Error(options.saveCard
|
|
414
|
+
? "Tokenization succeeded but no token id was returned."
|
|
415
|
+
: "Tokenization succeeded but no token intent id was returned.");
|
|
405
416
|
}
|
|
406
417
|
const fingerprint = String(response.fingerprint ?? "");
|
|
407
418
|
if (!fingerprint) {
|
|
408
419
|
throw new Error("Tokenization succeeded but no fingerprint was returned.");
|
|
409
420
|
}
|
|
421
|
+
if (options.saveCard) {
|
|
422
|
+
return {
|
|
423
|
+
kind: "token",
|
|
424
|
+
tokenId: id,
|
|
425
|
+
fingerprint,
|
|
426
|
+
type: instrument
|
|
427
|
+
};
|
|
428
|
+
}
|
|
410
429
|
return {
|
|
411
|
-
|
|
430
|
+
kind: "token_intent",
|
|
431
|
+
tokenIntentId: id,
|
|
412
432
|
fingerprint,
|
|
413
433
|
type: instrument
|
|
414
434
|
};
|