@generazioneai/authz 0.0.1
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/codegen/authz-check.d.ts +3 -0
- package/dist/codegen/authz-check.d.ts.map +1 -0
- package/dist/codegen/authz-check.js +76 -0
- package/dist/codegen/authz-check.js.map +1 -0
- package/dist/codegen/check-rules.d.ts +73 -0
- package/dist/codegen/check-rules.d.ts.map +1 -0
- package/dist/codegen/check-rules.js +387 -0
- package/dist/codegen/check-rules.js.map +1 -0
- package/dist/codegen/effective-actions.d.ts +13 -0
- package/dist/codegen/effective-actions.d.ts.map +1 -0
- package/dist/codegen/effective-actions.js +44 -0
- package/dist/codegen/effective-actions.js.map +1 -0
- package/dist/codegen/generate-types.d.ts +8 -0
- package/dist/codegen/generate-types.d.ts.map +1 -0
- package/dist/codegen/generate-types.js +121 -0
- package/dist/codegen/generate-types.js.map +1 -0
- package/dist/codegen/index.d.ts +3 -0
- package/dist/codegen/index.d.ts.map +1 -0
- package/dist/codegen/index.js +74 -0
- package/dist/codegen/index.js.map +1 -0
- package/dist/codegen/manifest-io.d.ts +19 -0
- package/dist/codegen/manifest-io.d.ts.map +1 -0
- package/dist/codegen/manifest-io.js +59 -0
- package/dist/codegen/manifest-io.js.map +1 -0
- package/dist/context/als.d.ts +14 -0
- package/dist/context/als.d.ts.map +1 -0
- package/dist/context/als.js +30 -0
- package/dist/context/als.js.map +1 -0
- package/dist/context/authz-context.d.ts +54 -0
- package/dist/context/authz-context.d.ts.map +1 -0
- package/dist/context/authz-context.js +24 -0
- package/dist/context/authz-context.js.map +1 -0
- package/dist/define-resource.d.ts +150 -0
- package/dist/define-resource.d.ts.map +1 -0
- package/dist/define-resource.js +26 -0
- package/dist/define-resource.js.map +1 -0
- package/dist/index.d.ts +7 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +23 -0
- package/dist/index.js.map +1 -0
- package/dist/nats/canonical-hash.d.ts +5 -0
- package/dist/nats/canonical-hash.d.ts.map +1 -0
- package/dist/nats/canonical-hash.js +24 -0
- package/dist/nats/canonical-hash.js.map +1 -0
- package/dist/nats/index.d.ts +7 -0
- package/dist/nats/index.d.ts.map +1 -0
- package/dist/nats/index.js +27 -0
- package/dist/nats/index.js.map +1 -0
- package/dist/nats/internal-token.d.ts +56 -0
- package/dist/nats/internal-token.d.ts.map +1 -0
- package/dist/nats/internal-token.js +93 -0
- package/dist/nats/internal-token.js.map +1 -0
- package/dist/nats/internal-token.signer.d.ts +21 -0
- package/dist/nats/internal-token.signer.d.ts.map +1 -0
- package/dist/nats/internal-token.signer.js +48 -0
- package/dist/nats/internal-token.signer.js.map +1 -0
- package/dist/nats/jwks-client.d.ts +10 -0
- package/dist/nats/jwks-client.d.ts.map +1 -0
- package/dist/nats/jwks-client.js +14 -0
- package/dist/nats/jwks-client.js.map +1 -0
- package/dist/nats/key-loader.d.ts +24 -0
- package/dist/nats/key-loader.d.ts.map +1 -0
- package/dist/nats/key-loader.js +65 -0
- package/dist/nats/key-loader.js.map +1 -0
- package/dist/nats/replay-cache.d.ts +14 -0
- package/dist/nats/replay-cache.d.ts.map +1 -0
- package/dist/nats/replay-cache.js +23 -0
- package/dist/nats/replay-cache.js.map +1 -0
- package/dist/nest/authz-context.interceptor.d.ts +6 -0
- package/dist/nest/authz-context.interceptor.d.ts.map +1 -0
- package/dist/nest/authz-context.interceptor.js +47 -0
- package/dist/nest/authz-context.interceptor.js.map +1 -0
- package/dist/nest/authz-context.middleware.d.ts +15 -0
- package/dist/nest/authz-context.middleware.d.ts.map +1 -0
- package/dist/nest/authz-context.middleware.js +40 -0
- package/dist/nest/authz-context.middleware.js.map +1 -0
- package/dist/nest/index.d.ts +6 -0
- package/dist/nest/index.d.ts.map +1 -0
- package/dist/nest/index.js +25 -0
- package/dist/nest/index.js.map +1 -0
- package/dist/nest/internal-auth.interceptor.d.ts +29 -0
- package/dist/nest/internal-auth.interceptor.d.ts.map +1 -0
- package/dist/nest/internal-auth.interceptor.js +140 -0
- package/dist/nest/internal-auth.interceptor.js.map +1 -0
- package/dist/nest/nats-scoped-client.proxy.d.ts +23 -0
- package/dist/nest/nats-scoped-client.proxy.d.ts.map +1 -0
- package/dist/nest/nats-scoped-client.proxy.js +50 -0
- package/dist/nest/nats-scoped-client.proxy.js.map +1 -0
- package/dist/nest/skip-internal-auth.decorator.d.ts +4 -0
- package/dist/nest/skip-internal-auth.decorator.d.ts.map +1 -0
- package/dist/nest/skip-internal-auth.decorator.js +13 -0
- package/dist/nest/skip-internal-auth.decorator.js.map +1 -0
- package/dist/resource-registry.d.ts +31 -0
- package/dist/resource-registry.d.ts.map +1 -0
- package/dist/resource-registry.js +64 -0
- package/dist/resource-registry.js.map +1 -0
- package/dist/resource-registry.module.d.ts +25 -0
- package/dist/resource-registry.module.d.ts.map +1 -0
- package/dist/resource-registry.module.js +67 -0
- package/dist/resource-registry.module.js.map +1 -0
- package/dist/scope-substitute.d.ts +20 -0
- package/dist/scope-substitute.d.ts.map +1 -0
- package/dist/scope-substitute.js +58 -0
- package/dist/scope-substitute.js.map +1 -0
- package/package.json +94 -0
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
// Step 1 DEC-17/18: NestJS DI module for explicit manifest registration.
|
|
3
|
+
//
|
|
4
|
+
// Wiring (in each owning service):
|
|
5
|
+
// @Module({
|
|
6
|
+
// imports: [
|
|
7
|
+
// ResourceRegistryModule.forRoot(), // once, app root
|
|
8
|
+
// ResourceRegistryModule.forFeature([JuridicalIndividualResource]), // per feature module
|
|
9
|
+
// ],
|
|
10
|
+
// })
|
|
11
|
+
//
|
|
12
|
+
// DEC-17: registration is EXPLICIT (no glob magic) — a manifest not passed to
|
|
13
|
+
// forFeature is never registered, and TypeScript flags a missing import.
|
|
14
|
+
// DEC-3: the registry throws on a duplicate subject/prismaModel.
|
|
15
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
16
|
+
exports.ResourceRegistryModule = exports.RESOURCE_REGISTRY = void 0;
|
|
17
|
+
const resource_registry_1 = require("./resource-registry");
|
|
18
|
+
/** DI token for the per-process ResourceRegistry (alias of the class token). */
|
|
19
|
+
exports.RESOURCE_REGISTRY = Symbol('skillera:resource-registry');
|
|
20
|
+
class ResourceRegistryModule {
|
|
21
|
+
/**
|
|
22
|
+
* Provides the singleton `ResourceRegistry` for the process. Global, so
|
|
23
|
+
* `forFeature(...)` in any feature module can inject it. Call once at app root.
|
|
24
|
+
*/
|
|
25
|
+
static forRoot(options = {}) {
|
|
26
|
+
const registry = options.registry ?? new resource_registry_1.ResourceRegistry();
|
|
27
|
+
for (const m of options.manifests ?? [])
|
|
28
|
+
registry.register(m);
|
|
29
|
+
const providers = [
|
|
30
|
+
{ provide: resource_registry_1.ResourceRegistry, useValue: registry },
|
|
31
|
+
{ provide: exports.RESOURCE_REGISTRY, useValue: registry },
|
|
32
|
+
];
|
|
33
|
+
return {
|
|
34
|
+
module: ResourceRegistryModule,
|
|
35
|
+
global: true,
|
|
36
|
+
providers,
|
|
37
|
+
exports: [resource_registry_1.ResourceRegistry, exports.RESOURCE_REGISTRY],
|
|
38
|
+
};
|
|
39
|
+
}
|
|
40
|
+
/**
|
|
41
|
+
* Registers a feature module's manifests into the root registry. The factory
|
|
42
|
+
* runs at bootstrap (eager, non-request-scoped) and registers each manifest;
|
|
43
|
+
* a duplicate subject/prismaModel surfaces as a startup error (DEC-3).
|
|
44
|
+
*/
|
|
45
|
+
static forFeature(manifests) {
|
|
46
|
+
const token = `skillera:resource-feature:${manifests
|
|
47
|
+
.map((m) => m.subject)
|
|
48
|
+
.sort()
|
|
49
|
+
.join(',')}`;
|
|
50
|
+
const provider = {
|
|
51
|
+
provide: token,
|
|
52
|
+
useFactory: (registry) => {
|
|
53
|
+
for (const m of manifests)
|
|
54
|
+
registry.register(m);
|
|
55
|
+
return manifests;
|
|
56
|
+
},
|
|
57
|
+
inject: [resource_registry_1.ResourceRegistry],
|
|
58
|
+
};
|
|
59
|
+
return {
|
|
60
|
+
module: ResourceRegistryModule,
|
|
61
|
+
providers: [provider],
|
|
62
|
+
exports: [provider],
|
|
63
|
+
};
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
exports.ResourceRegistryModule = ResourceRegistryModule;
|
|
67
|
+
//# sourceMappingURL=resource-registry.module.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"resource-registry.module.js","sourceRoot":"","sources":["../src/resource-registry.module.ts"],"names":[],"mappings":";AAAA,yEAAyE;AACzE,EAAE;AACF,mCAAmC;AACnC,cAAc;AACd,iBAAiB;AACjB,qFAAqF;AACrF,iGAAiG;AACjG,SAAS;AACT,OAAO;AACP,EAAE;AACF,8EAA8E;AAC9E,yEAAyE;AACzE,iEAAiE;;;AAQjE,2DAAuD;AAEvD,gFAAgF;AACnE,QAAA,iBAAiB,GAAG,MAAM,CAAC,4BAA4B,CAAC,CAAC;AAStE,MAAa,sBAAsB;IACjC;;;OAGG;IACH,MAAM,CAAC,OAAO,CAAC,UAAuC,EAAE;QACtD,MAAM,QAAQ,GAAG,OAAO,CAAC,QAAQ,IAAI,IAAI,oCAAgB,EAAE,CAAC;QAC5D,KAAK,MAAM,CAAC,IAAI,OAAO,CAAC,SAAS,IAAI,EAAE;YAAE,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;QAE9D,MAAM,SAAS,GAAe;YAC5B,EAAE,OAAO,EAAE,oCAAgB,EAAE,QAAQ,EAAE,QAAQ,EAAE;YACjD,EAAE,OAAO,EAAE,yBAAiB,EAAE,QAAQ,EAAE,QAAQ,EAAE;SACnD,CAAC;QACF,OAAO;YACL,MAAM,EAAE,sBAAsB;YAC9B,MAAM,EAAE,IAAI;YACZ,SAAS;YACT,OAAO,EAAE,CAAC,oCAAgB,EAAE,yBAAiB,CAAC;SAC/C,CAAC;IACJ,CAAC;IAED;;;;OAIG;IACH,MAAM,CAAC,UAAU,CAAC,SAA6B;QAC7C,MAAM,KAAK,GAAG,6BAA6B,SAAS;aACjD,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC;aACrB,IAAI,EAAE;aACN,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC;QACf,MAAM,QAAQ,GAAa;YACzB,OAAO,EAAE,KAAK;YACd,UAAU,EAAE,CAAC,QAA0B,EAAE,EAAE;gBACzC,KAAK,MAAM,CAAC,IAAI,SAAS;oBAAE,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;gBAChD,OAAO,SAAS,CAAC;YACnB,CAAC;YACD,MAAM,EAAE,CAAC,oCAAgB,CAAC;SAC3B,CAAC;QACF,OAAO;YACL,MAAM,EAAE,sBAAsB;YAC9B,SAAS,EAAE,CAAC,QAAQ,CAAC;YACrB,OAAO,EAAE,CAAC,QAAQ,CAAC;SACpB,CAAC;IACJ,CAAC;CACF;AA7CD,wDA6CC"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import type { AuthzContext } from './context/authz-context';
|
|
2
|
+
/**
|
|
3
|
+
* Sostituisce ricorsivamente `{ $ctx: 'path' }` con `getPath(ctx, path)`.
|
|
4
|
+
* Preserva tipi primitivi e shape oggetto/array.
|
|
5
|
+
*
|
|
6
|
+
* Esempio:
|
|
7
|
+
* substituteContext(
|
|
8
|
+
* { juridicalId: { $ctx: 'tenantId' } },
|
|
9
|
+
* { tenantId: 'abc', ... }
|
|
10
|
+
* )
|
|
11
|
+
* → { juridicalId: 'abc' }
|
|
12
|
+
*
|
|
13
|
+
* substituteContext(
|
|
14
|
+
* { enrolledLearnerIds: { hasSome: { $ctx: 'connected.studentsOfTeacher' } } },
|
|
15
|
+
* ctx
|
|
16
|
+
* )
|
|
17
|
+
* → { enrolledLearnerIds: { hasSome: ['student1', 'student2'] } }
|
|
18
|
+
*/
|
|
19
|
+
export declare function substituteContext<T = any>(template: any, ctx: AuthzContext): T;
|
|
20
|
+
//# sourceMappingURL=scope-substitute.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"scope-substitute.d.ts","sourceRoot":"","sources":["../src/scope-substitute.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAC;AAc5D;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAgB,iBAAiB,CAAC,CAAC,GAAG,GAAG,EACvC,QAAQ,EAAE,GAAG,EACb,GAAG,EAAE,YAAY,GAChB,CAAC,CAkBH"}
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
// Step 1 + Step 4 DEC-S4.1: substituteContext()
|
|
3
|
+
// Sostituisce ricorsivamente i placeholder `{ $ctx: 'path.to.value' }`
|
|
4
|
+
// con i valori effettivi presi da `AuthzContext`.
|
|
5
|
+
//
|
|
6
|
+
// Usato da skillID snapshot builder per trasformare i template manifest in
|
|
7
|
+
// rules CASL pronte (post-substitution) che viaggiano nello snapshot envelope.
|
|
8
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
9
|
+
exports.substituteContext = substituteContext;
|
|
10
|
+
/** Risolve una path "a.b.c" in un oggetto profondo. Ritorna undefined su miss. */
|
|
11
|
+
function getPath(obj, path) {
|
|
12
|
+
if (!path)
|
|
13
|
+
return obj;
|
|
14
|
+
const parts = path.split('.');
|
|
15
|
+
let current = obj;
|
|
16
|
+
for (const part of parts) {
|
|
17
|
+
if (current == null)
|
|
18
|
+
return undefined;
|
|
19
|
+
current = current[part];
|
|
20
|
+
}
|
|
21
|
+
return current;
|
|
22
|
+
}
|
|
23
|
+
/**
|
|
24
|
+
* Sostituisce ricorsivamente `{ $ctx: 'path' }` con `getPath(ctx, path)`.
|
|
25
|
+
* Preserva tipi primitivi e shape oggetto/array.
|
|
26
|
+
*
|
|
27
|
+
* Esempio:
|
|
28
|
+
* substituteContext(
|
|
29
|
+
* { juridicalId: { $ctx: 'tenantId' } },
|
|
30
|
+
* { tenantId: 'abc', ... }
|
|
31
|
+
* )
|
|
32
|
+
* → { juridicalId: 'abc' }
|
|
33
|
+
*
|
|
34
|
+
* substituteContext(
|
|
35
|
+
* { enrolledLearnerIds: { hasSome: { $ctx: 'connected.studentsOfTeacher' } } },
|
|
36
|
+
* ctx
|
|
37
|
+
* )
|
|
38
|
+
* → { enrolledLearnerIds: { hasSome: ['student1', 'student2'] } }
|
|
39
|
+
*/
|
|
40
|
+
function substituteContext(template, ctx) {
|
|
41
|
+
if (template === null || template === undefined)
|
|
42
|
+
return template;
|
|
43
|
+
if (typeof template !== 'object')
|
|
44
|
+
return template;
|
|
45
|
+
// Placeholder $ctx
|
|
46
|
+
if ('$ctx' in template && typeof template.$ctx === 'string') {
|
|
47
|
+
return getPath(ctx, template.$ctx);
|
|
48
|
+
}
|
|
49
|
+
if (Array.isArray(template)) {
|
|
50
|
+
return template.map((item) => substituteContext(item, ctx));
|
|
51
|
+
}
|
|
52
|
+
const out = {};
|
|
53
|
+
for (const [key, value] of Object.entries(template)) {
|
|
54
|
+
out[key] = substituteContext(value, ctx);
|
|
55
|
+
}
|
|
56
|
+
return out;
|
|
57
|
+
}
|
|
58
|
+
//# sourceMappingURL=scope-substitute.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"scope-substitute.js","sourceRoot":"","sources":["../src/scope-substitute.ts"],"names":[],"mappings":";AAAA,gDAAgD;AAChD,uEAAuE;AACvE,kDAAkD;AAClD,EAAE;AACF,2EAA2E;AAC3E,+EAA+E;;AAiC/E,8CAqBC;AAlDD,kFAAkF;AAClF,SAAS,OAAO,CAAC,GAAQ,EAAE,IAAY;IACrC,IAAI,CAAC,IAAI;QAAE,OAAO,GAAG,CAAC;IACtB,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IAC9B,IAAI,OAAO,GAAG,GAAG,CAAC;IAClB,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,IAAI,OAAO,IAAI,IAAI;YAAE,OAAO,SAAS,CAAC;QACtC,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAC1B,CAAC;IACD,OAAO,OAAO,CAAC;AACjB,CAAC;AAED;;;;;;;;;;;;;;;;GAgBG;AACH,SAAgB,iBAAiB,CAC/B,QAAa,EACb,GAAiB;IAEjB,IAAI,QAAQ,KAAK,IAAI,IAAI,QAAQ,KAAK,SAAS;QAAE,OAAO,QAAQ,CAAC;IACjE,IAAI,OAAO,QAAQ,KAAK,QAAQ;QAAE,OAAO,QAAQ,CAAC;IAElD,mBAAmB;IACnB,IAAI,MAAM,IAAI,QAAQ,IAAI,OAAQ,QAAgB,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;QACrE,OAAO,OAAO,CAAC,GAAG,EAAG,QAAgB,CAAC,IAAI,CAAM,CAAC;IACnD,CAAC;IAED,IAAI,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAC;QAC5B,OAAO,QAAQ,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,iBAAiB,CAAC,IAAI,EAAE,GAAG,CAAC,CAAiB,CAAC;IAC9E,CAAC;IAED,MAAM,GAAG,GAAwB,EAAE,CAAC;IACpC,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAC;QACpD,GAAG,CAAC,GAAG,CAAC,GAAG,iBAAiB,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;IAC3C,CAAC;IACD,OAAO,GAAQ,CAAC;AAClB,CAAC"}
|
package/package.json
ADDED
|
@@ -0,0 +1,94 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@generazioneai/authz",
|
|
3
|
+
"version": "0.0.1",
|
|
4
|
+
"description": "Runtime authz + autoquery for Skillera microservices",
|
|
5
|
+
"main": "dist/index.js",
|
|
6
|
+
"types": "dist/index.d.ts",
|
|
7
|
+
"bin": {
|
|
8
|
+
"authz-check": "dist/codegen/authz-check.js",
|
|
9
|
+
"authz-codegen": "dist/codegen/index.js"
|
|
10
|
+
},
|
|
11
|
+
"files": [
|
|
12
|
+
"dist",
|
|
13
|
+
"README.md"
|
|
14
|
+
],
|
|
15
|
+
"publishConfig": {
|
|
16
|
+
"access": "public"
|
|
17
|
+
},
|
|
18
|
+
"repository": {
|
|
19
|
+
"type": "git",
|
|
20
|
+
"url": "git@github.com:GenerazioneAI-SRL/SKILLERA-AUTHZ-PACKAGES.git",
|
|
21
|
+
"directory": "packages/authz"
|
|
22
|
+
},
|
|
23
|
+
"scripts": {
|
|
24
|
+
"build": "tsc -p tsconfig.json",
|
|
25
|
+
"clean": "rm -rf dist",
|
|
26
|
+
"test": "jest",
|
|
27
|
+
"test:cov": "jest --coverage",
|
|
28
|
+
"lint": "echo 'TODO: lint' && exit 0",
|
|
29
|
+
"authz:genkey": "ts-node scripts/generate-key.ts"
|
|
30
|
+
},
|
|
31
|
+
"exports": {
|
|
32
|
+
".": {
|
|
33
|
+
"types": "./dist/index.d.ts",
|
|
34
|
+
"default": "./dist/index.js"
|
|
35
|
+
},
|
|
36
|
+
"./internal": {
|
|
37
|
+
"types": "./dist/internal/index.d.ts",
|
|
38
|
+
"default": "./dist/internal/index.js"
|
|
39
|
+
},
|
|
40
|
+
"./nats": {
|
|
41
|
+
"types": "./dist/nats/index.d.ts",
|
|
42
|
+
"default": "./dist/nats/index.js"
|
|
43
|
+
},
|
|
44
|
+
"./nest": {
|
|
45
|
+
"types": "./dist/nest/index.d.ts",
|
|
46
|
+
"default": "./dist/nest/index.js"
|
|
47
|
+
}
|
|
48
|
+
},
|
|
49
|
+
"typesVersions": {
|
|
50
|
+
"*": {
|
|
51
|
+
"nats": [
|
|
52
|
+
"dist/nats/index.d.ts"
|
|
53
|
+
],
|
|
54
|
+
"nest": [
|
|
55
|
+
"dist/nest/index.d.ts"
|
|
56
|
+
],
|
|
57
|
+
"internal": [
|
|
58
|
+
"dist/internal/index.d.ts"
|
|
59
|
+
]
|
|
60
|
+
}
|
|
61
|
+
},
|
|
62
|
+
"peerDependencies": {
|
|
63
|
+
"@casl/ability": "^6.7.0",
|
|
64
|
+
"@casl/prisma": "^1.5.0 || ^2.0.0",
|
|
65
|
+
"@nestjs/common": "^11.0.0",
|
|
66
|
+
"@nestjs/core": "^11.0.0",
|
|
67
|
+
"@nestjs/microservices": "^11.0.0",
|
|
68
|
+
"@prisma/client": "^6.0.0 || ^7.0.0"
|
|
69
|
+
},
|
|
70
|
+
"peerDependenciesMeta": {
|
|
71
|
+
"@prisma/client": {
|
|
72
|
+
"optional": true
|
|
73
|
+
}
|
|
74
|
+
},
|
|
75
|
+
"dependencies": {
|
|
76
|
+
"@noble/hashes": "^1.4.0",
|
|
77
|
+
"ioredis": "^5.4.0",
|
|
78
|
+
"jose": "^6.0.10",
|
|
79
|
+
"json-stable-stringify": "^1.1.1",
|
|
80
|
+
"lru-cache": "^10.4.0",
|
|
81
|
+
"lz4-napi": "^2.7.0"
|
|
82
|
+
},
|
|
83
|
+
"devDependencies": {
|
|
84
|
+
"@casl/ability": "^6.7.3",
|
|
85
|
+
"@casl/prisma": "^1.5.0",
|
|
86
|
+
"@nestjs/core": "^11.1.24",
|
|
87
|
+
"@nestjs/microservices": "^11.1.24",
|
|
88
|
+
"@types/json-stable-stringify": "^1.0.36",
|
|
89
|
+
"@types/node": "^22.0.0",
|
|
90
|
+
"rxjs": "^7.8.2",
|
|
91
|
+
"ts-node": "^10.9.2",
|
|
92
|
+
"typescript": "^5.1.3"
|
|
93
|
+
}
|
|
94
|
+
}
|