@interopio/gateway-server 0.4.0-beta → 0.5.0-beta
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 +18 -0
- package/dist/gateway-ent.cjs +25 -2
- package/dist/gateway-ent.cjs.map +2 -2
- package/dist/gateway-ent.js +25 -2
- package/dist/gateway-ent.js.map +2 -2
- package/dist/index.cjs +1182 -109
- package/dist/index.cjs.map +4 -4
- package/dist/index.js +1182 -109
- package/dist/index.js.map +4 -4
- package/dist/metrics/publisher/rest.cjs +60 -0
- package/dist/metrics/publisher/rest.cjs.map +7 -0
- package/dist/metrics/publisher/rest.js +23 -0
- package/dist/metrics/publisher/rest.js.map +7 -0
- package/package.json +12 -12
- package/types/gateway-ent.d.ts +2 -1
- package/dist/metrics-rest.cjs +0 -21440
- package/dist/metrics-rest.cjs.map +0 -7
- package/dist/metrics-rest.js +0 -21430
- package/dist/metrics-rest.js.map +0 -7
- package/src/common/compose.ts +0 -40
- package/src/gateway/ent/config.ts +0 -174
- package/src/gateway/ent/index.ts +0 -18
- package/src/gateway/ent/logging.ts +0 -89
- package/src/gateway/ent/server.ts +0 -34
- package/src/gateway/metrics/rest.ts +0 -20
- package/src/gateway/ws/core.ts +0 -90
- package/src/index.ts +0 -3
- package/src/logger.ts +0 -6
- package/src/mesh/connections.ts +0 -101
- package/src/mesh/rest-directory/routes.ts +0 -38
- package/src/mesh/ws/broker/core.ts +0 -163
- package/src/mesh/ws/cluster/core.ts +0 -107
- package/src/mesh/ws/relays/core.ts +0 -159
- package/src/metrics/routes.ts +0 -86
- package/src/server/address.ts +0 -47
- package/src/server/cors.ts +0 -311
- package/src/server/exchange.ts +0 -379
- package/src/server/monitoring.ts +0 -167
- package/src/server/types.ts +0 -69
- package/src/server/ws-client-verify.ts +0 -79
- package/src/server.ts +0 -316
- package/src/utils.ts +0 -10
package/changelog.md
CHANGED
|
@@ -2,6 +2,24 @@
|
|
|
2
2
|
|
|
3
3
|
# Change Log
|
|
4
4
|
|
|
5
|
+
## 0.5.0-beta (Unreleased)
|
|
6
|
+
|
|
7
|
+
### Changed
|
|
8
|
+
|
|
9
|
+
- updated @glue42/gateway-ent types from 3.1.2
|
|
10
|
+
- drop support for Node.js 18
|
|
11
|
+
- @interopio/gateway upgraded to 0.10.0-beta
|
|
12
|
+
- http-cookie-agent upgraded to ^7.0.1 (requires Node.js 20+)
|
|
13
|
+
- tough-cookie upgraded to ^5.1.2
|
|
14
|
+
- exclude sources from the package
|
|
15
|
+
- **BREAKING** changed ./metrics-rest export to ./metrics/publisher/rest
|
|
16
|
+
|
|
17
|
+
### Added
|
|
18
|
+
|
|
19
|
+
- authenticator config compatibility
|
|
20
|
+
- global fetch and WebSocket config compatibility
|
|
21
|
+
- security support
|
|
22
|
+
|
|
5
23
|
## 0.4.0-beta (2025-06-04)
|
|
6
24
|
|
|
7
25
|
initial public release
|
package/dist/gateway-ent.cjs
CHANGED
|
@@ -170,7 +170,7 @@ function toMetricsConfig(legacy) {
|
|
|
170
170
|
headers,
|
|
171
171
|
...toMetricsPublisherConfig(conf)
|
|
172
172
|
};
|
|
173
|
-
metrics.rest["publishFn"] ??= "@interopio/gateway-server/metrics
|
|
173
|
+
metrics.rest["publishFn"] ??= "@interopio/gateway-server/metrics/publisher/rest";
|
|
174
174
|
}
|
|
175
175
|
} else if (publisher === "file") {
|
|
176
176
|
metrics.publishers.push("file");
|
|
@@ -183,6 +183,7 @@ function toMetricsConfig(legacy) {
|
|
|
183
183
|
status,
|
|
184
184
|
...toMetricsPublisherConfig(conf)
|
|
185
185
|
};
|
|
186
|
+
metrics.file["publishFn"] ??= "@interopio/gateway/metrics/publisher/file";
|
|
186
187
|
}
|
|
187
188
|
} else {
|
|
188
189
|
}
|
|
@@ -241,6 +242,22 @@ function toMeshConfig(legacy) {
|
|
|
241
242
|
}
|
|
242
243
|
return mesh;
|
|
243
244
|
}
|
|
245
|
+
function toAuthenticationConfig(legacy) {
|
|
246
|
+
const authentication = { available: [] };
|
|
247
|
+
if (legacy?.default) {
|
|
248
|
+
authentication.default = legacy.default;
|
|
249
|
+
}
|
|
250
|
+
const as = legacy?.available;
|
|
251
|
+
as.forEach((a) => {
|
|
252
|
+
if (a === "basic" || a === "oauth2" || legacy?.[a]?.["authenticator"] !== void 0) {
|
|
253
|
+
authentication.available.push(a);
|
|
254
|
+
if (legacy?.[a] !== void 0) {
|
|
255
|
+
authentication[a] = legacy[a];
|
|
256
|
+
}
|
|
257
|
+
}
|
|
258
|
+
});
|
|
259
|
+
return authentication;
|
|
260
|
+
}
|
|
244
261
|
function toServerConfig(config) {
|
|
245
262
|
const gateway = {
|
|
246
263
|
route: config.route,
|
|
@@ -267,7 +284,13 @@ function toServerConfig(config) {
|
|
|
267
284
|
},
|
|
268
285
|
metrics: { publishers: [] }
|
|
269
286
|
};
|
|
270
|
-
if (config.authentication
|
|
287
|
+
if (config.authentication !== void 0) {
|
|
288
|
+
if (config.authentication.token_ttl) gateway.token = { ttl: config.authentication?.token_ttl };
|
|
289
|
+
if (config.authentication.available || config.authentication.default) gateway.authentication = toAuthenticationConfig(config.authentication);
|
|
290
|
+
}
|
|
291
|
+
if (config["globals"]) {
|
|
292
|
+
gateway.globals = config["globals"];
|
|
293
|
+
}
|
|
271
294
|
if (config["contexts"]) {
|
|
272
295
|
gateway.contexts = config["contexts"];
|
|
273
296
|
}
|
package/dist/gateway-ent.cjs.map
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../src/gateway/ent/index.ts", "../src/gateway/ent/logging.ts", "../src/gateway/ent/server.ts", "../src/gateway/ent/config.ts"],
|
|
4
|
-
"sourcesContent": ["import {toLogConfig} from './logging.js';\nimport {ServerDelegate} from './server.js';\nimport {toServerConfig} from './config.js';\nimport {\n Gateway,\n GatewayConfig,\n LogInfo,\n LogLevel\n} from '../../../types/gateway-ent';\nimport {IOGateway} from '@interopio/gateway';\n\nexport function create(config: GatewayConfig): Gateway {\n return new ServerDelegate(toServerConfig(config));\n}\n\nexport function configure_logging(config?: { level: LogLevel, appender?: (info: LogInfo) => void }) {\n IOGateway.Logging.configure(toLogConfig(config));\n}\n", "import {LogInfo, LogLevel} from '@interopio/gateway-server/gateway-ent';\nimport {IOGateway} from '@interopio/gateway';\nimport {format} from 'node:util';\n\nclass LogInfoAdapter implements LogInfo {\n private _parsed?: { err?: Error, msg: string };\n private _timestamp?: string;\n private _output?: string;\n\n constructor(private readonly event: IOGateway.Logging.LogEvent) {\n }\n\n private parsed(): { err?: Error, msg: string } {\n if (this._parsed === undefined) {\n let err: Error | undefined = undefined;\n let vargs = this.event.data;\n if (this.event.data[0] instanceof Error) {\n err = this.event.data[0];\n vargs = vargs.slice(1);\n }\n const msg = format(this.event.message, ...vargs);\n this._parsed = {err, msg};\n }\n return this._parsed;\n }\n\n get time(): Date {\n return this.event.time;\n }\n\n get level(): LogLevel {\n return this.event.level;\n }\n\n get namespace() {\n return this.event.name;\n }\n\n get file(): string {\n return undefined as unknown as string;\n }\n\n get line(): number {\n return undefined as unknown as number;\n }\n\n get message(): string {\n return this.parsed().msg;\n }\n\n get stacktrace(): Error | undefined {\n return this.parsed().err;\n }\n\n private get timestamp(): string {\n if (this._timestamp === undefined) {\n this._timestamp = this.time.toISOString();\n }\n return this._timestamp;\n }\n\n get output(): string {\n if (this._output === undefined) {\n const err = this.parsed().err;\n const stacktrace = err ? `\\n${err.stack ?? err}` : '';\n this._output = `${this.timestamp} ${this.level.toUpperCase()} [${this.namespace}] - ${this.message}${stacktrace}`;\n }\n return this._output;\n }\n}\n\nexport function toLogConfig(config?: { level?: LogLevel; appender?: (info: LogInfo) => void }): IOGateway.Logging.LogConfig {\n let level: Exclude<LogLevel, 'report' | 'fatal'> = 'info';\n if (config?.level) {\n if (config.level === 'fatal') {\n level = 'error';\n } else if (config.level !== 'report') {\n level = config.level;\n }\n }\n const result: IOGateway.Logging.LogConfig = {level};\n const appenderFn = config?.appender;\n if (appenderFn) {\n result.appender = (event: IOGateway.Logging.LogEvent) => {\n appenderFn(new LogInfoAdapter(event));\n };\n }\n return result;\n}\n", "import {Gateway, GatewayClient, GatewayMessage} from '@interopio/gateway-server/gateway-ent';\nimport {GatewayServer} from '@interopio/gateway-server';\n\nexport class ServerDelegate implements Gateway {\n private server?: GatewayServer.Server;\n\n constructor(private readonly config: GatewayServer.ServerConfig) {\n }\n\n async connect(cb: (client: GatewayClient, msg: GatewayMessage) => void): Promise<GatewayClient> {\n if (!this.server) {\n throw new Error(`not started`);\n }\n const client = await this.server.gateway.connect((c, m) => cb(c as unknown as GatewayClient, m as GatewayMessage));\n return client as unknown as GatewayClient;\n }\n\n info(): { endpoint: string } {\n return this.server?.gateway.info() as { endpoint: string };\n }\n\n async start(): Promise<Gateway> {\n if (!this.server) {\n this.server = await GatewayServer.Factory(this.config);\n }\n return this;\n }\n\n async stop(): Promise<Gateway> {\n await this.server?.close();\n delete this.server;\n return this;\n }\n}\n", "import {GatewayServer} from '../../../gateway-server';\nimport {IOGateway} from '@interopio/gateway';\nimport { GatewayConfig, MetricsPublisherConfig } from '../../../types/gateway-ent';\n\nfunction toMetricsFilters(legacy?: MetricsPublisherConfig['filters']): IOGateway.MetricFilters | undefined {\n if (legacy) {\n const publishers = legacy.publishers.map(publisher => {\n return {identity: publisher.publisher, metrics: publisher.metrics};\n });\n const non_matched = legacy['non-matched'];\n return {publishers, non_matched};\n }\n}\n\nfunction toMetricsPublisherConfig(legacy: MetricsPublisherConfig & {\n conflation?: { 'max-datapoints-repo'?: number } & MetricsPublisherConfig['conflation']\n}): IOGateway.BasicMetricsPublisherConfig {\n const filters = toMetricsFilters(legacy?.filters);\n const conflation = toConflation(legacy?.conflation);\n return {...legacy, filters, conflation};\n}\n\nfunction toConflation(legacy?: {\n 'max-datapoints-repo'?: number\n} & MetricsPublisherConfig['conflation']): IOGateway.BasicMetricsPublisherConfig['conflation'] | undefined {\n if (legacy) {\n return {interval: legacy.interval};\n }\n}\n\nfunction toMetricsConfig(legacy: GatewayConfig['metrics']): IOGateway.GatewayConfig['metrics'] {\n const metrics: IOGateway.GatewayConfig['metrics'] = {publishers: []};\n legacy?.publishers?.forEach((publisher) => {\n if (typeof publisher === 'string') {\n if (publisher === 'rest') {\n metrics.publishers.push('rest');\n if (legacy.rest) {\n const conf = {...legacy.rest};\n const userAgent = conf[\"user-agent\"];\n delete conf['user-agent'];\n const headers = {...conf.headers, ...(userAgent ? {'user-agent': userAgent} : {})};\n delete conf.headers;\n metrics.rest = {\n endpoint: conf.endpoint,\n headers: headers,\n ...toMetricsPublisherConfig(conf)\n };\n metrics.rest['publishFn'] ??= '@interopio/gateway-server/metrics-rest'\n }\n } else if (publisher === 'file') {\n metrics.publishers.push('file');\n if (legacy.file) {\n const conf = {...legacy.file};\n const status = conf['skip-status'] === undefined ? true : !conf['skip-status'];\n delete conf['skip-status'];\n metrics.file = {\n location: conf.location,\n status: status,\n ...toMetricsPublisherConfig(conf)\n };\n }\n } else {\n // unsupported predefined type\n }\n } else {\n const configuration = {...publisher.configuration};\n const splitSize = configuration[\"split-size\"];\n delete configuration[\"split-size\"];\n const file = publisher['file'] as string;\n const custom: IOGateway.CustomMetricsPublisherConfig = {\n split_size: splitSize,\n publisher: {file, configuration},\n ...toMetricsPublisherConfig(configuration)\n }\n metrics.publishers.push(custom);\n }\n });\n if (legacy?.filters) {\n metrics.filters = toMetricsFilters(legacy?.filters);\n }\n return metrics;\n}\ntype GatewayCluster = Required<GatewayConfig>['cluster'];\ntype P2P = Required<GatewayCluster>['p2p'];\n\nfunction toCluster(legacy?: P2P): IOGateway.MeshConfig['cluster'] | undefined {\n if (legacy?.directory) {\n const legacyDirectory = legacy.directory;\n const config: IOGateway.MeshConfig['cluster'] = {endpoint: legacy?.['endpoint']};\n if (legacyDirectory.type === 'rest') {\n let directory: IOGateway.RestMeshDirectoryConfig | undefined = undefined;\n if (config.endpoint === undefined) {\n config.endpoint = legacyDirectory.config!.directory_uri!;\n }\n else {\n directory = {uri: legacyDirectory.config!.directory_uri};\n }\n if (legacyDirectory.config?.announce_interval) {\n directory ??= {};\n directory.interval = Number(legacyDirectory.config.announce_interval);\n }\n if (directory !== undefined) {\n config.directory = directory;\n }\n return config;\n }\n else if (legacyDirectory.type === 'static') {\n config.directory = {members : legacyDirectory.members ?? []};\n return config;\n }\n }\n}\n\nfunction toMeshConfig(legacy: GatewayConfig['cluster']) {\n const mesh: IOGateway.MeshConfig = {};\n if (legacy?.configuration?.node_id) mesh.node = legacy.configuration.node_id;\n if (legacy?.type === 'broker') mesh.broker = {endpoint: legacy.broker!.endpoint!};\n if (legacy?.type === 'p2p') {\n const cluster = toCluster(legacy.p2p);\n if (cluster) {\n mesh.cluster = cluster;\n }\n }\n return mesh;\n}\n\nexport function toServerConfig(config: GatewayConfig): GatewayServer.ServerConfig {\n const gateway: GatewayServer.ServerConfig[\"gateway\"] = {\n route: config.route,\n limits: config.limits,\n origins: config.security?.origin_filters as GatewayServer.OriginFilters,\n clients: config['clients'] ?? {inactive_seconds: 0, buffer_size: 100},\n contexts: {\n lifetime: 'retained',\n visibility: [\n {context: /___channel___.+/, restrictions: 'cluster'},\n {context: /T42\\..+/, restrictions: 'local'}\n ]\n },\n methods: {\n visibility: [\n {method: /T42\\..+/, restrictions: 'local'}\n ]\n },\n peers: {\n visibility: [\n {domain: 'context', restrictions: 'cluster'},\n {domain: 'agm', restrictions: 'local'}\n ]\n },\n metrics: {publishers: []}\n };\n if (config.authentication?.token_ttl) gateway.token = {ttl: config.authentication?.token_ttl as number};\n if (config['contexts']) {\n gateway.contexts = config['contexts'];\n }\n if (config['methods']) {\n gateway.methods = config['methods'];\n }\n if (config['peers']) {\n gateway.peers = config['peers'];\n }\n if (config.cluster?.enabled) {\n gateway.mesh = toMeshConfig(config.cluster);\n\n }\n if (config.metrics?.publishers) gateway.metrics = toMetricsConfig(config.metrics);\n return {\n port: config.port ?? 3434,\n host: config.ip ?? config['host'],\n memory: config['memory'],\n gateway: gateway\n };\n}\n"],
|
|
5
|
-
"mappings": ";;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;ACEA,uBAAqB;AAErB,IAAM,iBAAN,MAAwC;AAAA,EAKpC,YAA6B,OAAmC;AAAnC;AAAA,EAC7B;AAAA,EALQ;AAAA,EACA;AAAA,EACA;AAAA,EAKA,SAAuC;AAC3C,QAAI,KAAK,YAAY,QAAW;AAC5B,UAAI,MAAyB;AAC7B,UAAI,QAAQ,KAAK,MAAM;AACvB,UAAI,KAAK,MAAM,KAAK,CAAC,aAAa,OAAO;AACrC,cAAM,KAAK,MAAM,KAAK,CAAC;AACvB,gBAAQ,MAAM,MAAM,CAAC;AAAA,MACzB;AACA,YAAM,UAAM,yBAAO,KAAK,MAAM,SAAS,GAAG,KAAK;AAC/C,WAAK,UAAU,EAAC,KAAK,IAAG;AAAA,IAC5B;AACA,WAAO,KAAK;AAAA,EAChB;AAAA,EAEA,IAAI,OAAa;AACb,WAAO,KAAK,MAAM;AAAA,EACtB;AAAA,EAEA,IAAI,QAAkB;AAClB,WAAO,KAAK,MAAM;AAAA,EACtB;AAAA,EAEA,IAAI,YAAY;AACZ,WAAO,KAAK,MAAM;AAAA,EACtB;AAAA,EAEA,IAAI,OAAe;AACf,WAAO;AAAA,EACX;AAAA,EAEA,IAAI,OAAe;AACf,WAAO;AAAA,EACX;AAAA,EAEA,IAAI,UAAkB;AAClB,WAAO,KAAK,OAAO,EAAE;AAAA,EACzB;AAAA,EAEA,IAAI,aAAgC;AAChC,WAAO,KAAK,OAAO,EAAE;AAAA,EACzB;AAAA,EAEA,IAAY,YAAoB;AAC5B,QAAI,KAAK,eAAe,QAAW;AAC/B,WAAK,aAAa,KAAK,KAAK,YAAY;AAAA,IAC5C;AACA,WAAO,KAAK;AAAA,EAChB;AAAA,EAEA,IAAI,SAAiB;AACjB,QAAI,KAAK,YAAY,QAAW;AAC5B,YAAM,MAAM,KAAK,OAAO,EAAE;AAC1B,YAAM,aAAa,MAAM;AAAA,EAAK,IAAI,SAAS,GAAG,KAAK;AACnD,WAAK,UAAU,GAAG,KAAK,SAAS,IAAI,KAAK,MAAM,YAAY,CAAC,KAAK,KAAK,SAAS,OAAO,KAAK,OAAO,GAAG,UAAU;AAAA,IACnH;AACA,WAAO,KAAK;AAAA,EAChB;AACJ;AAEO,SAAS,YAAY,QAAgG;AACxH,MAAI,QAA+C;AACnD,MAAI,QAAQ,OAAO;AACf,QAAI,OAAO,UAAU,SAAS;AAC1B,cAAQ;AAAA,IACZ,WAAW,OAAO,UAAU,UAAU;AAClC,cAAQ,OAAO;AAAA,IACnB;AAAA,EACJ;AACA,QAAM,SAAsC,EAAC,MAAK;AAClD,QAAM,aAAa,QAAQ;AAC3B,MAAI,YAAY;AACZ,WAAO,WAAW,CAAC,UAAsC;AACrD,iBAAW,IAAI,eAAe,KAAK,CAAC;AAAA,IACxC;AAAA,EACJ;AACA,SAAO;AACX;;;ACvFA,4BAA4B;AAErB,IAAM,iBAAN,MAAwC;AAAA,EAG3C,YAA6B,QAAoC;AAApC;AAAA,EAC7B;AAAA,EAHQ;AAAA,EAKR,MAAM,QAAQ,IAAkF;AAC5F,QAAI,CAAC,KAAK,QAAQ;AACd,YAAM,IAAI,MAAM,aAAa;AAAA,IACjC;AACA,UAAM,SAAS,MAAM,KAAK,OAAO,QAAQ,QAAQ,CAAC,GAAG,MAAM,GAAG,GAA+B,CAAmB,CAAC;AACjH,WAAO;AAAA,EACX;AAAA,EAEA,OAA6B;AACzB,WAAO,KAAK,QAAQ,QAAQ,KAAK;AAAA,EACrC;AAAA,EAEA,MAAM,QAA0B;AAC5B,QAAI,CAAC,KAAK,QAAQ;AACd,WAAK,SAAS,MAAM,oCAAc,QAAQ,KAAK,MAAM;AAAA,IACzD;AACA,WAAO;AAAA,EACX;AAAA,EAEA,MAAM,OAAyB;AAC3B,UAAM,KAAK,QAAQ,MAAM;AACzB,WAAO,KAAK;AACZ,WAAO;AAAA,EACX;AACJ;;;AC7BA,SAAS,iBAAiB,QAAiF;AACvG,MAAI,QAAQ;AACR,UAAM,aAAa,OAAO,WAAW,IAAI,eAAa;AAClD,aAAO,EAAC,UAAU,UAAU,WAAW,SAAS,UAAU,QAAO;AAAA,IACrE,CAAC;AACD,UAAM,cAAc,OAAO,aAAa;AACxC,WAAO,EAAC,YAAY,YAAW;AAAA,EACnC;AACJ;AAEA,SAAS,yBAAyB,QAEQ;AACtC,QAAM,UAAU,iBAAiB,QAAQ,OAAO;AAChD,QAAM,aAAa,aAAa,QAAQ,UAAU;AAClD,SAAO,EAAC,GAAG,QAAQ,SAAS,WAAU;AAC1C;AAEA,SAAS,aAAa,QAEqF;AACvG,MAAI,QAAQ;AACR,WAAO,EAAC,UAAU,OAAO,SAAQ;AAAA,EACrC;AACJ;AAEA,SAAS,gBAAgB,QAAsE;AAC3F,QAAM,UAA8C,EAAC,YAAY,CAAC,EAAC;AACnE,UAAQ,YAAY,QAAQ,CAAC,cAAc;AACvC,QAAI,OAAO,cAAc,UAAU;AAC/B,UAAI,cAAc,QAAQ;AACtB,gBAAQ,WAAW,KAAK,MAAM;AAC9B,YAAI,OAAO,MAAM;AACb,gBAAM,OAAO,EAAC,GAAG,OAAO,KAAI;AAC5B,gBAAM,YAAY,KAAK,YAAY;AACnC,iBAAO,KAAK,YAAY;AACxB,gBAAM,UAAU,EAAC,GAAG,KAAK,SAAS,GAAI,YAAY,EAAC,cAAc,UAAS,IAAI,CAAC,EAAE;AACjF,iBAAO,KAAK;AACZ,kBAAQ,OAAO;AAAA,YACX,UAAU,KAAK;AAAA,YACf;AAAA,YACA,GAAG,yBAAyB,IAAI;AAAA,UACpC;AACA,kBAAQ,KAAK,WAAW,MAAM;AAAA,QAClC;AAAA,MACJ,WAAW,cAAc,QAAQ;AAC7B,gBAAQ,WAAW,KAAK,MAAM;AAC9B,YAAI,OAAO,MAAM;AACb,gBAAM,OAAO,EAAC,GAAG,OAAO,KAAI;AAC5B,gBAAM,SAAS,KAAK,aAAa,MAAM,SAAY,OAAO,CAAC,KAAK,aAAa;AAC7E,iBAAO,KAAK,aAAa;AACzB,kBAAQ,OAAO;AAAA,YACX,UAAU,KAAK;AAAA,YACf;AAAA,YACA,GAAG,yBAAyB,IAAI;AAAA,UACpC;AAAA,
|
|
4
|
+
"sourcesContent": ["import {toLogConfig} from './logging.js';\nimport {ServerDelegate} from './server.js';\nimport {toServerConfig} from './config.js';\nimport {\n Gateway,\n GatewayConfig,\n LogInfo,\n LogLevel\n} from '../../../types/gateway-ent';\nimport {IOGateway} from '@interopio/gateway';\n\nexport function create(config: GatewayConfig): Gateway {\n return new ServerDelegate(toServerConfig(config));\n}\n\nexport function configure_logging(config?: { level: LogLevel, appender?: (info: LogInfo) => void }) {\n IOGateway.Logging.configure(toLogConfig(config));\n}\n", "import {LogInfo, LogLevel} from '@interopio/gateway-server/gateway-ent';\nimport {IOGateway} from '@interopio/gateway';\nimport {format} from 'node:util';\n\nclass LogInfoAdapter implements LogInfo {\n private _parsed?: { err?: Error, msg: string };\n private _timestamp?: string;\n private _output?: string;\n\n constructor(private readonly event: IOGateway.Logging.LogEvent) {\n }\n\n private parsed(): { err?: Error, msg: string } {\n if (this._parsed === undefined) {\n let err: Error | undefined = undefined;\n let vargs = this.event.data;\n if (this.event.data[0] instanceof Error) {\n err = this.event.data[0];\n vargs = vargs.slice(1);\n }\n const msg = format(this.event.message, ...vargs);\n this._parsed = {err, msg};\n }\n return this._parsed;\n }\n\n get time(): Date {\n return this.event.time;\n }\n\n get level(): LogLevel {\n return this.event.level;\n }\n\n get namespace() {\n return this.event.name;\n }\n\n get file(): string {\n return undefined as unknown as string;\n }\n\n get line(): number {\n return undefined as unknown as number;\n }\n\n get message(): string {\n return this.parsed().msg;\n }\n\n get stacktrace(): Error | undefined {\n return this.parsed().err;\n }\n\n private get timestamp(): string {\n if (this._timestamp === undefined) {\n this._timestamp = this.time.toISOString();\n }\n return this._timestamp;\n }\n\n get output(): string {\n if (this._output === undefined) {\n const err = this.parsed().err;\n const stacktrace = err ? `\\n${err.stack ?? err}` : '';\n this._output = `${this.timestamp} ${this.level.toUpperCase()} [${this.namespace}] - ${this.message}${stacktrace}`;\n }\n return this._output;\n }\n}\n\nexport function toLogConfig(config?: { level?: LogLevel; appender?: (info: LogInfo) => void }): IOGateway.Logging.LogConfig {\n let level: Exclude<LogLevel, 'report' | 'fatal'> = 'info';\n if (config?.level) {\n if (config.level === 'fatal') {\n level = 'error';\n } else if (config.level !== 'report') {\n level = config.level;\n }\n }\n const result: IOGateway.Logging.LogConfig = {level};\n const appenderFn = config?.appender;\n if (appenderFn) {\n result.appender = (event: IOGateway.Logging.LogEvent) => {\n appenderFn(new LogInfoAdapter(event));\n };\n }\n return result;\n}\n", "import {Gateway, GatewayClient, GatewayMessage} from '@interopio/gateway-server/gateway-ent';\nimport {GatewayServer} from '@interopio/gateway-server';\n\nexport class ServerDelegate implements Gateway {\n private server?: GatewayServer.Server;\n\n constructor(private readonly config: GatewayServer.ServerConfig) {\n }\n\n async connect(cb: (client: GatewayClient, msg: GatewayMessage) => void): Promise<GatewayClient> {\n if (!this.server) {\n throw new Error(`not started`);\n }\n const client = await this.server.gateway.connect((c, m) => cb(c as unknown as GatewayClient, m as GatewayMessage));\n return client as unknown as GatewayClient;\n }\n\n info(): { endpoint: string } {\n return this.server?.gateway.info() as { endpoint: string };\n }\n\n async start(): Promise<Gateway> {\n if (!this.server) {\n this.server = await GatewayServer.Factory(this.config);\n }\n return this;\n }\n\n async stop(): Promise<Gateway> {\n await this.server?.close();\n delete this.server;\n return this;\n }\n}\n", "import {GatewayServer} from '../../../gateway-server';\nimport {IOGateway} from '@interopio/gateway';\nimport { GatewayConfig, MetricsPublisherConfig } from '../../../types/gateway-ent';\n\nfunction toMetricsFilters(legacy?: MetricsPublisherConfig['filters']): IOGateway.MetricFilters | undefined {\n if (legacy) {\n const publishers = legacy.publishers.map(publisher => {\n return {identity: publisher.publisher, metrics: publisher.metrics};\n });\n const non_matched = legacy['non-matched'];\n return {publishers, non_matched};\n }\n}\n\nfunction toMetricsPublisherConfig(legacy: MetricsPublisherConfig & {\n conflation?: { 'max-datapoints-repo'?: number } & MetricsPublisherConfig['conflation']\n}): IOGateway.BasicMetricsPublisherConfig {\n const filters = toMetricsFilters(legacy?.filters);\n const conflation = toConflation(legacy?.conflation);\n return {...legacy, filters, conflation};\n}\n\nfunction toConflation(legacy?: {\n 'max-datapoints-repo'?: number\n} & MetricsPublisherConfig['conflation']): IOGateway.BasicMetricsPublisherConfig['conflation'] | undefined {\n if (legacy) {\n return {interval: legacy.interval};\n }\n}\n\nfunction toMetricsConfig(legacy: GatewayConfig['metrics']): IOGateway.GatewayConfig['metrics'] {\n const metrics: IOGateway.GatewayConfig['metrics'] = {publishers: []};\n legacy?.publishers?.forEach((publisher) => {\n if (typeof publisher === 'string') {\n if (publisher === 'rest') {\n metrics.publishers.push('rest');\n if (legacy.rest) {\n const conf = {...legacy.rest};\n const userAgent = conf[\"user-agent\"];\n delete conf['user-agent'];\n const headers = {...conf.headers, ...(userAgent ? {'user-agent': userAgent} : {})};\n delete conf.headers;\n metrics.rest = {\n endpoint: conf.endpoint,\n headers: headers,\n ...toMetricsPublisherConfig(conf)\n };\n metrics.rest['publishFn'] ??= '@interopio/gateway-server/metrics/publisher/rest';\n }\n } else if (publisher === 'file') {\n metrics.publishers.push('file');\n if (legacy.file) {\n const conf = {...legacy.file};\n const status = conf['skip-status'] === undefined ? true : !conf['skip-status'];\n delete conf['skip-status'];\n metrics.file = {\n location: conf.location,\n status: status,\n ...toMetricsPublisherConfig(conf)\n };\n metrics.file['publishFn'] ??= '@interopio/gateway/metrics/publisher/file';\n }\n } else {\n // unsupported predefined type\n }\n } else {\n const configuration = {...publisher.configuration};\n const splitSize = configuration[\"split-size\"];\n delete configuration[\"split-size\"];\n const file = publisher['file'] as string;\n const custom: IOGateway.CustomMetricsPublisherConfig = {\n split_size: splitSize,\n publisher: {file, configuration},\n ...toMetricsPublisherConfig(configuration)\n }\n metrics.publishers.push(custom);\n }\n });\n if (legacy?.filters) {\n metrics.filters = toMetricsFilters(legacy?.filters);\n }\n return metrics;\n}\ntype GatewayCluster = Required<GatewayConfig>['cluster'];\ntype P2P = Required<GatewayCluster>['p2p'];\n\nfunction toCluster(legacy?: P2P): IOGateway.MeshConfig['cluster'] | undefined {\n if (legacy?.directory) {\n const legacyDirectory = legacy.directory;\n const config: IOGateway.MeshConfig['cluster'] = {endpoint: legacy?.['endpoint']};\n if (legacyDirectory.type === 'rest') {\n let directory: IOGateway.RestMeshDirectoryConfig | undefined = undefined;\n if (config.endpoint === undefined) {\n config.endpoint = legacyDirectory.config!.directory_uri!;\n }\n else {\n directory = {uri: legacyDirectory.config!.directory_uri};\n }\n if (legacyDirectory.config?.announce_interval) {\n directory ??= {};\n directory.interval = Number(legacyDirectory.config.announce_interval);\n }\n if (directory !== undefined) {\n config.directory = directory;\n }\n return config;\n }\n else if (legacyDirectory.type === 'static') {\n config.directory = {members : legacyDirectory.members ?? []};\n return config;\n }\n }\n}\n\nfunction toMeshConfig(legacy: GatewayConfig['cluster']) {\n const mesh: IOGateway.MeshConfig = {};\n if (legacy?.configuration?.node_id) mesh.node = legacy.configuration.node_id;\n if (legacy?.type === 'broker') mesh.broker = {endpoint: legacy.broker!.endpoint!};\n if (legacy?.type === 'p2p') {\n const cluster = toCluster(legacy.p2p);\n if (cluster) {\n mesh.cluster = cluster;\n }\n }\n return mesh;\n}\n\nfunction toAuthenticationConfig(legacy: GatewayConfig['authentication']): IOGateway.AuthenticationConfig {\n const authentication: IOGateway.AuthenticationConfig & {available: string[]} = {available: []};\n if (legacy?.default) {\n authentication.default = legacy.default as string;\n }\n\n const as = legacy?.available as string[];\n as.forEach((a) => {\n if (a === 'basic' || a === 'oauth2' || legacy?.[a]?.['authenticator'] !== undefined) {\n authentication.available.push(a);\n if (legacy?.[a] !== undefined) {\n authentication[a] = legacy[a];\n }\n }\n });\n\n return authentication;\n}\nexport function toServerConfig(config: GatewayConfig): GatewayServer.ServerConfig {\n const gateway: GatewayServer.ServerConfig[\"gateway\"] = {\n route: config.route,\n limits: config.limits,\n origins: config.security?.origin_filters as GatewayServer.OriginFilters,\n clients: config['clients'] ?? {inactive_seconds: 0, buffer_size: 100},\n contexts: {\n lifetime: 'retained',\n visibility: [\n {context: /___channel___.+/, restrictions: 'cluster'},\n {context: /T42\\..+/, restrictions: 'local'}\n ]\n },\n methods: {\n visibility: [\n {method: /T42\\..+/, restrictions: 'local'}\n ]\n },\n peers: {\n visibility: [\n {domain: 'context', restrictions: 'cluster'},\n {domain: 'agm', restrictions: 'local'}\n ]\n },\n metrics: {publishers: []}\n };\n if (config.authentication !== undefined) {\n if (config.authentication.token_ttl) gateway.token = {ttl: config.authentication?.token_ttl as number};\n if (config.authentication.available || config.authentication.default) gateway.authentication = toAuthenticationConfig(config.authentication);\n }\n if (config['globals']) {\n gateway.globals = config['globals'];\n }\n if (config['contexts']) {\n gateway.contexts = config['contexts'];\n }\n if (config['methods']) {\n gateway.methods = config['methods'];\n }\n if (config['peers']) {\n gateway.peers = config['peers'];\n }\n if (config.cluster?.enabled) {\n gateway.mesh = toMeshConfig(config.cluster);\n\n }\n if (config.metrics?.publishers) gateway.metrics = toMetricsConfig(config.metrics);\n return {\n port: config.port ?? 3434,\n host: config.ip ?? config['host'] as string,\n memory: config['memory'],\n gateway: gateway\n };\n}\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
6
|
"names": []
|
|
7
7
|
}
|
package/dist/gateway-ent.js
CHANGED
|
@@ -143,7 +143,7 @@ function toMetricsConfig(legacy) {
|
|
|
143
143
|
headers,
|
|
144
144
|
...toMetricsPublisherConfig(conf)
|
|
145
145
|
};
|
|
146
|
-
metrics.rest["publishFn"] ??= "@interopio/gateway-server/metrics
|
|
146
|
+
metrics.rest["publishFn"] ??= "@interopio/gateway-server/metrics/publisher/rest";
|
|
147
147
|
}
|
|
148
148
|
} else if (publisher === "file") {
|
|
149
149
|
metrics.publishers.push("file");
|
|
@@ -156,6 +156,7 @@ function toMetricsConfig(legacy) {
|
|
|
156
156
|
status,
|
|
157
157
|
...toMetricsPublisherConfig(conf)
|
|
158
158
|
};
|
|
159
|
+
metrics.file["publishFn"] ??= "@interopio/gateway/metrics/publisher/file";
|
|
159
160
|
}
|
|
160
161
|
} else {
|
|
161
162
|
}
|
|
@@ -214,6 +215,22 @@ function toMeshConfig(legacy) {
|
|
|
214
215
|
}
|
|
215
216
|
return mesh;
|
|
216
217
|
}
|
|
218
|
+
function toAuthenticationConfig(legacy) {
|
|
219
|
+
const authentication = { available: [] };
|
|
220
|
+
if (legacy?.default) {
|
|
221
|
+
authentication.default = legacy.default;
|
|
222
|
+
}
|
|
223
|
+
const as = legacy?.available;
|
|
224
|
+
as.forEach((a) => {
|
|
225
|
+
if (a === "basic" || a === "oauth2" || legacy?.[a]?.["authenticator"] !== void 0) {
|
|
226
|
+
authentication.available.push(a);
|
|
227
|
+
if (legacy?.[a] !== void 0) {
|
|
228
|
+
authentication[a] = legacy[a];
|
|
229
|
+
}
|
|
230
|
+
}
|
|
231
|
+
});
|
|
232
|
+
return authentication;
|
|
233
|
+
}
|
|
217
234
|
function toServerConfig(config) {
|
|
218
235
|
const gateway = {
|
|
219
236
|
route: config.route,
|
|
@@ -240,7 +257,13 @@ function toServerConfig(config) {
|
|
|
240
257
|
},
|
|
241
258
|
metrics: { publishers: [] }
|
|
242
259
|
};
|
|
243
|
-
if (config.authentication
|
|
260
|
+
if (config.authentication !== void 0) {
|
|
261
|
+
if (config.authentication.token_ttl) gateway.token = { ttl: config.authentication?.token_ttl };
|
|
262
|
+
if (config.authentication.available || config.authentication.default) gateway.authentication = toAuthenticationConfig(config.authentication);
|
|
263
|
+
}
|
|
264
|
+
if (config["globals"]) {
|
|
265
|
+
gateway.globals = config["globals"];
|
|
266
|
+
}
|
|
244
267
|
if (config["contexts"]) {
|
|
245
268
|
gateway.contexts = config["contexts"];
|
|
246
269
|
}
|
package/dist/gateway-ent.js.map
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../src/gateway/ent/logging.ts", "../src/gateway/ent/server.ts", "../src/gateway/ent/config.ts", "../src/gateway/ent/index.ts"],
|
|
4
|
-
"sourcesContent": ["import {LogInfo, LogLevel} from '@interopio/gateway-server/gateway-ent';\nimport {IOGateway} from '@interopio/gateway';\nimport {format} from 'node:util';\n\nclass LogInfoAdapter implements LogInfo {\n private _parsed?: { err?: Error, msg: string };\n private _timestamp?: string;\n private _output?: string;\n\n constructor(private readonly event: IOGateway.Logging.LogEvent) {\n }\n\n private parsed(): { err?: Error, msg: string } {\n if (this._parsed === undefined) {\n let err: Error | undefined = undefined;\n let vargs = this.event.data;\n if (this.event.data[0] instanceof Error) {\n err = this.event.data[0];\n vargs = vargs.slice(1);\n }\n const msg = format(this.event.message, ...vargs);\n this._parsed = {err, msg};\n }\n return this._parsed;\n }\n\n get time(): Date {\n return this.event.time;\n }\n\n get level(): LogLevel {\n return this.event.level;\n }\n\n get namespace() {\n return this.event.name;\n }\n\n get file(): string {\n return undefined as unknown as string;\n }\n\n get line(): number {\n return undefined as unknown as number;\n }\n\n get message(): string {\n return this.parsed().msg;\n }\n\n get stacktrace(): Error | undefined {\n return this.parsed().err;\n }\n\n private get timestamp(): string {\n if (this._timestamp === undefined) {\n this._timestamp = this.time.toISOString();\n }\n return this._timestamp;\n }\n\n get output(): string {\n if (this._output === undefined) {\n const err = this.parsed().err;\n const stacktrace = err ? `\\n${err.stack ?? err}` : '';\n this._output = `${this.timestamp} ${this.level.toUpperCase()} [${this.namespace}] - ${this.message}${stacktrace}`;\n }\n return this._output;\n }\n}\n\nexport function toLogConfig(config?: { level?: LogLevel; appender?: (info: LogInfo) => void }): IOGateway.Logging.LogConfig {\n let level: Exclude<LogLevel, 'report' | 'fatal'> = 'info';\n if (config?.level) {\n if (config.level === 'fatal') {\n level = 'error';\n } else if (config.level !== 'report') {\n level = config.level;\n }\n }\n const result: IOGateway.Logging.LogConfig = {level};\n const appenderFn = config?.appender;\n if (appenderFn) {\n result.appender = (event: IOGateway.Logging.LogEvent) => {\n appenderFn(new LogInfoAdapter(event));\n };\n }\n return result;\n}\n", "import {Gateway, GatewayClient, GatewayMessage} from '@interopio/gateway-server/gateway-ent';\nimport {GatewayServer} from '@interopio/gateway-server';\n\nexport class ServerDelegate implements Gateway {\n private server?: GatewayServer.Server;\n\n constructor(private readonly config: GatewayServer.ServerConfig) {\n }\n\n async connect(cb: (client: GatewayClient, msg: GatewayMessage) => void): Promise<GatewayClient> {\n if (!this.server) {\n throw new Error(`not started`);\n }\n const client = await this.server.gateway.connect((c, m) => cb(c as unknown as GatewayClient, m as GatewayMessage));\n return client as unknown as GatewayClient;\n }\n\n info(): { endpoint: string } {\n return this.server?.gateway.info() as { endpoint: string };\n }\n\n async start(): Promise<Gateway> {\n if (!this.server) {\n this.server = await GatewayServer.Factory(this.config);\n }\n return this;\n }\n\n async stop(): Promise<Gateway> {\n await this.server?.close();\n delete this.server;\n return this;\n }\n}\n", "import {GatewayServer} from '../../../gateway-server';\nimport {IOGateway} from '@interopio/gateway';\nimport { GatewayConfig, MetricsPublisherConfig } from '../../../types/gateway-ent';\n\nfunction toMetricsFilters(legacy?: MetricsPublisherConfig['filters']): IOGateway.MetricFilters | undefined {\n if (legacy) {\n const publishers = legacy.publishers.map(publisher => {\n return {identity: publisher.publisher, metrics: publisher.metrics};\n });\n const non_matched = legacy['non-matched'];\n return {publishers, non_matched};\n }\n}\n\nfunction toMetricsPublisherConfig(legacy: MetricsPublisherConfig & {\n conflation?: { 'max-datapoints-repo'?: number } & MetricsPublisherConfig['conflation']\n}): IOGateway.BasicMetricsPublisherConfig {\n const filters = toMetricsFilters(legacy?.filters);\n const conflation = toConflation(legacy?.conflation);\n return {...legacy, filters, conflation};\n}\n\nfunction toConflation(legacy?: {\n 'max-datapoints-repo'?: number\n} & MetricsPublisherConfig['conflation']): IOGateway.BasicMetricsPublisherConfig['conflation'] | undefined {\n if (legacy) {\n return {interval: legacy.interval};\n }\n}\n\nfunction toMetricsConfig(legacy: GatewayConfig['metrics']): IOGateway.GatewayConfig['metrics'] {\n const metrics: IOGateway.GatewayConfig['metrics'] = {publishers: []};\n legacy?.publishers?.forEach((publisher) => {\n if (typeof publisher === 'string') {\n if (publisher === 'rest') {\n metrics.publishers.push('rest');\n if (legacy.rest) {\n const conf = {...legacy.rest};\n const userAgent = conf[\"user-agent\"];\n delete conf['user-agent'];\n const headers = {...conf.headers, ...(userAgent ? {'user-agent': userAgent} : {})};\n delete conf.headers;\n metrics.rest = {\n endpoint: conf.endpoint,\n headers: headers,\n ...toMetricsPublisherConfig(conf)\n };\n metrics.rest['publishFn'] ??= '@interopio/gateway-server/metrics-rest'\n }\n } else if (publisher === 'file') {\n metrics.publishers.push('file');\n if (legacy.file) {\n const conf = {...legacy.file};\n const status = conf['skip-status'] === undefined ? true : !conf['skip-status'];\n delete conf['skip-status'];\n metrics.file = {\n location: conf.location,\n status: status,\n ...toMetricsPublisherConfig(conf)\n };\n }\n } else {\n // unsupported predefined type\n }\n } else {\n const configuration = {...publisher.configuration};\n const splitSize = configuration[\"split-size\"];\n delete configuration[\"split-size\"];\n const file = publisher['file'] as string;\n const custom: IOGateway.CustomMetricsPublisherConfig = {\n split_size: splitSize,\n publisher: {file, configuration},\n ...toMetricsPublisherConfig(configuration)\n }\n metrics.publishers.push(custom);\n }\n });\n if (legacy?.filters) {\n metrics.filters = toMetricsFilters(legacy?.filters);\n }\n return metrics;\n}\ntype GatewayCluster = Required<GatewayConfig>['cluster'];\ntype P2P = Required<GatewayCluster>['p2p'];\n\nfunction toCluster(legacy?: P2P): IOGateway.MeshConfig['cluster'] | undefined {\n if (legacy?.directory) {\n const legacyDirectory = legacy.directory;\n const config: IOGateway.MeshConfig['cluster'] = {endpoint: legacy?.['endpoint']};\n if (legacyDirectory.type === 'rest') {\n let directory: IOGateway.RestMeshDirectoryConfig | undefined = undefined;\n if (config.endpoint === undefined) {\n config.endpoint = legacyDirectory.config!.directory_uri!;\n }\n else {\n directory = {uri: legacyDirectory.config!.directory_uri};\n }\n if (legacyDirectory.config?.announce_interval) {\n directory ??= {};\n directory.interval = Number(legacyDirectory.config.announce_interval);\n }\n if (directory !== undefined) {\n config.directory = directory;\n }\n return config;\n }\n else if (legacyDirectory.type === 'static') {\n config.directory = {members : legacyDirectory.members ?? []};\n return config;\n }\n }\n}\n\nfunction toMeshConfig(legacy: GatewayConfig['cluster']) {\n const mesh: IOGateway.MeshConfig = {};\n if (legacy?.configuration?.node_id) mesh.node = legacy.configuration.node_id;\n if (legacy?.type === 'broker') mesh.broker = {endpoint: legacy.broker!.endpoint!};\n if (legacy?.type === 'p2p') {\n const cluster = toCluster(legacy.p2p);\n if (cluster) {\n mesh.cluster = cluster;\n }\n }\n return mesh;\n}\n\nexport function toServerConfig(config: GatewayConfig): GatewayServer.ServerConfig {\n const gateway: GatewayServer.ServerConfig[\"gateway\"] = {\n route: config.route,\n limits: config.limits,\n origins: config.security?.origin_filters as GatewayServer.OriginFilters,\n clients: config['clients'] ?? {inactive_seconds: 0, buffer_size: 100},\n contexts: {\n lifetime: 'retained',\n visibility: [\n {context: /___channel___.+/, restrictions: 'cluster'},\n {context: /T42\\..+/, restrictions: 'local'}\n ]\n },\n methods: {\n visibility: [\n {method: /T42\\..+/, restrictions: 'local'}\n ]\n },\n peers: {\n visibility: [\n {domain: 'context', restrictions: 'cluster'},\n {domain: 'agm', restrictions: 'local'}\n ]\n },\n metrics: {publishers: []}\n };\n if (config.authentication?.token_ttl) gateway.token = {ttl: config.authentication?.token_ttl as number};\n if (config['contexts']) {\n gateway.contexts = config['contexts'];\n }\n if (config['methods']) {\n gateway.methods = config['methods'];\n }\n if (config['peers']) {\n gateway.peers = config['peers'];\n }\n if (config.cluster?.enabled) {\n gateway.mesh = toMeshConfig(config.cluster);\n\n }\n if (config.metrics?.publishers) gateway.metrics = toMetricsConfig(config.metrics);\n return {\n port: config.port ?? 3434,\n host: config.ip ?? config['host'],\n memory: config['memory'],\n gateway: gateway\n };\n}\n", "import {toLogConfig} from './logging.js';\nimport {ServerDelegate} from './server.js';\nimport {toServerConfig} from './config.js';\nimport {\n Gateway,\n GatewayConfig,\n LogInfo,\n LogLevel\n} from '../../../types/gateway-ent';\nimport {IOGateway} from '@interopio/gateway';\n\nexport function create(config: GatewayConfig): Gateway {\n return new ServerDelegate(toServerConfig(config));\n}\n\nexport function configure_logging(config?: { level: LogLevel, appender?: (info: LogInfo) => void }) {\n IOGateway.Logging.configure(toLogConfig(config));\n}\n"],
|
|
5
|
-
"mappings": "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
|
|
4
|
+
"sourcesContent": ["import {LogInfo, LogLevel} from '@interopio/gateway-server/gateway-ent';\nimport {IOGateway} from '@interopio/gateway';\nimport {format} from 'node:util';\n\nclass LogInfoAdapter implements LogInfo {\n private _parsed?: { err?: Error, msg: string };\n private _timestamp?: string;\n private _output?: string;\n\n constructor(private readonly event: IOGateway.Logging.LogEvent) {\n }\n\n private parsed(): { err?: Error, msg: string } {\n if (this._parsed === undefined) {\n let err: Error | undefined = undefined;\n let vargs = this.event.data;\n if (this.event.data[0] instanceof Error) {\n err = this.event.data[0];\n vargs = vargs.slice(1);\n }\n const msg = format(this.event.message, ...vargs);\n this._parsed = {err, msg};\n }\n return this._parsed;\n }\n\n get time(): Date {\n return this.event.time;\n }\n\n get level(): LogLevel {\n return this.event.level;\n }\n\n get namespace() {\n return this.event.name;\n }\n\n get file(): string {\n return undefined as unknown as string;\n }\n\n get line(): number {\n return undefined as unknown as number;\n }\n\n get message(): string {\n return this.parsed().msg;\n }\n\n get stacktrace(): Error | undefined {\n return this.parsed().err;\n }\n\n private get timestamp(): string {\n if (this._timestamp === undefined) {\n this._timestamp = this.time.toISOString();\n }\n return this._timestamp;\n }\n\n get output(): string {\n if (this._output === undefined) {\n const err = this.parsed().err;\n const stacktrace = err ? `\\n${err.stack ?? err}` : '';\n this._output = `${this.timestamp} ${this.level.toUpperCase()} [${this.namespace}] - ${this.message}${stacktrace}`;\n }\n return this._output;\n }\n}\n\nexport function toLogConfig(config?: { level?: LogLevel; appender?: (info: LogInfo) => void }): IOGateway.Logging.LogConfig {\n let level: Exclude<LogLevel, 'report' | 'fatal'> = 'info';\n if (config?.level) {\n if (config.level === 'fatal') {\n level = 'error';\n } else if (config.level !== 'report') {\n level = config.level;\n }\n }\n const result: IOGateway.Logging.LogConfig = {level};\n const appenderFn = config?.appender;\n if (appenderFn) {\n result.appender = (event: IOGateway.Logging.LogEvent) => {\n appenderFn(new LogInfoAdapter(event));\n };\n }\n return result;\n}\n", "import {Gateway, GatewayClient, GatewayMessage} from '@interopio/gateway-server/gateway-ent';\nimport {GatewayServer} from '@interopio/gateway-server';\n\nexport class ServerDelegate implements Gateway {\n private server?: GatewayServer.Server;\n\n constructor(private readonly config: GatewayServer.ServerConfig) {\n }\n\n async connect(cb: (client: GatewayClient, msg: GatewayMessage) => void): Promise<GatewayClient> {\n if (!this.server) {\n throw new Error(`not started`);\n }\n const client = await this.server.gateway.connect((c, m) => cb(c as unknown as GatewayClient, m as GatewayMessage));\n return client as unknown as GatewayClient;\n }\n\n info(): { endpoint: string } {\n return this.server?.gateway.info() as { endpoint: string };\n }\n\n async start(): Promise<Gateway> {\n if (!this.server) {\n this.server = await GatewayServer.Factory(this.config);\n }\n return this;\n }\n\n async stop(): Promise<Gateway> {\n await this.server?.close();\n delete this.server;\n return this;\n }\n}\n", "import {GatewayServer} from '../../../gateway-server';\nimport {IOGateway} from '@interopio/gateway';\nimport { GatewayConfig, MetricsPublisherConfig } from '../../../types/gateway-ent';\n\nfunction toMetricsFilters(legacy?: MetricsPublisherConfig['filters']): IOGateway.MetricFilters | undefined {\n if (legacy) {\n const publishers = legacy.publishers.map(publisher => {\n return {identity: publisher.publisher, metrics: publisher.metrics};\n });\n const non_matched = legacy['non-matched'];\n return {publishers, non_matched};\n }\n}\n\nfunction toMetricsPublisherConfig(legacy: MetricsPublisherConfig & {\n conflation?: { 'max-datapoints-repo'?: number } & MetricsPublisherConfig['conflation']\n}): IOGateway.BasicMetricsPublisherConfig {\n const filters = toMetricsFilters(legacy?.filters);\n const conflation = toConflation(legacy?.conflation);\n return {...legacy, filters, conflation};\n}\n\nfunction toConflation(legacy?: {\n 'max-datapoints-repo'?: number\n} & MetricsPublisherConfig['conflation']): IOGateway.BasicMetricsPublisherConfig['conflation'] | undefined {\n if (legacy) {\n return {interval: legacy.interval};\n }\n}\n\nfunction toMetricsConfig(legacy: GatewayConfig['metrics']): IOGateway.GatewayConfig['metrics'] {\n const metrics: IOGateway.GatewayConfig['metrics'] = {publishers: []};\n legacy?.publishers?.forEach((publisher) => {\n if (typeof publisher === 'string') {\n if (publisher === 'rest') {\n metrics.publishers.push('rest');\n if (legacy.rest) {\n const conf = {...legacy.rest};\n const userAgent = conf[\"user-agent\"];\n delete conf['user-agent'];\n const headers = {...conf.headers, ...(userAgent ? {'user-agent': userAgent} : {})};\n delete conf.headers;\n metrics.rest = {\n endpoint: conf.endpoint,\n headers: headers,\n ...toMetricsPublisherConfig(conf)\n };\n metrics.rest['publishFn'] ??= '@interopio/gateway-server/metrics/publisher/rest';\n }\n } else if (publisher === 'file') {\n metrics.publishers.push('file');\n if (legacy.file) {\n const conf = {...legacy.file};\n const status = conf['skip-status'] === undefined ? true : !conf['skip-status'];\n delete conf['skip-status'];\n metrics.file = {\n location: conf.location,\n status: status,\n ...toMetricsPublisherConfig(conf)\n };\n metrics.file['publishFn'] ??= '@interopio/gateway/metrics/publisher/file';\n }\n } else {\n // unsupported predefined type\n }\n } else {\n const configuration = {...publisher.configuration};\n const splitSize = configuration[\"split-size\"];\n delete configuration[\"split-size\"];\n const file = publisher['file'] as string;\n const custom: IOGateway.CustomMetricsPublisherConfig = {\n split_size: splitSize,\n publisher: {file, configuration},\n ...toMetricsPublisherConfig(configuration)\n }\n metrics.publishers.push(custom);\n }\n });\n if (legacy?.filters) {\n metrics.filters = toMetricsFilters(legacy?.filters);\n }\n return metrics;\n}\ntype GatewayCluster = Required<GatewayConfig>['cluster'];\ntype P2P = Required<GatewayCluster>['p2p'];\n\nfunction toCluster(legacy?: P2P): IOGateway.MeshConfig['cluster'] | undefined {\n if (legacy?.directory) {\n const legacyDirectory = legacy.directory;\n const config: IOGateway.MeshConfig['cluster'] = {endpoint: legacy?.['endpoint']};\n if (legacyDirectory.type === 'rest') {\n let directory: IOGateway.RestMeshDirectoryConfig | undefined = undefined;\n if (config.endpoint === undefined) {\n config.endpoint = legacyDirectory.config!.directory_uri!;\n }\n else {\n directory = {uri: legacyDirectory.config!.directory_uri};\n }\n if (legacyDirectory.config?.announce_interval) {\n directory ??= {};\n directory.interval = Number(legacyDirectory.config.announce_interval);\n }\n if (directory !== undefined) {\n config.directory = directory;\n }\n return config;\n }\n else if (legacyDirectory.type === 'static') {\n config.directory = {members : legacyDirectory.members ?? []};\n return config;\n }\n }\n}\n\nfunction toMeshConfig(legacy: GatewayConfig['cluster']) {\n const mesh: IOGateway.MeshConfig = {};\n if (legacy?.configuration?.node_id) mesh.node = legacy.configuration.node_id;\n if (legacy?.type === 'broker') mesh.broker = {endpoint: legacy.broker!.endpoint!};\n if (legacy?.type === 'p2p') {\n const cluster = toCluster(legacy.p2p);\n if (cluster) {\n mesh.cluster = cluster;\n }\n }\n return mesh;\n}\n\nfunction toAuthenticationConfig(legacy: GatewayConfig['authentication']): IOGateway.AuthenticationConfig {\n const authentication: IOGateway.AuthenticationConfig & {available: string[]} = {available: []};\n if (legacy?.default) {\n authentication.default = legacy.default as string;\n }\n\n const as = legacy?.available as string[];\n as.forEach((a) => {\n if (a === 'basic' || a === 'oauth2' || legacy?.[a]?.['authenticator'] !== undefined) {\n authentication.available.push(a);\n if (legacy?.[a] !== undefined) {\n authentication[a] = legacy[a];\n }\n }\n });\n\n return authentication;\n}\nexport function toServerConfig(config: GatewayConfig): GatewayServer.ServerConfig {\n const gateway: GatewayServer.ServerConfig[\"gateway\"] = {\n route: config.route,\n limits: config.limits,\n origins: config.security?.origin_filters as GatewayServer.OriginFilters,\n clients: config['clients'] ?? {inactive_seconds: 0, buffer_size: 100},\n contexts: {\n lifetime: 'retained',\n visibility: [\n {context: /___channel___.+/, restrictions: 'cluster'},\n {context: /T42\\..+/, restrictions: 'local'}\n ]\n },\n methods: {\n visibility: [\n {method: /T42\\..+/, restrictions: 'local'}\n ]\n },\n peers: {\n visibility: [\n {domain: 'context', restrictions: 'cluster'},\n {domain: 'agm', restrictions: 'local'}\n ]\n },\n metrics: {publishers: []}\n };\n if (config.authentication !== undefined) {\n if (config.authentication.token_ttl) gateway.token = {ttl: config.authentication?.token_ttl as number};\n if (config.authentication.available || config.authentication.default) gateway.authentication = toAuthenticationConfig(config.authentication);\n }\n if (config['globals']) {\n gateway.globals = config['globals'];\n }\n if (config['contexts']) {\n gateway.contexts = config['contexts'];\n }\n if (config['methods']) {\n gateway.methods = config['methods'];\n }\n if (config['peers']) {\n gateway.peers = config['peers'];\n }\n if (config.cluster?.enabled) {\n gateway.mesh = toMeshConfig(config.cluster);\n\n }\n if (config.metrics?.publishers) gateway.metrics = toMetricsConfig(config.metrics);\n return {\n port: config.port ?? 3434,\n host: config.ip ?? config['host'] as string,\n memory: config['memory'],\n gateway: gateway\n };\n}\n", "import {toLogConfig} from './logging.js';\nimport {ServerDelegate} from './server.js';\nimport {toServerConfig} from './config.js';\nimport {\n Gateway,\n GatewayConfig,\n LogInfo,\n LogLevel\n} from '../../../types/gateway-ent';\nimport {IOGateway} from '@interopio/gateway';\n\nexport function create(config: GatewayConfig): Gateway {\n return new ServerDelegate(toServerConfig(config));\n}\n\nexport function configure_logging(config?: { level: LogLevel, appender?: (info: LogInfo) => void }) {\n IOGateway.Logging.configure(toLogConfig(config));\n}\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
6
|
"names": []
|
|
7
7
|
}
|