@xemahq/xema-service-nest 0.2.2 → 0.2.4
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.
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"xema-service-module.d.ts","sourceRoot":"","sources":["../../src/lib/xema-service-module.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,cAAc,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;
|
|
1
|
+
{"version":3,"file":"xema-service-module.d.ts","sourceRoot":"","sources":["../../src/lib/xema-service-module.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,cAAc,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AAoBrF,OAAO,EACL,aAAa,EACb,UAAU,EAEV,KAAK,4BAA4B,EAClC,MAAM,yBAAyB,CAAC;AAEjC,OAAO,EAEL,KAAK,sBAAsB,EAC5B,MAAM,4BAA4B,CAAC;AAQpC,MAAM,WAAW,wBAAwB;IAMvC,QAAQ,CAAC,MAAM,CAAC,EAAE,UAAU,CAAC;IAE7B,QAAQ,CAAC,SAAS,CAAC,EAAE,aAAa,CAAC;IAKnC,QAAQ,CAAC,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAMpC,QAAQ,CAAC,oBAAoB,CAAC,EAAE,OAAO,CAAC;IAExC,QAAQ,CAAC,2BAA2B,CAAC,EAAE,CACrC,GAAG,IAAI,EAAE,KAAK,EAAE,KACb,4BAA4B,GAAG,OAAO,CAAC,4BAA4B,CAAC,CAAC;IAE1E,QAAQ,CAAC,MAAM,CAAC,EAAE,eAAe,CAAC,QAAQ,CAAC,CAAC;IAE5C,QAAQ,CAAC,OAAO,CAAC,EAAE,cAAc,CAAC,SAAS,CAAC,CAAC;CAC9C;AAsCD,qBAAa,iBAAiB;WACd,QAAQ,CACpB,UAAU,EAAE,sBAAsB,EAClC,OAAO,GAAE,wBAA6B,GACrC,aAAa;CAejB"}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.XemaServiceModule = void 0;
|
|
4
|
+
const core_1 = require("@nestjs/core");
|
|
4
5
|
const config_1 = require("@nestjs/config");
|
|
5
6
|
const identity_client_1 = require("@xemahq/identity-client");
|
|
6
7
|
const service_registry_1 = require("@xemahq/kernel-contracts/service-registry");
|
|
@@ -29,12 +30,25 @@ function buildServiceRegistryModule(descriptor, consumes) {
|
|
|
29
30
|
return service_registry_nest_1.ServiceRegistryModule.forRootAsync({
|
|
30
31
|
imports: [config_1.ConfigModule],
|
|
31
32
|
consumes,
|
|
32
|
-
useFactory: (config) => ({
|
|
33
|
+
useFactory: (config, moduleRef) => ({
|
|
33
34
|
adapter: service_registry_nest_1.ServiceRegistryAdapterKind.KernelState,
|
|
34
35
|
kernelStateFactory: () => (0, kernel_state_runtime_1.createKernelState)({
|
|
35
36
|
profile: (0, service_registry_nest_1.parseKernelStateProfile)(config.get('XEMA_KERNEL_STATE_PROFILE')),
|
|
36
37
|
}),
|
|
37
38
|
consumes,
|
|
39
|
+
tokenProvider: {
|
|
40
|
+
getToken: async (_targetService) => {
|
|
41
|
+
const bootstrap = moduleRef.get(identity_client_1.IdentityBootstrapService, {
|
|
42
|
+
strict: false,
|
|
43
|
+
});
|
|
44
|
+
const token = await bootstrap.getAccessToken();
|
|
45
|
+
if (typeof token !== 'string' || token.length === 0) {
|
|
46
|
+
throw new Error('[xema-service-nest] IdentityBootstrapService.getAccessToken() ' +
|
|
47
|
+
'returned no service token; cannot authenticate the typed-client call.');
|
|
48
|
+
}
|
|
49
|
+
return token;
|
|
50
|
+
},
|
|
51
|
+
},
|
|
38
52
|
descriptor: {
|
|
39
53
|
name: descriptor.name,
|
|
40
54
|
semver: descriptor.semver,
|
|
@@ -50,7 +64,7 @@ function buildServiceRegistryModule(descriptor, consumes) {
|
|
|
50
64
|
requiresServices: consumes,
|
|
51
65
|
},
|
|
52
66
|
}),
|
|
53
|
-
inject: [config_1.ConfigService],
|
|
67
|
+
inject: [config_1.ConfigService, core_1.ModuleRef],
|
|
54
68
|
});
|
|
55
69
|
}
|
|
56
70
|
function buildIdentityBootstrapModule(descriptor) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"xema-service-module.js","sourceRoot":"","sources":["../../src/lib/xema-service-module.ts"],"names":[],"mappings":";;;AACA,2CAA6D;AAC7D,6DAGiC;AACjC,gFAGmD;AACnD,uEAAiE;AACjE,6DAAqD;AACrD,yEAMuC;AACvC,6DAKiC;AAEjC,yEAGoC;AA0EpC,MAAa,iBAAiB;IACrB,MAAM,CAAC,QAAQ,CACpB,UAAkC,EAClC,UAAoC,EAAE;QAEtC,IAAA,yDAA8B,EAAC,UAAU,CAAC,CAAC;QAE3C,MAAM,QAAQ,GAAG,CAAC,GAAG,UAAU,CAAC,gBAAgB,CAAC,CAAC;QAElD,OAAO;YACL,MAAM,EAAE,iBAAiB;YACzB,OAAO,EAAE;gBACP,0BAA0B,CAAC,UAAU,EAAE,QAAQ,CAAC;gBAChD,4BAA4B,CAAC,UAAU,CAAC;gBACxC,eAAe,EAAE;gBACjB,kBAAkB,CAAC,UAAU,EAAE,OAAO,CAAC;aACxC;SACF,CAAC;IACJ,CAAC;CACF;AAnBD,8CAmBC;AAED,SAAS,0BAA0B,CACjC,UAAkC,EAClC,QAAkB;IAElB,OAAO,6CAAqB,CAAC,YAAY,CAAC;QACxC,OAAO,EAAE,CAAC,qBAAY,CAAC;QAEvB,QAAQ;QACR,UAAU,EAAE,CAAC,MAAqB,EAAE,EAAE,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"xema-service-module.js","sourceRoot":"","sources":["../../src/lib/xema-service-module.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@xemahq/xema-service-nest",
|
|
3
|
-
"version": "0.2.
|
|
3
|
+
"version": "0.2.4",
|
|
4
4
|
"description": "Xema platform service-bootstrap SDK. `XemaServiceModule.forBiome(descriptor)` composes the full platform service stack — Service Registry, Identity bootstrap, Auth (JWT verification + request context), and the Xema runtime route/capability scanner — behind a single call, so a biome API is auth-correct in ~5 lines and never re-wires authentication.",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"xema",
|
|
@@ -60,14 +60,14 @@
|
|
|
60
60
|
"rxjs": "7.8.2",
|
|
61
61
|
"ts-jest": "^29.4.9",
|
|
62
62
|
"typescript": "5.9.3",
|
|
63
|
-
"@xemahq/kernel-contracts": "^0.
|
|
63
|
+
"@xemahq/kernel-contracts": "^0.14.0"
|
|
64
64
|
},
|
|
65
65
|
"dependencies": {
|
|
66
|
-
"@xemahq/identity-client": "^0.3.
|
|
66
|
+
"@xemahq/identity-client": "^0.3.4",
|
|
67
67
|
"@xemahq/kernel-state-runtime": "^0.1.5",
|
|
68
68
|
"@xemahq/platform-common": "^0.2.4",
|
|
69
|
-
"@xemahq/service-registry-nest": "0.1.9",
|
|
70
|
-
"@xemahq/xema-decorators": "0.
|
|
69
|
+
"@xemahq/service-registry-nest": "^0.1.9",
|
|
70
|
+
"@xemahq/xema-decorators": "^0.2.0"
|
|
71
71
|
},
|
|
72
72
|
"exports": {
|
|
73
73
|
".": {
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import type { DynamicModule, ModuleMetadata, FactoryProvider } from '@nestjs/common';
|
|
2
|
+
import { ModuleRef } from '@nestjs/core';
|
|
2
3
|
import { ConfigModule, ConfigService } from '@nestjs/config';
|
|
3
4
|
import {
|
|
4
5
|
IdentityBootstrapModule,
|
|
@@ -130,7 +131,7 @@ function buildServiceRegistryModule(
|
|
|
130
131
|
imports: [ConfigModule],
|
|
131
132
|
// Authoritative for typed-client provider creation (must be sync).
|
|
132
133
|
consumes,
|
|
133
|
-
useFactory: (config: ConfigService) => ({
|
|
134
|
+
useFactory: (config: ConfigService, moduleRef: ModuleRef) => ({
|
|
134
135
|
adapter: ServiceRegistryAdapterKind.KernelState,
|
|
135
136
|
kernelStateFactory: () =>
|
|
136
137
|
createKernelState({
|
|
@@ -139,6 +140,31 @@ function buildServiceRegistryModule(
|
|
|
139
140
|
),
|
|
140
141
|
}),
|
|
141
142
|
consumes,
|
|
143
|
+
// Typed clients (`@InjectService`) authenticate service-to-service with the
|
|
144
|
+
// SAME Keycloak service-account JWT the orval clients use — minted by the
|
|
145
|
+
// IdentityBootstrapService this module ALSO wires (see
|
|
146
|
+
// buildIdentityBootstrapModule). Without this they would fall back to the
|
|
147
|
+
// SDK's EnvServiceTokenProvider (env XEMA_SERVICE_TOKEN), which is unset in
|
|
148
|
+
// production → every typed-client call fails to mint a bearer.
|
|
149
|
+
//
|
|
150
|
+
// Resolved LAZILY via ModuleRef so there is no module-init ordering/cycle:
|
|
151
|
+
// getToken runs at request time (an outbound typed-client call), long after
|
|
152
|
+
// bootstrap. getAccessToken() itself waits-for-ready + refreshes the JWT.
|
|
153
|
+
tokenProvider: {
|
|
154
|
+
getToken: async (_targetService: string): Promise<string> => {
|
|
155
|
+
const bootstrap = moduleRef.get(IdentityBootstrapService, {
|
|
156
|
+
strict: false,
|
|
157
|
+
});
|
|
158
|
+
const token = await bootstrap.getAccessToken();
|
|
159
|
+
if (typeof token !== 'string' || token.length === 0) {
|
|
160
|
+
throw new Error(
|
|
161
|
+
'[xema-service-nest] IdentityBootstrapService.getAccessToken() ' +
|
|
162
|
+
'returned no service token; cannot authenticate the typed-client call.',
|
|
163
|
+
);
|
|
164
|
+
}
|
|
165
|
+
return token;
|
|
166
|
+
},
|
|
167
|
+
},
|
|
142
168
|
descriptor: {
|
|
143
169
|
name: descriptor.name,
|
|
144
170
|
semver: descriptor.semver,
|
|
@@ -154,7 +180,7 @@ function buildServiceRegistryModule(
|
|
|
154
180
|
requiresServices: consumes,
|
|
155
181
|
},
|
|
156
182
|
}),
|
|
157
|
-
inject: [ConfigService],
|
|
183
|
+
inject: [ConfigService, ModuleRef],
|
|
158
184
|
});
|
|
159
185
|
}
|
|
160
186
|
|