@neuralinnovations/dataisland-sdk 0.0.1-dev2 → 0.0.1-dev21
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 +306 -1
- 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 +100 -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/startCommandHandler.d.ts +7 -0
- package/dist/src/commands/startCommandHandler.d.ts.map +1 -0
- package/dist/src/commands/startCommandHandler.js +17 -0
- package/dist/src/commands/startCommandHandler.js.map +1 -0
- package/dist/src/context.d.ts +23 -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 +28 -0
- package/dist/src/credentials.d.ts.map +1 -0
- package/dist/src/credentials.js +70 -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 +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/chatResponse.d.ts +78 -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/userInfoResponse.d.ts +42 -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 +43 -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 +58 -0
- package/dist/src/index.d.ts.map +1 -0
- package/dist/src/index.js +91 -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 +151 -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 +5 -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/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/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/middlewareService.d.ts +9 -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 +104 -0
- package/dist/src/services/requestBuilder.js.map +1 -0
- package/dist/src/services/responseUtils.d.ts +6 -0
- package/dist/src/services/responseUtils.d.ts.map +1 -0
- package/dist/src/services/responseUtils.js +32 -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 +8 -0
- package/dist/src/services/userProfileService.d.ts.map +1 -0
- package/dist/src/services/userProfileService.js +32 -0
- package/dist/src/services/userProfileService.js.map +1 -0
- package/dist/src/storages/chats/answer.d.ts +40 -0
- package/dist/src/storages/chats/answer.d.ts.map +1 -0
- package/dist/src/storages/chats/answer.impl.d.ts +24 -0
- package/dist/src/storages/chats/answer.impl.d.ts.map +1 -0
- package/dist/src/storages/chats/answer.impl.js +130 -0
- package/dist/src/storages/chats/answer.impl.js.map +1 -0
- package/dist/src/storages/chats/answer.js +14 -0
- package/dist/src/storages/chats/answer.js.map +1 -0
- package/dist/src/storages/chats/chat.d.ts +39 -0
- package/dist/src/storages/chats/chat.d.ts.map +1 -0
- package/dist/src/storages/chats/chat.impl.d.ts +24 -0
- package/dist/src/storages/chats/chat.impl.d.ts.map +1 -0
- package/dist/src/storages/chats/chat.impl.js +98 -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 +40 -0
- package/dist/src/storages/chats/chats.d.ts.map +1 -0
- package/dist/src/storages/chats/chats.impl.d.ts +18 -0
- package/dist/src/storages/chats/chats.impl.d.ts.map +1 -0
- package/dist/src/storages/chats/chats.impl.js +102 -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 +31 -0
- package/dist/src/storages/files/file.d.ts.map +1 -0
- package/dist/src/storages/files/file.impl.d.ts +21 -0
- package/dist/src/storages/files/file.impl.d.ts.map +1 -0
- package/dist/src/storages/files/file.impl.js +64 -0
- package/dist/src/storages/files/file.impl.js.map +1 -0
- package/dist/src/storages/files/file.js +11 -0
- package/dist/src/storages/files/file.js.map +1 -0
- package/dist/src/storages/files/files.d.ts +34 -0
- package/dist/src/storages/files/files.d.ts.map +1 -0
- package/dist/src/storages/files/files.impl.d.ts +22 -0
- package/dist/src/storages/files/files.impl.d.ts.map +1 -0
- package/dist/src/storages/files/files.impl.js +140 -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/groups.d.ts +91 -0
- package/dist/src/storages/groups/groups.d.ts.map +1 -0
- package/dist/src/storages/groups/groups.impl.d.ts +61 -0
- package/dist/src/storages/groups/groups.impl.d.ts.map +1 -0
- package/dist/src/storages/groups/groups.impl.js +293 -0
- package/dist/src/storages/groups/groups.impl.js.map +1 -0
- package/dist/src/storages/groups/groups.js +26 -0
- package/dist/src/storages/groups/groups.js.map +1 -0
- package/dist/src/storages/organizations/organization.d.ts +54 -0
- package/dist/src/storages/organizations/organization.d.ts.map +1 -0
- package/dist/src/storages/organizations/organization.impl.d.ts +32 -0
- package/dist/src/storages/organizations/organization.impl.d.ts.map +1 -0
- package/dist/src/storages/organizations/organization.impl.js +120 -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 +151 -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 +32 -0
- package/dist/src/storages/user/userProfile.d.ts.map +1 -0
- package/dist/src/storages/user/userProfile.impl.d.ts +13 -0
- package/dist/src/storages/user/userProfile.impl.d.ts.map +1 -0
- package/dist/src/storages/user/userProfile.impl.js +51 -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 +157 -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/index.d.ts +1 -0
- package/index.js +1 -0
- package/package.json +43 -4
- package/src/appBuilder.ts +6 -6
- package/src/commands/startCommandHandler.ts +2 -2
- package/src/context.ts +5 -4
- package/src/credentials.ts +29 -7
- package/src/{appSdk.ts → dataIslandApp.ts} +7 -7
- package/src/disposable.ts +20 -8
- package/src/dto/accessGroupResponse.ts +35 -0
- package/src/dto/chatResponse.ts +103 -0
- package/src/dto/userInfoResponse.ts +15 -3
- package/src/dto/workspacesResponse.ts +49 -0
- package/src/events.ts +13 -13
- package/src/index.ts +41 -20
- package/src/internal/app.impl.ts +28 -31
- package/src/internal/appBuilder.impl.ts +16 -16
- package/src/internal/createApp.impl.ts +5 -5
- package/src/internal/registry.ts +54 -6
- package/src/services/commandService.ts +3 -3
- package/src/services/credentialService.ts +3 -3
- package/src/services/middlewareService.ts +4 -4
- package/src/services/organizationService.ts +18 -116
- package/src/services/requestBuilder.ts +40 -15
- package/src/services/responseUtils.ts +32 -0
- package/src/services/rpcService.ts +28 -11
- package/src/services/service.ts +10 -8
- package/src/services/userProfileService.ts +18 -66
- package/src/storages/chats/answer.impl.ts +186 -0
- package/src/storages/chats/answer.ts +55 -0
- package/src/storages/chats/chat.impl.ts +126 -0
- package/src/storages/chats/chat.ts +49 -0
- package/src/storages/chats/chats.impl.ts +142 -0
- package/src/storages/chats/chats.ts +47 -0
- package/src/storages/files/file.impl.ts +87 -0
- package/src/storages/files/file.ts +40 -0
- package/src/storages/files/files.impl.ts +191 -0
- package/src/storages/files/files.ts +39 -0
- package/src/storages/files/filesPage.impl.ts +37 -0
- package/src/storages/files/filesPage.ts +33 -0
- package/src/storages/groups/groups.impl.ts +386 -0
- package/src/storages/groups/groups.ts +106 -0
- package/src/storages/organizations/organization.impl.ts +163 -0
- package/src/storages/organizations/organization.ts +67 -0
- package/src/storages/organizations/organizations.impl.ts +197 -0
- package/src/storages/{organizations.ts → organizations/organizations.ts} +8 -28
- package/src/storages/user/userProfile.impl.ts +56 -0
- package/src/storages/{userProfile.ts → user/userProfile.ts} +2 -2
- package/src/storages/workspaces/workspace.impl.ts +129 -0
- package/src/storages/workspaces/workspace.ts +54 -0
- package/src/storages/workspaces/workspaces.impl.ts +212 -0
- package/src/storages/workspaces/workspaces.ts +53 -0
- package/src/unitTest.ts +12 -1
- package/.browserslistrc +0 -5
- package/.editorconfig +0 -22
- 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/services/organizationImpl.ts +0 -51
- package/src/services/organizationsImpl.ts +0 -55
- package/src/types.ts +0 -86
- package/test/commands.test.ts +0 -24
- package/test/disposable.test.ts +0 -39
- package/test/events.test.ts +0 -151
- package/test/index.test.ts +0 -163
- package/test/registry.test.ts +0 -44
- package/test/services.test.ts +0 -56
- package/test/setup.ts +0 -2
- package/test/unitTest.test.ts +0 -21
- package/tsconfig.json +0 -31
@@ -1,9 +1,9 @@
|
|
1
|
-
import { Service } from
|
2
|
-
import { type Middleware } from
|
3
|
-
import { type Disposable } from
|
1
|
+
import { Service } from "./service"
|
2
|
+
import { type Middleware } from "../middleware"
|
3
|
+
import { type Disposable } from "../disposable"
|
4
4
|
|
5
5
|
export class MiddlewareService extends Service {
|
6
|
-
_middlewares: Middleware[] = []
|
6
|
+
private _middlewares: Middleware[] = []
|
7
7
|
|
8
8
|
public useMiddleware(middleware: Middleware): Disposable {
|
9
9
|
this._middlewares.push(middleware)
|
@@ -1,126 +1,28 @@
|
|
1
|
-
import { Service } from
|
2
|
-
import {
|
3
|
-
|
4
|
-
|
5
|
-
Organizations
|
6
|
-
} from '../storages/organizations'
|
7
|
-
import { OrganizationDto, UserSettings } from '../dto/userInfoResponse'
|
8
|
-
import { RpcService } from './rpcService'
|
9
|
-
import { OrganizationImpl } from './organizationImpl'
|
10
|
-
import { OrganizationsImpl } from './organizationsImpl'
|
1
|
+
import { Service } from "./service"
|
2
|
+
import { Organizations } from "../storages/organizations/organizations"
|
3
|
+
import { OrganizationDto, UserSettings } from "../dto/userInfoResponse"
|
4
|
+
import { OrganizationsImpl } from "../storages/organizations/organizations.impl"
|
11
5
|
|
12
6
|
export class OrganizationService extends Service {
|
13
|
-
private
|
7
|
+
private _impl?: OrganizationsImpl
|
8
|
+
|
9
|
+
private get impl(): OrganizationsImpl {
|
10
|
+
return this._impl ?? (this._impl = new OrganizationsImpl(this.context))
|
11
|
+
}
|
14
12
|
|
15
13
|
get organizations(): Organizations {
|
16
14
|
return this.impl
|
17
15
|
}
|
18
16
|
|
19
|
-
initFrom(
|
20
|
-
settings: UserSettings,
|
17
|
+
async initFrom(
|
21
18
|
adminInOrganization: string[],
|
22
|
-
organizations: OrganizationDto[]
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
// add organization to collection
|
31
|
-
this.impl.organizations.push(org)
|
32
|
-
|
33
|
-
// dispatch event, organization added
|
34
|
-
this.impl.dispatch({
|
35
|
-
type: OrganizationEvent.ADDED,
|
36
|
-
data: org
|
37
|
-
})
|
38
|
-
}
|
39
|
-
}
|
40
|
-
|
41
|
-
async deleteOrganization(id: OrganizationId): Promise<void> {
|
42
|
-
if (id === undefined || id === null) {
|
43
|
-
throw new Error('Organization delete, id is undefined or null')
|
44
|
-
}
|
45
|
-
if (id.length === 0 || id.trim().length === 0) {
|
46
|
-
throw new Error('Organization delete, id is empty')
|
47
|
-
}
|
48
|
-
if (!this.impl.contains(id)) {
|
49
|
-
throw new Error(`Organization delete, id: ${id} is not found`)
|
50
|
-
}
|
51
|
-
const response = await this.resolve(RpcService)
|
52
|
-
?.requestBuilder('/api/v1/Organizations')
|
53
|
-
.searchParam('id', id)
|
54
|
-
.sendDelete()
|
55
|
-
if (!response?.ok) {
|
56
|
-
let text: string = ''
|
57
|
-
try {
|
58
|
-
text = (await response?.text()) ?? ''
|
59
|
-
} catch (e) {
|
60
|
-
console.error(e)
|
61
|
-
}
|
62
|
-
|
63
|
-
throw new Error(
|
64
|
-
`Organization delete, response is not ok, status: ${response?.status},${response?.statusText} ${text}`
|
65
|
-
)
|
66
|
-
}
|
67
|
-
const org = <OrganizationImpl>this.impl.get(id)
|
68
|
-
const index = this.impl.organizations.indexOf(org)
|
69
|
-
if (index < 0) {
|
70
|
-
throw new Error('Organization delete, index is not found')
|
71
|
-
}
|
72
|
-
|
73
|
-
// remove organization from collection
|
74
|
-
this.impl.organizations.splice(index, 1)
|
75
|
-
|
76
|
-
// dispatch event, organization removed
|
77
|
-
this.impl.dispatch({
|
78
|
-
type: OrganizationEvent.REMOVED,
|
79
|
-
data: org
|
80
|
-
})
|
81
|
-
|
82
|
-
// dispose organization
|
83
|
-
org.dispose()
|
84
|
-
}
|
85
|
-
|
86
|
-
async createOrganization(
|
87
|
-
name: string,
|
88
|
-
description: string
|
89
|
-
): Promise<OrganizationImpl> {
|
90
|
-
if (name === undefined || name === null) {
|
91
|
-
throw new Error('Organization create, name is undefined or null')
|
92
|
-
}
|
93
|
-
if (description === undefined || description === null) {
|
94
|
-
throw new Error('Organization create, description is undefined or null')
|
95
|
-
}
|
96
|
-
if (name.length === 0 || name.trim().length === 0) {
|
97
|
-
throw new Error('Organization create, name is empty')
|
98
|
-
}
|
99
|
-
const response = await this.resolve(RpcService)
|
100
|
-
?.requestBuilder('api/v1/Organizations')
|
101
|
-
.sendPost({
|
102
|
-
profile: {
|
103
|
-
name: name,
|
104
|
-
description: description
|
105
|
-
}
|
106
|
-
})
|
107
|
-
if (!response?.ok) {
|
108
|
-
throw new Error('Organization create, response is not ok')
|
109
|
-
}
|
110
|
-
const content = (await response.json())['organization'] as OrganizationDto
|
111
|
-
|
112
|
-
// create organization and init from content
|
113
|
-
const org = new OrganizationImpl(this, this.impl).initFrom(content, true)
|
114
|
-
|
115
|
-
// add organization to collection
|
116
|
-
this.impl.organizations.push(org)
|
117
|
-
|
118
|
-
// dispatch event, organization added
|
119
|
-
this.impl.dispatch({
|
120
|
-
type: OrganizationEvent.ADDED,
|
121
|
-
data: org
|
122
|
-
})
|
123
|
-
|
124
|
-
return org
|
19
|
+
organizations: OrganizationDto[],
|
20
|
+
settings?: UserSettings | null
|
21
|
+
): Promise<void> {
|
22
|
+
await this.impl.internalInitFrom(
|
23
|
+
adminInOrganization,
|
24
|
+
organizations,
|
25
|
+
settings
|
26
|
+
)
|
125
27
|
}
|
126
28
|
}
|
@@ -48,18 +48,42 @@ export class RequestBuilder {
|
|
48
48
|
return this
|
49
49
|
}
|
50
50
|
|
51
|
-
public async
|
51
|
+
public async sendPostFormData(body: FormData): Promise<Response> {
|
52
52
|
const url = this._url
|
53
|
+
|
54
|
+
// set search params
|
53
55
|
url.search = this._searchParams.toString()
|
54
|
-
|
55
|
-
|
56
|
+
|
57
|
+
// create request
|
58
|
+
const req = new Request(url, {
|
59
|
+
method: "POST",
|
60
|
+
headers: this._headers,
|
61
|
+
body
|
62
|
+
})
|
63
|
+
|
64
|
+
// discard content type
|
65
|
+
const reqAny = req as any
|
66
|
+
reqAny.discardContentType = true
|
67
|
+
|
68
|
+
return await this._request(
|
69
|
+
req
|
70
|
+
)
|
71
|
+
}
|
72
|
+
|
73
|
+
public async sendPostJson(body: object | null | undefined): Promise<Response> {
|
74
|
+
const url = this._url
|
75
|
+
url.search = this._searchParams.toString()
|
76
|
+
let json: string | null | undefined = null
|
77
|
+
if (body !== undefined && body !== null && typeof body === "object") {
|
78
|
+
json = JSON.stringify(body)
|
56
79
|
}
|
80
|
+
const request = new Request(url, {
|
81
|
+
method: "POST",
|
82
|
+
headers: this._headers,
|
83
|
+
body: json
|
84
|
+
})
|
57
85
|
return await this._request(
|
58
|
-
|
59
|
-
method: 'POST',
|
60
|
-
headers: this._headers,
|
61
|
-
body
|
62
|
-
})
|
86
|
+
request
|
63
87
|
)
|
64
88
|
}
|
65
89
|
|
@@ -68,7 +92,7 @@ export class RequestBuilder {
|
|
68
92
|
url.search = this._searchParams.toString()
|
69
93
|
return await this._request(
|
70
94
|
new Request(url, {
|
71
|
-
method:
|
95
|
+
method: "GET",
|
72
96
|
headers: this._headers
|
73
97
|
})
|
74
98
|
)
|
@@ -79,23 +103,24 @@ export class RequestBuilder {
|
|
79
103
|
url.search = this._searchParams.toString()
|
80
104
|
return await this._request(
|
81
105
|
new Request(url, {
|
82
|
-
method:
|
106
|
+
method: "DELETE",
|
83
107
|
headers: this._headers
|
84
108
|
})
|
85
109
|
)
|
86
110
|
}
|
87
111
|
|
88
|
-
public async
|
112
|
+
public async sendPutJson(body: object | null | undefined): Promise<Response> {
|
89
113
|
const url = this._url
|
90
114
|
url.search = this._searchParams.toString()
|
91
|
-
|
92
|
-
|
115
|
+
let json: string | null | undefined = null
|
116
|
+
if (body !== undefined && body !== null && typeof body === "object") {
|
117
|
+
json = JSON.stringify(body)
|
93
118
|
}
|
94
119
|
return await this._request(
|
95
120
|
new Request(url, {
|
96
|
-
method:
|
121
|
+
method: "PUT",
|
97
122
|
headers: this._headers,
|
98
|
-
body
|
123
|
+
body: json
|
99
124
|
})
|
100
125
|
)
|
101
126
|
}
|
@@ -0,0 +1,32 @@
|
|
1
|
+
export class ResponseUtils {
|
2
|
+
public static isOk(response?: Response | null): boolean {
|
3
|
+
return response !== undefined && response !== null && response.ok
|
4
|
+
}
|
5
|
+
|
6
|
+
public static isFail(response?: Response | null): boolean {
|
7
|
+
return !ResponseUtils.isOk(response)
|
8
|
+
}
|
9
|
+
|
10
|
+
public static async throwError(
|
11
|
+
message: string,
|
12
|
+
response: Response | undefined | null
|
13
|
+
): Promise<void> {
|
14
|
+
if (response === undefined) {
|
15
|
+
throw new Error(`${message}. Response is undefined`)
|
16
|
+
}
|
17
|
+
if (response === null) {
|
18
|
+
throw new Error(`${message}. Response is null`)
|
19
|
+
}
|
20
|
+
let errorBody: string = ""
|
21
|
+
if (response) {
|
22
|
+
try {
|
23
|
+
errorBody = (await response.text()) ?? ""
|
24
|
+
} catch (e) {
|
25
|
+
console.error(e)
|
26
|
+
}
|
27
|
+
}
|
28
|
+
throw new Error(
|
29
|
+
`${message}. Response fail. Status: ${response?.status},${response?.statusText}, body: ${errorBody}`
|
30
|
+
)
|
31
|
+
}
|
32
|
+
}
|
@@ -1,6 +1,6 @@
|
|
1
|
-
import { Service, type ServiceContext } from
|
2
|
-
import { MiddlewareService } from
|
3
|
-
import { RequestBuilder } from
|
1
|
+
import { Service, type ServiceContext } from "./service"
|
2
|
+
import { MiddlewareService } from "./middlewareService"
|
3
|
+
import { RequestBuilder } from "./requestBuilder"
|
4
4
|
|
5
5
|
/**
|
6
6
|
* Options for the RpcService.
|
@@ -14,6 +14,7 @@ export interface RequestOptions {
|
|
14
14
|
* RPC service.
|
15
15
|
*/
|
16
16
|
export class RpcService extends Service {
|
17
|
+
|
17
18
|
constructor(
|
18
19
|
serviceContext: ServiceContext,
|
19
20
|
/**
|
@@ -32,6 +33,22 @@ export class RpcService extends Service {
|
|
32
33
|
}
|
33
34
|
) {
|
34
35
|
super(serviceContext)
|
36
|
+
|
37
|
+
serviceContext.onRegister = async () => {
|
38
|
+
serviceContext.resolve(MiddlewareService)?.useMiddleware((req, next) => {
|
39
|
+
if (!req.headers.has("accept")) {
|
40
|
+
req.headers.set("accept", "text/plain")
|
41
|
+
}
|
42
|
+
|
43
|
+
if ((req as any).discardContentType) {
|
44
|
+
delete (req as any).discardContentType
|
45
|
+
} else {
|
46
|
+
req.headers.set("content-type", "application/json")
|
47
|
+
}
|
48
|
+
|
49
|
+
return next(req)
|
50
|
+
})
|
51
|
+
}
|
35
52
|
}
|
36
53
|
|
37
54
|
/**
|
@@ -55,10 +72,10 @@ export class RpcService extends Service {
|
|
55
72
|
if (this.options !== undefined && this.options.urlBuilder !== undefined) {
|
56
73
|
return this.options.urlBuilder(path)
|
57
74
|
}
|
58
|
-
if (this.host.endsWith(
|
75
|
+
if (this.host.endsWith("/") && path.startsWith("/")) {
|
59
76
|
return new URL(`${this.host}${path.slice(1)}`)
|
60
77
|
}
|
61
|
-
if (!this.host.endsWith(
|
78
|
+
if (!this.host.endsWith("/") && !path.startsWith("/")) {
|
62
79
|
return new URL(`${this.host}/${path}`)
|
63
80
|
}
|
64
81
|
return new URL(`${this.host}${path}`)
|
@@ -87,35 +104,35 @@ export class RpcService extends Service {
|
|
87
104
|
/**
|
88
105
|
* Send a POST request.
|
89
106
|
* @param path
|
90
|
-
* @param body
|
107
|
+
* @param body JSON object
|
91
108
|
* @param options
|
92
109
|
*/
|
93
110
|
async post(
|
94
111
|
path: string,
|
95
|
-
body
|
112
|
+
body: object | null | undefined,
|
96
113
|
options?: RequestOptions
|
97
114
|
): Promise<Response> {
|
98
115
|
return this.requestBuilder(path)
|
99
116
|
.searchParams(options?.searchParams)
|
100
117
|
.headers(options?.headers)
|
101
|
-
.
|
118
|
+
.sendPostJson(body)
|
102
119
|
}
|
103
120
|
|
104
121
|
/**
|
105
122
|
* Send a PUT request.
|
106
123
|
* @param path
|
107
|
-
* @param body
|
124
|
+
* @param body JSON object
|
108
125
|
* @param options
|
109
126
|
*/
|
110
127
|
async put(
|
111
128
|
path: string,
|
112
|
-
body
|
129
|
+
body: object | null | undefined,
|
113
130
|
options?: RequestOptions
|
114
131
|
): Promise<Response> {
|
115
132
|
return this.requestBuilder(path)
|
116
133
|
.searchParams(options?.searchParams)
|
117
134
|
.headers(options?.headers)
|
118
|
-
.
|
135
|
+
.sendPutJson(body)
|
119
136
|
}
|
120
137
|
|
121
138
|
/**
|
package/src/services/service.ts
CHANGED
@@ -1,12 +1,13 @@
|
|
1
|
-
import { type Context } from
|
2
|
-
import { type Constructor } from
|
3
|
-
import { type DisposableContainer, type Lifetime } from
|
1
|
+
import { type Context } from "../context"
|
2
|
+
import { type Constructor } from "../internal/registry"
|
3
|
+
import { type DisposableContainer, type Lifetime } from "../disposable"
|
4
4
|
|
5
5
|
export class ServiceContext {
|
6
6
|
constructor(
|
7
7
|
public readonly context: Context,
|
8
8
|
private readonly disposableContainer: DisposableContainer
|
9
|
-
) {
|
9
|
+
) {
|
10
|
+
}
|
10
11
|
|
11
12
|
public get lifetime(): Lifetime {
|
12
13
|
return this.disposableContainer.lifetime
|
@@ -16,15 +17,15 @@ export class ServiceContext {
|
|
16
17
|
return this.context.resolve(type)
|
17
18
|
}
|
18
19
|
|
19
|
-
public async
|
20
|
+
public onRegister: () => Promise<void> = async (): Promise<void> => {
|
20
21
|
await Promise.resolve()
|
21
22
|
}
|
22
23
|
|
23
|
-
public async
|
24
|
+
public onStart: () => Promise<void> = async (): Promise<void> => {
|
24
25
|
await Promise.resolve()
|
25
26
|
}
|
26
27
|
|
27
|
-
public onUnregister(): void {
|
28
|
+
public onUnregister: () => void = (): void => {
|
28
29
|
// do nothing
|
29
30
|
}
|
30
31
|
}
|
@@ -42,5 +43,6 @@ export abstract class Service {
|
|
42
43
|
return this.serviceContext.context
|
43
44
|
}
|
44
45
|
|
45
|
-
public constructor(private readonly serviceContext: ServiceContext) {
|
46
|
+
public constructor(private readonly serviceContext: ServiceContext) {
|
47
|
+
}
|
46
48
|
}
|
@@ -1,62 +1,10 @@
|
|
1
|
-
import { Service } from
|
2
|
-
import { RpcService } from
|
3
|
-
import {
|
4
|
-
import { UserInfoResponse } from
|
5
|
-
import { OrganizationService } from
|
6
|
-
|
7
|
-
|
8
|
-
private content?: UserInfoResponse
|
9
|
-
|
10
|
-
get id(): string {
|
11
|
-
if (this.content) {
|
12
|
-
return this.content.user.id
|
13
|
-
}
|
14
|
-
throw new Error('The profile is not loaded.')
|
15
|
-
}
|
16
|
-
|
17
|
-
get name(): string {
|
18
|
-
if (this.content) {
|
19
|
-
return this.content.user.profile.name
|
20
|
-
}
|
21
|
-
throw new Error('The profile is not loaded.')
|
22
|
-
}
|
23
|
-
|
24
|
-
get email(): string {
|
25
|
-
if (this.content) {
|
26
|
-
return this.content.user.profile.email
|
27
|
-
}
|
28
|
-
throw new Error('The profile is not loaded.')
|
29
|
-
}
|
30
|
-
|
31
|
-
get isDeleted(): boolean {
|
32
|
-
if (this.content) {
|
33
|
-
return this.content.user.isDeleted
|
34
|
-
}
|
35
|
-
throw new Error('The profile is not loaded.')
|
36
|
-
}
|
37
|
-
|
38
|
-
get createdAt(): Date {
|
39
|
-
if (this.content) {
|
40
|
-
return new Date(this.content.user.created_at)
|
41
|
-
}
|
42
|
-
throw new Error('The profile is not loaded.')
|
43
|
-
}
|
44
|
-
|
45
|
-
get modifiedAt(): Date {
|
46
|
-
if (this.content) {
|
47
|
-
return new Date(this.content.user.modified_at)
|
48
|
-
}
|
49
|
-
throw new Error('The profile is not loaded.')
|
50
|
-
}
|
51
|
-
|
52
|
-
initFrom(content: UserInfoResponse) {
|
53
|
-
this.content = content
|
54
|
-
this.dispatch({
|
55
|
-
type: UserEvent.CHANGED,
|
56
|
-
data: this
|
57
|
-
})
|
58
|
-
}
|
59
|
-
}
|
1
|
+
import { Service } from "./service"
|
2
|
+
import { RpcService } from "./rpcService"
|
3
|
+
import { UserProfile } from "../storages/user/userProfile"
|
4
|
+
import { UserInfoResponse } from "../dto/userInfoResponse"
|
5
|
+
import { OrganizationService } from "./organizationService"
|
6
|
+
import { UserProfileImpl } from "../storages/user/userProfile.impl"
|
7
|
+
import { ResponseUtils } from "./responseUtils"
|
60
8
|
|
61
9
|
export class UserProfileService extends Service {
|
62
10
|
private readonly impl: UserProfileImpl = new UserProfileImpl()
|
@@ -65,22 +13,26 @@ export class UserProfileService extends Service {
|
|
65
13
|
return this.impl
|
66
14
|
}
|
67
15
|
|
68
|
-
async fetch(
|
16
|
+
async fetch() {
|
69
17
|
const rpc = this.resolve(RpcService) as RpcService
|
70
|
-
const response = await rpc.requestBuilder(
|
71
|
-
if (
|
72
|
-
|
18
|
+
const response = await rpc.requestBuilder("api/v1/Users/self2").sendGet()
|
19
|
+
if (ResponseUtils.isFail(response)) {
|
20
|
+
await ResponseUtils.throwError("Failed to fetch user profile", response)
|
73
21
|
}
|
74
22
|
const content = (await response.json()) as UserInfoResponse
|
23
|
+
|
24
|
+
// init user profile from the server's response
|
75
25
|
this.impl.initFrom(content)
|
76
26
|
|
77
27
|
const organizationService = this.resolve(
|
78
28
|
OrganizationService
|
79
29
|
) as OrganizationService
|
80
|
-
|
81
|
-
|
30
|
+
|
31
|
+
// init organization service from user profile
|
32
|
+
await organizationService.initFrom(
|
82
33
|
content.adminInOrganization,
|
83
|
-
content.organizations
|
34
|
+
content.organizations,
|
35
|
+
content.user.settings
|
84
36
|
)
|
85
37
|
}
|
86
38
|
}
|