@elyx-code/editor-ui 0.0.2

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 (452) hide show
  1. package/README.md +2 -0
  2. package/package.json +109 -0
  3. package/src/App.tsx +31 -0
  4. package/src/Router.tsx +115 -0
  5. package/src/__mocks__/defaultModuleMock.ts +1 -0
  6. package/src/__mocks__/fileMock.ts +1 -0
  7. package/src/__mocks__/styleMock.ts +1 -0
  8. package/src/assets/Clock-11.1s-18px.svg +16 -0
  9. package/src/assets/Clock-11.1s-28px.svg +16 -0
  10. package/src/assets/authentication.svg +1 -0
  11. package/src/assets/canvas-backdrop-0.png +0 -0
  12. package/src/assets/canvas-backdrop-1.png +0 -0
  13. package/src/assets/canvas-backdrop-2.png +0 -0
  14. package/src/assets/canvas-backdrop-3.png +0 -0
  15. package/src/assets/canvas-backdrop-4.png +0 -0
  16. package/src/assets/canvas-backdrop-5.png +0 -0
  17. package/src/assets/canvas-backdrop.png +0 -0
  18. package/src/assets/checkmark-animation.gif +0 -0
  19. package/src/assets/checkmark-animation.mp4 +0 -0
  20. package/src/assets/code-formatting/format-black.svg +6 -0
  21. package/src/assets/code-formatting/format-dark-grey.svg +6 -0
  22. package/src/assets/code-formatting/format-light-grey.svg +6 -0
  23. package/src/assets/code-formatting/format-white.svg +6 -0
  24. package/src/assets/code-formatting/inline-black.svg +5 -0
  25. package/src/assets/code-formatting/inline-dark-grey.svg +5 -0
  26. package/src/assets/code-formatting/inline-light-grey.svg +5 -0
  27. package/src/assets/code-formatting/inline-white.svg +5 -0
  28. package/src/assets/contained-logo-full-word.png +0 -0
  29. package/src/assets/cron-job-color.png +0 -0
  30. package/src/assets/cron-job.png +0 -0
  31. package/src/assets/database-table-color.png +0 -0
  32. package/src/assets/database-table.png +0 -0
  33. package/src/assets/datatype-icons/black/any.svg +1 -0
  34. package/src/assets/datatype-icons/black/binary.svg +1 -0
  35. package/src/assets/datatype-icons/black/boolean.svg +3 -0
  36. package/src/assets/datatype-icons/black/date-time.svg +3 -0
  37. package/src/assets/datatype-icons/black/definition-entity.svg +6 -0
  38. package/src/assets/datatype-icons/black/key-file.svg +1 -0
  39. package/src/assets/datatype-icons/black/list.svg +3 -0
  40. package/src/assets/datatype-icons/black/null.svg +3 -0
  41. package/src/assets/datatype-icons/black/number.svg +13 -0
  42. package/src/assets/datatype-icons/black/project.svg +12 -0
  43. package/src/assets/datatype-icons/black/sql-program.svg +2 -0
  44. package/src/assets/datatype-icons/black/text.svg +3 -0
  45. package/src/assets/datatype-icons/black/unknown.svg +3 -0
  46. package/src/assets/datatype-icons/black/uuid.svg +4 -0
  47. package/src/assets/datatype-icons/black/void.svg +1 -0
  48. package/src/assets/datatype-icons/dark-grey/any.svg +1 -0
  49. package/src/assets/datatype-icons/dark-grey/boolean.svg +3 -0
  50. package/src/assets/datatype-icons/dark-grey/date-time.svg +3 -0
  51. package/src/assets/datatype-icons/dark-grey/definition-entity.svg +6 -0
  52. package/src/assets/datatype-icons/dark-grey/list.svg +3 -0
  53. package/src/assets/datatype-icons/dark-grey/null.svg +3 -0
  54. package/src/assets/datatype-icons/dark-grey/number.svg +13 -0
  55. package/src/assets/datatype-icons/dark-grey/project.svg +12 -0
  56. package/src/assets/datatype-icons/dark-grey/sql-program.svg +2 -0
  57. package/src/assets/datatype-icons/dark-grey/text.svg +3 -0
  58. package/src/assets/datatype-icons/dark-grey/unknown.svg +3 -0
  59. package/src/assets/datatype-icons/dark-grey/uuid.svg +4 -0
  60. package/src/assets/datatype-icons/dark-grey/void.svg +1 -0
  61. package/src/assets/datatype-icons/light-grey/any.svg +1 -0
  62. package/src/assets/datatype-icons/light-grey/boolean.svg +3 -0
  63. package/src/assets/datatype-icons/light-grey/date-time.svg +3 -0
  64. package/src/assets/datatype-icons/light-grey/definition-entity.svg +6 -0
  65. package/src/assets/datatype-icons/light-grey/list.svg +3 -0
  66. package/src/assets/datatype-icons/light-grey/null.svg +3 -0
  67. package/src/assets/datatype-icons/light-grey/number.svg +13 -0
  68. package/src/assets/datatype-icons/light-grey/project.svg +12 -0
  69. package/src/assets/datatype-icons/light-grey/sql-program.svg +2 -0
  70. package/src/assets/datatype-icons/light-grey/text.svg +3 -0
  71. package/src/assets/datatype-icons/light-grey/unknown.svg +3 -0
  72. package/src/assets/datatype-icons/light-grey/uuid.svg +4 -0
  73. package/src/assets/datatype-icons/light-grey/void.svg +1 -0
  74. package/src/assets/edit.png +0 -0
  75. package/src/assets/execution.svg +13 -0
  76. package/src/assets/favicon.svg +14 -0
  77. package/src/assets/file-search.svg +1 -0
  78. package/src/assets/http-endpoint.png +0 -0
  79. package/src/assets/image-input-placeholder.png +0 -0
  80. package/src/assets/logo-full-word-white.png +0 -0
  81. package/src/assets/logo-full-word.png +0 -0
  82. package/src/assets/password.svg +85 -0
  83. package/src/assets/pencil.png +0 -0
  84. package/src/assets/publish-project-rich-icon-2.svg +1 -0
  85. package/src/assets/publish-project-rich-icon.svg +1 -0
  86. package/src/assets/relational-database.png +0 -0
  87. package/src/assets/resources.svg +3 -0
  88. package/src/assets/resume-icon-14px.png +0 -0
  89. package/src/assets/server.png +0 -0
  90. package/src/assets/small-status/checkmark.svg +4 -0
  91. package/src/assets/small-status/error.svg +4 -0
  92. package/src/assets/small-status/loading.svg +4 -0
  93. package/src/assets/small-status/skipped.svg +11 -0
  94. package/src/assets/sql-connection-config.svg +1 -0
  95. package/src/assets/sql-row-transformer.svg +1 -0
  96. package/src/assets/ssl-certificate-config.svg +1 -0
  97. package/src/assets/sync.svg +1 -0
  98. package/src/assets/testing-logic-icon.svg +1 -0
  99. package/src/assets/versions.svg +25 -0
  100. package/src/assets/visual-programming-icon.svg +1 -0
  101. package/src/assets/warning-sign-24px.png +0 -0
  102. package/src/auth/index.ts +318 -0
  103. package/src/components/DialogLoader.tsx +94 -0
  104. package/src/components/EntityDialogHeader.tsx +110 -0
  105. package/src/components/EntityDialogSectionHeader.tsx +214 -0
  106. package/src/components/GalleryAddExternalIntegrationInfoDialog.tsx +87 -0
  107. package/src/components/GenerateProjectStartingLogicPromptDialog.tsx +281 -0
  108. package/src/components/LegacyRouteRedirector.tsx +55 -0
  109. package/src/components/ProPlanChip.tsx +23 -0
  110. package/src/components/ReportBugDialog.tsx +412 -0
  111. package/src/components/RequestIntegrationAccessDialog.tsx +261 -0
  112. package/src/components/UseTemplateProjectDialog.tsx +193 -0
  113. package/src/components/WorkspaceLayout.tsx +152 -0
  114. package/src/components/animated-svg/AnimatedCheckmark.tsx +41 -0
  115. package/src/components/animated-svg/AnimatedCrossmark.tsx +51 -0
  116. package/src/components/animated-svg/AnimatedEmailSending.tsx +38 -0
  117. package/src/components/animated-svg/AnimatedLoading.tsx +72 -0
  118. package/src/components/animated-svg/animated-svg.css +239 -0
  119. package/src/components/canvas/Canvas.tsx +16 -0
  120. package/src/components/canvas/CreateEntityMenu.tsx +2020 -0
  121. package/src/components/canvas/canvas.css +10 -0
  122. package/src/components/canvas/create-entity-menu.css +579 -0
  123. package/src/components/canvas-search/CanvasSearch.tsx +501 -0
  124. package/src/components/canvas-search/canvas-search.css +126 -0
  125. package/src/components/canvas-settings-menu/CanvasSettingsMenuButton.tsx +515 -0
  126. package/src/components/canvas-settings-menu/canvas-settings-menu.css +96 -0
  127. package/src/components/circular-image-upload/CircularImageUpload.tsx +113 -0
  128. package/src/components/circular-image-upload/circular-image-upload.css +69 -0
  129. package/src/components/costs/CostsDialog.tsx +459 -0
  130. package/src/components/data-type/DataTypeBuilder.tsx +3127 -0
  131. package/src/components/data-type/data-type-builder.css +45 -0
  132. package/src/components/dialogs/BetaAcknowledgeDialog.tsx +43 -0
  133. package/src/components/dialogs/ComplexDataDialog.tsx +458 -0
  134. package/src/components/dialogs/CronBuilderDialog.tsx +2145 -0
  135. package/src/components/dialogs/ExternalIntegrationConnections.tsx +565 -0
  136. package/src/components/dialogs/JsonEditorDialog.tsx +1392 -0
  137. package/src/components/dialogs/StringEditorDialog.tsx +268 -0
  138. package/src/components/dialogs/argument-declaration/ArgumentDeclaration.tsx +1167 -0
  139. package/src/components/dialogs/argument-declaration/ArgumentDeclarationDialogContent.tsx +128 -0
  140. package/src/components/dialogs/beta-dialog.css +165 -0
  141. package/src/components/dialogs/condition/Condition.tsx +431 -0
  142. package/src/components/dialogs/condition/ConditionDialogContent.tsx +126 -0
  143. package/src/components/dialogs/definition-entity/DefinitionEntityDialogContent.tsx +973 -0
  144. package/src/components/dialogs/function-call/FunctionCall.tsx +442 -0
  145. package/src/components/dialogs/function-call/FunctionCallDialogContent.tsx +126 -0
  146. package/src/components/dialogs/function-declaration/FunctionDeclaration.tsx +926 -0
  147. package/src/components/dialogs/function-declaration/FunctionDeclarationDialogContent.tsx +124 -0
  148. package/src/components/dialogs/generating-project-starting-logic-overlay/GeneratingProjectStartingLogicOverlay.tsx +176 -0
  149. package/src/components/dialogs/generating-project-starting-logic-overlay/generating-project-starting-logic-overlay.css +13 -0
  150. package/src/components/dialogs/global-event/GlobalEvent.tsx +475 -0
  151. package/src/components/dialogs/global-event/GlobalEventDialogContent.tsx +126 -0
  152. package/src/components/dialogs/help/HelpDialog.tsx +217 -0
  153. package/src/components/dialogs/help/HelpDilalogHomeContent.tsx +178 -0
  154. package/src/components/dialogs/help/help-dialog.css +116 -0
  155. package/src/components/dialogs/help/help-icon/HelpIconButton.tsx +41 -0
  156. package/src/components/dialogs/help/help-icon/help-icon.css +9 -0
  157. package/src/components/dialogs/input-map/InputMap.tsx +635 -0
  158. package/src/components/dialogs/input-map/InputMapDialogContent.tsx +126 -0
  159. package/src/components/dialogs/json-editor-dialog.css +4 -0
  160. package/src/components/dialogs/loop/Loop.tsx +650 -0
  161. package/src/components/dialogs/loop/LoopDialogContent.tsx +122 -0
  162. package/src/components/dialogs/operation/Operation.tsx +440 -0
  163. package/src/components/dialogs/operation/OperationDialogContent.tsx +126 -0
  164. package/src/components/dialogs/output-map/OutputMap.tsx +536 -0
  165. package/src/components/dialogs/output-map/OutputMapDialogContent.tsx +126 -0
  166. package/src/components/dialogs/property/Property.tsx +1490 -0
  167. package/src/components/dialogs/property/PropertyDialogContent.tsx +106 -0
  168. package/src/components/dialogs/search-statement/ColumnSelector.tsx +334 -0
  169. package/src/components/dialogs/search-statement/ConditionBuilder.tsx +750 -0
  170. package/src/components/dialogs/search-statement/DataAggregationSection.tsx +621 -0
  171. package/src/components/dialogs/search-statement/DataSourceSelection.tsx +734 -0
  172. package/src/components/dialogs/search-statement/EntityMetadataSection.tsx +135 -0
  173. package/src/components/dialogs/search-statement/FilterConditionsSection.tsx +151 -0
  174. package/src/components/dialogs/search-statement/InlineInputMap.tsx +153 -0
  175. package/src/components/dialogs/search-statement/LiteralValue.tsx +616 -0
  176. package/src/components/dialogs/search-statement/MainSourceAndInputsSection.tsx +271 -0
  177. package/src/components/dialogs/search-statement/NestedSearchStatementBuilder.tsx +170 -0
  178. package/src/components/dialogs/search-statement/OutputFormatSection.tsx +1779 -0
  179. package/src/components/dialogs/search-statement/ResultsSection.tsx +344 -0
  180. package/src/components/dialogs/search-statement/SearchStatementBuilder.tsx +251 -0
  181. package/src/components/dialogs/search-statement/SearchStatementDialogContent.tsx +398 -0
  182. package/src/components/dialogs/search-statement/ValueSelector.tsx +766 -0
  183. package/src/components/dialogs/search-statement/search-statement-context.tsx +1630 -0
  184. package/src/components/dialogs/search-statement/search-statement-dialog.css +56 -0
  185. package/src/components/dialogs/search-statement/test.sql +111 -0
  186. package/src/components/dialogs/value-descriptor/ValueDescriptor.tsx +824 -0
  187. package/src/components/dialogs/value-descriptor/ValueDescriptorDialogContent.tsx +124 -0
  188. package/src/components/dialogs/variable-declaration/VariableDeclaration.tsx +836 -0
  189. package/src/components/dialogs/variable-declaration/VariableDeclarationDialogContent.tsx +106 -0
  190. package/src/components/dialogs/variable-instance/VariableInstance.tsx +443 -0
  191. package/src/components/dialogs/variable-instance/VariableInstanceDialogContent.tsx +124 -0
  192. package/src/components/draggable-entity-card/ArgumentDeclaration.tsx +736 -0
  193. package/src/components/draggable-entity-card/CollapseEntityButton.tsx +170 -0
  194. package/src/components/draggable-entity-card/ConditionCard.tsx +1062 -0
  195. package/src/components/draggable-entity-card/ConnectionDeleteButton.tsx +309 -0
  196. package/src/components/draggable-entity-card/DataTypeIcon.tsx +624 -0
  197. package/src/components/draggable-entity-card/DraggableEntityCard.tsx +617 -0
  198. package/src/components/draggable-entity-card/ErrorMapProperty.tsx +464 -0
  199. package/src/components/draggable-entity-card/EventCard.tsx +700 -0
  200. package/src/components/draggable-entity-card/ExecutionInProgressValue.tsx +327 -0
  201. package/src/components/draggable-entity-card/FunctionDeclarationCard.tsx +819 -0
  202. package/src/components/draggable-entity-card/InputMapProperty.tsx +1067 -0
  203. package/src/components/draggable-entity-card/InternalCall.tsx +978 -0
  204. package/src/components/draggable-entity-card/InternalCallExecutionNode.tsx +643 -0
  205. package/src/components/draggable-entity-card/LogicScopeCallerNode.tsx +262 -0
  206. package/src/components/draggable-entity-card/LoopCard.tsx +791 -0
  207. package/src/components/draggable-entity-card/MainValueInput.tsx +523 -0
  208. package/src/components/draggable-entity-card/MainValueOutput.tsx +458 -0
  209. package/src/components/draggable-entity-card/MethodDeclaration.tsx +1088 -0
  210. package/src/components/draggable-entity-card/NestedCondition.tsx +1025 -0
  211. package/src/components/draggable-entity-card/OutputMapProperty.tsx +843 -0
  212. package/src/components/draggable-entity-card/PassthroughEntityCard.tsx +1247 -0
  213. package/src/components/draggable-entity-card/ReturnedError.tsx +549 -0
  214. package/src/components/draggable-entity-card/SmallSuccessFailureNodes.tsx +523 -0
  215. package/src/components/draggable-entity-card/SuccessFailureNodes.tsx +509 -0
  216. package/src/components/draggable-entity-card/TestEntityButton.tsx +946 -0
  217. package/src/components/draggable-entity-card/TestMenu.tsx +523 -0
  218. package/src/components/draggable-entity-card/TestMenuValidationDropdown.tsx +84 -0
  219. package/src/components/draggable-entity-card/UnreachableMarker.tsx +114 -0
  220. package/src/components/draggable-entity-card/VariableCard.tsx +1577 -0
  221. package/src/components/draggable-entity-card/VariableScopeMarker.tsx +117 -0
  222. package/src/components/draggable-entity-card/collapse-entity-button.css +44 -0
  223. package/src/components/draggable-entity-card/definition-entity/DefinitionEntityCard.tsx +1181 -0
  224. package/src/components/draggable-entity-card/definition-entity/DefinitionEntityIcon.tsx +36 -0
  225. package/src/components/draggable-entity-card/definition-entity/DefinitionEntityProperty.tsx +478 -0
  226. package/src/components/draggable-entity-card/definition-entity/DynamicFooterActions.tsx +112 -0
  227. package/src/components/draggable-entity-card/definition-entity/actions/external-integration-connection/ExportCredentialsFooterAction.tsx +461 -0
  228. package/src/components/draggable-entity-card/definition-entity/actions/external-integration-connection/RestablishConnectionFooterAction.tsx +199 -0
  229. package/src/components/draggable-entity-card/definition-entity/actions/external-integration-connection/restablish-connection-footer-action.css +85 -0
  230. package/src/components/draggable-entity-card/definition-entity/actions/google-drive/GoogleDriveFilePickerAPIFooterAction.tsx +277 -0
  231. package/src/components/draggable-entity-card/definition-entity/actions/google-drive/google-drive-file-picker-api-footer-action.css +107 -0
  232. package/src/components/draggable-entity-card/definition-entity/actions/persisted-entity/DatabaseFooterAction.tsx +452 -0
  233. package/src/components/draggable-entity-card/definition-entity/actions/persisted-entity/database-footer-action.css +86 -0
  234. package/src/components/draggable-entity-card/definition-entity/definition-entity-card.css +17 -0
  235. package/src/components/draggable-entity-card/draggable-entity-card.css +1140 -0
  236. package/src/components/draggable-entity-card/entity-locked-icon/EntityLockedIcon.tsx +133 -0
  237. package/src/components/draggable-entity-card/entity-locked-icon/entity-locked.css +8 -0
  238. package/src/components/draggable-entity-card/expand-properties-icon-button/ExpandPropertiesIconButton.tsx +84 -0
  239. package/src/components/draggable-entity-card/expand-properties-icon-button/expand-properties-icon-button.css +21 -0
  240. package/src/components/draggable-entity-card/implement-entity-icon/ImplementEntityIcon.tsx +74 -0
  241. package/src/components/draggable-entity-card/implement-entity-icon/implement-entity-icon.css +13 -0
  242. package/src/components/draggable-entity-card/logic-error/LogicErrorIconMenu.tsx +424 -0
  243. package/src/components/draggable-entity-card/logic-error/logic-error.css +23 -0
  244. package/src/components/draggable-entity-card/new-card-input-button/NewCardInputButton.tsx +193 -0
  245. package/src/components/draggable-entity-card/new-card-input-button/NewDynamicInputButton.tsx +214 -0
  246. package/src/components/draggable-entity-card/new-card-input-button/new-card-input-button.css +71 -0
  247. package/src/components/draggable-entity-card/new-card-output-button/NewCardOutputButton.tsx +192 -0
  248. package/src/components/draggable-entity-card/new-card-output-button/new-card-output-button.css +71 -0
  249. package/src/components/draggable-entity-card/termination-statement/TerminationStatementCard.tsx +1543 -0
  250. package/src/components/draggable-entity-card/termination-statement/termination-statement-card.css +17 -0
  251. package/src/components/draggable-entity-card/test-entity-button.css +55 -0
  252. package/src/components/draggable-entity-card/test-menu.css +181 -0
  253. package/src/components/draggable-entity-card/unreachable-marker.css +43 -0
  254. package/src/components/draggable-entity-card/variable-scope-marker.css +22 -0
  255. package/src/components/dynamic-value/DynamicValue.tsx +2395 -0
  256. package/src/components/dynamic-value/DynamicValueEntry.tsx +1957 -0
  257. package/src/components/dynamic-value/dynamic-value.css +230 -0
  258. package/src/components/editor/ElyxMonacoEditor.tsx +38 -0
  259. package/src/components/entity-error/EntityErrorListItem.tsx +47 -0
  260. package/src/components/entity-error/entity-error.css +198 -0
  261. package/src/components/entity-icon/EntityIcon.tsx +292 -0
  262. package/src/components/entity-icon/entity-icon.css +39 -0
  263. package/src/components/gallery-card/CreateNewProject.tsx +222 -0
  264. package/src/components/gallery-card/GalleryCard.tsx +171 -0
  265. package/src/components/gallery-card/MarketplaceCard.tsx +87 -0
  266. package/src/components/gallery-card/ProjectDuplicationCard.tsx +575 -0
  267. package/src/components/gallery-card/gallery-card.css +25 -0
  268. package/src/components/notifications/NotificationsIconButton.tsx +124 -0
  269. package/src/components/notifications/NotificationsPanel.tsx +385 -0
  270. package/src/components/notifications/notifications.css +189 -0
  271. package/src/components/online-users/LocalOnlineUsers.tsx +175 -0
  272. package/src/components/online-users/PageOnlineUsers.tsx +297 -0
  273. package/src/components/online-users/online-users.css +72 -0
  274. package/src/components/page-backdrop/PageBackdrop.tsx +8 -0
  275. package/src/components/page-backdrop/page-backdrop.css +7 -0
  276. package/src/components/project-configuration/DeleteProjectConfirmationDialog.tsx +134 -0
  277. package/src/components/project-configuration/ProjectConfigurationDialog.tsx +972 -0
  278. package/src/components/project-configuration/ProjectDataForm.tsx +121 -0
  279. package/src/components/project-configuration/UnpublishProjectConfirmationDialog.tsx +162 -0
  280. package/src/components/project-configuration/project-configuration-content.css +209 -0
  281. package/src/components/project-name/ProjectName.tsx +2025 -0
  282. package/src/components/project-name/project-name.css +599 -0
  283. package/src/components/publishing/Publication.tsx +133 -0
  284. package/src/components/publishing/history/PublicationHistoryContent.tsx +414 -0
  285. package/src/components/publishing/history/PublicationHistoryDialog.tsx +234 -0
  286. package/src/components/publishing/preview/PublicationPreviewDialog.tsx +1158 -0
  287. package/src/components/publishing/preview/PublishingPriceForecast.tsx +160 -0
  288. package/src/components/publishing/preview/PublishingResourcesDetails.tsx +91 -0
  289. package/src/components/publishing/publication-sequence/PublishingSequenceContent.tsx +375 -0
  290. package/src/components/publishing/publication-sequence/PublishingSequenceDialog.tsx +344 -0
  291. package/src/components/publishing/publishing-dialog.css +142 -0
  292. package/src/components/publishing/utils.ts +227 -0
  293. package/src/components/resources/ResourcesDialog.tsx +591 -0
  294. package/src/components/resources/UpgradeBanner.tsx +102 -0
  295. package/src/components/resources/codebase/CodebaseDetails.tsx +156 -0
  296. package/src/components/resources/cron-job/CronJobsList.tsx +532 -0
  297. package/src/components/resources/functions/FunctionsList.tsx +454 -0
  298. package/src/components/resources/http-api/HttpAPI.tsx +566 -0
  299. package/src/components/resources/http-api/HttpAPIClientModule.tsx +37 -0
  300. package/src/components/resources/logs/LogsViewer.tsx +768 -0
  301. package/src/components/resources/query.ts +74 -0
  302. package/src/components/resources/relational-database/DatabaseTable.tsx +905 -0
  303. package/src/components/resources/relational-database/RelationalDatabase.tsx +83 -0
  304. package/src/components/resources/relational-database/RelationalDatabaseSecrets.tsx +361 -0
  305. package/src/components/resources/resources-dialog.css +74 -0
  306. package/src/components/test-relational-database/DatabaseTable.tsx +913 -0
  307. package/src/components/test-relational-database/TestDatabaseDialogContent.tsx +670 -0
  308. package/src/components/test-relational-database/query.ts +74 -0
  309. package/src/components/toolbar/ToolBar.tsx +236 -0
  310. package/src/components/toolbar/toolbar.css +78 -0
  311. package/src/components/transaction-history/TransactionHistoryDialog.tsx +268 -0
  312. package/src/components/user/CurrentUserAvatar.tsx +65 -0
  313. package/src/components/user/UserChip.tsx +62 -0
  314. package/src/components/user/user.css +39 -0
  315. package/src/components/user-profile/ChangePasswordForm.tsx +67 -0
  316. package/src/components/user-profile/OwnUserProfileContent.tsx +665 -0
  317. package/src/components/user-profile/PublicUserProfileContent.tsx +99 -0
  318. package/src/components/user-profile/UserDataForm.tsx +75 -0
  319. package/src/components/user-profile/UserProfileDialog.tsx +110 -0
  320. package/src/components/user-profile/user-profile-content.css +25 -0
  321. package/src/config.ts +130 -0
  322. package/src/globals.d.ts +13 -0
  323. package/src/index.html +27 -0
  324. package/src/index.tsx +23 -0
  325. package/src/lib/badge/Badge.tsx +35 -0
  326. package/src/lib/badge/badge.css +32 -0
  327. package/src/lib/button/Button.tsx +129 -0
  328. package/src/lib/button/button.css +145 -0
  329. package/src/lib/canvas/canvas-undo-redo.ts +263 -0
  330. package/src/lib/canvas/defs.ts +170 -0
  331. package/src/lib/canvas/index.test.ts +189 -0
  332. package/src/lib/canvas/index.ts +6999 -0
  333. package/src/lib/canvas/utils.ts +59 -0
  334. package/src/lib/card/Card.tsx +62 -0
  335. package/src/lib/card/LoadingCard.tsx +82 -0
  336. package/src/lib/card/card.css +259 -0
  337. package/src/lib/chip/Chip.tsx +79 -0
  338. package/src/lib/chip/chip.css +0 -0
  339. package/src/lib/dialog/Dialog.tsx +122 -0
  340. package/src/lib/dialog/SmallDialog.tsx +61 -0
  341. package/src/lib/dialog/dialog.css +40 -0
  342. package/src/lib/display-data-structure/index.tsx +21 -0
  343. package/src/lib/dropdown/CanvasDropdownMenuCard.tsx +68 -0
  344. package/src/lib/dropdown/CanvasDropdownMenuCardOption.tsx +136 -0
  345. package/src/lib/dropdown/DropdownButton.tsx +104 -0
  346. package/src/lib/dropdown/DropdownMenuCard.tsx +324 -0
  347. package/src/lib/dropdown/DropdownMenuPopup.tsx +27 -0
  348. package/src/lib/dropdown/dropdown-button.css +76 -0
  349. package/src/lib/dropdown/dropdown-menu.css +151 -0
  350. package/src/lib/json-editor/RawJsonEditor.tsx +137 -0
  351. package/src/lib/json-editor/json-editor.css +35 -0
  352. package/src/lib/loader/Loader.tsx +120 -0
  353. package/src/lib/loader/loader.css +38 -0
  354. package/src/lib/pagination/Pagination.tsx +64 -0
  355. package/src/lib/popup/CanvasPopupBaseComponent.tsx +103 -0
  356. package/src/lib/popup/Popup.tsx +243 -0
  357. package/src/lib/popup/popup.css +16 -0
  358. package/src/lib/table/RowForm.tsx +301 -0
  359. package/src/lib/table/Table.tsx +1069 -0
  360. package/src/lib/table/table.css +249 -0
  361. package/src/lib/table/types.ts +108 -0
  362. package/src/lib/text-area/TextArea.tsx +183 -0
  363. package/src/lib/text-area/text-area.css +156 -0
  364. package/src/lib/text-field/TextField.tsx +218 -0
  365. package/src/lib/text-field/index.ts +8 -0
  366. package/src/lib/text-field/text-field.css +201 -0
  367. package/src/lib/tooltip/Tooltip.tsx +24 -0
  368. package/src/lib/tooltip/tooltip.css +17 -0
  369. package/src/localization/index.ts +47 -0
  370. package/src/main.css +343 -0
  371. package/src/pages/Auth.tsx +848 -0
  372. package/src/pages/Editor.tsx +883 -0
  373. package/src/pages/ErrorPage.tsx +179 -0
  374. package/src/pages/Gallery.tsx +1693 -0
  375. package/src/pages/NewPaymentMethodCallback.tsx +53 -0
  376. package/src/pages/NotFoundPage.tsx +126 -0
  377. package/src/pages/PricingPlans.tsx +155 -0
  378. package/src/pages/auth.css +304 -0
  379. package/src/pages/gallery.css +421 -0
  380. package/src/payments/index.ts +187 -0
  381. package/src/popup-notification/index.ts +90 -0
  382. package/src/services/database/index.ts +1 -0
  383. package/src/services/database/utils.ts +1301 -0
  384. package/src/services/editor/CanvasElement.tsx +2934 -0
  385. package/src/services/editor/CanvasElementConnectionDeleteButton.ts +204 -0
  386. package/src/services/editor/CanvasPopup.tsx +749 -0
  387. package/src/services/editor/EditorService.ts +8157 -0
  388. package/src/services/editor/area.ts +1312 -0
  389. package/src/services/editor/connections.ts +1019 -0
  390. package/src/services/editor/create/condition.ts +25 -0
  391. package/src/services/editor/create/definition-entity.ts +29 -0
  392. package/src/services/editor/create/function-call.ts +25 -0
  393. package/src/services/editor/create/global-event.ts +33 -0
  394. package/src/services/editor/create/loop.ts +25 -0
  395. package/src/services/editor/create/operation.ts +30 -0
  396. package/src/services/editor/create/utils.ts +140 -0
  397. package/src/services/editor/create/variable-declaration.ts +135 -0
  398. package/src/services/editor/create/variable-instance.ts +100 -0
  399. package/src/services/editor/editor-ui-extensions-context.ts +43 -0
  400. package/src/services/editor/entities-metadata.json +9310 -0
  401. package/src/services/editor/icons.ts +1093 -0
  402. package/src/services/editor/index.ts +1 -0
  403. package/src/services/editor/layout.ts +102 -0
  404. package/src/services/editor/modules/built-in-function-implementations/base.ts +14 -0
  405. package/src/services/editor/modules/built-in-function-implementations/create-persisted-entity/index.ts +56 -0
  406. package/src/services/editor/modules/built-in-function-implementations/delete-persisted-entity/index.ts +55 -0
  407. package/src/services/editor/modules/built-in-function-implementations/index.ts +4 -0
  408. package/src/services/editor/modules/built-in-function-implementations/update-persisted-entity/index.ts +56 -0
  409. package/src/services/editor/modules/operations-implementations/external-integrations/google-drive/get-files.ts +183 -0
  410. package/src/services/editor/modules/operations-implementations/external-integrations/google-drive/list-drives.ts +124 -0
  411. package/src/services/editor/modules/operations-implementations/external-integrations/google-drive/list-root-folders.ts +125 -0
  412. package/src/services/editor/modules/operations-implementations/external-integrations/google-drive/smart-fetch-document.ts +702 -0
  413. package/src/services/editor/modules/operations-implementations/external-integrations/google-drive/upload-document.ts +535 -0
  414. package/src/services/editor/modules/operations-implementations/external-integrations/google-gemini/generate-content.ts +193 -0
  415. package/src/services/editor/modules/operations-implementations/external-integrations/google-mail/get-emails.ts +586 -0
  416. package/src/services/editor/modules/operations-implementations/external-integrations/google-mail/send-email.ts +386 -0
  417. package/src/services/editor/modules/operations-implementations/external-integrations/index.ts +12 -0
  418. package/src/services/editor/modules/operations-implementations/external-integrations/slack/channels.ts +240 -0
  419. package/src/services/editor/modules/operations-implementations/external-integrations/slack/messages.ts +210 -0
  420. package/src/services/editor/modules/operations-implementations/external-integrations/slack/replies.ts +200 -0
  421. package/src/services/editor/modules/operations-implementations/external-integrations/slack/send-message.ts +177 -0
  422. package/src/services/editor/modules/operations-implementations/index.ts +1 -0
  423. package/src/services/editor/modules/search-node-implementation/index.ts +42 -0
  424. package/src/services/editor/modules/sql-migrations-generation.tsx +1054 -0
  425. package/src/services/editor/publication/publication.ts +578 -0
  426. package/src/services/editor/ui.ts +1348 -0
  427. package/src/services/editor/utils.ts +5868 -0
  428. package/src/services/editor/value-store.ts +619 -0
  429. package/src/services/execution/built-in-function-implementations.ts +422 -0
  430. package/src/services/execution/index.ts +4747 -0
  431. package/src/services/execution/logic.ts +121 -0
  432. package/src/services/execution/test-instance.tsx +2296 -0
  433. package/src/services/execution/utils.ts +33 -0
  434. package/src/services/execution/value-resolution.test.ts +424 -0
  435. package/src/services/execution/value-resolution.ts +4087 -0
  436. package/src/services/integrations/ExternalIntegrationsService.ts +439 -0
  437. package/src/services/integrations/api.ts +175 -0
  438. package/src/services/local-relational-database/idb_helper.ts +66 -0
  439. package/src/services/local-relational-database/index.ts +3308 -0
  440. package/src/services/local-relational-database/utils.ts +403 -0
  441. package/src/services/notifications/index.ts +525 -0
  442. package/src/services/user/index.ts +144 -0
  443. package/src/setupTests.ts +1 -0
  444. package/src/socket/socket.ts +248 -0
  445. package/src/socket/utils.ts +10 -0
  446. package/src/store/workspace.ts +12 -0
  447. package/src/theme.ts +19 -0
  448. package/src/utils/DOM.ts +39 -0
  449. package/src/utils/date.ts +169 -0
  450. package/src/utils/index.ts +158 -0
  451. package/src/utils/react.tsx +679 -0
  452. package/src/utils/testing.ts +103 -0
@@ -0,0 +1,439 @@
1
+ import type { ConnectUI } from '@nangohq/frontend';
2
+ import Nango from '@nangohq/frontend';
3
+ import {
4
+ editorRuntimeServiceBaseUrl,
5
+ getCredentials,
6
+ getProjectCredentials,
7
+ postConnectSession,
8
+ } from './api';
9
+ import { EditorService } from '../editor';
10
+ import { AxiosResponse } from 'axios';
11
+ import {
12
+ ApiPublicConnection,
13
+ ApiPublicConnectionFull,
14
+ AuthModes,
15
+ CombinedFilterAction,
16
+ NangoRecord,
17
+ UserProvidedProxyConfiguration,
18
+ } from '@nangohq/types';
19
+ import { getAccessToken } from '../../auth';
20
+ import {
21
+ BaseEntityNames,
22
+ BUILT_IN_BASE_ENTITY_IDS,
23
+ checkHasBaseEntity,
24
+ ExternalIntegrationNames,
25
+ isObject,
26
+ } from '@elyx-code/project-logic-tree';
27
+ import { Logger } from '@elyx-code/common-ts-utils';
28
+ import { envConfig } from '../../config';
29
+
30
+ const apiURL =
31
+ envConfig.EXTERNAL_INTEGRATIONS_URL ?? 'https://integrations.dev.elyx.tech';
32
+ const nango = new Nango({ host: apiURL, publicKey: 'empty' });
33
+ const connectUIBaseUrl =
34
+ envConfig.EXTERNAL_INTEGRATIONS_CONNECT_URL ??
35
+ 'https://connect.dev.elyx.tech';
36
+
37
+ export interface Integration {
38
+ created_at: string;
39
+ updated_at: string;
40
+ unique_key: string;
41
+ provider: string;
42
+ logo: string;
43
+ display_name: string;
44
+ webhook_url?: string | null;
45
+ credentials?:
46
+ | {
47
+ type: AuthModes['OAuth2'] | AuthModes['OAuth1'] | AuthModes['TBA'];
48
+ client_id: string | null;
49
+ client_secret: string | null;
50
+ scopes: string | null;
51
+ }
52
+ | {
53
+ type: AuthModes['App'];
54
+ app_id: string | null;
55
+ private_key: string | null;
56
+ app_link: string | null;
57
+ }
58
+ | null;
59
+ }
60
+
61
+ export type GetIntegrations = {
62
+ integrations: Integration[];
63
+ };
64
+
65
+ export interface GetConnectionsSuccess {
66
+ connections: ApiPublicConnection[];
67
+ }
68
+
69
+ export interface ListRecordsRequestConfig {
70
+ providerConfigKey: string;
71
+ connectionId: string;
72
+ model: string;
73
+ variant?: string;
74
+ modifiedAfter?: string;
75
+ limit?: number;
76
+ filter?: CombinedFilterAction | CombinedFilterAction;
77
+ cursor?: string | null;
78
+ ids?: string[];
79
+ }
80
+
81
+ export type ProxyConfiguration = Omit<
82
+ UserProvidedProxyConfiguration,
83
+ 'files' | 'providerConfigKey'
84
+ > & {
85
+ providerConfigKey?: string;
86
+ connectionId?: string;
87
+ };
88
+
89
+ export interface IConnectOptions {
90
+ onSuccess?: (connection: ApiPublicConnection) => Promise<void> | void;
91
+ }
92
+
93
+ export class ExternalIntegrationsService {
94
+ // Service methods and logic go here
95
+ nango = nango;
96
+
97
+ connectUI: ConnectUI | null = null;
98
+
99
+ editor: EditorService;
100
+
101
+ allIntegrations: Integration[] = [];
102
+ allConnections: ApiPublicConnection[] = [];
103
+
104
+ constructor(editor: EditorService) {
105
+ this.editor = editor;
106
+ }
107
+
108
+ integration(uniqueKey: string): Integration | null {
109
+ return (
110
+ this.allIntegrations.find(
111
+ (integration) => integration.unique_key === uniqueKey,
112
+ ) || null
113
+ );
114
+ }
115
+
116
+ // We check the existing connections against the entities in the project
117
+ // And return the ones that are not tracked by the project
118
+ getUntrackedConnections(): ApiPublicConnection[] {
119
+ return this.allConnections.filter((connection) => {
120
+ const connectionId = connection.connection_id;
121
+
122
+ const trackedIds = this.editor.project?.entities
123
+ .filter((entity) =>
124
+ checkHasBaseEntity(
125
+ entity,
126
+ BaseEntityNames.EXTERNAL_INTEGRATION_CONNECTION,
127
+ ),
128
+ )
129
+ .map((entity) => {
130
+ const builtInConnectionPropertyId =
131
+ BUILT_IN_BASE_ENTITY_IDS['built-in-base-entity']
132
+ .BUILT_IN_EXTERNAL_INTEGRATION_CONNECTION_ENTITY.properties
133
+ .connectionId.id;
134
+ const connectionIdProperty = entity.properties.find(
135
+ (property) =>
136
+ property.implements.find(
137
+ (impl) => impl.id === builtInConnectionPropertyId,
138
+ ) ||
139
+ // It could be that this is a specific connection entity, and therefore itself extends the base connection entity
140
+ property.implements.find(
141
+ (impl) => impl.extends?.id === builtInConnectionPropertyId,
142
+ ),
143
+ );
144
+
145
+ const connectionIdValue =
146
+ connectionIdProperty?.getDefaultValue()?.value;
147
+
148
+ return connectionIdValue as string;
149
+ })
150
+ .filter((id) => !!id);
151
+
152
+ return !trackedIds?.includes(connectionId);
153
+ });
154
+ }
155
+
156
+ connect(
157
+ integrationOrOptions?: ExternalIntegrationNames | IConnectOptions,
158
+ options?: IConnectOptions,
159
+ ): void {
160
+ // if (!integrationUniqueKey) {
161
+ // throw new Error(
162
+ // `To 'connect' you must provide an integration unique key`
163
+ // );
164
+ // }
165
+
166
+ let sanitizedUniqueKey: ExternalIntegrationNames | null = null;
167
+ let sanitizedOptions: IConnectOptions = options || {};
168
+
169
+ if (typeof integrationOrOptions === 'string') {
170
+ sanitizedUniqueKey = integrationOrOptions;
171
+ } else if (isObject(integrationOrOptions)) {
172
+ sanitizedOptions = integrationOrOptions;
173
+ }
174
+
175
+ // sanitizedUniqueKey = getRootExternalIntegrationFromAlias(
176
+ // sanitizedUniqueKey as ExternalIntegrationAliasProviders
177
+ // ) as ExternalIntegrationNames;
178
+
179
+ this.connectUI = nango.openConnectUI({
180
+ // host: connectUIBaseUrl, // Type error: Property 'host' does not exist on type 'ConnectUIOptions'
181
+ apiURL,
182
+ baseURL: connectUIBaseUrl,
183
+ onEvent: async (event) => {
184
+ if (event.type === 'close') {
185
+ // Open alert to notify the user
186
+ return;
187
+ } else if (event.type === 'connect') {
188
+ // The backend will receive a webhook with the connection info
189
+ // Open alert to notify the user
190
+ if (sanitizedOptions.onSuccess) {
191
+ Logger.log('Connection established successfully:', event);
192
+
193
+ // Re-fetch the connections list
194
+ const result =
195
+ await this.editor.integrationsService.listConnections();
196
+
197
+ this.allConnections = result.connections;
198
+
199
+ const newConnection = result.connections.find(
200
+ (connection) =>
201
+ connection.connection_id === event.payload.connectionId,
202
+ );
203
+
204
+ await sanitizedOptions.onSuccess(
205
+ newConnection as ApiPublicConnection,
206
+ );
207
+ }
208
+ return;
209
+ }
210
+
211
+ console.warn('Unknown connect external integration event type:', event);
212
+ },
213
+ });
214
+
215
+ // We defer the token creation so the iframe can open and display a loading screen
216
+ setTimeout(async () => {
217
+ Logger.log(
218
+ 'Creating connect session for unique key:',
219
+ sanitizedUniqueKey,
220
+ );
221
+ const res = await postConnectSession(
222
+ sanitizedUniqueKey as string,
223
+ this.editor.projectId,
224
+ );
225
+ Logger.log('Connect session response:', res);
226
+ this.connectUI!.setSessionToken(res.connectSession);
227
+ }, 10);
228
+ }
229
+
230
+ async listIntegrations(): Promise<GetIntegrations> {
231
+ const res = await fetch(
232
+ `${editorRuntimeServiceBaseUrl}/v1/external-integrations/integrations`,
233
+ {
234
+ headers: {
235
+ Authorization: `Bearer ${await getAccessToken()}`,
236
+ },
237
+ },
238
+ );
239
+
240
+ if (res.status !== 200) {
241
+ const errorText = await res.text();
242
+ try {
243
+ // If the server returned JSON, throw the parsed object
244
+ // or a custom error with that data attached.
245
+ const errorJson = JSON.parse(errorText);
246
+ throw errorJson;
247
+ } catch (e) {
248
+ throw new Error(errorText || 'Error listing external integrations');
249
+ }
250
+ }
251
+
252
+ const json = (await res.json()) as GetIntegrations;
253
+ return json;
254
+ }
255
+
256
+ async listConnections(): Promise<GetConnectionsSuccess> {
257
+ const res = await fetch(
258
+ `${editorRuntimeServiceBaseUrl}/v1/external-integrations/all-connections/${this.editor.projectId}`,
259
+ {
260
+ headers: {
261
+ Authorization: `Bearer ${await getAccessToken()}`,
262
+ },
263
+ },
264
+ );
265
+
266
+ if (res.status !== 200) {
267
+ const errorText = await res.text();
268
+ try {
269
+ // If the server returned JSON, throw the parsed object
270
+ // or a custom error with that data attached.
271
+ const errorJson = JSON.parse(errorText);
272
+ throw errorJson;
273
+ } catch (e) {
274
+ throw new Error(
275
+ errorText || 'Error listing external integrations connections',
276
+ );
277
+ }
278
+ }
279
+
280
+ const json = (await res.json()) as GetConnectionsSuccess;
281
+
282
+ this.allConnections = json.connections;
283
+
284
+ return json;
285
+ }
286
+
287
+ // Generic list method which can be used to list any records from any integration
288
+ async listRecords<T extends Record<string, any> = any>(
289
+ providerConfigKey: string,
290
+ connectionId: string,
291
+ model: string,
292
+ config: Omit<
293
+ ListRecordsRequestConfig,
294
+ 'providerConfigKey' | 'connectionId' | 'model'
295
+ > = {},
296
+ ): Promise<{
297
+ records: NangoRecord<T>[];
298
+ next_cursor: string | null;
299
+ }> {
300
+ const querySanitisedConfig = {
301
+ variant: config.variant,
302
+ modifiedAfter: config.modifiedAfter,
303
+ limit: config.limit ? String(config.limit) : undefined,
304
+ filter: config.filter,
305
+ cursor: config.cursor,
306
+ ids: config.ids ? config.ids.join(',') : undefined,
307
+ };
308
+
309
+ // Loop over the keys and remove undefined values
310
+ Object.keys(querySanitisedConfig).forEach((key) => {
311
+ // @ts-ignore
312
+ if (querySanitisedConfig[key] === undefined) {
313
+ // @ts-ignore
314
+ delete querySanitisedConfig[key];
315
+ }
316
+ });
317
+
318
+ const queryParams = new URLSearchParams(
319
+ querySanitisedConfig as Record<string, string>,
320
+ );
321
+
322
+ const url = `${editorRuntimeServiceBaseUrl}/v1/external-integrations/list-records/${providerConfigKey}/${connectionId}/${model}?${queryParams.toString()}`;
323
+
324
+ const res = await fetch(url, {
325
+ method: 'GET',
326
+ headers: {
327
+ 'Content-Type': 'application/json',
328
+ Authorization: `Bearer ${await getAccessToken()}`,
329
+ },
330
+ });
331
+
332
+ if (res.status !== 200) {
333
+ const errorText = await res.text();
334
+ try {
335
+ // If the server returned JSON, throw the parsed object
336
+ // or a custom error with that data attached.
337
+ const errorJson = JSON.parse(errorText);
338
+ throw errorJson;
339
+ } catch (e) {
340
+ throw new Error(
341
+ errorText || 'Error listing records from external integration',
342
+ );
343
+ }
344
+ }
345
+
346
+ const json = (await res.json()) as {
347
+ records: NangoRecord<T>[];
348
+ next_cursor: string | null;
349
+ };
350
+ return json;
351
+ }
352
+
353
+ // Generic method to get a single record
354
+ async get<T = any>(
355
+ providerConfigKey: string,
356
+ connectionId: string,
357
+ config: ProxyConfiguration,
358
+ ): Promise<AxiosResponse<T>> {
359
+ const res = await fetch(
360
+ `${editorRuntimeServiceBaseUrl}/v1/external-integrations/get-item/${providerConfigKey}/${connectionId}`,
361
+ {
362
+ method: 'POST',
363
+ headers: {
364
+ 'Content-Type': 'application/json',
365
+ Authorization: `Bearer ${await getAccessToken()}`,
366
+ },
367
+ body: JSON.stringify(config),
368
+ },
369
+ );
370
+
371
+ if (res.status !== 200) {
372
+ const errorText = await res.text();
373
+ try {
374
+ // If the server returned JSON, throw the parsed object
375
+ // or a custom error with that data attached.
376
+ const errorJson = JSON.parse(errorText);
377
+ throw errorJson;
378
+ } catch (e) {
379
+ throw new Error(
380
+ errorText || 'Error getting item from external integration',
381
+ );
382
+ }
383
+ }
384
+
385
+ const json = (await res.json()) as AxiosResponse<T>;
386
+ return json;
387
+ }
388
+
389
+ // Generic method to trigger an action
390
+ async triggerAction<In = unknown, Out = object>(
391
+ providerConfigKey: string,
392
+ connectionId: string,
393
+ action: string,
394
+ payload: In,
395
+ ): Promise<Out> {
396
+ const res = await fetch(
397
+ `${editorRuntimeServiceBaseUrl}/v1/external-integrations/trigger-action/${providerConfigKey}/${connectionId}/${action}`,
398
+ {
399
+ method: 'POST',
400
+ headers: {
401
+ 'Content-Type': 'application/json',
402
+ Authorization: `Bearer ${await getAccessToken()}`,
403
+ },
404
+ body: JSON.stringify({
405
+ // providerConfigKey,
406
+ // connectionId,
407
+ // action,
408
+ payload,
409
+ }),
410
+ },
411
+ );
412
+
413
+ if (res.status !== 200) {
414
+ const errorText = await res.text();
415
+ try {
416
+ // If the server returned JSON, throw the parsed object
417
+ // or a custom error with that data attached.
418
+ const errorJson = JSON.parse(errorText);
419
+ throw errorJson;
420
+ } catch (e) {
421
+ throw new Error(
422
+ errorText || 'Error triggering external integration action',
423
+ );
424
+ }
425
+ }
426
+ const json = (await res.json()) as Out;
427
+ return json;
428
+ }
429
+
430
+ getProjectCredentials(
431
+ connectionIds?: string[],
432
+ ): Promise<{ credentials: ApiPublicConnectionFull[] }> {
433
+ return getProjectCredentials(this.editor.projectId, connectionIds);
434
+ }
435
+
436
+ getCredentials(integrationId: string, connectionId: string): Promise<any> {
437
+ return getCredentials(this.editor.projectId, integrationId, connectionId);
438
+ }
439
+ }
@@ -0,0 +1,175 @@
1
+ import { ApiPublicConnectionFull } from '@nangohq/types';
2
+ import { getAccessToken } from '../../auth';
3
+ import { envConfig } from '../../config';
4
+
5
+ export const editorRuntimeServiceBaseUrl =
6
+ `${envConfig.API_BASE_URL}/editor-runtime` ||
7
+ 'http://localhost:3010';
8
+
9
+ type File = {
10
+ [key: string]: any;
11
+ };
12
+
13
+ export async function postConnectSession(
14
+ integration: string,
15
+ projectId: string
16
+ ): Promise<any> {
17
+ const res = await fetch(
18
+ `${editorRuntimeServiceBaseUrl}/v1/external-integrations/connect-session/${projectId}`,
19
+ {
20
+ method: 'POST',
21
+ headers: {
22
+ 'Content-Type': 'application/json',
23
+ Authorization: `Bearer ${await getAccessToken()}`,
24
+ },
25
+ body: JSON.stringify({ integration }),
26
+ }
27
+ );
28
+ if (res.status !== 200) {
29
+ throw new Error();
30
+ }
31
+
32
+ const json = (await res.json()) as any;
33
+ return json;
34
+ }
35
+
36
+ export async function listIntegrations(): Promise<any> {
37
+ const res = await fetch(`${editorRuntimeServiceBaseUrl}/integrations`, {
38
+ method: 'GET',
39
+ headers: {
40
+ Authorization: `Bearer ${await getAccessToken()}`,
41
+ },
42
+ });
43
+ if (res.status !== 200) {
44
+ throw new Error();
45
+ }
46
+
47
+ const json = (await res.json()) as any;
48
+ return json;
49
+ }
50
+
51
+ export async function listConnections(): Promise<any> {
52
+ const res = await fetch(`${editorRuntimeServiceBaseUrl}/v1/external-integrations/connections`, {
53
+ method: 'GET',
54
+ headers: {
55
+ Authorization: `Bearer ${await getAccessToken()}`,
56
+ },
57
+ });
58
+ if (res.status !== 200) {
59
+ throw new Error();
60
+ }
61
+
62
+ const json = (await res.json()) as any;
63
+ return json;
64
+ }
65
+
66
+ export async function getNangoCredentials(integrationId: string): Promise<any> {
67
+ const res = await fetch(
68
+ `${editorRuntimeServiceBaseUrl}/nango-credentials?integrationId=${integrationId}`
69
+ );
70
+ if (res.status !== 200) {
71
+ throw new Error('Failed to get Nango credentials');
72
+ }
73
+ return res.json();
74
+ }
75
+
76
+ export async function setConnectionMetadata(
77
+ integrationId: string,
78
+ metadata: Record<string, any>
79
+ ): Promise<void> {
80
+ const res = await fetch(
81
+ `${editorRuntimeServiceBaseUrl}/v1/external-integrations/set-connection-metadata`,
82
+ {
83
+ method: 'POST',
84
+ headers: {
85
+ 'Content-Type': 'application/json',
86
+ Authorization: `Bearer ${await getAccessToken()}`,
87
+ },
88
+ body: JSON.stringify({ integrationId, metadata }),
89
+ }
90
+ );
91
+ if (res.status !== 200) {
92
+ throw new Error('Failed to set connection metadata');
93
+ }
94
+ }
95
+
96
+ export async function getFiles(): Promise<File[]> {
97
+ const res = await fetch(`${editorRuntimeServiceBaseUrl}/get-files`);
98
+ if (res.status !== 200) {
99
+ throw new Error('Failed to get files');
100
+ }
101
+ const json: { files: File[] } = await res.json();
102
+ return json.files;
103
+ }
104
+
105
+ export async function downloadFile(fileId: string): Promise<Blob> {
106
+ const res = await fetch(`${editorRuntimeServiceBaseUrl}/download/${fileId}`, {
107
+ method: 'GET',
108
+ });
109
+
110
+ if (!res.ok) {
111
+ throw new Error('Failed to download file');
112
+ }
113
+
114
+ return res.blob();
115
+ }
116
+
117
+ export async function deleteConnection(integration: string): Promise<void> {
118
+ const res = await fetch(
119
+ `${editorRuntimeServiceBaseUrl}/v1/external-integrations/connections/${integration}`,
120
+ {
121
+ headers: {
122
+ Authorization: `Bearer ${await getAccessToken()}`,
123
+ },
124
+ method: 'DELETE',
125
+ }
126
+ );
127
+ if (res.status !== 200) {
128
+ throw new Error('Failed to delete connection');
129
+ }
130
+ }
131
+
132
+ export async function getProjectCredentials(
133
+ projectId: string,
134
+ connectionIds?: string[]
135
+ ): Promise<{ credentials: ApiPublicConnectionFull[] }> {
136
+ const res = await fetch(
137
+ `${editorRuntimeServiceBaseUrl}/v1/external-integrations/credentials/${projectId}${
138
+ !!connectionIds ? `?connectionIds=${connectionIds.join(',')}` : ''
139
+ }`,
140
+ {
141
+ method: 'GET',
142
+ headers: {
143
+ Authorization: `Bearer ${await getAccessToken()}`,
144
+ },
145
+ }
146
+ );
147
+
148
+ if (res.status !== 200) {
149
+ throw new Error('Failed to get credentials');
150
+ }
151
+
152
+ return res.json();
153
+ }
154
+
155
+ export async function getCredentials(
156
+ projectId: string,
157
+ integrationId: string,
158
+ connectionId: string
159
+ ): Promise<{ credentials: ApiPublicConnectionFull[] }> {
160
+ const res = await fetch(
161
+ `${editorRuntimeServiceBaseUrl}/v1/external-integrations/credentials/${projectId}/${integrationId}/${connectionId}`,
162
+ {
163
+ method: 'GET',
164
+ headers: {
165
+ Authorization: `Bearer ${await getAccessToken()}`,
166
+ },
167
+ }
168
+ );
169
+
170
+ if (res.status !== 200) {
171
+ throw new Error('Failed to get credentials');
172
+ }
173
+
174
+ return res.json();
175
+ }
@@ -0,0 +1,66 @@
1
+ import { Logger } from '@elyx-code/common-ts-utils';
2
+ import { IDataBase, Connection } from 'jsstore';
3
+ import SqlWeb from 'sqlweb';
4
+
5
+ const getWorkerPath = () => {
6
+ try {
7
+ if (process.env.NODE_ENV === 'development') {
8
+ return require('file-loader?name=scripts/[name].[hash].js!jsstore/dist/jsstore.worker.js');
9
+ } else {
10
+ return require('file-loader?name=scripts/[name].[hash].js!jsstore/dist/jsstore.worker.min.js');
11
+ }
12
+ } catch (ex) {
13
+ // Logger.error(ex);
14
+ return {
15
+ default: '',
16
+ };
17
+ }
18
+ };
19
+
20
+ // Ensure that we are using only one instance.
21
+ // Otherwise due to multiple instance multiple worker will be created.
22
+ const workerPath = getWorkerPath().default;
23
+
24
+ export const initLocalDBConnection = async (): Promise<
25
+ Connection & {
26
+ $sql: {
27
+ run: (sql: string) => Promise<any>;
28
+ };
29
+ } & {
30
+ database: IDataBase;
31
+ }
32
+ > => {
33
+ try {
34
+ const idbCon = !!workerPath
35
+ ? new Connection(new Worker(workerPath))
36
+ : new Connection();
37
+
38
+ // Add SqlWeb so we can use raw SQL queries
39
+ await idbCon.addPlugin(SqlWeb);
40
+
41
+ return idbCon as Connection & {
42
+ $sql: {
43
+ run: (sql: string) => Promise<any>;
44
+ };
45
+ } & {
46
+ database: IDataBase;
47
+ };
48
+ } catch (ex) {
49
+ Logger.log('Here');
50
+ Logger.error('HERE :', ex);
51
+ }
52
+ };
53
+
54
+ export const initLocalIndexedDatabase = async (
55
+ connection: Connection,
56
+ database: IDataBase
57
+ ): Promise<boolean> => {
58
+ try {
59
+ Logger.log('Initializing database at jsstore level');
60
+
61
+ return connection.initDb(database);
62
+ } catch (ex) {
63
+ Logger.log('Here');
64
+ Logger.error('HERE :', ex);
65
+ }
66
+ };