@neuralinnovations/dataisland-sdk 0.0.1-dev3 → 0.0.1-dev31
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +201 -0
- package/README.md +294 -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 +103 -0
- package/dist/src/appBuilder.d.ts +44 -0
- package/dist/src/appBuilder.d.ts.map +1 -0
- package/dist/src/appBuilder.js +10 -0
- package/dist/src/appBuilder.js.map +1 -0
- package/dist/src/commands/deleteUserFullCommandHandler.d.ts +7 -0
- package/dist/src/commands/deleteUserFullCommandHandler.d.ts.map +1 -0
- package/dist/src/commands/deleteUserFullCommandHandler.js +21 -0
- package/dist/src/commands/deleteUserFullCommandHandler.js.map +1 -0
- package/dist/src/commands/startCommandHandler.d.ts +7 -0
- package/dist/src/commands/startCommandHandler.d.ts.map +1 -0
- package/dist/src/commands/startCommandHandler.js +27 -0
- package/dist/src/commands/startCommandHandler.js.map +1 -0
- package/dist/src/context.d.ts +24 -0
- package/dist/src/context.d.ts.map +1 -0
- package/dist/src/context.js +31 -0
- package/dist/src/context.js.map +1 -0
- package/dist/src/credentials.d.ts +33 -0
- package/dist/src/credentials.d.ts.map +1 -0
- package/dist/src/credentials.js +87 -0
- package/dist/src/credentials.js.map +1 -0
- package/dist/src/dataIslandApp.d.ts +50 -0
- package/dist/src/dataIslandApp.d.ts.map +1 -0
- package/dist/src/dataIslandApp.js +10 -0
- package/dist/src/dataIslandApp.js.map +1 -0
- package/dist/src/disposable.d.ts +84 -0
- package/dist/src/disposable.d.ts.map +1 -0
- package/dist/src/disposable.js +147 -0
- package/dist/src/disposable.js.map +1 -0
- package/dist/src/dto/accessGroupResponse.d.ts +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 +81 -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 +43 -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 +65 -0
- package/dist/src/index.d.ts.map +1 -0
- package/dist/src/index.js +110 -0
- package/dist/src/index.js.map +1 -0
- package/dist/src/internal/app.impl.d.ts +28 -0
- package/dist/src/internal/app.impl.d.ts.map +1 -0
- package/dist/src/internal/app.impl.js +173 -0
- package/dist/src/internal/app.impl.js.map +1 -0
- package/dist/src/internal/appBuilder.impl.d.ts +27 -0
- package/dist/src/internal/appBuilder.impl.d.ts.map +1 -0
- package/dist/src/internal/appBuilder.impl.js +71 -0
- package/dist/src/internal/appBuilder.impl.js.map +1 -0
- package/dist/src/internal/createApp.impl.d.ts +4 -0
- package/dist/src/internal/createApp.impl.d.ts.map +1 -0
- package/dist/src/internal/createApp.impl.js +11 -0
- package/dist/src/internal/createApp.impl.js.map +1 -0
- package/dist/src/internal/registry.d.ts +66 -0
- package/dist/src/internal/registry.d.ts.map +1 -0
- package/dist/src/internal/registry.js +114 -0
- package/dist/src/internal/registry.js.map +1 -0
- package/dist/src/middleware.d.ts +6 -0
- package/dist/src/middleware.d.ts.map +1 -0
- package/dist/src/middleware.js +3 -0
- package/dist/src/middleware.js.map +1 -0
- package/dist/src/services/anonymousService.d.ts +8 -0
- package/dist/src/services/anonymousService.d.ts.map +1 -0
- package/dist/src/services/anonymousService.js +41 -0
- package/dist/src/services/anonymousService.js.map +1 -0
- package/dist/src/services/commandService.d.ts +18 -0
- package/dist/src/services/commandService.d.ts.map +1 -0
- package/dist/src/services/commandService.js +40 -0
- package/dist/src/services/commandService.js.map +1 -0
- package/dist/src/services/cookieService.d.ts +7 -0
- package/dist/src/services/cookieService.d.ts.map +1 -0
- package/dist/src/services/cookieService.js +18 -0
- package/dist/src/services/cookieService.js.map +1 -0
- package/dist/src/services/credentialService.d.ts +9 -0
- package/dist/src/services/credentialService.d.ts.map +1 -0
- package/dist/src/services/credentialService.js +26 -0
- package/dist/src/services/credentialService.js.map +1 -0
- package/dist/src/services/httpMethod.d.ts +2 -0
- package/dist/src/services/httpMethod.d.ts.map +1 -0
- package/dist/src/services/httpMethod.js +3 -0
- package/dist/src/services/httpMethod.js.map +1 -0
- package/dist/src/services/middlewareService.d.ts +10 -0
- package/dist/src/services/middlewareService.d.ts.map +1 -0
- package/dist/src/services/middlewareService.js +34 -0
- package/dist/src/services/middlewareService.js.map +1 -0
- package/dist/src/services/organizationService.d.ts +10 -0
- package/dist/src/services/organizationService.d.ts.map +1 -0
- package/dist/src/services/organizationService.js +19 -0
- package/dist/src/services/organizationService.js.map +1 -0
- package/dist/src/services/requestBuilder.d.ts +17 -0
- package/dist/src/services/requestBuilder.d.ts.map +1 -0
- package/dist/src/services/requestBuilder.js +105 -0
- package/dist/src/services/requestBuilder.js.map +1 -0
- package/dist/src/services/responseUtils.d.ts +7 -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 +9 -0
- package/dist/src/services/userProfileService.d.ts.map +1 -0
- package/dist/src/services/userProfileService.js +43 -0
- package/dist/src/services/userProfileService.js.map +1 -0
- package/dist/src/storages/chats/answer.d.ts +41 -0
- package/dist/src/storages/chats/answer.d.ts.map +1 -0
- package/dist/src/storages/chats/answer.impl.d.ts +29 -0
- package/dist/src/storages/chats/answer.impl.d.ts.map +1 -0
- package/dist/src/storages/chats/answer.impl.js +116 -0
- package/dist/src/storages/chats/answer.impl.js.map +1 -0
- package/dist/src/storages/chats/answer.js +15 -0
- package/dist/src/storages/chats/answer.js.map +1 -0
- package/dist/src/storages/chats/chat.d.ts +35 -0
- package/dist/src/storages/chats/chat.d.ts.map +1 -0
- package/dist/src/storages/chats/chat.impl.d.ts +23 -0
- package/dist/src/storages/chats/chat.impl.d.ts.map +1 -0
- package/dist/src/storages/chats/chat.impl.js +74 -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 +39 -0
- package/dist/src/storages/files/file.d.ts.map +1 -0
- package/dist/src/storages/files/file.impl.d.ts +23 -0
- package/dist/src/storages/files/file.impl.d.ts.map +1 -0
- package/dist/src/storages/files/file.impl.js +89 -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 +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 +142 -0
- package/dist/src/storages/files/files.impl.js.map +1 -0
- package/dist/src/storages/files/files.js +20 -0
- package/dist/src/storages/files/files.js.map +1 -0
- package/dist/src/storages/files/filesPage.d.ts +28 -0
- package/dist/src/storages/files/filesPage.d.ts.map +1 -0
- package/dist/src/storages/files/filesPage.impl.d.ts +15 -0
- package/dist/src/storages/files/filesPage.impl.d.ts.map +1 -0
- package/dist/src/storages/files/filesPage.impl.js +38 -0
- package/dist/src/storages/files/filesPage.impl.js.map +1 -0
- package/dist/src/storages/files/filesPage.js +10 -0
- package/dist/src/storages/files/filesPage.js.map +1 -0
- package/dist/src/storages/groups/group.d.ts +63 -0
- package/dist/src/storages/groups/group.d.ts.map +1 -0
- package/dist/src/storages/groups/group.impl.d.ts +38 -0
- package/dist/src/storages/groups/group.impl.d.ts.map +1 -0
- package/dist/src/storages/groups/group.impl.js +210 -0
- package/dist/src/storages/groups/group.impl.js.map +1 -0
- package/dist/src/storages/groups/group.js +15 -0
- package/dist/src/storages/groups/group.js.map +1 -0
- package/dist/src/storages/groups/groups.d.ts +39 -0
- package/dist/src/storages/groups/groups.d.ts.map +1 -0
- package/dist/src/storages/groups/groups.impl.d.ts +30 -0
- package/dist/src/storages/groups/groups.impl.d.ts.map +1 -0
- package/dist/src/storages/groups/groups.impl.js +132 -0
- package/dist/src/storages/groups/groups.impl.js.map +1 -0
- package/dist/src/storages/groups/groups.js +20 -0
- package/dist/src/storages/groups/groups.js.map +1 -0
- package/dist/src/storages/organizations/organization.d.ts +55 -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 +157 -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 +36 -0
- package/dist/src/storages/user/userProfile.d.ts.map +1 -0
- package/dist/src/storages/user/userProfile.impl.d.ts +14 -0
- package/dist/src/storages/user/userProfile.impl.d.ts.map +1 -0
- package/dist/src/storages/user/userProfile.impl.js +57 -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 +159 -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 +68 -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/index.d.ts +1 -0
- package/index.js +1 -0
- package/package.json +46 -5
- package/src/commands/deleteUserFullCommandHandler.ts +19 -0
- package/src/commands/startCommandHandler.ts +16 -5
- package/src/context.ts +4 -2
- package/src/credentials.ts +22 -0
- package/src/{appSdk.ts → dataIslandApp.ts} +3 -3
- package/src/disposable.ts +20 -8
- package/src/dto/accessGroupResponse.ts +15 -16
- package/src/dto/chatResponse.ts +57 -54
- package/src/dto/userInfoResponse.ts +5 -2
- package/src/dto/workspacesResponse.ts +3 -3
- package/src/events.ts +12 -12
- package/src/index.ts +45 -10
- package/src/internal/app.impl.ts +47 -17
- package/src/internal/createApp.impl.ts +4 -4
- package/src/internal/registry.ts +54 -6
- package/src/middleware.ts +2 -0
- package/src/services/anonymousService.ts +43 -0
- package/src/services/commandService.ts +4 -2
- package/src/services/cookieService.ts +16 -0
- package/src/services/httpMethod.ts +1 -0
- package/src/services/middlewareService.ts +2 -1
- package/src/services/organizationService.ts +2 -2
- package/src/services/requestBuilder.ts +42 -15
- package/src/services/responseUtils.ts +2 -0
- package/src/services/rpcService.ts +24 -6
- package/src/services/service.ts +7 -5
- package/src/services/userProfileService.ts +16 -2
- package/src/storages/chats/answer.impl.ts +160 -0
- package/src/storages/chats/answer.ts +53 -0
- package/src/storages/chats/chat.impl.ts +95 -0
- package/src/storages/chats/chat.ts +45 -0
- package/src/storages/chats/chats.impl.ts +144 -0
- package/src/storages/chats/chats.ts +47 -0
- package/src/storages/files/file.impl.ts +113 -0
- package/src/storages/files/file.ts +49 -0
- package/src/storages/{files.impl.ts → files/files.impl.ts} +63 -61
- 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/group.impl.ts +276 -0
- package/src/storages/groups/group.ts +73 -0
- package/src/storages/groups/groups.impl.ts +175 -0
- package/src/storages/groups/groups.ts +45 -0
- package/src/storages/organizations/organization.impl.ts +165 -0
- package/src/storages/organizations/organization.ts +67 -0
- package/src/storages/{organizations.impl.ts → organizations/organizations.impl.ts} +30 -13
- package/src/storages/{organizations.ts → organizations/organizations.ts} +1 -1
- package/src/storages/{userProfile.impl.ts → user/userProfile.impl.ts} +8 -1
- package/src/storages/{userProfile.ts → user/userProfile.ts} +6 -1
- package/src/storages/{workspace.impl.ts → workspaces/workspace.impl.ts} +28 -8
- package/src/storages/{workspace.ts → workspaces/workspace.ts} +13 -2
- package/src/storages/{workspaces.impl.ts → workspaces/workspaces.impl.ts} +18 -13
- package/src/storages/{workspaces.ts → workspaces/workspaces.ts} +6 -2
- package/src/unitTest.ts +14 -3
- package/src/utils/browserUtils.ts +72 -0
- package/src/utils/request.ts +6 -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 -37
- package/src/storages/file.impl.ts +0 -68
- package/src/storages/files.ts +0 -67
- 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/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 -225
- 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/test_file.pdf +0 -0
- package/tsconfig.json +0 -31
@@ -1,6 +1,7 @@
|
|
1
1
|
import { Service, type ServiceContext } from "./service"
|
2
2
|
import { MiddlewareService } from "./middlewareService"
|
3
3
|
import { RequestBuilder } from "./requestBuilder"
|
4
|
+
// import { Request, Response, Headers, fetch } from "../utils/request"
|
4
5
|
|
5
6
|
/**
|
6
7
|
* Options for the RpcService.
|
@@ -14,6 +15,7 @@ export interface RequestOptions {
|
|
14
15
|
* RPC service.
|
15
16
|
*/
|
16
17
|
export class RpcService extends Service {
|
18
|
+
|
17
19
|
constructor(
|
18
20
|
serviceContext: ServiceContext,
|
19
21
|
/**
|
@@ -32,6 +34,22 @@ export class RpcService extends Service {
|
|
32
34
|
}
|
33
35
|
) {
|
34
36
|
super(serviceContext)
|
37
|
+
|
38
|
+
serviceContext.onRegister = async () => {
|
39
|
+
serviceContext.resolve(MiddlewareService)?.useMiddleware((req, next) => {
|
40
|
+
if (!req.headers.has("accept")) {
|
41
|
+
req.headers.set("accept", "text/plain")
|
42
|
+
}
|
43
|
+
|
44
|
+
if ((req as any).discardContentType) {
|
45
|
+
delete (req as any).discardContentType
|
46
|
+
} else {
|
47
|
+
req.headers.set("content-type", "application/json")
|
48
|
+
}
|
49
|
+
|
50
|
+
return next(req)
|
51
|
+
})
|
52
|
+
}
|
35
53
|
}
|
36
54
|
|
37
55
|
/**
|
@@ -87,35 +105,35 @@ export class RpcService extends Service {
|
|
87
105
|
/**
|
88
106
|
* Send a POST request.
|
89
107
|
* @param path
|
90
|
-
* @param body
|
108
|
+
* @param body JSON object
|
91
109
|
* @param options
|
92
110
|
*/
|
93
111
|
async post(
|
94
112
|
path: string,
|
95
|
-
body
|
113
|
+
body: object | null | undefined,
|
96
114
|
options?: RequestOptions
|
97
115
|
): Promise<Response> {
|
98
116
|
return this.requestBuilder(path)
|
99
117
|
.searchParams(options?.searchParams)
|
100
118
|
.headers(options?.headers)
|
101
|
-
.
|
119
|
+
.sendPostJson(body)
|
102
120
|
}
|
103
121
|
|
104
122
|
/**
|
105
123
|
* Send a PUT request.
|
106
124
|
* @param path
|
107
|
-
* @param body
|
125
|
+
* @param body JSON object
|
108
126
|
* @param options
|
109
127
|
*/
|
110
128
|
async put(
|
111
129
|
path: string,
|
112
|
-
body
|
130
|
+
body: object | null | undefined,
|
113
131
|
options?: RequestOptions
|
114
132
|
): Promise<Response> {
|
115
133
|
return this.requestBuilder(path)
|
116
134
|
.searchParams(options?.searchParams)
|
117
135
|
.headers(options?.headers)
|
118
|
-
.
|
136
|
+
.sendPutJson(body)
|
119
137
|
}
|
120
138
|
|
121
139
|
/**
|
package/src/services/service.ts
CHANGED
@@ -6,7 +6,8 @@ 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,9 +1,9 @@
|
|
1
1
|
import { Service } from "./service"
|
2
2
|
import { RpcService } from "./rpcService"
|
3
|
-
import { UserProfile } from "../storages/userProfile"
|
3
|
+
import { UserProfile } from "../storages/user/userProfile"
|
4
4
|
import { UserInfoResponse } from "../dto/userInfoResponse"
|
5
5
|
import { OrganizationService } from "./organizationService"
|
6
|
-
import { UserProfileImpl } from "../storages/userProfile.impl"
|
6
|
+
import { UserProfileImpl } from "../storages/user/userProfile.impl"
|
7
7
|
import { ResponseUtils } from "./responseUtils"
|
8
8
|
|
9
9
|
export class UserProfileService extends Service {
|
@@ -13,6 +13,20 @@ export class UserProfileService extends Service {
|
|
13
13
|
return this.impl
|
14
14
|
}
|
15
15
|
|
16
|
+
async merge(anonymous_token: string) {
|
17
|
+
const rpc = this.resolve(RpcService) as RpcService
|
18
|
+
const response = await rpc.requestBuilder("api/v1/Users/anonymous/merge")
|
19
|
+
.sendPostJson({
|
20
|
+
anonymousToken: anonymous_token
|
21
|
+
})
|
22
|
+
|
23
|
+
if (ResponseUtils.isFail(response)) {
|
24
|
+
await ResponseUtils.throwError("Failed to merge anonymous user", response)
|
25
|
+
}
|
26
|
+
|
27
|
+
await this.fetch()
|
28
|
+
}
|
29
|
+
|
16
30
|
async fetch() {
|
17
31
|
const rpc = this.resolve(RpcService) as RpcService
|
18
32
|
const response = await rpc.requestBuilder("api/v1/Users/self2").sendGet()
|
@@ -0,0 +1,160 @@
|
|
1
|
+
import { Context } from "../../context"
|
2
|
+
import {
|
3
|
+
AnswerDto,
|
4
|
+
AnswerStatus,
|
5
|
+
AnswerStepDto,
|
6
|
+
FetchAnswerResponse,
|
7
|
+
SourceDto,
|
8
|
+
StepType
|
9
|
+
} from "../../dto/chatResponse"
|
10
|
+
import { ResponseUtils } from "../../services/responseUtils"
|
11
|
+
import { RpcService } from "../../services/rpcService"
|
12
|
+
import { Answer, AnswerEvent, AnswerId } from "./answer"
|
13
|
+
import { Chat } from "./chat"
|
14
|
+
|
15
|
+
export class AnswerImpl extends Answer {
|
16
|
+
|
17
|
+
private _steps?: AnswerStepDto[]
|
18
|
+
private _status?: AnswerStatus
|
19
|
+
private _id?: AnswerId
|
20
|
+
private _question?: string
|
21
|
+
private _sources?: SourceDto[]
|
22
|
+
private _answer?: string
|
23
|
+
private _timestamp?: number
|
24
|
+
|
25
|
+
constructor(
|
26
|
+
private readonly chat: Chat,
|
27
|
+
private readonly context: Context) {
|
28
|
+
super()
|
29
|
+
}
|
30
|
+
|
31
|
+
initFromHistory(answer: AnswerDto): AnswerImpl {
|
32
|
+
this._id = answer.id
|
33
|
+
this._question = answer.question
|
34
|
+
this._answer = answer.context
|
35
|
+
this._sources = answer.sources
|
36
|
+
this._timestamp = answer.timestamp
|
37
|
+
|
38
|
+
return this
|
39
|
+
}
|
40
|
+
|
41
|
+
async initNew(id: AnswerId, question: string): Promise<AnswerImpl> {
|
42
|
+
this._id = id
|
43
|
+
this._question = question
|
44
|
+
this._answer = ""
|
45
|
+
|
46
|
+
await this.fetch()
|
47
|
+
|
48
|
+
return this
|
49
|
+
}
|
50
|
+
|
51
|
+
get id(): AnswerId {
|
52
|
+
return <AnswerId>this._id
|
53
|
+
}
|
54
|
+
|
55
|
+
get status(): AnswerStatus {
|
56
|
+
return <AnswerStatus>this._status
|
57
|
+
}
|
58
|
+
|
59
|
+
get question(): string {
|
60
|
+
return <string>this._question
|
61
|
+
}
|
62
|
+
|
63
|
+
get sources(): SourceDto[] {
|
64
|
+
return <SourceDto[]>this._sources
|
65
|
+
}
|
66
|
+
|
67
|
+
get tokens(): string {
|
68
|
+
return <string>this._answer
|
69
|
+
}
|
70
|
+
|
71
|
+
get timestamp(): number {
|
72
|
+
return <number>this._timestamp
|
73
|
+
}
|
74
|
+
|
75
|
+
public fetchAfter() {
|
76
|
+
if (this._status === undefined || this._status === AnswerStatus.RUNNING) {
|
77
|
+
setTimeout(async () => await this.fetch(), 300)
|
78
|
+
}
|
79
|
+
}
|
80
|
+
|
81
|
+
private getStep(type: StepType): AnswerStepDto | undefined {
|
82
|
+
return this._steps?.find(step => step.type === type)
|
83
|
+
}
|
84
|
+
|
85
|
+
async fetch(): Promise<void> {
|
86
|
+
// fetch answer from position 0
|
87
|
+
const position = 0
|
88
|
+
// fetch answer
|
89
|
+
const response = await this.context
|
90
|
+
.resolve(RpcService)
|
91
|
+
?.requestBuilder("api/v1/Chats/answer/fetch")
|
92
|
+
.searchParam("chatId", this.chat.id)
|
93
|
+
.searchParam("questionId", this.id)
|
94
|
+
.searchParam("position", position.toString())
|
95
|
+
.sendGet()
|
96
|
+
|
97
|
+
// check response status
|
98
|
+
if (ResponseUtils.isFail(response)) {
|
99
|
+
await ResponseUtils.throwError(`Failed to fetch answer ${this.id}`, response)
|
100
|
+
}
|
101
|
+
|
102
|
+
// parse answer from the server's response
|
103
|
+
const answer = (await response!.json()) as FetchAnswerResponse
|
104
|
+
|
105
|
+
// update answer
|
106
|
+
this._status = <AnswerStatus>answer.status
|
107
|
+
this._steps = <AnswerStepDto[]>answer.steps
|
108
|
+
|
109
|
+
if (this.getStep(StepType.GENERATE_ANSWER) !== undefined) {
|
110
|
+
const step = this.getStep(StepType.GENERATE_ANSWER)
|
111
|
+
const step_tokens = step?.tokens.join("")
|
112
|
+
if (this._answer !== step_tokens) {
|
113
|
+
this._answer = step_tokens
|
114
|
+
|
115
|
+
this.dispatch({
|
116
|
+
type: AnswerEvent.UPDATED,
|
117
|
+
data: this
|
118
|
+
})
|
119
|
+
}
|
120
|
+
}
|
121
|
+
|
122
|
+
if (this.getStep(StepType.SOURCES) !== undefined && this._sources === undefined) {
|
123
|
+
const sources_step = this.getStep(StepType.SOURCES)
|
124
|
+
this._sources = sources_step?.sources
|
125
|
+
|
126
|
+
this.dispatch({
|
127
|
+
type: AnswerEvent.UPDATED,
|
128
|
+
data: this
|
129
|
+
})
|
130
|
+
}
|
131
|
+
|
132
|
+
if (this.getStep(StepType.DONE) !== undefined) {
|
133
|
+
const step = this.getStep(StepType.DONE)
|
134
|
+
this._timestamp = Date.parse(step!.end_at)
|
135
|
+
}
|
136
|
+
|
137
|
+
this.fetchAfter()
|
138
|
+
}
|
139
|
+
|
140
|
+
async cancel(): Promise<void> {
|
141
|
+
// send request to the server
|
142
|
+
const response = await this.context
|
143
|
+
.resolve(RpcService)
|
144
|
+
?.requestBuilder("api/v1/Chats/answer/cancel")
|
145
|
+
.sendPutJson({
|
146
|
+
chat_id: this.chat.id,
|
147
|
+
uid: this.id
|
148
|
+
})
|
149
|
+
|
150
|
+
// check response status
|
151
|
+
if (ResponseUtils.isFail(response)) {
|
152
|
+
await ResponseUtils.throwError("Failed to cancel a question", response)
|
153
|
+
}
|
154
|
+
|
155
|
+
this.dispatch({
|
156
|
+
type: AnswerEvent.CANCALLED,
|
157
|
+
data: this
|
158
|
+
})
|
159
|
+
}
|
160
|
+
}
|
@@ -0,0 +1,53 @@
|
|
1
|
+
import {
|
2
|
+
AnswerStatus,
|
3
|
+
SourceDto
|
4
|
+
} from "../../dto/chatResponse"
|
5
|
+
import { EventDispatcher } from "../../events"
|
6
|
+
|
7
|
+
export type AnswerId = string
|
8
|
+
export type StepId = string
|
9
|
+
|
10
|
+
export enum AnswerEvent {
|
11
|
+
ADDED = "added",
|
12
|
+
CANCALLED = "cancelled",
|
13
|
+
FAILED = "failed",
|
14
|
+
UPDATED = "updated"
|
15
|
+
}
|
16
|
+
|
17
|
+
export abstract class Answer extends EventDispatcher<AnswerEvent, Answer> {
|
18
|
+
|
19
|
+
/**
|
20
|
+
* Answer id.
|
21
|
+
*/
|
22
|
+
abstract get id(): AnswerId
|
23
|
+
|
24
|
+
/**
|
25
|
+
* Answer data object
|
26
|
+
*/
|
27
|
+
abstract get question(): string
|
28
|
+
|
29
|
+
/**
|
30
|
+
* Answer tokens
|
31
|
+
*/
|
32
|
+
abstract get tokens(): string
|
33
|
+
|
34
|
+
/**
|
35
|
+
* Answer status.
|
36
|
+
*/
|
37
|
+
abstract get status(): AnswerStatus
|
38
|
+
|
39
|
+
/**
|
40
|
+
* Answer sources.
|
41
|
+
*/
|
42
|
+
abstract get sources(): SourceDto[]
|
43
|
+
|
44
|
+
/**
|
45
|
+
* Answer time.
|
46
|
+
*/
|
47
|
+
abstract get timestamp(): number
|
48
|
+
|
49
|
+
/**
|
50
|
+
* Cancel answer
|
51
|
+
*/
|
52
|
+
abstract cancel(): Promise<void>
|
53
|
+
}
|
@@ -0,0 +1,95 @@
|
|
1
|
+
import { Chat, ChatAnswerType } from "./chat"
|
2
|
+
import { Disposable } from "../../disposable"
|
3
|
+
import { Answer, AnswerId } from "./answer"
|
4
|
+
import { ChatDto } from "../../dto/chatResponse"
|
5
|
+
import { Context } from "../../context"
|
6
|
+
import { AnswerImpl } from "./answer.impl"
|
7
|
+
import { RpcService } from "../../services/rpcService"
|
8
|
+
import { ResponseUtils } from "../../services/responseUtils"
|
9
|
+
import { Organization } from "../organizations/organization"
|
10
|
+
|
11
|
+
export class ChatImpl extends Chat implements Disposable {
|
12
|
+
private _isDisposed: boolean = false
|
13
|
+
private readonly _answers: AnswerImpl[] = []
|
14
|
+
|
15
|
+
private _content?: ChatDto
|
16
|
+
|
17
|
+
constructor(
|
18
|
+
private readonly context: Context,
|
19
|
+
public readonly organization: Organization
|
20
|
+
) {
|
21
|
+
super()
|
22
|
+
}
|
23
|
+
|
24
|
+
async initFrom(chat: ChatDto): Promise<ChatImpl> {
|
25
|
+
this._content = chat
|
26
|
+
|
27
|
+
// init answers
|
28
|
+
for (const ans of chat.answers) {
|
29
|
+
// create answer implementation
|
30
|
+
const answer = new AnswerImpl(this, this.context).initFromHistory(ans)
|
31
|
+
|
32
|
+
// add answer to the collection
|
33
|
+
this._answers.push(answer)
|
34
|
+
}
|
35
|
+
|
36
|
+
return this
|
37
|
+
}
|
38
|
+
|
39
|
+
get id(): string {
|
40
|
+
return <string>this._content?.id
|
41
|
+
}
|
42
|
+
|
43
|
+
get name(): string {
|
44
|
+
return <string>this._content?.name
|
45
|
+
}
|
46
|
+
|
47
|
+
get collection(): readonly Answer[] {
|
48
|
+
return <Answer[]>this._answers
|
49
|
+
}
|
50
|
+
|
51
|
+
get isDisposed(): boolean {
|
52
|
+
return this._isDisposed
|
53
|
+
}
|
54
|
+
|
55
|
+
public getAnswer(id: AnswerId): Answer {
|
56
|
+
const answer = this._answers.find(answer => answer.id === id)
|
57
|
+
if (answer) {
|
58
|
+
return answer
|
59
|
+
}
|
60
|
+
throw new Error(`Answer with id ${id} is not found`)
|
61
|
+
}
|
62
|
+
|
63
|
+
async ask(message: string, answerType: ChatAnswerType): Promise<Answer> {
|
64
|
+
// send request to the server
|
65
|
+
const response = await this.context
|
66
|
+
.resolve(RpcService)
|
67
|
+
?.requestBuilder("api/v1/Chats/question")
|
68
|
+
.sendPutJson({
|
69
|
+
chatId: this.id,
|
70
|
+
questionMessage: message,
|
71
|
+
isLongAnswer: (answerType === ChatAnswerType.LONG)
|
72
|
+
})
|
73
|
+
|
74
|
+
// check response status
|
75
|
+
if (ResponseUtils.isFail(response)) {
|
76
|
+
await ResponseUtils.throwError(`Failed to ask a question, organization: ${this.organization.id}`, response)
|
77
|
+
}
|
78
|
+
|
79
|
+
// parse answer id from the server's response
|
80
|
+
const id = (await response!.json() as { id: string }).id
|
81
|
+
|
82
|
+
// create answer implementation
|
83
|
+
const answer = await new AnswerImpl(this, this.context).initNew(id, message)
|
84
|
+
|
85
|
+
// add answer to the collection
|
86
|
+
this._answers.push(answer)
|
87
|
+
|
88
|
+
return answer
|
89
|
+
}
|
90
|
+
|
91
|
+
dispose(): void {
|
92
|
+
this._isDisposed = true
|
93
|
+
}
|
94
|
+
|
95
|
+
}
|
@@ -0,0 +1,45 @@
|
|
1
|
+
import { Answer } from "./answer"
|
2
|
+
import { Organization } from "../organizations/organization"
|
3
|
+
|
4
|
+
export type ChatId = string
|
5
|
+
|
6
|
+
export enum ChatAnswerType {
|
7
|
+
SHORT = "short",
|
8
|
+
LONG = "long"
|
9
|
+
}
|
10
|
+
|
11
|
+
export abstract class Chat {
|
12
|
+
|
13
|
+
/**
|
14
|
+
* Organization.
|
15
|
+
*/
|
16
|
+
abstract get organization(): Organization
|
17
|
+
|
18
|
+
/**
|
19
|
+
* Chat id.
|
20
|
+
*/
|
21
|
+
abstract get id(): ChatId
|
22
|
+
|
23
|
+
/**
|
24
|
+
* Chat name.
|
25
|
+
*/
|
26
|
+
abstract get name(): string
|
27
|
+
|
28
|
+
/**
|
29
|
+
* Answers list.
|
30
|
+
*/
|
31
|
+
abstract get collection(): ReadonlyArray<Answer>
|
32
|
+
|
33
|
+
/**
|
34
|
+
* Get answer by id
|
35
|
+
* @param id answer id
|
36
|
+
*/
|
37
|
+
abstract getAnswer(id: string): Answer
|
38
|
+
|
39
|
+
/**
|
40
|
+
* Ask new question in chat.
|
41
|
+
*/
|
42
|
+
abstract ask(message: string, answerType: ChatAnswerType): Promise<Answer>
|
43
|
+
|
44
|
+
}
|
45
|
+
|
@@ -0,0 +1,144 @@
|
|
1
|
+
import { Context } from "../../context"
|
2
|
+
import { ChatDto, ChatListResponse } from "../../dto/chatResponse"
|
3
|
+
import { ResponseUtils } from "../../services/responseUtils"
|
4
|
+
import { RpcService } from "../../services/rpcService"
|
5
|
+
import { OrganizationImpl } from "../organizations/organization.impl"
|
6
|
+
import { OrganizationId } from "../organizations/organizations"
|
7
|
+
import { Chat } from "./chat"
|
8
|
+
import { ChatImpl } from "./chat.impl"
|
9
|
+
import { Chats, ChatsEvent } from "./chats"
|
10
|
+
|
11
|
+
export class ChatsImpl extends Chats {
|
12
|
+
private readonly _chats: Chat[] = []
|
13
|
+
|
14
|
+
constructor(
|
15
|
+
public readonly organization: OrganizationImpl,
|
16
|
+
private readonly context: Context
|
17
|
+
) {
|
18
|
+
super()
|
19
|
+
}
|
20
|
+
|
21
|
+
async initFrom(organizationId: OrganizationId): Promise<void> {
|
22
|
+
// init chats from the server's response
|
23
|
+
const limit = 100
|
24
|
+
const page = 0
|
25
|
+
const response = await this.context
|
26
|
+
.resolve(RpcService)
|
27
|
+
?.requestBuilder("api/v1/Chats/list")
|
28
|
+
.searchParam("organizationId", organizationId)
|
29
|
+
.searchParam("limit", limit.toString())
|
30
|
+
.searchParam("page", page.toString())
|
31
|
+
.sendGet()
|
32
|
+
|
33
|
+
// check response status
|
34
|
+
if (ResponseUtils.isFail(response)) {
|
35
|
+
await ResponseUtils.throwError(
|
36
|
+
`Chats list org id:${organizationId}, page:${page}, limit:${limit}, failed`,
|
37
|
+
response
|
38
|
+
)
|
39
|
+
}
|
40
|
+
|
41
|
+
// parse chats from the server's response
|
42
|
+
const chats = (await response!.json()) as ChatListResponse
|
43
|
+
|
44
|
+
// init chats
|
45
|
+
for (const cht of chats.chats) {
|
46
|
+
// create chat implementation
|
47
|
+
const chat = await new ChatImpl(this.context, this.organization).initFrom(cht)
|
48
|
+
|
49
|
+
// add chat to the collection
|
50
|
+
this._chats.push(chat)
|
51
|
+
|
52
|
+
// dispatch event
|
53
|
+
this.dispatch({
|
54
|
+
type: ChatsEvent.ADDED,
|
55
|
+
data: chat
|
56
|
+
})
|
57
|
+
}
|
58
|
+
|
59
|
+
}
|
60
|
+
|
61
|
+
get collection(): readonly Chat[] {
|
62
|
+
return this._chats
|
63
|
+
}
|
64
|
+
|
65
|
+
get(id: string): Chat {
|
66
|
+
return <Chat>this.tryGet(id)
|
67
|
+
}
|
68
|
+
|
69
|
+
tryGet(id: string): Chat | undefined {
|
70
|
+
return this._chats.find(chat => chat.id === id)
|
71
|
+
}
|
72
|
+
|
73
|
+
async create(): Promise<Chat> {
|
74
|
+
|
75
|
+
// send create request to the server
|
76
|
+
const response = await this.context
|
77
|
+
.resolve(RpcService)
|
78
|
+
?.requestBuilder("api/v1/Chats")
|
79
|
+
.sendPostJson({ organizationId: this.organization.id })
|
80
|
+
|
81
|
+
// check response status
|
82
|
+
if (ResponseUtils.isFail(response)) {
|
83
|
+
await ResponseUtils.throwError(`Failed to create chat, organization: ${this.organization.id}`, response)
|
84
|
+
}
|
85
|
+
|
86
|
+
// parse workspace from the server's response
|
87
|
+
const content = (await response!.json() as {
|
88
|
+
chat: ChatDto
|
89
|
+
}).chat as ChatDto
|
90
|
+
|
91
|
+
// create workspace implementation
|
92
|
+
const chat = new ChatImpl(this.context, this.organization)
|
93
|
+
await chat.initFrom(content)
|
94
|
+
|
95
|
+
// add chat to the collection
|
96
|
+
this._chats.push(chat)
|
97
|
+
|
98
|
+
// dispatch event
|
99
|
+
this.dispatch({
|
100
|
+
type: ChatsEvent.ADDED,
|
101
|
+
data: chat
|
102
|
+
})
|
103
|
+
|
104
|
+
return chat
|
105
|
+
}
|
106
|
+
|
107
|
+
async delete(id: string): Promise<void> {
|
108
|
+
// get chat by id
|
109
|
+
const chat = <ChatImpl>this.tryGet(id)
|
110
|
+
|
111
|
+
// check if chat is found
|
112
|
+
if (!chat) {
|
113
|
+
throw new Error(`Chat ${id} is not found, organization: ${this.organization.id}`)
|
114
|
+
}
|
115
|
+
|
116
|
+
// send delete request to the server
|
117
|
+
const response = await this.context
|
118
|
+
.resolve(RpcService)
|
119
|
+
?.requestBuilder("api/v1/Chats")
|
120
|
+
.searchParam("id", id)
|
121
|
+
.sendDelete()
|
122
|
+
|
123
|
+
// check response status
|
124
|
+
if (ResponseUtils.isFail(response)) {
|
125
|
+
await ResponseUtils.throwError(
|
126
|
+
`Failed to delete chat: ${id}, organization: ${this.organization.id}`,
|
127
|
+
response
|
128
|
+
)
|
129
|
+
}
|
130
|
+
|
131
|
+
// remove chat from the collection
|
132
|
+
const index = this._chats.indexOf(<ChatImpl>chat)
|
133
|
+
if (index < 0) {
|
134
|
+
throw new Error(`Chat ${id} is not found, organization: ${this.organization.id}`)
|
135
|
+
}
|
136
|
+
this._chats.splice(index, 1)
|
137
|
+
|
138
|
+
// dispatch event
|
139
|
+
this.dispatch({
|
140
|
+
type: ChatsEvent.REMOVED,
|
141
|
+
data: chat
|
142
|
+
})
|
143
|
+
}
|
144
|
+
}
|
@@ -0,0 +1,47 @@
|
|
1
|
+
import { EventDispatcher } from "../../events"
|
2
|
+
import { Chat, ChatId } from "./chat"
|
3
|
+
import { Organization } from "../organizations/organization"
|
4
|
+
|
5
|
+
export enum ChatsEvent {
|
6
|
+
ADDED = "added",
|
7
|
+
REMOVED = "removed"
|
8
|
+
}
|
9
|
+
|
10
|
+
/**
|
11
|
+
* Chats storage.
|
12
|
+
*/
|
13
|
+
export abstract class Chats extends EventDispatcher<ChatsEvent, Chat> {
|
14
|
+
|
15
|
+
/**
|
16
|
+
* Organization.
|
17
|
+
*/
|
18
|
+
abstract get organization(): Organization
|
19
|
+
|
20
|
+
/**
|
21
|
+
* Chats list.
|
22
|
+
*/
|
23
|
+
abstract get collection(): ReadonlyArray<Chat>
|
24
|
+
|
25
|
+
/**
|
26
|
+
* Create new chat.
|
27
|
+
*/
|
28
|
+
abstract create(): Promise<Chat>
|
29
|
+
|
30
|
+
/**
|
31
|
+
* Get chat by id.
|
32
|
+
* @param id
|
33
|
+
*/
|
34
|
+
abstract get(id: ChatId): Chat
|
35
|
+
|
36
|
+
/**
|
37
|
+
* Try to get chat by id.
|
38
|
+
* @param id
|
39
|
+
*/
|
40
|
+
abstract tryGet(id: ChatId): Chat | undefined
|
41
|
+
|
42
|
+
/**
|
43
|
+
* Delete chat.
|
44
|
+
* @param id
|
45
|
+
*/
|
46
|
+
abstract delete(id: ChatId): Promise<void>
|
47
|
+
}
|