@dataships/sdk 0.0.0-stage → 2.0.1

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/dist/server.js ADDED
@@ -0,0 +1,455 @@
1
+ var __typeError = (msg) => {
2
+ throw TypeError(msg);
3
+ };
4
+ var __accessCheck = (obj, member, msg) => member.has(obj) || __typeError("Cannot " + msg);
5
+ var __privateGet = (obj, member, getter) => (__accessCheck(obj, member, "read from private field"), member.get(obj));
6
+ var __privateAdd = (obj, member, value) => member.has(obj) ? __typeError("Cannot add the same private member more than once") : member instanceof WeakSet ? member.add(obj) : member.set(obj, value);
7
+ var __privateSet = (obj, member, value, setter) => (__accessCheck(obj, member, "write to private field"), member.set(obj, value), value);
8
+ var __privateMethod = (obj, member, method) => (__accessCheck(obj, member, "access private method"), method);
9
+
10
+ // src/auth/headers.ts
11
+ var SERVER_KEY_PREFIX = "ds_sk_";
12
+ var isServerKey = (key) => key.startsWith(SERVER_KEY_PREFIX);
13
+ var isServerKeyAuth = (auth) => "serverKey" in auth;
14
+ var isUnsafeServerKeyAuth = (auth) => "unsafeServerKey" in auth;
15
+ var assertServerAuth = (auth) => {
16
+ if (!auth.serverKey || !isServerKey(auth.serverKey)) {
17
+ throw new Error(
18
+ "DatashipsServerClient: a server key (ds_sk_\u2026) is required; public keys belong to DatashipsClient from '@dataships/sdk'"
19
+ );
20
+ }
21
+ };
22
+ var assertServerRuntime = () => {
23
+ if (typeof globalThis.window !== "undefined") {
24
+ throw new Error(
25
+ "DatashipsServerClient must not run in a browser (it would expose the server key); use DatashipsClient from '@dataships/sdk' with the public key and a merchant-signed token"
26
+ );
27
+ }
28
+ };
29
+ var authHeaders = (auth) => {
30
+ if (isUnsafeServerKeyAuth(auth)) return { "X-Api-Key": auth.unsafeServerKey };
31
+ return isServerKeyAuth(auth) ? { "X-Api-Key": auth.serverKey } : { "X-Api-Key": auth.publicKey, Authorization: `Bearer ${auth.token}` };
32
+ };
33
+
34
+ // src/baseUrl.ts
35
+ var PRODUCTION_BASE_URL = "https://api.dataships.io";
36
+ var resolveBaseUrl = (env = "production", baseUrl) => {
37
+ if (baseUrl) return baseUrl;
38
+ if (env === "production") return PRODUCTION_BASE_URL;
39
+ throw new Error(
40
+ `Dataships SDK: env "${env}" has no default base URL; pass \`baseUrl\``
41
+ );
42
+ };
43
+
44
+ // src/transport/retry.ts
45
+ var TERMINAL_STATUSES = /* @__PURE__ */ new Set([
46
+ 400,
47
+ 401,
48
+ 403,
49
+ 404,
50
+ 417,
51
+ 422,
52
+ 426
53
+ ]);
54
+ var isTerminalStatus = (status) => status !== void 0 && TERMINAL_STATUSES.has(status);
55
+ var CONSENT_SESSION_ALREADY_PROCESSED = "CONSENT_SESSION_ALREADY_PROCESSED";
56
+ var TERMINAL_ERROR_CODES = /* @__PURE__ */ new Set([
57
+ CONSENT_SESSION_ALREADY_PROCESSED
58
+ ]);
59
+ var isTerminalErrorCode = (errorCode) => errorCode !== void 0 && TERMINAL_ERROR_CODES.has(errorCode);
60
+ var MAX_FAILURES = 4;
61
+ var backoffMs = (failureCount) => failureCount >= MAX_FAILURES ? 0 : failureCount * 2e3;
62
+ var defaultRetryPolicy = {
63
+ shouldRetry: (failureCount, status, errorCode) => !isTerminalStatus(status) && !isTerminalErrorCode(errorCode) && failureCount < MAX_FAILURES,
64
+ delayMs: backoffMs
65
+ };
66
+ var upsertSessionRetryPolicy = defaultRetryPolicy;
67
+ var noRetryPolicy = {
68
+ shouldRetry: () => false,
69
+ delayMs: () => 0
70
+ };
71
+
72
+ // src/transport/errors.ts
73
+ var DatashipsError = class extends Error {
74
+ constructor(args) {
75
+ super(`Dataships request failed (${args.status || "network"})`);
76
+ this.name = "DatashipsError";
77
+ this.status = args.status;
78
+ this.body = args.body;
79
+ this.challenge = args.challenge ?? null;
80
+ this.code = errorCodeFromBody(args.body);
81
+ this.reason = reasonFromBody(args.body);
82
+ }
83
+ /** 401 (missing / refused credential) or 403 (unknown, revoked or disabled key). */
84
+ get isAuthenticationFailure() {
85
+ return this.status === 401 || this.status === 403;
86
+ }
87
+ /** 409 `CONSENT_SESSION_ALREADY_PROCESSED`: the session is closed; no later call on it can succeed. */
88
+ get isSessionProcessed() {
89
+ return this.code === CONSENT_SESSION_ALREADY_PROCESSED;
90
+ }
91
+ };
92
+ var errorCodeFromBody = (body) => {
93
+ if (typeof body !== "object" || body === null) return null;
94
+ const errors = body.errors;
95
+ if (!Array.isArray(errors)) return null;
96
+ const code = errors[0]?.code;
97
+ return typeof code === "string" ? code : null;
98
+ };
99
+ var reasonFromBody = (body) => {
100
+ if (typeof body !== "object" || body === null) return null;
101
+ const message = body.message;
102
+ return typeof message === "string" && message.length > 0 ? message : null;
103
+ };
104
+
105
+ // src/session/consentSession.ts
106
+ var CONSENT_SESSION_START_PATH = "/v1/consent-session";
107
+ var CONSENT_SESSION_CONSENT_PATH = "/v1/consent-session/consent";
108
+ var CONSENT_SESSION_HEARTBEAT_PATH = "/v1/consent-session/heartbeat";
109
+ var CONSENT_SESSION_TRIGGER_VERIFICATION_CODE_PATH = "/v1/consent-session/trigger-verification-code";
110
+ var CONSENT_SESSION_SUBMIT_VERIFICATION_CODE_PATH = "/v1/consent-session/submit-verification-code";
111
+ var CONSENT_SESSION_SUBMIT_PATH = "/v1/consent-session/submit";
112
+ var COUNTRY_NOT_FOUND_CODE = "COUNTRY_NOT_FOUND";
113
+ var SUBMIT_VERIFICATION_CODE_ERROR_CODES = [
114
+ "CODE_EXPIRED",
115
+ "CODE_INVALID",
116
+ "NUMBER_MAX_ATTEMPTS_EXCEEDED"
117
+ ];
118
+ var verificationErrorCodeFromBody = errorCodeFromBody;
119
+ var buildUpsertRequest = (args) => ({
120
+ identifier: args.identifier,
121
+ identifierType: args.identifierType,
122
+ locale: args.locale,
123
+ ...args.userIp ? { userIp: args.userIp } : {},
124
+ ...args.format ? { format: args.format } : {},
125
+ integration: {
126
+ ...args.context,
127
+ type: args.integrationType
128
+ }
129
+ });
130
+ var isCountryNotFound = (error) => error.status === 422 && error.code === COUNTRY_NOT_FOUND_CODE;
131
+ var emptyUpsertResponse = () => ({
132
+ consentSessionId: null,
133
+ consents: [],
134
+ userVerificationRequired: null,
135
+ lastHeartbeat: null,
136
+ identifier: null
137
+ });
138
+ var buildSaveConsentRequest = (args) => ({
139
+ consentSessionId: args.consentSessionId,
140
+ channel: args.channel,
141
+ consent: args.consent
142
+ });
143
+ var buildHeartbeatRequest = (args) => ({
144
+ consentSessionId: args.consentSessionId
145
+ });
146
+ var buildTriggerVerificationCodeRequest = (args) => ({
147
+ consentSessionId: args.consentSessionId
148
+ });
149
+ var buildSubmitVerificationCodeRequest = (args) => ({
150
+ consentSessionId: args.consentSessionId,
151
+ verificationCode: args.verificationCode,
152
+ referenceId: args.referenceId
153
+ });
154
+ var buildSubmitRequest = (args) => {
155
+ const details = { ...args.details };
156
+ if (details.submittedAt instanceof Date) details.submittedAt = details.submittedAt.toISOString();
157
+ if (typeof details.billingCountryCode === "string") {
158
+ details.billingCountryCode = details.billingCountryCode.trim().toUpperCase();
159
+ }
160
+ return {
161
+ datashipsSessionId: args.datashipsSessionId,
162
+ user: normaliseSubmitUser(args.user),
163
+ integration: { ...details, type: args.integrationType }
164
+ };
165
+ };
166
+ var normaliseSubmitUser = (user) => {
167
+ const firstName = user?.firstName?.trim() ?? "";
168
+ const lastName = user?.lastName?.trim() ?? "";
169
+ if (!firstName || !lastName) {
170
+ throw new Error(
171
+ "submitSession: user.firstName and user.lastName are required (core-api refuses a blank name)"
172
+ );
173
+ }
174
+ return { firstName, lastName };
175
+ };
176
+
177
+ // src/session/operations.ts
178
+ var upsertSession = async (args) => {
179
+ const { adapter, input } = args;
180
+ const identifier = input.identifier ?? (await adapter.getIdentifier(input.identifierType)).identifier;
181
+ const context = await adapter.getSessionContext();
182
+ const body = buildUpsertRequest({
183
+ integrationType: adapter.integrationType,
184
+ locale: adapter.getLocale(),
185
+ identifier,
186
+ identifierType: input.identifierType,
187
+ userIp: input.userIp,
188
+ format: input.format,
189
+ context
190
+ });
191
+ try {
192
+ const response = await args.post({
193
+ path: CONSENT_SESSION_START_PATH,
194
+ body,
195
+ retry: args.retry
196
+ });
197
+ return response ?? emptyUpsertResponse();
198
+ } catch (error) {
199
+ if (error instanceof DatashipsError && isCountryNotFound(error)) {
200
+ return emptyUpsertResponse();
201
+ }
202
+ throw error;
203
+ }
204
+ };
205
+ var saveConsent = (args) => args.post({
206
+ path: CONSENT_SESSION_CONSENT_PATH,
207
+ body: buildSaveConsentRequest({
208
+ consentSessionId: args.consentSessionId,
209
+ channel: args.channel,
210
+ consent: args.consent
211
+ }),
212
+ retry: args.retry
213
+ });
214
+ var heartbeat = (args) => args.post({
215
+ path: CONSENT_SESSION_HEARTBEAT_PATH,
216
+ body: buildHeartbeatRequest({ consentSessionId: args.consentSessionId }),
217
+ retry: args.retry
218
+ });
219
+ var triggerVerificationCode = (args) => args.post({
220
+ path: CONSENT_SESSION_TRIGGER_VERIFICATION_CODE_PATH,
221
+ body: buildTriggerVerificationCodeRequest({
222
+ consentSessionId: args.consentSessionId
223
+ }),
224
+ retry: noRetryPolicy
225
+ });
226
+ var submitVerificationCode = async (args) => {
227
+ try {
228
+ await args.post({
229
+ path: CONSENT_SESSION_SUBMIT_VERIFICATION_CODE_PATH,
230
+ body: buildSubmitVerificationCodeRequest({
231
+ consentSessionId: args.consentSessionId,
232
+ verificationCode: args.verificationCode,
233
+ referenceId: args.referenceId
234
+ }),
235
+ retry: noRetryPolicy
236
+ });
237
+ return { verified: true, errorCode: null };
238
+ } catch (error) {
239
+ if (error instanceof DatashipsError && error.status === 400) {
240
+ return {
241
+ verified: false,
242
+ errorCode: verificationErrorCodeFromBody(error.body)
243
+ };
244
+ }
245
+ throw error;
246
+ }
247
+ };
248
+ var submitSession = async (args) => {
249
+ const { adapter, input } = args;
250
+ const datashipsSessionId = input.datashipsSessionId ?? adapter.getDatashipsSessionId?.();
251
+ if (!datashipsSessionId) {
252
+ throw new Error(
253
+ "submitSession: datashipsSessionId is required; this adapter holds no beacon of its own"
254
+ );
255
+ }
256
+ await args.post({
257
+ path: CONSENT_SESSION_SUBMIT_PATH,
258
+ body: buildSubmitRequest({
259
+ datashipsSessionId,
260
+ integrationType: adapter.integrationType,
261
+ user: input.user,
262
+ details: input.details
263
+ }),
264
+ retry: args.retry
265
+ });
266
+ if (input.datashipsSessionId === void 0 && input.resetBeacon !== false) {
267
+ adapter.resetDatashipsSessionId?.();
268
+ }
269
+ };
270
+
271
+ // src/transport/fetch.ts
272
+ var postJson = async ({
273
+ url,
274
+ headers,
275
+ body,
276
+ fetch,
277
+ retry
278
+ }) => {
279
+ let attempt = 0;
280
+ while (true) {
281
+ let response;
282
+ let networkError;
283
+ const attemptHeaders = typeof headers === "function" ? await headers() : headers;
284
+ try {
285
+ response = await fetch(url, {
286
+ method: "POST",
287
+ headers: { "Content-Type": "application/json", ...attemptHeaders },
288
+ body: JSON.stringify(body)
289
+ });
290
+ } catch (err) {
291
+ networkError = err;
292
+ }
293
+ const status = response?.status;
294
+ const ok = response?.ok ?? false;
295
+ if (ok && response) {
296
+ const text = await response.text();
297
+ return text ? JSON.parse(text) : void 0;
298
+ }
299
+ const errorBody = response ? await readBody(response) : null;
300
+ const errorCode = errorCodeFromBody(errorBody) ?? void 0;
301
+ if (!retry.shouldRetry(attempt, status, errorCode)) {
302
+ if (networkError) throw networkError;
303
+ throw new DatashipsError({
304
+ status: status ?? 0,
305
+ body: errorBody,
306
+ challenge: response?.headers.get("WWW-Authenticate") ?? null
307
+ });
308
+ }
309
+ attempt += 1;
310
+ const delay = retry.delayMs(attempt);
311
+ if (delay > 0) await new Promise((r) => setTimeout(r, delay));
312
+ }
313
+ };
314
+ var readBody = async (response) => {
315
+ const text = await response.text();
316
+ if (!text) return null;
317
+ try {
318
+ return JSON.parse(text);
319
+ } catch {
320
+ return text;
321
+ }
322
+ };
323
+
324
+ // src/types.ts
325
+ var SUPPORTED_LOCALES = [
326
+ "en",
327
+ "es",
328
+ "de",
329
+ "pt",
330
+ "ro",
331
+ "hr",
332
+ "da",
333
+ "fi",
334
+ "fr",
335
+ "hu",
336
+ "it",
337
+ "nb",
338
+ "pl",
339
+ "sk",
340
+ "sv",
341
+ "nl",
342
+ "el",
343
+ "cs",
344
+ "zh",
345
+ "ja",
346
+ "is"
347
+ ];
348
+
349
+ // src/server.ts
350
+ var _auth, _fetch, _upsertSessionRetry, _defaultRetry, _DatashipsServerClient_instances, post_fn;
351
+ var DatashipsServerClient = class {
352
+ constructor(opts) {
353
+ __privateAdd(this, _DatashipsServerClient_instances);
354
+ __privateAdd(this, _auth);
355
+ __privateAdd(this, _fetch);
356
+ __privateAdd(this, _upsertSessionRetry);
357
+ __privateAdd(this, _defaultRetry);
358
+ assertServerRuntime();
359
+ assertServerAuth(opts.auth);
360
+ __privateSet(this, _auth, opts.auth);
361
+ this.adapter = opts.adapter;
362
+ this.app = opts.app;
363
+ this.version = opts.version;
364
+ this.baseUrl = resolveBaseUrl(opts.env, opts.baseUrl);
365
+ __privateSet(this, _fetch, opts.fetch ?? globalThis.fetch.bind(globalThis));
366
+ __privateSet(this, _upsertSessionRetry, opts.retry?.upsertSession ?? upsertSessionRetryPolicy);
367
+ __privateSet(this, _defaultRetry, opts.retry?.default ?? defaultRetryPolicy);
368
+ }
369
+ /**
370
+ * Open or update the consent session for one identifier type. `userIp` is
371
+ * mandatory: the connection IP is this server's, and the API geolocates the
372
+ * user from the IP it is given. An empty `consents` means render nothing.
373
+ */
374
+ upsertSession(input) {
375
+ if (!input.userIp) {
376
+ throw new Error(
377
+ "DatashipsServerClient: userIp is required; the connection IP is your server's, not the user's"
378
+ );
379
+ }
380
+ return upsertSession({
381
+ adapter: this.adapter,
382
+ input,
383
+ post: __privateMethod(this, _DatashipsServerClient_instances, post_fn).bind(this),
384
+ retry: __privateGet(this, _upsertSessionRetry)
385
+ });
386
+ }
387
+ saveConsent(input) {
388
+ return saveConsent({
389
+ ...input,
390
+ post: __privateMethod(this, _DatashipsServerClient_instances, post_fn).bind(this),
391
+ retry: __privateGet(this, _defaultRetry)
392
+ });
393
+ }
394
+ /**
395
+ * Complete the sessions opened under a beacon (`POST /v1/consent-session/submit`),
396
+ * typically from the order-created hook. `datashipsSessionId` is required:
397
+ * a server holds no beacon, so the storefront must have passed it along with
398
+ * the order.
399
+ */
400
+ submitSession(input) {
401
+ if (!input.datashipsSessionId) {
402
+ throw new Error(
403
+ "DatashipsServerClient: datashipsSessionId is required; the storefront's beacon must travel with the order"
404
+ );
405
+ }
406
+ return submitSession({
407
+ adapter: this.adapter,
408
+ input,
409
+ post: __privateMethod(this, _DatashipsServerClient_instances, post_fn).bind(this),
410
+ retry: __privateGet(this, _defaultRetry)
411
+ });
412
+ }
413
+ /** One heartbeat. Servers schedule their own cadence; there is no interval helper here. */
414
+ heartbeat(input) {
415
+ return heartbeat({
416
+ consentSessionId: input.consentSessionId,
417
+ post: __privateMethod(this, _DatashipsServerClient_instances, post_fn).bind(this),
418
+ retry: __privateGet(this, _defaultRetry)
419
+ });
420
+ }
421
+ triggerVerificationCode(input) {
422
+ return triggerVerificationCode({
423
+ consentSessionId: input.consentSessionId,
424
+ post: __privateMethod(this, _DatashipsServerClient_instances, post_fn).bind(this)
425
+ });
426
+ }
427
+ submitVerificationCode(input) {
428
+ return submitVerificationCode({
429
+ ...input,
430
+ post: __privateMethod(this, _DatashipsServerClient_instances, post_fn).bind(this)
431
+ });
432
+ }
433
+ };
434
+ _auth = new WeakMap();
435
+ _fetch = new WeakMap();
436
+ _upsertSessionRetry = new WeakMap();
437
+ _defaultRetry = new WeakMap();
438
+ _DatashipsServerClient_instances = new WeakSet();
439
+ post_fn = async function(args) {
440
+ return postJson({
441
+ url: `${this.baseUrl}${args.path}`,
442
+ headers: {
443
+ ...authHeaders(__privateGet(this, _auth)),
444
+ "X-Dataships-App": `${this.app} (SDK: ${this.adapter.name})`,
445
+ "X-Dataships-Version": `${this.version} (SDK: ${"2.0.1"})`
446
+ },
447
+ body: args.body,
448
+ fetch: __privateGet(this, _fetch),
449
+ retry: args.retry
450
+ });
451
+ };
452
+
453
+ export { COUNTRY_NOT_FOUND_CODE, DatashipsError, DatashipsError as DatashipsHttpError, DatashipsServerClient, SUBMIT_VERIFICATION_CODE_ERROR_CODES, SUPPORTED_LOCALES, defaultRetryPolicy, noRetryPolicy, upsertSessionRetryPolicy };
454
+ //# sourceMappingURL=server.js.map
455
+ //# sourceMappingURL=server.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/auth/headers.ts","../src/baseUrl.ts","../src/transport/retry.ts","../src/transport/errors.ts","../src/session/consentSession.ts","../src/session/operations.ts","../src/transport/fetch.ts","../src/types.ts","../src/server.ts"],"names":[],"mappings":"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","file":"server.js"}