@interopio/gateway-server 0.13.0-beta.2 → 0.14.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 +8 -1
- package/dist/gateway-ent.cjs +16 -5
- package/dist/gateway-ent.cjs.map +2 -2
- package/dist/gateway-ent.js +16 -5
- package/dist/gateway-ent.js.map +2 -2
- package/package.json +2 -2
package/changelog.md
CHANGED
|
@@ -2,7 +2,14 @@
|
|
|
2
2
|
|
|
3
3
|
# Change Log
|
|
4
4
|
|
|
5
|
-
## 0.
|
|
5
|
+
## 0.14.0 (2025-11-03)
|
|
6
|
+
### Changed
|
|
7
|
+
- bump @interopio/gateway to 0.17.0
|
|
8
|
+
- bump @glue42/gateway-ent types to 3.3.0
|
|
9
|
+
### Fixed
|
|
10
|
+
- fix: disable cors by default in (gateway-ent) compat mode
|
|
11
|
+
|
|
12
|
+
## 0.13.0-beta.2 (2025-10-30)
|
|
6
13
|
### Changed
|
|
7
14
|
- bump @interopio/gateway to 0.16.2-beta.0
|
|
8
15
|
|
package/dist/gateway-ent.cjs
CHANGED
|
@@ -393,8 +393,12 @@ function toCluster(legacy) {
|
|
|
393
393
|
}
|
|
394
394
|
function toMeshConfig(legacy) {
|
|
395
395
|
const mesh = {};
|
|
396
|
-
if (legacy?.configuration?.node_id)
|
|
397
|
-
|
|
396
|
+
if (legacy?.configuration?.node_id) {
|
|
397
|
+
mesh.node = legacy.configuration.node_id;
|
|
398
|
+
}
|
|
399
|
+
if (legacy?.type === "broker") {
|
|
400
|
+
mesh.broker = { endpoint: legacy.broker?.endpoint ?? "<unresolved>" };
|
|
401
|
+
}
|
|
398
402
|
if (legacy?.type === "p2p") {
|
|
399
403
|
const cluster = toCluster(legacy.p2p);
|
|
400
404
|
if (cluster) {
|
|
@@ -447,8 +451,12 @@ function toServerConfig(config) {
|
|
|
447
451
|
metrics: { publishers: [] }
|
|
448
452
|
};
|
|
449
453
|
if (config.authentication !== void 0) {
|
|
450
|
-
if (config.authentication.token_ttl)
|
|
451
|
-
|
|
454
|
+
if (config.authentication.token_ttl) {
|
|
455
|
+
gateway.token = { ttl: config.authentication?.token_ttl };
|
|
456
|
+
}
|
|
457
|
+
if (config.authentication.available || config.authentication.default) {
|
|
458
|
+
gateway.authentication = toAuthenticationConfig(config.authentication);
|
|
459
|
+
}
|
|
452
460
|
}
|
|
453
461
|
if (config["globals"]) {
|
|
454
462
|
gateway.globals = config["globals"];
|
|
@@ -465,10 +473,13 @@ function toServerConfig(config) {
|
|
|
465
473
|
if (config.cluster?.enabled) {
|
|
466
474
|
gateway.mesh = toMeshConfig(config.cluster);
|
|
467
475
|
}
|
|
468
|
-
if (config.metrics?.publishers)
|
|
476
|
+
if (config.metrics?.publishers) {
|
|
477
|
+
gateway.metrics = toMetricsConfig(config.metrics);
|
|
478
|
+
}
|
|
469
479
|
return {
|
|
470
480
|
port: config.port ?? 3434,
|
|
471
481
|
host: config.ip ?? config["host"],
|
|
482
|
+
cors: config["cors"] === null ? void 0 : config["cors"] ?? false,
|
|
472
483
|
memory: config["memory"],
|
|
473
484
|
app: async (configurer) => {
|
|
474
485
|
if (config.cluster?.embedded_broker?.enabled === true) {
|
package/dist/gateway-ent.cjs.map
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../src/logger.ts", "../src/mesh/ws/broker/core.ts", "../src/gateway/ent/index.ts", "../src/gateway/ent/logging.ts", "../src/gateway/ent/server.ts", "../src/gateway/ent/config.ts"],
|
|
4
|
-
"sourcesContent": ["import * as GatewayLogging from '@interopio/gateway/logging/core';\n\nexport import Logger = GatewayLogging.Logger;\n\nexport default function getLogger(name: string): Logger {\n return GatewayLogging.getLogger(`gateway.server.${name}`);\n}\n\n// This function is used to ensure that RegExp objects are displayed correctly when logging.\nexport function regexAwareReplacer<T>(_key: string, value: T): string | T {\n return value instanceof RegExp ? value.toString() : value;\n}\n", "import * as ws from 'ws';\nimport getLogger from '../../../logger.js';\nimport {IOGateway} from '@interopio/gateway';\nimport GatewayEncoders = IOGateway.Encoding;\n\nimport type {ServerWebSocketHandler} from '../../../../types/web/server';\n\nconst logger = getLogger('mesh.ws.broker');\n\ntype Command =\n // client to broker\n { type: 'hello', 'node-id': string }\n | { type: 'bye', 'node-id': string }\n | { type: 'data', from: string, to: 'all' | string}\n // broker to client\n | { type: 'node-added', 'node-id': string, 'new-node': string }\n | { type: 'node-removed', 'node-id': string, 'removed-node': string }\n\n ;\n\n\nfunction broadcastNodeAdded(nodes: NodeSockets, newSocket: ws.WebSocket, newNodeId: string) {\n Object.entries(nodes.nodes).forEach(([nodeId, socket]) => {\n if (nodeId !== newNodeId) {\n newSocket.send(codec.encode({type: 'node-added', 'node-id': newNodeId, \"new-node\": nodeId}));\n socket.send(codec.encode({type: 'node-added', 'node-id': nodeId, \"new-node\": newNodeId}));\n }\n });\n}\n\nfunction broadcastNodeRemoved(nodes: NodeSockets, removedNodeId: string) {\n Object.entries(nodes.nodes).forEach(([nodeId, socket]) => {\n if (nodeId !== removedNodeId) {\n socket.send(codec.encode({type: 'node-removed', 'node-id': nodeId, \"removed-node\": removedNodeId}));\n }\n });\n}\n\nfunction onOpen(connectedNodes: NodeSockets, logPrefix: string) {\n logger.info(`${logPrefix}connection accepted`);\n}\n\nfunction onClose(connectedNodes: NodeSockets, logPrefix: string, code: number, reason: string): void {\n logger.info(`${logPrefix}connection closed [${code}](${reason})`);\n const nodeIds = connectedNodes.sockets[logPrefix];\n if (nodeIds) {\n delete connectedNodes.sockets[logPrefix];\n for (const nodeId of nodeIds) {\n delete connectedNodes.nodes[nodeId];\n }\n for (const nodeId of nodeIds) {\n broadcastNodeRemoved(connectedNodes, nodeId);\n }\n }\n}\n\nfunction processMessage(connectedNodes: NodeSockets, socket: ws.WebSocket, key: string, msg: Command) {\n switch (msg.type) {\n case 'hello': {\n const nodeId = msg['node-id'];\n connectedNodes.nodes[nodeId] = socket;\n connectedNodes.sockets[key] = connectedNodes.sockets[key] ?? [];\n connectedNodes.sockets[key].push(nodeId);\n logger.info(`[${key}] node ${nodeId} added.`);\n broadcastNodeAdded(connectedNodes, socket, nodeId);\n break;\n }\n case 'bye': {\n const nodeId = msg[\"node-id\"];\n delete connectedNodes[nodeId];\n logger.info(`[${key}] node ${nodeId} removed.`);\n broadcastNodeRemoved(connectedNodes, nodeId);\n break;\n }\n case 'data': {\n const sourceNodeId = msg.from;\n const targetNodeId = msg.to;\n if ('all' === targetNodeId) {\n Object.entries(connectedNodes.nodes).forEach(([nodeId, socket]) => {\n if (nodeId !== sourceNodeId) {\n socket.send(codec.encode(msg));\n }\n });\n }\n else {\n const socket = connectedNodes.nodes[targetNodeId];\n if (socket) {\n socket.send(codec.encode(msg));\n }\n else {\n logger.warn(`unable to send to node ${targetNodeId} message ${JSON.stringify(msg)}`);\n }\n }\n break;\n }\n default: {\n logger.warn(`[${key}] ignoring unknown message ${JSON.stringify(msg)}`);\n break;\n }\n }\n}\n\nconst codec = GatewayEncoders.transit<Command>({\n keywordize: new Map<string, GatewayEncoders.KeywordizeCommand>([\n ['/type', '*'],\n ['/message/body/type', '*'],\n ['/message/origin', '*'],\n ['/message/receiver/type', '*'],\n ['/message/source/type', '*'],\n ['/message/body/type', '*'],\n ])\n});\n\nfunction onMessage(connectedNodes: NodeSockets, socket: ws.WebSocket, logPrefix: string, msg: string): void {\n try {\n const decoded = codec.decode(msg);\n if (logger.enabledFor('debug')) {\n logger.debug(`${logPrefix}processing msg ${JSON.stringify(decoded)}`);\n }\n processMessage(connectedNodes, socket, logPrefix, decoded);\n } catch (ex) {\n logger.error(`${logPrefix}unable to process message`, ex);\n }\n}\n\nclass WebsocketBroker {\n constructor(private readonly server: ws.WebSocketServer) {\n }\n\n async close() {\n this.server.close();\n }\n}\ntype NodeSockets = {nodes: {[nodeId: string]: ws.WebSocket}, sockets: {[socket: string]: string[]}};\n\nasync function create(environment: {endpoint: string}): Promise<ServerWebSocketHandler> {\n const connectedNodes: NodeSockets = {nodes: {}, sockets: {}};\n logger.info(`mesh server is listening`);\n\n return async ({socket, handshake}) => {\n const logPrefix = handshake.logPrefix!;\n onOpen(connectedNodes, logPrefix);\n socket.on('error', (err: Error) => {\n logger.error(`${logPrefix}websocket error: ${err}`, err);\n });\n socket.on('message', (data, _isBinary) => {\n if (Array.isArray(data)) {\n data = Buffer.concat(data);\n }\n onMessage(connectedNodes, socket, logPrefix, data as unknown as string);\n });\n socket.on('close', (code, reason) => {\n onClose(connectedNodes, logPrefix, code, reason as unknown as string);\n });\n };\n}\n\nexport default create;\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", "import {LogInfo, LogLevel} from '@interopio/gateway-server/gateway-ent';\nimport * as IOGatewayLogging from '@interopio/gateway/logging/core';\nimport {format} from 'node:util';\n\nclass LogInfoAdapter implements LogInfo {\n readonly #event: IOGatewayLogging.LogEvent;\n #parsed?: { err?: Error, msg: string };\n #timestamp?: string;\n #output?: string;\n\n\n constructor(event: IOGatewayLogging.LogEvent) {\n this.#event = event;\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 }): IOGatewayLogging.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: IOGatewayLogging.LogConfig = {level};\n const appenderFn = config?.appender;\n if (appenderFn) {\n result.appender = (event: IOGatewayLogging.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 {IOGateway} from '@interopio/gateway';\nimport { GatewayConfig, MetricsPublisherConfig } from '../../../types/gateway-ent';\nimport {GatewayServer} from '../../../gateway-server';\nimport {OriginFilters} from '../../../types/web/server';\nimport {AuthorizationRule} from '../../../types/auth';\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 trimTrailingSlash(url?: string): string | undefined {\n return url?.endsWith('/') ? url.slice(0, -1) : url;\n}\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 = trimTrailingSlash(legacyDirectory.config?.directory_uri)!;\n }\n else {\n directory = {uri: trimTrailingSlash(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 ?? '<unresolved>'};\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 maxConnections: config.limits?.max_connections,\n origins: config.security?.origin_filters as OriginFilters,\n authorize: config['authorize'] as AuthorizationRule ?? {access: 'permitted'},\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 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 app: async (configurer) => {\n if (config.cluster?.embedded_broker?.enabled === true) {\n configurer.socket({\n path: config.cluster.embedded_broker.route ?? '/mesh-broker',\n options: {\n authorize: config.cluster.embedded_broker['authorize'] as AuthorizationRule ?? {access: 'permitted'}\n },\n factory: async(env: {endpoint: string}) => {\n if (gateway.mesh?.broker?.endpoint === '<unresolved>') {\n gateway.mesh.broker.endpoint = env.endpoint;\n }\n const delegate = (await import('../../mesh/ws/broker/core.js')).default;\n return await delegate(env);\n }\n });\n }\n },\n gateway: gateway\n\n };\n}\n"],
|
|
5
|
-
"mappings": "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",
|
|
4
|
+
"sourcesContent": ["import * as GatewayLogging from '@interopio/gateway/logging/core';\n\nexport import Logger = GatewayLogging.Logger;\n\nexport default function getLogger(name: string): Logger {\n return GatewayLogging.getLogger(`gateway.server.${name}`);\n}\n\n// This function is used to ensure that RegExp objects are displayed correctly when logging.\nexport function regexAwareReplacer<T>(_key: string, value: T): string | T {\n return value instanceof RegExp ? value.toString() : value;\n}\n", "import * as ws from 'ws';\nimport getLogger from '../../../logger.js';\nimport {IOGateway} from '@interopio/gateway';\nimport GatewayEncoders = IOGateway.Encoding;\n\nimport type {ServerWebSocketHandler} from '../../../../types/web/server';\n\nconst logger = getLogger('mesh.ws.broker');\n\ntype Command =\n // client to broker\n { type: 'hello', 'node-id': string }\n | { type: 'bye', 'node-id': string }\n | { type: 'data', from: string, to: 'all' | string}\n // broker to client\n | { type: 'node-added', 'node-id': string, 'new-node': string }\n | { type: 'node-removed', 'node-id': string, 'removed-node': string }\n\n ;\n\n\nfunction broadcastNodeAdded(nodes: NodeSockets, newSocket: ws.WebSocket, newNodeId: string) {\n Object.entries(nodes.nodes).forEach(([nodeId, socket]) => {\n if (nodeId !== newNodeId) {\n newSocket.send(codec.encode({type: 'node-added', 'node-id': newNodeId, \"new-node\": nodeId}));\n socket.send(codec.encode({type: 'node-added', 'node-id': nodeId, \"new-node\": newNodeId}));\n }\n });\n}\n\nfunction broadcastNodeRemoved(nodes: NodeSockets, removedNodeId: string) {\n Object.entries(nodes.nodes).forEach(([nodeId, socket]) => {\n if (nodeId !== removedNodeId) {\n socket.send(codec.encode({type: 'node-removed', 'node-id': nodeId, \"removed-node\": removedNodeId}));\n }\n });\n}\n\nfunction onOpen(connectedNodes: NodeSockets, logPrefix: string) {\n logger.info(`${logPrefix}connection accepted`);\n}\n\nfunction onClose(connectedNodes: NodeSockets, logPrefix: string, code: number, reason: string): void {\n logger.info(`${logPrefix}connection closed [${code}](${reason})`);\n const nodeIds = connectedNodes.sockets[logPrefix];\n if (nodeIds) {\n delete connectedNodes.sockets[logPrefix];\n for (const nodeId of nodeIds) {\n delete connectedNodes.nodes[nodeId];\n }\n for (const nodeId of nodeIds) {\n broadcastNodeRemoved(connectedNodes, nodeId);\n }\n }\n}\n\nfunction processMessage(connectedNodes: NodeSockets, socket: ws.WebSocket, key: string, msg: Command) {\n switch (msg.type) {\n case 'hello': {\n const nodeId = msg['node-id'];\n connectedNodes.nodes[nodeId] = socket;\n connectedNodes.sockets[key] = connectedNodes.sockets[key] ?? [];\n connectedNodes.sockets[key].push(nodeId);\n logger.info(`[${key}] node ${nodeId} added.`);\n broadcastNodeAdded(connectedNodes, socket, nodeId);\n break;\n }\n case 'bye': {\n const nodeId = msg[\"node-id\"];\n delete connectedNodes[nodeId];\n logger.info(`[${key}] node ${nodeId} removed.`);\n broadcastNodeRemoved(connectedNodes, nodeId);\n break;\n }\n case 'data': {\n const sourceNodeId = msg.from;\n const targetNodeId = msg.to;\n if ('all' === targetNodeId) {\n Object.entries(connectedNodes.nodes).forEach(([nodeId, socket]) => {\n if (nodeId !== sourceNodeId) {\n socket.send(codec.encode(msg));\n }\n });\n }\n else {\n const socket = connectedNodes.nodes[targetNodeId];\n if (socket) {\n socket.send(codec.encode(msg));\n }\n else {\n logger.warn(`unable to send to node ${targetNodeId} message ${JSON.stringify(msg)}`);\n }\n }\n break;\n }\n default: {\n logger.warn(`[${key}] ignoring unknown message ${JSON.stringify(msg)}`);\n break;\n }\n }\n}\n\nconst codec = GatewayEncoders.transit<Command>({\n keywordize: new Map<string, GatewayEncoders.KeywordizeCommand>([\n ['/type', '*'],\n ['/message/body/type', '*'],\n ['/message/origin', '*'],\n ['/message/receiver/type', '*'],\n ['/message/source/type', '*'],\n ['/message/body/type', '*'],\n ])\n});\n\nfunction onMessage(connectedNodes: NodeSockets, socket: ws.WebSocket, logPrefix: string, msg: string): void {\n try {\n const decoded = codec.decode(msg);\n if (logger.enabledFor('debug')) {\n logger.debug(`${logPrefix}processing msg ${JSON.stringify(decoded)}`);\n }\n processMessage(connectedNodes, socket, logPrefix, decoded);\n } catch (ex) {\n logger.error(`${logPrefix}unable to process message`, ex);\n }\n}\n\nclass WebsocketBroker {\n constructor(private readonly server: ws.WebSocketServer) {\n }\n\n async close() {\n this.server.close();\n }\n}\ntype NodeSockets = {nodes: {[nodeId: string]: ws.WebSocket}, sockets: {[socket: string]: string[]}};\n\nasync function create(environment: {endpoint: string}): Promise<ServerWebSocketHandler> {\n const connectedNodes: NodeSockets = {nodes: {}, sockets: {}};\n logger.info(`mesh server is listening`);\n\n return async ({socket, handshake}) => {\n const logPrefix = handshake.logPrefix!;\n onOpen(connectedNodes, logPrefix);\n socket.on('error', (err: Error) => {\n logger.error(`${logPrefix}websocket error: ${err}`, err);\n });\n socket.on('message', (data, _isBinary) => {\n if (Array.isArray(data)) {\n data = Buffer.concat(data);\n }\n onMessage(connectedNodes, socket, logPrefix, data as unknown as string);\n });\n socket.on('close', (code, reason) => {\n onClose(connectedNodes, logPrefix, code, reason as unknown as string);\n });\n };\n}\n\nexport default create;\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", "import {LogInfo, LogLevel} from '@interopio/gateway-server/gateway-ent';\nimport * as IOGatewayLogging from '@interopio/gateway/logging/core';\nimport {format} from 'node:util';\n\nclass LogInfoAdapter implements LogInfo {\n readonly #event: IOGatewayLogging.LogEvent;\n #parsed?: { err?: Error, msg: string };\n #timestamp?: string;\n #output?: string;\n\n\n constructor(event: IOGatewayLogging.LogEvent) {\n this.#event = event;\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 }): IOGatewayLogging.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: IOGatewayLogging.LogConfig = {level};\n const appenderFn = config?.appender;\n if (appenderFn) {\n result.appender = (event: IOGatewayLogging.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 type { GatewayConfig, MetricsPublisherConfig } from '../../../types/gateway-ent';\nimport type { GatewayServer } from '../../../gateway-server';\nimport type { OriginFilters } from '../../../types/web/server';\nimport type { AuthorizationRule } from '../../../types/auth';\nimport { IOGateway } from '@interopio/gateway';\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 }\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 }\n else {\n // unsupported predefined type\n }\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}\n\ntype GatewayCluster = Required<GatewayConfig>['cluster'];\ntype P2P = Required<GatewayCluster>['p2p'];\n\nfunction trimTrailingSlash(url?: string): string | undefined {\n return url?.endsWith('/') ? url.slice(0, -1) : url;\n}\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 = trimTrailingSlash(legacyDirectory.config?.directory_uri)!;\n }\n else {\n directory = { uri: trimTrailingSlash(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) {\n mesh.node = legacy.configuration.node_id;\n }\n if (legacy?.type === 'broker') {\n mesh.broker = { endpoint: legacy.broker?.endpoint ?? '<unresolved>' };\n }\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}\n\nexport function toServerConfig(config: GatewayConfig): GatewayServer.ServerConfig {\n const gateway: GatewayServer.ServerConfig[\"gateway\"] = {\n route: config.route,\n maxConnections: config.limits?.max_connections,\n origins: config.security?.origin_filters as OriginFilters,\n authorize: config['authorize'] as AuthorizationRule ?? { access: 'permitted' },\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) {\n gateway.token = { ttl: config.authentication?.token_ttl as number };\n }\n if (config.authentication.available || config.authentication.default) {\n gateway.authentication = toAuthenticationConfig(config.authentication);\n }\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 if (config.metrics?.publishers) {\n gateway.metrics = toMetricsConfig(config.metrics);\n }\n return {\n port: config.port ?? 3434,\n host: config.ip ?? config['host'] as string,\n cors: config['cors'] === null ? undefined : config['cors'] ?? false,\n memory: config['memory'],\n app: async (configurer) => {\n if (config.cluster?.embedded_broker?.enabled === true) {\n configurer.socket({\n path: config.cluster.embedded_broker.route ?? '/mesh-broker',\n options: {\n authorize: config.cluster.embedded_broker['authorize'] as AuthorizationRule ?? { access: 'permitted' }\n },\n factory: async (env: { endpoint: string }) => {\n if (gateway.mesh?.broker?.endpoint === '<unresolved>') {\n gateway.mesh.broker.endpoint = env.endpoint;\n }\n const delegate = (await import('../../mesh/ws/broker/core.js')).default;\n return await delegate(env);\n }\n });\n }\n },\n gateway: gateway\n\n };\n}\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
6
|
"names": ["getLogger", "socket", "getLogger", "create", "import_gateway", "create"]
|
|
7
7
|
}
|
package/dist/gateway-ent.js
CHANGED
|
@@ -362,8 +362,12 @@ function toCluster(legacy) {
|
|
|
362
362
|
}
|
|
363
363
|
function toMeshConfig(legacy) {
|
|
364
364
|
const mesh = {};
|
|
365
|
-
if (legacy?.configuration?.node_id)
|
|
366
|
-
|
|
365
|
+
if (legacy?.configuration?.node_id) {
|
|
366
|
+
mesh.node = legacy.configuration.node_id;
|
|
367
|
+
}
|
|
368
|
+
if (legacy?.type === "broker") {
|
|
369
|
+
mesh.broker = { endpoint: legacy.broker?.endpoint ?? "<unresolved>" };
|
|
370
|
+
}
|
|
367
371
|
if (legacy?.type === "p2p") {
|
|
368
372
|
const cluster = toCluster(legacy.p2p);
|
|
369
373
|
if (cluster) {
|
|
@@ -416,8 +420,12 @@ function toServerConfig(config) {
|
|
|
416
420
|
metrics: { publishers: [] }
|
|
417
421
|
};
|
|
418
422
|
if (config.authentication !== void 0) {
|
|
419
|
-
if (config.authentication.token_ttl)
|
|
420
|
-
|
|
423
|
+
if (config.authentication.token_ttl) {
|
|
424
|
+
gateway.token = { ttl: config.authentication?.token_ttl };
|
|
425
|
+
}
|
|
426
|
+
if (config.authentication.available || config.authentication.default) {
|
|
427
|
+
gateway.authentication = toAuthenticationConfig(config.authentication);
|
|
428
|
+
}
|
|
421
429
|
}
|
|
422
430
|
if (config["globals"]) {
|
|
423
431
|
gateway.globals = config["globals"];
|
|
@@ -434,10 +442,13 @@ function toServerConfig(config) {
|
|
|
434
442
|
if (config.cluster?.enabled) {
|
|
435
443
|
gateway.mesh = toMeshConfig(config.cluster);
|
|
436
444
|
}
|
|
437
|
-
if (config.metrics?.publishers)
|
|
445
|
+
if (config.metrics?.publishers) {
|
|
446
|
+
gateway.metrics = toMetricsConfig(config.metrics);
|
|
447
|
+
}
|
|
438
448
|
return {
|
|
439
449
|
port: config.port ?? 3434,
|
|
440
450
|
host: config.ip ?? config["host"],
|
|
451
|
+
cors: config["cors"] === null ? void 0 : config["cors"] ?? false,
|
|
441
452
|
memory: config["memory"],
|
|
442
453
|
app: async (configurer) => {
|
|
443
454
|
if (config.cluster?.embedded_broker?.enabled === true) {
|
package/dist/gateway-ent.js.map
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../src/logger.ts", "../src/mesh/ws/broker/core.ts", "../src/gateway/ent/logging.ts", "../src/gateway/ent/server.ts", "../src/gateway/ent/config.ts", "../src/gateway/ent/index.ts"],
|
|
4
|
-
"sourcesContent": ["import * as GatewayLogging from '@interopio/gateway/logging/core';\n\nexport import Logger = GatewayLogging.Logger;\n\nexport default function getLogger(name: string): Logger {\n return GatewayLogging.getLogger(`gateway.server.${name}`);\n}\n\n// This function is used to ensure that RegExp objects are displayed correctly when logging.\nexport function regexAwareReplacer<T>(_key: string, value: T): string | T {\n return value instanceof RegExp ? value.toString() : value;\n}\n", "import * as ws from 'ws';\nimport getLogger from '../../../logger.js';\nimport {IOGateway} from '@interopio/gateway';\nimport GatewayEncoders = IOGateway.Encoding;\n\nimport type {ServerWebSocketHandler} from '../../../../types/web/server';\n\nconst logger = getLogger('mesh.ws.broker');\n\ntype Command =\n // client to broker\n { type: 'hello', 'node-id': string }\n | { type: 'bye', 'node-id': string }\n | { type: 'data', from: string, to: 'all' | string}\n // broker to client\n | { type: 'node-added', 'node-id': string, 'new-node': string }\n | { type: 'node-removed', 'node-id': string, 'removed-node': string }\n\n ;\n\n\nfunction broadcastNodeAdded(nodes: NodeSockets, newSocket: ws.WebSocket, newNodeId: string) {\n Object.entries(nodes.nodes).forEach(([nodeId, socket]) => {\n if (nodeId !== newNodeId) {\n newSocket.send(codec.encode({type: 'node-added', 'node-id': newNodeId, \"new-node\": nodeId}));\n socket.send(codec.encode({type: 'node-added', 'node-id': nodeId, \"new-node\": newNodeId}));\n }\n });\n}\n\nfunction broadcastNodeRemoved(nodes: NodeSockets, removedNodeId: string) {\n Object.entries(nodes.nodes).forEach(([nodeId, socket]) => {\n if (nodeId !== removedNodeId) {\n socket.send(codec.encode({type: 'node-removed', 'node-id': nodeId, \"removed-node\": removedNodeId}));\n }\n });\n}\n\nfunction onOpen(connectedNodes: NodeSockets, logPrefix: string) {\n logger.info(`${logPrefix}connection accepted`);\n}\n\nfunction onClose(connectedNodes: NodeSockets, logPrefix: string, code: number, reason: string): void {\n logger.info(`${logPrefix}connection closed [${code}](${reason})`);\n const nodeIds = connectedNodes.sockets[logPrefix];\n if (nodeIds) {\n delete connectedNodes.sockets[logPrefix];\n for (const nodeId of nodeIds) {\n delete connectedNodes.nodes[nodeId];\n }\n for (const nodeId of nodeIds) {\n broadcastNodeRemoved(connectedNodes, nodeId);\n }\n }\n}\n\nfunction processMessage(connectedNodes: NodeSockets, socket: ws.WebSocket, key: string, msg: Command) {\n switch (msg.type) {\n case 'hello': {\n const nodeId = msg['node-id'];\n connectedNodes.nodes[nodeId] = socket;\n connectedNodes.sockets[key] = connectedNodes.sockets[key] ?? [];\n connectedNodes.sockets[key].push(nodeId);\n logger.info(`[${key}] node ${nodeId} added.`);\n broadcastNodeAdded(connectedNodes, socket, nodeId);\n break;\n }\n case 'bye': {\n const nodeId = msg[\"node-id\"];\n delete connectedNodes[nodeId];\n logger.info(`[${key}] node ${nodeId} removed.`);\n broadcastNodeRemoved(connectedNodes, nodeId);\n break;\n }\n case 'data': {\n const sourceNodeId = msg.from;\n const targetNodeId = msg.to;\n if ('all' === targetNodeId) {\n Object.entries(connectedNodes.nodes).forEach(([nodeId, socket]) => {\n if (nodeId !== sourceNodeId) {\n socket.send(codec.encode(msg));\n }\n });\n }\n else {\n const socket = connectedNodes.nodes[targetNodeId];\n if (socket) {\n socket.send(codec.encode(msg));\n }\n else {\n logger.warn(`unable to send to node ${targetNodeId} message ${JSON.stringify(msg)}`);\n }\n }\n break;\n }\n default: {\n logger.warn(`[${key}] ignoring unknown message ${JSON.stringify(msg)}`);\n break;\n }\n }\n}\n\nconst codec = GatewayEncoders.transit<Command>({\n keywordize: new Map<string, GatewayEncoders.KeywordizeCommand>([\n ['/type', '*'],\n ['/message/body/type', '*'],\n ['/message/origin', '*'],\n ['/message/receiver/type', '*'],\n ['/message/source/type', '*'],\n ['/message/body/type', '*'],\n ])\n});\n\nfunction onMessage(connectedNodes: NodeSockets, socket: ws.WebSocket, logPrefix: string, msg: string): void {\n try {\n const decoded = codec.decode(msg);\n if (logger.enabledFor('debug')) {\n logger.debug(`${logPrefix}processing msg ${JSON.stringify(decoded)}`);\n }\n processMessage(connectedNodes, socket, logPrefix, decoded);\n } catch (ex) {\n logger.error(`${logPrefix}unable to process message`, ex);\n }\n}\n\nclass WebsocketBroker {\n constructor(private readonly server: ws.WebSocketServer) {\n }\n\n async close() {\n this.server.close();\n }\n}\ntype NodeSockets = {nodes: {[nodeId: string]: ws.WebSocket}, sockets: {[socket: string]: string[]}};\n\nasync function create(environment: {endpoint: string}): Promise<ServerWebSocketHandler> {\n const connectedNodes: NodeSockets = {nodes: {}, sockets: {}};\n logger.info(`mesh server is listening`);\n\n return async ({socket, handshake}) => {\n const logPrefix = handshake.logPrefix!;\n onOpen(connectedNodes, logPrefix);\n socket.on('error', (err: Error) => {\n logger.error(`${logPrefix}websocket error: ${err}`, err);\n });\n socket.on('message', (data, _isBinary) => {\n if (Array.isArray(data)) {\n data = Buffer.concat(data);\n }\n onMessage(connectedNodes, socket, logPrefix, data as unknown as string);\n });\n socket.on('close', (code, reason) => {\n onClose(connectedNodes, logPrefix, code, reason as unknown as string);\n });\n };\n}\n\nexport default create;\n", "import {LogInfo, LogLevel} from '@interopio/gateway-server/gateway-ent';\nimport * as IOGatewayLogging from '@interopio/gateway/logging/core';\nimport {format} from 'node:util';\n\nclass LogInfoAdapter implements LogInfo {\n readonly #event: IOGatewayLogging.LogEvent;\n #parsed?: { err?: Error, msg: string };\n #timestamp?: string;\n #output?: string;\n\n\n constructor(event: IOGatewayLogging.LogEvent) {\n this.#event = event;\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 }): IOGatewayLogging.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: IOGatewayLogging.LogConfig = {level};\n const appenderFn = config?.appender;\n if (appenderFn) {\n result.appender = (event: IOGatewayLogging.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 {IOGateway} from '@interopio/gateway';\nimport { GatewayConfig, MetricsPublisherConfig } from '../../../types/gateway-ent';\nimport {GatewayServer} from '../../../gateway-server';\nimport {OriginFilters} from '../../../types/web/server';\nimport {AuthorizationRule} from '../../../types/auth';\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 trimTrailingSlash(url?: string): string | undefined {\n return url?.endsWith('/') ? url.slice(0, -1) : url;\n}\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 = trimTrailingSlash(legacyDirectory.config?.directory_uri)!;\n }\n else {\n directory = {uri: trimTrailingSlash(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 ?? '<unresolved>'};\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 maxConnections: config.limits?.max_connections,\n origins: config.security?.origin_filters as OriginFilters,\n authorize: config['authorize'] as AuthorizationRule ?? {access: 'permitted'},\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 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 app: async (configurer) => {\n if (config.cluster?.embedded_broker?.enabled === true) {\n configurer.socket({\n path: config.cluster.embedded_broker.route ?? '/mesh-broker',\n options: {\n authorize: config.cluster.embedded_broker['authorize'] as AuthorizationRule ?? {access: 'permitted'}\n },\n factory: async(env: {endpoint: string}) => {\n if (gateway.mesh?.broker?.endpoint === '<unresolved>') {\n gateway.mesh.broker.endpoint = env.endpoint;\n }\n const delegate = (await import('../../mesh/ws/broker/core.js')).default;\n return await delegate(env);\n }\n });\n }\n },\n gateway: gateway\n\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": ";;;;;;;;;;;AAAA,YAAY,oBAAoB;AAIjB,SAARA,WAA2B,MAAsB;AACpD,SAAsB,yBAAU,kBAAkB,IAAI,EAAE;AAC5D;AANA;AAAA;AAAA;AAAA;AAAA;;;ACAA;AAAA;AAAA;AAAA;AAEA,SAAQ,iBAAgB;AAmBxB,SAAS,mBAAmB,OAAoB,WAAyB,WAAmB;AACxF,SAAO,QAAQ,MAAM,KAAK,EAAE,QAAQ,CAAC,CAAC,QAAQ,MAAM,MAAM;AACtD,QAAI,WAAW,WAAW;AACtB,gBAAU,KAAK,MAAM,OAAO,EAAC,MAAM,cAAc,WAAW,WAAW,YAAY,OAAM,CAAC,CAAC;AAC3F,aAAO,KAAK,MAAM,OAAO,EAAC,MAAM,cAAc,WAAW,QAAQ,YAAY,UAAS,CAAC,CAAC;AAAA,IAC5F;AAAA,EACJ,CAAC;AACL;AAEA,SAAS,qBAAqB,OAAoB,eAAuB;AACrE,SAAO,QAAQ,MAAM,KAAK,EAAE,QAAQ,CAAC,CAAC,QAAQ,MAAM,MAAM;AACtD,QAAI,WAAW,eAAe;AAC1B,aAAO,KAAK,MAAM,OAAO,EAAC,MAAM,gBAAgB,WAAW,QAAQ,gBAAgB,cAAa,CAAC,CAAC;AAAA,IACtG;AAAA,EACJ,CAAC;AACL;AAEA,SAAS,OAAO,gBAA6B,WAAmB;AAC5D,SAAO,KAAK,GAAG,SAAS,qBAAqB;AACjD;AAEA,SAAS,QAAQ,gBAA6B,WAAmB,MAAc,QAAsB;AACjG,SAAO,KAAK,GAAG,SAAS,sBAAsB,IAAI,KAAK,MAAM,GAAG;AAChE,QAAM,UAAU,eAAe,QAAQ,SAAS;AAChD,MAAI,SAAS;AACT,WAAO,eAAe,QAAQ,SAAS;AACvC,eAAW,UAAU,SAAS;AAC1B,aAAO,eAAe,MAAM,MAAM;AAAA,IACtC;AACA,eAAW,UAAU,SAAS;AAC1B,2BAAqB,gBAAgB,MAAM;AAAA,IAC/C;AAAA,EACJ;AACJ;AAEA,SAAS,eAAe,gBAA6B,QAAsB,KAAa,KAAc;AAClG,UAAQ,IAAI,MAAM;AAAA,IACd,KAAK,SAAS;AACV,YAAM,SAAS,IAAI,SAAS;AAC5B,qBAAe,MAAM,MAAM,IAAI;AAC/B,qBAAe,QAAQ,GAAG,IAAI,eAAe,QAAQ,GAAG,KAAK,CAAC;AAC9D,qBAAe,QAAQ,GAAG,EAAE,KAAK,MAAM;AACvC,aAAO,KAAK,IAAI,GAAG,UAAU,MAAM,SAAS;AAC5C,yBAAmB,gBAAgB,QAAQ,MAAM;AACjD;AAAA,IACJ;AAAA,IACA,KAAK,OAAO;AACR,YAAM,SAAS,IAAI,SAAS;AAC5B,aAAO,eAAe,MAAM;AAC5B,aAAO,KAAK,IAAI,GAAG,UAAU,MAAM,WAAW;AAC9C,2BAAqB,gBAAgB,MAAM;AAC3C;AAAA,IACJ;AAAA,IACA,KAAK,QAAQ;AACT,YAAM,eAAe,IAAI;AACzB,YAAM,eAAe,IAAI;AACzB,UAAI,UAAU,cAAc;AACxB,eAAO,QAAQ,eAAe,KAAK,EAAE,QAAQ,CAAC,CAAC,QAAQC,OAAM,MAAM;AAC/D,cAAI,WAAW,cAAc;AACzB,YAAAA,QAAO,KAAK,MAAM,OAAO,GAAG,CAAC;AAAA,UACjC;AAAA,QACJ,CAAC;AAAA,MACL,OACK;AACD,cAAMA,UAAS,eAAe,MAAM,YAAY;AAChD,YAAIA,SAAQ;AACR,UAAAA,QAAO,KAAK,MAAM,OAAO,GAAG,CAAC;AAAA,QACjC,OACK;AACD,iBAAO,KAAK,0BAA0B,YAAY,YAAY,KAAK,UAAU,GAAG,CAAC,EAAE;AAAA,QACvF;AAAA,MACJ;AACA;AAAA,IACJ;AAAA,IACA,SAAS;AACL,aAAO,KAAK,IAAI,GAAG,8BAA8B,KAAK,UAAU,GAAG,CAAC,EAAE;AACtE;AAAA,IACJ;AAAA,EACJ;AACJ;AAaA,SAAS,UAAU,gBAA6B,QAAsB,WAAmB,KAAmB;AACxG,MAAI;AACA,UAAM,UAAU,MAAM,OAAO,GAAG;AAChC,QAAI,OAAO,WAAW,OAAO,GAAG;AAC5B,aAAO,MAAM,GAAG,SAAS,kBAAkB,KAAK,UAAU,OAAO,CAAC,EAAE;AAAA,IACxE;AACA,mBAAe,gBAAgB,QAAQ,WAAW,OAAO;AAAA,EAC7D,SAAS,IAAI;AACT,WAAO,MAAM,GAAG,SAAS,6BAA6B,EAAE;AAAA,EAC5D;AACJ;AAYA,eAAe,OAAO,aAAkE;AACpF,QAAM,iBAA8B,EAAC,OAAO,CAAC,GAAG,SAAS,CAAC,EAAC;AAC3D,SAAO,KAAK,0BAA0B;AAEtC,SAAO,OAAO,EAAC,QAAQ,UAAS,MAAM;AAClC,UAAM,YAAY,UAAU;AAC5B,WAAO,gBAAgB,SAAS;AAChC,WAAO,GAAG,SAAS,CAAC,QAAe;AAC/B,aAAO,MAAM,GAAG,SAAS,oBAAoB,GAAG,IAAI,GAAG;AAAA,IAC3D,CAAC;AACD,WAAO,GAAG,WAAW,CAAC,MAAM,cAAc;AACtC,UAAI,MAAM,QAAQ,IAAI,GAAG;AACrB,eAAO,OAAO,OAAO,IAAI;AAAA,MAC7B;AACA,gBAAU,gBAAgB,QAAQ,WAAW,IAAyB;AAAA,IAC1E,CAAC;AACD,WAAO,GAAG,SAAS,CAAC,MAAM,WAAW;AACjC,cAAQ,gBAAgB,WAAW,MAAM,MAA2B;AAAA,IACxE,CAAC;AAAA,EACL;AACJ;AA3JA,IAGO,iBAID,QA+FA,OAuDC;AA7JP;AAAA;AAAA;AACA;AAEA,IAAO,kBAAkB,UAAU;AAInC,IAAM,SAASC,WAAU,gBAAgB;AA+FzC,IAAM,QAAQ,gBAAgB,QAAiB;AAAA,MAC3C,YAAY,oBAAI,IAA+C;AAAA,QAC3D,CAAC,SAAS,GAAG;AAAA,QACb,CAAC,sBAAsB,GAAG;AAAA,QAC1B,CAAC,mBAAmB,GAAG;AAAA,QACvB,CAAC,0BAA0B,GAAG;AAAA,QAC9B,CAAC,wBAAwB,GAAG;AAAA,QAC5B,CAAC,sBAAsB,GAAG;AAAA,MAC9B,CAAC;AAAA,IACL,CAAC;AA8CD,IAAO,eAAQ;AAAA;AAAA;;;AC3Jf,SAAQ,cAAa;AAErB,IAAM,iBAAN,MAAwC;AAAA,EAC3B;AAAA,EACT;AAAA,EACA;AAAA,EACA;AAAA,EAGA,YAAY,OAAkC;AAC1C,SAAK,SAAS;AAAA,EAClB;AAAA,EAEQ,SAAuC;AAC3C,QAAI,KAAK,YAAY,QAAW;AAC5B,UAAI,MAAyB;AAC7B,UAAI,QAAQ,KAAK,OAAO;AACxB,UAAI,KAAK,OAAO,KAAK,CAAC,aAAa,OAAO;AACtC,cAAM,KAAK,OAAO,KAAK,CAAC;AACxB,gBAAQ,MAAM,MAAM,CAAC;AAAA,MACzB;AACA,YAAM,MAAM,OAAO,KAAK,OAAO,SAAS,GAAG,KAAK;AAChD,WAAK,UAAU,EAAC,KAAK,IAAG;AAAA,IAC5B;AACA,WAAO,KAAK;AAAA,EAChB;AAAA,EAEA,IAAI,OAAa;AACb,WAAO,KAAK,OAAO;AAAA,EACvB;AAAA,EAEA,IAAI,QAAkB;AAClB,WAAO,KAAK,OAAO;AAAA,EACvB;AAAA,EAEA,IAAI,YAAY;AACZ,WAAO,KAAK,OAAO;AAAA,EACvB;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,QAA+F;AACvH,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,SAAqC,EAAC,MAAK;AACjD,QAAM,aAAa,QAAQ;AAC3B,MAAI,YAAY;AACZ,WAAO,WAAW,CAAC,UAAqC;AACpD,iBAAW,IAAI,eAAe,KAAK,CAAC;AAAA,IACxC;AAAA,EACJ;AACA,SAAO;AACX;;;AC1FA,SAAQ,qBAAoB;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,cAAc,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;;;AC3BA,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;AACA,kBAAQ,KAAK,WAAW,MAAM;AAAA,QAClC;AAAA,MACJ,OAAO;AAAA,MAEP;AAAA,IACJ,OAAO;AACH,YAAM,gBAAgB,EAAC,GAAG,UAAU,cAAa;AACjD,YAAM,YAAY,cAAc,YAAY;AAC5C,aAAO,cAAc,YAAY;AACjC,YAAM,OAAO,UAAU,MAAM;AAC7B,YAAM,SAAiD;AAAA,QACnD,YAAY;AAAA,QACZ,WAAW,EAAC,MAAM,cAAa;AAAA,QAC/B,GAAG,yBAAyB,aAAa;AAAA,MAC7C;AACA,cAAQ,WAAW,KAAK,MAAM;AAAA,IAClC;AAAA,EACJ,CAAC;AACD,MAAI,QAAQ,SAAS;AACjB,YAAQ,UAAU,iBAAiB,QAAQ,OAAO;AAAA,EACtD;AACA,SAAO;AACX;AAIA,SAAS,kBAAkB,KAAkC;AACzD,SAAO,KAAK,SAAS,GAAG,IAAI,IAAI,MAAM,GAAG,EAAE,IAAI;AACnD;AAEA,SAAS,UAAU,QAA2D;AAC1E,MAAI,QAAQ,WAAW;AACnB,UAAM,kBAAkB,OAAO;AAC/B,UAAM,SAA0C,EAAC,UAAU,SAAS,UAAU,EAAC;AAC/E,QAAI,gBAAgB,SAAS,QAAQ;AACjC,UAAI,YAA2D;AAC/D,UAAI,OAAO,aAAa,QAAW;AAC/B,eAAO,WAAW,kBAAkB,gBAAgB,QAAQ,aAAa;AAAA,MAC7E,OACK;AACD,oBAAY,EAAC,KAAK,kBAAkB,gBAAgB,QAAQ,aAAa,EAAC;AAAA,MAC9E;AACA,UAAI,gBAAgB,QAAQ,mBAAmB;AAC3C,sBAAc,CAAC;AACf,kBAAU,WAAW,OAAO,gBAAgB,OAAO,iBAAiB;AAAA,MACxE;AACA,UAAI,cAAc,QAAW;AACzB,eAAO,YAAY;AAAA,MACvB;AACA,aAAO;AAAA,IACX,WACS,gBAAgB,SAAS,UAAU;AACxC,aAAO,YAAY,EAAC,SAAU,gBAAgB,WAAW,CAAC,EAAC;AAC3D,aAAO;AAAA,IACX;AAAA,EACJ;AACJ;AAEA,SAAS,aAAa,QAAkC;AACpD,QAAM,OAA6B,CAAC;AACpC,MAAI,QAAQ,eAAe,QAAS,MAAK,OAAO,OAAO,cAAc;AACrE,MAAI,QAAQ,SAAS,SAAU,MAAK,SAAS,EAAC,UAAU,OAAO,QAAQ,YAAY,eAAc;AACjG,MAAI,QAAQ,SAAS,OAAO;AACxB,UAAM,UAAU,UAAU,OAAO,GAAG;AACpC,QAAI,SAAS;AACT,WAAK,UAAU;AAAA,IACnB;AAAA,EACJ;AACA,SAAO;AACX;AAEA,SAAS,uBAAuB,QAAyE;AACrG,QAAM,iBAAyE,EAAC,WAAW,CAAC,EAAC;AAC7F,MAAI,QAAQ,SAAS;AACjB,mBAAe,UAAU,OAAO;AAAA,EACpC;AAEA,QAAM,KAAK,QAAQ;AACnB,KAAG,QAAQ,CAAC,MAAM;AACd,QAAI,MAAM,WAAW,MAAM,YAAY,SAAS,CAAC,IAAI,eAAe,MAAM,QAAW;AACjF,qBAAe,UAAU,KAAK,CAAC;AAC/B,UAAI,SAAS,CAAC,MAAM,QAAW;AAC3B,uBAAe,CAAC,IAAI,OAAO,CAAC;AAAA,MAChC;AAAA,IACJ;AAAA,EACJ,CAAC;AAED,SAAO;AACX;AACO,SAAS,eAAe,QAAmD;AAC9E,QAAM,UAAiD;AAAA,IACnD,OAAO,OAAO;AAAA,IACd,gBAAgB,OAAO,QAAQ;AAAA,IAC/B,SAAS,OAAO,UAAU;AAAA,IAC1B,WAAW,OAAO,WAAW,KAA0B,EAAC,QAAQ,YAAW;AAAA,IAC3E,SAAS,OAAO,SAAS,KAAK,EAAC,kBAAkB,GAAG,aAAa,IAAG;AAAA,IACpE,UAAU;AAAA,MACN,UAAU;AAAA,MACV,YAAY;AAAA,QACR,EAAC,SAAS,mBAAmB,cAAc,UAAS;AAAA,QACpD,EAAC,SAAS,WAAW,cAAc,QAAO;AAAA,MAC9C;AAAA,IACJ;AAAA,IACA,SAAS;AAAA,MACL,YAAY;AAAA,QACR,EAAC,QAAQ,WAAW,cAAc,QAAO;AAAA,MAC7C;AAAA,IACJ;AAAA,IACA,OAAO;AAAA,MACH,YAAY;AAAA,QACR,EAAC,QAAQ,WAAW,cAAc,UAAS;AAAA,QAC3C,EAAC,QAAQ,OAAO,cAAc,QAAO;AAAA,MACzC;AAAA,IACJ;AAAA,IACA,SAAS,EAAC,YAAY,CAAC,EAAC;AAAA,EAC5B;AACA,MAAI,OAAO,mBAAmB,QAAW;AACrC,QAAI,OAAO,eAAe,UAAW,SAAQ,QAAQ,EAAC,KAAK,OAAO,gBAAgB,UAAmB;AACrG,QAAI,OAAO,eAAe,aAAa,OAAO,eAAe,QAAS,SAAQ,iBAAiB,uBAAuB,OAAO,cAAc;AAAA,EAC/I;AACA,MAAI,OAAO,SAAS,GAAG;AACnB,YAAQ,UAAU,OAAO,SAAS;AAAA,EACtC;AACA,MAAI,OAAO,UAAU,GAAG;AACpB,YAAQ,WAAW,OAAO,UAAU;AAAA,EACxC;AACA,MAAI,OAAO,SAAS,GAAG;AACnB,YAAQ,UAAU,OAAO,SAAS;AAAA,EACtC;AACA,MAAI,OAAO,OAAO,GAAG;AACjB,YAAQ,QAAQ,OAAO,OAAO;AAAA,EAClC;AACA,MAAI,OAAO,SAAS,SAAS;AACzB,YAAQ,OAAO,aAAa,OAAO,OAAO;AAAA,EAC9C;AACA,MAAI,OAAO,SAAS,WAAY,SAAQ,UAAU,gBAAgB,OAAO,OAAO;AAChF,SAAO;AAAA,IACH,MAAM,OAAO,QAAQ;AAAA,IACrB,MAAM,OAAO,MAAM,OAAO,MAAM;AAAA,IAChC,QAAQ,OAAO,QAAQ;AAAA,IACvB,KAAK,OAAO,eAAe;AACvB,UAAI,OAAO,SAAS,iBAAiB,YAAY,MAAM;AACnD,mBAAW,OAAO;AAAA,UACd,MAAM,OAAO,QAAQ,gBAAgB,SAAS;AAAA,UAC9C,SAAS;AAAA,YACL,WAAW,OAAO,QAAQ,gBAAgB,WAAW,KAA0B,EAAC,QAAQ,YAAW;AAAA,UACvG;AAAA,UACA,SAAS,OAAM,QAA4B;AACvC,gBAAI,QAAQ,MAAM,QAAQ,aAAa,gBAAgB;AACnD,sBAAQ,KAAK,OAAO,WAAW,IAAI;AAAA,YACvC;AACA,kBAAM,YAAY,MAAM,2DAAwC;AAChE,mBAAO,MAAM,SAAS,GAAG;AAAA,UAC7B;AAAA,QACJ,CAAC;AAAA,MACL;AAAA,IACJ;AAAA,IACA;AAAA,EAEJ;AACJ;;;ACrNA,SAAQ,aAAAC,kBAAgB;AAEjB,SAASC,QAAO,QAAgC;AACnD,SAAO,IAAI,eAAe,eAAe,MAAM,CAAC;AACpD;AAEO,SAAS,kBAAkB,QAAkE;AAChG,EAAAD,WAAU,QAAQ,UAAU,YAAY,MAAM,CAAC;AACnD;",
|
|
4
|
+
"sourcesContent": ["import * as GatewayLogging from '@interopio/gateway/logging/core';\n\nexport import Logger = GatewayLogging.Logger;\n\nexport default function getLogger(name: string): Logger {\n return GatewayLogging.getLogger(`gateway.server.${name}`);\n}\n\n// This function is used to ensure that RegExp objects are displayed correctly when logging.\nexport function regexAwareReplacer<T>(_key: string, value: T): string | T {\n return value instanceof RegExp ? value.toString() : value;\n}\n", "import * as ws from 'ws';\nimport getLogger from '../../../logger.js';\nimport {IOGateway} from '@interopio/gateway';\nimport GatewayEncoders = IOGateway.Encoding;\n\nimport type {ServerWebSocketHandler} from '../../../../types/web/server';\n\nconst logger = getLogger('mesh.ws.broker');\n\ntype Command =\n // client to broker\n { type: 'hello', 'node-id': string }\n | { type: 'bye', 'node-id': string }\n | { type: 'data', from: string, to: 'all' | string}\n // broker to client\n | { type: 'node-added', 'node-id': string, 'new-node': string }\n | { type: 'node-removed', 'node-id': string, 'removed-node': string }\n\n ;\n\n\nfunction broadcastNodeAdded(nodes: NodeSockets, newSocket: ws.WebSocket, newNodeId: string) {\n Object.entries(nodes.nodes).forEach(([nodeId, socket]) => {\n if (nodeId !== newNodeId) {\n newSocket.send(codec.encode({type: 'node-added', 'node-id': newNodeId, \"new-node\": nodeId}));\n socket.send(codec.encode({type: 'node-added', 'node-id': nodeId, \"new-node\": newNodeId}));\n }\n });\n}\n\nfunction broadcastNodeRemoved(nodes: NodeSockets, removedNodeId: string) {\n Object.entries(nodes.nodes).forEach(([nodeId, socket]) => {\n if (nodeId !== removedNodeId) {\n socket.send(codec.encode({type: 'node-removed', 'node-id': nodeId, \"removed-node\": removedNodeId}));\n }\n });\n}\n\nfunction onOpen(connectedNodes: NodeSockets, logPrefix: string) {\n logger.info(`${logPrefix}connection accepted`);\n}\n\nfunction onClose(connectedNodes: NodeSockets, logPrefix: string, code: number, reason: string): void {\n logger.info(`${logPrefix}connection closed [${code}](${reason})`);\n const nodeIds = connectedNodes.sockets[logPrefix];\n if (nodeIds) {\n delete connectedNodes.sockets[logPrefix];\n for (const nodeId of nodeIds) {\n delete connectedNodes.nodes[nodeId];\n }\n for (const nodeId of nodeIds) {\n broadcastNodeRemoved(connectedNodes, nodeId);\n }\n }\n}\n\nfunction processMessage(connectedNodes: NodeSockets, socket: ws.WebSocket, key: string, msg: Command) {\n switch (msg.type) {\n case 'hello': {\n const nodeId = msg['node-id'];\n connectedNodes.nodes[nodeId] = socket;\n connectedNodes.sockets[key] = connectedNodes.sockets[key] ?? [];\n connectedNodes.sockets[key].push(nodeId);\n logger.info(`[${key}] node ${nodeId} added.`);\n broadcastNodeAdded(connectedNodes, socket, nodeId);\n break;\n }\n case 'bye': {\n const nodeId = msg[\"node-id\"];\n delete connectedNodes[nodeId];\n logger.info(`[${key}] node ${nodeId} removed.`);\n broadcastNodeRemoved(connectedNodes, nodeId);\n break;\n }\n case 'data': {\n const sourceNodeId = msg.from;\n const targetNodeId = msg.to;\n if ('all' === targetNodeId) {\n Object.entries(connectedNodes.nodes).forEach(([nodeId, socket]) => {\n if (nodeId !== sourceNodeId) {\n socket.send(codec.encode(msg));\n }\n });\n }\n else {\n const socket = connectedNodes.nodes[targetNodeId];\n if (socket) {\n socket.send(codec.encode(msg));\n }\n else {\n logger.warn(`unable to send to node ${targetNodeId} message ${JSON.stringify(msg)}`);\n }\n }\n break;\n }\n default: {\n logger.warn(`[${key}] ignoring unknown message ${JSON.stringify(msg)}`);\n break;\n }\n }\n}\n\nconst codec = GatewayEncoders.transit<Command>({\n keywordize: new Map<string, GatewayEncoders.KeywordizeCommand>([\n ['/type', '*'],\n ['/message/body/type', '*'],\n ['/message/origin', '*'],\n ['/message/receiver/type', '*'],\n ['/message/source/type', '*'],\n ['/message/body/type', '*'],\n ])\n});\n\nfunction onMessage(connectedNodes: NodeSockets, socket: ws.WebSocket, logPrefix: string, msg: string): void {\n try {\n const decoded = codec.decode(msg);\n if (logger.enabledFor('debug')) {\n logger.debug(`${logPrefix}processing msg ${JSON.stringify(decoded)}`);\n }\n processMessage(connectedNodes, socket, logPrefix, decoded);\n } catch (ex) {\n logger.error(`${logPrefix}unable to process message`, ex);\n }\n}\n\nclass WebsocketBroker {\n constructor(private readonly server: ws.WebSocketServer) {\n }\n\n async close() {\n this.server.close();\n }\n}\ntype NodeSockets = {nodes: {[nodeId: string]: ws.WebSocket}, sockets: {[socket: string]: string[]}};\n\nasync function create(environment: {endpoint: string}): Promise<ServerWebSocketHandler> {\n const connectedNodes: NodeSockets = {nodes: {}, sockets: {}};\n logger.info(`mesh server is listening`);\n\n return async ({socket, handshake}) => {\n const logPrefix = handshake.logPrefix!;\n onOpen(connectedNodes, logPrefix);\n socket.on('error', (err: Error) => {\n logger.error(`${logPrefix}websocket error: ${err}`, err);\n });\n socket.on('message', (data, _isBinary) => {\n if (Array.isArray(data)) {\n data = Buffer.concat(data);\n }\n onMessage(connectedNodes, socket, logPrefix, data as unknown as string);\n });\n socket.on('close', (code, reason) => {\n onClose(connectedNodes, logPrefix, code, reason as unknown as string);\n });\n };\n}\n\nexport default create;\n", "import {LogInfo, LogLevel} from '@interopio/gateway-server/gateway-ent';\nimport * as IOGatewayLogging from '@interopio/gateway/logging/core';\nimport {format} from 'node:util';\n\nclass LogInfoAdapter implements LogInfo {\n readonly #event: IOGatewayLogging.LogEvent;\n #parsed?: { err?: Error, msg: string };\n #timestamp?: string;\n #output?: string;\n\n\n constructor(event: IOGatewayLogging.LogEvent) {\n this.#event = event;\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 }): IOGatewayLogging.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: IOGatewayLogging.LogConfig = {level};\n const appenderFn = config?.appender;\n if (appenderFn) {\n result.appender = (event: IOGatewayLogging.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 type { GatewayConfig, MetricsPublisherConfig } from '../../../types/gateway-ent';\nimport type { GatewayServer } from '../../../gateway-server';\nimport type { OriginFilters } from '../../../types/web/server';\nimport type { AuthorizationRule } from '../../../types/auth';\nimport { IOGateway } from '@interopio/gateway';\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 }\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 }\n else {\n // unsupported predefined type\n }\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}\n\ntype GatewayCluster = Required<GatewayConfig>['cluster'];\ntype P2P = Required<GatewayCluster>['p2p'];\n\nfunction trimTrailingSlash(url?: string): string | undefined {\n return url?.endsWith('/') ? url.slice(0, -1) : url;\n}\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 = trimTrailingSlash(legacyDirectory.config?.directory_uri)!;\n }\n else {\n directory = { uri: trimTrailingSlash(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) {\n mesh.node = legacy.configuration.node_id;\n }\n if (legacy?.type === 'broker') {\n mesh.broker = { endpoint: legacy.broker?.endpoint ?? '<unresolved>' };\n }\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}\n\nexport function toServerConfig(config: GatewayConfig): GatewayServer.ServerConfig {\n const gateway: GatewayServer.ServerConfig[\"gateway\"] = {\n route: config.route,\n maxConnections: config.limits?.max_connections,\n origins: config.security?.origin_filters as OriginFilters,\n authorize: config['authorize'] as AuthorizationRule ?? { access: 'permitted' },\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) {\n gateway.token = { ttl: config.authentication?.token_ttl as number };\n }\n if (config.authentication.available || config.authentication.default) {\n gateway.authentication = toAuthenticationConfig(config.authentication);\n }\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 if (config.metrics?.publishers) {\n gateway.metrics = toMetricsConfig(config.metrics);\n }\n return {\n port: config.port ?? 3434,\n host: config.ip ?? config['host'] as string,\n cors: config['cors'] === null ? undefined : config['cors'] ?? false,\n memory: config['memory'],\n app: async (configurer) => {\n if (config.cluster?.embedded_broker?.enabled === true) {\n configurer.socket({\n path: config.cluster.embedded_broker.route ?? '/mesh-broker',\n options: {\n authorize: config.cluster.embedded_broker['authorize'] as AuthorizationRule ?? { access: 'permitted' }\n },\n factory: async (env: { endpoint: string }) => {\n if (gateway.mesh?.broker?.endpoint === '<unresolved>') {\n gateway.mesh.broker.endpoint = env.endpoint;\n }\n const delegate = (await import('../../mesh/ws/broker/core.js')).default;\n return await delegate(env);\n }\n });\n }\n },\n gateway: gateway\n\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": ["getLogger", "socket", "getLogger", "IOGateway", "create"]
|
|
7
7
|
}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@interopio/gateway-server",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.14.0",
|
|
4
4
|
"keywords": [
|
|
5
5
|
"gateway",
|
|
6
6
|
"server",
|
|
@@ -75,7 +75,7 @@
|
|
|
75
75
|
"node": ">=20.10 || >= 22.12 || >= 24"
|
|
76
76
|
},
|
|
77
77
|
"dependencies": {
|
|
78
|
-
"@interopio/gateway": "^0.
|
|
78
|
+
"@interopio/gateway": "^0.17.0",
|
|
79
79
|
"ws": "^8.18.3",
|
|
80
80
|
"tough-cookie": "^6.0.0",
|
|
81
81
|
"http-cookie-agent": "^7.0.2"
|