@ajna-inc/workflow 0.5.37 → 0.6.1
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/.npmvc/attestations.jsonld +32 -0
- package/LICENSE +202 -0
- package/build/WorkflowEvents.d.mts +40 -0
- package/build/WorkflowEvents.d.mts.map +1 -0
- package/build/WorkflowEvents.mjs +11 -0
- package/build/WorkflowEvents.mjs.map +1 -0
- package/build/WorkflowModule.d.mts +17 -0
- package/build/WorkflowModule.d.mts.map +1 -0
- package/build/WorkflowModule.mjs +446 -0
- package/build/WorkflowModule.mjs.map +1 -0
- package/build/WorkflowModuleConfig.d.mts +39 -0
- package/build/WorkflowModuleConfig.d.mts.map +1 -0
- package/build/WorkflowModuleConfig.mjs +19 -0
- package/build/WorkflowModuleConfig.mjs.map +1 -0
- package/build/_virtual/_@oxc-project_runtime@0.99.0/helpers/decorate.mjs +14 -0
- package/build/_virtual/_@oxc-project_runtime@0.99.0/helpers/decorateMetadata.mjs +11 -0
- package/build/_virtual/_@oxc-project_runtime@0.99.0/helpers/decorateParam.mjs +9 -0
- package/build/_virtual/rolldown_runtime.mjs +41 -0
- package/build/actions/ActionRegistry.d.mts +64 -0
- package/build/actions/ActionRegistry.d.mts.map +1 -0
- package/build/actions/ActionRegistry.mjs +304 -0
- package/build/actions/ActionRegistry.mjs.map +1 -0
- package/build/api/WorkflowApi.d.mts +99 -0
- package/build/api/WorkflowApi.d.mts.map +1 -0
- package/build/api/WorkflowApi.mjs +228 -0
- package/build/api/WorkflowApi.mjs.map +1 -0
- package/build/engine/AttributePlanner.d.mts +12 -0
- package/build/engine/AttributePlanner.d.mts.map +1 -0
- package/build/engine/AttributePlanner.mjs +58 -0
- package/build/engine/AttributePlanner.mjs.map +1 -0
- package/build/engine/GuardEvaluator.d.mts +16 -0
- package/build/engine/GuardEvaluator.d.mts.map +1 -0
- package/build/engine/GuardEvaluator.mjs +38 -0
- package/build/engine/GuardEvaluator.mjs.map +1 -0
- package/build/index.d.mts +46 -0
- package/build/index.mjs +53 -0
- package/build/index.mjs.map +1 -0
- package/build/model/TemplateValidation.d.mts +8 -0
- package/build/model/TemplateValidation.d.mts.map +1 -0
- package/build/model/TemplateValidation.mjs +278 -0
- package/build/model/TemplateValidation.mjs.map +1 -0
- package/build/model/types.d.mts +120 -0
- package/build/model/types.d.mts.map +1 -0
- package/build/model/types.mjs +11 -0
- package/build/model/types.mjs.map +1 -0
- package/build/protocol/WorkflowMessageTypes.d.mts +19 -0
- package/build/protocol/WorkflowMessageTypes.d.mts.map +1 -0
- package/build/protocol/WorkflowMessageTypes.mjs +20 -0
- package/build/protocol/WorkflowMessageTypes.mjs.map +1 -0
- package/build/protocol/handlers/AdvanceHandler.d.mts +16 -0
- package/build/protocol/handlers/AdvanceHandler.d.mts.map +1 -0
- package/build/protocol/handlers/AdvanceHandler.mjs +148 -0
- package/build/protocol/handlers/AdvanceHandler.mjs.map +1 -0
- package/build/protocol/handlers/CancelHandler.d.mts +16 -0
- package/build/protocol/handlers/CancelHandler.d.mts.map +1 -0
- package/build/protocol/handlers/CancelHandler.mjs +103 -0
- package/build/protocol/handlers/CancelHandler.mjs.map +1 -0
- package/build/protocol/handlers/CompleteHandler.d.mts +16 -0
- package/build/protocol/handlers/CompleteHandler.d.mts.map +1 -0
- package/build/protocol/handlers/CompleteHandler.mjs +103 -0
- package/build/protocol/handlers/CompleteHandler.mjs.map +1 -0
- package/build/protocol/handlers/DiscoverHandler.d.mts +15 -0
- package/build/protocol/handlers/DiscoverHandler.d.mts.map +1 -0
- package/build/protocol/handlers/DiscoverHandler.mjs +73 -0
- package/build/protocol/handlers/DiscoverHandler.mjs.map +1 -0
- package/build/protocol/handlers/FetchTemplateHandler.d.mts +16 -0
- package/build/protocol/handlers/FetchTemplateHandler.d.mts.map +1 -0
- package/build/protocol/handlers/FetchTemplateHandler.mjs +64 -0
- package/build/protocol/handlers/FetchTemplateHandler.mjs.map +1 -0
- package/build/protocol/handlers/PauseHandler.d.mts +16 -0
- package/build/protocol/handlers/PauseHandler.d.mts.map +1 -0
- package/build/protocol/handlers/PauseHandler.mjs +103 -0
- package/build/protocol/handlers/PauseHandler.mjs.map +1 -0
- package/build/protocol/handlers/ProblemReportHandler.d.mts +11 -0
- package/build/protocol/handlers/ProblemReportHandler.d.mts.map +1 -0
- package/build/protocol/handlers/ProblemReportHandler.mjs +26 -0
- package/build/protocol/handlers/ProblemReportHandler.mjs.map +1 -0
- package/build/protocol/handlers/PublishTemplateHandler.d.mts +15 -0
- package/build/protocol/handlers/PublishTemplateHandler.d.mts.map +1 -0
- package/build/protocol/handlers/PublishTemplateHandler.mjs +47 -0
- package/build/protocol/handlers/PublishTemplateHandler.mjs.map +1 -0
- package/build/protocol/handlers/ResumeHandler.d.mts +16 -0
- package/build/protocol/handlers/ResumeHandler.d.mts.map +1 -0
- package/build/protocol/handlers/ResumeHandler.mjs +103 -0
- package/build/protocol/handlers/ResumeHandler.mjs.map +1 -0
- package/build/protocol/handlers/StartHandler.d.mts +16 -0
- package/build/protocol/handlers/StartHandler.d.mts.map +1 -0
- package/build/protocol/handlers/StartHandler.mjs +238 -0
- package/build/protocol/handlers/StartHandler.mjs.map +1 -0
- package/build/protocol/handlers/StatusHandler.d.mts +16 -0
- package/build/protocol/handlers/StatusHandler.d.mts.map +1 -0
- package/build/protocol/handlers/StatusHandler.mjs +169 -0
- package/build/protocol/handlers/StatusHandler.mjs.map +1 -0
- package/build/protocol/handlers/TemplateHandler.d.mts +14 -0
- package/build/protocol/handlers/TemplateHandler.d.mts.map +1 -0
- package/build/protocol/handlers/TemplateHandler.mjs +66 -0
- package/build/protocol/handlers/TemplateHandler.mjs.map +1 -0
- package/build/protocol/messages/AdvanceMessage.d.mts +22 -0
- package/build/protocol/messages/AdvanceMessage.d.mts.map +1 -0
- package/build/protocol/messages/AdvanceMessage.mjs +25 -0
- package/build/protocol/messages/AdvanceMessage.mjs.map +1 -0
- package/build/protocol/messages/CancelMessage.d.mts +20 -0
- package/build/protocol/messages/CancelMessage.d.mts.map +1 -0
- package/build/protocol/messages/CancelMessage.mjs +25 -0
- package/build/protocol/messages/CancelMessage.mjs.map +1 -0
- package/build/protocol/messages/CompleteMessage.d.mts +20 -0
- package/build/protocol/messages/CompleteMessage.d.mts.map +1 -0
- package/build/protocol/messages/CompleteMessage.mjs +25 -0
- package/build/protocol/messages/CompleteMessage.mjs.map +1 -0
- package/build/protocol/messages/DiscoverMessage.d.mts +29 -0
- package/build/protocol/messages/DiscoverMessage.d.mts.map +1 -0
- package/build/protocol/messages/DiscoverMessage.mjs +25 -0
- package/build/protocol/messages/DiscoverMessage.mjs.map +1 -0
- package/build/protocol/messages/FetchTemplateMessage.d.mts +21 -0
- package/build/protocol/messages/FetchTemplateMessage.d.mts.map +1 -0
- package/build/protocol/messages/FetchTemplateMessage.mjs +31 -0
- package/build/protocol/messages/FetchTemplateMessage.mjs.map +1 -0
- package/build/protocol/messages/PauseMessage.d.mts +20 -0
- package/build/protocol/messages/PauseMessage.d.mts.map +1 -0
- package/build/protocol/messages/PauseMessage.mjs +25 -0
- package/build/protocol/messages/PauseMessage.mjs.map +1 -0
- package/build/protocol/messages/ProblemReportMessage.d.mts +21 -0
- package/build/protocol/messages/ProblemReportMessage.d.mts.map +1 -0
- package/build/protocol/messages/ProblemReportMessage.mjs +25 -0
- package/build/protocol/messages/ProblemReportMessage.mjs.map +1 -0
- package/build/protocol/messages/PublishTemplateMessage.d.mts +23 -0
- package/build/protocol/messages/PublishTemplateMessage.d.mts.map +1 -0
- package/build/protocol/messages/PublishTemplateMessage.mjs +24 -0
- package/build/protocol/messages/PublishTemplateMessage.mjs.map +1 -0
- package/build/protocol/messages/ResumeMessage.d.mts +20 -0
- package/build/protocol/messages/ResumeMessage.d.mts.map +1 -0
- package/build/protocol/messages/ResumeMessage.mjs +25 -0
- package/build/protocol/messages/ResumeMessage.mjs.map +1 -0
- package/build/protocol/messages/StartMessage.d.mts +27 -0
- package/build/protocol/messages/StartMessage.d.mts.map +1 -0
- package/build/protocol/messages/StartMessage.mjs +25 -0
- package/build/protocol/messages/StartMessage.mjs.map +1 -0
- package/build/protocol/messages/StatusMessage.d.mts +35 -0
- package/build/protocol/messages/StatusMessage.d.mts.map +1 -0
- package/build/protocol/messages/StatusMessage.mjs +25 -0
- package/build/protocol/messages/StatusMessage.mjs.map +1 -0
- package/build/protocol/messages/StatusRequestMessage.d.mts +29 -0
- package/build/protocol/messages/StatusRequestMessage.d.mts.map +1 -0
- package/build/protocol/messages/StatusRequestMessage.mjs +25 -0
- package/build/protocol/messages/StatusRequestMessage.mjs.map +1 -0
- package/build/protocol/messages/TemplateMessage.d.mts +20 -0
- package/build/protocol/messages/TemplateMessage.d.mts.map +1 -0
- package/build/protocol/messages/TemplateMessage.mjs +25 -0
- package/build/protocol/messages/TemplateMessage.mjs.map +1 -0
- package/build/protocol/messages/WorkflowsMessage.d.mts +28 -0
- package/build/protocol/messages/WorkflowsMessage.d.mts.map +1 -0
- package/build/protocol/messages/WorkflowsMessage.mjs +25 -0
- package/build/protocol/messages/WorkflowsMessage.mjs.map +1 -0
- package/build/queue/CommandQueue.d.mts +22 -0
- package/build/queue/CommandQueue.d.mts.map +1 -0
- package/build/queue/CommandQueue.mjs +6 -0
- package/build/queue/CommandQueue.mjs.map +1 -0
- package/build/queue/PersistentCommandQueue.d.mts +56 -0
- package/build/queue/PersistentCommandQueue.d.mts.map +1 -0
- package/build/queue/PersistentCommandQueue.mjs +273 -0
- package/build/queue/PersistentCommandQueue.mjs.map +1 -0
- package/build/repository/WorkflowCommandRecord.d.mts +50 -0
- package/build/repository/WorkflowCommandRecord.d.mts.map +1 -0
- package/build/repository/WorkflowCommandRecord.mjs +48 -0
- package/build/repository/WorkflowCommandRecord.mjs.map +1 -0
- package/build/repository/WorkflowCommandRepository.d.mts +59 -0
- package/build/repository/WorkflowCommandRepository.d.mts.map +1 -0
- package/build/repository/WorkflowCommandRepository.mjs +136 -0
- package/build/repository/WorkflowCommandRepository.mjs.map +1 -0
- package/build/repository/WorkflowInstanceRecord.d.mts +65 -0
- package/build/repository/WorkflowInstanceRecord.d.mts.map +1 -0
- package/build/repository/WorkflowInstanceRecord.mjs +44 -0
- package/build/repository/WorkflowInstanceRecord.mjs.map +1 -0
- package/build/repository/WorkflowInstanceRepository.d.mts +15 -0
- package/build/repository/WorkflowInstanceRepository.d.mts.map +1 -0
- package/build/repository/WorkflowInstanceRepository.mjs +48 -0
- package/build/repository/WorkflowInstanceRepository.mjs.map +1 -0
- package/build/repository/WorkflowTemplateRecord.d.mts +27 -0
- package/build/repository/WorkflowTemplateRecord.d.mts.map +1 -0
- package/build/repository/WorkflowTemplateRecord.mjs +29 -0
- package/build/repository/WorkflowTemplateRecord.mjs.map +1 -0
- package/build/repository/WorkflowTemplateRepository.d.mts +11 -0
- package/build/repository/WorkflowTemplateRepository.d.mts.map +1 -0
- package/build/repository/WorkflowTemplateRepository.mjs +43 -0
- package/build/repository/WorkflowTemplateRepository.mjs.map +1 -0
- package/build/services/WorkflowService.d.mts +107 -0
- package/build/services/WorkflowService.d.mts.map +1 -0
- package/build/services/WorkflowService.mjs +582 -0
- package/build/services/WorkflowService.mjs.map +1 -0
- package/build/ui/UiFilter.mjs +85 -0
- package/build/ui/UiFilter.mjs.map +1 -0
- package/package.json +27 -33
- package/build/WorkflowEvents.d.ts +0 -35
- package/build/WorkflowEvents.js +0 -10
- package/build/WorkflowEvents.js.map +0 -1
- package/build/WorkflowModule.d.ts +0 -13
- package/build/WorkflowModule.js +0 -647
- package/build/WorkflowModule.js.map +0 -1
- package/build/WorkflowModuleConfig.d.ts +0 -35
- package/build/WorkflowModuleConfig.js +0 -19
- package/build/WorkflowModuleConfig.js.map +0 -1
- package/build/actions/ActionRegistry.d.ts +0 -59
- package/build/actions/ActionRegistry.js +0 -367
- package/build/actions/ActionRegistry.js.map +0 -1
- package/build/api/WorkflowApi.d.ts +0 -94
- package/build/api/WorkflowApi.js +0 -241
- package/build/api/WorkflowApi.js.map +0 -1
- package/build/engine/AttributePlanner.d.ts +0 -7
- package/build/engine/AttributePlanner.js +0 -81
- package/build/engine/AttributePlanner.js.map +0 -1
- package/build/engine/GuardEvaluator.d.ts +0 -11
- package/build/engine/GuardEvaluator.js +0 -40
- package/build/engine/GuardEvaluator.js.map +0 -1
- package/build/index.d.ts +0 -45
- package/build/index.js +0 -69
- package/build/index.js.map +0 -1
- package/build/model/TemplateValidation.d.ts +0 -3
- package/build/model/TemplateValidation.js +0 -231
- package/build/model/TemplateValidation.js.map +0 -1
- package/build/model/types.d.ts +0 -116
- package/build/model/types.js +0 -15
- package/build/model/types.js.map +0 -1
- package/build/protocol/WorkflowMessageTypes.d.ts +0 -15
- package/build/protocol/WorkflowMessageTypes.js +0 -22
- package/build/protocol/WorkflowMessageTypes.js.map +0 -1
- package/build/protocol/handlers/AdvanceHandler.d.ts +0 -12
- package/build/protocol/handlers/AdvanceHandler.js +0 -149
- package/build/protocol/handlers/AdvanceHandler.js.map +0 -1
- package/build/protocol/handlers/CancelHandler.d.ts +0 -12
- package/build/protocol/handlers/CancelHandler.js +0 -124
- package/build/protocol/handlers/CancelHandler.js.map +0 -1
- package/build/protocol/handlers/CompleteHandler.d.ts +0 -12
- package/build/protocol/handlers/CompleteHandler.js +0 -125
- package/build/protocol/handlers/CompleteHandler.js.map +0 -1
- package/build/protocol/handlers/DiscoverHandler.d.ts +0 -11
- package/build/protocol/handlers/DiscoverHandler.js +0 -71
- package/build/protocol/handlers/DiscoverHandler.js.map +0 -1
- package/build/protocol/handlers/FetchTemplateHandler.d.ts +0 -12
- package/build/protocol/handlers/FetchTemplateHandler.js +0 -71
- package/build/protocol/handlers/FetchTemplateHandler.js.map +0 -1
- package/build/protocol/handlers/PauseHandler.d.ts +0 -12
- package/build/protocol/handlers/PauseHandler.js +0 -124
- package/build/protocol/handlers/PauseHandler.js.map +0 -1
- package/build/protocol/handlers/ProblemReportHandler.d.ts +0 -6
- package/build/protocol/handlers/ProblemReportHandler.js +0 -28
- package/build/protocol/handlers/ProblemReportHandler.js.map +0 -1
- package/build/protocol/handlers/PublishTemplateHandler.d.ts +0 -11
- package/build/protocol/handlers/PublishTemplateHandler.js +0 -53
- package/build/protocol/handlers/PublishTemplateHandler.js.map +0 -1
- package/build/protocol/handlers/ResumeHandler.d.ts +0 -12
- package/build/protocol/handlers/ResumeHandler.js +0 -124
- package/build/protocol/handlers/ResumeHandler.js.map +0 -1
- package/build/protocol/handlers/StartHandler.d.ts +0 -12
- package/build/protocol/handlers/StartHandler.js +0 -274
- package/build/protocol/handlers/StartHandler.js.map +0 -1
- package/build/protocol/handlers/StatusHandler.d.ts +0 -12
- package/build/protocol/handlers/StatusHandler.js +0 -202
- package/build/protocol/handlers/StatusHandler.js.map +0 -1
- package/build/protocol/handlers/TemplateHandler.d.ts +0 -9
- package/build/protocol/handlers/TemplateHandler.js +0 -83
- package/build/protocol/handlers/TemplateHandler.js.map +0 -1
- package/build/protocol/messages/AdvanceMessage.d.ts +0 -16
- package/build/protocol/messages/AdvanceMessage.js +0 -33
- package/build/protocol/messages/AdvanceMessage.js.map +0 -1
- package/build/protocol/messages/CancelMessage.d.ts +0 -14
- package/build/protocol/messages/CancelMessage.js +0 -33
- package/build/protocol/messages/CancelMessage.js.map +0 -1
- package/build/protocol/messages/CompleteMessage.d.ts +0 -14
- package/build/protocol/messages/CompleteMessage.js +0 -33
- package/build/protocol/messages/CompleteMessage.js.map +0 -1
- package/build/protocol/messages/DiscoverMessage.d.ts +0 -23
- package/build/protocol/messages/DiscoverMessage.js +0 -33
- package/build/protocol/messages/DiscoverMessage.js.map +0 -1
- package/build/protocol/messages/FetchTemplateMessage.d.ts +0 -15
- package/build/protocol/messages/FetchTemplateMessage.js +0 -33
- package/build/protocol/messages/FetchTemplateMessage.js.map +0 -1
- package/build/protocol/messages/PauseMessage.d.ts +0 -14
- package/build/protocol/messages/PauseMessage.js +0 -33
- package/build/protocol/messages/PauseMessage.js.map +0 -1
- package/build/protocol/messages/ProblemReportMessage.d.ts +0 -15
- package/build/protocol/messages/ProblemReportMessage.js +0 -33
- package/build/protocol/messages/ProblemReportMessage.js.map +0 -1
- package/build/protocol/messages/PublishTemplateMessage.d.ts +0 -17
- package/build/protocol/messages/PublishTemplateMessage.js +0 -31
- package/build/protocol/messages/PublishTemplateMessage.js.map +0 -1
- package/build/protocol/messages/ResumeMessage.d.ts +0 -14
- package/build/protocol/messages/ResumeMessage.js +0 -33
- package/build/protocol/messages/ResumeMessage.js.map +0 -1
- package/build/protocol/messages/StartMessage.d.ts +0 -21
- package/build/protocol/messages/StartMessage.js +0 -33
- package/build/protocol/messages/StartMessage.js.map +0 -1
- package/build/protocol/messages/StatusMessage.d.ts +0 -29
- package/build/protocol/messages/StatusMessage.js +0 -33
- package/build/protocol/messages/StatusMessage.js.map +0 -1
- package/build/protocol/messages/StatusRequestMessage.d.ts +0 -23
- package/build/protocol/messages/StatusRequestMessage.js +0 -33
- package/build/protocol/messages/StatusRequestMessage.js.map +0 -1
- package/build/protocol/messages/TemplateMessage.d.ts +0 -14
- package/build/protocol/messages/TemplateMessage.js +0 -33
- package/build/protocol/messages/TemplateMessage.js.map +0 -1
- package/build/protocol/messages/WorkflowsMessage.d.ts +0 -22
- package/build/protocol/messages/WorkflowsMessage.js +0 -33
- package/build/protocol/messages/WorkflowsMessage.js.map +0 -1
- package/build/queue/CommandQueue.d.ts +0 -18
- package/build/queue/CommandQueue.js +0 -8
- package/build/queue/CommandQueue.js.map +0 -1
- package/build/queue/PersistentCommandQueue.d.ts +0 -51
- package/build/queue/PersistentCommandQueue.js +0 -348
- package/build/queue/PersistentCommandQueue.js.map +0 -1
- package/build/repository/WorkflowCommandRecord.d.ts +0 -46
- package/build/repository/WorkflowCommandRecord.js +0 -52
- package/build/repository/WorkflowCommandRecord.js.map +0 -1
- package/build/repository/WorkflowCommandRepository.d.ts +0 -55
- package/build/repository/WorkflowCommandRepository.js +0 -149
- package/build/repository/WorkflowCommandRepository.js.map +0 -1
- package/build/repository/WorkflowInstanceRecord.d.ts +0 -61
- package/build/repository/WorkflowInstanceRecord.js +0 -43
- package/build/repository/WorkflowInstanceRecord.js.map +0 -1
- package/build/repository/WorkflowInstanceRepository.d.ts +0 -10
- package/build/repository/WorkflowInstanceRepository.js +0 -52
- package/build/repository/WorkflowInstanceRepository.js.map +0 -1
- package/build/repository/WorkflowTemplateRecord.d.ts +0 -23
- package/build/repository/WorkflowTemplateRecord.js +0 -28
- package/build/repository/WorkflowTemplateRecord.js.map +0 -1
- package/build/repository/WorkflowTemplateRepository.d.ts +0 -6
- package/build/repository/WorkflowTemplateRepository.js +0 -56
- package/build/repository/WorkflowTemplateRepository.js.map +0 -1
- package/build/services/WorkflowService.d.ts +0 -102
- package/build/services/WorkflowService.js +0 -704
- package/build/services/WorkflowService.js.map +0 -1
- package/build/ui/UiFilter.d.ts +0 -5
- package/build/ui/UiFilter.js +0 -104
- package/build/ui/UiFilter.js.map +0 -1
- package/build/ui/UiTypes.d.ts +0 -28
- package/build/ui/UiTypes.js +0 -3
- package/build/ui/UiTypes.js.map +0 -1
|
@@ -1,704 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
|
3
|
-
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
4
|
-
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
5
|
-
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
6
|
-
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
7
|
-
};
|
|
8
|
-
var __metadata = (this && this.__metadata) || function (k, v) {
|
|
9
|
-
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
|
|
10
|
-
};
|
|
11
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
12
|
-
exports.WorkflowService = void 0;
|
|
13
|
-
const core_1 = require("@credo-ts/core");
|
|
14
|
-
const WorkflowEvents_1 = require("../WorkflowEvents");
|
|
15
|
-
const WorkflowModuleConfig_1 = require("../WorkflowModuleConfig");
|
|
16
|
-
const ActionRegistry_1 = require("../actions/ActionRegistry");
|
|
17
|
-
const GuardEvaluator_1 = require("../engine/GuardEvaluator");
|
|
18
|
-
const TemplateValidation_1 = require("../model/TemplateValidation");
|
|
19
|
-
const types_1 = require("../model/types");
|
|
20
|
-
const CompleteMessage_1 = require("../protocol/messages/CompleteMessage");
|
|
21
|
-
const WorkflowInstanceRecord_1 = require("../repository/WorkflowInstanceRecord");
|
|
22
|
-
const WorkflowInstanceRepository_1 = require("../repository/WorkflowInstanceRepository");
|
|
23
|
-
const WorkflowTemplateRecord_1 = require("../repository/WorkflowTemplateRecord");
|
|
24
|
-
const WorkflowTemplateRepository_1 = require("../repository/WorkflowTemplateRepository");
|
|
25
|
-
const stableStringify = (obj) => {
|
|
26
|
-
const allKeys = [];
|
|
27
|
-
JSON.stringify(obj, (k, v) => {
|
|
28
|
-
allKeys.push(k);
|
|
29
|
-
return v;
|
|
30
|
-
});
|
|
31
|
-
allKeys.sort();
|
|
32
|
-
return JSON.stringify(obj, allKeys);
|
|
33
|
-
};
|
|
34
|
-
const sha256 = (input) => {
|
|
35
|
-
const hash = core_1.Hasher.hash(core_1.TypedArrayEncoder.fromString(input), 'sha-256');
|
|
36
|
-
return core_1.TypedArrayEncoder.toHex(hash);
|
|
37
|
-
};
|
|
38
|
-
let WorkflowService = class WorkflowService {
|
|
39
|
-
constructor(templateRepo, instanceRepo, config, agentConfig, eventEmitter) {
|
|
40
|
-
this.templateRepo = templateRepo;
|
|
41
|
-
this.instanceRepo = instanceRepo;
|
|
42
|
-
this.config = config;
|
|
43
|
-
this.agentConfig = agentConfig;
|
|
44
|
-
this.eventEmitter = eventEmitter;
|
|
45
|
-
this.actions = new ActionRegistry_1.ActionRegistry();
|
|
46
|
-
this.actions.register(new ActionRegistry_1.LocalStateSetAction());
|
|
47
|
-
// Register DIDComm action handlers used by workflows
|
|
48
|
-
// Credential issuance flow handlers
|
|
49
|
-
this.actions.register(new ActionRegistry_1.ProposeCredentialV2Action()); // Holder proposes credential
|
|
50
|
-
this.actions.register(new ActionRegistry_1.IssueCredentialV2Action()); // Issuer sends offer
|
|
51
|
-
this.actions.register(new ActionRegistry_1.RequestCredentialV2Action()); // Holder accepts offer
|
|
52
|
-
this.actions.register(new ActionRegistry_1.IssueCredentialMessageV2Action()); // Issuer issues credential
|
|
53
|
-
// Proof presentation handler
|
|
54
|
-
this.actions.register(new ActionRegistry_1.PresentProofV2Action());
|
|
55
|
-
}
|
|
56
|
-
// Allow external modules (e.g., payments) to register additional action handlers
|
|
57
|
-
registerActions(actions) {
|
|
58
|
-
for (const a of actions) {
|
|
59
|
-
// ActionRegistry expects objects with shape { typeUri, execute }
|
|
60
|
-
// We don't import the exact type here to avoid cross-package coupling
|
|
61
|
-
this.actions.register(a);
|
|
62
|
-
}
|
|
63
|
-
}
|
|
64
|
-
async publishTemplate(agentContext, template) {
|
|
65
|
-
// JSON schema validation + structural checks
|
|
66
|
-
(0, TemplateValidation_1.validateTemplateJson)(template);
|
|
67
|
-
(0, TemplateValidation_1.validateTemplateRefs)(template);
|
|
68
|
-
const hash = sha256(stableStringify(template));
|
|
69
|
-
const existing = await this.templateRepo.findByTemplateIdAndVersion(agentContext, template.template_id, template.version);
|
|
70
|
-
if (existing) {
|
|
71
|
-
existing.template = template;
|
|
72
|
-
existing.hash = hash;
|
|
73
|
-
await this.templateRepo.update(agentContext, existing);
|
|
74
|
-
return existing;
|
|
75
|
-
}
|
|
76
|
-
const record = new WorkflowTemplateRecord_1.WorkflowTemplateRecord({ template, hash });
|
|
77
|
-
await this.templateRepo.save(agentContext, record);
|
|
78
|
-
return record;
|
|
79
|
-
}
|
|
80
|
-
async start(agentContext, opts) {
|
|
81
|
-
// Idempotency by instance_id: if an instance with the same instance_id already exists, return it
|
|
82
|
-
if (opts.instance_id) {
|
|
83
|
-
try {
|
|
84
|
-
const existingByInstance = await this.instanceRepo.getByInstanceId(agentContext, opts.instance_id);
|
|
85
|
-
if (existingByInstance)
|
|
86
|
-
return existingByInstance;
|
|
87
|
-
}
|
|
88
|
-
catch {
|
|
89
|
-
/* not found */
|
|
90
|
-
}
|
|
91
|
-
}
|
|
92
|
-
const tplRec = await this.templateRepo.findByTemplateIdAndVersion(agentContext, opts.template_id, opts.template_version);
|
|
93
|
-
if (!tplRec)
|
|
94
|
-
throw this.problem('invalid_template', `template not found: ${opts.template_id}@${opts.template_version || 'latest'}`);
|
|
95
|
-
const tpl = tplRec.template;
|
|
96
|
-
const startState = tpl.states.find((s) => s.type === 'start')?.name || tpl.states[0]?.name;
|
|
97
|
-
if (!startState)
|
|
98
|
-
throw this.problem('invalid_template', 'no start state');
|
|
99
|
-
const policy = tpl.instance_policy;
|
|
100
|
-
const connectionId = opts.connection_id;
|
|
101
|
-
if (policy.mode === 'singleton_per_connection') {
|
|
102
|
-
const existing = (0, types_1.ensureArray)(await this.instanceRepo.findByTemplateAndConnection(agentContext, tpl.template_id, connectionId)).shift();
|
|
103
|
-
if (existing) {
|
|
104
|
-
if (this.config.autoReturnExistingOnSingleton)
|
|
105
|
-
return existing;
|
|
106
|
-
throw this.problem('already_exists', 'instance already exists for template/connection');
|
|
107
|
-
}
|
|
108
|
-
}
|
|
109
|
-
let multiplicityKeyValue;
|
|
110
|
-
if (policy.mode === 'multi_per_connection' && policy.multiplicity_key) {
|
|
111
|
-
multiplicityKeyValue = this.evalMultiplicity(policy.multiplicity_key, opts.context || {});
|
|
112
|
-
const dup = (0, types_1.ensureArray)(await this.instanceRepo.findByTemplateConnAndMultiplicity(agentContext, tpl.template_id, connectionId, multiplicityKeyValue)).shift();
|
|
113
|
-
if (dup)
|
|
114
|
-
return dup;
|
|
115
|
-
}
|
|
116
|
-
// Derive participants from connection when not provided
|
|
117
|
-
let participants = opts.participants || {};
|
|
118
|
-
try {
|
|
119
|
-
if (connectionId) {
|
|
120
|
-
const connSvc = agentContext.dependencyManager.resolve(core_1.ConnectionService);
|
|
121
|
-
const conn = await connSvc.getById(agentContext, connectionId);
|
|
122
|
-
const theirDid = conn?.theirDid;
|
|
123
|
-
const myDid = conn?.did || conn?.myDid;
|
|
124
|
-
if (theirDid) {
|
|
125
|
-
const holder = participants.holder || {};
|
|
126
|
-
if (!holder.did)
|
|
127
|
-
holder.did = theirDid;
|
|
128
|
-
participants.holder = holder;
|
|
129
|
-
}
|
|
130
|
-
if (myDid) {
|
|
131
|
-
const issuer = participants.issuer || {};
|
|
132
|
-
if (!issuer.did)
|
|
133
|
-
issuer.did = myDid;
|
|
134
|
-
participants.issuer = issuer;
|
|
135
|
-
}
|
|
136
|
-
}
|
|
137
|
-
}
|
|
138
|
-
catch {
|
|
139
|
-
// best effort only
|
|
140
|
-
}
|
|
141
|
-
const instanceId = opts.instance_id || this.uuid();
|
|
142
|
-
const section = (0, types_1.findSectionForState)(tpl, startState);
|
|
143
|
-
const rec = new WorkflowInstanceRecord_1.WorkflowInstanceRecord({
|
|
144
|
-
instanceId,
|
|
145
|
-
templateId: tpl.template_id,
|
|
146
|
-
templateVersion: tpl.version,
|
|
147
|
-
connectionId,
|
|
148
|
-
participants,
|
|
149
|
-
state: startState,
|
|
150
|
-
section,
|
|
151
|
-
context: { ...(opts.context || {}) },
|
|
152
|
-
artifacts: {},
|
|
153
|
-
status: 'active',
|
|
154
|
-
history: [],
|
|
155
|
-
multiplicityKeyValue,
|
|
156
|
-
idempotencyKeys: [],
|
|
157
|
-
});
|
|
158
|
-
await this.instanceRepo.save(agentContext, rec);
|
|
159
|
-
// Emit state changed event for initial creation
|
|
160
|
-
try {
|
|
161
|
-
this.eventEmitter?.emit(agentContext, {
|
|
162
|
-
type: WorkflowEvents_1.WorkflowEventTypes.WorkflowInstanceStateChanged,
|
|
163
|
-
payload: {
|
|
164
|
-
instanceRecord: rec,
|
|
165
|
-
previousState: null,
|
|
166
|
-
newState: rec.state,
|
|
167
|
-
event: 'start',
|
|
168
|
-
actionKey: undefined,
|
|
169
|
-
msgId: undefined,
|
|
170
|
-
},
|
|
171
|
-
});
|
|
172
|
-
}
|
|
173
|
-
catch (_e) {
|
|
174
|
-
void 0;
|
|
175
|
-
}
|
|
176
|
-
return rec;
|
|
177
|
-
}
|
|
178
|
-
async advance(agentContext, opts, instanceRecord) {
|
|
179
|
-
let inst;
|
|
180
|
-
if (instanceRecord) {
|
|
181
|
-
inst = instanceRecord;
|
|
182
|
-
}
|
|
183
|
-
else {
|
|
184
|
-
try {
|
|
185
|
-
inst = await this.instanceRepo.getById(agentContext, opts.instance_id);
|
|
186
|
-
}
|
|
187
|
-
catch {
|
|
188
|
-
const found = await this.instanceRepo.getByInstanceId(agentContext, opts.instance_id);
|
|
189
|
-
if (!found)
|
|
190
|
-
throw this.problem('invalid_event', 'instance not found');
|
|
191
|
-
inst = found;
|
|
192
|
-
}
|
|
193
|
-
}
|
|
194
|
-
const tplRec = await this.templateRepo.findByTemplateIdAndVersion(agentContext, inst.templateId, inst.templateVersion);
|
|
195
|
-
if (!tplRec)
|
|
196
|
-
throw this.problem('invalid_template', 'template not found for instance');
|
|
197
|
-
const tpl = tplRec.template;
|
|
198
|
-
// lifecycle status gating
|
|
199
|
-
if (inst.status === 'paused')
|
|
200
|
-
throw this.problem('forbidden', 'instance is paused');
|
|
201
|
-
if (inst.status === 'canceled')
|
|
202
|
-
throw this.problem('forbidden', 'instance is canceled');
|
|
203
|
-
if (inst.status === 'completed')
|
|
204
|
-
throw this.problem('invalid_event', 'instance already completed');
|
|
205
|
-
// idempotency
|
|
206
|
-
if (opts.idempotency_key && inst.idempotencyKeys?.includes(opts.idempotency_key)) {
|
|
207
|
-
const prior = inst.idempotency?.find?.((i) => i.key === opts.idempotency_key);
|
|
208
|
-
if (prior && prior.event !== opts.event)
|
|
209
|
-
throw this.problem('idempotency_conflict', 'same key, different event');
|
|
210
|
-
return inst;
|
|
211
|
-
}
|
|
212
|
-
const candidates = (0, types_1.transitionsFromState)(tpl, inst.state).filter((t) => t.on === opts.event);
|
|
213
|
-
if (!candidates.length)
|
|
214
|
-
throw this.problem('invalid_event', `no transition for event ${opts.event} from ${inst.state}`);
|
|
215
|
-
const env = GuardEvaluator_1.GuardEvaluator.envFromInstance(this.toInstanceData(inst));
|
|
216
|
-
const enabled = candidates.filter((t) => GuardEvaluator_1.GuardEvaluator.evalGuard(t.guard, env));
|
|
217
|
-
if (!enabled.length)
|
|
218
|
-
throw this.problem('guard_failed', 'guard evaluated false');
|
|
219
|
-
const t = enabled[0];
|
|
220
|
-
let artifactsDelta = {};
|
|
221
|
-
let messageId;
|
|
222
|
-
if (t.action) {
|
|
223
|
-
const def = tpl.actions.find((a) => a.key === t.action);
|
|
224
|
-
if (!def)
|
|
225
|
-
throw this.problem('invalid_template', `action not defined: ${t.action}`);
|
|
226
|
-
const handler = this.actions.get(def.typeURI);
|
|
227
|
-
if (!handler)
|
|
228
|
-
throw this.problem('action_error', `no handler for type ${def.typeURI}`);
|
|
229
|
-
const exec = async () => handler.execute({
|
|
230
|
-
agentContext,
|
|
231
|
-
template: tpl,
|
|
232
|
-
instance: this.toInstanceData(inst),
|
|
233
|
-
action: def,
|
|
234
|
-
input: opts.input,
|
|
235
|
-
});
|
|
236
|
-
const timeoutMs = this.config.actionTimeoutMs ?? 15000;
|
|
237
|
-
const race = Promise.race([
|
|
238
|
-
exec(),
|
|
239
|
-
new Promise((_, rej) => setTimeout(() => rej(new Error('action timeout')), timeoutMs)),
|
|
240
|
-
]);
|
|
241
|
-
let result;
|
|
242
|
-
try {
|
|
243
|
-
result = (await race);
|
|
244
|
-
}
|
|
245
|
-
catch (e) {
|
|
246
|
-
throw Object.assign(new Error(e.message || 'action timeout'), { code: 'action_error' });
|
|
247
|
-
}
|
|
248
|
-
artifactsDelta = result?.artifacts || {};
|
|
249
|
-
// local state:set may be applied directly by handler, but ensure we persist
|
|
250
|
-
if (result?.contextMerge)
|
|
251
|
-
inst.context = result.contextMerge;
|
|
252
|
-
if (result?.messageId)
|
|
253
|
-
messageId = result.messageId;
|
|
254
|
-
}
|
|
255
|
-
// Concurrency check: re-read and ensure state didn't change
|
|
256
|
-
const fromState = inst.state;
|
|
257
|
-
try {
|
|
258
|
-
const fresh = await this.instanceRepo.getById(agentContext, inst.id);
|
|
259
|
-
if (fresh.state !== fromState)
|
|
260
|
-
throw this.problem('state_conflict', 'state changed concurrently');
|
|
261
|
-
}
|
|
262
|
-
catch (_e) {
|
|
263
|
-
// ignore if repository throws
|
|
264
|
-
void 0;
|
|
265
|
-
}
|
|
266
|
-
// persist atomically (optimistic)
|
|
267
|
-
const prevState = inst.state;
|
|
268
|
-
inst.history.push({
|
|
269
|
-
ts: new Date().toISOString(),
|
|
270
|
-
event: opts.event,
|
|
271
|
-
from: inst.state,
|
|
272
|
-
to: t.to,
|
|
273
|
-
actionKey: t.action,
|
|
274
|
-
msg_id: messageId,
|
|
275
|
-
});
|
|
276
|
-
inst.state = t.to;
|
|
277
|
-
inst.section = (0, types_1.findSectionForState)(tpl, t.to);
|
|
278
|
-
inst.artifacts = { ...inst.artifacts, ...artifactsDelta };
|
|
279
|
-
if (opts.idempotency_key) {
|
|
280
|
-
inst.idempotencyKeys = [...(inst.idempotencyKeys || []), opts.idempotency_key];
|
|
281
|
-
inst.idempotency = [
|
|
282
|
-
...(inst.idempotency || []),
|
|
283
|
-
{ key: opts.idempotency_key, event: opts.event, to: t.to, actionKey: t.action },
|
|
284
|
-
];
|
|
285
|
-
// Trim idempotency history to configured limit
|
|
286
|
-
const limit = Math.max(1, this.config.idempotencyHistoryLimit ?? 100);
|
|
287
|
-
if ((inst.idempotencyKeys?.length || 0) > limit) {
|
|
288
|
-
inst.idempotencyKeys = inst.idempotencyKeys.slice(-limit);
|
|
289
|
-
}
|
|
290
|
-
if ((inst.idempotency?.length || 0) > limit) {
|
|
291
|
-
inst.idempotency = inst.idempotency.slice(-limit);
|
|
292
|
-
}
|
|
293
|
-
}
|
|
294
|
-
let reachedFinal = false;
|
|
295
|
-
try {
|
|
296
|
-
const toDef = tpl.states.find((s) => s.name === t.to);
|
|
297
|
-
if (toDef?.type === 'final') {
|
|
298
|
-
inst.status = 'completed';
|
|
299
|
-
reachedFinal = true;
|
|
300
|
-
}
|
|
301
|
-
}
|
|
302
|
-
catch (_e) {
|
|
303
|
-
void 0;
|
|
304
|
-
}
|
|
305
|
-
await this.instanceRepo.update(agentContext, inst);
|
|
306
|
-
// Emit state-changed event
|
|
307
|
-
try {
|
|
308
|
-
this.eventEmitter?.emit(agentContext, {
|
|
309
|
-
type: WorkflowEvents_1.WorkflowEventTypes.WorkflowInstanceStateChanged,
|
|
310
|
-
payload: {
|
|
311
|
-
instanceRecord: inst,
|
|
312
|
-
previousState: prevState,
|
|
313
|
-
newState: inst.state,
|
|
314
|
-
event: opts.event,
|
|
315
|
-
actionKey: t.action,
|
|
316
|
-
msgId: messageId,
|
|
317
|
-
},
|
|
318
|
-
});
|
|
319
|
-
}
|
|
320
|
-
catch (_e) {
|
|
321
|
-
void 0;
|
|
322
|
-
}
|
|
323
|
-
// Emit status-changed & completed, and send Complete message if final
|
|
324
|
-
if (reachedFinal) {
|
|
325
|
-
try {
|
|
326
|
-
this.eventEmitter?.emit(agentContext, {
|
|
327
|
-
type: WorkflowEvents_1.WorkflowEventTypes.WorkflowInstanceStatusChanged,
|
|
328
|
-
payload: { instanceRecord: inst, previousStatus: 'active', newStatus: 'completed' },
|
|
329
|
-
});
|
|
330
|
-
}
|
|
331
|
-
catch (_e) {
|
|
332
|
-
void 0;
|
|
333
|
-
}
|
|
334
|
-
try {
|
|
335
|
-
this.eventEmitter?.emit(agentContext, {
|
|
336
|
-
type: WorkflowEvents_1.WorkflowEventTypes.WorkflowInstanceCompleted,
|
|
337
|
-
payload: { instanceRecord: inst, state: inst.state, section: inst.section },
|
|
338
|
-
});
|
|
339
|
-
}
|
|
340
|
-
catch (_e) {
|
|
341
|
-
void 0;
|
|
342
|
-
}
|
|
343
|
-
await this.sendCompleteMessage(agentContext, inst);
|
|
344
|
-
}
|
|
345
|
-
return inst;
|
|
346
|
-
}
|
|
347
|
-
async status(agentContext, opts, instanceRecord) {
|
|
348
|
-
let inst;
|
|
349
|
-
if (instanceRecord) {
|
|
350
|
-
inst = instanceRecord;
|
|
351
|
-
}
|
|
352
|
-
else {
|
|
353
|
-
try {
|
|
354
|
-
inst = await this.instanceRepo.getById(agentContext, opts.instance_id);
|
|
355
|
-
}
|
|
356
|
-
catch {
|
|
357
|
-
const found = await this.instanceRepo.getByInstanceId(agentContext, opts.instance_id);
|
|
358
|
-
if (!found)
|
|
359
|
-
throw this.problem('invalid_event', 'instance not found');
|
|
360
|
-
inst = found;
|
|
361
|
-
}
|
|
362
|
-
}
|
|
363
|
-
const tplRec = await this.templateRepo.findByTemplateIdAndVersion(agentContext, inst.templateId, inst.templateVersion);
|
|
364
|
-
if (!tplRec)
|
|
365
|
-
throw this.problem('invalid_template', 'template not found for instance');
|
|
366
|
-
const tpl = tplRec.template;
|
|
367
|
-
const instData = this.toInstanceData(inst);
|
|
368
|
-
const env = GuardEvaluator_1.GuardEvaluator.envFromInstance(instData);
|
|
369
|
-
const allowed = (0, types_1.transitionsFromState)(tpl, inst.state)
|
|
370
|
-
.filter((t) => GuardEvaluator_1.GuardEvaluator.evalGuard(t.guard, env))
|
|
371
|
-
.map((t) => t.on);
|
|
372
|
-
const includeActions = opts.include_actions ?? true;
|
|
373
|
-
const includeUi = opts.include_ui ?? true;
|
|
374
|
-
// Build full env with viewer info for UI filtering
|
|
375
|
-
const uiEnv = {
|
|
376
|
-
context: instData.context || {},
|
|
377
|
-
participants: instData.participants || {},
|
|
378
|
-
artifacts: instData.artifacts || {},
|
|
379
|
-
viewer: opts.viewer,
|
|
380
|
-
};
|
|
381
|
-
// Select + filter UI items
|
|
382
|
-
// Defer import to avoid cycle risk
|
|
383
|
-
// eslint-disable-next-line @typescript-eslint/no-var-requires
|
|
384
|
-
const Ui = require('../ui/UiFilter');
|
|
385
|
-
// Derive viewer profile from instance participants per spec
|
|
386
|
-
let derivedProfile = opts.ui_profile;
|
|
387
|
-
try {
|
|
388
|
-
// 1) If viewer role/participantKey provided, honor it
|
|
389
|
-
const viewerRole = opts.viewer?.role;
|
|
390
|
-
const viewerKey = opts.viewer?.participantKey;
|
|
391
|
-
const viewerDid = opts.viewer?.did;
|
|
392
|
-
const mapKeyToProfile = (k) => {
|
|
393
|
-
if (!k)
|
|
394
|
-
return undefined;
|
|
395
|
-
const key = k.toLowerCase();
|
|
396
|
-
if (key === 'sender' || key === 'issuer')
|
|
397
|
-
return 'sender';
|
|
398
|
-
if (key === 'receiver' || key === 'holder')
|
|
399
|
-
return 'receiver';
|
|
400
|
-
return undefined;
|
|
401
|
-
};
|
|
402
|
-
if (!derivedProfile)
|
|
403
|
-
derivedProfile = mapKeyToProfile(viewerRole) || mapKeyToProfile(viewerKey);
|
|
404
|
-
// 1b) If viewer DID provided, map to participant key by DID equality
|
|
405
|
-
if (!derivedProfile && viewerDid && instData?.participants && typeof instData.participants === 'object') {
|
|
406
|
-
for (const [pKey, pVal] of Object.entries(instData.participants)) {
|
|
407
|
-
const did = pVal?.did;
|
|
408
|
-
if (did && did === viewerDid) {
|
|
409
|
-
derivedProfile = mapKeyToProfile(pKey);
|
|
410
|
-
if (derivedProfile)
|
|
411
|
-
break;
|
|
412
|
-
}
|
|
413
|
-
}
|
|
414
|
-
}
|
|
415
|
-
// 2) If still not set, try to match current tenant's DID against instance participants
|
|
416
|
-
if (!derivedProfile) {
|
|
417
|
-
// Obtain my DID for the instance's connection, if available
|
|
418
|
-
let myDid;
|
|
419
|
-
if (instData?.connection_id) {
|
|
420
|
-
try {
|
|
421
|
-
const connSvc = agentContext.dependencyManager.resolve(core_1.ConnectionService);
|
|
422
|
-
const conn = await connSvc.getById(agentContext, instData.connection_id);
|
|
423
|
-
myDid = conn?.did || conn?.myDid;
|
|
424
|
-
}
|
|
425
|
-
catch { }
|
|
426
|
-
}
|
|
427
|
-
if (myDid && instData?.participants && typeof instData.participants === 'object') {
|
|
428
|
-
for (const [pKey, pVal] of Object.entries(instData.participants)) {
|
|
429
|
-
const did = pVal?.did;
|
|
430
|
-
if (did && did === myDid) {
|
|
431
|
-
derivedProfile = mapKeyToProfile(pKey);
|
|
432
|
-
if (derivedProfile)
|
|
433
|
-
break;
|
|
434
|
-
}
|
|
435
|
-
}
|
|
436
|
-
}
|
|
437
|
-
}
|
|
438
|
-
}
|
|
439
|
-
catch { }
|
|
440
|
-
const selected = Ui.selectUi(tpl?.display_hints, inst.state, derivedProfile);
|
|
441
|
-
const filtered = Ui.filterAndBindUi(selected, uiEnv, opts.viewer, derivedProfile);
|
|
442
|
-
const menu = includeActions
|
|
443
|
-
? filtered
|
|
444
|
-
.filter((i) => i?.type === 'button' || i?.type === 'submit-button')
|
|
445
|
-
.map((i) => ({ label: i?.label, event: i?.event }))
|
|
446
|
-
: [];
|
|
447
|
-
const assets = Ui.collectAssets(filtered, tpl?.display_hints?.assets);
|
|
448
|
-
const ui = includeUi ? filtered : undefined;
|
|
449
|
-
let connection;
|
|
450
|
-
if (inst.connectionId) {
|
|
451
|
-
try {
|
|
452
|
-
const connSvc = agentContext.dependencyManager.resolve(core_1.ConnectionService);
|
|
453
|
-
const conn = await connSvc.getById(agentContext, inst.connectionId);
|
|
454
|
-
connection = {
|
|
455
|
-
id: conn?.id,
|
|
456
|
-
myDid: conn?.did || conn?.myDid,
|
|
457
|
-
theirDid: conn?.theirDid,
|
|
458
|
-
};
|
|
459
|
-
}
|
|
460
|
-
catch {
|
|
461
|
-
// ignore if not found
|
|
462
|
-
}
|
|
463
|
-
}
|
|
464
|
-
return {
|
|
465
|
-
instance_id: inst.instanceId,
|
|
466
|
-
template_id: inst.templateId,
|
|
467
|
-
template_version: inst.templateVersion,
|
|
468
|
-
connection_id: inst.connectionId,
|
|
469
|
-
connection,
|
|
470
|
-
participants: inst.participants,
|
|
471
|
-
context: inst.context,
|
|
472
|
-
status: inst.status,
|
|
473
|
-
createdAt: inst.createdAt,
|
|
474
|
-
updatedAt: inst?.updatedAt,
|
|
475
|
-
state: inst.state,
|
|
476
|
-
section: inst.section,
|
|
477
|
-
allowed_events: allowed,
|
|
478
|
-
action_menu: menu,
|
|
479
|
-
artifacts: inst.artifacts,
|
|
480
|
-
...(includeUi ? { ui } : {}),
|
|
481
|
-
...(derivedProfile ? { ui_profile: derivedProfile } : {}),
|
|
482
|
-
...(assets ? { assets } : {}),
|
|
483
|
-
};
|
|
484
|
-
}
|
|
485
|
-
async pause(agentContext, opts, instanceRecord) {
|
|
486
|
-
const inst = instanceRecord || (await this.getInstanceByIdOrTag(agentContext, opts.instance_id));
|
|
487
|
-
const prev = inst.status;
|
|
488
|
-
inst.status = 'paused';
|
|
489
|
-
await this.instanceRepo.update(agentContext, inst);
|
|
490
|
-
try {
|
|
491
|
-
this.eventEmitter?.emit(agentContext, {
|
|
492
|
-
type: WorkflowEvents_1.WorkflowEventTypes.WorkflowInstanceStatusChanged,
|
|
493
|
-
payload: { instanceRecord: inst, previousStatus: prev, newStatus: inst.status, reason: opts.reason },
|
|
494
|
-
});
|
|
495
|
-
}
|
|
496
|
-
catch (_e) {
|
|
497
|
-
void 0;
|
|
498
|
-
}
|
|
499
|
-
return inst;
|
|
500
|
-
}
|
|
501
|
-
async resume(agentContext, opts, instanceRecord) {
|
|
502
|
-
const inst = instanceRecord || (await this.getInstanceByIdOrTag(agentContext, opts.instance_id));
|
|
503
|
-
const prev = inst.status;
|
|
504
|
-
inst.status = 'active';
|
|
505
|
-
await this.instanceRepo.update(agentContext, inst);
|
|
506
|
-
try {
|
|
507
|
-
this.eventEmitter?.emit(agentContext, {
|
|
508
|
-
type: WorkflowEvents_1.WorkflowEventTypes.WorkflowInstanceStatusChanged,
|
|
509
|
-
payload: { instanceRecord: inst, previousStatus: prev, newStatus: inst.status, reason: opts.reason },
|
|
510
|
-
});
|
|
511
|
-
}
|
|
512
|
-
catch (_e) {
|
|
513
|
-
void 0;
|
|
514
|
-
}
|
|
515
|
-
return inst;
|
|
516
|
-
}
|
|
517
|
-
async cancel(agentContext, opts, instanceRecord) {
|
|
518
|
-
const inst = instanceRecord || (await this.getInstanceByIdOrTag(agentContext, opts.instance_id));
|
|
519
|
-
const prev = inst.status;
|
|
520
|
-
inst.status = 'canceled';
|
|
521
|
-
await this.instanceRepo.update(agentContext, inst);
|
|
522
|
-
try {
|
|
523
|
-
this.eventEmitter?.emit(agentContext, {
|
|
524
|
-
type: WorkflowEvents_1.WorkflowEventTypes.WorkflowInstanceStatusChanged,
|
|
525
|
-
payload: { instanceRecord: inst, previousStatus: prev, newStatus: inst.status, reason: opts.reason },
|
|
526
|
-
});
|
|
527
|
-
}
|
|
528
|
-
catch (_e) {
|
|
529
|
-
void 0;
|
|
530
|
-
}
|
|
531
|
-
return inst;
|
|
532
|
-
}
|
|
533
|
-
async complete(agentContext, opts, instanceRecord) {
|
|
534
|
-
const inst = instanceRecord || (await this.getInstanceByIdOrTag(agentContext, opts.instance_id));
|
|
535
|
-
// Only allow completion when FSM is in a final state
|
|
536
|
-
const tplRec = await this.templateRepo.findByTemplateIdAndVersion(agentContext, inst.templateId, inst.templateVersion);
|
|
537
|
-
if (!tplRec)
|
|
538
|
-
throw this.problem('invalid_template', 'template not found for instance');
|
|
539
|
-
const toDef = tplRec.template.states.find((s) => s.name === inst.state);
|
|
540
|
-
if (toDef?.type !== 'final')
|
|
541
|
-
throw this.problem('forbidden', 'cannot complete: state is not final');
|
|
542
|
-
const prev = inst.status;
|
|
543
|
-
inst.status = 'completed';
|
|
544
|
-
await this.instanceRepo.update(agentContext, inst);
|
|
545
|
-
try {
|
|
546
|
-
this.eventEmitter?.emit(agentContext, {
|
|
547
|
-
type: WorkflowEvents_1.WorkflowEventTypes.WorkflowInstanceStatusChanged,
|
|
548
|
-
payload: { instanceRecord: inst, previousStatus: prev, newStatus: inst.status, reason: opts.reason },
|
|
549
|
-
});
|
|
550
|
-
this.eventEmitter?.emit(agentContext, {
|
|
551
|
-
type: WorkflowEvents_1.WorkflowEventTypes.WorkflowInstanceCompleted,
|
|
552
|
-
payload: { instanceRecord: inst, state: inst.state, section: inst.section },
|
|
553
|
-
});
|
|
554
|
-
}
|
|
555
|
-
catch (_e) {
|
|
556
|
-
void 0;
|
|
557
|
-
}
|
|
558
|
-
return inst;
|
|
559
|
-
}
|
|
560
|
-
async autoAdvanceByConnection(agentContext, connectionId, event) {
|
|
561
|
-
const inst = await this.instanceRepo.findLatestByConnection(agentContext, connectionId);
|
|
562
|
-
if (!inst)
|
|
563
|
-
return;
|
|
564
|
-
try {
|
|
565
|
-
await this.advance(agentContext, {
|
|
566
|
-
instance_id: inst.instanceId,
|
|
567
|
-
event,
|
|
568
|
-
idempotency_key: `auto:${event}:${inst.instanceId}`,
|
|
569
|
-
});
|
|
570
|
-
}
|
|
571
|
-
catch (e) {
|
|
572
|
-
// swallow, log at debug
|
|
573
|
-
this.agentConfig.logger.debug(`Workflow autoAdvance error: ${e.message}`);
|
|
574
|
-
}
|
|
575
|
-
}
|
|
576
|
-
evalMultiplicity(expr, context) {
|
|
577
|
-
try {
|
|
578
|
-
const env = { context, participants: {}, artifacts: {} };
|
|
579
|
-
const val = GuardEvaluator_1.GuardEvaluator.evalValue(expr, env);
|
|
580
|
-
return val != null ? String(val) : '';
|
|
581
|
-
}
|
|
582
|
-
catch {
|
|
583
|
-
return '';
|
|
584
|
-
}
|
|
585
|
-
}
|
|
586
|
-
toInstanceData(rec) {
|
|
587
|
-
return {
|
|
588
|
-
instance_id: rec.instanceId,
|
|
589
|
-
template_id: rec.templateId,
|
|
590
|
-
template_version: rec.templateVersion,
|
|
591
|
-
connection_id: rec.connectionId,
|
|
592
|
-
participants: rec.participants,
|
|
593
|
-
state: rec.state,
|
|
594
|
-
section: rec.section,
|
|
595
|
-
context: rec.context,
|
|
596
|
-
artifacts: rec.artifacts,
|
|
597
|
-
status: rec.status,
|
|
598
|
-
history: rec.history,
|
|
599
|
-
multiplicityKeyValue: rec.multiplicityKeyValue,
|
|
600
|
-
idempotencyKeys: rec.idempotencyKeys,
|
|
601
|
-
};
|
|
602
|
-
}
|
|
603
|
-
problem(code, comment) {
|
|
604
|
-
const err = new Error(comment);
|
|
605
|
-
err.code = code;
|
|
606
|
-
return err;
|
|
607
|
-
}
|
|
608
|
-
async getInstanceByIdOrTag(agentContext, instanceId) {
|
|
609
|
-
try {
|
|
610
|
-
return await this.instanceRepo.getById(agentContext, instanceId);
|
|
611
|
-
}
|
|
612
|
-
catch {
|
|
613
|
-
const found = await this.instanceRepo.getByInstanceId(agentContext, instanceId);
|
|
614
|
-
if (!found)
|
|
615
|
-
throw this.problem('invalid_event', 'instance not found');
|
|
616
|
-
return found;
|
|
617
|
-
}
|
|
618
|
-
}
|
|
619
|
-
uuid() {
|
|
620
|
-
// light uuid
|
|
621
|
-
return `wf_${Math.random().toString(36).slice(2)}${Date.now().toString(36)}`;
|
|
622
|
-
}
|
|
623
|
-
validateTemplate(t) {
|
|
624
|
-
const fail = (msg) => {
|
|
625
|
-
throw this.problem('invalid_template', msg);
|
|
626
|
-
};
|
|
627
|
-
if (!t.template_id || !t.version || !t.title)
|
|
628
|
-
fail('missing required fields');
|
|
629
|
-
if (!Array.isArray(t.states) || !t.states.length)
|
|
630
|
-
fail('states required');
|
|
631
|
-
if (!Array.isArray(t.transitions))
|
|
632
|
-
fail('transitions required');
|
|
633
|
-
if (!Array.isArray(t.actions))
|
|
634
|
-
fail('actions required');
|
|
635
|
-
const stateNames = new Set(t.states.map((s) => s.name));
|
|
636
|
-
if (![...t.states].some((s) => s.type === 'start'))
|
|
637
|
-
fail('start state required');
|
|
638
|
-
for (const s of t.states) {
|
|
639
|
-
if (s.section && !t.sections?.some((sec) => sec.name === s.section))
|
|
640
|
-
fail(`state.section not found: ${s.section}`);
|
|
641
|
-
}
|
|
642
|
-
for (const tr of t.transitions) {
|
|
643
|
-
if (!stateNames.has(tr.from))
|
|
644
|
-
fail(`transition.from unknown: ${tr.from}`);
|
|
645
|
-
if (!stateNames.has(tr.to))
|
|
646
|
-
fail(`transition.to unknown: ${tr.to}`);
|
|
647
|
-
if (tr.action && !t.actions.some((a) => a.key === tr.action))
|
|
648
|
-
fail(`transition.action unknown: ${tr.action}`);
|
|
649
|
-
}
|
|
650
|
-
// profile_ref resolution
|
|
651
|
-
for (const a of t.actions) {
|
|
652
|
-
if ('profile_ref' in a && a.profile_ref) {
|
|
653
|
-
const pr = a.profile_ref;
|
|
654
|
-
if (pr.startsWith('cp.')) {
|
|
655
|
-
const key = pr.slice(3);
|
|
656
|
-
if (!t.catalog?.credential_profiles || !t.catalog.credential_profiles[key])
|
|
657
|
-
fail(`catalog.cp missing: ${key}`);
|
|
658
|
-
}
|
|
659
|
-
else if (pr.startsWith('pp.')) {
|
|
660
|
-
const key = pr.slice(3);
|
|
661
|
-
if (!t.catalog?.proof_profiles || !t.catalog.proof_profiles[key])
|
|
662
|
-
fail(`catalog.pp missing: ${key}`);
|
|
663
|
-
}
|
|
664
|
-
else
|
|
665
|
-
fail(`invalid profile_ref: ${pr}`);
|
|
666
|
-
}
|
|
667
|
-
}
|
|
668
|
-
}
|
|
669
|
-
async sendCompleteMessage(agentContext, inst) {
|
|
670
|
-
try {
|
|
671
|
-
if (!inst.connectionId)
|
|
672
|
-
return;
|
|
673
|
-
const connectionSvc = agentContext.dependencyManager.resolve(core_1.ConnectionService);
|
|
674
|
-
const messageSender = agentContext.dependencyManager.resolve(core_1.MessageSender);
|
|
675
|
-
const connection = await connectionSvc.getById(agentContext, inst.connectionId);
|
|
676
|
-
const msg = new CompleteMessage_1.CompleteMessage({
|
|
677
|
-
thid: inst.instanceId,
|
|
678
|
-
body: { instance_id: inst.instanceId, reason: 'state_final' },
|
|
679
|
-
});
|
|
680
|
-
try {
|
|
681
|
-
// Request return-route so HTTP outbound doesn't throw on 15s timeout
|
|
682
|
-
msg.setReturnRouting(core_1.ReturnRouteTypes.thread, inst.instanceId);
|
|
683
|
-
}
|
|
684
|
-
catch (_e) {
|
|
685
|
-
void 0;
|
|
686
|
-
}
|
|
687
|
-
const outbound = new core_1.OutboundMessageContext(msg, { agentContext, connection });
|
|
688
|
-
await messageSender.sendMessage(outbound);
|
|
689
|
-
}
|
|
690
|
-
catch (e) {
|
|
691
|
-
this.agentConfig.logger.debug(`Workflow complete notify error: ${e.message}`);
|
|
692
|
-
}
|
|
693
|
-
}
|
|
694
|
-
};
|
|
695
|
-
exports.WorkflowService = WorkflowService;
|
|
696
|
-
exports.WorkflowService = WorkflowService = __decorate([
|
|
697
|
-
(0, core_1.injectable)(),
|
|
698
|
-
__metadata("design:paramtypes", [WorkflowTemplateRepository_1.WorkflowTemplateRepository,
|
|
699
|
-
WorkflowInstanceRepository_1.WorkflowInstanceRepository,
|
|
700
|
-
WorkflowModuleConfig_1.WorkflowModuleConfig,
|
|
701
|
-
core_1.AgentConfig,
|
|
702
|
-
core_1.EventEmitter])
|
|
703
|
-
], WorkflowService);
|
|
704
|
-
//# sourceMappingURL=WorkflowService.js.map
|