@xemahq/platform-common 0.39.0 → 0.41.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/dist/index.d.ts +1 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -0
- package/dist/index.js.map +1 -1
- package/dist/lib/request-context.d.ts +1 -0
- package/dist/lib/request-context.d.ts.map +1 -1
- package/dist/lib/request-context.js.map +1 -1
- package/dist/lib/untrusted-content/fence.d.ts +29 -0
- package/dist/lib/untrusted-content/fence.d.ts.map +1 -0
- package/dist/lib/untrusted-content/fence.js +98 -0
- package/dist/lib/untrusted-content/fence.js.map +1 -0
- package/dist/lib/untrusted-content/index.d.ts +4 -0
- package/dist/lib/untrusted-content/index.d.ts.map +1 -0
- package/dist/lib/untrusted-content/index.js +20 -0
- package/dist/lib/untrusted-content/index.js.map +1 -0
- package/dist/lib/untrusted-content/notice.d.ts +3 -0
- package/dist/lib/untrusted-content/notice.d.ts.map +1 -0
- package/dist/lib/untrusted-content/notice.js +11 -0
- package/dist/lib/untrusted-content/notice.js.map +1 -0
- package/dist/lib/untrusted-content/origin.d.ts +9 -0
- package/dist/lib/untrusted-content/origin.d.ts.map +1 -0
- package/dist/lib/untrusted-content/origin.js +13 -0
- package/dist/lib/untrusted-content/origin.js.map +1 -0
- package/dist/nestjs/auth/actor-classification.d.ts +1 -0
- package/dist/nestjs/auth/actor-classification.d.ts.map +1 -1
- package/dist/nestjs/auth/actor-classification.js +22 -0
- package/dist/nestjs/auth/actor-classification.js.map +1 -1
- package/dist/nestjs/auth/boundary-context-brand.d.ts +5 -0
- package/dist/nestjs/auth/boundary-context-brand.d.ts.map +1 -0
- package/dist/nestjs/auth/boundary-context-brand.js +17 -0
- package/dist/nestjs/auth/boundary-context-brand.js.map +1 -0
- package/dist/nestjs/auth/claim-authority.d.ts +25 -0
- package/dist/nestjs/auth/claim-authority.d.ts.map +1 -0
- package/dist/nestjs/auth/claim-authority.js +178 -0
- package/dist/nestjs/auth/claim-authority.js.map +1 -0
- package/dist/nestjs/auth/declared-subject-class.d.ts.map +1 -1
- package/dist/nestjs/auth/declared-subject-class.js +9 -6
- package/dist/nestjs/auth/declared-subject-class.js.map +1 -1
- package/dist/nestjs/auth/index.d.ts +2 -0
- package/dist/nestjs/auth/index.d.ts.map +1 -1
- package/dist/nestjs/auth/index.js +13 -1
- package/dist/nestjs/auth/index.js.map +1 -1
- package/dist/nestjs/auth/org-authority-fence.d.ts +16 -0
- package/dist/nestjs/auth/org-authority-fence.d.ts.map +1 -0
- package/dist/nestjs/auth/org-authority-fence.js +77 -0
- package/dist/nestjs/auth/org-authority-fence.js.map +1 -0
- package/dist/nestjs/auth/service-token.guard.d.ts.map +1 -1
- package/dist/nestjs/auth/service-token.guard.js +3 -1
- package/dist/nestjs/auth/service-token.guard.js.map +1 -1
- package/dist/nestjs/cors.config.d.ts +1 -0
- package/dist/nestjs/cors.config.d.ts.map +1 -1
- package/dist/nestjs/cors.config.js +72 -27
- package/dist/nestjs/cors.config.js.map +1 -1
- package/dist/nestjs/index.d.ts +2 -2
- package/dist/nestjs/index.d.ts.map +1 -1
- package/dist/nestjs/index.js +15 -4
- package/dist/nestjs/index.js.map +1 -1
- package/dist/nestjs/jwt-verification.guard.d.ts +1 -1
- package/dist/nestjs/jwt-verification.guard.d.ts.map +1 -1
- package/dist/nestjs/jwt-verification.guard.js +48 -8
- package/dist/nestjs/jwt-verification.guard.js.map +1 -1
- package/dist/nestjs/request-context.middleware.d.ts +0 -2
- package/dist/nestjs/request-context.middleware.d.ts.map +1 -1
- package/dist/nestjs/request-context.middleware.js +4 -69
- package/dist/nestjs/request-context.middleware.js.map +1 -1
- package/package.json +4 -4
|
@@ -0,0 +1,178 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.UnsupportedContextVersionError = exports.InvalidBoundaryContextError = exports.BoundarySubjectKind = exports.FOREIGN_CALLER_IDENTITY_CLAIMS = exports.PLATFORM_AUTHORITY_CLAIMS = exports.ACT_CLAIM = exports.TOKEN_CLASS_CLAIM = exports.DELEGATION_ID_CLAIM = exports.SUPPORTED_CONTEXT_VERSION = exports.CONTEXT_VERSION_CLAIM = void 0;
|
|
4
|
+
exports.kernelSubjectKindForBoundary = kernelSubjectKindForBoundary;
|
|
5
|
+
exports.normalizeClaimAuthorityClaims = normalizeClaimAuthorityClaims;
|
|
6
|
+
exports.withoutPlatformAuthorityClaims = withoutPlatformAuthorityClaims;
|
|
7
|
+
exports.resolveDelegationIdFromBoundaryClaims = resolveDelegationIdFromBoundaryClaims;
|
|
8
|
+
const common_1 = require("@nestjs/common");
|
|
9
|
+
const identity_client_1 = require("@xemahq/identity-client");
|
|
10
|
+
const subject_1 = require("@xemahq/contracts/subject");
|
|
11
|
+
const org_claim_1 = require("../../lib/auth/org-claim");
|
|
12
|
+
const org_role_1 = require("../../lib/auth/org-role");
|
|
13
|
+
const actor_classification_1 = require("./actor-classification");
|
|
14
|
+
const boundary_context_brand_1 = require("./boundary-context-brand");
|
|
15
|
+
exports.CONTEXT_VERSION_CLAIM = 'ctx_ver';
|
|
16
|
+
exports.SUPPORTED_CONTEXT_VERSION = 1;
|
|
17
|
+
exports.DELEGATION_ID_CLAIM = 'did';
|
|
18
|
+
exports.TOKEN_CLASS_CLAIM = 'token_class';
|
|
19
|
+
exports.ACT_CLAIM = 'act';
|
|
20
|
+
exports.PLATFORM_AUTHORITY_CLAIMS = [
|
|
21
|
+
'realm_access',
|
|
22
|
+
boundary_context_brand_1.PLATFORM_ROLES_CLAIM,
|
|
23
|
+
org_role_1.OrgRolesClaimKey.Canonical,
|
|
24
|
+
org_claim_1.OrgClaimKey.Canonical,
|
|
25
|
+
exports.TOKEN_CLASS_CLAIM,
|
|
26
|
+
actor_classification_1.SUBJECT_KIND_CLAIM,
|
|
27
|
+
exports.ACT_CLAIM,
|
|
28
|
+
exports.DELEGATION_ID_CLAIM,
|
|
29
|
+
exports.CONTEXT_VERSION_CLAIM,
|
|
30
|
+
identity_client_1.PRINCIPAL_ID_CLAIM,
|
|
31
|
+
];
|
|
32
|
+
exports.FOREIGN_CALLER_IDENTITY_CLAIMS = [
|
|
33
|
+
'azp',
|
|
34
|
+
'client_id',
|
|
35
|
+
];
|
|
36
|
+
var BoundarySubjectKind;
|
|
37
|
+
(function (BoundarySubjectKind) {
|
|
38
|
+
BoundarySubjectKind["User"] = "user";
|
|
39
|
+
BoundarySubjectKind["Workload"] = "workload";
|
|
40
|
+
BoundarySubjectKind["Agent"] = "agent";
|
|
41
|
+
})(BoundarySubjectKind || (exports.BoundarySubjectKind = BoundarySubjectKind = {}));
|
|
42
|
+
function kernelSubjectKindForBoundary(kind) {
|
|
43
|
+
switch (kind) {
|
|
44
|
+
case BoundarySubjectKind.User:
|
|
45
|
+
return subject_1.SubjectKind.User;
|
|
46
|
+
case BoundarySubjectKind.Workload:
|
|
47
|
+
return subject_1.SubjectKind.Service;
|
|
48
|
+
case BoundarySubjectKind.Agent:
|
|
49
|
+
return subject_1.SubjectKind.Agent;
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
function parseBoundarySubjectKind(value) {
|
|
53
|
+
return typeof value === 'string' &&
|
|
54
|
+
Object.values(BoundarySubjectKind).includes(value)
|
|
55
|
+
? value
|
|
56
|
+
: null;
|
|
57
|
+
}
|
|
58
|
+
class InvalidBoundaryContextError extends common_1.UnauthorizedException {
|
|
59
|
+
constructor(issuer, reason) {
|
|
60
|
+
super(`The access token from claim authority '${issuer}' is refused: ${reason} ` +
|
|
61
|
+
`A claim-authority context carries its classification explicitly; ` +
|
|
62
|
+
`nothing is inferred from its absence.`);
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
exports.InvalidBoundaryContextError = InvalidBoundaryContextError;
|
|
66
|
+
class UnsupportedContextVersionError extends InvalidBoundaryContextError {
|
|
67
|
+
constructor(issuer, declared) {
|
|
68
|
+
super(issuer, declared === undefined
|
|
69
|
+
? `it carries no "${exports.CONTEXT_VERSION_CLAIM}" claim.`
|
|
70
|
+
: `"${exports.CONTEXT_VERSION_CLAIM}" is ${JSON.stringify(declared)}; this ` +
|
|
71
|
+
`kernel reads version ${exports.SUPPORTED_CONTEXT_VERSION} only.`);
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
exports.UnsupportedContextVersionError = UnsupportedContextVersionError;
|
|
75
|
+
function normalizeClaimAuthorityClaims(payload, issuer) {
|
|
76
|
+
const ctxVer = payload[exports.CONTEXT_VERSION_CLAIM];
|
|
77
|
+
if (ctxVer !== exports.SUPPORTED_CONTEXT_VERSION) {
|
|
78
|
+
throw new UnsupportedContextVersionError(issuer, ctxVer);
|
|
79
|
+
}
|
|
80
|
+
const declaredClass = (0, actor_classification_1.asNonEmptyString)(payload[exports.TOKEN_CLASS_CLAIM]);
|
|
81
|
+
if (!declaredClass) {
|
|
82
|
+
throw new InvalidBoundaryContextError(issuer, `it carries no "${exports.TOKEN_CLASS_CLAIM}" claim.`);
|
|
83
|
+
}
|
|
84
|
+
if (!Object.values(subject_1.TokenClass).includes(declaredClass)) {
|
|
85
|
+
throw new InvalidBoundaryContextError(issuer, `"${exports.TOKEN_CLASS_CLAIM}" ${JSON.stringify(declaredClass)} is not a known TokenClass.`);
|
|
86
|
+
}
|
|
87
|
+
const tokenClass = declaredClass;
|
|
88
|
+
if (!(actor_classification_1.SUBJECT_KIND_CLAIM in payload)) {
|
|
89
|
+
throw new InvalidBoundaryContextError(issuer, `it carries no "${actor_classification_1.SUBJECT_KIND_CLAIM}" claim.`);
|
|
90
|
+
}
|
|
91
|
+
const boundaryKind = parseBoundarySubjectKind(payload[actor_classification_1.SUBJECT_KIND_CLAIM]);
|
|
92
|
+
if (!boundaryKind) {
|
|
93
|
+
throw new InvalidBoundaryContextError(issuer, `"${actor_classification_1.SUBJECT_KIND_CLAIM}" ${JSON.stringify(payload[actor_classification_1.SUBJECT_KIND_CLAIM])} ` +
|
|
94
|
+
`is not one of ${Object.values(BoundarySubjectKind).join(' | ')}.`);
|
|
95
|
+
}
|
|
96
|
+
const subjectKind = kernelSubjectKindForBoundary(boundaryKind);
|
|
97
|
+
if ((0, actor_classification_1.subjectKindForTokenClass)(tokenClass) !== subjectKind) {
|
|
98
|
+
throw new InvalidBoundaryContextError(issuer, `"${exports.TOKEN_CLASS_CLAIM}" '${tokenClass}' and "${actor_classification_1.SUBJECT_KIND_CLAIM}" ` +
|
|
99
|
+
`'${boundaryKind}' name different kinds of subject.`);
|
|
100
|
+
}
|
|
101
|
+
const rawRoles = payload[boundary_context_brand_1.PLATFORM_ROLES_CLAIM];
|
|
102
|
+
if (rawRoles !== undefined &&
|
|
103
|
+
(!Array.isArray(rawRoles) || rawRoles.some((r) => typeof r !== 'string'))) {
|
|
104
|
+
throw new InvalidBoundaryContextError(issuer, `"${boundary_context_brand_1.PLATFORM_ROLES_CLAIM}" must be an array of strings.`);
|
|
105
|
+
}
|
|
106
|
+
const platformRoles = rawRoles ?? [];
|
|
107
|
+
assertSingleOrgScope(payload, issuer);
|
|
108
|
+
const hasAct = payload[exports.ACT_CLAIM] !== undefined;
|
|
109
|
+
const hasDid = payload[exports.DELEGATION_ID_CLAIM] !== undefined;
|
|
110
|
+
if (hasDid && !(0, actor_classification_1.asNonEmptyString)(payload[exports.DELEGATION_ID_CLAIM])) {
|
|
111
|
+
throw new InvalidBoundaryContextError(issuer, `"${exports.DELEGATION_ID_CLAIM}" must be a non-empty string.`);
|
|
112
|
+
}
|
|
113
|
+
if (hasAct !== hasDid) {
|
|
114
|
+
throw new InvalidBoundaryContextError(issuer, hasAct
|
|
115
|
+
? `it carries "${exports.ACT_CLAIM}" with no "${exports.DELEGATION_ID_CLAIM}" — a ` +
|
|
116
|
+
`delegation with no validated record.`
|
|
117
|
+
: `it carries "${exports.DELEGATION_ID_CLAIM}" with no "${exports.ACT_CLAIM}".`);
|
|
118
|
+
}
|
|
119
|
+
const normalized = { ...payload };
|
|
120
|
+
delete normalized['realm_access'];
|
|
121
|
+
normalized[exports.TOKEN_CLASS_CLAIM] = tokenClass;
|
|
122
|
+
normalized[actor_classification_1.SUBJECT_KIND_CLAIM] = subjectKind;
|
|
123
|
+
normalized[boundary_context_brand_1.PLATFORM_ROLES_CLAIM] = [...platformRoles];
|
|
124
|
+
if (hasAct) {
|
|
125
|
+
normalized[exports.ACT_CLAIM] = normalizeActHops(payload[exports.ACT_CLAIM], issuer);
|
|
126
|
+
}
|
|
127
|
+
normalized[boundary_context_brand_1.BOUNDARY_CONTEXT_CLAIMS] = true;
|
|
128
|
+
return normalized;
|
|
129
|
+
}
|
|
130
|
+
function withoutPlatformAuthorityClaims(payload) {
|
|
131
|
+
const stripped = { ...payload };
|
|
132
|
+
for (const claim of [
|
|
133
|
+
...exports.PLATFORM_AUTHORITY_CLAIMS,
|
|
134
|
+
...exports.FOREIGN_CALLER_IDENTITY_CLAIMS,
|
|
135
|
+
]) {
|
|
136
|
+
delete stripped[claim];
|
|
137
|
+
}
|
|
138
|
+
return stripped;
|
|
139
|
+
}
|
|
140
|
+
function resolveDelegationIdFromBoundaryClaims(claims) {
|
|
141
|
+
return (0, actor_classification_1.asNonEmptyString)(claims[exports.DELEGATION_ID_CLAIM]);
|
|
142
|
+
}
|
|
143
|
+
function assertSingleOrgScope(payload, issuer) {
|
|
144
|
+
const orgRoles = (0, org_role_1.resolveOrgRoles)(payload);
|
|
145
|
+
const orgIds = Object.keys(orgRoles);
|
|
146
|
+
if (orgIds.length === 0)
|
|
147
|
+
return;
|
|
148
|
+
const tenant = (0, org_claim_1.resolveOrgClaim)(payload)?.value;
|
|
149
|
+
if (!tenant) {
|
|
150
|
+
throw new InvalidBoundaryContextError(issuer, `it carries "${org_role_1.OrgRolesClaimKey.Canonical}" but no ` +
|
|
151
|
+
`"${org_claim_1.OrgClaimKey.Canonical}" — a context is minted for ONE org.`);
|
|
152
|
+
}
|
|
153
|
+
const foreign = orgIds.filter((orgId) => orgId.toLowerCase() !== tenant.toLowerCase());
|
|
154
|
+
if (foreign.length > 0) {
|
|
155
|
+
throw new InvalidBoundaryContextError(issuer, `"${org_role_1.OrgRolesClaimKey.Canonical}" names org(s) other than the ` +
|
|
156
|
+
`"${org_claim_1.OrgClaimKey.Canonical}" it was minted for — a context carries ` +
|
|
157
|
+
`the roles of ONE org, never every membership.`);
|
|
158
|
+
}
|
|
159
|
+
}
|
|
160
|
+
function normalizeActHops(act, issuer) {
|
|
161
|
+
if (!act || typeof act !== 'object' || Array.isArray(act)) {
|
|
162
|
+
return act;
|
|
163
|
+
}
|
|
164
|
+
const hop = { ...act };
|
|
165
|
+
if (actor_classification_1.SUBJECT_KIND_CLAIM in hop) {
|
|
166
|
+
const kind = parseBoundarySubjectKind(hop[actor_classification_1.SUBJECT_KIND_CLAIM]);
|
|
167
|
+
if (!kind) {
|
|
168
|
+
throw new InvalidBoundaryContextError(issuer, `a delegation hop states "${actor_classification_1.SUBJECT_KIND_CLAIM}" ` +
|
|
169
|
+
`${JSON.stringify(hop[actor_classification_1.SUBJECT_KIND_CLAIM])}, outside the boundary vocabulary.`);
|
|
170
|
+
}
|
|
171
|
+
hop[actor_classification_1.SUBJECT_KIND_CLAIM] = kernelSubjectKindForBoundary(kind);
|
|
172
|
+
}
|
|
173
|
+
if (hop[exports.ACT_CLAIM] !== undefined) {
|
|
174
|
+
hop[exports.ACT_CLAIM] = normalizeActHops(hop[exports.ACT_CLAIM], issuer);
|
|
175
|
+
}
|
|
176
|
+
return hop;
|
|
177
|
+
}
|
|
178
|
+
//# sourceMappingURL=claim-authority.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"claim-authority.js","sourceRoot":"","sources":["../../../src/nestjs/auth/claim-authority.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"declared-subject-class.d.ts","sourceRoot":"","sources":["../../../src/nestjs/auth/declared-subject-class.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,qBAAqB,EAAE,MAAM,gBAAgB,CAAC;
|
|
1
|
+
{"version":3,"file":"declared-subject-class.d.ts","sourceRoot":"","sources":["../../../src/nestjs/auth/declared-subject-class.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,qBAAqB,EAAE,MAAM,gBAAgB,CAAC;AAOvD,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,wBAAwB,CAAC;AAiClE,qBAAa,gCAAiC,SAAQ,qBAAqB;gBAC7D,MAAM,EAAE,MAAM;CAY3B;AAWD,qBAAa,gCAAiC,SAAQ,qBAAqB;gBAC7D,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM;CAM7C;AAsCD,wBAAgB,8BAA8B,CAC5C,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EACjC,OAAO,EAAE,CAAC,EAAE,MAAM,EAAE,mBAAmB,GAAG,CAAC,CAe5C"}
|
|
@@ -4,15 +4,17 @@ exports.UnknownDeclaredSubjectClassError = exports.UnclassifiableForeignBearerEr
|
|
|
4
4
|
exports.claimsWithDeclaredSubjectClass = claimsWithDeclaredSubjectClass;
|
|
5
5
|
const common_1 = require("@nestjs/common");
|
|
6
6
|
const subject_1 = require("@xemahq/contracts/subject");
|
|
7
|
+
const claim_authority_1 = require("./claim-authority");
|
|
7
8
|
class UnclassifiableForeignBearerError extends common_1.UnauthorizedException {
|
|
8
9
|
constructor(issuer) {
|
|
9
10
|
super(`The access token was proved by trusted issuer '${issuer}', which ` +
|
|
10
|
-
`declares no "subjectClass"
|
|
11
|
-
`
|
|
11
|
+
`declares no "subjectClass". A token's own "token_class" is honoured ` +
|
|
12
|
+
`only from the claim authority, so nothing states what kind of ` +
|
|
13
|
+
`subject this is, and it is ` +
|
|
12
14
|
`refused rather than assumed to be a user — the assumption that a ` +
|
|
13
15
|
`signal-less token is a browser login holds for this deployment's own ` +
|
|
14
16
|
`realm and for nothing else. Declare "subjectClass" on the issuer's ` +
|
|
15
|
-
`registry entry, or
|
|
17
|
+
`registry entry, or "claimAuthority": true if it is the identity boundary.`);
|
|
16
18
|
}
|
|
17
19
|
}
|
|
18
20
|
exports.UnclassifiableForeignBearerError = UnclassifiableForeignBearerError;
|
|
@@ -26,9 +28,10 @@ exports.UnknownDeclaredSubjectClassError = UnknownDeclaredSubjectClassError;
|
|
|
26
28
|
function claimsWithDeclaredSubjectClass(payload, source) {
|
|
27
29
|
if (source.kind !== 'trusted-issuer')
|
|
28
30
|
return payload;
|
|
29
|
-
if (
|
|
30
|
-
return payload;
|
|
31
|
+
if (source.entry.claimAuthority === true) {
|
|
32
|
+
return (0, claim_authority_1.normalizeClaimAuthorityClaims)(payload, source.entry.issuer);
|
|
31
33
|
}
|
|
34
|
+
const foreign = (0, claim_authority_1.withoutPlatformAuthorityClaims)(payload);
|
|
32
35
|
const declared = source.entry.subjectClass;
|
|
33
36
|
if (!declared) {
|
|
34
37
|
throw new UnclassifiableForeignBearerError(source.entry.issuer);
|
|
@@ -37,6 +40,6 @@ function claimsWithDeclaredSubjectClass(payload, source) {
|
|
|
37
40
|
if (!parsed.success) {
|
|
38
41
|
throw new UnknownDeclaredSubjectClassError(source.entry.issuer, declared);
|
|
39
42
|
}
|
|
40
|
-
return { ...
|
|
43
|
+
return { ...foreign, token_class: parsed.data };
|
|
41
44
|
}
|
|
42
45
|
//# sourceMappingURL=declared-subject-class.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"declared-subject-class.js","sourceRoot":"","sources":["../../../src/nestjs/auth/declared-subject-class.ts"],"names":[],"mappings":";;;
|
|
1
|
+
{"version":3,"file":"declared-subject-class.js","sourceRoot":"","sources":["../../../src/nestjs/auth/declared-subject-class.ts"],"names":[],"mappings":";;;AA6GA,wEAiBC;AA9HD,2CAAuD;AACvD,uDAA6D;AAE7D,uDAG2B;AAkC3B,MAAa,gCAAiC,SAAQ,8BAAqB;IACzE,YAAY,MAAc;QACxB,KAAK,CACH,kDAAkD,MAAM,WAAW;YACjE,sEAAsE;YACtE,gEAAgE;YAChE,6BAA6B;YAC7B,mEAAmE;YACnE,uEAAuE;YACvE,qEAAqE;YACrE,2EAA2E,CAC9E,CAAC;IACJ,CAAC;CACF;AAbD,4EAaC;AAWD,MAAa,gCAAiC,SAAQ,8BAAqB;IACzE,YAAY,MAAc,EAAE,QAAgB;QAC1C,KAAK,CACH,mBAAmB,MAAM,0BAA0B;YACjD,IAAI,QAAQ,qCAAqC,CACpD,CAAC;IACJ,CAAC;CACF;AAPD,4EAOC;AAsCD,SAAgB,8BAA8B,CAE5C,OAAU,EAAE,MAA2B;IACvC,IAAI,MAAM,CAAC,IAAI,KAAK,gBAAgB;QAAE,OAAO,OAAO,CAAC;IACrD,IAAI,MAAM,CAAC,KAAK,CAAC,cAAc,KAAK,IAAI,EAAE,CAAC;QACzC,OAAO,IAAA,+CAA6B,EAAC,OAAO,EAAE,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;IACrE,CAAC;IACD,MAAM,OAAO,GAAG,IAAA,gDAA8B,EAAC,OAAO,CAAC,CAAC;IACxD,MAAM,QAAQ,GAAG,MAAM,CAAC,KAAK,CAAC,YAAY,CAAC;IAC3C,IAAI,CAAC,QAAQ,EAAE,CAAC;QACd,MAAM,IAAI,gCAAgC,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;IAClE,CAAC;IACD,MAAM,MAAM,GAAG,0BAAgB,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC;IACpD,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;QACpB,MAAM,IAAI,gCAAgC,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;IAC5E,CAAC;IACD,OAAO,EAAE,GAAG,OAAO,EAAE,WAAW,EAAE,MAAM,CAAC,IAAI,EAAE,CAAC;AAClD,CAAC"}
|
|
@@ -20,5 +20,7 @@ export { resolveActorChainFromClaims, UnclassifiableActorHopError, UnknownActorH
|
|
|
20
20
|
export { SUBJECT_KIND_CLAIM, readDeclaredSubjectKind, UnknownTokenClassError, } from './actor-classification';
|
|
21
21
|
export { RealmTokenVerifier, type MultiRealmKeySource, type VerifiedTokenSource, } from './realm-token-verifier';
|
|
22
22
|
export { UnclassifiableForeignBearerError, UnknownDeclaredSubjectClassError, claimsWithDeclaredSubjectClass, } from './declared-subject-class';
|
|
23
|
+
export { BoundarySubjectKind, CONTEXT_VERSION_CLAIM, DELEGATION_ID_CLAIM, FOREIGN_CALLER_IDENTITY_CLAIMS, InvalidBoundaryContextError, PLATFORM_AUTHORITY_CLAIMS, SUPPORTED_CONTEXT_VERSION, UnsupportedContextVersionError, kernelSubjectKindForBoundary, } from './claim-authority';
|
|
24
|
+
export { PLATFORM_ROLES_CLAIM } from './boundary-context-brand';
|
|
23
25
|
export { DEFAULT_TRUSTED_ISSUER_ALGORITHMS, TRUSTED_ISSUERS_ENV_VAR, TrustedIssuerConfigError, TrustedIssuerRegistry, parseTrustedIssuersFromEnv, type TrustedIssuerEntry, } from '@xemahq/oidc-guard';
|
|
24
26
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/nestjs/auth/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAC3C,OAAO,EACL,mBAAmB,EACnB,KAAK,iBAAiB,EACtB,KAAK,sBAAsB,GAC5B,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAC;AAC1D,OAAO,EAAE,mBAAmB,EAAE,MAAM,yBAAyB,CAAC;AAC9D,OAAO,EACL,iBAAiB,EACjB,oBAAoB,GACrB,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EACL,eAAe,EACf,iBAAiB,EACjB,mBAAmB,GACpB,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EACL,YAAY,EACZ,cAAc,EACd,gBAAgB,GACjB,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EAAE,qBAAqB,EAAE,MAAM,6BAA6B,CAAC;AACpE,OAAO,EACL,OAAO,EACP,gBAAgB,EAChB,oBAAoB,EACpB,eAAe,EACf,oBAAoB,EACpB,gBAAgB,GACjB,MAAM,yBAAyB,CAAC;AACjC,OAAO,EAAE,YAAY,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAChE,OAAO,EACL,iBAAiB,EACjB,6BAA6B,EAC7B,KAAK,sBAAsB,GAC5B,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EAAE,kBAAkB,EAAE,MAAM,wBAAwB,CAAC;AAC5D,OAAO,EACL,uBAAuB,EACvB,KAAK,8BAA8B,GACpC,MAAM,6BAA6B,CAAC;AACrC,OAAO,EACL,WAAW,EACX,aAAa,EACb,cAAc,EACd,eAAe,GAChB,MAAM,0BAA0B,CAAC;AAClC,OAAO,EAAE,yBAAyB,EAAE,4BAA4B,EAAE,MAAM,iCAAiC,CAAC;AAC1G,OAAO,EACL,kBAAkB,EAClB,KAAK,mBAAmB,EACxB,KAAK,kBAAkB,EACvB,KAAK,uBAAuB,EAC5B,mBAAmB,EACnB,oBAAoB,EACpB,yBAAyB,GAC1B,MAAM,8BAA8B,CAAC;AACtC,OAAO,EACL,kBAAkB,EAClB,KAAK,eAAe,EACpB,KAAK,oBAAoB,EACzB,qBAAqB,EACrB,yBAAyB,EACzB,qBAAqB,EACrB,yBAAyB,EACzB,uBAAuB,EACvB,kBAAkB,EAClB,KAAK,wBAAwB,EAC7B,cAAc,GACf,MAAM,+BAA+B,CAAC;AACvC,OAAO,EACL,+BAA+B,EAC/B,iBAAiB,EACjB,KAAK,uBAAuB,EAC5B,KAAK,kBAAkB,EACvB,0BAA0B,EAC1B,gCAAgC,EAChC,kBAAkB,EAClB,uBAAuB,EACvB,uBAAuB,GACxB,MAAM,2CAA2C,CAAC;AACnD,OAAO,EACL,2BAA2B,EAC3B,2BAA2B,EAC3B,+BAA+B,EAC/B,8BAA8B,EAC9B,sBAAsB,GACvB,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EACL,kBAAkB,EAClB,uBAAuB,EACvB,sBAAsB,GACvB,MAAM,wBAAwB,CAAC;AAChC,OAAO,EACL,kBAAkB,EAClB,KAAK,mBAAmB,EACxB,KAAK,mBAAmB,GACzB,MAAM,wBAAwB,CAAC;AAChC,OAAO,EACL,gCAAgC,EAChC,gCAAgC,EAChC,8BAA8B,GAC/B,MAAM,0BAA0B,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/nestjs/auth/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.resetOrgAuthorityCensus = exports.orgAuthorityRelayCensus = exports.orgAuthorityCensus = exports.recordServiceRelayedOrgAuthority = exports.recordUnprovenOrgAuthority = exports.UNKNOWN_CLIENT_ID = exports.ORG_AUTHORITY_OBSERVATION_LIMIT = exports.orgScopedClaim = exports.mintOrgScopedToken = exports.describeOrgScopeWitness = exports.orgScopeFromPlatformSweep = exports.orgScopeFromOwningRow = exports.orgScopeFromProvenRequest = exports.UnprovenOrgScopeError = exports.OrgScopeProvenance = exports.orgAuthorityRequiresProof = exports.isOrgAuthorityProven = exports.resolveOrgAuthority = exports.OrgAuthoritySource = exports.REQUIRE_PROVEN_ORG_AUTHORITY = exports.RequireProvenOrgAuthority = exports.resolveOrgClaim = exports.ORG_CLAIM_KEYS = exports.OrgHeaderName = exports.OrgClaimKey = exports.configureAuthMiddleware = exports.PlatformAdminGuard = exports.resolveOrgAuthorityInstrument = exports.holdsOrgAuthority = exports.hasPlatformRole = exports.PlatformRole = exports.orgRoleSatisfies = exports.resolveOrgRoleForOrg = exports.resolveOrgRoles = exports.ORG_ROLES_CLAIM_KEYS = exports.OrgRolesClaimKey = exports.OrgRole = exports.ServiceOrOrgRoleGuard = exports.REQUIRE_ORG_ROLE = exports.RequireOrgRole = exports.OrgRoleGuard = exports.REQUIRE_TOKEN_CLASS = exports.RequireTokenClass = exports.TokenClassGuard = exports.isDirectServiceActor = exports.ServiceActorGuard = exports.InternalCallerGuard = exports.ServiceTokenGuard = exports.AUTH_MODULE_OPTIONS = exports.AuthModule = void 0;
|
|
4
|
-
exports.parseTrustedIssuersFromEnv = exports.TrustedIssuerRegistry = exports.TrustedIssuerConfigError = exports.TRUSTED_ISSUERS_ENV_VAR = exports.DEFAULT_TRUSTED_ISSUER_ALGORITHMS = exports.claimsWithDeclaredSubjectClass = exports.UnknownDeclaredSubjectClassError = exports.UnclassifiableForeignBearerError = exports.RealmTokenVerifier = exports.UnknownTokenClassError = exports.readDeclaredSubjectKind = exports.SUBJECT_KIND_CLAIM = exports.MalformedActorHopError = exports.ContradictoryActorHopKindError = exports.UnknownActorHopSubjectKindError = exports.UnclassifiableActorHopError = exports.resolveActorChainFromClaims = void 0;
|
|
4
|
+
exports.parseTrustedIssuersFromEnv = exports.TrustedIssuerRegistry = exports.TrustedIssuerConfigError = exports.TRUSTED_ISSUERS_ENV_VAR = exports.DEFAULT_TRUSTED_ISSUER_ALGORITHMS = exports.PLATFORM_ROLES_CLAIM = exports.kernelSubjectKindForBoundary = exports.UnsupportedContextVersionError = exports.SUPPORTED_CONTEXT_VERSION = exports.PLATFORM_AUTHORITY_CLAIMS = exports.InvalidBoundaryContextError = exports.FOREIGN_CALLER_IDENTITY_CLAIMS = exports.DELEGATION_ID_CLAIM = exports.CONTEXT_VERSION_CLAIM = exports.BoundarySubjectKind = exports.claimsWithDeclaredSubjectClass = exports.UnknownDeclaredSubjectClassError = exports.UnclassifiableForeignBearerError = exports.RealmTokenVerifier = exports.UnknownTokenClassError = exports.readDeclaredSubjectKind = exports.SUBJECT_KIND_CLAIM = exports.MalformedActorHopError = exports.ContradictoryActorHopKindError = exports.UnknownActorHopSubjectKindError = exports.UnclassifiableActorHopError = exports.resolveActorChainFromClaims = void 0;
|
|
5
5
|
var auth_module_1 = require("./auth.module");
|
|
6
6
|
Object.defineProperty(exports, "AuthModule", { enumerable: true, get: function () { return auth_module_1.AuthModule; } });
|
|
7
7
|
var auth_module_options_1 = require("./auth-module-options");
|
|
@@ -86,6 +86,18 @@ var declared_subject_class_1 = require("./declared-subject-class");
|
|
|
86
86
|
Object.defineProperty(exports, "UnclassifiableForeignBearerError", { enumerable: true, get: function () { return declared_subject_class_1.UnclassifiableForeignBearerError; } });
|
|
87
87
|
Object.defineProperty(exports, "UnknownDeclaredSubjectClassError", { enumerable: true, get: function () { return declared_subject_class_1.UnknownDeclaredSubjectClassError; } });
|
|
88
88
|
Object.defineProperty(exports, "claimsWithDeclaredSubjectClass", { enumerable: true, get: function () { return declared_subject_class_1.claimsWithDeclaredSubjectClass; } });
|
|
89
|
+
var claim_authority_1 = require("./claim-authority");
|
|
90
|
+
Object.defineProperty(exports, "BoundarySubjectKind", { enumerable: true, get: function () { return claim_authority_1.BoundarySubjectKind; } });
|
|
91
|
+
Object.defineProperty(exports, "CONTEXT_VERSION_CLAIM", { enumerable: true, get: function () { return claim_authority_1.CONTEXT_VERSION_CLAIM; } });
|
|
92
|
+
Object.defineProperty(exports, "DELEGATION_ID_CLAIM", { enumerable: true, get: function () { return claim_authority_1.DELEGATION_ID_CLAIM; } });
|
|
93
|
+
Object.defineProperty(exports, "FOREIGN_CALLER_IDENTITY_CLAIMS", { enumerable: true, get: function () { return claim_authority_1.FOREIGN_CALLER_IDENTITY_CLAIMS; } });
|
|
94
|
+
Object.defineProperty(exports, "InvalidBoundaryContextError", { enumerable: true, get: function () { return claim_authority_1.InvalidBoundaryContextError; } });
|
|
95
|
+
Object.defineProperty(exports, "PLATFORM_AUTHORITY_CLAIMS", { enumerable: true, get: function () { return claim_authority_1.PLATFORM_AUTHORITY_CLAIMS; } });
|
|
96
|
+
Object.defineProperty(exports, "SUPPORTED_CONTEXT_VERSION", { enumerable: true, get: function () { return claim_authority_1.SUPPORTED_CONTEXT_VERSION; } });
|
|
97
|
+
Object.defineProperty(exports, "UnsupportedContextVersionError", { enumerable: true, get: function () { return claim_authority_1.UnsupportedContextVersionError; } });
|
|
98
|
+
Object.defineProperty(exports, "kernelSubjectKindForBoundary", { enumerable: true, get: function () { return claim_authority_1.kernelSubjectKindForBoundary; } });
|
|
99
|
+
var boundary_context_brand_1 = require("./boundary-context-brand");
|
|
100
|
+
Object.defineProperty(exports, "PLATFORM_ROLES_CLAIM", { enumerable: true, get: function () { return boundary_context_brand_1.PLATFORM_ROLES_CLAIM; } });
|
|
89
101
|
var oidc_guard_1 = require("@xemahq/oidc-guard");
|
|
90
102
|
Object.defineProperty(exports, "DEFAULT_TRUSTED_ISSUER_ALGORITHMS", { enumerable: true, get: function () { return oidc_guard_1.DEFAULT_TRUSTED_ISSUER_ALGORITHMS; } });
|
|
91
103
|
Object.defineProperty(exports, "TRUSTED_ISSUERS_ENV_VAR", { enumerable: true, get: function () { return oidc_guard_1.TRUSTED_ISSUERS_ENV_VAR; } });
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/nestjs/auth/index.ts"],"names":[],"mappings":";;;;AAAA,6CAA2C;AAAlC,yGAAA,UAAU,OAAA;AACnB,6DAI+B;AAH7B,0HAAA,mBAAmB,OAAA;AAIrB,6DAA0D;AAAjD,wHAAA,iBAAiB,OAAA;AAC1B,iEAA8D;AAArD,4HAAA,mBAAmB,OAAA;AAC5B,6DAG+B;AAF7B,wHAAA,iBAAiB,OAAA;AACjB,2HAAA,oBAAoB,OAAA;AAEtB,yDAI6B;AAH3B,oHAAA,eAAe,OAAA;AACf,sHAAA,iBAAiB,OAAA;AACjB,wHAAA,mBAAmB,OAAA;AAErB,mDAI0B;AAHxB,8GAAA,YAAY,OAAA;AACZ,gHAAA,cAAc,OAAA;AACd,kHAAA,gBAAgB,OAAA;AAElB,yEAAoE;AAA3D,kIAAA,qBAAqB,OAAA;AAC9B,oDAOiC;AAN/B,mGAAA,OAAO,OAAA;AACP,4GAAA,gBAAgB,OAAA;AAChB,gHAAA,oBAAoB,OAAA;AACpB,2GAAA,eAAe,OAAA;AACf,gHAAA,oBAAoB,OAAA;AACpB,4GAAA,gBAAgB,OAAA;AAElB,iDAAgE;AAAvD,6GAAA,YAAY,OAAA;AAAE,gHAAA,eAAe,OAAA;AACtC,6DAI+B;AAH7B,wHAAA,iBAAiB,OAAA;AACjB,oIAAA,6BAA6B,OAAA;AAG/B,+DAA4D;AAAnD,0HAAA,kBAAkB,OAAA;AAC3B,yEAGqC;AAFnC,oIAAA,uBAAuB,OAAA;AAGzB,sDAKkC;AAJhC,wGAAA,WAAW,OAAA;AACX,0GAAA,aAAa,OAAA;AACb,2GAAA,cAAc,OAAA;AACd,4GAAA,eAAe,OAAA;AAEjB,iFAA0G;AAAjG,0IAAA,yBAAyB,OAAA;AAAE,6IAAA,4BAA4B,OAAA;AAChE,8DAQsC;AAPpC,mHAAA,kBAAkB,OAAA;AAIlB,oHAAA,mBAAmB,OAAA;AACnB,qHAAA,oBAAoB,OAAA;AACpB,0HAAA,yBAAyB,OAAA;AAE3B,gEAYuC;AAXrC,oHAAA,kBAAkB,OAAA;AAGlB,uHAAA,qBAAqB,OAAA;AACrB,2HAAA,yBAAyB,OAAA;AACzB,uHAAA,qBAAqB,OAAA;AACrB,2HAAA,yBAAyB,OAAA;AACzB,yHAAA,uBAAuB,OAAA;AACvB,oHAAA,kBAAkB,OAAA;AAElB,gHAAA,cAAc,OAAA;AAEhB,wFAUmD;AATjD,6IAAA,+BAA+B,OAAA;AAC/B,+HAAA,iBAAiB,OAAA;AAGjB,wIAAA,0BAA0B,OAAA;AAC1B,8IAAA,gCAAgC,OAAA;AAChC,gIAAA,kBAAkB,OAAA;AAClB,qIAAA,uBAAuB,OAAA;AACvB,qIAAA,uBAAuB,OAAA;AAEzB,uDAM4B;AAL1B,+HAAA,2BAA2B,OAAA;AAC3B,+HAAA,2BAA2B,OAAA;AAC3B,mIAAA,+BAA+B,OAAA;AAC/B,kIAAA,8BAA8B,OAAA;AAC9B,0HAAA,sBAAsB,OAAA;AAExB,+DAIgC;AAH9B,0HAAA,kBAAkB,OAAA;AAClB,+HAAA,uBAAuB,OAAA;AACvB,8HAAA,sBAAsB,OAAA;AAExB,+DAIgC;AAH9B,0HAAA,kBAAkB,OAAA;AAIpB,mEAIkC;AAHhC,0IAAA,gCAAgC,OAAA;AAChC,0IAAA,gCAAgC,OAAA;AAChC,wIAAA,8BAA8B,OAAA;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/nestjs/auth/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import type { SubjectKind, TokenClass } from '@xemahq/contracts/subject';
|
|
2
|
+
import { OrgHeaderName } from '../../lib/auth/org-claim';
|
|
3
|
+
import { type OrgAuthorityVerdict } from '../../lib/auth/org-authority';
|
|
4
|
+
export interface OrgAuthorityLogger {
|
|
5
|
+
log(message: unknown): void;
|
|
6
|
+
warn(message: unknown): void;
|
|
7
|
+
}
|
|
8
|
+
export declare function assertOrgHeaderPresentForCaller(orgId: string | undefined, actorType: 'human' | 'agent' | 'service'): void;
|
|
9
|
+
export declare function assertOrgClaimMatchesHeader(logger: OrgAuthorityLogger, claims: Record<string, unknown>, headerValue: string, headerName: OrgHeaderName): void;
|
|
10
|
+
export declare function fenceOrgAuthority(logger: OrgAuthorityLogger, claims: Record<string, unknown>, resolvedOrgId: string, facts: {
|
|
11
|
+
tokenClass: TokenClass;
|
|
12
|
+
subjectKind: SubjectKind;
|
|
13
|
+
clientId: string | undefined;
|
|
14
|
+
delegated: boolean;
|
|
15
|
+
}, route: string, correlationId: string): OrgAuthorityVerdict;
|
|
16
|
+
//# sourceMappingURL=org-authority-fence.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"org-authority-fence.d.ts","sourceRoot":"","sources":["../../../src/nestjs/auth/org-authority-fence.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,2BAA2B,CAAC;AAEzE,OAAO,EAAe,aAAa,EAAmB,MAAM,0BAA0B,CAAC;AACvF,OAAO,EAIL,KAAK,mBAAmB,EACzB,MAAM,8BAA8B,CAAC;AAqBtC,MAAM,WAAW,kBAAkB;IACjC,GAAG,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAAC;IAC5B,IAAI,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAAC;CAC9B;AAMD,wBAAgB,+BAA+B,CAC7C,KAAK,EAAE,MAAM,GAAG,SAAS,EACzB,SAAS,EAAE,OAAO,GAAG,OAAO,GAAG,SAAS,GACvC,IAAI,CAMN;AAiBD,wBAAgB,2BAA2B,CACzC,MAAM,EAAE,kBAAkB,EAC1B,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC/B,WAAW,EAAE,MAAM,EACnB,UAAU,EAAE,aAAa,GACxB,IAAI,CAkBN;AAgCD,wBAAgB,iBAAiB,CAC/B,MAAM,EAAE,kBAAkB,EAC1B,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC/B,aAAa,EAAE,MAAM,EACrB,KAAK,EAAE;IACL,UAAU,EAAE,UAAU,CAAC;IACvB,WAAW,EAAE,WAAW,CAAC;IACzB,QAAQ,EAAE,MAAM,GAAG,SAAS,CAAC;IAC7B,SAAS,EAAE,OAAO,CAAC;CACpB,EACD,KAAK,EAAE,MAAM,EACb,aAAa,EAAE,MAAM,GACpB,mBAAmB,CAiDrB"}
|
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.assertOrgHeaderPresentForCaller = assertOrgHeaderPresentForCaller;
|
|
4
|
+
exports.assertOrgClaimMatchesHeader = assertOrgClaimMatchesHeader;
|
|
5
|
+
exports.fenceOrgAuthority = fenceOrgAuthority;
|
|
6
|
+
const common_1 = require("@nestjs/common");
|
|
7
|
+
const org_claim_1 = require("../../lib/auth/org-claim");
|
|
8
|
+
const org_authority_1 = require("../../lib/auth/org-authority");
|
|
9
|
+
const org_authority_observations_1 = require("../../lib/auth/org-authority-observations");
|
|
10
|
+
function assertOrgHeaderPresentForCaller(orgId, actorType) {
|
|
11
|
+
if (!orgId && actorType !== 'service') {
|
|
12
|
+
throw new common_1.BadRequestException(`Missing required header: ${org_claim_1.OrgHeaderName.Canonical}`);
|
|
13
|
+
}
|
|
14
|
+
}
|
|
15
|
+
function assertOrgClaimMatchesHeader(logger, claims, headerValue, headerName) {
|
|
16
|
+
const resolved = (0, org_claim_1.resolveOrgClaim)(claims);
|
|
17
|
+
if (!resolved) {
|
|
18
|
+
return;
|
|
19
|
+
}
|
|
20
|
+
if (resolved.value.toLowerCase() !== headerValue.toLowerCase()) {
|
|
21
|
+
logger.warn({
|
|
22
|
+
message: 'tenant-claim-mismatch',
|
|
23
|
+
claim: resolved.key,
|
|
24
|
+
claimValue: resolved.value,
|
|
25
|
+
header: headerName,
|
|
26
|
+
headerValue,
|
|
27
|
+
});
|
|
28
|
+
throw new common_1.ForbiddenException(`${headerName} (${headerValue || '<empty>'}) does not match ` +
|
|
29
|
+
`the ${resolved.key} claim on the access token.`);
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
function fenceOrgAuthority(logger, claims, resolvedOrgId, facts, route, correlationId) {
|
|
33
|
+
const verdict = (0, org_authority_1.resolveOrgAuthority)(claims, resolvedOrgId, {
|
|
34
|
+
subjectKind: facts.subjectKind,
|
|
35
|
+
delegated: facts.delegated,
|
|
36
|
+
});
|
|
37
|
+
const callerFacts = {
|
|
38
|
+
clientId: facts.clientId ?? org_authority_observations_1.UNKNOWN_CLIENT_ID,
|
|
39
|
+
tokenClass: facts.tokenClass,
|
|
40
|
+
subjectKind: facts.subjectKind,
|
|
41
|
+
delegated: facts.delegated,
|
|
42
|
+
};
|
|
43
|
+
if (verdict.source === org_authority_1.OrgAuthoritySource.ServiceRelayedContext) {
|
|
44
|
+
if ((0, org_authority_observations_1.recordServiceRelayedOrgAuthority)(callerFacts)) {
|
|
45
|
+
logger.log({
|
|
46
|
+
message: 'ORG_AUTHORITY_SERVICE_RELAY',
|
|
47
|
+
source: verdict.source,
|
|
48
|
+
orgId: verdict.assertedOrgId,
|
|
49
|
+
...callerFacts,
|
|
50
|
+
route,
|
|
51
|
+
correlationId,
|
|
52
|
+
});
|
|
53
|
+
}
|
|
54
|
+
return verdict;
|
|
55
|
+
}
|
|
56
|
+
if (!(0, org_authority_1.orgAuthorityRequiresProof)(verdict)) {
|
|
57
|
+
return verdict;
|
|
58
|
+
}
|
|
59
|
+
if ((0, org_authority_observations_1.recordUnprovenOrgAuthority)(callerFacts)) {
|
|
60
|
+
logger.warn({
|
|
61
|
+
message: 'ORG_AUTHORITY_UNPROVEN',
|
|
62
|
+
source: verdict.source,
|
|
63
|
+
orgId: verdict.assertedOrgId,
|
|
64
|
+
...callerFacts,
|
|
65
|
+
route,
|
|
66
|
+
correlationId,
|
|
67
|
+
});
|
|
68
|
+
}
|
|
69
|
+
throw new common_1.ForbiddenException({
|
|
70
|
+
code: 'ORG_AUTHORITY_UNPROVEN',
|
|
71
|
+
message: `The caller asserted ${org_claim_1.OrgHeaderName.Canonical}=` +
|
|
72
|
+
`"${verdict.assertedOrgId}" but the access token carries neither an ` +
|
|
73
|
+
`${org_claim_1.OrgClaimKey.Canonical} claim for that org nor an org_roles ` +
|
|
74
|
+
`membership in it. A tenant cannot be named by header alone.`,
|
|
75
|
+
});
|
|
76
|
+
}
|
|
77
|
+
//# sourceMappingURL=org-authority-fence.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"org-authority-fence.js","sourceRoot":"","sources":["../../../src/nestjs/auth/org-authority-fence.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"service-token.guard.d.ts","sourceRoot":"","sources":["../../../src/nestjs/auth/service-token.guard.ts"],"names":[],"mappings":"AAyEA,OAAO,EACL,WAAW,EACX,gBAAgB,EAKhB,sBAAsB,EAGvB,MAAM,gBAAgB,CAAC;AAYxB,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAC;
|
|
1
|
+
{"version":3,"file":"service-token.guard.d.ts","sourceRoot":"","sources":["../../../src/nestjs/auth/service-token.guard.ts"],"names":[],"mappings":"AAyEA,OAAO,EACL,WAAW,EACX,gBAAgB,EAKhB,sBAAsB,EAGvB,MAAM,gBAAgB,CAAC;AAYxB,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAC;AAQ/D,qBACa,iBAAkB,YAAW,WAAW,EAAE,sBAAsB;IAC3E,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAsC;IAC7D,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAqB;gBAK5C,WAAW,CAAC,EAAE,iBAAiB;IAoB3B,sBAAsB,IAAI,OAAO,CAAC,IAAI,CAAC;IAIvC,WAAW,CAAC,OAAO,EAAE,gBAAgB,GAAG,OAAO,CAAC,OAAO,CAAC;IA8H9D,OAAO,CAAC,wBAAwB;IAiIhC,OAAO,CAAC,uBAAuB;YAmCjB,WAAW;IAiBzB,OAAO,CAAC,WAAW;IA0BnB,OAAO,CAAC,2BAA2B;CA4BpC"}
|
|
@@ -21,6 +21,7 @@ const org_authority_1 = require("../../lib/auth/org-authority");
|
|
|
21
21
|
const org_claim_1 = require("../../lib/auth/org-claim");
|
|
22
22
|
const auth_module_options_1 = require("./auth-module-options");
|
|
23
23
|
const proven_org_authority_required_1 = require("./proven-org-authority-required");
|
|
24
|
+
const declared_subject_class_1 = require("./declared-subject-class");
|
|
24
25
|
const realm_token_verifier_1 = require("./realm-token-verifier");
|
|
25
26
|
const decorator_metadata_1 = require("../decorator-metadata");
|
|
26
27
|
let ServiceTokenGuard = ServiceTokenGuard_1 = class ServiceTokenGuard {
|
|
@@ -145,7 +146,8 @@ let ServiceTokenGuard = ServiceTokenGuard_1 = class ServiceTokenGuard {
|
|
|
145
146
|
}
|
|
146
147
|
async verifyToken(token) {
|
|
147
148
|
try {
|
|
148
|
-
|
|
149
|
+
const { payload, source } = await this.verifier.verifyWithSource(token);
|
|
150
|
+
return (0, declared_subject_class_1.claimsWithDeclaredSubjectClass)(payload, source);
|
|
149
151
|
}
|
|
150
152
|
catch (error) {
|
|
151
153
|
if (error instanceof oidc_guard_1.JwksVerificationError) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"service-token.guard.js","sourceRoot":"","sources":["../../../src/nestjs/auth/service-token.guard.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAyEA,2CAUwB;AACxB,uDAAoE;AACpE,mDAA2D;AAG3D,gEAIsC;AACtC,wDAA0E;AAC1E,+DAA4D;AAE5D,mFAA+E;AAC/E,iEAA4D;AAC5D,8DAA8D;AAKvD,IAAM,iBAAiB,yBAAvB,MAAM,iBAAiB;IACX,MAAM,GAAG,IAAI,eAAM,CAAC,mBAAiB,CAAC,IAAI,CAAC,CAAC;IAC5C,QAAQ,CAAqB;IAE9C,YAGE,WAA+B;QAE/B,IAAI,CAAC,QAAQ,GAAG,IAAI,yCAAkB,CAAC,WAAW,CAAC,CAAC;IACtD,CAAC;IAiBD,KAAK,CAAC,sBAAsB;QAC1B,MAAM,IAAI,CAAC,QAAQ,CAAC,yBAAyB,CAAC,mBAAiB,CAAC,IAAI,CAAC,CAAC;IACxE,CAAC;IAED,KAAK,CAAC,WAAW,CAAC,OAAyB;QACzC,MAAM,OAAO,GAAG,OAAO,CAAC,YAAY,EAAE,CAAC,UAAU,EAAE,CAAC;QACpD,MAAM,UAAU,GAAG,OAAO,CAAC,OAAO,CAAC,aAAmC,CAAC;QAEvE,IAAI,CAAC,UAAU,EAAE,UAAU,CAAC,SAAS,CAAC,EAAE,CAAC;YACvC,MAAM,IAAI,8BAAqB,CAC7B,yCAAyC,CAC1C,CAAC;QACJ,CAAC;QAED,MAAM,KAAK,GAAG,UAAU,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;QAEtC,IAAI,CAAC;
|
|
1
|
+
{"version":3,"file":"service-token.guard.js","sourceRoot":"","sources":["../../../src/nestjs/auth/service-token.guard.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import type { CorsOptions } from '@nestjs/common/interfaces/external/cors-options.interface';
|
|
2
2
|
export declare function isOriginAllowed(origin: string, allowedOrigins?: string): boolean;
|
|
3
3
|
export declare function getCorsConfig(allowedOrigins?: string): CorsOptions;
|
|
4
|
+
export declare function getExactCorsConfig(origins: readonly string[]): CorsOptions;
|
|
4
5
|
//# sourceMappingURL=cors.config.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cors.config.d.ts","sourceRoot":"","sources":["../../src/nestjs/cors.config.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,2DAA2D,CAAC;
|
|
1
|
+
{"version":3,"file":"cors.config.d.ts","sourceRoot":"","sources":["../../src/nestjs/cors.config.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,2DAA2D,CAAC;AAoG7F,wBAAgB,eAAe,CAAC,MAAM,EAAE,MAAM,EAAE,cAAc,CAAC,EAAE,MAAM,GAAG,OAAO,CAShF;AASD,wBAAgB,aAAa,CAAC,cAAc,CAAC,EAAE,MAAM,GAAG,WAAW,CAqDlE;AAqBD,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,SAAS,MAAM,EAAE,GAAG,WAAW,CAwC1E"}
|
|
@@ -2,9 +2,41 @@
|
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.isOriginAllowed = isOriginAllowed;
|
|
4
4
|
exports.getCorsConfig = getCorsConfig;
|
|
5
|
+
exports.getExactCorsConfig = getExactCorsConfig;
|
|
5
6
|
const common_1 = require("@nestjs/common");
|
|
6
7
|
const execution_environment_1 = require("@xemahq/contracts/execution-environment");
|
|
7
8
|
const logger = new common_1.Logger('CORS');
|
|
9
|
+
const OPAQUE_ORIGIN = 'null';
|
|
10
|
+
const REFUSE_WITH_VARY = [];
|
|
11
|
+
const CORS_POLICY = {
|
|
12
|
+
credentials: true,
|
|
13
|
+
methods: ['GET', 'POST', 'PUT', 'PATCH', 'DELETE', 'OPTIONS'],
|
|
14
|
+
allowedHeaders: [
|
|
15
|
+
'Content-Type',
|
|
16
|
+
'Authorization',
|
|
17
|
+
'X-Requested-With',
|
|
18
|
+
'Accept',
|
|
19
|
+
'Origin',
|
|
20
|
+
'X-Xema-Org-Id',
|
|
21
|
+
'X-Org-Id',
|
|
22
|
+
'X-Project-Id',
|
|
23
|
+
'X-Correlation-Id',
|
|
24
|
+
'X-Request-Id',
|
|
25
|
+
'X-Last-Seen-Sequence',
|
|
26
|
+
'Last-Event-ID',
|
|
27
|
+
'Idempotency-Key',
|
|
28
|
+
'If-Match',
|
|
29
|
+
'x-api-key',
|
|
30
|
+
'x-internal-token',
|
|
31
|
+
execution_environment_1.EXECUTION_ENVIRONMENT_HEADER,
|
|
32
|
+
],
|
|
33
|
+
exposedHeaders: [
|
|
34
|
+
'X-RateLimit-Limit',
|
|
35
|
+
'X-RateLimit-Remaining',
|
|
36
|
+
'X-RateLimit-Reset',
|
|
37
|
+
'ETag',
|
|
38
|
+
],
|
|
39
|
+
};
|
|
8
40
|
function originMatchesPattern(origin, pattern) {
|
|
9
41
|
const trimmedPattern = pattern.trim();
|
|
10
42
|
if (trimmedPattern.includes('*')) {
|
|
@@ -19,7 +51,7 @@ function originMatchesPattern(origin, pattern) {
|
|
|
19
51
|
origin === trimmedPattern);
|
|
20
52
|
}
|
|
21
53
|
function isOriginAllowed(origin, allowedOrigins) {
|
|
22
|
-
if (!allowedOrigins) {
|
|
54
|
+
if (!allowedOrigins || origin === OPAQUE_ORIGIN) {
|
|
23
55
|
return false;
|
|
24
56
|
}
|
|
25
57
|
return allowedOrigins
|
|
@@ -56,34 +88,47 @@ function getCorsConfig(allowedOrigins) {
|
|
|
56
88
|
}
|
|
57
89
|
else {
|
|
58
90
|
logger.warn(`CORS blocked origin: ${origin}`);
|
|
59
|
-
callback(null,
|
|
91
|
+
callback(null, REFUSE_WITH_VARY);
|
|
92
|
+
}
|
|
93
|
+
},
|
|
94
|
+
...CORS_POLICY,
|
|
95
|
+
};
|
|
96
|
+
}
|
|
97
|
+
function getExactCorsConfig(origins) {
|
|
98
|
+
if (origins.length === 0) {
|
|
99
|
+
throw new Error('getExactCorsConfig needs at least one origin.');
|
|
100
|
+
}
|
|
101
|
+
const allowed = new Map();
|
|
102
|
+
for (const entry of origins) {
|
|
103
|
+
let canonical;
|
|
104
|
+
try {
|
|
105
|
+
canonical = new URL(entry).origin;
|
|
106
|
+
}
|
|
107
|
+
catch {
|
|
108
|
+
throw new Error(`CORS origin "${entry}" is not a URL origin.`);
|
|
109
|
+
}
|
|
110
|
+
if (canonical !== entry || canonical === OPAQUE_ORIGIN || entry.includes('*')) {
|
|
111
|
+
throw new Error(`CORS origin "${entry}" must be a canonical origin ("scheme://host[:port]", ` +
|
|
112
|
+
'lower-case, no default port, no path, query or trailing slash).');
|
|
113
|
+
}
|
|
114
|
+
if (allowed.has(entry)) {
|
|
115
|
+
throw new Error(`CORS origin "${entry}" is listed twice.`);
|
|
116
|
+
}
|
|
117
|
+
allowed.set(entry, entry);
|
|
118
|
+
}
|
|
119
|
+
return {
|
|
120
|
+
origin: (origin, callback) => {
|
|
121
|
+
const entry = origin === undefined ? undefined : allowed.get(origin);
|
|
122
|
+
if (entry !== undefined) {
|
|
123
|
+
callback(null, entry);
|
|
124
|
+
return;
|
|
125
|
+
}
|
|
126
|
+
if (origin !== undefined) {
|
|
127
|
+
logger.warn(`CORS blocked origin: ${origin}`);
|
|
60
128
|
}
|
|
129
|
+
callback(null, REFUSE_WITH_VARY);
|
|
61
130
|
},
|
|
62
|
-
|
|
63
|
-
methods: ['GET', 'POST', 'PUT', 'PATCH', 'DELETE', 'OPTIONS'],
|
|
64
|
-
allowedHeaders: [
|
|
65
|
-
'Content-Type',
|
|
66
|
-
'Authorization',
|
|
67
|
-
'X-Requested-With',
|
|
68
|
-
'Accept',
|
|
69
|
-
'Origin',
|
|
70
|
-
'X-Xema-Org-Id',
|
|
71
|
-
'X-Org-Id',
|
|
72
|
-
'X-Project-Id',
|
|
73
|
-
'X-Correlation-Id',
|
|
74
|
-
'X-Request-Id',
|
|
75
|
-
'X-Last-Seen-Sequence',
|
|
76
|
-
'Last-Event-ID',
|
|
77
|
-
'Idempotency-Key',
|
|
78
|
-
'x-api-key',
|
|
79
|
-
'x-internal-token',
|
|
80
|
-
execution_environment_1.EXECUTION_ENVIRONMENT_HEADER,
|
|
81
|
-
],
|
|
82
|
-
exposedHeaders: [
|
|
83
|
-
'X-RateLimit-Limit',
|
|
84
|
-
'X-RateLimit-Remaining',
|
|
85
|
-
'X-RateLimit-Reset',
|
|
86
|
-
],
|
|
131
|
+
...CORS_POLICY,
|
|
87
132
|
};
|
|
88
133
|
}
|
|
89
134
|
//# sourceMappingURL=cors.config.js.map
|