@decentrl/sdk 0.0.16 → 0.0.18
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/client.d.ts.map +1 -1
- package/dist/client.js +16 -2
- package/dist/contract-manager.d.ts +1 -0
- package/dist/contract-manager.d.ts.map +1 -1
- package/dist/contract-manager.js +3 -0
- package/dist/direct-transport.d.ts +2 -0
- package/dist/direct-transport.d.ts.map +1 -1
- package/dist/direct-transport.js +9 -0
- package/dist/persistence.d.ts +2 -0
- package/dist/persistence.d.ts.map +1 -1
- package/dist/persistence.js +29 -0
- package/package.json +4 -4
- package/src/client.ts +20 -1
- package/src/contract-manager.ts +4 -0
- package/src/direct-transport.ts +12 -0
- package/src/persistence.ts +35 -0
- package/src/types.ts +1 -1
package/dist/client.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAIxD,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;
|
|
1
|
+
{"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"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"}
|
package/dist/client.js
CHANGED
|
@@ -3,7 +3,7 @@ import { DirectTransport } from './direct-transport.js';
|
|
|
3
3
|
import { DecentrlSDKError } from './errors.js';
|
|
4
4
|
import { EventProcessor } from './event-processor.js';
|
|
5
5
|
import { IdentityManager } from './identity-manager.js';
|
|
6
|
-
import { clearPersisted, loadPersistedIdentity, loadPersistedState, persistIdentity, persistState, } from './persistence.js';
|
|
6
|
+
import { clearPersisted, loadPersistedContracts, loadPersistedIdentity, loadPersistedState, persistContracts, persistIdentity, persistState, } from './persistence.js';
|
|
7
7
|
import { PublicChannelReader } from './public-channel-reader.js';
|
|
8
8
|
import { StateStore } from './state-store.js';
|
|
9
9
|
import { SyncManager } from './sync-manager.js';
|
|
@@ -56,7 +56,7 @@ export class DecentrlClient {
|
|
|
56
56
|
this.eventProcessor = new EventProcessor(appConfig.events, appConfig.state, this.stateStore, appConfig.publicEvents, appConfig.channels);
|
|
57
57
|
this.publicChannelReader = new PublicChannelReader(this.transport, this.eventProcessor, appConfig.channels);
|
|
58
58
|
this.syncManager = new SyncManager(this.eventProcessor, this.contracts, this.identity, this.transport);
|
|
59
|
-
// Restore persisted identity
|
|
59
|
+
// Restore persisted identity + contract rootSecrets
|
|
60
60
|
if (persistOpts) {
|
|
61
61
|
const savedIdentity = loadPersistedIdentity(persistOpts);
|
|
62
62
|
if (savedIdentity) {
|
|
@@ -67,6 +67,13 @@ export class DecentrlClient {
|
|
|
67
67
|
persistIdentity(persistOpts, null);
|
|
68
68
|
}
|
|
69
69
|
}
|
|
70
|
+
// Restore contract rootSecrets (DirectTransport only)
|
|
71
|
+
if (this.transport instanceof DirectTransport) {
|
|
72
|
+
const savedSecrets = loadPersistedContracts(persistOpts);
|
|
73
|
+
if (savedSecrets) {
|
|
74
|
+
this.transport.loadRootSecrets(savedSecrets);
|
|
75
|
+
}
|
|
76
|
+
}
|
|
70
77
|
this.setupPersistence();
|
|
71
78
|
}
|
|
72
79
|
}
|
|
@@ -90,6 +97,13 @@ export class DecentrlClient {
|
|
|
90
97
|
}
|
|
91
98
|
persistTimeout = setTimeout(() => persistState(persistOpts, state), 100);
|
|
92
99
|
});
|
|
100
|
+
// Persist contract rootSecrets when contracts change (DirectTransport only)
|
|
101
|
+
if (this.transport instanceof DirectTransport) {
|
|
102
|
+
const transport = this.transport;
|
|
103
|
+
this.contracts.onChange(() => {
|
|
104
|
+
persistContracts(persistOpts, transport.getRootSecrets());
|
|
105
|
+
});
|
|
106
|
+
}
|
|
93
107
|
}
|
|
94
108
|
// --- Private Events ---
|
|
95
109
|
async publish(eventType, data, options) {
|
|
@@ -14,6 +14,7 @@ export declare class ContractManager {
|
|
|
14
14
|
accept(pendingId: string, encryptedPayload: string, requestorEphemeralPublicKey: string): Promise<void>;
|
|
15
15
|
refresh(): Promise<void>;
|
|
16
16
|
getActiveContracts(): StoredSignedContract[];
|
|
17
|
+
getExpiredContracts(): StoredSignedContract[];
|
|
17
18
|
getContractByDid(did: string): StoredSignedContract | undefined;
|
|
18
19
|
processAutoRenewals(threshold?: number): Promise<void>;
|
|
19
20
|
processContractCleanup(): Promise<void>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"contract-manager.d.ts","sourceRoot":"","sources":["../src/contract-manager.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,gBAAgB,CAAC;AACxD,OAAO,KAAK,EAAE,sBAAsB,EAAE,oBAAoB,EAAE,MAAM,YAAY,CAAC;AAE/E,KAAK,sBAAsB,GAAG,MAAM,IAAI,CAAC;AAEzC,qBAAa,eAAe;IAC3B,OAAO,CAAC,SAAS,CAA2C;IAC5D,OAAO,CAAC,SAAS,CAAqC;IACtD,OAAO,CAAC,qBAAqB,CAA8B;IAC3D,OAAO,CAAC,SAAS,CAAkC;IAEnD,YAAY,CAAC,SAAS,EAAE,iBAAiB,GAAG,IAAI;IAIhD,QAAQ,CAAC,QAAQ,EAAE,sBAAsB,GAAG,MAAM,IAAI;IAQtD,OAAO,CAAC,MAAM;IAUR,OAAO,CAAC,YAAY,EAAE,MAAM,EAAE,SAAS,SAAY,GAAG,OAAO,CAAC,IAAI,CAAC;IAQnE,UAAU,IAAI,OAAO,CAAC,sBAAsB,EAAE,CAAC;IAQ/C,MAAM,CACX,SAAS,EAAE,MAAM,EACjB,gBAAgB,EAAE,MAAM,EACxB,2BAA2B,EAAE,MAAM,GACjC,OAAO,CAAC,IAAI,CAAC;IASV,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;IAe9B,kBAAkB,IAAI,oBAAoB,EAAE;IAI5C,gBAAgB,CAAC,GAAG,EAAE,MAAM,GAAG,oBAAoB,GAAG,SAAS;IAyBzD,mBAAmB,CAAC,SAAS,SAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IASnD,sBAAsB,IAAI,OAAO,CAAC,IAAI,CAAC;IAS7C,KAAK,IAAI,IAAI;CAIb"}
|
|
1
|
+
{"version":3,"file":"contract-manager.d.ts","sourceRoot":"","sources":["../src/contract-manager.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,gBAAgB,CAAC;AACxD,OAAO,KAAK,EAAE,sBAAsB,EAAE,oBAAoB,EAAE,MAAM,YAAY,CAAC;AAE/E,KAAK,sBAAsB,GAAG,MAAM,IAAI,CAAC;AAEzC,qBAAa,eAAe;IAC3B,OAAO,CAAC,SAAS,CAA2C;IAC5D,OAAO,CAAC,SAAS,CAAqC;IACtD,OAAO,CAAC,qBAAqB,CAA8B;IAC3D,OAAO,CAAC,SAAS,CAAkC;IAEnD,YAAY,CAAC,SAAS,EAAE,iBAAiB,GAAG,IAAI;IAIhD,QAAQ,CAAC,QAAQ,EAAE,sBAAsB,GAAG,MAAM,IAAI;IAQtD,OAAO,CAAC,MAAM;IAUR,OAAO,CAAC,YAAY,EAAE,MAAM,EAAE,SAAS,SAAY,GAAG,OAAO,CAAC,IAAI,CAAC;IAQnE,UAAU,IAAI,OAAO,CAAC,sBAAsB,EAAE,CAAC;IAQ/C,MAAM,CACX,SAAS,EAAE,MAAM,EACjB,gBAAgB,EAAE,MAAM,EACxB,2BAA2B,EAAE,MAAM,GACjC,OAAO,CAAC,IAAI,CAAC;IASV,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;IAe9B,kBAAkB,IAAI,oBAAoB,EAAE;IAI5C,mBAAmB,IAAI,oBAAoB,EAAE;IAI7C,gBAAgB,CAAC,GAAG,EAAE,MAAM,GAAG,oBAAoB,GAAG,SAAS;IAyBzD,mBAAmB,CAAC,SAAS,SAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IASnD,sBAAsB,IAAI,OAAO,CAAC,IAAI,CAAC;IAS7C,KAAK,IAAI,IAAI;CAIb"}
|
package/dist/contract-manager.js
CHANGED
|
@@ -52,6 +52,9 @@ export class ContractManager {
|
|
|
52
52
|
getActiveContracts() {
|
|
53
53
|
return this.cachedActiveContracts;
|
|
54
54
|
}
|
|
55
|
+
getExpiredContracts() {
|
|
56
|
+
return Array.from(this.contracts.values()).filter((c) => c.status === 'expired');
|
|
57
|
+
}
|
|
55
58
|
getContractByDid(did) {
|
|
56
59
|
let best;
|
|
57
60
|
for (const contract of this.contracts.values()) {
|
|
@@ -22,6 +22,8 @@ export declare class DirectTransport implements DecentrlTransport {
|
|
|
22
22
|
private confirmedNewContracts;
|
|
23
23
|
private purgedContractIds;
|
|
24
24
|
constructor(options?: DirectTransportOptions);
|
|
25
|
+
getRootSecrets(): Record<string, string>;
|
|
26
|
+
loadRootSecrets(secrets: Record<string, string>): void;
|
|
25
27
|
createIdentity(options: {
|
|
26
28
|
alias: string;
|
|
27
29
|
mediatorDid: string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"direct-transport.d.ts","sourceRoot":"","sources":["../src/direct-transport.ts"],"names":[],"mappings":"AA0BA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,gBAAgB,CAAC;AACxD,OAAO,KAAK,EACX,gBAAgB,EAChB,aAAa,EAEb,eAAe,EACf,sBAAsB,EACtB,YAAY,EACZ,kBAAkB,EAClB,oBAAoB,EACpB,MAAM,YAAY,CAAC;AAEpB,MAAM,MAAM,QAAQ,GAAG,CAAC,CAAC,GAAG,OAAO,EAClC,GAAG,EAAE,MAAM,EACX,IAAI,EAAE,OAAO,EACb,OAAO,CAAC,EAAE;IAAE,OAAO,CAAC,EAAE,MAAM,CAAA;CAAE,KAC1B,OAAO,CAAC;IAAE,IAAI,EAAE,CAAC,CAAA;CAAE,CAAC,CAAC;AAM1B,MAAM,WAAW,sBAAsB;IACtC,QAAQ,CAAC,EAAE,QAAQ,CAAC;IACpB,sBAAsB,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CAChF;AAED,qBAAa,eAAgB,YAAW,iBAAiB;IACxD,OAAO,CAAC,QAAQ,CAA8B;IAC9C,OAAO,CAAC,UAAU,CAAmC;IACrD,OAAO,CAAC,eAAe,CAA8B;IACrD,OAAO,CAAC,QAAQ,CAAW;IAC3B,OAAO,CAAC,sBAAsB,CAAC,CAAyD;IAExF,OAAO,CAAC,oBAAoB,CAA6B;IACzD,OAAO,CAAC,gBAAgB,CAA6B;IACrD,OAAO,CAAC,eAAe,CAAqB;IAC5C,OAAO,CAAC,mBAAmB,CAA6B;IACxD,OAAO,CAAC,qBAAqB,CAAqB;IAGlD,OAAO,CAAC,iBAAiB,CAAqB;gBAElC,OAAO,CAAC,EAAE,sBAAsB;
|
|
1
|
+
{"version":3,"file":"direct-transport.d.ts","sourceRoot":"","sources":["../src/direct-transport.ts"],"names":[],"mappings":"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"}
|
package/dist/direct-transport.js
CHANGED
|
@@ -31,6 +31,15 @@ export class DirectTransport {
|
|
|
31
31
|
((url, data, opts) => axios.post(url, data, { timeout: opts?.timeout ?? DEFAULT_TIMEOUT_MS }));
|
|
32
32
|
this.onEphemeralKeysChanged = options?.onEphemeralKeysChanged;
|
|
33
33
|
}
|
|
34
|
+
// --- Root Secret Persistence ---
|
|
35
|
+
getRootSecrets() {
|
|
36
|
+
return Object.fromEntries(this.knownRootSecrets);
|
|
37
|
+
}
|
|
38
|
+
loadRootSecrets(secrets) {
|
|
39
|
+
for (const [id, secret] of Object.entries(secrets)) {
|
|
40
|
+
this.knownRootSecrets.set(id, secret);
|
|
41
|
+
}
|
|
42
|
+
}
|
|
34
43
|
// --- Identity ---
|
|
35
44
|
async createIdentity(options) {
|
|
36
45
|
const { alias, mediatorDid } = options;
|
package/dist/persistence.d.ts
CHANGED
|
@@ -7,5 +7,7 @@ export declare function loadPersistedIdentity(opts: PersistOptions): SerializedI
|
|
|
7
7
|
export declare function persistIdentity(opts: PersistOptions, identity: SerializedIdentity | null): void;
|
|
8
8
|
export declare function loadPersistedState<T extends Record<string, unknown>>(opts: PersistOptions): T | null;
|
|
9
9
|
export declare function persistState(opts: PersistOptions, state: Record<string, unknown>): void;
|
|
10
|
+
export declare function loadPersistedContracts(opts: PersistOptions): Record<string, string> | null;
|
|
11
|
+
export declare function persistContracts(opts: PersistOptions, secrets: Record<string, string>): void;
|
|
10
12
|
export declare function clearPersisted(opts: PersistOptions): void;
|
|
11
13
|
//# sourceMappingURL=persistence.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"persistence.d.ts","sourceRoot":"","sources":["../src/persistence.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAC;AAErD,MAAM,WAAW,cAAc;IAC9B,6FAA6F;IAC7F,GAAG,EAAE,MAAM,CAAC;CACZ;AAUD,wBAAgB,qBAAqB,CAAC,IAAI,EAAE,cAAc,GAAG,kBAAkB,GAAG,IAAI,CAkBrF;AAED,wBAAgB,eAAe,CAAC,IAAI,EAAE,cAAc,EAAE,QAAQ,EAAE,kBAAkB,GAAG,IAAI,GAAG,IAAI,CAgB/F;AAED,wBAAgB,kBAAkB,CAAC,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EACnE,IAAI,EAAE,cAAc,GAClB,CAAC,GAAG,IAAI,CAkBV;AAED,wBAAgB,YAAY,CAAC,IAAI,EAAE,cAAc,EAAE,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,CAYvF;AAED,wBAAgB,cAAc,CAAC,IAAI,EAAE,cAAc,GAAG,IAAI,
|
|
1
|
+
{"version":3,"file":"persistence.d.ts","sourceRoot":"","sources":["../src/persistence.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAC;AAErD,MAAM,WAAW,cAAc;IAC9B,6FAA6F;IAC7F,GAAG,EAAE,MAAM,CAAC;CACZ;AAUD,wBAAgB,qBAAqB,CAAC,IAAI,EAAE,cAAc,GAAG,kBAAkB,GAAG,IAAI,CAkBrF;AAED,wBAAgB,eAAe,CAAC,IAAI,EAAE,cAAc,EAAE,QAAQ,EAAE,kBAAkB,GAAG,IAAI,GAAG,IAAI,CAgB/F;AAED,wBAAgB,kBAAkB,CAAC,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EACnE,IAAI,EAAE,cAAc,GAClB,CAAC,GAAG,IAAI,CAkBV;AAED,wBAAgB,YAAY,CAAC,IAAI,EAAE,cAAc,EAAE,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,CAYvF;AAED,wBAAgB,sBAAsB,CAAC,IAAI,EAAE,cAAc,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,IAAI,CAkB1F;AAED,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,cAAc,EAAE,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,IAAI,CAY5F;AAED,wBAAgB,cAAc,CAAC,IAAI,EAAE,cAAc,GAAG,IAAI,CAczD"}
|
package/dist/persistence.js
CHANGED
|
@@ -67,6 +67,34 @@ export function persistState(opts, state) {
|
|
|
67
67
|
// Silently fail
|
|
68
68
|
}
|
|
69
69
|
}
|
|
70
|
+
export function loadPersistedContracts(opts) {
|
|
71
|
+
const storage = getStorage();
|
|
72
|
+
if (!storage) {
|
|
73
|
+
return null;
|
|
74
|
+
}
|
|
75
|
+
try {
|
|
76
|
+
const raw = storage.getItem(`${opts.key}:contracts`);
|
|
77
|
+
if (!raw) {
|
|
78
|
+
return null;
|
|
79
|
+
}
|
|
80
|
+
return JSON.parse(raw);
|
|
81
|
+
}
|
|
82
|
+
catch {
|
|
83
|
+
return null;
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
export function persistContracts(opts, secrets) {
|
|
87
|
+
const storage = getStorage();
|
|
88
|
+
if (!storage) {
|
|
89
|
+
return;
|
|
90
|
+
}
|
|
91
|
+
try {
|
|
92
|
+
storage.setItem(`${opts.key}:contracts`, JSON.stringify(secrets));
|
|
93
|
+
}
|
|
94
|
+
catch {
|
|
95
|
+
// Silently fail
|
|
96
|
+
}
|
|
97
|
+
}
|
|
70
98
|
export function clearPersisted(opts) {
|
|
71
99
|
const storage = getStorage();
|
|
72
100
|
if (!storage) {
|
|
@@ -75,6 +103,7 @@ export function clearPersisted(opts) {
|
|
|
75
103
|
try {
|
|
76
104
|
storage.removeItem(`${opts.key}:identity`);
|
|
77
105
|
storage.removeItem(`${opts.key}:state`);
|
|
106
|
+
storage.removeItem(`${opts.key}:contracts`);
|
|
78
107
|
}
|
|
79
108
|
catch {
|
|
80
109
|
// Silently fail
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@decentrl/sdk",
|
|
3
|
-
"version": "0.0.
|
|
3
|
+
"version": "0.0.18",
|
|
4
4
|
"description": "Declarative SDK for building Decentrl protocol applications",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "dist/index.js",
|
|
@@ -8,9 +8,9 @@
|
|
|
8
8
|
"dependencies": {
|
|
9
9
|
"zod": "^4.0.10",
|
|
10
10
|
"axios": "1.11.0",
|
|
11
|
-
"@decentrl/crypto": "0.0.
|
|
12
|
-
"@decentrl/identity": "0.0.
|
|
13
|
-
"@decentrl/event-store": "0.0.
|
|
11
|
+
"@decentrl/crypto": "0.0.18",
|
|
12
|
+
"@decentrl/identity": "0.0.18",
|
|
13
|
+
"@decentrl/event-store": "0.0.18"
|
|
14
14
|
},
|
|
15
15
|
"devDependencies": {
|
|
16
16
|
"typescript": "^5.8.3",
|
package/src/client.ts
CHANGED
|
@@ -5,8 +5,10 @@ import { EventProcessor } from './event-processor.js';
|
|
|
5
5
|
import { IdentityManager } from './identity-manager.js';
|
|
6
6
|
import {
|
|
7
7
|
clearPersisted,
|
|
8
|
+
loadPersistedContracts,
|
|
8
9
|
loadPersistedIdentity,
|
|
9
10
|
loadPersistedState,
|
|
11
|
+
persistContracts,
|
|
10
12
|
persistIdentity,
|
|
11
13
|
persistState,
|
|
12
14
|
} from './persistence.js';
|
|
@@ -122,7 +124,7 @@ export class DecentrlClient<
|
|
|
122
124
|
this.transport,
|
|
123
125
|
);
|
|
124
126
|
|
|
125
|
-
// Restore persisted identity
|
|
127
|
+
// Restore persisted identity + contract rootSecrets
|
|
126
128
|
if (persistOpts) {
|
|
127
129
|
const savedIdentity = loadPersistedIdentity(persistOpts);
|
|
128
130
|
|
|
@@ -134,6 +136,15 @@ export class DecentrlClient<
|
|
|
134
136
|
}
|
|
135
137
|
}
|
|
136
138
|
|
|
139
|
+
// Restore contract rootSecrets (DirectTransport only)
|
|
140
|
+
if (this.transport instanceof DirectTransport) {
|
|
141
|
+
const savedSecrets = loadPersistedContracts(persistOpts);
|
|
142
|
+
|
|
143
|
+
if (savedSecrets) {
|
|
144
|
+
this.transport.loadRootSecrets(savedSecrets);
|
|
145
|
+
}
|
|
146
|
+
}
|
|
147
|
+
|
|
137
148
|
this.setupPersistence();
|
|
138
149
|
}
|
|
139
150
|
}
|
|
@@ -161,6 +172,14 @@ export class DecentrlClient<
|
|
|
161
172
|
|
|
162
173
|
persistTimeout = setTimeout(() => persistState(persistOpts, state), 100);
|
|
163
174
|
});
|
|
175
|
+
|
|
176
|
+
// Persist contract rootSecrets when contracts change (DirectTransport only)
|
|
177
|
+
if (this.transport instanceof DirectTransport) {
|
|
178
|
+
const transport = this.transport;
|
|
179
|
+
this.contracts.onChange(() => {
|
|
180
|
+
persistContracts(persistOpts, transport.getRootSecrets());
|
|
181
|
+
});
|
|
182
|
+
}
|
|
164
183
|
}
|
|
165
184
|
|
|
166
185
|
// --- Private Events ---
|
package/src/contract-manager.ts
CHANGED
|
@@ -80,6 +80,10 @@ export class ContractManager {
|
|
|
80
80
|
return this.cachedActiveContracts;
|
|
81
81
|
}
|
|
82
82
|
|
|
83
|
+
getExpiredContracts(): StoredSignedContract[] {
|
|
84
|
+
return Array.from(this.contracts.values()).filter((c) => c.status === 'expired');
|
|
85
|
+
}
|
|
86
|
+
|
|
83
87
|
getContractByDid(did: string): StoredSignedContract | undefined {
|
|
84
88
|
let best: StoredSignedContract | undefined;
|
|
85
89
|
|
package/src/direct-transport.ts
CHANGED
|
@@ -75,6 +75,18 @@ export class DirectTransport implements DecentrlTransport {
|
|
|
75
75
|
this.onEphemeralKeysChanged = options?.onEphemeralKeysChanged;
|
|
76
76
|
}
|
|
77
77
|
|
|
78
|
+
// --- Root Secret Persistence ---
|
|
79
|
+
|
|
80
|
+
getRootSecrets(): Record<string, string> {
|
|
81
|
+
return Object.fromEntries(this.knownRootSecrets);
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
loadRootSecrets(secrets: Record<string, string>): void {
|
|
85
|
+
for (const [id, secret] of Object.entries(secrets)) {
|
|
86
|
+
this.knownRootSecrets.set(id, secret);
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
|
|
78
90
|
// --- Identity ---
|
|
79
91
|
|
|
80
92
|
async createIdentity(options: {
|
package/src/persistence.ts
CHANGED
|
@@ -87,6 +87,40 @@ export function persistState(opts: PersistOptions, state: Record<string, unknown
|
|
|
87
87
|
}
|
|
88
88
|
}
|
|
89
89
|
|
|
90
|
+
export function loadPersistedContracts(opts: PersistOptions): Record<string, string> | null {
|
|
91
|
+
const storage = getStorage();
|
|
92
|
+
|
|
93
|
+
if (!storage) {
|
|
94
|
+
return null;
|
|
95
|
+
}
|
|
96
|
+
|
|
97
|
+
try {
|
|
98
|
+
const raw = storage.getItem(`${opts.key}:contracts`);
|
|
99
|
+
|
|
100
|
+
if (!raw) {
|
|
101
|
+
return null;
|
|
102
|
+
}
|
|
103
|
+
|
|
104
|
+
return JSON.parse(raw) as Record<string, string>;
|
|
105
|
+
} catch {
|
|
106
|
+
return null;
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
|
|
110
|
+
export function persistContracts(opts: PersistOptions, secrets: Record<string, string>): void {
|
|
111
|
+
const storage = getStorage();
|
|
112
|
+
|
|
113
|
+
if (!storage) {
|
|
114
|
+
return;
|
|
115
|
+
}
|
|
116
|
+
|
|
117
|
+
try {
|
|
118
|
+
storage.setItem(`${opts.key}:contracts`, JSON.stringify(secrets));
|
|
119
|
+
} catch {
|
|
120
|
+
// Silently fail
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
|
|
90
124
|
export function clearPersisted(opts: PersistOptions): void {
|
|
91
125
|
const storage = getStorage();
|
|
92
126
|
|
|
@@ -97,6 +131,7 @@ export function clearPersisted(opts: PersistOptions): void {
|
|
|
97
131
|
try {
|
|
98
132
|
storage.removeItem(`${opts.key}:identity`);
|
|
99
133
|
storage.removeItem(`${opts.key}:state`);
|
|
134
|
+
storage.removeItem(`${opts.key}:contracts`);
|
|
100
135
|
} catch {
|
|
101
136
|
// Silently fail
|
|
102
137
|
}
|
package/src/types.ts
CHANGED
|
@@ -130,7 +130,7 @@ export type StateDefinitions<
|
|
|
130
130
|
TEvents extends EventDefinitions = EventDefinitions,
|
|
131
131
|
TPublicEvents extends PublicEventDefinitions = PublicEventDefinitions,
|
|
132
132
|
TChannels extends ChannelDefinitions = ChannelDefinitions,
|
|
133
|
-
//
|
|
133
|
+
// biome-ignore lint/suspicious/noExplicitAny: generic state slice requires any
|
|
134
134
|
> = Record<string, StateSliceDefinition<any, TEvents, TPublicEvents, TChannels>>;
|
|
135
135
|
|
|
136
136
|
// --- Inferred State ---
|