@atlasauth/backend 0.11.0 → 0.12.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 +10 -0
- package/dist/client/index.d.ts +17 -0
- package/dist/client/index.js +4 -0
- package/dist/client/index.js.map +1 -1
- package/dist/client/referrals.d.ts +199 -4
- package/dist/client/referrals.js +31 -0
- package/dist/client/referrals.js.map +1 -1
- package/dist/client/user-hooks.d.ts +58 -0
- package/dist/client/user-hooks.js +21 -0
- package/dist/client/user-hooks.js.map +1 -0
- package/dist/client/users.d.ts +63 -1
- package/dist/client/users.js +9 -0
- package/dist/client/users.js.map +1 -1
- package/dist/index.d.ts +2 -0
- package/dist/index.js +7 -1
- package/dist/index.js.map +1 -1
- package/dist/referral-test-calls.d.ts +71 -0
- package/dist/referral-test-calls.js +70 -0
- package/dist/referral-test-calls.js.map +1 -0
- package/dist/referrals.d.ts +66 -6
- package/dist/referrals.js +17 -4
- package/dist/referrals.js.map +1 -1
- package/dist/testing.d.ts +12 -0
- package/dist/testing.js +3 -0
- package/dist/testing.js.map +1 -1
- package/package.json +3 -3
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,15 @@
|
|
|
1
1
|
# @atlasauth/backend changelog
|
|
2
2
|
|
|
3
|
+
## 0.12.0
|
|
4
|
+
- **Referral attribution v2.** `referrals.retryFailed({ kind?, error_code? }, idempotencyKey?)` (`POST /v1/instance/referrals/calls/retry_failed`, `ReferralRetryFailedResult` with `requeued`), `referrals.simulate({ code? })` (`POST /v1/instance/referrals/simulate`, `ReferralSimulateResult`: `call_id`, `customer_ref`, `result`, `response`), `referrals.backfill({ since, codes?, code_metadata_path? }, idempotencyKey?)` and `referrals.getBackfill(id)` (`POST /v1/instance/referrals/backfill`, `GET /v1/instance/referrals/backfill/:id`, `ReferralBackfillJob`: `users_scanned`, `users_skipped`, `calls_queued`, `truncated`, `next_since`, `calls`), and `referrals.getForUser(userId)` (`GET /v1/users/:id/referral`, `UserReferralResult`).
|
|
5
|
+
- **Settings.** `ReferralSettings` and `UpdateReferralSettingsBody` gain `tracking_token`, `code_lookup_url`, `signup_code_field`, `forward_lifecycle`, `mirror_to_public_metadata` and `include_referral_claims`. `provider` can be `referally`. `ReferralProviderCapabilities` gains `alias`, `user` and `ping`; `needs` can list `tracking_token`. `ReferralConnectionStatus` gains `last_ping` (`ReferralPing`) and `alert` (`signature_rejected` or `connection_paused`). `ReferralConnectionTest` gains `ping`, `method` and `warnings`.
|
|
6
|
+
- **Call log.** `ReferralCallKind` adds `alias`, `user` and `ping`. `ReferralCall` gains `latency_ms`, `error_code`, `response`, `highlights`, `request_id` and `batch_id`. `ListReferralCallsParams` gains `error_code` and `starting_after`; `limit` goes up to 1000.
|
|
7
|
+
- **Users.** `users.setExternalId(id, externalId | null)` (`PATCH /v1/users/:id`); with referrals on, Atlas forwards the change to the platform as an alias. `UpdateUserBody` gains `external_id`. `UserReferral` gains `partner_external_ref`, `referral_status` and `notes`; `status` is now the attribution status (`pending`, `attributed`, `none`, `failed`, `held`, `flagged`), and the platform's own status moved to `referral_status`. New `UserReferralResolvedEvent` types the `data` of `user.referral_resolved`.
|
|
8
|
+
- **before_user_create hook.** New `userHooks` namespace: `getBeforeUserCreate()`, `updateBeforeUserCreate(body)` and `testBeforeUserCreate()` (`/v1/instance/hooks/before_user_create`; `BeforeUserCreateHook`, `UpdateBeforeUserCreateHookBody`, `BeforeUserCreateHookTest`).
|
|
9
|
+
- **Referral protocol receiver.** `verifyReferralRequest` accepts the new operations `alias` (`/aliases`, `ReferralAliasPayload`), `user` (`/users`, `ReferralUserPayload`) and `ping` (`/ping`, `ReferralPingPayload`; answer `ReferralPingResponse`), and returns `protocolVersion` (the `Atlas-Referrals-Version` header). `ReferralSignupResponse` gains optional `notes`. New constants `REFERRAL_PROTOCOL_VERSION` (`2026-10-21`) and `REFERRAL_PROTOCOL_VERSION_HEADER`.
|
|
10
|
+
- **Test calls.** `createTestIssuer()` gains `referralCall(options)` (an Atlas referral protocol call, signed as an instance signs it) and `referallyCall(options)` (a Referally connection call: `x-referally-signature` over the raw body, or the raw query string for `export`, with `referally-version`). Also standalone: `signAtlasReferralCall`, `signReferallyCall`, `referallySignature`, `referralEmailHash`, `REFERALLY_API_VERSION`; types `SignedReferralCall`, `AtlasReferralCallOptions`, `ReferallyCallOptions`, `ReferallyCallOp`.
|
|
11
|
+
- **Compatible.** New methods, types, optional fields and constants. One meaning changed on the server: `user.referral.status` is the attribution status; read the platform's status from `referral_status`.
|
|
12
|
+
|
|
3
13
|
## 0.11.0
|
|
4
14
|
- **Referral attribution settings.** New `referrals` namespace: `get()` and `update(body, idempotencyKey?)` (`GET`/`PATCH /v1/instance/referrals`; `ReferralSettings`, `UpdateReferralSettingsBody` with nested `security`: `ReferralSecuritySettings` `challenge_referred_signups`, `on_high_risk`, `hold_until_email_verified`, `max_referred_signups_per_ip_hour`), `test()` (`ReferralConnectionTest`), `listCalls({ limit?, status?, kind?, user_id? })` (`ReferralCall`, `ListReferralCallsParams`) and `retryCall(id, idempotencyKey?)`. Also `ReferralProviderInfo`, `ReferralProviderCapabilities`, `ReferralConnectionStatus`, `ReferralRisk`, `ReferralCallKind`, `ReferralCallStatus`.
|
|
5
15
|
- **Users.** `User` gains optional `referral` (`UserReferral`: `partner_id`, `referrer_external_id`, `referrer_user_id`, `matched_via`, `status`, `risk_level`, `flagged`), `referral_code` and `referral_link`. `CreateUserBody` accepts `referral` (`CreateUserReferralInput`: `code`, `click_id`, `anon_id`) and `referral_code`; `UpdateUserBody` accepts `referral_code` (`null` clears). New `users.flagReferral(id, { reason? }, idempotencyKey?)` (`POST /v1/users/:id/referral/flag`, `UserReferralFlag`).
|
package/dist/client/index.d.ts
CHANGED
|
@@ -16,6 +16,7 @@ declare function buildNamespaces(request: RequestFn): {
|
|
|
16
16
|
get(id: string): Promise<import("./users").User>;
|
|
17
17
|
create(body: import("./users").CreateUserBody, idempotencyKey?: string): Promise<import("./users").User>;
|
|
18
18
|
update(id: string, body: import("./users").UpdateUserBody): Promise<import("./users").User>;
|
|
19
|
+
setExternalId(id: string, externalId: string | null): Promise<import("./users").User>;
|
|
19
20
|
replaceMetadata(id: string, body: import("./users").ReplaceUserMetadataBody): Promise<import("./users").User>;
|
|
20
21
|
ban(id: string): Promise<import("./users").User>;
|
|
21
22
|
unban(id: string): Promise<import("./users").User>;
|
|
@@ -979,6 +980,21 @@ declare function buildNamespaces(request: RequestFn): {
|
|
|
979
980
|
test(): Promise<import("./referrals").ReferralConnectionTest>;
|
|
980
981
|
listCalls(params?: import("./referrals").ListReferralCallsParams): Promise<import("./types").ListPage<import("./referrals").ReferralCall>>;
|
|
981
982
|
retryCall(id: string, idempotencyKey?: string): Promise<import("./referrals").ReferralCall>;
|
|
983
|
+
retryFailed(filter?: {
|
|
984
|
+
kind?: import("./referrals").ReferralCallKind;
|
|
985
|
+
error_code?: string;
|
|
986
|
+
}, idempotencyKey?: string): Promise<import("./referrals").ReferralRetryFailedResult>;
|
|
987
|
+
simulate(body?: {
|
|
988
|
+
code?: string;
|
|
989
|
+
}): Promise<import("./referrals").ReferralSimulateResult>;
|
|
990
|
+
backfill(body: import("./referrals").ReferralBackfillBody, idempotencyKey?: string): Promise<import("./referrals").ReferralBackfillJob>;
|
|
991
|
+
getBackfill(id: string): Promise<import("./referrals").ReferralBackfillJob>;
|
|
992
|
+
getForUser(userId: string): Promise<import("./users").UserReferralResult>;
|
|
993
|
+
};
|
|
994
|
+
userHooks: {
|
|
995
|
+
getBeforeUserCreate(): Promise<import("./user-hooks").BeforeUserCreateHook>;
|
|
996
|
+
updateBeforeUserCreate(body: import("./user-hooks").UpdateBeforeUserCreateHookBody): Promise<import("./user-hooks").BeforeUserCreateHook>;
|
|
997
|
+
testBeforeUserCreate(): Promise<import("./user-hooks").BeforeUserCreateHookTest>;
|
|
982
998
|
};
|
|
983
999
|
tokens: {
|
|
984
1000
|
verify(body: import("./tokens").VerifyTokenBody): Promise<import("./tokens").TokenVerification>;
|
|
@@ -1331,6 +1347,7 @@ export * from './lti-platforms';
|
|
|
1331
1347
|
export * from './instance';
|
|
1332
1348
|
export * from './instance-security';
|
|
1333
1349
|
export * from './referrals';
|
|
1350
|
+
export * from './user-hooks';
|
|
1334
1351
|
export * from './tokens';
|
|
1335
1352
|
export * from './captcha';
|
|
1336
1353
|
export * from './design';
|
package/dist/client/index.js
CHANGED
|
@@ -61,6 +61,7 @@ const lti_platforms_1 = require("./lti-platforms");
|
|
|
61
61
|
const instance_1 = require("./instance");
|
|
62
62
|
const instance_security_1 = require("./instance-security");
|
|
63
63
|
const referrals_1 = require("./referrals");
|
|
64
|
+
const user_hooks_1 = require("./user-hooks");
|
|
64
65
|
const tokens_1 = require("./tokens");
|
|
65
66
|
const captcha_1 = require("./captcha");
|
|
66
67
|
const design_1 = require("./design");
|
|
@@ -150,6 +151,8 @@ function buildNamespaces(request) {
|
|
|
150
151
|
instanceSecurity: (0, instance_security_1.instanceSecurityResource)(request),
|
|
151
152
|
// Referral attribution: the instance's referral platform connection and call log.
|
|
152
153
|
referrals: (0, referrals_1.referralsResource)(request),
|
|
154
|
+
// The before_user_create hook (sets external_id before the user exists).
|
|
155
|
+
userHooks: (0, user_hooks_1.userHooksResource)(request),
|
|
153
156
|
tokens: (0, tokens_1.tokensResource)(request),
|
|
154
157
|
// §5 "captcha anywhere" — verify any CAPTCHA token against the instance's
|
|
155
158
|
// centrally-configured provider, server-side, with the secret held by Atlas.
|
|
@@ -240,6 +243,7 @@ __exportStar(require("./lti-platforms"), exports);
|
|
|
240
243
|
__exportStar(require("./instance"), exports);
|
|
241
244
|
__exportStar(require("./instance-security"), exports);
|
|
242
245
|
__exportStar(require("./referrals"), exports);
|
|
246
|
+
__exportStar(require("./user-hooks"), exports);
|
|
243
247
|
__exportStar(require("./tokens"), exports);
|
|
244
248
|
__exportStar(require("./captcha"), exports);
|
|
245
249
|
__exportStar(require("./design"), exports);
|
package/dist/client/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/client/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/client/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { type RequestFn } from './request';
|
|
2
2
|
import type { ListPage } from './types';
|
|
3
|
+
import type { UserReferralResult } from './users';
|
|
3
4
|
/**
|
|
4
5
|
* Referral attribution: the instance's connection to a referral platform.
|
|
5
6
|
*
|
|
@@ -10,7 +11,10 @@ import type { ListPage } from './types';
|
|
|
10
11
|
* call is retried, and `user.referral_attributed` is sent when it resolves.
|
|
11
12
|
*
|
|
12
13
|
* `provider` is `webhook` (the Atlas referral protocol, which any platform can
|
|
13
|
-
* implement; see {@link verifyReferralRequest})
|
|
14
|
+
* implement; see {@link verifyReferralRequest}), `referally` (the built-in
|
|
15
|
+
* Referally adapter: `endpoint_url` is your Referally base URL, plus
|
|
16
|
+
* `connection_id`, `signing_secret` and optionally `tracking_token`) or
|
|
17
|
+
* another built-in vendor adapter.
|
|
14
18
|
* `signing_secret` and `api_key` are write-only: reads return
|
|
15
19
|
* `signing_secret_set` / `api_key_set`.
|
|
16
20
|
*/
|
|
@@ -22,6 +26,12 @@ export interface ReferralProviderCapabilities {
|
|
|
22
26
|
partner: boolean;
|
|
23
27
|
auto_enroll: boolean;
|
|
24
28
|
signal: boolean;
|
|
29
|
+
/** Forwards an `external_id` change after sign-up (old id → new id). */
|
|
30
|
+
alias?: boolean;
|
|
31
|
+
/** Forwards email, name and ban/unban changes. */
|
|
32
|
+
user?: boolean;
|
|
33
|
+
/** Answers a ping (org, program, clock) for the connection test. */
|
|
34
|
+
ping?: boolean;
|
|
25
35
|
}
|
|
26
36
|
/** A referral provider Atlas supports. */
|
|
27
37
|
export interface ReferralProviderInfo {
|
|
@@ -30,7 +40,7 @@ export interface ReferralProviderInfo {
|
|
|
30
40
|
name: string;
|
|
31
41
|
capabilities: ReferralProviderCapabilities;
|
|
32
42
|
/** What must be set before `enabled` can be true. */
|
|
33
|
-
needs: Array<'endpoint_url' | 'signing_secret' | 'api_key' | 'connection_id'>;
|
|
43
|
+
needs: Array<'endpoint_url' | 'signing_secret' | 'api_key' | 'connection_id' | 'tracking_token'>;
|
|
34
44
|
/** The vendor's own first-party tracking cookie, suggested when this provider is picked. */
|
|
35
45
|
default_context_cookie: string | null;
|
|
36
46
|
docs_url: string | null;
|
|
@@ -70,6 +80,39 @@ export interface ReferralConnectionStatus {
|
|
|
70
80
|
retrying_calls: number;
|
|
71
81
|
/** Epoch ms of the last successful call, or null. */
|
|
72
82
|
last_success_at: number | null;
|
|
83
|
+
/** The last ping answer, when the provider supports ping. */
|
|
84
|
+
last_ping?: ReferralPing | null;
|
|
85
|
+
/**
|
|
86
|
+
* A refusal only a person can fix: `signature_rejected` (the platform
|
|
87
|
+
* answered 401: a rotated secret or clock skew) or `connection_paused`.
|
|
88
|
+
*/
|
|
89
|
+
alert?: {
|
|
90
|
+
code: string;
|
|
91
|
+
message: string;
|
|
92
|
+
at: number;
|
|
93
|
+
call_id?: string;
|
|
94
|
+
} | null;
|
|
95
|
+
}
|
|
96
|
+
/** What a platform answers to a ping. */
|
|
97
|
+
export interface ReferralPing {
|
|
98
|
+
ok: boolean;
|
|
99
|
+
connection_id?: string | null;
|
|
100
|
+
program_id?: string | null;
|
|
101
|
+
program_name?: string | null;
|
|
102
|
+
org_name?: string | null;
|
|
103
|
+
auto_enroll_users?: boolean | null;
|
|
104
|
+
/** The platform's clock, as it sent it. */
|
|
105
|
+
server_time?: string | number | null;
|
|
106
|
+
/** Platform clock minus Atlas clock, in ms. Over 60 s is a warning; over 5 minutes, signatures fail. */
|
|
107
|
+
clock_skew_ms?: number | null;
|
|
108
|
+
/** True when `clock_skew_ms` is over 60 seconds. */
|
|
109
|
+
clock_skew_warning?: boolean;
|
|
110
|
+
/** Epoch ms of the ping. */
|
|
111
|
+
at?: number | null;
|
|
112
|
+
http_status?: number | null;
|
|
113
|
+
latency_ms?: number | null;
|
|
114
|
+
error_code?: string | null;
|
|
115
|
+
error?: string | null;
|
|
73
116
|
}
|
|
74
117
|
/** `GET /v1/instance/referrals`. */
|
|
75
118
|
export interface ReferralSettings {
|
|
@@ -100,6 +143,18 @@ export interface ReferralSettings {
|
|
|
100
143
|
/** How long a sign-up waits for the platform (100-5000 ms, default 3000). */
|
|
101
144
|
timeout_ms: number;
|
|
102
145
|
security: ReferralSecuritySettings;
|
|
146
|
+
/** Public tracking token (the `referally` adapter derives the code lookup from it). */
|
|
147
|
+
tracking_token?: string | null;
|
|
148
|
+
/** Public, CORS-enabled lookup with `{code}` for "X invited you" on hosted sign-up. */
|
|
149
|
+
code_lookup_url?: string | null;
|
|
150
|
+
/** Show an optional "Referral code" field on hosted sign-up. */
|
|
151
|
+
signup_code_field?: boolean;
|
|
152
|
+
/** Forward email, name and ban/unban changes to the platform (default true). */
|
|
153
|
+
forward_lifecycle?: boolean;
|
|
154
|
+
/** Mirror the result into `public_metadata.referral` (default false). */
|
|
155
|
+
mirror_to_public_metadata?: boolean;
|
|
156
|
+
/** Add a `referral_code` claim (the user's own code) to ID tokens and sessions. */
|
|
157
|
+
include_referral_claims?: boolean;
|
|
103
158
|
/** What the chosen provider still needs before referrals can be enabled. */
|
|
104
159
|
missing?: string[];
|
|
105
160
|
connection?: ReferralConnectionStatus | null;
|
|
@@ -133,6 +188,13 @@ export interface UpdateReferralSettingsBody {
|
|
|
133
188
|
timeout_ms?: number;
|
|
134
189
|
/** Partial: only the security fields sent change. */
|
|
135
190
|
security?: Partial<ReferralSecuritySettings>;
|
|
191
|
+
tracking_token?: string | null;
|
|
192
|
+
/** An https URL containing `{code}`. */
|
|
193
|
+
code_lookup_url?: string | null;
|
|
194
|
+
signup_code_field?: boolean;
|
|
195
|
+
forward_lifecycle?: boolean;
|
|
196
|
+
mirror_to_public_metadata?: boolean;
|
|
197
|
+
include_referral_claims?: boolean;
|
|
136
198
|
}
|
|
137
199
|
/** `POST /v1/instance/referrals/test`. */
|
|
138
200
|
export interface ReferralConnectionTest {
|
|
@@ -144,8 +206,91 @@ export interface ReferralConnectionTest {
|
|
|
144
206
|
code: string;
|
|
145
207
|
message: string;
|
|
146
208
|
};
|
|
209
|
+
/** The ping answer, when the provider supports ping (the test is then a ping). */
|
|
210
|
+
ping?: ReferralPing | null;
|
|
211
|
+
/** `ping`, or `probe` (the older signed export probe). */
|
|
212
|
+
method?: 'ping' | 'probe';
|
|
213
|
+
/** Human warnings, e.g. a clock more than 60 seconds off. */
|
|
214
|
+
warnings?: string[];
|
|
215
|
+
}
|
|
216
|
+
/** `POST /v1/instance/referrals/simulate`: a sign-up call for a fake user, never stored. */
|
|
217
|
+
export interface ReferralSimulateResult {
|
|
218
|
+
object: 'referral_simulation';
|
|
219
|
+
ok: boolean;
|
|
220
|
+
/** The logged call, in the delivery log. */
|
|
221
|
+
call_id: string | null;
|
|
222
|
+
/** `atlas_test_<random>`. */
|
|
223
|
+
customer_ref: string;
|
|
224
|
+
http_status: number | null;
|
|
225
|
+
latency_ms: number | null;
|
|
226
|
+
/** The platform's answer, normalised (null when the call failed). */
|
|
227
|
+
result: {
|
|
228
|
+
referral: {
|
|
229
|
+
partner_id: string | null;
|
|
230
|
+
partner_external_ref: string | null;
|
|
231
|
+
matched_via: string | null;
|
|
232
|
+
status: string | null;
|
|
233
|
+
} | null;
|
|
234
|
+
partner: {
|
|
235
|
+
id: string | null;
|
|
236
|
+
code: string | null;
|
|
237
|
+
link: string | null;
|
|
238
|
+
} | null;
|
|
239
|
+
notes: string[];
|
|
240
|
+
} | null;
|
|
241
|
+
/** The platform's raw answer, personal fields removed. */
|
|
242
|
+
response: unknown;
|
|
243
|
+
error: {
|
|
244
|
+
code: string;
|
|
245
|
+
message: string;
|
|
246
|
+
} | null;
|
|
247
|
+
}
|
|
248
|
+
/** `POST /v1/instance/referrals/calls/retry_failed`. */
|
|
249
|
+
export interface ReferralRetryFailedResult {
|
|
250
|
+
object: 'referral_retry';
|
|
251
|
+
/** How many failed calls were queued to send now. */
|
|
252
|
+
requeued: number;
|
|
253
|
+
}
|
|
254
|
+
/** `POST /v1/instance/referrals/backfill`. */
|
|
255
|
+
export interface ReferralBackfillBody {
|
|
256
|
+
/** ISO 8601 date or date-time: users who signed up at or after it. */
|
|
257
|
+
since: string;
|
|
258
|
+
/** customerRef → code (a CSV, for example). Wins over `code_metadata_path`. */
|
|
259
|
+
codes?: Record<string, string>;
|
|
260
|
+
/** Where a stored code lives on the user, e.g. `public_metadata.referral_code`. */
|
|
261
|
+
code_metadata_path?: string;
|
|
262
|
+
}
|
|
263
|
+
/** A backfill job. Users already reported are skipped. */
|
|
264
|
+
export interface ReferralBackfillJob {
|
|
265
|
+
object: 'referral_backfill';
|
|
266
|
+
id: string;
|
|
267
|
+
/** `running` while any queued call is still to be sent, then `completed`. */
|
|
268
|
+
status: string;
|
|
269
|
+
/** Epoch ms. */
|
|
270
|
+
since: number;
|
|
271
|
+
code_metadata_path?: string | null;
|
|
272
|
+
/** How many codes were given in `codes`. */
|
|
273
|
+
codes_given?: number;
|
|
274
|
+
users_scanned: number;
|
|
275
|
+
/** Already reported, or no code while auto-enroll is off. */
|
|
276
|
+
users_skipped: number;
|
|
277
|
+
calls_queued: number;
|
|
278
|
+
/** True when the run stopped at its cap: start another from `next_since`. */
|
|
279
|
+
truncated: boolean;
|
|
280
|
+
/** Epoch ms, when `truncated`. */
|
|
281
|
+
next_since?: number | null;
|
|
282
|
+
/** Where the queued calls stand. */
|
|
283
|
+
calls: {
|
|
284
|
+
pending: number;
|
|
285
|
+
succeeded: number;
|
|
286
|
+
failed: number;
|
|
287
|
+
skipped: number;
|
|
288
|
+
held: number;
|
|
289
|
+
};
|
|
290
|
+
created_at: number;
|
|
291
|
+
finished_at?: number | null;
|
|
147
292
|
}
|
|
148
|
-
export type ReferralCallKind = 'signup' | 'erase' | 'export' | 'partner' | 'signal' | 'test';
|
|
293
|
+
export type ReferralCallKind = 'signup' | 'erase' | 'export' | 'partner' | 'signal' | 'alias' | 'user' | 'ping' | 'test';
|
|
149
294
|
export type ReferralCallStatus = 'pending' | 'succeeded' | 'retrying' | 'failed' | 'held' | 'skipped';
|
|
150
295
|
/** The risk verdict sent with a sign-up (camelCase, as on the referral protocol). */
|
|
151
296
|
export interface ReferralRisk {
|
|
@@ -180,15 +325,39 @@ export interface ReferralCall {
|
|
|
180
325
|
risk?: ReferralRisk | null;
|
|
181
326
|
/** What was sent (never secrets). */
|
|
182
327
|
payload?: Record<string, unknown>;
|
|
328
|
+
/** Round trip of the last attempt, in ms. */
|
|
329
|
+
latency_ms?: number | null;
|
|
330
|
+
/**
|
|
331
|
+
* Machine code of the last failure, e.g. `signature_rejected` (401, not
|
|
332
|
+
* retried), `connection_paused` (paused by the merchant, not retried),
|
|
333
|
+
* `rate_limited`, `timeout`, `network_error`.
|
|
334
|
+
*/
|
|
335
|
+
error_code?: string | null;
|
|
336
|
+
/** The platform's last answer, with personal data removed. */
|
|
337
|
+
response?: unknown;
|
|
338
|
+
/** Sign-up calls: how the platform matched, the referrer and its notes. */
|
|
339
|
+
highlights?: {
|
|
340
|
+
matched_via: string | null;
|
|
341
|
+
partner_external_ref: string | null;
|
|
342
|
+
notes: string[];
|
|
343
|
+
} | null;
|
|
344
|
+
/** The platform's request id for its last answer, for its support team. */
|
|
345
|
+
request_id?: string | null;
|
|
346
|
+
/** The backfill job this call belongs to. */
|
|
347
|
+
batch_id?: string | null;
|
|
183
348
|
created_at: number;
|
|
184
349
|
updated_at?: number;
|
|
185
350
|
}
|
|
186
351
|
export interface ListReferralCallsParams {
|
|
187
|
-
/** 1-200, default 50, newest first. */
|
|
352
|
+
/** 1-1000 (1-200 on servers before referral attribution v2), default 50, newest first. */
|
|
188
353
|
limit?: number;
|
|
189
354
|
status?: ReferralCallStatus;
|
|
190
355
|
kind?: ReferralCallKind;
|
|
191
356
|
user_id?: string;
|
|
357
|
+
/** e.g. `signature_rejected`. */
|
|
358
|
+
error_code?: string;
|
|
359
|
+
/** The id of the last call of the previous page. */
|
|
360
|
+
starting_after?: string;
|
|
192
361
|
}
|
|
193
362
|
export declare function referralsResource(request: RequestFn): {
|
|
194
363
|
/** `GET /v1/instance/referrals` — settings, connection status and the supported providers. */
|
|
@@ -207,4 +376,30 @@ export declare function referralsResource(request: RequestFn): {
|
|
|
207
376
|
* or skipped call now (a connection test cannot be retried).
|
|
208
377
|
*/
|
|
209
378
|
retryCall(id: string, idempotencyKey?: string): Promise<ReferralCall>;
|
|
379
|
+
/** `POST /v1/instance/referrals/calls/retry_failed` — re-queue every failed call (not tests) to send now. */
|
|
380
|
+
retryFailed(filter?: {
|
|
381
|
+
kind?: ReferralCallKind;
|
|
382
|
+
error_code?: string;
|
|
383
|
+
}, idempotencyKey?: string): Promise<ReferralRetryFailedResult>;
|
|
384
|
+
/**
|
|
385
|
+
* `POST /v1/instance/referrals/simulate` — send a sign-up call for a fake
|
|
386
|
+
* user (`atlas_test_<random>`, never stored) with an optional code, and
|
|
387
|
+
* return what the platform answered.
|
|
388
|
+
*/
|
|
389
|
+
simulate(body?: {
|
|
390
|
+
code?: string;
|
|
391
|
+
}): Promise<ReferralSimulateResult>;
|
|
392
|
+
/**
|
|
393
|
+
* `POST /v1/instance/referrals/backfill` — queue sign-up calls for existing
|
|
394
|
+
* users with their real sign-up time. Referrals must be on (`422
|
|
395
|
+
* REFERRALS_NOT_CONFIGURED` otherwise). Returns the job; poll {@link getBackfill}.
|
|
396
|
+
*/
|
|
397
|
+
backfill(body: ReferralBackfillBody, idempotencyKey?: string): Promise<ReferralBackfillJob>;
|
|
398
|
+
/** `GET /v1/instance/referrals/backfill/:id`. */
|
|
399
|
+
getBackfill(id: string): Promise<ReferralBackfillJob>;
|
|
400
|
+
/**
|
|
401
|
+
* `GET /v1/users/:id/referral` — the stored result for one user (who
|
|
402
|
+
* referred them, how, their own code), with no call to the platform.
|
|
403
|
+
*/
|
|
404
|
+
getForUser(userId: string): Promise<UserReferralResult>;
|
|
210
405
|
};
|
package/dist/client/referrals.js
CHANGED
|
@@ -34,6 +34,37 @@ function referralsResource(request) {
|
|
|
34
34
|
idempotencyKey,
|
|
35
35
|
});
|
|
36
36
|
},
|
|
37
|
+
/** `POST /v1/instance/referrals/calls/retry_failed` — re-queue every failed call (not tests) to send now. */
|
|
38
|
+
retryFailed(filter = {}, idempotencyKey) {
|
|
39
|
+
return request({ method: 'POST', path: '/v1/instance/referrals/calls/retry_failed', body: filter, idempotencyKey });
|
|
40
|
+
},
|
|
41
|
+
/**
|
|
42
|
+
* `POST /v1/instance/referrals/simulate` — send a sign-up call for a fake
|
|
43
|
+
* user (`atlas_test_<random>`, never stored) with an optional code, and
|
|
44
|
+
* return what the platform answered.
|
|
45
|
+
*/
|
|
46
|
+
simulate(body = {}) {
|
|
47
|
+
return request({ method: 'POST', path: '/v1/instance/referrals/simulate', body });
|
|
48
|
+
},
|
|
49
|
+
/**
|
|
50
|
+
* `POST /v1/instance/referrals/backfill` — queue sign-up calls for existing
|
|
51
|
+
* users with their real sign-up time. Referrals must be on (`422
|
|
52
|
+
* REFERRALS_NOT_CONFIGURED` otherwise). Returns the job; poll {@link getBackfill}.
|
|
53
|
+
*/
|
|
54
|
+
backfill(body, idempotencyKey) {
|
|
55
|
+
return request({ method: 'POST', path: '/v1/instance/referrals/backfill', body, idempotencyKey });
|
|
56
|
+
},
|
|
57
|
+
/** `GET /v1/instance/referrals/backfill/:id`. */
|
|
58
|
+
getBackfill(id) {
|
|
59
|
+
return request({ method: 'GET', path: `/v1/instance/referrals/backfill/${(0, request_1.enc)(id)}` });
|
|
60
|
+
},
|
|
61
|
+
/**
|
|
62
|
+
* `GET /v1/users/:id/referral` — the stored result for one user (who
|
|
63
|
+
* referred them, how, their own code), with no call to the platform.
|
|
64
|
+
*/
|
|
65
|
+
getForUser(userId) {
|
|
66
|
+
return request({ method: 'GET', path: `/v1/users/${(0, request_1.enc)(userId)}/referral` });
|
|
67
|
+
},
|
|
37
68
|
};
|
|
38
69
|
}
|
|
39
70
|
//# sourceMappingURL=referrals.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"referrals.js","sourceRoot":"","sources":["../../src/client/referrals.ts"],"names":[],"mappings":";;
|
|
1
|
+
{"version":3,"file":"referrals.js","sourceRoot":"","sources":["../../src/client/referrals.ts"],"names":[],"mappings":";;AAiWA,8CAmEC;AApaD,uCAAgD;AAiWhD,SAAgB,iBAAiB,CAAC,OAAkB;IAClD,OAAO;QACL,8FAA8F;QAC9F,GAAG;YACD,OAAO,OAAO,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,wBAAwB,EAAE,CAAC,CAAC;QACpE,CAAC;QACD,+EAA+E;QAC/E,MAAM,CAAC,IAAgC,EAAE,cAAuB;YAC9D,OAAO,OAAO,CAAC,EAAE,MAAM,EAAE,OAAO,EAAE,IAAI,EAAE,wBAAwB,EAAE,IAAI,EAAE,cAAc,EAAE,CAAC,CAAC;QAC5F,CAAC;QACD;;;WAGG;QACH,IAAI;YACF,OAAO,OAAO,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,6BAA6B,EAAE,CAAC,CAAC;QAC1E,CAAC;QACD,uEAAuE;QACvE,SAAS,CAAC,SAAkC,EAAE;YAC5C,OAAO,OAAO,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,8BAA8B,EAAE,KAAK,EAAE,EAAE,GAAG,MAAM,EAAE,EAAE,CAAC,CAAC;QAChG,CAAC;QACD;;;WAGG;QACH,SAAS,CAAC,EAAU,EAAE,cAAuB;YAC3C,OAAO,OAAO,CAAC;gBACb,MAAM,EAAE,MAAM;gBACd,IAAI,EAAE,gCAAgC,IAAA,aAAG,EAAC,EAAE,CAAC,QAAQ;gBACrD,cAAc;aACf,CAAC,CAAC;QACL,CAAC;QACD,6GAA6G;QAC7G,WAAW,CACT,SAA2D,EAAE,EAC7D,cAAuB;YAEvB,OAAO,OAAO,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,2CAA2C,EAAE,IAAI,EAAE,MAAM,EAAE,cAAc,EAAE,CAAC,CAAC;QACtH,CAAC;QACD;;;;WAIG;QACH,QAAQ,CAAC,OAA0B,EAAE;YACnC,OAAO,OAAO,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,iCAAiC,EAAE,IAAI,EAAE,CAAC,CAAC;QACpF,CAAC;QACD;;;;WAIG;QACH,QAAQ,CAAC,IAA0B,EAAE,cAAuB;YAC1D,OAAO,OAAO,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,iCAAiC,EAAE,IAAI,EAAE,cAAc,EAAE,CAAC,CAAC;QACpG,CAAC;QACD,iDAAiD;QACjD,WAAW,CAAC,EAAU;YACpB,OAAO,OAAO,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,mCAAmC,IAAA,aAAG,EAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC;QACxF,CAAC;QACD;;;WAGG;QACH,UAAU,CAAC,MAAc;YACvB,OAAO,OAAO,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,aAAa,IAAA,aAAG,EAAC,MAAM,CAAC,WAAW,EAAE,CAAC,CAAC;QAC/E,CAAC;KACF,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
import type { RequestFn } from './request';
|
|
2
|
+
/**
|
|
3
|
+
* The `before_user_create` hook: just before Atlas creates a user from an
|
|
4
|
+
* interactive sign-up, it calls your endpoint (signed exactly like a webhook:
|
|
5
|
+
* `atlas-id`, `atlas-timestamp`, `atlas-signature`, verify with
|
|
6
|
+
* {@link verifyWebhook}) with an event of type `user.before_create`, and stamps
|
|
7
|
+
* the `external_id` and metadata you answer. A referral call then goes out
|
|
8
|
+
* with your id. Slow or failing hooks never block a sign-up.
|
|
9
|
+
*
|
|
10
|
+
* Answer `{ external_id?, public_metadata?, private_metadata?, unsafe_metadata? }`.
|
|
11
|
+
*/
|
|
12
|
+
export interface BeforeUserCreateHook {
|
|
13
|
+
object: 'before_user_create_hook';
|
|
14
|
+
enabled: boolean;
|
|
15
|
+
url: string | null;
|
|
16
|
+
/** The secret is write-only. */
|
|
17
|
+
signing_secret_set: boolean;
|
|
18
|
+
/** At most 5000, default 3000. */
|
|
19
|
+
timeout_ms: number;
|
|
20
|
+
/** The last call Atlas made to the hook. */
|
|
21
|
+
last_call: {
|
|
22
|
+
at: number;
|
|
23
|
+
status: string | null;
|
|
24
|
+
error: string | null;
|
|
25
|
+
} | null;
|
|
26
|
+
updated_at: number | null;
|
|
27
|
+
}
|
|
28
|
+
export interface UpdateBeforeUserCreateHookBody {
|
|
29
|
+
enabled?: boolean;
|
|
30
|
+
/** https (http only for localhost on a development instance); `null` clears. */
|
|
31
|
+
url?: string | null;
|
|
32
|
+
/** Write-only; `null` clears. */
|
|
33
|
+
signing_secret?: string | null;
|
|
34
|
+
timeout_ms?: number;
|
|
35
|
+
}
|
|
36
|
+
/** `POST …/test`: a sample draft sent to the hook; nothing is stored. */
|
|
37
|
+
export interface BeforeUserCreateHookTest {
|
|
38
|
+
ok: boolean;
|
|
39
|
+
latency_ms: number;
|
|
40
|
+
answer?: {
|
|
41
|
+
external_id: string | null;
|
|
42
|
+
public_metadata: Record<string, unknown> | null;
|
|
43
|
+
private_metadata_set: boolean;
|
|
44
|
+
unsafe_metadata: Record<string, unknown> | null;
|
|
45
|
+
};
|
|
46
|
+
error?: {
|
|
47
|
+
code: string;
|
|
48
|
+
message: string;
|
|
49
|
+
};
|
|
50
|
+
}
|
|
51
|
+
export declare function userHooksResource(request: RequestFn): {
|
|
52
|
+
/** `GET /v1/instance/hooks/before_user_create`. */
|
|
53
|
+
getBeforeUserCreate(): Promise<BeforeUserCreateHook>;
|
|
54
|
+
/** `PATCH /v1/instance/hooks/before_user_create` — partial; the secret is write-only. */
|
|
55
|
+
updateBeforeUserCreate(body: UpdateBeforeUserCreateHookBody): Promise<BeforeUserCreateHook>;
|
|
56
|
+
/** `POST /v1/instance/hooks/before_user_create/test`. */
|
|
57
|
+
testBeforeUserCreate(): Promise<BeforeUserCreateHookTest>;
|
|
58
|
+
};
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.userHooksResource = userHooksResource;
|
|
4
|
+
const PATH = '/v1/instance/hooks/before_user_create';
|
|
5
|
+
function userHooksResource(request) {
|
|
6
|
+
return {
|
|
7
|
+
/** `GET /v1/instance/hooks/before_user_create`. */
|
|
8
|
+
getBeforeUserCreate() {
|
|
9
|
+
return request({ method: 'GET', path: PATH });
|
|
10
|
+
},
|
|
11
|
+
/** `PATCH /v1/instance/hooks/before_user_create` — partial; the secret is write-only. */
|
|
12
|
+
updateBeforeUserCreate(body) {
|
|
13
|
+
return request({ method: 'PATCH', path: PATH, body });
|
|
14
|
+
},
|
|
15
|
+
/** `POST /v1/instance/hooks/before_user_create/test`. */
|
|
16
|
+
testBeforeUserCreate() {
|
|
17
|
+
return request({ method: 'POST', path: `${PATH}/test` });
|
|
18
|
+
},
|
|
19
|
+
};
|
|
20
|
+
}
|
|
21
|
+
//# sourceMappingURL=user-hooks.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"user-hooks.js","sourceRoot":"","sources":["../../src/client/user-hooks.ts"],"names":[],"mappings":";;AAkDA,8CAeC;AAjBD,MAAM,IAAI,GAAG,uCAAuC,CAAC;AAErD,SAAgB,iBAAiB,CAAC,OAAkB;IAClD,OAAO;QACL,mDAAmD;QACnD,mBAAmB;YACjB,OAAO,OAAO,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC;QAChD,CAAC;QACD,yFAAyF;QACzF,sBAAsB,CAAC,IAAoC;YACzD,OAAO,OAAO,CAAC,EAAE,MAAM,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC;QACxD,CAAC;QACD,yDAAyD;QACzD,oBAAoB;YAClB,OAAO,OAAO,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,GAAG,IAAI,OAAO,EAAE,CAAC,CAAC;QAC3D,CAAC;KACF,CAAC;AACJ,CAAC"}
|
package/dist/client/users.d.ts
CHANGED
|
@@ -44,8 +44,19 @@ export interface UserReferral {
|
|
|
44
44
|
referrer_user_id: string | null;
|
|
45
45
|
/** How the platform matched the referral, e.g. `code`, `click`, `coupon`. */
|
|
46
46
|
matched_via: string | null;
|
|
47
|
-
/**
|
|
47
|
+
/**
|
|
48
|
+
* The attribution status: `pending` (the platform has not answered yet),
|
|
49
|
+
* `attributed`, `none`, `failed`, `held` or `flagged`. Servers before
|
|
50
|
+
* referral attribution v2 sent the platform's own status here; that is now
|
|
51
|
+
* `referral_status`.
|
|
52
|
+
*/
|
|
48
53
|
status: string | null;
|
|
54
|
+
/** The referrer as the platform knows them. Same value as `referrer_external_id`. */
|
|
55
|
+
partner_external_ref?: string | null;
|
|
56
|
+
/** The platform's own status for the referral, e.g. `active`. */
|
|
57
|
+
referral_status?: string | null;
|
|
58
|
+
/** The platform's reasoning notes (why it matched, or why not). */
|
|
59
|
+
notes?: string[] | null;
|
|
49
60
|
/** The risk level Atlas assessed at sign-up, when one was. */
|
|
50
61
|
risk_level?: 'low' | 'medium' | 'high' | null;
|
|
51
62
|
/** An admin marked the referral fraudulent (`users.flagReferral`). */
|
|
@@ -89,6 +100,44 @@ export interface UserReferralAttributedEvent {
|
|
|
89
100
|
signed_up_at: number;
|
|
90
101
|
updated_at: number;
|
|
91
102
|
}
|
|
103
|
+
/**
|
|
104
|
+
* The `data` of a `user.referral_resolved` webhook: a referral call that was
|
|
105
|
+
* still pending when `user.created` was sent has a final result (attributed,
|
|
106
|
+
* none or failed). `user.referral_attributed` still fires too when attributed.
|
|
107
|
+
*/
|
|
108
|
+
export type UserReferralResolvedEvent = UserReferralAttributedEvent;
|
|
109
|
+
/**
|
|
110
|
+
* `GET /v1/users/:id/referral`: the stored result of the user's referral
|
|
111
|
+
* calls, with no call to the platform. 404 when the user was never reported.
|
|
112
|
+
*/
|
|
113
|
+
export interface UserReferralResult {
|
|
114
|
+
object: 'user_referral';
|
|
115
|
+
user_id: string;
|
|
116
|
+
/** `pending`, `attributed`, `none`, `failed`, `held` or `flagged`. */
|
|
117
|
+
status: 'pending' | 'attributed' | 'none' | 'failed' | 'held' | 'flagged';
|
|
118
|
+
/** The id Atlas reports the user under: their `external_id`, else the Atlas user id. */
|
|
119
|
+
customer_ref: string;
|
|
120
|
+
partner_id: string | null;
|
|
121
|
+
/** The referrer as the platform knows them. */
|
|
122
|
+
partner_external_ref: string | null;
|
|
123
|
+
referrer_user_id: string | null;
|
|
124
|
+
matched_via: string | null;
|
|
125
|
+
/** The platform's own status for the referral. */
|
|
126
|
+
referral_status: string | null;
|
|
127
|
+
/** The platform's reasoning notes. */
|
|
128
|
+
notes: string[];
|
|
129
|
+
referral_code: string | null;
|
|
130
|
+
referral_link: string | null;
|
|
131
|
+
/** The referral captured at sign-up, as sent (camelCase). */
|
|
132
|
+
context: Record<string, unknown> | null;
|
|
133
|
+
risk_level: 'low' | 'medium' | 'high' | null;
|
|
134
|
+
flagged: boolean;
|
|
135
|
+
/** Why the call is held, while `held`. */
|
|
136
|
+
hold_reason: string | null;
|
|
137
|
+
/** Epoch ms. */
|
|
138
|
+
signed_up_at: number;
|
|
139
|
+
updated_at: number;
|
|
140
|
+
}
|
|
92
141
|
export interface EmailAddress {
|
|
93
142
|
object: 'email_address';
|
|
94
143
|
id: string;
|
|
@@ -152,6 +201,12 @@ export interface CreateUserBody {
|
|
|
152
201
|
export interface UpdateUserBody {
|
|
153
202
|
first_name?: string;
|
|
154
203
|
last_name?: string;
|
|
204
|
+
/**
|
|
205
|
+
* Your own id for the user; `null` clears. With referral attribution on, a
|
|
206
|
+
* change after sign-up is forwarded to the referral platform as an alias,
|
|
207
|
+
* so events under the new id still match.
|
|
208
|
+
*/
|
|
209
|
+
external_id?: string | null;
|
|
155
210
|
public_metadata?: Metadata;
|
|
156
211
|
private_metadata?: Metadata;
|
|
157
212
|
/** The user's own referral code; `null` clears. Unique per instance (`409 REFERRAL_CODE_TAKEN`). */
|
|
@@ -168,6 +223,13 @@ export declare function usersResource(request: RequestFn): {
|
|
|
168
223
|
get(id: string): Promise<User>;
|
|
169
224
|
create(body: CreateUserBody, idempotencyKey?: string): Promise<User>;
|
|
170
225
|
update(id: string, body: UpdateUserBody): Promise<User>;
|
|
226
|
+
/**
|
|
227
|
+
* Set (or clear with `null`) the user's `external_id`: `PATCH
|
|
228
|
+
* /v1/users/:id`. With referral attribution on, Atlas forwards the change
|
|
229
|
+
* to the referral platform as an alias (old id, or the Atlas user id, to
|
|
230
|
+
* the new one), so billing events under your id earn the referrer.
|
|
231
|
+
*/
|
|
232
|
+
setExternalId(id: string, externalId: string | null): Promise<User>;
|
|
171
233
|
/** `PUT /v1/users/:id/metadata` — replaces the named bags wholesale. */
|
|
172
234
|
replaceMetadata(id: string, body: ReplaceUserMetadataBody): Promise<User>;
|
|
173
235
|
ban(id: string): Promise<User>;
|
package/dist/client/users.js
CHANGED
|
@@ -17,6 +17,15 @@ function usersResource(request) {
|
|
|
17
17
|
update(id, body) {
|
|
18
18
|
return request({ method: 'PATCH', path: `/v1/users/${(0, request_1.enc)(id)}`, body });
|
|
19
19
|
},
|
|
20
|
+
/**
|
|
21
|
+
* Set (or clear with `null`) the user's `external_id`: `PATCH
|
|
22
|
+
* /v1/users/:id`. With referral attribution on, Atlas forwards the change
|
|
23
|
+
* to the referral platform as an alias (old id, or the Atlas user id, to
|
|
24
|
+
* the new one), so billing events under your id earn the referrer.
|
|
25
|
+
*/
|
|
26
|
+
setExternalId(id, externalId) {
|
|
27
|
+
return request({ method: 'PATCH', path: `/v1/users/${(0, request_1.enc)(id)}`, body: { external_id: externalId } });
|
|
28
|
+
},
|
|
20
29
|
/** `PUT /v1/users/:id/metadata` — replaces the named bags wholesale. */
|
|
21
30
|
replaceMetadata(id, body) {
|
|
22
31
|
return request({ method: 'PUT', path: `/v1/users/${(0, request_1.enc)(id)}/metadata`, body });
|
package/dist/client/users.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"users.js","sourceRoot":"","sources":["../../src/client/users.ts"],"names":[],"mappings":";;
|
|
1
|
+
{"version":3,"file":"users.js","sourceRoot":"","sources":["../../src/client/users.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
CHANGED
|
@@ -13,6 +13,8 @@ export type { AtlasClient } from './client';
|
|
|
13
13
|
export * from './client';
|
|
14
14
|
export { createTestIssuer, TEST_TOKEN_TAMPERS } from './testing';
|
|
15
15
|
export type { TestIssuer, CreateTestIssuerOptions, MintIdTokenOptions, TestAuthorizeOptions, TestAuthorizeResult, TestTokenTamper, } from './testing';
|
|
16
|
+
export { signAtlasReferralCall, signReferallyCall, referallySignature, referralEmailHash, REFERALLY_API_VERSION, } from './referral-test-calls';
|
|
17
|
+
export type { AtlasReferralCallOptions, ReferallyCallOptions, ReferallyCallOp, SignedReferralCall, } from './referral-test-calls';
|
|
16
18
|
export { verifyPCActn } from './pca/verify';
|
|
17
19
|
export type { PcaVerdict, PcaContext, VerifyPCActnOptions } from './pca/verify';
|
|
18
20
|
export { requirePCA, defaultExtract, memoryPcaStore } from './pca/require-pca';
|
package/dist/index.js
CHANGED
|
@@ -14,7 +14,7 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
|
14
14
|
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
15
15
|
};
|
|
16
16
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
17
|
-
exports.memoryPcaStore = exports.defaultExtract = exports.requirePCA = exports.verifyPCActn = exports.TEST_TOKEN_TAMPERS = exports.createTestIssuer = exports.createAtlasClient = exports.resetOidcCaches = exports.oidcVerifyIdToken = exports.oidcStart = exports.oidcLogoutUrl = exports.oidcClearCookie = exports.oidcCallback = exports.oidc = exports.OIDC_FLOW_MAX_AGE_SECONDS = exports.OIDC_FLOW_COOKIE = exports.AtlasOidcError = exports.verifyLogoutToken = exports.memoryLogoutReplayStore = exports.LogoutTokenVerifier = exports.LOGOUT_TOKEN_MAX_AGE_SECONDS = exports.LOGOUT_TOKEN_CLOCK_SKEW_SECONDS = exports.BACKCHANNEL_LOGOUT_EVENT = exports.instanceIdFromPublishableKey = exports.discoveryUrlFor = exports.JwksDiscovery = exports.DiscoveryError = void 0;
|
|
17
|
+
exports.memoryPcaStore = exports.defaultExtract = exports.requirePCA = exports.verifyPCActn = exports.REFERALLY_API_VERSION = exports.referralEmailHash = exports.referallySignature = exports.signReferallyCall = exports.signAtlasReferralCall = exports.TEST_TOKEN_TAMPERS = exports.createTestIssuer = exports.createAtlasClient = exports.resetOidcCaches = exports.oidcVerifyIdToken = exports.oidcStart = exports.oidcLogoutUrl = exports.oidcClearCookie = exports.oidcCallback = exports.oidc = exports.OIDC_FLOW_MAX_AGE_SECONDS = exports.OIDC_FLOW_COOKIE = exports.AtlasOidcError = exports.verifyLogoutToken = exports.memoryLogoutReplayStore = exports.LogoutTokenVerifier = exports.LOGOUT_TOKEN_MAX_AGE_SECONDS = exports.LOGOUT_TOKEN_CLOCK_SKEW_SECONDS = exports.BACKCHANNEL_LOGOUT_EVENT = exports.instanceIdFromPublishableKey = exports.discoveryUrlFor = exports.JwksDiscovery = exports.DiscoveryError = void 0;
|
|
18
18
|
// §7.3 token verification — the original surface, unchanged.
|
|
19
19
|
__exportStar(require("./jwks-cache"), exports);
|
|
20
20
|
// OIDC discovery of the JWKS URL when only `issuer` is configured.
|
|
@@ -60,6 +60,12 @@ __exportStar(require("./client"), exports);
|
|
|
60
60
|
var testing_1 = require("./testing");
|
|
61
61
|
Object.defineProperty(exports, "createTestIssuer", { enumerable: true, get: function () { return testing_1.createTestIssuer; } });
|
|
62
62
|
Object.defineProperty(exports, "TEST_TOKEN_TAMPERS", { enumerable: true, get: function () { return testing_1.TEST_TOKEN_TAMPERS; } });
|
|
63
|
+
var referral_test_calls_1 = require("./referral-test-calls");
|
|
64
|
+
Object.defineProperty(exports, "signAtlasReferralCall", { enumerable: true, get: function () { return referral_test_calls_1.signAtlasReferralCall; } });
|
|
65
|
+
Object.defineProperty(exports, "signReferallyCall", { enumerable: true, get: function () { return referral_test_calls_1.signReferallyCall; } });
|
|
66
|
+
Object.defineProperty(exports, "referallySignature", { enumerable: true, get: function () { return referral_test_calls_1.referallySignature; } });
|
|
67
|
+
Object.defineProperty(exports, "referralEmailHash", { enumerable: true, get: function () { return referral_test_calls_1.referralEmailHash; } });
|
|
68
|
+
Object.defineProperty(exports, "REFERALLY_API_VERSION", { enumerable: true, get: function () { return referral_test_calls_1.REFERALLY_API_VERSION; } });
|
|
63
69
|
// Proof-Carrying Authority (agentic auth): offline verifier + framework-agnostic guard,
|
|
64
70
|
// beside the session-token verifier above.
|
|
65
71
|
var verify_1 = require("./pca/verify");
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;AAAA,6DAA6D;AAC7D,+CAA6B;AAC7B,mEAAmE;AACnE,yCAA2G;AAAlG,2GAAA,cAAc,OAAA;AAAE,0GAAA,aAAa,OAAA;AAAE,4GAAA,eAAe,OAAA;AAAE,yHAAA,4BAA4B,OAAA;AACrF,2CAAyB;AACzB,8CAA4B;AAE5B,6EAA6E;AAC7E,+CAOwB;AANtB,wHAAA,wBAAwB,OAAA;AACxB,+HAAA,+BAA+B,OAAA;AAC/B,4HAAA,4BAA4B,OAAA;AAC5B,mHAAA,mBAAmB,OAAA;AACnB,uHAAA,uBAAuB,OAAA;AACvB,iHAAA,iBAAiB,OAAA;AAUnB,sEAAsE;AACtE,iFAAiF;AACjF,+BAWgB;AAVd,sGAAA,cAAc,OAAA;AACd,wGAAA,gBAAgB,OAAA;AAChB,iHAAA,yBAAyB,OAAA;AACzB,4FAAA,IAAI,OAAA;AACJ,oGAAA,YAAY,OAAA;AACZ,uGAAA,eAAe,OAAA;AACf,qGAAA,aAAa,OAAA;AACb,iGAAA,SAAS,OAAA;AACT,yGAAA,iBAAiB,OAAA;AACjB,uGAAA,eAAe,OAAA;AAcjB,oDAAoD;AACpD,6CAA2B;AAE3B,uFAAuF;AACvF,8CAA4B;AAE5B,8DAA8D;AAC9D,mCAA6C;AAApC,2GAAA,iBAAiB,OAAA;AAE1B,2CAAyB;AAEzB,yEAAyE;AACzE,2EAA2E;AAC3E,iEAAiE;AACjE,qCAAiE;AAAxD,2GAAA,gBAAgB,OAAA;AAAE,6GAAA,kBAAkB,OAAA;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;AAAA,6DAA6D;AAC7D,+CAA6B;AAC7B,mEAAmE;AACnE,yCAA2G;AAAlG,2GAAA,cAAc,OAAA;AAAE,0GAAA,aAAa,OAAA;AAAE,4GAAA,eAAe,OAAA;AAAE,yHAAA,4BAA4B,OAAA;AACrF,2CAAyB;AACzB,8CAA4B;AAE5B,6EAA6E;AAC7E,+CAOwB;AANtB,wHAAA,wBAAwB,OAAA;AACxB,+HAAA,+BAA+B,OAAA;AAC/B,4HAAA,4BAA4B,OAAA;AAC5B,mHAAA,mBAAmB,OAAA;AACnB,uHAAA,uBAAuB,OAAA;AACvB,iHAAA,iBAAiB,OAAA;AAUnB,sEAAsE;AACtE,iFAAiF;AACjF,+BAWgB;AAVd,sGAAA,cAAc,OAAA;AACd,wGAAA,gBAAgB,OAAA;AAChB,iHAAA,yBAAyB,OAAA;AACzB,4FAAA,IAAI,OAAA;AACJ,oGAAA,YAAY,OAAA;AACZ,uGAAA,eAAe,OAAA;AACf,qGAAA,aAAa,OAAA;AACb,iGAAA,SAAS,OAAA;AACT,yGAAA,iBAAiB,OAAA;AACjB,uGAAA,eAAe,OAAA;AAcjB,oDAAoD;AACpD,6CAA2B;AAE3B,uFAAuF;AACvF,8CAA4B;AAE5B,8DAA8D;AAC9D,mCAA6C;AAApC,2GAAA,iBAAiB,OAAA;AAE1B,2CAAyB;AAEzB,yEAAyE;AACzE,2EAA2E;AAC3E,iEAAiE;AACjE,qCAAiE;AAAxD,2GAAA,gBAAgB,OAAA;AAAE,6GAAA,kBAAkB,OAAA;AAS7C,6DAM+B;AAL7B,4HAAA,qBAAqB,OAAA;AACrB,wHAAA,iBAAiB,OAAA;AACjB,yHAAA,kBAAkB,OAAA;AAClB,wHAAA,iBAAiB,OAAA;AACjB,4HAAA,qBAAqB,OAAA;AASvB,wFAAwF;AACxF,2CAA2C;AAC3C,uCAA4C;AAAnC,sGAAA,YAAY,OAAA;AAErB,iDAA+E;AAAtE,yGAAA,UAAU,OAAA;AAAE,6GAAA,cAAc,OAAA;AAAE,6GAAA,cAAc,OAAA"}
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
import { type ReferralOp } from './referrals';
|
|
2
|
+
/**
|
|
3
|
+
* Signed referral calls for an app's own test suite: send exactly what an
|
|
4
|
+
* Atlas instance would send to a referral platform, against a platform you run
|
|
5
|
+
* locally, with no Atlas instance involved. Two wire formats:
|
|
6
|
+
*
|
|
7
|
+
* - the Atlas referral protocol (provider `webhook`): every call is a signed
|
|
8
|
+
* `POST {base}/<endpoint>` with `op` and `customerRef` in the body, signed
|
|
9
|
+
* like Atlas webhooks (`atlas-id`, `atlas-timestamp`, `atlas-signature`);
|
|
10
|
+
* - Referally (provider `referally`): `{base}/v1/auth/connections/{id}/…`,
|
|
11
|
+
* signed with `x-referally-signature: t=<unix s>,v1=<hex HMAC-SHA256>` over
|
|
12
|
+
* `"{t}.{payload}"`, where payload is the raw body for POST and the raw
|
|
13
|
+
* query string for GET.
|
|
14
|
+
*
|
|
15
|
+
* Both are also on {@link TestIssuer} (`referralCall`, `referallyCall`) with
|
|
16
|
+
* the issuer's clock.
|
|
17
|
+
*/
|
|
18
|
+
/** A ready-to-send signed call. `request()` builds a Fetch `Request`. */
|
|
19
|
+
export interface SignedReferralCall {
|
|
20
|
+
url: string;
|
|
21
|
+
method: 'POST' | 'GET';
|
|
22
|
+
headers: Record<string, string>;
|
|
23
|
+
/** The exact signed body (absent on GET). */
|
|
24
|
+
body?: string;
|
|
25
|
+
request(): Request;
|
|
26
|
+
}
|
|
27
|
+
/** sha256 hex of the lower-cased, trimmed email, as Atlas sends `emailHash`. */
|
|
28
|
+
export declare function referralEmailHash(email: string | null | undefined): string | null;
|
|
29
|
+
export interface AtlasReferralCallOptions {
|
|
30
|
+
/** The platform's base URL, as configured on the instance (`endpoint_url`). */
|
|
31
|
+
baseUrl: string;
|
|
32
|
+
/** The instance's signing secret for the connection. */
|
|
33
|
+
secret: string;
|
|
34
|
+
op: ReferralOp;
|
|
35
|
+
/** The rest of the body (`customerRef` and the op's fields); `op` is added. */
|
|
36
|
+
payload: {
|
|
37
|
+
customerRef: string;
|
|
38
|
+
} & Record<string, unknown>;
|
|
39
|
+
/** The call id (`atlas-id`), the same on every retry of one call. Default: random. */
|
|
40
|
+
callId?: string;
|
|
41
|
+
/** Epoch ms. Default: now. */
|
|
42
|
+
now?: number;
|
|
43
|
+
}
|
|
44
|
+
/** A call in the Atlas referral protocol, signed exactly as an Atlas instance signs it. */
|
|
45
|
+
export declare function signAtlasReferralCall(options: AtlasReferralCallOptions): SignedReferralCall;
|
|
46
|
+
/** The Referally API version Atlas pins on every call (`referally-version`). */
|
|
47
|
+
export declare const REFERALLY_API_VERSION = "2026-10-21";
|
|
48
|
+
/** The Referally connection calls Atlas makes. */
|
|
49
|
+
export type ReferallyCallOp = 'signups' | 'erase' | 'export' | 'aliases' | 'users' | 'ping';
|
|
50
|
+
export interface ReferallyCallOptions {
|
|
51
|
+
/** Your Referally base URL (never hard-code it; read it from config). */
|
|
52
|
+
baseUrl: string;
|
|
53
|
+
/** The Atlas connection id on Referally. */
|
|
54
|
+
connectionId: string;
|
|
55
|
+
/** The connection secret Referally returned when the connection was created. */
|
|
56
|
+
secret: string;
|
|
57
|
+
op: ReferallyCallOp;
|
|
58
|
+
/** The JSON body for POST calls. */
|
|
59
|
+
body?: Record<string, unknown>;
|
|
60
|
+
/** `export` only: the customer to export (sent as `?customerRef=`). */
|
|
61
|
+
customerRef?: string;
|
|
62
|
+
/** Epoch ms. Default: now. */
|
|
63
|
+
now?: number;
|
|
64
|
+
}
|
|
65
|
+
/**
|
|
66
|
+
* The `x-referally-signature` value for a payload: `t=<unix s>,v1=<hex
|
|
67
|
+
* HMAC-SHA256(secret, "{t}.{payload}")>`.
|
|
68
|
+
*/
|
|
69
|
+
export declare function referallySignature(secret: string, payload: string, unixSeconds: number): string;
|
|
70
|
+
/** A Referally connection call, signed exactly as the Atlas `referally` adapter signs it. */
|
|
71
|
+
export declare function signReferallyCall(options: ReferallyCallOptions): SignedReferralCall;
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.REFERALLY_API_VERSION = void 0;
|
|
4
|
+
exports.referralEmailHash = referralEmailHash;
|
|
5
|
+
exports.signAtlasReferralCall = signAtlasReferralCall;
|
|
6
|
+
exports.referallySignature = referallySignature;
|
|
7
|
+
exports.signReferallyCall = signReferallyCall;
|
|
8
|
+
const node_crypto_1 = require("node:crypto");
|
|
9
|
+
const referrals_1 = require("./referrals");
|
|
10
|
+
function signed(url, method, headers, body) {
|
|
11
|
+
return {
|
|
12
|
+
url,
|
|
13
|
+
method,
|
|
14
|
+
headers,
|
|
15
|
+
body,
|
|
16
|
+
request: () => new Request(url, { method, headers, body }),
|
|
17
|
+
};
|
|
18
|
+
}
|
|
19
|
+
const trimBase = (base) => base.replace(/\/+$/, '');
|
|
20
|
+
/** sha256 hex of the lower-cased, trimmed email, as Atlas sends `emailHash`. */
|
|
21
|
+
function referralEmailHash(email) {
|
|
22
|
+
if (!email)
|
|
23
|
+
return null;
|
|
24
|
+
return (0, node_crypto_1.createHash)('sha256').update(email.trim().toLowerCase()).digest('hex');
|
|
25
|
+
}
|
|
26
|
+
/** A call in the Atlas referral protocol, signed exactly as an Atlas instance signs it. */
|
|
27
|
+
function signAtlasReferralCall(options) {
|
|
28
|
+
const id = options.callId ?? `rfc_test_${(0, node_crypto_1.randomBytes)(8).toString('hex')}`;
|
|
29
|
+
const timestamp = options.now ?? Date.now();
|
|
30
|
+
const body = JSON.stringify({ op: options.op, ...options.payload });
|
|
31
|
+
const signature = (0, node_crypto_1.createHmac)('sha256', options.secret).update(`${id}.${timestamp}.${body}`).digest('base64');
|
|
32
|
+
const headers = {
|
|
33
|
+
'content-type': 'application/json',
|
|
34
|
+
'atlas-id': id,
|
|
35
|
+
'atlas-timestamp': String(timestamp),
|
|
36
|
+
'atlas-signature': `v1,${signature}`,
|
|
37
|
+
'idempotency-key': `${options.op}:${options.payload.customerRef}`,
|
|
38
|
+
'user-agent': referrals_1.REFERRAL_PROTOCOL_USER_AGENT,
|
|
39
|
+
[referrals_1.REFERRAL_PROTOCOL_VERSION_HEADER]: referrals_1.REFERRAL_PROTOCOL_VERSION,
|
|
40
|
+
};
|
|
41
|
+
return signed(`${trimBase(options.baseUrl)}/${referrals_1.REFERRAL_OP_ENDPOINTS[options.op]}`, 'POST', headers, body);
|
|
42
|
+
}
|
|
43
|
+
/** The Referally API version Atlas pins on every call (`referally-version`). */
|
|
44
|
+
exports.REFERALLY_API_VERSION = '2026-10-21';
|
|
45
|
+
/**
|
|
46
|
+
* The `x-referally-signature` value for a payload: `t=<unix s>,v1=<hex
|
|
47
|
+
* HMAC-SHA256(secret, "{t}.{payload}")>`.
|
|
48
|
+
*/
|
|
49
|
+
function referallySignature(secret, payload, unixSeconds) {
|
|
50
|
+
const mac = (0, node_crypto_1.createHmac)('sha256', secret).update(`${unixSeconds}.${payload}`).digest('hex');
|
|
51
|
+
return `t=${unixSeconds},v1=${mac}`;
|
|
52
|
+
}
|
|
53
|
+
/** A Referally connection call, signed exactly as the Atlas `referally` adapter signs it. */
|
|
54
|
+
function signReferallyCall(options) {
|
|
55
|
+
const t = Math.floor((options.now ?? Date.now()) / 1000);
|
|
56
|
+
const base = `${trimBase(options.baseUrl)}/v1/auth/connections/${encodeURIComponent(options.connectionId)}/${options.op}`;
|
|
57
|
+
const headers = { 'referally-version': exports.REFERALLY_API_VERSION };
|
|
58
|
+
if (options.op === 'export') {
|
|
59
|
+
if (!options.customerRef)
|
|
60
|
+
throw new Error('signReferallyCall: export needs customerRef.');
|
|
61
|
+
const query = new URLSearchParams({ customerRef: options.customerRef }).toString();
|
|
62
|
+
headers['x-referally-signature'] = referallySignature(options.secret, query, t);
|
|
63
|
+
return signed(`${base}?${query}`, 'GET', headers);
|
|
64
|
+
}
|
|
65
|
+
const body = JSON.stringify(options.body ?? {});
|
|
66
|
+
headers['content-type'] = 'application/json';
|
|
67
|
+
headers['x-referally-signature'] = referallySignature(options.secret, body, t);
|
|
68
|
+
return signed(base, 'POST', headers, body);
|
|
69
|
+
}
|
|
70
|
+
//# sourceMappingURL=referral-test-calls.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"referral-test-calls.js","sourceRoot":"","sources":["../src/referral-test-calls.ts"],"names":[],"mappings":"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"}
|
package/dist/referrals.d.ts
CHANGED
|
@@ -11,13 +11,17 @@ import type { ReferralRisk } from './client/referrals';
|
|
|
11
11
|
* POST {base}/export { op: 'export', customerRef, test } → 200 JSON (any shape) | 404
|
|
12
12
|
* POST {base}/partners { op: 'partner', customerRef, code, emailHash } → 2xx | 409 code taken | 404/405/501 unsupported
|
|
13
13
|
* POST {base}/signals { op: 'signal', customerRef, type, occurredAt, data } → 2xx | 404/405/501 unsupported
|
|
14
|
+
* POST {base}/aliases { op: 'alias', customerRef, fromCustomerRef, toCustomerRef } → 2xx | 409 (permanent)
|
|
15
|
+
* POST {base}/users { op: 'user', customerRef, email?, name?, status? } → 2xx
|
|
16
|
+
* POST {base}/ping { op: 'ping', customerRef: 'atlas_connection_test' } → 200 ReferralPingResponse
|
|
14
17
|
*
|
|
15
18
|
* The connection test is `POST {base}/export` with
|
|
16
19
|
* `{ op: 'export', customerRef: 'atlas_connection_test', test: true }` (answer
|
|
17
20
|
* 2xx or 404). Calls are signed exactly like Atlas webhooks (`atlas-id`,
|
|
18
21
|
* `atlas-timestamp`, `atlas-signature` over `<id>.<timestamp>.<raw body>`),
|
|
19
|
-
* with `Idempotency-Key
|
|
20
|
-
* call id, the same on
|
|
22
|
+
* with `Idempotency-Key`, `User-Agent: Atlas-Referrals/1` and
|
|
23
|
+
* `Atlas-Referrals-Version: 2026-10-21`. `atlas-id` is the call id, the same on
|
|
24
|
+
* every retry of one call.
|
|
21
25
|
*
|
|
22
26
|
* The signature covers the body, not the URL, so everything that matters is in
|
|
23
27
|
* the body. Pass the path the request arrived on (or the operation you
|
|
@@ -28,6 +32,10 @@ import type { ReferralRisk } from './client/referrals';
|
|
|
28
32
|
export declare const REFERRAL_CONNECTION_TEST_REF = "atlas_connection_test";
|
|
29
33
|
/** The `User-Agent` Atlas sends on every referral call. */
|
|
30
34
|
export declare const REFERRAL_PROTOCOL_USER_AGENT = "Atlas-Referrals/1";
|
|
35
|
+
/** The `Atlas-Referrals-Version` header Atlas sends on every call; shapes only grow, additively, under it. */
|
|
36
|
+
export declare const REFERRAL_PROTOCOL_VERSION = "2026-10-21";
|
|
37
|
+
/** The name of the version header (lower-case). */
|
|
38
|
+
export declare const REFERRAL_PROTOCOL_VERSION_HEADER = "atlas-referrals-version";
|
|
31
39
|
/** The referral captured at sign-up (from the page URL, or a tracking cookie under consent). Never trusted. */
|
|
32
40
|
export interface ReferralContext {
|
|
33
41
|
/** The referral code from the URL (or cookie), 3-64 of `A-Z a-z 0-9 _ -`. */
|
|
@@ -82,6 +90,8 @@ export interface ReferralSignupResponse {
|
|
|
82
90
|
code: string | null;
|
|
83
91
|
link?: string | null;
|
|
84
92
|
} | null;
|
|
93
|
+
/** Why you matched or did not (shown in the Atlas delivery log and on the user). */
|
|
94
|
+
notes?: string[];
|
|
85
95
|
}
|
|
86
96
|
/** `POST {base}/erase`. */
|
|
87
97
|
export interface ReferralErasePayload {
|
|
@@ -113,8 +123,46 @@ export interface ReferralSignalPayload {
|
|
|
113
123
|
occurredAt: string;
|
|
114
124
|
data: Record<string, unknown>;
|
|
115
125
|
}
|
|
126
|
+
/**
|
|
127
|
+
* `POST {base}/aliases`: the user's `external_id` was set or changed after the
|
|
128
|
+
* sign-up call. Re-key the customer from `fromCustomerRef` (the old value, or
|
|
129
|
+
* the Atlas user id) to `toCustomerRef`. `customerRef` equals `toCustomerRef`.
|
|
130
|
+
* A 409 is treated as permanent.
|
|
131
|
+
*/
|
|
132
|
+
export interface ReferralAliasPayload {
|
|
133
|
+
op: 'alias';
|
|
134
|
+
customerRef: string;
|
|
135
|
+
fromCustomerRef: string;
|
|
136
|
+
toCustomerRef: string;
|
|
137
|
+
}
|
|
138
|
+
/**
|
|
139
|
+
* `POST {base}/users`: a lifecycle change. `email` / `name` when they changed;
|
|
140
|
+
* `status` `suspended` on a ban, `active` on an unban, `deleted` on deletion
|
|
141
|
+
* (deletion is also sent to `/erase`).
|
|
142
|
+
*/
|
|
143
|
+
export interface ReferralUserPayload {
|
|
144
|
+
op: 'user';
|
|
145
|
+
customerRef: string;
|
|
146
|
+
email?: string | null;
|
|
147
|
+
name?: string | null;
|
|
148
|
+
status?: 'active' | 'suspended' | 'deleted';
|
|
149
|
+
}
|
|
150
|
+
/** `POST {base}/ping`: the connection test where the platform supports it. */
|
|
151
|
+
export interface ReferralPingPayload {
|
|
152
|
+
op: 'ping';
|
|
153
|
+
customerRef: string;
|
|
154
|
+
}
|
|
155
|
+
/** The answer to a ping. Every field but `ok` is optional and shown on the Atlas dashboard. */
|
|
156
|
+
export interface ReferralPingResponse {
|
|
157
|
+
ok: boolean;
|
|
158
|
+
programName?: string;
|
|
159
|
+
orgName?: string;
|
|
160
|
+
autoEnrollUsers?: boolean;
|
|
161
|
+
/** ISO 8601. Atlas warns when it is more than 60 seconds off. */
|
|
162
|
+
serverTime?: string;
|
|
163
|
+
}
|
|
116
164
|
/** The operations of the referral protocol (the `op` of every call). */
|
|
117
|
-
export type ReferralOp = 'signup' | 'erase' | 'export' | 'partner' | 'signal';
|
|
165
|
+
export type ReferralOp = 'signup' | 'erase' | 'export' | 'partner' | 'signal' | 'alias' | 'user' | 'ping';
|
|
118
166
|
/** The endpoint (last path segment) each operation is sent to. */
|
|
119
167
|
export declare const REFERRAL_OP_ENDPOINTS: Record<ReferralOp, string>;
|
|
120
168
|
/** A verified call, by operation. */
|
|
@@ -135,6 +183,15 @@ export type ReferralProtocolCall = {
|
|
|
135
183
|
} | {
|
|
136
184
|
op: 'signal';
|
|
137
185
|
payload: ReferralSignalPayload;
|
|
186
|
+
} | {
|
|
187
|
+
op: 'alias';
|
|
188
|
+
payload: ReferralAliasPayload;
|
|
189
|
+
} | {
|
|
190
|
+
op: 'user';
|
|
191
|
+
payload: ReferralUserPayload;
|
|
192
|
+
} | {
|
|
193
|
+
op: 'ping';
|
|
194
|
+
payload: ReferralPingPayload;
|
|
138
195
|
};
|
|
139
196
|
/**
|
|
140
197
|
* Why a call was refused: a webhook signature failure, or
|
|
@@ -153,8 +210,8 @@ export interface VerifyReferralRequestInput {
|
|
|
153
210
|
secret: string;
|
|
154
211
|
/**
|
|
155
212
|
* The path (or full URL) the request arrived on, e.g. `req.path`. Its last
|
|
156
|
-
* segment (`signups`, `erase`, `export`, `partners`, `signals`
|
|
157
|
-
* the signed `op`.
|
|
213
|
+
* segment (`signups`, `erase`, `export`, `partners`, `signals`, `aliases`,
|
|
214
|
+
* `users`, `ping`) must match the signed `op`.
|
|
158
215
|
*/
|
|
159
216
|
path?: string;
|
|
160
217
|
/** The operation this handler serves; the signed `op` must equal it. */
|
|
@@ -172,6 +229,8 @@ export interface ReferralVerifyResult {
|
|
|
172
229
|
timestamp?: number;
|
|
173
230
|
/** The `Idempotency-Key` header (`signup:<customerRef>` on sign-ups). Not signed. */
|
|
174
231
|
idempotencyKey?: string;
|
|
232
|
+
/** The `Atlas-Referrals-Version` header, when sent. Not signed. */
|
|
233
|
+
protocolVersion?: string;
|
|
175
234
|
/** The operation and its payload, present only when `verified`. */
|
|
176
235
|
call?: ReferralProtocolCall;
|
|
177
236
|
}
|
|
@@ -191,7 +250,8 @@ export declare function referralOpForPath(path: string): ReferralOp | null;
|
|
|
191
250
|
* if (!verified || !call) return res.sendStatus(401);
|
|
192
251
|
* if (call.op === 'export' && call.test) return res.sendStatus(404);
|
|
193
252
|
* if (call.op === 'signup') return res.json(await attribute(call.payload)); // ReferralSignupResponse
|
|
194
|
-
*
|
|
253
|
+
* if (call.op === 'ping') return res.json({ ok: true, serverTime: new Date().toISOString() });
|
|
254
|
+
* // erase, export, partner, signal, alias, user ...
|
|
195
255
|
* });
|
|
196
256
|
* ```
|
|
197
257
|
*/
|
package/dist/referrals.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.REFERRAL_OP_ENDPOINTS = exports.REFERRAL_PROTOCOL_USER_AGENT = exports.REFERRAL_CONNECTION_TEST_REF = void 0;
|
|
3
|
+
exports.REFERRAL_OP_ENDPOINTS = exports.REFERRAL_PROTOCOL_VERSION_HEADER = exports.REFERRAL_PROTOCOL_VERSION = exports.REFERRAL_PROTOCOL_USER_AGENT = exports.REFERRAL_CONNECTION_TEST_REF = void 0;
|
|
4
4
|
exports.referralOpForPath = referralOpForPath;
|
|
5
5
|
exports.verifyReferralRequest = verifyReferralRequest;
|
|
6
6
|
const webhooks_1 = require("./webhooks");
|
|
@@ -15,13 +15,17 @@ const webhooks_1 = require("./webhooks");
|
|
|
15
15
|
* POST {base}/export { op: 'export', customerRef, test } → 200 JSON (any shape) | 404
|
|
16
16
|
* POST {base}/partners { op: 'partner', customerRef, code, emailHash } → 2xx | 409 code taken | 404/405/501 unsupported
|
|
17
17
|
* POST {base}/signals { op: 'signal', customerRef, type, occurredAt, data } → 2xx | 404/405/501 unsupported
|
|
18
|
+
* POST {base}/aliases { op: 'alias', customerRef, fromCustomerRef, toCustomerRef } → 2xx | 409 (permanent)
|
|
19
|
+
* POST {base}/users { op: 'user', customerRef, email?, name?, status? } → 2xx
|
|
20
|
+
* POST {base}/ping { op: 'ping', customerRef: 'atlas_connection_test' } → 200 ReferralPingResponse
|
|
18
21
|
*
|
|
19
22
|
* The connection test is `POST {base}/export` with
|
|
20
23
|
* `{ op: 'export', customerRef: 'atlas_connection_test', test: true }` (answer
|
|
21
24
|
* 2xx or 404). Calls are signed exactly like Atlas webhooks (`atlas-id`,
|
|
22
25
|
* `atlas-timestamp`, `atlas-signature` over `<id>.<timestamp>.<raw body>`),
|
|
23
|
-
* with `Idempotency-Key
|
|
24
|
-
* call id, the same on
|
|
26
|
+
* with `Idempotency-Key`, `User-Agent: Atlas-Referrals/1` and
|
|
27
|
+
* `Atlas-Referrals-Version: 2026-10-21`. `atlas-id` is the call id, the same on
|
|
28
|
+
* every retry of one call.
|
|
25
29
|
*
|
|
26
30
|
* The signature covers the body, not the URL, so everything that matters is in
|
|
27
31
|
* the body. Pass the path the request arrived on (or the operation you
|
|
@@ -32,6 +36,10 @@ const webhooks_1 = require("./webhooks");
|
|
|
32
36
|
exports.REFERRAL_CONNECTION_TEST_REF = 'atlas_connection_test';
|
|
33
37
|
/** The `User-Agent` Atlas sends on every referral call. */
|
|
34
38
|
exports.REFERRAL_PROTOCOL_USER_AGENT = 'Atlas-Referrals/1';
|
|
39
|
+
/** The `Atlas-Referrals-Version` header Atlas sends on every call; shapes only grow, additively, under it. */
|
|
40
|
+
exports.REFERRAL_PROTOCOL_VERSION = '2026-10-21';
|
|
41
|
+
/** The name of the version header (lower-case). */
|
|
42
|
+
exports.REFERRAL_PROTOCOL_VERSION_HEADER = 'atlas-referrals-version';
|
|
35
43
|
/** The endpoint (last path segment) each operation is sent to. */
|
|
36
44
|
exports.REFERRAL_OP_ENDPOINTS = {
|
|
37
45
|
signup: 'signups',
|
|
@@ -39,6 +47,9 @@ exports.REFERRAL_OP_ENDPOINTS = {
|
|
|
39
47
|
export: 'export',
|
|
40
48
|
partner: 'partners',
|
|
41
49
|
signal: 'signals',
|
|
50
|
+
alias: 'aliases',
|
|
51
|
+
user: 'users',
|
|
52
|
+
ping: 'ping',
|
|
42
53
|
};
|
|
43
54
|
function header(headers, name) {
|
|
44
55
|
if (typeof headers.get === 'function')
|
|
@@ -76,7 +87,8 @@ function referralOpForPath(path) {
|
|
|
76
87
|
* if (!verified || !call) return res.sendStatus(401);
|
|
77
88
|
* if (call.op === 'export' && call.test) return res.sendStatus(404);
|
|
78
89
|
* if (call.op === 'signup') return res.json(await attribute(call.payload)); // ReferralSignupResponse
|
|
79
|
-
*
|
|
90
|
+
* if (call.op === 'ping') return res.json({ ok: true, serverTime: new Date().toISOString() });
|
|
91
|
+
* // erase, export, partner, signal, alias, user ...
|
|
80
92
|
* });
|
|
81
93
|
* ```
|
|
82
94
|
*/
|
|
@@ -115,6 +127,7 @@ function verifyReferralRequest(input) {
|
|
|
115
127
|
deliveryId: result.deliveryId,
|
|
116
128
|
timestamp: result.timestamp,
|
|
117
129
|
idempotencyKey: header(input.headers, 'idempotency-key'),
|
|
130
|
+
protocolVersion: header(input.headers, exports.REFERRAL_PROTOCOL_VERSION_HEADER),
|
|
118
131
|
call,
|
|
119
132
|
};
|
|
120
133
|
}
|
package/dist/referrals.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"referrals.js","sourceRoot":"","sources":["../src/referrals.ts"],"names":[],"mappings":";;;
|
|
1
|
+
{"version":3,"file":"referrals.js","sourceRoot":"","sources":["../src/referrals.ts"],"names":[],"mappings":"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"}
|
package/dist/testing.d.ts
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { type KeyLike } from 'jose';
|
|
2
2
|
import type { Jwks } from './jwks-cache';
|
|
3
3
|
import type { SessionClaims } from './verify';
|
|
4
|
+
import { type AtlasReferralCallOptions, type ReferallyCallOptions, type SignedReferralCall } from './referral-test-calls';
|
|
4
5
|
/**
|
|
5
6
|
* §1.3(c) hermetic test fixtures.
|
|
6
7
|
*
|
|
@@ -128,6 +129,17 @@ export interface TestIssuer {
|
|
|
128
129
|
* answers 404, so nothing reaches the network.
|
|
129
130
|
*/
|
|
130
131
|
fetch: typeof fetch;
|
|
132
|
+
/**
|
|
133
|
+
* A signed call in the Atlas referral protocol, as an instance with
|
|
134
|
+
* provider `webhook` sends it, for testing your referral platform's
|
|
135
|
+
* receiver. Uses this issuer's clock unless `now` is given.
|
|
136
|
+
*/
|
|
137
|
+
referralCall(options: AtlasReferralCallOptions): SignedReferralCall;
|
|
138
|
+
/**
|
|
139
|
+
* A signed Referally connection call, as an instance with provider
|
|
140
|
+
* `referally` sends it, to run against a local Referally in your tests.
|
|
141
|
+
*/
|
|
142
|
+
referallyCall(options: ReferallyCallOptions): SignedReferralCall;
|
|
131
143
|
/** The endpoint URLs `fetch` serves (and the discovery document lists). */
|
|
132
144
|
endpoints: {
|
|
133
145
|
discovery: string;
|
package/dist/testing.js
CHANGED
|
@@ -3,6 +3,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
3
3
|
exports.TEST_TOKEN_TAMPERS = void 0;
|
|
4
4
|
exports.createTestIssuer = createTestIssuer;
|
|
5
5
|
const jose_1 = require("jose");
|
|
6
|
+
const referral_test_calls_1 = require("./referral-test-calls");
|
|
6
7
|
/** The six {@link TestTokenTamper} cases, for a table-driven negative test. */
|
|
7
8
|
exports.TEST_TOKEN_TAMPERS = [
|
|
8
9
|
'wrong_aud',
|
|
@@ -224,6 +225,8 @@ async function createTestIssuer(options = {}) {
|
|
|
224
225
|
clientId,
|
|
225
226
|
mintSession,
|
|
226
227
|
mintIdToken,
|
|
228
|
+
referralCall: (o) => (0, referral_test_calls_1.signAtlasReferralCall)({ ...o, now: o.now ?? clock() }),
|
|
229
|
+
referallyCall: (o) => (0, referral_test_calls_1.signReferallyCall)({ ...o, now: o.now ?? clock() }),
|
|
227
230
|
authorize,
|
|
228
231
|
fetch: fakeFetch,
|
|
229
232
|
endpoints,
|
package/dist/testing.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"testing.js","sourceRoot":"","sources":["../src/testing.ts"],"names":[],"mappings":";;;
|
|
1
|
+
{"version":3,"file":"testing.js","sourceRoot":"","sources":["../src/testing.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@atlasauth/backend",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.12.0",
|
|
4
4
|
"main": "./dist/index.js",
|
|
5
5
|
"types": "./dist/index.d.ts",
|
|
6
6
|
"dependencies": {
|
|
7
7
|
"jose": "^5.9.6",
|
|
8
|
-
"@atlasauth/
|
|
9
|
-
"@atlasauth/
|
|
8
|
+
"@atlasauth/pca": "0.1.0",
|
|
9
|
+
"@atlasauth/authz": "0.1.1"
|
|
10
10
|
},
|
|
11
11
|
"devDependencies": {
|
|
12
12
|
"typescript": "^5.6.3",
|