@things-factory/integration-base 7.0.0-alpha.0 → 7.0.0-alpha.18

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 (202) hide show
  1. package/dist-server/controllers/index.js +5 -0
  2. package/dist-server/controllers/index.js.map +1 -0
  3. package/dist-server/controllers/scenario-controller.js +87 -0
  4. package/dist-server/controllers/scenario-controller.js.map +1 -0
  5. package/dist-server/engine/connection-manager.js +37 -6
  6. package/dist-server/engine/connection-manager.js.map +1 -1
  7. package/dist-server/engine/connector/echo-back-connector.js +1 -1
  8. package/dist-server/engine/connector/echo-back-connector.js.map +1 -1
  9. package/dist-server/engine/connector/echo-back-server.js +1 -1
  10. package/dist-server/engine/connector/echo-back-server.js.map +1 -1
  11. package/dist-server/engine/connector/graphql-connector.js +6 -6
  12. package/dist-server/engine/connector/graphql-connector.js.map +1 -1
  13. package/dist-server/engine/connector/http-connector.js.map +1 -1
  14. package/dist-server/engine/connector/mqtt-connector.js.map +1 -1
  15. package/dist-server/engine/connector/mssql-connector.js.map +1 -1
  16. package/dist-server/engine/connector/mysql-connector.js +3 -3
  17. package/dist-server/engine/connector/mysql-connector.js.map +1 -1
  18. package/dist-server/engine/connector/operato-connector.js +19 -22
  19. package/dist-server/engine/connector/operato-connector.js.map +1 -1
  20. package/dist-server/engine/connector/oracle-connector.js +113 -17
  21. package/dist-server/engine/connector/oracle-connector.js.map +1 -1
  22. package/dist-server/engine/connector/postgresql-connector.js.map +1 -1
  23. package/dist-server/engine/connector/proxy-connector.js +44 -0
  24. package/dist-server/engine/connector/proxy-connector.js.map +1 -0
  25. package/dist-server/engine/connector/socket-server.js +1 -1
  26. package/dist-server/engine/connector/socket-server.js.map +1 -1
  27. package/dist-server/engine/connector/sqlite-connector.js.map +1 -1
  28. package/dist-server/engine/edge-client.js +38 -0
  29. package/dist-server/engine/edge-client.js.map +1 -0
  30. package/dist-server/engine/index.js +1 -0
  31. package/dist-server/engine/index.js.map +1 -1
  32. package/dist-server/engine/task/book-up-scenario.js.map +1 -1
  33. package/dist-server/engine/task/csv-readline.js.map +1 -1
  34. package/dist-server/engine/task/data-accessor.js.map +1 -1
  35. package/dist-server/engine/task/data-mapper.js.map +1 -1
  36. package/dist-server/engine/task/database-query.js.map +1 -1
  37. package/dist-server/engine/task/echo-receive.js.map +1 -1
  38. package/dist-server/engine/task/echo-send.js.map +1 -1
  39. package/dist-server/engine/task/empty-check.js.map +1 -1
  40. package/dist-server/engine/task/end.js.map +1 -1
  41. package/dist-server/engine/task/floating-point.js.map +1 -1
  42. package/dist-server/engine/task/goto.js.map +1 -1
  43. package/dist-server/engine/task/graphql-mutate.js.map +1 -1
  44. package/dist-server/engine/task/graphql-query.js.map +1 -1
  45. package/dist-server/engine/task/headless-post.js.map +1 -1
  46. package/dist-server/engine/task/headless-scrap.js.map +1 -1
  47. package/dist-server/engine/task/http-get.js.map +1 -1
  48. package/dist-server/engine/task/http-post.js.map +1 -1
  49. package/dist-server/engine/task/jsonata.js +1 -1
  50. package/dist-server/engine/task/jsonata.js.map +1 -1
  51. package/dist-server/engine/task/local-graphql-mutate.js.map +1 -1
  52. package/dist-server/engine/task/local-graphql-query.js.map +1 -1
  53. package/dist-server/engine/task/log.js.map +1 -1
  54. package/dist-server/engine/task/mqtt-publish.js.map +1 -1
  55. package/dist-server/engine/task/mqtt-subscribe.js.map +1 -1
  56. package/dist-server/engine/task/oracle-procedure.js +1 -15
  57. package/dist-server/engine/task/oracle-procedure.js.map +1 -1
  58. package/dist-server/engine/task/pick-pending-scenario.js.map +1 -1
  59. package/dist-server/engine/task/publish.js.map +1 -1
  60. package/dist-server/engine/task/random.js.map +1 -1
  61. package/dist-server/engine/task/reset-pending-queue.js.map +1 -1
  62. package/dist-server/engine/task/script.js +1 -0
  63. package/dist-server/engine/task/script.js.map +1 -1
  64. package/dist-server/engine/task/set-domain.js.map +1 -1
  65. package/dist-server/engine/task/sleep.js.map +1 -1
  66. package/dist-server/engine/task/socket-listener.js.map +1 -1
  67. package/dist-server/engine/task/state-read.js.map +1 -1
  68. package/dist-server/engine/task/state-write.js.map +1 -1
  69. package/dist-server/engine/task/stop-scenario.js.map +1 -1
  70. package/dist-server/engine/task/sub-scenario.js.map +1 -1
  71. package/dist-server/engine/task/switch-goto.js.map +1 -1
  72. package/dist-server/engine/task/switch-range-goto.js.map +1 -1
  73. package/dist-server/engine/task/switch-range-scenario.js.map +1 -1
  74. package/dist-server/engine/task/switch-range-set.js.map +1 -1
  75. package/dist-server/engine/task/switch-scenario.js.map +1 -1
  76. package/dist-server/engine/task/switch-set.js.map +1 -1
  77. package/dist-server/engine/task/throw.js.map +1 -1
  78. package/dist-server/engine/task/utils/headless-pool-for-scenario.js +1 -1
  79. package/dist-server/engine/task/utils/headless-pool-for-scenario.js.map +1 -1
  80. package/dist-server/engine/task/variables.js.map +1 -1
  81. package/dist-server/engine/types.js.map +1 -1
  82. package/dist-server/index.js +1 -0
  83. package/dist-server/index.js.map +1 -1
  84. package/dist-server/restful/unstable/run-scenario.js.map +1 -1
  85. package/dist-server/restful/unstable/start-scenario.js +1 -1
  86. package/dist-server/restful/unstable/start-scenario.js.map +1 -1
  87. package/dist-server/restful/unstable/stop-scenario.js +1 -1
  88. package/dist-server/restful/unstable/stop-scenario.js.map +1 -1
  89. package/dist-server/service/connection/connection-mutation.js +4 -8
  90. package/dist-server/service/connection/connection-mutation.js.map +1 -1
  91. package/dist-server/service/connection/connection-query.js +17 -14
  92. package/dist-server/service/connection/connection-query.js.map +1 -1
  93. package/dist-server/service/connection/connection-subscription.js +11 -14
  94. package/dist-server/service/connection/connection-subscription.js.map +1 -1
  95. package/dist-server/service/connection/connection-type.js +66 -13
  96. package/dist-server/service/connection/connection-type.js.map +1 -1
  97. package/dist-server/service/scenario-instance/scenario-instance-mutation.js +4 -71
  98. package/dist-server/service/scenario-instance/scenario-instance-mutation.js.map +1 -1
  99. package/dist-server/service/scenario-instance/scenario-instance-subscription.js +8 -9
  100. package/dist-server/service/scenario-instance/scenario-instance-subscription.js.map +1 -1
  101. package/dist-server/service/scenario-instance/scenario-instance-type.js +18 -5
  102. package/dist-server/service/scenario-instance/scenario-instance-type.js.map +1 -1
  103. package/dist-server/service/scenario-queue/scenario-queue-subscription.js +4 -4
  104. package/dist-server/service/scenario-queue/scenario-queue-subscription.js.map +1 -1
  105. package/dist-server/service/step/step-type.js +41 -28
  106. package/dist-server/service/step/step-type.js.map +1 -1
  107. package/dist-server/tsconfig.tsbuildinfo +1 -1
  108. package/helps/integration/concept/script-internal-variables.ja.md +21 -1
  109. package/helps/integration/concept/script-internal-variables.ko.md +17 -0
  110. package/helps/integration/concept/script-internal-variables.md +18 -0
  111. package/helps/integration/concept/script-internal-variables.ms.md +19 -1
  112. package/helps/integration/concept/script-internal-variables.zh.md +18 -0
  113. package/helps/integration/connector/oracle-connector.ja.md +90 -0
  114. package/helps/integration/connector/oracle-connector.ko.md +87 -0
  115. package/helps/integration/connector/oracle-connector.md +46 -25
  116. package/helps/integration/connector/oracle-connector.ms.md +87 -0
  117. package/helps/integration/connector/oracle-connector.zh.md +87 -0
  118. package/helps/integration/task/script.ja.md +1 -1
  119. package/helps/integration/task/script.ko.md +1 -1
  120. package/helps/integration/task/script.md +1 -1
  121. package/helps/integration/task/script.ms.md +1 -1
  122. package/helps/integration/task/script.zh.md +1 -1
  123. package/openapi/unstable/scenario.yaml +100 -100
  124. package/openapi/unstable.yaml +11 -11
  125. package/package.json +8 -11
  126. package/server/controllers/index.ts +1 -0
  127. package/server/controllers/scenario-controller.ts +116 -0
  128. package/server/engine/connection-manager.ts +49 -7
  129. package/server/engine/connector/echo-back-connector.ts +4 -3
  130. package/server/engine/connector/echo-back-server.ts +5 -4
  131. package/server/engine/connector/graphql-connector.ts +12 -13
  132. package/server/engine/connector/http-connector.ts +4 -3
  133. package/server/engine/connector/mqtt-connector.ts +4 -3
  134. package/server/engine/connector/mssql-connector.ts +4 -3
  135. package/server/engine/connector/mysql-connector.ts +8 -6
  136. package/server/engine/connector/operato-connector.ts +27 -35
  137. package/server/engine/connector/oracle-connector.ts +136 -23
  138. package/server/engine/connector/postgresql-connector.ts +4 -3
  139. package/server/engine/connector/proxy-connector.ts +53 -0
  140. package/server/engine/connector/socket-server.ts +5 -4
  141. package/server/engine/connector/sqlite-connector.ts +5 -3
  142. package/server/engine/edge-client.ts +45 -0
  143. package/server/engine/index.ts +1 -0
  144. package/server/engine/task/book-up-scenario.ts +3 -1
  145. package/server/engine/task/csv-readline.ts +4 -1
  146. package/server/engine/task/data-accessor.ts +4 -1
  147. package/server/engine/task/data-mapper.ts +4 -1
  148. package/server/engine/task/database-query.ts +3 -1
  149. package/server/engine/task/echo-receive.ts +4 -1
  150. package/server/engine/task/echo-send.ts +3 -1
  151. package/server/engine/task/empty-check.ts +4 -1
  152. package/server/engine/task/end.ts +4 -1
  153. package/server/engine/task/floating-point.ts +4 -1
  154. package/server/engine/task/goto.ts +4 -1
  155. package/server/engine/task/graphql-mutate.ts +3 -1
  156. package/server/engine/task/graphql-query.ts +3 -1
  157. package/server/engine/task/headless-post.ts +4 -1
  158. package/server/engine/task/headless-scrap.ts +3 -1
  159. package/server/engine/task/http-get.ts +3 -1
  160. package/server/engine/task/http-post.ts +3 -1
  161. package/server/engine/task/jsonata.ts +5 -2
  162. package/server/engine/task/local-graphql-mutate.ts +5 -1
  163. package/server/engine/task/local-graphql-query.ts +3 -1
  164. package/server/engine/task/log.ts +3 -1
  165. package/server/engine/task/mqtt-publish.ts +3 -1
  166. package/server/engine/task/mqtt-subscribe.ts +3 -1
  167. package/server/engine/task/oracle-procedure.ts +4 -17
  168. package/server/engine/task/pick-pending-scenario.ts +3 -1
  169. package/server/engine/task/publish.ts +3 -1
  170. package/server/engine/task/random.ts +4 -1
  171. package/server/engine/task/reset-pending-queue.ts +3 -1
  172. package/server/engine/task/script.ts +5 -1
  173. package/server/engine/task/set-domain.ts +4 -1
  174. package/server/engine/task/sleep.ts +3 -1
  175. package/server/engine/task/socket-listener.ts +3 -1
  176. package/server/engine/task/state-read.ts +3 -1
  177. package/server/engine/task/state-write.ts +3 -1
  178. package/server/engine/task/stop-scenario.ts +3 -1
  179. package/server/engine/task/sub-scenario.ts +3 -1
  180. package/server/engine/task/switch-goto.ts +4 -1
  181. package/server/engine/task/switch-range-goto.ts +3 -1
  182. package/server/engine/task/switch-range-scenario.ts +3 -1
  183. package/server/engine/task/switch-range-set.ts +3 -1
  184. package/server/engine/task/switch-scenario.ts +3 -1
  185. package/server/engine/task/switch-set.ts +3 -1
  186. package/server/engine/task/throw.ts +3 -1
  187. package/server/engine/task/utils/headless-pool-for-scenario.ts +1 -1
  188. package/server/engine/task/variables.ts +3 -1
  189. package/server/engine/types.ts +80 -4
  190. package/server/index.ts +1 -0
  191. package/server/restful/unstable/run-scenario.ts +0 -1
  192. package/server/restful/unstable/start-scenario.ts +1 -1
  193. package/server/restful/unstable/stop-scenario.ts +1 -1
  194. package/server/service/connection/connection-mutation.ts +9 -29
  195. package/server/service/connection/connection-query.ts +13 -12
  196. package/server/service/connection/connection-subscription.ts +18 -24
  197. package/server/service/connection/connection-type.ts +100 -21
  198. package/server/service/scenario-instance/scenario-instance-mutation.ts +10 -121
  199. package/server/service/scenario-instance/scenario-instance-subscription.ts +16 -23
  200. package/server/service/scenario-instance/scenario-instance-type.ts +24 -13
  201. package/server/service/scenario-queue/scenario-queue-subscription.ts +7 -7
  202. package/server/service/step/step-type.ts +78 -22
@@ -1 +1 @@
1
- {"version":3,"file":"connection-query.js","sourceRoot":"","sources":["../../../server/service/connection/connection-query.ts"],"names":[],"mappings":"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","sourcesContent":["import { Arg, Args, Ctx, FieldResolver, Query, Resolver, Root } from 'type-graphql'\n\nimport { User } from '@things-factory/auth-base'\nimport { Domain, getQueryBuilderFromListParams, getRepository, ListParam } from '@things-factory/shell'\n\nimport { ConnectionManager } from '../../engine/connection-manager'\nimport { Connection, ConnectionList, ConnectionState, ConnectionStatus } from './connection-type'\n\n@Resolver(Connection)\nexport class ConnectionQuery {\n @Query(returns => Connection, { description: 'To fetch a connection' })\n async connection(@Arg('name') name: string, @Ctx() context: ResolverContext): Promise<Connection> {\n const { domain } = context.state\n\n var connection = await getRepository(Connection).findOne({\n where: { domain: { id: domain.id }, name },\n relations: ['domain']\n })\n\n return {\n ...connection,\n state: ConnectionManager.getConnectionInstance(connection)\n ? ConnectionStatus.CONNECTED\n : ConnectionStatus.DISCONNECTED\n } as Connection\n }\n\n @Query(returns => ConnectionList, { description: 'To fetch multiple connections' })\n async connections(@Args() params: ListParam, @Ctx() context: ResolverContext): Promise<ConnectionList> {\n const { domain } = context.state\n\n const queryBuilder = getQueryBuilderFromListParams({\n repository: getRepository(Connection),\n params,\n domain,\n alias: 'connection',\n searchables: ['name', 'description', 'type', 'endpoint']\n })\n\n const [items, total] = await queryBuilder.leftJoinAndSelect('connection.domain', 'domain').getManyAndCount()\n\n items.forEach(connection => {\n connection['state'] = ConnectionManager.getConnectionInstance(connection)\n ? ConnectionStatus.CONNECTED\n : ConnectionStatus.DISCONNECTED\n })\n\n return { items, total }\n }\n\n @Query(returns => ConnectionState, { description: 'To fetch the state of a connection' })\n fetchConnectionState(@Arg('name') name: string, @Ctx() context: ResolverContext): ConnectionState {\n const { domain } = context.state\n\n var connection = ConnectionManager.getConnectionInstanceByName(domain, name)\n\n return {\n name,\n state: connection ? ConnectionStatus.CONNECTED : ConnectionStatus.DISCONNECTED\n }\n }\n\n @FieldResolver(type => Domain)\n async domain(@Root() connection: Connection) {\n return connection.domain || (await getRepository(Domain).findOneBy({ id: connection.domainId }))\n }\n\n @FieldResolver(type => User)\n async updater(@Root() connection: Connection): Promise<User> {\n return await getRepository(User).findOneBy({ id: connection.updaterId })\n }\n\n @FieldResolver(type => User)\n async creator(@Root() connection: Connection): Promise<User> {\n return await getRepository(User).findOneBy({ id: connection.creatorId })\n }\n}\n"]}
1
+ {"version":3,"file":"connection-query.js","sourceRoot":"","sources":["../../../server/service/connection/connection-query.ts"],"names":[],"mappings":";;;;AAAA,+CAAmF;AAEnF,yDAA2D;AAC3D,iDAAuG;AAEvG,wEAAmE;AACnE,uDAAiG;AAG1F,IAAM,eAAe,GAArB,MAAM,eAAe;IAEpB,AAAN,KAAK,CAAC,UAAU,CAAc,IAAY,EAAS,OAAwB;QACzE,MAAM,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,KAAK,CAAA;QAEhC,IAAI,UAAU,GAAG,MAAM,IAAA,qBAAa,EAAC,4BAAU,CAAC,CAAC,OAAO,CAAC;YACvD,KAAK,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,EAAE,MAAM,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE;YAC1C,SAAS,EAAE,CAAC,QAAQ,CAAC;SACtB,CAAC,CAAA;QAEF,OAAO,gCACF,UAAU,KACb,KAAK,EAAE,sCAAiB,CAAC,qBAAqB,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,kCAAgB,CAAC,SAAS,CAAC,CAAC,CAAC,kCAAgB,CAAC,YAAY,GAC1G,CAAA;IACjB,CAAC;IAGK,AAAN,KAAK,CAAC,WAAW,CAAS,MAAiB,EAAS,OAAwB;QAC1E,MAAM,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,KAAK,CAAA;QAEhC,MAAM,YAAY,GAAG,IAAA,qCAA6B,EAAC;YACjD,UAAU,EAAE,IAAA,qBAAa,EAAC,4BAAU,CAAC;YACrC,MAAM;YACN,MAAM;YACN,KAAK,EAAE,YAAY;YACnB,WAAW,EAAE,CAAC,MAAM,EAAE,aAAa,EAAE,MAAM,EAAE,UAAU,CAAC;SACzD,CAAC,CAAA;QAEF,MAAM,CAAC,KAAK,EAAE,KAAK,CAAC,GAAG,MAAM,YAAY,CAAC,iBAAiB,CAAC,mBAAmB,EAAE,QAAQ,CAAC,CAAC,eAAe,EAAE,CAAA;QAE5G,KAAK,CAAC,OAAO,CAAC,UAAU,CAAC,EAAE;YACzB,UAAU,CAAC,OAAO,CAAC,GAAG,sCAAiB,CAAC,qBAAqB,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,kCAAgB,CAAC,SAAS,CAAC,CAAC,CAAC,kCAAgB,CAAC,YAAY,CAAA;QACxI,CAAC,CAAC,CAAA;QAEF,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,CAAA;IACzB,CAAC;IAGD,oBAAoB,CAAc,IAAY,EAAS,OAAwB;QAC7E,MAAM,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,KAAK,CAAA;QAEhC,MAAM,UAAU,GAAG,sCAAiB,CAAC,iCAAiC,CAAC,MAAM,EAAE,IAAI,CAAC,CAAA;QAEpF,uCACK,UAAU,KACb,KAAK,EAAE,UAAU,CAAC,CAAC,CAAC,kCAAgB,CAAC,SAAS,CAAC,CAAC,CAAC,kCAAgB,CAAC,YAAY,IAC/E;IACH,CAAC;IAGK,AAAN,KAAK,CAAC,IAAI,CAAS,UAAsB;QACvC,OAAO,UAAU,CAAC,MAAM,IAAI,CAAC,MAAM,IAAA,qBAAa,EAAC,qBAAS,CAAC,CAAC,SAAS,CAAC,EAAE,EAAE,EAAE,UAAU,CAAC,MAAM,EAAE,CAAC,CAAC,CAAA;IACnG,CAAC;IAGK,AAAN,KAAK,CAAC,MAAM,CAAS,UAAsB;QACzC,OAAO,UAAU,CAAC,MAAM,IAAI,CAAC,UAAU,CAAC,QAAQ,IAAI,CAAC,MAAM,IAAA,qBAAa,EAAC,cAAM,CAAC,CAAC,SAAS,CAAC,EAAE,EAAE,EAAE,UAAU,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,CAAA;IAC3H,CAAC;IAGK,AAAN,KAAK,CAAC,OAAO,CAAS,UAAsB;QAC1C,OAAO,UAAU,CAAC,SAAS,IAAI,CAAC,MAAM,IAAA,qBAAa,EAAC,gBAAI,CAAC,CAAC,SAAS,CAAC,EAAE,EAAE,EAAE,UAAU,CAAC,SAAS,EAAE,CAAC,CAAC,CAAA;IACpG,CAAC;IAGK,AAAN,KAAK,CAAC,OAAO,CAAS,UAAsB;QAC1C,OAAO,UAAU,CAAC,SAAS,IAAI,CAAC,MAAM,IAAA,qBAAa,EAAC,gBAAI,CAAC,CAAC,SAAS,CAAC,EAAE,EAAE,EAAE,UAAU,CAAC,SAAS,EAAE,CAAC,CAAC,CAAA;IACpG,CAAC;CACF,CAAA;AAlEO;IADL,IAAA,oBAAK,EAAC,OAAO,CAAC,EAAE,CAAC,4BAAU,EAAE,EAAE,WAAW,EAAE,uBAAuB,EAAE,CAAC;IACrD,mBAAA,IAAA,kBAAG,EAAC,MAAM,CAAC,CAAA;IAAgB,mBAAA,IAAA,kBAAG,GAAE,CAAA;;;;iDAYjD;AAGK;IADL,IAAA,oBAAK,EAAC,OAAO,CAAC,EAAE,CAAC,gCAAc,EAAE,EAAE,WAAW,EAAE,+BAA+B,EAAE,CAAC;IAChE,mBAAA,IAAA,mBAAI,GAAE,CAAA;IAAqB,mBAAA,IAAA,kBAAG,GAAE,CAAA;;6CAAjB,iBAAS;;kDAkB1C;AAED;IAAC,IAAA,oBAAK,EAAC,OAAO,CAAC,EAAE,CAAC,iCAAe,EAAE,EAAE,WAAW,EAAE,oCAAoC,EAAE,CAAC;IACnE,mBAAA,IAAA,kBAAG,EAAC,MAAM,CAAC,CAAA;IAAgB,mBAAA,IAAA,kBAAG,GAAE,CAAA;;;4CAA4B,iCAAe;2DAShG;AAGK;IADL,IAAA,4BAAa,EAAC,IAAI,CAAC,EAAE,CAAC,cAAM,CAAC;IAClB,mBAAA,IAAA,mBAAI,GAAE,CAAA;;6CAAa,4BAAU;;2CAExC;AAGK;IADL,IAAA,4BAAa,EAAC,IAAI,CAAC,EAAE,CAAC,cAAM,CAAC;IAChB,mBAAA,IAAA,mBAAI,GAAE,CAAA;;6CAAa,4BAAU;;6CAE1C;AAGK;IADL,IAAA,4BAAa,EAAC,IAAI,CAAC,EAAE,CAAC,gBAAI,CAAC;IACb,mBAAA,IAAA,mBAAI,GAAE,CAAA;;6CAAa,4BAAU;;8CAE3C;AAGK;IADL,IAAA,4BAAa,EAAC,IAAI,CAAC,EAAE,CAAC,gBAAI,CAAC;IACb,mBAAA,IAAA,mBAAI,GAAE,CAAA;;6CAAa,4BAAU;;8CAE3C;AAnEU,eAAe;IAD3B,IAAA,uBAAQ,EAAC,4BAAU,CAAC;GACR,eAAe,CAoE3B;AApEY,0CAAe","sourcesContent":["import { Arg, Args, Ctx, FieldResolver, Query, Resolver, Root } from 'type-graphql'\n\nimport { Appliance, User } from '@things-factory/auth-base'\nimport { Domain, getQueryBuilderFromListParams, getRepository, ListParam } from '@things-factory/shell'\n\nimport { ConnectionManager } from '../../engine/connection-manager'\nimport { Connection, ConnectionList, ConnectionState, ConnectionStatus } from './connection-type'\n\n@Resolver(Connection)\nexport class ConnectionQuery {\n @Query(returns => Connection, { description: 'To fetch a connection' })\n async connection(@Arg('name') name: string, @Ctx() context: ResolverContext): Promise<Connection> {\n const { domain } = context.state\n\n var connection = await getRepository(Connection).findOne({\n where: { domain: { id: domain.id }, name },\n relations: ['domain']\n })\n\n return {\n ...connection,\n state: ConnectionManager.getConnectionInstance(connection) ? ConnectionStatus.CONNECTED : ConnectionStatus.DISCONNECTED\n } as Connection\n }\n\n @Query(returns => ConnectionList, { description: 'To fetch multiple connections' })\n async connections(@Args() params: ListParam, @Ctx() context: ResolverContext): Promise<ConnectionList> {\n const { domain } = context.state\n\n const queryBuilder = getQueryBuilderFromListParams({\n repository: getRepository(Connection),\n params,\n domain,\n alias: 'connection',\n searchables: ['name', 'description', 'type', 'endpoint']\n })\n\n const [items, total] = await queryBuilder.leftJoinAndSelect('connection.domain', 'domain').getManyAndCount()\n\n items.forEach(connection => {\n connection['state'] = ConnectionManager.getConnectionInstance(connection) ? ConnectionStatus.CONNECTED : ConnectionStatus.DISCONNECTED\n })\n\n return { items, total }\n }\n\n @Query(returns => ConnectionState, { description: 'To fetch the state of a connection' })\n fetchConnectionState(@Arg('name') name: string, @Ctx() context: ResolverContext): ConnectionState {\n const { domain } = context.state\n\n const connection = ConnectionManager.getConnectionInstanceEntityByName(domain, name)\n\n return {\n ...connection,\n state: connection ? ConnectionStatus.CONNECTED : ConnectionStatus.DISCONNECTED\n }\n }\n\n @FieldResolver(type => Domain)\n async edge(@Root() connection: Connection) {\n return connection.edgeId && (await getRepository(Appliance).findOneBy({ id: connection.edgeId }))\n }\n\n @FieldResolver(type => Domain)\n async domain(@Root() connection: Connection) {\n return connection.domain || (connection.domainId && (await getRepository(Domain).findOneBy({ id: connection.domainId })))\n }\n\n @FieldResolver(type => User)\n async updater(@Root() connection: Connection): Promise<User> {\n return connection.updaterId && (await getRepository(User).findOneBy({ id: connection.updaterId }))\n }\n\n @FieldResolver(type => User)\n async creator(@Root() connection: Connection): Promise<User> {\n return connection.creatorId && (await getRepository(User).findOneBy({ id: connection.creatorId }))\n }\n}\n"]}
@@ -2,7 +2,7 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.ConnectionSubscription = void 0;
4
4
  const tslib_1 = require("tslib");
5
- const graphql_subscriptions_1 = require("graphql-subscriptions");
5
+ const graphql_yoga_1 = require("graphql-yoga");
6
6
  const type_graphql_1 = require("type-graphql");
7
7
  const shell_1 = require("@things-factory/shell");
8
8
  const connection_manager_1 = require("../../engine/connection-manager");
@@ -18,7 +18,7 @@ let ConnectionSubscription = class ConnectionSubscription {
18
18
  };
19
19
  tslib_1.__decorate([
20
20
  (0, type_graphql_1.Subscription)({
21
- subscribe: (_, args, context, info) => {
21
+ subscribe: ({ args, context, info }) => {
22
22
  var _a;
23
23
  const { domain, user } = context.state;
24
24
  const { name } = args;
@@ -31,27 +31,24 @@ tslib_1.__decorate([
31
31
  throw new Error(`domain(${subdomain}) is not working for user(${user.email}).`);
32
32
  }
33
33
  process.nextTick(async () => {
34
- var where = { domain };
34
+ var where = { domain: { id: domain.id } };
35
35
  if (name) {
36
36
  where['name'] = name;
37
37
  }
38
38
  var connections = await (0, shell_1.getRepository)(connection_type_1.Connection).find({
39
39
  where,
40
- relations: ['domain']
40
+ relations: ['domain', 'edge']
41
41
  });
42
42
  connections.forEach(connection => {
43
43
  shell_1.pubsub.publish('connection-state', {
44
- connectionState: Object.assign(Object.assign({}, connection), { state: connection_manager_1.ConnectionManager.getConnectionInstance(connection)
45
- ? connection_type_1.ConnectionStatus.CONNECTED
46
- : connection_type_1.ConnectionStatus.DISCONNECTED, timestamp: new Date() })
44
+ connectionState: Object.assign(Object.assign({}, connection), { state: connection_manager_1.ConnectionManager.getConnectionInstance(connection) ? connection_type_1.ConnectionStatus.CONNECTED : connection_type_1.ConnectionStatus.DISCONNECTED, timestamp: new Date() })
47
45
  });
48
46
  });
49
47
  });
50
- return (0, graphql_subscriptions_1.withFilter)(() => shell_1.pubsub.asyncIterator('connection-state'), (payload, variables, context, info) => {
48
+ return (0, graphql_yoga_1.pipe)(shell_1.pubsub.subscribe('connection-state'), (0, graphql_yoga_1.filter)(async (payload) => {
51
49
  const { domain: pdomain, name: pname } = payload.connectionState;
52
- const { name } = variables;
53
50
  return (!name || name === pname) && subdomain === (pdomain === null || pdomain === void 0 ? void 0 : pdomain.subdomain);
54
- })(_, args, context, info);
51
+ }));
55
52
  }
56
53
  }),
57
54
  tslib_1.__param(0, (0, type_graphql_1.Root)()),
@@ -62,7 +59,7 @@ tslib_1.__decorate([
62
59
  ], ConnectionSubscription.prototype, "connectionState", null);
63
60
  tslib_1.__decorate([
64
61
  (0, type_graphql_1.Subscription)({
65
- subscribe: (_, args, context, info) => {
62
+ subscribe: ({ args, context, info }) => {
66
63
  var _a;
67
64
  const { domain, user } = context.state;
68
65
  const { level } = args;
@@ -74,9 +71,9 @@ tslib_1.__decorate([
74
71
  if (!((_a = user.domains) === null || _a === void 0 ? void 0 : _a.find(d => d.subdomain === subdomain)) && !process.superUserGranted(domain, user)) {
75
72
  throw new Error(`domain(${subdomain}) is not working for user(${user.email}).`);
76
73
  }
77
- return (0, graphql_subscriptions_1.withFilter)(() => shell_1.pubsub.asyncIterator('connection-log'), (payload, variables, context, info) => {
74
+ return (0, graphql_yoga_1.pipe)(shell_1.pubsub.subscribe('connection-log'), (0, graphql_yoga_1.filter)(async (payload) => {
78
75
  // TODO support domain filtering
79
- const { /* source, */ level: plevel } = payload.connectionLog;
76
+ const { /* source, */ level: plevel } = payload.log;
80
77
  // const { domain: pdomain } = source
81
78
  // if (subdomain !== pdomain?.subdomain) {
82
79
  // return false
@@ -85,7 +82,7 @@ tslib_1.__decorate([
85
82
  return false;
86
83
  }
87
84
  return true;
88
- })(_, args, context, info);
85
+ }));
89
86
  }
90
87
  }),
91
88
  tslib_1.__param(0, (0, type_graphql_1.Root)()),
@@ -1 +1 @@
1
- {"version":3,"file":"connection-subscription.js","sourceRoot":"","sources":["../../../server/service/connection/connection-subscription.ts"],"names":[],"mappings":"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","sourcesContent":["import { withFilter } from 'graphql-subscriptions'\nimport { Arg, Resolver, Root, Subscription } from 'type-graphql'\n\nimport { getRepository, Log, pubsub } from '@things-factory/shell'\n\nimport { ConnectionManager } from '../../engine/connection-manager'\nimport { Connection, ConnectionState, ConnectionStatus } from './connection-type'\n\nconst debug = require('debug')('things-factory:integration:connection-subscription')\n\n@Resolver(Connection)\nexport class ConnectionSubscription {\n @Subscription({\n subscribe: (_, args, context, info) => {\n const { domain, user } = context.state\n const { name } = args\n const subdomain = domain?.subdomain\n\n debug('subscribe', subdomain)\n if (!domain) {\n throw new Error('domain required.')\n }\n\n if (!user.domains?.find(d => d.subdomain === subdomain) && !process.superUserGranted(domain, user)) {\n throw new Error(`domain(${subdomain}) is not working for user(${user.email}).`)\n }\n\n process.nextTick(async () => {\n var where = { domain }\n if (name) {\n where['name'] = name\n }\n\n var connections = await getRepository(Connection).find({\n where,\n relations: ['domain']\n })\n\n connections.forEach(connection => {\n pubsub.publish('connection-state', {\n connectionState: {\n ...connection,\n state: ConnectionManager.getConnectionInstance(connection)\n ? ConnectionStatus.CONNECTED\n : ConnectionStatus.DISCONNECTED,\n timestamp: new Date()\n }\n })\n })\n })\n\n return withFilter(\n () => pubsub.asyncIterator('connection-state'),\n (payload, variables, context, info) => {\n const { domain: pdomain, name: pname } = payload.connectionState\n const { name } = variables\n\n return (!name || name === pname) && subdomain === pdomain?.subdomain\n }\n )(_, args, context, info)\n }\n })\n connectionState(\n @Root() payload: { connectionState: ConnectionState },\n @Arg('name', { nullable: true }) name: string\n ): ConnectionState {\n return payload.connectionState\n }\n\n @Subscription({\n subscribe: (_, args, context, info) => {\n const { domain, user } = context.state\n const { level } = args\n\n const subdomain = domain?.subdomain\n\n debug('subscribe', subdomain)\n\n if (!domain) {\n throw new Error('domain required')\n }\n\n if (!user.domains?.find(d => d.subdomain === subdomain) && !process.superUserGranted(domain, user)) {\n throw new Error(`domain(${subdomain}) is not working for user(${user.email}).`)\n }\n\n return withFilter(\n () => pubsub.asyncIterator('connection-log'),\n (payload, variables, context, info) => {\n // TODO support domain filtering\n const { /* source, */ level: plevel } = payload.connectionLog\n // const { domain: pdomain } = source\n\n // if (subdomain !== pdomain?.subdomain) {\n // return false\n // }\n\n if (level && level !== plevel) {\n return false\n }\n\n return true\n }\n )(_, args, context, info)\n }\n })\n connectionLog(@Root() payload: { log: Log }, @Arg('level', { nullable: true }) level: string): Log {\n return payload.log\n }\n}\n"]}
1
+ {"version":3,"file":"connection-subscription.js","sourceRoot":"","sources":["../../../server/service/connection/connection-subscription.ts"],"names":[],"mappings":"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","sourcesContent":["import { filter, pipe } from 'graphql-yoga'\nimport { Arg, Resolver, Root, Subscription } from 'type-graphql'\n\nimport { getRepository, Log, pubsub } from '@things-factory/shell'\n\nimport { ConnectionManager } from '../../engine/connection-manager'\nimport { Connection, ConnectionState, ConnectionStatus } from './connection-type'\n\nconst debug = require('debug')('things-factory:integration:connection-subscription')\n\n@Resolver(Connection)\nexport class ConnectionSubscription {\n @Subscription({\n subscribe: ({ args, context, info }) => {\n const { domain, user } = context.state\n const { name } = args\n const subdomain = domain?.subdomain\n\n debug('subscribe', subdomain)\n if (!domain) {\n throw new Error('domain required.')\n }\n\n if (!user.domains?.find(d => d.subdomain === subdomain) && !process.superUserGranted(domain, user)) {\n throw new Error(`domain(${subdomain}) is not working for user(${user.email}).`)\n }\n\n process.nextTick(async () => {\n var where = { domain: { id: domain.id } }\n if (name) {\n where['name'] = name\n }\n\n var connections = await getRepository(Connection).find({\n where,\n relations: ['domain', 'edge']\n })\n\n connections.forEach(connection => {\n pubsub.publish('connection-state', {\n connectionState: {\n ...connection,\n state: ConnectionManager.getConnectionInstance(connection) ? ConnectionStatus.CONNECTED : ConnectionStatus.DISCONNECTED,\n timestamp: new Date()\n }\n })\n })\n })\n\n return pipe(\n pubsub.subscribe('connection-state'),\n filter(async (payload: { connectionState: ConnectionState }) => {\n const { domain: pdomain, name: pname } = payload.connectionState\n\n return (!name || name === pname) && subdomain === pdomain?.subdomain\n })\n )\n }\n })\n connectionState(@Root() payload: { connectionState: ConnectionState }, @Arg('name', { nullable: true }) name: string): ConnectionState {\n return payload.connectionState\n }\n\n @Subscription({\n subscribe: ({ args, context, info }) => {\n const { domain, user } = context.state\n const { level } = args\n\n const subdomain = domain?.subdomain\n\n debug('subscribe', subdomain)\n\n if (!domain) {\n throw new Error('domain required')\n }\n\n if (!user.domains?.find(d => d.subdomain === subdomain) && !process.superUserGranted(domain, user)) {\n throw new Error(`domain(${subdomain}) is not working for user(${user.email}).`)\n }\n\n return pipe(\n pubsub.subscribe('connection-log'),\n filter(async (payload: { log: Log }) => {\n // TODO support domain filtering\n const { /* source, */ level: plevel } = payload.log\n // const { domain: pdomain } = source\n\n // if (subdomain !== pdomain?.subdomain) {\n // return false\n // }\n\n if (level && level !== plevel) {\n return false\n }\n\n return true\n })\n )\n }\n })\n connectionLog(@Root() payload: { log: Log }, @Arg('level', { nullable: true }) level: string): Log {\n return payload.log\n }\n}\n"]}
@@ -8,6 +8,7 @@ const auth_base_1 = require("@things-factory/auth-base");
8
8
  const env_1 = require("@things-factory/env");
9
9
  const shell_1 = require("@things-factory/shell");
10
10
  const engine_1 = require("../../engine");
11
+ const proxy_connector_1 = require("../../engine/connector/proxy-connector");
11
12
  var ConnectionStatus;
12
13
  (function (ConnectionStatus) {
13
14
  ConnectionStatus["CONNECTED"] = "CONNECTED";
@@ -18,8 +19,13 @@ var ConnectionStatus;
18
19
  description: 'state enumeration of a connection'
19
20
  });
20
21
  let Connection = class Connection {
22
+ /**
23
+ * Asynchronous method to establish the connection.
24
+ *
25
+ */
21
26
  async connect() {
22
- var connector = engine_1.ConnectionManager.getConnector(this.type);
27
+ const { type, edge } = this;
28
+ const connector = edge ? proxy_connector_1.ProxyConnector.instance : engine_1.ConnectionManager.getConnector(type);
23
29
  var params = {};
24
30
  try {
25
31
  params = JSON.parse(this.params || '{}');
@@ -29,9 +35,14 @@ let Connection = class Connection {
29
35
  }
30
36
  await connector.connect(Object.assign(Object.assign({}, this), { params }));
31
37
  }
38
+ /**
39
+ * @brief Asynchronous method to disconnect the connection.
40
+ *
41
+ */
32
42
  async disconnect() {
33
43
  try {
34
- var connector = engine_1.ConnectionManager.getConnector(this.type);
44
+ const { type, edge } = this;
45
+ const connector = edge ? proxy_connector_1.ProxyConnector.instance : engine_1.ConnectionManager.getConnector(type);
35
46
  await connector.disconnect(this);
36
47
  }
37
48
  finally {
@@ -46,7 +57,11 @@ tslib_1.__decorate([
46
57
  tslib_1.__decorate([
47
58
  (0, typeorm_1.ManyToOne)(type => shell_1.Domain),
48
59
  (0, type_graphql_1.Field)({ nullable: true }),
49
- tslib_1.__metadata("design:type", shell_1.Domain)
60
+ tslib_1.__metadata("design:type", shell_1.Domain
61
+ /**
62
+ * Stores the ID of the associated Domain.
63
+ */
64
+ )
50
65
  ], Connection.prototype, "domain", void 0);
51
66
  tslib_1.__decorate([
52
67
  (0, typeorm_1.RelationId)((connection) => connection.domain),
@@ -69,15 +84,26 @@ tslib_1.__decorate([
69
84
  (0, type_graphql_1.Field)({ nullable: true }),
70
85
  tslib_1.__metadata("design:type", String)
71
86
  ], Connection.prototype, "type", void 0);
87
+ tslib_1.__decorate([
88
+ (0, typeorm_1.ManyToOne)(type => auth_base_1.Appliance, { nullable: true }),
89
+ (0, type_graphql_1.Field)({ nullable: true }),
90
+ tslib_1.__metadata("design:type", auth_base_1.Appliance
91
+ /**
92
+ * Stores the ID of the Appliance who delegate the connection.
93
+ */
94
+ )
95
+ ], Connection.prototype, "edge", void 0);
96
+ tslib_1.__decorate([
97
+ (0, typeorm_1.RelationId)((connection) => connection.edge),
98
+ tslib_1.__metadata("design:type", String)
99
+ ], Connection.prototype, "edgeId", void 0);
72
100
  tslib_1.__decorate([
73
101
  (0, typeorm_1.Column)(),
74
102
  (0, type_graphql_1.Field)({ nullable: true }),
75
103
  tslib_1.__metadata("design:type", String)
76
104
  ], Connection.prototype, "endpoint", void 0);
77
105
  tslib_1.__decorate([
78
- (0, typeorm_1.Column)({
79
- nullable: true
80
- }),
106
+ (0, typeorm_1.Column)({ nullable: true }),
81
107
  (0, type_graphql_1.Field)({ nullable: true }),
82
108
  tslib_1.__metadata("design:type", Boolean)
83
109
  ], Connection.prototype, "active", void 0);
@@ -86,26 +112,36 @@ tslib_1.__decorate([
86
112
  tslib_1.__metadata("design:type", String)
87
113
  ], Connection.prototype, "state", void 0);
88
114
  tslib_1.__decorate([
89
- (0, typeorm_1.Column)({
90
- nullable: true
91
- }),
115
+ (0, typeorm_1.Column)({ nullable: true }),
92
116
  (0, type_graphql_1.Field)({ nullable: true }),
93
117
  tslib_1.__metadata("design:type", String)
94
118
  ], Connection.prototype, "params", void 0);
95
119
  tslib_1.__decorate([
96
120
  (0, typeorm_1.CreateDateColumn)(),
97
121
  (0, type_graphql_1.Field)({ nullable: true }),
98
- tslib_1.__metadata("design:type", Date)
122
+ tslib_1.__metadata("design:type", Date
123
+ /**
124
+ * The date and time when the connection was last updated.
125
+ */
126
+ )
99
127
  ], Connection.prototype, "createdAt", void 0);
100
128
  tslib_1.__decorate([
101
129
  (0, typeorm_1.UpdateDateColumn)(),
102
130
  (0, type_graphql_1.Field)({ nullable: true }),
103
- tslib_1.__metadata("design:type", Date)
131
+ tslib_1.__metadata("design:type", Date
132
+ /**
133
+ * Many-to-One relationship with the User entity who created the connection. Optional field.
134
+ */
135
+ )
104
136
  ], Connection.prototype, "updatedAt", void 0);
105
137
  tslib_1.__decorate([
106
138
  (0, typeorm_1.ManyToOne)(type => auth_base_1.User, { nullable: true }),
107
139
  (0, type_graphql_1.Field)({ nullable: true }),
108
- tslib_1.__metadata("design:type", auth_base_1.User)
140
+ tslib_1.__metadata("design:type", auth_base_1.User
141
+ /**
142
+ * Stores the ID of the User who created the connection.
143
+ */
144
+ )
109
145
  ], Connection.prototype, "creator", void 0);
110
146
  tslib_1.__decorate([
111
147
  (0, typeorm_1.RelationId)((connection) => connection.creator),
@@ -114,7 +150,12 @@ tslib_1.__decorate([
114
150
  tslib_1.__decorate([
115
151
  (0, typeorm_1.ManyToOne)(type => auth_base_1.User, { nullable: true }),
116
152
  (0, type_graphql_1.Field)({ nullable: true }),
117
- tslib_1.__metadata("design:type", auth_base_1.User)
153
+ tslib_1.__metadata("design:type", auth_base_1.User
154
+ /**
155
+ * Stores the ID of the User who last updated the connection.
156
+ *
157
+ */
158
+ )
118
159
  ], Connection.prototype, "updater", void 0);
119
160
  tslib_1.__decorate([
120
161
  (0, typeorm_1.RelationId)((connection) => connection.updater),
@@ -148,6 +189,10 @@ tslib_1.__decorate([
148
189
  (0, type_graphql_1.Field)({ nullable: true }),
149
190
  tslib_1.__metadata("design:type", String)
150
191
  ], ConnectionState.prototype, "type", void 0);
192
+ tslib_1.__decorate([
193
+ (0, type_graphql_1.Field)(type => auth_base_1.Appliance, { nullable: true }),
194
+ tslib_1.__metadata("design:type", auth_base_1.Appliance)
195
+ ], ConnectionState.prototype, "edge", void 0);
151
196
  tslib_1.__decorate([
152
197
  (0, type_graphql_1.Field)({ nullable: true }),
153
198
  tslib_1.__metadata("design:type", String)
@@ -174,6 +219,10 @@ tslib_1.__decorate([
174
219
  (0, type_graphql_1.Field)({ nullable: true }),
175
220
  tslib_1.__metadata("design:type", String)
176
221
  ], NewConnection.prototype, "type", void 0);
222
+ tslib_1.__decorate([
223
+ (0, type_graphql_1.Field)(type => shell_1.ObjectRef, { nullable: true }),
224
+ tslib_1.__metadata("design:type", auth_base_1.Appliance)
225
+ ], NewConnection.prototype, "edge", void 0);
177
226
  tslib_1.__decorate([
178
227
  (0, type_graphql_1.Field)({ nullable: true }),
179
228
  tslib_1.__metadata("design:type", String)
@@ -204,6 +253,10 @@ tslib_1.__decorate([
204
253
  (0, type_graphql_1.Field)({ nullable: true }),
205
254
  tslib_1.__metadata("design:type", String)
206
255
  ], ConnectionPatch.prototype, "type", void 0);
256
+ tslib_1.__decorate([
257
+ (0, type_graphql_1.Field)(type => shell_1.ObjectRef, { nullable: true }),
258
+ tslib_1.__metadata("design:type", auth_base_1.Appliance)
259
+ ], ConnectionPatch.prototype, "edge", void 0);
207
260
  tslib_1.__decorate([
208
261
  (0, type_graphql_1.Field)({ nullable: true }),
209
262
  tslib_1.__metadata("design:type", String)
@@ -1 +1 @@
1
- {"version":3,"file":"connection-type.js","sourceRoot":"","sources":["../../../server/service/connection/connection-type.ts"],"names":[],"mappings":"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","sourcesContent":["import { Field, ID, InputType, Int, ObjectType, registerEnumType } from 'type-graphql'\nimport {\n Column,\n CreateDateColumn,\n Entity,\n Index,\n ManyToOne,\n PrimaryGeneratedColumn,\n RelationId,\n UpdateDateColumn\n} from 'typeorm'\n\nimport { User } from '@things-factory/auth-base'\nimport { logger } from '@things-factory/env'\nimport { Domain } from '@things-factory/shell'\n\nimport { ConnectionManager } from '../../engine'\n\nexport enum ConnectionStatus {\n CONNECTED = 'CONNECTED',\n DISCONNECTED = 'DISCONNECTED'\n}\n\nregisterEnumType(ConnectionStatus, {\n name: 'ConnectionStatus',\n description: 'state enumeration of a connection'\n})\n\n@Entity()\n@Index('ix_connection_0', (connection: Connection) => [connection.domain, connection.name], { unique: true })\n@ObjectType()\nexport class Connection {\n @PrimaryGeneratedColumn('uuid')\n @Field(type => ID)\n readonly id: string\n\n @ManyToOne(type => Domain)\n @Field({ nullable: true })\n domain: Domain\n\n @RelationId((connection: Connection) => connection.domain)\n domainId: string\n\n @Column()\n @Field()\n name: string\n\n @Column({\n nullable: true\n })\n @Field({ nullable: true })\n description: string\n\n @Column()\n @Field({ nullable: true })\n type: string\n\n @Column()\n @Field({ nullable: true })\n endpoint: string\n\n @Column({\n nullable: true\n })\n @Field({ nullable: true })\n active: boolean\n\n @Field({ nullable: true })\n state: ConnectionStatus\n\n @Column({\n nullable: true\n })\n @Field({ nullable: true })\n params: string\n\n @CreateDateColumn()\n @Field({ nullable: true })\n createdAt: Date\n\n @UpdateDateColumn()\n @Field({ nullable: true })\n updatedAt: Date\n\n @ManyToOne(type => User, { nullable: true })\n @Field({ nullable: true })\n creator: User\n\n @RelationId((connection: Connection) => connection.creator)\n creatorId: string\n\n @ManyToOne(type => User, { nullable: true })\n @Field({ nullable: true })\n updater: User\n\n @RelationId((connection: Connection) => connection.updater)\n updaterId: string\n\n async connect() {\n var connector = ConnectionManager.getConnector(this.type)\n var params = {}\n\n try {\n params = JSON.parse(this.params || '{}')\n } catch (ex) {\n logger.error(`connection '${this.name}' params should be JSON format`, ex)\n }\n\n await connector.connect({\n ...this,\n params\n })\n }\n\n async disconnect() {\n try {\n var connector = ConnectionManager.getConnector(this.type)\n await connector.disconnect(this)\n } finally {\n }\n }\n}\n\n@ObjectType()\nexport class ConnectionState {\n @Field({ nullable: true })\n domain?: Domain\n\n @Field({ nullable: true })\n id?: string\n\n @Field({ nullable: true })\n name?: string\n\n @Field({ nullable: true })\n description?: string\n\n @Field({ nullable: true })\n type?: string\n\n @Field({ nullable: true })\n state?: ConnectionStatus\n\n @Field({ nullable: true })\n timestamp?: Date\n}\n\n@InputType()\nexport class NewConnection {\n @Field()\n name: string\n\n @Field({ nullable: true })\n description?: string\n\n @Field({ nullable: true })\n type?: string\n\n @Field({ nullable: true })\n endpoint?: string\n\n @Field({ nullable: true })\n params?: string\n}\n\n@InputType()\nexport class ConnectionPatch {\n @Field(type => ID, { nullable: true })\n id: string\n\n @Field({ nullable: true })\n name?: string\n\n @Field({ nullable: true })\n description?: string\n\n @Field({ nullable: true })\n type?: string\n\n @Field({ nullable: true })\n endpoint?: string\n\n @Field({ nullable: true })\n active?: boolean\n\n @Field({ nullable: true })\n params?: string\n\n @Field({ nullable: true })\n cuFlag?: string\n}\n\n@ObjectType()\nexport class ConnectionList {\n @Field(type => [Connection])\n items: Connection[]\n\n @Field(type => Int)\n total: number\n}\n"]}
1
+ {"version":3,"file":"connection-type.js","sourceRoot":"","sources":["../../../server/service/connection/connection-type.ts"],"names":[],"mappings":"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","sourcesContent":["import { Field, ID, InputType, Int, ObjectType, registerEnumType } from 'type-graphql'\nimport { Column, CreateDateColumn, Entity, Index, ManyToOne, PrimaryGeneratedColumn, RelationId, UpdateDateColumn } from 'typeorm'\n\nimport { User, Appliance } from '@things-factory/auth-base'\nimport { logger } from '@things-factory/env'\nimport { Domain, ObjectRef } from '@things-factory/shell'\n\nimport { ConnectionManager } from '../../engine'\nimport { ProxyConnector } from '../../engine/connector/proxy-connector'\n\nexport enum ConnectionStatus {\n CONNECTED = 'CONNECTED',\n DISCONNECTED = 'DISCONNECTED'\n}\n\nregisterEnumType(ConnectionStatus, {\n name: 'ConnectionStatus',\n description: 'state enumeration of a connection'\n})\n\n@Entity()\n@Index('ix_connection_0', (connection: Connection) => [connection.domain, connection.name], { unique: true })\n@ObjectType()\nexport class Connection {\n /**\n * Unique identifier for the connection, generated in UUID format.\n */\n @PrimaryGeneratedColumn('uuid')\n @Field(type => ID)\n readonly id: string\n\n /**\n * Many-to-One relationship with the Domain entity.\n */\n @ManyToOne(type => Domain)\n @Field({ nullable: true })\n domain: Domain\n\n /**\n * Stores the ID of the associated Domain.\n */\n @RelationId((connection: Connection) => connection.domain)\n domainId: string\n\n /**\n * The name of the connection.\n */\n @Column()\n @Field()\n name: string\n\n /**\n * Optional description for the connection.\n */\n @Column({\n nullable: true\n })\n @Field({ nullable: true })\n description: string\n\n /**\n * The type of the connection.\n */\n @Column()\n @Field({ nullable: true })\n type: string\n\n /**\n * Many-to-One relationship with the Appliance entity which delegate the connection. Optional field.\n */\n @ManyToOne(type => Appliance, { nullable: true })\n @Field({ nullable: true })\n edge: Appliance\n\n /**\n * Stores the ID of the Appliance who delegate the connection.\n */\n @RelationId((connection: Connection) => connection.edge)\n edgeId: string\n\n /**\n * The endpoint for the connection.\n */\n @Column()\n @Field({ nullable: true })\n endpoint: string\n\n /**\n * Indicates the active status of the connection.\n */\n @Column({ nullable: true })\n @Field({ nullable: true })\n active: boolean\n\n /**\n * The status of the connection, using the ConnectionStatus type.\n */\n @Field({ nullable: true })\n state: ConnectionStatus\n\n /**\n * Additional parameters for the connection, stored as a JSON string.\n */\n @Column({ nullable: true })\n @Field({ nullable: true })\n params: string\n\n /**\n * The date and time when the connection was created.\n */\n @CreateDateColumn()\n @Field({ nullable: true })\n createdAt: Date\n\n /**\n * The date and time when the connection was last updated.\n */\n @UpdateDateColumn()\n @Field({ nullable: true })\n updatedAt: Date\n\n /**\n * Many-to-One relationship with the User entity who created the connection. Optional field.\n */\n @ManyToOne(type => User, { nullable: true })\n @Field({ nullable: true })\n creator: User\n\n /**\n * Stores the ID of the User who created the connection.\n */\n @RelationId((connection: Connection) => connection.creator)\n creatorId: string\n\n /**\n * Many-to-One relationship with the User entity who last updated the connection.\n * Optional field.\n */\n @ManyToOne(type => User, { nullable: true })\n @Field({ nullable: true })\n updater: User\n\n /**\n * Stores the ID of the User who last updated the connection.\n *\n */\n @RelationId((connection: Connection) => connection.updater)\n updaterId: string\n\n /**\n * Asynchronous method to establish the connection.\n *\n */\n async connect() {\n const { type, edge } = this\n const connector = edge ? ProxyConnector.instance : ConnectionManager.getConnector(type)\n var params = {}\n\n try {\n params = JSON.parse(this.params || '{}')\n } catch (ex) {\n logger.error(`connection '${this.name}' params should be JSON format`, ex)\n }\n\n await connector.connect({\n ...this,\n params\n })\n }\n\n /**\n * @brief Asynchronous method to disconnect the connection.\n *\n */\n async disconnect() {\n try {\n const { type, edge } = this\n const connector = edge ? ProxyConnector.instance : ConnectionManager.getConnector(type)\n await connector.disconnect(this)\n } finally {\n }\n }\n}\n\n/**\n * Connection의 params의 원 타입과 사용 시에 타입 불일치로 인해 임시적으로 생성한 타입으로\n * 추후, 타입 일치를 통해서 제거할 예정임.\n *\n */\nexport interface InputConnection extends Connection {\n params: any\n}\n\n@ObjectType()\nexport class ConnectionState {\n @Field({ nullable: true })\n domain?: Domain\n\n @Field({ nullable: true })\n id?: string\n\n @Field({ nullable: true })\n name?: string\n\n @Field({ nullable: true })\n description?: string\n\n @Field({ nullable: true })\n type?: string\n\n @Field(type => Appliance, { nullable: true })\n edge?: Appliance\n\n @Field({ nullable: true })\n state?: ConnectionStatus\n\n @Field({ nullable: true })\n timestamp?: Date\n}\n\n@InputType()\nexport class NewConnection {\n @Field()\n name: string\n\n @Field({ nullable: true })\n description?: string\n\n @Field({ nullable: true })\n type?: string\n\n @Field(type => ObjectRef, { nullable: true })\n edge?: Appliance\n\n @Field({ nullable: true })\n endpoint?: string\n\n @Field({ nullable: true })\n params?: string\n}\n\n@InputType()\nexport class ConnectionPatch {\n @Field(type => ID, { nullable: true })\n id: string\n\n @Field({ nullable: true })\n name?: string\n\n @Field({ nullable: true })\n description?: string\n\n @Field({ nullable: true })\n type?: string\n\n @Field(type => ObjectRef, { nullable: true })\n edge?: Appliance\n\n @Field({ nullable: true })\n endpoint?: string\n\n @Field({ nullable: true })\n active?: boolean\n\n @Field({ nullable: true })\n params?: string\n\n @Field({ nullable: true })\n cuFlag?: string\n}\n\n@ObjectType()\nexport class ConnectionList {\n @Field(type => [Connection])\n items: Connection[]\n\n @Field(type => Int)\n total: number\n}\n"]}
@@ -4,84 +4,17 @@ exports.ScenarioInstanceMutation = void 0;
4
4
  const tslib_1 = require("tslib");
5
5
  const type_graphql_1 = require("type-graphql");
6
6
  const shell_1 = require("@things-factory/shell");
7
- const engine_1 = require("../../engine");
8
- const scenario_1 = require("../scenario/scenario");
9
7
  const scenario_instance_type_1 = require("./scenario-instance-type");
10
- const auth_base_1 = require("@things-factory/auth-base");
11
- const debug = require('debug')('things-factory:integration-base:scenario-instance-mutation');
12
- async function findScenario(scenarioName, domain) {
13
- var repository = (0, shell_1.getRepository)(scenario_1.Scenario);
14
- var scenario = await repository.findOne({
15
- where: { domain: { id: domain.id }, name: scenarioName },
16
- relations: ['domain', 'steps', 'creator', 'updater']
17
- });
18
- if (!scenario && domain.parentId) {
19
- scenario = await repository.findOne({
20
- where: { domain: { id: domain.parentId }, name: scenarioName },
21
- relations: ['domain', 'steps', 'creator', 'updater']
22
- });
23
- }
24
- return scenario;
25
- }
8
+ const scenario_controller_1 = require("../../controllers/scenario-controller");
26
9
  let ScenarioInstanceMutation = class ScenarioInstanceMutation {
27
10
  async runScenario(instanceName, scenarioName, variables, context) {
28
- const { domain, user, lng, unsafeIP, prohibitedPrivileges } = context.state;
29
- debug('runScenario', scenarioName, instanceName, variables);
30
- var scenario = await findScenario(scenarioName, domain);
31
- if (!scenario) {
32
- throw new Error(context.t('error.scenario not found', {
33
- scenario: scenarioName
34
- }));
35
- }
36
- if (!(await (0, auth_base_1.checkPermission)(scenario.privilege, user, domain, unsafeIP, prohibitedPrivileges))) {
37
- const { category, privilege } = scenario.privilege || {};
38
- throw new Error(`Unauthorized! ${category && privilege ? category + ':' + privilege + ' privilege' : 'ownership granted'} required`);
39
- }
40
- /* 시나리오 인스턴스를 생성한다. */
41
- instanceName = instanceName || scenarioName + '-' + String(Date.now());
42
- var instance = new scenario_instance_type_1.ScenarioInstance(instanceName, scenario, {
43
- domain,
44
- user,
45
- lng,
46
- variables,
47
- client: shell_1.GraphqlLocalClient.client
48
- });
49
- await instance.run();
50
- return instance;
11
+ return await (0, scenario_controller_1.runScenario)(instanceName, scenarioName, variables, context);
51
12
  }
52
13
  async startScenario(instanceName, scenarioName, variables, context) {
53
- const { domain, user, lng, unsafeIP, prohibitedPrivileges } = context.state;
54
- debug('startScenario', instanceName, scenarioName, variables);
55
- var scenario = await findScenario(scenarioName, domain);
56
- if (!scenario) {
57
- throw new Error(context.t('error.scenario not found', {
58
- scenario: scenarioName
59
- }));
60
- }
61
- if (!(await (0, auth_base_1.checkPermission)(scenario.privilege, user, domain, unsafeIP, prohibitedPrivileges))) {
62
- const { category, privilege } = scenario.privilege || {};
63
- throw new Error(`Unauthorized! ${category && privilege ? category + ':' + privilege + ' privilege' : 'ownership granted'} required`);
64
- }
65
- instanceName = instanceName || scenarioName;
66
- return await engine_1.ScenarioEngine.load(instanceName, scenario, { domain, user, lng, variables });
14
+ return await (0, scenario_controller_1.startScenario)(instanceName, scenarioName, variables, context);
67
15
  }
68
16
  async stopScenario(instanceName, context) {
69
- const { domain, user, unsafeIP, prohibitedPrivileges } = context.state;
70
- debug('stopScenario', instanceName);
71
- var scenarioInstance = engine_1.ScenarioEngine.getScenarioInstance(domain, instanceName);
72
- if (!scenarioInstance) {
73
- debug('stopScenario', `ScenarioInstance(${instanceName}) Not Found.`);
74
- throw new Error(context.t('error.scenario instance not found', {
75
- instance: instanceName
76
- }));
77
- }
78
- var scenario = await findScenario(scenarioInstance.scenarioName, domain);
79
- if (!(await (0, auth_base_1.checkPermission)(scenario.privilege, user, domain, unsafeIP, prohibitedPrivileges))) {
80
- const { category, privilege } = scenario.privilege || {};
81
- throw new Error(`Unauthorized! ${category && privilege ? category + ':' + privilege + ' privilege' : 'ownership granted'} required`);
82
- }
83
- await engine_1.ScenarioEngine.unload(domain, instanceName);
84
- return scenarioInstance;
17
+ return await (0, scenario_controller_1.stopScenario)(instanceName, context);
85
18
  }
86
19
  };
87
20
  tslib_1.__decorate([
@@ -1 +1 @@
1
- {"version":3,"file":"scenario-instance-mutation.js","sourceRoot":"","sources":["../../../server/service/scenario-instance/scenario-instance-mutation.ts"],"names":[],"mappings":"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","sourcesContent":["import { Arg, Ctx, Mutation, Resolver } from 'type-graphql'\n\nimport { getRepository, Domain, GraphqlLocalClient, ScalarObject } from '@things-factory/shell'\n\nimport { ScenarioEngine } from '../../engine'\nimport { Scenario } from '../scenario/scenario'\nimport { ScenarioInstance } from './scenario-instance-type'\nimport { PrivilegeObject, User, checkPermission } from '@things-factory/auth-base'\nimport { Step } from '../step/step-type'\n\nconst debug = require('debug')('things-factory:integration-base:scenario-instance-mutation')\n\nasync function findScenario(\n scenarioName: string,\n domain: Domain\n): Promise<{ name: string; steps: Step[]; domain: Domain; privilege?: PrivilegeObject }> {\n var repository = getRepository(Scenario)\n\n var scenario = await repository.findOne({\n where: { domain: { id: domain.id }, name: scenarioName },\n relations: ['domain', 'steps', 'creator', 'updater']\n })\n\n if (!scenario && domain.parentId) {\n scenario = await repository.findOne({\n where: { domain: { id: domain.parentId }, name: scenarioName },\n relations: ['domain', 'steps', 'creator', 'updater']\n })\n }\n\n return scenario as any\n}\n\n@Resolver(ScenarioInstance)\nexport class ScenarioInstanceMutation {\n @Mutation(returns => ScenarioInstance, {\n description: 'To run new scenario instance and will return the result after the scenario stop.'\n })\n async runScenario(\n @Arg('instanceName', { nullable: true }) instanceName: string,\n @Arg('scenarioName') scenarioName: string,\n @Arg('variables', type => ScalarObject, { nullable: true }) variables: any,\n @Ctx() context: ResolverContext\n ): Promise<ScenarioInstance> {\n const { domain, user, lng, unsafeIP, prohibitedPrivileges } = context.state\n\n debug('runScenario', scenarioName, instanceName, variables)\n\n var scenario = await findScenario(scenarioName, domain)\n\n if (!scenario) {\n throw new Error(\n context.t('error.scenario not found', {\n scenario: scenarioName\n })\n )\n }\n\n if (!(await checkPermission(scenario.privilege, user, domain, unsafeIP, prohibitedPrivileges))) {\n const { category, privilege } = scenario.privilege || {}\n throw new Error(\n `Unauthorized! ${\n category && privilege ? category + ':' + privilege + ' privilege' : 'ownership granted'\n } required`\n )\n }\n\n /* 시나리오 인스턴스를 생성한다. */\n instanceName = instanceName || scenarioName + '-' + String(Date.now())\n var instance = new ScenarioInstance(instanceName, scenario, {\n domain,\n user,\n lng,\n variables,\n client: GraphqlLocalClient.client\n })\n\n await instance.run()\n\n return instance\n }\n\n @Mutation(returns => ScenarioInstance, { description: 'To start new scenario instance' })\n async startScenario(\n @Arg('instanceName', { nullable: true }) instanceName: string,\n @Arg('scenarioName') scenarioName: string,\n @Arg('variables', type => ScalarObject, { nullable: true }) variables: any,\n @Ctx() context: ResolverContext\n ): Promise<ScenarioInstance> {\n const { domain, user, lng, unsafeIP, prohibitedPrivileges } = context.state\n\n debug('startScenario', instanceName, scenarioName, variables)\n\n var scenario = await findScenario(scenarioName, domain)\n\n if (!scenario) {\n throw new Error(\n context.t('error.scenario not found', {\n scenario: scenarioName\n })\n )\n }\n\n if (!(await checkPermission(scenario.privilege, user, domain, unsafeIP, prohibitedPrivileges))) {\n const { category, privilege } = scenario.privilege || {}\n throw new Error(\n `Unauthorized! ${\n category && privilege ? category + ':' + privilege + ' privilege' : 'ownership granted'\n } required`\n )\n }\n\n instanceName = instanceName || scenarioName\n return await ScenarioEngine.load(instanceName, scenario, { domain, user, lng, variables })\n }\n\n @Mutation(returns => ScenarioInstance, { nullable: true, description: 'To start new scenario instance' })\n async stopScenario(\n @Arg('instanceName', { nullable: true }) instanceName: string,\n @Ctx() context: ResolverContext\n ): Promise<ScenarioInstance | undefined> {\n const { domain, user, unsafeIP, prohibitedPrivileges } = context.state\n\n debug('stopScenario', instanceName)\n\n var scenarioInstance = ScenarioEngine.getScenarioInstance(domain, instanceName)\n\n if (!scenarioInstance) {\n debug('stopScenario', `ScenarioInstance(${instanceName}) Not Found.`)\n throw new Error(\n context.t('error.scenario instance not found', {\n instance: instanceName\n })\n )\n }\n\n var scenario = await findScenario(scenarioInstance.scenarioName, domain)\n\n if (!(await checkPermission(scenario.privilege, user, domain, unsafeIP, prohibitedPrivileges))) {\n const { category, privilege } = scenario.privilege || {}\n throw new Error(\n `Unauthorized! ${\n category && privilege ? category + ':' + privilege + ' privilege' : 'ownership granted'\n } required`\n )\n }\n\n await ScenarioEngine.unload(domain, instanceName)\n\n return scenarioInstance\n }\n}\n"]}
1
+ {"version":3,"file":"scenario-instance-mutation.js","sourceRoot":"","sources":["../../../server/service/scenario-instance/scenario-instance-mutation.ts"],"names":[],"mappings":";;;;AAAA,+CAA2D;AAE3D,iDAAoD;AAEpD,qEAA2D;AAE3D,+EAI8C;AAGvC,IAAM,wBAAwB,GAA9B,MAAM,wBAAwB;IAI7B,AAAN,KAAK,CAAC,WAAW,CAC0B,YAAoB,EACxC,YAAoB,EACmB,SAAc,EACnE,OAAwB;QAE/B,OAAO,MAAM,IAAA,iCAAqB,EAAC,YAAY,EAAE,YAAY,EAAE,SAAS,EAAE,OAAO,CAAC,CAAA;IACpF,CAAC;IAGK,AAAN,KAAK,CAAC,aAAa,CACwB,YAAoB,EACxC,YAAoB,EACmB,SAAc,EACnE,OAAwB;QAE/B,OAAO,MAAM,IAAA,mCAAuB,EAAC,YAAY,EAAE,YAAY,EAAE,SAAS,EAAE,OAAO,CAAC,CAAA;IACtF,CAAC;IAGK,AAAN,KAAK,CAAC,YAAY,CAA0C,YAAoB,EAAS,OAAwB;QAC/G,OAAO,MAAM,IAAA,kCAAsB,EAAC,YAAY,EAAE,OAAO,CAAC,CAAA;IAC5D,CAAC;CACF,CAAA;AAvBO;IAHL,IAAA,uBAAQ,EAAC,OAAO,CAAC,EAAE,CAAC,yCAAgB,EAAE;QACrC,WAAW,EAAE,kFAAkF;KAChG,CAAC;IAEC,mBAAA,IAAA,kBAAG,EAAC,cAAc,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAA;IACvC,mBAAA,IAAA,kBAAG,EAAC,cAAc,CAAC,CAAA;IACnB,mBAAA,IAAA,kBAAG,EAAC,WAAW,EAAE,IAAI,CAAC,EAAE,CAAC,oBAAY,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAA;IAC1D,mBAAA,IAAA,kBAAG,GAAE,CAAA;;;;2DAGP;AAGK;IADL,IAAA,uBAAQ,EAAC,OAAO,CAAC,EAAE,CAAC,yCAAgB,EAAE,EAAE,WAAW,EAAE,gCAAgC,EAAE,CAAC;IAEtF,mBAAA,IAAA,kBAAG,EAAC,cAAc,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAA;IACvC,mBAAA,IAAA,kBAAG,EAAC,cAAc,CAAC,CAAA;IACnB,mBAAA,IAAA,kBAAG,EAAC,WAAW,EAAE,IAAI,CAAC,EAAE,CAAC,oBAAY,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAA;IAC1D,mBAAA,IAAA,kBAAG,GAAE,CAAA;;;;6DAGP;AAGK;IADL,IAAA,uBAAQ,EAAC,OAAO,CAAC,EAAE,CAAC,yCAAgB,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,WAAW,EAAE,gCAAgC,EAAE,CAAC;IACrF,mBAAA,IAAA,kBAAG,EAAC,cAAc,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAA;IAAwB,mBAAA,IAAA,kBAAG,GAAE,CAAA;;;;4DAEvF;AA1BU,wBAAwB;IADpC,IAAA,uBAAQ,EAAC,yCAAgB,CAAC;GACd,wBAAwB,CA2BpC;AA3BY,4DAAwB","sourcesContent":["import { Arg, Ctx, Mutation, Resolver } from 'type-graphql'\n\nimport { ScalarObject } from '@things-factory/shell'\n\nimport { ScenarioInstance } from './scenario-instance-type'\n\nimport {\n runScenario as controllerRunScenario,\n startScenario as controllerStartScenario,\n stopScenario as controllerStopScenario\n} from '../../controllers/scenario-controller'\n\n@Resolver(ScenarioInstance)\nexport class ScenarioInstanceMutation {\n @Mutation(returns => ScenarioInstance, {\n description: 'To run new scenario instance and will return the result after the scenario stop.'\n })\n async runScenario(\n @Arg('instanceName', { nullable: true }) instanceName: string,\n @Arg('scenarioName') scenarioName: string,\n @Arg('variables', type => ScalarObject, { nullable: true }) variables: any,\n @Ctx() context: ResolverContext\n ): Promise<ScenarioInstance> {\n return await controllerRunScenario(instanceName, scenarioName, variables, context)\n }\n\n @Mutation(returns => ScenarioInstance, { description: 'To start new scenario instance' })\n async startScenario(\n @Arg('instanceName', { nullable: true }) instanceName: string,\n @Arg('scenarioName') scenarioName: string,\n @Arg('variables', type => ScalarObject, { nullable: true }) variables: any,\n @Ctx() context: ResolverContext\n ): Promise<ScenarioInstance> {\n return await controllerStartScenario(instanceName, scenarioName, variables, context)\n }\n\n @Mutation(returns => ScenarioInstance, { nullable: true, description: 'To start new scenario instance' })\n async stopScenario(@Arg('instanceName', { nullable: true }) instanceName: string, @Ctx() context: ResolverContext): Promise<ScenarioInstance | undefined> {\n return await controllerStopScenario(instanceName, context)\n }\n}\n"]}
@@ -3,7 +3,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.ScenarioInstanceSubscription = void 0;
4
4
  const tslib_1 = require("tslib");
5
5
  const type_graphql_1 = require("type-graphql");
6
- const graphql_subscriptions_1 = require("graphql-subscriptions");
6
+ const graphql_yoga_1 = require("graphql-yoga");
7
7
  const shell_1 = require("@things-factory/shell");
8
8
  const scenario_instance_type_1 = require("./scenario-instance-type");
9
9
  const engine_1 = require("../../engine");
@@ -18,7 +18,7 @@ let ScenarioInstanceSubscription = class ScenarioInstanceSubscription {
18
18
  };
19
19
  tslib_1.__decorate([
20
20
  (0, type_graphql_1.Subscription)({
21
- subscribe: (_, args, context, info) => {
21
+ subscribe: ({ args, context, info }) => {
22
22
  var _a;
23
23
  const { domain, user } = context.state;
24
24
  const { instanceName, scenarioName, level } = args;
@@ -30,7 +30,7 @@ tslib_1.__decorate([
30
30
  if (!((_a = user.domains) === null || _a === void 0 ? void 0 : _a.find(d => d.subdomain === subdomain)) && !process.superUserGranted(domain, user)) {
31
31
  throw new Error(`domain(${subdomain}) is not working for user(${user.email}).`);
32
32
  }
33
- return (0, graphql_subscriptions_1.withFilter)(() => shell_1.pubsub.asyncIterator('scenario-instance-log'), (payload, variables, context, info) => {
33
+ return (0, graphql_yoga_1.pipe)(shell_1.pubsub.subscribe('scenario-instance-log'), (0, graphql_yoga_1.filter)((payload) => {
34
34
  const { source, level: plevel } = payload.scenarioInstanceLog;
35
35
  const { domain: pdomain, scenarioName: pscenarioName, instanceName: pinstanceName } = source;
36
36
  if (subdomain !== (pdomain === null || pdomain === void 0 ? void 0 : pdomain.subdomain)) {
@@ -46,7 +46,7 @@ tslib_1.__decorate([
46
46
  return false;
47
47
  }
48
48
  return true;
49
- })(_, args, context, info);
49
+ }));
50
50
  }
51
51
  }),
52
52
  tslib_1.__param(0, (0, type_graphql_1.Root)()),
@@ -59,7 +59,7 @@ tslib_1.__decorate([
59
59
  ], ScenarioInstanceSubscription.prototype, "scenarioInstanceLog", null);
60
60
  tslib_1.__decorate([
61
61
  (0, type_graphql_1.Subscription)({
62
- subscribe: (_, args, context, info) => {
62
+ subscribe: ({ args, context, info }) => {
63
63
  var _a;
64
64
  const { domain, user } = context.state;
65
65
  const { instanceName, scenarioName } = args;
@@ -74,14 +74,13 @@ tslib_1.__decorate([
74
74
  process.nextTick(() => {
75
75
  engine_1.ScenarioEngine.getScenarioInstances(domain)
76
76
  .filter(instance => {
77
- return ((!instanceName || instance.instanceName === instanceName) &&
78
- (!scenarioName || instance.scenarioName === scenarioName));
77
+ return (!instanceName || instance.instanceName === instanceName) && (!scenarioName || instance.scenarioName === scenarioName);
79
78
  })
80
79
  .forEach(instance => {
81
80
  instance.publishState();
82
81
  });
83
82
  });
84
- return (0, graphql_subscriptions_1.withFilter)(() => shell_1.pubsub.asyncIterator('scenario-instance-state'), (payload, variables, context, info) => {
83
+ return (0, graphql_yoga_1.pipe)(shell_1.pubsub.subscribe('scenario-instance-state'), (0, graphql_yoga_1.filter)((payload) => {
85
84
  const { domain: pdomain, scenarioName: pscenarioName, instanceName: pinstanceName } = payload.scenarioInstanceState;
86
85
  if (subdomain !== (pdomain === null || pdomain === void 0 ? void 0 : pdomain.subdomain)) {
87
86
  return false;
@@ -93,7 +92,7 @@ tslib_1.__decorate([
93
92
  return false;
94
93
  }
95
94
  return true;
96
- })(_, args, context, info);
95
+ }));
97
96
  }
98
97
  }),
99
98
  tslib_1.__param(0, (0, type_graphql_1.Root)()),
@@ -1 +1 @@
1
- {"version":3,"file":"scenario-instance-subscription.js","sourceRoot":"","sources":["../../../server/service/scenario-instance/scenario-instance-subscription.ts"],"names":[],"mappings":"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","sourcesContent":["import { Resolver, Subscription, Root, Arg } from 'type-graphql'\nimport { withFilter } from 'graphql-subscriptions'\nimport { pubsub, Log } from '@things-factory/shell'\nimport { ScenarioInstance, ScenarioInstanceState } from './scenario-instance-type'\nimport { ScenarioEngine } from '../../engine'\n\nconst debug = require('debug')('things-factory:integration:scenario-instance-subscription')\n\n@Resolver(ScenarioInstance)\nexport class ScenarioInstanceSubscription {\n @Subscription({\n subscribe: (_, args, context, info) => {\n const { domain, user } = context.state\n const { instanceName, scenarioName, level } = args\n const subdomain = domain?.subdomain\n\n debug('subscribe', subdomain, scenarioName, instanceName)\n\n if (!domain) {\n throw new Error('domain required')\n }\n\n if (!user.domains?.find(d => d.subdomain === subdomain) && !process.superUserGranted(domain, user)) {\n throw new Error(`domain(${subdomain}) is not working for user(${user.email}).`)\n }\n\n return withFilter(\n () => pubsub.asyncIterator('scenario-instance-log'),\n (payload, variables, context, info) => {\n const { source, level: plevel } = payload.scenarioInstanceLog\n const { domain: pdomain, scenarioName: pscenarioName, instanceName: pinstanceName } = source\n\n if (subdomain !== pdomain?.subdomain) {\n return false\n }\n\n if (scenarioName && pscenarioName !== scenarioName) {\n return false\n }\n\n if (instanceName && pinstanceName !== instanceName) {\n return false\n }\n\n if (level && level !== plevel) {\n return false\n }\n\n return true\n }\n )(_, args, context, info)\n }\n })\n scenarioInstanceLog(\n @Root() payload: { scenarioInstanceLog: Log },\n @Arg('scenarioName', { nullable: true }) scenarioName: string,\n @Arg('instanceName', { nullable: true }) instanceName: string,\n @Arg('level', { nullable: true }) level: string\n ): Log {\n return payload.scenarioInstanceLog\n }\n\n @Subscription({\n subscribe: (_, args, context, info) => {\n const { domain, user } = context.state\n const { instanceName, scenarioName } = args\n const subdomain = domain?.subdomain\n\n debug('subscribe', subdomain, scenarioName, instanceName)\n\n if (!domain) {\n throw new Error('domain required')\n }\n\n if (!user.domains?.find(d => d.subdomain === subdomain) && !process.superUserGranted(domain, user)) {\n throw new Error(`domain(${subdomain}) is not working for user(${user.email}).`)\n }\n\n process.nextTick(() => {\n ScenarioEngine.getScenarioInstances(domain)\n .filter(instance => {\n return (\n (!instanceName || instance.instanceName === instanceName) &&\n (!scenarioName || instance.scenarioName === scenarioName)\n )\n })\n .forEach(instance => {\n instance.publishState()\n })\n })\n\n return withFilter(\n () => pubsub.asyncIterator('scenario-instance-state'),\n (payload, variables, context, info) => {\n const {\n domain: pdomain,\n scenarioName: pscenarioName,\n instanceName: pinstanceName\n } = payload.scenarioInstanceState\n\n if (subdomain !== pdomain?.subdomain) {\n return false\n }\n\n if (scenarioName && pscenarioName !== scenarioName) {\n return false\n }\n\n if (instanceName && pinstanceName !== instanceName) {\n return false\n }\n\n return true\n }\n )(_, args, context, info)\n }\n })\n scenarioInstanceState(\n @Root() payload: { scenarioInstanceState: ScenarioInstanceState },\n @Arg('scenarioName', { nullable: true }) scenarioName: string,\n @Arg('instanceName', { nullable: true }) instanceName: string\n ): ScenarioInstanceState {\n return payload.scenarioInstanceState\n }\n}\n"]}
1
+ {"version":3,"file":"scenario-instance-subscription.js","sourceRoot":"","sources":["../../../server/service/scenario-instance/scenario-instance-subscription.ts"],"names":[],"mappings":"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","sourcesContent":["import { Resolver, Subscription, Root, Arg } from 'type-graphql'\nimport { filter, pipe } from 'graphql-yoga'\nimport { pubsub, Log } from '@things-factory/shell'\nimport { ScenarioInstance, ScenarioInstanceState } from './scenario-instance-type'\nimport { ScenarioEngine } from '../../engine'\n\nconst debug = require('debug')('things-factory:integration:scenario-instance-subscription')\n\n@Resolver(ScenarioInstance)\nexport class ScenarioInstanceSubscription {\n @Subscription({\n subscribe: ({ args, context, info }) => {\n const { domain, user } = context.state\n const { instanceName, scenarioName, level } = args\n const subdomain = domain?.subdomain\n\n debug('subscribe', subdomain, scenarioName, instanceName)\n\n if (!domain) {\n throw new Error('domain required')\n }\n\n if (!user.domains?.find(d => d.subdomain === subdomain) && !process.superUserGranted(domain, user)) {\n throw new Error(`domain(${subdomain}) is not working for user(${user.email}).`)\n }\n\n return pipe(\n pubsub.subscribe('scenario-instance-log'),\n filter((payload: { scenarioInstanceLog: Log }) => {\n const { source, level: plevel } = payload.scenarioInstanceLog\n const { domain: pdomain, scenarioName: pscenarioName, instanceName: pinstanceName } = source as any\n\n if (subdomain !== pdomain?.subdomain) {\n return false\n }\n\n if (scenarioName && pscenarioName !== scenarioName) {\n return false\n }\n\n if (instanceName && pinstanceName !== instanceName) {\n return false\n }\n\n if (level && level !== plevel) {\n return false\n }\n\n return true\n })\n )\n }\n })\n scenarioInstanceLog(\n @Root() payload: { scenarioInstanceLog: Log },\n @Arg('scenarioName', { nullable: true }) scenarioName: string,\n @Arg('instanceName', { nullable: true }) instanceName: string,\n @Arg('level', { nullable: true }) level: string\n ): Log {\n return payload.scenarioInstanceLog\n }\n\n @Subscription({\n subscribe: ({ args, context, info }) => {\n const { domain, user } = context.state\n const { instanceName, scenarioName } = args\n const subdomain = domain?.subdomain\n\n debug('subscribe', subdomain, scenarioName, instanceName)\n\n if (!domain) {\n throw new Error('domain required')\n }\n\n if (!user.domains?.find(d => d.subdomain === subdomain) && !process.superUserGranted(domain, user)) {\n throw new Error(`domain(${subdomain}) is not working for user(${user.email}).`)\n }\n\n process.nextTick(() => {\n ScenarioEngine.getScenarioInstances(domain)\n .filter(instance => {\n return (!instanceName || instance.instanceName === instanceName) && (!scenarioName || instance.scenarioName === scenarioName)\n })\n .forEach(instance => {\n instance.publishState()\n })\n })\n\n return pipe(\n pubsub.subscribe('scenario-instance-state'),\n filter((payload: { scenarioInstanceState: ScenarioInstanceState }) => {\n const { domain: pdomain, scenarioName: pscenarioName, instanceName: pinstanceName } = payload.scenarioInstanceState\n\n if (subdomain !== pdomain?.subdomain) {\n return false\n }\n\n if (scenarioName && pscenarioName !== scenarioName) {\n return false\n }\n\n if (instanceName && pinstanceName !== instanceName) {\n return false\n }\n\n return true\n })\n )\n }\n })\n scenarioInstanceState(\n @Root() payload: { scenarioInstanceState: ScenarioInstanceState },\n @Arg('scenarioName', { nullable: true }) scenarioName: string,\n @Arg('instanceName', { nullable: true }) instanceName: string\n ): ScenarioInstanceState {\n return payload.scenarioInstanceState\n }\n}\n"]}