@nitpicker/archive 0.0.0-stage → 0.25.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 (737) hide show
  1. package/LICENSE +191 -0
  2. package/README.md +105 -2
  3. package/lib/apply-connection-pragmas.d.ts +18 -0
  4. package/lib/apply-connection-pragmas.js +40 -0
  5. package/lib/archive-accessor.d.ts +265 -0
  6. package/lib/archive-accessor.js +477 -0
  7. package/lib/archive-lock.d.ts +45 -0
  8. package/lib/archive-lock.js +154 -0
  9. package/lib/archive.d.ts +736 -0
  10. package/lib/archive.js +1056 -0
  11. package/lib/body-hash/compute-body-hash.d.ts +32 -0
  12. package/lib/body-hash/compute-body-hash.js +35 -0
  13. package/lib/cache/clear-archive-cache-entry.d.ts +18 -0
  14. package/lib/cache/clear-archive-cache-entry.js +24 -0
  15. package/lib/cache/clear-archive-cache-root.d.ts +26 -0
  16. package/lib/cache/clear-archive-cache-root.js +32 -0
  17. package/lib/cache/compute-archive-cache-key.d.ts +39 -0
  18. package/lib/cache/compute-archive-cache-key.js +95 -0
  19. package/lib/cache/extract-archive-to-cache.d.ts +57 -0
  20. package/lib/cache/extract-archive-to-cache.js +326 -0
  21. package/lib/cache/get-archive-cache-root.d.ts +20 -0
  22. package/lib/cache/get-archive-cache-root.js +53 -0
  23. package/lib/cache/is-archive-cache-disabled.d.ts +24 -0
  24. package/lib/cache/is-archive-cache-disabled.js +34 -0
  25. package/lib/cache/list-archive-cache-entries.d.ts +23 -0
  26. package/lib/cache/list-archive-cache-entries.js +130 -0
  27. package/lib/cache/path-exists.d.ts +9 -0
  28. package/lib/cache/path-exists.js +18 -0
  29. package/lib/cache/resolve-archive-cache-dir.d.ts +26 -0
  30. package/lib/cache/resolve-archive-cache-dir.js +32 -0
  31. package/lib/cache/types.d.ts +33 -0
  32. package/lib/cache/types.js +1 -0
  33. package/lib/content-type/is-html-content-type.d.ts +17 -0
  34. package/lib/content-type/is-html-content-type.js +19 -0
  35. package/lib/content-type/normalize-content-type.d.ts +14 -0
  36. package/lib/content-type/normalize-content-type.js +20 -0
  37. package/lib/create-adjunct-tables.d.ts +66 -0
  38. package/lib/create-adjunct-tables.js +510 -0
  39. package/lib/create-entity-tables.d.ts +191 -0
  40. package/lib/create-entity-tables.js +387 -0
  41. package/lib/create-progress-reporter.d.ts +30 -0
  42. package/lib/create-progress-reporter.js +38 -0
  43. package/lib/create-ref-tables.d.ts +35 -0
  44. package/lib/create-ref-tables.js +185 -0
  45. package/lib/create-template-tables.d.ts +28 -0
  46. package/lib/create-template-tables.js +92 -0
  47. package/lib/database.d.ts +549 -0
  48. package/lib/database.js +804 -0
  49. package/lib/db-ops/_shared/clear-write-ref-caches.d.ts +27 -0
  50. package/lib/db-ops/_shared/clear-write-ref-caches.js +35 -0
  51. package/lib/db-ops/_shared/compress-payload.d.ts +26 -0
  52. package/lib/db-ops/_shared/compress-payload.js +30 -0
  53. package/lib/db-ops/_shared/create-write-ref-caches.d.ts +17 -0
  54. package/lib/db-ops/_shared/create-write-ref-caches.js +27 -0
  55. package/lib/db-ops/_shared/decode-json-ref.d.ts +17 -0
  56. package/lib/db-ops/_shared/decode-json-ref.js +31 -0
  57. package/lib/db-ops/_shared/keyset-paginate-by-id.d.ts +49 -0
  58. package/lib/db-ops/_shared/keyset-paginate-by-id.js +69 -0
  59. package/lib/db-ops/_shared/load-response-headers-by-set-ids.d.ts +20 -0
  60. package/lib/db-ops/_shared/load-response-headers-by-set-ids.js +53 -0
  61. package/lib/db-ops/_shared/resolve-content-item-id.d.ts +62 -0
  62. package/lib/db-ops/_shared/resolve-content-item-id.js +143 -0
  63. package/lib/db-ops/_shared/resolve-url-or-blob.d.ts +23 -0
  64. package/lib/db-ops/_shared/resolve-url-or-blob.js +29 -0
  65. package/lib/db-ops/_shared/retry-setting.d.ts +16 -0
  66. package/lib/db-ops/_shared/retry-setting.js +18 -0
  67. package/lib/db-ops/_shared/safe-parse-json.d.ts +11 -0
  68. package/lib/db-ops/_shared/safe-parse-json.js +18 -0
  69. package/lib/db-ops/_shared/types.d.ts +94 -0
  70. package/lib/db-ops/_shared/types.js +1 -0
  71. package/lib/db-ops/_shared/upsert-blob-ref.d.ts +25 -0
  72. package/lib/db-ops/_shared/upsert-blob-ref.js +48 -0
  73. package/lib/db-ops/_shared/upsert-content-type-ref.d.ts +30 -0
  74. package/lib/db-ops/_shared/upsert-content-type-ref.js +45 -0
  75. package/lib/db-ops/_shared/upsert-json-ref.d.ts +22 -0
  76. package/lib/db-ops/_shared/upsert-json-ref.js +41 -0
  77. package/lib/db-ops/_shared/upsert-response-headers.d.ts +35 -0
  78. package/lib/db-ops/_shared/upsert-response-headers.js +49 -0
  79. package/lib/db-ops/_shared/upsert-url-ref.d.ts +39 -0
  80. package/lib/db-ops/_shared/upsert-url-ref.js +62 -0
  81. package/lib/db-ops/anchors/get-anchors-on-page.d.ts +10 -0
  82. package/lib/db-ops/anchors/get-anchors-on-page.js +21 -0
  83. package/lib/db-ops/config/get-base-url.d.ts +8 -0
  84. package/lib/db-ops/config/get-base-url.js +14 -0
  85. package/lib/db-ops/config/get-config.d.ts +10 -0
  86. package/lib/db-ops/config/get-config.js +29 -0
  87. package/lib/db-ops/config/get-created-cwd.d.ts +11 -0
  88. package/lib/db-ops/config/get-created-cwd.js +13 -0
  89. package/lib/db-ops/config/get-name.d.ts +8 -0
  90. package/lib/db-ops/config/get-name.js +14 -0
  91. package/lib/db-ops/config/info-column-allowlist.d.ts +7 -0
  92. package/lib/db-ops/config/info-column-allowlist.js +29 -0
  93. package/lib/db-ops/config/info-json-columns.d.ts +5 -0
  94. package/lib/db-ops/config/info-json-columns.js +11 -0
  95. package/lib/db-ops/config/set-config.d.ts +12 -0
  96. package/lib/db-ops/config/set-config.js +21 -0
  97. package/lib/db-ops/config/update-config.d.ts +17 -0
  98. package/lib/db-ops/config/update-config.js +36 -0
  99. package/lib/db-ops/console-logs/compute-console-log-hash.d.ts +19 -0
  100. package/lib/db-ops/console-logs/compute-console-log-hash.js +30 -0
  101. package/lib/db-ops/console-logs/replace-console-logs.d.ts +34 -0
  102. package/lib/db-ops/console-logs/replace-console-logs.js +123 -0
  103. package/lib/db-ops/console-logs/stringify-console-log-args.d.ts +16 -0
  104. package/lib/db-ops/console-logs/stringify-console-log-args.js +26 -0
  105. package/lib/db-ops/console-logs/types.d.ts +38 -0
  106. package/lib/db-ops/console-logs/types.js +1 -0
  107. package/lib/db-ops/console-logs/upsert-console-log-item.d.ts +29 -0
  108. package/lib/db-ops/console-logs/upsert-console-log-item.js +52 -0
  109. package/lib/db-ops/dedupe-cap/accumulate-dedupe-cap-rejected-count.d.ts +18 -0
  110. package/lib/db-ops/dedupe-cap/accumulate-dedupe-cap-rejected-count.js +23 -0
  111. package/lib/db-ops/dedupe-cap/finalize-dedupe-cap-event.d.ts +12 -0
  112. package/lib/db-ops/dedupe-cap/finalize-dedupe-cap-event.js +15 -0
  113. package/lib/db-ops/dedupe-cap/insert-dedupe-cap-event.d.ts +14 -0
  114. package/lib/db-ops/dedupe-cap/insert-dedupe-cap-event.js +30 -0
  115. package/lib/db-ops/dedupe-cap/list-dedupe-cap-observations.d.ts +57 -0
  116. package/lib/db-ops/dedupe-cap/list-dedupe-cap-observations.js +87 -0
  117. package/lib/db-ops/dedupe-cap/list-dedupe-cap-shape-keys.d.ts +21 -0
  118. package/lib/db-ops/dedupe-cap/list-dedupe-cap-shape-keys.js +27 -0
  119. package/lib/db-ops/errors/insert-crawl-error.d.ts +15 -0
  120. package/lib/db-ops/errors/insert-crawl-error.js +21 -0
  121. package/lib/db-ops/errors/insert-page-error.d.ts +21 -0
  122. package/lib/db-ops/errors/insert-page-error.js +30 -0
  123. package/lib/db-ops/errors/list-dns-burned-host-candidates.d.ts +33 -0
  124. package/lib/db-ops/errors/list-dns-burned-host-candidates.js +158 -0
  125. package/lib/db-ops/html/read-page-html-blob.d.ts +17 -0
  126. package/lib/db-ops/html/read-page-html-blob.js +20 -0
  127. package/lib/db-ops/lifecycle/checkpoint.d.ts +8 -0
  128. package/lib/db-ops/lifecycle/checkpoint.js +9 -0
  129. package/lib/db-ops/lifecycle/destroy.d.ts +6 -0
  130. package/lib/db-ops/lifecycle/destroy.js +7 -0
  131. package/lib/db-ops/lifecycle/init.d.ts +58 -0
  132. package/lib/db-ops/lifecycle/init.js +122 -0
  133. package/lib/db-ops/list-reconcile/record-list-reconcile-run.d.ts +22 -0
  134. package/lib/db-ops/list-reconcile/record-list-reconcile-run.js +41 -0
  135. package/lib/db-ops/meta/get-audios-of-page.d.ts +11 -0
  136. package/lib/db-ops/meta/get-audios-of-page.js +15 -0
  137. package/lib/db-ops/meta/get-buttons-of-page.d.ts +11 -0
  138. package/lib/db-ops/meta/get-buttons-of-page.js +15 -0
  139. package/lib/db-ops/meta/get-canvases-of-page.d.ts +11 -0
  140. package/lib/db-ops/meta/get-canvases-of-page.js +15 -0
  141. package/lib/db-ops/meta/get-custom-elements-of-page.d.ts +11 -0
  142. package/lib/db-ops/meta/get-custom-elements-of-page.js +15 -0
  143. package/lib/db-ops/meta/get-headings-of-page.d.ts +11 -0
  144. package/lib/db-ops/meta/get-headings-of-page.js +15 -0
  145. package/lib/db-ops/meta/get-iframes-of-page.d.ts +11 -0
  146. package/lib/db-ops/meta/get-iframes-of-page.js +15 -0
  147. package/lib/db-ops/meta/get-jsonld-of-page.d.ts +13 -0
  148. package/lib/db-ops/meta/get-jsonld-of-page.js +27 -0
  149. package/lib/db-ops/meta/get-main-content-images-of-page.d.ts +11 -0
  150. package/lib/db-ops/meta/get-main-content-images-of-page.js +15 -0
  151. package/lib/db-ops/meta/get-main-content-tables-of-page.d.ts +11 -0
  152. package/lib/db-ops/meta/get-main-content-tables-of-page.js +15 -0
  153. package/lib/db-ops/meta/get-page-technologies-of-page.d.ts +11 -0
  154. package/lib/db-ops/meta/get-page-technologies-of-page.js +15 -0
  155. package/lib/db-ops/meta/get-technology-signals-of-page.d.ts +11 -0
  156. package/lib/db-ops/meta/get-technology-signals-of-page.js +15 -0
  157. package/lib/db-ops/meta/get-videos-of-page.d.ts +11 -0
  158. package/lib/db-ops/meta/get-videos-of-page.js +15 -0
  159. package/lib/db-ops/outages/close-network-outage.d.ts +12 -0
  160. package/lib/db-ops/outages/close-network-outage.js +15 -0
  161. package/lib/db-ops/outages/close-stale-open-network-outages.d.ts +26 -0
  162. package/lib/db-ops/outages/close-stale-open-network-outages.js +42 -0
  163. package/lib/db-ops/outages/compute-outage-clamp-timestamp.d.ts +26 -0
  164. package/lib/db-ops/outages/compute-outage-clamp-timestamp.js +31 -0
  165. package/lib/db-ops/outages/insert-network-outage.d.ts +14 -0
  166. package/lib/db-ops/outages/insert-network-outage.js +29 -0
  167. package/lib/db-ops/outages/list-network-outages.d.ts +28 -0
  168. package/lib/db-ops/outages/list-network-outages.js +42 -0
  169. package/lib/db-ops/pages/order/set-url-order.d.ts +13 -0
  170. package/lib/db-ops/pages/order/set-url-order.js +38 -0
  171. package/lib/db-ops/pages/read/build-page-query.d.ts +18 -0
  172. package/lib/db-ops/pages/read/build-page-query.js +40 -0
  173. package/lib/db-ops/pages/read/get-crawling-state.d.ts +117 -0
  174. package/lib/db-ops/pages/read/get-crawling-state.js +161 -0
  175. package/lib/db-ops/pages/read/get-existing-page-urls.d.ts +15 -0
  176. package/lib/db-ops/pages/read/get-existing-page-urls.js +30 -0
  177. package/lib/db-ops/pages/read/get-page-count.d.ts +12 -0
  178. package/lib/db-ops/pages/read/get-page-count.js +21 -0
  179. package/lib/db-ops/pages/read/get-page-source-by-url.d.ts +24 -0
  180. package/lib/db-ops/pages/read/get-page-source-by-url.js +28 -0
  181. package/lib/db-ops/pages/read/get-pages-with-rels.d.ts +38 -0
  182. package/lib/db-ops/pages/read/get-pages-with-rels.js +107 -0
  183. package/lib/db-ops/pages/read/get-pages.d.ts +11 -0
  184. package/lib/db-ops/pages/read/get-pages.js +51 -0
  185. package/lib/db-ops/pages/read/get-scraped-html-page-count.d.ts +18 -0
  186. package/lib/db-ops/pages/read/get-scraped-html-page-count.js +25 -0
  187. package/lib/db-ops/pages/read/reconstruct-page-rows.d.ts +31 -0
  188. package/lib/db-ops/pages/read/reconstruct-page-rows.js +32 -0
  189. package/lib/db-ops/pages/reset/clear-page-derived-rows.d.ts +20 -0
  190. package/lib/db-ops/pages/reset/clear-page-derived-rows.js +37 -0
  191. package/lib/db-ops/pages/reset/repromote-external-pages.d.ts +30 -0
  192. package/lib/db-ops/pages/reset/repromote-external-pages.js +91 -0
  193. package/lib/db-ops/pages/reset/reset-failed-pages.d.ts +88 -0
  194. package/lib/db-ops/pages/reset/reset-failed-pages.js +216 -0
  195. package/lib/db-ops/pages/reset/reset-pages-by-urls.d.ts +80 -0
  196. package/lib/db-ops/pages/reset/reset-pages-by-urls.js +151 -0
  197. package/lib/db-ops/pages/reset/retryable-image-scan-codes.d.ts +24 -0
  198. package/lib/db-ops/pages/reset/retryable-image-scan-codes.js +24 -0
  199. package/lib/db-ops/pages/write/insert-audios.d.ts +14 -0
  200. package/lib/db-ops/pages/write/insert-audios.js +25 -0
  201. package/lib/db-ops/pages/write/insert-buttons.d.ts +14 -0
  202. package/lib/db-ops/pages/write/insert-buttons.js +29 -0
  203. package/lib/db-ops/pages/write/insert-canvases.d.ts +14 -0
  204. package/lib/db-ops/pages/write/insert-canvases.js +26 -0
  205. package/lib/db-ops/pages/write/insert-custom-elements.d.ts +27 -0
  206. package/lib/db-ops/pages/write/insert-custom-elements.js +40 -0
  207. package/lib/db-ops/pages/write/insert-headings.d.ts +15 -0
  208. package/lib/db-ops/pages/write/insert-headings.js +27 -0
  209. package/lib/db-ops/pages/write/insert-iframes.d.ts +14 -0
  210. package/lib/db-ops/pages/write/insert-iframes.js +28 -0
  211. package/lib/db-ops/pages/write/insert-inventory-content-items.d.ts +38 -0
  212. package/lib/db-ops/pages/write/insert-inventory-content-items.js +60 -0
  213. package/lib/db-ops/pages/write/insert-inventory-seeds.d.ts +36 -0
  214. package/lib/db-ops/pages/write/insert-inventory-seeds.js +48 -0
  215. package/lib/db-ops/pages/write/insert-inventory-skipped-pages.d.ts +42 -0
  216. package/lib/db-ops/pages/write/insert-inventory-skipped-pages.js +56 -0
  217. package/lib/db-ops/pages/write/insert-jsonld.d.ts +17 -0
  218. package/lib/db-ops/pages/write/insert-jsonld.js +49 -0
  219. package/lib/db-ops/pages/write/insert-main-content-images.d.ts +20 -0
  220. package/lib/db-ops/pages/write/insert-main-content-images.js +32 -0
  221. package/lib/db-ops/pages/write/insert-main-content-tables.d.ts +14 -0
  222. package/lib/db-ops/pages/write/insert-main-content-tables.js +29 -0
  223. package/lib/db-ops/pages/write/insert-page.d.ts +56 -0
  224. package/lib/db-ops/pages/write/insert-page.js +259 -0
  225. package/lib/db-ops/pages/write/insert-technologies.d.ts +25 -0
  226. package/lib/db-ops/pages/write/insert-technologies.js +45 -0
  227. package/lib/db-ops/pages/write/insert-videos.d.ts +14 -0
  228. package/lib/db-ops/pages/write/insert-videos.js +28 -0
  229. package/lib/db-ops/pages/write/link-redirect-sources.d.ts +42 -0
  230. package/lib/db-ops/pages/write/link-redirect-sources.js +101 -0
  231. package/lib/db-ops/pages/write/record-redirect.d.ts +35 -0
  232. package/lib/db-ops/pages/write/record-redirect.js +100 -0
  233. package/lib/db-ops/pages/write/set-skipped-page.d.ts +13 -0
  234. package/lib/db-ops/pages/write/set-skipped-page.js +24 -0
  235. package/lib/db-ops/pages/write/update-page.d.ts +40 -0
  236. package/lib/db-ops/pages/write/update-page.js +419 -0
  237. package/lib/db-ops/pages/write/write-page-html-blob.d.ts +19 -0
  238. package/lib/db-ops/pages/write/write-page-html-blob.js +41 -0
  239. package/lib/db-ops/referrers/get-redirects-for-pages.d.ts +9 -0
  240. package/lib/db-ops/referrers/get-redirects-for-pages.js +15 -0
  241. package/lib/db-ops/referrers/get-referrers-of-page.d.ts +17 -0
  242. package/lib/db-ops/referrers/get-referrers-of-page.js +32 -0
  243. package/lib/db-ops/referrers/get-referrers-of-resource.d.ts +8 -0
  244. package/lib/db-ops/referrers/get-referrers-of-resource.js +15 -0
  245. package/lib/db-ops/resources/build-resource-query.d.ts +25 -0
  246. package/lib/db-ops/resources/build-resource-query.js +29 -0
  247. package/lib/db-ops/resources/get-existing-resource-urls.d.ts +9 -0
  248. package/lib/db-ops/resources/get-existing-resource-urls.js +24 -0
  249. package/lib/db-ops/resources/get-resource-by-url.d.ts +13 -0
  250. package/lib/db-ops/resources/get-resource-by-url.js +22 -0
  251. package/lib/db-ops/resources/get-resource-url-list.d.ts +17 -0
  252. package/lib/db-ops/resources/get-resource-url-list.js +26 -0
  253. package/lib/db-ops/resources/get-resources.d.ts +8 -0
  254. package/lib/db-ops/resources/get-resources.js +11 -0
  255. package/lib/db-ops/resources/insert-inventory-resources.d.ts +24 -0
  256. package/lib/db-ops/resources/insert-inventory-resources.js +64 -0
  257. package/lib/db-ops/resources/insert-resource-referrers.d.ts +15 -0
  258. package/lib/db-ops/resources/insert-resource-referrers.js +54 -0
  259. package/lib/db-ops/resources/insert-resource.d.ts +34 -0
  260. package/lib/db-ops/resources/insert-resource.js +73 -0
  261. package/lib/db-ops/resources/reconstruct-resource-rows.d.ts +26 -0
  262. package/lib/db-ops/resources/reconstruct-resource-rows.js +30 -0
  263. package/lib/db-ops/templates/assign-template-labels.d.ts +60 -0
  264. package/lib/db-ops/templates/assign-template-labels.js +187 -0
  265. package/lib/db-ops/templates/replace-page-templates.d.ts +44 -0
  266. package/lib/db-ops/templates/replace-page-templates.js +174 -0
  267. package/lib/db-ops/templates/serialize-template-cluster-reason.d.ts +16 -0
  268. package/lib/db-ops/templates/serialize-template-cluster-reason.js +17 -0
  269. package/lib/db-ops/templates/types.d.ts +103 -0
  270. package/lib/db-ops/templates/types.js +1 -0
  271. package/lib/debug.d.ts +8 -0
  272. package/lib/debug.js +9 -0
  273. package/lib/decode-html-blob.d.ts +20 -0
  274. package/lib/decode-html-blob.js +23 -0
  275. package/lib/decode-page-html-blob-bytes.d.ts +25 -0
  276. package/lib/decode-page-html-blob-bytes.js +29 -0
  277. package/lib/decode-stored-blob-bytes.d.ts +25 -0
  278. package/lib/decode-stored-blob-bytes.js +47 -0
  279. package/lib/derive-lineage-from-parent.d.ts +37 -0
  280. package/lib/derive-lineage-from-parent.js +42 -0
  281. package/lib/drop-legacy-tables.d.ts +45 -0
  282. package/lib/drop-legacy-tables.js +56 -0
  283. package/lib/error-kind/classify-error-kind.d.ts +20 -0
  284. package/lib/error-kind/classify-error-kind.js +136 -0
  285. package/lib/error-kind/network-related-error-kinds.d.ts +23 -0
  286. package/lib/error-kind/network-related-error-kinds.js +28 -0
  287. package/lib/error-kind/permanent-error-kinds.d.ts +48 -0
  288. package/lib/error-kind/permanent-error-kinds.js +54 -0
  289. package/lib/error-kind/types.d.ts +54 -0
  290. package/lib/error-kind/types.js +1 -0
  291. package/lib/filesystem/append-text.d.ts +9 -0
  292. package/lib/filesystem/append-text.js +14 -0
  293. package/lib/filesystem/copy-dir-sync.d.ts +6 -0
  294. package/lib/filesystem/copy-dir-sync.js +9 -0
  295. package/lib/filesystem/copy-dir.d.ts +7 -0
  296. package/lib/filesystem/copy-dir.js +13 -0
  297. package/lib/filesystem/copy-file-with-progress.d.ts +20 -0
  298. package/lib/filesystem/copy-file-with-progress.js +34 -0
  299. package/lib/filesystem/exists.d.ts +6 -0
  300. package/lib/filesystem/exists.js +9 -0
  301. package/lib/filesystem/get-file-list.d.ts +8 -0
  302. package/lib/filesystem/get-file-list.js +12 -0
  303. package/lib/filesystem/is-dir.d.ts +6 -0
  304. package/lib/filesystem/is-dir.js +10 -0
  305. package/lib/filesystem/mkdir.d.ts +8 -0
  306. package/lib/filesystem/mkdir.js +15 -0
  307. package/lib/filesystem/output-binary.d.ts +12 -0
  308. package/lib/filesystem/output-binary.js +17 -0
  309. package/lib/filesystem/output-json.d.ts +9 -0
  310. package/lib/filesystem/output-json.js +14 -0
  311. package/lib/filesystem/output-text.d.ts +11 -0
  312. package/lib/filesystem/output-text.js +32 -0
  313. package/lib/filesystem/parse-pax-path.d.ts +18 -0
  314. package/lib/filesystem/parse-pax-path.js +47 -0
  315. package/lib/filesystem/parse-tar-size-field.d.ts +13 -0
  316. package/lib/filesystem/parse-tar-size-field.js +40 -0
  317. package/lib/filesystem/peek-tar-top-dir.d.ts +35 -0
  318. package/lib/filesystem/peek-tar-top-dir.js +215 -0
  319. package/lib/filesystem/read-json.d.ts +7 -0
  320. package/lib/filesystem/read-json.js +11 -0
  321. package/lib/filesystem/read-text.d.ts +6 -0
  322. package/lib/filesystem/read-text.js +10 -0
  323. package/lib/filesystem/readline.d.ts +11 -0
  324. package/lib/filesystem/readline.js +26 -0
  325. package/lib/filesystem/remove.d.ts +5 -0
  326. package/lib/filesystem/remove.js +10 -0
  327. package/lib/filesystem/rename.d.ts +16 -0
  328. package/lib/filesystem/rename.js +48 -0
  329. package/lib/filesystem/tar.d.ts +23 -0
  330. package/lib/filesystem/tar.js +78 -0
  331. package/lib/filesystem/untar.d.ts +33 -0
  332. package/lib/filesystem/untar.js +84 -0
  333. package/lib/get-failed-page-messages.d.ts +56 -0
  334. package/lib/get-failed-page-messages.js +146 -0
  335. package/lib/get-json.d.ts +10 -0
  336. package/lib/get-json.js +25 -0
  337. package/lib/html-snapshot/match-selector-html.d.ts +25 -0
  338. package/lib/html-snapshot/match-selector-html.js +28 -0
  339. package/lib/html-snapshot/match-selector-snapshots.d.ts +33 -0
  340. package/lib/html-snapshot/match-selector-snapshots.js +33 -0
  341. package/lib/html-snapshot/search-html-document.d.ts +29 -0
  342. package/lib/html-snapshot/search-html-document.js +27 -0
  343. package/lib/html-snapshot/search-html-snapshots.d.ts +36 -0
  344. package/lib/html-snapshot/search-html-snapshots.js +35 -0
  345. package/lib/html-snapshot/types.d.ts +111 -0
  346. package/lib/html-snapshot/types.js +7 -0
  347. package/lib/html-snapshot/validate-search-pattern.d.ts +15 -0
  348. package/lib/html-snapshot/validate-search-pattern.js +17 -0
  349. package/lib/init-schema.d.ts +48 -0
  350. package/lib/init-schema.js +124 -0
  351. package/lib/is-inventory-source.d.ts +21 -0
  352. package/lib/is-inventory-source.js +22 -0
  353. package/lib/is-within-outage-window.d.ts +49 -0
  354. package/lib/is-within-outage-window.js +33 -0
  355. package/lib/isolated-cluster/create-isolated-cluster-run.d.ts +24 -0
  356. package/lib/isolated-cluster/create-isolated-cluster-run.js +26 -0
  357. package/lib/libsql-dialect.d.ts +115 -0
  358. package/lib/libsql-dialect.js +116 -0
  359. package/lib/limited-page-ids.d.ts +9 -0
  360. package/lib/limited-page-ids.js +18 -0
  361. package/lib/meta/assert-compatible-version.d.ts +60 -0
  362. package/lib/meta/assert-compatible-version.js +93 -0
  363. package/lib/meta/classify-jsonld-type.d.ts +23 -0
  364. package/lib/meta/classify-jsonld-type.js +43 -0
  365. package/lib/meta/compare-semver.d.ts +23 -0
  366. package/lib/meta/compare-semver.js +51 -0
  367. package/lib/meta/compute-main-contents-denormalized.d.ts +41 -0
  368. package/lib/meta/compute-main-contents-denormalized.js +88 -0
  369. package/lib/meta/compute-page-denormalized.d.ts +20 -0
  370. package/lib/meta/compute-page-denormalized.js +35 -0
  371. package/lib/meta/derive-flat-from-meta.d.ts +34 -0
  372. package/lib/meta/derive-flat-from-meta.js +158 -0
  373. package/lib/meta/derive-meta-extras.d.ts +20 -0
  374. package/lib/meta/derive-meta-extras.js +23 -0
  375. package/lib/meta/extract-tags-for-archive.d.ts +17 -0
  376. package/lib/meta/extract-tags-for-archive.js +36 -0
  377. package/lib/meta/parse-main-content-class-list.d.ts +19 -0
  378. package/lib/meta/parse-main-content-class-list.js +34 -0
  379. package/lib/meta/summarize-jsonld.d.ts +17 -0
  380. package/lib/meta/summarize-jsonld.js +29 -0
  381. package/lib/meta/technologies/combine-technology-confidence.d.ts +46 -0
  382. package/lib/meta/technologies/combine-technology-confidence.js +93 -0
  383. package/lib/meta/technologies/convert-legacy-page-tags-to-inserts.d.ts +45 -0
  384. package/lib/meta/technologies/convert-legacy-page-tags-to-inserts.js +53 -0
  385. package/lib/meta/technologies/convert-tag-row-to-wappalyzer-signal.d.ts +33 -0
  386. package/lib/meta/technologies/convert-tag-row-to-wappalyzer-signal.js +46 -0
  387. package/lib/meta/technologies/extract-technologies-for-archive.d.ts +33 -0
  388. package/lib/meta/technologies/extract-technologies-for-archive.js +30 -0
  389. package/lib/meta/technologies/match-js-license-comment-signal.d.ts +21 -0
  390. package/lib/meta/technologies/match-js-license-comment-signal.js +23 -0
  391. package/lib/meta/technologies/match-structural-technology-signals.d.ts +26 -0
  392. package/lib/meta/technologies/match-structural-technology-signals.js +48 -0
  393. package/lib/meta/technologies/normalize-wappalyzer-entries.d.ts +25 -0
  394. package/lib/meta/technologies/normalize-wappalyzer-entries.js +35 -0
  395. package/lib/meta/technologies/technology-signal-definitions.d.ts +44 -0
  396. package/lib/meta/technologies/technology-signal-definitions.js +60 -0
  397. package/lib/meta/technologies/types.d.ts +70 -0
  398. package/lib/meta/technologies/types.js +13 -0
  399. package/lib/meta/types.d.ts +1490 -0
  400. package/lib/meta/types.js +65 -0
  401. package/lib/migrate-content-items-alias-of-id.d.ts +52 -0
  402. package/lib/migrate-content-items-alias-of-id.js +69 -0
  403. package/lib/migrate-content-items-dedupe-cap-event-id.d.ts +46 -0
  404. package/lib/migrate-content-items-dedupe-cap-event-id.js +62 -0
  405. package/lib/migrate-content-items-is-metadata-only.d.ts +44 -0
  406. package/lib/migrate-content-items-is-metadata-only.js +60 -0
  407. package/lib/migrate-entity-tables.d.ts +55 -0
  408. package/lib/migrate-entity-tables.js +66 -0
  409. package/lib/migrate-info-created-cwd.d.ts +17 -0
  410. package/lib/migrate-info-created-cwd.js +36 -0
  411. package/lib/migrate-info-main-content-selector.d.ts +16 -0
  412. package/lib/migrate-info-main-content-selector.js +35 -0
  413. package/lib/migrate-info-request-header-names.d.ts +16 -0
  414. package/lib/migrate-info-request-header-names.js +35 -0
  415. package/lib/migrate-info-roots.d.ts +20 -0
  416. package/lib/migrate-info-roots.js +52 -0
  417. package/lib/migrate-inventory-runs-to-list-reconcile-runs.d.ts +34 -0
  418. package/lib/migrate-inventory-runs-to-list-reconcile-runs.js +51 -0
  419. package/lib/migrate-list-reconcile-runs-exclude-skipped.d.ts +25 -0
  420. package/lib/migrate-list-reconcile-runs-exclude-skipped.js +44 -0
  421. package/lib/migrate-list-reconcile-runs-invalid-skipped.d.ts +16 -0
  422. package/lib/migrate-list-reconcile-runs-invalid-skipped.js +35 -0
  423. package/lib/migrate-main-contents-columns.d.ts +26 -0
  424. package/lib/migrate-main-contents-columns.js +61 -0
  425. package/lib/migrate-page-meta-body-hash.d.ts +44 -0
  426. package/lib/migrate-page-meta-body-hash.js +63 -0
  427. package/lib/migrate-page-meta-console-error-count.d.ts +27 -0
  428. package/lib/migrate-page-meta-console-error-count.js +45 -0
  429. package/lib/migrate-page-meta-custom-element-count.d.ts +33 -0
  430. package/lib/migrate-page-meta-custom-element-count.js +51 -0
  431. package/lib/migrate-page-meta-image-scan.d.ts +27 -0
  432. package/lib/migrate-page-meta-image-scan.js +52 -0
  433. package/lib/migrate-page-tags-to-page-technologies.d.ts +39 -0
  434. package/lib/migrate-page-tags-to-page-technologies.js +79 -0
  435. package/lib/migrate-ref-tables.d.ts +25 -0
  436. package/lib/migrate-ref-tables.js +38 -0
  437. package/lib/native-executor/check-native-executor-config.d.ts +17 -0
  438. package/lib/native-executor/check-native-executor-config.js +20 -0
  439. package/lib/page-meta-column-maps.d.ts +32 -0
  440. package/lib/page-meta-column-maps.js +43 -0
  441. package/lib/page.d.ts +546 -0
  442. package/lib/page.js +764 -0
  443. package/lib/peek-archive-lock.d.ts +40 -0
  444. package/lib/peek-archive-lock.js +62 -0
  445. package/lib/populate-entity-tables/collapse-anchor-rows.d.ts +41 -0
  446. package/lib/populate-entity-tables/collapse-anchor-rows.js +87 -0
  447. package/lib/populate-entity-tables/derive-dom-path.d.ts +35 -0
  448. package/lib/populate-entity-tables/derive-dom-path.js +72 -0
  449. package/lib/populate-entity-tables/is-blob-ref-value.d.ts +16 -0
  450. package/lib/populate-entity-tables/is-blob-ref-value.js +19 -0
  451. package/lib/populate-entity-tables/match-images-to-dom-paths.d.ts +66 -0
  452. package/lib/populate-entity-tables/match-images-to-dom-paths.js +96 -0
  453. package/lib/populate-entity-tables/populate-anchor-edges.d.ts +33 -0
  454. package/lib/populate-entity-tables/populate-anchor-edges.js +153 -0
  455. package/lib/populate-entity-tables/populate-content-items.d.ts +40 -0
  456. package/lib/populate-entity-tables/populate-content-items.js +141 -0
  457. package/lib/populate-entity-tables/populate-entities.d.ts +81 -0
  458. package/lib/populate-entity-tables/populate-entities.js +110 -0
  459. package/lib/populate-entity-tables/populate-image-items.d.ts +91 -0
  460. package/lib/populate-entity-tables/populate-image-items.js +226 -0
  461. package/lib/populate-entity-tables/populate-page-meta.d.ts +33 -0
  462. package/lib/populate-entity-tables/populate-page-meta.js +267 -0
  463. package/lib/populate-entity-tables/populate-resource-items.d.ts +22 -0
  464. package/lib/populate-entity-tables/populate-resource-items.js +114 -0
  465. package/lib/populate-entity-tables/populate-resource-ref-edges.d.ts +31 -0
  466. package/lib/populate-entity-tables/populate-resource-ref-edges.js +33 -0
  467. package/lib/populate-entity-tables/resolve-blob-refs.d.ts +31 -0
  468. package/lib/populate-entity-tables/resolve-blob-refs.js +100 -0
  469. package/lib/populate-entity-tables/resolve-content-type-refs.d.ts +22 -0
  470. package/lib/populate-entity-tables/resolve-content-type-refs.js +27 -0
  471. package/lib/populate-entity-tables/resolve-header-sets.d.ts +49 -0
  472. package/lib/populate-entity-tables/resolve-header-sets.js +122 -0
  473. package/lib/populate-entity-tables/resolve-json-refs.d.ts +25 -0
  474. package/lib/populate-entity-tables/resolve-json-refs.js +67 -0
  475. package/lib/populate-entity-tables/resolve-text-refs.d.ts +30 -0
  476. package/lib/populate-entity-tables/resolve-text-refs.js +61 -0
  477. package/lib/populate-entity-tables/resolve-url-or-blob-from-maps.d.ts +21 -0
  478. package/lib/populate-entity-tables/resolve-url-or-blob-from-maps.js +27 -0
  479. package/lib/populate-entity-tables/resolve-url-refs.d.ts +33 -0
  480. package/lib/populate-entity-tables/resolve-url-refs.js +60 -0
  481. package/lib/populate-entity-tables/test-utils/count-rows.d.ts +17 -0
  482. package/lib/populate-entity-tables/test-utils/count-rows.js +20 -0
  483. package/lib/populate-entity-tables/test-utils/seed-content-items.d.ts +25 -0
  484. package/lib/populate-entity-tables/test-utils/seed-content-items.js +42 -0
  485. package/lib/populate-entity-tables/test-utils/setup-entities-db.d.ts +30 -0
  486. package/lib/populate-entity-tables/test-utils/setup-entities-db.js +175 -0
  487. package/lib/populate-entity-tables/types.d.ts +157 -0
  488. package/lib/populate-entity-tables/types.js +12 -0
  489. package/lib/populate-entity-tables/upsert-text-refs.d.ts +38 -0
  490. package/lib/populate-entity-tables/upsert-text-refs.js +78 -0
  491. package/lib/populate-ref-tables/classify-content-type.d.ts +16 -0
  492. package/lib/populate-ref-tables/classify-content-type.js +52 -0
  493. package/lib/populate-ref-tables/compute-content-hash.d.ts +22 -0
  494. package/lib/populate-ref-tables/compute-content-hash.js +26 -0
  495. package/lib/populate-ref-tables/compute-header-flags.d.ts +16 -0
  496. package/lib/populate-ref-tables/compute-header-flags.js +70 -0
  497. package/lib/populate-ref-tables/content-type-rules.d.ts +38 -0
  498. package/lib/populate-ref-tables/content-type-rules.js +133 -0
  499. package/lib/populate-ref-tables/create-header-table-caches.d.ts +25 -0
  500. package/lib/populate-ref-tables/create-header-table-caches.js +49 -0
  501. package/lib/populate-ref-tables/data-uri-url-refs-limit.d.ts +15 -0
  502. package/lib/populate-ref-tables/data-uri-url-refs-limit.js +15 -0
  503. package/lib/populate-ref-tables/decode-data-uri.d.ts +21 -0
  504. package/lib/populate-ref-tables/decode-data-uri.js +126 -0
  505. package/lib/populate-ref-tables/decompose-header-set.d.ts +29 -0
  506. package/lib/populate-ref-tables/decompose-header-set.js +157 -0
  507. package/lib/populate-ref-tables/decompose-url.d.ts +25 -0
  508. package/lib/populate-ref-tables/decompose-url.js +70 -0
  509. package/lib/populate-ref-tables/header-stability.d.ts +19 -0
  510. package/lib/populate-ref-tables/header-stability.js +22 -0
  511. package/lib/populate-ref-tables/header-value-cache-key.d.ts +17 -0
  512. package/lib/populate-ref-tables/header-value-cache-key.js +19 -0
  513. package/lib/populate-ref-tables/normalize-mime.d.ts +24 -0
  514. package/lib/populate-ref-tables/normalize-mime.js +36 -0
  515. package/lib/populate-ref-tables/populate-blob-refs.d.ts +38 -0
  516. package/lib/populate-ref-tables/populate-blob-refs.js +134 -0
  517. package/lib/populate-ref-tables/populate-content-type-refs.d.ts +27 -0
  518. package/lib/populate-ref-tables/populate-content-type-refs.js +70 -0
  519. package/lib/populate-ref-tables/populate-header-tables.d.ts +35 -0
  520. package/lib/populate-ref-tables/populate-header-tables.js +80 -0
  521. package/lib/populate-ref-tables/populate-json-refs.d.ts +29 -0
  522. package/lib/populate-ref-tables/populate-json-refs.js +101 -0
  523. package/lib/populate-ref-tables/populate-refs.d.ts +51 -0
  524. package/lib/populate-ref-tables/populate-refs.js +62 -0
  525. package/lib/populate-ref-tables/populate-text-refs.d.ts +32 -0
  526. package/lib/populate-ref-tables/populate-text-refs.js +133 -0
  527. package/lib/populate-ref-tables/populate-url-refs.d.ts +28 -0
  528. package/lib/populate-ref-tables/populate-url-refs.js +148 -0
  529. package/lib/populate-ref-tables/test-utils/count-rows.d.ts +15 -0
  530. package/lib/populate-ref-tables/test-utils/count-rows.js +17 -0
  531. package/lib/populate-ref-tables/types.d.ts +197 -0
  532. package/lib/populate-ref-tables/types.js +7 -0
  533. package/lib/populate-ref-tables/upsert-one-header-set.d.ts +34 -0
  534. package/lib/populate-ref-tables/upsert-one-header-set.js +208 -0
  535. package/lib/populate-ref-tables/volatile-header-names.d.ts +20 -0
  536. package/lib/populate-ref-tables/volatile-header-names.js +33 -0
  537. package/lib/redirect-table.d.ts +9 -0
  538. package/lib/redirect-table.js +28 -0
  539. package/lib/release-finished-statements.d.ts +42 -0
  540. package/lib/release-finished-statements.js +45 -0
  541. package/lib/resolve-redirect-chain.d.ts +33 -0
  542. package/lib/resolve-redirect-chain.js +27 -0
  543. package/lib/resource.d.ts +46 -0
  544. package/lib/resource.js +62 -0
  545. package/lib/retarget-legacy-fk-tables.d.ts +61 -0
  546. package/lib/retarget-legacy-fk-tables.js +137 -0
  547. package/lib/safe-path.d.ts +9 -0
  548. package/lib/safe-path.js +17 -0
  549. package/lib/scope/build-scope-map.d.ts +21 -0
  550. package/lib/scope/build-scope-map.js +32 -0
  551. package/lib/scope/find-scope-entry.d.ts +25 -0
  552. package/lib/scope/find-scope-entry.js +45 -0
  553. package/lib/template-classification/classify-archive-page-templates.d.ts +42 -0
  554. package/lib/template-classification/classify-archive-page-templates.js +70 -0
  555. package/lib/template-classification/classify-page-templates.d.ts +33 -0
  556. package/lib/template-classification/classify-page-templates.js +60 -0
  557. package/lib/template-classification/collect-page-ids-with-html.d.ts +24 -0
  558. package/lib/template-classification/collect-page-ids-with-html.js +30 -0
  559. package/lib/template-classification/collect-page-stylesheet-urls.d.ts +32 -0
  560. package/lib/template-classification/collect-page-stylesheet-urls.js +130 -0
  561. package/lib/template-classification/create-content-root-hint.d.ts +41 -0
  562. package/lib/template-classification/create-content-root-hint.js +51 -0
  563. package/lib/template-classification/create-page-cluster-factory.d.ts +36 -0
  564. package/lib/template-classification/create-page-cluster-factory.js +52 -0
  565. package/lib/template-classification/load-page-cluster-candidates.d.ts +32 -0
  566. package/lib/template-classification/load-page-cluster-candidates.js +93 -0
  567. package/lib/template-classification/page-cluster/resolve-page-cluster-keys.d.ts +34 -0
  568. package/lib/template-classification/page-cluster/resolve-page-cluster-keys.js +236 -0
  569. package/lib/template-classification/page-cluster/types.d.ts +123 -0
  570. package/lib/template-classification/page-cluster/types.js +1 -0
  571. package/lib/template-classification/types.d.ts +234 -0
  572. package/lib/template-classification/types.js +1 -0
  573. package/lib/test-utils/build-full-schema-test-db.d.ts +34 -0
  574. package/lib/test-utils/build-full-schema-test-db.js +74 -0
  575. package/lib/test-utils/create-legacy-analysis-tables.d.ts +13 -0
  576. package/lib/test-utils/create-legacy-analysis-tables.js +37 -0
  577. package/lib/test-utils/fk-parent-tables.d.ts +15 -0
  578. package/lib/test-utils/fk-parent-tables.js +19 -0
  579. package/lib/test-utils/seed-content-item.d.ts +35 -0
  580. package/lib/test-utils/seed-content-item.js +42 -0
  581. package/lib/test-utils/setup-legacy-fk-db.d.ts +34 -0
  582. package/lib/test-utils/setup-legacy-fk-db.js +271 -0
  583. package/lib/transfer/attach-source-database.d.ts +31 -0
  584. package/lib/transfer/attach-source-database.js +40 -0
  585. package/lib/transfer/build-split-config.d.ts +30 -0
  586. package/lib/transfer/build-split-config.js +42 -0
  587. package/lib/transfer/clear-replaced-page-rows.d.ts +23 -0
  588. package/lib/transfer/clear-replaced-page-rows.js +61 -0
  589. package/lib/transfer/concat-archives.d.ts +55 -0
  590. package/lib/transfer/concat-archives.js +95 -0
  591. package/lib/transfer/concat-source-transfer-phases.d.ts +10 -0
  592. package/lib/transfer/concat-source-transfer-phases.js +17 -0
  593. package/lib/transfer/content-item-rank-sql.d.ts +21 -0
  594. package/lib/transfer/content-item-rank-sql.js +23 -0
  595. package/lib/transfer/copy-anchor-edges.d.ts +28 -0
  596. package/lib/transfer/copy-anchor-edges.js +42 -0
  597. package/lib/transfer/copy-dictionaries-for-concat.d.ts +39 -0
  598. package/lib/transfer/copy-dictionaries-for-concat.js +81 -0
  599. package/lib/transfer/copy-dictionaries-for-split.d.ts +29 -0
  600. package/lib/transfer/copy-dictionaries-for-split.js +224 -0
  601. package/lib/transfer/copy-header-set-children.d.ts +27 -0
  602. package/lib/transfer/copy-header-set-children.js +51 -0
  603. package/lib/transfer/copy-image-items.d.ts +21 -0
  604. package/lib/transfer/copy-image-items.js +62 -0
  605. package/lib/transfer/copy-inventory-source-lists.d.ts +30 -0
  606. package/lib/transfer/copy-inventory-source-lists.js +61 -0
  607. package/lib/transfer/copy-journal-tables.d.ts +30 -0
  608. package/lib/transfer/copy-journal-tables.js +56 -0
  609. package/lib/transfer/copy-page-console-logs.d.ts +16 -0
  610. package/lib/transfer/copy-page-console-logs.js +27 -0
  611. package/lib/transfer/copy-page-html-blobs.d.ts +31 -0
  612. package/lib/transfer/copy-page-html-blobs.js +43 -0
  613. package/lib/transfer/copy-page-meta.d.ts +27 -0
  614. package/lib/transfer/copy-page-meta.js +68 -0
  615. package/lib/transfer/copy-page-template-clusters.d.ts +31 -0
  616. package/lib/transfer/copy-page-template-clusters.js +56 -0
  617. package/lib/transfer/copy-page-template-labels.d.ts +34 -0
  618. package/lib/transfer/copy-page-template-labels.js +88 -0
  619. package/lib/transfer/copy-resource-items.d.ts +29 -0
  620. package/lib/transfer/copy-resource-items.js +89 -0
  621. package/lib/transfer/copy-resource-ref-edges.d.ts +20 -0
  622. package/lib/transfer/copy-resource-ref-edges.js +33 -0
  623. package/lib/transfer/copy-simple-page-scoped-tables.d.ts +15 -0
  624. package/lib/transfer/copy-simple-page-scoped-tables.js +34 -0
  625. package/lib/transfer/count-external-pages-in-scope.d.ts +26 -0
  626. package/lib/transfer/count-external-pages-in-scope.js +40 -0
  627. package/lib/transfer/create-transfer-temp-tables.d.ts +30 -0
  628. package/lib/transfer/create-transfer-temp-tables.js +59 -0
  629. package/lib/transfer/dictionary-copy-specs.d.ts +32 -0
  630. package/lib/transfer/dictionary-copy-specs.js +28 -0
  631. package/lib/transfer/drop-transfer-temp-tables.d.ts +9 -0
  632. package/lib/transfer/drop-transfer-temp-tables.js +18 -0
  633. package/lib/transfer/flatten-redirect-chains.d.ts +44 -0
  634. package/lib/transfer/flatten-redirect-chains.js +74 -0
  635. package/lib/transfer/insert-content-items.d.ts +35 -0
  636. package/lib/transfer/insert-content-items.js +116 -0
  637. package/lib/transfer/list-transfer-columns.d.ts +35 -0
  638. package/lib/transfer/list-transfer-columns.js +45 -0
  639. package/lib/transfer/mark-in-scope-content-items.d.ts +31 -0
  640. package/lib/transfer/mark-in-scope-content-items.js +54 -0
  641. package/lib/transfer/merge-archive-configs.d.ts +51 -0
  642. package/lib/transfer/merge-archive-configs.js +85 -0
  643. package/lib/transfer/plan-content-items-for-concat.d.ts +33 -0
  644. package/lib/transfer/plan-content-items-for-concat.js +51 -0
  645. package/lib/transfer/plan-content-items-for-split.d.ts +42 -0
  646. package/lib/transfer/plan-content-items-for-split.js +83 -0
  647. package/lib/transfer/plan-resource-items.d.ts +40 -0
  648. package/lib/transfer/plan-resource-items.js +69 -0
  649. package/lib/transfer/quote-transfer-identifier.d.ts +18 -0
  650. package/lib/transfer/quote-transfer-identifier.js +20 -0
  651. package/lib/transfer/reclassify-resource-externality.d.ts +37 -0
  652. package/lib/transfer/reclassify-resource-externality.js +66 -0
  653. package/lib/transfer/remap-redirect-dest-ids.d.ts +34 -0
  654. package/lib/transfer/remap-redirect-dest-ids.js +51 -0
  655. package/lib/transfer/replace-content-items.d.ts +39 -0
  656. package/lib/transfer/replace-content-items.js +83 -0
  657. package/lib/transfer/simple-page-scoped-tables.d.ts +25 -0
  658. package/lib/transfer/simple-page-scoped-tables.js +38 -0
  659. package/lib/transfer/split-archive.d.ts +55 -0
  660. package/lib/transfer/split-archive.js +98 -0
  661. package/lib/transfer/split-source-transfer-phases.d.ts +11 -0
  662. package/lib/transfer/split-source-transfer-phases.js +18 -0
  663. package/lib/transfer/transfer-action.d.ts +34 -0
  664. package/lib/transfer/transfer-action.js +32 -0
  665. package/lib/transfer/transfer-archive-rows.d.ts +65 -0
  666. package/lib/transfer/transfer-archive-rows.js +156 -0
  667. package/lib/transfer/transfer-dictionary-tables.d.ts +12 -0
  668. package/lib/transfer/transfer-dictionary-tables.js +22 -0
  669. package/lib/transfer/transfer-post-phases.d.ts +10 -0
  670. package/lib/transfer/transfer-post-phases.js +13 -0
  671. package/lib/transfer/transfer-source-alias.d.ts +9 -0
  672. package/lib/transfer/transfer-source-alias.js +9 -0
  673. package/lib/transfer/types.d.ts +111 -0
  674. package/lib/transfer/types.js +35 -0
  675. package/lib/types.d.ts +772 -0
  676. package/lib/types.js +1 -0
  677. package/lib/url-alias/compute-tier-a-alias-key.d.ts +44 -0
  678. package/lib/url-alias/compute-tier-a-alias-key.js +47 -0
  679. package/lib/url-alias/compute-tier-b-alias-key.d.ts +23 -0
  680. package/lib/url-alias/compute-tier-b-alias-key.js +26 -0
  681. package/lib/url-alias/group-alias-candidates.d.ts +27 -0
  682. package/lib/url-alias/group-alias-candidates.js +29 -0
  683. package/lib/url-alias/types.d.ts +12 -0
  684. package/lib/url-alias/types.js +1 -0
  685. package/lib/url-pattern/compute-shape-key.d.ts +58 -0
  686. package/lib/url-pattern/compute-shape-key.js +129 -0
  687. package/lib/url-pattern/decompose-url.d.ts +33 -0
  688. package/lib/url-pattern/decompose-url.js +79 -0
  689. package/lib/url-pattern/reconstruct-url.d.ts +15 -0
  690. package/lib/url-pattern/reconstruct-url.js +33 -0
  691. package/lib/url-sort/compute-url-sort-ranks.d.ts +30 -0
  692. package/lib/url-sort/compute-url-sort-ranks.js +33 -0
  693. package/lib/utils/array/each-splitted.d.ts +10 -0
  694. package/lib/utils/array/each-splitted.js +14 -0
  695. package/lib/utils/debug.d.ts +8 -0
  696. package/lib/utils/debug.js +8 -0
  697. package/lib/utils/error/emit-error-with-retry.d.ts +40 -0
  698. package/lib/utils/error/emit-error-with-retry.js +44 -0
  699. package/lib/utils/error/emit-error.d.ts +39 -0
  700. package/lib/utils/error/emit-error.js +41 -0
  701. package/lib/utils/object/parse-response-headers.d.ts +12 -0
  702. package/lib/utils/object/parse-response-headers.js +26 -0
  703. package/lib/utils/object/redact-request-headers.d.ts +15 -0
  704. package/lib/utils/object/redact-request-headers.js +27 -0
  705. package/lib/utils/types/types.d.ts +383 -0
  706. package/lib/utils/types/types.js +1 -0
  707. package/lib/verify-migration/capture-rejection.d.ts +24 -0
  708. package/lib/verify-migration/capture-rejection.js +31 -0
  709. package/lib/verify-migration/check-anchor-edges-count.d.ts +34 -0
  710. package/lib/verify-migration/check-anchor-edges-count.js +72 -0
  711. package/lib/verify-migration/check-anchor-edges-sum.d.ts +13 -0
  712. package/lib/verify-migration/check-anchor-edges-sum.js +27 -0
  713. package/lib/verify-migration/check-content-items-count.d.ts +16 -0
  714. package/lib/verify-migration/check-content-items-count.js +30 -0
  715. package/lib/verify-migration/check-content-type-preservation.d.ts +22 -0
  716. package/lib/verify-migration/check-content-type-preservation.js +40 -0
  717. package/lib/verify-migration/check-foreign-key-integrity.d.ts +31 -0
  718. package/lib/verify-migration/check-foreign-key-integrity.js +47 -0
  719. package/lib/verify-migration/check-image-items-count.d.ts +12 -0
  720. package/lib/verify-migration/check-image-items-count.js +26 -0
  721. package/lib/verify-migration/check-page-meta-count.d.ts +15 -0
  722. package/lib/verify-migration/check-page-meta-count.js +31 -0
  723. package/lib/verify-migration/check-reader-parity.d.ts +23 -0
  724. package/lib/verify-migration/check-reader-parity.js +182 -0
  725. package/lib/verify-migration/check-resource-items-count.d.ts +17 -0
  726. package/lib/verify-migration/check-resource-items-count.js +33 -0
  727. package/lib/verify-migration/check-url-round-trip.d.ts +43 -0
  728. package/lib/verify-migration/check-url-round-trip.js +112 -0
  729. package/lib/verify-migration/types.d.ts +70 -0
  730. package/lib/verify-migration/types.js +63 -0
  731. package/lib/verify-migration/verify-migration.d.ts +41 -0
  732. package/lib/verify-migration/verify-migration.js +120 -0
  733. package/lib/with-bulk-write-pragmas.d.ts +51 -0
  734. package/lib/with-bulk-write-pragmas.js +132 -0
  735. package/lib/write-queue.d.ts +32 -0
  736. package/lib/write-queue.js +55 -0
  737. package/package.json +360 -5
@@ -0,0 +1,25 @@
1
+ /**
2
+ * Decodes a stored HTML body BLOB to its UTF-8 bytes according to its codec
3
+ * marker, without building a JavaScript string.
4
+ *
5
+ * For consumers that hand the HTML straight to byte-oriented code (the
6
+ * `@nitpicker/core` native addon): going through `decodeStoredBlob`'s string
7
+ * would decode to UTF-16 and immediately re-encode to the same bytes, two
8
+ * full-size copies per page. Stored blobs are always `Buffer.from(html)`
9
+ * output, so the bytes are valid UTF-8 and identical to that round-trip.
10
+ *
11
+ * A zstd blob may decompress to at most `MAX_DECODED_SNAPSHOT_BYTES`, the
12
+ * same limit the native HTML scans apply, so a document that one path can
13
+ * decompress is one every path can. The error names no row; a reader that
14
+ * knows the page uses `decodePageHtmlBlobBytes`.
15
+ * @param body - Raw bytes as stored in `page_html_blobs.body`.
16
+ * @param codec - The `codec` column value (e.g. `'zstd'`, `'none'`).
17
+ * @returns The HTML as UTF-8 bytes.
18
+ * @throws {Error} If the codec is not recognised, or a zstd blob decompresses past the limit.
19
+ * @example
20
+ * ```ts
21
+ * const bytes = decodeStoredBlobBytes(row.body, row.codec);
22
+ * computeBodyHash(bytes);
23
+ * ```
24
+ */
25
+ export declare function decodeStoredBlobBytes(body: Uint8Array, codec: string): Buffer;
@@ -0,0 +1,47 @@
1
+ import { zstdDecompressSync } from 'node:zlib';
2
+ import { MAX_DECODED_SNAPSHOT_BYTES } from '@nitpicker/core/max-decoded-snapshot-bytes';
3
+ /**
4
+ * Decodes a stored HTML body BLOB to its UTF-8 bytes according to its codec
5
+ * marker, without building a JavaScript string.
6
+ *
7
+ * For consumers that hand the HTML straight to byte-oriented code (the
8
+ * `@nitpicker/core` native addon): going through `decodeStoredBlob`'s string
9
+ * would decode to UTF-16 and immediately re-encode to the same bytes, two
10
+ * full-size copies per page. Stored blobs are always `Buffer.from(html)`
11
+ * output, so the bytes are valid UTF-8 and identical to that round-trip.
12
+ *
13
+ * A zstd blob may decompress to at most `MAX_DECODED_SNAPSHOT_BYTES`, the
14
+ * same limit the native HTML scans apply, so a document that one path can
15
+ * decompress is one every path can. The error names no row; a reader that
16
+ * knows the page uses `decodePageHtmlBlobBytes`.
17
+ * @param body - Raw bytes as stored in `page_html_blobs.body`.
18
+ * @param codec - The `codec` column value (e.g. `'zstd'`, `'none'`).
19
+ * @returns The HTML as UTF-8 bytes.
20
+ * @throws {Error} If the codec is not recognised, or a zstd blob decompresses past the limit.
21
+ * @example
22
+ * ```ts
23
+ * const bytes = decodeStoredBlobBytes(row.body, row.codec);
24
+ * computeBodyHash(bytes);
25
+ * ```
26
+ */
27
+ export function decodeStoredBlobBytes(body, codec) {
28
+ // `Buffer.from(buffer)` accepts Uint8Array, Buffer, and array-like
29
+ // shapes uniformly; libsql may hand back any of these for a BLOB
30
+ // column depending on the row encoding.
31
+ const buffer = Buffer.from(body);
32
+ if (codec === 'zstd') {
33
+ try {
34
+ return zstdDecompressSync(buffer, { maxOutputLength: MAX_DECODED_SNAPSHOT_BYTES });
35
+ }
36
+ catch (error) {
37
+ if (error.code === 'ERR_BUFFER_TOO_LARGE') {
38
+ throw new Error(`The page_html_blobs blob decompresses to more than ${MAX_DECODED_SNAPSHOT_BYTES} bytes, the limit on one snapshot`, { cause: error });
39
+ }
40
+ throw error;
41
+ }
42
+ }
43
+ if (codec === 'none') {
44
+ return buffer;
45
+ }
46
+ throw new Error(`Unknown page_html_blobs.codec: ${codec}`);
47
+ }
@@ -0,0 +1,37 @@
1
+ import type { PageSource } from './types.js';
2
+ /**
3
+ * Decide which {@link PageSource} label a child row reached through the
4
+ * crawl graph (anchor placeholder, sub-resource, redirect chain
5
+ * intermediate) should inherit from its parent.
6
+ *
7
+ * Two simple rules, expressed once so anchor / redirect / sub-resource
8
+ * call sites stay in lockstep:
9
+ *
10
+ * 1. If the parent is in the inventory chain
11
+ * ({@link isInventorySource}) → propagate
12
+ * `'inventory-discovered'`. The child is itself a transitively
13
+ * reached node in the inventory chain; it is NOT a new seed (the
14
+ * seed label is reserved for URLs the operator listed in
15
+ * `--inventory ./list.txt`).
16
+ *
17
+ * 2. Otherwise → return `fallback`. The two production fallbacks differ
18
+ * by call site:
19
+ *
20
+ * - Anchor lineage passes `'crawled'` explicitly so the crawled-wins
21
+ * downgrade inside `resolveContentItemId` fires when the anchor reaches an
22
+ * existing `'inventory-*'` row.
23
+ * - Sub-resource emit passes `undefined` so the DB DEFAULT
24
+ * `'crawled'` lands on the freshly INSERTed `resources` row (the
25
+ * `setResources` path is INSERT-only with `onConflict.ignore()`, so
26
+ * no downgrade is needed).
27
+ * - Redirect chain intermediate uses `'crawled'` (same reason as
28
+ * anchor): an existing inventory-* intermediate reached by a
29
+ * crawled redirect chain must be downgraded.
30
+ *
31
+ * Pure function — keeps the lineage decision testable in isolation from
32
+ * the database transaction / event-emitter wiring that consumes it.
33
+ * @param parentSource - The parent page's stored `source` column (or `undefined` when no parent row exists).
34
+ * @param fallback - The label to return when the parent is NOT in the inventory chain. Pass `'crawled'` to enable the crawled-wins downgrade, or `undefined` to let the DB DEFAULT apply.
35
+ * @returns The lineage label to attach to the child row.
36
+ */
37
+ export declare function deriveLineageFromParent(parentSource: PageSource | undefined, fallback: PageSource | undefined): PageSource | undefined;
@@ -0,0 +1,42 @@
1
+ import { isInventorySource } from './is-inventory-source.js';
2
+ /**
3
+ * Decide which {@link PageSource} label a child row reached through the
4
+ * crawl graph (anchor placeholder, sub-resource, redirect chain
5
+ * intermediate) should inherit from its parent.
6
+ *
7
+ * Two simple rules, expressed once so anchor / redirect / sub-resource
8
+ * call sites stay in lockstep:
9
+ *
10
+ * 1. If the parent is in the inventory chain
11
+ * ({@link isInventorySource}) → propagate
12
+ * `'inventory-discovered'`. The child is itself a transitively
13
+ * reached node in the inventory chain; it is NOT a new seed (the
14
+ * seed label is reserved for URLs the operator listed in
15
+ * `--inventory ./list.txt`).
16
+ *
17
+ * 2. Otherwise → return `fallback`. The two production fallbacks differ
18
+ * by call site:
19
+ *
20
+ * - Anchor lineage passes `'crawled'` explicitly so the crawled-wins
21
+ * downgrade inside `resolveContentItemId` fires when the anchor reaches an
22
+ * existing `'inventory-*'` row.
23
+ * - Sub-resource emit passes `undefined` so the DB DEFAULT
24
+ * `'crawled'` lands on the freshly INSERTed `resources` row (the
25
+ * `setResources` path is INSERT-only with `onConflict.ignore()`, so
26
+ * no downgrade is needed).
27
+ * - Redirect chain intermediate uses `'crawled'` (same reason as
28
+ * anchor): an existing inventory-* intermediate reached by a
29
+ * crawled redirect chain must be downgraded.
30
+ *
31
+ * Pure function — keeps the lineage decision testable in isolation from
32
+ * the database transaction / event-emitter wiring that consumes it.
33
+ * @param parentSource - The parent page's stored `source` column (or `undefined` when no parent row exists).
34
+ * @param fallback - The label to return when the parent is NOT in the inventory chain. Pass `'crawled'` to enable the crawled-wins downgrade, or `undefined` to let the DB DEFAULT apply.
35
+ * @returns The lineage label to attach to the child row.
36
+ */
37
+ export function deriveLineageFromParent(parentSource, fallback) {
38
+ if (isInventorySource(parentSource)) {
39
+ return 'inventory-discovered';
40
+ }
41
+ return fallback;
42
+ }
@@ -0,0 +1,45 @@
1
+ import type { Knex } from 'knex';
2
+ /**
3
+ * Drops the five legacy write-model tables from a migrated archive. Reader
4
+ * and writer both operate exclusively on the entity / ref tables, so once
5
+ * the 0.13 populate has copied everything across (and
6
+ * `retargetLegacyFkTables` has repointed the adjunct FKs at
7
+ * `content_items`), the legacy tables are pure dead weight — dropping them
8
+ * reclaims the duplicated storage and removes the last consumers of the
9
+ * `pages(id)` id-space.
10
+ *
11
+ * **Requires `PRAGMA foreign_keys = OFF`** (asserted at runtime, because a
12
+ * caller that forgets the toggle would fail nondeterministically instead
13
+ * of loudly). Two reasons for the requirement:
14
+ *
15
+ * 1. `pages.redirectDestId` is a self-referential FK. With enforcement ON,
16
+ * `DROP TABLE` performs an implicit `DELETE FROM`, and deleting a
17
+ * redirect-destination row before its source row trips the constraint —
18
+ * whether the drop survives depends on row order, so archives with
19
+ * redirect chains can fail nondeterministically.
20
+ * 2. With enforcement OFF the implicit `DELETE FROM` is skipped entirely
21
+ * and SQLite reclaims each table as a whole b-tree — O(pages) row
22
+ * deletions become O(1) truncations, which matters at the several
23
+ * hundred-thousand-row scale real archives reach.
24
+ *
25
+ * The drops still run children-first (`resources-referrers` / `anchors` /
26
+ * `images` reference `pages` / `resources`) as defence in depth. Missing
27
+ * tables are skipped so the function is idempotent.
28
+ *
29
+ * Data-integrity of the surviving tables is asserted separately by
30
+ * `checkForeignKeyIntegrity` (`PRAGMA foreign_key_check` ignores the
31
+ * `foreign_keys` setting), which the migration script runs right after
32
+ * this function.
33
+ * @param trx - Knex transaction on the archive being migrated
34
+ * (`scripts/migrate-to-0.13.mjs` is the caller).
35
+ * @throws {Error} when the connection still has `PRAGMA foreign_keys = ON`
36
+ * (`foreign_keys` cannot change inside a transaction, so the caller must
37
+ * toggle it off before opening the transaction).
38
+ * @example
39
+ * await db.raw('PRAGMA foreign_keys = OFF');
40
+ * await db.transaction(async (trx) => {
41
+ * await dropLegacyTables(trx);
42
+ * });
43
+ * await db.raw('PRAGMA foreign_keys = ON');
44
+ */
45
+ export declare function dropLegacyTables(trx: Knex): Promise<void>;
@@ -0,0 +1,56 @@
1
+ /**
2
+ * Drops the five legacy write-model tables from a migrated archive. Reader
3
+ * and writer both operate exclusively on the entity / ref tables, so once
4
+ * the 0.13 populate has copied everything across (and
5
+ * `retargetLegacyFkTables` has repointed the adjunct FKs at
6
+ * `content_items`), the legacy tables are pure dead weight — dropping them
7
+ * reclaims the duplicated storage and removes the last consumers of the
8
+ * `pages(id)` id-space.
9
+ *
10
+ * **Requires `PRAGMA foreign_keys = OFF`** (asserted at runtime, because a
11
+ * caller that forgets the toggle would fail nondeterministically instead
12
+ * of loudly). Two reasons for the requirement:
13
+ *
14
+ * 1. `pages.redirectDestId` is a self-referential FK. With enforcement ON,
15
+ * `DROP TABLE` performs an implicit `DELETE FROM`, and deleting a
16
+ * redirect-destination row before its source row trips the constraint —
17
+ * whether the drop survives depends on row order, so archives with
18
+ * redirect chains can fail nondeterministically.
19
+ * 2. With enforcement OFF the implicit `DELETE FROM` is skipped entirely
20
+ * and SQLite reclaims each table as a whole b-tree — O(pages) row
21
+ * deletions become O(1) truncations, which matters at the several
22
+ * hundred-thousand-row scale real archives reach.
23
+ *
24
+ * The drops still run children-first (`resources-referrers` / `anchors` /
25
+ * `images` reference `pages` / `resources`) as defence in depth. Missing
26
+ * tables are skipped so the function is idempotent.
27
+ *
28
+ * Data-integrity of the surviving tables is asserted separately by
29
+ * `checkForeignKeyIntegrity` (`PRAGMA foreign_key_check` ignores the
30
+ * `foreign_keys` setting), which the migration script runs right after
31
+ * this function.
32
+ * @param trx - Knex transaction on the archive being migrated
33
+ * (`scripts/migrate-to-0.13.mjs` is the caller).
34
+ * @throws {Error} when the connection still has `PRAGMA foreign_keys = ON`
35
+ * (`foreign_keys` cannot change inside a transaction, so the caller must
36
+ * toggle it off before opening the transaction).
37
+ * @example
38
+ * await db.raw('PRAGMA foreign_keys = OFF');
39
+ * await db.transaction(async (trx) => {
40
+ * await dropLegacyTables(trx);
41
+ * });
42
+ * await db.raw('PRAGMA foreign_keys = ON');
43
+ */
44
+ export async function dropLegacyTables(trx) {
45
+ const pragma = await trx.raw('PRAGMA foreign_keys');
46
+ if (pragma[0]?.foreign_keys === 1) {
47
+ throw new Error('dropLegacyTables: PRAGMA foreign_keys is ON — turn it OFF before the transaction. ' +
48
+ 'With enforcement ON, dropping `pages` runs an implicit DELETE whose row order ' +
49
+ 'can trip the redirectDestId self-FK nondeterministically.');
50
+ }
51
+ await trx.raw('DROP TABLE IF EXISTS "resources-referrers"');
52
+ await trx.raw('DROP TABLE IF EXISTS "anchors"');
53
+ await trx.raw('DROP TABLE IF EXISTS "images"');
54
+ await trx.raw('DROP TABLE IF EXISTS "resources"');
55
+ await trx.raw('DROP TABLE IF EXISTS "pages"');
56
+ }
@@ -0,0 +1,20 @@
1
+ import type { ErrorKind } from './types.js';
2
+ /**
3
+ * Classify a raw crawler/scraper error message into a coarse {@link ErrorKind}.
4
+ *
5
+ * Pure and deterministic: the same message always yields the same kind, which
6
+ * is why the kind is derived on read rather than persisted — it can be applied
7
+ * uniformly to freshly captured `crawl_errors`, legacy `error.log` lines, and
8
+ * `page_errors` alike.
9
+ * @param message - The raw error message (a single line is sufficient; the
10
+ * cause token such as `ENOTFOUND` or `Navigation timeout` lives there).
11
+ * @returns The matched kind, or `unknown` when no matcher applies.
12
+ * @example
13
+ * ```ts
14
+ * classifyErrorKind('getaddrinfo ENOTFOUND www.example.com'); // 'dns'
15
+ * classifyErrorKind('gave up after 3 retries — Race 180,000ms'); // 'timeout'
16
+ * classifyErrorKind('Protocol error (Page.reload): Target closed'); // 'protocol'
17
+ * classifyErrorKind('Maximum number of redirects exceeded'); // 'redirect-loop'
18
+ * ```
19
+ */
20
+ export declare function classifyErrorKind(message: string): ErrorKind;
@@ -0,0 +1,136 @@
1
+ /**
2
+ * Ordered message matchers. The first pattern that matches wins, so more
3
+ * specific transport causes (DNS, TLS, connection-*) are tested before the
4
+ * broader `protocol` / `timeout` buckets — e.g. `ETIMEDOUT` must classify as
5
+ * `connection-timeout`, not the page-level `timeout`, and a puppeteer
6
+ * `Protocol error` must not be swallowed by the `timeout` matcher.
7
+ */
8
+ const MATCHERS = [
9
+ // `dns-transient` must be evaluated before `dns`: an `EAI_AGAIN` line also
10
+ // carries the `getaddrinfo` token, so the more specific transient pattern
11
+ // has to win. Splitting it out from `dns` keeps the DNS-burned host cache
12
+ // (which marks on `kind === 'dns'`) from punishing a host whose only sin
13
+ // was a local resolver hiccup.
14
+ { kind: 'dns-transient', pattern: /EAI_AGAIN|\bEREFUSED\b/i },
15
+ {
16
+ kind: 'dns',
17
+ pattern: /ENOTFOUND|getaddrinfo|ERR_NAME_NOT_RESOLVED|ERR_NAME_RESOLUTION_FAILED/i,
18
+ },
19
+ {
20
+ kind: 'tls',
21
+ // `Hostname/IP does not match certificate's altnames` is Node's
22
+ // node:tls hostname mismatch error and is emphatically a TLS issue;
23
+ // adding it here (alongside the OpenSSL / Chromium tokens) keeps
24
+ // hosts that serve the wrong-name cert (common with misconfigured
25
+ // edge / load-balancer setups) out of `unknown`. `altnames` is
26
+ // anchored to the preceding `certificate` token so a request whose
27
+ // error message merely mentions a path containing the substring
28
+ // `altnames` (e.g. `https://api.example.com/altnames/lookup` in a
29
+ // 5xx body) does NOT get misclassified into `tls` (which is a
30
+ // `PERMANENT_ERROR_KINDS` member — a false-positive would
31
+ // permanently exclude that page from `--retry-failed`).
32
+ pattern: /ERR_CERT|ERR_SSL|\bCERT_|SSL routines|ERR_BAD_SSL|UNABLE_TO_VERIFY|unable to verify|self.signed certificate|certificate has expired\s*$|\bERR_TLS|Hostname\/IP does not match certificate|certificate'?s? altnames/i,
33
+ },
34
+ { kind: 'connection-refused', pattern: /ECONNREFUSED|ERR_CONNECTION_REFUSED/i },
35
+ {
36
+ kind: 'connection-reset',
37
+ pattern: /ECONNRESET|socket hang up|ERR_CONNECTION_RESET|ERR_CONNECTION_CLOSED|ERR_EMPTY_RESPONSE/i,
38
+ },
39
+ {
40
+ kind: 'connection-timeout',
41
+ pattern: /ETIMEDOUT|ERR_CONNECTION_TIMED_OUT|ERR_TIMED_OUT/i,
42
+ },
43
+ // `local-network` is evaluated AFTER the connection-* matchers so a
44
+ // concrete cause (refused / reset / timeout) wins when both apply. Only
45
+ // "local network is unreachable / changed" symptoms — and the OS-level
46
+ // errors that surface them — land here. Short tokens (`EPIPE`, `EREFUSED`)
47
+ // are word-bounded so unrelated identifiers don't false-positive.
48
+ {
49
+ kind: 'local-network',
50
+ pattern: /ERR_INTERNET_DISCONNECTED|ERR_NETWORK_CHANGED|ERR_NETWORK_IO_SUSPENDED|ERR_ADDRESS_UNREACHABLE|ERR_NETWORK_UNREACHABLE|ENETUNREACH|EHOSTUNREACH|EADDRNOTAVAIL|ENOTCONN|\bEPIPE\b/i,
51
+ },
52
+ {
53
+ kind: 'parse-error',
54
+ pattern: /Parse Error|Expected HTTP\/|Unexpected end of stream/i,
55
+ },
56
+ // `follow-redirects` (pinned at 1.16.0, `fetch-destination.ts`'s HEAD/GET
57
+ // pre-flight) throws exactly "Maximum number of redirects exceeded" —
58
+ // no cause token, no URL — when a chain never terminates within its
59
+ // `maxRedirects` budget. `ERR_TOO_MANY_REDIRECTS` is the equivalent
60
+ // Chromium net-error code, covering the same symptom surfaced through a
61
+ // puppeteer navigation instead of the Node HTTP client. Both mean the
62
+ // SAME thing: the site's own redirect configuration loops and will loop
63
+ // again on any future fetch, which is why this is deterministic (not a
64
+ // transient network condition) — see `PERMANENT_ERROR_KINDS`.
65
+ {
66
+ kind: 'redirect-loop',
67
+ pattern: /Maximum number of redirects exceeded|ERR_TOO_MANY_REDIRECTS/i,
68
+ },
69
+ // `client-blocked` covers Chromium's ERR_BLOCKED_* family — the browser
70
+ // actively decided to reject the request (ad/tracker heuristics, CSP,
71
+ // CORB / ORB, administrator block list, fingerprinting protection,
72
+ // cleartext policy, …). Per the upstream `net/base/net_error_list.h`,
73
+ // `ERR_BLOCKED_BY_CLIENT` is documented as "The client chose to block
74
+ // the request." — i.e. the server was never the deciding party. Listed
75
+ // before `protocol` so puppeteer's generic "Protocol error" wrapper
76
+ // (which sometimes embeds the underlying net error code) is correctly
77
+ // attributed to the blocked layer rather than the protocol layer.
78
+ {
79
+ kind: 'client-blocked',
80
+ pattern: /ERR_BLOCKED_BY_CLIENT|ERR_BLOCKED_BY_ADMINISTRATOR|ERR_BLOCKED_IN_INCOGNITO_BY_ADMINISTRATOR|ERR_BLOCKED_BY_RESPONSE|ERR_BLOCKED_BY_CSP|ERR_BLOCKED_BY_ORB|ERR_BLOCKED_BY_FINGERPRINTING_PROTECTION|ERR_CLEARTEXT_NOT_PERMITTED|ERR_NETWORK_ACCESS_REVOKED/i,
81
+ },
82
+ {
83
+ kind: 'protocol',
84
+ // `detached frame` is anchored to puppeteer's exact prefix
85
+ // `Attempted to use detached Frame` (its current Frame.ts
86
+ // emitter; the `i` flag below catches the lowercase variant
87
+ // automatically), not the bare two-token substring. The bare
88
+ // form would match unrelated diagnostics like a console message
89
+ // "detached frame ref leaked" echoed through a logger. The older
90
+ // Page-domain `frame (?:was |got )?detached` form is kept as a
91
+ // separate alternative because Chromium still surfaces that
92
+ // phrasing in some legacy code paths. Without one of these, the
93
+ // "Attempted to use detached Frame ..." messages observed on a
94
+ // real archive would slip into `unknown`.
95
+ pattern: /Protocol error|Target closed|Session closed|Execution context was destroyed|frame (?:was |got )?detached|Attempted to use detached frame|Navigating frame was detached|Cannot find context|Node with given id|Page\.\w+ returned/i,
96
+ },
97
+ {
98
+ kind: 'timeout',
99
+ // `Timeout: https?:` matches the NetTimeoutError "Timeout: <url>"
100
+ // form. Looking for the URL-shaped tail (rather than anchoring at
101
+ // line start) is what lets us catch the beholder-wrapped variant
102
+ // `[Retried N times] Timeout: https://...` that gets stored in
103
+ // `crawl_errors` / `error.log` after retry exhaustion — the bare
104
+ // `^Timeout:` form would only fire on the immediate failure and
105
+ // miss every retry-exhausted record (the ones that actually land
106
+ // in the archive). Required for slow-server timeouts that
107
+ // previously fell into `unknown`.
108
+ pattern: /Race \d|Navigation timeout|timeout of \d+\s*ms exceeded|TimeoutError|Timed out|Timeout: https?:/i,
109
+ },
110
+ ];
111
+ /**
112
+ * Classify a raw crawler/scraper error message into a coarse {@link ErrorKind}.
113
+ *
114
+ * Pure and deterministic: the same message always yields the same kind, which
115
+ * is why the kind is derived on read rather than persisted — it can be applied
116
+ * uniformly to freshly captured `crawl_errors`, legacy `error.log` lines, and
117
+ * `page_errors` alike.
118
+ * @param message - The raw error message (a single line is sufficient; the
119
+ * cause token such as `ENOTFOUND` or `Navigation timeout` lives there).
120
+ * @returns The matched kind, or `unknown` when no matcher applies.
121
+ * @example
122
+ * ```ts
123
+ * classifyErrorKind('getaddrinfo ENOTFOUND www.example.com'); // 'dns'
124
+ * classifyErrorKind('gave up after 3 retries — Race 180,000ms'); // 'timeout'
125
+ * classifyErrorKind('Protocol error (Page.reload): Target closed'); // 'protocol'
126
+ * classifyErrorKind('Maximum number of redirects exceeded'); // 'redirect-loop'
127
+ * ```
128
+ */
129
+ export function classifyErrorKind(message) {
130
+ for (const { kind, pattern } of MATCHERS) {
131
+ if (pattern.test(message)) {
132
+ return kind;
133
+ }
134
+ }
135
+ return 'unknown';
136
+ }
@@ -0,0 +1,23 @@
1
+ import type { ErrorKind } from './types.js';
2
+ /**
3
+ * `ErrorKind`s that plausibly indicate trouble with the operator's own
4
+ * network path rather than a genuinely dead or misconfigured target site.
5
+ *
6
+ * Single source of truth shared by two consumers that must agree on
7
+ * exactly the same set:
8
+ *
9
+ * - `NetworkOutageDetector` — only these kinds contribute to the sliding
10
+ * window that detects a suspect outage.
11
+ * - `evict-network-classified-destination-cache-entries.ts` — on recovery,
12
+ * only `destinationCache` entries whose cached `Error` classifies into
13
+ * one of these kinds are evicted (a cached `tls` or `client-blocked`
14
+ * failure is a site-specific fact and must survive an outage recovery
15
+ * unrelated to it).
16
+ *
17
+ * `dns` is included despite `permanent-error-kinds.ts` treating it as a
18
+ * permanent, site-specific verdict in isolation — that classification is
19
+ * exactly what outage detection exists to override when the surrounding
20
+ * evidence (many hosts, tight time window) points to the local network
21
+ * instead.
22
+ */
23
+ export declare const NETWORK_RELATED_ERROR_KINDS: ReadonlySet<ErrorKind>;
@@ -0,0 +1,28 @@
1
+ /**
2
+ * `ErrorKind`s that plausibly indicate trouble with the operator's own
3
+ * network path rather than a genuinely dead or misconfigured target site.
4
+ *
5
+ * Single source of truth shared by two consumers that must agree on
6
+ * exactly the same set:
7
+ *
8
+ * - `NetworkOutageDetector` — only these kinds contribute to the sliding
9
+ * window that detects a suspect outage.
10
+ * - `evict-network-classified-destination-cache-entries.ts` — on recovery,
11
+ * only `destinationCache` entries whose cached `Error` classifies into
12
+ * one of these kinds are evicted (a cached `tls` or `client-blocked`
13
+ * failure is a site-specific fact and must survive an outage recovery
14
+ * unrelated to it).
15
+ *
16
+ * `dns` is included despite `permanent-error-kinds.ts` treating it as a
17
+ * permanent, site-specific verdict in isolation — that classification is
18
+ * exactly what outage detection exists to override when the surrounding
19
+ * evidence (many hosts, tight time window) points to the local network
20
+ * instead.
21
+ */
22
+ export const NETWORK_RELATED_ERROR_KINDS = new Set([
23
+ 'dns',
24
+ 'dns-transient',
25
+ 'local-network',
26
+ 'connection-timeout',
27
+ 'connection-reset',
28
+ ]);
@@ -0,0 +1,48 @@
1
+ import type { ErrorKind } from './types.js';
2
+ /**
3
+ * Error kinds whose failure mode is **persistent** — re-fetching the same URL
4
+ * (without changing the network, the certificate, the destination host, or the
5
+ * browser's block-list state) will almost certainly produce the same failure.
6
+ *
7
+ * Used by `resetFailedPages` to exclude pages whose latest recorded error
8
+ * falls in this set, so `--retry-failed` actually converges: without the
9
+ * exclusion, NXDOMAIN / TLS mismatch / `ERR_BLOCKED_BY_CLIENT` /
10
+ * `ECONNREFUSED` / HTTP parse-error / redirect-loop pages would be reset to
11
+ * pending on every iteration, the crawler would re-attempt them, they would
12
+ * fail again the same way, and the retry-target count would stay constant
13
+ * forever.
14
+ *
15
+ * Why these six and not others:
16
+ * - **dns** — `ENOTFOUND` / `ERR_NAME_NOT_RESOLVED` are authoritative DNS
17
+ * answers; the host is gone (or never existed). EAI_AGAIN is split out as
18
+ * `dns-transient` precisely so it is NOT in this set.
19
+ * - **tls** — cert expiry / SAN mismatch / SSL protocol errors require the
20
+ * server operator to fix something; retrying within the same archive run
21
+ * cannot succeed.
22
+ * - **client-blocked** — Chromium's `ERR_BLOCKED_*` family is a deliberate
23
+ * browser-side rejection; the request will be blocked identically every
24
+ * time the browser sees the same URL.
25
+ * - **parse-error** — the server's HTTP response is malformed (`Expected
26
+ * HTTP/, RTSP/ or ICE/`, `Unexpected end of stream`). Retrying the same
27
+ * request hits the same parser failure.
28
+ * - **connection-refused** — `ECONNREFUSED` is an authoritative TCP RST from
29
+ * the listener; either no process is listening on the port or its accept
30
+ * queue rejected the connection. Either way the answer is final until the
31
+ * server operator intervenes.
32
+ * - **redirect-loop** — `Maximum number of redirects exceeded` /
33
+ * `ERR_TOO_MANY_REDIRECTS` means the site's own redirect chain never
34
+ * terminates; the exact same chain is served on every future fetch until
35
+ * the site operator fixes it.
36
+ *
37
+ * Notably absent (intentionally retryable):
38
+ * - `connection-reset` / `connection-timeout` — could be middlebox or
39
+ * transient overload
40
+ * - `dns-transient` (EAI_AGAIN / EREFUSED) — local resolver hiccup
41
+ * - `local-network` — operator-side connectivity loss
42
+ * - `timeout` — slow but reachable server (HEAD-timeout escalation gives
43
+ * these a real chance)
44
+ * - `protocol` — puppeteer lifecycle race, often recovers on retry
45
+ * - `unknown` — by definition we don't know it's permanent, so we keep
46
+ * retrying (errs on the side of investigating)
47
+ */
48
+ export declare const PERMANENT_ERROR_KINDS: ReadonlySet<ErrorKind>;
@@ -0,0 +1,54 @@
1
+ /**
2
+ * Error kinds whose failure mode is **persistent** — re-fetching the same URL
3
+ * (without changing the network, the certificate, the destination host, or the
4
+ * browser's block-list state) will almost certainly produce the same failure.
5
+ *
6
+ * Used by `resetFailedPages` to exclude pages whose latest recorded error
7
+ * falls in this set, so `--retry-failed` actually converges: without the
8
+ * exclusion, NXDOMAIN / TLS mismatch / `ERR_BLOCKED_BY_CLIENT` /
9
+ * `ECONNREFUSED` / HTTP parse-error / redirect-loop pages would be reset to
10
+ * pending on every iteration, the crawler would re-attempt them, they would
11
+ * fail again the same way, and the retry-target count would stay constant
12
+ * forever.
13
+ *
14
+ * Why these six and not others:
15
+ * - **dns** — `ENOTFOUND` / `ERR_NAME_NOT_RESOLVED` are authoritative DNS
16
+ * answers; the host is gone (or never existed). EAI_AGAIN is split out as
17
+ * `dns-transient` precisely so it is NOT in this set.
18
+ * - **tls** — cert expiry / SAN mismatch / SSL protocol errors require the
19
+ * server operator to fix something; retrying within the same archive run
20
+ * cannot succeed.
21
+ * - **client-blocked** — Chromium's `ERR_BLOCKED_*` family is a deliberate
22
+ * browser-side rejection; the request will be blocked identically every
23
+ * time the browser sees the same URL.
24
+ * - **parse-error** — the server's HTTP response is malformed (`Expected
25
+ * HTTP/, RTSP/ or ICE/`, `Unexpected end of stream`). Retrying the same
26
+ * request hits the same parser failure.
27
+ * - **connection-refused** — `ECONNREFUSED` is an authoritative TCP RST from
28
+ * the listener; either no process is listening on the port or its accept
29
+ * queue rejected the connection. Either way the answer is final until the
30
+ * server operator intervenes.
31
+ * - **redirect-loop** — `Maximum number of redirects exceeded` /
32
+ * `ERR_TOO_MANY_REDIRECTS` means the site's own redirect chain never
33
+ * terminates; the exact same chain is served on every future fetch until
34
+ * the site operator fixes it.
35
+ *
36
+ * Notably absent (intentionally retryable):
37
+ * - `connection-reset` / `connection-timeout` — could be middlebox or
38
+ * transient overload
39
+ * - `dns-transient` (EAI_AGAIN / EREFUSED) — local resolver hiccup
40
+ * - `local-network` — operator-side connectivity loss
41
+ * - `timeout` — slow but reachable server (HEAD-timeout escalation gives
42
+ * these a real chance)
43
+ * - `protocol` — puppeteer lifecycle race, often recovers on retry
44
+ * - `unknown` — by definition we don't know it's permanent, so we keep
45
+ * retrying (errs on the side of investigating)
46
+ */
47
+ export const PERMANENT_ERROR_KINDS = new Set([
48
+ 'dns',
49
+ 'tls',
50
+ 'client-blocked',
51
+ 'parse-error',
52
+ 'connection-refused',
53
+ 'redirect-loop',
54
+ ]);
@@ -0,0 +1,54 @@
1
+ /**
2
+ * Coarse cause of a crawl/scrape failure.
3
+ *
4
+ * The crawler stores only the raw error message (in `crawl_errors`,
5
+ * `page_errors`, or `error.log`); the cause is derived on read by
6
+ * `classifyErrorKind`, so existing archives gain classification without a
7
+ * re-crawl.
8
+ *
9
+ * Owned by the archive package because the crawler (for DNS-burned host
10
+ * caching), the archive layer itself (`--retry-failed` candidate selection)
11
+ * and `@nitpicker/query` (for `getErrorKinds` / `getSummary`) all need to
12
+ * classify error messages, and both crawler and query depend on archive
13
+ * (crawler cannot depend on query).
14
+ *
15
+ * ### transient vs persistent
16
+ *
17
+ * | kind | transient? | DNS-burn? | notes |
18
+ * | --- | --- | --- | --- |
19
+ * | `dns` | no | yes | NXDOMAIN; the host does not resolve at all |
20
+ * | `dns-transient` | **yes** | no | `EAI_AGAIN`; local resolver hiccup, retry often recovers |
21
+ * | `tls` | no | no | certificate issue, usually persistent until cert rotates |
22
+ * | `connection-refused` | mostly persistent | no | server actively rejecting on this port |
23
+ * | `connection-reset` | yes | no | TCP reset mid-stream, often transient |
24
+ * | `connection-timeout` | yes | no | TCP-level timeout (`ETIMEDOUT`); slow but reachable |
25
+ * | `local-network` | **yes** | no | local machine's network is unreachable / changed (WiFi, sleep, ICMP-unreachable, …) |
26
+ * | `parse-error` | mostly persistent | no | HTTP response could not be parsed (proxy, garbage, MITM) |
27
+ * | `client-blocked` | persistent (per browser) | no | Chromium-side `ERR_BLOCKED_BY_*` family — the browser actively refused the request (ad/tracker heuristics, CSP, CORP, administrator block list, …) |
28
+ * | `redirect-loop` | no | no | the redirect chain exceeded `follow-redirects`' `maxRedirects` limit — the site's own redirect configuration never converges |
29
+ * | `protocol` | yes | no | puppeteer protocol layer (frame detached, target closed, …) |
30
+ * | `timeout` | yes | no | puppeteer navigation timeout or HEAD pre-flight race timeout (`Timeout: <url>`) |
31
+ * | `unknown` | unknown | no | catch-all for messages no matcher recognised |
32
+ *
33
+ * Only `dns` is mark-target for the DNS-burned host cache; everything else is
34
+ * either too transient to burn (network glitch / browser hiccup) or too
35
+ * server-specific to extrapolate to "this whole host is dead."
36
+ *
37
+ * ### Derived constants that MUST be reviewed when this union changes
38
+ *
39
+ * - `PERMANENT_ERROR_KINDS` (`permanent-error-kinds.ts`) — the set of kinds
40
+ * excluded from `--retry-failed` so retry iterations actually converge.
41
+ * A new kind that is deterministically permanent (server-state, cert,
42
+ * browser-block, …) likely belongs here.
43
+ * - `PUPPETEER_FALLBACK_KINDS` (`@nitpicker/crawler`'s
44
+ * `crawler/is-puppeteer-fallback-candidate.ts`) — the set of kinds where
45
+ * one puppeteer attempt has a realistic chance of succeeding after
46
+ * HEAD+GET pre-flight exhausted retries. A new kind modelling a
47
+ * middlebox / WAF / slow-server quirk likely belongs here.
48
+ *
49
+ * Adding a kind without reviewing both sets risks a silent regression:
50
+ * `--retry-failed` re-trying a permanent failure forever (no PERMANENT
51
+ * entry), or a recoverable URL never reaching the puppeteer fallback (no
52
+ * PUPPETEER_FALLBACK entry).
53
+ */
54
+ export type ErrorKind = 'dns' | 'dns-transient' | 'connection-refused' | 'connection-reset' | 'connection-timeout' | 'tls' | 'local-network' | 'parse-error' | 'client-blocked' | 'redirect-loop' | 'timeout' | 'protocol' | 'unknown';
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,9 @@
1
+ /**
2
+ * Appends text data to a file at the specified path.
3
+ *
4
+ * Creates parent directories if they do not exist.
5
+ * A newline character is prepended to the data before appending.
6
+ * @param filePath - The absolute or relative path to the file to append to.
7
+ * @param data - The text content to append to the file.
8
+ */
9
+ export declare function appendText(filePath: string, data: string): Promise<void>;