@boltclaw/referrals 0.0.0-stage → 0.4.0

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 (57) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +500 -3
  3. package/dist/api-types.d.ts +245 -0
  4. package/dist/api-types.js +2 -0
  5. package/dist/api-types.js.map +1 -0
  6. package/dist/assistant-tools.d.ts +40 -0
  7. package/dist/assistant-tools.js +120 -0
  8. package/dist/assistant-tools.js.map +1 -0
  9. package/dist/assistant.d.ts +62 -0
  10. package/dist/assistant.js +305 -0
  11. package/dist/assistant.js.map +1 -0
  12. package/dist/case.d.ts +2 -0
  13. package/dist/case.js +30 -0
  14. package/dist/case.js.map +1 -0
  15. package/dist/client.d.ts +22 -0
  16. package/dist/client.js +80 -0
  17. package/dist/client.js.map +1 -0
  18. package/dist/element.d.ts +4 -0
  19. package/dist/element.js +204 -0
  20. package/dist/element.js.map +1 -0
  21. package/dist/errors.d.ts +19 -0
  22. package/dist/errors.js +62 -0
  23. package/dist/errors.js.map +1 -0
  24. package/dist/generated/api.d.ts +6477 -0
  25. package/dist/generated/api.js +891 -0
  26. package/dist/generated/api.js.map +1 -0
  27. package/dist/index.d.ts +18 -0
  28. package/dist/index.js +10 -0
  29. package/dist/index.js.map +1 -0
  30. package/dist/loader.d.ts +118 -0
  31. package/dist/loader.js +524 -0
  32. package/dist/loader.js.map +1 -0
  33. package/dist/middleware.d.ts +100 -0
  34. package/dist/middleware.js +378 -0
  35. package/dist/middleware.js.map +1 -0
  36. package/dist/origin.d.ts +3 -0
  37. package/dist/origin.js +22 -0
  38. package/dist/origin.js.map +1 -0
  39. package/dist/react.d.ts +69 -0
  40. package/dist/react.js +328 -0
  41. package/dist/react.js.map +1 -0
  42. package/dist/server-index.d.ts +17 -0
  43. package/dist/server-index.js +9 -0
  44. package/dist/server-index.js.map +1 -0
  45. package/dist/server.d.ts +106 -0
  46. package/dist/server.js +511 -0
  47. package/dist/server.js.map +1 -0
  48. package/dist/typed-code.d.ts +78 -0
  49. package/dist/typed-code.js +234 -0
  50. package/dist/typed-code.js.map +1 -0
  51. package/dist/types.d.ts +254 -0
  52. package/dist/types.js +61 -0
  53. package/dist/types.js.map +1 -0
  54. package/dist/webhooks.d.ts +20 -0
  55. package/dist/webhooks.js +90 -0
  56. package/dist/webhooks.js.map +1 -0
  57. package/package.json +97 -6
package/dist/loader.js ADDED
@@ -0,0 +1,524 @@
1
+ import { normaliseOrigin } from "./origin.js";
2
+ import { EMBED_TOKEN_FORMAT, SHARE_EVENT_CHANNELS } from "./types.js";
3
+ export const PANEL_SOURCE = "boltclaw-referrals";
4
+ export const HOST_SOURCE = "boltclaw-referrals-host";
5
+ export const PROTOCOL_VERSION = 1;
6
+ export const MIN_HEIGHT = 100;
7
+ export const MAX_HEIGHT = 4000;
8
+ export const PANEL_EVENT_TYPES = ["ready", "resize", "copied", "shared", "expired", "closed", "error", "inviteRequested", "dismissed"];
9
+ export const PANEL_VIEWS = ["panel", "thank-you"];
10
+ const TOKEN_COLOURS = ["surface", "surface_raised", "text", "muted", "border", "accent", "on_accent", "success", "warning", "danger"];
11
+ export function checkTokens(tokens) {
12
+ if (typeof tokens !== "object" || tokens === null || Array.isArray(tokens))
13
+ throw new TypeError("tokens must be an object like { surface: \"#ffffff\" }.");
14
+ const colours = (value, where, numbers) => {
15
+ for (const [key, v] of Object.entries(value)) {
16
+ if (TOKEN_COLOURS.includes(key)) {
17
+ if (typeof v !== "string" || !/^#[0-9a-fA-F]{6}$/.test(v))
18
+ throw new TypeError(`${where}${key} must be a colour like #2a9d8f.`);
19
+ }
20
+ else if (numbers && key === "radius") {
21
+ if (typeof v !== "number" || !Number.isInteger(v) || v < 0 || v > 24)
22
+ throw new TypeError("radius must be a whole number from 0 to 24.");
23
+ }
24
+ else if (numbers && key === "spacing") {
25
+ if (v !== "compact" && v !== "normal" && v !== "roomy")
26
+ throw new TypeError("spacing must be compact, normal or roomy.");
27
+ }
28
+ else if (numbers && key === "font_scale") {
29
+ const hundredths = typeof v === "number" ? Math.round(v * 100) : NaN;
30
+ if (!(hundredths >= 85 && hundredths <= 125 && hundredths % 5 === 0 && Math.abs(v * 100 - hundredths) < 1e-6)) {
31
+ throw new TypeError("font_scale must be a step of 0.05 from 0.85 to 1.25.");
32
+ }
33
+ }
34
+ else if (numbers && key === "dark") {
35
+ if (typeof v !== "object" || v === null || Array.isArray(v))
36
+ throw new TypeError("dark must be an object of colours.");
37
+ colours(v, "dark.", false);
38
+ }
39
+ else {
40
+ throw new TypeError(`${where}${key} is not a panel token.`);
41
+ }
42
+ }
43
+ };
44
+ colours(tokens, "", true);
45
+ return JSON.parse(JSON.stringify(tokens));
46
+ }
47
+ const SHARE_CHANNEL_SET = new Set(SHARE_EVENT_CHANNELS);
48
+ const TYPE_SET = new Set(PANEL_EVENT_TYPES);
49
+ export function parsePanelMessage(data) {
50
+ if (typeof data !== "object" || data === null || Array.isArray(data))
51
+ return null;
52
+ const d = data;
53
+ if (d.source !== PANEL_SOURCE || d.version !== PROTOCOL_VERSION)
54
+ return null;
55
+ const type = d.type;
56
+ if (typeof type !== "string" || !TYPE_SET.has(type))
57
+ return null;
58
+ switch (type) {
59
+ case "ready":
60
+ case "expired":
61
+ case "closed":
62
+ case "dismissed":
63
+ return { type: type, payload: {} };
64
+ case "resize": {
65
+ if (typeof d.height !== "number" || !Number.isFinite(d.height))
66
+ return null;
67
+ const height = Math.min(MAX_HEIGHT, Math.max(MIN_HEIGHT, Math.round(d.height)));
68
+ return { type: "resize", payload: { height } };
69
+ }
70
+ case "copied":
71
+ return d.what === "link" ? { type: "copied", payload: { what: "link" } } : null;
72
+ case "shared":
73
+ return typeof d.channel === "string" && SHARE_CHANNEL_SET.has(d.channel) ? { type: "shared", payload: { channel: d.channel } } : null;
74
+ case "error":
75
+ return typeof d.code === "string" && d.code.length > 0 && d.code.length <= 64 ? { type: "error", payload: { code: d.code } } : null;
76
+ case "inviteRequested":
77
+ return typeof d.email === "string" && d.email.length > 0 && d.email.length <= 320 ? { type: "inviteRequested", payload: { email: d.email } } : null;
78
+ }
79
+ return null;
80
+ }
81
+ function checkOptions(options) {
82
+ if (typeof options !== "object" || options === null)
83
+ throw new TypeError("Panel options are required.");
84
+ if (typeof options.token !== "string" || !EMBED_TOKEN_FORMAT.test(options.token)) {
85
+ throw new TypeError("token must be an embed token minted by your server (bcet_...).");
86
+ }
87
+ if (typeof options.embedKey !== "string" || options.embedKey.length === 0 || options.embedKey.length > 200) {
88
+ throw new TypeError("embedKey is required.");
89
+ }
90
+ const theme = options.theme === "light" || options.theme === "dark" || options.theme === "auto" ? options.theme : undefined;
91
+ if (options.locale !== undefined &&
92
+ (typeof options.locale !== "string" || options.locale.length > 35 || !/^[A-Za-z]{2,3}(-[A-Za-z0-9]{2,8}){0,2}$/.test(options.locale))) {
93
+ throw new TypeError("locale must be a language tag like de, fr or pt-BR.");
94
+ }
95
+ return {
96
+ token: options.token,
97
+ embedKey: options.embedKey,
98
+ origin: normaliseOrigin(options.origin),
99
+ theme,
100
+ thankYou: options.mode === "thank-you",
101
+ locale: options.locale,
102
+ };
103
+ }
104
+ function hostOrigin() {
105
+ const origin = typeof location !== "undefined" ? location.origin : "";
106
+ return origin && origin !== "null" ? origin : "";
107
+ }
108
+ function frameUrl(checked, modal) {
109
+ let fragment = `#t=${checked.token}&o=${encodeURIComponent(hostOrigin())}`;
110
+ if (modal)
111
+ fragment += "&m=1";
112
+ if (checked.theme)
113
+ fragment += `&th=${checked.theme}`;
114
+ if (checked.thankYou)
115
+ fragment += "&v=thank-you";
116
+ if (checked.locale)
117
+ fragment += `&l=${encodeURIComponent(checked.locale)}`;
118
+ return `${checked.origin}/r/embed/${encodeURIComponent(checked.embedKey)}${fragment}`;
119
+ }
120
+ function buildIframe(url, title, theme) {
121
+ const iframe = document.createElement("iframe");
122
+ iframe.setAttribute("title", title);
123
+ iframe.setAttribute("referrerpolicy", "no-referrer");
124
+ iframe.setAttribute("allow", "clipboard-write; web-share");
125
+ iframe.setAttribute("sandbox", "allow-scripts allow-same-origin allow-popups allow-popups-to-escape-sandbox");
126
+ iframe.setAttribute("src", url);
127
+ iframe.style.border = "0";
128
+ iframe.style.width = "100%";
129
+ iframe.style.display = "block";
130
+ if (theme === "light" || theme === "dark")
131
+ iframe.style.colorScheme = theme;
132
+ return iframe;
133
+ }
134
+ const LOCALE_TAG = /^[A-Za-z]{2,3}(-[A-Za-z0-9]{2,8}){0,2}$/;
135
+ function createCore(iframe, origin, onMessage, unmount) {
136
+ const listeners = new Map();
137
+ let live = true;
138
+ let loaded = false;
139
+ let pendingLocale = null;
140
+ let pendingTheme = null;
141
+ let pendingTokens = null;
142
+ const emit = (type, payload) => {
143
+ for (const fn of [...(listeners.get(type) ?? [])]) {
144
+ try {
145
+ fn(payload);
146
+ }
147
+ catch {
148
+ }
149
+ }
150
+ };
151
+ const post = (message) => {
152
+ const target = iframe.contentWindow;
153
+ if (!live || !target)
154
+ return;
155
+ target.postMessage({ source: HOST_SOURCE, version: PROTOCOL_VERSION, ...message }, origin);
156
+ };
157
+ const onWindowMessage = (event) => {
158
+ if (!live)
159
+ return;
160
+ if (event.source !== iframe.contentWindow || iframe.contentWindow === null)
161
+ return;
162
+ if (event.origin !== origin)
163
+ return;
164
+ const parsed = parsePanelMessage(event.data);
165
+ if (!parsed)
166
+ return;
167
+ if (parsed.type === "resize")
168
+ iframe.style.height = `${parsed.payload.height}px`;
169
+ emit(parsed.type, parsed.payload);
170
+ onMessage(parsed.type);
171
+ };
172
+ window.addEventListener("message", onWindowMessage);
173
+ iframe.addEventListener("load", () => {
174
+ loaded = true;
175
+ if (pendingLocale !== null) {
176
+ post({ type: "locale", locale: pendingLocale });
177
+ pendingLocale = null;
178
+ }
179
+ if (pendingTheme !== null) {
180
+ post({ type: "theme", theme: pendingTheme });
181
+ pendingTheme = null;
182
+ }
183
+ if (pendingTokens !== null) {
184
+ post({ type: "tokens", tokens: pendingTokens });
185
+ pendingTokens = null;
186
+ }
187
+ });
188
+ const handle = {
189
+ iframe,
190
+ update(next) {
191
+ if (typeof next?.token !== "string" || !EMBED_TOKEN_FORMAT.test(next.token)) {
192
+ throw new TypeError("token must be an embed token minted by your server (bcet_...).");
193
+ }
194
+ post({ type: "token", token: next.token });
195
+ },
196
+ refresh() {
197
+ post({ type: "refresh" });
198
+ },
199
+ setLocale(locale) {
200
+ if (typeof locale !== "string" || locale.length > 35 || !LOCALE_TAG.test(locale)) {
201
+ throw new TypeError("locale must be a language tag like de, fr or pt-BR.");
202
+ }
203
+ if (loaded)
204
+ post({ type: "locale", locale });
205
+ else
206
+ pendingLocale = locale;
207
+ },
208
+ setTheme(theme) {
209
+ if (theme !== "light" && theme !== "dark" && theme !== "auto")
210
+ throw new TypeError("theme must be light, dark or auto.");
211
+ if (loaded)
212
+ post({ type: "theme", theme });
213
+ else
214
+ pendingTheme = theme;
215
+ },
216
+ setTokens(tokens) {
217
+ const checked = checkTokens(tokens);
218
+ if (loaded)
219
+ post({ type: "tokens", tokens: checked });
220
+ else
221
+ pendingTokens = checked;
222
+ },
223
+ unmount,
224
+ on(type, listener) {
225
+ if (!TYPE_SET.has(type))
226
+ return handle;
227
+ let set = listeners.get(type);
228
+ if (!set)
229
+ listeners.set(type, (set = new Set()));
230
+ set.add(listener);
231
+ return handle;
232
+ },
233
+ off(type, listener) {
234
+ listeners.get(type)?.delete(listener);
235
+ return handle;
236
+ },
237
+ };
238
+ return {
239
+ handle,
240
+ emit,
241
+ dispose() {
242
+ if (!live)
243
+ return;
244
+ live = false;
245
+ window.removeEventListener("message", onWindowMessage);
246
+ listeners.clear();
247
+ },
248
+ };
249
+ }
250
+ export function mountPanel(element, options) {
251
+ if (!element || typeof element.appendChild !== "function")
252
+ throw new TypeError("mountPanel needs a DOM element.");
253
+ const checked = checkOptions(options);
254
+ const iframe = buildIframe(frameUrl(checked, false), "Your referrals", checked.theme);
255
+ iframe.style.height = checked.thankYou ? "320px" : "480px";
256
+ let core = null;
257
+ const unmount = () => {
258
+ if (!core)
259
+ return;
260
+ core.dispose();
261
+ core = null;
262
+ iframe.remove();
263
+ };
264
+ core = createCore(iframe, checked.origin, () => undefined, unmount);
265
+ const handle = core.handle;
266
+ element.appendChild(iframe);
267
+ return handle;
268
+ }
269
+ let openModal = null;
270
+ const FOCUSABLE = "a[href], button:not([disabled]), input:not([disabled]), select:not([disabled]), textarea:not([disabled]), iframe, [tabindex]:not([tabindex='-1'])";
271
+ export function openPanel(options) {
272
+ const checked = checkOptions(options);
273
+ closePanel();
274
+ const opener = document.activeElement;
275
+ const body = document.body;
276
+ const previousOverflow = body.style.overflow;
277
+ const overlay = document.createElement("div");
278
+ overlay.setAttribute("data-boltclaw-referrals-overlay", "");
279
+ Object.assign(overlay.style, {
280
+ position: "fixed",
281
+ top: "0",
282
+ right: "0",
283
+ bottom: "0",
284
+ left: "0",
285
+ zIndex: "2147483000",
286
+ display: "flex",
287
+ alignItems: "center",
288
+ justifyContent: "center",
289
+ padding: "16px",
290
+ background: "rgba(0, 0, 0, 0.5)",
291
+ });
292
+ const dialog = document.createElement("div");
293
+ dialog.setAttribute("role", "dialog");
294
+ dialog.setAttribute("aria-modal", "true");
295
+ dialog.setAttribute("aria-label", "Your referrals");
296
+ dialog.setAttribute("tabindex", "-1");
297
+ Object.assign(dialog.style, { width: "100%", maxWidth: "480px", maxHeight: "100%", overflow: "auto", borderRadius: "12px", outline: "none" });
298
+ const iframe = buildIframe(frameUrl(checked, true), "Your referrals", checked.theme);
299
+ iframe.style.height = checked.thankYou ? "360px" : "560px";
300
+ dialog.appendChild(iframe);
301
+ overlay.appendChild(dialog);
302
+ let core = null;
303
+ let closing = false;
304
+ const restore = () => {
305
+ document.removeEventListener("keydown", onKeydown, true);
306
+ document.removeEventListener("focusin", onFocusin, true);
307
+ overlay.removeEventListener("click", onBackdrop);
308
+ overlay.remove();
309
+ body.style.overflow = previousOverflow;
310
+ if (opener && typeof opener.focus === "function")
311
+ opener.focus();
312
+ };
313
+ const unmount = () => {
314
+ if (!core)
315
+ return;
316
+ const done = core;
317
+ core = null;
318
+ done.dispose();
319
+ restore();
320
+ if (openModal === closer)
321
+ openModal = null;
322
+ };
323
+ const close = () => {
324
+ if (closing || !core)
325
+ return;
326
+ closing = true;
327
+ core.emit("closed", {});
328
+ unmount();
329
+ };
330
+ const closer = { close };
331
+ const onKeydown = (event) => {
332
+ if (event.key === "Escape") {
333
+ event.preventDefault();
334
+ close();
335
+ }
336
+ else if (event.key === "Tab") {
337
+ event.preventDefault();
338
+ focusInside();
339
+ }
340
+ };
341
+ const onFocusin = (event) => {
342
+ const target = event.target;
343
+ if (!target || !dialog.contains(target))
344
+ focusInside();
345
+ };
346
+ const onBackdrop = (event) => {
347
+ if (event.target === overlay)
348
+ close();
349
+ };
350
+ const focusInside = () => {
351
+ const target = dialog.querySelector(FOCUSABLE);
352
+ (target ?? dialog).focus();
353
+ };
354
+ core = createCore(iframe, checked.origin, (type) => {
355
+ if (type === "closed") {
356
+ closing = true;
357
+ unmount();
358
+ }
359
+ else if (type === "dismissed") {
360
+ close();
361
+ }
362
+ }, close);
363
+ const handle = core.handle;
364
+ body.style.overflow = "hidden";
365
+ body.appendChild(overlay);
366
+ document.addEventListener("keydown", onKeydown, true);
367
+ document.addEventListener("focusin", onFocusin, true);
368
+ overlay.addEventListener("click", onBackdrop);
369
+ openModal = closer;
370
+ dialog.focus();
371
+ return handle;
372
+ }
373
+ export function closePanel() {
374
+ openModal?.close();
375
+ }
376
+ export const NOTICE_EVENT_TYPES = ["ready", "shown", "empty", "open", "closed", "expired", "error"];
377
+ export function checkNoticeHref(href) {
378
+ if (typeof href !== "string" || href.length === 0 || href.length > 512 || /[\s\\]/.test(href)) {
379
+ throw new TypeError("href must be a path like /settings/referrals or an https address.");
380
+ }
381
+ if (href.startsWith("/") && !href.startsWith("//"))
382
+ return href;
383
+ if (/^https:\/\/[^/?#@\s]+([/?#].*)?$/i.test(href))
384
+ return href;
385
+ throw new TypeError("href must be a path like /settings/referrals or an https address.");
386
+ }
387
+ export function parseNoticeMessage(data) {
388
+ if (typeof data !== "object" || data === null || Array.isArray(data))
389
+ return null;
390
+ const d = data;
391
+ if (d.source !== PANEL_SOURCE || d.version !== PROTOCOL_VERSION)
392
+ return null;
393
+ switch (d.type) {
394
+ case "notice":
395
+ if (typeof d.count !== "number" || !Number.isFinite(d.count) || typeof d.height !== "number" || !Number.isFinite(d.height))
396
+ return null;
397
+ return { type: "notice", payload: { count: Math.max(0, Math.min(10, Math.round(d.count))), height: Math.max(0, Math.min(800, Math.round(d.height))) } };
398
+ case "ready":
399
+ case "open":
400
+ case "closed":
401
+ case "expired":
402
+ return { type: d.type, payload: {} };
403
+ case "error":
404
+ return typeof d.code === "string" && d.code.length > 0 && d.code.length <= 64 ? { type: "error", payload: { code: d.code } } : null;
405
+ default:
406
+ return null;
407
+ }
408
+ }
409
+ export function mountNotice(element, options) {
410
+ if (!element || typeof element.appendChild !== "function")
411
+ throw new TypeError("mountNotice needs a DOM element.");
412
+ const checked = checkOptions({ token: options?.token, embedKey: options?.embedKey, origin: options?.origin, theme: options?.theme, locale: options?.locale });
413
+ const href = checkNoticeHref(options.href);
414
+ const navigate = options.navigate !== false;
415
+ const url = frameUrl(checked, false).replace("#t=", "#v=notice&h=" + encodeURIComponent(href) + "&t=");
416
+ const iframe = buildIframe(url, "Your new rewards", checked.theme);
417
+ iframe.style.height = "0px";
418
+ iframe.style.visibility = "hidden";
419
+ const listeners = new Map();
420
+ let live = true;
421
+ let loaded = false;
422
+ let pendingTheme = null;
423
+ let pendingTokens = null;
424
+ const emit = (type, payload) => {
425
+ for (const fn of [...(listeners.get(type) ?? [])]) {
426
+ try {
427
+ fn(payload);
428
+ }
429
+ catch {
430
+ }
431
+ }
432
+ };
433
+ const post = (message) => {
434
+ const target = iframe.contentWindow;
435
+ if (!live || !target)
436
+ return;
437
+ target.postMessage({ source: HOST_SOURCE, version: PROTOCOL_VERSION, ...message }, checked.origin);
438
+ };
439
+ const onWindowMessage = (event) => {
440
+ if (!live || event.source !== iframe.contentWindow || iframe.contentWindow === null || event.origin !== checked.origin)
441
+ return;
442
+ const parsed = parseNoticeMessage(event.data);
443
+ if (!parsed)
444
+ return;
445
+ if (parsed.type === "notice") {
446
+ const count = parsed.payload.count;
447
+ if (count === 0) {
448
+ iframe.style.display = "none";
449
+ emit("empty", {});
450
+ }
451
+ else {
452
+ const wasHidden = iframe.style.visibility === "hidden";
453
+ iframe.style.display = "block";
454
+ iframe.style.visibility = "visible";
455
+ const height = parsed.payload.height;
456
+ iframe.style.height = `${height > 0 ? height : 160}px`;
457
+ if (wasHidden)
458
+ emit("shown", { count });
459
+ }
460
+ return;
461
+ }
462
+ if (parsed.type === "closed")
463
+ iframe.style.display = "none";
464
+ if (parsed.type === "open") {
465
+ emit("open", { href });
466
+ if (navigate)
467
+ window.location.assign(href);
468
+ return;
469
+ }
470
+ emit(parsed.type, parsed.payload);
471
+ };
472
+ window.addEventListener("message", onWindowMessage);
473
+ iframe.addEventListener("load", () => {
474
+ loaded = true;
475
+ if (pendingTheme !== null)
476
+ post({ type: "theme", theme: pendingTheme });
477
+ if (pendingTokens !== null)
478
+ post({ type: "tokens", tokens: pendingTokens });
479
+ pendingTheme = null;
480
+ pendingTokens = null;
481
+ });
482
+ const handle = {
483
+ iframe,
484
+ setTheme(theme) {
485
+ if (theme !== "light" && theme !== "dark" && theme !== "auto")
486
+ throw new TypeError("theme must be light, dark or auto.");
487
+ if (loaded)
488
+ post({ type: "theme", theme });
489
+ else
490
+ pendingTheme = theme;
491
+ },
492
+ setTokens(tokens) {
493
+ const t = checkTokens(tokens);
494
+ if (loaded)
495
+ post({ type: "tokens", tokens: t });
496
+ else
497
+ pendingTokens = t;
498
+ },
499
+ unmount() {
500
+ if (!live)
501
+ return;
502
+ live = false;
503
+ window.removeEventListener("message", onWindowMessage);
504
+ listeners.clear();
505
+ iframe.remove();
506
+ },
507
+ on(type, listener) {
508
+ if (!NOTICE_EVENT_TYPES.includes(type))
509
+ return handle;
510
+ let set = listeners.get(type);
511
+ if (!set)
512
+ listeners.set(type, (set = new Set()));
513
+ set.add(listener);
514
+ return handle;
515
+ },
516
+ off(type, listener) {
517
+ listeners.get(type)?.delete(listener);
518
+ return handle;
519
+ },
520
+ };
521
+ element.appendChild(iframe);
522
+ return handle;
523
+ }
524
+ //# sourceMappingURL=loader.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"loader.js","sourceRoot":"","sources":["../src/loader.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,100 @@
1
+ import { ReferralsServer, type ReferralsServerOptions } from "./server.js";
2
+ export declare const REFERRAL_COOKIE = "bc_ref";
3
+ export declare const DEFAULT_REFERRAL_PARAM = "via";
4
+ export declare const ACCEPTED_PARAMS: readonly ["ref", "via", "fpr", "lmref", "tolt_referral"];
5
+ export type AcceptedParam = (typeof ACCEPTED_PARAMS)[number];
6
+ export declare const DEFAULT_COOKIE_DAYS = 30;
7
+ export declare const MAX_PARAMS = 20;
8
+ export declare function isReferralCode(value: unknown): value is string;
9
+ export interface ReferralsMiddlewareOptions {
10
+ cookieDays?: number;
11
+ attribution?: "last_click" | "first_click";
12
+ params?: readonly string[];
13
+ programs?: Readonly<Record<string, string>>;
14
+ param?: string;
15
+ acceptParams?: readonly AcceptedParam[];
16
+ ipHeader?: string | false;
17
+ reportClicks?: ReferralsServer | (Omit<ReferralsServerOptions, "programId"> & {
18
+ programId?: string;
19
+ });
20
+ waitUntil?: (promise: Promise<unknown>) => void;
21
+ onError?: (error: unknown) => void;
22
+ }
23
+ export interface ReferralVisit {
24
+ code: string | null;
25
+ existing: string | null;
26
+ current: string | null;
27
+ setCookie: string | null;
28
+ setSubCookie: string | null;
29
+ click: string | null;
30
+ sub: string | null;
31
+ codes: ReferralCodeSeen[];
32
+ setCookies: string[];
33
+ }
34
+ export interface ReferralCodeSeen {
35
+ param: string;
36
+ programId: string | null;
37
+ code: string;
38
+ cookie: string;
39
+ existing: string | null;
40
+ current: string;
41
+ setCookie: string | null;
42
+ setSubCookie: string | null;
43
+ }
44
+ export interface RequestFacts {
45
+ url: string;
46
+ cookie: string | null;
47
+ secure: boolean;
48
+ ip?: string | null;
49
+ userAgent?: string | null;
50
+ referrer?: string | null;
51
+ country?: string | null;
52
+ }
53
+ export declare function referralCookieName(param: string | null): string;
54
+ export declare function codeFromSearch(search: string, params: readonly string[]): string | null;
55
+ export declare function codeFromCookie(cookie: string | null | undefined, name?: string): string | null;
56
+ export declare function referralCodeFor(cookie: string | null | undefined, programId?: string | null, options?: Pick<ReferralsMiddlewareOptions, "programs">): string | null;
57
+ export declare function subCookie(sub: string | null, days: number, secure: boolean, name?: string): string;
58
+ export declare function referralCookie(code: string, days: number, secure: boolean, name?: string): string;
59
+ export declare function referralVisit(facts: Pick<RequestFacts, "url" | "cookie" | "secure">, options?: ReferralsMiddlewareOptions): ReferralVisit;
60
+ export declare function clientAddress(header: (name: string) => string | string[] | null | undefined, options?: Pick<ReferralsMiddlewareOptions, "ipHeader">, platform?: string | null): string | null;
61
+ export interface WebRequestLike {
62
+ url: string;
63
+ headers: {
64
+ get(name: string): string | null;
65
+ };
66
+ nextUrl?: {
67
+ href?: string;
68
+ protocol?: string;
69
+ };
70
+ ip?: string;
71
+ geo?: {
72
+ country?: string;
73
+ };
74
+ }
75
+ export declare function nextReferralsMiddleware(options?: ReferralsMiddlewareOptions): (request: WebRequestLike, response?: {
76
+ headers: {
77
+ append(name: string, value: string): void;
78
+ };
79
+ }, event?: {
80
+ waitUntil?(promise: Promise<unknown>): void;
81
+ }) => ReferralVisit & {
82
+ headers: Headers;
83
+ };
84
+ export declare const nextReferralsProxy: typeof nextReferralsMiddleware;
85
+ export interface ExpressRequestLike {
86
+ originalUrl?: string;
87
+ url?: string;
88
+ protocol?: string;
89
+ secure?: boolean;
90
+ ip?: string;
91
+ headers: Record<string, string | string[] | undefined>;
92
+ }
93
+ export interface ExpressResponseLike {
94
+ append?(name: string, value: string | string[]): unknown;
95
+ getHeader?(name: string): number | string | string[] | undefined;
96
+ setHeader?(name: string, value: string | string[]): unknown;
97
+ locals?: Record<string, unknown>;
98
+ }
99
+ export declare function expressReferralsMiddleware(options?: ReferralsMiddlewareOptions): (req: ExpressRequestLike, res: ExpressResponseLike, next: (error?: unknown) => void) => void;
100
+ export declare function referralsMiddleware(options?: ReferralsMiddlewareOptions): (facts: RequestFacts) => ReferralVisit;