@neuralinnovations/dataisland-sdk 0.0.1-dev2 → 0.0.1-dev20

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.
Files changed (286) hide show
  1. package/LICENSE +201 -0
  2. package/README.md +306 -1
  3. package/dist/index.d.ts +3 -0
  4. package/dist/index.d.ts.map +1 -0
  5. package/dist/index.js +3 -0
  6. package/dist/index.js.map +1 -0
  7. package/dist/package.json +100 -0
  8. package/dist/src/appBuilder.d.ts +44 -0
  9. package/dist/src/appBuilder.d.ts.map +1 -0
  10. package/dist/src/appBuilder.js +10 -0
  11. package/dist/src/appBuilder.js.map +1 -0
  12. package/dist/src/commands/startCommandHandler.d.ts +7 -0
  13. package/dist/src/commands/startCommandHandler.d.ts.map +1 -0
  14. package/dist/src/commands/startCommandHandler.js +17 -0
  15. package/dist/src/commands/startCommandHandler.js.map +1 -0
  16. package/dist/src/context.d.ts +23 -0
  17. package/dist/src/context.d.ts.map +1 -0
  18. package/dist/src/context.js +31 -0
  19. package/dist/src/context.js.map +1 -0
  20. package/dist/src/credentials.d.ts +28 -0
  21. package/dist/src/credentials.d.ts.map +1 -0
  22. package/dist/src/credentials.js +70 -0
  23. package/dist/src/credentials.js.map +1 -0
  24. package/dist/src/dataIslandApp.d.ts +50 -0
  25. package/dist/src/dataIslandApp.d.ts.map +1 -0
  26. package/dist/src/dataIslandApp.js +10 -0
  27. package/dist/src/dataIslandApp.js.map +1 -0
  28. package/dist/src/disposable.d.ts +84 -0
  29. package/dist/src/disposable.d.ts.map +1 -0
  30. package/dist/src/disposable.js +147 -0
  31. package/dist/src/disposable.js.map +1 -0
  32. package/dist/src/dto/accessGroupResponse.d.ts +27 -0
  33. package/dist/src/dto/accessGroupResponse.d.ts.map +1 -0
  34. package/dist/src/dto/accessGroupResponse.js +3 -0
  35. package/dist/src/dto/accessGroupResponse.js.map +1 -0
  36. package/dist/src/dto/chatResponse.d.ts +78 -0
  37. package/dist/src/dto/chatResponse.d.ts.map +1 -0
  38. package/dist/src/dto/chatResponse.js +45 -0
  39. package/dist/src/dto/chatResponse.js.map +1 -0
  40. package/dist/src/dto/userInfoResponse.d.ts +42 -0
  41. package/dist/src/dto/userInfoResponse.d.ts.map +1 -0
  42. package/dist/src/dto/userInfoResponse.js +3 -0
  43. package/dist/src/dto/userInfoResponse.js.map +1 -0
  44. package/dist/src/dto/workspacesResponse.d.ts +43 -0
  45. package/dist/src/dto/workspacesResponse.d.ts.map +1 -0
  46. package/dist/src/dto/workspacesResponse.js +3 -0
  47. package/dist/src/dto/workspacesResponse.js.map +1 -0
  48. package/dist/src/events.d.ts +17 -0
  49. package/dist/src/events.d.ts.map +1 -0
  50. package/dist/src/events.js +52 -0
  51. package/dist/src/events.js.map +1 -0
  52. package/dist/src/index.d.ts +58 -0
  53. package/dist/src/index.d.ts.map +1 -0
  54. package/dist/src/index.js +91 -0
  55. package/dist/src/index.js.map +1 -0
  56. package/dist/src/internal/app.impl.d.ts +28 -0
  57. package/dist/src/internal/app.impl.d.ts.map +1 -0
  58. package/dist/src/internal/app.impl.js +151 -0
  59. package/dist/src/internal/app.impl.js.map +1 -0
  60. package/dist/src/internal/appBuilder.impl.d.ts +27 -0
  61. package/dist/src/internal/appBuilder.impl.d.ts.map +1 -0
  62. package/dist/src/internal/appBuilder.impl.js +71 -0
  63. package/dist/src/internal/appBuilder.impl.js.map +1 -0
  64. package/dist/src/internal/createApp.impl.d.ts +4 -0
  65. package/dist/src/internal/createApp.impl.d.ts.map +1 -0
  66. package/dist/src/internal/createApp.impl.js +11 -0
  67. package/dist/src/internal/createApp.impl.js.map +1 -0
  68. package/dist/src/internal/registry.d.ts +66 -0
  69. package/dist/src/internal/registry.d.ts.map +1 -0
  70. package/dist/src/internal/registry.js +114 -0
  71. package/dist/src/internal/registry.js.map +1 -0
  72. package/dist/src/middleware.d.ts +5 -0
  73. package/dist/src/middleware.d.ts.map +1 -0
  74. package/dist/src/middleware.js +3 -0
  75. package/dist/src/middleware.js.map +1 -0
  76. package/dist/src/services/commandService.d.ts +18 -0
  77. package/dist/src/services/commandService.d.ts.map +1 -0
  78. package/dist/src/services/commandService.js +40 -0
  79. package/dist/src/services/commandService.js.map +1 -0
  80. package/dist/src/services/credentialService.d.ts +9 -0
  81. package/dist/src/services/credentialService.d.ts.map +1 -0
  82. package/dist/src/services/credentialService.js +26 -0
  83. package/dist/src/services/credentialService.js.map +1 -0
  84. package/dist/src/services/middlewareService.d.ts +9 -0
  85. package/dist/src/services/middlewareService.d.ts.map +1 -0
  86. package/dist/src/services/middlewareService.js +34 -0
  87. package/dist/src/services/middlewareService.js.map +1 -0
  88. package/dist/src/services/organizationService.d.ts +10 -0
  89. package/dist/src/services/organizationService.d.ts.map +1 -0
  90. package/dist/src/services/organizationService.js +19 -0
  91. package/dist/src/services/organizationService.js.map +1 -0
  92. package/dist/src/services/requestBuilder.d.ts +17 -0
  93. package/dist/src/services/requestBuilder.d.ts.map +1 -0
  94. package/dist/src/services/requestBuilder.js +104 -0
  95. package/dist/src/services/requestBuilder.js.map +1 -0
  96. package/dist/src/services/responseUtils.d.ts +6 -0
  97. package/dist/src/services/responseUtils.d.ts.map +1 -0
  98. package/dist/src/services/responseUtils.js +32 -0
  99. package/dist/src/services/responseUtils.js.map +1 -0
  100. package/dist/src/services/rpcService.d.ts +77 -0
  101. package/dist/src/services/rpcService.d.ts.map +1 -0
  102. package/dist/src/services/rpcService.js +125 -0
  103. package/dist/src/services/rpcService.js.map +1 -0
  104. package/dist/src/services/service.d.ts +21 -0
  105. package/dist/src/services/service.d.ts.map +1 -0
  106. package/dist/src/services/service.js +41 -0
  107. package/dist/src/services/service.js.map +1 -0
  108. package/dist/src/services/userProfileService.d.ts +8 -0
  109. package/dist/src/services/userProfileService.d.ts.map +1 -0
  110. package/dist/src/services/userProfileService.js +32 -0
  111. package/dist/src/services/userProfileService.js.map +1 -0
  112. package/dist/src/storages/chats/answer.d.ts +40 -0
  113. package/dist/src/storages/chats/answer.d.ts.map +1 -0
  114. package/dist/src/storages/chats/answer.impl.d.ts +24 -0
  115. package/dist/src/storages/chats/answer.impl.d.ts.map +1 -0
  116. package/dist/src/storages/chats/answer.impl.js +130 -0
  117. package/dist/src/storages/chats/answer.impl.js.map +1 -0
  118. package/dist/src/storages/chats/answer.js +14 -0
  119. package/dist/src/storages/chats/answer.js.map +1 -0
  120. package/dist/src/storages/chats/chat.d.ts +39 -0
  121. package/dist/src/storages/chats/chat.d.ts.map +1 -0
  122. package/dist/src/storages/chats/chat.impl.d.ts +24 -0
  123. package/dist/src/storages/chats/chat.impl.d.ts.map +1 -0
  124. package/dist/src/storages/chats/chat.impl.js +98 -0
  125. package/dist/src/storages/chats/chat.impl.js.map +1 -0
  126. package/dist/src/storages/chats/chat.js +12 -0
  127. package/dist/src/storages/chats/chat.js.map +1 -0
  128. package/dist/src/storages/chats/chats.d.ts +40 -0
  129. package/dist/src/storages/chats/chats.d.ts.map +1 -0
  130. package/dist/src/storages/chats/chats.impl.d.ts +18 -0
  131. package/dist/src/storages/chats/chats.impl.d.ts.map +1 -0
  132. package/dist/src/storages/chats/chats.impl.js +102 -0
  133. package/dist/src/storages/chats/chats.impl.js.map +1 -0
  134. package/dist/src/storages/chats/chats.js +16 -0
  135. package/dist/src/storages/chats/chats.js.map +1 -0
  136. package/dist/src/storages/files/file.d.ts +31 -0
  137. package/dist/src/storages/files/file.d.ts.map +1 -0
  138. package/dist/src/storages/files/file.impl.d.ts +21 -0
  139. package/dist/src/storages/files/file.impl.d.ts.map +1 -0
  140. package/dist/src/storages/files/file.impl.js +64 -0
  141. package/dist/src/storages/files/file.impl.js.map +1 -0
  142. package/dist/src/storages/files/file.js +11 -0
  143. package/dist/src/storages/files/file.js.map +1 -0
  144. package/dist/src/storages/files/files.d.ts +34 -0
  145. package/dist/src/storages/files/files.d.ts.map +1 -0
  146. package/dist/src/storages/files/files.impl.d.ts +22 -0
  147. package/dist/src/storages/files/files.impl.d.ts.map +1 -0
  148. package/dist/src/storages/files/files.impl.js +140 -0
  149. package/dist/src/storages/files/files.impl.js.map +1 -0
  150. package/dist/src/storages/files/files.js +20 -0
  151. package/dist/src/storages/files/files.js.map +1 -0
  152. package/dist/src/storages/files/filesPage.d.ts +28 -0
  153. package/dist/src/storages/files/filesPage.d.ts.map +1 -0
  154. package/dist/src/storages/files/filesPage.impl.d.ts +15 -0
  155. package/dist/src/storages/files/filesPage.impl.d.ts.map +1 -0
  156. package/dist/src/storages/files/filesPage.impl.js +38 -0
  157. package/dist/src/storages/files/filesPage.impl.js.map +1 -0
  158. package/dist/src/storages/files/filesPage.js +10 -0
  159. package/dist/src/storages/files/filesPage.js.map +1 -0
  160. package/dist/src/storages/groups/groups.d.ts +91 -0
  161. package/dist/src/storages/groups/groups.d.ts.map +1 -0
  162. package/dist/src/storages/groups/groups.impl.d.ts +58 -0
  163. package/dist/src/storages/groups/groups.impl.d.ts.map +1 -0
  164. package/dist/src/storages/groups/groups.impl.js +275 -0
  165. package/dist/src/storages/groups/groups.impl.js.map +1 -0
  166. package/dist/src/storages/groups/groups.js +26 -0
  167. package/dist/src/storages/groups/groups.js.map +1 -0
  168. package/dist/src/storages/organizations/organization.d.ts +54 -0
  169. package/dist/src/storages/organizations/organization.d.ts.map +1 -0
  170. package/dist/src/storages/organizations/organization.impl.d.ts +32 -0
  171. package/dist/src/storages/organizations/organization.impl.d.ts.map +1 -0
  172. package/dist/src/storages/organizations/organization.impl.js +120 -0
  173. package/dist/src/storages/organizations/organization.impl.js.map +1 -0
  174. package/dist/src/storages/organizations/organization.js +18 -0
  175. package/dist/src/storages/organizations/organization.js.map +1 -0
  176. package/dist/src/storages/organizations/organizations.d.ts +46 -0
  177. package/dist/src/storages/organizations/organizations.d.ts.map +1 -0
  178. package/dist/src/storages/organizations/organizations.impl.d.ts +38 -0
  179. package/dist/src/storages/organizations/organizations.impl.d.ts.map +1 -0
  180. package/dist/src/storages/organizations/organizations.impl.js +151 -0
  181. package/dist/src/storages/organizations/organizations.impl.js.map +1 -0
  182. package/dist/src/storages/organizations/organizations.js +20 -0
  183. package/dist/src/storages/organizations/organizations.js.map +1 -0
  184. package/dist/src/storages/user/userProfile.d.ts +32 -0
  185. package/dist/src/storages/user/userProfile.d.ts.map +1 -0
  186. package/dist/src/storages/user/userProfile.impl.d.ts +13 -0
  187. package/dist/src/storages/user/userProfile.impl.d.ts.map +1 -0
  188. package/dist/src/storages/user/userProfile.impl.js +51 -0
  189. package/dist/src/storages/user/userProfile.impl.js.map +1 -0
  190. package/dist/src/storages/user/userProfile.js +12 -0
  191. package/dist/src/storages/user/userProfile.js.map +1 -0
  192. package/dist/src/storages/workspaces/workspace.d.ts +44 -0
  193. package/dist/src/storages/workspaces/workspace.d.ts.map +1 -0
  194. package/dist/src/storages/workspaces/workspace.impl.d.ts +23 -0
  195. package/dist/src/storages/workspaces/workspace.impl.d.ts.map +1 -0
  196. package/dist/src/storages/workspaces/workspace.impl.js +98 -0
  197. package/dist/src/storages/workspaces/workspace.impl.js.map +1 -0
  198. package/dist/src/storages/workspaces/workspace.js +18 -0
  199. package/dist/src/storages/workspaces/workspace.js.map +1 -0
  200. package/dist/src/storages/workspaces/workspaces.d.ts +47 -0
  201. package/dist/src/storages/workspaces/workspaces.d.ts.map +1 -0
  202. package/dist/src/storages/workspaces/workspaces.impl.d.ts +33 -0
  203. package/dist/src/storages/workspaces/workspaces.impl.d.ts.map +1 -0
  204. package/dist/src/storages/workspaces/workspaces.impl.js +157 -0
  205. package/dist/src/storages/workspaces/workspaces.impl.js.map +1 -0
  206. package/dist/src/storages/workspaces/workspaces.js +19 -0
  207. package/dist/src/storages/workspaces/workspaces.js.map +1 -0
  208. package/dist/src/unitTest.d.ts +12 -0
  209. package/dist/src/unitTest.d.ts.map +1 -0
  210. package/dist/src/unitTest.js +44 -0
  211. package/dist/src/unitTest.js.map +1 -0
  212. package/index.d.ts +1 -0
  213. package/index.js +1 -0
  214. package/package.json +43 -4
  215. package/src/appBuilder.ts +6 -6
  216. package/src/commands/startCommandHandler.ts +2 -2
  217. package/src/context.ts +5 -4
  218. package/src/credentials.ts +29 -7
  219. package/src/{appSdk.ts → dataIslandApp.ts} +7 -7
  220. package/src/disposable.ts +20 -8
  221. package/src/dto/accessGroupResponse.ts +35 -0
  222. package/src/dto/chatResponse.ts +103 -0
  223. package/src/dto/userInfoResponse.ts +15 -3
  224. package/src/dto/workspacesResponse.ts +49 -0
  225. package/src/events.ts +13 -13
  226. package/src/index.ts +41 -20
  227. package/src/internal/app.impl.ts +28 -31
  228. package/src/internal/appBuilder.impl.ts +16 -16
  229. package/src/internal/createApp.impl.ts +5 -5
  230. package/src/internal/registry.ts +54 -6
  231. package/src/services/commandService.ts +3 -3
  232. package/src/services/credentialService.ts +3 -3
  233. package/src/services/middlewareService.ts +4 -4
  234. package/src/services/organizationService.ts +18 -116
  235. package/src/services/requestBuilder.ts +40 -15
  236. package/src/services/responseUtils.ts +32 -0
  237. package/src/services/rpcService.ts +28 -11
  238. package/src/services/service.ts +10 -8
  239. package/src/services/userProfileService.ts +18 -66
  240. package/src/storages/chats/answer.impl.ts +186 -0
  241. package/src/storages/chats/answer.ts +55 -0
  242. package/src/storages/chats/chat.impl.ts +126 -0
  243. package/src/storages/chats/chat.ts +49 -0
  244. package/src/storages/chats/chats.impl.ts +142 -0
  245. package/src/storages/chats/chats.ts +47 -0
  246. package/src/storages/files/file.impl.ts +87 -0
  247. package/src/storages/files/file.ts +40 -0
  248. package/src/storages/files/files.impl.ts +191 -0
  249. package/src/storages/files/files.ts +39 -0
  250. package/src/storages/files/filesPage.impl.ts +37 -0
  251. package/src/storages/files/filesPage.ts +33 -0
  252. package/src/storages/groups/groups.impl.ts +363 -0
  253. package/src/storages/groups/groups.ts +106 -0
  254. package/src/storages/organizations/organization.impl.ts +163 -0
  255. package/src/storages/organizations/organization.ts +67 -0
  256. package/src/storages/organizations/organizations.impl.ts +197 -0
  257. package/src/storages/{organizations.ts → organizations/organizations.ts} +8 -28
  258. package/src/storages/user/userProfile.impl.ts +56 -0
  259. package/src/storages/{userProfile.ts → user/userProfile.ts} +2 -2
  260. package/src/storages/workspaces/workspace.impl.ts +129 -0
  261. package/src/storages/workspaces/workspace.ts +54 -0
  262. package/src/storages/workspaces/workspaces.impl.ts +212 -0
  263. package/src/storages/workspaces/workspaces.ts +53 -0
  264. package/src/unitTest.ts +12 -1
  265. package/.browserslistrc +0 -5
  266. package/.editorconfig +0 -22
  267. package/.eslintrc.json +0 -44
  268. package/.github/workflows/publish-npm.yml +0 -28
  269. package/.prettierignore +0 -1
  270. package/.prettierrc +0 -11
  271. package/.yarnrc +0 -2
  272. package/babel.config.js +0 -6
  273. package/jest.config.ts +0 -199
  274. package/jest.setup.ts +0 -2
  275. package/src/services/organizationImpl.ts +0 -51
  276. package/src/services/organizationsImpl.ts +0 -55
  277. package/src/types.ts +0 -86
  278. package/test/commands.test.ts +0 -24
  279. package/test/disposable.test.ts +0 -39
  280. package/test/events.test.ts +0 -151
  281. package/test/index.test.ts +0 -163
  282. package/test/registry.test.ts +0 -44
  283. package/test/services.test.ts +0 -56
  284. package/test/setup.ts +0 -2
  285. package/test/unitTest.test.ts +0 -21
  286. package/tsconfig.json +0 -31
@@ -0,0 +1,129 @@
1
+ import { Context } from "../../context"
2
+ import { Files } from "../files/files"
3
+ import { Workspace, WorkspaceEvent } from "./workspace"
4
+ import { OrganizationImpl } from "../organizations/organization.impl"
5
+ import { WorkspaceDto } from "../../dto/workspacesResponse"
6
+ import { RpcService } from "../../services/rpcService"
7
+ import { FilesImpl } from "../files/files.impl"
8
+ import { ResponseUtils } from "../../services/responseUtils"
9
+
10
+ export class WorkspaceImpl extends Workspace {
11
+ private _isMarkAsDeleted: boolean = false
12
+ private _workspace?: WorkspaceDto
13
+
14
+ private readonly _files: FilesImpl
15
+
16
+ constructor(
17
+ public readonly organization: OrganizationImpl,
18
+ public readonly context: Context
19
+ ) {
20
+ super()
21
+ this._files = new FilesImpl(this, context)
22
+ }
23
+
24
+ get id(): string {
25
+ if (this._workspace) {
26
+ return this._workspace.id
27
+ }
28
+ throw new Error("Workspace is not loaded.")
29
+ }
30
+
31
+ get name(): string {
32
+ if (this._workspace) {
33
+ return this._workspace.profile.name
34
+ }
35
+ throw new Error("Workspace is not loaded.")
36
+ }
37
+
38
+ get description(): string {
39
+ if (this._workspace) {
40
+ return this._workspace.profile.description
41
+ }
42
+ throw new Error("Workspace is not loaded.")
43
+ }
44
+
45
+ get files(): Files {
46
+ return this._files
47
+ }
48
+
49
+ async filesCount(): Promise<number> {
50
+ // send request to the server
51
+ const response = await this.context
52
+ .resolve(RpcService)
53
+ ?.requestBuilder("api/v1/Workspaces/files/count")
54
+ .searchParam("workspaceId", this.id)
55
+ .searchParam("organizationId", this.organization.id)
56
+ .sendGet()
57
+
58
+ // check response status
59
+ if (ResponseUtils.isFail(response)) {
60
+ await ResponseUtils.throwError(
61
+ `Failed during get workspace total files count for ${this.id} of ${this.organization.id}`,
62
+ response
63
+ )
64
+ }
65
+
66
+ return (await response!.json()).count
67
+ }
68
+
69
+ async change(name: string, description: string): Promise<void> {
70
+ if (!this._workspace) {
71
+ throw new Error("Workspace is not loaded.")
72
+ }
73
+ if (this._isMarkAsDeleted) {
74
+ throw new Error("Workspace is marked as deleted.")
75
+ }
76
+ if (name === this.name && description === this.description) {
77
+ return Promise.resolve()
78
+ }
79
+ if (name === undefined || name === null || name.trim() === "") {
80
+ throw new Error("Name is required. Please provide a valid name.")
81
+ }
82
+ if (
83
+ description === undefined ||
84
+ description === null ||
85
+ description.trim() === ""
86
+ ) {
87
+ throw new Error(
88
+ "Description is required. Please provide a valid description."
89
+ )
90
+ }
91
+
92
+ const response = await this.context
93
+ .resolve(RpcService)
94
+ ?.requestBuilder("api/v1/Workspaces")
95
+ .sendPutJson({
96
+ workspaceId: this.id,
97
+ profile: {
98
+ name,
99
+ description
100
+ }
101
+ })
102
+
103
+ if (ResponseUtils.isFail(response)) {
104
+ await ResponseUtils.throwError("Failed to change workspace", response)
105
+ }
106
+
107
+ if (this._workspace) {
108
+ this._workspace.profile.name = name
109
+ this._workspace.profile.description = description
110
+ }
111
+
112
+ this.dispatch({
113
+ type: WorkspaceEvent.CHANGED,
114
+ data: this
115
+ })
116
+ }
117
+
118
+ async initFrom(workspace: WorkspaceDto) {
119
+ this._workspace = workspace
120
+ }
121
+
122
+ get isMarkAsDeleted(): boolean {
123
+ return this._isMarkAsDeleted
124
+ }
125
+
126
+ markToDelete(): void {
127
+ this._isMarkAsDeleted = true
128
+ }
129
+ }
@@ -0,0 +1,54 @@
1
+ import { EventDispatcher } from "../../events"
2
+ import { Files } from "../files/files"
3
+ import { WorkspaceId } from "./workspaces"
4
+ import { Organization } from "../organizations/organization"
5
+
6
+ /**
7
+ * Workspace event.
8
+ */
9
+ export enum WorkspaceEvent {
10
+ CHANGED = "changed"
11
+ }
12
+
13
+ /**
14
+ * Workspace.
15
+ */
16
+ export abstract class Workspace extends EventDispatcher<
17
+ WorkspaceEvent,
18
+ Workspace
19
+ > {
20
+ /**
21
+ * Organization.
22
+ */
23
+ abstract get organization(): Organization
24
+
25
+ /**
26
+ * Workspace id.
27
+ */
28
+ abstract get id(): WorkspaceId
29
+
30
+ /**
31
+ * Workspace name.
32
+ */
33
+ abstract get name(): string
34
+
35
+ /**
36
+ * Workspace description.
37
+ */
38
+ abstract get description(): string
39
+
40
+ /**
41
+ * Workspace files.
42
+ */
43
+ abstract get files(): Files
44
+
45
+ /**
46
+ * Workspace files count.
47
+ */
48
+ abstract filesCount(): Promise<number>
49
+
50
+ /**
51
+ * Change workspace name and description.
52
+ */
53
+ abstract change(name: string, description: string): Promise<void>
54
+ }
@@ -0,0 +1,212 @@
1
+ import { WorkspaceId, Workspaces, WorkspacesEvent } from "./workspaces"
2
+ import { OrganizationImpl } from "../organizations/organization.impl"
3
+ import { Context } from "../../context"
4
+ import { Workspace } from "./workspace"
5
+ import { WorkspaceImpl } from "./workspace.impl"
6
+ import { OrganizationId } from "../organizations/organizations"
7
+ import { RpcService } from "../../services/rpcService"
8
+ import { OrganizationWorkspaces } from "../../dto/userInfoResponse"
9
+ import { WorkspaceDto } from "../../dto/workspacesResponse"
10
+ import { ResponseUtils } from "../../services/responseUtils"
11
+
12
+ export class WorkspacesImpl extends Workspaces {
13
+ private readonly _workspaces: WorkspaceImpl[] = []
14
+
15
+ constructor(
16
+ private readonly organization: OrganizationImpl,
17
+ private readonly context: Context
18
+ ) {
19
+ super()
20
+ }
21
+
22
+ get collection(): readonly Workspace[] {
23
+ return this._workspaces
24
+ }
25
+
26
+ get(id: string): Workspace {
27
+ return <Workspace>this.tryGet(id)
28
+ }
29
+
30
+ tryGet(id: string): Workspace | undefined {
31
+ return this._workspaces.find(workspace => workspace.id === id)
32
+ }
33
+
34
+ contains(id: string): boolean {
35
+ return this._workspaces.find(workspace => workspace.id === id) !== undefined
36
+ }
37
+
38
+ /**
39
+ * Create workspace.
40
+ * @param name
41
+ * @param description
42
+ * @param regulation
43
+ */
44
+ async create(
45
+ name: string,
46
+ description: string,
47
+ regulation?: {
48
+ isCreateNewGroup: boolean
49
+ newGroupName: string
50
+ groupIds: string[]
51
+ }
52
+ ): Promise<Workspace> {
53
+ if (name === undefined || name === null || name.trim() === "") {
54
+ throw new Error("Name is required, must be not empty")
55
+ }
56
+ if (
57
+ description === undefined ||
58
+ description === null ||
59
+ description.trim() === ""
60
+ ) {
61
+ throw new Error("Description is required, must be not empty")
62
+ }
63
+ if (regulation) {
64
+ if (
65
+ regulation.isCreateNewGroup === undefined ||
66
+ regulation.isCreateNewGroup === null
67
+ ) {
68
+ throw new Error("isCreateNewGroup is required, must be not empty")
69
+ }
70
+ if (
71
+ regulation.newGroupName === undefined ||
72
+ regulation.newGroupName === null ||
73
+ regulation.newGroupName.trim() === ""
74
+ ) {
75
+ throw new Error("newGroupName is required, must be not empty")
76
+ }
77
+ if (
78
+ regulation.groupIds === undefined ||
79
+ regulation.groupIds === null ||
80
+ regulation.groupIds.length === 0
81
+ ) {
82
+ throw new Error("groupIds is required, must be not empty")
83
+ }
84
+ }
85
+
86
+ // send create request to the server
87
+ const response = await this.context
88
+ .resolve(RpcService)
89
+ ?.requestBuilder("api/v1/Workspaces")
90
+ .sendPostJson({
91
+ organizationId: this.organization.id,
92
+ profile: {
93
+ name: name,
94
+ description: description
95
+ },
96
+ regulation: {
97
+ isCreateNewGroup: regulation?.isCreateNewGroup ?? false,
98
+ newGroupName: regulation?.newGroupName ?? "",
99
+ groupIds: regulation?.groupIds ?? []
100
+ }
101
+ })
102
+
103
+ // check response status
104
+ if (ResponseUtils.isFail(response)) {
105
+ await ResponseUtils.throwError(`Failed to create workspace, in organization: ${this.organization.id}`, response)
106
+ }
107
+
108
+ // parse workspace from the server's response
109
+ const content = (await response!.json()).workspace as WorkspaceDto
110
+
111
+ // create workspace implementation
112
+ const workspace = new WorkspaceImpl(this.organization, this.context)
113
+ await workspace.initFrom(content)
114
+
115
+ // add workspace to the collection
116
+ this._workspaces.push(workspace)
117
+
118
+ // dispatch event
119
+ this.dispatch({
120
+ type: WorkspacesEvent.ADDED,
121
+ data: workspace
122
+ })
123
+
124
+ return workspace
125
+ }
126
+
127
+ /**
128
+ * Delete workspace.
129
+ * @param id
130
+ */
131
+ async delete(id: WorkspaceId): Promise<void> {
132
+ // get workspace by id
133
+ const workspace = <WorkspaceImpl>this.tryGet(id)
134
+
135
+ // check if workspace is found
136
+ if (!workspace) {
137
+ throw new Error(`Workspace ${id} is not found`)
138
+ }
139
+
140
+ // check if workspace is already marked as deleted
141
+ if (workspace.isMarkAsDeleted) {
142
+ throw new Error(`Workspace ${id} is already marked as deleted, in organization: ${this.organization.id}`)
143
+ }
144
+
145
+ // mark workspace as deleted
146
+ workspace.markToDelete()
147
+
148
+ // send delete request to the server
149
+ const response = await this.context
150
+ .resolve(RpcService)
151
+ ?.requestBuilder("api/v1/Workspaces")
152
+ .searchParam("id", id)
153
+ .sendDelete()
154
+
155
+ // check response status
156
+ if (ResponseUtils.isFail(response)) {
157
+ await ResponseUtils.throwError(
158
+ `Failed to delete workspace: ${workspace.organization.name}/${workspace.name}:${id}, in organization: ${this.organization.id}`,
159
+ response
160
+ )
161
+ }
162
+
163
+ // remove workspace from the collection
164
+ const index = this._workspaces.indexOf(<WorkspaceImpl>workspace)
165
+ if (index < 0) {
166
+ throw new Error(`Workspace ${id} is not found`)
167
+ }
168
+ this._workspaces.splice(index, 1)
169
+
170
+ // dispatch event
171
+ this.dispatch({
172
+ type: WorkspacesEvent.REMOVED,
173
+ data: workspace
174
+ })
175
+ }
176
+
177
+ async initFrom(organizationId: OrganizationId): Promise<void> {
178
+ // init workspaces from the server's response
179
+ const response = await this.context
180
+ .resolve(RpcService)
181
+ ?.requestBuilder("api/v1/Organizations")
182
+ .searchParam("id", organizationId)
183
+ .sendGet()
184
+
185
+ // check response status
186
+ if (ResponseUtils.isFail(response)) {
187
+ await ResponseUtils.throwError(`Failed to fetch workspaces in organization: ${organizationId}`, response)
188
+ }
189
+
190
+ // parse workspaces from the server's response
191
+ const workspaces = ((await response!.json()) as OrganizationWorkspaces)
192
+ .workspaces
193
+
194
+ // init workspaces from the server's response
195
+ for (const workspace of workspaces) {
196
+ // create workspace implementation
197
+ const workspaceImpl = new WorkspaceImpl(this.organization, this.context)
198
+
199
+ // init workspace from the server's response
200
+ await workspaceImpl.initFrom(workspace)
201
+
202
+ // add workspace to the collection
203
+ this._workspaces.push(workspaceImpl)
204
+
205
+ // dispatch event
206
+ this.dispatch({
207
+ type: WorkspacesEvent.ADDED,
208
+ data: workspaceImpl
209
+ })
210
+ }
211
+ }
212
+ }
@@ -0,0 +1,53 @@
1
+ import { EventDispatcher } from "../../events"
2
+ import { Workspace } from "./workspace"
3
+
4
+ export type WorkspaceId = string
5
+
6
+ /**
7
+ * Workspaces event.
8
+ */
9
+ export enum WorkspacesEvent {
10
+ ADDED = "added",
11
+ REMOVED = "removed"
12
+ }
13
+
14
+ /**
15
+ * Organization's workspaces.
16
+ */
17
+ export abstract class Workspaces extends EventDispatcher<
18
+ WorkspacesEvent,
19
+ Workspace
20
+ > {
21
+ /**
22
+ * Workspaces.
23
+ */
24
+ abstract get collection(): ReadonlyArray<Workspace>
25
+
26
+ /**
27
+ * Get workspace by id.
28
+ * @param id
29
+ */
30
+ abstract get(id: WorkspaceId): Workspace
31
+
32
+ /**
33
+ * Try to get workspace by id.
34
+ * @param id
35
+ */
36
+ abstract tryGet(id: WorkspaceId): Workspace | undefined
37
+
38
+ /**
39
+ * Check if workspace exists.
40
+ * @param id
41
+ */
42
+ abstract contains(id: WorkspaceId): boolean
43
+
44
+ /**
45
+ * Create workspace.
46
+ */
47
+ abstract create(name: string, description: string, regulation?: { isCreateNewGroup: boolean, newGroupName: string, groupIds: string[]}): Promise<Workspace>
48
+
49
+ /**
50
+ * Delete workspace.
51
+ */
52
+ abstract delete(id: WorkspaceId): Promise<void>
53
+ }
package/src/unitTest.ts CHANGED
@@ -9,7 +9,7 @@ export enum UnitTest {
9
9
  export type UnitTestProfileSyncAction = () => void
10
10
  export type UnitTestProfileAsyncAction = () => Promise<void>
11
11
 
12
- export class AppSdkUnitTest {
12
+ class AppSdkUnitTest {
13
13
  private static _stack: UnitTest[] = [UnitTest.DO_NOTHING]
14
14
 
15
15
  public static get current(): UnitTest {
@@ -37,6 +37,17 @@ export class AppSdkUnitTest {
37
37
  }
38
38
  }
39
39
 
40
+ export const appTest = async (
41
+ unitTest: UnitTest = UnitTest.DEFAULT,
42
+ func: UnitTestProfileSyncAction | UnitTestProfileAsyncAction
43
+ ): Promise<void> => {
44
+ await AppSdkUnitTest.test(unitTest, func)
45
+ }
46
+
47
+ export const appTestCurrent = (): UnitTest => {
48
+ return AppSdkUnitTest.current
49
+ }
50
+
40
51
  export const isUnitTest = (mask: UnitTest): boolean => {
41
52
  return (AppSdkUnitTest.current & mask) == mask
42
53
  }
package/.browserslistrc DELETED
@@ -1,5 +0,0 @@
1
- last 2 chrome version
2
- last 2 firefox version
3
- last 2 safari version
4
- last 2 edge version
5
- last 2 ie version
package/.editorconfig DELETED
@@ -1,22 +0,0 @@
1
- # Shared editor configurations that track the way prettier formats source.
2
- #
3
- # To use this in vscode:
4
- #
5
- # ext install EditorConfig
6
-
7
- root = true
8
-
9
- # Source files look unixy by default
10
- [*]
11
- end_of_line = lf
12
- insert_final_newline = true
13
-
14
- # Javascript and Typescript look like Google-style
15
- [*.{js,json,ts}]
16
- charset = utf-8
17
- indent_style = space
18
- indent_size = 2
19
- ij_javascript_use_semicolon_after_statement = false
20
- ij_typescript_use_semicolon_after_statement = false
21
- # Not currently supported by vscode, but is supported others, e.g. vim.
22
- max_line_length = 80
package/.eslintrc.json DELETED
@@ -1,44 +0,0 @@
1
- {
2
- "env": {
3
- "browser": true,
4
- "es2021": true
5
- },
6
- "extends": [
7
- "eslint:recommended",
8
- "plugin:@typescript-eslint/recommended"
9
- ],
10
- "parser": "@typescript-eslint/parser",
11
- "parserOptions": {
12
- "ecmaVersion": "latest",
13
- "sourceType": "module"
14
- },
15
- "plugins": [
16
- "@typescript-eslint"
17
- ],
18
- "ignorePatterns": [
19
- "node_modules/",
20
- "dist/"
21
- ],
22
- "rules": {
23
- "@typescript-eslint/space-before-function-paren": "off",
24
- "@typescript-eslint/semi": "off",
25
- "@typescript-eslint/member-delimiter-style": "off",
26
- "@typescript-eslint/no-explicit-any": "off",
27
- "indent": [
28
- "error",
29
- 2
30
- ],
31
- "linebreak-style": [
32
- "error",
33
- "unix"
34
- ],
35
- "quotes": [
36
- "error",
37
- "single"
38
- ],
39
- "semi": [
40
- "error",
41
- "never"
42
- ]
43
- }
44
- }
@@ -1,28 +0,0 @@
1
- name: Publish package to npmjs
2
- on:
3
- workflow_dispatch:
4
-
5
- jobs:
6
- publish:
7
- runs-on: ubuntu-latest
8
- steps:
9
- - uses: actions/checkout@v4
10
-
11
- - uses: actions/setup-node@v3
12
- with:
13
- node-version: '20.x'
14
- registry-url: 'https://registry.npmjs.org'
15
-
16
- - name: ⏩ CI Install ⏩
17
- run: npm ci
18
-
19
- - name: 🧪 Test 🧪
20
- run: npm test >> $GITHUB_STEP_SUMMARY | cat
21
-
22
- - name: 🧱 Build 🧱
23
- run: npm run build
24
-
25
- - name: 📢 Publish to npm 📢
26
- run: npm publish --access public
27
- env:
28
- NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }}
package/.prettierignore DELETED
@@ -1 +0,0 @@
1
- dist
package/.prettierrc DELETED
@@ -1,11 +0,0 @@
1
- {
2
- "singleQuote": true,
3
- "printWidth": 80,
4
- "quoteProps": "preserve",
5
- "trailingComma": "none",
6
- "arrowParens": "avoid",
7
- "semi": false,
8
- "tabWidth": 2,
9
- "useTabs": false,
10
- "spaceBeforeFunctionParen": false
11
- }
package/.yarnrc DELETED
@@ -1,2 +0,0 @@
1
- registry "https://registry.npmjs.org/"
2
- save-prefix ""
package/babel.config.js DELETED
@@ -1,6 +0,0 @@
1
- module.exports = {
2
- presets: [
3
- ['@babel/preset-env', { targets: { node: 'current' } }],
4
- '@babel/preset-typescript'
5
- ]
6
- }