@acorex-platform/module-background-job-management-client 0.0.54 → 0.0.56
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/fesm2022/{acorex-platform-module-background-job-management-client-tray-execute-click.command-CEVhvrDQ.mjs → acorex-platform-module-background-job-management-client-tray-execute-click.command-t4CAGRO2.mjs} +5 -2
- package/fesm2022/acorex-platform-module-background-job-management-client-tray-execute-click.command-t4CAGRO2.mjs.map +1 -0
- package/fesm2022/{acorex-platform-module-background-job-management-client-tray-run-action.command-B9SFMGxf.mjs → acorex-platform-module-background-job-management-client-tray-run-action.command-CLCCUNy-.mjs} +9 -3
- package/fesm2022/acorex-platform-module-background-job-management-client-tray-run-action.command-CLCCUNy-.mjs.map +1 -0
- package/fesm2022/acorex-platform-module-background-job-management-client.mjs +4 -4
- package/i18n/en-AU/background-job-management.json +345 -0
- package/i18n/en-US/background-job-management.json +345 -0
- package/i18n/fa-IR/background-job-management.json +345 -0
- package/package.json +1 -1
- package/fesm2022/acorex-platform-module-background-job-management-client-tray-execute-click.command-CEVhvrDQ.mjs.map +0 -1
- package/fesm2022/acorex-platform-module-background-job-management-client-tray-run-action.command-B9SFMGxf.mjs.map +0 -1
|
@@ -11,7 +11,10 @@ class BackgroundJobTrayExecuteClickCommand {
|
|
|
11
11
|
const input = (wrapped?.options ?? raw);
|
|
12
12
|
const operationId = (input.operationId ?? input.jobId ?? input.id)?.trim();
|
|
13
13
|
if (!operationId) {
|
|
14
|
-
return {
|
|
14
|
+
return {
|
|
15
|
+
success: false,
|
|
16
|
+
message: { text: '@background-job-management:jobs.tray.errors.operation-id-required' },
|
|
17
|
+
};
|
|
15
18
|
}
|
|
16
19
|
await this.operations.executeClick(operationId);
|
|
17
20
|
return { success: true, kind: 'object', data: undefined };
|
|
@@ -24,4 +27,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImpor
|
|
|
24
27
|
}] });
|
|
25
28
|
|
|
26
29
|
export { BackgroundJobTrayExecuteClickCommand };
|
|
27
|
-
//# sourceMappingURL=acorex-platform-module-background-job-management-client-tray-execute-click.command-
|
|
30
|
+
//# sourceMappingURL=acorex-platform-module-background-job-management-client-tray-execute-click.command-t4CAGRO2.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"acorex-platform-module-background-job-management-client-tray-execute-click.command-t4CAGRO2.mjs","sources":["../../../../libs/modules/background-job-management/client/src/lib/commands/tray-execute-click.command.ts"],"sourcesContent":["import { AXPCommand, type AXPCommandExecuteResultPromise } from '@acorex-platform/framework-shared/runtime';\nimport { AXPBackgroundOperationService } from '@acorex-platform/framework-client/common';\nimport { Injectable, inject } from '@angular/core';\n\nexport interface TrayExecuteClickInput {\n operationId?: string;\n jobId?: string;\n id?: string;\n}\n\n@Injectable()\nexport class BackgroundJobTrayExecuteClickCommand implements AXPCommand<TrayExecuteClickInput, void> {\n private readonly operations = inject(AXPBackgroundOperationService);\n\n async execute(raw: unknown): AXPCommandExecuteResultPromise<void> {\n const wrapped = raw as { options?: TrayExecuteClickInput } & Record<string, unknown>;\n const input = (wrapped?.options ?? raw) as TrayExecuteClickInput;\n const operationId = (input.operationId ?? input.jobId ?? input.id)?.trim();\n if (!operationId) {\n return {\n success: false,\n message: { text: '@background-job-management:jobs.tray.errors.operation-id-required' },\n };\n }\n\n await this.operations.executeClick(operationId);\n return { success: true, kind: 'object', data: undefined };\n }\n}\n"],"names":[],"mappings":";;;;MAWa,oCAAoC,CAAA;AADjD,IAAA,WAAA,GAAA;AAEmB,QAAA,IAAA,CAAA,UAAU,GAAG,MAAM,CAAC,6BAA6B,CAAC;AAgBpE,IAAA;IAdC,MAAM,OAAO,CAAC,GAAY,EAAA;QACxB,MAAM,OAAO,GAAG,GAAoE;QACpF,MAAM,KAAK,IAAI,OAAO,EAAE,OAAO,IAAI,GAAG,CAA0B;AAChE,QAAA,MAAM,WAAW,GAAG,CAAC,KAAK,CAAC,WAAW,IAAI,KAAK,CAAC,KAAK,IAAI,KAAK,CAAC,EAAE,GAAG,IAAI,EAAE;QAC1E,IAAI,CAAC,WAAW,EAAE;YAChB,OAAO;AACL,gBAAA,OAAO,EAAE,KAAK;AACd,gBAAA,OAAO,EAAE,EAAE,IAAI,EAAE,mEAAmE,EAAE;aACvF;QACH;QAEA,MAAM,IAAI,CAAC,UAAU,CAAC,YAAY,CAAC,WAAW,CAAC;AAC/C,QAAA,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,SAAS,EAAE;IAC3D;8GAhBW,oCAAoC,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;kHAApC,oCAAoC,EAAA,CAAA,CAAA;;2FAApC,oCAAoC,EAAA,UAAA,EAAA,CAAA;kBADhD;;;"}
|
|
@@ -19,10 +19,16 @@ class BackgroundJobTrayRunActionCommand {
|
|
|
19
19
|
const operationId = (input.operationId ?? input.jobId ?? input.id)?.trim();
|
|
20
20
|
const action = input.action?.trim();
|
|
21
21
|
if (!operationId) {
|
|
22
|
-
return {
|
|
22
|
+
return {
|
|
23
|
+
success: false,
|
|
24
|
+
message: { text: '@background-job-management:jobs.tray.errors.operation-id-required' },
|
|
25
|
+
};
|
|
23
26
|
}
|
|
24
27
|
if (!action || !TRAY_ACTIONS.has(action)) {
|
|
25
|
-
return {
|
|
28
|
+
return {
|
|
29
|
+
success: false,
|
|
30
|
+
message: { text: '@background-job-management:jobs.tray.errors.valid-tray-action-required' },
|
|
31
|
+
};
|
|
26
32
|
}
|
|
27
33
|
await this.operations.runAction(operationId, action);
|
|
28
34
|
return { success: true, kind: 'object', data: undefined };
|
|
@@ -35,4 +41,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImpor
|
|
|
35
41
|
}] });
|
|
36
42
|
|
|
37
43
|
export { BackgroundJobTrayRunActionCommand };
|
|
38
|
-
//# sourceMappingURL=acorex-platform-module-background-job-management-client-tray-run-action.command-
|
|
44
|
+
//# sourceMappingURL=acorex-platform-module-background-job-management-client-tray-run-action.command-CLCCUNy-.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"acorex-platform-module-background-job-management-client-tray-run-action.command-CLCCUNy-.mjs","sources":["../../../../libs/modules/background-job-management/client/src/lib/commands/tray-run-action.command.ts"],"sourcesContent":["import { AXPCommand, type AXPCommandExecuteResultPromise } from '@acorex-platform/framework-shared/runtime';\nimport {\n AXPBackgroundOperationService,\n type AXPBackgroundOperationActionKey,\n} from '@acorex-platform/framework-client/common';\nimport { Injectable, inject } from '@angular/core';\n\nconst TRAY_ACTIONS = new Set<AXPBackgroundOperationActionKey>([\n 'cancel',\n 'pause',\n 'resume',\n 'retry',\n 'dismiss',\n]);\n\nexport interface TrayRunActionInput {\n operationId?: string;\n jobId?: string;\n id?: string;\n action?: string;\n}\n\n@Injectable()\nexport class BackgroundJobTrayRunActionCommand implements AXPCommand<TrayRunActionInput, void> {\n private readonly operations = inject(AXPBackgroundOperationService);\n\n async execute(raw: unknown): AXPCommandExecuteResultPromise<void> {\n const wrapped = raw as { options?: TrayRunActionInput } & Record<string, unknown>;\n const input = (wrapped?.options ?? raw) as TrayRunActionInput;\n const operationId = (input.operationId ?? input.jobId ?? input.id)?.trim();\n const action = input.action?.trim() as AXPBackgroundOperationActionKey | undefined;\n if (!operationId) {\n return {\n success: false,\n message: { text: '@background-job-management:jobs.tray.errors.operation-id-required' },\n };\n }\n if (!action || !TRAY_ACTIONS.has(action)) {\n return {\n success: false,\n message: { text: '@background-job-management:jobs.tray.errors.valid-tray-action-required' },\n };\n }\n\n await this.operations.runAction(operationId, action);\n return { success: true, kind: 'object', data: undefined };\n }\n}\n"],"names":[],"mappings":";;;;AAOA,MAAM,YAAY,GAAG,IAAI,GAAG,CAAkC;IAC5D,QAAQ;IACR,OAAO;IACP,QAAQ;IACR,OAAO;IACP,SAAS;AACV,CAAA,CAAC;MAUW,iCAAiC,CAAA;AAD9C,IAAA,WAAA,GAAA;AAEmB,QAAA,IAAA,CAAA,UAAU,GAAG,MAAM,CAAC,6BAA6B,CAAC;AAuBpE,IAAA;IArBC,MAAM,OAAO,CAAC,GAAY,EAAA;QACxB,MAAM,OAAO,GAAG,GAAiE;QACjF,MAAM,KAAK,IAAI,OAAO,EAAE,OAAO,IAAI,GAAG,CAAuB;AAC7D,QAAA,MAAM,WAAW,GAAG,CAAC,KAAK,CAAC,WAAW,IAAI,KAAK,CAAC,KAAK,IAAI,KAAK,CAAC,EAAE,GAAG,IAAI,EAAE;QAC1E,MAAM,MAAM,GAAG,KAAK,CAAC,MAAM,EAAE,IAAI,EAAiD;QAClF,IAAI,CAAC,WAAW,EAAE;YAChB,OAAO;AACL,gBAAA,OAAO,EAAE,KAAK;AACd,gBAAA,OAAO,EAAE,EAAE,IAAI,EAAE,mEAAmE,EAAE;aACvF;QACH;QACA,IAAI,CAAC,MAAM,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE;YACxC,OAAO;AACL,gBAAA,OAAO,EAAE,KAAK;AACd,gBAAA,OAAO,EAAE,EAAE,IAAI,EAAE,wEAAwE,EAAE;aAC5F;QACH;QAEA,MAAM,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,WAAW,EAAE,MAAM,CAAC;AACpD,QAAA,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,SAAS,EAAE;IAC3D;8GAvBW,iCAAiC,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;kHAAjC,iCAAiC,EAAA,CAAA,CAAA;;2FAAjC,iCAAiC,EAAA,UAAA,EAAA,CAAA;kBAD7C;;;"}
|
|
@@ -823,11 +823,11 @@ class AXMBackgroundJobManagementModule {
|
|
|
823
823
|
},
|
|
824
824
|
{
|
|
825
825
|
key: AXPBackgroundJobCommandKeys.TrayExecuteClick,
|
|
826
|
-
command: () => import('./acorex-platform-module-background-job-management-client-tray-execute-click.command-
|
|
826
|
+
command: () => import('./acorex-platform-module-background-job-management-client-tray-execute-click.command-t4CAGRO2.mjs').then((c) => c.BackgroundJobTrayExecuteClickCommand),
|
|
827
827
|
},
|
|
828
828
|
{
|
|
829
829
|
key: AXPBackgroundJobCommandKeys.TrayRunAction,
|
|
830
|
-
command: () => import('./acorex-platform-module-background-job-management-client-tray-run-action.command-
|
|
830
|
+
command: () => import('./acorex-platform-module-background-job-management-client-tray-run-action.command-CLCCUNy-.mjs').then((c) => c.BackgroundJobTrayRunActionCommand),
|
|
831
831
|
},
|
|
832
832
|
{
|
|
833
833
|
key: AXPBackgroundJobCommandKeys.ScheduleRunNow,
|
|
@@ -887,11 +887,11 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.8", ngImpor
|
|
|
887
887
|
},
|
|
888
888
|
{
|
|
889
889
|
key: AXPBackgroundJobCommandKeys.TrayExecuteClick,
|
|
890
|
-
command: () => import('./acorex-platform-module-background-job-management-client-tray-execute-click.command-
|
|
890
|
+
command: () => import('./acorex-platform-module-background-job-management-client-tray-execute-click.command-t4CAGRO2.mjs').then((c) => c.BackgroundJobTrayExecuteClickCommand),
|
|
891
891
|
},
|
|
892
892
|
{
|
|
893
893
|
key: AXPBackgroundJobCommandKeys.TrayRunAction,
|
|
894
|
-
command: () => import('./acorex-platform-module-background-job-management-client-tray-run-action.command-
|
|
894
|
+
command: () => import('./acorex-platform-module-background-job-management-client-tray-run-action.command-CLCCUNy-.mjs').then((c) => c.BackgroundJobTrayRunActionCommand),
|
|
895
895
|
},
|
|
896
896
|
{
|
|
897
897
|
key: AXPBackgroundJobCommandKeys.ScheduleRunNow,
|
|
@@ -0,0 +1,345 @@
|
|
|
1
|
+
{
|
|
2
|
+
"module": {
|
|
3
|
+
"title": "Background Jobs",
|
|
4
|
+
"description": "Monitor and manage background jobs and schedules",
|
|
5
|
+
"menus": {
|
|
6
|
+
"root": {
|
|
7
|
+
"title": "Background Jobs",
|
|
8
|
+
"description": "Background jobs and schedules"
|
|
9
|
+
}
|
|
10
|
+
},
|
|
11
|
+
"permissions": {
|
|
12
|
+
"title": "Background Job Management",
|
|
13
|
+
"description": "Access to background jobs, attempts, and schedules"
|
|
14
|
+
}
|
|
15
|
+
},
|
|
16
|
+
"settings": {
|
|
17
|
+
"group": {
|
|
18
|
+
"title": "Background Jobs",
|
|
19
|
+
"description": "Platform settings for background job execution and retention"
|
|
20
|
+
},
|
|
21
|
+
"retention": {
|
|
22
|
+
"title": "Retention",
|
|
23
|
+
"description": "Hard-delete expired terminal jobs and attempts after a retention period",
|
|
24
|
+
"items": {
|
|
25
|
+
"enabled": {
|
|
26
|
+
"title": "Enable Retention Purge",
|
|
27
|
+
"description": "When enabled, a system job periodically removes expired jobs"
|
|
28
|
+
},
|
|
29
|
+
"default-days": {
|
|
30
|
+
"title": "Default Retention (Days)",
|
|
31
|
+
"description": "Terminal jobs older than this are permanently deleted"
|
|
32
|
+
},
|
|
33
|
+
"dead-letter-days": {
|
|
34
|
+
"title": "Dead-Letter Retention (Days)",
|
|
35
|
+
"description": "Dead-lettered jobs are kept longer before purge"
|
|
36
|
+
},
|
|
37
|
+
"batch-size": {
|
|
38
|
+
"title": "Purge Batch Size",
|
|
39
|
+
"description": "Maximum jobs deleted per purge run"
|
|
40
|
+
},
|
|
41
|
+
"purge-cron": {
|
|
42
|
+
"title": "Purge Schedule (Cron)",
|
|
43
|
+
"description": "Cron expression for the system retention purge job"
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
},
|
|
48
|
+
"jobs": {
|
|
49
|
+
"menus": {
|
|
50
|
+
"jobs": {
|
|
51
|
+
"title": "Background Jobs",
|
|
52
|
+
"description": "Monitor background jobs"
|
|
53
|
+
},
|
|
54
|
+
"dead-lettered": {
|
|
55
|
+
"title": "Dead-Lettered Jobs",
|
|
56
|
+
"description": "Jobs that exhausted retries and need replay"
|
|
57
|
+
}
|
|
58
|
+
},
|
|
59
|
+
"entities": {
|
|
60
|
+
"background-job": {
|
|
61
|
+
"title": "Background Job",
|
|
62
|
+
"plural": "Background Jobs",
|
|
63
|
+
"groups": {
|
|
64
|
+
"overview": "Overview",
|
|
65
|
+
"execution": "Execution",
|
|
66
|
+
"data": "Data"
|
|
67
|
+
},
|
|
68
|
+
"fields": {
|
|
69
|
+
"title": { "title": "Title" },
|
|
70
|
+
"command": { "title": "Command" },
|
|
71
|
+
"executed-at": { "title": "Executed At" },
|
|
72
|
+
"job-type": { "title": "Job Type" },
|
|
73
|
+
"status": { "title": "Status" },
|
|
74
|
+
"trigger": { "title": "Trigger" },
|
|
75
|
+
"started-by": { "title": "Started By" },
|
|
76
|
+
"source": { "title": "Source" },
|
|
77
|
+
"progress": { "title": "Progress" },
|
|
78
|
+
"current-attempt": { "title": "Current Attempt" },
|
|
79
|
+
"max-attempts": { "title": "Max Attempts" },
|
|
80
|
+
"finished-at": { "title": "Finished At" },
|
|
81
|
+
"tray-dismissed-at": { "title": "Tray Dismissed At" },
|
|
82
|
+
"completed-at": { "title": "Completed At" },
|
|
83
|
+
"duration": { "title": "Duration" },
|
|
84
|
+
"result-message": { "title": "Result Message" },
|
|
85
|
+
"payload": { "title": "Payload" },
|
|
86
|
+
"result": { "title": "Result" },
|
|
87
|
+
"parent-job-id": { "title": "Parent Job" },
|
|
88
|
+
"schedule-id": { "title": "Schedule" }
|
|
89
|
+
},
|
|
90
|
+
"related-entities": {
|
|
91
|
+
"attempts": { "title": "Attempts" },
|
|
92
|
+
"child-jobs": { "title": "Child Jobs" }
|
|
93
|
+
},
|
|
94
|
+
"states": {
|
|
95
|
+
"created": "Created",
|
|
96
|
+
"scheduled": "Scheduled",
|
|
97
|
+
"queued": "Queued",
|
|
98
|
+
"running": "Running",
|
|
99
|
+
"paused": "Paused",
|
|
100
|
+
"completed": "Completed",
|
|
101
|
+
"failed": "Failed",
|
|
102
|
+
"cancelled": "Cancelled",
|
|
103
|
+
"dead-lettered": "Dead-Lettered"
|
|
104
|
+
},
|
|
105
|
+
"triggers": {
|
|
106
|
+
"schedule": "Schedule",
|
|
107
|
+
"manual": "User",
|
|
108
|
+
"event": "Event",
|
|
109
|
+
"system": "System"
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
},
|
|
113
|
+
"actions": {
|
|
114
|
+
"cancel": { "title": "Cancel Job" },
|
|
115
|
+
"retry": { "title": "Retry Job" },
|
|
116
|
+
"replay-dead-letter": { "title": "Replay Dead-Lettered Job" },
|
|
117
|
+
"bulk-dismiss": {
|
|
118
|
+
"title": "Dismiss From Tray",
|
|
119
|
+
"confirm": {
|
|
120
|
+
"title": "Dismiss Selected Jobs",
|
|
121
|
+
"message": "Hide the selected jobs from the Completed Tasks tray?"
|
|
122
|
+
}
|
|
123
|
+
}
|
|
124
|
+
},
|
|
125
|
+
"tray": {
|
|
126
|
+
"errors": {
|
|
127
|
+
"operation-id-required": "Operation ID is required.",
|
|
128
|
+
"valid-tray-action-required": "A valid tray action is required."
|
|
129
|
+
}
|
|
130
|
+
},
|
|
131
|
+
"errors": {
|
|
132
|
+
"not-found": "Background job {{jobId}} was not found.",
|
|
133
|
+
"retry-invalid-status": "Job {{jobId}} cannot be retried while status is {{status}}. Use replay dead-letter for dead-lettered jobs.",
|
|
134
|
+
"not-dead-lettered": "Job {{jobId}} is not dead-lettered (status: {{status}})."
|
|
135
|
+
},
|
|
136
|
+
"commands": {
|
|
137
|
+
"retry": {
|
|
138
|
+
"messages": {
|
|
139
|
+
"success": "Retry queued.",
|
|
140
|
+
"failed": "Failed to retry background job."
|
|
141
|
+
}
|
|
142
|
+
},
|
|
143
|
+
"replay-dead-letter": {
|
|
144
|
+
"messages": {
|
|
145
|
+
"success": "Dead-lettered job replayed as a new job.",
|
|
146
|
+
"failed": "Failed to replay dead-lettered job."
|
|
147
|
+
}
|
|
148
|
+
},
|
|
149
|
+
"cancel": {
|
|
150
|
+
"messages": {
|
|
151
|
+
"completed": "Cancellation completed.",
|
|
152
|
+
"requested": "Cancellation requested.",
|
|
153
|
+
"failed": "Failed to cancel background job."
|
|
154
|
+
}
|
|
155
|
+
}
|
|
156
|
+
},
|
|
157
|
+
"notifications": {
|
|
158
|
+
"complete": {
|
|
159
|
+
"title": "Background Job Completed",
|
|
160
|
+
"body": "The job finished successfully."
|
|
161
|
+
},
|
|
162
|
+
"failed": {
|
|
163
|
+
"title": "Background Job Failed",
|
|
164
|
+
"body": "The job failed. Open Jobs to review the error."
|
|
165
|
+
}
|
|
166
|
+
},
|
|
167
|
+
"permissions": {
|
|
168
|
+
"view": {
|
|
169
|
+
"title": "View Jobs",
|
|
170
|
+
"description": "View jobs and attempt history"
|
|
171
|
+
},
|
|
172
|
+
"cancel": {
|
|
173
|
+
"title": "Cancel Job",
|
|
174
|
+
"description": "Cancel a running or queued job"
|
|
175
|
+
},
|
|
176
|
+
"retry": {
|
|
177
|
+
"title": "Retry Job",
|
|
178
|
+
"description": "Retry a failed job"
|
|
179
|
+
},
|
|
180
|
+
"delete": {
|
|
181
|
+
"title": "Delete Job",
|
|
182
|
+
"description": "Permanently delete a job and its attempts"
|
|
183
|
+
},
|
|
184
|
+
"replay-dead-letter": {
|
|
185
|
+
"title": "Replay Dead-Lettered Job",
|
|
186
|
+
"description": "Replay a dead-lettered job as a new job"
|
|
187
|
+
}
|
|
188
|
+
}
|
|
189
|
+
},
|
|
190
|
+
"attempts": {
|
|
191
|
+
"entities": {
|
|
192
|
+
"background-job-attempt": {
|
|
193
|
+
"title": "Job Attempt",
|
|
194
|
+
"plural": "Job Attempts",
|
|
195
|
+
"groups": {
|
|
196
|
+
"overview": "Overview"
|
|
197
|
+
},
|
|
198
|
+
"fields": {
|
|
199
|
+
"job-id": { "title": "Job" },
|
|
200
|
+
"attempt-number": { "title": "Attempt" },
|
|
201
|
+
"trigger": { "title": "Trigger" },
|
|
202
|
+
"status": { "title": "Status" },
|
|
203
|
+
"worker-id": { "title": "Worker" },
|
|
204
|
+
"started-at": { "title": "Started At" },
|
|
205
|
+
"completed-at": { "title": "Completed At" },
|
|
206
|
+
"duration-ms": { "title": "Duration (ms)" },
|
|
207
|
+
"error": { "title": "Error" }
|
|
208
|
+
},
|
|
209
|
+
"states": {
|
|
210
|
+
"queued": "Queued",
|
|
211
|
+
"running": "Running",
|
|
212
|
+
"succeeded": "Succeeded",
|
|
213
|
+
"failed": "Failed",
|
|
214
|
+
"cancelled": "Cancelled",
|
|
215
|
+
"timed-out": "Timed Out",
|
|
216
|
+
"abandoned": "Abandoned"
|
|
217
|
+
}
|
|
218
|
+
}
|
|
219
|
+
}
|
|
220
|
+
},
|
|
221
|
+
"schedules": {
|
|
222
|
+
"menus": {
|
|
223
|
+
"schedules": {
|
|
224
|
+
"title": "Schedules",
|
|
225
|
+
"description": "Manage recurring job schedules"
|
|
226
|
+
}
|
|
227
|
+
},
|
|
228
|
+
"entities": {
|
|
229
|
+
"background-job-schedule": {
|
|
230
|
+
"title": "Job Schedule",
|
|
231
|
+
"plural": "Job Schedules",
|
|
232
|
+
"groups": {
|
|
233
|
+
"basic-info": "Basic Information",
|
|
234
|
+
"command": "Command",
|
|
235
|
+
"recurrence": "Recurrence",
|
|
236
|
+
"policies": "Policies",
|
|
237
|
+
"runtime": "Runtime"
|
|
238
|
+
},
|
|
239
|
+
"fields": {
|
|
240
|
+
"title": { "title": "Title" },
|
|
241
|
+
"description": { "title": "Description" },
|
|
242
|
+
"command": { "title": "Command" },
|
|
243
|
+
"command-key": { "title": "Command Key" },
|
|
244
|
+
"tenant-id": { "title": "Tenant" },
|
|
245
|
+
"application-id": { "title": "Application" },
|
|
246
|
+
"job-type": { "title": "Job Type" },
|
|
247
|
+
"enabled": { "title": "Enabled" },
|
|
248
|
+
"source": { "title": "Source" },
|
|
249
|
+
"cron": { "title": "Cron Expression" },
|
|
250
|
+
"timezone": { "title": "Timezone" },
|
|
251
|
+
"concurrency-policy": { "title": "Concurrency Policy" },
|
|
252
|
+
"missed-run-policy": { "title": "Missed Run Policy" },
|
|
253
|
+
"default-visibility": { "title": "Default Visibility" },
|
|
254
|
+
"failure-threshold": { "title": "Failure Threshold" },
|
|
255
|
+
"failure-action": { "title": "Failure Action" },
|
|
256
|
+
"reset-failures-after-success": { "title": "Reset Failures After Success" },
|
|
257
|
+
"status": { "title": "Status" },
|
|
258
|
+
"payload": { "title": "Payload" },
|
|
259
|
+
"next-run-at": { "title": "Next Run" },
|
|
260
|
+
"last-triggered-at": { "title": "Last Run" },
|
|
261
|
+
"consecutive-failures": { "title": "Consecutive Failures" }
|
|
262
|
+
},
|
|
263
|
+
"related-entities": {
|
|
264
|
+
"jobs": { "title": "Job History" }
|
|
265
|
+
},
|
|
266
|
+
"options": {
|
|
267
|
+
"concurrency": {
|
|
268
|
+
"skip-if-running": "Skip If Running",
|
|
269
|
+
"queue": "Queue"
|
|
270
|
+
},
|
|
271
|
+
"missed-run": {
|
|
272
|
+
"skip": "Skip",
|
|
273
|
+
"catch-up-one": "Catch Up One"
|
|
274
|
+
},
|
|
275
|
+
"source": {
|
|
276
|
+
"system": "System",
|
|
277
|
+
"integration": "Integration",
|
|
278
|
+
"user": "User"
|
|
279
|
+
},
|
|
280
|
+
"visibility": {
|
|
281
|
+
"initiator": "Initiator",
|
|
282
|
+
"tenant-admin": "Tenant Admin",
|
|
283
|
+
"silent": "Silent"
|
|
284
|
+
},
|
|
285
|
+
"failure-action": {
|
|
286
|
+
"pause": "Pause Schedule",
|
|
287
|
+
"disable": "Disable Schedule",
|
|
288
|
+
"alert": "Alert Only"
|
|
289
|
+
}
|
|
290
|
+
},
|
|
291
|
+
"status": {
|
|
292
|
+
"active": "Active",
|
|
293
|
+
"pause": "Paused",
|
|
294
|
+
"disabled": "Disabled"
|
|
295
|
+
},
|
|
296
|
+
"transitions": {
|
|
297
|
+
"pause": "Pause",
|
|
298
|
+
"resume": "Resume",
|
|
299
|
+
"disable": "Disable",
|
|
300
|
+
"enable": "Enable"
|
|
301
|
+
}
|
|
302
|
+
}
|
|
303
|
+
},
|
|
304
|
+
"actions": {
|
|
305
|
+
"run-now": { "title": "Run Now" },
|
|
306
|
+
"bulk-run-now": {
|
|
307
|
+
"title": "Run Selected",
|
|
308
|
+
"confirm": {
|
|
309
|
+
"title": "Run Selected Schedules",
|
|
310
|
+
"message": "Run the selected schedules now?"
|
|
311
|
+
}
|
|
312
|
+
}
|
|
313
|
+
},
|
|
314
|
+
"commands": {
|
|
315
|
+
"run-now": {
|
|
316
|
+
"messages": {
|
|
317
|
+
"success": {
|
|
318
|
+
"title": "Job Started",
|
|
319
|
+
"description": "{{name}} was started and is queued to run."
|
|
320
|
+
},
|
|
321
|
+
"failed": {
|
|
322
|
+
"title": "Run Failed",
|
|
323
|
+
"description": "Could not start {{name}}."
|
|
324
|
+
}
|
|
325
|
+
}
|
|
326
|
+
}
|
|
327
|
+
},
|
|
328
|
+
"notifications": {
|
|
329
|
+
"threshold": {
|
|
330
|
+
"title": "Job Schedule Failure Threshold",
|
|
331
|
+
"body": "A job schedule exceeded its consecutive failure threshold and may be paused or disabled."
|
|
332
|
+
}
|
|
333
|
+
},
|
|
334
|
+
"permissions": {
|
|
335
|
+
"view": {
|
|
336
|
+
"title": "View Schedules",
|
|
337
|
+
"description": "View job schedules"
|
|
338
|
+
},
|
|
339
|
+
"manage": {
|
|
340
|
+
"title": "Manage Schedules",
|
|
341
|
+
"description": "Create, update, and delete job schedules"
|
|
342
|
+
}
|
|
343
|
+
}
|
|
344
|
+
}
|
|
345
|
+
}
|
|
@@ -0,0 +1,345 @@
|
|
|
1
|
+
{
|
|
2
|
+
"module": {
|
|
3
|
+
"title": "Background Jobs",
|
|
4
|
+
"description": "Monitor and manage background jobs and schedules",
|
|
5
|
+
"menus": {
|
|
6
|
+
"root": {
|
|
7
|
+
"title": "Background Jobs",
|
|
8
|
+
"description": "Background jobs and schedules"
|
|
9
|
+
}
|
|
10
|
+
},
|
|
11
|
+
"permissions": {
|
|
12
|
+
"title": "Background Job Management",
|
|
13
|
+
"description": "Access to background jobs, attempts, and schedules"
|
|
14
|
+
}
|
|
15
|
+
},
|
|
16
|
+
"settings": {
|
|
17
|
+
"group": {
|
|
18
|
+
"title": "Background Jobs",
|
|
19
|
+
"description": "Platform settings for background job execution and retention"
|
|
20
|
+
},
|
|
21
|
+
"retention": {
|
|
22
|
+
"title": "Retention",
|
|
23
|
+
"description": "Hard-delete expired terminal jobs and attempts after a retention period",
|
|
24
|
+
"items": {
|
|
25
|
+
"enabled": {
|
|
26
|
+
"title": "Enable Retention Purge",
|
|
27
|
+
"description": "When enabled, a system job periodically removes expired jobs"
|
|
28
|
+
},
|
|
29
|
+
"default-days": {
|
|
30
|
+
"title": "Default Retention (Days)",
|
|
31
|
+
"description": "Terminal jobs older than this are permanently deleted"
|
|
32
|
+
},
|
|
33
|
+
"dead-letter-days": {
|
|
34
|
+
"title": "Dead-Letter Retention (Days)",
|
|
35
|
+
"description": "Dead-lettered jobs are kept longer before purge"
|
|
36
|
+
},
|
|
37
|
+
"batch-size": {
|
|
38
|
+
"title": "Purge Batch Size",
|
|
39
|
+
"description": "Maximum jobs deleted per purge run"
|
|
40
|
+
},
|
|
41
|
+
"purge-cron": {
|
|
42
|
+
"title": "Purge Schedule (Cron)",
|
|
43
|
+
"description": "Cron expression for the system retention purge job"
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
},
|
|
48
|
+
"jobs": {
|
|
49
|
+
"menus": {
|
|
50
|
+
"jobs": {
|
|
51
|
+
"title": "Background Jobs",
|
|
52
|
+
"description": "Monitor background jobs"
|
|
53
|
+
},
|
|
54
|
+
"dead-lettered": {
|
|
55
|
+
"title": "Dead-Lettered Jobs",
|
|
56
|
+
"description": "Jobs that exhausted retries and need replay"
|
|
57
|
+
}
|
|
58
|
+
},
|
|
59
|
+
"entities": {
|
|
60
|
+
"background-job": {
|
|
61
|
+
"title": "Background Job",
|
|
62
|
+
"plural": "Background Jobs",
|
|
63
|
+
"groups": {
|
|
64
|
+
"overview": "Overview",
|
|
65
|
+
"execution": "Execution",
|
|
66
|
+
"data": "Data"
|
|
67
|
+
},
|
|
68
|
+
"fields": {
|
|
69
|
+
"title": { "title": "Title" },
|
|
70
|
+
"command": { "title": "Command" },
|
|
71
|
+
"executed-at": { "title": "Executed At" },
|
|
72
|
+
"job-type": { "title": "Job Type" },
|
|
73
|
+
"status": { "title": "Status" },
|
|
74
|
+
"trigger": { "title": "Trigger" },
|
|
75
|
+
"started-by": { "title": "Started By" },
|
|
76
|
+
"source": { "title": "Source" },
|
|
77
|
+
"progress": { "title": "Progress" },
|
|
78
|
+
"current-attempt": { "title": "Current Attempt" },
|
|
79
|
+
"max-attempts": { "title": "Max Attempts" },
|
|
80
|
+
"finished-at": { "title": "Finished At" },
|
|
81
|
+
"tray-dismissed-at": { "title": "Tray Dismissed At" },
|
|
82
|
+
"completed-at": { "title": "Completed At" },
|
|
83
|
+
"duration": { "title": "Duration" },
|
|
84
|
+
"result-message": { "title": "Result Message" },
|
|
85
|
+
"payload": { "title": "Payload" },
|
|
86
|
+
"result": { "title": "Result" },
|
|
87
|
+
"parent-job-id": { "title": "Parent Job" },
|
|
88
|
+
"schedule-id": { "title": "Schedule" }
|
|
89
|
+
},
|
|
90
|
+
"related-entities": {
|
|
91
|
+
"attempts": { "title": "Attempts" },
|
|
92
|
+
"child-jobs": { "title": "Child Jobs" }
|
|
93
|
+
},
|
|
94
|
+
"states": {
|
|
95
|
+
"created": "Created",
|
|
96
|
+
"scheduled": "Scheduled",
|
|
97
|
+
"queued": "Queued",
|
|
98
|
+
"running": "Running",
|
|
99
|
+
"paused": "Paused",
|
|
100
|
+
"completed": "Completed",
|
|
101
|
+
"failed": "Failed",
|
|
102
|
+
"cancelled": "Cancelled",
|
|
103
|
+
"dead-lettered": "Dead-Lettered"
|
|
104
|
+
},
|
|
105
|
+
"triggers": {
|
|
106
|
+
"schedule": "Schedule",
|
|
107
|
+
"manual": "User",
|
|
108
|
+
"event": "Event",
|
|
109
|
+
"system": "System"
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
},
|
|
113
|
+
"actions": {
|
|
114
|
+
"cancel": { "title": "Cancel Job" },
|
|
115
|
+
"retry": { "title": "Retry Job" },
|
|
116
|
+
"replay-dead-letter": { "title": "Replay Dead-Lettered Job" },
|
|
117
|
+
"bulk-dismiss": {
|
|
118
|
+
"title": "Dismiss From Tray",
|
|
119
|
+
"confirm": {
|
|
120
|
+
"title": "Dismiss Selected Jobs",
|
|
121
|
+
"message": "Hide the selected jobs from the Completed Tasks tray?"
|
|
122
|
+
}
|
|
123
|
+
}
|
|
124
|
+
},
|
|
125
|
+
"tray": {
|
|
126
|
+
"errors": {
|
|
127
|
+
"operation-id-required": "Operation ID is required.",
|
|
128
|
+
"valid-tray-action-required": "A valid tray action is required."
|
|
129
|
+
}
|
|
130
|
+
},
|
|
131
|
+
"errors": {
|
|
132
|
+
"not-found": "Background job {{jobId}} was not found.",
|
|
133
|
+
"retry-invalid-status": "Job {{jobId}} cannot be retried while status is {{status}}. Use replay dead-letter for dead-lettered jobs.",
|
|
134
|
+
"not-dead-lettered": "Job {{jobId}} is not dead-lettered (status: {{status}})."
|
|
135
|
+
},
|
|
136
|
+
"commands": {
|
|
137
|
+
"retry": {
|
|
138
|
+
"messages": {
|
|
139
|
+
"success": "Retry queued.",
|
|
140
|
+
"failed": "Failed to retry background job."
|
|
141
|
+
}
|
|
142
|
+
},
|
|
143
|
+
"replay-dead-letter": {
|
|
144
|
+
"messages": {
|
|
145
|
+
"success": "Dead-lettered job replayed as a new job.",
|
|
146
|
+
"failed": "Failed to replay dead-lettered job."
|
|
147
|
+
}
|
|
148
|
+
},
|
|
149
|
+
"cancel": {
|
|
150
|
+
"messages": {
|
|
151
|
+
"completed": "Cancellation completed.",
|
|
152
|
+
"requested": "Cancellation requested.",
|
|
153
|
+
"failed": "Failed to cancel background job."
|
|
154
|
+
}
|
|
155
|
+
}
|
|
156
|
+
},
|
|
157
|
+
"notifications": {
|
|
158
|
+
"complete": {
|
|
159
|
+
"title": "Background Job Completed",
|
|
160
|
+
"body": "The job finished successfully."
|
|
161
|
+
},
|
|
162
|
+
"failed": {
|
|
163
|
+
"title": "Background Job Failed",
|
|
164
|
+
"body": "The job failed. Open Jobs to review the error."
|
|
165
|
+
}
|
|
166
|
+
},
|
|
167
|
+
"permissions": {
|
|
168
|
+
"view": {
|
|
169
|
+
"title": "View Jobs",
|
|
170
|
+
"description": "View jobs and attempt history"
|
|
171
|
+
},
|
|
172
|
+
"cancel": {
|
|
173
|
+
"title": "Cancel Job",
|
|
174
|
+
"description": "Cancel a running or queued job"
|
|
175
|
+
},
|
|
176
|
+
"retry": {
|
|
177
|
+
"title": "Retry Job",
|
|
178
|
+
"description": "Retry a failed job"
|
|
179
|
+
},
|
|
180
|
+
"delete": {
|
|
181
|
+
"title": "Delete Job",
|
|
182
|
+
"description": "Permanently delete a job and its attempts"
|
|
183
|
+
},
|
|
184
|
+
"replay-dead-letter": {
|
|
185
|
+
"title": "Replay Dead-Lettered Job",
|
|
186
|
+
"description": "Replay a dead-lettered job as a new job"
|
|
187
|
+
}
|
|
188
|
+
}
|
|
189
|
+
},
|
|
190
|
+
"attempts": {
|
|
191
|
+
"entities": {
|
|
192
|
+
"background-job-attempt": {
|
|
193
|
+
"title": "Job Attempt",
|
|
194
|
+
"plural": "Job Attempts",
|
|
195
|
+
"groups": {
|
|
196
|
+
"overview": "Overview"
|
|
197
|
+
},
|
|
198
|
+
"fields": {
|
|
199
|
+
"job-id": { "title": "Job" },
|
|
200
|
+
"attempt-number": { "title": "Attempt" },
|
|
201
|
+
"trigger": { "title": "Trigger" },
|
|
202
|
+
"status": { "title": "Status" },
|
|
203
|
+
"worker-id": { "title": "Worker" },
|
|
204
|
+
"started-at": { "title": "Started At" },
|
|
205
|
+
"completed-at": { "title": "Completed At" },
|
|
206
|
+
"duration-ms": { "title": "Duration (ms)" },
|
|
207
|
+
"error": { "title": "Error" }
|
|
208
|
+
},
|
|
209
|
+
"states": {
|
|
210
|
+
"queued": "Queued",
|
|
211
|
+
"running": "Running",
|
|
212
|
+
"succeeded": "Succeeded",
|
|
213
|
+
"failed": "Failed",
|
|
214
|
+
"cancelled": "Cancelled",
|
|
215
|
+
"timed-out": "Timed Out",
|
|
216
|
+
"abandoned": "Abandoned"
|
|
217
|
+
}
|
|
218
|
+
}
|
|
219
|
+
}
|
|
220
|
+
},
|
|
221
|
+
"schedules": {
|
|
222
|
+
"menus": {
|
|
223
|
+
"schedules": {
|
|
224
|
+
"title": "Schedules",
|
|
225
|
+
"description": "Manage recurring job schedules"
|
|
226
|
+
}
|
|
227
|
+
},
|
|
228
|
+
"entities": {
|
|
229
|
+
"background-job-schedule": {
|
|
230
|
+
"title": "Job Schedule",
|
|
231
|
+
"plural": "Job Schedules",
|
|
232
|
+
"groups": {
|
|
233
|
+
"basic-info": "Basic Information",
|
|
234
|
+
"command": "Command",
|
|
235
|
+
"recurrence": "Recurrence",
|
|
236
|
+
"policies": "Policies",
|
|
237
|
+
"runtime": "Runtime"
|
|
238
|
+
},
|
|
239
|
+
"fields": {
|
|
240
|
+
"title": { "title": "Title" },
|
|
241
|
+
"description": { "title": "Description" },
|
|
242
|
+
"command": { "title": "Command" },
|
|
243
|
+
"command-key": { "title": "Command Key" },
|
|
244
|
+
"tenant-id": { "title": "Tenant" },
|
|
245
|
+
"application-id": { "title": "Application" },
|
|
246
|
+
"job-type": { "title": "Job Type" },
|
|
247
|
+
"enabled": { "title": "Enabled" },
|
|
248
|
+
"source": { "title": "Source" },
|
|
249
|
+
"cron": { "title": "Cron Expression" },
|
|
250
|
+
"timezone": { "title": "Timezone" },
|
|
251
|
+
"concurrency-policy": { "title": "Concurrency Policy" },
|
|
252
|
+
"missed-run-policy": { "title": "Missed Run Policy" },
|
|
253
|
+
"default-visibility": { "title": "Default Visibility" },
|
|
254
|
+
"failure-threshold": { "title": "Failure Threshold" },
|
|
255
|
+
"failure-action": { "title": "Failure Action" },
|
|
256
|
+
"reset-failures-after-success": { "title": "Reset Failures After Success" },
|
|
257
|
+
"status": { "title": "Status" },
|
|
258
|
+
"payload": { "title": "Payload" },
|
|
259
|
+
"next-run-at": { "title": "Next Run" },
|
|
260
|
+
"last-triggered-at": { "title": "Last Run" },
|
|
261
|
+
"consecutive-failures": { "title": "Consecutive Failures" }
|
|
262
|
+
},
|
|
263
|
+
"related-entities": {
|
|
264
|
+
"jobs": { "title": "Job History" }
|
|
265
|
+
},
|
|
266
|
+
"options": {
|
|
267
|
+
"concurrency": {
|
|
268
|
+
"skip-if-running": "Skip If Running",
|
|
269
|
+
"queue": "Queue"
|
|
270
|
+
},
|
|
271
|
+
"missed-run": {
|
|
272
|
+
"skip": "Skip",
|
|
273
|
+
"catch-up-one": "Catch Up One"
|
|
274
|
+
},
|
|
275
|
+
"source": {
|
|
276
|
+
"system": "System",
|
|
277
|
+
"integration": "Integration",
|
|
278
|
+
"user": "User"
|
|
279
|
+
},
|
|
280
|
+
"visibility": {
|
|
281
|
+
"initiator": "Initiator",
|
|
282
|
+
"tenant-admin": "Tenant Admin",
|
|
283
|
+
"silent": "Silent"
|
|
284
|
+
},
|
|
285
|
+
"failure-action": {
|
|
286
|
+
"pause": "Pause Schedule",
|
|
287
|
+
"disable": "Disable Schedule",
|
|
288
|
+
"alert": "Alert Only"
|
|
289
|
+
}
|
|
290
|
+
},
|
|
291
|
+
"status": {
|
|
292
|
+
"active": "Active",
|
|
293
|
+
"pause": "Paused",
|
|
294
|
+
"disabled": "Disabled"
|
|
295
|
+
},
|
|
296
|
+
"transitions": {
|
|
297
|
+
"pause": "Pause",
|
|
298
|
+
"resume": "Resume",
|
|
299
|
+
"disable": "Disable",
|
|
300
|
+
"enable": "Enable"
|
|
301
|
+
}
|
|
302
|
+
}
|
|
303
|
+
},
|
|
304
|
+
"actions": {
|
|
305
|
+
"run-now": { "title": "Run Now" },
|
|
306
|
+
"bulk-run-now": {
|
|
307
|
+
"title": "Run Selected",
|
|
308
|
+
"confirm": {
|
|
309
|
+
"title": "Run Selected Schedules",
|
|
310
|
+
"message": "Run the selected schedules now?"
|
|
311
|
+
}
|
|
312
|
+
}
|
|
313
|
+
},
|
|
314
|
+
"commands": {
|
|
315
|
+
"run-now": {
|
|
316
|
+
"messages": {
|
|
317
|
+
"success": {
|
|
318
|
+
"title": "Job Started",
|
|
319
|
+
"description": "{{name}} was started and is queued to run."
|
|
320
|
+
},
|
|
321
|
+
"failed": {
|
|
322
|
+
"title": "Run Failed",
|
|
323
|
+
"description": "Could not start {{name}}."
|
|
324
|
+
}
|
|
325
|
+
}
|
|
326
|
+
}
|
|
327
|
+
},
|
|
328
|
+
"notifications": {
|
|
329
|
+
"threshold": {
|
|
330
|
+
"title": "Job Schedule Failure Threshold",
|
|
331
|
+
"body": "A job schedule exceeded its consecutive failure threshold and may be paused or disabled."
|
|
332
|
+
}
|
|
333
|
+
},
|
|
334
|
+
"permissions": {
|
|
335
|
+
"view": {
|
|
336
|
+
"title": "View Schedules",
|
|
337
|
+
"description": "View job schedules"
|
|
338
|
+
},
|
|
339
|
+
"manage": {
|
|
340
|
+
"title": "Manage Schedules",
|
|
341
|
+
"description": "Create, update, and delete job schedules"
|
|
342
|
+
}
|
|
343
|
+
}
|
|
344
|
+
}
|
|
345
|
+
}
|
|
@@ -0,0 +1,345 @@
|
|
|
1
|
+
{
|
|
2
|
+
"module": {
|
|
3
|
+
"title": "کارهای پسزمینه",
|
|
4
|
+
"description": "پایش و مدیریت کارهای پسزمینه و زمانبندیها",
|
|
5
|
+
"menus": {
|
|
6
|
+
"root": {
|
|
7
|
+
"title": "کارهای پسزمینه",
|
|
8
|
+
"description": "کارهای پسزمینه و زمانبندیها"
|
|
9
|
+
}
|
|
10
|
+
},
|
|
11
|
+
"permissions": {
|
|
12
|
+
"title": "مدیریت کارهای پسزمینه",
|
|
13
|
+
"description": "دسترسی به کارهای پسزمینه، تلاشها و زمانبندیها"
|
|
14
|
+
}
|
|
15
|
+
},
|
|
16
|
+
"settings": {
|
|
17
|
+
"group": {
|
|
18
|
+
"title": "کارهای پسزمینه",
|
|
19
|
+
"description": "تنظیمات سطح پلتفرم برای اجرا و نگهداشت کارهای پسزمینه"
|
|
20
|
+
},
|
|
21
|
+
"retention": {
|
|
22
|
+
"title": "نگهداشت",
|
|
23
|
+
"description": "حذف فیزیکی کارها و تلاشهای منقضی پس از دوره نگهداشت",
|
|
24
|
+
"items": {
|
|
25
|
+
"enabled": {
|
|
26
|
+
"title": "فعالسازی purge نگهداشت",
|
|
27
|
+
"description": "در صورت فعال بودن، یک کار سیستمی بهصورت دورهای کارهای منقضی را حذف میکند"
|
|
28
|
+
},
|
|
29
|
+
"default-days": {
|
|
30
|
+
"title": "نگهداشت پیشفرض (روز)",
|
|
31
|
+
"description": "کارهای terminal قدیمیتر از این مدت حذف میشوند"
|
|
32
|
+
},
|
|
33
|
+
"dead-letter-days": {
|
|
34
|
+
"title": "نگهداشت dead-letter (روز)",
|
|
35
|
+
"description": "کارهای dead-letter مدت بیشتری قبل از purge نگه داشته میشوند"
|
|
36
|
+
},
|
|
37
|
+
"batch-size": {
|
|
38
|
+
"title": "اندازه batch purge",
|
|
39
|
+
"description": "حداکثر تعداد کار حذفشده در هر اجرای purge"
|
|
40
|
+
},
|
|
41
|
+
"purge-cron": {
|
|
42
|
+
"title": "زمانبندی purge (Cron)",
|
|
43
|
+
"description": "عبارت cron برای job سیستمی purge نگهداشت"
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
},
|
|
48
|
+
"jobs": {
|
|
49
|
+
"menus": {
|
|
50
|
+
"jobs": {
|
|
51
|
+
"title": "کارهای پسزمینه",
|
|
52
|
+
"description": "پایش کارهای پسزمینه"
|
|
53
|
+
},
|
|
54
|
+
"dead-lettered": {
|
|
55
|
+
"title": "کارهای بایگانی خطا",
|
|
56
|
+
"description": "کارهایی که تلاشهایشان تمام شده و نیاز به اجرای مجدد دارند"
|
|
57
|
+
}
|
|
58
|
+
},
|
|
59
|
+
"entities": {
|
|
60
|
+
"background-job": {
|
|
61
|
+
"title": "کار پسزمینه",
|
|
62
|
+
"plural": "کارهای پسزمینه",
|
|
63
|
+
"groups": {
|
|
64
|
+
"overview": "نمای کلی",
|
|
65
|
+
"execution": "اجرا",
|
|
66
|
+
"data": "دادهها"
|
|
67
|
+
},
|
|
68
|
+
"fields": {
|
|
69
|
+
"title": { "title": "عنوان" },
|
|
70
|
+
"command": { "title": "دستور" },
|
|
71
|
+
"executed-at": { "title": "زمان اجرا" },
|
|
72
|
+
"job-type": { "title": "نوع کار" },
|
|
73
|
+
"status": { "title": "وضعیت" },
|
|
74
|
+
"trigger": { "title": "نحوه شروع" },
|
|
75
|
+
"started-by": { "title": "شروعکننده" },
|
|
76
|
+
"source": { "title": "منبع" },
|
|
77
|
+
"progress": { "title": "پیشرفت" },
|
|
78
|
+
"current-attempt": { "title": "تلاش جاری" },
|
|
79
|
+
"max-attempts": { "title": "حداکثر تلاش" },
|
|
80
|
+
"finished-at": { "title": "زمان پایان" },
|
|
81
|
+
"tray-dismissed-at": { "title": "زمان بستن از سینی" },
|
|
82
|
+
"completed-at": { "title": "تاریخ پایان" },
|
|
83
|
+
"duration": { "title": "مدت زمان" },
|
|
84
|
+
"result-message": { "title": "پیام نتیجه" },
|
|
85
|
+
"payload": { "title": "داده ورودی" },
|
|
86
|
+
"result": { "title": "نتیجه" },
|
|
87
|
+
"parent-job-id": { "title": "کار والد" },
|
|
88
|
+
"schedule-id": { "title": "زمانبندی" }
|
|
89
|
+
},
|
|
90
|
+
"related-entities": {
|
|
91
|
+
"attempts": { "title": "تلاشها" },
|
|
92
|
+
"child-jobs": { "title": "کارهای فرزند" }
|
|
93
|
+
},
|
|
94
|
+
"states": {
|
|
95
|
+
"created": "ایجادشده",
|
|
96
|
+
"scheduled": "زمانبندیشده",
|
|
97
|
+
"queued": "در صف",
|
|
98
|
+
"running": "در حال اجرا",
|
|
99
|
+
"paused": "متوقف موقت",
|
|
100
|
+
"completed": "تکمیلشده",
|
|
101
|
+
"failed": "ناموفق",
|
|
102
|
+
"cancelled": "لغوشده",
|
|
103
|
+
"dead-lettered": "بایگانی خطا"
|
|
104
|
+
},
|
|
105
|
+
"triggers": {
|
|
106
|
+
"schedule": "زمانبندی",
|
|
107
|
+
"manual": "کاربر",
|
|
108
|
+
"event": "رویداد",
|
|
109
|
+
"system": "سیستمی"
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
},
|
|
113
|
+
"actions": {
|
|
114
|
+
"cancel": { "title": "لغو کار" },
|
|
115
|
+
"retry": { "title": "تلاش مجدد" },
|
|
116
|
+
"replay-dead-letter": { "title": "اجرای دوباره کار بایگانیشده" },
|
|
117
|
+
"bulk-dismiss": {
|
|
118
|
+
"title": "بستن از سینی",
|
|
119
|
+
"confirm": {
|
|
120
|
+
"title": "بستن کارهای انتخابشده",
|
|
121
|
+
"message": "کارهای انتخابشده از سینی کارهای تکمیلشده پنهان شوند؟"
|
|
122
|
+
}
|
|
123
|
+
}
|
|
124
|
+
},
|
|
125
|
+
"tray": {
|
|
126
|
+
"errors": {
|
|
127
|
+
"operation-id-required": "شناسه عملیات الزامی است.",
|
|
128
|
+
"valid-tray-action-required": "یک عملیات معتبر سینی الزامی است."
|
|
129
|
+
}
|
|
130
|
+
},
|
|
131
|
+
"errors": {
|
|
132
|
+
"not-found": "کار پسزمینه {{jobId}} پیدا نشد.",
|
|
133
|
+
"retry-invalid-status": "کار {{jobId}} در وضعیت {{status}} قابل تلاش مجدد نیست. برای کارهای بایگانی خطا از اجرای دوباره استفاده کنید.",
|
|
134
|
+
"not-dead-lettered": "کار {{jobId}} در وضعیت بایگانی خطا نیست (وضعیت: {{status}})."
|
|
135
|
+
},
|
|
136
|
+
"commands": {
|
|
137
|
+
"retry": {
|
|
138
|
+
"messages": {
|
|
139
|
+
"success": "تلاش مجدد در صف قرار گرفت.",
|
|
140
|
+
"failed": "تلاش مجدد کار پسزمینه انجام نشد."
|
|
141
|
+
}
|
|
142
|
+
},
|
|
143
|
+
"replay-dead-letter": {
|
|
144
|
+
"messages": {
|
|
145
|
+
"success": "کار بایگانیشده بهصورت کار جدید اجرا شد.",
|
|
146
|
+
"failed": "اجرای دوباره کار بایگانیشده انجام نشد."
|
|
147
|
+
}
|
|
148
|
+
},
|
|
149
|
+
"cancel": {
|
|
150
|
+
"messages": {
|
|
151
|
+
"completed": "لغو کار انجام شد.",
|
|
152
|
+
"requested": "درخواست لغو کار ثبت شد.",
|
|
153
|
+
"failed": "لغو کار پسزمینه انجام نشد."
|
|
154
|
+
}
|
|
155
|
+
}
|
|
156
|
+
},
|
|
157
|
+
"notifications": {
|
|
158
|
+
"complete": {
|
|
159
|
+
"title": "کار پسزمینه تمام شد",
|
|
160
|
+
"body": "کار با موفقیت تمام شد."
|
|
161
|
+
},
|
|
162
|
+
"failed": {
|
|
163
|
+
"title": "کار پسزمینه ناموفق بود",
|
|
164
|
+
"body": "کار ناموفق بود. برای دیدن خطا به فهرست کارها بروید."
|
|
165
|
+
}
|
|
166
|
+
},
|
|
167
|
+
"permissions": {
|
|
168
|
+
"view": {
|
|
169
|
+
"title": "مشاهده کارها",
|
|
170
|
+
"description": "مشاهده کارها و تاریخچه تلاشها"
|
|
171
|
+
},
|
|
172
|
+
"cancel": {
|
|
173
|
+
"title": "لغو کار",
|
|
174
|
+
"description": "لغو کار در حال اجرا یا در صف"
|
|
175
|
+
},
|
|
176
|
+
"retry": {
|
|
177
|
+
"title": "تلاش مجدد کار",
|
|
178
|
+
"description": "اجرای دوباره کار ناموفق"
|
|
179
|
+
},
|
|
180
|
+
"delete": {
|
|
181
|
+
"title": "حذف کار",
|
|
182
|
+
"description": "حذف دائمی کار و تلاشهای آن"
|
|
183
|
+
},
|
|
184
|
+
"replay-dead-letter": {
|
|
185
|
+
"title": "اجرای دوباره کار بایگانیشده",
|
|
186
|
+
"description": "اجرای دوباره کار بایگانی خطا بهصورت کار جدید"
|
|
187
|
+
}
|
|
188
|
+
}
|
|
189
|
+
},
|
|
190
|
+
"attempts": {
|
|
191
|
+
"entities": {
|
|
192
|
+
"background-job-attempt": {
|
|
193
|
+
"title": "تلاش اجرا",
|
|
194
|
+
"plural": "تلاشهای اجرا",
|
|
195
|
+
"groups": {
|
|
196
|
+
"overview": "نمای کلی"
|
|
197
|
+
},
|
|
198
|
+
"fields": {
|
|
199
|
+
"job-id": { "title": "کار" },
|
|
200
|
+
"attempt-number": { "title": "شماره تلاش" },
|
|
201
|
+
"trigger": { "title": "نحوه شروع" },
|
|
202
|
+
"status": { "title": "وضعیت" },
|
|
203
|
+
"worker-id": { "title": "پردازشگر" },
|
|
204
|
+
"started-at": { "title": "زمان شروع" },
|
|
205
|
+
"completed-at": { "title": "زمان پایان" },
|
|
206
|
+
"duration-ms": { "title": "مدت (میلیثانیه)" },
|
|
207
|
+
"error": { "title": "خطا" }
|
|
208
|
+
},
|
|
209
|
+
"states": {
|
|
210
|
+
"queued": "در صف",
|
|
211
|
+
"running": "در حال اجرا",
|
|
212
|
+
"succeeded": "موفق",
|
|
213
|
+
"failed": "ناموفق",
|
|
214
|
+
"cancelled": "لغوشده",
|
|
215
|
+
"timed-out": "منقضیشده",
|
|
216
|
+
"abandoned": "رهاشده"
|
|
217
|
+
}
|
|
218
|
+
}
|
|
219
|
+
}
|
|
220
|
+
},
|
|
221
|
+
"schedules": {
|
|
222
|
+
"menus": {
|
|
223
|
+
"schedules": {
|
|
224
|
+
"title": "زمانبندیها",
|
|
225
|
+
"description": "مدیریت زمانبندی کارهای تکرارشونده"
|
|
226
|
+
}
|
|
227
|
+
},
|
|
228
|
+
"entities": {
|
|
229
|
+
"background-job-schedule": {
|
|
230
|
+
"title": "زمانبندی کار",
|
|
231
|
+
"plural": "زمانبندی کارها",
|
|
232
|
+
"groups": {
|
|
233
|
+
"basic-info": "اطلاعات پایه",
|
|
234
|
+
"command": "دستور",
|
|
235
|
+
"recurrence": "تکرار",
|
|
236
|
+
"policies": "سیاستها",
|
|
237
|
+
"runtime": "وضعیت اجرا"
|
|
238
|
+
},
|
|
239
|
+
"fields": {
|
|
240
|
+
"title": { "title": "عنوان" },
|
|
241
|
+
"description": { "title": "توضیحات" },
|
|
242
|
+
"command": { "title": "دستور" },
|
|
243
|
+
"command-key": { "title": "کلید دستور" },
|
|
244
|
+
"tenant-id": { "title": "سازمان" },
|
|
245
|
+
"application-id": { "title": "برنامه" },
|
|
246
|
+
"job-type": { "title": "نوع کار" },
|
|
247
|
+
"enabled": { "title": "فعال" },
|
|
248
|
+
"source": { "title": "منبع" },
|
|
249
|
+
"cron": { "title": "عبارت کرون" },
|
|
250
|
+
"timezone": { "title": "منطقه زمانی" },
|
|
251
|
+
"concurrency-policy": { "title": "سیاست همزمانی" },
|
|
252
|
+
"missed-run-policy": { "title": "سیاست اجرای ازدسترفته" },
|
|
253
|
+
"default-visibility": { "title": "نمایش پیشفرض" },
|
|
254
|
+
"failure-threshold": { "title": "آستانه خطا" },
|
|
255
|
+
"failure-action": { "title": "اقدام پس از خطا" },
|
|
256
|
+
"reset-failures-after-success": { "title": "بازنشانی خطا پس از موفقیت" },
|
|
257
|
+
"status": { "title": "وضعیت" },
|
|
258
|
+
"payload": { "title": "داده ورودی" },
|
|
259
|
+
"next-run-at": { "title": "اجرای بعدی" },
|
|
260
|
+
"last-triggered-at": { "title": "آخرین اجرا" },
|
|
261
|
+
"consecutive-failures": { "title": "خطاهای متوالی" }
|
|
262
|
+
},
|
|
263
|
+
"related-entities": {
|
|
264
|
+
"jobs": { "title": "تاریخچه کارها" }
|
|
265
|
+
},
|
|
266
|
+
"options": {
|
|
267
|
+
"concurrency": {
|
|
268
|
+
"skip-if-running": "رد شدن هنگام اجرا",
|
|
269
|
+
"queue": "قرار گرفتن در صف"
|
|
270
|
+
},
|
|
271
|
+
"missed-run": {
|
|
272
|
+
"skip": "رد شدن",
|
|
273
|
+
"catch-up-one": "جبران یک اجرا"
|
|
274
|
+
},
|
|
275
|
+
"source": {
|
|
276
|
+
"system": "سیستمی",
|
|
277
|
+
"integration": "یکپارچهسازی",
|
|
278
|
+
"user": "کاربر"
|
|
279
|
+
},
|
|
280
|
+
"visibility": {
|
|
281
|
+
"initiator": "ایجادکننده",
|
|
282
|
+
"tenant-admin": "مدیر سازمان",
|
|
283
|
+
"silent": "پنهان"
|
|
284
|
+
},
|
|
285
|
+
"failure-action": {
|
|
286
|
+
"pause": "توقف زمانبندی",
|
|
287
|
+
"disable": "غیرفعالسازی زمانبندی",
|
|
288
|
+
"alert": "فقط هشدار"
|
|
289
|
+
}
|
|
290
|
+
},
|
|
291
|
+
"status": {
|
|
292
|
+
"active": "فعال",
|
|
293
|
+
"pause": "متوقف",
|
|
294
|
+
"disabled": "غیرفعال"
|
|
295
|
+
},
|
|
296
|
+
"transitions": {
|
|
297
|
+
"pause": "توقف",
|
|
298
|
+
"resume": "ادامه",
|
|
299
|
+
"disable": "غیرفعالسازی",
|
|
300
|
+
"enable": "فعالسازی"
|
|
301
|
+
}
|
|
302
|
+
}
|
|
303
|
+
},
|
|
304
|
+
"actions": {
|
|
305
|
+
"run-now": { "title": "اجرای فوری" },
|
|
306
|
+
"bulk-run-now": {
|
|
307
|
+
"title": "اجرای انتخابشدهها",
|
|
308
|
+
"confirm": {
|
|
309
|
+
"title": "اجرای زمانبندیهای انتخابشده",
|
|
310
|
+
"message": "زمانبندیهای انتخابشده همین حالا اجرا شوند؟"
|
|
311
|
+
}
|
|
312
|
+
}
|
|
313
|
+
},
|
|
314
|
+
"commands": {
|
|
315
|
+
"run-now": {
|
|
316
|
+
"messages": {
|
|
317
|
+
"success": {
|
|
318
|
+
"title": "کار آغاز شد",
|
|
319
|
+
"description": "«{{name}}» آغاز شد و در صف اجرا قرار گرفت."
|
|
320
|
+
},
|
|
321
|
+
"failed": {
|
|
322
|
+
"title": "اجرا ناموفق بود",
|
|
323
|
+
"description": "امکان آغاز «{{name}}» وجود نداشت."
|
|
324
|
+
}
|
|
325
|
+
}
|
|
326
|
+
}
|
|
327
|
+
},
|
|
328
|
+
"notifications": {
|
|
329
|
+
"threshold": {
|
|
330
|
+
"title": "آستانه شکست زمانبندی کار",
|
|
331
|
+
"body": "یک زمانبندی کار از آستانه شکستهای پیاپی عبور کرد و ممکن است متوقف یا غیرفعال شده باشد."
|
|
332
|
+
}
|
|
333
|
+
},
|
|
334
|
+
"permissions": {
|
|
335
|
+
"view": {
|
|
336
|
+
"title": "مشاهده زمانبندیها",
|
|
337
|
+
"description": "مشاهده زمانبندی کارها"
|
|
338
|
+
},
|
|
339
|
+
"manage": {
|
|
340
|
+
"title": "مدیریت زمانبندیها",
|
|
341
|
+
"description": "ایجاد، ویرایش و حذف زمانبندی کارها"
|
|
342
|
+
}
|
|
343
|
+
}
|
|
344
|
+
}
|
|
345
|
+
}
|
package/package.json
CHANGED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"acorex-platform-module-background-job-management-client-tray-execute-click.command-CEVhvrDQ.mjs","sources":["../../../../libs/modules/background-job-management/client/src/lib/commands/tray-execute-click.command.ts"],"sourcesContent":["import { AXPCommand, type AXPCommandExecuteResultPromise } from '@acorex-platform/framework-shared/runtime';\nimport { AXPBackgroundOperationService } from '@acorex-platform/framework-client/common';\nimport { Injectable, inject } from '@angular/core';\n\nexport interface TrayExecuteClickInput {\n operationId?: string;\n jobId?: string;\n id?: string;\n}\n\n@Injectable()\nexport class BackgroundJobTrayExecuteClickCommand implements AXPCommand<TrayExecuteClickInput, void> {\n private readonly operations = inject(AXPBackgroundOperationService);\n\n async execute(raw: unknown): AXPCommandExecuteResultPromise<void> {\n const wrapped = raw as { options?: TrayExecuteClickInput } & Record<string, unknown>;\n const input = (wrapped?.options ?? raw) as TrayExecuteClickInput;\n const operationId = (input.operationId ?? input.jobId ?? input.id)?.trim();\n if (!operationId) {\n return { success: false, message: { text: 'operationId is required.' } };\n }\n\n await this.operations.executeClick(operationId);\n return { success: true, kind: 'object', data: undefined };\n }\n}\n"],"names":[],"mappings":";;;;MAWa,oCAAoC,CAAA;AADjD,IAAA,WAAA,GAAA;AAEmB,QAAA,IAAA,CAAA,UAAU,GAAG,MAAM,CAAC,6BAA6B,CAAC;AAapE,IAAA;IAXC,MAAM,OAAO,CAAC,GAAY,EAAA;QACxB,MAAM,OAAO,GAAG,GAAoE;QACpF,MAAM,KAAK,IAAI,OAAO,EAAE,OAAO,IAAI,GAAG,CAA0B;AAChE,QAAA,MAAM,WAAW,GAAG,CAAC,KAAK,CAAC,WAAW,IAAI,KAAK,CAAC,KAAK,IAAI,KAAK,CAAC,EAAE,GAAG,IAAI,EAAE;QAC1E,IAAI,CAAC,WAAW,EAAE;AAChB,YAAA,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,EAAE,IAAI,EAAE,0BAA0B,EAAE,EAAE;QAC1E;QAEA,MAAM,IAAI,CAAC,UAAU,CAAC,YAAY,CAAC,WAAW,CAAC;AAC/C,QAAA,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,SAAS,EAAE;IAC3D;8GAbW,oCAAoC,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;kHAApC,oCAAoC,EAAA,CAAA,CAAA;;2FAApC,oCAAoC,EAAA,UAAA,EAAA,CAAA;kBADhD;;;"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"acorex-platform-module-background-job-management-client-tray-run-action.command-B9SFMGxf.mjs","sources":["../../../../libs/modules/background-job-management/client/src/lib/commands/tray-run-action.command.ts"],"sourcesContent":["import { AXPCommand, type AXPCommandExecuteResultPromise } from '@acorex-platform/framework-shared/runtime';\nimport {\n AXPBackgroundOperationService,\n type AXPBackgroundOperationActionKey,\n} from '@acorex-platform/framework-client/common';\nimport { Injectable, inject } from '@angular/core';\n\nconst TRAY_ACTIONS = new Set<AXPBackgroundOperationActionKey>([\n 'cancel',\n 'pause',\n 'resume',\n 'retry',\n 'dismiss',\n]);\n\nexport interface TrayRunActionInput {\n operationId?: string;\n jobId?: string;\n id?: string;\n action?: string;\n}\n\n@Injectable()\nexport class BackgroundJobTrayRunActionCommand implements AXPCommand<TrayRunActionInput, void> {\n private readonly operations = inject(AXPBackgroundOperationService);\n\n async execute(raw: unknown): AXPCommandExecuteResultPromise<void> {\n const wrapped = raw as { options?: TrayRunActionInput } & Record<string, unknown>;\n const input = (wrapped?.options ?? raw) as TrayRunActionInput;\n const operationId = (input.operationId ?? input.jobId ?? input.id)?.trim();\n const action = input.action?.trim() as AXPBackgroundOperationActionKey | undefined;\n if (!operationId) {\n return { success: false, message: { text: 'operationId is required.' } };\n }\n if (!action || !TRAY_ACTIONS.has(action)) {\n return { success: false, message: { text: 'A valid tray action is required.' } };\n }\n\n await this.operations.runAction(operationId, action);\n return { success: true, kind: 'object', data: undefined };\n }\n}\n"],"names":[],"mappings":";;;;AAOA,MAAM,YAAY,GAAG,IAAI,GAAG,CAAkC;IAC5D,QAAQ;IACR,OAAO;IACP,QAAQ;IACR,OAAO;IACP,SAAS;AACV,CAAA,CAAC;MAUW,iCAAiC,CAAA;AAD9C,IAAA,WAAA,GAAA;AAEmB,QAAA,IAAA,CAAA,UAAU,GAAG,MAAM,CAAC,6BAA6B,CAAC;AAiBpE,IAAA;IAfC,MAAM,OAAO,CAAC,GAAY,EAAA;QACxB,MAAM,OAAO,GAAG,GAAiE;QACjF,MAAM,KAAK,IAAI,OAAO,EAAE,OAAO,IAAI,GAAG,CAAuB;AAC7D,QAAA,MAAM,WAAW,GAAG,CAAC,KAAK,CAAC,WAAW,IAAI,KAAK,CAAC,KAAK,IAAI,KAAK,CAAC,EAAE,GAAG,IAAI,EAAE;QAC1E,MAAM,MAAM,GAAG,KAAK,CAAC,MAAM,EAAE,IAAI,EAAiD;QAClF,IAAI,CAAC,WAAW,EAAE;AAChB,YAAA,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,EAAE,IAAI,EAAE,0BAA0B,EAAE,EAAE;QAC1E;QACA,IAAI,CAAC,MAAM,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE;AACxC,YAAA,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,EAAE,IAAI,EAAE,kCAAkC,EAAE,EAAE;QAClF;QAEA,MAAM,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,WAAW,EAAE,MAAM,CAAC;AACpD,QAAA,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,SAAS,EAAE;IAC3D;8GAjBW,iCAAiC,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;kHAAjC,iCAAiC,EAAA,CAAA,CAAA;;2FAAjC,iCAAiC,EAAA,UAAA,EAAA,CAAA;kBAD7C;;;"}
|