@sphereon/ssi-sdk.data-store 0.18.2-unstable.64 → 0.18.2-unstable.67
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/entities/xstatePersistence/StateEntity.d.ts +0 -1
- package/dist/entities/xstatePersistence/StateEntity.d.ts.map +1 -1
- package/dist/entities/xstatePersistence/StateEntity.js +1 -6
- package/dist/entities/xstatePersistence/StateEntity.js.map +1 -1
- package/dist/types/xstatePersistence/IAbstractXStateStore.d.ts +9 -3
- package/dist/types/xstatePersistence/IAbstractXStateStore.d.ts.map +1 -1
- package/dist/xstatePersistence/IAbstractXStateStore.d.ts +2 -1
- package/dist/xstatePersistence/IAbstractXStateStore.d.ts.map +1 -1
- package/dist/xstatePersistence/IAbstractXStateStore.js.map +1 -1
- package/dist/xstatePersistence/XStateStore.d.ts +2 -1
- package/dist/xstatePersistence/XStateStore.d.ts.map +1 -1
- package/dist/xstatePersistence/XStateStore.js +15 -5
- package/dist/xstatePersistence/XStateStore.js.map +1 -1
- package/package.json +4 -4
- package/src/__tests__/xstatePersistence.entities.test.ts +1 -3
- package/src/__tests__/xstatePersistence.store.test.ts +61 -7
- package/src/entities/xstatePersistence/StateEntity.ts +1 -5
- package/src/types/xstatePersistence/IAbstractXStateStore.ts +9 -3
- package/src/xstatePersistence/IAbstractXStateStore.ts +2 -1
- package/src/xstatePersistence/XStateStore.ts +18 -6
|
@@ -8,7 +8,6 @@ export declare class StateEntity extends BaseEntity {
|
|
|
8
8
|
updatedAt: Date;
|
|
9
9
|
completedAt?: Date;
|
|
10
10
|
tenantId?: string;
|
|
11
|
-
ttl: number;
|
|
12
11
|
}
|
|
13
12
|
export declare const stateEntityFrom: (args: NonPersistedXStateStoreEvent) => StateEntity;
|
|
14
13
|
//# sourceMappingURL=StateEntity.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"StateEntity.d.ts","sourceRoot":"","sources":["../../../src/entities/xstatePersistence/StateEntity.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,UAAU,EAA6E,MAAM,SAAS,CAAA;AAC9G,OAAO,EAAC,4BAA4B,EAAC,MAAM,aAAa,CAAC;AAEzD,qBACa,WAAY,SAAQ,UAAU;IAEvC,EAAE,EAAG,MAAM,CAAA;IAGX,KAAK,EAAG,MAAM,CAAA;IAGd,IAAI,EAAG,MAAM,CAAA;IAGb,SAAS,EAAG,IAAI,CAAA;IAGhB,SAAS,EAAG,IAAI,CAAA;IAGhB,WAAW,CAAC,EAAE,IAAI,CAAA;IAGlB,QAAQ,CAAC,EAAE,MAAM,CAAA;
|
|
1
|
+
{"version":3,"file":"StateEntity.d.ts","sourceRoot":"","sources":["../../../src/entities/xstatePersistence/StateEntity.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,UAAU,EAA6E,MAAM,SAAS,CAAA;AAC9G,OAAO,EAAC,4BAA4B,EAAC,MAAM,aAAa,CAAC;AAEzD,qBACa,WAAY,SAAQ,UAAU;IAEvC,EAAE,EAAG,MAAM,CAAA;IAGX,KAAK,EAAG,MAAM,CAAA;IAGd,IAAI,EAAG,MAAM,CAAA;IAGb,SAAS,EAAG,IAAI,CAAA;IAGhB,SAAS,EAAG,IAAI,CAAA;IAGhB,WAAW,CAAC,EAAE,IAAI,CAAA;IAGlB,QAAQ,CAAC,EAAE,MAAM,CAAA;CACpB;AAED,eAAO,MAAM,eAAe,SAAU,4BAA4B,KAAG,WAOpE,CAAA"}
|
|
@@ -34,17 +34,13 @@ __decorate([
|
|
|
34
34
|
__metadata("design:type", Date)
|
|
35
35
|
], StateEntity.prototype, "updatedAt", void 0);
|
|
36
36
|
__decorate([
|
|
37
|
-
(0, typeorm_1.Column)({ name: 'completed_at', type: '
|
|
37
|
+
(0, typeorm_1.Column)({ name: 'completed_at', type: 'datetime', nullable: true }),
|
|
38
38
|
__metadata("design:type", Date)
|
|
39
39
|
], StateEntity.prototype, "completedAt", void 0);
|
|
40
40
|
__decorate([
|
|
41
41
|
(0, typeorm_1.Column)({ name: 'tenant_id', type: 'varchar', nullable: true }),
|
|
42
42
|
__metadata("design:type", String)
|
|
43
43
|
], StateEntity.prototype, "tenantId", void 0);
|
|
44
|
-
__decorate([
|
|
45
|
-
(0, typeorm_1.Column)({ name: 'ttl', default: 0 }),
|
|
46
|
-
__metadata("design:type", Number)
|
|
47
|
-
], StateEntity.prototype, "ttl", void 0);
|
|
48
44
|
StateEntity = __decorate([
|
|
49
45
|
(0, typeorm_1.Entity)('StateEntity')
|
|
50
46
|
], StateEntity);
|
|
@@ -55,7 +51,6 @@ const stateEntityFrom = (args) => {
|
|
|
55
51
|
stateEntity.type = args.type;
|
|
56
52
|
stateEntity.completedAt = args.completedAt;
|
|
57
53
|
stateEntity.tenantId = args.tenantId;
|
|
58
|
-
stateEntity.ttl = args.ttl;
|
|
59
54
|
return stateEntity;
|
|
60
55
|
};
|
|
61
56
|
exports.stateEntityFrom = stateEntityFrom;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"StateEntity.js","sourceRoot":"","sources":["../../../src/entities/xstatePersistence/StateEntity.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,qCAA8G;AAIvG,IAAM,WAAW,GAAjB,MAAM,WAAY,SAAQ,oBAAU;
|
|
1
|
+
{"version":3,"file":"StateEntity.js","sourceRoot":"","sources":["../../../src/entities/xstatePersistence/StateEntity.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,qCAA8G;AAIvG,IAAM,WAAW,GAAjB,MAAM,WAAY,SAAQ,oBAAU;CAqB1C,CAAA;AApBG;IAAC,IAAA,gCAAsB,EAAC,MAAM,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC;;uCACpC;AAEX;IAAC,IAAA,gBAAM,EAAC,EAAE,IAAI,EAAE,OAAO,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC;;0CAC7B;AAEd;IAAC,IAAA,gBAAM,EAAC,EAAE,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC;;yCAC7B;AAEb;IAAC,IAAA,0BAAgB,EAAC,EAAE,IAAI,EAAE,YAAY,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC;8BAC9C,IAAI;8CAAA;AAEhB;IAAC,IAAA,0BAAgB,EAAC,EAAE,IAAI,EAAE,YAAY,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC;8BAC9C,IAAI;8CAAA;AAEhB;IAAC,IAAA,gBAAM,EAAC,EAAE,IAAI,EAAE,cAAc,EAAE,IAAI,EAAE,UAAU,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;8BACrD,IAAI;gDAAA;AAElB;IAAC,IAAA,gBAAM,EAAC,EAAE,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,SAAS,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;;6CAC9C;AApBR,WAAW;IADvB,IAAA,gBAAM,EAAC,aAAa,CAAC;GACT,WAAW,CAqBvB;AArBY,kCAAW;AAuBjB,MAAM,eAAe,GAAG,CAAC,IAAkC,EAAe,EAAE;IAC/E,MAAM,WAAW,GAAG,IAAI,WAAW,EAAE,CAAA;IACrC,WAAW,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,CAAA;IAC9B,WAAW,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI,CAAA;IAC5B,WAAW,CAAC,WAAW,GAAG,IAAI,CAAC,WAAW,CAAA;IAC1C,WAAW,CAAC,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAA;IACpC,OAAO,WAAW,CAAA;AACtB,CAAC,CAAA;AAPY,QAAA,eAAe,mBAO3B"}
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { ObjectLiteral } from "typeorm";
|
|
1
2
|
export type SaveStateArgs = {
|
|
2
3
|
state: string;
|
|
3
4
|
type: string;
|
|
@@ -5,11 +6,17 @@ export type SaveStateArgs = {
|
|
|
5
6
|
updatedAt?: Date;
|
|
6
7
|
completedAt?: Date;
|
|
7
8
|
tenantId?: string;
|
|
8
|
-
ttl: number;
|
|
9
9
|
};
|
|
10
10
|
export type GetStateArgs = Pick<SaveStateArgs, 'type'>;
|
|
11
|
+
export type FindStatesArgs = Partial<SaveStateArgs>;
|
|
12
|
+
export type GetStatesArgs = {
|
|
13
|
+
filter: FindStatesArgs;
|
|
14
|
+
};
|
|
11
15
|
export type NonPersistedXStateStoreEvent = SaveStateArgs;
|
|
12
|
-
export type DeleteStateArgs =
|
|
16
|
+
export type DeleteStateArgs = {
|
|
17
|
+
where: string;
|
|
18
|
+
parameters?: ObjectLiteral;
|
|
19
|
+
};
|
|
13
20
|
export type VoidResult = void;
|
|
14
21
|
export type State = {
|
|
15
22
|
state: string;
|
|
@@ -18,6 +25,5 @@ export type State = {
|
|
|
18
25
|
updatedAt: Date;
|
|
19
26
|
completedAt?: Date;
|
|
20
27
|
tenantId?: string;
|
|
21
|
-
ttl: number;
|
|
22
28
|
};
|
|
23
29
|
//# sourceMappingURL=IAbstractXStateStore.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"IAbstractXStateStore.d.ts","sourceRoot":"","sources":["../../../src/types/xstatePersistence/IAbstractXStateStore.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,aAAa,GAAG;IACxB,KAAK,EAAE,MAAM,CAAA;IACb,IAAI,EAAE,MAAM,CAAA;IACZ,SAAS,CAAC,EAAE,IAAI,CAAA;IAChB,SAAS,CAAC,EAAE,IAAI,CAAA;IAChB,WAAW,CAAC,EAAE,IAAI,CAAA;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAA;
|
|
1
|
+
{"version":3,"file":"IAbstractXStateStore.d.ts","sourceRoot":"","sources":["../../../src/types/xstatePersistence/IAbstractXStateStore.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,aAAa,EAAC,MAAM,SAAS,CAAC;AAEtC,MAAM,MAAM,aAAa,GAAG;IACxB,KAAK,EAAE,MAAM,CAAA;IACb,IAAI,EAAE,MAAM,CAAA;IACZ,SAAS,CAAC,EAAE,IAAI,CAAA;IAChB,SAAS,CAAC,EAAE,IAAI,CAAA;IAChB,WAAW,CAAC,EAAE,IAAI,CAAA;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAA;CACpB,CAAA;AAED,MAAM,MAAM,YAAY,GAAG,IAAI,CAAC,aAAa,EAAE,MAAM,CAAC,CAAA;AAEtD,MAAM,MAAM,cAAc,GAAG,OAAO,CAAC,aAAa,CAAC,CAAA;AAEnD,MAAM,MAAM,aAAa,GAAG;IACxB,MAAM,EAAE,cAAc,CAAA;CACzB,CAAA;AAED,MAAM,MAAM,4BAA4B,GAAG,aAAa,CAAA;AAExD,MAAM,MAAM,eAAe,GAAG;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,UAAU,CAAC,EAAE,aAAa,CAAA;CAAE,CAAA;AAE3E,MAAM,MAAM,UAAU,GAAG,IAAI,CAAA;AAE7B,MAAM,MAAM,KAAK,GAAG;IAChB,KAAK,EAAE,MAAM,CAAA;IACb,IAAI,EAAE,MAAM,CAAA;IACZ,SAAS,EAAE,IAAI,CAAA;IACf,SAAS,EAAE,IAAI,CAAA;IACf,WAAW,CAAC,EAAE,IAAI,CAAA;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAA;CACpB,CAAA"}
|
|
@@ -1,7 +1,8 @@
|
|
|
1
|
-
import { DeleteStateArgs, GetStateArgs, SaveStateArgs, State, VoidResult } from "../types";
|
|
1
|
+
import { DeleteStateArgs, GetStateArgs, GetStatesArgs, SaveStateArgs, State, VoidResult } from "../types";
|
|
2
2
|
export declare abstract class IAbstractXStateStore {
|
|
3
3
|
abstract saveState(state: SaveStateArgs): Promise<State>;
|
|
4
4
|
abstract getState(args: GetStateArgs): Promise<State>;
|
|
5
|
+
abstract getStates(args?: GetStatesArgs): Promise<Array<State>>;
|
|
5
6
|
abstract deleteState(args: DeleteStateArgs): Promise<VoidResult>;
|
|
6
7
|
}
|
|
7
8
|
//# sourceMappingURL=IAbstractXStateStore.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"IAbstractXStateStore.d.ts","sourceRoot":"","sources":["../../src/xstatePersistence/IAbstractXStateStore.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,eAAe,EAAE,YAAY,EAAE,aAAa,EAAE,KAAK,EAAE,UAAU,EAAC,MAAM,UAAU,CAAC;
|
|
1
|
+
{"version":3,"file":"IAbstractXStateStore.d.ts","sourceRoot":"","sources":["../../src/xstatePersistence/IAbstractXStateStore.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,eAAe,EAAE,YAAY,EAAE,aAAa,EAAE,aAAa,EAAE,KAAK,EAAE,UAAU,EAAC,MAAM,UAAU,CAAC;AAExG,8BAAsB,oBAAoB;IACtC,QAAQ,CAAC,SAAS,CAAC,KAAK,EAAE,aAAa,GAAG,OAAO,CAAC,KAAK,CAAC;IACxD,QAAQ,CAAC,QAAQ,CAAC,IAAI,EAAE,YAAY,GAAG,OAAO,CAAC,KAAK,CAAC;IACrD,QAAQ,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE,aAAa,GAAG,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;IAC/D,QAAQ,CAAC,WAAW,CAAC,IAAI,EAAE,eAAe,GAAG,OAAO,CAAC,UAAU,CAAC;CACnE"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"IAbstractXStateStore.js","sourceRoot":"","sources":["../../src/xstatePersistence/IAbstractXStateStore.ts"],"names":[],"mappings":";;;AAEA,MAAsB,oBAAoB;
|
|
1
|
+
{"version":3,"file":"IAbstractXStateStore.js","sourceRoot":"","sources":["../../src/xstatePersistence/IAbstractXStateStore.ts"],"names":[],"mappings":";;;AAEA,MAAsB,oBAAoB;CAKzC;AALD,oDAKC"}
|
|
@@ -1,12 +1,13 @@
|
|
|
1
1
|
import { OrPromise } from "@sphereon/ssi-types";
|
|
2
2
|
import { DataSource } from "typeorm";
|
|
3
|
-
import { DeleteStateArgs, GetStateArgs, SaveStateArgs, State, VoidResult } from "../types";
|
|
3
|
+
import { DeleteStateArgs, GetStateArgs, GetStatesArgs, SaveStateArgs, State, VoidResult } from "../types";
|
|
4
4
|
import { IAbstractXStateStore } from "./IAbstractXStateStore";
|
|
5
5
|
export declare class XStateStore extends IAbstractXStateStore {
|
|
6
6
|
private readonly dbConnection;
|
|
7
7
|
constructor(dbConnection: OrPromise<DataSource>);
|
|
8
8
|
saveState(state: SaveStateArgs): Promise<State>;
|
|
9
9
|
getState(args: GetStateArgs): Promise<State>;
|
|
10
|
+
getStates(args?: GetStatesArgs): Promise<Array<State>>;
|
|
10
11
|
deleteState(args: DeleteStateArgs): Promise<VoidResult>;
|
|
11
12
|
private stateFrom;
|
|
12
13
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"XStateStore.d.ts","sourceRoot":"","sources":["../../src/xstatePersistence/XStateStore.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,SAAS,EAAC,MAAM,qBAAqB,CAAC;AAE9C,OAAO,EAAC,UAAU,EAAC,MAAM,SAAS,CAAC;AAGnC,OAAO,EAAC,eAAe,EAAE,YAAY,EAAE,aAAa,EAAE,KAAK,EAAE,UAAU,EAAE,MAAM,UAAU,CAAC;
|
|
1
|
+
{"version":3,"file":"XStateStore.d.ts","sourceRoot":"","sources":["../../src/xstatePersistence/XStateStore.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,SAAS,EAAC,MAAM,qBAAqB,CAAC;AAE9C,OAAO,EAAC,UAAU,EAAC,MAAM,SAAS,CAAC;AAGnC,OAAO,EAAC,eAAe,EAAE,YAAY,EAAE,aAAa,EAAE,aAAa,EAAE,KAAK,EAAE,UAAU,EAAE,MAAM,UAAU,CAAC;AACzG,OAAO,EAAC,oBAAoB,EAAC,MAAM,wBAAwB,CAAC;AAI5D,qBAAa,WAAY,SAAQ,oBAAoB;IACjD,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAuB;gBAExC,YAAY,EAAE,SAAS,CAAC,UAAU,CAAC;IAKzC,SAAS,CAAC,KAAK,EAAE,aAAa,GAAG,OAAO,CAAC,KAAK,CAAC;IAM/C,QAAQ,CAAC,IAAI,EAAE,YAAY,GAAG,OAAO,CAAC,KAAK,CAAC;IAa5C,SAAS,CAAC,IAAI,CAAC,EAAE,aAAa,GAAG,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;IAUtD,WAAW,CAAC,IAAI,EAAE,eAAe,GAAG,OAAO,CAAC,UAAU,CAAC;IAU7D,OAAO,CAAC,SAAS,CAShB;CACJ"}
|
|
@@ -27,8 +27,7 @@ class XStateStore extends IAbstractXStateStore_1.IAbstractXStateStore {
|
|
|
27
27
|
createdAt: state.createdAt,
|
|
28
28
|
updatedAt: state.updatedAt,
|
|
29
29
|
completedAt: state.completedAt,
|
|
30
|
-
tenantId: state.tenantId
|
|
31
|
-
ttl: state.ttl
|
|
30
|
+
tenantId: state.tenantId
|
|
32
31
|
};
|
|
33
32
|
};
|
|
34
33
|
this.dbConnection = dbConnection;
|
|
@@ -54,12 +53,23 @@ class XStateStore extends IAbstractXStateStore_1.IAbstractXStateStore {
|
|
|
54
53
|
return this.stateFrom(result);
|
|
55
54
|
});
|
|
56
55
|
}
|
|
56
|
+
getStates(args) {
|
|
57
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
58
|
+
const connection = yield this.dbConnection; // TODO apply everywhere
|
|
59
|
+
debug('Getting states', args);
|
|
60
|
+
const result = yield connection.getRepository(StateEntity_1.StateEntity).find(Object.assign({}, ((args === null || args === void 0 ? void 0 : args.filter) && { where: args === null || args === void 0 ? void 0 : args.filter })));
|
|
61
|
+
return result.map((event) => this.stateFrom(event));
|
|
62
|
+
});
|
|
63
|
+
}
|
|
57
64
|
deleteState(args) {
|
|
58
65
|
return __awaiter(this, void 0, void 0, function* () {
|
|
59
66
|
const connection = yield this.dbConnection;
|
|
60
|
-
debug(`Executing deleteState query with
|
|
61
|
-
yield connection.
|
|
62
|
-
.delete(
|
|
67
|
+
debug(`Executing deleteState query with where clause: ${args.where} and params: ${JSON.stringify(args.parameters)}`);
|
|
68
|
+
yield connection.createQueryBuilder()
|
|
69
|
+
.delete()
|
|
70
|
+
.from(StateEntity_1.StateEntity)
|
|
71
|
+
.where(args.where, args.parameters)
|
|
72
|
+
.execute();
|
|
63
73
|
});
|
|
64
74
|
}
|
|
65
75
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"XStateStore.js","sourceRoot":"","sources":["../../src/xstatePersistence/XStateStore.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;AACA,kDAAyB;AAGzB,2EAAsE;AAEtE,iEAA4D;AAE5D,MAAM,KAAK,GAAG,IAAA,eAAK,EAAC,oCAAoC,CAAC,CAAA;AAEzD,MAAa,WAAY,SAAQ,2CAAoB;IAGjD,YAAY,YAAmC;QAC3C,KAAK,EAAE,CAAA;
|
|
1
|
+
{"version":3,"file":"XStateStore.js","sourceRoot":"","sources":["../../src/xstatePersistence/XStateStore.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;AACA,kDAAyB;AAGzB,2EAAsE;AAEtE,iEAA4D;AAE5D,MAAM,KAAK,GAAG,IAAA,eAAK,EAAC,oCAAoC,CAAC,CAAA;AAEzD,MAAa,WAAY,SAAQ,2CAAoB;IAGjD,YAAY,YAAmC;QAC3C,KAAK,EAAE,CAAA;QA2CH,cAAS,GAAG,CAAC,KAAkB,EAAS,EAAE;YAC9C,OAAO;gBACH,KAAK,EAAE,KAAK,CAAC,EAAE;gBACf,IAAI,EAAE,KAAK,CAAC,IAAI;gBAChB,SAAS,EAAE,KAAK,CAAC,SAAS;gBAC1B,SAAS,EAAE,KAAK,CAAC,SAAS;gBAC1B,WAAW,EAAE,KAAK,CAAC,WAAW;gBAC9B,QAAQ,EAAE,KAAK,CAAC,QAAQ;aAC3B,CAAA;QACL,CAAC,CAAA;QAnDG,IAAI,CAAC,YAAY,GAAG,YAAY,CAAA;IACpC,CAAC;IAEK,SAAS,CAAC,KAAoB;;YAChC,MAAM,UAAU,GAAe,MAAM,IAAI,CAAC,YAAY,CAAA;YACtD,KAAK,CAAC,mCAAmC,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,EAAE,CAAC,CAAA;YACjE,OAAO,UAAU,CAAC,aAAa,CAAC,yBAAW,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAC7D,CAAC;KAAA;IAEK,QAAQ,CAAC,IAAkB;;YAC7B,MAAM,UAAU,GAAe,MAAM,IAAI,CAAC,YAAY,CAAA;YACtD,KAAK,CAAC,wCAAwC,IAAI,CAAC,IAAI,EAAE,CAAC,CAAA;YAC1D,MAAM,MAAM,GAAuB,MAAM,UAAU,CAAC,aAAa,CAAC,yBAAW,CAAC;iBACzE,OAAO,CAAC;gBACL,KAAK,EAAE,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE;aAC7B,CAAC,CAAA;YACN,IAAI,CAAC,MAAM,EAAE;gBACT,OAAO,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,4BAA4B,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,CAAA;aACxE;YACD,OAAO,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAA;QACjC,CAAC;KAAA;IAEK,SAAS,CAAC,IAAoB;;YAChC,MAAM,UAAU,GAAe,MAAM,IAAI,CAAC,YAAY,CAAA,CAAC,wBAAwB;YAC/E,KAAK,CAAC,gBAAgB,EAAE,IAAI,CAAC,CAAA;YAC7B,MAAM,MAAM,GAAuB,MAAM,UAAU,CAAC,aAAa,CAAC,yBAAW,CAAC,CAAC,IAAI,mBAC5E,CAAC,CAAA,IAAI,aAAJ,IAAI,uBAAJ,IAAI,CAAE,MAAM,KAAI,EAAE,KAAK,EAAE,IAAI,aAAJ,IAAI,uBAAJ,IAAI,CAAE,MAAM,EAAE,CAAC,EAC9C,CAAA;YAEF,OAAO,MAAM,CAAC,GAAG,CAAC,CAAC,KAAkB,EAAE,EAAE,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,CAAA;QACpE,CAAC;KAAA;IAEK,WAAW,CAAC,IAAqB;;YACnC,MAAM,UAAU,GAAe,MAAM,IAAI,CAAC,YAAY,CAAA;YACtD,KAAK,CAAC,kDAAkD,IAAI,CAAC,KAAK,gBAAgB,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,UAAU,CAAC,EAAE,CAAC,CAAA;YACpH,MAAM,UAAU,CAAC,kBAAkB,EAAE;iBAChC,MAAM,EAAE;iBACR,IAAI,CAAC,yBAAW,CAAC;iBACjB,KAAK,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,UAAU,CAAC;iBAClC,OAAO,EAAE,CAAA;QAClB,CAAC;KAAA;CAYJ;AAzDD,kCAyDC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@sphereon/ssi-sdk.data-store",
|
|
3
|
-
"version": "0.18.2-unstable.
|
|
3
|
+
"version": "0.18.2-unstable.67+3c9bd888",
|
|
4
4
|
"source": "src/index.ts",
|
|
5
5
|
"main": "dist/index.js",
|
|
6
6
|
"types": "dist/index.d.ts",
|
|
@@ -13,8 +13,8 @@
|
|
|
13
13
|
"typeorm-postgres:migration:run": "pnpm run typeorm -- migration:run -c migration-postgres"
|
|
14
14
|
},
|
|
15
15
|
"dependencies": {
|
|
16
|
-
"@sphereon/ssi-sdk.core": "0.18.2-unstable.
|
|
17
|
-
"@sphereon/ssi-types": "0.18.2-unstable.
|
|
16
|
+
"@sphereon/ssi-sdk.core": "0.18.2-unstable.67+3c9bd888",
|
|
17
|
+
"@sphereon/ssi-types": "0.18.2-unstable.67+3c9bd888",
|
|
18
18
|
"@veramo/core": "4.2.0",
|
|
19
19
|
"class-validator": "^0.14.0",
|
|
20
20
|
"debug": "^4.3.4",
|
|
@@ -43,5 +43,5 @@
|
|
|
43
43
|
"PostgreSQL",
|
|
44
44
|
"Contact Store"
|
|
45
45
|
],
|
|
46
|
-
"gitHead": "
|
|
46
|
+
"gitHead": "3c9bd88842928319f8e8c72d0b17c82b7c84010e"
|
|
47
47
|
}
|
|
@@ -29,8 +29,7 @@ describe('Database entities tests', (): void => {
|
|
|
29
29
|
state: 'test_state',
|
|
30
30
|
type: 'b40b8474-58a2-4b23-9fde-bd6ee1902cdb',
|
|
31
31
|
completedAt: new Date(),
|
|
32
|
-
tenantId: 'test_tenant_id'
|
|
33
|
-
ttl: 30000
|
|
32
|
+
tenantId: 'test_tenant_id'
|
|
34
33
|
}
|
|
35
34
|
|
|
36
35
|
const xstateEventEntity: StateEntity = stateEntityFrom(xstateEvent)
|
|
@@ -41,7 +40,6 @@ describe('Database entities tests', (): void => {
|
|
|
41
40
|
expect(fromDb?.type).toEqual(xstateEvent.type)
|
|
42
41
|
expect(fromDb?.state).toEqual(xstateEvent.state)
|
|
43
42
|
expect(fromDb?.tenantId).toEqual(xstateEvent.tenantId)
|
|
44
|
-
expect(fromDb?.ttl).toEqual(xstateEvent.ttl)
|
|
45
43
|
expect(fromDb?.completedAt).toEqual(xstateEvent.completedAt)
|
|
46
44
|
})
|
|
47
45
|
})
|
|
@@ -10,7 +10,7 @@ describe('Database entities tests', (): void => {
|
|
|
10
10
|
dbConnection = await new DataSource({
|
|
11
11
|
type: 'sqlite',
|
|
12
12
|
database: ':memory:',
|
|
13
|
-
|
|
13
|
+
logging: 'all',
|
|
14
14
|
migrationsRun: false,
|
|
15
15
|
migrations: DataStoreXStateStoreMigrations,
|
|
16
16
|
synchronize: false,
|
|
@@ -32,21 +32,37 @@ describe('Database entities tests', (): void => {
|
|
|
32
32
|
createdAt: new Date(),
|
|
33
33
|
updatedAt: new Date(),
|
|
34
34
|
completedAt: new Date(),
|
|
35
|
-
tenantId: 'test_tenant_id'
|
|
36
|
-
ttl: 30000
|
|
35
|
+
tenantId: 'test_tenant_id'
|
|
37
36
|
}
|
|
38
37
|
|
|
39
38
|
const savedXStoreEvent: State = await xstateStore.saveState(xstateEvent)
|
|
40
39
|
expect(savedXStoreEvent).toBeDefined()
|
|
41
40
|
})
|
|
42
41
|
|
|
43
|
-
it('should
|
|
42
|
+
it('should get all state events', async (): Promise<void> => {
|
|
44
43
|
const xstateEvent: NonPersistedXStateStoreEvent = {
|
|
45
44
|
state: 'test_state',
|
|
46
45
|
type: 'b40b8474-58a2-4b23-9fde-bd6ee1902cdb',
|
|
47
46
|
completedAt: new Date(),
|
|
48
|
-
tenantId: 'test_tenant_id'
|
|
49
|
-
|
|
47
|
+
tenantId: 'test_tenant_id'
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
const stateEvent1: NonPersistedXStateStoreEvent = await xstateStore.saveState({...xstateEvent})
|
|
51
|
+
expect(stateEvent1).toBeDefined()
|
|
52
|
+
|
|
53
|
+
const stateEvent2: NonPersistedXStateStoreEvent = await xstateStore.saveState({...xstateEvent})
|
|
54
|
+
expect(stateEvent2).toBeDefined()
|
|
55
|
+
|
|
56
|
+
const result: Array<State> = await xstateStore.getStates()
|
|
57
|
+
expect(result).toHaveLength(2)
|
|
58
|
+
})
|
|
59
|
+
|
|
60
|
+
it('should retrieve an xstate event', async (): Promise<void> => {
|
|
61
|
+
const xstateEvent: NonPersistedXStateStoreEvent = {
|
|
62
|
+
state: 'test_state',
|
|
63
|
+
type: 'b40b8474-58a2-4b23-9fde-bd6ee1902cdb',
|
|
64
|
+
completedAt: new Date(),
|
|
65
|
+
tenantId: 'test_tenant_id'
|
|
50
66
|
}
|
|
51
67
|
|
|
52
68
|
const savedXStoreEvent1: State = await xstateStore.saveState(xstateEvent)
|
|
@@ -56,11 +72,49 @@ describe('Database entities tests', (): void => {
|
|
|
56
72
|
expect(result).toBeDefined()
|
|
57
73
|
})
|
|
58
74
|
|
|
59
|
-
it('should return
|
|
75
|
+
it('should return an error if type filter does not match', async (): Promise<void> => {
|
|
60
76
|
const args: GetStateArgs = {
|
|
61
77
|
type: 'unknown_event'
|
|
62
78
|
}
|
|
63
79
|
|
|
64
80
|
await expect(xstateStore.getState(args)).rejects.toEqual(Error('No state found for type: unknown_event'))
|
|
65
81
|
})
|
|
82
|
+
|
|
83
|
+
it('should delete the expired records', async () => {
|
|
84
|
+
const now = new Date()
|
|
85
|
+
const newestXstateEvent: NonPersistedXStateStoreEvent = {
|
|
86
|
+
state: 'test_state',
|
|
87
|
+
type: 'test_type_1',
|
|
88
|
+
createdAt: now,
|
|
89
|
+
completedAt: new Date(),
|
|
90
|
+
tenantId: 'test_tenant_id'
|
|
91
|
+
}
|
|
92
|
+
const middleXstateEvent: NonPersistedXStateStoreEvent = {
|
|
93
|
+
state: 'test_state',
|
|
94
|
+
type: 'test_type_2',
|
|
95
|
+
createdAt: new Date(+now - 30000),
|
|
96
|
+
completedAt: new Date(),
|
|
97
|
+
tenantId: 'test_tenant_id'
|
|
98
|
+
}
|
|
99
|
+
|
|
100
|
+
const oldestXstateEvent: NonPersistedXStateStoreEvent = {
|
|
101
|
+
state: 'test_state',
|
|
102
|
+
type: 'test_type_3',
|
|
103
|
+
createdAt: new Date(+now - 60000),
|
|
104
|
+
completedAt: new Date(),
|
|
105
|
+
tenantId: 'test_tenant_id'
|
|
106
|
+
}
|
|
107
|
+
|
|
108
|
+
await xstateStore.saveState(oldestXstateEvent)
|
|
109
|
+
await xstateStore.saveState(middleXstateEvent)
|
|
110
|
+
await xstateStore.saveState(newestXstateEvent)
|
|
111
|
+
|
|
112
|
+
await xstateStore.deleteState({
|
|
113
|
+
where: `created_at < datetime('now', :ttl)`, parameters: { ttl: '-30 seconds' }
|
|
114
|
+
})
|
|
115
|
+
|
|
116
|
+
await expect(xstateStore.getState({ type: 'test_type_1'})).resolves.toBeDefined()
|
|
117
|
+
await expect(xstateStore.getState({ type: 'test_type_2'})).resolves.toBeDefined()
|
|
118
|
+
await expect(xstateStore.getState({ type: 'test_type_3'})).rejects.toEqual(Error('No state found for type: test_type_3'))
|
|
119
|
+
})
|
|
66
120
|
})
|
|
@@ -18,14 +18,11 @@ export class StateEntity extends BaseEntity {
|
|
|
18
18
|
@UpdateDateColumn({ name: 'updated_at', nullable: false })
|
|
19
19
|
updatedAt!: Date
|
|
20
20
|
|
|
21
|
-
@Column({ name: 'completed_at', type: '
|
|
21
|
+
@Column({ name: 'completed_at', type: 'datetime', nullable: true })
|
|
22
22
|
completedAt?: Date
|
|
23
23
|
|
|
24
24
|
@Column({ name: 'tenant_id', type: 'varchar', nullable: true })
|
|
25
25
|
tenantId?: string
|
|
26
|
-
|
|
27
|
-
@Column({ name: 'ttl', default: 0 })
|
|
28
|
-
ttl!: number
|
|
29
26
|
}
|
|
30
27
|
|
|
31
28
|
export const stateEntityFrom = (args: NonPersistedXStateStoreEvent): StateEntity => {
|
|
@@ -34,6 +31,5 @@ export const stateEntityFrom = (args: NonPersistedXStateStoreEvent): StateEntity
|
|
|
34
31
|
stateEntity.type = args.type
|
|
35
32
|
stateEntity.completedAt = args.completedAt
|
|
36
33
|
stateEntity.tenantId = args.tenantId
|
|
37
|
-
stateEntity.ttl = args.ttl
|
|
38
34
|
return stateEntity
|
|
39
35
|
}
|
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
import {ObjectLiteral} from "typeorm";
|
|
2
|
+
|
|
1
3
|
export type SaveStateArgs = {
|
|
2
4
|
state: string
|
|
3
5
|
type: string
|
|
@@ -5,14 +7,19 @@ export type SaveStateArgs = {
|
|
|
5
7
|
updatedAt?: Date
|
|
6
8
|
completedAt?: Date
|
|
7
9
|
tenantId?: string
|
|
8
|
-
ttl: number
|
|
9
10
|
}
|
|
10
11
|
|
|
11
12
|
export type GetStateArgs = Pick<SaveStateArgs, 'type'>
|
|
12
13
|
|
|
14
|
+
export type FindStatesArgs = Partial<SaveStateArgs>
|
|
15
|
+
|
|
16
|
+
export type GetStatesArgs = {
|
|
17
|
+
filter: FindStatesArgs
|
|
18
|
+
}
|
|
19
|
+
|
|
13
20
|
export type NonPersistedXStateStoreEvent = SaveStateArgs
|
|
14
21
|
|
|
15
|
-
export type DeleteStateArgs =
|
|
22
|
+
export type DeleteStateArgs = { where: string, parameters?: ObjectLiteral }
|
|
16
23
|
|
|
17
24
|
export type VoidResult = void
|
|
18
25
|
|
|
@@ -23,5 +30,4 @@ export type State = {
|
|
|
23
30
|
updatedAt: Date
|
|
24
31
|
completedAt?: Date
|
|
25
32
|
tenantId?: string
|
|
26
|
-
ttl: number
|
|
27
33
|
}
|
|
@@ -1,7 +1,8 @@
|
|
|
1
|
-
import {DeleteStateArgs, GetStateArgs, SaveStateArgs, State, VoidResult} from "../types";
|
|
1
|
+
import {DeleteStateArgs, GetStateArgs, GetStatesArgs, SaveStateArgs, State, VoidResult} from "../types";
|
|
2
2
|
|
|
3
3
|
export abstract class IAbstractXStateStore {
|
|
4
4
|
abstract saveState(state: SaveStateArgs): Promise<State>
|
|
5
5
|
abstract getState(args: GetStateArgs): Promise<State>
|
|
6
|
+
abstract getStates(args?: GetStatesArgs): Promise<Array<State>>
|
|
6
7
|
abstract deleteState(args: DeleteStateArgs): Promise<VoidResult>
|
|
7
8
|
}
|
|
@@ -3,7 +3,7 @@ import Debug from 'debug'
|
|
|
3
3
|
import {DataSource} from "typeorm";
|
|
4
4
|
|
|
5
5
|
import {StateEntity} from "../entities/xstatePersistence/StateEntity";
|
|
6
|
-
import {DeleteStateArgs, GetStateArgs, SaveStateArgs, State, VoidResult,} from "../types";
|
|
6
|
+
import {DeleteStateArgs, GetStateArgs, GetStatesArgs, SaveStateArgs, State, VoidResult,} from "../types";
|
|
7
7
|
import {IAbstractXStateStore} from "./IAbstractXStateStore";
|
|
8
8
|
|
|
9
9
|
const debug = Debug('sphereon:ssi-sdk:xstatePersistence')
|
|
@@ -35,11 +35,24 @@ export class XStateStore extends IAbstractXStateStore {
|
|
|
35
35
|
return this.stateFrom(result)
|
|
36
36
|
}
|
|
37
37
|
|
|
38
|
+
async getStates(args?: GetStatesArgs): Promise<Array<State>> {
|
|
39
|
+
const connection: DataSource = await this.dbConnection // TODO apply everywhere
|
|
40
|
+
debug('Getting states', args)
|
|
41
|
+
const result: Array<StateEntity> = await connection.getRepository(StateEntity).find({
|
|
42
|
+
...(args?.filter && { where: args?.filter }),
|
|
43
|
+
})
|
|
44
|
+
|
|
45
|
+
return result.map((event: StateEntity) => this.stateFrom(event))
|
|
46
|
+
}
|
|
47
|
+
|
|
38
48
|
async deleteState(args: DeleteStateArgs): Promise<VoidResult> {
|
|
39
49
|
const connection: DataSource = await this.dbConnection
|
|
40
|
-
debug(`Executing deleteState query with
|
|
41
|
-
await connection.
|
|
42
|
-
.delete(
|
|
50
|
+
debug(`Executing deleteState query with where clause: ${args.where} and params: ${JSON.stringify(args.parameters)}`)
|
|
51
|
+
await connection.createQueryBuilder()
|
|
52
|
+
.delete()
|
|
53
|
+
.from(StateEntity)
|
|
54
|
+
.where(args.where, args.parameters)
|
|
55
|
+
.execute()
|
|
43
56
|
}
|
|
44
57
|
|
|
45
58
|
private stateFrom = (state: StateEntity): State => {
|
|
@@ -49,8 +62,7 @@ export class XStateStore extends IAbstractXStateStore {
|
|
|
49
62
|
createdAt: state.createdAt,
|
|
50
63
|
updatedAt: state.updatedAt,
|
|
51
64
|
completedAt: state.completedAt,
|
|
52
|
-
tenantId: state.tenantId
|
|
53
|
-
ttl: state.ttl
|
|
65
|
+
tenantId: state.tenantId
|
|
54
66
|
}
|
|
55
67
|
}
|
|
56
68
|
}
|