@atlasauth/backend 0.25.0 → 0.27.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 +42 -1
- package/dist/client/abac.d.ts +454 -0
- package/dist/client/abac.js +123 -0
- package/dist/client/abac.js.map +1 -1
- package/dist/client/access-policies.d.ts +84 -2
- package/dist/client/access-policies.js +8 -0
- package/dist/client/access-policies.js.map +1 -1
- package/dist/client/actions.d.ts +1 -1
- package/dist/client/actions.js.map +1 -1
- package/dist/client/agent-platform.d.ts +294 -0
- package/dist/client/agent-platform.js +132 -0
- package/dist/client/agent-platform.js.map +1 -0
- package/dist/client/analytics-reports.d.ts +1 -1
- package/dist/client/app-catalog.d.ts +60 -1
- package/dist/client/app-catalog.js +32 -2
- package/dist/client/app-catalog.js.map +1 -1
- package/dist/client/authz-decisions.d.ts +154 -0
- package/dist/client/authz-decisions.js +53 -0
- package/dist/client/authz-decisions.js.map +1 -0
- package/dist/client/connections.d.ts +519 -0
- package/dist/client/connections.js +171 -0
- package/dist/client/connections.js.map +1 -0
- package/dist/client/custom-oauth-providers.d.ts +15 -0
- package/dist/client/custom-oauth-providers.js.map +1 -1
- package/dist/client/desktop-mfa.d.ts +141 -0
- package/dist/client/desktop-mfa.js +58 -0
- package/dist/client/desktop-mfa.js.map +1 -0
- package/dist/client/devices.d.ts +130 -0
- package/dist/client/devices.js +54 -0
- package/dist/client/devices.js.map +1 -1
- package/dist/client/email-templates.d.ts +1 -1
- package/dist/client/email-templates.js.map +1 -1
- package/dist/client/fga.d.ts +301 -5
- package/dist/client/fga.js +81 -1
- package/dist/client/fga.js.map +1 -1
- package/dist/client/iga.d.ts +436 -0
- package/dist/client/iga.js +82 -0
- package/dist/client/iga.js.map +1 -0
- package/dist/client/index.d.ts +3767 -2443
- package/dist/client/index.js +51 -0
- package/dist/client/index.js.map +1 -1
- package/dist/client/least-privilege.d.ts +95 -0
- package/dist/client/least-privilege.js +28 -0
- package/dist/client/least-privilege.js.map +1 -0
- package/dist/client/log-streams.d.ts +1 -1
- package/dist/client/managed-grants.d.ts +52 -0
- package/dist/client/managed-grants.js +28 -0
- package/dist/client/managed-grants.js.map +1 -0
- package/dist/client/mcp-gateways.d.ts +220 -2
- package/dist/client/mcp-gateways.js +74 -0
- package/dist/client/mcp-gateways.js.map +1 -1
- package/dist/client/messaging.d.ts +11 -2
- package/dist/client/messaging.js.map +1 -1
- package/dist/client/oauth-clients.d.ts +4 -0
- package/dist/client/oauth-clients.js.map +1 -1
- package/dist/client/oauth-protocols.d.ts +116 -0
- package/dist/client/oauth-protocols.js +54 -0
- package/dist/client/oauth-protocols.js.map +1 -0
- package/dist/client/oauth-providers.d.ts +4 -4
- package/dist/client/openfga.d.ts +90 -3
- package/dist/client/openfga.js +27 -1
- package/dist/client/openfga.js.map +1 -1
- package/dist/client/org-ldap-connections.d.ts +3 -0
- package/dist/client/org-ldap-connections.js.map +1 -1
- package/dist/client/organizations.d.ts +14 -0
- package/dist/client/organizations.js.map +1 -1
- package/dist/client/policy-bundles.d.ts +105 -0
- package/dist/client/policy-bundles.js +38 -0
- package/dist/client/policy-bundles.js.map +1 -0
- package/dist/client/resources.d.ts +1 -0
- package/dist/client/resources.js.map +1 -1
- package/dist/client/risk-containment.d.ts +244 -0
- package/dist/client/risk-containment.js +120 -0
- package/dist/client/risk-containment.js.map +1 -0
- package/dist/client/saml-idp.d.ts +183 -0
- package/dist/client/saml-idp.js +71 -0
- package/dist/client/saml-idp.js.map +1 -0
- package/dist/client/scim-provisioning.d.ts +100 -4
- package/dist/client/scim-provisioning.js +30 -0
- package/dist/client/scim-provisioning.js.map +1 -1
- package/dist/client/scim-tokens.d.ts +34 -0
- package/dist/client/scim-tokens.js +17 -0
- package/dist/client/scim-tokens.js.map +1 -1
- package/dist/client/service-connectors.d.ts +1 -1
- package/dist/client/ssf.d.ts +31 -1
- package/dist/client/ssf.js +17 -0
- package/dist/client/ssf.js.map +1 -1
- package/dist/client/users.d.ts +9 -0
- package/dist/client/users.js +9 -0
- package/dist/client/users.js.map +1 -1
- package/dist/client/vault.d.ts +54 -0
- package/dist/client/vault.js +30 -0
- package/dist/client/vault.js.map +1 -1
- package/dist/client/vc.d.ts +62 -2
- package/dist/client/vc.js +15 -0
- package/dist/client/vc.js.map +1 -1
- package/dist/client/workflows.d.ts +182 -3
- package/dist/client/workflows.js +34 -0
- package/dist/client/workflows.js.map +1 -1
- package/dist/index.d.ts +5 -2
- package/dist/index.js +6 -1
- package/dist/index.js.map +1 -1
- package/dist/oauth-resource.d.ts +30 -3
- package/dist/oauth-resource.js +43 -2
- package/dist/oauth-resource.js.map +1 -1
- package/dist/policy-bundle.d.ts +110 -0
- package/dist/policy-bundle.js +289 -0
- package/dist/policy-bundle.js.map +1 -0
- package/dist/txn-token.d.ts +36 -0
- package/dist/txn-token.js +30 -0
- package/dist/txn-token.js.map +1 -0
- package/dist/uma.d.ts +77 -0
- package/dist/uma.js +95 -0
- package/dist/uma.js.map +1 -0
- package/package.json +2 -2
package/dist/client/vc.d.ts
CHANGED
|
@@ -18,6 +18,8 @@ export interface VcCredentialType {
|
|
|
18
18
|
namespace: string | null;
|
|
19
19
|
/** mdoc: PEM IACA roots a presentation must chain to. */
|
|
20
20
|
iaca_roots: string[];
|
|
21
|
+
/** mdoc: issuer revocation checks (certificate CRL / OCSP, MSO status list). */
|
|
22
|
+
revocation_policy: VcRevocationPolicy;
|
|
21
23
|
/** mdoc: PEM Document Signer chain published as x5chain. */
|
|
22
24
|
signer_chain: string[];
|
|
23
25
|
name: string;
|
|
@@ -27,6 +29,7 @@ export interface VcCredentialType {
|
|
|
27
29
|
created_at: number;
|
|
28
30
|
}
|
|
29
31
|
export type VcFormat = 'dc+sd-jwt' | 'mso_mdoc';
|
|
32
|
+
export type VcRevocationPolicy = 'off' | 'best_effort' | 'required';
|
|
30
33
|
export interface CreateVcCredentialTypeBody {
|
|
31
34
|
/** The vct, or the docType for mso_mdoc (for example org.iso.18013.5.1.mDL). */
|
|
32
35
|
vct: string;
|
|
@@ -35,6 +38,8 @@ export interface CreateVcCredentialTypeBody {
|
|
|
35
38
|
namespace?: string;
|
|
36
39
|
/** mso_mdoc: PEM IACA roots (ISO 18013-5 Annex B); with roots set only a certificate chain is accepted. */
|
|
37
40
|
iaca_roots?: string[];
|
|
41
|
+
/** mso_mdoc: off, best_effort (default) or required. */
|
|
42
|
+
revocation_policy?: VcRevocationPolicy;
|
|
38
43
|
/** mso_mdoc: PEM Document Signer certificate (then intermediates) for the instance's mdoc signing key. */
|
|
39
44
|
signer_chain?: string[];
|
|
40
45
|
name: string;
|
|
@@ -69,6 +74,7 @@ export interface VcPresentationRequest {
|
|
|
69
74
|
vct: string;
|
|
70
75
|
format: VcFormat;
|
|
71
76
|
iaca_roots: string[];
|
|
77
|
+
revocation_policy: VcRevocationPolicy | null;
|
|
72
78
|
claims: string[];
|
|
73
79
|
status: 'pending' | 'verified' | 'failed';
|
|
74
80
|
result: {
|
|
@@ -81,8 +87,33 @@ export interface VcPresentationRequest {
|
|
|
81
87
|
user_id: string | null;
|
|
82
88
|
expires_at: number;
|
|
83
89
|
request_uri: string;
|
|
84
|
-
/** The openid4vp:// link for a QR code. */
|
|
85
|
-
authorization_request_uri: string;
|
|
90
|
+
/** The openid4vp:// link for a QR code; null for a Digital Credentials API request (use dcApiRequest). */
|
|
91
|
+
authorization_request_uri: string | null;
|
|
92
|
+
client_id_prefix?: VcClientIdPrefix;
|
|
93
|
+
response_mode?: VcResponseMode;
|
|
94
|
+
dcql_query?: Record<string, unknown> | null;
|
|
95
|
+
expected_origins?: string[];
|
|
96
|
+
}
|
|
97
|
+
export type VcClientIdPrefix = 'redirect_uri' | 'x509_san_dns' | 'x509_hash';
|
|
98
|
+
export type VcResponseMode = 'direct_post' | 'direct_post.jwt' | 'dc_api' | 'dc_api.jwt';
|
|
99
|
+
/** A credential issuance waiting for an operator decision (OpenID4VCI deferred issuance). */
|
|
100
|
+
export interface VcDeferredIssuance {
|
|
101
|
+
object: 'vc_deferred_issuance';
|
|
102
|
+
id: string;
|
|
103
|
+
credential_type_id: string;
|
|
104
|
+
user_id: string;
|
|
105
|
+
credentials_requested: number;
|
|
106
|
+
status: 'pending' | 'approved' | 'denied' | 'issued';
|
|
107
|
+
reason: string | null;
|
|
108
|
+
expires_at: number;
|
|
109
|
+
created_at: number;
|
|
110
|
+
}
|
|
111
|
+
/** What `navigator.credentials.get({ digital: ... })` takes for a Digital Credentials API request. */
|
|
112
|
+
export interface VcDcApiRequest {
|
|
113
|
+
object: 'vc_dc_api_request';
|
|
114
|
+
protocol: 'openid4vp-v1-signed' | 'openid4vp-v1-unsigned';
|
|
115
|
+
data: Record<string, unknown>;
|
|
116
|
+
response_endpoint: string;
|
|
86
117
|
}
|
|
87
118
|
/** Issue verifiable credentials to wallets (OpenID4VCI) and verify presentations (OpenID4VP), SD-JWT VC. */
|
|
88
119
|
export declare function vcResource(request: RequestFn): {
|
|
@@ -99,7 +130,13 @@ export declare function vcResource(request: RequestFn): {
|
|
|
99
130
|
createOffer(body: {
|
|
100
131
|
credential_type_id: string;
|
|
101
132
|
user_id: string;
|
|
133
|
+
/** pre-authorized_code (default) or authorization_code (the wallet signs in first). */
|
|
134
|
+
grant?: "pre-authorized_code" | "authorization_code";
|
|
135
|
+
/** Transaction code the user types in the wallet (pre-authorized_code only). */
|
|
102
136
|
tx_code?: string;
|
|
137
|
+
tx_code_description?: string;
|
|
138
|
+
/** Hand the wallet a credential_offer_uri instead of the offer itself. */
|
|
139
|
+
by_reference?: boolean;
|
|
103
140
|
expires_in_seconds?: number;
|
|
104
141
|
}): Promise<VcOffer>;
|
|
105
142
|
credentials: {
|
|
@@ -114,6 +151,8 @@ export declare function vcResource(request: RequestFn): {
|
|
|
114
151
|
format?: VcFormat;
|
|
115
152
|
/** mso_mdoc: PEM IACA roots for this request. */
|
|
116
153
|
iaca_roots?: string[];
|
|
154
|
+
/** mso_mdoc: overrides the credential type's revocation policy. */
|
|
155
|
+
revocation_policy?: VcRevocationPolicy;
|
|
117
156
|
claims?: string[];
|
|
118
157
|
trusted_issuers?: Array<{
|
|
119
158
|
issuer: string;
|
|
@@ -121,8 +160,29 @@ export declare function vcResource(request: RequestFn): {
|
|
|
121
160
|
keys: Record<string, unknown>[];
|
|
122
161
|
};
|
|
123
162
|
}>;
|
|
163
|
+
/** A DCQL query; replaces vct and claims. */
|
|
164
|
+
dcql_query?: Record<string, unknown>;
|
|
165
|
+
client_id_prefix?: VcClientIdPrefix;
|
|
166
|
+
/** PEM certificate chain for the x509 client id prefixes; must match the instance ES256 key. */
|
|
167
|
+
verifier_chain?: string[];
|
|
168
|
+
response_mode?: VcResponseMode;
|
|
169
|
+
/** Web origins allowed to post a Digital Credentials API response. */
|
|
170
|
+
expected_origins?: string[];
|
|
124
171
|
expires_in_seconds?: number;
|
|
125
172
|
}): Promise<VcPresentationRequest>;
|
|
126
173
|
get(id: string): Promise<VcPresentationRequest>;
|
|
174
|
+
/** The request for the Digital Credentials API, for a request created with a dc_api response mode. */
|
|
175
|
+
dcApiRequest(id: string): Promise<VcDcApiRequest>;
|
|
176
|
+
};
|
|
177
|
+
deferred: {
|
|
178
|
+
list(query?: {
|
|
179
|
+
status?: VcDeferredIssuance["status"];
|
|
180
|
+
}): Promise<ListPage<VcDeferredIssuance>>;
|
|
181
|
+
approve(id: string, body?: {
|
|
182
|
+
reason?: string;
|
|
183
|
+
}): Promise<VcDeferredIssuance>;
|
|
184
|
+
deny(id: string, body?: {
|
|
185
|
+
reason?: string;
|
|
186
|
+
}): Promise<VcDeferredIssuance>;
|
|
127
187
|
};
|
|
128
188
|
};
|
package/dist/client/vc.js
CHANGED
|
@@ -37,6 +37,21 @@ function vcResource(request) {
|
|
|
37
37
|
get(id) {
|
|
38
38
|
return request({ method: 'GET', path: `/v1/vc/presentation_requests/${(0, request_1.enc)(id)}` });
|
|
39
39
|
},
|
|
40
|
+
/** The request for the Digital Credentials API, for a request created with a dc_api response mode. */
|
|
41
|
+
dcApiRequest(id) {
|
|
42
|
+
return request({ method: 'GET', path: `/v1/vc/presentation_requests/${(0, request_1.enc)(id)}/dc_api_request` });
|
|
43
|
+
},
|
|
44
|
+
},
|
|
45
|
+
deferred: {
|
|
46
|
+
list(query = {}) {
|
|
47
|
+
return request({ method: 'GET', path: '/v1/vc/deferred', query });
|
|
48
|
+
},
|
|
49
|
+
approve(id, body = {}) {
|
|
50
|
+
return request({ method: 'POST', path: `/v1/vc/deferred/${(0, request_1.enc)(id)}/approve`, body });
|
|
51
|
+
},
|
|
52
|
+
deny(id, body = {}) {
|
|
53
|
+
return request({ method: 'POST', path: `/v1/vc/deferred/${(0, request_1.enc)(id)}/deny`, body });
|
|
54
|
+
},
|
|
40
55
|
},
|
|
41
56
|
};
|
|
42
57
|
}
|
package/dist/client/vc.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"vc.js","sourceRoot":"","sources":["../../src/client/vc.ts"],"names":[],"mappings":";;
|
|
1
|
+
{"version":3,"file":"vc.js","sourceRoot":"","sources":["../../src/client/vc.ts"],"names":[],"mappings":";;AA2HA,gCAgFC;AA3MD,uCAAgD;AA0HhD,4GAA4G;AAC5G,SAAgB,UAAU,CAAC,OAAkB;IAC3C,OAAO;QACL,eAAe,EAAE;YACf,IAAI;gBACF,OAAO,OAAO,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,yBAAyB,EAAE,CAAC,CAAC;YACrE,CAAC;YACD,MAAM,CAAC,IAAgC;gBACrC,OAAO,OAAO,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,yBAAyB,EAAE,IAAI,EAAE,CAAC,CAAC;YAC5E,CAAC;YACD,GAAG,CAAC,EAAU;gBACZ,OAAO,OAAO,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,2BAA2B,IAAA,aAAG,EAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC;YAChF,CAAC;YACD,MAAM,CAAC,EAAU;gBACf,OAAO,OAAO,CAAC,EAAE,MAAM,EAAE,QAAQ,EAAE,IAAI,EAAE,2BAA2B,IAAA,aAAG,EAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC;YACnF,CAAC;SACF;QACD,WAAW,CAAC,IAWX;YACC,OAAO,OAAO,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,eAAe,EAAE,IAAI,EAAE,CAAC,CAAC;QAClE,CAAC;QACD,WAAW,EAAE;YACX,IAAI,CAAC,QAA8B,EAAE;gBACnC,OAAO,OAAO,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,oBAAoB,EAAE,KAAK,EAAE,EAAE,GAAG,KAAK,EAAE,EAAE,CAAC,CAAC;YACrF,CAAC;YACD,MAAM,CAAC,EAAU;gBACf,OAAO,OAAO,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,sBAAsB,IAAA,aAAG,EAAC,EAAE,CAAC,SAAS,EAAE,CAAC,CAAC;YACnF,CAAC;SACF;QACD,oBAAoB,EAAE;YACpB,MAAM,CAAC,IAkBN;gBACC,OAAO,OAAO,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,8BAA8B,EAAE,IAAI,EAAE,CAAC,CAAC;YACjF,CAAC;YACD,GAAG,CAAC,EAAU;gBACZ,OAAO,OAAO,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,gCAAgC,IAAA,aAAG,EAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC;YACrF,CAAC;YACD,sGAAsG;YACtG,YAAY,CAAC,EAAU;gBACrB,OAAO,OAAO,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,gCAAgC,IAAA,aAAG,EAAC,EAAE,CAAC,iBAAiB,EAAE,CAAC,CAAC;YACpG,CAAC;SACF;QACD,QAAQ,EAAE;YACR,IAAI,CAAC,QAAmD,EAAE;gBACxD,OAAO,OAAO,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,iBAAiB,EAAE,KAAK,EAAE,CAAC,CAAC;YACpE,CAAC;YACD,OAAO,CAAC,EAAU,EAAE,OAA4B,EAAE;gBAChD,OAAO,OAAO,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,mBAAmB,IAAA,aAAG,EAAC,EAAE,CAAC,UAAU,EAAE,IAAI,EAAE,CAAC,CAAC;YACvF,CAAC;YACD,IAAI,CAAC,EAAU,EAAE,OAA4B,EAAE;gBAC7C,OAAO,OAAO,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,mBAAmB,IAAA,aAAG,EAAC,EAAE,CAAC,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC;YACpF,CAAC;SACF;KACF,CAAC;AACJ,CAAC"}
|
|
@@ -20,9 +20,98 @@ export type WorkflowTrigger = {
|
|
|
20
20
|
} | {
|
|
21
21
|
type: 'webhook_event';
|
|
22
22
|
event_type: string;
|
|
23
|
+
filter?: string;
|
|
24
|
+
}
|
|
25
|
+
/** Started by `invoke` with an input object. */
|
|
26
|
+
| {
|
|
27
|
+
type: 'manual';
|
|
23
28
|
};
|
|
29
|
+
/** Fields every step may carry. */
|
|
30
|
+
export interface WorkflowStepBase {
|
|
31
|
+
/** Names the output: `steps.<id>.output` in later expressions. */
|
|
32
|
+
id?: string;
|
|
33
|
+
retry?: {
|
|
34
|
+
max: number;
|
|
35
|
+
backoff_seconds?: number;
|
|
36
|
+
};
|
|
37
|
+
on_error?: 'fail' | 'continue';
|
|
38
|
+
}
|
|
39
|
+
/** Control flow and integration steps. Expressions: `{{ user.email }}`, `event.*`, `input.*`, `vars.*`, `steps.<id>.output`. */
|
|
40
|
+
export type WorkflowGraphStep = WorkflowStepBase & ({
|
|
41
|
+
type: 'if';
|
|
42
|
+
condition: string;
|
|
43
|
+
then: WorkflowStep[];
|
|
44
|
+
else?: WorkflowStep[];
|
|
45
|
+
} | {
|
|
46
|
+
type: 'switch';
|
|
47
|
+
value: string;
|
|
48
|
+
cases: Array<{
|
|
49
|
+
equals: string | number | boolean;
|
|
50
|
+
steps: WorkflowStep[];
|
|
51
|
+
}>;
|
|
52
|
+
default?: WorkflowStep[];
|
|
53
|
+
} | {
|
|
54
|
+
type: 'for_each';
|
|
55
|
+
items: string;
|
|
56
|
+
as?: string;
|
|
57
|
+
steps: WorkflowStep[];
|
|
58
|
+
max_iterations?: number;
|
|
59
|
+
} | {
|
|
60
|
+
type: 'wait';
|
|
61
|
+
seconds?: number;
|
|
62
|
+
until?: string;
|
|
63
|
+
} | {
|
|
64
|
+
type: 'set_variable';
|
|
65
|
+
name: string;
|
|
66
|
+
value: unknown;
|
|
67
|
+
} | {
|
|
68
|
+
type: 'http_request';
|
|
69
|
+
method?: 'GET' | 'POST';
|
|
70
|
+
url: string;
|
|
71
|
+
headers?: Record<string, string>;
|
|
72
|
+
secret_headers?: Record<string, string>;
|
|
73
|
+
body?: unknown;
|
|
74
|
+
} | {
|
|
75
|
+
type: 'call_connector';
|
|
76
|
+
connector: string;
|
|
77
|
+
operation: string;
|
|
78
|
+
input?: Record<string, unknown>;
|
|
79
|
+
} | {
|
|
80
|
+
type: 'create_ticket';
|
|
81
|
+
connector: string;
|
|
82
|
+
summary: string;
|
|
83
|
+
description?: string;
|
|
84
|
+
fields?: Record<string, unknown>;
|
|
85
|
+
} | {
|
|
86
|
+
type: 'create_iga_request';
|
|
87
|
+
entitlement: string;
|
|
88
|
+
justification?: string;
|
|
89
|
+
duration_seconds?: number;
|
|
90
|
+
} | {
|
|
91
|
+
type: 'start_campaign';
|
|
92
|
+
campaign_id: string;
|
|
93
|
+
} | {
|
|
94
|
+
type: 'revoke_grant';
|
|
95
|
+
entitlement: string;
|
|
96
|
+
reason?: string;
|
|
97
|
+
} | {
|
|
98
|
+
type: 'approval';
|
|
99
|
+
approvers: {
|
|
100
|
+
type: 'users' | 'manager' | 'group';
|
|
101
|
+
ids?: string[];
|
|
102
|
+
};
|
|
103
|
+
message: string;
|
|
104
|
+
timeout_seconds?: number;
|
|
105
|
+
on_deny?: 'fail' | 'continue';
|
|
106
|
+
on_timeout?: 'fail' | 'continue' | 'approve';
|
|
107
|
+
} | {
|
|
108
|
+
type: 'kv';
|
|
109
|
+
op: 'get' | 'set' | 'delete' | 'incr';
|
|
110
|
+
key: string;
|
|
111
|
+
value?: unknown;
|
|
112
|
+
});
|
|
24
113
|
/** One step. A step that acts on an organization takes `organization_id`, or uses the membership's own for `membership_age`. */
|
|
25
|
-
export type WorkflowStep = {
|
|
114
|
+
export type WorkflowStep = WorkflowGraphStep | {
|
|
26
115
|
type: 'notify';
|
|
27
116
|
subject: string;
|
|
28
117
|
body: string;
|
|
@@ -61,6 +150,42 @@ export type WorkflowStep = {
|
|
|
61
150
|
type: 'call_action';
|
|
62
151
|
action_id: string;
|
|
63
152
|
};
|
|
153
|
+
export interface WorkflowTriggerInfo {
|
|
154
|
+
object: 'workflow_trigger';
|
|
155
|
+
name: string;
|
|
156
|
+
description: string;
|
|
157
|
+
subject: 'user' | 'none';
|
|
158
|
+
payload: string[];
|
|
159
|
+
emitter: string;
|
|
160
|
+
}
|
|
161
|
+
export interface WorkflowTemplate {
|
|
162
|
+
object: 'workflow_template';
|
|
163
|
+
key: string;
|
|
164
|
+
name: string;
|
|
165
|
+
description: string;
|
|
166
|
+
parameters: Array<{
|
|
167
|
+
key: string;
|
|
168
|
+
label: string;
|
|
169
|
+
type: 'string' | 'number';
|
|
170
|
+
default?: string | number;
|
|
171
|
+
}>;
|
|
172
|
+
trigger: WorkflowTrigger;
|
|
173
|
+
steps: WorkflowStep[];
|
|
174
|
+
}
|
|
175
|
+
export interface WorkflowApproval {
|
|
176
|
+
object: 'workflow_approval';
|
|
177
|
+
id: string;
|
|
178
|
+
workflow_id: string;
|
|
179
|
+
run_id: string;
|
|
180
|
+
approver_user_ids: string[];
|
|
181
|
+
message: string;
|
|
182
|
+
status: 'pending' | 'approved' | 'denied' | 'timed_out';
|
|
183
|
+
decided_by: string | null;
|
|
184
|
+
comment: string | null;
|
|
185
|
+
expires_at: number | null;
|
|
186
|
+
decided_at: number | null;
|
|
187
|
+
created_at: number;
|
|
188
|
+
}
|
|
64
189
|
export interface Workflow {
|
|
65
190
|
object: 'workflow';
|
|
66
191
|
id: string;
|
|
@@ -77,8 +202,13 @@ export interface Workflow {
|
|
|
77
202
|
export interface WorkflowRunStep {
|
|
78
203
|
index: number;
|
|
79
204
|
type: string;
|
|
80
|
-
status: 'ok' | 'failed' | 'would_run' | 'skipped';
|
|
205
|
+
status: 'ok' | 'failed' | 'would_run' | 'skipped' | 'retrying' | 'waiting';
|
|
206
|
+
/** Position in the step tree, e.g. `2.then.0`. */
|
|
207
|
+
path?: string;
|
|
208
|
+
attempt?: number;
|
|
209
|
+
at?: number;
|
|
81
210
|
detail?: string;
|
|
211
|
+
output?: unknown;
|
|
82
212
|
}
|
|
83
213
|
export interface WorkflowRun {
|
|
84
214
|
object: 'workflow_run';
|
|
@@ -87,7 +217,11 @@ export interface WorkflowRun {
|
|
|
87
217
|
subject: string;
|
|
88
218
|
user_id: string | null;
|
|
89
219
|
dry_run: boolean;
|
|
90
|
-
status: 'running' | 'succeeded' | 'failed';
|
|
220
|
+
status: 'running' | 'waiting' | 'succeeded' | 'failed';
|
|
221
|
+
/** While waiting on a timer or retry: when the run continues (Unix ms). */
|
|
222
|
+
resume_at?: number | null;
|
|
223
|
+
/** While waiting on people: `approval:<id>`. */
|
|
224
|
+
waiting_on?: string | null;
|
|
91
225
|
steps: WorkflowRunStep[];
|
|
92
226
|
error: string | null;
|
|
93
227
|
started_at: number;
|
|
@@ -128,4 +262,49 @@ export declare function workflowsResource(request: RequestFn): {
|
|
|
128
262
|
}): Promise<ListPage<WorkflowRun> & {
|
|
129
263
|
next_cursor: string | null;
|
|
130
264
|
}>;
|
|
265
|
+
/** One run with its per-step log. */
|
|
266
|
+
getRun(id: string, runId: string): Promise<WorkflowRun>;
|
|
267
|
+
/** Start a `manual` workflow with an input object. */
|
|
268
|
+
invoke(id: string, body?: {
|
|
269
|
+
user_id?: string;
|
|
270
|
+
organization_id?: string;
|
|
271
|
+
input?: Record<string, unknown>;
|
|
272
|
+
}, idempotencyKey?: string): Promise<WorkflowRun>;
|
|
273
|
+
/** Retry a failed run from the step that failed. */
|
|
274
|
+
resume(id: string, runId: string): Promise<WorkflowRun>;
|
|
275
|
+
/** The events a workflow can start on. */
|
|
276
|
+
triggers(): Promise<ListPage<WorkflowTriggerInfo>>;
|
|
277
|
+
templates(): Promise<ListPage<WorkflowTemplate>>;
|
|
278
|
+
createFromTemplate(body: {
|
|
279
|
+
template: string;
|
|
280
|
+
parameters?: Record<string, unknown>;
|
|
281
|
+
name?: string;
|
|
282
|
+
enabled?: boolean;
|
|
283
|
+
}, idempotencyKey?: string): Promise<Workflow>;
|
|
284
|
+
approvals(query?: {
|
|
285
|
+
status?: WorkflowApproval["status"];
|
|
286
|
+
}): Promise<ListPage<WorkflowApproval>>;
|
|
287
|
+
decideApproval(id: string, body: {
|
|
288
|
+
decision: "approve" | "deny";
|
|
289
|
+
comment?: string;
|
|
290
|
+
user_id?: string;
|
|
291
|
+
}, idempotencyKey?: string): Promise<WorkflowApproval>;
|
|
292
|
+
/** The workflow's key-value table. */
|
|
293
|
+
kv: {
|
|
294
|
+
list: (id: string) => Promise<ListPage<{
|
|
295
|
+
object: "workflow_kv";
|
|
296
|
+
key: string;
|
|
297
|
+
value: unknown;
|
|
298
|
+
}>>;
|
|
299
|
+
set: (id: string, key: string, value: unknown) => Promise<{
|
|
300
|
+
object: "workflow_kv";
|
|
301
|
+
key: string;
|
|
302
|
+
value: unknown;
|
|
303
|
+
}>;
|
|
304
|
+
delete: (id: string, key: string) => Promise<{
|
|
305
|
+
object: "workflow_kv";
|
|
306
|
+
key: string;
|
|
307
|
+
deleted: true;
|
|
308
|
+
}>;
|
|
309
|
+
};
|
|
131
310
|
};
|
package/dist/client/workflows.js
CHANGED
|
@@ -31,6 +31,40 @@ function workflowsResource(request) {
|
|
|
31
31
|
runs(id, query = {}) {
|
|
32
32
|
return request({ method: 'GET', path: `/v1/workflows/${(0, request_1.enc)(id)}/runs`, query });
|
|
33
33
|
},
|
|
34
|
+
/** One run with its per-step log. */
|
|
35
|
+
getRun(id, runId) {
|
|
36
|
+
return request({ method: 'GET', path: `/v1/workflows/${(0, request_1.enc)(id)}/runs/${(0, request_1.enc)(runId)}` });
|
|
37
|
+
},
|
|
38
|
+
/** Start a `manual` workflow with an input object. */
|
|
39
|
+
invoke(id, body = {}, idempotencyKey) {
|
|
40
|
+
return request({ method: 'POST', path: `/v1/workflows/${(0, request_1.enc)(id)}/invoke`, body, idempotencyKey });
|
|
41
|
+
},
|
|
42
|
+
/** Retry a failed run from the step that failed. */
|
|
43
|
+
resume(id, runId) {
|
|
44
|
+
return request({ method: 'POST', path: `/v1/workflows/${(0, request_1.enc)(id)}/runs/${(0, request_1.enc)(runId)}/resume`, body: {} });
|
|
45
|
+
},
|
|
46
|
+
/** The events a workflow can start on. */
|
|
47
|
+
triggers() {
|
|
48
|
+
return request({ method: 'GET', path: '/v1/workflow_triggers' });
|
|
49
|
+
},
|
|
50
|
+
templates() {
|
|
51
|
+
return request({ method: 'GET', path: '/v1/workflow_templates' });
|
|
52
|
+
},
|
|
53
|
+
createFromTemplate(body, idempotencyKey) {
|
|
54
|
+
return request({ method: 'POST', path: '/v1/workflows/from_template', body, idempotencyKey });
|
|
55
|
+
},
|
|
56
|
+
approvals(query = {}) {
|
|
57
|
+
return request({ method: 'GET', path: '/v1/workflow_approvals', query });
|
|
58
|
+
},
|
|
59
|
+
decideApproval(id, body, idempotencyKey) {
|
|
60
|
+
return request({ method: 'POST', path: `/v1/workflow_approvals/${(0, request_1.enc)(id)}/decide`, body, idempotencyKey });
|
|
61
|
+
},
|
|
62
|
+
/** The workflow's key-value table. */
|
|
63
|
+
kv: {
|
|
64
|
+
list: (id) => request({ method: 'GET', path: `/v1/workflows/${(0, request_1.enc)(id)}/kv` }),
|
|
65
|
+
set: (id, key, value) => request({ method: 'PUT', path: `/v1/workflows/${(0, request_1.enc)(id)}/kv/${(0, request_1.enc)(key)}`, body: { value } }),
|
|
66
|
+
delete: (id, key) => request({ method: 'DELETE', path: `/v1/workflows/${(0, request_1.enc)(id)}/kv/${(0, request_1.enc)(key)}` }),
|
|
67
|
+
},
|
|
34
68
|
};
|
|
35
69
|
}
|
|
36
70
|
//# sourceMappingURL=workflows.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"workflows.js","sourceRoot":"","sources":["../../src/client/workflows.ts"],"names":[],"mappings":";;
|
|
1
|
+
{"version":3,"file":"workflows.js","sourceRoot":"","sources":["../../src/client/workflows.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
CHANGED
|
@@ -3,6 +3,7 @@ export { DiscoveryError, JwksDiscovery, discoveryUrlFor, instanceIdFromPublishab
|
|
|
3
3
|
export * from './verify';
|
|
4
4
|
export * from './request-auth';
|
|
5
5
|
export * from './recent-auth';
|
|
6
|
+
export * from './txn-token';
|
|
6
7
|
export * from './access-control';
|
|
7
8
|
export * from './handshake';
|
|
8
9
|
export * from './better-auth';
|
|
@@ -16,6 +17,7 @@ export type { LegacyIssuer, LegacyIssuerKind } from './legacy-issuers';
|
|
|
16
17
|
export * from './legacy-issuer-presets';
|
|
17
18
|
export * from './framework-sessions';
|
|
18
19
|
export * from './framework-bridge';
|
|
20
|
+
export * from './policy-bundle';
|
|
19
21
|
export { BACKCHANNEL_LOGOUT_EVENT, LOGOUT_TOKEN_CLOCK_SKEW_SECONDS, LOGOUT_TOKEN_MAX_AGE_SECONDS, LogoutTokenVerifier, memoryLogoutReplayStore, verifyLogoutToken, } from './logout-token';
|
|
20
22
|
export type { LogoutReplayStore, LogoutTokenCheckOptions, LogoutTokenClaims, LogoutTokenResult, LogoutTokenVerifierOptions, } from './logout-token';
|
|
21
23
|
export { expressBackchannelLogout, fastifyBackchannelLogout, fastifyBackchannelLogoutPlugin, fetchBackchannelLogout, handleBackchannelLogout, nextBackchannelLogout, readLogoutToken, } from './backchannel-handlers';
|
|
@@ -37,6 +39,7 @@ export { verifyPCActn } from './pca/verify';
|
|
|
37
39
|
export type { PcaVerdict, PcaContext, VerifyPCActnOptions } from './pca/verify';
|
|
38
40
|
export { requirePCA, defaultExtract, memoryPcaStore } from './pca/require-pca';
|
|
39
41
|
export type { RequirePcaOptions, PcaGuardResult, PcaRequestLike, PcaStateStore } from './pca/require-pca';
|
|
40
|
-
export { ACCESS_TOKEN_CLOCK_SKEW_SECONDS, DPOP_PROOF_MAX_AGE_SECONDS, buildWwwAuthenticate, createAccessTokenVerifier, createIntrospector, hmacDpopNonceSource, memoryDpopNonceSource, memoryDpopReplayStore, protectedResourceMetadata, protectedResourceMetadataPath, verifyAccessToken, } from './oauth-resource';
|
|
41
|
-
export type { AccessTokenClaims, AccessTokenErrorCode, AccessTokenResult, AccessTokenVerifierOptions, DpopNonceSource, DpopReplayStore, IntrospectionOptions, ResourceRequestLike, } from './oauth-resource';
|
|
42
|
+
export { ACCESS_TOKEN_CLOCK_SKEW_SECONDS, DPOP_PROOF_MAX_AGE_SECONDS, buildWwwAuthenticate, createAccessTokenVerifier, createIntrospector, hmacDpopNonceSource, memoryDpopNonceSource, memoryDpopReplayStore, protectedResourceMetadata, protectedResourceMetadataPath, requireAcr, verifyAccessToken, } from './oauth-resource';
|
|
43
|
+
export type { AccessTokenCallOptions, AccessTokenClaims, AccessTokenErrorCode, AccessTokenResult, AccessTokenVerifierOptions, DpopNonceSource, DpopReplayStore, IntrospectionOptions, ResourceRequestLike, } from './oauth-resource';
|
|
42
44
|
export * from './legacy-verify';
|
|
45
|
+
export * from './uma';
|
package/dist/index.js
CHANGED
|
@@ -15,7 +15,7 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
|
15
15
|
};
|
|
16
16
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
17
17
|
exports.memoryPcaStore = exports.defaultExtract = exports.requirePCA = exports.verifyPCActn = exports.REFERALLI_API_VERSION = exports.referralEmailHash = exports.referalliSignatureV2 = exports.referalliSignature = exports.signReferralUpdatedEvent = exports.signReferalliCall = exports.signAtlasReferralCall = exports.testTenantClaims = exports.TEST_TOKEN_TAMPERS = exports.createTestIssuer = exports.createAtlasClient = exports.resetOidcCaches = exports.oidcSsoOf = exports.oidcOrganizationsOf = exports.oidcOrganizationOf = 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.readLogoutToken = exports.nextBackchannelLogout = exports.handleBackchannelLogout = exports.fetchBackchannelLogout = exports.fastifyBackchannelLogoutPlugin = exports.fastifyBackchannelLogout = exports.expressBackchannelLogout = exports.verifyLogoutToken = exports.memoryLogoutReplayStore = exports.LogoutTokenVerifier = exports.LOGOUT_TOKEN_MAX_AGE_SECONDS = exports.LOGOUT_TOKEN_CLOCK_SKEW_SECONDS = exports.BACKCHANNEL_LOGOUT_EVENT = exports.peekIssuer = exports.BETTER_AUTH_JWT_ALGS = exports.workosSessionTokenExtractor = exports.magicDidTokenExtractor = exports.looksLikeMagicDidToken = exports.instanceIdFromPublishableKey = exports.discoveryUrlFor = exports.JwksDiscovery = exports.DiscoveryError = void 0;
|
|
18
|
-
exports.verifyAccessToken = exports.protectedResourceMetadataPath = exports.protectedResourceMetadata = exports.memoryDpopReplayStore = exports.memoryDpopNonceSource = exports.hmacDpopNonceSource = exports.createIntrospector = exports.createAccessTokenVerifier = exports.buildWwwAuthenticate = exports.DPOP_PROOF_MAX_AGE_SECONDS = exports.ACCESS_TOKEN_CLOCK_SKEW_SECONDS = void 0;
|
|
18
|
+
exports.verifyAccessToken = exports.requireAcr = exports.protectedResourceMetadataPath = exports.protectedResourceMetadata = exports.memoryDpopReplayStore = exports.memoryDpopNonceSource = exports.hmacDpopNonceSource = exports.createIntrospector = exports.createAccessTokenVerifier = exports.buildWwwAuthenticate = exports.DPOP_PROOF_MAX_AGE_SECONDS = exports.ACCESS_TOKEN_CLOCK_SKEW_SECONDS = void 0;
|
|
19
19
|
// §7.3 token verification — the original surface, unchanged.
|
|
20
20
|
__exportStar(require("./jwks-cache"), exports);
|
|
21
21
|
// OIDC discovery of the JWKS URL when only `issuer` is configured.
|
|
@@ -27,6 +27,7 @@ Object.defineProperty(exports, "instanceIdFromPublishableKey", { enumerable: tru
|
|
|
27
27
|
__exportStar(require("./verify"), exports);
|
|
28
28
|
__exportStar(require("./request-auth"), exports);
|
|
29
29
|
__exportStar(require("./recent-auth"), exports);
|
|
30
|
+
__exportStar(require("./txn-token"), exports);
|
|
30
31
|
__exportStar(require("./access-control"), exports);
|
|
31
32
|
__exportStar(require("./handshake"), exports);
|
|
32
33
|
// Moving from Better Auth: exchange its session cookie once, accept its JWTs for a window.
|
|
@@ -49,6 +50,8 @@ __exportStar(require("./legacy-issuer-presets"), exports);
|
|
|
49
50
|
__exportStar(require("./framework-sessions"), exports);
|
|
50
51
|
// …and their bridge presets + token extractors (registers the presets on load).
|
|
51
52
|
__exportStar(require("./framework-bridge"), exports);
|
|
53
|
+
// Verify a signed policy bundle offline (no call to Atlas).
|
|
54
|
+
__exportStar(require("./policy-bundle"), exports);
|
|
52
55
|
// OIDC Back-Channel Logout: verify the logout_token Atlas POSTs to your app.
|
|
53
56
|
var logout_token_1 = require("./logout-token");
|
|
54
57
|
Object.defineProperty(exports, "BACKCHANNEL_LOGOUT_EVENT", { enumerable: true, get: function () { return logout_token_1.BACKCHANNEL_LOGOUT_EVENT; } });
|
|
@@ -129,6 +132,8 @@ Object.defineProperty(exports, "memoryDpopNonceSource", { enumerable: true, get:
|
|
|
129
132
|
Object.defineProperty(exports, "memoryDpopReplayStore", { enumerable: true, get: function () { return oauth_resource_1.memoryDpopReplayStore; } });
|
|
130
133
|
Object.defineProperty(exports, "protectedResourceMetadata", { enumerable: true, get: function () { return oauth_resource_1.protectedResourceMetadata; } });
|
|
131
134
|
Object.defineProperty(exports, "protectedResourceMetadataPath", { enumerable: true, get: function () { return oauth_resource_1.protectedResourceMetadataPath; } });
|
|
135
|
+
Object.defineProperty(exports, "requireAcr", { enumerable: true, get: function () { return oauth_resource_1.requireAcr; } });
|
|
132
136
|
Object.defineProperty(exports, "verifyAccessToken", { enumerable: true, get: function () { return oauth_resource_1.verifyAccessToken; } });
|
|
133
137
|
__exportStar(require("./legacy-verify"), exports);
|
|
138
|
+
__exportStar(require("./uma"), exports);
|
|
134
139
|
//# sourceMappingURL=index.js.map
|
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,iDAA+B;AAC/B,gDAA8B;AAC9B,mDAAiC;AACjC,8CAA4B;AAC5B,2FAA2F;AAC3F,gDAA8B;AAC9B,qFAAqF;AACrF,sDAAoC;AACpC,qDAAmC;AACnC,kDAAgC;AAChC,yCAA6E;AAApE,mHAAA,sBAAsB,OAAA;AAAE,mHAAA,sBAAsB,OAAA;AACvD,mDAA+D;AAAtD,6HAAA,2BAA2B,OAAA;AACpC,mDAAoE;AAA3D,sHAAA,oBAAoB,OAAA;AAAE,4GAAA,UAAU,OAAA;AAEzC,0DAAwC;AACxC,+EAA+E;AAC/E,4DAA4D;AAC5D,uDAAqC;AACrC,gFAAgF;AAChF,qDAAmC;AAEnC,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;AASnB,+EAA+E;AAC/E,+DAQgC;AAP9B,gIAAA,wBAAwB,OAAA;AACxB,gIAAA,wBAAwB,OAAA;AACxB,sIAAA,8BAA8B,OAAA;AAC9B,8HAAA,sBAAsB,OAAA;AACtB,+HAAA,uBAAuB,OAAA;AACvB,6HAAA,qBAAqB,OAAA;AACrB,uHAAA,eAAe,OAAA;AAIjB,sEAAsE;AACtE,iFAAiF;AACjF,+BAcgB;AAbd,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,0GAAA,kBAAkB,OAAA;AAClB,2GAAA,mBAAmB,OAAA;AACnB,iGAAA,SAAS,OAAA;AACT,uGAAA,eAAe,OAAA;AAkBjB,oDAAoD;AACpD,6CAA2B;AAE3B,uFAAuF;AACvF,8CAA4B;AAC5B,kDAAgC;AAEhC,0FAA0F;AAC1F,0CAAwB;AAExB,8DAA8D;AAC9D,mCAA6C;AAApC,2GAAA,iBAAiB,OAAA;AAE1B,2CAAyB;AAEzB,yEAAyE;AACzE,2EAA2E;AAC3E,iEAAiE;AACjE,qCAAmF;AAA1E,2GAAA,gBAAgB,OAAA;AAAE,6GAAA,kBAAkB,OAAA;AAAE,2GAAA,gBAAgB,OAAA;AAU/D,6DAQ+B;AAP7B,4HAAA,qBAAqB,OAAA;AACrB,wHAAA,iBAAiB,OAAA;AACjB,+HAAA,wBAAwB,OAAA;AACxB,yHAAA,kBAAkB,OAAA;AAClB,2HAAA,oBAAoB,OAAA;AACpB,wHAAA,iBAAiB,OAAA;AACjB,4HAAA,qBAAqB,OAAA;AAWvB,wFAAwF;AACxF,2CAA2C;AAC3C,uCAA4C;AAAnC,sGAAA,YAAY,OAAA;AAErB,iDAA+E;AAAtE,yGAAA,UAAU,OAAA;AAAE,6GAAA,cAAc,OAAA;AAAE,6GAAA,cAAc,OAAA;AAGnD,8EAA8E;AAC9E,gFAAgF;AAChF,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
package/dist/oauth-resource.d.ts
CHANGED
|
@@ -160,7 +160,7 @@ export declare function createIntrospector(issuer: string, options: Introspectio
|
|
|
160
160
|
fetchImpl?: typeof fetch;
|
|
161
161
|
now?: () => number;
|
|
162
162
|
}): (token: string) => Promise<AccessTokenClaims | null>;
|
|
163
|
-
export type AccessTokenErrorCode = 'invalid_request' | 'invalid_token' | 'insufficient_scope' | 'invalid_dpop_proof' | 'use_dpop_nonce';
|
|
163
|
+
export type AccessTokenErrorCode = 'invalid_request' | 'invalid_token' | 'insufficient_scope' | 'invalid_dpop_proof' | 'use_dpop_nonce' | 'insufficient_user_authentication';
|
|
164
164
|
export type AccessTokenResult = {
|
|
165
165
|
ok: true;
|
|
166
166
|
claims: AccessTokenClaims;
|
|
@@ -193,14 +193,41 @@ export declare function buildWwwAuthenticate(opts: {
|
|
|
193
193
|
scope?: readonly string[];
|
|
194
194
|
resourceMetadataUrl?: string;
|
|
195
195
|
dpopAlgs?: readonly string[];
|
|
196
|
+
/** RFC 9470: the acr values the resource will accept (step-up challenge). */
|
|
197
|
+
acrValues?: readonly string[];
|
|
198
|
+
/** RFC 9470: the maximum age, in seconds, of the user authentication. */
|
|
199
|
+
maxAge?: number;
|
|
196
200
|
}): string;
|
|
197
201
|
/**
|
|
198
202
|
* A reusable verifier (one JWKS cache for the life of the process). Call it per
|
|
199
203
|
* request; it never throws for a bad token — it returns the status + challenge.
|
|
200
204
|
*/
|
|
201
|
-
|
|
205
|
+
/** Per-call extras for the verifier: scopes plus the RFC 9470 step-up requirements. */
|
|
206
|
+
export interface AccessTokenCallOptions {
|
|
202
207
|
requiredScopes?: readonly string[];
|
|
203
|
-
|
|
208
|
+
/** Accept only these `acr` values; otherwise answer `insufficient_user_authentication`. */
|
|
209
|
+
requireAcr?: readonly string[];
|
|
210
|
+
/** Require `auth_time` within this many seconds; otherwise answer `insufficient_user_authentication`. */
|
|
211
|
+
maxAge?: number;
|
|
212
|
+
}
|
|
213
|
+
/**
|
|
214
|
+
* RFC 9470 check on verified claims. Returns null when satisfied, else the
|
|
215
|
+
* `insufficient_user_authentication` challenge to send (HTTP 401).
|
|
216
|
+
*/
|
|
217
|
+
export declare function requireAcr(claims: Readonly<Record<string, unknown>>, req: {
|
|
218
|
+
acrValues?: readonly string[];
|
|
219
|
+
maxAge?: number;
|
|
220
|
+
scheme?: 'Bearer' | 'DPoP';
|
|
221
|
+
realm?: string;
|
|
222
|
+
resourceMetadataUrl?: string;
|
|
223
|
+
nowMs?: number;
|
|
224
|
+
}): {
|
|
225
|
+
status: 401;
|
|
226
|
+
error: 'insufficient_user_authentication';
|
|
227
|
+
description: string;
|
|
228
|
+
wwwAuthenticate: string;
|
|
229
|
+
} | null;
|
|
230
|
+
export declare function createAccessTokenVerifier(options: AccessTokenVerifierOptions): (request: ResourceRequestLike, extra?: AccessTokenCallOptions) => Promise<AccessTokenResult>;
|
|
204
231
|
/** One-shot form of {@link createAccessTokenVerifier} (builds a fresh JWKS cache each call — prefer the factory). */
|
|
205
232
|
export declare function verifyAccessToken(request: ResourceRequestLike, options: AccessTokenVerifierOptions): Promise<AccessTokenResult>;
|
|
206
233
|
/**
|
package/dist/oauth-resource.js
CHANGED
|
@@ -6,6 +6,7 @@ exports.hmacDpopNonceSource = hmacDpopNonceSource;
|
|
|
6
6
|
exports.memoryDpopReplayStore = memoryDpopReplayStore;
|
|
7
7
|
exports.createIntrospector = createIntrospector;
|
|
8
8
|
exports.buildWwwAuthenticate = buildWwwAuthenticate;
|
|
9
|
+
exports.requireAcr = requireAcr;
|
|
9
10
|
exports.createAccessTokenVerifier = createAccessTokenVerifier;
|
|
10
11
|
exports.verifyAccessToken = verifyAccessToken;
|
|
11
12
|
exports.protectedResourceMetadata = protectedResourceMetadata;
|
|
@@ -215,6 +216,10 @@ function buildWwwAuthenticate(opts) {
|
|
|
215
216
|
parts.push(`scope=${quote(opts.scope.join(' '))}`);
|
|
216
217
|
if (opts.resourceMetadataUrl)
|
|
217
218
|
parts.push(`resource_metadata=${quote(opts.resourceMetadataUrl)}`);
|
|
219
|
+
if (opts.acrValues && opts.acrValues.length > 0)
|
|
220
|
+
parts.push(`acr_values=${quote(opts.acrValues.join(' '))}`);
|
|
221
|
+
if (opts.maxAge !== undefined)
|
|
222
|
+
parts.push(`max_age=${Math.max(0, Math.floor(opts.maxAge))}`);
|
|
218
223
|
if (opts.scheme === 'DPoP' && opts.dpopAlgs)
|
|
219
224
|
parts.push(`algs=${quote(opts.dpopAlgs.join(' '))}`);
|
|
220
225
|
return `${opts.scheme ?? 'Bearer'}${parts.length ? ` ${parts.join(', ')}` : ''}`;
|
|
@@ -237,9 +242,32 @@ function htuOf(url) {
|
|
|
237
242
|
}
|
|
238
243
|
}
|
|
239
244
|
/**
|
|
240
|
-
*
|
|
241
|
-
*
|
|
245
|
+
* RFC 9470 check on verified claims. Returns null when satisfied, else the
|
|
246
|
+
* `insufficient_user_authentication` challenge to send (HTTP 401).
|
|
242
247
|
*/
|
|
248
|
+
function requireAcr(claims, req) {
|
|
249
|
+
const acrOk = !req.acrValues?.length || (typeof claims.acr === 'string' && req.acrValues.includes(claims.acr));
|
|
250
|
+
const at = claims.auth_time;
|
|
251
|
+
const ageOk = req.maxAge === undefined ||
|
|
252
|
+
(typeof at === 'number' && Number.isFinite(at) && (req.nowMs ?? Date.now()) / 1000 - at <= req.maxAge);
|
|
253
|
+
if (acrOk && ageOk)
|
|
254
|
+
return null;
|
|
255
|
+
const description = 'A stronger or more recent user authentication is required.';
|
|
256
|
+
return {
|
|
257
|
+
status: 401,
|
|
258
|
+
error: 'insufficient_user_authentication',
|
|
259
|
+
description,
|
|
260
|
+
wwwAuthenticate: buildWwwAuthenticate({
|
|
261
|
+
scheme: req.scheme,
|
|
262
|
+
realm: req.realm,
|
|
263
|
+
error: 'insufficient_user_authentication',
|
|
264
|
+
description,
|
|
265
|
+
acrValues: req.acrValues,
|
|
266
|
+
maxAge: req.maxAge,
|
|
267
|
+
resourceMetadataUrl: req.resourceMetadataUrl,
|
|
268
|
+
}),
|
|
269
|
+
};
|
|
270
|
+
}
|
|
243
271
|
function createAccessTokenVerifier(options) {
|
|
244
272
|
if (!options.issuer)
|
|
245
273
|
throw new Error('createAccessTokenVerifier needs `issuer`.');
|
|
@@ -367,6 +395,19 @@ function createAccessTokenVerifier(options) {
|
|
|
367
395
|
if (missing.length > 0) {
|
|
368
396
|
return fail(403, 'insufficient_scope', `The access token is missing the required scope(s): ${missing.join(' ')}.`);
|
|
369
397
|
}
|
|
398
|
+
if (extra?.requireAcr?.length || extra?.maxAge !== undefined) {
|
|
399
|
+
const step = requireAcr(claims, {
|
|
400
|
+
acrValues: extra.requireAcr,
|
|
401
|
+
maxAge: extra.maxAge,
|
|
402
|
+
scheme: presentedScheme === 'DPoP' ? 'DPoP' : 'Bearer',
|
|
403
|
+
realm: options.realm,
|
|
404
|
+
resourceMetadataUrl: options.resourceMetadataUrl,
|
|
405
|
+
nowMs: now(),
|
|
406
|
+
});
|
|
407
|
+
if (step) {
|
|
408
|
+
return { ok: false, status: 401, error: step.error, description: step.description, wwwAuthenticate: step.wwwAuthenticate };
|
|
409
|
+
}
|
|
410
|
+
}
|
|
370
411
|
return {
|
|
371
412
|
ok: true,
|
|
372
413
|
claims,
|