@uns-kit/core 1.0.44 → 1.0.45

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 (68) hide show
  1. package/LICENSE +21 -21
  2. package/README.md +102 -102
  3. package/dist/app-config.d.ts.map +1 -0
  4. package/dist/app-config.js.map +1 -0
  5. package/dist/base-path.js.map +1 -1
  6. package/dist/config/app-config.js.map +1 -1
  7. package/dist/config/project.config.extension.js.map +1 -1
  8. package/dist/config-file.js.map +1 -1
  9. package/dist/graphql/schema.js.map +1 -1
  10. package/dist/index.js.map +1 -1
  11. package/dist/logger.js.map +1 -1
  12. package/dist/tools/auth/auth-client.js.map +1 -1
  13. package/dist/tools/auth/index.js.map +1 -1
  14. package/dist/tools/auth/secure-store.js.map +1 -1
  15. package/dist/tools/base-path.js.map +1 -1
  16. package/dist/tools/generate-config-schema.js.map +1 -1
  17. package/dist/tools/generate-uns-dictionary.js +7 -7
  18. package/dist/tools/generate-uns-dictionary.js.map +1 -1
  19. package/dist/tools/generate-uns-measurements.js +7 -7
  20. package/dist/tools/generate-uns-measurements.js.map +1 -1
  21. package/dist/tools/generate-uns-reference.js +9 -9
  22. package/dist/tools/generate-uns-reference.js.map +1 -1
  23. package/dist/tools/pull-request.js.map +1 -1
  24. package/dist/tools/refresh-uns.js +50 -50
  25. package/dist/tools/refresh-uns.js.map +1 -1
  26. package/dist/tools/schema.js.map +1 -1
  27. package/dist/uns/handover-manager-event-emitter.js.map +1 -1
  28. package/dist/uns/handover-manager.js.map +1 -1
  29. package/dist/uns/process-config.js.map +1 -1
  30. package/dist/uns/process-name-service.js.map +1 -1
  31. package/dist/uns/status-monitor.js.map +1 -1
  32. package/dist/uns/uns-asset.js.map +1 -1
  33. package/dist/uns/uns-attributes.js.map +1 -1
  34. package/dist/uns/uns-dictionary-registry.js.map +1 -1
  35. package/dist/uns/uns-dictionary.generated.js.map +1 -1
  36. package/dist/uns/uns-event-emitter.js.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.js.map +1 -1
  42. package/dist/uns/uns-proxy-process.js.map +1 -1
  43. package/dist/uns/uns-proxy.js.map +1 -1
  44. package/dist/uns/uns-tags.js.map +1 -1
  45. package/dist/uns/uns-topic-matcher.js.map +1 -1
  46. package/dist/uns/uns-topics.js.map +1 -1
  47. package/dist/uns-config/config-schema.js.map +1 -1
  48. package/dist/uns-config/host-placeholders.js.map +1 -1
  49. package/dist/uns-config/schema-tolls.js.map +1 -1
  50. package/dist/uns-config/schema-tools.js.map +1 -1
  51. package/dist/uns-config/secret-placeholders.js.map +1 -1
  52. package/dist/uns-config/secret-resolver.js.map +1 -1
  53. package/dist/uns-config/uns-core-schema.d.ts +608 -0
  54. package/dist/uns-config/uns-core-schema.d.ts.map +1 -1
  55. package/dist/uns-config/uns-core-schema.js +1 -1
  56. package/dist/uns-config/uns-core-schema.js.map +1 -1
  57. package/dist/uns-grpc/uns-gateway-cli.js.map +1 -1
  58. package/dist/uns-grpc/uns-gateway-server.js.map +1 -1
  59. package/dist/uns-grpc/uns-gateway.proto +104 -104
  60. package/dist/uns-mqtt/mqtt-interfaces.js.map +1 -1
  61. package/dist/uns-mqtt/mqtt-proxy.js.map +1 -1
  62. package/dist/uns-mqtt/mqtt-topic-builder.js.map +1 -1
  63. package/dist/uns-mqtt/mqtt-worker-init.js.map +1 -1
  64. package/dist/uns-mqtt/mqtt-worker.js.map +1 -1
  65. package/dist/uns-mqtt/throttled-queue.js.map +1 -1
  66. package/dist/uns-mqtt/uns-mqtt-proxy.js.map +1 -1
  67. package/dist/uns-mqtt/ws-proxy.js.map +1 -1
  68. package/package.json +1 -1
@@ -1 +1 @@
1
- {"version":3,"file":"schema.js","sourceRoot":"","sources":["../../src/tools/schema.ts"],"names":[],"mappings":"","sourcesContent":["export type Maybe<T> = T | null;\nexport type InputMaybe<T> = Maybe<T>;\nexport type Exact<T extends { [key: string]: unknown }> = { [K in keyof T]: T[K] };\nexport type MakeOptional<T, K extends keyof T> = Omit<T, K> & { [SubKey in K]?: Maybe<T[SubKey]> };\nexport type MakeMaybe<T, K extends keyof T> = Omit<T, K> & { [SubKey in K]: Maybe<T[SubKey]> };\nexport type MakeEmpty<T extends { [key: string]: unknown }, K extends keyof T> = { [_ in K]?: never };\nexport type Incremental<T> = T | { [P in keyof T]?: P extends ' $fragmentName' | '__typename' ? T[P] : never };\n/** All built-in and custom scalars, mapped to their actual values */\nexport type Scalars = {\n ID: { input: string; output: string; }\n String: { input: string; output: string; }\n Boolean: { input: boolean; output: boolean; }\n Int: { input: number; output: number; }\n Float: { input: number; output: number; }\n Date: { input: any; output: any; }\n};\n\nexport type ActivateMqttTranslation = {\n enabled?: InputMaybe<Scalars['Boolean']['input']>;\n sourceTag?: InputMaybe<Scalars['String']['input']>;\n};\n\n/** MQTT Translator object. */\nexport type AddMqttTranslation = {\n description?: InputMaybe<Scalars['String']['input']>;\n sourceTag?: InputMaybe<Scalars['String']['input']>;\n sourceTopic?: InputMaybe<Scalars['String']['input']>;\n targetTag?: InputMaybe<Scalars['String']['input']>;\n targetTopic?: InputMaybe<Scalars['String']['input']>;\n uom?: InputMaybe<Scalars['String']['input']>;\n};\n\nexport type AddMqttTranslatorTopic = {\n sourceTopic?: InputMaybe<Scalars['String']['input']>;\n};\n\nexport type DeleteMqttTranslation = {\n sourceTag?: InputMaybe<Scalars['String']['input']>;\n};\n\nexport type DeleteMqttTranslatorTopic = {\n sourceTopic?: InputMaybe<Scalars['String']['input']>;\n};\n\nexport type InitMqttTranslation = {\n sourceTag?: InputMaybe<Scalars['String']['input']>;\n sourceTopic?: InputMaybe<Scalars['String']['input']>;\n};\n\nexport type InsertUnsNode = {\n parent?: InputMaybe<Scalars['Int']['input']>;\n unsNode?: InputMaybe<Scalars['String']['input']>;\n};\n\nexport type ModifyMqttTranslation = {\n description?: InputMaybe<Scalars['String']['input']>;\n enabled?: InputMaybe<Scalars['Boolean']['input']>;\n sourceTag?: InputMaybe<Scalars['String']['input']>;\n targetTag?: InputMaybe<Scalars['String']['input']>;\n targetTopic?: InputMaybe<Scalars['String']['input']>;\n uom?: InputMaybe<Scalars['String']['input']>;\n};\n\n/** MQTT Translator object. */\nexport type MqttTranslation = {\n __typename?: 'MqttTranslation';\n description?: Maybe<Scalars['String']['output']>;\n enabled?: Maybe<Scalars['Boolean']['output']>;\n sourceTag?: Maybe<Scalars['String']['output']>;\n sourceTopic?: Maybe<Scalars['String']['output']>;\n targetTag?: Maybe<Scalars['String']['output']>;\n targetTopic?: Maybe<Scalars['String']['output']>;\n uom?: Maybe<Scalars['String']['output']>;\n};\n\nexport type MqttTranslatorTopic = {\n __typename?: 'MqttTranslatorTopic';\n sourceTopic?: Maybe<Scalars['String']['output']>;\n};\n\nexport type Mutation = {\n __typename?: 'Mutation';\n ActivateMqttTranslation?: Maybe<Scalars['Boolean']['output']>;\n AddMqttTranslation?: Maybe<Scalars['Boolean']['output']>;\n /** Add MQTT topic to be translated. */\n AddMqttTranslatorTopic?: Maybe<Scalars['Boolean']['output']>;\n AddUnsNode?: Maybe<Scalars['Boolean']['output']>;\n /** Add MQTT translation. */\n DeleteMqttTranslation?: Maybe<Scalars['Boolean']['output']>;\n DeleteMqttTranslatorTopic?: Maybe<Scalars['Boolean']['output']>;\n DeleteRttNode?: Maybe<Scalars['Boolean']['output']>;\n DeleteUnsNode?: Maybe<Scalars['Boolean']['output']>;\n DeployRttNode?: Maybe<Scalars['Boolean']['output']>;\n /** Populate MQTT Translator table with sourceTag and sourceTopic. */\n InitMqttTranslation?: Maybe<Scalars['Boolean']['output']>;\n /** Update MQTT Translator table with defined targetTopic. */\n ModifyMqttTranslation?: Maybe<Scalars['Boolean']['output']>;\n ModifyUnsNode?: Maybe<Scalars['Boolean']['output']>;\n StartRttNode?: Maybe<Scalars['Boolean']['output']>;\n StopRttNode?: Maybe<Scalars['Boolean']['output']>;\n};\n\n\nexport type MutationActivateMqttTranslationArgs = {\n entry?: InputMaybe<ActivateMqttTranslation>;\n};\n\n\nexport type MutationAddMqttTranslationArgs = {\n entry?: InputMaybe<AddMqttTranslation>;\n};\n\n\nexport type MutationAddMqttTranslatorTopicArgs = {\n entry?: InputMaybe<AddMqttTranslatorTopic>;\n};\n\n\nexport type MutationAddUnsNodeArgs = {\n node?: InputMaybe<InsertUnsNode>;\n};\n\n\nexport type MutationDeleteMqttTranslationArgs = {\n entry?: InputMaybe<DeleteMqttTranslation>;\n};\n\n\nexport type MutationDeleteMqttTranslatorTopicArgs = {\n entry?: InputMaybe<DeleteMqttTranslatorTopic>;\n};\n\n\nexport type MutationDeleteRttNodeArgs = {\n rttNode?: InputMaybe<Scalars['String']['input']>;\n};\n\n\nexport type MutationDeleteUnsNodeArgs = {\n id?: InputMaybe<Scalars['Int']['input']>;\n};\n\n\nexport type MutationDeployRttNodeArgs = {\n rttNode?: InputMaybe<Scalars['String']['input']>;\n tag?: InputMaybe<Scalars['String']['input']>;\n};\n\n\nexport type MutationInitMqttTranslationArgs = {\n entry?: InputMaybe<InitMqttTranslation>;\n};\n\n\nexport type MutationModifyMqttTranslationArgs = {\n entry?: InputMaybe<ModifyMqttTranslation>;\n};\n\n\nexport type MutationModifyUnsNodeArgs = {\n id?: InputMaybe<Scalars['Int']['input']>;\n node?: InputMaybe<UpdateUnsNode>;\n};\n\n\nexport type MutationStartRttNodeArgs = {\n rttNode?: InputMaybe<Scalars['String']['input']>;\n};\n\n\nexport type MutationStopRttNodeArgs = {\n rttNode?: InputMaybe<Scalars['String']['input']>;\n};\n\n/** name: uns-datahub */\nexport type Query = {\n __typename?: 'Query';\n GetAssets?: Maybe<Array<Maybe<UnsAssetSummary>>>;\n GetAttributes?: Maybe<Array<Maybe<UnsAttributeSummary>>>;\n GetTags?: Maybe<Array<Maybe<Scalars['String']['output']>>>;\n /** Get MQTT Translator translations. */\n GetMqttTranslations?: Maybe<Array<Maybe<MqttTranslation>>>;\n GetMqttTranslatorTopics?: Maybe<Array<Maybe<MqttTranslatorTopic>>>;\n GetRttNodes?: Maybe<Array<Maybe<RttNode>>>;\n GetTreeStructure?: Maybe<Array<Maybe<TreeStructure>>>;\n};\n\nexport type QueryGetAssetsArgs = {\n pathPrefix?: InputMaybe<Scalars['String']['input']>;\n};\n\nexport type QueryGetAttributesArgs = {\n pathPrefix?: InputMaybe<Scalars['String']['input']>;\n};\n\nexport type RttNode = {\n __typename?: 'RttNode';\n author?: Maybe<Scalars['String']['output']>;\n deployedVersions?: Maybe<Array<Maybe<Scalars['String']['output']>>>;\n description?: Maybe<Scalars['String']['output']>;\n lastLog?: Maybe<Scalars['String']['output']>;\n latestDeployedVersion?: Maybe<Scalars['String']['output']>;\n memory?: Maybe<Scalars['Int']['output']>;\n pid?: Maybe<Scalars['Int']['output']>;\n restarts?: Maybe<Scalars['Int']['output']>;\n rttNode?: Maybe<Scalars['String']['output']>;\n runningVersion?: Maybe<Scalars['String']['output']>;\n status?: Maybe<Scalars['String']['output']>;\n uptime?: Maybe<Scalars['Int']['output']>;\n version?: Maybe<Scalars['String']['output']>;\n};\n\nexport type TreeStructure = {\n __typename?: 'TreeStructure';\n children?: Maybe<Array<Maybe<TreeStructure>>>;\n id?: Maybe<Scalars['Int']['output']>;\n parent?: Maybe<Scalars['Int']['output']>;\n unsNode?: Maybe<Scalars['String']['output']>;\n};\n\nexport type UnsAssetSummary = {\n __typename?: 'UnsAssetSummary';\n asset?: Maybe<Scalars['String']['output']>;\n description?: Maybe<Scalars['String']['output']>;\n objectId?: Maybe<Scalars['String']['output']>;\n objectType?: Maybe<Scalars['String']['output']>;\n path?: Maybe<Scalars['String']['output']>;\n};\n\nexport type UnsAttributeSummary = {\n __typename?: 'UnsAttributeSummary';\n attributeType?: Maybe<Scalars['String']['output']>;\n dataGroup?: Maybe<Scalars['String']['output']>;\n description?: Maybe<Scalars['String']['output']>;\n objectId?: Maybe<Scalars['String']['output']>;\n objectType?: Maybe<Scalars['String']['output']>;\n path?: Maybe<Scalars['String']['output']>;\n};\n\nexport type UnsNode = {\n __typename?: 'UnsNode';\n id?: Maybe<Scalars['Int']['output']>;\n parent?: Maybe<Scalars['Int']['output']>;\n unsNode?: Maybe<Scalars['String']['output']>;\n};\n\nexport type UpdateUnsNode = {\n parent?: InputMaybe<Scalars['Int']['input']>;\n unsNode?: InputMaybe<Scalars['String']['input']>;\n};\n"]}
1
+ {"version":3,"file":"schema.js","sourceRoot":"","sources":["../../src/tools/schema.ts"],"names":[],"mappings":"","sourcesContent":["export type Maybe<T> = T | null;\r\nexport type InputMaybe<T> = Maybe<T>;\r\nexport type Exact<T extends { [key: string]: unknown }> = { [K in keyof T]: T[K] };\r\nexport type MakeOptional<T, K extends keyof T> = Omit<T, K> & { [SubKey in K]?: Maybe<T[SubKey]> };\r\nexport type MakeMaybe<T, K extends keyof T> = Omit<T, K> & { [SubKey in K]: Maybe<T[SubKey]> };\r\nexport type MakeEmpty<T extends { [key: string]: unknown }, K extends keyof T> = { [_ in K]?: never };\r\nexport type Incremental<T> = T | { [P in keyof T]?: P extends ' $fragmentName' | '__typename' ? T[P] : never };\r\n/** All built-in and custom scalars, mapped to their actual values */\r\nexport type Scalars = {\r\n ID: { input: string; output: string; }\r\n String: { input: string; output: string; }\r\n Boolean: { input: boolean; output: boolean; }\r\n Int: { input: number; output: number; }\r\n Float: { input: number; output: number; }\r\n Date: { input: any; output: any; }\r\n};\r\n\r\nexport type ActivateMqttTranslation = {\r\n enabled?: InputMaybe<Scalars['Boolean']['input']>;\r\n sourceTag?: InputMaybe<Scalars['String']['input']>;\r\n};\r\n\r\n/** MQTT Translator object. */\r\nexport type AddMqttTranslation = {\r\n description?: InputMaybe<Scalars['String']['input']>;\r\n sourceTag?: InputMaybe<Scalars['String']['input']>;\r\n sourceTopic?: InputMaybe<Scalars['String']['input']>;\r\n targetTag?: InputMaybe<Scalars['String']['input']>;\r\n targetTopic?: InputMaybe<Scalars['String']['input']>;\r\n uom?: InputMaybe<Scalars['String']['input']>;\r\n};\r\n\r\nexport type AddMqttTranslatorTopic = {\r\n sourceTopic?: InputMaybe<Scalars['String']['input']>;\r\n};\r\n\r\nexport type DeleteMqttTranslation = {\r\n sourceTag?: InputMaybe<Scalars['String']['input']>;\r\n};\r\n\r\nexport type DeleteMqttTranslatorTopic = {\r\n sourceTopic?: InputMaybe<Scalars['String']['input']>;\r\n};\r\n\r\nexport type InitMqttTranslation = {\r\n sourceTag?: InputMaybe<Scalars['String']['input']>;\r\n sourceTopic?: InputMaybe<Scalars['String']['input']>;\r\n};\r\n\r\nexport type InsertUnsNode = {\r\n parent?: InputMaybe<Scalars['Int']['input']>;\r\n unsNode?: InputMaybe<Scalars['String']['input']>;\r\n};\r\n\r\nexport type ModifyMqttTranslation = {\r\n description?: InputMaybe<Scalars['String']['input']>;\r\n enabled?: InputMaybe<Scalars['Boolean']['input']>;\r\n sourceTag?: InputMaybe<Scalars['String']['input']>;\r\n targetTag?: InputMaybe<Scalars['String']['input']>;\r\n targetTopic?: InputMaybe<Scalars['String']['input']>;\r\n uom?: InputMaybe<Scalars['String']['input']>;\r\n};\r\n\r\n/** MQTT Translator object. */\r\nexport type MqttTranslation = {\r\n __typename?: 'MqttTranslation';\r\n description?: Maybe<Scalars['String']['output']>;\r\n enabled?: Maybe<Scalars['Boolean']['output']>;\r\n sourceTag?: Maybe<Scalars['String']['output']>;\r\n sourceTopic?: Maybe<Scalars['String']['output']>;\r\n targetTag?: Maybe<Scalars['String']['output']>;\r\n targetTopic?: Maybe<Scalars['String']['output']>;\r\n uom?: Maybe<Scalars['String']['output']>;\r\n};\r\n\r\nexport type MqttTranslatorTopic = {\r\n __typename?: 'MqttTranslatorTopic';\r\n sourceTopic?: Maybe<Scalars['String']['output']>;\r\n};\r\n\r\nexport type Mutation = {\r\n __typename?: 'Mutation';\r\n ActivateMqttTranslation?: Maybe<Scalars['Boolean']['output']>;\r\n AddMqttTranslation?: Maybe<Scalars['Boolean']['output']>;\r\n /** Add MQTT topic to be translated. */\r\n AddMqttTranslatorTopic?: Maybe<Scalars['Boolean']['output']>;\r\n AddUnsNode?: Maybe<Scalars['Boolean']['output']>;\r\n /** Add MQTT translation. */\r\n DeleteMqttTranslation?: Maybe<Scalars['Boolean']['output']>;\r\n DeleteMqttTranslatorTopic?: Maybe<Scalars['Boolean']['output']>;\r\n DeleteRttNode?: Maybe<Scalars['Boolean']['output']>;\r\n DeleteUnsNode?: Maybe<Scalars['Boolean']['output']>;\r\n DeployRttNode?: Maybe<Scalars['Boolean']['output']>;\r\n /** Populate MQTT Translator table with sourceTag and sourceTopic. */\r\n InitMqttTranslation?: Maybe<Scalars['Boolean']['output']>;\r\n /** Update MQTT Translator table with defined targetTopic. */\r\n ModifyMqttTranslation?: Maybe<Scalars['Boolean']['output']>;\r\n ModifyUnsNode?: Maybe<Scalars['Boolean']['output']>;\r\n StartRttNode?: Maybe<Scalars['Boolean']['output']>;\r\n StopRttNode?: Maybe<Scalars['Boolean']['output']>;\r\n};\r\n\r\n\r\nexport type MutationActivateMqttTranslationArgs = {\r\n entry?: InputMaybe<ActivateMqttTranslation>;\r\n};\r\n\r\n\r\nexport type MutationAddMqttTranslationArgs = {\r\n entry?: InputMaybe<AddMqttTranslation>;\r\n};\r\n\r\n\r\nexport type MutationAddMqttTranslatorTopicArgs = {\r\n entry?: InputMaybe<AddMqttTranslatorTopic>;\r\n};\r\n\r\n\r\nexport type MutationAddUnsNodeArgs = {\r\n node?: InputMaybe<InsertUnsNode>;\r\n};\r\n\r\n\r\nexport type MutationDeleteMqttTranslationArgs = {\r\n entry?: InputMaybe<DeleteMqttTranslation>;\r\n};\r\n\r\n\r\nexport type MutationDeleteMqttTranslatorTopicArgs = {\r\n entry?: InputMaybe<DeleteMqttTranslatorTopic>;\r\n};\r\n\r\n\r\nexport type MutationDeleteRttNodeArgs = {\r\n rttNode?: InputMaybe<Scalars['String']['input']>;\r\n};\r\n\r\n\r\nexport type MutationDeleteUnsNodeArgs = {\r\n id?: InputMaybe<Scalars['Int']['input']>;\r\n};\r\n\r\n\r\nexport type MutationDeployRttNodeArgs = {\r\n rttNode?: InputMaybe<Scalars['String']['input']>;\r\n tag?: InputMaybe<Scalars['String']['input']>;\r\n};\r\n\r\n\r\nexport type MutationInitMqttTranslationArgs = {\r\n entry?: InputMaybe<InitMqttTranslation>;\r\n};\r\n\r\n\r\nexport type MutationModifyMqttTranslationArgs = {\r\n entry?: InputMaybe<ModifyMqttTranslation>;\r\n};\r\n\r\n\r\nexport type MutationModifyUnsNodeArgs = {\r\n id?: InputMaybe<Scalars['Int']['input']>;\r\n node?: InputMaybe<UpdateUnsNode>;\r\n};\r\n\r\n\r\nexport type MutationStartRttNodeArgs = {\r\n rttNode?: InputMaybe<Scalars['String']['input']>;\r\n};\r\n\r\n\r\nexport type MutationStopRttNodeArgs = {\r\n rttNode?: InputMaybe<Scalars['String']['input']>;\r\n};\r\n\r\n/** name: uns-datahub */\r\nexport type Query = {\r\n __typename?: 'Query';\r\n GetAssets?: Maybe<Array<Maybe<UnsAssetSummary>>>;\r\n GetAttributes?: Maybe<Array<Maybe<UnsAttributeSummary>>>;\r\n GetTags?: Maybe<Array<Maybe<Scalars['String']['output']>>>;\r\n /** Get MQTT Translator translations. */\r\n GetMqttTranslations?: Maybe<Array<Maybe<MqttTranslation>>>;\r\n GetMqttTranslatorTopics?: Maybe<Array<Maybe<MqttTranslatorTopic>>>;\r\n GetRttNodes?: Maybe<Array<Maybe<RttNode>>>;\r\n GetTreeStructure?: Maybe<Array<Maybe<TreeStructure>>>;\r\n};\r\n\r\nexport type QueryGetAssetsArgs = {\r\n pathPrefix?: InputMaybe<Scalars['String']['input']>;\r\n};\r\n\r\nexport type QueryGetAttributesArgs = {\r\n pathPrefix?: InputMaybe<Scalars['String']['input']>;\r\n};\r\n\r\nexport type RttNode = {\r\n __typename?: 'RttNode';\r\n author?: Maybe<Scalars['String']['output']>;\r\n deployedVersions?: Maybe<Array<Maybe<Scalars['String']['output']>>>;\r\n description?: Maybe<Scalars['String']['output']>;\r\n lastLog?: Maybe<Scalars['String']['output']>;\r\n latestDeployedVersion?: Maybe<Scalars['String']['output']>;\r\n memory?: Maybe<Scalars['Int']['output']>;\r\n pid?: Maybe<Scalars['Int']['output']>;\r\n restarts?: Maybe<Scalars['Int']['output']>;\r\n rttNode?: Maybe<Scalars['String']['output']>;\r\n runningVersion?: Maybe<Scalars['String']['output']>;\r\n status?: Maybe<Scalars['String']['output']>;\r\n uptime?: Maybe<Scalars['Int']['output']>;\r\n version?: Maybe<Scalars['String']['output']>;\r\n};\r\n\r\nexport type TreeStructure = {\r\n __typename?: 'TreeStructure';\r\n children?: Maybe<Array<Maybe<TreeStructure>>>;\r\n id?: Maybe<Scalars['Int']['output']>;\r\n parent?: Maybe<Scalars['Int']['output']>;\r\n unsNode?: Maybe<Scalars['String']['output']>;\r\n};\r\n\r\nexport type UnsAssetSummary = {\r\n __typename?: 'UnsAssetSummary';\r\n asset?: Maybe<Scalars['String']['output']>;\r\n description?: Maybe<Scalars['String']['output']>;\r\n objectId?: Maybe<Scalars['String']['output']>;\r\n objectType?: Maybe<Scalars['String']['output']>;\r\n path?: Maybe<Scalars['String']['output']>;\r\n};\r\n\r\nexport type UnsAttributeSummary = {\r\n __typename?: 'UnsAttributeSummary';\r\n attributeType?: Maybe<Scalars['String']['output']>;\r\n dataGroup?: Maybe<Scalars['String']['output']>;\r\n description?: Maybe<Scalars['String']['output']>;\r\n objectId?: Maybe<Scalars['String']['output']>;\r\n objectType?: Maybe<Scalars['String']['output']>;\r\n path?: Maybe<Scalars['String']['output']>;\r\n};\r\n\r\nexport type UnsNode = {\r\n __typename?: 'UnsNode';\r\n id?: Maybe<Scalars['Int']['output']>;\r\n parent?: Maybe<Scalars['Int']['output']>;\r\n unsNode?: Maybe<Scalars['String']['output']>;\r\n};\r\n\r\nexport type UpdateUnsNode = {\r\n parent?: InputMaybe<Scalars['Int']['input']>;\r\n unsNode?: InputMaybe<Scalars['String']['input']>;\r\n};\r\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"handover-manager-event-emitter.js","sourceRoot":"","sources":["../../src/uns/handover-manager-event-emitter.ts"],"names":[],"mappings":"AAAA,MAAM,OAAO,2BAA2B;IAC9B,SAAS,GAEb,EAAE,CAAC;IAEP,EAAE,CACA,SAAY,EACZ,QAAoC;QAEpC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,EAAE,CAAC;YAC/B,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,GAAG,EAAE,CAAC;QACjC,CAAC;QACD,IAAI,CAAC,SAAS,CAAC,SAAS,CAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IAC5C,CAAC;IAED,GAAG,CACD,SAAY,EACZ,QAAoC;QAEpC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC;YAAE,OAAO;QACvC,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC,SAAS,CAAE,CAAC,MAAM,CAC3D,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,KAAK,QAAQ,CACtB,CAAC;IACJ,CAAC;IAED,IAAI,CAAyB,SAAY,EAAE,KAAgB;QACzD,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC;YAAE,OAAO;QACvC,IAAI,CAAC,SAAS,CAAC,SAAS,CAAE,CAAC,OAAO,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC;IACpE,CAAC;CACF","sourcesContent":["export class HandoverManagerEventEmitter<Events extends Record<string, any>> {\n private listeners: {\n [K in keyof Events]?: Array<(event: Events[K]) => void>;\n } = {};\n\n on<K extends keyof Events>(\n eventName: K,\n listener: (event: Events[K]) => void,\n ): void {\n if (!this.listeners[eventName]) {\n this.listeners[eventName] = [];\n }\n this.listeners[eventName]!.push(listener);\n }\n\n off<K extends keyof Events>(\n eventName: K,\n listener: (event: Events[K]) => void,\n ): void {\n if (!this.listeners[eventName]) return;\n this.listeners[eventName] = this.listeners[eventName]!.filter(\n (l) => l !== listener,\n );\n }\n\n emit<K extends keyof Events>(eventName: K, event: Events[K]): void {\n if (!this.listeners[eventName]) return;\n this.listeners[eventName]!.forEach((listener) => listener(event));\n }\n}"]}
1
+ {"version":3,"file":"handover-manager-event-emitter.js","sourceRoot":"","sources":["../../src/uns/handover-manager-event-emitter.ts"],"names":[],"mappings":"AAAA,MAAM,OAAO,2BAA2B;IAC9B,SAAS,GAEb,EAAE,CAAC;IAEP,EAAE,CACA,SAAY,EACZ,QAAoC;QAEpC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,EAAE,CAAC;YAC/B,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,GAAG,EAAE,CAAC;QACjC,CAAC;QACD,IAAI,CAAC,SAAS,CAAC,SAAS,CAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IAC5C,CAAC;IAED,GAAG,CACD,SAAY,EACZ,QAAoC;QAEpC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC;YAAE,OAAO;QACvC,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC,SAAS,CAAE,CAAC,MAAM,CAC3D,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,KAAK,QAAQ,CACtB,CAAC;IACJ,CAAC;IAED,IAAI,CAAyB,SAAY,EAAE,KAAgB;QACzD,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC;YAAE,OAAO;QACvC,IAAI,CAAC,SAAS,CAAC,SAAS,CAAE,CAAC,OAAO,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC;IACpE,CAAC;CACF","sourcesContent":["export class HandoverManagerEventEmitter<Events extends Record<string, any>> {\r\n private listeners: {\r\n [K in keyof Events]?: Array<(event: Events[K]) => void>;\r\n } = {};\r\n\r\n on<K extends keyof Events>(\r\n eventName: K,\r\n listener: (event: Events[K]) => void,\r\n ): void {\r\n if (!this.listeners[eventName]) {\r\n this.listeners[eventName] = [];\r\n }\r\n this.listeners[eventName]!.push(listener);\r\n }\r\n\r\n off<K extends keyof Events>(\r\n eventName: K,\r\n listener: (event: Events[K]) => void,\r\n ): void {\r\n if (!this.listeners[eventName]) return;\r\n this.listeners[eventName] = this.listeners[eventName]!.filter(\r\n (l) => l !== listener,\r\n );\r\n }\r\n\r\n emit<K extends keyof Events>(eventName: K, event: Events[K]): void {\r\n if (!this.listeners[eventName]) return;\r\n this.listeners[eventName]!.forEach((listener) => listener(event));\r\n }\r\n}"]}
@@ -1 +1 @@
1
- {"version":3,"file":"handover-manager.js","sourceRoot":"","sources":["../../src/uns/handover-manager.ts"],"names":[],"mappings":"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","sourcesContent":["import { UnsEvents } from \"./uns-interfaces.js\";\nimport logger from \"../logger.js\";\nimport { HandoverManagerEventEmitter } from \"./handover-manager-event-emitter.js\";\nimport { HandoverManagerEvents } from \"../uns-mqtt/mqtt-interfaces.js\";\nimport MqttProxy from \"../uns-mqtt/mqtt-proxy.js\";\nimport { MqttTopicBuilder } from \"../uns-mqtt/mqtt-topic-builder.js\";\nimport { ACTIVE_TIMEOUT, PACKAGE_INFO } from \"./process-config.js\";\nimport UnsMqttProxy from \"../uns-mqtt/uns-mqtt-proxy.js\";\n\n/**\n * HandoverManager is responsible for all handover-related logic,\n * including handling incoming MQTT messages, issuing handover requests,\n * and processing handover responses.\n */\nexport class HandoverManager {\n public event: HandoverManagerEventEmitter<HandoverManagerEvents> = new HandoverManagerEventEmitter<HandoverManagerEvents>();\n private processName: string;\n private processId: string;\n private mqttProxy: MqttProxy;\n private unsMqttProxies: UnsMqttProxy[];\n private requestingHandover: boolean = false;\n private handoverInProgress: boolean = false;\n private topicBuilder: MqttTopicBuilder;\n private activeTimeout: NodeJS.Timeout | undefined;\n private active: boolean = false;\n public handoverRequestEnabled: boolean = false;\n public handoverEnabled: boolean = true;\n public forceStartEnabled: boolean = false;\n\n constructor(processName: string, processId: string, mqttProxy: MqttProxy, unsMqttProxies: UnsMqttProxy[], handoverRequestEnabled: boolean, handoverEnabled: boolean, forceStartEnabled: boolean) {\n this.processName = processName;\n this.processId = processId;\n this.mqttProxy = mqttProxy;\n this.unsMqttProxies = unsMqttProxies;\n this.handoverRequestEnabled = handoverRequestEnabled;\n this.handoverEnabled = handoverEnabled;\n this.forceStartEnabled = forceStartEnabled;\n\n // Instantiate the topic builder.\n const packageName = PACKAGE_INFO.name;\n const version = PACKAGE_INFO.version;\n this.topicBuilder = new MqttTopicBuilder(`uns-infra/${MqttTopicBuilder.sanitizeTopicPart(packageName)}/${MqttTopicBuilder.sanitizeTopicPart(version)}/${MqttTopicBuilder.sanitizeTopicPart(this.processName)}/`);\n\n // Set status as active after a timeout if no other active process are detected.\n this.activeTimeout = setTimeout(() => {\n logger.info(`${this.processName} - No active message received within timeout. Assuming no other process is running.`);\n this.active = true;\n this.event.emit(\"handoverManager\", { active: this.active });\n // Activate all UNS proxy instance publishers and subscribers.\n this.unsMqttProxies.forEach((unsProxy) => {\n unsProxy.setPublisherActive();\n unsProxy.setSubscriberActive();\n });\n }, ACTIVE_TIMEOUT);\n }\n\n private getUserProperties(): Record<string, string> {\n return {\n processName: this.processName,\n processId: this.processId,\n };\n }\n\n private getSourceProcessId(event: UnsEvents[\"input\"]): string | undefined {\n return event.packet?.properties?.userProperties?.processId;\n }\n\n private parseActiveValue(message: string): boolean | null {\n try {\n const parsed = JSON.parse(message);\n const value = parsed?.message?.data?.value ?? parsed?.data?.value;\n if (value === 1 || value === \"1\" || value === true || value === \"true\") {\n return true;\n }\n if (value === 0 || value === \"0\" || value === false || value === \"false\") {\n return false;\n }\n return null;\n } catch {\n return null;\n }\n }\n\n private isProcessActiveTopic(topic: string): boolean {\n const parts = topic.split(\"/\");\n if (parts.length !== 5) return false;\n const [root, pkg, , process, tail] = parts;\n if (root !== \"uns-infra\" || tail !== \"active\") return false;\n const expectedPackage = MqttTopicBuilder.sanitizeTopicPart(PACKAGE_INFO.name);\n const expectedProcess = MqttTopicBuilder.sanitizeTopicPart(this.processName);\n return pkg === expectedPackage && process === expectedProcess;\n }\n\n /**\n * Main entry point for handling incoming MQTT messages.\n * It checks the topic and delegates to the corresponding handler.\n */\n public async handleMqttMessage(event: UnsEvents[\"input\"]): Promise<void> {\n try {\n // Check if the packet is active messages from other processes and this process is not active.\n if (\n this.isProcessActiveTopic(event.topic) &&\n this.requestingHandover === false &&\n this.active === false &&\n this.handoverInProgress === false\n ) {\n const sourceProcessId = this.getSourceProcessId(event);\n if (sourceProcessId === this.processId) {\n return;\n }\n const activeValue = this.parseActiveValue(event.message.toString());\n if (activeValue !== true) {\n return;\n }\n const sourceInfo = sourceProcessId ? ` (processId=${sourceProcessId})` : \"\";\n logger.info(`${this.processName} - Another process is active${sourceInfo} on ${event.topic}.`);\n\n if (this.handoverRequestEnabled && this.handoverEnabled) {\n // Requester process\n // Publish a handover request message after 10 seconds to the handover topic.\n clearTimeout(this.activeTimeout); // Clear the active timeout if it exists - prevent this process from becoming active after a timeout.\n this.activeTimeout = undefined;\n this.event.emit(\"handoverManager\", { active: this.active });\n this.requestingHandover = true;\n const eventHandoverTopic = new MqttTopicBuilder(MqttTopicBuilder.extractBaseTopic(event.topic)).getHandoverTopic();\n await this.mqttProxy.publish(eventHandoverTopic, JSON.stringify({ type: \"handover_intent\" }), {\n retain: false,\n properties: {\n userProperties: this.getUserProperties(),\n },\n });\n logger.info(`${this.processName} - Requesting handover in 10 seconds.`);\n setTimeout(async () => {\n logger.info(`${this.processName} - Requesting handover ${eventHandoverTopic}.`);\n this.handoverInProgress = true;\n await this.mqttProxy.publish(eventHandoverTopic, JSON.stringify({ type: \"handover_request\" }), {\n retain: false,\n properties: {\n responseTopic: this.topicBuilder.getHandoverTopic(),\n userProperties: this.getUserProperties(),\n },\n });\n }, 10000);\n } else {\n if (this.forceStartEnabled) {\n // Force start the process even if another process is active.\n logger.info(`${this.processName} - Force starting the process.`);\n logger.warn(`${this.processName} - Warning: Source and destination being the same may lead to duplicate messages.`);\n clearTimeout(this.activeTimeout); // Clear the active timeout if it exists - prevent this process from becoming active after a timeout.\n this.activeTimeout = undefined;\n this.active = true;\n this.event.emit(\"handoverManager\", { active: this.active });\n // Activate all UNS proxy instance publishers and subscribers.\n this.unsMqttProxies.forEach((unsProxy) => {\n unsProxy.setPublisherActive();\n unsProxy.setSubscriberActive();\n }\n );\n }\n else {\n logger.info(`${this.processName} - Waiting for the other process on topic ${event.topic} to become passive.`);\n this.activeTimeout?.refresh();\n }\n }\n }\n\n // Check if the packet is an handover message, sent to a handover topic.\n if (event.topic === this.topicBuilder.getHandoverTopic() && this.handoverEnabled) {\n const sourceProcessId = this.getSourceProcessId(event);\n if (sourceProcessId !== this.processId) {\n await this.handleHandover(event);\n }\n }\n } catch (error) {\n logger.error(`${this.processName} - Error processing MQTT message: ${error.message}`);\n return;\n }\n }\n\n /**\n * Handles handovers.\n */\n private async handleHandover(event: UnsEvents[\"input\"]): Promise<void> {\n try {\n const response = JSON.parse(event.message.toString());\n // Responder process\n // Check if the message is a handover request and publish MULTIPLE handover_subscriber messages\n if (response.type === \"handover_request\") {\n logger.info(\n `${this.processName} - Received handover request from ${event.packet?.properties?.userProperties?.processName}. Accepting handover.`,\n );\n\n // Set all UNS proxy instance subscribers to passive and drain the queue.\n const mqttWorkerData: UnsEvents[\"mqttWorker\"][] = [];\n for (let i = 0; i < this.unsMqttProxies.length; i++) {\n const unsProxy = this.unsMqttProxies[i];\n const workerData = await unsProxy.setSubscriberPassiveAndDrainQueue();\n mqttWorkerData.push(workerData);\n }\n logger.info(`${this.processName} - Handover request accepted. Sending handover_subscriber messages.`);\n\n // Publish handover_subscriber messages for each instance that has processed some data.\n for (let i = 0; i < mqttWorkerData.length; i++) {\n const workerData = mqttWorkerData[i];\n if (workerData.batchSize > 0) {\n await this.mqttProxy.publish(\n event.packet.properties?.responseTopic ?? \"\",\n JSON.stringify({\n type: \"handover_subscriber\",\n batchSize: workerData.batchSize,\n referenceHash: workerData.referenceHash,\n instanceName: workerData.instanceName,\n }),\n {\n retain: false,\n properties: {\n responseTopic: this.topicBuilder.getHandoverTopic(),\n userProperties: this.getUserProperties(),\n },\n },\n );\n }\n }\n logger.info(`${this.processName} - Handover subscriber messages sent.`);\n\n // Publish a single handover acknowledgment only when all\n // handover_subscriber messages have been sent\n this.active = false;\n this.event.emit(\"handoverManager\", { active: this.active });\n await this.mqttProxy.publish(\n event.packet.properties?.responseTopic ?? \"\",\n JSON.stringify({\n type: \"handover_fin\",\n }),\n {\n retain: false,\n properties: {\n responseTopic: this.topicBuilder.getHandoverTopic(),\n userProperties: this.getUserProperties(),\n },\n },\n );\n logger.info(`${this.processName} - Handover fin message sent.`);\n\n this.handoverInProgress = false;\n this.requestingHandover = false;\n\n this.unsMqttProxies.forEach((unsProxy: UnsMqttProxy) => {\n unsProxy.stop();\n });\n }\n\n // Requestor process\n // Check if the message is one of the handover_subscriber message in response to handover_request\n // and publish a handover_ack message\n if (response.type === \"handover_subscriber\") {\n // Find correct unsProxy instance for handover_subscriber and set it active\n this.unsMqttProxies.forEach((unsProxy: UnsMqttProxy) => {\n if (unsProxy.instanceName === response.instanceName) {\n unsProxy.setSubscriberActive(response.batchSize, response.referenceHash);\n }\n });\n }\n\n // Requestor process\n // Check if the message is a handover_fin at the end of handover_subscriber messages\n if (response.type === \"handover_fin\") {\n logger.info(`${this.processName} - Received handover fin from ${event.packet?.properties?.userProperties?.processName}.`);\n\n // Maybe we should count the number of requests that were allrady made TODO\n // this.handoverInProgress = false;\n // this.requestingHandover = false;\n\n this.active = true;\n this.event.emit(\"handoverManager\", { active: this.active });\n logger.info(`${this.processName} - Handover completed.`);\n // Activate all UNS proxy instance publishers and subscribers.\n this.unsMqttProxies.forEach((unsProxy) => {\n unsProxy.setPublisherActive();\n unsProxy.setSubscriberActive();\n });\n\n // Maybe we should reply with handover_ack.\n await this.mqttProxy.publish(\n event.packet.properties?.responseTopic ?? \"\",\n JSON.stringify({\n type: \"handover_ack\",\n }),\n {\n retain: false,\n properties: {\n responseTopic: this.topicBuilder.getHandoverTopic(),\n userProperties: this.getUserProperties(),\n },\n },\n );\n logger.info(`${this.processName} - Handover ack message sent.`);\n }\n\n // Responder process\n // Check if the message is a handover_ack at the end of handover_fin messages\n if (response.type === \"handover_ack\") {\n logger.info(`${this.processName} - Received handover ack from ${event.packet?.properties?.userProperties?.processName}.`);\n this.handoverInProgress = false;\n this.requestingHandover = false;\n\n logger.info(`${this.processName} - Handover completed. Exiting process.`);\n process.exit(0);\n }\n } catch (error) {\n logger.error(`${this.processName} - Error processing handover response: ${error.message}`);\n }\n }\n}\n"]}
1
+ {"version":3,"file":"handover-manager.js","sourceRoot":"","sources":["../../src/uns/handover-manager.ts"],"names":[],"mappings":"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","sourcesContent":["import { UnsEvents } from \"./uns-interfaces.js\";\r\nimport logger from \"../logger.js\";\r\nimport { HandoverManagerEventEmitter } from \"./handover-manager-event-emitter.js\";\r\nimport { HandoverManagerEvents } from \"../uns-mqtt/mqtt-interfaces.js\";\r\nimport MqttProxy from \"../uns-mqtt/mqtt-proxy.js\";\r\nimport { MqttTopicBuilder } from \"../uns-mqtt/mqtt-topic-builder.js\";\r\nimport { ACTIVE_TIMEOUT, PACKAGE_INFO } from \"./process-config.js\";\r\nimport UnsMqttProxy from \"../uns-mqtt/uns-mqtt-proxy.js\";\r\n\r\n/**\r\n * HandoverManager is responsible for all handover-related logic,\r\n * including handling incoming MQTT messages, issuing handover requests,\r\n * and processing handover responses.\r\n */\r\nexport class HandoverManager {\r\n public event: HandoverManagerEventEmitter<HandoverManagerEvents> = new HandoverManagerEventEmitter<HandoverManagerEvents>();\r\n private processName: string;\r\n private processId: string;\r\n private mqttProxy: MqttProxy;\r\n private unsMqttProxies: UnsMqttProxy[];\r\n private requestingHandover: boolean = false;\r\n private handoverInProgress: boolean = false;\r\n private topicBuilder: MqttTopicBuilder;\r\n private activeTimeout: NodeJS.Timeout | undefined;\r\n private active: boolean = false;\r\n public handoverRequestEnabled: boolean = false;\r\n public handoverEnabled: boolean = true;\r\n public forceStartEnabled: boolean = false;\r\n\r\n constructor(processName: string, processId: string, mqttProxy: MqttProxy, unsMqttProxies: UnsMqttProxy[], handoverRequestEnabled: boolean, handoverEnabled: boolean, forceStartEnabled: boolean) {\r\n this.processName = processName;\r\n this.processId = processId;\r\n this.mqttProxy = mqttProxy;\r\n this.unsMqttProxies = unsMqttProxies;\r\n this.handoverRequestEnabled = handoverRequestEnabled;\r\n this.handoverEnabled = handoverEnabled;\r\n this.forceStartEnabled = forceStartEnabled;\r\n\r\n // Instantiate the topic builder.\r\n const packageName = PACKAGE_INFO.name;\r\n const version = PACKAGE_INFO.version;\r\n this.topicBuilder = new MqttTopicBuilder(`uns-infra/${MqttTopicBuilder.sanitizeTopicPart(packageName)}/${MqttTopicBuilder.sanitizeTopicPart(version)}/${MqttTopicBuilder.sanitizeTopicPart(this.processName)}/`);\r\n\r\n // Set status as active after a timeout if no other active process are detected.\r\n this.activeTimeout = setTimeout(() => {\r\n logger.info(`${this.processName} - No active message received within timeout. Assuming no other process is running.`);\r\n this.active = true;\r\n this.event.emit(\"handoverManager\", { active: this.active });\r\n // Activate all UNS proxy instance publishers and subscribers.\r\n this.unsMqttProxies.forEach((unsProxy) => {\r\n unsProxy.setPublisherActive();\r\n unsProxy.setSubscriberActive();\r\n });\r\n }, ACTIVE_TIMEOUT);\r\n }\r\n\r\n private getUserProperties(): Record<string, string> {\r\n return {\r\n processName: this.processName,\r\n processId: this.processId,\r\n };\r\n }\r\n\r\n private getSourceProcessId(event: UnsEvents[\"input\"]): string | undefined {\r\n return event.packet?.properties?.userProperties?.processId;\r\n }\r\n\r\n private parseActiveValue(message: string): boolean | null {\r\n try {\r\n const parsed = JSON.parse(message);\r\n const value = parsed?.message?.data?.value ?? parsed?.data?.value;\r\n if (value === 1 || value === \"1\" || value === true || value === \"true\") {\r\n return true;\r\n }\r\n if (value === 0 || value === \"0\" || value === false || value === \"false\") {\r\n return false;\r\n }\r\n return null;\r\n } catch {\r\n return null;\r\n }\r\n }\r\n\r\n private isProcessActiveTopic(topic: string): boolean {\r\n const parts = topic.split(\"/\");\r\n if (parts.length !== 5) return false;\r\n const [root, pkg, , process, tail] = parts;\r\n if (root !== \"uns-infra\" || tail !== \"active\") return false;\r\n const expectedPackage = MqttTopicBuilder.sanitizeTopicPart(PACKAGE_INFO.name);\r\n const expectedProcess = MqttTopicBuilder.sanitizeTopicPart(this.processName);\r\n return pkg === expectedPackage && process === expectedProcess;\r\n }\r\n\r\n /**\r\n * Main entry point for handling incoming MQTT messages.\r\n * It checks the topic and delegates to the corresponding handler.\r\n */\r\n public async handleMqttMessage(event: UnsEvents[\"input\"]): Promise<void> {\r\n try {\r\n // Check if the packet is active messages from other processes and this process is not active.\r\n if (\r\n this.isProcessActiveTopic(event.topic) &&\r\n this.requestingHandover === false &&\r\n this.active === false &&\r\n this.handoverInProgress === false\r\n ) {\r\n const sourceProcessId = this.getSourceProcessId(event);\r\n if (sourceProcessId === this.processId) {\r\n return;\r\n }\r\n const activeValue = this.parseActiveValue(event.message.toString());\r\n if (activeValue !== true) {\r\n return;\r\n }\r\n const sourceInfo = sourceProcessId ? ` (processId=${sourceProcessId})` : \"\";\r\n logger.info(`${this.processName} - Another process is active${sourceInfo} on ${event.topic}.`);\r\n\r\n if (this.handoverRequestEnabled && this.handoverEnabled) {\r\n // Requester process\r\n // Publish a handover request message after 10 seconds to the handover topic.\r\n clearTimeout(this.activeTimeout); // Clear the active timeout if it exists - prevent this process from becoming active after a timeout.\r\n this.activeTimeout = undefined;\r\n this.event.emit(\"handoverManager\", { active: this.active });\r\n this.requestingHandover = true;\r\n const eventHandoverTopic = new MqttTopicBuilder(MqttTopicBuilder.extractBaseTopic(event.topic)).getHandoverTopic();\r\n await this.mqttProxy.publish(eventHandoverTopic, JSON.stringify({ type: \"handover_intent\" }), {\r\n retain: false,\r\n properties: {\r\n userProperties: this.getUserProperties(),\r\n },\r\n });\r\n logger.info(`${this.processName} - Requesting handover in 10 seconds.`);\r\n setTimeout(async () => {\r\n logger.info(`${this.processName} - Requesting handover ${eventHandoverTopic}.`);\r\n this.handoverInProgress = true;\r\n await this.mqttProxy.publish(eventHandoverTopic, JSON.stringify({ type: \"handover_request\" }), {\r\n retain: false,\r\n properties: {\r\n responseTopic: this.topicBuilder.getHandoverTopic(),\r\n userProperties: this.getUserProperties(),\r\n },\r\n });\r\n }, 10000);\r\n } else {\r\n if (this.forceStartEnabled) {\r\n // Force start the process even if another process is active.\r\n logger.info(`${this.processName} - Force starting the process.`);\r\n logger.warn(`${this.processName} - Warning: Source and destination being the same may lead to duplicate messages.`);\r\n clearTimeout(this.activeTimeout); // Clear the active timeout if it exists - prevent this process from becoming active after a timeout.\r\n this.activeTimeout = undefined;\r\n this.active = true;\r\n this.event.emit(\"handoverManager\", { active: this.active });\r\n // Activate all UNS proxy instance publishers and subscribers.\r\n this.unsMqttProxies.forEach((unsProxy) => {\r\n unsProxy.setPublisherActive();\r\n unsProxy.setSubscriberActive();\r\n }\r\n );\r\n }\r\n else {\r\n logger.info(`${this.processName} - Waiting for the other process on topic ${event.topic} to become passive.`);\r\n this.activeTimeout?.refresh();\r\n }\r\n }\r\n }\r\n\r\n // Check if the packet is an handover message, sent to a handover topic.\r\n if (event.topic === this.topicBuilder.getHandoverTopic() && this.handoverEnabled) {\r\n const sourceProcessId = this.getSourceProcessId(event);\r\n if (sourceProcessId !== this.processId) {\r\n await this.handleHandover(event);\r\n }\r\n }\r\n } catch (error) {\r\n logger.error(`${this.processName} - Error processing MQTT message: ${error.message}`);\r\n return;\r\n }\r\n }\r\n\r\n /**\r\n * Handles handovers.\r\n */\r\n private async handleHandover(event: UnsEvents[\"input\"]): Promise<void> {\r\n try {\r\n const response = JSON.parse(event.message.toString());\r\n // Responder process\r\n // Check if the message is a handover request and publish MULTIPLE handover_subscriber messages\r\n if (response.type === \"handover_request\") {\r\n logger.info(\r\n `${this.processName} - Received handover request from ${event.packet?.properties?.userProperties?.processName}. Accepting handover.`,\r\n );\r\n\r\n // Set all UNS proxy instance subscribers to passive and drain the queue.\r\n const mqttWorkerData: UnsEvents[\"mqttWorker\"][] = [];\r\n for (let i = 0; i < this.unsMqttProxies.length; i++) {\r\n const unsProxy = this.unsMqttProxies[i];\r\n const workerData = await unsProxy.setSubscriberPassiveAndDrainQueue();\r\n mqttWorkerData.push(workerData);\r\n }\r\n logger.info(`${this.processName} - Handover request accepted. Sending handover_subscriber messages.`);\r\n\r\n // Publish handover_subscriber messages for each instance that has processed some data.\r\n for (let i = 0; i < mqttWorkerData.length; i++) {\r\n const workerData = mqttWorkerData[i];\r\n if (workerData.batchSize > 0) {\r\n await this.mqttProxy.publish(\r\n event.packet.properties?.responseTopic ?? \"\",\r\n JSON.stringify({\r\n type: \"handover_subscriber\",\r\n batchSize: workerData.batchSize,\r\n referenceHash: workerData.referenceHash,\r\n instanceName: workerData.instanceName,\r\n }),\r\n {\r\n retain: false,\r\n properties: {\r\n responseTopic: this.topicBuilder.getHandoverTopic(),\r\n userProperties: this.getUserProperties(),\r\n },\r\n },\r\n );\r\n }\r\n }\r\n logger.info(`${this.processName} - Handover subscriber messages sent.`);\r\n\r\n // Publish a single handover acknowledgment only when all\r\n // handover_subscriber messages have been sent\r\n this.active = false;\r\n this.event.emit(\"handoverManager\", { active: this.active });\r\n await this.mqttProxy.publish(\r\n event.packet.properties?.responseTopic ?? \"\",\r\n JSON.stringify({\r\n type: \"handover_fin\",\r\n }),\r\n {\r\n retain: false,\r\n properties: {\r\n responseTopic: this.topicBuilder.getHandoverTopic(),\r\n userProperties: this.getUserProperties(),\r\n },\r\n },\r\n );\r\n logger.info(`${this.processName} - Handover fin message sent.`);\r\n\r\n this.handoverInProgress = false;\r\n this.requestingHandover = false;\r\n\r\n this.unsMqttProxies.forEach((unsProxy: UnsMqttProxy) => {\r\n unsProxy.stop();\r\n });\r\n }\r\n\r\n // Requestor process\r\n // Check if the message is one of the handover_subscriber message in response to handover_request\r\n // and publish a handover_ack message\r\n if (response.type === \"handover_subscriber\") {\r\n // Find correct unsProxy instance for handover_subscriber and set it active\r\n this.unsMqttProxies.forEach((unsProxy: UnsMqttProxy) => {\r\n if (unsProxy.instanceName === response.instanceName) {\r\n unsProxy.setSubscriberActive(response.batchSize, response.referenceHash);\r\n }\r\n });\r\n }\r\n\r\n // Requestor process\r\n // Check if the message is a handover_fin at the end of handover_subscriber messages\r\n if (response.type === \"handover_fin\") {\r\n logger.info(`${this.processName} - Received handover fin from ${event.packet?.properties?.userProperties?.processName}.`);\r\n\r\n // Maybe we should count the number of requests that were allrady made TODO\r\n // this.handoverInProgress = false;\r\n // this.requestingHandover = false;\r\n\r\n this.active = true;\r\n this.event.emit(\"handoverManager\", { active: this.active });\r\n logger.info(`${this.processName} - Handover completed.`);\r\n // Activate all UNS proxy instance publishers and subscribers.\r\n this.unsMqttProxies.forEach((unsProxy) => {\r\n unsProxy.setPublisherActive();\r\n unsProxy.setSubscriberActive();\r\n });\r\n\r\n // Maybe we should reply with handover_ack.\r\n await this.mqttProxy.publish(\r\n event.packet.properties?.responseTopic ?? \"\",\r\n JSON.stringify({\r\n type: \"handover_ack\",\r\n }),\r\n {\r\n retain: false,\r\n properties: {\r\n responseTopic: this.topicBuilder.getHandoverTopic(),\r\n userProperties: this.getUserProperties(),\r\n },\r\n },\r\n );\r\n logger.info(`${this.processName} - Handover ack message sent.`);\r\n }\r\n\r\n // Responder process\r\n // Check if the message is a handover_ack at the end of handover_fin messages\r\n if (response.type === \"handover_ack\") {\r\n logger.info(`${this.processName} - Received handover ack from ${event.packet?.properties?.userProperties?.processName}.`);\r\n this.handoverInProgress = false;\r\n this.requestingHandover = false;\r\n\r\n logger.info(`${this.processName} - Handover completed. Exiting process.`);\r\n process.exit(0);\r\n }\r\n } catch (error) {\r\n logger.error(`${this.processName} - Error processing handover response: ${error.message}`);\r\n }\r\n }\r\n}\r\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"process-config.js","sourceRoot":"","sources":["../../src/uns/process-config.ts"],"names":[],"mappings":"AAAA,oBAAoB;AACpB,OAAO,KAAK,IAAI,MAAM,MAAM,CAAC;AAC7B,OAAO,EAAE,YAAY,EAAE,MAAM,IAAI,CAAC;AAClC,OAAO,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAC;AAE3C,4DAA4D;AAC5D,MAAM,CAAC,MAAM,iBAAiB,GAAG,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,cAAc,CAAC,CAAC;AAQrE,MAAM,cAAc,GAAgB,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,iBAAiB,EAAE,MAAM,CAAC,CAAC,CAAC;AAExF,MAAM,CAAC,MAAM,YAAY,GAAgB;IACvC,GAAG,cAAc;IACjB,IAAI,EAAE,cAAc,CAAC,IAAI;CAC1B,CAAC;AAEF,gEAAgE;AAChE,MAAM,CAAC,MAAM,oBAAoB,GAAG,KAAK,CAAC,CAAC,kBAAkB;AAC7D,MAAM,CAAC,MAAM,cAAc,GAAG,KAAK,CAAC,CAAC,kBAAkB","sourcesContent":["// process-config.ts\nimport * as path from \"path\";\nimport { readFileSync } from \"fs\";\nimport { basePath } from \"../base-path.js\";\n\n// Path to package.json to retrieve package name and version\nexport const PACKAGE_JSON_PATH = path.join(basePath, \"package.json\");\n\n// Read package.json and export as an object\ninterface PackageInfo {\n name: string;\n version: string;\n}\n\nconst rawPackageInfo: PackageInfo = JSON.parse(readFileSync(PACKAGE_JSON_PATH, \"utf8\"));\n\nexport const PACKAGE_INFO: PackageInfo = {\n ...rawPackageInfo,\n name: rawPackageInfo.name\n};\n\n// Other configuration values (update intervals, timeouts, etc.)\nexport const MQTT_UPDATE_INTERVAL = 10000; // in milliseconds\nexport const ACTIVE_TIMEOUT = 10000; // in milliseconds\n"]}
1
+ {"version":3,"file":"process-config.js","sourceRoot":"","sources":["../../src/uns/process-config.ts"],"names":[],"mappings":"AAAA,oBAAoB;AACpB,OAAO,KAAK,IAAI,MAAM,MAAM,CAAC;AAC7B,OAAO,EAAE,YAAY,EAAE,MAAM,IAAI,CAAC;AAClC,OAAO,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAC;AAE3C,4DAA4D;AAC5D,MAAM,CAAC,MAAM,iBAAiB,GAAG,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,cAAc,CAAC,CAAC;AAQrE,MAAM,cAAc,GAAgB,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,iBAAiB,EAAE,MAAM,CAAC,CAAC,CAAC;AAExF,MAAM,CAAC,MAAM,YAAY,GAAgB;IACvC,GAAG,cAAc;IACjB,IAAI,EAAE,cAAc,CAAC,IAAI;CAC1B,CAAC;AAEF,gEAAgE;AAChE,MAAM,CAAC,MAAM,oBAAoB,GAAG,KAAK,CAAC,CAAC,kBAAkB;AAC7D,MAAM,CAAC,MAAM,cAAc,GAAG,KAAK,CAAC,CAAC,kBAAkB","sourcesContent":["// process-config.ts\r\nimport * as path from \"path\";\r\nimport { readFileSync } from \"fs\";\r\nimport { basePath } from \"../base-path.js\";\r\n\r\n// Path to package.json to retrieve package name and version\r\nexport const PACKAGE_JSON_PATH = path.join(basePath, \"package.json\");\r\n\r\n// Read package.json and export as an object\r\ninterface PackageInfo {\r\n name: string;\r\n version: string;\r\n}\r\n\r\nconst rawPackageInfo: PackageInfo = JSON.parse(readFileSync(PACKAGE_JSON_PATH, \"utf8\"));\r\n\r\nexport const PACKAGE_INFO: PackageInfo = {\r\n ...rawPackageInfo,\r\n name: rawPackageInfo.name\r\n};\r\n\r\n// Other configuration values (update intervals, timeouts, etc.)\r\nexport const MQTT_UPDATE_INTERVAL = 10000; // in milliseconds\r\nexport const ACTIVE_TIMEOUT = 10000; // in milliseconds\r\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"process-name-service.js","sourceRoot":"","sources":["../../src/uns/process-name-service.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,IAAI,CAAC;AACjD,OAAO,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AACxD,OAAO,MAAM,MAAM,cAAc,CAAC;AAElC;;;;;GAKG;AACH,MAAM,UAAU,cAAc;IAC5B,4DAA4D;IAC5D,IAAI,CAAC;QACH,OAAO,YAAY,CAAC,iBAAiB,EAAE,MAAM,CAAC,CAAC,IAAI,EAAE,CAAC;IACxD,CAAC;IAAC,MAAM,CAAC;QACP,+CAA+C;QAC/C,MAAM,KAAK,GAAG,sCAAsC,CAAC;QACrD,MAAM,cAAc,GAAG,KAAK,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,EAAE,GAAG,EAAE,CACpD,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,CACvD,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QAEX,yDAAyD;QACzD,IAAI,CAAC;YACH,aAAa,CAAC,iBAAiB,EAAE,cAAc,EAAE,MAAM,CAAC,CAAC;QAC3D,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,MAAM,CAAC,KAAK,CAAC,oCAAoC,EAAE,GAAG,CAAC,CAAC;QAC1D,CAAC;QAED,OAAO,cAAc,CAAC;IACxB,CAAC;AACH,CAAC","sourcesContent":["import { readFileSync, writeFileSync } from \"fs\";\nimport { PROCESS_NAME_FILE } from \"./process-config.js\";\nimport logger from \"../logger.js\";\n\n/**\n * Retrieves a persistent process name.\n * - Checks if a process name is provided via command-line args.\n * - Otherwise, reads the process name from a file.\n * - If the file does not exist, generates a new name and stores it.\n */\nexport function getProcessName(): string {\n // Try to read the process name from the configuration file.\n try {\n return readFileSync(PROCESS_NAME_FILE, \"utf8\").trim();\n } catch {\n // Generate a new process name if reading fails\n const chars = \"abcdefghijklmnopqrstuvwxyz0123456789\";\n const newProcessName = Array.from({ length: 6 }, () =>\n chars.charAt(Math.floor(Math.random() * chars.length))\n ).join(\"\");\n\n // Write the new process name to the file for persistence\n try {\n writeFileSync(PROCESS_NAME_FILE, newProcessName, \"utf8\");\n } catch (err) {\n logger.error(\"Failed to write process name file:\", err);\n }\n\n return newProcessName;\n }\n}\n"]}
1
+ {"version":3,"file":"process-name-service.js","sourceRoot":"","sources":["../../src/uns/process-name-service.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,IAAI,CAAC;AACjD,OAAO,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AACxD,OAAO,MAAM,MAAM,cAAc,CAAC;AAElC;;;;;GAKG;AACH,MAAM,UAAU,cAAc;IAC5B,4DAA4D;IAC5D,IAAI,CAAC;QACH,OAAO,YAAY,CAAC,iBAAiB,EAAE,MAAM,CAAC,CAAC,IAAI,EAAE,CAAC;IACxD,CAAC;IAAC,MAAM,CAAC;QACP,+CAA+C;QAC/C,MAAM,KAAK,GAAG,sCAAsC,CAAC;QACrD,MAAM,cAAc,GAAG,KAAK,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,EAAE,GAAG,EAAE,CACpD,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,CACvD,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QAEX,yDAAyD;QACzD,IAAI,CAAC;YACH,aAAa,CAAC,iBAAiB,EAAE,cAAc,EAAE,MAAM,CAAC,CAAC;QAC3D,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,MAAM,CAAC,KAAK,CAAC,oCAAoC,EAAE,GAAG,CAAC,CAAC;QAC1D,CAAC;QAED,OAAO,cAAc,CAAC;IACxB,CAAC;AACH,CAAC","sourcesContent":["import { readFileSync, writeFileSync } from \"fs\";\r\nimport { PROCESS_NAME_FILE } from \"./process-config.js\";\r\nimport logger from \"../logger.js\";\r\n\r\n/**\r\n * Retrieves a persistent process name.\r\n * - Checks if a process name is provided via command-line args.\r\n * - Otherwise, reads the process name from a file.\r\n * - If the file does not exist, generates a new name and stores it.\r\n */\r\nexport function getProcessName(): string {\r\n // Try to read the process name from the configuration file.\r\n try {\r\n return readFileSync(PROCESS_NAME_FILE, \"utf8\").trim();\r\n } catch {\r\n // Generate a new process name if reading fails\r\n const chars = \"abcdefghijklmnopqrstuvwxyz0123456789\";\r\n const newProcessName = Array.from({ length: 6 }, () =>\r\n chars.charAt(Math.floor(Math.random() * chars.length))\r\n ).join(\"\");\r\n\r\n // Write the new process name to the file for persistence\r\n try {\r\n writeFileSync(PROCESS_NAME_FILE, newProcessName, \"utf8\");\r\n } catch (err) {\r\n logger.error(\"Failed to write process name file:\", err);\r\n }\r\n\r\n return newProcessName;\r\n }\r\n}\r\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"status-monitor.js","sourceRoot":"","sources":["../../src/uns/status-monitor.ts"],"names":[],"mappings":"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","sourcesContent":["// status-monitor.ts\nimport logger from \"../logger.js\";\nimport { IUnsMessage } from \"./uns-interfaces.js\";\nimport { DataSizeMeasurements } from \"./uns-measurements.js\";\nimport { UnsPacket } from \"./uns-packet.js\";\nimport type MqttProxy from \"../uns-mqtt/mqtt-proxy.js\";\n\nexport class StatusMonitor {\n private memoryInterval?: NodeJS.Timeout;\n private statusInterval?: NodeJS.Timeout;\n\n /**\n * @param mqttProxy The MQTT proxy used to publish messages.\n * @param processStatusTopic The base topic for the process (ending with a slash).\n * @param activeSupplier A function returning the current active state (boolean).\n * @param memoryIntervalMs Interval in milliseconds for publishing memory status.\n * @param statusIntervalMs Interval in milliseconds for publishing active status.\n * @param processIdentity Optional identity to attach to active status messages.\n */\n constructor(\n private mqttProxy: MqttProxy,\n private processStatusTopic: string,\n private activeSupplier: () => boolean,\n private memoryIntervalMs: number,\n private statusIntervalMs: number,\n private processIdentity?: { processName: string; processId: string },\n ) {}\n\n /**\n * Starts the periodic memory and status updates.\n */\n public start(): void {\n this.memoryInterval = setInterval(() => this.publishMemoryUpdates(), this.memoryIntervalMs);\n this.statusInterval = setInterval(() => this.publishStatusUpdates(), this.statusIntervalMs);\n }\n\n /**\n * Stops the periodic updates.\n */\n public stop(): void {\n if (this.memoryInterval) {\n clearInterval(this.memoryInterval);\n this.memoryInterval = undefined;\n }\n if (this.statusInterval) {\n clearInterval(this.statusInterval);\n this.statusInterval = undefined;\n }\n }\n\n /**\n * Publishes memory usage updates via MQTT.\n * In this example, only the `heapUsed` metric is published.\n */\n private async publishMemoryUpdates(): Promise<void> {\n try {\n const time = UnsPacket.formatToISO8601(new Date());\n const memoryUsage = process.memoryUsage();\n const heapUsedMessage: IUnsMessage = { data: { time, value: Math.round(memoryUsage.heapUsed/1048576), uom: DataSizeMeasurements.MegaByte } };\n let packet = await UnsPacket.unsPacketFromUnsMessage(heapUsedMessage);\n this.mqttProxy.publish(\n `${this.processStatusTopic}heap-used`,\n JSON.stringify(packet)\n );\n\n const heapTotalMessage: IUnsMessage = { data: { time, value: Math.round(memoryUsage.heapTotal/1048576), uom: DataSizeMeasurements.MegaByte } };\n packet = await UnsPacket.unsPacketFromUnsMessage(heapTotalMessage);\n this.mqttProxy.publish(\n `${this.processStatusTopic}heap-total`,\n JSON.stringify(packet)\n );\n\n } catch (error: any) {\n logger.error(`StatusMonitor - Error publishing memory updates: ${error.message}`);\n }\n }\n\n /**\n * Publishes the process active status via MQTT.\n */\n private async publishStatusUpdates(): Promise<void> {\n try {\n const time = UnsPacket.formatToISO8601(new Date());\n const activeMessage: IUnsMessage = {\n data: { time, value: Number(this.activeSupplier()) },\n };\n const packet = await UnsPacket.unsPacketFromUnsMessage(activeMessage);\n this.mqttProxy.publish(\n `${this.processStatusTopic}active`,\n JSON.stringify(packet),\n {\n retain: false,\n properties: this.processIdentity\n ? {\n userProperties: {\n processName: this.processIdentity.processName,\n processId: this.processIdentity.processId,\n },\n }\n : undefined,\n },\n );\n } catch (error: any) {\n logger.error(`StatusMonitor - Error publishing status updates: ${error.message}`);\n }\n }\n}\n"]}
1
+ {"version":3,"file":"status-monitor.js","sourceRoot":"","sources":["../../src/uns/status-monitor.ts"],"names":[],"mappings":"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","sourcesContent":["// status-monitor.ts\r\nimport logger from \"../logger.js\";\r\nimport { IUnsMessage } from \"./uns-interfaces.js\";\r\nimport { DataSizeMeasurements } from \"./uns-measurements.js\";\r\nimport { UnsPacket } from \"./uns-packet.js\";\r\nimport type MqttProxy from \"../uns-mqtt/mqtt-proxy.js\";\r\n\r\nexport class StatusMonitor {\r\n private memoryInterval?: NodeJS.Timeout;\r\n private statusInterval?: NodeJS.Timeout;\r\n\r\n /**\r\n * @param mqttProxy The MQTT proxy used to publish messages.\r\n * @param processStatusTopic The base topic for the process (ending with a slash).\r\n * @param activeSupplier A function returning the current active state (boolean).\r\n * @param memoryIntervalMs Interval in milliseconds for publishing memory status.\r\n * @param statusIntervalMs Interval in milliseconds for publishing active status.\r\n * @param processIdentity Optional identity to attach to active status messages.\r\n */\r\n constructor(\r\n private mqttProxy: MqttProxy,\r\n private processStatusTopic: string,\r\n private activeSupplier: () => boolean,\r\n private memoryIntervalMs: number,\r\n private statusIntervalMs: number,\r\n private processIdentity?: { processName: string; processId: string },\r\n ) {}\r\n\r\n /**\r\n * Starts the periodic memory and status updates.\r\n */\r\n public start(): void {\r\n this.memoryInterval = setInterval(() => this.publishMemoryUpdates(), this.memoryIntervalMs);\r\n this.statusInterval = setInterval(() => this.publishStatusUpdates(), this.statusIntervalMs);\r\n }\r\n\r\n /**\r\n * Stops the periodic updates.\r\n */\r\n public stop(): void {\r\n if (this.memoryInterval) {\r\n clearInterval(this.memoryInterval);\r\n this.memoryInterval = undefined;\r\n }\r\n if (this.statusInterval) {\r\n clearInterval(this.statusInterval);\r\n this.statusInterval = undefined;\r\n }\r\n }\r\n\r\n /**\r\n * Publishes memory usage updates via MQTT.\r\n * In this example, only the `heapUsed` metric is published.\r\n */\r\n private async publishMemoryUpdates(): Promise<void> {\r\n try {\r\n const time = UnsPacket.formatToISO8601(new Date());\r\n const memoryUsage = process.memoryUsage();\r\n const heapUsedMessage: IUnsMessage = { data: { time, value: Math.round(memoryUsage.heapUsed/1048576), uom: DataSizeMeasurements.MegaByte } };\r\n let packet = await UnsPacket.unsPacketFromUnsMessage(heapUsedMessage);\r\n this.mqttProxy.publish(\r\n `${this.processStatusTopic}heap-used`,\r\n JSON.stringify(packet)\r\n );\r\n\r\n const heapTotalMessage: IUnsMessage = { data: { time, value: Math.round(memoryUsage.heapTotal/1048576), uom: DataSizeMeasurements.MegaByte } };\r\n packet = await UnsPacket.unsPacketFromUnsMessage(heapTotalMessage);\r\n this.mqttProxy.publish(\r\n `${this.processStatusTopic}heap-total`,\r\n JSON.stringify(packet)\r\n );\r\n\r\n } catch (error: any) {\r\n logger.error(`StatusMonitor - Error publishing memory updates: ${error.message}`);\r\n }\r\n }\r\n\r\n /**\r\n * Publishes the process active status via MQTT.\r\n */\r\n private async publishStatusUpdates(): Promise<void> {\r\n try {\r\n const time = UnsPacket.formatToISO8601(new Date());\r\n const activeMessage: IUnsMessage = {\r\n data: { time, value: Number(this.activeSupplier()) },\r\n };\r\n const packet = await UnsPacket.unsPacketFromUnsMessage(activeMessage);\r\n this.mqttProxy.publish(\r\n `${this.processStatusTopic}active`,\r\n JSON.stringify(packet),\r\n {\r\n retain: false,\r\n properties: this.processIdentity\r\n ? {\r\n userProperties: {\r\n processName: this.processIdentity.processName,\r\n processId: this.processIdentity.processId,\r\n },\r\n }\r\n : undefined,\r\n },\r\n );\r\n } catch (error: any) {\r\n logger.error(`StatusMonitor - Error publishing status updates: ${error.message}`);\r\n }\r\n }\r\n}\r\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"uns-asset.js","sourceRoot":"","sources":["../../src/uns/uns-asset.ts"],"names":[],"mappings":"","sourcesContent":["export type UnsAsset = \"\" | (string & {});\n"]}
1
+ {"version":3,"file":"uns-asset.js","sourceRoot":"","sources":["../../src/uns/uns-asset.ts"],"names":[],"mappings":"","sourcesContent":["export type UnsAsset = \"\" | (string & {});\r\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"uns-attributes.js","sourceRoot":"","sources":["../../src/uns/uns-attributes.ts"],"names":[],"mappings":"AAAA,iEAAiE;AACjE,OAAO,EAAE,mBAAmB,EAAE,8BAA8B,EAAE,MAAM,+BAA+B,CAAC;AACpG,OAAO,EAAE,2BAA2B,EAAE,MAAM,8BAA8B,CAAC;AAE3E,MAAM,CAAC,MAAM,kBAAkB,GAAG,MAAM,CAAC,MAAM,CAAC,mBAAmB,CAAC,CAAC;AAOrE,MAAM,CAAC,MAAM,qBAAqB,GAAG,8BAA8B,CAAC;AAEpE,MAAM,UAAU,uBAAuB,CAAC,IAAY;IAClD,OAAO,CACL,2BAA2B,CAAC,IAAI,CAAC;QAChC,qBAA4D,CAAC,IAAI,CAAC,CACpE,CAAC;AACJ,CAAC","sourcesContent":["// Slimmed: use generated dictionary as the source of attributes.\nimport { GeneratedAttributes, GeneratedAttributeDescriptions } from \"./uns-dictionary.generated.js\";\nimport { resolveAttributeDescription } from \"./uns-dictionary-registry.js\";\n\nexport const knownUnsAttributes = Object.values(GeneratedAttributes);\n\nexport type KnownUnsAttributeName = typeof GeneratedAttributes[keyof typeof GeneratedAttributes];\n\n// Allow known attribute names while still allowing arbitrary strings.\nexport type UnsAttribute = \"\" | KnownUnsAttributeName | (string & {});\n\nexport const AttributeDescriptions = GeneratedAttributeDescriptions;\n\nexport function getAttributeDescription(name: string): string | undefined {\n return (\n resolveAttributeDescription(name) ??\n (AttributeDescriptions as Record<string, string | undefined>)[name]\n );\n}\n"]}
1
+ {"version":3,"file":"uns-attributes.js","sourceRoot":"","sources":["../../src/uns/uns-attributes.ts"],"names":[],"mappings":"AAAA,iEAAiE;AACjE,OAAO,EAAE,mBAAmB,EAAE,8BAA8B,EAAE,MAAM,+BAA+B,CAAC;AACpG,OAAO,EAAE,2BAA2B,EAAE,MAAM,8BAA8B,CAAC;AAE3E,MAAM,CAAC,MAAM,kBAAkB,GAAG,MAAM,CAAC,MAAM,CAAC,mBAAmB,CAAC,CAAC;AAOrE,MAAM,CAAC,MAAM,qBAAqB,GAAG,8BAA8B,CAAC;AAEpE,MAAM,UAAU,uBAAuB,CAAC,IAAY;IAClD,OAAO,CACL,2BAA2B,CAAC,IAAI,CAAC;QAChC,qBAA4D,CAAC,IAAI,CAAC,CACpE,CAAC;AACJ,CAAC","sourcesContent":["// Slimmed: use generated dictionary as the source of attributes.\r\nimport { GeneratedAttributes, GeneratedAttributeDescriptions } from \"./uns-dictionary.generated.js\";\r\nimport { resolveAttributeDescription } from \"./uns-dictionary-registry.js\";\r\n\r\nexport const knownUnsAttributes = Object.values(GeneratedAttributes);\r\n\r\nexport type KnownUnsAttributeName = typeof GeneratedAttributes[keyof typeof GeneratedAttributes];\r\n\r\n// Allow known attribute names while still allowing arbitrary strings.\r\nexport type UnsAttribute = \"\" | KnownUnsAttributeName | (string & {});\r\n\r\nexport const AttributeDescriptions = GeneratedAttributeDescriptions;\r\n\r\nexport function getAttributeDescription(name: string): string | undefined {\r\n return (\r\n resolveAttributeDescription(name) ??\r\n (AttributeDescriptions as Record<string, string | undefined>)[name]\r\n );\r\n}\r\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"uns-dictionary-registry.js","sourceRoot":"","sources":["../../src/uns/uns-dictionary-registry.ts"],"names":[],"mappings":"AAAA,kFAAkF;AAClF,oDAAoD;AAEpD,IAAI,sBAAsB,GAA2B,EAAE,CAAC;AACxD,IAAI,qBAAqB,GAA2B,EAAE,CAAC;AAEvD,MAAM,UAAU,8BAA8B,CAAC,GAA2B;IACxE,sBAAsB,GAAG,EAAE,GAAG,sBAAsB,EAAE,GAAG,GAAG,EAAE,CAAC;AACjE,CAAC;AAED,MAAM,UAAU,6BAA6B,CAAC,GAA2B;IACvE,qBAAqB,GAAG,EAAE,GAAG,qBAAqB,EAAE,GAAG,GAAG,EAAE,CAAC;AAC/D,CAAC;AAED,MAAM,UAAU,4BAA4B,CAAC,IAAwB;IACnE,IAAI,CAAC,IAAI;QAAE,OAAO,SAAS,CAAC;IAC5B,OAAO,sBAAsB,CAAC,IAAI,CAAC,CAAC;AACtC,CAAC;AAED,MAAM,UAAU,2BAA2B,CAAC,IAAwB;IAClE,IAAI,CAAC,IAAI;QAAE,OAAO,SAAS,CAAC;IAC5B,OAAO,qBAAqB,CAAC,IAAI,CAAC,CAAC;AACrC,CAAC","sourcesContent":["// Simple registry to allow projects to provide additional descriptions at runtime\n// without coupling core to project-generated files.\n\nlet objectTypeDescriptions: Record<string, string> = {};\nlet attributeDescriptions: Record<string, string> = {};\n\nexport function registerObjectTypeDescriptions(map: Record<string, string>): void {\n objectTypeDescriptions = { ...objectTypeDescriptions, ...map };\n}\n\nexport function registerAttributeDescriptions(map: Record<string, string>): void {\n attributeDescriptions = { ...attributeDescriptions, ...map };\n}\n\nexport function resolveObjectTypeDescription(name: string | undefined): string | undefined {\n if (!name) return undefined;\n return objectTypeDescriptions[name];\n}\n\nexport function resolveAttributeDescription(name: string | undefined): string | undefined {\n if (!name) return undefined;\n return attributeDescriptions[name];\n}\n"]}
1
+ {"version":3,"file":"uns-dictionary-registry.js","sourceRoot":"","sources":["../../src/uns/uns-dictionary-registry.ts"],"names":[],"mappings":"AAAA,kFAAkF;AAClF,oDAAoD;AAEpD,IAAI,sBAAsB,GAA2B,EAAE,CAAC;AACxD,IAAI,qBAAqB,GAA2B,EAAE,CAAC;AAEvD,MAAM,UAAU,8BAA8B,CAAC,GAA2B;IACxE,sBAAsB,GAAG,EAAE,GAAG,sBAAsB,EAAE,GAAG,GAAG,EAAE,CAAC;AACjE,CAAC;AAED,MAAM,UAAU,6BAA6B,CAAC,GAA2B;IACvE,qBAAqB,GAAG,EAAE,GAAG,qBAAqB,EAAE,GAAG,GAAG,EAAE,CAAC;AAC/D,CAAC;AAED,MAAM,UAAU,4BAA4B,CAAC,IAAwB;IACnE,IAAI,CAAC,IAAI;QAAE,OAAO,SAAS,CAAC;IAC5B,OAAO,sBAAsB,CAAC,IAAI,CAAC,CAAC;AACtC,CAAC;AAED,MAAM,UAAU,2BAA2B,CAAC,IAAwB;IAClE,IAAI,CAAC,IAAI;QAAE,OAAO,SAAS,CAAC;IAC5B,OAAO,qBAAqB,CAAC,IAAI,CAAC,CAAC;AACrC,CAAC","sourcesContent":["// Simple registry to allow projects to provide additional descriptions at runtime\r\n// without coupling core to project-generated files.\r\n\r\nlet objectTypeDescriptions: Record<string, string> = {};\r\nlet attributeDescriptions: Record<string, string> = {};\r\n\r\nexport function registerObjectTypeDescriptions(map: Record<string, string>): void {\r\n objectTypeDescriptions = { ...objectTypeDescriptions, ...map };\r\n}\r\n\r\nexport function registerAttributeDescriptions(map: Record<string, string>): void {\r\n attributeDescriptions = { ...attributeDescriptions, ...map };\r\n}\r\n\r\nexport function resolveObjectTypeDescription(name: string | undefined): string | undefined {\r\n if (!name) return undefined;\r\n return objectTypeDescriptions[name];\r\n}\r\n\r\nexport function resolveAttributeDescription(name: string | undefined): string | undefined {\r\n if (!name) return undefined;\r\n return attributeDescriptions[name];\r\n}\r\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"uns-dictionary.generated.js","sourceRoot":"","sources":["../../src/uns/uns-dictionary.generated.ts"],"names":[],"mappings":"AAAA,yFAAyF;AACzF,MAAM,CAAC,MAAM,oBAAoB,GAAG;IAClC,wGAAwG;IACxG,WAAW,EAAE,WAAW;IACxB,kGAAkG;IAClG,UAAU,EAAE,UAAU;IACtB,mFAAmF;IACnF,WAAW,EAAE,WAAW;IACxB,oGAAoG;IACpG,iBAAiB,EAAE,iBAAiB;IACpC,yFAAyF;IACzF,oBAAoB,EAAE,oBAAoB;IAC1C,0EAA0E;IAC1E,iBAAiB,EAAE,iBAAiB;IACpC,+EAA+E;IAC/E,iBAAiB,EAAE,iBAAiB;IACpC,+FAA+F;IAC/F,iBAAiB,EAAE,iBAAiB;IACpC,wCAAwC;IACxC,iBAAiB,EAAE,iBAAiB;IACpC,yDAAyD;IACzD,kBAAkB,EAAE,kBAAkB;IACtC,4CAA4C;IAC5C,gBAAgB,EAAE,gBAAgB;IAClC,iEAAiE;IACjE,qBAAqB,EAAE,qBAAqB;CACpC,CAAC;AAEX,MAAM,CAAC,MAAM,+BAA+B,GAAsD;IAChG,WAAW,EAAE,mGAAmG;IAChH,UAAU,EAAE,6FAA6F;IACzG,WAAW,EAAE,8EAA8E;IAC3F,iBAAiB,EAAE,+FAA+F;IAClH,oBAAoB,EAAE,oFAAoF;IAC1G,iBAAiB,EAAE,qEAAqE;IACxF,iBAAiB,EAAE,0EAA0E;IAC7F,iBAAiB,EAAE,0FAA0F;IAC7G,iBAAiB,EAAE,mCAAmC;IACtD,kBAAkB,EAAE,oDAAoD;IACxE,gBAAgB,EAAE,uCAAuC;IACzD,qBAAqB,EAAE,4DAA4D;CACpF,CAAC;AAEF,MAAM,CAAC,MAAM,mBAAmB,GAAG;IACjC,uCAAuC;IACvC,QAAQ,EAAE,QAAQ;IAClB,+BAA+B;IAC/B,aAAa,EAAE,aAAa;IAC5B,yBAAyB;IACzB,WAAW,EAAE,WAAW;IACxB,+BAA+B;IAC/B,iBAAiB,EAAE,iBAAiB;IACpC,mBAAmB;IACnB,YAAY,EAAE,YAAY;IAC1B,yBAAyB;IACzB,OAAO,EAAE,OAAO;IAChB,uBAAuB;IACvB,oBAAoB,EAAE,oBAAoB;IAC1C,0BAA0B;IAC1B,QAAQ,EAAE,QAAQ;IAClB,+BAA+B;IAC/B,cAAc,EAAE,cAAc;IAC9B,qBAAqB;IACrB,eAAe,EAAE,eAAe;IAChC,0BAA0B;IAC1B,UAAU,EAAE,UAAU;IACtB,qCAAqC;IACrC,UAAU,EAAE,UAAU;IACtB,yBAAyB;IACzB,UAAU,EAAE,UAAU;IACtB,4BAA4B;IAC5B,SAAS,EAAE,SAAS;IACpB,oBAAoB;IACpB,MAAM,EAAE,MAAM;IACd,uBAAuB;IACvB,qBAAqB,EAAE,qBAAqB;IAC5C,mBAAmB;IACnB,YAAY,EAAE,YAAY;IAC1B,qBAAqB;IACrB,UAAU,EAAE,UAAU;IACtB,gCAAgC;IAChC,UAAU,EAAE,UAAU;IACtB,wBAAwB;IACxB,iBAAiB,EAAE,iBAAiB;IACpC,gCAAgC;IAChC,aAAa,EAAE,aAAa;IAC5B,oBAAoB;IACpB,cAAc,EAAE,cAAc;IAC9B,wBAAwB;IACxB,UAAU,EAAE,UAAU;IACtB,8BAA8B;IAC9B,eAAe,EAAE,eAAe;IAChC,4CAA4C;IAC5C,mBAAmB,EAAE,mBAAmB;IACxC,yBAAyB;IACzB,sBAAsB,EAAE,sBAAsB;IAC9C,wBAAwB;IACxB,iBAAiB,EAAE,iBAAiB;IACpC,yBAAyB;IACzB,mBAAmB,EAAE,mBAAmB;IACxC,mCAAmC;IACnC,WAAW,EAAE,WAAW;IACxB,qCAAqC;IACrC,WAAW,EAAE,WAAW;IACxB,yBAAyB;IACzB,gBAAgB,EAAE,gBAAgB;IAClC,wBAAwB;IACxB,UAAU,EAAE,UAAU;IACtB,uBAAuB;IACvB,kBAAkB,EAAE,kBAAkB;IACtC,sCAAsC;IACtC,eAAe,EAAE,eAAe;IAChC,oBAAoB;IACpB,WAAW,EAAE,WAAW;IACxB,yBAAyB;IACzB,eAAe,EAAE,eAAe;IAChC,2BAA2B;IAC3B,aAAa,EAAE,aAAa;IAC5B,iCAAiC;IACjC,aAAa,EAAE,aAAa;IAC5B,2BAA2B;IAC3B,iBAAiB,EAAE,iBAAiB;IACpC,4BAA4B;IAC5B,cAAc,EAAE,cAAc;IAC9B,mBAAmB;IACnB,aAAa,EAAE,aAAa;IAC5B,oBAAoB;IACpB,UAAU,EAAE,UAAU;IACtB,0BAA0B;IAC1B,oBAAoB,EAAE,oBAAoB;IAC1C,WAAW;IACX,OAAO,EAAE,OAAO;IAChB,gBAAgB;IAChB,QAAQ,EAAE,QAAQ;IAClB,gBAAgB;IAChB,SAAS,EAAE,SAAS;IACpB,WAAW;IACX,SAAS,EAAE,SAAS;IACpB,iBAAiB;IACjB,WAAW,EAAE,WAAW;IACxB,eAAe;IACf,MAAM,EAAE,MAAM;IACd,YAAY;IACZ,UAAU,EAAE,UAAU;IACtB,cAAc;IACd,MAAM,EAAE,MAAM;IACd,cAAc;IACd,aAAa,EAAE,aAAa;IAC5B,sBAAsB;IACtB,OAAO,EAAE,OAAO;IAChB,qBAAqB;IACrB,YAAY,EAAE,YAAY;IAC1B,kBAAkB;IAClB,cAAc,EAAE,cAAc;IAC9B,mBAAmB;IACnB,IAAI,EAAE,IAAI;IACV,mCAAmC;IACnC,OAAO,EAAE,OAAO;IAChB,sBAAsB;IACtB,kBAAkB,EAAE,kBAAkB;IACtC,qCAAqC;IACrC,iBAAiB,EAAE,iBAAiB;IACpC,wBAAwB;IACxB,aAAa,EAAE,aAAa;CACpB,CAAC;AAEX,MAAM,CAAC,MAAM,8BAA8B,GAAqD;IAC9F,QAAQ,EAAE,kCAAkC;IAC5C,aAAa,EAAE,0BAA0B;IACzC,WAAW,EAAE,oBAAoB;IACjC,iBAAiB,EAAE,0BAA0B;IAC7C,YAAY,EAAE,cAAc;IAC5B,OAAO,EAAE,oBAAoB;IAC7B,oBAAoB,EAAE,kBAAkB;IACxC,QAAQ,EAAE,qBAAqB;IAC/B,cAAc,EAAE,0BAA0B;IAC1C,eAAe,EAAE,gBAAgB;IACjC,UAAU,EAAE,qBAAqB;IACjC,UAAU,EAAE,gCAAgC;IAC5C,UAAU,EAAE,oBAAoB;IAChC,SAAS,EAAE,uBAAuB;IAClC,MAAM,EAAE,eAAe;IACvB,qBAAqB,EAAE,kBAAkB;IACzC,YAAY,EAAE,cAAc;IAC5B,UAAU,EAAE,gBAAgB;IAC5B,UAAU,EAAE,2BAA2B;IACvC,iBAAiB,EAAE,mBAAmB;IACtC,aAAa,EAAE,2BAA2B;IAC1C,cAAc,EAAE,eAAe;IAC/B,UAAU,EAAE,mBAAmB;IAC/B,eAAe,EAAE,yBAAyB;IAC1C,mBAAmB,EAAE,uCAAuC;IAC5D,sBAAsB,EAAE,oBAAoB;IAC5C,iBAAiB,EAAE,mBAAmB;IACtC,mBAAmB,EAAE,oBAAoB;IACzC,WAAW,EAAE,8BAA8B;IAC3C,WAAW,EAAE,gCAAgC;IAC7C,gBAAgB,EAAE,oBAAoB;IACtC,UAAU,EAAE,mBAAmB;IAC/B,kBAAkB,EAAE,kBAAkB;IACtC,eAAe,EAAE,iCAAiC;IAClD,WAAW,EAAE,eAAe;IAC5B,eAAe,EAAE,oBAAoB;IACrC,aAAa,EAAE,sBAAsB;IACrC,aAAa,EAAE,4BAA4B;IAC3C,iBAAiB,EAAE,sBAAsB;IACzC,cAAc,EAAE,uBAAuB;IACvC,aAAa,EAAE,cAAc;IAC7B,UAAU,EAAE,eAAe;IAC3B,oBAAoB,EAAE,qBAAqB;IAC3C,OAAO,EAAE,MAAM;IACf,QAAQ,EAAE,WAAW;IACrB,SAAS,EAAE,WAAW;IACtB,SAAS,EAAE,MAAM;IACjB,WAAW,EAAE,YAAY;IACzB,MAAM,EAAE,UAAU;IAClB,UAAU,EAAE,OAAO;IACnB,MAAM,EAAE,SAAS;IACjB,aAAa,EAAE,SAAS;IACxB,OAAO,EAAE,iBAAiB;IAC1B,YAAY,EAAE,gBAAgB;IAC9B,cAAc,EAAE,aAAa;IAC7B,IAAI,EAAE,cAAc;IACpB,OAAO,EAAE,8BAA8B;IACvC,kBAAkB,EAAE,iBAAiB;IACrC,iBAAiB,EAAE,gCAAgC;IACnD,aAAa,EAAE,mBAAmB;CACnC,CAAC;AAGF,MAAM,UAAU,iCAAiC,CAAC,IAAY;IAC5D,OAAQ,+BAAsE,CAAC,IAAI,CAAC,CAAC;AACvF,CAAC;AAED,MAAM,CAAC,MAAM,yBAAyB,GAAG,EAAW,CAAC;AAGrD,MAAM,UAAU,gCAAgC,CAAC,IAAY;IAC3D,OAAQ,8BAAqE,CAAC,IAAI,CAAC,CAAC;AACtF,CAAC","sourcesContent":["/* Stub dictionary. Regenerate via generate-uns-dictionary.ts if you want to override. */\nexport const GeneratedObjectTypes = {\n /** Fizična oprema (stroji, peči, senzorji). Uporablja se za spremljanje stanja, meritev in dogodkov. */\n \"equipment\": \"equipment\",\n /** Materialne enote (loti, serije, surovine, polizdelki). Za sledljivost, količine in premike. */\n \"material\": \"material\",\n /** Osebje (operaterji, nadzorniki, tehnologi). Za prisotnost, naloge in status. */\n \"personnel\": \"personnel\",\n /** Posamezen korak v procesu (npr. valjanje, hlajenje, analiza). Za faze ali aktivnosti procesa. */\n \"process-segment\": \"process-segment\",\n /** Definicija izdelka, recepture, tehnični opisi. Za metapodatke izdelka in revizije. */\n \"product-definition\": \"product-definition\",\n /** Kazalniki kakovosti izdelka (odstopanja, ocene, rezultati meritev). */\n \"product-quality\": \"product-quality\",\n /** Definicija nalog ali delovnih tokov. Za planirane operacije in navodila. */\n \"work-definition\": \"work-definition\",\n /** Status kateregakoli vira (material, osebje, oprema). Za razpoložljivost, okvare, izrabo. */\n \"resource-status\": \"resource-status\",\n /** Energija (elektrika, para, plin). */\n \"energy-resource\": \"energy-resource\",\n /** Utility viri (voda, zrak, dušik, stisnjeni plini). */\n \"utility-resource\": \"utility-resource\",\n /** Tekočine in plini, ki niso energenti. */\n \"fluid-resource\": \"fluid-resource\",\n /** Maziva, olja, čistila, ki se porabijo in niso del izdelka. */\n \"consumable-resource\": \"consumable-resource\",\n} as const;\n\nexport const GeneratedObjectTypeDescriptions: Record<keyof typeof GeneratedObjectTypes, string> = {\n \"equipment\": \"Fizična oprema (stroji, peči, senzorji). Uporablja se za spremljanje stanja, meritev in dogodkov.\",\n \"material\": \"Materialne enote (loti, serije, surovine, polizdelki). Za sledljivost, količine in premike.\",\n \"personnel\": \"Osebje (operaterji, nadzorniki, tehnologi). Za prisotnost, naloge in status.\",\n \"process-segment\": \"Posamezen korak v procesu (npr. valjanje, hlajenje, analiza). Za faze ali aktivnosti procesa.\",\n \"product-definition\": \"Definicija izdelka, recepture, tehnični opisi. Za metapodatke izdelka in revizije.\",\n \"product-quality\": \"Kazalniki kakovosti izdelka (odstopanja, ocene, rezultati meritev).\",\n \"work-definition\": \"Definicija nalog ali delovnih tokov. Za planirane operacije in navodila.\",\n \"resource-status\": \"Status kateregakoli vira (material, osebje, oprema). Za razpoložljivost, okvare, izrabo.\",\n \"energy-resource\": \"Energija (elektrika, para, plin).\",\n \"utility-resource\": \"Utility viri (voda, zrak, dušik, stisnjeni plini).\",\n \"fluid-resource\": \"Tekočine in plini, ki niso energenti.\",\n \"consumable-resource\": \"Maziva, olja, čistila, ki se porabijo in niso del izdelka.\",\n};\n\nexport const GeneratedAttributes = {\n /** Trenutno stanje vira ali opreme. */\n \"status\": \"status\",\n /** Temperatura vira/opreme. */\n \"temperature\": \"temperature\",\n /** Merjena vibracija. */\n \"vibration\": \"vibration\",\n /** Število obratovalnih ur. */\n \"operating-hours\": \"operating-hours\",\n /** Koda napake. */\n \"fault-code\": \"fault-code\",\n /** Hitrost delovanja. */\n \"speed\": \"speed\",\n /** Poraba energije. */\n \"energy-consumption\": \"energy-consumption\",\n /** Identifikator lota. */\n \"lot-id\": \"lot-id\",\n /** Številka serije (batch). */\n \"batch-number\": \"batch-number\",\n /** Tip materiala. */\n \"material-type\": \"material-type\",\n /** Količina materiala. */\n \"quantity\": \"quantity\",\n /** Lokacija materiala ali opreme. */\n \"location\": \"location\",\n /** Prisotnost osebja. */\n \"presence\": \"presence\",\n /** Identifikator naloge. */\n \"task-id\": \"task-id\",\n /** Vloga osebja. */\n \"role\": \"role\",\n /** Nivo pooblastil. */\n \"authorization-level\": \"authorization-level\",\n /** Čas začetka. */\n \"start-time\": \"start-time\",\n /** Čas zaključka. */\n \"end-time\": \"end-time\",\n /** Trajanje faze ali naloge. */\n \"duration\": \"duration\",\n /** Izhodna količina. */\n \"output-quantity\": \"output-quantity\",\n /** Identifikator operaterja. */\n \"operator-id\": \"operator-id\",\n /** Koda izdelka. */\n \"product-code\": \"product-code\",\n /** Revizija izdelka. */\n \"revision\": \"revision\",\n /** Tehnične specifikacije. */\n \"specification\": \"specification\",\n /** Ciljni parametri izdelka ali procesa. */\n \"target-parameters\": \"target-parameters\",\n /** Sestava materiala. */\n \"material-composition\": \"material-composition\",\n /** Zgodovina verzij. */\n \"version-history\": \"version-history\",\n /** Rezultat pregleda. */\n \"inspection-result\": \"inspection-result\",\n /** Odstopanje od specifikacije. */\n \"deviation\": \"deviation\",\n /** Uspešno/neuspešno (pass/fail). */\n \"pass-fail\": \"pass-fail\",\n /** Površinska napaka. */\n \"surface-defect\": \"surface-defect\",\n /** Trdota materiala. */\n \"hardness\": \"hardness\",\n /** Natezna trdnost. */\n \"tensile-strength\": \"tensile-strength\",\n /** Identifikator delovnega naloga. */\n \"work-order-id\": \"work-order-id\",\n /** Seznam nalog. */\n \"task-list\": \"task-list\",\n /** Planirani začetek. */\n \"planned-start\": \"planned-start\",\n /** Planirani zaključek. */\n \"planned-end\": \"planned-end\",\n /** Dodeljeno osebi ali ekipi. */\n \"assigned-to\": \"assigned-to\",\n /** Povezava do navodil. */\n \"instruction-url\": \"instruction-url\",\n /** Razpoložljivost vira. */\n \"availability\": \"availability\",\n /** Izraba vira. */\n \"utilization\": \"utilization\",\n /** Zastoj/izpad. */\n \"downtime\": \"downtime\",\n /** Stanje vzdrževanja. */\n \"maintenance-status\": \"maintenance-status\",\n /** Moč. */\n \"power\": \"power\",\n /** Energija. */\n \"energy\": \"energy\",\n /** Napetost. */\n \"voltage\": \"voltage\",\n /** Tok. */\n \"current\": \"current\",\n /** Frekvenca. */\n \"frequency\": \"frequency\",\n /** Strošek. */\n \"cost\": \"cost\",\n /** Tlak. */\n \"pressure\": \"pressure\",\n /** Pretok. */\n \"flow\": \"flow\",\n /** Poraba. */\n \"consumption\": \"consumption\",\n /** Alarmni signal. */\n \"alarm\": \"alarm\",\n /** Skupni pretok. */\n \"total-flow\": \"total-flow\",\n /** Prevodnost. */\n \"conductivity\": \"conductivity\",\n /** pH vrednost. */\n \"ph\": \"ph\",\n /** Nivo zaloge ali rezervoarja. */\n \"level\": \"level\",\n /** Hitrost porabe. */\n \"consumption-rate\": \"consumption-rate\",\n /** Potrebno dolivanje/dopolnitev. */\n \"refill-required\": \"refill-required\",\n /** Zadnje polnjenje. */\n \"last-refill\": \"last-refill\",\n} as const;\n\nexport const GeneratedAttributeDescriptions: Record<keyof typeof GeneratedAttributes, string> = {\n \"status\": \"Trenutno stanje vira ali opreme.\",\n \"temperature\": \"Temperatura vira/opreme.\",\n \"vibration\": \"Merjena vibracija.\",\n \"operating-hours\": \"Število obratovalnih ur.\",\n \"fault-code\": \"Koda napake.\",\n \"speed\": \"Hitrost delovanja.\",\n \"energy-consumption\": \"Poraba energije.\",\n \"lot-id\": \"Identifikator lota.\",\n \"batch-number\": \"Številka serije (batch).\",\n \"material-type\": \"Tip materiala.\",\n \"quantity\": \"Količina materiala.\",\n \"location\": \"Lokacija materiala ali opreme.\",\n \"presence\": \"Prisotnost osebja.\",\n \"task-id\": \"Identifikator naloge.\",\n \"role\": \"Vloga osebja.\",\n \"authorization-level\": \"Nivo pooblastil.\",\n \"start-time\": \"Čas začetka.\",\n \"end-time\": \"Čas zaključka.\",\n \"duration\": \"Trajanje faze ali naloge.\",\n \"output-quantity\": \"Izhodna količina.\",\n \"operator-id\": \"Identifikator operaterja.\",\n \"product-code\": \"Koda izdelka.\",\n \"revision\": \"Revizija izdelka.\",\n \"specification\": \"Tehnične specifikacije.\",\n \"target-parameters\": \"Ciljni parametri izdelka ali procesa.\",\n \"material-composition\": \"Sestava materiala.\",\n \"version-history\": \"Zgodovina verzij.\",\n \"inspection-result\": \"Rezultat pregleda.\",\n \"deviation\": \"Odstopanje od specifikacije.\",\n \"pass-fail\": \"Uspešno/neuspešno (pass/fail).\",\n \"surface-defect\": \"Površinska napaka.\",\n \"hardness\": \"Trdota materiala.\",\n \"tensile-strength\": \"Natezna trdnost.\",\n \"work-order-id\": \"Identifikator delovnega naloga.\",\n \"task-list\": \"Seznam nalog.\",\n \"planned-start\": \"Planirani začetek.\",\n \"planned-end\": \"Planirani zaključek.\",\n \"assigned-to\": \"Dodeljeno osebi ali ekipi.\",\n \"instruction-url\": \"Povezava do navodil.\",\n \"availability\": \"Razpoložljivost vira.\",\n \"utilization\": \"Izraba vira.\",\n \"downtime\": \"Zastoj/izpad.\",\n \"maintenance-status\": \"Stanje vzdrževanja.\",\n \"power\": \"Moč.\",\n \"energy\": \"Energija.\",\n \"voltage\": \"Napetost.\",\n \"current\": \"Tok.\",\n \"frequency\": \"Frekvenca.\",\n \"cost\": \"Strošek.\",\n \"pressure\": \"Tlak.\",\n \"flow\": \"Pretok.\",\n \"consumption\": \"Poraba.\",\n \"alarm\": \"Alarmni signal.\",\n \"total-flow\": \"Skupni pretok.\",\n \"conductivity\": \"Prevodnost.\",\n \"ph\": \"pH vrednost.\",\n \"level\": \"Nivo zaloge ali rezervoarja.\",\n \"consumption-rate\": \"Hitrost porabe.\",\n \"refill-required\": \"Potrebno dolivanje/dopolnitev.\",\n \"last-refill\": \"Zadnje polnjenje.\",\n};\n\nexport type GeneratedObjectTypeName = keyof typeof GeneratedObjectTypes;\nexport function getGeneratedObjectTypeDescription(name: string): string | undefined {\n return (GeneratedObjectTypeDescriptions as Record<string, string | undefined>)[name];\n}\n\nexport const GeneratedAttributesByType = {} as const;\n\nexport type GeneratedAttributeName = keyof typeof GeneratedAttributes;\nexport function getGeneratedAttributeDescription(name: string): string | undefined {\n return (GeneratedAttributeDescriptions as Record<string, string | undefined>)[name];\n}\n\nexport type GeneratedAttributesFor<T extends keyof typeof GeneratedAttributesByType> = keyof typeof GeneratedAttributesByType[T];\n"]}
1
+ {"version":3,"file":"uns-dictionary.generated.js","sourceRoot":"","sources":["../../src/uns/uns-dictionary.generated.ts"],"names":[],"mappings":"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","sourcesContent":["/* Stub dictionary. Regenerate via generate-uns-dictionary.ts if you want to override. */\r\nexport const GeneratedObjectTypes = {\r\n /** Fizična oprema (stroji, peči, senzorji). Uporablja se za spremljanje stanja, meritev in dogodkov. */\r\n \"equipment\": \"equipment\",\r\n /** Materialne enote (loti, serije, surovine, polizdelki). Za sledljivost, količine in premike. */\r\n \"material\": \"material\",\r\n /** Osebje (operaterji, nadzorniki, tehnologi). Za prisotnost, naloge in status. */\r\n \"personnel\": \"personnel\",\r\n /** Posamezen korak v procesu (npr. valjanje, hlajenje, analiza). Za faze ali aktivnosti procesa. */\r\n \"process-segment\": \"process-segment\",\r\n /** Definicija izdelka, recepture, tehnični opisi. Za metapodatke izdelka in revizije. */\r\n \"product-definition\": \"product-definition\",\r\n /** Kazalniki kakovosti izdelka (odstopanja, ocene, rezultati meritev). */\r\n \"product-quality\": \"product-quality\",\r\n /** Definicija nalog ali delovnih tokov. Za planirane operacije in navodila. */\r\n \"work-definition\": \"work-definition\",\r\n /** Status kateregakoli vira (material, osebje, oprema). Za razpoložljivost, okvare, izrabo. */\r\n \"resource-status\": \"resource-status\",\r\n /** Energija (elektrika, para, plin). */\r\n \"energy-resource\": \"energy-resource\",\r\n /** Utility viri (voda, zrak, dušik, stisnjeni plini). */\r\n \"utility-resource\": \"utility-resource\",\r\n /** Tekočine in plini, ki niso energenti. */\r\n \"fluid-resource\": \"fluid-resource\",\r\n /** Maziva, olja, čistila, ki se porabijo in niso del izdelka. */\r\n \"consumable-resource\": \"consumable-resource\",\r\n} as const;\r\n\r\nexport const GeneratedObjectTypeDescriptions: Record<keyof typeof GeneratedObjectTypes, string> = {\r\n \"equipment\": \"Fizična oprema (stroji, peči, senzorji). Uporablja se za spremljanje stanja, meritev in dogodkov.\",\r\n \"material\": \"Materialne enote (loti, serije, surovine, polizdelki). Za sledljivost, količine in premike.\",\r\n \"personnel\": \"Osebje (operaterji, nadzorniki, tehnologi). Za prisotnost, naloge in status.\",\r\n \"process-segment\": \"Posamezen korak v procesu (npr. valjanje, hlajenje, analiza). Za faze ali aktivnosti procesa.\",\r\n \"product-definition\": \"Definicija izdelka, recepture, tehnični opisi. Za metapodatke izdelka in revizije.\",\r\n \"product-quality\": \"Kazalniki kakovosti izdelka (odstopanja, ocene, rezultati meritev).\",\r\n \"work-definition\": \"Definicija nalog ali delovnih tokov. Za planirane operacije in navodila.\",\r\n \"resource-status\": \"Status kateregakoli vira (material, osebje, oprema). Za razpoložljivost, okvare, izrabo.\",\r\n \"energy-resource\": \"Energija (elektrika, para, plin).\",\r\n \"utility-resource\": \"Utility viri (voda, zrak, dušik, stisnjeni plini).\",\r\n \"fluid-resource\": \"Tekočine in plini, ki niso energenti.\",\r\n \"consumable-resource\": \"Maziva, olja, čistila, ki se porabijo in niso del izdelka.\",\r\n};\r\n\r\nexport const GeneratedAttributes = {\r\n /** Trenutno stanje vira ali opreme. */\r\n \"status\": \"status\",\r\n /** Temperatura vira/opreme. */\r\n \"temperature\": \"temperature\",\r\n /** Merjena vibracija. */\r\n \"vibration\": \"vibration\",\r\n /** Število obratovalnih ur. */\r\n \"operating-hours\": \"operating-hours\",\r\n /** Koda napake. */\r\n \"fault-code\": \"fault-code\",\r\n /** Hitrost delovanja. */\r\n \"speed\": \"speed\",\r\n /** Poraba energije. */\r\n \"energy-consumption\": \"energy-consumption\",\r\n /** Identifikator lota. */\r\n \"lot-id\": \"lot-id\",\r\n /** Številka serije (batch). */\r\n \"batch-number\": \"batch-number\",\r\n /** Tip materiala. */\r\n \"material-type\": \"material-type\",\r\n /** Količina materiala. */\r\n \"quantity\": \"quantity\",\r\n /** Lokacija materiala ali opreme. */\r\n \"location\": \"location\",\r\n /** Prisotnost osebja. */\r\n \"presence\": \"presence\",\r\n /** Identifikator naloge. */\r\n \"task-id\": \"task-id\",\r\n /** Vloga osebja. */\r\n \"role\": \"role\",\r\n /** Nivo pooblastil. */\r\n \"authorization-level\": \"authorization-level\",\r\n /** Čas začetka. */\r\n \"start-time\": \"start-time\",\r\n /** Čas zaključka. */\r\n \"end-time\": \"end-time\",\r\n /** Trajanje faze ali naloge. */\r\n \"duration\": \"duration\",\r\n /** Izhodna količina. */\r\n \"output-quantity\": \"output-quantity\",\r\n /** Identifikator operaterja. */\r\n \"operator-id\": \"operator-id\",\r\n /** Koda izdelka. */\r\n \"product-code\": \"product-code\",\r\n /** Revizija izdelka. */\r\n \"revision\": \"revision\",\r\n /** Tehnične specifikacije. */\r\n \"specification\": \"specification\",\r\n /** Ciljni parametri izdelka ali procesa. */\r\n \"target-parameters\": \"target-parameters\",\r\n /** Sestava materiala. */\r\n \"material-composition\": \"material-composition\",\r\n /** Zgodovina verzij. */\r\n \"version-history\": \"version-history\",\r\n /** Rezultat pregleda. */\r\n \"inspection-result\": \"inspection-result\",\r\n /** Odstopanje od specifikacije. */\r\n \"deviation\": \"deviation\",\r\n /** Uspešno/neuspešno (pass/fail). */\r\n \"pass-fail\": \"pass-fail\",\r\n /** Površinska napaka. */\r\n \"surface-defect\": \"surface-defect\",\r\n /** Trdota materiala. */\r\n \"hardness\": \"hardness\",\r\n /** Natezna trdnost. */\r\n \"tensile-strength\": \"tensile-strength\",\r\n /** Identifikator delovnega naloga. */\r\n \"work-order-id\": \"work-order-id\",\r\n /** Seznam nalog. */\r\n \"task-list\": \"task-list\",\r\n /** Planirani začetek. */\r\n \"planned-start\": \"planned-start\",\r\n /** Planirani zaključek. */\r\n \"planned-end\": \"planned-end\",\r\n /** Dodeljeno osebi ali ekipi. */\r\n \"assigned-to\": \"assigned-to\",\r\n /** Povezava do navodil. */\r\n \"instruction-url\": \"instruction-url\",\r\n /** Razpoložljivost vira. */\r\n \"availability\": \"availability\",\r\n /** Izraba vira. */\r\n \"utilization\": \"utilization\",\r\n /** Zastoj/izpad. */\r\n \"downtime\": \"downtime\",\r\n /** Stanje vzdrževanja. */\r\n \"maintenance-status\": \"maintenance-status\",\r\n /** Moč. */\r\n \"power\": \"power\",\r\n /** Energija. */\r\n \"energy\": \"energy\",\r\n /** Napetost. */\r\n \"voltage\": \"voltage\",\r\n /** Tok. */\r\n \"current\": \"current\",\r\n /** Frekvenca. */\r\n \"frequency\": \"frequency\",\r\n /** Strošek. */\r\n \"cost\": \"cost\",\r\n /** Tlak. */\r\n \"pressure\": \"pressure\",\r\n /** Pretok. */\r\n \"flow\": \"flow\",\r\n /** Poraba. */\r\n \"consumption\": \"consumption\",\r\n /** Alarmni signal. */\r\n \"alarm\": \"alarm\",\r\n /** Skupni pretok. */\r\n \"total-flow\": \"total-flow\",\r\n /** Prevodnost. */\r\n \"conductivity\": \"conductivity\",\r\n /** pH vrednost. */\r\n \"ph\": \"ph\",\r\n /** Nivo zaloge ali rezervoarja. */\r\n \"level\": \"level\",\r\n /** Hitrost porabe. */\r\n \"consumption-rate\": \"consumption-rate\",\r\n /** Potrebno dolivanje/dopolnitev. */\r\n \"refill-required\": \"refill-required\",\r\n /** Zadnje polnjenje. */\r\n \"last-refill\": \"last-refill\",\r\n} as const;\r\n\r\nexport const GeneratedAttributeDescriptions: Record<keyof typeof GeneratedAttributes, string> = {\r\n \"status\": \"Trenutno stanje vira ali opreme.\",\r\n \"temperature\": \"Temperatura vira/opreme.\",\r\n \"vibration\": \"Merjena vibracija.\",\r\n \"operating-hours\": \"Število obratovalnih ur.\",\r\n \"fault-code\": \"Koda napake.\",\r\n \"speed\": \"Hitrost delovanja.\",\r\n \"energy-consumption\": \"Poraba energije.\",\r\n \"lot-id\": \"Identifikator lota.\",\r\n \"batch-number\": \"Številka serije (batch).\",\r\n \"material-type\": \"Tip materiala.\",\r\n \"quantity\": \"Količina materiala.\",\r\n \"location\": \"Lokacija materiala ali opreme.\",\r\n \"presence\": \"Prisotnost osebja.\",\r\n \"task-id\": \"Identifikator naloge.\",\r\n \"role\": \"Vloga osebja.\",\r\n \"authorization-level\": \"Nivo pooblastil.\",\r\n \"start-time\": \"Čas začetka.\",\r\n \"end-time\": \"Čas zaključka.\",\r\n \"duration\": \"Trajanje faze ali naloge.\",\r\n \"output-quantity\": \"Izhodna količina.\",\r\n \"operator-id\": \"Identifikator operaterja.\",\r\n \"product-code\": \"Koda izdelka.\",\r\n \"revision\": \"Revizija izdelka.\",\r\n \"specification\": \"Tehnične specifikacije.\",\r\n \"target-parameters\": \"Ciljni parametri izdelka ali procesa.\",\r\n \"material-composition\": \"Sestava materiala.\",\r\n \"version-history\": \"Zgodovina verzij.\",\r\n \"inspection-result\": \"Rezultat pregleda.\",\r\n \"deviation\": \"Odstopanje od specifikacije.\",\r\n \"pass-fail\": \"Uspešno/neuspešno (pass/fail).\",\r\n \"surface-defect\": \"Površinska napaka.\",\r\n \"hardness\": \"Trdota materiala.\",\r\n \"tensile-strength\": \"Natezna trdnost.\",\r\n \"work-order-id\": \"Identifikator delovnega naloga.\",\r\n \"task-list\": \"Seznam nalog.\",\r\n \"planned-start\": \"Planirani začetek.\",\r\n \"planned-end\": \"Planirani zaključek.\",\r\n \"assigned-to\": \"Dodeljeno osebi ali ekipi.\",\r\n \"instruction-url\": \"Povezava do navodil.\",\r\n \"availability\": \"Razpoložljivost vira.\",\r\n \"utilization\": \"Izraba vira.\",\r\n \"downtime\": \"Zastoj/izpad.\",\r\n \"maintenance-status\": \"Stanje vzdrževanja.\",\r\n \"power\": \"Moč.\",\r\n \"energy\": \"Energija.\",\r\n \"voltage\": \"Napetost.\",\r\n \"current\": \"Tok.\",\r\n \"frequency\": \"Frekvenca.\",\r\n \"cost\": \"Strošek.\",\r\n \"pressure\": \"Tlak.\",\r\n \"flow\": \"Pretok.\",\r\n \"consumption\": \"Poraba.\",\r\n \"alarm\": \"Alarmni signal.\",\r\n \"total-flow\": \"Skupni pretok.\",\r\n \"conductivity\": \"Prevodnost.\",\r\n \"ph\": \"pH vrednost.\",\r\n \"level\": \"Nivo zaloge ali rezervoarja.\",\r\n \"consumption-rate\": \"Hitrost porabe.\",\r\n \"refill-required\": \"Potrebno dolivanje/dopolnitev.\",\r\n \"last-refill\": \"Zadnje polnjenje.\",\r\n};\r\n\r\nexport type GeneratedObjectTypeName = keyof typeof GeneratedObjectTypes;\r\nexport function getGeneratedObjectTypeDescription(name: string): string | undefined {\r\n return (GeneratedObjectTypeDescriptions as Record<string, string | undefined>)[name];\r\n}\r\n\r\nexport const GeneratedAttributesByType = {} as const;\r\n\r\nexport type GeneratedAttributeName = keyof typeof GeneratedAttributes;\r\nexport function getGeneratedAttributeDescription(name: string): string | undefined {\r\n return (GeneratedAttributeDescriptions as Record<string, string | undefined>)[name];\r\n}\r\n\r\nexport type GeneratedAttributesFor<T extends keyof typeof GeneratedAttributesByType> = keyof typeof GeneratedAttributesByType[T];\r\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"uns-event-emitter.js","sourceRoot":"","sources":["../../src/uns/uns-event-emitter.ts"],"names":[],"mappings":"AAAA,MAAM,OAAO,eAAe;IAClB,SAAS,GAEb,EAAE,CAAC;IAEP,EAAE,CACA,SAAY,EACZ,QAAoC;QAEpC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,EAAE,CAAC;YAC/B,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,GAAG,EAAE,CAAC;QACjC,CAAC;QACD,IAAI,CAAC,SAAS,CAAC,SAAS,CAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IAC5C,CAAC;IAED,GAAG,CACD,SAAY,EACZ,QAAoC;QAEpC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC;YAAE,OAAO;QACvC,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC,SAAS,CAAE,CAAC,MAAM,CAC3D,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,KAAK,QAAQ,CACtB,CAAC;IACJ,CAAC;IAED,IAAI,CAAyB,SAAY,EAAE,KAAgB;QACzD,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC;YAAE,OAAO;QACvC,IAAI,CAAC,SAAS,CAAC,SAAS,CAAE,CAAC,OAAO,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC;IACpE,CAAC;CACF","sourcesContent":["export class UnsEventEmitter<Events extends Record<string, any>> {\n private listeners: {\n [K in keyof Events]?: Array<(event: Events[K]) => void>;\n } = {};\n\n on<K extends keyof Events>(\n eventName: K,\n listener: (event: Events[K]) => void,\n ): void {\n if (!this.listeners[eventName]) {\n this.listeners[eventName] = [];\n }\n this.listeners[eventName]!.push(listener);\n }\n\n off<K extends keyof Events>(\n eventName: K,\n listener: (event: Events[K]) => void,\n ): void {\n if (!this.listeners[eventName]) return;\n this.listeners[eventName] = this.listeners[eventName]!.filter(\n (l) => l !== listener,\n );\n }\n\n emit<K extends keyof Events>(eventName: K, event: Events[K]): void {\n if (!this.listeners[eventName]) return;\n this.listeners[eventName]!.forEach((listener) => listener(event));\n }\n}"]}
1
+ {"version":3,"file":"uns-event-emitter.js","sourceRoot":"","sources":["../../src/uns/uns-event-emitter.ts"],"names":[],"mappings":"AAAA,MAAM,OAAO,eAAe;IAClB,SAAS,GAEb,EAAE,CAAC;IAEP,EAAE,CACA,SAAY,EACZ,QAAoC;QAEpC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,EAAE,CAAC;YAC/B,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,GAAG,EAAE,CAAC;QACjC,CAAC;QACD,IAAI,CAAC,SAAS,CAAC,SAAS,CAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IAC5C,CAAC;IAED,GAAG,CACD,SAAY,EACZ,QAAoC;QAEpC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC;YAAE,OAAO;QACvC,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC,SAAS,CAAE,CAAC,MAAM,CAC3D,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,KAAK,QAAQ,CACtB,CAAC;IACJ,CAAC;IAED,IAAI,CAAyB,SAAY,EAAE,KAAgB;QACzD,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC;YAAE,OAAO;QACvC,IAAI,CAAC,SAAS,CAAC,SAAS,CAAE,CAAC,OAAO,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC;IACpE,CAAC;CACF","sourcesContent":["export class UnsEventEmitter<Events extends Record<string, any>> {\r\n private listeners: {\r\n [K in keyof Events]?: Array<(event: Events[K]) => void>;\r\n } = {};\r\n\r\n on<K extends keyof Events>(\r\n eventName: K,\r\n listener: (event: Events[K]) => void,\r\n ): void {\r\n if (!this.listeners[eventName]) {\r\n this.listeners[eventName] = [];\r\n }\r\n this.listeners[eventName]!.push(listener);\r\n }\r\n\r\n off<K extends keyof Events>(\r\n eventName: K,\r\n listener: (event: Events[K]) => void,\r\n ): void {\r\n if (!this.listeners[eventName]) return;\r\n this.listeners[eventName] = this.listeners[eventName]!.filter(\r\n (l) => l !== listener,\r\n );\r\n }\r\n\r\n emit<K extends keyof Events>(eventName: K, event: Events[K]): void {\r\n if (!this.listeners[eventName]) return;\r\n this.listeners[eventName]!.forEach((listener) => listener(event));\r\n }\r\n}"]}
@@ -1 +1 @@
1
- {"version":3,"file":"uns-interfaces.js","sourceRoot":"","sources":["../../src/uns/uns-interfaces.ts"],"names":[],"mappings":"AAUA,MAAM,UAAU,aAAa,CAAC,KAAa;IACzC,MAAM,YAAY,GAAG,+CAA+C,CAAC;IACrE,OAAO,YAAY,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;AAClC,CAAC;AAID,MAAM,CAAC,MAAM,UAAU,GAAG,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC","sourcesContent":["import { UnsAttributeType } from \"../graphql/schema.js\";\nimport { MeasurementUnit } from \"./uns-measurements.js\";\nimport { UnsTags } from \"./uns-tags.js\";\nimport type { UnsObjectId, UnsObjectType } from \"./uns-object.js\";\nimport type { UnsAsset } from \"./uns-asset.js\";\nimport type { IMqttConnectProperties, IMqttServerConfig, MqttProtocol } from \"../uns-mqtt/mqtt-interfaces.js\";\nimport { UnsTopics } from \"./uns-topics.js\";\nimport { knownUnsAttributes, type KnownUnsAttributeName } from \"./uns-attributes.js\";\n\nexport type ISO8601 = `${number}-${string}-${string}T${string}:${string}:${string}.${string}Z`;\nexport function isIOS8601Type(value: string): value is ISO8601 {\n const iso8601Regex = /^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}\\.\\d{3}Z$/;\n return iso8601Regex.test(value);\n}\n// Known attribute names (with IntelliSense) while still allowing arbitrary strings.\nexport type UnsAttribute = KnownUnsAttributeName | (string & {});\n\nexport const valueTypes = [\"string\", \"number\"];\nexport type ValueTypeString = typeof valueTypes[number];\nexport type ValueType = string | number;\n\n// Supported QuestDB column types for UNS tables.\nexport type QuestDbType =\n | \"boolean\"\n | \"ipv4\"\n | \"byte\"\n | \"short\"\n | \"char\"\n | \"int\"\n | \"float\"\n | \"symbol\"\n | \"varchar\"\n | \"string\"\n | \"long\"\n | \"date\"\n | \"timestamp\"\n | \"timestamp_ns\"\n | \"double\"\n | \"uuid\"\n | \"binary\"\n | \"long256\"\n | `geohash(${number}${\"b\" | \"c\"})`\n | `decimal(${number},${number})`\n | `array<${string}>`;\n\nexport interface IUnsParameters {\n mqttSubToTopics?: string | string[];\n username?: string;\n password?: string;\n mqttSSL?: boolean;\n publishThrottlingDelay?: number; // Delay in milliseconds; default is 1ms\n subscribeThrottlingDelay?: number; // Delay in milliseconds; default is 1ms\n rejectUnauthorized?: boolean;\n clientId?: string;\n hosts?: string[];\n servers?: IMqttServerConfig[];\n port?: number;\n protocol?: MqttProtocol;\n keepalive?: number;\n clean?: boolean;\n connectTimeout?: number;\n reconnectPeriod?: number;\n reconnectOnConnackError?: boolean;\n resubscribe?: boolean;\n queueQoSZero?: boolean;\n properties?: IMqttConnectProperties;\n ca?: string;\n cert?: string;\n key?: string;\n servername?: string;\n}\n\nexport interface IUnsProcessParameters {\n processName: string;\n mqttSubToTopics?: string | string[];\n username?: string;\n password?: string;\n mqttSSL?: boolean;\n clientId?: string;\n hosts?: string[];\n servers?: IMqttServerConfig[];\n port?: number;\n protocol?: MqttProtocol;\n keepalive?: number;\n clean?: boolean;\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\nexport interface UnsEvents {\n // Emitters in MqttProxy, UnsMqttProxy\n input: { topic: string; message: string, packet: any };\n mqttProxyStatus: { event: string, value: number, uom: MeasurementUnit, statusTopic: string };\n \n // Emitters in MqttProxy\n error: { code: number; message: string };\n \n // Emitters in UnsMqttProxy\n mqttWorker: { command: string, instanceName: string; batchSize: number, referenceHash: string };\n\n // Emitter in UnsCronProxy\n cronEvent: { event?: string; cronExpression?: string };\n\n // Emitters in UnsApiProxy\n apiGetEvent: {req: any, res: any};\n\n // Emitters in UnsProxy\n unsProxyProducedTopics: { producedTopics: ITopicObject[], statusTopic: string };\n\n // Emitters in UnsProxy\n unsProxyProducedApiEndpoints: { producedApiEndpoints: IApiObject[], statusTopic: string };\n\n // Emitters in UnsProxy\n unsProxyProducedApiCatchAll: { producedCatchall: IApiCatchallMapping[], statusTopic: string };\n}\n\nexport interface IUnsExtendedData extends IUnsData {\n valueType: ValueTypeString;\n}\n\nexport interface IUnsData {\n time: ISO8601;\n value: ValueType;\n dataGroup?: string;\n uom?: MeasurementUnit;\n foreignEventKey?: string;\n intervalStart?: ISO8601;\n intervalEnd?: ISO8601;\n eventId?: string;\n deleted?: boolean;\n deletedAt?: ISO8601;\n lastSeen?: ISO8601;\n}\n\nexport interface IUnsTableColumn {\n name: string;\n type: QuestDbType;\n value: string | number | null;\n uom?: MeasurementUnit;\n}\n\nexport interface IUnsTable {\n time: ISO8601;\n dataGroup?: string;\n columns: IUnsTableColumn[];\n intervalStart?: ISO8601;\n intervalEnd?: ISO8601;\n eventId?: string;\n deleted?: boolean;\n deletedAt?: ISO8601;\n lastSeen?: ISO8601;\n}\n\nexport interface IMqttAttributeMessage {\n attribute: UnsAttribute;\n description?: string;\n tags?: UnsTags[];\n attributeNeedsPersistence?: boolean | null;\n}\n\ntype AttributePayload =\n | { message: IUnsMessage; data?: never; table?: never; createdAt?: never; expiresAt?: never }\n | { message?: never; data: IUnsData; table?: never; createdAt?: ISO8601; expiresAt?: ISO8601 }\n | { message?: never; data?: never; table: IUnsTable; createdAt?: ISO8601; expiresAt?: ISO8601 };\n\nexport type IMqttAttributeEntry = IMqttAttributeMessage & AttributePayload;\n\nexport interface IMqttPublishRequest {\n topic: UnsTopics;\n asset: UnsAsset;\n assetDescription?: string;\n objectType: UnsObjectType;\n objectTypeDescription?: string;\n objectId: UnsObjectId;\n attributes: IMqttAttributeEntry | IMqttAttributeEntry[];\n}\n\n// This interface represents a packet for a UNS system\nexport interface IUnsPacket {\n // The message object of the packet\n message: IUnsExtendedMessage;\n \n // The HMAC signature of the message\n messageSignature?: string;\n\n // Automatically calculated interval between two packets in ms\n interval?: number;\n\n // Current library version\n readonly version: string;\n\n // Autogenerated sequence number\n sequenceId?: number;\n}\n\nexport interface IUnsPackatParameters {\n\n}\n\nexport interface IUnsMessage {\n data?: IUnsData;\n table?: IUnsTable;\n expiresAt?: ISO8601;\n createdAt?: ISO8601;\n}\n\nexport interface IUnsExtendedMessage extends IUnsMessage {\n data?: IUnsExtendedData;\n}\n\nexport interface ITopicObject {\n timestamp: string;\n attribute:string;\n attributeType: UnsAttributeType;\n topic:string;\n description:string;\n dataGroup:string;\n tags:string[] | null;\n attributeNeedsPersistence: boolean | null;\n asset: UnsAsset;\n assetDescription?: string;\n objectType: UnsObjectType;\n objectTypeDescription?: string;\n objectId: UnsObjectId;\n}\n\n// API Interfaces below\nexport interface IApiObject {\n timestamp: string;\n attribute:string;\n topic:string;\n attributeType: UnsAttributeType;\n apiDescription?: string; // Optional description for the API endpoint\n apiHost: string; // Hostname of the service\n apiEndpoint: string; // API endpoint for virtual topics\n apiSwaggerEndpoint: string; // Swagger endpoint for API documentation\n apiMethod: \"GET\" | \"POST\" | \"PUT\" | \"DELETE\"; // HTTP method for API endpoint\n apiQueryParams: QueryParamDef[]; // query parameters for the API endpoint\n asset: UnsAsset;\n objectType: UnsObjectType;\n objectId: UnsObjectId;\n}\n\nexport interface IApiCatchallMapping {\n topic: string;\n apiBase: string;\n apiBasePath: string;\n swaggerPath: string;\n}\n\nexport interface QueryParamDef {\n name: string;\n type: \"string\" | \"number\" | \"boolean\";\n required?: boolean;\n description?: string;\n}\n\nexport interface IApiProxyOptions {\n jwtSecret?: string;\n jwks?: {\n wellKnownJwksUrl: string;\n activeKidUrl?: string;\n cacheTtlMs?: number;\n algorithms?: (\"RS256\" | \"RS384\" | \"RS512\")[];\n };\n}\n\nexport interface IGetEndpointOptions {\n apiDescription?: string;\n tags?: string[];\n queryParams?: QueryParamDef[];\n}\n"]}
1
+ {"version":3,"file":"uns-interfaces.js","sourceRoot":"","sources":["../../src/uns/uns-interfaces.ts"],"names":[],"mappings":"AAUA,MAAM,UAAU,aAAa,CAAC,KAAa;IACzC,MAAM,YAAY,GAAG,+CAA+C,CAAC;IACrE,OAAO,YAAY,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;AAClC,CAAC;AAID,MAAM,CAAC,MAAM,UAAU,GAAG,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC","sourcesContent":["import { UnsAttributeType } from \"../graphql/schema.js\";\r\nimport { MeasurementUnit } from \"./uns-measurements.js\";\r\nimport { UnsTags } from \"./uns-tags.js\";\r\nimport type { UnsObjectId, UnsObjectType } from \"./uns-object.js\";\r\nimport type { UnsAsset } from \"./uns-asset.js\";\r\nimport type { IMqttConnectProperties, IMqttServerConfig, MqttProtocol } from \"../uns-mqtt/mqtt-interfaces.js\";\r\nimport { UnsTopics } from \"./uns-topics.js\";\r\nimport { knownUnsAttributes, type KnownUnsAttributeName } from \"./uns-attributes.js\";\r\n\r\nexport type ISO8601 = `${number}-${string}-${string}T${string}:${string}:${string}.${string}Z`;\r\nexport function isIOS8601Type(value: string): value is ISO8601 {\r\n const iso8601Regex = /^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}\\.\\d{3}Z$/;\r\n return iso8601Regex.test(value);\r\n}\r\n// Known attribute names (with IntelliSense) while still allowing arbitrary strings.\r\nexport type UnsAttribute = KnownUnsAttributeName | (string & {});\r\n\r\nexport const valueTypes = [\"string\", \"number\"];\r\nexport type ValueTypeString = typeof valueTypes[number];\r\nexport type ValueType = string | number;\r\n\r\n// Supported QuestDB column types for UNS tables.\r\nexport type QuestDbType =\r\n | \"boolean\"\r\n | \"ipv4\"\r\n | \"byte\"\r\n | \"short\"\r\n | \"char\"\r\n | \"int\"\r\n | \"float\"\r\n | \"symbol\"\r\n | \"varchar\"\r\n | \"string\"\r\n | \"long\"\r\n | \"date\"\r\n | \"timestamp\"\r\n | \"timestamp_ns\"\r\n | \"double\"\r\n | \"uuid\"\r\n | \"binary\"\r\n | \"long256\"\r\n | `geohash(${number}${\"b\" | \"c\"})`\r\n | `decimal(${number},${number})`\r\n | `array<${string}>`;\r\n\r\nexport interface IUnsParameters {\r\n mqttSubToTopics?: string | string[];\r\n username?: string;\r\n password?: string;\r\n mqttSSL?: boolean;\r\n publishThrottlingDelay?: number; // Delay in milliseconds; default is 1ms\r\n subscribeThrottlingDelay?: number; // Delay in milliseconds; default is 1ms\r\n rejectUnauthorized?: boolean;\r\n clientId?: string;\r\n hosts?: string[];\r\n servers?: IMqttServerConfig[];\r\n port?: number;\r\n protocol?: MqttProtocol;\r\n keepalive?: number;\r\n clean?: boolean;\r\n connectTimeout?: number;\r\n reconnectPeriod?: number;\r\n reconnectOnConnackError?: boolean;\r\n resubscribe?: boolean;\r\n queueQoSZero?: 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\nexport interface IUnsProcessParameters {\r\n processName: string;\r\n mqttSubToTopics?: string | string[];\r\n username?: string;\r\n password?: string;\r\n mqttSSL?: boolean;\r\n clientId?: string;\r\n hosts?: string[];\r\n servers?: IMqttServerConfig[];\r\n port?: number;\r\n protocol?: MqttProtocol;\r\n keepalive?: number;\r\n clean?: boolean;\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\nexport interface UnsEvents {\r\n // Emitters in MqttProxy, UnsMqttProxy\r\n input: { topic: string; message: string, packet: any };\r\n mqttProxyStatus: { event: string, value: number, uom: MeasurementUnit, statusTopic: string };\r\n \r\n // Emitters in MqttProxy\r\n error: { code: number; message: string };\r\n \r\n // Emitters in UnsMqttProxy\r\n mqttWorker: { command: string, instanceName: string; batchSize: number, referenceHash: string };\r\n\r\n // Emitter in UnsCronProxy\r\n cronEvent: { event?: string; cronExpression?: string };\r\n\r\n // Emitters in UnsApiProxy\r\n apiGetEvent: {req: any, res: any};\r\n\r\n // Emitters in UnsProxy\r\n unsProxyProducedTopics: { producedTopics: ITopicObject[], statusTopic: string };\r\n\r\n // Emitters in UnsProxy\r\n unsProxyProducedApiEndpoints: { producedApiEndpoints: IApiObject[], statusTopic: string };\r\n\r\n // Emitters in UnsProxy\r\n unsProxyProducedApiCatchAll: { producedCatchall: IApiCatchallMapping[], statusTopic: string };\r\n}\r\n\r\nexport interface IUnsExtendedData extends IUnsData {\r\n valueType: ValueTypeString;\r\n}\r\n\r\nexport interface IUnsData {\r\n time: ISO8601;\r\n value: ValueType;\r\n dataGroup?: string;\r\n uom?: MeasurementUnit;\r\n foreignEventKey?: string;\r\n intervalStart?: ISO8601;\r\n intervalEnd?: ISO8601;\r\n eventId?: string;\r\n deleted?: boolean;\r\n deletedAt?: ISO8601;\r\n lastSeen?: ISO8601;\r\n}\r\n\r\nexport interface IUnsTableColumn {\r\n name: string;\r\n type: QuestDbType;\r\n value: string | number | null;\r\n uom?: MeasurementUnit;\r\n}\r\n\r\nexport interface IUnsTable {\r\n time: ISO8601;\r\n dataGroup?: string;\r\n columns: IUnsTableColumn[];\r\n intervalStart?: ISO8601;\r\n intervalEnd?: ISO8601;\r\n eventId?: string;\r\n deleted?: boolean;\r\n deletedAt?: ISO8601;\r\n lastSeen?: ISO8601;\r\n}\r\n\r\nexport interface IMqttAttributeMessage {\r\n attribute: UnsAttribute;\r\n description?: string;\r\n tags?: UnsTags[];\r\n attributeNeedsPersistence?: boolean | null;\r\n}\r\n\r\ntype AttributePayload =\r\n | { message: IUnsMessage; data?: never; table?: never; createdAt?: never; expiresAt?: never }\r\n | { message?: never; data: IUnsData; table?: never; createdAt?: ISO8601; expiresAt?: ISO8601 }\r\n | { message?: never; data?: never; table: IUnsTable; createdAt?: ISO8601; expiresAt?: ISO8601 };\r\n\r\nexport type IMqttAttributeEntry = IMqttAttributeMessage & AttributePayload;\r\n\r\nexport interface IMqttPublishRequest {\r\n topic: UnsTopics;\r\n asset: UnsAsset;\r\n assetDescription?: string;\r\n objectType: UnsObjectType;\r\n objectTypeDescription?: string;\r\n objectId: UnsObjectId;\r\n attributes: IMqttAttributeEntry | IMqttAttributeEntry[];\r\n}\r\n\r\n// This interface represents a packet for a UNS system\r\nexport interface IUnsPacket {\r\n // The message object of the packet\r\n message: IUnsExtendedMessage;\r\n \r\n // The HMAC signature of the message\r\n messageSignature?: string;\r\n\r\n // Automatically calculated interval between two packets in ms\r\n interval?: number;\r\n\r\n // Current library version\r\n readonly version: string;\r\n\r\n // Autogenerated sequence number\r\n sequenceId?: number;\r\n}\r\n\r\nexport interface IUnsPackatParameters {\r\n\r\n}\r\n\r\nexport interface IUnsMessage {\r\n data?: IUnsData;\r\n table?: IUnsTable;\r\n expiresAt?: ISO8601;\r\n createdAt?: ISO8601;\r\n}\r\n\r\nexport interface IUnsExtendedMessage extends IUnsMessage {\r\n data?: IUnsExtendedData;\r\n}\r\n\r\nexport interface ITopicObject {\r\n timestamp: string;\r\n attribute:string;\r\n attributeType: UnsAttributeType;\r\n topic:string;\r\n description:string;\r\n dataGroup:string;\r\n tags:string[] | null;\r\n attributeNeedsPersistence: boolean | null;\r\n asset: UnsAsset;\r\n assetDescription?: string;\r\n objectType: UnsObjectType;\r\n objectTypeDescription?: string;\r\n objectId: UnsObjectId;\r\n}\r\n\r\n// API Interfaces below\r\nexport interface IApiObject {\r\n timestamp: string;\r\n attribute:string;\r\n topic:string;\r\n attributeType: UnsAttributeType;\r\n apiDescription?: string; // Optional description for the API endpoint\r\n apiHost: string; // Hostname of the service\r\n apiEndpoint: string; // API endpoint for virtual topics\r\n apiSwaggerEndpoint: string; // Swagger endpoint for API documentation\r\n apiMethod: \"GET\" | \"POST\" | \"PUT\" | \"DELETE\"; // HTTP method for API endpoint\r\n apiQueryParams: QueryParamDef[]; // query parameters for the API endpoint\r\n asset: UnsAsset;\r\n objectType: UnsObjectType;\r\n objectId: UnsObjectId;\r\n}\r\n\r\nexport interface IApiCatchallMapping {\r\n topic: string;\r\n apiBase: string;\r\n apiBasePath: string;\r\n swaggerPath: string;\r\n}\r\n\r\nexport interface QueryParamDef {\r\n name: string;\r\n type: \"string\" | \"number\" | \"boolean\";\r\n required?: boolean;\r\n description?: string;\r\n}\r\n\r\nexport interface IApiProxyOptions {\r\n jwtSecret?: string;\r\n jwks?: {\r\n wellKnownJwksUrl: string;\r\n activeKidUrl?: string;\r\n cacheTtlMs?: number;\r\n algorithms?: (\"RS256\" | \"RS384\" | \"RS512\")[];\r\n };\r\n}\r\n\r\nexport interface IGetEndpointOptions {\r\n apiDescription?: string;\r\n tags?: string[];\r\n queryParams?: QueryParamDef[];\r\n}\r\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"uns-measurements.generated.js","sourceRoot":"","sources":["../../src/uns/uns-measurements.generated.ts"],"names":[],"mappings":"AAAA,iFAAiF;AACjF,MAAM,CAAC,MAAM,6BAA6B,GAAG;IAC3C,MAAM,EAAE,EAAE;IACV,WAAW,EAAE,IAAI;IACjB,OAAO,EAAE,GAAG;IACZ,WAAW,EAAE,IAAI;IACjB,MAAM,EAAE,IAAI;IACZ,QAAQ,EAAE,GAAG;IACb,QAAQ,EAAE,KAAK;IACf,MAAM,EAAE,GAAG;IACX,KAAK,EAAE,KAAK;IACZ,OAAO,EAAE,IAAI;IACb,YAAY,EAAE,KAAK;IACnB,OAAO,EAAE,GAAG;IACZ,QAAQ,EAAE,KAAK;IACf,KAAK,EAAE,KAAK;IACZ,QAAQ,EAAE,IAAI;IACd,KAAK,EAAE,KAAK;IACZ,SAAS,EAAE,IAAI;IACf,YAAY,EAAE,IAAI;IAClB,QAAQ,EAAE,GAAG;IACb,WAAW,EAAE,IAAI;IACjB,OAAO,EAAE,GAAG;IACZ,WAAW,EAAE,IAAI;IACjB,WAAW,EAAE,IAAI;IACjB,WAAW,EAAE,IAAI;IACjB,WAAW,EAAE,IAAI;IACjB,QAAQ,EAAE,GAAG;IACb,KAAK,EAAE,KAAK;IACZ,MAAM,EAAE,MAAM;IACd,GAAG,EAAE,GAAG;IACR,oBAAoB,EAAE,MAAM;IAC5B,gBAAgB,EAAE,KAAK;IACvB,gBAAgB,EAAE,OAAO;IACzB,qBAAqB,EAAE,MAAM;IAC7B,cAAc,EAAE,KAAK;IACrB,kBAAkB,EAAE,MAAM;IAC1B,sBAAsB,EAAE,KAAK;IAC7B,SAAS,EAAE,SAAS;IACpB,iBAAiB,EAAE,KAAK;IACxB,iBAAiB,EAAE,KAAK;IACxB,kBAAkB,EAAE,KAAK;IACzB,SAAS,EAAE,IAAI;IACf,QAAQ,EAAE,GAAG;IACb,QAAQ,EAAE,KAAK;IACf,UAAU,EAAE,IAAI;IAChB,MAAM,EAAE,GAAG;IACX,UAAU,EAAE,IAAI;IAChB,WAAW,EAAE,GAAG;IAChB,UAAU,EAAE,IAAI;IAChB,MAAM,EAAE,GAAG;IACX,UAAU,EAAE,IAAI;IAChB,UAAU,EAAE,IAAI;IAChB,YAAY,EAAE,IAAI;IAClB,QAAQ,EAAE,GAAG;IACb,YAAY,EAAE,IAAI;IAClB,YAAY,EAAE,IAAI;IAClB,UAAU,EAAE,IAAI;IAChB,MAAM,EAAE,GAAG;IACX,UAAU,EAAE,IAAI;IAChB,UAAU,EAAE,IAAI;IAChB,cAAc,EAAE,KAAK;IACrB,UAAU,EAAE,IAAI;IAChB,cAAc,EAAE,KAAK;IACrB,cAAc,EAAE,KAAK;IACrB,gBAAgB,EAAE,KAAK;IACvB,YAAY,EAAE,IAAI;IAClB,gBAAgB,EAAE,KAAK;IACvB,gBAAgB,EAAE,KAAK;IACvB,wBAAwB,EAAE,MAAM;IAChC,oBAAoB,EAAE,KAAK;IAC3B,wBAAwB,EAAE,MAAM;IAChC,wBAAwB,EAAE,MAAM;IAChC,mBAAmB,EAAE,OAAO;IAC5B,qBAAqB,EAAE,OAAO;IAC9B,iBAAiB,EAAE,MAAM;IACzB,kBAAkB,EAAE,KAAK;CACjB,CAAC;AAEX,MAAM,CAAC,MAAM,6BAA6B,GAAG;IAC3C,KAAK,EAAE,KAAK;IACZ,MAAM,EAAE,GAAG;IACX,UAAU,EAAE,IAAI;IAChB,UAAU,EAAE,IAAI;IAChB,UAAU,EAAE,IAAI;IAChB,UAAU,EAAE,IAAI;IAChB,UAAU,EAAE,IAAI;IAChB,SAAS,EAAE,IAAI;IACf,WAAW,EAAE,IAAI;IACjB,WAAW,EAAE,IAAI;CACT,CAAC;AAEX,MAAM,CAAC,MAAM,4BAA4B,GAAG;IAC1C,MAAM,EAAE,GAAG;IACX,MAAM,EAAE,GAAG;IACX,MAAM,EAAE,GAAG;CACH,CAAC","sourcesContent":["/* Auto-generated placeholder. Run generate-uns-measurements.ts to regenerate. */\nexport const GeneratedPhysicalMeasurements = {\n \"None\": \"\",\n \"MiliMeter\": \"mm\",\n \"Meter\": \"m\",\n \"KiloMeter\": \"km\",\n \"Feet\": \"ft\",\n \"Second\": \"s\",\n \"Minute\": \"min\",\n \"Hour\": \"h\",\n \"Day\": \"day\",\n \"Hertz\": \"Hz\",\n \"CubicMeter\": \"m^3\",\n \"Liter\": \"l\",\n \"Gallon\": \"gal\",\n \"Psi\": \"psi\",\n \"Pascal\": \"Pa\",\n \"Bar\": \"bar\",\n \"Celsius\": \"°C\",\n \"Fahrenheit\": \"°F\",\n \"Kelvin\": \"K\",\n \"Milijoule\": \"mJ\",\n \"Joule\": \"J\",\n \"Kilojoule\": \"kJ\",\n \"Megajoule\": \"MJ\",\n \"Gigajoule\": \"GJ\",\n \"Terajoule\": \"TJ\",\n \"Newton\": \"N\",\n \"Bit\": \"bit\",\n \"Byte\": \"byte\",\n \"B\": \"B\",\n \"MilimeterPerSecond\": \"mm/s\",\n \"MeterPerSecond\": \"m/s\",\n \"MeterPerMinute\": \"m/min\",\n \"CentiMeterPerSecond\": \"cm/s\",\n \"MeterPerHour\": \"m/h\",\n \"KilometerPerHour\": \"km/h\",\n \"RevolutionsPerMinute\": \"rpm\",\n \"Percent\": \"percent\",\n \"PartsPerMillion\": \"ppm\",\n \"PartsPerBillion\": \"ppb\",\n \"PartsPerTrillion\": \"ppt\",\n \"Decibel\": \"dB\",\n \"Degree\": \"°\",\n \"Radian\": \"rad\",\n \"Miligram\": \"mg\",\n \"Gram\": \"g\",\n \"Kilogram\": \"kg\",\n \"MetricTon\": \"t\",\n \"MiliVolt\": \"mV\",\n \"Volt\": \"V\",\n \"KiloVolt\": \"kV\",\n \"MegaVolt\": \"MV\",\n \"MiliAmpere\": \"mA\",\n \"Ampere\": \"A\",\n \"KiloAmpere\": \"kA\",\n \"MegaAmpere\": \"MA\",\n \"MiliWatt\": \"mW\",\n \"Watt\": \"W\",\n \"KiloWatt\": \"kW\",\n \"MegaWatt\": \"MW\",\n \"MiliWattHour\": \"mWh\",\n \"WattHour\": \"Wh\",\n \"KiloWattHour\": \"kWh\",\n \"MegaWattHour\": \"MWh\",\n \"MiliVoltAmpere\": \"mVA\",\n \"VoltAmpere\": \"VA\",\n \"KiloVoltAmpere\": \"kVA\",\n \"MegaVoltAmpere\": \"MVA\",\n \"MiliVoltAmpereReactive\": \"mVAR\",\n \"VoltAmpereReactive\": \"VAR\",\n \"KiloVoltAmpereReactive\": \"kVAR\",\n \"MegaVoltAmpereReactive\": \"MVAR\",\n \"CubicMeterPerHour\": \"m^3/h\",\n \"CubicMeterPerSecond\": \"m^3/s\",\n \"MegaGramPerHour\": \"Mg/h\",\n \"MetricTonPerHour\": \"t/h\",\n} as const;\n\nexport const GeneratedDataSizeMeasurements = {\n \"Bit\": \"bit\",\n \"Byte\": \"B\",\n \"KiloByte\": \"kB\",\n \"MegaByte\": \"MB\",\n \"GigaByte\": \"GB\",\n \"TeraByte\": \"TB\",\n \"PetaByte\": \"PB\",\n \"ExaByte\": \"EB\",\n \"ZettaByte\": \"ZB\",\n \"YottaByte\": \"YB\",\n} as const;\n\nexport const GeneratedCounterMeasurements = {\n \"Kilo\": \"k\",\n \"Mega\": \"M\",\n \"Giga\": \"G\",\n} as const;\n\nexport type GeneratedPhysicalMeasurement = typeof GeneratedPhysicalMeasurements[keyof typeof GeneratedPhysicalMeasurements];\nexport type GeneratedDataSizeMeasurement = typeof GeneratedDataSizeMeasurements[keyof typeof GeneratedDataSizeMeasurements];\nexport type GeneratedCounterMeasurement = typeof GeneratedCounterMeasurements[keyof typeof GeneratedCounterMeasurements];\nexport type GeneratedMeasurementUnit = GeneratedPhysicalMeasurement | GeneratedDataSizeMeasurement | GeneratedCounterMeasurement | (string & {});\n"]}
1
+ {"version":3,"file":"uns-measurements.generated.js","sourceRoot":"","sources":["../../src/uns/uns-measurements.generated.ts"],"names":[],"mappings":"AAAA,iFAAiF;AACjF,MAAM,CAAC,MAAM,6BAA6B,GAAG;IAC3C,MAAM,EAAE,EAAE;IACV,WAAW,EAAE,IAAI;IACjB,OAAO,EAAE,GAAG;IACZ,WAAW,EAAE,IAAI;IACjB,MAAM,EAAE,IAAI;IACZ,QAAQ,EAAE,GAAG;IACb,QAAQ,EAAE,KAAK;IACf,MAAM,EAAE,GAAG;IACX,KAAK,EAAE,KAAK;IACZ,OAAO,EAAE,IAAI;IACb,YAAY,EAAE,KAAK;IACnB,OAAO,EAAE,GAAG;IACZ,QAAQ,EAAE,KAAK;IACf,KAAK,EAAE,KAAK;IACZ,QAAQ,EAAE,IAAI;IACd,KAAK,EAAE,KAAK;IACZ,SAAS,EAAE,IAAI;IACf,YAAY,EAAE,IAAI;IAClB,QAAQ,EAAE,GAAG;IACb,WAAW,EAAE,IAAI;IACjB,OAAO,EAAE,GAAG;IACZ,WAAW,EAAE,IAAI;IACjB,WAAW,EAAE,IAAI;IACjB,WAAW,EAAE,IAAI;IACjB,WAAW,EAAE,IAAI;IACjB,QAAQ,EAAE,GAAG;IACb,KAAK,EAAE,KAAK;IACZ,MAAM,EAAE,MAAM;IACd,GAAG,EAAE,GAAG;IACR,oBAAoB,EAAE,MAAM;IAC5B,gBAAgB,EAAE,KAAK;IACvB,gBAAgB,EAAE,OAAO;IACzB,qBAAqB,EAAE,MAAM;IAC7B,cAAc,EAAE,KAAK;IACrB,kBAAkB,EAAE,MAAM;IAC1B,sBAAsB,EAAE,KAAK;IAC7B,SAAS,EAAE,SAAS;IACpB,iBAAiB,EAAE,KAAK;IACxB,iBAAiB,EAAE,KAAK;IACxB,kBAAkB,EAAE,KAAK;IACzB,SAAS,EAAE,IAAI;IACf,QAAQ,EAAE,GAAG;IACb,QAAQ,EAAE,KAAK;IACf,UAAU,EAAE,IAAI;IAChB,MAAM,EAAE,GAAG;IACX,UAAU,EAAE,IAAI;IAChB,WAAW,EAAE,GAAG;IAChB,UAAU,EAAE,IAAI;IAChB,MAAM,EAAE,GAAG;IACX,UAAU,EAAE,IAAI;IAChB,UAAU,EAAE,IAAI;IAChB,YAAY,EAAE,IAAI;IAClB,QAAQ,EAAE,GAAG;IACb,YAAY,EAAE,IAAI;IAClB,YAAY,EAAE,IAAI;IAClB,UAAU,EAAE,IAAI;IAChB,MAAM,EAAE,GAAG;IACX,UAAU,EAAE,IAAI;IAChB,UAAU,EAAE,IAAI;IAChB,cAAc,EAAE,KAAK;IACrB,UAAU,EAAE,IAAI;IAChB,cAAc,EAAE,KAAK;IACrB,cAAc,EAAE,KAAK;IACrB,gBAAgB,EAAE,KAAK;IACvB,YAAY,EAAE,IAAI;IAClB,gBAAgB,EAAE,KAAK;IACvB,gBAAgB,EAAE,KAAK;IACvB,wBAAwB,EAAE,MAAM;IAChC,oBAAoB,EAAE,KAAK;IAC3B,wBAAwB,EAAE,MAAM;IAChC,wBAAwB,EAAE,MAAM;IAChC,mBAAmB,EAAE,OAAO;IAC5B,qBAAqB,EAAE,OAAO;IAC9B,iBAAiB,EAAE,MAAM;IACzB,kBAAkB,EAAE,KAAK;CACjB,CAAC;AAEX,MAAM,CAAC,MAAM,6BAA6B,GAAG;IAC3C,KAAK,EAAE,KAAK;IACZ,MAAM,EAAE,GAAG;IACX,UAAU,EAAE,IAAI;IAChB,UAAU,EAAE,IAAI;IAChB,UAAU,EAAE,IAAI;IAChB,UAAU,EAAE,IAAI;IAChB,UAAU,EAAE,IAAI;IAChB,SAAS,EAAE,IAAI;IACf,WAAW,EAAE,IAAI;IACjB,WAAW,EAAE,IAAI;CACT,CAAC;AAEX,MAAM,CAAC,MAAM,4BAA4B,GAAG;IAC1C,MAAM,EAAE,GAAG;IACX,MAAM,EAAE,GAAG;IACX,MAAM,EAAE,GAAG;CACH,CAAC","sourcesContent":["/* Auto-generated placeholder. Run generate-uns-measurements.ts to regenerate. */\r\nexport const GeneratedPhysicalMeasurements = {\r\n \"None\": \"\",\r\n \"MiliMeter\": \"mm\",\r\n \"Meter\": \"m\",\r\n \"KiloMeter\": \"km\",\r\n \"Feet\": \"ft\",\r\n \"Second\": \"s\",\r\n \"Minute\": \"min\",\r\n \"Hour\": \"h\",\r\n \"Day\": \"day\",\r\n \"Hertz\": \"Hz\",\r\n \"CubicMeter\": \"m^3\",\r\n \"Liter\": \"l\",\r\n \"Gallon\": \"gal\",\r\n \"Psi\": \"psi\",\r\n \"Pascal\": \"Pa\",\r\n \"Bar\": \"bar\",\r\n \"Celsius\": \"°C\",\r\n \"Fahrenheit\": \"°F\",\r\n \"Kelvin\": \"K\",\r\n \"Milijoule\": \"mJ\",\r\n \"Joule\": \"J\",\r\n \"Kilojoule\": \"kJ\",\r\n \"Megajoule\": \"MJ\",\r\n \"Gigajoule\": \"GJ\",\r\n \"Terajoule\": \"TJ\",\r\n \"Newton\": \"N\",\r\n \"Bit\": \"bit\",\r\n \"Byte\": \"byte\",\r\n \"B\": \"B\",\r\n \"MilimeterPerSecond\": \"mm/s\",\r\n \"MeterPerSecond\": \"m/s\",\r\n \"MeterPerMinute\": \"m/min\",\r\n \"CentiMeterPerSecond\": \"cm/s\",\r\n \"MeterPerHour\": \"m/h\",\r\n \"KilometerPerHour\": \"km/h\",\r\n \"RevolutionsPerMinute\": \"rpm\",\r\n \"Percent\": \"percent\",\r\n \"PartsPerMillion\": \"ppm\",\r\n \"PartsPerBillion\": \"ppb\",\r\n \"PartsPerTrillion\": \"ppt\",\r\n \"Decibel\": \"dB\",\r\n \"Degree\": \"°\",\r\n \"Radian\": \"rad\",\r\n \"Miligram\": \"mg\",\r\n \"Gram\": \"g\",\r\n \"Kilogram\": \"kg\",\r\n \"MetricTon\": \"t\",\r\n \"MiliVolt\": \"mV\",\r\n \"Volt\": \"V\",\r\n \"KiloVolt\": \"kV\",\r\n \"MegaVolt\": \"MV\",\r\n \"MiliAmpere\": \"mA\",\r\n \"Ampere\": \"A\",\r\n \"KiloAmpere\": \"kA\",\r\n \"MegaAmpere\": \"MA\",\r\n \"MiliWatt\": \"mW\",\r\n \"Watt\": \"W\",\r\n \"KiloWatt\": \"kW\",\r\n \"MegaWatt\": \"MW\",\r\n \"MiliWattHour\": \"mWh\",\r\n \"WattHour\": \"Wh\",\r\n \"KiloWattHour\": \"kWh\",\r\n \"MegaWattHour\": \"MWh\",\r\n \"MiliVoltAmpere\": \"mVA\",\r\n \"VoltAmpere\": \"VA\",\r\n \"KiloVoltAmpere\": \"kVA\",\r\n \"MegaVoltAmpere\": \"MVA\",\r\n \"MiliVoltAmpereReactive\": \"mVAR\",\r\n \"VoltAmpereReactive\": \"VAR\",\r\n \"KiloVoltAmpereReactive\": \"kVAR\",\r\n \"MegaVoltAmpereReactive\": \"MVAR\",\r\n \"CubicMeterPerHour\": \"m^3/h\",\r\n \"CubicMeterPerSecond\": \"m^3/s\",\r\n \"MegaGramPerHour\": \"Mg/h\",\r\n \"MetricTonPerHour\": \"t/h\",\r\n} as const;\r\n\r\nexport const GeneratedDataSizeMeasurements = {\r\n \"Bit\": \"bit\",\r\n \"Byte\": \"B\",\r\n \"KiloByte\": \"kB\",\r\n \"MegaByte\": \"MB\",\r\n \"GigaByte\": \"GB\",\r\n \"TeraByte\": \"TB\",\r\n \"PetaByte\": \"PB\",\r\n \"ExaByte\": \"EB\",\r\n \"ZettaByte\": \"ZB\",\r\n \"YottaByte\": \"YB\",\r\n} as const;\r\n\r\nexport const GeneratedCounterMeasurements = {\r\n \"Kilo\": \"k\",\r\n \"Mega\": \"M\",\r\n \"Giga\": \"G\",\r\n} as const;\r\n\r\nexport type GeneratedPhysicalMeasurement = typeof GeneratedPhysicalMeasurements[keyof typeof GeneratedPhysicalMeasurements];\r\nexport type GeneratedDataSizeMeasurement = typeof GeneratedDataSizeMeasurements[keyof typeof GeneratedDataSizeMeasurements];\r\nexport type GeneratedCounterMeasurement = typeof GeneratedCounterMeasurements[keyof typeof GeneratedCounterMeasurements];\r\nexport type GeneratedMeasurementUnit = GeneratedPhysicalMeasurement | GeneratedDataSizeMeasurement | GeneratedCounterMeasurement | (string & {});\r\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"uns-measurements.js","sourceRoot":"","sources":["../../src/uns/uns-measurements.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,4BAA4B,EAE5B,6BAA6B,EAG7B,6BAA6B,GAC9B,MAAM,iCAAiC,CAAC;AAEzC,MAAM,CAAC,MAAM,oBAAoB,GAAG,6BAA6B,CAAC;AAGlE,MAAM,CAAC,MAAM,oBAAoB,GAAG,6BAA6B,CAAC;AAGlE,MAAM,CAAC,MAAM,mBAAmB,GAAG,4BAA4B,CAAC","sourcesContent":["import {\n GeneratedCounterMeasurement,\n GeneratedCounterMeasurements,\n GeneratedDataSizeMeasurement,\n GeneratedDataSizeMeasurements,\n GeneratedMeasurementUnit,\n GeneratedPhysicalMeasurement,\n GeneratedPhysicalMeasurements,\n} from \"./uns-measurements.generated.js\";\n\nexport const PhysicalMeasurements = GeneratedPhysicalMeasurements;\nexport type PhysicalMeasurements = GeneratedPhysicalMeasurement;\n\nexport const DataSizeMeasurements = GeneratedDataSizeMeasurements;\nexport type DataSizeMeasurements = GeneratedDataSizeMeasurement;\n\nexport const CounterMeasurements = GeneratedCounterMeasurements;\nexport type CounterMeasurements = GeneratedCounterMeasurement;\n\nexport type MeasurementUnit = GeneratedMeasurementUnit;\n"]}
1
+ {"version":3,"file":"uns-measurements.js","sourceRoot":"","sources":["../../src/uns/uns-measurements.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,4BAA4B,EAE5B,6BAA6B,EAG7B,6BAA6B,GAC9B,MAAM,iCAAiC,CAAC;AAEzC,MAAM,CAAC,MAAM,oBAAoB,GAAG,6BAA6B,CAAC;AAGlE,MAAM,CAAC,MAAM,oBAAoB,GAAG,6BAA6B,CAAC;AAGlE,MAAM,CAAC,MAAM,mBAAmB,GAAG,4BAA4B,CAAC","sourcesContent":["import {\r\n GeneratedCounterMeasurement,\r\n GeneratedCounterMeasurements,\r\n GeneratedDataSizeMeasurement,\r\n GeneratedDataSizeMeasurements,\r\n GeneratedMeasurementUnit,\r\n GeneratedPhysicalMeasurement,\r\n GeneratedPhysicalMeasurements,\r\n} from \"./uns-measurements.generated.js\";\r\n\r\nexport const PhysicalMeasurements = GeneratedPhysicalMeasurements;\r\nexport type PhysicalMeasurements = GeneratedPhysicalMeasurement;\r\n\r\nexport const DataSizeMeasurements = GeneratedDataSizeMeasurements;\r\nexport type DataSizeMeasurements = GeneratedDataSizeMeasurement;\r\n\r\nexport const CounterMeasurements = GeneratedCounterMeasurements;\r\nexport type CounterMeasurements = GeneratedCounterMeasurement;\r\n\r\nexport type MeasurementUnit = GeneratedMeasurementUnit;\r\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"uns-object.js","sourceRoot":"","sources":["../../src/uns/uns-object.ts"],"names":[],"mappings":"AAAA,mEAAmE;AACnE,8EAA8E;AAC9E,OAAO,EAAE,oBAAoB,EAAE,+BAA+B,EAAE,MAAM,+BAA+B,CAAC;AACtG,OAAO,EAAE,4BAA4B,EAAE,MAAM,8BAA8B,CAAC;AAE5E,MAAM,CAAC,MAAM,WAAW,GAAG,oBAAoB,CAAC;AAShD,MAAM,UAAU,wBAAwB,CAAC,UAAyB;IAChE,OAAO,CACL,4BAA4B,CAAC,UAAU,CAAC;QACvC,+BAAsE,CAAC,UAAU,CAAC,CACpF,CAAC;AACJ,CAAC","sourcesContent":["// Slimmed: use generated dictionary as the source of object types.\n// Ensure generate-uns-dictionary is run (or provide your own generated file).\nimport { GeneratedObjectTypes, GeneratedObjectTypeDescriptions } from \"./uns-dictionary.generated.js\";\nimport { resolveObjectTypeDescription } from \"./uns-dictionary-registry.js\";\n\nexport const ObjectTypes = GeneratedObjectTypes;\n\nexport type KnownUnsObjectTypeName = keyof typeof GeneratedObjectTypes;\n\nexport type UnsObjectType = \"\" | KnownUnsObjectTypeName | (string & {});\n\n// Default object id is \"main\" when none is provided.\nexport type UnsObjectId = \"main\" | \"\" | (string & {});\n\nexport function getObjectTypeDescription(objectType: UnsObjectType): string | undefined {\n return (\n resolveObjectTypeDescription(objectType) ??\n (GeneratedObjectTypeDescriptions as Record<string, string | undefined>)[objectType]\n );\n}\n"]}
1
+ {"version":3,"file":"uns-object.js","sourceRoot":"","sources":["../../src/uns/uns-object.ts"],"names":[],"mappings":"AAAA,mEAAmE;AACnE,8EAA8E;AAC9E,OAAO,EAAE,oBAAoB,EAAE,+BAA+B,EAAE,MAAM,+BAA+B,CAAC;AACtG,OAAO,EAAE,4BAA4B,EAAE,MAAM,8BAA8B,CAAC;AAE5E,MAAM,CAAC,MAAM,WAAW,GAAG,oBAAoB,CAAC;AAShD,MAAM,UAAU,wBAAwB,CAAC,UAAyB;IAChE,OAAO,CACL,4BAA4B,CAAC,UAAU,CAAC;QACvC,+BAAsE,CAAC,UAAU,CAAC,CACpF,CAAC;AACJ,CAAC","sourcesContent":["// Slimmed: use generated dictionary as the source of object types.\r\n// Ensure generate-uns-dictionary is run (or provide your own generated file).\r\nimport { GeneratedObjectTypes, GeneratedObjectTypeDescriptions } from \"./uns-dictionary.generated.js\";\r\nimport { resolveObjectTypeDescription } from \"./uns-dictionary-registry.js\";\r\n\r\nexport const ObjectTypes = GeneratedObjectTypes;\r\n\r\nexport type KnownUnsObjectTypeName = keyof typeof GeneratedObjectTypes;\r\n\r\nexport type UnsObjectType = \"\" | KnownUnsObjectTypeName | (string & {});\r\n\r\n// Default object id is \"main\" when none is provided.\r\nexport type UnsObjectId = \"main\" | \"\" | (string & {});\r\n\r\nexport function getObjectTypeDescription(objectType: UnsObjectType): string | undefined {\r\n return (\r\n resolveObjectTypeDescription(objectType) ??\r\n (GeneratedObjectTypeDescriptions as Record<string, string | undefined>)[objectType]\r\n );\r\n}\r\n"]}