@noresponse/node 6.0.2 → 7.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (53) hide show
  1. package/CHANGELOG.md +11 -0
  2. package/README.md +22 -8
  3. package/dist/commonjs/auth.d.ts +1 -1
  4. package/dist/commonjs/claim-map.js +1 -1
  5. package/dist/commonjs/claim-map.js.map +1 -1
  6. package/dist/commonjs/client.d.ts +14 -0
  7. package/dist/commonjs/client.d.ts.map +1 -1
  8. package/dist/commonjs/client.js +20 -0
  9. package/dist/commonjs/client.js.map +1 -1
  10. package/dist/commonjs/index.d.ts +1 -1
  11. package/dist/commonjs/index.d.ts.map +1 -1
  12. package/dist/commonjs/index.js +5 -8
  13. package/dist/commonjs/index.js.map +1 -1
  14. package/dist/commonjs/late-results.d.ts +85 -139
  15. package/dist/commonjs/late-results.d.ts.map +1 -1
  16. package/dist/commonjs/late-results.js +242 -331
  17. package/dist/commonjs/late-results.js.map +1 -1
  18. package/dist/commonjs/lib/config.d.ts +2 -2
  19. package/dist/commonjs/lib/config.js +2 -2
  20. package/dist/commonjs/models/account-decision.d.ts +3 -2
  21. package/dist/commonjs/models/account-decision.d.ts.map +1 -1
  22. package/dist/commonjs/models/account-decision.js +2 -1
  23. package/dist/commonjs/models/account-decision.js.map +1 -1
  24. package/dist/commonjs/models/account-decisions-by-flow.d.ts +4 -4
  25. package/dist/commonjs/models/account-risk-changed.d.ts +1 -1
  26. package/dist/commonjs/models/account-risk.d.ts +1 -1
  27. package/dist/commonjs/models/account.d.ts +1 -1
  28. package/dist/esm/auth.d.ts +1 -1
  29. package/dist/esm/claim-map.js +1 -1
  30. package/dist/esm/claim-map.js.map +1 -1
  31. package/dist/esm/client.d.ts +14 -0
  32. package/dist/esm/client.d.ts.map +1 -1
  33. package/dist/esm/client.js +20 -0
  34. package/dist/esm/client.js.map +1 -1
  35. package/dist/esm/index.d.ts +1 -1
  36. package/dist/esm/index.d.ts.map +1 -1
  37. package/dist/esm/index.js +1 -1
  38. package/dist/esm/index.js.map +1 -1
  39. package/dist/esm/late-results.d.ts +85 -139
  40. package/dist/esm/late-results.d.ts.map +1 -1
  41. package/dist/esm/late-results.js +237 -324
  42. package/dist/esm/late-results.js.map +1 -1
  43. package/dist/esm/lib/config.d.ts +2 -2
  44. package/dist/esm/lib/config.js +2 -2
  45. package/dist/esm/models/account-decision.d.ts +3 -2
  46. package/dist/esm/models/account-decision.d.ts.map +1 -1
  47. package/dist/esm/models/account-decision.js +2 -1
  48. package/dist/esm/models/account-decision.js.map +1 -1
  49. package/dist/esm/models/account-decisions-by-flow.d.ts +4 -4
  50. package/dist/esm/models/account-risk-changed.d.ts +1 -1
  51. package/dist/esm/models/account-risk.d.ts +1 -1
  52. package/dist/esm/models/account.d.ts +1 -1
  53. package/package.json +1 -1
@@ -1,161 +1,107 @@
1
+ /**
2
+ * Late enforcement. Generated by tools/generate_overlays.py from
3
+ * tools/late_results/actions.json; do not edit.
4
+ *
5
+ * account.risk_changed only wakes the handler. handleRiskChange verifies the
6
+ * delivery, reads the account's current risk (GET /v1/accounts/{account_id}),
7
+ * asks your getAccountState where the account is in your own flow, and takes
8
+ * the actions the table names for that state and the decision of its flow:
9
+ *
10
+ * onboarding account_creation review/block fail_onboarding, revoke_sessions
11
+ * provisional account_creation review/block reject_activation, revoke_sessions
12
+ * active login review revoke_sessions
13
+ * active login block restrict, revoke_sessions
14
+ * restricted login allow unrestrict, when flows.login.reinstate
15
+ *
16
+ * Every action, or none, is recorded with accounts.recordEnforcement at the
17
+ * riskVersion read, and a refused action is recorded as failed and thrown.
18
+ * No action deletes a user. The same table and vectors
19
+ * (tests/fixtures/late-results-vectors.json) run in every SDK.
20
+ */
21
+ import type { NoResponse } from "./client.js";
22
+ import type { Account } from "./models/account.js";
1
23
  import type { WebhookEvent } from "./models/webhook-event.js";
2
24
  import { type ConstructEventOptions, type HeaderInput, type WebhookSecrets } from "./webhooks.js";
3
- /** What to do to the user. "ban" also ends every session. */
4
- export type LateResultAction = "none" | "revoke_sessions" | "ban";
5
- /** The action for each account decision (account.risk.decision). A decision you leave out does nothing. */
6
- export type LateResultPolicy = Readonly<Partial<Record<"allow" | "step_up" | "review" | "block", LateResultAction>>>;
7
- /** Revoke sessions on review and block; do nothing on allow or step_up. Banning is opt-in. */
8
- export declare const DEFAULT_LATE_RESULT_POLICY: LateResultPolicy;
9
- /** The two admin actions, for one auth provider. Build one with clerkActions, workosActions or auth0Actions. */
10
- export interface LateResultProvider {
11
- readonly name: string;
12
- /** End every active session of the user. */
13
- revokeSessions(userId: string): Promise<void>;
14
- /** Stop the user signing in again and end their sessions. */
15
- ban(userId: string): Promise<void>;
16
- /**
17
- * Optional. Take `action` and return the action that ran. A provider that
18
- * has to do more than it was asked implements this: auth0Actions answers
19
- * "ban" when the tenant's plan has no sessions API and it blocked the user
20
- * to end their sessions. When absent, handleLateResult calls ban or
21
- * revokeSessions and reports the action asked for.
22
- */
23
- act?(action: "revoke_sessions" | "ban", userId: string): Promise<LateResultAction>;
24
- }
25
- /** A provider that reports the action that ran, as auth0Actions does. */
26
- export interface LateResultActor extends LateResultProvider {
27
- act(action: "revoke_sessions" | "ban", userId: string): Promise<LateResultAction>;
25
+ type Flow = "account_creation" | "login" | "purchase";
26
+ export type AccountState = "onboarding" | "provisional" | "active" | "restricted" | "rejected";
27
+ type EnforcementAction = "revoke_sessions" | "restrict" | "unrestrict" | "fail_onboarding" | "reject_activation" | "none";
28
+ /** An action a provider runs: every EnforcementAction but none. */
29
+ export type ProviderAction = Exclude<EnforcementAction, "none">;
30
+ /** Where the account is in your flow, from getAccountState. */
31
+ export type AccountStateAnswer = {
32
+ state: AccountState;
33
+ /** The provider's user id. Defaults to the account id, as when you assess with the provider's user id. */
34
+ userId?: string;
35
+ /** The riskVersion you last enforced (a result's riskVersion that you stored). An account at or below it is skipped. */
36
+ enforcedRiskVersion?: number;
37
+ };
38
+ /** Runs one action in an identity provider. Build one with identityProvider or customProvider. */
39
+ export interface ActionProvider {
40
+ readonly name: "clerk" | "workos" | "auth0" | "custom";
41
+ /** Take the action and return any other action that had to run with it (Auth0 restricts to end a session). */
42
+ run(action: ProviderAction, userId: string): Promise<ProviderAction[]>;
28
43
  }
29
- export type LateResultOptions = ConstructEventOptions & {
30
- /** Account decision to action. Defaults to DEFAULT_LATE_RESULT_POLICY. */
31
- policy?: LateResultPolicy;
32
- /**
33
- * The provider user id for the assessment's detail.account_id. Defaults to the
34
- * account_id itself, as when you assess with the provider's user id.
35
- * Return null or undefined to take no action.
36
- */
37
- userId?: (accountId: string, event: WebhookEvent) => string | null | undefined | Promise<string | null | undefined>;
44
+ export type FlowPolicy = {
45
+ /** Lift a restriction once the flow's decision is allow again. Off by default. */
46
+ reinstate?: boolean;
38
47
  };
39
- export type LateResult = {
40
- /** The verified event. Answer an endpoint.verification with a WebhookVerificationResponse echoing its challenge. */
41
- event: WebhookEvent;
42
- /**
43
- * The action that ran. "none" when the policy, the event or the user id
44
- * called for nothing. It can be stronger than the policy's action when the
45
- * provider had to fall back: auth0Actions reports "ban" when it blocked the
46
- * user because the tenant's plan cannot end sessions.
47
- */
48
- action: LateResultAction;
49
- /** The provider user id acted on, when an action was taken. */
50
- userId?: string;
48
+ export type EnforcementOptions = ConstructEventOptions & {
49
+ provider: ActionProvider;
50
+ /** The account's state in your flow; null or undefined for an account you do not hold. */
51
+ getAccountState: (account: Account) => AccountStateAnswer | null | undefined | Promise<AccountStateAnswer | null | undefined>;
52
+ flows?: Partial<Record<Flow, FlowPolicy>>;
51
53
  };
52
- /**
53
- * Thrown when the provider's admin API refuses a call. Answer the webhook with a 5xx so NoResponse retries it.
54
- * A 404 is never thrown: the user or session is already gone, so the action is done.
55
- */
54
+ /** Why nothing was done: not account.risk_changed (or a test event), the account was erased, getAccountState knows no such account, or its riskVersion is already enforced. */
55
+ export type EnforcementSkip = "not_actionable" | "account_gone" | "unknown_user" | "already_enforced";
56
+ export type Enforced = {
57
+ flow: Flow;
58
+ action: EnforcementAction;
59
+ status: "applied" | "failed";
60
+ errorCode?: string;
61
+ };
62
+ export type EnforcementResult = {
63
+ /** The verified event, from handleRiskChange. Answer an endpoint.verification with its challenge. */
64
+ event?: WebhookEvent;
65
+ account?: Account;
66
+ state?: AccountState;
67
+ /** The riskVersion acted on. Store it and return it as enforcedRiskVersion. */
68
+ riskVersion?: number;
69
+ skipped?: EnforcementSkip;
70
+ /** What was recorded, in order. */
71
+ enforcements: Enforced[];
72
+ };
73
+ /** The provider refused an action or could not be reached (status 0). Answer the webhook with a 5xx so it is delivered again. */
56
74
  export declare class ProviderActionError extends Error {
57
75
  readonly provider: string;
58
76
  readonly status: number;
59
- /** The provider's error code from the response body, such as Auth0's errorCode "insufficient_scope", when it sent one. */
77
+ /** The provider's error code, such as Auth0's errorCode "insufficient_scope", when it sent one. */
60
78
  readonly code: string | undefined;
61
79
  constructor(provider: string, status: number, message: string, code?: string);
62
80
  }
63
81
  /**
64
- * The action your policy names for a verified event's account.risk.decision. Only a complete or partial
65
- * assessment whose account has a decision can act; a pending one and a test event from
66
- * webhookEndpoints.sendTestEvent never do.
82
+ * Verify an account.risk_changed delivery and enforce the account's current
83
+ * risk. A delivery that fails verification throws WebhookVerificationError
84
+ * before anything is read; any other event, and a test event, does nothing.
67
85
  */
68
- export declare function lateResultAction(event: WebhookEvent, policy?: LateResultPolicy): LateResultAction;
86
+ export declare function handleRiskChange(client: NoResponse, payload: Uint8Array | string, headers: HeaderInput, secrets: WebhookSecrets, options: EnforcementOptions): Promise<EnforcementResult>;
69
87
  /**
70
- * Verify a webhook delivery and apply your policy to it.
71
- *
72
- * `payload`, `headers`, `secrets` and the tolerance options are exactly what
73
- * constructEvent takes; a delivery that fails verification throws
74
- * WebhookVerificationError before any provider call. A test event acts on
75
- * nothing. Revoke and ban are safe to repeat, but deduplicate on
76
- * `result.event.id` and ignore versions older than one you have acted on.
88
+ * Enforce one account as read: the account a handler fetched, or one from
89
+ * accounts.listChanged({ unenforced: true }) when catching up.
77
90
  */
78
- export declare function handleLateResult(payload: Uint8Array | string, headers: HeaderInput, secrets: WebhookSecrets, provider: LateResultProvider, options?: LateResultOptions): Promise<LateResult>;
91
+ export declare function enforceAccount(client: NoResponse, account: Account, options: EnforcementOptions): Promise<EnforcementResult>;
79
92
  type Fetch = typeof fetch;
80
- export type ClerkActionsOptions = {
81
- /** Clerk secret key (sk_...). */
82
- secretKey: string;
83
- /** Default https://api.clerk.com/v1. */
84
- baseUrl?: string;
85
- fetch?: Fetch;
86
- };
87
- /**
88
- * Clerk Backend API. revokeSessions lists the user's active sessions
89
- * (GET /sessions?user_id&status=active) and revokes each
90
- * (POST /sessions/{id}/revoke). ban is POST /users/{id}/ban, which revokes
91
- * every session and blocks sign-in.
92
- */
93
- export declare function clerkActions(options: ClerkActionsOptions): LateResultProvider;
94
- export type WorkOSActionsOptions = {
95
- /** WorkOS API key (sk_...). */
96
- apiKey: string;
97
- /** Default https://api.workos.com. */
98
- baseUrl?: string;
99
- fetch?: Fetch;
100
- };
101
- /**
102
- * WorkOS User Management. revokeSessions pages through
103
- * GET /user_management/users/{id}/sessions and revokes each active one with
104
- * POST /user_management/sessions/revoke. WorkOS has no block or ban, so ban
105
- * revokes the sessions and then deletes the user
106
- * (DELETE /user_management/users/{id}); deletion is permanent.
107
- */
108
- export declare function workosActions(options: WorkOSActionsOptions): LateResultProvider;
109
- export type Auth0ActionsOptions = {
110
- /** Your Auth0 tenant domain, such as example.eu.auth0.com. The Management API is https://{domain}/api/v2. */
93
+ export type IdentityProviderOptions = {
94
+ /** Clerk secret key, WorkOS API key or Auth0 Management API token. */
95
+ token: string;
96
+ /** Auth0 tenant domain, such as example.eu.auth0.com. */
111
97
  domain?: string;
112
- /** The Management API base URL in place of domain. */
98
+ /** The admin API's base URL, in place of the table's (or of domain). */
113
99
  baseUrl?: string;
114
- /**
115
- * A Management API access token with update:users, delete:sessions,
116
- * delete:refresh_tokens, read:device_credentials and delete:device_credentials.
117
- */
118
- token: string;
119
100
  fetch?: Fetch;
120
101
  };
121
- /**
122
- * Auth0 Management API.
123
- *
124
- * revokeSessions deletes every session (DELETE /users/{id}/sessions) and
125
- * every refresh token (DELETE /users/{id}/refresh-tokens). ban first sets
126
- * blocked: true (PATCH /users/{id}), then does the same.
127
- *
128
- * Auth0 offers the sessions and refresh-token endpoints on Enterprise plans
129
- * only; on other plans they answer 403 feature_not_enabled. Then:
130
- * - refresh tokens are deleted one by one through
131
- * /device-credentials (types refresh_token and rotating_refresh_token),
132
- * which every plan has;
133
- * - a login session cannot be ended, so revokeSessions blocks the user
134
- * (PATCH blocked: true) before deleting the refresh tokens, and act
135
- * reports "ban". Unblock the user in the dashboard to undo it.
136
- * Any other refusal, such as 403 insufficient_scope, throws.
137
- *
138
- * A 429 from the Management API is waited out and retried: Retry-After, else
139
- * X-RateLimit-Reset, else 250 ms doubling, at most 4 retries a call and 3 s of
140
- * waiting a revoke or ban. Past that the 429 throws as ProviderActionError.
141
- */
142
- export declare function auth0Actions(options: Auth0ActionsOptions): LateResultActor;
143
- export type LogOnlyActionsOptions = {
144
- /**
145
- * Receives one line per action the handler would take, with the action and
146
- * the user id. Defaults to console.info.
147
- */
148
- log?: (message: string, details: {
149
- action: Exclude<LateResultAction, "none">;
150
- userId: string;
151
- }) => void;
152
- };
153
- /**
154
- * A provider for an app with its own login, or for trying the handler before
155
- * you wire up a real one. revokeSessions and ban each log what they would do
156
- * and call nothing: no request leaves your process. Replace it with your own
157
- * LateResultProvider once you know what revoking and banning mean in your app.
158
- */
159
- export declare function logOnlyActions(options?: LogOnlyActionsOptions): LateResultProvider;
102
+ /** Clerk, WorkOS or Auth0, run from the shared action table. */
103
+ export declare function identityProvider(name: "clerk" | "workos" | "auth0", options: IdentityProviderOptions): ActionProvider;
104
+ /** Your own user store: one function per action you support. An action without one fails. */
105
+ export declare function customProvider(handlers: Partial<Record<ProviderAction, (userId: string) => Promise<void | ProviderAction[]>>>): ActionProvider;
160
106
  export {};
161
107
  //# sourceMappingURL=late-results.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"late-results.d.ts","sourceRoot":"","sources":["../../src/late-results.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"late-results.d.ts","sourceRoot":"","sources":["../../src/late-results.ts"],"names":[],"mappings":"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"}