@ozura/elements 0.1.0-beta.6 → 0.1.0-beta.7
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 +181 -14
- package/dist/frame/tokenizer-frame.js +34 -8
- package/dist/frame/tokenizer-frame.js.map +1 -1
- package/dist/oz-elements.esm.js +74 -11
- package/dist/oz-elements.esm.js.map +1 -1
- package/dist/oz-elements.umd.js +74 -11
- package/dist/oz-elements.umd.js.map +1 -1
- package/dist/react/index.cjs.js +104 -18
- package/dist/react/index.cjs.js.map +1 -1
- package/dist/react/index.esm.js +104 -18
- package/dist/react/index.esm.js.map +1 -1
- package/dist/react/react/index.d.ts +18 -3
- package/dist/react/sdk/OzVault.d.ts +39 -3
- package/dist/react/server/index.d.ts +106 -0
- package/dist/react/types/index.d.ts +30 -1
- package/dist/server/index.cjs.js +200 -0
- package/dist/server/index.cjs.js.map +1 -1
- package/dist/server/index.esm.js +199 -1
- package/dist/server/index.esm.js.map +1 -1
- package/dist/server/sdk/OzVault.d.ts +39 -3
- package/dist/server/server/index.d.ts +106 -0
- package/dist/server/types/index.d.ts +30 -1
- package/dist/types/sdk/OzVault.d.ts +39 -3
- package/dist/types/server/index.d.ts +106 -0
- package/dist/types/types/index.d.ts +30 -1
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -4,7 +4,7 @@ PCI-compliant card tokenization SDK for the Ozura Vault.
|
|
|
4
4
|
|
|
5
5
|
OzElements renders secure, iframe-isolated card input fields on your page and tokenizes card data directly to the Ozura Vault. Your JavaScript never touches raw card numbers, CVVs, or expiry dates — the iframes handle everything. You get back a token. Use it with your own payment processor, your own backend systems, or with the Ozura Pay API.
|
|
6
6
|
|
|
7
|
-
|
|
7
|
+
You need a **vault public key** (`pk_…`) for the browser SDK and your **vault API key** on the server only — it mints short-lived **wax keys** so the secret never reaches the browser. **Integration expectations and examples are in this README** (section [Wax keys (merchant integration)](#wax-keys-merchant-integration)). [WAX_KEY_IMPLEMENTATION.md](./WAX_KEY_IMPLEMENTATION.md) is an optional deep dive (design history, dev server, security notes).
|
|
8
8
|
|
|
9
9
|
---
|
|
10
10
|
|
|
@@ -14,7 +14,7 @@ If you need to collect card data, you have a PCI compliance problem. OzElements
|
|
|
14
14
|
|
|
15
15
|
The Ozura Vault stores and tokenizes sensitive card data. OzElements is the frontend SDK for the vault — it gives you drop-in card fields that are fully isolated inside Ozura-controlled iframes. Your page never sees raw card data, which keeps your PCI scope minimal (SAQ-A).
|
|
16
16
|
|
|
17
|
-
**You don't need to be an OzuraPay merchant to use this.** You
|
|
17
|
+
**You don't need to be an OzuraPay merchant to use this.** You need vault credentials: a **public key** for the browser and the **vault API key** on your server (for minting wax only). Once you have a token, you can use it however you want — with your own processor, your own systems, or optionally with the Ozura Pay API.
|
|
18
18
|
|
|
19
19
|
---
|
|
20
20
|
|
|
@@ -25,7 +25,7 @@ Your page (yoursite.com)
|
|
|
25
25
|
│
|
|
26
26
|
│ import { OzVault } from '@ozura/elements'
|
|
27
27
|
│
|
|
28
|
-
│ const vault =
|
|
28
|
+
│ const vault = await OzVault.create({ pubKey, fetchWaxKey });
|
|
29
29
|
│
|
|
30
30
|
│ const cardNumber = vault.createElement('cardNumber', { style: { ... } });
|
|
31
31
|
│ cardNumber.mount('#card-number');
|
|
@@ -47,6 +47,8 @@ Your page (yoursite.com)
|
|
|
47
47
|
|
|
48
48
|
Raw card data travels one path: element iframe → tokenizer iframe (direct same-origin `postMessage`). Your SDK only ever sees metadata (valid/complete/cardBrand) and the final token.
|
|
49
49
|
|
|
50
|
+
The tokenizer POSTs to the vault with **`X-Wax-Key`** (minted on your backend). The vault secret must **never** appear in the browser or in tokenize requests.
|
|
51
|
+
|
|
50
52
|
---
|
|
51
53
|
|
|
52
54
|
## Installation
|
|
@@ -70,8 +72,17 @@ For production, pin a version: `.../npm/@ozura/elements@1.0.0/dist/oz-elements.u
|
|
|
70
72
|
```js
|
|
71
73
|
import { OzVault } from '@ozura/elements';
|
|
72
74
|
|
|
73
|
-
const vault =
|
|
75
|
+
const vault = await OzVault.create({
|
|
74
76
|
pubKey: 'your_pub_key',
|
|
77
|
+
fetchWaxKey: async (sessionId) => {
|
|
78
|
+
// Your backend mints a session-bound wax key using the vault secret
|
|
79
|
+
const { waxKey } = await fetch('/api/mint-wax', {
|
|
80
|
+
method: 'POST',
|
|
81
|
+
headers: { 'Content-Type': 'application/json' },
|
|
82
|
+
body: JSON.stringify({ sessionId }),
|
|
83
|
+
}).then(r => r.json());
|
|
84
|
+
return waxKey;
|
|
85
|
+
},
|
|
75
86
|
});
|
|
76
87
|
|
|
77
88
|
const cardNumber = vault.createElement('cardNumber', {
|
|
@@ -113,16 +124,135 @@ document.getElementById('tokenize').addEventListener('click', async () => {
|
|
|
113
124
|
|
|
114
125
|
---
|
|
115
126
|
|
|
127
|
+
## Wax keys (merchant integration)
|
|
128
|
+
|
|
129
|
+
The vault `/tokenize` call must not use your vault secret from the browser. Instead:
|
|
130
|
+
|
|
131
|
+
1. During `OzVault.create()`, the SDK generates a `sessionId` (UUID) and calls **`fetchWaxKey(sessionId)`** once.
|
|
132
|
+
2. Your **`fetchWaxKey`** implementation should `POST` to **your** backend (e.g. `/api/mint-wax`) with that `sessionId`.
|
|
133
|
+
3. Your backend uses the **vault API key only on the server** to mint a short-lived **wax key** from the vault, then returns `{ waxKey }` to the browser.
|
|
134
|
+
4. The hidden tokenizer iframe sends **`X-Wax-Key`** (and related headers) to the vault — **never `X-API-Key`**.
|
|
135
|
+
|
|
136
|
+
### Vault mint contract (your backend → vault)
|
|
137
|
+
|
|
138
|
+
Your server calls the vault (the SDK’s `Ozura.mintWaxKey` does this for you):
|
|
139
|
+
|
|
140
|
+
| | |
|
|
141
|
+
|---|---|
|
|
142
|
+
| **Method / URL** | `POST {vaultBaseUrl}/internal/wax-session` |
|
|
143
|
+
| **Auth** | `X-API-Key: <vault API key>` (server only) |
|
|
144
|
+
| **Body** | `{ "checkout_session_id": "<sessionId>" }` — optional; correlates with the SDK session. `{}` is valid. |
|
|
145
|
+
| **Success** | HTTP **201** · `{ "data": { "wax_key": "<uuid>", "expires_in_seconds": 1800 } }` (TTL is typically 30 minutes) |
|
|
146
|
+
| **Errors** | JSON such as `{ "message", "error_code" }` — treat like any API error |
|
|
147
|
+
|
|
148
|
+
If your vault hostname differs from the default used by published iframe builds, pass **`vaultUrl`** on `Ozura` so mint/revoke hit the correct host.
|
|
149
|
+
|
|
150
|
+
### One-line handlers (`@ozura/elements/server`)
|
|
151
|
+
|
|
152
|
+
Both helpers accept **`sessionId`** or **`tokenizationSessionId`** in the JSON body. They respond with **`{ waxKey }`** on success.
|
|
153
|
+
|
|
154
|
+
**Next.js App Router** (or any runtime with `Request` / `Response`):
|
|
155
|
+
|
|
156
|
+
```ts
|
|
157
|
+
import { Ozura, createMintWaxHandler } from '@ozura/elements/server';
|
|
158
|
+
|
|
159
|
+
const ozura = new Ozura({
|
|
160
|
+
merchantId: process.env.MERCHANT_ID!,
|
|
161
|
+
apiKey: process.env.MERCHANT_API_KEY!,
|
|
162
|
+
vaultKey: process.env.VAULT_API_KEY!,
|
|
163
|
+
// vaultUrl: process.env.VAULT_URL, // optional override
|
|
164
|
+
});
|
|
165
|
+
|
|
166
|
+
export const POST = createMintWaxHandler(ozura);
|
|
167
|
+
```
|
|
168
|
+
|
|
169
|
+
**Express** (register JSON body parsing **before** the middleware):
|
|
170
|
+
|
|
171
|
+
```ts
|
|
172
|
+
import express from 'express';
|
|
173
|
+
import { Ozura, createMintWaxMiddleware } from '@ozura/elements/server';
|
|
174
|
+
|
|
175
|
+
const app = express();
|
|
176
|
+
const ozura = new Ozura({
|
|
177
|
+
merchantId: process.env.MERCHANT_ID!,
|
|
178
|
+
apiKey: process.env.MERCHANT_API_KEY!,
|
|
179
|
+
vaultKey: process.env.VAULT_API_KEY!,
|
|
180
|
+
});
|
|
181
|
+
|
|
182
|
+
app.use(express.json());
|
|
183
|
+
app.post('/api/mint-wax', createMintWaxMiddleware(ozura));
|
|
184
|
+
```
|
|
185
|
+
|
|
186
|
+
### Manual route
|
|
187
|
+
|
|
188
|
+
Use this if you need to persist `waxKey` server-side for later revocation:
|
|
189
|
+
|
|
190
|
+
```ts
|
|
191
|
+
app.post('/api/mint-wax', async (req, res) => {
|
|
192
|
+
const sessionId = req.body?.sessionId ?? req.body?.tokenizationSessionId;
|
|
193
|
+
const { waxKey, expiresInSeconds } = await ozura.mintWaxKey(
|
|
194
|
+
typeof sessionId === 'string' && sessionId
|
|
195
|
+
? { tokenizationSessionId: sessionId }
|
|
196
|
+
: {},
|
|
197
|
+
);
|
|
198
|
+
// await saveWaxForSession(sessionId, waxKey);
|
|
199
|
+
res.json({ waxKey });
|
|
200
|
+
});
|
|
201
|
+
```
|
|
202
|
+
|
|
203
|
+
`mintWaxKey` throws **`OzuraError`** on failure (vault 4xx/5xx). The one-line handlers catch that and respond with **`{ error: string }`**: HTTP status is the vault status when ≥ 400, otherwise **502** (e.g. network failure).
|
|
204
|
+
|
|
205
|
+
### Browser: handle mint failures
|
|
206
|
+
|
|
207
|
+
Check the response from your mint endpoint before calling `createToken`:
|
|
208
|
+
|
|
209
|
+
```js
|
|
210
|
+
fetchWaxKey: async (sessionId) => {
|
|
211
|
+
const res = await fetch('/api/mint-wax', {
|
|
212
|
+
method: 'POST',
|
|
213
|
+
headers: { 'Content-Type': 'application/json' },
|
|
214
|
+
body: JSON.stringify({ sessionId }),
|
|
215
|
+
});
|
|
216
|
+
const data = await res.json().catch(() => ({}));
|
|
217
|
+
if (!res.ok) {
|
|
218
|
+
throw new Error(typeof data.error === 'string' ? data.error : 'Could not mint wax key');
|
|
219
|
+
}
|
|
220
|
+
if (!data.waxKey) throw new Error('Mint response missing waxKey');
|
|
221
|
+
return data.waxKey;
|
|
222
|
+
},
|
|
223
|
+
```
|
|
224
|
+
|
|
225
|
+
### Optional: revoke when the checkout session ends
|
|
226
|
+
|
|
227
|
+
To shorten exposure before TTL, call **`await ozura.revokeWaxKey(waxKey)`** from your server when the session completes successfully, the user cancels, or your session times out. It is best-effort (does not throw). **Do not** revoke on card decline — the user may fix the card and call `createToken()` again without a full new `OzVault.create()`.
|
|
228
|
+
|
|
229
|
+
### Expired or consumed wax
|
|
230
|
+
|
|
231
|
+
If tokenization fails with an auth-style error after the wax key expired or was consumed, create a **new** vault instance: `await OzVault.create({ pubKey, fetchWaxKey })` so `fetchWaxKey` runs again.
|
|
232
|
+
|
|
233
|
+
### More detail
|
|
234
|
+
|
|
235
|
+
[WAX_KEY_IMPLEMENTATION.md](./WAX_KEY_IMPLEMENTATION.md) covers revocation scenarios, local dev-server behaviour, and security notes in depth.
|
|
236
|
+
|
|
237
|
+
---
|
|
238
|
+
|
|
116
239
|
## API
|
|
117
240
|
|
|
118
|
-
### `
|
|
241
|
+
### `OzVault.create(options)`
|
|
242
|
+
|
|
243
|
+
Returns `Promise<OzVault>`. The static factory is the only way to create a vault — the constructor is private.
|
|
119
244
|
|
|
120
245
|
| Option | Type | Default | Description |
|
|
121
246
|
|---|---|---|---|
|
|
122
|
-
| `apiKey` | `string` | required | Your Ozura vault API key |
|
|
123
247
|
| `options.pubKey` | `string` | required | System pub key for the tokenize endpoint. Obtain from Ozura admin. |
|
|
124
|
-
| `options.
|
|
248
|
+
| `options.fetchWaxKey` | `(sessionId: string) => Promise<string>` | required | Called once during `create()`. Receives an SDK-generated session UUID; your implementation passes it to your backend, which mints a session-bound wax key from the vault using your vault secret. Returns the wax key string. |
|
|
125
249
|
| `options.frameBaseUrl` | `string` | `https://elements.ozura.com` | Where iframe assets are served from |
|
|
250
|
+
| `options.fonts` | `FontSource[]` | `[]` | Custom fonts to inject into element iframes |
|
|
251
|
+
| `options.appearance` | `ElementStyleConfig` | — | Default style applied to all created elements |
|
|
252
|
+
| `options.onLoadError` | `() => void` | — | Called if the tokenizer iframe fails to load within `loadTimeoutMs` |
|
|
253
|
+
| `options.loadTimeoutMs` | `number` | `10000` | Timeout in ms before `onLoadError` fires |
|
|
254
|
+
|
|
255
|
+
Implement **`/api/mint-wax`** on your server using `@ozura/elements/server` — see [Wax keys (merchant integration)](#wax-keys-merchant-integration) for Next.js, Express, manual mint, errors, and optional revocation.
|
|
126
256
|
|
|
127
257
|
### `vault.createElement(type, options?)`
|
|
128
258
|
|
|
@@ -235,6 +365,23 @@ Updates `style`, `placeholder`, or `disabled` on a mounted element without remou
|
|
|
235
365
|
|
|
236
366
|
---
|
|
237
367
|
|
|
368
|
+
## Server SDK (`@ozura/elements/server`)
|
|
369
|
+
|
|
370
|
+
Import `Ozura` and optional wax helpers from `@ozura/elements/server`:
|
|
371
|
+
|
|
372
|
+
| Export | Role |
|
|
373
|
+
|--------|------|
|
|
374
|
+
| `new Ozura({ merchantId, apiKey, vaultKey, apiUrl?, vaultUrl?, … })` | Pay API (`cardSale`, `listTransactions`) and vault wax calls |
|
|
375
|
+
| `ozura.mintWaxKey({ tokenizationSessionId? })` | `POST /internal/wax-session` — implement or use helpers below |
|
|
376
|
+
| `ozura.revokeWaxKey(waxKey)` | Best-effort revoke when the checkout session ends |
|
|
377
|
+
| `createMintWaxHandler(ozura)` | Fetch API handler (Next.js App Router, Workers, Edge) → `{ waxKey }` |
|
|
378
|
+
| `createMintWaxMiddleware(ozura)` | Express / Connect middleware → `{ waxKey }` |
|
|
379
|
+
| `getClientIp(req)` | Helper for `cardSale` client IP |
|
|
380
|
+
|
|
381
|
+
See [Wax keys (merchant integration)](#wax-keys-merchant-integration) in this README for vault contract, examples, and client error handling. Extra depth (dev server, threat notes): [WAX_KEY_IMPLEMENTATION.md](./WAX_KEY_IMPLEMENTATION.md).
|
|
382
|
+
|
|
383
|
+
---
|
|
384
|
+
|
|
238
385
|
## React
|
|
239
386
|
|
|
240
387
|
```bash
|
|
@@ -336,8 +483,15 @@ function CheckoutForm() {
|
|
|
336
483
|
export default function App() {
|
|
337
484
|
return (
|
|
338
485
|
<OzElements
|
|
339
|
-
apiKey="your_vault_api_key"
|
|
340
486
|
pubKey="your_pub_key"
|
|
487
|
+
fetchWaxKey={async (sessionId) => {
|
|
488
|
+
const { waxKey } = await fetch('/api/mint-wax', {
|
|
489
|
+
method: 'POST',
|
|
490
|
+
headers: { 'Content-Type': 'application/json' },
|
|
491
|
+
body: JSON.stringify({ sessionId }),
|
|
492
|
+
}).then(r => r.json());
|
|
493
|
+
return waxKey;
|
|
494
|
+
}}
|
|
341
495
|
frameBaseUrl="https://elements.ozura.com"
|
|
342
496
|
>
|
|
343
497
|
<CheckoutForm />
|
|
@@ -350,9 +504,13 @@ export default function App() {
|
|
|
350
504
|
|
|
351
505
|
| Prop | Type | Description |
|
|
352
506
|
|---|---|---|
|
|
353
|
-
| `
|
|
354
|
-
| `
|
|
507
|
+
| `fetchWaxKey` | `(sessionId: string) => Promise<string>` | Called once on mount. Pass the received `sessionId` to your backend; your backend mints a wax key from the vault and returns it. |
|
|
508
|
+
| `pubKey` | `string` | System pub key for the tokenize endpoint |
|
|
355
509
|
| `frameBaseUrl` | `string?` | Where iframe assets are hosted |
|
|
510
|
+
| `fonts` | `FontSource[]?` | Custom fonts to inject into element iframes |
|
|
511
|
+
| `onLoadError` | `() => void?` | Called if vault init fails (fetchWaxKey error or tokenizer iframe timeout) |
|
|
512
|
+
| `loadTimeoutMs` | `number?` | Timeout before `onLoadError` fires (default: 10 000) |
|
|
513
|
+
| `appearance` | `Appearance?` | Global theme / variable overrides |
|
|
356
514
|
|
|
357
515
|
### `useOzElements()` return
|
|
358
516
|
|
|
@@ -382,7 +540,7 @@ If you're an OzuraPay merchant and want to charge cards through Ozura's processo
|
|
|
382
540
|
|
|
383
541
|
| Credential | Where it goes |
|
|
384
542
|
|-----------|---------------|
|
|
385
|
-
| Vault API key |
|
|
543
|
+
| Vault API key | **Server only.** Browser calls `fetchWaxKey` → your backend mints a wax key with this secret; never send the secret in the browser. Pay API `cardSale` also sends it as `vault-api-key` from the server. |
|
|
386
544
|
| Pay API key | Backend only: `x-api-key` header |
|
|
387
545
|
| Merchant ID | Backend only: `merchantId` in request body |
|
|
388
546
|
|
|
@@ -393,8 +551,16 @@ For the full credential setup, billing form field requirements, validation rules
|
|
|
393
551
|
```js
|
|
394
552
|
import { OzVault, normalizeCardSaleError } from '@ozura/elements';
|
|
395
553
|
|
|
396
|
-
const vault =
|
|
554
|
+
const vault = await OzVault.create({
|
|
397
555
|
pubKey: 'your_pub_key',
|
|
556
|
+
fetchWaxKey: async (sessionId) => {
|
|
557
|
+
const { waxKey } = await fetch('/api/mint-wax', {
|
|
558
|
+
method: 'POST',
|
|
559
|
+
headers: { 'Content-Type': 'application/json' },
|
|
560
|
+
body: JSON.stringify({ sessionId }),
|
|
561
|
+
}).then(r => r.json());
|
|
562
|
+
return waxKey;
|
|
563
|
+
},
|
|
398
564
|
});
|
|
399
565
|
|
|
400
566
|
// … mount card elements …
|
|
@@ -654,8 +820,8 @@ The test suite covers: Luhn algorithm, card brand detection, card number formatt
|
|
|
654
820
|
```bash
|
|
655
821
|
npm install
|
|
656
822
|
npm run dev # build + serve demo at http://localhost:4242/demo/index.html
|
|
657
|
-
npm run build # production build
|
|
658
823
|
npm run watch # rebuild on save
|
|
824
|
+
npm run build # production build
|
|
659
825
|
```
|
|
660
826
|
|
|
661
827
|
Build outputs in `dist/`:
|
|
@@ -668,8 +834,9 @@ Build outputs in `dist/`:
|
|
|
668
834
|
| `frame/tokenizer-frame.js` | IIFE | loaded by tokenizer iframe |
|
|
669
835
|
| `react/index.esm.js` | ESM | `import ... from '@ozura/elements/react'` |
|
|
670
836
|
| `react/index.cjs.js` | CJS | `require('@ozura/elements/react')` |
|
|
837
|
+
| `server/index.*.js` | ESM + CJS | `import { Ozura, createMintWaxHandler } from '@ozura/elements/server'` |
|
|
671
838
|
|
|
672
|
-
|
|
839
|
+
Maintainer notes: [DEVELOPMENT.md](./DEVELOPMENT.md). Merchants: [Wax keys (merchant integration)](#wax-keys-merchant-integration) in this file; supplementary detail in [WAX_KEY_IMPLEMENTATION.md](./WAX_KEY_IMPLEMENTATION.md).
|
|
673
840
|
|
|
674
841
|
---
|
|
675
842
|
|
|
@@ -67,7 +67,8 @@ var _OzTokenizerFrame = (function (exports) {
|
|
|
67
67
|
this.pending.set(msg.requestId, {
|
|
68
68
|
kind: 'card',
|
|
69
69
|
requestId: msg.requestId,
|
|
70
|
-
|
|
70
|
+
waxKey: msg.waxKey || '',
|
|
71
|
+
tokenizationSessionId: msg.tokenizationSessionId || '',
|
|
71
72
|
pubKey: msg.pubKey || '',
|
|
72
73
|
firstName: msg.firstName || '',
|
|
73
74
|
lastName: msg.lastName || '',
|
|
@@ -83,7 +84,8 @@ var _OzTokenizerFrame = (function (exports) {
|
|
|
83
84
|
this.pendingBank.set(msg.requestId, {
|
|
84
85
|
kind: 'bank',
|
|
85
86
|
requestId: msg.requestId,
|
|
86
|
-
|
|
87
|
+
waxKey: msg.waxKey || '',
|
|
88
|
+
tokenizationSessionId: msg.tokenizationSessionId || '',
|
|
87
89
|
pubKey: msg.pubKey || '',
|
|
88
90
|
firstName: msg.firstName || '',
|
|
89
91
|
lastName: msg.lastName || '',
|
|
@@ -141,7 +143,7 @@ var _OzTokenizerFrame = (function (exports) {
|
|
|
141
143
|
* `token` string, or `null` if an error was already reported via
|
|
142
144
|
* postMessage to `target`.
|
|
143
145
|
*/
|
|
144
|
-
async postToVault(requestId, apiUrl,
|
|
146
|
+
async postToVault(requestId, apiUrl, waxKey, pubKey, body, target, logLabel, tokenizationSessionId) {
|
|
145
147
|
var _a, _b;
|
|
146
148
|
if (!isAllowedVaultOrigin(apiUrl)) {
|
|
147
149
|
let error;
|
|
@@ -156,15 +158,39 @@ var _OzTokenizerFrame = (function (exports) {
|
|
|
156
158
|
window.parent.postMessage({ __oz: true, vaultId: this.vaultId, type: 'OZ_TOKEN_ERROR', requestId, error, errorCode: 'config' }, target);
|
|
157
159
|
return null;
|
|
158
160
|
}
|
|
161
|
+
if (!waxKey) {
|
|
162
|
+
const error = 'Wax key is missing. Ensure OzVault.create() completed successfully before calling createToken().';
|
|
163
|
+
console.error(`[OzTokenizer] ${error}`);
|
|
164
|
+
window.parent.postMessage({ __oz: true, vaultId: this.vaultId, type: 'OZ_TOKEN_ERROR', requestId, error, errorCode: 'config' }, target);
|
|
165
|
+
return null;
|
|
166
|
+
}
|
|
159
167
|
try {
|
|
160
168
|
const headers = {
|
|
161
169
|
'Content-Type': 'application/json',
|
|
162
|
-
'X-
|
|
170
|
+
'X-Wax-Key': waxKey,
|
|
163
171
|
'X-Request-ID': requestId,
|
|
164
172
|
};
|
|
165
173
|
if (pubKey) {
|
|
166
174
|
headers['X-Pub-Key'] = pubKey;
|
|
167
175
|
}
|
|
176
|
+
if (tokenizationSessionId) {
|
|
177
|
+
headers['X-Tokenization-Session-Id'] = tokenizationSessionId;
|
|
178
|
+
}
|
|
179
|
+
// ── Security enforcement ──────────────────────────────────────────────
|
|
180
|
+
// x-api-key is a merchant secret and must NEVER be sent to the vault
|
|
181
|
+
// tokenize endpoint. The vault authenticates tokenize requests via
|
|
182
|
+
// X-Wax-Key (session-scoped) only. Any accidental inclusion here is a
|
|
183
|
+
// configuration bug that must surface immediately, not silently degrade.
|
|
184
|
+
const forbiddenKey = Object.keys(headers).find(k => k.toLowerCase() === 'x-api-key');
|
|
185
|
+
if (forbiddenKey) {
|
|
186
|
+
const msg = `[OzTokenizer] SECURITY: 'x-api-key' must not be sent to the vault ` +
|
|
187
|
+
`tokenize endpoint (found as '${forbiddenKey}'). ` +
|
|
188
|
+
`Vault tokenize authenticates via X-Wax-Key only.`;
|
|
189
|
+
console.error(msg);
|
|
190
|
+
window.parent.postMessage({ __oz: true, vaultId: this.vaultId, type: 'OZ_TOKEN_ERROR', requestId, error: msg, errorCode: 'config' }, target);
|
|
191
|
+
return null;
|
|
192
|
+
}
|
|
193
|
+
// ─────────────────────────────────────────────────────────────────────
|
|
168
194
|
const data = await this.fetchWithRetry(`${apiUrl}/tokenize`, {
|
|
169
195
|
method: 'POST',
|
|
170
196
|
headers,
|
|
@@ -190,7 +216,7 @@ var _OzTokenizerFrame = (function (exports) {
|
|
|
190
216
|
}
|
|
191
217
|
async tokenize(session) {
|
|
192
218
|
var _a, _b, _c, _d;
|
|
193
|
-
const { requestId,
|
|
219
|
+
const { requestId, waxKey, tokenizationSessionId, pubKey, firstName, lastName, values, cardMeta, hostOrigin } = session;
|
|
194
220
|
const target = hostOrigin || window.location.origin;
|
|
195
221
|
const cardNumber = values.get('cardNumber') || '';
|
|
196
222
|
const cvv = values.get('cvv') || '';
|
|
@@ -213,7 +239,7 @@ var _OzTokenizerFrame = (function (exports) {
|
|
|
213
239
|
},
|
|
214
240
|
},
|
|
215
241
|
};
|
|
216
|
-
const data = await this.postToVault(requestId, VAULT_API_URL,
|
|
242
|
+
const data = await this.postToVault(requestId, VAULT_API_URL, waxKey, pubKey, body, target, 'card', tokenizationSessionId);
|
|
217
243
|
if (!data)
|
|
218
244
|
return;
|
|
219
245
|
const { token } = data;
|
|
@@ -230,7 +256,7 @@ var _OzTokenizerFrame = (function (exports) {
|
|
|
230
256
|
window.parent.postMessage(Object.assign({ __oz: true, vaultId: this.vaultId, type: 'OZ_TOKEN_RESULT', requestId, token, cvcSession }, (hasFullCardMeta ? { card: cardMeta } : {})), target);
|
|
231
257
|
}
|
|
232
258
|
async tokenizeBank(session) {
|
|
233
|
-
const { requestId,
|
|
259
|
+
const { requestId, waxKey, tokenizationSessionId, pubKey, firstName, lastName, values, bankMeta, hostOrigin } = session;
|
|
234
260
|
const target = hostOrigin || window.location.origin;
|
|
235
261
|
const body = {
|
|
236
262
|
type: 'bank',
|
|
@@ -246,7 +272,7 @@ var _OzTokenizerFrame = (function (exports) {
|
|
|
246
272
|
},
|
|
247
273
|
},
|
|
248
274
|
};
|
|
249
|
-
const data = await this.postToVault(requestId, VAULT_API_URL,
|
|
275
|
+
const data = await this.postToVault(requestId, VAULT_API_URL, waxKey, pubKey, body, target, 'bank', tokenizationSessionId);
|
|
250
276
|
if (!data)
|
|
251
277
|
return;
|
|
252
278
|
const { token } = data;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tokenizer-frame.js","sources":["../../src/frame/tokenizerFrame.ts"],"sourcesContent":[null],"names":[],"mappings":";;;IAAA;;;;;;;;;;;IAWG;IAIH,MAAM,aAAa,GAAG,wEAAiB;IAEvC;;;;;;;IAOG;IACG,SAAU,oBAAoB,CAAC,MAAc,EAAA;IACjD,IAAA,IAAI,MAAW;IACf,IAAA,IAAI;IACF,QAAA,MAAM,GAAG,IAAI,GAAG,CAAC,MAAM,CAAC;QAC1B;IAAE,IAAA,OAAA,EAAA,EAAM;IACN,QAAA,OAAO,KAAK;QACd;IAEA,IAAA,IAAI;IACF,QAAA,MAAM,OAAO,GAAG,IAAI,GAAG,CAAC,aAAa,CAAC;IACtC,QAAA,OAAO,MAAM,CAAC,MAAM,KAAK,OAAO,CAAC,MAAM;QACzC;IAAE,IAAA,OAAA,EAAA,EAAM;IACN,QAAA,OAAO,KAAK;QACd;IACF;IAmCA,MAAM,cAAc,CAAA;IAMlB,IAAA,WAAA,GAAA;YAJQ,IAAA,CAAA,UAAU,GAAG,EAAE;IACf,QAAA,IAAA,CAAA,OAAO,GAAG,IAAI,GAAG,EAA0B;IAC3C,QAAA,IAAA,CAAA,WAAW,GAAG,IAAI,GAAG,EAA8B;IAGzD,QAAA,MAAM,CAAC,GAAG,IAAI,eAAe,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;YACrD,IAAI,CAAC,OAAO,GAAG,CAAC,CAAC,GAAG,CAAC,SAAS,CAAC,IAAI,EAAE;YACrC,MAAM,OAAO,GAAG,CAAC,CAAC,GAAG,CAAC,cAAc,CAAC;IACrC,QAAA,IAAI,OAAO;IAAE,YAAA,IAAI,CAAC,UAAU,GAAG,OAAO;IAEtC,QAAA,MAAM,CAAC,gBAAgB,CAAC,SAAS,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAE7D,QAAA,MAAM,CAAC,MAAM,CAAC,WAAW,CACvB,EAAE,IAAI,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,CAAC,OAAO,EAAE,IAAI,EAAE,gBAAgB,EAAE,OAAO,EAAE,eAAe,EAAE,EACvF,IAAI,CAAC,UAAU,IAAI,MAAM,CAAC,QAAQ,CAAC,MAAM,CAC1C;QACH;IAEQ,IAAA,SAAS,CAAC,KAAmB,EAAA;IACnC,QAAA,MAAM,GAAG,GAAG,KAAK,CAAC,IAAiB;IACnC,QAAA,IAAI,CAAC,GAAG,IAAI,GAAG,CAAC,IAAI,KAAK,IAAI,IAAI,GAAG,CAAC,OAAO,KAAK,IAAI,CAAC,OAAO;gBAAE;IAE/D,QAAA,QAAQ,GAAG,CAAC,IAAI;IACd,YAAA,KAAK,SAAS;IACZ,gBAAA,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE;IACpB,oBAAA,IAAI,CAAC,UAAU,GAAG,KAAK,CAAC,MAAM;oBAChC;oBACA;IAEF,YAAA,KAAK,aAAa;oBAChB,IAAI,CAAC,IAAI,CAAC,UAAU,IAAI,KAAK,CAAC,MAAM,KAAK,IAAI,CAAC,UAAU;wBAAE;oBAC1D,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,SAAmB,EAAE;IACxC,oBAAA,IAAI,EAAE,MAAM;wBACZ,SAAS,EAAE,GAAG,CAAC,SAAmB;wBAClC,MAAM,EAAE,GAAG,CAAC,MAAgB;IAC5B,oBAAA,MAAM,EAAG,GAAG,CAAC,MAAiB,IAAI,EAAE;IACpC,oBAAA,SAAS,EAAG,GAAG,CAAC,SAAoB,IAAI,EAAE;IAC1C,oBAAA,QAAQ,EAAG,GAAG,CAAC,QAAmB,IAAI,EAAE;IACxC,oBAAA,UAAU,EAAG,GAAG,CAAC,UAAqB,IAAI,CAAC;wBAC3C,MAAM,EAAE,IAAI,GAAG,EAAE;IACjB,oBAAA,QAAQ,EAAE,EAAE;wBACZ,UAAU,EAAE,KAAK,CAAC,MAAM;IACzB,iBAAA,CAAC;oBACF;IAEF,YAAA,KAAK,kBAAkB;oBACrB,IAAI,CAAC,IAAI,CAAC,UAAU,IAAI,KAAK,CAAC,MAAM,KAAK,IAAI,CAAC,UAAU;wBAAE;oBAC1D,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,GAAG,CAAC,SAAmB,EAAE;IAC5C,oBAAA,IAAI,EAAE,MAAM;wBACZ,SAAS,EAAE,GAAG,CAAC,SAAmB;wBAClC,MAAM,EAAE,GAAG,CAAC,MAAgB;IAC5B,oBAAA,MAAM,EAAG,GAAG,CAAC,MAAiB,IAAI,EAAE;IACpC,oBAAA,SAAS,EAAG,GAAG,CAAC,SAAoB,IAAI,EAAE;IAC1C,oBAAA,QAAQ,EAAG,GAAG,CAAC,QAAmB,IAAI,EAAE;IACxC,oBAAA,UAAU,EAAG,GAAG,CAAC,UAAqB,IAAI,CAAC;wBAC3C,MAAM,EAAE,IAAI,GAAG,EAAE;IACjB,oBAAA,QAAQ,EAAE,EAAE;wBACZ,UAAU,EAAE,KAAK,CAAC,MAAM;IACzB,iBAAA,CAAC;oBACF;gBAEF,KAAK,gBAAgB,EAAE;;oBAErB,IAAI,KAAK,CAAC,MAAM,KAAK,QAAQ,CAAC,MAAM,EAAE;wBACpC,OAAO,CAAC,IAAI,CAAC,0DAA0D,EAAE,KAAK,CAAC,MAAM,CAAC;wBACtF;oBACF;;IAGA,gBAAA,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,SAAmB,CAAC;oBACzD,IAAI,OAAO,EAAE;IACX,oBAAA,OAAO,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,SAAmB,EAAE,GAAG,CAAC,KAAe,CAAC;wBAEhE,IAAI,GAAG,CAAC,KAAK;4BAAE,OAAO,CAAC,QAAQ,CAAC,KAAK,GAAG,GAAG,CAAC,KAAe;wBAC3D,IAAI,GAAG,CAAC,KAAK;4BAAE,OAAO,CAAC,QAAQ,CAAC,KAAK,GAAG,GAAG,CAAC,KAAe;wBAC3D,IAAI,GAAG,CAAC,QAAQ;4BAAE,OAAO,CAAC,QAAQ,CAAC,QAAQ,GAAG,GAAG,CAAC,QAAkB;wBACpE,IAAI,GAAG,CAAC,OAAO;4BAAE,OAAO,CAAC,QAAQ,CAAC,OAAO,GAAG,GAAG,CAAC,OAAiB;wBAEjE,IAAI,OAAO,CAAC,MAAM,CAAC,IAAI,IAAI,OAAO,CAAC,UAAU,EAAE;4BAC7C,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC;IACtC,wBAAA,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC;wBACxB;oBACF;;IAGA,gBAAA,MAAM,WAAW,GAAG,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,GAAG,CAAC,SAAmB,CAAC;oBACjE,IAAI,WAAW,EAAE;IACf,oBAAA,WAAW,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,SAAmB,EAAE,GAAG,CAAC,KAAe,CAAC;wBAEpE,IAAI,GAAG,CAAC,SAAS,KAAK,eAAe,IAAI,GAAG,CAAC,KAAK;4BAAE,WAAW,CAAC,QAAQ,CAAC,KAAK,GAAG,GAAG,CAAC,KAAe;IACpG,oBAAA,IAAI,GAAG,CAAC,SAAS,KAAK,eAAe;4BAAE,WAAW,CAAC,QAAQ,CAAC,aAAa,GAAG,GAAG,CAAC,KAAe;wBAE/F,IAAI,WAAW,CAAC,MAAM,CAAC,IAAI,IAAI,WAAW,CAAC,UAAU,EAAE;4BACrD,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,WAAW,CAAC,SAAS,CAAC;IAC9C,wBAAA,IAAI,CAAC,YAAY,CAAC,WAAW,CAAC;wBAChC;oBACF;oBACA;gBACF;;QAEJ;IAEA;;;;;;;IAOG;IACK,IAAA,MAAM,WAAW,CACvB,SAAiB,EACjB,MAAc,EACd,MAAc,EACd,MAAc,EACd,IAA6B,EAC7B,MAAc,EACd,QAAgB,EAAA;;IAEhB,QAAA,IAAI,CAAC,oBAAoB,CAAC,MAAM,CAAC,EAAE;IACjC,YAAA,IAAI,KAAa;IACjB,YAAA,IAAI;IACF,gBAAA,IAAI,GAAG,CAAC,MAAM,CAAC;oBACf,KAAK,GAAG,iCAAiC;gBAC3C;IAAE,YAAA,OAAA,EAAA,EAAM;oBACN,KAAK,GAAG,wBAAwB;gBAClC;gBACA,OAAO,CAAC,KAAK,CAAC,CAAA,sBAAA,EAAyB,QAAQ,CAAA,yBAAA,CAA2B,EAAE,MAAM,CAAC;IACnF,YAAA,MAAM,CAAC,MAAM,CAAC,WAAW,CACvB,EAAE,IAAI,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,CAAC,OAAO,EAAE,IAAI,EAAE,gBAAgB,EAAE,SAAS,EAAE,KAAK,EAAE,SAAS,EAAE,QAAQ,EAAE,EACpG,MAAM,CACP;IACD,YAAA,OAAO,IAAI;YACb;IAEA,QAAA,IAAI;IACF,YAAA,MAAM,OAAO,GAA2B;IACtC,gBAAA,cAAc,EAAE,kBAAkB;IAClC,gBAAA,WAAW,EAAE,MAAM;IACnB,gBAAA,cAAc,EAAE,SAAS;iBAC1B;gBACD,IAAI,MAAM,EAAE;IACV,gBAAA,OAAO,CAAC,WAAW,CAAC,GAAG,MAAM;gBAC/B;gBAEA,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,cAAc,CAAC,CAAA,EAAG,MAAM,CAAA,SAAA,CAAW,EAAE;IAC3D,gBAAA,MAAM,EAAE,MAAM;oBACd,OAAO;IACP,gBAAA,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC;IAC3B,aAAA,CAAC;gBAEF,MAAM,KAAK,GAAG,MAAM,CAAC,CAAA,EAAA,GAAA,MAAA,IAAI,KAAA,IAAA,IAAJ,IAAI,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAJ,IAAI,CAAE,KAAK,MAAA,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,EAAA,GAAI,IAAI,KAAA,IAAA,IAAJ,IAAI,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAJ,IAAI,CAAE,EAAE,MAAA,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,EAAA,GAAI,EAAE,CAAC;gBACnD,IAAI,CAAC,KAAK,EAAE;IACV,gBAAA,MAAM,CAAC,MAAM,CAAC,WAAW,CACvB;IACE,oBAAA,IAAI,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,CAAC,OAAO,EAAE,IAAI,EAAE,gBAAgB,EAAE,SAAS;IACpE,oBAAA,KAAK,EAAE,4EAA4E;IACnF,oBAAA,SAAS,EAAE,QAAQ;qBACpB,EACD,MAAM,CACP;IACD,gBAAA,OAAO,IAAI;gBACb;gBAEA,OAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,EAAA,EAAY,IAAI,CAAA,EAAA,EAAE,KAAK,EAAA,CAAA;YACzB;YAAE,OAAO,GAAY,EAAE;IACrB,YAAA,MAAM,OAAO,GAAG,GAAG,YAAY,KAAK,GAAG,GAAG,CAAC,OAAO,GAAG,CAAA,EAAG,QAAQ,sBAAsB;IACtF,YAAA,MAAM,SAAS,GAAG,CAAC,GAAG,YAAY,KAAK,IAAK,GAAsC,CAAC,SAAS,KAAK,SAAS;IAC1G,YAAA,MAAM,CAAC,MAAM,CAAC,WAAW,CACvB,EAAE,IAAI,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,CAAC,OAAO,EAAE,IAAI,EAAE,gBAAgB,EAAE,SAAS,EAAE,KAAK,EAAE,OAAO,EAAE,SAAS,EAAE,EACnG,MAAM,CACP;IACD,YAAA,OAAO,IAAI;YACb;QACF;QAEQ,MAAM,QAAQ,CAAC,OAAuB,EAAA;;IAC5C,QAAA,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,UAAU,EAAE,GAAG,OAAO;YAChG,MAAM,MAAM,GAAG,UAAU,IAAI,MAAM,CAAC,QAAQ,CAAC,MAAM;YAEnD,MAAM,UAAU,GAAG,MAAM,CAAC,GAAG,CAAC,YAAY,CAAC,IAAI,EAAE;YACjD,MAAM,GAAG,GAAG,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,EAAE;IACnC,QAAA,MAAM,MAAM,GAAG,MAAM,CAAC,GAAG,CAAC,gBAAgB,CAAC,IAAI,EAAE,CAAC;YAClD,MAAM,eAAe,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC;IAC1C,QAAA,MAAM,cAAc,GAAG,CAAA,EAAA,EAAK,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAA,CAAE;IAEhD,QAAA,MAAM,IAAI,GAAG;IACX,YAAA,IAAI,EAAE,MAAM;IACZ,YAAA,IAAI,EAAE;oBACJ,UAAU;oBACV,GAAG;oBACH,eAAe;oBACf,cAAc;IACd,gBAAA,UAAU,EAAE,SAAS;IACrB,gBAAA,SAAS,EAAE,QAAQ;IACpB,aAAA;IACD,YAAA,aAAa,EAAE;IACb,gBAAA,KAAK,EAAE;IACL,oBAAA,WAAW,EAAE,EAAE,SAAS,EAAE,GAAG,EAAE,UAAU,EAAE,CAAC,EAAE,YAAY,EAAE,CAAC,EAAE;IAChE,iBAAA;IACF,aAAA;aACF;YAED,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,WAAW,CAAC,SAAS,EAAE,aAAa,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,CAAC;IACnG,QAAA,IAAI,CAAC,IAAI;gBAAE;IAEX,QAAA,MAAM,EAAE,KAAK,EAAE,GAAG,IAAI;YACtB,MAAM,UAAU,GAAG,MAAM,CACvB,CAAA,EAAA,GAAA,CAAA,EAAA,GAAA,CAAA,EAAA,GAAA,CAAA,EAAA,GAAA,IAAI,CAAC,UAAU,MAAA,IAAA,IAAA,EAAA,KAAA,MAAA,GAAA,EAAA,GACf,IAAI,CAAC,SAAS,MAAA,IAAA,IAAA,EAAA,KAAA,MAAA,GAAA,EAAA,GACd,IAAI,CAAC,eAAe,MAAA,IAAA,IAAA,EAAA,KAAA,MAAA,GAAA,EAAA,GACpB,IAAI,CAAC,cAAc,MAAA,IAAA,IAAA,EAAA,KAAA,MAAA,GAAA,EAAA,GACnB,EAAE,CACH;YAED,IAAI,CAAC,UAAU,EAAE;IACf,YAAA,MAAM,CAAC,MAAM,CAAC,WAAW,CACvB;IACE,gBAAA,IAAI,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,CAAC,OAAO,EAAE,IAAI,EAAE,gBAAgB,EAAE,SAAS;IACpE,gBAAA,KAAK,EAAE,6FAA6F;IACpG,gBAAA,SAAS,EAAE,QAAQ;iBACpB,EACD,MAAM,CACP;gBACD;YACF;IAEA,QAAA,MAAM,eAAe,GAAG,QAAQ,CAAC,KAAK,IAAI,QAAQ,CAAC,KAAK,IAAI,QAAQ,CAAC,QAAQ,IAAI,QAAQ,CAAC,OAAO;IACjG,QAAA,MAAM,CAAC,MAAM,CAAC,WAAW,CAAA,MAAA,CAAA,MAAA,CAAA,EAErB,IAAI,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,CAAC,OAAO,EAAE,IAAI,EAAE,iBAAiB,EAAE,SAAS,EAAE,KAAK,EAAE,UAAU,KACpF,eAAe,GAAG,EAAE,IAAI,EAAE,QAAQ,EAAE,GAAG,EAAE,EAAC,EAEhD,MAAM,CACP;QACH;QAEQ,MAAM,YAAY,CAAC,OAA2B,EAAA;IACpD,QAAA,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,UAAU,EAAE,GAAG,OAAO;YAChG,MAAM,MAAM,GAAG,UAAU,IAAI,MAAM,CAAC,QAAQ,CAAC,MAAM;IAEnD,QAAA,MAAM,IAAI,GAAG;IACX,YAAA,IAAI,EAAE,MAAM;IACZ,YAAA,IAAI,EAAE;oBACJ,aAAa,EAAE,MAAM,CAAC,GAAG,CAAC,eAAe,CAAC,IAAI,EAAE;oBAChD,aAAa,EAAE,MAAM,CAAC,GAAG,CAAC,eAAe,CAAC,IAAI,EAAE;IAChD,gBAAA,UAAU,EAAE,SAAS;IACrB,gBAAA,SAAS,EAAE,QAAQ;IACpB,aAAA;IACD,YAAA,aAAa,EAAE;IACb,gBAAA,KAAK,EAAE;IACL,oBAAA,cAAc,EAAE,EAAE,SAAS,EAAE,GAAG,EAAE,UAAU,EAAE,CAAC,EAAE,YAAY,EAAE,CAAC,EAAE;IACnE,iBAAA;IACF,aAAA;aACF;YAED,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,WAAW,CAAC,SAAS,EAAE,aAAa,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,CAAC;IACnG,QAAA,IAAI,CAAC,IAAI;gBAAE;IAEX,QAAA,MAAM,EAAE,KAAK,EAAE,GAAG,IAAI;IACtB,QAAA,MAAM,CAAC,MAAM,CAAC,WAAW,CAAA,MAAA,CAAA,MAAA,CAAA,EAErB,IAAI,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,CAAC,OAAO,EAAE,IAAI,EAAE,sBAAsB,EAAE,SAAS,EAAE,KAAK,EAAA,GAC7E,QAAQ,CAAC,KAAK,GAAG,EAAE,IAAI,EAAE,QAAQ,EAAE,GAAG,EAAE,EAAC,EAE/C,MAAM,CACP;QACH;QAEQ,OAAO,kBAAkB,CAAC,MAAc,EAAA;IAC9C,QAAA,IAAI,MAAM,KAAK,GAAG,IAAI,MAAM,KAAK,GAAG;IAAE,YAAA,OAAO,MAAM;IACnD,QAAA,IAAI,MAAM,IAAI,GAAG,IAAI,MAAM,GAAG,GAAG;IAAE,YAAA,OAAO,YAAY;YACtD,IAAI,MAAM,IAAI,GAAG;IAAE,YAAA,OAAO,QAAQ;IAClC,QAAA,OAAO,SAAS;QAClB;IAEA;;;;;;IAMG;QACK,MAAM,cAAc,CAAC,GAAW,EAAE,IAAiB,EAAE,OAAO,GAAG,CAAC,EAAA;IACtE,QAAA,MAAM,UAAU,GAAG,IAAI,eAAe,EAAE;IACxC,QAAA,MAAM,SAAS,GAAG,UAAU,CAAC,MAAM,UAAU,CAAC,KAAK,EAAE,EAAE,KAAM,CAAC;IAE9D,QAAA,IAAI;IACF,YAAA,MAAM,GAAG,GAAG,MAAM,KAAK,CAAC,GAAG,EAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,EAAA,EAAO,IAAI,CAAA,EAAA,EAAE,MAAM,EAAE,UAAU,CAAC,MAAM,IAAG;gBACpE,YAAY,CAAC,SAAS,CAAC;IAEvB,YAAA,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE;oBACX,MAAM,GAAG,GAAG,MAAM,GAAG,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,OAAO,EAAE,KAAK,EAAE,GAAG,CAAC,UAAU,EAAE,CAAC,CAAC;IACrE,gBAAA,MAAM,MAAM,GAAG,CAAA,GAAG,KAAA,IAAA,IAAH,GAAG,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAH,GAAG,CAAE,KAAK,KAAI,CAAA,KAAA,EAAQ,GAAG,CAAC,MAAM,EAAE;oBACjD,MAAM,IAAI,GAAG,cAAc,CAAC,kBAAkB,CAAC,GAAG,CAAC,MAAM,CAAC;oBAE1D,IAAI,GAAG,CAAC,MAAM,IAAI,GAAG,IAAI,OAAO,GAAG,CAAC,EAAE;IACpC,oBAAA,MAAM,IAAI,OAAO,CAAC,CAAC,IAAI,UAAU,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC;IAC3C,oBAAA,OAAO,IAAI,CAAC,cAAc,CAAC,GAAG,EAAE,IAAI,EAAE,OAAO,GAAG,CAAC,CAAC;oBACpD;IACA,gBAAA,MAAM,CAAC,GAAG,IAAI,KAAK,CAAC,MAAM,CAAC;IAC1B,gBAAA,CAAmC,CAAC,SAAS,GAAG,IAAI;IACrD,gBAAA,MAAM,CAAC;gBACT;IAEA,YAAA,OAAO,MAAM,GAAG,CAAC,IAAI,EAAE;YACzB;YAAE,OAAO,GAAY,EAAE;gBACrB,YAAY,CAAC,SAAS,CAAC;gBAEvB,IAAI,GAAG,YAAY,KAAK,IAAK,GAAsC,CAAC,SAAS,EAAE;IAC7E,gBAAA,MAAM,GAAG;gBACX;gBAEA,MAAM,OAAO,GAAG,GAAG,YAAY,KAAK,IAAI,GAAG,CAAC,IAAI,KAAK,YAAY;IACjE,YAAA,MAAM,cAAc,GAAG,GAAG,YAAY,SAAS;gBAC/C,IAAI,CAAC,OAAO,IAAI,cAAc,IAAI,OAAO,GAAG,CAAC,EAAE;IAC7C,gBAAA,MAAM,IAAI,OAAO,CAAC,CAAC,IAAI,UAAU,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC;IAC3C,gBAAA,OAAO,IAAI,CAAC,cAAc,CAAC,GAAG,EAAE,IAAI,EAAE,OAAO,GAAG,CAAC,CAAC;gBACpD;gBAEA,IAAI,OAAO,EAAE;IACX,gBAAA,MAAM,CAAC,GAAG,IAAI,KAAK,CAAC,mDAAmD,CAAC;IACvE,gBAAA,CAAmC,CAAC,SAAS,GAAG,SAAS;IAC1D,gBAAA,MAAM,CAAC;gBACT;gBACA,IAAI,cAAc,EAAE;oBAClB,MAAM,CAAC,GAAG,IAAI,KAAK,CAAE,GAAiB,CAAC,OAAO,IAAI,eAAe,CAAC;IACjE,gBAAA,CAAmC,CAAC,SAAS,GAAG,SAAS;IAC1D,gBAAA,MAAM,CAAC;gBACT;IACA,YAAA,MAAM,GAAG;YACX;QACF;IACD;IAED,IAAI,cAAc,EAAE;;;;;;;;;;"}
|
|
1
|
+
{"version":3,"file":"tokenizer-frame.js","sources":["../../src/frame/tokenizerFrame.ts"],"sourcesContent":[null],"names":[],"mappings":"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"}
|
package/dist/oz-elements.esm.js
CHANGED
|
@@ -729,8 +729,20 @@ const DEFAULT_FRAME_BASE_URL = "https://lively-hill-097170c0f.4.azurestaticapps.
|
|
|
729
729
|
* The main entry point for OzElements. Creates and manages iframe-based
|
|
730
730
|
* card input elements that keep raw card data isolated from the merchant page.
|
|
731
731
|
*
|
|
732
|
+
* Use the static `OzVault.create()` factory — do not call `new OzVault()` directly.
|
|
733
|
+
*
|
|
732
734
|
* @example
|
|
733
|
-
* const vault =
|
|
735
|
+
* const vault = await OzVault.create({
|
|
736
|
+
* pubKey: 'pk_live_...',
|
|
737
|
+
* fetchWaxKey: async (sessionId) => {
|
|
738
|
+
* // Call your backend — which calls ozura.mintWaxKey() from oz-elements/server
|
|
739
|
+
* const { waxKey } = await fetch('/api/mint-wax', {
|
|
740
|
+
* method: 'POST',
|
|
741
|
+
* body: JSON.stringify({ sessionId }),
|
|
742
|
+
* }).then(r => r.json());
|
|
743
|
+
* return waxKey;
|
|
744
|
+
* },
|
|
745
|
+
* });
|
|
734
746
|
* const cardNum = vault.createElement('cardNumber');
|
|
735
747
|
* cardNum.mount('#card-number');
|
|
736
748
|
* const { token, cvcSession } = await vault.createToken({
|
|
@@ -738,7 +750,12 @@ const DEFAULT_FRAME_BASE_URL = "https://lively-hill-097170c0f.4.azurestaticapps.
|
|
|
738
750
|
* });
|
|
739
751
|
*/
|
|
740
752
|
class OzVault {
|
|
741
|
-
|
|
753
|
+
/**
|
|
754
|
+
* Internal constructor — use `OzVault.create()` instead.
|
|
755
|
+
* The constructor mounts the tokenizer iframe immediately so it can start
|
|
756
|
+
* loading in parallel while `fetchWaxKey` is being awaited.
|
|
757
|
+
*/
|
|
758
|
+
constructor(options, waxKey, tokenizationSessionId) {
|
|
742
759
|
var _a, _b;
|
|
743
760
|
this.elements = new Map();
|
|
744
761
|
this.elementsByType = new Map();
|
|
@@ -754,10 +771,8 @@ class OzVault {
|
|
|
754
771
|
this._destroyed = false;
|
|
755
772
|
this._pendingMount = null;
|
|
756
773
|
this.loadErrorTimeoutId = null;
|
|
757
|
-
|
|
758
|
-
|
|
759
|
-
}
|
|
760
|
-
this.apiKey = apiKey;
|
|
774
|
+
this.waxKey = waxKey;
|
|
775
|
+
this.tokenizationSessionId = tokenizationSessionId;
|
|
761
776
|
this.pubKey = options.pubKey;
|
|
762
777
|
this.frameBaseUrl = options.frameBaseUrl || DEFAULT_FRAME_BASE_URL;
|
|
763
778
|
this.frameOrigin = new URL(this.frameBaseUrl).origin;
|
|
@@ -778,6 +793,52 @@ class OzVault {
|
|
|
778
793
|
}, timeout);
|
|
779
794
|
}
|
|
780
795
|
}
|
|
796
|
+
/**
|
|
797
|
+
* Creates and returns a ready `OzVault` instance.
|
|
798
|
+
*
|
|
799
|
+
* Internally this:
|
|
800
|
+
* 1. Generates a `tokenizationSessionId` (UUID).
|
|
801
|
+
* 2. Starts loading the hidden tokenizer iframe immediately.
|
|
802
|
+
* 3. Calls `options.fetchWaxKey(tokenizationSessionId)` concurrently — your
|
|
803
|
+
* backend mints a session-bound wax key from the vault and returns it.
|
|
804
|
+
* 4. Resolves with the vault instance once the wax key is stored. The iframe
|
|
805
|
+
* has been loading the whole time, so `isReady` may already be true or
|
|
806
|
+
* will fire shortly after.
|
|
807
|
+
*
|
|
808
|
+
* The returned vault is ready to create elements immediately. `createToken()`
|
|
809
|
+
* additionally requires `vault.isReady` (tokenizer iframe loaded).
|
|
810
|
+
*
|
|
811
|
+
* @throws {OzError} if `fetchWaxKey` throws or returns an empty string.
|
|
812
|
+
*/
|
|
813
|
+
static async create(options) {
|
|
814
|
+
if (!options.pubKey || !options.pubKey.trim()) {
|
|
815
|
+
throw new OzError('pubKey is required in options. Obtain your public key from the Ozura admin.');
|
|
816
|
+
}
|
|
817
|
+
if (typeof options.fetchWaxKey !== 'function') {
|
|
818
|
+
throw new OzError('fetchWaxKey must be a function. See OzVault.create() docs for the expected signature.');
|
|
819
|
+
}
|
|
820
|
+
const tokenizationSessionId = crypto.randomUUID();
|
|
821
|
+
// Construct the vault immediately — this mounts the tokenizer iframe so it
|
|
822
|
+
// starts loading while fetchWaxKey is in flight. The waxKey field starts
|
|
823
|
+
// empty and is set below before create() returns.
|
|
824
|
+
const vault = new OzVault(options, '', tokenizationSessionId);
|
|
825
|
+
let waxKey;
|
|
826
|
+
try {
|
|
827
|
+
waxKey = await options.fetchWaxKey(tokenizationSessionId);
|
|
828
|
+
}
|
|
829
|
+
catch (err) {
|
|
830
|
+
vault.destroy();
|
|
831
|
+
const msg = err instanceof Error ? err.message : 'Unknown error';
|
|
832
|
+
throw new OzError(`fetchWaxKey threw an error: ${msg}`);
|
|
833
|
+
}
|
|
834
|
+
if (!waxKey || !waxKey.trim()) {
|
|
835
|
+
vault.destroy();
|
|
836
|
+
throw new OzError('fetchWaxKey must return a non-empty wax key string. Check your mint endpoint.');
|
|
837
|
+
}
|
|
838
|
+
// Static methods can access private fields of instances of the same class.
|
|
839
|
+
vault.waxKey = waxKey;
|
|
840
|
+
return vault;
|
|
841
|
+
}
|
|
781
842
|
/**
|
|
782
843
|
* True once the hidden tokenizer iframe has loaded and signalled ready.
|
|
783
844
|
* Use this to gate the pay button when building custom UIs without React.
|
|
@@ -818,7 +879,7 @@ class OzVault {
|
|
|
818
879
|
}
|
|
819
880
|
createElementInto(typeMap, type, options) {
|
|
820
881
|
if (this._destroyed) {
|
|
821
|
-
throw new OzError('Cannot create elements on a destroyed vault.
|
|
882
|
+
throw new OzError('Cannot create elements on a destroyed vault. Call await OzVault.create() to get a new instance.');
|
|
822
883
|
}
|
|
823
884
|
const existing = typeMap.get(type);
|
|
824
885
|
if (existing) {
|
|
@@ -850,7 +911,7 @@ class OzVault {
|
|
|
850
911
|
async createBankToken(options) {
|
|
851
912
|
var _a, _b;
|
|
852
913
|
if (this._destroyed) {
|
|
853
|
-
throw new OzError('Cannot tokenize on a destroyed vault.
|
|
914
|
+
throw new OzError('Cannot tokenize on a destroyed vault. Call await OzVault.create() to get a new instance.');
|
|
854
915
|
}
|
|
855
916
|
if (!this.tokenizerReady) {
|
|
856
917
|
throw new OzError('Vault not ready. Ensure the page is fully loaded before calling createBankToken.');
|
|
@@ -897,7 +958,8 @@ class OzVault {
|
|
|
897
958
|
this.sendToTokenizer({
|
|
898
959
|
type: 'OZ_BANK_TOKENIZE',
|
|
899
960
|
requestId,
|
|
900
|
-
|
|
961
|
+
waxKey: this.waxKey,
|
|
962
|
+
tokenizationSessionId: this.tokenizationSessionId,
|
|
901
963
|
pubKey: this.pubKey,
|
|
902
964
|
firstName: options.firstName.trim(),
|
|
903
965
|
lastName: options.lastName.trim(),
|
|
@@ -922,7 +984,7 @@ class OzVault {
|
|
|
922
984
|
async createToken(options = {}) {
|
|
923
985
|
var _a, _b;
|
|
924
986
|
if (this._destroyed) {
|
|
925
|
-
throw new OzError('Cannot tokenize on a destroyed vault.
|
|
987
|
+
throw new OzError('Cannot tokenize on a destroyed vault. Call await OzVault.create() to get a new instance.');
|
|
926
988
|
}
|
|
927
989
|
if (!this.tokenizerReady) {
|
|
928
990
|
throw new OzError('Vault not ready. Ensure the page is fully loaded before calling createToken.');
|
|
@@ -982,7 +1044,8 @@ class OzVault {
|
|
|
982
1044
|
this.sendToTokenizer({
|
|
983
1045
|
type: 'OZ_TOKENIZE',
|
|
984
1046
|
requestId,
|
|
985
|
-
|
|
1047
|
+
waxKey: this.waxKey,
|
|
1048
|
+
tokenizationSessionId: this.tokenizationSessionId,
|
|
986
1049
|
pubKey: this.pubKey,
|
|
987
1050
|
firstName,
|
|
988
1051
|
lastName,
|