@uns-kit/core 0.0.1

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 (111) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +44 -0
  3. package/dist/app-config.d.ts +177 -0
  4. package/dist/app-config.js +1 -0
  5. package/dist/base-path.d.ts +1 -0
  6. package/dist/base-path.js +5 -0
  7. package/dist/config/project.config.extension.d.ts +3 -0
  8. package/dist/config/project.config.extension.js +3 -0
  9. package/dist/config-file.d.ts +12 -0
  10. package/dist/config-file.js +44 -0
  11. package/dist/examples/data-example.d.ts +1 -0
  12. package/dist/examples/data-example.js +44 -0
  13. package/dist/examples/load-test-data.d.ts +1 -0
  14. package/dist/examples/load-test-data.js +72 -0
  15. package/dist/examples/table-example.d.ts +4 -0
  16. package/dist/examples/table-example.js +52 -0
  17. package/dist/examples/uns-gateway.d.ts +1 -0
  18. package/dist/examples/uns-gateway.js +5 -0
  19. package/dist/graphql/schema.d.ts +377 -0
  20. package/dist/graphql/schema.js +13 -0
  21. package/dist/index.d.ts +5 -0
  22. package/dist/index.js +4 -0
  23. package/dist/logger.d.ts +2 -0
  24. package/dist/logger.js +18 -0
  25. package/dist/tools/auth/auth-client.d.ts +23 -0
  26. package/dist/tools/auth/auth-client.js +172 -0
  27. package/dist/tools/auth/index.d.ts +1 -0
  28. package/dist/tools/auth/index.js +1 -0
  29. package/dist/tools/auth/secure-store.d.ts +17 -0
  30. package/dist/tools/auth/secure-store.js +110 -0
  31. package/dist/tools/base-path.d.ts +1 -0
  32. package/dist/tools/base-path.js +5 -0
  33. package/dist/tools/generate-config-schema.d.ts +1 -0
  34. package/dist/tools/generate-config-schema.js +23 -0
  35. package/dist/tools/initialize.d.ts +1 -0
  36. package/dist/tools/initialize.js +103 -0
  37. package/dist/tools/make.d.ts +1 -0
  38. package/dist/tools/make.js +27 -0
  39. package/dist/tools/pull-request.d.ts +1 -0
  40. package/dist/tools/pull-request.js +157 -0
  41. package/dist/tools/refresh-uns.d.ts +1 -0
  42. package/dist/tools/refresh-uns.js +109 -0
  43. package/dist/tools/schema.d.ts +208 -0
  44. package/dist/tools/schema.js +1 -0
  45. package/dist/tools/update-rtt.d.ts +1 -0
  46. package/dist/tools/update-rtt.js +169 -0
  47. package/dist/tools/update-tools.d.ts +1 -0
  48. package/dist/tools/update-tools.js +72 -0
  49. package/dist/uns/handover-manager-event-emitter.d.ts +6 -0
  50. package/dist/uns/handover-manager-event-emitter.js +19 -0
  51. package/dist/uns/handover-manager.d.ts +34 -0
  52. package/dist/uns/handover-manager.js +227 -0
  53. package/dist/uns/process-config.d.ts +10 -0
  54. package/dist/uns/process-config.js +12 -0
  55. package/dist/uns/process-name-service.d.ts +7 -0
  56. package/dist/uns/process-name-service.js +28 -0
  57. package/dist/uns/status-monitor.d.ts +35 -0
  58. package/dist/uns/status-monitor.js +82 -0
  59. package/dist/uns/uns-event-emitter.d.ts +6 -0
  60. package/dist/uns/uns-event-emitter.js +19 -0
  61. package/dist/uns/uns-interfaces.d.ts +156 -0
  62. package/dist/uns/uns-interfaces.js +5 -0
  63. package/dist/uns/uns-measurements.d.ts +95 -0
  64. package/dist/uns/uns-measurements.js +146 -0
  65. package/dist/uns/uns-packet.d.ts +28 -0
  66. package/dist/uns/uns-packet.js +223 -0
  67. package/dist/uns/uns-proxy-process.d.ts +56 -0
  68. package/dist/uns/uns-proxy-process.js +179 -0
  69. package/dist/uns/uns-proxy.d.ts +31 -0
  70. package/dist/uns/uns-proxy.js +120 -0
  71. package/dist/uns/uns-tags.d.ts +1 -0
  72. package/dist/uns/uns-tags.js +1 -0
  73. package/dist/uns/uns-topic-matcher.d.ts +9 -0
  74. package/dist/uns/uns-topic-matcher.js +34 -0
  75. package/dist/uns/uns-topics.d.ts +1 -0
  76. package/dist/uns/uns-topics.js +1 -0
  77. package/dist/uns-config/config-schema.d.ts +7 -0
  78. package/dist/uns-config/config-schema.js +5 -0
  79. package/dist/uns-config/host-placeholders.d.ts +139 -0
  80. package/dist/uns-config/host-placeholders.js +70 -0
  81. package/dist/uns-config/schema-tolls.d.ts +2 -0
  82. package/dist/uns-config/schema-tolls.js +4 -0
  83. package/dist/uns-config/schema-tools.d.ts +2 -0
  84. package/dist/uns-config/schema-tools.js +18 -0
  85. package/dist/uns-config/secret-placeholders.d.ts +128 -0
  86. package/dist/uns-config/secret-placeholders.js +64 -0
  87. package/dist/uns-config/secret-resolver.d.ts +77 -0
  88. package/dist/uns-config/secret-resolver.js +285 -0
  89. package/dist/uns-config/uns-core-schema.d.ts +705 -0
  90. package/dist/uns-config/uns-core-schema.js +25 -0
  91. package/dist/uns-grpc/uns-gateway-cli.d.ts +2 -0
  92. package/dist/uns-grpc/uns-gateway-cli.js +32 -0
  93. package/dist/uns-grpc/uns-gateway-server.d.ts +47 -0
  94. package/dist/uns-grpc/uns-gateway-server.js +424 -0
  95. package/dist/uns-mqtt/mqtt-interfaces.d.ts +22 -0
  96. package/dist/uns-mqtt/mqtt-interfaces.js +1 -0
  97. package/dist/uns-mqtt/mqtt-proxy.d.ts +34 -0
  98. package/dist/uns-mqtt/mqtt-proxy.js +245 -0
  99. package/dist/uns-mqtt/mqtt-topic-builder.d.ts +51 -0
  100. package/dist/uns-mqtt/mqtt-topic-builder.js +70 -0
  101. package/dist/uns-mqtt/mqtt-worker-init.d.ts +1 -0
  102. package/dist/uns-mqtt/mqtt-worker-init.js +5 -0
  103. package/dist/uns-mqtt/mqtt-worker.d.ts +20 -0
  104. package/dist/uns-mqtt/mqtt-worker.js +120 -0
  105. package/dist/uns-mqtt/throttled-queue.d.ts +166 -0
  106. package/dist/uns-mqtt/throttled-queue.js +388 -0
  107. package/dist/uns-mqtt/uns-mqtt-proxy.d.ts +107 -0
  108. package/dist/uns-mqtt/uns-mqtt-proxy.js +349 -0
  109. package/dist/uns-mqtt/ws-proxy.d.ts +38 -0
  110. package/dist/uns-mqtt/ws-proxy.js +86 -0
  111. package/package.json +48 -0
@@ -0,0 +1,377 @@
1
+ import { GraphQLResolveInfo, GraphQLScalarType, GraphQLScalarTypeConfig } from 'graphql';
2
+ export type Maybe<T> = T | null;
3
+ export type InputMaybe<T> = Maybe<T>;
4
+ export type Exact<T extends {
5
+ [key: string]: unknown;
6
+ }> = {
7
+ [K in keyof T]: T[K];
8
+ };
9
+ export type MakeOptional<T, K extends keyof T> = Omit<T, K> & {
10
+ [SubKey in K]?: Maybe<T[SubKey]>;
11
+ };
12
+ export type MakeMaybe<T, K extends keyof T> = Omit<T, K> & {
13
+ [SubKey in K]: Maybe<T[SubKey]>;
14
+ };
15
+ export type MakeEmpty<T extends {
16
+ [key: string]: unknown;
17
+ }, K extends keyof T> = {
18
+ [_ in K]?: never;
19
+ };
20
+ export type Incremental<T> = T | {
21
+ [P in keyof T]?: P extends ' $fragmentName' | '__typename' ? T[P] : never;
22
+ };
23
+ /** All built-in and custom scalars, mapped to their actual values */
24
+ export type Scalars = {
25
+ ID: {
26
+ input: string;
27
+ output: string;
28
+ };
29
+ String: {
30
+ input: string;
31
+ output: string;
32
+ };
33
+ Boolean: {
34
+ input: boolean;
35
+ output: boolean;
36
+ };
37
+ Int: {
38
+ input: number;
39
+ output: number;
40
+ };
41
+ Float: {
42
+ input: number;
43
+ output: number;
44
+ };
45
+ Date: {
46
+ input: any;
47
+ output: any;
48
+ };
49
+ Timestamp: {
50
+ input: any;
51
+ output: any;
52
+ };
53
+ };
54
+ export type InitUnsTopic = {
55
+ topic?: InputMaybe<Scalars['String']['input']>;
56
+ };
57
+ export type InsertUnsNode = {
58
+ apiDescription?: InputMaybe<Scalars['String']['input']>;
59
+ apiEndpoint?: InputMaybe<Scalars['String']['input']>;
60
+ apiMethod?: InputMaybe<Scalars['String']['input']>;
61
+ attributeNeedsPersistance?: InputMaybe<Scalars['Boolean']['input']>;
62
+ attributeTags?: InputMaybe<Array<InputMaybe<Scalars['String']['input']>>>;
63
+ attributeTimestamp?: InputMaybe<Scalars['Timestamp']['input']>;
64
+ attributeType?: InputMaybe<UnsAttributeType>;
65
+ description?: InputMaybe<Scalars['String']['input']>;
66
+ fullTopic?: InputMaybe<Scalars['String']['input']>;
67
+ parent: Scalars['Int']['input'];
68
+ processName?: InputMaybe<Scalars['String']['input']>;
69
+ processVersion?: InputMaybe<Scalars['String']['input']>;
70
+ type?: InputMaybe<UnsNodeType>;
71
+ unsNode?: InputMaybe<Scalars['String']['input']>;
72
+ };
73
+ export type Mutation = {
74
+ __typename?: 'Mutation';
75
+ AddUnsNode?: Maybe<Scalars['Int']['output']>;
76
+ DeleteRttNode?: Maybe<Scalars['Boolean']['output']>;
77
+ DeleteUnsNode?: Maybe<Scalars['Boolean']['output']>;
78
+ DeployRttNode?: Maybe<Scalars['Boolean']['output']>;
79
+ ModifyUnsNode?: Maybe<Scalars['Boolean']['output']>;
80
+ /** Purge all nodes that are older the maxAge in hours */
81
+ PurgeOldNodes?: Maybe<Scalars['Boolean']['output']>;
82
+ SetRttNodeConfig?: Maybe<Scalars['Boolean']['output']>;
83
+ StartRttNode?: Maybe<Scalars['Boolean']['output']>;
84
+ StopRttNode?: Maybe<Scalars['Boolean']['output']>;
85
+ };
86
+ export type MutationAddUnsNodeArgs = {
87
+ node?: InputMaybe<InsertUnsNode>;
88
+ };
89
+ export type MutationDeleteRttNodeArgs = {
90
+ rttNode?: InputMaybe<Scalars['String']['input']>;
91
+ };
92
+ export type MutationDeleteUnsNodeArgs = {
93
+ id?: InputMaybe<Scalars['Int']['input']>;
94
+ };
95
+ export type MutationDeployRttNodeArgs = {
96
+ rttNode?: InputMaybe<Scalars['String']['input']>;
97
+ tag?: InputMaybe<Scalars['String']['input']>;
98
+ };
99
+ export type MutationModifyUnsNodeArgs = {
100
+ id?: InputMaybe<Scalars['Int']['input']>;
101
+ node?: InputMaybe<UpdateUnsNode>;
102
+ };
103
+ export type MutationPurgeOldNodesArgs = {
104
+ maxAge?: InputMaybe<Scalars['Int']['input']>;
105
+ };
106
+ export type MutationSetRttNodeConfigArgs = {
107
+ configuration?: InputMaybe<Scalars['String']['input']>;
108
+ rttNode?: InputMaybe<Scalars['String']['input']>;
109
+ };
110
+ export type MutationStartRttNodeArgs = {
111
+ rttNode?: InputMaybe<Scalars['String']['input']>;
112
+ };
113
+ export type MutationStopRttNodeArgs = {
114
+ rttNode?: InputMaybe<Scalars['String']['input']>;
115
+ };
116
+ /** name: uns-datahub */
117
+ export type Query = {
118
+ __typename?: 'Query';
119
+ GetRepositories?: Maybe<Array<Maybe<Repository>>>;
120
+ GetRttNodeConfig?: Maybe<Scalars['String']['output']>;
121
+ GetRttNodes?: Maybe<Array<Maybe<RttNode>>>;
122
+ GetTags?: Maybe<Array<Maybe<Scalars['String']['output']>>>;
123
+ GetTreeStructure?: Maybe<Array<Maybe<TreeStructure>>>;
124
+ GetUnsNodes?: Maybe<Array<Maybe<UnsNode>>>;
125
+ };
126
+ /** name: uns-datahub */
127
+ export type QueryGetRttNodeConfigArgs = {
128
+ rttNode?: InputMaybe<Scalars['String']['input']>;
129
+ };
130
+ /** name: uns-datahub */
131
+ export type QueryGetTreeStructureArgs = {
132
+ attributeTags?: InputMaybe<Array<InputMaybe<Scalars['String']['input']>>>;
133
+ };
134
+ export type Repository = {
135
+ __typename?: 'Repository';
136
+ name?: Maybe<Scalars['String']['output']>;
137
+ tags?: Maybe<Array<Maybe<Scalars['String']['output']>>>;
138
+ };
139
+ export type RttNode = {
140
+ __typename?: 'RttNode';
141
+ author?: Maybe<Scalars['String']['output']>;
142
+ deployedVersions?: Maybe<Array<Maybe<Scalars['String']['output']>>>;
143
+ description?: Maybe<Scalars['String']['output']>;
144
+ lastErrLog?: Maybe<Scalars['String']['output']>;
145
+ lastLog?: Maybe<Scalars['String']['output']>;
146
+ latestDeployedVersion?: Maybe<Scalars['String']['output']>;
147
+ memory?: Maybe<Scalars['Int']['output']>;
148
+ pid?: Maybe<Scalars['Int']['output']>;
149
+ restarts?: Maybe<Scalars['Int']['output']>;
150
+ rttNode?: Maybe<Scalars['String']['output']>;
151
+ runningVersion?: Maybe<Scalars['String']['output']>;
152
+ status?: Maybe<Scalars['String']['output']>;
153
+ topics?: Maybe<Array<Maybe<Scalars['String']['output']>>>;
154
+ uptime?: Maybe<Scalars['Int']['output']>;
155
+ version?: Maybe<Scalars['String']['output']>;
156
+ };
157
+ export type TreeStructure = {
158
+ __typename?: 'TreeStructure';
159
+ apiDescription?: Maybe<Scalars['String']['output']>;
160
+ apiEndpoint?: Maybe<Scalars['String']['output']>;
161
+ apiMethod?: Maybe<Scalars['String']['output']>;
162
+ attributeNeedsPersistance?: Maybe<Scalars['Boolean']['output']>;
163
+ attributeTags?: Maybe<Array<Maybe<Scalars['String']['output']>>>;
164
+ attributeTimestamp?: Maybe<Scalars['Timestamp']['output']>;
165
+ attributeType?: Maybe<UnsAttributeType>;
166
+ children?: Maybe<Array<Maybe<TreeStructure>>>;
167
+ description?: Maybe<Scalars['String']['output']>;
168
+ fullTopic?: Maybe<Scalars['String']['output']>;
169
+ id?: Maybe<Scalars['Int']['output']>;
170
+ parent?: Maybe<Scalars['Int']['output']>;
171
+ processName?: Maybe<Scalars['String']['output']>;
172
+ processVersion?: Maybe<Scalars['String']['output']>;
173
+ type?: Maybe<UnsNodeType>;
174
+ unsNode?: Maybe<Scalars['String']['output']>;
175
+ };
176
+ export declare enum UnsAttributeType {
177
+ Api = "Api",
178
+ Data = "Data",
179
+ Event = "Event",
180
+ Table = "Table"
181
+ }
182
+ export type UnsNode = {
183
+ __typename?: 'UnsNode';
184
+ apiDescription?: Maybe<Scalars['String']['output']>;
185
+ apiEndpoint?: Maybe<Scalars['String']['output']>;
186
+ apiMethod?: Maybe<Scalars['String']['output']>;
187
+ attributeNeedsPersistance?: Maybe<Scalars['Boolean']['output']>;
188
+ attributeTags?: Maybe<Array<Maybe<Scalars['String']['output']>>>;
189
+ attributeTimestamp?: Maybe<Scalars['Timestamp']['output']>;
190
+ attributeType?: Maybe<UnsAttributeType>;
191
+ description?: Maybe<Scalars['String']['output']>;
192
+ fullTopic?: Maybe<Scalars['String']['output']>;
193
+ id?: Maybe<Scalars['Int']['output']>;
194
+ parent?: Maybe<Scalars['Int']['output']>;
195
+ processName?: Maybe<Scalars['String']['output']>;
196
+ processVersion?: Maybe<Scalars['String']['output']>;
197
+ type?: Maybe<UnsNodeType>;
198
+ unsNode?: Maybe<Scalars['String']['output']>;
199
+ };
200
+ export declare enum UnsNodeType {
201
+ Attribute = "Attribute",
202
+ DynamicTopic = "DynamicTopic",
203
+ Topic = "Topic"
204
+ }
205
+ export type UpdateUnsNode = {
206
+ apiDescription?: InputMaybe<Scalars['String']['input']>;
207
+ apiEndpoint?: InputMaybe<Scalars['String']['input']>;
208
+ apiMethod?: InputMaybe<Scalars['String']['input']>;
209
+ attributeNeedsPersistance?: InputMaybe<Scalars['Boolean']['input']>;
210
+ attributeTags?: InputMaybe<Array<InputMaybe<Scalars['String']['input']>>>;
211
+ attributeTimestamp?: InputMaybe<Scalars['Timestamp']['input']>;
212
+ attributeType?: InputMaybe<UnsAttributeType>;
213
+ description?: InputMaybe<Scalars['String']['input']>;
214
+ fullTopic?: InputMaybe<Scalars['String']['input']>;
215
+ parent?: InputMaybe<Scalars['Int']['input']>;
216
+ processName?: InputMaybe<Scalars['String']['input']>;
217
+ processVersion?: InputMaybe<Scalars['String']['input']>;
218
+ type?: InputMaybe<UnsNodeType>;
219
+ unsNode?: InputMaybe<Scalars['String']['input']>;
220
+ };
221
+ export type ResolverTypeWrapper<T> = Promise<T> | T;
222
+ export type ResolverWithResolve<TResult, TParent, TContext, TArgs> = {
223
+ resolve: ResolverFn<TResult, TParent, TContext, TArgs>;
224
+ };
225
+ export type Resolver<TResult, TParent = {}, TContext = {}, TArgs = {}> = ResolverFn<TResult, TParent, TContext, TArgs> | ResolverWithResolve<TResult, TParent, TContext, TArgs>;
226
+ export type ResolverFn<TResult, TParent, TContext, TArgs> = (parent: TParent, args: TArgs, context: TContext, info: GraphQLResolveInfo) => Promise<TResult> | TResult;
227
+ export type SubscriptionSubscribeFn<TResult, TParent, TContext, TArgs> = (parent: TParent, args: TArgs, context: TContext, info: GraphQLResolveInfo) => AsyncIterable<TResult> | Promise<AsyncIterable<TResult>>;
228
+ export type SubscriptionResolveFn<TResult, TParent, TContext, TArgs> = (parent: TParent, args: TArgs, context: TContext, info: GraphQLResolveInfo) => TResult | Promise<TResult>;
229
+ export interface SubscriptionSubscriberObject<TResult, TKey extends string, TParent, TContext, TArgs> {
230
+ subscribe: SubscriptionSubscribeFn<{
231
+ [key in TKey]: TResult;
232
+ }, TParent, TContext, TArgs>;
233
+ resolve?: SubscriptionResolveFn<TResult, {
234
+ [key in TKey]: TResult;
235
+ }, TContext, TArgs>;
236
+ }
237
+ export interface SubscriptionResolverObject<TResult, TParent, TContext, TArgs> {
238
+ subscribe: SubscriptionSubscribeFn<any, TParent, TContext, TArgs>;
239
+ resolve: SubscriptionResolveFn<TResult, any, TContext, TArgs>;
240
+ }
241
+ export type SubscriptionObject<TResult, TKey extends string, TParent, TContext, TArgs> = SubscriptionSubscriberObject<TResult, TKey, TParent, TContext, TArgs> | SubscriptionResolverObject<TResult, TParent, TContext, TArgs>;
242
+ export type SubscriptionResolver<TResult, TKey extends string, TParent = {}, TContext = {}, TArgs = {}> = ((...args: any[]) => SubscriptionObject<TResult, TKey, TParent, TContext, TArgs>) | SubscriptionObject<TResult, TKey, TParent, TContext, TArgs>;
243
+ export type TypeResolveFn<TTypes, TParent = {}, TContext = {}> = (parent: TParent, context: TContext, info: GraphQLResolveInfo) => Maybe<TTypes> | Promise<Maybe<TTypes>>;
244
+ export type IsTypeOfResolverFn<T = {}, TContext = {}> = (obj: T, context: TContext, info: GraphQLResolveInfo) => boolean | Promise<boolean>;
245
+ export type NextResolverFn<T> = () => Promise<T>;
246
+ export type DirectiveResolverFn<TResult = {}, TParent = {}, TContext = {}, TArgs = {}> = (next: NextResolverFn<TResult>, parent: TParent, args: TArgs, context: TContext, info: GraphQLResolveInfo) => TResult | Promise<TResult>;
247
+ /** Mapping between all available schema types and the resolvers types */
248
+ export type ResolversTypes = {
249
+ Boolean: ResolverTypeWrapper<Scalars['Boolean']['output']>;
250
+ Date: ResolverTypeWrapper<Scalars['Date']['output']>;
251
+ InitUnsTopic: InitUnsTopic;
252
+ InsertUnsNode: InsertUnsNode;
253
+ Int: ResolverTypeWrapper<Scalars['Int']['output']>;
254
+ Mutation: ResolverTypeWrapper<{}>;
255
+ Query: ResolverTypeWrapper<{}>;
256
+ Repository: ResolverTypeWrapper<Repository>;
257
+ RttNode: ResolverTypeWrapper<RttNode>;
258
+ String: ResolverTypeWrapper<Scalars['String']['output']>;
259
+ Timestamp: ResolverTypeWrapper<Scalars['Timestamp']['output']>;
260
+ TreeStructure: ResolverTypeWrapper<TreeStructure>;
261
+ UnsAttributeType: UnsAttributeType;
262
+ UnsNode: ResolverTypeWrapper<UnsNode>;
263
+ UnsNodeType: UnsNodeType;
264
+ UpdateUnsNode: UpdateUnsNode;
265
+ };
266
+ /** Mapping between all available schema types and the resolvers parents */
267
+ export type ResolversParentTypes = {
268
+ Boolean: Scalars['Boolean']['output'];
269
+ Date: Scalars['Date']['output'];
270
+ InitUnsTopic: InitUnsTopic;
271
+ InsertUnsNode: InsertUnsNode;
272
+ Int: Scalars['Int']['output'];
273
+ Mutation: {};
274
+ Query: {};
275
+ Repository: Repository;
276
+ RttNode: RttNode;
277
+ String: Scalars['String']['output'];
278
+ Timestamp: Scalars['Timestamp']['output'];
279
+ TreeStructure: TreeStructure;
280
+ UnsNode: UnsNode;
281
+ UpdateUnsNode: UpdateUnsNode;
282
+ };
283
+ export interface DateScalarConfig extends GraphQLScalarTypeConfig<ResolversTypes['Date'], any> {
284
+ name: 'Date';
285
+ }
286
+ export type MutationResolvers<ContextType = any, ParentType extends ResolversParentTypes['Mutation'] = ResolversParentTypes['Mutation']> = {
287
+ AddUnsNode?: Resolver<Maybe<ResolversTypes['Int']>, ParentType, ContextType, Partial<MutationAddUnsNodeArgs>>;
288
+ DeleteRttNode?: Resolver<Maybe<ResolversTypes['Boolean']>, ParentType, ContextType, Partial<MutationDeleteRttNodeArgs>>;
289
+ DeleteUnsNode?: Resolver<Maybe<ResolversTypes['Boolean']>, ParentType, ContextType, Partial<MutationDeleteUnsNodeArgs>>;
290
+ DeployRttNode?: Resolver<Maybe<ResolversTypes['Boolean']>, ParentType, ContextType, Partial<MutationDeployRttNodeArgs>>;
291
+ ModifyUnsNode?: Resolver<Maybe<ResolversTypes['Boolean']>, ParentType, ContextType, Partial<MutationModifyUnsNodeArgs>>;
292
+ PurgeOldNodes?: Resolver<Maybe<ResolversTypes['Boolean']>, ParentType, ContextType, Partial<MutationPurgeOldNodesArgs>>;
293
+ SetRttNodeConfig?: Resolver<Maybe<ResolversTypes['Boolean']>, ParentType, ContextType, Partial<MutationSetRttNodeConfigArgs>>;
294
+ StartRttNode?: Resolver<Maybe<ResolversTypes['Boolean']>, ParentType, ContextType, Partial<MutationStartRttNodeArgs>>;
295
+ StopRttNode?: Resolver<Maybe<ResolversTypes['Boolean']>, ParentType, ContextType, Partial<MutationStopRttNodeArgs>>;
296
+ };
297
+ export type QueryResolvers<ContextType = any, ParentType extends ResolversParentTypes['Query'] = ResolversParentTypes['Query']> = {
298
+ GetRepositories?: Resolver<Maybe<Array<Maybe<ResolversTypes['Repository']>>>, ParentType, ContextType>;
299
+ GetRttNodeConfig?: Resolver<Maybe<ResolversTypes['String']>, ParentType, ContextType, Partial<QueryGetRttNodeConfigArgs>>;
300
+ GetRttNodes?: Resolver<Maybe<Array<Maybe<ResolversTypes['RttNode']>>>, ParentType, ContextType>;
301
+ GetTags?: Resolver<Maybe<Array<Maybe<ResolversTypes['String']>>>, ParentType, ContextType>;
302
+ GetTreeStructure?: Resolver<Maybe<Array<Maybe<ResolversTypes['TreeStructure']>>>, ParentType, ContextType, Partial<QueryGetTreeStructureArgs>>;
303
+ GetUnsNodes?: Resolver<Maybe<Array<Maybe<ResolversTypes['UnsNode']>>>, ParentType, ContextType>;
304
+ };
305
+ export type RepositoryResolvers<ContextType = any, ParentType extends ResolversParentTypes['Repository'] = ResolversParentTypes['Repository']> = {
306
+ name?: Resolver<Maybe<ResolversTypes['String']>, ParentType, ContextType>;
307
+ tags?: Resolver<Maybe<Array<Maybe<ResolversTypes['String']>>>, ParentType, ContextType>;
308
+ __isTypeOf?: IsTypeOfResolverFn<ParentType, ContextType>;
309
+ };
310
+ export type RttNodeResolvers<ContextType = any, ParentType extends ResolversParentTypes['RttNode'] = ResolversParentTypes['RttNode']> = {
311
+ author?: Resolver<Maybe<ResolversTypes['String']>, ParentType, ContextType>;
312
+ deployedVersions?: Resolver<Maybe<Array<Maybe<ResolversTypes['String']>>>, ParentType, ContextType>;
313
+ description?: Resolver<Maybe<ResolversTypes['String']>, ParentType, ContextType>;
314
+ lastErrLog?: Resolver<Maybe<ResolversTypes['String']>, ParentType, ContextType>;
315
+ lastLog?: Resolver<Maybe<ResolversTypes['String']>, ParentType, ContextType>;
316
+ latestDeployedVersion?: Resolver<Maybe<ResolversTypes['String']>, ParentType, ContextType>;
317
+ memory?: Resolver<Maybe<ResolversTypes['Int']>, ParentType, ContextType>;
318
+ pid?: Resolver<Maybe<ResolversTypes['Int']>, ParentType, ContextType>;
319
+ restarts?: Resolver<Maybe<ResolversTypes['Int']>, ParentType, ContextType>;
320
+ rttNode?: Resolver<Maybe<ResolversTypes['String']>, ParentType, ContextType>;
321
+ runningVersion?: Resolver<Maybe<ResolversTypes['String']>, ParentType, ContextType>;
322
+ status?: Resolver<Maybe<ResolversTypes['String']>, ParentType, ContextType>;
323
+ topics?: Resolver<Maybe<Array<Maybe<ResolversTypes['String']>>>, ParentType, ContextType>;
324
+ uptime?: Resolver<Maybe<ResolversTypes['Int']>, ParentType, ContextType>;
325
+ version?: Resolver<Maybe<ResolversTypes['String']>, ParentType, ContextType>;
326
+ __isTypeOf?: IsTypeOfResolverFn<ParentType, ContextType>;
327
+ };
328
+ export interface TimestampScalarConfig extends GraphQLScalarTypeConfig<ResolversTypes['Timestamp'], any> {
329
+ name: 'Timestamp';
330
+ }
331
+ export type TreeStructureResolvers<ContextType = any, ParentType extends ResolversParentTypes['TreeStructure'] = ResolversParentTypes['TreeStructure']> = {
332
+ apiDescription?: Resolver<Maybe<ResolversTypes['String']>, ParentType, ContextType>;
333
+ apiEndpoint?: Resolver<Maybe<ResolversTypes['String']>, ParentType, ContextType>;
334
+ apiMethod?: Resolver<Maybe<ResolversTypes['String']>, ParentType, ContextType>;
335
+ attributeNeedsPersistance?: Resolver<Maybe<ResolversTypes['Boolean']>, ParentType, ContextType>;
336
+ attributeTags?: Resolver<Maybe<Array<Maybe<ResolversTypes['String']>>>, ParentType, ContextType>;
337
+ attributeTimestamp?: Resolver<Maybe<ResolversTypes['Timestamp']>, ParentType, ContextType>;
338
+ attributeType?: Resolver<Maybe<ResolversTypes['UnsAttributeType']>, ParentType, ContextType>;
339
+ children?: Resolver<Maybe<Array<Maybe<ResolversTypes['TreeStructure']>>>, ParentType, ContextType>;
340
+ description?: Resolver<Maybe<ResolversTypes['String']>, ParentType, ContextType>;
341
+ fullTopic?: Resolver<Maybe<ResolversTypes['String']>, ParentType, ContextType>;
342
+ id?: Resolver<Maybe<ResolversTypes['Int']>, ParentType, ContextType>;
343
+ parent?: Resolver<Maybe<ResolversTypes['Int']>, ParentType, ContextType>;
344
+ processName?: Resolver<Maybe<ResolversTypes['String']>, ParentType, ContextType>;
345
+ processVersion?: Resolver<Maybe<ResolversTypes['String']>, ParentType, ContextType>;
346
+ type?: Resolver<Maybe<ResolversTypes['UnsNodeType']>, ParentType, ContextType>;
347
+ unsNode?: Resolver<Maybe<ResolversTypes['String']>, ParentType, ContextType>;
348
+ __isTypeOf?: IsTypeOfResolverFn<ParentType, ContextType>;
349
+ };
350
+ export type UnsNodeResolvers<ContextType = any, ParentType extends ResolversParentTypes['UnsNode'] = ResolversParentTypes['UnsNode']> = {
351
+ apiDescription?: Resolver<Maybe<ResolversTypes['String']>, ParentType, ContextType>;
352
+ apiEndpoint?: Resolver<Maybe<ResolversTypes['String']>, ParentType, ContextType>;
353
+ apiMethod?: Resolver<Maybe<ResolversTypes['String']>, ParentType, ContextType>;
354
+ attributeNeedsPersistance?: Resolver<Maybe<ResolversTypes['Boolean']>, ParentType, ContextType>;
355
+ attributeTags?: Resolver<Maybe<Array<Maybe<ResolversTypes['String']>>>, ParentType, ContextType>;
356
+ attributeTimestamp?: Resolver<Maybe<ResolversTypes['Timestamp']>, ParentType, ContextType>;
357
+ attributeType?: Resolver<Maybe<ResolversTypes['UnsAttributeType']>, ParentType, ContextType>;
358
+ description?: Resolver<Maybe<ResolversTypes['String']>, ParentType, ContextType>;
359
+ fullTopic?: Resolver<Maybe<ResolversTypes['String']>, ParentType, ContextType>;
360
+ id?: Resolver<Maybe<ResolversTypes['Int']>, ParentType, ContextType>;
361
+ parent?: Resolver<Maybe<ResolversTypes['Int']>, ParentType, ContextType>;
362
+ processName?: Resolver<Maybe<ResolversTypes['String']>, ParentType, ContextType>;
363
+ processVersion?: Resolver<Maybe<ResolversTypes['String']>, ParentType, ContextType>;
364
+ type?: Resolver<Maybe<ResolversTypes['UnsNodeType']>, ParentType, ContextType>;
365
+ unsNode?: Resolver<Maybe<ResolversTypes['String']>, ParentType, ContextType>;
366
+ __isTypeOf?: IsTypeOfResolverFn<ParentType, ContextType>;
367
+ };
368
+ export type Resolvers<ContextType = any> = {
369
+ Date?: GraphQLScalarType;
370
+ Mutation?: MutationResolvers<ContextType>;
371
+ Query?: QueryResolvers<ContextType>;
372
+ Repository?: RepositoryResolvers<ContextType>;
373
+ RttNode?: RttNodeResolvers<ContextType>;
374
+ Timestamp?: GraphQLScalarType;
375
+ TreeStructure?: TreeStructureResolvers<ContextType>;
376
+ UnsNode?: UnsNodeResolvers<ContextType>;
377
+ };
@@ -0,0 +1,13 @@
1
+ export var UnsAttributeType;
2
+ (function (UnsAttributeType) {
3
+ UnsAttributeType["Api"] = "Api";
4
+ UnsAttributeType["Data"] = "Data";
5
+ UnsAttributeType["Event"] = "Event";
6
+ UnsAttributeType["Table"] = "Table";
7
+ })(UnsAttributeType || (UnsAttributeType = {}));
8
+ export var UnsNodeType;
9
+ (function (UnsNodeType) {
10
+ UnsNodeType["Attribute"] = "Attribute";
11
+ UnsNodeType["DynamicTopic"] = "DynamicTopic";
12
+ UnsNodeType["Topic"] = "Topic";
13
+ })(UnsNodeType || (UnsNodeType = {}));
@@ -0,0 +1,5 @@
1
+ export { default as UnsProxyProcess } from "./uns/uns-proxy-process.js";
2
+ export type { UnsProxyProcessPlugin, UnsProxyProcessPluginApi, UnsProxyProcessPluginMethod, UnsProxyProcessPluginMethods, } from "./uns/uns-proxy-process.js";
3
+ export * from "./uns/uns-interfaces.js";
4
+ export { ConfigFile } from "./config-file.js";
5
+ export { default as logger } from "./logger.js";
package/dist/index.js ADDED
@@ -0,0 +1,4 @@
1
+ export { default as UnsProxyProcess } from "./uns/uns-proxy-process.js";
2
+ export * from "./uns/uns-interfaces.js";
3
+ export { ConfigFile } from "./config-file.js";
4
+ export { default as logger } from "./logger.js";
@@ -0,0 +1,2 @@
1
+ declare const logger: import("winston").Logger;
2
+ export default logger;
package/dist/logger.js ADDED
@@ -0,0 +1,18 @@
1
+ import { createLogger, format, transports } from 'winston';
2
+ const logger = createLogger({
3
+ level: 'info', // Default logging level
4
+ format: format.combine(format.timestamp({ format: 'YYYY-MM-DD HH:mm:ss' }), format.errors({ stack: true }), // Include stack trace
5
+ format.splat(), format.json()),
6
+ transports: [
7
+ new transports.Console(), // Log to console only
8
+ // Remove the file transports to prevent logging to files
9
+ // new transports.File({ filename: 'logs/error.log', level: 'error' }),
10
+ // new transports.File({ filename: 'logs/combined.log' })
11
+ ],
12
+ exceptionHandlers: [
13
+ new transports.Console(), // Log exceptions to console
14
+ // Remove exception logging to file
15
+ // new transports.File({ filename: 'logs/exceptions.log' })
16
+ ]
17
+ });
18
+ export default logger;
@@ -0,0 +1,23 @@
1
+ /**
2
+ * AuthClient handles acquiring and refreshing JWT access tokens
3
+ * using the configured REST base URL.
4
+ */
5
+ export declare class AuthClient {
6
+ private readonly restBase;
7
+ private readonly namespace;
8
+ private store;
9
+ private constructor();
10
+ static create(): Promise<AuthClient>;
11
+ getAccessToken(): Promise<string>;
12
+ private static isExpired;
13
+ private static endpoint;
14
+ private static fetchWithTimeout;
15
+ private static extractRefreshCookie;
16
+ private login;
17
+ private refresh;
18
+ private persistTokens;
19
+ static promptCredentials(): Promise<{
20
+ email: string;
21
+ password: string;
22
+ }>;
23
+ }
@@ -0,0 +1,172 @@
1
+ import { ConfigFile } from "../../config-file.js";
2
+ import { SecureStoreFactory } from "./secure-store.js";
3
+ import jwt from "jsonwebtoken";
4
+ import readline from "readline";
5
+ /**
6
+ * AuthClient handles acquiring and refreshing JWT access tokens
7
+ * using the configured REST base URL.
8
+ */
9
+ export class AuthClient {
10
+ restBase;
11
+ namespace;
12
+ store;
13
+ constructor(restBase) {
14
+ this.restBase = restBase.replace(/\/$/, "");
15
+ // namespace store by rest base to allow multiple environments
16
+ this.namespace = `uns-auth:${this.restBase}`;
17
+ }
18
+ static async create() {
19
+ const cfg = await ConfigFile.loadConfig();
20
+ const restBase = cfg?.uns?.rest;
21
+ if (!restBase)
22
+ throw new Error("config.uns.rest is not set");
23
+ const client = new AuthClient(restBase);
24
+ client.store = await SecureStoreFactory.create(client.namespace);
25
+ return client;
26
+ }
27
+ async getAccessToken() {
28
+ const accessToken = await this.store.get("accessToken");
29
+ const refreshToken = await this.store.get("refreshToken");
30
+ if (accessToken && !AuthClient.isExpired(accessToken)) {
31
+ return accessToken;
32
+ }
33
+ // Try refresh if we have refresh token
34
+ if (refreshToken) {
35
+ try {
36
+ const refreshed = await this.refresh(refreshToken);
37
+ await this.persistTokens(refreshed.accessToken, refreshed.refreshToken);
38
+ return refreshed.accessToken;
39
+ }
40
+ catch {
41
+ // ignore, fallback to login
42
+ }
43
+ }
44
+ // Interactive login
45
+ const { email, password } = await AuthClient.promptCredentials();
46
+ const loggedIn = await this.login(email, password);
47
+ await this.persistTokens(loggedIn.accessToken, loggedIn.refreshToken);
48
+ return loggedIn.accessToken;
49
+ }
50
+ static isExpired(token, skewSeconds = 30) {
51
+ try {
52
+ const decoded = jwt.decode(token);
53
+ if (!decoded || typeof decoded !== "object" || !decoded.exp)
54
+ return true;
55
+ const now = Math.floor(Date.now() / 1000);
56
+ return decoded.exp <= now + skewSeconds;
57
+ }
58
+ catch {
59
+ return true;
60
+ }
61
+ }
62
+ static endpoint(base, tail) {
63
+ // base ends without trailing slash; tail must not start with slash
64
+ const b = base.replace(/\/$/, "");
65
+ const t = tail.replace(/^\//, "");
66
+ return `${b}/${t}`;
67
+ }
68
+ static async fetchWithTimeout(url, init = {}, timeoutMs = 10_000) {
69
+ const controller = new AbortController();
70
+ const id = setTimeout(() => controller.abort(), timeoutMs);
71
+ try {
72
+ const resp = await fetch(url, { ...init, signal: controller.signal });
73
+ return resp;
74
+ }
75
+ finally {
76
+ clearTimeout(id);
77
+ }
78
+ }
79
+ static extractRefreshCookie(resp) {
80
+ const anyHeaders = resp.headers;
81
+ const getSetCookie = typeof anyHeaders.getSetCookie === "function" ? anyHeaders.getSetCookie.bind(anyHeaders) : null;
82
+ const candidates = getSetCookie ? getSetCookie() : (resp.headers.get("set-cookie") ? [resp.headers.get("set-cookie")] : []);
83
+ for (const header of candidates) {
84
+ const match = header.match(/(?:^|;\s*)RefreshToken=([^;]+)/i);
85
+ if (match)
86
+ return match[1];
87
+ }
88
+ return null;
89
+ }
90
+ async login(email, password) {
91
+ const url = AuthClient.endpoint(this.restBase, "auth/login");
92
+ const resp = await AuthClient.fetchWithTimeout(url, {
93
+ method: "POST",
94
+ headers: { "Content-Type": "application/json" },
95
+ body: JSON.stringify({ email, password }),
96
+ }, 12_000);
97
+ if (!resp.ok) {
98
+ throw new Error(`Login failed: ${resp.status} ${resp.statusText}`);
99
+ }
100
+ const data = (await resp.json());
101
+ const refreshToken = AuthClient.extractRefreshCookie(resp);
102
+ if (!data?.accessToken || !refreshToken) {
103
+ throw new Error("Login response missing tokens");
104
+ }
105
+ return { accessToken: data.accessToken, refreshToken };
106
+ }
107
+ async refresh(refreshToken) {
108
+ const url = AuthClient.endpoint(this.restBase, "auth/refresh");
109
+ const resp = await AuthClient.fetchWithTimeout(url, {
110
+ method: "POST",
111
+ headers: {
112
+ // server expects cookie RefreshToken
113
+ "Cookie": `RefreshToken=${refreshToken}`,
114
+ },
115
+ }, 8_000);
116
+ if (!resp.ok) {
117
+ throw new Error(`Refresh failed: ${resp.status} ${resp.statusText}`);
118
+ }
119
+ const data = (await resp.json());
120
+ const newRefreshToken = AuthClient.extractRefreshCookie(resp) || refreshToken;
121
+ if (!data?.accessToken)
122
+ throw new Error("Refresh response missing accessToken");
123
+ return { accessToken: data.accessToken, refreshToken: newRefreshToken };
124
+ }
125
+ async persistTokens(accessToken, refreshToken) {
126
+ await this.store.set("accessToken", accessToken);
127
+ await this.store.set("refreshToken", refreshToken);
128
+ }
129
+ static async promptCredentials() {
130
+ const rl = readline.createInterface({ input: process.stdin, output: process.stdout, terminal: true });
131
+ const ask = (q) => new Promise((resolve) => rl.question(q, (ans) => resolve(ans.trim())));
132
+ const askMasked = (q) => new Promise((resolve) => {
133
+ const anyRl = rl;
134
+ const out = anyRl.output || process.stdout;
135
+ const origWrite = anyRl._writeToOutput?.bind(rl) || ((s) => out.write(s));
136
+ anyRl.stdoutMuted = true;
137
+ anyRl._writeToOutput = function (stringToWrite) {
138
+ // Keep prompt text intact; mask user input
139
+ if (anyRl.stdoutMuted) {
140
+ if (stringToWrite.startsWith(q)) {
141
+ out.write(stringToWrite);
142
+ }
143
+ else if (stringToWrite.endsWith("\n")) {
144
+ out.write("\n");
145
+ }
146
+ else {
147
+ out.write("*");
148
+ }
149
+ }
150
+ else {
151
+ origWrite(stringToWrite);
152
+ }
153
+ };
154
+ rl.question(q, (value) => {
155
+ anyRl.stdoutMuted = false;
156
+ anyRl._writeToOutput = origWrite;
157
+ out.write("\n");
158
+ resolve(value.trim());
159
+ });
160
+ });
161
+ try {
162
+ const email = await ask("Email: ");
163
+ const password = await askMasked("Password: ");
164
+ rl.close();
165
+ return { email, password };
166
+ }
167
+ catch (e) {
168
+ rl.close();
169
+ throw e;
170
+ }
171
+ }
172
+ }
@@ -0,0 +1 @@
1
+ export { AuthClient } from "./auth-client.js";
@@ -0,0 +1 @@
1
+ export { AuthClient } from "./auth-client.js";
@@ -0,0 +1,17 @@
1
+ /**
2
+ * Abstraction over secure storage for tokens.
3
+ *
4
+ * Prefers OS keychain via `keytar` if available at runtime.
5
+ * Falls back to a local file store with restricted permissions.
6
+ */
7
+ export interface ISecureStore {
8
+ get(key: string): Promise<string | null>;
9
+ set(key: string, value: string): Promise<void>;
10
+ del(key: string): Promise<void>;
11
+ }
12
+ export declare class SecureStoreFactory {
13
+ /**
14
+ * Creates a secure store for a namespace. Tries keytar first; falls back to file store.
15
+ */
16
+ static create(namespace: string): Promise<ISecureStore>;
17
+ }