@paygood1/collect-core 0.3.1

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 (42) hide show
  1. package/README.md +38 -0
  2. package/dist/adapters/basistheory/provider.d.ts +14 -0
  3. package/dist/adapters/basistheory/provider.d.ts.map +1 -0
  4. package/dist/adapters/basistheory/provider.js +426 -0
  5. package/dist/adapters/basistheory/provider.js.map +1 -0
  6. package/dist/core/card-collect-core.d.ts +14 -0
  7. package/dist/core/card-collect-core.d.ts.map +1 -0
  8. package/dist/core/card-collect-core.js +32 -0
  9. package/dist/core/card-collect-core.js.map +1 -0
  10. package/dist/index.d.ts +6 -0
  11. package/dist/index.d.ts.map +1 -0
  12. package/dist/index.js +2 -0
  13. package/dist/index.js.map +1 -0
  14. package/dist/internal/config.d.ts +4 -0
  15. package/dist/internal/config.d.ts.map +1 -0
  16. package/dist/internal/config.js +15 -0
  17. package/dist/internal/config.js.map +1 -0
  18. package/dist/ports/element-provider.d.ts +11 -0
  19. package/dist/ports/element-provider.d.ts.map +1 -0
  20. package/dist/ports/element-provider.js +2 -0
  21. package/dist/ports/element-provider.js.map +1 -0
  22. package/dist/ports/tokenization-provider.d.ts +5 -0
  23. package/dist/ports/tokenization-provider.d.ts.map +1 -0
  24. package/dist/ports/tokenization-provider.js +2 -0
  25. package/dist/ports/tokenization-provider.js.map +1 -0
  26. package/dist/runtime/element-manager.d.ts +13 -0
  27. package/dist/runtime/element-manager.d.ts.map +1 -0
  28. package/dist/runtime/element-manager.js +47 -0
  29. package/dist/runtime/element-manager.js.map +1 -0
  30. package/dist/runtime/tokenize.d.ts +4 -0
  31. package/dist/runtime/tokenize.d.ts.map +1 -0
  32. package/dist/runtime/tokenize.js +4 -0
  33. package/dist/runtime/tokenize.js.map +1 -0
  34. package/dist/types.d.ts +31 -0
  35. package/dist/types.d.ts.map +1 -0
  36. package/dist/types.js +2 -0
  37. package/dist/types.js.map +1 -0
  38. package/dist/validation/config.d.ts +3 -0
  39. package/dist/validation/config.d.ts.map +1 -0
  40. package/dist/validation/config.js +12 -0
  41. package/dist/validation/config.js.map +1 -0
  42. package/package.json +32 -0
package/README.md ADDED
@@ -0,0 +1,38 @@
1
+ # @paygood1/collect-core
2
+
3
+ Framework-agnostic SDK for collecting and tokenizing payment instruments using a provider adapter.
4
+
5
+ ## Install
6
+
7
+ ```bash
8
+ npm install @paygood1/collect-core
9
+ ```
10
+
11
+ ## Usage
12
+
13
+ ```ts
14
+ import { createCardCollectCore } from "@paygood1/collect-core";
15
+
16
+ const core = await createCardCollectCore(
17
+ {
18
+ mode: "sandbox",
19
+ market: "US"
20
+ },
21
+ {
22
+ onReady: () => console.log("ready"),
23
+ onTokenized: (result) => console.log(result.tokenId),
24
+ onError: (error) => console.error(error)
25
+ }
26
+ );
27
+
28
+ await core.mount({ targetId: "card-element-target" });
29
+ const token = await core.tokenize();
30
+ console.log(token.tokenId);
31
+ ```
32
+
33
+ `instrument` is an optional field you can pass in the `createCardCollectCore` init config object; it defaults to `"card"` when omitted.
34
+
35
+ `mode` controls the internal whitelabel URL:
36
+ - `sandbox` -> `https://elements-dev.paygood.co/`
37
+ - `production` -> `https://elements.paygood.com`
38
+
@@ -0,0 +1,14 @@
1
+ import type { ElementProviderPort, MountedInstrument } from "../../ports/element-provider";
2
+ import type { TokenizationProviderPort } from "../../ports/tokenization-provider";
3
+ import type { CollectCoreConfig, InstrumentHandle, MountOptions, TokenizationResult } from "../../types";
4
+ export declare class BasisTheoryAdapter implements ElementProviderPort, TokenizationProviderPort {
5
+ private btClient;
6
+ private config;
7
+ private handles;
8
+ private idCounter;
9
+ private createElementWithFallback;
10
+ initialize(config: CollectCoreConfig): Promise<void>;
11
+ mount(options: MountOptions): Promise<MountedInstrument>;
12
+ tokenize(handle: InstrumentHandle): Promise<TokenizationResult>;
13
+ }
14
+ //# sourceMappingURL=provider.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"provider.d.ts","sourceRoot":"","sources":["../../../src/adapters/basistheory/provider.ts"],"names":[],"mappings":"AAEA,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,EAEZ,kBAAkB,EACnB,MAAM,aAAa,CAAC;AAwFrB,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;IAUpD,KAAK,CAAC,OAAO,EAAE,YAAY,GAAG,OAAO,CAAC,iBAAiB,CAAC;IAkUxD,QAAQ,CAAC,MAAM,EAAE,gBAAgB,GAAG,OAAO,CAAC,kBAAkB,CAAC;CA+CtE"}
@@ -0,0 +1,426 @@
1
+ import { basistheory } from "@basis-theory/web-elements";
2
+ import { getDefaultEnvironmentForMode, getWhitelabelDomain } from "../../internal/config";
3
+ const SANDBOX_PUBLIC_API_KEY = "key_test_us_pub_YUAEnE9iLb6XM9bY8HUSX5";
4
+ const PRODUCTION_PUBLIC_API_KEY = "";
5
+ function resolveProviderPublicApiKey(mode) {
6
+ if (mode === "production") {
7
+ if (PRODUCTION_PUBLIC_API_KEY.trim().length === 0) {
8
+ throw new Error("Missing production public API key. Set PRODUCTION_PUBLIC_API_KEY in collect-core.");
9
+ }
10
+ return PRODUCTION_PUBLIC_API_KEY.trim();
11
+ }
12
+ if (SANDBOX_PUBLIC_API_KEY.trim().length === 0) {
13
+ throw new Error("Missing sandbox public API key. Set SANDBOX_PUBLIC_API_KEY in collect-core.");
14
+ }
15
+ return SANDBOX_PUBLIC_API_KEY.trim();
16
+ }
17
+ function resolveInstrument(config) {
18
+ return config.instrument ?? "card";
19
+ }
20
+ function toBasisTheoryElementType(instrument) {
21
+ return instrument === "card" ? "card" : "text";
22
+ }
23
+ function toBasisTheoryTokenType(instrument) {
24
+ return instrument === "card" ? "card" : "bank";
25
+ }
26
+ function toMountSelector(targetId) {
27
+ if (targetId.startsWith("#") || targetId.startsWith(".") || targetId.startsWith("[")) {
28
+ return targetId;
29
+ }
30
+ return `#${targetId}`;
31
+ }
32
+ function isCompositeBankElement(element) {
33
+ return element.kind === "composite";
34
+ }
35
+ function safelyUnmountElement(element) {
36
+ try {
37
+ const result = element.unmount();
38
+ if (result && typeof result.catch === "function") {
39
+ void result.catch(() => {
40
+ // Ignore async teardown errors (already unmounted, etc).
41
+ });
42
+ }
43
+ }
44
+ catch {
45
+ // Ignore sync teardown errors (already unmounted, etc).
46
+ }
47
+ }
48
+ export class BasisTheoryAdapter {
49
+ constructor() {
50
+ this.btClient = null;
51
+ this.config = null;
52
+ this.handles = new Map();
53
+ this.idCounter = 0;
54
+ }
55
+ createElementWithFallback(keys, options) {
56
+ if (!this.btClient) {
57
+ throw new Error("BasisTheoryAdapter must be initialized before element creation.");
58
+ }
59
+ let lastError;
60
+ for (const key of keys) {
61
+ try {
62
+ return this.btClient.createElement(key, options);
63
+ }
64
+ catch (error) {
65
+ lastError = error;
66
+ }
67
+ }
68
+ throw new Error(`Unable to create Basis Theory element with keys [${keys.join(", ")}]: ${lastError?.message ?? "unknown error"}`);
69
+ }
70
+ async initialize(config) {
71
+ this.config = config;
72
+ const mode = config.mode ?? "sandbox";
73
+ this.btClient = (await basistheory(resolveProviderPublicApiKey(mode), {
74
+ environment: config.environment ?? getDefaultEnvironmentForMode(mode),
75
+ debug: config.debug ?? false,
76
+ customDomain: getWhitelabelDomain(mode)
77
+ }));
78
+ }
79
+ async mount(options) {
80
+ if (!this.btClient || !this.config) {
81
+ throw new Error("BasisTheoryAdapter must be initialized before mount.");
82
+ }
83
+ const instrument = resolveInstrument(this.config);
84
+ let mountedElement;
85
+ if (instrument === "bank_account") {
86
+ const isMobileViewport = window.matchMedia("(max-width: 640px)").matches;
87
+ const parent = document.querySelector(toMountSelector(options.targetId));
88
+ if (!parent) {
89
+ throw new Error(`Mount container not found: ${options.targetId}`);
90
+ }
91
+ const wrapper = document.createElement("div");
92
+ wrapper.style.display = "grid";
93
+ wrapper.style.gap = "12px";
94
+ wrapper.style.width = isMobileViewport ? "100%" : "min(100%, 32rem)";
95
+ wrapper.style.maxWidth = "100%";
96
+ wrapper.style.boxSizing = "border-box";
97
+ wrapper.style.margin = "0";
98
+ const styleFieldHost = (host) => {
99
+ host.style.width = "100%";
100
+ host.style.maxWidth = "100%";
101
+ host.style.minHeight = "46px";
102
+ host.style.border = "1px solid #d0d5dd";
103
+ host.style.borderRadius = "10px";
104
+ host.style.padding = "10px 12px";
105
+ host.style.background = "#ffffff";
106
+ host.style.boxShadow = "inset 0 1px 2px rgba(16,24,40,0.05)";
107
+ host.style.display = "flex";
108
+ host.style.alignItems = "center";
109
+ host.style.boxSizing = "border-box";
110
+ host.style.overflow = "hidden";
111
+ };
112
+ const routingHost = document.createElement("div");
113
+ const accountHost = document.createElement("div");
114
+ const transitHost = document.createElement("div");
115
+ const institutionHost = document.createElement("div");
116
+ const uniqueId = `bank-${Date.now()}-${Math.floor(Math.random() * 1000)}`;
117
+ routingHost.id = `${uniqueId}-routing`;
118
+ accountHost.id = `${uniqueId}-account`;
119
+ transitHost.id = `${uniqueId}-transit`;
120
+ institutionHost.id = `${uniqueId}-institution`;
121
+ styleFieldHost(routingHost);
122
+ styleFieldHost(accountHost);
123
+ styleFieldHost(transitHost);
124
+ styleFieldHost(institutionHost);
125
+ if (this.config.market === "CA") {
126
+ wrapper.appendChild(institutionHost);
127
+ wrapper.appendChild(transitHost);
128
+ wrapper.appendChild(accountHost);
129
+ }
130
+ else {
131
+ wrapper.appendChild(routingHost);
132
+ wrapper.appendChild(accountHost);
133
+ }
134
+ parent.innerHTML = "";
135
+ parent.appendChild(wrapper);
136
+ const bankElementStyle = {
137
+ base: {
138
+ color: "#101828",
139
+ fontFamily: "Inter, ui-sans-serif, system-ui, -apple-system, Segoe UI, Roboto, Helvetica, Arial, sans-serif",
140
+ fontSize: "16px",
141
+ fontWeight: "500",
142
+ lineHeight: "20px",
143
+ "::placeholder": {
144
+ color: "#98a2b3"
145
+ }
146
+ },
147
+ invalid: {
148
+ color: "#b42318",
149
+ "::placeholder": {
150
+ color: "#f04438"
151
+ }
152
+ }
153
+ };
154
+ if (this.config.market === "CA") {
155
+ const institutionNumberElement = this.btClient.createElement("text", {
156
+ targetId: `${uniqueId}-institution-input`,
157
+ inputMode: "numeric",
158
+ maxLength: 3,
159
+ placeholder: "Institution number",
160
+ style: bankElementStyle,
161
+ ...(options.options ?? {})
162
+ });
163
+ const transitNumberElement = this.btClient.createElement("text", {
164
+ targetId: `${uniqueId}-transit-input`,
165
+ inputMode: "numeric",
166
+ maxLength: 5,
167
+ placeholder: "Transit number",
168
+ style: bankElementStyle,
169
+ ...(options.options ?? {})
170
+ });
171
+ const accountNumberElement = this.btClient.createElement("text", {
172
+ targetId: `${uniqueId}-account-input`,
173
+ inputMode: "numeric",
174
+ placeholder: "Account number",
175
+ style: bankElementStyle,
176
+ ...(options.options ?? {})
177
+ });
178
+ await Promise.all([
179
+ institutionNumberElement.mount(`#${institutionHost.id}`),
180
+ transitNumberElement.mount(`#${transitHost.id}`),
181
+ accountNumberElement.mount(`#${accountHost.id}`)
182
+ ]);
183
+ mountedElement = {
184
+ kind: "composite",
185
+ elements: [
186
+ { field: "institution_number", element: institutionNumberElement },
187
+ { field: "transit_number", element: transitNumberElement },
188
+ { field: "account_number", element: accountNumberElement }
189
+ ],
190
+ tokenType: "token",
191
+ metadata: { paygood_scheme: "ca_eft" },
192
+ cleanup: () => {
193
+ parent.innerHTML = "";
194
+ }
195
+ };
196
+ }
197
+ else {
198
+ const routingNumberElement = this.btClient.createElement("text", {
199
+ targetId: `${uniqueId}-routing-input`,
200
+ inputMode: "numeric",
201
+ placeholder: "Routing number",
202
+ style: bankElementStyle,
203
+ ...(options.options ?? {})
204
+ });
205
+ const accountNumberElement = this.btClient.createElement("text", {
206
+ targetId: `${uniqueId}-account-input`,
207
+ inputMode: "numeric",
208
+ placeholder: "Account number",
209
+ style: bankElementStyle,
210
+ ...(options.options ?? {})
211
+ });
212
+ await Promise.all([
213
+ routingNumberElement.mount(`#${routingHost.id}`),
214
+ accountNumberElement.mount(`#${accountHost.id}`)
215
+ ]);
216
+ mountedElement = {
217
+ kind: "composite",
218
+ elements: [
219
+ { field: "routing_number", element: routingNumberElement },
220
+ { field: "account_number", element: accountNumberElement }
221
+ ],
222
+ tokenType: "bank",
223
+ cleanup: () => {
224
+ parent.innerHTML = "";
225
+ }
226
+ };
227
+ }
228
+ }
229
+ else if (instrument === "card") {
230
+ const parent = document.querySelector(toMountSelector(options.targetId));
231
+ if (!parent) {
232
+ throw new Error(`Mount container not found: ${options.targetId}`);
233
+ }
234
+ parent.innerHTML = "";
235
+ const isMobileViewport = window.matchMedia("(max-width: 640px)").matches;
236
+ const wrapper = document.createElement("div");
237
+ wrapper.style.display = "grid";
238
+ wrapper.style.gridTemplateColumns = isMobileViewport
239
+ ? "minmax(0, 1fr) minmax(0, 1fr)"
240
+ : "minmax(0, 2fr) minmax(0, 1fr) minmax(0, 1fr)";
241
+ wrapper.style.gap = isMobileViewport ? "8px" : "10px";
242
+ wrapper.style.width = "100%";
243
+ wrapper.style.maxWidth = "100%";
244
+ wrapper.style.boxSizing = "border-box";
245
+ const styleFieldHost = (host) => {
246
+ host.style.width = "100%";
247
+ host.style.maxWidth = "100%";
248
+ host.style.minHeight = "44px";
249
+ host.style.border = "1px solid #d0d5dd";
250
+ host.style.borderRadius = "10px";
251
+ host.style.padding = "10px 12px";
252
+ host.style.background = "#ffffff";
253
+ host.style.boxShadow = "inset 0 1px 2px rgba(16,24,40,0.05)";
254
+ host.style.display = "flex";
255
+ host.style.alignItems = "center";
256
+ host.style.boxSizing = "border-box";
257
+ host.style.overflow = "hidden";
258
+ };
259
+ const numberHost = document.createElement("div");
260
+ const expiryHost = document.createElement("div");
261
+ const cvcHost = document.createElement("div");
262
+ const uniqueId = `card-${Date.now()}-${Math.floor(Math.random() * 1000)}`;
263
+ numberHost.id = `${uniqueId}-number`;
264
+ expiryHost.id = `${uniqueId}-expiry`;
265
+ cvcHost.id = `${uniqueId}-cvc`;
266
+ if (isMobileViewport) {
267
+ numberHost.style.gridColumn = "1 / -1";
268
+ }
269
+ styleFieldHost(numberHost);
270
+ styleFieldHost(expiryHost);
271
+ styleFieldHost(cvcHost);
272
+ wrapper.appendChild(numberHost);
273
+ wrapper.appendChild(expiryHost);
274
+ wrapper.appendChild(cvcHost);
275
+ parent.appendChild(wrapper);
276
+ const cardOptions = (options.options ?? {});
277
+ const placeholders = (cardOptions.placeholder ?? {});
278
+ const cardStyle = (cardOptions.style ?? {});
279
+ const cardNumberElement = this.createElementWithFallback(["cardNumber"], {
280
+ targetId: `${uniqueId}-number-input`,
281
+ placeholder: placeholders.cardNumber ?? "Card number",
282
+ style: cardStyle
283
+ });
284
+ const expiryElement = this.createElementWithFallback(["expiry", "cardExpirationDate"], {
285
+ targetId: `${uniqueId}-expiry-input`,
286
+ placeholder: placeholders.expiryDate ?? "MM / YY",
287
+ style: cardStyle
288
+ });
289
+ const cvcElement = this.createElementWithFallback(["cvv", "cardVerificationCode"], {
290
+ targetId: `${uniqueId}-cvc-input`,
291
+ placeholder: placeholders.cvc ?? "CVC",
292
+ style: cardStyle
293
+ });
294
+ await Promise.all([
295
+ cardNumberElement.mount(`#${numberHost.id}`),
296
+ expiryElement.mount(`#${expiryHost.id}`),
297
+ cvcElement.mount(`#${cvcHost.id}`)
298
+ ]);
299
+ // Keep CVV validation aligned with detected card brand (e.g. AmEx => 4 digits).
300
+ try {
301
+ cardNumberElement.on("change", (eventPayload) => {
302
+ const payloadRecord = eventPayload;
303
+ const detail = payloadRecord?.detail ?? payloadRecord;
304
+ const cardBrand = detail?.cardBrand;
305
+ if (typeof cardBrand === "string" && typeof cvcElement.update === "function") {
306
+ cvcElement.update({ cardBrand });
307
+ }
308
+ });
309
+ }
310
+ catch {
311
+ // Non-fatal: card brand -> CVV coupling may be unavailable on some SDK versions.
312
+ }
313
+ mountedElement = {
314
+ kind: "composite",
315
+ elements: [
316
+ { field: "number", element: cardNumberElement },
317
+ { field: "expiration_month", element: expiryElement },
318
+ { field: "expiration_year", element: expiryElement },
319
+ { field: "cvc", element: cvcElement }
320
+ ],
321
+ tokenType: "card",
322
+ cleanup: () => {
323
+ parent.innerHTML = "";
324
+ }
325
+ };
326
+ }
327
+ else {
328
+ const parent = document.querySelector(toMountSelector(options.targetId));
329
+ if (!parent) {
330
+ throw new Error(`Mount container not found: ${options.targetId}`);
331
+ }
332
+ parent.innerHTML = "";
333
+ const elementType = toBasisTheoryElementType(instrument);
334
+ const element = this.btClient.createElement(elementType, {
335
+ ...(options.options ?? {})
336
+ });
337
+ await element.mount(toMountSelector(options.targetId));
338
+ mountedElement = element;
339
+ }
340
+ const id = `instrument-${++this.idCounter}`;
341
+ this.handles.set(id, mountedElement);
342
+ return {
343
+ handle: { id },
344
+ unmount: () => {
345
+ const mounted = this.handles.get(id);
346
+ if (mounted) {
347
+ try {
348
+ if (isCompositeBankElement(mounted)) {
349
+ mounted.elements.forEach(({ element }) => safelyUnmountElement(element));
350
+ try {
351
+ mounted.cleanup();
352
+ }
353
+ catch {
354
+ // Ignore DOM cleanup errors.
355
+ }
356
+ }
357
+ else {
358
+ safelyUnmountElement(mounted);
359
+ }
360
+ }
361
+ catch {
362
+ // Prevent teardown errors from bubbling and crashing host apps.
363
+ }
364
+ this.handles.delete(id);
365
+ }
366
+ },
367
+ on: (eventName, callback) => {
368
+ const mounted = this.handles.get(id);
369
+ if (!mounted) {
370
+ return;
371
+ }
372
+ if (isCompositeBankElement(mounted)) {
373
+ mounted.elements.forEach(({ field, element }) => {
374
+ element.on(eventName, (payload) => callback({ field, payload }));
375
+ });
376
+ return;
377
+ }
378
+ mounted.on(eventName, callback);
379
+ }
380
+ };
381
+ }
382
+ async tokenize(handle) {
383
+ if (!this.btClient || !this.config) {
384
+ throw new Error("BasisTheoryAdapter must be initialized before tokenization.");
385
+ }
386
+ const instrument = resolveInstrument(this.config);
387
+ const element = this.handles.get(handle.id);
388
+ if (!element) {
389
+ throw new Error(`Unknown instrument handle: ${handle.id}`);
390
+ }
391
+ const response = await this.btClient.tokens.create({
392
+ type: isCompositeBankElement(element)
393
+ ? element.tokenType
394
+ : toBasisTheoryTokenType(instrument),
395
+ data: isCompositeBankElement(element)
396
+ ? element.elements.reduce((acc, current) => {
397
+ if (element.tokenType === "card") {
398
+ if (current.field === "expiration_month") {
399
+ acc.expiration_date = current.element;
400
+ return acc;
401
+ }
402
+ if (current.field === "expiration_year") {
403
+ return acc;
404
+ }
405
+ }
406
+ acc[current.field] = current.element;
407
+ return acc;
408
+ }, {})
409
+ : element,
410
+ ...(isCompositeBankElement(element) && element.metadata
411
+ ? { metadata: element.metadata }
412
+ : {})
413
+ });
414
+ const tokenId = String(response.id ?? "");
415
+ if (!tokenId) {
416
+ throw new Error("Tokenization succeeded but no token id was returned.");
417
+ }
418
+ return {
419
+ tokenId,
420
+ type: instrument,
421
+ provider: "basistheory",
422
+ raw: response
423
+ };
424
+ }
425
+ }
426
+ //# sourceMappingURL=provider.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"provider.js","sourceRoot":"","sources":["../../../src/adapters/basistheory/provider.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,14 @@
1
+ import type { ElementProviderPort } from "../ports/element-provider";
2
+ import type { TokenizationProviderPort } from "../ports/tokenization-provider";
3
+ import type { CollectCoreConfig, CollectCoreEvents, MountOptions, TokenizationResult } from "../types";
4
+ export interface CoreDependencies {
5
+ elementProvider: ElementProviderPort;
6
+ tokenizationProvider: TokenizationProviderPort;
7
+ }
8
+ export interface CardCollectCore {
9
+ mount: (options: MountOptions) => Promise<void>;
10
+ unmount: () => void;
11
+ tokenize: () => Promise<TokenizationResult>;
12
+ }
13
+ export declare function createCardCollectCore(rawConfig: CollectCoreConfig, events?: CollectCoreEvents, dependencies?: CoreDependencies): Promise<CardCollectCore>;
14
+ //# sourceMappingURL=card-collect-core.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"card-collect-core.d.ts","sourceRoot":"","sources":["../../src/core/card-collect-core.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,2BAA2B,CAAC;AACrE,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,gCAAgC,CAAC;AAG/E,OAAO,KAAK,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,YAAY,EAAE,kBAAkB,EAAE,MAAM,UAAU,CAAC;AAGvG,MAAM,WAAW,gBAAgB;IAC/B,eAAe,EAAE,mBAAmB,CAAC;IACrC,oBAAoB,EAAE,wBAAwB,CAAC;CAChD;AAED,MAAM,WAAW,eAAe;IAC9B,KAAK,EAAE,CAAC,OAAO,EAAE,YAAY,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IAChD,OAAO,EAAE,MAAM,IAAI,CAAC;IACpB,QAAQ,EAAE,MAAM,OAAO,CAAC,kBAAkB,CAAC,CAAC;CAC7C;AAED,wBAAgB,qBAAqB,CACnC,SAAS,EAAE,iBAAiB,EAC5B,MAAM,GAAE,iBAAsB,EAC9B,YAAY,CAAC,EAAE,gBAAgB,GAC9B,OAAO,CAAC,eAAe,CAAC,CA+B1B"}
@@ -0,0 +1,32 @@
1
+ import { BasisTheoryAdapter } from "../adapters/basistheory/provider";
2
+ import { ElementManager } from "../runtime/element-manager";
3
+ import { tokenizeInstrument } from "../runtime/tokenize";
4
+ import { validateConfig } from "../validation/config";
5
+ export function createCardCollectCore(rawConfig, events = {}, dependencies) {
6
+ const config = validateConfig(rawConfig);
7
+ const adapter = new BasisTheoryAdapter();
8
+ const resolvedDependencies = dependencies ?? {
9
+ elementProvider: adapter,
10
+ tokenizationProvider: adapter
11
+ };
12
+ const manager = new ElementManager(resolvedDependencies.elementProvider, events);
13
+ return resolvedDependencies.elementProvider.initialize(config).then(() => ({
14
+ mount: (options) => manager.mount(options).catch((error) => {
15
+ events.onError?.(error);
16
+ throw error;
17
+ }),
18
+ unmount: () => manager.unmount(),
19
+ tokenize: async () => {
20
+ try {
21
+ const result = await tokenizeInstrument(resolvedDependencies.tokenizationProvider, manager.getHandle());
22
+ events.onTokenized?.(result);
23
+ return result;
24
+ }
25
+ catch (error) {
26
+ events.onError?.(error);
27
+ throw error;
28
+ }
29
+ }
30
+ }));
31
+ }
32
+ //# sourceMappingURL=card-collect-core.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"card-collect-core.js","sourceRoot":"","sources":["../../src/core/card-collect-core.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,MAAM,kCAAkC,CAAC;AAGtE,OAAO,EAAE,cAAc,EAAE,MAAM,4BAA4B,CAAC;AAC5D,OAAO,EAAE,kBAAkB,EAAE,MAAM,qBAAqB,CAAC;AAEzD,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAatD,MAAM,UAAU,qBAAqB,CACnC,SAA4B,EAC5B,SAA4B,EAAE,EAC9B,YAA+B;IAE/B,MAAM,MAAM,GAAG,cAAc,CAAC,SAAS,CAAC,CAAC;IACzC,MAAM,OAAO,GAAG,IAAI,kBAAkB,EAAE,CAAC;IACzC,MAAM,oBAAoB,GAAqB,YAAY,IAAI;QAC7D,eAAe,EAAE,OAAO;QACxB,oBAAoB,EAAE,OAAO;KAC9B,CAAC;IAEF,MAAM,OAAO,GAAG,IAAI,cAAc,CAAC,oBAAoB,CAAC,eAAe,EAAE,MAAM,CAAC,CAAC;IAEjF,OAAO,oBAAoB,CAAC,eAAe,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC;QACzE,KAAK,EAAE,CAAC,OAAO,EAAE,EAAE,CACjB,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,KAAK,CAAC,CAAC,KAAc,EAAE,EAAE;YAC9C,MAAM,CAAC,OAAO,EAAE,CAAC,KAAc,CAAC,CAAC;YACjC,MAAM,KAAK,CAAC;QACd,CAAC,CAAC;QACJ,OAAO,EAAE,GAAG,EAAE,CAAC,OAAO,CAAC,OAAO,EAAE;QAChC,QAAQ,EAAE,KAAK,IAAI,EAAE;YACnB,IAAI,CAAC;gBACH,MAAM,MAAM,GAAG,MAAM,kBAAkB,CACrC,oBAAoB,CAAC,oBAAoB,EACzC,OAAO,CAAC,SAAS,EAAE,CACpB,CAAC;gBACF,MAAM,CAAC,WAAW,EAAE,CAAC,MAAM,CAAC,CAAC;gBAC7B,OAAO,MAAM,CAAC;YAChB,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,MAAM,CAAC,OAAO,EAAE,CAAC,KAAc,CAAC,CAAC;gBACjC,MAAM,KAAK,CAAC;YACd,CAAC;QACH,CAAC;KACF,CAAC,CAAC,CAAC;AACN,CAAC"}
@@ -0,0 +1,6 @@
1
+ export { createCardCollectCore } from "./core/card-collect-core";
2
+ export type { CardCollectCore, CoreDependencies } from "./core/card-collect-core";
3
+ export type { BasisTheoryEnvironment, CollectCoreMode, CollectCoreConfig, CollectCoreEvents, MountOptions, SupportedInstrument, SupportedMarket, TokenizationResult } from "./types";
4
+ export type { ElementProviderPort } from "./ports/element-provider";
5
+ export type { TokenizationProviderPort } from "./ports/tokenization-provider";
6
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,qBAAqB,EAAE,MAAM,0BAA0B,CAAC;AACjE,YAAY,EAAE,eAAe,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAC;AAClF,YAAY,EACV,sBAAsB,EACtB,eAAe,EACf,iBAAiB,EACjB,iBAAiB,EACjB,YAAY,EACZ,mBAAmB,EACnB,eAAe,EACf,kBAAkB,EACnB,MAAM,SAAS,CAAC;AACjB,YAAY,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAC;AACpE,YAAY,EAAE,wBAAwB,EAAE,MAAM,+BAA+B,CAAC"}
package/dist/index.js ADDED
@@ -0,0 +1,2 @@
1
+ export { createCardCollectCore } from "./core/card-collect-core";
2
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,qBAAqB,EAAE,MAAM,0BAA0B,CAAC"}
@@ -0,0 +1,4 @@
1
+ import type { BasisTheoryEnvironment, CollectCoreMode } from "../types";
2
+ export declare function getWhitelabelDomain(mode: CollectCoreMode): string;
3
+ export declare function getDefaultEnvironmentForMode(mode: CollectCoreMode): BasisTheoryEnvironment;
4
+ //# sourceMappingURL=config.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/internal/config.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,sBAAsB,EAAE,eAAe,EAAE,MAAM,UAAU,CAAC;AAYxE,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,eAAe,GAAG,MAAM,CAEjE;AAED,wBAAgB,4BAA4B,CAAC,IAAI,EAAE,eAAe,GAAG,sBAAsB,CAE1F"}
@@ -0,0 +1,15 @@
1
+ const WHITELABEL_DOMAINS = {
2
+ sandbox: "https://elements-dev.paygood.co/",
3
+ production: "https://elements.paygood.com"
4
+ };
5
+ const MODE_DEFAULT_ENVIRONMENT = {
6
+ sandbox: "test",
7
+ production: "us"
8
+ };
9
+ export function getWhitelabelDomain(mode) {
10
+ return WHITELABEL_DOMAINS[mode];
11
+ }
12
+ export function getDefaultEnvironmentForMode(mode) {
13
+ return MODE_DEFAULT_ENVIRONMENT[mode];
14
+ }
15
+ //# sourceMappingURL=config.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/internal/config.ts"],"names":[],"mappings":"AAEA,MAAM,kBAAkB,GAAoC;IAC1D,OAAO,EAAE,kCAAkC;IAC3C,UAAU,EAAE,8BAA8B;CAC3C,CAAC;AAEF,MAAM,wBAAwB,GAAoD;IAChF,OAAO,EAAE,MAAM;IACf,UAAU,EAAE,IAAI;CACjB,CAAC;AAEF,MAAM,UAAU,mBAAmB,CAAC,IAAqB;IACvD,OAAO,kBAAkB,CAAC,IAAI,CAAC,CAAC;AAClC,CAAC;AAED,MAAM,UAAU,4BAA4B,CAAC,IAAqB;IAChE,OAAO,wBAAwB,CAAC,IAAI,CAAC,CAAC;AACxC,CAAC"}
@@ -0,0 +1,11 @@
1
+ import type { CollectCoreConfig, InstrumentHandle, MountOptions } from "../types";
2
+ export interface MountedInstrument {
3
+ handle: InstrumentHandle;
4
+ unmount: () => void;
5
+ on: (eventName: string, callback: (payload: unknown) => void) => void;
6
+ }
7
+ export interface ElementProviderPort {
8
+ initialize: (config: CollectCoreConfig) => Promise<void>;
9
+ mount: (options: MountOptions) => Promise<MountedInstrument>;
10
+ }
11
+ //# sourceMappingURL=element-provider.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"element-provider.d.ts","sourceRoot":"","sources":["../../src/ports/element-provider.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,gBAAgB,EAAE,YAAY,EAAE,MAAM,UAAU,CAAC;AAElF,MAAM,WAAW,iBAAiB;IAChC,MAAM,EAAE,gBAAgB,CAAC;IACzB,OAAO,EAAE,MAAM,IAAI,CAAC;IACpB,EAAE,EAAE,CAAC,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC,OAAO,EAAE,OAAO,KAAK,IAAI,KAAK,IAAI,CAAC;CACvE;AAED,MAAM,WAAW,mBAAmB;IAClC,UAAU,EAAE,CAAC,MAAM,EAAE,iBAAiB,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IACzD,KAAK,EAAE,CAAC,OAAO,EAAE,YAAY,KAAK,OAAO,CAAC,iBAAiB,CAAC,CAAC;CAC9D"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=element-provider.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"element-provider.js","sourceRoot":"","sources":["../../src/ports/element-provider.ts"],"names":[],"mappings":""}
@@ -0,0 +1,5 @@
1
+ import type { InstrumentHandle, TokenizationResult } from "../types";
2
+ export interface TokenizationProviderPort {
3
+ tokenize: (handle: InstrumentHandle) => Promise<TokenizationResult>;
4
+ }
5
+ //# sourceMappingURL=tokenization-provider.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tokenization-provider.d.ts","sourceRoot":"","sources":["../../src/ports/tokenization-provider.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,kBAAkB,EAAE,MAAM,UAAU,CAAC;AAErE,MAAM,WAAW,wBAAwB;IACvC,QAAQ,EAAE,CAAC,MAAM,EAAE,gBAAgB,KAAK,OAAO,CAAC,kBAAkB,CAAC,CAAC;CACrE"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=tokenization-provider.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tokenization-provider.js","sourceRoot":"","sources":["../../src/ports/tokenization-provider.ts"],"names":[],"mappings":""}
@@ -0,0 +1,13 @@
1
+ import type { ElementProviderPort } from "../ports/element-provider";
2
+ import type { CollectCoreEvents, MountOptions } from "../types";
3
+ export declare class ElementManager {
4
+ private readonly elementProvider;
5
+ private readonly events;
6
+ private mountedInstrument;
7
+ constructor(elementProvider: ElementProviderPort, events: CollectCoreEvents);
8
+ mount(options: MountOptions): Promise<void>;
9
+ private safeSubscribe;
10
+ unmount(): void;
11
+ getHandle(): import("../types").InstrumentHandle;
12
+ }
13
+ //# sourceMappingURL=element-manager.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"element-manager.d.ts","sourceRoot":"","sources":["../../src/runtime/element-manager.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,mBAAmB,EAAqB,MAAM,2BAA2B,CAAC;AACxF,OAAO,KAAK,EAAE,iBAAiB,EAAE,YAAY,EAAE,MAAM,UAAU,CAAC;AAEhE,qBAAa,cAAc;IAIvB,OAAO,CAAC,QAAQ,CAAC,eAAe;IAChC,OAAO,CAAC,QAAQ,CAAC,MAAM;IAJzB,OAAO,CAAC,iBAAiB,CAAkC;gBAGxC,eAAe,EAAE,mBAAmB,EACpC,MAAM,EAAE,iBAAiB;IAGtC,KAAK,CAAC,OAAO,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC;IAMjD,OAAO,CAAC,aAAa;IAgBrB,OAAO,IAAI,IAAI;IAmBf,SAAS;CAMV"}
@@ -0,0 +1,47 @@
1
+ export class ElementManager {
2
+ constructor(elementProvider, events) {
3
+ this.elementProvider = elementProvider;
4
+ this.events = events;
5
+ this.mountedInstrument = null;
6
+ }
7
+ async mount(options) {
8
+ this.mountedInstrument = await this.elementProvider.mount(options);
9
+ this.events.onReady?.();
10
+ this.safeSubscribe("change", (payload) => this.events.onChange?.(payload));
11
+ }
12
+ safeSubscribe(eventName, callback) {
13
+ if (!this.mountedInstrument) {
14
+ return;
15
+ }
16
+ try {
17
+ this.mountedInstrument.on(eventName, callback);
18
+ }
19
+ catch (error) {
20
+ this.events.onError?.(new Error(`Event subscription failed for "${eventName}": ${error.message}`));
21
+ }
22
+ }
23
+ unmount() {
24
+ if (this.mountedInstrument) {
25
+ try {
26
+ const result = this.mountedInstrument.unmount();
27
+ if (result &&
28
+ typeof result.catch === "function") {
29
+ void result.catch(() => {
30
+ // Ignore async teardown failures; unmount should be idempotent.
31
+ });
32
+ }
33
+ }
34
+ catch {
35
+ // Ignore sync teardown failures; unmount should be idempotent.
36
+ }
37
+ this.mountedInstrument = null;
38
+ }
39
+ }
40
+ getHandle() {
41
+ if (!this.mountedInstrument) {
42
+ throw new Error("No mounted instrument. Call mount first.");
43
+ }
44
+ return this.mountedInstrument.handle;
45
+ }
46
+ }
47
+ //# sourceMappingURL=element-manager.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"element-manager.js","sourceRoot":"","sources":["../../src/runtime/element-manager.ts"],"names":[],"mappings":"AAGA,MAAM,OAAO,cAAc;IAGzB,YACmB,eAAoC,EACpC,MAAyB;QADzB,oBAAe,GAAf,eAAe,CAAqB;QACpC,WAAM,GAAN,MAAM,CAAmB;QAJpC,sBAAiB,GAA6B,IAAI,CAAC;IAKxD,CAAC;IAEJ,KAAK,CAAC,KAAK,CAAC,OAAqB;QAC/B,IAAI,CAAC,iBAAiB,GAAG,MAAM,IAAI,CAAC,eAAe,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;QACnE,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,EAAE,CAAC;QACxB,IAAI,CAAC,aAAa,CAAC,QAAQ,EAAE,CAAC,OAAO,EAAE,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC;IAC7E,CAAC;IAEO,aAAa,CAAC,SAAiB,EAAE,QAAoC;QAC3E,IAAI,CAAC,IAAI,CAAC,iBAAiB,EAAE,CAAC;YAC5B,OAAO;QACT,CAAC;QAED,IAAI,CAAC;YACH,IAAI,CAAC,iBAAiB,CAAC,EAAE,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAC;QACjD,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CACnB,IAAI,KAAK,CACP,kCAAkC,SAAS,MAAO,KAAe,CAAC,OAAO,EAAE,CAC5E,CACF,CAAC;QACJ,CAAC;IACH,CAAC;IAED,OAAO;QACL,IAAI,IAAI,CAAC,iBAAiB,EAAE,CAAC;YAC3B,IAAI,CAAC;gBACH,MAAM,MAAM,GAAG,IAAI,CAAC,iBAAiB,CAAC,OAAO,EAAa,CAAC;gBAC3D,IACE,MAAM;oBACN,OAAQ,MAA8B,CAAC,KAAK,KAAK,UAAU,EAC3D,CAAC;oBACD,KAAM,MAAwB,CAAC,KAAK,CAAC,GAAG,EAAE;wBACxC,gEAAgE;oBAClE,CAAC,CAAC,CAAC;gBACL,CAAC;YACH,CAAC;YAAC,MAAM,CAAC;gBACP,+DAA+D;YACjE,CAAC;YACD,IAAI,CAAC,iBAAiB,GAAG,IAAI,CAAC;QAChC,CAAC;IACH,CAAC;IAED,SAAS;QACP,IAAI,CAAC,IAAI,CAAC,iBAAiB,EAAE,CAAC;YAC5B,MAAM,IAAI,KAAK,CAAC,0CAA0C,CAAC,CAAC;QAC9D,CAAC;QACD,OAAO,IAAI,CAAC,iBAAiB,CAAC,MAAM,CAAC;IACvC,CAAC;CACF"}
@@ -0,0 +1,4 @@
1
+ import type { TokenizationProviderPort } from "../ports/tokenization-provider";
2
+ import type { InstrumentHandle, TokenizationResult } from "../types";
3
+ export declare function tokenizeInstrument(provider: TokenizationProviderPort, handle: InstrumentHandle): Promise<TokenizationResult>;
4
+ //# sourceMappingURL=tokenize.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tokenize.d.ts","sourceRoot":"","sources":["../../src/runtime/tokenize.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,gCAAgC,CAAC;AAC/E,OAAO,KAAK,EAAE,gBAAgB,EAAE,kBAAkB,EAAE,MAAM,UAAU,CAAC;AAErE,wBAAsB,kBAAkB,CACtC,QAAQ,EAAE,wBAAwB,EAClC,MAAM,EAAE,gBAAgB,GACvB,OAAO,CAAC,kBAAkB,CAAC,CAE7B"}
@@ -0,0 +1,4 @@
1
+ export async function tokenizeInstrument(provider, handle) {
2
+ return provider.tokenize(handle);
3
+ }
4
+ //# sourceMappingURL=tokenize.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tokenize.js","sourceRoot":"","sources":["../../src/runtime/tokenize.ts"],"names":[],"mappings":"AAGA,MAAM,CAAC,KAAK,UAAU,kBAAkB,CACtC,QAAkC,EAClC,MAAwB;IAExB,OAAO,QAAQ,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;AACnC,CAAC"}
@@ -0,0 +1,31 @@
1
+ export type SupportedMarket = "US" | "CA";
2
+ export type SupportedInstrument = "card" | "bank_account";
3
+ export type BasisTheoryEnvironment = "test" | "us" | "eu";
4
+ export type CollectCoreMode = "sandbox" | "production";
5
+ export interface CollectCoreConfig {
6
+ mode?: CollectCoreMode;
7
+ environment?: BasisTheoryEnvironment;
8
+ market: SupportedMarket;
9
+ instrument?: SupportedInstrument;
10
+ debug?: boolean;
11
+ }
12
+ export interface MountOptions {
13
+ targetId: string;
14
+ options?: Record<string, unknown>;
15
+ }
16
+ export interface InstrumentHandle {
17
+ id: string;
18
+ }
19
+ export interface TokenizationResult {
20
+ tokenId: string;
21
+ type: SupportedInstrument;
22
+ provider: "basistheory";
23
+ raw: unknown;
24
+ }
25
+ export interface CollectCoreEvents {
26
+ onReady?: () => void;
27
+ onChange?: (payload: unknown) => void;
28
+ onError?: (error: Error) => void;
29
+ onTokenized?: (result: TokenizationResult) => void;
30
+ }
31
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,eAAe,GAAG,IAAI,GAAG,IAAI,CAAC;AAC1C,MAAM,MAAM,mBAAmB,GAAG,MAAM,GAAG,cAAc,CAAC;AAC1D,MAAM,MAAM,sBAAsB,GAAG,MAAM,GAAG,IAAI,GAAG,IAAI,CAAC;AAC1D,MAAM,MAAM,eAAe,GAAG,SAAS,GAAG,YAAY,CAAC;AAEvD,MAAM,WAAW,iBAAiB;IAChC,IAAI,CAAC,EAAE,eAAe,CAAC;IACvB,WAAW,CAAC,EAAE,sBAAsB,CAAC;IACrC,MAAM,EAAE,eAAe,CAAC;IACxB,UAAU,CAAC,EAAE,mBAAmB,CAAC;IACjC,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB;AAED,MAAM,WAAW,YAAY;IAC3B,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACnC;AAED,MAAM,WAAW,gBAAgB;IAC/B,EAAE,EAAE,MAAM,CAAC;CACZ;AAED,MAAM,WAAW,kBAAkB;IACjC,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,mBAAmB,CAAC;IAC1B,QAAQ,EAAE,aAAa,CAAC;IACxB,GAAG,EAAE,OAAO,CAAC;CACd;AAED,MAAM,WAAW,iBAAiB;IAChC,OAAO,CAAC,EAAE,MAAM,IAAI,CAAC;IACrB,QAAQ,CAAC,EAAE,CAAC,OAAO,EAAE,OAAO,KAAK,IAAI,CAAC;IACtC,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,IAAI,CAAC;IACjC,WAAW,CAAC,EAAE,CAAC,MAAM,EAAE,kBAAkB,KAAK,IAAI,CAAC;CACpD"}
package/dist/types.js ADDED
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":""}
@@ -0,0 +1,3 @@
1
+ import type { CollectCoreConfig } from "../types";
2
+ export declare function validateConfig(input: CollectCoreConfig): CollectCoreConfig;
3
+ //# sourceMappingURL=config.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/validation/config.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,UAAU,CAAC;AAUlD,wBAAgB,cAAc,CAAC,KAAK,EAAE,iBAAiB,GAAG,iBAAiB,CAE1E"}
@@ -0,0 +1,12 @@
1
+ import { z } from "zod";
2
+ const configSchema = z.object({
3
+ mode: z.enum(["sandbox", "production"]).default("sandbox"),
4
+ environment: z.enum(["test", "us", "eu"]).default("test"),
5
+ market: z.enum(["US", "CA"]),
6
+ instrument: z.enum(["card", "bank_account"]).default("card"),
7
+ debug: z.boolean().optional()
8
+ });
9
+ export function validateConfig(input) {
10
+ return configSchema.parse(input);
11
+ }
12
+ //# sourceMappingURL=config.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/validation/config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAGxB,MAAM,YAAY,GAAG,CAAC,CAAC,MAAM,CAAC;IAC5B,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,SAAS,EAAE,YAAY,CAAC,CAAC,CAAC,OAAO,CAAC,SAAS,CAAC;IAC1D,WAAW,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC;IACzD,MAAM,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;IAC5B,UAAU,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,cAAc,CAAC,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC;IAC5D,KAAK,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE;CAC9B,CAAC,CAAC;AAEH,MAAM,UAAU,cAAc,CAAC,KAAwB;IACrD,OAAO,YAAY,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;AACnC,CAAC"}
package/package.json ADDED
@@ -0,0 +1,32 @@
1
+ {
2
+ "name": "@paygood1/collect-core",
3
+ "version": "0.3.1",
4
+ "description": "Pure card collection module for PayGood",
5
+ "type": "module",
6
+ "main": "./dist/index.js",
7
+ "module": "./dist/index.js",
8
+ "types": "./dist/index.d.ts",
9
+ "exports": {
10
+ ".": {
11
+ "types": "./dist/index.d.ts",
12
+ "import": "./dist/index.js"
13
+ }
14
+ },
15
+ "files": [
16
+ "dist"
17
+ ],
18
+ "sideEffects": false,
19
+ "scripts": {
20
+ "build": "tsc -p tsconfig.json",
21
+ "test": "vitest run",
22
+ "lint": "tsc --noEmit -p tsconfig.json"
23
+ },
24
+ "dependencies": {
25
+ "@basis-theory/web-elements": "2.15.0",
26
+ "zod": "^3.23.8"
27
+ },
28
+ "devDependencies": {
29
+ "typescript": "^5.6.2",
30
+ "vitest": "^2.0.5"
31
+ }
32
+ }