@kumori/aurora-backend-handler 1.0.112 → 1.0.114

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.
@@ -1,4 +1,4 @@
1
- import { Account, getWuiErrorCode, Notification } from "@kumori/aurora-interfaces";
1
+ import { Account, errors, Notification } from "@kumori/aurora-interfaces";
2
2
  import {
3
3
  initializeGlobalWebSocketClient,
4
4
  getWebSocketStatus,
@@ -637,7 +637,7 @@ export const createAccount = async (account: Account, security: Security) => {
637
637
 
638
638
  const accountErrorNotification: Notification = {
639
639
  type: "error",
640
- subtype: getWuiErrorCode("account", "createAccount", code) ?? "account-creation-error",
640
+ subtype: errors.account.creationError.subtype,
641
641
  info_content: {
642
642
  code,
643
643
  message,
@@ -736,7 +736,7 @@ export const deleteAccount = async (account: Account, security: Security) => {
736
736
 
737
737
  const accountNotification: Notification = {
738
738
  type: "success",
739
- subtype: "account-deleting",
739
+ subtype: errors.account.deleting.subtype,
740
740
  date: Date.now().toString(),
741
741
  status: "unread",
742
742
  notificationType: "regular",
@@ -754,7 +754,7 @@ export const deleteAccount = async (account: Account, security: Security) => {
754
754
 
755
755
  const accountErrorNotification: Notification = {
756
756
  type: "error",
757
- subtype: getWuiErrorCode("account", "deleteAccount", code) ?? "account-deletion-error",
757
+ subtype: errors.account.deletionError.subtype,
758
758
  date: Date.now().toString(),
759
759
  info_content: {
760
760
  code,
@@ -797,7 +797,7 @@ export const clearAccount = async (account: Account, security: Security) => {
797
797
  eventHelper.account.publish.cleaned(updatedAccount);
798
798
  const accountNotification: Notification = {
799
799
  type: "success",
800
- subtype: "account-cleaned",
800
+ subtype: errors.account.cleaned.subtype,
801
801
  date: Date.now().toString(),
802
802
  status: "unread",
803
803
  notificationType: "regular",
@@ -815,7 +815,7 @@ export const clearAccount = async (account: Account, security: Security) => {
815
815
 
816
816
  const accountErrorNotification: Notification = {
817
817
  type: "error",
818
- subtype: getWuiErrorCode("account", "deleteAccount", code) ?? "account-clean-error",
818
+ subtype: errors.account.cleanError.subtype,
819
819
  date: Date.now().toString(),
820
820
  info_content: {
821
821
  code,
@@ -1433,7 +1433,7 @@ export const updateAccount = async (account: Account, security: Security) => {
1433
1433
 
1434
1434
  const accountErrorNotification: Notification = {
1435
1435
  type: "error",
1436
- subtype: getWuiErrorCode("account", "updateAccount", code) ?? "account-update-error",
1436
+ subtype: errors.account.updateError.subtype,
1437
1437
  date: Date.now().toString(),
1438
1438
  info_content: {
1439
1439
  code,
@@ -1,5 +1,5 @@
1
1
 
2
- import { Environment, getWuiErrorCode, Notification } from "@kumori/aurora-interfaces";
2
+ import { Environment, errors, Notification } from "@kumori/aurora-interfaces";
3
3
  import { eventHelper } from "../backend-handler";
4
4
  import {
5
5
  initializeGlobalWebSocketClient,
@@ -132,7 +132,7 @@ export const createEnvironment = async (
132
132
  }
133
133
  const envErrorNotification: Notification = {
134
134
  type: "error",
135
- subtype: getWuiErrorCode("environment", "createEnvironment", contentMessage) ?? "environment-creation-error",
135
+ subtype: errors.environment.creationError.subtype,
136
136
  info_content: {
137
137
  code: contentMessage,
138
138
  message: errorContent,
@@ -182,7 +182,7 @@ export const deleteEnvironment = async (
182
182
  // eventHelper.environment.publish.deleted(updatedEnv);
183
183
  const envNotification: Notification = {
184
184
  type: "success",
185
- subtype: "environment-deleting",
185
+ subtype: errors.environment.deleting.subtype,
186
186
  date: Date.now().toString(),
187
187
  status: "unread",
188
188
  notificationType: "regular",
@@ -222,7 +222,7 @@ export const deleteEnvironment = async (
222
222
  }
223
223
  const envErrorNotification: Notification = {
224
224
  type: "error",
225
- subtype: getWuiErrorCode("environment", "deleteEnvironment", contentMessage) ?? "environment-deletion-error",
225
+ subtype: errors.environment.deletionError.subtype,
226
226
  info_content: {
227
227
  code: contentMessage,
228
228
  message: errorContent,
@@ -249,7 +249,7 @@ export const clearEnvironment = async (
249
249
  try {
250
250
  const envNotification: Notification = {
251
251
  type: "info",
252
- subtype: "environment-cleaning",
252
+ subtype: errors.environment.purging.subtype,
253
253
  date: Date.now().toString(),
254
254
  status: "unread",
255
255
  notificationType: "regular",
@@ -314,7 +314,7 @@ export const clearEnvironment = async (
314
314
  }
315
315
  const envErrorNotification: Notification = {
316
316
  type: "error",
317
- subtype: getWuiErrorCode("environment", "deleteEnvironment", contentMessage) ?? "environment-cleaning-error",
317
+ subtype: errors.environment.purgeError.subtype,
318
318
  info_content: {
319
319
  code: contentMessage,
320
320
  message: errorContent,
@@ -412,7 +412,7 @@ export const updateEnvironment = async (
412
412
  eventHelper.environment.publish.updated(updatedEnv);
413
413
  const envNotification: Notification = {
414
414
  type: "success",
415
- subtype: "environment-updated",
415
+ subtype: errors.environment.updated.subtype,
416
416
  date: Date.now().toString(),
417
417
  status: "unread",
418
418
  notificationType: "regular",
@@ -452,7 +452,7 @@ export const updateEnvironment = async (
452
452
  }
453
453
  const envErrorNotification: Notification = {
454
454
  type: "error",
455
- subtype: getWuiErrorCode("environment", "updateEnvironment", contentMessage) ?? "environment-update-error",
455
+ subtype: errors.environment.updateError.subtype,
456
456
  info_content: {
457
457
  code: contentMessage,
458
458
  message: errorContent,
@@ -497,7 +497,7 @@ export const scaleEnvironment = async (
497
497
  eventHelper.environment.publish.scaled(env);
498
498
  const envNotification: Notification = {
499
499
  type: "success",
500
- subtype: "environment-scaled",
500
+ subtype: errors.environment.scaled.subtype,
501
501
  date: Date.now().toString(),
502
502
  status: "unread",
503
503
  notificationType: "regular",
@@ -531,7 +531,7 @@ export const scaleEnvironment = async (
531
531
  }
532
532
  const envErrorNotification: Notification = {
533
533
  type: "error",
534
- subtype: getWuiErrorCode("environment", "scaleEnvironment", contentMessage) ?? "environment-scale-error",
534
+ subtype: errors.environment.scaleError.subtype,
535
535
  info_content: {
536
536
  code: contentMessage,
537
537
  message: errorContent,
@@ -1,5 +1,5 @@
1
1
  import {
2
- getWuiErrorCode,
2
+ errors,
3
3
  Link,
4
4
  MarketplaceItem,
5
5
  MarketplaceService,
@@ -939,7 +939,7 @@ const linkPendingServices = async (service: Service, token: string) => {
939
939
 
940
940
  const notification: Notification = {
941
941
  type: "success",
942
- subtype: "service-linked",
942
+ subtype: errors.service.linked.subtype,
943
943
  date: Date.now().toString(),
944
944
  status: "unread",
945
945
  notificationType: "regular",
@@ -954,7 +954,7 @@ const linkPendingServices = async (service: Service, token: string) => {
954
954
  } catch (linkErr) {
955
955
  const notification: Notification = {
956
956
  type: "error",
957
- subtype: getWuiErrorCode("service", "linkService", (linkErr as any).error.code) ?? "error-service-link",
957
+ subtype: errors.service.linkError.subtype,
958
958
  date: Date.now().toString(),
959
959
  info_content: {
960
960
  code: (linkErr as any).error.code,
@@ -1,4 +1,4 @@
1
- import { getWuiErrorCode, Notification, Resource } from "@kumori/aurora-interfaces";
1
+ import { errors, Notification, Resource } from "@kumori/aurora-interfaces";
2
2
  import { eventHelper } from "../backend-handler";
3
3
 
4
4
  import {
@@ -50,7 +50,7 @@ export const createDomain = async (
50
50
  // eventHelper.resource.publish.created(domain);
51
51
  const resourceNotification: Notification = {
52
52
  type: "success",
53
- subtype: "resource-created",
53
+ subtype: errors.resource.created.subtype,
54
54
  date: Date.now().toString(),
55
55
  status: "unread",
56
56
  notificationType: "regular",
@@ -87,7 +87,7 @@ export const createDomain = async (
87
87
  }
88
88
  const resourceErrorNotification: Notification = {
89
89
  type: "error",
90
- subtype: getWuiErrorCode("resource", "createResource", contentMessage) ?? "resource-creation-error",
90
+ subtype: errors.resource.creationError.subtype,
91
91
  info_content: {
92
92
  code: contentMessage,
93
93
  message: errorContent,
@@ -130,7 +130,7 @@ export const createPort = async (
130
130
  eventHelper.resource.publish.created(port);
131
131
  const resourceNotification: Notification = {
132
132
  type: "success",
133
- subtype: "resource-created",
133
+ subtype: errors.resource.created.subtype,
134
134
  date: Date.now().toString(),
135
135
  status: "unread",
136
136
  notificationType: "regular",
@@ -167,7 +167,7 @@ export const createPort = async (
167
167
  }
168
168
  const resourceErrorNotification: Notification = {
169
169
  type: "error",
170
- subtype: getWuiErrorCode("resource", "createResource", contentMessage) ?? "resource-creation-error",
170
+ subtype: errors.resource.creationError.subtype,
171
171
  info_content: {
172
172
  code: contentMessage,
173
173
  message: errorContent,
@@ -210,7 +210,7 @@ export const createCA = async (
210
210
  eventHelper.resource.publish.created(ca);
211
211
  const resourceNotification: Notification = {
212
212
  type: "success",
213
- subtype: "resource-created",
213
+ subtype: errors.resource.created.subtype,
214
214
  date: Date.now().toString(),
215
215
  status: "unread",
216
216
  notificationType: "regular",
@@ -247,7 +247,7 @@ export const createCA = async (
247
247
  }
248
248
  const resourceErrorNotification: Notification = {
249
249
  type: "error",
250
- subtype: getWuiErrorCode("resource", "createResource", contentMessage) ?? "resource-creation-error",
250
+ subtype: errors.resource.creationError.subtype,
251
251
  info_content: {
252
252
  code: contentMessage,
253
253
  message: errorContent,
@@ -303,7 +303,7 @@ export const createCertificate = async (
303
303
  eventHelper.resource.publish.created(certificate);
304
304
  const resourceNotification: Notification = {
305
305
  type: "success",
306
- subtype: "resource-created",
306
+ subtype: errors.resource.created.subtype,
307
307
  date: Date.now().toString(),
308
308
  status: "unread",
309
309
  notificationType: "regular",
@@ -340,7 +340,7 @@ export const createCertificate = async (
340
340
  }
341
341
  const resourceErrorNotification: Notification = {
342
342
  type: "error",
343
- subtype: getWuiErrorCode("resource", "createResource", contentMessage) ?? "resource-creation-error",
343
+ subtype: errors.resource.creationError.subtype,
344
344
  info_content: {
345
345
  code: contentMessage,
346
346
  message: errorContent,
@@ -383,7 +383,7 @@ export const createSecret = async (
383
383
  eventHelper.resource.publish.created(secret);
384
384
  const resourceNotification: Notification = {
385
385
  type: "success",
386
- subtype: "resource-created",
386
+ subtype: errors.resource.created.subtype,
387
387
  date: Date.now().toString(),
388
388
  status: "unread",
389
389
  notificationType: "regular",
@@ -420,7 +420,7 @@ export const createSecret = async (
420
420
  }
421
421
  const resourceErrorNotification: Notification = {
422
422
  type: "error",
423
- subtype: getWuiErrorCode("resource", "createResource", contentMessage) ?? "resource-creation-error",
423
+ subtype: errors.resource.creationError.subtype,
424
424
  info_content: {
425
425
  code: contentMessage,
426
426
  message: errorContent,
@@ -483,7 +483,7 @@ export const createVolume = async (
483
483
  eventHelper.resource.publish.created(volume);
484
484
  const resourceNotification: Notification = {
485
485
  type: "success",
486
- subtype: "resource-created",
486
+ subtype: errors.resource.created.subtype,
487
487
  date: Date.now().toString(),
488
488
  status: "unread",
489
489
  notificationType: "regular",
@@ -520,7 +520,7 @@ export const createVolume = async (
520
520
  }
521
521
  const resourceErrorNotification: Notification = {
522
522
  type: "error",
523
- subtype: getWuiErrorCode("resource", "createResource", contentMessage) ?? "resource-creation-error",
523
+ subtype: errors.resource.creationError.subtype,
524
524
  info_content: {
525
525
  code: contentMessage,
526
526
  message: errorContent,
@@ -593,7 +593,7 @@ const deleteResourceBase = async (
593
593
  //eventHelper.resource.publish.deleted(resource);
594
594
  const resourceNotification: Notification = {
595
595
  type: "success",
596
- subtype: "resource-deleting",
596
+ subtype: errors.resource.deleting.subtype,
597
597
  date: Date.now().toString(),
598
598
  status: "unread",
599
599
  notificationType: "regular",
@@ -626,7 +626,7 @@ const deleteResourceBase = async (
626
626
  }
627
627
  const resourceErrorNotification: Notification = {
628
628
  type: "error",
629
- subtype: getWuiErrorCode("resource", "deleteResource", contentMessage) ?? "resource-deletion-error",
629
+ subtype: errors.resource.deletionError.subtype,
630
630
  info_content: {
631
631
  code: contentMessage,
632
632
  message: errorContent,
@@ -688,7 +688,7 @@ const updateResourceBase = async (
688
688
  // eventHelper.resource.publish.updated(resource);
689
689
  const resourceNotification: Notification = {
690
690
  type: "success",
691
- subtype: "resource-updated",
691
+ subtype: errors.resource.updated.subtype,
692
692
  date: Date.now().toString(),
693
693
  status: "unread",
694
694
  notificationType: "regular",
@@ -721,7 +721,7 @@ const updateResourceBase = async (
721
721
  }
722
722
  const resourceErrorNotification: Notification = {
723
723
  type: "error",
724
- subtype: getWuiErrorCode("resource", "updateResource", contentMessage) ?? "resource-update-error",
724
+ subtype: errors.resource.updateError.subtype,
725
725
  info_content: {
726
726
  code: contentMessage,
727
727
  message: errorContent,
@@ -6,7 +6,7 @@ import {
6
6
  getWebSocketStatus,
7
7
  makeGlobalWebSocketRequest,
8
8
  } from "../websocket-manager";
9
- import { getWuiErrorCode, Link, Notification, Service } from "@kumori/aurora-interfaces";
9
+ import { errors, Link, Notification, Service } from "@kumori/aurora-interfaces";
10
10
  import { Revision } from "@kumori/aurora-interfaces/interfaces/revision-interface";
11
11
  let pendingLinks = new Map<string, Link[]>();
12
12
  /**
@@ -349,7 +349,7 @@ export const linkPendingServices = async (service: Service, token: string) => {
349
349
 
350
350
  const notification: Notification = {
351
351
  type: "success",
352
- subtype: "service-linked",
352
+ subtype: errors.service.linked.subtype,
353
353
  date: Date.now().toString(),
354
354
  status: "unread",
355
355
  notificationType: "regular",
@@ -364,7 +364,7 @@ export const linkPendingServices = async (service: Service, token: string) => {
364
364
  } catch (linkErr) {
365
365
  const notification: Notification = {
366
366
  type: "error",
367
- subtype: getWuiErrorCode("service", "linkService", (linkErr as any).error.code) ?? "error-service-link",
367
+ subtype: errors.service.linkError.subtype,
368
368
  date: Date.now().toString(),
369
369
  info_content: {
370
370
  code: (linkErr as any).error.code,
@@ -612,7 +612,7 @@ export const updateService = async (
612
612
 
613
613
  const updateNotification: Notification = {
614
614
  type: "success",
615
- subtype: "service-updated",
615
+ subtype: errors.service.updated.subtype,
616
616
  date: Date.now().toString(),
617
617
  status: "unread",
618
618
  notificationType: "regular",
@@ -629,7 +629,7 @@ export const updateService = async (
629
629
  console.error("Error updating service configuration via WebSocket:", err);
630
630
  const notification: Notification = {
631
631
  type: "error",
632
- subtype: getWuiErrorCode("service", "updateRevision", (err as any).error.code) ?? "service-update-error",
632
+ subtype: errors.service.updateError.subtype,
633
633
  date: Date.now().toString(),
634
634
  info_content: {
635
635
  code: (err as any).error.code,
@@ -670,7 +670,7 @@ export const unlinkServices = async (service: Service, token: string) => {
670
670
 
671
671
  const unlinkNotification: Notification = {
672
672
  type: "success",
673
- subtype: "service-unlinking",
673
+ subtype: errors.service.unlinking.subtype,
674
674
  date: Date.now().toString(),
675
675
  status: "unread",
676
676
  notificationType: "regular",
@@ -686,7 +686,7 @@ export const unlinkServices = async (service: Service, token: string) => {
686
686
 
687
687
  const notification: Notification = {
688
688
  type: "error",
689
- subtype: getWuiErrorCode("service", "unlinkService", (unlinkErr as any).error.code) ?? "service-unlink-error",
689
+ subtype: errors.service.unlinkError.subtype,
690
690
  date: Date.now().toString(),
691
691
  info_content: {
692
692
  code: (unlinkErr as any).error.code,
@@ -748,7 +748,7 @@ export const updateServiceLinks = async (link: Link, token: string) => {
748
748
 
749
749
  const notification: Notification = {
750
750
  type: "error",
751
- subtype: getWuiErrorCode("service", "unlinkService", (unlinkErr as any).error.code) ?? "service-unlink-error",
751
+ subtype: errors.service.unlinkError.subtype,
752
752
  date: Date.now().toString(),
753
753
  info_content: {
754
754
  code: (unlinkErr as any).error.code,
@@ -779,7 +779,7 @@ export const updateServiceLinks = async (link: Link, token: string) => {
779
779
 
780
780
  const notification: Notification = {
781
781
  type: "success",
782
- subtype: "service-linked",
782
+ subtype: errors.service.linked.subtype,
783
783
  date: Date.now().toString(),
784
784
  status: "unread",
785
785
  notificationType: "regular",
@@ -794,7 +794,7 @@ export const updateServiceLinks = async (link: Link, token: string) => {
794
794
  } catch (linkErr) {
795
795
  const notification: Notification = {
796
796
  type: "error",
797
- subtype: getWuiErrorCode("service", "linkService", (linkErr as any).error.code) ?? "error-service-link",
797
+ subtype: errors.service.linkError.subtype,
798
798
  date: Date.now().toString(),
799
799
  info_content: {
800
800
  code: (linkErr as any).error.code,
@@ -835,7 +835,7 @@ export const changeRevision = async (data: Service, token: string) => {
835
835
  );
836
836
  const notification: Notification = {
837
837
  type: "success",
838
- subtype: "revision-updated",
838
+ subtype: errors.deployment.revisionUpdated.subtype,
839
839
  date: Date.now().toString(),
840
840
  status: "unread",
841
841
  notificationType: "regular",
@@ -848,7 +848,7 @@ export const changeRevision = async (data: Service, token: string) => {
848
848
  } catch (error) {
849
849
  const notification: Notification = {
850
850
  type: "error",
851
- subtype: getWuiErrorCode("service", "updateRevision", (error as any).error.code) ?? "error-revision-update",
851
+ subtype: errors.deployment.revisionUpdateError.subtype,
852
852
  date: Date.now().toString(),
853
853
  info_content: {
854
854
  code: (error as any).error.code,
@@ -894,7 +894,7 @@ export async function restartInstance(
894
894
  );
895
895
  const notification: Notification = {
896
896
  type: "success",
897
- subtype: "instance-restarted",
897
+ subtype: errors.deployment.instanceRestarted.subtype,
898
898
  date: Date.now().toString(),
899
899
  status: "unread",
900
900
  notificationType: "regular",
@@ -907,7 +907,7 @@ export async function restartInstance(
907
907
  } catch (error) {
908
908
  const notification: Notification = {
909
909
  type: "error",
910
- subtype: getWuiErrorCode("service", "restart", (error as any).error.code) ?? "error-instance-update",
910
+ subtype: errors.deployment.instanceUpdateError.subtype,
911
911
  date: Date.now().toString(),
912
912
  info_content: {
913
913
  code: (error as any).error.code,
@@ -1,4 +1,4 @@
1
- import { getWuiErrorCode, Notification, Registry, Tenant, tenantRole } from "@kumori/aurora-interfaces";
1
+ import { errors, Notification, Registry, Tenant, tenantRole } from "@kumori/aurora-interfaces";
2
2
  import { eventHelper } from "../backend-handler";
3
3
  import { environment } from "../environment";
4
4
  import {
@@ -91,7 +91,7 @@ export const createTenant = async (tenant: Tenant, security: Security) => {
91
91
  eventHelper.tenant.publish.created(updatedTenant);
92
92
  const tenantCreatedNotification: Notification = {
93
93
  type: "success",
94
- subtype: "tenant-created",
94
+ subtype: errors.tenant.created.subtype,
95
95
  date: Date.now().toString(),
96
96
  status: "unread",
97
97
  notificationType: "regular",
@@ -112,7 +112,7 @@ export const createTenant = async (tenant: Tenant, security: Security) => {
112
112
  extractWsErrorInfo(error);
113
113
  const tenantCreationErrorNotification: Notification = {
114
114
  type: "error",
115
- subtype: getWuiErrorCode("tenant", "createTenant", contentMessage) ?? "tenant-creation-error",
115
+ subtype: errors.tenant.creationError.subtype,
116
116
  info_content: {
117
117
  code: contentMessage,
118
118
  message: errorContent,
@@ -164,7 +164,7 @@ export const deleteTenant = async (tenant: Tenant, security: string) => {
164
164
  extractWsErrorInfo(err);
165
165
  const tenantDeletionErrorNotification: Notification = {
166
166
  type: "error",
167
- subtype: getWuiErrorCode("tenant", "deleteTenant", contentMessage) ?? "tenant-deletion-error",
167
+ subtype: errors.tenant.deletionError.subtype,
168
168
  info_content: {
169
169
  code: contentMessage,
170
170
  message: errorContent,
@@ -227,7 +227,7 @@ export const updateTenant = async (tenant: Tenant, security: string) => {
227
227
  eventHelper.tenant.publish.updated(updatedTenant);
228
228
  const tenantCreatedNotification: Notification = {
229
229
  type: "success",
230
- subtype: "tenant-updated",
230
+ subtype: errors.tenant.updated.subtype,
231
231
  date: Date.now().toString(),
232
232
  status: "unread",
233
233
  notificationType: "regular",
@@ -245,7 +245,7 @@ export const updateTenant = async (tenant: Tenant, security: string) => {
245
245
  eventHelper.tenant.publish.updateError(tenantWithoutPlan as Tenant);
246
246
  const tenantUpdateErrorNotification: Notification = {
247
247
  type: "error",
248
- subtype: getWuiErrorCode("tenant", "updateTenant", contentMessage) ?? "tenant-update-error",
248
+ subtype: errors.tenant.updateError.subtype,
249
249
  info_content: {
250
250
  code: contentMessage,
251
251
  message: errorContent,
@@ -313,7 +313,7 @@ export const createTenantHTTP = async (tenant: Tenant) => {
313
313
  eventHelper.tenant.publish.created(updatedTenant);
314
314
  const tenantCreatedNotification: Notification = {
315
315
  type: "success",
316
- subtype: "tenant-created",
316
+ subtype: errors.tenant.created.subtype,
317
317
  date: Date.now().toString(),
318
318
  status: "unread",
319
319
  notificationType: "regular",
@@ -345,7 +345,7 @@ export const createTenantHTTP = async (tenant: Tenant) => {
345
345
 
346
346
  const tenantCreationErrorNotification: Notification = {
347
347
  type: "error",
348
- subtype: getWuiErrorCode("tenant", "createTenant", errorCode) ?? "tenant-creation-error",
348
+ subtype: errors.tenant.creationError.subtype,
349
349
  info_content: {
350
350
  code: errorCode,
351
351
  message: errorMessage,
@@ -376,7 +376,7 @@ export const deleteTenantHTTP = async (tenant: Tenant) => {
376
376
  if (response.ok) {
377
377
  const tenantDeletedNotification: Notification = {
378
378
  type: "success",
379
- subtype: "tenant-deleting",
379
+ subtype: errors.tenant.deleting.subtype,
380
380
  date: Date.now().toString(),
381
381
  status: "unread",
382
382
  notificationType: "regular",
@@ -405,7 +405,7 @@ export const deleteTenantHTTP = async (tenant: Tenant) => {
405
405
 
406
406
  const tenantDeletionErrorNotification: Notification = {
407
407
  type: "error",
408
- subtype: getWuiErrorCode("tenant", "deleteTenant", errorCode) ?? "tenant-deletion-error",
408
+ subtype: errors.tenant.deletionError.subtype,
409
409
  info_content: {
410
410
  code: errorCode,
411
411
  message: errorMessage,
@@ -465,7 +465,7 @@ export const updateTenantHTTP = async (tenant: Tenant) => {
465
465
  eventHelper.tenant.publish.updated(updatedTenant);
466
466
  const tenantCreatedNotification: Notification = {
467
467
  type: "success",
468
- subtype: "tenant-updated",
468
+ subtype: errors.tenant.updated.subtype,
469
469
  date: Date.now().toString(),
470
470
  status: "unread",
471
471
  notificationType: "regular",
@@ -496,7 +496,7 @@ export const updateTenantHTTP = async (tenant: Tenant) => {
496
496
 
497
497
  const tenantUpdateErrorNotification: Notification = {
498
498
  type: "error",
499
- subtype: getWuiErrorCode("tenant", "updateTenant", errorCode) ?? "tenant-update-error",
499
+ subtype: errors.tenant.updateError.subtype,
500
500
  info_content: {
501
501
  code: errorCode,
502
502
  message: errorMessage,
@@ -546,7 +546,7 @@ export const createRegistry = async (
546
546
 
547
547
  const dregistryCreatedNotification: Notification = {
548
548
  type: "success",
549
- subtype: "registry-created",
549
+ subtype: errors.registry.created.subtype,
550
550
  date: Date.now().toString(),
551
551
  status: "unread",
552
552
  notificationType: "regular",
@@ -571,7 +571,7 @@ export const createRegistry = async (
571
571
 
572
572
  const dregistryCreationErrorNotification: Notification = {
573
573
  type: "error",
574
- subtype: getWuiErrorCode("registry", "createDRegistry", contentMessage) ?? "registry-creation-error",
574
+ subtype: errors.registry.creationError.subtype,
575
575
  info_content: {
576
576
  code: contentMessage,
577
577
  message: errorContent,
@@ -632,7 +632,7 @@ export const updateRegistry = async (
632
632
  );
633
633
  const dregistryUpdatedNotification: Notification = {
634
634
  type: "success",
635
- subtype: "registry-updated",
635
+ subtype: errors.registry.updated.subtype,
636
636
  date: Date.now().toString(),
637
637
  status: "unread",
638
638
  notificationType: "regular",
@@ -659,7 +659,7 @@ export const updateRegistry = async (
659
659
 
660
660
  const dregistryUpdateErrorNotification: Notification = {
661
661
  type: "error",
662
- subtype: getWuiErrorCode("registry", "updateDRegistry", contentMessage) ?? "registry-update-error",
662
+ subtype: errors.registry.updateError.subtype,
663
663
  info_content: {
664
664
  code: contentMessage,
665
665
  message: errorContent,
@@ -702,7 +702,7 @@ export const deleteRegistry = async (
702
702
 
703
703
  const dregistryDeletedNotification: Notification = {
704
704
  type: "success",
705
- subtype: "registry-deleted",
705
+ subtype: errors.registry.deleted.subtype,
706
706
  date: Date.now().toString(),
707
707
  status: "unread",
708
708
  notificationType: "regular",
@@ -728,7 +728,7 @@ export const deleteRegistry = async (
728
728
 
729
729
  const dregistryDeletionErrorNotification: Notification = {
730
730
  type: "error",
731
- subtype: getWuiErrorCode("registry", "deleteDRegistry", contentMessage) ?? "registry-deletion-error",
731
+ subtype: errors.registry.deletionError.subtype,
732
732
  info_content: {
733
733
  code: contentMessage,
734
734
  message: errorContent,
@@ -772,7 +772,7 @@ export const inviteUser = async (
772
772
  );
773
773
  const tenantInvitedNotification: Notification = {
774
774
  type: "success",
775
- subtype: "tenant-user-invited",
775
+ subtype: errors.tenant.userInvited.subtype,
776
776
  date: Date.now().toString(),
777
777
  status: "unread",
778
778
  notificationType: "regular",
@@ -798,7 +798,7 @@ export const inviteUser = async (
798
798
  extractWsErrorInfo(error);
799
799
  const tenantInviteErrorNotification: Notification = {
800
800
  type: "error",
801
- subtype: getWuiErrorCode("tenant", "proposeUser", contentMessage) ?? "tenant-user-invite-error",
801
+ subtype: errors.tenant.userInviteError.subtype,
802
802
  info_content: {
803
803
  code: contentMessage,
804
804
  message: errorContent,
@@ -839,7 +839,7 @@ export const removeUser = async (
839
839
  );
840
840
  const tenantUserRemovedNotification: Notification = {
841
841
  type: "success",
842
- subtype: "tenant-user-removed",
842
+ subtype: errors.tenant.userRemoved.subtype,
843
843
  date: Date.now().toString(),
844
844
  status: "unread",
845
845
  notificationType: "regular",
@@ -862,7 +862,7 @@ export const removeUser = async (
862
862
  extractWsErrorInfo(error);
863
863
  const tenantUserRemovedErrorNotification: Notification = {
864
864
  type: "error",
865
- subtype: getWuiErrorCode("tenant", "excludeUser", contentMessage) ?? "tenant-user-removed-error",
865
+ subtype: errors.tenant.userRemovedError.subtype,
866
866
  info_content: {
867
867
  code: contentMessage,
868
868
  message: errorContent,
@@ -905,7 +905,7 @@ export const updateUserRole = async (
905
905
  );
906
906
  const tenantUserUpdatedNotification: Notification = {
907
907
  type: "success",
908
- subtype: "user-role-updated",
908
+ subtype: errors.tenant.roleUpdated.subtype,
909
909
  date: Date.now().toString(),
910
910
  status: "unread",
911
911
  notificationType: "regular",
@@ -930,7 +930,7 @@ export const updateUserRole = async (
930
930
  extractWsErrorInfo(error);
931
931
  const tenantUserUpdatedErrorNotification: Notification = {
932
932
  type: "error",
933
- subtype: getWuiErrorCode("tenant", "modifyUserRole", contentMessage) ?? "user-role-updated-error",
933
+ subtype: errors.tenant.roleUpdateError.subtype,
934
934
  info_content: {
935
935
  code: contentMessage,
936
936
  message: errorContent,
@@ -965,7 +965,7 @@ export const acceptInvite = async (tenant: string, security: string) => {
965
965
  );
966
966
  const tenantInviteAcceptedNotification: Notification = {
967
967
  type: "success",
968
- subtype: "tenant-invite-accepted",
968
+ subtype: errors.tenant.inviteAccepted.subtype,
969
969
  date: Date.now().toString(),
970
970
  status: "unread",
971
971
  notificationType: "regular",
@@ -986,7 +986,7 @@ export const acceptInvite = async (tenant: string, security: string) => {
986
986
  extractWsErrorInfo(error);
987
987
  const tenantInviteAcceptedErrorNotification: Notification = {
988
988
  type: "error",
989
- subtype: getWuiErrorCode("tenant", "acceptProposalUser", contentMessage) ?? "tenant-invite-accepted-error",
989
+ subtype: errors.tenant.inviteAcceptError.subtype,
990
990
  info_content: {
991
991
  code: contentMessage,
992
992
  message: errorContent,
@@ -1020,7 +1020,7 @@ export const rejectInvite = async (tenant: string, security: string, leave: bool
1020
1020
  if(leave){
1021
1021
  const tenantInviteRejectedNotification: Notification = {
1022
1022
  type: "success",
1023
- subtype: "tenant-leave",
1023
+ subtype: errors.tenant.leave.subtype,
1024
1024
  date: Date.now().toString(),
1025
1025
  status: "unread",
1026
1026
  notificationType: "regular",
@@ -1033,7 +1033,7 @@ export const rejectInvite = async (tenant: string, security: string, leave: bool
1033
1033
  else{
1034
1034
  const tenantInviteRejectedNotification: Notification = {
1035
1035
  type: "success",
1036
- subtype: "tenant-invite-rejected",
1036
+ subtype: errors.tenant.inviteRejected.subtype,
1037
1037
  date: Date.now().toString(),
1038
1038
  status: "unread",
1039
1039
  notificationType: "regular",
@@ -1056,7 +1056,7 @@ export const rejectInvite = async (tenant: string, security: string, leave: bool
1056
1056
  extractWsErrorInfo(error);
1057
1057
  const tenantInviteRejectedErrorNotification: Notification = {
1058
1058
  type: "error",
1059
- subtype: getWuiErrorCode("tenant", "rejectProposalUser", contentMessage) ?? "tenant-invite-rejected-error",
1059
+ subtype: errors.tenant.inviteRejectError.subtype,
1060
1060
  info_content: {
1061
1061
  code: contentMessage,
1062
1062
  message: errorContent,
@@ -1109,7 +1109,7 @@ export const createToken = async (
1109
1109
 
1110
1110
  const tenantTokenCreatedNotification: Notification = {
1111
1111
  type: "success",
1112
- subtype: "token-created",
1112
+ subtype: errors.user.tokenCreated.subtype,
1113
1113
  date: Date.now().toString(),
1114
1114
  status: "unread",
1115
1115
  notificationType: "regular",
@@ -8,7 +8,7 @@ import {
8
8
  Account,
9
9
  Container,
10
10
  Environment,
11
- getWuiErrorCode,
11
+ errors,
12
12
  Instance,
13
13
  MarketplaceItem,
14
14
  Organization,
@@ -1064,7 +1064,7 @@ export const updateUser = async (user: User) => {
1064
1064
  eventHelper.user.publish.updated(user);
1065
1065
  eventHelper.notification.publish.creation({
1066
1066
  type: "success",
1067
- subtype: "user-updated",
1067
+ subtype: errors.user.updated.subtype,
1068
1068
  date: Date.now().toString(),
1069
1069
  status: "unread",
1070
1070
  notificationType: "regular",
@@ -1079,7 +1079,7 @@ export const updateUser = async (user: User) => {
1079
1079
  eventHelper.user.publish.updateError(user);
1080
1080
  eventHelper.notification.publish.creation({
1081
1081
  type: "error",
1082
- subtype: getWuiErrorCode("user", "modifyUserInfo", (error as any).error.code) ?? "user-update-error",
1082
+ subtype: errors.user.updateError.subtype,
1083
1083
  date: Date.now().toString(),
1084
1084
  status: "unread",
1085
1085
  notificationType: "regular",
@@ -1107,7 +1107,7 @@ export const deleteUSer = async (user: User, security: string) => {
1107
1107
  );
1108
1108
  eventHelper.notification.publish.creation({
1109
1109
  type: "success",
1110
- subtype: "user-deleted",
1110
+ subtype: errors.user.deleted.subtype,
1111
1111
  date: Date.now().toString(),
1112
1112
  status: "unread",
1113
1113
  notificationType: "regular",
@@ -1118,7 +1118,7 @@ export const deleteUSer = async (user: User, security: string) => {
1118
1118
  console.error("Error deleting user:", error);
1119
1119
  eventHelper.notification.publish.creation({
1120
1120
  type: "error",
1121
- subtype: getWuiErrorCode("user", "deleteUser", (error as any).error.code) ?? "user-delete-error",
1121
+ subtype: errors.user.deleteError.subtype,
1122
1122
  date: Date.now().toString(),
1123
1123
  status: "unread",
1124
1124
  notificationType: "regular",
@@ -68,6 +68,7 @@ import { getPlanProviders } from "./api/planProvider-api-service";
68
68
  import {
69
69
  Account,
70
70
  Environment,
71
+ errors,
71
72
  Link,
72
73
  MarketplaceItem,
73
74
  MarketplaceService,
@@ -611,7 +612,7 @@ export class BackendHandler {
611
612
  const updatedCb = (data: string) => {
612
613
  const upgradeNotification: Notification = {
613
614
  type: "success",
614
- subtype: "plan-upgrade",
615
+ subtype: errors.user.planUpgraded.subtype,
615
616
  date: Date.now().toString(),
616
617
  status: "unread",
617
618
  notificationType: "regular",
@@ -641,7 +642,7 @@ export class BackendHandler {
641
642
  const downgradedCb = (data: string) => {
642
643
  const downgradeNotification: Notification = {
643
644
  type: "success",
644
- subtype: "plan-downgrade",
645
+ subtype: errors.user.planDowngraded.subtype,
645
646
  date: Date.now().toString(),
646
647
  status: "unread",
647
648
  notificationType: "regular",
@@ -677,7 +678,7 @@ export class BackendHandler {
677
678
  const createdCb = (data: Environment) => {
678
679
  const envNotification: Notification = {
679
680
  type: "success",
680
- subtype: "environment-created",
681
+ subtype: errors.environment.created.subtype,
681
682
  date: Date.now().toString(),
682
683
  status: "unread",
683
684
  notificationType: "regular",
@@ -761,7 +762,7 @@ export class BackendHandler {
761
762
  const deployedCb = (data: Service) => {
762
763
  const deploymentSuccessNotification: Notification = {
763
764
  type: "success",
764
- subtype: "deployment-success",
765
+ subtype: errors.deployment.success.subtype,
765
766
  date: Date.now().toString(),
766
767
  status: "unread",
767
768
  notificationType: "regular",
@@ -776,7 +777,7 @@ export class BackendHandler {
776
777
  const deploymentErrorCb = (data: Service) => {
777
778
  const deploymentErrorNotification: Notification = {
778
779
  type: "error",
779
- subtype: "deployment-error",
780
+ subtype: errors.deployment.error.subtype,
780
781
  date: Date.now().toString(),
781
782
  status: "unread",
782
783
  info_content: {
@@ -797,7 +798,7 @@ export class BackendHandler {
797
798
  deployService(data, token);
798
799
  const deploymentSuccessNotification: Notification = {
799
800
  type: "info",
800
- subtype: "deployment-in-progress",
801
+ subtype: errors.deployment.inProgress.subtype,
801
802
  date: Date.now().toString(),
802
803
  status: "unread",
803
804
  notificationType: "regular",
@@ -828,7 +829,7 @@ export class BackendHandler {
828
829
  const updatedCb = (data: Service) => {
829
830
  const deploymentNotification: Notification = {
830
831
  type: "success",
831
- subtype: "deployment-updated",
832
+ subtype: errors.deployment.updated.subtype,
832
833
  date: Date.now().toString(),
833
834
  status: "unread",
834
835
  notificationType: "regular",
@@ -853,7 +854,7 @@ export class BackendHandler {
853
854
  const deleteCb = (data: Service) => {
854
855
  const deploymentNotification: Notification = {
855
856
  type: "info",
856
- subtype: "deployment-deleting",
857
+ subtype: errors.deployment.deleting.subtype,
857
858
  date: Date.now().toString(),
858
859
  status: "unread",
859
860
  notificationType: "regular",
@@ -873,7 +874,7 @@ export class BackendHandler {
873
874
  const deletedCb = (data: Service) => {
874
875
  const deploymentNotification: Notification = {
875
876
  type: "success",
876
- subtype: "deployment-deleted",
877
+ subtype: errors.deployment.deleted.subtype,
877
878
  date: Date.now().toString(),
878
879
  status: "unread",
879
880
  notificationType: "regular",
@@ -1089,7 +1090,7 @@ export class BackendHandler {
1089
1090
  const deletedCb = (data: Resource) => {
1090
1091
  const resourceNotification: Notification = {
1091
1092
  type: "success",
1092
- subtype: "resource-deleted",
1093
+ subtype: errors.resource.deleted.subtype,
1093
1094
  date: Date.now().toString(),
1094
1095
  status: "unread",
1095
1096
  notificationType: "regular",
@@ -1,4 +1,4 @@
1
- import { Account, getWuiErrorCode, Notification } from "@kumori/aurora-interfaces";
1
+ import { Account, errors, Notification } from "@kumori/aurora-interfaces";
2
2
  const CREDENTIAL_ERROR_CODES = new Set([
3
3
  "_error_retrieving_credentials_",
4
4
  "_invalid_account_credentials_",
@@ -289,7 +289,7 @@ export const handleAccountOperationSuccess = ({
289
289
  shouldDelete: true,
290
290
  notification: {
291
291
  type: "success",
292
- subtype: "account-deleted",
292
+ subtype: errors.account.deleted.subtype,
293
293
  date: Date.now().toString(),
294
294
  status: "unread",
295
295
  notificationType: "regular",
@@ -308,7 +308,7 @@ export const handleAccountOperationSuccess = ({
308
308
  shouldDelete: false,
309
309
  notification: {
310
310
  type: "success",
311
- subtype: isCreate ? "account-created" : "account-updated",
311
+ subtype: isCreate ? errors.account.created.subtype : errors.account.updated.subtype,
312
312
  date: Date.now().toString(),
313
313
  status: "unread",
314
314
  notificationType: "regular",
@@ -357,11 +357,10 @@ export const handleAccountOperationError = ({
357
357
  const errorCode: string = error?.error?.code ?? error?.code ?? "";
358
358
  const errorStatus = resolveErrorStatus(errorCode);
359
359
 
360
- const errSubtype = isCreate ? "account-creation-error" : isUpdate ? "account-update-error" : "account-deletion-error";
361
- const errMethod = isCreate ? "createAccount" : isUpdate ? "updateAccount" : "deleteAccount";
360
+ const errEntry = isCreate ? errors.account.creationError : isUpdate ? errors.account.updateError : errors.account.deletionError;
362
361
  const notification: Notification = {
363
362
  type: "error",
364
- subtype: getWuiErrorCode("account", errMethod, errorCode) ?? errSubtype,
363
+ subtype: errEntry.subtype,
365
364
  date: Date.now().toString(),
366
365
  status: "unread",
367
366
  info_content: {
@@ -1,4 +1,4 @@
1
- import { Account, Environment, getWuiErrorCode, Notification } from "@kumori/aurora-interfaces";
1
+ import { Account, Environment, errors, Notification } from "@kumori/aurora-interfaces";
2
2
 
3
3
 
4
4
 
@@ -184,7 +184,7 @@ export const handleEnvironmentOperationSuccess = ({
184
184
 
185
185
  const envNotification: Notification = {
186
186
  type: "success",
187
- subtype: "environment-cleaned",
187
+ subtype: errors.environment.purged.subtype,
188
188
  date: Date.now().toString(),
189
189
  status: "unread",
190
190
  notificationType: "regular",
@@ -249,11 +249,10 @@ export const handleEnvironmentOperationError = ({
249
249
  ? "updateError"
250
250
  : "deletionError";
251
251
 
252
- const envErrSubtype = action === "CREATE" ? "environment-creation-error" : action === "UPDATE" ? "environment-update-error" : "environment-deletion-error";
253
- const envErrMethod = action === "CREATE" ? "createEnvironment" : action === "UPDATE" ? "updateEnvironment" : "deleteEnvironment";
252
+ const envErrEntry = action === "CREATE" ? errors.environment.creationError : action === "UPDATE" ? errors.environment.updateError : errors.environment.deletionError;
254
253
  const envErrorNotification: Notification = {
255
254
  type: "error",
256
- subtype: getWuiErrorCode("environment", envErrMethod, error?.error?.code || "UNKNOWN_ERROR") ?? envErrSubtype,
255
+ subtype: envErrEntry.subtype,
257
256
  date: Date.now().toString(),
258
257
  status: "unread",
259
258
  info_content: {
@@ -1,4 +1,4 @@
1
- import { ClusterToken, Notification, Token, UserData } from "@kumori/aurora-interfaces";
1
+ import { ClusterToken, errors, Notification, Token, UserData } from "@kumori/aurora-interfaces";
2
2
 
3
3
 
4
4
  interface HandleTokenEventParams {
@@ -161,7 +161,7 @@ export const handleTokenDeletion = ({
161
161
 
162
162
  const notification: Notification = {
163
163
  type: "success",
164
- subtype: "token-deleted",
164
+ subtype: errors.user.tokenDeleted.subtype,
165
165
  date: Date.now().toString(),
166
166
  status: "unread",
167
167
  notificationType: "regular",
@@ -1,4 +1,5 @@
1
1
  import {
2
+ errors,
2
3
  Notification,
3
4
  Plan,
4
5
  Tenant,
@@ -61,7 +62,7 @@ export const handleUserEvent = ({
61
62
  eventHelper.tenant.publish.deleted(tenantToDelete);
62
63
  const tenantDeletedNotification: Notification = {
63
64
  type: "success",
64
- subtype: "tenant-deleted",
65
+ subtype: errors.tenant.deleted.subtype,
65
66
  date: Date.now().toString(),
66
67
  notificationType: "regular",
67
68
  status: "unread",
@@ -75,7 +76,7 @@ export const handleUserEvent = ({
75
76
  } else {
76
77
  const userRemovedNotification: Notification = {
77
78
  type: "info",
78
- subtype: "user-removed-from-tenant",
79
+ subtype: errors.tenant.accessRevoked.subtype,
79
80
  date: Date.now().toString(),
80
81
  notificationType: "regular",
81
82
  status: "unread",
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@kumori/aurora-backend-handler",
3
- "version": "1.0.112",
3
+ "version": "1.0.114",
4
4
  "description": "backend handler",
5
5
  "main": "backend-handler.ts",
6
6
  "scripts": {
@@ -11,8 +11,8 @@
11
11
  "glob": "^11.0.0"
12
12
  },
13
13
  "dependencies": {
14
- "@kumori/aurora-interfaces": "^1.0.31",
15
- "@kumori/kumori-dsl-generator": "1.0.10",
14
+ "@kumori/aurora-interfaces": "^1.0.32",
15
+ "@kumori/kumori-dsl-generator": "1.0.11",
16
16
  "@kumori/kumori-module-generator": "^1.1.6",
17
17
  "ts-node": "^10.9.2",
18
18
  "uuid": "^11.1.0",
@@ -6,6 +6,7 @@ import {
6
6
  Channel,
7
7
  ClusterToken,
8
8
  Environment,
9
+ errors,
9
10
  Instance,
10
11
  MarketplaceItem,
11
12
  Notification,
@@ -962,7 +963,7 @@ const handleEvent = async (message: WSMessage) => {
962
963
  ) {
963
964
  const roleNotification: Notification = {
964
965
  type: "info",
965
- subtype: "tenant-role-changed",
966
+ subtype: errors.tenant.roleChanged.subtype,
966
967
  date: Date.now().toString(),
967
968
  status: "unread",
968
969
  callToAction: false,
@@ -1783,7 +1784,7 @@ const handleDeleteEvent = async (message: WSMessage) => {
1783
1784
  eventHelper.environment.publish.deleted(deletedEnv);
1784
1785
  const envNotification: Notification = {
1785
1786
  type: "success",
1786
- subtype: "environment-deleted",
1787
+ subtype: errors.environment.deleted.subtype,
1787
1788
  date: Date.now().toString(),
1788
1789
  callToAction: false,
1789
1790
  status: "unread",
@@ -1803,7 +1804,7 @@ const handleDeleteEvent = async (message: WSMessage) => {
1803
1804
  eventHelper.account.publish.deleted(deletedAccount);
1804
1805
  const accountNotification: Notification = {
1805
1806
  type: "success",
1806
- subtype: "account-deleted",
1807
+ subtype: errors.account.deleted.subtype,
1807
1808
  date: Date.now().toString(),
1808
1809
  callToAction: false,
1809
1810
  status: "unread",
@@ -1941,7 +1942,7 @@ const handleDeleteEvent = async (message: WSMessage) => {
1941
1942
  tenantsMap.set(tenantName, registryTenant);
1942
1943
  const registryNotification: Notification = {
1943
1944
  type: "success",
1944
- subtype: "registry-deleted",
1945
+ subtype: errors.registry.deleted.subtype,
1945
1946
  date: Date.now().toString(),
1946
1947
  status: "unread",
1947
1948
  callToAction: false,
@@ -1997,7 +1998,7 @@ const handleDeleteEvent = async (message: WSMessage) => {
1997
1998
  if (deletedLinkInfo) {
1998
1999
  const unlinkNotification: Notification = {
1999
2000
  type: "success",
2000
- subtype: "service-unlinked",
2001
+ subtype: errors.service.unlinked.subtype,
2001
2002
  date: Date.now().toString(),
2002
2003
  status: "unread",
2003
2004
  callToAction: false,