@neuralinnovations/dataisland-sdk 0.0.1-dev6 → 0.0.1-dev61
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 +232 -3
- 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 +30 -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 +55 -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/acquiringResponse.d.ts +46 -0
- package/dist/src/dto/acquiringResponse.d.ts.map +1 -0
- package/dist/src/dto/acquiringResponse.js +11 -0
- package/dist/src/dto/acquiringResponse.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 +84 -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/quizResponse.d.ts +11 -0
- package/dist/src/dto/quizResponse.d.ts.map +1 -0
- package/dist/src/dto/quizResponse.js +3 -0
- package/dist/src/dto/quizResponse.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 +91 -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 +51 -0
- package/dist/src/dto/workspacesResponse.d.ts.map +1 -0
- package/dist/src/dto/workspacesResponse.js +11 -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 +73 -0
- package/dist/src/index.d.ts.map +1 -0
- package/dist/src/index.js +122 -0
- package/dist/src/index.js.map +1 -0
- package/dist/src/internal/app.impl.d.ts +30 -0
- package/dist/src/internal/app.impl.d.ts.map +1 -0
- package/dist/src/internal/app.impl.js +180 -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/acquiringService.d.ts +9 -0
- package/dist/src/services/acquiringService.d.ts.map +1 -0
- package/dist/src/services/acquiringService.js +19 -0
- package/dist/src/services/acquiringService.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 +18 -0
- package/dist/src/services/requestBuilder.d.ts.map +1 -0
- package/dist/src/services/requestBuilder.js +118 -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 +10 -0
- package/dist/src/services/userProfileService.d.ts.map +1 -0
- package/dist/src/services/userProfileService.js +59 -0
- package/dist/src/services/userProfileService.js.map +1 -0
- package/dist/src/storages/acquirings/acquiring.d.ts +41 -0
- package/dist/src/storages/acquirings/acquiring.d.ts.map +1 -0
- package/dist/src/storages/acquirings/acquiring.impl.d.ts +20 -0
- package/dist/src/storages/acquirings/acquiring.impl.d.ts.map +1 -0
- package/dist/src/storages/acquirings/acquiring.impl.js +92 -0
- package/dist/src/storages/acquirings/acquiring.impl.js.map +1 -0
- package/dist/src/storages/acquirings/acquiring.js +10 -0
- package/dist/src/storages/acquirings/acquiring.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 +119 -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 +55 -0
- package/dist/src/storages/chats/chat.d.ts.map +1 -0
- package/dist/src/storages/chats/chat.impl.d.ts +28 -0
- package/dist/src/storages/chats/chat.impl.d.ts.map +1 -0
- package/dist/src/storages/chats/chat.impl.js +106 -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 +51 -0
- package/dist/src/storages/chats/chats.d.ts.map +1 -0
- package/dist/src/storages/chats/chats.impl.d.ts +20 -0
- package/dist/src/storages/chats/chats.impl.d.ts.map +1 -0
- package/dist/src/storages/chats/chats.impl.js +184 -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 +59 -0
- package/dist/src/storages/files/file.d.ts.map +1 -0
- package/dist/src/storages/files/file.impl.d.ts +28 -0
- package/dist/src/storages/files/file.impl.d.ts.map +1 -0
- package/dist/src/storages/files/file.impl.js +130 -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 +43 -0
- package/dist/src/storages/groups/groups.d.ts.map +1 -0
- package/dist/src/storages/groups/groups.impl.d.ts +31 -0
- package/dist/src/storages/groups/groups.impl.d.ts.map +1 -0
- package/dist/src/storages/groups/groups.impl.js +136 -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 +103 -0
- package/dist/src/storages/organizations/organization.d.ts.map +1 -0
- package/dist/src/storages/organizations/organization.impl.d.ts +44 -0
- package/dist/src/storages/organizations/organization.impl.d.ts.map +1 -0
- package/dist/src/storages/organizations/organization.impl.js +255 -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 +51 -0
- package/dist/src/storages/organizations/organizations.d.ts.map +1 -0
- package/dist/src/storages/organizations/organizations.impl.d.ts +39 -0
- package/dist/src/storages/organizations/organizations.impl.d.ts.map +1 -0
- package/dist/src/storages/organizations/organizations.impl.js +173 -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 +59 -0
- package/dist/src/storages/user/userProfile.d.ts.map +1 -0
- package/dist/src/storages/user/userProfile.impl.d.ts +22 -0
- package/dist/src/storages/user/userProfile.impl.d.ts.map +1 -0
- package/dist/src/storages/user/userProfile.impl.js +118 -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 +153 -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 +19 -5
- package/src/context.ts +4 -2
- package/src/credentials.ts +22 -0
- package/src/dataIslandApp.ts +8 -2
- package/src/disposable.ts +18 -5
- package/src/dto/accessGroupResponse.ts +19 -16
- package/src/dto/acquiringResponse.ts +54 -0
- package/src/dto/badRequestResponse.ts +6 -0
- package/src/dto/chatResponse.ts +60 -54
- package/src/dto/limitsResponse.ts +32 -0
- package/src/dto/quizResponse.ts +12 -0
- package/src/dto/statisticsResponse.ts +12 -0
- package/src/dto/userInfoResponse.ts +63 -2
- package/src/dto/workspacesResponse.ts +17 -3
- package/src/index.ts +57 -16
- package/src/internal/app.impl.ts +54 -12
- package/src/internal/registry.ts +54 -6
- package/src/middleware.ts +2 -0
- package/src/services/acquiringService.ts +21 -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 +26 -8
- package/src/services/responseUtils.ts +12 -0
- package/src/services/rpcService.ts +1 -0
- package/src/services/userProfileService.ts +36 -4
- package/src/storages/acquirings/acquiring.impl.ts +132 -0
- package/src/storages/acquirings/acquiring.ts +54 -0
- package/src/storages/chats/answer.impl.ts +162 -0
- package/src/storages/chats/answer.ts +53 -0
- package/src/storages/chats/chat.impl.ts +139 -0
- package/src/storages/chats/chat.ts +70 -0
- package/src/storages/chats/chats.impl.ts +255 -0
- package/src/storages/chats/chats.ts +60 -0
- package/src/storages/files/file.impl.ts +162 -0
- package/src/storages/files/file.ts +74 -0
- package/src/storages/{files.impl.ts → files/files.impl.ts} +88 -67
- 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 +180 -0
- package/src/storages/groups/groups.ts +50 -0
- package/src/storages/organizations/organization.impl.ts +387 -0
- package/src/storages/organizations/organization.ts +127 -0
- package/src/storages/{organizations.impl.ts → organizations/organizations.impl.ts} +55 -13
- package/src/storages/{organizations.ts → organizations/organizations.ts} +7 -1
- package/src/storages/user/userProfile.impl.ts +140 -0
- package/src/storages/user/userProfile.ts +75 -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} +29 -32
- package/src/storages/{workspaces.ts → workspaces/workspaces.ts} +6 -2
- package/src/unitTest.ts +3 -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
@@ -0,0 +1,180 @@
|
|
1
|
+
import { Context } from "../../context"
|
2
|
+
import {
|
3
|
+
AccessGroupResponse,
|
4
|
+
AccessGroupsResponse
|
5
|
+
} from "../../dto/accessGroupResponse"
|
6
|
+
import { RpcService } from "../../services/rpcService"
|
7
|
+
import { Groups, GroupsEvent } from "./groups"
|
8
|
+
import { OrganizationImpl } from "../organizations/organization.impl"
|
9
|
+
import { ResponseUtils } from "../../services/responseUtils"
|
10
|
+
import { Group, GroupId } from "./group"
|
11
|
+
import { GroupImpl } from "./group.impl"
|
12
|
+
|
13
|
+
export class GroupsImpl extends Groups {
|
14
|
+
|
15
|
+
private _groups: Group[] = []
|
16
|
+
|
17
|
+
constructor(
|
18
|
+
public readonly organization: OrganizationImpl,
|
19
|
+
private readonly context: Context
|
20
|
+
) {
|
21
|
+
super()
|
22
|
+
}
|
23
|
+
|
24
|
+
get collection(): readonly Group[] {
|
25
|
+
return this._groups
|
26
|
+
}
|
27
|
+
|
28
|
+
async initialize() {
|
29
|
+
await this.internalInit()
|
30
|
+
}
|
31
|
+
|
32
|
+
async reload(){
|
33
|
+
this._groups = []
|
34
|
+
await this.internalInit()
|
35
|
+
}
|
36
|
+
|
37
|
+
async create(name: string, permits: {
|
38
|
+
isAdmin: boolean
|
39
|
+
}, memberIds: string[]): Promise<Group> {
|
40
|
+
return await this.internalCreate(name, permits, memberIds)
|
41
|
+
}
|
42
|
+
|
43
|
+
get(id: GroupId): Group | undefined {
|
44
|
+
return this._groups.find(group => group.id === id)
|
45
|
+
}
|
46
|
+
|
47
|
+
async delete(id: GroupId): Promise<void> {
|
48
|
+
return await this.internalDeleteGroup(id)
|
49
|
+
}
|
50
|
+
|
51
|
+
//----------------------------------------------------------------------------
|
52
|
+
// INTERNALS
|
53
|
+
//----------------------------------------------------------------------------
|
54
|
+
|
55
|
+
/**
|
56
|
+
* Init access groups.
|
57
|
+
*/
|
58
|
+
async internalInit(): Promise<void> {
|
59
|
+
// fetch groups
|
60
|
+
const response = await this.context.resolve(RpcService)
|
61
|
+
?.requestBuilder("api/v1/Organizations/access_groups")
|
62
|
+
.searchParam("id", this.organization.id)
|
63
|
+
.sendGet()
|
64
|
+
|
65
|
+
// check response status
|
66
|
+
if (ResponseUtils.isFail(response)) {
|
67
|
+
await ResponseUtils.throwError(`Failed to get groups for organization: ${this.organization.id}`, response)
|
68
|
+
}
|
69
|
+
|
70
|
+
// parse groups from the server's response
|
71
|
+
const groups = (await response!.json()) as AccessGroupsResponse
|
72
|
+
|
73
|
+
const wait: Promise<Group>[] = []
|
74
|
+
|
75
|
+
// init groups
|
76
|
+
for (const gr of groups.groups) {
|
77
|
+
// create group implementation
|
78
|
+
const group = new GroupImpl(this.context, this.organization).initFrom(gr.id)
|
79
|
+
|
80
|
+
// add to the wait list
|
81
|
+
wait.push(group)
|
82
|
+
}
|
83
|
+
|
84
|
+
// wait for all groups
|
85
|
+
const groupsResult = await Promise.all(wait)
|
86
|
+
|
87
|
+
// add groups to the collection
|
88
|
+
for (const group of groupsResult) {
|
89
|
+
// add group to the collection
|
90
|
+
this._groups.push(group)
|
91
|
+
}
|
92
|
+
}
|
93
|
+
|
94
|
+
async internalCreate(name: string, permits: {
|
95
|
+
isAdmin: boolean
|
96
|
+
}, memberIds: string[]): Promise<Group> {
|
97
|
+
if (name === undefined || name === null) {
|
98
|
+
throw new Error("Group create, name is undefined or null")
|
99
|
+
}
|
100
|
+
if (name.length === 0 || name.trim().length === 0) {
|
101
|
+
throw new Error("Group create, name is empty")
|
102
|
+
}
|
103
|
+
|
104
|
+
// send request to the server
|
105
|
+
const response = await this.context
|
106
|
+
.resolve(RpcService)
|
107
|
+
?.requestBuilder("api/v1/AccessGroups")
|
108
|
+
.sendPostJson({
|
109
|
+
name: name,
|
110
|
+
organizationId: this.organization.id,
|
111
|
+
permits: permits,
|
112
|
+
memberIds: memberIds
|
113
|
+
})
|
114
|
+
|
115
|
+
// check response status
|
116
|
+
if (ResponseUtils.isFail(response)) {
|
117
|
+
await ResponseUtils.throwError(`Failed to create group, organization: ${this.organization.id}`, response)
|
118
|
+
}
|
119
|
+
// parse group from the server's response
|
120
|
+
const content = (await response!.json()) as AccessGroupResponse
|
121
|
+
|
122
|
+
// create group implementation
|
123
|
+
const group = await new GroupImpl(this.context, this.organization).initFrom(content.group.id)
|
124
|
+
|
125
|
+
// add group to the collection
|
126
|
+
this._groups.push(group)
|
127
|
+
|
128
|
+
// dispatch event
|
129
|
+
this.dispatch({
|
130
|
+
type: GroupsEvent.ADDED,
|
131
|
+
data: group
|
132
|
+
})
|
133
|
+
|
134
|
+
return group
|
135
|
+
}
|
136
|
+
|
137
|
+
/**
|
138
|
+
* Delete group.
|
139
|
+
* @param id
|
140
|
+
*/
|
141
|
+
async internalDeleteGroup(id: GroupId): Promise<void> {
|
142
|
+
if (id === undefined || id === null) {
|
143
|
+
throw new Error("Group delete, id is undefined or null")
|
144
|
+
}
|
145
|
+
if (id.length === 0 || id.trim().length === 0) {
|
146
|
+
throw new Error("Group delete, id is empty")
|
147
|
+
}
|
148
|
+
|
149
|
+
// send request to the server
|
150
|
+
const response = await this.context
|
151
|
+
.resolve(RpcService)
|
152
|
+
?.requestBuilder("/api/v1/AccessGroups")
|
153
|
+
.searchParam("groupId", id)
|
154
|
+
.sendDelete()
|
155
|
+
|
156
|
+
// check response status
|
157
|
+
if (ResponseUtils.isFail(response)) {
|
158
|
+
await ResponseUtils.throwError(`Failed to delete group: ${id}, organization: ${this.organization.id}`, response)
|
159
|
+
}
|
160
|
+
|
161
|
+
// delete group from collection
|
162
|
+
const group = <GroupImpl>this._groups.find(f => f.id === id)
|
163
|
+
const index = this._groups.indexOf(group)
|
164
|
+
if (index < 0) {
|
165
|
+
throw new Error("Group delete, index is not found")
|
166
|
+
}
|
167
|
+
|
168
|
+
// remove group from collection
|
169
|
+
this._groups.splice(index, 1)
|
170
|
+
|
171
|
+
// dispatch event, group removed
|
172
|
+
this.dispatch({
|
173
|
+
type: GroupsEvent.REMOVED,
|
174
|
+
data: group
|
175
|
+
})
|
176
|
+
|
177
|
+
// dispose group
|
178
|
+
group.dispose()
|
179
|
+
}
|
180
|
+
}
|
@@ -0,0 +1,50 @@
|
|
1
|
+
import { EventDispatcher } from "../../events"
|
2
|
+
import { Group, GroupId } from "./group"
|
3
|
+
|
4
|
+
/**
|
5
|
+
* Group event.
|
6
|
+
*/
|
7
|
+
export enum GroupsEvent {
|
8
|
+
ADDED = "added",
|
9
|
+
REMOVED = "removed",
|
10
|
+
UPDATED = "updated"
|
11
|
+
}
|
12
|
+
|
13
|
+
/**
|
14
|
+
* Groups storage.
|
15
|
+
*/
|
16
|
+
export abstract class Groups extends EventDispatcher<GroupsEvent, Group> {
|
17
|
+
|
18
|
+
/**
|
19
|
+
* Collection.
|
20
|
+
*/
|
21
|
+
abstract get collection(): ReadonlyArray<Group>
|
22
|
+
|
23
|
+
/**
|
24
|
+
* Reload groups
|
25
|
+
*/
|
26
|
+
abstract reload(): Promise<void>
|
27
|
+
|
28
|
+
/**
|
29
|
+
* Create new group.
|
30
|
+
* @param name
|
31
|
+
* @param permits
|
32
|
+
* @param memberIds
|
33
|
+
*/
|
34
|
+
abstract create(name: string, permits: {
|
35
|
+
isAdmin: boolean
|
36
|
+
}, memberIds: string[]): Promise<Group>
|
37
|
+
|
38
|
+
/**
|
39
|
+
* Get group by id.
|
40
|
+
* @param id
|
41
|
+
*/
|
42
|
+
abstract get(id: GroupId): Group | undefined
|
43
|
+
|
44
|
+
/**
|
45
|
+
* delete group by id.
|
46
|
+
* @param id
|
47
|
+
*/
|
48
|
+
abstract delete(id: GroupId): Promise<void>
|
49
|
+
|
50
|
+
}
|
@@ -0,0 +1,387 @@
|
|
1
|
+
import {OrganizationId} from "./organizations"
|
2
|
+
import {Disposable} from "../../disposable"
|
3
|
+
import {
|
4
|
+
CurrentLimitItem,
|
5
|
+
CurrentLimitRecordData,
|
6
|
+
CurrentLimitsData,
|
7
|
+
OrganizationDto,
|
8
|
+
OrganizationSegmentData,
|
9
|
+
UserDto,
|
10
|
+
UserLimitsData,
|
11
|
+
UsersStatisticsResponse
|
12
|
+
} from "../../dto/userInfoResponse"
|
13
|
+
import {WorkspaceId, Workspaces} from "../workspaces/workspaces"
|
14
|
+
import {WorkspacesImpl} from "../workspaces/workspaces.impl"
|
15
|
+
import {Context} from "../../context"
|
16
|
+
import {Organization, OrganizationEvent} from "./organization"
|
17
|
+
import {GroupsImpl} from "../groups/groups.impl"
|
18
|
+
import {Groups} from "../groups/groups"
|
19
|
+
import {ChatsImpl} from "../chats/chats.impl"
|
20
|
+
import {Chats} from "../chats/chats"
|
21
|
+
import {RpcService} from "../../services/rpcService"
|
22
|
+
import {ResponseUtils} from "../../services/responseUtils"
|
23
|
+
import {StatisticsResponse} from "../../dto/statisticsResponse"
|
24
|
+
import {
|
25
|
+
LimitActionType,
|
26
|
+
SegmentData,
|
27
|
+
SegmentsData
|
28
|
+
} from "../../dto/limitsResponse"
|
29
|
+
import {InviteCodeResponse} from "../../dto/accessGroupResponse"
|
30
|
+
import {FileId} from "../files/file"
|
31
|
+
import {QuizData} from "../../dto/quizResponse"
|
32
|
+
|
33
|
+
export class OrganizationImpl extends Organization implements Disposable {
|
34
|
+
private _isDisposed: boolean = false
|
35
|
+
private _isAdmin: boolean = false
|
36
|
+
private _content?: OrganizationDto
|
37
|
+
private readonly _workspaces: WorkspacesImpl
|
38
|
+
private readonly _accessGroups: GroupsImpl
|
39
|
+
private readonly _chats: ChatsImpl
|
40
|
+
|
41
|
+
constructor(private readonly context: Context) {
|
42
|
+
super()
|
43
|
+
this._workspaces = new WorkspacesImpl(this, this.context)
|
44
|
+
this._accessGroups = new GroupsImpl(this, this.context)
|
45
|
+
this._chats = new ChatsImpl(this, this.context)
|
46
|
+
}
|
47
|
+
|
48
|
+
public async initFrom(
|
49
|
+
content: OrganizationDto,
|
50
|
+
isAdmin: boolean
|
51
|
+
): Promise<OrganizationImpl> {
|
52
|
+
this._content = content
|
53
|
+
this._isAdmin = isAdmin
|
54
|
+
|
55
|
+
// init workspaces by organization id
|
56
|
+
const promises = [
|
57
|
+
this._workspaces.initFrom(content.id),
|
58
|
+
this._chats.initFrom(content.id),
|
59
|
+
this._accessGroups.initialize()
|
60
|
+
]
|
61
|
+
|
62
|
+
await Promise.all(promises)
|
63
|
+
|
64
|
+
return this
|
65
|
+
}
|
66
|
+
|
67
|
+
get isAdmin(): boolean {
|
68
|
+
return this._isAdmin
|
69
|
+
}
|
70
|
+
|
71
|
+
get isDisposed(): boolean {
|
72
|
+
return this._isDisposed
|
73
|
+
}
|
74
|
+
|
75
|
+
dispose(): void {
|
76
|
+
this._isDisposed = true
|
77
|
+
}
|
78
|
+
|
79
|
+
get id(): OrganizationId {
|
80
|
+
return <OrganizationId>this._content?.id
|
81
|
+
}
|
82
|
+
|
83
|
+
get name(): string {
|
84
|
+
return <OrganizationId>this._content?.profile.name
|
85
|
+
}
|
86
|
+
|
87
|
+
get description(): string {
|
88
|
+
return <OrganizationId>this._content?.profile.description
|
89
|
+
}
|
90
|
+
|
91
|
+
get workspaces(): Workspaces {
|
92
|
+
return this._workspaces
|
93
|
+
}
|
94
|
+
|
95
|
+
get accessGroups(): Groups {
|
96
|
+
return this._accessGroups
|
97
|
+
}
|
98
|
+
|
99
|
+
get chats(): Chats {
|
100
|
+
return this._chats
|
101
|
+
}
|
102
|
+
|
103
|
+
async members(): Promise<UserDto[]> {
|
104
|
+
// send request to the server
|
105
|
+
const response = await this.context
|
106
|
+
.resolve(RpcService)
|
107
|
+
?.requestBuilder("api/v1/Organizations/members")
|
108
|
+
.searchParam("id", this.id)
|
109
|
+
.sendGet()
|
110
|
+
|
111
|
+
// check response status
|
112
|
+
if (ResponseUtils.isFail(response)) {
|
113
|
+
await ResponseUtils.throwError(
|
114
|
+
`Failed during fetch of organization members ${this.id}`,
|
115
|
+
response
|
116
|
+
)
|
117
|
+
}
|
118
|
+
|
119
|
+
return (await response!.json() as {
|
120
|
+
members: UserDto[]
|
121
|
+
}).members as UserDto[]
|
122
|
+
}
|
123
|
+
|
124
|
+
async change(name: string, description: string): Promise<void> {
|
125
|
+
if (!this._content) {
|
126
|
+
throw new Error("Organization is not loaded.")
|
127
|
+
}
|
128
|
+
|
129
|
+
if (name === this.name && description === this.description) {
|
130
|
+
return Promise.resolve()
|
131
|
+
}
|
132
|
+
if (name === undefined || name === null || name.trim() === "") {
|
133
|
+
throw new Error("Name is required. Please provide a valid name.")
|
134
|
+
}
|
135
|
+
if (
|
136
|
+
description === undefined ||
|
137
|
+
description === null ||
|
138
|
+
description.trim() === ""
|
139
|
+
) {
|
140
|
+
throw new Error(
|
141
|
+
"Description is required. Please provide a valid description."
|
142
|
+
)
|
143
|
+
}
|
144
|
+
|
145
|
+
const response = await this.context
|
146
|
+
.resolve(RpcService)
|
147
|
+
?.requestBuilder("api/v1/Organizations")
|
148
|
+
.sendPutJson({
|
149
|
+
organizationId: this.id,
|
150
|
+
profile: {
|
151
|
+
name,
|
152
|
+
description
|
153
|
+
}
|
154
|
+
})
|
155
|
+
|
156
|
+
if (ResponseUtils.isFail(response)) {
|
157
|
+
await ResponseUtils.throwError("Failed to change organization", response)
|
158
|
+
}
|
159
|
+
|
160
|
+
if (this._content) {
|
161
|
+
this._content.profile.name = name
|
162
|
+
this._content.profile.description = description
|
163
|
+
}
|
164
|
+
|
165
|
+
this.dispatch({
|
166
|
+
type: OrganizationEvent.CHANGED,
|
167
|
+
data: this
|
168
|
+
})
|
169
|
+
}
|
170
|
+
|
171
|
+
async statistics(dateFrom: number, dateTo: number): Promise<StatisticsResponse> {
|
172
|
+
// send request to the server
|
173
|
+
const response = await this.context
|
174
|
+
.resolve(RpcService)
|
175
|
+
?.requestBuilder("api/v1/Stats/organization")
|
176
|
+
.searchParam("organizationId", this.id)
|
177
|
+
.searchParam("dateFrom", dateFrom.toString())
|
178
|
+
.searchParam("dateTo", dateTo.toString())
|
179
|
+
.sendGet()
|
180
|
+
|
181
|
+
// check response status
|
182
|
+
if (ResponseUtils.isFail(response)) {
|
183
|
+
await ResponseUtils.throwError(
|
184
|
+
`Failed during fetch of organization statistics ${this.id}`,
|
185
|
+
response
|
186
|
+
)
|
187
|
+
}
|
188
|
+
|
189
|
+
return await response!.json() as StatisticsResponse
|
190
|
+
}
|
191
|
+
|
192
|
+
async membersStatistics(dateFrom: number, dateTo: number): Promise<UsersStatisticsResponse> {
|
193
|
+
// send request to the server
|
194
|
+
const response = await this.context
|
195
|
+
.resolve(RpcService)
|
196
|
+
?.requestBuilder("api/v1/Stats/organization/members")
|
197
|
+
.searchParam("organizationId", this.id)
|
198
|
+
.searchParam("dateFrom", dateFrom.toString())
|
199
|
+
.searchParam("dateTo", dateTo.toString())
|
200
|
+
.sendGet()
|
201
|
+
|
202
|
+
// check response status
|
203
|
+
if (ResponseUtils.isFail(response)) {
|
204
|
+
await ResponseUtils.throwError(
|
205
|
+
`Failed during fetch of organization members statistics ${this.id}`,
|
206
|
+
response
|
207
|
+
)
|
208
|
+
}
|
209
|
+
|
210
|
+
return await response!.json() as UsersStatisticsResponse
|
211
|
+
}
|
212
|
+
|
213
|
+
async userStatistic(userId: string, dateFrom: number, dateTo: number): Promise<StatisticsResponse> {
|
214
|
+
// send request to the server
|
215
|
+
const response = await this.context
|
216
|
+
.resolve(RpcService)
|
217
|
+
?.requestBuilder("api/v1/Stats/user")
|
218
|
+
.searchParam("userId", userId)
|
219
|
+
.searchParam("organizationId", this.id)
|
220
|
+
.searchParam("dateFrom", dateFrom.toString())
|
221
|
+
.searchParam("dateTo", dateTo.toString())
|
222
|
+
.sendGet()
|
223
|
+
|
224
|
+
// check response status
|
225
|
+
if (ResponseUtils.isFail(response)) {
|
226
|
+
await ResponseUtils.throwError(
|
227
|
+
`Failed during fetch of user statistics ${this.id}`,
|
228
|
+
response
|
229
|
+
)
|
230
|
+
}
|
231
|
+
|
232
|
+
return await response!.json() as StatisticsResponse
|
233
|
+
}
|
234
|
+
|
235
|
+
async userLimits(): Promise<CurrentLimitsData> {
|
236
|
+
// fetch limits
|
237
|
+
const response = await this.context.resolve(RpcService)
|
238
|
+
?.requestBuilder("api/v1/Users/limits")
|
239
|
+
.sendGet()
|
240
|
+
|
241
|
+
// check response status
|
242
|
+
if (ResponseUtils.isFail(response)) {
|
243
|
+
await ResponseUtils.throwError(`Failed to get limits in organization: ${this.id}`, response)
|
244
|
+
}
|
245
|
+
|
246
|
+
// parse limits from the server's response
|
247
|
+
const limits = (await response!.json()) as UserLimitsData
|
248
|
+
|
249
|
+
const currentLimits = {
|
250
|
+
segment: limits.userSegment.key,
|
251
|
+
limits: []
|
252
|
+
} as CurrentLimitsData
|
253
|
+
for (const limit of limits.userLimits) {
|
254
|
+
const type = limit.action as LimitActionType
|
255
|
+
const currentItem = {
|
256
|
+
action: type,
|
257
|
+
records: []
|
258
|
+
} as CurrentLimitItem
|
259
|
+
|
260
|
+
if (limit.records.length == 0) continue
|
261
|
+
|
262
|
+
for (const record of limit.records) {
|
263
|
+
const segmentRecord = limits.userSegment.dayItems.find(item => item.daysCount == record.daysCount)
|
264
|
+
if (segmentRecord == null) {
|
265
|
+
throw new Error(`Invalid response during get limits in organization: ${this.id}. Days count with ${type} not found in segment ${limits.userSegment.key}`)
|
266
|
+
}
|
267
|
+
const actionRecord = segmentRecord?.actionItems.find(item => item.type == type)
|
268
|
+
if (actionRecord == null) {
|
269
|
+
throw new Error(`Invalid response during get limits in organization: ${this.id}. Type ${type} not found in segment ${limits.userSegment.key}`)
|
270
|
+
}
|
271
|
+
|
272
|
+
const currentRecord = {} as CurrentLimitRecordData
|
273
|
+
currentRecord.daysCount = record.daysCount
|
274
|
+
currentRecord.activeTill = record.activeTill
|
275
|
+
currentRecord.all = actionRecord?.tokenLimit ?? actionRecord?.countLimit
|
276
|
+
|
277
|
+
const available = record.tokenLimit ?? record.countLimit
|
278
|
+
currentRecord.used = currentRecord.all - available
|
279
|
+
|
280
|
+
currentItem.records.push(currentRecord)
|
281
|
+
}
|
282
|
+
|
283
|
+
currentLimits.limits.push(currentItem)
|
284
|
+
}
|
285
|
+
|
286
|
+
return currentLimits
|
287
|
+
}
|
288
|
+
|
289
|
+
async organizationLimits(): Promise<SegmentData> {
|
290
|
+
// fetch limits
|
291
|
+
const response = await this.context.resolve(RpcService)
|
292
|
+
?.requestBuilder("api/v1/Descriptions/limits/organization")
|
293
|
+
.searchParam("organizationId", this.id)
|
294
|
+
.sendGet()
|
295
|
+
|
296
|
+
// check response status
|
297
|
+
if (ResponseUtils.isFail(response)) {
|
298
|
+
await ResponseUtils.throwError(`Failed to get limits in organization: ${this.id}`, response)
|
299
|
+
}
|
300
|
+
|
301
|
+
const json = await response!.json()
|
302
|
+
|
303
|
+
// parse limits from the server's response
|
304
|
+
const limits = (json as OrganizationSegmentData).segment
|
305
|
+
|
306
|
+
return limits
|
307
|
+
}
|
308
|
+
|
309
|
+
async limitSegments(): Promise<SegmentData[]> {
|
310
|
+
// fetch limits
|
311
|
+
const response = await this.context.resolve(RpcService)
|
312
|
+
?.requestBuilder("api/v1/Descriptions/limits/segments")
|
313
|
+
.sendGet()
|
314
|
+
|
315
|
+
// check response status
|
316
|
+
if (ResponseUtils.isFail(response)) {
|
317
|
+
await ResponseUtils.throwError(`Failed to get limits in organization: ${this.id}`, response)
|
318
|
+
}
|
319
|
+
const json = await response!.json()
|
320
|
+
|
321
|
+
// parse limits from the server's response
|
322
|
+
const limits = (json as SegmentsData).segments
|
323
|
+
|
324
|
+
return limits
|
325
|
+
}
|
326
|
+
|
327
|
+
async inviteUsers(emails: string[], accessGroups: string[]): Promise<void> {
|
328
|
+
const response = await this.context
|
329
|
+
.resolve(RpcService)
|
330
|
+
?.requestBuilder("api/v1/Invites")
|
331
|
+
.sendPostJson({
|
332
|
+
organizationId: this.id,
|
333
|
+
emails: emails,
|
334
|
+
accessGroupIds: accessGroups
|
335
|
+
})
|
336
|
+
if (ResponseUtils.isFail(response)) {
|
337
|
+
await ResponseUtils.throwError(
|
338
|
+
`Invite users failed for organization ${this.id}`,
|
339
|
+
response
|
340
|
+
)
|
341
|
+
}
|
342
|
+
}
|
343
|
+
|
344
|
+
async createInviteCode(accessGroups: string[]): Promise<string> {
|
345
|
+
const response = await this.context
|
346
|
+
.resolve(RpcService)
|
347
|
+
?.requestBuilder("api/v1/Invites/link")
|
348
|
+
.sendPostJson({
|
349
|
+
organizationId: this.id,
|
350
|
+
accessGroupIds: accessGroups
|
351
|
+
})
|
352
|
+
if (ResponseUtils.isFail(response)) {
|
353
|
+
await ResponseUtils.throwError(
|
354
|
+
`Invite code creation failed for organization ${this.id}`,
|
355
|
+
response
|
356
|
+
)
|
357
|
+
}
|
358
|
+
|
359
|
+
const json = await response!.json()
|
360
|
+
|
361
|
+
const code = (json as InviteCodeResponse).code
|
362
|
+
|
363
|
+
return code
|
364
|
+
}
|
365
|
+
|
366
|
+
async createQuiz(workspaces: WorkspaceId[], query: string, questionsCount: number, optionsCount: number, fileId: FileId): Promise<QuizData> {
|
367
|
+
const response = await this.context
|
368
|
+
.resolve(RpcService)
|
369
|
+
?.requestBuilder("api/v1/Quiz")
|
370
|
+
.sendPostJson({
|
371
|
+
query: query,
|
372
|
+
questionsCount: questionsCount,
|
373
|
+
optionsCount: optionsCount,
|
374
|
+
organizationId: this.id,
|
375
|
+
workspaceIds: workspaces,
|
376
|
+
fileId: fileId
|
377
|
+
})
|
378
|
+
if (ResponseUtils.isFail(response)) {
|
379
|
+
await ResponseUtils.throwError(
|
380
|
+
`Quiz creation failed for organization ${this.id} with query ${query}`,
|
381
|
+
response
|
382
|
+
)
|
383
|
+
}
|
384
|
+
|
385
|
+
return (await response!.json()) as QuizData
|
386
|
+
}
|
387
|
+
}
|