@xemahq/authorization-nest 0.0.0-stage → 0.1.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.
Files changed (39) hide show
  1. package/LICENSE +175 -0
  2. package/dist/anchor-predicate.d.ts +61 -0
  3. package/dist/anchor-predicate.d.ts.map +1 -0
  4. package/dist/anchor-predicate.js +140 -0
  5. package/dist/anchor-predicate.js.map +1 -0
  6. package/dist/authorization.module.d.ts +6 -0
  7. package/dist/authorization.module.d.ts.map +1 -0
  8. package/dist/authorization.module.js +41 -0
  9. package/dist/authorization.module.js.map +1 -0
  10. package/dist/authorization.options.d.ts +7 -0
  11. package/dist/authorization.options.d.ts.map +1 -0
  12. package/dist/authorization.options.js +14 -0
  13. package/dist/authorization.options.js.map +1 -0
  14. package/dist/authorize.decorator.d.ts +19 -0
  15. package/dist/authorize.decorator.d.ts.map +1 -0
  16. package/dist/authorize.decorator.js +51 -0
  17. package/dist/authorize.decorator.js.map +1 -0
  18. package/dist/authzen.transport.d.ts +30 -0
  19. package/dist/authzen.transport.d.ts.map +1 -0
  20. package/dist/authzen.transport.js +105 -0
  21. package/dist/authzen.transport.js.map +1 -0
  22. package/dist/index.d.ts +9 -0
  23. package/dist/index.d.ts.map +1 -0
  24. package/dist/index.js +25 -0
  25. package/dist/index.js.map +1 -0
  26. package/dist/policy-decisions.d.ts +22 -0
  27. package/dist/policy-decisions.d.ts.map +1 -0
  28. package/dist/policy-decisions.js +163 -0
  29. package/dist/policy-decisions.js.map +1 -0
  30. package/dist/subject-from-context.d.ts +28 -0
  31. package/dist/subject-from-context.d.ts.map +1 -0
  32. package/dist/subject-from-context.js +87 -0
  33. package/dist/subject-from-context.js.map +1 -0
  34. package/dist/xema-authz.service.d.ts +41 -0
  35. package/dist/xema-authz.service.d.ts.map +1 -0
  36. package/dist/xema-authz.service.js +181 -0
  37. package/dist/xema-authz.service.js.map +1 -0
  38. package/package.json +61 -3
  39. package/README.md +0 -3
@@ -0,0 +1,181 @@
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.XemaAuthz = void 0;
16
+ const common_1 = require("@nestjs/common");
17
+ const authzen_1 = require("@xemahq/contracts/authzen");
18
+ const anchor_predicate_1 = require("./anchor-predicate");
19
+ const authzen_transport_1 = require("./authzen.transport");
20
+ const subject_from_context_1 = require("./subject-from-context");
21
+ let XemaAuthz = class XemaAuthz {
22
+ transport;
23
+ constructor(transport) {
24
+ this.transport = transport;
25
+ }
26
+ async evaluate(ctx, action, resource, options = {}) {
27
+ const response = await this.transport.evaluation((0, subject_from_context_1.authzOrgOf)(ctx), {
28
+ subject: this.subject(ctx),
29
+ action: { name: action },
30
+ resource: this.resource(ctx, resource),
31
+ context: (0, subject_from_context_1.authzenContextOf)(ctx, options),
32
+ });
33
+ return toDecision(response);
34
+ }
35
+ async evaluateCapability(ctx, capabilityRef, environment) {
36
+ const orgId = (0, subject_from_context_1.authzOrgOf)(ctx);
37
+ const response = await this.transport.evaluation(orgId, {
38
+ subject: this.subject(ctx),
39
+ action: { name: authzen_1.XEMA_CAPABILITY_INVOKE_ACTION },
40
+ resource: {
41
+ type: authzen_1.XEMA_CAPABILITY_RESOURCE_TYPE,
42
+ id: (0, authzen_1.capabilityResourceId)(orgId, capabilityRef, environment),
43
+ },
44
+ context: (0, subject_from_context_1.authzenContextOf)(ctx),
45
+ });
46
+ return toDecision(response);
47
+ }
48
+ async assert(ctx, view, action, resource, options = {}) {
49
+ const actions = view === action ? [view] : [view, action];
50
+ const [decisions] = await this.allowed(ctx, actions, [resource], options);
51
+ if (decisions === undefined || decisions[0] !== true) {
52
+ throw new common_1.NotFoundException({
53
+ code: 'RESOURCE_NOT_FOUND',
54
+ message: `${resource.type} "${resource.id}" was not found.`,
55
+ });
56
+ }
57
+ if (decisions[decisions.length - 1] !== true) {
58
+ throw new common_1.ForbiddenException({
59
+ code: 'ACTION_NOT_PERMITTED',
60
+ message: `"${action}" is not permitted on ${resource.type} "${resource.id}".`,
61
+ });
62
+ }
63
+ }
64
+ async allowed(ctx, actions, resources, options = {}) {
65
+ if (actions.length === 0 || resources.length === 0) {
66
+ return resources.map(() => []);
67
+ }
68
+ const subject = this.subject(ctx);
69
+ const context = (0, subject_from_context_1.authzenContextOf)(ctx, options);
70
+ const evaluations = [];
71
+ for (const resource of resources) {
72
+ const qualified = this.resource(ctx, resource);
73
+ for (const action of actions) {
74
+ evaluations.push({ action: { name: action }, resource: qualified });
75
+ }
76
+ }
77
+ const response = await this.transport.evaluations((0, subject_from_context_1.authzOrgOf)(ctx), {
78
+ subject,
79
+ context,
80
+ evaluations,
81
+ options: { evaluations_semantic: authzen_1.AuthzenEvaluationsSemantic.ExecuteAll },
82
+ });
83
+ const decisions = response.evaluations;
84
+ if (decisions === undefined || decisions.length !== evaluations.length) {
85
+ throw new Error(`authorization-api answered ${decisions?.length ?? 0} of ${evaluations.length} evaluations under execute_all.`);
86
+ }
87
+ return resources.map((_, r) => actions.map((__, a) => decisions[r * actions.length + a]?.decision === true));
88
+ }
89
+ async searchResources(ctx, type, action, page = {}, options = {}) {
90
+ const response = await this.transport.searchResource((0, subject_from_context_1.authzOrgOf)(ctx), {
91
+ subject: this.subject(ctx),
92
+ action: { name: action },
93
+ resource: { type },
94
+ context: (0, subject_from_context_1.authzenContextOf)(ctx, options),
95
+ ...(page.token === undefined && page.limit === undefined
96
+ ? {}
97
+ : { page: { ...page } }),
98
+ });
99
+ const anchor = response.context?.['anchor'] === undefined
100
+ ? undefined
101
+ : anchor_predicate_1.XemaAnchorSearchContextSchema.parse(response.context['anchor']);
102
+ const parsedContext = authzen_1.XemaAuthzenDecisionContextSchema.safeParse(response.context ?? {});
103
+ return {
104
+ ids: response.results.map((r) => {
105
+ if (r.type !== type) {
106
+ throw new Error(`Resource Search for "${type}" returned a "${r.type}" result (AuthZEN §8.3).`);
107
+ }
108
+ return localIdOf(r.id);
109
+ }),
110
+ anchor,
111
+ nextToken: response.page?.next_token ?? authzen_1.AUTHZEN_LAST_PAGE_TOKEN,
112
+ snapshot: parsedContext.success ? parsedContext.data.snapshot : undefined,
113
+ };
114
+ }
115
+ async searchAllResourceIds(ctx, type, action, options = {}) {
116
+ const ids = [];
117
+ let token;
118
+ do {
119
+ const page = await this.searchResources(ctx, type, action, token === undefined ? {} : { token }, options);
120
+ if (page.anchor !== undefined) {
121
+ throw new Error(`Resource type "${type}" lists through an anchor; use searchResources and run the predicate.`);
122
+ }
123
+ ids.push(...page.ids);
124
+ token = page.nextToken === authzen_1.AUTHZEN_LAST_PAGE_TOKEN ? undefined : page.nextToken;
125
+ } while (token !== undefined);
126
+ return ids;
127
+ }
128
+ async searchSubjects(ctx, subjectType, action, resource) {
129
+ const subjects = [];
130
+ let token;
131
+ do {
132
+ const response = await this.transport.searchSubject((0, subject_from_context_1.authzOrgOf)(ctx), {
133
+ subject: { type: subjectType },
134
+ action: { name: action },
135
+ resource: this.resource(ctx, resource),
136
+ context: (0, subject_from_context_1.authzenContextOf)(ctx),
137
+ ...(token === undefined ? {} : { page: { token } }),
138
+ });
139
+ subjects.push(...response.results);
140
+ const next = response.page?.next_token ?? authzen_1.AUTHZEN_LAST_PAGE_TOKEN;
141
+ token = next === authzen_1.AUTHZEN_LAST_PAGE_TOKEN ? undefined : next;
142
+ } while (token !== undefined);
143
+ return subjects;
144
+ }
145
+ async searchActions(ctx, resource) {
146
+ const response = await this.transport.searchAction((0, subject_from_context_1.authzOrgOf)(ctx), {
147
+ subject: this.subject(ctx),
148
+ resource: this.resource(ctx, resource),
149
+ context: (0, subject_from_context_1.authzenContextOf)(ctx),
150
+ });
151
+ return response.results.map((action) => action.name);
152
+ }
153
+ subject(ctx) {
154
+ return (0, subject_from_context_1.authzenSubjectOf)(ctx);
155
+ }
156
+ resource(ctx, ref) {
157
+ return { type: ref.type, id: (0, authzen_1.qualifyResourceId)((0, subject_from_context_1.authzOrgOf)(ctx), ref.id) };
158
+ }
159
+ };
160
+ exports.XemaAuthz = XemaAuthz;
161
+ exports.XemaAuthz = XemaAuthz = __decorate([
162
+ (0, common_1.Injectable)(),
163
+ __param(0, (0, common_1.Inject)(authzen_transport_1.AUTHZEN_PDP_TRANSPORT)),
164
+ __metadata("design:paramtypes", [Object])
165
+ ], XemaAuthz);
166
+ function toDecision(response) {
167
+ const parsed = authzen_1.XemaAuthzenDecisionContextSchema.safeParse(response.context ?? {});
168
+ return {
169
+ allowed: response.decision === true,
170
+ reasonCode: parsed.success ? parsed.data.reason_code : undefined,
171
+ context: response.context,
172
+ };
173
+ }
174
+ function localIdOf(qualified) {
175
+ const index = qualified.indexOf('|');
176
+ if (index <= 0) {
177
+ throw new Error(`Resource Search returned an unqualified id "${qualified}".`);
178
+ }
179
+ return qualified.slice(index + 1);
180
+ }
181
+ //# sourceMappingURL=xema-authz.service.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"xema-authz.service.js","sourceRoot":"","sources":["../src/xema-authz.service.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,64 @@
1
1
  {
2
2
  "name": "@xemahq/authorization-nest",
3
- "version": "0.0.0-stage",
4
- "stub": true,
5
- "description": "Temporary package placeholder for staged publishing"
3
+ "version": "0.1.0",
4
+ "description": "AuthZEN 1.0 PEP for Xema services: one Nest module, an AuthZEN client against authorization-api, and the @Authorize route guard.",
5
+ "publishConfig": {
6
+ "registry": "https://registry.npmjs.org/",
7
+ "access": "public"
8
+ },
9
+ "main": "dist/index.js",
10
+ "types": "dist/index.d.ts",
11
+ "files": [
12
+ "dist"
13
+ ],
14
+ "peerDependencies": {
15
+ "@nestjs/common": ">=11.0.0",
16
+ "@nestjs/core": ">=11.0.0",
17
+ "@xemahq/contracts": ">=0.36.1",
18
+ "@xemahq/identity-client": ">=0.9.0",
19
+ "@xemahq/platform-common": ">=0.43.0",
20
+ "@xemahq/service-registry-nest": ">=0.8.0",
21
+ "zod": ">=4.0.0"
22
+ },
23
+ "devDependencies": {
24
+ "@nestjs/common": "11.1.18",
25
+ "@nestjs/core": "11.1.18",
26
+ "@nestjs/testing": "11.1.18",
27
+ "@xemahq/contracts": "^0.36.2",
28
+ "@xemahq/eslint-config": "^0.5.0",
29
+ "@xemahq/identity-client": "^0.12.0",
30
+ "@xemahq/platform-common": "^0.44.0",
31
+ "@xemahq/service-registry-nest": "^0.18.0",
32
+ "@types/jest": "^30.0.0",
33
+ "@types/node": "25.2.3",
34
+ "eslint": "^9.39.4",
35
+ "jest": "^30.3.0",
36
+ "reflect-metadata": "0.2.2",
37
+ "rxjs": "7.8.2",
38
+ "ts-jest": "^29.4.9",
39
+ "typescript": "5.9.3",
40
+ "zod": "^4.3.6"
41
+ },
42
+ "exports": {
43
+ ".": {
44
+ "types": "./dist/index.d.ts",
45
+ "xema-source": "./src/index.ts",
46
+ "default": "./dist/index.js"
47
+ }
48
+ },
49
+ "license": "LicenseRef-Xema-BSL-1.1",
50
+ "author": "Neuralchowder Inc. <developer@xema.dev> (https://xema.dev)",
51
+ "homepage": "https://xema.dev",
52
+ "repository": {
53
+ "type": "git",
54
+ "url": "git+https://github.com/xema-dev/xema-base.git",
55
+ "directory": "packages/sdks/authorization-nest"
56
+ },
57
+ "scripts": {
58
+ "clean": "rm -rf dist",
59
+ "build": "tsc -p tsconfig.build.json",
60
+ "lint": "eslint .",
61
+ "typecheck": "tsc -p tsconfig.json --noEmit",
62
+ "test": "jest --config jest.config.ts"
63
+ }
6
64
  }
package/README.md DELETED
@@ -1,3 +0,0 @@
1
- # Temporary Holding Version
2
-
3
- This version is a temporary placeholder for this package. An operational version to replace this has been submitted for review and is awaiting a staged release.