@noresponse/node 2.0.1 → 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.
@@ -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.1";
34
+ readonly sdkVersion: "2.0.2";
35
35
  readonly genVersion: "internal";
36
- readonly userAgent: "noresponse-sdk/typescript 2.0.1 internal 1 @noresponse/node";
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.1",
31
+ sdkVersion: "2.0.2",
32
32
  genVersion: "internal",
33
- userAgent: "noresponse-sdk/typescript 2.0.1 internal 1 @noresponse/node",
33
+ userAgent: "noresponse-sdk/typescript 2.0.2 internal 1 @noresponse/node",
34
34
  };
35
35
  //# sourceMappingURL=config.js.map
@@ -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>;
@@ -1 +1 @@
1
- {"version":3,"file":"auth.d.ts","sourceRoot":"","sources":["../../src/auth.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAC;AAE5D,MAAM,MAAM,cAAc,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;AACrD,MAAM,MAAM,oBAAoB,GAAG,OAAO,CAAC,WAAW,CAAC,CAAC;AAwExD,yFAAyF;AACzF,wBAAgB,UAAU,CAAC,MAAM,EAAE,cAAc,EAAE,SAAS,GAAE,oBAAyB,GAAG,WAAW,CAQpG;AAED,qFAAqF;AACrF,wBAAgB,SAAS,CAAC,MAAM,EAAE,cAAc,EAAE,SAAS,GAAE,oBAAyB,GAAG,WAAW,CAkBnG;AAED,kHAAkH;AAClH,wBAAgB,SAAS,CAAC,MAAM,EAAE,cAAc,EAAE,SAAS,GAAE,oBAAyB,GAAG,WAAW,CAcnG;AAED,uGAAuG;AACvG,wBAAgB,QAAQ,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,cAAc,EAAE,SAAS,GAAE,oBAAyB,GAAG,WAAW,CAGpH"}
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
- function text(value) {
2
- return typeof value === "string" && value.length > 0 ? value : undefined;
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 iso(value) {
5
- if (typeof value === "string")
6
- return value;
7
- // Whole UTC seconds (the fraction is truncated), as the Go and Python helpers write it.
8
- if (typeof value === "number" && Number.isFinite(value)) {
9
- return new Date(Math.trunc(value) * 1000).toISOString().replace(".000Z", "Z");
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 undefined;
17
+ return current;
12
18
  }
13
- // Defaults are the contract's bounds for roles and scopes (32 items of at
14
- // most 64 characters); audiences are 8 x 256 and amr 8 x 32. The Go and
15
- // Python helpers apply the same caps. Over-long values are dropped, not truncated.
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 strings(value, limit = 32, maxLength = 64) {
23
- if (typeof value === "string")
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 delimitedStrings(value, limit = 32, maxLength = 64) {
28
- if (typeof value !== "string")
29
- return strings(value, limit, maxLength);
30
- return bounded(value.split(/[\s,]+/).map((item) => item.trim()), limit, maxLength);
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 audiences(value) {
33
- return strings(value, 8, 256);
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 object(value) {
36
- return value !== null && typeof value === "object" && !Array.isArray(value) ? value : undefined;
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
- function actorPresent(value) {
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
- return Boolean(record ? (text(record["sub"]) ?? text(record["email"])) : text(value));
41
- }
42
- function defined(value) {
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 base(provider, claims, overrides = {}, options = {}) {
46
- const issuer = text(overrides.issuer) ?? text(claims["iss"]);
47
- const subject = text(overrides.subject) ?? text(claims["sub"]);
48
- if (!issuer || !subject)
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
- const issuedAt = iso(claims["iat"]);
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
- const defaults = {
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
- const org = object(claims["o"]);
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
- const amr = strings(claims["amr"], 8, 32);
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 (!/^[a-z0-9][a-z0-9._-]{1,31}$/.test(provider))
144
+ if (typeof provider !== "string" || !slug.test(provider))
120
145
  throw new TypeError("provider must be a lowercase provider slug");
121
- return base(provider, claims, overrides);
146
+ return build("oidc", claims, overrides, provider);
122
147
  }
123
148
  //# sourceMappingURL=auth.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"auth.js","sourceRoot":"","sources":["../../src/auth.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"auth.js","sourceRoot":"","sources":["../../src/auth.ts"],"names":[],"mappings":"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"}