@neuralinnovations/dataisland-sdk 0.0.1-dev4 → 0.0.1-dev41

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 (363) hide show
  1. package/LICENSE +201 -0
  2. package/README.md +283 -37
  3. package/dist/index.d.ts +3 -0
  4. package/dist/index.d.ts.map +1 -0
  5. package/dist/index.js +3 -0
  6. package/dist/index.js.map +1 -0
  7. package/dist/package.json +103 -0
  8. package/dist/src/appBuilder.d.ts +44 -0
  9. package/dist/src/appBuilder.d.ts.map +1 -0
  10. package/dist/src/appBuilder.js +10 -0
  11. package/dist/src/appBuilder.js.map +1 -0
  12. package/dist/src/commands/deleteUserFullCommandHandler.d.ts +7 -0
  13. package/dist/src/commands/deleteUserFullCommandHandler.d.ts.map +1 -0
  14. package/dist/src/commands/deleteUserFullCommandHandler.js +21 -0
  15. package/dist/src/commands/deleteUserFullCommandHandler.js.map +1 -0
  16. package/dist/src/commands/startCommandHandler.d.ts +7 -0
  17. package/dist/src/commands/startCommandHandler.d.ts.map +1 -0
  18. package/dist/src/commands/startCommandHandler.js +27 -0
  19. package/dist/src/commands/startCommandHandler.js.map +1 -0
  20. package/dist/src/context.d.ts +24 -0
  21. package/dist/src/context.d.ts.map +1 -0
  22. package/dist/src/context.js +31 -0
  23. package/dist/src/context.js.map +1 -0
  24. package/dist/src/credentials.d.ts +33 -0
  25. package/dist/src/credentials.d.ts.map +1 -0
  26. package/dist/src/credentials.js +87 -0
  27. package/dist/src/credentials.js.map +1 -0
  28. package/dist/src/dataIslandApp.d.ts +55 -0
  29. package/dist/src/dataIslandApp.d.ts.map +1 -0
  30. package/dist/src/dataIslandApp.js +10 -0
  31. package/dist/src/dataIslandApp.js.map +1 -0
  32. package/dist/src/disposable.d.ts +84 -0
  33. package/dist/src/disposable.d.ts.map +1 -0
  34. package/dist/src/disposable.js +147 -0
  35. package/dist/src/disposable.js.map +1 -0
  36. package/dist/src/dto/accessGroupResponse.d.ts +30 -0
  37. package/dist/src/dto/accessGroupResponse.d.ts.map +1 -0
  38. package/dist/src/dto/accessGroupResponse.js +3 -0
  39. package/dist/src/dto/accessGroupResponse.js.map +1 -0
  40. package/dist/src/dto/acquiringResponse.d.ts +38 -0
  41. package/dist/src/dto/acquiringResponse.d.ts.map +1 -0
  42. package/dist/src/dto/acquiringResponse.js +12 -0
  43. package/dist/src/dto/acquiringResponse.js.map +1 -0
  44. package/dist/src/dto/badRequestResponse.d.ts +6 -0
  45. package/dist/src/dto/badRequestResponse.d.ts.map +1 -0
  46. package/dist/src/dto/badRequestResponse.js +3 -0
  47. package/dist/src/dto/badRequestResponse.js.map +1 -0
  48. package/dist/src/dto/chatResponse.d.ts +83 -0
  49. package/dist/src/dto/chatResponse.d.ts.map +1 -0
  50. package/dist/src/dto/chatResponse.js +45 -0
  51. package/dist/src/dto/chatResponse.js.map +1 -0
  52. package/dist/src/dto/limitsResponse.d.ts +29 -0
  53. package/dist/src/dto/limitsResponse.d.ts.map +1 -0
  54. package/dist/src/dto/limitsResponse.js +13 -0
  55. package/dist/src/dto/limitsResponse.js.map +1 -0
  56. package/dist/src/dto/statisticsResponse.d.ts +11 -0
  57. package/dist/src/dto/statisticsResponse.d.ts.map +1 -0
  58. package/dist/src/dto/statisticsResponse.js +3 -0
  59. package/dist/src/dto/statisticsResponse.js.map +1 -0
  60. package/dist/src/dto/userInfoResponse.d.ts +88 -0
  61. package/dist/src/dto/userInfoResponse.d.ts.map +1 -0
  62. package/dist/src/dto/userInfoResponse.js +3 -0
  63. package/dist/src/dto/userInfoResponse.js.map +1 -0
  64. package/dist/src/dto/workspacesResponse.d.ts +45 -0
  65. package/dist/src/dto/workspacesResponse.d.ts.map +1 -0
  66. package/dist/src/dto/workspacesResponse.js +3 -0
  67. package/dist/src/dto/workspacesResponse.js.map +1 -0
  68. package/dist/src/events.d.ts +17 -0
  69. package/dist/src/events.d.ts.map +1 -0
  70. package/dist/src/events.js +52 -0
  71. package/dist/src/events.js.map +1 -0
  72. package/dist/src/index.d.ts +66 -0
  73. package/dist/src/index.d.ts.map +1 -0
  74. package/dist/src/index.js +113 -0
  75. package/dist/src/index.js.map +1 -0
  76. package/dist/src/internal/app.impl.d.ts +30 -0
  77. package/dist/src/internal/app.impl.d.ts.map +1 -0
  78. package/dist/src/internal/app.impl.js +180 -0
  79. package/dist/src/internal/app.impl.js.map +1 -0
  80. package/dist/src/internal/appBuilder.impl.d.ts +27 -0
  81. package/dist/src/internal/appBuilder.impl.d.ts.map +1 -0
  82. package/dist/src/internal/appBuilder.impl.js +71 -0
  83. package/dist/src/internal/appBuilder.impl.js.map +1 -0
  84. package/dist/src/internal/createApp.impl.d.ts +4 -0
  85. package/dist/src/internal/createApp.impl.d.ts.map +1 -0
  86. package/dist/src/internal/createApp.impl.js +11 -0
  87. package/dist/src/internal/createApp.impl.js.map +1 -0
  88. package/dist/src/internal/registry.d.ts +66 -0
  89. package/dist/src/internal/registry.d.ts.map +1 -0
  90. package/dist/src/internal/registry.js +114 -0
  91. package/dist/src/internal/registry.js.map +1 -0
  92. package/dist/src/middleware.d.ts +6 -0
  93. package/dist/src/middleware.d.ts.map +1 -0
  94. package/dist/src/middleware.js +3 -0
  95. package/dist/src/middleware.js.map +1 -0
  96. package/dist/src/services/acquiringService.d.ts +8 -0
  97. package/dist/src/services/acquiringService.d.ts.map +1 -0
  98. package/dist/src/services/acquiringService.js +40 -0
  99. package/dist/src/services/acquiringService.js.map +1 -0
  100. package/dist/src/services/anonymousService.d.ts +8 -0
  101. package/dist/src/services/anonymousService.d.ts.map +1 -0
  102. package/dist/src/services/anonymousService.js +41 -0
  103. package/dist/src/services/anonymousService.js.map +1 -0
  104. package/dist/src/services/commandService.d.ts +18 -0
  105. package/dist/src/services/commandService.d.ts.map +1 -0
  106. package/dist/src/services/commandService.js +40 -0
  107. package/dist/src/services/commandService.js.map +1 -0
  108. package/dist/src/services/cookieService.d.ts +7 -0
  109. package/dist/src/services/cookieService.d.ts.map +1 -0
  110. package/dist/src/services/cookieService.js +18 -0
  111. package/dist/src/services/cookieService.js.map +1 -0
  112. package/dist/src/services/credentialService.d.ts +9 -0
  113. package/dist/src/services/credentialService.d.ts.map +1 -0
  114. package/dist/src/services/credentialService.js +26 -0
  115. package/dist/src/services/credentialService.js.map +1 -0
  116. package/dist/src/services/httpMethod.d.ts +2 -0
  117. package/dist/src/services/httpMethod.d.ts.map +1 -0
  118. package/dist/src/services/httpMethod.js +3 -0
  119. package/dist/src/services/httpMethod.js.map +1 -0
  120. package/dist/src/services/middlewareService.d.ts +10 -0
  121. package/dist/src/services/middlewareService.d.ts.map +1 -0
  122. package/dist/src/services/middlewareService.js +34 -0
  123. package/dist/src/services/middlewareService.js.map +1 -0
  124. package/dist/src/services/organizationService.d.ts +10 -0
  125. package/dist/src/services/organizationService.d.ts.map +1 -0
  126. package/dist/src/services/organizationService.js +19 -0
  127. package/dist/src/services/organizationService.js.map +1 -0
  128. package/dist/src/services/requestBuilder.d.ts +17 -0
  129. package/dist/src/services/requestBuilder.d.ts.map +1 -0
  130. package/dist/src/services/requestBuilder.js +105 -0
  131. package/dist/src/services/requestBuilder.js.map +1 -0
  132. package/dist/src/services/responseUtils.d.ts +8 -0
  133. package/dist/src/services/responseUtils.d.ts.map +1 -0
  134. package/dist/src/services/responseUtils.js +40 -0
  135. package/dist/src/services/responseUtils.js.map +1 -0
  136. package/dist/src/services/rpcService.d.ts +77 -0
  137. package/dist/src/services/rpcService.d.ts.map +1 -0
  138. package/dist/src/services/rpcService.js +125 -0
  139. package/dist/src/services/rpcService.js.map +1 -0
  140. package/dist/src/services/service.d.ts +21 -0
  141. package/dist/src/services/service.d.ts.map +1 -0
  142. package/dist/src/services/service.js +41 -0
  143. package/dist/src/services/service.js.map +1 -0
  144. package/dist/src/services/userProfileService.d.ts +9 -0
  145. package/dist/src/services/userProfileService.d.ts.map +1 -0
  146. package/dist/src/services/userProfileService.js +43 -0
  147. package/dist/src/services/userProfileService.js.map +1 -0
  148. package/dist/src/storages/chats/answer.d.ts +41 -0
  149. package/dist/src/storages/chats/answer.d.ts.map +1 -0
  150. package/dist/src/storages/chats/answer.impl.d.ts +29 -0
  151. package/dist/src/storages/chats/answer.impl.d.ts.map +1 -0
  152. package/dist/src/storages/chats/answer.impl.js +116 -0
  153. package/dist/src/storages/chats/answer.impl.js.map +1 -0
  154. package/dist/src/storages/chats/answer.js +15 -0
  155. package/dist/src/storages/chats/answer.js.map +1 -0
  156. package/dist/src/storages/chats/chat.d.ts +43 -0
  157. package/dist/src/storages/chats/chat.d.ts.map +1 -0
  158. package/dist/src/storages/chats/chat.impl.d.ts +25 -0
  159. package/dist/src/storages/chats/chat.impl.d.ts.map +1 -0
  160. package/dist/src/storages/chats/chat.impl.js +85 -0
  161. package/dist/src/storages/chats/chat.impl.js.map +1 -0
  162. package/dist/src/storages/chats/chat.js +12 -0
  163. package/dist/src/storages/chats/chat.js.map +1 -0
  164. package/dist/src/storages/chats/chats.d.ts +45 -0
  165. package/dist/src/storages/chats/chats.d.ts.map +1 -0
  166. package/dist/src/storages/chats/chats.impl.d.ts +19 -0
  167. package/dist/src/storages/chats/chats.impl.d.ts.map +1 -0
  168. package/dist/src/storages/chats/chats.impl.js +147 -0
  169. package/dist/src/storages/chats/chats.impl.js.map +1 -0
  170. package/dist/src/storages/chats/chats.js +16 -0
  171. package/dist/src/storages/chats/chats.js.map +1 -0
  172. package/dist/src/storages/files/file.d.ts +47 -0
  173. package/dist/src/storages/files/file.d.ts.map +1 -0
  174. package/dist/src/storages/files/file.impl.d.ts +25 -0
  175. package/dist/src/storages/files/file.impl.d.ts.map +1 -0
  176. package/dist/src/storages/files/file.impl.js +93 -0
  177. package/dist/src/storages/files/file.impl.js.map +1 -0
  178. package/dist/src/storages/files/file.js +17 -0
  179. package/dist/src/storages/files/file.js.map +1 -0
  180. package/dist/src/storages/files/files.d.ts +39 -0
  181. package/dist/src/storages/files/files.d.ts.map +1 -0
  182. package/dist/src/storages/files/files.impl.d.ts +24 -0
  183. package/dist/src/storages/files/files.impl.d.ts.map +1 -0
  184. package/dist/src/storages/files/files.impl.js +168 -0
  185. package/dist/src/storages/files/files.impl.js.map +1 -0
  186. package/dist/src/storages/files/files.js +20 -0
  187. package/dist/src/storages/files/files.js.map +1 -0
  188. package/dist/src/storages/files/filesPage.d.ts +28 -0
  189. package/dist/src/storages/files/filesPage.d.ts.map +1 -0
  190. package/dist/src/storages/files/filesPage.impl.d.ts +15 -0
  191. package/dist/src/storages/files/filesPage.impl.d.ts.map +1 -0
  192. package/dist/src/storages/files/filesPage.impl.js +38 -0
  193. package/dist/src/storages/files/filesPage.impl.js.map +1 -0
  194. package/dist/src/storages/files/filesPage.js +10 -0
  195. package/dist/src/storages/files/filesPage.js.map +1 -0
  196. package/dist/src/storages/groups/group.d.ts +63 -0
  197. package/dist/src/storages/groups/group.d.ts.map +1 -0
  198. package/dist/src/storages/groups/group.impl.d.ts +38 -0
  199. package/dist/src/storages/groups/group.impl.d.ts.map +1 -0
  200. package/dist/src/storages/groups/group.impl.js +210 -0
  201. package/dist/src/storages/groups/group.impl.js.map +1 -0
  202. package/dist/src/storages/groups/group.js +15 -0
  203. package/dist/src/storages/groups/group.js.map +1 -0
  204. package/dist/src/storages/groups/groups.d.ts +39 -0
  205. package/dist/src/storages/groups/groups.d.ts.map +1 -0
  206. package/dist/src/storages/groups/groups.impl.d.ts +30 -0
  207. package/dist/src/storages/groups/groups.impl.d.ts.map +1 -0
  208. package/dist/src/storages/groups/groups.impl.js +132 -0
  209. package/dist/src/storages/groups/groups.impl.js.map +1 -0
  210. package/dist/src/storages/groups/groups.js +20 -0
  211. package/dist/src/storages/groups/groups.js.map +1 -0
  212. package/dist/src/storages/organizations/organization.d.ts +95 -0
  213. package/dist/src/storages/organizations/organization.d.ts.map +1 -0
  214. package/dist/src/storages/organizations/organization.impl.d.ts +42 -0
  215. package/dist/src/storages/organizations/organization.impl.d.ts.map +1 -0
  216. package/dist/src/storages/organizations/organization.impl.js +240 -0
  217. package/dist/src/storages/organizations/organization.impl.js.map +1 -0
  218. package/dist/src/storages/organizations/organization.js +18 -0
  219. package/dist/src/storages/organizations/organization.js.map +1 -0
  220. package/dist/src/storages/organizations/organizations.d.ts +46 -0
  221. package/dist/src/storages/organizations/organizations.d.ts.map +1 -0
  222. package/dist/src/storages/organizations/organizations.impl.d.ts +38 -0
  223. package/dist/src/storages/organizations/organizations.impl.d.ts.map +1 -0
  224. package/dist/src/storages/organizations/organizations.impl.js +158 -0
  225. package/dist/src/storages/organizations/organizations.impl.js.map +1 -0
  226. package/dist/src/storages/organizations/organizations.js +20 -0
  227. package/dist/src/storages/organizations/organizations.js.map +1 -0
  228. package/dist/src/storages/user/userProfile.d.ts +54 -0
  229. package/dist/src/storages/user/userProfile.d.ts.map +1 -0
  230. package/dist/src/storages/user/userProfile.impl.d.ts +21 -0
  231. package/dist/src/storages/user/userProfile.impl.d.ts.map +1 -0
  232. package/dist/src/storages/user/userProfile.impl.js +114 -0
  233. package/dist/src/storages/user/userProfile.impl.js.map +1 -0
  234. package/dist/src/storages/user/userProfile.js +12 -0
  235. package/dist/src/storages/user/userProfile.js.map +1 -0
  236. package/dist/src/storages/workspaces/workspace.d.ts +44 -0
  237. package/dist/src/storages/workspaces/workspace.d.ts.map +1 -0
  238. package/dist/src/storages/workspaces/workspace.impl.d.ts +23 -0
  239. package/dist/src/storages/workspaces/workspace.impl.d.ts.map +1 -0
  240. package/dist/src/storages/workspaces/workspace.impl.js +98 -0
  241. package/dist/src/storages/workspaces/workspace.impl.js.map +1 -0
  242. package/dist/src/storages/workspaces/workspace.js +18 -0
  243. package/dist/src/storages/workspaces/workspace.js.map +1 -0
  244. package/dist/src/storages/workspaces/workspaces.d.ts +47 -0
  245. package/dist/src/storages/workspaces/workspaces.d.ts.map +1 -0
  246. package/dist/src/storages/workspaces/workspaces.impl.d.ts +33 -0
  247. package/dist/src/storages/workspaces/workspaces.impl.d.ts.map +1 -0
  248. package/dist/src/storages/workspaces/workspaces.impl.js +152 -0
  249. package/dist/src/storages/workspaces/workspaces.impl.js.map +1 -0
  250. package/dist/src/storages/workspaces/workspaces.js +19 -0
  251. package/dist/src/storages/workspaces/workspaces.js.map +1 -0
  252. package/dist/src/unitTest.d.ts +12 -0
  253. package/dist/src/unitTest.d.ts.map +1 -0
  254. package/dist/src/unitTest.js +44 -0
  255. package/dist/src/unitTest.js.map +1 -0
  256. package/dist/src/utils/browserUtils.d.ts +4 -0
  257. package/dist/src/utils/browserUtils.d.ts.map +1 -0
  258. package/dist/src/utils/browserUtils.js +64 -0
  259. package/dist/src/utils/browserUtils.js.map +1 -0
  260. package/dist/src/utils/request.d.ts +6 -0
  261. package/dist/src/utils/request.d.ts.map +1 -0
  262. package/dist/src/utils/request.js +3 -0
  263. package/dist/src/utils/request.js.map +1 -0
  264. package/dist/src/utils/utils.d.ts +3 -0
  265. package/dist/src/utils/utils.d.ts.map +1 -0
  266. package/dist/src/utils/utils.js +13 -0
  267. package/dist/src/utils/utils.js.map +1 -0
  268. package/index.d.ts +1 -0
  269. package/index.js +1 -0
  270. package/package.json +46 -5
  271. package/src/commands/deleteUserFullCommandHandler.ts +19 -0
  272. package/src/commands/startCommandHandler.ts +16 -5
  273. package/src/context.ts +4 -2
  274. package/src/credentials.ts +22 -0
  275. package/src/{appSdk.ts → dataIslandApp.ts} +9 -3
  276. package/src/disposable.ts +18 -5
  277. package/src/dto/accessGroupResponse.ts +19 -16
  278. package/src/dto/acquiringResponse.ts +45 -0
  279. package/src/dto/badRequestResponse.ts +6 -0
  280. package/src/dto/chatResponse.ts +59 -54
  281. package/src/dto/limitsResponse.ts +33 -0
  282. package/src/dto/statisticsResponse.ts +12 -0
  283. package/src/dto/userInfoResponse.ts +59 -2
  284. package/src/dto/workspacesResponse.ts +5 -3
  285. package/src/index.ts +46 -24
  286. package/src/internal/app.impl.ts +52 -10
  287. package/src/internal/createApp.impl.ts +4 -4
  288. package/src/internal/registry.ts +54 -6
  289. package/src/middleware.ts +2 -0
  290. package/src/services/acquiringService.ts +50 -0
  291. package/src/services/anonymousService.ts +43 -0
  292. package/src/services/commandService.ts +4 -2
  293. package/src/services/cookieService.ts +16 -0
  294. package/src/services/httpMethod.ts +1 -0
  295. package/src/services/middlewareService.ts +1 -0
  296. package/src/services/organizationService.ts +2 -2
  297. package/src/services/requestBuilder.ts +10 -8
  298. package/src/services/responseUtils.ts +12 -0
  299. package/src/services/rpcService.ts +1 -0
  300. package/src/services/userProfileService.ts +18 -4
  301. package/src/storages/chats/answer.impl.ts +160 -0
  302. package/src/storages/chats/answer.ts +53 -0
  303. package/src/storages/chats/chat.impl.ts +107 -0
  304. package/src/storages/chats/chat.ts +55 -0
  305. package/src/storages/chats/chats.impl.ts +204 -0
  306. package/src/storages/chats/chats.ts +53 -0
  307. package/src/storages/files/file.impl.ts +111 -0
  308. package/src/storages/files/file.ts +58 -0
  309. package/src/storages/{files.impl.ts → files/files.impl.ts} +67 -46
  310. package/src/storages/{files.ts → files/files.ts} +14 -7
  311. package/src/storages/files/filesPage.impl.ts +37 -0
  312. package/src/storages/{filesPage.ts → files/filesPage.ts} +6 -0
  313. package/src/storages/groups/group.impl.ts +276 -0
  314. package/src/storages/groups/group.ts +73 -0
  315. package/src/storages/groups/groups.impl.ts +175 -0
  316. package/src/storages/groups/groups.ts +45 -0
  317. package/src/storages/organizations/organization.impl.ts +357 -0
  318. package/src/storages/organizations/organization.ts +118 -0
  319. package/src/storages/{organizations.impl.ts → organizations/organizations.impl.ts} +31 -13
  320. package/src/storages/{organizations.ts → organizations/organizations.ts} +1 -1
  321. package/src/storages/user/userProfile.impl.ts +136 -0
  322. package/src/storages/user/userProfile.ts +69 -0
  323. package/src/storages/{workspace.impl.ts → workspaces/workspace.impl.ts} +27 -7
  324. package/src/storages/{workspace.ts → workspaces/workspace.ts} +8 -3
  325. package/src/storages/{workspaces.impl.ts → workspaces/workspaces.impl.ts} +27 -32
  326. package/src/storages/{workspaces.ts → workspaces/workspaces.ts} +6 -2
  327. package/src/unitTest.ts +14 -3
  328. package/src/utils/browserUtils.ts +68 -0
  329. package/src/utils/request.ts +6 -0
  330. package/src/utils/utils.ts +8 -0
  331. package/.browserslistrc +0 -5
  332. package/.editorconfig +0 -25
  333. package/.eslintrc.json +0 -44
  334. package/.github/workflows/publish-npm.yml +0 -28
  335. package/.prettierignore +0 -1
  336. package/.prettierrc +0 -11
  337. package/.yarnrc +0 -2
  338. package/babel.config.js +0 -6
  339. package/jest.config.ts +0 -199
  340. package/jest.setup.ts +0 -2
  341. package/src/storages/chat.ts +0 -21
  342. package/src/storages/chats.ts +0 -17
  343. package/src/storages/file.impl.ts +0 -69
  344. package/src/storages/file.ts +0 -28
  345. package/src/storages/groups.impl.ts +0 -337
  346. package/src/storages/groups.ts +0 -43
  347. package/src/storages/organization.impl.ts +0 -68
  348. package/src/storages/organization.ts +0 -33
  349. package/src/storages/userProfile.impl.ts +0 -56
  350. package/src/storages/userProfile.ts +0 -42
  351. package/test/commands.test.ts +0 -24
  352. package/test/data/test_file.pdf +0 -0
  353. package/test/disposable.test.ts +0 -39
  354. package/test/events.test.ts +0 -151
  355. package/test/files.test.ts +0 -52
  356. package/test/index.test.ts +0 -122
  357. package/test/organization.test.ts +0 -57
  358. package/test/registry.test.ts +0 -44
  359. package/test/services.test.ts +0 -56
  360. package/test/setup.ts +0 -54
  361. package/test/unitTest.test.ts +0 -21
  362. package/test/workspace.test.ts +0 -71
  363. package/tsconfig.json +0 -31
@@ -0,0 +1,204 @@
1
+ import { Context } from "../../context"
2
+ import { ChatDto, ChatListResponse } from "../../dto/chatResponse"
3
+ import { ResponseUtils } from "../../services/responseUtils"
4
+ import { RpcService } from "../../services/rpcService"
5
+ import { OrganizationImpl } from "../organizations/organization.impl"
6
+ import { OrganizationId } from "../organizations/organizations"
7
+ import { Chat } from "./chat"
8
+ import { ChatImpl } from "./chat.impl"
9
+ import { Chats, ChatsEvent } from "./chats"
10
+
11
+ export class ChatsImpl extends Chats {
12
+ private readonly _chats: Chat[] = []
13
+
14
+ constructor(
15
+ public readonly organization: OrganizationImpl,
16
+ private readonly context: Context
17
+ ) {
18
+ super()
19
+ }
20
+
21
+ async initFrom(organizationId: OrganizationId): Promise<void> {
22
+ // init chats from the server's response
23
+ const limit = 100
24
+ const page = 0
25
+ const response = await this.context
26
+ .resolve(RpcService)
27
+ ?.requestBuilder("api/v1/Chats/list")
28
+ .searchParam("organizationId", organizationId)
29
+ .searchParam("limit", limit.toString())
30
+ .searchParam("page", page.toString())
31
+ .sendGet()
32
+
33
+ // check response status
34
+ if (ResponseUtils.isFail(response)) {
35
+ await ResponseUtils.throwError(
36
+ `Chats list org id:${organizationId}, page:${page}, limit:${limit}, failed`,
37
+ response
38
+ )
39
+ }
40
+
41
+ // parse chats from the server's response
42
+ const chats = (await response!.json()) as ChatListResponse
43
+
44
+ // init chats
45
+ for (const cht of chats.chats) {
46
+ // create chat implementation
47
+ const chat = await new ChatImpl(this.context, this.organization).initFrom(cht)
48
+
49
+ // add chat to the collection
50
+ this._chats.push(chat)
51
+
52
+ // dispatch event
53
+ this.dispatch({
54
+ type: ChatsEvent.ADDED,
55
+ data: chat
56
+ })
57
+ }
58
+
59
+ }
60
+
61
+ get collection(): readonly Chat[] {
62
+ return this._chats
63
+ }
64
+
65
+ get(id: string): Chat {
66
+ return <Chat>this.tryGet(id)
67
+ }
68
+
69
+ tryGet(id: string): Chat | undefined {
70
+ return this._chats.find(chat => chat.id === id)
71
+ }
72
+
73
+ async create(model: string): Promise<Chat | undefined> {
74
+ if (model === undefined || model === null) {
75
+ throw new Error("Create chat, model is undefined or null")
76
+ }
77
+
78
+ if (model.length === 0) {
79
+ throw new Error("Create chat, model is empty")
80
+ }
81
+
82
+ // send create request to the server
83
+ const response = await this.context
84
+ .resolve(RpcService)
85
+ ?.requestBuilder("api/v1/Chats/workspaces")
86
+ .sendPostJson({ organizationId: this.organization.id, model: model })
87
+
88
+ // check response status
89
+ if (ResponseUtils.isFail(response)) {
90
+ if (await ResponseUtils.isLimitReached()){
91
+ return undefined
92
+ }
93
+
94
+ await ResponseUtils.throwError(`Failed to create chat, organization: ${this.organization.id}`, response)
95
+ }
96
+
97
+ // parse workspace from the server's response
98
+ const content = (await response!.json() as {
99
+ chat: ChatDto
100
+ }).chat as ChatDto
101
+
102
+ // create workspace implementation
103
+ const chat = new ChatImpl(this.context, this.organization)
104
+ await chat.initFrom(content)
105
+
106
+ // add chat to the collection
107
+ this._chats.push(chat)
108
+
109
+ // dispatch event
110
+ this.dispatch({
111
+ type: ChatsEvent.ADDED,
112
+ data: chat
113
+ })
114
+
115
+ return chat
116
+ }
117
+
118
+ async createWithFile(fileId: string): Promise<Chat | undefined> {
119
+ if (fileId === undefined || fileId === null) {
120
+ throw new Error("Create chat with file, id is undefined or null")
121
+ }
122
+ if (fileId.length === 0 || fileId.trim().length === 0) {
123
+ throw new Error("Create chat with file, id is empty")
124
+ }
125
+
126
+ // send create request to the server
127
+ const response = await this.context
128
+ .resolve(RpcService)
129
+ ?.requestBuilder("api/v1/Chats/file")
130
+ .sendPostJson({
131
+ organizationId: this.organization.id,
132
+ fileId: fileId,
133
+ model: "search"
134
+ })
135
+
136
+ // check response status
137
+ if (ResponseUtils.isFail(response)) {
138
+ if (await ResponseUtils.isLimitReached()){
139
+ return undefined
140
+ }
141
+
142
+ await ResponseUtils.throwError(`Failed to create chat, organization: ${this.organization.id}`, response)
143
+ }
144
+
145
+ // parse workspace from the server's response
146
+ const content = (await response!.json() as {
147
+ chat: ChatDto
148
+ }).chat as ChatDto
149
+
150
+ // create workspace implementation
151
+ const chat = new ChatImpl(this.context, this.organization)
152
+ await chat.initFrom(content)
153
+
154
+ // add chat to the collection
155
+ this._chats.push(chat)
156
+
157
+ // dispatch event
158
+ this.dispatch({
159
+ type: ChatsEvent.ADDED,
160
+ data: chat
161
+ })
162
+
163
+ return chat
164
+ }
165
+
166
+
167
+ async delete(id: string): Promise<void> {
168
+ // get chat by id
169
+ const chat = <ChatImpl>this.tryGet(id)
170
+
171
+ // check if chat is found
172
+ if (!chat) {
173
+ throw new Error(`Chat ${id} is not found, organization: ${this.organization.id}`)
174
+ }
175
+
176
+ // send delete request to the server
177
+ const response = await this.context
178
+ .resolve(RpcService)
179
+ ?.requestBuilder("api/v1/Chats")
180
+ .searchParam("id", id)
181
+ .sendDelete()
182
+
183
+ // check response status
184
+ if (ResponseUtils.isFail(response)) {
185
+ await ResponseUtils.throwError(
186
+ `Failed to delete chat: ${id}, organization: ${this.organization.id}`,
187
+ response
188
+ )
189
+ }
190
+
191
+ // remove chat from the collection
192
+ const index = this._chats.indexOf(<ChatImpl>chat)
193
+ if (index < 0) {
194
+ throw new Error(`Chat ${id} is not found, organization: ${this.organization.id}`)
195
+ }
196
+ this._chats.splice(index, 1)
197
+
198
+ // dispatch event
199
+ this.dispatch({
200
+ type: ChatsEvent.REMOVED,
201
+ data: chat
202
+ })
203
+ }
204
+ }
@@ -0,0 +1,53 @@
1
+ import { EventDispatcher } from "../../events"
2
+ import { Chat, ChatId } from "./chat"
3
+ import { Organization } from "../organizations/organization"
4
+
5
+ export enum ChatsEvent {
6
+ ADDED = "added",
7
+ REMOVED = "removed"
8
+ }
9
+
10
+ /**
11
+ * Chats storage.
12
+ */
13
+ export abstract class Chats extends EventDispatcher<ChatsEvent, Chat> {
14
+
15
+ /**
16
+ * Organization.
17
+ */
18
+ abstract get organization(): Organization
19
+
20
+ /**
21
+ * Chats list.
22
+ */
23
+ abstract get collection(): ReadonlyArray<Chat>
24
+
25
+ /**
26
+ * Create new chat.
27
+ */
28
+ abstract create(model: string): Promise<Chat | undefined>
29
+
30
+ /**
31
+ * Create chat with specific file
32
+ * @param fileId
33
+ */
34
+ abstract createWithFile(fileId: string): Promise<Chat | undefined>
35
+
36
+ /**
37
+ * Get chat by id.
38
+ * @param id
39
+ */
40
+ abstract get(id: ChatId): Chat
41
+
42
+ /**
43
+ * Try to get chat by id.
44
+ * @param id
45
+ */
46
+ abstract tryGet(id: ChatId): Chat | undefined
47
+
48
+ /**
49
+ * Delete chat.
50
+ * @param id
51
+ */
52
+ abstract delete(id: ChatId): Promise<void>
53
+ }
@@ -0,0 +1,111 @@
1
+ import { Context } from "../../context"
2
+ import { Disposable } from "../../disposable"
3
+ import { FileDto, FileProgressDto } from "../../dto/workspacesResponse"
4
+ import { RpcService } from "../../services/rpcService"
5
+ import { ResponseUtils } from "../../services/responseUtils"
6
+ import { File, FileStatus } from "./file"
7
+ import { FilesEvent } from "./files"
8
+ import { isNullOrUndefined } from "../../utils/utils"
9
+
10
+ export class FileImpl extends File implements Disposable {
11
+ private _isDisposed: boolean = false
12
+ private _content?: FileDto
13
+ private _progress?: FileProgressDto
14
+
15
+ constructor(private readonly context: Context) {
16
+ super()
17
+ }
18
+
19
+ async initFrom(file: FileDto): Promise<File> {
20
+ this._content = file
21
+
22
+ await this.updateStatus()
23
+
24
+ return this
25
+ }
26
+
27
+ get isDisposed(): boolean {
28
+ return this._isDisposed
29
+ }
30
+
31
+ dispose(): void {
32
+ this._isDisposed = true
33
+ }
34
+
35
+ get id(): string {
36
+ return <string>this._content?.id
37
+ }
38
+
39
+ get name(): string {
40
+ return <string>this._content?.name
41
+ }
42
+
43
+ get createdAt(): number {
44
+ return <number>this._content?.createdAt
45
+ }
46
+
47
+ get modifiedAt(): number {
48
+ return <number>this._content?.modifiedAt
49
+ }
50
+
51
+ get url(): string {
52
+ return <string>this._content?.url
53
+ }
54
+
55
+ get previewUrl(): string {
56
+ return <string>this._content?.previewUrl
57
+ }
58
+
59
+ get progress(): FileProgressDto {
60
+ return <FileProgressDto>this._progress
61
+ }
62
+
63
+ get status(): FileStatus {
64
+
65
+ if (
66
+ isNullOrUndefined(this._progress) || isNullOrUndefined(this._progress.success)
67
+ || (this._progress.success && this._progress.completed_parts_count < this._progress.file_parts_count)) {
68
+ return FileStatus.UPLOADING
69
+ } else if (this._progress.success) {
70
+ return FileStatus.SUCCESS
71
+ } else {
72
+ return FileStatus.FAILED
73
+ }
74
+ }
75
+
76
+ public fetchAfter() {
77
+ if (this.status === FileStatus.UPLOADING) {
78
+ setTimeout(async () => await this.updateStatus(), 500)
79
+ }
80
+ }
81
+
82
+ async updateStatus(): Promise<void> {
83
+ const response = await this.context
84
+ .resolve(RpcService)
85
+ ?.requestBuilder("api/v1/Files/fetch")
86
+ .searchParam("id", this.id)
87
+ .sendGet()
88
+
89
+ if (ResponseUtils.isFail(response)) {
90
+ await ResponseUtils.throwError(`Failed to get file ${this.id}`, response)
91
+ }
92
+
93
+ const prev_progress = this._progress
94
+ this._progress = (await response!.json() as {
95
+ progress: FileProgressDto
96
+ }).progress as FileProgressDto
97
+
98
+ if (isNullOrUndefined(prev_progress) ||
99
+ (!isNullOrUndefined(this.progress.success) && this.progress.completed_parts_count > prev_progress.completed_parts_count) ||
100
+ this.status === FileStatus.SUCCESS ||
101
+ this.status === FileStatus.FAILED) {
102
+ // dispatch event, file updated
103
+ this.dispatch({
104
+ type: FilesEvent.UPDATED,
105
+ data: this
106
+ })
107
+ }
108
+
109
+ this.fetchAfter()
110
+ }
111
+ }
@@ -0,0 +1,58 @@
1
+ import { FileProgressDto } from "../../dto/workspacesResponse"
2
+ import { EventDispatcher } from "../../events"
3
+ import { FilesEvent } from "./files"
4
+
5
+ export type FileId = string
6
+
7
+ export enum FileStatus {
8
+ UPLOADING = "uploading",
9
+ SUCCESS = "success",
10
+ FAILED = "failed"
11
+ }
12
+
13
+ /**
14
+ * File.
15
+ */
16
+ export abstract class File extends EventDispatcher<
17
+ FilesEvent,
18
+ File
19
+ > {
20
+ /**
21
+ * File id.
22
+ */
23
+ abstract get id(): FileId
24
+
25
+ /**
26
+ * File name.
27
+ */
28
+ abstract get name(): string
29
+
30
+ /**
31
+ * File date added.
32
+ */
33
+ abstract get createdAt(): number
34
+
35
+ /**
36
+ * File date modified.
37
+ */
38
+ abstract get modifiedAt(): number
39
+ /**
40
+ * File uploading progress
41
+ */
42
+ abstract get progress(): FileProgressDto
43
+
44
+ /**
45
+ * File uploading status
46
+ */
47
+ abstract get status(): FileStatus
48
+
49
+ /**
50
+ * Get temporary url.
51
+ */
52
+ abstract get url(): string
53
+
54
+ /**
55
+ * Get temporary url.
56
+ */
57
+ abstract get previewUrl(): string
58
+ }
@@ -1,34 +1,14 @@
1
- import { Context } from "../context"
2
- import { Disposable } from "../disposable"
3
- import { FileDto, FileListResponse } from "../dto/workspacesResponse"
4
- import { RpcService } from "../services/rpcService"
1
+ import { Context } from "../../context"
2
+ import { FileDto, FileListResponse } from "../../dto/workspacesResponse"
3
+ import { RpcService } from "../../services/rpcService"
5
4
  import { FileImpl } from "./file.impl"
6
5
  import { Files, FilesEvent, UploadFile } from "./files"
7
- import { WorkspaceImpl } from "./workspace.impl"
8
- import { ResponseUtils } from "../services/responseUtils"
6
+ import { WorkspaceImpl } from "../workspaces/workspace.impl"
7
+ import { ResponseUtils } from "../../services/responseUtils"
9
8
  import { File } from "./file"
10
9
  import { FilesPage } from "./filesPage"
11
-
12
- export class FilesPageImpl extends FilesPage implements Disposable {
13
- private _isDisposed: boolean = false
14
-
15
- public files: File[] = []
16
- public total: number = 0
17
- public filesPerPage: number = 0
18
- public page: number = 0
19
-
20
- get pages(): number {
21
- return Math.ceil(Math.max(this.total / this.filesPerPage, 1.0))
22
- }
23
-
24
- get isDisposed(): boolean {
25
- return this._isDisposed
26
- }
27
-
28
- dispose(): void {
29
- this._isDisposed = true
30
- }
31
- }
10
+ import { FilesPageImpl } from "./filesPage.impl"
11
+ // import { FormData } from "../../utils/request"
32
12
 
33
13
  export class FilesImpl extends Files {
34
14
  constructor(
@@ -41,12 +21,25 @@ export class FilesImpl extends Files {
41
21
  // Object used as files page data, returned by "query"
42
22
  public filesList?: FilesPage
43
23
 
44
- async upload(file: any): Promise<File> {
45
- return await this.internalUpload(file)
24
+ async upload(files: UploadFile[]): Promise<File[]> {
25
+ const loaded_files = []
26
+ for (const file of files) {
27
+ const loaded_file = await this.internalUpload(file)
28
+ if (loaded_file != undefined){
29
+ loaded_files.push(loaded_file)
30
+ }
31
+ }
32
+ return loaded_files
33
+ }
34
+
35
+ async get(fileId: string): Promise<File>{
36
+ return await this.internalGetFile(fileId)
46
37
  }
47
38
 
48
- async delete(id: string): Promise<void> {
49
- return await this.internalDeleteFile(id)
39
+ async delete(ids: string[]): Promise<void> {
40
+ for (const id of ids) {
41
+ await this.internalDeleteFile(id)
42
+ }
50
43
  }
51
44
 
52
45
  async query(query: string, page: number, limit: number): Promise<FilesPage> {
@@ -57,8 +50,39 @@ export class FilesImpl extends Files {
57
50
  // INTERNALS
58
51
  //----------------------------------------------------------------------------
59
52
 
53
+
54
+ async internalGetFile(id: string): Promise<File>{
55
+ if (id === undefined || id === null) {
56
+ throw new Error("File get, id is undefined or null")
57
+ }
58
+ if (id.length === 0 || id.trim().length === 0) {
59
+ throw new Error("File get, id is empty")
60
+ }
61
+
62
+ const response = await this.context
63
+ .resolve(RpcService)
64
+ ?.requestBuilder("api/v1/Files")
65
+ .searchParam("id", id)
66
+ .sendGet()
67
+
68
+ if (ResponseUtils.isFail(response)) {
69
+ await ResponseUtils.throwError(
70
+ `Failed to get file ${id}`,
71
+ response
72
+ )
73
+ }
74
+
75
+ // parse file from the server's response
76
+ const result = (await response!.json() as { file: FileDto }).file as FileDto
77
+
78
+ // create file implementation
79
+ const fileImpl = new FileImpl(this.context)
80
+
81
+ return await fileImpl.initFrom(result)
82
+ }
83
+
60
84
  /**
61
- * Delete organization.
85
+ * Delete file.
62
86
  * @param id
63
87
  */
64
88
  async internalDeleteFile(id: string): Promise<void> {
@@ -74,13 +98,14 @@ export class FilesImpl extends Files {
74
98
  ?.requestBuilder("/api/v1/Files")
75
99
  .searchParam("id", id)
76
100
  .sendDelete()
101
+
77
102
  if (ResponseUtils.isFail(response)) {
78
103
  await ResponseUtils.throwError(`File ${id} delete, failed`, response)
79
104
  }
80
105
  const file = <FileImpl>this.filesList!.files.find(f => f.id === id)
81
106
  const index = this.filesList!.files.indexOf(file)
82
107
  if (index < 0) {
83
- throw new Error("Organization delete, index is not found")
108
+ throw new Error("File delete, index is not found")
84
109
  }
85
110
 
86
111
  // remove file from collection
@@ -122,7 +147,6 @@ export class FilesImpl extends Files {
122
147
  const response = await this.context
123
148
  .resolve(RpcService)
124
149
  ?.requestBuilder("api/v1/Files/list")
125
-
126
150
  .searchParam("workspaceId", this.workspace.id)
127
151
  .searchParam("organizationId", this.workspace.organization.id)
128
152
  .searchParam("query", query)
@@ -151,16 +175,10 @@ export class FilesImpl extends Files {
151
175
  for (const fl of files.files) {
152
176
 
153
177
  // create file implementation
154
- const file = new FileImpl(this.context).initFrom(fl)
178
+ const file = await new FileImpl(this.context).initFrom(fl)
155
179
 
156
180
  // add file to the collection
157
181
  filesList.files.push(file)
158
-
159
- // dispatch event, file added
160
- this.dispatch({
161
- type: FilesEvent.ADDED,
162
- data: file
163
- })
164
182
  }
165
183
 
166
184
  // set files list
@@ -169,7 +187,7 @@ export class FilesImpl extends Files {
169
187
  return filesList
170
188
  }
171
189
 
172
- async internalUpload(file: UploadFile): Promise<File> {
190
+ async internalUpload(file: UploadFile): Promise<File | undefined> {
173
191
  // check file
174
192
  if (file === undefined || file === null) {
175
193
  throw new Error("File upload, file is undefined or null")
@@ -190,17 +208,20 @@ export class FilesImpl extends Files {
190
208
 
191
209
  // check response status
192
210
  if (ResponseUtils.isFail(response)) {
211
+ if (await ResponseUtils.isLimitReached()){
212
+ return undefined
213
+ }
214
+
193
215
  await ResponseUtils.throwError(`File upload ${file.name}`, response)
194
216
  }
195
217
 
196
218
  // parse file from the server's response
197
- const result = (await response!.json()).file as FileDto
219
+ const result = (await response!.json() as { file: FileDto }).file as FileDto
198
220
 
199
221
  // create file implementation
200
- const fileImpl = new FileImpl(this.context).initFrom(result)
222
+ const fileImpl = new FileImpl(this.context)
201
223
 
202
- // TODO: why is this here?
203
- this.filesList?.files.push(fileImpl)
224
+ await fileImpl.initFrom(result)
204
225
 
205
226
  // dispatch event, file added
206
227
  this.dispatch({
@@ -1,4 +1,4 @@
1
- import { EventDispatcher } from "../events"
1
+ import { EventDispatcher } from "../../events"
2
2
  import { File, FileId } from "./file"
3
3
  import { FilesPage } from "./filesPage"
4
4
 
@@ -7,7 +7,8 @@ import { FilesPage } from "./filesPage"
7
7
  */
8
8
  export enum FilesEvent {
9
9
  ADDED = "added",
10
- REMOVED = "removed"
10
+ REMOVED = "removed",
11
+ UPDATED = "updated"
11
12
  }
12
13
 
13
14
  /**
@@ -20,15 +21,21 @@ export type UploadFile = globalThis.File
20
21
  */
21
22
  export abstract class Files extends EventDispatcher<FilesEvent, File> {
22
23
  /**
23
- * Get file by id.
24
+ * Upload file.
24
25
  */
25
- abstract upload(file: UploadFile): Promise<File>
26
+ abstract upload(files: UploadFile[]): Promise<File[]>
26
27
 
27
28
  /**
28
- * Delete file.
29
- * @param id
29
+ * Get file by ID
30
+ * @param fileId
30
31
  */
31
- abstract delete(id: FileId): Promise<void>
32
+ abstract get(fileId: FileId): Promise<File>
33
+
34
+ /**
35
+ * Delete files.
36
+ * @param ids
37
+ */
38
+ abstract delete(ids: FileId[]): Promise<void>
32
39
 
33
40
  /**
34
41
  * Query files.
@@ -0,0 +1,37 @@
1
+ import { FilesPage } from "./filesPage"
2
+ import { Disposable } from "../../disposable"
3
+ import { File } from "./file"
4
+
5
+ export class FilesPageImpl extends FilesPage implements Disposable {
6
+ private _isDisposed: boolean = false
7
+
8
+ public files: File[] = []
9
+ public total: number = 0
10
+ public filesPerPage: number = 0
11
+ public page: number = 0
12
+
13
+ get pages(): number {
14
+ return Math.ceil(Math.max(this.total / this.filesPerPage, 1.0))
15
+ }
16
+
17
+ get isDisposed(): boolean {
18
+ return this._isDisposed
19
+ }
20
+
21
+ dispose(): void {
22
+ this._isDisposed = true
23
+ }
24
+
25
+ equals(other?: FilesPage | null): boolean {
26
+ if (other === undefined) return false
27
+ if (other === null) return false
28
+ if (other === this) return true
29
+ return (
30
+ other.pages === this.pages &&
31
+ other.total === this.total &&
32
+ other.page === this.page &&
33
+ (other.files === this.files ||
34
+ other.files.every((file, index) => file.id === this.files[index].id))
35
+ )
36
+ }
37
+ }
@@ -24,4 +24,10 @@ export abstract class FilesPage {
24
24
  * Get current page.
25
25
  */
26
26
  abstract get page(): number
27
+
28
+ /**
29
+ * Equals.
30
+ * @param other
31
+ */
32
+ abstract equals(other?: FilesPage | null): boolean
27
33
  }