@neuralinnovations/dataisland-sdk 0.0.1-dev3 → 0.0.1-dev31

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 (329) hide show
  1. package/LICENSE +201 -0
  2. package/README.md +294 -1
  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 +50 -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 +27 -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/chatResponse.d.ts +81 -0
  41. package/dist/src/dto/chatResponse.d.ts.map +1 -0
  42. package/dist/src/dto/chatResponse.js +45 -0
  43. package/dist/src/dto/chatResponse.js.map +1 -0
  44. package/dist/src/dto/userInfoResponse.d.ts +43 -0
  45. package/dist/src/dto/userInfoResponse.d.ts.map +1 -0
  46. package/dist/src/dto/userInfoResponse.js +3 -0
  47. package/dist/src/dto/userInfoResponse.js.map +1 -0
  48. package/dist/src/dto/workspacesResponse.d.ts +43 -0
  49. package/dist/src/dto/workspacesResponse.d.ts.map +1 -0
  50. package/dist/src/dto/workspacesResponse.js +3 -0
  51. package/dist/src/dto/workspacesResponse.js.map +1 -0
  52. package/dist/src/events.d.ts +17 -0
  53. package/dist/src/events.d.ts.map +1 -0
  54. package/dist/src/events.js +52 -0
  55. package/dist/src/events.js.map +1 -0
  56. package/dist/src/index.d.ts +65 -0
  57. package/dist/src/index.d.ts.map +1 -0
  58. package/dist/src/index.js +110 -0
  59. package/dist/src/index.js.map +1 -0
  60. package/dist/src/internal/app.impl.d.ts +28 -0
  61. package/dist/src/internal/app.impl.d.ts.map +1 -0
  62. package/dist/src/internal/app.impl.js +173 -0
  63. package/dist/src/internal/app.impl.js.map +1 -0
  64. package/dist/src/internal/appBuilder.impl.d.ts +27 -0
  65. package/dist/src/internal/appBuilder.impl.d.ts.map +1 -0
  66. package/dist/src/internal/appBuilder.impl.js +71 -0
  67. package/dist/src/internal/appBuilder.impl.js.map +1 -0
  68. package/dist/src/internal/createApp.impl.d.ts +4 -0
  69. package/dist/src/internal/createApp.impl.d.ts.map +1 -0
  70. package/dist/src/internal/createApp.impl.js +11 -0
  71. package/dist/src/internal/createApp.impl.js.map +1 -0
  72. package/dist/src/internal/registry.d.ts +66 -0
  73. package/dist/src/internal/registry.d.ts.map +1 -0
  74. package/dist/src/internal/registry.js +114 -0
  75. package/dist/src/internal/registry.js.map +1 -0
  76. package/dist/src/middleware.d.ts +6 -0
  77. package/dist/src/middleware.d.ts.map +1 -0
  78. package/dist/src/middleware.js +3 -0
  79. package/dist/src/middleware.js.map +1 -0
  80. package/dist/src/services/anonymousService.d.ts +8 -0
  81. package/dist/src/services/anonymousService.d.ts.map +1 -0
  82. package/dist/src/services/anonymousService.js +41 -0
  83. package/dist/src/services/anonymousService.js.map +1 -0
  84. package/dist/src/services/commandService.d.ts +18 -0
  85. package/dist/src/services/commandService.d.ts.map +1 -0
  86. package/dist/src/services/commandService.js +40 -0
  87. package/dist/src/services/commandService.js.map +1 -0
  88. package/dist/src/services/cookieService.d.ts +7 -0
  89. package/dist/src/services/cookieService.d.ts.map +1 -0
  90. package/dist/src/services/cookieService.js +18 -0
  91. package/dist/src/services/cookieService.js.map +1 -0
  92. package/dist/src/services/credentialService.d.ts +9 -0
  93. package/dist/src/services/credentialService.d.ts.map +1 -0
  94. package/dist/src/services/credentialService.js +26 -0
  95. package/dist/src/services/credentialService.js.map +1 -0
  96. package/dist/src/services/httpMethod.d.ts +2 -0
  97. package/dist/src/services/httpMethod.d.ts.map +1 -0
  98. package/dist/src/services/httpMethod.js +3 -0
  99. package/dist/src/services/httpMethod.js.map +1 -0
  100. package/dist/src/services/middlewareService.d.ts +10 -0
  101. package/dist/src/services/middlewareService.d.ts.map +1 -0
  102. package/dist/src/services/middlewareService.js +34 -0
  103. package/dist/src/services/middlewareService.js.map +1 -0
  104. package/dist/src/services/organizationService.d.ts +10 -0
  105. package/dist/src/services/organizationService.d.ts.map +1 -0
  106. package/dist/src/services/organizationService.js +19 -0
  107. package/dist/src/services/organizationService.js.map +1 -0
  108. package/dist/src/services/requestBuilder.d.ts +17 -0
  109. package/dist/src/services/requestBuilder.d.ts.map +1 -0
  110. package/dist/src/services/requestBuilder.js +105 -0
  111. package/dist/src/services/requestBuilder.js.map +1 -0
  112. package/dist/src/services/responseUtils.d.ts +7 -0
  113. package/dist/src/services/responseUtils.d.ts.map +1 -0
  114. package/dist/src/services/responseUtils.js +32 -0
  115. package/dist/src/services/responseUtils.js.map +1 -0
  116. package/dist/src/services/rpcService.d.ts +77 -0
  117. package/dist/src/services/rpcService.d.ts.map +1 -0
  118. package/dist/src/services/rpcService.js +125 -0
  119. package/dist/src/services/rpcService.js.map +1 -0
  120. package/dist/src/services/service.d.ts +21 -0
  121. package/dist/src/services/service.d.ts.map +1 -0
  122. package/dist/src/services/service.js +41 -0
  123. package/dist/src/services/service.js.map +1 -0
  124. package/dist/src/services/userProfileService.d.ts +9 -0
  125. package/dist/src/services/userProfileService.d.ts.map +1 -0
  126. package/dist/src/services/userProfileService.js +43 -0
  127. package/dist/src/services/userProfileService.js.map +1 -0
  128. package/dist/src/storages/chats/answer.d.ts +41 -0
  129. package/dist/src/storages/chats/answer.d.ts.map +1 -0
  130. package/dist/src/storages/chats/answer.impl.d.ts +29 -0
  131. package/dist/src/storages/chats/answer.impl.d.ts.map +1 -0
  132. package/dist/src/storages/chats/answer.impl.js +116 -0
  133. package/dist/src/storages/chats/answer.impl.js.map +1 -0
  134. package/dist/src/storages/chats/answer.js +15 -0
  135. package/dist/src/storages/chats/answer.js.map +1 -0
  136. package/dist/src/storages/chats/chat.d.ts +35 -0
  137. package/dist/src/storages/chats/chat.d.ts.map +1 -0
  138. package/dist/src/storages/chats/chat.impl.d.ts +23 -0
  139. package/dist/src/storages/chats/chat.impl.d.ts.map +1 -0
  140. package/dist/src/storages/chats/chat.impl.js +74 -0
  141. package/dist/src/storages/chats/chat.impl.js.map +1 -0
  142. package/dist/src/storages/chats/chat.js +12 -0
  143. package/dist/src/storages/chats/chat.js.map +1 -0
  144. package/dist/src/storages/chats/chats.d.ts +40 -0
  145. package/dist/src/storages/chats/chats.d.ts.map +1 -0
  146. package/dist/src/storages/chats/chats.impl.d.ts +18 -0
  147. package/dist/src/storages/chats/chats.impl.d.ts.map +1 -0
  148. package/dist/src/storages/chats/chats.impl.js +102 -0
  149. package/dist/src/storages/chats/chats.impl.js.map +1 -0
  150. package/dist/src/storages/chats/chats.js +16 -0
  151. package/dist/src/storages/chats/chats.js.map +1 -0
  152. package/dist/src/storages/files/file.d.ts +39 -0
  153. package/dist/src/storages/files/file.d.ts.map +1 -0
  154. package/dist/src/storages/files/file.impl.d.ts +23 -0
  155. package/dist/src/storages/files/file.impl.d.ts.map +1 -0
  156. package/dist/src/storages/files/file.impl.js +89 -0
  157. package/dist/src/storages/files/file.impl.js.map +1 -0
  158. package/dist/src/storages/files/file.js +17 -0
  159. package/dist/src/storages/files/file.js.map +1 -0
  160. package/dist/src/storages/files/files.d.ts +34 -0
  161. package/dist/src/storages/files/files.d.ts.map +1 -0
  162. package/dist/src/storages/files/files.impl.d.ts +22 -0
  163. package/dist/src/storages/files/files.impl.d.ts.map +1 -0
  164. package/dist/src/storages/files/files.impl.js +142 -0
  165. package/dist/src/storages/files/files.impl.js.map +1 -0
  166. package/dist/src/storages/files/files.js +20 -0
  167. package/dist/src/storages/files/files.js.map +1 -0
  168. package/dist/src/storages/files/filesPage.d.ts +28 -0
  169. package/dist/src/storages/files/filesPage.d.ts.map +1 -0
  170. package/dist/src/storages/files/filesPage.impl.d.ts +15 -0
  171. package/dist/src/storages/files/filesPage.impl.d.ts.map +1 -0
  172. package/dist/src/storages/files/filesPage.impl.js +38 -0
  173. package/dist/src/storages/files/filesPage.impl.js.map +1 -0
  174. package/dist/src/storages/files/filesPage.js +10 -0
  175. package/dist/src/storages/files/filesPage.js.map +1 -0
  176. package/dist/src/storages/groups/group.d.ts +63 -0
  177. package/dist/src/storages/groups/group.d.ts.map +1 -0
  178. package/dist/src/storages/groups/group.impl.d.ts +38 -0
  179. package/dist/src/storages/groups/group.impl.d.ts.map +1 -0
  180. package/dist/src/storages/groups/group.impl.js +210 -0
  181. package/dist/src/storages/groups/group.impl.js.map +1 -0
  182. package/dist/src/storages/groups/group.js +15 -0
  183. package/dist/src/storages/groups/group.js.map +1 -0
  184. package/dist/src/storages/groups/groups.d.ts +39 -0
  185. package/dist/src/storages/groups/groups.d.ts.map +1 -0
  186. package/dist/src/storages/groups/groups.impl.d.ts +30 -0
  187. package/dist/src/storages/groups/groups.impl.d.ts.map +1 -0
  188. package/dist/src/storages/groups/groups.impl.js +132 -0
  189. package/dist/src/storages/groups/groups.impl.js.map +1 -0
  190. package/dist/src/storages/groups/groups.js +20 -0
  191. package/dist/src/storages/groups/groups.js.map +1 -0
  192. package/dist/src/storages/organizations/organization.d.ts +55 -0
  193. package/dist/src/storages/organizations/organization.d.ts.map +1 -0
  194. package/dist/src/storages/organizations/organization.impl.d.ts +32 -0
  195. package/dist/src/storages/organizations/organization.impl.d.ts.map +1 -0
  196. package/dist/src/storages/organizations/organization.impl.js +120 -0
  197. package/dist/src/storages/organizations/organization.impl.js.map +1 -0
  198. package/dist/src/storages/organizations/organization.js +18 -0
  199. package/dist/src/storages/organizations/organization.js.map +1 -0
  200. package/dist/src/storages/organizations/organizations.d.ts +46 -0
  201. package/dist/src/storages/organizations/organizations.d.ts.map +1 -0
  202. package/dist/src/storages/organizations/organizations.impl.d.ts +38 -0
  203. package/dist/src/storages/organizations/organizations.impl.d.ts.map +1 -0
  204. package/dist/src/storages/organizations/organizations.impl.js +157 -0
  205. package/dist/src/storages/organizations/organizations.impl.js.map +1 -0
  206. package/dist/src/storages/organizations/organizations.js +20 -0
  207. package/dist/src/storages/organizations/organizations.js.map +1 -0
  208. package/dist/src/storages/user/userProfile.d.ts +36 -0
  209. package/dist/src/storages/user/userProfile.d.ts.map +1 -0
  210. package/dist/src/storages/user/userProfile.impl.d.ts +14 -0
  211. package/dist/src/storages/user/userProfile.impl.d.ts.map +1 -0
  212. package/dist/src/storages/user/userProfile.impl.js +57 -0
  213. package/dist/src/storages/user/userProfile.impl.js.map +1 -0
  214. package/dist/src/storages/user/userProfile.js +12 -0
  215. package/dist/src/storages/user/userProfile.js.map +1 -0
  216. package/dist/src/storages/workspaces/workspace.d.ts +44 -0
  217. package/dist/src/storages/workspaces/workspace.d.ts.map +1 -0
  218. package/dist/src/storages/workspaces/workspace.impl.d.ts +23 -0
  219. package/dist/src/storages/workspaces/workspace.impl.d.ts.map +1 -0
  220. package/dist/src/storages/workspaces/workspace.impl.js +98 -0
  221. package/dist/src/storages/workspaces/workspace.impl.js.map +1 -0
  222. package/dist/src/storages/workspaces/workspace.js +18 -0
  223. package/dist/src/storages/workspaces/workspace.js.map +1 -0
  224. package/dist/src/storages/workspaces/workspaces.d.ts +47 -0
  225. package/dist/src/storages/workspaces/workspaces.d.ts.map +1 -0
  226. package/dist/src/storages/workspaces/workspaces.impl.d.ts +33 -0
  227. package/dist/src/storages/workspaces/workspaces.impl.d.ts.map +1 -0
  228. package/dist/src/storages/workspaces/workspaces.impl.js +159 -0
  229. package/dist/src/storages/workspaces/workspaces.impl.js.map +1 -0
  230. package/dist/src/storages/workspaces/workspaces.js +19 -0
  231. package/dist/src/storages/workspaces/workspaces.js.map +1 -0
  232. package/dist/src/unitTest.d.ts +12 -0
  233. package/dist/src/unitTest.d.ts.map +1 -0
  234. package/dist/src/unitTest.js +44 -0
  235. package/dist/src/unitTest.js.map +1 -0
  236. package/dist/src/utils/browserUtils.d.ts +4 -0
  237. package/dist/src/utils/browserUtils.d.ts.map +1 -0
  238. package/dist/src/utils/browserUtils.js +68 -0
  239. package/dist/src/utils/browserUtils.js.map +1 -0
  240. package/dist/src/utils/request.d.ts +6 -0
  241. package/dist/src/utils/request.d.ts.map +1 -0
  242. package/dist/src/utils/request.js +3 -0
  243. package/dist/src/utils/request.js.map +1 -0
  244. package/index.d.ts +1 -0
  245. package/index.js +1 -0
  246. package/package.json +46 -5
  247. package/src/commands/deleteUserFullCommandHandler.ts +19 -0
  248. package/src/commands/startCommandHandler.ts +16 -5
  249. package/src/context.ts +4 -2
  250. package/src/credentials.ts +22 -0
  251. package/src/{appSdk.ts → dataIslandApp.ts} +3 -3
  252. package/src/disposable.ts +20 -8
  253. package/src/dto/accessGroupResponse.ts +15 -16
  254. package/src/dto/chatResponse.ts +57 -54
  255. package/src/dto/userInfoResponse.ts +5 -2
  256. package/src/dto/workspacesResponse.ts +3 -3
  257. package/src/events.ts +12 -12
  258. package/src/index.ts +45 -10
  259. package/src/internal/app.impl.ts +47 -17
  260. package/src/internal/createApp.impl.ts +4 -4
  261. package/src/internal/registry.ts +54 -6
  262. package/src/middleware.ts +2 -0
  263. package/src/services/anonymousService.ts +43 -0
  264. package/src/services/commandService.ts +4 -2
  265. package/src/services/cookieService.ts +16 -0
  266. package/src/services/httpMethod.ts +1 -0
  267. package/src/services/middlewareService.ts +2 -1
  268. package/src/services/organizationService.ts +2 -2
  269. package/src/services/requestBuilder.ts +42 -15
  270. package/src/services/responseUtils.ts +2 -0
  271. package/src/services/rpcService.ts +24 -6
  272. package/src/services/service.ts +7 -5
  273. package/src/services/userProfileService.ts +16 -2
  274. package/src/storages/chats/answer.impl.ts +160 -0
  275. package/src/storages/chats/answer.ts +53 -0
  276. package/src/storages/chats/chat.impl.ts +95 -0
  277. package/src/storages/chats/chat.ts +45 -0
  278. package/src/storages/chats/chats.impl.ts +144 -0
  279. package/src/storages/chats/chats.ts +47 -0
  280. package/src/storages/files/file.impl.ts +113 -0
  281. package/src/storages/files/file.ts +49 -0
  282. package/src/storages/{files.impl.ts → files/files.impl.ts} +63 -61
  283. package/src/storages/files/files.ts +39 -0
  284. package/src/storages/files/filesPage.impl.ts +37 -0
  285. package/src/storages/files/filesPage.ts +33 -0
  286. package/src/storages/groups/group.impl.ts +276 -0
  287. package/src/storages/groups/group.ts +73 -0
  288. package/src/storages/groups/groups.impl.ts +175 -0
  289. package/src/storages/groups/groups.ts +45 -0
  290. package/src/storages/organizations/organization.impl.ts +165 -0
  291. package/src/storages/organizations/organization.ts +67 -0
  292. package/src/storages/{organizations.impl.ts → organizations/organizations.impl.ts} +30 -13
  293. package/src/storages/{organizations.ts → organizations/organizations.ts} +1 -1
  294. package/src/storages/{userProfile.impl.ts → user/userProfile.impl.ts} +8 -1
  295. package/src/storages/{userProfile.ts → user/userProfile.ts} +6 -1
  296. package/src/storages/{workspace.impl.ts → workspaces/workspace.impl.ts} +28 -8
  297. package/src/storages/{workspace.ts → workspaces/workspace.ts} +13 -2
  298. package/src/storages/{workspaces.impl.ts → workspaces/workspaces.impl.ts} +18 -13
  299. package/src/storages/{workspaces.ts → workspaces/workspaces.ts} +6 -2
  300. package/src/unitTest.ts +14 -3
  301. package/src/utils/browserUtils.ts +72 -0
  302. package/src/utils/request.ts +6 -0
  303. package/.browserslistrc +0 -5
  304. package/.editorconfig +0 -25
  305. package/.eslintrc.json +0 -44
  306. package/.github/workflows/publish-npm.yml +0 -28
  307. package/.prettierignore +0 -1
  308. package/.prettierrc +0 -11
  309. package/.yarnrc +0 -2
  310. package/babel.config.js +0 -6
  311. package/jest.config.ts +0 -199
  312. package/jest.setup.ts +0 -2
  313. package/src/storages/chat.ts +0 -37
  314. package/src/storages/file.impl.ts +0 -68
  315. package/src/storages/files.ts +0 -67
  316. package/src/storages/groups.impl.ts +0 -337
  317. package/src/storages/groups.ts +0 -43
  318. package/src/storages/organization.impl.ts +0 -68
  319. package/src/storages/organization.ts +0 -33
  320. package/test/commands.test.ts +0 -24
  321. package/test/disposable.test.ts +0 -39
  322. package/test/events.test.ts +0 -151
  323. package/test/index.test.ts +0 -225
  324. package/test/registry.test.ts +0 -44
  325. package/test/services.test.ts +0 -56
  326. package/test/setup.ts +0 -2
  327. package/test/unitTest.test.ts +0 -21
  328. package/test_file.pdf +0 -0
  329. package/tsconfig.json +0 -31
@@ -1,6 +1,7 @@
1
1
  import { Service, type ServiceContext } from "./service"
2
2
  import { MiddlewareService } from "./middlewareService"
3
3
  import { RequestBuilder } from "./requestBuilder"
4
+ // import { Request, Response, Headers, fetch } from "../utils/request"
4
5
 
5
6
  /**
6
7
  * Options for the RpcService.
@@ -14,6 +15,7 @@ export interface RequestOptions {
14
15
  * RPC service.
15
16
  */
16
17
  export class RpcService extends Service {
18
+
17
19
  constructor(
18
20
  serviceContext: ServiceContext,
19
21
  /**
@@ -32,6 +34,22 @@ export class RpcService extends Service {
32
34
  }
33
35
  ) {
34
36
  super(serviceContext)
37
+
38
+ serviceContext.onRegister = async () => {
39
+ serviceContext.resolve(MiddlewareService)?.useMiddleware((req, next) => {
40
+ if (!req.headers.has("accept")) {
41
+ req.headers.set("accept", "text/plain")
42
+ }
43
+
44
+ if ((req as any).discardContentType) {
45
+ delete (req as any).discardContentType
46
+ } else {
47
+ req.headers.set("content-type", "application/json")
48
+ }
49
+
50
+ return next(req)
51
+ })
52
+ }
35
53
  }
36
54
 
37
55
  /**
@@ -87,35 +105,35 @@ export class RpcService extends Service {
87
105
  /**
88
106
  * Send a POST request.
89
107
  * @param path
90
- * @param body
108
+ * @param body JSON object
91
109
  * @param options
92
110
  */
93
111
  async post(
94
112
  path: string,
95
- body?: BodyInit | null,
113
+ body: object | null | undefined,
96
114
  options?: RequestOptions
97
115
  ): Promise<Response> {
98
116
  return this.requestBuilder(path)
99
117
  .searchParams(options?.searchParams)
100
118
  .headers(options?.headers)
101
- .sendPost(body)
119
+ .sendPostJson(body)
102
120
  }
103
121
 
104
122
  /**
105
123
  * Send a PUT request.
106
124
  * @param path
107
- * @param body
125
+ * @param body JSON object
108
126
  * @param options
109
127
  */
110
128
  async put(
111
129
  path: string,
112
- body?: BodyInit | null,
130
+ body: object | null | undefined,
113
131
  options?: RequestOptions
114
132
  ): Promise<Response> {
115
133
  return this.requestBuilder(path)
116
134
  .searchParams(options?.searchParams)
117
135
  .headers(options?.headers)
118
- .sendPut(body)
136
+ .sendPutJson(body)
119
137
  }
120
138
 
121
139
  /**
@@ -6,7 +6,8 @@ export class ServiceContext {
6
6
  constructor(
7
7
  public readonly context: Context,
8
8
  private readonly disposableContainer: DisposableContainer
9
- ) {}
9
+ ) {
10
+ }
10
11
 
11
12
  public get lifetime(): Lifetime {
12
13
  return this.disposableContainer.lifetime
@@ -16,15 +17,15 @@ export class ServiceContext {
16
17
  return this.context.resolve(type)
17
18
  }
18
19
 
19
- public async onRegister(): Promise<void> {
20
+ public onRegister: () => Promise<void> = async (): Promise<void> => {
20
21
  await Promise.resolve()
21
22
  }
22
23
 
23
- public async onStart(): Promise<void> {
24
+ public onStart: () => Promise<void> = async (): Promise<void> => {
24
25
  await Promise.resolve()
25
26
  }
26
27
 
27
- public onUnregister(): void {
28
+ public onUnregister: () => void = (): void => {
28
29
  // do nothing
29
30
  }
30
31
  }
@@ -42,5 +43,6 @@ export abstract class Service {
42
43
  return this.serviceContext.context
43
44
  }
44
45
 
45
- public constructor(private readonly serviceContext: ServiceContext) {}
46
+ public constructor(private readonly serviceContext: ServiceContext) {
47
+ }
46
48
  }
@@ -1,9 +1,9 @@
1
1
  import { Service } from "./service"
2
2
  import { RpcService } from "./rpcService"
3
- import { UserProfile } from "../storages/userProfile"
3
+ import { UserProfile } from "../storages/user/userProfile"
4
4
  import { UserInfoResponse } from "../dto/userInfoResponse"
5
5
  import { OrganizationService } from "./organizationService"
6
- import { UserProfileImpl } from "../storages/userProfile.impl"
6
+ import { UserProfileImpl } from "../storages/user/userProfile.impl"
7
7
  import { ResponseUtils } from "./responseUtils"
8
8
 
9
9
  export class UserProfileService extends Service {
@@ -13,6 +13,20 @@ export class UserProfileService extends Service {
13
13
  return this.impl
14
14
  }
15
15
 
16
+ async merge(anonymous_token: string) {
17
+ const rpc = this.resolve(RpcService) as RpcService
18
+ const response = await rpc.requestBuilder("api/v1/Users/anonymous/merge")
19
+ .sendPostJson({
20
+ anonymousToken: anonymous_token
21
+ })
22
+
23
+ if (ResponseUtils.isFail(response)) {
24
+ await ResponseUtils.throwError("Failed to merge anonymous user", response)
25
+ }
26
+
27
+ await this.fetch()
28
+ }
29
+
16
30
  async fetch() {
17
31
  const rpc = this.resolve(RpcService) as RpcService
18
32
  const response = await rpc.requestBuilder("api/v1/Users/self2").sendGet()
@@ -0,0 +1,160 @@
1
+ import { Context } from "../../context"
2
+ import {
3
+ AnswerDto,
4
+ AnswerStatus,
5
+ AnswerStepDto,
6
+ FetchAnswerResponse,
7
+ SourceDto,
8
+ StepType
9
+ } from "../../dto/chatResponse"
10
+ import { ResponseUtils } from "../../services/responseUtils"
11
+ import { RpcService } from "../../services/rpcService"
12
+ import { Answer, AnswerEvent, AnswerId } from "./answer"
13
+ import { Chat } from "./chat"
14
+
15
+ export class AnswerImpl extends Answer {
16
+
17
+ private _steps?: AnswerStepDto[]
18
+ private _status?: AnswerStatus
19
+ private _id?: AnswerId
20
+ private _question?: string
21
+ private _sources?: SourceDto[]
22
+ private _answer?: string
23
+ private _timestamp?: number
24
+
25
+ constructor(
26
+ private readonly chat: Chat,
27
+ private readonly context: Context) {
28
+ super()
29
+ }
30
+
31
+ initFromHistory(answer: AnswerDto): AnswerImpl {
32
+ this._id = answer.id
33
+ this._question = answer.question
34
+ this._answer = answer.context
35
+ this._sources = answer.sources
36
+ this._timestamp = answer.timestamp
37
+
38
+ return this
39
+ }
40
+
41
+ async initNew(id: AnswerId, question: string): Promise<AnswerImpl> {
42
+ this._id = id
43
+ this._question = question
44
+ this._answer = ""
45
+
46
+ await this.fetch()
47
+
48
+ return this
49
+ }
50
+
51
+ get id(): AnswerId {
52
+ return <AnswerId>this._id
53
+ }
54
+
55
+ get status(): AnswerStatus {
56
+ return <AnswerStatus>this._status
57
+ }
58
+
59
+ get question(): string {
60
+ return <string>this._question
61
+ }
62
+
63
+ get sources(): SourceDto[] {
64
+ return <SourceDto[]>this._sources
65
+ }
66
+
67
+ get tokens(): string {
68
+ return <string>this._answer
69
+ }
70
+
71
+ get timestamp(): number {
72
+ return <number>this._timestamp
73
+ }
74
+
75
+ public fetchAfter() {
76
+ if (this._status === undefined || this._status === AnswerStatus.RUNNING) {
77
+ setTimeout(async () => await this.fetch(), 300)
78
+ }
79
+ }
80
+
81
+ private getStep(type: StepType): AnswerStepDto | undefined {
82
+ return this._steps?.find(step => step.type === type)
83
+ }
84
+
85
+ async fetch(): Promise<void> {
86
+ // fetch answer from position 0
87
+ const position = 0
88
+ // fetch answer
89
+ const response = await this.context
90
+ .resolve(RpcService)
91
+ ?.requestBuilder("api/v1/Chats/answer/fetch")
92
+ .searchParam("chatId", this.chat.id)
93
+ .searchParam("questionId", this.id)
94
+ .searchParam("position", position.toString())
95
+ .sendGet()
96
+
97
+ // check response status
98
+ if (ResponseUtils.isFail(response)) {
99
+ await ResponseUtils.throwError(`Failed to fetch answer ${this.id}`, response)
100
+ }
101
+
102
+ // parse answer from the server's response
103
+ const answer = (await response!.json()) as FetchAnswerResponse
104
+
105
+ // update answer
106
+ this._status = <AnswerStatus>answer.status
107
+ this._steps = <AnswerStepDto[]>answer.steps
108
+
109
+ if (this.getStep(StepType.GENERATE_ANSWER) !== undefined) {
110
+ const step = this.getStep(StepType.GENERATE_ANSWER)
111
+ const step_tokens = step?.tokens.join("")
112
+ if (this._answer !== step_tokens) {
113
+ this._answer = step_tokens
114
+
115
+ this.dispatch({
116
+ type: AnswerEvent.UPDATED,
117
+ data: this
118
+ })
119
+ }
120
+ }
121
+
122
+ if (this.getStep(StepType.SOURCES) !== undefined && this._sources === undefined) {
123
+ const sources_step = this.getStep(StepType.SOURCES)
124
+ this._sources = sources_step?.sources
125
+
126
+ this.dispatch({
127
+ type: AnswerEvent.UPDATED,
128
+ data: this
129
+ })
130
+ }
131
+
132
+ if (this.getStep(StepType.DONE) !== undefined) {
133
+ const step = this.getStep(StepType.DONE)
134
+ this._timestamp = Date.parse(step!.end_at)
135
+ }
136
+
137
+ this.fetchAfter()
138
+ }
139
+
140
+ async cancel(): Promise<void> {
141
+ // send request to the server
142
+ const response = await this.context
143
+ .resolve(RpcService)
144
+ ?.requestBuilder("api/v1/Chats/answer/cancel")
145
+ .sendPutJson({
146
+ chat_id: this.chat.id,
147
+ uid: this.id
148
+ })
149
+
150
+ // check response status
151
+ if (ResponseUtils.isFail(response)) {
152
+ await ResponseUtils.throwError("Failed to cancel a question", response)
153
+ }
154
+
155
+ this.dispatch({
156
+ type: AnswerEvent.CANCALLED,
157
+ data: this
158
+ })
159
+ }
160
+ }
@@ -0,0 +1,53 @@
1
+ import {
2
+ AnswerStatus,
3
+ SourceDto
4
+ } from "../../dto/chatResponse"
5
+ import { EventDispatcher } from "../../events"
6
+
7
+ export type AnswerId = string
8
+ export type StepId = string
9
+
10
+ export enum AnswerEvent {
11
+ ADDED = "added",
12
+ CANCALLED = "cancelled",
13
+ FAILED = "failed",
14
+ UPDATED = "updated"
15
+ }
16
+
17
+ export abstract class Answer extends EventDispatcher<AnswerEvent, Answer> {
18
+
19
+ /**
20
+ * Answer id.
21
+ */
22
+ abstract get id(): AnswerId
23
+
24
+ /**
25
+ * Answer data object
26
+ */
27
+ abstract get question(): string
28
+
29
+ /**
30
+ * Answer tokens
31
+ */
32
+ abstract get tokens(): string
33
+
34
+ /**
35
+ * Answer status.
36
+ */
37
+ abstract get status(): AnswerStatus
38
+
39
+ /**
40
+ * Answer sources.
41
+ */
42
+ abstract get sources(): SourceDto[]
43
+
44
+ /**
45
+ * Answer time.
46
+ */
47
+ abstract get timestamp(): number
48
+
49
+ /**
50
+ * Cancel answer
51
+ */
52
+ abstract cancel(): Promise<void>
53
+ }
@@ -0,0 +1,95 @@
1
+ import { Chat, ChatAnswerType } from "./chat"
2
+ import { Disposable } from "../../disposable"
3
+ import { Answer, AnswerId } from "./answer"
4
+ import { ChatDto } from "../../dto/chatResponse"
5
+ import { Context } from "../../context"
6
+ import { AnswerImpl } from "./answer.impl"
7
+ import { RpcService } from "../../services/rpcService"
8
+ import { ResponseUtils } from "../../services/responseUtils"
9
+ import { Organization } from "../organizations/organization"
10
+
11
+ export class ChatImpl extends Chat implements Disposable {
12
+ private _isDisposed: boolean = false
13
+ private readonly _answers: AnswerImpl[] = []
14
+
15
+ private _content?: ChatDto
16
+
17
+ constructor(
18
+ private readonly context: Context,
19
+ public readonly organization: Organization
20
+ ) {
21
+ super()
22
+ }
23
+
24
+ async initFrom(chat: ChatDto): Promise<ChatImpl> {
25
+ this._content = chat
26
+
27
+ // init answers
28
+ for (const ans of chat.answers) {
29
+ // create answer implementation
30
+ const answer = new AnswerImpl(this, this.context).initFromHistory(ans)
31
+
32
+ // add answer to the collection
33
+ this._answers.push(answer)
34
+ }
35
+
36
+ return this
37
+ }
38
+
39
+ get id(): string {
40
+ return <string>this._content?.id
41
+ }
42
+
43
+ get name(): string {
44
+ return <string>this._content?.name
45
+ }
46
+
47
+ get collection(): readonly Answer[] {
48
+ return <Answer[]>this._answers
49
+ }
50
+
51
+ get isDisposed(): boolean {
52
+ return this._isDisposed
53
+ }
54
+
55
+ public getAnswer(id: AnswerId): Answer {
56
+ const answer = this._answers.find(answer => answer.id === id)
57
+ if (answer) {
58
+ return answer
59
+ }
60
+ throw new Error(`Answer with id ${id} is not found`)
61
+ }
62
+
63
+ async ask(message: string, answerType: ChatAnswerType): Promise<Answer> {
64
+ // send request to the server
65
+ const response = await this.context
66
+ .resolve(RpcService)
67
+ ?.requestBuilder("api/v1/Chats/question")
68
+ .sendPutJson({
69
+ chatId: this.id,
70
+ questionMessage: message,
71
+ isLongAnswer: (answerType === ChatAnswerType.LONG)
72
+ })
73
+
74
+ // check response status
75
+ if (ResponseUtils.isFail(response)) {
76
+ await ResponseUtils.throwError(`Failed to ask a question, organization: ${this.organization.id}`, response)
77
+ }
78
+
79
+ // parse answer id from the server's response
80
+ const id = (await response!.json() as { id: string }).id
81
+
82
+ // create answer implementation
83
+ const answer = await new AnswerImpl(this, this.context).initNew(id, message)
84
+
85
+ // add answer to the collection
86
+ this._answers.push(answer)
87
+
88
+ return answer
89
+ }
90
+
91
+ dispose(): void {
92
+ this._isDisposed = true
93
+ }
94
+
95
+ }
@@ -0,0 +1,45 @@
1
+ import { Answer } from "./answer"
2
+ import { Organization } from "../organizations/organization"
3
+
4
+ export type ChatId = string
5
+
6
+ export enum ChatAnswerType {
7
+ SHORT = "short",
8
+ LONG = "long"
9
+ }
10
+
11
+ export abstract class Chat {
12
+
13
+ /**
14
+ * Organization.
15
+ */
16
+ abstract get organization(): Organization
17
+
18
+ /**
19
+ * Chat id.
20
+ */
21
+ abstract get id(): ChatId
22
+
23
+ /**
24
+ * Chat name.
25
+ */
26
+ abstract get name(): string
27
+
28
+ /**
29
+ * Answers list.
30
+ */
31
+ abstract get collection(): ReadonlyArray<Answer>
32
+
33
+ /**
34
+ * Get answer by id
35
+ * @param id answer id
36
+ */
37
+ abstract getAnswer(id: string): Answer
38
+
39
+ /**
40
+ * Ask new question in chat.
41
+ */
42
+ abstract ask(message: string, answerType: ChatAnswerType): Promise<Answer>
43
+
44
+ }
45
+
@@ -0,0 +1,144 @@
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(): Promise<Chat> {
74
+
75
+ // send create request to the server
76
+ const response = await this.context
77
+ .resolve(RpcService)
78
+ ?.requestBuilder("api/v1/Chats")
79
+ .sendPostJson({ organizationId: this.organization.id })
80
+
81
+ // check response status
82
+ if (ResponseUtils.isFail(response)) {
83
+ await ResponseUtils.throwError(`Failed to create chat, organization: ${this.organization.id}`, response)
84
+ }
85
+
86
+ // parse workspace from the server's response
87
+ const content = (await response!.json() as {
88
+ chat: ChatDto
89
+ }).chat as ChatDto
90
+
91
+ // create workspace implementation
92
+ const chat = new ChatImpl(this.context, this.organization)
93
+ await chat.initFrom(content)
94
+
95
+ // add chat to the collection
96
+ this._chats.push(chat)
97
+
98
+ // dispatch event
99
+ this.dispatch({
100
+ type: ChatsEvent.ADDED,
101
+ data: chat
102
+ })
103
+
104
+ return chat
105
+ }
106
+
107
+ async delete(id: string): Promise<void> {
108
+ // get chat by id
109
+ const chat = <ChatImpl>this.tryGet(id)
110
+
111
+ // check if chat is found
112
+ if (!chat) {
113
+ throw new Error(`Chat ${id} is not found, organization: ${this.organization.id}`)
114
+ }
115
+
116
+ // send delete request to the server
117
+ const response = await this.context
118
+ .resolve(RpcService)
119
+ ?.requestBuilder("api/v1/Chats")
120
+ .searchParam("id", id)
121
+ .sendDelete()
122
+
123
+ // check response status
124
+ if (ResponseUtils.isFail(response)) {
125
+ await ResponseUtils.throwError(
126
+ `Failed to delete chat: ${id}, organization: ${this.organization.id}`,
127
+ response
128
+ )
129
+ }
130
+
131
+ // remove chat from the collection
132
+ const index = this._chats.indexOf(<ChatImpl>chat)
133
+ if (index < 0) {
134
+ throw new Error(`Chat ${id} is not found, organization: ${this.organization.id}`)
135
+ }
136
+ this._chats.splice(index, 1)
137
+
138
+ // dispatch event
139
+ this.dispatch({
140
+ type: ChatsEvent.REMOVED,
141
+ data: chat
142
+ })
143
+ }
144
+ }
@@ -0,0 +1,47 @@
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(): Promise<Chat>
29
+
30
+ /**
31
+ * Get chat by id.
32
+ * @param id
33
+ */
34
+ abstract get(id: ChatId): Chat
35
+
36
+ /**
37
+ * Try to get chat by id.
38
+ * @param id
39
+ */
40
+ abstract tryGet(id: ChatId): Chat | undefined
41
+
42
+ /**
43
+ * Delete chat.
44
+ * @param id
45
+ */
46
+ abstract delete(id: ChatId): Promise<void>
47
+ }