@bsv/wallet-toolbox 2.11.0 → 2.13.0
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/CHANGELOG.md +100 -4
- package/README.md +186 -2
- package/docs/sync-transfer.md +144 -0
- package/out/src/Wallet.js +4 -2
- package/out/src/Wallet.js.map +1 -1
- package/out/src/WalletAuthenticationManager.d.ts +12 -0
- package/out/src/WalletAuthenticationManager.d.ts.map +1 -1
- package/out/src/WalletAuthenticationManager.js +92 -28
- package/out/src/WalletAuthenticationManager.js.map +1 -1
- package/out/src/WalletPermissionsManager.d.ts +11 -5
- package/out/src/WalletPermissionsManager.d.ts.map +1 -1
- package/out/src/WalletPermissionsManager.js +70 -55
- package/out/src/WalletPermissionsManager.js.map +1 -1
- package/out/src/sdk/WalletServices.interfaces.d.ts +6 -0
- package/out/src/sdk/WalletServices.interfaces.d.ts.map +1 -1
- package/out/src/sdk/WalletStorage.interfaces.d.ts +49 -3
- package/out/src/sdk/WalletStorage.interfaces.d.ts.map +1 -1
- package/out/src/services/ServiceCollection.js +2 -2
- package/out/src/services/ServiceCollection.js.map +1 -1
- package/out/src/services/Services.d.ts +1 -0
- package/out/src/services/Services.d.ts.map +1 -1
- package/out/src/services/Services.js +23 -0
- package/out/src/services/Services.js.map +1 -1
- package/out/src/services/providers/ArcSSEClient.d.ts.map +1 -1
- package/out/src/services/providers/ArcSSEClient.js +40 -9
- package/out/src/services/providers/ArcSSEClient.js.map +1 -1
- package/out/src/storage/StorageIdb.d.ts +1 -0
- package/out/src/storage/StorageIdb.d.ts.map +1 -1
- package/out/src/storage/StorageIdb.js +55 -22
- package/out/src/storage/StorageIdb.js.map +1 -1
- package/out/src/storage/StorageKnex.d.ts +3 -1
- package/out/src/storage/StorageKnex.d.ts.map +1 -1
- package/out/src/storage/StorageKnex.js +43 -0
- package/out/src/storage/StorageKnex.js.map +1 -1
- package/out/src/storage/StorageProvider.d.ts.map +1 -1
- package/out/src/storage/StorageProvider.js +17 -2
- package/out/src/storage/StorageProvider.js.map +1 -1
- package/out/src/storage/StorageReader.d.ts +6 -0
- package/out/src/storage/StorageReader.d.ts.map +1 -1
- package/out/src/storage/StorageReader.js +8 -0
- package/out/src/storage/StorageReader.js.map +1 -1
- package/out/src/storage/StorageReaderWriter.d.ts +1 -0
- package/out/src/storage/StorageReaderWriter.d.ts.map +1 -1
- package/out/src/storage/StorageReaderWriter.js +26 -2
- package/out/src/storage/StorageReaderWriter.js.map +1 -1
- package/out/src/storage/WalletStorageManager.d.ts +1 -0
- package/out/src/storage/WalletStorageManager.d.ts.map +1 -1
- package/out/src/storage/WalletStorageManager.js +42 -9
- package/out/src/storage/WalletStorageManager.js.map +1 -1
- package/out/src/storage/methods/getSyncChunk.d.ts.map +1 -1
- package/out/src/storage/methods/getSyncChunk.js +42 -11
- package/out/src/storage/methods/getSyncChunk.js.map +1 -1
- package/out/src/storage/methods/validateSyncProof.d.ts +10 -2
- package/out/src/storage/methods/validateSyncProof.d.ts.map +1 -1
- package/out/src/storage/methods/validateSyncProof.js +24 -1
- package/out/src/storage/methods/validateSyncProof.js.map +1 -1
- package/out/src/storage/remoting/BinaryJson.d.ts.map +1 -1
- package/out/src/storage/remoting/BinaryJson.js +57 -8
- package/out/src/storage/remoting/BinaryJson.js.map +1 -1
- package/out/src/storage/remoting/KnexSyncTransferStore.d.ts +26 -0
- package/out/src/storage/remoting/KnexSyncTransferStore.d.ts.map +1 -0
- package/out/src/storage/remoting/KnexSyncTransferStore.js +223 -0
- package/out/src/storage/remoting/KnexSyncTransferStore.js.map +1 -0
- package/out/src/storage/remoting/StorageClient.js +2 -2
- package/out/src/storage/remoting/StorageClient.js.map +1 -1
- package/out/src/storage/remoting/StorageClientBase.d.ts +30 -4
- package/out/src/storage/remoting/StorageClientBase.d.ts.map +1 -1
- package/out/src/storage/remoting/StorageClientBase.js +194 -2
- package/out/src/storage/remoting/StorageClientBase.js.map +1 -1
- package/out/src/storage/remoting/StorageMobile.js +2 -2
- package/out/src/storage/remoting/StorageMobile.js.map +1 -1
- package/out/src/storage/remoting/StorageServer.d.ts +5 -0
- package/out/src/storage/remoting/StorageServer.d.ts.map +1 -1
- package/out/src/storage/remoting/StorageServer.js +123 -14
- package/out/src/storage/remoting/StorageServer.js.map +1 -1
- package/out/src/storage/remoting/SyncTransfer.d.ts +29 -0
- package/out/src/storage/remoting/SyncTransfer.d.ts.map +1 -0
- package/out/src/storage/remoting/SyncTransfer.js +152 -0
- package/out/src/storage/remoting/SyncTransfer.js.map +1 -0
- package/out/src/storage/remoting/entityValidationHelpers.d.ts.map +1 -1
- package/out/src/storage/remoting/entityValidationHelpers.js +35 -0
- package/out/src/storage/remoting/entityValidationHelpers.js.map +1 -1
- package/out/src/storage/remoting/syncChunkBinary.d.ts +4 -0
- package/out/src/storage/remoting/syncChunkBinary.d.ts.map +1 -0
- package/out/src/storage/remoting/syncChunkBinary.js +38 -0
- package/out/src/storage/remoting/syncChunkBinary.js.map +1 -0
- package/out/src/storage/remoting/validateRpcSyncProofs.d.ts +5 -0
- package/out/src/storage/remoting/validateRpcSyncProofs.d.ts.map +1 -0
- package/out/src/storage/remoting/validateRpcSyncProofs.js +82 -0
- package/out/src/storage/remoting/validateRpcSyncProofs.js.map +1 -0
- package/out/src/storage/schema/KnexMigrations.d.ts +2 -0
- package/out/src/storage/schema/KnexMigrations.d.ts.map +1 -1
- package/out/src/storage/schema/KnexMigrations.js +66 -1
- package/out/src/storage/schema/KnexMigrations.js.map +1 -1
- package/out/src/storage/schema/StorageIdbSchema.d.ts +1 -0
- package/out/src/storage/schema/StorageIdbSchema.d.ts.map +1 -1
- package/out/src/storage/schema/entities/EntityProvenTx.js +2 -2
- package/out/src/storage/schema/entities/EntityProvenTx.js.map +1 -1
- package/out/src/storage/schema/entities/EntitySyncState.d.ts +3 -1
- package/out/src/storage/schema/entities/EntitySyncState.d.ts.map +1 -1
- package/out/src/storage/schema/entities/EntitySyncState.js +6 -0
- package/out/src/storage/schema/entities/EntitySyncState.js.map +1 -1
- package/out/src/storage/sync/SyncPageBudget.d.ts +8 -0
- package/out/src/storage/sync/SyncPageBudget.d.ts.map +1 -0
- package/out/src/storage/sync/SyncPageBudget.js +24 -0
- package/out/src/storage/sync/SyncPageBudget.js.map +1 -0
- package/out/src/storage/sync/syncCheckpoint.d.ts +4 -0
- package/out/src/storage/sync/syncCheckpoint.d.ts.map +1 -0
- package/out/src/storage/sync/syncCheckpoint.js +49 -0
- package/out/src/storage/sync/syncCheckpoint.js.map +1 -0
- package/out/src/utility/identityUtils.js +2 -1
- package/out/src/utility/identityUtils.js.map +1 -1
- package/out/src/wab-client/WABClient.d.ts +1 -0
- package/out/src/wab-client/WABClient.d.ts.map +1 -1
- package/out/src/wab-client/WABClient.js +7 -0
- package/out/src/wab-client/WABClient.js.map +1 -1
- package/out/src/wab-client/auth-method-interactors/AuthMethodInteractor.d.ts +2 -0
- package/out/src/wab-client/auth-method-interactors/AuthMethodInteractor.d.ts.map +1 -1
- package/out/src/wab-client/auth-method-interactors/AuthMethodInteractor.js.map +1 -1
- package/package.json +3 -2
|
@@ -1,11 +1,45 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.StorageClientBase = void 0;
|
|
4
|
+
const SyncTransfer_1 = require("./SyncTransfer");
|
|
5
|
+
const syncChunkBinary_1 = require("./syncChunkBinary");
|
|
6
|
+
const syncCheckpoint_1 = require("../sync/syncCheckpoint");
|
|
4
7
|
const sdk_1 = require("@bsv/sdk");
|
|
5
8
|
const WERR_errors_1 = require("../../sdk/WERR_errors");
|
|
6
9
|
const entityValidationHelpers_1 = require("./entityValidationHelpers");
|
|
7
10
|
const actionBatchPack_1 = require("../../utility/actionBatchPack");
|
|
8
11
|
const beefForTxids_1 = require("../../utility/beefForTxids");
|
|
12
|
+
const syncChunkResponseRetryLimit = 4;
|
|
13
|
+
const minimumSyncChunkRoughSize = 64 * 1024;
|
|
14
|
+
function isSyncChunkResponseTooLarge(error) {
|
|
15
|
+
return error instanceof Error && /WalletStorageClient rpcCall: network error 413(?:\s|$)/.test(error.message);
|
|
16
|
+
}
|
|
17
|
+
function isLoopbackStorageHost(hostname) {
|
|
18
|
+
const normalized = hostname.toLowerCase();
|
|
19
|
+
return (normalized === 'localhost' ||
|
|
20
|
+
normalized === '127.0.0.1' ||
|
|
21
|
+
normalized === '[::1]' ||
|
|
22
|
+
normalized.endsWith('.localhost'));
|
|
23
|
+
}
|
|
24
|
+
function normalizeStorageEndpointUrl(endpointUrl) {
|
|
25
|
+
let parsed;
|
|
26
|
+
try {
|
|
27
|
+
parsed = new URL(endpointUrl);
|
|
28
|
+
}
|
|
29
|
+
catch {
|
|
30
|
+
throw new TypeError('Wallet storage endpoint must be an absolute URL.');
|
|
31
|
+
}
|
|
32
|
+
if (parsed.username !== '' || parsed.password !== '' || parsed.search !== '' || parsed.hash !== '') {
|
|
33
|
+
throw new TypeError('Wallet storage endpoint cannot include credentials, query, or fragment.');
|
|
34
|
+
}
|
|
35
|
+
if (parsed.protocol !== 'https:' && !(parsed.protocol === 'http:' && isLoopbackStorageHost(parsed.hostname))) {
|
|
36
|
+
throw new TypeError('Wallet storage endpoint requires HTTPS except on localhost.');
|
|
37
|
+
}
|
|
38
|
+
// Preserve the caller's path spelling because endpoint URLs are also
|
|
39
|
+
// surfaced through WalletStorageManager. Parsing above is the security
|
|
40
|
+
// boundary; canonicalizing here would be an unrelated observable change.
|
|
41
|
+
return endpointUrl;
|
|
42
|
+
}
|
|
9
43
|
/**
|
|
10
44
|
* Abstract base class shared by `StorageClient` and `StorageMobile`.
|
|
11
45
|
*
|
|
@@ -20,11 +54,14 @@ class StorageClientBase {
|
|
|
20
54
|
serverSupportsBinary = false;
|
|
21
55
|
binaryRequests;
|
|
22
56
|
telemetry;
|
|
57
|
+
syncChunkRoughSizeLimit;
|
|
58
|
+
/** Optional progress/cancellation hook for a bounded transfer; never receives wallet contents. */
|
|
59
|
+
onSyncTransferProgress;
|
|
23
60
|
// Track ephemeral (in-memory) "settings" if you wish to align with isAvailable() checks
|
|
24
61
|
settings;
|
|
25
62
|
constructor(wallet, endpointUrl, options = {}) {
|
|
26
63
|
this.authClient = new sdk_1.AuthFetch(wallet);
|
|
27
|
-
this.endpointUrl = endpointUrl;
|
|
64
|
+
this.endpointUrl = normalizeStorageEndpointUrl(endpointUrl);
|
|
28
65
|
this.binaryRequests = options.binaryRequests === true;
|
|
29
66
|
this.telemetry = new sdk_1.Telemetry(options.telemetry);
|
|
30
67
|
}
|
|
@@ -284,6 +321,15 @@ class StorageClientBase {
|
|
|
284
321
|
async findOrInsertUser(identityKey) {
|
|
285
322
|
return await this.rpcCall('findOrInsertUser', [identityKey]);
|
|
286
323
|
}
|
|
324
|
+
/** Read compact progress only when the provider advertises support. */
|
|
325
|
+
async getSyncCheckpoint(auth, storageIdentityKey, storageName) {
|
|
326
|
+
// Settings are already exchanged with legacy providers. Only an advertised
|
|
327
|
+
// capability enables this RPC; transport and authentication failures propagate.
|
|
328
|
+
if ((await this.makeAvailable()).syncCheckpointVersion !== 1)
|
|
329
|
+
return undefined;
|
|
330
|
+
const checkpoint = await this.rpcCall('getSyncCheckpoint', [auth, storageIdentityKey, storageName]);
|
|
331
|
+
return (0, syncCheckpoint_1.validateSyncCheckpoint)(checkpoint);
|
|
332
|
+
}
|
|
287
333
|
/**
|
|
288
334
|
* Used to both find and insert a `TableSyncState` record for the user to track wallet data replication across storage providers.
|
|
289
335
|
* @param auth Identifies client by identity key and the storage identity key of their currently active storage.
|
|
@@ -447,7 +493,17 @@ class StorageClientBase {
|
|
|
447
493
|
* @returns whether processing is done, counts of inserts and udpates, and related progress tracking properties.
|
|
448
494
|
*/
|
|
449
495
|
async processSyncChunk(args, chunk) {
|
|
450
|
-
const
|
|
496
|
+
const wireChunk = this.binaryRequests && this.serverSupportsBinary ? (0, syncChunkBinary_1.syncChunkBinary)(chunk) : chunk;
|
|
497
|
+
const capabilities = this.syncTransferCapabilities();
|
|
498
|
+
// Keep ordinary pages on the existing RPC. Only an oversized encoded payload uses staging.
|
|
499
|
+
const bytes = capabilities == null ? undefined : (0, SyncTransfer_1.encodeSyncTransfer)({ args, chunk: (0, syncChunkBinary_1.syncChunkBinary)(chunk) });
|
|
500
|
+
// Legacy numeric byte arrays can require four JSON characters per byte.
|
|
501
|
+
const expansion = this.binaryRequests && this.serverSupportsBinary ? 1 : 4;
|
|
502
|
+
const r = bytes != null && bytes.length * expansion > (capabilities.inlineBytes ?? 6 * 1024 * 1024)
|
|
503
|
+
? await this.uploadSyncTransfer(args.identityKey, bytes, capabilities)
|
|
504
|
+
: await this.rpcCall('processSyncChunk', [args, wireChunk]);
|
|
505
|
+
if (r.nextCheckpoint != null)
|
|
506
|
+
r.nextCheckpoint = (0, syncCheckpoint_1.validateSyncCheckpoint)(r.nextCheckpoint, args);
|
|
451
507
|
return r;
|
|
452
508
|
}
|
|
453
509
|
/**
|
|
@@ -460,9 +516,145 @@ class StorageClientBase {
|
|
|
460
516
|
* @returns the next "chunk" of replication data
|
|
461
517
|
*/
|
|
462
518
|
async getSyncChunk(args) {
|
|
519
|
+
const transfer = this.syncTransferCapabilities();
|
|
520
|
+
let requestArgs = { ...args, ...(transfer == null ? {} : { syncTransferVersion: 1 }) };
|
|
521
|
+
if (this.syncChunkRoughSizeLimit != null) {
|
|
522
|
+
requestArgs.maxRoughSize = Math.min(requestArgs.maxRoughSize, this.syncChunkRoughSizeLimit);
|
|
523
|
+
}
|
|
524
|
+
for (let retries = 0;; retries++) {
|
|
525
|
+
try {
|
|
526
|
+
return await this.readSyncChunkResponse(requestArgs, args.maxRoughSize, transfer);
|
|
527
|
+
}
|
|
528
|
+
catch (error) {
|
|
529
|
+
if (!isSyncChunkResponseTooLarge(error))
|
|
530
|
+
throw error;
|
|
531
|
+
const smaller = this.smallerSyncRequest(requestArgs, retries);
|
|
532
|
+
if (smaller != null) {
|
|
533
|
+
requestArgs = smaller;
|
|
534
|
+
continue;
|
|
535
|
+
}
|
|
536
|
+
if (transfer == null)
|
|
537
|
+
throw error;
|
|
538
|
+
return await this.downloadSyncTransfer(requestArgs, transfer);
|
|
539
|
+
}
|
|
540
|
+
}
|
|
541
|
+
}
|
|
542
|
+
async readSyncChunkResponse(args, originalMaxRoughSize, transfer) {
|
|
463
543
|
const r = await this.rpcCall('getSyncChunk', [args]);
|
|
544
|
+
if ('syncTransfer' in r) {
|
|
545
|
+
if (transfer == null || Object.keys(r).length !== 1)
|
|
546
|
+
throw new Error('Unexpected wallet sync transfer response');
|
|
547
|
+
return await this.downloadSyncTransfer(args, transfer, r.syncTransfer);
|
|
548
|
+
}
|
|
549
|
+
if (args.maxRoughSize < originalMaxRoughSize) {
|
|
550
|
+
this.syncChunkRoughSizeLimit = args.maxRoughSize;
|
|
551
|
+
}
|
|
464
552
|
return (0, entityValidationHelpers_1.validateSyncChunkEntities)(r);
|
|
465
553
|
}
|
|
554
|
+
requestUsesBinary(method) {
|
|
555
|
+
const transferPart = method === 'writeSyncTransferPart' && this.settings?.syncTransfer?.version === 1;
|
|
556
|
+
return (this.binaryRequests || transferPart) && this.serverSupportsBinary;
|
|
557
|
+
}
|
|
558
|
+
rpcResponseError(response) {
|
|
559
|
+
const error = new Error(`WalletStorageClient rpcCall: network error ${response.status} ${response.statusText}`);
|
|
560
|
+
if (response.status !== 429)
|
|
561
|
+
return error;
|
|
562
|
+
const after = response.headers.get('retry-after');
|
|
563
|
+
let delay = 1000;
|
|
564
|
+
if (after != null)
|
|
565
|
+
delay = /^\d+$/.test(after) ? Number(after) * 1000 : Date.parse(after) - Date.now();
|
|
566
|
+
return Object.assign(error, { retryAfterMs: delay });
|
|
567
|
+
}
|
|
568
|
+
smallerSyncRequest(args, retries) {
|
|
569
|
+
const nextRoughSize = Math.max(minimumSyncChunkRoughSize, Math.floor(args.maxRoughSize / 2));
|
|
570
|
+
if (retries < syncChunkResponseRetryLimit && nextRoughSize < args.maxRoughSize) {
|
|
571
|
+
return { ...args, maxRoughSize: nextRoughSize };
|
|
572
|
+
}
|
|
573
|
+
if (args.maxItems === 1)
|
|
574
|
+
return undefined;
|
|
575
|
+
return { ...args, maxItems: 1, maxRoughSize: minimumSyncChunkRoughSize };
|
|
576
|
+
}
|
|
577
|
+
syncTransferCapabilities() {
|
|
578
|
+
const value = this.settings?.syncTransfer;
|
|
579
|
+
return value == null ? undefined : (0, SyncTransfer_1.validateSyncTransferCapabilities)(value);
|
|
580
|
+
}
|
|
581
|
+
syncTransferRetryDelay(error, attempt) {
|
|
582
|
+
const message = error instanceof Error ? error.message : '';
|
|
583
|
+
if (attempt >= 2 || !/network error (?:429|502|503|504)|timed out waiting for authenticated response|fetch failed|Failed to fetch/i.test(message))
|
|
584
|
+
return undefined;
|
|
585
|
+
if (!/network error 429/.test(message))
|
|
586
|
+
return 250 * 2 ** attempt;
|
|
587
|
+
const cause = error instanceof Error && error.cause instanceof Error ? error.cause : error;
|
|
588
|
+
const retryAfter = cause != null && typeof cause === 'object' ? Reflect.get(cause, 'retryAfterMs') : undefined;
|
|
589
|
+
const delay = retryAfter ?? 1000;
|
|
590
|
+
return Number.isFinite(delay) && delay >= 0 && delay <= 60_000 ? delay : undefined;
|
|
591
|
+
}
|
|
592
|
+
async transferPartCall(method, input) {
|
|
593
|
+
for (let attempt = 0;; attempt++) {
|
|
594
|
+
try {
|
|
595
|
+
return await this.rpcCall(method, [input]);
|
|
596
|
+
}
|
|
597
|
+
catch (error) {
|
|
598
|
+
// Only immutable reads and identical staged part writes may be retried here. Never commit.
|
|
599
|
+
const delay = this.syncTransferRetryDelay(error, attempt);
|
|
600
|
+
if (delay == null)
|
|
601
|
+
throw error;
|
|
602
|
+
await new Promise(resolve => setTimeout(resolve, delay));
|
|
603
|
+
}
|
|
604
|
+
}
|
|
605
|
+
}
|
|
606
|
+
async releaseSyncTransfer(identityKey, transferId) {
|
|
607
|
+
try {
|
|
608
|
+
await this.rpcCall('releaseSyncTransfer', [{ identityKey, transferId }]);
|
|
609
|
+
}
|
|
610
|
+
catch {
|
|
611
|
+
// Expiry reclaims staging if the connection is gone. Wallet records are never removed.
|
|
612
|
+
}
|
|
613
|
+
}
|
|
614
|
+
async downloadSyncTransfer(args, capabilities, suppliedManifest) {
|
|
615
|
+
const manifest = (0, SyncTransfer_1.validateSyncTransferManifest)(suppliedManifest ?? await this.transferPartCall('beginReadSyncTransfer', { identityKey: args.identityKey, args }), capabilities);
|
|
616
|
+
try {
|
|
617
|
+
const chunk = await (0, SyncTransfer_1.receiveSyncTransfer)(manifest, async (offset) => {
|
|
618
|
+
this.onSyncTransferProgress?.({ direction: 'read', bytes: offset, totalBytes: manifest.totalBytes });
|
|
619
|
+
return await this.transferPartCall('readSyncTransferPart', {
|
|
620
|
+
identityKey: args.identityKey, transferId: manifest.transferId, offset
|
|
621
|
+
});
|
|
622
|
+
});
|
|
623
|
+
this.onSyncTransferProgress?.({ direction: 'read', bytes: manifest.totalBytes, totalBytes: manifest.totalBytes });
|
|
624
|
+
if (chunk?.userIdentityKey !== args.identityKey || chunk.fromStorageIdentityKey !== args.fromStorageIdentityKey ||
|
|
625
|
+
chunk.toStorageIdentityKey !== args.toStorageIdentityKey)
|
|
626
|
+
throw new Error('Wallet sync transfer identities changed');
|
|
627
|
+
return (0, entityValidationHelpers_1.validateSyncChunkEntities)(chunk);
|
|
628
|
+
}
|
|
629
|
+
finally {
|
|
630
|
+
await this.releaseSyncTransfer(args.identityKey, manifest.transferId);
|
|
631
|
+
}
|
|
632
|
+
}
|
|
633
|
+
async uploadSyncTransfer(identityKey, bytes, capabilities) {
|
|
634
|
+
if (bytes.length > capabilities.maxBytes)
|
|
635
|
+
throw new RangeError('Wallet sync record exceeds the negotiated transfer size limit');
|
|
636
|
+
const response = await this.transferPartCall('beginWriteSyncTransfer', { identityKey, digest: (0, SyncTransfer_1.syncTransferDigest)(bytes), totalBytes: bytes.length });
|
|
637
|
+
const manifest = (0, SyncTransfer_1.validateSyncTransferManifest)(response, capabilities);
|
|
638
|
+
if (manifest.digest !== (0, SyncTransfer_1.syncTransferDigest)(bytes) || manifest.totalBytes !== bytes.length ||
|
|
639
|
+
!Number.isSafeInteger(response.receivedBytes) || response.receivedBytes < 0 || response.receivedBytes > bytes.length ||
|
|
640
|
+
(response.receivedBytes !== bytes.length && response.receivedBytes % manifest.partBytes !== 0)) {
|
|
641
|
+
throw new Error('Invalid wallet sync upload checkpoint');
|
|
642
|
+
}
|
|
643
|
+
for (let offset = response.receivedBytes; offset < bytes.length;) {
|
|
644
|
+
this.onSyncTransferProgress?.({ direction: 'write', bytes: offset, totalBytes: bytes.length });
|
|
645
|
+
const part = bytes.subarray(offset, offset + manifest.partBytes);
|
|
646
|
+
const next = await this.transferPartCall('writeSyncTransferPart', {
|
|
647
|
+
identityKey, transferId: manifest.transferId, offset, bytes: part
|
|
648
|
+
});
|
|
649
|
+
if (next !== offset + part.length)
|
|
650
|
+
throw new Error('Invalid wallet sync upload acknowledgement');
|
|
651
|
+
offset = next;
|
|
652
|
+
}
|
|
653
|
+
// An uncertain commit is surfaced. The next sync starts from the writer's durable checkpoint.
|
|
654
|
+
const result = await this.rpcCall('commitSyncTransfer', [{ identityKey, transferId: manifest.transferId }]);
|
|
655
|
+
await this.releaseSyncTransfer(identityKey, manifest.transferId);
|
|
656
|
+
return result;
|
|
657
|
+
}
|
|
466
658
|
/**
|
|
467
659
|
* Handles the data received when a new transaction proof is found in response to an outstanding request for proof data:
|
|
468
660
|
*
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"StorageClientBase.js","sourceRoot":"","sources":["../../../../src/storage/remoting/StorageClientBase.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"StorageClientBase.js","sourceRoot":"","sources":["../../../../src/storage/remoting/StorageClientBase.ts"],"names":[],"mappings":"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"}
|
|
@@ -36,7 +36,7 @@ class StorageClient extends StorageClientBase_1.StorageClientBase {
|
|
|
36
36
|
params,
|
|
37
37
|
id
|
|
38
38
|
};
|
|
39
|
-
const requestUsesBinary = this.
|
|
39
|
+
const requestUsesBinary = this.requestUsesBinary(method);
|
|
40
40
|
const requestBody = await this.traceRpcStep('wallet.storage.request.serialize', rpcSpan, () => (0, BinaryJson_1.stringifyJsonRpc)(body, requestUsesBinary), { 'rpc.encoding': requestUsesBinary ? 'binary-json' : 'json' });
|
|
41
41
|
const response = await this.traceRpcStep('wallet.storage.http', rpcSpan, async () => await this.authClient.fetch(this.endpointUrl, {
|
|
42
42
|
method: 'POST',
|
|
@@ -51,7 +51,7 @@ class StorageClient extends StorageClientBase_1.StorageClientBase {
|
|
|
51
51
|
'rpc.encoding': requestUsesBinary ? 'binary-json' : 'json'
|
|
52
52
|
});
|
|
53
53
|
if (!response.ok) {
|
|
54
|
-
throw
|
|
54
|
+
throw this.rpcResponseError(response);
|
|
55
55
|
}
|
|
56
56
|
const responseUsesBinary = response.headers.get(BinaryJson_1.BINARY_ENCODING_HEADER) === BinaryJson_1.BINARY_ENCODING;
|
|
57
57
|
if (responseUsesBinary)
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"StorageMobile.js","sourceRoot":"","sources":["../../../../src/storage/remoting/StorageMobile.ts"],"names":[],"mappings":";;;AACA,2DAAkF;AAClF,6CAMqB;AAErB;;;;;;;;;;;GAWG;AACH,mBAA2B,SAAQ,qCAAiB;IAClD,YAAY,MAAuB,EAAE,WAAmB,EAAE,OAAO,GAAyB,EAAE;QAC1F,KAAK,CAAC,MAAM,EAAE,WAAW,EAAE,OAAO,CAAC,CAAA;IACrC,CAAC;IAED,+EAA+E;IAC/E,kBAAkB;IAClB,+EAA+E;IAE/E;;;;OAIG;IACO,KAAK,CAAC,OAAO,CAAI,MAAc,EAAE,MAAiB;QAC1D,OAAO,MAAM,IAAI,CAAC,YAAY,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,EAAC,OAAO,EAAC,EAAE;YAC7D,MAAM,EAAE,GAAG,IAAI,CAAC,MAAM,EAAE,CAAA;YACxB,MAAM,IAAI,GAAG;gBACX,OAAO,EAAE,KAAK;gBACd,MAAM;gBACN,MAAM;gBACN,EAAE;aACH,CAAA;YAED,MAAM,iBAAiB,GAAG,IAAI,CAAC,
|
|
1
|
+
{"version":3,"file":"StorageMobile.js","sourceRoot":"","sources":["../../../../src/storage/remoting/StorageMobile.ts"],"names":[],"mappings":"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"}
|
|
@@ -71,10 +71,13 @@ export interface WalletStorageServerOptions {
|
|
|
71
71
|
maxRpcArrayItems?: number;
|
|
72
72
|
/** Maximum serialized JSON-RPC response bytes. Use -1 to disable. */
|
|
73
73
|
maxRpcResponseBytes?: number;
|
|
74
|
+
/** Disable the additive durable transfer transport during a mixed-version rollout. Knex only. */
|
|
75
|
+
syncTransfers?: boolean;
|
|
74
76
|
/** Durable BRC-105 replay claims for monetized multi-replica deployments. */
|
|
75
77
|
paymentReplayStore?: PaymentReplayStore;
|
|
76
78
|
}
|
|
77
79
|
export declare class StorageServer {
|
|
80
|
+
private readonly syncTransfers?;
|
|
78
81
|
private readonly app;
|
|
79
82
|
private readonly host?;
|
|
80
83
|
private readonly port;
|
|
@@ -105,6 +108,7 @@ export declare class StorageServer {
|
|
|
105
108
|
private setupRoutes;
|
|
106
109
|
private handleRpcRequest;
|
|
107
110
|
private handleRpcRequestCore;
|
|
111
|
+
private sendOversizedSyncResponse;
|
|
108
112
|
private traceHttpRequest;
|
|
109
113
|
private sendRpc;
|
|
110
114
|
private enforceRpcRequestBudgets;
|
|
@@ -114,6 +118,7 @@ export declare class StorageServer {
|
|
|
114
118
|
private sendRpcError;
|
|
115
119
|
private createRpcLog;
|
|
116
120
|
private dispatchRpcCall;
|
|
121
|
+
private dispatchSyncTransfer;
|
|
117
122
|
private traceRpcStep;
|
|
118
123
|
private authorizeRpcCall;
|
|
119
124
|
private logIgnoredDestroy;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"StorageServer.d.ts","sourceRoot":"","sources":["../../../../src/storage/remoting/StorageServer.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"StorageServer.d.ts","sourceRoot":"","sources":["../../../../src/storage/remoting/StorageServer.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,15 +1,19 @@
|
|
|
1
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.StorageServer = void 0;
|
|
7
|
+
const StorageKnex_1 = require("../StorageKnex");
|
|
8
|
+
const KnexSyncTransferStore_1 = require("./KnexSyncTransferStore");
|
|
9
|
+
const SyncTransfer_1 = require("./SyncTransfer");
|
|
10
|
+
const syncChunkBinary_1 = require("./syncChunkBinary");
|
|
2
11
|
/**
|
|
3
12
|
* StorageServer.ts
|
|
4
13
|
*
|
|
5
14
|
* A server-side class that "has a" local WalletStorage (like a StorageKnex instance),
|
|
6
15
|
* and exposes it via a JSON-RPC POST endpoint using Express.
|
|
7
16
|
*/
|
|
8
|
-
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
9
|
-
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
10
|
-
};
|
|
11
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
12
|
-
exports.StorageServer = void 0;
|
|
13
17
|
const sdk_1 = require("@bsv/sdk");
|
|
14
18
|
const express_1 = __importDefault(require("express"));
|
|
15
19
|
const auth_express_middleware_1 = require("@bsv/auth-express-middleware");
|
|
@@ -25,7 +29,7 @@ const RateLimitPolicy_1 = require("./RateLimitPolicy");
|
|
|
25
29
|
const edgePolicy_1 = require("./edgePolicy");
|
|
26
30
|
const actionBatchPack_1 = require("../../utility/actionBatchPack");
|
|
27
31
|
const actionBatchBlobs_1 = require("../methods/actionBatchBlobs");
|
|
28
|
-
const
|
|
32
|
+
const validateRpcSyncProofs_1 = require("./validateRpcSyncProofs");
|
|
29
33
|
const storageRpcMethods = new Set([
|
|
30
34
|
'abortAction',
|
|
31
35
|
'abortActionBatch',
|
|
@@ -40,6 +44,7 @@ const storageRpcMethods = new Set([
|
|
|
40
44
|
'extendActionBatch',
|
|
41
45
|
'findCertificatesAuth',
|
|
42
46
|
'findOrInsertSyncStateAuth',
|
|
47
|
+
'getSyncCheckpoint',
|
|
43
48
|
'findOrInsertUser',
|
|
44
49
|
'findOutputBaskets',
|
|
45
50
|
'findOutputBasketsAuth',
|
|
@@ -78,6 +83,7 @@ const authIdRpcMethods = new Set([
|
|
|
78
83
|
'extendActionBatch',
|
|
79
84
|
'findCertificatesAuth',
|
|
80
85
|
'findOrInsertSyncStateAuth',
|
|
86
|
+
'getSyncCheckpoint',
|
|
81
87
|
'findOutputBaskets',
|
|
82
88
|
'findOutputBasketsAuth',
|
|
83
89
|
'findOutputsAuth',
|
|
@@ -127,11 +133,16 @@ function requiredAuthenticatedIdentityKey(req) {
|
|
|
127
133
|
}
|
|
128
134
|
return identityKey;
|
|
129
135
|
}
|
|
136
|
+
function escapeRpcJson(serialized) {
|
|
137
|
+
const escapes = { '<': String.raw `\u003c`, '>': String.raw `\u003e`, '&': String.raw `\u0026` };
|
|
138
|
+
return serialized.replace(/[<>&]/g, character => escapes[character]);
|
|
139
|
+
}
|
|
130
140
|
function firstRequestHeader(req, name) {
|
|
131
141
|
const value = req.headers[name.toLowerCase()];
|
|
132
142
|
return Array.isArray(value) ? value[0] : value;
|
|
133
143
|
}
|
|
134
144
|
class StorageServer {
|
|
145
|
+
syncTransfers;
|
|
135
146
|
app = (0, express_1.default)();
|
|
136
147
|
host;
|
|
137
148
|
port;
|
|
@@ -209,6 +220,18 @@ class StorageServer {
|
|
|
209
220
|
this.defaultRpcListLimit > this.maxRpcListLimit) {
|
|
210
221
|
throw new RangeError('defaultRpcListLimit must not exceed maxRpcListLimit');
|
|
211
222
|
}
|
|
223
|
+
const jsonBodyLimit = (0, edgePolicy_1.readBodyLimitBytes)('WALLET_STORAGE_JSON', (0, edgePolicy_1.profileValue)(profile, {
|
|
224
|
+
small: 2 * 1024 * 1024, standard: 8 * 1024 * 1024, highThroughput: 32 * 1024 * 1024
|
|
225
|
+
}));
|
|
226
|
+
// Keep legacy configurations working when their envelopes cannot fit even a minimum part.
|
|
227
|
+
if (options.syncTransfers !== false && storage instanceof StorageKnex_1.StorageKnex && jsonBodyLimit >= 4096 &&
|
|
228
|
+
(this.maxRpcResponseBytes === -1 || this.maxRpcResponseBytes >= 4096)) {
|
|
229
|
+
this.syncTransfers = new KnexSyncTransferStore_1.KnexSyncTransferStore(storage.knex, {
|
|
230
|
+
version: 1, maxBytes: SyncTransfer_1.SYNC_TRANSFER_MAX_BYTES,
|
|
231
|
+
inlineBytes: Math.min(6 * 1024 * 1024, Math.floor(jsonBodyLimit / 2), this.maxRpcResponseBytes === -1 ? SyncTransfer_1.SYNC_TRANSFER_MAX_BYTES : Math.floor(this.maxRpcResponseBytes / 2)),
|
|
232
|
+
partBytes: Math.min(SyncTransfer_1.SYNC_TRANSFER_PART_BYTES, Math.floor(jsonBodyLimit / 4), this.maxRpcResponseBytes === -1 ? SyncTransfer_1.SYNC_TRANSFER_PART_BYTES : Math.floor(this.maxRpcResponseBytes / 4))
|
|
233
|
+
});
|
|
234
|
+
}
|
|
212
235
|
const legacyLogShortReqs = options['logShortReqs'];
|
|
213
236
|
if (legacyLogShortReqs) {
|
|
214
237
|
this.setupShortReqLogging();
|
|
@@ -389,7 +412,9 @@ class StorageServer {
|
|
|
389
412
|
const logObj = this.createRpcLog(req, method, id, params);
|
|
390
413
|
try {
|
|
391
414
|
this.enforceRpcRequestBudgets(method, params);
|
|
392
|
-
const dispatch =
|
|
415
|
+
const dispatch = method.endsWith('SyncTransfer') || method.endsWith('SyncTransferPart')
|
|
416
|
+
? await this.dispatchSyncTransfer(method, params, req)
|
|
417
|
+
: await this.dispatchRpcCall(method, params, req, logObj, rpcSpan);
|
|
393
418
|
if (!dispatch.found) {
|
|
394
419
|
return this.sendRpc(res, useBinary, {
|
|
395
420
|
jsonrpc: '2.0',
|
|
@@ -397,12 +422,29 @@ class StorageServer {
|
|
|
397
422
|
id
|
|
398
423
|
}, 400);
|
|
399
424
|
}
|
|
400
|
-
|
|
425
|
+
const result = useBinary && method === 'getSyncChunk'
|
|
426
|
+
? (0, syncChunkBinary_1.syncChunkBinary)(dispatch.result)
|
|
427
|
+
: dispatch.result;
|
|
428
|
+
const payload = { jsonrpc: '2.0', result, id };
|
|
429
|
+
const serialized = escapeRpcJson((0, BinaryJson_1.stringifyJsonRpc)(payload, useBinary));
|
|
430
|
+
// Apply the response bound before consulting any client transport preference.
|
|
431
|
+
if (this.maxRpcResponseBytes !== -1 && Buffer.byteLength(serialized, 'utf8') > this.maxRpcResponseBytes) {
|
|
432
|
+
return await this.sendOversizedSyncResponse(req, res, useBinary, method, params, payload);
|
|
433
|
+
}
|
|
434
|
+
return this.sendRpc(res, useBinary, payload, 200, serialized);
|
|
401
435
|
}
|
|
402
436
|
catch (error) {
|
|
403
437
|
return this.sendRpcError(res, useBinary, id, error);
|
|
404
438
|
}
|
|
405
439
|
}
|
|
440
|
+
async sendOversizedSyncResponse(req, res, useBinary, method, params, payload) {
|
|
441
|
+
// Dispatch already applied normal RPC authorization. Negotiation changes only framing.
|
|
442
|
+
if (method !== 'getSyncChunk' || params[0]?.syncTransferVersion !== 1 || this.syncTransfers == null) {
|
|
443
|
+
return this.sendRpc(res, useBinary, payload);
|
|
444
|
+
}
|
|
445
|
+
const manifest = await this.syncTransfers.beginRead(requiredAuthenticatedIdentityKey(req), (0, SyncTransfer_1.syncTransferDigest)((0, SyncTransfer_1.encodeSyncTransfer)(params[0])), (0, SyncTransfer_1.encodeSyncTransfer)((0, syncChunkBinary_1.syncChunkBinary)(payload.result)));
|
|
446
|
+
return this.sendRpc(res, useBinary, { ...payload, result: { syncTransfer: manifest } });
|
|
447
|
+
}
|
|
406
448
|
traceHttpRequest(req, res, next) {
|
|
407
449
|
const span = this.telemetry.startSpan('wallet.storage.http.request', {
|
|
408
450
|
component: 'wallet-storage-server',
|
|
@@ -436,9 +478,8 @@ class StorageServer {
|
|
|
436
478
|
});
|
|
437
479
|
next();
|
|
438
480
|
}
|
|
439
|
-
sendRpc(res, useBinary, payload, status = 200) {
|
|
481
|
+
sendRpc(res, useBinary, payload, status = 200, serialized = escapeRpcJson((0, BinaryJson_1.stringifyJsonRpc)(payload, useBinary))) {
|
|
440
482
|
res.set('X-Content-Type-Options', 'nosniff');
|
|
441
|
-
const serialized = (0, BinaryJson_1.stringifyJsonRpc)(payload, useBinary);
|
|
442
483
|
if (this.maxRpcResponseBytes !== -1 && Buffer.byteLength(serialized, 'utf8') > this.maxRpcResponseBytes) {
|
|
443
484
|
return res.status(413).json({
|
|
444
485
|
jsonrpc: '2.0',
|
|
@@ -490,6 +531,9 @@ class StorageServer {
|
|
|
490
531
|
throw new RangeError('RPC parameter nesting exceeds 64 levels');
|
|
491
532
|
if (current.value == null || typeof current.value !== 'object')
|
|
492
533
|
continue;
|
|
534
|
+
// Decoded binary values are bounded by the HTTP body limit, not item cardinality.
|
|
535
|
+
if (current.value instanceof Uint8Array)
|
|
536
|
+
continue;
|
|
493
537
|
if (seen.has(current.value))
|
|
494
538
|
continue;
|
|
495
539
|
seen.add(current.value);
|
|
@@ -569,7 +613,12 @@ class StorageServer {
|
|
|
569
613
|
return { found: true, result: undefined };
|
|
570
614
|
const logger = this.createRpcLogger(method, params);
|
|
571
615
|
try {
|
|
572
|
-
|
|
616
|
+
let result = await this.traceRpcStep('wallet.storage.handler', rpcSpan, async () => await storageHandler.call(this.storage, ...params), { 'rpc.method': method });
|
|
617
|
+
if ((method === 'makeAvailable' || method === 'getSettings') && typeof this.storage.getSyncCheckpoint === 'function') {
|
|
618
|
+
// Advertise on the wire without mutating the persisted settings object.
|
|
619
|
+
result = { ...result, syncCheckpointVersion: 1,
|
|
620
|
+
...(this.syncTransfers == null ? {} : { syncTransfer: this.syncTransfers.capabilities }) };
|
|
621
|
+
}
|
|
573
622
|
this.finishRpcLogging(logger, result);
|
|
574
623
|
return { found: true, result };
|
|
575
624
|
}
|
|
@@ -579,6 +628,68 @@ class StorageServer {
|
|
|
579
628
|
throw error;
|
|
580
629
|
}
|
|
581
630
|
}
|
|
631
|
+
async dispatchSyncTransfer(method, params, req) {
|
|
632
|
+
const transfers = this.syncTransfers;
|
|
633
|
+
if (transfers == null)
|
|
634
|
+
return { found: false };
|
|
635
|
+
const identityKey = requiredAuthenticatedIdentityKey(req);
|
|
636
|
+
const input = params[0];
|
|
637
|
+
if (input == null || typeof input !== 'object' || input.identityKey !== identityKey) {
|
|
638
|
+
throw new WERR_errors_1.WERR_UNAUTHORIZED('Sync transfer identity must match authentication');
|
|
639
|
+
}
|
|
640
|
+
let result;
|
|
641
|
+
switch (method) {
|
|
642
|
+
case 'beginReadSyncTransfer': {
|
|
643
|
+
const args = input.args;
|
|
644
|
+
if (args?.identityKey !== identityKey ||
|
|
645
|
+
args.fromStorageIdentityKey !== this.storage.getSettings().storageIdentityKey) {
|
|
646
|
+
throw new WERR_errors_1.WERR_UNAUTHORIZED('Sync transfer source must match authenticated storage');
|
|
647
|
+
}
|
|
648
|
+
// Retain existing request validation, authorization, ordering and user scoping.
|
|
649
|
+
const context = (0, SyncTransfer_1.syncTransferDigest)((0, SyncTransfer_1.encodeSyncTransfer)(args));
|
|
650
|
+
this.enforceRpcRequestBudgets('getSyncChunk', [args]);
|
|
651
|
+
await this.authorizeRpcCall('getSyncChunk', [args], req);
|
|
652
|
+
const chunk = await this.storage.getSyncChunk(args);
|
|
653
|
+
const bytes = (0, SyncTransfer_1.encodeSyncTransfer)((0, syncChunkBinary_1.syncChunkBinary)(chunk));
|
|
654
|
+
result = await transfers.beginRead(identityKey, context, bytes);
|
|
655
|
+
break;
|
|
656
|
+
}
|
|
657
|
+
case 'readSyncTransferPart':
|
|
658
|
+
result = await transfers.read(identityKey, input.transferId, input.offset);
|
|
659
|
+
break;
|
|
660
|
+
case 'beginWriteSyncTransfer':
|
|
661
|
+
result = await transfers.beginWrite(identityKey, input.digest, input.totalBytes);
|
|
662
|
+
break;
|
|
663
|
+
case 'writeSyncTransferPart':
|
|
664
|
+
result = await transfers.write(identityKey, input.transferId, input.offset, input.bytes);
|
|
665
|
+
break;
|
|
666
|
+
case 'commitSyncTransfer': {
|
|
667
|
+
const staged = await transfers.loadWrite(identityKey, input.transferId);
|
|
668
|
+
if (staged.result !== undefined)
|
|
669
|
+
return { found: true, result: staged.result };
|
|
670
|
+
const payload = (0, SyncTransfer_1.decodeSyncTransfer)(staged.bytes);
|
|
671
|
+
if (payload?.args?.identityKey !== identityKey || payload.chunk?.userIdentityKey !== identityKey ||
|
|
672
|
+
payload.args.toStorageIdentityKey !== this.storage.getSettings().storageIdentityKey ||
|
|
673
|
+
payload.chunk.toStorageIdentityKey !== payload.args.toStorageIdentityKey ||
|
|
674
|
+
payload.chunk.fromStorageIdentityKey !== payload.args.fromStorageIdentityKey) {
|
|
675
|
+
throw new WERR_errors_1.WERR_UNAUTHORIZED('Sync transfer wallet and storage identities must match');
|
|
676
|
+
}
|
|
677
|
+
// Mark only the reconstructed request: old peers retain their existing wire contract.
|
|
678
|
+
payload.args.requireMatchingCheckpoint = true;
|
|
679
|
+
this.enforceRpcRequestBudgets('processSyncChunk', [payload.args, payload.chunk]);
|
|
680
|
+
const dispatch = await this.dispatchRpcCall('processSyncChunk', [payload.args, payload.chunk], req);
|
|
681
|
+
result = dispatch.result;
|
|
682
|
+
await transfers.complete(identityKey, input.transferId, result);
|
|
683
|
+
break;
|
|
684
|
+
}
|
|
685
|
+
case 'releaseSyncTransfer':
|
|
686
|
+
await transfers.release(identityKey, input.transferId);
|
|
687
|
+
result = true;
|
|
688
|
+
break;
|
|
689
|
+
default: return { found: false };
|
|
690
|
+
}
|
|
691
|
+
return { found: true, result };
|
|
692
|
+
}
|
|
582
693
|
async traceRpcStep(name, parent, callback, attributes) {
|
|
583
694
|
if (parent == null)
|
|
584
695
|
return await callback();
|
|
@@ -607,9 +718,7 @@ class StorageServer {
|
|
|
607
718
|
case 'processSyncChunk':
|
|
608
719
|
await this.validateParam0(params, req);
|
|
609
720
|
(0, entityValidationHelpers_1.validateSyncChunkEntities)(params[1]);
|
|
610
|
-
|
|
611
|
-
await (0, validateSyncProof_1.validateSyncProof)(this.storage, proof);
|
|
612
|
-
}
|
|
721
|
+
await (0, validateRpcSyncProofs_1.validateSyncProofs)(this.storage, params[1].provenTxs ?? []);
|
|
613
722
|
return true;
|
|
614
723
|
default:
|
|
615
724
|
await this.authorizeStandardRpcCall(method, params, req);
|