@uns-kit/core 1.0.45 → 1.0.47

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.
Files changed (69) hide show
  1. package/LICENSE +21 -21
  2. package/README.md +102 -102
  3. package/dist/base-path.js.map +1 -1
  4. package/dist/config/app-config.js.map +1 -1
  5. package/dist/config/project.config.extension.js.map +1 -1
  6. package/dist/config-file.js.map +1 -1
  7. package/dist/graphql/schema.js.map +1 -1
  8. package/dist/index.js.map +1 -1
  9. package/dist/logger.js.map +1 -1
  10. package/dist/tools/auth/auth-client.js.map +1 -1
  11. package/dist/tools/auth/index.js.map +1 -1
  12. package/dist/tools/auth/secure-store.js.map +1 -1
  13. package/dist/tools/base-path.js.map +1 -1
  14. package/dist/tools/generate-config-schema.js.map +1 -1
  15. package/dist/tools/generate-uns-dictionary.js +7 -7
  16. package/dist/tools/generate-uns-dictionary.js.map +1 -1
  17. package/dist/tools/generate-uns-measurements.js +7 -7
  18. package/dist/tools/generate-uns-measurements.js.map +1 -1
  19. package/dist/tools/generate-uns-reference.js +9 -9
  20. package/dist/tools/generate-uns-reference.js.map +1 -1
  21. package/dist/tools/pull-request.js.map +1 -1
  22. package/dist/tools/refresh-uns.js +50 -50
  23. package/dist/tools/refresh-uns.js.map +1 -1
  24. package/dist/tools/schema.js.map +1 -1
  25. package/dist/uns/handover-manager-event-emitter.js.map +1 -1
  26. package/dist/uns/handover-manager.js.map +1 -1
  27. package/dist/uns/process-config.js.map +1 -1
  28. package/dist/uns/process-name-service.js.map +1 -1
  29. package/dist/uns/status-monitor.js.map +1 -1
  30. package/dist/uns/uns-asset.js.map +1 -1
  31. package/dist/uns/uns-attributes.js.map +1 -1
  32. package/dist/uns/uns-dictionary-registry.js.map +1 -1
  33. package/dist/uns/uns-dictionary.generated.js.map +1 -1
  34. package/dist/uns/uns-event-emitter.js.map +1 -1
  35. package/dist/uns/uns-interfaces.d.ts +12 -8
  36. package/dist/uns/uns-interfaces.d.ts.map +1 -1
  37. package/dist/uns/uns-interfaces.js.map +1 -1
  38. package/dist/uns/uns-measurements.generated.js.map +1 -1
  39. package/dist/uns/uns-measurements.js.map +1 -1
  40. package/dist/uns/uns-object.js.map +1 -1
  41. package/dist/uns/uns-packet.d.ts.map +1 -1
  42. package/dist/uns/uns-packet.js +35 -16
  43. package/dist/uns/uns-packet.js.map +1 -1
  44. package/dist/uns/uns-proxy-process.js.map +1 -1
  45. package/dist/uns/uns-proxy.js.map +1 -1
  46. package/dist/uns/uns-tags.js.map +1 -1
  47. package/dist/uns/uns-topic-matcher.js.map +1 -1
  48. package/dist/uns/uns-topics.js.map +1 -1
  49. package/dist/uns-config/config-schema.js.map +1 -1
  50. package/dist/uns-config/host-placeholders.js.map +1 -1
  51. package/dist/uns-config/schema-tolls.js.map +1 -1
  52. package/dist/uns-config/schema-tools.js.map +1 -1
  53. package/dist/uns-config/secret-placeholders.js.map +1 -1
  54. package/dist/uns-config/secret-resolver.js.map +1 -1
  55. package/dist/uns-config/uns-core-schema.js.map +1 -1
  56. package/dist/uns-grpc/uns-gateway-cli.js.map +1 -1
  57. package/dist/uns-grpc/uns-gateway-server.js.map +1 -1
  58. package/dist/uns-grpc/uns-gateway.proto +104 -104
  59. package/dist/uns-mqtt/mqtt-interfaces.js.map +1 -1
  60. package/dist/uns-mqtt/mqtt-proxy.js.map +1 -1
  61. package/dist/uns-mqtt/mqtt-topic-builder.js.map +1 -1
  62. package/dist/uns-mqtt/mqtt-worker-init.js.map +1 -1
  63. package/dist/uns-mqtt/mqtt-worker.js.map +1 -1
  64. package/dist/uns-mqtt/throttled-queue.js.map +1 -1
  65. package/dist/uns-mqtt/uns-mqtt-proxy.js.map +1 -1
  66. package/dist/uns-mqtt/ws-proxy.js.map +1 -1
  67. package/package.json +1 -1
  68. package/dist/app-config.d.ts.map +0 -1
  69. package/dist/app-config.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"secret-resolver.js","sourceRoot":"","sources":["../../src/uns-config/secret-resolver.ts"],"names":[],"mappings":"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","sourcesContent":["import fs from \"node:fs/promises\";\r\nimport os from \"node:os\";\r\nimport type { NetworkInterfaceInfo } from \"node:os\";\r\nimport type { AppConfig } from \"../config/app-config.js\";\r\nimport {\r\n isSecretPlaceholder,\r\n type EnvSecretPlaceholder,\r\n type InfisicalSecretPlaceholder,\r\n type SecretPlaceholder,\r\n} from \"./secret-placeholders.js\";\r\nimport {\r\n isHostPlaceholder,\r\n type HostPlaceholder,\r\n type SystemHostPlaceholder,\r\n} from \"./host-placeholders.js\";\r\n\r\nexport type SecretValueResolved = string | undefined;\r\nexport type HostValueResolved = string | undefined;\r\n\r\ntype SecretPlaceholderCandidate =\r\n | { provider: \"env\"; key: string }\r\n | { provider: \"infisical\"; key: string; path: string };\r\n\r\ntype HostPlaceholderCandidate = HostPlaceholder;\r\n\r\nexport type ResolvedConfig<T> = T extends SecretPlaceholderCandidate\r\n ? SecretValueResolved\r\n : T extends HostPlaceholderCandidate\r\n ? HostValueResolved\r\n : T extends (infer U)[]\r\n ? ResolvedConfig<U>[]\r\n : T extends Record<string, unknown>\r\n ? { [K in keyof T]: ResolvedConfig<T[K]> }\r\n : T;\r\n\r\nexport type ResolvedAppConfig = ResolvedConfig<AppConfig>;\r\n\r\nexport interface InfisicalFetchRequest {\r\n path: string;\r\n key: string;\r\n environment?: string;\r\n projectId?: string;\r\n type?: \"shared\" | \"personal\";\r\n}\r\n\r\nexport type InfisicalFetcher = (\r\n request: InfisicalFetchRequest\r\n) => Promise<string | undefined>;\r\n\r\nexport interface InfisicalResolverOptions {\r\n /**\r\n * Provide a custom fetcher. If omitted, the resolver tries to lazily instantiate\r\n * an Infisical client using @infisical/sdk based on the supplied token/siteUrl/options.\r\n */\r\n fetchSecret?: InfisicalFetcher;\r\n /**\r\n * Machine token or personal token used when creating the default Infisical client.\r\n * Falls back to the INFISICAL_TOKEN or INFISICAL_PERSONAL_TOKEN environment variables.\r\n */\r\n token?: string;\r\n /** Optional Infisical site URL override. Defaults to INFISICAL_SITE_URL when present. */\r\n siteUrl?: string;\r\n /** Default environment used when a placeholder does not specify one explicitly. */\r\n environment?: string;\r\n /** Default project id used when a placeholder does not provide one. */\r\n projectId?: string;\r\n /** Default secret type. Shared secrets are used by default. */\r\n type?: \"shared\" | \"personal\";\r\n /** Disable in-memory caching when set to false. Enabled by default. */\r\n cache?: boolean;\r\n}\r\n\r\nexport interface SecretResolverOptions {\r\n /** Environment map used for `env` placeholders. Defaults to process.env. */\r\n env?: NodeJS.ProcessEnv;\r\n /** Configuration for resolving Infisical placeholders. */\r\n infisical?: InfisicalResolverOptions;\r\n /** Callback invoked before throwing when a required secret cannot be resolved. */\r\n onMissingSecret?: (placeholder: SecretPlaceholder, source: \"env\" | \"infisical\") => void;\r\n /** Configuration for resolving host placeholders. */\r\n hosts?: HostResolverOptions;\r\n}\r\n\r\nexport interface HostResolverOptions {\r\n /** Optional environment map used when falling back to process.env lookups. */\r\n env?: NodeJS.ProcessEnv;\r\n /** Static mapping of external host keys to concrete host strings. */\r\n externalHosts?: Record<string, string | undefined>;\r\n /**\r\n * Custom resolver invoked when an external host needs to be resolved.\r\n * It can return synchronously or asynchronously.\r\n */\r\n resolveExternal?: (key: string) => string | undefined | Promise<string | undefined>;\r\n /** Override for os.networkInterfaces (handy for tests). */\r\n networkInterfaces?: () => Record<string, NetworkInterfaceInfo[] | undefined>;\r\n /** Callback invoked before throwing when a required host cannot be resolved. */\r\n onMissingHost?: (placeholder: HostPlaceholder) => void;\r\n}\r\n\r\nconst INFISICAL_TOKEN_FILE = \"/run/secrets/infisical_token\";\r\nconst INFISICAL_PROJECT_ID_FILE = \"/run/secrets/infisical_project_id\";\r\nconst INFISICAL_SITE_URL_FILE = \"/run/secrets/infisical_site_url\";\r\nconst INFISICAL_TOKEN_FILE_ALT = \"/var/lib/uns/secrets/infisical_token\";\r\nconst INFISICAL_PROJECT_ID_FILE_ALT = \"/var/lib/uns/secrets/infisical_project_id\";\r\nconst INFISICAL_SITE_URL_FILE_ALT = \"/var/lib/uns/secrets/infisical_site_url\";\r\n\r\nconst envCache = new Map<string, string | undefined>();\r\nconst infisicalCache = new Map<string, Promise<string | undefined>>();\r\n\r\nasync function readSecretFile(filePath: string): Promise<string | undefined> {\r\n try {\r\n const content = await fs.readFile(filePath, \"utf8\");\r\n const trimmed = content.trim();\r\n return trimmed.length > 0 ? trimmed : undefined;\r\n } catch (error) {\r\n if ((error as NodeJS.ErrnoException).code === \"ENOENT\") {\r\n return undefined;\r\n }\r\n throw new Error(\r\n `Failed to read Infisical secret file '${filePath}': ${\r\n error instanceof Error ? error.message : String(error)\r\n }`,\r\n { cause: error as Error }\r\n );\r\n }\r\n}\r\n\r\nasync function resolveInfisicalToken(\r\n options?: InfisicalResolverOptions\r\n): Promise<string | undefined> {\r\n const candidate =\r\n options?.token ??\r\n process.env[\"INFISICAL_TOKEN\"] ??\r\n process.env[\"INFISICAL_PERSONAL_TOKEN\"] ??\r\n (await readSecretFile(INFISICAL_TOKEN_FILE)) ??\r\n (await readSecretFile(INFISICAL_TOKEN_FILE_ALT));\r\n\r\n return candidate?.trim() || undefined;\r\n}\r\n\r\nasync function resolveInfisicalSiteUrl(\r\n options?: InfisicalResolverOptions\r\n): Promise<string | undefined> {\r\n const candidate =\r\n options?.siteUrl ??\r\n process.env[\"INFISICAL_SITE_URL\"] ??\r\n (await readSecretFile(INFISICAL_SITE_URL_FILE)) ??\r\n (await readSecretFile(INFISICAL_SITE_URL_FILE_ALT));\r\n\r\n return candidate?.trim() || undefined;\r\n}\r\n\r\nasync function resolveInfisicalProjectId(\r\n options?: InfisicalResolverOptions\r\n): Promise<string | undefined> {\r\n const candidate =\r\n options?.projectId ??\r\n process.env[\"INFISICAL_PROJECT_ID\"] ??\r\n (await readSecretFile(INFISICAL_PROJECT_ID_FILE)) ??\r\n (await readSecretFile(INFISICAL_PROJECT_ID_FILE_ALT));\r\n\r\n return candidate?.trim() || undefined;\r\n}\r\n\r\nconst structuredCloneFallback = <T>(value: T): T =>\r\n typeof structuredClone === \"function\"\r\n ? structuredClone(value)\r\n : (JSON.parse(JSON.stringify(value)) as T);\r\n\r\nexport async function resolveConfigSecrets(\r\n config: AppConfig,\r\n options: SecretResolverOptions = {}\r\n): Promise<ResolvedAppConfig> {\r\n const working = structuredCloneFallback(config);\r\n await resolveNode(working, options);\r\n return working;\r\n}\r\n\r\nexport function clearSecretResolverCaches(): void {\r\n envCache.clear();\r\n infisicalCache.clear();\r\n defaultInfisicalFetcherCache.clear();\r\n}\r\n\r\nexport async function resolveInfisicalConfig(\r\n options?: InfisicalResolverOptions\r\n): Promise<{\r\n token: string | undefined;\r\n projectId: string | undefined;\r\n siteUrl: string | undefined;\r\n}> {\r\n const [token, projectId, siteUrl] = await Promise.all([\r\n resolveInfisicalToken(options),\r\n resolveInfisicalProjectId(options),\r\n resolveInfisicalSiteUrl(options),\r\n ]);\r\n\r\n return { token, projectId, siteUrl };\r\n}\r\n\r\nasync function resolveNode(node: unknown, options: SecretResolverOptions): Promise<unknown> {\r\n if (isSecretPlaceholder(node)) {\r\n return resolveSecretValue(node, options);\r\n }\r\n\r\n if (isHostPlaceholder(node)) {\r\n return resolveHostValue(node, options.hosts);\r\n }\r\n\r\n if (Array.isArray(node)) {\r\n const resolvedArray = await Promise.all(node.map(item => resolveNode(item, options)));\r\n return resolvedArray;\r\n }\r\n\r\n if (node && typeof node === \"object\") {\r\n const obj = node as Record<string, unknown>;\r\n\r\n for (const key of Object.keys(obj)) {\r\n const current = obj[key];\r\n\r\n if (isSecretPlaceholder(current)) {\r\n const resolved = await resolveSecretValue(current, options);\r\n if (resolved === undefined) {\r\n delete obj[key];\r\n } else {\r\n obj[key] = resolved;\r\n }\r\n continue;\r\n }\r\n\r\n if (isHostPlaceholder(current)) {\r\n const resolved = await resolveHostValue(current, options.hosts);\r\n if (resolved === undefined) {\r\n delete obj[key];\r\n } else {\r\n obj[key] = resolved;\r\n }\r\n continue;\r\n }\r\n\r\n const resolvedChild = await resolveNode(current, options);\r\n obj[key] = resolvedChild;\r\n }\r\n\r\n return obj;\r\n }\r\n\r\n return node;\r\n}\r\n\r\nasync function resolveSecretValue(\r\n placeholder: SecretPlaceholder,\r\n options: SecretResolverOptions\r\n): Promise<SecretValueResolved> {\r\n switch (placeholder.provider) {\r\n case \"env\":\r\n return resolveEnvSecret(placeholder, options);\r\n case \"infisical\":\r\n return resolveInfisicalSecret(placeholder, options);\r\n default:\r\n // Exhaustive check to guard future provider additions.\r\n return assertNeverProvider(placeholder);\r\n }\r\n}\r\n\r\nfunction assertNeverProvider(x: never): never {\r\n throw new Error(`Unsupported secret provider: ${JSON.stringify(x)}`);\r\n}\r\n\r\nasync function resolveHostValue(\r\n placeholder: HostPlaceholder,\r\n options?: HostResolverOptions\r\n): Promise<HostValueResolved> {\r\n const effectiveOptions = options ?? {};\r\n\r\n switch (placeholder.provider) {\r\n case \"inline\":\r\n return placeholder.value;\r\n case \"external\": {\r\n const envMap = effectiveOptions.env ?? process.env;\r\n\r\n let resolved = await maybeResolveExternal(\r\n placeholder.key,\r\n effectiveOptions.resolveExternal\r\n );\r\n\r\n if (resolved === undefined) {\r\n resolved = effectiveOptions.externalHosts?.[placeholder.key];\r\n }\r\n\r\n if (resolved === undefined) {\r\n resolved = envMap?.[placeholder.key];\r\n }\r\n\r\n if (resolved === undefined) {\r\n if (placeholder.default !== undefined) {\r\n return placeholder.default;\r\n }\r\n if (placeholder.optional) {\r\n return undefined;\r\n }\r\n\r\n effectiveOptions.onMissingHost?.(placeholder);\r\n throw new Error(`External host '${placeholder.key}' could not be resolved.`);\r\n }\r\n\r\n return resolved;\r\n }\r\n case \"system\":\r\n return resolveSystemHost(placeholder, effectiveOptions);\r\n default:\r\n return assertNeverHostProvider(placeholder);\r\n }\r\n}\r\n\r\nasync function maybeResolveExternal(\r\n key: string,\r\n resolver?: (key: string) => string | undefined | Promise<string | undefined>\r\n): Promise<string | undefined> {\r\n if (!resolver) {\r\n return undefined;\r\n }\r\n\r\n try {\r\n return await resolver(key);\r\n } catch (error) {\r\n throw new Error(\r\n `Failed to resolve external host '${key}' via custom resolver: ${\r\n error instanceof Error ? error.message : String(error)\r\n }`,\r\n { cause: error }\r\n );\r\n }\r\n}\r\n\r\nfunction assertNeverHostProvider(x: never): never {\r\n throw new Error(`Unsupported host provider: ${JSON.stringify(x)}`);\r\n}\r\n\r\nfunction resolveSystemHost(\r\n placeholder: SystemHostPlaceholder,\r\n options: HostResolverOptions\r\n): HostValueResolved {\r\n const getInterfaces = options.networkInterfaces ?? os.networkInterfaces;\r\n const interfaces = getInterfaces();\r\n const family = placeholder.family ?? \"IPv4\";\r\n const targetName = placeholder.interfaceName;\r\n\r\n const interfaceEntries: Array<readonly [string, NetworkInterfaceInfo[] | undefined]> = targetName\r\n ? [[targetName, interfaces[targetName]]]\r\n : Object.entries(interfaces);\r\n\r\n for (const [, ifaceList] of interfaceEntries) {\r\n if (!ifaceList) {\r\n continue;\r\n }\r\n for (const iface of ifaceList) {\r\n if (\r\n iface &&\r\n iface.family === family &&\r\n iface.internal !== true &&\r\n typeof iface.address === \"string\" &&\r\n iface.address.length > 0\r\n ) {\r\n return iface.address;\r\n }\r\n }\r\n\r\n if (targetName) {\r\n break;\r\n }\r\n }\r\n\r\n if (placeholder.default !== undefined) {\r\n return placeholder.default;\r\n }\r\n\r\n if (placeholder.optional) {\r\n return undefined;\r\n }\r\n\r\n options.onMissingHost?.(placeholder);\r\n const targetDescription = targetName ? `interface '${targetName}'` : \"available interfaces\";\r\n throw new Error(\r\n `System host lookup failed for ${targetDescription} (family ${family}).`\r\n );\r\n}\r\n\r\nfunction resolveEnvSecret(\r\n placeholder: EnvSecretPlaceholder,\r\n options: SecretResolverOptions\r\n): SecretValueResolved {\r\n const envMap = options.env ?? process.env;\r\n const cacheKey = placeholder.key;\r\n\r\n if (envCache.has(cacheKey)) {\r\n return envCache.get(cacheKey) ?? undefined;\r\n }\r\n\r\n const value = envMap[cacheKey];\r\n\r\n if (value === undefined || value === null) {\r\n if (placeholder.default !== undefined) {\r\n envCache.set(cacheKey, placeholder.default);\r\n return placeholder.default;\r\n }\r\n if (placeholder.optional) {\r\n envCache.set(cacheKey, undefined);\r\n return undefined;\r\n }\r\n\r\n options.onMissingSecret?.(placeholder, \"env\");\r\n throw new Error(`Required environment variable '${cacheKey}' is not set.`);\r\n }\r\n\r\n envCache.set(cacheKey, value);\r\n return value;\r\n}\r\n\r\nasync function resolveInfisicalSecret(\r\n placeholder: InfisicalSecretPlaceholder,\r\n options: SecretResolverOptions\r\n): Promise<SecretValueResolved> {\r\n const infisicalOptions = options.infisical;\r\n const fetcher = await getInfisicalFetcher(infisicalOptions);\r\n\r\n const environment = placeholder.environment ?? infisicalOptions?.environment ?? process.env[\"INFISICAL_ENVIRONMENT\"];\r\n const projectId = placeholder.projectId ?? (await resolveInfisicalProjectId(infisicalOptions));\r\n const type = infisicalOptions?.type ?? \"shared\";\r\n\r\n const cacheKey = JSON.stringify({\r\n path: placeholder.path,\r\n key: placeholder.key,\r\n environment,\r\n projectId,\r\n type,\r\n });\r\n\r\n const useCache = infisicalOptions?.cache !== false;\r\n const cached = useCache ? infisicalCache.get(cacheKey) : undefined;\r\n\r\n if (!fetcher) {\r\n if (cached) {\r\n console.warn(\r\n `Infisical fetcher unavailable; using cached secret for ${placeholder.path}:${placeholder.key}.`\r\n );\r\n return cached;\r\n }\r\n\r\n const fallback =\r\n placeholder.default !== undefined\r\n ? placeholder.default\r\n : placeholder.optional\r\n ? undefined\r\n : undefined;\r\n\r\n console.warn(\r\n `Infisical fetcher unavailable; returning ${fallback === undefined ? \"undefined\" : \"default\"} for ${placeholder.path}:${placeholder.key}.`\r\n );\r\n if (fallback === undefined && !placeholder.optional) {\r\n options.onMissingSecret?.(placeholder, \"infisical\");\r\n }\r\n\r\n return fallback;\r\n }\r\n\r\n if (!environment) {\r\n throw new Error(\r\n `Infisical secret '${placeholder.path}:${placeholder.key}' is missing an environment. ` +\r\n \"Set it on the placeholder, pass SecretResolverOptions.infisical.environment, or define INFISICAL_ENVIRONMENT.\"\r\n );\r\n }\r\n\r\n if (!projectId) {\r\n throw new Error(\r\n `Infisical secret '${placeholder.path}:${placeholder.key}' is missing a project id. ` +\r\n \"Set it on the placeholder, pass SecretResolverOptions.infisical.projectId, define INFISICAL_PROJECT_ID, \" +\r\n \"or provide /run/secrets/infisical_project_id (also /var/lib/uns/secrets/infisical_project_id).\"\r\n );\r\n }\r\n\r\n if (cached) {\r\n return cached ?? undefined;\r\n }\r\n\r\n const fetchPromise = fetcher({\r\n path: placeholder.path,\r\n key: placeholder.key,\r\n environment,\r\n projectId,\r\n type,\r\n }).then(secret => {\r\n if (secret === undefined || secret === null) {\r\n if (placeholder.default !== undefined) {\r\n return placeholder.default;\r\n }\r\n if (placeholder.optional) {\r\n return undefined;\r\n }\r\n options.onMissingSecret?.(placeholder, \"infisical\");\r\n throw new Error(\r\n `Secret '${placeholder.path}:${placeholder.key}' not found in Infisical.`\r\n );\r\n }\r\n return secret;\r\n }).catch(error => {\r\n if (cached) {\r\n console.warn(\r\n `Infisical fetch failed (${error instanceof Error ? error.message : String(error)}); using cached secret for ${placeholder.path}:${placeholder.key}.`\r\n );\r\n return cached;\r\n }\r\n\r\n const fallback =\r\n placeholder.default !== undefined\r\n ? placeholder.default\r\n : placeholder.optional\r\n ? undefined\r\n : undefined;\r\n\r\n console.warn(\r\n `Infisical fetch failed (${error instanceof Error ? error.message : String(error)}); returning ${fallback === undefined ? \"undefined\" : \"default\"} for ${placeholder.path}:${placeholder.key}.`\r\n );\r\n\r\n if (fallback === undefined && !placeholder.optional) {\r\n options.onMissingSecret?.(placeholder, \"infisical\");\r\n throw new Error(\r\n `Failed to fetch Infisical secret ${placeholder.path}:${placeholder.key}: ${\r\n error instanceof Error ? error.message : String(error)\r\n }`\r\n );\r\n }\r\n\r\n return fallback;\r\n });\r\n\r\n const guardedPromise = fetchPromise.then(\r\n value => value,\r\n error => {\r\n if (useCache) {\r\n infisicalCache.delete(cacheKey);\r\n }\r\n throw error;\r\n }\r\n );\r\n\r\n if (useCache) {\r\n infisicalCache.set(cacheKey, guardedPromise);\r\n }\r\n\r\n return guardedPromise;\r\n}\r\n\r\nasync function getInfisicalFetcher(\r\n options?: InfisicalResolverOptions\r\n): Promise<InfisicalFetcher | undefined> {\r\n const effectiveOptions = options ?? {};\r\n\r\n if (effectiveOptions.fetchSecret) {\r\n return effectiveOptions.fetchSecret;\r\n }\r\n\r\n const token = await resolveInfisicalToken(effectiveOptions);\r\n\r\n if (!token) {\r\n return undefined;\r\n }\r\n\r\n const siteUrl = await resolveInfisicalSiteUrl(effectiveOptions);\r\n const cacheKey = `${token}::${siteUrl ?? \"\"}`;\r\n\r\n if (!defaultInfisicalFetcherCache.has(cacheKey)) {\r\n defaultInfisicalFetcherCache.set(\r\n cacheKey,\r\n createDefaultInfisicalFetcher(token, siteUrl)\r\n );\r\n }\r\n\r\n const baseFetcher = await defaultInfisicalFetcherCache.get(cacheKey)!;\r\n return baseFetcher;\r\n}\r\n\r\nconst defaultInfisicalFetcherCache = new Map<string, Promise<InfisicalFetcher>>();\r\n\r\nasync function createDefaultInfisicalFetcher(\r\n token: string,\r\n siteUrl?: string\r\n): Promise<InfisicalFetcher> {\r\n try {\r\n const sdkModule = await import(\"@infisical/sdk\");\r\n const { InfisicalSDK, SecretType } = sdkModule;\r\n if (!InfisicalSDK) {\r\n throw new Error(\"@infisical/sdk does not export InfisicalSDK\");\r\n }\r\n\r\n const sdkInstance = new InfisicalSDK({ siteUrl: siteUrl ?? \"\" });\r\n const authenticatedSdk = sdkInstance.auth().accessToken(token);\r\n\r\n return async ({ path, key, environment, projectId, type = \"shared\" }: InfisicalFetchRequest) => {\r\n if (!environment) {\r\n throw new Error(\r\n `Infisical secret '${path}:${key}' is missing an environment.`\r\n );\r\n }\r\n if (!projectId) {\r\n throw new Error(\r\n `Infisical secret '${path}:${key}' is missing a project id.`\r\n );\r\n }\r\n\r\n const secret = await authenticatedSdk\r\n .secrets()\r\n .getSecret({\r\n secretName: key,\r\n secretPath: path,\r\n environment,\r\n projectId,\r\n viewSecretValue: true,\r\n type: type === \"personal\" ? SecretType.Personal : SecretType.Shared,\r\n });\r\n\r\n return secret?.secretValue ?? undefined;\r\n };\r\n } catch (error) {\r\n throw new Error(\r\n \"Failed to initialize @infisical/sdk. Install the package or provide SecretResolverOptions.infisical.fetchSecret.\",\r\n { cause: error as Error }\r\n );\r\n }\r\n}\r\n"]}
1
+ {"version":3,"file":"secret-resolver.js","sourceRoot":"","sources":["../../src/uns-config/secret-resolver.ts"],"names":[],"mappings":"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","sourcesContent":["import fs from \"node:fs/promises\";\nimport os from \"node:os\";\nimport type { NetworkInterfaceInfo } from \"node:os\";\nimport type { AppConfig } from \"../config/app-config.js\";\nimport {\n isSecretPlaceholder,\n type EnvSecretPlaceholder,\n type InfisicalSecretPlaceholder,\n type SecretPlaceholder,\n} from \"./secret-placeholders.js\";\nimport {\n isHostPlaceholder,\n type HostPlaceholder,\n type SystemHostPlaceholder,\n} from \"./host-placeholders.js\";\n\nexport type SecretValueResolved = string | undefined;\nexport type HostValueResolved = string | undefined;\n\ntype SecretPlaceholderCandidate =\n | { provider: \"env\"; key: string }\n | { provider: \"infisical\"; key: string; path: string };\n\ntype HostPlaceholderCandidate = HostPlaceholder;\n\nexport type ResolvedConfig<T> = T extends SecretPlaceholderCandidate\n ? SecretValueResolved\n : T extends HostPlaceholderCandidate\n ? HostValueResolved\n : T extends (infer U)[]\n ? ResolvedConfig<U>[]\n : T extends Record<string, unknown>\n ? { [K in keyof T]: ResolvedConfig<T[K]> }\n : T;\n\nexport type ResolvedAppConfig = ResolvedConfig<AppConfig>;\n\nexport interface InfisicalFetchRequest {\n path: string;\n key: string;\n environment?: string;\n projectId?: string;\n type?: \"shared\" | \"personal\";\n}\n\nexport type InfisicalFetcher = (\n request: InfisicalFetchRequest\n) => Promise<string | undefined>;\n\nexport interface InfisicalResolverOptions {\n /**\n * Provide a custom fetcher. If omitted, the resolver tries to lazily instantiate\n * an Infisical client using @infisical/sdk based on the supplied token/siteUrl/options.\n */\n fetchSecret?: InfisicalFetcher;\n /**\n * Machine token or personal token used when creating the default Infisical client.\n * Falls back to the INFISICAL_TOKEN or INFISICAL_PERSONAL_TOKEN environment variables.\n */\n token?: string;\n /** Optional Infisical site URL override. Defaults to INFISICAL_SITE_URL when present. */\n siteUrl?: string;\n /** Default environment used when a placeholder does not specify one explicitly. */\n environment?: string;\n /** Default project id used when a placeholder does not provide one. */\n projectId?: string;\n /** Default secret type. Shared secrets are used by default. */\n type?: \"shared\" | \"personal\";\n /** Disable in-memory caching when set to false. Enabled by default. */\n cache?: boolean;\n}\n\nexport interface SecretResolverOptions {\n /** Environment map used for `env` placeholders. Defaults to process.env. */\n env?: NodeJS.ProcessEnv;\n /** Configuration for resolving Infisical placeholders. */\n infisical?: InfisicalResolverOptions;\n /** Callback invoked before throwing when a required secret cannot be resolved. */\n onMissingSecret?: (placeholder: SecretPlaceholder, source: \"env\" | \"infisical\") => void;\n /** Configuration for resolving host placeholders. */\n hosts?: HostResolverOptions;\n}\n\nexport interface HostResolverOptions {\n /** Optional environment map used when falling back to process.env lookups. */\n env?: NodeJS.ProcessEnv;\n /** Static mapping of external host keys to concrete host strings. */\n externalHosts?: Record<string, string | undefined>;\n /**\n * Custom resolver invoked when an external host needs to be resolved.\n * It can return synchronously or asynchronously.\n */\n resolveExternal?: (key: string) => string | undefined | Promise<string | undefined>;\n /** Override for os.networkInterfaces (handy for tests). */\n networkInterfaces?: () => Record<string, NetworkInterfaceInfo[] | undefined>;\n /** Callback invoked before throwing when a required host cannot be resolved. */\n onMissingHost?: (placeholder: HostPlaceholder) => void;\n}\n\nconst INFISICAL_TOKEN_FILE = \"/run/secrets/infisical_token\";\nconst INFISICAL_PROJECT_ID_FILE = \"/run/secrets/infisical_project_id\";\nconst INFISICAL_SITE_URL_FILE = \"/run/secrets/infisical_site_url\";\nconst INFISICAL_TOKEN_FILE_ALT = \"/var/lib/uns/secrets/infisical_token\";\nconst INFISICAL_PROJECT_ID_FILE_ALT = \"/var/lib/uns/secrets/infisical_project_id\";\nconst INFISICAL_SITE_URL_FILE_ALT = \"/var/lib/uns/secrets/infisical_site_url\";\n\nconst envCache = new Map<string, string | undefined>();\nconst infisicalCache = new Map<string, Promise<string | undefined>>();\n\nasync function readSecretFile(filePath: string): Promise<string | undefined> {\n try {\n const content = await fs.readFile(filePath, \"utf8\");\n const trimmed = content.trim();\n return trimmed.length > 0 ? trimmed : undefined;\n } catch (error) {\n if ((error as NodeJS.ErrnoException).code === \"ENOENT\") {\n return undefined;\n }\n throw new Error(\n `Failed to read Infisical secret file '${filePath}': ${\n error instanceof Error ? error.message : String(error)\n }`,\n { cause: error as Error }\n );\n }\n}\n\nasync function resolveInfisicalToken(\n options?: InfisicalResolverOptions\n): Promise<string | undefined> {\n const candidate =\n options?.token ??\n process.env[\"INFISICAL_TOKEN\"] ??\n process.env[\"INFISICAL_PERSONAL_TOKEN\"] ??\n (await readSecretFile(INFISICAL_TOKEN_FILE)) ??\n (await readSecretFile(INFISICAL_TOKEN_FILE_ALT));\n\n return candidate?.trim() || undefined;\n}\n\nasync function resolveInfisicalSiteUrl(\n options?: InfisicalResolverOptions\n): Promise<string | undefined> {\n const candidate =\n options?.siteUrl ??\n process.env[\"INFISICAL_SITE_URL\"] ??\n (await readSecretFile(INFISICAL_SITE_URL_FILE)) ??\n (await readSecretFile(INFISICAL_SITE_URL_FILE_ALT));\n\n return candidate?.trim() || undefined;\n}\n\nasync function resolveInfisicalProjectId(\n options?: InfisicalResolverOptions\n): Promise<string | undefined> {\n const candidate =\n options?.projectId ??\n process.env[\"INFISICAL_PROJECT_ID\"] ??\n (await readSecretFile(INFISICAL_PROJECT_ID_FILE)) ??\n (await readSecretFile(INFISICAL_PROJECT_ID_FILE_ALT));\n\n return candidate?.trim() || undefined;\n}\n\nconst structuredCloneFallback = <T>(value: T): T =>\n typeof structuredClone === \"function\"\n ? structuredClone(value)\n : (JSON.parse(JSON.stringify(value)) as T);\n\nexport async function resolveConfigSecrets(\n config: AppConfig,\n options: SecretResolverOptions = {}\n): Promise<ResolvedAppConfig> {\n const working = structuredCloneFallback(config);\n await resolveNode(working, options);\n return working;\n}\n\nexport function clearSecretResolverCaches(): void {\n envCache.clear();\n infisicalCache.clear();\n defaultInfisicalFetcherCache.clear();\n}\n\nexport async function resolveInfisicalConfig(\n options?: InfisicalResolverOptions\n): Promise<{\n token: string | undefined;\n projectId: string | undefined;\n siteUrl: string | undefined;\n}> {\n const [token, projectId, siteUrl] = await Promise.all([\n resolveInfisicalToken(options),\n resolveInfisicalProjectId(options),\n resolveInfisicalSiteUrl(options),\n ]);\n\n return { token, projectId, siteUrl };\n}\n\nasync function resolveNode(node: unknown, options: SecretResolverOptions): Promise<unknown> {\n if (isSecretPlaceholder(node)) {\n return resolveSecretValue(node, options);\n }\n\n if (isHostPlaceholder(node)) {\n return resolveHostValue(node, options.hosts);\n }\n\n if (Array.isArray(node)) {\n const resolvedArray = await Promise.all(node.map(item => resolveNode(item, options)));\n return resolvedArray;\n }\n\n if (node && typeof node === \"object\") {\n const obj = node as Record<string, unknown>;\n\n for (const key of Object.keys(obj)) {\n const current = obj[key];\n\n if (isSecretPlaceholder(current)) {\n const resolved = await resolveSecretValue(current, options);\n if (resolved === undefined) {\n delete obj[key];\n } else {\n obj[key] = resolved;\n }\n continue;\n }\n\n if (isHostPlaceholder(current)) {\n const resolved = await resolveHostValue(current, options.hosts);\n if (resolved === undefined) {\n delete obj[key];\n } else {\n obj[key] = resolved;\n }\n continue;\n }\n\n const resolvedChild = await resolveNode(current, options);\n obj[key] = resolvedChild;\n }\n\n return obj;\n }\n\n return node;\n}\n\nasync function resolveSecretValue(\n placeholder: SecretPlaceholder,\n options: SecretResolverOptions\n): Promise<SecretValueResolved> {\n switch (placeholder.provider) {\n case \"env\":\n return resolveEnvSecret(placeholder, options);\n case \"infisical\":\n return resolveInfisicalSecret(placeholder, options);\n default:\n // Exhaustive check to guard future provider additions.\n return assertNeverProvider(placeholder);\n }\n}\n\nfunction assertNeverProvider(x: never): never {\n throw new Error(`Unsupported secret provider: ${JSON.stringify(x)}`);\n}\n\nasync function resolveHostValue(\n placeholder: HostPlaceholder,\n options?: HostResolverOptions\n): Promise<HostValueResolved> {\n const effectiveOptions = options ?? {};\n\n switch (placeholder.provider) {\n case \"inline\":\n return placeholder.value;\n case \"external\": {\n const envMap = effectiveOptions.env ?? process.env;\n\n let resolved = await maybeResolveExternal(\n placeholder.key,\n effectiveOptions.resolveExternal\n );\n\n if (resolved === undefined) {\n resolved = effectiveOptions.externalHosts?.[placeholder.key];\n }\n\n if (resolved === undefined) {\n resolved = envMap?.[placeholder.key];\n }\n\n if (resolved === undefined) {\n if (placeholder.default !== undefined) {\n return placeholder.default;\n }\n if (placeholder.optional) {\n return undefined;\n }\n\n effectiveOptions.onMissingHost?.(placeholder);\n throw new Error(`External host '${placeholder.key}' could not be resolved.`);\n }\n\n return resolved;\n }\n case \"system\":\n return resolveSystemHost(placeholder, effectiveOptions);\n default:\n return assertNeverHostProvider(placeholder);\n }\n}\n\nasync function maybeResolveExternal(\n key: string,\n resolver?: (key: string) => string | undefined | Promise<string | undefined>\n): Promise<string | undefined> {\n if (!resolver) {\n return undefined;\n }\n\n try {\n return await resolver(key);\n } catch (error) {\n throw new Error(\n `Failed to resolve external host '${key}' via custom resolver: ${\n error instanceof Error ? error.message : String(error)\n }`,\n { cause: error }\n );\n }\n}\n\nfunction assertNeverHostProvider(x: never): never {\n throw new Error(`Unsupported host provider: ${JSON.stringify(x)}`);\n}\n\nfunction resolveSystemHost(\n placeholder: SystemHostPlaceholder,\n options: HostResolverOptions\n): HostValueResolved {\n const getInterfaces = options.networkInterfaces ?? os.networkInterfaces;\n const interfaces = getInterfaces();\n const family = placeholder.family ?? \"IPv4\";\n const targetName = placeholder.interfaceName;\n\n const interfaceEntries: Array<readonly [string, NetworkInterfaceInfo[] | undefined]> = targetName\n ? [[targetName, interfaces[targetName]]]\n : Object.entries(interfaces);\n\n for (const [, ifaceList] of interfaceEntries) {\n if (!ifaceList) {\n continue;\n }\n for (const iface of ifaceList) {\n if (\n iface &&\n iface.family === family &&\n iface.internal !== true &&\n typeof iface.address === \"string\" &&\n iface.address.length > 0\n ) {\n return iface.address;\n }\n }\n\n if (targetName) {\n break;\n }\n }\n\n if (placeholder.default !== undefined) {\n return placeholder.default;\n }\n\n if (placeholder.optional) {\n return undefined;\n }\n\n options.onMissingHost?.(placeholder);\n const targetDescription = targetName ? `interface '${targetName}'` : \"available interfaces\";\n throw new Error(\n `System host lookup failed for ${targetDescription} (family ${family}).`\n );\n}\n\nfunction resolveEnvSecret(\n placeholder: EnvSecretPlaceholder,\n options: SecretResolverOptions\n): SecretValueResolved {\n const envMap = options.env ?? process.env;\n const cacheKey = placeholder.key;\n\n if (envCache.has(cacheKey)) {\n return envCache.get(cacheKey) ?? undefined;\n }\n\n const value = envMap[cacheKey];\n\n if (value === undefined || value === null) {\n if (placeholder.default !== undefined) {\n envCache.set(cacheKey, placeholder.default);\n return placeholder.default;\n }\n if (placeholder.optional) {\n envCache.set(cacheKey, undefined);\n return undefined;\n }\n\n options.onMissingSecret?.(placeholder, \"env\");\n throw new Error(`Required environment variable '${cacheKey}' is not set.`);\n }\n\n envCache.set(cacheKey, value);\n return value;\n}\n\nasync function resolveInfisicalSecret(\n placeholder: InfisicalSecretPlaceholder,\n options: SecretResolverOptions\n): Promise<SecretValueResolved> {\n const infisicalOptions = options.infisical;\n const fetcher = await getInfisicalFetcher(infisicalOptions);\n\n const environment = placeholder.environment ?? infisicalOptions?.environment ?? process.env[\"INFISICAL_ENVIRONMENT\"];\n const projectId = placeholder.projectId ?? (await resolveInfisicalProjectId(infisicalOptions));\n const type = infisicalOptions?.type ?? \"shared\";\n\n const cacheKey = JSON.stringify({\n path: placeholder.path,\n key: placeholder.key,\n environment,\n projectId,\n type,\n });\n\n const useCache = infisicalOptions?.cache !== false;\n const cached = useCache ? infisicalCache.get(cacheKey) : undefined;\n\n if (!fetcher) {\n if (cached) {\n console.warn(\n `Infisical fetcher unavailable; using cached secret for ${placeholder.path}:${placeholder.key}.`\n );\n return cached;\n }\n\n const fallback =\n placeholder.default !== undefined\n ? placeholder.default\n : placeholder.optional\n ? undefined\n : undefined;\n\n console.warn(\n `Infisical fetcher unavailable; returning ${fallback === undefined ? \"undefined\" : \"default\"} for ${placeholder.path}:${placeholder.key}.`\n );\n if (fallback === undefined && !placeholder.optional) {\n options.onMissingSecret?.(placeholder, \"infisical\");\n }\n\n return fallback;\n }\n\n if (!environment) {\n throw new Error(\n `Infisical secret '${placeholder.path}:${placeholder.key}' is missing an environment. ` +\n \"Set it on the placeholder, pass SecretResolverOptions.infisical.environment, or define INFISICAL_ENVIRONMENT.\"\n );\n }\n\n if (!projectId) {\n throw new Error(\n `Infisical secret '${placeholder.path}:${placeholder.key}' is missing a project id. ` +\n \"Set it on the placeholder, pass SecretResolverOptions.infisical.projectId, define INFISICAL_PROJECT_ID, \" +\n \"or provide /run/secrets/infisical_project_id (also /var/lib/uns/secrets/infisical_project_id).\"\n );\n }\n\n if (cached) {\n return cached ?? undefined;\n }\n\n const fetchPromise = fetcher({\n path: placeholder.path,\n key: placeholder.key,\n environment,\n projectId,\n type,\n }).then(secret => {\n if (secret === undefined || secret === null) {\n if (placeholder.default !== undefined) {\n return placeholder.default;\n }\n if (placeholder.optional) {\n return undefined;\n }\n options.onMissingSecret?.(placeholder, \"infisical\");\n throw new Error(\n `Secret '${placeholder.path}:${placeholder.key}' not found in Infisical.`\n );\n }\n return secret;\n }).catch(error => {\n if (cached) {\n console.warn(\n `Infisical fetch failed (${error instanceof Error ? error.message : String(error)}); using cached secret for ${placeholder.path}:${placeholder.key}.`\n );\n return cached;\n }\n\n const fallback =\n placeholder.default !== undefined\n ? placeholder.default\n : placeholder.optional\n ? undefined\n : undefined;\n\n console.warn(\n `Infisical fetch failed (${error instanceof Error ? error.message : String(error)}); returning ${fallback === undefined ? \"undefined\" : \"default\"} for ${placeholder.path}:${placeholder.key}.`\n );\n\n if (fallback === undefined && !placeholder.optional) {\n options.onMissingSecret?.(placeholder, \"infisical\");\n throw new Error(\n `Failed to fetch Infisical secret ${placeholder.path}:${placeholder.key}: ${\n error instanceof Error ? error.message : String(error)\n }`\n );\n }\n\n return fallback;\n });\n\n const guardedPromise = fetchPromise.then(\n value => value,\n error => {\n if (useCache) {\n infisicalCache.delete(cacheKey);\n }\n throw error;\n }\n );\n\n if (useCache) {\n infisicalCache.set(cacheKey, guardedPromise);\n }\n\n return guardedPromise;\n}\n\nasync function getInfisicalFetcher(\n options?: InfisicalResolverOptions\n): Promise<InfisicalFetcher | undefined> {\n const effectiveOptions = options ?? {};\n\n if (effectiveOptions.fetchSecret) {\n return effectiveOptions.fetchSecret;\n }\n\n const token = await resolveInfisicalToken(effectiveOptions);\n\n if (!token) {\n return undefined;\n }\n\n const siteUrl = await resolveInfisicalSiteUrl(effectiveOptions);\n const cacheKey = `${token}::${siteUrl ?? \"\"}`;\n\n if (!defaultInfisicalFetcherCache.has(cacheKey)) {\n defaultInfisicalFetcherCache.set(\n cacheKey,\n createDefaultInfisicalFetcher(token, siteUrl)\n );\n }\n\n const baseFetcher = await defaultInfisicalFetcherCache.get(cacheKey)!;\n return baseFetcher;\n}\n\nconst defaultInfisicalFetcherCache = new Map<string, Promise<InfisicalFetcher>>();\n\nasync function createDefaultInfisicalFetcher(\n token: string,\n siteUrl?: string\n): Promise<InfisicalFetcher> {\n try {\n const sdkModule = await import(\"@infisical/sdk\");\n const { InfisicalSDK, SecretType } = sdkModule;\n if (!InfisicalSDK) {\n throw new Error(\"@infisical/sdk does not export InfisicalSDK\");\n }\n\n const sdkInstance = new InfisicalSDK({ siteUrl: siteUrl ?? \"\" });\n const authenticatedSdk = sdkInstance.auth().accessToken(token);\n\n return async ({ path, key, environment, projectId, type = \"shared\" }: InfisicalFetchRequest) => {\n if (!environment) {\n throw new Error(\n `Infisical secret '${path}:${key}' is missing an environment.`\n );\n }\n if (!projectId) {\n throw new Error(\n `Infisical secret '${path}:${key}' is missing a project id.`\n );\n }\n\n const secret = await authenticatedSdk\n .secrets()\n .getSecret({\n secretName: key,\n secretPath: path,\n environment,\n projectId,\n viewSecretValue: true,\n type: type === \"personal\" ? SecretType.Personal : SecretType.Shared,\n });\n\n return secret?.secretValue ?? undefined;\n };\n } catch (error) {\n throw new Error(\n \"Failed to initialize @infisical/sdk. Install the package or provide SecretResolverOptions.infisical.fetchSecret.\",\n { cause: error as Error }\n );\n }\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"uns-core-schema.js","sourceRoot":"","sources":["../../src/uns-config/uns-core-schema.ts"],"names":[],"mappings":"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","sourcesContent":["// src/uns-config/uns-core-schema.ts\r\nimport { z } from \"zod\";\r\nimport { secretValueSchema } from \"./secret-placeholders.js\";\r\nimport { hostValueSchema } from \"./host-placeholders.js\";\r\n\r\nconst mqttProtocolSchema = z.enum([\"mqtt\", \"mqtts\", \"ws\", \"wss\", \"tcp\", \"ssl\"]);\r\n\r\nconst mqttServerSchema = z.object({\r\n host: hostValueSchema,\r\n port: z.number().int().positive().optional(),\r\n protocol: mqttProtocolSchema.optional(),\r\n}).strict();\r\n\r\nconst mqttConnectPropertiesSchema = z.object({\r\n sessionExpiryInterval: z.number().int().nonnegative().optional(),\r\n receiveMaximum: z.number().int().positive().optional(),\r\n maximumPacketSize: z.number().int().positive().optional(),\r\n topicAliasMaximum: z.number().int().nonnegative().optional(),\r\n requestResponseInformation: z.boolean().optional(),\r\n requestProblemInformation: z.boolean().optional(),\r\n userProperties: z.record(z.string()).optional(),\r\n}).strict();\r\n\r\nexport const mqttChannelSchema = z.object({\r\n host: hostValueSchema.optional(),\r\n hosts: z.array(hostValueSchema).optional(),\r\n servers: z.array(mqttServerSchema).optional(),\r\n port: z.number().int().positive().optional(),\r\n protocol: mqttProtocolSchema.optional(),\r\n username: z.string().optional(),\r\n password: secretValueSchema.optional(),\r\n clientId: z.string().optional(),\r\n clean: z.boolean().optional(),\r\n keepalive: z.number().int().nonnegative().optional(),\r\n connectTimeout: z.number().int().nonnegative().optional(),\r\n reconnectPeriod: z.number().int().nonnegative().optional(),\r\n reconnectOnConnackError: z.boolean().optional(),\r\n resubscribe: z.boolean().optional(),\r\n queueQoSZero: z.boolean().optional(),\r\n rejectUnauthorized: z.boolean().optional(),\r\n properties: mqttConnectPropertiesSchema.optional(),\r\n ca: z.string().optional(),\r\n cert: z.string().optional(),\r\n key: z.string().optional(),\r\n servername: z.string().optional(),\r\n}).strict().refine((value) => {\r\n return !!value.host || (Array.isArray(value.hosts) && value.hosts.length > 0) || (Array.isArray(value.servers) && value.servers.length > 0);\r\n}, {\r\n message: \"One of host, hosts, or servers must be provided.\",\r\n});\r\n\r\nexport const unsCoreSchema = z.object({\r\n uns: z.object({\r\n graphql: z.string().url(),\r\n rest: z.string().url(),\r\n email: z.string().email().describe(\"Email used when authenticating to graphql endpoint of the UNS instance.\"),\r\n password: secretValueSchema.describe(\"Password or secret value paired with the UNS email.\"),\r\n instanceMode: z.enum([\"wait\", \"force\", \"handover\"]).default(\"wait\"),\r\n processName: z\r\n .string()\r\n .min(1)\r\n .describe(\"Process name used in MQTT topics and logs.\"),\r\n handover: z.boolean().default(true),\r\n jwksWellKnownUrl: z.string().url().optional(),\r\n kidWellKnownUrl: z.string().url().optional(),\r\n env: z.enum([\"dev\", \"staging\", \"test\", \"prod\"]).default(\"dev\"),\r\n }).strict(),\r\n\r\n input: mqttChannelSchema.optional(),\r\n output: mqttChannelSchema.optional(),\r\n infra: mqttChannelSchema,\r\n devops: z.object({\r\n provider: z.enum([\"azure-devops\"]).default(\"azure-devops\"),\r\n organization: z.string().min(1),\r\n project: z.string().min(1).optional(),\r\n }).strict().optional(),\r\n}).strict();\r\n\r\nexport type UnsCore = z.infer<typeof unsCoreSchema>;\r\n"]}
1
+ {"version":3,"file":"uns-core-schema.js","sourceRoot":"","sources":["../../src/uns-config/uns-core-schema.ts"],"names":[],"mappings":"AAAA,oCAAoC;AACpC,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAC7D,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AAEzD,MAAM,kBAAkB,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC,CAAC;AAEhF,MAAM,gBAAgB,GAAG,CAAC,CAAC,MAAM,CAAC;IAChC,IAAI,EAAE,eAAe;IACrB,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,EAAE;IAC5C,QAAQ,EAAE,kBAAkB,CAAC,QAAQ,EAAE;CACxC,CAAC,CAAC,MAAM,EAAE,CAAC;AAEZ,MAAM,2BAA2B,GAAG,CAAC,CAAC,MAAM,CAAC;IAC3C,qBAAqB,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,WAAW,EAAE,CAAC,QAAQ,EAAE;IAChE,cAAc,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,EAAE;IACtD,iBAAiB,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,EAAE;IACzD,iBAAiB,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,WAAW,EAAE,CAAC,QAAQ,EAAE;IAC5D,0BAA0B,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE;IAClD,yBAAyB,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE;IACjD,cAAc,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,QAAQ,EAAE;CAChD,CAAC,CAAC,MAAM,EAAE,CAAC;AAEZ,MAAM,CAAC,MAAM,iBAAiB,GAAG,CAAC,CAAC,MAAM,CAAC;IACxC,IAAI,EAAE,eAAe,CAAC,QAAQ,EAAE;IAChC,KAAK,EAAE,CAAC,CAAC,KAAK,CAAC,eAAe,CAAC,CAAC,QAAQ,EAAE;IAC1C,OAAO,EAAE,CAAC,CAAC,KAAK,CAAC,gBAAgB,CAAC,CAAC,QAAQ,EAAE;IAC7C,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,EAAE;IAC5C,QAAQ,EAAE,kBAAkB,CAAC,QAAQ,EAAE;IACvC,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAC/B,QAAQ,EAAE,iBAAiB,CAAC,QAAQ,EAAE;IACtC,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAC/B,KAAK,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE;IAC7B,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,WAAW,EAAE,CAAC,QAAQ,EAAE;IACpD,cAAc,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,WAAW,EAAE,CAAC,QAAQ,EAAE;IACzD,eAAe,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,WAAW,EAAE,CAAC,QAAQ,EAAE;IAC1D,uBAAuB,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE;IAC/C,WAAW,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE;IACnC,YAAY,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE;IACpC,kBAAkB,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE;IAC1C,UAAU,EAAE,2BAA2B,CAAC,QAAQ,EAAE;IAClD,EAAE,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IACzB,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAC3B,GAAG,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAC1B,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;CAClC,CAAC,CAAC,MAAM,EAAE,CAAC,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE;IAC3B,OAAO,CAAC,CAAC,KAAK,CAAC,IAAI,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;AAC9I,CAAC,EAAE;IACD,OAAO,EAAE,kDAAkD;CAC5D,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,aAAa,GAAG,CAAC,CAAC,MAAM,CAAC;IACpC,GAAG,EAAE,CAAC,CAAC,MAAM,CAAC;QACZ,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE;QACzB,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE;QACtB,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,KAAK,EAAE,CAAC,QAAQ,CAAC,yEAAyE,CAAC;QAC7G,QAAQ,EAAE,iBAAiB,CAAC,QAAQ,CAAC,qDAAqD,CAAC;QAC3F,YAAY,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,OAAO,EAAE,UAAU,CAAC,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC;QACnE,WAAW,EAAE,CAAC;aACX,MAAM,EAAE;aACR,GAAG,CAAC,CAAC,CAAC;aACN,QAAQ,CAAC,4CAA4C,CAAC;QACzD,QAAQ,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC;QACnC,gBAAgB,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,QAAQ,EAAE;QAC7C,eAAe,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,QAAQ,EAAE;QAC5C,GAAG,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC;KAC/D,CAAC,CAAC,MAAM,EAAE;IAEX,KAAK,EAAE,iBAAiB,CAAC,QAAQ,EAAE;IACnC,MAAM,EAAE,iBAAiB,CAAC,QAAQ,EAAE;IACpC,KAAK,EAAE,iBAAiB;IACxB,MAAM,EAAE,CAAC,CAAC,MAAM,CAAC;QACf,QAAQ,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,OAAO,CAAC,cAAc,CAAC;QAC1D,YAAY,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;QAC/B,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE;KACtC,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;CACvB,CAAC,CAAC,MAAM,EAAE,CAAC","sourcesContent":["// src/uns-config/uns-core-schema.ts\nimport { z } from \"zod\";\nimport { secretValueSchema } from \"./secret-placeholders.js\";\nimport { hostValueSchema } from \"./host-placeholders.js\";\n\nconst mqttProtocolSchema = z.enum([\"mqtt\", \"mqtts\", \"ws\", \"wss\", \"tcp\", \"ssl\"]);\n\nconst mqttServerSchema = z.object({\n host: hostValueSchema,\n port: z.number().int().positive().optional(),\n protocol: mqttProtocolSchema.optional(),\n}).strict();\n\nconst mqttConnectPropertiesSchema = z.object({\n sessionExpiryInterval: z.number().int().nonnegative().optional(),\n receiveMaximum: z.number().int().positive().optional(),\n maximumPacketSize: z.number().int().positive().optional(),\n topicAliasMaximum: z.number().int().nonnegative().optional(),\n requestResponseInformation: z.boolean().optional(),\n requestProblemInformation: z.boolean().optional(),\n userProperties: z.record(z.string()).optional(),\n}).strict();\n\nexport const mqttChannelSchema = z.object({\n host: hostValueSchema.optional(),\n hosts: z.array(hostValueSchema).optional(),\n servers: z.array(mqttServerSchema).optional(),\n port: z.number().int().positive().optional(),\n protocol: mqttProtocolSchema.optional(),\n username: z.string().optional(),\n password: secretValueSchema.optional(),\n clientId: z.string().optional(),\n clean: z.boolean().optional(),\n keepalive: z.number().int().nonnegative().optional(),\n connectTimeout: z.number().int().nonnegative().optional(),\n reconnectPeriod: z.number().int().nonnegative().optional(),\n reconnectOnConnackError: z.boolean().optional(),\n resubscribe: z.boolean().optional(),\n queueQoSZero: z.boolean().optional(),\n rejectUnauthorized: z.boolean().optional(),\n properties: mqttConnectPropertiesSchema.optional(),\n ca: z.string().optional(),\n cert: z.string().optional(),\n key: z.string().optional(),\n servername: z.string().optional(),\n}).strict().refine((value) => {\n return !!value.host || (Array.isArray(value.hosts) && value.hosts.length > 0) || (Array.isArray(value.servers) && value.servers.length > 0);\n}, {\n message: \"One of host, hosts, or servers must be provided.\",\n});\n\nexport const unsCoreSchema = z.object({\n uns: z.object({\n graphql: z.string().url(),\n rest: z.string().url(),\n email: z.string().email().describe(\"Email used when authenticating to graphql endpoint of the UNS instance.\"),\n password: secretValueSchema.describe(\"Password or secret value paired with the UNS email.\"),\n instanceMode: z.enum([\"wait\", \"force\", \"handover\"]).default(\"wait\"),\n processName: z\n .string()\n .min(1)\n .describe(\"Process name used in MQTT topics and logs.\"),\n handover: z.boolean().default(true),\n jwksWellKnownUrl: z.string().url().optional(),\n kidWellKnownUrl: z.string().url().optional(),\n env: z.enum([\"dev\", \"staging\", \"test\", \"prod\"]).default(\"dev\"),\n }).strict(),\n\n input: mqttChannelSchema.optional(),\n output: mqttChannelSchema.optional(),\n infra: mqttChannelSchema,\n devops: z.object({\n provider: z.enum([\"azure-devops\"]).default(\"azure-devops\"),\n organization: z.string().min(1),\n project: z.string().min(1).optional(),\n }).strict().optional(),\n}).strict();\n\nexport type UnsCore = z.infer<typeof unsCoreSchema>;\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"uns-gateway-cli.js","sourceRoot":"","sources":["../../src/uns-grpc/uns-gateway-cli.ts"],"names":[],"mappings":";AACA,OAAO,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAC;AAE1D,SAAS,SAAS;IAChB,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;IACnC,MAAM,IAAI,GAAqC,EAAE,CAAC;IAClD,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACrC,MAAM,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,IAAI,CAAC,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC;YACvB,MAAM,GAAG,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;YACvB,MAAM,GAAG,GAAG,CAAC,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,MAAM,IAAI,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC;YACxF,IAAI,CAAC,GAAG,CAAC,GAAG,GAAG,CAAC;QAClB,CAAC;IACH,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED,SAAS,YAAY;IACnB,MAAM,GAAG,GAAG,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;IAC3C,IAAI,GAAG,IAAI,CAAC,IAAI,GAAG,GAAG,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC;QAC9C,OAAO,OAAO,CAAC,IAAI,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC;IAC/B,CAAC;IACD,OAAO,OAAO,CAAC,GAAG,CAAC,gBAAgB,CAAC;AACtC,CAAC;AAED,MAAM,IAAI,GAAG,SAAS,EAAE,CAAC;AACzB,MAAM,IAAI,GAAG,YAAY,EAAE,IAAI,CAAC,OAAO,IAAI,CAAC,MAAM,CAAC,KAAK,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC;AACrG,MAAM,KAAK,GAAG,MAAM,eAAe,CAAC,IAAI,EAAE;IACxC,mBAAmB,EAAE,OAAO,IAAI,CAAC,aAAa,CAAC,KAAK,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS;IACtG,cAAc,EAAE,OAAO,IAAI,CAAC,gBAAgB,CAAC,KAAK,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS;IACvG,oBAAoB,EAAE,OAAO,IAAI,CAAC,cAAc,CAAC,KAAK,QAAQ,CAAC,CAAC,CAAE,MAAM,CAAC,IAAI,CAAC,cAAc,CAAC,CAAS,CAAC,CAAC,CAAC,SAAS;IAClH,gBAAgB,EAAE,OAAO,IAAI,CAAC,UAAU,CAAC,KAAK,QAAQ,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,KAAK,MAAM,CAAC,CAAC,CAAC,CAAC,SAAS;CACnG,CAAC,CAAC;AACH,OAAO,CAAC,GAAG,CAAC,4BAA4B,KAAK,CAAC,OAAO,SAAS,KAAK,CAAC,KAAK,GAAG,CAAC,CAAC;AAC9E,WAAW,CAAC,GAAG,EAAE,GAAE,CAAC,EAAE,CAAC,IAAI,EAAE,CAAC,CAAC","sourcesContent":["#!/usr/bin/env node\r\nimport { startUnsGateway } from \"./uns-gateway-server.js\";\r\n\r\nfunction parseArgs() {\r\n const argv = process.argv.slice(2);\r\n const args: Record<string, string | boolean> = {};\r\n for (let i = 0; i < argv.length; i++) {\r\n const a = argv[i];\r\n if (a.startsWith(\"--\")) {\r\n const key = a.slice(2);\r\n const val = (i + 1 < argv.length && !argv[i + 1].startsWith(\"--\")) ? argv[++i] : \"true\";\r\n args[key] = val;\r\n }\r\n }\r\n return args;\r\n}\r\n\r\nfunction parseAddrArg(): string | undefined {\r\n const idx = process.argv.indexOf(\"--addr\");\r\n if (idx >= 0 && idx + 1 < process.argv.length) {\r\n return process.argv[idx + 1];\r\n }\r\n return process.env.UNS_GATEWAY_ADDR;\r\n}\r\n\r\nconst args = parseArgs();\r\nconst addr = parseAddrArg() ?? (typeof args[\"addr\"] === \"string\" ? String(args[\"addr\"]) : undefined);\r\nconst bound = await startUnsGateway(addr, {\r\n processNameOverride: typeof args[\"processName\"] === \"string\" ? String(args[\"processName\"]) : undefined,\r\n instanceSuffix: typeof args[\"instanceSuffix\"] === \"string\" ? String(args[\"instanceSuffix\"]) : undefined,\r\n instanceModeOverride: typeof args[\"instanceMode\"] === \"string\" ? (String(args[\"instanceMode\"]) as any) : undefined,\r\n handoverOverride: typeof args[\"handover\"] === \"string\" ? (args[\"handover\"] === \"true\") : undefined,\r\n});\r\nconsole.log(`UNS Gateway listening on ${bound.address} (UDS=${bound.isUDS})`);\r\nsetInterval(() => {}, 1 << 30);\r\n"]}
1
+ {"version":3,"file":"uns-gateway-cli.js","sourceRoot":"","sources":["../../src/uns-grpc/uns-gateway-cli.ts"],"names":[],"mappings":";AACA,OAAO,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAC;AAE1D,SAAS,SAAS;IAChB,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;IACnC,MAAM,IAAI,GAAqC,EAAE,CAAC;IAClD,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACrC,MAAM,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,IAAI,CAAC,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC;YACvB,MAAM,GAAG,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;YACvB,MAAM,GAAG,GAAG,CAAC,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,MAAM,IAAI,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC;YACxF,IAAI,CAAC,GAAG,CAAC,GAAG,GAAG,CAAC;QAClB,CAAC;IACH,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED,SAAS,YAAY;IACnB,MAAM,GAAG,GAAG,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;IAC3C,IAAI,GAAG,IAAI,CAAC,IAAI,GAAG,GAAG,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC;QAC9C,OAAO,OAAO,CAAC,IAAI,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC;IAC/B,CAAC;IACD,OAAO,OAAO,CAAC,GAAG,CAAC,gBAAgB,CAAC;AACtC,CAAC;AAED,MAAM,IAAI,GAAG,SAAS,EAAE,CAAC;AACzB,MAAM,IAAI,GAAG,YAAY,EAAE,IAAI,CAAC,OAAO,IAAI,CAAC,MAAM,CAAC,KAAK,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC;AACrG,MAAM,KAAK,GAAG,MAAM,eAAe,CAAC,IAAI,EAAE;IACxC,mBAAmB,EAAE,OAAO,IAAI,CAAC,aAAa,CAAC,KAAK,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS;IACtG,cAAc,EAAE,OAAO,IAAI,CAAC,gBAAgB,CAAC,KAAK,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS;IACvG,oBAAoB,EAAE,OAAO,IAAI,CAAC,cAAc,CAAC,KAAK,QAAQ,CAAC,CAAC,CAAE,MAAM,CAAC,IAAI,CAAC,cAAc,CAAC,CAAS,CAAC,CAAC,CAAC,SAAS;IAClH,gBAAgB,EAAE,OAAO,IAAI,CAAC,UAAU,CAAC,KAAK,QAAQ,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,KAAK,MAAM,CAAC,CAAC,CAAC,CAAC,SAAS;CACnG,CAAC,CAAC;AACH,OAAO,CAAC,GAAG,CAAC,4BAA4B,KAAK,CAAC,OAAO,SAAS,KAAK,CAAC,KAAK,GAAG,CAAC,CAAC;AAC9E,WAAW,CAAC,GAAG,EAAE,GAAE,CAAC,EAAE,CAAC,IAAI,EAAE,CAAC,CAAC","sourcesContent":["#!/usr/bin/env node\nimport { startUnsGateway } from \"./uns-gateway-server.js\";\n\nfunction parseArgs() {\n const argv = process.argv.slice(2);\n const args: Record<string, string | boolean> = {};\n for (let i = 0; i < argv.length; i++) {\n const a = argv[i];\n if (a.startsWith(\"--\")) {\n const key = a.slice(2);\n const val = (i + 1 < argv.length && !argv[i + 1].startsWith(\"--\")) ? argv[++i] : \"true\";\n args[key] = val;\n }\n }\n return args;\n}\n\nfunction parseAddrArg(): string | undefined {\n const idx = process.argv.indexOf(\"--addr\");\n if (idx >= 0 && idx + 1 < process.argv.length) {\n return process.argv[idx + 1];\n }\n return process.env.UNS_GATEWAY_ADDR;\n}\n\nconst args = parseArgs();\nconst addr = parseAddrArg() ?? (typeof args[\"addr\"] === \"string\" ? String(args[\"addr\"]) : undefined);\nconst bound = await startUnsGateway(addr, {\n processNameOverride: typeof args[\"processName\"] === \"string\" ? String(args[\"processName\"]) : undefined,\n instanceSuffix: typeof args[\"instanceSuffix\"] === \"string\" ? String(args[\"instanceSuffix\"]) : undefined,\n instanceModeOverride: typeof args[\"instanceMode\"] === \"string\" ? (String(args[\"instanceMode\"]) as any) : undefined,\n handoverOverride: typeof args[\"handover\"] === \"string\" ? (args[\"handover\"] === \"true\") : undefined,\n});\nconsole.log(`UNS Gateway listening on ${bound.address} (UDS=${bound.isUDS})`);\nsetInterval(() => {}, 1 << 30);\n"]}
@@ -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\";\r\nimport protoLoader from \"@grpc/proto-loader\";\r\nimport path from \"path\";\r\nimport getPort from \"get-port\";\r\nimport { readFileSync } from \"fs\";\r\nimport { fileURLToPath } from \"url\";\r\nimport { basePath } from \"../base-path.js\";\r\n\r\nimport logger from \"../logger.js\";\r\nimport { ConfigFile } from \"../config-file.js\";\r\nimport UnsProxyProcess from \"../uns/uns-proxy-process.js\";\r\nimport UnsMqttProxy, { MessageMode } from \"../uns-mqtt/uns-mqtt-proxy.js\";\r\nimport { IApiProxyOptions, IGetEndpointOptions, IMqttPublishRequest, IUnsMessage, IUnsParameters, IUnsProcessParameters } from \"../uns/uns-interfaces.js\";\r\nimport type { IMqttConnectProperties, IMqttServerConfig, MqttProtocol } from \"../uns-mqtt/mqtt-interfaces.js\";\r\nimport { UnsPacket } from \"../uns/uns-packet.js\";\r\nimport { randomUUID } from \"crypto\";\r\nimport { MqttTopicBuilder } from \"../uns-mqtt/mqtt-topic-builder.js\";\r\nimport { ObjectTypes } from \"../uns/uns-object.js\";\r\nconst __filename = fileURLToPath(import.meta.url);\r\nconst __dirname = path.dirname(__filename);\r\n\r\nconst defaultGatewayProto = path.resolve(__dirname, \"uns-gateway.proto\");\r\nconst GATEWAY_PROTO = process.env.UNS_GATEWAY_PROTO\r\n ? path.resolve(process.cwd(), process.env.UNS_GATEWAY_PROTO)\r\n : defaultGatewayProto;\r\n\r\ntype GrpcServer = grpc.Server;\r\n\r\nexport interface GatewayAddress {\r\n address: string; // e.g. unix:/tmp/... or 0.0.0.0:PORT\r\n isUDS: boolean;\r\n}\r\n\r\nexport interface GatewayStartOptions {\r\n processNameOverride?: string;\r\n instanceSuffix?: string;\r\n instanceModeOverride?: \"wait\" | \"force\" | \"handover\";\r\n handoverOverride?: boolean;\r\n}\r\n\r\ntype UnsApiProxyLike = {\r\n event: { on(event: string, handler: (payload: any) => void): void };\r\n get(topic: string, attribute: string, options: IGetEndpointOptions): Promise<void>;\r\n unregister(topic: string, attribute: string, method: \"GET\" | \"POST\" | \"PUT\" | \"DELETE\"): Promise<void>;\r\n};\r\n\r\ntype UnsProxyProcessWithApi = UnsProxyProcess & {\r\n createApiProxy(instanceName: string, options: IApiProxyOptions): Promise<UnsApiProxyLike>;\r\n};\r\n\r\ntype MqttChannelConfig = {\r\n host?: string;\r\n hosts?: string[];\r\n servers?: IMqttServerConfig[];\r\n port?: number;\r\n protocol?: MqttProtocol;\r\n username?: string;\r\n password?: string;\r\n clientId?: string;\r\n clean?: boolean;\r\n keepalive?: number;\r\n connectTimeout?: number;\r\n reconnectPeriod?: number;\r\n reconnectOnConnackError?: boolean;\r\n resubscribe?: boolean;\r\n queueQoSZero?: boolean;\r\n rejectUnauthorized?: boolean;\r\n properties?: IMqttConnectProperties;\r\n ca?: string;\r\n cert?: string;\r\n key?: string;\r\n servername?: string;\r\n};\r\n\r\nconst resolveMqttHost = (channel: MqttChannelConfig | undefined, pathLabel: string): string => {\r\n if (!channel) {\r\n throw new Error(`Configuration value '${pathLabel}' is required.`);\r\n }\r\n if (typeof channel.host === \"string\" && channel.host.length > 0) {\r\n return channel.host;\r\n }\r\n if (Array.isArray(channel.hosts) && channel.hosts.length > 0) {\r\n const candidate = channel.hosts.find((host) => typeof host === \"string\" && host.length > 0);\r\n if (candidate) return candidate;\r\n }\r\n if (Array.isArray(channel.servers) && channel.servers.length > 0) {\r\n const candidate = channel.servers.find((server) => typeof server.host === \"string\" && server.host.length > 0);\r\n if (candidate) return candidate.host;\r\n }\r\n throw new Error(`Configuration value '${pathLabel}' must include host, hosts, or servers.`);\r\n};\r\n\r\nconst buildUnsProcessParameters = (\r\n channel: MqttChannelConfig | undefined,\r\n): Omit<IUnsProcessParameters, \"processName\"> => {\r\n if (!channel) return {};\r\n return {\r\n username: channel.username,\r\n password: channel.password,\r\n clientId: channel.clientId,\r\n hosts: channel.hosts,\r\n servers: channel.servers,\r\n port: channel.port,\r\n protocol: channel.protocol,\r\n keepalive: channel.keepalive,\r\n clean: channel.clean,\r\n connectTimeout: channel.connectTimeout,\r\n reconnectPeriod: channel.reconnectPeriod,\r\n reconnectOnConnackError: channel.reconnectOnConnackError,\r\n resubscribe: channel.resubscribe,\r\n queueQoSZero: channel.queueQoSZero,\r\n rejectUnauthorized: channel.rejectUnauthorized,\r\n properties: channel.properties,\r\n ca: channel.ca,\r\n cert: channel.cert,\r\n key: channel.key,\r\n servername: channel.servername,\r\n };\r\n};\r\n\r\nconst buildUnsParameters = (channel: MqttChannelConfig | undefined): IUnsParameters => {\r\n if (!channel) return {};\r\n return {\r\n username: channel.username,\r\n password: channel.password,\r\n clientId: channel.clientId,\r\n hosts: channel.hosts,\r\n servers: channel.servers,\r\n port: channel.port,\r\n protocol: channel.protocol,\r\n keepalive: channel.keepalive,\r\n clean: channel.clean,\r\n connectTimeout: channel.connectTimeout,\r\n reconnectPeriod: channel.reconnectPeriod,\r\n reconnectOnConnackError: channel.reconnectOnConnackError,\r\n resubscribe: channel.resubscribe,\r\n queueQoSZero: channel.queueQoSZero,\r\n rejectUnauthorized: channel.rejectUnauthorized,\r\n properties: channel.properties,\r\n ca: channel.ca,\r\n cert: channel.cert,\r\n key: channel.key,\r\n servername: channel.servername,\r\n };\r\n};\r\n\r\nexport class UnsGatewayServer {\r\n private server: GrpcServer | null = null;\r\n private unsProcess: UnsProxyProcessWithApi | null = null;\r\n private mqttInput: UnsMqttProxy | null = null;\r\n private mqttOutput: UnsMqttProxy | null = null;\r\n private handlers: Set<Function> = new Set();\r\n private unsApiProxy: UnsApiProxyLike | null = null;\r\n private apiStreams: Set<any> = new Set();\r\n private pendingApi: Map<string, any> = new Map();\r\n\r\n private inputHost: string;\r\n private outputHost: string;\r\n private inputParams: IUnsParameters | null = null;\r\n private outputParams: IUnsParameters | null = null;\r\n private apiOptions: IApiProxyOptions | null = null;\r\n private outPublisherActive = false;\r\n private inSubscriberActive = false;\r\n\r\n public async start(\r\n desiredAddr?: string,\r\n opts?: {\r\n processNameOverride?: string;\r\n instanceSuffix?: string;\r\n instanceModeOverride?: \"wait\" | \"force\" | \"handover\";\r\n handoverOverride?: boolean;\r\n }\r\n ): Promise<GatewayAddress> {\r\n const packageDef = protoLoader.loadSync(GATEWAY_PROTO, {\r\n keepCase: true,\r\n longs: String,\r\n enums: String,\r\n defaults: true,\r\n oneofs: true,\r\n });\r\n const proto = grpc.loadPackageDefinition(packageDef) as any;\r\n\r\n // Load config and init UNS process + MQTT proxies\r\n const cfg = await ConfigFile.loadConfig();\r\n const processName = opts?.processNameOverride ?? cfg.uns.processName;\r\n const instanceMode = opts?.instanceModeOverride ?? cfg.uns.instanceMode;\r\n const handover = (typeof opts?.handoverOverride === \"boolean\") ? opts.handoverOverride : cfg.uns.handover;\r\n const suffix = opts?.instanceSuffix ? `-${opts.instanceSuffix}` : \"\";\r\n\r\n const infraHost = resolveMqttHost(cfg.infra as MqttChannelConfig, \"infra\");\r\n const infraParams = buildUnsProcessParameters(cfg.infra as MqttChannelConfig);\r\n this.unsProcess = new UnsProxyProcess(infraHost, { processName, ...infraParams }) as UnsProxyProcessWithApi;\r\n // cache hosts/options; proxies created lazily on first use\r\n this.inputHost = resolveMqttHost(cfg.input as MqttChannelConfig, \"input\");\r\n this.outputHost = resolveMqttHost(cfg.output as MqttChannelConfig, \"output\");\r\n this.inputParams = buildUnsParameters(cfg.input as MqttChannelConfig);\r\n this.outputParams = buildUnsParameters(cfg.output as MqttChannelConfig);\r\n this.apiOptions = cfg.uns?.jwksWellKnownUrl\r\n ? { jwks: { wellKnownJwksUrl: cfg.uns.jwksWellKnownUrl, activeKidUrl: cfg.uns.kidWellKnownUrl } }\r\n : { jwtSecret: \"CHANGEME\" };\r\n\r\n const serviceImpl = {\r\n Publish: this.publish.bind(this),\r\n Subscribe: this.subscribe.bind(this),\r\n RegisterApiGet: this.registerApiGet.bind(this),\r\n UnregisterApiGet: this.unregisterApiGet.bind(this),\r\n ApiEventStream: this.apiEventStream.bind(this),\r\n Ready: this.ready.bind(this),\r\n };\r\n\r\n this.server = new grpc.Server();\r\n this.server.addService(proto.uns.UnsGateway.service, serviceImpl);\r\n\r\n const isUnix = process.platform !== \"win32\";\r\n let addr: string | null = desiredAddr || process.env.UNS_GATEWAY_ADDR || null;\r\n if (!addr) {\r\n if (isUnix) {\r\n const sanitizedProcess = MqttTopicBuilder.sanitizeTopicPart(this.getProcessName());\r\n const sock = `/tmp/${sanitizedProcess}-uns-gateway.sock`;\r\n addr = `unix:${sock}`;\r\n } else {\r\n const port = await getPort();\r\n addr = `0.0.0.0:${port}`;\r\n }\r\n }\r\n\r\n // If UDS and file exists, best-effort unlink (stale sock)\r\n if (addr.startsWith(\"unix:\")) {\r\n const fs = await import(\"fs\");\r\n const p = addr.slice(\"unix:\".length);\r\n try { if (fs.existsSync(p)) fs.unlinkSync(p); } catch {}\r\n }\r\n\r\n await new Promise<void>((resolve, reject) => {\r\n this.server!.bindAsync(addr!, grpc.ServerCredentials.createInsecure(), (err) => {\r\n if (err) return reject(err);\r\n // grpc-js automatically starts the server after bindAsync in recent versions\r\n // Calling start() is deprecated; omit to avoid warnings.\r\n logger.info(`UNS gRPC Gateway listening on ${addr}`);\r\n resolve();\r\n });\r\n });\r\n\r\n return { address: addr!, isUDS: addr!.startsWith(\"unix:\") };\r\n }\r\n\r\n private getProcessName(): string {\r\n try {\r\n const pkgPath = path.join(basePath, \"package.json\");\r\n const raw = readFileSync(pkgPath, \"utf8\");\r\n const pkg = JSON.parse(raw);\r\n return `${pkg.name}-${pkg.version}`;\r\n } catch {\r\n return `uns-gateway`;\r\n }\r\n }\r\n\r\n private async publish(call: any, callback: any) {\r\n try {\r\n await this.ensureMqttOutput();\r\n const req = call.request as any;\r\n if (!this.mqttOutput) throw new Error(\"Gateway not initialized\");\r\n\r\n const topic: string = req.topic;\r\n const attribute: string = req.attribute;\r\n const description: string = req.description ?? \"\";\r\n const tags: string[] = (req.tags ?? []) as string[];\r\n const attributeNeedsPersistence: boolean | null = req.attribute_needs_persistence ?? null;\r\n const valueIsCumulative: boolean = req.value_is_cumulative ?? false;\r\n\r\n let message: IUnsMessage | null = null;\r\n\r\n if (req.data) {\r\n const d = req.data;\r\n const time: string = d.time;\r\n const uom: string | undefined = d.uom || undefined;\r\n const dataGroup: string | undefined = d.data_group || undefined;\r\n const foreignEventKey: string | undefined = d.foreign_event_key || undefined;\r\n\r\n let value: any = undefined;\r\n if (typeof d.value_number === \"number\" && !Number.isNaN(d.value_number)) {\r\n value = d.value_number;\r\n } else if (typeof d.value_string === \"string\" && d.value_string.length > 0) {\r\n value = d.value_string;\r\n }\r\n if (value === undefined) throw new Error(\"Data.value_number or Data.value_string must be set\");\r\n\r\n message = { data: { time, value, uom, dataGroup, foreignEventKey } } as IUnsMessage;\r\n } else if (req.table) {\r\n const t = req.table;\r\n const time: string = t.time;\r\n const dataGroup: string | undefined = t.data_group || undefined;\r\n const columns = (t.columns ?? []).map((col: any) => {\r\n let value: string | number | null = null;\r\n if (typeof col.value_number === \"number\" && !Number.isNaN(col.value_number)) {\r\n value = col.value_number;\r\n } else if (typeof col.value_string === \"string\") {\r\n value = col.value_string;\r\n }\r\n return {\r\n name: col.name as string,\r\n type: col.type as any,\r\n uom: col.uom || undefined,\r\n value,\r\n };\r\n });\r\n\r\n message = { table: { time, columns, dataGroup } } as IUnsMessage;\r\n } else {\r\n throw new Error(\"PublishRequest.content must be data or table\");\r\n }\r\n\r\n const mqttMsg: IMqttPublishRequest = {\r\n topic,\r\n asset: \"meter\",\r\n objectType: ObjectTypes[\"energy-resource\"],\r\n objectId: \"main\",\r\n attributes: {\r\n attribute,\r\n description,\r\n tags,\r\n attributeNeedsPersistence,\r\n ...(message.data ? { data: message.data } : { table: message.table! }),\r\n },\r\n };\r\n\r\n this.mqttOutput.publishMqttMessage(\r\n mqttMsg,\r\n message.data && valueIsCumulative ? MessageMode.Delta : MessageMode.Raw,\r\n );\r\n\r\n callback(null, { ok: true });\r\n } catch (err: any) {\r\n logger.error(`Gateway Publish error: ${err.message}`);\r\n callback(null, { ok: false, error: err.message });\r\n }\r\n }\r\n\r\n private async subscribe(call: any) {\r\n await this.ensureMqttInput();\r\n const req = call.request as any;\r\n const topics: string[] = (req.topics ?? []) as string[];\r\n if (topics.length === 0) {\r\n call.emit(\"error\", { code: grpc.status.INVALID_ARGUMENT, details: \"topics is required\" });\r\n call.end();\r\n return;\r\n }\r\n\r\n // Subscribe and stream messages to this client\r\n this.mqttInput.subscribeAsync(topics);\r\n\r\n const handler = (event: any) => {\r\n try {\r\n // Forward as UNS packet JSON if parsable, else raw message\r\n const payload = event.packet ? JSON.stringify(event.packet) : String(event.message ?? \"\");\r\n call.write({ topic: event.topic, payload });\r\n } catch (e) {\r\n // drop\r\n }\r\n };\r\n this.handlers.add(handler);\r\n this.mqttInput.event.on(\"input\", handler);\r\n\r\n call.on(\"cancelled\", () => this.cleanupHandler(handler));\r\n call.on(\"error\", () => this.cleanupHandler(handler));\r\n call.on(\"close\", () => this.cleanupHandler(handler));\r\n }\r\n\r\n private attachStatusListeners(): void {\r\n if (this.mqttOutput) {\r\n this.mqttOutput.event.on(\"mqttProxyStatus\", (e: any) => {\r\n if (e?.event === \"t-publisher-active\") this.outPublisherActive = !!e.value;\r\n });\r\n }\r\n if (this.mqttInput) {\r\n this.mqttInput.event.on(\"mqttProxyStatus\", (e: any) => {\r\n if (e?.event === \"t-subscriber-active\") this.inSubscriberActive = !!e.value;\r\n });\r\n }\r\n }\r\n\r\n private async ensureMqttOutput() {\r\n if (!this.mqttOutput) {\r\n // slight delay to let process MQTT connect\r\n while ((this.unsProcess as any)?.processMqttProxy?.isConnected === false) {\r\n await new Promise((r) => setTimeout(r, 50));\r\n }\r\n const outputParams: IUnsParameters = {\r\n ...(this.outputParams ?? {}),\r\n publishThrottlingDelay: this.outputParams?.publishThrottlingDelay ?? 1,\r\n };\r\n this.mqttOutput = await this.unsProcess!.createUnsMqttProxy(\r\n this.outputHost,\r\n this.getInstanceName(\"gatewayOutput\"),\r\n \"force\",\r\n true,\r\n outputParams,\r\n );\r\n this.attachStatusListeners();\r\n }\r\n }\r\n\r\n private async ensureMqttInput() {\r\n if (!this.mqttInput) {\r\n while ((this.unsProcess as any)?.processMqttProxy?.isConnected === false) {\r\n await new Promise((r) => setTimeout(r, 50));\r\n }\r\n const inputParams: IUnsParameters = {\r\n ...(this.inputParams ?? {}),\r\n mqttSubToTopics: this.inputParams?.mqttSubToTopics ?? [],\r\n };\r\n this.mqttInput = await this.unsProcess!.createUnsMqttProxy(\r\n this.inputHost,\r\n this.getInstanceName(\"gatewayInput\"),\r\n \"force\",\r\n true,\r\n inputParams,\r\n );\r\n this.attachStatusListeners();\r\n }\r\n }\r\n\r\n private async ensureApiProxy() {\r\n if (!this.unsApiProxy) {\r\n if (typeof (this.unsProcess as any)?.createApiProxy !== \"function\") {\r\n throw new Error(\"API plugin not registered. Please install @uns-kit/api and register it with UnsProxyProcess before starting the gateway.\");\r\n }\r\n this.unsApiProxy = await this.unsProcess!.createApiProxy(this.getInstanceName(\"gatewayApi\"), this.apiOptions!);\r\n this.unsApiProxy.event.on(\"apiGetEvent\", (event: any) => this.onApiGetEvent(event));\r\n }\r\n }\r\n\r\n private getInstanceName(base: string): string {\r\n // derive suffix from processName/CLI by inspecting configured instanceStatusTopic is overkill; keep base names unique per process\r\n return base;\r\n }\r\n\r\n private async registerApiGet(call: any, callback: any) {\r\n try {\r\n await this.ensureApiProxy();\r\n const req = call.request as any;\r\n const topic: string = req.topic;\r\n const attribute: string = req.attribute;\r\n const apiDescription: string | undefined = req.api_description || undefined;\r\n const tags: string[] | undefined = (req.tags ?? []) as string[];\r\n const queryParams: any[] = (req.query_params ?? []).map((p: any) => ({\r\n name: p.name,\r\n type: (p.type === \"number\" || p.type === \"boolean\") ? p.type : \"string\",\r\n required: !!p.required,\r\n description: p.description ?? undefined,\r\n }));\r\n\r\n const options: IGetEndpointOptions = {\r\n apiDescription,\r\n tags,\r\n queryParams,\r\n };\r\n await this.unsApiProxy.get(topic as any, attribute, options);\r\n callback(null, { ok: true });\r\n } catch (err: any) {\r\n logger.error(`Gateway RegisterApiGet error: ${err.message}`);\r\n callback(null, { ok: false, error: err.message });\r\n }\r\n }\r\n\r\n private async unregisterApiGet(call: any, callback: any) {\r\n try {\r\n await this.ensureApiProxy();\r\n const req = call.request as any;\r\n const topic: string = req.topic;\r\n const attribute: string = req.attribute;\r\n await this.unsApiProxy.unregister(topic as any, attribute, \"GET\");\r\n callback(null, { ok: true });\r\n } catch (err: any) {\r\n logger.error(`Gateway UnregisterApiGet error: ${err.message}`);\r\n callback(null, { ok: false, error: err.message });\r\n }\r\n }\r\n\r\n private onApiGetEvent(event: any) {\r\n // Correlate request and forward to connected gRPC streams\r\n const id = randomUUID();\r\n const req = event.req;\r\n const res = event.res;\r\n const path: string = req.path || req.originalUrl || \"/\";\r\n // Derive topic/attribute is optional; we send path and query\r\n const bearer = (req.headers?.[\"authorization\"] as string | undefined) ?? \"\";\r\n this.pendingApi.set(id, res);\r\n // Timeout after 10s\r\n setTimeout(() => {\r\n if (this.pendingApi.has(id)) {\r\n const r = this.pendingApi.get(id);\r\n try { r.status(504).send(\"Gateway timeout\"); } catch {}\r\n this.pendingApi.delete(id);\r\n }\r\n }, 10_000).unref?.();\r\n\r\n const query: Record<string, string> = {};\r\n Object.entries(req.query || {}).forEach(([k, v]) => { query[k] = String(v); });\r\n const msg = { id, method: \"GET\", path, query, bearer };\r\n for (const stream of this.apiStreams) {\r\n try { stream.write(msg); } catch {}\r\n }\r\n }\r\n\r\n private async apiEventStream(call: any) {\r\n // Register stream\r\n await this.ensureApiProxy();\r\n this.apiStreams.add(call);\r\n call.on(\"data\", (resp: any) => {\r\n const id: string = resp.id;\r\n const status: number = resp.status ?? 200;\r\n const body: string = resp.body ?? \"\";\r\n const headers: Record<string, string> = resp.headers ?? {};\r\n const res = this.pendingApi.get(id);\r\n if (res) {\r\n try {\r\n Object.entries(headers).forEach(([k, v]) => res.setHeader(k, v));\r\n res.status(status).send(body);\r\n } catch {}\r\n this.pendingApi.delete(id);\r\n }\r\n });\r\n const cleanup = () => { this.apiStreams.delete(call); };\r\n call.on(\"cancelled\", cleanup);\r\n call.on(\"error\", cleanup);\r\n call.on(\"close\", cleanup);\r\n }\r\n\r\n private async ready(call: any, callback: any) {\r\n try {\r\n const req = call.request as any;\r\n const timeoutMs: number = req.timeout_ms && req.timeout_ms > 0 ? req.timeout_ms : 15000;\r\n const waitOut = !!req.wait_output;\r\n const waitIn = !!req.wait_input;\r\n const waitApi = !!req.wait_api;\r\n\r\n if (waitOut) await this.ensureMqttOutput();\r\n if (waitIn) await this.ensureMqttInput();\r\n if (waitApi) await this.ensureApiProxy();\r\n\r\n const start = Date.now();\r\n const check = () => {\r\n const okOut = !waitOut || this.outPublisherActive;\r\n const okIn = !waitIn || this.inSubscriberActive;\r\n const okApi = !waitApi || !!this.unsApiProxy; // creation ensures listening\r\n return okOut && okIn && okApi;\r\n };\r\n\r\n if (check()) return callback(null, { ok: true });\r\n\r\n const onStatus = () => {\r\n if (check()) done(true);\r\n };\r\n\r\n const done = (ok: boolean, err?: string) => {\r\n if (this.mqttOutput) this.mqttOutput.event.off(\"mqttProxyStatus\", onStatus as any);\r\n if (this.mqttInput) this.mqttInput.event.off(\"mqttProxyStatus\", onStatus as any);\r\n callback(null, { ok, error: err });\r\n };\r\n\r\n if (this.mqttOutput) this.mqttOutput.event.on(\"mqttProxyStatus\", onStatus as any);\r\n if (this.mqttInput) this.mqttInput.event.on(\"mqttProxyStatus\", onStatus as any);\r\n\r\n const iv = setInterval(() => {\r\n if (check()) {\r\n clearInterval(iv);\r\n done(true);\r\n } else if (Date.now() - start > timeoutMs) {\r\n clearInterval(iv);\r\n done(false, \"timeout waiting for readiness\");\r\n }\r\n }, 100);\r\n } catch (e: any) {\r\n callback(null, { ok: false, error: e.message });\r\n }\r\n }\r\n\r\n private cleanupHandler(handler: Function) {\r\n if (this.mqttInput) this.mqttInput.event.off(\"input\", handler as any);\r\n this.handlers.delete(handler);\r\n }\r\n\r\n public async shutdown(): Promise<void> {\r\n try {\r\n for (const h of Array.from(this.handlers)) this.cleanupHandler(h);\r\n if (this.server) {\r\n await new Promise<void>((resolve) => this.server!.tryShutdown(() => resolve()));\r\n this.server = null;\r\n }\r\n if (this.unsProcess) this.unsProcess.shutdown();\r\n } catch (e: any) {\r\n logger.error(`Gateway shutdown error: ${e.message}`);\r\n }\r\n }\r\n}\r\n\r\nexport async function startUnsGateway(addrOverride?: string, opts?: GatewayStartOptions): Promise<GatewayAddress> {\r\n const gw = new UnsGatewayServer();\r\n return gw.start(addrOverride, opts);\r\n}\r\nfunction sanitizeTopicPart(getProcessName: () => string) {\r\n throw new Error(\"Function not implemented.\");\r\n}\r\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 { IApiProxyOptions, IGetEndpointOptions, IMqttPublishRequest, IUnsMessage, IUnsParameters, IUnsProcessParameters } from \"../uns/uns-interfaces.js\";\nimport type { IMqttConnectProperties, IMqttServerConfig, MqttProtocol } from \"../uns-mqtt/mqtt-interfaces.js\";\nimport { UnsPacket } from \"../uns/uns-packet.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\ntype MqttChannelConfig = {\n host?: string;\n hosts?: string[];\n servers?: IMqttServerConfig[];\n port?: number;\n protocol?: MqttProtocol;\n username?: string;\n password?: string;\n clientId?: string;\n clean?: boolean;\n keepalive?: number;\n connectTimeout?: number;\n reconnectPeriod?: number;\n reconnectOnConnackError?: boolean;\n resubscribe?: boolean;\n queueQoSZero?: boolean;\n rejectUnauthorized?: boolean;\n properties?: IMqttConnectProperties;\n ca?: string;\n cert?: string;\n key?: string;\n servername?: string;\n};\n\nconst resolveMqttHost = (channel: MqttChannelConfig | undefined, pathLabel: string): string => {\n if (!channel) {\n throw new Error(`Configuration value '${pathLabel}' is required.`);\n }\n if (typeof channel.host === \"string\" && channel.host.length > 0) {\n return channel.host;\n }\n if (Array.isArray(channel.hosts) && channel.hosts.length > 0) {\n const candidate = channel.hosts.find((host) => typeof host === \"string\" && host.length > 0);\n if (candidate) return candidate;\n }\n if (Array.isArray(channel.servers) && channel.servers.length > 0) {\n const candidate = channel.servers.find((server) => typeof server.host === \"string\" && server.host.length > 0);\n if (candidate) return candidate.host;\n }\n throw new Error(`Configuration value '${pathLabel}' must include host, hosts, or servers.`);\n};\n\nconst buildUnsProcessParameters = (\n channel: MqttChannelConfig | undefined,\n): Omit<IUnsProcessParameters, \"processName\"> => {\n if (!channel) return {};\n return {\n username: channel.username,\n password: channel.password,\n clientId: channel.clientId,\n hosts: channel.hosts,\n servers: channel.servers,\n port: channel.port,\n protocol: channel.protocol,\n keepalive: channel.keepalive,\n clean: channel.clean,\n connectTimeout: channel.connectTimeout,\n reconnectPeriod: channel.reconnectPeriod,\n reconnectOnConnackError: channel.reconnectOnConnackError,\n resubscribe: channel.resubscribe,\n queueQoSZero: channel.queueQoSZero,\n rejectUnauthorized: channel.rejectUnauthorized,\n properties: channel.properties,\n ca: channel.ca,\n cert: channel.cert,\n key: channel.key,\n servername: channel.servername,\n };\n};\n\nconst buildUnsParameters = (channel: MqttChannelConfig | undefined): IUnsParameters => {\n if (!channel) return {};\n return {\n username: channel.username,\n password: channel.password,\n clientId: channel.clientId,\n hosts: channel.hosts,\n servers: channel.servers,\n port: channel.port,\n protocol: channel.protocol,\n keepalive: channel.keepalive,\n clean: channel.clean,\n connectTimeout: channel.connectTimeout,\n reconnectPeriod: channel.reconnectPeriod,\n reconnectOnConnackError: channel.reconnectOnConnackError,\n resubscribe: channel.resubscribe,\n queueQoSZero: channel.queueQoSZero,\n rejectUnauthorized: channel.rejectUnauthorized,\n properties: channel.properties,\n ca: channel.ca,\n cert: channel.cert,\n key: channel.key,\n servername: channel.servername,\n };\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 inputParams: IUnsParameters | null = null;\n private outputParams: IUnsParameters | null = null;\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 = resolveMqttHost(cfg.infra as MqttChannelConfig, \"infra\");\n const infraParams = buildUnsProcessParameters(cfg.infra as MqttChannelConfig);\n this.unsProcess = new UnsProxyProcess(infraHost, { processName, ...infraParams }) as UnsProxyProcessWithApi;\n // cache hosts/options; proxies created lazily on first use\n this.inputHost = resolveMqttHost(cfg.input as MqttChannelConfig, \"input\");\n this.outputHost = resolveMqttHost(cfg.output as MqttChannelConfig, \"output\");\n this.inputParams = buildUnsParameters(cfg.input as MqttChannelConfig);\n this.outputParams = buildUnsParameters(cfg.output as MqttChannelConfig);\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 columns = (t.columns ?? []).map((col: any) => {\n let value: string | number | null = null;\n if (typeof col.value_number === \"number\" && !Number.isNaN(col.value_number)) {\n value = col.value_number;\n } else if (typeof col.value_string === \"string\") {\n value = col.value_string;\n }\n return {\n name: col.name as string,\n type: col.type as any,\n uom: col.uom || undefined,\n value,\n };\n });\n\n message = { table: { time, columns, dataGroup } } as IUnsMessage;\n } else {\n throw new Error(\"PublishRequest.content must be data or table\");\n }\n\n const mqttMsg: IMqttPublishRequest = {\n topic,\n asset: \"meter\",\n objectType: ObjectTypes[\"energy-resource\"],\n objectId: \"main\",\n attributes: {\n attribute,\n description,\n tags,\n attributeNeedsPersistence,\n ...(message.data ? { data: message.data } : { table: message.table! }),\n },\n };\n\n this.mqttOutput.publishMqttMessage(\n mqttMsg,\n message.data && valueIsCumulative ? MessageMode.Delta : 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 const outputParams: IUnsParameters = {\n ...(this.outputParams ?? {}),\n publishThrottlingDelay: this.outputParams?.publishThrottlingDelay ?? 1,\n };\n this.mqttOutput = await this.unsProcess!.createUnsMqttProxy(\n this.outputHost,\n this.getInstanceName(\"gatewayOutput\"),\n \"force\",\n true,\n outputParams,\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 const inputParams: IUnsParameters = {\n ...(this.inputParams ?? {}),\n mqttSubToTopics: this.inputParams?.mqttSubToTopics ?? [],\n };\n this.mqttInput = await this.unsProcess!.createUnsMqttProxy(\n this.inputHost,\n this.getInstanceName(\"gatewayInput\"),\n \"force\",\n true,\n inputParams,\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"]}