@xemahq/platform-common 0.13.0 → 0.14.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/lib/advisory-lock.d.ts +10 -0
- package/dist/lib/advisory-lock.d.ts.map +1 -0
- package/dist/lib/advisory-lock.js +32 -0
- package/dist/lib/advisory-lock.js.map +1 -0
- package/dist/lib/biome-database.d.ts +14 -0
- package/dist/lib/biome-database.d.ts.map +1 -0
- package/dist/lib/biome-database.js +88 -0
- package/dist/lib/biome-database.js.map +1 -0
- package/dist/lib/llm-stream/anthropic-adapter.d.ts +25 -0
- package/dist/lib/llm-stream/anthropic-adapter.d.ts.map +1 -0
- package/dist/lib/llm-stream/anthropic-adapter.js +278 -0
- package/dist/lib/llm-stream/anthropic-adapter.js.map +1 -0
- package/dist/lib/redaction/redaction.interceptor.d.ts +11 -0
- package/dist/lib/redaction/redaction.interceptor.d.ts.map +1 -0
- package/dist/lib/redaction/redaction.interceptor.js +41 -0
- package/dist/lib/redaction/redaction.interceptor.js.map +1 -0
- package/dist/lib/redaction/redaction.service.d.ts +9 -0
- package/dist/lib/redaction/redaction.service.d.ts.map +1 -0
- package/dist/lib/redaction/redaction.service.js +110 -0
- package/dist/lib/redaction/redaction.service.js.map +1 -0
- package/dist/lib/to-prisma-json.d.ts +6 -0
- package/dist/lib/to-prisma-json.d.ts.map +1 -0
- package/dist/lib/to-prisma-json.js +12 -0
- package/dist/lib/to-prisma-json.js.map +1 -0
- package/dist/lib/write-policy.d.ts +30 -0
- package/dist/lib/write-policy.d.ts.map +1 -0
- package/dist/lib/write-policy.js +54 -0
- package/dist/lib/write-policy.js.map +1 -0
- package/dist/nestjs/auth/org-authority-observations.d.ts +15 -0
- package/dist/nestjs/auth/org-authority-observations.d.ts.map +1 -0
- package/dist/nestjs/auth/org-authority-observations.js +47 -0
- package/dist/nestjs/auth/org-authority-observations.js.map +1 -0
- package/dist/nestjs/auth/org-authority.d.ts +32 -0
- package/dist/nestjs/auth/org-authority.d.ts.map +1 -0
- package/dist/nestjs/auth/org-authority.js +102 -0
- package/dist/nestjs/auth/org-authority.js.map +1 -0
- package/dist/nestjs/auth/org-claim.d.ts +12 -0
- package/dist/nestjs/auth/org-claim.d.ts.map +1 -0
- package/dist/nestjs/auth/org-claim.js +25 -0
- package/dist/nestjs/auth/org-claim.js.map +1 -0
- package/dist/nestjs/auth/org-role.d.ts +13 -0
- package/dist/nestjs/auth/org-role.d.ts.map +1 -0
- package/dist/nestjs/auth/org-role.js +75 -0
- package/dist/nestjs/auth/org-role.js.map +1 -0
- package/dist/nestjs/auth/realm-token-verifier.d.ts +30 -0
- package/dist/nestjs/auth/realm-token-verifier.d.ts.map +1 -0
- package/dist/nestjs/auth/realm-token-verifier.js +161 -0
- package/dist/nestjs/auth/realm-token-verifier.js.map +1 -0
- package/dist/nestjs/auth/service-token.guard.d.ts +6 -8
- package/dist/nestjs/auth/service-token.guard.d.ts.map +1 -1
- package/dist/nestjs/auth/service-token.guard.js +21 -101
- package/dist/nestjs/auth/service-token.guard.js.map +1 -1
- package/dist/nestjs/idempotency/prisma-idempotency.service.d.ts +20 -0
- package/dist/nestjs/idempotency/prisma-idempotency.service.d.ts.map +1 -0
- package/dist/nestjs/idempotency/prisma-idempotency.service.js +58 -0
- package/dist/nestjs/idempotency/prisma-idempotency.service.js.map +1 -0
- package/dist/nestjs/jwt-verification.guard.d.ts +2 -16
- package/dist/nestjs/jwt-verification.guard.d.ts.map +1 -1
- package/dist/nestjs/jwt-verification.guard.js +6 -149
- package/dist/nestjs/jwt-verification.guard.js.map +1 -1
- package/package.json +2 -2
|
@@ -0,0 +1,110 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
|
3
|
+
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
4
|
+
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
5
|
+
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
6
|
+
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
7
|
+
};
|
|
8
|
+
var __metadata = (this && this.__metadata) || function (k, v) {
|
|
9
|
+
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
|
|
10
|
+
};
|
|
11
|
+
var RedactionService_1;
|
|
12
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
13
|
+
exports.RedactionService = void 0;
|
|
14
|
+
const common_1 = require("@nestjs/common");
|
|
15
|
+
const default_rules_1 = require("./default-rules");
|
|
16
|
+
const DISABLED_RULES_ENV = 'REDACTION_DISABLED_RULES';
|
|
17
|
+
let RedactionService = RedactionService_1 = class RedactionService {
|
|
18
|
+
rules;
|
|
19
|
+
constructor() {
|
|
20
|
+
const disabled = parseDisabledRules(process.env[DISABLED_RULES_ENV]);
|
|
21
|
+
this.rules = default_rules_1.DEFAULT_REDACTION_RULES.filter((r) => !disabled.has(r.name));
|
|
22
|
+
}
|
|
23
|
+
static withRules(rules) {
|
|
24
|
+
const svc = Object.create(RedactionService_1.prototype);
|
|
25
|
+
const disabled = parseDisabledRules(process.env[DISABLED_RULES_ENV]);
|
|
26
|
+
svc.rules = rules.filter((r) => !disabled.has(r.name));
|
|
27
|
+
return svc;
|
|
28
|
+
}
|
|
29
|
+
redact(value) {
|
|
30
|
+
return this.walk(value, undefined, new WeakSet());
|
|
31
|
+
}
|
|
32
|
+
walk(value, key, seen) {
|
|
33
|
+
if (key !== undefined) {
|
|
34
|
+
for (const rule of this.rules) {
|
|
35
|
+
if (rule.fieldName && rule.fieldName.test(key)) {
|
|
36
|
+
return rule.replacement;
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
if (typeof value === 'string') {
|
|
41
|
+
return applyStringRules(value, this.rules);
|
|
42
|
+
}
|
|
43
|
+
if (Array.isArray(value)) {
|
|
44
|
+
if (seen.has(value)) {
|
|
45
|
+
return '[redacted-cycle]';
|
|
46
|
+
}
|
|
47
|
+
seen.add(value);
|
|
48
|
+
let mutated = false;
|
|
49
|
+
const next = new Array(value.length);
|
|
50
|
+
for (let i = 0; i < value.length; i++) {
|
|
51
|
+
const v = value[i];
|
|
52
|
+
const w = this.walk(v, undefined, seen);
|
|
53
|
+
if (w !== v) {
|
|
54
|
+
mutated = true;
|
|
55
|
+
}
|
|
56
|
+
next[i] = w;
|
|
57
|
+
}
|
|
58
|
+
seen.delete(value);
|
|
59
|
+
return mutated ? next : value;
|
|
60
|
+
}
|
|
61
|
+
if (value !== null && typeof value === 'object') {
|
|
62
|
+
if (seen.has(value)) {
|
|
63
|
+
return '[redacted-cycle]';
|
|
64
|
+
}
|
|
65
|
+
seen.add(value);
|
|
66
|
+
const record = value;
|
|
67
|
+
let mutated = false;
|
|
68
|
+
const out = {};
|
|
69
|
+
for (const k of Object.keys(record)) {
|
|
70
|
+
const v = record[k];
|
|
71
|
+
const w = this.walk(v, k, seen);
|
|
72
|
+
if (w !== v) {
|
|
73
|
+
mutated = true;
|
|
74
|
+
}
|
|
75
|
+
out[k] = w;
|
|
76
|
+
}
|
|
77
|
+
seen.delete(value);
|
|
78
|
+
return mutated ? out : value;
|
|
79
|
+
}
|
|
80
|
+
return value;
|
|
81
|
+
}
|
|
82
|
+
};
|
|
83
|
+
exports.RedactionService = RedactionService;
|
|
84
|
+
exports.RedactionService = RedactionService = RedactionService_1 = __decorate([
|
|
85
|
+
(0, common_1.Injectable)(),
|
|
86
|
+
__metadata("design:paramtypes", [])
|
|
87
|
+
], RedactionService);
|
|
88
|
+
function applyStringRules(value, rules) {
|
|
89
|
+
let current = value;
|
|
90
|
+
for (const rule of rules) {
|
|
91
|
+
if (!rule.stringPattern) {
|
|
92
|
+
continue;
|
|
93
|
+
}
|
|
94
|
+
if (rule.stringPattern.test(current)) {
|
|
95
|
+
const regex = new RegExp(rule.stringPattern.source, rule.stringPattern.flags);
|
|
96
|
+
current = current.replace(regex, rule.replacement);
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
return current;
|
|
100
|
+
}
|
|
101
|
+
function parseDisabledRules(raw) {
|
|
102
|
+
if (!raw) {
|
|
103
|
+
return new Set();
|
|
104
|
+
}
|
|
105
|
+
return new Set(raw
|
|
106
|
+
.split(',')
|
|
107
|
+
.map((s) => s.trim())
|
|
108
|
+
.filter((s) => s.length > 0));
|
|
109
|
+
}
|
|
110
|
+
//# sourceMappingURL=redaction.service.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"redaction.service.js","sourceRoot":"","sources":["../../../src/lib/redaction/redaction.service.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"to-prisma-json.d.ts","sourceRoot":"","sources":["../../src/lib/to-prisma-json.ts"],"names":[],"mappings":"AAqBA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,KAAK,CAAC;AAmBnC,wBAAgB,YAAY,CAAC,CAAC,EAC5B,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC,EAClB,KAAK,EAAE,CAAC,EACR,OAAO,GAAE;IAAE,UAAU,CAAC,EAAE,MAAM,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,CAAA;CAAO,GACnD,OAAO,CAYT"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.toPrismaJson = toPrismaJson;
|
|
4
|
+
const pipeline_errors_1 = require("./errors/pipeline-errors");
|
|
5
|
+
function toPrismaJson(schema, value, context = {}) {
|
|
6
|
+
const parsed = schema.safeParse(value);
|
|
7
|
+
if (!parsed.success) {
|
|
8
|
+
throw new pipeline_errors_1.WorkItemPayloadInvalidError(`Work-item payload failed schema validation${context.hint ? ` (${context.hint})` : ''}`, context.workItemId ?? 'unknown', parsed.error.issues);
|
|
9
|
+
}
|
|
10
|
+
return structuredClone(parsed.data);
|
|
11
|
+
}
|
|
12
|
+
//# sourceMappingURL=to-prisma-json.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"to-prisma-json.js","sourceRoot":"","sources":["../../src/lib/to-prisma-json.ts"],"names":[],"mappings":";;AAwCA,oCAgBC;AAlCD,8DAAuE;AAkBvE,SAAgB,YAAY,CAC1B,MAAkB,EAClB,KAAQ,EACR,UAAkD,EAAE;IAEpD,MAAM,MAAM,GAAG,MAAM,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;IACvC,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;QACpB,MAAM,IAAI,6CAA2B,CACnC,6CAA6C,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,OAAO,CAAC,IAAI,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,EACvF,OAAO,CAAC,UAAU,IAAI,SAAS,EAC/B,MAAM,CAAC,KAAK,CAAC,MAAM,CACpB,CAAC;IACJ,CAAC;IAGD,OAAO,eAAe,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;AACtC,CAAC"}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
export interface WritePolicyContext {
|
|
2
|
+
allowedPageSlugs: string[];
|
|
3
|
+
allowedPageSlugPrefixes: string[];
|
|
4
|
+
allowedParentPageId: string | null;
|
|
5
|
+
allowedBacklogParent: string | null;
|
|
6
|
+
backlogMode: 'canonical' | 'proposal';
|
|
7
|
+
backlogCanonicalPrerequisites?: {
|
|
8
|
+
parentPredetermined: boolean;
|
|
9
|
+
ownershipClear: boolean;
|
|
10
|
+
duplicateDetectionDeterministic: boolean;
|
|
11
|
+
};
|
|
12
|
+
coordinatorOwned: boolean;
|
|
13
|
+
memoryWriteAllowed: boolean;
|
|
14
|
+
createPagesDisabled: boolean;
|
|
15
|
+
editOnlyPageSlugs: string[];
|
|
16
|
+
authorizedWritePaths: string[];
|
|
17
|
+
authorizedReadPaths: string[];
|
|
18
|
+
}
|
|
19
|
+
export declare function parseWritePolicy(headerValue: string | undefined): WritePolicyContext;
|
|
20
|
+
export declare function validatePageSlugWrite(policy: WritePolicyContext, slug: string): string | null;
|
|
21
|
+
export declare function validateParentPageWrite(policy: WritePolicyContext, parentPageId: string | null | undefined): string | null;
|
|
22
|
+
export declare function validateMemoryWrite(policy: WritePolicyContext): string | null;
|
|
23
|
+
export declare function validateBacklogWrite(policy: WritePolicyContext): {
|
|
24
|
+
allowed: true;
|
|
25
|
+
mode: 'canonical' | 'proposal';
|
|
26
|
+
} | {
|
|
27
|
+
allowed: false;
|
|
28
|
+
reason: string;
|
|
29
|
+
};
|
|
30
|
+
//# sourceMappingURL=write-policy.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"write-policy.d.ts","sourceRoot":"","sources":["../../src/lib/write-policy.ts"],"names":[],"mappings":"AAoBA,MAAM,WAAW,kBAAkB;IACjC,gBAAgB,EAAE,MAAM,EAAE,CAAC;IAC3B,uBAAuB,EAAE,MAAM,EAAE,CAAC;IAClC,mBAAmB,EAAE,MAAM,GAAG,IAAI,CAAC;IACnC,oBAAoB,EAAE,MAAM,GAAG,IAAI,CAAC;IACpC,WAAW,EAAE,WAAW,GAAG,UAAU,CAAC;IACtC,6BAA6B,CAAC,EAAE;QAC9B,mBAAmB,EAAE,OAAO,CAAC;QAC7B,cAAc,EAAE,OAAO,CAAC;QACxB,+BAA+B,EAAE,OAAO,CAAC;KAC1C,CAAC;IACF,gBAAgB,EAAE,OAAO,CAAC;IAC1B,kBAAkB,EAAE,OAAO,CAAC;IAC5B,mBAAmB,EAAE,OAAO,CAAC;IAC7B,iBAAiB,EAAE,MAAM,EAAE,CAAC;IAC5B,oBAAoB,EAAE,MAAM,EAAE,CAAC;IAC/B,mBAAmB,EAAE,MAAM,EAAE,CAAC;CAC/B;AAaD,wBAAgB,gBAAgB,CAC9B,WAAW,EAAE,MAAM,GAAG,SAAS,GAC9B,kBAAkB,CAWpB;AAMD,wBAAgB,qBAAqB,CACnC,MAAM,EAAE,kBAAkB,EAC1B,IAAI,EAAE,MAAM,GACX,MAAM,GAAG,IAAI,CAQf;AAOD,wBAAgB,uBAAuB,CACrC,MAAM,EAAE,kBAAkB,EAC1B,YAAY,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,GACtC,MAAM,GAAG,IAAI,CASf;AAKD,wBAAgB,mBAAmB,CACjC,MAAM,EAAE,kBAAkB,GACzB,MAAM,GAAG,IAAI,CAMf;AAKD,wBAAgB,oBAAoB,CAClC,MAAM,EAAE,kBAAkB,GACzB;IAAE,OAAO,EAAE,IAAI,CAAC;IAAC,IAAI,EAAE,WAAW,GAAG,UAAU,CAAA;CAAE,GAAG;IAAE,OAAO,EAAE,KAAK,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CASxF"}
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.parseWritePolicy = parseWritePolicy;
|
|
4
|
+
exports.validatePageSlugWrite = validatePageSlugWrite;
|
|
5
|
+
exports.validateParentPageWrite = validateParentPageWrite;
|
|
6
|
+
exports.validateMemoryWrite = validateMemoryWrite;
|
|
7
|
+
exports.validateBacklogWrite = validateBacklogWrite;
|
|
8
|
+
const pipeline_errors_1 = require("./errors/pipeline-errors");
|
|
9
|
+
function parseWritePolicy(headerValue) {
|
|
10
|
+
if (!headerValue) {
|
|
11
|
+
throw new pipeline_errors_1.MissingWritePolicyError();
|
|
12
|
+
}
|
|
13
|
+
try {
|
|
14
|
+
return JSON.parse(headerValue);
|
|
15
|
+
}
|
|
16
|
+
catch (err) {
|
|
17
|
+
throw new Error(`Malformed X-Write-Policy header — expected JSON-encoded WritePolicyContext. ${err instanceof Error ? err.message : String(err)}`);
|
|
18
|
+
}
|
|
19
|
+
}
|
|
20
|
+
function validatePageSlugWrite(policy, slug) {
|
|
21
|
+
if (policy.allowedPageSlugs.includes(slug))
|
|
22
|
+
return null;
|
|
23
|
+
for (const prefix of policy.allowedPageSlugPrefixes) {
|
|
24
|
+
if (slug.startsWith(prefix))
|
|
25
|
+
return null;
|
|
26
|
+
}
|
|
27
|
+
return `Write policy violation: page slug "${slug}" is not in the allowed set. Allowed slugs: [${policy.allowedPageSlugs.join(', ')}], allowed prefixes: [${policy.allowedPageSlugPrefixes.join(', ')}]`;
|
|
28
|
+
}
|
|
29
|
+
function validateParentPageWrite(policy, parentPageId) {
|
|
30
|
+
if (!policy.allowedParentPageId)
|
|
31
|
+
return null;
|
|
32
|
+
if (!parentPageId)
|
|
33
|
+
return null;
|
|
34
|
+
if (parentPageId !== policy.allowedParentPageId) {
|
|
35
|
+
return `Write policy violation: parent page "${parentPageId}" is not the allowed parent "${policy.allowedParentPageId}"`;
|
|
36
|
+
}
|
|
37
|
+
return null;
|
|
38
|
+
}
|
|
39
|
+
function validateMemoryWrite(policy) {
|
|
40
|
+
if (!policy.memoryWriteAllowed) {
|
|
41
|
+
return 'Write policy violation: memory writes are not allowed for this agent.';
|
|
42
|
+
}
|
|
43
|
+
return null;
|
|
44
|
+
}
|
|
45
|
+
function validateBacklogWrite(policy) {
|
|
46
|
+
if (policy.backlogMode === 'proposal') {
|
|
47
|
+
return {
|
|
48
|
+
allowed: false,
|
|
49
|
+
reason: 'Write policy violation: backlog is in proposal mode — emit backlog proposals in your structured output instead of calling create_item directly.',
|
|
50
|
+
};
|
|
51
|
+
}
|
|
52
|
+
return { allowed: true, mode: policy.backlogMode };
|
|
53
|
+
}
|
|
54
|
+
//# sourceMappingURL=write-policy.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"write-policy.js","sourceRoot":"","sources":["../../src/lib/write-policy.ts"],"names":[],"mappings":";;AAkDA,4CAaC;AAMD,sDAWC;AAOD,0DAYC;AAKD,kDAQC;AAKD,oDAWC;AA9GD,8DAAmE;AAgCnE,SAAgB,gBAAgB,CAC9B,WAA+B;IAE/B,IAAI,CAAC,WAAW,EAAE,CAAC;QACjB,MAAM,IAAI,yCAAuB,EAAE,CAAC;IACtC,CAAC;IACD,IAAI,CAAC;QACH,OAAO,IAAI,CAAC,KAAK,CAAC,WAAW,CAAuB,CAAC;IACvD,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,MAAM,IAAI,KAAK,CACb,+EAA+E,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CAClI,CAAC;IACJ,CAAC;AACH,CAAC;AAMD,SAAgB,qBAAqB,CACnC,MAA0B,EAC1B,IAAY;IAEZ,IAAI,MAAM,CAAC,gBAAgB,CAAC,QAAQ,CAAC,IAAI,CAAC;QAAE,OAAO,IAAI,CAAC;IAExD,KAAK,MAAM,MAAM,IAAI,MAAM,CAAC,uBAAuB,EAAE,CAAC;QACpD,IAAI,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC;YAAE,OAAO,IAAI,CAAC;IAC3C,CAAC;IAED,OAAO,sCAAsC,IAAI,gDAAgD,MAAM,CAAC,gBAAgB,CAAC,IAAI,CAAC,IAAI,CAAC,yBAAyB,MAAM,CAAC,uBAAuB,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC;AAC3M,CAAC;AAOD,SAAgB,uBAAuB,CACrC,MAA0B,EAC1B,YAAuC;IAEvC,IAAI,CAAC,MAAM,CAAC,mBAAmB;QAAE,OAAO,IAAI,CAAC;IAC7C,IAAI,CAAC,YAAY;QAAE,OAAO,IAAI,CAAC;IAE/B,IAAI,YAAY,KAAK,MAAM,CAAC,mBAAmB,EAAE,CAAC;QAChD,OAAO,wCAAwC,YAAY,gCAAgC,MAAM,CAAC,mBAAmB,GAAG,CAAC;IAC3H,CAAC;IAED,OAAO,IAAI,CAAC;AACd,CAAC;AAKD,SAAgB,mBAAmB,CACjC,MAA0B;IAE1B,IAAI,CAAC,MAAM,CAAC,kBAAkB,EAAE,CAAC;QAC/B,OAAO,uEAAuE,CAAC;IACjF,CAAC;IAED,OAAO,IAAI,CAAC;AACd,CAAC;AAKD,SAAgB,oBAAoB,CAClC,MAA0B;IAE1B,IAAI,MAAM,CAAC,WAAW,KAAK,UAAU,EAAE,CAAC;QACtC,OAAO;YACL,OAAO,EAAE,KAAK;YACd,MAAM,EAAE,iJAAiJ;SAC1J,CAAC;IACJ,CAAC;IAED,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,CAAC,WAAW,EAAE,CAAC;AACrD,CAAC"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import type { OrgAuthorityCallerFacts } from './org-authority';
|
|
2
|
+
export declare const ORG_AUTHORITY_OBSERVATION_LIMIT = 512;
|
|
3
|
+
export interface OrgAuthorityObservation extends OrgAuthorityCallerFacts {
|
|
4
|
+
readonly count: number;
|
|
5
|
+
readonly firstSeenAt: string;
|
|
6
|
+
}
|
|
7
|
+
export interface OrgAuthorityCensus {
|
|
8
|
+
readonly observations: readonly OrgAuthorityObservation[];
|
|
9
|
+
readonly droppedByLimit: number;
|
|
10
|
+
}
|
|
11
|
+
export declare const UNKNOWN_CLIENT_ID = "<unknown>";
|
|
12
|
+
export declare function recordUnprovenOrgAuthority(facts: OrgAuthorityCallerFacts): boolean;
|
|
13
|
+
export declare function orgAuthorityCensus(): OrgAuthorityCensus;
|
|
14
|
+
export declare function resetOrgAuthorityCensus(): void;
|
|
15
|
+
//# sourceMappingURL=org-authority-observations.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"org-authority-observations.d.ts","sourceRoot":"","sources":["../../../src/nestjs/auth/org-authority-observations.ts"],"names":[],"mappings":"AAgCA,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,iBAAiB,CAAC;AAO/D,eAAO,MAAM,+BAA+B,MAAM,CAAC;AAGnD,MAAM,WAAW,uBAAwB,SAAQ,uBAAuB;IAEtE,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IAEvB,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;CAC9B;AAGD,MAAM,WAAW,kBAAkB;IACjC,QAAQ,CAAC,YAAY,EAAE,SAAS,uBAAuB,EAAE,CAAC;IAM1D,QAAQ,CAAC,cAAc,EAAE,MAAM,CAAC;CACjC;AAWD,eAAO,MAAM,iBAAiB,cAAc,CAAC;AAmB7C,wBAAgB,0BAA0B,CACxC,KAAK,EAAE,uBAAuB,GAC7B,OAAO,CAiBT;AAGD,wBAAgB,kBAAkB,IAAI,kBAAkB,CAKvD;AAMD,wBAAgB,uBAAuB,IAAI,IAAI,CAG9C"}
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.UNKNOWN_CLIENT_ID = exports.ORG_AUTHORITY_OBSERVATION_LIMIT = void 0;
|
|
4
|
+
exports.recordUnprovenOrgAuthority = recordUnprovenOrgAuthority;
|
|
5
|
+
exports.orgAuthorityCensus = orgAuthorityCensus;
|
|
6
|
+
exports.resetOrgAuthorityCensus = resetOrgAuthorityCensus;
|
|
7
|
+
exports.ORG_AUTHORITY_OBSERVATION_LIMIT = 512;
|
|
8
|
+
const observations = new Map();
|
|
9
|
+
let droppedByLimit = 0;
|
|
10
|
+
exports.UNKNOWN_CLIENT_ID = '<unknown>';
|
|
11
|
+
function keyFor(facts) {
|
|
12
|
+
return [
|
|
13
|
+
facts.clientId,
|
|
14
|
+
facts.tokenClass,
|
|
15
|
+
facts.subjectKind,
|
|
16
|
+
facts.delegated ? 'delegated' : 'direct',
|
|
17
|
+
].join('|');
|
|
18
|
+
}
|
|
19
|
+
function recordUnprovenOrgAuthority(facts) {
|
|
20
|
+
const key = keyFor(facts);
|
|
21
|
+
const existing = observations.get(key);
|
|
22
|
+
if (existing) {
|
|
23
|
+
existing.count += 1;
|
|
24
|
+
return false;
|
|
25
|
+
}
|
|
26
|
+
if (observations.size >= exports.ORG_AUTHORITY_OBSERVATION_LIMIT) {
|
|
27
|
+
droppedByLimit += 1;
|
|
28
|
+
return false;
|
|
29
|
+
}
|
|
30
|
+
observations.set(key, {
|
|
31
|
+
...facts,
|
|
32
|
+
count: 1,
|
|
33
|
+
firstSeenAt: new Date().toISOString(),
|
|
34
|
+
});
|
|
35
|
+
return true;
|
|
36
|
+
}
|
|
37
|
+
function orgAuthorityCensus() {
|
|
38
|
+
return {
|
|
39
|
+
observations: [...observations.values()].map((entry) => ({ ...entry })),
|
|
40
|
+
droppedByLimit,
|
|
41
|
+
};
|
|
42
|
+
}
|
|
43
|
+
function resetOrgAuthorityCensus() {
|
|
44
|
+
observations.clear();
|
|
45
|
+
droppedByLimit = 0;
|
|
46
|
+
}
|
|
47
|
+
//# sourceMappingURL=org-authority-observations.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"org-authority-observations.js","sourceRoot":"","sources":["../../../src/nestjs/auth/org-authority-observations.ts"],"names":[],"mappings":";;;AAwFA,gEAmBC;AAGD,gDAKC;AAMD,0DAGC;AArFY,QAAA,+BAA+B,GAAG,GAAG,CAAC;AA0BnD,MAAM,YAAY,GAAG,IAAI,GAAG,EAA8B,CAAC;AAC3D,IAAI,cAAc,GAAG,CAAC,CAAC;AAGV,QAAA,iBAAiB,GAAG,WAAW,CAAC;AAE7C,SAAS,MAAM,CAAC,KAA8B;IAC5C,OAAO;QACL,KAAK,CAAC,QAAQ;QACd,KAAK,CAAC,UAAU;QAChB,KAAK,CAAC,WAAW;QACjB,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,QAAQ;KACzC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AACd,CAAC;AAUD,SAAgB,0BAA0B,CACxC,KAA8B;IAE9B,MAAM,GAAG,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC;IAC1B,MAAM,QAAQ,GAAG,YAAY,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;IACvC,IAAI,QAAQ,EAAE,CAAC;QACb,QAAQ,CAAC,KAAK,IAAI,CAAC,CAAC;QACpB,OAAO,KAAK,CAAC;IACf,CAAC;IACD,IAAI,YAAY,CAAC,IAAI,IAAI,uCAA+B,EAAE,CAAC;QACzD,cAAc,IAAI,CAAC,CAAC;QACpB,OAAO,KAAK,CAAC;IACf,CAAC;IACD,YAAY,CAAC,GAAG,CAAC,GAAG,EAAE;QACpB,GAAG,KAAK;QACR,KAAK,EAAE,CAAC;QACR,WAAW,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;KACtC,CAAC,CAAC;IACH,OAAO,IAAI,CAAC;AACd,CAAC;AAGD,SAAgB,kBAAkB;IAChC,OAAO;QACL,YAAY,EAAE,CAAC,GAAG,YAAY,CAAC,MAAM,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,EAAE,GAAG,KAAK,EAAE,CAAC,CAAC;QACvE,cAAc;KACf,CAAC;AACJ,CAAC;AAMD,SAAgB,uBAAuB;IACrC,YAAY,CAAC,KAAK,EAAE,CAAC;IACrB,cAAc,GAAG,CAAC,CAAC;AACrB,CAAC"}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
import type { SubjectKind, TokenClass } from '@xemahq/kernel-contracts/subject';
|
|
2
|
+
export declare enum OrgAuthoritySource {
|
|
3
|
+
OrgClaim = "org_claim",
|
|
4
|
+
OrgMembership = "org_membership",
|
|
5
|
+
NoOrgAsserted = "no_org_asserted",
|
|
6
|
+
ClaimMismatch = "claim_mismatch",
|
|
7
|
+
Unproven = "unproven_header"
|
|
8
|
+
}
|
|
9
|
+
export interface OrgAuthorityVerdict {
|
|
10
|
+
readonly source: OrgAuthoritySource;
|
|
11
|
+
readonly assertedOrgId: string;
|
|
12
|
+
readonly tokenOrgId?: string;
|
|
13
|
+
}
|
|
14
|
+
export declare function resolveOrgAuthority(claims: Record<string, unknown>, assertedOrgId: string): OrgAuthorityVerdict;
|
|
15
|
+
export declare function isOrgAuthorityProven(verdict: OrgAuthorityVerdict): boolean;
|
|
16
|
+
export declare function orgAuthorityRequiresProof(verdict: OrgAuthorityVerdict): boolean;
|
|
17
|
+
export declare enum OrgAuthorityMode {
|
|
18
|
+
Observe = "observe",
|
|
19
|
+
Enforce = "enforce"
|
|
20
|
+
}
|
|
21
|
+
export declare const ORG_AUTHORITY_MODE_ENV = "XEMA_ORG_AUTHORITY_MODE";
|
|
22
|
+
export declare class InvalidOrgAuthorityModeError extends Error {
|
|
23
|
+
constructor(value: string);
|
|
24
|
+
}
|
|
25
|
+
export declare function resolveOrgAuthorityMode(env?: NodeJS.ProcessEnv): OrgAuthorityMode;
|
|
26
|
+
export interface OrgAuthorityCallerFacts {
|
|
27
|
+
readonly clientId: string;
|
|
28
|
+
readonly tokenClass: TokenClass;
|
|
29
|
+
readonly subjectKind: SubjectKind;
|
|
30
|
+
readonly delegated: boolean;
|
|
31
|
+
}
|
|
32
|
+
//# sourceMappingURL=org-authority.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"org-authority.d.ts","sourceRoot":"","sources":["../../../src/nestjs/auth/org-authority.ts"],"names":[],"mappings":"AA+CA,OAAO,KAAK,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,kCAAkC,CAAC;AAahF,oBAAY,kBAAkB;IAE5B,QAAQ,cAAc;IAEtB,aAAa,mBAAmB;IAKhC,aAAa,oBAAoB;IAYjC,aAAa,mBAAmB;IAKhC,QAAQ,oBAAoB;CAC7B;AAGD,MAAM,WAAW,mBAAmB;IAElC,QAAQ,CAAC,MAAM,EAAE,kBAAkB,CAAC;IAEpC,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;IAO/B,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,CAAC;CAC9B;AAYD,wBAAgB,mBAAmB,CACjC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC/B,aAAa,EAAE,MAAM,GACpB,mBAAmB,CAuCrB;AAGD,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,mBAAmB,GAAG,OAAO,CAU1E;AAUD,wBAAgB,yBAAyB,CACvC,OAAO,EAAE,mBAAmB,GAC3B,OAAO,CAUT;AAiBD,oBAAY,gBAAgB;IAE1B,OAAO,YAAY;IAEnB,OAAO,YAAY;CACpB;AAGD,eAAO,MAAM,sBAAsB,4BAA4B,CAAC;AAGhE,qBAAa,4BAA6B,SAAQ,KAAK;gBACzC,KAAK,EAAE,MAAM;CAO1B;AAYD,wBAAgB,uBAAuB,CACrC,GAAG,GAAE,MAAM,CAAC,UAAwB,GACnC,gBAAgB,CAelB;AAQD,MAAM,WAAW,uBAAuB;IAEtC,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,UAAU,EAAE,UAAU,CAAC;IAChC,QAAQ,CAAC,WAAW,EAAE,WAAW,CAAC;IAElC,QAAQ,CAAC,SAAS,EAAE,OAAO,CAAC;CAC7B"}
|
|
@@ -0,0 +1,102 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.InvalidOrgAuthorityModeError = exports.ORG_AUTHORITY_MODE_ENV = exports.OrgAuthorityMode = exports.OrgAuthoritySource = void 0;
|
|
4
|
+
exports.resolveOrgAuthority = resolveOrgAuthority;
|
|
5
|
+
exports.isOrgAuthorityProven = isOrgAuthorityProven;
|
|
6
|
+
exports.orgAuthorityRequiresProof = orgAuthorityRequiresProof;
|
|
7
|
+
exports.resolveOrgAuthorityMode = resolveOrgAuthorityMode;
|
|
8
|
+
const org_claim_1 = require("./org-claim");
|
|
9
|
+
const org_role_1 = require("./org-role");
|
|
10
|
+
var OrgAuthoritySource;
|
|
11
|
+
(function (OrgAuthoritySource) {
|
|
12
|
+
OrgAuthoritySource["OrgClaim"] = "org_claim";
|
|
13
|
+
OrgAuthoritySource["OrgMembership"] = "org_membership";
|
|
14
|
+
OrgAuthoritySource["NoOrgAsserted"] = "no_org_asserted";
|
|
15
|
+
OrgAuthoritySource["ClaimMismatch"] = "claim_mismatch";
|
|
16
|
+
OrgAuthoritySource["Unproven"] = "unproven_header";
|
|
17
|
+
})(OrgAuthoritySource || (exports.OrgAuthoritySource = OrgAuthoritySource = {}));
|
|
18
|
+
function resolveOrgAuthority(claims, assertedOrgId) {
|
|
19
|
+
const asserted = assertedOrgId.trim();
|
|
20
|
+
if (asserted.length === 0) {
|
|
21
|
+
return {
|
|
22
|
+
source: OrgAuthoritySource.NoOrgAsserted,
|
|
23
|
+
assertedOrgId: '',
|
|
24
|
+
};
|
|
25
|
+
}
|
|
26
|
+
const claim = (0, org_claim_1.resolveOrgClaim)(claims);
|
|
27
|
+
if (claim) {
|
|
28
|
+
return claim.value.toLowerCase() === asserted.toLowerCase()
|
|
29
|
+
? {
|
|
30
|
+
source: OrgAuthoritySource.OrgClaim,
|
|
31
|
+
assertedOrgId: asserted,
|
|
32
|
+
tokenOrgId: claim.value,
|
|
33
|
+
}
|
|
34
|
+
: {
|
|
35
|
+
source: OrgAuthoritySource.ClaimMismatch,
|
|
36
|
+
assertedOrgId: asserted,
|
|
37
|
+
tokenOrgId: claim.value,
|
|
38
|
+
};
|
|
39
|
+
}
|
|
40
|
+
const orgRoles = (0, org_role_1.resolveOrgRoles)(claims);
|
|
41
|
+
const assertedLower = asserted.toLowerCase();
|
|
42
|
+
for (const memberOrgId of Object.keys(orgRoles)) {
|
|
43
|
+
if (memberOrgId.toLowerCase() === assertedLower) {
|
|
44
|
+
return {
|
|
45
|
+
source: OrgAuthoritySource.OrgMembership,
|
|
46
|
+
assertedOrgId: asserted,
|
|
47
|
+
};
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
return { source: OrgAuthoritySource.Unproven, assertedOrgId: asserted };
|
|
51
|
+
}
|
|
52
|
+
function isOrgAuthorityProven(verdict) {
|
|
53
|
+
switch (verdict.source) {
|
|
54
|
+
case OrgAuthoritySource.OrgClaim:
|
|
55
|
+
case OrgAuthoritySource.OrgMembership:
|
|
56
|
+
return true;
|
|
57
|
+
case OrgAuthoritySource.NoOrgAsserted:
|
|
58
|
+
case OrgAuthoritySource.ClaimMismatch:
|
|
59
|
+
case OrgAuthoritySource.Unproven:
|
|
60
|
+
return false;
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
function orgAuthorityRequiresProof(verdict) {
|
|
64
|
+
switch (verdict.source) {
|
|
65
|
+
case OrgAuthoritySource.Unproven:
|
|
66
|
+
return true;
|
|
67
|
+
case OrgAuthoritySource.OrgClaim:
|
|
68
|
+
case OrgAuthoritySource.OrgMembership:
|
|
69
|
+
case OrgAuthoritySource.NoOrgAsserted:
|
|
70
|
+
case OrgAuthoritySource.ClaimMismatch:
|
|
71
|
+
return false;
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
var OrgAuthorityMode;
|
|
75
|
+
(function (OrgAuthorityMode) {
|
|
76
|
+
OrgAuthorityMode["Observe"] = "observe";
|
|
77
|
+
OrgAuthorityMode["Enforce"] = "enforce";
|
|
78
|
+
})(OrgAuthorityMode || (exports.OrgAuthorityMode = OrgAuthorityMode = {}));
|
|
79
|
+
exports.ORG_AUTHORITY_MODE_ENV = 'XEMA_ORG_AUTHORITY_MODE';
|
|
80
|
+
class InvalidOrgAuthorityModeError extends Error {
|
|
81
|
+
constructor(value) {
|
|
82
|
+
super(`${exports.ORG_AUTHORITY_MODE_ENV}="${value}" is not a valid org-authority mode. ` +
|
|
83
|
+
`Expected one of: ${Object.values(OrgAuthorityMode).join(', ')}. ` +
|
|
84
|
+
`Leave it unset for "${OrgAuthorityMode.Observe}".`);
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
exports.InvalidOrgAuthorityModeError = InvalidOrgAuthorityModeError;
|
|
88
|
+
function resolveOrgAuthorityMode(env = process.env) {
|
|
89
|
+
const raw = env[exports.ORG_AUTHORITY_MODE_ENV];
|
|
90
|
+
if (raw === undefined || raw.trim().length === 0) {
|
|
91
|
+
return OrgAuthorityMode.Observe;
|
|
92
|
+
}
|
|
93
|
+
const normalized = raw.trim().toLowerCase();
|
|
94
|
+
const matched = Object.values(OrgAuthorityMode).includes(normalized)
|
|
95
|
+
? normalized
|
|
96
|
+
: undefined;
|
|
97
|
+
if (!matched) {
|
|
98
|
+
throw new InvalidOrgAuthorityModeError(raw);
|
|
99
|
+
}
|
|
100
|
+
return matched;
|
|
101
|
+
}
|
|
102
|
+
//# sourceMappingURL=org-authority.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"org-authority.js","sourceRoot":"","sources":["../../../src/nestjs/auth/org-authority.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
export declare enum OrgClaimKey {
|
|
2
|
+
Canonical = "xema_org_id"
|
|
3
|
+
}
|
|
4
|
+
export declare const ORG_CLAIM_KEYS: readonly OrgClaimKey[];
|
|
5
|
+
export declare enum OrgHeaderName {
|
|
6
|
+
Canonical = "X-Xema-Org-Id"
|
|
7
|
+
}
|
|
8
|
+
export declare function resolveOrgClaim(claims: Record<string, unknown>): {
|
|
9
|
+
key: OrgClaimKey;
|
|
10
|
+
value: string;
|
|
11
|
+
} | null;
|
|
12
|
+
//# sourceMappingURL=org-claim.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"org-claim.d.ts","sourceRoot":"","sources":["../../../src/nestjs/auth/org-claim.ts"],"names":[],"mappings":"AA8BA,oBAAY,WAAW;IAErB,SAAS,gBAAgB;CAC1B;AAOD,eAAO,MAAM,cAAc,EAAE,SAAS,WAAW,EAEvC,CAAC;AAQX,oBAAY,aAAa;IAEvB,SAAS,kBAAkB;CAC5B;AAUD,wBAAgB,eAAe,CAC7B,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAC9B;IAAE,GAAG,EAAE,WAAW,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,GAAG,IAAI,CAQ5C"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.OrgHeaderName = exports.ORG_CLAIM_KEYS = exports.OrgClaimKey = void 0;
|
|
4
|
+
exports.resolveOrgClaim = resolveOrgClaim;
|
|
5
|
+
var OrgClaimKey;
|
|
6
|
+
(function (OrgClaimKey) {
|
|
7
|
+
OrgClaimKey["Canonical"] = "xema_org_id";
|
|
8
|
+
})(OrgClaimKey || (exports.OrgClaimKey = OrgClaimKey = {}));
|
|
9
|
+
exports.ORG_CLAIM_KEYS = [
|
|
10
|
+
OrgClaimKey.Canonical,
|
|
11
|
+
];
|
|
12
|
+
var OrgHeaderName;
|
|
13
|
+
(function (OrgHeaderName) {
|
|
14
|
+
OrgHeaderName["Canonical"] = "X-Xema-Org-Id";
|
|
15
|
+
})(OrgHeaderName || (exports.OrgHeaderName = OrgHeaderName = {}));
|
|
16
|
+
function resolveOrgClaim(claims) {
|
|
17
|
+
for (const key of exports.ORG_CLAIM_KEYS) {
|
|
18
|
+
const raw = claims[key];
|
|
19
|
+
if (typeof raw === 'string' && raw.length > 0) {
|
|
20
|
+
return { key, value: raw };
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
return null;
|
|
24
|
+
}
|
|
25
|
+
//# sourceMappingURL=org-claim.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"org-claim.js","sourceRoot":"","sources":["../../../src/nestjs/auth/org-claim.ts"],"names":[],"mappings":";;;AA+DA,0CAUC;AA3CD,IAAY,WAGX;AAHD,WAAY,WAAW;IAErB,wCAAyB,CAAA;AAC3B,CAAC,EAHW,WAAW,2BAAX,WAAW,QAGtB;AAOY,QAAA,cAAc,GAA2B;IACpD,WAAW,CAAC,SAAS;CACb,CAAC;AAQX,IAAY,aAGX;AAHD,WAAY,aAAa;IAEvB,4CAA2B,CAAA;AAC7B,CAAC,EAHW,aAAa,6BAAb,aAAa,QAGxB;AAUD,SAAgB,eAAe,CAC7B,MAA+B;IAE/B,KAAK,MAAM,GAAG,IAAI,sBAAc,EAAE,CAAC;QACjC,MAAM,GAAG,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC;QACxB,IAAI,OAAO,GAAG,KAAK,QAAQ,IAAI,GAAG,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC9C,OAAO,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,CAAC;QAC7B,CAAC;IACH,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
export declare enum OrgRolesClaimKey {
|
|
2
|
+
Canonical = "org_roles"
|
|
3
|
+
}
|
|
4
|
+
export declare const ORG_ROLES_CLAIM_KEYS: readonly OrgRolesClaimKey[];
|
|
5
|
+
export declare enum OrgRole {
|
|
6
|
+
Owner = "org_owner",
|
|
7
|
+
Admin = "org_admin",
|
|
8
|
+
Member = "org_member"
|
|
9
|
+
}
|
|
10
|
+
export declare function resolveOrgRoles(claims: Record<string, unknown>): Record<string, OrgRole>;
|
|
11
|
+
export declare function resolveOrgRoleForOrg(claims: Record<string, unknown>, orgId: string): OrgRole | null;
|
|
12
|
+
export declare function orgRoleSatisfies(actual: OrgRole | null | undefined, required: OrgRole): boolean;
|
|
13
|
+
//# sourceMappingURL=org-role.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"org-role.d.ts","sourceRoot":"","sources":["../../../src/nestjs/auth/org-role.ts"],"names":[],"mappings":"AAoCA,oBAAY,gBAAgB;IAE1B,SAAS,cAAc;CACxB;AAED,eAAO,MAAM,oBAAoB,EAAE,SAAS,gBAAgB,EAElD,CAAC;AASX,oBAAY,OAAO;IACjB,KAAK,cAAc;IACnB,KAAK,cAAc;IACnB,MAAM,eAAe;CACtB;AA2BD,wBAAgB,eAAe,CAC7B,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAC9B,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAazB;AAMD,wBAAgB,oBAAoB,CAClC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC/B,KAAK,EAAE,MAAM,GACZ,OAAO,GAAG,IAAI,CAGhB;AAOD,wBAAgB,gBAAgB,CAC9B,MAAM,EAAE,OAAO,GAAG,IAAI,GAAG,SAAS,EAClC,QAAQ,EAAE,OAAO,GAChB,OAAO,CAGT"}
|
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.OrgRole = exports.ORG_ROLES_CLAIM_KEYS = exports.OrgRolesClaimKey = void 0;
|
|
4
|
+
exports.resolveOrgRoles = resolveOrgRoles;
|
|
5
|
+
exports.resolveOrgRoleForOrg = resolveOrgRoleForOrg;
|
|
6
|
+
exports.orgRoleSatisfies = orgRoleSatisfies;
|
|
7
|
+
var OrgRolesClaimKey;
|
|
8
|
+
(function (OrgRolesClaimKey) {
|
|
9
|
+
OrgRolesClaimKey["Canonical"] = "org_roles";
|
|
10
|
+
})(OrgRolesClaimKey || (exports.OrgRolesClaimKey = OrgRolesClaimKey = {}));
|
|
11
|
+
exports.ORG_ROLES_CLAIM_KEYS = [
|
|
12
|
+
OrgRolesClaimKey.Canonical,
|
|
13
|
+
];
|
|
14
|
+
var OrgRole;
|
|
15
|
+
(function (OrgRole) {
|
|
16
|
+
OrgRole["Owner"] = "org_owner";
|
|
17
|
+
OrgRole["Admin"] = "org_admin";
|
|
18
|
+
OrgRole["Member"] = "org_member";
|
|
19
|
+
})(OrgRole || (exports.OrgRole = OrgRole = {}));
|
|
20
|
+
const ORG_ROLE_RANK = {
|
|
21
|
+
[OrgRole.Owner]: 3,
|
|
22
|
+
[OrgRole.Admin]: 2,
|
|
23
|
+
[OrgRole.Member]: 1,
|
|
24
|
+
};
|
|
25
|
+
function isOrgRole(value) {
|
|
26
|
+
return (typeof value === 'string' &&
|
|
27
|
+
Object.values(OrgRole).includes(value));
|
|
28
|
+
}
|
|
29
|
+
function resolveOrgRoles(claims) {
|
|
30
|
+
for (const key of exports.ORG_ROLES_CLAIM_KEYS) {
|
|
31
|
+
const parsed = coerceClaimObject(claims[key]);
|
|
32
|
+
if (!parsed)
|
|
33
|
+
continue;
|
|
34
|
+
const out = {};
|
|
35
|
+
for (const [orgId, role] of Object.entries(parsed)) {
|
|
36
|
+
if (orgId.length > 0 && isOrgRole(role)) {
|
|
37
|
+
out[orgId] = role;
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
return out;
|
|
41
|
+
}
|
|
42
|
+
return {};
|
|
43
|
+
}
|
|
44
|
+
function resolveOrgRoleForOrg(claims, orgId) {
|
|
45
|
+
if (!orgId)
|
|
46
|
+
return null;
|
|
47
|
+
return resolveOrgRoles(claims)[orgId] ?? null;
|
|
48
|
+
}
|
|
49
|
+
function orgRoleSatisfies(actual, required) {
|
|
50
|
+
if (!actual)
|
|
51
|
+
return false;
|
|
52
|
+
return ORG_ROLE_RANK[actual] >= ORG_ROLE_RANK[required];
|
|
53
|
+
}
|
|
54
|
+
function coerceClaimObject(raw) {
|
|
55
|
+
let value = raw;
|
|
56
|
+
if (Array.isArray(value)) {
|
|
57
|
+
value = value.length === 1 ? value[0] : undefined;
|
|
58
|
+
}
|
|
59
|
+
if (typeof value === 'string') {
|
|
60
|
+
const trimmed = value.trim();
|
|
61
|
+
if (trimmed.length === 0)
|
|
62
|
+
return null;
|
|
63
|
+
try {
|
|
64
|
+
value = JSON.parse(trimmed);
|
|
65
|
+
}
|
|
66
|
+
catch {
|
|
67
|
+
return null;
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
if (value && typeof value === 'object' && !Array.isArray(value)) {
|
|
71
|
+
return value;
|
|
72
|
+
}
|
|
73
|
+
return null;
|
|
74
|
+
}
|
|
75
|
+
//# sourceMappingURL=org-role.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"org-role.js","sourceRoot":"","sources":["../../../src/nestjs/auth/org-role.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import type { DecodedJwtHeader, DecodedJwtPayload, IssuerTenantResolver } from '@xemahq/oidc-guard';
|
|
2
|
+
import type { AuthModuleOptions } from './auth-module-options';
|
|
3
|
+
export interface MultiRealmKeySource {
|
|
4
|
+
readonly discoveryBaseUrls: string[];
|
|
5
|
+
readonly allowedRealms: string[];
|
|
6
|
+
}
|
|
7
|
+
export declare class RealmTokenVerifier {
|
|
8
|
+
private readonly options?;
|
|
9
|
+
private static readonly SINGLE_REALM_CACHE_KEY;
|
|
10
|
+
private readonly logger;
|
|
11
|
+
private readonly jwks;
|
|
12
|
+
private readonly issuerMetadata;
|
|
13
|
+
readonly tenantResolver: IssuerTenantResolver;
|
|
14
|
+
private readonly oidcVerifier;
|
|
15
|
+
private multiRealmConfig;
|
|
16
|
+
private resolvingConfig;
|
|
17
|
+
constructor(options?: AuthModuleOptions | undefined);
|
|
18
|
+
decode(token: string): {
|
|
19
|
+
header: DecodedJwtHeader;
|
|
20
|
+
payload: DecodedJwtPayload;
|
|
21
|
+
};
|
|
22
|
+
verify(token: string): Promise<DecodedJwtPayload>;
|
|
23
|
+
assertKeySourceResolvable(consumer: string): Promise<void>;
|
|
24
|
+
configuredIssuers(): string[];
|
|
25
|
+
private verifySingleRealm;
|
|
26
|
+
private resolveMultiRealmKeySource;
|
|
27
|
+
private resolveKeycloakBaseUrl;
|
|
28
|
+
private resolveAllowedRealms;
|
|
29
|
+
}
|
|
30
|
+
//# sourceMappingURL=realm-token-verifier.d.ts.map
|