@basis-theory/web-elements 2.11.2 → 3.0.0-beta.2
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 +668 -2
- package/dist/.vite/manifest.json +27 -0
- package/dist/api-client/src/api-client.d.ts +11 -0
- package/dist/api-client/src/api-client.d.ts.map +1 -0
- package/dist/api-client/src/http-client.d.ts +24 -0
- package/dist/api-client/src/http-client.d.ts.map +1 -0
- package/dist/api-client/src/index.d.ts +9 -0
- package/dist/api-client/src/index.d.ts.map +1 -0
- package/dist/api-client/src/services/sessions.d.ts +19 -0
- package/dist/api-client/src/services/sessions.d.ts.map +1 -0
- package/dist/api-client/src/services/token-intents.d.ts +17 -0
- package/dist/api-client/src/services/token-intents.d.ts.map +1 -0
- package/dist/api-client/src/services/tokens.d.ts +19 -0
- package/dist/api-client/src/services/tokens.d.ts.map +1 -0
- package/dist/api-client/src/types.d.ts +313 -0
- package/dist/api-client/src/types.d.ts.map +1 -0
- package/dist/basis-theory-sdk.es.js +6 -0
- package/dist/basis-theory-sdk.es.js.map +1 -0
- package/dist/basis-theory-sdk.umd.js +1 -0
- package/dist/basis-theory-sdk.umd.js.map +1 -0
- package/dist/create-card-BuOvimjH.js +232 -0
- package/dist/create-card-BuOvimjH.js.map +1 -0
- package/dist/index-oREjBjga.js +2317 -0
- package/dist/index-oREjBjga.js.map +1 -0
- package/dist/loader/basis-theory.min.js +1 -0
- package/dist/postmessage/src/client.d.ts +7 -0
- package/dist/postmessage/src/client.d.ts.map +1 -0
- package/dist/postmessage/src/event-map.d.ts +135 -0
- package/dist/postmessage/src/event-map.d.ts.map +1 -0
- package/dist/postmessage/src/index.d.ts +9 -0
- package/dist/postmessage/src/index.d.ts.map +1 -0
- package/dist/postmessage/src/server.d.ts +11 -0
- package/dist/postmessage/src/server.d.ts.map +1 -0
- package/dist/postmessage/src/types.d.ts +71 -0
- package/dist/postmessage/src/types.d.ts.map +1 -0
- package/dist/shared/src/api-url-resolver.d.ts +22 -0
- package/dist/shared/src/api-url-resolver.d.ts.map +1 -0
- package/dist/shared/src/debug-logger.d.ts +16 -0
- package/dist/shared/src/debug-logger.d.ts.map +1 -0
- package/dist/shared/src/deep-sanitization.d.ts +24 -0
- package/dist/shared/src/deep-sanitization.d.ts.map +1 -0
- package/dist/shared/src/errors.d.ts +93 -0
- package/dist/shared/src/errors.d.ts.map +1 -0
- package/dist/shared/src/generate-id.d.ts +13 -0
- package/dist/shared/src/generate-id.d.ts.map +1 -0
- package/dist/shared/src/index.d.ts +13 -0
- package/dist/shared/src/index.d.ts.map +1 -0
- package/dist/shared/src/logger-context.d.ts +25 -0
- package/dist/shared/src/logger-context.d.ts.map +1 -0
- package/dist/sri.json +22 -0
- package/dist/stats.html +4949 -0
- package/dist/web-elements/src/BasisTheory.d.ts +47 -0
- package/dist/web-elements/src/BasisTheory.d.ts.map +1 -0
- package/dist/web-elements/src/basis-theory.d.ts +62 -0
- package/dist/web-elements/src/basis-theory.d.ts.map +1 -0
- package/dist/web-elements/src/elements/create-card-number.d.ts +14 -0
- package/dist/web-elements/src/elements/create-card-number.d.ts.map +1 -0
- package/dist/web-elements/src/elements/create-card.d.ts +37 -0
- package/dist/web-elements/src/elements/create-card.d.ts.map +1 -0
- package/dist/web-elements/src/elements/create-cvv.d.ts +10 -0
- package/dist/web-elements/src/elements/create-cvv.d.ts.map +1 -0
- package/dist/web-elements/src/elements/create-expiry.d.ts +10 -0
- package/dist/web-elements/src/elements/create-expiry.d.ts.map +1 -0
- package/dist/web-elements/src/elements/create-text.d.ts +13 -0
- package/dist/web-elements/src/elements/create-text.d.ts.map +1 -0
- package/dist/web-elements/src/index.d.ts +27 -0
- package/dist/web-elements/src/index.d.ts.map +1 -0
- package/dist/web-elements/src/mounter/create-mounter.d.ts +11 -0
- package/dist/web-elements/src/mounter/create-mounter.d.ts.map +1 -0
- package/dist/web-elements/src/theme/default-theme.d.ts +22 -0
- package/dist/web-elements/src/theme/default-theme.d.ts.map +1 -0
- package/dist/web-elements/src/theme/inject-theme-dark.d.ts +13 -0
- package/dist/web-elements/src/theme/inject-theme-dark.d.ts.map +1 -0
- package/dist/web-elements/src/theme/inject-theme.d.ts +20 -0
- package/dist/web-elements/src/theme/inject-theme.d.ts.map +1 -0
- package/dist/web-elements/src/types/events.d.ts +137 -0
- package/dist/web-elements/src/types/events.d.ts.map +1 -0
- package/dist/web-elements/src/types/theme.d.ts +91 -0
- package/dist/web-elements/src/types/theme.d.ts.map +1 -0
- package/dist/web-elements/src/types.d.ts +537 -0
- package/dist/web-elements/src/types.d.ts.map +1 -0
- package/dist/web-elements/src/utils/create-event-dispatcher.d.ts +47 -0
- package/dist/web-elements/src/utils/create-event-dispatcher.d.ts.map +1 -0
- package/dist/web-elements/src/utils/create-iframe.d.ts +10 -0
- package/dist/web-elements/src/utils/create-iframe.d.ts.map +1 -0
- package/dist/web-elements/src/utils/resolve-element-references.d.ts +20 -0
- package/dist/web-elements/src/utils/resolve-element-references.d.ts.map +1 -0
- package/dist/web-elements/src/utils/validate-element-options.d.ts +11 -0
- package/dist/web-elements/src/utils/validate-element-options.d.ts.map +1 -0
- package/dist/web-elements/src/utils/validate-sdk-config.d.ts +15 -0
- package/dist/web-elements/src/utils/validate-sdk-config.d.ts.map +1 -0
- package/dist/web-elements/src/utils/warn-unknown-keys.d.ts +15 -0
- package/dist/web-elements/src/utils/warn-unknown-keys.d.ts.map +1 -0
- package/dist/web-elements/src/version.d.ts +25 -0
- package/dist/web-elements/src/version.d.ts.map +1 -0
- package/package.json +53 -72
- package/LICENSE +0 -202
- package/dist/LICENSE +0 -202
- package/dist/README.md +0 -3
- package/dist/bundle/index.js +0 -1
- package/dist/main/index.js +0 -1161
- package/dist/module/module.js +0 -1159
- package/dist/package.json +0 -37
- package/dist/types/index.d.ts +0 -732
|
@@ -0,0 +1,537 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Type definitions for @basis-theory/web-elements
|
|
3
|
+
*/
|
|
4
|
+
import type { TokenIntent } from '@basis-theory-elements/api-client';
|
|
5
|
+
import type { ElementType } from './types/events';
|
|
6
|
+
import type { ThemeMode, ThemeTokens } from './types/theme';
|
|
7
|
+
export type { TokenIntent };
|
|
8
|
+
/**
|
|
9
|
+
* Transform pattern for modifying input before tokenization
|
|
10
|
+
* [pattern, replacement] - uses String.prototype.replace(pattern, replacement)
|
|
11
|
+
*
|
|
12
|
+
* @example
|
|
13
|
+
* // Remove dashes from SSN: "123-45-6789" → "123456789"
|
|
14
|
+
* const ssnTransform: Transform = [/-/g, ''];
|
|
15
|
+
*
|
|
16
|
+
* @example
|
|
17
|
+
* // Remove all non-digits from phone: "(555) 123-4567" → "5551234567"
|
|
18
|
+
* const phoneTransform: Transform = [/\D/g, ''];
|
|
19
|
+
*/
|
|
20
|
+
export type Transform = [RegExp, string];
|
|
21
|
+
export interface SDKOptions {
|
|
22
|
+
/**
|
|
23
|
+
* Base URL where element iframes are hosted
|
|
24
|
+
* FRD-2026-003: Now defaults to production CDN (build-time injected, environment-specific)
|
|
25
|
+
* @default 'https://js.basistheory.com/{version}/elements' (production)
|
|
26
|
+
* @example 'http://localhost:4243' (for local development)
|
|
27
|
+
*/
|
|
28
|
+
elementsBaseUrl?: string;
|
|
29
|
+
/**
|
|
30
|
+
* @deprecated Use `elementsBaseUrl` instead
|
|
31
|
+
* Origin of the iframe host (where element.html is served)
|
|
32
|
+
*/
|
|
33
|
+
iframeOrigin?: string;
|
|
34
|
+
/**
|
|
35
|
+
* API base URL for tokenization and API operations
|
|
36
|
+
* Auto-detects based on page origin by default:
|
|
37
|
+
* - localhost/flock-dev.com → https://js.flock-dev.com/api (dev)
|
|
38
|
+
* - btsandbox.com → https://js.btsandbox.com/api (uat)
|
|
39
|
+
* - basistheory.com → https://js.basistheory.com/api (prod)
|
|
40
|
+
* - other origins → https://js.basistheory.com/api (prod default)
|
|
41
|
+
*
|
|
42
|
+
* Override for:
|
|
43
|
+
* - Testing against custom API environments
|
|
44
|
+
* - Corporate proxies routing API calls
|
|
45
|
+
* - Regional API endpoints
|
|
46
|
+
*
|
|
47
|
+
* @default Auto-detected based on window.location.origin
|
|
48
|
+
* @example 'https://api-proxy.company.com/basistheory'
|
|
49
|
+
*/
|
|
50
|
+
apiBaseUrl?: string;
|
|
51
|
+
/**
|
|
52
|
+
* Enable debug logging
|
|
53
|
+
* @default false
|
|
54
|
+
*/
|
|
55
|
+
debug?: boolean;
|
|
56
|
+
/**
|
|
57
|
+
* Enable performance monitoring (bundle size, load times, compression metrics)
|
|
58
|
+
* When enabled, automatically measures and logs performance after elements load
|
|
59
|
+
* @default false
|
|
60
|
+
*/
|
|
61
|
+
measurePerformance?: boolean;
|
|
62
|
+
/**
|
|
63
|
+
* PostMessage timeout (milliseconds)
|
|
64
|
+
* Increase this for slow network connections (3G, etc.)
|
|
65
|
+
* @default 30000
|
|
66
|
+
*/
|
|
67
|
+
timeoutMs?: number;
|
|
68
|
+
/**
|
|
69
|
+
* PostMessage retry configuration
|
|
70
|
+
*/
|
|
71
|
+
retryConfig?: {
|
|
72
|
+
maxRetries: number;
|
|
73
|
+
delayMs: number;
|
|
74
|
+
backoffFactor: number;
|
|
75
|
+
};
|
|
76
|
+
/**
|
|
77
|
+
* Theme mode: 'light', 'dark', or 'auto' (follows prefers-color-scheme)
|
|
78
|
+
* @default 'auto'
|
|
79
|
+
*/
|
|
80
|
+
themeMode?: ThemeMode;
|
|
81
|
+
/**
|
|
82
|
+
* Theme configuration (design tokens)
|
|
83
|
+
* CSS variables will be injected into element iframes
|
|
84
|
+
*
|
|
85
|
+
* Supports light/dark themes via themeMode or separate theme/darkTheme objects
|
|
86
|
+
*
|
|
87
|
+
* @example
|
|
88
|
+
* ```typescript
|
|
89
|
+
* theme: {
|
|
90
|
+
* colors: {
|
|
91
|
+
* primary: '#007bff',
|
|
92
|
+
* error: '#EA4B97',
|
|
93
|
+
* text: '#1a1a1a',
|
|
94
|
+
* },
|
|
95
|
+
* typography: {
|
|
96
|
+
* fontFamily: 'Inter, sans-serif',
|
|
97
|
+
* fontSize: { base: '16px' },
|
|
98
|
+
* fontWeight: { normal: '400' },
|
|
99
|
+
* },
|
|
100
|
+
* spacing: { sm: '8px', md: '12px', lg: '16px' },
|
|
101
|
+
* borders: {
|
|
102
|
+
* radius: { base: '4px' },
|
|
103
|
+
* width: { base: '2px' },
|
|
104
|
+
* },
|
|
105
|
+
* }
|
|
106
|
+
* ```
|
|
107
|
+
*/
|
|
108
|
+
theme?: ThemeTokens;
|
|
109
|
+
/**
|
|
110
|
+
* Optional dark theme configuration
|
|
111
|
+
* Used when themeMode is 'dark' or 'auto' in dark mode
|
|
112
|
+
*
|
|
113
|
+
* If not provided, will use theme with adjusted colors for dark mode
|
|
114
|
+
*/
|
|
115
|
+
darkTheme?: ThemeTokens;
|
|
116
|
+
}
|
|
117
|
+
export interface SDKConfig {
|
|
118
|
+
iframeOrigin: string;
|
|
119
|
+
elementsBaseUrl: string;
|
|
120
|
+
apiBaseUrl?: string;
|
|
121
|
+
debug: boolean;
|
|
122
|
+
measurePerformance: boolean;
|
|
123
|
+
timeoutMs: number;
|
|
124
|
+
themeMode: ThemeMode;
|
|
125
|
+
theme: ThemeTokens;
|
|
126
|
+
darkTheme?: ThemeTokens;
|
|
127
|
+
retryConfig: {
|
|
128
|
+
maxRetries: number;
|
|
129
|
+
delayMs: number;
|
|
130
|
+
backoffFactor: number;
|
|
131
|
+
};
|
|
132
|
+
}
|
|
133
|
+
export type { ElementType } from './types/events';
|
|
134
|
+
export type EventType = 'change' | 'ready' | 'focus' | 'blur' | 'error';
|
|
135
|
+
export interface ElementOptions {
|
|
136
|
+
/**
|
|
137
|
+
* Placeholder text displayed when input is empty.
|
|
138
|
+
* For card elements, an object with per-field placeholders.
|
|
139
|
+
*/
|
|
140
|
+
placeholder?: string | {
|
|
141
|
+
cardNumber?: string;
|
|
142
|
+
expiryDate?: string;
|
|
143
|
+
cvc?: string;
|
|
144
|
+
};
|
|
145
|
+
/**
|
|
146
|
+
* ARIA label for accessibility
|
|
147
|
+
* @default Based on element type (e.g., 'Card Number')
|
|
148
|
+
*/
|
|
149
|
+
ariaLabel?: string;
|
|
150
|
+
/**
|
|
151
|
+
* Disable the input
|
|
152
|
+
* @default false
|
|
153
|
+
*/
|
|
154
|
+
disabled?: boolean;
|
|
155
|
+
/**
|
|
156
|
+
* Make the input read-only
|
|
157
|
+
* @default false
|
|
158
|
+
*/
|
|
159
|
+
readOnly?: boolean;
|
|
160
|
+
/**
|
|
161
|
+
* RegExp pattern for validation
|
|
162
|
+
* Only applicable to text elements
|
|
163
|
+
* @example /^[a-zA-Z\s]{2,50}$/ for names
|
|
164
|
+
* @example /^\d{3}-\d{2}-\d{4}$/ for SSN
|
|
165
|
+
*/
|
|
166
|
+
validation?: RegExp;
|
|
167
|
+
/**
|
|
168
|
+
* Whether the field is required
|
|
169
|
+
* Only applicable to text elements
|
|
170
|
+
* @default false
|
|
171
|
+
*/
|
|
172
|
+
required?: boolean;
|
|
173
|
+
/**
|
|
174
|
+
* Maximum input length
|
|
175
|
+
* Only applicable to text elements
|
|
176
|
+
* @example 50 for name fields
|
|
177
|
+
*/
|
|
178
|
+
maxLength?: number;
|
|
179
|
+
/**
|
|
180
|
+
* Enable password mode (type="password")
|
|
181
|
+
* Only applicable to text elements
|
|
182
|
+
* @default false
|
|
183
|
+
*/
|
|
184
|
+
password?: boolean;
|
|
185
|
+
/**
|
|
186
|
+
* Mobile keyboard hint
|
|
187
|
+
* Only applicable to text elements
|
|
188
|
+
* @example 'numeric', 'tel', 'email'
|
|
189
|
+
*/
|
|
190
|
+
inputMode?: string;
|
|
191
|
+
/**
|
|
192
|
+
* Input masking pattern (lazy-loaded ~5KB module)
|
|
193
|
+
* Only applicable to text elements
|
|
194
|
+
*
|
|
195
|
+
* @example
|
|
196
|
+
* // SSN: XXX-XX-XXXX
|
|
197
|
+
* mask: [/\d/, /\d/, /\d/, '-', /\d/, /\d/, '-', /\d/, /\d/, /\d/, /\d/]
|
|
198
|
+
*
|
|
199
|
+
* // Phone: (XXX) XXX-XXXX
|
|
200
|
+
* mask: ['(', /\d/, /\d/, /\d/, ')', ' ', /\d/, /\d/, /\d/, '-', /\d/, /\d/, /\d/, /\d/]
|
|
201
|
+
*/
|
|
202
|
+
mask?: (RegExp | string)[];
|
|
203
|
+
/**
|
|
204
|
+
* Transform pattern before tokenization
|
|
205
|
+
* Only applicable to text elements
|
|
206
|
+
*
|
|
207
|
+
* @example
|
|
208
|
+
* // Remove dashes from SSN before tokenization
|
|
209
|
+
* transform: [/-/g, '']
|
|
210
|
+
*/
|
|
211
|
+
transform?: Transform;
|
|
212
|
+
/**
|
|
213
|
+
* Renders a show/hide toggle button inside the CVV field.
|
|
214
|
+
* Clicking toggles between `type="password"` and `type="text"`.
|
|
215
|
+
* CVV element only. Set at creation time only — runtime updates via
|
|
216
|
+
* `element.update()` are not supported.
|
|
217
|
+
* @default false
|
|
218
|
+
*/
|
|
219
|
+
showToggle?: boolean;
|
|
220
|
+
/**
|
|
221
|
+
* Card brand (auto-set by SDK when card number element detects brand)
|
|
222
|
+
* Used internally for CVV element coordination
|
|
223
|
+
* @internal
|
|
224
|
+
*/
|
|
225
|
+
cardBrand?: string;
|
|
226
|
+
/**
|
|
227
|
+
* CVV lengths array (auto-set by SDK when card number element detects brand)
|
|
228
|
+
* Used internally for CVV element maxlength coordination
|
|
229
|
+
* Example: [4] for Amex, [3] for Visa/Mastercard
|
|
230
|
+
* @internal
|
|
231
|
+
*/
|
|
232
|
+
cvvLengths?: number[];
|
|
233
|
+
/**
|
|
234
|
+
* Layout mode for unified card element
|
|
235
|
+
* Only applicable to card elements
|
|
236
|
+
* @default 'auto'
|
|
237
|
+
*/
|
|
238
|
+
layout?: 'row' | 'column' | 'auto';
|
|
239
|
+
/**
|
|
240
|
+
* Stack threshold in pixels (only applies when layout: 'auto')
|
|
241
|
+
* Only applicable to card elements
|
|
242
|
+
* @default 400
|
|
243
|
+
*/
|
|
244
|
+
stackAt?: number;
|
|
245
|
+
/**
|
|
246
|
+
* Icon position for card brand icon
|
|
247
|
+
* Only applicable to card elements
|
|
248
|
+
* @default 'right'
|
|
249
|
+
*/
|
|
250
|
+
iconPosition?: 'left' | 'right' | 'none';
|
|
251
|
+
/**
|
|
252
|
+
* Restrict accepted card brands
|
|
253
|
+
* Only applicable to card elements
|
|
254
|
+
*/
|
|
255
|
+
cardBrands?: string[];
|
|
256
|
+
}
|
|
257
|
+
export interface Element {
|
|
258
|
+
/**
|
|
259
|
+
* Unique identifier for the element
|
|
260
|
+
*/
|
|
261
|
+
readonly id: string;
|
|
262
|
+
/**
|
|
263
|
+
* Element type ('cardNumber', 'cvv', 'expiry')
|
|
264
|
+
*/
|
|
265
|
+
readonly type: ElementType;
|
|
266
|
+
/**
|
|
267
|
+
* Whether the element is currently mounted to the DOM
|
|
268
|
+
*/
|
|
269
|
+
readonly mounted: boolean;
|
|
270
|
+
/**
|
|
271
|
+
* Mount the element to a DOM container
|
|
272
|
+
* @param selector - CSS selector or HTMLElement
|
|
273
|
+
*/
|
|
274
|
+
mount(selector: string | HTMLElement): Promise<void>;
|
|
275
|
+
/**
|
|
276
|
+
* Unmount the element from the DOM
|
|
277
|
+
*/
|
|
278
|
+
unmount(): void;
|
|
279
|
+
/**
|
|
280
|
+
* Update element configuration (placeholder, style, theme mode, etc.)
|
|
281
|
+
*/
|
|
282
|
+
update(options: Partial<ElementOptions> & {
|
|
283
|
+
themeMode?: 'light' | 'dark' | 'auto';
|
|
284
|
+
}): Promise<void>;
|
|
285
|
+
/**
|
|
286
|
+
* Focus the input
|
|
287
|
+
*/
|
|
288
|
+
focus(): void;
|
|
289
|
+
/**
|
|
290
|
+
* Blur the input
|
|
291
|
+
*/
|
|
292
|
+
blur(): void;
|
|
293
|
+
/**
|
|
294
|
+
* Clear the input value
|
|
295
|
+
*/
|
|
296
|
+
clear(): void;
|
|
297
|
+
/**
|
|
298
|
+
* Listen for element events
|
|
299
|
+
* @returns Unsubscribe function
|
|
300
|
+
*/
|
|
301
|
+
on(eventType: EventType, listener: EventListener): () => void;
|
|
302
|
+
}
|
|
303
|
+
export type EventListener = (event: CustomEvent) => void;
|
|
304
|
+
/**
|
|
305
|
+
* Re-export unified event types from ./types/events
|
|
306
|
+
* All events now include BaseEventDetail (elementType, elementId, timestamp)
|
|
307
|
+
*/
|
|
308
|
+
export type { BaseEventDetail, BlurEventDetail, CardElementChangeEventDetail, CardNumberChangeEventDetail, ChangeEventDetail, ElementEventDetailMap, ElementEventListener, ElementEventType, ErrorCode, ErrorEventDetail, FocusEventDetail, ReadyEventDetail, ValidationError, } from './types/events';
|
|
309
|
+
/** Primitive or an Element reference — resolved to a value during tokenization */
|
|
310
|
+
export type ElementLeaf = string | number | boolean | null | undefined | Element;
|
|
311
|
+
/** Freeform object that may contain Element references at any depth */
|
|
312
|
+
export interface ElementInputObject {
|
|
313
|
+
[key: string]: ElementLeaf | ElementInputObject | ElementInputArray;
|
|
314
|
+
}
|
|
315
|
+
/** Array that may contain Element references at any depth */
|
|
316
|
+
export type ElementInputArray = Array<ElementLeaf | ElementInputObject | ElementInputArray>;
|
|
317
|
+
export interface TokenCreateRequest {
|
|
318
|
+
type: string;
|
|
319
|
+
data: ElementInputObject;
|
|
320
|
+
metadata?: Record<string, string>;
|
|
321
|
+
containers?: string[];
|
|
322
|
+
mask?: Record<string, unknown>;
|
|
323
|
+
aliases?: string[];
|
|
324
|
+
search_indexes?: string[];
|
|
325
|
+
fingerprint_expression?: string;
|
|
326
|
+
expires_at?: string;
|
|
327
|
+
}
|
|
328
|
+
/** Token `type` is immutable after creation */
|
|
329
|
+
export type TokenUpdateRequest = Omit<Partial<TokenCreateRequest>, 'type'>;
|
|
330
|
+
export interface TokenIntentRequest {
|
|
331
|
+
type: string;
|
|
332
|
+
data: ElementInputObject;
|
|
333
|
+
}
|
|
334
|
+
export type TokenizeInput = {
|
|
335
|
+
cardNumber: Element;
|
|
336
|
+
} | {
|
|
337
|
+
number: Element;
|
|
338
|
+
cvv: Element;
|
|
339
|
+
expiry: Element;
|
|
340
|
+
};
|
|
341
|
+
/**
|
|
342
|
+
* Session response (snake_case to match BasisTheory API)
|
|
343
|
+
*/
|
|
344
|
+
export interface Session {
|
|
345
|
+
/** Unique session nonce */
|
|
346
|
+
nonce: string;
|
|
347
|
+
/** Session expiration timestamp (ISO 8601 format) */
|
|
348
|
+
expires_at?: string;
|
|
349
|
+
}
|
|
350
|
+
export interface TokenizeResult {
|
|
351
|
+
id: string;
|
|
352
|
+
type: 'card' | 'token';
|
|
353
|
+
mask?: string;
|
|
354
|
+
brand?: string;
|
|
355
|
+
expiry?: {
|
|
356
|
+
month: number;
|
|
357
|
+
year: number;
|
|
358
|
+
};
|
|
359
|
+
metadata?: Record<string, unknown>;
|
|
360
|
+
}
|
|
361
|
+
/**
|
|
362
|
+
* Token data for encryption
|
|
363
|
+
*/
|
|
364
|
+
export interface EncryptToken {
|
|
365
|
+
type: string;
|
|
366
|
+
data: ElementInputObject;
|
|
367
|
+
}
|
|
368
|
+
/**
|
|
369
|
+
* Encrypted token result
|
|
370
|
+
*/
|
|
371
|
+
export interface EncryptedToken {
|
|
372
|
+
encrypted: string;
|
|
373
|
+
type: string;
|
|
374
|
+
}
|
|
375
|
+
/**
|
|
376
|
+
* Sub-element reference for tokenization (used in CardElement)
|
|
377
|
+
*/
|
|
378
|
+
export interface SubElementRef {
|
|
379
|
+
id: string;
|
|
380
|
+
type: string;
|
|
381
|
+
mounted: boolean;
|
|
382
|
+
mount: () => never;
|
|
383
|
+
unmount: () => void;
|
|
384
|
+
update: () => Promise<void>;
|
|
385
|
+
focus: () => void;
|
|
386
|
+
blur: () => void;
|
|
387
|
+
clear: () => void;
|
|
388
|
+
on: () => () => void;
|
|
389
|
+
}
|
|
390
|
+
/**
|
|
391
|
+
* Card element with sub-field refs
|
|
392
|
+
*/
|
|
393
|
+
export interface CardElement extends Element {
|
|
394
|
+
fields: {
|
|
395
|
+
number: SubElementRef;
|
|
396
|
+
expiryDate: SubElementRef;
|
|
397
|
+
cvc: SubElementRef;
|
|
398
|
+
};
|
|
399
|
+
}
|
|
400
|
+
export type { CardElementOptions } from './elements/create-card';
|
|
401
|
+
export interface BasisTheorySDK {
|
|
402
|
+
/**
|
|
403
|
+
* Create a new element instance
|
|
404
|
+
* Returns Element instance immediately (synchronous)
|
|
405
|
+
*/
|
|
406
|
+
createElement(type: 'card', options?: ElementOptions): CardElement;
|
|
407
|
+
createElement(type: Exclude<ElementType, 'card'>, options?: ElementOptions): Element;
|
|
408
|
+
createElement(type: ElementType, options?: ElementOptions): Element | CardElement;
|
|
409
|
+
/**
|
|
410
|
+
* Tokenize data (creates a token)
|
|
411
|
+
*/
|
|
412
|
+
tokenize(data: ElementInputObject): Promise<TokenizeResult>;
|
|
413
|
+
/**
|
|
414
|
+
* Token CRUD operations
|
|
415
|
+
* Supports Element references - automatically resolves to secure values
|
|
416
|
+
*
|
|
417
|
+
* @example
|
|
418
|
+
* ```typescript
|
|
419
|
+
* // Create token with Elements (element references resolved automatically)
|
|
420
|
+
* const token = await bt.tokens.create({
|
|
421
|
+
* type: 'card',
|
|
422
|
+
* data: {
|
|
423
|
+
* number: cardNumberElement,
|
|
424
|
+
* expiration_month: expiryElement,
|
|
425
|
+
* cvc: cvvElement
|
|
426
|
+
* }
|
|
427
|
+
* });
|
|
428
|
+
*
|
|
429
|
+
* // Retrieve token
|
|
430
|
+
* const retrieved = await bt.tokens.retrieve(token.id);
|
|
431
|
+
*
|
|
432
|
+
* // Update token metadata
|
|
433
|
+
* await bt.tokens.update(token.id, {
|
|
434
|
+
* metadata: { source: 'updated' }
|
|
435
|
+
* });
|
|
436
|
+
*
|
|
437
|
+
* // Encrypt token with client-side JWE
|
|
438
|
+
* const encrypted = await bt.tokens.encrypt(
|
|
439
|
+
* { type: 'card', data: { number: cardNumberElement } },
|
|
440
|
+
* publicKeyPEM,
|
|
441
|
+
* 'key-id-123'
|
|
442
|
+
* );
|
|
443
|
+
* ```
|
|
444
|
+
*/
|
|
445
|
+
tokens: {
|
|
446
|
+
create(data: TokenCreateRequest): Promise<TokenizeResult>;
|
|
447
|
+
retrieve(id: string, options?: {
|
|
448
|
+
apiKey?: string;
|
|
449
|
+
}): Promise<TokenizeResult>;
|
|
450
|
+
update(id: string, data: TokenUpdateRequest): Promise<TokenizeResult>;
|
|
451
|
+
encrypt(tokenData: EncryptToken | Record<string, EncryptToken>, publicKeyPEM: string, keyId: string): Promise<EncryptedToken | Record<string, EncryptedToken>>;
|
|
452
|
+
};
|
|
453
|
+
/**
|
|
454
|
+
* Token Intent operations (short-lived sensitive data validation)
|
|
455
|
+
* Supports Element references - automatically resolves to secure values
|
|
456
|
+
*
|
|
457
|
+
* @example
|
|
458
|
+
* ```typescript
|
|
459
|
+
* // Create token intent with Elements
|
|
460
|
+
* const intent = await bt.tokenIntents.create({
|
|
461
|
+
* type: 'card',
|
|
462
|
+
* data: {
|
|
463
|
+
* number: cardNumberElement,
|
|
464
|
+
* expiration_month: 12,
|
|
465
|
+
* expiration_year: 2025,
|
|
466
|
+
* cvc: cvvElement
|
|
467
|
+
* }
|
|
468
|
+
* });
|
|
469
|
+
*
|
|
470
|
+
* // Retrieve token intent
|
|
471
|
+
* const retrieved = await bt.tokenIntents.get(intent.id);
|
|
472
|
+
* ```
|
|
473
|
+
*/
|
|
474
|
+
tokenIntents: {
|
|
475
|
+
create(data: TokenIntentRequest, options?: {
|
|
476
|
+
apiKey?: string;
|
|
477
|
+
}): Promise<TokenIntent>;
|
|
478
|
+
get(id: string, options?: {
|
|
479
|
+
apiKey?: string;
|
|
480
|
+
}): Promise<TokenIntent>;
|
|
481
|
+
};
|
|
482
|
+
/**
|
|
483
|
+
* Session management for temporary elevated access
|
|
484
|
+
*
|
|
485
|
+
* Creates a session that provides temporary elevated access to tokenized data.
|
|
486
|
+
* Sessions MUST be authorized by a Private Application on your backend.
|
|
487
|
+
*
|
|
488
|
+
* @example
|
|
489
|
+
* ```typescript
|
|
490
|
+
* // Create a session (frontend)
|
|
491
|
+
* const session = await bt.sessions.create();
|
|
492
|
+
* console.log('Session nonce:', session.nonce);
|
|
493
|
+
*
|
|
494
|
+
* // Session must be authorized on backend before use
|
|
495
|
+
* // Once authorized, use the session API key with tokens.retrieve()
|
|
496
|
+
* const token = await bt.tokens.retrieve(tokenId, {
|
|
497
|
+
* apiKey: sessionApiKey // From authorized session
|
|
498
|
+
* });
|
|
499
|
+
* ```
|
|
500
|
+
*/
|
|
501
|
+
sessions: {
|
|
502
|
+
create(): Promise<Session>;
|
|
503
|
+
};
|
|
504
|
+
/**
|
|
505
|
+
* Update the theme mode for all mounted elements
|
|
506
|
+
*
|
|
507
|
+
* @param mode - Theme mode to apply ('light', 'dark', or 'auto')
|
|
508
|
+
* @returns Promise that resolves when all elements have been updated
|
|
509
|
+
*
|
|
510
|
+
* @example
|
|
511
|
+
* ```typescript
|
|
512
|
+
* await bt.updateThemeMode('dark');
|
|
513
|
+
* ```
|
|
514
|
+
*/
|
|
515
|
+
updateThemeMode(mode: ThemeMode): Promise<void>;
|
|
516
|
+
}
|
|
517
|
+
/**
|
|
518
|
+
* PERFORMANCE OPTIMIZATION (Step 3):
|
|
519
|
+
* Element factories now receive LAZY coordinator initializer
|
|
520
|
+
* mount() calls this function to trigger initialization when needed
|
|
521
|
+
*/
|
|
522
|
+
export interface ElementFactory {
|
|
523
|
+
(apiKey: string, config: SDKConfig, options: ElementOptions | undefined, elementId: string, ensureCoordinatorReady: () => Promise<void>): Element;
|
|
524
|
+
}
|
|
525
|
+
export interface MountConfig {
|
|
526
|
+
timeoutMs: number;
|
|
527
|
+
}
|
|
528
|
+
export interface ElementMounter {
|
|
529
|
+
mount(container: HTMLElement, iframe: HTMLIFrameElement, config: MountConfig): Promise<void>;
|
|
530
|
+
unmount(iframe: HTMLIFrameElement): void;
|
|
531
|
+
}
|
|
532
|
+
export interface IframeConfig {
|
|
533
|
+
src: string;
|
|
534
|
+
sandbox: string;
|
|
535
|
+
title: string;
|
|
536
|
+
}
|
|
537
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/types.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Centralized event dispatcher factory
|
|
3
|
+
* Creates consistent event handlers for all element types
|
|
4
|
+
*
|
|
5
|
+
* Benefits:
|
|
6
|
+
* - Single source of truth for event mapping
|
|
7
|
+
* - Consistent BaseEventDetail (elementType, elementId, timestamp)
|
|
8
|
+
* - Type-safe event dispatch
|
|
9
|
+
* - No code duplication across element factories
|
|
10
|
+
*/
|
|
11
|
+
import type { PostMessageClient } from '@basis-theory-elements/postmessage';
|
|
12
|
+
import type { ElementType } from '../types';
|
|
13
|
+
import type { ErrorCode } from '../types/events';
|
|
14
|
+
/**
|
|
15
|
+
* Event dispatcher configuration
|
|
16
|
+
*/
|
|
17
|
+
interface EventDispatcherConfig {
|
|
18
|
+
/** Element type */
|
|
19
|
+
elementType: ElementType;
|
|
20
|
+
/** Unique element ID */
|
|
21
|
+
elementId: string;
|
|
22
|
+
/** PostMessage client for subscribing to iframe events */
|
|
23
|
+
client: PostMessageClient;
|
|
24
|
+
/** EventTarget for dispatching DOM events */
|
|
25
|
+
eventTarget: EventTarget;
|
|
26
|
+
}
|
|
27
|
+
/**
|
|
28
|
+
* Create event dispatcher with consistent behavior
|
|
29
|
+
*
|
|
30
|
+
* @example
|
|
31
|
+
* ```typescript
|
|
32
|
+
* const dispatcher = createEventDispatcher({
|
|
33
|
+
* elementType: 'cardNumber',
|
|
34
|
+
* elementId: 'card-123',
|
|
35
|
+
* client,
|
|
36
|
+
* eventTarget,
|
|
37
|
+
* });
|
|
38
|
+
*
|
|
39
|
+
* dispatcher.setupSubscriptions();
|
|
40
|
+
* ```
|
|
41
|
+
*/
|
|
42
|
+
export declare const createEventDispatcher: (config: EventDispatcherConfig) => {
|
|
43
|
+
setupSubscriptions: () => void;
|
|
44
|
+
dispatchError: (code: ErrorCode, message: string, error?: Error) => void;
|
|
45
|
+
};
|
|
46
|
+
export {};
|
|
47
|
+
//# sourceMappingURL=create-event-dispatcher.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"create-event-dispatcher.d.ts","sourceRoot":"","sources":["../../../../src/utils/create-event-dispatcher.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,oCAAoC,CAAC;AAC5E,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,UAAU,CAAC;AAC5C,OAAO,KAAK,EAKV,SAAS,EACV,MAAM,iBAAiB,CAAC;AAEzB;;GAEG;AACH,UAAU,qBAAqB;IAC7B,mBAAmB;IACnB,WAAW,EAAE,WAAW,CAAC;IAEzB,wBAAwB;IACxB,SAAS,EAAE,MAAM,CAAC;IAElB,0DAA0D;IAC1D,MAAM,EAAE,iBAAiB,CAAC;IAE1B,6CAA6C;IAC7C,WAAW,EAAE,WAAW,CAAC;CAC1B;AAED;;;;;;;;;;;;;;GAcG;AACH,eAAO,MAAM,qBAAqB,GAAI,QAAQ,qBAAqB;;0BA0GzD,SAAS,WACN,MAAM,UACP,KAAK,KACZ,IAAI;CAeR,CAAC"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Iframe creation utility
|
|
3
|
+
*/
|
|
4
|
+
import type { IframeConfig } from '../types';
|
|
5
|
+
/**
|
|
6
|
+
* Create a secure iframe with proper attributes
|
|
7
|
+
* Pure function, no side effects
|
|
8
|
+
*/
|
|
9
|
+
export declare const createIframe: (config: IframeConfig) => HTMLIFrameElement;
|
|
10
|
+
//# sourceMappingURL=create-iframe.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"create-iframe.d.ts","sourceRoot":"","sources":["../../../../src/utils/create-iframe.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,UAAU,CAAC;AAE7C;;;GAGG;AACH,eAAO,MAAM,YAAY,GAAI,QAAQ,YAAY,KAAG,iBAenD,CAAC"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Element Reference Resolution Utilities (SDK Client-Side)
|
|
3
|
+
*
|
|
4
|
+
* Converts Element objects to ID strings before sending to coordinator.
|
|
5
|
+
* Only the `data` field of tokenization requests may contain Element references.
|
|
6
|
+
*
|
|
7
|
+
* @see packages/elements/src/shared/utils/replace-element-references.ts
|
|
8
|
+
* for Step 2 (Coordinator tokenization - ID strings → raw values)
|
|
9
|
+
*/
|
|
10
|
+
/**
|
|
11
|
+
* Recursively resolves any value — primitives pass through, Element instances
|
|
12
|
+
* become their ID string, arrays and objects are traversed.
|
|
13
|
+
*/
|
|
14
|
+
export declare const resolveElementReferences: (value: unknown) => unknown;
|
|
15
|
+
/**
|
|
16
|
+
* Extracts element ID strings from a resolved payload.
|
|
17
|
+
* Used to identify which elements are referenced before tokenization.
|
|
18
|
+
*/
|
|
19
|
+
export declare const extractElementIds: (payload: unknown) => string[];
|
|
20
|
+
//# sourceMappingURL=resolve-element-references.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"resolve-element-references.d.ts","sourceRoot":"","sources":["../../../../src/utils/resolve-element-references.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AA4BH;;;GAGG;AACH,eAAO,MAAM,wBAAwB,GAAI,OAAO,OAAO,KAAG,OAwBzD,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,iBAAiB,GAAI,SAAS,OAAO,KAAG,MAAM,EAiB1D,CAAC"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Element options validation
|
|
3
|
+
*/
|
|
4
|
+
import type { ElementOptions, ElementType } from '../types';
|
|
5
|
+
/**
|
|
6
|
+
* Validate element options for a specific element type.
|
|
7
|
+
* Warns about unknown keys and options not applicable to the element type.
|
|
8
|
+
* Throws on invalid values for known keys.
|
|
9
|
+
*/
|
|
10
|
+
export declare const validateElementOptions: (type: ElementType, options?: ElementOptions) => void;
|
|
11
|
+
//# sourceMappingURL=validate-element-options.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"validate-element-options.d.ts","sourceRoot":"","sources":["../../../../src/utils/validate-element-options.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,OAAO,KAAK,EAAE,cAAc,EAAE,WAAW,EAAE,MAAM,UAAU,CAAC;AAmC5D;;;;GAIG;AACH,eAAO,MAAM,sBAAsB,GACjC,MAAM,WAAW,EACjB,UAAS,cAAmB,KAC3B,IAsGF,CAAC"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Configuration validation utilities
|
|
3
|
+
*/
|
|
4
|
+
import type { SDKConfig, SDKOptions } from '../types';
|
|
5
|
+
/**
|
|
6
|
+
* Validate API key format
|
|
7
|
+
* Throws if API key is invalid
|
|
8
|
+
*/
|
|
9
|
+
export declare const validateAPIKey: (apiKey: string) => void;
|
|
10
|
+
/**
|
|
11
|
+
* Validate and normalize SDK configuration
|
|
12
|
+
* Returns complete config with defaults applied
|
|
13
|
+
*/
|
|
14
|
+
export declare const validateSDKConfig: (options?: SDKOptions) => SDKConfig;
|
|
15
|
+
//# sourceMappingURL=validate-sdk-config.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"validate-sdk-config.d.ts","sourceRoot":"","sources":["../../../../src/utils/validate-sdk-config.ts"],"names":[],"mappings":"AAAA;;GAEG;AAIH,OAAO,KAAK,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,UAAU,CAAC;AAqBtD;;;GAGG;AACH,eAAO,MAAM,cAAc,GAAI,QAAQ,MAAM,KAAG,IAI/C,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,iBAAiB,GAAI,UAAS,UAAe,KAAG,SAgH5D,CAAC"}
|