@helia/verified-fetch 0.0.0-a04e041 → 0.0.0-dc2e7a6

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.
Files changed (33) hide show
  1. package/README.md +0 -33
  2. package/dist/index.min.js +4 -4
  3. package/dist/src/index.d.ts +0 -36
  4. package/dist/src/index.d.ts.map +1 -1
  5. package/dist/src/index.js +0 -33
  6. package/dist/src/index.js.map +1 -1
  7. package/dist/src/utils/parse-url-string.d.ts +0 -2
  8. package/dist/src/utils/parse-url-string.d.ts.map +1 -1
  9. package/dist/src/utils/parse-url-string.js +0 -6
  10. package/dist/src/utils/parse-url-string.js.map +1 -1
  11. package/dist/src/verified-fetch.d.ts +15 -17
  12. package/dist/src/verified-fetch.d.ts.map +1 -1
  13. package/dist/src/verified-fetch.js +129 -211
  14. package/dist/src/verified-fetch.js.map +1 -1
  15. package/package.json +12 -18
  16. package/src/index.ts +0 -37
  17. package/src/utils/parse-url-string.ts +1 -11
  18. package/src/verified-fetch.ts +134 -237
  19. package/dist/src/utils/get-content-disposition-filename.d.ts +0 -6
  20. package/dist/src/utils/get-content-disposition-filename.d.ts.map +0 -1
  21. package/dist/src/utils/get-content-disposition-filename.js +0 -16
  22. package/dist/src/utils/get-content-disposition-filename.js.map +0 -1
  23. package/dist/src/utils/responses.d.ts +0 -4
  24. package/dist/src/utils/responses.d.ts.map +0 -1
  25. package/dist/src/utils/responses.js +0 -21
  26. package/dist/src/utils/responses.js.map +0 -1
  27. package/dist/src/utils/select-output-type.d.ts +0 -12
  28. package/dist/src/utils/select-output-type.d.ts.map +0 -1
  29. package/dist/src/utils/select-output-type.js +0 -147
  30. package/dist/src/utils/select-output-type.js.map +0 -1
  31. package/src/utils/get-content-disposition-filename.ts +0 -18
  32. package/src/utils/responses.ts +0 -22
  33. package/src/utils/select-output-type.ts +0 -166
@@ -1,22 +1,17 @@
1
- import { car } from '@helia/car';
2
1
  import { ipns as heliaIpns } from '@helia/ipns';
3
2
  import { dnsJsonOverHttps } from '@helia/ipns/dns-resolvers';
4
3
  import { unixfs as heliaUnixFs } from '@helia/unixfs';
5
- import * as ipldDagCbor from '@ipld/dag-cbor';
6
- import * as ipldDagJson from '@ipld/dag-json';
4
+ import { code as dagCborCode } from '@ipld/dag-cbor';
5
+ import { code as dagJsonCode } from '@ipld/dag-json';
7
6
  import { code as dagPbCode } from '@ipld/dag-pb';
8
- import toBrowserReadableStream from 'it-to-browser-readablestream';
9
7
  import { code as jsonCode } from 'multiformats/codecs/json';
10
8
  import { code as rawCode } from 'multiformats/codecs/raw';
11
9
  import { identity } from 'multiformats/hashes/identity';
12
10
  import { CustomProgressEvent } from 'progress-events';
13
11
  import { dagCborToSafeJSON } from './utils/dag-cbor-to-safe-json.js';
14
- import { getContentDispositionFilename } from './utils/get-content-disposition-filename.js';
15
12
  import { getETag } from './utils/get-e-tag.js';
16
13
  import { getStreamFromAsyncIterable } from './utils/get-stream-from-async-iterable.js';
17
14
  import { parseResource } from './utils/parse-resource.js';
18
- import { notAcceptableResponse, notSupportedResponse, okResponse } from './utils/responses.js';
19
- import { selectOutputType, queryFormatToAcceptHeader } from './utils/select-output-type.js';
20
15
  import { walkPath } from './utils/walk-path.js';
21
16
  function convertOptions(options) {
22
17
  if (options == null) {
@@ -31,42 +26,26 @@ function convertOptions(options) {
31
26
  signal
32
27
  };
33
28
  }
34
- /**
35
- * These are Accept header values that will cause content type sniffing to be
36
- * skipped and set to these values.
37
- */
38
- const RAW_HEADERS = [
39
- 'application/vnd.ipld.raw',
40
- 'application/octet-stream'
41
- ];
42
- /**
43
- * if the user has specified an `Accept` header, and it's in our list of
44
- * allowable "raw" format headers, use that instead of detecting the content
45
- * type. This avoids the user from receiving something different when they
46
- * signal that they want to `Accept` a specific mime type.
47
- */
48
- function getOverridenRawContentType(headers) {
49
- const acceptHeader = new Headers(headers).get('accept') ?? '';
50
- // e.g. "Accept: text/html, application/xhtml+xml, application/xml;q=0.9, image/webp, */*;q=0.8"
51
- const acceptHeaders = acceptHeader.split(',')
52
- .map(s => s.split(';')[0])
53
- .map(s => s.trim());
54
- for (const mimeType of acceptHeaders) {
55
- if (mimeType === '*/*') {
56
- return;
57
- }
58
- if (RAW_HEADERS.includes(mimeType ?? '')) {
59
- return mimeType;
60
- }
61
- }
29
+ function okResponse(body) {
30
+ return new Response(body, {
31
+ status: 200,
32
+ statusText: 'OK'
33
+ });
34
+ }
35
+ function notSupportedResponse(body) {
36
+ return new Response(body, {
37
+ status: 501,
38
+ statusText: 'Not Implemented'
39
+ });
62
40
  }
63
41
  export class VerifiedFetch {
64
42
  helia;
65
43
  ipns;
66
44
  unixfs;
45
+ pathWalker;
67
46
  log;
68
47
  contentTypeParser;
69
- constructor({ helia, ipns, unixfs }, init) {
48
+ constructor({ helia, ipns, unixfs, pathWalker }, init) {
70
49
  this.helia = helia;
71
50
  this.log = helia.logger.forComponent('helia:verified-fetch');
72
51
  this.ipns = ipns ?? heliaIpns(helia, {
@@ -76,114 +55,54 @@ export class VerifiedFetch {
76
55
  ]
77
56
  });
78
57
  this.unixfs = unixfs ?? heliaUnixFs(helia);
58
+ this.pathWalker = pathWalker ?? walkPath;
79
59
  this.contentTypeParser = init?.contentTypeParser;
80
60
  this.log.trace('created VerifiedFetch instance');
81
61
  }
82
- /**
83
- * Accepts an `ipns://...` URL as a string and returns a `Response` containing
84
- * a raw IPNS record.
85
- */
86
- async handleIPNSRecord(resource, opts) {
87
- return notSupportedResponse('vnd.ipfs.ipns-record support is not implemented');
88
- }
89
- /**
90
- * Accepts a `CID` and returns a `Response` with a body stream that is a CAR
91
- * of the `DAG` referenced by the `CID`.
92
- */
93
- async handleCar({ cid, options }) {
94
- const c = car(this.helia);
95
- const stream = toBrowserReadableStream(c.stream(cid, options));
96
- const response = okResponse(stream);
97
- response.headers.set('content-type', 'application/vnd.ipld.car; version=1');
62
+ // handle vnd.ipfs.ipns-record
63
+ async handleIPNSRecord({ cid, path, options }) {
64
+ const response = notSupportedResponse('vnd.ipfs.ipns-record support is not implemented');
65
+ response.headers.set('X-Content-Type-Options', 'nosniff'); // see https://specs.ipfs.tech/http-gateways/path-gateway/#x-content-type-options-response-header
98
66
  return response;
99
67
  }
100
- /**
101
- * Accepts a UnixFS `CID` and returns a `.tar` file containing the file or
102
- * directory structure referenced by the `CID`.
103
- */
104
- async handleTar({ cid, path, options }) {
105
- if (cid.code !== dagPbCode) {
106
- return notAcceptableResponse('only dag-pb CIDs can be returned in TAR files');
107
- }
108
- return notSupportedResponse('application/tar support is not implemented');
68
+ // handle vnd.ipld.car
69
+ async handleIPLDCar({ cid, path, options }) {
70
+ const response = notSupportedResponse('vnd.ipld.car support is not implemented');
71
+ response.headers.set('X-Content-Type-Options', 'nosniff'); // see https://specs.ipfs.tech/http-gateways/path-gateway/#x-content-type-options-response-header
72
+ return response;
109
73
  }
110
- async handleJson({ cid, path, accept, options }) {
74
+ async handleJson({ cid, path, options }) {
111
75
  this.log.trace('fetching %c/%s', cid, path);
112
- const block = await this.helia.blockstore.get(cid, options);
113
- let body;
114
- if (accept === 'application/vnd.ipld.dag-cbor' || accept === 'application/cbor') {
115
- try {
116
- // if vnd.ipld.dag-cbor has been specified, convert to the format - note
117
- // that this supports more data types than regular JSON, the content-type
118
- // response header is set so the user knows to process it differently
119
- const obj = ipldDagJson.decode(block);
120
- body = ipldDagCbor.encode(obj);
121
- }
122
- catch (err) {
123
- this.log.error('could not transform %c to application/vnd.ipld.dag-cbor', err);
124
- return notAcceptableResponse();
125
- }
126
- }
127
- else {
128
- // skip decoding
129
- body = block;
130
- }
131
- const response = okResponse(body);
132
- response.headers.set('content-type', accept ?? 'application/json');
76
+ options?.onProgress?.(new CustomProgressEvent('verified-fetch:request:start', { cid, path }));
77
+ const result = await this.helia.blockstore.get(cid, {
78
+ signal: options?.signal,
79
+ onProgress: options?.onProgress
80
+ });
81
+ const response = okResponse(result);
82
+ response.headers.set('content-type', 'application/json');
83
+ options?.onProgress?.(new CustomProgressEvent('verified-fetch:request:end', { cid, path }));
133
84
  return response;
134
85
  }
135
- async handleDagCbor({ cid, path, accept, options }) {
86
+ async handleDagCbor({ cid, path, options }) {
136
87
  this.log.trace('fetching %c/%s', cid, path);
137
- const block = await this.helia.blockstore.get(cid, options);
88
+ options?.onProgress?.(new CustomProgressEvent('verified-fetch:request:start', { cid, path }));
89
+ // return body as binary
90
+ const block = await this.helia.blockstore.get(cid);
138
91
  let body;
139
- if (accept === 'application/octet-stream' || accept === 'application/vnd.ipld.dag-cbor' || accept === 'application/cbor') {
140
- // skip decoding
141
- body = block;
142
- }
143
- else if (accept === 'application/vnd.ipld.dag-json') {
144
- try {
145
- // if vnd.ipld.dag-json has been specified, convert to the format - note
146
- // that this supports more data types than regular JSON, the content-type
147
- // response header is set so the user knows to process it differently
148
- const obj = ipldDagCbor.decode(block);
149
- body = ipldDagJson.encode(obj);
150
- }
151
- catch (err) {
152
- this.log.error('could not transform %c to application/vnd.ipld.dag-json', err);
153
- return notAcceptableResponse();
154
- }
92
+ try {
93
+ body = dagCborToSafeJSON(block);
155
94
  }
156
- else {
157
- try {
158
- body = dagCborToSafeJSON(block);
159
- }
160
- catch (err) {
161
- if (accept === 'application/json') {
162
- this.log('could not decode DAG-CBOR as JSON-safe, but the client sent "Accept: application/json"', err);
163
- return notAcceptableResponse();
164
- }
165
- this.log('could not decode DAG-CBOR as JSON-safe, falling back to `application/octet-stream`', err);
166
- body = block;
167
- }
95
+ catch (err) {
96
+ this.log('could not decode DAG-CBOR as JSON-safe, falling back to `application/octet-stream`', err);
97
+ body = block;
168
98
  }
169
99
  const response = okResponse(body);
170
- if (accept == null) {
171
- accept = body instanceof Uint8Array ? 'application/octet-stream' : 'application/json';
172
- }
173
- response.headers.set('content-type', accept);
100
+ response.headers.set('content-type', body instanceof Uint8Array ? 'application/octet-stream' : 'application/json');
101
+ options?.onProgress?.(new CustomProgressEvent('verified-fetch:request:end', { cid, path }));
174
102
  return response;
175
103
  }
176
- async handleDagPb({ cid, path, options }) {
177
- let terminalElement;
178
- let ipfsRoots;
179
- try {
180
- const pathDetails = await walkPath(this.helia.blockstore, `${cid.toString()}/${path}`, options);
181
- ipfsRoots = pathDetails.ipfsRoots;
182
- terminalElement = pathDetails.terminalElement;
183
- }
184
- catch (err) {
185
- this.log.error('Error walking path %s', path, err);
186
- }
104
+ async handleDagPb({ cid, path, options, terminalElement }) {
105
+ this.log.trace('fetching %c/%s', cid, path);
187
106
  let resolvedCID = terminalElement?.cid ?? cid;
188
107
  let stat;
189
108
  if (terminalElement?.type === 'directory') {
@@ -191,6 +110,7 @@ export class VerifiedFetch {
191
110
  const rootFilePath = 'index.html';
192
111
  try {
193
112
  this.log.trace('found directory at %c/%s, looking for index.html', cid, path);
113
+ options?.onProgress?.(new CustomProgressEvent('verified-fetch:request:start', { cid: dirCid, path: rootFilePath }));
194
114
  stat = await this.unixfs.stat(dirCid, {
195
115
  path: rootFilePath,
196
116
  signal: options?.signal,
@@ -209,6 +129,7 @@ export class VerifiedFetch {
209
129
  options?.onProgress?.(new CustomProgressEvent('verified-fetch:request:end', { cid: dirCid, path: rootFilePath }));
210
130
  }
211
131
  }
132
+ options?.onProgress?.(new CustomProgressEvent('verified-fetch:request:start', { cid: resolvedCID, path: '' }));
212
133
  const asyncIter = this.unixfs.cat(resolvedCID, {
213
134
  signal: options?.signal,
214
135
  onProgress: options?.onProgress
@@ -219,24 +140,16 @@ export class VerifiedFetch {
219
140
  });
220
141
  const response = okResponse(stream);
221
142
  await this.setContentType(firstChunk, path, response);
222
- if (ipfsRoots != null) {
223
- response.headers.set('X-Ipfs-Roots', ipfsRoots.map(cid => cid.toV1().toString()).join(',')); // https://specs.ipfs.tech/http-gateways/path-gateway/#x-ipfs-roots-response-header
224
- }
143
+ options?.onProgress?.(new CustomProgressEvent('verified-fetch:request:end', { cid: resolvedCID, path: '' }));
225
144
  return response;
226
145
  }
227
146
  async handleRaw({ cid, path, options }) {
228
- const result = await this.helia.blockstore.get(cid, options);
147
+ this.log.trace('fetching %c/%s', cid, path);
148
+ options?.onProgress?.(new CustomProgressEvent('verified-fetch:request:start', { cid, path }));
149
+ const result = await this.helia.blockstore.get(cid);
229
150
  const response = okResponse(result);
230
- // if the user has specified an `Accept` header that corresponds to a raw
231
- // type, honour that header, so for example they don't request
232
- // `application/vnd.ipld.raw` but get `application/octet-stream`
233
- const overriddenContentType = getOverridenRawContentType(options?.headers);
234
- if (overriddenContentType != null) {
235
- response.headers.set('content-type', overriddenContentType);
236
- }
237
- else {
238
- await this.setContentType(result, path, response);
239
- }
151
+ await this.setContentType(result, path, response);
152
+ options?.onProgress?.(new CustomProgressEvent('verified-fetch:request:end', { cid, path }));
240
153
  return response;
241
154
  }
242
155
  async setContentType(bytes, path, response) {
@@ -263,94 +176,99 @@ export class VerifiedFetch {
263
176
  response.headers.set('content-type', contentType);
264
177
  }
265
178
  /**
266
- * If the user has not specified an Accept header or format query string arg,
267
- * use the CID codec to choose an appropriate handler for the block data.
179
+ * Determines the format requested by the client, defaults to `null` if no format is requested.
180
+ *
181
+ * @see https://specs.ipfs.tech/http-gateways/path-gateway/#format-request-query-parameter
182
+ * @default 'raw'
183
+ */
184
+ getFormat({ headerFormat, queryFormat }) {
185
+ const formatMap = {
186
+ 'vnd.ipld.raw': 'raw',
187
+ 'vnd.ipld.car': 'car',
188
+ 'application/x-tar': 'tar',
189
+ 'application/vnd.ipld.dag-json': 'dag-json',
190
+ 'application/vnd.ipld.dag-cbor': 'dag-cbor',
191
+ 'application/json': 'json',
192
+ 'application/cbor': 'cbor',
193
+ 'vnd.ipfs.ipns-record': 'ipns-record'
194
+ };
195
+ if (headerFormat != null) {
196
+ for (const format in formatMap) {
197
+ if (headerFormat.includes(format)) {
198
+ return formatMap[format];
199
+ }
200
+ }
201
+ }
202
+ else if (queryFormat != null) {
203
+ return queryFormat;
204
+ }
205
+ return null;
206
+ }
207
+ /**
208
+ * Map of format to specific handlers for that format.
209
+ * These format handlers should adjust the response headers as specified in https://specs.ipfs.tech/http-gateways/path-gateway/#response-headers
268
210
  */
211
+ formatHandlers = {
212
+ raw: async () => notSupportedResponse('application/vnd.ipld.raw support is not implemented'),
213
+ car: this.handleIPLDCar,
214
+ 'ipns-record': this.handleIPNSRecord,
215
+ tar: async () => notSupportedResponse('application/x-tar support is not implemented'),
216
+ 'dag-json': async () => notSupportedResponse('application/vnd.ipld.dag-json support is not implemented'),
217
+ 'dag-cbor': async () => notSupportedResponse('application/vnd.ipld.dag-cbor support is not implemented'),
218
+ json: async () => notSupportedResponse('application/json support is not implemented'),
219
+ cbor: async () => notSupportedResponse('application/cbor support is not implemented')
220
+ };
269
221
  codecHandlers = {
270
222
  [dagPbCode]: this.handleDagPb,
271
- [ipldDagJson.code]: this.handleJson,
223
+ [dagJsonCode]: this.handleJson,
272
224
  [jsonCode]: this.handleJson,
273
- [ipldDagCbor.code]: this.handleDagCbor,
225
+ [dagCborCode]: this.handleDagCbor,
274
226
  [rawCode]: this.handleRaw,
275
227
  [identity.code]: this.handleRaw
276
228
  };
277
229
  async fetch(resource, opts) {
278
- this.log('fetch %s', resource);
279
230
  const options = convertOptions(opts);
280
- options?.onProgress?.(new CustomProgressEvent('verified-fetch:request:start', { resource }));
281
- // resolve the CID/path from the requested resource
282
- const { path, query, cid } = await parseResource(resource, { ipns: this.ipns, logger: this.helia.logger }, options);
283
- options?.onProgress?.(new CustomProgressEvent('verified-fetch:request:resolve', { cid, path }));
284
- const requestHeaders = new Headers(options?.headers);
285
- const incomingAcceptHeader = requestHeaders.get('accept');
286
- if (incomingAcceptHeader != null) {
287
- this.log('incoming accept header "%s"', incomingAcceptHeader);
288
- }
289
- const queryFormatMapping = queryFormatToAcceptHeader(query.format);
290
- if (query.format != null) {
291
- this.log('incoming query format "%s", mapped to %s', query.format, queryFormatMapping);
292
- }
293
- const acceptHeader = incomingAcceptHeader ?? queryFormatMapping;
294
- const accept = selectOutputType(cid, acceptHeader);
295
- this.log('output type %s', accept);
296
- if (acceptHeader != null && accept == null) {
297
- return notAcceptableResponse();
298
- }
231
+ const { path, query, ...rest } = await parseResource(resource, { ipns: this.ipns, logger: this.helia.logger }, options);
232
+ const cid = rest.cid;
299
233
  let response;
300
- let reqFormat;
301
- if (accept === 'application/vnd.ipfs.ipns-record') {
302
- // the user requested a raw IPNS record
303
- reqFormat = 'ipns-record';
304
- response = await this.handleIPNSRecord(resource.toString(), options);
305
- }
306
- else if (accept === 'application/vnd.ipld.car') {
307
- // the user requested a CAR file
308
- reqFormat = 'car';
309
- query.download = true;
310
- query.filename = query.filename ?? `${cid.toString()}.car`;
311
- response = await this.handleCar({ cid, path, options });
234
+ const format = this.getFormat({ headerFormat: new Headers(options?.headers).get('accept'), queryFormat: query.format ?? null });
235
+ if (format != null) {
236
+ // TODO: These should be handled last when they're returning something other than 501
237
+ const formatHandler = this.formatHandlers[format];
238
+ if (formatHandler != null) {
239
+ response = await formatHandler.call(this, { cid, path, options });
240
+ if (response.status === 501) {
241
+ return response;
242
+ }
243
+ }
312
244
  }
313
- else if (accept === 'application/vnd.ipld.raw') {
314
- // the user requested a raw block
315
- reqFormat = 'raw';
316
- query.download = true;
317
- query.filename = query.filename ?? `${cid.toString()}.bin`;
318
- response = await this.handleRaw({ cid, path, options });
245
+ let terminalElement;
246
+ let ipfsRoots;
247
+ try {
248
+ const pathDetails = await this.pathWalker(this.helia.blockstore, `${cid.toString()}/${path}`, options);
249
+ ipfsRoots = pathDetails.ipfsRoots;
250
+ terminalElement = pathDetails.terminalElement;
319
251
  }
320
- else if (accept === 'application/x-tar') {
321
- // the user requested a TAR file
322
- reqFormat = 'tar';
323
- response = await this.handleTar({ cid, path, options });
252
+ catch (err) {
253
+ this.log.error('Error walking path %s', path, err);
254
+ // return new Response(`Error walking path: ${(err as Error).message}`, { status: 500 })
324
255
  }
325
- else {
326
- // derive the handler from the CID type
256
+ if (response == null) {
327
257
  const codecHandler = this.codecHandlers[cid.code];
328
- if (codecHandler == null) {
258
+ if (codecHandler != null) {
259
+ response = await codecHandler.call(this, { cid, path, options, terminalElement });
260
+ }
261
+ else {
329
262
  return notSupportedResponse(`Support for codec with code ${cid.code} is not yet implemented. Please open an issue at https://github.com/ipfs/helia/issues/new`);
330
263
  }
331
- response = await codecHandler.call(this, { cid, path, accept, options });
332
264
  }
333
- response.headers.set('etag', getETag({ cid, reqFormat, weak: false }));
265
+ response.headers.set('etag', getETag({ cid, reqFormat: format ?? undefined, weak: false }));
334
266
  response.headers.set('cache-control', 'public, max-age=29030400, immutable');
335
- // https://specs.ipfs.tech/http-gateways/path-gateway/#x-ipfs-path-response-header
336
- response.headers.set('X-Ipfs-Path', resource.toString());
337
- // set Content-Disposition header
338
- let contentDisposition;
339
- // force download if requested
340
- if (query.download === true) {
341
- contentDisposition = 'attachment';
342
- }
343
- // override filename if requested
344
- if (query.filename != null) {
345
- if (contentDisposition == null) {
346
- contentDisposition = 'inline';
347
- }
348
- contentDisposition = `${contentDisposition}; ${getContentDispositionFilename(query.filename)}`;
349
- }
350
- if (contentDisposition != null) {
351
- response.headers.set('Content-Disposition', contentDisposition);
267
+ response.headers.set('X-Ipfs-Path', resource.toString()); // https://specs.ipfs.tech/http-gateways/path-gateway/#x-ipfs-path-response-header
268
+ if (ipfsRoots != null) {
269
+ response.headers.set('X-Ipfs-Roots', ipfsRoots.map(cid => cid.toV1().toString()).join(',')); // https://specs.ipfs.tech/http-gateways/path-gateway/#x-ipfs-roots-response-header
352
270
  }
353
- options?.onProgress?.(new CustomProgressEvent('verified-fetch:request:end', { cid, path }));
271
+ // response.headers.set('Content-Disposition', `TODO`) // https://specs.ipfs.tech/http-gateways/path-gateway/#content-disposition-response-header
354
272
  return response;
355
273
  }
356
274
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"verified-fetch.js","sourceRoot":"","sources":["../../src/verified-fetch.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"verified-fetch.js","sourceRoot":"","sources":["../../src/verified-fetch.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,IAAI,SAAS,EAAa,MAAM,aAAa,CAAA;AAC1D,OAAO,EAAE,gBAAgB,EAAE,MAAM,2BAA2B,CAAA;AAC5D,OAAO,EAAE,MAAM,IAAI,WAAW,EAAgD,MAAM,eAAe,CAAA;AACnG,OAAO,EAAE,IAAI,IAAI,WAAW,EAAE,MAAM,gBAAgB,CAAA;AACpD,OAAO,EAAE,IAAI,IAAI,WAAW,EAAE,MAAM,gBAAgB,CAAA;AACpD,OAAO,EAAE,IAAI,IAAI,SAAS,EAAE,MAAM,cAAc,CAAA;AAChD,OAAO,EAAE,IAAI,IAAI,QAAQ,EAAE,MAAM,0BAA0B,CAAA;AAC3D,OAAO,EAAE,IAAI,IAAI,OAAO,EAAE,MAAM,yBAAyB,CAAA;AACzD,OAAO,EAAE,QAAQ,EAAE,MAAM,8BAA8B,CAAA;AACvD,OAAO,EAAE,mBAAmB,EAAE,MAAM,iBAAiB,CAAA;AACrD,OAAO,EAAE,iBAAiB,EAAE,MAAM,kCAAkC,CAAA;AACpE,OAAO,EAAE,OAAO,EAAE,MAAM,sBAAsB,CAAA;AAC9C,OAAO,EAAE,0BAA0B,EAAE,MAAM,2CAA2C,CAAA;AACtF,OAAO,EAAE,aAAa,EAAE,MAAM,2BAA2B,CAAA;AACzD,OAAO,EAAE,QAAQ,EAAqB,MAAM,sBAAsB,CAAA;AAiClE,SAAS,cAAc,CAAE,OAA8B;IACrD,IAAI,OAAO,IAAI,IAAI,EAAE,CAAC;QACpB,OAAO,SAAS,CAAA;IAClB,CAAC;IAED,IAAI,MAA+B,CAAA;IACnC,IAAI,OAAO,EAAE,MAAM,KAAK,IAAI,EAAE,CAAC;QAC7B,MAAM,GAAG,SAAS,CAAA;IACpB,CAAC;IACD,OAAO;QACL,GAAG,OAAO;QACV,MAAM;KACP,CAAA;AACH,CAAC;AAED,SAAS,UAAU,CAAE,IAAsB;IACzC,OAAO,IAAI,QAAQ,CAAC,IAAI,EAAE;QACxB,MAAM,EAAE,GAAG;QACX,UAAU,EAAE,IAAI;KACjB,CAAC,CAAA;AACJ,CAAC;AAED,SAAS,oBAAoB,CAAE,IAAsB;IACnD,OAAO,IAAI,QAAQ,CAAC,IAAI,EAAE;QACxB,MAAM,EAAE,GAAG;QACX,UAAU,EAAE,iBAAiB;KAC9B,CAAC,CAAA;AACJ,CAAC;AAED,MAAM,OAAO,aAAa;IACP,KAAK,CAAO;IACZ,IAAI,CAAM;IACV,MAAM,CAAa;IACnB,UAAU,CAAc;IACxB,GAAG,CAAQ;IACX,iBAAiB,CAA+B;IAEjE,YAAa,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,UAAU,EAA2B,EAAE,IAAwB;QACjG,IAAI,CAAC,KAAK,GAAG,KAAK,CAAA;QAClB,IAAI,CAAC,GAAG,GAAG,KAAK,CAAC,MAAM,CAAC,YAAY,CAAC,sBAAsB,CAAC,CAAA;QAC5D,IAAI,CAAC,IAAI,GAAG,IAAI,IAAI,SAAS,CAAC,KAAK,EAAE;YACnC,SAAS,EAAE;gBACT,gBAAgB,CAAC,8CAA8C,CAAC;gBAChE,gBAAgB,CAAC,4BAA4B,CAAC;aAC/C;SACF,CAAC,CAAA;QACF,IAAI,CAAC,MAAM,GAAG,MAAM,IAAI,WAAW,CAAC,KAAK,CAAC,CAAA;QAC1C,IAAI,CAAC,UAAU,GAAG,UAAU,IAAI,QAAQ,CAAA;QACxC,IAAI,CAAC,iBAAiB,GAAG,IAAI,EAAE,iBAAiB,CAAA;QAChD,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,gCAAgC,CAAC,CAAA;IAClD,CAAC;IAED,8BAA8B;IACtB,KAAK,CAAC,gBAAgB,CAAE,EAAE,GAAG,EAAE,IAAI,EAAE,OAAO,EAA2B;QAC7E,MAAM,QAAQ,GAAG,oBAAoB,CAAC,iDAAiD,CAAC,CAAA;QACxF,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,wBAAwB,EAAE,SAAS,CAAC,CAAA,CAAC,iGAAiG;QAC3J,OAAO,QAAQ,CAAA;IACjB,CAAC;IAED,sBAAsB;IACd,KAAK,CAAC,aAAa,CAAE,EAAE,GAAG,EAAE,IAAI,EAAE,OAAO,EAA2B;QAC1E,MAAM,QAAQ,GAAG,oBAAoB,CAAC,yCAAyC,CAAC,CAAA;QAChF,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,wBAAwB,EAAE,SAAS,CAAC,CAAA,CAAC,iGAAiG;QAC3J,OAAO,QAAQ,CAAA;IACjB,CAAC;IAEO,KAAK,CAAC,UAAU,CAAE,EAAE,GAAG,EAAE,IAAI,EAAE,OAAO,EAA2B;QACvE,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,gBAAgB,EAAE,GAAG,EAAE,IAAI,CAAC,CAAA;QAC3C,OAAO,EAAE,UAAU,EAAE,CAAC,IAAI,mBAAmB,CAAY,8BAA8B,EAAE,EAAE,GAAG,EAAE,IAAI,EAAE,CAAC,CAAC,CAAA;QACxG,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,GAAG,CAAC,GAAG,EAAE;YAClD,MAAM,EAAE,OAAO,EAAE,MAAM;YACvB,UAAU,EAAE,OAAO,EAAE,UAAU;SAChC,CAAC,CAAA;QACF,MAAM,QAAQ,GAAG,UAAU,CAAC,MAAM,CAAC,CAAA;QACnC,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,cAAc,EAAE,kBAAkB,CAAC,CAAA;QACxD,OAAO,EAAE,UAAU,EAAE,CAAC,IAAI,mBAAmB,CAAY,4BAA4B,EAAE,EAAE,GAAG,EAAE,IAAI,EAAE,CAAC,CAAC,CAAA;QACtG,OAAO,QAAQ,CAAA;IACjB,CAAC;IAEO,KAAK,CAAC,aAAa,CAAE,EAAE,GAAG,EAAE,IAAI,EAAE,OAAO,EAA2B;QAC1E,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,gBAAgB,EAAE,GAAG,EAAE,IAAI,CAAC,CAAA;QAC3C,OAAO,EAAE,UAAU,EAAE,CAAC,IAAI,mBAAmB,CAAY,8BAA8B,EAAE,EAAE,GAAG,EAAE,IAAI,EAAE,CAAC,CAAC,CAAA;QACxG,wBAAwB;QACxB,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,GAAG,CAAC,GAAG,CAAC,CAAA;QAClD,IAAI,IAAyB,CAAA;QAE7B,IAAI,CAAC;YACH,IAAI,GAAG,iBAAiB,CAAC,KAAK,CAAC,CAAA;QACjC,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,IAAI,CAAC,GAAG,CAAC,oFAAoF,EAAE,GAAG,CAAC,CAAA;YACnG,IAAI,GAAG,KAAK,CAAA;QACd,CAAC;QAED,MAAM,QAAQ,GAAG,UAAU,CAAC,IAAI,CAAC,CAAA;QACjC,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,cAAc,EAAE,IAAI,YAAY,UAAU,CAAC,CAAC,CAAC,0BAA0B,CAAC,CAAC,CAAC,kBAAkB,CAAC,CAAA;QAClH,OAAO,EAAE,UAAU,EAAE,CAAC,IAAI,mBAAmB,CAAY,4BAA4B,EAAE,EAAE,GAAG,EAAE,IAAI,EAAE,CAAC,CAAC,CAAA;QACtG,OAAO,QAAQ,CAAA;IACjB,CAAC;IAEO,KAAK,CAAC,WAAW,CAAE,EAAE,GAAG,EAAE,IAAI,EAAE,OAAO,EAAE,eAAe,EAA2B;QACzF,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,gBAAgB,EAAE,GAAG,EAAE,IAAI,CAAC,CAAA;QAC3C,IAAI,WAAW,GAAG,eAAe,EAAE,GAAG,IAAI,GAAG,CAAA;QAC7C,IAAI,IAAiB,CAAA;QACrB,IAAI,eAAe,EAAE,IAAI,KAAK,WAAW,EAAE,CAAC;YAC1C,MAAM,MAAM,GAAG,eAAe,CAAC,GAAG,CAAA;YAElC,MAAM,YAAY,GAAG,YAAY,CAAA;YACjC,IAAI,CAAC;gBACH,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,kDAAkD,EAAE,GAAG,EAAE,IAAI,CAAC,CAAA;gBAC7E,OAAO,EAAE,UAAU,EAAE,CAAC,IAAI,mBAAmB,CAAY,8BAA8B,EAAE,EAAE,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,YAAY,EAAE,CAAC,CAAC,CAAA;gBAC9H,IAAI,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,EAAE;oBACpC,IAAI,EAAE,YAAY;oBAClB,MAAM,EAAE,OAAO,EAAE,MAAM;oBACvB,UAAU,EAAE,OAAO,EAAE,UAAU;iBAChC,CAAC,CAAA;gBACF,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,sCAAsC,EAAE,MAAM,EAAE,YAAY,EAAE,IAAI,CAAC,GAAG,CAAC,CAAA;gBACtF,IAAI,GAAG,YAAY,CAAA;gBACnB,WAAW,GAAG,IAAI,CAAC,GAAG,CAAA;gBACtB,yBAAyB;YAC3B,CAAC;YAAC,OAAO,GAAQ,EAAE,CAAC;gBAClB,IAAI,CAAC,GAAG,CAAC,0BAA0B,EAAE,MAAM,EAAE,YAAY,EAAE,GAAG,CAAC,CAAA;gBAC/D,OAAO,oBAAoB,CAAC,sHAAsH,CAAC,CAAA;YACrJ,CAAC;oBAAS,CAAC;gBACT,OAAO,EAAE,UAAU,EAAE,CAAC,IAAI,mBAAmB,CAAY,4BAA4B,EAAE,EAAE,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,YAAY,EAAE,CAAC,CAAC,CAAA;YAC9H,CAAC;QACH,CAAC;QAED,OAAO,EAAE,UAAU,EAAE,CAAC,IAAI,mBAAmB,CAAY,8BAA8B,EAAE,EAAE,GAAG,EAAE,WAAW,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC,CAAC,CAAA;QACzH,MAAM,SAAS,GAAG,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,WAAW,EAAE;YAC7C,MAAM,EAAE,OAAO,EAAE,MAAM;YACvB,UAAU,EAAE,OAAO,EAAE,UAAU;SAChC,CAAC,CAAA;QACF,IAAI,CAAC,GAAG,CAAC,8BAA8B,EAAE,GAAG,EAAE,IAAI,CAAC,CAAA;QAEnD,MAAM,EAAE,MAAM,EAAE,UAAU,EAAE,GAAG,MAAM,0BAA0B,CAAC,SAAS,EAAE,IAAI,IAAI,EAAE,EAAE,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE;YACxG,UAAU,EAAE,OAAO,EAAE,UAAU;SAChC,CAAC,CAAA;QACF,MAAM,QAAQ,GAAG,UAAU,CAAC,MAAM,CAAC,CAAA;QACnC,MAAM,IAAI,CAAC,cAAc,CAAC,UAAU,EAAE,IAAI,EAAE,QAAQ,CAAC,CAAA;QAErD,OAAO,EAAE,UAAU,EAAE,CAAC,IAAI,mBAAmB,CAAY,4BAA4B,EAAE,EAAE,GAAG,EAAE,WAAW,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC,CAAC,CAAA;QAEvH,OAAO,QAAQ,CAAA;IACjB,CAAC;IAEO,KAAK,CAAC,SAAS,CAAE,EAAE,GAAG,EAAE,IAAI,EAAE,OAAO,EAA2B;QACtE,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,gBAAgB,EAAE,GAAG,EAAE,IAAI,CAAC,CAAA;QAC3C,OAAO,EAAE,UAAU,EAAE,CAAC,IAAI,mBAAmB,CAAY,8BAA8B,EAAE,EAAE,GAAG,EAAE,IAAI,EAAE,CAAC,CAAC,CAAA;QACxG,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,GAAG,CAAC,GAAG,CAAC,CAAA;QACnD,MAAM,QAAQ,GAAG,UAAU,CAAC,MAAM,CAAC,CAAA;QACnC,MAAM,IAAI,CAAC,cAAc,CAAC,MAAM,EAAE,IAAI,EAAE,QAAQ,CAAC,CAAA;QAEjD,OAAO,EAAE,UAAU,EAAE,CAAC,IAAI,mBAAmB,CAAY,4BAA4B,EAAE,EAAE,GAAG,EAAE,IAAI,EAAE,CAAC,CAAC,CAAA;QACtG,OAAO,QAAQ,CAAA;IACjB,CAAC;IAEO,KAAK,CAAC,cAAc,CAAE,KAAiB,EAAE,IAAY,EAAE,QAAkB;QAC/E,IAAI,WAAW,GAAG,0BAA0B,CAAA;QAE5C,IAAI,IAAI,CAAC,iBAAiB,IAAI,IAAI,EAAE,CAAC;YACnC,IAAI,CAAC;gBACH,IAAI,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,IAAI,EAAE,CAAA;gBAC5C,QAAQ,GAAG,QAAQ,KAAK,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,QAAQ,CAAA;gBACjD,MAAM,MAAM,GAAG,IAAI,CAAC,iBAAiB,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAA;gBAEtD,IAAI,SAAS,CAAC,MAAM,CAAC,EAAE,CAAC;oBACtB,MAAM,MAAM,GAAG,MAAM,MAAM,CAAA;oBAE3B,IAAI,MAAM,IAAI,IAAI,EAAE,CAAC;wBACnB,WAAW,GAAG,MAAM,CAAA;oBACtB,CAAC;gBACH,CAAC;qBAAM,IAAI,MAAM,IAAI,IAAI,EAAE,CAAC;oBAC1B,WAAW,GAAG,MAAM,CAAA;gBACtB,CAAC;YACH,CAAC;YAAC,OAAO,GAAG,EAAE,CAAC;gBACb,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,4BAA4B,EAAE,GAAG,CAAC,CAAA;YACnD,CAAC;QACH,CAAC;QAED,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,cAAc,EAAE,WAAW,CAAC,CAAA;IACnD,CAAC;IAED;;;;;OAKG;IACK,SAAS,CAAE,EAAE,YAAY,EAAE,WAAW,EAA+E;QAC3H,MAAM,SAAS,GAA2C;YACxD,cAAc,EAAE,KAAK;YACrB,cAAc,EAAE,KAAK;YACrB,mBAAmB,EAAE,KAAK;YAC1B,+BAA+B,EAAE,UAAU;YAC3C,+BAA+B,EAAE,UAAU;YAC3C,kBAAkB,EAAE,MAAM;YAC1B,kBAAkB,EAAE,MAAM;YAC1B,sBAAsB,EAAE,aAAa;SACtC,CAAA;QAED,IAAI,YAAY,IAAI,IAAI,EAAE,CAAC;YACzB,KAAK,MAAM,MAAM,IAAI,SAAS,EAAE,CAAC;gBAC/B,IAAI,YAAY,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC;oBAClC,OAAO,SAAS,CAAC,MAAM,CAAC,CAAA;gBAC1B,CAAC;YACH,CAAC;QACH,CAAC;aAAM,IAAI,WAAW,IAAI,IAAI,EAAE,CAAC;YAC/B,OAAO,WAAW,CAAA;QACpB,CAAC;QAED,OAAO,IAAI,CAAA;IACb,CAAC;IAED;;;OAGG;IACc,cAAc,GAAyC;QACtE,GAAG,EAAE,KAAK,IAAI,EAAE,CAAC,oBAAoB,CAAC,qDAAqD,CAAC;QAC5F,GAAG,EAAE,IAAI,CAAC,aAAa;QACvB,aAAa,EAAE,IAAI,CAAC,gBAAgB;QACpC,GAAG,EAAE,KAAK,IAAI,EAAE,CAAC,oBAAoB,CAAC,8CAA8C,CAAC;QACrF,UAAU,EAAE,KAAK,IAAI,EAAE,CAAC,oBAAoB,CAAC,0DAA0D,CAAC;QACxG,UAAU,EAAE,KAAK,IAAI,EAAE,CAAC,oBAAoB,CAAC,0DAA0D,CAAC;QACxG,IAAI,EAAE,KAAK,IAAI,EAAE,CAAC,oBAAoB,CAAC,6CAA6C,CAAC;QACrF,IAAI,EAAE,KAAK,IAAI,EAAE,CAAC,oBAAoB,CAAC,6CAA6C,CAAC;KACtF,CAAA;IAEgB,aAAa,GAAyC;QACrE,CAAC,SAAS,CAAC,EAAE,IAAI,CAAC,WAAW;QAC7B,CAAC,WAAW,CAAC,EAAE,IAAI,CAAC,UAAU;QAC9B,CAAC,QAAQ,CAAC,EAAE,IAAI,CAAC,UAAU;QAC3B,CAAC,WAAW,CAAC,EAAE,IAAI,CAAC,aAAa;QACjC,CAAC,OAAO,CAAC,EAAE,IAAI,CAAC,SAAS;QACzB,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,IAAI,CAAC,SAAS;KAChC,CAAA;IAED,KAAK,CAAC,KAAK,CAAE,QAAkB,EAAE,IAA2B;QAC1D,MAAM,OAAO,GAAG,cAAc,CAAC,IAAI,CAAC,CAAA;QACpC,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,IAAI,EAAE,GAAG,MAAM,aAAa,CAAC,QAAQ,EAAE,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,EAAE,OAAO,CAAC,CAAA;QACvH,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAA;QACpB,IAAI,QAA8B,CAAA;QAElC,MAAM,MAAM,GAAG,IAAI,CAAC,SAAS,CAAC,EAAE,YAAY,EAAE,IAAI,OAAO,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,WAAW,EAAE,KAAK,CAAC,MAAM,IAAI,IAAI,EAAE,CAAC,CAAA;QAE/H,IAAI,MAAM,IAAI,IAAI,EAAE,CAAC;YACnB,qFAAqF;YACrF,MAAM,aAAa,GAAG,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC,CAAA;YAEjD,IAAI,aAAa,IAAI,IAAI,EAAE,CAAC;gBAC1B,QAAQ,GAAG,MAAM,aAAa,CAAC,IAAI,CAAC,IAAI,EAAE,EAAE,GAAG,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC,CAAA;gBAEjE,IAAI,QAAQ,CAAC,MAAM,KAAK,GAAG,EAAE,CAAC;oBAC5B,OAAO,QAAQ,CAAA;gBACjB,CAAC;YACH,CAAC;QACH,CAAC;QAED,IAAI,eAAwC,CAAA;QAC5C,IAAI,SAA4B,CAAA;QAEhC,IAAI,CAAC;YACH,MAAM,WAAW,GAAG,MAAM,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC,UAAU,EAAE,GAAG,GAAG,CAAC,QAAQ,EAAE,IAAI,IAAI,EAAE,EAAE,OAAO,CAAC,CAAA;YACtG,SAAS,GAAG,WAAW,CAAC,SAAS,CAAA;YACjC,eAAe,GAAG,WAAW,CAAC,eAAe,CAAA;QAC/C,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,uBAAuB,EAAE,IAAI,EAAE,GAAG,CAAC,CAAA;YAClD,wFAAwF;QAC1F,CAAC;QAED,IAAI,QAAQ,IAAI,IAAI,EAAE,CAAC;YACrB,MAAM,YAAY,GAAG,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,IAAI,CAAC,CAAA;YAEjD,IAAI,YAAY,IAAI,IAAI,EAAE,CAAC;gBACzB,QAAQ,GAAG,MAAM,YAAY,CAAC,IAAI,CAAC,IAAI,EAAE,EAAE,GAAG,EAAE,IAAI,EAAE,OAAO,EAAE,eAAe,EAAE,CAAC,CAAA;YACnF,CAAC;iBAAM,CAAC;gBACN,OAAO,oBAAoB,CAAC,+BAA+B,GAAG,CAAC,IAAI,2FAA2F,CAAC,CAAA;YACjK,CAAC;QACH,CAAC;QAED,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,GAAG,EAAE,SAAS,EAAE,MAAM,IAAI,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC,CAAA;QAC3F,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,eAAe,EAAE,qCAAqC,CAAC,CAAA;QAC5E,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,aAAa,EAAE,QAAQ,CAAC,QAAQ,EAAE,CAAC,CAAA,CAAC,kFAAkF;QAE3I,IAAI,SAAS,IAAI,IAAI,EAAE,CAAC;YACtB,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,cAAc,EAAE,SAAS,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,QAAQ,EAAE,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAA,CAAC,mFAAmF;QACjL,CAAC;QACD,iJAAiJ;QAEjJ,OAAO,QAAQ,CAAA;IACjB,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,KAAK;QACT,MAAM,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,CAAA;IAC1B,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,IAAI;QACR,MAAM,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,CAAA;IACzB,CAAC;CACF;AAED,SAAS,SAAS,CAAM,CAAO;IAC7B,OAAO,CAAC,EAAE,IAAI,IAAI,IAAI,CAAA;AACxB,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@helia/verified-fetch",
3
- "version": "0.0.0-a04e041",
3
+ "version": "0.0.0-dc2e7a6",
4
4
  "description": "A fetch-like API for obtaining verified & trustless IPFS content on the web.",
5
5
  "license": "Apache-2.0 OR MIT",
6
6
  "homepage": "https://github.com/ipfs/helia/tree/main/packages/verified-fetch#readme",
@@ -141,13 +141,12 @@
141
141
  "release": "aegir release"
142
142
  },
143
143
  "dependencies": {
144
- "@helia/car": "3.0.0-a04e041",
145
- "@helia/block-brokers": "2.0.1-a04e041",
146
- "@helia/http": "1.0.1-a04e041",
147
- "@helia/interface": "4.0.0-a04e041",
148
- "@helia/ipns": "6.0.0-a04e041",
149
- "@helia/routers": "1.0.0-a04e041",
150
- "@helia/unixfs": "3.0.0-a04e041",
144
+ "@helia/block-brokers": "2.0.1-dc2e7a6",
145
+ "@helia/http": "1.0.1-dc2e7a6",
146
+ "@helia/interface": "4.0.0-dc2e7a6",
147
+ "@helia/ipns": "6.0.0-dc2e7a6",
148
+ "@helia/routers": "1.0.0-dc2e7a6",
149
+ "@helia/unixfs": "3.0.0-dc2e7a6",
151
150
  "@ipld/dag-cbor": "^9.2.0",
152
151
  "@ipld/dag-json": "^10.2.0",
153
152
  "@ipld/dag-pb": "^4.1.0",
@@ -156,17 +155,14 @@
156
155
  "cborg": "^4.0.9",
157
156
  "hashlru": "^2.3.0",
158
157
  "ipfs-unixfs-exporter": "^13.5.0",
159
- "it-to-browser-readablestream": "^2.0.6",
160
158
  "multiformats": "^13.1.0",
161
159
  "progress-events": "^1.0.0"
162
160
  },
163
161
  "devDependencies": {
164
- "@helia/car": "3.0.0-a04e041",
165
- "@helia/dag-cbor": "3.0.0-a04e041",
166
- "@helia/dag-json": "3.0.0-a04e041",
167
- "@helia/json": "3.0.0-a04e041",
168
- "@helia/utils": "0.0.1-a04e041",
169
- "@ipld/car": "^5.2.6",
162
+ "@helia/dag-cbor": "3.0.0-dc2e7a6",
163
+ "@helia/dag-json": "3.0.0-dc2e7a6",
164
+ "@helia/json": "3.0.0-dc2e7a6",
165
+ "@helia/utils": "0.0.1-dc2e7a6",
170
166
  "@libp2p/logger": "^4.0.5",
171
167
  "@libp2p/peer-id-factory": "^4.0.5",
172
168
  "@sgtpooki/file-type": "^1.0.1",
@@ -174,12 +170,10 @@
174
170
  "aegir": "^42.2.2",
175
171
  "blockstore-core": "^4.4.0",
176
172
  "datastore-core": "^9.2.8",
177
- "helia": "4.0.1-a04e041",
178
- "ipns": "^9.0.0",
173
+ "helia": "4.0.1-dc2e7a6",
179
174
  "it-last": "^3.0.4",
180
175
  "it-to-buffer": "^4.0.5",
181
176
  "magic-bytes.js": "^1.8.0",
182
- "p-defer": "^4.0.0",
183
177
  "sinon": "^17.0.1",
184
178
  "sinon-ts": "^2.0.0",
185
179
  "uint8arrays": "^5.0.1"
package/src/index.ts CHANGED
@@ -320,39 +320,6 @@
320
320
  * console.info(obj) // ...
321
321
  * ```
322
322
  *
323
- * ## The `Accept` header
324
- *
325
- * The `Accept` header can be passed to override certain response processing, or to ensure that the final `Content-Type` of the response is the one that is expected.
326
- *
327
- * If the final `Content-Type` does not match the `Accept` header, or if the content cannot be represented in the format dictated by the `Accept` header, or you have configured a custom content type parser, and that parser returns a value that isn't in the accept header, a [406: Not Acceptable](https://developer.mozilla.org/en-US/docs/Web/HTTP/Status/406) response will be returned:
328
- *
329
- * ```typescript
330
- * import { verifiedFetch } from '@helia/verified-fetch'
331
- *
332
- * const res = await verifiedFetch('ipfs://bafyJPEGImageCID', {
333
- * headers: {
334
- * accept: 'image/png'
335
- * }
336
- * })
337
- *
338
- * console.info(res.status) // 406 - the image was a JPEG but we specified PNG as the accept header
339
- * ```
340
- *
341
- * It can also be used to skip processing the data from some formats such as `DAG-CBOR` if you wish to handle decoding it yourself:
342
- *
343
- * ```typescript
344
- * import { verifiedFetch } from '@helia/verified-fetch'
345
- *
346
- * const res = await verifiedFetch('ipfs://bafyDAGCBORCID', {
347
- * headers: {
348
- * accept: 'application/octet-stream'
349
- * }
350
- * })
351
- *
352
- * console.info(res.headers.get('accept')) // application/octet-stream
353
- * const buf = await res.arrayBuffer() // raw bytes, not processed as JSON
354
- * ```
355
- *
356
323
  * ## Comparison to fetch
357
324
  *
358
325
  * This module attempts to act as similarly to the `fetch()` API as possible.
@@ -482,10 +449,6 @@ import type { ProgressEvent, ProgressOptions } from 'progress-events'
482
449
  */
483
450
  export type Resource = string | CID
484
451
 
485
- export interface ResourceDetail {
486
- resource: Resource
487
- }
488
-
489
452
  export interface CIDDetail {
490
453
  cid: CID
491
454
  path: string
@@ -19,8 +19,6 @@ export interface ParseUrlStringOptions extends ProgressOptions<ResolveProgressEv
19
19
 
20
20
  export interface ParsedUrlQuery extends Record<string, string | unknown> {
21
21
  format?: RequestFormatShorthand
22
- download?: boolean
23
- filename?: string
24
22
  }
25
23
 
26
24
  export interface ParsedUrlStringResults {
@@ -111,7 +109,7 @@ export async function parseUrlString ({ urlString, ipns, logger }: ParseUrlStrin
111
109
  }
112
110
 
113
111
  // parse query string
114
- const query: Record<string, any> = {}
112
+ const query: Record<string, string> = {}
115
113
 
116
114
  if (queryString != null && queryString.length > 0) {
117
115
  const queryParts = queryString.split('&')
@@ -119,14 +117,6 @@ export async function parseUrlString ({ urlString, ipns, logger }: ParseUrlStrin
119
117
  const [key, value] = part.split('=')
120
118
  query[key] = decodeURIComponent(value)
121
119
  }
122
-
123
- if (query.download != null) {
124
- query.download = query.download === 'true'
125
- }
126
-
127
- if (query.filename != null) {
128
- query.filename = query.filename.toString()
129
- }
130
120
  }
131
121
 
132
122
  /**