@helia/verified-fetch 4.1.1 → 5.0.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.
Files changed (231) hide show
  1. package/README.md +6 -40
  2. package/dist/index.min.js +73 -534
  3. package/dist/index.min.js.map +4 -4
  4. package/dist/src/constants.d.ts +2 -0
  5. package/dist/src/constants.d.ts.map +1 -1
  6. package/dist/src/constants.js +2 -0
  7. package/dist/src/constants.js.map +1 -1
  8. package/dist/src/index.d.ts +162 -68
  9. package/dist/src/index.d.ts.map +1 -1
  10. package/dist/src/index.js +7 -40
  11. package/dist/src/index.js.map +1 -1
  12. package/dist/src/plugins/index.d.ts +0 -5
  13. package/dist/src/plugins/index.d.ts.map +1 -1
  14. package/dist/src/plugins/index.js +0 -4
  15. package/dist/src/plugins/index.js.map +1 -1
  16. package/dist/src/plugins/plugin-base.d.ts +8 -9
  17. package/dist/src/plugins/plugin-base.d.ts.map +1 -1
  18. package/dist/src/plugins/plugin-base.js +5 -6
  19. package/dist/src/plugins/plugin-base.js.map +1 -1
  20. package/dist/src/plugins/plugin-handle-car.d.ts +3 -3
  21. package/dist/src/plugins/plugin-handle-car.d.ts.map +1 -1
  22. package/dist/src/plugins/plugin-handle-car.js +38 -39
  23. package/dist/src/plugins/plugin-handle-car.js.map +1 -1
  24. package/dist/src/plugins/plugin-handle-ipld.d.ts +12 -0
  25. package/dist/src/plugins/plugin-handle-ipld.d.ts.map +1 -0
  26. package/dist/src/plugins/plugin-handle-ipld.js +83 -0
  27. package/dist/src/plugins/plugin-handle-ipld.js.map +1 -0
  28. package/dist/src/plugins/plugin-handle-ipns-record.d.ts +3 -3
  29. package/dist/src/plugins/plugin-handle-ipns-record.d.ts.map +1 -1
  30. package/dist/src/plugins/plugin-handle-ipns-record.js +25 -34
  31. package/dist/src/plugins/plugin-handle-ipns-record.js.map +1 -1
  32. package/dist/src/plugins/plugin-handle-tar.d.ts +3 -3
  33. package/dist/src/plugins/plugin-handle-tar.d.ts.map +1 -1
  34. package/dist/src/plugins/plugin-handle-tar.js +20 -22
  35. package/dist/src/plugins/plugin-handle-tar.js.map +1 -1
  36. package/dist/src/plugins/plugin-handle-unixfs.d.ts +14 -0
  37. package/dist/src/plugins/plugin-handle-unixfs.d.ts.map +1 -0
  38. package/dist/src/plugins/plugin-handle-unixfs.js +180 -0
  39. package/dist/src/plugins/plugin-handle-unixfs.js.map +1 -0
  40. package/dist/src/plugins/types.d.ts +1 -77
  41. package/dist/src/plugins/types.d.ts.map +1 -1
  42. package/dist/src/url-resolver.d.ts +29 -11
  43. package/dist/src/url-resolver.d.ts.map +1 -1
  44. package/dist/src/url-resolver.js +152 -74
  45. package/dist/src/url-resolver.js.map +1 -1
  46. package/dist/src/utils/content-type-parser.d.ts.map +1 -1
  47. package/dist/src/utils/content-type-parser.js +4 -3
  48. package/dist/src/utils/content-type-parser.js.map +1 -1
  49. package/dist/src/utils/content-types.d.ts +26 -0
  50. package/dist/src/utils/content-types.d.ts.map +1 -0
  51. package/dist/src/utils/content-types.js +137 -0
  52. package/dist/src/utils/content-types.js.map +1 -0
  53. package/dist/src/utils/convert-output.d.ts +17 -0
  54. package/dist/src/utils/convert-output.d.ts.map +1 -0
  55. package/dist/src/utils/convert-output.js +176 -0
  56. package/dist/src/utils/convert-output.js.map +1 -0
  57. package/dist/src/utils/error-to-response.d.ts +3 -0
  58. package/dist/src/utils/error-to-response.d.ts.map +1 -0
  59. package/dist/src/utils/error-to-response.js +40 -0
  60. package/dist/src/utils/error-to-response.js.map +1 -0
  61. package/dist/src/utils/get-content-disposition-filename.d.ts +1 -1
  62. package/dist/src/utils/get-content-disposition-filename.d.ts.map +1 -1
  63. package/dist/src/utils/get-content-disposition-filename.js +4 -0
  64. package/dist/src/utils/get-content-disposition-filename.js.map +1 -1
  65. package/dist/src/utils/get-e-tag.d.ts +20 -15
  66. package/dist/src/utils/get-e-tag.d.ts.map +1 -1
  67. package/dist/src/utils/get-e-tag.js +8 -22
  68. package/dist/src/utils/get-e-tag.js.map +1 -1
  69. package/dist/src/utils/get-offset-and-length.d.ts +12 -2
  70. package/dist/src/utils/get-offset-and-length.d.ts.map +1 -1
  71. package/dist/src/utils/get-offset-and-length.js +63 -21
  72. package/dist/src/utils/get-offset-and-length.js.map +1 -1
  73. package/dist/src/utils/get-range-header.d.ts +22 -0
  74. package/dist/src/utils/get-range-header.d.ts.map +1 -0
  75. package/dist/src/utils/get-range-header.js +69 -0
  76. package/dist/src/utils/get-range-header.js.map +1 -0
  77. package/dist/src/utils/parse-url-string.d.ts +2 -1
  78. package/dist/src/utils/parse-url-string.d.ts.map +1 -1
  79. package/dist/src/utils/parse-url-string.js +46 -71
  80. package/dist/src/utils/parse-url-string.js.map +1 -1
  81. package/dist/src/utils/resource-to-cache-key.d.ts +3 -3
  82. package/dist/src/utils/resource-to-cache-key.js +5 -5
  83. package/dist/src/utils/resource-to-cache-key.js.map +1 -1
  84. package/dist/src/utils/response-headers.d.ts +4 -14
  85. package/dist/src/utils/response-headers.d.ts.map +1 -1
  86. package/dist/src/utils/response-headers.js +36 -36
  87. package/dist/src/utils/response-headers.js.map +1 -1
  88. package/dist/src/utils/responses.d.ts +30 -11
  89. package/dist/src/utils/responses.d.ts.map +1 -1
  90. package/dist/src/utils/responses.js +146 -39
  91. package/dist/src/utils/responses.js.map +1 -1
  92. package/dist/src/verified-fetch.d.ts +16 -15
  93. package/dist/src/verified-fetch.d.ts.map +1 -1
  94. package/dist/src/verified-fetch.js +302 -238
  95. package/dist/src/verified-fetch.js.map +1 -1
  96. package/dist/typedoc-urls.json +64 -45
  97. package/package.json +4 -3
  98. package/src/constants.ts +3 -0
  99. package/src/index.ts +199 -68
  100. package/src/plugins/index.ts +0 -6
  101. package/src/plugins/plugin-base.ts +8 -10
  102. package/src/plugins/plugin-handle-car.ts +48 -46
  103. package/src/plugins/plugin-handle-ipld.ts +93 -0
  104. package/src/plugins/plugin-handle-ipns-record.ts +31 -41
  105. package/src/plugins/plugin-handle-tar.ts +25 -29
  106. package/src/plugins/plugin-handle-unixfs.ts +217 -0
  107. package/src/plugins/types.ts +0 -86
  108. package/src/url-resolver.ts +197 -83
  109. package/src/utils/content-type-parser.ts +4 -3
  110. package/src/utils/content-types.ts +159 -0
  111. package/src/utils/convert-output.ts +187 -0
  112. package/src/utils/error-to-response.ts +49 -0
  113. package/src/utils/get-content-disposition-filename.ts +7 -1
  114. package/src/utils/get-e-tag.ts +26 -35
  115. package/src/utils/get-offset-and-length.ts +75 -21
  116. package/src/utils/get-range-header.ts +107 -0
  117. package/src/utils/parse-url-string.ts +51 -80
  118. package/src/utils/resource-to-cache-key.ts +5 -5
  119. package/src/utils/response-headers.ts +40 -41
  120. package/src/utils/responses.ts +186 -45
  121. package/src/verified-fetch.ts +353 -270
  122. package/dist/src/plugins/plugin-handle-byte-range-context.d.ts +0 -14
  123. package/dist/src/plugins/plugin-handle-byte-range-context.d.ts.map +0 -1
  124. package/dist/src/plugins/plugin-handle-byte-range-context.js +0 -25
  125. package/dist/src/plugins/plugin-handle-byte-range-context.js.map +0 -1
  126. package/dist/src/plugins/plugin-handle-cbor.d.ts +0 -17
  127. package/dist/src/plugins/plugin-handle-cbor.d.ts.map +0 -1
  128. package/dist/src/plugins/plugin-handle-cbor.js +0 -94
  129. package/dist/src/plugins/plugin-handle-cbor.js.map +0 -1
  130. package/dist/src/plugins/plugin-handle-dag-cbor-html-preview.d.ts +0 -27
  131. package/dist/src/plugins/plugin-handle-dag-cbor-html-preview.d.ts.map +0 -1
  132. package/dist/src/plugins/plugin-handle-dag-cbor-html-preview.js +0 -279
  133. package/dist/src/plugins/plugin-handle-dag-cbor-html-preview.js.map +0 -1
  134. package/dist/src/plugins/plugin-handle-dag-cbor.d.ts +0 -17
  135. package/dist/src/plugins/plugin-handle-dag-cbor.d.ts.map +0 -1
  136. package/dist/src/plugins/plugin-handle-dag-cbor.js +0 -66
  137. package/dist/src/plugins/plugin-handle-dag-cbor.js.map +0 -1
  138. package/dist/src/plugins/plugin-handle-dag-pb.d.ts +0 -17
  139. package/dist/src/plugins/plugin-handle-dag-pb.d.ts.map +0 -1
  140. package/dist/src/plugins/plugin-handle-dag-pb.js +0 -209
  141. package/dist/src/plugins/plugin-handle-dag-pb.js.map +0 -1
  142. package/dist/src/plugins/plugin-handle-dag-walk.d.ts +0 -21
  143. package/dist/src/plugins/plugin-handle-dag-walk.d.ts.map +0 -1
  144. package/dist/src/plugins/plugin-handle-dag-walk.js +0 -95
  145. package/dist/src/plugins/plugin-handle-dag-walk.js.map +0 -1
  146. package/dist/src/plugins/plugin-handle-dir-index-html.d.ts +0 -10
  147. package/dist/src/plugins/plugin-handle-dir-index-html.d.ts.map +0 -1
  148. package/dist/src/plugins/plugin-handle-dir-index-html.js +0 -59
  149. package/dist/src/plugins/plugin-handle-dir-index-html.js.map +0 -1
  150. package/dist/src/plugins/plugin-handle-json.d.ts +0 -12
  151. package/dist/src/plugins/plugin-handle-json.d.ts.map +0 -1
  152. package/dist/src/plugins/plugin-handle-json.js +0 -73
  153. package/dist/src/plugins/plugin-handle-json.js.map +0 -1
  154. package/dist/src/plugins/plugin-handle-raw.d.ts +0 -9
  155. package/dist/src/plugins/plugin-handle-raw.d.ts.map +0 -1
  156. package/dist/src/plugins/plugin-handle-raw.js +0 -92
  157. package/dist/src/plugins/plugin-handle-raw.js.map +0 -1
  158. package/dist/src/plugins/plugins.d.ts +0 -6
  159. package/dist/src/plugins/plugins.d.ts.map +0 -1
  160. package/dist/src/plugins/plugins.js +0 -6
  161. package/dist/src/plugins/plugins.js.map +0 -1
  162. package/dist/src/utils/byte-range-context.d.ts +0 -103
  163. package/dist/src/utils/byte-range-context.d.ts.map +0 -1
  164. package/dist/src/utils/byte-range-context.js +0 -504
  165. package/dist/src/utils/byte-range-context.js.map +0 -1
  166. package/dist/src/utils/dag-cbor-to-safe-json.d.ts +0 -15
  167. package/dist/src/utils/dag-cbor-to-safe-json.d.ts.map +0 -1
  168. package/dist/src/utils/dag-cbor-to-safe-json.js +0 -54
  169. package/dist/src/utils/dag-cbor-to-safe-json.js.map +0 -1
  170. package/dist/src/utils/dir-index-html.d.ts +0 -19
  171. package/dist/src/utils/dir-index-html.d.ts.map +0 -1
  172. package/dist/src/utils/dir-index-html.js +0 -438
  173. package/dist/src/utils/dir-index-html.js.map +0 -1
  174. package/dist/src/utils/get-peer-id-from-string.d.ts +0 -3
  175. package/dist/src/utils/get-peer-id-from-string.d.ts.map +0 -1
  176. package/dist/src/utils/get-peer-id-from-string.js +0 -10
  177. package/dist/src/utils/get-peer-id-from-string.js.map +0 -1
  178. package/dist/src/utils/get-resolved-accept-header.d.ts +0 -9
  179. package/dist/src/utils/get-resolved-accept-header.d.ts.map +0 -1
  180. package/dist/src/utils/get-resolved-accept-header.js +0 -27
  181. package/dist/src/utils/get-resolved-accept-header.js.map +0 -1
  182. package/dist/src/utils/get-stream-from-async-iterable.d.ts +0 -9
  183. package/dist/src/utils/get-stream-from-async-iterable.d.ts.map +0 -1
  184. package/dist/src/utils/get-stream-from-async-iterable.js +0 -43
  185. package/dist/src/utils/get-stream-from-async-iterable.js.map +0 -1
  186. package/dist/src/utils/handle-redirects.d.ts +0 -16
  187. package/dist/src/utils/handle-redirects.d.ts.map +0 -1
  188. package/dist/src/utils/handle-redirects.js +0 -84
  189. package/dist/src/utils/handle-redirects.js.map +0 -1
  190. package/dist/src/utils/is-accept-explicit.d.ts +0 -15
  191. package/dist/src/utils/is-accept-explicit.d.ts.map +0 -1
  192. package/dist/src/utils/is-accept-explicit.js +0 -26
  193. package/dist/src/utils/is-accept-explicit.js.map +0 -1
  194. package/dist/src/utils/request-headers.d.ts +0 -13
  195. package/dist/src/utils/request-headers.d.ts.map +0 -1
  196. package/dist/src/utils/request-headers.js +0 -63
  197. package/dist/src/utils/request-headers.js.map +0 -1
  198. package/dist/src/utils/select-output-type.d.ts +0 -17
  199. package/dist/src/utils/select-output-type.d.ts.map +0 -1
  200. package/dist/src/utils/select-output-type.js +0 -153
  201. package/dist/src/utils/select-output-type.js.map +0 -1
  202. package/dist/src/utils/tlru.d.ts +0 -15
  203. package/dist/src/utils/tlru.d.ts.map +0 -1
  204. package/dist/src/utils/tlru.js +0 -34
  205. package/dist/src/utils/tlru.js.map +0 -1
  206. package/dist/src/utils/walk-path.d.ts +0 -27
  207. package/dist/src/utils/walk-path.d.ts.map +0 -1
  208. package/dist/src/utils/walk-path.js +0 -45
  209. package/dist/src/utils/walk-path.js.map +0 -1
  210. package/src/plugins/plugin-handle-byte-range-context.ts +0 -30
  211. package/src/plugins/plugin-handle-cbor.ts +0 -107
  212. package/src/plugins/plugin-handle-dag-cbor-html-preview.ts +0 -295
  213. package/src/plugins/plugin-handle-dag-cbor.ts +0 -83
  214. package/src/plugins/plugin-handle-dag-pb.ts +0 -248
  215. package/src/plugins/plugin-handle-dag-walk.ts +0 -110
  216. package/src/plugins/plugin-handle-dir-index-html.ts +0 -72
  217. package/src/plugins/plugin-handle-json.ts +0 -80
  218. package/src/plugins/plugin-handle-raw.ts +0 -110
  219. package/src/plugins/plugins.ts +0 -5
  220. package/src/utils/byte-range-context.ts +0 -597
  221. package/src/utils/dag-cbor-to-safe-json.ts +0 -63
  222. package/src/utils/dir-index-html.ts +0 -505
  223. package/src/utils/get-peer-id-from-string.ts +0 -12
  224. package/src/utils/get-resolved-accept-header.ts +0 -42
  225. package/src/utils/get-stream-from-async-iterable.ts +0 -49
  226. package/src/utils/handle-redirects.ts +0 -109
  227. package/src/utils/is-accept-explicit.ts +0 -38
  228. package/src/utils/request-headers.ts +0 -65
  229. package/src/utils/select-output-type.ts +0 -175
  230. package/src/utils/tlru.ts +0 -42
  231. package/src/utils/walk-path.ts +0 -69
@@ -1,14 +0,0 @@
1
- import { BasePlugin } from './plugin-base.js';
2
- import type { PluginContext } from './types.js';
3
- /**
4
- * This plugin simply adds the ByteRangeContext to the PluginContext.
5
- */
6
- export declare class ByteRangeContextPlugin extends BasePlugin {
7
- readonly id = "byte-range-context-plugin";
8
- /**
9
- * Return false if the ByteRangeContext has already been set, otherwise return true.
10
- */
11
- canHandle(context: PluginContext): boolean;
12
- handle(context: PluginContext): Promise<Response | null>;
13
- }
14
- //# sourceMappingURL=plugin-handle-byte-range-context.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"plugin-handle-byte-range-context.d.ts","sourceRoot":"","sources":["../../../src/plugins/plugin-handle-byte-range-context.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAA;AAC7C,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,YAAY,CAAA;AAE/C;;GAEG;AACH,qBAAa,sBAAuB,SAAQ,UAAU;IACpD,QAAQ,CAAC,EAAE,+BAA8B;IAEzC;;OAEG;IACH,SAAS,CAAE,OAAO,EAAE,aAAa,GAAG,OAAO;IAIrC,MAAM,CAAE,OAAO,EAAE,aAAa,GAAG,OAAO,CAAC,QAAQ,GAAG,IAAI,CAAC;CAWhE"}
@@ -1,25 +0,0 @@
1
- import { ByteRangeContext } from '../utils/byte-range-context.js';
2
- import { badRangeResponse } from '../utils/responses.js';
3
- import { BasePlugin } from './plugin-base.js';
4
- /**
5
- * This plugin simply adds the ByteRangeContext to the PluginContext.
6
- */
7
- export class ByteRangeContextPlugin extends BasePlugin {
8
- id = 'byte-range-context-plugin';
9
- /**
10
- * Return false if the ByteRangeContext has already been set, otherwise return true.
11
- */
12
- canHandle(context) {
13
- return context.byteRangeContext == null;
14
- }
15
- async handle(context) {
16
- context.byteRangeContext = new ByteRangeContext(this.pluginOptions.logger, context.options?.headers);
17
- context.modified++;
18
- if (context.byteRangeContext.isRangeRequest && !context.byteRangeContext.isValidRangeRequest) {
19
- // invalid range request.. fail
20
- return badRangeResponse(context.resource);
21
- }
22
- return null;
23
- }
24
- }
25
- //# sourceMappingURL=plugin-handle-byte-range-context.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"plugin-handle-byte-range-context.js","sourceRoot":"","sources":["../../../src/plugins/plugin-handle-byte-range-context.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,gCAAgC,CAAA;AACjE,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAA;AACxD,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAA;AAG7C;;GAEG;AACH,MAAM,OAAO,sBAAuB,SAAQ,UAAU;IAC3C,EAAE,GAAG,2BAA2B,CAAA;IAEzC;;OAEG;IACH,SAAS,CAAE,OAAsB;QAC/B,OAAO,OAAO,CAAC,gBAAgB,IAAI,IAAI,CAAA;IACzC,CAAC;IAED,KAAK,CAAC,MAAM,CAAE,OAAsB;QAClC,OAAO,CAAC,gBAAgB,GAAG,IAAI,gBAAgB,CAAC,IAAI,CAAC,aAAa,CAAC,MAAM,EAAE,OAAO,CAAC,OAAO,EAAE,OAAO,CAAC,CAAA;QACpG,OAAO,CAAC,QAAQ,EAAE,CAAA;QAElB,IAAI,OAAO,CAAC,gBAAgB,CAAC,cAAc,IAAI,CAAC,OAAO,CAAC,gBAAgB,CAAC,mBAAmB,EAAE,CAAC;YAC7F,+BAA+B;YAC/B,OAAO,gBAAgB,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAA;QAC3C,CAAC;QAED,OAAO,IAAI,CAAA;IACb,CAAC;CACF"}
@@ -1,17 +0,0 @@
1
- import { BasePlugin } from './plugin-base.js';
2
- import type { PluginContext } from './types.js';
3
- import type { ObjectNode } from 'ipfs-unixfs-exporter';
4
- /**
5
- * Handles `cbor` content
6
- */
7
- export declare class CborPlugin extends BasePlugin {
8
- readonly id = "cbor-plugin";
9
- readonly codes: number[];
10
- canHandle({ cid, pathDetails, byteRangeContext }: PluginContext): boolean;
11
- handle(context: PluginContext & Required<Pick<PluginContext, 'byteRangeContext' | 'pathDetails'>> & {
12
- pathDetails: {
13
- terminalElement: ObjectNode;
14
- };
15
- }): Promise<Response>;
16
- }
17
- //# sourceMappingURL=plugin-handle-cbor.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"plugin-handle-cbor.d.ts","sourceRoot":"","sources":["../../../src/plugins/plugin-handle-cbor.ts"],"names":[],"mappings":"AAQA,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAA;AAC7C,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,YAAY,CAAA;AAC/C,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAA;AAEtD;;GAEG;AACH,qBAAa,UAAW,SAAQ,UAAU;IACxC,QAAQ,CAAC,EAAE,iBAAgB;IAC3B,QAAQ,CAAC,KAAK,WAAe;IAE7B,SAAS,CAAE,EAAE,GAAG,EAAE,WAAW,EAAE,gBAAgB,EAAE,EAAE,aAAa,GAAG,OAAO;IAoBpE,MAAM,CAAE,OAAO,EAAE,aAAa,GAAG,QAAQ,CAAC,IAAI,CAAC,aAAa,EAAE,kBAAkB,GAAG,aAAa,CAAC,CAAC,GAAG;QAAE,WAAW,EAAE;YAAE,eAAe,EAAE,UAAU,CAAA;SAAE,CAAA;KAAE,GAAG,OAAO,CAAC,QAAQ,CAAC;CAiDhL"}
@@ -1,94 +0,0 @@
1
- import * as ipldDagCbor from '@ipld/dag-cbor';
2
- import { CID } from 'multiformats/cid';
3
- import { fromString as uint8ArrayFromString } from 'uint8arrays/from-string';
4
- import { CODEC_CBOR } from "../constants.js";
5
- import { cborToObject, dagCborToSafeJSON } from '../utils/dag-cbor-to-safe-json.js';
6
- import { setIpfsRoots } from '../utils/response-headers.js';
7
- import { notAcceptableResponse, okRangeResponse } from '../utils/responses.js';
8
- import { isObjectNode } from '../utils/walk-path.js';
9
- import { BasePlugin } from './plugin-base.js';
10
- /**
11
- * Handles `cbor` content
12
- */
13
- export class CborPlugin extends BasePlugin {
14
- id = 'cbor-plugin';
15
- codes = [CODEC_CBOR];
16
- canHandle({ cid, pathDetails, byteRangeContext }) {
17
- if (pathDetails == null) {
18
- return false;
19
- }
20
- if (!isObjectNode(pathDetails.terminalElement)) {
21
- return false;
22
- }
23
- if (cid.code !== CODEC_CBOR) {
24
- return false;
25
- }
26
- if (byteRangeContext == null) {
27
- return false;
28
- }
29
- return true;
30
- }
31
- async handle(context) {
32
- const { cid, path, resource, accept, pathDetails: { terminalElement, ipfsRoots } } = context;
33
- this.log.trace('fetching %c/%s with accept header %s', cid, path.join('/'), accept?.mimeType);
34
- const block = terminalElement.node;
35
- let responseContentType = 'application/cbor';
36
- let body = block;
37
- if (accept?.mimeType === 'application/json' || accept?.mimeType === 'application/vnd.ipld.dag-json') {
38
- try {
39
- body = dagCborToSafeJSON(block);
40
- responseContentType = accept.mimeType;
41
- }
42
- catch (err) {
43
- this.log.error('could not decode CBOR as JSON-safe - %e', err);
44
- return notAcceptableResponse(resource);
45
- }
46
- }
47
- else if (accept?.mimeType === 'application/vnd.ipld.dag-cbor') {
48
- try {
49
- const obj = cborToObject(block);
50
- convert(obj);
51
- body = ipldDagCbor.encode(obj);
52
- responseContentType = accept.mimeType;
53
- }
54
- catch (err) {
55
- this.log.error('could not translate CBOR to DAG-CBOR - %e', err);
56
- return notAcceptableResponse(resource);
57
- }
58
- }
59
- else if (accept?.mimeType === 'application/octet-stream' || accept?.mimeType === 'application/vnd.ipld.raw') {
60
- responseContentType = accept.mimeType;
61
- }
62
- context.byteRangeContext.setBody(body);
63
- const response = okRangeResponse(resource, context.byteRangeContext.getBody(responseContentType), { byteRangeContext: context.byteRangeContext, log: this.log });
64
- response.headers.set('content-type', context.byteRangeContext.getContentType() ?? responseContentType);
65
- if (responseContentType !== 'application/json') {
66
- context.query.download = true;
67
- context.query.filename ??= `${cid}.cbor`;
68
- }
69
- this.log.trace('setting content type to "%s"', context.byteRangeContext.getContentType() ?? responseContentType);
70
- setIpfsRoots(response, ipfsRoots);
71
- return response;
72
- }
73
- }
74
- /**
75
- * Turns `{ "/": string }` properties into `CID` instances and
76
- * `{ "/": { "bytes": base64 } }` into `Uint8Array`s
77
- */
78
- function convert(obj) {
79
- try {
80
- for (const key of Object.getOwnPropertyNames(obj)) {
81
- if (typeof obj[key]?.['/'] === 'string') {
82
- obj[key] = CID.parse(obj[key]['/']);
83
- }
84
- else if (typeof obj[key]?.['/']?.['bytes'] === 'string') {
85
- obj[key] = uint8ArrayFromString(obj[key]['/']['bytes'], 'base64');
86
- }
87
- else {
88
- convert(obj[key]);
89
- }
90
- }
91
- }
92
- catch { }
93
- }
94
- //# sourceMappingURL=plugin-handle-cbor.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"plugin-handle-cbor.js","sourceRoot":"","sources":["../../../src/plugins/plugin-handle-cbor.ts"],"names":[],"mappings":"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"}
@@ -1,27 +0,0 @@
1
- import { CID } from 'multiformats/cid';
2
- import { BasePlugin } from './plugin-base.js';
3
- import type { PluginContext, VerifiedFetchPluginFactory } from './types.js';
4
- import type { ObjectNode } from 'ipfs-unixfs-exporter';
5
- /**
6
- * Handles `dag-cbor` content where the Accept: `text/html` header is present.
7
- */
8
- export declare class DagCborHtmlPreviewPlugin extends BasePlugin {
9
- readonly id = "dag-cbor-plugin-html-preview";
10
- readonly codes: 113[];
11
- canHandle({ cid, accept, pathDetails }: PluginContext): boolean;
12
- handle(context: PluginContext & Required<Pick<PluginContext, 'byteRangeContext' | 'pathDetails'>> & {
13
- pathDetails: {
14
- terminalElement: ObjectNode;
15
- };
16
- }): Promise<Response>;
17
- getHtml({ path, obj, cid }: {
18
- path?: string[];
19
- obj: Record<string, any>;
20
- cid: CID;
21
- }): string;
22
- valueHTML(value: any, link: string[]): string;
23
- private renderValue;
24
- renderRows(obj: Record<string, any>, currentPath?: string[]): string;
25
- }
26
- export declare const dagCborHtmlPreviewPluginFactory: VerifiedFetchPluginFactory;
27
- //# sourceMappingURL=plugin-handle-dag-cbor-html-preview.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"plugin-handle-dag-cbor-html-preview.d.ts","sourceRoot":"","sources":["../../../src/plugins/plugin-handle-dag-cbor-html-preview.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,GAAG,EAAE,MAAM,kBAAkB,CAAA;AAMtC,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAA;AAC7C,OAAO,KAAK,EAAE,aAAa,EAAE,0BAA0B,EAAE,MAAM,YAAY,CAAA;AAC3E,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAA;AAmCtD;;GAEG;AACH,qBAAa,wBAAyB,SAAQ,UAAU;IACtD,QAAQ,CAAC,EAAE,kCAAiC;IAC5C,QAAQ,CAAC,KAAK,QAAqB;IAEnC,SAAS,CAAE,EAAE,GAAG,EAAE,MAAM,EAAE,WAAW,EAAE,EAAE,aAAa,GAAG,OAAO;IAoB1D,MAAM,CAAE,OAAO,EAAE,aAAa,GAAG,QAAQ,CAAC,IAAI,CAAC,aAAa,EAAE,kBAAkB,GAAG,aAAa,CAAC,CAAC,GAAG;QAAE,WAAW,EAAE;YAAE,eAAe,EAAE,UAAU,CAAA;SAAE,CAAA;KAAE,GAAG,OAAO,CAAC,QAAQ,CAAC;IA4B/K,OAAO,CAAE,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE;QAAE,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;QAAC,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;QAAC,GAAG,EAAE,GAAG,CAAA;KAAE,GAAG,MAAM;IAgJ7F,SAAS,CAAE,KAAK,EAAE,GAAG,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,MAAM;IAiB9C,OAAO,CAAC,WAAW;IAgBnB,UAAU,CAAE,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EAAE,WAAW,GAAE,MAAM,EAAO,GAAG,MAAM;CAe1E;AAED,eAAO,MAAM,+BAA+B,EAAE,0BAAyE,CAAA"}
@@ -1,279 +0,0 @@
1
- import * as ipldDagCbor from '@ipld/dag-cbor';
2
- import { base32 } from 'multiformats/bases/base32';
3
- import { CID } from 'multiformats/cid';
4
- import { sha256 } from 'multiformats/hashes/sha2';
5
- import { isLink } from 'multiformats/link';
6
- import { getETag } from '../utils/get-e-tag.js';
7
- import { getIpfsRoots } from '../utils/response-headers.js';
8
- import { isObjectNode } from '../utils/walk-path.js';
9
- import { BasePlugin } from './plugin-base.js';
10
- function isPrimitive(value) {
11
- return value === null ||
12
- value === undefined ||
13
- typeof value === 'string' ||
14
- typeof value === 'number' ||
15
- typeof value === 'boolean' ||
16
- typeof value === 'bigint' ||
17
- typeof value === 'symbol';
18
- }
19
- /**
20
- * Converts a cborObject and it's children into a small hash that can be used in the etag header.
21
- *
22
- * @see https://github.com/ipfs/boxo/blob/dc60fe747c375c631a92fcfd6c7456f44a760d24/gateway/assets/assets.go#L84
23
- * @see https://github.com/ipfs/boxo/blob/dc60fe747c375c631a92fcfd6c7456f44a760d24/gateway/handler_unixfs_dir.go#L233-L235
24
- */
25
- async function getAssetHash(cborObject) {
26
- /**
27
- * Plugin Version represents a "version of gateway implementation" that allows for cache busting if necessary.
28
- *
29
- * @see https://specs.ipfs.tech/http-gateways/path-gateway/#etag-response-header
30
- */
31
- const pluginVersion = '0.0.1';
32
- const entryDetails = Object.entries(cborObject).reduce((acc, [key, value]) => {
33
- if (isPrimitive(value)) {
34
- return `${acc}${key}${value}`;
35
- }
36
- return `${acc}${key}${getAssetHash(value)}`;
37
- }, '');
38
- const hashBytes = await sha256.encode(new TextEncoder().encode(pluginVersion + entryDetails));
39
- return base32.encode(hashBytes);
40
- }
41
- /**
42
- * Handles `dag-cbor` content where the Accept: `text/html` header is present.
43
- */
44
- export class DagCborHtmlPreviewPlugin extends BasePlugin {
45
- id = 'dag-cbor-plugin-html-preview';
46
- codes = [ipldDagCbor.code];
47
- canHandle({ cid, accept, pathDetails }) {
48
- if (pathDetails == null) {
49
- return false;
50
- }
51
- if (!isObjectNode(pathDetails.terminalElement)) {
52
- return false;
53
- }
54
- if (cid.code !== ipldDagCbor.code) {
55
- return false;
56
- }
57
- if (accept == null || !accept?.mimeType.includes('text/html')) {
58
- return false;
59
- }
60
- return isObjectNode(pathDetails.terminalElement);
61
- }
62
- async handle(context) {
63
- const { cid, path, pathDetails: { terminalElement, ipfsRoots } } = context;
64
- this.log.trace('generating html preview for %c/%s', cid, path);
65
- const block = terminalElement.node;
66
- let obj;
67
- try {
68
- obj = ipldDagCbor.decode(block);
69
- }
70
- catch (err) {
71
- return new Response(`<pre>Failed to decode DAG-CBOR: ${String(err)}</pre>`, {
72
- status: 500,
73
- headers: { 'Content-Type': 'text/html' }
74
- });
75
- }
76
- const html = this.getHtml({ path, obj, cid });
77
- return new Response(html, {
78
- status: 200,
79
- headers: {
80
- 'Content-Type': 'text/html',
81
- 'X-Ipfs-Roots': getIpfsRoots(ipfsRoots),
82
- 'Cache-Control': 'public, max-age=604800, stale-while-revalidate=2678400',
83
- Etag: getETag({ cid, reqFormat: context.reqFormat, contentPrefix: `DagIndex-${await getAssetHash(obj)}_CID-` })
84
- }
85
- });
86
- }
87
- getHtml({ path, obj, cid }) {
88
- const style = `
89
- :root {
90
- --sans-serif: "Plex", system-ui, -apple-system, Segoe UI, Roboto, Ubuntu, Cantarell, Noto Sans, sans-serif;
91
- --monospace: Consolas, monaco, monospace;
92
- --navy: #073a53;
93
- --teal: #6bc4ce;
94
- --turquoise: #47AFB4;
95
- --steel-gray: #3f5667;
96
- --dark-white: #d9dbe2;
97
- --light-white: #edf0f4;
98
- --near-white: #f7f8fa;
99
- --radius: 4px;
100
- }
101
- body {
102
- color: #34373f;
103
- font-family: var(--sans-serif);
104
- line-height: 1.43;
105
- margin: 0;
106
- word-break: break-all;
107
- -webkit-text-size-adjust: 100%;
108
- -ms-text-size-adjust: 100%;
109
- -webkit-tap-highlight-color: transparent;
110
- }
111
- main {
112
- border: 1px solid var(--dark-white);
113
- border-radius: var(--radius);
114
- overflow: hidden;
115
- margin: 1em;
116
- font-size: .875em;
117
- }
118
- main section header {
119
- background-color: var(--near-white);
120
- }
121
- main header, main section:not(:last-child) {
122
- border-bottom: 1px solid var(--dark-white);
123
- }
124
- main header {
125
- padding-top: .7em;
126
- padding-bottom: .7em;
127
- background-color: var(--light-white);
128
- }
129
- main header, main .container {
130
- padding-left: 1em;
131
- padding-right: 1em;
132
- }
133
- section {
134
- display: block;
135
- }
136
- .grid.dag {
137
- grid-template-columns: max-content 1fr;
138
- }
139
- .grid {
140
- display: grid;
141
- overflow-x: auto;
142
- }
143
- .grid.dag > div {
144
- background: white;
145
- }
146
- .grid.dag > div:nth-of-type(2n+1) {
147
- padding-left: 1em;
148
- }
149
- .grid.dag > div:nth-child(4n), .grid.dag > div:nth-child(4n+3) {
150
- background-color: var(--near-white);
151
- }
152
- .grid.dag .grid {
153
- padding: 0;
154
- }
155
- /* change coloring of nested grid
156
- .grid.dag .grid.dag > div:nth-child(4n), .grid.dag .grid.dag > div:nth-child(4n+3) {
157
- background-color: white;
158
- }
159
- .grid.dag .grid.dag div:nth-child(4n+1), .grid.dag .grid.dag div:nth-child(4n+2) {
160
- background-color: var(--near-white);
161
- } */
162
- .grid.dag > div:nth-last-child(-n+2) {
163
- border-bottom: 0;
164
- }
165
- .grid .grid {
166
- overflow-x: visible;
167
- }
168
- .grid > div {
169
- padding: .7em;
170
- border-bottom: 1px solid var(--dark-white);
171
- }
172
- .nowrap {
173
- white-space: nowrap;
174
- }
175
- pre, code {
176
- font-family: var(--monospace);
177
- }
178
- strong {
179
- font-weight: bolder;
180
- }
181
- a:active, a:visited {
182
- color: #00b0e9;
183
- }
184
- .ipfs-hash {
185
- color: #7f8491;
186
- font-family: var(--monospace);
187
- }
188
- a {
189
- color: #117eb3;
190
- text-decoration: none;
191
- }
192
- header { margin-bottom: 2em; }
193
- .ipfs-logo { width: 32px; height: 32px; background: url('data:image/x-icon;base64,AAABAAEAEBAAAAEAIABoBAAAFgAAACgAAAAQAAAAIAAAAAEAIAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAlo89/56ZQ/8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACUjDu1lo89/6mhTP+zrVP/nplD/5+aRK8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHNiIS6Wjz3/ubFY/761W/+vp1D/urRZ/8vDZf/GvmH/nplD/1BNIm8AAAAAAAAAAAAAAAAAAAAAAAAAAJaPPf+knEj/vrVb/761W/++tVv/r6dQ/7q0Wf/Lw2X/y8Nl/8vDZf+tpk7/nplD/wAAAAAAAAAAAAAAAJaPPf+2rVX/vrVb/761W/++tVv/vrVb/6+nUP+6tFn/y8Nl/8vDZf/Lw2X/y8Nl/8G6Xv+emUP/AAAAAAAAAACWjz3/vrVb/761W/++tVv/vrVb/761W/+vp1D/urRZ/8vDZf/Lw2X/y8Nl/8vDZf/Lw2X/nplD/wAAAAAAAAAAlo89/761W/++tVv/vrVb/761W/++tVv/r6dQ/7q0Wf/Lw2X/y8Nl/8vDZf/Lw2X/y8Nl/56ZQ/8AAAAAAAAAAJaPPf++tVv/vrVb/761W/++tVv/vbRa/5aPPf+emUP/y8Nl/8vDZf/Lw2X/y8Nl/8vDZf+emUP/AAAAAAAAAACWjz3/vrVb/761W/++tVv/vrVb/5qTQP+inkb/op5G/6KdRv/Lw2X/y8Nl/8vDZf/Lw2X/nplD/wAAAAAAAAAAlo89/761W/++tVv/sqlS/56ZQ//LxWb/0Mlp/9DJaf/Kw2X/oJtE/7+3XP/Lw2X/y8Nl/56ZQ/8AAAAAAAAAAJaPPf+9tFr/mJE+/7GsUv/Rymr/0cpq/9HKav/Rymr/0cpq/9HKav+xrFL/nplD/8vDZf+emUP/AAAAAAAAAACWjz3/op5G/9HKav/Rymr/0cpq/9HKav/Rymr/0cpq/9HKav/Rymr/0cpq/9HKav+inkb/nplD/wAAAAAAAAAAAAAAAKKeRv+3slb/0cpq/9HKav/Rymr/0cpq/9HKav/Rymr/0cpq/9HKav+1sFX/op5G/wAAAAAAAAAAAAAAAAAAAAAAAAAAop5GUKKeRv/Nxmf/0cpq/9HKav/Rymr/0cpq/83GZ/+inkb/op5GSAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAop5G16KeRv/LxWb/y8Vm/6KeRv+inkaPAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAop5G/6KeRtcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/n8AAPgfAADwDwAAwAMAAIABAACAAQAAgAEAAIABAACAAQAAgAEAAIABAACAAQAAwAMAAPAPAAD4HwAA/n8AAA==') no-repeat center/contain; display: inline-block; }
194
- `;
195
- return `<!DOCTYPE html>
196
- <html lang="en">
197
- <head>
198
- <meta charset="utf-8">
199
- <meta name="description" content="Content-addressed dag-cbor document hosted on IPFS.">
200
- <meta name="viewport" content="width=device-width, initial-scale=1.0">
201
- <link rel="shortcut icon" href="data:image/x-icon;base64,AAABAAEAEBAAAAEAIABoBAAAFgAAACgAAAAQAAAAIAAAAAEAIAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAlo89/56ZQ/8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACUjDu1lo89/6mhTP+zrVP/nplD/5+aRK8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHNiIS6Wjz3/ubFY/761W/+vp1D/urRZ/8vDZf/GvmH/nplD/1BNIm8AAAAAAAAAAAAAAAAAAAAAAAAAAJaPPf+knEj/vrVb/761W/++tVv/r6dQ/7q0Wf/Lw2X/y8Nl/8vDZf+tpk7/nplD/wAAAAAAAAAAAAAAAJaPPf+2rVX/vrVb/761W/++tVv/vrVb/6+nUP+6tFn/y8Nl/8vDZf/Lw2X/y8Nl/8G6Xv+emUP/AAAAAAAAAACWjz3/vrVb/761W/++tVv/vrVb/761W/+vp1D/urRZ/8vDZf/Lw2X/y8Nl/8vDZf/Lw2X/nplD/wAAAAAAAAAAlo89/761W/++tVv/vrVb/761W/++tVv/r6dQ/7q0Wf/Lw2X/y8Nl/8vDZf/Lw2X/y8Nl/56ZQ/8AAAAAAAAAAJaPPf++tVv/vrVb/761W/++tVv/vbRa/5aPPf+emUP/y8Nl/8vDZf/Lw2X/y8Nl/8vDZf+emUP/AAAAAAAAAACWjz3/vrVb/761W/++tVv/vrVb/5qTQP+inkb/op5G/6KdRv/Lw2X/y8Nl/8vDZf/Lw2X/nplD/wAAAAAAAAAAlo89/761W/++tVv/sqlS/56ZQ//LxWb/0Mlp/9DJaf/Kw2X/oJtE/7+3XP/Lw2X/y8Nl/56ZQ/8AAAAAAAAAAJaPPf+9tFr/mJE+/7GsUv/Rymr/0cpq/9HKav/Rymr/0cpq/9HKav+xrFL/nplD/8vDZf+emUP/AAAAAAAAAACWjz3/op5G/9HKav/Rymr/0cpq/9HKav/Rymr/0cpq/9HKav/Rymr/0cpq/9HKav+inkb/nplD/wAAAAAAAAAAAAAAAKKeRv+3slb/0cpq/9HKav/Rymr/0cpq/9HKav/Rymr/0cpq/9HKav+1sFX/op5G/wAAAAAAAAAAAAAAAAAAAAAAAAAAop5GUKKeRv/Nxmf/0cpq/9HKav/Rymr/0cpq/83GZ/+inkb/op5GSAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAop5G16KeRv/LxWb/y8Vm/6KeRv+inkaPAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAop5G/6KeRtcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/n8AAPgfAADwDwAAwAMAAIABAACAAQAAgAEAAIABAACAAQAAgAEAAIABAACAAQAAwAMAAPAPAAD4HwAA/n8AAA==">
202
- <title>${cid.toString()} DAG-CBOR Preview</title>
203
- <style>${style}</style>
204
- </head>
205
- <body>
206
- <main>
207
- <header>
208
- <div><strong>CID: </strong> <code class="nowrap">${cid}</code></div>
209
- <div><strong>Codec: </strong> ${this.valueHTML('dag-cbor (0x71)', [])}</div>
210
- </header>
211
- <section class="container">
212
- <p>You can download this block as:</p>
213
- <ul>
214
- <li><a href="?format=raw&download=true&filename=${cid.toString()}.bin" rel="nofollow" download="${cid.toString()}.bin">Raw Block</a> (no conversion)</li>
215
- <li><a href="?format=dag-json&download=true&filename=${cid.toString()}.json" rel="nofollow" download="${cid.toString()}">Valid DAG-JSON</a> (specs at <a href="https://ipld.io/specs/codecs/dag-json/spec/" target="_blank" rel="noopener noreferrer">IPLD</a> and <a href="https://www.iana.org/assignments/media-types/application/vnd.ipld.dag-json" target="_blank" rel="noopener noreferrer">IANA</a>)</li>
216
- <li><a href="?format=dag-cbor&download=true&filename=${cid.toString()}.dag-cbor" rel="nofollow" download="${cid.toString()}.dag-cbor">Valid DAG-CBOR</a> (specs at <a href="https://ipld.io/specs/codecs/dag-cbor/spec/" target="_blank" rel="noopener noreferrer">IPLD</a> and <a href="https://www.iana.org/assignments/media-types/application/vnd.ipld.dag-cbor" target="_blank" rel="noopener noreferrer">IANA</a>)</li>
217
- </ul>
218
- </section>
219
- <section>
220
- <header><strong>DAG-CBOR Preview</strong></header>
221
- <div class="grid dag">
222
- ${this.renderRows(obj, path)}
223
- </div>
224
- </section>
225
- </main>
226
- </body>
227
- </html>`;
228
- }
229
- valueHTML(value, link) {
230
- let valueString;
231
- const isALinkObject = isLink(value);
232
- if (!isALinkObject && typeof value !== 'string') {
233
- valueString = JSON.stringify(value);
234
- }
235
- else {
236
- // it can be a string or a link object.. call .toString() on it
237
- valueString = value.toString();
238
- }
239
- const valueCodeBlock = `<code class="nowrap">${valueString}</code>`;
240
- if (isALinkObject && link != null) {
241
- return `<a class="ipfs-hash" href="/${link}">${valueCodeBlock}</a>`;
242
- }
243
- return valueCodeBlock;
244
- }
245
- renderValue(key, value, currentPath) {
246
- let rows = '';
247
- value.forEach((item, idx) => {
248
- const itemPath = [...currentPath, key, idx.toString()];
249
- rows += `<div>${this.valueHTML(idx, [])}</div>`;
250
- if (isPrimitive(item)) {
251
- rows += `<div>${this.valueHTML(item, itemPath)}</div>`;
252
- }
253
- else {
254
- rows += '<div class="grid dag">';
255
- rows += this.renderRows(item, itemPath);
256
- rows += '</div>';
257
- }
258
- });
259
- return rows;
260
- }
261
- renderRows(obj, currentPath = []) {
262
- let rows = '';
263
- for (const [key, value] of Object.entries(obj)) {
264
- if (Array.isArray(value)) {
265
- rows += `<div>${key}</div>`;
266
- rows += '<div class="grid dag">';
267
- rows += this.renderValue(key, value, currentPath);
268
- rows += '</div>';
269
- }
270
- else {
271
- const valuePath = [...currentPath, key];
272
- rows += `<div>${key}</div><div>${this.valueHTML(value, valuePath)}</div>`;
273
- }
274
- }
275
- return rows;
276
- }
277
- }
278
- export const dagCborHtmlPreviewPluginFactory = (opts) => new DagCborHtmlPreviewPlugin(opts);
279
- //# sourceMappingURL=plugin-handle-dag-cbor-html-preview.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"plugin-handle-dag-cbor-html-preview.js","sourceRoot":"","sources":["../../../src/plugins/plugin-handle-dag-cbor-html-preview.ts"],"names":[],"mappings":"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"}
@@ -1,17 +0,0 @@
1
- import { BasePlugin } from './plugin-base.js';
2
- import type { PluginContext } from './types.js';
3
- import type { ObjectNode } from 'ipfs-unixfs-exporter';
4
- /**
5
- * Handles `dag-cbor` content, including requests with Accept: `application/vnd.ipld.dag-json` and `application/json`.
6
- */
7
- export declare class DagCborPlugin extends BasePlugin {
8
- readonly id = "dag-cbor-plugin";
9
- readonly codes: 113[];
10
- canHandle({ cid, accept, pathDetails, byteRangeContext, plugins }: PluginContext): boolean;
11
- handle(context: PluginContext & Required<Pick<PluginContext, 'byteRangeContext' | 'pathDetails'>> & {
12
- pathDetails: {
13
- terminalElement: ObjectNode;
14
- };
15
- }): Promise<Response>;
16
- }
17
- //# sourceMappingURL=plugin-handle-dag-cbor.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"plugin-handle-dag-cbor.d.ts","sourceRoot":"","sources":["../../../src/plugins/plugin-handle-dag-cbor.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAA;AAC7C,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,YAAY,CAAA;AAC/C,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAA;AAEtD;;GAEG;AACH,qBAAa,aAAc,SAAQ,UAAU;IAC3C,QAAQ,CAAC,EAAE,qBAAoB;IAC/B,QAAQ,CAAC,KAAK,QAAqB;IAEnC,SAAS,CAAE,EAAE,GAAG,EAAE,MAAM,EAAE,WAAW,EAAE,gBAAgB,EAAE,OAAO,EAAE,EAAE,aAAa,GAAG,OAAO;IAyBrF,MAAM,CAAE,OAAO,EAAE,aAAa,GAAG,QAAQ,CAAC,IAAI,CAAC,aAAa,EAAE,kBAAkB,GAAG,aAAa,CAAC,CAAC,GAAG;QAAE,WAAW,EAAE;YAAE,eAAe,EAAE,UAAU,CAAA;SAAE,CAAA;KAAE,GAAG,OAAO,CAAC,QAAQ,CAAC;CAyChL"}
@@ -1,66 +0,0 @@
1
- import * as ipldDagCbor from '@ipld/dag-cbor';
2
- import { dagCborToSafeJSON } from "../utils/dag-cbor-to-safe-json.js";
3
- import { setIpfsRoots } from '../utils/response-headers.js';
4
- import { notAcceptableResponse, okRangeResponse } from '../utils/responses.js';
5
- import { isObjectNode } from '../utils/walk-path.js';
6
- import { BasePlugin } from './plugin-base.js';
7
- /**
8
- * Handles `dag-cbor` content, including requests with Accept: `application/vnd.ipld.dag-json` and `application/json`.
9
- */
10
- export class DagCborPlugin extends BasePlugin {
11
- id = 'dag-cbor-plugin';
12
- codes = [ipldDagCbor.code];
13
- canHandle({ cid, accept, pathDetails, byteRangeContext, plugins }) {
14
- if (pathDetails == null) {
15
- return false;
16
- }
17
- if (!isObjectNode(pathDetails.terminalElement)) {
18
- return false;
19
- }
20
- if (cid.code !== ipldDagCbor.code) {
21
- return false;
22
- }
23
- if (byteRangeContext == null) {
24
- return false;
25
- }
26
- if (accept != null && accept.mimeType === 'text/html' && plugins.includes('dag-cbor-plugin-html-preview')) {
27
- // let the dag-cbor-html-preview plugin handle it
28
- return false;
29
- }
30
- return isObjectNode(pathDetails.terminalElement);
31
- }
32
- async handle(context) {
33
- const { cid, path, resource, accept, pathDetails: { terminalElement, ipfsRoots } } = context;
34
- this.log.trace('fetching %c/%s with accept header %s', cid, path.join('/'), accept?.mimeType);
35
- const block = terminalElement.node;
36
- let responseContentType = 'application/cbor';
37
- let body = block;
38
- if (accept?.mimeType === 'application/json' || accept?.mimeType === 'application/vnd.ipld.dag-json') {
39
- try {
40
- // if vnd.ipld.dag-json has been specified, convert to the format - note
41
- // that this supports more data types than regular JSON
42
- body = dagCborToSafeJSON(body);
43
- responseContentType = accept.mimeType;
44
- }
45
- catch (err) {
46
- this.log.error('could not decode CBOR as JSON-safe - %e', err);
47
- return notAcceptableResponse(resource);
48
- }
49
- }
50
- else if (accept?.mimeType === 'application/octet-stream' || accept?.mimeType === 'application/vnd.ipld.raw' || accept?.mimeType === 'application/vnd.ipld.dag-cbor') {
51
- responseContentType = accept.mimeType;
52
- }
53
- context.byteRangeContext.setBody(body);
54
- // const responseContentType = accept?.mimeType ?? (body instanceof Uint8Array ? 'application/octet-stream' : 'application/json')
55
- const response = okRangeResponse(resource, context.byteRangeContext.getBody(responseContentType), { byteRangeContext: context.byteRangeContext, log: this.log });
56
- response.headers.set('content-type', context.byteRangeContext.getContentType() ?? responseContentType);
57
- if (responseContentType !== 'application/json') {
58
- context.query.download = true;
59
- context.query.filename ??= `${cid}.cbor`;
60
- }
61
- this.log.trace('setting content type to "%s"', context.byteRangeContext.getContentType() ?? responseContentType);
62
- setIpfsRoots(response, ipfsRoots);
63
- return response;
64
- }
65
- }
66
- //# sourceMappingURL=plugin-handle-dag-cbor.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"plugin-handle-dag-cbor.js","sourceRoot":"","sources":["../../../src/plugins/plugin-handle-dag-cbor.ts"],"names":[],"mappings":"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"}
@@ -1,17 +0,0 @@
1
- import { BasePlugin } from './plugin-base.js';
2
- import type { PluginContext } from './types.js';
3
- /**
4
- * Handles UnixFS and dag-pb content.
5
- */
6
- export declare class DagPbPlugin extends BasePlugin {
7
- readonly id = "dag-pb-plugin";
8
- readonly codes: 112[];
9
- canHandle({ cid, accept, pathDetails, byteRangeContext }: PluginContext): boolean;
10
- /**
11
- * @see https://specs.ipfs.tech/http-gateways/path-gateway/#use-in-directory-url-normalization
12
- */
13
- getRedirectUrl(context: PluginContext): string | null;
14
- handle(context: PluginContext & Required<Pick<PluginContext, 'byteRangeContext' | 'pathDetails'>>): Promise<Response | null>;
15
- private handleRangeRequest;
16
- }
17
- //# sourceMappingURL=plugin-handle-dag-pb.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"plugin-handle-dag-pb.d.ts","sourceRoot":"","sources":["../../../src/plugins/plugin-handle-dag-pb.ts"],"names":[],"mappings":"AASA,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAA;AAC7C,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,YAAY,CAAA;AAI/C;;GAEG;AACH,qBAAa,WAAY,SAAQ,UAAU;IACzC,QAAQ,CAAC,EAAE,mBAAkB;IAC7B,QAAQ,CAAC,KAAK,QAAc;IAE5B,SAAS,CAAE,EAAE,GAAG,EAAE,MAAM,EAAE,WAAW,EAAE,gBAAgB,EAAE,EAAE,aAAa,GAAG,OAAO;IAiBlF;;OAEG;IACH,cAAc,CAAE,OAAO,EAAE,aAAa,GAAG,MAAM,GAAG,IAAI;IAuBhD,MAAM,CAAE,OAAO,EAAE,aAAa,GAAG,QAAQ,CAAC,IAAI,CAAC,aAAa,EAAE,kBAAkB,GAAG,aAAa,CAAC,CAAC,GAAG,OAAO,CAAC,QAAQ,GAAG,IAAI,CAAC;YAqJrH,kBAAkB;CAkCjC"}