libmodulor 0.28.0 → 0.29.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/CHANGELOG.md +17 -0
- package/README.md +2 -2
- package/dist/esm/apps/Helper/src/lib/layers/project.js +3 -3
- package/dist/esm/dt/base/TBase.d.ts +2 -0
- package/dist/esm/dt/base/TBase.js +5 -0
- package/dist/esm/dt/base/TBoolean.d.ts +2 -0
- package/dist/esm/dt/base/TBoolean.js +3 -0
- package/dist/esm/dt/base/TInt.d.ts +2 -0
- package/dist/esm/dt/base/TInt.js +3 -0
- package/dist/esm/dt/base/TNumber.d.ts +2 -0
- package/dist/esm/dt/base/TNumber.js +3 -0
- package/dist/esm/dt/base/TObject.d.ts +2 -0
- package/dist/esm/dt/base/TObject.js +29 -0
- package/dist/esm/dt/final/TApiKey.d.ts +2 -0
- package/dist/esm/dt/final/TApiKey.js +3 -0
- package/dist/esm/dt/final/TDateISO8601.d.ts +2 -0
- package/dist/esm/dt/final/TDateISO8601.js +3 -0
- package/dist/esm/dt/final/TDomainName.d.ts +2 -0
- package/dist/esm/dt/final/TDomainName.js +3 -0
- package/dist/esm/dt/final/TEmail.d.ts +2 -0
- package/dist/esm/dt/final/TEmail.js +3 -0
- package/dist/esm/dt/final/TEncryptionKey.d.ts +2 -0
- package/dist/esm/dt/final/TEncryptionKey.js +3 -0
- package/dist/esm/dt/final/TFile.d.ts +2 -0
- package/dist/esm/dt/final/TFile.js +3 -0
- package/dist/esm/dt/final/TIPv4.d.ts +2 -0
- package/dist/esm/dt/final/TIPv4.js +3 -0
- package/dist/esm/dt/final/TIPv6.d.ts +2 -0
- package/dist/esm/dt/final/TIPv6.js +3 -0
- package/dist/esm/dt/final/TJWT.d.ts +2 -0
- package/dist/esm/dt/final/TJWT.js +3 -0
- package/dist/esm/dt/final/TPassword.d.ts +2 -0
- package/dist/esm/dt/final/TPassword.js +3 -0
- package/dist/esm/dt/final/TSSHPrivateKey.d.ts +2 -0
- package/dist/esm/dt/final/TSSHPrivateKey.js +3 -0
- package/dist/esm/dt/final/TTime.d.ts +2 -0
- package/dist/esm/dt/final/TTime.js +3 -0
- package/dist/esm/dt/final/TURL.d.ts +2 -0
- package/dist/esm/dt/final/TURL.js +3 -0
- package/dist/esm/dt/index.d.ts +1 -0
- package/dist/esm/dt/targets/json-schema.d.ts +24 -0
- package/dist/esm/dt/targets/json-schema.js +1 -0
- package/dist/esm/error/funcs.d.ts +3 -0
- package/dist/esm/error/funcs.js +1 -1
- package/dist/esm/error/index.d.ts +1 -1
- package/dist/esm/error/index.js +1 -1
- package/dist/esm/product/manifest.d.ts +2 -0
- package/dist/esm/std/impl/SimpleMapI18nManager.d.ts +1 -1
- package/dist/esm/std/impl/SimpleMapI18nManager.js +4 -2
- package/dist/esm/target/edge-worker-hono-server/SyncEdgeWorkerHonoServerManager.d.ts +6 -2
- package/dist/esm/target/edge-worker-hono-server/SyncEdgeWorkerHonoServerManager.js +17 -9
- package/dist/esm/target/index.d.ts +1 -0
- package/dist/esm/target/lib/openapi/OpenAPISpecBuilder.d.ts +25 -0
- package/dist/esm/target/lib/openapi/OpenAPISpecBuilder.js +131 -0
- package/dist/esm/target/lib/openapi/consts.d.ts +2 -0
- package/dist/esm/target/lib/openapi/consts.js +1 -0
- package/dist/esm/target/lib/openapi/funcs.d.ts +16 -0
- package/dist/esm/target/lib/openapi/funcs.js +249 -0
- package/dist/esm/target/lib/openapi/input.d.ts +16 -0
- package/dist/esm/target/lib/openapi/input.js +33 -0
- package/dist/esm/target/lib/openapi/types.d.ts +109 -0
- package/dist/esm/target/lib/openapi/types.js +1 -0
- package/dist/esm/target/lib/rn/input.d.ts +3 -0
- package/dist/esm/target/lib/server/AuthCookieCreator.d.ts +2 -1
- package/dist/esm/target/lib/server/ServerBooter.d.ts +4 -2
- package/dist/esm/target/lib/server/ServerBooter.js +34 -11
- package/dist/esm/target/lib/server/ServerManager.d.ts +19 -9
- package/dist/esm/target/lib/server/ServerRequestHandler.d.ts +0 -1
- package/dist/esm/target/lib/server/ServerRequestHandler.js +2 -2
- package/dist/esm/target/lib/server/consts.d.ts +4 -0
- package/dist/esm/target/lib/server/consts.js +22 -0
- package/dist/esm/target/lib/server-express/CORSMiddlewareBuilder.d.ts +15 -0
- package/dist/esm/target/lib/server-express/CORSMiddlewareBuilder.js +55 -0
- package/dist/esm/target/lib/server-express/funcs.d.ts +2 -1
- package/dist/esm/target/lib/server-express/funcs.js +7 -2
- package/dist/esm/target/lib/server-hono/CORSMiddlewareBuilder.d.ts +14 -0
- package/dist/esm/target/lib/server-hono/CORSMiddlewareBuilder.js +46 -0
- package/dist/esm/target/lib/server-hono/funcs.d.ts +2 -1
- package/dist/esm/target/lib/server-hono/funcs.js +2 -1
- package/dist/esm/target/lib/shared.d.ts +4 -0
- package/dist/esm/target/lib/shared.js +2 -1
- package/dist/esm/target/nextjs-server/NextJSServerManager.d.ts +3 -1
- package/dist/esm/target/nextjs-server/NextJSServerManager.js +3 -0
- package/dist/esm/target/node-express-server/NodeExpressServerManager.d.ts +7 -3
- package/dist/esm/target/node-express-server/NodeExpressServerManager.js +24 -14
- package/dist/esm/target/node-hono-server/NodeHonoServerManager.d.ts +6 -2
- package/dist/esm/target/node-hono-server/NodeHonoServerManager.js +21 -11
- package/dist/esm/target/node-mcp-server/NodeLocalStdioMCPServerManager.d.ts +3 -1
- package/dist/esm/target/node-mcp-server/NodeLocalStdioMCPServerManager.js +19 -14
- package/dist/esm/target/node-mcp-server/types.d.ts +0 -4
- package/dist/esm/uc/UC.d.ts +2 -0
- package/dist/esm/uc/UC.js +16 -1
- package/dist/esm/uc/metadata.d.ts +7 -0
- package/dist/esm/uc/metadata.js +10 -0
- package/dist/esm/uc/output-field.d.ts +1 -0
- package/dist/esm/uc/output-field.js +13 -1
- package/dist/esm/uc/utils/ucHTTPContract.js +1 -1
- package/dist/esm/utils/http/types.d.ts +5 -0
- package/dist/esm/utils/index.d.ts +1 -1
- package/package.json +8 -8
|
@@ -1,21 +1,24 @@
|
|
|
1
1
|
import { type Express } from 'express';
|
|
2
2
|
import type { AppManifest } from '../../app/index.js';
|
|
3
|
-
import type { DirPath } from '../../dt/index.js';
|
|
3
|
+
import type { DirPath, URLPath } from '../../dt/index.js';
|
|
4
4
|
import type { Configurable, EnvironmentManager, Logger, LoggerSettings, SettingsManager } from '../../std/index.js';
|
|
5
5
|
import type { UCDef, UCHTTPContract, UCInput, UCManager, UCOPIBase } from '../../uc/index.js';
|
|
6
|
+
import type { OpenAPISpec } from '../lib/openapi/types.js';
|
|
6
7
|
import { CustomerFacingErrorBuilder } from '../lib/server/CustomerFacingErrorBuilder.js';
|
|
7
8
|
import { EntrypointsBuilder } from '../lib/server/EntrypointsBuilder.js';
|
|
8
9
|
import type { ServerManager, ServerManagerSettings } from '../lib/server/ServerManager.js';
|
|
9
10
|
import { ServerRequestHandler } from '../lib/server/ServerRequestHandler.js';
|
|
10
11
|
import { ServerSSLCertLoader } from '../lib/server/ServerSSLCertLoader.js';
|
|
12
|
+
import { CORSMiddlewareBuilder } from '../lib/server-express/CORSMiddlewareBuilder.js';
|
|
11
13
|
import { HelmetMiddlewareBuilder } from '../lib/server-express/HelmetMiddlewareBuilder.js';
|
|
12
14
|
import type { ListenSettings, StopSettings } from '../lib/server-node/types.js';
|
|
13
15
|
type S = ListenSettings & Pick<LoggerSettings, 'logger_level'> & Pick<ServerManagerSettings, 'server_tmp_path'> & StopSettings;
|
|
14
16
|
export declare class NodeExpressServerManager implements Configurable<S>, ServerManager {
|
|
17
|
+
private corsMiddlewareBuilder;
|
|
15
18
|
private customerFacingErrorBuilder;
|
|
16
19
|
private entrypointsBuilder;
|
|
17
20
|
protected environmentManager: EnvironmentManager;
|
|
18
|
-
private
|
|
21
|
+
private helmetMiddlewareBuilder;
|
|
19
22
|
protected logger: Logger;
|
|
20
23
|
private serverRequestHandler;
|
|
21
24
|
private serverSSLCertLoader;
|
|
@@ -23,7 +26,7 @@ export declare class NodeExpressServerManager implements Configurable<S>, Server
|
|
|
23
26
|
private ucManager;
|
|
24
27
|
protected runtime: Express;
|
|
25
28
|
private server;
|
|
26
|
-
constructor(customerFacingErrorBuilder: CustomerFacingErrorBuilder, entrypointsBuilder: EntrypointsBuilder, environmentManager: EnvironmentManager,
|
|
29
|
+
constructor(corsMiddlewareBuilder: CORSMiddlewareBuilder, customerFacingErrorBuilder: CustomerFacingErrorBuilder, entrypointsBuilder: EntrypointsBuilder, environmentManager: EnvironmentManager, helmetMiddlewareBuilder: HelmetMiddlewareBuilder, logger: Logger, serverRequestHandler: ServerRequestHandler, serverSSLCertLoader: ServerSSLCertLoader, settingsManager: SettingsManager<S>, ucManager: UCManager);
|
|
27
30
|
s(): S;
|
|
28
31
|
getRuntime(): Express;
|
|
29
32
|
overrideUCManager(ucManager: UCManager): void;
|
|
@@ -31,6 +34,7 @@ export declare class NodeExpressServerManager implements Configurable<S>, Server
|
|
|
31
34
|
initSync(): void;
|
|
32
35
|
mount<I extends UCInput | undefined = undefined, OPI0 extends UCOPIBase | undefined = undefined, OPI1 extends UCOPIBase | undefined = undefined>(appManifest: AppManifest, ucd: UCDef<I, OPI0, OPI1>, contract: UCHTTPContract): Promise<void>;
|
|
33
36
|
mountSync<I extends UCInput | undefined = undefined, OPI0 extends UCOPIBase | undefined = undefined, OPI1 extends UCOPIBase | undefined = undefined>(appManifest: AppManifest, ucd: UCDef<I, OPI0, OPI1>, contract: UCHTTPContract): void;
|
|
37
|
+
mountOpenAPISpec(spec: OpenAPISpec, at: URLPath): Promise<void>;
|
|
34
38
|
mountStaticDir(dirPath: DirPath): Promise<void>;
|
|
35
39
|
start(): Promise<void>;
|
|
36
40
|
stop(): Promise<void>;
|
|
@@ -19,14 +19,16 @@ import { CustomerFacingErrorBuilder } from '../lib/server/CustomerFacingErrorBui
|
|
|
19
19
|
import { EntrypointsBuilder } from '../lib/server/EntrypointsBuilder.js';
|
|
20
20
|
import { ServerRequestHandler } from '../lib/server/ServerRequestHandler.js';
|
|
21
21
|
import { ServerSSLCertLoader } from '../lib/server/ServerSSLCertLoader.js';
|
|
22
|
+
import { CORSMiddlewareBuilder } from '../lib/server-express/CORSMiddlewareBuilder.js';
|
|
22
23
|
import { buildHandler, init, mountHandler, postInit, } from '../lib/server-express/funcs.js';
|
|
23
24
|
import { HelmetMiddlewareBuilder } from '../lib/server-express/HelmetMiddlewareBuilder.js';
|
|
24
25
|
import { listen, stop } from '../lib/server-node/funcs.js';
|
|
25
26
|
let NodeExpressServerManager = class NodeExpressServerManager {
|
|
27
|
+
corsMiddlewareBuilder;
|
|
26
28
|
customerFacingErrorBuilder;
|
|
27
29
|
entrypointsBuilder;
|
|
28
30
|
environmentManager;
|
|
29
|
-
|
|
31
|
+
helmetMiddlewareBuilder;
|
|
30
32
|
logger;
|
|
31
33
|
serverRequestHandler;
|
|
32
34
|
serverSSLCertLoader;
|
|
@@ -34,11 +36,12 @@ let NodeExpressServerManager = class NodeExpressServerManager {
|
|
|
34
36
|
ucManager;
|
|
35
37
|
runtime;
|
|
36
38
|
server;
|
|
37
|
-
constructor(customerFacingErrorBuilder, entrypointsBuilder, environmentManager,
|
|
39
|
+
constructor(corsMiddlewareBuilder, customerFacingErrorBuilder, entrypointsBuilder, environmentManager, helmetMiddlewareBuilder, logger, serverRequestHandler, serverSSLCertLoader, settingsManager, ucManager) {
|
|
40
|
+
this.corsMiddlewareBuilder = corsMiddlewareBuilder;
|
|
38
41
|
this.customerFacingErrorBuilder = customerFacingErrorBuilder;
|
|
39
42
|
this.entrypointsBuilder = entrypointsBuilder;
|
|
40
43
|
this.environmentManager = environmentManager;
|
|
41
|
-
this.
|
|
44
|
+
this.helmetMiddlewareBuilder = helmetMiddlewareBuilder;
|
|
42
45
|
this.logger = logger;
|
|
43
46
|
this.serverRequestHandler = serverRequestHandler;
|
|
44
47
|
this.serverSSLCertLoader = serverSSLCertLoader;
|
|
@@ -64,7 +67,7 @@ let NodeExpressServerManager = class NodeExpressServerManager {
|
|
|
64
67
|
this.ucManager = ucManager;
|
|
65
68
|
}
|
|
66
69
|
async init() {
|
|
67
|
-
this.runtime = init(this.
|
|
70
|
+
this.runtime = init(this.corsMiddlewareBuilder, this.helmetMiddlewareBuilder, this.s().logger_level, this.s().server_tmp_path);
|
|
68
71
|
await this.createServer();
|
|
69
72
|
}
|
|
70
73
|
initSync() {
|
|
@@ -76,6 +79,11 @@ let NodeExpressServerManager = class NodeExpressServerManager {
|
|
|
76
79
|
mountSync(appManifest, ucd, contract) {
|
|
77
80
|
this.mountCommon(appManifest, ucd, contract);
|
|
78
81
|
}
|
|
82
|
+
async mountOpenAPISpec(spec, at) {
|
|
83
|
+
this.runtime.get(at, (_req, res) => {
|
|
84
|
+
res.send(spec);
|
|
85
|
+
});
|
|
86
|
+
}
|
|
79
87
|
async mountStaticDir(dirPath) {
|
|
80
88
|
this.runtime.use(express.static(dirPath));
|
|
81
89
|
}
|
|
@@ -105,16 +113,18 @@ let NodeExpressServerManager = class NodeExpressServerManager {
|
|
|
105
113
|
};
|
|
106
114
|
NodeExpressServerManager = __decorate([
|
|
107
115
|
injectable(),
|
|
108
|
-
__param(0, inject(
|
|
109
|
-
__param(1, inject(
|
|
110
|
-
__param(2, inject(
|
|
111
|
-
__param(3, inject(
|
|
112
|
-
__param(4, inject(
|
|
113
|
-
__param(5, inject(
|
|
114
|
-
__param(6, inject(
|
|
115
|
-
__param(7, inject(
|
|
116
|
-
__param(8, inject('
|
|
117
|
-
|
|
116
|
+
__param(0, inject(CORSMiddlewareBuilder)),
|
|
117
|
+
__param(1, inject(CustomerFacingErrorBuilder)),
|
|
118
|
+
__param(2, inject(EntrypointsBuilder)),
|
|
119
|
+
__param(3, inject('EnvironmentManager')),
|
|
120
|
+
__param(4, inject(HelmetMiddlewareBuilder)),
|
|
121
|
+
__param(5, inject('Logger')),
|
|
122
|
+
__param(6, inject(ServerRequestHandler)),
|
|
123
|
+
__param(7, inject(ServerSSLCertLoader)),
|
|
124
|
+
__param(8, inject('SettingsManager')),
|
|
125
|
+
__param(9, inject('UCManager')),
|
|
126
|
+
__metadata("design:paramtypes", [CORSMiddlewareBuilder,
|
|
127
|
+
CustomerFacingErrorBuilder,
|
|
118
128
|
EntrypointsBuilder, Object, HelmetMiddlewareBuilder, Object, ServerRequestHandler,
|
|
119
129
|
ServerSSLCertLoader, Object, Object])
|
|
120
130
|
], NodeExpressServerManager);
|
|
@@ -1,16 +1,19 @@
|
|
|
1
1
|
import type { Hono } from 'hono';
|
|
2
2
|
import type { AppManifest } from '../../app/index.js';
|
|
3
|
-
import type { DirPath } from '../../dt/index.js';
|
|
3
|
+
import type { DirPath, URLPath } from '../../dt/index.js';
|
|
4
4
|
import type { Configurable, EnvironmentManager, Logger, SettingsManager } from '../../std/index.js';
|
|
5
5
|
import type { UCDef, UCHTTPContract, UCInput, UCManager, UCOPIBase } from '../../uc/index.js';
|
|
6
|
+
import type { OpenAPISpec } from '../lib/openapi/types.js';
|
|
6
7
|
import { CustomerFacingErrorBuilder } from '../lib/server/CustomerFacingErrorBuilder.js';
|
|
7
8
|
import { EntrypointsBuilder } from '../lib/server/EntrypointsBuilder.js';
|
|
8
9
|
import type { ServerManager } from '../lib/server/ServerManager.js';
|
|
9
10
|
import { ServerRequestHandler } from '../lib/server/ServerRequestHandler.js';
|
|
10
11
|
import { ServerSSLCertLoader } from '../lib/server/ServerSSLCertLoader.js';
|
|
12
|
+
import { CORSMiddlewareBuilder } from '../lib/server-hono/CORSMiddlewareBuilder.js';
|
|
11
13
|
import type { ListenSettings, StopSettings } from '../lib/server-node/types.js';
|
|
12
14
|
type S = ListenSettings & StopSettings;
|
|
13
15
|
export declare class NodeHonoServerManager implements Configurable<S>, ServerManager {
|
|
16
|
+
private corsMiddlewareBuilder;
|
|
14
17
|
private customerFacingErrorBuilder;
|
|
15
18
|
private entrypointsBuilder;
|
|
16
19
|
protected environmentManager: EnvironmentManager;
|
|
@@ -21,7 +24,7 @@ export declare class NodeHonoServerManager implements Configurable<S>, ServerMan
|
|
|
21
24
|
private ucManager;
|
|
22
25
|
protected runtime: Hono;
|
|
23
26
|
private server;
|
|
24
|
-
constructor(customerFacingErrorBuilder: CustomerFacingErrorBuilder, entrypointsBuilder: EntrypointsBuilder, environmentManager: EnvironmentManager, logger: Logger, serverRequestHandler: ServerRequestHandler, serverSSLCertLoader: ServerSSLCertLoader, settingsManager: SettingsManager<S>, ucManager: UCManager);
|
|
27
|
+
constructor(corsMiddlewareBuilder: CORSMiddlewareBuilder, customerFacingErrorBuilder: CustomerFacingErrorBuilder, entrypointsBuilder: EntrypointsBuilder, environmentManager: EnvironmentManager, logger: Logger, serverRequestHandler: ServerRequestHandler, serverSSLCertLoader: ServerSSLCertLoader, settingsManager: SettingsManager<S>, ucManager: UCManager);
|
|
25
28
|
s(): S;
|
|
26
29
|
getRuntime(): Hono;
|
|
27
30
|
overrideUCManager(ucManager: UCManager): void;
|
|
@@ -29,6 +32,7 @@ export declare class NodeHonoServerManager implements Configurable<S>, ServerMan
|
|
|
29
32
|
initSync(): void;
|
|
30
33
|
mount<I extends UCInput | undefined = undefined, OPI0 extends UCOPIBase | undefined = undefined, OPI1 extends UCOPIBase | undefined = undefined>(appManifest: AppManifest, ucd: UCDef<I, OPI0, OPI1>, contract: UCHTTPContract): Promise<void>;
|
|
31
34
|
mountSync<I extends UCInput | undefined = undefined, OPI0 extends UCOPIBase | undefined = undefined, OPI1 extends UCOPIBase | undefined = undefined>(appManifest: AppManifest, ucd: UCDef<I, OPI0, OPI1>, contract: UCHTTPContract): void;
|
|
35
|
+
mountOpenAPISpec(spec: OpenAPISpec, at: URLPath): Promise<void>;
|
|
32
36
|
mountStaticDir(dirPath: DirPath): Promise<void>;
|
|
33
37
|
start(): Promise<void>;
|
|
34
38
|
stop(): Promise<void>;
|
|
@@ -20,9 +20,11 @@ import { CustomerFacingErrorBuilder } from '../lib/server/CustomerFacingErrorBui
|
|
|
20
20
|
import { EntrypointsBuilder } from '../lib/server/EntrypointsBuilder.js';
|
|
21
21
|
import { ServerRequestHandler } from '../lib/server/ServerRequestHandler.js';
|
|
22
22
|
import { ServerSSLCertLoader } from '../lib/server/ServerSSLCertLoader.js';
|
|
23
|
+
import { CORSMiddlewareBuilder } from '../lib/server-hono/CORSMiddlewareBuilder.js';
|
|
23
24
|
import { buildHandler, init, mountHandler } from '../lib/server-hono/funcs.js';
|
|
24
25
|
import { listen, stop } from '../lib/server-node/funcs.js';
|
|
25
26
|
let NodeHonoServerManager = class NodeHonoServerManager {
|
|
27
|
+
corsMiddlewareBuilder;
|
|
26
28
|
customerFacingErrorBuilder;
|
|
27
29
|
entrypointsBuilder;
|
|
28
30
|
environmentManager;
|
|
@@ -33,7 +35,8 @@ let NodeHonoServerManager = class NodeHonoServerManager {
|
|
|
33
35
|
ucManager;
|
|
34
36
|
runtime;
|
|
35
37
|
server;
|
|
36
|
-
constructor(customerFacingErrorBuilder, entrypointsBuilder, environmentManager, logger, serverRequestHandler, serverSSLCertLoader, settingsManager, ucManager) {
|
|
38
|
+
constructor(corsMiddlewareBuilder, customerFacingErrorBuilder, entrypointsBuilder, environmentManager, logger, serverRequestHandler, serverSSLCertLoader, settingsManager, ucManager) {
|
|
39
|
+
this.corsMiddlewareBuilder = corsMiddlewareBuilder;
|
|
37
40
|
this.customerFacingErrorBuilder = customerFacingErrorBuilder;
|
|
38
41
|
this.entrypointsBuilder = entrypointsBuilder;
|
|
39
42
|
this.environmentManager = environmentManager;
|
|
@@ -60,7 +63,7 @@ let NodeHonoServerManager = class NodeHonoServerManager {
|
|
|
60
63
|
this.ucManager = ucManager;
|
|
61
64
|
}
|
|
62
65
|
async init() {
|
|
63
|
-
this.runtime = init(this.customerFacingErrorBuilder);
|
|
66
|
+
this.runtime = init(this.corsMiddlewareBuilder, this.customerFacingErrorBuilder);
|
|
64
67
|
await this.createServer();
|
|
65
68
|
}
|
|
66
69
|
initSync() {
|
|
@@ -72,6 +75,11 @@ let NodeHonoServerManager = class NodeHonoServerManager {
|
|
|
72
75
|
mountSync(appManifest, ucd, contract) {
|
|
73
76
|
this.mountCommon(appManifest, ucd, contract);
|
|
74
77
|
}
|
|
78
|
+
async mountOpenAPISpec(spec, at) {
|
|
79
|
+
this.runtime.get(at, (c) => {
|
|
80
|
+
return c.json(spec);
|
|
81
|
+
});
|
|
82
|
+
}
|
|
75
83
|
async mountStaticDir(dirPath) {
|
|
76
84
|
this.runtime.use(serveStatic({ root: dirPath }));
|
|
77
85
|
}
|
|
@@ -109,15 +117,17 @@ let NodeHonoServerManager = class NodeHonoServerManager {
|
|
|
109
117
|
};
|
|
110
118
|
NodeHonoServerManager = __decorate([
|
|
111
119
|
injectable(),
|
|
112
|
-
__param(0, inject(
|
|
113
|
-
__param(1, inject(
|
|
114
|
-
__param(2, inject(
|
|
115
|
-
__param(3, inject('
|
|
116
|
-
__param(4, inject(
|
|
117
|
-
__param(5, inject(
|
|
118
|
-
__param(6, inject(
|
|
119
|
-
__param(7, inject('
|
|
120
|
-
|
|
120
|
+
__param(0, inject(CORSMiddlewareBuilder)),
|
|
121
|
+
__param(1, inject(CustomerFacingErrorBuilder)),
|
|
122
|
+
__param(2, inject(EntrypointsBuilder)),
|
|
123
|
+
__param(3, inject('EnvironmentManager')),
|
|
124
|
+
__param(4, inject('Logger')),
|
|
125
|
+
__param(5, inject(ServerRequestHandler)),
|
|
126
|
+
__param(6, inject(ServerSSLCertLoader)),
|
|
127
|
+
__param(7, inject('SettingsManager')),
|
|
128
|
+
__param(8, inject('UCManager')),
|
|
129
|
+
__metadata("design:paramtypes", [CORSMiddlewareBuilder,
|
|
130
|
+
CustomerFacingErrorBuilder,
|
|
121
131
|
EntrypointsBuilder, Object, Object, ServerRequestHandler,
|
|
122
132
|
ServerSSLCertLoader, Object, Object])
|
|
123
133
|
], NodeHonoServerManager);
|
|
@@ -1,10 +1,11 @@
|
|
|
1
1
|
import { Server } from '@modelcontextprotocol/sdk/server/index.js';
|
|
2
2
|
import type { AppManifest } from '../../app/index.js';
|
|
3
|
-
import type { DirPath } from '../../dt/index.js';
|
|
3
|
+
import type { DirPath, URLPath } from '../../dt/index.js';
|
|
4
4
|
import { WordingManager } from '../../i18n/index.js';
|
|
5
5
|
import type { ProductManifest } from '../../product/index.js';
|
|
6
6
|
import type { Configurable, LoggerSettings, SettingsManager } from '../../std/index.js';
|
|
7
7
|
import { UCBuilder, type UCDef, type UCHTTPContract, type UCInput, type UCManager, type UCOPIBase } from '../../uc/index.js';
|
|
8
|
+
import type { OpenAPISpec } from '../lib/openapi/types.js';
|
|
8
9
|
import type { ServerManager } from '../lib/server/ServerManager.js';
|
|
9
10
|
type S = Pick<LoggerSettings, 'logger_level'>;
|
|
10
11
|
/**
|
|
@@ -34,6 +35,7 @@ export declare class NodeLocalStdioMCPServerManager implements Configurable<S>,
|
|
|
34
35
|
initSync(): void;
|
|
35
36
|
mount<I extends UCInput | undefined = undefined, OPI0 extends UCOPIBase | undefined = undefined, OPI1 extends UCOPIBase | undefined = undefined>(appManifest: AppManifest, ucd: UCDef<I, OPI0, OPI1>, contract: UCHTTPContract): Promise<void>;
|
|
36
37
|
mountSync<I extends UCInput | undefined = undefined, OPI0 extends UCOPIBase | undefined = undefined, OPI1 extends UCOPIBase | undefined = undefined>(appManifest: AppManifest, ucd: UCDef<I, OPI0, OPI1>, contract: UCHTTPContract): void;
|
|
38
|
+
mountOpenAPISpec(_spec: OpenAPISpec, _at: URLPath): Promise<void>;
|
|
37
39
|
mountStaticDir(_dirPath: DirPath): Promise<void>;
|
|
38
40
|
start(): Promise<void>;
|
|
39
41
|
stop(): Promise<void>;
|
|
@@ -17,6 +17,7 @@ import { inject, injectable } from 'inversify';
|
|
|
17
17
|
import { NotAvailableError } from '../../error/index.js';
|
|
18
18
|
import { WordingManager } from '../../i18n/index.js';
|
|
19
19
|
import { UCBuilder, ucifIsMandatory, ucMountingPoint, } from '../../uc/index.js';
|
|
20
|
+
import { DEFAULT_VERSION } from '../lib/shared.js';
|
|
20
21
|
import { propertyType, resError, resObj } from './funcs.js';
|
|
21
22
|
/**
|
|
22
23
|
* A simple MCP Server implementation
|
|
@@ -67,6 +68,9 @@ let NodeLocalStdioMCPServerManager = class NodeLocalStdioMCPServerManager {
|
|
|
67
68
|
mountSync(appManifest, ucd, contract) {
|
|
68
69
|
this.mountCommon(appManifest, ucd, contract);
|
|
69
70
|
}
|
|
71
|
+
async mountOpenAPISpec(_spec, _at) {
|
|
72
|
+
// Nothing to do
|
|
73
|
+
}
|
|
70
74
|
async mountStaticDir(_dirPath) {
|
|
71
75
|
throw new NotAvailableError('mountStaticDir');
|
|
72
76
|
}
|
|
@@ -90,18 +94,18 @@ let NodeLocalStdioMCPServerManager = class NodeLocalStdioMCPServerManager {
|
|
|
90
94
|
const res = {
|
|
91
95
|
type: 'object',
|
|
92
96
|
};
|
|
93
|
-
if (uc.
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
97
|
+
if (!uc.hasInput()) {
|
|
98
|
+
return res;
|
|
99
|
+
}
|
|
100
|
+
res.properties = {};
|
|
101
|
+
for (const f of uc.inputFields) {
|
|
102
|
+
const { def, key } = f;
|
|
103
|
+
const { desc } = this.wordingManager.ucif(f);
|
|
104
|
+
res.properties[key] = {
|
|
105
|
+
...propertyType(def),
|
|
106
|
+
description: desc,
|
|
107
|
+
required: ucifIsMandatory(def),
|
|
108
|
+
};
|
|
105
109
|
}
|
|
106
110
|
return res;
|
|
107
111
|
}
|
|
@@ -140,9 +144,10 @@ let NodeLocalStdioMCPServerManager = class NodeLocalStdioMCPServerManager {
|
|
|
140
144
|
}
|
|
141
145
|
}
|
|
142
146
|
initCommon() {
|
|
147
|
+
const { name, version } = this.productManifest;
|
|
143
148
|
this.runtime = new Server({
|
|
144
|
-
name:
|
|
145
|
-
version:
|
|
149
|
+
name: name,
|
|
150
|
+
version: version ?? DEFAULT_VERSION,
|
|
146
151
|
}, {
|
|
147
152
|
capabilities: {
|
|
148
153
|
tools: {},
|
|
@@ -12,8 +12,4 @@ export type PropertyArrayType<T extends PropertyPrimitiveType> = {
|
|
|
12
12
|
export type PropertyType<T extends PropertyPrimitiveType = PropertyPrimitiveType> = {
|
|
13
13
|
type: T;
|
|
14
14
|
} | PropertyArrayType<T>;
|
|
15
|
-
export type Property<T extends PropertyPrimitiveType = PropertyPrimitiveType> = PropertyType<T> & {
|
|
16
|
-
description: string | null;
|
|
17
|
-
required: boolean;
|
|
18
|
-
};
|
|
19
15
|
export type Tool = ListToolsResult['tools'][0];
|
package/dist/esm/uc/UC.d.ts
CHANGED
|
@@ -21,6 +21,7 @@ export declare class UC<I extends UCInput | undefined = undefined, OPI0 extends
|
|
|
21
21
|
clear(): void;
|
|
22
22
|
clearSensitiveInputFields(): void;
|
|
23
23
|
fill(input: UCInputPartial<I>): this;
|
|
24
|
+
hasInput(): boolean;
|
|
24
25
|
hasInputField(key: UCFieldKey): boolean;
|
|
25
26
|
hasMediaInInput(): boolean;
|
|
26
27
|
hasOutputParts(): boolean;
|
|
@@ -29,6 +30,7 @@ export declare class UC<I extends UCInput | undefined = undefined, OPI0 extends
|
|
|
29
30
|
inputFieldsOrdered(): UCInputField<any>[];
|
|
30
31
|
inputFieldsInsensitive(): UCInputField<any>[];
|
|
31
32
|
inputFieldsSensitive(): UCInputField<any>[];
|
|
33
|
+
inputFieldsRepeatable(): UCInputField<any>[];
|
|
32
34
|
needsInputFilling(): boolean;
|
|
33
35
|
needsOutputDisplay(): boolean;
|
|
34
36
|
operatesOnAggregate(): boolean;
|
package/dist/esm/uc/UC.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { TFile, Validation } from '../dt/index.js';
|
|
2
2
|
import { isBlank } from '../utils/index.js';
|
|
3
|
-
import { ucifIsMandatory, ucifIsSensitive, ucifMustBeFilledManually, } from './input-field.js';
|
|
3
|
+
import { ucifIsMandatory, ucifIsSensitive, ucifMustBeFilledManually, ucifRepeatability, } from './input-field.js';
|
|
4
4
|
import { AggregateInputDef } from './io/input/AggregateInput.js';
|
|
5
5
|
import { ListInputDef } from './io/input/ListInput.js';
|
|
6
6
|
import { UCInputField } from './UCInputField.js';
|
|
@@ -44,6 +44,9 @@ export class UC {
|
|
|
44
44
|
}
|
|
45
45
|
return this;
|
|
46
46
|
}
|
|
47
|
+
hasInput() {
|
|
48
|
+
return this.inputFields.length > 0;
|
|
49
|
+
}
|
|
47
50
|
hasInputField(key) {
|
|
48
51
|
return this.inputFields.find((f) => f.key === key) !== undefined;
|
|
49
52
|
}
|
|
@@ -104,6 +107,18 @@ export class UC {
|
|
|
104
107
|
inputFieldsSensitive() {
|
|
105
108
|
return this.inputFields.filter((f) => ucifIsSensitive(f.def));
|
|
106
109
|
}
|
|
110
|
+
// biome-ignore lint/suspicious/noExplicitAny: can be anything
|
|
111
|
+
inputFieldsRepeatable() {
|
|
112
|
+
const res = [];
|
|
113
|
+
for (const f of this.inputFields) {
|
|
114
|
+
const [isRepeatable] = ucifRepeatability(f.def);
|
|
115
|
+
if (!isRepeatable) {
|
|
116
|
+
continue;
|
|
117
|
+
}
|
|
118
|
+
res.push(f);
|
|
119
|
+
}
|
|
120
|
+
return res;
|
|
121
|
+
}
|
|
107
122
|
needsInputFilling() {
|
|
108
123
|
const fields = this.inputFields;
|
|
109
124
|
if (fields.length === 0) {
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import type { AppName } from '../app/index.js';
|
|
2
|
+
import { UC_INPUT_SUFFIX, UC_OPI0_SUFFIX, UC_OPI1_SUFFIX } from '../convention.js';
|
|
2
3
|
import type { IconCode } from '../icon/index.js';
|
|
3
4
|
/**
|
|
4
5
|
* The type of action the use case performs
|
|
@@ -14,6 +15,9 @@ export type FQUCNameSeparator = '_';
|
|
|
14
15
|
* It's made with the {@link AppName} and the {@link UCName} linked by {@link FQUCNameSeparator}.
|
|
15
16
|
*/
|
|
16
17
|
export type FQUCName = `${AppName}${FQUCNameSeparator}${UCName}`;
|
|
18
|
+
export type FQUCInputName = `${FQUCName}${typeof UC_INPUT_SUFFIX}`;
|
|
19
|
+
export type FQUCOPI0Name = `${FQUCName}${typeof UC_OPI0_SUFFIX}`;
|
|
20
|
+
export type FQUCOPI1Name = `${FQUCName}${typeof UC_OPI1_SUFFIX}`;
|
|
17
21
|
export interface UCMetadata {
|
|
18
22
|
action: UCAction;
|
|
19
23
|
beta?: boolean;
|
|
@@ -24,4 +28,7 @@ export interface UCMetadata {
|
|
|
24
28
|
}
|
|
25
29
|
export declare const FQ_UC_NAME_SEPARATOR: FQUCNameSeparator;
|
|
26
30
|
export declare function formatFQUCName(appName: AppName, ucName: UCName): FQUCName;
|
|
31
|
+
export declare function formatFQUCInputName(fqUCName: FQUCName): FQUCInputName;
|
|
32
|
+
export declare function formatFQUCOPI0Name(fqUCName: FQUCName): FQUCOPI0Name;
|
|
33
|
+
export declare function formatFQUCOPI1Name(fqUCName: FQUCName): FQUCOPI1Name;
|
|
27
34
|
export declare function parseFQUCName(value: string): [AppName, UCName];
|
package/dist/esm/uc/metadata.js
CHANGED
|
@@ -1,9 +1,19 @@
|
|
|
1
|
+
import { UC_INPUT_SUFFIX, UC_OPI0_SUFFIX, UC_OPI1_SUFFIX, } from '../convention.js';
|
|
1
2
|
import { isCapitalized } from '../utils/index.js';
|
|
2
3
|
const ERR_INVALID_FQ_UC_NAME = (value) => `Invalid fully qualified use case name : ${value}`;
|
|
3
4
|
export const FQ_UC_NAME_SEPARATOR = '_';
|
|
4
5
|
export function formatFQUCName(appName, ucName) {
|
|
5
6
|
return [appName, ucName].join(FQ_UC_NAME_SEPARATOR);
|
|
6
7
|
}
|
|
8
|
+
export function formatFQUCInputName(fqUCName) {
|
|
9
|
+
return `${fqUCName}${UC_INPUT_SUFFIX}`;
|
|
10
|
+
}
|
|
11
|
+
export function formatFQUCOPI0Name(fqUCName) {
|
|
12
|
+
return `${fqUCName}${UC_OPI0_SUFFIX}`;
|
|
13
|
+
}
|
|
14
|
+
export function formatFQUCOPI1Name(fqUCName) {
|
|
15
|
+
return `${fqUCName}${UC_OPI1_SUFFIX}`;
|
|
16
|
+
}
|
|
7
17
|
export function parseFQUCName(value) {
|
|
8
18
|
const elements = value.split(FQ_UC_NAME_SEPARATOR);
|
|
9
19
|
if (elements.length !== 2) {
|
|
@@ -1 +1,13 @@
|
|
|
1
|
-
export {
|
|
1
|
+
export function ucofExamples(def) {
|
|
2
|
+
const { type } = def;
|
|
3
|
+
const examples = type.getExamples();
|
|
4
|
+
// Leaving the value `undefined` means you want the default value
|
|
5
|
+
if (examples === undefined) {
|
|
6
|
+
return [type.example()];
|
|
7
|
+
}
|
|
8
|
+
// Setting the examples to `[]` means you don't want them
|
|
9
|
+
if (examples.length === 0) {
|
|
10
|
+
return undefined;
|
|
11
|
+
}
|
|
12
|
+
return examples;
|
|
13
|
+
}
|
|
@@ -7,7 +7,7 @@ const ACTION_HTTP_METHOD_MAPPING = {
|
|
|
7
7
|
Update: 'PUT',
|
|
8
8
|
View: 'GET',
|
|
9
9
|
};
|
|
10
|
-
const METHODS_WITH_NO_BODY = ['GET', 'HEAD'];
|
|
10
|
+
const METHODS_WITH_NO_BODY = ['DELETE', 'GET', 'HEAD'];
|
|
11
11
|
export function ucHTTPContract(uc, pathPrefix = '/api/v1') {
|
|
12
12
|
const { ext, metadata } = uc.def;
|
|
13
13
|
const { action } = metadata;
|
|
@@ -1,2 +1,7 @@
|
|
|
1
|
+
import type { URL } from '../../dt/index.js';
|
|
2
|
+
export type HTTPCSPType = 'defaultSrc' | 'imgSrc' | 'scriptSrc';
|
|
3
|
+
export type HTTPCSPValue = URL[];
|
|
4
|
+
export type HTTPCookieSameSite = 'lax' | 'none' | 'strict';
|
|
1
5
|
export type HTTPDataEnvelope = 'form-data' | 'json' | 'query-params';
|
|
2
6
|
export type HTTPReqData = Record<string, unknown>;
|
|
7
|
+
export type HTTPHeaderName = 'Accept' | 'Authorization' | 'Content-Type' | 'Cookie' | 'Origin' | 'X-Requested-With' | (string & {});
|
|
@@ -11,7 +11,7 @@ export { fromQueryParams, toQueryParams } from './http/query-params.js';
|
|
|
11
11
|
export { SSEStreamManager } from './http/SSEStreamManager.js';
|
|
12
12
|
export { fmtSingleDataMsg, fmtSSEError, isSSEError, parseDataLine, SSE_HEADERS, } from './http/sse.js';
|
|
13
13
|
export { isClientError, isError, isServerError } from './http/status.js';
|
|
14
|
-
export type { HTTPDataEnvelope, HTTPReqData } from './http/types.js';
|
|
14
|
+
export type { HTTPCookieSameSite, HTTPCSPType, HTTPCSPValue, HTTPDataEnvelope, HTTPHeaderName, HTTPReqData, } from './http/types.js';
|
|
15
15
|
export { bindFactory } from './ioc/bindFactory.js';
|
|
16
16
|
export { CONTAINER_OPTS } from './ioc/container.js';
|
|
17
17
|
export type { Class } from './ioc/types.js';
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "libmodulor",
|
|
3
3
|
"description": "A TypeScript library to create platform-agnostic applications",
|
|
4
|
-
"version": "0.
|
|
4
|
+
"version": "0.29.0",
|
|
5
5
|
"license": "LGPL-3.0",
|
|
6
6
|
"author": "Chafik H'nini <chafik.hnini@gmail.com>",
|
|
7
7
|
"homepage": "https://libmodulor.c100k.eu",
|
|
@@ -97,7 +97,7 @@
|
|
|
97
97
|
"test": "tsc && vitest run"
|
|
98
98
|
},
|
|
99
99
|
"devDependencies": {
|
|
100
|
-
"@biomejs/biome": "^2.4.
|
|
100
|
+
"@biomejs/biome": "^2.4.14",
|
|
101
101
|
"@react-native-community/slider": "^4.5.7",
|
|
102
102
|
"@types/react": "^19.2.14",
|
|
103
103
|
"@types/react-dom": "^19.2.3",
|
|
@@ -105,9 +105,9 @@
|
|
|
105
105
|
"babel-plugin-transform-typescript-metadata": "^0.3.2",
|
|
106
106
|
"expo": "55.0.11",
|
|
107
107
|
"expo-document-picker": "~14.0.8",
|
|
108
|
-
"expo-image-picker": "^17.0.
|
|
108
|
+
"expo-image-picker": "^17.0.11",
|
|
109
109
|
"react-native-safe-area-context": "^5.7.0",
|
|
110
|
-
"wrangler": "^4.
|
|
110
|
+
"wrangler": "^4.90.0"
|
|
111
111
|
},
|
|
112
112
|
"peerDependencies": {
|
|
113
113
|
"@hono/node-server": "^1.19.14",
|
|
@@ -119,11 +119,11 @@
|
|
|
119
119
|
"express-fileupload": "^1.5.2",
|
|
120
120
|
"fast-check": "^4.7.0",
|
|
121
121
|
"helmet": "^8.1.0",
|
|
122
|
-
"hono": "^4.12.
|
|
122
|
+
"hono": "^4.12.18",
|
|
123
123
|
"inversify": "^7.11.0",
|
|
124
|
-
"jose": "^6.2.
|
|
125
|
-
"knex": "^3.2.
|
|
126
|
-
"next": "^15.5.
|
|
124
|
+
"jose": "^6.2.3",
|
|
125
|
+
"knex": "^3.2.10",
|
|
126
|
+
"next": "^15.5.18",
|
|
127
127
|
"pg": "^8.20.0",
|
|
128
128
|
"react": "19.2.3",
|
|
129
129
|
"react-dom": "19.2.3",
|