@sphereon/ssi-sdk.xstate-machine-persistence 0.32.1-next.54 → 0.33.1-feature.vcdm2.4
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/dist/agent/MachineStatePersistence.js +130 -151
- package/dist/agent/MachineStatePersistence.js.map +1 -1
- package/dist/functions/index.js +3 -19
- package/dist/functions/index.js.map +1 -1
- package/dist/functions/machineRegistration.js +64 -81
- package/dist/functions/machineRegistration.js.map +1 -1
- package/dist/functions/stateEventEmitter.js +3 -10
- package/dist/functions/stateEventEmitter.js.map +1 -1
- package/dist/functions/stateMapper.js +19 -24
- package/dist/functions/stateMapper.js.map +1 -1
- package/dist/index.js +4 -21
- package/dist/index.js.map +1 -1
- package/dist/tsdoc-metadata.json +1 -1
- package/dist/types/IMachineStatePersistence.js +1 -2
- package/dist/types/index.js +2 -18
- package/dist/types/index.js.map +1 -1
- package/dist/types/types.js +2 -5
- package/dist/types/types.js.map +1 -1
- package/package.json +6 -6
|
@@ -1,23 +1,8 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
7
|
-
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
8
|
-
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
9
|
-
});
|
|
10
|
-
};
|
|
11
|
-
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
12
|
-
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
13
|
-
};
|
|
14
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
15
|
-
exports.MachineStatePersistence = void 0;
|
|
16
|
-
const debug_1 = __importDefault(require("debug"));
|
|
17
|
-
const uuid_1 = require("uuid");
|
|
18
|
-
const functions_1 = require("../functions");
|
|
19
|
-
const index_1 = require("../index");
|
|
20
|
-
const debug = (0, debug_1.default)('sphereon:ssi-sdk:machine-state:xstate-persistence');
|
|
1
|
+
import Debug from 'debug';
|
|
2
|
+
import { v4 as uuidv4 } from 'uuid';
|
|
3
|
+
import { deserializeMachineState, machineStateToMachineInit, machineStateToStoreInfo, serializeMachineState } from '../functions';
|
|
4
|
+
import { MachineStatePersistEventType, schema, } from '../index';
|
|
5
|
+
const debug = Debug('sphereon:ssi-sdk:machine-state:xstate-persistence');
|
|
21
6
|
/**
|
|
22
7
|
* This class implements the IMachineStatePersistence interface using a datastore.
|
|
23
8
|
*
|
|
@@ -25,7 +10,11 @@ const debug = (0, debug_1.default)('sphereon:ssi-sdk:machine-state:xstate-persis
|
|
|
25
10
|
*
|
|
26
11
|
* @beta This API may change without a BREAKING CHANGE notice.
|
|
27
12
|
*/
|
|
28
|
-
class MachineStatePersistence {
|
|
13
|
+
export class MachineStatePersistence {
|
|
14
|
+
schema = schema.IMachineStatePersistence;
|
|
15
|
+
methods;
|
|
16
|
+
eventTypes;
|
|
17
|
+
_store;
|
|
29
18
|
get store() {
|
|
30
19
|
if (!this._store) {
|
|
31
20
|
throw Error('No store available in options');
|
|
@@ -33,7 +22,6 @@ class MachineStatePersistence {
|
|
|
33
22
|
return this._store;
|
|
34
23
|
}
|
|
35
24
|
constructor(opts) {
|
|
36
|
-
this.schema = index_1.schema.IMachineStatePersistence;
|
|
37
25
|
const { store, eventTypes, isRESTClient } = opts;
|
|
38
26
|
this.eventTypes = eventTypes;
|
|
39
27
|
this.methods = {
|
|
@@ -54,144 +42,135 @@ class MachineStatePersistence {
|
|
|
54
42
|
throw Error('No store available in options');
|
|
55
43
|
}
|
|
56
44
|
}
|
|
57
|
-
onEvent(event, context) {
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
45
|
+
async onEvent(event, context) {
|
|
46
|
+
debug(`Received machine state persistence event '${event.type}' counter: ${event.data._eventCounter}}`);
|
|
47
|
+
if (!this.eventTypes.includes(event.type)) {
|
|
48
|
+
console.log(`event type ${event.type} not registered for agent. Registered: ${JSON.stringify(this.eventTypes)}`);
|
|
49
|
+
return;
|
|
50
|
+
}
|
|
51
|
+
// Below we are calling the context of the agent instead of this to make sure the REST client is called when configured
|
|
52
|
+
switch (event.type) {
|
|
53
|
+
case MachineStatePersistEventType.INIT:
|
|
54
|
+
await context.agent.machineStateInit({ ...event.data });
|
|
55
|
+
break;
|
|
56
|
+
case MachineStatePersistEventType.EVERY:
|
|
57
|
+
// We are keeping track of the update counter in the events, ensuring we do not process out of order
|
|
58
|
+
await context.agent.machineStatePersist({
|
|
59
|
+
...event.data,
|
|
60
|
+
cleanupOnFinalState: event.data.cleanupOnFinalState ?? event.data._cleanupOnFinalState,
|
|
61
|
+
updatedCount: event.data._eventCounter ?? event.data.updatedCount,
|
|
62
|
+
});
|
|
63
|
+
break;
|
|
64
|
+
default:
|
|
65
|
+
return Promise.reject(Error(`Event type ${event.type} not supported`));
|
|
66
|
+
}
|
|
78
67
|
}
|
|
79
|
-
machineStateInit(args, context) {
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
machineState
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
}
|
|
68
|
+
async machineStateInit(args, context) {
|
|
69
|
+
const { tenantId, machineName, expiresAt, customInstanceId, existingInstanceId, cleanupAllOtherInstances } = args;
|
|
70
|
+
debug(`machineStateInit for machine name ${machineName}, tenant ${tenantId}, custom instance ${customInstanceId}, existing id ${existingInstanceId}`);
|
|
71
|
+
if (customInstanceId && existingInstanceId) {
|
|
72
|
+
return Promise.reject(new Error(`Cannot have both a custom and existing instance id at the same time`));
|
|
73
|
+
}
|
|
74
|
+
if (cleanupAllOtherInstances) {
|
|
75
|
+
// First remove all states for this machine name and tenant that are in done state
|
|
76
|
+
await context.agent.machineStatesDeleteExpired({ machineName, tenantId, deleteDoneStates: true });
|
|
77
|
+
// Now cleanup all states for this machine name and tenant that are expired
|
|
78
|
+
await context.agent.machineStatesDeleteExpired({ machineName, tenantId, deleteDoneStates: false });
|
|
79
|
+
// Now remove all machines that are not equal to the existing instance id if provided, or all others if not provided
|
|
80
|
+
const activeMachineStates = (await context.agent.machineStatesFindActive({ machineName, tenantId })).filter((state) => !existingInstanceId || state.instanceId !== existingInstanceId);
|
|
81
|
+
await Promise.all(activeMachineStates.map((state) => context.agent.machineStateDelete({
|
|
82
|
+
instanceId: state.instanceId,
|
|
83
|
+
tenantId,
|
|
84
|
+
})));
|
|
85
|
+
}
|
|
86
|
+
let machineInit = undefined;
|
|
87
|
+
let machineState;
|
|
88
|
+
if (existingInstanceId) {
|
|
89
|
+
// A existing instanceId is provided. First lookup whether this id is persisted, if not an error is thrown
|
|
90
|
+
debug(`machineStateInit is using a previously persisted instance id (${existingInstanceId})`);
|
|
91
|
+
machineState = await context.agent.machineStateGet({ tenantId, instanceId: existingInstanceId });
|
|
92
|
+
machineInit = machineStateToMachineInit({
|
|
93
|
+
...machineState,
|
|
94
|
+
machineState: machineState,
|
|
95
|
+
stateType: 'existing',
|
|
96
|
+
}, { ...machineState, state: serializeMachineState(machineState.state) });
|
|
97
|
+
}
|
|
98
|
+
if (customInstanceId) {
|
|
99
|
+
// A custom instanceId is provided.
|
|
100
|
+
debug(`machineStateInit is using a custom instance id (${customInstanceId})`);
|
|
101
|
+
}
|
|
102
|
+
if (!machineInit) {
|
|
103
|
+
machineInit = {
|
|
104
|
+
machineName,
|
|
105
|
+
tenantId,
|
|
106
|
+
expiresAt,
|
|
107
|
+
instanceId: customInstanceId ?? uuidv4(),
|
|
108
|
+
createdAt: args.createdAt ?? new Date(),
|
|
109
|
+
stateType: 'new',
|
|
110
|
+
};
|
|
111
|
+
}
|
|
112
|
+
return machineInit;
|
|
123
113
|
}
|
|
124
|
-
machineStatePersist(args, context) {
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
storedState = storeInfoArgs;
|
|
137
|
-
}
|
|
138
|
-
else {
|
|
139
|
-
storedState = yield this.store.persistMachineState(storeInfoArgs);
|
|
140
|
-
}
|
|
141
|
-
const machineStateInfo = Object.assign(Object.assign({}, storedState), { state: (0, functions_1.deserializeMachineState)(storedState.state) });
|
|
142
|
-
debug(`machineStatePersist success for machine name ${machineName}, instance ${instanceId}, update count ${machineStateInfo.updatedCount}, tenant ${tenantId}, last event: ${machineStateInfo.latestEventType}, last state: ${machineStateInfo.latestStateName}`);
|
|
143
|
-
if (cleanupOnFinalState && machineStateInfo.state.done) {
|
|
144
|
-
debug(`reached final state for machine ${machineName} instance ${instanceId} and auto cleanup was enabled. Deleting machine state`);
|
|
145
|
-
yield context.agent.machineStateDelete(machineStateInfo);
|
|
146
|
-
}
|
|
147
|
-
return machineStateInfo;
|
|
114
|
+
async machineStatePersist(args, context) {
|
|
115
|
+
const { instanceId, tenantId, machineName, updatedCount } = args;
|
|
116
|
+
const cleanupOnFinalState = args.cleanupOnFinalState !== false;
|
|
117
|
+
debug(`machineStatePersist for machine name ${machineName}, updateCount: ${updatedCount}, instance ${instanceId} and tenant ${tenantId}...`);
|
|
118
|
+
try {
|
|
119
|
+
const queriedStates = await this.store.findMachineStates({ filter: [{ instanceId, tenantId }] });
|
|
120
|
+
const existingState = queriedStates.length === 1 ? queriedStates[0] : undefined;
|
|
121
|
+
const storeInfoArgs = machineStateToStoreInfo(args, existingState);
|
|
122
|
+
let storedState;
|
|
123
|
+
if (updatedCount !== undefined && updatedCount > 1 && storeInfoArgs.latestEventType === 'xstate.init') {
|
|
124
|
+
console.log(`Not persisting machine state for resumed init event for machine ${machineName}, tenant ${tenantId} and state with id ${instanceId}`);
|
|
125
|
+
storedState = storeInfoArgs;
|
|
148
126
|
}
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
return Promise.reject(error);
|
|
127
|
+
else {
|
|
128
|
+
storedState = await this.store.persistMachineState(storeInfoArgs);
|
|
152
129
|
}
|
|
153
|
-
|
|
130
|
+
const machineStateInfo = { ...storedState, state: deserializeMachineState(storedState.state) };
|
|
131
|
+
debug(`machineStatePersist success for machine name ${machineName}, instance ${instanceId}, update count ${machineStateInfo.updatedCount}, tenant ${tenantId}, last event: ${machineStateInfo.latestEventType}, last state: ${machineStateInfo.latestStateName}`);
|
|
132
|
+
if (cleanupOnFinalState && machineStateInfo.state.done) {
|
|
133
|
+
debug(`reached final state for machine ${machineName} instance ${instanceId} and auto cleanup was enabled. Deleting machine state`);
|
|
134
|
+
await context.agent.machineStateDelete(machineStateInfo);
|
|
135
|
+
}
|
|
136
|
+
return machineStateInfo;
|
|
137
|
+
}
|
|
138
|
+
catch (error) {
|
|
139
|
+
console.log(error);
|
|
140
|
+
return Promise.reject(error);
|
|
141
|
+
}
|
|
154
142
|
}
|
|
155
|
-
machineStatesFindActive(args) {
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
return Object.assign(Object.assign({}, storedState), { state: (0, functions_1.deserializeMachineState)(storedState.state) });
|
|
162
|
-
});
|
|
163
|
-
debug(`machineStateFindActive returned ${machineStateInfos.length} results for machine name ${machineName} and tenant ${tenantId}`);
|
|
164
|
-
return machineStateInfos;
|
|
143
|
+
async machineStatesFindActive(args) {
|
|
144
|
+
const { machineName, tenantId } = args;
|
|
145
|
+
debug(`machineStateFindActive for machine name ${machineName} and tenant ${tenantId}...`);
|
|
146
|
+
const storedStates = await this.store.findActiveMachineStates(args);
|
|
147
|
+
const machineStateInfos = storedStates.map((storedState) => {
|
|
148
|
+
return { ...storedState, state: deserializeMachineState(storedState.state) };
|
|
165
149
|
});
|
|
150
|
+
debug(`machineStateFindActive returned ${machineStateInfos.length} results for machine name ${machineName} and tenant ${tenantId}`);
|
|
151
|
+
return machineStateInfos;
|
|
166
152
|
}
|
|
167
|
-
machineStatesDeleteExpired(args) {
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
return deleteResult;
|
|
174
|
-
});
|
|
153
|
+
async machineStatesDeleteExpired(args) {
|
|
154
|
+
const { machineName, tenantId } = args;
|
|
155
|
+
debug(`machineStatesDeleteExpired for machine name ${machineName} and tenant ${tenantId}...`);
|
|
156
|
+
const deleteResult = await this.store.deleteExpiredMachineStates(args);
|
|
157
|
+
debug(`machineStatesDeleteExpired result for machine name ${machineName} and tenant ${tenantId}: ${deleteResult}`);
|
|
158
|
+
return deleteResult;
|
|
175
159
|
}
|
|
176
|
-
machineStateGet(args, context) {
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
return machineInfo;
|
|
184
|
-
});
|
|
160
|
+
async machineStateGet(args, context) {
|
|
161
|
+
const { instanceId, tenantId } = args;
|
|
162
|
+
debug(`machineStateGet for machine instance ${instanceId} and tenant ${tenantId}...`);
|
|
163
|
+
const storedState = await this.store.getMachineState(args);
|
|
164
|
+
const machineInfo = { ...storedState, state: deserializeMachineState(storedState.state) };
|
|
165
|
+
debug(`machineStateGet success for machine instance ${instanceId} and tenant ${tenantId}`);
|
|
166
|
+
return machineInfo;
|
|
185
167
|
}
|
|
186
|
-
machineStateDelete(args, context) {
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
return deleteResult;
|
|
193
|
-
});
|
|
168
|
+
async machineStateDelete(args, context) {
|
|
169
|
+
const { instanceId, tenantId } = args;
|
|
170
|
+
debug(`machineStateDelete for machine instance ${instanceId} and tenant ${tenantId}...`);
|
|
171
|
+
const deleteResult = await this.store.deleteMachineState(args);
|
|
172
|
+
debug(`machineStateDelete result for machine instance ${instanceId} and tenant ${tenantId}: ${deleteResult}`);
|
|
173
|
+
return deleteResult;
|
|
194
174
|
}
|
|
195
175
|
}
|
|
196
|
-
exports.MachineStatePersistence = MachineStatePersistence;
|
|
197
176
|
//# sourceMappingURL=MachineStatePersistence.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"MachineStatePersistence.js","sourceRoot":"","sources":["../../src/agent/MachineStatePersistence.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"MachineStatePersistence.js","sourceRoot":"","sources":["../../src/agent/MachineStatePersistence.ts"],"names":[],"mappings":"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"}
|
package/dist/functions/index.js
CHANGED
|
@@ -1,20 +1,4 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
-
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
-
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
-
}
|
|
8
|
-
Object.defineProperty(o, k2, desc);
|
|
9
|
-
}) : (function(o, m, k, k2) {
|
|
10
|
-
if (k2 === undefined) k2 = k;
|
|
11
|
-
o[k2] = m[k];
|
|
12
|
-
}));
|
|
13
|
-
var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
14
|
-
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
15
|
-
};
|
|
16
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
17
|
-
__exportStar(require("./machineRegistration"), exports);
|
|
18
|
-
__exportStar(require("./stateMapper"), exports);
|
|
19
|
-
__exportStar(require("./stateEventEmitter"), exports);
|
|
1
|
+
export * from './machineRegistration';
|
|
2
|
+
export * from './stateMapper';
|
|
3
|
+
export * from './stateEventEmitter';
|
|
20
4
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/functions/index.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/functions/index.ts"],"names":[],"mappings":"AAAA,cAAc,uBAAuB,CAAA;AACrC,cAAc,eAAe,CAAA;AAC7B,cAAc,qBAAqB,CAAA"}
|
|
@@ -1,31 +1,8 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
7
|
-
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
8
|
-
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
9
|
-
});
|
|
10
|
-
};
|
|
11
|
-
var __rest = (this && this.__rest) || function (s, e) {
|
|
12
|
-
var t = {};
|
|
13
|
-
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)
|
|
14
|
-
t[p] = s[p];
|
|
15
|
-
if (s != null && typeof Object.getOwnPropertySymbols === "function")
|
|
16
|
-
for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {
|
|
17
|
-
if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))
|
|
18
|
-
t[p[i]] = s[p[i]];
|
|
19
|
-
}
|
|
20
|
-
return t;
|
|
21
|
-
};
|
|
22
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
23
|
-
exports.interpreterStartOrResume = exports.interpreterStartOrResumeFromInit = exports.interpreterResumeFromState = exports.machineStatePersistRegistration = exports.machineStatePersistOnTransition = exports.machineStatePersistInit = void 0;
|
|
24
|
-
const xstate_1 = require("xstate");
|
|
25
|
-
const waitFor_1 = require("xstate/lib/waitFor");
|
|
26
|
-
const types_1 = require("../types");
|
|
27
|
-
const stateEventEmitter_1 = require("./stateEventEmitter");
|
|
28
|
-
const stateMapper_1 = require("./stateMapper");
|
|
1
|
+
import { State } from 'xstate';
|
|
2
|
+
import { waitFor } from 'xstate/lib/waitFor';
|
|
3
|
+
import { MachineStatePersistEventType, } from '../types';
|
|
4
|
+
import { emitMachineStatePersistEvent } from './stateEventEmitter';
|
|
5
|
+
import { machineStateToMachineInit, machineStateToStoreInfo } from './stateMapper';
|
|
29
6
|
/**
|
|
30
7
|
* Initialize the machine state persistence. Returns a unique instanceId and the machine name amongst others
|
|
31
8
|
*
|
|
@@ -34,16 +11,15 @@ const stateMapper_1 = require("./stateMapper");
|
|
|
34
11
|
* @param {IAgentContext<any>} opts.context - The agent context.
|
|
35
12
|
* @returns {Promise<MachineStateInit | undefined>} - A promise that resolves to the initialized machine state, or undefined if the agent isn't using the Xstate plugin.
|
|
36
13
|
*/
|
|
37
|
-
const machineStatePersistInit = (opts) =>
|
|
14
|
+
export const machineStatePersistInit = async (opts) => {
|
|
38
15
|
// make sure the machine context does not end up in the machine state init args
|
|
39
|
-
const { context
|
|
16
|
+
const { context, ...args } = opts;
|
|
40
17
|
if (!(context.agent.availableMethods().includes('machineStateInit') && 'machineStateInit' in context.agent)) {
|
|
41
18
|
console.log(`IMachineStatePersistence was not exposed in the current agent. Not initializing new persistence object`);
|
|
42
19
|
return;
|
|
43
20
|
}
|
|
44
|
-
return
|
|
45
|
-
}
|
|
46
|
-
exports.machineStatePersistInit = machineStatePersistInit;
|
|
21
|
+
return await context.agent.machineStateInit(args);
|
|
22
|
+
};
|
|
47
23
|
/**
|
|
48
24
|
* This function allows for the persistence of machine state on every xstate transition. It emits an event with the new state
|
|
49
25
|
* and other relevant data to be handled by the persistence plugin when enabled.
|
|
@@ -54,29 +30,34 @@ exports.machineStatePersistInit = machineStatePersistInit;
|
|
|
54
30
|
* @param {MachineStateInit} opts.init - The initial persistence options, containing the unique instanceId.
|
|
55
31
|
* @returns {Promise<void>} - A promise that resolves when the persistence event is emitted.
|
|
56
32
|
*/
|
|
57
|
-
const machineStatePersistOnTransition = (opts) =>
|
|
58
|
-
var _a, _b;
|
|
33
|
+
export const machineStatePersistOnTransition = async (opts) => {
|
|
59
34
|
const { cleanupOnFinalState, context, init, interpreter } = opts;
|
|
60
|
-
const { machineState
|
|
35
|
+
const { machineState, ...initEventData } = init;
|
|
61
36
|
if (!(context.agent.availableMethods().includes('machineStatePersist') && 'machineStatePersist' in context.agent)) {
|
|
62
37
|
console.log(`IMachineStatePersistence was not exposed in the current agent. Disabling machine state persistence events`);
|
|
63
38
|
return;
|
|
64
39
|
}
|
|
65
40
|
// We are using the event counter and evenDate to ensure we do not overwrite newer states. Events could come in out of order
|
|
66
|
-
let _eventCounter =
|
|
41
|
+
let _eventCounter = init.machineState?.updatedCount ?? 0;
|
|
67
42
|
// XState persistence plugin is available. So let's emit events on every transition, so it can persist the state
|
|
68
|
-
interpreter.onChange((_machineContext) =>
|
|
43
|
+
interpreter.onChange(async (_machineContext) => {
|
|
69
44
|
/*await (context.agent as TAgent<IMachineStatePersistence>).machineStatePersist({
|
|
70
45
|
...initEventData, // init value with machineState removed, as we are getting the latest state here
|
|
71
46
|
state: interpreter.getSnapshot(),
|
|
72
47
|
updatedCount: ++_eventCounter,
|
|
73
48
|
cleanupOnFinalState: cleanupOnFinalState !== false,
|
|
74
49
|
})*/
|
|
75
|
-
|
|
76
|
-
type:
|
|
77
|
-
data:
|
|
50
|
+
emitMachineStatePersistEvent({
|
|
51
|
+
type: MachineStatePersistEventType.EVERY,
|
|
52
|
+
data: {
|
|
53
|
+
...initEventData, // init value with machineState removed, as we are getting the latest state here
|
|
54
|
+
state: interpreter.getSnapshot(),
|
|
55
|
+
_eventCounter: ++_eventCounter,
|
|
56
|
+
_eventDate: new Date(),
|
|
57
|
+
_cleanupOnFinalState: cleanupOnFinalState !== false,
|
|
58
|
+
},
|
|
78
59
|
}, context);
|
|
79
|
-
})
|
|
60
|
+
});
|
|
80
61
|
if (cleanupOnFinalState && context.agent.availableMethods().includes('machineStateDelete')) {
|
|
81
62
|
interpreter.onDone((doneEvent) => {
|
|
82
63
|
;
|
|
@@ -86,8 +67,7 @@ const machineStatePersistOnTransition = (opts) => __awaiter(void 0, void 0, void
|
|
|
86
67
|
});
|
|
87
68
|
});
|
|
88
69
|
}
|
|
89
|
-
}
|
|
90
|
-
exports.machineStatePersistOnTransition = machineStatePersistOnTransition;
|
|
70
|
+
};
|
|
91
71
|
/**
|
|
92
72
|
* Persist the initial state of a machine and register it with the given machine instance.
|
|
93
73
|
*
|
|
@@ -95,22 +75,20 @@ exports.machineStatePersistOnTransition = machineStatePersistOnTransition;
|
|
|
95
75
|
* machine state and registering it.
|
|
96
76
|
* @returns {Promise<MachineStateInit | undefined>} - A promise that resolves to the initial state of the machine, or undefined if the agent isn't using the Xstate plugin.
|
|
97
77
|
*/
|
|
98
|
-
const machineStatePersistRegistration = (args) =>
|
|
99
|
-
var _a, _b;
|
|
78
|
+
export const machineStatePersistRegistration = async (args) => {
|
|
100
79
|
const { disablePersistence } = args;
|
|
101
80
|
if (disablePersistence === true) {
|
|
102
81
|
return;
|
|
103
82
|
}
|
|
104
83
|
// We use expires in MS first. If not provided, look at expires at. If not provided, the persistence will not expire
|
|
105
84
|
const expiresAt = args.expireInMS ? new Date(Date.now() + args.expireInMS) : args.expiresAt;
|
|
106
|
-
const machineName =
|
|
107
|
-
const init =
|
|
85
|
+
const machineName = args.machineName ?? args.interpreter.machine.id ?? args.interpreter.id;
|
|
86
|
+
const init = await machineStatePersistInit({ ...args, machineName, expiresAt });
|
|
108
87
|
if (init) {
|
|
109
|
-
|
|
88
|
+
await machineStatePersistOnTransition({ ...args, init });
|
|
110
89
|
}
|
|
111
90
|
return init;
|
|
112
|
-
}
|
|
113
|
-
exports.machineStatePersistRegistration = machineStatePersistRegistration;
|
|
91
|
+
};
|
|
114
92
|
const assertNonExpired = (args) => {
|
|
115
93
|
const { expiresAt, machineName } = args;
|
|
116
94
|
if (expiresAt && expiresAt.getTime() < Date.now()) {
|
|
@@ -128,12 +106,12 @@ const assertNonExpired = (args) => {
|
|
|
128
106
|
*
|
|
129
107
|
* @returns {Promise<Interpreter>} - A promise that resolves to the resumed interpreter.
|
|
130
108
|
*/
|
|
131
|
-
const interpreterResumeFromState = (args) =>
|
|
109
|
+
export const interpreterResumeFromState = async (args) => {
|
|
132
110
|
const { interpreter, machineState, context, noRegistration, cleanupAllOtherInstances, cleanupOnFinalState } = args;
|
|
133
111
|
const { machineName, instanceId, tenantId } = machineState;
|
|
134
112
|
assertNonExpired(machineState);
|
|
135
113
|
if (noRegistration !== true) {
|
|
136
|
-
|
|
114
|
+
await machineStatePersistRegistration({
|
|
137
115
|
stateType: 'existing',
|
|
138
116
|
machineName,
|
|
139
117
|
tenantId,
|
|
@@ -144,18 +122,20 @@ const interpreterResumeFromState = (args) => __awaiter(void 0, void 0, void 0, f
|
|
|
144
122
|
interpreter,
|
|
145
123
|
});
|
|
146
124
|
}
|
|
147
|
-
const state =
|
|
125
|
+
const state = State.from(machineState.state.value, machineState.state.context);
|
|
148
126
|
// @ts-ignore
|
|
149
127
|
interpreter.start(state);
|
|
150
128
|
// @ts-ignore
|
|
151
|
-
|
|
129
|
+
await waitFor(interpreter, (awaitState) => awaitState.matches(state.value));
|
|
152
130
|
return {
|
|
153
131
|
machineState,
|
|
154
|
-
init:
|
|
132
|
+
init: machineStateToMachineInit({
|
|
133
|
+
...machineState,
|
|
134
|
+
stateType: 'existing',
|
|
135
|
+
}, machineStateToStoreInfo({ ...machineState, stateType: 'existing' })),
|
|
155
136
|
interpreter,
|
|
156
137
|
};
|
|
157
|
-
}
|
|
158
|
-
exports.interpreterResumeFromState = interpreterResumeFromState;
|
|
138
|
+
};
|
|
159
139
|
/**
|
|
160
140
|
* Resumes or starts the interpreter from the initial machine state.
|
|
161
141
|
*
|
|
@@ -168,7 +148,7 @@ exports.interpreterResumeFromState = interpreterResumeFromState;
|
|
|
168
148
|
* @returns {Promise} - A promise that resolves to the interpreter instance.
|
|
169
149
|
* @throws {Error} - If the machine name from init does not match the interpreter id.
|
|
170
150
|
*/
|
|
171
|
-
const interpreterStartOrResumeFromInit = (args) =>
|
|
151
|
+
export const interpreterStartOrResumeFromInit = async (args) => {
|
|
172
152
|
const { init, noRegistration, interpreter, cleanupOnFinalState, cleanupAllOtherInstances, context } = args;
|
|
173
153
|
const { stateType, instanceId, machineName, tenantId, expiresAt } = init;
|
|
174
154
|
if (init.machineName !== interpreter.id) {
|
|
@@ -176,30 +156,35 @@ const interpreterStartOrResumeFromInit = (args) => __awaiter(void 0, void 0, voi
|
|
|
176
156
|
}
|
|
177
157
|
assertNonExpired({ machineName, expiresAt });
|
|
178
158
|
if (noRegistration !== true) {
|
|
179
|
-
|
|
180
|
-
|
|
159
|
+
await machineStatePersistRegistration({
|
|
160
|
+
stateType: stateType ?? 'existing',
|
|
161
|
+
machineName,
|
|
162
|
+
tenantId,
|
|
163
|
+
...(stateType === 'existing' && { existingInstanceId: instanceId }),
|
|
164
|
+
...(stateType === 'new' && { customInstanceId: instanceId }),
|
|
165
|
+
cleanupAllOtherInstances,
|
|
181
166
|
cleanupOnFinalState,
|
|
182
167
|
context,
|
|
183
|
-
interpreter
|
|
168
|
+
interpreter,
|
|
169
|
+
});
|
|
184
170
|
}
|
|
185
171
|
let machineState;
|
|
186
172
|
if (stateType === 'new') {
|
|
187
173
|
interpreter.start();
|
|
188
174
|
}
|
|
189
175
|
else {
|
|
190
|
-
machineState =
|
|
176
|
+
machineState = await context.agent.machineStateGet({ tenantId, instanceId });
|
|
191
177
|
// @ts-ignore
|
|
192
178
|
interpreter.start(machineState.state);
|
|
193
179
|
}
|
|
194
180
|
// We are waiting a bit
|
|
195
|
-
|
|
181
|
+
await new Promise((res) => setTimeout(res, 50));
|
|
196
182
|
return {
|
|
197
183
|
interpreter,
|
|
198
184
|
machineState,
|
|
199
185
|
init,
|
|
200
186
|
};
|
|
201
|
-
}
|
|
202
|
-
exports.interpreterStartOrResumeFromInit = interpreterStartOrResumeFromInit;
|
|
187
|
+
};
|
|
203
188
|
/**
|
|
204
189
|
* Starts or resumes the given state machine interpreter.
|
|
205
190
|
*
|
|
@@ -218,23 +203,22 @@ exports.interpreterStartOrResumeFromInit = interpreterStartOrResumeFromInit;
|
|
|
218
203
|
* @throws {Error} If a new instance was requested with the same ID as an existing active instance.
|
|
219
204
|
* @throws {Error} If the existing state machine with the given machine name and instance ID cannot be found.
|
|
220
205
|
*/
|
|
221
|
-
const interpreterStartOrResume = (args) =>
|
|
222
|
-
var _a;
|
|
206
|
+
export const interpreterStartOrResume = async (args) => {
|
|
223
207
|
const { stateType, singletonCheck, instanceId, tenantId, noRegistration, context, interpreter, cleanupAllOtherInstances, cleanupOnFinalState } = args;
|
|
224
|
-
const machineName =
|
|
225
|
-
let activeStates =
|
|
208
|
+
const machineName = args.machineName ?? interpreter.id;
|
|
209
|
+
let activeStates = await context.agent.machineStatesFindActive({
|
|
226
210
|
machineName,
|
|
227
211
|
tenantId,
|
|
228
212
|
instanceId,
|
|
229
213
|
});
|
|
230
214
|
if (stateType === 'new' && activeStates.length > 0 && cleanupAllOtherInstances) {
|
|
231
215
|
// We cleanup here to not influence the logic below. Normally the agent machineStateInit method does the cleanup
|
|
232
|
-
|
|
216
|
+
await Promise.all(activeStates.map((state) => context.agent.machineStateDelete({
|
|
233
217
|
tenantId: args.tenantId,
|
|
234
218
|
instanceId: state.instanceId,
|
|
235
219
|
})));
|
|
236
220
|
// We search again, given the delete is using the passed in tenantId, instead of relying on the persisted tenantId. Should not matter, but just making sure
|
|
237
|
-
activeStates =
|
|
221
|
+
activeStates = await context.agent.machineStatesFindActive({
|
|
238
222
|
machineName,
|
|
239
223
|
tenantId,
|
|
240
224
|
instanceId,
|
|
@@ -252,14 +236,14 @@ const interpreterStartOrResume = (args) => __awaiter(void 0, void 0, void 0, fun
|
|
|
252
236
|
// Since an instanceId was provided it means the activeStates includes a machine with this instance. But stateType is 'new'
|
|
253
237
|
return Promise.reject(new Error(`Found an active '${machineName}' instance with id ${instanceId}, but a new instance was requested with the same id`));
|
|
254
238
|
}
|
|
255
|
-
const init =
|
|
239
|
+
const init = await context.agent.machineStateInit({
|
|
256
240
|
stateType: 'new',
|
|
257
241
|
customInstanceId: instanceId,
|
|
258
|
-
machineName: machineName
|
|
242
|
+
machineName: machineName ?? interpreter.id,
|
|
259
243
|
tenantId,
|
|
260
244
|
cleanupAllOtherInstances,
|
|
261
245
|
});
|
|
262
|
-
return
|
|
246
|
+
return await interpreterStartOrResumeFromInit({
|
|
263
247
|
init,
|
|
264
248
|
noRegistration,
|
|
265
249
|
interpreter,
|
|
@@ -272,14 +256,14 @@ const interpreterStartOrResume = (args) => __awaiter(void 0, void 0, void 0, fun
|
|
|
272
256
|
if (stateType === 'existing') {
|
|
273
257
|
return Promise.reject(new Error(`Could not find existing state machine ${machineName}, instanceId ${instanceId}`));
|
|
274
258
|
}
|
|
275
|
-
const init =
|
|
259
|
+
const init = await context.agent.machineStateInit({
|
|
276
260
|
stateType: 'new',
|
|
277
261
|
customInstanceId: instanceId,
|
|
278
|
-
machineName: machineName
|
|
262
|
+
machineName: machineName ?? interpreter.id,
|
|
279
263
|
tenantId,
|
|
280
264
|
cleanupAllOtherInstances,
|
|
281
265
|
});
|
|
282
|
-
return
|
|
266
|
+
return await interpreterStartOrResumeFromInit({
|
|
283
267
|
init,
|
|
284
268
|
noRegistration,
|
|
285
269
|
interpreter,
|
|
@@ -290,7 +274,7 @@ const interpreterStartOrResume = (args) => __awaiter(void 0, void 0, void 0, fun
|
|
|
290
274
|
}
|
|
291
275
|
// activeStates length >= 1
|
|
292
276
|
const activeState = activeStates[0];
|
|
293
|
-
return
|
|
277
|
+
return interpreterResumeFromState({
|
|
294
278
|
machineState: activeState,
|
|
295
279
|
noRegistration,
|
|
296
280
|
interpreter,
|
|
@@ -298,6 +282,5 @@ const interpreterStartOrResume = (args) => __awaiter(void 0, void 0, void 0, fun
|
|
|
298
282
|
cleanupOnFinalState,
|
|
299
283
|
cleanupAllOtherInstances,
|
|
300
284
|
});
|
|
301
|
-
}
|
|
302
|
-
exports.interpreterStartOrResume = interpreterStartOrResume;
|
|
285
|
+
};
|
|
303
286
|
//# sourceMappingURL=machineRegistration.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"machineRegistration.js","sourceRoot":"","sources":["../../src/functions/machineRegistration.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"machineRegistration.js","sourceRoot":"","sources":["../../src/functions/machineRegistration.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,11 +1,5 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
-
};
|
|
5
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
-
exports.emitMachineStatePersistEvent = void 0;
|
|
7
|
-
const debug_1 = __importDefault(require("debug"));
|
|
8
|
-
const debug = (0, debug_1.default)('sphereon:ssi-sdk:machine-state:xstate-persistence');
|
|
1
|
+
import Debug from 'debug';
|
|
2
|
+
const debug = Debug('sphereon:ssi-sdk:machine-state:xstate-persistence');
|
|
9
3
|
/**
|
|
10
4
|
* Emits a machine state persistence event.
|
|
11
5
|
*
|
|
@@ -13,9 +7,8 @@ const debug = (0, debug_1.default)('sphereon:ssi-sdk:machine-state:xstate-persis
|
|
|
13
7
|
* @param {RequiredContext} context - The required agent context for the event emission.
|
|
14
8
|
* @returns {void}
|
|
15
9
|
*/
|
|
16
|
-
const emitMachineStatePersistEvent = (event, context) => {
|
|
10
|
+
export const emitMachineStatePersistEvent = (event, context) => {
|
|
17
11
|
debug(`Emitting machine state persistence event '${event.type}' with counter: ${event.data._eventCounter} and state ${JSON.stringify(event.data.state.value)}`);
|
|
18
12
|
void context.agent.emit(event.type, event.data);
|
|
19
13
|
};
|
|
20
|
-
exports.emitMachineStatePersistEvent = emitMachineStatePersistEvent;
|
|
21
14
|
//# sourceMappingURL=stateEventEmitter.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"stateEventEmitter.js","sourceRoot":"","sources":["../../src/functions/stateEventEmitter.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"stateEventEmitter.js","sourceRoot":"","sources":["../../src/functions/stateEventEmitter.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAA;AAGzB,MAAM,KAAK,GAAG,KAAK,CAAC,mDAAmD,CAAC,CAAA;AAExE;;;;;;GAMG;AACH,MAAM,CAAC,MAAM,4BAA4B,GAAG,CAAC,KAA+B,EAAE,OAAwB,EAAE,EAAE;IACxG,KAAK,CACH,6CAA6C,KAAK,CAAC,IAAI,mBAAmB,KAAK,CAAC,IAAI,CAAC,aAAa,cAAc,IAAI,CAAC,SAAS,CAC5H,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CACvB,EAAE,CACJ,CAAA;IACD,KAAK,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC,IAAI,CAAC,CAAA;AACjD,CAAC,CAAA"}
|
|
@@ -1,7 +1,4 @@
|
|
|
1
|
-
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.deserializeMachineState = exports.serializeMachineState = exports.machineStateToMachineInit = exports.storeInfoToMachineInit = exports.machineStateToStoreInfo = void 0;
|
|
4
|
-
const xstate_1 = require("xstate");
|
|
1
|
+
import { State } from 'xstate';
|
|
5
2
|
/**
|
|
6
3
|
* Create a machine state info object useful for the store, based on the provided machine info and existing state.
|
|
7
4
|
*
|
|
@@ -9,11 +6,10 @@ const xstate_1 = require("xstate");
|
|
|
9
6
|
* @param {Partial<StoreMachineStateInfo>} [existingState] - The optional existing state object.
|
|
10
7
|
* @returns {StoreMachineStateInfo} - The store machine state info object.
|
|
11
8
|
*/
|
|
12
|
-
const machineStateToStoreInfo = (machineInfo, existingState) => {
|
|
13
|
-
var _a, _b, _c;
|
|
9
|
+
export const machineStateToStoreInfo = (machineInfo, existingState) => {
|
|
14
10
|
const { state, machineName, tenantId, expiresAt, instanceId, updatedCount } = machineInfo;
|
|
15
|
-
const existing = existingState
|
|
16
|
-
const stateInstance =
|
|
11
|
+
const existing = existingState ?? { machineName, createdAt: new Date(), expiresAt };
|
|
12
|
+
const stateInstance = State.create(machineInfo.state);
|
|
17
13
|
let latestStateName = undefined;
|
|
18
14
|
if (stateInstance.value) {
|
|
19
15
|
latestStateName = typeof stateInstance.value === 'string' ? stateInstance.value : JSON.stringify(stateInstance.value);
|
|
@@ -23,21 +19,20 @@ const machineStateToStoreInfo = (machineInfo, existingState) => {
|
|
|
23
19
|
}
|
|
24
20
|
return {
|
|
25
21
|
instanceId,
|
|
26
|
-
updatedCount: updatedCount
|
|
27
|
-
sessionId:
|
|
22
|
+
updatedCount: updatedCount ?? (existing?.updatedCount ? existing.updatedCount++ : 0),
|
|
23
|
+
sessionId: stateInstance._sessionid ?? undefined,
|
|
28
24
|
machineName,
|
|
29
|
-
state:
|
|
25
|
+
state: serializeMachineState(state),
|
|
30
26
|
tenantId,
|
|
31
27
|
latestStateName,
|
|
32
28
|
latestEventType: stateInstance.event.type,
|
|
33
29
|
updatedAt: new Date(),
|
|
34
30
|
expiresAt,
|
|
35
|
-
createdAt:
|
|
36
|
-
completedAt:
|
|
31
|
+
createdAt: existing.createdAt ?? new Date(),
|
|
32
|
+
completedAt: existing.completedAt ?? (stateInstance.done ? new Date() : undefined),
|
|
37
33
|
};
|
|
38
34
|
};
|
|
39
|
-
|
|
40
|
-
const storeInfoToMachineInit = (args) => {
|
|
35
|
+
export const storeInfoToMachineInit = (args) => {
|
|
41
36
|
const { instanceId, machineName, tenantId, expiresAt, createdAt, stateType, machineState } = args;
|
|
42
37
|
return {
|
|
43
38
|
stateType,
|
|
@@ -49,25 +44,26 @@ const storeInfoToMachineInit = (args) => {
|
|
|
49
44
|
machineState,
|
|
50
45
|
};
|
|
51
46
|
};
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
47
|
+
export const machineStateToMachineInit = (machineInfo, existingState) => {
|
|
48
|
+
return storeInfoToMachineInit({
|
|
49
|
+
...machineStateToStoreInfo(machineInfo, existingState),
|
|
50
|
+
stateType: 'existing',
|
|
51
|
+
machineState: machineInfo.machineState,
|
|
52
|
+
});
|
|
55
53
|
};
|
|
56
|
-
exports.machineStateToMachineInit = machineStateToMachineInit;
|
|
57
54
|
/**
|
|
58
55
|
* Serializes a machine state to a string representation.
|
|
59
56
|
*
|
|
60
57
|
* @param {State<T, TEvent> | SerializableState | string} state - The machine state to serialize.
|
|
61
58
|
* @returns {string} - The serialized machine state.
|
|
62
59
|
*/
|
|
63
|
-
const serializeMachineState = (state) => {
|
|
60
|
+
export const serializeMachineState = (state) => {
|
|
64
61
|
if (typeof state === 'string') {
|
|
65
62
|
return state;
|
|
66
63
|
}
|
|
67
64
|
const jsonState = 'toJSON' in state ? state.toJSON() : state;
|
|
68
65
|
return JSON.stringify(jsonState);
|
|
69
66
|
};
|
|
70
|
-
exports.serializeMachineState = serializeMachineState;
|
|
71
67
|
/**
|
|
72
68
|
* Deserializes a serialized machine state.
|
|
73
69
|
*
|
|
@@ -76,8 +72,7 @@ exports.serializeMachineState = serializeMachineState;
|
|
|
76
72
|
* @param {string} state - The serialized machine state.
|
|
77
73
|
* @returns {State<T, TEvent>} - The deserialized machine state.
|
|
78
74
|
*/
|
|
79
|
-
const deserializeMachineState = (state) => {
|
|
80
|
-
return
|
|
75
|
+
export const deserializeMachineState = (state) => {
|
|
76
|
+
return State.create(JSON.parse(state));
|
|
81
77
|
};
|
|
82
|
-
exports.deserializeMachineState = deserializeMachineState;
|
|
83
78
|
//# sourceMappingURL=stateMapper.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"stateMapper.js","sourceRoot":"","sources":["../../src/functions/stateMapper.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"stateMapper.js","sourceRoot":"","sources":["../../src/functions/stateMapper.ts"],"names":[],"mappings":"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"}
|
package/dist/index.js
CHANGED
|
@@ -1,23 +1,6 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
-
if (k2 === undefined) k2 = k;
|
|
4
|
-
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
-
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
-
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
-
}
|
|
8
|
-
Object.defineProperty(o, k2, desc);
|
|
9
|
-
}) : (function(o, m, k, k2) {
|
|
10
|
-
if (k2 === undefined) k2 = k;
|
|
11
|
-
o[k2] = m[k];
|
|
12
|
-
}));
|
|
13
|
-
var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
14
|
-
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
15
|
-
};
|
|
16
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
17
|
-
exports.schema = void 0;
|
|
18
1
|
const schema = require('../plugin.schema.json');
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
2
|
+
export { schema };
|
|
3
|
+
export * from './agent/MachineStatePersistence';
|
|
4
|
+
export * from './types';
|
|
5
|
+
export * from './functions';
|
|
23
6
|
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,GAAG,OAAO,CAAC,uBAAuB,CAAC,CAAA;AAC/C,OAAO,EAAE,MAAM,EAAE,CAAA;AACjB,cAAc,iCAAiC,CAAA;AAC/C,cAAc,SAAS,CAAA;AACvB,cAAc,aAAa,CAAA"}
|
package/dist/tsdoc-metadata.json
CHANGED
package/dist/types/index.js
CHANGED
|
@@ -1,19 +1,3 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
if (k2 === undefined) k2 = k;
|
|
4
|
-
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
-
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
-
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
-
}
|
|
8
|
-
Object.defineProperty(o, k2, desc);
|
|
9
|
-
}) : (function(o, m, k, k2) {
|
|
10
|
-
if (k2 === undefined) k2 = k;
|
|
11
|
-
o[k2] = m[k];
|
|
12
|
-
}));
|
|
13
|
-
var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
14
|
-
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
15
|
-
};
|
|
16
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
17
|
-
__exportStar(require("./IMachineStatePersistence"), exports);
|
|
18
|
-
__exportStar(require("./types"), exports);
|
|
1
|
+
export * from './IMachineStatePersistence';
|
|
2
|
+
export * from './types';
|
|
19
3
|
//# sourceMappingURL=index.js.map
|
package/dist/types/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/types/index.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/types/index.ts"],"names":[],"mappings":"AAAA,cAAc,4BAA4B,CAAA;AAC1C,cAAc,SAAS,CAAA"}
|
package/dist/types/types.js
CHANGED
|
@@ -1,13 +1,10 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.MachineStatePersistEventType = void 0;
|
|
4
1
|
/**
|
|
5
2
|
* Enum representing the types of machine state persist events.
|
|
6
3
|
* @enum {string}
|
|
7
4
|
*/
|
|
8
|
-
var MachineStatePersistEventType;
|
|
5
|
+
export var MachineStatePersistEventType;
|
|
9
6
|
(function (MachineStatePersistEventType) {
|
|
10
7
|
MachineStatePersistEventType["INIT"] = "INIT";
|
|
11
8
|
MachineStatePersistEventType["EVERY"] = "EVERY";
|
|
12
|
-
})(MachineStatePersistEventType || (
|
|
9
|
+
})(MachineStatePersistEventType || (MachineStatePersistEventType = {}));
|
|
13
10
|
//# sourceMappingURL=types.js.map
|
package/dist/types/types.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/types/types.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/types/types.ts"],"names":[],"mappings":"AA+BA;;;GAGG;AACH,MAAM,CAAN,IAAY,4BAGX;AAHD,WAAY,4BAA4B;IACtC,6CAAa,CAAA;IACb,+CAAe,CAAA;AACjB,CAAC,EAHW,4BAA4B,KAA5B,4BAA4B,QAGvC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@sphereon/ssi-sdk.xstate-machine-persistence",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.33.1-feature.vcdm2.4+9f634bdb",
|
|
4
4
|
"source": "src/index.ts",
|
|
5
5
|
"main": "dist/index.js",
|
|
6
6
|
"types": "dist/index.d.ts",
|
|
@@ -15,22 +15,22 @@
|
|
|
15
15
|
"generate-plugin-schema": "ts-node ../../packages/dev/bin/sphereon.js dev generate-plugin-schema"
|
|
16
16
|
},
|
|
17
17
|
"dependencies": {
|
|
18
|
-
"@sphereon/ssi-sdk.data-store": "0.
|
|
18
|
+
"@sphereon/ssi-sdk.data-store": "0.33.1-feature.vcdm2.4+9f634bdb",
|
|
19
19
|
"@veramo/core": "4.2.0",
|
|
20
20
|
"debug": "^4.3.5",
|
|
21
21
|
"uuid": "^9.0.1",
|
|
22
22
|
"xstate": "^4.38.3"
|
|
23
23
|
},
|
|
24
24
|
"devDependencies": {
|
|
25
|
-
"@sphereon/ssi-sdk.agent-config": "0.
|
|
26
|
-
"@sphereon/ssi-sdk.core": "0.
|
|
25
|
+
"@sphereon/ssi-sdk.agent-config": "0.33.1-feature.vcdm2.4+9f634bdb",
|
|
26
|
+
"@sphereon/ssi-sdk.core": "0.33.1-feature.vcdm2.4+9f634bdb",
|
|
27
27
|
"@types/uuid": "^9.0.8",
|
|
28
28
|
"@typescript-eslint/eslint-plugin": "^4.33.0",
|
|
29
29
|
"@typescript-eslint/parser": "^4.33.0",
|
|
30
30
|
"@veramo/remote-client": "4.2.0",
|
|
31
31
|
"@veramo/remote-server": "4.2.0",
|
|
32
32
|
"ts-node": "^10.9.2",
|
|
33
|
-
"typeorm": "^0.3.
|
|
33
|
+
"typeorm": "^0.3.21",
|
|
34
34
|
"typescript": "5.4.2"
|
|
35
35
|
},
|
|
36
36
|
"files": [
|
|
@@ -54,5 +54,5 @@
|
|
|
54
54
|
"state machine"
|
|
55
55
|
],
|
|
56
56
|
"nx": {},
|
|
57
|
-
"gitHead": "
|
|
57
|
+
"gitHead": "9f634bdb714061141e277508c124b08d626f6036"
|
|
58
58
|
}
|