@xemahq/authorization-nest 0.4.0 → 0.5.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/authorization.module.d.ts.map +1 -1
- package/dist/authorization.module.js +16 -1
- package/dist/authorization.module.js.map +1 -1
- package/dist/grant-version.reader.d.ts +19 -0
- package/dist/grant-version.reader.d.ts.map +1 -0
- package/dist/grant-version.reader.js +71 -0
- package/dist/grant-version.reader.js.map +1 -0
- package/dist/index.d.ts +2 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -0
- package/dist/index.js.map +1 -1
- package/dist/route-action-evaluator.d.ts +38 -0
- package/dist/route-action-evaluator.d.ts.map +1 -0
- package/dist/route-action-evaluator.js +146 -0
- package/dist/route-action-evaluator.js.map +1 -0
- package/package.json +3 -3
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"authorization.module.d.ts","sourceRoot":"","sources":["../src/authorization.module.ts"],"names":[],"mappings":"AAAA,OAAO,EAAU,KAAK,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAE5D,OAAO,EAGL,KAAK,wBAAwB,EAC9B,MAAM,yBAAyB,CAAC;
|
|
1
|
+
{"version":3,"file":"authorization.module.d.ts","sourceRoot":"","sources":["../src/authorization.module.ts"],"names":[],"mappings":"AAAA,OAAO,EAAU,KAAK,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAE5D,OAAO,EAGL,KAAK,wBAAwB,EAC9B,MAAM,yBAAyB,CAAC;AA0BjC,qBACa,uBAAuB;WACpB,OAAO,CACnB,OAAO,CAAC,EAAE,OAAO,CAAC,wBAAwB,CAAC,GAC1C,aAAa;CA+BjB"}
|
|
@@ -12,7 +12,9 @@ const common_1 = require("@nestjs/common");
|
|
|
12
12
|
const authorization_options_1 = require("./authorization.options");
|
|
13
13
|
const authorize_decorator_1 = require("./authorize.decorator");
|
|
14
14
|
const authzen_transport_1 = require("./authzen.transport");
|
|
15
|
+
const grant_version_reader_1 = require("./grant-version.reader");
|
|
15
16
|
const policy_decisions_1 = require("./policy-decisions");
|
|
17
|
+
const route_action_evaluator_1 = require("./route-action-evaluator");
|
|
16
18
|
const xema_authz_service_1 = require("./xema-authz.service");
|
|
17
19
|
let XemaAuthorizationModule = XemaAuthorizationModule_1 = class XemaAuthorizationModule {
|
|
18
20
|
static forRoot(options) {
|
|
@@ -28,9 +30,22 @@ let XemaAuthorizationModule = XemaAuthorizationModule_1 = class XemaAuthorizatio
|
|
|
28
30
|
{ provide: authzen_transport_1.AUTHZEN_PDP_TRANSPORT, useExisting: authzen_transport_1.HttpAuthzenPdpTransport },
|
|
29
31
|
xema_authz_service_1.XemaAuthz,
|
|
30
32
|
policy_decisions_1.XemaPolicyDecisions,
|
|
33
|
+
grant_version_reader_1.HttpAuthorizationGrantVersionReader,
|
|
34
|
+
{
|
|
35
|
+
provide: grant_version_reader_1.AUTHORIZATION_GRANT_VERSION_READER,
|
|
36
|
+
useExisting: grant_version_reader_1.HttpAuthorizationGrantVersionReader,
|
|
37
|
+
},
|
|
38
|
+
route_action_evaluator_1.XemaRouteActionEvaluator,
|
|
39
|
+
authorize_decorator_1.XemaAuthorizeGuard,
|
|
40
|
+
],
|
|
41
|
+
exports: [
|
|
42
|
+
xema_authz_service_1.XemaAuthz,
|
|
43
|
+
policy_decisions_1.XemaPolicyDecisions,
|
|
44
|
+
route_action_evaluator_1.XemaRouteActionEvaluator,
|
|
31
45
|
authorize_decorator_1.XemaAuthorizeGuard,
|
|
46
|
+
authzen_transport_1.AUTHZEN_PDP_TRANSPORT,
|
|
47
|
+
grant_version_reader_1.AUTHORIZATION_GRANT_VERSION_READER,
|
|
32
48
|
],
|
|
33
|
-
exports: [xema_authz_service_1.XemaAuthz, policy_decisions_1.XemaPolicyDecisions, authorize_decorator_1.XemaAuthorizeGuard, authzen_transport_1.AUTHZEN_PDP_TRANSPORT],
|
|
34
49
|
};
|
|
35
50
|
}
|
|
36
51
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"authorization.module.js","sourceRoot":"","sources":["../src/authorization.module.ts"],"names":[],"mappings":";;;;;;;;;;AAAA,2CAA4D;AAE5D,mEAIiC;AACjC,+DAA2D;AAC3D,2DAG6B;AAC7B,yDAAyD;AACzD,6DAAiD;AAe1C,IAAM,uBAAuB,+BAA7B,MAAM,uBAAuB;IAC3B,MAAM,CAAC,OAAO,CACnB,OAA2C;QAE3C,OAAO;YACL,MAAM,EAAE,yBAAuB;YAC/B,MAAM,EAAE,IAAI;YACZ,SAAS,EAAE;gBACT;oBACE,OAAO,EAAE,kDAA0B;oBACnC,QAAQ,EAAE,IAAA,uDAA+B,EAAC,OAAO,CAAC;iBACnD;gBACD,2CAAuB;gBACvB,EAAE,OAAO,EAAE,yCAAqB,EAAE,WAAW,EAAE,2CAAuB,EAAE;gBACxE,8BAAS;gBACT,sCAAmB;gBACnB,wCAAkB;aACnB;YACD,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"authorization.module.js","sourceRoot":"","sources":["../src/authorization.module.ts"],"names":[],"mappings":";;;;;;;;;;AAAA,2CAA4D;AAE5D,mEAIiC;AACjC,+DAA2D;AAC3D,2DAG6B;AAC7B,iEAGgC;AAChC,yDAAyD;AACzD,qEAAoE;AACpE,6DAAiD;AAe1C,IAAM,uBAAuB,+BAA7B,MAAM,uBAAuB;IAC3B,MAAM,CAAC,OAAO,CACnB,OAA2C;QAE3C,OAAO;YACL,MAAM,EAAE,yBAAuB;YAC/B,MAAM,EAAE,IAAI;YACZ,SAAS,EAAE;gBACT;oBACE,OAAO,EAAE,kDAA0B;oBACnC,QAAQ,EAAE,IAAA,uDAA+B,EAAC,OAAO,CAAC;iBACnD;gBACD,2CAAuB;gBACvB,EAAE,OAAO,EAAE,yCAAqB,EAAE,WAAW,EAAE,2CAAuB,EAAE;gBACxE,8BAAS;gBACT,sCAAmB;gBACnB,0DAAmC;gBACnC;oBACE,OAAO,EAAE,yDAAkC;oBAC3C,WAAW,EAAE,0DAAmC;iBACjD;gBACD,iDAAwB;gBACxB,wCAAkB;aACnB;YACD,OAAO,EAAE;gBACP,8BAAS;gBACT,sCAAmB;gBACnB,iDAAwB;gBACxB,wCAAkB;gBAClB,yCAAqB;gBACrB,yDAAkC;aACnC;SACF,CAAC;IACJ,CAAC;CACF,CAAA;AAlCY,0DAAuB;kCAAvB,uBAAuB;IADnC,IAAA,eAAM,EAAC,EAAE,CAAC;GACE,uBAAuB,CAkCnC"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import { type ServiceRegistry } from '@xemahq/contracts/service-registry';
|
|
2
|
+
import { IdentityBootstrapService } from '@xemahq/identity-client';
|
|
3
|
+
import { type XemaAuthorizationOptions } from './authorization.options';
|
|
4
|
+
export interface AuthorizationGrantVersionReader {
|
|
5
|
+
read(orgId: string): Promise<number>;
|
|
6
|
+
}
|
|
7
|
+
export declare const AUTHORIZATION_GRANT_VERSION_READER: unique symbol;
|
|
8
|
+
export declare class HttpAuthorizationGrantVersionReader implements AuthorizationGrantVersionReader {
|
|
9
|
+
private readonly registry;
|
|
10
|
+
private readonly identityBootstrap;
|
|
11
|
+
private readonly options;
|
|
12
|
+
constructor(registry: ServiceRegistry, identityBootstrap: IdentityBootstrapService, options: XemaAuthorizationOptions);
|
|
13
|
+
read(orgId: string): Promise<number>;
|
|
14
|
+
}
|
|
15
|
+
export declare function assertGrantVersion(orgId: string, body: {
|
|
16
|
+
readonly orgId?: unknown;
|
|
17
|
+
readonly grantVersion?: unknown;
|
|
18
|
+
}): number;
|
|
19
|
+
//# sourceMappingURL=grant-version.reader.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"grant-version.reader.d.ts","sourceRoot":"","sources":["../src/grant-version.reader.ts"],"names":[],"mappings":"AACA,OAAO,EAEL,KAAK,eAAe,EACrB,MAAM,oCAAoC,CAAC;AAC5C,OAAO,EAAE,wBAAwB,EAAE,MAAM,yBAAyB,CAAC;AAOnE,OAAO,EAEL,KAAK,wBAAwB,EAC9B,MAAM,yBAAyB,CAAC;AAUjC,MAAM,WAAW,+BAA+B;IAC9C,IAAI,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;CACtC;AAED,eAAO,MAAM,kCAAkC,eAE9C,CAAC;AAKF,qBACa,mCACX,YAAW,+BAA+B;IAIxC,OAAO,CAAC,QAAQ,CAAC,QAAQ;IACzB,OAAO,CAAC,QAAQ,CAAC,iBAAiB;IAElC,OAAO,CAAC,QAAQ,CAAC,OAAO;gBAHP,QAAQ,EAAE,eAAe,EACzB,iBAAiB,EAAE,wBAAwB,EAE3C,OAAO,EAAE,wBAAwB;IAGvC,IAAI,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;CA4BlD;AAGD,wBAAgB,kBAAkB,CAChC,KAAK,EAAE,MAAM,EACb,IAAI,EAAE;IAAE,QAAQ,CAAC,KAAK,CAAC,EAAE,OAAO,CAAC;IAAC,QAAQ,CAAC,YAAY,CAAC,EAAE,OAAO,CAAA;CAAE,GAClE,MAAM,CAaR"}
|
|
@@ -0,0 +1,71 @@
|
|
|
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 __param = (this && this.__param) || function (paramIndex, decorator) {
|
|
12
|
+
return function (target, key) { decorator(target, key, paramIndex); }
|
|
13
|
+
};
|
|
14
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
15
|
+
exports.HttpAuthorizationGrantVersionReader = exports.AUTHORIZATION_GRANT_VERSION_READER = void 0;
|
|
16
|
+
exports.assertGrantVersion = assertGrantVersion;
|
|
17
|
+
const common_1 = require("@nestjs/common");
|
|
18
|
+
const service_registry_1 = require("@xemahq/contracts/service-registry");
|
|
19
|
+
const identity_client_1 = require("@xemahq/identity-client");
|
|
20
|
+
const platform_common_1 = require("@xemahq/platform-common");
|
|
21
|
+
const service_registry_nest_1 = require("@xemahq/service-registry-nest");
|
|
22
|
+
const authorization_options_1 = require("./authorization.options");
|
|
23
|
+
const authzen_transport_1 = require("./authzen.transport");
|
|
24
|
+
exports.AUTHORIZATION_GRANT_VERSION_READER = Symbol('AUTHORIZATION_GRANT_VERSION_READER');
|
|
25
|
+
const GRANT_VERSION_PATH = '/authorization/grant-version/';
|
|
26
|
+
let HttpAuthorizationGrantVersionReader = class HttpAuthorizationGrantVersionReader {
|
|
27
|
+
registry;
|
|
28
|
+
identityBootstrap;
|
|
29
|
+
options;
|
|
30
|
+
constructor(registry, identityBootstrap, options) {
|
|
31
|
+
this.registry = registry;
|
|
32
|
+
this.identityBootstrap = identityBootstrap;
|
|
33
|
+
this.options = options;
|
|
34
|
+
}
|
|
35
|
+
async read(orgId) {
|
|
36
|
+
const baseUrl = await (0, service_registry_nest_1.resolveHttpUrl)(this.registry, service_registry_1.ServiceName.AUTHORIZATION_API);
|
|
37
|
+
const path = `${GRANT_VERSION_PATH}${encodeURIComponent(orgId)}`;
|
|
38
|
+
const response = await fetch(`${baseUrl.replace(/\/+$/, '')}${path}`, {
|
|
39
|
+
method: 'GET',
|
|
40
|
+
headers: {
|
|
41
|
+
Authorization: `Bearer ${await this.identityBootstrap.getAccessToken()}`,
|
|
42
|
+
'X-Xema-Org-Id': orgId,
|
|
43
|
+
},
|
|
44
|
+
signal: AbortSignal.timeout(this.options.requestTimeoutMs),
|
|
45
|
+
});
|
|
46
|
+
if (!response.ok) {
|
|
47
|
+
const text = await response.text();
|
|
48
|
+
throw new authzen_transport_1.AuthzenPdpError(`authorization-api GET ${path} failed with HTTP ${response.status}: ${text.slice(0, 2000)}`, response.status, undefined);
|
|
49
|
+
}
|
|
50
|
+
const body = (0, platform_common_1.unwrapPlatformResponseEnvelope)(await response.json(), `authorization-api GET ${path}`);
|
|
51
|
+
return assertGrantVersion(orgId, body);
|
|
52
|
+
}
|
|
53
|
+
};
|
|
54
|
+
exports.HttpAuthorizationGrantVersionReader = HttpAuthorizationGrantVersionReader;
|
|
55
|
+
exports.HttpAuthorizationGrantVersionReader = HttpAuthorizationGrantVersionReader = __decorate([
|
|
56
|
+
(0, common_1.Injectable)(),
|
|
57
|
+
__param(0, (0, common_1.Inject)(service_registry_nest_1.SERVICE_REGISTRY_TOKEN)),
|
|
58
|
+
__param(2, (0, common_1.Inject)(authorization_options_1.XEMA_AUTHORIZATION_OPTIONS)),
|
|
59
|
+
__metadata("design:paramtypes", [Object, identity_client_1.IdentityBootstrapService, Object])
|
|
60
|
+
], HttpAuthorizationGrantVersionReader);
|
|
61
|
+
function assertGrantVersion(orgId, body) {
|
|
62
|
+
const version = body.grantVersion;
|
|
63
|
+
if (body.orgId !== orgId ||
|
|
64
|
+
typeof version !== 'number' ||
|
|
65
|
+
!Number.isSafeInteger(version) ||
|
|
66
|
+
version < 0) {
|
|
67
|
+
throw new Error(`authorization-api returned a malformed policy revision for org "${orgId}".`);
|
|
68
|
+
}
|
|
69
|
+
return version;
|
|
70
|
+
}
|
|
71
|
+
//# sourceMappingURL=grant-version.reader.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"grant-version.reader.js","sourceRoot":"","sources":["../src/grant-version.reader.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;AA+EA,gDAgBC;AA/FD,2CAAoD;AACpD,yEAG4C;AAC5C,6DAAmE;AACnE,6DAAyE;AACzE,yEAGuC;AAEvC,mEAGiC;AACjC,2DAAsD;AAazC,QAAA,kCAAkC,GAAG,MAAM,CACtD,oCAAoC,CACrC,CAAC;AAGF,MAAM,kBAAkB,GAAG,+BAA+B,CAAC;AAGpD,IAAM,mCAAmC,GAAzC,MAAM,mCAAmC;IAK3B;IACA;IAEA;IALnB,YAEmB,QAAyB,EACzB,iBAA2C,EAE3C,OAAiC;QAHjC,aAAQ,GAAR,QAAQ,CAAiB;QACzB,sBAAiB,GAAjB,iBAAiB,CAA0B;QAE3C,YAAO,GAAP,OAAO,CAA0B;IACjD,CAAC;IAEG,KAAK,CAAC,IAAI,CAAC,KAAa;QAC7B,MAAM,OAAO,GAAG,MAAM,IAAA,sCAAc,EAClC,IAAI,CAAC,QAAQ,EACb,8BAAW,CAAC,iBAAiB,CAC9B,CAAC;QACF,MAAM,IAAI,GAAG,GAAG,kBAAkB,GAAG,kBAAkB,CAAC,KAAK,CAAC,EAAE,CAAC;QACjE,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,GAAG,OAAO,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,GAAG,IAAI,EAAE,EAAE;YACpE,MAAM,EAAE,KAAK;YACb,OAAO,EAAE;gBACP,aAAa,EAAE,UAAU,MAAM,IAAI,CAAC,iBAAiB,CAAC,cAAc,EAAE,EAAE;gBACxE,eAAe,EAAE,KAAK;aACvB;YACD,MAAM,EAAE,WAAW,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,gBAAgB,CAAC;SAC3D,CAAC,CAAC;QACH,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;YACjB,MAAM,IAAI,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC;YACnC,MAAM,IAAI,mCAAe,CACvB,yBAAyB,IAAI,qBAAqB,QAAQ,CAAC,MAAM,KAAK,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,IAAI,CAAC,EAAE,EAC3F,QAAQ,CAAC,MAAM,EACf,SAAS,CACV,CAAC;QACJ,CAAC;QACD,MAAM,IAAI,GAAG,IAAA,gDAA8B,EAGxC,MAAM,QAAQ,CAAC,IAAI,EAAE,EAAE,yBAAyB,IAAI,EAAE,CAAC,CAAC;QAC3D,OAAO,kBAAkB,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;IACzC,CAAC;CACF,CAAA;AAvCY,kFAAmC;8CAAnC,mCAAmC;IAD/C,IAAA,mBAAU,GAAE;IAKR,WAAA,IAAA,eAAM,EAAC,8CAAsB,CAAC,CAAA;IAG9B,WAAA,IAAA,eAAM,EAAC,kDAA0B,CAAC,CAAA;6CADC,0CAAwB;GANnD,mCAAmC,CAuC/C;AAGD,SAAgB,kBAAkB,CAChC,KAAa,EACb,IAAmE;IAEnE,MAAM,OAAO,GAAG,IAAI,CAAC,YAAY,CAAC;IAClC,IACE,IAAI,CAAC,KAAK,KAAK,KAAK;QACpB,OAAO,OAAO,KAAK,QAAQ;QAC3B,CAAC,MAAM,CAAC,aAAa,CAAC,OAAO,CAAC;QAC9B,OAAO,GAAG,CAAC,EACX,CAAC;QACD,MAAM,IAAI,KAAK,CACb,mEAAmE,KAAK,IAAI,CAC7E,CAAC;IACJ,CAAC;IACD,OAAO,OAAO,CAAC;AACjB,CAAC"}
|
package/dist/index.d.ts
CHANGED
|
@@ -6,6 +6,8 @@ export * from './authzen.transport';
|
|
|
6
6
|
export * from './subject-from-context';
|
|
7
7
|
export * from './xema-authz.service';
|
|
8
8
|
export * from './policy-decisions';
|
|
9
|
+
export * from './grant-version.reader';
|
|
10
|
+
export * from './route-action-evaluator';
|
|
9
11
|
export * from './internal-caller-or-member-context.guard';
|
|
10
12
|
export * from './organization-delegation-admission';
|
|
11
13
|
export * from './relayable-caller';
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,oBAAoB,CAAC;AACnC,cAAc,wBAAwB,CAAC;AACvC,cAAc,yBAAyB,CAAC;AACxC,cAAc,uBAAuB,CAAC;AACtC,cAAc,qBAAqB,CAAC;AACpC,cAAc,wBAAwB,CAAC;AACvC,cAAc,sBAAsB,CAAC;AACrC,cAAc,oBAAoB,CAAC;AACnC,cAAc,2CAA2C,CAAC;AAC1D,cAAc,qCAAqC,CAAC;AACpD,cAAc,oBAAoB,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,oBAAoB,CAAC;AACnC,cAAc,wBAAwB,CAAC;AACvC,cAAc,yBAAyB,CAAC;AACxC,cAAc,uBAAuB,CAAC;AACtC,cAAc,qBAAqB,CAAC;AACpC,cAAc,wBAAwB,CAAC;AACvC,cAAc,sBAAsB,CAAC;AACrC,cAAc,oBAAoB,CAAC;AACnC,cAAc,wBAAwB,CAAC;AACvC,cAAc,0BAA0B,CAAC;AACzC,cAAc,2CAA2C,CAAC;AAC1D,cAAc,qCAAqC,CAAC;AACpD,cAAc,oBAAoB,CAAC"}
|
package/dist/index.js
CHANGED
|
@@ -22,6 +22,8 @@ __exportStar(require("./authzen.transport"), exports);
|
|
|
22
22
|
__exportStar(require("./subject-from-context"), exports);
|
|
23
23
|
__exportStar(require("./xema-authz.service"), exports);
|
|
24
24
|
__exportStar(require("./policy-decisions"), exports);
|
|
25
|
+
__exportStar(require("./grant-version.reader"), exports);
|
|
26
|
+
__exportStar(require("./route-action-evaluator"), exports);
|
|
25
27
|
__exportStar(require("./internal-caller-or-member-context.guard"), exports);
|
|
26
28
|
__exportStar(require("./organization-delegation-admission"), exports);
|
|
27
29
|
__exportStar(require("./relayable-caller"), exports);
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,qDAAmC;AACnC,yDAAuC;AACvC,0DAAwC;AACxC,wDAAsC;AACtC,sDAAoC;AACpC,yDAAuC;AACvC,uDAAqC;AACrC,qDAAmC;AACnC,4EAA0D;AAC1D,sEAAoD;AACpD,qDAAmC"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,qDAAmC;AACnC,yDAAuC;AACvC,0DAAwC;AACxC,wDAAsC;AACtC,sDAAoC;AACpC,yDAAuC;AACvC,uDAAqC;AACrC,qDAAmC;AACnC,yDAAuC;AACvC,2DAAyC;AACzC,4EAA0D;AAC1D,sEAAoD;AACpD,qDAAmC"}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
import { type CapabilityRef } from '@xemahq/contracts/capability';
|
|
2
|
+
import { type AuthorizationGrantVersionReader } from './grant-version.reader';
|
|
3
|
+
import { XemaPolicyDecisions } from './policy-decisions';
|
|
4
|
+
import type { RequestContext } from '@xemahq/platform-common';
|
|
5
|
+
export interface RouteActionCandidate<Action extends string> {
|
|
6
|
+
readonly key: string;
|
|
7
|
+
readonly action: Action;
|
|
8
|
+
readonly capabilityRef: CapabilityRef;
|
|
9
|
+
}
|
|
10
|
+
export type RouteActionScope = {
|
|
11
|
+
readonly kind: 'org';
|
|
12
|
+
readonly orgId: string;
|
|
13
|
+
} | {
|
|
14
|
+
readonly kind: 'project';
|
|
15
|
+
readonly orgId: string;
|
|
16
|
+
readonly projectId: string;
|
|
17
|
+
} | {
|
|
18
|
+
readonly kind: 'platform';
|
|
19
|
+
readonly orgId: string;
|
|
20
|
+
};
|
|
21
|
+
export interface RouteActionEvaluation<Action extends string> {
|
|
22
|
+
readonly allowed: ReadonlyMap<string, Action>;
|
|
23
|
+
readonly policyRevision: number;
|
|
24
|
+
}
|
|
25
|
+
export declare enum RouteActionPolicyErrorCode {
|
|
26
|
+
CrossOrg = "ROUTE_ACTION_POLICY_CROSS_ORG",
|
|
27
|
+
CrossProject = "ROUTE_ACTION_POLICY_CROSS_PROJECT",
|
|
28
|
+
Stale = "ROUTE_ACTION_POLICY_STALE",
|
|
29
|
+
RequestRejected = "ROUTE_ACTION_POLICY_REQUEST_REJECTED",
|
|
30
|
+
Unavailable = "ROUTE_ACTION_POLICY_UNAVAILABLE"
|
|
31
|
+
}
|
|
32
|
+
export declare class XemaRouteActionEvaluator {
|
|
33
|
+
private readonly decisions;
|
|
34
|
+
private readonly grantVersions;
|
|
35
|
+
constructor(decisions: XemaPolicyDecisions, grantVersions: AuthorizationGrantVersionReader);
|
|
36
|
+
evaluate<Action extends string>(context: RequestContext, scope: RouteActionScope, candidates: readonly RouteActionCandidate<Action>[]): Promise<RouteActionEvaluation<Action>>;
|
|
37
|
+
}
|
|
38
|
+
//# sourceMappingURL=route-action-evaluator.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"route-action-evaluator.d.ts","sourceRoot":"","sources":["../src/route-action-evaluator.ts"],"names":[],"mappings":"AASA,OAAO,EAAE,KAAK,aAAa,EAAE,MAAM,8BAA8B,CAAC;AAUlE,OAAO,EAEL,KAAK,+BAA+B,EACrC,MAAM,wBAAwB,CAAC;AAChC,OAAO,EAA8B,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AAGrF,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAC;AAG9D,MAAM,WAAW,oBAAoB,CAAC,MAAM,SAAS,MAAM;IACzD,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,aAAa,EAAE,aAAa,CAAC;CACvC;AAGD,MAAM,MAAM,gBAAgB,GACxB;IAAE,QAAQ,CAAC,IAAI,EAAE,KAAK,CAAC;IAAC,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAA;CAAE,GAChD;IAAE,QAAQ,CAAC,IAAI,EAAE,SAAS,CAAC;IAAC,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAA;CAAE,GAEhF;IAAE,QAAQ,CAAC,IAAI,EAAE,UAAU,CAAC;IAAC,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAA;CAAE,CAAC;AAE1D,MAAM,WAAW,qBAAqB,CAAC,MAAM,SAAS,MAAM;IAE1D,QAAQ,CAAC,OAAO,EAAE,WAAW,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAE9C,QAAQ,CAAC,cAAc,EAAE,MAAM,CAAC;CACjC;AAGD,oBAAY,0BAA0B;IACpC,QAAQ,kCAAkC;IAC1C,YAAY,sCAAsC;IAClD,KAAK,8BAA8B;IACnC,eAAe,yCAAyC;IACxD,WAAW,oCAAoC;CAChD;AA6BD,qBACa,wBAAwB;IAEjC,OAAO,CAAC,QAAQ,CAAC,SAAS;IAE1B,OAAO,CAAC,QAAQ,CAAC,aAAa;gBAFb,SAAS,EAAE,mBAAmB,EAE9B,aAAa,EAAE,+BAA+B;IAGpD,QAAQ,CAAC,MAAM,SAAS,MAAM,EACzC,OAAO,EAAE,cAAc,EACvB,KAAK,EAAE,gBAAgB,EACvB,UAAU,EAAE,SAAS,oBAAoB,CAAC,MAAM,CAAC,EAAE,GAClD,OAAO,CAAC,qBAAqB,CAAC,MAAM,CAAC,CAAC;CAsD1C"}
|
|
@@ -0,0 +1,146 @@
|
|
|
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 __param = (this && this.__param) || function (paramIndex, decorator) {
|
|
12
|
+
return function (target, key) { decorator(target, key, paramIndex); }
|
|
13
|
+
};
|
|
14
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
15
|
+
exports.XemaRouteActionEvaluator = exports.RouteActionPolicyErrorCode = void 0;
|
|
16
|
+
const node_crypto_1 = require("node:crypto");
|
|
17
|
+
const common_1 = require("@nestjs/common");
|
|
18
|
+
const execution_context_1 = require("@xemahq/contracts/execution-context");
|
|
19
|
+
const execution_environment_1 = require("@xemahq/contracts/execution-environment");
|
|
20
|
+
const policy_1 = require("@xemahq/contracts/policy");
|
|
21
|
+
const space_1 = require("@xemahq/contracts/space");
|
|
22
|
+
const authzen_transport_1 = require("./authzen.transport");
|
|
23
|
+
const grant_version_reader_1 = require("./grant-version.reader");
|
|
24
|
+
const policy_decisions_1 = require("./policy-decisions");
|
|
25
|
+
const relayable_caller_1 = require("./relayable-caller");
|
|
26
|
+
var RouteActionPolicyErrorCode;
|
|
27
|
+
(function (RouteActionPolicyErrorCode) {
|
|
28
|
+
RouteActionPolicyErrorCode["CrossOrg"] = "ROUTE_ACTION_POLICY_CROSS_ORG";
|
|
29
|
+
RouteActionPolicyErrorCode["CrossProject"] = "ROUTE_ACTION_POLICY_CROSS_PROJECT";
|
|
30
|
+
RouteActionPolicyErrorCode["Stale"] = "ROUTE_ACTION_POLICY_STALE";
|
|
31
|
+
RouteActionPolicyErrorCode["RequestRejected"] = "ROUTE_ACTION_POLICY_REQUEST_REJECTED";
|
|
32
|
+
RouteActionPolicyErrorCode["Unavailable"] = "ROUTE_ACTION_POLICY_UNAVAILABLE";
|
|
33
|
+
})(RouteActionPolicyErrorCode || (exports.RouteActionPolicyErrorCode = RouteActionPolicyErrorCode = {}));
|
|
34
|
+
class PolicyRevisionChangedError extends Error {
|
|
35
|
+
constructor(before, after) {
|
|
36
|
+
super(`Authorization policy revision changed from ${before} to ${after}.`);
|
|
37
|
+
this.name = PolicyRevisionChangedError.name;
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
let XemaRouteActionEvaluator = class XemaRouteActionEvaluator {
|
|
41
|
+
decisions;
|
|
42
|
+
grantVersions;
|
|
43
|
+
constructor(decisions, grantVersions) {
|
|
44
|
+
this.decisions = decisions;
|
|
45
|
+
this.grantVersions = grantVersions;
|
|
46
|
+
}
|
|
47
|
+
async evaluate(context, scope, candidates) {
|
|
48
|
+
assertScope(context, scope);
|
|
49
|
+
assertUniqueKeys(candidates);
|
|
50
|
+
try {
|
|
51
|
+
const revisionBefore = await this.grantVersions.read(scope.orgId);
|
|
52
|
+
if (candidates.length === 0) {
|
|
53
|
+
return { allowed: new Map(), policyRevision: revisionBefore };
|
|
54
|
+
}
|
|
55
|
+
const forwardedCaller = (0, relayable_caller_1.relayableCallerContext)(context, scope.orgId);
|
|
56
|
+
const decisions = await this.decisions.decideAll(candidates.map((candidate) => toPolicyRequest(context, scope, candidate)), forwardedCaller === undefined ? undefined : { forwardedCaller });
|
|
57
|
+
const revisionAfter = await this.grantVersions.read(scope.orgId);
|
|
58
|
+
if (revisionAfter !== revisionBefore) {
|
|
59
|
+
throw new PolicyRevisionChangedError(revisionBefore, revisionAfter);
|
|
60
|
+
}
|
|
61
|
+
const allowed = new Map();
|
|
62
|
+
decisions.forEach((decision, index) => {
|
|
63
|
+
const candidate = candidates[index];
|
|
64
|
+
if (decision.kind === policy_1.PolicyDecisionKind.Allow && candidate !== undefined) {
|
|
65
|
+
allowed.set(candidate.key, candidate.action);
|
|
66
|
+
}
|
|
67
|
+
});
|
|
68
|
+
return { allowed, policyRevision: revisionAfter };
|
|
69
|
+
}
|
|
70
|
+
catch (error) {
|
|
71
|
+
if (error instanceof PolicyRevisionChangedError) {
|
|
72
|
+
throw new common_1.ServiceUnavailableException({
|
|
73
|
+
code: RouteActionPolicyErrorCode.Stale,
|
|
74
|
+
message: 'Authorization policy changed during action evaluation; refresh and retry.',
|
|
75
|
+
});
|
|
76
|
+
}
|
|
77
|
+
const status = error instanceof policy_decisions_1.PolicyDecisionRequestError || error instanceof authzen_transport_1.AuthzenPdpError
|
|
78
|
+
? error.status
|
|
79
|
+
: undefined;
|
|
80
|
+
if (status !== undefined && status >= 400 && status < 500 && status !== 408 && status !== 429) {
|
|
81
|
+
throw new common_1.InternalServerErrorException({
|
|
82
|
+
code: RouteActionPolicyErrorCode.RequestRejected,
|
|
83
|
+
message: `Authorization policy refused this service's evaluation request (HTTP ${status}); ` +
|
|
84
|
+
`actions are denied fail-closed. This is a defect in the calling service, not a policy-plane outage: ` +
|
|
85
|
+
error.message,
|
|
86
|
+
});
|
|
87
|
+
}
|
|
88
|
+
throw new common_1.ServiceUnavailableException({
|
|
89
|
+
code: RouteActionPolicyErrorCode.Unavailable,
|
|
90
|
+
message: 'Authorization policy is unavailable; actions are denied fail-closed.',
|
|
91
|
+
});
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
};
|
|
95
|
+
exports.XemaRouteActionEvaluator = XemaRouteActionEvaluator;
|
|
96
|
+
exports.XemaRouteActionEvaluator = XemaRouteActionEvaluator = __decorate([
|
|
97
|
+
(0, common_1.Injectable)(),
|
|
98
|
+
__param(1, (0, common_1.Inject)(grant_version_reader_1.AUTHORIZATION_GRANT_VERSION_READER)),
|
|
99
|
+
__metadata("design:paramtypes", [policy_decisions_1.XemaPolicyDecisions, Object])
|
|
100
|
+
], XemaRouteActionEvaluator);
|
|
101
|
+
function assertScope(context, scope) {
|
|
102
|
+
if (scope.orgId !== context.orgId) {
|
|
103
|
+
throw new common_1.ForbiddenException({
|
|
104
|
+
code: RouteActionPolicyErrorCode.CrossOrg,
|
|
105
|
+
message: 'The action resource does not belong to the active organization.',
|
|
106
|
+
});
|
|
107
|
+
}
|
|
108
|
+
if (scope.kind === 'project' && context.projectId !== scope.projectId) {
|
|
109
|
+
throw new common_1.ForbiddenException({
|
|
110
|
+
code: RouteActionPolicyErrorCode.CrossProject,
|
|
111
|
+
message: 'The action resource does not belong to the active project.',
|
|
112
|
+
});
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
function assertUniqueKeys(candidates) {
|
|
116
|
+
const keys = new Set();
|
|
117
|
+
for (const candidate of candidates) {
|
|
118
|
+
if (candidate.key.length === 0 || keys.has(candidate.key)) {
|
|
119
|
+
throw new Error('Route action candidates require unique non-empty keys.');
|
|
120
|
+
}
|
|
121
|
+
keys.add(candidate.key);
|
|
122
|
+
}
|
|
123
|
+
}
|
|
124
|
+
function toPolicyRequest(context, scope, candidate) {
|
|
125
|
+
const environment = scope.kind === 'platform'
|
|
126
|
+
? execution_environment_1.ExecutionEnvironmentKind.System
|
|
127
|
+
: scope.kind === 'project'
|
|
128
|
+
? execution_environment_1.ExecutionEnvironmentKind.Project
|
|
129
|
+
: execution_environment_1.ExecutionEnvironmentKind.Org;
|
|
130
|
+
return {
|
|
131
|
+
id: (0, node_crypto_1.randomUUID)(),
|
|
132
|
+
requestId: context.correlationId,
|
|
133
|
+
traceId: context.correlationId,
|
|
134
|
+
subject: { kind: context.subject.kind, id: context.subject.id },
|
|
135
|
+
caller: { kind: execution_context_1.CallerKind.Web },
|
|
136
|
+
space: scope.kind === 'platform'
|
|
137
|
+
? { tier: space_1.SpaceKind.System, orgId: scope.orgId }
|
|
138
|
+
: scope.kind === 'project'
|
|
139
|
+
? { tier: space_1.SpaceKind.Project, orgId: scope.orgId, projectId: scope.projectId }
|
|
140
|
+
: { tier: space_1.SpaceKind.Org, orgId: scope.orgId },
|
|
141
|
+
environment: { id: (0, execution_environment_1.formatEnvironmentRef)(environment), kind: environment },
|
|
142
|
+
capability: { ref: candidate.capabilityRef },
|
|
143
|
+
...(context.delegation === undefined ? {} : { delegation: context.delegation }),
|
|
144
|
+
};
|
|
145
|
+
}
|
|
146
|
+
//# sourceMappingURL=route-action-evaluator.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"route-action-evaluator.js","sourceRoot":"","sources":["../src/route-action-evaluator.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@xemahq/authorization-nest",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.5.0",
|
|
4
4
|
"description": "AuthZEN 1.0 PEP for Xema services: one Nest module, an AuthZEN client against authorization-api, and the @Authorize route guard.",
|
|
5
5
|
"publishConfig": {
|
|
6
6
|
"registry": "https://registry.npmjs.org/",
|
|
@@ -26,8 +26,8 @@
|
|
|
26
26
|
"@nestjs/testing": "11.1.18",
|
|
27
27
|
"@xemahq/contracts": ">=0.50.0",
|
|
28
28
|
"@xemahq/eslint-config": "^0.5.0",
|
|
29
|
-
"@xemahq/identity-client": "^0.
|
|
30
|
-
"@xemahq/platform-common": "^0.
|
|
29
|
+
"@xemahq/identity-client": "^0.16.0",
|
|
30
|
+
"@xemahq/platform-common": "^0.60.0",
|
|
31
31
|
"@xemahq/service-registry-nest": "^0.19.0",
|
|
32
32
|
"@types/jest": "^30.0.0",
|
|
33
33
|
"@types/node": "25.2.3",
|