@aztec/blob-client 0.0.1-commit.9ef841308 → 0.0.1-commit.a4600f49
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/dest/archive/blobscan_archive_client.d.ts +8 -92
- package/dest/archive/blobscan_archive_client.d.ts.map +1 -1
- package/dest/client/config.js +2 -2
- package/dest/client/factory.d.ts +3 -5
- package/dest/client/factory.d.ts.map +1 -1
- package/dest/client/factory.js +1 -1
- package/dest/client/http.js +9 -5
- package/package.json +8 -8
- package/src/client/config.ts +2 -2
- package/src/client/factory.ts +2 -2
- package/src/client/http.ts +9 -5
|
@@ -2,7 +2,7 @@ import type { BlobJson } from '@aztec/blob-lib/types';
|
|
|
2
2
|
import { type TelemetryClient } from '@aztec/telemetry-client';
|
|
3
3
|
import { z } from 'zod';
|
|
4
4
|
import type { BlobArchiveClient } from './interface.js';
|
|
5
|
-
export declare const BlobscanBlockResponseSchema: z.
|
|
5
|
+
export declare const BlobscanBlockResponseSchema: z.ZodPipe<z.ZodObject<{
|
|
6
6
|
hash: z.ZodString;
|
|
7
7
|
slot: z.ZodNumber;
|
|
8
8
|
number: z.ZodNumber;
|
|
@@ -15,73 +15,9 @@ export declare const BlobscanBlockResponseSchema: z.ZodEffects<z.ZodObject<{
|
|
|
15
15
|
proof: z.ZodString;
|
|
16
16
|
size: z.ZodNumber;
|
|
17
17
|
index: z.ZodOptional<z.ZodNumber>;
|
|
18
|
-
},
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
commitment: string;
|
|
22
|
-
proof: string;
|
|
23
|
-
size: number;
|
|
24
|
-
index?: number | undefined;
|
|
25
|
-
}, {
|
|
26
|
-
versionedHash: string;
|
|
27
|
-
data: string;
|
|
28
|
-
commitment: string;
|
|
29
|
-
proof: string;
|
|
30
|
-
size: number;
|
|
31
|
-
index?: number | undefined;
|
|
32
|
-
}>, "many">;
|
|
33
|
-
}, "strip", z.ZodTypeAny, {
|
|
34
|
-
hash: string;
|
|
35
|
-
blobs: {
|
|
36
|
-
versionedHash: string;
|
|
37
|
-
data: string;
|
|
38
|
-
commitment: string;
|
|
39
|
-
proof: string;
|
|
40
|
-
size: number;
|
|
41
|
-
index?: number | undefined;
|
|
42
|
-
}[];
|
|
43
|
-
}, {
|
|
44
|
-
hash: string;
|
|
45
|
-
blobs: {
|
|
46
|
-
versionedHash: string;
|
|
47
|
-
data: string;
|
|
48
|
-
commitment: string;
|
|
49
|
-
proof: string;
|
|
50
|
-
size: number;
|
|
51
|
-
index?: number | undefined;
|
|
52
|
-
}[];
|
|
53
|
-
}>, "many">;
|
|
54
|
-
}, "strip", z.ZodTypeAny, {
|
|
55
|
-
hash: string;
|
|
56
|
-
slot: number;
|
|
57
|
-
number: number;
|
|
58
|
-
transactions: {
|
|
59
|
-
hash: string;
|
|
60
|
-
blobs: {
|
|
61
|
-
versionedHash: string;
|
|
62
|
-
data: string;
|
|
63
|
-
commitment: string;
|
|
64
|
-
proof: string;
|
|
65
|
-
size: number;
|
|
66
|
-
index?: number | undefined;
|
|
67
|
-
}[];
|
|
68
|
-
}[];
|
|
69
|
-
}, {
|
|
70
|
-
hash: string;
|
|
71
|
-
slot: number;
|
|
72
|
-
number: number;
|
|
73
|
-
transactions: {
|
|
74
|
-
hash: string;
|
|
75
|
-
blobs: {
|
|
76
|
-
versionedHash: string;
|
|
77
|
-
data: string;
|
|
78
|
-
commitment: string;
|
|
79
|
-
proof: string;
|
|
80
|
-
size: number;
|
|
81
|
-
index?: number | undefined;
|
|
82
|
-
}[];
|
|
83
|
-
}[];
|
|
84
|
-
}>, {
|
|
18
|
+
}, z.core.$strip>>;
|
|
19
|
+
}, z.core.$strip>>;
|
|
20
|
+
}, z.core.$strip>, z.ZodTransform<{
|
|
85
21
|
blob: string;
|
|
86
22
|
kzg_commitment: string;
|
|
87
23
|
}[], {
|
|
@@ -99,34 +35,14 @@ export declare const BlobscanBlockResponseSchema: z.ZodEffects<z.ZodObject<{
|
|
|
99
35
|
index?: number | undefined;
|
|
100
36
|
}[];
|
|
101
37
|
}[];
|
|
102
|
-
}
|
|
38
|
+
}>>;
|
|
103
39
|
export declare const BlobscanBlocksResponseSchema: z.ZodObject<{
|
|
104
40
|
blocks: z.ZodArray<z.ZodObject<{
|
|
105
41
|
hash: z.ZodString;
|
|
106
42
|
slot: z.ZodNumber;
|
|
107
43
|
number: z.ZodNumber;
|
|
108
|
-
},
|
|
109
|
-
|
|
110
|
-
slot: number;
|
|
111
|
-
number: number;
|
|
112
|
-
}, {
|
|
113
|
-
hash: string;
|
|
114
|
-
slot: number;
|
|
115
|
-
number: number;
|
|
116
|
-
}>, "many">;
|
|
117
|
-
}, "strip", z.ZodTypeAny, {
|
|
118
|
-
blocks: {
|
|
119
|
-
hash: string;
|
|
120
|
-
slot: number;
|
|
121
|
-
number: number;
|
|
122
|
-
}[];
|
|
123
|
-
}, {
|
|
124
|
-
blocks: {
|
|
125
|
-
hash: string;
|
|
126
|
-
slot: number;
|
|
127
|
-
number: number;
|
|
128
|
-
}[];
|
|
129
|
-
}>;
|
|
44
|
+
}, z.core.$strip>>;
|
|
45
|
+
}, z.core.$strip>;
|
|
130
46
|
export declare class BlobscanArchiveClient implements BlobArchiveClient {
|
|
131
47
|
private readonly logger;
|
|
132
48
|
private readonly fetchOpts;
|
|
@@ -143,4 +59,4 @@ export declare class BlobscanArchiveClient implements BlobArchiveClient {
|
|
|
143
59
|
getBlobsFromBlock(blockId: string): Promise<BlobJson[] | undefined>;
|
|
144
60
|
getBlobData(id: string): Promise<Buffer | undefined>;
|
|
145
61
|
}
|
|
146
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
62
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmxvYnNjYW5fYXJjaGl2ZV9jbGllbnQuZC50cyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9hcmNoaXZlL2Jsb2JzY2FuX2FyY2hpdmVfY2xpZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sS0FBSyxFQUFFLFFBQVEsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBSXRELE9BQU8sRUFBRSxLQUFLLGVBQWUsRUFBc0IsTUFBTSx5QkFBeUIsQ0FBQztBQUVuRixPQUFPLEVBQUUsQ0FBQyxFQUFFLE1BQU0sS0FBSyxDQUFDO0FBR3hCLE9BQU8sS0FBSyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFFeEQsZUFBTyxNQUFNLDJCQUEyQjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBK0J2QyxDQUFDO0FBR0YsZUFBTyxNQUFNLDRCQUE0Qjs7Ozs7O2lCQVF2QyxDQUFDO0FBRUgscUJBQWEscUJBQXNCLFlBQVcsaUJBQWlCO0lBQzdELE9BQU8sQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUF1RDtJQUM5RSxPQUFPLENBQUMsUUFBUSxDQUFDLFNBQVMsQ0FBK0M7SUFDekUsT0FBTyxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBU3BCO0lBRUYsT0FBTyxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQU07SUFFOUIsT0FBTyxDQUFDLGVBQWUsQ0FBbUM7SUFFMUQsWUFBWSxPQUFPLEVBQUUsTUFBTSxFQUFFLFNBQVMsR0FBRSxlQUFzQyxFQVU3RTtJQUVZLGNBQWMsSUFBSSxPQUFPLENBQUM7UUFBRSxJQUFJLEVBQUUsTUFBTSxDQUFDO1FBQUMsTUFBTSxFQUFFLE1BQU0sQ0FBQztRQUFDLElBQUksRUFBRSxNQUFNLENBQUE7S0FBRSxDQUFDLENBMkJyRjtJQUVNLFVBQVUsSUFBSSxNQUFNLENBRTFCO0lBRVksaUJBQWlCLENBQUMsT0FBTyxFQUFFLE1BQU0sR0FBRyxPQUFPLENBQUMsUUFBUSxFQUFFLEdBQUcsU0FBUyxDQUFDLENBNEIvRTtJQUVZLFdBQVcsQ0FBQyxFQUFFLEVBQUUsTUFBTSxHQUFHLE9BQU8sQ0FBQyxNQUFNLEdBQUcsU0FBUyxDQUFDLENBMEJoRTtDQUNGIn0=
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"blobscan_archive_client.d.ts","sourceRoot":"","sources":["../../src/archive/blobscan_archive_client.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,uBAAuB,CAAC;AAItD,OAAO,EAAE,KAAK,eAAe,EAAsB,MAAM,yBAAyB,CAAC;AAEnF,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAGxB,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,gBAAgB,CAAC;AAExD,eAAO,MAAM,2BAA2B
|
|
1
|
+
{"version":3,"file":"blobscan_archive_client.d.ts","sourceRoot":"","sources":["../../src/archive/blobscan_archive_client.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,uBAAuB,CAAC;AAItD,OAAO,EAAE,KAAK,eAAe,EAAsB,MAAM,yBAAyB,CAAC;AAEnF,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAGxB,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,gBAAgB,CAAC;AAExD,eAAO,MAAM,2BAA2B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA+BvC,CAAC;AAGF,eAAO,MAAM,4BAA4B;;;;;;iBAQvC,CAAC;AAEH,qBAAa,qBAAsB,YAAW,iBAAiB;IAC7D,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAuD;IAC9E,OAAO,CAAC,QAAQ,CAAC,SAAS,CAA+C;IACzE,OAAO,CAAC,QAAQ,CAAC,KAAK,CASpB;IAEF,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAM;IAE9B,OAAO,CAAC,eAAe,CAAmC;IAE1D,YAAY,OAAO,EAAE,MAAM,EAAE,SAAS,GAAE,eAAsC,EAU7E;IAEY,cAAc,IAAI,OAAO,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC,CA2BrF;IAEM,UAAU,IAAI,MAAM,CAE1B;IAEY,iBAAiB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,QAAQ,EAAE,GAAG,SAAS,CAAC,CA4B/E;IAEY,WAAW,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,CA0BhE;CACF"}
|
package/dest/client/config.js
CHANGED
|
@@ -24,7 +24,7 @@ export const blobClientConfigMapping = {
|
|
|
24
24
|
blobSinkMapSizeKb: {
|
|
25
25
|
env: 'BLOB_SINK_MAP_SIZE_KB',
|
|
26
26
|
description: 'The maximum possible size of the blob sink DB in KB. Overwrites the general dataStoreMapSizeKb.',
|
|
27
|
-
|
|
27
|
+
...optionalNumberConfigHelper()
|
|
28
28
|
},
|
|
29
29
|
blobAllowEmptySources: {
|
|
30
30
|
env: 'BLOB_ALLOW_EMPTY_SOURCES',
|
|
@@ -43,7 +43,7 @@ export const blobClientConfigMapping = {
|
|
|
43
43
|
blobHealthcheckUploadIntervalMinutes: {
|
|
44
44
|
env: 'BLOB_HEALTHCHECK_UPLOAD_INTERVAL_MINUTES',
|
|
45
45
|
description: 'Interval in minutes for uploading healthcheck file to file store (default: 60 = 1 hour)',
|
|
46
|
-
|
|
46
|
+
...optionalNumberConfigHelper()
|
|
47
47
|
},
|
|
48
48
|
l1HttpTimeoutMS: {
|
|
49
49
|
env: 'ETHEREUM_HTTP_TIMEOUT_MS',
|
package/dest/client/factory.d.ts
CHANGED
|
@@ -17,10 +17,8 @@ export declare function createBlobClient(config?: BlobClientConfig, deps?: Creat
|
|
|
17
17
|
export interface BlobClientWithFileStoresConfig extends BlobClientConfig {
|
|
18
18
|
l1ChainId: number;
|
|
19
19
|
rollupVersion: number;
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
toString(): string;
|
|
23
|
-
};
|
|
20
|
+
rollupAddress: {
|
|
21
|
+
toString(): string;
|
|
24
22
|
};
|
|
25
23
|
}
|
|
26
24
|
/**
|
|
@@ -37,4 +35,4 @@ export interface BlobClientWithFileStoresConfig extends BlobClientConfig {
|
|
|
37
35
|
* @returns A BlobClientInterface configured with file store support, already started
|
|
38
36
|
*/
|
|
39
37
|
export declare function createBlobClientWithFileStores(config: BlobClientWithFileStoresConfig, logger?: Logger): Promise<BlobClientInterface>;
|
|
40
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
38
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmFjdG9yeS5kLnRzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2NsaWVudC9mYWN0b3J5LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxLQUFLLE1BQU0sRUFBZ0IsTUFBTSx1QkFBdUIsQ0FBQztBQVFsRSxPQUFPLEtBQUssRUFBRSxtQkFBbUIsRUFBRSxNQUFNLHVDQUF1QyxDQUFDO0FBQ2pGLE9BQU8sRUFBRSxLQUFLLGdCQUFnQixFQUF3QixNQUFNLGFBQWEsQ0FBQztBQUUxRSxPQUFPLEtBQUssRUFBRSxtQkFBbUIsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRzFELE1BQU0sV0FBVyxvQkFBb0I7SUFDbkMsTUFBTSxDQUFDLEVBQUUsTUFBTSxDQUFDO0lBQ2hCLDBDQUEwQztJQUMxQyxnQkFBZ0IsQ0FBQyxFQUFFLG1CQUFtQixFQUFFLENBQUM7SUFDekMsMkNBQTJDO0lBQzNDLHFCQUFxQixDQUFDLEVBQUUsbUJBQW1CLENBQUM7Q0FDN0M7QUFFRCx3QkFBZ0IsZ0JBQWdCLENBQUMsTUFBTSxDQUFDLEVBQUUsZ0JBQWdCLEVBQUUsSUFBSSxDQUFDLEVBQUUsb0JBQW9CLEdBQUcsbUJBQW1CLENBbUI1RztBQUVEOzs7R0FHRztBQUNILE1BQU0sV0FBVyw4QkFBK0IsU0FBUSxnQkFBZ0I7SUFDdEUsU0FBUyxFQUFFLE1BQU0sQ0FBQztJQUNsQixhQUFhLEVBQUUsTUFBTSxDQUFDO0lBQ3RCLGFBQWEsRUFBRTtRQUFFLFFBQVEsSUFBSSxNQUFNLENBQUE7S0FBRSxDQUFDO0NBQ3ZDO0FBRUQ7Ozs7Ozs7Ozs7OztHQVlHO0FBQ0gsd0JBQXNCLDhCQUE4QixDQUNsRCxNQUFNLEVBQUUsOEJBQThCLEVBQ3RDLE1BQU0sQ0FBQyxFQUFFLE1BQU0sR0FDZCxPQUFPLENBQUMsbUJBQW1CLENBQUMsQ0E4QjlCIn0=
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"factory.d.ts","sourceRoot":"","sources":["../../src/client/factory.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,MAAM,EAAgB,MAAM,uBAAuB,CAAC;AAQlE,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,uCAAuC,CAAC;AACjF,OAAO,EAAE,KAAK,gBAAgB,EAAwB,MAAM,aAAa,CAAC;AAE1E,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,gBAAgB,CAAC;AAG1D,MAAM,WAAW,oBAAoB;IACnC,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,0CAA0C;IAC1C,gBAAgB,CAAC,EAAE,mBAAmB,EAAE,CAAC;IACzC,2CAA2C;IAC3C,qBAAqB,CAAC,EAAE,mBAAmB,CAAC;CAC7C;AAED,wBAAgB,gBAAgB,CAAC,MAAM,CAAC,EAAE,gBAAgB,EAAE,IAAI,CAAC,EAAE,oBAAoB,GAAG,mBAAmB,CAmB5G;AAED;;;GAGG;AACH,MAAM,WAAW,8BAA+B,SAAQ,gBAAgB;IACtE,SAAS,EAAE,MAAM,CAAC;IAClB,aAAa,EAAE,MAAM,CAAC;IACtB,
|
|
1
|
+
{"version":3,"file":"factory.d.ts","sourceRoot":"","sources":["../../src/client/factory.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,MAAM,EAAgB,MAAM,uBAAuB,CAAC;AAQlE,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,uCAAuC,CAAC;AACjF,OAAO,EAAE,KAAK,gBAAgB,EAAwB,MAAM,aAAa,CAAC;AAE1E,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,gBAAgB,CAAC;AAG1D,MAAM,WAAW,oBAAoB;IACnC,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,0CAA0C;IAC1C,gBAAgB,CAAC,EAAE,mBAAmB,EAAE,CAAC;IACzC,2CAA2C;IAC3C,qBAAqB,CAAC,EAAE,mBAAmB,CAAC;CAC7C;AAED,wBAAgB,gBAAgB,CAAC,MAAM,CAAC,EAAE,gBAAgB,EAAE,IAAI,CAAC,EAAE,oBAAoB,GAAG,mBAAmB,CAmB5G;AAED;;;GAGG;AACH,MAAM,WAAW,8BAA+B,SAAQ,gBAAgB;IACtE,SAAS,EAAE,MAAM,CAAC;IAClB,aAAa,EAAE,MAAM,CAAC;IACtB,aAAa,EAAE;QAAE,QAAQ,IAAI,MAAM,CAAA;KAAE,CAAC;CACvC;AAED;;;;;;;;;;;;GAYG;AACH,wBAAsB,8BAA8B,CAClD,MAAM,EAAE,8BAA8B,EACtC,MAAM,CAAC,EAAE,MAAM,GACd,OAAO,CAAC,mBAAmB,CAAC,CA8B9B"}
|
package/dest/client/factory.js
CHANGED
|
@@ -40,7 +40,7 @@ export function createBlobClient(config, deps) {
|
|
|
40
40
|
const fileStoreMetadata = {
|
|
41
41
|
l1ChainId: config.l1ChainId,
|
|
42
42
|
rollupVersion: config.rollupVersion,
|
|
43
|
-
rollupAddress: config.
|
|
43
|
+
rollupAddress: config.rollupAddress.toString()
|
|
44
44
|
};
|
|
45
45
|
// Disable internal retries for blob file stores — retry logic is handled by HttpBlobClient.
|
|
46
46
|
// Set a configurable timeout (default 10s) to avoid hanging on slow stores.
|
package/dest/client/http.js
CHANGED
|
@@ -458,9 +458,9 @@ export class HttpBlobClient {
|
|
|
458
458
|
}
|
|
459
459
|
baseUrl += `?${params.toString()}`;
|
|
460
460
|
}
|
|
461
|
-
const { url, ...options } = getBeaconNodeFetchOptions(baseUrl, this.config, l1ConsensusHostIndex);
|
|
461
|
+
const { url, logSafeUrl, ...options } = getBeaconNodeFetchOptions(baseUrl, this.config, l1ConsensusHostIndex);
|
|
462
462
|
this.log.debug(`Fetching blob sidecar for ${blockHashOrSlot}`, {
|
|
463
|
-
url,
|
|
463
|
+
url: logSafeUrl,
|
|
464
464
|
...options
|
|
465
465
|
});
|
|
466
466
|
// No retry here — this is called inside the main retry loop in getBlobSidecar
|
|
@@ -469,9 +469,9 @@ export class HttpBlobClient {
|
|
|
469
469
|
async getLatestSlotNumber(hostUrl, l1ConsensusHostIndex) {
|
|
470
470
|
try {
|
|
471
471
|
const baseUrl = `${hostUrl}/eth/v1/beacon/headers/head`;
|
|
472
|
-
const { url, ...options } = getBeaconNodeFetchOptions(baseUrl, this.config, l1ConsensusHostIndex);
|
|
472
|
+
const { url, logSafeUrl, ...options } = getBeaconNodeFetchOptions(baseUrl, this.config, l1ConsensusHostIndex);
|
|
473
473
|
this.log.debug(`Fetching latest slot number`, {
|
|
474
|
-
url,
|
|
474
|
+
url: logSafeUrl,
|
|
475
475
|
...options
|
|
476
476
|
});
|
|
477
477
|
const res = await this.fetch(url, options);
|
|
@@ -680,11 +680,15 @@ function getBeaconNodeFetchOptions(url, config, l1ConsensusHostIndex) {
|
|
|
680
680
|
const l1ConsensusHostApiKey = l1ConsensusHostIndex !== undefined && l1ConsensusHostApiKeys && l1ConsensusHostApiKeys[l1ConsensusHostIndex];
|
|
681
681
|
const l1ConsensusHostApiKeyHeader = l1ConsensusHostIndex !== undefined && l1ConsensusHostApiKeyHeaders && l1ConsensusHostApiKeyHeaders[l1ConsensusHostIndex];
|
|
682
682
|
let formattedUrl = url;
|
|
683
|
+
let logSafeUrl = url;
|
|
683
684
|
if (l1ConsensusHostApiKey && l1ConsensusHostApiKey.getValue() !== '' && !l1ConsensusHostApiKeyHeader) {
|
|
684
|
-
|
|
685
|
+
const separator = formattedUrl.includes('?') ? '&' : '?';
|
|
686
|
+
formattedUrl += `${separator}key=${l1ConsensusHostApiKey.getValue()}`;
|
|
687
|
+
logSafeUrl += `${separator}key=[REDACTED]`;
|
|
685
688
|
}
|
|
686
689
|
return {
|
|
687
690
|
url: formattedUrl,
|
|
691
|
+
logSafeUrl,
|
|
688
692
|
...l1ConsensusHostApiKey && l1ConsensusHostApiKeyHeader && {
|
|
689
693
|
headers: {
|
|
690
694
|
[l1ConsensusHostApiKeyHeader]: l1ConsensusHostApiKey.getValue()
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@aztec/blob-client",
|
|
3
|
-
"version": "0.0.1-commit.
|
|
3
|
+
"version": "0.0.1-commit.a4600f49",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"bin": "./dest/client/bin/index.js",
|
|
6
6
|
"exports": {
|
|
@@ -56,18 +56,18 @@
|
|
|
56
56
|
]
|
|
57
57
|
},
|
|
58
58
|
"dependencies": {
|
|
59
|
-
"@aztec/blob-lib": "0.0.1-commit.
|
|
60
|
-
"@aztec/ethereum": "0.0.1-commit.
|
|
61
|
-
"@aztec/foundation": "0.0.1-commit.
|
|
62
|
-
"@aztec/kv-store": "0.0.1-commit.
|
|
63
|
-
"@aztec/stdlib": "0.0.1-commit.
|
|
64
|
-
"@aztec/telemetry-client": "0.0.1-commit.
|
|
59
|
+
"@aztec/blob-lib": "0.0.1-commit.a4600f49",
|
|
60
|
+
"@aztec/ethereum": "0.0.1-commit.a4600f49",
|
|
61
|
+
"@aztec/foundation": "0.0.1-commit.a4600f49",
|
|
62
|
+
"@aztec/kv-store": "0.0.1-commit.a4600f49",
|
|
63
|
+
"@aztec/stdlib": "0.0.1-commit.a4600f49",
|
|
64
|
+
"@aztec/telemetry-client": "0.0.1-commit.a4600f49",
|
|
65
65
|
"express": "^4.21.2",
|
|
66
66
|
"snappy": "^7.2.2",
|
|
67
67
|
"source-map-support": "^0.5.21",
|
|
68
68
|
"tslib": "^2.4.0",
|
|
69
69
|
"viem": "npm:@aztec/viem@2.38.2",
|
|
70
|
-
"zod": "^
|
|
70
|
+
"zod": "^4"
|
|
71
71
|
},
|
|
72
72
|
"devDependencies": {
|
|
73
73
|
"@jest/globals": "^30.0.0",
|
package/src/client/config.ts
CHANGED
|
@@ -93,7 +93,7 @@ export const blobClientConfigMapping: ConfigMappingsType<BlobClientConfig> = {
|
|
|
93
93
|
blobSinkMapSizeKb: {
|
|
94
94
|
env: 'BLOB_SINK_MAP_SIZE_KB',
|
|
95
95
|
description: 'The maximum possible size of the blob sink DB in KB. Overwrites the general dataStoreMapSizeKb.',
|
|
96
|
-
|
|
96
|
+
...optionalNumberConfigHelper(),
|
|
97
97
|
},
|
|
98
98
|
blobAllowEmptySources: {
|
|
99
99
|
env: 'BLOB_ALLOW_EMPTY_SOURCES',
|
|
@@ -116,7 +116,7 @@ export const blobClientConfigMapping: ConfigMappingsType<BlobClientConfig> = {
|
|
|
116
116
|
blobHealthcheckUploadIntervalMinutes: {
|
|
117
117
|
env: 'BLOB_HEALTHCHECK_UPLOAD_INTERVAL_MINUTES',
|
|
118
118
|
description: 'Interval in minutes for uploading healthcheck file to file store (default: 60 = 1 hour)',
|
|
119
|
-
|
|
119
|
+
...optionalNumberConfigHelper(),
|
|
120
120
|
},
|
|
121
121
|
l1HttpTimeoutMS: {
|
|
122
122
|
env: 'ETHEREUM_HTTP_TIMEOUT_MS',
|
package/src/client/factory.ts
CHANGED
|
@@ -48,7 +48,7 @@ export function createBlobClient(config?: BlobClientConfig, deps?: CreateBlobCli
|
|
|
48
48
|
export interface BlobClientWithFileStoresConfig extends BlobClientConfig {
|
|
49
49
|
l1ChainId: number;
|
|
50
50
|
rollupVersion: number;
|
|
51
|
-
|
|
51
|
+
rollupAddress: { toString(): string };
|
|
52
52
|
}
|
|
53
53
|
|
|
54
54
|
/**
|
|
@@ -73,7 +73,7 @@ export async function createBlobClientWithFileStores(
|
|
|
73
73
|
const fileStoreMetadata: BlobFileStoreMetadata = {
|
|
74
74
|
l1ChainId: config.l1ChainId,
|
|
75
75
|
rollupVersion: config.rollupVersion,
|
|
76
|
-
rollupAddress: config.
|
|
76
|
+
rollupAddress: config.rollupAddress.toString(),
|
|
77
77
|
};
|
|
78
78
|
|
|
79
79
|
// Disable internal retries for blob file stores — retry logic is handled by HttpBlobClient.
|
package/src/client/http.ts
CHANGED
|
@@ -546,8 +546,8 @@ export class HttpBlobClient implements BlobClientInterface {
|
|
|
546
546
|
baseUrl += `?${params.toString()}`;
|
|
547
547
|
}
|
|
548
548
|
|
|
549
|
-
const { url, ...options } = getBeaconNodeFetchOptions(baseUrl, this.config, l1ConsensusHostIndex);
|
|
550
|
-
this.log.debug(`Fetching blob sidecar for ${blockHashOrSlot}`, { url, ...options });
|
|
549
|
+
const { url, logSafeUrl, ...options } = getBeaconNodeFetchOptions(baseUrl, this.config, l1ConsensusHostIndex);
|
|
550
|
+
this.log.debug(`Fetching blob sidecar for ${blockHashOrSlot}`, { url: logSafeUrl, ...options });
|
|
551
551
|
// No retry here — this is called inside the main retry loop in getBlobSidecar
|
|
552
552
|
return fetch(url, options);
|
|
553
553
|
}
|
|
@@ -555,8 +555,8 @@ export class HttpBlobClient implements BlobClientInterface {
|
|
|
555
555
|
private async getLatestSlotNumber(hostUrl: string, l1ConsensusHostIndex?: number): Promise<number | undefined> {
|
|
556
556
|
try {
|
|
557
557
|
const baseUrl = `${hostUrl}/eth/v1/beacon/headers/head`;
|
|
558
|
-
const { url, ...options } = getBeaconNodeFetchOptions(baseUrl, this.config, l1ConsensusHostIndex);
|
|
559
|
-
this.log.debug(`Fetching latest slot number`, { url, ...options });
|
|
558
|
+
const { url, logSafeUrl, ...options } = getBeaconNodeFetchOptions(baseUrl, this.config, l1ConsensusHostIndex);
|
|
559
|
+
this.log.debug(`Fetching latest slot number`, { url: logSafeUrl, ...options });
|
|
560
560
|
const res = await this.fetch(url, options);
|
|
561
561
|
if (res.ok) {
|
|
562
562
|
const body = await res.json();
|
|
@@ -819,12 +819,16 @@ function getBeaconNodeFetchOptions(url: string, config: BlobClientConfig, l1Cons
|
|
|
819
819
|
l1ConsensusHostApiKeyHeaders[l1ConsensusHostIndex];
|
|
820
820
|
|
|
821
821
|
let formattedUrl = url;
|
|
822
|
+
let logSafeUrl = url;
|
|
822
823
|
if (l1ConsensusHostApiKey && l1ConsensusHostApiKey.getValue() !== '' && !l1ConsensusHostApiKeyHeader) {
|
|
823
|
-
|
|
824
|
+
const separator = formattedUrl.includes('?') ? '&' : '?';
|
|
825
|
+
formattedUrl += `${separator}key=${l1ConsensusHostApiKey.getValue()}`;
|
|
826
|
+
logSafeUrl += `${separator}key=[REDACTED]`;
|
|
824
827
|
}
|
|
825
828
|
|
|
826
829
|
return {
|
|
827
830
|
url: formattedUrl,
|
|
831
|
+
logSafeUrl,
|
|
828
832
|
...(l1ConsensusHostApiKey &&
|
|
829
833
|
l1ConsensusHostApiKeyHeader && {
|
|
830
834
|
headers: {
|