@noresponse/node 2.0.0 → 2.0.2
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 +4 -0
- package/dist/commonjs/auth.d.ts +7 -0
- package/dist/commonjs/auth.d.ts.map +1 -1
- package/dist/commonjs/auth.js +121 -96
- package/dist/commonjs/auth.js.map +1 -1
- package/dist/commonjs/claim-map.d.ts +182 -0
- package/dist/commonjs/claim-map.d.ts.map +1 -0
- package/dist/commonjs/claim-map.js +238 -0
- package/dist/commonjs/claim-map.js.map +1 -0
- package/dist/commonjs/lib/config.d.ts +2 -2
- package/dist/commonjs/lib/config.js +2 -2
- package/dist/esm/auth.d.ts +7 -0
- package/dist/esm/auth.d.ts.map +1 -1
- package/dist/esm/auth.js +121 -96
- package/dist/esm/auth.js.map +1 -1
- package/dist/esm/claim-map.d.ts +182 -0
- package/dist/esm/claim-map.d.ts.map +1 -0
- package/dist/esm/claim-map.js +235 -0
- package/dist/esm/claim-map.js.map +1 -0
- package/dist/esm/lib/config.d.ts +2 -2
- package/dist/esm/lib/config.js +2 -2
- package/package.json +5 -5
|
@@ -0,0 +1,238 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.CLAIM_MAP = void 0;
|
|
4
|
+
// A copy of contracts/api/v1/fixtures/assessment-contract/auth-context-claim-map.json without its prose;
|
|
5
|
+
// tests/auth.test.mjs fails when the two differ.
|
|
6
|
+
exports.CLAIM_MAP = {
|
|
7
|
+
"version": 1,
|
|
8
|
+
"kinds": {
|
|
9
|
+
"id": {
|
|
10
|
+
"pattern": "[A-Za-z0-9._:@/|+=~-]+",
|
|
11
|
+
"maxLength": 256
|
|
12
|
+
},
|
|
13
|
+
"audience": {
|
|
14
|
+
"pattern": "[A-Za-z0-9._:/-]+",
|
|
15
|
+
"maxLength": 256
|
|
16
|
+
},
|
|
17
|
+
"role": {
|
|
18
|
+
"pattern": "[A-Za-z0-9._:@/-]+",
|
|
19
|
+
"maxLength": 64
|
|
20
|
+
},
|
|
21
|
+
"method": {
|
|
22
|
+
"pattern": "[A-Za-z0-9._:-]+",
|
|
23
|
+
"maxLength": 32
|
|
24
|
+
},
|
|
25
|
+
"issuer": {
|
|
26
|
+
"pattern": "https://[\\x21-\\x7e]+",
|
|
27
|
+
"maxLength": 256
|
|
28
|
+
},
|
|
29
|
+
"time": {
|
|
30
|
+
"pattern": "[0-9]{4}-(0[1-9]|1[0-2])-(0[1-9]|[12][0-9]|3[01])T([01][0-9]|2[0-3]):[0-5][0-9]:([0-5][0-9]|60)(\\.[0-9]+)?(Z|[+-]([01][0-9]|2[0-3]):[0-5][0-9])",
|
|
31
|
+
"maxLength": 64
|
|
32
|
+
}
|
|
33
|
+
},
|
|
34
|
+
"slug": "[a-z0-9][a-z0-9._-]{1,31}",
|
|
35
|
+
"constants": {
|
|
36
|
+
"verified": true,
|
|
37
|
+
"transport": "backend"
|
|
38
|
+
},
|
|
39
|
+
"base": {
|
|
40
|
+
"issuer": {
|
|
41
|
+
"op": "id",
|
|
42
|
+
"kind": "issuer",
|
|
43
|
+
"claims": [
|
|
44
|
+
"iss"
|
|
45
|
+
],
|
|
46
|
+
"required": true
|
|
47
|
+
},
|
|
48
|
+
"subject": {
|
|
49
|
+
"op": "id",
|
|
50
|
+
"kind": "id",
|
|
51
|
+
"claims": [
|
|
52
|
+
"sub"
|
|
53
|
+
],
|
|
54
|
+
"required": true
|
|
55
|
+
},
|
|
56
|
+
"audiences": {
|
|
57
|
+
"op": "list",
|
|
58
|
+
"kind": "audience",
|
|
59
|
+
"claims": [
|
|
60
|
+
"aud"
|
|
61
|
+
],
|
|
62
|
+
"split": "whitespace",
|
|
63
|
+
"max": 8
|
|
64
|
+
},
|
|
65
|
+
"issued_at": {
|
|
66
|
+
"op": "time",
|
|
67
|
+
"claims": [
|
|
68
|
+
"iat"
|
|
69
|
+
]
|
|
70
|
+
},
|
|
71
|
+
"expires_at": {
|
|
72
|
+
"op": "time",
|
|
73
|
+
"claims": [
|
|
74
|
+
"exp"
|
|
75
|
+
]
|
|
76
|
+
},
|
|
77
|
+
"auth_time": {
|
|
78
|
+
"op": "time",
|
|
79
|
+
"claims": [
|
|
80
|
+
"auth_time"
|
|
81
|
+
]
|
|
82
|
+
},
|
|
83
|
+
"session_id": {
|
|
84
|
+
"op": "id",
|
|
85
|
+
"kind": "id",
|
|
86
|
+
"claims": [
|
|
87
|
+
"sid"
|
|
88
|
+
]
|
|
89
|
+
},
|
|
90
|
+
"token_id": {
|
|
91
|
+
"op": "id",
|
|
92
|
+
"kind": "id",
|
|
93
|
+
"claims": [
|
|
94
|
+
"jti"
|
|
95
|
+
]
|
|
96
|
+
}
|
|
97
|
+
},
|
|
98
|
+
"providers": {
|
|
99
|
+
"workos": {
|
|
100
|
+
"fields": {
|
|
101
|
+
"organization_id": {
|
|
102
|
+
"op": "id",
|
|
103
|
+
"kind": "id",
|
|
104
|
+
"claims": [
|
|
105
|
+
"org_id"
|
|
106
|
+
]
|
|
107
|
+
},
|
|
108
|
+
"roles": {
|
|
109
|
+
"op": "list",
|
|
110
|
+
"kind": "role",
|
|
111
|
+
"claims": [
|
|
112
|
+
"roles",
|
|
113
|
+
"role"
|
|
114
|
+
],
|
|
115
|
+
"split": "whitespace",
|
|
116
|
+
"max": 32
|
|
117
|
+
},
|
|
118
|
+
"scopes": {
|
|
119
|
+
"op": "list",
|
|
120
|
+
"kind": "role",
|
|
121
|
+
"claims": [
|
|
122
|
+
"permissions"
|
|
123
|
+
],
|
|
124
|
+
"split": "whitespace",
|
|
125
|
+
"max": 32
|
|
126
|
+
},
|
|
127
|
+
"impersonated": {
|
|
128
|
+
"op": "actor",
|
|
129
|
+
"claims": [
|
|
130
|
+
"act"
|
|
131
|
+
]
|
|
132
|
+
}
|
|
133
|
+
}
|
|
134
|
+
},
|
|
135
|
+
"clerk": {
|
|
136
|
+
"disable": [
|
|
137
|
+
"issued_at"
|
|
138
|
+
],
|
|
139
|
+
"fields": {
|
|
140
|
+
"organization_id": {
|
|
141
|
+
"op": "id",
|
|
142
|
+
"kind": "id",
|
|
143
|
+
"claims": [
|
|
144
|
+
"o.id",
|
|
145
|
+
"org_id"
|
|
146
|
+
]
|
|
147
|
+
},
|
|
148
|
+
"roles": {
|
|
149
|
+
"op": "list",
|
|
150
|
+
"kind": "role",
|
|
151
|
+
"claims": [
|
|
152
|
+
"o.rol",
|
|
153
|
+
"org_role"
|
|
154
|
+
],
|
|
155
|
+
"split": "none",
|
|
156
|
+
"max": 32
|
|
157
|
+
},
|
|
158
|
+
"scopes": {
|
|
159
|
+
"op": "list",
|
|
160
|
+
"kind": "role",
|
|
161
|
+
"claims": [
|
|
162
|
+
"o.per",
|
|
163
|
+
"org_permissions"
|
|
164
|
+
],
|
|
165
|
+
"split": "comma_whitespace",
|
|
166
|
+
"max": 32
|
|
167
|
+
},
|
|
168
|
+
"impersonated": {
|
|
169
|
+
"op": "actor",
|
|
170
|
+
"claims": [
|
|
171
|
+
"act"
|
|
172
|
+
]
|
|
173
|
+
},
|
|
174
|
+
"mfa": {
|
|
175
|
+
"op": "mfa_factor_age",
|
|
176
|
+
"claim": "fva",
|
|
177
|
+
"index": 1,
|
|
178
|
+
"unitSeconds": 60,
|
|
179
|
+
"maxSeconds": 315360000
|
|
180
|
+
}
|
|
181
|
+
}
|
|
182
|
+
},
|
|
183
|
+
"auth0": {
|
|
184
|
+
"fields": {
|
|
185
|
+
"organization_id": {
|
|
186
|
+
"op": "id",
|
|
187
|
+
"kind": "id",
|
|
188
|
+
"claims": [
|
|
189
|
+
"org_id"
|
|
190
|
+
]
|
|
191
|
+
},
|
|
192
|
+
"scopes": {
|
|
193
|
+
"op": "list",
|
|
194
|
+
"kind": "role",
|
|
195
|
+
"claims": [
|
|
196
|
+
"scope",
|
|
197
|
+
"permissions"
|
|
198
|
+
],
|
|
199
|
+
"split": "whitespace",
|
|
200
|
+
"max": 32
|
|
201
|
+
},
|
|
202
|
+
"email_verified": {
|
|
203
|
+
"op": "bool",
|
|
204
|
+
"claims": [
|
|
205
|
+
"email_verified"
|
|
206
|
+
]
|
|
207
|
+
},
|
|
208
|
+
"phone_verified": {
|
|
209
|
+
"op": "bool",
|
|
210
|
+
"claims": [
|
|
211
|
+
"phone_number_verified"
|
|
212
|
+
]
|
|
213
|
+
},
|
|
214
|
+
"impersonated": {
|
|
215
|
+
"op": "actor",
|
|
216
|
+
"claims": [
|
|
217
|
+
"act"
|
|
218
|
+
]
|
|
219
|
+
},
|
|
220
|
+
"mfa": {
|
|
221
|
+
"op": "mfa_methods",
|
|
222
|
+
"kind": "method",
|
|
223
|
+
"claim": "amr",
|
|
224
|
+
"max": 8,
|
|
225
|
+
"mfaValue": "mfa",
|
|
226
|
+
"ignore": [
|
|
227
|
+
"pwd"
|
|
228
|
+
]
|
|
229
|
+
}
|
|
230
|
+
}
|
|
231
|
+
},
|
|
232
|
+
"oidc": {
|
|
233
|
+
"slugArgument": true,
|
|
234
|
+
"fields": {}
|
|
235
|
+
}
|
|
236
|
+
}
|
|
237
|
+
};
|
|
238
|
+
//# sourceMappingURL=claim-map.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"claim-map.js","sourceRoot":"","sources":["../../src/claim-map.ts"],"names":[],"mappings":"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"}
|
|
@@ -31,8 +31,8 @@ export declare function serverURLFromOptions(options: SDKOptions): URL | null;
|
|
|
31
31
|
export declare const SDK_METADATA: {
|
|
32
32
|
readonly language: "typescript";
|
|
33
33
|
readonly openapiDocVersion: "1";
|
|
34
|
-
readonly sdkVersion: "2.0.
|
|
34
|
+
readonly sdkVersion: "2.0.2";
|
|
35
35
|
readonly genVersion: "internal";
|
|
36
|
-
readonly userAgent: "noresponse-sdk/typescript 2.0.
|
|
36
|
+
readonly userAgent: "noresponse-sdk/typescript 2.0.2 internal 1 @noresponse/node";
|
|
37
37
|
};
|
|
38
38
|
//# sourceMappingURL=config.d.ts.map
|
|
@@ -28,8 +28,8 @@ function serverURLFromOptions(options) {
|
|
|
28
28
|
exports.SDK_METADATA = {
|
|
29
29
|
language: "typescript",
|
|
30
30
|
openapiDocVersion: "1",
|
|
31
|
-
sdkVersion: "2.0.
|
|
31
|
+
sdkVersion: "2.0.2",
|
|
32
32
|
genVersion: "internal",
|
|
33
|
-
userAgent: "noresponse-sdk/typescript 2.0.
|
|
33
|
+
userAgent: "noresponse-sdk/typescript 2.0.2 internal 1 @noresponse/node",
|
|
34
34
|
};
|
|
35
35
|
//# sourceMappingURL=config.js.map
|
package/dist/esm/auth.d.ts
CHANGED
|
@@ -3,6 +3,13 @@
|
|
|
3
3
|
*
|
|
4
4
|
* Each adapter maps claims your backend has already verified into the
|
|
5
5
|
* `authContext` of an assessment request. Pass verified claims, not a raw token.
|
|
6
|
+
*
|
|
7
|
+
* The mapping is the table in `claim-map.ts`, a copy of
|
|
8
|
+
* contracts/api/v1/fixtures/assessment-contract/auth-context-claim-map.json,
|
|
9
|
+
* run by the small interpreter below. Every SDK runs the same table and the
|
|
10
|
+
* same vectors (tests/fixtures/auth-context-vectors.json). A claim that is
|
|
11
|
+
* missing, mistyped or out of range maps to absent, never to a stronger
|
|
12
|
+
* assurance.
|
|
6
13
|
*/
|
|
7
14
|
import type { AuthContext } from "./models/auth-context.js";
|
|
8
15
|
export type VerifiedClaims = Record<string, unknown>;
|
package/dist/esm/auth.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"auth.d.ts","sourceRoot":"","sources":["../../src/auth.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"auth.d.ts","sourceRoot":"","sources":["../../src/auth.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AACH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAC;AAG5D,MAAM,MAAM,cAAc,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;AACrD,MAAM,MAAM,oBAAoB,GAAG,OAAO,CAAC,WAAW,CAAC,CAAC;AA0IxD,yFAAyF;AACzF,wBAAgB,UAAU,CAAC,MAAM,EAAE,cAAc,EAAE,SAAS,GAAE,oBAAyB,GAAG,WAAW,CAEpG;AAED,qFAAqF;AACrF,wBAAgB,SAAS,CAAC,MAAM,EAAE,cAAc,EAAE,SAAS,GAAE,oBAAyB,GAAG,WAAW,CAEnG;AAED,kHAAkH;AAClH,wBAAgB,SAAS,CAAC,MAAM,EAAE,cAAc,EAAE,SAAS,GAAE,oBAAyB,GAAG,WAAW,CAEnG;AAED,uGAAuG;AACvG,wBAAgB,QAAQ,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,cAAc,EAAE,SAAS,GAAE,oBAAyB,GAAG,WAAW,CAGpH"}
|
package/dist/esm/auth.js
CHANGED
|
@@ -1,123 +1,148 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
1
|
+
import { CLAIM_MAP } from "./claim-map.js";
|
|
2
|
+
const kinds = new Map(Object.entries(CLAIM_MAP.kinds).map(([name, k]) => [name, { re: new RegExp("^(?:" + k.pattern + ")$"), max: k.maxLength }]));
|
|
3
|
+
const slug = new RegExp("^(?:" + CLAIM_MAP.slug + ")$");
|
|
4
|
+
const splitters = { whitespace: /[ \t\r\n\f\v]+/, comma_whitespace: /[ \t\r\n\f\v,]+/ };
|
|
5
|
+
const MAX_TIME = 253402300799;
|
|
6
|
+
function object(value) {
|
|
7
|
+
return value !== null && typeof value === "object" && !Array.isArray(value) ? value : undefined;
|
|
3
8
|
}
|
|
4
|
-
function
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
9
|
+
function lookup(claims, path) {
|
|
10
|
+
let current = claims;
|
|
11
|
+
for (const key of path.split(".")) {
|
|
12
|
+
const record = object(current);
|
|
13
|
+
if (!record || !Object.hasOwn(record, key))
|
|
14
|
+
return undefined;
|
|
15
|
+
current = record[key];
|
|
10
16
|
}
|
|
11
|
-
return
|
|
17
|
+
return current;
|
|
12
18
|
}
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
function bounded(values, limit, maxLength) {
|
|
17
|
-
const kept = values
|
|
18
|
-
.filter((item) => typeof item === "string" && item.length > 0 && [...item].length <= maxLength)
|
|
19
|
-
.slice(0, limit);
|
|
20
|
-
return kept.length ? kept : undefined;
|
|
19
|
+
function matches(kind, value) {
|
|
20
|
+
const k = kinds.get(kind);
|
|
21
|
+
return typeof value === "string" && [...value].length <= k.max && k.re.test(value);
|
|
21
22
|
}
|
|
22
|
-
function
|
|
23
|
-
|
|
24
|
-
return bounded(value.split(/\s+/), limit, maxLength);
|
|
25
|
-
return Array.isArray(value) ? bounded(value, limit, maxLength) : undefined;
|
|
23
|
+
function lower(value) {
|
|
24
|
+
return value.replace(/[A-Z]/g, (c) => c.toLowerCase());
|
|
26
25
|
}
|
|
27
|
-
function
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
26
|
+
function mapTime(claims, rule) {
|
|
27
|
+
for (const path of rule.claims ?? []) {
|
|
28
|
+
const value = lookup(claims, path);
|
|
29
|
+
if (typeof value === "number" && Number.isFinite(value) && value >= 0 && value <= MAX_TIME) {
|
|
30
|
+
// Whole UTC seconds; the fraction is truncated.
|
|
31
|
+
return new Date(Math.trunc(value) * 1000).toISOString().replace(".000Z", "Z");
|
|
32
|
+
}
|
|
33
|
+
if (matches("time", value))
|
|
34
|
+
return value;
|
|
35
|
+
}
|
|
36
|
+
return undefined;
|
|
31
37
|
}
|
|
32
|
-
function
|
|
33
|
-
|
|
38
|
+
function mapList(claims, rule) {
|
|
39
|
+
for (const path of rule.claims ?? []) {
|
|
40
|
+
const value = lookup(claims, path);
|
|
41
|
+
let items = [];
|
|
42
|
+
if (typeof value === "string")
|
|
43
|
+
items = rule.split === "none" ? [value] : value.split(splitters[rule.split ?? "whitespace"]);
|
|
44
|
+
else if (Array.isArray(value))
|
|
45
|
+
items = value;
|
|
46
|
+
const kept = items.filter((item) => matches(rule.kind, item)).slice(0, rule.max);
|
|
47
|
+
if (kept.length)
|
|
48
|
+
return kept;
|
|
49
|
+
}
|
|
50
|
+
return undefined;
|
|
34
51
|
}
|
|
35
|
-
function
|
|
36
|
-
|
|
52
|
+
function mapRule(claims, rule) {
|
|
53
|
+
switch (rule.op) {
|
|
54
|
+
case "id":
|
|
55
|
+
for (const path of rule.claims ?? []) {
|
|
56
|
+
const value = lookup(claims, path);
|
|
57
|
+
if (matches(rule.kind, value))
|
|
58
|
+
return value;
|
|
59
|
+
}
|
|
60
|
+
return undefined;
|
|
61
|
+
case "list":
|
|
62
|
+
return mapList(claims, rule);
|
|
63
|
+
case "time":
|
|
64
|
+
return mapTime(claims, rule);
|
|
65
|
+
case "bool":
|
|
66
|
+
for (const path of rule.claims ?? []) {
|
|
67
|
+
const value = lookup(claims, path);
|
|
68
|
+
if (typeof value === "boolean")
|
|
69
|
+
return value;
|
|
70
|
+
}
|
|
71
|
+
return undefined;
|
|
72
|
+
case "actor": {
|
|
73
|
+
const value = lookup(claims, rule.claims[0]);
|
|
74
|
+
const record = object(value);
|
|
75
|
+
if (record)
|
|
76
|
+
return [record["sub"], record["email"]].some((item) => typeof item === "string" && item.length > 0);
|
|
77
|
+
return typeof value === "string" && value.length > 0;
|
|
78
|
+
}
|
|
79
|
+
case "mfa_factor_age": {
|
|
80
|
+
const value = lookup(claims, rule.claim);
|
|
81
|
+
const age = Array.isArray(value) ? value[rule.index] : undefined;
|
|
82
|
+
const seconds = typeof age === "number" ? age * rule.unitSeconds : NaN;
|
|
83
|
+
return seconds >= 0 && seconds <= rule.maxSeconds ? { present: true, age_seconds: Math.trunc(seconds) } : undefined;
|
|
84
|
+
}
|
|
85
|
+
case "mfa_methods": {
|
|
86
|
+
const value = lookup(claims, rule.claim);
|
|
87
|
+
if (!Array.isArray(value))
|
|
88
|
+
return undefined;
|
|
89
|
+
const kept = value.filter((item) => matches(rule.kind, item)).slice(0, rule.max);
|
|
90
|
+
const methods = kept.filter((item) => !rule.ignore.includes(lower(item)));
|
|
91
|
+
if (!methods.length)
|
|
92
|
+
return undefined;
|
|
93
|
+
return { present: kept.some((item) => lower(item) === rule.mfaValue), methods };
|
|
94
|
+
}
|
|
95
|
+
default:
|
|
96
|
+
throw new Error("unknown claim map op " + rule.op);
|
|
97
|
+
}
|
|
37
98
|
}
|
|
38
|
-
|
|
99
|
+
const camel = (key) => key.replace(/_([a-z])/g, (_, c) => c.toUpperCase());
|
|
100
|
+
const snake = (key) => key.replace(/[A-Z]/g, (c) => "_" + c.toLowerCase());
|
|
101
|
+
function rekey(value, fn) {
|
|
39
102
|
const record = object(value);
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
return Object.fromEntries(Object.entries(value).filter(([, v]) => v !== undefined));
|
|
103
|
+
if (!record)
|
|
104
|
+
return value;
|
|
105
|
+
return Object.fromEntries(Object.entries(record).map(([k, v]) => [fn(k), k === "mfa" || k === "methods" ? rekey(v, fn) : v]));
|
|
44
106
|
}
|
|
45
|
-
function
|
|
46
|
-
const
|
|
47
|
-
const
|
|
48
|
-
|
|
107
|
+
function build(name, claims, overrides, provider) {
|
|
108
|
+
const spec = CLAIM_MAP.providers[name];
|
|
109
|
+
const rules = { ...CLAIM_MAP.base, ...spec.fields };
|
|
110
|
+
for (const field of spec.disable ?? [])
|
|
111
|
+
delete rules[field];
|
|
112
|
+
const wire = { provider, ...CLAIM_MAP.constants };
|
|
113
|
+
for (const [field, rule] of Object.entries(rules)) {
|
|
114
|
+
const value = mapRule(claims, rule);
|
|
115
|
+
if (value !== undefined)
|
|
116
|
+
wire[field] = value;
|
|
117
|
+
}
|
|
118
|
+
for (const [field, value] of Object.entries(rekey(overrides, snake))) {
|
|
119
|
+
if (value !== undefined && value !== null)
|
|
120
|
+
wire[field] = value;
|
|
121
|
+
}
|
|
122
|
+
const audiences = wire["audiences"];
|
|
123
|
+
if (Array.isArray(audiences) && audiences.length && wire["audience"] === undefined)
|
|
124
|
+
wire["audience"] = audiences[0];
|
|
125
|
+
if (typeof wire["issuer"] !== "string" || !wire["issuer"] || typeof wire["subject"] !== "string" || !wire["subject"]) {
|
|
49
126
|
throw new TypeError("NoResponse auth context requires a verified issuer and subject");
|
|
50
|
-
const mergedAudiences = overrides.audiences ?? audiences(claims["aud"]);
|
|
51
|
-
const context = { provider, issuer, subject, verified: true, transport: "backend" };
|
|
52
|
-
if (mergedAudiences?.length) {
|
|
53
|
-
context.audiences = mergedAudiences;
|
|
54
|
-
context.audience = overrides.audience ?? mergedAudiences[0];
|
|
55
127
|
}
|
|
56
|
-
|
|
57
|
-
if (options.includeIssuedAt !== false && issuedAt)
|
|
58
|
-
context.issuedAt = issuedAt;
|
|
59
|
-
const expiresAt = iso(claims["exp"]);
|
|
60
|
-
if (expiresAt)
|
|
61
|
-
context.expiresAt = expiresAt;
|
|
62
|
-
const authTime = iso(claims["auth_time"]);
|
|
63
|
-
if (authTime)
|
|
64
|
-
context.authTime = authTime;
|
|
65
|
-
const sessionId = text(claims["sid"]);
|
|
66
|
-
if (sessionId)
|
|
67
|
-
context.sessionId = sessionId;
|
|
68
|
-
const tokenId = text(claims["jti"]);
|
|
69
|
-
if (tokenId)
|
|
70
|
-
context.tokenId = tokenId;
|
|
71
|
-
return { ...context, ...defined(overrides) };
|
|
128
|
+
return rekey(wire, camel);
|
|
72
129
|
}
|
|
73
130
|
/** Map verified WorkOS AuthKit claims plus verified user or session record overrides. */
|
|
74
131
|
export function fromWorkOS(claims, overrides = {}) {
|
|
75
|
-
|
|
76
|
-
organizationId: text(claims["org_id"]),
|
|
77
|
-
roles: strings(claims["roles"] ?? claims["role"]),
|
|
78
|
-
scopes: strings(claims["permissions"]),
|
|
79
|
-
impersonated: actorPresent(claims["act"]),
|
|
80
|
-
};
|
|
81
|
-
return base("workos", claims, { ...defaults, ...overrides });
|
|
132
|
+
return build("workos", claims, overrides, "workos");
|
|
82
133
|
}
|
|
83
134
|
/** Map verified Clerk session claims. Pass Session.createdAt as sessionCreatedAt. */
|
|
84
135
|
export function fromClerk(claims, overrides = {}) {
|
|
85
|
-
|
|
86
|
-
const secondFactorAgeMinutes = Array.isArray(claims["fva"]) && typeof claims["fva"][1] === "number" && Number.isFinite(claims["fva"][1]) ? claims["fva"][1] : undefined;
|
|
87
|
-
const mfa = secondFactorAgeMinutes !== undefined && secondFactorAgeMinutes >= 0
|
|
88
|
-
? { present: true, ageSeconds: Math.trunc(secondFactorAgeMinutes * 60) }
|
|
89
|
-
: undefined;
|
|
90
|
-
const defaults = {
|
|
91
|
-
organizationId: text(org?.["id"]) ?? text(claims["org_id"]),
|
|
92
|
-
// Clerk's role claim is one role slug, not a list.
|
|
93
|
-
roles: bounded([org?.["rol"]], 32, 64) ?? bounded([claims["org_role"]], 32, 64),
|
|
94
|
-
scopes: delimitedStrings(org?.["per"]) ?? delimitedStrings(claims["org_permissions"]),
|
|
95
|
-
impersonated: actorPresent(claims["act"]),
|
|
96
|
-
...(mfa ? { mfa } : {}),
|
|
97
|
-
};
|
|
98
|
-
// iat is a 60-second token refresh clock, so it is not sent as issuedAt; session age is the sessionCreatedAt override.
|
|
99
|
-
return base("clerk", claims, { ...defaults, ...overrides }, { includeIssuedAt: false });
|
|
136
|
+
return build("clerk", claims, overrides, "clerk");
|
|
100
137
|
}
|
|
101
138
|
/** Map verified Auth0 ID token, userinfo or normalised session claims. Do not pass an opaque API access token. */
|
|
102
139
|
export function fromAuth0(claims, overrides = {}) {
|
|
103
|
-
|
|
104
|
-
const mfaMethods = amr?.filter((method) => method.toLowerCase() !== "pwd");
|
|
105
|
-
const defaults = {
|
|
106
|
-
organizationId: text(claims["org_id"]),
|
|
107
|
-
scopes: strings(claims["scope"]) ?? strings(claims["permissions"]),
|
|
108
|
-
emailVerified: typeof claims["email_verified"] === "boolean" ? claims["email_verified"] : undefined,
|
|
109
|
-
phoneVerified: typeof claims["phone_number_verified"] === "boolean" ? claims["phone_number_verified"] : undefined,
|
|
110
|
-
impersonated: actorPresent(claims["act"]),
|
|
111
|
-
...(mfaMethods?.length
|
|
112
|
-
? { mfa: { present: amr?.some((method) => method.toLowerCase() === "mfa") ?? false, methods: mfaMethods } }
|
|
113
|
-
: {}),
|
|
114
|
-
};
|
|
115
|
-
return base("auth0", claims, { ...defaults, ...overrides });
|
|
140
|
+
return build("auth0", claims, overrides, "auth0");
|
|
116
141
|
}
|
|
117
142
|
/** Generic OIDC adapter for providers without a first-class helper. `provider` is a lowercase slug. */
|
|
118
143
|
export function fromOIDC(provider, claims, overrides = {}) {
|
|
119
|
-
if (
|
|
144
|
+
if (typeof provider !== "string" || !slug.test(provider))
|
|
120
145
|
throw new TypeError("provider must be a lowercase provider slug");
|
|
121
|
-
return
|
|
146
|
+
return build("oidc", claims, overrides, provider);
|
|
122
147
|
}
|
|
123
148
|
//# sourceMappingURL=auth.js.map
|
package/dist/esm/auth.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"auth.js","sourceRoot":"","sources":["../../src/auth.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"auth.js","sourceRoot":"","sources":["../../src/auth.ts"],"names":[],"mappings":"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"}
|