@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
@@ -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,70 @@ 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)
161
-
162
- if (orgService === undefined) {
163
- throw new Error("File load, organization service undefined")
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")
164
155
  }
165
156
 
157
+ // form data to send
166
158
  const form = new FormData()
167
- form.append("organizationId", orgService.organizations.current)
159
+ form.append("organizationId", this.workspace.organization.id)
168
160
  form.append("workspaceId", this.workspace.id)
169
161
  form.append("name", file.name)
170
162
  form.append("file", file, file.name)
171
163
 
164
+ // send request to the server
172
165
  const response = await this.context
173
166
  .resolve(RpcService)
174
167
  ?.requestBuilder("api/v1/Files")
175
- .sendPost(form)
168
+ .sendPostFormData(form)
169
+
170
+ // check response status
176
171
  if (ResponseUtils.isFail(response)) {
177
- await ResponseUtils.throwError(`File upload ${file}`, response)
172
+ await ResponseUtils.throwError(`File upload ${file.name}`, response)
178
173
  }
179
- const result = (await response!.json()).file as FileDto
180
174
 
181
- const fileImpl = new FileImpl(this.context).initFrom(result)
175
+ // parse file from the server's response
176
+ const result = (await response!.json() as { file: FileDto }).file as FileDto
182
177
 
183
- this.filesList!.files.push(file)
178
+ // create file implementation
179
+ const fileImpl = new FileImpl(this.context)
184
180
 
181
+ await fileImpl.initFrom(result)
182
+
183
+ // TODO: why is this here?
184
+ this.filesList?.files.push(fileImpl)
185
+
186
+ // dispatch event, file added
185
187
  this.dispatch({
186
188
  type: FilesEvent.ADDED,
187
- data: file
189
+ data: fileImpl
188
190
  })
189
191
 
190
192
  return fileImpl
@@ -0,0 +1,39 @@
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 = globalThis.File
18
+
19
+ /**
20
+ * Files storage.
21
+ */
22
+ export abstract class Files extends EventDispatcher<FilesEvent, File> {
23
+ /**
24
+ * Upload file.
25
+ */
26
+ abstract upload(files: UploadFile[]): Promise<File[]>
27
+
28
+ /**
29
+ * Delete files.
30
+ * @param ids
31
+ */
32
+ abstract delete(ids: FileId[]): Promise<void>
33
+
34
+ /**
35
+ * Query files.
36
+ */
37
+ abstract query(query: string, page: number, limit: number): Promise<FilesPage>
38
+ }
39
+
@@ -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
+ }