@sphereon/ssi-sdk.xstate-machine-persistence 0.19.1-next.75
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/LICENSE +201 -0
- package/README.md +181 -0
- package/dist/agent/MachineStatePersistence.d.ts +26 -0
- package/dist/agent/MachineStatePersistence.d.ts.map +1 -0
- package/dist/agent/MachineStatePersistence.js +194 -0
- package/dist/agent/MachineStatePersistence.js.map +1 -0
- package/dist/functions/index.d.ts +4 -0
- package/dist/functions/index.d.ts.map +1 -0
- package/dist/functions/index.js +20 -0
- package/dist/functions/index.js.map +1 -0
- package/dist/functions/machineRegistration.d.ts +47 -0
- package/dist/functions/machineRegistration.d.ts.map +1 -0
- package/dist/functions/machineRegistration.js +94 -0
- package/dist/functions/machineRegistration.js.map +1 -0
- package/dist/functions/stateEventEmitter.d.ts +10 -0
- package/dist/functions/stateEventEmitter.d.ts.map +1 -0
- package/dist/functions/stateEventEmitter.js +21 -0
- package/dist/functions/stateEventEmitter.js.map +1 -0
- package/dist/functions/stateMapper.d.ts +38 -0
- package/dist/functions/stateMapper.d.ts.map +1 -0
- package/dist/functions/stateMapper.js +78 -0
- package/dist/functions/stateMapper.js.map +1 -0
- package/dist/index.d.ts +6 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +23 -0
- package/dist/index.js.map +1 -0
- package/dist/ssi-sdk.xstate-machine-persistence.d.ts +360 -0
- package/dist/tsdoc-metadata.json +11 -0
- package/dist/types/IMachineStatePersistence.d.ts +62 -0
- package/dist/types/IMachineStatePersistence.d.ts.map +1 -0
- package/dist/types/IMachineStatePersistence.js +3 -0
- package/dist/types/IMachineStatePersistence.js.map +1 -0
- package/dist/types/index.d.ts +3 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/types/index.js +19 -0
- package/dist/types/index.js.map +1 -0
- package/dist/types/types.d.ts +150 -0
- package/dist/types/types.d.ts.map +1 -0
- package/dist/types/types.js +13 -0
- package/dist/types/types.js.map +1 -0
- package/package.json +56 -0
- package/plugin.schema.json +570 -0
- package/src/__tests__/localAgent.test.ts +32 -0
- package/src/__tests__/restAgent.test.ts +73 -0
- package/src/__tests__/shared/MachineStatePersistenceAgentLogic.ts +202 -0
- package/src/agent/MachineStatePersistence.ts +172 -0
- package/src/functions/index.ts +3 -0
- package/src/functions/machineRegistration.ts +115 -0
- package/src/functions/stateEventEmitter.ts +16 -0
- package/src/functions/stateMapper.ts +78 -0
- package/src/index.ts +5 -0
- package/src/types/IMachineStatePersistence.ts +79 -0
- package/src/types/index.ts +2 -0
- package/src/types/types.ts +169 -0
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
import { IAgentContext } from '@veramo/core';
|
|
2
|
+
import { DefaultContext, EventObject, Interpreter, StateSchema, TypegenDisabled, Typestate } from 'xstate';
|
|
3
|
+
import { InitMachineStateArgs, MachineStateInit, MachineStatePersistenceOpts } from '../types';
|
|
4
|
+
/**
|
|
5
|
+
* Initialize the machine state persistence. Returns a unique instanceId and the machine name amongst others
|
|
6
|
+
*
|
|
7
|
+
* @param {Object} opts - The options for initializing the machine state persistence.
|
|
8
|
+
* @param {InitMachineStateArgs} opts - The arguments for initializing the machine state.
|
|
9
|
+
* @param {IAgentContext<any>} opts.context - The agent context.
|
|
10
|
+
* @returns {Promise<MachineStateInit | undefined>} - A promise that resolves to the initialized machine state, or undefined if the agent isn't using the Xstate plugin.
|
|
11
|
+
*/
|
|
12
|
+
export declare const machineStatePersistInit: (opts: InitMachineStateArgs & Pick<MachineStatePersistenceOpts, 'existingInstanceId' | 'customInstanceId'> & {
|
|
13
|
+
context: IAgentContext<any>;
|
|
14
|
+
}) => Promise<MachineStateInit | undefined>;
|
|
15
|
+
/**
|
|
16
|
+
* This function allows for the persistence of machine state on every xstate transition. It emits an event with the new state
|
|
17
|
+
* and other relevant data to be handled by the persistence plugin when enabled.
|
|
18
|
+
*
|
|
19
|
+
* @param {Object} opts - The options object.
|
|
20
|
+
* @param {Interpreter} opts.instance - The XState machine interpreter instance.
|
|
21
|
+
* @param {IAgentContext<any>} opts.context - The agent context.
|
|
22
|
+
* @param {MachineStateInit} opts.init - The initial persistence options, containing the unique instanceId.
|
|
23
|
+
* @returns {Promise<void>} - A promise that resolves when the persistence event is emitted.
|
|
24
|
+
*/
|
|
25
|
+
export declare const machineStatePersistOnTransition: <TContext = DefaultContext, TStateSchema extends StateSchema<any> = any, TEvent extends EventObject = EventObject, TTypestate extends Typestate<TContext> = {
|
|
26
|
+
value: any;
|
|
27
|
+
context: TContext;
|
|
28
|
+
}, TResolvedTypesMeta = TypegenDisabled>(opts: {
|
|
29
|
+
interpreter: Interpreter<TContext, TStateSchema, TEvent, TTypestate, TResolvedTypesMeta>;
|
|
30
|
+
context: IAgentContext<any>;
|
|
31
|
+
init: MachineStateInit;
|
|
32
|
+
}) => Promise<void>;
|
|
33
|
+
/**
|
|
34
|
+
* Persist the initial state of a machine and register it with the given machine instance.
|
|
35
|
+
*
|
|
36
|
+
* @param {InitMachineStateArgs & {instance: Interpreter<TContext, TStateSchema, TEvent, TTypestate, TResolvedTypesMeta>, context: IAgentContext<any>}} args - The options for initializing
|
|
37
|
+
* machine state and registering it.
|
|
38
|
+
* @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.
|
|
39
|
+
*/
|
|
40
|
+
export declare const machineStatePersistRegistration: <TContext = DefaultContext, TStateSchema extends StateSchema<any> = any, TEvent extends EventObject = EventObject, TTypestate extends Typestate<TContext> = {
|
|
41
|
+
value: any;
|
|
42
|
+
context: TContext;
|
|
43
|
+
}, TResolvedTypesMeta = TypegenDisabled>(args: Omit<InitMachineStateArgs, "machineName"> & Partial<Pick<InitMachineStateArgs, "machineName">> & MachineStatePersistenceOpts & {
|
|
44
|
+
interpreter: Interpreter<TContext, TStateSchema, TEvent, TTypestate, TResolvedTypesMeta>;
|
|
45
|
+
context: IAgentContext<any>;
|
|
46
|
+
}) => Promise<MachineStateInit | undefined>;
|
|
47
|
+
//# sourceMappingURL=machineRegistration.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"machineRegistration.d.ts","sourceRoot":"","sources":["../../src/functions/machineRegistration.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,cAAc,CAAA;AAC5C,OAAO,EAAE,cAAc,EAAE,WAAW,EAAE,WAAW,EAAE,WAAW,EAAE,eAAe,EAAE,SAAS,EAAE,MAAM,QAAQ,CAAA;AAC1G,OAAO,EAA4B,oBAAoB,EAAE,gBAAgB,EAAE,2BAA2B,EAAgC,MAAM,UAAU,CAAA;AAGtJ;;;;;;;GAOG;AACH,eAAO,MAAM,uBAAuB,SAC5B,oBAAoB,GACxB,KAAK,2BAA2B,EAAE,oBAAoB,GAAG,kBAAkB,CAAC,GAAG;IAC7E,OAAO,EAAE,cAAc,GAAG,CAAC,CAAA;CAC5B,KACF,QAAQ,gBAAgB,GAAG,SAAS,CAQtC,CAAA;AAED;;;;;;;;;GASG;AACH,eAAO,MAAM,+BAA+B;WAKjC,GAAG;;;;aAMH,cAAc,GAAG,CAAC;UACrB,gBAAgB;MACpB,QAAQ,IAAI,CAwBf,CAAA;AAED;;;;;;GAMG;AACH,eAAO,MAAM,+BAA+B;WAKjC,GAAG;;;;aASC,cAAc,GAAG,CAAC;MAE9B,QAAQ,gBAAgB,GAAG,SAAS,CActC,CAAA"}
|
|
@@ -0,0 +1,94 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
3
|
+
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
4
|
+
return new (P || (P = Promise))(function (resolve, reject) {
|
|
5
|
+
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
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.machineStatePersistRegistration = exports.machineStatePersistOnTransition = exports.machineStatePersistInit = void 0;
|
|
24
|
+
const types_1 = require("../types");
|
|
25
|
+
const stateEventEmitter_1 = require("./stateEventEmitter");
|
|
26
|
+
/**
|
|
27
|
+
* Initialize the machine state persistence. Returns a unique instanceId and the machine name amongst others
|
|
28
|
+
*
|
|
29
|
+
* @param {Object} opts - The options for initializing the machine state persistence.
|
|
30
|
+
* @param {InitMachineStateArgs} opts - The arguments for initializing the machine state.
|
|
31
|
+
* @param {IAgentContext<any>} opts.context - The agent context.
|
|
32
|
+
* @returns {Promise<MachineStateInit | undefined>} - A promise that resolves to the initialized machine state, or undefined if the agent isn't using the Xstate plugin.
|
|
33
|
+
*/
|
|
34
|
+
const machineStatePersistInit = (opts) => __awaiter(void 0, void 0, void 0, function* () {
|
|
35
|
+
// make sure the machine context does not end up in the machine state init args
|
|
36
|
+
const { context } = opts, args = __rest(opts, ["context"]);
|
|
37
|
+
if (!(context.agent.availableMethods().includes('machineStateInit') && 'machineStateInit' in context.agent)) {
|
|
38
|
+
console.log(`IMachineStatePersistence was not exposed in the current agent. Not initializing new persistence object`);
|
|
39
|
+
return;
|
|
40
|
+
}
|
|
41
|
+
return yield context.agent.machineStateInit(args);
|
|
42
|
+
});
|
|
43
|
+
exports.machineStatePersistInit = machineStatePersistInit;
|
|
44
|
+
/**
|
|
45
|
+
* This function allows for the persistence of machine state on every xstate transition. It emits an event with the new state
|
|
46
|
+
* and other relevant data to be handled by the persistence plugin when enabled.
|
|
47
|
+
*
|
|
48
|
+
* @param {Object} opts - The options object.
|
|
49
|
+
* @param {Interpreter} opts.instance - The XState machine interpreter instance.
|
|
50
|
+
* @param {IAgentContext<any>} opts.context - The agent context.
|
|
51
|
+
* @param {MachineStateInit} opts.init - The initial persistence options, containing the unique instanceId.
|
|
52
|
+
* @returns {Promise<void>} - A promise that resolves when the persistence event is emitted.
|
|
53
|
+
*/
|
|
54
|
+
const machineStatePersistOnTransition = (opts) => __awaiter(void 0, void 0, void 0, function* () {
|
|
55
|
+
const { context, init, interpreter } = opts;
|
|
56
|
+
if (!(context.agent.availableMethods().includes('machineStatePersist') && 'machineStatePersist' in context.agent)) {
|
|
57
|
+
console.log(`IMachineStatePersistence was not exposed in the current agent. Disabling machine state persistence events`);
|
|
58
|
+
return;
|
|
59
|
+
}
|
|
60
|
+
// We are using the event counter and evenDate to ensure we do not overwrite newer states. Events could come in out of order
|
|
61
|
+
let _eventCounter = 0;
|
|
62
|
+
// XState persistence plugin is available. So let's emit events on every transition, so it can persist the state
|
|
63
|
+
interpreter.subscribe((state) => {
|
|
64
|
+
(0, stateEventEmitter_1.emitMachineStatePersistEvent)({
|
|
65
|
+
type: types_1.MachineStatePersistEventType.EVERY,
|
|
66
|
+
data: Object.assign(Object.assign({}, init), { state, _eventCounter: _eventCounter++, _eventDate: new Date() }),
|
|
67
|
+
}, context);
|
|
68
|
+
});
|
|
69
|
+
});
|
|
70
|
+
exports.machineStatePersistOnTransition = machineStatePersistOnTransition;
|
|
71
|
+
/**
|
|
72
|
+
* Persist the initial state of a machine and register it with the given machine instance.
|
|
73
|
+
*
|
|
74
|
+
* @param {InitMachineStateArgs & {instance: Interpreter<TContext, TStateSchema, TEvent, TTypestate, TResolvedTypesMeta>, context: IAgentContext<any>}} args - The options for initializing
|
|
75
|
+
* machine state and registering it.
|
|
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.
|
|
77
|
+
*/
|
|
78
|
+
const machineStatePersistRegistration = (args) => __awaiter(void 0, void 0, void 0, function* () {
|
|
79
|
+
var _a, _b;
|
|
80
|
+
const { disablePersistence } = args;
|
|
81
|
+
if (disablePersistence === true) {
|
|
82
|
+
return;
|
|
83
|
+
}
|
|
84
|
+
// We use expires in MS first. If not provided, look at expires at. If not provided, the persistence will not expire
|
|
85
|
+
const expiresAt = args.expireInMS ? new Date(Date.now() + args.expireInMS) : args.expiresAt;
|
|
86
|
+
const machineName = (_b = (_a = args.machineName) !== null && _a !== void 0 ? _a : args.interpreter.machine.id) !== null && _b !== void 0 ? _b : args.interpreter.id;
|
|
87
|
+
const init = yield (0, exports.machineStatePersistInit)(Object.assign(Object.assign({}, args), { machineName, expiresAt }));
|
|
88
|
+
if (init) {
|
|
89
|
+
yield (0, exports.machineStatePersistOnTransition)(Object.assign(Object.assign({}, args), { init }));
|
|
90
|
+
}
|
|
91
|
+
return init;
|
|
92
|
+
});
|
|
93
|
+
exports.machineStatePersistRegistration = machineStatePersistRegistration;
|
|
94
|
+
//# sourceMappingURL=machineRegistration.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"machineRegistration.js","sourceRoot":"","sources":["../../src/functions/machineRegistration.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;AAEA,oCAAsJ;AACtJ,2DAAkE;AAElE;;;;;;;GAOG;AACI,MAAM,uBAAuB,GAAG,CACrC,IAGG,EACoC,EAAE;IACzC,+EAA+E;IAC/E,MAAM,EAAE,OAAO,KAAc,IAAI,EAAb,IAAI,UAAK,IAAI,EAA3B,WAAoB,CAAO,CAAA;IACjC,IAAI,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,gBAAgB,EAAE,CAAC,QAAQ,CAAC,kBAAkB,CAAC,IAAI,kBAAkB,IAAI,OAAO,CAAC,KAAK,CAAC,EAAE;QAC3G,OAAO,CAAC,GAAG,CAAC,wGAAwG,CAAC,CAAA;QACrH,OAAM;KACP;IACD,OAAO,MAAO,OAAmD,CAAC,KAAK,CAAC,gBAAgB,CAAC,IAAI,CAAC,CAAA;AAChG,CAAC,CAAA,CAAA;AAbY,QAAA,uBAAuB,2BAanC;AAED;;;;;;;;;GASG;AACI,MAAM,+BAA+B,GAAG,CAS7C,IAID,EAAiB,EAAE;IAClB,MAAM,EAAE,OAAO,EAAE,IAAI,EAAE,WAAW,EAAE,GAAG,IAAI,CAAA;IAC3C,IAAI,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,gBAAgB,EAAE,CAAC,QAAQ,CAAC,qBAAqB,CAAC,IAAI,qBAAqB,IAAI,OAAO,CAAC,KAAK,CAAC,EAAE;QACjH,OAAO,CAAC,GAAG,CAAC,2GAA2G,CAAC,CAAA;QACxH,OAAM;KACP;IACD,4HAA4H;IAC5H,IAAI,aAAa,GAAG,CAAC,CAAA;IAErB,gHAAgH;IAChH,WAAW,CAAC,SAAS,CAAC,CAAC,KAAK,EAAE,EAAE;QAC9B,IAAA,gDAA4B,EAC1B;YACE,IAAI,EAAE,oCAA4B,CAAC,KAAK;YACxC,IAAI,kCACC,IAAI,KACP,KAAK,EACL,aAAa,EAAE,aAAa,EAAE,EAC9B,UAAU,EAAE,IAAI,IAAI,EAAE,GACvB;SACF,EACD,OAAO,CACR,CAAA;IACH,CAAC,CAAC,CAAA;AACJ,CAAC,CAAA,CAAA;AArCY,QAAA,+BAA+B,mCAqC3C;AAED;;;;;;GAMG;AACI,MAAM,+BAA+B,GAAG,CAU7C,IAKG,EACoC,EAAE;;IACzC,MAAM,EAAE,kBAAkB,EAAE,GAAG,IAAI,CAAA;IACnC,IAAI,kBAAkB,KAAK,IAAI,EAAE;QAC/B,OAAM;KACP;IAED,oHAAoH;IACpH,MAAM,SAAS,GAAG,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAA;IAC3F,MAAM,WAAW,GAAG,MAAA,MAAA,IAAI,CAAC,WAAW,mCAAI,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,EAAE,mCAAI,IAAI,CAAC,WAAW,CAAC,EAAE,CAAA;IAC1F,MAAM,IAAI,GAAG,MAAM,IAAA,+BAAuB,kCAAM,IAAI,KAAE,WAAW,EAAE,SAAS,IAAG,CAAA;IAC/E,IAAI,IAAI,EAAE;QACR,MAAM,IAAA,uCAA+B,kCAAM,IAAI,KAAE,IAAI,IAAG,CAAA;KACzD;IACD,OAAO,IAAI,CAAA;AACb,CAAC,CAAA,CAAA;AA9BY,QAAA,+BAA+B,mCA8B3C"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { MachineStatePersistEvent, RequiredContext } from '../types';
|
|
2
|
+
/**
|
|
3
|
+
* Emits a machine state persistence event.
|
|
4
|
+
*
|
|
5
|
+
* @param {MachineStatePersistEvent} event - The event to be emitted.
|
|
6
|
+
* @param {RequiredContext} context - The required agent context for the event emission.
|
|
7
|
+
* @returns {void}
|
|
8
|
+
*/
|
|
9
|
+
export declare const emitMachineStatePersistEvent: (event: MachineStatePersistEvent, context: RequiredContext) => void;
|
|
10
|
+
//# sourceMappingURL=stateEventEmitter.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"stateEventEmitter.d.ts","sourceRoot":"","sources":["../../src/functions/stateEventEmitter.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,wBAAwB,EAAE,eAAe,EAAE,MAAM,UAAU,CAAA;AAIpE;;;;;;GAMG;AACH,eAAO,MAAM,4BAA4B,UAAW,wBAAwB,mCAG3E,CAAA"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
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');
|
|
9
|
+
/**
|
|
10
|
+
* Emits a machine state persistence event.
|
|
11
|
+
*
|
|
12
|
+
* @param {MachineStatePersistEvent} event - The event to be emitted.
|
|
13
|
+
* @param {RequiredContext} context - The required agent context for the event emission.
|
|
14
|
+
* @returns {void}
|
|
15
|
+
*/
|
|
16
|
+
const emitMachineStatePersistEvent = (event, context) => {
|
|
17
|
+
debug(`Emitting machine state persistence event '${event.type}' with counter: ${event.data._eventCounter}`);
|
|
18
|
+
void context.agent.emit(event.type, event.data);
|
|
19
|
+
};
|
|
20
|
+
exports.emitMachineStatePersistEvent = emitMachineStatePersistEvent;
|
|
21
|
+
//# sourceMappingURL=stateEventEmitter.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"stateEventEmitter.js","sourceRoot":"","sources":["../../src/functions/stateEventEmitter.ts"],"names":[],"mappings":";;;;;;AAAA,kDAAyB;AAGzB,MAAM,KAAK,GAAG,IAAA,eAAK,EAAC,mDAAmD,CAAC,CAAA;AAExE;;;;;;GAMG;AACI,MAAM,4BAA4B,GAAG,CAAC,KAA+B,EAAE,OAAwB,EAAE,EAAE;IACxG,KAAK,CAAC,6CAA6C,KAAK,CAAC,IAAI,mBAAmB,KAAK,CAAC,IAAI,CAAC,aAAa,EAAE,CAAC,CAAA;IAC3G,KAAK,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC,IAAI,CAAC,CAAA;AACjD,CAAC,CAAA;AAHY,QAAA,4BAA4B,gCAGxC"}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
import { StoreMachineStateInfo } from '@sphereon/ssi-sdk.data-store';
|
|
2
|
+
import { State } from 'xstate';
|
|
3
|
+
import { EventObject } from 'xstate/lib/types';
|
|
4
|
+
import { MachineStateInit, MachineStateInitType, MachineStatePersistArgs, SerializableState } from '../types';
|
|
5
|
+
/**
|
|
6
|
+
* Create a machine state info object useful for the store, based on the provided machine info and existing state.
|
|
7
|
+
*
|
|
8
|
+
* @param {MachineStatePersistArgs} machineInfo - The machine info object.
|
|
9
|
+
* @param {Partial<StoreMachineStateInfo>} [existingState] - The optional existing state object.
|
|
10
|
+
* @returns {StoreMachineStateInfo} - The store machine state info object.
|
|
11
|
+
*/
|
|
12
|
+
export declare const machineStateToStoreInfo: (machineInfo: MachineStatePersistArgs, existingState?: Partial<StoreMachineStateInfo>) => StoreMachineStateInfo;
|
|
13
|
+
export declare const storeInfoToMachineInit: (machineState: StoreMachineStateInfo & {
|
|
14
|
+
stateType: MachineStateInitType;
|
|
15
|
+
}) => MachineStateInit;
|
|
16
|
+
/**
|
|
17
|
+
* Serializes a machine state to a string representation.
|
|
18
|
+
*
|
|
19
|
+
* @param {State<T, TEvent> | SerializableState | string} state - The machine state to serialize.
|
|
20
|
+
* @returns {string} - The serialized machine state.
|
|
21
|
+
*/
|
|
22
|
+
export declare const serializeMachineState: <T, TEvent extends EventObject>(state: string | SerializableState | State<T, TEvent, any, {
|
|
23
|
+
value: any;
|
|
24
|
+
context: T;
|
|
25
|
+
}, import("xstate").TypegenDisabled>) => string;
|
|
26
|
+
/**
|
|
27
|
+
* Deserializes a serialized machine state.
|
|
28
|
+
*
|
|
29
|
+
* @template T - The type of the machine's context.
|
|
30
|
+
* @template TEvent - The type of the events that the machine handles.
|
|
31
|
+
* @param {string} state - The serialized machine state.
|
|
32
|
+
* @returns {State<T, TEvent>} - The deserialized machine state.
|
|
33
|
+
*/
|
|
34
|
+
export declare const deserializeMachineState: <T, TEvent extends EventObject>(state: string) => State<T, TEvent, any, {
|
|
35
|
+
value: any;
|
|
36
|
+
context: T;
|
|
37
|
+
}, import("xstate").TypegenDisabled>;
|
|
38
|
+
//# sourceMappingURL=stateMapper.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"stateMapper.d.ts","sourceRoot":"","sources":["../../src/functions/stateMapper.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,qBAAqB,EAAE,MAAM,8BAA8B,CAAA;AACpE,OAAO,EAAE,KAAK,EAAE,MAAM,QAAQ,CAAA;AAC9B,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAA;AAC9C,OAAO,EAAE,gBAAgB,EAAE,oBAAoB,EAAE,uBAAuB,EAAE,iBAAiB,EAAE,MAAM,UAAU,CAAA;AAE7G;;;;;;GAMG;AACH,eAAO,MAAM,uBAAuB,gBACrB,uBAAuB,kBACpB,QAAQ,qBAAqB,CAAC,KAC7C,qBA0BF,CAAA;AACD,eAAO,MAAM,sBAAsB,iBAAkB,qBAAqB,GAAG;IAAE,SAAS,EAAE,oBAAoB,CAAA;CAAE,KAAG,gBAUlH,CAAA;AAED;;;;;GAKG;AACH,eAAO,MAAM,qBAAqB;;;yCAA0F,MAM3H,CAAA;AACD;;;;;;;GAOG;AACH,eAAO,MAAM,uBAAuB,yCAA0C,MAAM;;;oCAEnF,CAAA"}
|
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.deserializeMachineState = exports.serializeMachineState = exports.storeInfoToMachineInit = exports.machineStateToStoreInfo = void 0;
|
|
4
|
+
const xstate_1 = require("xstate");
|
|
5
|
+
/**
|
|
6
|
+
* Create a machine state info object useful for the store, based on the provided machine info and existing state.
|
|
7
|
+
*
|
|
8
|
+
* @param {MachineStatePersistArgs} machineInfo - The machine info object.
|
|
9
|
+
* @param {Partial<StoreMachineStateInfo>} [existingState] - The optional existing state object.
|
|
10
|
+
* @returns {StoreMachineStateInfo} - The store machine state info object.
|
|
11
|
+
*/
|
|
12
|
+
const machineStateToStoreInfo = (machineInfo, existingState) => {
|
|
13
|
+
var _a, _b, _c;
|
|
14
|
+
const { state, machineName, tenantId, expiresAt, instanceId, updatedCount } = machineInfo;
|
|
15
|
+
const existing = existingState !== null && existingState !== void 0 ? existingState : { machineName, createdAt: new Date(), expiresAt };
|
|
16
|
+
const stateInstance = xstate_1.State.create(machineInfo.state);
|
|
17
|
+
let latestStateName = undefined;
|
|
18
|
+
if (stateInstance.value) {
|
|
19
|
+
latestStateName = typeof stateInstance.value === 'string' ? stateInstance.value : JSON.stringify(stateInstance.value);
|
|
20
|
+
}
|
|
21
|
+
if (latestStateName === '{}') {
|
|
22
|
+
latestStateName = undefined;
|
|
23
|
+
}
|
|
24
|
+
return {
|
|
25
|
+
instanceId,
|
|
26
|
+
updatedCount: updatedCount !== null && updatedCount !== void 0 ? updatedCount : ((existing === null || existing === void 0 ? void 0 : existing.updatedCount) ? existing.updatedCount++ : 0),
|
|
27
|
+
sessionId: (_a = stateInstance._sessionid) !== null && _a !== void 0 ? _a : undefined,
|
|
28
|
+
machineName,
|
|
29
|
+
state: (0, exports.serializeMachineState)(state),
|
|
30
|
+
tenantId,
|
|
31
|
+
latestStateName,
|
|
32
|
+
latestEventType: stateInstance.event.type,
|
|
33
|
+
updatedAt: new Date(),
|
|
34
|
+
expiresAt,
|
|
35
|
+
createdAt: (_b = existing.createdAt) !== null && _b !== void 0 ? _b : new Date(),
|
|
36
|
+
completedAt: (_c = existing.completedAt) !== null && _c !== void 0 ? _c : (stateInstance.done ? new Date() : undefined),
|
|
37
|
+
};
|
|
38
|
+
};
|
|
39
|
+
exports.machineStateToStoreInfo = machineStateToStoreInfo;
|
|
40
|
+
const storeInfoToMachineInit = (machineState) => {
|
|
41
|
+
const { instanceId, machineName, tenantId, expiresAt, createdAt, stateType } = machineState;
|
|
42
|
+
return {
|
|
43
|
+
stateType,
|
|
44
|
+
machineName,
|
|
45
|
+
tenantId,
|
|
46
|
+
expiresAt,
|
|
47
|
+
instanceId,
|
|
48
|
+
createdAt,
|
|
49
|
+
};
|
|
50
|
+
};
|
|
51
|
+
exports.storeInfoToMachineInit = storeInfoToMachineInit;
|
|
52
|
+
/**
|
|
53
|
+
* Serializes a machine state to a string representation.
|
|
54
|
+
*
|
|
55
|
+
* @param {State<T, TEvent> | SerializableState | string} state - The machine state to serialize.
|
|
56
|
+
* @returns {string} - The serialized machine state.
|
|
57
|
+
*/
|
|
58
|
+
const serializeMachineState = (state) => {
|
|
59
|
+
if (typeof state === 'string') {
|
|
60
|
+
return state;
|
|
61
|
+
}
|
|
62
|
+
const jsonState = 'toJSON' in state ? state.toJSON() : state;
|
|
63
|
+
return JSON.stringify(jsonState);
|
|
64
|
+
};
|
|
65
|
+
exports.serializeMachineState = serializeMachineState;
|
|
66
|
+
/**
|
|
67
|
+
* Deserializes a serialized machine state.
|
|
68
|
+
*
|
|
69
|
+
* @template T - The type of the machine's context.
|
|
70
|
+
* @template TEvent - The type of the events that the machine handles.
|
|
71
|
+
* @param {string} state - The serialized machine state.
|
|
72
|
+
* @returns {State<T, TEvent>} - The deserialized machine state.
|
|
73
|
+
*/
|
|
74
|
+
const deserializeMachineState = (state) => {
|
|
75
|
+
return xstate_1.State.create(JSON.parse(state));
|
|
76
|
+
};
|
|
77
|
+
exports.deserializeMachineState = deserializeMachineState;
|
|
78
|
+
//# sourceMappingURL=stateMapper.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"stateMapper.js","sourceRoot":"","sources":["../../src/functions/stateMapper.ts"],"names":[],"mappings":";;;AACA,mCAA8B;AAI9B;;;;;;GAMG;AACI,MAAM,uBAAuB,GAAG,CACrC,WAAoC,EACpC,aAA8C,EACvB,EAAE;;IACzB,MAAM,EAAE,KAAK,EAAE,WAAW,EAAE,QAAQ,EAAE,SAAS,EAAE,UAAU,EAAE,YAAY,EAAE,GAAG,WAAW,CAAA;IAEzF,MAAM,QAAQ,GAAmC,aAAa,aAAb,aAAa,cAAb,aAAa,GAAI,EAAE,WAAW,EAAE,SAAS,EAAE,IAAI,IAAI,EAAE,EAAE,SAAS,EAAE,CAAA;IACnH,MAAM,aAAa,GAAG,cAAK,CAAC,MAAM,CAAC,WAAW,CAAC,KAAK,CAAC,CAAA;IACrD,IAAI,eAAe,GAAG,SAAS,CAAA;IAC/B,IAAI,aAAa,CAAC,KAAK,EAAE;QACvB,eAAe,GAAG,OAAO,aAAa,CAAC,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,aAAa,CAAC,KAAK,CAAC,CAAA;KACtH;IACD,IAAI,eAAe,KAAK,IAAI,EAAE;QAC5B,eAAe,GAAG,SAAS,CAAA;KAC5B;IACD,OAAO;QACL,UAAU;QACV,YAAY,EAAE,YAAY,aAAZ,YAAY,cAAZ,YAAY,GAAI,CAAC,CAAA,QAAQ,aAAR,QAAQ,uBAAR,QAAQ,CAAE,YAAY,EAAC,CAAC,CAAC,QAAQ,CAAC,YAAY,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;QACpF,SAAS,EAAE,MAAA,aAAa,CAAC,UAAU,mCAAI,SAAS;QAChD,WAAW;QACX,KAAK,EAAE,IAAA,6BAAqB,EAAC,KAAK,CAAC;QACnC,QAAQ;QACR,eAAe;QACf,eAAe,EAAE,aAAa,CAAC,KAAK,CAAC,IAAI;QACzC,SAAS,EAAE,IAAI,IAAI,EAAE;QACrB,SAAS;QACT,SAAS,EAAE,MAAA,QAAQ,CAAC,SAAS,mCAAI,IAAI,IAAI,EAAE;QAC3C,WAAW,EAAE,MAAA,QAAQ,CAAC,WAAW,mCAAI,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC;KACnF,CAAA;AACH,CAAC,CAAA;AA7BY,QAAA,uBAAuB,2BA6BnC;AACM,MAAM,sBAAsB,GAAG,CAAC,YAAyE,EAAoB,EAAE;IACpI,MAAM,EAAE,UAAU,EAAE,WAAW,EAAE,QAAQ,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,GAAG,YAAY,CAAA;IAC3F,OAAO;QACL,SAAS;QACT,WAAW;QACX,QAAQ;QACR,SAAS;QACT,UAAU;QACV,SAAS;KACV,CAAA;AACH,CAAC,CAAA;AAVY,QAAA,sBAAsB,0BAUlC;AAED;;;;;GAKG;AACI,MAAM,qBAAqB,GAAG,CAAgC,KAAoD,EAAU,EAAE;IACnI,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE;QAC7B,OAAO,KAAK,CAAA;KACb;IACD,MAAM,SAAS,GAAG,QAAQ,IAAI,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,KAAK,CAAA;IAC5D,OAAO,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,CAAA;AAClC,CAAC,CAAA;AANY,QAAA,qBAAqB,yBAMjC;AACD;;;;;;;GAOG;AACI,MAAM,uBAAuB,GAAG,CAAgC,KAAa,EAAoB,EAAE;IACxG,OAAO,cAAK,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAA;AACxC,CAAC,CAAA;AAFY,QAAA,uBAAuB,2BAEnC"}
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,QAAA,MAAM,MAAM,KAAmC,CAAA;AAC/C,OAAO,EAAE,MAAM,EAAE,CAAA;AACjB,cAAc,iCAAiC,CAAA;AAC/C,cAAc,SAAS,CAAA;AACvB,cAAc,aAAa,CAAA"}
|
package/dist/index.js
ADDED
|
@@ -0,0 +1,23 @@
|
|
|
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
|
+
const schema = require('../plugin.schema.json');
|
|
19
|
+
exports.schema = schema;
|
|
20
|
+
__exportStar(require("./agent/MachineStatePersistence"), exports);
|
|
21
|
+
__exportStar(require("./types"), exports);
|
|
22
|
+
__exportStar(require("./functions"), exports);
|
|
23
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;AAAA,MAAM,MAAM,GAAG,OAAO,CAAC,uBAAuB,CAAC,CAAA;AACtC,wBAAM;AACf,kEAA+C;AAC/C,0CAAuB;AACvB,8CAA2B"}
|