@helia/verified-fetch 7.2.10 → 7.2.12
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/dist/index.min.js +35 -35
- package/dist/index.min.js.map +3 -3
- package/dist/src/plugins/plugin-handle-unixfs.d.ts.map +1 -1
- package/dist/src/plugins/plugin-handle-unixfs.js +27 -6
- package/dist/src/plugins/plugin-handle-unixfs.js.map +1 -1
- package/package.json +1 -1
- package/src/plugins/plugin-handle-unixfs.ts +31 -6
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"plugin-handle-unixfs.d.ts","sourceRoot":"","sources":["../../../src/plugins/plugin-handle-unixfs.ts"],"names":[],"mappings":"AAWA,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAA;AAC7C,OAAO,KAAK,EAAE,aAAa,EAAY,MAAM,aAAa,CAAA;AA6B1D;;GAEG;AACH,qBAAa,YAAa,SAAQ,UAAU;IAC1C,QAAQ,CAAC,EAAE,mBAAkB;IAC7B,QAAQ,CAAC,KAAK,
|
|
1
|
+
{"version":3,"file":"plugin-handle-unixfs.d.ts","sourceRoot":"","sources":["../../../src/plugins/plugin-handle-unixfs.ts"],"names":[],"mappings":"AAWA,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAA;AAC7C,OAAO,KAAK,EAAE,aAAa,EAAY,MAAM,aAAa,CAAA;AA6B1D;;GAEG;AACH,qBAAa,YAAa,SAAQ,UAAU;IAC1C,QAAQ,CAAC,EAAE,mBAAkB;IAC7B,QAAQ,CAAC,KAAK,WAAyB;IAEvC,SAAS,CAAE,EAAE,eAAe,EAAE,MAAM,EAAE,EAAE,aAAa,GAAG,OAAO;IASzD,MAAM,CAAE,OAAO,EAAE,aAAa,GAAG,OAAO,CAAC,QAAQ,CAAC;YA2H1C,UAAU;YA+CV,iBAAiB;CAqChC"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import
|
|
1
|
+
import * as dagPb from '@ipld/dag-pb';
|
|
2
2
|
import { isPromise } from '@libp2p/utils';
|
|
3
3
|
import { exporter, walkPath } from 'ipfs-unixfs-exporter';
|
|
4
4
|
import first from 'it-first';
|
|
@@ -35,7 +35,7 @@ function getDirectoryRedirectUrl(resource, url) {
|
|
|
35
35
|
*/
|
|
36
36
|
export class UnixFSPlugin extends BasePlugin {
|
|
37
37
|
id = 'unixfs-plugin';
|
|
38
|
-
codes = [
|
|
38
|
+
codes = [dagPb.code, raw.code];
|
|
39
39
|
canHandle({ terminalElement, accept }) {
|
|
40
40
|
const supportsCid = this.codes.includes(terminalElement.cid.code);
|
|
41
41
|
const supportsAccept = accept.length === 0 || accept.some(header => header.contentType.mediaType === MEDIA_TYPE_OCTET_STREAM ||
|
|
@@ -103,14 +103,33 @@ export class UnixFSPlugin extends BasePlugin {
|
|
|
103
103
|
}
|
|
104
104
|
}
|
|
105
105
|
// no index file found, return the directory listing
|
|
106
|
-
|
|
106
|
+
let block = await toBuffer(context.blockstore.get(dirCid, context));
|
|
107
|
+
// if it's a shard, load all entries
|
|
108
|
+
// TODO: partial shard responses
|
|
109
|
+
if (entry.unixfs.type === 'hamt-sharded-directory') {
|
|
110
|
+
const links = [];
|
|
111
|
+
const data = dagPb.decode(block);
|
|
112
|
+
for await (const dirEntry of entry.entries()) {
|
|
113
|
+
links.push({
|
|
114
|
+
Name: dirEntry.name,
|
|
115
|
+
Hash: dirEntry.cid,
|
|
116
|
+
// @ts-expect-error needs https://github.com/ipfs/js-ipfs-unixfs/pull/484
|
|
117
|
+
Tsize: dirEntry.size
|
|
118
|
+
});
|
|
119
|
+
}
|
|
120
|
+
block = dagPb.encode({
|
|
121
|
+
Data: data.Data,
|
|
122
|
+
Links: links.sort((a, b) => a.Name?.localeCompare(b.Name ?? '') ?? 0)
|
|
123
|
+
});
|
|
124
|
+
}
|
|
107
125
|
return okResponse(resource, block, {
|
|
108
126
|
headers: {
|
|
109
127
|
'content-type': MEDIA_TYPE_DAG_PB,
|
|
110
128
|
'content-length': `${block.byteLength}`,
|
|
111
129
|
'content-disposition': `${url.searchParams.get('download') === 'true' ? 'attachment' : 'inline'}; ${getContentDispositionFilename(`${dirCid}.dir`)}`,
|
|
112
130
|
'x-ipfs-roots': ipfsRoots.map(cid => cid.toV1()).join(','),
|
|
113
|
-
'accept-ranges': 'bytes'
|
|
131
|
+
'accept-ranges': 'bytes',
|
|
132
|
+
'x-unixfs-type': entry.unixfs.type
|
|
114
133
|
},
|
|
115
134
|
redirected
|
|
116
135
|
});
|
|
@@ -143,7 +162,8 @@ export class UnixFSPlugin extends BasePlugin {
|
|
|
143
162
|
'content-type': contentType,
|
|
144
163
|
'content-disposition': `inline; ${getContentDispositionFilename(filename)}`,
|
|
145
164
|
'x-ipfs-roots': ipfsRoots.map(cid => cid.toV1()).join(','),
|
|
146
|
-
'accept-ranges': 'bytes'
|
|
165
|
+
'accept-ranges': 'bytes',
|
|
166
|
+
'x-unixfs-type': entry.type
|
|
147
167
|
},
|
|
148
168
|
redirected
|
|
149
169
|
});
|
|
@@ -156,7 +176,8 @@ export class UnixFSPlugin extends BasePlugin {
|
|
|
156
176
|
'content-length': `${entry.size}`,
|
|
157
177
|
'content-disposition': `inline; ${getContentDispositionFilename(filename)}`,
|
|
158
178
|
'x-ipfs-roots': ipfsRoots.map(cid => cid.toV1()).join(','),
|
|
159
|
-
'accept-ranges': 'bytes'
|
|
179
|
+
'accept-ranges': 'bytes',
|
|
180
|
+
'x-unixfs-type': entry.type
|
|
160
181
|
},
|
|
161
182
|
redirected
|
|
162
183
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"plugin-handle-unixfs.js","sourceRoot":"","sources":["../../../src/plugins/plugin-handle-unixfs.ts"],"names":[],"mappings":"AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"plugin-handle-unixfs.js","sourceRoot":"","sources":["../../../src/plugins/plugin-handle-unixfs.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@helia/verified-fetch",
|
|
3
|
-
"version": "7.2.
|
|
3
|
+
"version": "7.2.12",
|
|
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-verified-fetch/tree/main/packages/verified-fetch#readme",
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import
|
|
1
|
+
import * as dagPb from '@ipld/dag-pb'
|
|
2
2
|
import { isPromise } from '@libp2p/utils'
|
|
3
3
|
import { exporter, walkPath } from 'ipfs-unixfs-exporter'
|
|
4
4
|
import first from 'it-first'
|
|
@@ -44,7 +44,7 @@ function getDirectoryRedirectUrl (resource: Resource, url: URL): string | undefi
|
|
|
44
44
|
*/
|
|
45
45
|
export class UnixFSPlugin extends BasePlugin {
|
|
46
46
|
readonly id = 'unixfs-plugin'
|
|
47
|
-
readonly codes = [
|
|
47
|
+
readonly codes = [dagPb.code, raw.code]
|
|
48
48
|
|
|
49
49
|
canHandle ({ terminalElement, accept }: PluginContext): boolean {
|
|
50
50
|
const supportsCid = this.codes.includes(terminalElement.cid.code)
|
|
@@ -132,7 +132,29 @@ export class UnixFSPlugin extends BasePlugin {
|
|
|
132
132
|
}
|
|
133
133
|
|
|
134
134
|
// no index file found, return the directory listing
|
|
135
|
-
|
|
135
|
+
let block = await toBuffer(context.blockstore.get(dirCid, context))
|
|
136
|
+
|
|
137
|
+
// if it's a shard, load all entries
|
|
138
|
+
// TODO: partial shard responses
|
|
139
|
+
if (entry.unixfs.type === 'hamt-sharded-directory') {
|
|
140
|
+
const links: dagPb.PBLink[] = []
|
|
141
|
+
const data = dagPb.decode(block)
|
|
142
|
+
|
|
143
|
+
for await (const dirEntry of entry.entries()) {
|
|
144
|
+
links.push({
|
|
145
|
+
Name: dirEntry.name,
|
|
146
|
+
Hash: dirEntry.cid,
|
|
147
|
+
|
|
148
|
+
// @ts-expect-error needs https://github.com/ipfs/js-ipfs-unixfs/pull/484
|
|
149
|
+
Tsize: dirEntry.size
|
|
150
|
+
})
|
|
151
|
+
}
|
|
152
|
+
|
|
153
|
+
block = dagPb.encode({
|
|
154
|
+
Data: data.Data,
|
|
155
|
+
Links: links.sort((a, b) => a.Name?.localeCompare(b.Name ?? '') ?? 0)
|
|
156
|
+
})
|
|
157
|
+
}
|
|
136
158
|
|
|
137
159
|
return okResponse(resource, block, {
|
|
138
160
|
headers: {
|
|
@@ -142,7 +164,8 @@ export class UnixFSPlugin extends BasePlugin {
|
|
|
142
164
|
getContentDispositionFilename(`${dirCid}.dir`)
|
|
143
165
|
}`,
|
|
144
166
|
'x-ipfs-roots': ipfsRoots.map(cid => cid.toV1()).join(','),
|
|
145
|
-
'accept-ranges': 'bytes'
|
|
167
|
+
'accept-ranges': 'bytes',
|
|
168
|
+
'x-unixfs-type': entry.unixfs.type
|
|
146
169
|
},
|
|
147
170
|
redirected
|
|
148
171
|
})
|
|
@@ -178,7 +201,8 @@ export class UnixFSPlugin extends BasePlugin {
|
|
|
178
201
|
getContentDispositionFilename(filename)
|
|
179
202
|
}`,
|
|
180
203
|
'x-ipfs-roots': ipfsRoots.map(cid => cid.toV1()).join(','),
|
|
181
|
-
'accept-ranges': 'bytes'
|
|
204
|
+
'accept-ranges': 'bytes',
|
|
205
|
+
'x-unixfs-type': entry.type
|
|
182
206
|
},
|
|
183
207
|
redirected
|
|
184
208
|
})
|
|
@@ -194,7 +218,8 @@ export class UnixFSPlugin extends BasePlugin {
|
|
|
194
218
|
getContentDispositionFilename(filename)
|
|
195
219
|
}`,
|
|
196
220
|
'x-ipfs-roots': ipfsRoots.map(cid => cid.toV1()).join(','),
|
|
197
|
-
'accept-ranges': 'bytes'
|
|
221
|
+
'accept-ranges': 'bytes',
|
|
222
|
+
'x-unixfs-type': entry.type
|
|
198
223
|
},
|
|
199
224
|
redirected
|
|
200
225
|
})
|