@decentrl/sdk 0.0.16 → 0.0.17

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.
@@ -1 +1 @@
1
- {"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"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"}
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"}
@@ -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":"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"}
1
+ {"version":3,"file":"direct-transport.d.ts","sourceRoot":"","sources":["../src/direct-transport.ts"],"names":[],"mappings":"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"}
@@ -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;
@@ -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,CAazD"}
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"}
@@ -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.16",
3
+ "version": "0.0.17",
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.16",
12
- "@decentrl/identity": "0.0.16",
13
- "@decentrl/event-store": "0.0.16"
11
+ "@decentrl/crypto": "0.0.17",
12
+ "@decentrl/identity": "0.0.17",
13
+ "@decentrl/event-store": "0.0.17"
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 ---
@@ -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
 
@@ -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: {
@@ -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
  }