@neuralinnovations/dataisland-sdk 0.0.1-dev4 → 0.0.1-dev40
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.
- package/LICENSE +201 -0
- package/README.md +271 -36
- package/dist/index.d.ts +3 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +3 -0
- package/dist/index.js.map +1 -0
- package/dist/package.json +103 -0
- package/dist/src/appBuilder.d.ts +44 -0
- package/dist/src/appBuilder.d.ts.map +1 -0
- package/dist/src/appBuilder.js +10 -0
- package/dist/src/appBuilder.js.map +1 -0
- package/dist/src/commands/deleteUserFullCommandHandler.d.ts +7 -0
- package/dist/src/commands/deleteUserFullCommandHandler.d.ts.map +1 -0
- package/dist/src/commands/deleteUserFullCommandHandler.js +21 -0
- package/dist/src/commands/deleteUserFullCommandHandler.js.map +1 -0
- package/dist/src/commands/startCommandHandler.d.ts +7 -0
- package/dist/src/commands/startCommandHandler.d.ts.map +1 -0
- package/dist/src/commands/startCommandHandler.js +27 -0
- package/dist/src/commands/startCommandHandler.js.map +1 -0
- package/dist/src/context.d.ts +24 -0
- package/dist/src/context.d.ts.map +1 -0
- package/dist/src/context.js +31 -0
- package/dist/src/context.js.map +1 -0
- package/dist/src/credentials.d.ts +33 -0
- package/dist/src/credentials.d.ts.map +1 -0
- package/dist/src/credentials.js +87 -0
- package/dist/src/credentials.js.map +1 -0
- package/dist/src/dataIslandApp.d.ts +50 -0
- package/dist/src/dataIslandApp.d.ts.map +1 -0
- package/dist/src/dataIslandApp.js +10 -0
- package/dist/src/dataIslandApp.js.map +1 -0
- package/dist/src/disposable.d.ts +84 -0
- package/dist/src/disposable.d.ts.map +1 -0
- package/dist/src/disposable.js +147 -0
- package/dist/src/disposable.js.map +1 -0
- package/dist/src/dto/accessGroupResponse.d.ts +30 -0
- package/dist/src/dto/accessGroupResponse.d.ts.map +1 -0
- package/dist/src/dto/accessGroupResponse.js +3 -0
- package/dist/src/dto/accessGroupResponse.js.map +1 -0
- package/dist/src/dto/badRequestResponse.d.ts +6 -0
- package/dist/src/dto/badRequestResponse.d.ts.map +1 -0
- package/dist/src/dto/badRequestResponse.js +3 -0
- package/dist/src/dto/badRequestResponse.js.map +1 -0
- package/dist/src/dto/chatResponse.d.ts +83 -0
- package/dist/src/dto/chatResponse.d.ts.map +1 -0
- package/dist/src/dto/chatResponse.js +45 -0
- package/dist/src/dto/chatResponse.js.map +1 -0
- package/dist/src/dto/limitsResponse.d.ts +29 -0
- package/dist/src/dto/limitsResponse.d.ts.map +1 -0
- package/dist/src/dto/limitsResponse.js +13 -0
- package/dist/src/dto/limitsResponse.js.map +1 -0
- package/dist/src/dto/statisticsResponse.d.ts +11 -0
- package/dist/src/dto/statisticsResponse.d.ts.map +1 -0
- package/dist/src/dto/statisticsResponse.js +3 -0
- package/dist/src/dto/statisticsResponse.js.map +1 -0
- package/dist/src/dto/userInfoResponse.d.ts +88 -0
- package/dist/src/dto/userInfoResponse.d.ts.map +1 -0
- package/dist/src/dto/userInfoResponse.js +3 -0
- package/dist/src/dto/userInfoResponse.js.map +1 -0
- package/dist/src/dto/workspacesResponse.d.ts +45 -0
- package/dist/src/dto/workspacesResponse.d.ts.map +1 -0
- package/dist/src/dto/workspacesResponse.js +3 -0
- package/dist/src/dto/workspacesResponse.js.map +1 -0
- package/dist/src/events.d.ts +17 -0
- package/dist/src/events.d.ts.map +1 -0
- package/dist/src/events.js +52 -0
- package/dist/src/events.js.map +1 -0
- package/dist/src/index.d.ts +66 -0
- package/dist/src/index.d.ts.map +1 -0
- package/dist/src/index.js +113 -0
- package/dist/src/index.js.map +1 -0
- package/dist/src/internal/app.impl.d.ts +28 -0
- package/dist/src/internal/app.impl.d.ts.map +1 -0
- package/dist/src/internal/app.impl.js +173 -0
- package/dist/src/internal/app.impl.js.map +1 -0
- package/dist/src/internal/appBuilder.impl.d.ts +27 -0
- package/dist/src/internal/appBuilder.impl.d.ts.map +1 -0
- package/dist/src/internal/appBuilder.impl.js +71 -0
- package/dist/src/internal/appBuilder.impl.js.map +1 -0
- package/dist/src/internal/createApp.impl.d.ts +4 -0
- package/dist/src/internal/createApp.impl.d.ts.map +1 -0
- package/dist/src/internal/createApp.impl.js +11 -0
- package/dist/src/internal/createApp.impl.js.map +1 -0
- package/dist/src/internal/registry.d.ts +66 -0
- package/dist/src/internal/registry.d.ts.map +1 -0
- package/dist/src/internal/registry.js +114 -0
- package/dist/src/internal/registry.js.map +1 -0
- package/dist/src/middleware.d.ts +6 -0
- package/dist/src/middleware.d.ts.map +1 -0
- package/dist/src/middleware.js +3 -0
- package/dist/src/middleware.js.map +1 -0
- package/dist/src/services/anonymousService.d.ts +8 -0
- package/dist/src/services/anonymousService.d.ts.map +1 -0
- package/dist/src/services/anonymousService.js +41 -0
- package/dist/src/services/anonymousService.js.map +1 -0
- package/dist/src/services/commandService.d.ts +18 -0
- package/dist/src/services/commandService.d.ts.map +1 -0
- package/dist/src/services/commandService.js +40 -0
- package/dist/src/services/commandService.js.map +1 -0
- package/dist/src/services/cookieService.d.ts +7 -0
- package/dist/src/services/cookieService.d.ts.map +1 -0
- package/dist/src/services/cookieService.js +18 -0
- package/dist/src/services/cookieService.js.map +1 -0
- package/dist/src/services/credentialService.d.ts +9 -0
- package/dist/src/services/credentialService.d.ts.map +1 -0
- package/dist/src/services/credentialService.js +26 -0
- package/dist/src/services/credentialService.js.map +1 -0
- package/dist/src/services/httpMethod.d.ts +2 -0
- package/dist/src/services/httpMethod.d.ts.map +1 -0
- package/dist/src/services/httpMethod.js +3 -0
- package/dist/src/services/httpMethod.js.map +1 -0
- package/dist/src/services/middlewareService.d.ts +10 -0
- package/dist/src/services/middlewareService.d.ts.map +1 -0
- package/dist/src/services/middlewareService.js +34 -0
- package/dist/src/services/middlewareService.js.map +1 -0
- package/dist/src/services/organizationService.d.ts +10 -0
- package/dist/src/services/organizationService.d.ts.map +1 -0
- package/dist/src/services/organizationService.js +19 -0
- package/dist/src/services/organizationService.js.map +1 -0
- package/dist/src/services/requestBuilder.d.ts +17 -0
- package/dist/src/services/requestBuilder.d.ts.map +1 -0
- package/dist/src/services/requestBuilder.js +105 -0
- package/dist/src/services/requestBuilder.js.map +1 -0
- package/dist/src/services/responseUtils.d.ts +8 -0
- package/dist/src/services/responseUtils.d.ts.map +1 -0
- package/dist/src/services/responseUtils.js +40 -0
- package/dist/src/services/responseUtils.js.map +1 -0
- package/dist/src/services/rpcService.d.ts +77 -0
- package/dist/src/services/rpcService.d.ts.map +1 -0
- package/dist/src/services/rpcService.js +125 -0
- package/dist/src/services/rpcService.js.map +1 -0
- package/dist/src/services/service.d.ts +21 -0
- package/dist/src/services/service.d.ts.map +1 -0
- package/dist/src/services/service.js +41 -0
- package/dist/src/services/service.js.map +1 -0
- package/dist/src/services/userProfileService.d.ts +9 -0
- package/dist/src/services/userProfileService.d.ts.map +1 -0
- package/dist/src/services/userProfileService.js +43 -0
- package/dist/src/services/userProfileService.js.map +1 -0
- package/dist/src/storages/chats/answer.d.ts +41 -0
- package/dist/src/storages/chats/answer.d.ts.map +1 -0
- package/dist/src/storages/chats/answer.impl.d.ts +29 -0
- package/dist/src/storages/chats/answer.impl.d.ts.map +1 -0
- package/dist/src/storages/chats/answer.impl.js +116 -0
- package/dist/src/storages/chats/answer.impl.js.map +1 -0
- package/dist/src/storages/chats/answer.js +15 -0
- package/dist/src/storages/chats/answer.js.map +1 -0
- package/dist/src/storages/chats/chat.d.ts +43 -0
- package/dist/src/storages/chats/chat.d.ts.map +1 -0
- package/dist/src/storages/chats/chat.impl.d.ts +25 -0
- package/dist/src/storages/chats/chat.impl.d.ts.map +1 -0
- package/dist/src/storages/chats/chat.impl.js +85 -0
- package/dist/src/storages/chats/chat.impl.js.map +1 -0
- package/dist/src/storages/chats/chat.js +12 -0
- package/dist/src/storages/chats/chat.js.map +1 -0
- package/dist/src/storages/chats/chats.d.ts +45 -0
- package/dist/src/storages/chats/chats.d.ts.map +1 -0
- package/dist/src/storages/chats/chats.impl.d.ts +19 -0
- package/dist/src/storages/chats/chats.impl.d.ts.map +1 -0
- package/dist/src/storages/chats/chats.impl.js +147 -0
- package/dist/src/storages/chats/chats.impl.js.map +1 -0
- package/dist/src/storages/chats/chats.js +16 -0
- package/dist/src/storages/chats/chats.js.map +1 -0
- package/dist/src/storages/files/file.d.ts +47 -0
- package/dist/src/storages/files/file.d.ts.map +1 -0
- package/dist/src/storages/files/file.impl.d.ts +25 -0
- package/dist/src/storages/files/file.impl.d.ts.map +1 -0
- package/dist/src/storages/files/file.impl.js +93 -0
- package/dist/src/storages/files/file.impl.js.map +1 -0
- package/dist/src/storages/files/file.js +17 -0
- package/dist/src/storages/files/file.js.map +1 -0
- package/dist/src/storages/files/files.d.ts +39 -0
- package/dist/src/storages/files/files.d.ts.map +1 -0
- package/dist/src/storages/files/files.impl.d.ts +24 -0
- package/dist/src/storages/files/files.impl.d.ts.map +1 -0
- package/dist/src/storages/files/files.impl.js +168 -0
- package/dist/src/storages/files/files.impl.js.map +1 -0
- package/dist/src/storages/files/files.js +20 -0
- package/dist/src/storages/files/files.js.map +1 -0
- package/dist/src/storages/files/filesPage.d.ts +28 -0
- package/dist/src/storages/files/filesPage.d.ts.map +1 -0
- package/dist/src/storages/files/filesPage.impl.d.ts +15 -0
- package/dist/src/storages/files/filesPage.impl.d.ts.map +1 -0
- package/dist/src/storages/files/filesPage.impl.js +38 -0
- package/dist/src/storages/files/filesPage.impl.js.map +1 -0
- package/dist/src/storages/files/filesPage.js +10 -0
- package/dist/src/storages/files/filesPage.js.map +1 -0
- package/dist/src/storages/groups/group.d.ts +63 -0
- package/dist/src/storages/groups/group.d.ts.map +1 -0
- package/dist/src/storages/groups/group.impl.d.ts +38 -0
- package/dist/src/storages/groups/group.impl.d.ts.map +1 -0
- package/dist/src/storages/groups/group.impl.js +210 -0
- package/dist/src/storages/groups/group.impl.js.map +1 -0
- package/dist/src/storages/groups/group.js +15 -0
- package/dist/src/storages/groups/group.js.map +1 -0
- package/dist/src/storages/groups/groups.d.ts +39 -0
- package/dist/src/storages/groups/groups.d.ts.map +1 -0
- package/dist/src/storages/groups/groups.impl.d.ts +30 -0
- package/dist/src/storages/groups/groups.impl.d.ts.map +1 -0
- package/dist/src/storages/groups/groups.impl.js +132 -0
- package/dist/src/storages/groups/groups.impl.js.map +1 -0
- package/dist/src/storages/groups/groups.js +20 -0
- package/dist/src/storages/groups/groups.js.map +1 -0
- package/dist/src/storages/organizations/organization.d.ts +95 -0
- package/dist/src/storages/organizations/organization.d.ts.map +1 -0
- package/dist/src/storages/organizations/organization.impl.d.ts +42 -0
- package/dist/src/storages/organizations/organization.impl.d.ts.map +1 -0
- package/dist/src/storages/organizations/organization.impl.js +240 -0
- package/dist/src/storages/organizations/organization.impl.js.map +1 -0
- package/dist/src/storages/organizations/organization.js +18 -0
- package/dist/src/storages/organizations/organization.js.map +1 -0
- package/dist/src/storages/organizations/organizations.d.ts +46 -0
- package/dist/src/storages/organizations/organizations.d.ts.map +1 -0
- package/dist/src/storages/organizations/organizations.impl.d.ts +38 -0
- package/dist/src/storages/organizations/organizations.impl.d.ts.map +1 -0
- package/dist/src/storages/organizations/organizations.impl.js +158 -0
- package/dist/src/storages/organizations/organizations.impl.js.map +1 -0
- package/dist/src/storages/organizations/organizations.js +20 -0
- package/dist/src/storages/organizations/organizations.js.map +1 -0
- package/dist/src/storages/user/userProfile.d.ts +54 -0
- package/dist/src/storages/user/userProfile.d.ts.map +1 -0
- package/dist/src/storages/user/userProfile.impl.d.ts +21 -0
- package/dist/src/storages/user/userProfile.impl.d.ts.map +1 -0
- package/dist/src/storages/user/userProfile.impl.js +114 -0
- package/dist/src/storages/user/userProfile.impl.js.map +1 -0
- package/dist/src/storages/user/userProfile.js +12 -0
- package/dist/src/storages/user/userProfile.js.map +1 -0
- package/dist/src/storages/workspaces/workspace.d.ts +44 -0
- package/dist/src/storages/workspaces/workspace.d.ts.map +1 -0
- package/dist/src/storages/workspaces/workspace.impl.d.ts +23 -0
- package/dist/src/storages/workspaces/workspace.impl.d.ts.map +1 -0
- package/dist/src/storages/workspaces/workspace.impl.js +98 -0
- package/dist/src/storages/workspaces/workspace.impl.js.map +1 -0
- package/dist/src/storages/workspaces/workspace.js +18 -0
- package/dist/src/storages/workspaces/workspace.js.map +1 -0
- package/dist/src/storages/workspaces/workspaces.d.ts +47 -0
- package/dist/src/storages/workspaces/workspaces.d.ts.map +1 -0
- package/dist/src/storages/workspaces/workspaces.impl.d.ts +33 -0
- package/dist/src/storages/workspaces/workspaces.impl.d.ts.map +1 -0
- package/dist/src/storages/workspaces/workspaces.impl.js +152 -0
- package/dist/src/storages/workspaces/workspaces.impl.js.map +1 -0
- package/dist/src/storages/workspaces/workspaces.js +19 -0
- package/dist/src/storages/workspaces/workspaces.js.map +1 -0
- package/dist/src/unitTest.d.ts +12 -0
- package/dist/src/unitTest.d.ts.map +1 -0
- package/dist/src/unitTest.js +44 -0
- package/dist/src/unitTest.js.map +1 -0
- package/dist/src/utils/browserUtils.d.ts +4 -0
- package/dist/src/utils/browserUtils.d.ts.map +1 -0
- package/dist/src/utils/browserUtils.js +64 -0
- package/dist/src/utils/browserUtils.js.map +1 -0
- package/dist/src/utils/request.d.ts +6 -0
- package/dist/src/utils/request.d.ts.map +1 -0
- package/dist/src/utils/request.js +3 -0
- package/dist/src/utils/request.js.map +1 -0
- package/dist/src/utils/utils.d.ts +3 -0
- package/dist/src/utils/utils.d.ts.map +1 -0
- package/dist/src/utils/utils.js +13 -0
- package/dist/src/utils/utils.js.map +1 -0
- package/index.d.ts +1 -0
- package/index.js +1 -0
- package/package.json +46 -5
- package/src/commands/deleteUserFullCommandHandler.ts +19 -0
- package/src/commands/startCommandHandler.ts +16 -5
- package/src/context.ts +4 -2
- package/src/credentials.ts +22 -0
- package/src/{appSdk.ts → dataIslandApp.ts} +3 -3
- package/src/disposable.ts +18 -5
- package/src/dto/accessGroupResponse.ts +19 -16
- package/src/dto/badRequestResponse.ts +6 -0
- package/src/dto/chatResponse.ts +59 -54
- package/src/dto/limitsResponse.ts +33 -0
- package/src/dto/statisticsResponse.ts +12 -0
- package/src/dto/userInfoResponse.ts +59 -2
- package/src/dto/workspacesResponse.ts +5 -3
- package/src/index.ts +46 -24
- package/src/internal/app.impl.ts +42 -9
- package/src/internal/createApp.impl.ts +4 -4
- package/src/internal/registry.ts +54 -6
- package/src/middleware.ts +2 -0
- package/src/services/anonymousService.ts +43 -0
- package/src/services/commandService.ts +4 -2
- package/src/services/cookieService.ts +16 -0
- package/src/services/httpMethod.ts +1 -0
- package/src/services/middlewareService.ts +1 -0
- package/src/services/organizationService.ts +2 -2
- package/src/services/requestBuilder.ts +10 -8
- package/src/services/responseUtils.ts +12 -0
- package/src/services/rpcService.ts +1 -0
- package/src/services/userProfileService.ts +18 -4
- package/src/storages/chats/answer.impl.ts +160 -0
- package/src/storages/chats/answer.ts +53 -0
- package/src/storages/chats/chat.impl.ts +107 -0
- package/src/storages/chats/chat.ts +55 -0
- package/src/storages/chats/chats.impl.ts +204 -0
- package/src/storages/chats/chats.ts +53 -0
- package/src/storages/files/file.impl.ts +111 -0
- package/src/storages/files/file.ts +58 -0
- package/src/storages/{files.impl.ts → files/files.impl.ts} +67 -46
- package/src/storages/{files.ts → files/files.ts} +14 -7
- package/src/storages/files/filesPage.impl.ts +37 -0
- package/src/storages/{filesPage.ts → files/filesPage.ts} +6 -0
- package/src/storages/groups/group.impl.ts +276 -0
- package/src/storages/groups/group.ts +73 -0
- package/src/storages/groups/groups.impl.ts +175 -0
- package/src/storages/groups/groups.ts +45 -0
- package/src/storages/organizations/organization.impl.ts +357 -0
- package/src/storages/organizations/organization.ts +118 -0
- package/src/storages/{organizations.impl.ts → organizations/organizations.impl.ts} +31 -13
- package/src/storages/{organizations.ts → organizations/organizations.ts} +1 -1
- package/src/storages/user/userProfile.impl.ts +136 -0
- package/src/storages/user/userProfile.ts +69 -0
- package/src/storages/{workspace.impl.ts → workspaces/workspace.impl.ts} +27 -7
- package/src/storages/{workspace.ts → workspaces/workspace.ts} +8 -3
- package/src/storages/{workspaces.impl.ts → workspaces/workspaces.impl.ts} +27 -32
- package/src/storages/{workspaces.ts → workspaces/workspaces.ts} +6 -2
- package/src/unitTest.ts +14 -3
- package/src/utils/browserUtils.ts +68 -0
- package/src/utils/request.ts +6 -0
- package/src/utils/utils.ts +8 -0
- package/.browserslistrc +0 -5
- package/.editorconfig +0 -25
- package/.eslintrc.json +0 -44
- package/.github/workflows/publish-npm.yml +0 -28
- package/.prettierignore +0 -1
- package/.prettierrc +0 -11
- package/.yarnrc +0 -2
- package/babel.config.js +0 -6
- package/jest.config.ts +0 -199
- package/jest.setup.ts +0 -2
- package/src/storages/chat.ts +0 -21
- package/src/storages/chats.ts +0 -17
- package/src/storages/file.impl.ts +0 -69
- package/src/storages/file.ts +0 -28
- package/src/storages/groups.impl.ts +0 -337
- package/src/storages/groups.ts +0 -43
- package/src/storages/organization.impl.ts +0 -68
- package/src/storages/organization.ts +0 -33
- package/src/storages/userProfile.impl.ts +0 -56
- package/src/storages/userProfile.ts +0 -42
- package/test/commands.test.ts +0 -24
- package/test/data/test_file.pdf +0 -0
- package/test/disposable.test.ts +0 -39
- package/test/events.test.ts +0 -151
- package/test/files.test.ts +0 -52
- package/test/index.test.ts +0 -122
- package/test/organization.test.ts +0 -57
- package/test/registry.test.ts +0 -44
- package/test/services.test.ts +0 -56
- package/test/setup.ts +0 -54
- package/test/unitTest.test.ts +0 -21
- package/test/workspace.test.ts +0 -71
- package/tsconfig.json +0 -31
package/src/index.ts
CHANGED
@@ -1,26 +1,48 @@
|
|
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
|
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 "./
|
10
|
-
export * from "./
|
11
|
-
export * from "./
|
12
|
-
export * from "./
|
13
|
-
export * from "./
|
14
|
-
export * from "./
|
15
|
-
export * from "./
|
16
|
-
export * from "./
|
17
|
-
export * from "./storages/
|
18
|
-
export * from "./storages/
|
19
|
-
export * from "./storages/
|
20
|
-
export * from "./storages/
|
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"
|
21
29
|
|
22
|
-
|
23
|
-
|
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
|
+
export { isNullOrUndefined, isEmptyNullOrUndefined } from "./utils/utils"
|
41
|
+
|
42
|
+
// map of apps that are not ready to be used
|
43
|
+
const _appsNotReady = new Map<string, Promise<DataIslandApp>>()
|
44
|
+
// map of apps that are ready to be used
|
45
|
+
const _appsReady = new Map<string, DataIslandApp>()
|
24
46
|
|
25
47
|
/**
|
26
48
|
* Current SDK version.
|
@@ -37,7 +59,10 @@ export const DEFAULT_NAME = "[DEFAULT]"
|
|
37
59
|
*/
|
38
60
|
export const DEFAULT_HOST = "https://api.dataisland.com.ua"
|
39
61
|
|
40
|
-
|
62
|
+
/**
|
63
|
+
* Returns a list of DataIsland App instances.
|
64
|
+
*/
|
65
|
+
export function dataIslandInstances(): DataIslandApp[] {
|
41
66
|
return Array.from(_appsReady.values())
|
42
67
|
}
|
43
68
|
|
@@ -48,19 +73,19 @@ export function sdks(): AppSdk[] {
|
|
48
73
|
* @returns A DataIsland App instance.
|
49
74
|
* @example
|
50
75
|
* ```js
|
51
|
-
* import {
|
76
|
+
* import { dataIslandApp, DEFAULT_NAME } from '@neuralinnovations/dataisland-sdk'
|
52
77
|
*
|
53
|
-
* const app = await
|
78
|
+
* const app = await dataIslandApp(DEFAULT_NAME, builder => {
|
54
79
|
* builder.useHost("https://dataisland.com.ua")
|
55
80
|
* builder.useAutomaticDataCollectionEnabled(true)
|
56
81
|
* builder.useCredential(new BasicCredential("email", "password"))
|
57
82
|
* })
|
58
83
|
* ```
|
59
84
|
*/
|
60
|
-
export async function
|
85
|
+
export async function dataIslandApp(
|
61
86
|
name?: string,
|
62
87
|
setup?: (builder: AppBuilder) => Promise<void>
|
63
|
-
): Promise<
|
88
|
+
): Promise<DataIslandApp> {
|
64
89
|
name = name ?? DEFAULT_NAME
|
65
90
|
|
66
91
|
let appPromise = _appsNotReady.get(name)
|
@@ -78,12 +103,9 @@ export async function appSdk(
|
|
78
103
|
} else {
|
79
104
|
if (setup !== undefined) {
|
80
105
|
throw new Error(
|
81
|
-
`
|
106
|
+
`DataIsland ${name} is initializing. You can't setup the same again.`
|
82
107
|
)
|
83
108
|
}
|
84
109
|
}
|
85
110
|
return await appPromise
|
86
111
|
}
|
87
|
-
|
88
|
-
export { File } from "./storages/file"
|
89
|
-
export { FilesPage } from "./storages/filesPage"
|
package/src/internal/app.impl.ts
CHANGED
@@ -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 {
|
11
|
-
|
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
|
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,
|
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,6 +119,9 @@ export class AppImplementation extends AppSdk {
|
|
103
119
|
builder.registerService(OrganizationService, (context: ServiceContext) => {
|
104
120
|
return new OrganizationService(context)
|
105
121
|
})
|
122
|
+
builder.registerService(AnonymousService, (context: ServiceContext) => {
|
123
|
+
return new AnonymousService(context)
|
124
|
+
})
|
106
125
|
|
107
126
|
// call customer setup
|
108
127
|
if (setup !== undefined) {
|
@@ -139,8 +158,6 @@ export class AppImplementation extends AppSdk {
|
|
139
158
|
this.resolve(CommandService)?.register(command[0], command[1])
|
140
159
|
})
|
141
160
|
|
142
|
-
this.credential = builder.credential
|
143
|
-
|
144
161
|
//-------------------------------------------------------------------------
|
145
162
|
// register services
|
146
163
|
//-------------------------------------------------------------------------
|
@@ -171,6 +188,22 @@ export class AppImplementation extends AppSdk {
|
|
171
188
|
await Promise.all(waitList)
|
172
189
|
//-------------------------------------------------------------------------
|
173
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
|
+
|
174
207
|
// start app, execute start command
|
175
208
|
if (!isUnitTest(UnitTest.DO_NOT_START)) {
|
176
209
|
await this.context.execute(new StartCommand())
|
@@ -178,7 +211,7 @@ export class AppImplementation extends AppSdk {
|
|
178
211
|
|
179
212
|
// log app initialized
|
180
213
|
if (!isUnitTest(UnitTest.DO_NOT_PRINT_INITIALIZED_LOG)) {
|
181
|
-
console.log(`
|
214
|
+
console.log(`DataIsland ${this.name} initialized`)
|
182
215
|
}
|
183
216
|
}
|
184
217
|
}
|
@@ -1,12 +1,12 @@
|
|
1
|
-
import {
|
1
|
+
import { DataIslandAppImpl } from "./app.impl"
|
2
2
|
import { type AppBuilder } from "../appBuilder"
|
3
|
-
import {
|
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<
|
9
|
-
const app = new
|
8
|
+
): Promise<DataIslandApp> {
|
9
|
+
const app = new DataIslandAppImpl(name)
|
10
10
|
await app.initialize(setup)
|
11
11
|
return app
|
12
12
|
}
|
package/src/internal/registry.ts
CHANGED
@@ -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
@@ -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,6 +1,7 @@
|
|
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
7
|
private _middlewares: 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:
|
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 =
|
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
|
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
|
28
|
+
this._headers[name] = value
|
27
29
|
})
|
28
30
|
} else {
|
29
31
|
Object.entries(headers).forEach(([name, value]) => {
|
30
|
-
this._headers
|
32
|
+
this._headers[name] = value
|
31
33
|
})
|
32
34
|
}
|
33
35
|
return this
|
@@ -58,7 +60,7 @@ export class RequestBuilder {
|
|
58
60
|
const req = new Request(url, {
|
59
61
|
method: "POST",
|
60
62
|
headers: this._headers,
|
61
|
-
body
|
63
|
+
body: body
|
62
64
|
})
|
63
65
|
|
64
66
|
// discard content type
|
@@ -73,7 +75,7 @@ export class RequestBuilder {
|
|
73
75
|
public async sendPostJson(body: object | null | undefined): Promise<Response> {
|
74
76
|
const url = this._url
|
75
77
|
url.search = this._searchParams.toString()
|
76
|
-
let json: string |
|
78
|
+
let json: string | undefined = undefined
|
77
79
|
if (body !== undefined && body !== null && typeof body === "object") {
|
78
80
|
json = JSON.stringify(body)
|
79
81
|
}
|
@@ -112,7 +114,7 @@ export class RequestBuilder {
|
|
112
114
|
public async sendPutJson(body: object | null | undefined): Promise<Response> {
|
113
115
|
const url = this._url
|
114
116
|
url.search = this._searchParams.toString()
|
115
|
-
let json: string |
|
117
|
+
let json: string | undefined = undefined
|
116
118
|
if (body !== undefined && body !== null && typeof body === "object") {
|
117
119
|
json = JSON.stringify(body)
|
118
120
|
}
|
@@ -1,3 +1,6 @@
|
|
1
|
+
import { BadRequest } from "../dto/badRequestResponse"
|
2
|
+
import { Response } from "../utils/request"
|
3
|
+
|
1
4
|
export class ResponseUtils {
|
2
5
|
public static isOk(response?: Response | null): boolean {
|
3
6
|
return response !== undefined && response !== null && response.ok
|
@@ -7,6 +10,15 @@ export class ResponseUtils {
|
|
7
10
|
return !ResponseUtils.isOk(response)
|
8
11
|
}
|
9
12
|
|
13
|
+
public static async isLimitReached(response?: Response | null): Promise<boolean> {
|
14
|
+
if (response?.status == 15){
|
15
|
+
if (((await response?.json()) as BadRequest).code == 15){
|
16
|
+
return true
|
17
|
+
}
|
18
|
+
}
|
19
|
+
return false
|
20
|
+
}
|
21
|
+
|
10
22
|
public static async throwError(
|
11
23
|
message: string,
|
12
24
|
response: Response | undefined | null
|
@@ -1,6 +1,7 @@
|
|
1
1
|
import { Service, type ServiceContext } from "./service"
|
2
2
|
import { MiddlewareService } from "./middlewareService"
|
3
3
|
import { RequestBuilder } from "./requestBuilder"
|
4
|
+
// import { Request, Response, Headers, fetch } from "../utils/request"
|
4
5
|
|
5
6
|
/**
|
6
7
|
* Options for the RpcService.
|
@@ -1,21 +1,35 @@
|
|
1
1
|
import { Service } from "./service"
|
2
2
|
import { RpcService } from "./rpcService"
|
3
|
-
import { UserProfile } from "../storages/userProfile"
|
3
|
+
import { UserProfile } from "../storages/user/userProfile"
|
4
4
|
import { UserInfoResponse } from "../dto/userInfoResponse"
|
5
5
|
import { OrganizationService } from "./organizationService"
|
6
|
-
import { UserProfileImpl } from "../storages/userProfile.impl"
|
6
|
+
import { UserProfileImpl } from "../storages/user/userProfile.impl"
|
7
7
|
import { ResponseUtils } from "./responseUtils"
|
8
8
|
|
9
9
|
export class UserProfileService extends Service {
|
10
|
-
private readonly impl: UserProfileImpl = new UserProfileImpl()
|
10
|
+
private readonly impl: UserProfileImpl = new UserProfileImpl(this.context)
|
11
11
|
|
12
12
|
get userProfile(): UserProfile {
|
13
13
|
return this.impl
|
14
14
|
}
|
15
15
|
|
16
|
+
async merge(anonymous_token: string) {
|
17
|
+
const rpc = this.resolve(RpcService) as RpcService
|
18
|
+
const response = await rpc.requestBuilder("api/v1/Users/anonymous/merge")
|
19
|
+
.sendPostJson({
|
20
|
+
anonymousToken: anonymous_token
|
21
|
+
})
|
22
|
+
|
23
|
+
if (ResponseUtils.isFail(response)) {
|
24
|
+
await ResponseUtils.throwError("Failed to merge anonymous user", response)
|
25
|
+
}
|
26
|
+
|
27
|
+
await this.fetch()
|
28
|
+
}
|
29
|
+
|
16
30
|
async fetch() {
|
17
31
|
const rpc = this.resolve(RpcService) as RpcService
|
18
|
-
const response = await rpc.requestBuilder("api/
|
32
|
+
const response = await rpc.requestBuilder("api/v2/Users/self").sendGet()
|
19
33
|
if (ResponseUtils.isFail(response)) {
|
20
34
|
await ResponseUtils.throwError("Failed to fetch user profile", response)
|
21
35
|
}
|