@atlasauth/js 0.12.0 → 0.14.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.
- package/CHANGELOG.md +11 -0
- package/dist/fapi.d.ts +19 -0
- package/dist/fapi.js +32 -2
- package/dist/fapi.js.map +1 -1
- package/dist/index.d.ts +1 -0
- package/dist/index.js +2 -0
- package/dist/index.js.map +1 -1
- package/dist/instance-settings.d.ts +11 -0
- package/dist/instance-settings.js +28 -1
- package/dist/instance-settings.js.map +1 -1
- package/dist/referral.d.ts +252 -0
- package/dist/referral.js +653 -0
- package/dist/referral.js.map +1 -0
- package/dist/version.d.ts +1 -1
- package/dist/version.js +1 -1
- package/package.json +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,16 @@
|
|
|
1
1
|
# @atlasauth/js changelog
|
|
2
2
|
|
|
3
|
+
## 0.14.0
|
|
4
|
+
- **Referral capture v2.** One source per referral, in precedence order and never mixed: the page's referral script (`window.aff.getReferral()` → `{code, clickId, anonId, ts}`), explicit `ref_*` URL parameters (`ref`, `ref_click_id`, `ref_anon_id`, `ref_consent`, `ref_captured_at`), a code in the instance's URL parameters, then the tracking cookie. A URL code no longer travels with the cookie's click id. Click and anonymous ids are sent only with consent (Cookie Munch, `referralConsent`, or `ref_consent=granted` on the URL); without it only the code goes. The cookie may carry `ts` (becomes `captured_at`) and `exp` (an expired cookie is ignored).
|
|
5
|
+
- **New redirect helpers:** `signIn({ url | frontendApi, redirectUrl?, referral?: false | 'auto', consent?, config?, navigate? })` / `signUp(...)` go to the hosted page (or any URL, e.g. `/oauth2/authorize`) with the referral as `ref_*` query parameters; `referralParams(options)` and `withReferralParams(url, options)` for your own redirects.
|
|
6
|
+
- **New `lookupReferralCode(configOrTemplate, code, { fetchImpl?, timeoutMs? })`** → `{ valid, partnerDisplayName?, refereeReward? } | null` (the instance's public code lookup; null on any failure).
|
|
7
|
+
- `ReferralConfig` gains `codeLookupUrl` and `signupCodeField` (from `referrals.code_lookup_url` / `referrals.signup_code_field`). `FapiClientOptions.referral` and `ReferralCaptureOptions.referral` accept `'auto'` (the default). New exports: `referralTime`, `referralFromScript`, `explicitReferralFromSearch`, types `ReferralSourceFields`, `ReferralRedirectOptions`, `HostedRedirectOptions`, `ReferralCodeLookup`. `ReferralPage` gains `aff`. `parseReferralCookie` takes an optional `now`.
|
|
8
|
+
|
|
9
|
+
## 0.13.0
|
|
10
|
+
- **New: referral attribution.** A `FapiClient` captures the referral the visitor arrived with and sends it as `referral: { code, click_id, anon_id, consent, captured_at }` on every sign-in / sign-up start (`/v1/client/sign_ups`, `/v1/client/sign_ins`, OAuth / SSO / SAML / native id_token / passkey / wallet starts) and the steps that continue one, when the instance has referrals on. The code comes from the instance's URL parameters (default `ref`, `via`, `aff`) on the current page, the page the SDK loaded on, and their `redirect_url` / `after_url`. The instance's tracking cookie is read only under consent: Cookie Munch on the page decides (the instance's category, else its fallback category); otherwise the new `referralConsent` option (`'granted'` or a function) does. The SDK never writes the cookie. New `FapiClientOptions.referral?: false` (opt out) and `referralConsent?`; page-wide `configureReferralCapture({ referral, referralConsent })`. The config is read from `referrals` in `GET /v1/client/environment` / `GET /v1/appearance` (one read per page; nothing is fetched when there is no query and no config yet).
|
|
11
|
+
- **Referred sign-up challenge.** `fetchInstanceSettings` switches the sign-up and sign-in captcha on when a referral code was captured and the instance's `referrals.challenge_referred_signups` is `always` (as long as a captcha provider is configured). New exports: `referralChallengeRequired`, `withReferralChallenge`, `referralChallengeFlows`, `captureReferral`, `referralConfigFrom`, `parseReferralCookie`, `acceptsReferral`, `seedReferralConfig`, `referralCacheKeyFor`, types `ReferralConfig`, `ReferralCapture`, `ReferralConsent`, `ReferralCaptureOptions`.
|
|
12
|
+
- `FapiClient.post` is now `async` (it already returned a promise).
|
|
13
|
+
|
|
3
14
|
## 0.12.0
|
|
4
15
|
- **New: SDK identity and advisories.** `FapiClientOptions.sdk?: AtlasSdkInfo` (`{ name, version }`, default
|
|
5
16
|
`@atlasauth/js`) is sent as `X-Atlas-SDK: <name>/<version>`; an `Atlas-SDK-Advisory` response header is logged once
|
package/dist/fapi.d.ts
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { type AttemptView, type FieldError } from './attempt';
|
|
2
2
|
import { type AtlasSdkInfo } from './sdk-advisory';
|
|
3
|
+
import { type ReferralCaptureOptions, type ReferralConsent } from './referral';
|
|
3
4
|
/**
|
|
4
5
|
* The FAPI client and the sign-in flow driver.
|
|
5
6
|
*
|
|
@@ -33,6 +34,20 @@ export interface FapiClientOptions {
|
|
|
33
34
|
* own package; defaults to `@atlasauth/js`.
|
|
34
35
|
*/
|
|
35
36
|
sdk?: AtlasSdkInfo;
|
|
37
|
+
/**
|
|
38
|
+
* Referral attribution. By default (`'auto'`) a client captures the referral
|
|
39
|
+
* the visitor arrived with (the page's referral script `window.aff`, explicit
|
|
40
|
+
* `ref_*` URL parameters, the instance's URL parameters, then its tracking
|
|
41
|
+
* cookie) and sends it on every sign-in / sign-up start, when the instance
|
|
42
|
+
* has referrals on. `false` turns that off. See `./referral`.
|
|
43
|
+
*/
|
|
44
|
+
referral?: false | 'auto';
|
|
45
|
+
/**
|
|
46
|
+
* The app's own consent decision for referral tracking (click and anonymous
|
|
47
|
+
* ids), used only when Cookie Munch is not on the page: `'granted'` (or a
|
|
48
|
+
* function returning it) lets the client send them. Default: code only.
|
|
49
|
+
*/
|
|
50
|
+
referralConsent?: ReferralConsent;
|
|
36
51
|
}
|
|
37
52
|
/**
|
|
38
53
|
* A locale tag normalised for the `Accept-Language` header (`pt_BR` → `pt-BR`),
|
|
@@ -50,6 +65,10 @@ export interface FapiResponse<T> {
|
|
|
50
65
|
export declare class FapiClient {
|
|
51
66
|
private readonly options;
|
|
52
67
|
constructor(options: FapiClientOptions);
|
|
68
|
+
/** Which instance's referral config this client shares (one fetch per page). */
|
|
69
|
+
get referralCacheKey(): string;
|
|
70
|
+
/** This client's own referral options (page-wide defaults fill the gaps). */
|
|
71
|
+
get referralOptions(): ReferralCaptureOptions;
|
|
53
72
|
/** The `Accept-Language` this client sends, or null when it sends none. */
|
|
54
73
|
get locale(): string | null;
|
|
55
74
|
/**
|
package/dist/fapi.js
CHANGED
|
@@ -14,6 +14,7 @@ exports.pollAttempt = pollAttempt;
|
|
|
14
14
|
exports.shouldKeepPolling = shouldKeepPolling;
|
|
15
15
|
const attempt_1 = require("./attempt");
|
|
16
16
|
const sdk_advisory_1 = require("./sdk-advisory");
|
|
17
|
+
const referral_1 = require("./referral");
|
|
17
18
|
/**
|
|
18
19
|
* A locale tag normalised for the `Accept-Language` header (`pt_BR` → `pt-BR`),
|
|
19
20
|
* or null when it is not a plausible BCP-47 tag. Restricting it to letters,
|
|
@@ -30,6 +31,17 @@ class FapiClient {
|
|
|
30
31
|
options;
|
|
31
32
|
constructor(options) {
|
|
32
33
|
this.options = options;
|
|
34
|
+
// Keep the query this page was opened with: a referral code in it must
|
|
35
|
+
// survive client-side navigation that drops it before the user signs up.
|
|
36
|
+
(0, referral_1.rememberReferralLanding)();
|
|
37
|
+
}
|
|
38
|
+
/** Which instance's referral config this client shares (one fetch per page). */
|
|
39
|
+
get referralCacheKey() {
|
|
40
|
+
return (0, referral_1.referralCacheKeyFor)(this.options.baseUrl, this.options.publishableKey);
|
|
41
|
+
}
|
|
42
|
+
/** This client's own referral options (page-wide defaults fill the gaps). */
|
|
43
|
+
get referralOptions() {
|
|
44
|
+
return { referral: this.options.referral, referralConsent: this.options.referralConsent };
|
|
33
45
|
}
|
|
34
46
|
/** The `Accept-Language` this client sends, or null when it sends none. */
|
|
35
47
|
get locale() {
|
|
@@ -92,6 +104,12 @@ class FapiClient {
|
|
|
92
104
|
catch {
|
|
93
105
|
// A 204, or an error page from a proxy. Neither should crash the parse.
|
|
94
106
|
}
|
|
107
|
+
// Any environment / appearance read also tells referral capture the
|
|
108
|
+
// instance's config, so a page that already loaded it never fetches it again.
|
|
109
|
+
const bare = path.split('?')[0];
|
|
110
|
+
if (response.ok && (init.method ?? 'GET') === 'GET' && (bare === '/v1/client/environment' || bare === '/v1/appearance')) {
|
|
111
|
+
(0, referral_1.seedReferralConfig)(this.referralCacheKey, body);
|
|
112
|
+
}
|
|
95
113
|
return {
|
|
96
114
|
ok: response.ok,
|
|
97
115
|
status: response.status,
|
|
@@ -100,10 +118,22 @@ class FapiClient {
|
|
|
100
118
|
errors: response.ok ? [] : (0, attempt_1.fieldErrors)(body),
|
|
101
119
|
};
|
|
102
120
|
}
|
|
103
|
-
post(path, body) {
|
|
121
|
+
async post(path, body) {
|
|
122
|
+
// Referral attribution rides on every sign-in / sign-up start (and on the
|
|
123
|
+
// steps that continue one: the server keeps the first one it is given).
|
|
124
|
+
let payload = body;
|
|
125
|
+
if (payload !== null &&
|
|
126
|
+
typeof payload === 'object' &&
|
|
127
|
+
!Array.isArray(payload) &&
|
|
128
|
+
!('referral' in payload) &&
|
|
129
|
+
(0, referral_1.acceptsReferral)(path)) {
|
|
130
|
+
const referral = await (0, referral_1.currentReferral)(this);
|
|
131
|
+
if (referral)
|
|
132
|
+
payload = { ...payload, referral };
|
|
133
|
+
}
|
|
104
134
|
return this.request(path, {
|
|
105
135
|
method: 'POST',
|
|
106
|
-
body:
|
|
136
|
+
body: payload === undefined ? undefined : JSON.stringify(payload),
|
|
107
137
|
});
|
|
108
138
|
}
|
|
109
139
|
get(path) {
|
package/dist/fapi.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"fapi.js","sourceRoot":"","sources":["../src/fapi.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"fapi.js","sourceRoot":"","sources":["../src/fapi.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
CHANGED
package/dist/index.js
CHANGED
|
@@ -31,6 +31,8 @@ __exportStar(require("./redirect"), exports);
|
|
|
31
31
|
// §oauth popup mode: the same-origin hand-back for a popup whose opener was severed.
|
|
32
32
|
__exportStar(require("./popup-channel"), exports);
|
|
33
33
|
__exportStar(require("./fapi"), exports);
|
|
34
|
+
// Referral attribution: capture the visitor's referral and send it on sign-up.
|
|
35
|
+
__exportStar(require("./referral"), exports);
|
|
34
36
|
// SDK version advisories (`X-Atlas-SDK` / `Atlas-SDK-Advisory`).
|
|
35
37
|
__exportStar(require("./sdk-advisory"), exports);
|
|
36
38
|
__exportStar(require("./version"), exports);
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;AAAA,6EAA6E;AAC7E,2CAAyB;AACzB,6CAA2B;AAC3B,sFAAsF;AACtF,mDAAiC;AACjC,gDAA8B;AAC9B,iDAA+B;AAC/B,4CAA0B;AAC1B,iDAA+B;AAC/B,kDAAgC;AAChC,uEAAuE;AACvE,2CAAyB;AACzB,6CAA2B;AAC3B,qFAAqF;AACrF,kDAAgC;AAChC,yCAAuB;AACvB,iEAAiE;AACjE,iDAA+B;AAC/B,4CAA0B;AAC1B,yFAAyF;AACzF,oDAAkC;AAClC,2CAAyB;AACzB,mDAAiC;AACjC,4CAA0B;AAC1B,6CAA2B;AAC3B,yCAAuB;AACvB,8CAA4B;AAC5B,2CAAyB;AACzB,4DAA4D;AAC5D,6CAA2B;AAC3B,4CAA0B;AAC1B,mDAAiC;AACjC,kDAAgC;AAChC,sDAAsD;AACtD,wDAAsC;AACtC,+EAA+E;AAC/E,2EAA2E;AAC3E,4CAA0B;AAC1B,kFAAkF;AAClF,mDAAiC;AACjC,4FAA4F;AAC5F,kDAAgC;AAChC,kFAAkF;AAClF,yEAAyE;AACzE,oEAAoE;AACpE,uDAAqC;AACrC,sDAAoC;AACpC,uEAAuE;AACvE,gDAA8B;AAC9B,0EAA0E;AAC1E,4EAA4E;AAC5E,0CAa0B;AARxB,iGAAA,QAAQ,OAAA;AACR,sGAAA,aAAa,OAAA;AACb,0GAAA,iBAAiB,OAAA;AACjB,uGAAA,cAAc,OAAA;AACd,yGAAA,gBAAgB,OAAA;AAChB,+GAAA,sBAAsB,OAAA;AACtB,kGAAA,SAAS,OAAA;AACT,wGAAA,eAAe,OAAA"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;AAAA,6EAA6E;AAC7E,2CAAyB;AACzB,6CAA2B;AAC3B,sFAAsF;AACtF,mDAAiC;AACjC,gDAA8B;AAC9B,iDAA+B;AAC/B,4CAA0B;AAC1B,iDAA+B;AAC/B,kDAAgC;AAChC,uEAAuE;AACvE,2CAAyB;AACzB,6CAA2B;AAC3B,qFAAqF;AACrF,kDAAgC;AAChC,yCAAuB;AACvB,+EAA+E;AAC/E,6CAA2B;AAC3B,iEAAiE;AACjE,iDAA+B;AAC/B,4CAA0B;AAC1B,yFAAyF;AACzF,oDAAkC;AAClC,2CAAyB;AACzB,mDAAiC;AACjC,4CAA0B;AAC1B,6CAA2B;AAC3B,yCAAuB;AACvB,8CAA4B;AAC5B,2CAAyB;AACzB,4DAA4D;AAC5D,6CAA2B;AAC3B,4CAA0B;AAC1B,mDAAiC;AACjC,kDAAgC;AAChC,sDAAsD;AACtD,wDAAsC;AACtC,+EAA+E;AAC/E,2EAA2E;AAC3E,4CAA0B;AAC1B,kFAAkF;AAClF,mDAAiC;AACjC,4FAA4F;AAC5F,kDAAgC;AAChC,kFAAkF;AAClF,yEAAyE;AACzE,oEAAoE;AACpE,uDAAqC;AACrC,sDAAoC;AACpC,uEAAuE;AACvE,gDAA8B;AAC9B,0EAA0E;AAC1E,4EAA4E;AAC5E,0CAa0B;AARxB,iGAAA,QAAQ,OAAA;AACR,sGAAA,aAAa,OAAA;AACb,0GAAA,iBAAiB,OAAA;AACjB,uGAAA,cAAc,OAAA;AACd,yGAAA,gBAAgB,OAAA;AAChB,+GAAA,sBAAsB,OAAA;AACtB,kGAAA,SAAS,OAAA;AACT,wGAAA,eAAe,OAAA"}
|
|
@@ -65,3 +65,14 @@ export declare function toSignUpInput(values: Record<string, string>, consent: b
|
|
|
65
65
|
consent: boolean;
|
|
66
66
|
captchaToken?: string;
|
|
67
67
|
};
|
|
68
|
+
/**
|
|
69
|
+
* Referral attribution: the instance requires the bot challenge for a sign-up
|
|
70
|
+
* that carries a referral code, and one was captured on this page. The sign-up
|
|
71
|
+
* form and the sign-in identifier step (a passwordless sign-in to a new
|
|
72
|
+
* address creates the account) then always show the captcha, even when it is
|
|
73
|
+
* otherwise off, as long as the instance has a provider to draw. The server
|
|
74
|
+
* enforces the same rule.
|
|
75
|
+
*/
|
|
76
|
+
export declare function withReferralChallenge(settings: InstanceSettings): InstanceSettings;
|
|
77
|
+
/** {@link withReferralChallenge} on a bare `captchaFlows` map. */
|
|
78
|
+
export declare function referralChallengeFlows(flows: Partial<Record<CaptchaFlowKey, FlowCaptcha>>): Partial<Record<CaptchaFlowKey, FlowCaptcha>>;
|
|
@@ -3,7 +3,10 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
3
3
|
exports.instanceSettingsFrom = instanceSettingsFrom;
|
|
4
4
|
exports.fetchInstanceSettings = fetchInstanceSettings;
|
|
5
5
|
exports.toSignUpInput = toSignUpInput;
|
|
6
|
+
exports.withReferralChallenge = withReferralChallenge;
|
|
7
|
+
exports.referralChallengeFlows = referralChallengeFlows;
|
|
6
8
|
const environment_1 = require("./environment");
|
|
9
|
+
const referral_1 = require("./referral");
|
|
7
10
|
const NO_LEGAL = { termsUrl: null, privacyUrl: null, required: false };
|
|
8
11
|
const isRecord = (v) => !!v && typeof v === 'object' && !Array.isArray(v);
|
|
9
12
|
/**
|
|
@@ -55,7 +58,10 @@ function instanceSettingsFrom(body) {
|
|
|
55
58
|
async function fetchInstanceSettings(client) {
|
|
56
59
|
try {
|
|
57
60
|
const response = await client.get('/v1/appearance');
|
|
58
|
-
|
|
61
|
+
if (!response.ok)
|
|
62
|
+
return null;
|
|
63
|
+
const settings = instanceSettingsFrom(response.data);
|
|
64
|
+
return (await (0, referral_1.referralChallengeRequired)(client)) ? withReferralChallenge(settings) : settings;
|
|
59
65
|
}
|
|
60
66
|
catch {
|
|
61
67
|
return null;
|
|
@@ -76,4 +82,25 @@ function toSignUpInput(values, consent, captchaToken) {
|
|
|
76
82
|
fields[key] = value;
|
|
77
83
|
return { email, password, fields, consent, ...(captchaToken ? { captchaToken } : {}) };
|
|
78
84
|
}
|
|
85
|
+
/**
|
|
86
|
+
* Referral attribution: the instance requires the bot challenge for a sign-up
|
|
87
|
+
* that carries a referral code, and one was captured on this page. The sign-up
|
|
88
|
+
* form and the sign-in identifier step (a passwordless sign-in to a new
|
|
89
|
+
* address creates the account) then always show the captcha, even when it is
|
|
90
|
+
* otherwise off, as long as the instance has a provider to draw. The server
|
|
91
|
+
* enforces the same rule.
|
|
92
|
+
*/
|
|
93
|
+
function withReferralChallenge(settings) {
|
|
94
|
+
return { ...settings, captchaFlows: referralChallengeFlows(settings.captchaFlows) };
|
|
95
|
+
}
|
|
96
|
+
/** {@link withReferralChallenge} on a bare `captchaFlows` map. */
|
|
97
|
+
function referralChallengeFlows(flows) {
|
|
98
|
+
const out = { ...flows };
|
|
99
|
+
for (const key of ['signUp', 'signIn']) {
|
|
100
|
+
const flow = out[key];
|
|
101
|
+
if (flow && flow.provider && !flow.enabled)
|
|
102
|
+
out[key] = { ...flow, enabled: true };
|
|
103
|
+
}
|
|
104
|
+
return out;
|
|
105
|
+
}
|
|
79
106
|
//# sourceMappingURL=instance-settings.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"instance-settings.js","sourceRoot":"","sources":["../src/instance-settings.ts"],"names":[],"mappings":";;
|
|
1
|
+
{"version":3,"file":"instance-settings.js","sourceRoot":"","sources":["../src/instance-settings.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,252 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Referral attribution: capture the referral a visitor arrived with and send it
|
|
3
|
+
* on every sign-in / sign-up start, so the user Atlas creates is attributed to
|
|
4
|
+
* whoever referred them.
|
|
5
|
+
*
|
|
6
|
+
* What is captured, when the instance has referrals on (`referrals` in
|
|
7
|
+
* `GET /v1/client/environment`): ONE source, in precedence order, never
|
|
8
|
+
* mixing fields across sources:
|
|
9
|
+
* 1. the page's referral script, `window.aff.getReferral()`
|
|
10
|
+
* (`{code, clickId, anonId, ts}`), or explicit `ref_*` parameters
|
|
11
|
+
* (`ref`, `ref_click_id`, `ref_anon_id`, `ref_consent`, `ref_captured_at`)
|
|
12
|
+
* on the page URL;
|
|
13
|
+
* 2. the referral code from the page URL — the instance's URL parameters
|
|
14
|
+
* (default `ref`, `via`, `aff`) on the current page, the page the SDK first
|
|
15
|
+
* loaded on, and the `redirect_url` / `after_url` query of either;
|
|
16
|
+
* 3. the referral platform's first-party tracking cookie (the instance's
|
|
17
|
+
* `context_cookie`): JSON or URL-encoded JSON
|
|
18
|
+
* `{code?, clickId?, anonId?, ts?, exp?}`, or a plain click id. An expired
|
|
19
|
+
* cookie is ignored.
|
|
20
|
+
* Click and anonymous ids are sent only with consent; without it only the
|
|
21
|
+
* code goes.
|
|
22
|
+
*
|
|
23
|
+
* Consent: when Cookie Munch is on the page (`window.CookieMunch`), the cookie
|
|
24
|
+
* is read only when the instance's consent category is granted (else its
|
|
25
|
+
* fallback category). Without a consent manager the cookie is read only when
|
|
26
|
+
* the app says its own consent manager allowed it (`referralConsent:
|
|
27
|
+
* 'granted'`). Otherwise the URL code alone is sent. The SDK never writes the
|
|
28
|
+
* cookie. Nothing captured is trusted: the server re-validates every field.
|
|
29
|
+
*
|
|
30
|
+
* Opt out with `referral: false` (per client, or page-wide with
|
|
31
|
+
* {@link configureReferralCapture}). `'auto'` is the default.
|
|
32
|
+
*
|
|
33
|
+
* Redirects to a hosted page or `/oauth2/authorize` carry the same referral as
|
|
34
|
+
* `ref_*` query parameters: {@link signIn} / {@link signUp},
|
|
35
|
+
* {@link withReferralParams} and {@link referralParams}.
|
|
36
|
+
*/
|
|
37
|
+
/** The instance's public referral settings, camelCased. */
|
|
38
|
+
export interface ReferralConfig {
|
|
39
|
+
enabled: boolean;
|
|
40
|
+
/** URL query parameters that carry a code, in priority order. */
|
|
41
|
+
urlParams: string[];
|
|
42
|
+
/** The tracking cookie to read under consent; null = never read a cookie. */
|
|
43
|
+
contextCookie: string | null;
|
|
44
|
+
consentCategory: string;
|
|
45
|
+
consentFallbackCategory: string | null;
|
|
46
|
+
/** `always`: a sign-up carrying a referral code must pass the bot challenge. */
|
|
47
|
+
challengeReferredSignups: 'always' | 'inherit';
|
|
48
|
+
/** Public "Invited by" lookup URL template with `{code}`, or null. See {@link lookupReferralCode}. */
|
|
49
|
+
codeLookupUrl: string | null;
|
|
50
|
+
/** The instance shows an optional "Referral code" field on sign-up. */
|
|
51
|
+
signupCodeField: boolean;
|
|
52
|
+
}
|
|
53
|
+
/** The `referral` object a sign-in / sign-up request carries (snake_case, as the API takes it). */
|
|
54
|
+
export interface ReferralCapture {
|
|
55
|
+
code: string | null;
|
|
56
|
+
click_id: string | null;
|
|
57
|
+
anon_id: string | null;
|
|
58
|
+
consent: 'granted' | 'not_required';
|
|
59
|
+
/** ISO 8601. */
|
|
60
|
+
captured_at: string;
|
|
61
|
+
}
|
|
62
|
+
/**
|
|
63
|
+
* The app's own consent decision for the referral cookie, used only when no
|
|
64
|
+
* Cookie Munch is on the page. `'granted'` / `true` allow reading it; anything
|
|
65
|
+
* else does not. A function is asked at each sign-in / sign-up start.
|
|
66
|
+
*/
|
|
67
|
+
export type ReferralConsent = 'granted' | 'denied' | boolean | (() => 'granted' | 'denied' | boolean | null | undefined);
|
|
68
|
+
/** The referral options a FAPI client and the prebuilt components take. */
|
|
69
|
+
export interface ReferralCaptureOptions {
|
|
70
|
+
/** `false` turns referral capture off; `'auto'` (the default) captures when the instance has referrals on. */
|
|
71
|
+
referral?: false | 'auto' | undefined;
|
|
72
|
+
/** See {@link ReferralConsent}. */
|
|
73
|
+
referralConsent?: ReferralConsent;
|
|
74
|
+
}
|
|
75
|
+
export declare const DISABLED_REFERRAL_CONFIG: Readonly<ReferralConfig>;
|
|
76
|
+
/** A well-formed code / click id / anonymous id, or null. */
|
|
77
|
+
export declare function referralToken(value: unknown): string | null;
|
|
78
|
+
/**
|
|
79
|
+
* Read the referral config from a `/v1/client/environment` body (or its
|
|
80
|
+
* `referrals` object). Missing or malformed → disabled.
|
|
81
|
+
*/
|
|
82
|
+
export declare function referralConfigFrom(body: unknown): ReferralConfig;
|
|
83
|
+
/** The first well-formed code among `params` in a query string. */
|
|
84
|
+
export declare function referralCodeFromSearch(search: string | null | undefined, params: readonly string[]): string | null;
|
|
85
|
+
/** The query strings a code may be in: each search, plus its `redirect_url` / `after_url` targets' queries. */
|
|
86
|
+
export declare function referralSearches(searches: readonly string[], base?: string): string[];
|
|
87
|
+
/** An ISO time from an ISO string or unix seconds / milliseconds, or null. */
|
|
88
|
+
export declare function referralTime(value: unknown): string | null;
|
|
89
|
+
/** One referral source's raw fields. */
|
|
90
|
+
export interface ReferralSourceFields {
|
|
91
|
+
code: string | null;
|
|
92
|
+
clickId: string | null;
|
|
93
|
+
anonId: string | null;
|
|
94
|
+
/** ISO 8601, when the source says when it captured the referral. */
|
|
95
|
+
capturedAt?: string;
|
|
96
|
+
}
|
|
97
|
+
/**
|
|
98
|
+
* Parse a tracking-cookie value: JSON or URL-encoded JSON `{code?, clickId?,
|
|
99
|
+
* anonId?, ts?, exp?}` (snake_case accepted too); a plain value is a click id.
|
|
100
|
+
* `ts` (unix seconds or ms) becomes `capturedAt`; a cookie past its `exp` is
|
|
101
|
+
* ignored.
|
|
102
|
+
*/
|
|
103
|
+
export declare function parseReferralCookie(value: string | null | undefined, now?: number): ReferralSourceFields | null;
|
|
104
|
+
/** A cookie's value from a `document.cookie` string, or null. */
|
|
105
|
+
export declare function readCookieValue(cookies: string | null | undefined, name: string): string | null;
|
|
106
|
+
/**
|
|
107
|
+
* Whether the referral cookie may be read. Cookie Munch on the page decides
|
|
108
|
+
* when present (the instance's category, else its fallback category); else
|
|
109
|
+
* the app's own `referralConsent`.
|
|
110
|
+
*/
|
|
111
|
+
export declare function referralConsentGranted(config: Pick<ReferralConfig, 'consentCategory' | 'consentFallbackCategory'>, cookieMunch: unknown, appConsent: ReferralConsent | undefined): boolean;
|
|
112
|
+
/** Everything {@link captureReferral} reads from the page. */
|
|
113
|
+
export interface ReferralPage {
|
|
114
|
+
/** Query strings to look in, most relevant first (current page, landing page). */
|
|
115
|
+
searches: readonly string[];
|
|
116
|
+
/** `document.cookie`. */
|
|
117
|
+
cookies?: string | null;
|
|
118
|
+
/** `window.CookieMunch`, if any. */
|
|
119
|
+
cookieMunch?: unknown;
|
|
120
|
+
/** `window.aff`, the page's referral script, if any (`getReferral()` → `{code, clickId, anonId, ts}`). */
|
|
121
|
+
aff?: unknown;
|
|
122
|
+
/** Base for resolving a relative redirect_url. */
|
|
123
|
+
base?: string;
|
|
124
|
+
/** ISO time of capture. */
|
|
125
|
+
capturedAt?: string;
|
|
126
|
+
}
|
|
127
|
+
/** What the page's referral script (`window.aff.getReferral()`) holds, or null. Never throws. */
|
|
128
|
+
export declare function referralFromScript(aff: unknown): ReferralSourceFields | null;
|
|
129
|
+
/** The explicit `ref_*` referral in a query string, or null. `consent` is whether ids may be kept. */
|
|
130
|
+
export declare function explicitReferralFromSearch(search: string | null | undefined): (ReferralSourceFields & {
|
|
131
|
+
consentGranted: boolean;
|
|
132
|
+
}) | null;
|
|
133
|
+
/**
|
|
134
|
+
* Capture the referral for a request, or null when there is nothing to send.
|
|
135
|
+
* Pure. One source wins, in order: the page's referral script, explicit
|
|
136
|
+
* `ref_*` URL parameters, a code in the instance's URL parameters, the
|
|
137
|
+
* tracking cookie. Fields are never mixed across sources. Ids need consent
|
|
138
|
+
* (Cookie Munch, the app's `referralConsent`, or `ref_consent=granted` on an
|
|
139
|
+
* explicit URL).
|
|
140
|
+
*/
|
|
141
|
+
export declare function captureReferral(config: ReferralConfig, page: ReferralPage, appConsent?: ReferralConsent): ReferralCapture | null;
|
|
142
|
+
/** Whether a FAPI POST path starts or continues a sign-in / sign-up (and so takes `referral`). */
|
|
143
|
+
export declare function acceptsReferral(path: string): boolean;
|
|
144
|
+
/**
|
|
145
|
+
* Remember the current page's query, so a code the visitor landed with
|
|
146
|
+
* survives client-side navigation that drops it. In memory only (never
|
|
147
|
+
* stored). Called when the SDK loads and whenever a client is created.
|
|
148
|
+
*/
|
|
149
|
+
export declare function rememberReferralLanding(): void;
|
|
150
|
+
/**
|
|
151
|
+
* Page-wide referral options, for apps whose framework creates FAPI clients
|
|
152
|
+
* internally: `configureReferralCapture({ referral: false })` opts out,
|
|
153
|
+
* `{ referralConsent: 'granted' }` tells the SDK the app's own consent
|
|
154
|
+
* manager allowed the referral cookie. A client's own options win.
|
|
155
|
+
*/
|
|
156
|
+
export declare function configureReferralCapture(options: ReferralCaptureOptions): void;
|
|
157
|
+
/** The page-wide options set with {@link configureReferralCapture}. */
|
|
158
|
+
export declare function referralCaptureDefaults(): ReferralCaptureOptions;
|
|
159
|
+
/** The key an instance's referral config is cached under (a FAPI origin + publishable key). */
|
|
160
|
+
export declare function referralCacheKeyFor(baseUrl: string | null | undefined, publishableKey: string): string;
|
|
161
|
+
/**
|
|
162
|
+
* Record an instance's referral config from a `/v1/client/environment` or
|
|
163
|
+
* `/v1/appearance` body it was fetched with. A body without `referrals` (an
|
|
164
|
+
* older server) is ignored.
|
|
165
|
+
*/
|
|
166
|
+
export declare function seedReferralConfig(cacheKey: string, environmentBody: unknown): void;
|
|
167
|
+
/** Forget every cached referral config (tests; an app switching instances). */
|
|
168
|
+
export declare function resetReferralCapture(): void;
|
|
169
|
+
/** What the referral helpers need from a FAPI client. */
|
|
170
|
+
export interface ReferralClient {
|
|
171
|
+
readonly referralCacheKey: string;
|
|
172
|
+
readonly referralOptions: ReferralCaptureOptions;
|
|
173
|
+
get<T>(path: string): Promise<{
|
|
174
|
+
ok: boolean;
|
|
175
|
+
data: T | null;
|
|
176
|
+
}>;
|
|
177
|
+
}
|
|
178
|
+
/** The instance's referral config, fetched once per page (and seeded by any environment read). */
|
|
179
|
+
export declare function loadReferralConfig(client: ReferralClient): Promise<ReferralConfig>;
|
|
180
|
+
/** The referral this client should send now, or null (off, opted out, nothing captured). Never throws. */
|
|
181
|
+
export declare function currentReferral(client: ReferralClient): Promise<ReferralCapture | null>;
|
|
182
|
+
/**
|
|
183
|
+
* Whether a sign-up / sign-in form should show the bot challenge because a
|
|
184
|
+
* referral code was captured and the instance requires it for referred
|
|
185
|
+
* sign-ups (even with the captcha otherwise off).
|
|
186
|
+
*/
|
|
187
|
+
export declare function referralChallengeRequired(client: ReferralClient): Promise<boolean>;
|
|
188
|
+
/** Options for {@link referralParams}, {@link withReferralParams}, {@link signIn} and {@link signUp}. */
|
|
189
|
+
export interface ReferralRedirectOptions {
|
|
190
|
+
/** `false`: add nothing. `'auto'` (default): capture as described above. */
|
|
191
|
+
referral?: false | 'auto';
|
|
192
|
+
/**
|
|
193
|
+
* The app's consent for referral tracking (click and anonymous ids). When
|
|
194
|
+
* omitted, the page-wide `referralConsent` applies, else Cookie Munch on the
|
|
195
|
+
* page (`referrals`, else `marketing`), else no consent (code only).
|
|
196
|
+
*/
|
|
197
|
+
consent?: ReferralConsent;
|
|
198
|
+
/** The instance's config, when the app has it; defaults to `ref` / `via` / `aff` and no cookie. */
|
|
199
|
+
config?: ReferralConfig;
|
|
200
|
+
}
|
|
201
|
+
/**
|
|
202
|
+
* The referral this page would send, as `ref_*` query parameters (`[]` when
|
|
203
|
+
* there is none). Synchronous: it uses the instance config when one was
|
|
204
|
+
* loaded on this page (or passed), else the default URL parameters. Consent
|
|
205
|
+
* comes from `consent`, else Cookie Munch on the page.
|
|
206
|
+
*/
|
|
207
|
+
export declare function referralParams(options?: ReferralRedirectOptions): Array<[string, string]>;
|
|
208
|
+
/** `url` with the page's referral added as `ref_*` parameters (existing ones are kept, never replaced). */
|
|
209
|
+
export declare function withReferralParams(url: string, options?: ReferralRedirectOptions): string;
|
|
210
|
+
/** Where {@link signIn} / {@link signUp} go. */
|
|
211
|
+
export interface HostedRedirectOptions extends ReferralRedirectOptions {
|
|
212
|
+
/**
|
|
213
|
+
* A full URL to go to: a hosted page, `/oauth2/authorize?...`, or your own
|
|
214
|
+
* login route. Wins over `frontendApi`.
|
|
215
|
+
*/
|
|
216
|
+
url?: string;
|
|
217
|
+
/** The instance's Frontend API host or origin (e.g. `accounts.example.com`), for its hosted page. */
|
|
218
|
+
frontendApi?: string;
|
|
219
|
+
/** Where the hosted page sends the user afterwards (`redirect_url`). */
|
|
220
|
+
redirectUrl?: string;
|
|
221
|
+
/** `false`: return the URL without navigating. Default true. */
|
|
222
|
+
navigate?: boolean;
|
|
223
|
+
}
|
|
224
|
+
/**
|
|
225
|
+
* Send the visitor to the hosted sign-in page (or `url`), carrying the
|
|
226
|
+
* referral they arrived with as `ref_*` parameters (`referral: 'auto'`, the
|
|
227
|
+
* default). Returns the URL it went to.
|
|
228
|
+
*
|
|
229
|
+
* ```ts
|
|
230
|
+
* signIn({ frontendApi: 'accounts.example.com', redirectUrl: location.href, consent: () => cmp.granted('referrals') });
|
|
231
|
+
* ```
|
|
232
|
+
*/
|
|
233
|
+
export declare function signIn(options: HostedRedirectOptions): string;
|
|
234
|
+
/** {@link signIn} for the hosted sign-up page. */
|
|
235
|
+
export declare function signUp(options: HostedRedirectOptions): string;
|
|
236
|
+
/** What a code lookup answers. */
|
|
237
|
+
export interface ReferralCodeLookup {
|
|
238
|
+
valid: boolean;
|
|
239
|
+
partnerDisplayName?: string;
|
|
240
|
+
/** Platform-defined; a string or an object with a `description`. */
|
|
241
|
+
refereeReward?: unknown;
|
|
242
|
+
}
|
|
243
|
+
/**
|
|
244
|
+
* Ask the instance's public code lookup (`code_lookup_url`) about a code, for
|
|
245
|
+
* an "X invited you" line. No credentials, `timeoutMs` (default 3000). Null
|
|
246
|
+
* when there is no lookup, the code is malformed, or the lookup fails: never
|
|
247
|
+
* block a sign-up on it.
|
|
248
|
+
*/
|
|
249
|
+
export declare function lookupReferralCode(config: Pick<ReferralConfig, 'codeLookupUrl'> | string | null | undefined, code: string, options?: {
|
|
250
|
+
fetchImpl?: typeof fetch;
|
|
251
|
+
timeoutMs?: number;
|
|
252
|
+
}): Promise<ReferralCodeLookup | null>;
|
package/dist/referral.js
ADDED
|
@@ -0,0 +1,653 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Referral attribution: capture the referral a visitor arrived with and send it
|
|
4
|
+
* on every sign-in / sign-up start, so the user Atlas creates is attributed to
|
|
5
|
+
* whoever referred them.
|
|
6
|
+
*
|
|
7
|
+
* What is captured, when the instance has referrals on (`referrals` in
|
|
8
|
+
* `GET /v1/client/environment`): ONE source, in precedence order, never
|
|
9
|
+
* mixing fields across sources:
|
|
10
|
+
* 1. the page's referral script, `window.aff.getReferral()`
|
|
11
|
+
* (`{code, clickId, anonId, ts}`), or explicit `ref_*` parameters
|
|
12
|
+
* (`ref`, `ref_click_id`, `ref_anon_id`, `ref_consent`, `ref_captured_at`)
|
|
13
|
+
* on the page URL;
|
|
14
|
+
* 2. the referral code from the page URL — the instance's URL parameters
|
|
15
|
+
* (default `ref`, `via`, `aff`) on the current page, the page the SDK first
|
|
16
|
+
* loaded on, and the `redirect_url` / `after_url` query of either;
|
|
17
|
+
* 3. the referral platform's first-party tracking cookie (the instance's
|
|
18
|
+
* `context_cookie`): JSON or URL-encoded JSON
|
|
19
|
+
* `{code?, clickId?, anonId?, ts?, exp?}`, or a plain click id. An expired
|
|
20
|
+
* cookie is ignored.
|
|
21
|
+
* Click and anonymous ids are sent only with consent; without it only the
|
|
22
|
+
* code goes.
|
|
23
|
+
*
|
|
24
|
+
* Consent: when Cookie Munch is on the page (`window.CookieMunch`), the cookie
|
|
25
|
+
* is read only when the instance's consent category is granted (else its
|
|
26
|
+
* fallback category). Without a consent manager the cookie is read only when
|
|
27
|
+
* the app says its own consent manager allowed it (`referralConsent:
|
|
28
|
+
* 'granted'`). Otherwise the URL code alone is sent. The SDK never writes the
|
|
29
|
+
* cookie. Nothing captured is trusted: the server re-validates every field.
|
|
30
|
+
*
|
|
31
|
+
* Opt out with `referral: false` (per client, or page-wide with
|
|
32
|
+
* {@link configureReferralCapture}). `'auto'` is the default.
|
|
33
|
+
*
|
|
34
|
+
* Redirects to a hosted page or `/oauth2/authorize` carry the same referral as
|
|
35
|
+
* `ref_*` query parameters: {@link signIn} / {@link signUp},
|
|
36
|
+
* {@link withReferralParams} and {@link referralParams}.
|
|
37
|
+
*/
|
|
38
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
39
|
+
exports.DISABLED_REFERRAL_CONFIG = void 0;
|
|
40
|
+
exports.referralToken = referralToken;
|
|
41
|
+
exports.referralConfigFrom = referralConfigFrom;
|
|
42
|
+
exports.referralCodeFromSearch = referralCodeFromSearch;
|
|
43
|
+
exports.referralSearches = referralSearches;
|
|
44
|
+
exports.referralTime = referralTime;
|
|
45
|
+
exports.parseReferralCookie = parseReferralCookie;
|
|
46
|
+
exports.readCookieValue = readCookieValue;
|
|
47
|
+
exports.referralConsentGranted = referralConsentGranted;
|
|
48
|
+
exports.referralFromScript = referralFromScript;
|
|
49
|
+
exports.explicitReferralFromSearch = explicitReferralFromSearch;
|
|
50
|
+
exports.captureReferral = captureReferral;
|
|
51
|
+
exports.acceptsReferral = acceptsReferral;
|
|
52
|
+
exports.rememberReferralLanding = rememberReferralLanding;
|
|
53
|
+
exports.configureReferralCapture = configureReferralCapture;
|
|
54
|
+
exports.referralCaptureDefaults = referralCaptureDefaults;
|
|
55
|
+
exports.referralCacheKeyFor = referralCacheKeyFor;
|
|
56
|
+
exports.seedReferralConfig = seedReferralConfig;
|
|
57
|
+
exports.resetReferralCapture = resetReferralCapture;
|
|
58
|
+
exports.loadReferralConfig = loadReferralConfig;
|
|
59
|
+
exports.currentReferral = currentReferral;
|
|
60
|
+
exports.referralChallengeRequired = referralChallengeRequired;
|
|
61
|
+
exports.referralParams = referralParams;
|
|
62
|
+
exports.withReferralParams = withReferralParams;
|
|
63
|
+
exports.signIn = signIn;
|
|
64
|
+
exports.signUp = signUp;
|
|
65
|
+
exports.lookupReferralCode = lookupReferralCode;
|
|
66
|
+
exports.DISABLED_REFERRAL_CONFIG = Object.freeze({
|
|
67
|
+
enabled: false,
|
|
68
|
+
urlParams: [],
|
|
69
|
+
contextCookie: null,
|
|
70
|
+
consentCategory: 'referrals',
|
|
71
|
+
consentFallbackCategory: 'marketing',
|
|
72
|
+
challengeReferredSignups: 'inherit',
|
|
73
|
+
codeLookupUrl: null,
|
|
74
|
+
signupCodeField: false,
|
|
75
|
+
});
|
|
76
|
+
const TOKEN = /^[A-Za-z0-9_-]{3,64}$/;
|
|
77
|
+
const PARAM = /^[A-Za-z0-9_.-]{1,40}$/;
|
|
78
|
+
const COOKIE_NAME = /^[A-Za-z0-9_.-]{1,64}$/;
|
|
79
|
+
const isRecord = (v) => !!v && typeof v === 'object' && !Array.isArray(v);
|
|
80
|
+
/** A well-formed code / click id / anonymous id, or null. */
|
|
81
|
+
function referralToken(value) {
|
|
82
|
+
if (typeof value !== 'string')
|
|
83
|
+
return null;
|
|
84
|
+
const v = value.trim();
|
|
85
|
+
return TOKEN.test(v) ? v : null;
|
|
86
|
+
}
|
|
87
|
+
/**
|
|
88
|
+
* Read the referral config from a `/v1/client/environment` body (or its
|
|
89
|
+
* `referrals` object). Missing or malformed → disabled.
|
|
90
|
+
*/
|
|
91
|
+
function referralConfigFrom(body) {
|
|
92
|
+
const raw = isRecord(body) && isRecord(body.referrals) ? body.referrals : body;
|
|
93
|
+
if (!isRecord(raw) || raw.enabled !== true)
|
|
94
|
+
return { ...exports.DISABLED_REFERRAL_CONFIG, urlParams: [] };
|
|
95
|
+
const params = Array.isArray(raw.url_params)
|
|
96
|
+
? raw.url_params.filter((p) => typeof p === 'string' && PARAM.test(p)).slice(0, 10)
|
|
97
|
+
: [];
|
|
98
|
+
return {
|
|
99
|
+
enabled: true,
|
|
100
|
+
urlParams: params.length ? params : ['ref', 'via', 'aff'],
|
|
101
|
+
contextCookie: typeof raw.context_cookie === 'string' && COOKIE_NAME.test(raw.context_cookie) ? raw.context_cookie : null,
|
|
102
|
+
consentCategory: typeof raw.consent_category === 'string' && raw.consent_category ? raw.consent_category : 'referrals',
|
|
103
|
+
consentFallbackCategory: typeof raw.consent_fallback_category === 'string' && raw.consent_fallback_category
|
|
104
|
+
? raw.consent_fallback_category
|
|
105
|
+
: null,
|
|
106
|
+
challengeReferredSignups: raw.challenge_referred_signups === 'always' ? 'always' : 'inherit',
|
|
107
|
+
codeLookupUrl: typeof raw.code_lookup_url === 'string' && /^https?:\/\//i.test(raw.code_lookup_url) && raw.code_lookup_url.includes('{code}')
|
|
108
|
+
? raw.code_lookup_url
|
|
109
|
+
: null,
|
|
110
|
+
signupCodeField: raw.signup_code_field === true,
|
|
111
|
+
};
|
|
112
|
+
}
|
|
113
|
+
/** The first well-formed code among `params` in a query string. */
|
|
114
|
+
function referralCodeFromSearch(search, params) {
|
|
115
|
+
if (!search)
|
|
116
|
+
return null;
|
|
117
|
+
let query;
|
|
118
|
+
try {
|
|
119
|
+
query = new URLSearchParams(search);
|
|
120
|
+
}
|
|
121
|
+
catch {
|
|
122
|
+
return null;
|
|
123
|
+
}
|
|
124
|
+
for (const name of params) {
|
|
125
|
+
const code = referralToken(query.get(name));
|
|
126
|
+
if (code)
|
|
127
|
+
return code;
|
|
128
|
+
}
|
|
129
|
+
return null;
|
|
130
|
+
}
|
|
131
|
+
/** The query strings a code may be in: each search, plus its `redirect_url` / `after_url` targets' queries. */
|
|
132
|
+
function referralSearches(searches, base) {
|
|
133
|
+
const out = [];
|
|
134
|
+
const add = (s) => {
|
|
135
|
+
if (s && !out.includes(s))
|
|
136
|
+
out.push(s);
|
|
137
|
+
};
|
|
138
|
+
for (const search of searches)
|
|
139
|
+
add(search);
|
|
140
|
+
for (const search of searches) {
|
|
141
|
+
let query;
|
|
142
|
+
try {
|
|
143
|
+
query = new URLSearchParams(search);
|
|
144
|
+
}
|
|
145
|
+
catch {
|
|
146
|
+
continue;
|
|
147
|
+
}
|
|
148
|
+
for (const key of ['redirect_url', 'after_url', 'redirect_url_complete', 'after_sign_up_url', 'after_sign_in_url']) {
|
|
149
|
+
const target = query.get(key);
|
|
150
|
+
if (!target)
|
|
151
|
+
continue;
|
|
152
|
+
try {
|
|
153
|
+
add(new URL(target, base ?? 'https://invalid.example').search);
|
|
154
|
+
}
|
|
155
|
+
catch {
|
|
156
|
+
// not a URL
|
|
157
|
+
}
|
|
158
|
+
}
|
|
159
|
+
}
|
|
160
|
+
return out;
|
|
161
|
+
}
|
|
162
|
+
/** An ISO time from an ISO string or unix seconds / milliseconds, or null. */
|
|
163
|
+
function referralTime(value) {
|
|
164
|
+
if (typeof value === 'number' && Number.isFinite(value) && value > 0) {
|
|
165
|
+
return new Date(value < 1e12 ? value * 1000 : value).toISOString();
|
|
166
|
+
}
|
|
167
|
+
if (typeof value !== 'string' || !value || value.length > 40)
|
|
168
|
+
return null;
|
|
169
|
+
if (/^\d{9,13}$/.test(value))
|
|
170
|
+
return referralTime(Number(value));
|
|
171
|
+
const t = Date.parse(value);
|
|
172
|
+
return Number.isFinite(t) ? new Date(t).toISOString() : null;
|
|
173
|
+
}
|
|
174
|
+
/**
|
|
175
|
+
* Parse a tracking-cookie value: JSON or URL-encoded JSON `{code?, clickId?,
|
|
176
|
+
* anonId?, ts?, exp?}` (snake_case accepted too); a plain value is a click id.
|
|
177
|
+
* `ts` (unix seconds or ms) becomes `capturedAt`; a cookie past its `exp` is
|
|
178
|
+
* ignored.
|
|
179
|
+
*/
|
|
180
|
+
function parseReferralCookie(value, now = Date.now()) {
|
|
181
|
+
if (typeof value !== 'string' || !value || value.length > 4096)
|
|
182
|
+
return null;
|
|
183
|
+
let decoded = value;
|
|
184
|
+
try {
|
|
185
|
+
decoded = decodeURIComponent(value);
|
|
186
|
+
}
|
|
187
|
+
catch {
|
|
188
|
+
// keep the raw value
|
|
189
|
+
}
|
|
190
|
+
const json = (s) => {
|
|
191
|
+
if (!s.startsWith('{'))
|
|
192
|
+
return null;
|
|
193
|
+
try {
|
|
194
|
+
const parsed = JSON.parse(s);
|
|
195
|
+
return isRecord(parsed) ? parsed : null;
|
|
196
|
+
}
|
|
197
|
+
catch {
|
|
198
|
+
return null;
|
|
199
|
+
}
|
|
200
|
+
};
|
|
201
|
+
const obj = json(value.trim()) ?? json(decoded.trim());
|
|
202
|
+
if (obj) {
|
|
203
|
+
const exp = referralTime(obj.exp);
|
|
204
|
+
if (exp && Date.parse(exp) <= now)
|
|
205
|
+
return null;
|
|
206
|
+
const out = {
|
|
207
|
+
code: referralToken(obj.code),
|
|
208
|
+
clickId: referralToken(obj.clickId ?? obj.click_id),
|
|
209
|
+
anonId: referralToken(obj.anonId ?? obj.anon_id),
|
|
210
|
+
};
|
|
211
|
+
const ts = referralTime(obj.ts);
|
|
212
|
+
if (ts)
|
|
213
|
+
out.capturedAt = ts;
|
|
214
|
+
return out.code || out.clickId || out.anonId ? out : null;
|
|
215
|
+
}
|
|
216
|
+
const clickId = referralToken(decoded);
|
|
217
|
+
return clickId ? { code: null, clickId, anonId: null } : null;
|
|
218
|
+
}
|
|
219
|
+
/** A cookie's value from a `document.cookie` string, or null. */
|
|
220
|
+
function readCookieValue(cookies, name) {
|
|
221
|
+
if (!cookies)
|
|
222
|
+
return null;
|
|
223
|
+
for (const part of cookies.split(';')) {
|
|
224
|
+
const p = part.trim();
|
|
225
|
+
if (p.startsWith(`${name}=`))
|
|
226
|
+
return p.slice(name.length + 1);
|
|
227
|
+
}
|
|
228
|
+
return null;
|
|
229
|
+
}
|
|
230
|
+
/**
|
|
231
|
+
* Whether the referral cookie may be read. Cookie Munch on the page decides
|
|
232
|
+
* when present (the instance's category, else its fallback category); else
|
|
233
|
+
* the app's own `referralConsent`.
|
|
234
|
+
*/
|
|
235
|
+
function referralConsentGranted(config, cookieMunch, appConsent) {
|
|
236
|
+
let consent;
|
|
237
|
+
try {
|
|
238
|
+
consent = isRecord(cookieMunch) || typeof cookieMunch === 'function' ? cookieMunch.consent : undefined;
|
|
239
|
+
}
|
|
240
|
+
catch {
|
|
241
|
+
consent = undefined;
|
|
242
|
+
}
|
|
243
|
+
if (isRecord(consent)) {
|
|
244
|
+
let v = consent[config.consentCategory];
|
|
245
|
+
if (typeof v !== 'boolean' && config.consentFallbackCategory)
|
|
246
|
+
v = consent[config.consentFallbackCategory];
|
|
247
|
+
return v === true;
|
|
248
|
+
}
|
|
249
|
+
let decision = appConsent;
|
|
250
|
+
if (typeof appConsent === 'function') {
|
|
251
|
+
try {
|
|
252
|
+
decision = appConsent();
|
|
253
|
+
}
|
|
254
|
+
catch {
|
|
255
|
+
decision = undefined;
|
|
256
|
+
}
|
|
257
|
+
}
|
|
258
|
+
return decision === 'granted' || decision === true;
|
|
259
|
+
}
|
|
260
|
+
/** The `ref_*` keys that mark a query as carrying an explicit referral (a bare `?ref=` is a landing code). */
|
|
261
|
+
const EXPLICIT_MARKERS = ['ref_click_id', 'ref_anon_id', 'ref_consent', 'ref_captured_at'];
|
|
262
|
+
/** What the page's referral script (`window.aff.getReferral()`) holds, or null. Never throws. */
|
|
263
|
+
function referralFromScript(aff) {
|
|
264
|
+
let r;
|
|
265
|
+
try {
|
|
266
|
+
const get = isRecord(aff) || typeof aff === 'function' ? aff.getReferral : undefined;
|
|
267
|
+
r = typeof get === 'function' ? get.call(aff) : null;
|
|
268
|
+
}
|
|
269
|
+
catch {
|
|
270
|
+
return null;
|
|
271
|
+
}
|
|
272
|
+
if (!isRecord(r))
|
|
273
|
+
return null;
|
|
274
|
+
const out = {
|
|
275
|
+
code: referralToken(r.code),
|
|
276
|
+
clickId: referralToken(r.clickId ?? r.click_id),
|
|
277
|
+
anonId: referralToken(r.anonId ?? r.anon_id),
|
|
278
|
+
};
|
|
279
|
+
const ts = referralTime(r.ts);
|
|
280
|
+
if (ts)
|
|
281
|
+
out.capturedAt = ts;
|
|
282
|
+
return out.code || out.clickId || out.anonId ? out : null;
|
|
283
|
+
}
|
|
284
|
+
/** The explicit `ref_*` referral in a query string, or null. `consent` is whether ids may be kept. */
|
|
285
|
+
function explicitReferralFromSearch(search) {
|
|
286
|
+
if (!search)
|
|
287
|
+
return null;
|
|
288
|
+
let query;
|
|
289
|
+
try {
|
|
290
|
+
query = new URLSearchParams(search);
|
|
291
|
+
}
|
|
292
|
+
catch {
|
|
293
|
+
return null;
|
|
294
|
+
}
|
|
295
|
+
if (!EXPLICIT_MARKERS.some((k) => query.get(k) !== null))
|
|
296
|
+
return null;
|
|
297
|
+
const granted = query.get('ref_consent') === 'granted';
|
|
298
|
+
const out = {
|
|
299
|
+
code: referralToken(query.get('ref')),
|
|
300
|
+
clickId: referralToken(query.get('ref_click_id')),
|
|
301
|
+
anonId: referralToken(query.get('ref_anon_id')),
|
|
302
|
+
consentGranted: granted,
|
|
303
|
+
};
|
|
304
|
+
const at = referralTime(query.get('ref_captured_at'));
|
|
305
|
+
if (at)
|
|
306
|
+
out.capturedAt = at;
|
|
307
|
+
return out.code || out.clickId || out.anonId ? out : null;
|
|
308
|
+
}
|
|
309
|
+
/** One source as the API's `referral` object: ids only with consent; null when nothing usable remains. */
|
|
310
|
+
function asCapture(source, consent, capturedAt) {
|
|
311
|
+
const ids = consent && !!(source.clickId || source.anonId);
|
|
312
|
+
const out = {
|
|
313
|
+
code: source.code,
|
|
314
|
+
click_id: ids ? source.clickId : null,
|
|
315
|
+
anon_id: ids ? source.anonId : null,
|
|
316
|
+
consent: ids ? 'granted' : 'not_required',
|
|
317
|
+
captured_at: source.capturedAt ?? capturedAt,
|
|
318
|
+
};
|
|
319
|
+
return out.code || out.click_id || out.anon_id ? out : null;
|
|
320
|
+
}
|
|
321
|
+
/**
|
|
322
|
+
* Capture the referral for a request, or null when there is nothing to send.
|
|
323
|
+
* Pure. One source wins, in order: the page's referral script, explicit
|
|
324
|
+
* `ref_*` URL parameters, a code in the instance's URL parameters, the
|
|
325
|
+
* tracking cookie. Fields are never mixed across sources. Ids need consent
|
|
326
|
+
* (Cookie Munch, the app's `referralConsent`, or `ref_consent=granted` on an
|
|
327
|
+
* explicit URL).
|
|
328
|
+
*/
|
|
329
|
+
function captureReferral(config, page, appConsent) {
|
|
330
|
+
if (!config.enabled)
|
|
331
|
+
return null;
|
|
332
|
+
const at = page.capturedAt ?? new Date().toISOString();
|
|
333
|
+
let consent;
|
|
334
|
+
const consented = () => (consent ??= referralConsentGranted(config, page.cookieMunch, appConsent));
|
|
335
|
+
const script = referralFromScript(page.aff);
|
|
336
|
+
if (script) {
|
|
337
|
+
const out = asCapture(script, consented(), at);
|
|
338
|
+
if (out)
|
|
339
|
+
return out;
|
|
340
|
+
}
|
|
341
|
+
const searches = referralSearches(page.searches, page.base);
|
|
342
|
+
for (const search of searches) {
|
|
343
|
+
const explicit = explicitReferralFromSearch(search);
|
|
344
|
+
if (!explicit)
|
|
345
|
+
continue;
|
|
346
|
+
const out = asCapture(explicit, explicit.consentGranted || consented(), at);
|
|
347
|
+
if (out)
|
|
348
|
+
return out;
|
|
349
|
+
}
|
|
350
|
+
for (const search of searches) {
|
|
351
|
+
const code = referralCodeFromSearch(search, config.urlParams);
|
|
352
|
+
if (code)
|
|
353
|
+
return { code, click_id: null, anon_id: null, consent: 'not_required', captured_at: at };
|
|
354
|
+
}
|
|
355
|
+
const cookie = config.contextCookie ? parseReferralCookie(readCookieValue(page.cookies, config.contextCookie)) : null;
|
|
356
|
+
return cookie ? asCapture(cookie, consented(), at) : null;
|
|
357
|
+
}
|
|
358
|
+
/** The FAPI POST paths that take `referral`: every sign-in / sign-up start and the steps that continue one. */
|
|
359
|
+
const REFERRAL_EXACT = new Set([
|
|
360
|
+
'/v1/client/sign_ups',
|
|
361
|
+
'/v1/client/sign_ins',
|
|
362
|
+
'/v1/client/sign_ins/oauth',
|
|
363
|
+
'/v1/client/sign_ins/sso',
|
|
364
|
+
'/v1/client/sign_ins/saml',
|
|
365
|
+
'/v1/client/sign_ins/discourse',
|
|
366
|
+
'/v1/client/sign_ins/id_token',
|
|
367
|
+
'/v1/client/sign_ins/id_token/nonce',
|
|
368
|
+
'/v1/client/sign_ins/external_jwt',
|
|
369
|
+
'/v1/client/sign_ins/ldap',
|
|
370
|
+
'/v1/client/sign_ins/passkey/finish',
|
|
371
|
+
'/v1/oauth/telegram',
|
|
372
|
+
'/v1/oauth/siwe/nonce',
|
|
373
|
+
'/v1/oauth/siwe/verify',
|
|
374
|
+
'/v1/oauth/siws/nonce',
|
|
375
|
+
'/v1/oauth/siws/verify',
|
|
376
|
+
'/v1/oauth/siwf/nonce',
|
|
377
|
+
'/v1/oauth/siwf/verify',
|
|
378
|
+
]);
|
|
379
|
+
const REFERRAL_STEP = /^\/v1\/client\/(sign_ins\/[^/]+\/(prepare_first_factor|attempt_first_factor)|sign_ups\/[^/]+\/(prepare_verification|attempt_verification))$/;
|
|
380
|
+
/** Whether a FAPI POST path starts or continues a sign-in / sign-up (and so takes `referral`). */
|
|
381
|
+
function acceptsReferral(path) {
|
|
382
|
+
const p = path.split('?')[0] ?? path;
|
|
383
|
+
return REFERRAL_EXACT.has(p) || REFERRAL_STEP.test(p);
|
|
384
|
+
}
|
|
385
|
+
const browser = () => typeof window === 'undefined' ? null : window;
|
|
386
|
+
/** The query strings the page has shown since the SDK loaded (the landing query first). */
|
|
387
|
+
const landingSearches = [];
|
|
388
|
+
let landingAt = null;
|
|
389
|
+
/**
|
|
390
|
+
* Remember the current page's query, so a code the visitor landed with
|
|
391
|
+
* survives client-side navigation that drops it. In memory only (never
|
|
392
|
+
* stored). Called when the SDK loads and whenever a client is created.
|
|
393
|
+
*/
|
|
394
|
+
function rememberReferralLanding() {
|
|
395
|
+
const search = browser()?.location?.search;
|
|
396
|
+
if (!search || landingSearches.includes(search))
|
|
397
|
+
return;
|
|
398
|
+
landingSearches.push(search);
|
|
399
|
+
landingAt ??= new Date().toISOString();
|
|
400
|
+
}
|
|
401
|
+
rememberReferralLanding();
|
|
402
|
+
let pageOptions = {};
|
|
403
|
+
/**
|
|
404
|
+
* Page-wide referral options, for apps whose framework creates FAPI clients
|
|
405
|
+
* internally: `configureReferralCapture({ referral: false })` opts out,
|
|
406
|
+
* `{ referralConsent: 'granted' }` tells the SDK the app's own consent
|
|
407
|
+
* manager allowed the referral cookie. A client's own options win.
|
|
408
|
+
*/
|
|
409
|
+
function configureReferralCapture(options) {
|
|
410
|
+
pageOptions = { ...options };
|
|
411
|
+
}
|
|
412
|
+
/** The page-wide options set with {@link configureReferralCapture}. */
|
|
413
|
+
function referralCaptureDefaults() {
|
|
414
|
+
return pageOptions;
|
|
415
|
+
}
|
|
416
|
+
const configs = new Map();
|
|
417
|
+
/** The key an instance's referral config is cached under (a FAPI origin + publishable key). */
|
|
418
|
+
function referralCacheKeyFor(baseUrl, publishableKey) {
|
|
419
|
+
return `${baseUrl ?? ''}|${publishableKey}`;
|
|
420
|
+
}
|
|
421
|
+
/**
|
|
422
|
+
* Record an instance's referral config from a `/v1/client/environment` or
|
|
423
|
+
* `/v1/appearance` body it was fetched with. A body without `referrals` (an
|
|
424
|
+
* older server) is ignored.
|
|
425
|
+
*/
|
|
426
|
+
function seedReferralConfig(cacheKey, environmentBody) {
|
|
427
|
+
if (!isRecord(environmentBody) || !('referrals' in environmentBody))
|
|
428
|
+
return;
|
|
429
|
+
configs.set(cacheKey, Promise.resolve(referralConfigFrom(environmentBody)));
|
|
430
|
+
}
|
|
431
|
+
/** Forget every cached referral config (tests; an app switching instances). */
|
|
432
|
+
function resetReferralCapture() {
|
|
433
|
+
configs.clear();
|
|
434
|
+
landingSearches.length = 0;
|
|
435
|
+
landingAt = null;
|
|
436
|
+
pageOptions = {};
|
|
437
|
+
}
|
|
438
|
+
/** The instance's referral config, fetched once per page (and seeded by any environment read). */
|
|
439
|
+
function loadReferralConfig(client) {
|
|
440
|
+
let pending = configs.get(client.referralCacheKey);
|
|
441
|
+
if (!pending) {
|
|
442
|
+
const key = client.referralCacheKey;
|
|
443
|
+
// A failed read reads as "off" for this start and is not cached, so a later
|
|
444
|
+
// start asks again.
|
|
445
|
+
const failed = () => {
|
|
446
|
+
if (configs.get(key) === pending)
|
|
447
|
+
configs.delete(key);
|
|
448
|
+
return { ...exports.DISABLED_REFERRAL_CONFIG, urlParams: [] };
|
|
449
|
+
};
|
|
450
|
+
pending = client
|
|
451
|
+
.get('/v1/client/environment')
|
|
452
|
+
.then((r) => (r.ok ? referralConfigFrom(r.data) : failed()))
|
|
453
|
+
.catch(failed);
|
|
454
|
+
configs.set(key, pending);
|
|
455
|
+
}
|
|
456
|
+
return pending;
|
|
457
|
+
}
|
|
458
|
+
/**
|
|
459
|
+
* No config yet (no environment / appearance read on this page) and no query
|
|
460
|
+
* anywhere to find a code in: nothing to send, and no reason to ask the
|
|
461
|
+
* server. A cookie-only referral is sent once a prebuilt form (or any
|
|
462
|
+
* environment read) has loaded the config.
|
|
463
|
+
*/
|
|
464
|
+
function worthAsking(client) {
|
|
465
|
+
const win = browser();
|
|
466
|
+
return (configs.has(client.referralCacheKey) ||
|
|
467
|
+
!!win?.location?.search ||
|
|
468
|
+
landingSearches.length > 0 ||
|
|
469
|
+
referralFromScript(win?.aff) !== null);
|
|
470
|
+
}
|
|
471
|
+
function effectiveOptions(client) {
|
|
472
|
+
const own = client.referralOptions;
|
|
473
|
+
return {
|
|
474
|
+
referral: own.referral ?? pageOptions.referral,
|
|
475
|
+
referralConsent: own.referralConsent ?? pageOptions.referralConsent,
|
|
476
|
+
};
|
|
477
|
+
}
|
|
478
|
+
/** The referral this client should send now, or null (off, opted out, nothing captured). Never throws. */
|
|
479
|
+
async function currentReferral(client) {
|
|
480
|
+
const win = browser();
|
|
481
|
+
if (!win)
|
|
482
|
+
return null;
|
|
483
|
+
const options = effectiveOptions(client);
|
|
484
|
+
if (options.referral === false)
|
|
485
|
+
return null;
|
|
486
|
+
try {
|
|
487
|
+
const current = win.location?.search ?? '';
|
|
488
|
+
if (!worthAsking(client))
|
|
489
|
+
return null;
|
|
490
|
+
const config = await loadReferralConfig(client);
|
|
491
|
+
if (!config.enabled)
|
|
492
|
+
return null;
|
|
493
|
+
return captureReferral(config, {
|
|
494
|
+
searches: [current, ...landingSearches],
|
|
495
|
+
cookies: win.document?.cookie ?? null,
|
|
496
|
+
cookieMunch: win.CookieMunch,
|
|
497
|
+
aff: win.aff,
|
|
498
|
+
base: win.location?.href,
|
|
499
|
+
capturedAt: landingAt ?? undefined,
|
|
500
|
+
}, options.referralConsent);
|
|
501
|
+
}
|
|
502
|
+
catch {
|
|
503
|
+
return null;
|
|
504
|
+
}
|
|
505
|
+
}
|
|
506
|
+
/**
|
|
507
|
+
* Whether a sign-up / sign-in form should show the bot challenge because a
|
|
508
|
+
* referral code was captured and the instance requires it for referred
|
|
509
|
+
* sign-ups (even with the captcha otherwise off).
|
|
510
|
+
*/
|
|
511
|
+
async function referralChallengeRequired(client) {
|
|
512
|
+
if (!browser() || effectiveOptions(client).referral === false || !worthAsking(client))
|
|
513
|
+
return false;
|
|
514
|
+
try {
|
|
515
|
+
const config = await loadReferralConfig(client);
|
|
516
|
+
if (config.challengeReferredSignups !== 'always')
|
|
517
|
+
return false;
|
|
518
|
+
const ref = await currentReferral(client);
|
|
519
|
+
return !!ref?.code;
|
|
520
|
+
}
|
|
521
|
+
catch {
|
|
522
|
+
return false;
|
|
523
|
+
}
|
|
524
|
+
}
|
|
525
|
+
/**
|
|
526
|
+
* The referral this page would send, as `ref_*` query parameters (`[]` when
|
|
527
|
+
* there is none). Synchronous: it uses the instance config when one was
|
|
528
|
+
* loaded on this page (or passed), else the default URL parameters. Consent
|
|
529
|
+
* comes from `consent`, else Cookie Munch on the page.
|
|
530
|
+
*/
|
|
531
|
+
function referralParams(options = {}) {
|
|
532
|
+
const win = browser();
|
|
533
|
+
if (!win || options.referral === false || pageOptions.referral === false)
|
|
534
|
+
return [];
|
|
535
|
+
try {
|
|
536
|
+
const config = options.config?.enabled
|
|
537
|
+
? options.config
|
|
538
|
+
: { ...exports.DISABLED_REFERRAL_CONFIG, enabled: true, urlParams: ['ref', 'via', 'aff'] };
|
|
539
|
+
const ref = captureReferral(config, {
|
|
540
|
+
searches: [win.location?.search ?? '', ...landingSearches],
|
|
541
|
+
cookies: win.document?.cookie ?? null,
|
|
542
|
+
cookieMunch: win.CookieMunch,
|
|
543
|
+
aff: win.aff,
|
|
544
|
+
base: win.location?.href,
|
|
545
|
+
capturedAt: landingAt ?? undefined,
|
|
546
|
+
}, options.consent ?? pageOptions.referralConsent);
|
|
547
|
+
if (!ref)
|
|
548
|
+
return [];
|
|
549
|
+
const out = [];
|
|
550
|
+
if (ref.code)
|
|
551
|
+
out.push(['ref', ref.code]);
|
|
552
|
+
if (ref.click_id)
|
|
553
|
+
out.push(['ref_click_id', ref.click_id]);
|
|
554
|
+
if (ref.anon_id)
|
|
555
|
+
out.push(['ref_anon_id', ref.anon_id]);
|
|
556
|
+
out.push(['ref_consent', ref.consent]);
|
|
557
|
+
out.push(['ref_captured_at', ref.captured_at]);
|
|
558
|
+
return out;
|
|
559
|
+
}
|
|
560
|
+
catch {
|
|
561
|
+
return [];
|
|
562
|
+
}
|
|
563
|
+
}
|
|
564
|
+
/** `url` with the page's referral added as `ref_*` parameters (existing ones are kept, never replaced). */
|
|
565
|
+
function withReferralParams(url, options = {}) {
|
|
566
|
+
const params = referralParams(options);
|
|
567
|
+
if (!params.length)
|
|
568
|
+
return url;
|
|
569
|
+
let u;
|
|
570
|
+
try {
|
|
571
|
+
u = new URL(url, browser()?.location?.href ?? undefined);
|
|
572
|
+
}
|
|
573
|
+
catch {
|
|
574
|
+
return url;
|
|
575
|
+
}
|
|
576
|
+
for (const [k, v] of params)
|
|
577
|
+
if (!u.searchParams.has(k))
|
|
578
|
+
u.searchParams.set(k, v);
|
|
579
|
+
return u.toString();
|
|
580
|
+
}
|
|
581
|
+
function hostedUrl(page, options) {
|
|
582
|
+
if (options.url)
|
|
583
|
+
return options.url;
|
|
584
|
+
if (!options.frontendApi)
|
|
585
|
+
throw new Error('signIn/signUp need url or frontendApi');
|
|
586
|
+
const origin = /^https?:\/\//i.test(options.frontendApi) ? options.frontendApi : `https://${options.frontendApi}`;
|
|
587
|
+
const u = new URL(`/hosted/${page}`, origin);
|
|
588
|
+
if (options.redirectUrl)
|
|
589
|
+
u.searchParams.set('redirect_url', options.redirectUrl);
|
|
590
|
+
return u.toString();
|
|
591
|
+
}
|
|
592
|
+
function go(page, options) {
|
|
593
|
+
const target = withReferralParams(hostedUrl(page, options), options);
|
|
594
|
+
if (options.navigate !== false)
|
|
595
|
+
browser()?.location?.assign?.(target);
|
|
596
|
+
return target;
|
|
597
|
+
}
|
|
598
|
+
/**
|
|
599
|
+
* Send the visitor to the hosted sign-in page (or `url`), carrying the
|
|
600
|
+
* referral they arrived with as `ref_*` parameters (`referral: 'auto'`, the
|
|
601
|
+
* default). Returns the URL it went to.
|
|
602
|
+
*
|
|
603
|
+
* ```ts
|
|
604
|
+
* signIn({ frontendApi: 'accounts.example.com', redirectUrl: location.href, consent: () => cmp.granted('referrals') });
|
|
605
|
+
* ```
|
|
606
|
+
*/
|
|
607
|
+
function signIn(options) {
|
|
608
|
+
return go('sign-in', options);
|
|
609
|
+
}
|
|
610
|
+
/** {@link signIn} for the hosted sign-up page. */
|
|
611
|
+
function signUp(options) {
|
|
612
|
+
return go('sign-up', options);
|
|
613
|
+
}
|
|
614
|
+
/**
|
|
615
|
+
* Ask the instance's public code lookup (`code_lookup_url`) about a code, for
|
|
616
|
+
* an "X invited you" line. No credentials, `timeoutMs` (default 3000). Null
|
|
617
|
+
* when there is no lookup, the code is malformed, or the lookup fails: never
|
|
618
|
+
* block a sign-up on it.
|
|
619
|
+
*/
|
|
620
|
+
async function lookupReferralCode(config, code, options = {}) {
|
|
621
|
+
const template = typeof config === 'string' ? config : config?.codeLookupUrl;
|
|
622
|
+
const token = referralToken(code);
|
|
623
|
+
const f = options.fetchImpl ?? (typeof fetch === 'function' ? fetch : undefined);
|
|
624
|
+
if (!template || !token || !f)
|
|
625
|
+
return null;
|
|
626
|
+
const ctrl = typeof AbortController === 'function' ? new AbortController() : null;
|
|
627
|
+
const timer = setTimeout(() => ctrl?.abort(), options.timeoutMs ?? 3000);
|
|
628
|
+
try {
|
|
629
|
+
const res = await f(template.split('{code}').join(encodeURIComponent(token)), {
|
|
630
|
+
method: 'GET',
|
|
631
|
+
credentials: 'omit',
|
|
632
|
+
headers: { accept: 'application/json' },
|
|
633
|
+
signal: ctrl?.signal,
|
|
634
|
+
});
|
|
635
|
+
if (!res.ok)
|
|
636
|
+
return null;
|
|
637
|
+
const body = (await res.json());
|
|
638
|
+
if (!isRecord(body) || typeof body.valid !== 'boolean')
|
|
639
|
+
return null;
|
|
640
|
+
return {
|
|
641
|
+
valid: body.valid,
|
|
642
|
+
...(typeof body.partnerDisplayName === 'string' ? { partnerDisplayName: body.partnerDisplayName } : {}),
|
|
643
|
+
...(body.refereeReward !== undefined ? { refereeReward: body.refereeReward } : {}),
|
|
644
|
+
};
|
|
645
|
+
}
|
|
646
|
+
catch {
|
|
647
|
+
return null;
|
|
648
|
+
}
|
|
649
|
+
finally {
|
|
650
|
+
clearTimeout(timer);
|
|
651
|
+
}
|
|
652
|
+
}
|
|
653
|
+
//# sourceMappingURL=referral.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"referral.js","sourceRoot":"","sources":["../src/referral.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAmCG;;;AAmEH,sCAIC;AAMD,gDAwBC;AAGD,wDAaC;AAGD,4CAwBC;AAGD,oCAQC;AAiBD,kDAgCC;AAGD,0CAOC;AAOD,wDAyBC;AAsBD,gDAiBC;AAGD,gEAqBC;AAuBD,0CA4BC;AA0BD,0CAGC;AAuBD,0DAKC;AAWD,4DAEC;AAGD,0DAEC;AAKD,kDAEC;AAOD,gDAGC;AAGD,oDAKC;AAUD,gDAiBC;AA2BD,0CAyBC;AAOD,8DAUC;AAwBD,wCA8BC;AAGD,gDAWC;AAyCD,wBAEC;AAGD,wBAEC;AAkBD,gDA+BC;AAjqBY,QAAA,wBAAwB,GAA6B,MAAM,CAAC,MAAM,CAAC;IAC9E,OAAO,EAAE,KAAK;IACd,SAAS,EAAE,EAAE;IACb,aAAa,EAAE,IAAI;IACnB,eAAe,EAAE,WAAW;IAC5B,uBAAuB,EAAE,WAAW;IACpC,wBAAwB,EAAE,SAAS;IACnC,aAAa,EAAE,IAAI;IACnB,eAAe,EAAE,KAAK;CACvB,CAAC,CAAC;AAEH,MAAM,KAAK,GAAG,uBAAuB,CAAC;AACtC,MAAM,KAAK,GAAG,wBAAwB,CAAC;AACvC,MAAM,WAAW,GAAG,wBAAwB,CAAC;AAE7C,MAAM,QAAQ,GAAG,CAAC,CAAU,EAAgC,EAAE,CAC5D,CAAC,CAAC,CAAC,IAAI,OAAO,CAAC,KAAK,QAAQ,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;AAEpD,6DAA6D;AAC7D,SAAgB,aAAa,CAAC,KAAc;IAC1C,IAAI,OAAO,KAAK,KAAK,QAAQ;QAAE,OAAO,IAAI,CAAC;IAC3C,MAAM,CAAC,GAAG,KAAK,CAAC,IAAI,EAAE,CAAC;IACvB,OAAO,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;AAClC,CAAC;AAED;;;GAGG;AACH,SAAgB,kBAAkB,CAAC,IAAa;IAC9C,MAAM,GAAG,GAAG,QAAQ,CAAC,IAAI,CAAC,IAAI,QAAQ,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC;IAC/E,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,GAAG,CAAC,OAAO,KAAK,IAAI;QAAE,OAAO,EAAE,GAAG,gCAAwB,EAAE,SAAS,EAAE,EAAE,EAAE,CAAC;IAClG,MAAM,MAAM,GAAG,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,UAAU,CAAC;QAC1C,CAAC,CAAC,GAAG,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,EAAe,EAAE,CAAC,OAAO,CAAC,KAAK,QAAQ,IAAI,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC;QAChG,CAAC,CAAC,EAAE,CAAC;IACP,OAAO;QACL,OAAO,EAAE,IAAI;QACb,SAAS,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC;QACzD,aAAa,EACX,OAAO,GAAG,CAAC,cAAc,KAAK,QAAQ,IAAI,WAAW,CAAC,IAAI,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC,CAAC,IAAI;QAC5G,eAAe,EACb,OAAO,GAAG,CAAC,gBAAgB,KAAK,QAAQ,IAAI,GAAG,CAAC,gBAAgB,CAAC,CAAC,CAAC,GAAG,CAAC,gBAAgB,CAAC,CAAC,CAAC,WAAW;QACvG,uBAAuB,EACrB,OAAO,GAAG,CAAC,yBAAyB,KAAK,QAAQ,IAAI,GAAG,CAAC,yBAAyB;YAChF,CAAC,CAAC,GAAG,CAAC,yBAAyB;YAC/B,CAAC,CAAC,IAAI;QACV,wBAAwB,EAAE,GAAG,CAAC,0BAA0B,KAAK,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,SAAS;QAC5F,aAAa,EACX,OAAO,GAAG,CAAC,eAAe,KAAK,QAAQ,IAAI,eAAe,CAAC,IAAI,CAAC,GAAG,CAAC,eAAe,CAAC,IAAI,GAAG,CAAC,eAAe,CAAC,QAAQ,CAAC,QAAQ,CAAC;YAC5H,CAAC,CAAC,GAAG,CAAC,eAAe;YACrB,CAAC,CAAC,IAAI;QACV,eAAe,EAAE,GAAG,CAAC,iBAAiB,KAAK,IAAI;KAChD,CAAC;AACJ,CAAC;AAED,mEAAmE;AACnE,SAAgB,sBAAsB,CAAC,MAAiC,EAAE,MAAyB;IACjG,IAAI,CAAC,MAAM;QAAE,OAAO,IAAI,CAAC;IACzB,IAAI,KAAsB,CAAC;IAC3B,IAAI,CAAC;QACH,KAAK,GAAG,IAAI,eAAe,CAAC,MAAM,CAAC,CAAC;IACtC,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;IACD,KAAK,MAAM,IAAI,IAAI,MAAM,EAAE,CAAC;QAC1B,MAAM,IAAI,GAAG,aAAa,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC;QAC5C,IAAI,IAAI;YAAE,OAAO,IAAI,CAAC;IACxB,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED,+GAA+G;AAC/G,SAAgB,gBAAgB,CAAC,QAA2B,EAAE,IAAa;IACzE,MAAM,GAAG,GAAa,EAAE,CAAC;IACzB,MAAM,GAAG,GAAG,CAAC,CAA4B,EAAE,EAAE;QAC3C,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC;YAAE,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IACzC,CAAC,CAAC;IACF,KAAK,MAAM,MAAM,IAAI,QAAQ;QAAE,GAAG,CAAC,MAAM,CAAC,CAAC;IAC3C,KAAK,MAAM,MAAM,IAAI,QAAQ,EAAE,CAAC;QAC9B,IAAI,KAAsB,CAAC;QAC3B,IAAI,CAAC;YACH,KAAK,GAAG,IAAI,eAAe,CAAC,MAAM,CAAC,CAAC;QACtC,CAAC;QAAC,MAAM,CAAC;YACP,SAAS;QACX,CAAC;QACD,KAAK,MAAM,GAAG,IAAI,CAAC,cAAc,EAAE,WAAW,EAAE,uBAAuB,EAAE,mBAAmB,EAAE,mBAAmB,CAAC,EAAE,CAAC;YACnH,MAAM,MAAM,GAAG,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;YAC9B,IAAI,CAAC,MAAM;gBAAE,SAAS;YACtB,IAAI,CAAC;gBACH,GAAG,CAAC,IAAI,GAAG,CAAC,MAAM,EAAE,IAAI,IAAI,yBAAyB,CAAC,CAAC,MAAM,CAAC,CAAC;YACjE,CAAC;YAAC,MAAM,CAAC;gBACP,YAAY;YACd,CAAC;QACH,CAAC;IACH,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC;AAED,8EAA8E;AAC9E,SAAgB,YAAY,CAAC,KAAc;IACzC,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,KAAK,GAAG,CAAC,EAAE,CAAC;QACrE,OAAO,IAAI,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,CAAC,CAAC,KAAK,GAAG,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,WAAW,EAAE,CAAC;IACrE,CAAC;IACD,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,CAAC,KAAK,IAAI,KAAK,CAAC,MAAM,GAAG,EAAE;QAAE,OAAO,IAAI,CAAC;IAC1E,IAAI,YAAY,CAAC,IAAI,CAAC,KAAK,CAAC;QAAE,OAAO,YAAY,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;IACjE,MAAM,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;IAC5B,OAAO,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;AAC/D,CAAC;AAWD;;;;;GAKG;AACH,SAAgB,mBAAmB,CAAC,KAAgC,EAAE,MAAc,IAAI,CAAC,GAAG,EAAE;IAC5F,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,CAAC,KAAK,IAAI,KAAK,CAAC,MAAM,GAAG,IAAI;QAAE,OAAO,IAAI,CAAC;IAC5E,IAAI,OAAO,GAAG,KAAK,CAAC;IACpB,IAAI,CAAC;QACH,OAAO,GAAG,kBAAkB,CAAC,KAAK,CAAC,CAAC;IACtC,CAAC;IAAC,MAAM,CAAC;QACP,qBAAqB;IACvB,CAAC;IACD,MAAM,IAAI,GAAG,CAAC,CAAS,EAAkC,EAAE;QACzD,IAAI,CAAC,CAAC,CAAC,UAAU,CAAC,GAAG,CAAC;YAAE,OAAO,IAAI,CAAC;QACpC,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAY,CAAC;YACxC,OAAO,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC;QAC1C,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,IAAI,CAAC;QACd,CAAC;IACH,CAAC,CAAC;IACF,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,IAAI,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC;IACvD,IAAI,GAAG,EAAE,CAAC;QACR,MAAM,GAAG,GAAG,YAAY,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QAClC,IAAI,GAAG,IAAI,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,GAAG;YAAE,OAAO,IAAI,CAAC;QAC/C,MAAM,GAAG,GAAyB;YAChC,IAAI,EAAE,aAAa,CAAC,GAAG,CAAC,IAAI,CAAC;YAC7B,OAAO,EAAE,aAAa,CAAC,GAAG,CAAC,OAAO,IAAI,GAAG,CAAC,QAAQ,CAAC;YACnD,MAAM,EAAE,aAAa,CAAC,GAAG,CAAC,MAAM,IAAI,GAAG,CAAC,OAAO,CAAC;SACjD,CAAC;QACF,MAAM,EAAE,GAAG,YAAY,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAChC,IAAI,EAAE;YAAE,GAAG,CAAC,UAAU,GAAG,EAAE,CAAC;QAC5B,OAAO,GAAG,CAAC,IAAI,IAAI,GAAG,CAAC,OAAO,IAAI,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC;IAC5D,CAAC;IACD,MAAM,OAAO,GAAG,aAAa,CAAC,OAAO,CAAC,CAAC;IACvC,OAAO,OAAO,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;AAChE,CAAC;AAED,iEAAiE;AACjE,SAAgB,eAAe,CAAC,OAAkC,EAAE,IAAY;IAC9E,IAAI,CAAC,OAAO;QAAE,OAAO,IAAI,CAAC;IAC1B,KAAK,MAAM,IAAI,IAAI,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC;QACtC,MAAM,CAAC,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;QACtB,IAAI,CAAC,CAAC,UAAU,CAAC,GAAG,IAAI,GAAG,CAAC;YAAE,OAAO,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;IAChE,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED;;;;GAIG;AACH,SAAgB,sBAAsB,CACpC,MAA2E,EAC3E,WAAoB,EACpB,UAAuC;IAEvC,IAAI,OAAgB,CAAC;IACrB,IAAI,CAAC;QACH,OAAO,GAAG,QAAQ,CAAC,WAAW,CAAC,IAAI,OAAO,WAAW,KAAK,UAAU,CAAC,CAAC,CAAE,WAAqC,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS,CAAC;IACpI,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,GAAG,SAAS,CAAC;IACtB,CAAC;IACD,IAAI,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC;QACtB,IAAI,CAAC,GAAG,OAAO,CAAC,MAAM,CAAC,eAAe,CAAC,CAAC;QACxC,IAAI,OAAO,CAAC,KAAK,SAAS,IAAI,MAAM,CAAC,uBAAuB;YAAE,CAAC,GAAG,OAAO,CAAC,MAAM,CAAC,uBAAuB,CAAC,CAAC;QAC1G,OAAO,CAAC,KAAK,IAAI,CAAC;IACpB,CAAC;IACD,IAAI,QAAQ,GAAY,UAAU,CAAC;IACnC,IAAI,OAAO,UAAU,KAAK,UAAU,EAAE,CAAC;QACrC,IAAI,CAAC;YACH,QAAQ,GAAG,UAAU,EAAE,CAAC;QAC1B,CAAC;QAAC,MAAM,CAAC;YACP,QAAQ,GAAG,SAAS,CAAC;QACvB,CAAC;IACH,CAAC;IACD,OAAO,QAAQ,KAAK,SAAS,IAAI,QAAQ,KAAK,IAAI,CAAC;AACrD,CAAC;AAkBD,8GAA8G;AAC9G,MAAM,gBAAgB,GAAG,CAAC,cAAc,EAAE,aAAa,EAAE,aAAa,EAAE,iBAAiB,CAAC,CAAC;AAE3F,iGAAiG;AACjG,SAAgB,kBAAkB,CAAC,GAAY;IAC7C,IAAI,CAAU,CAAC;IACf,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,QAAQ,CAAC,GAAG,CAAC,IAAI,OAAO,GAAG,KAAK,UAAU,CAAC,CAAC,CAAE,GAAiC,CAAC,WAAW,CAAC,CAAC,CAAC,SAAS,CAAC;QACpH,CAAC,GAAG,OAAO,GAAG,KAAK,UAAU,CAAC,CAAC,CAAE,GAAqB,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;IAC1E,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;IACD,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC;QAAE,OAAO,IAAI,CAAC;IAC9B,MAAM,GAAG,GAAyB;QAChC,IAAI,EAAE,aAAa,CAAC,CAAC,CAAC,IAAI,CAAC;QAC3B,OAAO,EAAE,aAAa,CAAC,CAAC,CAAC,OAAO,IAAI,CAAC,CAAC,QAAQ,CAAC;QAC/C,MAAM,EAAE,aAAa,CAAC,CAAC,CAAC,MAAM,IAAI,CAAC,CAAC,OAAO,CAAC;KAC7C,CAAC;IACF,MAAM,EAAE,GAAG,YAAY,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;IAC9B,IAAI,EAAE;QAAE,GAAG,CAAC,UAAU,GAAG,EAAE,CAAC;IAC5B,OAAO,GAAG,CAAC,IAAI,IAAI,GAAG,CAAC,OAAO,IAAI,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC;AAC5D,CAAC;AAED,sGAAsG;AACtG,SAAgB,0BAA0B,CACxC,MAAiC;IAEjC,IAAI,CAAC,MAAM;QAAE,OAAO,IAAI,CAAC;IACzB,IAAI,KAAsB,CAAC;IAC3B,IAAI,CAAC;QACH,KAAK,GAAG,IAAI,eAAe,CAAC,MAAM,CAAC,CAAC;IACtC,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;IACD,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC;QAAE,OAAO,IAAI,CAAC;IACtE,MAAM,OAAO,GAAG,KAAK,CAAC,GAAG,CAAC,aAAa,CAAC,KAAK,SAAS,CAAC;IACvD,MAAM,GAAG,GAAuD;QAC9D,IAAI,EAAE,aAAa,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;QACrC,OAAO,EAAE,aAAa,CAAC,KAAK,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC;QACjD,MAAM,EAAE,aAAa,CAAC,KAAK,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC;QAC/C,cAAc,EAAE,OAAO;KACxB,CAAC;IACF,MAAM,EAAE,GAAG,YAAY,CAAC,KAAK,CAAC,GAAG,CAAC,iBAAiB,CAAC,CAAC,CAAC;IACtD,IAAI,EAAE;QAAE,GAAG,CAAC,UAAU,GAAG,EAAE,CAAC;IAC5B,OAAO,GAAG,CAAC,IAAI,IAAI,GAAG,CAAC,OAAO,IAAI,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC;AAC5D,CAAC;AAED,0GAA0G;AAC1G,SAAS,SAAS,CAAC,MAA4B,EAAE,OAAgB,EAAE,UAAkB;IACnF,MAAM,GAAG,GAAG,OAAO,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO,IAAI,MAAM,CAAC,MAAM,CAAC,CAAC;IAC3D,MAAM,GAAG,GAAoB;QAC3B,IAAI,EAAE,MAAM,CAAC,IAAI;QACjB,QAAQ,EAAE,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI;QACrC,OAAO,EAAE,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI;QACnC,OAAO,EAAE,GAAG,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,cAAc;QACzC,WAAW,EAAE,MAAM,CAAC,UAAU,IAAI,UAAU;KAC7C,CAAC;IACF,OAAO,GAAG,CAAC,IAAI,IAAI,GAAG,CAAC,QAAQ,IAAI,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC;AAC9D,CAAC;AAED;;;;;;;GAOG;AACH,SAAgB,eAAe,CAC7B,MAAsB,EACtB,IAAkB,EAClB,UAA4B;IAE5B,IAAI,CAAC,MAAM,CAAC,OAAO;QAAE,OAAO,IAAI,CAAC;IACjC,MAAM,EAAE,GAAG,IAAI,CAAC,UAAU,IAAI,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;IACvD,IAAI,OAA4B,CAAC;IACjC,MAAM,SAAS,GAAG,GAAG,EAAE,CAAC,CAAC,OAAO,KAAK,sBAAsB,CAAC,MAAM,EAAE,IAAI,CAAC,WAAW,EAAE,UAAU,CAAC,CAAC,CAAC;IAEnG,MAAM,MAAM,GAAG,kBAAkB,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAC5C,IAAI,MAAM,EAAE,CAAC;QACX,MAAM,GAAG,GAAG,SAAS,CAAC,MAAM,EAAE,SAAS,EAAE,EAAE,EAAE,CAAC,CAAC;QAC/C,IAAI,GAAG;YAAE,OAAO,GAAG,CAAC;IACtB,CAAC;IACD,MAAM,QAAQ,GAAG,gBAAgB,CAAC,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC;IAC5D,KAAK,MAAM,MAAM,IAAI,QAAQ,EAAE,CAAC;QAC9B,MAAM,QAAQ,GAAG,0BAA0B,CAAC,MAAM,CAAC,CAAC;QACpD,IAAI,CAAC,QAAQ;YAAE,SAAS;QACxB,MAAM,GAAG,GAAG,SAAS,CAAC,QAAQ,EAAE,QAAQ,CAAC,cAAc,IAAI,SAAS,EAAE,EAAE,EAAE,CAAC,CAAC;QAC5E,IAAI,GAAG;YAAE,OAAO,GAAG,CAAC;IACtB,CAAC;IACD,KAAK,MAAM,MAAM,IAAI,QAAQ,EAAE,CAAC;QAC9B,MAAM,IAAI,GAAG,sBAAsB,CAAC,MAAM,EAAE,MAAM,CAAC,SAAS,CAAC,CAAC;QAC9D,IAAI,IAAI;YAAE,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,cAAc,EAAE,WAAW,EAAE,EAAE,EAAE,CAAC;IACrG,CAAC;IACD,MAAM,MAAM,GAAG,MAAM,CAAC,aAAa,CAAC,CAAC,CAAC,mBAAmB,CAAC,eAAe,CAAC,IAAI,CAAC,OAAO,EAAE,MAAM,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;IACtH,OAAO,MAAM,CAAC,CAAC,CAAC,SAAS,CAAC,MAAM,EAAE,SAAS,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;AAC5D,CAAC;AAED,+GAA+G;AAC/G,MAAM,cAAc,GAAG,IAAI,GAAG,CAAC;IAC7B,qBAAqB;IACrB,qBAAqB;IACrB,2BAA2B;IAC3B,yBAAyB;IACzB,0BAA0B;IAC1B,+BAA+B;IAC/B,8BAA8B;IAC9B,oCAAoC;IACpC,kCAAkC;IAClC,0BAA0B;IAC1B,oCAAoC;IACpC,oBAAoB;IACpB,sBAAsB;IACtB,uBAAuB;IACvB,sBAAsB;IACtB,uBAAuB;IACvB,sBAAsB;IACtB,uBAAuB;CACxB,CAAC,CAAC;AACH,MAAM,aAAa,GAAG,6IAA6I,CAAC;AAEpK,kGAAkG;AAClG,SAAgB,eAAe,CAAC,IAAY;IAC1C,MAAM,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC;IACrC,OAAO,cAAc,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,aAAa,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AACxD,CAAC;AAWD,MAAM,OAAO,GAAG,GAAyB,EAAE,CACzC,OAAO,MAAM,KAAK,WAAW,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAE,MAAmC,CAAC;AAE9E,2FAA2F;AAC3F,MAAM,eAAe,GAAa,EAAE,CAAC;AACrC,IAAI,SAAS,GAAkB,IAAI,CAAC;AAEpC;;;;GAIG;AACH,SAAgB,uBAAuB;IACrC,MAAM,MAAM,GAAG,OAAO,EAAE,EAAE,QAAQ,EAAE,MAAM,CAAC;IAC3C,IAAI,CAAC,MAAM,IAAI,eAAe,CAAC,QAAQ,CAAC,MAAM,CAAC;QAAE,OAAO;IACxD,eAAe,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IAC7B,SAAS,KAAK,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;AACzC,CAAC;AACD,uBAAuB,EAAE,CAAC;AAE1B,IAAI,WAAW,GAA2B,EAAE,CAAC;AAE7C;;;;;GAKG;AACH,SAAgB,wBAAwB,CAAC,OAA+B;IACtE,WAAW,GAAG,EAAE,GAAG,OAAO,EAAE,CAAC;AAC/B,CAAC;AAED,uEAAuE;AACvE,SAAgB,uBAAuB;IACrC,OAAO,WAAW,CAAC;AACrB,CAAC;AAED,MAAM,OAAO,GAAG,IAAI,GAAG,EAAmC,CAAC;AAE3D,+FAA+F;AAC/F,SAAgB,mBAAmB,CAAC,OAAkC,EAAE,cAAsB;IAC5F,OAAO,GAAG,OAAO,IAAI,EAAE,IAAI,cAAc,EAAE,CAAC;AAC9C,CAAC;AAED;;;;GAIG;AACH,SAAgB,kBAAkB,CAAC,QAAgB,EAAE,eAAwB;IAC3E,IAAI,CAAC,QAAQ,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC,WAAW,IAAI,eAAe,CAAC;QAAE,OAAO;IAC5E,OAAO,CAAC,GAAG,CAAC,QAAQ,EAAE,OAAO,CAAC,OAAO,CAAC,kBAAkB,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC;AAC9E,CAAC;AAED,+EAA+E;AAC/E,SAAgB,oBAAoB;IAClC,OAAO,CAAC,KAAK,EAAE,CAAC;IAChB,eAAe,CAAC,MAAM,GAAG,CAAC,CAAC;IAC3B,SAAS,GAAG,IAAI,CAAC;IACjB,WAAW,GAAG,EAAE,CAAC;AACnB,CAAC;AASD,kGAAkG;AAClG,SAAgB,kBAAkB,CAAC,MAAsB;IACvD,IAAI,OAAO,GAAG,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,gBAAgB,CAAC,CAAC;IACnD,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,MAAM,GAAG,GAAG,MAAM,CAAC,gBAAgB,CAAC;QACpC,4EAA4E;QAC5E,oBAAoB;QACpB,MAAM,MAAM,GAAG,GAAmB,EAAE;YAClC,IAAI,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,KAAK,OAAO;gBAAE,OAAO,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;YACtD,OAAO,EAAE,GAAG,gCAAwB,EAAE,SAAS,EAAE,EAAE,EAAE,CAAC;QACxD,CAAC,CAAC;QACF,OAAO,GAAG,MAAM;aACb,GAAG,CAAU,wBAAwB,CAAC;aACtC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,kBAAkB,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC;aAC3D,KAAK,CAAC,MAAM,CAAC,CAAC;QACjB,OAAO,CAAC,GAAG,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC;IAC5B,CAAC;IACD,OAAO,OAAO,CAAC;AACjB,CAAC;AAED;;;;;GAKG;AACH,SAAS,WAAW,CAAC,MAAsB;IACzC,MAAM,GAAG,GAAG,OAAO,EAAE,CAAC;IACtB,OAAO,CACL,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,gBAAgB,CAAC;QACpC,CAAC,CAAC,GAAG,EAAE,QAAQ,EAAE,MAAM;QACvB,eAAe,CAAC,MAAM,GAAG,CAAC;QAC1B,kBAAkB,CAAC,GAAG,EAAE,GAAG,CAAC,KAAK,IAAI,CACtC,CAAC;AACJ,CAAC;AAED,SAAS,gBAAgB,CAAC,MAAsB;IAC9C,MAAM,GAAG,GAAG,MAAM,CAAC,eAAe,CAAC;IACnC,OAAO;QACL,QAAQ,EAAE,GAAG,CAAC,QAAQ,IAAI,WAAW,CAAC,QAAQ;QAC9C,eAAe,EAAE,GAAG,CAAC,eAAe,IAAI,WAAW,CAAC,eAAe;KACpE,CAAC;AACJ,CAAC;AAED,0GAA0G;AACnG,KAAK,UAAU,eAAe,CAAC,MAAsB;IAC1D,MAAM,GAAG,GAAG,OAAO,EAAE,CAAC;IACtB,IAAI,CAAC,GAAG;QAAE,OAAO,IAAI,CAAC;IACtB,MAAM,OAAO,GAAG,gBAAgB,CAAC,MAAM,CAAC,CAAC;IACzC,IAAI,OAAO,CAAC,QAAQ,KAAK,KAAK;QAAE,OAAO,IAAI,CAAC;IAC5C,IAAI,CAAC;QACH,MAAM,OAAO,GAAG,GAAG,CAAC,QAAQ,EAAE,MAAM,IAAI,EAAE,CAAC;QAC3C,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC;YAAE,OAAO,IAAI,CAAC;QACtC,MAAM,MAAM,GAAG,MAAM,kBAAkB,CAAC,MAAM,CAAC,CAAC;QAChD,IAAI,CAAC,MAAM,CAAC,OAAO;YAAE,OAAO,IAAI,CAAC;QACjC,OAAO,eAAe,CACpB,MAAM,EACN;YACE,QAAQ,EAAE,CAAC,OAAO,EAAE,GAAG,eAAe,CAAC;YACvC,OAAO,EAAE,GAAG,CAAC,QAAQ,EAAE,MAAM,IAAI,IAAI;YACrC,WAAW,EAAE,GAAG,CAAC,WAAW;YAC5B,GAAG,EAAE,GAAG,CAAC,GAAG;YACZ,IAAI,EAAE,GAAG,CAAC,QAAQ,EAAE,IAAI;YACxB,UAAU,EAAE,SAAS,IAAI,SAAS;SACnC,EACD,OAAO,CAAC,eAAe,CACxB,CAAC;IACJ,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC;AAED;;;;GAIG;AACI,KAAK,UAAU,yBAAyB,CAAC,MAAsB;IACpE,IAAI,CAAC,OAAO,EAAE,IAAI,gBAAgB,CAAC,MAAM,CAAC,CAAC,QAAQ,KAAK,KAAK,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC;QAAE,OAAO,KAAK,CAAC;IACpG,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,MAAM,kBAAkB,CAAC,MAAM,CAAC,CAAC;QAChD,IAAI,MAAM,CAAC,wBAAwB,KAAK,QAAQ;YAAE,OAAO,KAAK,CAAC;QAC/D,MAAM,GAAG,GAAG,MAAM,eAAe,CAAC,MAAM,CAAC,CAAC;QAC1C,OAAO,CAAC,CAAC,GAAG,EAAE,IAAI,CAAC;IACrB,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC;AAkBD;;;;;GAKG;AACH,SAAgB,cAAc,CAAC,UAAmC,EAAE;IAClE,MAAM,GAAG,GAAG,OAAO,EAAE,CAAC;IACtB,IAAI,CAAC,GAAG,IAAI,OAAO,CAAC,QAAQ,KAAK,KAAK,IAAI,WAAW,CAAC,QAAQ,KAAK,KAAK;QAAE,OAAO,EAAE,CAAC;IACpF,IAAI,CAAC;QACH,MAAM,MAAM,GAAmB,OAAO,CAAC,MAAM,EAAE,OAAO;YACpD,CAAC,CAAC,OAAO,CAAC,MAAM;YAChB,CAAC,CAAC,EAAE,GAAG,gCAAwB,EAAE,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC,EAAE,CAAC;QACrF,MAAM,GAAG,GAAG,eAAe,CACzB,MAAM,EACN;YACE,QAAQ,EAAE,CAAC,GAAG,CAAC,QAAQ,EAAE,MAAM,IAAI,EAAE,EAAE,GAAG,eAAe,CAAC;YAC1D,OAAO,EAAE,GAAG,CAAC,QAAQ,EAAE,MAAM,IAAI,IAAI;YACrC,WAAW,EAAE,GAAG,CAAC,WAAW;YAC5B,GAAG,EAAE,GAAG,CAAC,GAAG;YACZ,IAAI,EAAE,GAAG,CAAC,QAAQ,EAAE,IAAI;YACxB,UAAU,EAAE,SAAS,IAAI,SAAS;SACnC,EACD,OAAO,CAAC,OAAO,IAAI,WAAW,CAAC,eAAe,CAC/C,CAAC;QACF,IAAI,CAAC,GAAG;YAAE,OAAO,EAAE,CAAC;QACpB,MAAM,GAAG,GAA4B,EAAE,CAAC;QACxC,IAAI,GAAG,CAAC,IAAI;YAAE,GAAG,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC;QAC1C,IAAI,GAAG,CAAC,QAAQ;YAAE,GAAG,CAAC,IAAI,CAAC,CAAC,cAAc,EAAE,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC;QAC3D,IAAI,GAAG,CAAC,OAAO;YAAE,GAAG,CAAC,IAAI,CAAC,CAAC,aAAa,EAAE,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC;QACxD,GAAG,CAAC,IAAI,CAAC,CAAC,aAAa,EAAE,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC;QACvC,GAAG,CAAC,IAAI,CAAC,CAAC,iBAAiB,EAAE,GAAG,CAAC,WAAW,CAAC,CAAC,CAAC;QAC/C,OAAO,GAAG,CAAC;IACb,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,EAAE,CAAC;IACZ,CAAC;AACH,CAAC;AAED,2GAA2G;AAC3G,SAAgB,kBAAkB,CAAC,GAAW,EAAE,UAAmC,EAAE;IACnF,MAAM,MAAM,GAAG,cAAc,CAAC,OAAO,CAAC,CAAC;IACvC,IAAI,CAAC,MAAM,CAAC,MAAM;QAAE,OAAO,GAAG,CAAC;IAC/B,IAAI,CAAM,CAAC;IACX,IAAI,CAAC;QACH,CAAC,GAAG,IAAI,GAAG,CAAC,GAAG,EAAE,OAAO,EAAE,EAAE,QAAQ,EAAE,IAAI,IAAI,SAAS,CAAC,CAAC;IAC3D,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,GAAG,CAAC;IACb,CAAC;IACD,KAAK,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,MAAM;QAAE,IAAI,CAAC,CAAC,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC,CAAC;YAAE,CAAC,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IAClF,OAAO,CAAC,CAAC,QAAQ,EAAE,CAAC;AACtB,CAAC;AAiBD,SAAS,SAAS,CAAC,IAA2B,EAAE,OAA8B;IAC5E,IAAI,OAAO,CAAC,GAAG;QAAE,OAAO,OAAO,CAAC,GAAG,CAAC;IACpC,IAAI,CAAC,OAAO,CAAC,WAAW;QAAE,MAAM,IAAI,KAAK,CAAC,uCAAuC,CAAC,CAAC;IACnF,MAAM,MAAM,GAAG,eAAe,CAAC,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC,CAAC,WAAW,OAAO,CAAC,WAAW,EAAE,CAAC;IAClH,MAAM,CAAC,GAAG,IAAI,GAAG,CAAC,WAAW,IAAI,EAAE,EAAE,MAAM,CAAC,CAAC;IAC7C,IAAI,OAAO,CAAC,WAAW;QAAE,CAAC,CAAC,YAAY,CAAC,GAAG,CAAC,cAAc,EAAE,OAAO,CAAC,WAAW,CAAC,CAAC;IACjF,OAAO,CAAC,CAAC,QAAQ,EAAE,CAAC;AACtB,CAAC;AAED,SAAS,EAAE,CAAC,IAA2B,EAAE,OAA8B;IACrE,MAAM,MAAM,GAAG,kBAAkB,CAAC,SAAS,CAAC,IAAI,EAAE,OAAO,CAAC,EAAE,OAAO,CAAC,CAAC;IACrE,IAAI,OAAO,CAAC,QAAQ,KAAK,KAAK;QAAE,OAAO,EAAE,EAAE,QAAQ,EAAE,MAAM,EAAE,CAAC,MAAM,CAAC,CAAC;IACtE,OAAO,MAAM,CAAC;AAChB,CAAC;AAED;;;;;;;;GAQG;AACH,SAAgB,MAAM,CAAC,OAA8B;IACnD,OAAO,EAAE,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;AAChC,CAAC;AAED,kDAAkD;AAClD,SAAgB,MAAM,CAAC,OAA8B;IACnD,OAAO,EAAE,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;AAChC,CAAC;AAYD;;;;;GAKG;AACI,KAAK,UAAU,kBAAkB,CACtC,MAAyE,EACzE,IAAY,EACZ,UAA4D,EAAE;IAE9D,MAAM,QAAQ,GAAG,OAAO,MAAM,KAAK,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,EAAE,aAAa,CAAC;IAC7E,MAAM,KAAK,GAAG,aAAa,CAAC,IAAI,CAAC,CAAC;IAClC,MAAM,CAAC,GAAG,OAAO,CAAC,SAAS,IAAI,CAAC,OAAO,KAAK,KAAK,UAAU,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC;IACjF,IAAI,CAAC,QAAQ,IAAI,CAAC,KAAK,IAAI,CAAC,CAAC;QAAE,OAAO,IAAI,CAAC;IAC3C,MAAM,IAAI,GAAG,OAAO,eAAe,KAAK,UAAU,CAAC,CAAC,CAAC,IAAI,eAAe,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;IAClF,MAAM,KAAK,GAAG,UAAU,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,OAAO,CAAC,SAAS,IAAI,IAAI,CAAC,CAAC;IACzE,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,MAAM,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,kBAAkB,CAAC,KAAK,CAAC,CAAC,EAAE;YAC5E,MAAM,EAAE,KAAK;YACb,WAAW,EAAE,MAAM;YACnB,OAAO,EAAE,EAAE,MAAM,EAAE,kBAAkB,EAAE;YACvC,MAAM,EAAE,IAAI,EAAE,MAAM;SACrB,CAAC,CAAC;QACH,IAAI,CAAC,GAAG,CAAC,EAAE;YAAE,OAAO,IAAI,CAAC;QACzB,MAAM,IAAI,GAAG,CAAC,MAAM,GAAG,CAAC,IAAI,EAAE,CAAY,CAAC;QAC3C,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,OAAO,IAAI,CAAC,KAAK,KAAK,SAAS;YAAE,OAAO,IAAI,CAAC;QACpE,OAAO;YACL,KAAK,EAAE,IAAI,CAAC,KAAK;YACjB,GAAG,CAAC,OAAO,IAAI,CAAC,kBAAkB,KAAK,QAAQ,CAAC,CAAC,CAAC,EAAE,kBAAkB,EAAE,IAAI,CAAC,kBAAkB,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YACvG,GAAG,CAAC,IAAI,CAAC,aAAa,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,aAAa,EAAE,IAAI,CAAC,aAAa,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;SACnF,CAAC;IACJ,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;YAAS,CAAC;QACT,YAAY,CAAC,KAAK,CAAC,CAAC;IACtB,CAAC;AACH,CAAC"}
|
package/dist/version.d.ts
CHANGED
package/dist/version.js
CHANGED
|
@@ -7,5 +7,5 @@ exports.ATLAS_JS_VERSION = void 0;
|
|
|
7
7
|
* package.json at runtime) so the bundle stays dependency-free and tests stay
|
|
8
8
|
* deterministic; `version.test.ts` fails when it drifts from package.json.
|
|
9
9
|
*/
|
|
10
|
-
exports.ATLAS_JS_VERSION = '0.
|
|
10
|
+
exports.ATLAS_JS_VERSION = '0.14.0';
|
|
11
11
|
//# sourceMappingURL=version.js.map
|