@dossier-wiki/cloud-sdk 0.1.0 → 0.2.0-staging.568b313

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 (120) hide show
  1. package/README.md +697 -46
  2. package/dist/cjs/api.js +34 -0
  3. package/dist/cjs/api.js.map +1 -0
  4. package/dist/cjs/error.js +29 -0
  5. package/dist/cjs/error.js.map +1 -0
  6. package/dist/cjs/http.js +75 -0
  7. package/dist/cjs/http.js.map +1 -0
  8. package/dist/cjs/index.js +48 -0
  9. package/dist/cjs/index.js.map +1 -0
  10. package/dist/cjs/resources/aml.js +88 -0
  11. package/dist/cjs/resources/aml.js.map +1 -0
  12. package/dist/cjs/resources/documents.js +170 -0
  13. package/dist/cjs/resources/documents.js.map +1 -0
  14. package/dist/cjs/resources/form-templates.js +117 -0
  15. package/dist/cjs/resources/form-templates.js.map +1 -0
  16. package/dist/cjs/resources/kyc/index.js +32 -0
  17. package/dist/cjs/resources/kyc/index.js.map +1 -0
  18. package/dist/cjs/resources/kyc/sessions.js +103 -0
  19. package/dist/cjs/resources/kyc/sessions.js.map +1 -0
  20. package/dist/cjs/resources/kyc/workflows.js +150 -0
  21. package/dist/cjs/resources/kyc/workflows.js.map +1 -0
  22. package/dist/cjs/resources/media.js +62 -0
  23. package/dist/cjs/resources/media.js.map +1 -0
  24. package/dist/cjs/schemas/index.js +9 -0
  25. package/dist/cjs/schemas/index.js.map +1 -0
  26. package/dist/cjs/schemas/kyc/workflow-steps.js +145 -0
  27. package/dist/cjs/schemas/kyc/workflow-steps.js.map +1 -0
  28. package/dist/cjs/service.js +132 -0
  29. package/dist/cjs/service.js.map +1 -0
  30. package/dist/cjs/session.js +379 -0
  31. package/dist/cjs/session.js.map +1 -0
  32. package/dist/cjs/types.js +36 -0
  33. package/dist/cjs/types.js.map +1 -0
  34. package/dist/cjs/webhooks.js +93 -0
  35. package/dist/cjs/webhooks.js.map +1 -0
  36. package/dist/esm/api.js +33 -0
  37. package/dist/esm/api.js.map +1 -0
  38. package/dist/esm/error.js +25 -0
  39. package/dist/esm/error.js.map +1 -0
  40. package/dist/esm/http.js +71 -0
  41. package/dist/esm/http.js.map +1 -0
  42. package/dist/esm/index.js +19 -0
  43. package/dist/esm/index.js.map +1 -0
  44. package/dist/esm/resources/aml.js +84 -0
  45. package/dist/esm/resources/aml.js.map +1 -0
  46. package/dist/esm/resources/documents.js +166 -0
  47. package/dist/esm/resources/documents.js.map +1 -0
  48. package/dist/esm/resources/form-templates.js +113 -0
  49. package/dist/esm/resources/form-templates.js.map +1 -0
  50. package/dist/esm/resources/kyc/index.js +26 -0
  51. package/dist/esm/resources/kyc/index.js.map +1 -0
  52. package/dist/esm/resources/kyc/sessions.js +99 -0
  53. package/dist/esm/resources/kyc/sessions.js.map +1 -0
  54. package/dist/esm/resources/kyc/workflows.js +146 -0
  55. package/dist/esm/resources/kyc/workflows.js.map +1 -0
  56. package/dist/esm/resources/media.js +58 -0
  57. package/dist/esm/resources/media.js.map +1 -0
  58. package/dist/esm/schemas/index.js +2 -0
  59. package/dist/esm/schemas/index.js.map +1 -0
  60. package/dist/esm/schemas/kyc/workflow-steps.js +142 -0
  61. package/dist/esm/schemas/kyc/workflow-steps.js.map +1 -0
  62. package/dist/esm/service.js +127 -0
  63. package/dist/esm/service.js.map +1 -0
  64. package/dist/esm/session.js +375 -0
  65. package/dist/esm/session.js.map +1 -0
  66. package/dist/{types.js → esm/types.js} +11 -27
  67. package/dist/esm/types.js.map +1 -0
  68. package/dist/{webhooks.js → esm/webhooks.js} +10 -11
  69. package/dist/esm/webhooks.js.map +1 -0
  70. package/dist/{api.d.ts → types/api.d.ts} +297 -166
  71. package/dist/types/api.d.ts.map +1 -0
  72. package/dist/types/error.d.ts +24 -0
  73. package/dist/types/error.d.ts.map +1 -0
  74. package/dist/types/http.d.ts +17 -0
  75. package/dist/types/http.d.ts.map +1 -0
  76. package/dist/types/index.d.ts +15 -0
  77. package/dist/types/index.d.ts.map +1 -0
  78. package/dist/types/resources/aml.d.ts +79 -0
  79. package/dist/types/resources/aml.d.ts.map +1 -0
  80. package/dist/types/resources/documents.d.ts +153 -0
  81. package/dist/types/resources/documents.d.ts.map +1 -0
  82. package/dist/types/resources/form-templates.d.ts +104 -0
  83. package/dist/types/resources/form-templates.d.ts.map +1 -0
  84. package/dist/types/resources/kyc/index.d.ts +34 -0
  85. package/dist/types/resources/kyc/index.d.ts.map +1 -0
  86. package/dist/types/resources/kyc/sessions.d.ts +92 -0
  87. package/dist/types/resources/kyc/sessions.d.ts.map +1 -0
  88. package/dist/types/resources/kyc/workflows.d.ts +135 -0
  89. package/dist/types/resources/kyc/workflows.d.ts.map +1 -0
  90. package/dist/types/resources/media.d.ts +56 -0
  91. package/dist/types/resources/media.d.ts.map +1 -0
  92. package/dist/types/schemas/index.d.ts +3 -0
  93. package/dist/types/schemas/index.d.ts.map +1 -0
  94. package/dist/types/schemas/kyc/workflow-steps.d.ts +5113 -0
  95. package/dist/types/schemas/kyc/workflow-steps.d.ts.map +1 -0
  96. package/dist/types/service.d.ts +143 -0
  97. package/dist/types/service.d.ts.map +1 -0
  98. package/dist/types/session.d.ts +176 -0
  99. package/dist/types/session.d.ts.map +1 -0
  100. package/dist/{types.d.ts → types/types.d.ts} +100 -2
  101. package/dist/types/types.d.ts.map +1 -0
  102. package/dist/{webhooks.d.ts → types/webhooks.d.ts} +5 -5
  103. package/dist/types/webhooks.d.ts.map +1 -0
  104. package/package.json +26 -32
  105. package/dist/api.d.ts.map +0 -1
  106. package/dist/api.js +0 -22
  107. package/dist/api.js.map +0 -1
  108. package/dist/index.d.ts +0 -6
  109. package/dist/index.d.ts.map +0 -1
  110. package/dist/index.js +0 -5
  111. package/dist/index.js.map +0 -1
  112. package/dist/service.d.ts +0 -39
  113. package/dist/service.d.ts.map +0 -1
  114. package/dist/service.js +0 -150
  115. package/dist/service.js.map +0 -1
  116. package/dist/types.d.ts.map +0 -1
  117. package/dist/types.js.map +0 -1
  118. package/dist/webhooks.d.ts.map +0 -1
  119. package/dist/webhooks.js.map +0 -1
  120. package/docs/REFERENCE.md +0 -114
@@ -0,0 +1,379 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.DossiersKycSession = void 0;
4
+ const error_js_1 = require("./error.js");
5
+ /**
6
+ * Customer-facing KYC session client.
7
+ *
8
+ * Use this in onboarding / customer applications to drive the KYC flow.
9
+ * Handles payload encryption, multipart media uploads, and the session JWT
10
+ * automatically — so callers work with plain TypeScript objects.
11
+ *
12
+ * Unlike `DossiersAPIService` (which uses an org-level API key), this class
13
+ * authenticates as the session's customer using a short-lived JWT.
14
+ *
15
+ * @example
16
+ * // Server side: create a session and get the token
17
+ * const result = await adminService.kyc.sessions.create({ workflowId: 'wf_abc' });
18
+ *
19
+ * // Client side (onboarding app)
20
+ * const session = DossiersKycSession.from(result, {
21
+ * encryptionKey: process.env.KYC_PAYLOAD_ENCRYPTION_KEY,
22
+ * });
23
+ *
24
+ * const state = await session.getState();
25
+ * const attempt = await session.createAttempt();
26
+ * await session.uploadMedia(attempt.id, {
27
+ * file: capturedBlob,
28
+ * mediaType: 'document-front',
29
+ * mimeType: 'image/jpeg',
30
+ * filename: 'front.jpg',
31
+ * });
32
+ */
33
+ class DossiersKycSession {
34
+ constructor(options) {
35
+ this.sessionId = options.sessionId;
36
+ this.token = options.token;
37
+ this.encryptionKey = options.encryptionKey;
38
+ this.baseUrl = options.baseUrl ?? 'https://api.dossiers.wiki';
39
+ this.fetchImpl = options.fetch ?? globalThis.fetch;
40
+ }
41
+ /**
42
+ * Create a `DossiersKycSession` from the result of
43
+ * `DossiersAPIService.kyc.sessions.create()`.
44
+ */
45
+ static from(result, opts) {
46
+ return new DossiersKycSession({
47
+ sessionId: result.session.id,
48
+ token: result.token,
49
+ encryptionKey: opts.encryptionKey,
50
+ baseUrl: opts.baseUrl,
51
+ fetch: opts.fetch,
52
+ });
53
+ }
54
+ // ── Internal helpers ──────────────────────────────────────────────────────
55
+ sessionUrl(suffix = '', params) {
56
+ const u = new URL(`${this.baseUrl}/api/session/${this.sessionId}${suffix}`);
57
+ u.searchParams.set('token', this.token);
58
+ if (params) {
59
+ for (const [k, v] of Object.entries(params))
60
+ u.searchParams.set(k, v);
61
+ }
62
+ return u.toString();
63
+ }
64
+ attemptUrl(attemptId, suffix = '') {
65
+ const u = new URL(`${this.baseUrl}/api/session/${this.sessionId}/attempt/${attemptId}${suffix}`);
66
+ u.searchParams.set('token', this.token);
67
+ return u.toString();
68
+ }
69
+ get authHeaders() {
70
+ return { Authorization: `Bearer ${this.token}` };
71
+ }
72
+ async doFetch(url, init) {
73
+ const res = await this.fetchImpl(url, init);
74
+ const raw = await res.text();
75
+ const parsed = raw.length > 0 ? safeJsonParse(raw) : undefined;
76
+ if (!res.ok) {
77
+ const message = (parsed && typeof parsed === 'object' && 'message' in parsed
78
+ ? String(parsed.message)
79
+ : null) ?? `KYC session ${init.method ?? 'GET'} failed: ${res.status}`;
80
+ throw new error_js_1.DossiersAPIError(res.status, message, parsed ?? raw);
81
+ }
82
+ return parsed;
83
+ }
84
+ get(url) {
85
+ return this.doFetch(url, {
86
+ method: 'GET',
87
+ headers: { ...this.authHeaders, Accept: 'application/json' },
88
+ });
89
+ }
90
+ post(url, body) {
91
+ return this.doFetch(url, {
92
+ method: 'POST',
93
+ headers: {
94
+ ...this.authHeaders,
95
+ Accept: 'application/json',
96
+ ...(body !== undefined ? { 'Content-Type': 'application/json' } : {}),
97
+ },
98
+ body,
99
+ });
100
+ }
101
+ patch(url, body) {
102
+ return this.doFetch(url, {
103
+ method: 'PATCH',
104
+ headers: {
105
+ ...this.authHeaders,
106
+ 'Content-Type': 'application/json',
107
+ Accept: 'application/json',
108
+ },
109
+ body,
110
+ });
111
+ }
112
+ async postEncrypted(url, data) {
113
+ const payload = await aesEncrypt(data, this.encryptionKey);
114
+ return this.post(url, JSON.stringify({ payload }));
115
+ }
116
+ // ── Session state ─────────────────────────────────────────────────────────
117
+ /**
118
+ * Retrieve the full session state: workflow snapshot, step preview data,
119
+ * and user progress checkpoint.
120
+ */
121
+ getState() {
122
+ return this.get(this.sessionUrl());
123
+ }
124
+ /**
125
+ * Retrieve lightweight session status. Cheaper than `getState()` — use this
126
+ * to poll session validity, completion, and expiry without fetching all data.
127
+ */
128
+ getStatus() {
129
+ return this.get(this.sessionUrl('/status'));
130
+ }
131
+ /**
132
+ * Retrieve which tab or user currently holds the session activation lock.
133
+ */
134
+ getOwner() {
135
+ return this.get(this.sessionUrl('/owner'));
136
+ }
137
+ // ── Tab activation ────────────────────────────────────────────────────────
138
+ /**
139
+ * Claim the session for the given tab. Throws `DossiersAPIError` with status
140
+ * 409 if the session is already active in another tab (unless `force` is true).
141
+ *
142
+ * @param tabId Unique identifier for this browser tab or device.
143
+ * @param force Evict the current holder and take ownership.
144
+ */
145
+ async activate(tabId, force = false) {
146
+ await this.postEncrypted(this.sessionUrl('/activate', force ? { force: 'true' } : undefined), { tabId });
147
+ }
148
+ /**
149
+ * Release the session activation lock for the given tab.
150
+ *
151
+ * @param tabId The tab ID to deactivate (passed as a query parameter).
152
+ */
153
+ deactivate(tabId) {
154
+ return this.post(this.sessionUrl('/deactivate', { tabId }));
155
+ }
156
+ // ── Session mutations ─────────────────────────────────────────────────────
157
+ /**
158
+ * Update the session's user progress checkpoint.
159
+ *
160
+ * @example
161
+ * await session.update({ checkpoint: 'dv-document-selection' });
162
+ */
163
+ async update(data) {
164
+ const payload = await aesEncrypt(data, this.encryptionKey);
165
+ return this.patch(this.sessionUrl(), JSON.stringify({ payload }));
166
+ }
167
+ /**
168
+ * Mark the session as complete. Call this after all required workflow steps pass.
169
+ */
170
+ complete() {
171
+ return this.post(this.sessionUrl('/complete'));
172
+ }
173
+ /**
174
+ * Submit form data for a form collection workflow step.
175
+ *
176
+ * @param stepId Workflow step ID (from the workflow snapshot).
177
+ * @param formData Key-value map of form field IDs to submitted values.
178
+ * @param unordered Skip step-ordering enforcement when `true`.
179
+ */
180
+ submitFormStep(stepId, formData, unordered = false) {
181
+ return this.postEncrypted(this.sessionUrl('/form-step', unordered ? { unordered: 'true' } : undefined), { stepId, formData });
182
+ }
183
+ // ── Attempts ──────────────────────────────────────────────────────────────
184
+ /**
185
+ * Create a new verification attempt. Each document capture or liveness check
186
+ * starts a fresh attempt.
187
+ */
188
+ createAttempt() {
189
+ return this.post(this.sessionUrl('/attempt'));
190
+ }
191
+ /**
192
+ * Append telemetry events to an attempt. Used to record UI events, errors,
193
+ * and timing data for fraud detection and audit logs.
194
+ *
195
+ * @param attemptId The attempt ID from `createAttempt()`.
196
+ * @param events Array of event objects with `category`, `description`,
197
+ * `timestamp` (Unix ms), and optionally `currentState`.
198
+ */
199
+ appendEvents(attemptId, events) {
200
+ return this.postEncrypted(this.attemptUrl(attemptId, '/events'), events);
201
+ }
202
+ /**
203
+ * Upload a media file to an attempt using `multipart/form-data`.
204
+ *
205
+ * Do not set `Content-Type` manually — it is set automatically by
206
+ * `FormData` with the correct boundary.
207
+ *
208
+ * @example
209
+ * const attempt = await session.createAttempt();
210
+ * const media = await session.uploadMedia(attempt.id, {
211
+ * file: capturedBlob,
212
+ * mediaType: 'document-front',
213
+ * mimeType: 'image/jpeg',
214
+ * filename: 'front.jpg',
215
+ * stepId: 'id-verification',
216
+ * });
217
+ */
218
+ async uploadMedia(attemptId, input) {
219
+ const form = new FormData();
220
+ form.append('file', input.file, input.filename);
221
+ form.append('mediaType', input.mediaType);
222
+ if (input.selectedDocumentTypeId) {
223
+ form.append('selectedDocumentTypeId', input.selectedDocumentTypeId);
224
+ }
225
+ if (input.stepId)
226
+ form.append('stepId', input.stepId);
227
+ if (input.metadata)
228
+ form.append('metadata', JSON.stringify(input.metadata));
229
+ return this.doFetch(this.attemptUrl(attemptId, '/media'), {
230
+ method: 'POST',
231
+ headers: this.authHeaders,
232
+ body: form,
233
+ });
234
+ }
235
+ /**
236
+ * Upload random liveness frames for anti-spoofing checks.
237
+ * Frames are appended to the attempt — existing frames are never replaced.
238
+ *
239
+ * @param attemptId The attempt ID.
240
+ * @param frames Base64-encoded JPEG strings (data URLs or raw base64).
241
+ */
242
+ uploadRandomFrames(attemptId, frames) {
243
+ return this.postEncrypted(this.attemptUrl(attemptId, '/random-frames'), { frames });
244
+ }
245
+ /**
246
+ * Retrieve all media items associated with an attempt.
247
+ */
248
+ getAttemptMedia(attemptId) {
249
+ return this.get(this.attemptUrl(attemptId, '/media'));
250
+ }
251
+ // ── Aadhaar verification ──────────────────────────────────────────────────
252
+ /**
253
+ * Initiate Aadhaar OTP generation for a 12-digit Aadhaar number.
254
+ * Returns a `referenceId` to pass to `verifyAadhaarOtp()`.
255
+ */
256
+ generateAadhaarOtp(aadhaarNumber) {
257
+ return this.postEncrypted(this.sessionUrl('/aadhaar/generate-otp'), { aadhaarNumber });
258
+ }
259
+ /**
260
+ * Verify the OTP received on the Aadhaar-registered mobile number.
261
+ *
262
+ * @param otp The 6-digit OTP from the SMS.
263
+ * @param referenceId The `referenceId` returned by `generateAadhaarOtp()`.
264
+ */
265
+ verifyAadhaarOtp(otp, referenceId) {
266
+ return this.postEncrypted(this.sessionUrl('/aadhaar/verify-otp'), { otp, referenceId });
267
+ }
268
+ }
269
+ exports.DossiersKycSession = DossiersKycSession;
270
+ // ── CryptoJS-compatible AES-CBC encryption ────────────────────────────────
271
+ //
272
+ // Produces output matching CryptoJS.AES.encrypt(JSON.stringify(data), passphrase).toString()
273
+ // so the server can decrypt with CryptoJS.AES.decrypt(payload, KYC_PAYLOAD_DECRYPTION_KEY).
274
+ //
275
+ // Uses Web Crypto (available in Node.js 18+ and all modern browsers) plus an
276
+ // inline MD5 implementation for EVP_BytesToKey — no additional dependencies.
277
+ //
278
+ // Output format: base64("Salted__" + 8-byte-salt + AES-256-CBC-ciphertext)
279
+ async function aesEncrypt(data, passphrase) {
280
+ const enc = new TextEncoder();
281
+ const salt = globalThis.crypto.getRandomValues(new Uint8Array(8));
282
+ const { key, iv } = evpBytesToKey(enc.encode(passphrase), salt);
283
+ const cryptoKey = await globalThis.crypto.subtle.importKey('raw', key, { name: 'AES-CBC' }, false, ['encrypt']);
284
+ const ciphertext = new Uint8Array(await globalThis.crypto.subtle.encrypt({ name: 'AES-CBC', iv }, cryptoKey, enc.encode(JSON.stringify(data))));
285
+ const out = new Uint8Array(16 + ciphertext.length);
286
+ out.set([83, 97, 108, 116, 101, 100, 95, 95], 0); // "Salted__"
287
+ out.set(salt, 8);
288
+ out.set(ciphertext, 16);
289
+ return btoa(Array.from(out, b => String.fromCharCode(b)).join(''));
290
+ }
291
+ // EVP_BytesToKey: CryptoJS's key+IV derivation from a passphrase and salt.
292
+ // Iterates: D_n = MD5(D_{n-1} || passphrase || salt) until 48 bytes collected.
293
+ // key = first 32 bytes, iv = next 16 bytes.
294
+ function evpBytesToKey(pass, salt) {
295
+ const material = [];
296
+ let prev = new Uint8Array(0);
297
+ while (material.length < 48) {
298
+ const block = new Uint8Array([...prev, ...pass, ...salt]);
299
+ prev = md5(block);
300
+ material.push(...prev);
301
+ }
302
+ return {
303
+ key: new Uint8Array(material.slice(0, 32)),
304
+ iv: new Uint8Array(material.slice(32, 48)),
305
+ };
306
+ }
307
+ // RFC 1321 MD5 — compact implementation for EVP_BytesToKey.
308
+ // Only used internally; not exported.
309
+ const MD5_S = [
310
+ 7, 12, 17, 22, 7, 12, 17, 22, 7, 12, 17, 22, 7, 12, 17, 22,
311
+ 5, 9, 14, 20, 5, 9, 14, 20, 5, 9, 14, 20, 5, 9, 14, 20,
312
+ 4, 11, 16, 23, 4, 11, 16, 23, 4, 11, 16, 23, 4, 11, 16, 23,
313
+ 6, 10, 15, 21, 6, 10, 15, 21, 6, 10, 15, 21, 6, 10, 15, 21,
314
+ ];
315
+ const MD5_K = Array.from({ length: 64 }, (_, i) => Math.floor(Math.abs(Math.sin(i + 1)) * 2 ** 32) >>> 0);
316
+ function md5(data) {
317
+ const r = data.length % 64;
318
+ const padZeros = (55 - r + 64) % 64;
319
+ const padded = new Uint8Array(data.length + 1 + padZeros + 8);
320
+ padded.set(data);
321
+ padded[data.length] = 0x80;
322
+ const dv = new DataView(padded.buffer);
323
+ const bitLen = data.length * 8;
324
+ dv.setUint32(padded.length - 8, bitLen >>> 0, true);
325
+ dv.setUint32(padded.length - 4, Math.floor(bitLen / 2 ** 32), true);
326
+ let h0 = 0x67452301;
327
+ let h1 = 0xefcdab89;
328
+ let h2 = 0x98badcfe;
329
+ let h3 = 0x10325476;
330
+ for (let i = 0; i < padded.length; i += 64) {
331
+ const M = Array.from({ length: 16 }, (_, j) => dv.getUint32(i + j * 4, true));
332
+ let a = h0, b = h1, c = h2, d = h3;
333
+ for (let j = 0; j < 64; j++) {
334
+ let f, g;
335
+ if (j < 16) {
336
+ f = (b & c) | (~b & d);
337
+ g = j;
338
+ }
339
+ else if (j < 32) {
340
+ f = (d & b) | (~d & c);
341
+ g = (5 * j + 1) % 16;
342
+ }
343
+ else if (j < 48) {
344
+ f = b ^ c ^ d;
345
+ g = (3 * j + 5) % 16;
346
+ }
347
+ else {
348
+ f = c ^ (b | ~d);
349
+ g = (7 * j) % 16;
350
+ }
351
+ const t = (a + (f >>> 0) + MD5_K[j] + M[g]) >>> 0;
352
+ const s = MD5_S[j];
353
+ a = d;
354
+ d = c;
355
+ c = b;
356
+ b = (b + ((t << s) | (t >>> (32 - s)))) >>> 0;
357
+ }
358
+ h0 = (h0 + a) >>> 0;
359
+ h1 = (h1 + b) >>> 0;
360
+ h2 = (h2 + c) >>> 0;
361
+ h3 = (h3 + d) >>> 0;
362
+ }
363
+ const result = new Uint8Array(16);
364
+ const rv = new DataView(result.buffer);
365
+ rv.setUint32(0, h0, true);
366
+ rv.setUint32(4, h1, true);
367
+ rv.setUint32(8, h2, true);
368
+ rv.setUint32(12, h3, true);
369
+ return result;
370
+ }
371
+ function safeJsonParse(raw) {
372
+ try {
373
+ return JSON.parse(raw);
374
+ }
375
+ catch {
376
+ return raw;
377
+ }
378
+ }
379
+ //# sourceMappingURL=session.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"session.js","sourceRoot":"","sources":["../../src/session.ts"],"names":[],"mappings":";;;AAAA,yCAA8C;AA6B9C;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AACH,MAAa,kBAAkB;IAO3B,YAAY,OAAkC;QAC1C,IAAI,CAAC,SAAS,GAAG,OAAO,CAAC,SAAS,CAAC;QACnC,IAAI,CAAC,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC;QAC3B,IAAI,CAAC,aAAa,GAAG,OAAO,CAAC,aAAa,CAAC;QAC3C,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC,OAAO,IAAI,2BAA2B,CAAC;QAC9D,IAAI,CAAC,SAAS,GAAG,OAAO,CAAC,KAAK,IAAI,UAAU,CAAC,KAAK,CAAC;IACvD,CAAC;IAED;;;OAGG;IACH,MAAM,CAAC,IAAI,CACP,MAAiC,EACjC,IAAuE;QAEvE,OAAO,IAAI,kBAAkB,CAAC;YAC1B,SAAS,EAAE,MAAM,CAAC,OAAO,CAAC,EAAE;YAC5B,KAAK,EAAE,MAAM,CAAC,KAAK;YACnB,aAAa,EAAE,IAAI,CAAC,aAAa;YACjC,OAAO,EAAE,IAAI,CAAC,OAAO;YACrB,KAAK,EAAE,IAAI,CAAC,KAAK;SACpB,CAAC,CAAC;IACP,CAAC;IAED,6EAA6E;IAErE,UAAU,CAAC,MAAM,GAAG,EAAE,EAAE,MAA+B;QAC3D,MAAM,CAAC,GAAG,IAAI,GAAG,CAAC,GAAG,IAAI,CAAC,OAAO,gBAAgB,IAAI,CAAC,SAAS,GAAG,MAAM,EAAE,CAAC,CAAC;QAC5E,CAAC,CAAC,YAAY,CAAC,GAAG,CAAC,OAAO,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC;QACxC,IAAI,MAAM,EAAE,CAAC;YACT,KAAK,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC;gBAAE,CAAC,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;QAC1E,CAAC;QACD,OAAO,CAAC,CAAC,QAAQ,EAAE,CAAC;IACxB,CAAC;IAEO,UAAU,CAAC,SAAiB,EAAE,MAAM,GAAG,EAAE;QAC7C,MAAM,CAAC,GAAG,IAAI,GAAG,CACb,GAAG,IAAI,CAAC,OAAO,gBAAgB,IAAI,CAAC,SAAS,YAAY,SAAS,GAAG,MAAM,EAAE,CAChF,CAAC;QACF,CAAC,CAAC,YAAY,CAAC,GAAG,CAAC,OAAO,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC;QACxC,OAAO,CAAC,CAAC,QAAQ,EAAE,CAAC;IACxB,CAAC;IAED,IAAY,WAAW;QACnB,OAAO,EAAE,aAAa,EAAE,UAAU,IAAI,CAAC,KAAK,EAAE,EAAE,CAAC;IACrD,CAAC;IAEO,KAAK,CAAC,OAAO,CAAI,GAAW,EAAE,IAAiB;QACnD,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,SAAS,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;QAC5C,MAAM,GAAG,GAAG,MAAM,GAAG,CAAC,IAAI,EAAE,CAAC;QAC7B,MAAM,MAAM,GAAY,GAAG,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;QACxE,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC;YACV,MAAM,OAAO,GACT,CAAC,MAAM,IAAI,OAAO,MAAM,KAAK,QAAQ,IAAI,SAAS,IAAI,MAAM;gBACxD,CAAC,CAAC,MAAM,CAAE,MAA+B,CAAC,OAAO,CAAC;gBAClD,CAAC,CAAC,IAAI,CAAC,IAAI,eAAe,IAAI,CAAC,MAAM,IAAI,KAAK,YAAY,GAAG,CAAC,MAAM,EAAE,CAAC;YAC/E,MAAM,IAAI,2BAAgB,CAAC,GAAG,CAAC,MAAM,EAAE,OAAO,EAAE,MAAM,IAAI,GAAG,CAAC,CAAC;QACnE,CAAC;QACD,OAAO,MAAW,CAAC;IACvB,CAAC;IAEO,GAAG,CAAI,GAAW;QACtB,OAAO,IAAI,CAAC,OAAO,CAAI,GAAG,EAAE;YACxB,MAAM,EAAE,KAAK;YACb,OAAO,EAAE,EAAE,GAAG,IAAI,CAAC,WAAW,EAAE,MAAM,EAAE,kBAAkB,EAAE;SAC/D,CAAC,CAAC;IACP,CAAC;IAEO,IAAI,CAAI,GAAW,EAAE,IAAa;QACtC,OAAO,IAAI,CAAC,OAAO,CAAI,GAAG,EAAE;YACxB,MAAM,EAAE,MAAM;YACd,OAAO,EAAE;gBACL,GAAG,IAAI,CAAC,WAAW;gBACnB,MAAM,EAAE,kBAAkB;gBAC1B,GAAG,CAAC,IAAI,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,cAAc,EAAE,kBAAkB,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;aACxE;YACD,IAAI;SACP,CAAC,CAAC;IACP,CAAC;IAEO,KAAK,CAAI,GAAW,EAAE,IAAY;QACtC,OAAO,IAAI,CAAC,OAAO,CAAI,GAAG,EAAE;YACxB,MAAM,EAAE,OAAO;YACf,OAAO,EAAE;gBACL,GAAG,IAAI,CAAC,WAAW;gBACnB,cAAc,EAAE,kBAAkB;gBAClC,MAAM,EAAE,kBAAkB;aAC7B;YACD,IAAI;SACP,CAAC,CAAC;IACP,CAAC;IAEO,KAAK,CAAC,aAAa,CAAI,GAAW,EAAE,IAAa;QACrD,MAAM,OAAO,GAAG,MAAM,UAAU,CAAC,IAAI,EAAE,IAAI,CAAC,aAAa,CAAC,CAAC;QAC3D,OAAO,IAAI,CAAC,IAAI,CAAI,GAAG,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,OAAO,EAAE,CAAC,CAAC,CAAC;IAC1D,CAAC;IAED,6EAA6E;IAE7E;;;OAGG;IACH,QAAQ;QACJ,OAAO,IAAI,CAAC,GAAG,CAA4B,IAAI,CAAC,UAAU,EAAE,CAAC,CAAC;IAClE,CAAC;IAED;;;OAGG;IACH,SAAS;QACL,OAAO,IAAI,CAAC,GAAG,CAA2B,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC,CAAC;IAC1E,CAAC;IAED;;OAEG;IACH,QAAQ;QACJ,OAAO,IAAI,CAAC,GAAG,CAA0B,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC,CAAC;IACxE,CAAC;IAED,6EAA6E;IAE7E;;;;;;OAMG;IACH,KAAK,CAAC,QAAQ,CAAC,KAAa,EAAE,KAAK,GAAG,KAAK;QACvC,MAAM,IAAI,CAAC,aAAa,CACpB,IAAI,CAAC,UAAU,CAAC,WAAW,EAAE,KAAK,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC,EACnE,EAAE,KAAK,EAAE,CACZ,CAAC;IACN,CAAC;IAED;;;;OAIG;IACH,UAAU,CAAC,KAAa;QACpB,OAAO,IAAI,CAAC,IAAI,CAAuB,IAAI,CAAC,UAAU,CAAC,aAAa,EAAE,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC;IACtF,CAAC;IAED,6EAA6E;IAE7E;;;;;OAKG;IACH,KAAK,CAAC,MAAM,CAAC,IAA6B;QACtC,MAAM,OAAO,GAAG,MAAM,UAAU,CAAC,IAAI,EAAE,IAAI,CAAC,aAAa,CAAC,CAAC;QAC3D,OAAO,IAAI,CAAC,KAAK,CACb,IAAI,CAAC,UAAU,EAAE,EACjB,IAAI,CAAC,SAAS,CAAC,EAAE,OAAO,EAAE,CAAC,CAC9B,CAAC;IACN,CAAC;IAED;;OAEG;IACH,QAAQ;QACJ,OAAO,IAAI,CAAC,IAAI,CAA4B,IAAI,CAAC,UAAU,CAAC,WAAW,CAAC,CAAC,CAAC;IAC9E,CAAC;IAED;;;;;;OAMG;IACH,cAAc,CACV,MAAc,EACd,QAAiC,EACjC,SAAS,GAAG,KAAK;QAEjB,OAAO,IAAI,CAAC,aAAa,CACrB,IAAI,CAAC,UAAU,CAAC,YAAY,EAAE,SAAS,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC,EAC5E,EAAE,MAAM,EAAE,QAAQ,EAAE,CACvB,CAAC;IACN,CAAC;IAED,6EAA6E;IAE7E;;;OAGG;IACH,aAAa;QACT,OAAO,IAAI,CAAC,IAAI,CAAmB,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC,CAAC,CAAC;IACpE,CAAC;IAED;;;;;;;OAOG;IACH,YAAY,CAAC,SAAiB,EAAE,MAAiB;QAC7C,OAAO,IAAI,CAAC,aAAa,CACrB,IAAI,CAAC,UAAU,CAAC,SAAS,EAAE,SAAS,CAAC,EACrC,MAAM,CACT,CAAC;IACN,CAAC;IAED;;;;;;;;;;;;;;;OAeG;IACH,KAAK,CAAC,WAAW,CAAC,SAAiB,EAAE,KAA0B;QAC3D,MAAM,IAAI,GAAG,IAAI,QAAQ,EAAE,CAAC;QAC5B,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC,QAAQ,CAAC,CAAC;QAChD,IAAI,CAAC,MAAM,CAAC,WAAW,EAAE,KAAK,CAAC,SAAS,CAAC,CAAC;QAC1C,IAAI,KAAK,CAAC,sBAAsB,EAAE,CAAC;YAC/B,IAAI,CAAC,MAAM,CAAC,wBAAwB,EAAE,KAAK,CAAC,sBAAsB,CAAC,CAAC;QACxE,CAAC;QACD,IAAI,KAAK,CAAC,MAAM;YAAE,IAAI,CAAC,MAAM,CAAC,QAAQ,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC;QACtD,IAAI,KAAK,CAAC,QAAQ;YAAE,IAAI,CAAC,MAAM,CAAC,UAAU,EAAE,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC;QAE5E,OAAO,IAAI,CAAC,OAAO,CAAkB,IAAI,CAAC,UAAU,CAAC,SAAS,EAAE,QAAQ,CAAC,EAAE;YACvE,MAAM,EAAE,MAAM;YACd,OAAO,EAAE,IAAI,CAAC,WAAW;YACzB,IAAI,EAAE,IAAI;SACb,CAAC,CAAC;IACP,CAAC;IAED;;;;;;OAMG;IACH,kBAAkB,CAAC,SAAiB,EAAE,MAAgB;QAClD,OAAO,IAAI,CAAC,aAAa,CACrB,IAAI,CAAC,UAAU,CAAC,SAAS,EAAE,gBAAgB,CAAC,EAC5C,EAAE,MAAM,EAAE,CACb,CAAC;IACN,CAAC;IAED;;OAEG;IACH,eAAe,CAAC,SAAiB;QAC7B,OAAO,IAAI,CAAC,GAAG,CAAoB,IAAI,CAAC,UAAU,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAC,CAAC;IAC7E,CAAC;IAED,6EAA6E;IAE7E;;;OAGG;IACH,kBAAkB,CAAC,aAAqB;QACpC,OAAO,IAAI,CAAC,aAAa,CACrB,IAAI,CAAC,UAAU,CAAC,uBAAuB,CAAC,EACxC,EAAE,aAAa,EAAE,CACpB,CAAC;IACN,CAAC;IAED;;;;;OAKG;IACH,gBAAgB,CAAC,GAAW,EAAE,WAAmB;QAC7C,OAAO,IAAI,CAAC,aAAa,CACrB,IAAI,CAAC,UAAU,CAAC,qBAAqB,CAAC,EACtC,EAAE,GAAG,EAAE,WAAW,EAAE,CACvB,CAAC;IACN,CAAC;CACJ;AA5SD,gDA4SC;AAED,6EAA6E;AAC7E,EAAE;AACF,6FAA6F;AAC7F,4FAA4F;AAC5F,EAAE;AACF,6EAA6E;AAC7E,6EAA6E;AAC7E,EAAE;AACF,2EAA2E;AAE3E,KAAK,UAAU,UAAU,CAAC,IAAa,EAAE,UAAkB;IACvD,MAAM,GAAG,GAAG,IAAI,WAAW,EAAE,CAAC;IAC9B,MAAM,IAAI,GAAG,UAAU,CAAC,MAAM,CAAC,eAAe,CAAC,IAAI,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC;IAClE,MAAM,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,aAAa,CAAC,GAAG,CAAC,MAAM,CAAC,UAAU,CAAC,EAAE,IAAI,CAAC,CAAC;IAEhE,MAAM,SAAS,GAAG,MAAM,UAAU,CAAC,MAAM,CAAC,MAAM,CAAC,SAAS,CACtD,KAAK,EAAE,GAAG,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,EAAE,KAAK,EAAE,CAAC,SAAS,CAAC,CACtD,CAAC;IACF,MAAM,UAAU,GAAG,IAAI,UAAU,CAC7B,MAAM,UAAU,CAAC,MAAM,CAAC,MAAM,CAAC,OAAO,CAClC,EAAE,IAAI,EAAE,SAAS,EAAE,EAAE,EAAE,EACvB,SAAS,EACT,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CACnC,CACJ,CAAC;IAEF,MAAM,GAAG,GAAG,IAAI,UAAU,CAAC,EAAE,GAAG,UAAU,CAAC,MAAM,CAAC,CAAC;IACnD,GAAG,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,aAAa;IAC/D,GAAG,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;IACjB,GAAG,CAAC,GAAG,CAAC,UAAU,EAAE,EAAE,CAAC,CAAC;IAExB,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC;AACvE,CAAC;AAED,2EAA2E;AAC3E,+EAA+E;AAC/E,4CAA4C;AAC5C,SAAS,aAAa,CAAC,IAAgB,EAAE,IAAgB;IACrD,MAAM,QAAQ,GAAa,EAAE,CAAC;IAC9B,IAAI,IAAI,GAAG,IAAI,UAAU,CAAC,CAAC,CAAC,CAAC;IAC7B,OAAO,QAAQ,CAAC,MAAM,GAAG,EAAE,EAAE,CAAC;QAC1B,MAAM,KAAK,GAAG,IAAI,UAAU,CAAC,CAAC,GAAG,IAAI,EAAE,GAAG,IAAI,EAAE,GAAG,IAAI,CAAC,CAAC,CAAC;QAC1D,IAAI,GAAG,GAAG,CAAC,KAAK,CAAC,CAAC;QAClB,QAAQ,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,CAAC;IAC3B,CAAC;IACD,OAAO;QACH,GAAG,EAAE,IAAI,UAAU,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;QAC1C,EAAE,EAAE,IAAI,UAAU,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;KAC7C,CAAC;AACN,CAAC;AAED,4DAA4D;AAC5D,sCAAsC;AACtC,MAAM,KAAK,GAAG;IACV,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE;IAC1D,CAAC,EAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAG,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAG,CAAC,EAAE,EAAE,EAAE,EAAE;IAC1D,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE;IAC1D,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE;CAC7D,CAAC;AACF,MAAM,KAAK,GAAG,KAAK,CAAC,IAAI,CACpB,EAAE,MAAM,EAAE,EAAE,EAAE,EACd,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,CAClE,CAAC;AAEF,SAAS,GAAG,CAAC,IAAgB;IACzB,MAAM,CAAC,GAAG,IAAI,CAAC,MAAM,GAAG,EAAE,CAAC;IAC3B,MAAM,QAAQ,GAAG,CAAC,EAAE,GAAG,CAAC,GAAG,EAAE,CAAC,GAAG,EAAE,CAAC;IACpC,MAAM,MAAM,GAAG,IAAI,UAAU,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,GAAG,QAAQ,GAAG,CAAC,CAAC,CAAC;IAC9D,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;IACjB,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,IAAI,CAAC;IAC3B,MAAM,EAAE,GAAG,IAAI,QAAQ,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;IACvC,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC;IAC/B,EAAE,CAAC,SAAS,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,MAAM,KAAK,CAAC,EAAE,IAAI,CAAC,CAAC;IACpD,EAAE,CAAC,SAAS,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,IAAI,EAAE,CAAC,EAAE,IAAI,CAAC,CAAC;IAEpE,IAAI,EAAE,GAAG,UAAU,CAAC;IACpB,IAAI,EAAE,GAAG,UAAU,CAAC;IACpB,IAAI,EAAE,GAAG,UAAU,CAAC;IACpB,IAAI,EAAE,GAAG,UAAU,CAAC;IAEpB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC;QACzC,MAAM,CAAC,GAAG,KAAK,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC,SAAS,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC;QAC9E,IAAI,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,EAAE,CAAC;QAEnC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC;YAC1B,IAAI,CAAS,EAAE,CAAS,CAAC;YACzB,IAAI,CAAC,GAAG,EAAE,EAAO,CAAC;gBAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;gBAAC,CAAC,GAAG,CAAC,CAAC;YAAC,CAAC;iBAC9C,IAAI,CAAC,GAAG,EAAE,EAAE,CAAC;gBAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;gBAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,CAAC;YAAC,CAAC;iBAC7D,IAAI,CAAC,GAAG,EAAE,EAAE,CAAC;gBAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;gBAAW,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,CAAC;YAAC,CAAC;iBACjD,CAAC;gBAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;gBAAQ,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,CAAC;YAAC,CAAC;YAEhE,MAAM,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;YAClD,MAAM,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;YACnB,CAAC,GAAG,CAAC,CAAC;YAAC,CAAC,GAAG,CAAC,CAAC;YAAC,CAAC,GAAG,CAAC,CAAC;YACpB,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;QAClD,CAAC;QAED,EAAE,GAAG,CAAC,EAAE,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC;QACpB,EAAE,GAAG,CAAC,EAAE,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC;QACpB,EAAE,GAAG,CAAC,EAAE,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC;QACpB,EAAE,GAAG,CAAC,EAAE,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC;IACxB,CAAC;IAED,MAAM,MAAM,GAAG,IAAI,UAAU,CAAC,EAAE,CAAC,CAAC;IAClC,MAAM,EAAE,GAAG,IAAI,QAAQ,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;IACvC,EAAE,CAAC,SAAS,CAAC,CAAC,EAAE,EAAE,EAAE,IAAI,CAAC,CAAC;IAC1B,EAAE,CAAC,SAAS,CAAC,CAAC,EAAE,EAAE,EAAE,IAAI,CAAC,CAAC;IAC1B,EAAE,CAAC,SAAS,CAAC,CAAC,EAAE,EAAE,EAAE,IAAI,CAAC,CAAC;IAC1B,EAAE,CAAC,SAAS,CAAC,EAAE,EAAE,EAAE,EAAE,IAAI,CAAC,CAAC;IAC3B,OAAO,MAAM,CAAC;AAClB,CAAC;AAED,SAAS,aAAa,CAAC,GAAW;IAC9B,IAAI,CAAC;QAAC,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IAAC,CAAC;IAAC,MAAM,CAAC;QAAC,OAAO,GAAG,CAAC;IAAC,CAAC;AACzD,CAAC"}
@@ -0,0 +1,36 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.DossiersWebhookEventTypes = void 0;
4
+ var DossiersWebhookEventTypes;
5
+ (function (DossiersWebhookEventTypes) {
6
+ DossiersWebhookEventTypes["DOCUMENT_VERIFICATION_INSTANCE_CREATED"] = "documentVerification.instance.created";
7
+ DossiersWebhookEventTypes["DOCUMENT_VERIFICATION_INSTANCE_UPDATED"] = "documentVerification.instance.updated";
8
+ DossiersWebhookEventTypes["DOCUMENT_VERIFICATION_INSTANCE_COMPLETED"] = "documentVerification.instance.completed";
9
+ DossiersWebhookEventTypes["DOCUMENT_VERIFICATION_INSTANCE_DELETED"] = "documentVerification.instance.deleted";
10
+ DossiersWebhookEventTypes["AML_SCREENING_REQUEST_CREATED"] = "amlScreening.screeningRequest.created";
11
+ DossiersWebhookEventTypes["AML_SCREENING_REQUEST_COMPLETED"] = "amlScreening.screeningRequest.completed";
12
+ DossiersWebhookEventTypes["AML_SCREENING_ALERT_TRIGGERED"] = "amlScreening.screeningAlert.triggered";
13
+ DossiersWebhookEventTypes["AML_SCREENING_ALERT_STATUS_CHANGED"] = "amlScreening.screeningAlert.statusChanged";
14
+ DossiersWebhookEventTypes["AML_SCREENING_ALERT_COMMENT_ADDED"] = "amlScreening.screeningAlert.commentAdded";
15
+ DossiersWebhookEventTypes["AML_SCREENING_ALERT_COMMENT_UPDATED"] = "amlScreening.screeningAlert.commentUpdated";
16
+ DossiersWebhookEventTypes["AML_SCREENING_ALERT_COMMENT_DELETED"] = "amlScreening.screeningAlert.commentDeleted";
17
+ DossiersWebhookEventTypes["AML_SCREENING_ALERT_DELETED"] = "amlScreening.screeningAlert.deleted";
18
+ DossiersWebhookEventTypes["KYC_SESSION_CREATED"] = "kycSessions.session.created";
19
+ DossiersWebhookEventTypes["KYC_SESSION_UPDATED"] = "kycSessions.session.updated";
20
+ DossiersWebhookEventTypes["KYC_SESSION_COMPLETED"] = "kycSessions.session.completed";
21
+ DossiersWebhookEventTypes["KYC_SESSION_REVIEWED"] = "kycSessions.session.reviewed";
22
+ DossiersWebhookEventTypes["KYC_SESSION_DELETED"] = "kycSessions.session.deleted";
23
+ DossiersWebhookEventTypes["KYC_STEP_COMPLETED"] = "kycSessions.step.completed";
24
+ DossiersWebhookEventTypes["KYC_STEP_FAILED"] = "kycSessions.step.failed";
25
+ DossiersWebhookEventTypes["KYC_SESSION_COMMENT_ADDED"] = "kycSessions.session.commentAdded";
26
+ DossiersWebhookEventTypes["KYC_SESSION_COMMENT_UPDATED"] = "kycSessions.session.commentUpdated";
27
+ DossiersWebhookEventTypes["KYC_SESSION_COMMENT_DELETED"] = "kycSessions.session.commentDeleted";
28
+ DossiersWebhookEventTypes["SYSTEM_TEST_EVENT"] = "system.testEvent";
29
+ DossiersWebhookEventTypes["SYSTEM_PRODUCT_ACCESS_GRANTED"] = "system.product.accessGranted";
30
+ DossiersWebhookEventTypes["SYSTEM_PRODUCT_ACCESS_REVOKED"] = "system.product.accessRevoked";
31
+ DossiersWebhookEventTypes["SYSTEM_API_KEY_CREATED"] = "system.apiKey.created";
32
+ DossiersWebhookEventTypes["SYSTEM_API_KEY_INVALIDATED"] = "system.apiKey.invalidated";
33
+ DossiersWebhookEventTypes["SYSTEM_USAGE_LIMIT_REACHED"] = "system.usage.limitReached";
34
+ DossiersWebhookEventTypes["SYSTEM_USAGE_LIMIT_WARNING"] = "system.usage.limitWarning";
35
+ })(DossiersWebhookEventTypes || (exports.DossiersWebhookEventTypes = DossiersWebhookEventTypes = {}));
36
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/types.ts"],"names":[],"mappings":";;;AAAA,IAAY,yBAiCX;AAjCD,WAAY,yBAAyB;IACjC,6GAAgF,CAAA;IAChF,6GAAgF,CAAA;IAChF,iHAAoF,CAAA;IACpF,6GAAgF,CAAA;IAEhF,oGAAuE,CAAA;IACvE,wGAA2E,CAAA;IAC3E,oGAAuE,CAAA;IACvE,6GAAgF,CAAA;IAChF,2GAA8E,CAAA;IAC9E,+GAAkF,CAAA;IAClF,+GAAkF,CAAA;IAClF,gGAAmE,CAAA;IAEnE,gFAAmD,CAAA;IACnD,gFAAmD,CAAA;IACnD,oFAAuD,CAAA;IACvD,kFAAqD,CAAA;IACrD,gFAAmD,CAAA;IACnD,8EAAiD,CAAA;IACjD,wEAA2C,CAAA;IAC3C,2FAA8D,CAAA;IAC9D,+FAAkE,CAAA;IAClE,+FAAkE,CAAA;IAElE,mEAAsC,CAAA;IACtC,2FAA8D,CAAA;IAC9D,2FAA8D,CAAA;IAC9D,6EAAgD,CAAA;IAChD,qFAAwD,CAAA;IACxD,qFAAwD,CAAA;IACxD,qFAAwD,CAAA;AAC5D,CAAC,EAjCW,yBAAyB,yCAAzB,yBAAyB,QAiCpC"}
@@ -0,0 +1,93 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.DossiersWebhookRouter = void 0;
4
+ const types_js_1 = require("./types.js");
5
+ class DossiersWebhookRouter {
6
+ constructor(secret) {
7
+ this.handlers = new Map();
8
+ this.keyPromise = crypto.subtle.importKey('raw', DossiersWebhookRouter.encoder.encode(secret), { name: 'HMAC', hash: 'SHA-256' }, false, ['sign']);
9
+ }
10
+ on(eventType, handler) {
11
+ this.handlers.set(eventType, handler);
12
+ return this;
13
+ }
14
+ /**
15
+ * Verify the signature and acknowledge the webhook with `200 ok` *before*
16
+ * the handler runs. The handler is dispatched asynchronously so a slow
17
+ * downstream call cannot cause a timeout and retry.
18
+ *
19
+ * Trade-off: because we ack before the handler executes, a handler that
20
+ * throws will NOT trigger an automatic retry — you own retries inside the
21
+ * handler. Failures are logged via `console.error`.
22
+ *
23
+ * On serverless runtimes that freeze execution after the response is sent
24
+ * (Vercel Functions, Cloudflare Workers), pass `opts.waitUntil` so the
25
+ * runtime keeps the handler alive past the response.
26
+ */
27
+ async handle(req, opts = {}) {
28
+ const { valid, raw } = await this.verify(req);
29
+ if (!valid)
30
+ return new Response('Invalid signature', { status: 401 });
31
+ const eventId = req.headers.get(DossiersWebhookRouter.EVENT_ID_HEADER);
32
+ const eventType = req.headers.get(DossiersWebhookRouter.EVENT_TYPE_HEADER);
33
+ const retryCount = req.headers.get(DossiersWebhookRouter.RETRY_COUNT_HEADER);
34
+ console.log(`Event ID: ${eventId}, Event Type: ${eventType}, Retry Count: ${retryCount}`);
35
+ if (!eventType ||
36
+ !Object.values(types_js_1.DossiersWebhookEventTypes).includes(eventType)) {
37
+ console.error('Invalid event type', eventType);
38
+ return new Response('Invalid event type', { status: 400 });
39
+ }
40
+ const handler = this.handlers.get(eventType);
41
+ if (!handler)
42
+ return new Response('ok');
43
+ let body;
44
+ try {
45
+ body = JSON.parse(raw);
46
+ }
47
+ catch (error) {
48
+ console.error('Webhook body is not valid JSON', error);
49
+ return new Response('Invalid body', { status: 400 });
50
+ }
51
+ const work = Promise.resolve()
52
+ .then(() => handler(body, { eventId, retryCount }))
53
+ .catch((error) => {
54
+ console.error(`Webhook handler for ${eventType} (event ${eventId ?? 'unknown'}) failed`, error);
55
+ });
56
+ if (opts.waitUntil)
57
+ opts.waitUntil(work);
58
+ return new Response('ok');
59
+ }
60
+ async verify(req) {
61
+ const raw = await req.text();
62
+ const signature = req.headers.get(DossiersWebhookRouter.SIGNATURE_HEADER);
63
+ if (!signature)
64
+ return { valid: false, raw };
65
+ const valid = await this.verifyHmacSha256(raw, signature);
66
+ return { valid, raw };
67
+ }
68
+ async verifyHmacSha256(payload, signature) {
69
+ const key = await this.keyPromise;
70
+ const sigBuf = await crypto.subtle.sign('HMAC', key, DossiersWebhookRouter.encoder.encode(payload));
71
+ const expected = Array.from(new Uint8Array(sigBuf))
72
+ .map((b) => b.toString(16).padStart(2, '0'))
73
+ .join('');
74
+ const provided = signature.replace(/^sha256=/, '').toLowerCase();
75
+ return DossiersWebhookRouter.timingSafeEqual(expected, provided);
76
+ }
77
+ static timingSafeEqual(a, b) {
78
+ if (a.length !== b.length)
79
+ return false;
80
+ let mismatch = 0;
81
+ for (let i = 0; i < a.length; i++) {
82
+ mismatch |= a.charCodeAt(i) ^ b.charCodeAt(i);
83
+ }
84
+ return mismatch === 0;
85
+ }
86
+ }
87
+ exports.DossiersWebhookRouter = DossiersWebhookRouter;
88
+ DossiersWebhookRouter.encoder = new TextEncoder();
89
+ DossiersWebhookRouter.SIGNATURE_HEADER = 'x-webhook-signature';
90
+ DossiersWebhookRouter.EVENT_ID_HEADER = 'x-webhook-event-id';
91
+ DossiersWebhookRouter.EVENT_TYPE_HEADER = 'x-webhook-event-type';
92
+ DossiersWebhookRouter.RETRY_COUNT_HEADER = 'x-webhook-retry-count';
93
+ //# sourceMappingURL=webhooks.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"webhooks.js","sourceRoot":"","sources":["../../src/webhooks.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,33 @@
1
+ /*
2
+ Dossiers REST API types.
3
+
4
+ Endpoints:
5
+ POST /sanctions/search searchSanctions
6
+ POST /high-risk/search searchDossiers
7
+ POST /screening/request createScreeningRequest
8
+ POST /kyc-sessions createKycSession
9
+ GET /kyc-sessions listKycSessions
10
+ GET /kyc-sessions/{id} getKycSession
11
+ DELETE /kyc-sessions/{id} deleteKycSession
12
+ POST /kyc-workflows createKycWorkflow
13
+ GET /kyc-workflows listKycWorkflows
14
+ GET /kyc-workflows/{id} getKycWorkflow
15
+ PUT /kyc-workflows/{id} updateKycWorkflow
16
+ DELETE /kyc-workflows/{id} deleteKycWorkflow
17
+ GET /kyc-workflows/step-defaults getWorkflowStepDefaults
18
+ POST /document-processing initiateDocumentProcessing
19
+ GET /document-processing listDocumentProcessingInstances
20
+ GET /document-processing/processors listDocumentProcessors
21
+ GET /document-processing/{id} getDocumentProcessingInstance
22
+ GET /document-processing/{id}/stages/{stageId} getDocumentProcessingStage
23
+ GET /document-processing/{id}/events streamDocumentProcessingEvents (SSE)
24
+ DELETE /document-processing/{id} deleteDocumentProcessingInstance
25
+ POST /form-templates createFormTemplate
26
+ GET /form-templates listFormTemplates
27
+ GET /form-templates/{id} getFormTemplate
28
+ PUT /form-templates/{id} updateFormTemplate
29
+ DELETE /form-templates/{id} deleteFormTemplate
30
+ GET /media/{token} getMedia (binary stream)
31
+ */
32
+ export {};
33
+ //# sourceMappingURL=api.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"api.js","sourceRoot":"","sources":["../../src/api.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EA8BE"}
@@ -0,0 +1,25 @@
1
+ /**
2
+ * Thrown by every SDK method when the Dossiers API returns a non-2xx status.
3
+ *
4
+ * @example
5
+ * ```ts
6
+ * import { DossiersAPIService, DossiersAPIError } from '@dossier-wiki/cloud-sdk';
7
+ *
8
+ * try {
9
+ * await service.aml.searchSanctions({ fullName: 'John Doe' });
10
+ * } catch (err) {
11
+ * if (err instanceof DossiersAPIError) {
12
+ * console.error(err.status, err.message, err.body);
13
+ * }
14
+ * }
15
+ * ```
16
+ */
17
+ export class DossiersAPIError extends Error {
18
+ constructor(status, message, body) {
19
+ super(message);
20
+ this.name = 'DossiersAPIError';
21
+ this.status = status;
22
+ this.body = body;
23
+ }
24
+ }
25
+ //# sourceMappingURL=error.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"error.js","sourceRoot":"","sources":["../../src/error.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AACH,MAAM,OAAO,gBAAiB,SAAQ,KAAK;IAMvC,YAAY,MAAc,EAAE,OAAe,EAAE,IAAa;QACtD,KAAK,CAAC,OAAO,CAAC,CAAC;QACf,IAAI,CAAC,IAAI,GAAG,kBAAkB,CAAC;QAC/B,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;QACrB,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;IACrB,CAAC;CACJ"}