@uns-kit/core 1.0.4 → 1.0.5

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.
@@ -0,0 +1 @@
1
+ {"version":3,"file":"app-config.d.ts","sourceRoot":"","sources":["../src/app-config.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"app-config.js","sourceRoot":"","sources":["../src/app-config.ts"],"names":[],"mappings":"","sourcesContent":["/* Auto-generated. Do not edit by hand. */\nexport type AppConfig = {\n uns: {\n graphql: string;\n rest: string;\n instanceMode?: \"wait\" | \"force\" | \"handover\";\n processName?: string | undefined;\n handover?: boolean;\n jwksWellKnownUrl?: string | undefined;\n kidWellKnownUrl?: string | undefined;\n env?: \"dev\" | \"staging\" | \"test\" | \"prod\";\n };\n input?: {\n host: string | ({\n /** Use the supplied host or IP address. */\n provider: \"inline\";\n /** Host or IP address that should be used directly. */\n value: string;\n } | {\n /** Resolve the host from an external mapping. */\n provider: \"external\";\n /** Identifier used when resolving the host from HostResolverOptions. */\n key: string;\n /** Allow the external host to be missing without throwing during resolution. */\n optional?: boolean | undefined;\n /** Fallback host when optional is true and the external entry is missing. */\n default?: string | undefined;\n } | {\n /** Resolve the host from local network interfaces. */\n provider: \"system\";\n /** Address family to return when scanning interfaces. */\n family?: \"IPv4\" | \"IPv6\";\n /** Specific interface to read (falls back to the first match when omitted). */\n interfaceName?: string | undefined;\n /** Allow the interface lookup to fail without throwing during resolution. */\n optional?: boolean | undefined;\n /** Fallback host/IP when optional is true and no interface matches. */\n default?: string | undefined;\n });\n username?: string | undefined;\n password?: (string | ({\n /** Load the secret from an environment variable. */\n provider: \"env\";\n /** Name of the environment variable to read. */\n key: string;\n /** Allow the variable to be absent without throwing during resolution. */\n optional?: boolean | undefined;\n /** Fallback value when optional is true and the variable is missing. */\n default?: string | undefined;\n } | {\n /** Load the secret from Infisical. */\n provider: \"infisical\";\n /** Secret folder path in Infisical, e.g. '/app/database'. */\n path: string;\n /** Secret key/name inside the given path. */\n key: string;\n /** Allow the secret to be absent without throwing during resolution. */\n optional?: boolean | undefined;\n /** Infisical environment override (defaults to current mode if omitted). */\n environment?: string | undefined;\n /** Optional Infisical project identifier when not using the default. */\n projectId?: string | undefined;\n /** Fallback value when the secret is missing and optional resolution is allowed. */\n default?: string | undefined;\n })) | undefined;\n clientId?: string | undefined;\n } | undefined;\n output?: {\n host: string | ({\n /** Use the supplied host or IP address. */\n provider: \"inline\";\n /** Host or IP address that should be used directly. */\n value: string;\n } | {\n /** Resolve the host from an external mapping. */\n provider: \"external\";\n /** Identifier used when resolving the host from HostResolverOptions. */\n key: string;\n /** Allow the external host to be missing without throwing during resolution. */\n optional?: boolean | undefined;\n /** Fallback host when optional is true and the external entry is missing. */\n default?: string | undefined;\n } | {\n /** Resolve the host from local network interfaces. */\n provider: \"system\";\n /** Address family to return when scanning interfaces. */\n family?: \"IPv4\" | \"IPv6\";\n /** Specific interface to read (falls back to the first match when omitted). */\n interfaceName?: string | undefined;\n /** Allow the interface lookup to fail without throwing during resolution. */\n optional?: boolean | undefined;\n /** Fallback host/IP when optional is true and no interface matches. */\n default?: string | undefined;\n });\n username?: string | undefined;\n password?: (string | ({\n /** Load the secret from an environment variable. */\n provider: \"env\";\n /** Name of the environment variable to read. */\n key: string;\n /** Allow the variable to be absent without throwing during resolution. */\n optional?: boolean | undefined;\n /** Fallback value when optional is true and the variable is missing. */\n default?: string | undefined;\n } | {\n /** Load the secret from Infisical. */\n provider: \"infisical\";\n /** Secret folder path in Infisical, e.g. '/app/database'. */\n path: string;\n /** Secret key/name inside the given path. */\n key: string;\n /** Allow the secret to be absent without throwing during resolution. */\n optional?: boolean | undefined;\n /** Infisical environment override (defaults to current mode if omitted). */\n environment?: string | undefined;\n /** Optional Infisical project identifier when not using the default. */\n projectId?: string | undefined;\n /** Fallback value when the secret is missing and optional resolution is allowed. */\n default?: string | undefined;\n })) | undefined;\n clientId?: string | undefined;\n } | undefined;\n infra: {\n host: string | ({\n /** Use the supplied host or IP address. */\n provider: \"inline\";\n /** Host or IP address that should be used directly. */\n value: string;\n } | {\n /** Resolve the host from an external mapping. */\n provider: \"external\";\n /** Identifier used when resolving the host from HostResolverOptions. */\n key: string;\n /** Allow the external host to be missing without throwing during resolution. */\n optional?: boolean | undefined;\n /** Fallback host when optional is true and the external entry is missing. */\n default?: string | undefined;\n } | {\n /** Resolve the host from local network interfaces. */\n provider: \"system\";\n /** Address family to return when scanning interfaces. */\n family?: \"IPv4\" | \"IPv6\";\n /** Specific interface to read (falls back to the first match when omitted). */\n interfaceName?: string | undefined;\n /** Allow the interface lookup to fail without throwing during resolution. */\n optional?: boolean | undefined;\n /** Fallback host/IP when optional is true and no interface matches. */\n default?: string | undefined;\n });\n username?: string | undefined;\n password?: (string | ({\n /** Load the secret from an environment variable. */\n provider: \"env\";\n /** Name of the environment variable to read. */\n key: string;\n /** Allow the variable to be absent without throwing during resolution. */\n optional?: boolean | undefined;\n /** Fallback value when optional is true and the variable is missing. */\n default?: string | undefined;\n } | {\n /** Load the secret from Infisical. */\n provider: \"infisical\";\n /** Secret folder path in Infisical, e.g. '/app/database'. */\n path: string;\n /** Secret key/name inside the given path. */\n key: string;\n /** Allow the secret to be absent without throwing during resolution. */\n optional?: boolean | undefined;\n /** Infisical environment override (defaults to current mode if omitted). */\n environment?: string | undefined;\n /** Optional Infisical project identifier when not using the default. */\n projectId?: string | undefined;\n /** Fallback value when the secret is missing and optional resolution is allowed. */\n default?: string | undefined;\n })) | undefined;\n clientId?: string | undefined;\n };\n devops?: {\n provider?: string | undefined;\n organization: string;\n project?: string | undefined;\n } | undefined;\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"initialize.js","sourceRoot":"","sources":["../../src/tools/initialize.ts"],"names":[],"mappings":"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","sourcesContent":["import * as azdev from \"azure-devops-node-api\";\nimport * as ga from \"azure-devops-node-api/GitApi\";\nimport { GitRepository } from \"azure-devops-node-api/interfaces/TfvcInterfaces\";\nimport chalk from \"chalk\";\nimport { readFile } from \"fs/promises\";\nimport readline from \"node:readline\";\nimport * as path from \"path\";\nimport { CleanOptions, SimpleGit, simpleGit } from \"simple-git\";\nimport fs from \"fs-extra\";\nimport { basePath } from \"./base-path.js\";\n\n\nconst git: SimpleGit = simpleGit(\"./\").clean(CleanOptions.FORCE);\n\nexport const packageJsonPath = path.join(basePath, \"package.json\");\nconst orgUrl = \"https://example-org@dev.azure.com/example-org\";\n\nconst rl = readline.createInterface({\n input: process.stdin,\n output: process.stdout,\n});\n\nlet token: string = \"\";\nconst packageJson = JSON.parse(await readFile(packageJsonPath, \"utf8\"));\nconst repoName: string = packageJson.name;\n\nasync function run() {\n let repos: GitRepository[];\n let gitApi: ga.IGitApi;\n const project = \"example-project\";\n try {\n const authHandler = azdev.getPersonalAccessTokenHandler(token);\n const connection = new azdev.WebApi(orgUrl, authHandler);\n gitApi = await connection.getGitApi();\n repos = await gitApi.getRepositories(project); \n } catch (error) {\n console.error(\"Your AZURE_PAT environment variable has probably expired.\");\n console.log(\"Please update your AZURE_PAT environment with a new one on.\");\n console.log(\"You can create a new one at[https://dev.azure.com/example-org/_usersSettings/tokens]\");\n }\n\n if (repos.filter((x) => x.name == repoName).length > 0) {\n console.log(\n chalk.red.bold(\n `Error: Repository ${repoName} in project ${project} already exists.`,\n ),\n );\n } else {\n process.stdout.write(`Create ${repoName} in project ${project}`);\n try {\n await gitApi.createRepository({ name: repoName }, project);\n console.log(chalk.green.bold(` ... OK`));\n } catch (error) {\n console.error(chalk.red.bold(`\\n${error}`));\n }\n\n process.stdout.write(`Initialize local git repository on branch master`);\n try {\n await git.init();\n await git.checkoutLocalBranch(\"master\");\n await git.add(\".\");\n await git.commit(\"Initial commit\");\n console.log(chalk.green.bold(` ... OK`));\n } catch (error) {\n console.error(chalk.red.bold(`\\n${error}`));\n }\n\n process.stdout.write(`Add remote origin.`);\n try {\n await git.remote([\n \"add\",\n \"origin\",\n `git@ssh.dev.azure.com:v3/example-org/example-project/${repoName}`,\n ]);\n console.log(chalk.green.bold(` ... OK`));\n } catch (error) {\n console.error(chalk.red.bold(`\\n${error}`));\n }\n\n process.stdout.write(`Push master to remote`);\n try {\n await git.push(\"origin\", \"master\");\n console.log(chalk.green.bold(` ... OK`));\n } catch (error) {\n console.error(chalk.red.bold(`\\n${error}`));\n }\n\n process.stdout.write(`Create default config.json from config-template.json`);\n try {\n fs.copyFileSync(path.join(basePath,'config-template.json'), path.join(basePath,'config.json'));\n console.log(chalk.green.bold(` ... OK`));\n } catch (error) {\n console.error(chalk.red.bold(`\\n${error}`));\n }\n\n console.log(\n chalk.green.bold(\n `\\nNow you can add pipeline for ${repoName} in Azure DevOps pipelines for the project ${project}.`,\n ),\n );\n }\n}\n\nconsole.log(chalk.green.bold(`Create new RTT: ${repoName}\\n`));\n\nconst envPat = process.env.AZURE_PAT;\nif (envPat && envPat.length > 10) {\n rl.close();\n console.log(\"Using PAT from your AZURE_PAT environment\");\n token = envPat;\n run();\n} else {\n console.log(\"Could not find AZURE_PAT environment.\");\n rl.question(\n `Please enter your PAT, you can create one at [https://dev.azure.com/example-org/_usersSettings/tokens]: `,\n (newToken) => {\n rl.close();\n token = newToken;\n run();\n },\n ); \n}\n"]}
1
+ {"version":3,"file":"initialize.js","sourceRoot":"","sources":["../../src/tools/initialize.ts"],"names":[],"mappings":"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","sourcesContent":["import * as azdev from \"azure-devops-node-api\";\nimport * as ga from \"azure-devops-node-api/GitApi\";\nimport { GitRepository } from \"azure-devops-node-api/interfaces/TfvcInterfaces\";\nimport chalk from \"chalk\";\nimport { readFile } from \"fs/promises\";\nimport readline from \"node:readline\";\nimport * as path from \"path\";\nimport { CleanOptions, SimpleGit, simpleGit } from \"simple-git\";\nimport fs from \"fs-extra\";\nimport { basePath } from \"./base-path.js\";\n\n\nconst git: SimpleGit = simpleGit(\"./\").clean(CleanOptions.FORCE);\n\nexport const packageJsonPath = path.join(basePath, \"package.json\");\nconst orgUrl = \"https://sijit@dev.azure.com/sijit\";\n\nconst rl = readline.createInterface({\n input: process.stdin,\n output: process.stdout,\n});\n\nlet token: string = \"\";\nconst packageJson = JSON.parse(await readFile(packageJsonPath, \"utf8\"));\nconst repoName: string = packageJson.name;\n\nasync function run() {\n let repos: GitRepository[];\n let gitApi: ga.IGitApi;\n const project = \"industry40\";\n try {\n const authHandler = azdev.getPersonalAccessTokenHandler(token);\n const connection = new azdev.WebApi(orgUrl, authHandler);\n gitApi = await connection.getGitApi();\n repos = await gitApi.getRepositories(project); \n } catch (error) {\n console.error(\"Your AZURE_PAT environment variable has probably expired.\");\n console.log(\"Please update your AZURE_PAT environment with a new one on.\");\n console.log(\"You can create a new one at[https://dev.azure.com/sijit/_usersSettings/tokens]\");\n }\n\n if (repos.filter((x) => x.name == repoName).length > 0) {\n console.log(\n chalk.red.bold(\n `Error: Repository ${repoName} in project ${project} already exists.`,\n ),\n );\n } else {\n process.stdout.write(`Create ${repoName} in project ${project}`);\n try {\n await gitApi.createRepository({ name: repoName }, project);\n console.log(chalk.green.bold(` ... OK`));\n } catch (error) {\n console.error(chalk.red.bold(`\\n${error}`));\n }\n\n process.stdout.write(`Initialize local git repository on branch master`);\n try {\n await git.init();\n await git.checkoutLocalBranch(\"master\");\n await git.add(\".\");\n await git.commit(\"Initial commit\");\n console.log(chalk.green.bold(` ... OK`));\n } catch (error) {\n console.error(chalk.red.bold(`\\n${error}`));\n }\n\n process.stdout.write(`Add remote origin.`);\n try {\n await git.remote([\n \"add\",\n \"origin\",\n `git@ssh.dev.azure.com:v3/sijit/industry40/${repoName}`,\n ]);\n console.log(chalk.green.bold(` ... OK`));\n } catch (error) {\n console.error(chalk.red.bold(`\\n${error}`));\n }\n\n process.stdout.write(`Push master to remote`);\n try {\n await git.push(\"origin\", \"master\");\n console.log(chalk.green.bold(` ... OK`));\n } catch (error) {\n console.error(chalk.red.bold(`\\n${error}`));\n }\n\n process.stdout.write(`Create default config.json from config-template.json`);\n try {\n fs.copyFileSync(path.join(basePath,'config-template.json'), path.join(basePath,'config.json'));\n console.log(chalk.green.bold(` ... OK`));\n } catch (error) {\n console.error(chalk.red.bold(`\\n${error}`));\n }\n\n console.log(\n chalk.green.bold(\n `\\nNow you can add pipeline for ${repoName} in Azure DevOps pipelines for the project ${project}.`,\n ),\n );\n }\n}\n\nconsole.log(chalk.green.bold(`Create new RTT: ${repoName}\\n`));\n\nconst envPat = process.env.AZURE_PAT;\nif (envPat && envPat.length > 10) {\n rl.close();\n console.log(\"Using PAT from your AZURE_PAT environment\");\n token = envPat;\n run();\n} else {\n console.log(\"Could not find AZURE_PAT environment.\");\n rl.question(\n `Please enter your PAT, you can create one at [https://dev.azure.com/sijit/_usersSettings/tokens]: `,\n (newToken) => {\n rl.close();\n token = newToken;\n run();\n },\n ); \n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"update-tools.js","sourceRoot":"","sources":["../../src/tools/update-tools.ts"],"names":[],"mappings":"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","sourcesContent":["import { CleanOptions, SimpleGit, simpleGit } from \"simple-git\";\nimport { basePath } from \"./base-path.js\";\nimport readline from \"node:readline\";\nimport * as path from \"path\";\nimport chalk from \"chalk\";\nimport fs from \"fs-extra\";\nimport { execSync } from \"child_process\";\n\n\nconst rl = readline.createInterface({\n input: process.stdin,\n output: process.stdout,\n});\n\nconst git: SimpleGit = simpleGit(\"./\").clean(CleanOptions.FORCE);\n\ntry {\n await main();\n rl.close();\n} catch (error) {\n console.log(chalk.red.bold(`\\n${error}`));\n rl.close();\n}\n\nasync function main() {\n const tmpRtt = path.join(basePath, \"/tmp-rtt\");\n try {\n console.log(`Pull template-ts-nodejs into tmp-rtt`);\n await git.clone(\"git@ssh.dev.azure.com:v3/example-org/example-project/template-uns-rtt\", tmpRtt);\n } catch (error) {\n console.error(chalk.red.bold(`exec error: ${error}`)); \n return;\n }\n\n try {\n console.log(`Overwrite tools`);\n fs.copySync(path.join(tmpRtt, \"/src/tools\"), path.join(basePath, \"/src/tools\"), {overwrite: true});\n } catch (error) {\n console.error(chalk.red.bold(`exec error: ${error}`)); \n return;\n }\n\n // Update library version JSON at repo root from template\n try {\n const srcJson = path.join(tmpRtt, 'uns-library.json');\n const dstJson = path.join(basePath, 'uns-library.json');\n if (fs.existsSync(srcJson)) {\n fs.copyFileSync(srcJson, dstJson);\n const ver = JSON.parse(fs.readFileSync(srcJson, 'utf8')).version;\n console.log(`Updated uns-library.json -> ${ver}`);\n } else {\n // Fallback for older templates: synthesize from package.json\n const tmpPackageJsonPath = path.join(tmpRtt, 'package.json');\n const tmpPackageJson = JSON.parse(fs.readFileSync(tmpPackageJsonPath, 'utf8'));\n const payload = JSON.stringify({ name: tmpPackageJson.name, version: tmpPackageJson.version }, null, 2);\n fs.writeFileSync(dstJson, payload + \"\\n\", 'utf8');\n console.log(`Updated uns-library.json -> ${tmpPackageJson.version}`);\n }\n } catch (error) {\n console.error(chalk.red.bold(`exec error: ${error}`));\n return;\n }\n\n try {\n console.log(`Running update-rtt from tools`);\n // Propagate any CLI args to update-rtt (e.g., --dry-run)\n const args = process.argv.slice(2).join(\" \");\n // Run the TypeScript tool directly to avoid relying on a successful build\n execSync(`tsx ./src/tools/update-rtt.ts ${args}`.trim(), { stdio: 'inherit' });\n } catch (error) {\n console.error(chalk.red.bold(`exec error: ${error}`)); \n return; \n }\n}\n"]}
1
+ {"version":3,"file":"update-tools.js","sourceRoot":"","sources":["../../src/tools/update-tools.ts"],"names":[],"mappings":"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","sourcesContent":["import { CleanOptions, SimpleGit, simpleGit } from \"simple-git\";\nimport { basePath } from \"./base-path.js\";\nimport readline from \"node:readline\";\nimport * as path from \"path\";\nimport chalk from \"chalk\";\nimport fs from \"fs-extra\";\nimport { execSync } from \"child_process\";\n\n\nconst rl = readline.createInterface({\n input: process.stdin,\n output: process.stdout,\n});\n\nconst git: SimpleGit = simpleGit(\"./\").clean(CleanOptions.FORCE);\n\ntry {\n await main();\n rl.close();\n} catch (error) {\n console.log(chalk.red.bold(`\\n${error}`));\n rl.close();\n}\n\nasync function main() {\n const tmpRtt = path.join(basePath, \"/tmp-rtt\");\n try {\n console.log(`Pull template-ts-nodejs into tmp-rtt`);\n await git.clone(\"git@ssh.dev.azure.com:v3/sijit/industry40/template-uns-rtt\", tmpRtt);\n } catch (error) {\n console.error(chalk.red.bold(`exec error: ${error}`)); \n return;\n }\n\n try {\n console.log(`Overwrite tools`);\n fs.copySync(path.join(tmpRtt, \"/src/tools\"), path.join(basePath, \"/src/tools\"), {overwrite: true});\n } catch (error) {\n console.error(chalk.red.bold(`exec error: ${error}`)); \n return;\n }\n\n // Update library version JSON at repo root from template\n try {\n const srcJson = path.join(tmpRtt, 'uns-library.json');\n const dstJson = path.join(basePath, 'uns-library.json');\n if (fs.existsSync(srcJson)) {\n fs.copyFileSync(srcJson, dstJson);\n const ver = JSON.parse(fs.readFileSync(srcJson, 'utf8')).version;\n console.log(`Updated uns-library.json -> ${ver}`);\n } else {\n // Fallback for older templates: synthesize from package.json\n const tmpPackageJsonPath = path.join(tmpRtt, 'package.json');\n const tmpPackageJson = JSON.parse(fs.readFileSync(tmpPackageJsonPath, 'utf8'));\n const payload = JSON.stringify({ name: tmpPackageJson.name, version: tmpPackageJson.version }, null, 2);\n fs.writeFileSync(dstJson, payload + \"\\n\", 'utf8');\n console.log(`Updated uns-library.json -> ${tmpPackageJson.version}`);\n }\n } catch (error) {\n console.error(chalk.red.bold(`exec error: ${error}`));\n return;\n }\n\n try {\n console.log(`Running update-rtt from tools`);\n // Propagate any CLI args to update-rtt (e.g., --dry-run)\n const args = process.argv.slice(2).join(\" \");\n // Run the TypeScript tool directly to avoid relying on a successful build\n execSync(`tsx ./src/tools/update-rtt.ts ${args}`.trim(), { stdio: 'inherit' });\n } catch (error) {\n console.error(chalk.red.bold(`exec error: ${error}`)); \n return; \n }\n}\n"]}
@@ -90,9 +90,9 @@ export interface IUnsCommand {
90
90
  export interface IMqttMessage {
91
91
  topic: UnsTopics;
92
92
  attribute: UnsAttribute;
93
- asset?: UnsAsset;
94
- objectType?: UnsObjectType;
95
- objectId?: UnsObjectId;
93
+ asset: UnsAsset;
94
+ objectType: UnsObjectType;
95
+ objectId: UnsObjectId;
96
96
  description?: string;
97
97
  tags?: UnsTags[];
98
98
  packet: IUnsPacket;
@@ -1 +1 @@
1
- {"version":3,"file":"uns-interfaces.d.ts","sourceRoot":"","sources":["../../src/uns/uns-interfaces.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"uns-interfaces.d.ts","sourceRoot":"","sources":["../../src/uns/uns-interfaces.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"uns-interfaces.js","sourceRoot":"","sources":["../../src/uns/uns-interfaces.ts"],"names":[],"mappings":"AASA,MAAM,UAAU,aAAa,CAAC,KAAa;IACzC,MAAM,YAAY,GAAG,+CAA+C,CAAC;IACrE,OAAO,YAAY,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;AAClC,CAAC;AAID,MAAM,CAAC,MAAM,UAAU,GAAG,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC","sourcesContent":["import { UnsAttributeType } from \"../graphql/schema.js\";\nimport { MeasurementUnit } from \"./uns-measurements.js\";\nimport { UnsTags } from \"./uns-tags.js\";\nimport type { UnsObjectId, UnsObjectType } from \"./uns-object.js\";\nimport type { UnsAsset } from \"./uns-asset.js\";\nimport { UnsTopics } from \"./uns-topics.js\";\nimport { knownUnsAttributes, type KnownUnsAttributeName } from \"./uns-attributes.js\";\n\nexport type ISO8601 = `${number}-${string}-${string}T${string}:${string}:${string}.${string}Z`;\nexport function isIOS8601Type(value: string): value is ISO8601 {\n const iso8601Regex = /^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}\\.\\d{3}Z$/;\n return iso8601Regex.test(value);\n}\n// Known attribute names (with IntelliSense) while still allowing arbitrary strings.\nexport type UnsAttribute = KnownUnsAttributeName | (string & {});\n\nexport const valueTypes = [\"string\", \"number\"];\nexport type ValueTypeString = typeof valueTypes[number];\nexport type ValueType = string | number;\n\nexport interface IUnsParameters {\n mqttSubToTopics?: string | string[];\n username?: string;\n password?: string;\n mqttSSL?: boolean;\n publishThrottlingDelay?: number; // Delay in milliseconds; default is 1ms\n subscribeThrottlingDelay?: number; // Delay in milliseconds; default is 1ms\n}\n\nexport interface IUnsProcessParameters {\n processName?: string | undefined;\n mqttSubToTopics?: string | string[];\n username?: string;\n password?: string;\n mqttSSL?: boolean;\n}\n\nexport interface UnsEvents {\n // Emitters in MqttProxy, UnsMqttProxy\n input: { topic: string; message: string, packet: any };\n mqttProxyStatus: { event: string, value: number, uom: MeasurementUnit, statusTopic: string };\n \n // Emitters in MqttProxy\n error: { code: number; message: string };\n \n // Emitters in UnsMqttProxy\n mqttWorker: { command: string, instanceName: string; batchSize: number, referenceHash: string };\n\n // Emitter in UnsCronProxy\n cronEvent: {};\n\n // Emitters in UnsApiProxy\n apiGetEvent: {req: any, res: any};\n\n // Emitters in UnsProxy\n unsProxyProducedTopics: { producedTopics: ITopicObject[], statusTopic: string };\n\n // Emitters in UnsProxy\n unsProxyProducedApiEndpoints: { producedApiEndpoints: IApiObject[], statusTopic: string };\n}\n\nexport interface IUnsExtendedData extends IUnsData {\n valueType: ValueTypeString;\n}\n\nexport interface IUnsData {\n time: ISO8601;\n value: ValueType;\n dataGroup?: string;\n uom?: MeasurementUnit;\n foreignEventKey?: string;\n}\n\nexport interface IUnsEvent {\n time: ISO8601;\n dataGroup?: string;\n details?: string;\n uniqueEventId?: string;\n}\n\nexport interface IUnsTable {\n time: ISO8601;\n values: Record<string, string | number | undefined | null>\n dataGroup?: string;\n}\n\nexport interface IUnsCommand {\n time: ISO8601;\n details?: string;\n}\n\nexport interface IMqttMessage {\n topic: UnsTopics;\n attribute: UnsAttribute;\n asset?: UnsAsset;\n objectType?: UnsObjectType;\n objectId?: UnsObjectId;\n description?: string;\n tags?: UnsTags[];\n packet: IUnsPacket;\n attributeNeedsPersistence?: boolean | null;\n}\n\n// This interface represents a packet for a UNS system\nexport interface IUnsPacket {\n // The message object of the packet\n message: IUnsExtendedMessage;\n \n // The HMAC signature of the message\n messageSignature?: string;\n\n // Automatically calculated interval between two packets in ms\n interval?: number;\n\n // Current library version\n readonly version: string;\n\n // Autogenerated sequence number\n sequenceId?: number;\n}\n\nexport interface IUnsPackatParameters {\n\n}\n\nexport interface IUnsMessage {\n command?: IUnsCommand;\n data?: IUnsData;\n event?: IUnsEvent;\n table?: IUnsTable;\n expiresAt?: ISO8601;\n createdAt?: ISO8601;\n}\n\nexport interface IUnsExtendedMessage extends IUnsMessage {\n data?: IUnsExtendedData;\n}\n\nexport interface ITopicObject {\n timestamp: string;\n attribute:string;\n attributeType: UnsAttributeType;\n topic:string;\n description:string;\n dataGroup:string;\n tags:string[] | null;\n attributeNeedsPersistence: boolean | null;\n asset?: UnsAsset;\n objectType?: UnsObjectType;\n objectId?: UnsObjectId;\n}\n\n// API Interfaces below\nexport interface IApiObject {\n timestamp: string;\n attribute:string;\n topic:string;\n attributeType: UnsAttributeType;\n apiDescription?: string; // Optional description for the API endpoint\n apiHost: string; // Hostname of the service\n apiEndpoint: string; // API endpoint for virtual topics\n apiSwaggerEndpoint: string; // Swagger endpoint for API documentation\n apiMethod: \"GET\" | \"POST\" | \"PUT\" | \"DELETE\"; // HTTP method for API endpoint\n apiQueryParams: QueryParamDef[]; // query parameters for the API endpoint\n}\n\nexport interface QueryParamDef {\n name: string;\n type: \"string\" | \"number\" | \"boolean\";\n required?: boolean;\n description?: string;\n}\n\nexport interface IApiProxyOptions {\n jwtSecret?: string;\n jwks?: {\n wellKnownJwksUrl: string;\n activeKidUrl?: string;\n cacheTtlMs?: number;\n algorithms?: (\"RS256\" | \"RS384\" | \"RS512\")[];\n };\n}\n\nexport interface IGetEndpointOptions {\n apiDescription?: string;\n tags?: string[];\n queryParams?: QueryParamDef[];\n}\n"]}
1
+ {"version":3,"file":"uns-interfaces.js","sourceRoot":"","sources":["../../src/uns/uns-interfaces.ts"],"names":[],"mappings":"AASA,MAAM,UAAU,aAAa,CAAC,KAAa;IACzC,MAAM,YAAY,GAAG,+CAA+C,CAAC;IACrE,OAAO,YAAY,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;AAClC,CAAC;AAID,MAAM,CAAC,MAAM,UAAU,GAAG,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC","sourcesContent":["import { UnsAttributeType } from \"../graphql/schema.js\";\nimport { MeasurementUnit } from \"./uns-measurements.js\";\nimport { UnsTags } from \"./uns-tags.js\";\nimport type { UnsObjectId, UnsObjectType } from \"./uns-object.js\";\nimport type { UnsAsset } from \"./uns-asset.js\";\nimport { UnsTopics } from \"./uns-topics.js\";\nimport { knownUnsAttributes, type KnownUnsAttributeName } from \"./uns-attributes.js\";\n\nexport type ISO8601 = `${number}-${string}-${string}T${string}:${string}:${string}.${string}Z`;\nexport function isIOS8601Type(value: string): value is ISO8601 {\n const iso8601Regex = /^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}\\.\\d{3}Z$/;\n return iso8601Regex.test(value);\n}\n// Known attribute names (with IntelliSense) while still allowing arbitrary strings.\nexport type UnsAttribute = KnownUnsAttributeName | (string & {});\n\nexport const valueTypes = [\"string\", \"number\"];\nexport type ValueTypeString = typeof valueTypes[number];\nexport type ValueType = string | number;\n\nexport interface IUnsParameters {\n mqttSubToTopics?: string | string[];\n username?: string;\n password?: string;\n mqttSSL?: boolean;\n publishThrottlingDelay?: number; // Delay in milliseconds; default is 1ms\n subscribeThrottlingDelay?: number; // Delay in milliseconds; default is 1ms\n}\n\nexport interface IUnsProcessParameters {\n processName?: string | undefined;\n mqttSubToTopics?: string | string[];\n username?: string;\n password?: string;\n mqttSSL?: boolean;\n}\n\nexport interface UnsEvents {\n // Emitters in MqttProxy, UnsMqttProxy\n input: { topic: string; message: string, packet: any };\n mqttProxyStatus: { event: string, value: number, uom: MeasurementUnit, statusTopic: string };\n \n // Emitters in MqttProxy\n error: { code: number; message: string };\n \n // Emitters in UnsMqttProxy\n mqttWorker: { command: string, instanceName: string; batchSize: number, referenceHash: string };\n\n // Emitter in UnsCronProxy\n cronEvent: {};\n\n // Emitters in UnsApiProxy\n apiGetEvent: {req: any, res: any};\n\n // Emitters in UnsProxy\n unsProxyProducedTopics: { producedTopics: ITopicObject[], statusTopic: string };\n\n // Emitters in UnsProxy\n unsProxyProducedApiEndpoints: { producedApiEndpoints: IApiObject[], statusTopic: string };\n}\n\nexport interface IUnsExtendedData extends IUnsData {\n valueType: ValueTypeString;\n}\n\nexport interface IUnsData {\n time: ISO8601;\n value: ValueType;\n dataGroup?: string;\n uom?: MeasurementUnit;\n foreignEventKey?: string;\n}\n\nexport interface IUnsEvent {\n time: ISO8601;\n dataGroup?: string;\n details?: string;\n uniqueEventId?: string;\n}\n\nexport interface IUnsTable {\n time: ISO8601;\n values: Record<string, string | number | undefined | null>\n dataGroup?: string;\n}\n\nexport interface IUnsCommand {\n time: ISO8601;\n details?: string;\n}\n\nexport interface IMqttMessage {\n topic: UnsTopics;\n attribute: UnsAttribute;\n asset: UnsAsset;\n objectType: UnsObjectType;\n objectId: UnsObjectId;\n description?: string;\n tags?: UnsTags[];\n packet: IUnsPacket;\n attributeNeedsPersistence?: boolean | null;\n}\n\n// This interface represents a packet for a UNS system\nexport interface IUnsPacket {\n // The message object of the packet\n message: IUnsExtendedMessage;\n \n // The HMAC signature of the message\n messageSignature?: string;\n\n // Automatically calculated interval between two packets in ms\n interval?: number;\n\n // Current library version\n readonly version: string;\n\n // Autogenerated sequence number\n sequenceId?: number;\n}\n\nexport interface IUnsPackatParameters {\n\n}\n\nexport interface IUnsMessage {\n command?: IUnsCommand;\n data?: IUnsData;\n event?: IUnsEvent;\n table?: IUnsTable;\n expiresAt?: ISO8601;\n createdAt?: ISO8601;\n}\n\nexport interface IUnsExtendedMessage extends IUnsMessage {\n data?: IUnsExtendedData;\n}\n\nexport interface ITopicObject {\n timestamp: string;\n attribute:string;\n attributeType: UnsAttributeType;\n topic:string;\n description:string;\n dataGroup:string;\n tags:string[] | null;\n attributeNeedsPersistence: boolean | null;\n asset?: UnsAsset;\n objectType?: UnsObjectType;\n objectId?: UnsObjectId;\n}\n\n// API Interfaces below\nexport interface IApiObject {\n timestamp: string;\n attribute:string;\n topic:string;\n attributeType: UnsAttributeType;\n apiDescription?: string; // Optional description for the API endpoint\n apiHost: string; // Hostname of the service\n apiEndpoint: string; // API endpoint for virtual topics\n apiSwaggerEndpoint: string; // Swagger endpoint for API documentation\n apiMethod: \"GET\" | \"POST\" | \"PUT\" | \"DELETE\"; // HTTP method for API endpoint\n apiQueryParams: QueryParamDef[]; // query parameters for the API endpoint\n}\n\nexport interface QueryParamDef {\n name: string;\n type: \"string\" | \"number\" | \"boolean\";\n required?: boolean;\n description?: string;\n}\n\nexport interface IApiProxyOptions {\n jwtSecret?: string;\n jwks?: {\n wellKnownJwksUrl: string;\n activeKidUrl?: string;\n cacheTtlMs?: number;\n algorithms?: (\"RS256\" | \"RS384\" | \"RS512\")[];\n };\n}\n\nexport interface IGetEndpointOptions {\n apiDescription?: string;\n tags?: string[];\n queryParams?: QueryParamDef[];\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"uns-gateway-server.d.ts","sourceRoot":"","sources":["../../src/uns-grpc/uns-gateway-server.ts"],"names":[],"mappings":"AA2BA,MAAM,WAAW,cAAc;IAC7B,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,OAAO,CAAC;CAChB;AAED,MAAM,WAAW,mBAAmB;IAClC,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAC7B,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,oBAAoB,CAAC,EAAE,MAAM,GAAG,OAAO,GAAG,UAAU,CAAC;IACrD,gBAAgB,CAAC,EAAE,OAAO,CAAC;CAC5B;AAmBD,qBAAa,gBAAgB;IAC3B,OAAO,CAAC,MAAM,CAA2B;IACzC,OAAO,CAAC,UAAU,CAAuC;IACzD,OAAO,CAAC,SAAS,CAA6B;IAC9C,OAAO,CAAC,UAAU,CAA6B;IAC/C,OAAO,CAAC,QAAQ,CAA4B;IAC5C,OAAO,CAAC,WAAW,CAAgC;IACnD,OAAO,CAAC,UAAU,CAAuB;IACzC,OAAO,CAAC,UAAU,CAA+B;IAEjD,OAAO,CAAC,SAAS,CAAS;IAC1B,OAAO,CAAC,UAAU,CAAS;IAC3B,OAAO,CAAC,UAAU,CAAiC;IACnD,OAAO,CAAC,kBAAkB,CAAS;IACnC,OAAO,CAAC,kBAAkB,CAAS;IAEtB,KAAK,CAChB,WAAW,CAAC,EAAE,MAAM,EACpB,IAAI,CAAC,EAAE;QACL,mBAAmB,CAAC,EAAE,MAAM,CAAC;QAC7B,cAAc,CAAC,EAAE,MAAM,CAAC;QACxB,oBAAoB,CAAC,EAAE,MAAM,GAAG,OAAO,GAAG,UAAU,CAAC;QACrD,gBAAgB,CAAC,EAAE,OAAO,CAAC;KAC5B,GACA,OAAO,CAAC,cAAc,CAAC;IAuE1B,OAAO,CAAC,cAAc;YAWR,OAAO;YA2EP,SAAS;IA8BvB,OAAO,CAAC,qBAAqB;YAaf,gBAAgB;YAiBhB,eAAe;YAgBf,cAAc;IAU5B,OAAO,CAAC,eAAe;YAKT,cAAc;YA4Bd,gBAAgB;IAc9B,OAAO,CAAC,aAAa;YA0BP,cAAc;YAwBd,KAAK;IAiDnB,OAAO,CAAC,cAAc;IAKT,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC;CAYvC;AAED,wBAAsB,eAAe,CAAC,YAAY,CAAC,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,mBAAmB,GAAG,OAAO,CAAC,cAAc,CAAC,CAGhH"}
1
+ {"version":3,"file":"uns-gateway-server.d.ts","sourceRoot":"","sources":["../../src/uns-grpc/uns-gateway-server.ts"],"names":[],"mappings":"AA4BA,MAAM,WAAW,cAAc;IAC7B,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,OAAO,CAAC;CAChB;AAED,MAAM,WAAW,mBAAmB;IAClC,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAC7B,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,oBAAoB,CAAC,EAAE,MAAM,GAAG,OAAO,GAAG,UAAU,CAAC;IACrD,gBAAgB,CAAC,EAAE,OAAO,CAAC;CAC5B;AAmBD,qBAAa,gBAAgB;IAC3B,OAAO,CAAC,MAAM,CAA2B;IACzC,OAAO,CAAC,UAAU,CAAuC;IACzD,OAAO,CAAC,SAAS,CAA6B;IAC9C,OAAO,CAAC,UAAU,CAA6B;IAC/C,OAAO,CAAC,QAAQ,CAA4B;IAC5C,OAAO,CAAC,WAAW,CAAgC;IACnD,OAAO,CAAC,UAAU,CAAuB;IACzC,OAAO,CAAC,UAAU,CAA+B;IAEjD,OAAO,CAAC,SAAS,CAAS;IAC1B,OAAO,CAAC,UAAU,CAAS;IAC3B,OAAO,CAAC,UAAU,CAAiC;IACnD,OAAO,CAAC,kBAAkB,CAAS;IACnC,OAAO,CAAC,kBAAkB,CAAS;IAEtB,KAAK,CAChB,WAAW,CAAC,EAAE,MAAM,EACpB,IAAI,CAAC,EAAE;QACL,mBAAmB,CAAC,EAAE,MAAM,CAAC;QAC7B,cAAc,CAAC,EAAE,MAAM,CAAC;QACxB,oBAAoB,CAAC,EAAE,MAAM,GAAG,OAAO,GAAG,UAAU,CAAC;QACrD,gBAAgB,CAAC,EAAE,OAAO,CAAC;KAC5B,GACA,OAAO,CAAC,cAAc,CAAC;IAuE1B,OAAO,CAAC,cAAc;YAWR,OAAO;YA8EP,SAAS;IA8BvB,OAAO,CAAC,qBAAqB;YAaf,gBAAgB;YAiBhB,eAAe;YAgBf,cAAc;IAU5B,OAAO,CAAC,eAAe;YAKT,cAAc;YA4Bd,gBAAgB;IAc9B,OAAO,CAAC,aAAa;YA0BP,cAAc;YAwBd,KAAK;IAiDnB,OAAO,CAAC,cAAc;IAKT,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC;CAYvC;AAED,wBAAsB,eAAe,CAAC,YAAY,CAAC,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,mBAAmB,GAAG,OAAO,CAAC,cAAc,CAAC,CAGhH"}
@@ -12,6 +12,7 @@ import { MessageMode } from "../uns-mqtt/uns-mqtt-proxy.js";
12
12
  import { UnsPacket } from "../uns/uns-packet.js";
13
13
  import { randomUUID } from "crypto";
14
14
  import { MqttTopicBuilder } from "../uns-mqtt/mqtt-topic-builder.js";
15
+ import { ObjectTypes } from "../uns/uns-object.js";
15
16
  const __filename = fileURLToPath(import.meta.url);
16
17
  const __dirname = path.dirname(__filename);
17
18
  const defaultGatewayProto = path.resolve(__dirname, "uns-gateway.proto");
@@ -176,6 +177,9 @@ export class UnsGatewayServer {
176
177
  description,
177
178
  tags,
178
179
  packet,
180
+ asset: "meter",
181
+ objectType: ObjectTypes.EnergyResource,
182
+ objectId: "main",
179
183
  attributeNeedsPersistence,
180
184
  };
181
185
  // delta mode if cumulative
@@ -1 +1 @@
1
- {"version":3,"file":"uns-gateway-server.js","sourceRoot":"","sources":["../../src/uns-grpc/uns-gateway-server.ts"],"names":[],"mappings":"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","sourcesContent":["import grpc from \"@grpc/grpc-js\";\nimport protoLoader from \"@grpc/proto-loader\";\nimport path from \"path\";\nimport getPort from \"get-port\";\nimport { readFileSync } from \"fs\";\nimport { fileURLToPath } from \"url\";\nimport { basePath } from \"../base-path.js\";\n\nimport logger from \"../logger.js\";\nimport { ConfigFile } from \"../config-file.js\";\nimport UnsProxyProcess from \"../uns/uns-proxy-process.js\";\nimport UnsMqttProxy, { MessageMode } from \"../uns-mqtt/uns-mqtt-proxy.js\";\nimport { IUnsMessage, IMqttMessage } from \"../uns/uns-interfaces.js\";\nimport { UnsPacket } from \"../uns/uns-packet.js\";\nimport { IApiProxyOptions, IGetEndpointOptions } from \"../uns/uns-interfaces.js\";\nimport { randomUUID } from \"crypto\";\nimport { MqttTopicBuilder } from \"../uns-mqtt/mqtt-topic-builder.js\";\nconst __filename = fileURLToPath(import.meta.url);\nconst __dirname = path.dirname(__filename);\n\nconst defaultGatewayProto = path.resolve(__dirname, \"uns-gateway.proto\");\nconst GATEWAY_PROTO = process.env.UNS_GATEWAY_PROTO\n ? path.resolve(process.cwd(), process.env.UNS_GATEWAY_PROTO)\n : defaultGatewayProto;\n\ntype GrpcServer = grpc.Server;\n\nexport interface GatewayAddress {\n address: string; // e.g. unix:/tmp/... or 0.0.0.0:PORT\n isUDS: boolean;\n}\n\nexport interface GatewayStartOptions {\n processNameOverride?: string;\n instanceSuffix?: string;\n instanceModeOverride?: \"wait\" | \"force\" | \"handover\";\n handoverOverride?: boolean;\n}\n\ntype UnsApiProxyLike = {\n event: { on(event: string, handler: (payload: any) => void): void };\n get(topic: string, attribute: string, options: IGetEndpointOptions): Promise<void>;\n unregister(topic: string, attribute: string, method: \"GET\" | \"POST\" | \"PUT\" | \"DELETE\"): Promise<void>;\n};\n\ntype UnsProxyProcessWithApi = UnsProxyProcess & {\n createApiProxy(instanceName: string, options: IApiProxyOptions): Promise<UnsApiProxyLike>;\n};\n\nconst requireHost = (value: unknown, pathLabel: string): string => {\n if (typeof value !== \"string\" || value.length === 0) {\n throw new Error(`Configuration value '${pathLabel}' is required and must resolve to a string host.`);\n }\n return value;\n};\n\nexport class UnsGatewayServer {\n private server: GrpcServer | null = null;\n private unsProcess: UnsProxyProcessWithApi | null = null;\n private mqttInput: UnsMqttProxy | null = null;\n private mqttOutput: UnsMqttProxy | null = null;\n private handlers: Set<Function> = new Set();\n private unsApiProxy: UnsApiProxyLike | null = null;\n private apiStreams: Set<any> = new Set();\n private pendingApi: Map<string, any> = new Map();\n\n private inputHost: string;\n private outputHost: string;\n private apiOptions: IApiProxyOptions | null = null;\n private outPublisherActive = false;\n private inSubscriberActive = false;\n\n public async start(\n desiredAddr?: string,\n opts?: {\n processNameOverride?: string;\n instanceSuffix?: string;\n instanceModeOverride?: \"wait\" | \"force\" | \"handover\";\n handoverOverride?: boolean;\n }\n ): Promise<GatewayAddress> {\n const packageDef = protoLoader.loadSync(GATEWAY_PROTO, {\n keepCase: true,\n longs: String,\n enums: String,\n defaults: true,\n oneofs: true,\n });\n const proto = grpc.loadPackageDefinition(packageDef) as any;\n\n // Load config and init UNS process + MQTT proxies\n const cfg = await ConfigFile.loadConfig();\n const processName = opts?.processNameOverride ?? cfg.uns.processName;\n const instanceMode = opts?.instanceModeOverride ?? cfg.uns.instanceMode;\n const handover = (typeof opts?.handoverOverride === \"boolean\") ? opts.handoverOverride : cfg.uns.handover;\n const suffix = opts?.instanceSuffix ? `-${opts.instanceSuffix}` : \"\";\n\n const infraHost = requireHost(cfg.infra?.host, \"infra.host\");\n this.unsProcess = new UnsProxyProcess(infraHost, { processName }) as UnsProxyProcessWithApi;\n // cache hosts/options; proxies created lazily on first use\n this.inputHost = requireHost(cfg.input?.host, \"input.host\");\n this.outputHost = requireHost(cfg.output?.host, \"output.host\");\n this.apiOptions = cfg.uns?.jwksWellKnownUrl\n ? { jwks: { wellKnownJwksUrl: cfg.uns.jwksWellKnownUrl, activeKidUrl: cfg.uns.kidWellKnownUrl } }\n : { jwtSecret: \"CHANGEME\" };\n\n const serviceImpl = {\n Publish: this.publish.bind(this),\n Subscribe: this.subscribe.bind(this),\n RegisterApiGet: this.registerApiGet.bind(this),\n UnregisterApiGet: this.unregisterApiGet.bind(this),\n ApiEventStream: this.apiEventStream.bind(this),\n Ready: this.ready.bind(this),\n };\n\n this.server = new grpc.Server();\n this.server.addService(proto.uns.UnsGateway.service, serviceImpl);\n\n const isUnix = process.platform !== \"win32\";\n let addr: string | null = desiredAddr || process.env.UNS_GATEWAY_ADDR || null;\n if (!addr) {\n if (isUnix) {\n const sanitizedProcess = MqttTopicBuilder.sanitizeTopicPart(this.getProcessName());\n const sock = `/tmp/${sanitizedProcess}-uns-gateway.sock`;\n addr = `unix:${sock}`;\n } else {\n const port = await getPort();\n addr = `0.0.0.0:${port}`;\n }\n }\n\n // If UDS and file exists, best-effort unlink (stale sock)\n if (addr.startsWith(\"unix:\")) {\n const fs = await import(\"fs\");\n const p = addr.slice(\"unix:\".length);\n try { if (fs.existsSync(p)) fs.unlinkSync(p); } catch {}\n }\n\n await new Promise<void>((resolve, reject) => {\n this.server!.bindAsync(addr!, grpc.ServerCredentials.createInsecure(), (err) => {\n if (err) return reject(err);\n // grpc-js automatically starts the server after bindAsync in recent versions\n // Calling start() is deprecated; omit to avoid warnings.\n logger.info(`UNS gRPC Gateway listening on ${addr}`);\n resolve();\n });\n });\n\n return { address: addr!, isUDS: addr!.startsWith(\"unix:\") };\n }\n\n private getProcessName(): string {\n try {\n const pkgPath = path.join(basePath, \"package.json\");\n const raw = readFileSync(pkgPath, \"utf8\");\n const pkg = JSON.parse(raw);\n return `${pkg.name}-${pkg.version}`;\n } catch {\n return `uns-gateway`;\n }\n }\n\n private async publish(call: any, callback: any) {\n try {\n await this.ensureMqttOutput();\n const req = call.request as any;\n if (!this.mqttOutput) throw new Error(\"Gateway not initialized\");\n\n const topic: string = req.topic;\n const attribute: string = req.attribute;\n const description: string = req.description ?? \"\";\n const tags: string[] = (req.tags ?? []) as string[];\n const attributeNeedsPersistence: boolean | null = req.attribute_needs_persistence ?? null;\n const valueIsCumulative: boolean = req.value_is_cumulative ?? false;\n\n let message: IUnsMessage | null = null;\n\n if (req.data) {\n const d = req.data;\n const time: string = d.time;\n const uom: string | undefined = d.uom || undefined;\n const dataGroup: string | undefined = d.data_group || undefined;\n const foreignEventKey: string | undefined = d.foreign_event_key || undefined;\n\n let value: any = undefined;\n if (typeof d.value_number === \"number\" && !Number.isNaN(d.value_number)) {\n value = d.value_number;\n } else if (typeof d.value_string === \"string\" && d.value_string.length > 0) {\n value = d.value_string;\n }\n if (value === undefined) throw new Error(\"Data.value_number or Data.value_string must be set\");\n\n message = { data: { time, value, uom, dataGroup, foreignEventKey } } as IUnsMessage;\n } else if (req.table) {\n const t = req.table;\n const time: string = t.time;\n const dataGroup: string | undefined = t.data_group || undefined;\n const values: Record<string, string | number | null | undefined> = {};\n (t.values ?? []).forEach((kv: any) => {\n const key = kv.key as string;\n if (typeof kv.value_number === \"number\" && !Number.isNaN(kv.value_number)) {\n values[key] = kv.value_number;\n } else if (typeof kv.value_string === \"string\") {\n values[key] = kv.value_string;\n } else {\n values[key] = null;\n }\n });\n message = { table: { time, values, dataGroup } } as IUnsMessage;\n } else {\n throw new Error(\"PublishRequest.content must be data or table\");\n }\n\n const packet = await UnsPacket.unsPacketFromUnsMessage(message);\n const mqttMsg: IMqttMessage = {\n topic,\n attribute,\n description,\n tags,\n packet,\n attributeNeedsPersistence,\n };\n\n // delta mode if cumulative\n if (message.data && valueIsCumulative) {\n this.mqttOutput.publishMqttMessage(mqttMsg, MessageMode.Delta);\n } else {\n this.mqttOutput.publishMqttMessage(mqttMsg, MessageMode.Raw);\n }\n\n callback(null, { ok: true });\n } catch (err: any) {\n logger.error(`Gateway Publish error: ${err.message}`);\n callback(null, { ok: false, error: err.message });\n }\n }\n\n private async subscribe(call: any) {\n await this.ensureMqttInput();\n const req = call.request as any;\n const topics: string[] = (req.topics ?? []) as string[];\n if (topics.length === 0) {\n call.emit(\"error\", { code: grpc.status.INVALID_ARGUMENT, details: \"topics is required\" });\n call.end();\n return;\n }\n\n // Subscribe and stream messages to this client\n this.mqttInput.subscribeAsync(topics);\n\n const handler = (event: any) => {\n try {\n // Forward as UNS packet JSON if parsable, else raw message\n const payload = event.packet ? JSON.stringify(event.packet) : String(event.message ?? \"\");\n call.write({ topic: event.topic, payload });\n } catch (e) {\n // drop\n }\n };\n this.handlers.add(handler);\n this.mqttInput.event.on(\"input\", handler);\n\n call.on(\"cancelled\", () => this.cleanupHandler(handler));\n call.on(\"error\", () => this.cleanupHandler(handler));\n call.on(\"close\", () => this.cleanupHandler(handler));\n }\n\n private attachStatusListeners(): void {\n if (this.mqttOutput) {\n this.mqttOutput.event.on(\"mqttProxyStatus\", (e: any) => {\n if (e?.event === \"t-publisher-active\") this.outPublisherActive = !!e.value;\n });\n }\n if (this.mqttInput) {\n this.mqttInput.event.on(\"mqttProxyStatus\", (e: any) => {\n if (e?.event === \"t-subscriber-active\") this.inSubscriberActive = !!e.value;\n });\n }\n }\n\n private async ensureMqttOutput() {\n if (!this.mqttOutput) {\n // slight delay to let process MQTT connect\n while ((this.unsProcess as any)?.processMqttProxy?.isConnected === false) {\n await new Promise((r) => setTimeout(r, 50));\n }\n this.mqttOutput = await this.unsProcess!.createUnsMqttProxy(\n this.outputHost,\n this.getInstanceName(\"gatewayOutput\"),\n \"force\",\n true,\n { publishThrottlingDelay: 1 },\n );\n this.attachStatusListeners();\n }\n }\n\n private async ensureMqttInput() {\n if (!this.mqttInput) {\n while ((this.unsProcess as any)?.processMqttProxy?.isConnected === false) {\n await new Promise((r) => setTimeout(r, 50));\n }\n this.mqttInput = await this.unsProcess!.createUnsMqttProxy(\n this.inputHost,\n this.getInstanceName(\"gatewayInput\"),\n \"force\",\n true,\n { mqttSubToTopics: [] },\n );\n this.attachStatusListeners();\n }\n }\n\n private async ensureApiProxy() {\n if (!this.unsApiProxy) {\n if (typeof (this.unsProcess as any)?.createApiProxy !== \"function\") {\n throw new Error(\"API plugin not registered. Please install @uns-kit/api and register it with UnsProxyProcess before starting the gateway.\");\n }\n this.unsApiProxy = await this.unsProcess!.createApiProxy(this.getInstanceName(\"gatewayApi\"), this.apiOptions!);\n this.unsApiProxy.event.on(\"apiGetEvent\", (event: any) => this.onApiGetEvent(event));\n }\n }\n\n private getInstanceName(base: string): string {\n // derive suffix from processName/CLI by inspecting configured instanceStatusTopic is overkill; keep base names unique per process\n return base;\n }\n\n private async registerApiGet(call: any, callback: any) {\n try {\n await this.ensureApiProxy();\n const req = call.request as any;\n const topic: string = req.topic;\n const attribute: string = req.attribute;\n const apiDescription: string | undefined = req.api_description || undefined;\n const tags: string[] | undefined = (req.tags ?? []) as string[];\n const queryParams: any[] = (req.query_params ?? []).map((p: any) => ({\n name: p.name,\n type: (p.type === \"number\" || p.type === \"boolean\") ? p.type : \"string\",\n required: !!p.required,\n description: p.description ?? undefined,\n }));\n\n const options: IGetEndpointOptions = {\n apiDescription,\n tags,\n queryParams,\n };\n await this.unsApiProxy.get(topic as any, attribute, options);\n callback(null, { ok: true });\n } catch (err: any) {\n logger.error(`Gateway RegisterApiGet error: ${err.message}`);\n callback(null, { ok: false, error: err.message });\n }\n }\n\n private async unregisterApiGet(call: any, callback: any) {\n try {\n await this.ensureApiProxy();\n const req = call.request as any;\n const topic: string = req.topic;\n const attribute: string = req.attribute;\n await this.unsApiProxy.unregister(topic as any, attribute, \"GET\");\n callback(null, { ok: true });\n } catch (err: any) {\n logger.error(`Gateway UnregisterApiGet error: ${err.message}`);\n callback(null, { ok: false, error: err.message });\n }\n }\n\n private onApiGetEvent(event: any) {\n // Correlate request and forward to connected gRPC streams\n const id = randomUUID();\n const req = event.req;\n const res = event.res;\n const path: string = req.path || req.originalUrl || \"/\";\n // Derive topic/attribute is optional; we send path and query\n const bearer = (req.headers?.[\"authorization\"] as string | undefined) ?? \"\";\n this.pendingApi.set(id, res);\n // Timeout after 10s\n setTimeout(() => {\n if (this.pendingApi.has(id)) {\n const r = this.pendingApi.get(id);\n try { r.status(504).send(\"Gateway timeout\"); } catch {}\n this.pendingApi.delete(id);\n }\n }, 10_000).unref?.();\n\n const query: Record<string, string> = {};\n Object.entries(req.query || {}).forEach(([k, v]) => { query[k] = String(v); });\n const msg = { id, method: \"GET\", path, query, bearer };\n for (const stream of this.apiStreams) {\n try { stream.write(msg); } catch {}\n }\n }\n\n private async apiEventStream(call: any) {\n // Register stream\n await this.ensureApiProxy();\n this.apiStreams.add(call);\n call.on(\"data\", (resp: any) => {\n const id: string = resp.id;\n const status: number = resp.status ?? 200;\n const body: string = resp.body ?? \"\";\n const headers: Record<string, string> = resp.headers ?? {};\n const res = this.pendingApi.get(id);\n if (res) {\n try {\n Object.entries(headers).forEach(([k, v]) => res.setHeader(k, v));\n res.status(status).send(body);\n } catch {}\n this.pendingApi.delete(id);\n }\n });\n const cleanup = () => { this.apiStreams.delete(call); };\n call.on(\"cancelled\", cleanup);\n call.on(\"error\", cleanup);\n call.on(\"close\", cleanup);\n }\n\n private async ready(call: any, callback: any) {\n try {\n const req = call.request as any;\n const timeoutMs: number = req.timeout_ms && req.timeout_ms > 0 ? req.timeout_ms : 15000;\n const waitOut = !!req.wait_output;\n const waitIn = !!req.wait_input;\n const waitApi = !!req.wait_api;\n\n if (waitOut) await this.ensureMqttOutput();\n if (waitIn) await this.ensureMqttInput();\n if (waitApi) await this.ensureApiProxy();\n\n const start = Date.now();\n const check = () => {\n const okOut = !waitOut || this.outPublisherActive;\n const okIn = !waitIn || this.inSubscriberActive;\n const okApi = !waitApi || !!this.unsApiProxy; // creation ensures listening\n return okOut && okIn && okApi;\n };\n\n if (check()) return callback(null, { ok: true });\n\n const onStatus = () => {\n if (check()) done(true);\n };\n\n const done = (ok: boolean, err?: string) => {\n if (this.mqttOutput) this.mqttOutput.event.off(\"mqttProxyStatus\", onStatus as any);\n if (this.mqttInput) this.mqttInput.event.off(\"mqttProxyStatus\", onStatus as any);\n callback(null, { ok, error: err });\n };\n\n if (this.mqttOutput) this.mqttOutput.event.on(\"mqttProxyStatus\", onStatus as any);\n if (this.mqttInput) this.mqttInput.event.on(\"mqttProxyStatus\", onStatus as any);\n\n const iv = setInterval(() => {\n if (check()) {\n clearInterval(iv);\n done(true);\n } else if (Date.now() - start > timeoutMs) {\n clearInterval(iv);\n done(false, \"timeout waiting for readiness\");\n }\n }, 100);\n } catch (e: any) {\n callback(null, { ok: false, error: e.message });\n }\n }\n\n private cleanupHandler(handler: Function) {\n if (this.mqttInput) this.mqttInput.event.off(\"input\", handler as any);\n this.handlers.delete(handler);\n }\n\n public async shutdown(): Promise<void> {\n try {\n for (const h of Array.from(this.handlers)) this.cleanupHandler(h);\n if (this.server) {\n await new Promise<void>((resolve) => this.server!.tryShutdown(() => resolve()));\n this.server = null;\n }\n if (this.unsProcess) this.unsProcess.shutdown();\n } catch (e: any) {\n logger.error(`Gateway shutdown error: ${e.message}`);\n }\n }\n}\n\nexport async function startUnsGateway(addrOverride?: string, opts?: GatewayStartOptions): Promise<GatewayAddress> {\n const gw = new UnsGatewayServer();\n return gw.start(addrOverride, opts);\n}\nfunction sanitizeTopicPart(getProcessName: () => string) {\n throw new Error(\"Function not implemented.\");\n}\n"]}
1
+ {"version":3,"file":"uns-gateway-server.js","sourceRoot":"","sources":["../../src/uns-grpc/uns-gateway-server.ts"],"names":[],"mappings":"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","sourcesContent":["import grpc from \"@grpc/grpc-js\";\nimport protoLoader from \"@grpc/proto-loader\";\nimport path from \"path\";\nimport getPort from \"get-port\";\nimport { readFileSync } from \"fs\";\nimport { fileURLToPath } from \"url\";\nimport { basePath } from \"../base-path.js\";\n\nimport logger from \"../logger.js\";\nimport { ConfigFile } from \"../config-file.js\";\nimport UnsProxyProcess from \"../uns/uns-proxy-process.js\";\nimport UnsMqttProxy, { MessageMode } from \"../uns-mqtt/uns-mqtt-proxy.js\";\nimport { IUnsMessage, IMqttMessage } from \"../uns/uns-interfaces.js\";\nimport { UnsPacket } from \"../uns/uns-packet.js\";\nimport { IApiProxyOptions, IGetEndpointOptions } from \"../uns/uns-interfaces.js\";\nimport { randomUUID } from \"crypto\";\nimport { MqttTopicBuilder } from \"../uns-mqtt/mqtt-topic-builder.js\";\nimport { ObjectTypes } from \"../uns/uns-object.js\";\nconst __filename = fileURLToPath(import.meta.url);\nconst __dirname = path.dirname(__filename);\n\nconst defaultGatewayProto = path.resolve(__dirname, \"uns-gateway.proto\");\nconst GATEWAY_PROTO = process.env.UNS_GATEWAY_PROTO\n ? path.resolve(process.cwd(), process.env.UNS_GATEWAY_PROTO)\n : defaultGatewayProto;\n\ntype GrpcServer = grpc.Server;\n\nexport interface GatewayAddress {\n address: string; // e.g. unix:/tmp/... or 0.0.0.0:PORT\n isUDS: boolean;\n}\n\nexport interface GatewayStartOptions {\n processNameOverride?: string;\n instanceSuffix?: string;\n instanceModeOverride?: \"wait\" | \"force\" | \"handover\";\n handoverOverride?: boolean;\n}\n\ntype UnsApiProxyLike = {\n event: { on(event: string, handler: (payload: any) => void): void };\n get(topic: string, attribute: string, options: IGetEndpointOptions): Promise<void>;\n unregister(topic: string, attribute: string, method: \"GET\" | \"POST\" | \"PUT\" | \"DELETE\"): Promise<void>;\n};\n\ntype UnsProxyProcessWithApi = UnsProxyProcess & {\n createApiProxy(instanceName: string, options: IApiProxyOptions): Promise<UnsApiProxyLike>;\n};\n\nconst requireHost = (value: unknown, pathLabel: string): string => {\n if (typeof value !== \"string\" || value.length === 0) {\n throw new Error(`Configuration value '${pathLabel}' is required and must resolve to a string host.`);\n }\n return value;\n};\n\nexport class UnsGatewayServer {\n private server: GrpcServer | null = null;\n private unsProcess: UnsProxyProcessWithApi | null = null;\n private mqttInput: UnsMqttProxy | null = null;\n private mqttOutput: UnsMqttProxy | null = null;\n private handlers: Set<Function> = new Set();\n private unsApiProxy: UnsApiProxyLike | null = null;\n private apiStreams: Set<any> = new Set();\n private pendingApi: Map<string, any> = new Map();\n\n private inputHost: string;\n private outputHost: string;\n private apiOptions: IApiProxyOptions | null = null;\n private outPublisherActive = false;\n private inSubscriberActive = false;\n\n public async start(\n desiredAddr?: string,\n opts?: {\n processNameOverride?: string;\n instanceSuffix?: string;\n instanceModeOverride?: \"wait\" | \"force\" | \"handover\";\n handoverOverride?: boolean;\n }\n ): Promise<GatewayAddress> {\n const packageDef = protoLoader.loadSync(GATEWAY_PROTO, {\n keepCase: true,\n longs: String,\n enums: String,\n defaults: true,\n oneofs: true,\n });\n const proto = grpc.loadPackageDefinition(packageDef) as any;\n\n // Load config and init UNS process + MQTT proxies\n const cfg = await ConfigFile.loadConfig();\n const processName = opts?.processNameOverride ?? cfg.uns.processName;\n const instanceMode = opts?.instanceModeOverride ?? cfg.uns.instanceMode;\n const handover = (typeof opts?.handoverOverride === \"boolean\") ? opts.handoverOverride : cfg.uns.handover;\n const suffix = opts?.instanceSuffix ? `-${opts.instanceSuffix}` : \"\";\n\n const infraHost = requireHost(cfg.infra?.host, \"infra.host\");\n this.unsProcess = new UnsProxyProcess(infraHost, { processName }) as UnsProxyProcessWithApi;\n // cache hosts/options; proxies created lazily on first use\n this.inputHost = requireHost(cfg.input?.host, \"input.host\");\n this.outputHost = requireHost(cfg.output?.host, \"output.host\");\n this.apiOptions = cfg.uns?.jwksWellKnownUrl\n ? { jwks: { wellKnownJwksUrl: cfg.uns.jwksWellKnownUrl, activeKidUrl: cfg.uns.kidWellKnownUrl } }\n : { jwtSecret: \"CHANGEME\" };\n\n const serviceImpl = {\n Publish: this.publish.bind(this),\n Subscribe: this.subscribe.bind(this),\n RegisterApiGet: this.registerApiGet.bind(this),\n UnregisterApiGet: this.unregisterApiGet.bind(this),\n ApiEventStream: this.apiEventStream.bind(this),\n Ready: this.ready.bind(this),\n };\n\n this.server = new grpc.Server();\n this.server.addService(proto.uns.UnsGateway.service, serviceImpl);\n\n const isUnix = process.platform !== \"win32\";\n let addr: string | null = desiredAddr || process.env.UNS_GATEWAY_ADDR || null;\n if (!addr) {\n if (isUnix) {\n const sanitizedProcess = MqttTopicBuilder.sanitizeTopicPart(this.getProcessName());\n const sock = `/tmp/${sanitizedProcess}-uns-gateway.sock`;\n addr = `unix:${sock}`;\n } else {\n const port = await getPort();\n addr = `0.0.0.0:${port}`;\n }\n }\n\n // If UDS and file exists, best-effort unlink (stale sock)\n if (addr.startsWith(\"unix:\")) {\n const fs = await import(\"fs\");\n const p = addr.slice(\"unix:\".length);\n try { if (fs.existsSync(p)) fs.unlinkSync(p); } catch {}\n }\n\n await new Promise<void>((resolve, reject) => {\n this.server!.bindAsync(addr!, grpc.ServerCredentials.createInsecure(), (err) => {\n if (err) return reject(err);\n // grpc-js automatically starts the server after bindAsync in recent versions\n // Calling start() is deprecated; omit to avoid warnings.\n logger.info(`UNS gRPC Gateway listening on ${addr}`);\n resolve();\n });\n });\n\n return { address: addr!, isUDS: addr!.startsWith(\"unix:\") };\n }\n\n private getProcessName(): string {\n try {\n const pkgPath = path.join(basePath, \"package.json\");\n const raw = readFileSync(pkgPath, \"utf8\");\n const pkg = JSON.parse(raw);\n return `${pkg.name}-${pkg.version}`;\n } catch {\n return `uns-gateway`;\n }\n }\n\n private async publish(call: any, callback: any) {\n try {\n await this.ensureMqttOutput();\n const req = call.request as any;\n if (!this.mqttOutput) throw new Error(\"Gateway not initialized\");\n\n const topic: string = req.topic;\n const attribute: string = req.attribute;\n const description: string = req.description ?? \"\";\n const tags: string[] = (req.tags ?? []) as string[];\n const attributeNeedsPersistence: boolean | null = req.attribute_needs_persistence ?? null;\n const valueIsCumulative: boolean = req.value_is_cumulative ?? false;\n\n let message: IUnsMessage | null = null;\n\n if (req.data) {\n const d = req.data;\n const time: string = d.time;\n const uom: string | undefined = d.uom || undefined;\n const dataGroup: string | undefined = d.data_group || undefined;\n const foreignEventKey: string | undefined = d.foreign_event_key || undefined;\n\n let value: any = undefined;\n if (typeof d.value_number === \"number\" && !Number.isNaN(d.value_number)) {\n value = d.value_number;\n } else if (typeof d.value_string === \"string\" && d.value_string.length > 0) {\n value = d.value_string;\n }\n if (value === undefined) throw new Error(\"Data.value_number or Data.value_string must be set\");\n\n message = { data: { time, value, uom, dataGroup, foreignEventKey } } as IUnsMessage;\n } else if (req.table) {\n const t = req.table;\n const time: string = t.time;\n const dataGroup: string | undefined = t.data_group || undefined;\n const values: Record<string, string | number | null | undefined> = {};\n (t.values ?? []).forEach((kv: any) => {\n const key = kv.key as string;\n if (typeof kv.value_number === \"number\" && !Number.isNaN(kv.value_number)) {\n values[key] = kv.value_number;\n } else if (typeof kv.value_string === \"string\") {\n values[key] = kv.value_string;\n } else {\n values[key] = null;\n }\n });\n message = { table: { time, values, dataGroup } } as IUnsMessage;\n } else {\n throw new Error(\"PublishRequest.content must be data or table\");\n }\n\n const packet = await UnsPacket.unsPacketFromUnsMessage(message);\n const mqttMsg: IMqttMessage = {\n topic,\n attribute,\n description,\n tags,\n packet,\n asset:\"meter\",\n objectType: ObjectTypes.EnergyResource,\n objectId: \"main\",\n attributeNeedsPersistence,\n };\n\n // delta mode if cumulative\n if (message.data && valueIsCumulative) {\n this.mqttOutput.publishMqttMessage(mqttMsg, MessageMode.Delta);\n } else {\n this.mqttOutput.publishMqttMessage(mqttMsg, MessageMode.Raw);\n }\n\n callback(null, { ok: true });\n } catch (err: any) {\n logger.error(`Gateway Publish error: ${err.message}`);\n callback(null, { ok: false, error: err.message });\n }\n }\n\n private async subscribe(call: any) {\n await this.ensureMqttInput();\n const req = call.request as any;\n const topics: string[] = (req.topics ?? []) as string[];\n if (topics.length === 0) {\n call.emit(\"error\", { code: grpc.status.INVALID_ARGUMENT, details: \"topics is required\" });\n call.end();\n return;\n }\n\n // Subscribe and stream messages to this client\n this.mqttInput.subscribeAsync(topics);\n\n const handler = (event: any) => {\n try {\n // Forward as UNS packet JSON if parsable, else raw message\n const payload = event.packet ? JSON.stringify(event.packet) : String(event.message ?? \"\");\n call.write({ topic: event.topic, payload });\n } catch (e) {\n // drop\n }\n };\n this.handlers.add(handler);\n this.mqttInput.event.on(\"input\", handler);\n\n call.on(\"cancelled\", () => this.cleanupHandler(handler));\n call.on(\"error\", () => this.cleanupHandler(handler));\n call.on(\"close\", () => this.cleanupHandler(handler));\n }\n\n private attachStatusListeners(): void {\n if (this.mqttOutput) {\n this.mqttOutput.event.on(\"mqttProxyStatus\", (e: any) => {\n if (e?.event === \"t-publisher-active\") this.outPublisherActive = !!e.value;\n });\n }\n if (this.mqttInput) {\n this.mqttInput.event.on(\"mqttProxyStatus\", (e: any) => {\n if (e?.event === \"t-subscriber-active\") this.inSubscriberActive = !!e.value;\n });\n }\n }\n\n private async ensureMqttOutput() {\n if (!this.mqttOutput) {\n // slight delay to let process MQTT connect\n while ((this.unsProcess as any)?.processMqttProxy?.isConnected === false) {\n await new Promise((r) => setTimeout(r, 50));\n }\n this.mqttOutput = await this.unsProcess!.createUnsMqttProxy(\n this.outputHost,\n this.getInstanceName(\"gatewayOutput\"),\n \"force\",\n true,\n { publishThrottlingDelay: 1 },\n );\n this.attachStatusListeners();\n }\n }\n\n private async ensureMqttInput() {\n if (!this.mqttInput) {\n while ((this.unsProcess as any)?.processMqttProxy?.isConnected === false) {\n await new Promise((r) => setTimeout(r, 50));\n }\n this.mqttInput = await this.unsProcess!.createUnsMqttProxy(\n this.inputHost,\n this.getInstanceName(\"gatewayInput\"),\n \"force\",\n true,\n { mqttSubToTopics: [] },\n );\n this.attachStatusListeners();\n }\n }\n\n private async ensureApiProxy() {\n if (!this.unsApiProxy) {\n if (typeof (this.unsProcess as any)?.createApiProxy !== \"function\") {\n throw new Error(\"API plugin not registered. Please install @uns-kit/api and register it with UnsProxyProcess before starting the gateway.\");\n }\n this.unsApiProxy = await this.unsProcess!.createApiProxy(this.getInstanceName(\"gatewayApi\"), this.apiOptions!);\n this.unsApiProxy.event.on(\"apiGetEvent\", (event: any) => this.onApiGetEvent(event));\n }\n }\n\n private getInstanceName(base: string): string {\n // derive suffix from processName/CLI by inspecting configured instanceStatusTopic is overkill; keep base names unique per process\n return base;\n }\n\n private async registerApiGet(call: any, callback: any) {\n try {\n await this.ensureApiProxy();\n const req = call.request as any;\n const topic: string = req.topic;\n const attribute: string = req.attribute;\n const apiDescription: string | undefined = req.api_description || undefined;\n const tags: string[] | undefined = (req.tags ?? []) as string[];\n const queryParams: any[] = (req.query_params ?? []).map((p: any) => ({\n name: p.name,\n type: (p.type === \"number\" || p.type === \"boolean\") ? p.type : \"string\",\n required: !!p.required,\n description: p.description ?? undefined,\n }));\n\n const options: IGetEndpointOptions = {\n apiDescription,\n tags,\n queryParams,\n };\n await this.unsApiProxy.get(topic as any, attribute, options);\n callback(null, { ok: true });\n } catch (err: any) {\n logger.error(`Gateway RegisterApiGet error: ${err.message}`);\n callback(null, { ok: false, error: err.message });\n }\n }\n\n private async unregisterApiGet(call: any, callback: any) {\n try {\n await this.ensureApiProxy();\n const req = call.request as any;\n const topic: string = req.topic;\n const attribute: string = req.attribute;\n await this.unsApiProxy.unregister(topic as any, attribute, \"GET\");\n callback(null, { ok: true });\n } catch (err: any) {\n logger.error(`Gateway UnregisterApiGet error: ${err.message}`);\n callback(null, { ok: false, error: err.message });\n }\n }\n\n private onApiGetEvent(event: any) {\n // Correlate request and forward to connected gRPC streams\n const id = randomUUID();\n const req = event.req;\n const res = event.res;\n const path: string = req.path || req.originalUrl || \"/\";\n // Derive topic/attribute is optional; we send path and query\n const bearer = (req.headers?.[\"authorization\"] as string | undefined) ?? \"\";\n this.pendingApi.set(id, res);\n // Timeout after 10s\n setTimeout(() => {\n if (this.pendingApi.has(id)) {\n const r = this.pendingApi.get(id);\n try { r.status(504).send(\"Gateway timeout\"); } catch {}\n this.pendingApi.delete(id);\n }\n }, 10_000).unref?.();\n\n const query: Record<string, string> = {};\n Object.entries(req.query || {}).forEach(([k, v]) => { query[k] = String(v); });\n const msg = { id, method: \"GET\", path, query, bearer };\n for (const stream of this.apiStreams) {\n try { stream.write(msg); } catch {}\n }\n }\n\n private async apiEventStream(call: any) {\n // Register stream\n await this.ensureApiProxy();\n this.apiStreams.add(call);\n call.on(\"data\", (resp: any) => {\n const id: string = resp.id;\n const status: number = resp.status ?? 200;\n const body: string = resp.body ?? \"\";\n const headers: Record<string, string> = resp.headers ?? {};\n const res = this.pendingApi.get(id);\n if (res) {\n try {\n Object.entries(headers).forEach(([k, v]) => res.setHeader(k, v));\n res.status(status).send(body);\n } catch {}\n this.pendingApi.delete(id);\n }\n });\n const cleanup = () => { this.apiStreams.delete(call); };\n call.on(\"cancelled\", cleanup);\n call.on(\"error\", cleanup);\n call.on(\"close\", cleanup);\n }\n\n private async ready(call: any, callback: any) {\n try {\n const req = call.request as any;\n const timeoutMs: number = req.timeout_ms && req.timeout_ms > 0 ? req.timeout_ms : 15000;\n const waitOut = !!req.wait_output;\n const waitIn = !!req.wait_input;\n const waitApi = !!req.wait_api;\n\n if (waitOut) await this.ensureMqttOutput();\n if (waitIn) await this.ensureMqttInput();\n if (waitApi) await this.ensureApiProxy();\n\n const start = Date.now();\n const check = () => {\n const okOut = !waitOut || this.outPublisherActive;\n const okIn = !waitIn || this.inSubscriberActive;\n const okApi = !waitApi || !!this.unsApiProxy; // creation ensures listening\n return okOut && okIn && okApi;\n };\n\n if (check()) return callback(null, { ok: true });\n\n const onStatus = () => {\n if (check()) done(true);\n };\n\n const done = (ok: boolean, err?: string) => {\n if (this.mqttOutput) this.mqttOutput.event.off(\"mqttProxyStatus\", onStatus as any);\n if (this.mqttInput) this.mqttInput.event.off(\"mqttProxyStatus\", onStatus as any);\n callback(null, { ok, error: err });\n };\n\n if (this.mqttOutput) this.mqttOutput.event.on(\"mqttProxyStatus\", onStatus as any);\n if (this.mqttInput) this.mqttInput.event.on(\"mqttProxyStatus\", onStatus as any);\n\n const iv = setInterval(() => {\n if (check()) {\n clearInterval(iv);\n done(true);\n } else if (Date.now() - start > timeoutMs) {\n clearInterval(iv);\n done(false, \"timeout waiting for readiness\");\n }\n }, 100);\n } catch (e: any) {\n callback(null, { ok: false, error: e.message });\n }\n }\n\n private cleanupHandler(handler: Function) {\n if (this.mqttInput) this.mqttInput.event.off(\"input\", handler as any);\n this.handlers.delete(handler);\n }\n\n public async shutdown(): Promise<void> {\n try {\n for (const h of Array.from(this.handlers)) this.cleanupHandler(h);\n if (this.server) {\n await new Promise<void>((resolve) => this.server!.tryShutdown(() => resolve()));\n this.server = null;\n }\n if (this.unsProcess) this.unsProcess.shutdown();\n } catch (e: any) {\n logger.error(`Gateway shutdown error: ${e.message}`);\n }\n }\n}\n\nexport async function startUnsGateway(addrOverride?: string, opts?: GatewayStartOptions): Promise<GatewayAddress> {\n const gw = new UnsGatewayServer();\n return gw.start(addrOverride, opts);\n}\nfunction sanitizeTopicPart(getProcessName: () => string) {\n throw new Error(\"Function not implemented.\");\n}\n"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@uns-kit/core",
3
- "version": "1.0.4",
3
+ "version": "1.0.5",
4
4
  "description": "Core utilities and runtime building blocks for UNS-based realtime transformers.",
5
5
  "type": "module",
6
6
  "license": "MIT",