@abyss-project/console 5.0.0 → 7.0.0

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 (53) hide show
  1. package/dist/api/internal-ticket-config.api.d.ts +5 -1
  2. package/dist/api/internal-ticket-config.api.js +20 -1
  3. package/dist/api/internal-ticket-config.api.js.map +1 -1
  4. package/dist/api/internal-ticket.api.d.ts +5 -1
  5. package/dist/api/internal-ticket.api.js +20 -1
  6. package/dist/api/internal-ticket.api.js.map +1 -1
  7. package/dist/api/workflow.admin.api.js.map +1 -1
  8. package/dist/index.d.ts +12 -0
  9. package/dist/index.js +12 -0
  10. package/dist/index.js.map +1 -1
  11. package/dist/types/dto/internal-ticket-activity.dto.d.ts +16 -0
  12. package/dist/types/dto/workflow.dto.d.ts +1 -1
  13. package/dist/types/enum/internal-ticket.enum.d.ts +29 -1
  14. package/dist/types/enum/internal-ticket.enum.js +32 -1
  15. package/dist/types/enum/internal-ticket.enum.js.map +1 -1
  16. package/dist/types/interface/api/index.d.ts +2 -0
  17. package/dist/types/interface/api/index.js +2 -0
  18. package/dist/types/interface/api/index.js.map +1 -1
  19. package/dist/types/interface/api/requests/internal-ticket-approval.request.d.ts +59 -0
  20. package/dist/types/interface/api/requests/internal-ticket-approval.request.js +3 -0
  21. package/dist/types/interface/api/requests/internal-ticket-approval.request.js.map +1 -0
  22. package/dist/types/interface/api/requests/internal-ticket-config.request.d.ts +14 -1
  23. package/dist/types/interface/api/requests/internal-ticket.request.d.ts +3 -1
  24. package/dist/types/interface/api/responses/internal-ticket-approval.response.d.ts +21 -0
  25. package/dist/types/interface/api/responses/internal-ticket-approval.response.js +3 -0
  26. package/dist/types/interface/api/responses/internal-ticket-approval.response.js.map +1 -0
  27. package/dist/types/interface/index.d.ts +2 -0
  28. package/dist/types/interface/index.js +2 -0
  29. package/dist/types/interface/index.js.map +1 -1
  30. package/dist/types/interface/models/internal-ticket-approval-rule.model.d.ts +12 -0
  31. package/dist/types/interface/models/internal-ticket-approval-rule.model.js +3 -0
  32. package/dist/types/interface/models/internal-ticket-approval-rule.model.js.map +1 -0
  33. package/dist/types/interface/models/internal-ticket-approval.model.d.ts +17 -0
  34. package/dist/types/interface/models/internal-ticket-approval.model.js +3 -0
  35. package/dist/types/interface/models/internal-ticket-approval.model.js.map +1 -0
  36. package/dist/types/interface/models/internal-ticket-artifact-type.model.d.ts +3 -0
  37. package/dist/types/interface/models/internal-ticket.model.d.ts +6 -1
  38. package/dist/utils/index.d.ts +3 -0
  39. package/dist/utils/index.js +3 -0
  40. package/dist/utils/index.js.map +1 -1
  41. package/dist/utils/internal-ticket-approval.utils.d.ts +13 -0
  42. package/dist/utils/internal-ticket-approval.utils.js +50 -0
  43. package/dist/utils/internal-ticket-approval.utils.js.map +1 -0
  44. package/dist/utils/internal-ticket-artifact-rules.utils.d.ts +13 -0
  45. package/dist/utils/internal-ticket-artifact-rules.utils.js +44 -0
  46. package/dist/utils/internal-ticket-artifact-rules.utils.js.map +1 -0
  47. package/dist/utils/internal-ticket-artifact-value.utils.d.ts +16 -0
  48. package/dist/utils/internal-ticket-artifact-value.utils.js +53 -0
  49. package/dist/utils/internal-ticket-artifact-value.utils.js.map +1 -0
  50. package/dist/utils/internal-ticket-status.utils.d.ts +1 -1
  51. package/dist/utils/internal-ticket-status.utils.js +15 -1
  52. package/dist/utils/internal-ticket-status.utils.js.map +1 -1
  53. package/package.json +1 -1
@@ -0,0 +1,59 @@
1
+ import { InternalTicketApprovalDecision } from '../../../enum';
2
+ import { ArtifactRuleConditionType } from '../../models/internal-ticket-artifact-rule.model';
3
+ export interface IRequestInternalTicketApprovalParams {
4
+ organizationId: string;
5
+ internalTicketId: string;
6
+ }
7
+ export interface IRequestInternalTicketApprovalBody {
8
+ approverUserId: string;
9
+ }
10
+ export interface IDecideInternalTicketApprovalParams {
11
+ organizationId: string;
12
+ internalTicketId: string;
13
+ internalTicketApprovalId: string;
14
+ }
15
+ export interface IDecideInternalTicketApprovalBody {
16
+ decision: InternalTicketApprovalDecision.APPROVED | InternalTicketApprovalDecision.REFUSED;
17
+ comment?: string;
18
+ }
19
+ export interface IWithdrawInternalTicketApprovalParams {
20
+ organizationId: string;
21
+ internalTicketId: string;
22
+ internalTicketApprovalId: string;
23
+ }
24
+ export interface IListInternalTicketApprovalParams {
25
+ organizationId: string;
26
+ internalTicketId: string;
27
+ }
28
+ export interface IListInternalTicketApprovalRuleParams {
29
+ organizationId: string;
30
+ }
31
+ export interface IListInternalTicketApprovalRuleQuery {
32
+ internalTicketSectionId?: string;
33
+ }
34
+ export interface ICreateInternalTicketApprovalRuleParams {
35
+ organizationId: string;
36
+ }
37
+ export interface ICreateInternalTicketApprovalRuleBody {
38
+ internalTicketSectionId: string;
39
+ conditionType: ArtifactRuleConditionType;
40
+ conditionId?: string;
41
+ step?: number;
42
+ approverUserId: string;
43
+ isEnabled?: boolean;
44
+ }
45
+ export interface IUpdateInternalTicketApprovalRuleParams {
46
+ organizationId: string;
47
+ internalTicketApprovalRuleId: string;
48
+ }
49
+ export interface IUpdateInternalTicketApprovalRuleBody {
50
+ conditionType?: ArtifactRuleConditionType;
51
+ conditionId?: string | null;
52
+ step?: number;
53
+ approverUserId?: string;
54
+ isEnabled?: boolean;
55
+ }
56
+ export interface IDeleteInternalTicketApprovalRuleParams {
57
+ organizationId: string;
58
+ internalTicketApprovalRuleId: string;
59
+ }
@@ -0,0 +1,3 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ //# sourceMappingURL=internal-ticket-approval.request.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"internal-ticket-approval.request.js","sourceRoot":"","sources":["../../../../../src/types/interface/api/requests/internal-ticket-approval.request.ts"],"names":[],"mappings":""}
@@ -2,12 +2,18 @@ import { InternalTicketSectionVisibility } from '../../../enum/internal-ticket.e
2
2
  export interface ICreateInternalTicketSectionParams {
3
3
  organizationId: string;
4
4
  }
5
+ export interface IInternalTicketSectionConfigItem {
6
+ name: string;
7
+ color?: string;
8
+ }
5
9
  export interface ICreateInternalTicketSectionBody {
6
10
  name: string;
7
11
  description?: string;
8
12
  color?: string;
9
13
  icon?: string;
10
14
  order?: number;
15
+ categories?: IInternalTicketSectionConfigItem[];
16
+ priorities?: IInternalTicketSectionConfigItem[];
11
17
  }
12
18
  export interface IListInternalTicketSectionParams {
13
19
  organizationId: string;
@@ -145,7 +151,8 @@ export interface IDeleteInternalTicketTagParams {
145
151
  organizationId: string;
146
152
  internalTicketTagId: string;
147
153
  }
148
- import { ArtifactRuleConditionType } from '../../models/internal-ticket-artifact-rule.model';
154
+ import { ArtifactRuleBehaviorType, ArtifactRuleConditionType } from '../../models/internal-ticket-artifact-rule.model';
155
+ import { ArtifactValueType } from '../../../enum';
149
156
  export interface ICreateInternalTicketArtifactTypeParams {
150
157
  organizationId: string;
151
158
  }
@@ -156,9 +163,12 @@ export interface ICreateInternalTicketArtifactTypeBody {
156
163
  description?: string;
157
164
  order?: number;
158
165
  isEnabled?: boolean;
166
+ valueType?: ArtifactValueType;
167
+ valueOptions?: string[];
159
168
  rules?: Array<{
160
169
  conditionType: ArtifactRuleConditionType;
161
170
  conditionId?: string;
171
+ behaviorType?: ArtifactRuleBehaviorType;
162
172
  }>;
163
173
  }
164
174
  export interface IListInternalTicketArtifactTypeParams {
@@ -178,9 +188,12 @@ export interface IUpdateInternalTicketArtifactTypeBody {
178
188
  order?: number;
179
189
  isEnabled?: boolean;
180
190
  isArchived?: boolean;
191
+ valueType?: ArtifactValueType;
192
+ valueOptions?: string[];
181
193
  rules?: Array<{
182
194
  conditionType: ArtifactRuleConditionType;
183
195
  conditionId?: string;
196
+ behaviorType?: ArtifactRuleBehaviorType;
184
197
  }>;
185
198
  }
186
199
  export interface IDeleteInternalTicketArtifactTypeParams {
@@ -13,10 +13,11 @@ export interface ICreateInternalTicketBody {
13
13
  isPrivate?: boolean;
14
14
  tagIds?: string[];
15
15
  artifacts?: {
16
+ internalTicketArtifactTypeId?: string;
16
17
  label: string;
17
18
  value: string;
18
19
  }[];
19
- projectId: string;
20
+ projectId?: string;
20
21
  }
21
22
  export interface IPaginateInternalTicketParams {
22
23
  organizationId: string;
@@ -53,6 +54,7 @@ export interface IUpdateInternalTicketBody {
53
54
  priorityReason?: string;
54
55
  priorityCheckedAt?: Date;
55
56
  reviewedAt?: Date;
57
+ waitingRequesterSince?: Date | null;
56
58
  resolvedAt?: Date | null;
57
59
  resolvedReason?: string;
58
60
  closedAt?: Date | null;
@@ -0,0 +1,21 @@
1
+ import { IInternalTicketApproval } from '../../models/internal-ticket-approval.model';
2
+ import { IInternalTicketApprovalRule } from '../../models/internal-ticket-approval-rule.model';
3
+ import { IResponse } from '../type-message/response';
4
+ export interface IInternalTicketApprovalData {
5
+ internalTicketApproval: IInternalTicketApproval;
6
+ }
7
+ export type IRequestInternalTicketApprovalResponse = IResponse<IInternalTicketApprovalData>;
8
+ export type IDecideInternalTicketApprovalResponse = IResponse<IInternalTicketApprovalData>;
9
+ export interface IListInternalTicketApprovalData {
10
+ internalTicketApprovals: IInternalTicketApproval[];
11
+ }
12
+ export type IListInternalTicketApprovalResponse = IResponse<IListInternalTicketApprovalData>;
13
+ export interface IInternalTicketApprovalRuleData {
14
+ internalTicketApprovalRule: IInternalTicketApprovalRule;
15
+ }
16
+ export type ICreateInternalTicketApprovalRuleResponse = IResponse<IInternalTicketApprovalRuleData>;
17
+ export type IUpdateInternalTicketApprovalRuleResponse = IResponse<IInternalTicketApprovalRuleData>;
18
+ export interface IListInternalTicketApprovalRuleData {
19
+ internalTicketApprovalRules: IInternalTicketApprovalRule[];
20
+ }
21
+ export type IListInternalTicketApprovalRuleResponse = IResponse<IListInternalTicketApprovalRuleData>;
@@ -0,0 +1,3 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ //# sourceMappingURL=internal-ticket-approval.response.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"internal-ticket-approval.response.js","sourceRoot":"","sources":["../../../../../src/types/interface/api/responses/internal-ticket-approval.response.ts"],"names":[],"mappings":""}
@@ -36,5 +36,7 @@ export * from './models/internal-ticket-assignee.model';
36
36
  export * from './models/internal-ticket-tag.model';
37
37
  export * from './models/internal-ticket-ticket-tag.model';
38
38
  export * from './models/internal-ticket-artifact-type.model';
39
+ export * from './models/internal-ticket-approval.model';
40
+ export * from './models/internal-ticket-approval-rule.model';
39
41
  export * from './models/internal-ticket-artifact-rule.model';
40
42
  export * from './models/internal-ticket-artifact.model';
@@ -52,6 +52,8 @@ __exportStar(require("./models/internal-ticket-assignee.model"), exports);
52
52
  __exportStar(require("./models/internal-ticket-tag.model"), exports);
53
53
  __exportStar(require("./models/internal-ticket-ticket-tag.model"), exports);
54
54
  __exportStar(require("./models/internal-ticket-artifact-type.model"), exports);
55
+ __exportStar(require("./models/internal-ticket-approval.model"), exports);
56
+ __exportStar(require("./models/internal-ticket-approval-rule.model"), exports);
55
57
  __exportStar(require("./models/internal-ticket-artifact-rule.model"), exports);
56
58
  __exportStar(require("./models/internal-ticket-artifact.model"), exports);
57
59
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/types/interface/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AACA,wCAAsB;AAGtB,yDAAuC;AACvC,0DAAwC;AACxC,kEAAgD;AAChD,+DAA6C;AAC7C,0EAAwD;AACxD,oEAAkD;AAClD,yEAAuD;AACvD,kEAAgD;AAChD,qEAAmD;AACnD,4DAA0C;AAC1C,wDAAsC;AACtC,gEAA8C;AAC9C,sEAAoD;AACpD,+DAA6C;AAC7C,mEAAiD;AACjD,0EAAwD;AACxD,0DAAwC;AACxC,iEAA+C;AAC/C,0EAAwD;AACxD,4EAA0D;AAC1D,qEAAmD;AACnD,iEAA+C;AAC/C,0EAAwD;AACxD,0EAAwD;AACxD,yEAAuD;AACvD,kFAAgE;AAChE,4EAA0D;AAC1D,0EAAwD;AACxD,0EAAwD;AACxD,iFAA+D;AAC/D,4EAA0D;AAC1D,+EAA6D;AAC7D,yEAAuD;AACvD,0EAAwD;AACxD,qEAAmD;AACnD,4EAA0D;AAC1D,+EAA6D;AAC7D,+EAA6D;AAC7D,0EAAwD"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/types/interface/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AACA,wCAAsB;AAGtB,yDAAuC;AACvC,0DAAwC;AACxC,kEAAgD;AAChD,+DAA6C;AAC7C,0EAAwD;AACxD,oEAAkD;AAClD,yEAAuD;AACvD,kEAAgD;AAChD,qEAAmD;AACnD,4DAA0C;AAC1C,wDAAsC;AACtC,gEAA8C;AAC9C,sEAAoD;AACpD,+DAA6C;AAC7C,mEAAiD;AACjD,0EAAwD;AACxD,0DAAwC;AACxC,iEAA+C;AAC/C,0EAAwD;AACxD,4EAA0D;AAC1D,qEAAmD;AACnD,iEAA+C;AAC/C,0EAAwD;AACxD,0EAAwD;AACxD,yEAAuD;AACvD,kFAAgE;AAChE,4EAA0D;AAC1D,0EAAwD;AACxD,0EAAwD;AACxD,iFAA+D;AAC/D,4EAA0D;AAC1D,+EAA6D;AAC7D,yEAAuD;AACvD,0EAAwD;AACxD,qEAAmD;AACnD,4EAA0D;AAC1D,+EAA6D;AAC7D,0EAAwD;AACxD,+EAA6D;AAC7D,+EAA6D;AAC7D,0EAAwD"}
@@ -0,0 +1,12 @@
1
+ import { ArtifactRuleConditionType } from './internal-ticket-artifact-rule.model';
2
+ export interface IInternalTicketApprovalRule {
3
+ id: string;
4
+ internalTicketSectionId: string;
5
+ conditionType: ArtifactRuleConditionType;
6
+ conditionId: string | null;
7
+ step: number;
8
+ approverUserId: string;
9
+ isEnabled: boolean;
10
+ createdAt?: Date;
11
+ updatedAt?: Date;
12
+ }
@@ -0,0 +1,3 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ //# sourceMappingURL=internal-ticket-approval-rule.model.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"internal-ticket-approval-rule.model.js","sourceRoot":"","sources":["../../../../src/types/interface/models/internal-ticket-approval-rule.model.ts"],"names":[],"mappings":""}
@@ -0,0 +1,17 @@
1
+ import { InternalTicketApprovalDecision } from '../../enum';
2
+ import { IInternalTicketApprovalRule } from './internal-ticket-approval-rule.model';
3
+ export interface IInternalTicketApproval {
4
+ id: string;
5
+ internalTicketId: string;
6
+ requestedByUserId: string;
7
+ approverUserId: string;
8
+ step: number;
9
+ internalTicketApprovalRuleId: string | null;
10
+ decision: InternalTicketApprovalDecision;
11
+ decidedAt: Date | null;
12
+ comment: string | null;
13
+ withdrawnAt: Date | null;
14
+ createdAt?: Date;
15
+ updatedAt?: Date;
16
+ internalTicketApprovalRule?: IInternalTicketApprovalRule;
17
+ }
@@ -0,0 +1,3 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ //# sourceMappingURL=internal-ticket-approval.model.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"internal-ticket-approval.model.js","sourceRoot":"","sources":["../../../../src/types/interface/models/internal-ticket-approval.model.ts"],"names":[],"mappings":""}
@@ -1,3 +1,4 @@
1
+ import { ArtifactValueType } from '../../enum';
1
2
  import { IInternalTicketSection } from './internal-ticket-section.model';
2
3
  import { IInternalTicketArtifactRule } from './internal-ticket-artifact-rule.model';
3
4
  export interface IInternalTicketArtifactType {
@@ -8,6 +9,8 @@ export interface IInternalTicketArtifactType {
8
9
  color: string | null;
9
10
  order: number;
10
11
  isEnabled: boolean;
12
+ valueType: ArtifactValueType;
13
+ valueOptions: string[];
11
14
  archivedAt: Date | null;
12
15
  createdAt?: Date;
13
16
  updatedAt?: Date;
@@ -1,4 +1,4 @@
1
- import { InternalTicketStatus } from '../../enum';
1
+ import { InternalTicketApprovalState, InternalTicketStatus } from '../../enum';
2
2
  import { IInternalTicketAssignee } from './internal-ticket-assignee.model';
3
3
  import { IInternalTicketCategory } from './internal-ticket-category.model';
4
4
  import { IInternalTicketMessage } from './internal-ticket-message.model';
@@ -9,6 +9,7 @@ import { IInternalTicketPriority } from './internal-ticket-priority.model';
9
9
  import { IInternalTicketSection } from './internal-ticket-section.model';
10
10
  import { IInternalTicketTicketTag } from './internal-ticket-ticket-tag.model';
11
11
  import { IInternalTicketArtifact } from './internal-ticket-artifact.model';
12
+ import { IInternalTicketApproval } from './internal-ticket-approval.model';
12
13
  export interface IInternalTicket {
13
14
  id: string;
14
15
  projectId: string | null;
@@ -34,6 +35,9 @@ export interface IInternalTicket {
34
35
  archivedAt: Date | null;
35
36
  closedAt: Date | null;
36
37
  closedReason: string | null;
38
+ waitingRequesterSince: Date | null;
39
+ approvalState: InternalTicketApprovalState;
40
+ approvalRequestedAt: Date | null;
37
41
  createdAt?: Date;
38
42
  updatedAt?: Date;
39
43
  internalTicketSection?: IInternalTicketSection;
@@ -47,4 +51,5 @@ export interface IInternalTicket {
47
51
  internalTicketAssignees?: IInternalTicketAssignee[];
48
52
  internalTicketTicketTags?: IInternalTicketTicketTag[];
49
53
  internalTicketArtifacts?: IInternalTicketArtifact[];
54
+ internalTicketApprovals?: IInternalTicketApproval[];
50
55
  }
@@ -3,3 +3,6 @@ export * from './ip-address-validator.utils';
3
3
  export * from './cidr.util';
4
4
  export * from './mention.utils';
5
5
  export * from './internal-ticket-status.utils';
6
+ export * from './internal-ticket-artifact-rules.utils';
7
+ export * from './internal-ticket-artifact-value.utils';
8
+ export * from './internal-ticket-approval.utils';
@@ -19,4 +19,7 @@ __exportStar(require("./ip-address-validator.utils"), exports);
19
19
  __exportStar(require("./cidr.util"), exports);
20
20
  __exportStar(require("./mention.utils"), exports);
21
21
  __exportStar(require("./internal-ticket-status.utils"), exports);
22
+ __exportStar(require("./internal-ticket-artifact-rules.utils"), exports);
23
+ __exportStar(require("./internal-ticket-artifact-value.utils"), exports);
24
+ __exportStar(require("./internal-ticket-approval.utils"), exports);
22
25
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/utils/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,gDAA8B;AAC9B,+DAA6C;AAC7C,8CAA4B;AAC5B,kDAAgC;AAChC,iEAA+C"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/utils/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,gDAA8B;AAC9B,+DAA6C;AAC7C,8CAA4B;AAC5B,kDAAgC;AAChC,iEAA+C;AAC/C,yEAAuD;AACvD,yEAAuD;AACvD,mEAAiD"}
@@ -0,0 +1,13 @@
1
+ import { InternalTicketApprovalState } from '../types/enum/internal-ticket.enum';
2
+ import { IInternalTicketApproval } from '../types/interface/models/internal-ticket-approval.model';
3
+ import { IInternalTicketApprovalRule } from '../types/interface/models/internal-ticket-approval-rule.model';
4
+ import type { ArtifactRuleContext } from './internal-ticket-artifact-rules.utils';
5
+ type ApprovalInput = Pick<IInternalTicketApproval, 'decision' | 'withdrawnAt'>;
6
+ export declare const computeApprovalState: (approvals: ApprovalInput[]) => InternalTicketApprovalState;
7
+ type RuleInput = Pick<IInternalTicketApprovalRule, 'conditionType' | 'conditionId' | 'step' | 'approverUserId' | 'isEnabled'>;
8
+ export declare const matchApprovalRules: <T extends RuleInput>(rules: T[], context: ArtifactRuleContext) => {
9
+ step: number;
10
+ rules: T[];
11
+ }[];
12
+ export declare const nextApprovalStep: (approvals: Pick<IInternalTicketApproval, 'step' | 'decision' | 'withdrawnAt'>[], plannedSteps: number[]) => number | null;
13
+ export {};
@@ -0,0 +1,50 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.nextApprovalStep = exports.matchApprovalRules = exports.computeApprovalState = void 0;
4
+ const internal_ticket_enum_1 = require("../types/enum/internal-ticket.enum");
5
+ const internal_ticket_artifact_rules_utils_1 = require("./internal-ticket-artifact-rules.utils");
6
+ const computeApprovalState = (approvals) => {
7
+ const live = approvals.filter((approval) => !approval.withdrawnAt);
8
+ if (live.length === 0) {
9
+ return internal_ticket_enum_1.InternalTicketApprovalState.NOT_REQUIRED;
10
+ }
11
+ if (live.some((approval) => approval.decision === internal_ticket_enum_1.InternalTicketApprovalDecision.REFUSED)) {
12
+ return internal_ticket_enum_1.InternalTicketApprovalState.REFUSED;
13
+ }
14
+ if (live.every((approval) => approval.decision === internal_ticket_enum_1.InternalTicketApprovalDecision.APPROVED)) {
15
+ return internal_ticket_enum_1.InternalTicketApprovalState.APPROVED;
16
+ }
17
+ return internal_ticket_enum_1.InternalTicketApprovalState.PENDING;
18
+ };
19
+ exports.computeApprovalState = computeApprovalState;
20
+ const matchApprovalRules = (rules, context) => {
21
+ const matching = rules.filter((rule) => rule.isEnabled && (0, internal_ticket_artifact_rules_utils_1.matchesArtifactRuleCondition)(rule, context));
22
+ const byStep = new Map();
23
+ for (const rule of matching) {
24
+ const bucket = byStep.get(rule.step);
25
+ if (bucket) {
26
+ bucket.push(rule);
27
+ }
28
+ else {
29
+ byStep.set(rule.step, [rule]);
30
+ }
31
+ }
32
+ return [...byStep.entries()]
33
+ .sort(([a], [b]) => a - b)
34
+ .map(([step, stepRules]) => ({ step, rules: stepRules }));
35
+ };
36
+ exports.matchApprovalRules = matchApprovalRules;
37
+ const nextApprovalStep = (approvals, plannedSteps) => {
38
+ const live = approvals.filter((approval) => !approval.withdrawnAt);
39
+ if (live.some((approval) => approval.decision === internal_ticket_enum_1.InternalTicketApprovalDecision.REFUSED)) {
40
+ return null;
41
+ }
42
+ const openStep = live.find((approval) => approval.decision === internal_ticket_enum_1.InternalTicketApprovalDecision.PENDING);
43
+ if (openStep) {
44
+ return null;
45
+ }
46
+ const done = new Set(live.map((approval) => approval.step));
47
+ return plannedSteps.filter((step) => !done.has(step)).sort((a, b) => a - b)[0] ?? null;
48
+ };
49
+ exports.nextApprovalStep = nextApprovalStep;
50
+ //# sourceMappingURL=internal-ticket-approval.utils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"internal-ticket-approval.utils.js","sourceRoot":"","sources":["../../src/utils/internal-ticket-approval.utils.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,13 @@
1
+ import { IInternalTicketArtifactRule } from '../types/interface/models/internal-ticket-artifact-rule.model';
2
+ import { IInternalTicketArtifactType } from '../types/interface/models/internal-ticket-artifact-type.model';
3
+ export type ArtifactRuleContext = {
4
+ internalTicketCategoryId?: string | null;
5
+ internalTicketPriorityId?: string | null;
6
+ tagIds?: string[];
7
+ };
8
+ export type PartitionedArtifactTypes = {
9
+ required: IInternalTicketArtifactType[];
10
+ suggested: IInternalTicketArtifactType[];
11
+ };
12
+ export declare const matchesArtifactRuleCondition: (rule: Pick<IInternalTicketArtifactRule, 'conditionType' | 'conditionId'>, context: ArtifactRuleContext) => boolean;
13
+ export declare const partitionArtifactTypesByRules: (artifactTypes: IInternalTicketArtifactType[], context: ArtifactRuleContext) => PartitionedArtifactTypes;
@@ -0,0 +1,44 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.partitionArtifactTypesByRules = exports.matchesArtifactRuleCondition = void 0;
4
+ const internal_ticket_artifact_rule_model_1 = require("../types/interface/models/internal-ticket-artifact-rule.model");
5
+ const matchesArtifactRuleCondition = (rule, context) => {
6
+ switch (rule.conditionType) {
7
+ case internal_ticket_artifact_rule_model_1.ArtifactRuleConditionType.ALWAYS:
8
+ return true;
9
+ case internal_ticket_artifact_rule_model_1.ArtifactRuleConditionType.CATEGORY:
10
+ return !!rule.conditionId && rule.conditionId === context.internalTicketCategoryId;
11
+ case internal_ticket_artifact_rule_model_1.ArtifactRuleConditionType.PRIORITY:
12
+ return !!rule.conditionId && rule.conditionId === context.internalTicketPriorityId;
13
+ case internal_ticket_artifact_rule_model_1.ArtifactRuleConditionType.TAG:
14
+ return !!rule.conditionId && (context.tagIds ?? []).includes(rule.conditionId);
15
+ default:
16
+ return false;
17
+ }
18
+ };
19
+ exports.matchesArtifactRuleCondition = matchesArtifactRuleCondition;
20
+ const partitionArtifactTypesByRules = (artifactTypes, context) => {
21
+ const required = [];
22
+ const suggested = [];
23
+ for (const artifactType of artifactTypes) {
24
+ if (!artifactType.isEnabled || artifactType.archivedAt) {
25
+ continue;
26
+ }
27
+ const rules = artifactType.internalTicketArtifactRules ?? [];
28
+ const matching = rules.filter((rule) => (0, exports.matchesArtifactRuleCondition)(rule, context));
29
+ if (matching.length === 0) {
30
+ continue;
31
+ }
32
+ const isRequired = matching.some((rule) => (rule.behaviorType ?? internal_ticket_artifact_rule_model_1.ArtifactRuleBehaviorType.REQUIRED) ===
33
+ internal_ticket_artifact_rule_model_1.ArtifactRuleBehaviorType.REQUIRED);
34
+ if (isRequired) {
35
+ required.push(artifactType);
36
+ }
37
+ else {
38
+ suggested.push(artifactType);
39
+ }
40
+ }
41
+ return { required, suggested };
42
+ };
43
+ exports.partitionArtifactTypesByRules = partitionArtifactTypesByRules;
44
+ //# sourceMappingURL=internal-ticket-artifact-rules.utils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"internal-ticket-artifact-rules.utils.js","sourceRoot":"","sources":["../../src/utils/internal-ticket-artifact-rules.utils.ts"],"names":[],"mappings":";;;AAAA,uHAIuE;AAwBhE,MAAM,4BAA4B,GAAG,CAC1C,IAAwE,EACxE,OAA4B,EACnB,EAAE;IACX,QAAQ,IAAI,CAAC,aAAa,EAAE,CAAC;QAC3B,KAAK,+DAAyB,CAAC,MAAM;YACnC,OAAO,IAAI,CAAC;QACd,KAAK,+DAAyB,CAAC,QAAQ;YACrC,OAAO,CAAC,CAAC,IAAI,CAAC,WAAW,IAAI,IAAI,CAAC,WAAW,KAAK,OAAO,CAAC,wBAAwB,CAAC;QACrF,KAAK,+DAAyB,CAAC,QAAQ;YACrC,OAAO,CAAC,CAAC,IAAI,CAAC,WAAW,IAAI,IAAI,CAAC,WAAW,KAAK,OAAO,CAAC,wBAAwB,CAAC;QACrF,KAAK,+DAAyB,CAAC,GAAG;YAChC,OAAO,CAAC,CAAC,IAAI,CAAC,WAAW,IAAI,CAAC,OAAO,CAAC,MAAM,IAAI,EAAE,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;QACjF;YACE,OAAO,KAAK,CAAC;IACjB,CAAC;AACH,CAAC,CAAC;AAhBW,QAAA,4BAA4B,gCAgBvC;AAgBK,MAAM,6BAA6B,GAAG,CAC3C,aAA4C,EAC5C,OAA4B,EACF,EAAE;IAC5B,MAAM,QAAQ,GAAkC,EAAE,CAAC;IACnD,MAAM,SAAS,GAAkC,EAAE,CAAC;IAEpD,KAAK,MAAM,YAAY,IAAI,aAAa,EAAE,CAAC;QACzC,IAAI,CAAC,YAAY,CAAC,SAAS,IAAI,YAAY,CAAC,UAAU,EAAE,CAAC;YACvD,SAAS;QACX,CAAC;QAED,MAAM,KAAK,GAAG,YAAY,CAAC,2BAA2B,IAAI,EAAE,CAAC;QAC7D,MAAM,QAAQ,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAA,oCAA4B,EAAC,IAAI,EAAE,OAAO,CAAC,CAAC,CAAC;QAErF,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC1B,SAAS;QACX,CAAC;QAED,MAAM,UAAU,GAAG,QAAQ,CAAC,IAAI,CAC9B,CAAC,IAAI,EAAE,EAAE,CACP,CAAC,IAAI,CAAC,YAAY,IAAI,8DAAwB,CAAC,QAAQ,CAAC;YACxD,8DAAwB,CAAC,QAAQ,CACpC,CAAC;QAEF,IAAI,UAAU,EAAE,CAAC;YACf,QAAQ,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;QAC9B,CAAC;aAAM,CAAC;YACN,SAAS,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;QAC/B,CAAC;IACH,CAAC;IAED,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,CAAC;AACjC,CAAC,CAAC;AAjCW,QAAA,6BAA6B,iCAiCxC"}
@@ -0,0 +1,16 @@
1
+ import { ArtifactValueType } from '../types/enum/internal-ticket.enum';
2
+ export type ArtifactValueCheck = {
3
+ valid: true;
4
+ } | {
5
+ valid: false;
6
+ reason: ArtifactValueRejection;
7
+ };
8
+ export declare enum ArtifactValueRejection {
9
+ MALFORMED = "MALFORMED",
10
+ NOT_IN_OPTIONS = "NOT_IN_OPTIONS",
11
+ UNKNOWN_USER = "UNKNOWN_USER"
12
+ }
13
+ export declare const checkArtifactValue: (valueType: ArtifactValueType, value: string, options?: {
14
+ valueOptions?: string[];
15
+ knownUserIds?: string[];
16
+ }) => ArtifactValueCheck;
@@ -0,0 +1,53 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.checkArtifactValue = exports.ArtifactValueRejection = void 0;
4
+ const internal_ticket_enum_1 = require("../types/enum/internal-ticket.enum");
5
+ const UUID_V4 = /^[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/i;
6
+ const ISO_DATE = /^\d{4}-\d{2}-\d{2}$/;
7
+ const DECIMAL = /^-?\d+(\.\d+)?$/;
8
+ var ArtifactValueRejection;
9
+ (function (ArtifactValueRejection) {
10
+ ArtifactValueRejection["MALFORMED"] = "MALFORMED";
11
+ ArtifactValueRejection["NOT_IN_OPTIONS"] = "NOT_IN_OPTIONS";
12
+ ArtifactValueRejection["UNKNOWN_USER"] = "UNKNOWN_USER";
13
+ })(ArtifactValueRejection || (exports.ArtifactValueRejection = ArtifactValueRejection = {}));
14
+ const checkArtifactValue = (valueType, value, options) => {
15
+ switch (valueType) {
16
+ case internal_ticket_enum_1.ArtifactValueType.TEXT:
17
+ case internal_ticket_enum_1.ArtifactValueType.LONG_TEXT:
18
+ return { valid: true };
19
+ case internal_ticket_enum_1.ArtifactValueType.NUMBER:
20
+ return DECIMAL.test(value)
21
+ ? { valid: true }
22
+ : { valid: false, reason: ArtifactValueRejection.MALFORMED };
23
+ case internal_ticket_enum_1.ArtifactValueType.DATE:
24
+ if (!ISO_DATE.test(value)) {
25
+ return { valid: false, reason: ArtifactValueRejection.MALFORMED };
26
+ }
27
+ return new Date(`${value}T00:00:00.000Z`).toISOString().slice(0, 10) === value
28
+ ? { valid: true }
29
+ : { valid: false, reason: ArtifactValueRejection.MALFORMED };
30
+ case internal_ticket_enum_1.ArtifactValueType.BOOLEAN:
31
+ return value === 'true' || value === 'false'
32
+ ? { valid: true }
33
+ : { valid: false, reason: ArtifactValueRejection.MALFORMED };
34
+ case internal_ticket_enum_1.ArtifactValueType.SINGLE_CHOICE:
35
+ return (options?.valueOptions ?? []).includes(value)
36
+ ? { valid: true }
37
+ : { valid: false, reason: ArtifactValueRejection.NOT_IN_OPTIONS };
38
+ case internal_ticket_enum_1.ArtifactValueType.USER:
39
+ if (!UUID_V4.test(value)) {
40
+ return { valid: false, reason: ArtifactValueRejection.MALFORMED };
41
+ }
42
+ if (!options?.knownUserIds) {
43
+ return { valid: true };
44
+ }
45
+ return options.knownUserIds.includes(value)
46
+ ? { valid: true }
47
+ : { valid: false, reason: ArtifactValueRejection.UNKNOWN_USER };
48
+ default:
49
+ return { valid: false, reason: ArtifactValueRejection.MALFORMED };
50
+ }
51
+ };
52
+ exports.checkArtifactValue = checkArtifactValue;
53
+ //# sourceMappingURL=internal-ticket-artifact-value.utils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"internal-ticket-artifact-value.utils.js","sourceRoot":"","sources":["../../src/utils/internal-ticket-artifact-value.utils.ts"],"names":[],"mappings":";;;AAAA,6EAAuE;AAEvE,MAAM,OAAO,GAAG,4EAA4E,CAAC;AAG7F,MAAM,QAAQ,GAAG,qBAAqB,CAAC;AAGvC,MAAM,OAAO,GAAG,iBAAiB,CAAC;AAWlC,IAAY,sBAIX;AAJD,WAAY,sBAAsB;IAChC,iDAAuB,CAAA;IACvB,2DAAiC,CAAA;IACjC,uDAA6B,CAAA;AAC/B,CAAC,EAJW,sBAAsB,sCAAtB,sBAAsB,QAIjC;AAYM,MAAM,kBAAkB,GAAG,CAChC,SAA4B,EAC5B,KAAa,EACb,OAA8D,EAC1C,EAAE;IACtB,QAAQ,SAAS,EAAE,CAAC;QAClB,KAAK,wCAAiB,CAAC,IAAI,CAAC;QAC5B,KAAK,wCAAiB,CAAC,SAAS;YAC9B,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC;QAEzB,KAAK,wCAAiB,CAAC,MAAM;YAC3B,OAAO,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC;gBACxB,CAAC,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE;gBACjB,CAAC,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,sBAAsB,CAAC,SAAS,EAAE,CAAC;QAEjE,KAAK,wCAAiB,CAAC,IAAI;YAGzB,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC;gBAC1B,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,sBAAsB,CAAC,SAAS,EAAE,CAAC;YACpE,CAAC;YACD,OAAO,IAAI,IAAI,CAAC,GAAG,KAAK,gBAAgB,CAAC,CAAC,WAAW,EAAE,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,KAAK,KAAK;gBAC5E,CAAC,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE;gBACjB,CAAC,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,sBAAsB,CAAC,SAAS,EAAE,CAAC;QAEjE,KAAK,wCAAiB,CAAC,OAAO;YAC5B,OAAO,KAAK,KAAK,MAAM,IAAI,KAAK,KAAK,OAAO;gBAC1C,CAAC,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE;gBACjB,CAAC,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,sBAAsB,CAAC,SAAS,EAAE,CAAC;QAEjE,KAAK,wCAAiB,CAAC,aAAa;YAClC,OAAO,CAAC,OAAO,EAAE,YAAY,IAAI,EAAE,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC;gBAClD,CAAC,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE;gBACjB,CAAC,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,sBAAsB,CAAC,cAAc,EAAE,CAAC;QAEtE,KAAK,wCAAiB,CAAC,IAAI;YACzB,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC;gBACzB,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,sBAAsB,CAAC,SAAS,EAAE,CAAC;YACpE,CAAC;YAGD,IAAI,CAAC,OAAO,EAAE,YAAY,EAAE,CAAC;gBAC3B,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC;YACzB,CAAC;YACD,OAAO,OAAO,CAAC,YAAY,CAAC,QAAQ,CAAC,KAAK,CAAC;gBACzC,CAAC,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE;gBACjB,CAAC,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,sBAAsB,CAAC,YAAY,EAAE,CAAC;QAEpE;YACE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,sBAAsB,CAAC,SAAS,EAAE,CAAC;IACtE,CAAC;AACH,CAAC,CAAC;AAnDW,QAAA,kBAAkB,sBAmD7B"}
@@ -1,6 +1,6 @@
1
1
  import { InternalTicketStatus, InternalTicketStatusReason } from '../types/enum/internal-ticket.enum';
2
2
  import { IInternalTicket } from '../types/interface/models/internal-ticket.model';
3
- type TicketStatusInput = Pick<IInternalTicket, 'archivedAt' | 'closedAt' | 'resolvedAt' | 'reviewedAt' | 'assignedToUserId' | 'internalTicketAssignees'>;
3
+ type TicketStatusInput = Pick<IInternalTicket, 'archivedAt' | 'closedAt' | 'resolvedAt' | 'reviewedAt' | 'assignedToUserId' | 'internalTicketAssignees' | 'approvalState' | 'waitingRequesterSince'>;
4
4
  export type ComputedTicketStatus = {
5
5
  status: InternalTicketStatus;
6
6
  reason: InternalTicketStatusReason;
@@ -12,7 +12,9 @@ function computeInternalTicketStatus(ticket) {
12
12
  if (ticket.closedAt) {
13
13
  return {
14
14
  status: internal_ticket_enum_1.InternalTicketStatus.CLOSED,
15
- reason: internal_ticket_enum_1.InternalTicketStatusReason.TICKET_CLOSED,
15
+ reason: ticket.approvalState === internal_ticket_enum_1.InternalTicketApprovalState.REFUSED
16
+ ? internal_ticket_enum_1.InternalTicketStatusReason.APPROVAL_REFUSED
17
+ : internal_ticket_enum_1.InternalTicketStatusReason.TICKET_CLOSED,
16
18
  };
17
19
  }
18
20
  if (ticket.resolvedAt) {
@@ -21,6 +23,18 @@ function computeInternalTicketStatus(ticket) {
21
23
  reason: internal_ticket_enum_1.InternalTicketStatusReason.TICKET_RESOLVED,
22
24
  };
23
25
  }
26
+ if (ticket.approvalState === internal_ticket_enum_1.InternalTicketApprovalState.PENDING) {
27
+ return {
28
+ status: internal_ticket_enum_1.InternalTicketStatus.WAITING_APPROVAL,
29
+ reason: internal_ticket_enum_1.InternalTicketStatusReason.APPROVAL_PENDING,
30
+ };
31
+ }
32
+ if (ticket.waitingRequesterSince) {
33
+ return {
34
+ status: internal_ticket_enum_1.InternalTicketStatus.WAITING_REQUESTER,
35
+ reason: internal_ticket_enum_1.InternalTicketStatusReason.WAITING_ON_REQUESTER,
36
+ };
37
+ }
24
38
  if (!ticket.reviewedAt) {
25
39
  return {
26
40
  status: internal_ticket_enum_1.InternalTicketStatus.WAITING_REVIEW,
@@ -1 +1 @@
1
- {"version":3,"file":"internal-ticket-status.utils.js","sourceRoot":"","sources":["../../src/utils/internal-ticket-status.utils.ts"],"names":[],"mappings":";;;AAAA,6EAG4C;AAkB5C,SAAgB,2BAA2B,CAAC,MAAyB;IAEnE,IAAI,MAAM,CAAC,UAAU,EAAE,CAAC;QACtB,OAAO;YACL,MAAM,EAAE,2CAAoB,CAAC,QAAQ;YACrC,MAAM,EAAE,iDAA0B,CAAC,eAAe;SACnD,CAAC;IACJ,CAAC;IAED,IAAI,MAAM,CAAC,QAAQ,EAAE,CAAC;QACpB,OAAO;YACL,MAAM,EAAE,2CAAoB,CAAC,MAAM;YACnC,MAAM,EAAE,iDAA0B,CAAC,aAAa;SACjD,CAAC;IACJ,CAAC;IAED,IAAI,MAAM,CAAC,UAAU,EAAE,CAAC;QACtB,OAAO;YACL,MAAM,EAAE,2CAAoB,CAAC,QAAQ;YACrC,MAAM,EAAE,iDAA0B,CAAC,eAAe;SACnD,CAAC;IACJ,CAAC;IAGD,IAAI,CAAC,MAAM,CAAC,UAAU,EAAE,CAAC;QACvB,OAAO;YACL,MAAM,EAAE,2CAAoB,CAAC,cAAc;YAC3C,MAAM,EAAE,iDAA0B,CAAC,YAAY;SAChD,CAAC;IACJ,CAAC;IAED,MAAM,YAAY,GAChB,CAAC,CAAC,MAAM,CAAC,gBAAgB,IAAI,CAAC,MAAM,CAAC,uBAAuB,IAAI,EAAE,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC;IAEjF,IAAI,CAAC,YAAY,EAAE,CAAC;QAClB,OAAO;YACL,MAAM,EAAE,2CAAoB,CAAC,gBAAgB;YAC7C,MAAM,EAAE,iDAA0B,CAAC,WAAW;SAC/C,CAAC;IACJ,CAAC;IAED,OAAO;QACL,MAAM,EAAE,2CAAoB,CAAC,WAAW;QACxC,MAAM,EAAE,iDAA0B,CAAC,YAAY;KAChD,CAAC;AACJ,CAAC;AA7CD,kEA6CC"}
1
+ {"version":3,"file":"internal-ticket-status.utils.js","sourceRoot":"","sources":["../../src/utils/internal-ticket-status.utils.ts"],"names":[],"mappings":";;;AAAA,6EAI4C;AAsC5C,SAAgB,2BAA2B,CAAC,MAAyB;IAEnE,IAAI,MAAM,CAAC,UAAU,EAAE,CAAC;QACtB,OAAO;YACL,MAAM,EAAE,2CAAoB,CAAC,QAAQ;YACrC,MAAM,EAAE,iDAA0B,CAAC,eAAe;SACnD,CAAC;IACJ,CAAC;IAED,IAAI,MAAM,CAAC,QAAQ,EAAE,CAAC;QAGpB,OAAO;YACL,MAAM,EAAE,2CAAoB,CAAC,MAAM;YACnC,MAAM,EACJ,MAAM,CAAC,aAAa,KAAK,kDAA2B,CAAC,OAAO;gBAC1D,CAAC,CAAC,iDAA0B,CAAC,gBAAgB;gBAC7C,CAAC,CAAC,iDAA0B,CAAC,aAAa;SAC/C,CAAC;IACJ,CAAC;IAED,IAAI,MAAM,CAAC,UAAU,EAAE,CAAC;QACtB,OAAO;YACL,MAAM,EAAE,2CAAoB,CAAC,QAAQ;YACrC,MAAM,EAAE,iDAA0B,CAAC,eAAe;SACnD,CAAC;IACJ,CAAC;IAID,IAAI,MAAM,CAAC,aAAa,KAAK,kDAA2B,CAAC,OAAO,EAAE,CAAC;QACjE,OAAO;YACL,MAAM,EAAE,2CAAoB,CAAC,gBAAgB;YAC7C,MAAM,EAAE,iDAA0B,CAAC,gBAAgB;SACpD,CAAC;IACJ,CAAC;IAED,IAAI,MAAM,CAAC,qBAAqB,EAAE,CAAC;QACjC,OAAO;YACL,MAAM,EAAE,2CAAoB,CAAC,iBAAiB;YAC9C,MAAM,EAAE,iDAA0B,CAAC,oBAAoB;SACxD,CAAC;IACJ,CAAC;IAGD,IAAI,CAAC,MAAM,CAAC,UAAU,EAAE,CAAC;QACvB,OAAO;YACL,MAAM,EAAE,2CAAoB,CAAC,cAAc;YAC3C,MAAM,EAAE,iDAA0B,CAAC,YAAY;SAChD,CAAC;IACJ,CAAC;IAED,MAAM,YAAY,GAChB,CAAC,CAAC,MAAM,CAAC,gBAAgB,IAAI,CAAC,MAAM,CAAC,uBAAuB,IAAI,EAAE,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC;IAEjF,IAAI,CAAC,YAAY,EAAE,CAAC;QAClB,OAAO;YACL,MAAM,EAAE,2CAAoB,CAAC,gBAAgB;YAC7C,MAAM,EAAE,iDAA0B,CAAC,WAAW;SAC/C,CAAC;IACJ,CAAC;IAED,OAAO;QACL,MAAM,EAAE,2CAAoB,CAAC,WAAW;QACxC,MAAM,EAAE,iDAA0B,CAAC,YAAY;KAChD,CAAC;AACJ,CAAC;AAlED,kEAkEC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@abyss-project/console",
3
- "version": "5.0.0",
3
+ "version": "7.0.0",
4
4
  "description": "Core package to interact with AbyssConsole",
5
5
  "main": "dist/index.js",
6
6
  "types": "dist/index.d.ts",