@things-factory/integration-base 7.0.1-beta.9 → 7.0.1-rc.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (278) hide show
  1. package/dist-server/controllers/index.d.ts +1 -0
  2. package/dist-server/controllers/scenario-controller.d.ts +4 -0
  3. package/dist-server/controllers/scenario-controller.js +11 -6
  4. package/dist-server/controllers/scenario-controller.js.map +1 -1
  5. package/dist-server/engine/analyzer/analyze-integration.d.ts +5 -0
  6. package/dist-server/engine/analyzer/analyze-integration.js +1 -2
  7. package/dist-server/engine/analyzer/analyze-integration.js.map +1 -1
  8. package/dist-server/engine/connection-manager.d.ts +35 -0
  9. package/dist-server/engine/connection-manager.js.map +1 -1
  10. package/dist-server/engine/connector/echo-back-connector.d.ts +9 -0
  11. package/dist-server/engine/connector/echo-back-connector.js.map +1 -1
  12. package/dist-server/engine/connector/echo-back-server.d.ts +8 -0
  13. package/dist-server/engine/connector/echo-back-server.js.map +1 -1
  14. package/dist-server/engine/connector/graphql-connector.d.ts +19 -0
  15. package/dist-server/engine/connector/graphql-connector.js +1 -1
  16. package/dist-server/engine/connector/graphql-connector.js.map +1 -1
  17. package/dist-server/engine/connector/http-connector.d.ts +25 -0
  18. package/dist-server/engine/connector/http-connector.js.map +1 -1
  19. package/dist-server/engine/connector/index.d.ts +12 -0
  20. package/dist-server/engine/connector/mqtt-connector.d.ts +14 -0
  21. package/dist-server/engine/connector/mqtt-connector.js.map +1 -1
  22. package/dist-server/engine/connector/mssql-connector.d.ts +30 -0
  23. package/dist-server/engine/connector/mssql-connector.js.map +1 -1
  24. package/dist-server/engine/connector/mysql-connector.d.ts +13 -0
  25. package/dist-server/engine/connector/mysql-connector.js.map +1 -1
  26. package/dist-server/engine/connector/operato-connector.d.ts +27 -0
  27. package/dist-server/engine/connector/operato-connector.js +1 -1
  28. package/dist-server/engine/connector/operato-connector.js.map +1 -1
  29. package/dist-server/engine/connector/oracle-connector.d.ts +29 -0
  30. package/dist-server/engine/connector/oracle-connector.js.map +1 -1
  31. package/dist-server/engine/connector/postgresql-connector.d.ts +14 -0
  32. package/dist-server/engine/connector/postgresql-connector.js.map +1 -1
  33. package/dist-server/engine/connector/proxy-connector.d.ts +15 -0
  34. package/dist-server/engine/connector/socket-server.d.ts +9 -0
  35. package/dist-server/engine/connector/socket-server.js.map +1 -1
  36. package/dist-server/engine/connector/sqlite-connector.d.ts +10 -0
  37. package/dist-server/engine/connector/sqlite-connector.js.map +1 -1
  38. package/dist-server/engine/edge-client.d.ts +18 -0
  39. package/dist-server/engine/edge-client.js +5 -6
  40. package/dist-server/engine/edge-client.js.map +1 -1
  41. package/dist-server/engine/index.d.ts +8 -0
  42. package/dist-server/engine/index.js.map +1 -1
  43. package/dist-server/engine/pending-queue.d.ts +24 -0
  44. package/dist-server/engine/pending-queue.js.map +1 -1
  45. package/dist-server/engine/scenario-engine.d.ts +11 -0
  46. package/dist-server/engine/scenario-engine.js.map +1 -1
  47. package/dist-server/engine/task/book-up-scenario.d.ts +1 -0
  48. package/dist-server/engine/task/csv-readline.d.ts +1 -0
  49. package/dist-server/engine/task/csv-readline.js.map +1 -1
  50. package/dist-server/engine/task/data-accessor.d.ts +1 -0
  51. package/dist-server/engine/task/data-mapper.d.ts +1 -0
  52. package/dist-server/engine/task/data-mapper.js.map +1 -1
  53. package/dist-server/engine/task/database-query.d.ts +1 -0
  54. package/dist-server/engine/task/echo-receive.d.ts +1 -0
  55. package/dist-server/engine/task/echo-send.d.ts +1 -0
  56. package/dist-server/engine/task/echo-send.js.map +1 -1
  57. package/dist-server/engine/task/empty-check.d.ts +1 -0
  58. package/dist-server/engine/task/empty-check.js.map +1 -1
  59. package/dist-server/engine/task/end.d.ts +1 -0
  60. package/dist-server/engine/task/floating-point.d.ts +1 -0
  61. package/dist-server/engine/task/floating-point.js.map +1 -1
  62. package/dist-server/engine/task/goto.d.ts +1 -0
  63. package/dist-server/engine/task/graphql-mutate.d.ts +1 -0
  64. package/dist-server/engine/task/graphql-query.d.ts +1 -0
  65. package/dist-server/engine/task/headless-post.d.ts +1 -0
  66. package/dist-server/engine/task/headless-post.js.map +1 -1
  67. package/dist-server/engine/task/headless-scrap.d.ts +1 -0
  68. package/dist-server/engine/task/headless-scrap.js.map +1 -1
  69. package/dist-server/engine/task/http-get.d.ts +1 -0
  70. package/dist-server/engine/task/http-get.js.map +1 -1
  71. package/dist-server/engine/task/http-post.d.ts +1 -0
  72. package/dist-server/engine/task/http-post.js.map +1 -1
  73. package/dist-server/engine/task/index.d.ts +43 -0
  74. package/dist-server/engine/task/jsonata.d.ts +1 -0
  75. package/dist-server/engine/task/local-graphql-mutate.d.ts +1 -0
  76. package/dist-server/engine/task/local-graphql-mutate.js.map +1 -1
  77. package/dist-server/engine/task/local-graphql-query.d.ts +1 -0
  78. package/dist-server/engine/task/local-graphql-query.js.map +1 -1
  79. package/dist-server/engine/task/log.d.ts +1 -0
  80. package/dist-server/engine/task/log.js.map +1 -1
  81. package/dist-server/engine/task/mqtt-publish.d.ts +1 -0
  82. package/dist-server/engine/task/mqtt-publish.js.map +1 -1
  83. package/dist-server/engine/task/mqtt-subscribe.d.ts +1 -0
  84. package/dist-server/engine/task/mqtt-subscribe.js.map +1 -1
  85. package/dist-server/engine/task/oracle-procedure.d.ts +1 -0
  86. package/dist-server/engine/task/oracle-procedure.js.map +1 -1
  87. package/dist-server/engine/task/pick-pending-scenario.d.ts +1 -0
  88. package/dist-server/engine/task/pick-pending-scenario.js.map +1 -1
  89. package/dist-server/engine/task/publish.d.ts +1 -0
  90. package/dist-server/engine/task/publish.js.map +1 -1
  91. package/dist-server/engine/task/random.d.ts +1 -0
  92. package/dist-server/engine/task/reset-pending-queue.d.ts +1 -0
  93. package/dist-server/engine/task/script.d.ts +1 -0
  94. package/dist-server/engine/task/set-domain.d.ts +1 -0
  95. package/dist-server/engine/task/set-domain.js.map +1 -1
  96. package/dist-server/engine/task/sleep.d.ts +1 -0
  97. package/dist-server/engine/task/sleep.js.map +1 -1
  98. package/dist-server/engine/task/socket-listener.d.ts +1 -0
  99. package/dist-server/engine/task/socket-listener.js.map +1 -1
  100. package/dist-server/engine/task/state-read.d.ts +1 -0
  101. package/dist-server/engine/task/state-read.js.map +1 -1
  102. package/dist-server/engine/task/state-write.d.ts +1 -0
  103. package/dist-server/engine/task/state-write.js.map +1 -1
  104. package/dist-server/engine/task/stop-scenario.d.ts +1 -0
  105. package/dist-server/engine/task/sub-scenario.d.ts +1 -0
  106. package/dist-server/engine/task/switch-goto.d.ts +1 -0
  107. package/dist-server/engine/task/switch-range-goto.d.ts +1 -0
  108. package/dist-server/engine/task/switch-range-goto.js.map +1 -1
  109. package/dist-server/engine/task/switch-range-scenario.d.ts +1 -0
  110. package/dist-server/engine/task/switch-range-scenario.js.map +1 -1
  111. package/dist-server/engine/task/switch-range-set.d.ts +1 -0
  112. package/dist-server/engine/task/switch-range-set.js.map +1 -1
  113. package/dist-server/engine/task/switch-scenario.d.ts +1 -0
  114. package/dist-server/engine/task/switch-set.d.ts +1 -0
  115. package/dist-server/engine/task/throw.d.ts +1 -0
  116. package/dist-server/engine/task/utils/headless-pool-for-scenario.d.ts +1 -0
  117. package/dist-server/engine/task/utils/headless-pool-for-scenario.js +1 -2
  118. package/dist-server/engine/task/utils/headless-pool-for-scenario.js.map +1 -1
  119. package/dist-server/engine/task/utils/substitute.d.ts +1 -0
  120. package/dist-server/engine/task/utils/substitute.js +1 -2
  121. package/dist-server/engine/task/utils/substitute.js.map +1 -1
  122. package/dist-server/engine/task/variables.d.ts +1 -0
  123. package/dist-server/engine/task-registry.d.ts +12 -0
  124. package/dist-server/engine/types.d.ts +94 -0
  125. package/dist-server/engine/types.js.map +1 -1
  126. package/dist-server/index.d.ts +6 -0
  127. package/dist-server/index.js.map +1 -1
  128. package/dist-server/migrations/index.d.ts +1 -0
  129. package/dist-server/restful/index.d.ts +1 -0
  130. package/dist-server/restful/unstable/index.d.ts +7 -0
  131. package/dist-server/restful/unstable/run-scenario.d.ts +1 -0
  132. package/dist-server/restful/unstable/run-scenario.js +0 -1
  133. package/dist-server/restful/unstable/run-scenario.js.map +1 -1
  134. package/dist-server/restful/unstable/scenario-instance.d.ts +1 -0
  135. package/dist-server/restful/unstable/scenario-instances.d.ts +1 -0
  136. package/dist-server/restful/unstable/scenario.d.ts +1 -0
  137. package/dist-server/restful/unstable/scenarios.d.ts +1 -0
  138. package/dist-server/restful/unstable/start-scenario.d.ts +1 -0
  139. package/dist-server/restful/unstable/stop-scenario.d.ts +1 -0
  140. package/dist-server/routers/scenario-schedule-callback-router.d.ts +1 -0
  141. package/dist-server/routers/scenario-schedule-callback-router.js +2 -3
  142. package/dist-server/routers/scenario-schedule-callback-router.js.map +1 -1
  143. package/dist-server/routers/scenario-view-router.d.ts +1 -0
  144. package/dist-server/routers/scenario-view-router.js.map +1 -1
  145. package/dist-server/routes.d.ts +1 -0
  146. package/dist-server/routes.js.map +1 -1
  147. package/dist-server/service/analysis/analysis-query.d.ts +3 -0
  148. package/dist-server/service/analysis/analysis-query.js +2 -2
  149. package/dist-server/service/analysis/analysis-query.js.map +1 -1
  150. package/dist-server/service/analysis/index.d.ts +2 -0
  151. package/dist-server/service/connection/connection-mutation.d.ts +30 -0
  152. package/dist-server/service/connection/connection-mutation.js +2 -2
  153. package/dist-server/service/connection/connection-mutation.js.map +1 -1
  154. package/dist-server/service/connection/connection-query.d.ts +12 -0
  155. package/dist-server/service/connection/connection-query.js +10 -6
  156. package/dist-server/service/connection/connection-query.js.map +1 -1
  157. package/dist-server/service/connection/connection-subscription.d.ts +10 -0
  158. package/dist-server/service/connection/connection-subscription.js +2 -2
  159. package/dist-server/service/connection/connection-subscription.js.map +1 -1
  160. package/dist-server/service/connection/connection-type.d.ts +133 -0
  161. package/dist-server/service/connection/connection-type.js +11 -11
  162. package/dist-server/service/connection/connection-type.js.map +1 -1
  163. package/dist-server/service/connection/index.d.ts +6 -0
  164. package/dist-server/service/connector/connector-query.d.ts +6 -0
  165. package/dist-server/service/connector/connector-query.js +2 -2
  166. package/dist-server/service/connector/connector-query.js.map +1 -1
  167. package/dist-server/service/connector/connector-type.d.ts +12 -0
  168. package/dist-server/service/connector/connector-type.js +4 -4
  169. package/dist-server/service/connector/connector-type.js.map +1 -1
  170. package/dist-server/service/connector/index.d.ts +3 -0
  171. package/dist-server/service/index.d.ts +17 -0
  172. package/dist-server/service/payload-log/index.d.ts +5 -0
  173. package/dist-server/service/payload-log/payload-log-mutation.d.ts +10 -0
  174. package/dist-server/service/payload-log/payload-log-mutation.js +4 -4
  175. package/dist-server/service/payload-log/payload-log-mutation.js.map +1 -1
  176. package/dist-server/service/payload-log/payload-log-query.d.ts +11 -0
  177. package/dist-server/service/payload-log/payload-log-query.js +3 -3
  178. package/dist-server/service/payload-log/payload-log-query.js.map +1 -1
  179. package/dist-server/service/payload-log/payload-log-type.d.ts +15 -0
  180. package/dist-server/service/payload-log/payload-log-type.js +6 -6
  181. package/dist-server/service/payload-log/payload-log-type.js.map +1 -1
  182. package/dist-server/service/payload-log/payload-log.d.ts +23 -0
  183. package/dist-server/service/payload-log/payload-log.js +5 -5
  184. package/dist-server/service/payload-log/payload-log.js.map +1 -1
  185. package/dist-server/service/property-spec.d.ts +12 -0
  186. package/dist-server/service/property-spec.js +2 -2
  187. package/dist-server/service/property-spec.js.map +1 -1
  188. package/dist-server/service/scenario/index.d.ts +5 -0
  189. package/dist-server/service/scenario/scenario-mutation.d.ts +13 -0
  190. package/dist-server/service/scenario/scenario-mutation.js +3 -3
  191. package/dist-server/service/scenario/scenario-mutation.js.map +1 -1
  192. package/dist-server/service/scenario/scenario-query.d.ts +18 -0
  193. package/dist-server/service/scenario/scenario-query.js +3 -3
  194. package/dist-server/service/scenario/scenario-query.js.map +1 -1
  195. package/dist-server/service/scenario/scenario-type.d.ts +30 -0
  196. package/dist-server/service/scenario/scenario-type.js +14 -6
  197. package/dist-server/service/scenario/scenario-type.js.map +1 -1
  198. package/dist-server/service/scenario/scenario.d.ts +27 -0
  199. package/dist-server/service/scenario/scenario.js +9 -4
  200. package/dist-server/service/scenario/scenario.js.map +1 -1
  201. package/dist-server/service/scenario-flow/scenario-flow.d.ts +6 -0
  202. package/dist-server/service/scenario-flow/scenario-flow.js +2 -2
  203. package/dist-server/service/scenario-flow/scenario-flow.js.map +1 -1
  204. package/dist-server/service/scenario-instance/index.d.ts +5 -0
  205. package/dist-server/service/scenario-instance/scenario-instance-mutation.d.ts +6 -0
  206. package/dist-server/service/scenario-instance/scenario-instance-mutation.js +3 -3
  207. package/dist-server/service/scenario-instance/scenario-instance-mutation.js.map +1 -1
  208. package/dist-server/service/scenario-instance/scenario-instance-query.d.ts +6 -0
  209. package/dist-server/service/scenario-instance/scenario-instance-query.js +3 -67
  210. package/dist-server/service/scenario-instance/scenario-instance-query.js.map +1 -1
  211. package/dist-server/service/scenario-instance/scenario-instance-subscription.d.ts +10 -0
  212. package/dist-server/service/scenario-instance/scenario-instance-subscription.js +2 -2
  213. package/dist-server/service/scenario-instance/scenario-instance-subscription.js.map +1 -1
  214. package/dist-server/service/scenario-instance/scenario-instance-type.d.ts +102 -0
  215. package/dist-server/service/scenario-instance/scenario-instance-type.js +109 -23
  216. package/dist-server/service/scenario-instance/scenario-instance-type.js.map +1 -1
  217. package/dist-server/service/scenario-queue/index.d.ts +3 -0
  218. package/dist-server/service/scenario-queue/scenario-queue-subscription.d.ts +6 -0
  219. package/dist-server/service/scenario-queue/scenario-queue-subscription.js +2 -2
  220. package/dist-server/service/scenario-queue/scenario-queue-subscription.js.map +1 -1
  221. package/dist-server/service/scenario-queue/scenario-queue-type.d.ts +11 -0
  222. package/dist-server/service/scenario-queue/scenario-queue-type.js +4 -4
  223. package/dist-server/service/scenario-queue/scenario-queue-type.js.map +1 -1
  224. package/dist-server/service/state-register/index.d.ts +6 -0
  225. package/dist-server/service/state-register/state-register-mutation.d.ts +11 -0
  226. package/dist-server/service/state-register/state-register-mutation.js +2 -2
  227. package/dist-server/service/state-register/state-register-mutation.js.map +1 -1
  228. package/dist-server/service/state-register/state-register-query.d.ts +14 -0
  229. package/dist-server/service/state-register/state-register-query.js +3 -3
  230. package/dist-server/service/state-register/state-register-query.js.map +1 -1
  231. package/dist-server/service/state-register/state-register-type.d.ts +23 -0
  232. package/dist-server/service/state-register/state-register-type.js +6 -6
  233. package/dist-server/service/state-register/state-register-type.js.map +1 -1
  234. package/dist-server/service/state-register/state-register.d.ts +22 -0
  235. package/dist-server/service/state-register/state-register.js +2 -2
  236. package/dist-server/service/state-register/state-register.js.map +1 -1
  237. package/dist-server/service/step/index.d.ts +5 -0
  238. package/dist-server/service/step/step-mutation.d.ts +5 -0
  239. package/dist-server/service/step/step-mutation.js +2 -2
  240. package/dist-server/service/step/step-mutation.js.map +1 -1
  241. package/dist-server/service/step/step-query.d.ts +12 -0
  242. package/dist-server/service/step/step-query.js +3 -3
  243. package/dist-server/service/step/step-query.js.map +1 -1
  244. package/dist-server/service/step/step-type.d.ts +111 -0
  245. package/dist-server/service/step/step-type.js +8 -8
  246. package/dist-server/service/step/step-type.js.map +1 -1
  247. package/dist-server/service/task-type/index.d.ts +3 -0
  248. package/dist-server/service/task-type/task-type-query.d.ts +6 -0
  249. package/dist-server/service/task-type/task-type-query.js +2 -2
  250. package/dist-server/service/task-type/task-type-query.js.map +1 -1
  251. package/dist-server/service/task-type/task-type-type.d.ts +12 -0
  252. package/dist-server/service/task-type/task-type-type.js +4 -4
  253. package/dist-server/service/task-type/task-type-type.js.map +1 -1
  254. package/dist-server/tsconfig.tsbuildinfo +1 -1
  255. package/helps/integration/connector/mssql-connector.ja.md +10 -6
  256. package/helps/integration/connector/mssql-connector.ko.md +10 -6
  257. package/helps/integration/connector/mssql-connector.md +10 -6
  258. package/helps/integration/connector/mssql-connector.ms.md +10 -6
  259. package/helps/integration/connector/mssql-connector.zh.md +10 -6
  260. package/helps/integration/connector/operato-connector.ja.md +0 -3
  261. package/package.json +11 -10
  262. package/server/controllers/scenario-controller.ts +55 -19
  263. package/server/engine/index.ts +1 -1
  264. package/server/engine/types.ts +2 -2
  265. package/server/restful/unstable/run-scenario.ts +0 -1
  266. package/server/routers/scenario-schedule-callback-router.ts +2 -2
  267. package/server/service/connection/connection-query.ts +13 -4
  268. package/server/service/payload-log/payload-log-query.ts +4 -1
  269. package/server/service/payload-log/payload-log.ts +2 -2
  270. package/server/service/scenario/scenario-query.ts +1 -1
  271. package/server/service/scenario/scenario-type.ts +6 -0
  272. package/server/service/scenario/scenario.ts +6 -2
  273. package/server/service/scenario-instance/scenario-instance-mutation.ts +7 -4
  274. package/server/service/scenario-instance/scenario-instance-query.ts +4 -30
  275. package/server/service/scenario-instance/scenario-instance-type.ts +87 -9
  276. package/server/service/state-register/state-register-query.ts +4 -1
  277. package/server/service/step/step-query.ts +1 -1
  278. package/server/service/step/step-type.ts +22 -22
@@ -0,0 +1,27 @@
1
+ import 'cross-fetch/polyfill';
2
+ import { Connector } from '../types';
3
+ import { InputConnection } from '../../service/connection/connection-type';
4
+ import { ScenarioInstance } from '../../service/scenario-instance/scenario-instance-type';
5
+ export declare const GRAPHQL_URI = "/graphql";
6
+ export declare const SUBSCRIPTION_URI = "/graphql";
7
+ interface SubscriberData {
8
+ tag: string;
9
+ scenario: any;
10
+ subscriptionObserver: any;
11
+ }
12
+ export declare class OperatoConnector implements Connector {
13
+ private context;
14
+ ready(connectionConfigs: InputConnection[]): Promise<void>;
15
+ connect(connection: InputConnection): Promise<void>;
16
+ disconnect(connection: InputConnection): Promise<void>;
17
+ runScenario(subscriptions: SubscriberData[], variables: any): Promise<ScenarioInstance>;
18
+ get parameterSpec(): {
19
+ type: string;
20
+ name: string;
21
+ label: string;
22
+ }[];
23
+ get taskPrefixes(): string[];
24
+ get help(): string;
25
+ get description(): string;
26
+ }
27
+ export {};
@@ -22,7 +22,7 @@ const defaultOptions = {
22
22
  errorPolicy: 'ignore'
23
23
  },
24
24
  query: {
25
- fetchPolicy: 'no-cache',
25
+ fetchPolicy: 'no-cache', //'network-only'
26
26
  errorPolicy: 'all'
27
27
  },
28
28
  mutate: {
@@ -1 +1 @@
1
- {"version":3,"file":"operato-connector.js","sourceRoot":"","sources":["../../../server/engine/connector/operato-connector.ts"],"names":[],"mappings":"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","sourcesContent":["import 'cross-fetch/polyfill'\n\nimport { ApolloClient, InMemoryCache, createHttpLink, split } from '@apollo/client/core'\nimport { setContext } from '@apollo/client/link/context'\n\nimport WebSocket from 'ws'\nimport { createClient } from 'graphql-ws'\nimport { GraphQLWsLink } from '@apollo/client/link/subscriptions'\nimport { getMainDefinition } from '@apollo/client/utilities'\nimport gql from 'graphql-tag'\n\nimport { ConnectionManager } from '../connection-manager'\nimport { Connector } from '../types'\nimport { InputConnection } from '../../service/connection/connection-type'\n\nimport { Scenario } from '../../service/scenario/scenario'\nimport { ScenarioInstance } from '../../service/scenario-instance/scenario-instance-type'\n\nimport { getRepository, GraphqlLocalClient, Domain } from '@things-factory/shell'\nimport { User, checkPermission } from '@things-factory/auth-base'\n\nconst debug = require('debug')('things-factory:integration-base:operato-connector')\n\nconst defaultOptions: any = {\n watchQuery: {\n fetchPolicy: 'no-cache',\n errorPolicy: 'ignore'\n },\n query: {\n fetchPolicy: 'no-cache', //'network-only'\n errorPolicy: 'all'\n },\n mutate: {\n errorPolicy: 'all'\n }\n}\n\nexport const GRAPHQL_URI = '/graphql'\nexport const SUBSCRIPTION_URI = GRAPHQL_URI\n\ninterface SubscriberData {\n tag: string\n scenario: any\n subscriptionObserver: any\n}\n\nexport class OperatoConnector implements Connector {\n private context: any\n\n async ready(connectionConfigs: InputConnection[]) {\n await Promise.all(connectionConfigs.map(this.connect.bind(this)))\n\n ConnectionManager.logger.info('operato-connector connections are ready')\n }\n\n async connect(connection: InputConnection) {\n const {\n endpoint: uri,\n params: { authKey, domain, subscriptionHandlers = {} }\n } = connection\n\n if (!authKey || !domain) {\n throw new Error('some connection paramter missing.')\n }\n\n const domainOwner = await getRepository(User).findOne({\n where: {\n id: connection.domain.owner\n }\n })\n\n this.context = {\n domain: connection.domain,\n user: domainOwner\n /* TODO: domainOwner 대신 특정 유저를 지정할 수 있도록 개선해야함. 모든 커넥션에 유저를 지정하는 기능으로 일반화할 필요가 있는 지 고민해야함 */\n }\n\n const httpLink = createHttpLink({\n uri: uri\n })\n\n /* \n CHECKPOINT: \n 1. GraphqQLWsLink를 사용하면 setContext를 통한 추가 헤더 설정이 무시됩니다.\n 따라서, GraphQLWsLink를 사용하려면, connectionParams를 통해 헤더를 설정해야 합니다.\n \n 2. 서버에서 실행시, webSocketImpl을 명시적으로 지정해야 합니다.\n */\n const wsLink = new GraphQLWsLink(\n createClient({\n url: uri.replace(/^http/, 'ws'),\n keepAlive: 10_000,\n retryAttempts: 1_000_000,\n shouldRetry: e => true,\n webSocketImpl: WebSocket,\n connectionParams: {\n headers: {\n 'x-things-factory-domain': domain,\n authorization: authKey ? `Bearer ${authKey}` : ''\n }\n }\n })\n )\n\n const splitLink = split(\n ({ query }) => {\n const def = getMainDefinition(query)\n return def.kind === 'OperationDefinition' && def.operation === 'subscription'\n },\n wsLink,\n setContext((_, { headers }) => {\n return {\n headers: {\n ...headers,\n 'x-things-factory-domain': domain,\n authorization: authKey ? `Bearer ${authKey}` : ''\n }\n }\n }).concat(httpLink)\n )\n\n const cache = new InMemoryCache({\n addTypename: false\n })\n\n const client = new ApolloClient({\n defaultOptions,\n cache,\n link: splitLink\n })\n\n const subscriptions: SubscriberData[] = []\n Object.keys(subscriptionHandlers).forEach(async tag => {\n if (!tag || !subscriptionHandlers[tag]) return\n\n const scenarioName = subscriptionHandlers[tag]\n\n // fetch a scenario\n const selectedScenario = await getRepository(Scenario).findOne({\n where: {\n name: scenarioName\n },\n relations: ['steps', 'domain']\n })\n\n const subscription = client.subscribe({\n query: gql`\n subscription {\n data(tag: \"${tag}\") {\n tag\n data\n }\n }\n `\n })\n\n const subscriptionObserver = subscription.subscribe({\n next: async data => {\n debug('received pubsub msg.:', data?.data)\n await this.runScenario(subscriptions, data?.data?.data)\n },\n error: error => {\n ConnectionManager.logger.error(`(${connection.name}:${connection.endpoint}) subscription error: ${error}`)\n },\n complete: () => {\n ConnectionManager.logger.info(`(${connection.name}:${connection.endpoint}) subscription complete`)\n }\n })\n\n ConnectionManager.logger.info(`(${connection.name}:${connection.endpoint}) subscription closed flag: ${subscriptionObserver.closed}`)\n\n subscriptions.push({\n tag,\n scenario: selectedScenario,\n subscriptionObserver\n })\n ConnectionManager.logger.info(`(${tag}:${scenarioName}) subscription closed flag: ${subscriptionObserver.closed}`)\n })\n\n client['subscriptions'] = subscriptions\n ConnectionManager.addConnectionInstance(connection, client)\n\n ConnectionManager.logger.info(`operato-connector connection(${connection.name}:${connection.endpoint}) is connected`)\n }\n\n async disconnect(connection: InputConnection) {\n const client = ConnectionManager.getConnectionInstance(connection)\n const subscriptions: SubscriberData[] = client['subscriptions']\n subscriptions.forEach(subscription => subscription.subscriptionObserver.unsubscribe())\n client.stop()\n ConnectionManager.removeConnectionInstance(connection)\n\n ConnectionManager.logger.info(`operato-connector connection(${connection.name}) is disconnected`)\n }\n\n async runScenario(subscriptions: SubscriberData[], variables: any): Promise<ScenarioInstance> {\n const { domain, user, unsafeIP, prohibitedPrivileges } = this.context\n const { tag } = variables\n\n if (!tag) {\n throw new Error(`tag is invalid - ${tag}`)\n }\n\n const scenario = subscriptions.find(subscription => subscription.tag === tag)?.scenario\n if (!scenario) {\n throw new Error(`scenario is not found - ${tag}`)\n }\n\n if (!(await checkPermission(scenario.privilege, user, domain, unsafeIP, prohibitedPrivileges))) {\n const { category, privilege } = scenario.privilege || {}\n throw new Error(`Unauthorized! ${category && privilege ? category + ':' + privilege + ' privilege' : 'ownership granted'} required`)\n }\n\n /* create a scenario instance */\n const instanceName = scenario.name + '-' + String(Date.now())\n const instance = new ScenarioInstance(instanceName, scenario, {\n user,\n domain,\n variables,\n client: GraphqlLocalClient.client\n })\n\n // run scenario\n await instance.run()\n return instance\n }\n\n get parameterSpec() {\n return [\n {\n type: 'string',\n name: 'authKey',\n label: 'auth-key'\n },\n {\n type: 'string',\n name: 'domain',\n label: 'domain'\n },\n {\n type: 'tag-scenarios',\n name: 'subscriptionHandlers',\n label: 'subscription-handlers'\n }\n ]\n }\n\n get taskPrefixes() {\n return ['graphql']\n }\n\n get help() {\n return 'integration/connector/operato-connector'\n }\n\n get description() {\n return 'Operato Graphql Connector'\n }\n}\n\nConnectionManager.registerConnector('operato-connector', new OperatoConnector())\n"]}
1
+ {"version":3,"file":"operato-connector.js","sourceRoot":"","sources":["../../../server/engine/connector/operato-connector.ts"],"names":[],"mappings":"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","sourcesContent":["import 'cross-fetch/polyfill'\n\nimport { ApolloClient, InMemoryCache, createHttpLink, split } from '@apollo/client/core'\nimport { setContext } from '@apollo/client/link/context'\n\nimport WebSocket from 'ws'\nimport { createClient } from 'graphql-ws'\nimport { GraphQLWsLink } from '@apollo/client/link/subscriptions'\nimport { getMainDefinition } from '@apollo/client/utilities'\nimport gql from 'graphql-tag'\n\nimport { ConnectionManager } from '../connection-manager'\nimport { Connector } from '../types'\nimport { InputConnection } from '../../service/connection/connection-type'\n\nimport { Scenario } from '../../service/scenario/scenario'\nimport { ScenarioInstance } from '../../service/scenario-instance/scenario-instance-type'\n\nimport { getRepository, GraphqlLocalClient, Domain } from '@things-factory/shell'\nimport { User, checkPermission } from '@things-factory/auth-base'\n\nconst debug = require('debug')('things-factory:integration-base:operato-connector')\n\nconst defaultOptions: any = {\n watchQuery: {\n fetchPolicy: 'no-cache',\n errorPolicy: 'ignore'\n },\n query: {\n fetchPolicy: 'no-cache', //'network-only'\n errorPolicy: 'all'\n },\n mutate: {\n errorPolicy: 'all'\n }\n}\n\nexport const GRAPHQL_URI = '/graphql'\nexport const SUBSCRIPTION_URI = GRAPHQL_URI\n\ninterface SubscriberData {\n tag: string\n scenario: any\n subscriptionObserver: any\n}\n\nexport class OperatoConnector implements Connector {\n private context: any\n\n async ready(connectionConfigs: InputConnection[]) {\n await Promise.all(connectionConfigs.map(this.connect.bind(this)))\n\n ConnectionManager.logger.info('operato-connector connections are ready')\n }\n\n async connect(connection: InputConnection) {\n const {\n endpoint: uri,\n params: { authKey, domain, subscriptionHandlers = {} }\n } = connection\n\n if (!authKey || !domain) {\n throw new Error('some connection paramter missing.')\n }\n\n const domainOwner = await getRepository(User).findOne({\n where: {\n id: connection.domain.owner\n }\n })\n\n this.context = {\n domain: connection.domain,\n user: domainOwner\n /* TODO: domainOwner 대신 특정 유저를 지정할 수 있도록 개선해야함. 모든 커넥션에 유저를 지정하는 기능으로 일반화할 필요가 있는 지 고민해야함 */\n }\n\n const httpLink = createHttpLink({\n uri: uri\n })\n\n /* \n CHECKPOINT: \n 1. GraphqQLWsLink를 사용하면 setContext를 통한 추가 헤더 설정이 무시됩니다.\n 따라서, GraphQLWsLink를 사용하려면, connectionParams를 통해 헤더를 설정해야 합니다.\n \n 2. 서버에서 실행시, webSocketImpl을 명시적으로 지정해야 합니다.\n */\n const wsLink = new GraphQLWsLink(\n createClient({\n url: uri.replace(/^http/, 'ws'),\n keepAlive: 10_000,\n retryAttempts: 1_000_000,\n shouldRetry: e => true,\n webSocketImpl: WebSocket,\n connectionParams: {\n headers: {\n 'x-things-factory-domain': domain,\n authorization: authKey ? `Bearer ${authKey}` : ''\n }\n }\n })\n )\n\n const splitLink = split(\n ({ query }) => {\n const def = getMainDefinition(query)\n return def.kind === 'OperationDefinition' && def.operation === 'subscription'\n },\n wsLink,\n setContext((_, { headers }) => {\n return {\n headers: {\n ...headers,\n 'x-things-factory-domain': domain,\n authorization: authKey ? `Bearer ${authKey}` : ''\n }\n }\n }).concat(httpLink)\n )\n\n const cache = new InMemoryCache({\n addTypename: false\n })\n\n const client = new ApolloClient({\n defaultOptions,\n cache,\n link: splitLink\n })\n\n const subscriptions: SubscriberData[] = []\n Object.keys(subscriptionHandlers).forEach(async tag => {\n if (!tag || !subscriptionHandlers[tag]) return\n\n const scenarioName = subscriptionHandlers[tag]\n\n // fetch a scenario\n const selectedScenario = await getRepository(Scenario).findOne({\n where: {\n name: scenarioName\n },\n relations: ['steps', 'domain']\n })\n\n const subscription = client.subscribe({\n query: gql`\n subscription {\n data(tag: \"${tag}\") {\n tag\n data\n }\n }\n `\n })\n\n const subscriptionObserver = subscription.subscribe({\n next: async data => {\n debug('received pubsub msg.:', data?.data)\n await this.runScenario(subscriptions, data?.data?.data)\n },\n error: error => {\n ConnectionManager.logger.error(`(${connection.name}:${connection.endpoint}) subscription error: ${error}`)\n },\n complete: () => {\n ConnectionManager.logger.info(`(${connection.name}:${connection.endpoint}) subscription complete`)\n }\n })\n\n ConnectionManager.logger.info(`(${connection.name}:${connection.endpoint}) subscription closed flag: ${subscriptionObserver.closed}`)\n\n subscriptions.push({\n tag,\n scenario: selectedScenario,\n subscriptionObserver\n })\n ConnectionManager.logger.info(`(${tag}:${scenarioName}) subscription closed flag: ${subscriptionObserver.closed}`)\n })\n\n client['subscriptions'] = subscriptions\n ConnectionManager.addConnectionInstance(connection, client)\n\n ConnectionManager.logger.info(`operato-connector connection(${connection.name}:${connection.endpoint}) is connected`)\n }\n\n async disconnect(connection: InputConnection) {\n const client = ConnectionManager.getConnectionInstance(connection)\n const subscriptions: SubscriberData[] = client['subscriptions']\n subscriptions.forEach(subscription => subscription.subscriptionObserver.unsubscribe())\n client.stop()\n ConnectionManager.removeConnectionInstance(connection)\n\n ConnectionManager.logger.info(`operato-connector connection(${connection.name}) is disconnected`)\n }\n\n async runScenario(subscriptions: SubscriberData[], variables: any): Promise<ScenarioInstance> {\n const { domain, user, unsafeIP, prohibitedPrivileges } = this.context\n const { tag } = variables\n\n if (!tag) {\n throw new Error(`tag is invalid - ${tag}`)\n }\n\n const scenario = subscriptions.find(subscription => subscription.tag === tag)?.scenario\n if (!scenario) {\n throw new Error(`scenario is not found - ${tag}`)\n }\n\n if (!(await checkPermission(scenario.privilege, user, domain, unsafeIP, prohibitedPrivileges))) {\n const { category, privilege } = scenario.privilege || {}\n throw new Error(`Unauthorized! ${category && privilege ? category + ':' + privilege + ' privilege' : 'ownership granted'} required`)\n }\n\n /* create a scenario instance */\n const instanceName = scenario.name + '-' + String(Date.now())\n const instance = new ScenarioInstance(instanceName, scenario, {\n user,\n domain,\n variables,\n client: GraphqlLocalClient.client\n })\n\n // run scenario\n await instance.run()\n return instance\n }\n\n get parameterSpec() {\n return [\n {\n type: 'string',\n name: 'authKey',\n label: 'auth-key'\n },\n {\n type: 'string',\n name: 'domain',\n label: 'domain'\n },\n {\n type: 'tag-scenarios',\n name: 'subscriptionHandlers',\n label: 'subscription-handlers'\n }\n ]\n }\n\n get taskPrefixes() {\n return ['graphql']\n }\n\n get help() {\n return 'integration/connector/operato-connector'\n }\n\n get description() {\n return 'Operato Graphql Connector'\n }\n}\n\nConnectionManager.registerConnector('operato-connector', new OperatoConnector())\n"]}
@@ -0,0 +1,29 @@
1
+ import { Connector } from '../types';
2
+ import { InputConnection } from '../../service/connection/connection-type';
3
+ export declare class OracleConnector implements Connector {
4
+ ready(connectionConfigs: InputConnection[]): Promise<void>;
5
+ recreatePool(connection: InputConnection): Promise<void>;
6
+ connect(connection: InputConnection): Promise<void>;
7
+ disconnect(connection: InputConnection): Promise<void>;
8
+ get parameterSpec(): ({
9
+ type: string;
10
+ name: string;
11
+ label: string;
12
+ placeholder?: undefined;
13
+ value?: undefined;
14
+ } | {
15
+ type: string;
16
+ name: string;
17
+ placeholder: string;
18
+ label: string;
19
+ value?: undefined;
20
+ } | {
21
+ type: string;
22
+ name: string;
23
+ placeholder: string;
24
+ label: string;
25
+ value: number;
26
+ })[];
27
+ get taskPrefixes(): string[];
28
+ get help(): string;
29
+ }
@@ -1 +1 @@
1
- {"version":3,"file":"oracle-connector.js","sourceRoot":"","sources":["../../../server/engine/connector/oracle-connector.ts"],"names":[],"mappings":"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","sourcesContent":["import { logger } from '@things-factory/env'\n\nimport { ConnectionManager } from '../connection-manager'\nimport { Connector } from '../types'\nimport { InputConnection } from '../../service/connection/connection-type'\n\ntry {\n var oracledb = require('oracledb')\n} catch (err) {\n logger.error('oracledb module loading failed')\n}\n\nexport class OracleConnector implements Connector {\n async ready(connectionConfigs: InputConnection[]) {\n await Promise.all(connectionConfigs.map(this.connect))\n\n ConnectionManager.logger.info('oracle-connector connections are ready')\n }\n\n async recreatePool(connection: InputConnection) {\n const {\n name,\n endpoint,\n params: { user, password, database, poolMin, poolMax, poolIncrement },\n domain\n } = connection\n\n if (!oracledb) {\n throw new Error('oracledb module loading failed')\n }\n\n const poolAlias = `${domain.name}-${name}`\n await oracledb.getPool(poolAlias).close(10)\n await oracledb.createPool({\n user,\n password,\n // when oracle not using default port must add connection string with port like localhost:port\n connectString: `${endpoint.trim()}/${database}`,\n poolMin,\n poolMax,\n poolIncrement,\n poolAlias\n })\n\n ConnectionManager.logger.info(`Oracle Database(${connection.name}:${database}) at ${endpoint} recreated.`)\n }\n\n async connect(connection: InputConnection) {\n const {\n name,\n endpoint,\n params: { user, password, database, poolMin, poolMax, poolIncrement },\n domain\n } = connection\n\n if (!oracledb) {\n throw new Error('oracledb module loading failed')\n }\n\n const poolAlias = `${domain.name}-${name}`\n\n var enableStatistics = true\n const pool = await oracledb.createPool({\n user,\n password,\n // when oracle not using default port must add connection string with port like localhost:port\n connectString: `${endpoint.trim()}/${database}`,\n poolMin,\n poolMax,\n poolIncrement,\n poolAlias,\n enableStatistics\n })\n \n ConnectionManager.addConnectionInstance(connection, {\n query: async (query, params) => {\n let dbConnection: any = {}\n let taskResult: any = {}\n try {\n dbConnection = await oracledb.getConnection(poolAlias)\n\n taskResult = (\n await dbConnection.execute(query, params, {\n outFormat: oracledb.OBJECT\n })\n ).rows\n } catch (e) {\n if (e.name === 'Error' && e.message.includes('NJS-040')) {\n await this.recreatePool(connection)\n }\n throw e\n }\n finally {\n await dbConnection.close()\n }\n return taskResult\n \n },\n execute: async (procedure, params) => {\n let dbConnection: any = {}\n let taskResult: any = {}\n try {\n // TODO: need to check if this is available when procedure string is a common query.\n procedure = `BEGIN\n ${procedure}\n END;`\n dbConnection = await oracledb.getConnection(poolAlias)\n \n // console.log('\\n************* stat after get ****************')\n // await oracledb.getPool(poolAlias).logStatistics()\n\n const result = await dbConnection.execute(procedure, params, {\n outFormat: oracledb.OBJECT\n })\n\n let paramKeys = Object.keys(params)\n\n for (const paramKey of paramKeys) {\n if (params[paramKey].dir === oracledb?.BIND_OUT) {\n if (params[paramKey].type === oracledb?.CURSOR) {\n const resultSetTemp = result.outBinds[paramKey]\n taskResult[paramKey] = await resultSetTemp.getRows()\n await resultSetTemp.close()\n } else {\n taskResult[paramKey] = result.outBinds[paramKey]\n }\n }\n }\n } catch (e) {\n if (e.name === 'Error' && e.message.includes('NJS-040')) {\n await this.recreatePool(connection)\n }\n throw e\n }\n finally {\n await dbConnection.close()\n\n // console.log('\\n************* stat after close ****************')\n // await oracledb.getPool(poolAlias).logStatistics()\n }\n return taskResult\n },\n close: async () => {\n await oracledb.getPool(poolAlias).close(10)\n }\n })\n\n ConnectionManager.logger.info(`Oracle Database(${connection.name}:${database}) at ${endpoint} connected.`)\n }\n\n async disconnect(connection: InputConnection) {\n var client = ConnectionManager.getConnectionInstance(connection)\n\n try {\n await client.close()\n ConnectionManager.logger.info(`Oracle Database(${connection.name}) closed.`)\n } catch (e) {\n ConnectionManager.logger.error(e)\n }\n\n ConnectionManager.removeConnectionInstance(connection)\n }\n\n get parameterSpec() {\n return [\n {\n type: 'string',\n name: 'user',\n label: 'user'\n },\n {\n type: 'password',\n name: 'password',\n label: 'password'\n },\n {\n type: 'string',\n name: 'database',\n placeholder: 'SID',\n label: 'database'\n },\n {\n type: 'number',\n name: 'poolMin',\n placeholder: 'minimum connection-pool size',\n label: 'pool-min',\n value: 0\n },\n {\n type: 'number',\n name: 'poolMax',\n placeholder: 'maximum connection-pool size',\n label: 'pool-max',\n value: 4\n },\n {\n type: 'number',\n name: 'poolIncrement',\n placeholder: 'connection incremental size',\n label: 'pool-increment',\n value: 1\n }\n ]\n }\n\n get taskPrefixes() {\n return ['database', 'oracle']\n }\n\n get help() {\n return 'integration/connector/oracle-connector'\n }\n}\n\nConnectionManager.registerConnector('oracle-connector', new OracleConnector())\n\n// need reference:\n// https://download.oracle.com/otn_software/mac/instantclient/193000/instantclient-basiclite-macos.x64-19.3.0.0.0dbru.zip\n// https://node-oracledb.readthedocs.io/en/latest/index.html\n\n// docker pull store/oracle/database-instantclient:12.2.0.1\n"]}
1
+ {"version":3,"file":"oracle-connector.js","sourceRoot":"","sources":["../../../server/engine/connector/oracle-connector.ts"],"names":[],"mappings":"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","sourcesContent":["import { logger } from '@things-factory/env'\n\nimport { ConnectionManager } from '../connection-manager'\nimport { Connector } from '../types'\nimport { InputConnection } from '../../service/connection/connection-type'\n\ntry {\n var oracledb = require('oracledb')\n} catch (err) {\n logger.error('oracledb module loading failed')\n}\n\nexport class OracleConnector implements Connector {\n async ready(connectionConfigs: InputConnection[]) {\n await Promise.all(connectionConfigs.map(this.connect))\n\n ConnectionManager.logger.info('oracle-connector connections are ready')\n }\n\n async recreatePool(connection: InputConnection) {\n const {\n name,\n endpoint,\n params: { user, password, database, poolMin, poolMax, poolIncrement },\n domain\n } = connection\n\n if (!oracledb) {\n throw new Error('oracledb module loading failed')\n }\n\n const poolAlias = `${domain.name}-${name}`\n await oracledb.getPool(poolAlias).close(10)\n await oracledb.createPool({\n user,\n password,\n // when oracle not using default port must add connection string with port like localhost:port\n connectString: `${endpoint.trim()}/${database}`,\n poolMin,\n poolMax,\n poolIncrement,\n poolAlias\n })\n\n ConnectionManager.logger.info(`Oracle Database(${connection.name}:${database}) at ${endpoint} recreated.`)\n }\n\n async connect(connection: InputConnection) {\n const {\n name,\n endpoint,\n params: { user, password, database, poolMin, poolMax, poolIncrement },\n domain\n } = connection\n\n if (!oracledb) {\n throw new Error('oracledb module loading failed')\n }\n\n const poolAlias = `${domain.name}-${name}`\n\n var enableStatistics = true\n const pool = await oracledb.createPool({\n user,\n password,\n // when oracle not using default port must add connection string with port like localhost:port\n connectString: `${endpoint.trim()}/${database}`,\n poolMin,\n poolMax,\n poolIncrement,\n poolAlias,\n enableStatistics\n })\n \n ConnectionManager.addConnectionInstance(connection, {\n query: async (query, params) => {\n let dbConnection: any = {}\n let taskResult: any = {}\n try {\n dbConnection = await oracledb.getConnection(poolAlias)\n\n taskResult = (\n await dbConnection.execute(query, params, {\n outFormat: oracledb.OBJECT\n })\n ).rows\n } catch (e) {\n if (e.name === 'Error' && e.message.includes('NJS-040')) {\n await this.recreatePool(connection)\n }\n throw e\n }\n finally {\n await dbConnection.close()\n }\n return taskResult\n \n },\n execute: async (procedure, params) => {\n let dbConnection: any = {}\n let taskResult: any = {}\n try {\n // TODO: need to check if this is available when procedure string is a common query.\n procedure = `BEGIN\n ${procedure}\n END;`\n dbConnection = await oracledb.getConnection(poolAlias)\n \n // console.log('\\n************* stat after get ****************')\n // await oracledb.getPool(poolAlias).logStatistics()\n\n const result = await dbConnection.execute(procedure, params, {\n outFormat: oracledb.OBJECT\n })\n\n let paramKeys = Object.keys(params)\n\n for (const paramKey of paramKeys) {\n if (params[paramKey].dir === oracledb?.BIND_OUT) {\n if (params[paramKey].type === oracledb?.CURSOR) {\n const resultSetTemp = result.outBinds[paramKey]\n taskResult[paramKey] = await resultSetTemp.getRows()\n await resultSetTemp.close()\n } else {\n taskResult[paramKey] = result.outBinds[paramKey]\n }\n }\n }\n } catch (e) {\n if (e.name === 'Error' && e.message.includes('NJS-040')) {\n await this.recreatePool(connection)\n }\n throw e\n }\n finally {\n await dbConnection.close()\n\n // console.log('\\n************* stat after close ****************')\n // await oracledb.getPool(poolAlias).logStatistics()\n }\n return taskResult\n },\n close: async () => {\n await oracledb.getPool(poolAlias).close(10)\n }\n })\n\n ConnectionManager.logger.info(`Oracle Database(${connection.name}:${database}) at ${endpoint} connected.`)\n }\n\n async disconnect(connection: InputConnection) {\n var client = ConnectionManager.getConnectionInstance(connection)\n\n try {\n await client.close()\n ConnectionManager.logger.info(`Oracle Database(${connection.name}) closed.`)\n } catch (e) {\n ConnectionManager.logger.error(e)\n }\n\n ConnectionManager.removeConnectionInstance(connection)\n }\n\n get parameterSpec() {\n return [\n {\n type: 'string',\n name: 'user',\n label: 'user'\n },\n {\n type: 'password',\n name: 'password',\n label: 'password'\n },\n {\n type: 'string',\n name: 'database',\n placeholder: 'SID',\n label: 'database'\n },\n {\n type: 'number',\n name: 'poolMin',\n placeholder: 'minimum connection-pool size',\n label: 'pool-min',\n value: 0\n },\n {\n type: 'number',\n name: 'poolMax',\n placeholder: 'maximum connection-pool size',\n label: 'pool-max',\n value: 4\n },\n {\n type: 'number',\n name: 'poolIncrement',\n placeholder: 'connection incremental size',\n label: 'pool-increment',\n value: 1\n }\n ]\n }\n\n get taskPrefixes() {\n return ['database', 'oracle']\n }\n\n get help() {\n return 'integration/connector/oracle-connector'\n }\n}\n\nConnectionManager.registerConnector('oracle-connector', new OracleConnector())\n\n// need reference:\n// https://download.oracle.com/otn_software/mac/instantclient/193000/instantclient-basiclite-macos.x64-19.3.0.0.0dbru.zip\n// https://node-oracledb.readthedocs.io/en/latest/index.html\n\n// docker pull store/oracle/database-instantclient:12.2.0.1\n"]}
@@ -0,0 +1,14 @@
1
+ import { Connector } from '../types';
2
+ import { InputConnection } from '../../service/connection/connection-type';
3
+ export declare class PostgresqlConnector implements Connector {
4
+ ready(connectionConfigs: InputConnection[]): Promise<void>;
5
+ connect(connection: InputConnection): Promise<void>;
6
+ disconnect(connection: InputConnection): Promise<void>;
7
+ get parameterSpec(): {
8
+ type: string;
9
+ name: string;
10
+ label: string;
11
+ }[];
12
+ get taskPrefixes(): string[];
13
+ get help(): string;
14
+ }
@@ -1 +1 @@
1
- {"version":3,"file":"postgresql-connector.js","sourceRoot":"","sources":["../../../server/engine/connector/postgresql-connector.ts"],"names":[],"mappings":"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","sourcesContent":["import { logger } from '@things-factory/env'\n\nimport { ConnectionManager } from '../connection-manager'\nimport { Connector } from '../types'\nimport { InputConnection } from '../../service/connection/connection-type'\n\ntry {\n var { Client } = require('pg')\n} catch (err) {\n logger.error('postgresql module loading failed')\n}\n\nexport class PostgresqlConnector implements Connector {\n async ready(connectionConfigs: InputConnection[]) {\n await Promise.all(connectionConfigs.map(this.connect.bind(this)))\n\n ConnectionManager.logger.info('postgresql-connector connections are ready')\n }\n\n async connect(connection: InputConnection) {\n const {\n endpoint,\n params: { user, password, database }\n } = connection\n const [host, port = 5432] = endpoint.split(':')\n\n if (!Client) {\n throw new Error('postgresql module loading failed')\n }\n\n const client = new Client({\n user,\n host,\n database,\n password,\n port: Number(port)\n })\n\n client.on('error', async err => {\n // create a new database clinet and reconnect to server at an unexpected error\n this.connect(connection)\n })\n\n try {\n await client.connect()\n ConnectionManager.addConnectionInstance(connection, {\n query: async (query, params) => {\n return (await client.query(query, params)).rows\n },\n close: async () => {\n await client.end()\n }\n })\n\n ConnectionManager.logger.info(`PostgresSQL Database(${connection.name}:${database}) at ${endpoint} connected.`)\n } catch (e) {\n ConnectionManager.logger.error(\n `PostgresSQL Database(${connection.name}:${database}) at ${endpoint} not connected.\\ncause: ${e}`\n )\n }\n }\n\n async disconnect(connection: InputConnection) {\n var client = ConnectionManager.getConnectionInstance(connection)\n try {\n await client.close()\n ConnectionManager.logger.info(`PostgresSQL Database(${connection.name}) closed.`)\n } catch (e) {\n ConnectionManager.logger.error(e)\n }\n ConnectionManager.removeConnectionInstance(connection)\n }\n\n get parameterSpec() {\n return [\n {\n type: 'string',\n name: 'user',\n label: 'user'\n },\n {\n type: 'password',\n name: 'password',\n label: 'password'\n },\n {\n type: 'string',\n name: 'database',\n label: 'database'\n }\n ]\n }\n\n get taskPrefixes() {\n return ['database']\n }\n\n get help() {\n return 'integration/connector/postgresql-connector'\n }\n}\n\nConnectionManager.registerConnector('postgresql-connector', new PostgresqlConnector())\n"]}
1
+ {"version":3,"file":"postgresql-connector.js","sourceRoot":"","sources":["../../../server/engine/connector/postgresql-connector.ts"],"names":[],"mappings":"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","sourcesContent":["import { logger } from '@things-factory/env'\n\nimport { ConnectionManager } from '../connection-manager'\nimport { Connector } from '../types'\nimport { InputConnection } from '../../service/connection/connection-type'\n\ntry {\n var { Client } = require('pg')\n} catch (err) {\n logger.error('postgresql module loading failed')\n}\n\nexport class PostgresqlConnector implements Connector {\n async ready(connectionConfigs: InputConnection[]) {\n await Promise.all(connectionConfigs.map(this.connect.bind(this)))\n\n ConnectionManager.logger.info('postgresql-connector connections are ready')\n }\n\n async connect(connection: InputConnection) {\n const {\n endpoint,\n params: { user, password, database }\n } = connection\n const [host, port = 5432] = endpoint.split(':')\n\n if (!Client) {\n throw new Error('postgresql module loading failed')\n }\n\n const client = new Client({\n user,\n host,\n database,\n password,\n port: Number(port)\n })\n\n client.on('error', async err => {\n // create a new database clinet and reconnect to server at an unexpected error\n this.connect(connection)\n })\n\n try {\n await client.connect()\n ConnectionManager.addConnectionInstance(connection, {\n query: async (query, params) => {\n return (await client.query(query, params)).rows\n },\n close: async () => {\n await client.end()\n }\n })\n\n ConnectionManager.logger.info(`PostgresSQL Database(${connection.name}:${database}) at ${endpoint} connected.`)\n } catch (e) {\n ConnectionManager.logger.error(\n `PostgresSQL Database(${connection.name}:${database}) at ${endpoint} not connected.\\ncause: ${e}`\n )\n }\n }\n\n async disconnect(connection: InputConnection) {\n var client = ConnectionManager.getConnectionInstance(connection)\n try {\n await client.close()\n ConnectionManager.logger.info(`PostgresSQL Database(${connection.name}) closed.`)\n } catch (e) {\n ConnectionManager.logger.error(e)\n }\n ConnectionManager.removeConnectionInstance(connection)\n }\n\n get parameterSpec() {\n return [\n {\n type: 'string',\n name: 'user',\n label: 'user'\n },\n {\n type: 'password',\n name: 'password',\n label: 'password'\n },\n {\n type: 'string',\n name: 'database',\n label: 'database'\n }\n ]\n }\n\n get taskPrefixes() {\n return ['database']\n }\n\n get help() {\n return 'integration/connector/postgresql-connector'\n }\n}\n\nConnectionManager.registerConnector('postgresql-connector', new PostgresqlConnector())\n"]}
@@ -0,0 +1,15 @@
1
+ import { Connector } from '../types';
2
+ import { InputConnection } from '../../service/connection/connection-type';
3
+ /**
4
+ * This connector is a proxy connector installed on the edge server to manage connections from the host.
5
+ * It interacts with connections established on the edge server and provides synchronization functionality.
6
+ */
7
+ export declare class ProxyConnector implements Connector {
8
+ static instance: ProxyConnector;
9
+ ready(connectionConfigs: InputConnection[]): Promise<void>;
10
+ connect(connection: InputConnection): Promise<void>;
11
+ disconnect(connection: InputConnection): Promise<void>;
12
+ get parameterSpec(): any[];
13
+ get taskPrefixes(): any[];
14
+ get description(): string;
15
+ }
@@ -0,0 +1,9 @@
1
+ import { Connector } from '../types';
2
+ import { InputConnection } from '../../service/connection/connection-type';
3
+ export declare class SocketServer implements Connector {
4
+ ready(connectionConfigs: InputConnection[]): Promise<void>;
5
+ connect(config: InputConnection): Promise<void>;
6
+ disconnect(connection: InputConnection): Promise<void>;
7
+ get parameterSpec(): any[];
8
+ get taskPrefixes(): string[];
9
+ }
@@ -1 +1 @@
1
- {"version":3,"file":"socket-server.js","sourceRoot":"","sources":["../../../server/engine/connector/socket-server.ts"],"names":[],"mappings":"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","sourcesContent":["import net from 'net'\nimport { EventEmitter } from 'events'\n\nimport { Connector } from '../types'\nimport { ConnectionManager } from '../connection-manager'\nimport { InputConnection } from '../../service/connection/connection-type'\n\nexport class SocketServer implements Connector {\n // socket: any\n\n async ready(connectionConfigs: InputConnection[]) {\n await Promise.all(connectionConfigs.map(this.connect))\n ConnectionManager.logger.info('socket servers are ready')\n }\n\n async connect(config: InputConnection): Promise<void> {\n var em = new EventEmitter()\n var [host = '0.0.0.0', port = 8124] = config.endpoint.split(':')\n return new Promise((resolve, reject) => {\n var server = net.createServer(tcp => {\n ConnectionManager.logger.info('Client connection: ')\n ConnectionManager.logger.info(' local = %s:%s', tcp.localAddress, tcp.localPort)\n ConnectionManager.logger.info(' remote = %s:%s', tcp.remoteAddress, tcp.remotePort)\n tcp.on('data', (data: any) => {\n em['__tcp__'] = tcp\n var message = data.toString()\n message = message.replace('SB#', '')\n message = message.replace(/(\\r\\n|\\n|\\r)/gm, '')\n em.emit('socket-message-arrive', message)\n ConnectionManager.logger.info(`socket ${message}`)\n tcp.write('ok')\n })\n\n tcp.on('end', () => {\n ConnectionManager.logger.info('Client disconnected')\n })\n\n tcp.on('error', ex => {\n ConnectionManager.logger.info('Server socket error: ')\n var logger = ConnectionManager.logger\n let message = ex.stack ? ex.stack : ex\n let msg = typeof message == 'object' ? JSON.stringify(message, null, 2) : message\n logger.error(msg)\n reject(ex)\n })\n })\n\n server.listen(port, async () => {\n ConnectionManager.logger.info(`tcp echo server listening on ${host}:${port}`)\n\n /* default client connection */\n try {\n em['__server__'] = server\n ConnectionManager.addConnectionInstance(config, em)\n ConnectionManager.logger.info(`socket server connection(${config.name}:${config.endpoint}) is connected`)\n\n resolve()\n } catch (err) {\n ConnectionManager.logger.error(err)\n reject(err)\n }\n })\n })\n }\n\n async disconnect(connection: InputConnection) {\n let em = ConnectionManager.removeConnectionInstance(connection)\n var tcp = em['__tcp__']\n var server = em['__server__']\n\n tcp && (await tcp.destroy())\n server && (await server.close())\n\n ConnectionManager.logger.info(`socket server connection(${connection.name}) is disconnected`)\n }\n\n get parameterSpec() {\n return []\n }\n\n get taskPrefixes() {\n return ['socket']\n }\n}\n\nConnectionManager.registerConnector('socket-server', new SocketServer())\n"]}
1
+ {"version":3,"file":"socket-server.js","sourceRoot":"","sources":["../../../server/engine/connector/socket-server.ts"],"names":[],"mappings":"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","sourcesContent":["import net from 'net'\nimport { EventEmitter } from 'events'\n\nimport { Connector } from '../types'\nimport { ConnectionManager } from '../connection-manager'\nimport { InputConnection } from '../../service/connection/connection-type'\n\nexport class SocketServer implements Connector {\n // socket: any\n\n async ready(connectionConfigs: InputConnection[]) {\n await Promise.all(connectionConfigs.map(this.connect))\n ConnectionManager.logger.info('socket servers are ready')\n }\n\n async connect(config: InputConnection): Promise<void> {\n var em = new EventEmitter()\n var [host = '0.0.0.0', port = 8124] = config.endpoint.split(':')\n return new Promise((resolve, reject) => {\n var server = net.createServer(tcp => {\n ConnectionManager.logger.info('Client connection: ')\n ConnectionManager.logger.info(' local = %s:%s', tcp.localAddress, tcp.localPort)\n ConnectionManager.logger.info(' remote = %s:%s', tcp.remoteAddress, tcp.remotePort)\n tcp.on('data', (data: any) => {\n em['__tcp__'] = tcp\n var message = data.toString()\n message = message.replace('SB#', '')\n message = message.replace(/(\\r\\n|\\n|\\r)/gm, '')\n em.emit('socket-message-arrive', message)\n ConnectionManager.logger.info(`socket ${message}`)\n tcp.write('ok')\n })\n\n tcp.on('end', () => {\n ConnectionManager.logger.info('Client disconnected')\n })\n\n tcp.on('error', ex => {\n ConnectionManager.logger.info('Server socket error: ')\n var logger = ConnectionManager.logger\n let message = ex.stack ? ex.stack : ex\n let msg = typeof message == 'object' ? JSON.stringify(message, null, 2) : message\n logger.error(msg)\n reject(ex)\n })\n })\n\n server.listen(port, async () => {\n ConnectionManager.logger.info(`tcp echo server listening on ${host}:${port}`)\n\n /* default client connection */\n try {\n em['__server__'] = server\n ConnectionManager.addConnectionInstance(config, em)\n ConnectionManager.logger.info(`socket server connection(${config.name}:${config.endpoint}) is connected`)\n\n resolve()\n } catch (err) {\n ConnectionManager.logger.error(err)\n reject(err)\n }\n })\n })\n }\n\n async disconnect(connection: InputConnection) {\n let em = ConnectionManager.removeConnectionInstance(connection)\n var tcp = em['__tcp__']\n var server = em['__server__']\n\n tcp && (await tcp.destroy())\n server && (await server.close())\n\n ConnectionManager.logger.info(`socket server connection(${connection.name}) is disconnected`)\n }\n\n get parameterSpec() {\n return []\n }\n\n get taskPrefixes() {\n return ['socket']\n }\n}\n\nConnectionManager.registerConnector('socket-server', new SocketServer())\n"]}
@@ -0,0 +1,10 @@
1
+ import { Connector } from '../types';
2
+ import { InputConnection } from '../../service/connection/connection-type';
3
+ export declare class SqliteConnector implements Connector {
4
+ ready(connectionConfigs: InputConnection[]): Promise<void>;
5
+ connect(connection: InputConnection): Promise<void>;
6
+ disconnect(connection: InputConnection): Promise<void>;
7
+ get parameterSpec(): any[];
8
+ get taskPrefixes(): string[];
9
+ get help(): string;
10
+ }
@@ -1 +1 @@
1
- {"version":3,"file":"sqlite-connector.js","sourceRoot":"","sources":["../../../server/engine/connector/sqlite-connector.ts"],"names":[],"mappings":";;;AAAA,+BAAgC;AAEhC,6CAA4C;AAE5C,8DAAyD;AAKzD,IAAI;IACF,IAAI,OAAO,GAAG,OAAO,CAAC,SAAS,CAAC,CAAC,OAAO,EAAE,CAAA;CAC3C;AAAC,OAAO,GAAG,EAAE;IACZ,YAAM,CAAC,KAAK,CAAC,+BAA+B,CAAC,CAAA;CAC9C;AAED,MAAa,eAAe;IAC1B,KAAK,CAAC,KAAK,CAAC,iBAAoC;QAC9C,MAAM,OAAO,CAAC,GAAG,CAAC,iBAAiB,CAAC,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;QAEjE,sCAAiB,CAAC,MAAM,CAAC,IAAI,CAAC,wCAAwC,CAAC,CAAA;IACzE,CAAC;IAED,KAAK,CAAC,OAAO,CAAC,UAA2B;QACvC,IAAI,EAAE,QAAQ,EAAE,GAAG,UAAU,CAAA;QAE7B,IAAI,CAAC,OAAO,EAAE;YACZ,MAAM,IAAI,KAAK,CAAC,+BAA+B,CAAC,CAAA;SACjD;QAED,IAAI,QAAQ,GAAG,IAAI,OAAO,CAAC,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC,cAAc,EAAE,GAAG,CAAC,EAAE;YAC1E,IAAI,GAAG,EAAE;gBACP,sCAAiB,CAAC,MAAM,CAAC,KAAK,CAC5B,mBAAmB,UAAU,CAAC,IAAI,QAAQ,QAAQ,2BAA2B,GAAG,EAAE,CACnF,CAAA;gBACD,OAAM;aACP;YAED,sCAAiB,CAAC,qBAAqB,CAAC,UAAU,EAAE;gBAClD,KAAK,EAAE,IAAA,gBAAS,EAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;gBAC7C,KAAK,EAAE,IAAA,gBAAS,EAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;aAChD,CAAC,CAAA;YAEF,sCAAiB,CAAC,MAAM,CAAC,IAAI,CAAC,mBAAmB,UAAU,CAAC,IAAI,QAAQ,QAAQ,aAAa,CAAC,CAAA;QAChG,CAAC,CAAC,CAAA;IACJ,CAAC;IAED,KAAK,CAAC,UAAU,CAAC,UAA2B;QAC1C,IAAI,QAAQ,GAAG,sCAAiB,CAAC,qBAAqB,CAAC,UAAU,CAAC,CAAA;QAClE,IAAI;YACF,MAAM,QAAQ,CAAC,KAAK,EAAE,CAAA;YACtB,sCAAiB,CAAC,MAAM,CAAC,IAAI,CAAC,mBAAmB,UAAU,CAAC,IAAI,WAAW,CAAC,CAAA;SAC7E;QAAC,OAAO,CAAC,EAAE;YACV,sCAAiB,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAA;SAClC;QAED,sCAAiB,CAAC,wBAAwB,CAAC,UAAU,CAAC,CAAA;IACxD,CAAC;IAED,IAAI,aAAa;QACf,OAAO,EAAE,CAAA;IACX,CAAC;IAED,IAAI,YAAY;QACd,OAAO,CAAC,UAAU,CAAC,CAAA;IACrB,CAAC;IAED,IAAI,IAAI;QACN,OAAO,wCAAwC,CAAA;IACjD,CAAC;CACF;AAtDD,0CAsDC;AAED,sCAAiB,CAAC,iBAAiB,CAAC,kBAAkB,EAAE,IAAI,eAAe,EAAE,CAAC,CAAA","sourcesContent":["import { promisify } from 'util'\n\nimport { logger } from '@things-factory/env'\n\nimport { ConnectionManager } from '../connection-manager'\nimport { Connector } from '../types'\nimport { InputConnection } from '../../service/connection/connection-type'\n\n\ntry {\n var sqlite3 = require('sqlite3').verbose()\n} catch (err) {\n logger.error('sqlite3 module loading failed')\n}\n\nexport class SqliteConnector implements Connector {\n async ready(connectionConfigs: InputConnection[]) {\n await Promise.all(connectionConfigs.map(this.connect.bind(this)))\n\n ConnectionManager.logger.info('sqlite-connector connections are ready')\n }\n\n async connect(connection: InputConnection) {\n var { endpoint } = connection\n\n if (!sqlite3) {\n throw new Error('sqlite3 module loading failed')\n }\n\n var database = new sqlite3.Database(endpoint, sqlite3.OPEN_READWRITE, err => {\n if (err) {\n ConnectionManager.logger.error(\n `SQLite Database(${connection.name}) at ${endpoint} not connected.\\ncause: ${err}`\n )\n return\n }\n\n ConnectionManager.addConnectionInstance(connection, {\n query: promisify(database.all.bind(database)),\n close: promisify(database.close.bind(database))\n })\n\n ConnectionManager.logger.info(`SQLite Database(${connection.name}) at ${endpoint} connected.`)\n })\n }\n\n async disconnect(connection: InputConnection) {\n var database = ConnectionManager.getConnectionInstance(connection)\n try {\n await database.close()\n ConnectionManager.logger.info(`SQLite Database(${connection.name}) closed.`)\n } catch (e) {\n ConnectionManager.logger.error(e)\n }\n\n ConnectionManager.removeConnectionInstance(connection)\n }\n\n get parameterSpec() {\n return []\n }\n\n get taskPrefixes() {\n return ['database']\n }\n\n get help() {\n return 'integration/connector/sqlite-connector'\n }\n}\n\nConnectionManager.registerConnector('sqlite-connector', new SqliteConnector())\n"]}
1
+ {"version":3,"file":"sqlite-connector.js","sourceRoot":"","sources":["../../../server/engine/connector/sqlite-connector.ts"],"names":[],"mappings":";;;AAAA,+BAAgC;AAEhC,6CAA4C;AAE5C,8DAAyD;AAKzD,IAAI,CAAC;IACH,IAAI,OAAO,GAAG,OAAO,CAAC,SAAS,CAAC,CAAC,OAAO,EAAE,CAAA;AAC5C,CAAC;AAAC,OAAO,GAAG,EAAE,CAAC;IACb,YAAM,CAAC,KAAK,CAAC,+BAA+B,CAAC,CAAA;AAC/C,CAAC;AAED,MAAa,eAAe;IAC1B,KAAK,CAAC,KAAK,CAAC,iBAAoC;QAC9C,MAAM,OAAO,CAAC,GAAG,CAAC,iBAAiB,CAAC,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;QAEjE,sCAAiB,CAAC,MAAM,CAAC,IAAI,CAAC,wCAAwC,CAAC,CAAA;IACzE,CAAC;IAED,KAAK,CAAC,OAAO,CAAC,UAA2B;QACvC,IAAI,EAAE,QAAQ,EAAE,GAAG,UAAU,CAAA;QAE7B,IAAI,CAAC,OAAO,EAAE,CAAC;YACb,MAAM,IAAI,KAAK,CAAC,+BAA+B,CAAC,CAAA;QAClD,CAAC;QAED,IAAI,QAAQ,GAAG,IAAI,OAAO,CAAC,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC,cAAc,EAAE,GAAG,CAAC,EAAE;YAC1E,IAAI,GAAG,EAAE,CAAC;gBACR,sCAAiB,CAAC,MAAM,CAAC,KAAK,CAC5B,mBAAmB,UAAU,CAAC,IAAI,QAAQ,QAAQ,2BAA2B,GAAG,EAAE,CACnF,CAAA;gBACD,OAAM;YACR,CAAC;YAED,sCAAiB,CAAC,qBAAqB,CAAC,UAAU,EAAE;gBAClD,KAAK,EAAE,IAAA,gBAAS,EAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;gBAC7C,KAAK,EAAE,IAAA,gBAAS,EAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;aAChD,CAAC,CAAA;YAEF,sCAAiB,CAAC,MAAM,CAAC,IAAI,CAAC,mBAAmB,UAAU,CAAC,IAAI,QAAQ,QAAQ,aAAa,CAAC,CAAA;QAChG,CAAC,CAAC,CAAA;IACJ,CAAC;IAED,KAAK,CAAC,UAAU,CAAC,UAA2B;QAC1C,IAAI,QAAQ,GAAG,sCAAiB,CAAC,qBAAqB,CAAC,UAAU,CAAC,CAAA;QAClE,IAAI,CAAC;YACH,MAAM,QAAQ,CAAC,KAAK,EAAE,CAAA;YACtB,sCAAiB,CAAC,MAAM,CAAC,IAAI,CAAC,mBAAmB,UAAU,CAAC,IAAI,WAAW,CAAC,CAAA;QAC9E,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACX,sCAAiB,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAA;QACnC,CAAC;QAED,sCAAiB,CAAC,wBAAwB,CAAC,UAAU,CAAC,CAAA;IACxD,CAAC;IAED,IAAI,aAAa;QACf,OAAO,EAAE,CAAA;IACX,CAAC;IAED,IAAI,YAAY;QACd,OAAO,CAAC,UAAU,CAAC,CAAA;IACrB,CAAC;IAED,IAAI,IAAI;QACN,OAAO,wCAAwC,CAAA;IACjD,CAAC;CACF;AAtDD,0CAsDC;AAED,sCAAiB,CAAC,iBAAiB,CAAC,kBAAkB,EAAE,IAAI,eAAe,EAAE,CAAC,CAAA","sourcesContent":["import { promisify } from 'util'\n\nimport { logger } from '@things-factory/env'\n\nimport { ConnectionManager } from '../connection-manager'\nimport { Connector } from '../types'\nimport { InputConnection } from '../../service/connection/connection-type'\n\n\ntry {\n var sqlite3 = require('sqlite3').verbose()\n} catch (err) {\n logger.error('sqlite3 module loading failed')\n}\n\nexport class SqliteConnector implements Connector {\n async ready(connectionConfigs: InputConnection[]) {\n await Promise.all(connectionConfigs.map(this.connect.bind(this)))\n\n ConnectionManager.logger.info('sqlite-connector connections are ready')\n }\n\n async connect(connection: InputConnection) {\n var { endpoint } = connection\n\n if (!sqlite3) {\n throw new Error('sqlite3 module loading failed')\n }\n\n var database = new sqlite3.Database(endpoint, sqlite3.OPEN_READWRITE, err => {\n if (err) {\n ConnectionManager.logger.error(\n `SQLite Database(${connection.name}) at ${endpoint} not connected.\\ncause: ${err}`\n )\n return\n }\n\n ConnectionManager.addConnectionInstance(connection, {\n query: promisify(database.all.bind(database)),\n close: promisify(database.close.bind(database))\n })\n\n ConnectionManager.logger.info(`SQLite Database(${connection.name}) at ${endpoint} connected.`)\n })\n }\n\n async disconnect(connection: InputConnection) {\n var database = ConnectionManager.getConnectionInstance(connection)\n try {\n await database.close()\n ConnectionManager.logger.info(`SQLite Database(${connection.name}) closed.`)\n } catch (e) {\n ConnectionManager.logger.error(e)\n }\n\n ConnectionManager.removeConnectionInstance(connection)\n }\n\n get parameterSpec() {\n return []\n }\n\n get taskPrefixes() {\n return ['database']\n }\n\n get help() {\n return 'integration/connector/sqlite-connector'\n }\n}\n\nConnectionManager.registerConnector('sqlite-connector', new SqliteConnector())\n"]}
@@ -0,0 +1,18 @@
1
+ import { Connection } from '../service/connection/connection-type';
2
+ import { Step } from '../service/step/step-type';
3
+ import { Context, TaskHandler } from './types';
4
+ export type EdgeClient = {
5
+ handler: TaskHandler;
6
+ syncConnections(connections: Connection[], context?: ResolverContext): Promise<any>;
7
+ connectConnections(connections: Connection[], context?: ResolverContext): Promise<any>;
8
+ disconnectConnections(connections: Connection[], context?: ResolverContext): Promise<any>;
9
+ };
10
+ export declare function handler(step: Step, scenarioContext: Context): Promise<{
11
+ next?: string;
12
+ state?: import("..").ScenarioInstanceStatus;
13
+ data?: any;
14
+ }>;
15
+ export declare function syncConnections(connections: Connection[], context?: ResolverContext): Promise<any>;
16
+ export declare function connectConnections(connections: Connection[], context?: ResolverContext): Promise<any>;
17
+ export declare function disconnectConnections(connections: Connection[], context?: ResolverContext): Promise<any>;
18
+ export declare function setEdgeClient(edge: EdgeClient): void;
@@ -1,6 +1,10 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.setEdgeClient = exports.disconnectConnections = exports.connectConnections = exports.syncConnections = exports.handler = void 0;
3
+ exports.handler = handler;
4
+ exports.syncConnections = syncConnections;
5
+ exports.connectConnections = connectConnections;
6
+ exports.disconnectConnections = disconnectConnections;
7
+ exports.setEdgeClient = setEdgeClient;
4
8
  var edgeClient = {
5
9
  async handler(step, scenarioContext) {
6
10
  throw 'edgeClient not supported';
@@ -18,21 +22,16 @@ var edgeClient = {
18
22
  async function handler(step, scenarioContext) {
19
23
  return await edgeClient.handler(step, scenarioContext);
20
24
  }
21
- exports.handler = handler;
22
25
  async function syncConnections(connections, context) {
23
26
  return await edgeClient.syncConnections(connections, context);
24
27
  }
25
- exports.syncConnections = syncConnections;
26
28
  async function connectConnections(connections, context) {
27
29
  return await edgeClient.connectConnections(connections, context);
28
30
  }
29
- exports.connectConnections = connectConnections;
30
31
  async function disconnectConnections(connections, context) {
31
32
  return await edgeClient.disconnectConnections(connections, context);
32
33
  }
33
- exports.disconnectConnections = disconnectConnections;
34
34
  function setEdgeClient(edge) {
35
35
  edgeClient = edge;
36
36
  }
37
- exports.setEdgeClient = setEdgeClient;
38
37
  //# sourceMappingURL=edge-client.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"edge-client.js","sourceRoot":"","sources":["../../server/engine/edge-client.ts"],"names":[],"mappings":";;;AAWA,IAAI,UAAU,GAAe;IAC3B,KAAK,CAAC,OAAO,CAAC,IAAU,EAAE,eAAwB;QAChD,MAAM,0BAA0B,CAAA;IAClC,CAAC;IACD,KAAK,CAAC,eAAe,CAAC,WAAyB,EAAE,OAAwB;QACvE,MAAM,0BAA0B,CAAA;IAClC,CAAC;IACD,KAAK,CAAC,kBAAkB,CAAC,WAAyB,EAAE,OAAwB;QAC1E,MAAM,0BAA0B,CAAA;IAClC,CAAC;IACD,KAAK,CAAC,qBAAqB,CAAC,WAAyB,EAAE,OAAwB;QAC7E,MAAM,0BAA0B,CAAA;IAClC,CAAC;CACF,CAAA;AAEM,KAAK,UAAU,OAAO,CAAC,IAAU,EAAE,eAAwB;IAChE,OAAO,MAAM,UAAU,CAAC,OAAO,CAAC,IAAI,EAAE,eAAe,CAAC,CAAA;AACxD,CAAC;AAFD,0BAEC;AAEM,KAAK,UAAU,eAAe,CAAC,WAAyB,EAAE,OAAyB;IACxF,OAAO,MAAM,UAAU,CAAC,eAAe,CAAC,WAAW,EAAE,OAAO,CAAC,CAAA;AAC/D,CAAC;AAFD,0CAEC;AAEM,KAAK,UAAU,kBAAkB,CAAC,WAAyB,EAAE,OAAyB;IAC3F,OAAO,MAAM,UAAU,CAAC,kBAAkB,CAAC,WAAW,EAAE,OAAO,CAAC,CAAA;AAClE,CAAC;AAFD,gDAEC;AAEM,KAAK,UAAU,qBAAqB,CAAC,WAAyB,EAAE,OAAyB;IAC9F,OAAO,MAAM,UAAU,CAAC,qBAAqB,CAAC,WAAW,EAAE,OAAO,CAAC,CAAA;AACrE,CAAC;AAFD,sDAEC;AAED,SAAgB,aAAa,CAAC,IAAgB;IAC5C,UAAU,GAAG,IAAI,CAAA;AACnB,CAAC;AAFD,sCAEC","sourcesContent":["import { Connection } from '../service/connection/connection-type'\nimport { Step } from '../service/step/step-type'\nimport { Context, TaskHandler } from './types'\n\nexport type EdgeClient = {\n handler: TaskHandler\n syncConnections(connections: Connection[], context?: ResolverContext): Promise<any>\n connectConnections(connections: Connection[], context?: ResolverContext): Promise<any>\n disconnectConnections(connections: Connection[], context?: ResolverContext): Promise<any>\n}\n\nvar edgeClient: EdgeClient = {\n async handler(step: Step, scenarioContext: Context) {\n throw 'edgeClient not supported'\n },\n async syncConnections(connections: Connection[], context: ResolverContext): Promise<any> {\n throw 'edgeClient not supported'\n },\n async connectConnections(connections: Connection[], context: ResolverContext): Promise<any> {\n throw 'edgeClient not supported'\n },\n async disconnectConnections(connections: Connection[], context: ResolverContext): Promise<any> {\n throw 'edgeClient not supported'\n }\n}\n\nexport async function handler(step: Step, scenarioContext: Context) {\n return await edgeClient.handler(step, scenarioContext)\n}\n\nexport async function syncConnections(connections: Connection[], context?: ResolverContext): Promise<any> {\n return await edgeClient.syncConnections(connections, context)\n}\n\nexport async function connectConnections(connections: Connection[], context?: ResolverContext): Promise<any> {\n return await edgeClient.connectConnections(connections, context)\n}\n\nexport async function disconnectConnections(connections: Connection[], context?: ResolverContext): Promise<any> {\n return await edgeClient.disconnectConnections(connections, context)\n}\n\nexport function setEdgeClient(edge: EdgeClient) {\n edgeClient = edge\n}\n"]}
1
+ {"version":3,"file":"edge-client.js","sourceRoot":"","sources":["../../server/engine/edge-client.ts"],"names":[],"mappings":";;AA0BA,0BAEC;AAED,0CAEC;AAED,gDAEC;AAED,sDAEC;AAED,sCAEC;AAjCD,IAAI,UAAU,GAAe;IAC3B,KAAK,CAAC,OAAO,CAAC,IAAU,EAAE,eAAwB;QAChD,MAAM,0BAA0B,CAAA;IAClC,CAAC;IACD,KAAK,CAAC,eAAe,CAAC,WAAyB,EAAE,OAAwB;QACvE,MAAM,0BAA0B,CAAA;IAClC,CAAC;IACD,KAAK,CAAC,kBAAkB,CAAC,WAAyB,EAAE,OAAwB;QAC1E,MAAM,0BAA0B,CAAA;IAClC,CAAC;IACD,KAAK,CAAC,qBAAqB,CAAC,WAAyB,EAAE,OAAwB;QAC7E,MAAM,0BAA0B,CAAA;IAClC,CAAC;CACF,CAAA;AAEM,KAAK,UAAU,OAAO,CAAC,IAAU,EAAE,eAAwB;IAChE,OAAO,MAAM,UAAU,CAAC,OAAO,CAAC,IAAI,EAAE,eAAe,CAAC,CAAA;AACxD,CAAC;AAEM,KAAK,UAAU,eAAe,CAAC,WAAyB,EAAE,OAAyB;IACxF,OAAO,MAAM,UAAU,CAAC,eAAe,CAAC,WAAW,EAAE,OAAO,CAAC,CAAA;AAC/D,CAAC;AAEM,KAAK,UAAU,kBAAkB,CAAC,WAAyB,EAAE,OAAyB;IAC3F,OAAO,MAAM,UAAU,CAAC,kBAAkB,CAAC,WAAW,EAAE,OAAO,CAAC,CAAA;AAClE,CAAC;AAEM,KAAK,UAAU,qBAAqB,CAAC,WAAyB,EAAE,OAAyB;IAC9F,OAAO,MAAM,UAAU,CAAC,qBAAqB,CAAC,WAAW,EAAE,OAAO,CAAC,CAAA;AACrE,CAAC;AAED,SAAgB,aAAa,CAAC,IAAgB;IAC5C,UAAU,GAAG,IAAI,CAAA;AACnB,CAAC","sourcesContent":["import { Connection } from '../service/connection/connection-type'\nimport { Step } from '../service/step/step-type'\nimport { Context, TaskHandler } from './types'\n\nexport type EdgeClient = {\n handler: TaskHandler\n syncConnections(connections: Connection[], context?: ResolverContext): Promise<any>\n connectConnections(connections: Connection[], context?: ResolverContext): Promise<any>\n disconnectConnections(connections: Connection[], context?: ResolverContext): Promise<any>\n}\n\nvar edgeClient: EdgeClient = {\n async handler(step: Step, scenarioContext: Context) {\n throw 'edgeClient not supported'\n },\n async syncConnections(connections: Connection[], context: ResolverContext): Promise<any> {\n throw 'edgeClient not supported'\n },\n async connectConnections(connections: Connection[], context: ResolverContext): Promise<any> {\n throw 'edgeClient not supported'\n },\n async disconnectConnections(connections: Connection[], context: ResolverContext): Promise<any> {\n throw 'edgeClient not supported'\n }\n}\n\nexport async function handler(step: Step, scenarioContext: Context) {\n return await edgeClient.handler(step, scenarioContext)\n}\n\nexport async function syncConnections(connections: Connection[], context?: ResolverContext): Promise<any> {\n return await edgeClient.syncConnections(connections, context)\n}\n\nexport async function connectConnections(connections: Connection[], context?: ResolverContext): Promise<any> {\n return await edgeClient.connectConnections(connections, context)\n}\n\nexport async function disconnectConnections(connections: Connection[], context?: ResolverContext): Promise<any> {\n return await edgeClient.disconnectConnections(connections, context)\n}\n\nexport function setEdgeClient(edge: EdgeClient) {\n edgeClient = edge\n}\n"]}
@@ -0,0 +1,8 @@
1
+ import './connector';
2
+ import './task';
3
+ export * from './connection-manager';
4
+ export * from './scenario-engine';
5
+ export * from './task-registry';
6
+ export * from './analyzer/analyze-integration';
7
+ export * from './edge-client';
8
+ export { Connector, Context, TaskHandler } from './types';
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../server/engine/index.ts"],"names":[],"mappings":";;;AAAA,uBAAoB;AACpB,kBAAe;AAEf,+DAAoC;AACpC,4DAAiC;AACjC,0DAA+B;AAC/B,yEAA8C;AAC9C,wDAA6B","sourcesContent":["import './connector'\nimport './task'\n\nexport * from './connection-manager'\nexport * from './scenario-engine'\nexport * from './task-registry'\nexport * from './analyzer/analyze-integration'\nexport * from './edge-client'\n\nexport { Connector } from './types'\n"]}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../server/engine/index.ts"],"names":[],"mappings":";;;AAAA,uBAAoB;AACpB,kBAAe;AAEf,+DAAoC;AACpC,4DAAiC;AACjC,0DAA+B;AAC/B,yEAA8C;AAC9C,wDAA6B","sourcesContent":["import './connector'\nimport './task'\n\nexport * from './connection-manager'\nexport * from './scenario-engine'\nexport * from './task-registry'\nexport * from './analyzer/analyze-integration'\nexport * from './edge-client'\n\nexport { Connector, Context, TaskHandler } from './types'\n"]}
@@ -0,0 +1,24 @@
1
+ export type PendingObject = {
2
+ stuff: any;
3
+ due: any;
4
+ priority: any;
5
+ tag: any;
6
+ };
7
+ export declare class PendingQueue {
8
+ private _queue;
9
+ private _changedCallback;
10
+ constructor(changedCallback: any);
11
+ get queue(): PendingObject[];
12
+ get status(): {
13
+ total: number;
14
+ };
15
+ reset(): void;
16
+ put({ delay, stuff, priority, tag }: {
17
+ delay: any;
18
+ stuff: any;
19
+ priority?: number;
20
+ tag?: string;
21
+ }): void;
22
+ pick(tag?: string): any;
23
+ cancel(stuff: any): void;
24
+ }
@@ -1 +1 @@
1
- {"version":3,"file":"pending-queue.js","sourceRoot":"","sources":["../../server/engine/pending-queue.ts"],"names":[],"mappings":";;;AAAA,MAAM,KAAK,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC,+CAA+C,CAAC,CAAA;AAS/E,MAAa,YAAY;IAIvB,YAAY,eAAe;QAHnB,WAAM,GAAoB,EAAE,CAAA;QAIlC,IAAI,CAAC,gBAAgB,GAAG,eAAe,CAAA;IACzC,CAAC;IAED,IAAI,KAAK;QACP,OAAO,IAAI,CAAC,MAAM,CAAA;IACpB,CAAC;IAED,IAAI,MAAM;QACR,OAAO;YACL,KAAK,EAAE,IAAI,CAAC,MAAM,CAAC,MAAM;SAC1B,CAAA;IACH,CAAC;IAED,KAAK;QACH,IAAI,CAAC,MAAM,GAAG,EAAE,CAAA;QAChB,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,MAAM,CAAC,CAAA;IACpC,CAAC;IAED,GAAG,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,QAAQ,GAAG,CAAC,EAAE,GAAG,GAAG,EAAE,EAAE;QAC1C,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,GAAG,IAAI,CAAA;QACpD,MAAM,YAAY,GAAG,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,MAAM,CAAC,EAAE,CAAC,MAAM,CAAC,GAAG,GAAG,GAAG,CAAC,CAAA;QAEtE,IAAI,YAAY,IAAI,CAAC,CAAC,EAAE;YACtB,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC;gBACf,GAAG;gBACH,QAAQ,EAAE,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC;gBAC/B,KAAK;gBACL,GAAG,EAAE,GAAG,IAAI,EAAE;aACf,CAAC,CAAA;SACH;aAAM;YACL,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,YAAY,EAAE,CAAC,EAAE;gBAClC,GAAG;gBACH,QAAQ;gBACR,KAAK;gBACL,GAAG;aACJ,CAAC,CAAA;SACH;QAED,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,MAAM,CAAC,CAAA;QAElC,KAAK,CAAC,KAAK,EAAE,IAAI,CAAC,MAAM,CAAC,CAAA;IAC3B,CAAC;IAED,IAAI,CAAC,GAAG,GAAG,EAAE;QACX,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAA;QAEtB,IAAI,OAAO,CAAA;QACX,IAAI,KAAK,GAAG,CAAC,CAAC,CAAA;QAEd,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;YAC3C,IAAI,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAA;YAE3B,IAAI,MAAM,CAAC,GAAG,GAAG,GAAG,EAAE;gBACpB,MAAK;aACN;YAED,IAAI,MAAM,CAAC,GAAG,KAAK,GAAG,EAAE;gBACtB,SAAQ;aACT;YAED,IAAI,CAAC,OAAO,IAAI,OAAO,CAAC,QAAQ,GAAG,MAAM,CAAC,QAAQ,EAAE;gBAClD,OAAO,GAAG,MAAM,CAAA;gBAChB,KAAK,GAAG,CAAC,CAAA;aACV;SACF;QAED,IAAI,KAAK,KAAK,CAAC,CAAC,EAAE;YAChB,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC,CAAA;YAC5B,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,MAAM,CAAC,CAAA;SACnC;QAED,OAAO,IAAI,KAAK,CAAC,MAAM,EAAE,OAAO,EAAE,IAAI,CAAC,MAAM,EAAE,GAAG,CAAC,CAAA;QAEnD,OAAO,OAAO,CAAA;IAChB,CAAC;IAED,MAAM,CAAC,KAAK;QACV,MAAM,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,MAAM,CAAC,EAAE,CAAC,MAAM,CAAC,KAAK,KAAK,KAAK,CAAC,CAAA;QACrE,KAAK,KAAK,CAAC,CAAC,IAAI,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC,CAAA;QAE5C,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,MAAM,CAAC,CAAA;IACpC,CAAC;CACF;AAvFD,oCAuFC","sourcesContent":["const debug = require('debug')('things-factory:integration-base:pending-queue')\n\nexport type PendingObject = {\n stuff\n due\n priority\n tag\n}\n\nexport class PendingQueue {\n private _queue: PendingObject[] = []\n private _changedCallback\n\n constructor(changedCallback) {\n this._changedCallback = changedCallback\n }\n\n get queue() {\n return this._queue\n }\n\n get status() {\n return {\n total: this._queue.length\n }\n }\n\n reset() {\n this._queue = []\n this._changedCallback(this._queue)\n }\n\n put({ delay, stuff, priority = 0, tag = '' }) {\n const due = Date.now() + (Number(delay) || 0) * 1000\n const insertBefore = this._queue.findIndex(pended => pended.due > due)\n\n if (insertBefore == -1) {\n this._queue.push({\n due,\n priority: Number(priority) || 0,\n stuff,\n tag: tag || ''\n })\n } else {\n this._queue.splice(insertBefore, 0, {\n due,\n priority,\n stuff,\n tag\n })\n }\n\n this._changedCallback(this._queue)\n\n debug('put', this.status)\n }\n\n pick(tag = '') {\n const due = Date.now()\n\n var toppick\n var index = -1\n\n for (let i = 0; i < this._queue.length; i++) {\n var pended = this._queue[i]\n\n if (pended.due > due) {\n break\n }\n\n if (pended.tag !== tag) {\n continue\n }\n\n if (!toppick || toppick.priority < pended.priority) {\n toppick = pended\n index = i\n }\n }\n\n if (index !== -1) {\n this._queue.splice(index, 1)\n this._changedCallback(this._queue)\n }\n\n toppick && debug('pick', toppick, this.status, due)\n\n return toppick\n }\n\n cancel(stuff) {\n const index = this._queue.findIndex(pended => pended.stuff === stuff)\n index !== -1 && this._queue.splice(index, 1)\n\n this._changedCallback(this._queue)\n }\n}\n"]}
1
+ {"version":3,"file":"pending-queue.js","sourceRoot":"","sources":["../../server/engine/pending-queue.ts"],"names":[],"mappings":"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","sourcesContent":["const debug = require('debug')('things-factory:integration-base:pending-queue')\n\nexport type PendingObject = {\n stuff\n due\n priority\n tag\n}\n\nexport class PendingQueue {\n private _queue: PendingObject[] = []\n private _changedCallback\n\n constructor(changedCallback) {\n this._changedCallback = changedCallback\n }\n\n get queue() {\n return this._queue\n }\n\n get status() {\n return {\n total: this._queue.length\n }\n }\n\n reset() {\n this._queue = []\n this._changedCallback(this._queue)\n }\n\n put({ delay, stuff, priority = 0, tag = '' }) {\n const due = Date.now() + (Number(delay) || 0) * 1000\n const insertBefore = this._queue.findIndex(pended => pended.due > due)\n\n if (insertBefore == -1) {\n this._queue.push({\n due,\n priority: Number(priority) || 0,\n stuff,\n tag: tag || ''\n })\n } else {\n this._queue.splice(insertBefore, 0, {\n due,\n priority,\n stuff,\n tag\n })\n }\n\n this._changedCallback(this._queue)\n\n debug('put', this.status)\n }\n\n pick(tag = '') {\n const due = Date.now()\n\n var toppick\n var index = -1\n\n for (let i = 0; i < this._queue.length; i++) {\n var pended = this._queue[i]\n\n if (pended.due > due) {\n break\n }\n\n if (pended.tag !== tag) {\n continue\n }\n\n if (!toppick || toppick.priority < pended.priority) {\n toppick = pended\n index = i\n }\n }\n\n if (index !== -1) {\n this._queue.splice(index, 1)\n this._changedCallback(this._queue)\n }\n\n toppick && debug('pick', toppick, this.status, due)\n\n return toppick\n }\n\n cancel(stuff) {\n const index = this._queue.findIndex(pended => pended.stuff === stuff)\n index !== -1 && this._queue.splice(index, 1)\n\n this._changedCallback(this._queue)\n }\n}\n"]}
@@ -0,0 +1,11 @@
1
+ import { ScenarioInstance } from '../service/scenario-instance/scenario-instance-type';
2
+ export declare class ScenarioEngine {
3
+ private static scenarioInstances;
4
+ private static pendingQueues;
5
+ static getPendingQueue(domain: any): any;
6
+ static getScenarioInstance(domain: any, instanceName: any): ScenarioInstance;
7
+ static getScenarioInstances(domain: any, scenarioName?: any): ScenarioInstance[];
8
+ static load(instanceName: any, scenarioConfig: any, context?: any): Promise<any>;
9
+ static unload(domain: any, instanceName: any): Promise<void>;
10
+ static loadAll(): Promise<void>;
11
+ }
@@ -1 +1 @@
1
- {"version":3,"file":"scenario-engine.js","sourceRoot":"","sources":["../../server/engine/scenario-engine.ts"],"names":[],"mappings":"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","sourcesContent":["import { getRepository, GraphqlLocalClient, pubsub } from '@things-factory/shell'\n\nimport { Scenario } from '../service/scenario/scenario'\nimport { ScenarioInstance } from '../service/scenario-instance/scenario-instance-type'\n\nimport { PendingQueue } from './pending-queue'\n\nconst debug = require('debug')('things-factory:integration-base:scenario-engine')\n\nexport class ScenarioEngine {\n private static scenarioInstances = {} // TODO impl. by WeakMap\n private static pendingQueues = {}\n\n public static getPendingQueue(domain) {\n if (!ScenarioEngine.pendingQueues[domain.id]) {\n ScenarioEngine.pendingQueues[domain.id] = new PendingQueue(queue => {\n pubsub.publish('scenario-queue-state', {\n scenarioQueueState: {\n domain,\n queue\n }\n })\n })\n }\n\n return ScenarioEngine.pendingQueues[domain.id]\n }\n\n public static getScenarioInstance(domain, instanceName): ScenarioInstance {\n return ScenarioEngine.scenarioInstances[domain.id]?.[instanceName]\n }\n\n public static getScenarioInstances(domain, scenarioName?): ScenarioInstance[] {\n const instances: ScenarioInstance[] = Object.values(ScenarioEngine.scenarioInstances[domain.id] || {}) || []\n return instances.filter(instance => !scenarioName || instance.scenarioName == scenarioName)\n }\n\n public static async load(instanceName, scenarioConfig, context?) {\n const { domain: scenarioDomain } = scenarioConfig\n const domain = context?.domain || scenarioDomain\n\n debug('load', domain.subdomain, instanceName)\n\n var scenarioInstances = ScenarioEngine.scenarioInstances[domain.id]\n if (!scenarioInstances) {\n scenarioInstances = ScenarioEngine.scenarioInstances[domain.id] = {}\n }\n\n var scenarioInstance = scenarioInstances[instanceName]\n if (scenarioInstance) {\n debug('load - duplicated', instanceName)\n return scenarioInstance\n }\n\n var instance = new ScenarioInstance(instanceName, scenarioConfig, {\n ...context,\n client: GraphqlLocalClient.client,\n disposer: () => {\n this.unload(domain, instanceName)\n }\n })\n\n instance.start().catch(err => {\n /* IMPORTANT. if you didn't catch exception here, system will be exit */\n console.error(\n `An exception occurred while executing the scenario instance named \"${instanceName}\" on the domain \"${domain.name}\"`,\n err\n )\n })\n\n scenarioInstances[instanceName] = instance\n\n return instance\n }\n\n public static async unload(domain, instanceName) {\n var scenarioInstances = ScenarioEngine.scenarioInstances[domain.id]\n if (!scenarioInstances) {\n return\n }\n\n var instance = scenarioInstances[instanceName]\n if (!instance) {\n return\n }\n\n delete scenarioInstances[instanceName]\n\n instance.unload()\n }\n\n // will be deprecated soon\n public static async loadAll() {\n const SCENARIOS = await getRepository(Scenario).find({\n where: { active: true },\n relations: ['domain', 'steps']\n })\n\n debug(\n 'load-all',\n SCENARIOS.map(scenario => `${scenario.domain.subdomain}: ${scenario.name}`)\n )\n\n SCENARIOS.forEach(scenario => ScenarioEngine.load(scenario.name, scenario))\n }\n}\n"]}
1
+ {"version":3,"file":"scenario-engine.js","sourceRoot":"","sources":["../../server/engine/scenario-engine.ts"],"names":[],"mappings":"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","sourcesContent":["import { getRepository, GraphqlLocalClient, pubsub } from '@things-factory/shell'\n\nimport { Scenario } from '../service/scenario/scenario'\nimport { ScenarioInstance } from '../service/scenario-instance/scenario-instance-type'\n\nimport { PendingQueue } from './pending-queue'\n\nconst debug = require('debug')('things-factory:integration-base:scenario-engine')\n\nexport class ScenarioEngine {\n private static scenarioInstances = {} // TODO impl. by WeakMap\n private static pendingQueues = {}\n\n public static getPendingQueue(domain) {\n if (!ScenarioEngine.pendingQueues[domain.id]) {\n ScenarioEngine.pendingQueues[domain.id] = new PendingQueue(queue => {\n pubsub.publish('scenario-queue-state', {\n scenarioQueueState: {\n domain,\n queue\n }\n })\n })\n }\n\n return ScenarioEngine.pendingQueues[domain.id]\n }\n\n public static getScenarioInstance(domain, instanceName): ScenarioInstance {\n return ScenarioEngine.scenarioInstances[domain.id]?.[instanceName]\n }\n\n public static getScenarioInstances(domain, scenarioName?): ScenarioInstance[] {\n const instances: ScenarioInstance[] = Object.values(ScenarioEngine.scenarioInstances[domain.id] || {}) || []\n return instances.filter(instance => !scenarioName || instance.scenarioName == scenarioName)\n }\n\n public static async load(instanceName, scenarioConfig, context?) {\n const { domain: scenarioDomain } = scenarioConfig\n const domain = context?.domain || scenarioDomain\n\n debug('load', domain.subdomain, instanceName)\n\n var scenarioInstances = ScenarioEngine.scenarioInstances[domain.id]\n if (!scenarioInstances) {\n scenarioInstances = ScenarioEngine.scenarioInstances[domain.id] = {}\n }\n\n var scenarioInstance = scenarioInstances[instanceName]\n if (scenarioInstance) {\n debug('load - duplicated', instanceName)\n return scenarioInstance\n }\n\n var instance = new ScenarioInstance(instanceName, scenarioConfig, {\n ...context,\n client: GraphqlLocalClient.client,\n disposer: () => {\n this.unload(domain, instanceName)\n }\n })\n\n instance.start().catch(err => {\n /* IMPORTANT. if you didn't catch exception here, system will be exit */\n console.error(\n `An exception occurred while executing the scenario instance named \"${instanceName}\" on the domain \"${domain.name}\"`,\n err\n )\n })\n\n scenarioInstances[instanceName] = instance\n\n return instance\n }\n\n public static async unload(domain, instanceName) {\n var scenarioInstances = ScenarioEngine.scenarioInstances[domain.id]\n if (!scenarioInstances) {\n return\n }\n\n var instance = scenarioInstances[instanceName]\n if (!instance) {\n return\n }\n\n delete scenarioInstances[instanceName]\n\n instance.unload()\n }\n\n // will be deprecated soon\n public static async loadAll() {\n const SCENARIOS = await getRepository(Scenario).find({\n where: { active: true },\n relations: ['domain', 'steps']\n })\n\n debug(\n 'load-all',\n SCENARIOS.map(scenario => `${scenario.domain.subdomain}: ${scenario.name}`)\n )\n\n SCENARIOS.forEach(scenario => ScenarioEngine.load(scenario.name, scenario))\n }\n}\n"]}
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1 @@
1
+ export {};
@@ -1 +1 @@
1
- {"version":3,"file":"csv-readline.js","sourceRoot":"","sources":["../../../server/engine/task/csv-readline.ts"],"names":[],"mappings":"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","sourcesContent":["const fs = require('fs')\nconst { URL } = require('url')\nconst path = require('path')\nconst readline = require('readline')\nconst { Readable } = require('stream')\n\nimport { TaskRegistry } from '../task-registry'\n\nimport { InputStep } from '../../service/step/step-type'\nimport { Context } from '../types'\n\nasync function createReadStream(source) {\n let stream\n\n try {\n const url = new URL(source)\n const protocol = url.protocol.slice(0, -1) // Remove ':' from protocol\n const filePath = url.pathname\n\n switch (protocol) {\n case 'file':\n stream = fs.createReadStream(filePath)\n break\n case 'http':\n case 'https':\n const response = await fetch(source)\n stream = Readable.from(await response.text())\n // 아래의 경우는 문제 발생함. /attachment/:attachment로 테스트함 - 동일 서버에서 요청과 응답을 하는 상홍에서의 문제인가 ?\n // TODO 스트림을 제대로 사용해야 서버의 자원 부담이 덜할텐데.\n // TODO attachment 서비스가 authorization을 지원하는 상황에서는 인증에서 통과하지 못할 수도 있음.\n // stream = response.body.getReader()\n break\n default:\n stream = fs.createReadStream(path.resolve(source))\n }\n } catch (e) {\n stream = fs.createReadStream(path.resolve(source))\n }\n\n return stream\n}\n\nasync function CsvReadline(step: InputStep, context: Context) {\n var {\n params: { path }\n } = step\n\n var { logger, __csv_resources, closures } = context\n\n if (!path) {\n throw new Error('csv filepath should be given')\n }\n\n if (!__csv_resources) {\n __csv_resources = context.__csv_resources = [] as ReadableStream[]\n }\n\n if (!__csv_resources[path]) {\n let stream\n\n try {\n stream = await createReadStream(path)\n } catch (e) {\n throw new Error(e)\n }\n\n if (!stream) {\n throw new Error('csv file loading failed')\n }\n\n const rl = readline.createInterface({\n input: stream,\n crlfDelay: Infinity\n })\n\n const iterator = rl[Symbol.asyncIterator]()\n const { value: header } = await iterator.next()\n\n __csv_resources[path] = {\n stream,\n iterator,\n header: header ? header.split(',').map(h => h.replace(/\"/g, '')) : []\n }\n\n closures.push(async () => {\n try {\n stream && (await stream.close())\n logger.info(`csv file(${path}) is released before ending the scenario.`)\n delete __csv_resources[path]\n } catch (e) {\n logger.error(e)\n }\n })\n }\n\n const { iterator, header } = __csv_resources[path]\n\n const data = {} as { [key: string]: string }\n const { value: line } = await iterator.next()\n\n if (!line) {\n return\n }\n\n const lineData = line.split(',')\n\n for (let i = 0; i < header.length; i++) {\n data[header[i]] = lineData[i]\n }\n\n return {\n data\n }\n}\n\nCsvReadline.parameterSpec = [\n {\n type: 'string',\n name: 'path',\n label: 'path'\n }\n]\n\nCsvReadline.connectorFree = true\nCsvReadline.help = 'integration/task/csv-readline'\n\nTaskRegistry.registerTaskHandler('csv-readline', CsvReadline)\n"]}
1
+ {"version":3,"file":"csv-readline.js","sourceRoot":"","sources":["../../../server/engine/task/csv-readline.ts"],"names":[],"mappings":"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","sourcesContent":["const fs = require('fs')\nconst { URL } = require('url')\nconst path = require('path')\nconst readline = require('readline')\nconst { Readable } = require('stream')\n\nimport { TaskRegistry } from '../task-registry'\n\nimport { InputStep } from '../../service/step/step-type'\nimport { Context } from '../types'\n\nasync function createReadStream(source) {\n let stream\n\n try {\n const url = new URL(source)\n const protocol = url.protocol.slice(0, -1) // Remove ':' from protocol\n const filePath = url.pathname\n\n switch (protocol) {\n case 'file':\n stream = fs.createReadStream(filePath)\n break\n case 'http':\n case 'https':\n const response = await fetch(source)\n stream = Readable.from(await response.text())\n // 아래의 경우는 문제 발생함. /attachment/:attachment로 테스트함 - 동일 서버에서 요청과 응답을 하는 상홍에서의 문제인가 ?\n // TODO 스트림을 제대로 사용해야 서버의 자원 부담이 덜할텐데.\n // TODO attachment 서비스가 authorization을 지원하는 상황에서는 인증에서 통과하지 못할 수도 있음.\n // stream = response.body.getReader()\n break\n default:\n stream = fs.createReadStream(path.resolve(source))\n }\n } catch (e) {\n stream = fs.createReadStream(path.resolve(source))\n }\n\n return stream\n}\n\nasync function CsvReadline(step: InputStep, context: Context) {\n var {\n params: { path }\n } = step\n\n var { logger, __csv_resources, closures } = context\n\n if (!path) {\n throw new Error('csv filepath should be given')\n }\n\n if (!__csv_resources) {\n __csv_resources = context.__csv_resources = [] as ReadableStream[]\n }\n\n if (!__csv_resources[path]) {\n let stream\n\n try {\n stream = await createReadStream(path)\n } catch (e) {\n throw new Error(e)\n }\n\n if (!stream) {\n throw new Error('csv file loading failed')\n }\n\n const rl = readline.createInterface({\n input: stream,\n crlfDelay: Infinity\n })\n\n const iterator = rl[Symbol.asyncIterator]()\n const { value: header } = await iterator.next()\n\n __csv_resources[path] = {\n stream,\n iterator,\n header: header ? header.split(',').map(h => h.replace(/\"/g, '')) : []\n }\n\n closures.push(async () => {\n try {\n stream && (await stream.close())\n logger.info(`csv file(${path}) is released before ending the scenario.`)\n delete __csv_resources[path]\n } catch (e) {\n logger.error(e)\n }\n })\n }\n\n const { iterator, header } = __csv_resources[path]\n\n const data = {} as { [key: string]: string }\n const { value: line } = await iterator.next()\n\n if (!line) {\n return\n }\n\n const lineData = line.split(',')\n\n for (let i = 0; i < header.length; i++) {\n data[header[i]] = lineData[i]\n }\n\n return {\n data\n }\n}\n\nCsvReadline.parameterSpec = [\n {\n type: 'string',\n name: 'path',\n label: 'path'\n }\n]\n\nCsvReadline.connectorFree = true\nCsvReadline.help = 'integration/task/csv-readline'\n\nTaskRegistry.registerTaskHandler('csv-readline', CsvReadline)\n"]}
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1 @@
1
+ export {};
@@ -1 +1 @@
1
- {"version":3,"file":"data-mapper.js","sourceRoot":"","sources":["../../../server/engine/task/data-mapper.ts"],"names":[],"mappings":";;AAAA,iDAA8C;AAC9C,oDAA+C;AAK/C,SAAS,OAAO,CAAC,IAAI,EAAE,KAAK;IAC1B,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE;QACxB,OAAO,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,CAAA;KACxC;IAED,OAAO,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE;QAC3C,GAAG,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAA;QAC3B,OAAO,GAAG,CAAA;IACZ,CAAC,EAAE,EAAS,CAAC,CAAA;AACf,CAAC;AAED,KAAK,UAAU,UAAU,CAAC,IAAe,EAAE,EAAE,MAAM,EAAE,IAAI,EAAW;IAClE,IAAI,EACF,MAAM,EAAE,EAAE,QAAQ,EAAE,WAAW,EAAE,EAClC,GAAG,IAAI,CAAA;IAER,MAAM,KAAK,GAAG,IAAA,cAAM,EAAC,QAAQ,EAAE,IAAI,CAAC,CAAA;IACpC,MAAM,MAAM,GAAG,OAAO,CAAC,WAAW,IAAI,EAAE,EAAE,KAAK,CAAC,CAAA;IAEhD,OAAO;QACL,IAAI,EAAE,MAAM;KACb,CAAA;AACH,CAAC;AAED,UAAU,CAAC,aAAa,GAAG;IACzB;QACE,IAAI,EAAE,qBAAqB;QAC3B,IAAI,EAAE,UAAU;QAChB,KAAK,EAAE,UAAU;KAClB;IACD;QACE,IAAI,EAAE,YAAY;QAClB,IAAI,EAAE,aAAa;QACnB,KAAK,EAAE,cAAc;KACtB;CACF,CAAA;AAED,UAAU,CAAC,aAAa,GAAG,IAAI,CAAA;AAC/B,UAAU,CAAC,IAAI,GAAG,8BAA8B,CAAA;AAEhD,4BAAY,CAAC,mBAAmB,CAAC,aAAa,EAAE,UAAU,CAAC,CAAA","sourcesContent":["import { access } from '@things-factory/utils'\nimport { TaskRegistry } from '../task-registry'\n\nimport { InputStep } from '../../service/step/step-type'\nimport { Context } from '../types'\n\nfunction mapping(rule, input) {\n if (Array.isArray(input)) {\n return input.map(i => mapping(rule, i))\n }\n\n return Object.keys(rule).reduce((sum, key) => {\n sum[key] = input[rule[key]]\n return sum\n }, {} as any)\n}\n\nasync function DataMapper(step: InputStep, { logger, data }: Context) {\n var {\n params: { accessor, mappingRule }\n } = step\n\n const input = access(accessor, data)\n const output = mapping(mappingRule || {}, input)\n\n return {\n data: output\n }\n}\n\nDataMapper.parameterSpec = [\n {\n type: 'scenario-step-input',\n name: 'accessor',\n label: 'accessor'\n },\n {\n type: 'key-values',\n name: 'mappingRule',\n label: 'mapping-rule'\n }\n]\n\nDataMapper.connectorFree = true\nDataMapper.help = 'integration/task/data-mapper'\n\nTaskRegistry.registerTaskHandler('data-mapper', DataMapper)\n"]}
1
+ {"version":3,"file":"data-mapper.js","sourceRoot":"","sources":["../../../server/engine/task/data-mapper.ts"],"names":[],"mappings":";;AAAA,iDAA8C;AAC9C,oDAA+C;AAK/C,SAAS,OAAO,CAAC,IAAI,EAAE,KAAK;IAC1B,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;QACzB,OAAO,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,CAAA;IACzC,CAAC;IAED,OAAO,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE;QAC3C,GAAG,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAA;QAC3B,OAAO,GAAG,CAAA;IACZ,CAAC,EAAE,EAAS,CAAC,CAAA;AACf,CAAC;AAED,KAAK,UAAU,UAAU,CAAC,IAAe,EAAE,EAAE,MAAM,EAAE,IAAI,EAAW;IAClE,IAAI,EACF,MAAM,EAAE,EAAE,QAAQ,EAAE,WAAW,EAAE,EAClC,GAAG,IAAI,CAAA;IAER,MAAM,KAAK,GAAG,IAAA,cAAM,EAAC,QAAQ,EAAE,IAAI,CAAC,CAAA;IACpC,MAAM,MAAM,GAAG,OAAO,CAAC,WAAW,IAAI,EAAE,EAAE,KAAK,CAAC,CAAA;IAEhD,OAAO;QACL,IAAI,EAAE,MAAM;KACb,CAAA;AACH,CAAC;AAED,UAAU,CAAC,aAAa,GAAG;IACzB;QACE,IAAI,EAAE,qBAAqB;QAC3B,IAAI,EAAE,UAAU;QAChB,KAAK,EAAE,UAAU;KAClB;IACD;QACE,IAAI,EAAE,YAAY;QAClB,IAAI,EAAE,aAAa;QACnB,KAAK,EAAE,cAAc;KACtB;CACF,CAAA;AAED,UAAU,CAAC,aAAa,GAAG,IAAI,CAAA;AAC/B,UAAU,CAAC,IAAI,GAAG,8BAA8B,CAAA;AAEhD,4BAAY,CAAC,mBAAmB,CAAC,aAAa,EAAE,UAAU,CAAC,CAAA","sourcesContent":["import { access } from '@things-factory/utils'\nimport { TaskRegistry } from '../task-registry'\n\nimport { InputStep } from '../../service/step/step-type'\nimport { Context } from '../types'\n\nfunction mapping(rule, input) {\n if (Array.isArray(input)) {\n return input.map(i => mapping(rule, i))\n }\n\n return Object.keys(rule).reduce((sum, key) => {\n sum[key] = input[rule[key]]\n return sum\n }, {} as any)\n}\n\nasync function DataMapper(step: InputStep, { logger, data }: Context) {\n var {\n params: { accessor, mappingRule }\n } = step\n\n const input = access(accessor, data)\n const output = mapping(mappingRule || {}, input)\n\n return {\n data: output\n }\n}\n\nDataMapper.parameterSpec = [\n {\n type: 'scenario-step-input',\n name: 'accessor',\n label: 'accessor'\n },\n {\n type: 'key-values',\n name: 'mappingRule',\n label: 'mapping-rule'\n }\n]\n\nDataMapper.connectorFree = true\nDataMapper.help = 'integration/task/data-mapper'\n\nTaskRegistry.registerTaskHandler('data-mapper', DataMapper)\n"]}
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1 @@
1
+ export {};