@enbox/agent 0.7.8 → 0.7.9

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.
@@ -79,6 +79,8 @@ export function invalidateClosureCache(context, message) {
79
79
  : undefined;
80
80
  if (protocol) {
81
81
  context.protocolCache.delete(protocol);
82
+ deleteProtocolDependencyCacheEntries(context.satisfiedDeps, protocol);
83
+ deleteProtocolDependencyCacheEntries(context.missingDeps, protocol);
82
84
  }
83
85
  }
84
86
  // Permissions protocol messages → invalidate grant/revocation cache.
@@ -204,4 +206,17 @@ function deleteDependencyCacheEntries(cache, dependencyKeySuffix) {
204
206
  }
205
207
  }
206
208
  }
209
+ function deleteProtocolDependencyCacheEntries(cache, protocol) {
210
+ const marker = ':protocol:';
211
+ for (const key of cache) {
212
+ const markerIndex = key.lastIndexOf(marker);
213
+ if (markerIndex === -1) {
214
+ continue;
215
+ }
216
+ const protocolIdentifier = key.substring(markerIndex + marker.length);
217
+ if (protocolIdentifier === protocol) {
218
+ cache.delete(key);
219
+ }
220
+ }
221
+ }
207
222
  //# sourceMappingURL=sync-closure-types.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"sync-closure-types.js","sourceRoot":"","sources":["../../src/sync-closure-types.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"sync-closure-types.js","sourceRoot":"","sources":["../../src/sync-closure-types.ts"],"names":[],"mappings":"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"}
@@ -26,8 +26,8 @@ import { isRecordsWrite } from './utils.js';
26
26
  import { ReplicationLedger } from './sync-replication-ledger.js';
27
27
  import { topologicalSort } from './sync-topological-sort.js';
28
28
  import { classifySyncEventScope, classifySyncMessageScope } from './sync-scope-acceptance.js';
29
+ import { ClosureFailureCode, createClosureContext, invalidateClosureCache, isTerminalClosureFailureCode } from './sync-closure-types.js';
29
30
  import { computeAuthorizationEpoch, computeProjectionId, lexicographicalCompare, MAX_PENDING_TOKENS, protocolsForSyncScope, singleProtocolForSyncScope, syncScopeFromProtocols } from './types/sync.js';
30
- import { createClosureContext, invalidateClosureCache, isTerminalClosureFailureCode } from './sync-closure-types.js';
31
31
  import { fetchRemoteMessages, getMessageCid, pullMessages, pushMessages, SyncPullAbortedError } from './sync-messages.js';
32
32
  import { partitionRemoteEntries, SyncLinkReconciler } from './sync-link-reconciler.js';
33
33
  import { permissionGrantIdsFromEntries, resolveMessagesSyncScopes, toMessagesPermissionGrantIds, toSyncAuthorizationGrants } from './sync-permission-grants.js';
@@ -186,6 +186,8 @@ export class SyncEngineLevel {
186
186
  * tenant. Keyed by tenantDid to prevent cross-tenant cache pollution.
187
187
  */
188
188
  this._closureContexts = new Map();
189
+ /** Deduplicates concurrent live-sync repairs for the same tenant/protocol. */
190
+ this._protocolMetadataRepairs = new Map();
189
191
  /**
190
192
  * Monotonic generation counter for sync target cache invalidation.
191
193
  * Bumped on every invalidation (register/unregister/update/clear/close/stopSync).
@@ -1229,6 +1231,7 @@ export class SyncEngineLevel {
1229
1231
  this._reconcileInFlight.clear();
1230
1232
  // Clear closure evaluation contexts.
1231
1233
  this._closureContexts.clear();
1234
+ this._protocolMetadataRepairs.clear();
1232
1235
  this._recentlyPulledCids.clear();
1233
1236
  // Clear the in-memory link and runtime state.
1234
1237
  this._activeLinks.clear();
@@ -1824,42 +1827,125 @@ export class SyncEngineLevel {
1824
1827
  }
1825
1828
  processLivePullEvent(context, event) {
1826
1829
  return __awaiter(this, void 0, void 0, function* () {
1827
- const dataStream = yield this.getLivePullDataStream(context, event);
1828
- yield this.agent.dwn.processRawMessage(context.did, event.message, { dataStream });
1830
+ const dataStreamFactory = yield this.createLivePullDataStreamFactory(context, event);
1831
+ let applyStatus = yield this.applyLivePullEvent(context, event, dataStreamFactory);
1829
1832
  if (context.isStale()) {
1830
1833
  return undefined;
1831
1834
  }
1832
- this.invalidateClosureCacheForMessage(context.did, event.message);
1835
+ let applied = SyncEngineLevel.isApplySuccess(applyStatus.code);
1836
+ if (applied) {
1837
+ this.invalidateClosureCacheForMessage(context.did, event.message);
1838
+ }
1833
1839
  if (!(yield this.ensureClosureComplete(context, event))) {
1834
1840
  return undefined;
1835
1841
  }
1842
+ if (!applied) {
1843
+ applyStatus = yield this.applyLivePullEvent(context, event, dataStreamFactory);
1844
+ if (context.isStale()) {
1845
+ return undefined;
1846
+ }
1847
+ applied = SyncEngineLevel.isApplySuccess(applyStatus.code);
1848
+ if (!applied) {
1849
+ throw yield this.createLivePullApplyError(event, applyStatus);
1850
+ }
1851
+ this.invalidateClosureCacheForMessage(context.did, event.message);
1852
+ }
1836
1853
  // Squash convergence: processRawMessage triggers the DWN's built-in
1837
1854
  // squash resumable task (performRecordsSquash), so no additional
1838
1855
  // sync-engine side effect is needed here.
1839
1856
  return Message.getCid(event.message);
1840
1857
  });
1841
1858
  }
1842
- getLivePullDataStream(_a, event_1) {
1843
- return __awaiter(this, arguments, void 0, function* ({ did, dwnUrl, delegateDid, permissionGrantIds }, event) {
1844
- var _b;
1845
- const inlineData = this.extractDataStream(event);
1846
- if (inlineData || !isRecordsWrite(event) || !event.message.descriptor.dataCid) {
1847
- return inlineData;
1859
+ applyLivePullEvent(context, event, dataStreamFactory) {
1860
+ return __awaiter(this, void 0, void 0, function* () {
1861
+ const dataStream = yield dataStreamFactory();
1862
+ const reply = yield this.agent.dwn.processRawMessage(context.did, event.message, { dataStream });
1863
+ return reply.status;
1864
+ });
1865
+ }
1866
+ createLivePullDataStreamFactory(context, event) {
1867
+ return __awaiter(this, void 0, void 0, function* () {
1868
+ if (!isRecordsWrite(event)) {
1869
+ return () => __awaiter(this, void 0, void 0, function* () { return undefined; });
1870
+ }
1871
+ const encodedData = event.message.encodedData;
1872
+ if (encodedData) {
1873
+ delete event.message.encodedData;
1874
+ const bytes = Encoder.base64UrlToBytes(encodedData);
1875
+ return () => __awaiter(this, void 0, void 0, function* () { return SyncEngineLevel.dataStreamFromBytes(bytes); });
1876
+ }
1877
+ const eventData = event.data;
1878
+ if (eventData) {
1879
+ const bytes = yield SyncEngineLevel.readStreamBytes(eventData);
1880
+ return () => __awaiter(this, void 0, void 0, function* () { return SyncEngineLevel.dataStreamFromBytes(bytes); });
1881
+ }
1882
+ if (!event.message.descriptor.dataCid) {
1883
+ return () => __awaiter(this, void 0, void 0, function* () { return undefined; });
1848
1884
  }
1849
1885
  // For large RecordsWrite messages (no inline data), fetch the data from
1850
- // the remote DWN via MessagesRead before storing locally.
1886
+ // the remote DWN via MessagesRead before each store attempt. ReadableStream
1887
+ // instances are single-use, so a repair-triggered retry needs a fresh fetch.
1888
+ const { did, dwnUrl, delegateDid, permissionGrantIds } = context;
1851
1889
  const messageCid = yield Message.getCid(event.message);
1852
- const fetched = yield fetchRemoteMessages({
1853
- did,
1854
- dwnUrl,
1855
- delegateDid,
1856
- permissionGrantIds,
1857
- messageCids: [messageCid],
1858
- agent: this.agent,
1890
+ return () => __awaiter(this, void 0, void 0, function* () {
1891
+ var _a;
1892
+ const fetched = yield fetchRemoteMessages({
1893
+ did,
1894
+ dwnUrl,
1895
+ delegateDid,
1896
+ permissionGrantIds,
1897
+ messageCids: [messageCid],
1898
+ agent: this.agent,
1899
+ });
1900
+ return (_a = fetched[0]) === null || _a === void 0 ? void 0 : _a.dataStream;
1859
1901
  });
1860
- return (_b = fetched[0]) === null || _b === void 0 ? void 0 : _b.dataStream;
1861
1902
  });
1862
1903
  }
1904
+ createLivePullApplyError(event, status) {
1905
+ return __awaiter(this, void 0, void 0, function* () {
1906
+ var _a;
1907
+ const cid = yield Message.getCid(event.message);
1908
+ return new Error(`SyncEngineLevel: live pull apply failed for ${cid}: ${status.code} ${(_a = status.detail) !== null && _a !== void 0 ? _a : ''}`.trim());
1909
+ });
1910
+ }
1911
+ static dataStreamFromBytes(bytes) {
1912
+ return new ReadableStream({
1913
+ start(controller) {
1914
+ controller.enqueue(bytes);
1915
+ controller.close();
1916
+ }
1917
+ });
1918
+ }
1919
+ static readStreamBytes(stream) {
1920
+ return __awaiter(this, void 0, void 0, function* () {
1921
+ const reader = stream.getReader();
1922
+ const chunks = [];
1923
+ let totalSize = 0;
1924
+ try {
1925
+ for (;;) {
1926
+ const { done, value } = yield reader.read();
1927
+ if (done) {
1928
+ break;
1929
+ }
1930
+ chunks.push(value);
1931
+ totalSize += value.byteLength;
1932
+ }
1933
+ }
1934
+ finally {
1935
+ reader.releaseLock();
1936
+ }
1937
+ const bytes = new Uint8Array(totalSize);
1938
+ let offset = 0;
1939
+ for (const chunk of chunks) {
1940
+ bytes.set(chunk, offset);
1941
+ offset += chunk.byteLength;
1942
+ }
1943
+ return bytes;
1944
+ });
1945
+ }
1946
+ static isApplySuccess(code) {
1947
+ return (code >= 200 && code < 300) || code === 409;
1948
+ }
1863
1949
  invalidateClosureCacheForMessage(did, message) {
1864
1950
  // Must run before closure validation so subsequent evaluations in the same
1865
1951
  // session see the updated local state.
@@ -1882,17 +1968,220 @@ export class SyncEngineLevel {
1882
1968
  this._closureContexts.set(did, closureCtx);
1883
1969
  }
1884
1970
  const messageStore = this.agent.dwn.node.storage.messageStore;
1885
- const closureResult = yield evaluateClosure(event.message, messageStore, link.scope, closureCtx);
1971
+ let closureResult = yield evaluateClosure(event.message, messageStore, link.scope, closureCtx);
1886
1972
  if (isStale()) {
1887
1973
  return false;
1888
1974
  }
1889
1975
  if (closureResult.complete) {
1890
1976
  return true;
1891
1977
  }
1978
+ if (yield this.tryRepairMissingProtocolMetadata(context, closureCtx, closureResult)) {
1979
+ if (isStale()) {
1980
+ return false;
1981
+ }
1982
+ closureResult = yield evaluateClosure(event.message, messageStore, link.scope, closureCtx);
1983
+ if (isStale()) {
1984
+ return false;
1985
+ }
1986
+ if (closureResult.complete) {
1987
+ return true;
1988
+ }
1989
+ }
1892
1990
  yield this.recordClosureFailure(context, event, closureResult.failure.code, closureResult.failure.detail);
1893
1991
  return false;
1894
1992
  });
1895
1993
  }
1994
+ tryRepairMissingProtocolMetadata(context, closureCtx, closureResult) {
1995
+ return __awaiter(this, void 0, void 0, function* () {
1996
+ const failure = closureResult.failure;
1997
+ if (!SyncEngineLevel.isRepairableProtocolMetadataFailure(failure)) {
1998
+ return false;
1999
+ }
2000
+ const { did } = context;
2001
+ const repairKey = `${did}|${failure.edge.identifier}`;
2002
+ const activeRepair = this._protocolMetadataRepairs.get(repairKey);
2003
+ if (activeRepair) {
2004
+ return activeRepair;
2005
+ }
2006
+ const repair = this.repairMissingProtocolMetadata(context, closureCtx, failure.edge.identifier);
2007
+ this._protocolMetadataRepairs.set(repairKey, repair);
2008
+ repair.finally(() => {
2009
+ if (this._protocolMetadataRepairs.get(repairKey) === repair) {
2010
+ this._protocolMetadataRepairs.delete(repairKey);
2011
+ }
2012
+ }).catch(() => { });
2013
+ return repair;
2014
+ });
2015
+ }
2016
+ repairMissingProtocolMetadata(_a, closureCtx_1, protocol_1) {
2017
+ return __awaiter(this, arguments, void 0, function* ({ did, dwnUrl, delegateDid, isStale }, closureCtx, protocol) {
2018
+ if (isStale()) {
2019
+ return false;
2020
+ }
2021
+ const configs = yield this.fetchRemoteProtocolConfigClosure({
2022
+ authorDid: delegateDid !== null && delegateDid !== void 0 ? delegateDid : did,
2023
+ delegateDid,
2024
+ dwnUrl,
2025
+ protocol,
2026
+ tenantDid: did,
2027
+ });
2028
+ if (isStale() || configs.length === 0) {
2029
+ return false;
2030
+ }
2031
+ // Live subscriptions can deliver scoped records before the local replica
2032
+ // has the tenant's protocol metadata. Reuse the DWN ProtocolsQuery path and
2033
+ // only install configs that are signed by the tenant, including composed
2034
+ // protocol dependencies needed to authorize the record.
2035
+ let repaired = false;
2036
+ for (const config of configs) {
2037
+ if (isStale()) {
2038
+ return repaired;
2039
+ }
2040
+ const reply = yield this.agent.dwn.processRawMessage(did, config);
2041
+ if (isStale()) {
2042
+ return repaired;
2043
+ }
2044
+ if (!SyncEngineLevel.protocolConfigApplySucceeded(reply.status.code)) {
2045
+ return repaired;
2046
+ }
2047
+ invalidateClosureCache(closureCtx, config);
2048
+ repaired = true;
2049
+ }
2050
+ return repaired;
2051
+ });
2052
+ }
2053
+ fetchRemoteProtocolConfigClosure(_a) {
2054
+ return __awaiter(this, arguments, void 0, function* ({ authorDid, delegateDid, dwnUrl, protocol, tenantDid, }) {
2055
+ const configsByProtocol = new Map();
2056
+ const visiting = new Set();
2057
+ const visit = (protocolUri) => __awaiter(this, void 0, void 0, function* () {
2058
+ if (configsByProtocol.has(protocolUri)) {
2059
+ return true;
2060
+ }
2061
+ if (visiting.has(protocolUri)) {
2062
+ return true;
2063
+ }
2064
+ visiting.add(protocolUri);
2065
+ const config = yield this.fetchRemoteProtocolConfig({
2066
+ authorDid,
2067
+ delegateDid,
2068
+ dwnUrl,
2069
+ protocol: protocolUri,
2070
+ tenantDid,
2071
+ });
2072
+ if (config === undefined) {
2073
+ visiting.delete(protocolUri);
2074
+ return false;
2075
+ }
2076
+ for (const usedProtocol of SyncEngineLevel.protocolsConfigureUses(config)) {
2077
+ if (!(yield visit(usedProtocol))) {
2078
+ visiting.delete(protocolUri);
2079
+ return false;
2080
+ }
2081
+ }
2082
+ configsByProtocol.set(protocolUri, config);
2083
+ visiting.delete(protocolUri);
2084
+ return true;
2085
+ });
2086
+ return (yield visit(protocol)) ? [...configsByProtocol.values()] : [];
2087
+ });
2088
+ }
2089
+ fetchRemoteProtocolConfig(_a) {
2090
+ return __awaiter(this, arguments, void 0, function* ({ authorDid, delegateDid, dwnUrl, protocol, tenantDid, }) {
2091
+ try {
2092
+ const permissionGrantId = yield this.getProtocolsQueryPermissionGrantId({
2093
+ delegateDid,
2094
+ protocol,
2095
+ tenantDid,
2096
+ });
2097
+ const { message } = yield this.agent.processDwnRequest({
2098
+ author: authorDid,
2099
+ messageParams: Object.assign({ filter: { protocol } }, (permissionGrantId === undefined ? {} : { permissionGrantId })),
2100
+ messageType: DwnInterface.ProtocolsQuery,
2101
+ store: false,
2102
+ target: tenantDid,
2103
+ });
2104
+ const reply = yield this.agent.rpc.sendDwnRequest({
2105
+ dwnUrl,
2106
+ message,
2107
+ targetDid: tenantDid,
2108
+ });
2109
+ if (reply.status.code !== 200 || reply.entries === undefined) {
2110
+ return undefined;
2111
+ }
2112
+ const candidates = [];
2113
+ for (const entry of reply.entries) {
2114
+ const config = yield this.toAuthenticatedTenantProtocolConfig(tenantDid, entry);
2115
+ if ((config === null || config === void 0 ? void 0 : config.descriptor.definition.protocol) === protocol) {
2116
+ candidates.push(config);
2117
+ }
2118
+ }
2119
+ return SyncEngineLevel.newestProtocolConfig(candidates);
2120
+ }
2121
+ catch (_b) {
2122
+ return undefined;
2123
+ }
2124
+ });
2125
+ }
2126
+ getProtocolsQueryPermissionGrantId(_a) {
2127
+ return __awaiter(this, arguments, void 0, function* ({ delegateDid, protocol, tenantDid, }) {
2128
+ if (delegateDid === undefined) {
2129
+ return undefined;
2130
+ }
2131
+ try {
2132
+ const { grant } = yield this._permissionsApi.getPermissionForRequest({
2133
+ connectedDid: tenantDid,
2134
+ delegateDid,
2135
+ protocol,
2136
+ cached: true,
2137
+ messageType: DwnInterface.ProtocolsQuery,
2138
+ });
2139
+ return grant.id;
2140
+ }
2141
+ catch (_b) {
2142
+ return undefined;
2143
+ }
2144
+ });
2145
+ }
2146
+ toAuthenticatedTenantProtocolConfig(tenantDid, message) {
2147
+ return __awaiter(this, void 0, void 0, function* () {
2148
+ if (!SyncEngineLevel.isProtocolsConfigureDefinitionMessage(message)) {
2149
+ return undefined;
2150
+ }
2151
+ try {
2152
+ yield ProtocolsConfigure.parse(message);
2153
+ if (Message.getAuthor(message) !== tenantDid) {
2154
+ return undefined;
2155
+ }
2156
+ yield authenticate(message.authorization, this.agent.did);
2157
+ return message;
2158
+ }
2159
+ catch (_a) {
2160
+ return undefined;
2161
+ }
2162
+ });
2163
+ }
2164
+ static newestProtocolConfig(configs) {
2165
+ let newest;
2166
+ for (const config of configs) {
2167
+ if (newest === undefined || SyncEngineLevel.isProtocolConfigNewer(config, newest)) {
2168
+ newest = config;
2169
+ }
2170
+ }
2171
+ return newest;
2172
+ }
2173
+ static isProtocolConfigNewer(candidate, current) {
2174
+ return candidate.descriptor.messageTimestamp > current.descriptor.messageTimestamp;
2175
+ }
2176
+ static protocolConfigApplySucceeded(code) {
2177
+ return (code >= 200 && code < 300) || code === 409;
2178
+ }
2179
+ static isRepairableProtocolMetadataFailure(failure) {
2180
+ return (failure === null || failure === void 0 ? void 0 : failure.edge.identifierType) === 'protocol' &&
2181
+ (failure.code === ClosureFailureCode.ProtocolMetadataMissing ||
2182
+ failure.code === ClosureFailureCode.CrossProtocolReferenceMissing ||
2183
+ failure.code === ClosureFailureCode.EncryptionDependencyMissing);
2184
+ }
1896
2185
  recordClosureFailure(_a, event_1, failureCode_1, failureDetail_1) {
1897
2186
  return __awaiter(this, arguments, void 0, function* ({ did, dwnUrl, linkKey, link, isStale }, event, failureCode, failureDetail) {
1898
2187
  console.warn(`SyncEngineLevel: Closure incomplete for ${did} -> ${dwnUrl}: ` +
@@ -2702,20 +2991,11 @@ export class SyncEngineLevel {
2702
2991
  }
2703
2992
  toAuthenticatedProtocolConfigDependency(tenantDid, dependency) {
2704
2993
  return __awaiter(this, void 0, void 0, function* () {
2705
- if (!SyncEngineLevel.isProtocolsConfigureDefinitionMessage(dependency.message)) {
2706
- return undefined;
2707
- }
2708
- try {
2709
- yield ProtocolsConfigure.parse(dependency.message);
2710
- if (Message.getAuthor(dependency.message) !== tenantDid) {
2711
- return undefined;
2712
- }
2713
- yield authenticate(dependency.message.authorization, this.agent.did);
2714
- return Object.assign(Object.assign({}, dependency), { message: dependency.message });
2715
- }
2716
- catch (_a) {
2994
+ const config = yield this.toAuthenticatedTenantProtocolConfig(tenantDid, dependency.message);
2995
+ if (config === undefined) {
2717
2996
  return undefined;
2718
2997
  }
2998
+ return Object.assign(Object.assign({}, dependency), { message: config });
2719
2999
  });
2720
3000
  }
2721
3001
  static projectedDependencyCidsMatch(_a) {
@@ -3094,38 +3374,6 @@ export class SyncEngineLevel {
3094
3374
  return buildLinkId(did, dwnUrl, projectionId, authorizationEpoch);
3095
3375
  }
3096
3376
  // ---------------------------------------------------------------------------
3097
- // Utility helpers
3098
- // ---------------------------------------------------------------------------
3099
- /**
3100
- * Extracts a ReadableStream from a MessageEvent if it contains a
3101
- * RecordsWrite with data — either as an inline `encodedData` field
3102
- * (for records <= 30 KB) or as a pre-existing data stream.
3103
- */
3104
- extractDataStream(event) {
3105
- if (!isRecordsWrite(event)) {
3106
- return undefined;
3107
- }
3108
- // Check for inline base64url-encoded data (small records from EventLog).
3109
- // Delete the transport-level field so the DWN schema validator does not
3110
- // reject the message for having unevaluated properties.
3111
- const encodedData = event.message.encodedData;
3112
- if (encodedData) {
3113
- delete event.message.encodedData;
3114
- const bytes = Encoder.base64UrlToBytes(encodedData);
3115
- return new ReadableStream({
3116
- start(controller) {
3117
- controller.enqueue(bytes);
3118
- controller.close();
3119
- }
3120
- });
3121
- }
3122
- // Check for a pre-existing data stream (e.g. from a direct message read).
3123
- if (event.data) {
3124
- return event.data;
3125
- }
3126
- return undefined;
3127
- }
3128
- // ---------------------------------------------------------------------------
3129
3377
  // Default Hash Cache
3130
3378
  // ---------------------------------------------------------------------------
3131
3379
  /**