@neuralinnovations/dataisland-sdk 0.0.1-dev7 → 0.0.1-dev71
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 +204 -6
- 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 +39 -0
- package/dist/src/credentials.d.ts.map +1 -0
- package/dist/src/credentials.js +105 -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 +27 -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/apiKeyResponse.d.ts +19 -0
- package/dist/src/dto/apiKeyResponse.d.ts.map +1 -0
- package/dist/src/dto/apiKeyResponse.js +3 -0
- package/dist/src/dto/apiKeyResponse.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/invitesResponse.d.ts +21 -0
- package/dist/src/dto/invitesResponse.d.ts.map +1 -0
- package/dist/src/dto/invitesResponse.js +3 -0
- package/dist/src/dto/invitesResponse.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 +92 -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 +68 -0
- package/dist/src/dto/workspacesResponse.d.ts.map +1 -0
- package/dist/src/dto/workspacesResponse.js +21 -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 +75 -0
- package/dist/src/index.d.ts.map +1 -0
- package/dist/src/index.js +124 -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 +19 -0
- package/dist/src/services/requestBuilder.d.ts.map +1 -0
- package/dist/src/services/requestBuilder.js +133 -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 +134 -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 +137 -0
- package/dist/src/storages/organizations/organization.d.ts.map +1 -0
- package/dist/src/storages/organizations/organization.impl.d.ts +55 -0
- package/dist/src/storages/organizations/organization.impl.d.ts.map +1 -0
- package/dist/src/storages/organizations/organization.impl.js +362 -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 +77 -0
- package/dist/src/storages/organizations/organizations.d.ts.map +1 -0
- package/dist/src/storages/organizations/organizations.impl.d.ts +45 -0
- package/dist/src/storages/organizations/organizations.impl.d.ts.map +1 -0
- package/dist/src/storages/organizations/organizations.impl.js +242 -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 +64 -0
- package/dist/src/storages/user/userProfile.d.ts.map +1 -0
- package/dist/src/storages/user/userProfile.impl.d.ts +24 -0
- package/dist/src/storages/user/userProfile.impl.d.ts.map +1 -0
- package/dist/src/storages/user/userProfile.impl.js +129 -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 +44 -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 +46 -0
- package/src/dataIslandApp.ts +8 -2
- package/src/disposable.ts +18 -5
- package/src/dto/accessGroupResponse.ts +17 -16
- package/src/dto/acquiringResponse.ts +54 -0
- package/src/dto/apiKeyResponse.ts +23 -0
- package/src/dto/badRequestResponse.ts +6 -0
- package/src/dto/chatResponse.ts +60 -54
- package/src/dto/invitesResponse.ts +25 -0
- 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 +64 -2
- package/src/dto/workspacesResponse.ts +38 -3
- package/src/index.ts +59 -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 +48 -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 +178 -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} +89 -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 +555 -0
- package/src/storages/organizations/organization.ts +168 -0
- package/src/storages/{organizations.impl.ts → organizations/organizations.impl.ts} +161 -12
- package/src/storages/organizations/organizations.ts +93 -0
- package/src/storages/user/userProfile.impl.ts +157 -0
- package/src/storages/user/userProfile.ts +81 -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 -41
- package/.prettierignore +0 -1
- package/.prettierrc +0 -11
- package/.yarnrc +0 -2
- package/babel.config.js +0 -6
- package/docs/.nojekyll +0 -1
- package/docs/classes/BasicCredential.md +0 -80
- package/docs/classes/BearerCredential.md +0 -72
- package/docs/classes/Chat.md +0 -69
- package/docs/classes/Chats.md +0 -90
- package/docs/classes/CredentialBase.md +0 -54
- package/docs/classes/DataIslandApp.md +0 -168
- package/docs/classes/DebugCredential.md +0 -72
- package/docs/classes/DefaultCredential.md +0 -56
- package/docs/classes/DisposableContainer.md +0 -177
- package/docs/classes/EventDispatcher.md +0 -109
- package/docs/classes/File.md +0 -79
- package/docs/classes/Files.md +0 -136
- package/docs/classes/FilesPage.md +0 -76
- package/docs/classes/Group.md +0 -191
- package/docs/classes/Groups.md +0 -130
- package/docs/classes/Lifetime.md +0 -108
- package/docs/classes/Organization.md +0 -89
- package/docs/classes/Organizations.md +0 -195
- package/docs/classes/UserProfile.md +0 -156
- package/docs/classes/Workspace.md +0 -165
- package/docs/classes/Workspaces.md +0 -189
- package/docs/enums/ChatAnswer.md +0 -22
- package/docs/enums/ChatsEvent.md +0 -22
- package/docs/enums/FilesEvent.md +0 -24
- package/docs/enums/GroupEvent.md +0 -29
- package/docs/enums/OrganizationsEvent.md +0 -31
- package/docs/enums/UserEvent.md +0 -15
- package/docs/enums/WorkspaceEvent.md +0 -17
- package/docs/enums/WorkspacesEvent.md +0 -24
- package/docs/interfaces/Disposable.md +0 -25
- package/docs/interfaces/Event.md +0 -58
- package/docs/interfaces/EventSubscriber.md +0 -41
- package/docs/interfaces/Input.md +0 -35
- package/docs/modules.md +0 -205
- package/jest.config.ts +0 -199
- package/jest.setup.ts +0 -2
- package/scripts/docs/index.js +0 -15
- 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/organizations.ts +0 -56
- 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,74 @@
|
|
1
|
+
import {FileProgressDto, MetadataDto} from "../../dto/workspacesResponse"
|
2
|
+
import { EventDispatcher } from "../../events"
|
3
|
+
import { FilesEvent } from "./files"
|
4
|
+
|
5
|
+
export type FileId = string
|
6
|
+
|
7
|
+
export enum FileStatus {
|
8
|
+
UPLOADING = "uploading",
|
9
|
+
SUCCESS = "success",
|
10
|
+
FAILED = "failed"
|
11
|
+
}
|
12
|
+
|
13
|
+
/**
|
14
|
+
* File.
|
15
|
+
*/
|
16
|
+
export abstract class File extends EventDispatcher<
|
17
|
+
FilesEvent,
|
18
|
+
File
|
19
|
+
> {
|
20
|
+
/**
|
21
|
+
* File id.
|
22
|
+
*/
|
23
|
+
abstract get id(): FileId
|
24
|
+
|
25
|
+
/**
|
26
|
+
* File name.
|
27
|
+
*/
|
28
|
+
abstract get name(): string
|
29
|
+
|
30
|
+
/**
|
31
|
+
* File description.
|
32
|
+
*/
|
33
|
+
abstract get description(): string
|
34
|
+
|
35
|
+
/**
|
36
|
+
* File metadata.
|
37
|
+
*/
|
38
|
+
abstract get metadata(): MetadataDto[]
|
39
|
+
|
40
|
+
/**
|
41
|
+
* File date added.
|
42
|
+
*/
|
43
|
+
abstract get createdAt(): number
|
44
|
+
|
45
|
+
/**
|
46
|
+
* File date modified.
|
47
|
+
*/
|
48
|
+
abstract get modifiedAt(): number
|
49
|
+
|
50
|
+
/**
|
51
|
+
* File uploading progress
|
52
|
+
*/
|
53
|
+
abstract get progress(): FileProgressDto
|
54
|
+
|
55
|
+
/**
|
56
|
+
* File uploading status
|
57
|
+
*/
|
58
|
+
abstract get status(): FileStatus
|
59
|
+
|
60
|
+
/**
|
61
|
+
* Get temporary url.
|
62
|
+
*/
|
63
|
+
abstract get url(): string
|
64
|
+
|
65
|
+
/**
|
66
|
+
* Get temporary url.
|
67
|
+
*/
|
68
|
+
abstract get previewUrl(): string
|
69
|
+
|
70
|
+
/**
|
71
|
+
* Update file.
|
72
|
+
*/
|
73
|
+
abstract update(name: string, metadata: MetadataDto[], description?: string): Promise<void>
|
74
|
+
}
|
@@ -1,34 +1,14 @@
|
|
1
|
-
import { Context } from "
|
2
|
-
import {
|
3
|
-
import {
|
4
|
-
import { RpcService } from "../services/rpcService"
|
1
|
+
import { Context } from "../../context"
|
2
|
+
import { FileDto, FileListResponse } from "../../dto/workspacesResponse"
|
3
|
+
import { RpcService } from "../../services/rpcService"
|
5
4
|
import { FileImpl } from "./file.impl"
|
6
5
|
import { Files, FilesEvent, UploadFile } from "./files"
|
7
|
-
import { WorkspaceImpl } from "
|
8
|
-
import { ResponseUtils } from "
|
6
|
+
import { WorkspaceImpl } from "../workspaces/workspace.impl"
|
7
|
+
import { ResponseUtils } from "../../services/responseUtils"
|
9
8
|
import { File } from "./file"
|
10
9
|
import { FilesPage } from "./filesPage"
|
11
|
-
|
12
|
-
|
13
|
-
private _isDisposed: boolean = false
|
14
|
-
|
15
|
-
public files: File[] = []
|
16
|
-
public total: number = 0
|
17
|
-
public filesPerPage: number = 0
|
18
|
-
public page: number = 0
|
19
|
-
|
20
|
-
get pages(): number {
|
21
|
-
return Math.ceil(Math.max(this.total / this.filesPerPage, 1.0))
|
22
|
-
}
|
23
|
-
|
24
|
-
get isDisposed(): boolean {
|
25
|
-
return this._isDisposed
|
26
|
-
}
|
27
|
-
|
28
|
-
dispose(): void {
|
29
|
-
this._isDisposed = true
|
30
|
-
}
|
31
|
-
}
|
10
|
+
import { FilesPageImpl } from "./filesPage.impl"
|
11
|
+
// import { FormData } from "../../utils/request"
|
32
12
|
|
33
13
|
export class FilesImpl extends Files {
|
34
14
|
constructor(
|
@@ -41,12 +21,23 @@ export class FilesImpl extends Files {
|
|
41
21
|
// Object used as files page data, returned by "query"
|
42
22
|
public filesList?: FilesPage
|
43
23
|
|
44
|
-
async upload(
|
45
|
-
|
24
|
+
async upload(files: UploadFile[]): Promise<File[]> {
|
25
|
+
const loaded_files = []
|
26
|
+
for (const file of files) {
|
27
|
+
const loaded_file = await this.internalUpload(file)
|
28
|
+
if (loaded_file != undefined){
|
29
|
+
loaded_files.push(loaded_file)
|
30
|
+
}
|
31
|
+
}
|
32
|
+
return loaded_files
|
33
|
+
}
|
34
|
+
|
35
|
+
async get(fileId: string): Promise<File>{
|
36
|
+
return await this.internalGetFile(fileId)
|
46
37
|
}
|
47
38
|
|
48
|
-
async delete(
|
49
|
-
|
39
|
+
async delete(ids: string[]): Promise<void> {
|
40
|
+
await this.internalDeleteFiles(ids)
|
50
41
|
}
|
51
42
|
|
52
43
|
async query(query: string, page: number, limit: number): Promise<FilesPage> {
|
@@ -57,43 +48,78 @@ export class FilesImpl extends Files {
|
|
57
48
|
// INTERNALS
|
58
49
|
//----------------------------------------------------------------------------
|
59
50
|
|
60
|
-
|
61
|
-
|
62
|
-
* @param id
|
63
|
-
*/
|
64
|
-
async internalDeleteFile(id: string): Promise<void> {
|
51
|
+
|
52
|
+
async internalGetFile(id: string): Promise<File>{
|
65
53
|
if (id === undefined || id === null) {
|
66
|
-
throw new Error("File
|
54
|
+
throw new Error("File get, id is undefined or null")
|
67
55
|
}
|
68
56
|
if (id.length === 0 || id.trim().length === 0) {
|
69
|
-
throw new Error("File
|
57
|
+
throw new Error("File get, id is empty")
|
70
58
|
}
|
71
59
|
|
72
60
|
const response = await this.context
|
73
61
|
.resolve(RpcService)
|
74
|
-
?.requestBuilder("
|
62
|
+
?.requestBuilder("api/v1/Files")
|
75
63
|
.searchParam("id", id)
|
76
|
-
.
|
64
|
+
.sendGet()
|
65
|
+
|
77
66
|
if (ResponseUtils.isFail(response)) {
|
78
|
-
await ResponseUtils.throwError(
|
67
|
+
await ResponseUtils.throwError(
|
68
|
+
`Failed to get file ${id}`,
|
69
|
+
response
|
70
|
+
)
|
79
71
|
}
|
80
|
-
|
81
|
-
|
82
|
-
|
83
|
-
|
72
|
+
|
73
|
+
// parse file from the server's response
|
74
|
+
const result = (await response!.json() as { file: FileDto }).file as FileDto
|
75
|
+
|
76
|
+
// create file implementation
|
77
|
+
const fileImpl = new FileImpl(this.context)
|
78
|
+
|
79
|
+
return await fileImpl.initFrom(result)
|
80
|
+
}
|
81
|
+
|
82
|
+
/**
|
83
|
+
* Delete file.
|
84
|
+
* @param ids array of file ids
|
85
|
+
*/
|
86
|
+
async internalDeleteFiles(ids: string[]): Promise<void> {
|
87
|
+
if (ids === undefined || ids === null) {
|
88
|
+
throw new Error("File delete, ids array is undefined or null")
|
89
|
+
}
|
90
|
+
if (ids.length === 0) {
|
91
|
+
throw new Error("File delete, array of ids is empty")
|
84
92
|
}
|
85
93
|
|
86
|
-
|
87
|
-
|
94
|
+
const response = await this.context
|
95
|
+
.resolve(RpcService)
|
96
|
+
?.requestBuilder("api/v1/Files")
|
97
|
+
.searchParam("fileIds", ids.toString() )
|
98
|
+
.sendDelete()
|
99
|
+
|
100
|
+
if (ResponseUtils.isFail(response)) {
|
101
|
+
await ResponseUtils.throwError(`Files ${ids} delete, failed`, response)
|
102
|
+
}
|
88
103
|
|
89
|
-
|
90
|
-
|
91
|
-
|
92
|
-
|
93
|
-
|
104
|
+
for (const id of ids) {
|
105
|
+
const file = <FileImpl>this.filesList!.files.find(f => f.id === id)
|
106
|
+
const index = this.filesList!.files.indexOf(file)
|
107
|
+
if (index < 0) {
|
108
|
+
throw new Error("File delete, index is not found")
|
109
|
+
}
|
110
|
+
|
111
|
+
// remove file from collection
|
112
|
+
this.filesList!.files.splice(index, 1)
|
113
|
+
|
114
|
+
// dispatch event, file removed
|
115
|
+
this.dispatch({
|
116
|
+
type: FilesEvent.REMOVED,
|
117
|
+
data: file
|
118
|
+
})
|
94
119
|
|
95
|
-
|
96
|
-
|
120
|
+
// dispose file
|
121
|
+
file.dispose()
|
122
|
+
}
|
97
123
|
}
|
98
124
|
|
99
125
|
async internalQuery(
|
@@ -122,7 +148,6 @@ export class FilesImpl extends Files {
|
|
122
148
|
const response = await this.context
|
123
149
|
.resolve(RpcService)
|
124
150
|
?.requestBuilder("api/v1/Files/list")
|
125
|
-
|
126
151
|
.searchParam("workspaceId", this.workspace.id)
|
127
152
|
.searchParam("organizationId", this.workspace.organization.id)
|
128
153
|
.searchParam("query", query)
|
@@ -151,16 +176,10 @@ export class FilesImpl extends Files {
|
|
151
176
|
for (const fl of files.files) {
|
152
177
|
|
153
178
|
// create file implementation
|
154
|
-
const file = new FileImpl(this.context).initFrom(fl)
|
179
|
+
const file = await new FileImpl(this.context).initFrom(fl)
|
155
180
|
|
156
181
|
// add file to the collection
|
157
182
|
filesList.files.push(file)
|
158
|
-
|
159
|
-
// dispatch event, file added
|
160
|
-
this.dispatch({
|
161
|
-
type: FilesEvent.ADDED,
|
162
|
-
data: file
|
163
|
-
})
|
164
183
|
}
|
165
184
|
|
166
185
|
// set files list
|
@@ -169,7 +188,7 @@ export class FilesImpl extends Files {
|
|
169
188
|
return filesList
|
170
189
|
}
|
171
190
|
|
172
|
-
async internalUpload(file: UploadFile): Promise<File> {
|
191
|
+
async internalUpload(file: UploadFile): Promise<File | undefined> {
|
173
192
|
// check file
|
174
193
|
if (file === undefined || file === null) {
|
175
194
|
throw new Error("File upload, file is undefined or null")
|
@@ -190,17 +209,20 @@ export class FilesImpl extends Files {
|
|
190
209
|
|
191
210
|
// check response status
|
192
211
|
if (ResponseUtils.isFail(response)) {
|
212
|
+
if (await ResponseUtils.isLimitReached()){
|
213
|
+
return undefined
|
214
|
+
}
|
215
|
+
|
193
216
|
await ResponseUtils.throwError(`File upload ${file.name}`, response)
|
194
217
|
}
|
195
218
|
|
196
219
|
// parse file from the server's response
|
197
|
-
const result = (await response!.json()).file as FileDto
|
220
|
+
const result = (await response!.json() as { file: FileDto }).file as FileDto
|
198
221
|
|
199
222
|
// create file implementation
|
200
|
-
const fileImpl = new FileImpl(this.context)
|
223
|
+
const fileImpl = new FileImpl(this.context)
|
201
224
|
|
202
|
-
|
203
|
-
this.filesList?.files.push(fileImpl)
|
225
|
+
await fileImpl.initFrom(result)
|
204
226
|
|
205
227
|
// dispatch event, file added
|
206
228
|
this.dispatch({
|
@@ -1,4 +1,4 @@
|
|
1
|
-
import { EventDispatcher } from "
|
1
|
+
import { EventDispatcher } from "../../events"
|
2
2
|
import { File, FileId } from "./file"
|
3
3
|
import { FilesPage } from "./filesPage"
|
4
4
|
|
@@ -7,7 +7,8 @@ import { FilesPage } from "./filesPage"
|
|
7
7
|
*/
|
8
8
|
export enum FilesEvent {
|
9
9
|
ADDED = "added",
|
10
|
-
REMOVED = "removed"
|
10
|
+
REMOVED = "removed",
|
11
|
+
UPDATED = "updated"
|
11
12
|
}
|
12
13
|
|
13
14
|
/**
|
@@ -20,15 +21,21 @@ export type UploadFile = globalThis.File
|
|
20
21
|
*/
|
21
22
|
export abstract class Files extends EventDispatcher<FilesEvent, File> {
|
22
23
|
/**
|
23
|
-
*
|
24
|
+
* Upload file.
|
24
25
|
*/
|
25
|
-
abstract upload(
|
26
|
+
abstract upload(files: UploadFile[]): Promise<File[]>
|
26
27
|
|
27
28
|
/**
|
28
|
-
*
|
29
|
-
* @param
|
29
|
+
* Get file by ID
|
30
|
+
* @param fileId
|
30
31
|
*/
|
31
|
-
abstract
|
32
|
+
abstract get(fileId: FileId): Promise<File>
|
33
|
+
|
34
|
+
/**
|
35
|
+
* Delete files.
|
36
|
+
* @param ids
|
37
|
+
*/
|
38
|
+
abstract delete(ids: FileId[]): Promise<void>
|
32
39
|
|
33
40
|
/**
|
34
41
|
* Query files.
|
@@ -0,0 +1,37 @@
|
|
1
|
+
import { FilesPage } from "./filesPage"
|
2
|
+
import { Disposable } from "../../disposable"
|
3
|
+
import { File } from "./file"
|
4
|
+
|
5
|
+
export class FilesPageImpl extends FilesPage implements Disposable {
|
6
|
+
private _isDisposed: boolean = false
|
7
|
+
|
8
|
+
public files: File[] = []
|
9
|
+
public total: number = 0
|
10
|
+
public filesPerPage: number = 0
|
11
|
+
public page: number = 0
|
12
|
+
|
13
|
+
get pages(): number {
|
14
|
+
return Math.ceil(Math.max(this.total / this.filesPerPage, 1.0))
|
15
|
+
}
|
16
|
+
|
17
|
+
get isDisposed(): boolean {
|
18
|
+
return this._isDisposed
|
19
|
+
}
|
20
|
+
|
21
|
+
dispose(): void {
|
22
|
+
this._isDisposed = true
|
23
|
+
}
|
24
|
+
|
25
|
+
equals(other?: FilesPage | null): boolean {
|
26
|
+
if (other === undefined) return false
|
27
|
+
if (other === null) return false
|
28
|
+
if (other === this) return true
|
29
|
+
return (
|
30
|
+
other.pages === this.pages &&
|
31
|
+
other.total === this.total &&
|
32
|
+
other.page === this.page &&
|
33
|
+
(other.files === this.files ||
|
34
|
+
other.files.every((file, index) => file.id === this.files[index].id))
|
35
|
+
)
|
36
|
+
}
|
37
|
+
}
|
@@ -0,0 +1,276 @@
|
|
1
|
+
import { Group, GroupEvent, GroupId } from "./group"
|
2
|
+
import { Disposable } from "../../disposable"
|
3
|
+
import {
|
4
|
+
AccessGroupDto,
|
5
|
+
AccessGroupResponse
|
6
|
+
} from "../../dto/accessGroupResponse"
|
7
|
+
import { UserDto } from "../../dto/userInfoResponse"
|
8
|
+
import { Workspace } from "../workspaces/workspace"
|
9
|
+
import { Context } from "../../context"
|
10
|
+
import { Organization } from "../organizations/organization"
|
11
|
+
import { RpcService } from "../../services/rpcService"
|
12
|
+
import { ResponseUtils } from "../../services/responseUtils"
|
13
|
+
import { WorkspacesResponse } from "../../dto/workspacesResponse"
|
14
|
+
import { WorkspaceId } from "../workspaces/workspaces"
|
15
|
+
import { UserId } from "../user/userProfile"
|
16
|
+
|
17
|
+
export class GroupImpl extends Group implements Disposable {
|
18
|
+
private _isDisposed: boolean = false
|
19
|
+
private _content?: AccessGroupDto
|
20
|
+
private _members?: UserDto[]
|
21
|
+
private _workspaces: Workspace[] = []
|
22
|
+
private _id?: GroupId
|
23
|
+
|
24
|
+
constructor(
|
25
|
+
private readonly context: Context,
|
26
|
+
public readonly organization: Organization
|
27
|
+
) {
|
28
|
+
super()
|
29
|
+
}
|
30
|
+
|
31
|
+
async initFrom(id: GroupId): Promise<Group> {
|
32
|
+
// set id
|
33
|
+
this._id = id
|
34
|
+
|
35
|
+
// reload group and workspaces
|
36
|
+
const groupPromise = this.reloadGroup(id)
|
37
|
+
const workspacePromise = this.reloadWorkspaces(id)
|
38
|
+
|
39
|
+
// wait for all promises
|
40
|
+
await Promise.all([groupPromise, workspacePromise])
|
41
|
+
|
42
|
+
return this
|
43
|
+
}
|
44
|
+
|
45
|
+
async reloadGroup(id: GroupId): Promise<void> {
|
46
|
+
// fetch group
|
47
|
+
const response = await this.context.resolve(RpcService)
|
48
|
+
?.requestBuilder("api/v1/AccessGroups")
|
49
|
+
.searchParam("groupId", id)
|
50
|
+
.sendGet()
|
51
|
+
|
52
|
+
// check response status
|
53
|
+
if (ResponseUtils.isFail(response)) {
|
54
|
+
await ResponseUtils.throwError(`Failed to get group: ${id}, organization: ${this.organization.id}`, response)
|
55
|
+
}
|
56
|
+
|
57
|
+
// parse group from the server's response
|
58
|
+
const group = (await response!.json()) as AccessGroupResponse
|
59
|
+
// init group
|
60
|
+
this._content = group.group
|
61
|
+
this._members = group.members
|
62
|
+
}
|
63
|
+
|
64
|
+
async reloadWorkspaces(id: GroupId): Promise<void> {
|
65
|
+
const groupWorkspaces = await this.loadWorkspaces(id)
|
66
|
+
this._workspaces.length = 0
|
67
|
+
this._workspaces.push(...groupWorkspaces)
|
68
|
+
}
|
69
|
+
|
70
|
+
async loadWorkspaces(groupId: GroupId): Promise<Workspace[]> {
|
71
|
+
// fetch workspaces
|
72
|
+
const response = await this.context.resolve(RpcService)
|
73
|
+
?.requestBuilder("api/v1/AccessGroups/workspaces")
|
74
|
+
.searchParam("groupId", groupId)
|
75
|
+
.sendGet()
|
76
|
+
|
77
|
+
if (ResponseUtils.isFail(response)) {
|
78
|
+
await ResponseUtils.throwError(`Failed to get workspaces for group: ${this.id}, organization: ${this.organization.id}`, response)
|
79
|
+
}
|
80
|
+
|
81
|
+
// parse workspaces from the server's response
|
82
|
+
const workspaces = (await response!.json()) as WorkspacesResponse
|
83
|
+
|
84
|
+
// get workspaces
|
85
|
+
const result: Workspace[] = []
|
86
|
+
for (const workspaceDto of workspaces.workspaces) {
|
87
|
+
result.push(this.organization.workspaces.get(workspaceDto.id))
|
88
|
+
}
|
89
|
+
|
90
|
+
return result
|
91
|
+
}
|
92
|
+
|
93
|
+
get id(): GroupId {
|
94
|
+
if (this._id) {
|
95
|
+
return this._id
|
96
|
+
}
|
97
|
+
throw new Error("Access group is not loaded.")
|
98
|
+
}
|
99
|
+
|
100
|
+
get group(): AccessGroupDto {
|
101
|
+
if (this._content) {
|
102
|
+
return this._content
|
103
|
+
}
|
104
|
+
throw new Error("Access group is not loaded.")
|
105
|
+
}
|
106
|
+
|
107
|
+
get workspaces(): readonly Workspace[] {
|
108
|
+
return this._workspaces
|
109
|
+
}
|
110
|
+
|
111
|
+
get members(): UserDto[] {
|
112
|
+
if (this._members) {
|
113
|
+
return this._members
|
114
|
+
}
|
115
|
+
throw new Error("Access group is not loaded.")
|
116
|
+
}
|
117
|
+
|
118
|
+
async setName(name: string): Promise<void> {
|
119
|
+
if (name === undefined || name === null) {
|
120
|
+
throw new Error("Groups change, name is undefined or null")
|
121
|
+
}
|
122
|
+
if (name.length === 0 || name.trim().length === 0) {
|
123
|
+
throw new Error("Groups change, name is empty")
|
124
|
+
}
|
125
|
+
// send request to the server
|
126
|
+
const response = await this.context
|
127
|
+
.resolve(RpcService)
|
128
|
+
?.requestBuilder("api/v1/AccessGroups/name")
|
129
|
+
.sendPutJson({
|
130
|
+
groupId: this.id,
|
131
|
+
name: name
|
132
|
+
})
|
133
|
+
|
134
|
+
// check response status
|
135
|
+
if (ResponseUtils.isFail(response)) {
|
136
|
+
await ResponseUtils.throwError(`Failed to change group name, group: ${this.id}, organization: ${this.organization.id}`, response)
|
137
|
+
}
|
138
|
+
|
139
|
+
// change name
|
140
|
+
if (this._content) {
|
141
|
+
this._content.name = name
|
142
|
+
}
|
143
|
+
|
144
|
+
// dispatch event
|
145
|
+
this.dispatch({
|
146
|
+
type: GroupEvent.UPDATED,
|
147
|
+
data: this
|
148
|
+
})
|
149
|
+
}
|
150
|
+
|
151
|
+
async setPermits(permits: { isAdmin: boolean }): Promise<void> {
|
152
|
+
// send request to the server
|
153
|
+
const response = await this.context
|
154
|
+
.resolve(RpcService)
|
155
|
+
?.requestBuilder("api/v1/AccessGroups/permits")
|
156
|
+
.sendPutJson({
|
157
|
+
groupId: this.id,
|
158
|
+
permits: permits
|
159
|
+
})
|
160
|
+
|
161
|
+
if (ResponseUtils.isFail(response)) {
|
162
|
+
await ResponseUtils.throwError(`Failed to change group permits, group: ${this.id}, organization: ${this.organization.id}`, response)
|
163
|
+
}
|
164
|
+
}
|
165
|
+
|
166
|
+
async setWorkspaces(workspaces: string[]): Promise<void> {
|
167
|
+
if (workspaces === null || workspaces === undefined) {
|
168
|
+
throw new Error("Group add workspaces, workspaces is undefined or null")
|
169
|
+
}
|
170
|
+
|
171
|
+
// send request to the server
|
172
|
+
const response = await this.context
|
173
|
+
.resolve(RpcService)
|
174
|
+
?.requestBuilder("api/v1/AccessGroups/workspaces")
|
175
|
+
.sendPutJson({
|
176
|
+
groupId: this.id,
|
177
|
+
actualWorkspaceIds: workspaces
|
178
|
+
})
|
179
|
+
|
180
|
+
if (ResponseUtils.isFail(response)) {
|
181
|
+
await ResponseUtils.throwError(`Failed to set workspaces for group: ${this.id}, organization: ${this.organization.id}`, response)
|
182
|
+
}
|
183
|
+
|
184
|
+
// reload workspaces
|
185
|
+
await this.reloadWorkspaces(this.id)
|
186
|
+
|
187
|
+
// dispatch event
|
188
|
+
this.dispatch({
|
189
|
+
type: GroupEvent.UPDATED,
|
190
|
+
data: this
|
191
|
+
})
|
192
|
+
}
|
193
|
+
|
194
|
+
async removeWorkspaces(workspaces: WorkspaceId[]): Promise<void> {
|
195
|
+
if (workspaces === null || workspaces === undefined) {
|
196
|
+
throw new Error("Group removeWorkspaces, workspaces is undefined or null")
|
197
|
+
}
|
198
|
+
|
199
|
+
// make set of workspaces
|
200
|
+
const groupWorkspaces = new Set(this.workspaces.map(w => w.id))
|
201
|
+
|
202
|
+
// check argument
|
203
|
+
if (!workspaces.every(w => groupWorkspaces.has(w))) {
|
204
|
+
const notExistingWorkspaces = workspaces.filter(workspaceId => !groupWorkspaces.has(workspaceId))
|
205
|
+
throw new Error(`Group removeWorkspaces, workspaces contains not existing workspaces: ${notExistingWorkspaces}`)
|
206
|
+
}
|
207
|
+
|
208
|
+
// remove workspaces
|
209
|
+
for (const id of workspaces) {
|
210
|
+
groupWorkspaces.delete(id)
|
211
|
+
}
|
212
|
+
|
213
|
+
// send request to the server
|
214
|
+
await this.setWorkspaces(Array.from(groupWorkspaces))
|
215
|
+
}
|
216
|
+
|
217
|
+
async setMembersIds(members: UserId[]) {
|
218
|
+
if (members === null || members === undefined) {
|
219
|
+
throw new Error("Group setMembersIds, members is undefined or null")
|
220
|
+
}
|
221
|
+
|
222
|
+
// send request to the server
|
223
|
+
const response = await this.context
|
224
|
+
.resolve(RpcService)
|
225
|
+
?.requestBuilder("api/v1/AccessGroups/members")
|
226
|
+
.sendPutJson({
|
227
|
+
groupId: this.id,
|
228
|
+
memberIds: members
|
229
|
+
})
|
230
|
+
|
231
|
+
if (ResponseUtils.isFail(response)) {
|
232
|
+
await ResponseUtils.throwError(`Failed to set members for group: ${this.id}, organization: ${this.organization.id}`, response)
|
233
|
+
}
|
234
|
+
|
235
|
+
// reload group
|
236
|
+
await this.reloadGroup(this.id)
|
237
|
+
|
238
|
+
// dispatch event
|
239
|
+
this.dispatch({
|
240
|
+
type: GroupEvent.UPDATED,
|
241
|
+
data: this
|
242
|
+
})
|
243
|
+
}
|
244
|
+
|
245
|
+
async removeMembers(members: UserId[]): Promise<void> {
|
246
|
+
// check members
|
247
|
+
if (members === null || members === undefined) {
|
248
|
+
throw new Error("Group removeMembers, members is undefined or null")
|
249
|
+
}
|
250
|
+
|
251
|
+
// make set of members
|
252
|
+
const groupMembers = new Set(this.members.map(m => m.id))
|
253
|
+
|
254
|
+
// check argument
|
255
|
+
if (!members.every(m => groupMembers.has(m))) {
|
256
|
+
const notExistingMembers = members.filter(memberId => !groupMembers.has(memberId))
|
257
|
+
throw new Error(`Group removeMembers, members contains not existing members: ${notExistingMembers}`)
|
258
|
+
}
|
259
|
+
|
260
|
+
// remove members
|
261
|
+
for (const id of members) {
|
262
|
+
groupMembers.delete(id)
|
263
|
+
}
|
264
|
+
|
265
|
+
// send request to the server
|
266
|
+
await this.setMembersIds(Array.from(groupMembers))
|
267
|
+
}
|
268
|
+
|
269
|
+
get isDisposed(): boolean {
|
270
|
+
return this._isDisposed
|
271
|
+
}
|
272
|
+
|
273
|
+
dispose(): void {
|
274
|
+
this._isDisposed = true
|
275
|
+
}
|
276
|
+
}
|