@basis-theory/web-elements 2.11.1 → 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.
Files changed (104) hide show
  1. package/README.md +668 -2
  2. package/dist/.vite/manifest.json +27 -0
  3. package/dist/api-client/src/api-client.d.ts +11 -0
  4. package/dist/api-client/src/api-client.d.ts.map +1 -0
  5. package/dist/api-client/src/http-client.d.ts +24 -0
  6. package/dist/api-client/src/http-client.d.ts.map +1 -0
  7. package/dist/api-client/src/index.d.ts +9 -0
  8. package/dist/api-client/src/index.d.ts.map +1 -0
  9. package/dist/api-client/src/services/sessions.d.ts +19 -0
  10. package/dist/api-client/src/services/sessions.d.ts.map +1 -0
  11. package/dist/api-client/src/services/token-intents.d.ts +17 -0
  12. package/dist/api-client/src/services/token-intents.d.ts.map +1 -0
  13. package/dist/api-client/src/services/tokens.d.ts +19 -0
  14. package/dist/api-client/src/services/tokens.d.ts.map +1 -0
  15. package/dist/api-client/src/types.d.ts +313 -0
  16. package/dist/api-client/src/types.d.ts.map +1 -0
  17. package/dist/basis-theory-sdk.es.js +6 -0
  18. package/dist/basis-theory-sdk.es.js.map +1 -0
  19. package/dist/basis-theory-sdk.umd.js +1 -0
  20. package/dist/basis-theory-sdk.umd.js.map +1 -0
  21. package/dist/create-card-BuOvimjH.js +232 -0
  22. package/dist/create-card-BuOvimjH.js.map +1 -0
  23. package/dist/index-oREjBjga.js +2317 -0
  24. package/dist/index-oREjBjga.js.map +1 -0
  25. package/dist/loader/basis-theory.min.js +1 -0
  26. package/dist/postmessage/src/client.d.ts +7 -0
  27. package/dist/postmessage/src/client.d.ts.map +1 -0
  28. package/dist/postmessage/src/event-map.d.ts +135 -0
  29. package/dist/postmessage/src/event-map.d.ts.map +1 -0
  30. package/dist/postmessage/src/index.d.ts +9 -0
  31. package/dist/postmessage/src/index.d.ts.map +1 -0
  32. package/dist/postmessage/src/server.d.ts +11 -0
  33. package/dist/postmessage/src/server.d.ts.map +1 -0
  34. package/dist/postmessage/src/types.d.ts +71 -0
  35. package/dist/postmessage/src/types.d.ts.map +1 -0
  36. package/dist/shared/src/api-url-resolver.d.ts +22 -0
  37. package/dist/shared/src/api-url-resolver.d.ts.map +1 -0
  38. package/dist/shared/src/debug-logger.d.ts +16 -0
  39. package/dist/shared/src/debug-logger.d.ts.map +1 -0
  40. package/dist/shared/src/deep-sanitization.d.ts +24 -0
  41. package/dist/shared/src/deep-sanitization.d.ts.map +1 -0
  42. package/dist/shared/src/errors.d.ts +93 -0
  43. package/dist/shared/src/errors.d.ts.map +1 -0
  44. package/dist/shared/src/generate-id.d.ts +13 -0
  45. package/dist/shared/src/generate-id.d.ts.map +1 -0
  46. package/dist/shared/src/index.d.ts +13 -0
  47. package/dist/shared/src/index.d.ts.map +1 -0
  48. package/dist/shared/src/logger-context.d.ts +25 -0
  49. package/dist/shared/src/logger-context.d.ts.map +1 -0
  50. package/dist/sri.json +22 -0
  51. package/dist/stats.html +4949 -0
  52. package/dist/web-elements/src/BasisTheory.d.ts +47 -0
  53. package/dist/web-elements/src/BasisTheory.d.ts.map +1 -0
  54. package/dist/web-elements/src/basis-theory.d.ts +62 -0
  55. package/dist/web-elements/src/basis-theory.d.ts.map +1 -0
  56. package/dist/web-elements/src/elements/create-card-number.d.ts +14 -0
  57. package/dist/web-elements/src/elements/create-card-number.d.ts.map +1 -0
  58. package/dist/web-elements/src/elements/create-card.d.ts +37 -0
  59. package/dist/web-elements/src/elements/create-card.d.ts.map +1 -0
  60. package/dist/web-elements/src/elements/create-cvv.d.ts +10 -0
  61. package/dist/web-elements/src/elements/create-cvv.d.ts.map +1 -0
  62. package/dist/web-elements/src/elements/create-expiry.d.ts +10 -0
  63. package/dist/web-elements/src/elements/create-expiry.d.ts.map +1 -0
  64. package/dist/web-elements/src/elements/create-text.d.ts +13 -0
  65. package/dist/web-elements/src/elements/create-text.d.ts.map +1 -0
  66. package/dist/web-elements/src/index.d.ts +27 -0
  67. package/dist/web-elements/src/index.d.ts.map +1 -0
  68. package/dist/web-elements/src/mounter/create-mounter.d.ts +11 -0
  69. package/dist/web-elements/src/mounter/create-mounter.d.ts.map +1 -0
  70. package/dist/web-elements/src/theme/default-theme.d.ts +22 -0
  71. package/dist/web-elements/src/theme/default-theme.d.ts.map +1 -0
  72. package/dist/web-elements/src/theme/inject-theme-dark.d.ts +13 -0
  73. package/dist/web-elements/src/theme/inject-theme-dark.d.ts.map +1 -0
  74. package/dist/web-elements/src/theme/inject-theme.d.ts +20 -0
  75. package/dist/web-elements/src/theme/inject-theme.d.ts.map +1 -0
  76. package/dist/web-elements/src/types/events.d.ts +137 -0
  77. package/dist/web-elements/src/types/events.d.ts.map +1 -0
  78. package/dist/web-elements/src/types/theme.d.ts +91 -0
  79. package/dist/web-elements/src/types/theme.d.ts.map +1 -0
  80. package/dist/web-elements/src/types.d.ts +537 -0
  81. package/dist/web-elements/src/types.d.ts.map +1 -0
  82. package/dist/web-elements/src/utils/create-event-dispatcher.d.ts +47 -0
  83. package/dist/web-elements/src/utils/create-event-dispatcher.d.ts.map +1 -0
  84. package/dist/web-elements/src/utils/create-iframe.d.ts +10 -0
  85. package/dist/web-elements/src/utils/create-iframe.d.ts.map +1 -0
  86. package/dist/web-elements/src/utils/resolve-element-references.d.ts +20 -0
  87. package/dist/web-elements/src/utils/resolve-element-references.d.ts.map +1 -0
  88. package/dist/web-elements/src/utils/validate-element-options.d.ts +11 -0
  89. package/dist/web-elements/src/utils/validate-element-options.d.ts.map +1 -0
  90. package/dist/web-elements/src/utils/validate-sdk-config.d.ts +15 -0
  91. package/dist/web-elements/src/utils/validate-sdk-config.d.ts.map +1 -0
  92. package/dist/web-elements/src/utils/warn-unknown-keys.d.ts +15 -0
  93. package/dist/web-elements/src/utils/warn-unknown-keys.d.ts.map +1 -0
  94. package/dist/web-elements/src/version.d.ts +25 -0
  95. package/dist/web-elements/src/version.d.ts.map +1 -0
  96. package/package.json +53 -72
  97. package/LICENSE +0 -202
  98. package/dist/LICENSE +0 -202
  99. package/dist/README.md +0 -3
  100. package/dist/bundle/index.js +0 -1
  101. package/dist/main/index.js +0 -1160
  102. package/dist/module/module.js +0 -1158
  103. package/dist/package.json +0 -37
  104. package/dist/types/index.d.ts +0 -732
@@ -0,0 +1,24 @@
1
+ /**
2
+ * HTTP Client with retry, timeout, and caching
3
+ */
4
+ import type { DebugLogger } from '@basis-theory-elements/shared';
5
+ import type { HttpClientConfig, HttpResponse, RequestOptions } from './types';
6
+ /**
7
+ * Create HTTP client with retry, timeout, and caching
8
+ */
9
+ export declare const createHttpClient: (config: HttpClientConfig) => {
10
+ /**
11
+ * Make HTTP request
12
+ */
13
+ request<T = unknown>(url: string, options?: RequestOptions, log?: DebugLogger): Promise<HttpResponse<T>>;
14
+ /**
15
+ * Clear cache
16
+ */
17
+ clearCache(): void;
18
+ /**
19
+ * Get cache size
20
+ */
21
+ getCacheSize(): number;
22
+ };
23
+ export type HttpClient = ReturnType<typeof createHttpClient>;
24
+ //# sourceMappingURL=http-client.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"http-client.d.ts","sourceRoot":"","sources":["../../../../api-client/src/http-client.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,+BAA+B,CAAC;AAEjE,OAAO,KAAK,EAEV,gBAAgB,EAEhB,YAAY,EACZ,cAAc,EACf,MAAM,SAAS,CAAC;AAEjB;;GAEG;AACH,eAAO,MAAM,gBAAgB,GAAI,QAAQ,gBAAgB;IA0QrD;;OAEG;YACW,CAAC,iBACR,MAAM,YACF,cAAc,QACjB,WAAW,GAChB,OAAO,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;IAkE3B;;OAEG;kBACW,IAAI;IAIlB;;OAEG;oBACa,MAAM;CAIzB,CAAC;AAEF,MAAM,MAAM,UAAU,GAAG,UAAU,CAAC,OAAO,gBAAgB,CAAC,CAAC"}
@@ -0,0 +1,9 @@
1
+ /**
2
+ * @basis-theory-elements/api-client
3
+ *
4
+ * Standalone HTTP client for BasisTheory API with tokenization, BIN lookup, and proxy
5
+ */
6
+ export { createBasisTheoryClient } from './api-client';
7
+ export { createHttpClient } from './http-client';
8
+ export type { BasisTheoryClient, BinInfo, CacheEntry, HttpClientConfig, HttpError, HttpResponse, ProxyRequest, RequestOptions, Token, TokenCreateRequest, TokenData, TokenIntent, TokenIntentCreateRequest, TokenUpdateRequest, TokenizeRequest, } from './types';
9
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../api-client/src/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,uBAAuB,EAAE,MAAM,cAAc,CAAC;AACvD,OAAO,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAC;AAEjD,YAAY,EAEV,iBAAiB,EAEjB,OAAO,EAEP,UAAU,EAEV,gBAAgB,EAChB,SAAS,EAET,YAAY,EAEZ,YAAY,EACZ,cAAc,EAEd,KAAK,EACL,kBAAkB,EAClB,SAAS,EACT,WAAW,EACX,wBAAwB,EACxB,kBAAkB,EAClB,eAAe,GAChB,MAAM,SAAS,CAAC"}
@@ -0,0 +1,19 @@
1
+ /**
2
+ * Sessions Service
3
+ *
4
+ * Handles session creation for temporary elevated access to tokenized data
5
+ * Sessions must be authorized on the backend by a Private Application
6
+ */
7
+ import type { HttpClient } from '../http-client';
8
+ import type { RequestOptions, Session } from '../types';
9
+ /**
10
+ * Sessions Service Interface
11
+ */
12
+ export interface SessionsService {
13
+ create(options?: RequestOptions): Promise<Session>;
14
+ }
15
+ /**
16
+ * Create sessions service
17
+ */
18
+ export declare const createSessionsService: (httpClient: HttpClient) => SessionsService;
19
+ //# sourceMappingURL=sessions.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sessions.d.ts","sourceRoot":"","sources":["../../../../../api-client/src/services/sessions.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AACjD,OAAO,KAAK,EAAE,cAAc,EAAE,OAAO,EAAE,MAAM,UAAU,CAAC;AAExD;;GAEG;AACH,MAAM,WAAW,eAAe;IAC9B,MAAM,CAAC,OAAO,CAAC,EAAE,cAAc,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;CACpD;AAED;;GAEG;AACH,eAAO,MAAM,qBAAqB,GAChC,YAAY,UAAU,KACrB,eAmDF,CAAC"}
@@ -0,0 +1,17 @@
1
+ /**
2
+ * Token Intents Service
3
+ *
4
+ * Handles token intent operations (create, get)
5
+ * Token Intents are short-lived placeholders for sensitive data validation
6
+ */
7
+ import type { HttpClient } from '../http-client';
8
+ import type { RequestOptions, TokenIntent, TokenIntentCreateRequest } from '../types';
9
+ export interface TokenIntentsService {
10
+ create(data: TokenIntentCreateRequest, options?: RequestOptions): Promise<TokenIntent>;
11
+ get(id: string, options?: RequestOptions): Promise<TokenIntent>;
12
+ }
13
+ /**
14
+ * Create token intents service bound to HTTP client
15
+ */
16
+ export declare const createTokenIntentsService: (httpClient: HttpClient) => TokenIntentsService;
17
+ //# sourceMappingURL=token-intents.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"token-intents.d.ts","sourceRoot":"","sources":["../../../../../api-client/src/services/token-intents.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AACjD,OAAO,KAAK,EACV,cAAc,EACd,WAAW,EACX,wBAAwB,EACzB,MAAM,UAAU,CAAC;AAalB,MAAM,WAAW,mBAAmB;IAClC,MAAM,CACJ,IAAI,EAAE,wBAAwB,EAC9B,OAAO,CAAC,EAAE,cAAc,GACvB,OAAO,CAAC,WAAW,CAAC,CAAC;IACxB,GAAG,CAAC,EAAE,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,cAAc,GAAG,OAAO,CAAC,WAAW,CAAC,CAAC;CACjE;AAED;;GAEG;AACH,eAAO,MAAM,yBAAyB,GACpC,YAAY,UAAU,KACrB,mBA4DF,CAAC"}
@@ -0,0 +1,19 @@
1
+ /**
2
+ * Tokens Service
3
+ *
4
+ * Handles all token-related API operations (CRUD)
5
+ * Uses snake_case to match BasisTheory API directly
6
+ * Separated from main API client to keep bundle size lean
7
+ */
8
+ import type { HttpClient } from '../http-client';
9
+ import type { RequestOptions, Token, TokenCreateRequest, TokenUpdateRequest } from '../types';
10
+ export interface TokensService {
11
+ create(data: TokenCreateRequest, options?: RequestOptions): Promise<Token>;
12
+ update(id: string, data: TokenUpdateRequest, options?: RequestOptions): Promise<Token>;
13
+ retrieve(id: string, options?: RequestOptions): Promise<Token>;
14
+ }
15
+ /**
16
+ * Create tokens service bound to HTTP client
17
+ */
18
+ export declare const createTokensService: (httpClient: HttpClient) => TokensService;
19
+ //# sourceMappingURL=tokens.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tokens.d.ts","sourceRoot":"","sources":["../../../../../api-client/src/services/tokens.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAGH,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AACjD,OAAO,KAAK,EACV,cAAc,EACd,KAAK,EACL,kBAAkB,EAClB,kBAAkB,EACnB,MAAM,UAAU,CAAC;AAalB,MAAM,WAAW,aAAa;IAC5B,MAAM,CAAC,IAAI,EAAE,kBAAkB,EAAE,OAAO,CAAC,EAAE,cAAc,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC;IAC3E,MAAM,CACJ,EAAE,EAAE,MAAM,EACV,IAAI,EAAE,kBAAkB,EACxB,OAAO,CAAC,EAAE,cAAc,GACvB,OAAO,CAAC,KAAK,CAAC,CAAC;IAClB,QAAQ,CAAC,EAAE,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,cAAc,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC;CAChE;AAED;;GAEG;AACH,eAAO,MAAM,mBAAmB,GAAI,YAAY,UAAU,KAAG,aAsH5D,CAAC"}
@@ -0,0 +1,313 @@
1
+ /**
2
+ * BasisTheory API Client Types
3
+ *
4
+ * Type definitions for HTTP client, tokenization, and BIN lookup services
5
+ */
6
+ /**
7
+ * HTTP Client Configuration
8
+ */
9
+ export interface HttpClientConfig {
10
+ /** BasisTheory API key */
11
+ apiKey: string;
12
+ /** Base URL for API requests (default: https://api.basistheory.com) */
13
+ baseUrl?: string;
14
+ /** Request timeout in milliseconds (default: 30000) */
15
+ timeout?: number;
16
+ /** Number of retry attempts (default: 3) */
17
+ retries?: number;
18
+ /** Initial retry delay in milliseconds (default: 1000, exponential backoff) */
19
+ retryDelay?: number;
20
+ /** Enable response caching for GET requests (default: false) */
21
+ cache?: boolean;
22
+ /** Enable debug logging (default: false) */
23
+ debug?: boolean;
24
+ }
25
+ /**
26
+ * HTTP Request Options
27
+ */
28
+ export interface RequestOptions {
29
+ /** HTTP method */
30
+ method?: 'GET' | 'POST' | 'PUT' | 'PATCH' | 'DELETE';
31
+ /** Request headers */
32
+ headers?: Record<string, string>;
33
+ /** Request body */
34
+ body?: unknown;
35
+ /** Request timeout (overrides config timeout) */
36
+ timeout?: number;
37
+ /** Skip caching for this request */
38
+ skipCache?: boolean;
39
+ /** Override API key for this request (e.g., session key) */
40
+ apiKey?: string;
41
+ /** Idempotency key for safe retries */
42
+ idempotencyKey?: string;
43
+ }
44
+ /**
45
+ * HTTP Response
46
+ */
47
+ export interface HttpResponse<T = unknown> {
48
+ /** Response data */
49
+ data: T;
50
+ /** HTTP status code */
51
+ status: number;
52
+ /** Response headers */
53
+ headers: Headers;
54
+ /** Whether response was from cache */
55
+ cached: boolean;
56
+ }
57
+ /**
58
+ * HTTP Error
59
+ */
60
+ export interface HttpError extends Error {
61
+ /** HTTP status code */
62
+ status?: number;
63
+ /** Error response body */
64
+ body?: unknown;
65
+ /** Number of retry attempts made */
66
+ retryCount?: number;
67
+ }
68
+ /**
69
+ * Token Data (for tokenization)
70
+ */
71
+ export interface TokenData {
72
+ /** Token type (e.g., 'card', 'bank', 'generic') */
73
+ type?: string;
74
+ /** Sensitive data to tokenize */
75
+ data: Record<string, unknown>;
76
+ /** Token ID (for update operations) */
77
+ id?: string;
78
+ /** Token metadata */
79
+ metadata?: Record<string, string>;
80
+ /** Token search indexes */
81
+ search_indexes?: string[];
82
+ /** Fingerprint expression */
83
+ fingerprint_expression?: string;
84
+ /** Mask expression */
85
+ mask?: unknown;
86
+ /** Deduplicate token */
87
+ deduplicate_token?: boolean;
88
+ /** Token containers */
89
+ containers?: string[];
90
+ }
91
+ /**
92
+ * Token Response (snake_case matches BasisTheory API)
93
+ */
94
+ export interface Token {
95
+ /** Token ID */
96
+ id: string;
97
+ /** Token type */
98
+ type: string;
99
+ /** Tenant ID (snake_case) */
100
+ tenant_id: string;
101
+ /** Masked data (snake_case) */
102
+ data?: Record<string, unknown>;
103
+ /** Token metadata (snake_case) */
104
+ metadata?: Record<string, string>;
105
+ /** Creation timestamp (snake_case) */
106
+ created_at: string;
107
+ /** Created by application ID (snake_case) */
108
+ created_by?: string;
109
+ /** Modified timestamp (snake_case) */
110
+ modified_at?: string;
111
+ /** Modified by application ID (snake_case) */
112
+ modified_by?: string;
113
+ /** Fingerprint */
114
+ fingerprint?: string;
115
+ /** Token containers */
116
+ containers?: string[];
117
+ /** Search indexes (snake_case) */
118
+ search_indexes?: string[];
119
+ /** Fingerprint expression (snake_case) */
120
+ fingerprint_expression?: string;
121
+ }
122
+ /**
123
+ * Tokenize Request
124
+ */
125
+ export interface TokenizeRequest extends Omit<TokenData, 'id'> {
126
+ }
127
+ /**
128
+ * Token Create Request
129
+ */
130
+ export interface TokenCreateRequest extends TokenData {
131
+ }
132
+ /**
133
+ * Token Update Request
134
+ */
135
+ export interface TokenUpdateRequest {
136
+ /** Updated data */
137
+ data?: Record<string, unknown>;
138
+ /** Updated metadata */
139
+ metadata?: Record<string, string>;
140
+ /** Updated search indexes */
141
+ search_indexes?: string[];
142
+ /** Updated mask */
143
+ mask?: unknown;
144
+ /** Updated fingerprint expression */
145
+ fingerprint_expression?: string;
146
+ /** Updated containers */
147
+ containers?: string[];
148
+ }
149
+ /**
150
+ * Token Intent Create Request
151
+ */
152
+ export interface TokenIntentCreateRequest {
153
+ /** Token type (e.g., 'card', 'bank') */
154
+ type: string;
155
+ /** Sensitive data to validate */
156
+ data: Record<string, unknown>;
157
+ }
158
+ /**
159
+ * Token Intent Response
160
+ */
161
+ export interface TokenIntent {
162
+ /** Token Intent ID */
163
+ id: string;
164
+ /** Tenant ID */
165
+ tenant_id: string;
166
+ /** Token type */
167
+ type: string;
168
+ /** Intent status (e.g. 'created') */
169
+ status?: string;
170
+ /** Card details (when type is 'card') */
171
+ card?: {
172
+ bin?: string;
173
+ last4?: string;
174
+ expiration_month?: number;
175
+ expiration_year?: number;
176
+ brand?: string;
177
+ funding?: string;
178
+ issuer_country?: {
179
+ alpha2?: string;
180
+ name?: string;
181
+ numeric?: string;
182
+ };
183
+ authentication?: string;
184
+ };
185
+ /** Bank details (when type is 'bank') */
186
+ bank?: {
187
+ routing_number?: string;
188
+ account_number_last4?: string;
189
+ };
190
+ /** Fingerprint */
191
+ fingerprint?: string;
192
+ /** Created by application ID */
193
+ created_by?: string;
194
+ /** Creation timestamp */
195
+ created_at: string;
196
+ /** Expiration timestamp */
197
+ expires_at: string;
198
+ }
199
+ /**
200
+ * BIN Lookup Response
201
+ */
202
+ export interface BinInfo {
203
+ /** BIN (first 6 digits) */
204
+ bin: string;
205
+ /** Card brand (e.g., 'visa', 'mastercard') */
206
+ card_brand?: string;
207
+ /** Card type (e.g., 'debit', 'credit', 'prepaid') */
208
+ card_type?: 'debit' | 'credit' | 'prepaid' | 'unknown';
209
+ /** Issuing country (ISO 3166-1 alpha-2) */
210
+ country?: string;
211
+ /** Issuing bank name */
212
+ bank?: string;
213
+ /** Card product name */
214
+ product?: string;
215
+ /** Supported networks (for co-badged cards) */
216
+ networks?: string[];
217
+ /** Card level (e.g., 'standard', 'gold', 'platinum') */
218
+ card_level?: string;
219
+ }
220
+ /**
221
+ * Session Response (snake_case matches BasisTheory API)
222
+ */
223
+ export interface Session {
224
+ /** Session API key - use this for authenticating API calls after authorization */
225
+ session_key: string;
226
+ /** Session nonce - used to authorize the session */
227
+ nonce: string;
228
+ /** Session expiration timestamp (ISO 8601) */
229
+ expires_at?: string;
230
+ }
231
+ /**
232
+ * Proxy Request
233
+ */
234
+ export interface ProxyRequest {
235
+ /** HTTP method */
236
+ method?: 'GET' | 'POST' | 'PUT' | 'PATCH' | 'DELETE';
237
+ /** Request headers */
238
+ headers?: Record<string, string>;
239
+ /** Request body */
240
+ body?: unknown;
241
+ }
242
+ /**
243
+ * Cache Entry
244
+ */
245
+ export interface CacheEntry<T = unknown> {
246
+ /** Cached data */
247
+ data: T;
248
+ /** Cache timestamp */
249
+ timestamp: number;
250
+ /** Cache TTL in milliseconds */
251
+ ttl: number;
252
+ }
253
+ /**
254
+ * BasisTheory API Client Interface
255
+ */
256
+ export interface BasisTheoryClient {
257
+ /**
258
+ * Token operations
259
+ */
260
+ tokens: {
261
+ /**
262
+ * Create a new token
263
+ */
264
+ create: (data: TokenCreateRequest, options?: RequestOptions) => Promise<Token>;
265
+ /**
266
+ * Update an existing token
267
+ */
268
+ update: (id: string, data: TokenUpdateRequest, options?: RequestOptions) => Promise<Token>;
269
+ /**
270
+ * Retrieve a token by ID
271
+ */
272
+ retrieve: (id: string, options?: RequestOptions) => Promise<Token>;
273
+ };
274
+ /**
275
+ * Token Intent operations
276
+ */
277
+ tokenIntents: {
278
+ /**
279
+ * Create a new token intent
280
+ */
281
+ create: (data: TokenIntentCreateRequest, options?: RequestOptions) => Promise<TokenIntent>;
282
+ /**
283
+ * Retrieve a token intent by ID
284
+ */
285
+ get: (id: string, options?: RequestOptions) => Promise<TokenIntent>;
286
+ };
287
+ /**
288
+ * Session operations
289
+ */
290
+ sessions: {
291
+ /**
292
+ * Create a new session for temporary elevated access
293
+ */
294
+ create: (options?: RequestOptions) => Promise<Session>;
295
+ };
296
+ /**
297
+ * Tokenize data (simplified token creation)
298
+ */
299
+ tokenize: (data: TokenizeRequest, options?: RequestOptions) => Promise<Token>;
300
+ /**
301
+ * BIN lookup
302
+ */
303
+ binLookup: (bin: string, options?: RequestOptions) => Promise<BinInfo>;
304
+ /**
305
+ * Proxy request through BasisTheory gateway
306
+ */
307
+ proxy: (url: string, request: ProxyRequest, options?: RequestOptions) => Promise<unknown>;
308
+ /**
309
+ * Clear cache
310
+ */
311
+ clearCache: () => void;
312
+ }
313
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../api-client/src/types.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ import { e, B, v } from "./index-oREjBjga.js";
2
+ export {
3
+ e as buildDate,
4
+ B as default,
5
+ v as version
6
+ };
@@ -0,0 +1 @@
1
+ {"version":3,"file":"basis-theory-sdk.es.js","sources":[],"sourcesContent":[],"names":[],"mappings":";"}
@@ -0,0 +1 @@
1
+ !function(e,t){"object"==typeof exports&&"undefined"!=typeof module?t(exports):"function"==typeof define&&define.amd?define(["exports"],t):t((e="undefined"!=typeof globalThis?globalThis:e||self).BasisTheory={})}(this,function(e){"use strict";const t=[/cardnumber/i,/^pan$/i,/accountnumber/i,/^number$/i],r=[/cvv/i,/cvc/i,/cvv2/i,/securitycode/i,/pin/i,/password/i,/secret/i,/token/i,/ssn/i,/track/i],n=e=>t.some(t=>t.test(e)),o=e=>r.some(t=>t.test(e)),a=e=>{const t=e.replace(/\D/g,"");if(t.length<10)return"***";const r=t.substring(0,6),n=t.substring(t.length-4),o=Math.max(t.length-10,6);return`${r}${"*".repeat(o)}${n}`},i=e=>{const t=e.replace(/[\s-]/g,"");return/^\d{13,19}$/.test(t)},s=(e,t)=>null==t?t:"function"==typeof t?"[Function]":"symbol"==typeof t?"[Symbol]":t instanceof RegExp?"[RegExp]":t instanceof Date?t:n(e)?"string"==typeof t?a(t):"***":o(e)?"***":"string"==typeof t&&i(t)?a(t):t,d=(e,t=0,r=new WeakSet)=>{if(t>=5)return"[Max Depth]";if(null==e)return e;if("string"==typeof e)return i(e)?a(e):e;if("object"!=typeof e)return e;if(e instanceof RegExp)return"[RegExp]";if(e instanceof Date)return e;if(r.has(e))return"[Circular]";let n;if(r.add(e),Array.isArray(e))n=e.map(e=>d(e,t+1,r));else{const o={};for(const[n,a]of Object.entries(e)){const e=s(n,a);o[n]=null!==e&&"object"==typeof e?d(e,t+1,r):e}n=o}return r.delete(e),n},l=(e,t)=>t?(t,r)=>{const a=(()=>{const e=new Date;return`${String(e.getHours()).padStart(2,"0")}:${String(e.getMinutes()).padStart(2,"0")}:${String(e.getSeconds()).padStart(2,"0")}.${String(e.getMilliseconds()).padStart(3,"0")}`})(),i=r?(e=>{const t={};for(const[r,a]of Object.entries(e))if(n(r)||o(r)){const e="string"==typeof a?a.length:"number"==typeof a?String(a).length:0;t[`${r}_length`]=e}else t[r]=d(a);return t})(r):{};console.log(`🔍 [${a}] [${e}] ${t}`,i)}:()=>{},u=(e,t,r)=>{const n=new Error(t);return n.name="BasisTheoryError",n.code=e,n.details=r,Error.captureStackTrace&&Error.captureStackTrace(n,u),n.toJSON=()=>({name:n.name,code:n.code,message:n.message,...n.details&&{details:n.details}}),n},m=(e,t,r)=>{const n=u(e,t,r);return n.name="BasisTheoryError",n},c=(e,t,r)=>{const n=u("VALIDATION_ERROR",e,r);return n.name="ValidationError",n.field=t,n},f=(e,t,r)=>{const n=u("ELEMENT_ERROR",e,t?{elementId:t,...r}:r);return n.name="ElementError",n.elementId=t,n},h=(e,t)=>{const r=u("CONFIGURATION_ERROR",e,t);return r.name="ConfigurationError",r},p={maxRetries:2,initialDelay:500,maxDelay:3e3,backoffFactor:2},g=(e,t)=>{const r=t.initialDelay*Math.pow(t.backoffFactor,e);return Math.min(r,t.maxDelay)},y=e=>new Promise(t=>setTimeout(t,e)),b=(e,t)=>{const r=new Map,n=new Map,o=l("PostMessageClient",t.debug||!1),a=a=>{const{nonce:i,type:s,payload:d,error:l}=a.data||{};if(!s)return;if(a.origin!==t.targetOrigin)return void o("Rejected message (origin mismatch)",{receivedOrigin:a.origin,expectedOrigin:t.targetOrigin,messageType:s});if(a.source!==e.contentWindow)return;if(i){const e=r.get(i);if(e){if(o("Message received",{origin:a.origin,expectedOrigin:t.targetOrigin,type:s,nonce:i}),clearTimeout(e.timeout),r.delete(i),l){const t=m(l.code,`[${l.code}] ${l.message}`);Object.assign(t,{...void 0!==l.status&&{status:l.status},...void 0!==l.statusCode&&{statusCode:l.statusCode},...l.validationErrors&&{validationErrors:l.validationErrors},...l.body&&{body:l.body},...void 0!==l.retryCount&&{retryCount:l.retryCount},...l.details&&{details:l.details}}),e.reject(t)}else e.resolve(d);return}return}const u=n.get(s);u&&u.size>0?(o("Event received",{origin:a.origin,expectedOrigin:t.targetOrigin,type:s,nonce:i,subscriberCount:u.size}),u.forEach(e=>{try{e(d)}catch(r){t.debug&&console.error(`[PostMessage Client] Error in event subscriber for ${s}:`,r)}})):i||o("Event received but no subscribers",{type:s,availableSubscribers:Array.from(n.keys())})};window.addEventListener("message",a);const i="number"==typeof t.retries?{...p,maxRetries:t.retries}:"object"==typeof t.retries?t.retries:p,s=(n,a)=>new Promise((i,s)=>{const d=crypto.randomUUID(),l=Date.now();if(!e.contentWindow)return void s(m("IFRAME_NOT_READY","Iframe not ready"));const u=setTimeout(()=>{r.delete(d),s(m("REQUEST_TIMEOUT",`Request timeout: ${n} (${t.timeout||5e3}ms)`))},t.timeout||5e3);r.set(d,{resolve:i,reject:s,timeout:u,timestamp:l}),o("Sending request",{type:n,nonce:d}),e.contentWindow.postMessage({type:n,nonce:d,timestamp:l,payload:a},t.targetOrigin)});return{sendRequest:async(e,t)=>{let r=null;for(let a=0;a<=i.maxRetries;a++)try{return await s(e,t)}catch(n){r=n;const e=n.message;if(e.startsWith("[HANDLER_ERROR]")||"Client destroyed"===e||"Iframe not ready"===e)throw o("Not retrying error",{error:e,reason:"Non-retriable error"}),n;if(a<i.maxRetries){const t=g(a,i);o("Retrying request",{attempt:a+1,maxRetries:i.maxRetries,delayMs:t,error:e}),await y(t)}}throw r||new Error(`Request failed after ${i.maxRetries} retries: ${e}`)},ping:async(n=1e3)=>{const a=Date.now();o("Starting health check",{timeoutMs:n,iframeReady:!!e.contentWindow,targetOrigin:t.targetOrigin});try{await s("SYS_PING",void 0);const e=Date.now()-a;return o("Health check passed",{latencyMs:e}),e}catch(i){const e=`Health check failed after ${Date.now()-a}ms: ${i.message}. Target: ${t.targetOrigin}`;throw t.debug&&(o(`❌ [PostMessage Client] ${e}`),o(`📊 [PostMessage Client] Pending requests: ${r.size}`)),m("HEALTH_CHECK_FAILED",e)}},subscribe:(e,t)=>(n.has(e)||n.set(e,new Set),n.get(e).add(t),()=>{const r=n.get(e);r&&(r.delete(t),0===r.size&&n.delete(e))}),destroy:()=>{window.removeEventListener("message",a),r.forEach(({timeout:e,reject:t})=>{clearTimeout(e),t(m("CLIENT_DESTROYED","Client destroyed"))}),r.clear(),n.clear()},getPendingCount:()=>r.size}},w=e=>{const t=document.createElement("iframe");return t.src=e.src,t.setAttribute("sandbox",e.sandbox),t.title=e.title,t.setAttribute("allow","payment *"),t.setAttribute("importance","high"),t.style.opacity="0",t},E=e=>{const{elementType:t,elementId:r,client:n,eventTarget:o}=e,a=(e,n)=>{const a=new CustomEvent(e,{detail:{elementType:t,elementId:r,timestamp:Date.now(),...n}});o.dispatchEvent(a)};return{setupSubscriptions:()=>{n.subscribe("EVENT_READY",()=>{a("ready",{})}),n.subscribe("EVENT_VALUE_CHANGED",e=>{const r={isValid:e.isValid,isEmpty:e.isEmpty,error:e.error||null};if("cardNumber"===t){const t={...r,cardBrand:e.cardBrand,last4:e.last4,bin:e.bin,cvvLengths:e.cvvLengths,potentialBrands:e.potentialBrands,matchStrength:e.matchStrength};a("change",t)}else a("change","card"===t?{...r,cardBrand:e.cardBrand,last4:e.last4,bin:e.bin,errors:e.errors||null}:r)}),n.subscribe("EVENT_FOCUS",()=>{a("focus",{})}),n.subscribe("EVENT_BLUR",()=>{a("blur",{})}),n.subscribe("EVENT_ERROR",e=>{a("error",{code:e.code,message:e.message,status:e.status,validationErrors:e.validationErrors,metadata:e.metadata||{}})})},dispatchError:(e,t,r)=>{a("error",{code:e,message:t,metadata:{source:"initialization",originalError:r}})}}},v=(e,t,r={},n,o)=>{let a=null,i=null,s=null,d=!1,l=null,u=null;const m=new EventTarget,c=n,h="cardNumber";return{id:c,type:h,get mounted(){return d},mount:async n=>{if(d)throw f("Element is already mounted");if(l="string"==typeof n?document.querySelector(n):n,!l)throw f(`Container not found: ${n}`);const p=window.location.origin,g=new URL(`${t.elementsBaseUrl}/card-number.html`);g.searchParams.set("parentOrigin",p),g.searchParams.set("elementId",c),g.searchParams.set("measurePerformance",String(t.measurePerformance||!1)),g.searchParams.set("debug",String(t.debug||!1)),a=w({src:g.toString(),sandbox:"allow-scripts allow-same-origin",title:r.ariaLabel||"Card Number Input"}),a.setAttribute("data-bt-element-id",c),a.setAttribute("data-theme-mode",t.themeMode||"auto"),i=b(a,{targetOrigin:t.iframeOrigin,timeout:t.timeoutMs,retries:t.retryConfig.maxRetries,debug:t.debug}),s={mount:async(e,t,r)=>{(e=>{e.style.border="none",e.style.width="100%",e.style.height="100%",e.style.display="block"})(t),e.appendChild(t)},unmount:e=>{e.remove()}},i&&(u=E({elementType:h,elementId:c,client:i,eventTarget:m}),u.setupSubscriptions());const y=new Promise((e,r)=>{const n=setTimeout(()=>{r(f(`Iframe EVENT_READY not received within ${t.timeoutMs}ms`,c,{elementType:h,timeoutMs:t.timeoutMs}))},t.timeoutMs);m.addEventListener("ready",()=>{clearTimeout(n),e()},{once:!0})});s.mount(l,a,{timeoutMs:t.timeoutMs}),d=!0;try{await o(),await y,await i.sendRequest("CMD_SET_CONFIG",{elementId:c,apiKey:e,apiTimeout:t.timeoutMs,apiRetries:t.retryConfig.maxRetries,theme:t.theme,darkTheme:t.darkTheme,themeMode:t.themeMode,placeholder:r.placeholder,disabled:r.disabled,readOnly:r.readOnly,debug:t.debug}),a&&(a.style.opacity="1")}catch(v){throw u&&u.dispatchError("MOUNT_ERROR",v.message,v),d=!1,i&&(i.destroy(),i=null),s&&a&&(s.unmount(a),a=null,s=null),u=null,l=null,v}},unmount:()=>{if(!d)throw f("Element is not mounted");i&&(i.sendRequest("CMD_CLEAR_CACHE",{}).catch(e=>{e.message}),i.destroy(),i=null),s&&a&&(s.unmount(a),a=null,s=null),u=null,l=null,d=!1},update:async e=>{if(!d||!i)throw f("Element must be mounted before updating");const r={placeholder:e.placeholder,disabled:e.disabled,readOnly:e.readOnly};void 0!==e.themeMode&&(r.themeMode=e.themeMode,r.theme=t.theme,r.darkTheme=t.darkTheme),await i.sendRequest("CMD_UPDATE_CONFIG",r)},focus:()=>{if(!d||!i)throw f("Element must be mounted before focusing");i.sendRequest("CMD_FOCUS",{})},blur:()=>{if(!d||!i)throw f("Element must be mounted before blurring");i.sendRequest("CMD_BLUR",{})},clear:()=>{if(!d||!i)throw f("Element must be mounted before clearing");i.sendRequest("CMD_CLEAR",{})},on:(e,t)=>(m.addEventListener(e,t),()=>m.removeEventListener(e,t))}},M=(e,t,r={},n,o)=>{let a=null,i=null,s=null,d=!1,l=null,u=null;const m=new EventTarget,c=n,h="cvv";return{id:c,type:h,get mounted(){return d},mount:async n=>{if(d)throw f("Element is already mounted",c);if(l="string"==typeof n?document.querySelector(n):n,!l)throw f(`Container not found: ${n}`);const p=window.location.origin,g=new URL(`${t.elementsBaseUrl}/cvv.html`);g.searchParams.set("parentOrigin",p),g.searchParams.set("elementId",c),g.searchParams.set("measurePerformance",String(t.measurePerformance||!1)),g.searchParams.set("debug",String(t.debug||!1)),a=w({src:g.toString(),sandbox:"allow-scripts allow-same-origin",title:r.ariaLabel||"CVV Input"}),a.setAttribute("data-bt-element-id",c),i=b(a,{targetOrigin:t.iframeOrigin,timeout:t.timeoutMs,retries:t.retryConfig.maxRetries,debug:t.debug}),s={mount:async(e,t,r)=>{(e=>{e.style.border="none",e.style.width="100%",e.style.height="100%",e.style.display="block"})(t),e.appendChild(t)},unmount:e=>{e.remove()}},i&&(u=E({elementType:h,elementId:c,client:i,eventTarget:m}),u.setupSubscriptions());const y=new Promise((e,r)=>{const n=setTimeout(()=>{r(f(`Iframe EVENT_READY not received within ${t.timeoutMs}ms`,c,{elementType:h,timeoutMs:t.timeoutMs}))},t.timeoutMs);m.addEventListener("ready",()=>{clearTimeout(n),e()},{once:!0})});s.mount(l,a,{timeoutMs:t.timeoutMs}),d=!0;try{await o(),await y,await i.sendRequest("CMD_SET_CONFIG",{elementId:c,theme:t.theme,darkTheme:t.darkTheme,themeMode:t.themeMode,apiKey:e,apiTimeout:t.timeoutMs,apiRetries:t.retryConfig.maxRetries,placeholder:r.placeholder,disabled:r.disabled,readOnly:r.readOnly,showToggle:r.showToggle,debug:t.debug}),a&&(a.style.opacity="1")}catch(v){throw u&&u.dispatchError("MOUNT_ERROR",v.message,v),d=!1,i&&(i.destroy(),i=null),s&&a&&(s.unmount(a),a=null,s=null),u=null,l=null,v}},unmount:()=>{if(!d)throw f("Element is not mounted");i&&(i.sendRequest("CMD_CLEAR_CACHE",{}).catch(e=>{e.message}),i.destroy(),i=null),s&&a&&(s.unmount(a),a=null,s=null),u=null,l=null,d=!1},update:async e=>{if(!d||!i)throw f("Element must be mounted before updating",c);const r={placeholder:e.placeholder,disabled:e.disabled,readOnly:e.readOnly,cardBrand:e.cardBrand,cvvLengths:e.cvvLengths};void 0!==e.themeMode&&(r.themeMode=e.themeMode,r.theme=t.theme,r.darkTheme=t.darkTheme),await i.sendRequest("CMD_UPDATE_CONFIG",r)},focus:()=>{if(!d||!i)throw f("Element must be mounted before focusing",c);i.sendRequest("CMD_FOCUS",{})},blur:()=>{if(!d||!i)throw f("Element must be mounted before blurring",c);i.sendRequest("CMD_BLUR",{})},clear:()=>{if(!d||!i)throw f("Element must be mounted before clearing",c);i.sendRequest("CMD_CLEAR",{})},on:(e,t)=>(m.addEventListener(e,t),()=>m.removeEventListener(e,t))}},R=(e,t,r={},n,o)=>{let a=null,i=null,s=null,d=!1,l=null,u=null;const m=new EventTarget,c=n,h="expiry";return{id:c,type:h,get mounted(){return d},mount:async n=>{if(d)throw f("Element is already mounted",c);if(l="string"==typeof n?document.querySelector(n):n,!l)throw f(`Container not found: ${n}`);const p=window.location.origin,g=new URL(`${t.elementsBaseUrl}/expiry.html`);g.searchParams.set("parentOrigin",p),g.searchParams.set("elementId",c),g.searchParams.set("measurePerformance",String(t.measurePerformance||!1)),g.searchParams.set("debug",String(t.debug||!1)),a=w({src:g.toString(),sandbox:"allow-scripts allow-same-origin",title:r.ariaLabel||"Expiry Date Input"}),a.setAttribute("data-bt-element-id",c),i=b(a,{targetOrigin:t.iframeOrigin,timeout:t.timeoutMs,retries:t.retryConfig.maxRetries,debug:t.debug}),s={mount:async(e,t,r)=>{(e=>{e.style.border="none",e.style.width="100%",e.style.height="100%",e.style.display="block"})(t),e.appendChild(t)},unmount:e=>{e.remove()}},i&&(u=E({elementType:h,elementId:c,client:i,eventTarget:m}),u.setupSubscriptions());const y=new Promise((e,r)=>{const n=setTimeout(()=>{r(f(`Iframe EVENT_READY not received within ${t.timeoutMs}ms`,c,{elementType:h,timeoutMs:t.timeoutMs}))},t.timeoutMs);m.addEventListener("ready",()=>{clearTimeout(n),e()},{once:!0})});s.mount(l,a,{timeoutMs:t.timeoutMs}),d=!0;try{await o(),await y,await i.sendRequest("CMD_SET_CONFIG",{elementId:c,theme:t.theme,darkTheme:t.darkTheme,themeMode:t.themeMode,apiKey:e,apiTimeout:t.timeoutMs,apiRetries:t.retryConfig.maxRetries,placeholder:r.placeholder,disabled:r.disabled,readOnly:r.readOnly,debug:t.debug}),a&&(a.style.opacity="1")}catch(v){throw u&&u.dispatchError("MOUNT_ERROR",v.message,v),d=!1,i&&(i.destroy(),i=null),s&&a&&(s.unmount(a),a=null,s=null),u=null,l=null,v}},unmount:()=>{if(!d)throw f("Element is not mounted");i&&(i.sendRequest("CMD_CLEAR_CACHE",{}).catch(e=>{e.message}),i.destroy(),i=null),s&&a&&(s.unmount(a),a=null,s=null),u=null,l=null,d=!1},update:async e=>{if(!d||!i)throw f("Element must be mounted before updating",c);const r={placeholder:e.placeholder,disabled:e.disabled,readOnly:e.readOnly};void 0!==e.themeMode&&(r.themeMode=e.themeMode,r.theme=t.theme,r.darkTheme=t.darkTheme),await i.sendRequest("CMD_UPDATE_CONFIG",r)},focus:()=>{if(!d||!i)throw f("Element must be mounted before focusing",c);i.sendRequest("CMD_FOCUS",{})},blur:()=>{if(!d||!i)throw f("Element must be mounted before blurring",c);i.sendRequest("CMD_BLUR",{})},clear:()=>{if(!d||!i)throw f("Element must be mounted before clearing",c);i.sendRequest("CMD_CLEAR",{})},on:(e,t)=>(m.addEventListener(e,t),()=>m.removeEventListener(e,t))}},C=(e,t,r={},n,o)=>{let a=null,i=null,s=null,d=!1,l=null,u=null;const m=new EventTarget,c=n,h="text";if(r.transform&&!(Array.isArray(r.transform)&&2===r.transform.length&&r.transform[0]instanceof RegExp&&"string"==typeof r.transform[1]))throw new TypeError('transform must be a tuple of [RegExp, string]. Example: [/-/g, ""]');return{id:c,type:h,get mounted(){return d},mount:async n=>{if(d)throw f("Element is already mounted",c);if(l="string"==typeof n?document.querySelector(n):n,!l)throw f(`Container not found: ${n}`);const p=window.location.origin,g=new URL(`${t.elementsBaseUrl}/text.html`);g.searchParams.set("parentOrigin",p),g.searchParams.set("elementId",c),g.searchParams.set("measurePerformance",String(t.measurePerformance||!1)),g.searchParams.set("debug",String(t.debug||!1)),a=w({src:g.toString(),sandbox:"allow-scripts allow-same-origin",title:r.ariaLabel||"Text Input"}),a.setAttribute("data-bt-element-id",c),i=b(a,{targetOrigin:t.iframeOrigin,timeout:t.timeoutMs,retries:t.retryConfig.maxRetries,debug:t.debug}),s={mount:async(e,t,r)=>{(e=>{e.style.border="none",e.style.width="100%",e.style.height="100%",e.style.display="block"})(t),e.appendChild(t)},unmount:e=>{e.remove()}},i&&(u=E({elementType:h,elementId:c,client:i,eventTarget:m}),u.setupSubscriptions());const y=new Promise((e,r)=>{const n=setTimeout(()=>{r(f(`Iframe EVENT_READY not received within ${t.timeoutMs}ms`,c,{elementType:h,timeoutMs:t.timeoutMs}))},t.timeoutMs);m.addEventListener("ready",()=>{clearTimeout(n),e()},{once:!0})});s.mount(l,a,{timeoutMs:t.timeoutMs}),d=!0;try{await o(),await y;const n=r.transform?{pattern:r.transform[0].source,flags:r.transform[0].flags,replacement:r.transform[1]}:void 0,s=r.mask?r.mask.map(e=>"string"==typeof e?e:e instanceof RegExp?{source:e.source,flags:e.flags}:e):void 0;await i.sendRequest("CMD_SET_CONFIG",{elementId:c,theme:t.theme,darkTheme:t.darkTheme,themeMode:t.themeMode,apiKey:e,apiTimeout:t.timeoutMs,apiRetries:t.retryConfig.maxRetries,placeholder:r.placeholder,disabled:r.disabled,readOnly:r.readOnly,validation:r.validation,required:r.required,maxLength:r.maxLength,password:r.password,inputMode:r.inputMode,mask:s,transform:n,debug:t.debug}),a&&(a.style.opacity="1")}catch(v){throw u&&u.dispatchError("MOUNT_ERROR",v.message,v),d=!1,i&&(i.destroy(),i=null),s&&a&&(s.unmount(a),a=null,s=null),u=null,l=null,v}},unmount:()=>{if(!d)throw f("Element is not mounted");i&&(i.sendRequest("CMD_CLEAR_CACHE",{}).catch(e=>{e.message}),i.destroy(),i=null),s&&a&&(s.unmount(a),a=null,s=null),u=null,l=null,d=!1},update:async e=>{if(!d||!i)throw f("Element must be mounted before updating",c);const r={placeholder:e.placeholder,disabled:e.disabled,readOnly:e.readOnly,required:e.required,maxLength:e.maxLength,password:e.password,inputMode:e.inputMode};void 0!==e.themeMode&&(r.themeMode=e.themeMode,r.theme=t.theme,r.darkTheme=t.darkTheme),await i.sendRequest("CMD_UPDATE_CONFIG",r)},focus:()=>{if(!d||!i)throw f("Element must be mounted before focusing",c);i.sendRequest("CMD_FOCUS",{})},blur:()=>{if(!d||!i)throw f("Element must be mounted before blurring",c);i.sendRequest("CMD_BLUR",{})},clear:()=>{if(!d||!i)throw f("Element must be mounted before clearing",c);i.sendRequest("CMD_CLEAR",{})},on:(e,t)=>(m.addEventListener(e,t),()=>m.removeEventListener(e,t))}},T=e=>{if((e=>null==e||"string"==typeof e||"number"==typeof e||"boolean"==typeof e)(e))return e;if((e=>{if("object"!=typeof e||null===e)return!1;const t=e;return"function"==typeof t.mount&&"function"==typeof t.update&&"function"==typeof t.on})(e)){if(!e.id)throw f("Element is missing id property. Ensure createElement is called after the SDK loads and all elements are mounted before calling tokenize().");return e.id}if(Array.isArray(e))return e.map(T);if("object"==typeof e&&null!==e){const t={};for(const[r,n]of Object.entries(e))t[r]=T(n);return t}return e},x={colors:{primary:"#3b82f6",error:"#ef4444",success:"#10b981",text:{primary:"#1f2937",secondary:"#6b7280",placeholder:"#9ca3af",disabled:"#d1d5db"},background:{default:"#ffffff",hover:"#f9fafb",focus:"#eff6ff",disabled:"#f9fafb"},border:{default:"#d1d5db",hover:"#9ca3af",focus:"#3b82f6",error:"#ef4444"}},typography:{fontFamily:'"Inter", ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, sans-serif',fontSize:{sm:"14px",base:"16px",lg:"18px"},fontWeight:{normal:"400",medium:"500",semibold:"600"},lineHeight:{tight:"1.25",normal:"1.5",relaxed:"1.75"}},spacing:{xs:"4px",sm:"8px",md:"12px",lg:"16px",xl:"24px"},borders:{radius:{none:"0",sm:"2px",base:"4px",md:"6px",lg:"8px",full:"9999px"},width:{thin:"1px",base:"2px",thick:"3px"}},shadows:{none:"none",sm:"0 1px 2px 0 rgba(0, 0, 0, 0.05)",base:"0 1px 3px 0 rgba(0, 0, 0, 0.1), 0 1px 2px -1px rgba(0, 0, 0, 0.1)",md:"0 4px 6px -1px rgba(0, 0, 0, 0.1), 0 2px 4px -2px rgba(0, 0, 0, 0.1)",lg:"0 10px 15px -3px rgba(0, 0, 0, 0.1), 0 4px 6px -4px rgba(0, 0, 0, 0.1)",focus:"0 0 0 3px rgba(59, 130, 246, 0.1)"},transitions:{fast:"150ms cubic-bezier(0.4, 0, 0.2, 1)",base:"200ms cubic-bezier(0.4, 0, 0.2, 1)",slow:"300ms cubic-bezier(0.4, 0, 0.2, 1)"}},O=e=>{var t,r,n,o,a,i,s,d,l,u,m;return e?{colors:{primary:(null==(t=e.colors)?void 0:t.primary)??x.colors.primary,error:(null==(r=e.colors)?void 0:r.error)??x.colors.error,success:(null==(n=e.colors)?void 0:n.success)??x.colors.success,text:{...x.colors.text,...null==(o=e.colors)?void 0:o.text},background:{...x.colors.background,...null==(a=e.colors)?void 0:a.background},border:{...x.colors.border,...null==(i=e.colors)?void 0:i.border}},typography:{...x.typography,...e.typography,fontSize:{...x.typography.fontSize,...null==(s=e.typography)?void 0:s.fontSize},fontWeight:{...x.typography.fontWeight,...null==(d=e.typography)?void 0:d.fontWeight},lineHeight:{...x.typography.lineHeight,...null==(l=e.typography)?void 0:l.lineHeight}},spacing:{...x.spacing,...e.spacing},borders:{radius:{...x.borders.radius,...null==(u=e.borders)?void 0:u.radius},width:{...x.borders.width,...null==(m=e.borders)?void 0:m.width}},shadows:{...x.shadows,...e.shadows},transitions:{...x.transitions,...e.transitions}}:x},k=(e,t,r,n)=>{for(const o of Object.keys(t))r.has(o)||((null==n?void 0:n.has(o))?console.warn(`[BasisTheory] Deprecated option "${o}" in ${e}. ${n.get(o)}`):console.warn(`[BasisTheory] Unknown option "${o}" in ${e}. This option will be ignored. See https://developers.basistheory.com/docs/ for supported options.`))},_=new Set(["elementsBaseUrl","apiBaseUrl","debug","measurePerformance","timeoutMs","retryConfig","themeMode","theme","darkTheme"]),S=new Map([["iframeOrigin",'Use "elementsBaseUrl" instead.']]),D=new Set(["placeholder","ariaLabel","disabled","readOnly"]),I={cardNumber:new Set([...D]),cvv:new Set([...D,"cardBrand","cvvLengths"]),expiry:new Set([...D]),text:new Set([...D,"validation","required","maxLength","password","inputMode","mask","transform"]),card:new Set([...D,"layout","stackAt","iconPosition","cardBrands"])},A=(e,t={},r)=>{(e=>{if(!e||"string"!=typeof e||0===e.trim().length)throw h("API key is required")})(e);const n=((e={})=>{var t,r,n;k("SDKOptions",e,_,S);const o=e.elementsBaseUrl||e.iframeOrigin;if(void 0!==o){if("string"!=typeof o||0===o.trim().length)throw h("elementsBaseUrl must be a non-empty string");try{new URL(o)}catch{throw h("elementsBaseUrl must be a valid URL")}}if(void 0!==e.apiBaseUrl){if("string"!=typeof e.apiBaseUrl||0===e.apiBaseUrl.trim().length)throw h("apiBaseUrl must be a non-empty string");try{new URL(e.apiBaseUrl)}catch{throw h("apiBaseUrl must be a valid URL")}}if(void 0!==e.debug&&"boolean"!=typeof e.debug)throw h("debug must be a boolean");if(void 0!==e.measurePerformance&&"boolean"!=typeof e.measurePerformance)throw h("measurePerformance must be a boolean");if(void 0!==e.timeoutMs&&("number"!=typeof e.timeoutMs||e.timeoutMs<=0))throw h("timeoutMs must be a positive number");const a={maxRetries:(null==(t=e.retryConfig)?void 0:t.maxRetries)??3,delayMs:(null==(r=e.retryConfig)?void 0:r.delayMs)??1e3,backoffFactor:(null==(n=e.retryConfig)?void 0:n.backoffFactor)??2};if("number"!=typeof a.maxRetries||a.maxRetries<0)throw h("maxRetries must be a non-negative number");if("number"!=typeof a.delayMs||a.delayMs<=0)throw h("retryConfig.delayMs must be a positive number");if("number"!=typeof a.backoffFactor||a.backoffFactor<1)throw h("retryConfig.backoffFactor must be >= 1");const i=e.themeMode||"auto";if(!["light","dark","auto"].includes(i))throw h('themeMode must be "light", "dark", or "auto"');const s=o||"https://js.basistheory.com/3.0.0-beta.2/elements";return{iframeOrigin:new URL(s).origin,elementsBaseUrl:s,apiBaseUrl:e.apiBaseUrl,debug:e.debug??!1,measurePerformance:e.measurePerformance??!1,timeoutMs:e.timeoutMs||3e4,themeMode:i,theme:O(e.theme),darkTheme:e.darkTheme?O(e.darkTheme):void 0,retryConfig:a}})(t),o=l("SDK",n.debug||!1);o("SDK initialized",{apiKeyPrefix:e.substring(0,7)+"...",elementsBaseUrl:n.elementsBaseUrl,iframeOrigin:n.iframeOrigin,debug:n.debug||!1});const a=new Map;let i=null,s=null,d=null,m=!1,p=t.themeMode||"auto",g=null;const y={cardNumber:v,cvv:M,expiry:R,text:C},w={card:async()=>{if(!g){const e=await Promise.resolve().then(()=>L);g=e.createCardElement}return g}},E=()=>d||(m||(m=!0,d=x()),d),x=async()=>{if(i)return void o("Coordinator already initialized",{loaded:null!==i.contentWindow});o("Initializing coordinator iframe",{elementsBaseUrl:n.elementsBaseUrl}),i=document.createElement("iframe"),i.setAttribute("name","bt-coordinator"),i.setAttribute("title","BasisTheory Coordinator"),i.setAttribute("role","none"),i.style.border="none",i.style.width="0",i.style.height="0",i.style.position="absolute",i.style.top="-9999px",i.style.left="-9999px";const t=n.elementsBaseUrl.endsWith("/")?n.elementsBaseUrl:`${n.elementsBaseUrl}/`,r=new URL("coordinator.html",t);r.searchParams.set("parentOrigin",window.location.origin),i.src=r.toString(),document.body.appendChild(i),o("Coordinator iframe mounted",{url:i.src}),await new Promise((e,t)=>{const r=setTimeout(()=>{t(new Error(`Coordinator load timeout (${n.timeoutMs}ms). Try increasing timeoutMs for slow connections.`))},n.timeoutMs);i.addEventListener("load",()=>{clearTimeout(r),o("Coordinator iframe loaded"),e()},{once:!0})}),s=b(i,{targetOrigin:new URL(n.elementsBaseUrl).origin,timeout:3e4,retries:3,debug:n.debug||!1}),o("Coordinator PostMessage client created"),await s.sendRequest("CMD_SET_CONFIG",{apiKey:e,apiBaseUrl:n.apiBaseUrl,apiTimeout:3e4,apiRetries:3,debug:n.debug||!1,theme:n.theme,darkTheme:n.darkTheme,themeMode:n.themeMode}),o("Coordinator initialized successfully")},D={createElement:(t,r)=>{const s=y[t],d=w[t];if(!s&&!d)throw h(`Unknown element type: ${t}`);r&&((e,t={})=>{if(k(`ElementOptions (${e})`,t,I[e]),void 0!==t.placeholder)if("card"===e){if("object"!=typeof t.placeholder||null===t.placeholder)throw h("placeholder for card element must be an object with cardNumber, expiryDate, and cvv keys")}else if("string"!=typeof t.placeholder)throw h("placeholder must be a string");if(void 0!==t.disabled&&"boolean"!=typeof t.disabled)throw h("disabled must be a boolean");if(void 0!==t.readOnly&&"boolean"!=typeof t.readOnly)throw h("readOnly must be a boolean");if(void 0!==t.ariaLabel&&"string"!=typeof t.ariaLabel)throw h("ariaLabel must be a string");if("text"===e){if(void 0!==t.maxLength&&("number"!=typeof t.maxLength||t.maxLength<=0))throw h("maxLength must be a positive number");if(void 0!==t.password&&"boolean"!=typeof t.password)throw h("password must be a boolean");if(void 0!==t.required&&"boolean"!=typeof t.required)throw h("required must be a boolean");if(void 0!==t.validation&&!(t.validation instanceof RegExp))throw h("validation must be a RegExp");if(t.transform&&!(Array.isArray(t.transform)&&2===t.transform.length&&t.transform[0]instanceof RegExp&&"string"==typeof t.transform[1]))throw h('transform must be a tuple of [RegExp, string]. Example: [/-/g, ""]')}if("card"===e){const e=t;if(void 0!==e.layout&&!["row","column","auto"].includes(e.layout))throw h('layout must be "row", "column", or "auto"');if(void 0!==e.stackAt&&("number"!=typeof e.stackAt||e.stackAt<=0))throw h("stackAt must be a positive number");if(void 0!==e.iconPosition&&!["left","right","none"].includes(e.iconPosition))throw h('iconPosition must be "left", "right", or "none"');if(void 0!==e.cardBrands){if(!Array.isArray(e.cardBrands))throw h("cardBrands must be an array of strings");if(e.cardBrands.some(e=>"string"!=typeof e))throw h("All cardBrands must be strings")}}})(t,r);const l=`${t}-${Date.now()}-${Math.random().toString(36).slice(2,9)}`;let u;if(o("Creating element (sync)",{type:t,elementId:l,coordinatorInitialized:null!==i,isLazyLoaded:!!d}),s)u=s(e,n,r,l,E);else{let o=null,a=null;const i=async()=>{a||(a=(async()=>{const t=await d();o=t(e,n,r,l,E)})()),await a};u={id:l,type:t,get mounted(){return(null==o?void 0:o.mounted)??!1},get fields(){return null==o?void 0:o.fields},mount:async e=>(await i(),o.mount(e)),unmount:()=>{if(!o)throw f("Element not initialized");return o.unmount()},update:async e=>{if(!o)throw f("Element not initialized");return o.update(e)},focus:()=>{if(!o)throw f("Element not initialized");return o.focus()},blur:()=>{if(!o)throw f("Element not initialized");return o.blur()},clear:()=>{if(!o)throw f("Element not initialized");return o.clear()},on:(e,t)=>o?o.on(e,t):(i().then(()=>o.on(e,t)),()=>{})}}return a.set(u.id,u),"cardNumber"===t&&u.on("change",e=>{const{cardBrand:t,cvvLengths:r}=e.detail;if(o("Card number change event received",{cardBrand:t,cvvLengths:r,cvvElementsCount:Array.from(a.values()).filter(e=>"cvv"===e.type).length}),t&&"Unknown"!==t&&r)for(const[n,i]of a)"cvv"===i.type&&i.mounted&&(o("Coordinating CVV element with card brand",{cvvElementId:n,cardBrand:t,cvvLengths:r,mounted:i.mounted}),i.update({cardBrand:t,cvvLengths:r}).catch(e=>{o("Failed to update CVV element with card brand",{cvvElementId:n,cardBrand:t,error:e.message})}))}),u},tokenize:async(e,t)=>{if(o("tokenize called",{hasPayload:!!e,hasOptions:!!t,coordinatorReady:!!s}),s||(o("Waiting for coordinator initialization"),await x()),!s)throw(()=>{const e=u("COORDINATOR_ERROR","Coordinator failed to initialize",void 0);return e.name="CoordinatorError",e})();try{const r=e?T(e):{};o("Element references resolved",{originalPayload:!!e,resolvedPayload:!!r}),o("Delegating tokenization to coordinator");const n=await s.sendRequest("CMD_TOKENIZE",{payload:r,options:t});return o("tokenize successful",{tokenId:n.id}),n}catch(r){throw o("tokenize failed",{error:r.message}),r}},tokens:{create:async e=>{if(!e||"object"!=typeof e||Array.isArray(e))throw c("Token data must be a non-null object");if(o("tokens.create called",{type:e.type,hasData:!!e.data}),s||(o("Waiting for coordinator initialization"),await x()),!s)throw new Error("Coordinator failed to initialize");try{const t={...e,data:T(e.data)};o("Element references resolved for tokens.create",{resolvedData:!!t});const r=await s.sendRequest("CMD_TOKENS_CREATE",{data:t});return o("tokens.create successful",{tokenId:r.id}),r}catch(t){throw o("tokens.create failed",{error:t.message}),t}},retrieve:async(e,t)=>{if(o("tokens.retrieve called",{tokenId:e,hasSessionKey:!!(null==t?void 0:t.apiKey)}),s||await x(),!s)throw new Error("Coordinator failed to initialize");try{const r=await s.sendRequest("CMD_TOKENS_RETRIEVE",{id:e,apiKey:null==t?void 0:t.apiKey});return o("tokens.retrieve successful",{tokenId:r.id}),r}catch(r){throw o("tokens.retrieve failed",{error:r.message}),r}},update:async(e,t)=>{if(o("tokens.update called",{tokenId:e}),s||await x(),!s)throw new Error("Coordinator failed to initialize");try{const r=t.data?{...t,data:T(t.data)}:t,n=await s.sendRequest("CMD_TOKENS_UPDATE",{id:e,data:r});return o("tokens.update successful",{tokenId:n.id}),n}catch(r){throw o("tokens.update failed",{error:r.message}),r}},encrypt:async(e,t,r)=>{if(o("tokens.encrypt called",{isSingleToken:"type"in e&&"data"in e,keyId:r}),!e||"object"!=typeof e)throw c("tokenData must be an object");if(!t||"string"!=typeof t)throw c("publicKeyPEM is required");if(!r||"string"!=typeof r)throw c("keyId is required");if(s||await x(),!s)throw new Error("Coordinator failed to initialize");try{const n=T(e);o("Element references resolved for tokens.encrypt",{originalData:!!e,resolvedData:!!n});const a=await s.sendRequest("CMD_TOKENS_ENCRYPT",{tokenRequests:n,publicKeyPEM:t,keyId:r});return o("tokens.encrypt successful",{isSingleToken:"encrypted"in a&&"type"in a}),a}catch(n){throw o("tokens.encrypt failed",{error:n.message}),n}}},sessions:{create:async()=>{if(o("sessions.create called"),s||await x(),!s)throw new Error("Coordinator failed to initialize");try{const e=await s.sendRequest("CMD_SESSIONS_CREATE",{});return o("sessions.create successful",{nonce:e.nonce,expiresAt:e.expires_at}),e}catch(e){throw o("sessions.create failed",{error:e.message}),e}}},tokenIntents:{create:async(e,t)=>{if(o("tokenIntents.create called",{type:e.type,hasData:!!e.data,hasOptions:!!t}),s||await x(),!s)throw new Error("Coordinator failed to initialize");try{const r=T(e.data);o("Element references resolved for token intent");const n=await s.sendRequest("CMD_TOKEN_INTENTS_CREATE",{type:e.type,data:r,options:t});return o("tokenIntents.create successful",{intentId:n.id}),n}catch(r){throw o("tokenIntents.create failed",{error:r.message}),r}},get:async(e,t)=>{if(o("tokenIntents.get called",{intentId:e}),s||await x(),!s)throw new Error("Coordinator failed to initialize");try{const r=await s.sendRequest("CMD_TOKEN_INTENTS_GET",{id:e,options:t});return o("tokenIntents.get successful",{intentId:r.id}),r}catch(r){throw o("tokenIntents.get failed",{error:r.message}),r}}},updateThemeMode:async e=>{o("updateThemeMode called",{oldMode:p,newMode:e,mountedElements:Array.from(a.values()).filter(e=>e.mounted).length}),p=e;const t=[];for(const[r,n]of a)if(n.mounted){o("Sending theme mode update to element",{elementId:r,elementType:n.type,mode:e});const a=document.querySelector(`iframe[data-bt-element-id="${n.id}"]`);a&&a.setAttribute("data-theme-mode",e);const i=n.update({themeMode:e}).catch(e=>{o("Failed to update theme mode for element",{elementId:r,error:e.message})});t.push(i)}await Promise.all(t),o("Theme mode updated for all mounted elements",{mode:e,updatedCount:Array.from(a.values()).filter(e=>e.mounted).length})}};if(r&&r.length>0){o("Draining command queue from loader",{queueLength:r.length,commands:r.map(e=>e.method)});for(const e of r)try{const t=D[e.method];if(!t)throw new Error(`Unknown method: ${e.method}`);o("Replaying queued command",{method:e.method,argsCount:e.args.length});const r=t(...e.args);r&&"function"==typeof r.then?r.then(t=>{o("Queued command completed (async)",{method:e.method}),e.resolve(t)}).catch(t=>{o("Queued command failed (async)",{method:e.method,error:t.message}),e.reject(t)}):(o("Queued command completed (sync)",{method:e.method}),e.resolve(r))}catch(A){o("Queued command failed (sync)",{method:e.method,error:A.message}),e.reject(A)}o("Command queue drain complete",{processedCount:r.length})}return D};"undefined"!=typeof window&&"undefined"!=typeof document&&document.currentScript&&!window.BasisTheory&&(window.BasisTheory=A),"undefined"!=typeof window&&(window.__BasisTheorySDK__=A);const L=Object.freeze(Object.defineProperty({__proto__:null,createCardElement:(e,t,r={},n,o)=>{let a=null,i=null,s=null,d=!1,l=null,u=null;const m=new EventTarget,c=n,h="card",p=e=>({id:e,type:"card",get mounted(){return d},mount:()=>{throw f("Sub-field refs cannot be mounted independently")},unmount:()=>{},update:()=>Promise.resolve(),focus:()=>{},blur:()=>{},clear:()=>{},on:()=>()=>{}});return{id:c,type:h,get mounted(){return d},fields:{number:p(`${c}__number`),expiryDate:p(`${c}__expiry`),cvc:p(`${c}__cvc`)},mount:async n=>{if(d)throw f("Element is already mounted");if(l="string"==typeof n?document.querySelector(n):n,!l)throw f(`Container not found: ${n}`);const p=window.location.origin,g=new URL(`${t.elementsBaseUrl}/card.html`);g.searchParams.set("parentOrigin",p),g.searchParams.set("elementId",c),g.searchParams.set("measurePerformance",String(t.measurePerformance||!1)),g.searchParams.set("debug",String(t.debug||!1)),a=w({src:g.toString(),sandbox:"allow-scripts allow-same-origin",title:r.ariaLabel||"Card Input"}),a.setAttribute("data-bt-element-id",c),a.setAttribute("data-theme-mode",t.themeMode||"auto"),i=b(a,{targetOrigin:t.iframeOrigin,timeout:t.timeoutMs,retries:t.retryConfig.maxRetries,debug:t.debug}),s={mount:async(e,t,r)=>{(e=>{e.style.border="none",e.style.width="100%",e.style.height="100%",e.style.display="block"})(t),e.appendChild(t)},unmount:e=>{e.remove()}},i&&(u=E({elementType:h,elementId:c,client:i,eventTarget:m}),u.setupSubscriptions());const y=new Promise((e,r)=>{const n=setTimeout(()=>{r(f(`Iframe EVENT_READY not received within ${t.timeoutMs}ms`,c,{elementType:h,timeoutMs:t.timeoutMs}))},t.timeoutMs);m.addEventListener("ready",()=>{clearTimeout(n),e()},{once:!0})});s.mount(l,a,{timeoutMs:t.timeoutMs}),d=!0;try{await o(),await y,await i.sendRequest("CMD_SET_CONFIG",{elementId:c,apiKey:e,apiTimeout:t.timeoutMs,apiRetries:t.retryConfig.maxRetries,theme:t.theme,darkTheme:t.darkTheme,themeMode:t.themeMode,placeholder:r.placeholder,style:r.style,disabled:r.disabled,readOnly:r.readOnly,layout:r.layout||"auto",stackAt:r.stackAt||400,iconPosition:r.iconPosition||"left",cardBrands:r.cardBrands,debug:t.debug}),a&&(a.style.opacity="1")}catch(v){throw u&&u.dispatchError("MOUNT_ERROR",v.message,v),d=!1,i&&(i.destroy(),i=null),s&&a&&(s.unmount(a),a=null,s=null),u=null,l=null,v}},unmount:()=>{if(!d)throw f("Element is not mounted");i&&(i.sendRequest("CMD_CLEAR_CACHE",{}).catch(e=>{e.message}),i.destroy(),i=null),s&&a&&(s.unmount(a),a=null,s=null),u=null,l=null,d=!1},update:async e=>{if(!d||!i)throw f("Element must be mounted before updating");const r=e,n={placeholder:r.placeholder,style:r.style,disabled:r.disabled,readOnly:r.readOnly,layout:r.layout,stackAt:r.stackAt,iconPosition:r.iconPosition,cardBrands:r.cardBrands};void 0!==e.themeMode&&(n.themeMode=e.themeMode,n.theme=t.theme,n.darkTheme=t.darkTheme),await i.sendRequest("CMD_UPDATE_CONFIG",n)},focus:()=>{if(!d||!i)throw f("Element must be mounted before focusing");i.sendRequest("CMD_FOCUS",{})},blur:()=>{if(!d||!i)throw f("Element must be mounted before blurring");i.sendRequest("CMD_BLUR",{})},clear:()=>{if(!d||!i)throw f("Element must be mounted before clearing");i.sendRequest("CMD_CLEAR",{})},on:(e,t)=>(m.addEventListener(e,t),()=>m.removeEventListener(e,t))}}},Symbol.toStringTag,{value:"Module"}));e.buildDate="2026-04-13T17:05:21.283Z",e.default=A,e.version="3.0.0-beta.2",Object.defineProperties(e,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}})});