@ozura/elements 0.1.0-beta.5 → 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 +210 -40
- package/dist/frame/element-frame.html +1 -1
- package/dist/frame/tokenizer-frame.html +1 -1
- package/dist/frame/tokenizer-frame.js +40 -16
- package/dist/frame/tokenizer-frame.js.map +1 -1
- package/dist/oz-elements.esm.js +98 -41
- package/dist/oz-elements.esm.js.map +1 -1
- package/dist/oz-elements.umd.js +98 -40
- package/dist/oz-elements.umd.js.map +1 -1
- package/dist/react/frame/tokenizerFrame.d.ts +4 -4
- package/dist/react/index.cjs.js +127 -47
- package/dist/react/index.cjs.js.map +1 -1
- package/dist/react/index.esm.js +127 -47
- package/dist/react/index.esm.js.map +1 -1
- package/dist/react/react/index.d.ts +18 -5
- package/dist/react/sdk/OzVault.d.ts +40 -4
- package/dist/react/sdk/errors.d.ts +4 -3
- package/dist/react/sdk/index.d.ts +2 -2
- package/dist/react/server/index.d.ts +116 -16
- package/dist/react/types/index.d.ts +122 -6
- package/dist/server/frame/tokenizerFrame.d.ts +4 -4
- package/dist/server/index.cjs.js +218 -26
- package/dist/server/index.cjs.js.map +1 -1
- package/dist/server/index.esm.js +217 -27
- package/dist/server/index.esm.js.map +1 -1
- package/dist/server/sdk/OzVault.d.ts +40 -4
- package/dist/server/sdk/errors.d.ts +4 -3
- package/dist/server/sdk/index.d.ts +2 -2
- package/dist/server/server/index.d.ts +116 -16
- package/dist/server/types/index.d.ts +122 -6
- package/dist/types/frame/tokenizerFrame.d.ts +4 -4
- package/dist/types/sdk/OzVault.d.ts +40 -4
- package/dist/types/sdk/errors.d.ts +4 -3
- package/dist/types/sdk/index.d.ts +2 -2
- package/dist/types/server/index.d.ts +116 -16
- package/dist/types/types/index.d.ts +122 -6
- 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
|
|
|
@@ -23,9 +23,9 @@ The Ozura Vault stores and tokenizes sensitive card data. OzElements is the fron
|
|
|
23
23
|
```
|
|
24
24
|
Your page (yoursite.com)
|
|
25
25
|
│
|
|
26
|
-
│ import { OzVault } from '
|
|
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,29 +47,42 @@ 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
|
|
53
55
|
|
|
54
56
|
```bash
|
|
55
|
-
npm install
|
|
57
|
+
npm install @ozura/elements
|
|
56
58
|
```
|
|
57
59
|
|
|
58
|
-
Or via script tag (UMD):
|
|
60
|
+
Or via script tag (UMD) from jsDelivr (served from npm after you publish):
|
|
59
61
|
|
|
60
62
|
```html
|
|
61
|
-
<script src="https://cdn.
|
|
63
|
+
<script src="https://cdn.jsdelivr.net/npm/@ozura/elements/dist/oz-elements.umd.js"></script>
|
|
62
64
|
```
|
|
63
65
|
|
|
66
|
+
For production, pin a version: `.../npm/@ozura/elements@1.0.0/dist/oz-elements.umd.js`
|
|
67
|
+
|
|
64
68
|
---
|
|
65
69
|
|
|
66
70
|
## Quick start
|
|
67
71
|
|
|
68
72
|
```js
|
|
69
|
-
import { OzVault } from '
|
|
73
|
+
import { OzVault } from '@ozura/elements';
|
|
70
74
|
|
|
71
|
-
const vault =
|
|
75
|
+
const vault = await OzVault.create({
|
|
72
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
|
+
},
|
|
73
86
|
});
|
|
74
87
|
|
|
75
88
|
const cardNumber = vault.createElement('cardNumber', {
|
|
@@ -111,16 +124,135 @@ document.getElementById('tokenize').addEventListener('click', async () => {
|
|
|
111
124
|
|
|
112
125
|
---
|
|
113
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
|
+
|
|
114
239
|
## API
|
|
115
240
|
|
|
116
|
-
### `
|
|
241
|
+
### `OzVault.create(options)`
|
|
242
|
+
|
|
243
|
+
Returns `Promise<OzVault>`. The static factory is the only way to create a vault — the constructor is private.
|
|
117
244
|
|
|
118
245
|
| Option | Type | Default | Description |
|
|
119
246
|
|---|---|---|---|
|
|
120
|
-
| `apiKey` | `string` | required | Your Ozura vault API key |
|
|
121
247
|
| `options.pubKey` | `string` | required | System pub key for the tokenize endpoint. Obtain from Ozura admin. |
|
|
122
|
-
| `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. |
|
|
123
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.
|
|
124
256
|
|
|
125
257
|
### `vault.createElement(type, options?)`
|
|
126
258
|
|
|
@@ -233,24 +365,41 @@ Updates `style`, `placeholder`, or `disabled` on a mounted element without remou
|
|
|
233
365
|
|
|
234
366
|
---
|
|
235
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
|
+
|
|
236
385
|
## React
|
|
237
386
|
|
|
238
387
|
```bash
|
|
239
|
-
npm install
|
|
388
|
+
npm install @ozura/elements
|
|
240
389
|
```
|
|
241
390
|
|
|
242
391
|
Import from the `/react` subpath:
|
|
243
392
|
|
|
244
393
|
```tsx
|
|
245
|
-
import { OzElements, OzCardNumber, OzExpiry, OzCvv, useOzElements } from '
|
|
394
|
+
import { OzElements, OzCardNumber, OzExpiry, OzCvv, useOzElements } from '@ozura/elements/react';
|
|
246
395
|
```
|
|
247
396
|
|
|
248
397
|
### Example
|
|
249
398
|
|
|
250
399
|
```tsx
|
|
251
400
|
import { useState } from 'react';
|
|
252
|
-
import { OzElements, OzCardNumber, OzExpiry, OzCvv, useOzElements } from '
|
|
253
|
-
import { normalizeCardSaleError } from '
|
|
401
|
+
import { OzElements, OzCardNumber, OzExpiry, OzCvv, useOzElements } from '@ozura/elements/react';
|
|
402
|
+
import { normalizeCardSaleError } from '@ozura/elements';
|
|
254
403
|
|
|
255
404
|
const fieldStyle = {
|
|
256
405
|
base: { color: '#111827', fontSize: '16px', fontFamily: 'Inter, sans-serif' },
|
|
@@ -334,8 +483,15 @@ function CheckoutForm() {
|
|
|
334
483
|
export default function App() {
|
|
335
484
|
return (
|
|
336
485
|
<OzElements
|
|
337
|
-
apiKey="your_vault_api_key"
|
|
338
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
|
+
}}
|
|
339
495
|
frameBaseUrl="https://elements.ozura.com"
|
|
340
496
|
>
|
|
341
497
|
<CheckoutForm />
|
|
@@ -348,9 +504,13 @@ export default function App() {
|
|
|
348
504
|
|
|
349
505
|
| Prop | Type | Description |
|
|
350
506
|
|---|---|---|
|
|
351
|
-
| `
|
|
352
|
-
| `
|
|
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 |
|
|
353
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 |
|
|
354
514
|
|
|
355
515
|
### `useOzElements()` return
|
|
356
516
|
|
|
@@ -380,7 +540,7 @@ If you're an OzuraPay merchant and want to charge cards through Ozura's processo
|
|
|
380
540
|
|
|
381
541
|
| Credential | Where it goes |
|
|
382
542
|
|-----------|---------------|
|
|
383
|
-
| 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. |
|
|
384
544
|
| Pay API key | Backend only: `x-api-key` header |
|
|
385
545
|
| Merchant ID | Backend only: `merchantId` in request body |
|
|
386
546
|
|
|
@@ -389,10 +549,18 @@ For the full credential setup, billing form field requirements, validation rules
|
|
|
389
549
|
### 1 — Collect card data + billing in one call
|
|
390
550
|
|
|
391
551
|
```js
|
|
392
|
-
import { OzVault, normalizeCardSaleError } from '
|
|
552
|
+
import { OzVault, normalizeCardSaleError } from '@ozura/elements';
|
|
393
553
|
|
|
394
|
-
const vault =
|
|
554
|
+
const vault = await OzVault.create({
|
|
395
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
|
+
},
|
|
396
564
|
});
|
|
397
565
|
|
|
398
566
|
// … mount card elements …
|
|
@@ -470,7 +638,7 @@ Your server proxies to the Ozura Pay API with **two API keys** in the headers:
|
|
|
470
638
|
|
|
471
639
|
```js
|
|
472
640
|
// Node.js / Express example
|
|
473
|
-
import type { CardSaleRequest, CardSaleApiResponse } from '
|
|
641
|
+
import type { CardSaleRequest, CardSaleApiResponse } from '@ozura/elements';
|
|
474
642
|
|
|
475
643
|
app.post('/api/charge', async (req, res) => {
|
|
476
644
|
const body = req.body;
|
|
@@ -545,7 +713,7 @@ app.post('/api/charge', async (req, res) => {
|
|
|
545
713
|
### 3 — cardSale response shape
|
|
546
714
|
|
|
547
715
|
```ts
|
|
548
|
-
import type { CardSaleApiResponse, CardSaleResponseData } from '
|
|
716
|
+
import type { CardSaleApiResponse, CardSaleResponseData } from '@ozura/elements';
|
|
549
717
|
|
|
550
718
|
// Successful response shape from POST /api/v1/cardSale:
|
|
551
719
|
// {
|
|
@@ -591,7 +759,7 @@ app.get('/api/client-ip', (req, res) => {
|
|
|
591
759
|
Maps raw Pay API error strings to user-friendly copy. Uses the same key table as the Ozura checkout frontend — identical errors produce identical messages on both surfaces:
|
|
592
760
|
|
|
593
761
|
```js
|
|
594
|
-
import { normalizeCardSaleError } from '
|
|
762
|
+
import { normalizeCardSaleError } from '@ozura/elements';
|
|
595
763
|
|
|
596
764
|
normalizeCardSaleError('Insufficient Funds')
|
|
597
765
|
// → "Your card has insufficient funds. Please use a different payment method."
|
|
@@ -608,7 +776,7 @@ normalizeCardSaleError('Card expired')
|
|
|
608
776
|
Import the interface to type your cardSale payload and catch missing fields at compile time:
|
|
609
777
|
|
|
610
778
|
```ts
|
|
611
|
-
import type { CardSaleRequest } from '
|
|
779
|
+
import type { CardSaleRequest } from '@ozura/elements';
|
|
612
780
|
|
|
613
781
|
const payload: CardSaleRequest = {
|
|
614
782
|
processor: 'elavon',
|
|
@@ -652,22 +820,23 @@ The test suite covers: Luhn algorithm, card brand detection, card number formatt
|
|
|
652
820
|
```bash
|
|
653
821
|
npm install
|
|
654
822
|
npm run dev # build + serve demo at http://localhost:4242/demo/index.html
|
|
655
|
-
npm run build # production build
|
|
656
823
|
npm run watch # rebuild on save
|
|
824
|
+
npm run build # production build
|
|
657
825
|
```
|
|
658
826
|
|
|
659
827
|
Build outputs in `dist/`:
|
|
660
828
|
|
|
661
829
|
| File | Format | Use |
|
|
662
830
|
|---|---|---|
|
|
663
|
-
| `oz-elements.esm.js` | ESM | `import { OzVault } from '
|
|
831
|
+
| `oz-elements.esm.js` | ESM | `import { OzVault } from '@ozura/elements'` |
|
|
664
832
|
| `oz-elements.umd.js` | UMD | `<script>` tag / CDN |
|
|
665
833
|
| `frame/element-frame.js` | IIFE | loaded by element iframes |
|
|
666
834
|
| `frame/tokenizer-frame.js` | IIFE | loaded by tokenizer iframe |
|
|
667
|
-
| `react/index.esm.js` | ESM | `import ... from '
|
|
668
|
-
| `react/index.cjs.js` | CJS | `require('
|
|
835
|
+
| `react/index.esm.js` | ESM | `import ... from '@ozura/elements/react'` |
|
|
836
|
+
| `react/index.cjs.js` | CJS | `require('@ozura/elements/react')` |
|
|
837
|
+
| `server/index.*.js` | ESM + CJS | `import { Ozura, createMintWaxHandler } from '@ozura/elements/server'` |
|
|
669
838
|
|
|
670
|
-
|
|
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).
|
|
671
840
|
|
|
672
841
|
---
|
|
673
842
|
|
|
@@ -692,23 +861,24 @@ See [ARCHITECTURE.md](./ARCHITECTURE.md) for architecture detail, security model
|
|
|
692
861
|
- [x] `OzVault.isReady` getter
|
|
693
862
|
- [x] `element.mount()` accepts `HTMLElement` as well as a CSS selector
|
|
694
863
|
- [x] Unit test suite (Vitest + jsdom) — 168 tests, 0 failures
|
|
695
|
-
- [ ] Published to npm as
|
|
696
|
-
- [ ] CDN delivery for UMD build
|
|
864
|
+
- [ ] Published to npm as `@ozura/elements`
|
|
865
|
+
- [ ] CDN delivery for UMD build (optional for v1)
|
|
697
866
|
|
|
698
867
|
### v0.3 — React ✅
|
|
699
868
|
- [x] `<OzElements>` provider — creates and owns an `OzVault` instance
|
|
700
869
|
- [x] `<OzCardNumber />`, `<OzExpiry />`, `<OzCvv />` field components
|
|
701
870
|
- [x] `useOzElements()` hook — `createToken` + `ready` flag
|
|
702
|
-
- [x] ESM + CJS React bundle, exported at
|
|
703
|
-
- [ ] Published as a standalone `@oz/react-elements` package
|
|
871
|
+
- [x] ESM + CJS React bundle, exported at `@ozura/elements/react`
|
|
872
|
+
- [ ] Published as a standalone `@oz/react-elements` package (optional; subpath export is sufficient for v1)
|
|
704
873
|
|
|
705
874
|
### v1.0 — Production ready
|
|
706
875
|
- [x] Production iframe hosting at `elements.ozura.com`
|
|
707
|
-
- [
|
|
708
|
-
- [
|
|
709
|
-
- [ ]
|
|
710
|
-
- [ ]
|
|
711
|
-
- [ ]
|
|
876
|
+
- [x] postMessage security covered (unit + E2E tests; see `docs/AUDIT.md`)
|
|
877
|
+
- [x] Security audit (consolidated in `docs/AUDIT.md`; all findings resolved or closed)
|
|
878
|
+
- [ ] Publish `@ozura/elements@1.0.0` to npm
|
|
879
|
+
- [ ] Public documentation site (or link to ozura-documentation)
|
|
880
|
+
- [ ] ACH / bank account element (pending Pay API support) — post-v1
|
|
881
|
+
- [ ] Saved payment method support (returning customers) — post-v1
|
|
712
882
|
|
|
713
883
|
---
|
|
714
884
|
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
<html lang="en">
|
|
3
3
|
<head>
|
|
4
4
|
<meta charset="UTF-8" />
|
|
5
|
-
<meta http-equiv="Content-Security-Policy" content="default-src 'none'; script-src 'self'; connect-src 'self'; style-src 'unsafe-inline' https:; font-src https: '
|
|
5
|
+
<meta http-equiv="Content-Security-Policy" content="default-src 'none'; script-src 'self'; connect-src 'self'; style-src 'self' 'unsafe-inline' https:; font-src https: data:; base-uri 'none'; form-action 'none';" />
|
|
6
6
|
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
|
7
7
|
<title>Secure Input</title>
|
|
8
8
|
<style>
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
<html lang="en">
|
|
3
3
|
<head>
|
|
4
4
|
<meta charset="UTF-8" />
|
|
5
|
-
<meta http-equiv="Content-Security-Policy" content="default-src 'none'; script-src 'self'; connect-src https
|
|
5
|
+
<meta http-equiv="Content-Security-Policy" content="default-src 'none'; script-src 'self'; connect-src https://pci-vault-staging-drc0duhcakf4g4fr.eastus-01.azurewebsites.net; base-uri 'none'; form-action 'none';" />
|
|
6
6
|
<title>Ozura Tokenizer</title>
|
|
7
7
|
</head>
|
|
8
8
|
<body>
|
|
@@ -15,10 +15,10 @@ var _OzTokenizerFrame = (function (exports) {
|
|
|
15
15
|
*/
|
|
16
16
|
const VAULT_API_URL = "https://pci-vault-staging-drc0duhcakf4g4fr.eastus-01.azurewebsites.net";
|
|
17
17
|
/**
|
|
18
|
-
* Defense-in-depth guard: only allows the build-time vault URL
|
|
19
|
-
*
|
|
20
|
-
*
|
|
21
|
-
*
|
|
18
|
+
* Defense-in-depth guard: only allows the build-time vault URL origin.
|
|
19
|
+
* The tokenizer already uses VAULT_API_URL directly and never reads
|
|
20
|
+
* the merchant-supplied apiUrl, so this is a secondary safety net —
|
|
21
|
+
* not the primary security boundary.
|
|
22
22
|
*
|
|
23
23
|
* Exported for unit testing only — not part of the public SDK API.
|
|
24
24
|
*/
|
|
@@ -30,8 +30,6 @@ var _OzTokenizerFrame = (function (exports) {
|
|
|
30
30
|
catch (_a) {
|
|
31
31
|
return false;
|
|
32
32
|
}
|
|
33
|
-
if (parsed.protocol === 'http:' && parsed.hostname === 'localhost')
|
|
34
|
-
return true;
|
|
35
33
|
try {
|
|
36
34
|
const allowed = new URL(VAULT_API_URL);
|
|
37
35
|
return parsed.origin === allowed.origin;
|
|
@@ -64,12 +62,13 @@ var _OzTokenizerFrame = (function (exports) {
|
|
|
64
62
|
}
|
|
65
63
|
break;
|
|
66
64
|
case 'OZ_TOKENIZE':
|
|
67
|
-
if (this.hostOrigin
|
|
65
|
+
if (!this.hostOrigin || event.origin !== this.hostOrigin)
|
|
68
66
|
return;
|
|
69
67
|
this.pending.set(msg.requestId, {
|
|
70
68
|
kind: 'card',
|
|
71
69
|
requestId: msg.requestId,
|
|
72
|
-
|
|
70
|
+
waxKey: msg.waxKey || '',
|
|
71
|
+
tokenizationSessionId: msg.tokenizationSessionId || '',
|
|
73
72
|
pubKey: msg.pubKey || '',
|
|
74
73
|
firstName: msg.firstName || '',
|
|
75
74
|
lastName: msg.lastName || '',
|
|
@@ -80,12 +79,13 @@ var _OzTokenizerFrame = (function (exports) {
|
|
|
80
79
|
});
|
|
81
80
|
break;
|
|
82
81
|
case 'OZ_BANK_TOKENIZE':
|
|
83
|
-
if (this.hostOrigin
|
|
82
|
+
if (!this.hostOrigin || event.origin !== this.hostOrigin)
|
|
84
83
|
return;
|
|
85
84
|
this.pendingBank.set(msg.requestId, {
|
|
86
85
|
kind: 'bank',
|
|
87
86
|
requestId: msg.requestId,
|
|
88
|
-
|
|
87
|
+
waxKey: msg.waxKey || '',
|
|
88
|
+
tokenizationSessionId: msg.tokenizationSessionId || '',
|
|
89
89
|
pubKey: msg.pubKey || '',
|
|
90
90
|
firstName: msg.firstName || '',
|
|
91
91
|
lastName: msg.lastName || '',
|
|
@@ -143,7 +143,7 @@ var _OzTokenizerFrame = (function (exports) {
|
|
|
143
143
|
* `token` string, or `null` if an error was already reported via
|
|
144
144
|
* postMessage to `target`.
|
|
145
145
|
*/
|
|
146
|
-
async postToVault(requestId, apiUrl,
|
|
146
|
+
async postToVault(requestId, apiUrl, waxKey, pubKey, body, target, logLabel, tokenizationSessionId) {
|
|
147
147
|
var _a, _b;
|
|
148
148
|
if (!isAllowedVaultOrigin(apiUrl)) {
|
|
149
149
|
let error;
|
|
@@ -158,15 +158,39 @@ var _OzTokenizerFrame = (function (exports) {
|
|
|
158
158
|
window.parent.postMessage({ __oz: true, vaultId: this.vaultId, type: 'OZ_TOKEN_ERROR', requestId, error, errorCode: 'config' }, target);
|
|
159
159
|
return null;
|
|
160
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
|
+
}
|
|
161
167
|
try {
|
|
162
168
|
const headers = {
|
|
163
169
|
'Content-Type': 'application/json',
|
|
164
|
-
'X-
|
|
170
|
+
'X-Wax-Key': waxKey,
|
|
165
171
|
'X-Request-ID': requestId,
|
|
166
172
|
};
|
|
167
173
|
if (pubKey) {
|
|
168
174
|
headers['X-Pub-Key'] = pubKey;
|
|
169
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
|
+
// ─────────────────────────────────────────────────────────────────────
|
|
170
194
|
const data = await this.fetchWithRetry(`${apiUrl}/tokenize`, {
|
|
171
195
|
method: 'POST',
|
|
172
196
|
headers,
|
|
@@ -192,7 +216,7 @@ var _OzTokenizerFrame = (function (exports) {
|
|
|
192
216
|
}
|
|
193
217
|
async tokenize(session) {
|
|
194
218
|
var _a, _b, _c, _d;
|
|
195
|
-
const { requestId,
|
|
219
|
+
const { requestId, waxKey, tokenizationSessionId, pubKey, firstName, lastName, values, cardMeta, hostOrigin } = session;
|
|
196
220
|
const target = hostOrigin || window.location.origin;
|
|
197
221
|
const cardNumber = values.get('cardNumber') || '';
|
|
198
222
|
const cvv = values.get('cvv') || '';
|
|
@@ -215,7 +239,7 @@ var _OzTokenizerFrame = (function (exports) {
|
|
|
215
239
|
},
|
|
216
240
|
},
|
|
217
241
|
};
|
|
218
|
-
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);
|
|
219
243
|
if (!data)
|
|
220
244
|
return;
|
|
221
245
|
const { token } = data;
|
|
@@ -232,7 +256,7 @@ var _OzTokenizerFrame = (function (exports) {
|
|
|
232
256
|
window.parent.postMessage(Object.assign({ __oz: true, vaultId: this.vaultId, type: 'OZ_TOKEN_RESULT', requestId, token, cvcSession }, (hasFullCardMeta ? { card: cardMeta } : {})), target);
|
|
233
257
|
}
|
|
234
258
|
async tokenizeBank(session) {
|
|
235
|
-
const { requestId,
|
|
259
|
+
const { requestId, waxKey, tokenizationSessionId, pubKey, firstName, lastName, values, bankMeta, hostOrigin } = session;
|
|
236
260
|
const target = hostOrigin || window.location.origin;
|
|
237
261
|
const body = {
|
|
238
262
|
type: 'bank',
|
|
@@ -248,7 +272,7 @@ var _OzTokenizerFrame = (function (exports) {
|
|
|
248
272
|
},
|
|
249
273
|
},
|
|
250
274
|
};
|
|
251
|
-
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);
|
|
252
276
|
if (!data)
|
|
253
277
|
return;
|
|
254
278
|
const { token } = data;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tokenizer-frame.js","sources":["../../src/frame/tokenizerFrame.ts"],"sourcesContent":[null],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"tokenizer-frame.js","sources":["../../src/frame/tokenizerFrame.ts"],"sourcesContent":[null],"names":[],"mappings":"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"}
|