@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
package/src/events.ts CHANGED
@@ -1,25 +1,25 @@
1
1
  import { type Disposable, DisposableContainer } from "./disposable"
2
2
 
3
- export interface Input<ET, DT> {
4
- type?: ET
5
- data: DT
3
+ export interface Input<EventType, DataType> {
4
+ type?: EventType
5
+ data: DataType
6
6
  }
7
7
 
8
- export interface Event<ET, DT> extends Input<ET, DT> {
8
+ export interface Event<EventType, DataType> extends Input<EventType, DataType> {
9
9
  unsubscribe: () => void
10
10
  }
11
11
 
12
- export interface EventSubscriber<ET, DT> {
13
- subscribe: (callback: (event: Event<ET, DT>) => void, type?: ET) => Disposable
12
+ export interface EventSubscriber<EventType, DataType> {
13
+ subscribe: (callback: (event: Event<EventType, DataType>) => void, type?: EventType) => Disposable
14
14
  }
15
15
 
16
- export class EventDispatcher<ET, DT> implements EventSubscriber<ET, DT> {
16
+ export class EventDispatcher<EventType, DataType> implements EventSubscriber<EventType, DataType> {
17
17
  private _listeners: Array<{
18
- callback: (value: Event<ET, DT>) => void
18
+ callback: (value: Event<EventType, DataType>) => void
19
19
  disposable: Disposable
20
20
  }> = []
21
21
 
22
- dispatch(input: Input<ET, DT>): void {
22
+ dispatch(input: Input<EventType, DataType>): void {
23
23
  this._listeners.slice().forEach(it => {
24
24
  const value = {
25
25
  type: input.type,
@@ -27,16 +27,16 @@ export class EventDispatcher<ET, DT> implements EventSubscriber<ET, DT> {
27
27
  unsubscribe: () => {
28
28
  it.disposable.dispose()
29
29
  }
30
- } satisfies Event<ET, DT>
30
+ } satisfies Event<EventType, DataType>
31
31
  it.callback(value)
32
32
  })
33
33
  }
34
34
 
35
- subscribe(callback: (event: Event<ET, DT>) => void, type?: ET): Disposable {
35
+ subscribe(callback: (event: Event<EventType, DataType>) => void, type?: EventType): Disposable {
36
36
  const container = new DisposableContainer()
37
37
  if (type !== undefined) {
38
38
  const cb = callback
39
- const listener = (evt: Event<ET, DT>): void => {
39
+ const listener = (evt: Event<EventType, DataType>): void => {
40
40
  if (evt.type === type) {
41
41
  cb(evt)
42
42
  }
package/src/index.ts CHANGED
@@ -1,15 +1,47 @@
1
1
  import { version } from "../package.json"
2
2
  import { _createApp } from "./internal/createApp.impl"
3
3
  import { type AppBuilder } from "./appBuilder"
4
- import { type AppSdk } from "./appSdk"
4
+ import { type DataIslandApp } from "./dataIslandApp"
5
5
 
6
6
  export * from "./events"
7
7
  export * from "./disposable"
8
8
  export * from "./credentials"
9
- export * from "./appSdk"
9
+ export * from "./dataIslandApp"
10
+ export * from "./appBuilder"
11
+ export * from "./context"
12
+ export * from "./middleware"
13
+ export * from "./dto/chatResponse"
14
+ export * from "./dto/accessGroupResponse"
15
+ export * from "./dto/userInfoResponse"
16
+ export * from "./dto/workspacesResponse"
17
+ export * from "./storages/organizations/organizations"
18
+ export * from "./storages/organizations/organization"
19
+ export * from "./storages/workspaces/workspaces"
20
+ export * from "./storages/workspaces/workspace"
21
+ export * from "./storages/groups/groups"
22
+ export * from "./storages/user/userProfile"
23
+ export * from "./storages/files/files"
24
+ export * from "./storages/files/file"
25
+ export * from "./storages/files/filesPage"
26
+ export * from "./storages/chats/chats"
27
+ export * from "./storages/chats/chat"
28
+ export * from "./storages/chats/answer"
10
29
 
11
- const _appsNotReady = new Map<string, Promise<AppSdk>>()
12
- const _appsReady = new Map<string, AppSdk>()
30
+ export {
31
+ OrganizationId, Organizations, OrganizationsEvent
32
+ } from "./storages/organizations/organizations"
33
+ export {
34
+ WorkspaceId, Workspaces, WorkspacesEvent
35
+ } from "./storages/workspaces/workspaces"
36
+ export { FileId, File, FileStatus } from "./storages/files/file"
37
+ export { UploadFile, Files, FilesEvent } from "./storages/files/files"
38
+ export { Group, GroupEvent, GroupId } from "./storages/groups/group"
39
+ export { AnswerId, Answer, StepId, AnswerEvent } from "./storages/chats/answer"
40
+
41
+ // map of apps that are not ready to be used
42
+ const _appsNotReady = new Map<string, Promise<DataIslandApp>>()
43
+ // map of apps that are ready to be used
44
+ const _appsReady = new Map<string, DataIslandApp>()
13
45
 
14
46
  /**
15
47
  * Current SDK version.
@@ -26,7 +58,10 @@ export const DEFAULT_NAME = "[DEFAULT]"
26
58
  */
27
59
  export const DEFAULT_HOST = "https://api.dataisland.com.ua"
28
60
 
29
- export function sdks(): AppSdk[] {
61
+ /**
62
+ * Returns a list of DataIsland App instances.
63
+ */
64
+ export function dataIslandInstances(): DataIslandApp[] {
30
65
  return Array.from(_appsReady.values())
31
66
  }
32
67
 
@@ -37,19 +72,19 @@ export function sdks(): AppSdk[] {
37
72
  * @returns A DataIsland App instance.
38
73
  * @example
39
74
  * ```js
40
- * import { appSdk } from 'data-island'
75
+ * import { dataIslandApp, DEFAULT_NAME } from '@neuralinnovations/dataisland-sdk'
41
76
  *
42
- * const app = await appSdk("my-app", builder => {
77
+ * const app = await dataIslandApp(DEFAULT_NAME, builder => {
43
78
  * builder.useHost("https://dataisland.com.ua")
44
79
  * builder.useAutomaticDataCollectionEnabled(true)
45
80
  * builder.useCredential(new BasicCredential("email", "password"))
46
81
  * })
47
82
  * ```
48
83
  */
49
- export async function appSdk(
84
+ export async function dataIslandApp(
50
85
  name?: string,
51
86
  setup?: (builder: AppBuilder) => Promise<void>
52
- ): Promise<AppSdk> {
87
+ ): Promise<DataIslandApp> {
53
88
  name = name ?? DEFAULT_NAME
54
89
 
55
90
  let appPromise = _appsNotReady.get(name)
@@ -67,7 +102,7 @@ export async function appSdk(
67
102
  } else {
68
103
  if (setup !== undefined) {
69
104
  throw new Error(
70
- `App ${name} is initializing. You can't setup the same again.`
105
+ `DataIsland ${name} is initializing. You can't setup the same again.`
71
106
  )
72
107
  }
73
108
  }
@@ -7,8 +7,12 @@ import { DisposableContainer, type Lifetime } from "../disposable"
7
7
  import { type Service, ServiceContext } from "../services/service"
8
8
  import { CredentialService } from "../services/credentialService"
9
9
  import { MiddlewareService } from "../services/middlewareService"
10
- import { type CredentialBase } from "../credentials"
11
- import { AppSdk } from "../appSdk"
10
+ import {
11
+ DefaultCredential,
12
+ type CredentialBase,
13
+ AnonymousCredential
14
+ } from "../credentials"
15
+ import { DataIslandApp } from "../dataIslandApp"
12
16
  import { RpcService } from "../services/rpcService"
13
17
  import { CommandService } from "../services/commandService"
14
18
  import {
@@ -17,11 +21,17 @@ import {
17
21
  } from "../commands/startCommandHandler"
18
22
  import { UserProfileService } from "../services/userProfileService"
19
23
  import { OrganizationService } from "../services/organizationService"
20
- import { Organizations } from "../storages/organizations"
21
- import { UserProfile } from "../storages/userProfile"
24
+ import { Organizations } from "../storages/organizations/organizations"
25
+ import { UserProfile } from "../storages/user/userProfile"
22
26
  import { isUnitTest, UnitTest } from "../unitTest"
27
+ import {
28
+ DeleteUserFullCommand,
29
+ DeleteUserFullCommandHandler
30
+ } from "../commands/deleteUserFullCommandHandler"
31
+ import { CookieService } from "../services/cookieService"
32
+ import { AnonymousService } from "../services/anonymousService"
23
33
 
24
- export class AppImplementation extends AppSdk {
34
+ export class DataIslandAppImpl extends DataIslandApp {
25
35
  readonly name: string
26
36
  private _host: string = DEFAULT_HOST
27
37
  private _automaticDataCollectionEnabled: boolean = true
@@ -34,7 +44,7 @@ export class AppImplementation extends AppSdk {
34
44
  this.name = name
35
45
  this._registry = new Registry()
36
46
  this._disposable = new DisposableContainer()
37
- this._context = new Context(this._registry, this._disposable.lifetime, name)
47
+ this._context = new Context(this._registry, this._disposable.lifetime, this)
38
48
 
39
49
  this._registry.map(Context).asValue(this._context)
40
50
  }
@@ -83,8 +93,14 @@ export class AppImplementation extends AppSdk {
83
93
  builder.registerCommand(StartCommand, (context: Context) => {
84
94
  return new StartCommandHandler(context)
85
95
  })
96
+ builder.registerCommand(DeleteUserFullCommand, (context: Context) => {
97
+ return new DeleteUserFullCommandHandler(context)
98
+ })
86
99
 
87
100
  // register services
101
+ builder.registerService(CookieService, (context: ServiceContext) => {
102
+ return new CookieService(context)
103
+ })
88
104
  builder.registerService(CredentialService, (context: ServiceContext) => {
89
105
  return new CredentialService(context)
90
106
  })
@@ -103,12 +119,8 @@ export class AppImplementation extends AppSdk {
103
119
  builder.registerService(OrganizationService, (context: ServiceContext) => {
104
120
  return new OrganizationService(context)
105
121
  })
106
-
107
- // register middlewares
108
- builder.registerMiddleware(async (req, next) => {
109
- req.headers.set("accept", "text/plain")
110
- req.headers.set("content-type", "application/json")
111
- return await next(req)
122
+ builder.registerService(AnonymousService, (context: ServiceContext) => {
123
+ return new AnonymousService(context)
112
124
  })
113
125
 
114
126
  // call customer setup
@@ -146,15 +158,15 @@ export class AppImplementation extends AppSdk {
146
158
  this.resolve(CommandService)?.register(command[0], command[1])
147
159
  })
148
160
 
149
- this.credential = builder.credential
150
-
151
161
  //-------------------------------------------------------------------------
152
162
  // register services
153
163
  //-------------------------------------------------------------------------
154
164
  const waitList: Array<Promise<void>> = []
155
165
  // call onRegister service's callback
156
166
  services.forEach(([serviceContext]) => {
157
- waitList.push(serviceContext.onRegister())
167
+ if (typeof serviceContext.onRegister === "function") {
168
+ waitList.push(serviceContext.onRegister())
169
+ }
158
170
  })
159
171
 
160
172
  // wait for all services to register
@@ -167,13 +179,31 @@ export class AppImplementation extends AppSdk {
167
179
  waitList.length = 0
168
180
  // call onStart service's callback
169
181
  services.forEach(([serviceContext]) => {
170
- waitList.push(serviceContext.onStart())
182
+ if (typeof serviceContext.onStart === "function") {
183
+ waitList.push(serviceContext.onStart())
184
+ }
171
185
  })
172
186
 
173
187
  // wait for all services to start
174
188
  await Promise.all(waitList)
175
189
  //-------------------------------------------------------------------------
176
190
 
191
+ // set credential
192
+ this.credential = builder.credential
193
+
194
+ // Check anonymous authorization
195
+ if (!isUnitTest(UnitTest.DO_NOT_START) && builder.credential instanceof DefaultCredential) {
196
+ const anonymous = this.resolve(AnonymousService)!
197
+ const {
198
+ token,
199
+ isValid
200
+ } = await anonymous.getToken()
201
+
202
+ if (isValid) {
203
+ this.credential = new AnonymousCredential(token)
204
+ }
205
+ }
206
+
177
207
  // start app, execute start command
178
208
  if (!isUnitTest(UnitTest.DO_NOT_START)) {
179
209
  await this.context.execute(new StartCommand())
@@ -181,7 +211,7 @@ export class AppImplementation extends AppSdk {
181
211
 
182
212
  // log app initialized
183
213
  if (!isUnitTest(UnitTest.DO_NOT_PRINT_INITIALIZED_LOG)) {
184
- console.log(`AppSDK ${this.name} initialized`)
214
+ console.log(`DataIsland ${this.name} initialized`)
185
215
  }
186
216
  }
187
217
  }
@@ -1,12 +1,12 @@
1
- import { AppImplementation } from "./app.impl"
1
+ import { DataIslandAppImpl } from "./app.impl"
2
2
  import { type AppBuilder } from "../appBuilder"
3
- import { AppSdk } from "../appSdk"
3
+ import { DataIslandApp } from "../dataIslandApp"
4
4
 
5
5
  export async function _createApp(
6
6
  name: string,
7
7
  setup?: (builder: AppBuilder) => Promise<void>
8
- ): Promise<AppSdk> {
9
- const app = new AppImplementation(name)
8
+ ): Promise<DataIslandApp> {
9
+ const app = new DataIslandAppImpl(name)
10
10
  await app.initialize(setup)
11
11
  return app
12
12
  }
@@ -1,9 +1,21 @@
1
+ /**
2
+ * Constructor type.
3
+ */
1
4
  export type Constructor<T> = new (...args: any[]) => T
2
5
 
6
+ /**
7
+ * Provider interface.
8
+ */
3
9
  abstract class Provider {
10
+ /**
11
+ * Provide method.
12
+ */
4
13
  abstract provide(): any | undefined
5
14
  }
6
15
 
16
+ /**
17
+ * MethodProvider class.
18
+ */
7
19
  class MethodProvider<T> extends Provider {
8
20
  private instance?: T
9
21
  private provided: boolean = false
@@ -25,6 +37,9 @@ class MethodProvider<T> extends Provider {
25
37
  }
26
38
  }
27
39
 
40
+ /**
41
+ * ValueProvider class.
42
+ */
28
43
  class ValueProvider<T> extends Provider {
29
44
  constructor(private readonly value: T | undefined) {
30
45
  super()
@@ -35,44 +50,77 @@ class ValueProvider<T> extends Provider {
35
50
  }
36
51
  }
37
52
 
53
+ /**
54
+ * RegistryItem class.
55
+ */
38
56
  export class RegistryItem<T> {
39
57
  constructor(
40
58
  private readonly registry: Map<Constructor<any>, Provider>,
41
59
  private readonly type: Constructor<T>
42
- ) {}
60
+ ) {
61
+ }
43
62
 
63
+ /**
64
+ * As value method.
65
+ * @param value
66
+ */
44
67
  asValue(value: T): void {
45
68
  this.registry.set(this.type, new ValueProvider<T>(value))
46
69
  }
47
70
 
71
+ /**
72
+ * As provider method.
73
+ * @param provider
74
+ * @param oneTime
75
+ */
48
76
  asProvider<T>(provider: () => T, oneTime: boolean = false): void {
49
77
  this.registry.set(this.type, new MethodProvider<T>(provider, oneTime))
50
78
  }
51
79
 
80
+ /**
81
+ * As factory method.
82
+ * @param provider
83
+ */
52
84
  asFactory<T>(provider: () => T): void {
53
85
  this.registry.set(this.type, new MethodProvider<T>(provider, false))
54
86
  }
55
87
 
88
+ /**
89
+ * As singleton method.
90
+ * @param provider
91
+ */
56
92
  asSingleton<T>(provider: () => T): void {
57
93
  this.registry.set(this.type, new MethodProvider<T>(provider, true))
58
94
  }
59
95
  }
60
96
 
97
+ /**
98
+ * Registry class.
99
+ */
61
100
  export class Registry {
62
- private readonly services: Map<Constructor<any>, Provider>
63
-
64
- constructor() {
65
- this.services = new Map()
66
- }
101
+ private readonly services: Map<Constructor<any>, Provider> = new Map()
67
102
 
103
+ /**
104
+ * Map method.
105
+ * @param type
106
+ */
68
107
  map<T>(type: Constructor<T>): RegistryItem<T> {
69
108
  return new RegistryItem<T>(this.services, type)
70
109
  }
71
110
 
111
+ /**
112
+ * Set method.
113
+ * @param type
114
+ * @param provider
115
+ */
72
116
  set<T>(type: Constructor<T>, provider: Provider): void {
73
117
  this.services.set(type, provider)
74
118
  }
75
119
 
120
+ /**
121
+ * Get method.
122
+ * @param type
123
+ */
76
124
  get<T>(type: Constructor<T>): T | undefined {
77
125
  const provider = this.services.get(type)
78
126
  if (provider === undefined) {
package/src/middleware.ts CHANGED
@@ -1,3 +1,5 @@
1
+ import { Request, Response } from "./utils/request"
2
+
1
3
  /**
2
4
  * DataIsland App request middleware.
3
5
  */
@@ -0,0 +1,43 @@
1
+ import { Service } from "./service"
2
+ import { CookieService } from "./cookieService"
3
+ import { createFingerprint } from "../utils/browserUtils"
4
+ import { RpcService } from "./rpcService"
5
+ import { ResponseUtils } from "./responseUtils"
6
+
7
+ export class AnonymousService extends Service {
8
+
9
+ async getToken(): Promise<{ token: string, isValid: boolean }> {
10
+ const cookie = this.resolve(CookieService)!
11
+ let token = cookie.anonymousToken
12
+ if (token === undefined || token === null || token.length === 0) {
13
+ const fingerprint = createFingerprint()
14
+ const response = await this.context
15
+ .resolve(RpcService)
16
+ ?.requestBuilder("api/v1/Users/anonymous")
17
+ .sendPutJson({
18
+ info: {
19
+ fingerprint: JSON.stringify({
20
+ userAgent: fingerprint.get("userAgent"),
21
+ language: fingerprint.get("language"),
22
+ hardwareConcurrency: fingerprint.get("hardware_concurrency"),
23
+ cookieEnabled: fingerprint.get("cookie_enabled"),
24
+ pixelRatio: fingerprint.get("pixel_ratio")
25
+ })
26
+ }
27
+ })
28
+
29
+ if (ResponseUtils.isFail(response)) {
30
+ await ResponseUtils.throwError("Failed to create anonymous token", response)
31
+ }
32
+
33
+ token = (await response!.json() as { token: string }).token
34
+
35
+ cookie.anonymousToken = token!
36
+ }
37
+
38
+ return {
39
+ token: token!,
40
+ isValid: token !== undefined && token !== null && token.length > 0
41
+ }
42
+ }
43
+ }
@@ -3,7 +3,8 @@ import { Context } from "../context"
3
3
  import { Constructor } from "../internal/registry"
4
4
 
5
5
  export abstract class CommandHandler<T> {
6
- constructor(protected readonly context: Context) {}
6
+ constructor(protected readonly context: Context) {
7
+ }
7
8
 
8
9
  resolve<T>(type: Constructor<T>): T | undefined {
9
10
  return this.context.resolve<T>(type)
@@ -12,7 +13,8 @@ export abstract class CommandHandler<T> {
12
13
  abstract execute(message: T): Promise<void>
13
14
  }
14
15
 
15
- export abstract class Command {}
16
+ export abstract class Command {
17
+ }
16
18
 
17
19
  export class CommandService extends Service {
18
20
  private readonly _registry: Map<
@@ -0,0 +1,16 @@
1
+ import { Service } from "./service"
2
+ import { getCookie, setCookie } from "../utils/browserUtils"
3
+
4
+ export class CookieService extends Service {
5
+ get anonymousToken(): string | undefined {
6
+ return getCookie("anonymous-token")
7
+ }
8
+
9
+ get anonymousTokenIsValid(): boolean {
10
+ return this.anonymousToken !== undefined && this.anonymousToken !== null && this.anonymousToken.length > 0
11
+ }
12
+
13
+ set anonymousToken(value: string | undefined) {
14
+ setCookie("anonymous-token", value)
15
+ }
16
+ }
@@ -0,0 +1 @@
1
+ export type HttpMethod = "POST" | "GET" | "PUT" | "DELETE" | "PATCH"
@@ -1,9 +1,10 @@
1
1
  import { Service } from "./service"
2
2
  import { type Middleware } from "../middleware"
3
3
  import { type Disposable } from "../disposable"
4
+ import { Request, Response } from "../utils/request"
4
5
 
5
6
  export class MiddlewareService extends Service {
6
- _middlewares: Middleware[] = []
7
+ private _middlewares: Middleware[] = []
7
8
 
8
9
  public useMiddleware(middleware: Middleware): Disposable {
9
10
  this._middlewares.push(middleware)
@@ -1,7 +1,7 @@
1
1
  import { Service } from "./service"
2
- import { Organizations } from "../storages/organizations"
2
+ import { Organizations } from "../storages/organizations/organizations"
3
3
  import { OrganizationDto, UserSettings } from "../dto/userInfoResponse"
4
- import { OrganizationsImpl } from "../storages/organizations.impl"
4
+ import { OrganizationsImpl } from "../storages/organizations/organizations.impl"
5
5
 
6
6
  export class OrganizationService extends Service {
7
7
  private _impl?: OrganizationsImpl
@@ -1,17 +1,19 @@
1
+ // import { Request, Response, Headers, FormData } from "../utils/request"
2
+
1
3
  export class RequestBuilder {
2
- private readonly _headers: Headers
4
+ private readonly _headers: Record<string, string>
3
5
  private readonly _searchParams: URLSearchParams
4
6
 
5
7
  constructor(
6
8
  private readonly _url: URL,
7
9
  private readonly _request: (req: Request) => Promise<Response>
8
10
  ) {
9
- this._headers = new Headers()
11
+ this._headers = {}
10
12
  this._searchParams = new URLSearchParams()
11
13
  }
12
14
 
13
15
  public header(name: string, value: string): RequestBuilder {
14
- this._headers.set(name, value)
16
+ this._headers[name] = value
15
17
  return this
16
18
  }
17
19
 
@@ -23,11 +25,11 @@ export class RequestBuilder {
23
25
  }
24
26
  if (headers instanceof Headers) {
25
27
  headers.forEach((value, name) => {
26
- this._headers.set(name, value)
28
+ this._headers[name] = value
27
29
  })
28
30
  } else {
29
31
  Object.entries(headers).forEach(([name, value]) => {
30
- this._headers.set(name, value)
32
+ this._headers[name] = value
31
33
  })
32
34
  }
33
35
  return this
@@ -48,18 +50,42 @@ export class RequestBuilder {
48
50
  return this
49
51
  }
50
52
 
51
- public async sendPost(body?: BodyInit | null | object): Promise<Response> {
53
+ public async sendPostFormData(body: FormData): Promise<Response> {
54
+ const url = this._url
55
+
56
+ // set search params
57
+ url.search = this._searchParams.toString()
58
+
59
+ // create request
60
+ const req = new Request(url, {
61
+ method: "POST",
62
+ headers: this._headers,
63
+ body: body
64
+ })
65
+
66
+ // discard content type
67
+ const reqAny = req as any
68
+ reqAny.discardContentType = true
69
+
70
+ return await this._request(
71
+ req
72
+ )
73
+ }
74
+
75
+ public async sendPostJson(body: object | null | undefined): Promise<Response> {
52
76
  const url = this._url
53
77
  url.search = this._searchParams.toString()
78
+ let json: string | undefined = undefined
54
79
  if (body !== undefined && body !== null && typeof body === "object") {
55
- body = JSON.stringify(body)
80
+ json = JSON.stringify(body)
56
81
  }
82
+ const request = new Request(url, {
83
+ method: "POST",
84
+ headers: this._headers,
85
+ body: json
86
+ })
57
87
  return await this._request(
58
- new Request(url, {
59
- method: "POST",
60
- headers: this._headers,
61
- body
62
- })
88
+ request
63
89
  )
64
90
  }
65
91
 
@@ -85,17 +111,18 @@ export class RequestBuilder {
85
111
  )
86
112
  }
87
113
 
88
- public async sendPut(body?: BodyInit | null | object): Promise<Response> {
114
+ public async sendPutJson(body: object | null | undefined): Promise<Response> {
89
115
  const url = this._url
90
116
  url.search = this._searchParams.toString()
117
+ let json: string | undefined = undefined
91
118
  if (body !== undefined && body !== null && typeof body === "object") {
92
- body = JSON.stringify(body)
119
+ json = JSON.stringify(body)
93
120
  }
94
121
  return await this._request(
95
122
  new Request(url, {
96
123
  method: "PUT",
97
124
  headers: this._headers,
98
- body
125
+ body: json
99
126
  })
100
127
  )
101
128
  }
@@ -1,3 +1,5 @@
1
+ import { Response } from "../utils/request"
2
+
1
3
  export class ResponseUtils {
2
4
  public static isOk(response?: Response | null): boolean {
3
5
  return response !== undefined && response !== null && response.ok