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

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 +39 -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 +149 -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} +70 -61
  283. package/src/storages/files/files.ts +43 -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
@@ -0,0 +1,113 @@
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
+
9
+ export class FileImpl extends File implements Disposable {
10
+ private _isDisposed: boolean = false
11
+ private _content?: FileDto
12
+ private _progress?: FileProgressDto
13
+
14
+ constructor(private readonly context: Context) {
15
+ super()
16
+ }
17
+
18
+ async initFrom(file: FileDto): Promise<File> {
19
+ this._content = file
20
+
21
+ await this.updateStatus()
22
+
23
+ return this
24
+ }
25
+
26
+ get isDisposed(): boolean {
27
+ return this._isDisposed
28
+ }
29
+
30
+ dispose(): void {
31
+ this._isDisposed = true
32
+ }
33
+
34
+ get id(): string {
35
+ return <string>this._content?.id
36
+ }
37
+
38
+ get name(): string {
39
+ return <string>this._content?.name
40
+ }
41
+
42
+ get createdAt(): number {
43
+ return <number>this._content?.createdAt
44
+ }
45
+
46
+ get progress(): FileProgressDto {
47
+ return <FileProgressDto>this._progress
48
+ }
49
+
50
+ get status(): FileStatus {
51
+ if (this._progress === undefined || this._progress.success === null ||
52
+ (this._progress.success && this._progress.completed_parts_count !== this._progress.file_parts_count)) {
53
+ return FileStatus.UPLOADING
54
+ } else if (this._progress.success) {
55
+ return FileStatus.SUCCESS
56
+ } else {
57
+ return FileStatus.FAILED
58
+ }
59
+ }
60
+
61
+ async url(): Promise<string> {
62
+ const response = await this.context
63
+ .resolve(RpcService)
64
+ ?.requestBuilder("api/v1/Files/url")
65
+ .searchParam("id", this.id)
66
+ .sendGet()
67
+
68
+ if (ResponseUtils.isFail(response)) {
69
+ await ResponseUtils.throwError(
70
+ `Failed to get file ${this.id} url`,
71
+ response
72
+ )
73
+ }
74
+
75
+ return (await response!.json() as { url: string }).url
76
+ }
77
+
78
+ public fetchAfter() {
79
+ if (this.status === FileStatus.UPLOADING) {
80
+ setTimeout(async () => await this.updateStatus(), 500)
81
+ }
82
+ }
83
+
84
+ async updateStatus(): Promise<void> {
85
+ const response = await this.context
86
+ .resolve(RpcService)
87
+ ?.requestBuilder("api/v1/Files/fetch")
88
+ .searchParam("id", this.id)
89
+ .sendGet()
90
+
91
+ if (ResponseUtils.isFail(response)) {
92
+ await ResponseUtils.throwError(`Failed to get file ${this.id}`, response)
93
+ }
94
+
95
+ const prev_progress = this._progress
96
+ this._progress = (await response!.json() as {
97
+ progress: FileProgressDto
98
+ }).progress as FileProgressDto
99
+
100
+ if (prev_progress === undefined ||
101
+ (this.progress.success !== null && this.progress.completed_parts_count > prev_progress.completed_parts_count) ||
102
+ this.status === FileStatus.SUCCESS ||
103
+ this.status === FileStatus.FAILED) {
104
+ // dispatch event, file updated
105
+ this.dispatch({
106
+ type: FilesEvent.UPDATED,
107
+ data: this
108
+ })
109
+ }
110
+
111
+ this.fetchAfter()
112
+ }
113
+ }
@@ -0,0 +1,49 @@
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 uploading progress
37
+ */
38
+ abstract get progress(): FileProgressDto
39
+
40
+ /**
41
+ * File uploading status
42
+ */
43
+ abstract get status(): FileStatus
44
+
45
+ /**
46
+ * Get temporary url.
47
+ */
48
+ abstract url(): Promise<string>
49
+ }
@@ -1,33 +1,14 @@
1
- import { Context } from "../context"
2
- import { Disposable } from "../disposable"
3
- import { FileDto, FileListResponse } from "../dto/workspacesResponse"
4
- import { OrganizationService } from "../services/organizationService"
5
- import { RpcService } from "../services/rpcService"
1
+ import { Context } from "../../context"
2
+ import { FileDto, FileListResponse } from "../../dto/workspacesResponse"
3
+ import { RpcService } from "../../services/rpcService"
6
4
  import { FileImpl } from "./file.impl"
7
- import { File, Files, FilesEvent, FilesList as FilesPage } from "./files"
8
- import { WorkspaceImpl } from "./workspace.impl"
9
- import { ResponseUtils } from "../services/responseUtils"
10
-
11
- export class FilesPageImpl extends FilesPage implements Disposable {
12
- private _isDisposed: boolean = false
13
-
14
- public files: File[] = []
15
- public total: number = 0
16
- public filesPerPage: number = 0
17
- public page: number = 0
18
-
19
- get pages(): number {
20
- return Math.ceil(Math.max(this.total / this.filesPerPage, 1.0))
21
- }
22
-
23
- get isDisposed(): boolean {
24
- return this._isDisposed
25
- }
26
-
27
- dispose(): void {
28
- this._isDisposed = true
29
- }
30
- }
5
+ import { Files, FilesEvent, UploadFile } from "./files"
6
+ import { WorkspaceImpl } from "../workspaces/workspace.impl"
7
+ import { ResponseUtils } from "../../services/responseUtils"
8
+ import { File } from "./file"
9
+ import { FilesPage } from "./filesPage"
10
+ import { FilesPageImpl } from "./filesPage.impl"
11
+ // import { FormData } from "../../utils/request"
31
12
 
32
13
  export class FilesImpl extends Files {
33
14
  constructor(
@@ -40,12 +21,18 @@ export class FilesImpl extends Files {
40
21
  // Object used as files page data, returned by "query"
41
22
  public filesList?: FilesPage
42
23
 
43
- async upload(file: any): Promise<File> {
44
- return await this.internalUpload(file)
24
+ async upload(files: UploadFile[]): Promise<File[]> {
25
+ const loaded_files = []
26
+ for (const file of files) {
27
+ loaded_files.push(await this.internalUpload(file))
28
+ }
29
+ return loaded_files
45
30
  }
46
31
 
47
- async delete(id: string): Promise<void> {
48
- return await this.internalDeleteFile(id)
32
+ async delete(ids: string[]): Promise<void> {
33
+ for (const id of ids) {
34
+ await this.internalDeleteFile(id)
35
+ }
49
36
  }
50
37
 
51
38
  async query(query: string, page: number, limit: number): Promise<FilesPage> {
@@ -57,7 +44,7 @@ export class FilesImpl extends Files {
57
44
  //----------------------------------------------------------------------------
58
45
 
59
46
  /**
60
- * Delete organization.
47
+ * Delete file.
61
48
  * @param id
62
49
  */
63
50
  async internalDeleteFile(id: string): Promise<void> {
@@ -79,7 +66,7 @@ export class FilesImpl extends Files {
79
66
  const file = <FileImpl>this.filesList!.files.find(f => f.id === id)
80
67
  const index = this.filesList!.files.indexOf(file)
81
68
  if (index < 0) {
82
- throw new Error("Organization delete, index is not found")
69
+ throw new Error("File delete, index is not found")
83
70
  }
84
71
 
85
72
  // remove file from collection
@@ -100,9 +87,16 @@ export class FilesImpl extends Files {
100
87
  page: number,
101
88
  limit: number
102
89
  ): Promise<FilesPage> {
90
+
91
+ // check page
103
92
  if (page === undefined || page === null) {
104
93
  throw new Error("File fetch, page is undefined or null")
105
94
  }
95
+ if (page < 0) {
96
+ throw new Error("File fetch, page is negative")
97
+ }
98
+
99
+ // check limit
106
100
  if (limit === undefined || limit === null) {
107
101
  throw new Error("File fetch, limit is undefined or null")
108
102
  }
@@ -110,23 +104,18 @@ export class FilesImpl extends Files {
110
104
  throw new Error("File fetch, limit is 0")
111
105
  }
112
106
 
113
- const orgService = this.context.resolve(OrganizationService)
114
-
115
- if (orgService === undefined) {
116
- throw new Error("File fetch, organization service undefined")
117
- }
118
-
107
+ // send request to the server
119
108
  const response = await this.context
120
109
  .resolve(RpcService)
121
110
  ?.requestBuilder("api/v1/Files/list")
122
-
123
111
  .searchParam("workspaceId", this.workspace.id)
124
- .searchParam("organizationId", orgService.organizations.current)
112
+ .searchParam("organizationId", this.workspace.organization.id)
125
113
  .searchParam("query", query)
126
114
  .searchParam("page", page.toString())
127
115
  .searchParam("limit", limit.toString())
128
116
  .sendGet()
129
117
 
118
+ // check response status
130
119
  if (ResponseUtils.isFail(response)) {
131
120
  await ResponseUtils.throwError(
132
121
  `Files fetch query:${query}, page:${page}, limit:${limit}, failed`,
@@ -134,57 +123,77 @@ export class FilesImpl extends Files {
134
123
  )
135
124
  }
136
125
 
126
+ // parse files from the server's response
137
127
  const files = (await response!.json()) as FileListResponse
138
128
 
129
+ // create files list
139
130
  const filesList = new FilesPageImpl()
140
131
  filesList.total = files.totalFilesCount
141
132
  filesList.filesPerPage = files.filesPerPage
142
133
  filesList.page = page
134
+
135
+ // init files from the server's response
143
136
  for (const fl of files.files) {
144
- const file = new FileImpl(this.context).initFrom(fl)
145
137
 
146
- filesList.files.push(file)
138
+ // create file implementation
139
+ const file = await new FileImpl(this.context).initFrom(fl)
147
140
 
148
- this.dispatch({
149
- type: FilesEvent.ADDED,
150
- data: file
151
- })
141
+ // add file to the collection
142
+ filesList.files.push(file)
152
143
  }
153
144
 
145
+ // set files list
154
146
  this.filesList = filesList
155
147
 
156
148
  return filesList
157
149
  }
158
150
 
159
- async internalUpload(file: any): Promise<File> {
160
- const orgService = this.context.resolve(OrganizationService)
151
+ async internalUpload(file: UploadFile): Promise<File> {
152
+ // check file
153
+ if (file === undefined || file === null) {
154
+ throw new Error("File upload, file is undefined or null")
155
+ }
161
156
 
162
- if (orgService === undefined) {
163
- throw new Error("File load, organization service undefined")
157
+ let data: Blob | undefined = undefined
158
+ if (file instanceof globalThis.File) {
159
+ data = <Blob>file
160
+ } else {
161
+ data = new Blob([file.data])
164
162
  }
165
163
 
164
+ // form data to send
166
165
  const form = new FormData()
167
- form.append("organizationId", orgService.organizations.current)
166
+ form.append("organizationId", this.workspace.organization.id)
168
167
  form.append("workspaceId", this.workspace.id)
169
168
  form.append("name", file.name)
170
- form.append("file", file, file.name)
169
+ form.append("file", data!, file.name)
171
170
 
171
+ // send request to the server
172
172
  const response = await this.context
173
173
  .resolve(RpcService)
174
174
  ?.requestBuilder("api/v1/Files")
175
- .sendPost(form)
175
+ .sendPostFormData(form)
176
+
177
+ // check response status
176
178
  if (ResponseUtils.isFail(response)) {
177
- await ResponseUtils.throwError(`File upload ${file}`, response)
179
+ await ResponseUtils.throwError(`File upload ${file.name}`, response)
178
180
  }
179
- const result = (await response!.json()).file as FileDto
180
181
 
181
- const fileImpl = new FileImpl(this.context).initFrom(result)
182
+ // parse file from the server's response
183
+ const result = (await response!.json() as { file: FileDto }).file as FileDto
182
184
 
183
- this.filesList!.files.push(file)
185
+ // create file implementation
186
+ const fileImpl = new FileImpl(this.context)
184
187
 
188
+ await fileImpl.initFrom(result)
189
+
190
+ // TODO: why is this here?
191
+ this.filesList?.files.push(fileImpl)
192
+
193
+ // dispatch event, file added
185
194
  this.dispatch({
186
195
  type: FilesEvent.ADDED,
187
- data: file
196
+ data: fileImpl
188
197
  })
189
198
 
190
199
  return fileImpl
@@ -0,0 +1,43 @@
1
+ import { EventDispatcher } from "../../events"
2
+ import { File, FileId } from "./file"
3
+ import { FilesPage } from "./filesPage"
4
+
5
+ /**
6
+ * Files event.
7
+ */
8
+ export enum FilesEvent {
9
+ ADDED = "added",
10
+ REMOVED = "removed",
11
+ UPDATED = "updated"
12
+ }
13
+
14
+ /**
15
+ * Upload file.
16
+ */
17
+ export type UploadFile = {
18
+ name: string
19
+ type: "application/pdf"
20
+ data: Buffer
21
+ } | globalThis.File
22
+
23
+ /**
24
+ * Files storage.
25
+ */
26
+ export abstract class Files extends EventDispatcher<FilesEvent, File> {
27
+ /**
28
+ * Upload file.
29
+ */
30
+ abstract upload(files: UploadFile[]): Promise<File[]>
31
+
32
+ /**
33
+ * Delete files.
34
+ * @param ids
35
+ */
36
+ abstract delete(ids: FileId[]): Promise<void>
37
+
38
+ /**
39
+ * Query files.
40
+ */
41
+ abstract query(query: string, page: number, limit: number): Promise<FilesPage>
42
+ }
43
+
@@ -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
+ }
@@ -0,0 +1,33 @@
1
+ import { File } from "./file"
2
+
3
+ /**
4
+ * Files page.
5
+ */
6
+ export abstract class FilesPage {
7
+
8
+ /**
9
+ * Get files.
10
+ */
11
+ abstract get files(): File[]
12
+
13
+ /**
14
+ * Get pages count.
15
+ */
16
+ abstract get pages(): number
17
+
18
+ /**
19
+ * Get total count.
20
+ */
21
+ abstract get total(): number
22
+
23
+ /**
24
+ * Get current page.
25
+ */
26
+ abstract get page(): number
27
+
28
+ /**
29
+ * Equals.
30
+ * @param other
31
+ */
32
+ abstract equals(other?: FilesPage | null): boolean
33
+ }