@e280/quay 0.0.0-2 → 0.0.0-20
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +98 -0
- package/package.json +17 -11
- package/s/cellar/cask.ts +1 -13
- package/s/cellar/cellar.test.ts +25 -42
- package/s/cellar/cellar.ts +16 -20
- package/s/cellar/index.ts +0 -4
- package/s/cellar/mammoth.ts +50 -0
- package/s/cellar/mammoth.worker.bundle.ts +30 -0
- package/s/demo/main.bundle.ts +2 -3
- package/s/dom/components/breadcrumb/component.ts +6 -5
- package/s/dom/components/browser/component.ts +11 -7
- package/s/dom/components/browser/style.css.ts +31 -31
- package/s/dom/components/dropzone/component.ts +6 -4
- package/s/dom/components/dropzone/style.css.ts +12 -13
- package/s/dom/components/filter/component.ts +13 -8
- package/s/dom/components/outliner/component.ts +8 -5
- package/s/dom/components/searchbar/component.ts +13 -7
- package/s/dom/components/sort/component.ts +13 -9
- package/s/dom/theme.css.ts +66 -2
- package/s/dom/views/tree/component.ts +10 -8
- package/s/dom/views/tree/style.css.ts +10 -10
- package/s/genius/parts/hy-tree.ts +10 -9
- package/s/index.html.ts +68 -73
- package/s/index.ts +6 -1
- package/s/logic/aspects/codex/codex.ts +3 -3
- package/s/logic/aspects/codex/example.ts +1 -4
- package/s/logic/aspects/codex/parts/codex-item.ts +4 -4
- package/s/logic/aspects/codex/parts/hierarchy.ts +1 -0
- package/s/logic/aspects/codex/parts/types.ts +1 -1
- package/s/logic/aspects/dropzone.ts +20 -16
- package/s/logic/aspects/tree-trail.ts +5 -4
- package/s/logic/brain.ts +5 -3
- package/s/logic/group.ts +13 -10
- package/s/logic/presets/media/group.ts +5 -4
- package/s/logic/presets/media/library.test.ts +82 -0
- package/s/logic/presets/media/library.ts +249 -0
- package/s/logic/presets/media/schema.ts +10 -1
- package/s/logic/presets/opfs/schema.ts +1 -1
- package/s/logic/presets/plain/group.ts +2 -2
- package/s/logic/presets/plain/schema.ts +1 -1
- package/s/logic/types.ts +1 -1
- package/s/tests.test.ts +2 -0
- package/x/cellar/cask.d.ts +2 -4
- package/x/cellar/cask.js +3 -12
- package/x/cellar/cask.js.map +1 -1
- package/x/cellar/cellar.d.ts +9 -7
- package/x/cellar/cellar.js +17 -22
- package/x/cellar/cellar.js.map +1 -1
- package/x/cellar/cellar.test.d.ts +2 -3
- package/x/cellar/cellar.test.js +24 -39
- package/x/cellar/cellar.test.js.map +1 -1
- package/x/cellar/index.d.ts +0 -3
- package/x/cellar/index.js +0 -3
- package/x/cellar/index.js.map +1 -1
- package/x/cellar/mammoth.d.ts +23 -0
- package/x/cellar/mammoth.js +34 -0
- package/x/cellar/mammoth.js.map +1 -0
- package/x/cellar/mammoth.worker.bundle.d.ts +1 -0
- package/x/cellar/mammoth.worker.bundle.js +20 -0
- package/x/cellar/mammoth.worker.bundle.js.map +1 -0
- package/x/cellar/mammoth.worker.bundle.min.js +8 -0
- package/x/cellar/mammoth.worker.bundle.min.js.map +7 -0
- package/x/demo/main.bundle.js +2 -2
- package/x/demo/main.bundle.js.map +1 -1
- package/x/demo/main.bundle.min.js +229 -197
- package/x/demo/main.bundle.min.js.LEGAL.txt +33 -0
- package/x/demo/main.bundle.min.js.map +7 -0
- package/x/dom/components/breadcrumb/component.d.ts +1 -1
- package/x/dom/components/breadcrumb/component.js +6 -5
- package/x/dom/components/breadcrumb/component.js.map +1 -1
- package/x/dom/components/browser/component.d.ts +1 -1
- package/x/dom/components/browser/component.js +10 -7
- package/x/dom/components/browser/component.js.map +1 -1
- package/x/dom/components/browser/style.css.d.ts +1 -1
- package/x/dom/components/browser/style.css.js +31 -30
- package/x/dom/components/browser/style.css.js.map +1 -1
- package/x/dom/components/dropzone/component.d.ts +1 -1
- package/x/dom/components/dropzone/component.js +6 -4
- package/x/dom/components/dropzone/component.js.map +1 -1
- package/x/dom/components/dropzone/style.css.d.ts +1 -1
- package/x/dom/components/dropzone/style.css.js +12 -12
- package/x/dom/components/dropzone/style.css.js.map +1 -1
- package/x/dom/components/filter/component.d.ts +1 -1
- package/x/dom/components/filter/component.js +10 -8
- package/x/dom/components/filter/component.js.map +1 -1
- package/x/dom/components/outliner/component.d.ts +1 -1
- package/x/dom/components/outliner/component.js +7 -5
- package/x/dom/components/outliner/component.js.map +1 -1
- package/x/dom/components/searchbar/component.d.ts +1 -1
- package/x/dom/components/searchbar/component.js +12 -6
- package/x/dom/components/searchbar/component.js.map +1 -1
- package/x/dom/components/sort/component.d.ts +1 -1
- package/x/dom/components/sort/component.js +11 -9
- package/x/dom/components/sort/component.js.map +1 -1
- package/x/dom/components.d.ts +7 -7
- package/x/dom/theme.css.d.ts +1 -1
- package/x/dom/theme.css.js +65 -1
- package/x/dom/theme.css.js.map +1 -1
- package/x/dom/views/tree/component.d.ts +1 -6
- package/x/dom/views/tree/component.js +10 -8
- package/x/dom/views/tree/component.js.map +1 -1
- package/x/dom/views/tree/style.css.d.ts +1 -1
- package/x/dom/views/tree/style.css.js +10 -10
- package/x/dom/views/tree/style.css.js.map +1 -1
- package/x/genius/parts/hy-tree.js +9 -8
- package/x/genius/parts/hy-tree.js.map +1 -1
- package/x/index.d.ts +6 -1
- package/x/index.html +70 -167
- package/x/index.html.d.ts +1 -2
- package/x/index.html.js +67 -73
- package/x/index.html.js.map +1 -1
- package/x/index.js +6 -1
- package/x/index.js.map +1 -1
- package/x/logic/aspects/codex/codex.js +3 -3
- package/x/logic/aspects/codex/codex.js.map +1 -1
- package/x/logic/aspects/codex/example.d.ts +0 -1
- package/x/logic/aspects/codex/example.js +1 -3
- package/x/logic/aspects/codex/example.js.map +1 -1
- package/x/logic/aspects/codex/parts/codex-item.d.ts +1 -1
- package/x/logic/aspects/codex/parts/codex-item.js +4 -4
- package/x/logic/aspects/codex/parts/codex-item.js.map +1 -1
- package/x/logic/aspects/codex/parts/hierarchy.js +1 -0
- package/x/logic/aspects/codex/parts/hierarchy.js.map +1 -1
- package/x/logic/aspects/codex/parts/types.d.ts +1 -1
- package/x/logic/aspects/dropzone.d.ts +1 -1
- package/x/logic/aspects/dropzone.js +19 -15
- package/x/logic/aspects/dropzone.js.map +1 -1
- package/x/logic/aspects/tree-trail.d.ts +1 -1
- package/x/logic/aspects/tree-trail.js +4 -4
- package/x/logic/aspects/tree-trail.js.map +1 -1
- package/x/logic/brain.d.ts +4 -2
- package/x/logic/brain.js.map +1 -1
- package/x/logic/group.d.ts +7 -7
- package/x/logic/group.js +10 -8
- package/x/logic/group.js.map +1 -1
- package/x/logic/presets/media/group.d.ts +1 -1
- package/x/logic/presets/media/group.js +3 -3
- package/x/logic/presets/media/group.js.map +1 -1
- package/x/logic/presets/media/library.d.ts +59 -0
- package/x/logic/presets/media/library.js +201 -0
- package/x/logic/presets/media/library.js.map +1 -0
- package/x/logic/presets/media/library.test.d.ts +9 -0
- package/x/logic/presets/media/library.test.js +62 -0
- package/x/logic/presets/media/library.test.js.map +1 -0
- package/x/logic/presets/media/schema.d.ts +10 -1
- package/x/logic/presets/opfs/schema.d.ts +1 -1
- package/x/logic/presets/plain/group.js +2 -2
- package/x/logic/presets/plain/group.js.map +1 -1
- package/x/logic/presets/plain/schema.d.ts +1 -1
- package/x/logic/types.d.ts +1 -1
- package/x/tests.test.js +2 -0
- package/x/tests.test.js.map +1 -1
- package/s/cellar/forklift.ts +0 -9
- package/s/cellar/memory-forklift.ts +0 -29
- package/s/cellar/opfs-forklift.ts +0 -49
- package/x/cellar/forklift.d.ts +0 -7
- package/x/cellar/forklift.js +0 -2
- package/x/cellar/forklift.js.map +0 -1
- package/x/cellar/memory-forklift.d.ts +0 -9
- package/x/cellar/memory-forklift.js +0 -21
- package/x/cellar/memory-forklift.js.map +0 -1
- package/x/cellar/opfs-forklift.d.ts +0 -11
- package/x/cellar/opfs-forklift.js +0 -44
- package/x/cellar/opfs-forklift.js.map +0 -1
- package/x/genius/folio.md +0 -29
- package/x/genius/quay.md +0 -13
- package/x/genius/turbo.md +0 -21
- package/x/importmap.json +0 -47
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../node_modules/@e280/stz/s/collect.ts", "../../node_modules/@e280/renraku/s/core/taps/bind.ts", "../../node_modules/@e280/sten/s/themes/basic.ts", "../../node_modules/@e280/sten/s/themes/auto.ts", "../../node_modules/@e280/sten/s/colors/parts/codes.ts", "../../node_modules/@e280/sten/s/colors/parts/color-fns.ts", "../../node_modules/@e280/sten/s/colors/colorless.ts", "../../node_modules/@e280/sten/s/colors/colorful.ts", "../../node_modules/@e280/sten/s/utils/supports.ts", "../../node_modules/@e280/sten/s/colors/auto.ts", "../../node_modules/@e280/sten/s/shapers/errors.ts", "../../node_modules/@e280/sten/s/shapers/shaper.ts", "../../node_modules/@e280/sten/s/shapers/timestamp.ts", "../../node_modules/@e280/sten/s/shapers/auto.ts", "../../node_modules/@e280/sten/s/writers/deno.ts", "../../node_modules/@e280/sten/s/writers/node.ts", "../../node_modules/@e280/sten/s/writers/console.ts", "../../node_modules/@e280/sten/s/writers/auto.ts", "../../node_modules/@e280/sten/s/writers/void.ts", "../../node_modules/@e280/sten/s/shapers/none.ts", "../../node_modules/@e280/sten/s/logger.ts", "../../node_modules/@e280/renraku/s/core/taps/logger.ts", "../../node_modules/@e280/renraku/s/core/taps/error.ts", "../../node_modules/@e280/renraku/node_modules/@e280/stz/s/defer.ts", "../../node_modules/@e280/renraku/node_modules/@e280/stz/s/is.ts", "../../node_modules/@e280/renraku/node_modules/@e280/stz/s/ok/fns/ok.ts", "../../node_modules/@e280/renraku/node_modules/@e280/stz/s/ok/fns/err.ts", "../../node_modules/@e280/renraku/node_modules/@e280/stz/s/ok/fns/got.ts", "../../node_modules/@e280/renraku/node_modules/@e280/stz/s/dig/dig.ts", "../../node_modules/@e280/renraku/node_modules/@e280/stz/s/deadline.ts", "../../node_modules/@e280/renraku/node_modules/@e280/stz/s/disposer.ts", "../../node_modules/@e280/renraku/node_modules/@e280/stz/s/pubsub.ts", "../../node_modules/@e280/renraku/s/core/json-rpc.ts", "../../node_modules/@e280/renraku/s/core/errors.ts", "../../node_modules/@e280/renraku/s/core/execute.ts", "../../node_modules/@e280/renraku/s/core/endpoint.ts", "../../node_modules/@e280/renraku/s/core/remote-proxy.ts", "../../node_modules/@e280/renraku/s/core/remote.ts", "../../node_modules/@e280/renraku/s/core/mock.ts", "../../node_modules/@e280/renraku/s/transports/messenger/conduits/conduit.ts", "../../node_modules/@e280/renraku/s/transports/messenger/parts/helpers.ts", "../../node_modules/@e280/renraku/s/transports/messenger/conduits/postable.ts", "../../node_modules/@e280/renraku/s/transports/messenger/parts/meta.ts", "../../node_modules/@e280/renraku/s/defaults.ts", "../../node_modules/@e280/renraku/s/transports/messenger/parts/response-waiter.ts", "../../node_modules/@e280/renraku/s/transports/messenger/messenger.ts", "../../node_modules/@e280/comrade/s/parts/shells.ts", "../../node_modules/@e280/comrade/s/parts/default-tap.ts", "../../node_modules/@e280/comrade/s/parts/worker.ts", "../../node_modules/@e280/comrade/node_modules/@e280/stz/s/defer.ts", "../../node_modules/@e280/comrade/s/parts/thread.ts", "../../node_modules/@e280/comrade/s/parts/cluster.ts", "../../node_modules/@e280/comrade/s/comrade.ts", "../../node_modules/@e280/comrade/s/compat/browser.ts", "../../node_modules/@e280/comrade/s/index.browser.ts", "../../node_modules/@e280/mammoth/node_modules/@e280/stz/s/data/bytes.ts", "../../node_modules/@e280/mammoth/node_modules/@e280/stz/s/data/base-x.ts", "../../node_modules/@e280/mammoth/node_modules/@e280/stz/s/data/base-x-codecs.ts", "../../node_modules/@e280/mammoth/node_modules/@e280/stz/s/queue/queue.ts", "../../node_modules/@e280/mammoth/node_modules/@e280/stz/s/queue/lane.ts", "../../node_modules/@e280/mammoth/node_modules/@e280/stz/s/utensils/got.ts", "../../node_modules/@e280/mammoth/node_modules/@e280/stz/s/nap.ts", "../../node_modules/@e280/mammoth/node_modules/@e280/stz/s/time.ts", "../../node_modules/@e280/mammoth/s/core/utils/relaxer.ts", "../../node_modules/@e280/mammoth/s/core/buckets/memory-bucket.ts", "../../node_modules/@e280/mammoth/s/core/utils/is-not-found.ts", "../../node_modules/@e280/mammoth/s/core/buckets/opfs-bucket.ts", "../../node_modules/@awasm/noble/utils.js", "../../node_modules/@awasm/noble/hashes-abstract.js", "../../node_modules/@awasm/noble/constants.js", "../../node_modules/@awasm/noble/hashes.js", "../../node_modules/@awasm/noble/targets/wasm/blake3.js", "../../node_modules/@awasm/noble/targets/wasm/index.js", "../../node_modules/@e280/kv/node_modules/@e280/stz/s/is.ts", "../../node_modules/@e280/kv/node_modules/@e280/stz/s/utensils/got.ts", "../../node_modules/@e280/kv/s/utils/idb/range.ts", "../../node_modules/@e280/kv/s/utils/idb/wait.ts", "../../node_modules/@e280/kv/s/utils/idb/transactions.ts", "../../node_modules/@e280/kv/s/magazines/idb.ts", "../../node_modules/@e280/kv/s/utils/lex-sort.ts", "../../node_modules/@e280/kv/s/utils/scan-match.ts", "../../node_modules/@e280/kv/s/utils/scan-entries.ts", "../../node_modules/@e280/kv/s/magazines/memory.ts", "../../node_modules/@e280/kv/s/utils/idb/open.ts", "../../node_modules/@e280/kv/s/utils/store-operator.ts", "../../node_modules/@e280/kv/s/store.ts", "../../node_modules/@e280/kv/s/utils/operator.ts", "../../node_modules/@e280/kv/s/utils/prefixer.ts", "../../node_modules/@e280/kv/s/utils/json-codec.ts", "../../node_modules/@e280/kv/s/kv.ts", "../../node_modules/@e280/mammoth/s/core/consts.ts", "../../node_modules/@e280/mammoth/s/core/utils/save.ts", "../../node_modules/@e280/mammoth/s/core/utils/is-expired.ts", "../../node_modules/@e280/mammoth/s/core/manifest/fns/get-expired-writes.ts", "../../node_modules/@e280/mammoth/s/core/manifest/fns/move-write-to-trash.ts", "../../node_modules/@e280/mammoth/s/core/utils/cleanup.ts", "../../node_modules/@e280/mammoth/s/core/utils/random-id.ts", "../../node_modules/@e280/mammoth/s/core/manifest/manifest.ts", "../../node_modules/@e280/mammoth/s/core/manifest/fns/get-stats.ts", "../../node_modules/@e280/mammoth/s/core/manifest/fns/commit.ts", "../../node_modules/@e280/mammoth/s/core/utils/not-found.ts", "../../node_modules/@e280/mammoth/s/core/manifest/fns/need-info.ts", "../../node_modules/@e280/mammoth/s/core/manifest/fns/schedule-deletion.ts", "../../node_modules/@e280/mammoth/s/core/mammoth.ts", "../../s/cellar/mammoth.worker.bundle.ts"],
|
|
4
|
+
"sourcesContent": ["\nexport async function collect<X>(iterable: AsyncIterable<X>) {\n\tconst array: X[] = []\n\tfor await (const item of iterable) array.push(item)\n\treturn array\n}\n\n", "\nimport {Tap, TapContext} from \"../types.js\"\n\nexport function bindTap(tap: Tap, ctx: TapContext): Tap {\n\treturn {\n\t\terror: o => tap.error({...ctx, ...o}),\n\t\trpcRequest: o => tap.rpcRequest({...ctx, ...o}),\n\t\trpcError: o => tap.rpcError({...ctx, ...o}),\n\t}\n}\n\n", "\nimport {asTheme} from \"./theme.js\"\n\nexport const basicTheme = () => asTheme(colors => ({\n\tplain: colors.none,\n\terrMessage: colors.mix(colors.brightRed, colors.bold),\n\terrName: colors.red,\n\terrStack: colors.mix(colors.red, colors.dim),\n\ttimestamp: colors.blue,\n\ttimestampErr: colors.red,\n}))\n\n", "\nimport {basicTheme} from \"./basic.js\"\n\nexport function autoTheme() {\n\treturn basicTheme()\n}\n\n", "\nexport const codes = Object.freeze({\n\n\t// regular colors\n\tblack: \"\\u001b[30m\",\n\tred: \"\\u001b[31m\",\n\tgreen: \"\\u001b[32m\",\n\tyellow: \"\\u001b[33m\",\n\tblue: \"\\u001b[34m\",\n\tmagenta: \"\\u001b[35m\",\n\tcyan: \"\\u001b[36m\",\n\twhite: \"\\u001b[37m\",\n\n\t// bright colors\n\tbrightBlack: \"\\u001b[90m\",\n\tbrightRed: \"\\u001b[91m\",\n\tbrightGreen: \"\\u001b[92m\",\n\tbrightYellow: \"\\u001b[93m\",\n\tbrightBlue: \"\\u001b[94m\",\n\tbrightMagenta: \"\\u001b[95m\",\n\tbrightCyan: \"\\u001b[96m\",\n\tbrightWhite: \"\\u001b[97m\",\n\n\t// background colors\n\tbgBlack: \"\\u001b[40m\",\n\tbgRed: \"\\u001b[41m\",\n\tbgGreen: \"\\u001b[42m\",\n\tbgYellow: \"\\u001b[43m\",\n\tbgBlue: \"\\u001b[44m\",\n\tbgMagenta: \"\\u001b[45m\",\n\tbgCyan: \"\\u001b[46m\",\n\tbgWhite: \"\\u001b[47m\",\n\n\t// bright background colors\n\tbgBrightBlack: \"\\u001b[100m\",\n\tbgBrightRed: \"\\u001b[101m\",\n\tbgBrightGreen: \"\\u001b[102m\",\n\tbgBrightYellow: \"\\u001b[103m\",\n\tbgBrightBlue: \"\\u001b[104m\",\n\tbgBrightMagenta: \"\\u001b[105m\",\n\tbgBrightCyan: \"\\u001b[106m\",\n\tbgBrightWhite: \"\\u001b[107m\",\n\n\t// styles\n\tbold: \"\\u001b[1m\",\n\tdim: \"\\u001b[2m\",\n\titalic: \"\\u001b[3m\",\n\tunderline: \"\\u001b[4m\",\n\tinverse: \"\\u001b[7m\",\n\thidden: \"\\u001b[8m\",\n\tstrikethrough: \"\\u001b[9m\",\n\n\t// reset\n\treset: \"\\u001b[0m\",\n})\n\n", "\nimport {codes} from \"./codes.js\"\n\nexport type ColorFn = (s: string) => string\n\nexport const colorFns = () => ({\n\tnone: (s: string) => s,\n\tuncolor,\n\tmix,\n\thex,\n\trgb,\n\tbgRgb,\n})\n\nexport function uncolor(s: string) {\n\treturn s.replace(\n\t\t/[\\u001b\\u009b][[()#;?]*(?:[0-9]{1,4}(?:;[0-9]{0,4})*)?[0-9A-ORZcf-nqry=><]/g,\n\t\t\"\",\n\t)\n}\n\nexport function mix(...colorFns: ColorFn[]) {\n\treturn (s: string) => {\n\t\tfor (const fn of colorFns)\n\t\t\ts = fn(s)\n\t\treturn s\n\t}\n}\n\nexport function hex(hex: string) {\n\thex = hex.replace(/^#/, \"\")\n\tlet bigint: number\n\tlet r: number\n\tlet g: number\n\tlet b: number\n\n\tif (hex.length === 3)\n\t\tbigint = parseInt(hex.split('').map(c => c + c).join(''), 16)\n\telse if (hex.length === 6)\n\t\tbigint = parseInt(hex, 16)\n\telse\n\t\tthrow new Error('Invalid hex color')\n\n\tr = (bigint >> 16) & 255\n\tg = (bigint >> 8) & 255\n\tb = bigint & 255\n\treturn rgb(r, g, b)\n}\n\nexport function rgb(r: number, g: number, b: number) {\n\tconst code = `\\u001b[38;2;${r};${g};${b}m`\n\treturn (s: string) => `${code}${s}${codes.reset}`\n}\n\nexport function bgRgb(r: number, g: number, b: number) {\n\tconst code = `\\u001b[48;2;${r};${g};${b}m`\n\treturn (s: string) => `${code}${s}${codes.reset}`\n}\n\n", "\nimport {Colors} from \"./colorful.js\"\nimport {codes} from \"./parts/codes.js\"\nimport {colorFns} from \"./parts/color-fns.js\"\n\nexport const colorless = {\n\t...<{[key in keyof typeof codes]: (s: string) => string}>(\n\t\tObject.fromEntries(\n\t\t\tObject.entries(codes)\n\t\t\t\t.map(([key]) => [\n\t\t\t\t\tkey,\n\t\t\t\t\t(s: string) => s,\n\t\t\t\t])\n\t\t)\n\t),\n\t...colorFns(),\n} as Colors\n\n", "\nimport {codes} from \"./parts/codes.js\"\nimport {colorFns} from \"./parts/color-fns.js\"\n\nexport type Colors = typeof colorful\n\nexport const colorful = {\n\t...<{[key in keyof typeof codes]: (s: string) => string}>(\n\t\tObject.fromEntries(\n\t\t\tObject.entries(codes)\n\t\t\t\t.map(([key, code]) => [\n\t\t\t\t\tkey,\n\t\t\t\t\t(s: string) => `${code}${s}${codes.reset}`,\n\t\t\t\t])\n\t\t)\n\t),\n\t...colorFns(),\n}\n\n", "\ndeclare const Deno: any\n\nexport function isDeno() {\n\treturn typeof Deno !== \"undefined\" && typeof Deno.version !== \"undefined\"\n}\n\nexport function isNode() {\n\treturn (\n\t\ttypeof process !== \"undefined\" &&\n\t\tprocess.versions &&\n\t\tprocess.versions.node\n\t)\n}\n\nexport function isColorSupported() {\n\tif (isNode())\n\t\treturn (process.env.FORCE_COLOR) || (\n\t\t\tprocess.stdout.isTTY &&\n\t\t\tprocess.env.TERM !== \"dumb\"\n\t\t)\n\n\telse if (isDeno())\n\t\treturn (Deno.env.get(\"FORCE_COLOR\")) || (\n\t\t\tDeno.isatty(Deno.stdout.rid) &&\n\t\t\tDeno.env.get(\"TERM\") !== \"dumb\"\n\t\t)\n\n\telse\n\t\treturn false\n}\n\nexport function exit(code: number) {\n\tif (isNode())\n\t\tprocess.exit(code)\n\telse if (isDeno())\n\t\tDeno.exit(code)\n}\n\nexport function hasEnv(name: string): boolean {\n\tif (isNode())\n\t\treturn name in process.env\n\telse if (isDeno())\n\t\treturn Deno.env.get(name) !== undefined\n\treturn false\n}\n\nexport function hasArg(arg: string): boolean {\n\tif (isNode())\n\t\treturn process.argv.slice(1).includes(arg)\n\telse if (isDeno())\n\t\treturn Deno.args.includes(arg)\n\telse\n\t\treturn false\n}\n\nfunction findArgValue(name: string, args: string[]) {\n\tfor (const arg of args) {\n\t\tif (arg.includes(\"=\")) {\n\t\t\tconst [first, ...rest] = arg.split(\"=\")\n\t\t\tif (first === name)\n\t\t\t\treturn rest.join(\"=\")\n\t\t}\n\t}\n}\n\nexport function getArg(name: string) {\n\tif (isNode())\n\t\treturn findArgValue(name, process.argv.slice(1))\n\telse if (isDeno())\n\t\treturn findArgValue(name, Deno.args)\n}\n\nexport function getEnv(name: string): string | undefined {\n\tif (isNode())\n\t\treturn process.env[name]\n\telse if (isDeno())\n\t\treturn Deno.env.get(name)\n}\n\nexport async function writeStdout(line: string) {\n\tif (isNode())\n\t\tprocess.stdout.write(line + \"\\n\")\n\telse if (isDeno())\n\t\tawait Deno.stdout.write(new TextEncoder().encode(line + \"\\n\"))\n\telse\n\t\tconsole.log(line)\n}\n\nexport async function writeStderr(line: string) {\n\tif (isNode())\n\t\tprocess.stderr.write(line + \"\\n\")\n\telse if (isDeno())\n\t\tawait Deno.stderr.write(new TextEncoder().encode(line + \"\\n\"))\n\telse\n\t\tconsole.error(line)\n}\n\n", "\nimport {colorless} from \"./colorless.js\"\nimport {colorful, Colors} from \"./colorful.js\"\nimport {isColorSupported} from \"../utils/supports.js\"\n\nexport const autoColors = (): Colors => {\n\treturn isColorSupported()\n\t\t? colorful\n\t\t: colorless\n}\n\n", "\nimport {Shaper} from \"./shaper.js\"\n\nexport const errorsShaper = (): Shaper => ({colors, theme}) => {\n\tconst palette = theme(colors)\n\n\tfunction errstring(error: Error) {\n\t\tconst stack = error.stack\n\t\t\t? \"\\n\" + error.stack + \"\\n\"\n\t\t\t: \"\"\n\t\treturn [\n\t\t\tpalette.errName(error.name + \":\"),\n\t\t\tpalette.errMessage(error.message),\n\t\t].join(\" \") + palette.errStack(stack)\n\t}\n\n\tfunction processErrors(item: any) {\n\t\treturn (item && item instanceof Error)\n\t\t\t? errstring(item)\n\t\t\t: item\n\t}\n\n\tfunction processAll(item: any) {\n\t\treturn (item && item instanceof Error)\n\t\t\t? errstring(item)\n\t\t\t: palette.errMessage(item)\n\t}\n\n\treturn {\n\t\tstdout: items => items.map(processErrors),\n\t\tstderr: items => items.map(processAll),\n\t}\n}\n\n", "\nimport {Theme} from \"../themes/theme.js\"\nimport {Colors} from \"../colors/colorful.js\"\n\nexport type ShaperContext = {\n\tcolors: Colors\n\ttheme: Theme\n}\n\nexport type Shaper = (context: ShaperContext) => ShaperFns\n\nexport type ShaperFns = {\n\tstdout: (items: any[]) => any[]\n\tstderr: (items: any[]) => any[]\n}\n\nexport function asShaper(shaper: Shaper) {\n\treturn shaper\n}\n\nexport function combineShapers(...shapers: Shaper[]): Shaper {\n\treturn context => ({\n\t\tstdout: items => {\n\t\t\tfor (const shaper of shapers)\n\t\t\t\titems = shaper(context).stdout(items)\n\t\t\treturn items\n\t\t},\n\t\tstderr: items => {\n\t\t\tfor (const shaper of shapers)\n\t\t\t\titems = shaper(context).stderr(items)\n\t\t\treturn items\n\t\t},\n\t})\n}\n\n", "\nimport {Shaper} from \"./shaper.js\"\n\nexport type TimestampOptions = {\n\ticon: string | undefined\n\tnow: () => number\n}\n\nfunction defaultTimestampOptions(): TimestampOptions {\n\treturn {\n\t\ticon: \"\uD83D\uDEA8\",\n\t\tnow: () => Date.now(),\n\t}\n}\n\nexport const timestampShaper = (options?: Partial<TimestampOptions>): Shaper => ({colors, theme}) => {\n\tconst opts = {...defaultTimestampOptions(), ...options}\n\tconst palette = theme(colors)\n\n\tconst date = new Date(opts.now())\n\n\tconst year = date.getUTCFullYear().toString().padStart(4, \"0\")\n\tconst month = (date.getUTCMonth() + 1).toString().padStart(2, \"0\")\n\tconst day = date.getUTCDate().toString().padStart(2, \"0\")\n\tconst calendar = `${year}-${month}-${day}`\n\n\tconst hour = date.getUTCHours().toString().padStart(2, \"0\")\n\tconst minute = date.getUTCMinutes().toString().padStart(2, \"0\")\n\tconst second = date.getUTCSeconds().toString().padStart(2, \"0\")\n\tconst milliseconds = date.getUTCMilliseconds().toString().padStart(3, \"0\")\n\tconst clock = `${hour}:${minute}:${second}.${milliseconds}`\n\n\tconst stamp = `${calendar}::${clock}`\n\n\treturn {\n\t\tstdout: items => [\n\t\t\tpalette.timestamp(stamp),\n\t\t\t...items,\n\t\t],\n\t\tstderr: items => [\n\t\t\tpalette.timestampErr(stamp),\n\t\t\t...[opts.icon].filter(Boolean),\n\t\t\t...items,\n\t\t],\n\t}\n}\n\n", "\nimport {errorsShaper} from \"./errors.js\"\nimport {combineShapers} from \"./shaper.js\"\nimport {timestampShaper} from \"./timestamp.js\"\n\nexport function autoShaper() {\n\treturn combineShapers(\n\t\terrorsShaper(),\n\t\ttimestampShaper(),\n\t)\n}\n\n", "\nimport {Writer} from \"./writer.js\"\n\ndeclare const Deno: any\n\nexport const denoWriter = (): Writer => ({\n\tstdout: async line => {\n\t\tawait Deno.stdout.write(new TextEncoder().encode(line + \"\\n\"))\n\t},\n\tstderr: async line => {\n\t\tawait Deno.stderr.write(new TextEncoder().encode(line + \"\\n\"))\n\t},\n})\n\n", "\nimport {Writer} from \"./writer.js\"\n\nexport const nodeWriter = (): Writer => ({\n\tstdout: async(line: string) => void process.stdout.write(line + \"\\n\"),\n\tstderr: async(line: string) => void process.stderr.write(line + \"\\n\"),\n})\n\n", "\nimport {Writer} from \"./writer.js\"\n\nexport const consoleWriter = (): Writer => ({\n\tstdout: async line => console.log(line),\n\tstderr: async line => console.error(line),\n})\n\n", "\nimport {Writer} from \"./writer.js\"\nimport {denoWriter} from \"./deno.js\"\nimport {nodeWriter} from \"./node.js\"\nimport {consoleWriter} from \"./console.js\"\nimport {isDeno, isNode} from \"../utils/supports.js\"\n\nexport const autoWriter = (): Writer => {\n\tif (isDeno()) return denoWriter()\n\telse if (isNode()) return nodeWriter()\n\telse return consoleWriter()\n}\n\n", "\nimport {Writer} from \"./writer.js\"\n\nexport const voidWriter = (): Writer => ({\n\tstdout: async() => undefined,\n\tstderr: async() => undefined,\n})\n\n", "\nimport {Shaper} from \"./shaper.js\"\n\nexport function noneShaper(): Shaper {\n\treturn () => ({\n\t\tstdout: items => items,\n\t\tstderr: items => items,\n\t})\n}\n\n", "\nimport {Theme} from \"./themes/theme.js\"\nimport {Writer} from \"./writers/writer.js\"\nimport {autoTheme} from \"./themes/auto.js\"\nimport {autoColors} from \"./colors/auto.js\"\nimport {autoShaper} from \"./shapers/auto.js\"\nimport {autoWriter} from \"./writers/auto.js\"\nimport {basicTheme} from \"./themes/basic.js\"\nimport {denoWriter} from \"./writers/deno.js\"\nimport {nodeWriter} from \"./writers/node.js\"\nimport {voidWriter} from \"./writers/void.js\"\nimport {noneShaper} from \"./shapers/none.js\"\nimport {colorless} from \"./colors/colorless.js\"\nimport {errorsShaper} from \"./shapers/errors.js\"\nimport {consoleWriter} from \"./writers/console.js\"\nimport {colorful, Colors} from \"./colors/colorful.js\"\nimport {timestampShaper} from \"./shapers/timestamp.js\"\nimport {combineShapers, Shaper} from \"./shapers/shaper.js\"\n\nexport class Logger {\n\tstatic writers = {\n\t\tauto: autoWriter,\n\t\tvoid: voidWriter,\n\t\tdeno: denoWriter,\n\t\tnode: nodeWriter,\n\t\tconsole: consoleWriter,\n\t}\n\n\tstatic colors = {\n\t\tauto: autoColors,\n\t\tcolorful: () => colorful,\n\t\tcolorless: () => colorless,\n\t}\n\n\tstatic themes = {\n\t\tauto: autoTheme,\n\t\tbasic: basicTheme,\n\t}\n\n\tstatic shapers = {\n\t\tauto: autoShaper,\n\t\tnone: noneShaper,\n\t\terrors: errorsShaper,\n\t\ttimestamp: timestampShaper,\n\t}\n\n\twriter: Writer = Logger.writers.auto()\n\tcolors: Colors = Logger.colors.auto()\n\ttheme: Theme = Logger.themes.auto()\n\tshaper: Shaper = Logger.shapers.auto()\n\n\tasync log(...items: any[]) {\n\t\tawait this.writer.stdout(\n\t\t\tthis.shaper(this).stdout(items).join(\" \")\n\t\t)\n\t}\n\n\tasync error(...items: any[]) {\n\t\tawait this.writer.stderr(\n\t\t\tthis.shaper(this).stderr(items).join(\" \")\n\t\t)\n\t}\n\n\tsetWriter(writer: Writer) {\n\t\tthis.writer = writer\n\t\treturn this\n\t}\n\n\tsetColors(colors: Colors) {\n\t\tthis.colors = colors\n\t\treturn this\n\t}\n\n\tsetTheme(theme: Theme) {\n\t\tthis.theme = theme\n\t\treturn this\n\t}\n\n\tsetShaper(...shapers: Shaper[]) {\n\t\tthis.shaper = combineShapers(...shapers)\n\t\treturn this\n\t}\n}\n\n", "\nimport {Logger} from \"@e280/sten\"\nimport {Tap, HttpMeta, TapContext} from \"../types.js\"\n\nexport class LoggerTap extends Logger implements Tap {\n\tstatic dummy() {\n\t\treturn new this().setWriter(Logger.writers.void())\n\t}\n\n\trpcRequest: Tap[\"rpcRequest\"] = async({request, ...context}) => {\n\t\tconst g = this.colors.none\n\t\tthis.log(\n\t\t\t...this.#context(context),\n\t\t\tg(`${request.method}()`),\n\t\t)\n\t}\n\n\trpcError: Tap[\"rpcError\"] = async({request, error, ...context}) => {\n\t\tthis.error(\n\t\t\t...this.#context(context),\n\t\t\t`${request.method}()`,\n\t\t\terror,\n\t\t)\n\t}\n\n\t#context({meta, label, remote}: TapContext) {\n\t\tconst cRemote = this.colors.mix(this.colors.blue, this.colors.dim)\n\t\tconst cLocal = this.colors.mix(this.colors.cyan, this.colors.dim)\n\t\treturn [\n\t\t\tmeta\n\t\t\t\t? this.#meta(meta)\n\t\t\t\t: undefined,\n\t\t\tlabel\n\t\t\t\t? label\n\t\t\t\t: undefined,\n\t\t\tremote === undefined\n\t\t\t\t? undefined\n\t\t\t\t: remote\n\t\t\t\t\t? cRemote(\"<-\")\n\t\t\t\t\t: cLocal(\"->\"),\n\t\t].filter(Boolean)\n\t}\n\n\t#meta(meta: HttpMeta) {\n\t\tconst {headers} = meta.request\n\t\treturn [\n\t\t\tthis.colors.yellow(`[${meta.ip}]`),\n\t\t\tthis.colors.green(headers.origin ?headers.origin :\"(no-origin)\"),\n\t\t].join(\" \")\n\t}\n}\n\n", "\nimport {Tap} from \"../types.js\"\nimport {LoggerTap} from \"./logger.js\"\n\nexport class ErrorTap extends LoggerTap implements Tap {\n\trpcRequest: Tap[\"rpcRequest\"] = async() => {}\n}\n\n", "\n/** a promise which can be resolved from the outside */\nexport type Deferred<R = void> = {\n\tpromise: Promise<R>\n\tresolve: (result: R) => void\n\treject: (reason: any) => void\n\n\t/** ties the fate of this deferred promise to the outcome of the provided outsidePromise */\n\tentangle: (outsidePromise: Promise<R>) => Promise<R>\n}\n\n/** returns a deferred promise with exposed resolve and reject fns */\nexport function defer<R = void>(): Deferred<R> {\n\tlet resolve!: (result: R) => void\n\tlet reject!: (reason: any) => void\n\n\tconst promise = new Promise<R>((res, rej) => {\n\t\tresolve = res\n\t\treject = rej\n\t})\n\n\tfunction entangle(outside: Promise<R>) {\n\t\toutside.then(resolve).catch(reject)\n\t\treturn promise\n\t}\n\n\treturn {promise, resolve, reject, entangle}\n}\n\n", "\nexport const is = Object.freeze({\n\n\t/** not undefined or null */\n\thappy: <X>(x: X): x is NonNullable<X> =>\n\t\tx !== undefined && x !== null,\n\n\t/** undefined or null */\n\tsad: (x: any): x is (undefined | null) =>\n\t\tx === undefined || x === null,\n\n\tboolean: (x: any): x is boolean =>\n\t\ttypeof x === \"boolean\",\n\n\tnumber: (x: any): x is number =>\n\t\ttypeof x === \"number\",\n\n\tstring: (x: any): x is string =>\n\t\ttypeof x === \"string\",\n\n\tbigint: (x: any): x is bigint =>\n\t\ttypeof x === \"bigint\",\n\n\tobject: <X>(x: X): x is object & NonNullable<X> =>\n\t\ttypeof x === \"object\" && x !== null,\n\n\tarray: (x: any | any[]): x is any[] =>\n\t\tArray.isArray(x),\n\n\tfn: (x: any): x is (...a: any[]) => any =>\n\t\ttypeof x === \"function\",\n\n\tsymbol: (x: any): x is symbol =>\n\t\ttypeof x === \"symbol\",\n})\n\n", "\nimport type {Ok} from \"../types/ok.js\"\n\n/** success */\nexport function ok<Value>(value: Value): Ok<Value> {\n\treturn {ok: true, value}\n}\n\n", "\nimport type {Err} from \"../types/err.js\"\n\n/** failure */\nexport function err<E>(error: E): Err<E> {\n\treturn {ok: false, error}\n}\n\n", "\nimport type {Result} from \"../types/result.js\"\n\n/** return ok value, otherwise throw error */\nexport function gotOk<Value, E>(result: Result<Value, E>): Value {\n\tif (result.ok)\n\t\treturn result.value\n\n\tconst {error} = result\n\n\tif (error instanceof Error)\n\t\tthrow error\n\n\telse if (typeof error === \"string\")\n\t\tthrow new Error(error)\n\n\telse\n\t\tthrow new Error(\"unknown\")\n}\n\n/** return error, otherwise throw error */\nexport function gotErr<E>(result: Result<unknown, E>): E {\n\tif (result.ok) throw new Error(\"didn't get needed error\")\n\treturn result.error\n}\n\n/** @deprecated renamed to `gotOk` */\nexport const needOk = gotOk\n\n/** @deprecated renamed to `gotErr` */\nexport const needErr = gotErr\n\n", "\nimport {is} from \"../is.js\"\nimport {ok, err} from \"../ok/index.js\"\n\n/** drill into an object/array tree and return the value at the given path */\nexport function dig<Value>(\n\t\ttarget: any,\n\t\tpath: (string | number)[],\n\t) {\n\n\tlet current: any = target\n\n\tfor (const key of path) {\n\t\tif (!(is.object(current) || is.array(current)))\n\t\t\treturn err(\"not traversable\" as const)\n\n\t\tif (!Object.hasOwn(current, key))\n\t\t\treturn err(\"not found\" as const)\n\n\t\tcurrent = current[key]\n\t}\n\n\treturn ok(current as Value)\n}\n\n", "\nexport class DeadlineError extends Error {\n\tname = this.constructor.name\n\tconstructor(public milliseconds: number) {\n\t\tsuper(`deadline exceeded (${(milliseconds / 1000).toFixed(1)} seconds)`)\n\t}\n}\n\n/** set a deadline for a fn to do something, will reject with a `DeadlineError` if it takes too long */\nexport function deadline<R>(milliseconds: number, fn: () => Promise<R>) {\n\tif (milliseconds <= 0 || milliseconds === Infinity)\n\t\treturn fn()\n\n\treturn new Promise<R>((resolve, reject) => {\n\t\tconst id = setTimeout(\n\t\t\t() => reject(new DeadlineError(milliseconds)),\n\t\t\tmilliseconds,\n\t\t)\n\t\tfn()\n\t\t\t.then(resolve)\n\t\t\t.catch(reject)\n\t\t\t.finally(() => clearTimeout(id))\n\t})\n}\n\n", "\nexport type Disposer = {\n\t(): void\n\tschedule: (...fns: (() => void)[]) => Disposer\n}\n\nexport function disposer(): Disposer {\n\tlet fns: (() => void)[] = []\n\n\tfunction d() {\n\t\tfor (const fn of fns) fn()\n\t\tfns = []\n\t}\n\n\td.schedule = (...newFns: (() => void)[]) => {\n\t\tfns.push(...newFns)\n\t\treturn d\n\t}\n\n\treturn d\n}\n\n", "\nimport {defer} from \"./defer.js\"\n\nexport type Listener<A extends any[]> = (...a: A) => (void | Promise<void>)\n\nexport interface Xub<A extends any[] = []> {\n\n\t/** publish to all subscribed listeners. */\n\tpublish(...a: A): Promise<void>\n\n\t/** subscribe a listener function. */\n\tsubscribe(fn: Listener<A>): () => void\n\n\t/** publish to all subscribed listeners, with pubsub facilities. */\n\tpub: Pub<A>\n\n\t/** subscribe a listener function, with pubsub facilities. */\n\tsub: Sub<A>\n\n\t/**\n\t * subscribe a listener function.\n\t * @alias subscribe\n\t */\n\ton(fn: Listener<A>): () => void\n\n\t/** wait for the next published value */\n\tnext(fn?: Listener<A>): Promise<A>\n\n\t/** wipe all listeners attached to this. */\n\tclear(): void\n}\n\n/** subscriber fn that can be published to. */\nexport interface Sub<A extends any[] = []> extends Xub<A> {\n\t(fn: Listener<A>): () => void\n}\n\n/** publisher fn that can be published to. */\nexport interface Pub<A extends any[] = []> extends Xub<A> {\n\t(...a: A): Promise<void>\n}\n\n/** make pubsub facilities */\nexport function xub<A extends any[] = []>() {\n\tconst set = new Set<Listener<A>>()\n\n\tasync function publish(...a: A) {\n\t\tawait Promise.all([...set].map(fn => fn(...a)))\n\t}\n\n\tfunction subscribe(fn: Listener<A>) {\n\t\tset.add(fn)\n\t\treturn () => { set.delete(fn) }\n\t}\n\n\tasync function pub(...a: A) {\n\t\treturn publish(...a)\n\t}\n\n\tfunction sub(fn: Listener<A>) {\n\t\treturn subscribe(fn)\n\t}\n\n\tasync function next(fn?: Listener<A>) {\n\t\tconst {promise, resolve} = defer<A>()\n\t\tconst unsubscribe = sub(async(...a) => {\n\t\t\tif (fn) await fn(...a)\n\t\t\tresolve(a)\n\t\t\tunsubscribe()\n\t\t})\n\t\treturn promise\n\t}\n\n\tfunction clear() {\n\t\tset.clear()\n\t}\n\n\tconst x = {\n\t\tpub,\n\t\tsub,\n\t\tpublish,\n\t\tsubscribe,\n\t\ton: subscribe,\n\t\tnext,\n\t\tclear,\n\t} as Xub<A>\n\n\tObject.assign(sub, x)\n\tObject.assign(pub, x)\n\treturn x\n}\n\n/** create a subscriber fn that also has pubsub facilities */\nexport function sub<A extends any[] = []>(listener?: Listener<A>): Sub<A> {\n\tconst x = xub<A>()\n\tif (listener) x.sub(listener)\n\treturn x.sub\n}\n\n/** create a publisher fn that also has pubsub facilities */\nexport function pub<A extends any[] = []>(listener?: Listener<A>): Pub<A> {\n\tconst x = xub<A>()\n\tif (listener) x.sub(listener)\n\treturn x.pub\n}\n\n", "\nexport namespace JsonRpc {\n\texport type Requestish = Request | Request[]\n\texport type Respondish = Response | Response[]\n\texport type Bidirectional = Requestish | Respondish\n\n\t/////////////////////////////////////////////////////////////\n\n\texport const version = \"2.0\"\n\n\texport type Request<P extends Params = any> = (\n\t\t| Query<P>\n\t\t| Notification<P>\n\t)\n\n\texport type Response<Result = any> = (\n\t\t| Success<Result>\n\t\t| Failure\n\t)\n\n\texport type Serializable = (\n\t\t| void\n\t\t| null\n\t\t| undefined\n\t\t| boolean\n\t\t| number\n\t\t| string\n\t\t| Serializable[]\n\t\t| {[key: string]: Serializable}\n\t)\n\n\t/////////////////////////////////////////////////////////////\n\n\texport type Id = number | string\n\texport type Params = Serializable[] | Record<string, Serializable>\n\n\texport type Notification<P extends Params> = {\n\t\tjsonrpc: string\n\t\tmethod: string\n\t\tparams: P\n\t}\n\n\texport type Query<P extends Params> = {\n\t\tid: Id\n\t\tjsonrpc: string\n\t\tmethod: string\n\t\tparams: P\n\t}\n\n\texport type Error = {\n\t\tcode: number\n\t\tmessage: string\n\t\tdata?: any\n\t}\n\n\texport type Success<Result> = {\n\t\tjsonrpc: \"2.0\"\n\t\tid: Id\n\t\tresult: Result\n\t}\n\n\texport type Failure = {\n\t\tjsonrpc: \"2.0\"\n\t\tid: Id\n\t\terror: Error\n\t}\n\n\t/////////////////////////////////////////////////////////////\n\n\texport function getId(request: Request): Id | null {\n\t\treturn \"id\" in request\n\t\t\t? request.id\n\t\t\t: null\n\t}\n\n\texport const errorCodes = {\n\t\tserverError: -32000,\n\t\tunexposedError: -32001,\n\t}\n}\n\n", "\n/**\n * An error that has a publicly viewable name and message.\n * - this error class, and its subclasses, are the only kinds of errors that renraku will send back to clients\n * - so if you want a client to be able to read an error message you throw, it must be a subclass of ExposedError\n */\nexport class ExposedError extends Error {\n\treadonly name = this.constructor.name\n}\n\n////////////////////////////////////////////////////\n\nexport class RemoteError extends Error {\n\treadonly name = this.constructor.name\n}\n\nexport class RemoteTimeoutError extends RemoteError {\n\treadonly name = this.constructor.name\n}\n\n////////////////////////////////////////////////////\n\nexport class HttpError extends Error {\n\treadonly name = this.constructor.name\n\treadonly code: number\n\n\tconstructor(code: number, message: string) {\n\t\tsuper(message)\n\t\tthis.code = code\n\t}\n}\n\n", "\nimport {Tap} from \"./types.js\"\nimport {JsonRpc} from \"./json-rpc.js\"\nimport {ExposedError} from \"./errors.js\"\n\nexport async function execute<R>({\n\t\ttap,\n\t\trequest,\n\t\taction,\n\t}: {\n\t\ttap: Tap\n\t\trequest: JsonRpc.Request\n\t\taction: () => Promise<R>\n\t}): Promise<JsonRpc.Response<R> | null> {\n\n\tconst id = JsonRpc.getId(request)\n\n\ttry {\n\t\tconst result = await action()\n\n\t\tif (id === null)\n\t\t\treturn null\n\n\t\treturn {\n\t\t\tid,\n\t\t\tresult,\n\t\t\tjsonrpc: JsonRpc.version,\n\t\t}\n\t}\n\n\tcatch (error) {\n\t\ttap.rpcError({request, error})\n\n\t\tif (id === null)\n\t\t\treturn null\n\n\t\treturn {\n\t\t\tid,\n\t\t\tjsonrpc: JsonRpc.version,\n\t\t\terror: (error instanceof ExposedError)\n\t\t\t\t? {\n\t\t\t\t\tcode: JsonRpc.errorCodes.serverError,\n\t\t\t\t\tmessage: error.message,\n\t\t\t\t}\n\t\t\t\t: {\n\t\t\t\t\tcode: JsonRpc.errorCodes.unexposedError,\n\t\t\t\t\tmessage: `unexposed error`,\n\t\t\t\t},\n\t\t}\n\t}\n}\n\n", "\nimport {dig, needOk} from \"@e280/stz\"\nimport {execute} from \"./execute.js\"\nimport {ErrorTap} from \"./taps/error.js\"\nimport {Endpoint, Fn, Fns, Tap} from \"./types.js\"\n\nexport type EndpointOptions<F extends Fns> = {\n\tfns: F\n\ttap?: Tap\n}\n\n/**\n * Create a renraku endpoint for your fns.\n * - an endpoint is a function that accepts json rpc requests\n * - for each request, it calls the appropriate fn\n * - it then returns the fn's in json rpc response format\n */\nexport function makeEndpoint<F extends Fns>(options: EndpointOptions<F>): Endpoint {\n\tconst tap = options.tap ?? new ErrorTap()\n\n\treturn async request => {\n\t\tconst path = request.method.split(\".\")\n\t\tconst fn = needOk(dig(options.fns, path)) as Fn\n\t\tconst action = async() => await fn(...request.params)\n\n\t\ttap.rpcRequest({request})\n\n\t\tconst response = await execute({\n\t\t\ttap,\n\t\t\trequest,\n\t\t\taction,\n\t\t})\n\n\t\treturn response\n\t}\n}\n\n", "\nimport {Fn, Fns} from \"./types.js\"\n\nexport const tune = Symbol(\"tune\")\nexport const query = Symbol(\"query\")\nexport const notify = Symbol(\"notify\")\nexport const settings = Symbol(\"settings\")\n\nexport type TuneSymbol = typeof tune\nexport type QuerySymbol = typeof query\nexport type NotifySymbol = typeof notify\nexport type SettingsSymbol = typeof settings\n\nexport type Executor = (\n\tpath: string[],\n\targs: any[],\n\tsettings: Settings,\n) => Promise<any>\n\nexport type Settings = {\n\tnotify?: boolean\n\ttransfer?: Transferable[]\n}\n\nexport type Remote<F extends Fn | Fns> = (\n\tF extends Fn\n\t\t? F & {\n\t\t\t[tune]: (settings: Settings) => F\n\t\t\t[query]: F\n\t\t\t[notify]: F\n\t\t\t[settings]: Settings\n\t\t}\n\t\t: F extends Fns\n\t\t\t? {[K in keyof F]: Remote<F[K]>}\n\t\t\t: never\n)\n\nexport function remoteProxy<F extends Fns>(executor: Executor) {\n\n\tfunction recurse(path: string[]) {\n\t\tconst currentSettings: Settings = {notify: undefined}\n\n\t\treturn new Proxy((() => {}) as any, {\n\t\t\tapply: (_, _this, args) => {\n\t\t\t\treturn executor(path, args, currentSettings)\n\t\t\t},\n\t\t\tget: (target, key: string | QuerySymbol | NotifySymbol | TuneSymbol | SettingsSymbol) => {\n\n\t\t\t\tif (key === \"then\")\n\t\t\t\t\treturn undefined\n\n\t\t\t\tif (key === tune)\n\t\t\t\t\treturn (settings: Settings) => (...args: any[]) => executor(path, args, {\n\t\t\t\t\t\t...currentSettings,\n\t\t\t\t\t\t...settings,\n\t\t\t\t\t})\n\n\t\t\t\tif (key === notify)\n\t\t\t\t\treturn (...args: any[]) => executor(path, args, {\n\t\t\t\t\t\t...currentSettings,\n\t\t\t\t\t\tnotify: true,\n\t\t\t\t\t})\n\n\t\t\t\tif (key === query)\n\t\t\t\t\treturn (...args: any[]) => executor(path, args, {\n\t\t\t\t\t\t...currentSettings,\n\t\t\t\t\t\tnotify: false,\n\t\t\t\t\t})\n\n\t\t\t\tif (key === settings)\n\t\t\t\t\treturn currentSettings\n\n\t\t\t\tif (!target[key])\n\t\t\t\t\ttarget[key] = recurse([...path, key])\n\n\t\t\t\treturn target[key]\n\t\t\t},\n\t\t\tset: (target, key: string, value: any) => {\n\t\t\t\ttarget[key] = value\n\t\t\t\treturn true\n\t\t\t},\n\t\t})\n\t}\n\n\treturn recurse([]) as Remote<F>\n}\n\n", "\nimport {JsonRpc} from \"./json-rpc.js\"\nimport {RemoteError} from \"./errors.js\"\nimport {ErrorTap} from \"./taps/error.js\"\nimport {remoteProxy} from \"./remote-proxy.js\"\nimport {Endpoint, Fns, Tap} from \"./types.js\"\n\nexport type RemoteOptions = {\n\tendpoint: Endpoint\n\tlabel?: string\n\tnotify?: boolean\n\ttap?: Tap\n}\n\n/**\n * Create a renraku remote for the given endpoint.\n * - the remote uses js proxies to mirror the shape of your fns object\n * - so when you make async calls on the remote, it will convert those into json rpc requests that are actuated on the given endpoint\n * - the endpoint you provide could be making network calls, or doing something else, the remote doesn't care how the endpoint is implemented\n */\nexport function makeRemote<F extends Fns>(options: RemoteOptions) {\n\tconst {endpoint, tap = new ErrorTap()} = options\n\tlet id = 1\n\n\treturn remoteProxy<F>(async(\n\t\t\tpath,\n\t\t\tparams,\n\t\t\tsettings,\n\t\t) => {\n\n\t\tconst notify = settings.notify ?? options.notify ?? false\n\t\tconst transfer = settings.transfer\n\n\t\tconst base: JsonRpc.Notification<any[]> = {\n\t\t\tjsonrpc: \"2.0\" as const,\n\t\t\tmethod: path.join(\".\"),\n\t\t\tparams,\n\t\t}\n\n\t\tconst request: JsonRpc.Request = (\n\t\t\tnotify\n\t\t\t\t? base\n\t\t\t\t: {...base, id: id++}\n\t\t)\n\n\t\ttap.rpcRequest({request})\n\n\t\tconst response = await endpoint(request, {transfer})\n\n\t\tif (notify && !response)\n\t\t\treturn null\n\n\t\tif (!response)\n\t\t\tthrow new RemoteError(\"response was null, but shouldn't be, because the request was not a notification\")\n\n\t\tif (\"error\" in response)\n\t\t\tthrow new RemoteError(\n\t\t\t\toptions.label\n\t\t\t\t\t? `${options.label}: ${response.error.message}`\n\t\t\t\t\t: response.error.message\n\t\t\t)\n\n\t\treturn response.result\n\t})\n}\n\n", "\nimport {Fns} from \"./types.js\"\nimport {makeRemote} from \"./remote.js\"\nimport {Remote} from \"./remote-proxy.js\"\nimport {makeEndpoint, EndpointOptions} from \"./endpoint.js\"\n\n/**\n * Wrap your fns in an endpoint and remote.\n * - this gives you a real renraku remote where you can use the `tune` symbol and such\n * - this is useful for when you have special logic that relies on that special renraku functionality\n */\nexport function makeMock<F extends Fns>(options: EndpointOptions<F>): Remote<F> {\n\treturn makeRemote<F>({endpoint: makeEndpoint(options), tap: options.tap})\n}\n\n", "\nimport {pub} from \"@e280/stz\"\nimport {JsonRpc} from \"../../../core/json-rpc.js\"\n\nexport class Conduit {\n\trecv = pub<[incoming: JsonRpc.Bidirectional, {origin: string}]>()\n\tsendRequest = pub<[request: JsonRpc.Requestish, transfer: Transferable[] | undefined]>()\n\tsendResponse = pub<[response: JsonRpc.Respondish, transfer: Transferable[] | undefined]>()\n\n\tstatic makeEntangledPair({origin = \"example.e280.org\"}: {origin?: string} = {}) {\n\t\tconst a = new this()\n\t\tconst b = new this()\n\n\t\tconst disposers = [\n\t\t\ta.sendRequest.sub(data => b.recv(data, {origin})),\n\t\t\ta.sendResponse.sub(data => b.recv(data, {origin})),\n\t\t\tb.sendRequest.sub(data => a.recv(data, {origin})),\n\t\t\tb.sendResponse.sub(data => a.recv(data, {origin})),\n\t\t]\n\n\t\tconst dispose = () => disposers.forEach(fn => fn())\n\t\treturn [a, b, dispose] as [Conduit, Conduit, () => void]\n\t}\n}\n\n", "\nimport {defer} from \"@e280/stz\"\nimport {Endpoint} from \"../../../core/types.js\"\nimport {JsonRpc} from \"../../../core/json-rpc.js\"\nimport {Channel, ChannelMessage} from \"../types.js\"\nimport {ResponseWaiter} from \"./response-waiter.js\"\n\nexport function onMessage(channel: Channel, fn: (e: ChannelMessage) => void) {\n\tchannel.addEventListener(\"message\", fn)\n\treturn () => channel.removeEventListener(\"message\", fn)\n}\n\nexport function is_valid_json_rpc_message(data: any): data is JsonRpc.Bidirectional {\n\treturn (\n\t\tdata !== undefined &&\n\t\tdata !== null &&\n\t\ttypeof data === \"object\" &&\n\t\t\"jsonrpc\" in data &&\n\t\tdata.jsonrpc === JsonRpc.version\n\t)\n}\n\n////////////////\n\nexport type SendRequestFn = (\n\trequest: JsonRpc.Request,\n\ttransfer: Transferable[] | undefined,\n\tdone: Promise<JsonRpc.Response | null>,\n) => void\n\nexport function makeRemoteEndpoint(waiter: ResponseWaiter, sendRequest: SendRequestFn): Endpoint {\n\treturn async(request, {transfer} = {}) => {\n\t\tif (\"id\" in request) {\n\t\t\tconst done = defer<JsonRpc.Response | null>()\n\t\t\tconst waiting = waiter.wait(request.id, request.method)\n\t\t\t\t.then(response => {\n\t\t\t\t\tdone.resolve(response)\n\t\t\t\t\treturn response\n\t\t\t\t})\n\t\t\tsendRequest(request, transfer, done.promise)\n\t\t\treturn await waiting\n\t\t}\n\t\telse {\n\t\t\tconst done = Promise.resolve(null)\n\t\t\tsendRequest(request, transfer, done)\n\t\t\treturn done\n\t\t}\n\t}\n}\n\nexport function interpretIncoming(json: JsonRpc.Bidirectional) {\n\tconst requests: JsonRpc.Request[] = []\n\tconst responses: JsonRpc.Response[] = []\n\n\tfor (const item of (Array.isArray(json) ? json : [json])) {\n\t\tif (\"method\" in item) requests.push(item)\n\t\telse responses.push(item)\n\t}\n\n\treturn {requests, responses}\n}\n\nexport async function handleIncomingRequests(\n\t\tlocalEndpoint: Endpoint,\n\t\trequests: JsonRpc.Request[],\n\t): Promise<JsonRpc.Respondish | null> {\n\n\tconst responses = (\n\t\tawait Promise.all(\n\t\t\trequests.map(async request => localEndpoint(request))\n\t\t)\n\t).filter(r => r !== null)\n\n\tif (responses.length === 0)\n\t\treturn null\n\n\treturn (responses.length === 1)\n\t\t? responses[0]\n\t\t: responses\n}\n\nexport function handleIncomingResponses(\n\t\twaiter: ResponseWaiter,\n\t\tresponses: JsonRpc.Response[],\n\t) {\n\n\tfor (const response of responses)\n\t\twaiter.deliverResponse(response)\n}\n\n", "\nimport {disposer} from \"@e280/stz\"\nimport {Conduit} from \"./conduit.js\"\nimport {PostableChannel} from \"../types.js\"\nimport {onMessage} from \"../parts/helpers.js\"\n\nexport class PostableConduit extends Conduit {\n\tdispose = disposer()\n\n\tconstructor(channel: PostableChannel) {\n\t\tsuper()\n\t\tthis.dispose.schedule(\n\t\t\tthis.sendRequest.sub((m, transfer) => channel.postMessage(m, transfer)),\n\t\t\tthis.sendResponse.sub((m, transfer) => channel.postMessage(m, transfer)),\n\t\t\tonMessage(channel, e => this.recv(e.data, e)),\n\t\t)\n\t}\n}\n\n", "\nimport {Fns} from \"../../../core/types.js\"\nimport {Remote} from \"../../../core/remote-proxy.js\"\n\nexport class MessengerMeta<RemoteFns extends Fns> {\n\ttransfer: Transferable[] | undefined\n\n\tconstructor(public remote: Remote<RemoteFns>) {}\n}\n\n", "\nexport const defaults = Object.freeze({\n\ttimeout: 60_000,\n\tmaxRequestBytes: 10_000_000,\n})\n\n", "\nimport {deadline, DeadlineError, defer, Deferred} from \"@e280/stz\"\n\nimport {JsonRpc} from \"../../../core/json-rpc.js\"\nimport {RemoteError} from \"../../../core/errors.js\"\n\ntype Pend = {\n\tmethod: string\n\tdeferred: Deferred<JsonRpc.Response>\n}\n\nexport class ResponseWaiter {\n\tpending = new Map<JsonRpc.Id, Pend>()\n\n\tconstructor(public timeout: number) {}\n\n\tasync wait(id: JsonRpc.Id, method: string) {\n\t\tconst deferred = defer<JsonRpc.Response>()\n\t\tthis.pending.set(id, {method, deferred})\n\t\treturn await deadline(this.timeout, () => deferred.promise)\n\t\t\t.catch(error => {\n\t\t\t\tthis.pending.delete(id)\n\t\t\t\tif (error instanceof DeadlineError)\n\t\t\t\t\terror.message = `request #${id} ${method}(), ${error.message}`\n\t\t\t\tthrow error\n\t\t\t})\n\t\t\t.finally(() => this.pending.delete(id))\n\t}\n\n\tdeliverResponse(response: JsonRpc.Response) {\n\t\tconst pend = this.pending.get(response.id)\n\t\tif (pend) {\n\t\t\tif (\"error\" in response)\n\t\t\t\tpend.deferred.reject(new RemoteError(response.error.message))\n\t\t\telse\n\t\t\t\tpend.deferred.resolve(response)\n\t\t}\n\t}\n}\n\n", "\nimport {disposer} from \"@e280/stz\"\n\nimport {defaults} from \"../../defaults.js\"\nimport {MessengerOptions} from \"./types.js\"\nimport {MessengerMeta} from \"./parts/meta.js\"\nimport {JsonRpc} from \"../../core/json-rpc.js\"\nimport {bindTap} from \"../../core/taps/bind.js\"\nimport {makeRemote} from \"../../core/remote.js\"\nimport {Remote} from \"../../core/remote-proxy.js\"\nimport {Endpoint, Fns} from \"../../core/types.js\"\nimport {makeEndpoint} from \"../../core/endpoint.js\"\nimport {ResponseWaiter} from \"./parts/response-waiter.js\"\nimport {handleIncomingRequests, interpretIncoming, makeRemoteEndpoint} from \"./parts/helpers.js\"\n\n/**\n * Establish a renraku remote that communicates over the given conduit.\n * - supports two-way or one-way communication\n * - you can use a messenger to call a remote messenger\n * - you can use a messenger to respond to incoming requests\n */\nexport class Messenger<LocalFns extends Fns = any, RemoteFns extends Fns = any> {\n\tremote: Remote<RemoteFns>\n\tremoteEndpoint: Endpoint\n\tdispose = disposer()\n\n\t#waiter: ResponseWaiter\n\n\tconstructor(private options: MessengerOptions<LocalFns, RemoteFns>) {\n\t\tconst {conduit, tap} = options\n\n\t\tthis.#waiter = new ResponseWaiter(options.timeout ?? defaults.timeout)\n\n\t\tthis.remoteEndpoint = makeRemoteEndpoint(\n\t\t\tthis.#waiter,\n\t\t\tconduit.sendRequest.pub.bind(conduit.sendRequest),\n\t\t)\n\n\t\tthis.remote = makeRemote<RemoteFns>({\n\t\t\tendpoint: this.remoteEndpoint,\n\t\t\ttap: tap && bindTap(tap, {remote: true}),\n\t\t})\n\n\t\tthis.dispose.schedule(conduit.recv.sub(m => this.recv(m)))\n\t}\n\n\tasync recv(incoming: JsonRpc.Bidirectional) {\n\t\tconst meta = new MessengerMeta<RemoteFns>(this.remote)\n\t\tconst {conduit, rpc, tap} = this.options\n\n\t\tconst {requests, responses} = interpretIncoming(incoming)\n\n\t\tfor (const response of responses)\n\t\t\tthis.#waiter.deliverResponse(response)\n\n\t\tif (!rpc)\n\t\t\treturn\n\n\t\tconst fns = await rpc(meta)\n\t\tconst endpoint = makeEndpoint({\n\t\t\tfns,\n\t\t\ttap: tap && bindTap(tap, {remote: false}),\n\t\t})\n\n\t\tconst outgoing = await handleIncomingRequests(endpoint, requests)\n\t\tif (outgoing)\n\t\t\tawait conduit.sendResponse(outgoing, meta.transfer)\n\t}\n}\n\n", "\nimport {MessengerMeta, Remote} from \"@e280/renraku\"\nimport {MinistryFns, Schematic} from \"./types.js\"\n\nexport type HostShell<S extends Schematic> = {\n\thost: Remote<S[\"host\"]>\n\ttransfer: Transferable[] | undefined\n}\n\nexport type WorkShell<S extends Schematic> = {\n\twork: Remote<S[\"work\"]>\n\ttransfer: Transferable[] | undefined\n}\n\nexport const shells = {\n\tderive: {\n\t\thost: <S extends Schematic>(meta: MessengerMeta<MinistryFns<S>>): HostShell<S> => ({\n\t\t\thost: meta.remote.host,\n\t\t\tget transfer() { return meta.transfer },\n\t\t\tset transfer(t) { meta.transfer = t },\n\t\t}),\n\t\twork: <S extends Schematic>(meta: MessengerMeta<S[\"work\"]>): WorkShell<S> => ({\n\t\t\twork: meta.remote,\n\t\t\tget transfer() { return meta.transfer },\n\t\t\tset transfer(t) { meta.transfer = t },\n\t\t}),\n\t},\n\tmock: {\n\t\thost: <S extends Schematic>(): HostShell<S> => ({\n\t\t\thost: undefined as any,\n\t\t\ttransfer: undefined,\n\t\t}),\n\t\twork: <S extends Schematic>(): WorkShell<S> => ({\n\t\t\twork: undefined as any,\n\t\t\ttransfer: undefined,\n\t\t})\n\t},\n}\n\n", "\nimport {ErrorTap} from \"@e280/renraku\"\n\nexport const defaultTap = new ErrorTap()\n\n", "\nimport {Messenger, PostableConduit} from \"@e280/renraku\"\n\nimport {shells} from \"./shells.js\"\nimport {Compat} from \"../compat/types.js\"\nimport {defaultTap} from \"./default-tap.js\"\nimport {MinistryFns, Schematic, SetupWork, WorkerOpts} from \"./types.js\"\n\n/**\n * create a web worker\n */\nexport async function worker<S extends Schematic>(\n\t\tcompat: Compat,\n\t\tsetupWork: SetupWork<S>,\n\t\toptions: WorkerOpts = {},\n\t) {\n\n\tconst tap = options.tap ?? defaultTap\n\n\tconst messenger = new Messenger<S[\"work\"], MinistryFns<S>>({\n\t\ttap,\n\t\ttimeout: options.timeout ?? Infinity,\n\t\tconduit: new PostableConduit(compat.getSelf()),\n\t\trpc: async m => setupWork(\n\t\t\tshells.derive.host<S>(m),\n\t\t),\n\t})\n\n\tawait messenger.remote.infra.ready()\n\treturn messenger.remote.host\n}\n\n", "\n/** a promise which can be resolved from the outside */\nexport type Deferred<R = void> = {\n\tpromise: Promise<R>\n\tresolve: (result: R) => void\n\treject: (reason: any) => void\n\n\t/** ties the fate of this deferred promise to the outcome of the provided outsidePromise */\n\tentangle: (outsidePromise: Promise<R>) => Promise<R>\n}\n\n/** returns a deferred promise with exposed resolve and reject fns */\nexport function defer<R = void>(): Deferred<R> {\n\tlet resolve!: (result: R) => void\n\tlet reject!: (reason: any) => void\n\n\tconst promise = new Promise<R>((res, rej) => {\n\t\tresolve = res\n\t\treject = rej\n\t})\n\n\tfunction entangle(outside: Promise<R>) {\n\t\toutside.then(resolve).catch(reject)\n\t\treturn promise\n\t}\n\n\treturn {promise, resolve, reject, entangle}\n}\n\n", "\nimport {defer} from \"@e280/stz\"\nimport {Messenger, PostableConduit} from \"@e280/renraku\"\n\nimport {shells} from \"./shells.js\"\nimport {defaultTap} from \"./default-tap.js\"\nimport {Compat, CompatWorker} from \"../compat/types.js\"\nimport {Infra, MinistryFns, Schematic, ThreadOptions} from \"./types.js\"\n\nexport class Thread<S extends Schematic> {\n\tconstructor(\n\t\tpublic worker: CompatWorker,\n\t\tpublic messenger: Messenger<MinistryFns<S>, S[\"work\"]>,\n\t) {}\n\n\tstatic async make<S extends Schematic>(compat: Compat, options: ThreadOptions<S>) {\n\t\tconst tap = options.tap ?? defaultTap\n\t\tconst label = options.label ?? \"comrade\"\n\t\tconst worker = compat.loadWorker(options.workerUrl, label)\n\t\tconst readyprom = defer<void>()\n\n\t\tconst infra: Infra = {\n\t\t\tasync ready() {\n\t\t\t\treadyprom.resolve()\n\t\t\t},\n\t\t}\n\n\t\tconst messenger = new Messenger<MinistryFns<S>, S[\"work\"]>({\n\t\t\ttap,\n\t\t\ttimeout: options.timeout ?? Infinity,\n\t\t\tconduit: new PostableConduit(worker),\n\t\t\trpc: async m => ({\n\t\t\t\tinfra,\n\t\t\t\thost: options.setupHost(\n\t\t\t\t\tshells.derive.work<S>(m)\n\t\t\t\t),\n\t\t\t}),\n\t\t})\n\n\t\tawait readyprom.promise\n\t\treturn new this<S>(worker, messenger)\n\t}\n\n\tget work() {\n\t\treturn this.messenger.remote\n\t}\n\n\tterminate() {\n\t\tthis.worker.terminate()\n\t}\n}\n\n", "\nimport {defer} from \"@e280/stz\"\nimport {Endpoint, makeRemote, Remote, Tap} from \"@e280/renraku\"\n\nimport {Thread} from \"./thread.js\"\nimport {Compat} from \"../compat/types.js\"\nimport {defaultTap} from \"./default-tap.js\"\nimport {ClusterOptions, Schematic, Task} from \"./types.js\"\n\n/**\n * a pool of web workers\n * - please use `await Cluster.make(options)` to create your worker pool\n * - call your worker functions like `await cluster.remote.hello()`\n */\nexport class Cluster<S extends Schematic> {\n\n\tstatic async make<S extends Schematic>(compat: Compat, options: ClusterOptions<S>) {\n\t\tconst workerCount = options.workerCount ?? compat.guessOptimalThreadCount()\n\t\tconst threads = await Promise.all([...Array(workerCount)].map(\n\t\t\tasync(_, index) => Thread.make(compat, {\n\t\t\t\t...options,\n\t\t\t\tlabel: options.label ?? `${options.label ?? \"comrade\"}_${index + 1}`,\n\t\t\t})\n\t\t))\n\t\treturn new this<S>(threads, {tap: options.tap})\n\t}\n\n\twork: Remote<S[\"work\"]>\n\t#available = new Set<Thread<S>>()\n\t#tasks: Task[] = []\n\n\tconstructor(private threads: Thread<S>[], options: {tap?: Tap} = {}) {\n\t\tconst tap = options.tap ?? defaultTap\n\n\t\t// delegation\n\t\tconst remoteEndpoint: Endpoint = async(request, special) => this.#scheduleTask({\n\t\t\trequest,\n\t\t\tprom: defer(),\n\t\t\ttransfer: special?.transfer,\n\t\t})\n\n\t\t// remote proxy to call comrade fns\n\t\tthis.work = makeRemote({\n\t\t\ttap,\n\t\t\tendpoint: remoteEndpoint,\n\t\t})\n\n\t\t// in the beginning, all threads are available\n\t\tthreads.forEach(t => this.#available.add(t))\n\t}\n\n\tget threadCount() {\n\t\treturn this.threads.length\n\t}\n\n\tterminate() {\n\t\tfor (const thread of this.threads)\n\t\t\tthread.terminate()\n\t}\n\n\t#scheduleTask(task: Task) {\n\t\tthis.#tasks.push(task)\n\t\tthis.#distributeTasks()\n\t\treturn task.prom.promise\n\t}\n\n\t#distributeTasks() {\n\t\twhile (this.#available.size > 0 && this.#tasks.length > 0) {\n\t\t\tconst thread = [...this.#available].pop()!\n\t\t\tthis.#available.delete(thread)\n\n\t\t\tconst task = this.#tasks.shift()!\n\n\t\t\t// this thread is no longer available\n\t\t\tthis.#available.delete(thread)\n\n\t\t\t// call the thread endpoint\n\t\t\tconst callprom = thread.messenger.remoteEndpoint(task.request, {transfer: task.transfer})\n\n\t\t\t// resolve/reject the task prom when callprom is done\n\t\t\ttask.prom.entangle(callprom).finally(() => {\n\n\t\t\t\t// thread is ready again\n\t\t\t\tthis.#available.add(thread)\n\n\t\t\t\t// distribute more tasks\n\t\t\t\tthis.#distributeTasks()\n\t\t\t})\n\t\t}\n\t}\n}\n\n", "\nimport {makeMock, Tap} from \"@e280/renraku\"\n\nimport {worker} from \"./parts/worker.js\"\nimport {Compat} from \"./compat/types.js\"\nimport {Thread} from \"./parts/thread.js\"\nimport {shells} from \"./parts/shells.js\"\nimport {Cluster} from \"./parts/cluster.js\"\nimport {defaultTap} from \"./parts/default-tap.js\"\nimport {ClusterOptions, Mocks, Schematic, SetupHost, SetupWork, ThreadOptions, WorkerOpts} from \"./parts/types.js\"\n\nexport const setupComrade = (compat: Compat) => ({\n\tthread: <S extends Schematic>(options: ThreadOptions<S>) => Thread.make(compat, options),\n\tcluster: <S extends Schematic>(options: ClusterOptions<S>) => Cluster.make(compat, options),\n\n\tworker: <S extends Schematic>(\n\t\tsetupWork: SetupWork<S>,\n\t\toptions: WorkerOpts = {},\n\t) => worker(compat, setupWork, options),\n\n\twork: <S extends Schematic>(fn: SetupWork<S>) => fn,\n\thost: <S extends Schematic>(fn: SetupHost<S>) => fn,\n\n\tmocks<S extends Schematic>(options: {\n\t\t\ttap?: Tap\n\t\t\tsetupWork: SetupWork<S>\n\t\t\tsetupHost: SetupHost<S>\n\t\t}): Mocks<S> {\n\n\t\tconst {setupWork, setupHost, tap = defaultTap} = options\n\n\t\tconst hostShell = shells.mock.host<S>()\n\t\tconst workShell = shells.mock.work<S>()\n\n\t\tworkShell.work = makeMock({tap, fns: setupWork(hostShell)})\n\t\thostShell.host = makeMock({tap, fns: setupHost(workShell)})\n\n\t\treturn {\n\t\t\tworkShell,\n\t\t\thostShell,\n\t\t\twork: workShell.work,\n\t\t\thost: hostShell.host,\n\t\t}\n\t},\n\n\tmockWork<S extends Schematic>(setupWork: SetupWork<S>, tap: Tap = defaultTap) {\n\t\tconst hostShell = shells.mock.host<S>()\n\t\tconst workShell = shells.mock.work<S>()\n\n\t\tworkShell.work = makeMock({tap, fns: setupWork(hostShell)})\n\n\t\treturn {\n\t\t\tworkShell,\n\t\t\thostShell,\n\t\t\twork: workShell.work,\n\t\t\tmockHost: (setupHost: SetupHost<S>): Mocks<S> => {\n\t\t\t\thostShell.host = makeMock({tap, fns: setupHost(workShell)})\n\t\t\t\treturn {\n\t\t\t\t\tworkShell,\n\t\t\t\t\thostShell,\n\t\t\t\t\twork: workShell.work,\n\t\t\t\t\thost: hostShell.host,\n\t\t\t\t}\n\t\t\t},\n\t\t}\n\t},\n})\n\n", "\nimport {Compat, CompatWorker} from \"./types.js\"\n\nexport const setupBrowserCompat = (): Compat => ({\n\tgetSelf() {\n\t\treturn self\n\t},\n\n\tguessOptimalThreadCount() {\n\t\tconst count = navigator.hardwareConcurrency ?? 1\n\t\treturn Math.max(1, count - 1)\n\t},\n\n\tloadWorker(url, name) {\n\t\treturn new window.Worker(url, {name, type: \"module\"}) as CompatWorker\n\t},\n\n\tasync loadWasm(url) {\n\t\treturn WebAssembly.instantiateStreaming(fetch(url))\n\t},\n})\n\n", "\nimport {setupComrade} from \"./comrade.js\"\nimport {setupBrowserCompat} from \"./compat/browser.js\"\n\nexport const compat = setupBrowserCompat()\nexport const Comrade = setupComrade(compat)\n\nexport * from \"./exports.js\"\n\n", "\nexport const bytes = Object.freeze({\n\teq(a: Uint8Array, b: Uint8Array) {\n\t\tif (a.length !== b.length) return false\n\t\tlet diff = 0\n\t\tfor (let i = 0; i < a.length; i++) diff |= a[i] ^ b[i]\n\t\treturn diff === 0\n\t},\n\n\trandom(count: number) {\n\t\treturn crypto.getRandomValues(new Uint8Array(count))\n\t},\n\n\tconcat(parts: Uint8Array[]) {\n\t\tlet size = 0\n\t\tfor (const part of parts) size += part.byteLength\n\n\t\tconst bytes = new Uint8Array(size)\n\n\t\tlet offset = 0\n\t\tfor (const part of parts) {\n\t\t\tbytes.set(part, offset)\n\t\t\toffset += part.byteLength\n\t\t}\n\n\t\treturn bytes as Uint8Array\n\t},\n})\n\n", "\nimport {bytes} from \"./bytes.js\"\n\nexport type Lexicon = {\n\tcharacters: string\n\tnegativePrefix?: string\n\tcaseInsensitive?: boolean\n\tpadding?: {\n\t\tcharacter: string\n\t\tsize: number\n\t}\n}\n\nexport interface BaseX {\n\t(bytes: Uint8Array): string\n}\n\nexport class BaseX {\n\tstatic lexicons = Object.freeze({\n\t\tbase2: {characters: \"01\"},\n\t\thex: {characters: \"0123456789abcdef\", caseInsensitive: true},\n\t\tbase36: {characters: \"0123456789abcdefghijklmnopqrstuvwxyz\"},\n\t\tbase58: {characters: \"123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz\"},\n\t\tbase62: {characters: \"0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz\"},\n\t\tbase64url: {\n\t\t\tnegativePrefix: \"~\",\n\t\t\tcharacters: \"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_\",\n\t\t},\n\t\tbase64: {\n\t\t\tcharacters: \"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/\",\n\t\t\tpadding: {character: \"=\", size: 4},\n\t\t},\n\t})\n\n\tprivate lookup: Record<string, number>\n\tprivate negativePrefix: string\n\n\tconstructor(public lexicon: Lexicon) {\n\t\tthis.lookup = Object.fromEntries(\n\t\t\t[...lexicon.characters].map((char, i) => [char, i])\n\t\t)\n\t\tthis.negativePrefix = lexicon.negativePrefix ?? \"-\"\n\n\t\tconst fn = this.fromBytes.bind(this)\n\t\tObject.setPrototypeOf(fn, new.target.prototype)\n\t\tObject.assign(fn, this)\n\t\treturn fn as BaseX\n\t}\n\n\ttoBytes(s: string): Uint8Array {\n\t\tif (this.lexicon.caseInsensitive) s = s.toLowerCase()\n\t\tconst bitsPerChar = Math.log2(this.lexicon.characters.length)\n\t\tif (Number.isInteger(bitsPerChar)) {\n\t\t\t// Bitstream mode (for power-of-2 lexicons)\n\t\t\tlet bitBuffer = 0\n\t\t\tlet bitCount = 0\n\t\t\tconst output: number[] = []\n\n\t\t\tfor (const char of s) {\n\t\t\t\tif (char === this.lexicon.padding?.character) continue\n\t\t\t\tconst val = this.lookup[char]\n\t\t\t\tif (val === undefined) throw new Error(`Invalid character: ${char}`)\n\t\t\t\tbitBuffer = (bitBuffer << bitsPerChar) | val\n\t\t\t\tbitCount += bitsPerChar\n\n\t\t\t\twhile (bitCount >= 8) {\n\t\t\t\t\tbitCount -= 8\n\t\t\t\t\toutput.push((bitBuffer >> bitCount) & 0xFF)\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn new Uint8Array(output)\n\t\t}\n\n\t\t// Radix mode fallback\n\t\tlet num = 0n\n\t\tconst base = BigInt(this.lexicon.characters.length)\n\t\tif (s.startsWith(this.negativePrefix)) {\n\t\t\ts = s.slice(this.negativePrefix.length)\n\t\t}\n\t\tconst zeroCharacter = this.lexicon.characters[0]\n\t\tlet leadingZeroBytes = 0\n\t\twhile (s[leadingZeroBytes] === zeroCharacter)\n\t\t\tleadingZeroBytes++\n\t\ts = s.slice(leadingZeroBytes)\n\t\tfor (const char of s) {\n\t\t\tconst val = this.lookup[char]\n\t\t\tif (val === undefined) throw new Error(`Invalid character: ${char}`)\n\t\t\tnum = num * base + BigInt(val)\n\t\t}\n\t\tconst out = new Uint8Array(leadingZeroBytes + (num === 0n ? 0 : this.countBytes(num)))\n\t\tlet writeIndex = out.length\n\t\twhile (num > 0n) {\n\t\t\tout[--writeIndex] = Number(num % 256n)\n\t\t\tnum = num / 256n\n\t\t}\n\t\treturn out\n\t}\n\n\tfromBytes(bytes: Uint8Array): string {\n\t\tconst bitsPerChar = Math.log2(this.lexicon.characters.length)\n\t\tif (Number.isInteger(bitsPerChar)) {\n\t\t\t// Bitstream mode (for power-of-2 lexicons)\n\t\t\tlet bitBuffer = 0\n\t\t\tlet bitCount = 0\n\t\t\tlet out = \"\"\n\n\t\t\tfor (const byte of bytes) {\n\t\t\t\tbitBuffer = (bitBuffer << 8) | byte\n\t\t\t\tbitCount += 8\n\n\t\t\t\twhile (bitCount >= bitsPerChar) {\n\t\t\t\t\tbitCount -= bitsPerChar\n\t\t\t\t\tconst index = (bitBuffer >> bitCount) & ((1 << bitsPerChar) - 1)\n\t\t\t\t\tout += this.lexicon.characters[index]\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// \uD83E\uDE79 flush remaining bits\n\t\t\tif (bitCount > 0) {\n\t\t\t\tconst index = (bitBuffer << (bitsPerChar - bitCount)) & ((1 << bitsPerChar) - 1)\n\t\t\t\tout += this.lexicon.characters[index]\n\t\t\t}\n\n\t\t\t// Add padding if applicable\n\t\t\tif (this.lexicon.padding) {\n\t\t\t\twhile (out.length % this.lexicon.padding.size !== 0)\n\t\t\t\t\tout += this.lexicon.padding.character\n\t\t\t}\n\n\t\t\treturn out\n\t\t}\n\n\t\t// Radix mode fallback\n\t\tif (bytes.length === 0) return \"\"\n\t\tconst zeroCharacter = this.lexicon.characters[0]\n\t\tlet leadingZeroBytes = 0\n\t\twhile (bytes[leadingZeroBytes] === 0)\n\t\t\tleadingZeroBytes++\n\t\tlet num = 0n\n\t\tfor (const byte of bytes.slice(leadingZeroBytes))\n\t\t\tnum = (num << 8n) + BigInt(byte)\n\n\t\tif (num === 0n) return zeroCharacter.repeat(leadingZeroBytes)\n\n\t\tconst base = BigInt(this.lexicon.characters.length)\n\t\tlet out = \"\"\n\t\twhile (num > 0n) {\n\t\t\tout = this.lexicon.characters[Number(num % base)] + out\n\t\t\tnum = num / base\n\t\t}\n\t\treturn zeroCharacter.repeat(leadingZeroBytes) + out\n\t}\n\n\ttoInteger(s: string) {\n\t\tif (!s) return 0\n\t\tlet n = 0n\n\t\tlet negative = false\n\t\tconst base = BigInt(this.lexicon.characters.length)\n\t\tif (s.startsWith(this.negativePrefix)) {\n\t\t\ts = s.slice(this.negativePrefix.length)\n\t\t\tnegative = true\n\t\t}\n\t\tfor (const char of s) {\n\t\t\tconst value = this.lookup[char]\n\t\t\tif (value === undefined) throw new Error(`Invalid character: ${char}`)\n\t\t\tn = n * base + BigInt(value)\n\t\t}\n\t\treturn Number(negative ? -n : n)\n\t}\n\n\tfromInteger(n: number) {\n\t\tn = Math.floor(n)\n\t\tconst negative = n < 0\n\t\tlet num = BigInt(negative ? -n : n)\n\t\tif (num === 0n) return this.lexicon.characters[0]\n\t\tconst base = BigInt(this.lexicon.characters.length)\n\t\tlet out = \"\"\n\t\twhile (num > 0n) {\n\t\t\tout = this.lexicon.characters[Number(num % base)] + out\n\t\t\tnum = num / base\n\t\t}\n\t\treturn negative ? `${this.negativePrefix}${out}` : out\n\t}\n\n\trandom(count = 32) {\n\t\treturn this.fromBytes(bytes.random(count))\n\t}\n\n\tprivate countBytes(num: bigint) {\n\t\tlet count = 0\n\t\twhile (num > 0n) {\n\t\t\tcount++\n\t\t\tnum = num / 256n\n\t\t}\n\t\treturn count\n\t}\n}\n", "\nimport {BaseX} from \"./base-x.js\"\n\nexport const hex = new BaseX(BaseX.lexicons.hex)\nexport const base2 = new BaseX(BaseX.lexicons.base2)\nexport const base36 = new BaseX(BaseX.lexicons.base36)\nexport const base58 = new BaseX(BaseX.lexicons.base58)\nexport const base62 = new BaseX(BaseX.lexicons.base62)\nexport const base64 = new BaseX(BaseX.lexicons.base64)\nexport const base64url = new BaseX(BaseX.lexicons.base64url)\n\n", "\n/** create a job queue that ensures the given fn is always called in sequence (not concurrently). */\nexport function queue<Args extends any[], Result>(\n\t\tfn: (...args: Args) => Promise<Result>,\n\t\tlimit = Infinity,\n\t): (...args: Args) => Promise<Result> {\n\n\tlet pending = 0\n\tlet last: Promise<any> = Promise.resolve()\n\n\treturn (...args: Args): Promise<Result> => {\n\t\tif (pending >= limit)\n\t\t\treturn Promise.reject(new Error(`queue limit exceeded (${limit})`))\n\n\t\tpending++\n\n\t\tconst job = async() => {\n\t\t\ttry { return await fn(...args) }\n\t\t\tfinally { pending-- }\n\t\t}\n\n\t\tconst current = last.then(job)\n\n\t\t// prevent unhandled rejection breaking the chain\n\t\tlast = current.catch(() => {})\n\n\t\treturn current\n\t}\n}\n\n", "\nimport {queue} from \"./queue.js\"\n\n/** create a serialized execution lane for arbitrary async functions. */\nexport function lane(limit = Infinity) {\n\treturn queue((fn: () => Promise<unknown>) => fn(), limit) as (\n\t\t<R>(fn: () => Promise<R>) => Promise<R>\n\t)\n}\n\n", "\nexport function got<X>(thing: X | undefined | null, err = \"got failed\"): X {\n\tif (thing === undefined || thing === null) throw new Error(err)\n\treturn thing\n}\n\n", "\n/** create a promise that waits for a number of milliseconds. */\nexport const nap = (milliseconds: number = 0) => (\n\tnew Promise<void>(resolve => setTimeout(resolve, milliseconds))\n)\n\n", "\nexport const time = {\n\tseconds: (n: number) => (n * 1000),\n\tminutes: (n: number) => (n * time.seconds(60)),\n\thours: (n: number) => (n * time.minutes(60)),\n\tdays: (n: number) => (n * time.hours(24)),\n\n\tfuture: {\n\t\tseconds: (n: number) => (Date.now() + time.seconds(n)),\n\t\tminutes: (n: number) => (Date.now() + time.minutes(n)),\n\t\thours: (n: number) => (Date.now() + time.hours(n)),\n\t\tdays: (n: number) => (Date.now() + time.days(n)),\n\t},\n\n\tpast: {\n\t\tseconds: (n: number) => (Date.now() - time.seconds(n)),\n\t\tminutes: (n: number) => (Date.now() - time.minutes(n)),\n\t\thours: (n: number) => (Date.now() - time.hours(n)),\n\t\tdays: (n: number) => (Date.now() - time.days(n)),\n\t},\n}\n\n", "\n/** a clock that signals when a long-running operation should yield */\nexport function relaxer(delta = 1000 / 60) {\n\tlet last = performance.now()\n\n\treturn () => {\n\t\tconst now = performance.now()\n\t\tconst since = now - last\n\n\t\tif (since > delta) {\n\t\t\tlast = now\n\t\t\treturn true\n\t\t}\n\n\t\treturn false\n\t}\n}\n\n", "\nimport {bytes, got, nap} from \"@e280/stz\"\nimport {Bucket, Id} from \"../types.js\"\nimport {relaxer} from \"../utils/relaxer.js\"\n\nexport class MemoryBucket implements Bucket {\n\t#map = new Map<string, Uint8Array>()\n\n\tasync has(id: Id) {\n\t\treturn this.#map.has(id)\n\t}\n\n\tasync delete(id: Id) {\n\t\tthis.#map.delete(id)\n\t}\n\n\tasync read(id: Id) {\n\t\treturn new Blob(\n\t\t\t[got(this.#map.get(id)) as Uint8Array<ArrayBuffer>],\n\t\t\t{type: \"application/octet-stream\"},\n\t\t)\n\t}\n\n\tasync write(id: Id, readable: ReadableStream<Uint8Array>) {\n\t\tconst relax = relaxer()\n\t\tconst parts: Uint8Array[] = []\n\n\t\tfor await (const chunk of readable) {\n\t\t\tparts.push(chunk)\n\t\t\tif (relax()) await nap()\n\t\t}\n\n\t\tconst payload = bytes.concat(parts)\n\t\tthis.#map.set(id, payload)\n\t}\n}\n\n", "\nexport function isNotFoundErr(error: unknown) {\n\treturn error instanceof DOMException\n\t\t&& error.name === \"NotFoundError\"\n}\n\n", "\nimport {Bucket, Id} from \"../types.js\"\nimport {isNotFoundErr} from \"../utils/is-not-found.js\"\n\nexport class OpfsBucket implements Bucket {\n\t#directory\n\n\tconstructor(directory: FileSystemDirectoryHandle) {\n\t\tthis.#directory = directory\n\t}\n\n\tasync has(id: Id) {\n\t\ttry {\n\t\t\tawait this.#directory.getFileHandle(id)\n\t\t\treturn true\n\t\t}\n\t\tcatch (error) {\n\t\t\tif (isNotFoundErr(error)) return false\n\t\t\tthrow error\n\t\t}\n\t}\n\n\tasync delete(id: Id) {\n\t\ttry {\n\t\t\tawait this.#directory.removeEntry(id)\n\t\t}\n\t\tcatch (error) {\n\t\t\tif (!isNotFoundErr(error))\n\t\t\t\tthrow error\n\t\t}\n\t}\n\n\tasync read(id: Id) {\n\t\tconst handle = await this.#directory.getFileHandle(id)\n\t\treturn handle.getFile()\n\t}\n\n\tasync write(id: Id, readable: ReadableStream<Uint8Array>) {\n\t\tconst handle = await this.#directory.getFileHandle(id, {create: true})\n\t\tconst writable = await handle.createWritable()\n\t\tawait readable.pipeTo(writable)\n\t}\n}\n\n", "/** Whether the current platform is little-endian. */\nexport const isLE = /* @__PURE__ */ (() => new Uint8Array(new Uint32Array([0x11223344]).buffer)[0] === 0x44)();\nconst assertLE = (littleEndian = isLE) => {\n if (littleEndian)\n return;\n // Fail closed on BE for now: qemu-smoke checks still showed broken wasm outputs, and the JS\n // target would need a dedicated BE compilation path that is not currently generated.\n throw new Error('big-endian platforms are unsupported');\n};\nassertLE();\n/** Checks if something is Uint8Array. Be careful: nodejs Buffer will return true. */\n/**\n * Checks whether a value is a byte-oriented Uint8Array view.\n * @param a - value to inspect.\n * @returns True when the value is a Uint8Array-compatible byte view.\n * @example\n * ```ts\n * import { isBytes } from '@awasm/noble/utils.js';\n * isBytes(new Uint8Array([1, 2, 3]));\n * ```\n */\nexport function isBytes(a) {\n // Plain `instanceof Uint8Array` is too strict for some Buffer / proxy / cross-realm cases.\n // The fallback still requires a real ArrayBuffer view, so plain\n // JSON-deserialized `{ constructor: ... }` spoofing is rejected, and\n // `BYTES_PER_ELEMENT === 1` keeps the fallback on byte-oriented views.\n return (a instanceof Uint8Array ||\n (ArrayBuffer.isView(a) &&\n a.constructor.name === 'Uint8Array' &&\n 'BYTES_PER_ELEMENT' in a &&\n a.BYTES_PER_ELEMENT === 1));\n}\n/**\n * Asserts something is boolean.\n * @param b - value to validate.\n * @throws On wrong argument types. {@link TypeError}\n * @example\n * ```ts\n * import { abool } from '@awasm/noble/utils.js';\n * abool(true);\n * ```\n */\nexport function abool(b) {\n if (typeof b !== 'boolean')\n throw new TypeError(`boolean expected, not ${b}`);\n}\n/**\n * Asserts something is a non-negative safe integer.\n * @param n - value to validate.\n * @param title - optional field name for error messages.\n * @throws On wrong argument types. {@link TypeError}\n * @throws On wrong argument ranges or values. {@link RangeError}\n * @example\n * ```ts\n * import { anumber } from '@awasm/noble/utils.js';\n * anumber(7, 'count');\n * ```\n */\nexport function anumber(n, title = '') {\n const prefix = title && `\"${title}\" `;\n if (typeof n !== 'number')\n throw new TypeError(`${prefix}expected number, got ${typeof n}`);\n if (!Number.isSafeInteger(n) || n < 0) {\n throw new RangeError(`${prefix}expected integer >= 0, got ${n}`);\n }\n}\n/**\n * Asserts something is Uint8Array.\n * @param value - byte array candidate.\n * @param length - optional exact length requirement.\n * @param title - optional field name for error messages.\n * @returns The validated byte array.\n * @throws On wrong argument types. {@link TypeError}\n * @throws On wrong argument ranges or values. {@link RangeError}\n * @example\n * ```ts\n * import { abytes } from '@awasm/noble/utils.js';\n * abytes(new Uint8Array([1, 2, 3]), 3, 'msg');\n * ```\n */\nexport function abytes(value, length, title = '') {\n const bytes = isBytes(value);\n const len = value?.length;\n const needsLen = length !== undefined;\n const prefix = title && `\"${title}\" `;\n if (!bytes)\n throw new TypeError(prefix + 'expected Uint8Array, got type=' + typeof value);\n if (needsLen && len !== length)\n throw new RangeError(prefix + 'expected Uint8Array of length ' + length + ', got length=' + len);\n return value;\n}\n/**\n * Asserts a hash-like instance has not been destroyed or finished.\n * @param instance - instance to validate.\n * @param checkFinished - whether to reject already-finished instances.\n * @throws If the documented runtime validation or state check fails. {@link Error}\n * @example\n * ```ts\n * import { aexists } from '@awasm/noble/utils.js';\n * aexists({ destroyed: false, finished: false });\n * ```\n */\nexport function aexists(instance, checkFinished = true) {\n if (instance.destroyed)\n throw new Error('Hash instance has been destroyed');\n if (checkFinished && instance.finished)\n throw new Error('Hash#digest() has already been called');\n}\n/**\n * Asserts an output buffer is a byte array with sufficient capacity.\n * @param out - destination buffer.\n * @param instance - object exposing `outputLen`.\n * @throws On wrong argument types. {@link TypeError}\n * @throws On wrong argument ranges or values. {@link RangeError}\n * @example\n * ```ts\n * import { aoutput } from '@awasm/noble/utils.js';\n * aoutput(new Uint8Array(32), { outputLen: 32 });\n * ```\n */\nexport function aoutput(out, instance) {\n abytes(out, undefined, 'output');\n const min = instance.outputLen;\n if (out.length < min) {\n // Shared digestInto() contracts treat undersized destinations as a range problem, not a\n // generic runtime failure, so callers can distinguish \"wrong type\" from \"too short\".\n throw new RangeError('digestInto() expects output buffer of length at least ' + min);\n }\n}\n/**\n * Asserts a hash surface looks like one produced by the hash factory.\n * @param h - hash surface to validate.\n * @throws On wrong argument types. {@link TypeError}\n * @throws On wrong argument ranges or values. {@link RangeError}\n * @throws If a documented runtime validation or state check fails. {@link Error}\n * @example\n * ```ts\n * import { sha256 } from '@awasm/noble';\n * import { ahash } from '@awasm/noble/utils.js';\n * ahash(sha256);\n * ```\n */\nexport function ahash(h) {\n if (typeof h !== 'function' || typeof h.create !== 'function')\n throw new TypeError('Hash must created by hashes.mkHash');\n anumber(h.outputLen);\n anumber(h.blockLen);\n // HMAC and KDF callers treat these as real byte lengths; allowing zero lets fake wrappers pass\n // validation and can produce empty outputs instead of failing fast.\n if (h.outputLen < 1)\n throw new Error('\"outputLen\" must be >= 1');\n if (h.blockLen < 1)\n throw new Error('\"blockLen\" must be >= 1');\n}\n/**\n * Casts a typed-array view to bytes over the same memory region.\n * Shared buffer view in native memory order; used for internal state init, not endian-normalized serialization.\n * @param arr - source typed-array view.\n * @returns Byte view over the same buffer region.\n * @example\n * ```ts\n * import { u8 } from '@awasm/noble/utils.js';\n * u8(new Uint32Array([1]));\n * ```\n */\nexport function u8(arr) {\n return new Uint8Array(arr.buffer, arr.byteOffset, arr.byteLength);\n}\n/**\n * Casts a typed-array view to 32-bit words over the same memory region.\n * Shared native-order word view; byteOffset must be 4-byte aligned and trailing 1..3 bytes are ignored.\n * @param arr - source typed-array view.\n * @returns Uint32Array view over the same buffer region.\n * @example\n * ```ts\n * import { u32 } from '@awasm/noble/utils.js';\n * u32(new Uint8Array([1, 2, 3, 4]));\n * ```\n */\nexport function u32(arr) {\n return new Uint32Array(arr.buffer, arr.byteOffset, Math.floor(arr.byteLength / 4));\n}\n/**\n * Byte-swaps each 32-bit word on big-endian platforms.\n * @param arr - word array to normalize in place.\n * @returns The input array after any required byte swaps.\n * @example\n * ```ts\n * import { swap32IfBE } from '@awasm/noble/utils.js';\n * const words = new Uint32Array([0x11223344]);\n * swap32IfBE(words);\n * ```\n */\nexport function swap32IfBE(arr) {\n if (isLE)\n return arr;\n for (let i = 0; i < arr.length; i++) {\n const x = arr[i];\n arr[i] = ((x << 24) | ((x & 0xff00) << 8) | ((x >>> 8) & 0xff00) | (x >>> 24)) >>> 0;\n }\n return arr;\n}\n/**\n * Zeroize typed arrays in place. Warning: JS provides no guarantees.\n * @param arrays - arrays to overwrite with zeros.\n * @example\n * ```ts\n * import { clean } from '@awasm/noble/utils.js';\n * const buf = new Uint8Array([1, 2, 3]);\n * clean(buf);\n * ```\n */\nexport function clean(...arrays) {\n for (let i = 0; i < arrays.length; i++) {\n arrays[i].fill(0);\n }\n}\n// JS `.fill(0)` can be surprisingly slow on large buffers; chunked `.set` tends to be faster.\n// This is used by ciphers to clear large staging buffers without making perf unusable.\n/**\n * Fast zeroization for large byte buffers.\n * @param dst - destination buffer.\n * @param len - prefix length to clear.\n * @example\n * ```ts\n * import { cleanFast } from '@awasm/noble/utils.js';\n * cleanFast(new Uint8Array(16), 8);\n * ```\n */\nexport const cleanFast = (() => {\n let zero;\n return (dst, len = dst.length) => {\n abytes(dst);\n anumber(len, 'len');\n if (len > dst.length)\n throw new Error(`\"len\" expected <= dst.length, got len=${len} dst.length=${dst.length}`);\n if (!len)\n return;\n // Keep the zero chunk inside the export so bundles that don't use cleanFast can drop it too.\n const chunk = zero || (zero = /* @__PURE__ */ new Uint8Array(1024 * 1024));\n let off = 0;\n for (; off + chunk.length <= len; off += chunk.length)\n dst.set(chunk, off);\n if (off < len)\n dst.fill(0, off, len);\n };\n})();\n/**\n * Create a DataView over the same buffer region; writes through it mutate the original array.\n * @param arr - source typed-array view.\n * @returns DataView over the same buffer region.\n * @example\n * ```ts\n * import { createView } from '@awasm/noble/utils.js';\n * createView(new Uint8Array(8));\n * ```\n */\nexport function createView(arr) {\n return new DataView(arr.buffer, arr.byteOffset, arr.byteLength);\n}\n/**\n * Checks if two byte arrays overlap in the same underlying buffer.\n * This is invalid and can corrupt data.\n * @param a - first byte view.\n * @param b - second byte view.\n * @returns True when the byte ranges overlap.\n * @example\n * ```ts\n * import { overlapBytes } from '@awasm/noble/utils.js';\n * const buf = new Uint8Array(8);\n * overlapBytes(buf.subarray(0, 4), buf.subarray(2, 6));\n * ```\n */\nexport function overlapBytes(a, b) {\n // Zero-length views cannot overwrite anything, even if their offset sits inside another range.\n if (!a.byteLength || !b.byteLength)\n return false;\n return (a.buffer === b.buffer &&\n a.byteOffset < b.byteOffset + b.byteLength &&\n b.byteOffset < a.byteOffset + a.byteLength);\n}\nexport const __TEST = /* @__PURE__ */ Object.freeze({\n assertLE,\n});\n// Built-in hex conversion https://caniuse.com/mdn-javascript_builtins_uint8array_fromhex\nconst hasHexBuiltin = /* @__PURE__ */ (() => \n// @ts-ignore\ntypeof Uint8Array.from([]).toHex === 'function' && typeof Uint8Array.fromHex === 'function')();\n// Array where index 0xf0 (240) is mapped to string 'f0'\nconst hexes = /* @__PURE__ */ Array.from({ length: 256 }, (_, i) => i.toString(16).padStart(2, '0'));\n/**\n * Convert byte array to hex string. Uses built-in function, when available.\n * @param bytes - bytes to encode.\n * @returns Lowercase hex string.\n * @throws On wrong argument types. {@link TypeError}\n * @example\n * ```ts\n * import { bytesToHex } from '@awasm/noble/utils.js';\n * bytesToHex(Uint8Array.from([0xca, 0xfe, 0x01, 0x23]));\n * ```\n */\nexport function bytesToHex(bytes) {\n abytes(bytes);\n // @ts-ignore\n if (hasHexBuiltin)\n return bytes.toHex();\n // pre-caching improves the speed 6x\n let hex = '';\n for (let i = 0; i < bytes.length; i++) {\n hex += hexes[bytes[i]];\n }\n return hex;\n}\n// We use optimized technique to convert hex string to byte array\nconst asciis = { _0: 48, _9: 57, A: 65, F: 70, a: 97, f: 102 };\nfunction asciiToBase16(ch) {\n if (ch >= asciis._0 && ch <= asciis._9)\n return ch - asciis._0; // '2' => 50-48\n if (ch >= asciis.A && ch <= asciis.F)\n return ch - (asciis.A - 10); // 'B' => 66-(65-10)\n if (ch >= asciis.a && ch <= asciis.f)\n return ch - (asciis.a - 10); // 'b' => 98-(97-10)\n return;\n}\n/**\n * Convert hex string to byte array. Uses built-in function, when available.\n * @param hex - hex string to decode.\n * @returns Decoded bytes.\n * @throws On wrong argument types. {@link TypeError}\n * @throws On wrong argument ranges or values. {@link RangeError}\n * @example\n * ```ts\n * import { hexToBytes } from '@awasm/noble/utils.js';\n * hexToBytes('cafe0123');\n * ```\n */\nexport function hexToBytes(hex) {\n if (typeof hex !== 'string')\n throw new TypeError('hex string expected, got ' + typeof hex);\n if (hasHexBuiltin) {\n try {\n // @ts-ignore\n return Uint8Array.fromHex(hex);\n }\n catch (error) {\n if (error instanceof SyntaxError)\n throw new RangeError(error.message);\n throw error;\n }\n }\n const hl = hex.length;\n const al = hl / 2;\n if (hl % 2)\n throw new RangeError('hex string expected, got unpadded hex of length ' + hl);\n const array = new Uint8Array(al);\n for (let ai = 0, hi = 0; ai < al; ai++, hi += 2) {\n const n1 = asciiToBase16(hex.charCodeAt(hi));\n const n2 = asciiToBase16(hex.charCodeAt(hi + 1));\n if (n1 === undefined || n2 === undefined) {\n const char = hex[hi] + hex[hi + 1];\n throw new RangeError('hex string expected, got non-hex character \"' + char + '\" at index ' + hi);\n }\n array[ai] = n1 * 16 + n2; // multiply first octet, e.g. 'a3' => 10*16+3 => 160 + 3 => 163\n }\n return array;\n}\n/**\n * There is no setImmediate in browser and setTimeout is slow.\n * Call of async fn will return Promise, which will be fullfiled only on\n * next scheduler queue processing step and this is exactly what we need.\n * This yields to the Promise/microtask scheduler queue, not to timers or the full macrotask event loop.\n * @example\n * ```ts\n * import { nextTick } from '@awasm/noble/utils.js';\n * await nextTick();\n * ```\n */\nexport const nextTick = async () => { };\n/**\n * Returns control to the Promise/microtask scheduler every `tick` ms to avoid blocking long loops.\n * @param iters - number of loop iterations.\n * @param tick - maximum milliseconds to spend before yielding.\n * @param cb - callback invoked for each iteration index.\n */\nexport async function asyncLoop(iters, tick, cb) {\n let ts = Date.now();\n for (let i = 0; i < iters; i++) {\n cb(i);\n // Date.now() is not monotonic, so in case if clock goes backwards we return return control too\n const diff = Date.now() - ts;\n if (diff >= 0 && diff < tick)\n continue;\n await nextTick();\n ts += diff;\n }\n}\n/**\n * Converts string to bytes using UTF8 encoding.\n * Built-in doesn't validate input to be string: we do the check.\n * Non-ASCII details are delegated to the platform TextEncoder.\n * @param str - string to encode.\n * @returns UTF-8 bytes.\n * @throws On wrong argument types. {@link TypeError}\n * @example\n * ```ts\n * import { utf8ToBytes } from '@awasm/noble/utils.js';\n * utf8ToBytes('abc');\n * ```\n */\nexport function utf8ToBytes(str) {\n if (typeof str !== 'string')\n throw new TypeError('string expected');\n return new Uint8Array(new TextEncoder().encode(str)); // https://bugzil.la/1681809\n}\n/**\n * Convert byte array to string, assuming UTF8 encoding.\n * Input validation and malformed-sequence handling are delegated to TextDecoder:\n * invalid UTF-8 is replacement-decoded, not rejected.\n * @param bytes - bytes to decode.\n * @returns UTF-8 string.\n * @example\n * ```ts\n * import { bytesToUtf8 } from '@awasm/noble/utils.js';\n * bytesToUtf8(new Uint8Array([97, 98, 99]));\n * ```\n */\nexport function bytesToUtf8(bytes) {\n return new TextDecoder().decode(bytes);\n}\n/**\n * Checks whether a byte array is aligned to a 4-byte offset.\n * @param bytes - byte view to inspect.\n * @returns True when the view is 32-bit aligned.\n * @example\n * ```ts\n * import { isAligned32 } from '@awasm/noble/utils.js';\n * isAligned32(new Uint8Array(8));\n * ```\n */\nexport function isAligned32(bytes) {\n return bytes.byteOffset % 4 === 0;\n}\n/**\n * By default, returns u8a of expected length.\n * When `out` is specified, it checks it for validity and uses it.\n * @param expectedLength - expected output length in bytes.\n * @param out - optional caller-provided destination buffer.\n * @param onlyAligned - whether to require 32-bit alignment for `out`.\n * @returns Output buffer with the expected length.\n * @throws On wrong argument types. {@link TypeError}\n * @throws If a documented runtime validation or state check fails. {@link Error}\n * @example\n * ```ts\n * import { getOutput } from '@awasm/noble/utils.js';\n * getOutput(16);\n * ```\n */\nexport function getOutput(expectedLength, out, onlyAligned = true) {\n if (out === undefined)\n return new Uint8Array(expectedLength);\n // Keep Buffer/cross-realm Uint8Array support here instead of trusting a shape-compatible object.\n abytes(out, undefined, 'output');\n if (out.length !== expectedLength)\n throw new Error('\"output\" expected Uint8Array of length ' + expectedLength + ', got: ' + out.length);\n if (onlyAligned && !isAligned32(out))\n throw new Error('invalid output, must be aligned');\n return out;\n}\n/**\n * Encodes the AEAD length block as aadLength || dataLength.\n * Callers pass lengths already scaled to the mode's unit:\n * octets for ChaCha20-Poly1305, bits for GCM/GCM-SIV.\n * @param dataLength - encoded data length.\n * @param aadLength - encoded AAD length.\n * @param isLE - whether to write values in little-endian order.\n * @returns Encoded 16-byte length block.\n * @throws On wrong argument types. {@link TypeError}\n * @throws On wrong argument ranges or values. {@link RangeError}\n * @example\n * ```ts\n * import { u64Lengths } from '@awasm/noble/utils.js';\n * u64Lengths(16, 8, true);\n * ```\n */\nexport function u64Lengths(dataLength, aadLength, isLE) {\n // Reject coercible non-number lengths like '10' and true before BigInt(...) accepts them.\n anumber(dataLength);\n anumber(aadLength);\n abool(isLE);\n const num = new Uint8Array(16);\n const view = createView(num);\n view.setBigUint64(0, BigInt(aadLength), isLE);\n view.setBigUint64(8, BigInt(dataLength), isLE);\n return num;\n}\n/**\n * Helper for KDFs: consumes Uint8Array or string.\n * String inputs are UTF-8 encoded; byte-array inputs stay aliased to the caller buffer.\n * @param data - string or bytes input.\n * @param errorTitle - optional field name for byte validation.\n * @returns Byte representation of the input.\n * @throws On wrong argument types. {@link TypeError}\n * @example\n * ```ts\n * import { kdfInputToBytes } from '@awasm/noble/utils.js';\n * kdfInputToBytes('password');\n * ```\n */\nexport function kdfInputToBytes(data, errorTitle = '') {\n if (typeof data === 'string')\n return utf8ToBytes(data);\n return abytes(data, undefined, errorTitle);\n}\n/**\n * Copies several Uint8Arrays into one.\n * @param arrays - arrays to concatenate.\n * @returns Concatenated bytes.\n * @throws On wrong argument types. {@link TypeError}\n * @example\n * ```ts\n * import { concatBytes } from '@awasm/noble/utils.js';\n * concatBytes(new Uint8Array([1]), new Uint8Array([2, 3]));\n * ```\n */\nexport function concatBytes(...arrays) {\n let sum = 0;\n for (let i = 0; i < arrays.length; i++) {\n const a = arrays[i];\n abytes(a);\n sum += a.length;\n }\n const res = new Uint8Array(sum);\n for (let i = 0, pad = 0; i < arrays.length; i++) {\n const a = arrays[i];\n res.set(a, pad);\n pad += a.length;\n }\n return res;\n}\n/**\n * Fast copy for validated, in-bounds byte ranges.\n * Overlap is intentionally unsupported here for speed: hot callers only pass disjoint ranges,\n * and same-buffer moves must use copyWithin()/set() at the call site instead.\n * @param dst - destination byte array.\n * @param dstPos - write offset in destination.\n * @param src - source byte array.\n * @param srcPos - read offset in source.\n * @param len - number of bytes to copy.\n * @example\n * ```ts\n * import { copyFast } from '@awasm/noble/utils.js';\n * const dst = new Uint8Array(4);\n * copyFast(dst, 1, new Uint8Array([7, 8]), 0, 2);\n * ```\n */\nexport function copyFast(dst, dstPos, src, srcPos, len) {\n if (len <= 0)\n return;\n if (len <= 64)\n for (let i = 0; i < len; i++)\n dst[dstPos + i] = src[srcPos + i];\n else\n dst.set(src.subarray(srcPos, srcPos + len), dstPos);\n}\n/**\n * Fast copy for validated, in-bounds 32-bit word ranges.\n * Overlap is intentionally unsupported here for speed: hot callers only pass disjoint ranges,\n * and same-buffer moves must use copyWithin()/set() at the call site instead.\n * @param dst - destination word array.\n * @param dstPos - write offset in destination.\n * @param src - source word array.\n * @param srcPos - read offset in source.\n * @param len - number of words to copy.\n * @example\n * ```ts\n * import { copyFast32 } from '@awasm/noble/utils.js';\n * const dst = new Uint32Array(4);\n * copyFast32(dst, 1, new Uint32Array([7, 8]), 0, 2);\n * ```\n */\nexport function copyFast32(dst, dstPos, src, srcPos, len) {\n if (len <= 0)\n return;\n if (len <= 64)\n for (let i = 0; i < len; i++)\n dst[dstPos + i] = src[srcPos + i];\n else\n dst.set(src.subarray(srcPos, srcPos + len), dstPos);\n}\n/**\n * Callers must pass a validated byte array; Uint8Array.from() would otherwise coerce arbitrary iterables.\n * Copies into a detached Uint8Array instead of using slice(), because Buffer.slice() aliases memory.\n * @param bytes - bytes to copy.\n * @returns Detached copy of the input bytes.\n * @throws On wrong argument types. {@link TypeError}\n * @example\n * ```ts\n * import { copyBytes } from '@awasm/noble/utils.js';\n * copyBytes(new Uint8Array([1, 2, 3]));\n * ```\n */\nexport function copyBytes(bytes) {\n // `Uint8Array.from(...)` would also accept arrays / other typed arrays. Keep this helper strict\n // because callers use it at byte-validation boundaries before mutating the detached copy.\n return Uint8Array.from(abytes(bytes));\n}\n/**\n * Creates OID opts for NIST hashes, with prefix 06 09 60 86 48 01 65 03 04 02.\n * Current callers pass one-byte hashAlgs suffixes for 2.16.840.1.101.3.4.2.<suffix>,\n * so the DER length byte stays 0x09.\n * @param suffix - final OID suffix byte.\n * @returns DER-encoded OID bytes.\n * @example\n * ```ts\n * import { oidNist } from '@awasm/noble/utils.js';\n * oidNist(1);\n * ```\n */\nexport const oidNist = (suffix) => Uint8Array.from([\n 0x06,\n 0x09,\n 0x60,\n 0x86,\n 0x48,\n 0x01,\n 0x65,\n 0x03,\n 0x04,\n 0x02,\n suffix,\n]);\n/**\n * Merges default options and passed options.\n * This mutates `defaults`, so callers pass fresh defaults when they need reuse.\n * @param defaults - default option object.\n * @param opts - caller-provided overrides.\n * @returns Merged options object.\n * @throws On wrong argument types. {@link TypeError}\n * @example\n * ```ts\n * import { checkOpts } from '@awasm/noble/utils.js';\n * checkOpts({ a: 1 }, { b: 2 });\n * ```\n */\nexport function checkOpts(defaults, opts) {\n if (opts !== undefined && {}.toString.call(opts) !== '[object Object]')\n throw new TypeError('options must be object or undefined');\n const merged = Object.assign(defaults, opts);\n return merged;\n}\n/**\n * Build sync and async wrappers from the same generator body.\n * @param cb_ - generator callback shared by sync and async variants.\n * @returns Function exposing both sync and `.async(...)` entrypoints.\n * @example\n * ```ts\n * import { mkAsync } from '@awasm/noble/utils.js';\n * const twice = mkAsync(function* (_setup, value: number) {\n * return value * 2;\n * });\n * await twice.async(2);\n * ```\n */\nexport function mkAsync(cb_) {\n const cb = cb_;\n const genSetup = (canReturn) => {\n let setupDone = false;\n let progressTotal = -1;\n let done = 0;\n let stateBytes = 0;\n let state;\n let onSave = (_state) => { };\n let onRestore = (_state) => { };\n /**\n * Default scheduler yields to the Promise microtask queue.\n * Callers can pass `nextTick` when they need a custom scheduler.\n */\n let onNextTick = async () => { };\n return {\n save: () => {\n if (!canReturn || !stateBytes)\n return;\n if (!state)\n state = new Uint8Array(stateBytes);\n onSave(state);\n },\n restore: () => {\n if (!canReturn || !state)\n return;\n onRestore(state);\n },\n nextTick: () => onNextTick(),\n onEnd: () => {\n // setup() can be skipped on explicit sync fast-paths.\n if (progressTotal < 0)\n return;\n if (done !== progressTotal)\n throw new Error(`done (${done}) < progressTotal(${progressTotal})`);\n },\n setup: (_opts) => {\n const rawOpts = _opts;\n if (setupDone)\n throw new Error('setup already called');\n setupDone = true;\n if (!canReturn) {\n anumber(rawOpts.total, 'total');\n progressTotal = rawOpts.total;\n const onProgress = rawOpts.onProgress;\n if (onProgress !== undefined && typeof onProgress !== 'function')\n throw new Error('onProgress must be a function');\n if (!onProgress) {\n return (inc = 1) => {\n done += inc;\n return false;\n };\n }\n const callbackPer = Math.max(Math.floor(progressTotal / 10000), 1);\n return (inc = 1) => {\n done += inc;\n if (!(done % callbackPer) || done === progressTotal)\n onProgress(progressTotal ? done / progressTotal : 1);\n return false;\n };\n }\n const opts = { ...rawOpts };\n if (opts.asyncTick === undefined)\n delete opts.asyncTick; // will override defaults otherwise\n const { asyncTick, onProgress, stateBytes: _stateBytes, save, restore, nextTick, total, } = checkOpts({ asyncTick: 10 }, opts);\n anumber(asyncTick, 'asyncTick');\n anumber(total, 'total');\n progressTotal = total;\n for (const [k, v] of Object.entries({ onProgress, save, restore, nextTick })) {\n if (v !== undefined && typeof v !== 'function')\n throw new Error(`${k} must be a function`);\n }\n if (_stateBytes !== undefined)\n anumber(_stateBytes, 'stateBytes');\n if (_stateBytes !== undefined)\n stateBytes = _stateBytes;\n if ((save !== undefined || restore !== undefined) && !stateBytes)\n throw new Error('stateBytes must be a positive integer when save/restore is used');\n if (save !== undefined)\n onSave = save;\n if (restore !== undefined)\n onRestore = restore;\n if (nextTick !== undefined)\n onNextTick = nextTick;\n let needReturn = () => false;\n if (canReturn) {\n let ts = Date.now();\n needReturn = () => {\n // Date.now() is not monotonic, so in case if clock goes backwards we return return control too\n const diff = Date.now() - ts;\n if (diff >= 0 && diff < asyncTick)\n return false;\n ts += diff;\n return true;\n };\n }\n // Invoke callback if progress changes from 10.01 to 10.02\n // Allows to draw smooth progress bar on up to 8K screen\n const callbackPer = Math.max(Math.floor(progressTotal / 10000), 1);\n let progress = (inc = 1) => {\n done += inc;\n return needReturn();\n };\n if (onProgress) {\n progress = (inc = 1) => {\n done += inc;\n if (onProgress && (!(done % callbackPer) || done === total))\n onProgress(total ? done / total : 1);\n return needReturn();\n };\n }\n return progress;\n },\n };\n };\n const res = (...args) => {\n let setupDone = false;\n let progressTotal = -1;\n let done = 0;\n const setup = ((opts) => {\n const rawOpts = opts;\n if (setupDone)\n throw new Error('setup already called');\n setupDone = true;\n anumber(rawOpts.total, 'total');\n progressTotal = rawOpts.total;\n const onProgress = rawOpts.onProgress;\n if (onProgress !== undefined && typeof onProgress !== 'function')\n throw new Error('onProgress must be a function');\n if (!onProgress) {\n return (inc = 1) => {\n done += inc;\n return false;\n };\n }\n const callbackPer = Math.max(Math.floor(progressTotal / 10000), 1);\n return (inc = 1) => {\n done += inc;\n // Keep zero-total sync progress aligned with the async path for empty-input callers.\n if (!(done % callbackPer) || done === progressTotal)\n onProgress(progressTotal ? done / progressTotal : 1);\n return false;\n };\n });\n setup.isAsync = false;\n const g = cb(setup, ...args);\n let r = g.next();\n while (!r.done)\n r = g.next();\n if (progressTotal >= 0 && done !== progressTotal)\n throw new Error(`done (${done}) < progressTotal(${progressTotal})`);\n return r.value;\n };\n res.async = async (...args) => {\n const { setup, save, restore, onEnd, nextTick } = genSetup(true);\n const setupMode = setup;\n setupMode.isAsync = true;\n const g = cb(setupMode, ...args);\n let r = g.next();\n while (!r.done) {\n save();\n await nextTick();\n restore();\n r = g.next();\n }\n onEnd();\n return r.value;\n };\n return res;\n}\n/**\n * Compares two byte arrays in kinda constant time once lengths already match.\n * Different lengths return false immediately.\n * @param a - first byte array.\n * @param b - second byte array.\n * @returns True when the byte arrays are equal.\n * @example\n * ```ts\n * import { equalBytes } from '@awasm/noble/utils.js';\n * equalBytes(new Uint8Array([1, 2]), new Uint8Array([1, 2]));\n * ```\n */\nexport function equalBytes(a, b) {\n if (a.length !== b.length)\n return false;\n let diff = 0;\n for (let i = 0; i < a.length; i++)\n diff |= a[i] ^ b[i];\n return diff === 0;\n}\n/**\n * Cryptographically secure PRNG. Uses internal OS-level `crypto.getRandomValues`.\n * @param bytesLength - number of random bytes to generate.\n * @returns Random bytes.\n * @throws On wrong argument types. {@link TypeError}\n * @throws On wrong argument ranges or values. {@link RangeError}\n * @throws If a documented runtime validation or state check fails. {@link Error}\n * @example\n * ```ts\n * import { randomBytes } from '@awasm/noble/utils.js';\n * randomBytes(16);\n * ```\n */\nexport function randomBytes(bytesLength = 32) {\n // Validate upfront so fractional / coercible lengths do not silently\n // truncate through Uint8Array().\n anumber(bytesLength);\n const cr = typeof globalThis === 'object' ? globalThis.crypto : null;\n if (typeof cr?.getRandomValues !== 'function')\n throw new Error('crypto.getRandomValues must be defined');\n return cr.getRandomValues(new Uint8Array(bytesLength));\n}\n/**\n * Uses CSPRNG for nonce and injects it into ciphertext.\n * For `encrypt`, a `nonceLength`-byte nonce is fetched from CSPRNG and\n * prepended to encrypted ciphertext. For `decrypt`, the first `nonceLength`\n * bytes of ciphertext are treated as nonce.\n *\n * The wrapper always allocates a fresh `nonce || ciphertext` buffer on encrypt\n * and intentionally does not support caller-provided destination buffers.\n * Too-short decrypt inputs are split into short/empty nonce views and then\n * delegated to the wrapped cipher instead of being rejected here first.\n *\n * NOTE: Under the same key, using random nonces (e.g. `managedNonce`) with AES-GCM and ChaCha\n * should be limited to `2**23` (8M) messages to get a collision chance of\n * `2**-50`. Stretching to `2**32` (4B) messages would raise that chance to\n * `2**-33`, still negligible but creeping up.\n * @param fn - nonce-taking cipher factory.\n * @param randomBytes_ - CSPRNG used to generate nonces.\n * @returns Cipher factory that prepends managed nonces to ciphertext.\n * @throws On wrong argument types. {@link TypeError}\n * @throws On wrong argument ranges or values. {@link RangeError}\n * @example\n * ```ts\n * import { managedNonce } from '@awasm/noble/utils.js';\n * import { xchacha20poly1305 } from '@awasm/noble';\n * const cipher = managedNonce(xchacha20poly1305)(new Uint8Array(32));\n * const sealed = cipher.encrypt(new Uint8Array([1, 2, 3]));\n * cipher.decrypt(sealed);\n * ```\n */\nexport function managedNonce(fn, randomBytes_ = randomBytes) {\n const { nonceLength } = fn;\n const nonceLen = nonceLength;\n anumber(nonceLen);\n const addNonce = (nonce, ciphertext, plaintext) => {\n const out = concatBytes(nonce, ciphertext);\n // Wrapped ciphers may alias caller plaintext on encrypt(); don't wipe caller-owned bytes here.\n if (!overlapBytes(plaintext, ciphertext))\n ciphertext.fill(0);\n return out;\n };\n // NOTE: we cannot support DST here, it would be a mistake:\n // - we don't know how much dst length cipher requires\n // - nonce may unalign dst and break everything\n // - we create new u8a anyway (concatBytes)\n // - previously all args were passed-through to a cipher, but that was a mistake\n const res = ((key, ...args) => ({\n encrypt(plaintext) {\n abytes(plaintext);\n const nonce = randomBytes_(nonceLen);\n const encrypted = fn(key, nonce, ...args).encrypt(plaintext);\n // @ts-ignore\n if (encrypted instanceof Promise)\n return encrypted.then((ct) => addNonce(nonce, ct, plaintext));\n return addNonce(nonce, encrypted, plaintext);\n },\n decrypt(ciphertext) {\n abytes(ciphertext);\n const nonce = ciphertext.subarray(0, nonceLen);\n const decrypted = ciphertext.subarray(nonceLen);\n return fn(key, nonce, ...args).decrypt(decrypted);\n },\n }));\n // awasm tests and callers still treat managed wrappers as cipher factories, so preserve metadata.\n if ('blockSize' in fn)\n res.blockSize = fn.blockSize;\n res.nonceLength = nonceLen;\n if ('tagLength' in fn)\n res.tagLength = fn.tagLength;\n if (fn.withAAD)\n res.withAAD = true;\n return res;\n}\n", "/**\n * Abstract logic for hashes.\n * @module\n */\nimport { abool, abytes, anumber, clean, concatBytes, copyBytes, copyFast, isBytes, mkAsync, } from \"./utils.js\";\nconst checkParallelOutput = (opts, count, outputLen, canXOF) => {\n const raw = (isBytes(opts) ? {} : opts || {});\n if (raw.dkLen !== undefined)\n anumber(raw.dkLen, 'opts.dkLen');\n if (raw.outPos !== undefined)\n anumber(raw.outPos, 'opts.outPos');\n const dkLen = (raw.dkLen === undefined ? outputLen : raw.dkLen) | 0;\n if (!canXOF && dkLen > outputLen)\n throw new RangeError(`\"opts.dkLen\" expected <= ${outputLen}, got ${dkLen}`);\n if (Array.isArray(raw.out)) {\n if (raw.outPos !== undefined && raw.outPos !== 0)\n throw new Error('outPos is not supported with output view arrays');\n if (raw.out.length !== count)\n throw new RangeError('output array length must match messages length');\n for (let i = 0; i < count; i++)\n abytes(raw.out[i], dkLen, 'output');\n return { dkLen, out: raw.out };\n }\n if (raw.out !== undefined)\n abytes(raw.out, undefined, 'output');\n const out = raw.out || new Uint8Array(dkLen * count);\n const outPos = (raw.outPos === undefined ? 0 : raw.outPos) | 0;\n if (outPos < 0 || outPos + dkLen * count > out.length)\n throw new RangeError('out/outPos too small');\n const slices = [];\n for (let i = 0; i < count; i++) {\n const pos = outPos + i * dkLen;\n slices.push(out.subarray(pos, pos + dkLen));\n }\n return { dkLen, out: slices };\n};\nconst BRAND = /* @__PURE__ */ Symbol('hash_impl_brand');\nconst brandSet = /* @__PURE__ */ new WeakSet();\nfunction isBranded(x) {\n return typeof x === 'function' || (typeof x === 'object' && x !== null)\n ? brandSet.has(x)\n : false;\n}\n// Universal generic wrapper\nexport function mkHash(modFn, def_, platform) {\n const def = def_;\n const { outputLen, blockLen, suffix = 0, init, canXOF, oid } = def;\n const outBlockLen = def.outputBlockLen ? def.outputBlockLen : def.outputLen;\n let hashImpl;\n let hashAsyncImpl;\n let chunksImpl;\n let chunksAsyncImpl;\n let parallelImpl;\n let parallelAsyncImpl;\n let createImpl;\n let cleanStateImpl;\n let inited = false;\n function lazyInit() {\n if (inited)\n throw new Error('second lazyInit call');\n const mod = modFn();\n inited = true;\n const { processBlocks, processOutBlocks, padding, reset } = mod;\n const BUFFER = mod.segments.buffer;\n const STATE = mod.segments.state_chunks[0];\n const STATE_CHUNKS = mod.segments.state_chunks;\n const parallelChunks = mod.segments.state_chunks.length;\n const maxBlocks = Math.floor(BUFFER.length / blockLen);\n const chunks = maxBlocks - 2; // 2 for padding\n if (chunks < 1)\n throw new Error('wrong chunks');\n const maxOutBlocks = Math.floor(BUFFER.length / outBlockLen);\n const prefixStates = new WeakSet();\n function initHash(opts, batchPos = 0) {\n const rawOpts = opts;\n reset(batchPos, 1, 0, outBlockLen, maxOutBlocks);\n let blocks = 0;\n let streamOutputLen = outputLen;\n if (rawOpts.dkLen !== undefined) {\n anumber(rawOpts.dkLen, 'opts.dkLen');\n streamOutputLen = rawOpts.dkLen | 0;\n if (!canXOF && streamOutputLen > outputLen)\n throw new RangeError(`\"opts.dkLen\" expected <= ${outputLen}, got ${streamOutputLen}`);\n }\n if (init) {\n const i = init(batchPos, maxBlocks, mod, hash, rawOpts);\n if (i && i.blocks !== undefined)\n blocks = i.blocks;\n if (i && i.outputLen !== undefined)\n streamOutputLen = i.outputLen;\n }\n return { blocks, outputLen: streamOutputLen };\n }\n // reset(0, 1);\n function processMessage(msg, blocks) {\n // Preloaded blocks from init(): e.g., keyed BLAKE2 writes key||zeros into BUFFER\n // Invariant: these are full blocks, already in BUFFER, and must *not* be treated as 'last'.\n if (blocks > 0) {\n if (msg.length === 0) {\n const padBlocks = padding(0, blocks * blockLen, maxBlocks, 0, blockLen, suffix);\n processBlocks(0, 1, blocks + padBlocks, maxBlocks, blockLen, 1, 0, padBlocks);\n return;\n }\n processBlocks(0, 1, blocks, maxBlocks, blockLen, 0, 0, 0);\n }\n let pos = 0;\n do {\n const take = Math.min(msg.length - pos, chunks * blockLen);\n copyFast(BUFFER, 0, msg, pos, take);\n const isLast = pos + take == msg.length;\n // How many full/partial blocks do we have here? Can be zero.\n let blocks = Math.ceil(take / blockLen);\n // now, we need position where we add padding? take?\n // How much space remains? blockLen-rem, except rem=0.\n const left = blocks * blockLen - take;\n let padBlocks = 0;\n if (isLast) {\n // suffix for sha3 and length for blake1, nothing for others\n padBlocks = padding(0, take, maxBlocks, left, blockLen, suffix);\n blocks += padBlocks;\n }\n processBlocks(0, 1, blocks, maxBlocks, blockLen, isLast ? 1 : 0, left, padBlocks);\n pos += take;\n } while (pos < msg.length); // no extra final take=0 pass\n }\n function processMessages(parts, blocks, prefix) {\n // TODO: cleanup, garbage.\n const cap = (chunks * blockLen) | 0; // max bytes per batch\n // total length to keep isLast identical to single-buffer path\n const prefixLen = prefix ? prefix.buf.length : 0;\n let totalLen = prefixLen;\n for (let k = 0; k < parts.length; k++)\n totalLen += parts[k].length;\n // Preloaded blocks from init():\n // those are full blocks, already in BUFFER, and must NOT be treated as 'last'.\n if (blocks > 0) {\n if (totalLen === 0) {\n const padBlocks = padding(0, blocks * blockLen, maxBlocks, 0, blockLen, suffix);\n processBlocks(0, 1, blocks + padBlocks, maxBlocks, blockLen, 1, 0, padBlocks);\n return;\n }\n processBlocks(0, 1, blocks, maxBlocks, blockLen, 0, 0, 0);\n }\n let pos = 0; // global position in virtual concatenation\n let idx = 0; // which part\n let off = 0; // offset within current part\n while (pos < totalLen) {\n const take = Math.min(totalLen - pos, cap) | 0;\n // fill BUFFER[0..take) from parts[idx..] without concat\n let written = 0;\n if (prefix && pos < prefixLen) {\n const n = Math.min(take, prefixLen - pos) | 0;\n copyFast(BUFFER, written, prefix.buf, pos, n);\n written += n;\n }\n while (written < take) {\n const cur = parts[idx];\n const rem = (cur.length - off) | 0;\n const n = (take - written < rem ? take - written : rem) | 0;\n copyFast(BUFFER, written, cur, off, n);\n written += n;\n off += n;\n if (off === cur.length) {\n idx++;\n off = 0;\n }\n }\n const isLast = pos + take === totalLen;\n let blocks = Math.ceil(take / blockLen) | 0;\n const left = (blocks * blockLen - take) | 0;\n let padBlocks = 0;\n if (isLast) {\n padBlocks = padding(0, take, maxBlocks, left, blockLen, suffix) | 0;\n blocks = (blocks + padBlocks) | 0;\n }\n processBlocks(0, 1, blocks, maxBlocks, blockLen, isLast ? 1 : 0, left, padBlocks);\n pos += take;\n }\n return;\n }\n // same as processMessage but with chunkPos.\n function processMessageParallel(msg, chunkPos, chunkLen, blocks, maxBlocks, prefix) {\n const chunks = maxBlocks - 2;\n if (chunks < 1)\n throw new Error('wrong chunks');\n const prefixLen = prefix ? prefix.buf.length : 0;\n const msgLen = msg[chunkPos].length;\n const totalLen = prefixLen + msgLen;\n const copyLane = (dst, lane, pos, take) => {\n let written = 0;\n if (prefix && pos < prefixLen) {\n const n = Math.min(take, prefixLen - pos);\n copyFast(BUFFER, dst, prefix.buf, pos, n);\n written += n;\n }\n if (written < take)\n copyFast(BUFFER, dst + written, lane, pos + written - prefixLen, take - written);\n };\n // Caller validates per-group size equality before touching module state.\n if (blocks > 0) {\n if (totalLen === 0) {\n // No more message input: do a normal finalization over an empty tail.\n // Keep 'left' consistent with the wrapper contract for take=0: left=0.\n const padBlocks = padding(0, blocks * blockLen, maxBlocks, 0, blockLen, suffix);\n for (let j = 0; j < chunkLen; j++) {\n const pb2 = padding(j, blocks * blockLen, maxBlocks, 0, blockLen, suffix);\n if (pb2 !== padBlocks)\n throw new Error('different padding across batch');\n }\n processBlocks(0, chunkLen, blocks + padBlocks, maxBlocks, blockLen, 1, 0, padBlocks);\n return;\n }\n processBlocks(0, chunkLen, blocks, maxBlocks, blockLen, 0, 0, 0);\n }\n let pos = 0;\n do {\n const take = Math.min(totalLen - pos, chunks * blockLen);\n for (let i = 0; i < chunkLen; i++) {\n copyLane(i * maxBlocks * blockLen, msg[chunkPos + i], pos, take);\n }\n const isLast = pos + take == totalLen;\n // How many full/partial blocks do we have here? Can be zero.\n let blocks = Math.ceil(take / blockLen);\n // How much space remains? blockLen-rem, except rem=0.\n const left = blocks * blockLen - take;\n let padBlocks = 0;\n if (isLast) {\n // suffix for sha3 and length for blake1, nothing for others\n padBlocks = padding(0, take, maxBlocks, left, blockLen, suffix);\n for (let j = 1; j < chunkLen; j++) {\n const pb2 = padding(j, take, maxBlocks, left, blockLen, suffix);\n if (pb2 !== padBlocks)\n throw new Error('parallel batch: different padding');\n }\n blocks += padBlocks;\n }\n processBlocks(0, chunkLen, blocks, maxBlocks, blockLen, isLast ? 1 : 0, left, padBlocks);\n pos += take;\n } while (pos < totalLen); // no extra final take=0 pass\n return;\n }\n function checkOutputOpts(o = {}, bytes, defaultLen = outputLen) {\n const raw = o;\n if (raw.dkLen !== undefined)\n anumber(raw.dkLen, 'opts.dkLen');\n if (raw.outPos !== undefined)\n anumber(raw.outPos, 'opts.outPos');\n if (raw.out !== undefined)\n abytes(raw.out, undefined, 'output');\n if (bytes !== undefined)\n anumber(bytes, 'xof.bytes');\n let dkLen = bytes !== undefined ? bytes : (raw.dkLen === undefined ? defaultLen : raw.dkLen) | 0;\n // Old awasm hash output opts intentionally allow requesting a shorter fixed digest, but\n // must reject oversize lengths instead of silently clamping or zero-extending the tail.\n if (!canXOF && dkLen > outputLen)\n throw new RangeError(`\"opts.dkLen\" expected <= ${outputLen}, got ${dkLen}`);\n const out = raw.out || new Uint8Array(dkLen);\n const outPos = (raw.outPos === undefined ? 0 : raw.outPos) | 0;\n if (outPos < 0 || outPos + dkLen > out.length)\n throw new RangeError('out/outPos too small');\n return { dkLen, out: out, outPos };\n }\n function processOutput(o = {}, checked = checkOutputOpts(o)) {\n const { dkLen, out, outPos } = checked;\n const batch = chunks | 0;\n const blocksTotal = ((dkLen + outBlockLen - 1) / outBlockLen) | 0; // ceil div\n let produced = 0, blocksLeft = blocksTotal;\n let maxWritten = 0;\n while (blocksLeft > 0) {\n const takeBlocks = blocksLeft > batch ? batch : blocksLeft;\n const isLast = blocksLeft === takeBlocks ? 1 : 0;\n processOutBlocks(0, 1, takeBlocks, maxOutBlocks, outBlockLen, isLast);\n const emitted = takeBlocks * outBlockLen;\n const need = dkLen - produced;\n const takeBytes = need < emitted ? need : emitted;\n copyFast(out, outPos + produced, BUFFER, 0, takeBytes);\n maxWritten = Math.max(maxWritten, takeBytes, takeBlocks * outBlockLen);\n produced += takeBytes;\n blocksLeft -= takeBlocks;\n }\n // NOTE: it would be nice to return slices subarray here, but it is not free!\n return { maxWritten, out };\n }\n function processOutputParallel(chunkLen, maxOutBlocks, checked, outOffset) {\n const chunks = maxOutBlocks;\n const { dkLen, out } = checked;\n let maxWritten = 0;\n const batch = chunks | 0;\n const blocksTotal = ((dkLen + outBlockLen - 1) / outBlockLen) | 0; // ceil div\n let produced = 0, blocksLeft = blocksTotal;\n while (blocksLeft > 0) {\n const takeBlocks = blocksLeft > batch ? batch : blocksLeft;\n const isLast = blocksLeft === takeBlocks ? 1 : 0;\n processOutBlocks(0, chunkLen, takeBlocks, maxOutBlocks, outBlockLen, isLast);\n const emitted = takeBlocks * outBlockLen;\n const need = dkLen - produced;\n const takeBytes = need < emitted ? need : emitted;\n for (let i = 0; i < chunkLen; i++) {\n copyFast(out[outOffset + i], produced, BUFFER, i * outBlockLen * maxOutBlocks, takeBytes);\n // Some modules (e.g. blake3) may write full output blocks even when only part is copied out.\n // Track emitted block span for reset() so unread bytes are also zeroized.\n maxWritten = Math.max(maxWritten, takeBytes, emitted);\n }\n produced += takeBytes;\n blocksLeft -= takeBlocks;\n }\n // NOTE: it would be nice to return slices subarray here, but it is not free!\n return { out, maxWritten };\n }\n const stateBytes = (state) => {\n if (!isBytes(state))\n throw new Error('prefixState is not from this hash');\n if (state.length < STATE.length)\n throw new Error('prefixState is too short');\n // Byte-state backends serialize only `state || partialBlock`; a full block must be flushed.\n if (state.length >= STATE.length + blockLen)\n throw new Error('prefixState is too long');\n if (!prefixStates.has(state))\n throw new Error('prefixState is not from this hash');\n return state;\n };\n const prefixState = (opts = {}) => {\n const raw = opts;\n if (raw.prefixState === undefined)\n return;\n const state = stateBytes(raw.prefixState);\n return { state: state.subarray(0, STATE.length), buf: state.subarray(STATE.length) };\n };\n class StreamHash {\n canXOF;\n blockLen;\n outputLen;\n buf;\n pos;\n state;\n finished;\n destroyed;\n constructor(opts) {\n if (opts.streamBufLen % blockLen || opts.streamBufLen < blockLen)\n throw new Error('wrong streamBufLen');\n this.finished = false;\n this.destroyed = false;\n // this.reserve = blockLen; // TODO: change when sha2\n this.buf = new Uint8Array(opts.streamBufLen);\n this.pos = 0;\n if (opts.blocks !== undefined) {\n if (opts.blocks * blockLen > this.buf.length)\n throw new Error('too much blocks');\n copyFast(this.buf, 0, BUFFER, 0, opts.blocks * blockLen);\n this.pos = opts.blocks * blockLen;\n }\n this.canXOF = !!canXOF;\n this.blockLen = blockLen;\n this.outputLen = opts.outputLen;\n this.state = copyBytes(STATE);\n reset(0, 1, 0, outBlockLen, maxOutBlocks); // cleanup\n }\n restoreState() {\n copyFast(STATE, 0, this.state, 0, STATE.length);\n }\n saveState() {\n this.state = copyBytes(STATE);\n }\n update(msg) {\n abytes(msg);\n if (this.destroyed)\n throw new Error('Hash instance has been destroyed');\n if (this.finished)\n throw new Error('Hash#digest() has already been called');\n let msgPos = 0;\n let blocks = Math.ceil((this.pos + msg.length) / blockLen) - 1; // never process last block here!\n if (blocks > 0) {\n this.restoreState();\n let takeBlocks = Math.min(chunks, blocks);\n // first can be unaligned!\n const msgFirstLen = takeBlocks * blockLen - this.pos;\n copyFast(BUFFER, 0, this.buf, 0, this.pos);\n copyFast(BUFFER, this.pos, msg, msgPos, msgFirstLen);\n this.pos = 0;\n msgPos += msgFirstLen;\n processBlocks(0, 1, takeBlocks, maxBlocks, blockLen, 0, 0, 0);\n blocks -= takeBlocks;\n for (; msgPos < msg.length && blocks;) {\n const takeBlocks = Math.min(chunks, blocks);\n copyFast(BUFFER, 0, msg, msgPos, takeBlocks * blockLen);\n processBlocks(0, 1, takeBlocks, maxBlocks, blockLen, 0, 0, 0);\n blocks -= takeBlocks;\n msgPos += takeBlocks * blockLen;\n }\n this.saveState();\n reset(0, 1, 0, outBlockLen, maxOutBlocks);\n }\n // save leftovers\n const leftover = msg.length - msgPos;\n if (leftover) {\n copyFast(this.buf, this.pos, msg, msgPos, leftover);\n this.pos += leftover;\n }\n return this;\n }\n finish() {\n if (this.finished)\n throw new Error('Hash#digest() has already been called');\n this.restoreState();\n this.finished = true;\n const isLast = true;\n let take = this.pos;\n let blocks = Math.ceil(take / blockLen);\n copyFast(BUFFER, 0, this.buf, 0, this.pos);\n const left = blocks * blockLen - take; // how much space we have. blockLen-rem except when rem=0\n let padBlocks = 0;\n if (isLast) {\n padBlocks = padding(0, take, maxBlocks, left, blockLen, suffix); // suffix for sha3 and length for blake1, nothing for others\n blocks += padBlocks;\n }\n processBlocks(0, 1, blocks, maxBlocks, blockLen, 1, left, padBlocks);\n this.pos = outBlockLen;\n return blocks * blockLen;\n }\n digest(opts = {}) {\n if (this.destroyed)\n throw new Error('Hash instance has been destroyed');\n const outChecked = checkOutputOpts(opts, undefined, this.outputLen);\n this.finish();\n const { out: res, maxWritten } = processOutput(opts, outChecked);\n this.destroy();\n reset(0, 1, maxWritten, outBlockLen, maxOutBlocks);\n return res;\n }\n /**\n * Resets internal state. Makes Hash instance unusable.\n * Reset is impossible for keyed hashes if key is consumed into state. If digest is not consumed\n * by user, they will need to manually call `destroy()` when zeroing is necessary.\n */\n destroy() {\n this.destroyed = true;\n this.state.fill(0);\n this.buf.fill(0);\n }\n xof(bytes, opts = {}) {\n if (!canXOF)\n throw new Error('XOF is not possible for this instance');\n if (this.destroyed)\n throw new Error('Hash instance has been destroyed');\n const outChecked = checkOutputOpts(opts, bytes);\n if (!this.finished) {\n this.finish();\n this.saveState();\n }\n // XOF mutates module state via processOutBlocks(). Snapshot/restore around calls so\n // stream instances don't leak squeeze state into global hash wrappers.\n this.restoreState();\n const { out, outPos } = outChecked;\n for (let pos = 0; pos < bytes;) {\n if (this.pos >= outBlockLen) {\n // get next squeeze block\n processOutBlocks(0, 1, 1, maxOutBlocks, outBlockLen, 0); // never 'last' in XOF\n copyFast(this.buf, 0, BUFFER, 0, outBlockLen);\n this.pos = 0;\n }\n const take = (outBlockLen - this.pos < bytes - pos ? outBlockLen - this.pos : bytes - pos) | 0;\n copyFast(out, (outPos + pos) | 0, this.buf, this.pos, take);\n this.pos = (this.pos + take) | 0;\n pos = (pos + take) | 0;\n }\n this.saveState();\n reset(0, 1, 0, outBlockLen, maxOutBlocks);\n return out;\n }\n // old api\n digestInto(buf) {\n // digestInto is the fixed-size surface even for XOF hashes, but callers may provide a\n // larger workspace buffer and expect the tail to stay untouched.\n abytes(buf, undefined, 'output');\n if (buf.length < this.outputLen)\n // Keep short digest destinations aligned with the shared noble-hashes contract:\n // wrong output type -> TypeError, too-short output -> RangeError.\n throw new RangeError('digestInto() expects output buffer of length at least ' + this.outputLen);\n this.digest({ out: buf.subarray(0, this.outputLen), dkLen: this.outputLen });\n }\n xofInto(buf) {\n return this.xof(buf.length, { out: buf });\n }\n /**\n * Clones hash instance. Unsafe: doesn't check whether `to` is valid. Can be used as `clone()`\n * when no options are passed.\n * Reasons to use `_cloneInto` instead of clone: 1) performance 2) reuse instance => all internal\n * buffers are overwritten => causes buffer overwrite which is used for digest in some cases.\n * There are no guarantees for clean-up because it's impossible in JS.\n */\n _cloneInto(to) {\n if (this.destroyed)\n throw new Error('Hash instance has been destroyed');\n // Allocate target if needed (ensure same stream buffer capacity).\n const dst = to || new this.constructor({ streamBufLen: this.buf.length });\n if (!(dst instanceof StreamHash))\n throw new Error('wrong instance');\n if (dst.buf.length !== this.buf.length)\n throw new Error('wrong buffer length');\n // Clones must preserve the public stream metadata too. digest()/digestInto() allocate and\n // validate against outputLen, xof()/xofInto() gate on canXOF, and callers may read blockLen.\n dst.blockLen = this.blockLen;\n dst.outputLen = this.outputLen;\n dst.canXOF = this.canXOF;\n // Copy tail / XOF cache content up to bufPos.\n if (this.pos)\n copyFast(dst.buf, 0, this.buf, 0, this.pos);\n dst.pos = this.pos | 0;\n // Snapshot of full engine state used by restoreState().\n dst.state = copyBytes(this.state);\n // Flags\n dst.finished = !!this.finished;\n dst.destroyed = !!this.destroyed;\n return dst;\n }\n // Safe version that clones internal state\n clone() {\n return this._cloneInto();\n }\n exportState() {\n if (this.destroyed)\n throw new Error('Hash instance has been destroyed');\n if (this.finished)\n throw new Error('Hash#digest() has already been called');\n // update() keeps one full tail block unprocessed for finalization; export must absorb it\n // so a full-block prefix is represented only by the engine state plus a short leftover.\n if (this.pos === blockLen) {\n this.restoreState();\n copyFast(BUFFER, 0, this.buf, 0, blockLen);\n processBlocks(0, 1, 1, maxBlocks, blockLen, 0, 0, 0);\n this.saveState();\n this.pos = 0;\n this.buf.fill(0);\n reset(0, 1, 0, outBlockLen, maxOutBlocks);\n }\n // Returned bytes are exactly `state || partialBlock`, with no outputLen, pos, or header.\n const out = new Uint8Array(this.state.length + this.pos);\n out.set(this.state);\n if (this.pos)\n out.set(this.buf.subarray(0, this.pos), this.state.length);\n prefixStates.add(out);\n return out;\n }\n }\n const hashSync = (msg, opts = {}) => {\n abytes(msg);\n const outChecked = checkOutputOpts(opts);\n const { blocks } = initHash(opts);\n processMessage(msg, blocks);\n const { out: res, maxWritten } = processOutput(opts, outChecked);\n reset(0, 1, maxWritten, outBlockLen, maxOutBlocks);\n return res;\n };\n const chunksSync = (parts, opts = {}) => {\n if (!Array.isArray(parts))\n throw new Error('expected array of messages');\n let total = 0;\n for (const p of parts) {\n abytes(p);\n total += p.length;\n }\n const prefix = prefixState(opts);\n if (prefix && total === 0)\n throw new Error('prefixState requires a non-empty message');\n const outChecked = checkOutputOpts(opts);\n if (prefix) {\n reset(0, 1, 0, outBlockLen, maxOutBlocks);\n copyFast(STATE, 0, prefix.state, 0, prefix.state.length);\n processMessages(parts, 0, prefix);\n }\n else {\n const { blocks } = initHash(opts);\n processMessages(parts, blocks);\n }\n const { out: res, maxWritten } = processOutput(opts, outChecked);\n reset(0, 1, maxWritten, outBlockLen, maxOutBlocks);\n return res;\n };\n const parallelSync = (chunks, opts = {}) => {\n if (!Array.isArray(chunks))\n throw new Error('expected array of messages');\n const prefix = prefixState(opts);\n if (prefix && chunks.length === 0)\n throw new Error('prefixState requires a non-empty message');\n // At least 3 blocks (for padding).\n const maxGroups = Math.floor(BUFFER.length / (blockLen * 3));\n const maxOutGroups = Math.floor(BUFFER.length / outBlockLen);\n // Validate user input first. Wrong input must throw before touching module state/memory.\n for (let i = 0; i < chunks.length; i += parallelChunks) {\n const groupLen = Math.min(parallelChunks, chunks.length - i, maxGroups, maxOutGroups);\n for (let j = 0; j < groupLen; j++)\n if (!isBytes(chunks[i + j]))\n throw new Error(`expected Uint8Array, got type=${typeof chunks[i + j]}`);\n if (prefix && chunks[i].length === 0)\n throw new Error('prefixState requires a non-empty message');\n for (let j = 1; j < groupLen; j++) {\n if (chunks[i + j].length !== chunks[i].length)\n throw new Error('different sizes inside chunk');\n }\n }\n const outChecked = checkParallelOutput(opts, chunks.length, outputLen, canXOF);\n for (let i = 0; i < chunks.length; i += parallelChunks) {\n const groupLen = Math.min(parallelChunks, chunks.length - i, maxGroups, maxOutGroups);\n const maxBlocks = Math.floor(BUFFER.length / (blockLen * groupLen));\n const maxOutBlocks = Math.floor(BUFFER.length / (outBlockLen * groupLen));\n let blocks = 0;\n if (prefix) {\n reset(0, groupLen, 0, outBlockLen, maxOutBlocks);\n for (let j = 0; j < groupLen; j++)\n copyFast(STATE_CHUNKS[j], 0, prefix.state, 0, prefix.state.length);\n }\n else if (init) {\n const i = init(0, maxBlocks, mod, hash, opts);\n if (i && i.blocks !== undefined)\n blocks = i.blocks;\n for (let j = 0; j < groupLen; j++) {\n const t = init(j, maxBlocks, mod, hash, opts);\n if ((t && t.blocks) !== (i && i.blocks))\n throw new Error('inconsistent init blocks inside parallel group');\n }\n }\n processMessageParallel(chunks, i, groupLen, blocks, maxBlocks, prefix);\n const { maxWritten } = processOutputParallel(groupLen, maxOutBlocks, outChecked, i);\n reset(0, groupLen, maxWritten, outBlockLen, maxOutBlocks);\n }\n return outChecked.out;\n };\n const setupTick = (setup, total, opts) => {\n const rawSetup = setup;\n const rawOpts = opts;\n return !rawSetup.isAsync\n ? !rawOpts?.onProgress\n ? (rawSetup({ total: 0 }), (_inc) => false)\n : rawSetup({ total, onProgress: rawOpts.onProgress })\n : rawSetup({\n total,\n asyncTick: rawOpts?.asyncTick,\n onProgress: rawOpts?.onProgress,\n nextTick: rawOpts?.nextTick,\n });\n };\n const hashRun = mkAsync(function* (setup, msg, opts = {}) {\n const setupMode = setup;\n if (!setupMode.isAsync && !opts?.onProgress)\n return hashSync(msg, opts);\n const tick = setupTick(setupMode, msg.length, opts);\n const out = hashSync(msg, opts);\n if ((setupMode.isAsync || !!opts?.onProgress) && tick(msg.length))\n yield;\n return out;\n });\n const chunksRun = mkAsync(function* (setup, parts, opts = {}) {\n const setupMode = setup;\n if (!setupMode.isAsync && !opts?.onProgress)\n return chunksSync(parts, opts);\n let total = 0;\n for (const p of parts)\n total += p.length;\n const tick = setupTick(setupMode, total, opts);\n const out = chunksSync(parts, opts);\n if ((setupMode.isAsync || !!opts?.onProgress) && tick(total))\n yield;\n return out;\n });\n const parallelRun = mkAsync(function* (setup, parts, opts = {}) {\n const setupMode = setup;\n if (!setupMode.isAsync && !opts?.onProgress)\n return parallelSync(parts, opts);\n let total = 0;\n for (const p of parts)\n total += p.length;\n const tick = setupTick(setupMode, total, opts);\n const out = parallelSync(parts, opts);\n if ((setupMode.isAsync || !!opts?.onProgress) && tick(total))\n yield;\n return out;\n });\n hashImpl = (msg, opts = {}) => hashSync(msg, opts);\n hashAsyncImpl = async (msg, opts) => {\n const rawOpts = opts;\n if (!rawOpts)\n return hashSync(msg, {});\n return rawOpts.asyncTick !== undefined ||\n rawOpts.onProgress !== undefined ||\n rawOpts.nextTick !== undefined\n ? hashRun.async(msg, rawOpts)\n : hashSync(msg, rawOpts);\n };\n chunksImpl = (parts, opts = {}) => chunksSync(parts, opts);\n chunksAsyncImpl = async (parts, opts) => {\n const rawOpts = opts;\n if (!rawOpts)\n return chunksSync(parts, {});\n return rawOpts.asyncTick !== undefined ||\n rawOpts.onProgress !== undefined ||\n rawOpts.nextTick !== undefined\n ? chunksRun.async(parts, rawOpts)\n : chunksSync(parts, rawOpts);\n };\n parallelImpl = (parts, opts = {}) => parallelSync(parts, opts);\n parallelAsyncImpl = async (parts, opts) => {\n const rawOpts = opts;\n if (!rawOpts)\n return parallelSync(parts, {});\n return rawOpts.asyncTick !== undefined ||\n rawOpts.onProgress !== undefined ||\n rawOpts.nextTick !== undefined\n ? parallelRun.async(parts, rawOpts)\n : parallelSync(parts, rawOpts);\n };\n createImpl = (opts = {}) => {\n const rawOpts = opts;\n reset(0, 1, 0, outBlockLen, maxOutBlocks);\n const { blocks, outputLen } = initHash(rawOpts);\n return new StreamHash({ ...rawOpts, streamBufLen: blockLen, blocks, outputLen });\n };\n cleanStateImpl = (state) => {\n const bytes = stateBytes(state);\n clean(bytes);\n prefixStates.delete(bytes);\n };\n }\n // Trampoline: init only on first usage\n hashImpl = (msg, opts) => {\n lazyInit();\n return hashImpl(msg, opts);\n };\n hashAsyncImpl = (msg, opts) => {\n lazyInit();\n return hashAsyncImpl(msg, opts);\n };\n chunksImpl = (parts, opts) => {\n lazyInit();\n return chunksImpl(parts, opts);\n };\n chunksAsyncImpl = (parts, opts) => {\n lazyInit();\n return chunksAsyncImpl(parts, opts);\n };\n parallelImpl = (chunks, opts) => {\n lazyInit();\n return parallelImpl(chunks, opts);\n };\n parallelAsyncImpl = (chunks, opts) => {\n lazyInit();\n return parallelAsyncImpl(chunks, opts);\n };\n createImpl = (opts) => {\n lazyInit();\n return createImpl(opts);\n };\n cleanStateImpl = (state) => {\n lazyInit();\n return cleanStateImpl(state);\n };\n const hash = ((msg, opts = {}) => hashImpl(msg, opts));\n const chunksFn = (parts, opts = {}) => chunksImpl(parts, opts);\n Object.assign(chunksFn, {\n async: (parts, opts) => chunksAsyncImpl(parts, opts),\n });\n const parallel = (chunks, opts = {}) => parallelImpl(chunks, opts);\n Object.assign(parallel, {\n async: (chunks, opts) => parallelAsyncImpl(chunks, opts),\n });\n Object.assign(hash, {\n async: (msg, opts) => hashAsyncImpl(msg, opts),\n chunks: chunksFn,\n parallel,\n create: (opts = {}) => createImpl(opts),\n cleanState: (state) => cleanStateImpl(state),\n getPlatform: () => platform,\n getDefinition: () => def,\n canXOF: !!canXOF,\n outputLen,\n blockLen,\n oid,\n });\n Object.defineProperty(hash, BRAND, { value: true, enumerable: false });\n brandSet.add(hash);\n return Object.freeze(hash);\n}\nexport function mkHashNoble(def_, impl_, platform = 'noble') {\n const def = def_;\n const impl = impl_;\n const { outputLen, blockLen, canXOF, oid } = def;\n const rawOutputOpts = (opts) => (isBytes(opts) ? {} : opts || {});\n const hasOutputOpts = (opts) => {\n const raw = rawOutputOpts(opts);\n return raw.dkLen !== undefined || raw.out !== undefined || raw.outPos !== undefined;\n };\n const prefixStates = new WeakSet();\n const stateStream = (state) => {\n if ((typeof state !== 'object' && typeof state !== 'function') || state === null)\n throw new Error('prefixState is not from this hash');\n const stream = state;\n if (!prefixStates.has(stream))\n throw new Error('prefixState is not from this hash');\n return stream;\n };\n const prefixState = (opts) => {\n const raw = rawOutputOpts(opts);\n if (raw.prefixState === undefined)\n return;\n return stateStream(raw.prefixState);\n };\n const checkOutput = (opts, bytes, defaultLen = outputLen) => {\n const raw = rawOutputOpts(opts);\n if (raw.dkLen !== undefined)\n anumber(raw.dkLen, 'opts.dkLen');\n if (raw.outPos !== undefined)\n anumber(raw.outPos, 'opts.outPos');\n if (raw.out !== undefined)\n abytes(raw.out, undefined, 'output');\n if (bytes !== undefined)\n anumber(bytes, 'xof.bytes');\n const dkLen = (bytes !== undefined ? bytes : raw.dkLen === undefined ? defaultLen : raw.dkLen) | 0;\n if (!canXOF && dkLen > outputLen)\n throw new RangeError(`\"opts.dkLen\" expected <= ${outputLen}, got ${dkLen}`);\n const hasOut = raw.out !== undefined;\n const out = raw.out || new Uint8Array(dkLen);\n const outPos = (raw.outPos === undefined ? 0 : raw.outPos) | 0;\n if (outPos < 0 || outPos + dkLen > out.length)\n throw new RangeError('out/outPos too small');\n return { dkLen, out: out, outPos, hasOut };\n };\n const writeInto = (inner, out, dkLen, tmp) => {\n const rawInner = inner;\n const rawOut = out;\n let rawTmp = tmp;\n if (canXOF) {\n rawInner.xofInto(rawOut.subarray(0, dkLen));\n return rawTmp;\n }\n // noble BLAKE2 streams require aligned digestInto() views, but awasm outPos is byte-granular.\n if (dkLen === outputLen && (rawOut.byteOffset & 3) === 0)\n rawInner.digestInto(rawOut);\n else {\n if (!rawTmp || rawTmp.length < outputLen)\n rawTmp = new Uint8Array(outputLen);\n rawInner.digestInto(rawTmp);\n if (dkLen)\n copyFast(rawOut, 0, rawTmp, 0, dkLen);\n }\n return rawTmp;\n };\n class Stream {\n canXOF = !!canXOF;\n blockLen = blockLen;\n outputLen;\n inner;\n constructor(inner, outputLen) {\n this.inner = inner;\n this.outputLen = outputLen;\n }\n update(msg) {\n abytes(msg);\n this.inner.update(msg);\n return this;\n }\n digest(opts) {\n if (!hasOutputOpts(opts) && !canXOF && this.outputLen === outputLen)\n return this.inner.digest();\n const checked = checkOutput(opts, undefined, this.outputLen);\n const tmp = writeInto(this.inner, checked.out.subarray(checked.outPos, checked.outPos + checked.dkLen), checked.dkLen);\n if (tmp)\n clean(tmp);\n return checked.out;\n }\n destroy() {\n this.inner.destroy();\n }\n xof(bytes, opts) {\n if (!canXOF)\n throw new Error('XOF is not possible for this instance');\n if (!hasOutputOpts(opts)) {\n anumber(bytes, 'xof.bytes');\n if (this.inner.xof)\n return this.inner.xof(bytes);\n const out = new Uint8Array(bytes);\n this.inner.xofInto(out);\n return out;\n }\n const checked = checkOutput(opts, bytes);\n this.inner.xofInto(checked.out.subarray(checked.outPos, checked.outPos + checked.dkLen));\n return checked.out;\n }\n digestInto(buf) {\n abytes(buf, undefined, 'output');\n if (buf.length < this.outputLen)\n throw new RangeError('digestInto() expects output buffer of length at least ' + this.outputLen);\n const tmp = writeInto(this.inner, buf.subarray(0, this.outputLen), this.outputLen);\n if (tmp)\n clean(tmp);\n }\n xofInto(buf) {\n abytes(buf, undefined, 'output');\n if (!canXOF)\n throw new Error('XOF is not possible for this instance');\n this.inner.xofInto(buf);\n return buf;\n }\n _cloneInto(to) {\n if (to !== undefined && !(to instanceof Stream))\n throw new Error('wrong instance');\n const inner = this.inner._cloneInto(to?.inner);\n if (to) {\n to.inner = inner;\n to.outputLen = this.outputLen;\n return to;\n }\n return new Stream(inner, this.outputLen);\n }\n clone() {\n return this._cloneInto();\n }\n exportState() {\n // Native noble streams may carry structured state, e.g. BLAKE3. The clone itself is the state.\n const state = this.inner._cloneInto();\n prefixStates.add(state);\n return state;\n }\n }\n const createSync = (opts = {}) => {\n if (!impl.create)\n throw new Error('streaming is not supported');\n const inner = impl.create(opts);\n const raw = rawOutputOpts(opts);\n if (raw.dkLen !== undefined)\n anumber(raw.dkLen, 'opts.dkLen');\n const fallback = inner.outputLen || outputLen;\n const len = raw.dkLen === undefined ? fallback : raw.dkLen;\n if (!canXOF && len > outputLen)\n throw new RangeError(`\"opts.dkLen\" expected <= ${outputLen}, got ${len}`);\n return new Stream(inner, len);\n };\n const hashSync = (msg, opts = {}) => {\n abytes(msg);\n const raw = rawOutputOpts(opts);\n if (raw.out === undefined &&\n raw.outPos === undefined &&\n (raw.dkLen === undefined || (canXOF && raw.dkLen !== undefined)))\n return impl.hash(msg, opts);\n const checked = checkOutput(opts);\n const res = impl.hash(msg, opts);\n const { dkLen, out, outPos, hasOut } = checked;\n if (res.length < dkLen)\n throw new RangeError('output is too small');\n if (!hasOut && res.length === dkLen)\n return res;\n if (dkLen)\n copyFast(out, outPos, res, 0, dkLen);\n if (out !== res)\n clean(res);\n return out;\n };\n const chunksSync = (parts, opts = {}) => {\n if (!Array.isArray(parts))\n throw new Error('expected array of messages');\n let total = 0;\n for (const p of parts) {\n abytes(p);\n total += p.length;\n }\n const prefix = prefixState(opts);\n if (prefix && total === 0)\n throw new Error('prefixState requires a non-empty message');\n if (prefix) {\n const h = new Stream(prefix._cloneInto(), outputLen);\n for (const p of parts)\n h.update(p);\n return h.digest(rawOutputOpts(opts));\n }\n if (impl.create) {\n const h = createSync(opts);\n for (const p of parts)\n h.update(p);\n return h.digest(rawOutputOpts(opts));\n }\n const joined = concatBytes(...parts);\n try {\n return hashSync(joined, opts);\n }\n finally {\n clean(joined);\n }\n };\n const parallelSync = (parts, opts = {}) => {\n if (!Array.isArray(parts))\n throw new Error('expected array of messages');\n for (const p of parts)\n abytes(p);\n const prefix = prefixState(opts);\n if (prefix && parts.length === 0)\n throw new Error('prefixState requires a non-empty message');\n if (prefix)\n for (const p of parts)\n if (p.length === 0)\n throw new Error('prefixState requires a non-empty message');\n const checked = checkParallelOutput(opts, parts.length, outputLen, canXOF);\n let tmp;\n const base = prefix || (impl.create ? impl.create(opts) : undefined);\n let work;\n for (let i = 0; i < parts.length; i++) {\n const lane = checked.out[i];\n if (base) {\n work = base._cloneInto(work);\n work.update(parts[i]);\n tmp = writeInto(work, lane, checked.dkLen, tmp);\n }\n else {\n const outOpts = (isBytes(opts)\n ? { key: opts, out: lane, outPos: 0, dkLen: checked.dkLen }\n : { ...(opts || {}), out: lane, outPos: 0, dkLen: checked.dkLen });\n hashSync(parts[i], outOpts);\n }\n }\n if (tmp)\n clean(tmp);\n if (work)\n work.destroy();\n if (base && base !== prefix)\n base.destroy();\n return checked.out;\n };\n const setupTick = (setup, total, opts) => {\n const rawSetup = setup;\n const rawOpts = opts;\n return !rawSetup.isAsync\n ? !rawOpts?.onProgress\n ? (rawSetup({ total: 0 }), (_inc) => false)\n : rawSetup({ total, onProgress: rawOpts.onProgress })\n : rawSetup({\n total,\n asyncTick: rawOpts?.asyncTick,\n onProgress: rawOpts?.onProgress,\n nextTick: rawOpts?.nextTick,\n });\n };\n const hash = ((msg, opts = {}) => hashSync(msg, opts));\n const chunks = (parts, opts = {}) => chunksSync(parts, opts);\n Object.assign(chunks, {\n async: mkAsync(function* (setup, parts, opts = {}) {\n const setupMode = setup;\n const rawOpts = opts;\n if (!setupMode.isAsync && !rawOpts?.onProgress)\n return chunksSync(parts, rawOpts);\n let total = 0;\n for (const p of parts)\n total += p.length;\n const tick = setupTick(setupMode, total, rawOpts);\n const out = chunksSync(parts, rawOpts);\n if ((setupMode.isAsync || !!rawOpts?.onProgress) && tick(total))\n yield;\n return out;\n }).async,\n });\n const parallel = (parts, opts = {}) => parallelSync(parts, opts);\n Object.assign(parallel, {\n async: mkAsync(function* (setup, parts, opts = {}) {\n const setupMode = setup;\n const rawOpts = opts;\n if (!setupMode.isAsync && !rawOpts?.onProgress)\n return parallelSync(parts, rawOpts);\n let total = 0;\n for (const p of parts)\n total += p.length;\n const tick = setupTick(setupMode, total, rawOpts);\n const out = parallelSync(parts, rawOpts);\n if ((setupMode.isAsync || !!rawOpts?.onProgress) && tick(total))\n yield;\n return out;\n }).async,\n });\n Object.assign(hash, {\n async: mkAsync(function* (setup, msg, opts = {}) {\n const setupMode = setup;\n // TArg expands byte-like option unions here; keep the cast local to the async shim.\n const rawOpts = opts;\n if (!setupMode.isAsync && !rawOpts?.onProgress)\n return hashSync(msg, rawOpts);\n const tick = setupTick(setupMode, msg.length, rawOpts);\n const out = hashSync(msg, rawOpts);\n if ((setupMode.isAsync || !!rawOpts?.onProgress) && tick(msg.length))\n yield;\n return out;\n }).async,\n chunks,\n parallel,\n create: (opts = {}) => createSync(opts),\n cleanState(state) {\n const stream = stateStream(state);\n stream.destroy();\n prefixStates.delete(stream);\n },\n getPlatform: () => platform,\n getDefinition: () => def,\n canXOF: !!canXOF,\n outputLen,\n blockLen,\n oid,\n });\n Object.defineProperty(hash, BRAND, { value: true, enumerable: false });\n brandSet.add(hash);\n return Object.freeze(hash);\n}\nconst copyOutput = (out, opts, outputLen, canXOF) => {\n const rawLen = opts?.dkLen;\n if (rawLen !== undefined)\n anumber(rawLen, 'dkLen');\n const dkLen = rawLen === undefined ? outputLen : rawLen;\n anumber(dkLen, 'dkLen');\n // Old awasm hash output opts intentionally allow requesting a shorter fixed digest, but\n // must reject oversize lengths instead of silently clamping or zero-extending the tail.\n if (!canXOF && dkLen > outputLen)\n throw new RangeError(`\"dkLen\" expected <= ${outputLen}, got ${dkLen}`);\n if (out.length < dkLen)\n throw new RangeError(`expected output length >= dkLen, got ${out.length}`);\n const msg = out.subarray(0, dkLen);\n if (!opts?.out) {\n const res = copyBytes(msg);\n clean(out);\n return res;\n }\n const outPos = opts?.outPos || 0;\n anumber(outPos, 'outPos');\n if (opts.out.length < outPos + dkLen)\n throw new RangeError('output is too small');\n opts.out.set(msg, outPos);\n clean(out);\n return opts.out;\n};\nconst copyParallelOutput = (outs, views, dkLen, outputLen, canXOF) => {\n if (views.length !== outs.length)\n throw new RangeError('output array length must match messages length');\n for (let i = 0; i < outs.length; i++)\n copyOutput(outs[i], { out: views[i], dkLen }, outputLen, canXOF);\n return views;\n};\nconst hashSyncError = () => {\n throw new Error('sync is not supported');\n};\nexport function mkHashAsync(def_, impl_, platform = 'webcrypto', isSupported, meta) {\n const def = def_;\n const impl = impl_;\n const { outputLen, blockLen, canXOF, oid } = def;\n const hash = ((_msg) => hashSyncError());\n const hashAsync = async (msg, opts = {}) => {\n abytes(msg);\n const out = await impl.hash(msg, opts);\n return copyOutput(out, opts, outputLen, canXOF);\n };\n const chunks = ((_parts) => hashSyncError());\n const chunksAsync = async (parts, opts = {}) => {\n if (opts.prefixState !== undefined)\n throw new Error('prefixState is not supported');\n for (let i = 0; i < parts.length; i++)\n abytes(parts[i]);\n if (impl.chunks) {\n const out = await impl.chunks(parts, opts);\n return copyOutput(out, opts, outputLen, canXOF);\n }\n const joined = concatBytes(...parts);\n try {\n const out = await impl.hash(joined, opts);\n return copyOutput(out, opts, outputLen, canXOF);\n }\n finally {\n clean(joined);\n }\n };\n Object.assign(chunks, { async: chunksAsync });\n const parallel = ((_parts) => hashSyncError());\n const parallelAsync = async (parts, opts = {}) => {\n if (opts.prefixState !== undefined)\n throw new Error('prefixState is not supported');\n for (let i = 0; i < parts.length; i++)\n abytes(parts[i]);\n const checked = checkParallelOutput(opts, parts.length, outputLen, canXOF);\n const runOpts = { ...opts, out: undefined, outPos: undefined };\n const out = impl.parallel\n ? await impl.parallel(parts, runOpts)\n : await Promise.all(parts.map((i) => impl.hash(i, runOpts)));\n return copyParallelOutput(out, checked.out, checked.dkLen, outputLen, canXOF);\n };\n Object.assign(parallel, { async: parallelAsync });\n Object.assign(hash, {\n async: hashAsync,\n chunks,\n parallel,\n create: () => {\n throw new Error('streaming is not supported');\n },\n cleanState: () => {\n throw new Error('prefixState is not supported');\n },\n getPlatform: () => platform,\n getDefinition: () => def,\n canXOF: !!canXOF,\n outputLen,\n blockLen,\n oid,\n });\n if (meta)\n Object.assign(hash, meta);\n if (isSupported)\n hash.isSupported = isSupported;\n Object.defineProperty(hash, BRAND, { value: true, enumerable: false });\n brandSet.add(hash);\n return Object.freeze(hash);\n}\nexport function mkHashStub(def_) {\n const def = def_;\n const { outputLen, blockLen, canXOF, oid } = def;\n let inner;\n function checkInner(inner) {\n if (inner === undefined)\n throw new Error('implementation not installed');\n }\n const hash = ((msg, opts = {}) => {\n checkInner(inner);\n return inner(msg, opts);\n });\n const chunks = (parts, opts = {}) => {\n checkInner(inner);\n return inner.chunks(parts, opts);\n };\n Object.assign(chunks, {\n async: async (parts, opts = {}) => {\n checkInner(inner);\n return inner.chunks.async(parts, opts);\n },\n });\n const parallel = (chunks, opts = {}) => {\n checkInner(inner);\n return inner.parallel(chunks, opts);\n };\n Object.assign(parallel, {\n async(chunks, opts = {}) {\n checkInner(inner);\n return inner.parallel.async(chunks, opts);\n },\n });\n Object.assign(hash, {\n async: async (msg, opts = {}) => {\n checkInner(inner);\n return inner.async(msg, opts);\n },\n chunks,\n parallel,\n create(opts = {}) {\n checkInner(inner);\n return inner.create(opts);\n },\n cleanState(state) {\n checkInner(inner);\n return inner.cleanState(state);\n },\n getPlatform: () => {\n checkInner(inner);\n return inner.getPlatform();\n },\n getDefinition: () => {\n checkInner(inner);\n return inner.getDefinition();\n },\n install: (impl, opts = {}) => {\n const { onlyMissing } = opts;\n if (onlyMissing !== undefined)\n abool(onlyMissing);\n if (onlyMissing && inner !== undefined)\n return;\n // install() accepts only constructor-created hashes: WeakSet branding rejects copied fields,\n // and exact definition identity rejects same-shaped but different hash families.\n if (!isBranded(impl))\n throw new Error('install: non-branded implementation');\n // NOTE: this strict check works because all implementations will use exact same frozen definition\n // which means it is impossible to use same blockLen/outputLen hash from different definition\n if (impl.getDefinition() !== def)\n throw new Error('wrong implementation definition');\n inner = impl;\n },\n canXOF,\n outputLen,\n blockLen,\n oid,\n });\n return Object.freeze(hash);\n}\n", "/**\n * Constants for hashes and ciphers. Mostly initial state.\n * @module\n */\nimport { u8 } from \"./utils.js\";\n/**\n * Round constants:\n * First 32 bits of fractional parts of the cube roots of the first 64 primes 2..311)\n */\nexport const SHA256_K = [\n 0x428a2f98, 0x71374491, 0xb5c0fbcf, 0xe9b5dba5, 0x3956c25b, 0x59f111f1, 0x923f82a4, 0xab1c5ed5,\n 0xd807aa98, 0x12835b01, 0x243185be, 0x550c7dc3, 0x72be5d74, 0x80deb1fe, 0x9bdc06a7, 0xc19bf174,\n 0xe49b69c1, 0xefbe4786, 0x0fc19dc6, 0x240ca1cc, 0x2de92c6f, 0x4a7484aa, 0x5cb0a9dc, 0x76f988da,\n 0x983e5152, 0xa831c66d, 0xb00327c8, 0xbf597fc7, 0xc6e00bf3, 0xd5a79147, 0x06ca6351, 0x14292967,\n 0x27b70a85, 0x2e1b2138, 0x4d2c6dfc, 0x53380d13, 0x650a7354, 0x766a0abb, 0x81c2c92e, 0x92722c85,\n 0xa2bfe8a1, 0xa81a664b, 0xc24b8b70, 0xc76c51a3, 0xd192e819, 0xd6990624, 0xf40e3585, 0x106aa070,\n 0x19a4c116, 0x1e376c08, 0x2748774c, 0x34b0bcb5, 0x391c0cb3, 0x4ed8aa4a, 0x5b9cca4f, 0x682e6ff3,\n 0x748f82ee, 0x78a5636f, 0x84c87814, 0x8cc70208, 0x90befffa, 0xa4506ceb, 0xbef9a3f7, 0xc67178f2,\n];\n/** Initial SHA256 state. Bits 0..32 of frac part of sqrt of primes 2..19 */\nexport const SHA256_IV = /* @__PURE__ */ new Uint32Array([\n 0x6a09e667, 0xbb67ae85, 0x3c6ef372, 0xa54ff53a, 0x510e527f, 0x9b05688c, 0x1f83d9ab, 0x5be0cd19,\n]);\nexport const SHA256_IV_U8 = /* @__PURE__ */ u8(SHA256_IV);\n/** Initial SHA224 state. Bits 32..64 of frac part of sqrt of primes 23..53 */\nexport const SHA224_IV = /* @__PURE__ */ Uint32Array.from([\n 0xc1059ed8, 0x367cd507, 0x3070dd17, 0xf70e5939, 0xffc00b31, 0x68581511, 0x64f98fa7, 0xbefa4fa4,\n]);\nexport const SHA224_IV_U8 = /* @__PURE__ */ u8(SHA224_IV);\n// Round constants\n// RFC 6234 \u00A75.2:\n// first 64 bits of the fractional parts of the cube roots of the first 80 primes.\n// prettier-ignore\nexport const SHA512_K = /* @__PURE__ */ [\n '0x428a2f98d728ae22', '0x7137449123ef65cd', '0xb5c0fbcfec4d3b2f', '0xe9b5dba58189dbbc',\n '0x3956c25bf348b538', '0x59f111f1b605d019', '0x923f82a4af194f9b', '0xab1c5ed5da6d8118',\n '0xd807aa98a3030242', '0x12835b0145706fbe', '0x243185be4ee4b28c', '0x550c7dc3d5ffb4e2',\n '0x72be5d74f27b896f', '0x80deb1fe3b1696b1', '0x9bdc06a725c71235', '0xc19bf174cf692694',\n '0xe49b69c19ef14ad2', '0xefbe4786384f25e3', '0x0fc19dc68b8cd5b5', '0x240ca1cc77ac9c65',\n '0x2de92c6f592b0275', '0x4a7484aa6ea6e483', '0x5cb0a9dcbd41fbd4', '0x76f988da831153b5',\n '0x983e5152ee66dfab', '0xa831c66d2db43210', '0xb00327c898fb213f', '0xbf597fc7beef0ee4',\n '0xc6e00bf33da88fc2', '0xd5a79147930aa725', '0x06ca6351e003826f', '0x142929670a0e6e70',\n '0x27b70a8546d22ffc', '0x2e1b21385c26c926', '0x4d2c6dfc5ac42aed', '0x53380d139d95b3df',\n '0x650a73548baf63de', '0x766a0abb3c77b2a8', '0x81c2c92e47edaee6', '0x92722c851482353b', '0xa2bfe8a14cf10364', '0xa81a664bbc423001', '0xc24b8b70d0f89791', '0xc76c51a30654be30',\n '0xd192e819d6ef5218', '0xd69906245565a910', '0xf40e35855771202a', '0x106aa07032bbd1b8',\n '0x19a4c116b8d2d0c8', '0x1e376c085141ab53', '0x2748774cdf8eeb99', '0x34b0bcb5e19b48a8',\n '0x391c0cb3c5c95a63', '0x4ed8aa4ae3418acb', '0x5b9cca4f7763e373', '0x682e6ff3d6b2b8a3',\n '0x748f82ee5defb2fc', '0x78a5636f43172f60', '0x84c87814a1f0ab72', '0x8cc702081a6439ec',\n '0x90befffa23631e28', '0xa4506cebde82bde9', '0xbef9a3f7b2c67915', '0xc67178f2e372532b',\n '0xca273eceea26619c', '0xd186b8c721c0c207', '0xeada7dd6cde0eb1e', '0xf57d4f7fee6ed178',\n '0x06f067aa72176fba', '0x0a637dc5a2c898a6', '0x113f9804bef90dae', '0x1b710b35131c471b',\n '0x28db77f523047d84', '0x32caab7b40c72493', '0x3c9ebe0a15c9bebc', '0x431d67c49c100d4c',\n '0x4cc5d4becb3e42b6', '0x597f299cfc657e2a', '0x5fcb6fab3ad6faec', '0x6c44198c4a475817',\n].map((n) => BigInt(n));\n// 64-bit SHA-2 IV words are stored as [lo, hi] u32 pairs.\n// This lets u8(...) seed native module state directly.\n/** Initial SHA512 state. Bits 0..64 of frac part of sqrt of primes 2..19 */\nexport const SHA512_IV = /* @__PURE__ */ Uint32Array.from([\n 0xf3bcc908, 0x6a09e667, 0x84caa73b, 0xbb67ae85, 0xfe94f82b, 0x3c6ef372, 0x5f1d36f1, 0xa54ff53a,\n 0xade682d1, 0x510e527f, 0x2b3e6c1f, 0x9b05688c, 0xfb41bd6b, 0x1f83d9ab, 0x137e2179, 0x5be0cd19,\n]);\nexport const SHA512_IV_U8 = /* @__PURE__ */ u8(SHA512_IV);\n/** Initial SHA384 state. Bits 0..64 of frac part of sqrt of primes 23..53 */\nexport const SHA384_IV = /* @__PURE__ */ Uint32Array.from([\n 0xc1059ed8, 0xcbbb9d5d, 0x367cd507, 0x629a292a, 0x3070dd17, 0x9159015a, 0xf70e5939, 0x152fecd8,\n 0xffc00b31, 0x67332667, 0x68581511, 0x8eb44a87, 0x64f98fa7, 0xdb0c2e0d, 0xbefa4fa4, 0x47b5481d,\n]);\nexport const SHA384_IV_U8 = /* @__PURE__ */ u8(SHA384_IV);\n/**\n * Truncated SHA512/256 and SHA512/224.\n * SHA512_IV is XORed with 0xa5a5a5a5a5a5a5a5, then used as \"intermediary\" IV of SHA512/t.\n * Then t hashes string to produce result IV.\n */\n// Derived SHA-512/t IVs also use [lo, hi] u32 pairs here.\n// That lets hashes.ts seed the shared SHA-512 state layout directly.\n/** SHA512/224 IV */\nconst SHA512_224_IV = /* @__PURE__ */ Uint32Array.from([\n 0x19544da2, 0x8c3d37c8, 0x89dcd4d6, 0x73e19966, 0x32ff9c82, 0x1dfab7ae, 0x582f9fcf, 0x679dd514,\n 0x7bd44da8, 0x0f6d2b69, 0x04c48942, 0x77e36f73, 0x6a1d36c8, 0x3f9d85a8, 0x91d692a1, 0x1112e6ad,\n]);\nexport const SHA512_224_IV_U8 = /* @__PURE__ */ u8(SHA512_224_IV);\n/** SHA512/256 IV */\nconst SHA512_256_IV = /* @__PURE__ */ Uint32Array.from([\n 0xfc2bf72c, 0x22312194, 0xc84c64c2, 0x9f555fa3, 0x6f53b151, 0x2393b86b, 0x5940eabd, 0x96387719,\n 0xa88effe3, 0x96283ee2, 0x53863992, 0xbe5e1e25, 0x2c85b8aa, 0x2b0199fc, 0x81c52ca2, 0x0eb72ddc,\n]);\nexport const SHA512_256_IV_U8 = /* @__PURE__ */ u8(SHA512_256_IV);\n// RFC 7693 \u00A72.6 / Appendix C: BLAKE2b reuses the SHA-512 IV words.\n// This file keeps them as LE [lo, hi] u32 halves for the BLAKE2b helpers.\n// Same as SHA512_IV, but swapped endianness: LE instead of BE. iv[1] is iv[0], etc.\nexport const B2B_IV = /* @__PURE__ */ Uint32Array.from([\n 0xf3bcc908, 0x6a09e667, 0x84caa73b, 0xbb67ae85, 0xfe94f82b, 0x3c6ef372, 0x5f1d36f1, 0xa54ff53a,\n 0xade682d1, 0x510e527f, 0x2b3e6c1f, 0x9b05688c, 0xfb41bd6b, 0x1f83d9ab, 0x137e2179, 0x5be0cd19,\n]);\nexport const B2B_IV_U8 = /* @__PURE__ */ u8(B2B_IV);\nconst _32n = /* @__PURE__ */ BigInt(32);\nexport const B2B_IV_U64 = /* @__PURE__ */ [\n '0x6a09e667f3bcc908',\n '0xbb67ae8584caa73b',\n '0x3c6ef372fe94f82b',\n '0xa54ff53a5f1d36f1',\n '0x510e527fade682d1',\n '0x9b05688c2b3e6c1f',\n '0x1f83d9abfb41bd6b',\n '0x5be0cd19137e2179',\n].map((n) => BigInt(n));\n// RFC 7693 \u00A72.6 / Appendix D: BLAKE2s reuses the SHA-256 IV words as-is.\nexport const B2S_IV = /* @__PURE__ */ Uint32Array.from([\n 0x6a09e667, 0xbb67ae85, 0x3c6ef372, 0xa54ff53a, 0x510e527f, 0x9b05688c, 0x1f83d9ab, 0x5be0cd19,\n]);\nexport const B2S_IV_U8 = /* @__PURE__ */ u8(B2S_IV);\n// SHA-3 proposal BLAKE v1.2 \u00A72.1.1 Table 2.1 / RFC 7693 \u00A72.7:\n// rows 0..9 are the published SIGMA table; rows 10..11 repeat 0..1 for BLAKE2b;\n// rows 10..13 satisfy SHA-3 proposal BLAKE v1.2 \u00A72.2.2's sigma[r mod 10] reuse for 14-round\n// BLAKE-64; rows 14..15 extend that modulo-10 reuse for the legacy 16-round\n// Blake1 path.\n// prettier-ignore\nexport const BSIGMA = /* @__PURE__ */ Uint8Array.from([\n 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15,\n 14, 10, 4, 8, 9, 15, 13, 6, 1, 12, 0, 2, 11, 7, 5, 3,\n 11, 8, 12, 0, 5, 2, 15, 13, 10, 14, 3, 6, 7, 1, 9, 4,\n 7, 9, 3, 1, 13, 12, 11, 14, 2, 6, 5, 10, 4, 0, 15, 8,\n 9, 0, 5, 7, 2, 4, 10, 15, 14, 1, 11, 12, 6, 8, 3, 13,\n 2, 12, 6, 10, 0, 11, 8, 3, 4, 13, 7, 5, 15, 14, 1, 9,\n 12, 5, 1, 15, 14, 13, 4, 10, 0, 7, 6, 3, 9, 2, 8, 11,\n 13, 11, 7, 14, 12, 1, 3, 9, 5, 0, 15, 4, 8, 6, 2, 10,\n 6, 15, 14, 9, 11, 3, 0, 8, 12, 2, 13, 7, 1, 4, 10, 5,\n 10, 2, 8, 4, 7, 6, 1, 5, 15, 11, 9, 14, 3, 12, 13, 0,\n 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15,\n 14, 10, 4, 8, 9, 15, 13, 6, 1, 12, 0, 2, 11, 7, 5, 3,\n // Blake1, unused in others\n 11, 8, 12, 0, 5, 2, 15, 13, 10, 14, 3, 6, 7, 1, 9, 4,\n 7, 9, 3, 1, 13, 12, 11, 14, 2, 6, 5, 10, 4, 0, 15, 8,\n 9, 0, 5, 7, 2, 4, 10, 15, 14, 1, 11, 12, 6, 8, 3, 13,\n 2, 12, 6, 10, 0, 11, 8, 3, 4, 13, 7, 5, 15, 14, 1, 9,\n]);\n// blake1\n// first half of C512\n// SHA-3 proposal BLAKE v1.2 \u00A72.1.1: BLAKE-32 uses c0..c15,\n// starting at 0x243f6a88 and ending at 0xb5470917.\nexport const B32C = /* @__PURE__ */ Uint32Array.from([\n 0x243f6a88, 0x85a308d3, 0x13198a2e, 0x03707344, 0xa4093822, 0x299f31d0, 0x082efa98, 0xec4e6c89,\n 0x452821e6, 0x38d01377, 0xbe5466cf, 0x34e90c6c, 0xc0ac29b7, 0xc97c50dd, 0x3f84d5b5, 0xb5470917,\n]);\n// prettier-ignore\n// SHA-3 proposal BLAKE v1.2 \u00A72.2.1 c0..c15 are stored as [lo32, hi32] halves.\n// generateTBL512_new rebuilds each 64-bit constant with (hi << 32n) | lo.\nexport const B64C = /* @__PURE__ */ (() => Uint32Array.from([\n B32C[1], B32C[0], B32C[3], B32C[2], B32C[5], B32C[4], B32C[7], B32C[6], // le<->be\n B32C[9], B32C[8], B32C[11], B32C[10], B32C[13], B32C[12], B32C[15], B32C[14],\n 0x8979fb1b, 0x9216d5d9, 0x98dfb5ac, 0xd1310ba6, 0xd01adfb7, 0x2ffd72db, 0x6a267e96, 0xb8e1afed,\n 0xf12c7f99, 0xba7c9045, 0xb3916cf7, 0x24a19947, 0x858efc16, 0x0801f2e2, 0x71574e69, 0x636920d8,\n]))();\nexport const B64C_U64 = /* @__PURE__ */ [\n // first half\n '0x243f6a8885a308d3',\n '0x13198a2e03707344',\n '0xa4093822299f31d0',\n '0x082efa98ec4e6c89',\n '0x452821e638d01377',\n '0xbe5466cf34e90c6c',\n '0xc0ac29b7c97c50dd',\n '0x3f84d5b5b5470917',\n // second half\n '0x9216d5d98979fb1b',\n '0xd1310ba698dfb5ac',\n '0x2ffd72dbd01adfb7',\n '0xb8e1afed6a267e96',\n '0xba7c9045f12c7f99',\n '0x24a19947b3916cf7',\n '0x0801f2e2858efc16',\n '0x636920d871574e69',\n].map((n) => BigInt(n));\nexport const B256_IV = /* @__PURE__ */ SHA256_IV.slice();\n// SHA-3 proposal BLAKE v1.2 \u00A72.2.1: legacy Blake1-64 keeps the SHA-512 IV in canonical\n// [hi32, lo32] order, unlike SHA512_IV above, which is laid out as [lo, hi]\n// for module-state seeding.\nexport const B512_IV = /* @__PURE__ */ Uint32Array.from([\n 0x6a09e667, 0xf3bcc908, 0xbb67ae85, 0x84caa73b, 0x3c6ef372, 0xfe94f82b, 0xa54ff53a, 0x5f1d36f1,\n 0x510e527f, 0xade682d1, 0x9b05688c, 0x2b3e6c1f, 0x1f83d9ab, 0xfb41bd6b, 0x5be0cd19, 0x137e2179,\n]);\nfunction generateTBL256() {\n const TBL = [];\n for (let i = 0, j = 0; i < 14; i++, j += 16) {\n for (let offset = 1; offset < 16; offset += 2) {\n TBL.push(B32C[BSIGMA[j + offset]]);\n TBL.push(B32C[BSIGMA[j + offset - 1]]);\n }\n }\n return TBL;\n}\nexport const TBL256 = /* @__PURE__ */ generateTBL256(); // C256[SIGMA[X]] precompute\nfunction generateTBL512_new() {\n const TBL = [];\n for (let r = 0, k = 0; r < 16; r++, k += 16) {\n for (let offset = 1; offset < 16; offset += 2) {\n const l0 = B64C[BSIGMA[k + offset] * 2 + 1];\n const h0 = B64C[BSIGMA[k + offset] * 2 + 0];\n const l1 = B64C[BSIGMA[k + offset - 1] * 2 + 1];\n const h1 = B64C[BSIGMA[k + offset - 1] * 2 + 0];\n TBL.push((BigInt(l0) << _32n) | BigInt(h0));\n TBL.push((BigInt(l1) << _32n) | BigInt(h1));\n }\n }\n return TBL;\n}\nexport const TBL512 = /* @__PURE__ */ generateTBL512_new();\n/** Initial SHA-1 state from RFC 3174 \u00A76.1. */\nexport const SHA1_IV = /* @__PURE__ */ Uint32Array.from([\n 0x67452301, 0xefcdab89, 0x98badcfe, 0x10325476, 0xc3d2e1f0,\n]);\nexport const SHA1_IV_U8 = /* @__PURE__ */ u8(SHA1_IV);\nconst p32 = /* @__PURE__ */ Math.pow(2, 32);\n/** RFC 1321 \u00A73.4 / Appendix A.3 `T[1..64]` table. */\nexport const MD5_K = /* @__PURE__ */ Array.from({ length: 64 }, (_, i) => Math.floor(p32 * Math.abs(Math.sin(i + 1))));\n/**\n * RFC 1321 \u00A73.3 / Appendix A.3 MD5 initial state.\n * It matches the first four SHA-1 words, so slice() copies them without\n * aliasing SHA1_IV.\n */\nexport const MD5_IV = /* @__PURE__ */ SHA1_IV.slice(0, 4);\nexport const MD5_IV_U8 = /* @__PURE__ */ u8(MD5_IV);\n/** RIPEMD-160 initial state; same five 32-bit words as SHA-1. */\nexport const RIPEMD160_IV = /* @__PURE__ */ new Uint32Array([\n 0x67452301, 0xefcdab89, 0x98badcfe, 0x10325476, 0xc3d2e1f0,\n]);\nexport const RIPEMD160_IV_U8 = /* @__PURE__ */ u8(RIPEMD160_IV);\nconst Rho160 = /* @__PURE__ */ Uint8Array.from([\n 7, 4, 13, 1, 10, 6, 15, 3, 12, 0, 9, 5, 2, 14, 11, 8,\n]);\nconst Id160 = /* @__PURE__ */ (() => Uint8Array.from(new Array(16).fill(0).map((_, i) => i)))();\nconst Pi160 = /* @__PURE__ */ (() => Id160.map((i) => (9 * i + 5) % 16))();\n// Five left/right message-word orderings for the RIPEMD-160 dual-lane rounds.\nconst idxLR = /* @__PURE__ */ (() => {\n const L = [Id160];\n const R = [Pi160];\n const res = [L, R];\n for (let i = 0; i < 4; i++)\n for (let j of res)\n j.push(j[i].map((k) => Rho160[k]));\n return res;\n})();\nexport const RIPEMD160_idxL = /* @__PURE__ */ (() => idxLR[0])();\nexport const RIPEMD160_idxR = /* @__PURE__ */ (() => idxLR[1])();\n// const [idxL, idxR] = idxLR;\n// Base per-group shift table before the left/right message-order permutations are applied.\nconst shifts160 = /* @__PURE__ */ [\n [11, 14, 15, 12, 5, 8, 7, 9, 11, 13, 14, 15, 6, 7, 9, 8],\n [12, 13, 11, 15, 6, 9, 9, 7, 12, 15, 11, 13, 7, 8, 7, 7],\n [13, 15, 14, 11, 7, 7, 6, 8, 13, 14, 13, 12, 5, 5, 6, 9],\n [14, 11, 12, 14, 8, 6, 5, 5, 15, 12, 15, 14, 9, 9, 8, 6],\n [15, 12, 13, 13, 9, 5, 8, 6, 14, 11, 12, 11, 8, 6, 5, 5],\n].map((i) => Uint8Array.from(i));\nexport const RIPEMD160_shiftsL160 = /* @__PURE__ */ RIPEMD160_idxL.map((idx, i) => idx.map((j) => shifts160[i][j]));\nexport const RIPEMD160_shiftsR160 = /* @__PURE__ */ RIPEMD160_idxR.map((idx, i) => idx.map((j) => shifts160[i][j]));\n// Five left-lane additive constants for RIPEMD-160.\nexport const RIPEMD160_Kl160 = /* @__PURE__ */ Uint32Array.from([\n 0x00000000, 0x5a827999, 0x6ed9eba1, 0x8f1bbcdc, 0xa953fd4e,\n]);\n// Five right-lane additive constants for RIPEMD-160.\nexport const RIPEMD160_Kr160 = /* @__PURE__ */ Uint32Array.from([\n 0x50a28be6, 0x5c4dd124, 0x6d703ef3, 0x7a6d76e9, 0x00000000,\n]);\nconst _0n = /* @__PURE__ */ BigInt(0);\nconst _1n = /* @__PURE__ */ BigInt(1);\nconst _2n = /* @__PURE__ */ BigInt(2);\nconst _7n = /* @__PURE__ */ BigInt(7);\nconst _256n = /* @__PURE__ */ BigInt(256);\n// FIPS 202 Algorithm 5 rc():\n// when the outgoing bit is 1, the 8-bit LFSR xors taps 0, 4, 5, and 6.\n// That compresses to the feedback mask `0x71`.\nconst _0x71n = /* @__PURE__ */ BigInt(0x71);\n// Grouped export destructuring sticks in bundles even when SHA3 is unused, so generate\n// each table in its own pure IIFE instead of exporting all three from one object.\n// FIPS 202 \u00A73.2.2 / \u00A73.2.3 walk the 24 non-(0,0) lanes.\n// This table stores each lane as 5*y + x for the u64 state layout.\nexport const SHA3_PI2 = /* @__PURE__ */ (() => {\n const SHA3_PI2 = [];\n for (let round = 0, x = 1, y = 0; round < 24; round++) {\n [x, y] = [y, (2 * x + 3 * y) % 5];\n SHA3_PI2.push(5 * y + x);\n }\n return SHA3_PI2;\n})();\nexport const SHA3_ROTL = /* @__PURE__ */ (() => {\n const SHA3_ROTL = [];\n for (let round = 0, x = 1, y = 0; round < 24; round++) {\n [x, y] = [y, (2 * x + 3 * y) % 5];\n SHA3_ROTL.push((((round + 1) * (round + 2)) / 2) % 64);\n }\n return SHA3_ROTL;\n})();\nexport const SHA3_IOTA = /* @__PURE__ */ (() => {\n const SHA3_IOTA = [];\n for (let round = 0, R = _1n; round < 24; round++) {\n let t = _0n;\n for (let j = 0; j < 7; j++) {\n R = ((R << _1n) ^ ((R >> _7n) * _0x71n)) % _256n;\n if (R & _2n)\n t ^= _1n << ((_1n << /* @__PURE__ */ BigInt(j)) - _1n);\n }\n SHA3_IOTA.push(t);\n }\n return SHA3_IOTA;\n})();\n// Flag bitset\n// BLAKE3 compression-domain flags from Table~\\ref{tab:flags}.\nexport const B3_Flags = {\n CHUNK_START: 0b1,\n CHUNK_END: 0b10,\n PARENT: 0b100,\n ROOT: 0b1000,\n KEYED_HASH: 0b10000,\n DERIVE_KEY_CONTEXT: 0b100000,\n DERIVE_KEY_MATERIAL: 0b1000000,\n};\n// Default BLAKE3 IV, cloned from the shared BLAKE2s / SHA-256 IV basis.\nexport const B3_IV = /* @__PURE__ */ SHA256_IV.slice();\nexport const B3_IV_U8 = /* @__PURE__ */ u8(B3_IV);\n// Seven 16-word rounds of the BLAKE3 message schedule.\n// Generated by repeatedly applying the adopted single permutation.\nexport const B3_SIGMA = /* @__PURE__ */ (() => {\n const Id = Array.from({ length: 16 }, (_, i) => i);\n const permute = (arr) => [2, 6, 3, 10, 7, 0, 4, 13, 1, 11, 12, 5, 9, 14, 15, 8].map((i) => arr[i]);\n const res = [];\n for (let i = 0, v = Id; i < 7; i++, v = permute(v))\n res.push(...v);\n return Uint8Array.from(res);\n})();\n// Replaces `TextEncoder` for ASCII literals, which is enough for sigma constants.\n// Non-ASCII input would not match UTF-8 `TextEncoder` output.\nconst encodeStr = (str) => Uint8Array.from(str.split(''), (c) => c.charCodeAt(0));\n// RFC 8439 \u00A72.3 / RFC 7539 \u00A72.3 only define the 256-bit-key constants; this 16-byte sigma is\n// kept for legacy allowShortKeys Salsa/ChaCha variants.\nexport const ARX_SIGMA16 = /* @__PURE__ */ encodeStr('expand 16-byte k');\n// RFC 8439 \u00A72.3 / RFC 7539 \u00A72.3 define words 0-3 as\n// `0x61707865 0x3320646e 0x79622d32 0x6b206574`, i.e. `expand 32-byte k`.\nexport const ARX_SIGMA32 = /* @__PURE__ */ encodeStr('expand 32-byte k');\n", "/**\n * Hash definitions. Common logic for all targets.\n * Doesn't contain WASM-specific/JS-specific code.\n * @module\n */\nimport * as constants from \"./constants.js\";\nimport {} from \"./hashes-abstract.js\";\nimport { mkArgon2d, mkArgon2i, mkArgon2id, mkScrypt } from \"./kdf.js\";\nimport { abytes, anumber, isBytes, oidNist, u32 } from \"./utils.js\";\n// FIPS 202 \u00A76.1 appends SHA-3 suffix bits `01`; this byte-level wrapper uses `0x06`\n// so the shared Keccak padding path applies those domain bits before pad10*1.\nexport const sha3_224 = /* @__PURE__ */ Object.freeze({\n suffix: 0x06,\n blockLen: 144,\n outputLen: 28,\n outputBlockLen: 144,\n oid: /* @__PURE__ */ oidNist(0x07),\n init: (_batchPos, _maxBlocks, mod) => mod.initKeccak(),\n});\nexport const sha3_256 = /* @__PURE__ */ Object.freeze({\n suffix: 0x06,\n blockLen: 136,\n outputLen: 32,\n outputBlockLen: 136,\n oid: /* @__PURE__ */ oidNist(0x08),\n init: (_batchPos, _maxBlocks, mod) => mod.initKeccak(),\n});\nexport const sha3_384 = /* @__PURE__ */ Object.freeze({\n suffix: 0x06,\n blockLen: 104,\n outputLen: 48,\n outputBlockLen: 104,\n oid: /* @__PURE__ */ oidNist(0x09),\n init: (_batchPos, _maxBlocks, mod) => mod.initKeccak(),\n});\nexport const sha3_512 = /* @__PURE__ */ Object.freeze({\n suffix: 0x06,\n blockLen: 72,\n outputLen: 64,\n outputBlockLen: 72,\n oid: /* @__PURE__ */ oidNist(0x0a),\n init: (_batchPos, _maxBlocks, mod) => mod.initKeccak(),\n});\n// Legacy Keccak keeps the original 0x01 domain suffix on Keccak-f[1600].\n// Unlike FIPS 202 SHA3-*, it does not use the SHA-3 0x06 suffix or expose\n// NIST hash OIDs here.\nexport const keccak_224 = /* @__PURE__ */ Object.freeze({\n suffix: 0x01,\n blockLen: 144,\n outputLen: 28,\n outputBlockLen: 144,\n init: (_batchPos, _maxBlocks, mod) => mod.initKeccak(),\n});\nexport const keccak_256 = /* @__PURE__ */ Object.freeze({\n suffix: 0x01,\n blockLen: 136,\n outputLen: 32,\n outputBlockLen: 136,\n init: (_batchPos, _maxBlocks, mod) => mod.initKeccak(),\n});\nexport const keccak_384 = /* @__PURE__ */ Object.freeze({\n suffix: 0x01,\n blockLen: 104,\n outputLen: 48,\n outputBlockLen: 104,\n init: (_batchPos, _maxBlocks, mod) => mod.initKeccak(),\n});\nexport const keccak_512 = /* @__PURE__ */ Object.freeze({\n suffix: 0x01,\n blockLen: 72,\n outputLen: 64,\n outputBlockLen: 72,\n init: (_batchPos, _maxBlocks, mod) => mod.initKeccak(),\n});\n// FIPS 202 \u00A76.2: SHAKE128 uses the 1111 domain suffix.\n// It is `0x1f` in this byte-oriented padding path and stays XOF-capable; this\n// wrapper keeps a 16-byte library default while callers can request any dkLen.\nexport const shake128 = /* @__PURE__ */ Object.freeze({\n suffix: 0x1f,\n blockLen: 168,\n outputLen: 16,\n outputBlockLen: 168,\n canXOF: true,\n oid: /* @__PURE__ */ oidNist(0x0b),\n init: (_batchPos, _maxBlocks, mod) => mod.initKeccak(),\n});\n// FIPS 202 \u00A76.2: SHAKE256 uses the same 1111 domain suffix (`0x1f` here).\n// It stays XOF-capable; this wrapper keeps a 32-byte library default while\n// callers can request any dkLen.\nexport const shake256 = /* @__PURE__ */ Object.freeze({\n suffix: 0x1f,\n blockLen: 136,\n outputLen: 32,\n outputBlockLen: 136,\n canXOF: true,\n oid: /* @__PURE__ */ oidNist(0x0c),\n init: (_batchPos, _maxBlocks, mod) => mod.initKeccak(),\n});\n// This keeps the SHAKE128 algorithm and OID from FIPS 202 Appendix C.\n// It chooses the 32-byte \"NIST version\" default while staying XOF-capable for\n// any requested dkLen.\nexport const shake128_32 = /* @__PURE__ */ Object.freeze({\n suffix: 0x1f,\n blockLen: 168,\n outputLen: 32,\n outputBlockLen: 168,\n canXOF: true,\n oid: /* @__PURE__ */ oidNist(0x0b),\n init: (_batchPos, _maxBlocks, mod) => mod.initKeccak(),\n});\n// This keeps the SHAKE256 algorithm and OID from FIPS 202 Appendix C.\n// It chooses the 64-byte \"NIST version\" default while staying XOF-capable for\n// any requested dkLen.\nexport const shake256_64 = /* @__PURE__ */ Object.freeze({\n suffix: 0x1f,\n blockLen: 136,\n outputLen: 64,\n outputBlockLen: 136,\n canXOF: true,\n oid: /* @__PURE__ */ oidNist(0x0c),\n init: (_batchPos, _maxBlocks, mod) => mod.initKeccak(),\n});\nexport const sha256 = /* @__PURE__ */ Object.freeze({\n blockLen: 64,\n outputLen: 32,\n oid: /* @__PURE__ */ oidNist(0x01),\n init: (batchPos, _maxBlocks, mod) => {\n mod.segments['state.state_chunks'][batchPos].set(constants.SHA256_IV_U8);\n },\n});\n// RFC 6234 \u00A76.2: SHA-224 shares the SHA-256 compression core and eight-word state, but\n// exposes only the leftmost 224 bits, so this wrapper keeps 32-byte backend output blocks\n// while truncating the public digest to 28 bytes.\nexport const sha224 = /* @__PURE__ */ Object.freeze({\n blockLen: 64,\n outputLen: 28,\n outputBlockLen: 32,\n oid: /* @__PURE__ */ oidNist(0x04),\n init: (batchPos, _maxBlocks, mod) => {\n mod.segments['state.state_chunks'][batchPos].set(constants.SHA224_IV_U8);\n },\n});\nexport const sha512 = /* @__PURE__ */ Object.freeze({\n blockLen: 128,\n outputLen: 64,\n outputBlockLen: 64,\n oid: /* @__PURE__ */ oidNist(0x03),\n init: (batchPos, _maxBlocks, mod) => {\n mod.segments['state.state_chunks'][batchPos].set(constants.SHA512_IV_U8);\n },\n});\n// RFC 4634 \u00A76.4: SHA-384 shares the SHA-512 compression core and eight-word state, but\n// exposes only H(N)0..H(N)5, so this wrapper keeps 64-byte backend output blocks while\n// truncating the public digest to 48 bytes.\nexport const sha384 = /* @__PURE__ */ Object.freeze({\n blockLen: 128,\n outputLen: 48,\n outputBlockLen: 64,\n oid: /* @__PURE__ */ oidNist(0x02),\n init: (batchPos, _maxBlocks, mod) => {\n mod.segments['state.state_chunks'][batchPos].set(constants.SHA384_IV_U8);\n },\n});\n// This variant uses the shared SHA-512 backend with the derived SHA-512/224 IV, so backend\n// output blocks stay 64 bytes while the public digest truncates to 28 bytes.\nexport const sha512_224 = /* @__PURE__ */ Object.freeze({\n blockLen: 128,\n outputLen: 28,\n outputBlockLen: 64,\n oid: /* @__PURE__ */ oidNist(0x05),\n init: (batchPos, _maxBlocks, mod) => {\n mod.segments['state.state_chunks'][batchPos].set(constants.SHA512_224_IV_U8);\n },\n});\n// This variant uses the shared SHA-512 backend with the derived SHA-512/256 IV, so backend\n// output blocks stay 64 bytes while the public digest truncates to 32 bytes.\nexport const sha512_256 = /* @__PURE__ */ Object.freeze({\n blockLen: 128,\n outputLen: 32,\n outputBlockLen: 64,\n oid: /* @__PURE__ */ oidNist(0x06),\n init: (batchPos, _maxBlocks, mod) => {\n mod.segments['state.state_chunks'][batchPos].set(constants.SHA512_256_IV_U8);\n },\n});\nexport const sha1 = /* @__PURE__ */ Object.freeze({\n blockLen: 64,\n outputLen: 20,\n init: (batchPos, _maxBlocks, mod) => {\n mod.segments['state.state_chunks'][batchPos].set(constants.SHA1_IV_U8);\n },\n});\nexport const ripemd160 = /* @__PURE__ */ Object.freeze({\n blockLen: 64,\n outputLen: 20,\n init: (batchPos, _maxBlocks, mod) => {\n mod.segments['state.state_chunks'][batchPos].set(constants.RIPEMD160_IV_U8);\n },\n});\nexport const md5 = /* @__PURE__ */ Object.freeze({\n blockLen: 64,\n outputLen: 16,\n init: (batchPos, _maxBlocks, mod) => {\n mod.segments['state.state_chunks'][batchPos].set(constants.MD5_IV_U8);\n },\n});\nfunction blake1Salt(batchPos, mod, opts) {\n if (opts.salt !== undefined) {\n const slt = opts.salt;\n const salt_chunks = mod.segments['state.salt_chunks'];\n abytes(slt, salt_chunks[batchPos].length, 'salt');\n salt_chunks[batchPos].set(slt);\n }\n}\nexport const blake256 = /* @__PURE__ */ Object.freeze({\n blockLen: 64,\n outputLen: 32,\n // SHA-3 proposal BLAKE v1.2 \u00A72.1.1 / \u00A72.1.3:\n // BLAKE-32 starts from the SHA-256 IV, and the 256-bit variant\n // keeps the pre-length padding bit set to 1, so this wrapper uses suffix 0x01.\n suffix: 0b0000_0001,\n init: (batchPos, _maxBlocks, mod, _, opts = {}) => {\n mod.segments['state.state_chunks'][batchPos].set(constants.SHA256_IV_U8);\n blake1Salt(batchPos, mod, opts);\n },\n});\nexport const blake224 = /* @__PURE__ */ Object.freeze({\n blockLen: 64,\n outputLen: 28,\n // SHA-3 proposal BLAKE v1.2 \u00A72.3:\n // BLAKE-28 reuses the BLAKE-32 core with the SHA-224 IV, replaces the\n // pre-length padding bit with 0, and truncates the public digest to 224 bits, so this\n // wrapper keeps 32-byte backend output blocks and leaves suffix at the default 0.\n outputBlockLen: 32,\n init: (batchPos, _maxBlocks, mod, _, opts = {}) => {\n mod.segments['state.state_chunks'][batchPos].set(constants.SHA224_IV_U8);\n blake1Salt(batchPos, mod, opts);\n },\n});\nexport const blake384 = /* @__PURE__ */ Object.freeze({\n blockLen: 128,\n outputLen: 48,\n // SHA-3 proposal BLAKE v1.2 \u00A72.4:\n // BLAKE-48 reuses the BLAKE-64 core with the SHA-384 IV, replaces the\n // pre-length padding bit with 0, and truncates the public digest to 384 bits, so this\n // wrapper keeps 64-byte backend output blocks and leaves suffix at the default 0.\n outputBlockLen: 64,\n init: (batchPos, _maxBlocks, mod, _, opts = {}) => {\n mod.segments['state.state_chunks'][batchPos].set(constants.SHA384_IV_U8);\n blake1Salt(batchPos, mod, opts);\n },\n});\nexport const blake512 = /* @__PURE__ */ Object.freeze({\n blockLen: 128,\n outputLen: 64,\n // SHA-3 proposal BLAKE v1.2 \u00A72.2.1 / \u00A72.2.3:\n // BLAKE-64 starts from the SHA-512 IV, and the 512-bit variant\n // keeps the pre-length padding bit set to 1, so this wrapper uses suffix 0x01 and falls\n // back to 64-byte output blocks.\n suffix: 0b0000_0001,\n init: (batchPos, _maxBlocks, mod, _, opts = {}) => {\n mod.segments['state.state_chunks'][batchPos].set(constants.SHA512_IV_U8);\n blake1Salt(batchPos, mod, opts);\n },\n});\nfunction blake2Init(batchPos, outputLen, maxBlocks, blockLen, mod, opts) {\n if (opts.dkLen !== undefined)\n anumber(opts.dkLen, 'opts.dkLen');\n const dkLen = opts.dkLen === undefined ? outputLen : opts.dkLen;\n let keyLength = 0;\n let blocks = 0;\n // RFC 7693 uses digest length nn in 1..outputLen, so zero-length output is invalid here.\n if (dkLen <= 0 || dkLen > outputLen)\n throw new Error('outputLen bigger than keyLen');\n const { key, salt, personalization } = opts;\n if (key !== undefined) {\n if (key.length < 1 || key.length > outputLen)\n throw new Error('\"key\" expected to be undefined or of length=1..' + outputLen);\n abytes(key);\n const keyPos = batchPos * maxBlocks * blockLen;\n // RFC 7693 \u00A73.3: keyed BLAKE2 pads the key with zeros and prepends it as d[0],\n // so preload one full block here and report blocks=1 to the shared absorber.\n mod.segments.buffer.fill(0, keyPos, keyPos + blockLen);\n mod.segments.buffer.set(key, keyPos);\n keyLength = key.length;\n blocks = 1;\n }\n const salt_chunk = mod.segments['init.salt_chunks'][batchPos];\n const pers_chunk = mod.segments['init.personalization_chunks'][batchPos];\n if (salt !== undefined) {\n abytes(salt, salt_chunk.length, 'salt');\n salt_chunk.set(salt);\n }\n if (personalization !== undefined) {\n abytes(personalization, pers_chunk.length, 'personalization');\n pers_chunk.set(personalization);\n }\n mod.initBlake2(batchPos, 1, 1, dkLen, keyLength);\n // Streaming BLAKE2 instances keep dkLen as their fixed digest size, so create({ dkLen })\n // must carry that value into digest() / digestInto() instead of falling back to the family max.\n return { blocks, outputLen: dkLen };\n}\nexport const blake2s = /* @__PURE__ */ Object.freeze({\n blockLen: 64,\n // RFC 7693 \u00A74: the default named surface here is BLAKE2s-256 (nn = 32);\n // shorter digests come from opts.dkLen, and OID support is optional so oid stays unset.\n outputLen: 32,\n init: (batchPos, maxBlocks, mod, _, opts = {}) => {\n mod.segments['state.state_chunks'][batchPos].set(constants.B2S_IV_U8);\n return blake2Init(batchPos, 32, maxBlocks, 64, mod, opts);\n },\n});\nexport const blake2b = /* @__PURE__ */ Object.freeze({\n blockLen: 128,\n // RFC 7693 \u00A74: the default named surface here is BLAKE2b-512 (nn = 64);\n // shorter digests come from opts.dkLen, and OID support is optional so oid stays unset.\n outputLen: 64,\n suffix: 0,\n init: (batchPos, maxBlocks, mod, _, opts = {}) => {\n mod.segments['state.state_chunks'][batchPos].set(constants.B2B_IV_U8);\n return blake2Init(batchPos, 64, maxBlocks, 128, mod, opts);\n },\n});\nexport const blake3 = /* @__PURE__ */ Object.freeze({\n blockLen: 64,\n // BLAKE3's default hash is the 32-byte root chaining value, but XOF output repeats\n // the full 64-byte ROOT compression blocks, so outputBlockLen stays 64 while outputLen is 32.\n outputBlockLen: 64,\n outputLen: 32,\n chunks: /* @__PURE__ */ (() => 10 * 1024 * 16)(),\n canXOF: true,\n init(batchPos, _maxBlocks, mod, hash, opts = {}) {\n const { key, context, _keyContext } = opts;\n if (opts.dkLen !== undefined)\n anumber(opts.dkLen, 'opts.dkLen');\n let flags = 0 >>> 0;\n let IV = constants.B3_IV_U8;\n if (key !== undefined) {\n abytes(key, 32, 'key');\n if (context !== undefined || _keyContext !== undefined)\n throw new Error('Only \"key\" or \"context\" can be specified at same time');\n // PRF/HMAC/MAC\n IV = key;\n flags = constants.B3_Flags.KEYED_HASH;\n }\n else if (_keyContext !== undefined) {\n if (context !== undefined || key !== undefined)\n throw new Error('Only \"key\" or \"context\" can be specified at same time');\n flags = constants.B3_Flags.DERIVE_KEY_CONTEXT;\n }\n else if (context !== undefined) {\n abytes(context, undefined, 'context');\n if (_keyContext !== undefined || key !== undefined)\n throw new Error('Only \"key\" or \"context\" can be specified at same time');\n if (_keyContext !== undefined && typeof _keyContext !== 'boolean')\n throw new Error('wrong type for _keyContext');\n // BLAKE3 derive_key is two-stage: first hash the context under\n // DERIVE_KEY_CONTEXT, then use that 32-byte output as the key words for key material.\n const derive = hash;\n IV = derive(context, { dkLen: 32, _keyContext: true });\n flags = constants.B3_Flags.DERIVE_KEY_MATERIAL;\n }\n mod.segments['state.iv_chunks'][batchPos].set(IV);\n mod.segments['state.state_chunks'][batchPos].set(IV);\n u32(mod.segments['state.flags_chunks'][batchPos])[0] = flags;\n },\n});\n// Normalize both legacy mac(msg, key) and newer mac(msg, { key }) call shapes without cloning.\nconst getMacKey = (opts) => (isBytes(opts) ? opts : opts.key);\n// RFC 8439 \u00A72.5: Poly1305 consumes a fresh 32-byte one-time key per message.\n// It emits a 16-byte tag over 16-byte blocks.\nexport const poly1305 = /* @__PURE__ */ Object.freeze({\n blockLen: 16,\n outputLen: 16,\n init(_batchPos, _maxBlocks, mod, _hash, opts) {\n const key = getMacKey(opts);\n if (key === undefined)\n throw new Error('\"key\" expected Uint8Array of length 32, got type=undefined');\n abytes(key, 32, 'key');\n mod.segments['state.poly.key_chunks'][_batchPos].set(key);\n mod.macInit(_batchPos);\n },\n});\n// RFC 4493 \u00A72.4 / FIPS 197-upd1 \u00A73.1:\n// AES-CMAC uses AES's 16-byte block size and fixed 16-byte tag, while this\n// wrapper accepts AES-128/192/256 keys.\nexport const cmac = /* @__PURE__ */ Object.freeze({\n blockLen: 16,\n outputLen: 16,\n init(_batchPos, _maxBlocks, mod, _hash, opts) {\n const key = getMacKey(opts);\n if (key === undefined)\n throw new Error('\"cmac key\" expected Uint8Array of length 16/24/32, got length=undefined');\n abytes(key, undefined, 'cmac key');\n if (key.length !== 16 && key.length !== 24 && key.length !== 32)\n throw new Error('\"cmac key\" expected Uint8Array of length 16/24/32, got length=' + key.length);\n mod.segments['state.key_chunks'][_batchPos].set(key);\n mod.macInit(_batchPos, key.length);\n },\n});\n// NIST SP 800-38D \u00A76.4 / \u00A77.1:\n// raw GHASH takes the 16-byte hash subkey H = CIPH_K(0^128), not the AES key K.\nexport const ghash = /* @__PURE__ */ Object.freeze({\n blockLen: 16,\n outputLen: 16,\n init(_batchPos, _maxBlocks, mod, _hash, opts) {\n const key = getMacKey(opts);\n if (key === undefined)\n throw new Error('\"key\" expected Uint8Array of length 16, got type=undefined');\n abytes(key, 16, 'key');\n mod.segments['state.ghash.h_chunks'][_batchPos].set(key);\n mod.macInit(_batchPos);\n },\n});\n// RFC 8452 \u00A73 / Appendix A:\n// raw POLYVAL takes a 16-byte field element H and shares the GHASH core via\n// the reversed byte/bit convention.\nexport const polyval = /* @__PURE__ */ Object.freeze({\n blockLen: 16,\n outputLen: 16,\n init(_batchPos, _maxBlocks, mod, _hash, opts) {\n const key = getMacKey(opts);\n if (key === undefined)\n throw new Error('\"key\" expected Uint8Array of length 16, got type=undefined');\n abytes(key, 16, 'key');\n mod.segments['state.ghash.h_chunks'][_batchPos].set(key);\n mod.macInit(_batchPos);\n },\n});\n// NOTE: safe for tree-shaking since used only in building process\n// prettier-ignore\nconst defs = {\n sha3_224, sha3_256, sha3_384, sha3_512, // sha3\n keccak_224, keccak_256, keccak_384, keccak_512, // keccak\n shake128, shake256, shake128_32, shake256_64, // shake\n sha224, sha256, sha384, sha512, sha512_224, sha512_256, // sha2\n sha1, ripemd160, md5, // legacy\n blake224, blake256, blake384, blake512, blake2s, blake2b, blake3, // blake\n poly1305, ghash, polyval, cmac, // MAC\n};\n// Map each name to module\nconst MOD_OF = {\n // sha3\n sha3_224: 'keccak24',\n sha3_256: 'keccak24',\n sha3_384: 'keccak24',\n sha3_512: 'keccak24',\n // keccak\n keccak_224: 'keccak24',\n keccak_256: 'keccak24',\n keccak_384: 'keccak24',\n keccak_512: 'keccak24',\n // shake\n shake128: 'keccak24',\n shake256: 'keccak24',\n shake128_32: 'keccak24',\n shake256_64: 'keccak24',\n // sha2\n sha224: 'sha256',\n sha256: 'sha256',\n sha384: 'sha512',\n sha512: 'sha512',\n sha512_224: 'sha512',\n sha512_256: 'sha512',\n // legacy\n sha1: 'sha1',\n ripemd160: 'ripemd160',\n md5: 'md5',\n // blake1/2/3\n blake224: 'blake256',\n blake256: 'blake256',\n blake384: 'blake512',\n blake512: 'blake512',\n blake2s: 'blake2s',\n blake2b: 'blake2b',\n blake3: 'blake3',\n // Mac\n poly1305: 'poly1305',\n ghash: 'ghash',\n polyval: 'polyval',\n cmac: 'cmac',\n};\n// Verifies that definition actually can be used with module\nfunction buildDefinitions(defs, modOf) {\n const out = {};\n for (const k in defs)\n out[k] = { mod: modOf[k], def: defs[k] };\n return out;\n}\nexport const Definitions = /* @__PURE__ */ buildDefinitions(defs, MOD_OF);\n// Generic definitions can be used for non-hash/cipher surfaces that still need\n// a specific wrapper function.\n// KDF stubs compare factory identity, so installed implementations carry the public wrapper here.\nexport const scrypt = ((mod, deps, platform) => mkScrypt(mod, deps, platform, scrypt));\nexport const argon2d = ((mod, deps, platform) => mkArgon2d(mod, deps, platform, argon2d));\nexport const argon2i = ((mod, deps, platform) => mkArgon2i(mod, deps, platform, argon2i));\nexport const argon2id = ((mod, deps, platform) => mkArgon2id(mod, deps, platform, argon2id));\n// type GenericDefinition<T, DEPS extends Record<string, any>, RET> = (\n// mod: T,\n// deps: DEPS,\n// platform: string\n// ) => RET;\n// const genDefs = { scrypt, argon2d, argon2i, argon2id } satisfies Record<\n// string,\n// GenericDefinition<any, any, any>\n// >;\nconst KDFStub = { path: 'kdf.ts', fn: 'mkKDFStub' };\nexport const GenericDefinitions = {\n scrypt: { mod: 'scrypt', deps: ['sha256'], stub: KDFStub },\n argon2d: { mod: 'argon2', deps: ['blake2b'], stub: KDFStub },\n argon2i: { mod: 'argon2', deps: ['blake2b'], stub: KDFStub },\n argon2id: { mod: 'argon2', deps: ['blake2b'], stub: KDFStub },\n};\n", "// WARNING: This file is auto-generated. Any changes will be lost.\nfunction init_module(_imports = {}, pool) {\n const _importsEmbed = { env: {} };\n _imports = { ..._importsEmbed, ..._imports, env: { ..._importsEmbed.env, ..._imports.env } };\n ;\n if (!_imports.env._memory)\n _imports.env._memory = new WebAssembly.Memory({ initial: 241, maximum: 241, shared: false });\n const code = Uint8Array.from(atob('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ACG7ByCqBygCACG8ByCqB0EEaiK9BygCACG+ByC9B0EEaiK/BygCACHAByC/B0EEaiLBBygCACHCByDBB0EEaiLDBygCACHEByDDB0EEaiLFBygCACHGByDFB0EEaiLHBygCACHIByDHB0EEaigCACHJB0EAQQAgvAcgvgcgwAcgwgcgxAcgxgcgyAcgyQcguQcCDCHUByHTByHSByHRByHQByHPByHOByHNByHMByHLByHKByDKByDLByDMByDNByDOByDPByDQByDRByDSByDTByDUByDKByACSUUNABoaGhoaGhoaGhoaIMoHIMsHIMwHIM0HIM4HIM8HINAHINEHINIHINMHINQHAgwh3wch3gch3Qch3Ach2wch2gch2Qch2Ach1wch1gch1Qcg1Qcg1gcg1wcg2Acg2Qcg2gcg2wcg3Acg3Qcg3gcg3wcDDCHqByHpByHoByHnByHmByHlByHkByHjByHiByHhByHgByDgByDhByDiByDjByDkByDlByDmByDnByDoByDpByDqBwIMIfUHIfQHIfMHIfIHIfEHIfAHIe8HIe4HIe0HIewHIesHIAIg6wdrIfYHIO0HIO4HIO8HIPAHIPEHIPIHIPMHIPQHAg0h/wch/gch/Qch/Ach+wch+gch+Qch+Acg+Acg+Qcg+gcg+wcg/Acg/Qcg/gcg/wcg9QdFRQ0AGhoaGhoaGhogqwcgrQcgrwcgsQcgswcgtQcgtwcguAcLIf8HIf4HIf0HIfwHIfsHIfoHIfkHIfgHIPYHQRAg9QdrIvcHIPYHIPcHTRshgAhBACDrByD4ByD5ByD6ByD7ByD8ByD9ByD+ByD/ByD1BwIMIYsIIYoIIYkIIYgIIYcIIYYIIYUIIYQIIYMIIYIIIYEIIIEIIIIIIIMIIIQIIIUIIIYIIIcIIIgIIIkIIIoIIIsIAwwhlgghlQghlAghkwghkgghkQghkAghjwghjgghjQghjAggjAhBAWohlwggqAcgBGxBBnQgAyCNCGpBBnRBgMMAamoimggoAgAhmwggmghBBGoinAgoAgAhnQggnAhBBGoinggoAgAhnwggnghBBGoioAgoAgAhoQggoAhBBGoioggoAgAhowggoghBBGoipAgoAgAhpQggpAhBBGoipggoAgAhpwggpghBBGoiqAgoAgAhqQggqAhBBGoiqggo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'), char => char.charCodeAt(0));\n const module = new WebAssembly.Module(code);\n const instance = new WebAssembly.Instance(module, _imports);\n ;\n const _exports = instance.exports;\n const buffer = _exports.memory ? _exports.memory.buffer : new ArrayBuffer(0);\n const memoryExport = new Uint8Array(buffer, 0, 15737216);\n const segments = Object.freeze({ state: new Uint8Array(memoryExport.buffer, 0, 8576),\n state_chunks: Object.freeze(Array.from({ length: 4 }, (_, i) => new Uint8Array(memoryExport.buffer, 0 + i * 2144, 2144))),\n \"state.chunksDone_chunks\": Object.freeze(Array.from({ length: 4 }, (_, i) => new Uint8Array(memoryExport.buffer, 0 + i * 2144, 8))),\n \"state.chunkOut_chunks\": Object.freeze(Array.from({ length: 4 }, (_, i) => new Uint8Array(memoryExport.buffer, 8 + i * 2144, 8))),\n \"state.flags_chunks\": Object.freeze(Array.from({ length: 4 }, (_, i) => new Uint8Array(memoryExport.buffer, 16 + i * 2144, 4))),\n \"state.chunkPos_chunks\": Object.freeze(Array.from({ length: 4 }, (_, i) => new Uint8Array(memoryExport.buffer, 20 + i * 2144, 4))),\n \"state.stackPos_chunks\": Object.freeze(Array.from({ length: 4 }, (_, i) => new Uint8Array(memoryExport.buffer, 24 + i * 2144, 4))),\n \"state.lastBlockRem_chunks\": Object.freeze(Array.from({ length: 4 }, (_, i) => new Uint8Array(memoryExport.buffer, 28 + i * 2144, 4))),\n \"state.iv_chunks\": Object.freeze(Array.from({ length: 4 }, (_, i) => new Uint8Array(memoryExport.buffer, 32 + i * 2144, 32))),\n \"state.state_chunks\": Object.freeze(Array.from({ length: 4 }, (_, i) => new Uint8Array(memoryExport.buffer, 64 + i * 2144, 32))),\n \"state.stack_chunks\": Object.freeze(Array.from({ length: 4 }, (_, i) => new Uint8Array(memoryExport.buffer, 96 + i * 2144, 2048))),\n buffer: new Uint8Array(memoryExport.buffer, 8576, 10485760),\n buffer_chunks: Object.freeze(Array.from({ length: 1 }, (_, i) => new Uint8Array(memoryExport.buffer, 8576 + i * 10485760, 10485760))),\n stackBuffer: new Uint8Array(memoryExport.buffer, 10494336, 5242880),\n stackBuffer_chunks: Object.freeze(Array.from({ length: 1 }, (_, i) => new Uint8Array(memoryExport.buffer, 10494336 + i * 5242880, 5242880)))\n });\n return Object.freeze({ ..._exports, memory: memoryExport, segments });\n}\nlet _cache;\nexport default function blake3(_imports = {}, pool) {\n if (_cache)\n return _cache;\n return (_cache = init_module(_imports, pool));\n}\n", "import { mkHash } from \"../../hashes-abstract.js\";\nimport { sha3_224 as def_sha3_224 } from \"../../hashes.js\";\nimport mod_sha3_224 from './keccak24.js';\nimport { sha3_256 as def_sha3_256 } from \"../../hashes.js\";\nimport mod_sha3_256 from './keccak24.js';\nimport { sha3_384 as def_sha3_384 } from \"../../hashes.js\";\nimport mod_sha3_384 from './keccak24.js';\nimport { sha3_512 as def_sha3_512 } from \"../../hashes.js\";\nimport mod_sha3_512 from './keccak24.js';\nimport { keccak_224 as def_keccak_224 } from \"../../hashes.js\";\nimport mod_keccak_224 from './keccak24.js';\nimport { keccak_256 as def_keccak_256 } from \"../../hashes.js\";\nimport mod_keccak_256 from './keccak24.js';\nimport { keccak_384 as def_keccak_384 } from \"../../hashes.js\";\nimport mod_keccak_384 from './keccak24.js';\nimport { keccak_512 as def_keccak_512 } from \"../../hashes.js\";\nimport mod_keccak_512 from './keccak24.js';\nimport { shake128 as def_shake128 } from \"../../hashes.js\";\nimport mod_shake128 from './keccak24.js';\nimport { shake256 as def_shake256 } from \"../../hashes.js\";\nimport mod_shake256 from './keccak24.js';\nimport { shake128_32 as def_shake128_32 } from \"../../hashes.js\";\nimport mod_shake128_32 from './keccak24.js';\nimport { shake256_64 as def_shake256_64 } from \"../../hashes.js\";\nimport mod_shake256_64 from './keccak24.js';\nimport { sha224 as def_sha224 } from \"../../hashes.js\";\nimport mod_sha224 from './sha256.js';\nimport { sha256 as def_sha256 } from \"../../hashes.js\";\nimport mod_sha256 from './sha256.js';\nimport { sha384 as def_sha384 } from \"../../hashes.js\";\nimport mod_sha384 from './sha512.js';\nimport { sha512 as def_sha512 } from \"../../hashes.js\";\nimport mod_sha512 from './sha512.js';\nimport { sha512_224 as def_sha512_224 } from \"../../hashes.js\";\nimport mod_sha512_224 from './sha512.js';\nimport { sha512_256 as def_sha512_256 } from \"../../hashes.js\";\nimport mod_sha512_256 from './sha512.js';\nimport { sha1 as def_sha1 } from \"../../hashes.js\";\nimport mod_sha1 from './sha1.js';\nimport { ripemd160 as def_ripemd160 } from \"../../hashes.js\";\nimport mod_ripemd160 from './ripemd160.js';\nimport { md5 as def_md5 } from \"../../hashes.js\";\nimport mod_md5 from './md5.js';\nimport { blake224 as def_blake224 } from \"../../hashes.js\";\nimport mod_blake224 from './blake256.js';\nimport { blake256 as def_blake256 } from \"../../hashes.js\";\nimport mod_blake256 from './blake256.js';\nimport { blake384 as def_blake384 } from \"../../hashes.js\";\nimport mod_blake384 from './blake512.js';\nimport { blake512 as def_blake512 } from \"../../hashes.js\";\nimport mod_blake512 from './blake512.js';\nimport { blake2s as def_blake2s } from \"../../hashes.js\";\nimport mod_blake2s from './blake2s.js';\nimport { blake2b as def_blake2b } from \"../../hashes.js\";\nimport mod_blake2b from './blake2b.js';\nimport { blake3 as def_blake3 } from \"../../hashes.js\";\nimport mod_blake3 from './blake3.js';\nimport { poly1305 as def_poly1305 } from \"../../hashes.js\";\nimport mod_poly1305 from './poly1305.js';\nimport { ghash as def_ghash } from \"../../hashes.js\";\nimport mod_ghash from './ghash.js';\nimport { polyval as def_polyval } from \"../../hashes.js\";\nimport mod_polyval from './polyval.js';\nimport { cmac as def_cmac } from \"../../hashes.js\";\nimport mod_cmac from './cmac.js';\nimport { mkCipher } from \"../../ciphers-abstract.js\";\nimport { ctr as def_ctr } from \"../../ciphers.js\";\nimport mod_ctr from './aes_ctr.js';\nimport { cbc as def_cbc } from \"../../ciphers.js\";\nimport mod_cbc from './aes_cbc.js';\nimport { ofb as def_ofb } from \"../../ciphers.js\";\nimport mod_ofb from './aes_ofb.js';\nimport { cfb as def_cfb } from \"../../ciphers.js\";\nimport mod_cfb from './aes_cfb.js';\nimport { ecb as def_ecb } from \"../../ciphers.js\";\nimport mod_ecb from './aes_ecb.js';\nimport { gcm as def_gcm } from \"../../ciphers.js\";\nimport mod_gcm from './aes_gcm.js';\nimport { gcmsiv as def_gcmsiv } from \"../../ciphers.js\";\nimport mod_gcmsiv from './aes_gcmsiv.js';\nimport { aessiv as def_aessiv } from \"../../ciphers.js\";\nimport mod_aessiv from './aes_siv.js';\nimport { aeskw as def_aeskw } from \"../../ciphers.js\";\nimport mod_aeskw from './aes_kw.js';\nimport { aeskwp as def_aeskwp } from \"../../ciphers.js\";\nimport mod_aeskwp from './aes_kwp.js';\nimport { salsa20 as def_salsa20 } from \"../../ciphers.js\";\nimport mod_salsa20 from './salsa20.js';\nimport { xsalsa20 as def_xsalsa20 } from \"../../ciphers.js\";\nimport mod_xsalsa20 from './salsa20.js';\nimport { chacha8 as def_chacha8 } from \"../../ciphers.js\";\nimport mod_chacha8 from './chacha8.js';\nimport { chacha12 as def_chacha12 } from \"../../ciphers.js\";\nimport mod_chacha12 from './chacha12.js';\nimport { chacha20 as def_chacha20 } from \"../../ciphers.js\";\nimport mod_chacha20 from './chacha20.js';\nimport { chacha20orig as def_chacha20orig } from \"../../ciphers.js\";\nimport mod_chacha20orig from './chacha20.js';\nimport { xchacha20 as def_xchacha20 } from \"../../ciphers.js\";\nimport mod_xchacha20 from './chacha20.js';\nimport { chacha20poly1305 as def_chacha20poly1305 } from \"../../ciphers.js\";\nimport mod_chacha20poly1305 from './chacha_poly1305.js';\nimport { xchacha20poly1305 as def_xchacha20poly1305 } from \"../../ciphers.js\";\nimport mod_xchacha20poly1305 from './chacha_poly1305.js';\nimport { xsalsa20poly1305 as def_xsalsa20poly1305 } from \"../../ciphers.js\";\nimport mod_xsalsa20poly1305 from './salsa_poly1305.js';\nimport { scrypt as def_scrypt } from \"../../hashes.js\";\nimport mod_scrypt from './scrypt.js';\nimport { argon2d as def_argon2d } from \"../../hashes.js\";\nimport mod_argon2d from './argon2.js';\nimport { argon2i as def_argon2i } from \"../../hashes.js\";\nimport mod_argon2i from './argon2.js';\nimport { argon2id as def_argon2id } from \"../../hashes.js\";\nimport mod_argon2id from './argon2.js';\n/**\n * SHA3-224 hash function.\n *\n * @param msg - message to hash.\n * @param opts - optional {@link OutputOpts} hash configuration.\n * @returns Hash output bytes.\n * @example\n * ```ts\n * import { sha3_224 } from '@awasm/noble';\n * sha3_224(new Uint8Array([1, 2, 3]));\n * ```\n */\nexport const sha3_224 = /* @__PURE__ */ mkHash(mod_sha3_224, def_sha3_224, 'wasm');\n/**\n * SHA3-256 hash function. Different from keccak-256.\n *\n * @param msg - message to hash.\n * @param opts - optional {@link OutputOpts} hash configuration.\n * @returns Hash output bytes.\n * @example\n * ```ts\n * import { sha3_256 } from '@awasm/noble';\n * sha3_256(new Uint8Array([1, 2, 3]));\n * ```\n */\nexport const sha3_256 = /* @__PURE__ */ mkHash(mod_sha3_256, def_sha3_256, 'wasm');\n/**\n * SHA3-384 hash function.\n *\n * @param msg - message to hash.\n * @param opts - optional {@link OutputOpts} hash configuration.\n * @returns Hash output bytes.\n * @example\n * ```ts\n * import { sha3_384 } from '@awasm/noble';\n * sha3_384(new Uint8Array([1, 2, 3]));\n * ```\n */\nexport const sha3_384 = /* @__PURE__ */ mkHash(mod_sha3_384, def_sha3_384, 'wasm');\n/**\n * SHA3-512 hash function.\n *\n * @param msg - message to hash.\n * @param opts - optional {@link OutputOpts} hash configuration.\n * @returns Hash output bytes.\n * @example\n * ```ts\n * import { sha3_512 } from '@awasm/noble';\n * sha3_512(new Uint8Array([1, 2, 3]));\n * ```\n */\nexport const sha3_512 = /* @__PURE__ */ mkHash(mod_sha3_512, def_sha3_512, 'wasm');\n/**\n * keccak-224 hash function.\n *\n * @param msg - message to hash.\n * @param opts - optional {@link OutputOpts} hash configuration.\n * @returns Hash output bytes.\n * @example\n * ```ts\n * import { keccak_224 } from '@awasm/noble';\n * keccak_224(new Uint8Array([1, 2, 3]));\n * ```\n */\nexport const keccak_224 = /* @__PURE__ */ mkHash(mod_keccak_224, def_keccak_224, 'wasm');\n/**\n * keccak-256 hash function. Different from SHA3-256.\n *\n * @param msg - message to hash.\n * @param opts - optional {@link OutputOpts} hash configuration.\n * @returns Hash output bytes.\n * @example\n * ```ts\n * import { keccak_256 } from '@awasm/noble';\n * keccak_256(new Uint8Array([1, 2, 3]));\n * ```\n */\nexport const keccak_256 = /* @__PURE__ */ mkHash(mod_keccak_256, def_keccak_256, 'wasm');\n/**\n * keccak-384 hash function.\n *\n * @param msg - message to hash.\n * @param opts - optional {@link OutputOpts} hash configuration.\n * @returns Hash output bytes.\n * @example\n * ```ts\n * import { keccak_384 } from '@awasm/noble';\n * keccak_384(new Uint8Array([1, 2, 3]));\n * ```\n */\nexport const keccak_384 = /* @__PURE__ */ mkHash(mod_keccak_384, def_keccak_384, 'wasm');\n/**\n * keccak-512 hash function.\n *\n * @param msg - message to hash.\n * @param opts - optional {@link OutputOpts} hash configuration.\n * @returns Hash output bytes.\n * @example\n * ```ts\n * import { keccak_512 } from '@awasm/noble';\n * keccak_512(new Uint8Array([1, 2, 3]));\n * ```\n */\nexport const keccak_512 = /* @__PURE__ */ mkHash(mod_keccak_512, def_keccak_512, 'wasm');\n/**\n * SHAKE128 XOF with 128-bit security.\n *\n * @param msg - message to hash.\n * @param opts - optional {@link OutputOpts} hash configuration.\n * @returns Hash output bytes.\n * @example\n * ```ts\n * import { shake128 } from '@awasm/noble';\n * shake128(new Uint8Array([1, 2, 3]));\n * ```\n */\nexport const shake128 = /* @__PURE__ */ mkHash(mod_shake128, def_shake128, 'wasm');\n/**\n * SHAKE256 XOF with 256-bit security.\n *\n * @param msg - message to hash.\n * @param opts - optional {@link OutputOpts} hash configuration.\n * @returns Hash output bytes.\n * @example\n * ```ts\n * import { shake256 } from '@awasm/noble';\n * shake256(new Uint8Array([1, 2, 3]));\n * ```\n */\nexport const shake256 = /* @__PURE__ */ mkHash(mod_shake256, def_shake256, 'wasm');\n/**\n * SHAKE128 XOF with 256-bit output (NIST version).\n *\n * @param msg - message to hash.\n * @param opts - optional {@link OutputOpts} hash configuration.\n * @returns Hash output bytes.\n * @example\n * ```ts\n * import { shake128_32 } from '@awasm/noble';\n * shake128_32(new Uint8Array([1, 2, 3]));\n * ```\n */\nexport const shake128_32 = /* @__PURE__ */ mkHash(mod_shake128_32, def_shake128_32, 'wasm');\n/**\n * SHAKE256 XOF with 512-bit output (NIST version).\n *\n * @param msg - message to hash.\n * @param opts - optional {@link OutputOpts} hash configuration.\n * @returns Hash output bytes.\n * @example\n * ```ts\n * import { shake256_64 } from '@awasm/noble';\n * shake256_64(new Uint8Array([1, 2, 3]));\n * ```\n */\nexport const shake256_64 = /* @__PURE__ */ mkHash(mod_shake256_64, def_shake256_64, 'wasm');\n/**\n * SHA2-224 hash function from RFC 4634\n *\n * @param msg - message to hash.\n * @param opts - optional {@link OutputOpts} hash configuration.\n * @returns Hash output bytes.\n * @example\n * ```ts\n * import { sha224 } from '@awasm/noble';\n * sha224(new Uint8Array([1, 2, 3]));\n * ```\n */\nexport const sha224 = /* @__PURE__ */ mkHash(mod_sha224, def_sha224, 'wasm');\n/**\n * SHA2-256 hash function from RFC 4634. In JS it's the fastest: even faster than Blake3. Some info:\n * - Trying 2^128 hashes would get 50% chance of collision, using birthday attack.\n * - BTC network is doing 2^70 hashes/sec (2^95 hashes/year) as per 2025.\n * - Each sha256 hash is executing 2^18 bit operations.\n * - Good 2024 ASICs can do 200Th/sec with 3500 watts of power, corresponding to 2^36 hashes/joule.\n *\n * @param msg - message to hash.\n * @param opts - optional {@link OutputOpts} hash configuration.\n * @returns Hash output bytes.\n * @example\n * ```ts\n * import { sha256 } from '@awasm/noble';\n * sha256(new Uint8Array([1, 2, 3]));\n * ```\n */\nexport const sha256 = /* @__PURE__ */ mkHash(mod_sha256, def_sha256, 'wasm');\n/**\n * SHA2-384 hash function from RFC 4634.\n *\n * @param msg - message to hash.\n * @param opts - optional {@link OutputOpts} hash configuration.\n * @returns Hash output bytes.\n * @example\n * ```ts\n * import { sha384 } from '@awasm/noble';\n * sha384(new Uint8Array([1, 2, 3]));\n * ```\n */\nexport const sha384 = /* @__PURE__ */ mkHash(mod_sha384, def_sha384, 'wasm');\n/**\n * SHA2-512 hash function from RFC 4634.\n *\n * @param msg - message to hash.\n * @param opts - optional {@link OutputOpts} hash configuration.\n * @returns Hash output bytes.\n * @example\n * ```ts\n * import { sha512 } from '@awasm/noble';\n * sha512(new Uint8Array([1, 2, 3]));\n * ```\n */\nexport const sha512 = /* @__PURE__ */ mkHash(mod_sha512, def_sha512, 'wasm');\n/**\n * SHA2-512/224 \"truncated\" hash function, with improved resistance to length extension attacks.\n * See the paper on truncated SHA512.\n *\n * @param msg - message to hash.\n * @param opts - optional {@link OutputOpts} hash configuration.\n * @returns Hash output bytes.\n * @example\n * ```ts\n * import { sha512_224 } from '@awasm/noble';\n * sha512_224(new Uint8Array([1, 2, 3]));\n * ```\n */\nexport const sha512_224 = /* @__PURE__ */ mkHash(mod_sha512_224, def_sha512_224, 'wasm');\n/**\n * SHA2-512/256 \"truncated\" hash function, with improved resistance to length extension attacks.\n * See the paper on truncated SHA512.\n *\n * @param msg - message to hash.\n * @param opts - optional {@link OutputOpts} hash configuration.\n * @returns Hash output bytes.\n * @example\n * ```ts\n * import { sha512_256 } from '@awasm/noble';\n * sha512_256(new Uint8Array([1, 2, 3]));\n * ```\n */\nexport const sha512_256 = /* @__PURE__ */ mkHash(mod_sha512_256, def_sha512_256, 'wasm');\n/**\n * SHA1 (RFC 3174) legacy hash function. It was cryptographically broken.\n *\n * @param msg - message to hash.\n * @param opts - optional {@link OutputOpts} hash configuration.\n * @returns Hash output bytes.\n * @example\n * ```ts\n * import { sha1 } from '@awasm/noble';\n * sha1(new Uint8Array([1, 2, 3]));\n * ```\n */\nexport const sha1 = /* @__PURE__ */ mkHash(mod_sha1, def_sha1, 'wasm');\n/**\n * RIPEMD-160 - a legacy hash function from 1990s.\n * *\n * *\n *\n * @param msg - message to hash.\n * @param opts - optional {@link OutputOpts} hash configuration.\n * @returns Hash output bytes.\n * @example\n * ```ts\n * import { ripemd160 } from '@awasm/noble';\n * ripemd160(new Uint8Array([1, 2, 3]));\n * ```\n */\nexport const ripemd160 = /* @__PURE__ */ mkHash(mod_ripemd160, def_ripemd160, 'wasm');\n/**\n * MD5 (RFC 1321) legacy hash function. It was cryptographically broken.\n * MD5 architecture is similar to SHA1, with some differences:\n * - Reduced output length: 16 bytes (128 bit) instead of 20\n * - 64 rounds, instead of 80\n * - Little-endian: could be faster, but will require more code\n * - Non-linear index selection: huge speed-up for unroll\n * - Per round constants: more memory accesses, additional speed-up for unroll\n *\n * @param msg - message to hash.\n * @param opts - optional {@link OutputOpts} hash configuration.\n * @returns Hash output bytes.\n * @example\n * ```ts\n * import { md5 } from '@awasm/noble';\n * md5(new Uint8Array([1, 2, 3]));\n * ```\n */\nexport const md5 = /* @__PURE__ */ mkHash(mod_md5, def_md5, 'wasm');\n/**\n * blake1-224 hash function\n *\n * @param msg - message to hash.\n * @param opts - optional {@link OutputOpts} and {@link BlakeOpts} hash configuration.\n * @returns Hash output bytes.\n * @example\n * ```ts\n * import { blake224 } from '@awasm/noble';\n * blake224(new Uint8Array([1, 2, 3]));\n * ```\n */\nexport const blake224 = /* @__PURE__ */ mkHash(mod_blake224, def_blake224, 'wasm');\n/**\n * blake1-256 hash function\n *\n * @param msg - message to hash.\n * @param opts - optional {@link OutputOpts} and {@link BlakeOpts} hash configuration.\n * @returns Hash output bytes.\n * @example\n * ```ts\n * import { blake256 } from '@awasm/noble';\n * blake256(new Uint8Array([1, 2, 3]));\n * ```\n */\nexport const blake256 = /* @__PURE__ */ mkHash(mod_blake256, def_blake256, 'wasm');\n/**\n * blake1-384 hash function\n *\n * @param msg - message to hash.\n * @param opts - optional {@link OutputOpts} and {@link BlakeOpts} hash configuration.\n * @returns Hash output bytes.\n * @example\n * ```ts\n * import { blake384 } from '@awasm/noble';\n * blake384(new Uint8Array([1, 2, 3]));\n * ```\n */\nexport const blake384 = /* @__PURE__ */ mkHash(mod_blake384, def_blake384, 'wasm');\n/**\n * blake1-512 hash function\n *\n * @param msg - message to hash.\n * @param opts - optional {@link OutputOpts} and {@link BlakeOpts} hash configuration.\n * @returns Hash output bytes.\n * @example\n * ```ts\n * import { blake512 } from '@awasm/noble';\n * blake512(new Uint8Array([1, 2, 3]));\n * ```\n */\nexport const blake512 = /* @__PURE__ */ mkHash(mod_blake512, def_blake512, 'wasm');\n/**\n * Blake2s hash function. Focuses on 8-bit to 32-bit platforms.\n * 1.5x faster than blake2b in JS.\n *\n * @param msg - message to hash.\n * @param opts - optional {@link OutputOpts} and {@link Blake2Opts} hash configuration.\n * @returns Hash output bytes.\n * @example\n * ```ts\n * import { blake2s } from '@awasm/noble';\n * blake2s(new Uint8Array([1, 2, 3]));\n * ```\n */\nexport const blake2s = /* @__PURE__ */ mkHash(mod_blake2s, def_blake2s, 'wasm');\n/**\n * Blake2b hash function. 64-bit.\n * 1.5x slower than blake2s in JS.\n *\n * @param msg - message to hash.\n * @param opts - optional {@link OutputOpts} and {@link Blake2Opts} hash configuration.\n * @returns Hash output bytes.\n * @example\n * ```ts\n * import { blake2b } from '@awasm/noble';\n * blake2b(new Uint8Array([1, 2, 3]));\n * ```\n */\nexport const blake2b = /* @__PURE__ */ mkHash(mod_blake2b, def_blake2b, 'wasm');\n/**\n * BLAKE3 hash function. Can be used as MAC and KDF.\n *\n * @param msg - message to hash.\n * @param opts - optional {@link OutputOpts} and {@link Blake3Opts} hash configuration.\n * @returns Hash output bytes.\n * @example\n * ```ts\n * import { blake3 } from '@awasm/noble';\n * const data = new Uint8Array(32);\n * const hash = blake3(data);\n * const mac = blake3(data, { key: new Uint8Array(32) });\n * const kdf = blake3(data, { context: new Uint8Array([1, 2, 3]) });\n * ```\n */\nexport const blake3 = /* @__PURE__ */ mkHash(mod_blake3, def_blake3, 'wasm');\n/**\n * Poly1305 MAC from RFC 8439.\n *\n * @param msg - message to hash.\n * @param opts - optional {@link OutputOpts} hash configuration.\n * @returns Hash output bytes.\n * @example\n * ```ts\n * import { poly1305 } from '@awasm/noble';\n * poly1305(new Uint8Array([1, 2, 3]), { key: new Uint8Array(32) });\n * ```\n */\nexport const poly1305 = /* @__PURE__ */ mkHash(mod_poly1305, def_poly1305, 'wasm');\n/**\n * GHash MAC for AES-GCM.\n *\n * @param msg - message to hash.\n * @param opts - optional {@link OutputOpts} hash configuration.\n * @returns Hash output bytes.\n * @example\n * ```ts\n * import { ghash } from '@awasm/noble';\n * ghash(new Uint8Array([1, 2, 3]), { key: new Uint8Array(16) });\n * ```\n */\nexport const ghash = /* @__PURE__ */ mkHash(mod_ghash, def_ghash, 'wasm');\n/**\n * Polyval MAC for AES-SIV.\n *\n * @param msg - message to hash.\n * @param opts - optional {@link OutputOpts} hash configuration.\n * @returns Hash output bytes.\n * @example\n * ```ts\n * import { polyval } from '@awasm/noble';\n * polyval(new Uint8Array([1, 2, 3]), { key: new Uint8Array(16) });\n * ```\n */\nexport const polyval = /* @__PURE__ */ mkHash(mod_polyval, def_polyval, 'wasm');\n/**\n * AES-CMAC (Cipher-based Message Authentication Code).\n * Specs: RFC 4493.\n *\n * @param msg - message to hash.\n * @param opts - optional {@link OutputOpts} hash configuration.\n * @returns Hash output bytes.\n * @example\n * ```ts\n * import { cmac } from '@awasm/noble';\n * cmac(new Uint8Array([1, 2, 3]), { key: new Uint8Array(16) });\n * ```\n */\nexport const cmac = /* @__PURE__ */ mkHash(mod_cmac, def_cmac, 'wasm');\n/**\n * CTR (Counter Mode): Turns a block cipher into a stream cipher using a counter and IV (nonce).\n * Efficient and parallelizable. Requires a unique nonce per encryption. Unauthenticated: needs MAC.\n *\n * @param key - secret key bytes.\n * @param args - algorithm-specific extra arguments such as nonce or AAD.\n * @returns Configured cipher instance.\n * @example\n * ```ts\n * import { ctr } from '@awasm/noble';\n * ctr(new Uint8Array(16), new Uint8Array(16));\n * ```\n */\nexport const ctr = /* @__PURE__ */ mkCipher(mod_ctr, def_ctr, 'wasm');\n/**\n * CBC (Cipher Block Chaining): Each plaintext block is XORed with the\n * previous block of ciphertext before encryption.\n * Hard to use: requires proper padding and an IV. Unauthenticated: needs MAC.\n *\n * @param key - secret key bytes.\n * @param args - algorithm-specific extra arguments such as nonce or AAD.\n * @returns Configured cipher instance.\n * @example\n * ```ts\n * import { cbc } from '@awasm/noble';\n * cbc(new Uint8Array(16), new Uint8Array(16));\n * ```\n */\nexport const cbc = /* @__PURE__ */ mkCipher(mod_cbc, def_cbc, 'wasm');\n/**\n * OFB mode for AES block cipher.\n *\n * @param key - secret key bytes.\n * @param args - algorithm-specific extra arguments such as nonce or AAD.\n * @returns Configured cipher instance.\n * @example\n * ```ts\n * import { ofb } from '@awasm/noble';\n * ofb(new Uint8Array(16), new Uint8Array(16));\n * ```\n */\nexport const ofb = /* @__PURE__ */ mkCipher(mod_ofb, def_ofb, 'wasm');\n/**\n * CFB: Cipher Feedback Mode. The input for the block cipher is the previous cipher output.\n * Unauthenticated: needs MAC.\n *\n * @param key - secret key bytes.\n * @param args - algorithm-specific extra arguments such as nonce or AAD.\n * @returns Configured cipher instance.\n * @example\n * ```ts\n * import { cfb } from '@awasm/noble';\n * cfb(new Uint8Array(16), new Uint8Array(16));\n * ```\n */\nexport const cfb = /* @__PURE__ */ mkCipher(mod_cfb, def_cfb, 'wasm');\n/**\n * ECB (Electronic Codebook): Deterministic encryption; identical plaintext blocks yield\n * identical ciphertexts. Not secure due to pattern leakage.\n * See AES Penguin.\n *\n * @param key - secret key bytes.\n * @param args - algorithm-specific extra arguments such as nonce or AAD.\n * @returns Configured cipher instance.\n * @example\n * ```ts\n * import { ecb } from '@awasm/noble';\n * ecb(new Uint8Array(16));\n * ```\n */\nexport const ecb = /* @__PURE__ */ mkCipher(mod_ecb, def_ecb, 'wasm');\n/**\n * GCM (Galois/Counter Mode): Combines CTR mode with polynomial MAC. Efficient and widely used.\n * Not perfect:\n * a) conservative key wear-out is '232' (4B) msgs.\n * b) key wear-out under random nonces is even smaller: '223' (8M) messages for '2-50' chance.\n * c) MAC can be forged: see Poly1305 documentation.\n *\n * @param key - secret key bytes.\n * @param args - algorithm-specific extra arguments such as nonce or AAD.\n * @returns Configured cipher instance.\n * @example\n * ```ts\n * import { gcm } from '@awasm/noble';\n * gcm(new Uint8Array(16), new Uint8Array(12));\n * ```\n */\nexport const gcm = /* @__PURE__ */ mkCipher(mod_gcm, def_gcm, 'wasm');\n/**\n * SIV (Synthetic IV): GCM with nonce-misuse resistance.\n * Repeating nonces reveal only the fact plaintexts are identical.\n * Also suffers from GCM issues: key wear-out limits & MAC forging.\n * See RFC 8452.\n *\n * @param key - secret key bytes.\n * @param args - algorithm-specific extra arguments such as nonce or AAD.\n * @returns Configured cipher instance.\n * @example\n * ```ts\n * import { gcmsiv } from '@awasm/noble';\n * gcmsiv(new Uint8Array(16), new Uint8Array(12));\n * ```\n */\nexport const gcmsiv = /* @__PURE__ */ mkCipher(mod_gcmsiv, def_gcmsiv, 'wasm');\n/**\n * SIV: Synthetic Initialization Vector (SIV) Authenticated Encryption\n * Nonce is derived from the plaintext and AAD using the S2V function.\n * See RFC 5297.\n *\n * @param key - secret key bytes.\n * @param args - algorithm-specific extra arguments such as nonce or AAD.\n * @returns Configured cipher instance.\n * @example\n * ```ts\n * import { aessiv } from '@awasm/noble';\n * aessiv(new Uint8Array(32));\n * ```\n */\nexport const aessiv = /* @__PURE__ */ mkCipher(mod_aessiv, def_aessiv, 'wasm');\n/**\n * AES-KW (key-wrap). Injects static IV into plaintext, adds counter, encrypts 6 times.\n * Reduces block size from 16 to 8 bytes.\n * For padded version, use aeskwp.\n * RFC 3394,\n * NIST.SP.800-38F.\n *\n * @param key - secret key bytes.\n * @param args - algorithm-specific extra arguments such as nonce or AAD.\n * @returns Configured cipher instance.\n * @example\n * ```ts\n * import { aeskw } from '@awasm/noble';\n * aeskw(new Uint8Array(16));\n * ```\n */\nexport const aeskw = /* @__PURE__ */ mkCipher(mod_aeskw, def_aeskw, 'wasm');\n/**\n * AES-KW, but with padding and allows random keys.\n * Second u32 of IV is used as counter for length.\n * RFC 5649\n *\n * @param key - secret key bytes.\n * @param args - algorithm-specific extra arguments such as nonce or AAD.\n * @returns Configured cipher instance.\n * @example\n * ```ts\n * import { aeskwp } from '@awasm/noble';\n * aeskwp(new Uint8Array(16));\n * ```\n */\nexport const aeskwp = /* @__PURE__ */ mkCipher(mod_aeskwp, def_aeskwp, 'wasm');\n/**\n * Salsa20 from original paper. 12-byte nonce.\n * With smaller nonce, it's not safe to make it random (CSPRNG), due to collision chance.\n *\n * @param key - secret key bytes.\n * @param args - algorithm-specific extra arguments such as nonce or AAD.\n * @returns Configured cipher instance.\n * @example\n * ```ts\n * import { salsa20 } from '@awasm/noble';\n * salsa20(new Uint8Array(32), new Uint8Array(8));\n * ```\n */\nexport const salsa20 = /* @__PURE__ */ mkCipher(mod_salsa20, def_salsa20, 'wasm');\n/**\n * xsalsa20 eXtended-nonce salsa. With 24-byte nonce, it's safe to make it random (CSPRNG).\n *\n * @param key - secret key bytes.\n * @param args - algorithm-specific extra arguments such as nonce or AAD.\n * @returns Configured cipher instance.\n * @example\n * ```ts\n * import { xsalsa20 } from '@awasm/noble';\n * xsalsa20(new Uint8Array(32), new Uint8Array(24));\n * ```\n */\nexport const xsalsa20 = /* @__PURE__ */ mkCipher(mod_xsalsa20, def_xsalsa20, 'wasm');\n/**\n * Reduced 8-round chacha, described in original paper.\n *\n * @param key - secret key bytes.\n * @param args - algorithm-specific extra arguments such as nonce or AAD.\n * @returns Configured cipher instance.\n * @example\n * ```ts\n * import { chacha8 } from '@awasm/noble';\n * chacha8(new Uint8Array(32), new Uint8Array(12));\n * ```\n */\nexport const chacha8 = /* @__PURE__ */ mkCipher(mod_chacha8, def_chacha8, 'wasm');\n/**\n * Reduced 12-round chacha, described in original paper.\n *\n * @param key - secret key bytes.\n * @param args - algorithm-specific extra arguments such as nonce or AAD.\n * @returns Configured cipher instance.\n * @example\n * ```ts\n * import { chacha12 } from '@awasm/noble';\n * chacha12(new Uint8Array(32), new Uint8Array(12));\n * ```\n */\nexport const chacha12 = /* @__PURE__ */ mkCipher(mod_chacha12, def_chacha12, 'wasm');\n/**\n * ChaCha stream cipher. Conforms to RFC 8439 (IETF, TLS). 12-byte nonce, 4-byte counter.\n * With smaller nonce, it's not safe to make it random (CSPRNG), due to collision chance.\n *\n * @param key - secret key bytes.\n * @param args - algorithm-specific extra arguments such as nonce or AAD.\n * @returns Configured cipher instance.\n * @example\n * ```ts\n * import { chacha20 } from '@awasm/noble';\n * chacha20(new Uint8Array(32), new Uint8Array(12));\n * ```\n */\nexport const chacha20 = /* @__PURE__ */ mkCipher(mod_chacha20, def_chacha20, 'wasm');\n/**\n * Original, non-RFC chacha20 from DJB. 8-byte nonce, 8-byte counter.\n *\n * @param key - secret key bytes.\n * @param args - algorithm-specific extra arguments such as nonce or AAD.\n * @returns Configured cipher instance.\n * @example\n * ```ts\n * import { chacha20orig } from '@awasm/noble';\n * chacha20orig(new Uint8Array(32), new Uint8Array(8));\n * ```\n */\nexport const chacha20orig = /* @__PURE__ */ mkCipher(mod_chacha20orig, def_chacha20orig, 'wasm');\n/**\n * XChaCha eXtended-nonce ChaCha. With 24-byte nonce, it's safe to make it random (CSPRNG).\n * See IRTF draft.\n *\n * @param key - secret key bytes.\n * @param args - algorithm-specific extra arguments such as nonce or AAD.\n * @returns Configured cipher instance.\n * @example\n * ```ts\n * import { xchacha20 } from '@awasm/noble';\n * xchacha20(new Uint8Array(32), new Uint8Array(24));\n * ```\n */\nexport const xchacha20 = /* @__PURE__ */ mkCipher(mod_xchacha20, def_xchacha20, 'wasm');\n/**\n * ChaCha20-Poly1305 from RFC 8439.\n * Unsafe to use random nonces under the same key, due to collision chance.\n * Prefer XChaCha instead.\n *\n * @param key - secret key bytes.\n * @param args - algorithm-specific extra arguments such as nonce or AAD.\n * @returns Configured cipher instance.\n * @example\n * ```ts\n * import { chacha20poly1305 } from '@awasm/noble';\n * chacha20poly1305(new Uint8Array(32), new Uint8Array(12));\n * ```\n */\nexport const chacha20poly1305 = /* @__PURE__ */ mkCipher(mod_chacha20poly1305, def_chacha20poly1305, 'wasm');\n/**\n * XChaCha20-Poly1305 extended-nonce chacha.\n * Can be safely used with random nonces (CSPRNG).\n * See IRTF draft.\n *\n * @param key - secret key bytes.\n * @param args - algorithm-specific extra arguments such as nonce or AAD.\n * @returns Configured cipher instance.\n * @example\n * ```ts\n * import { xchacha20poly1305 } from '@awasm/noble';\n * xchacha20poly1305(new Uint8Array(32), new Uint8Array(24));\n * ```\n */\nexport const xchacha20poly1305 = /* @__PURE__ */ mkCipher(mod_xchacha20poly1305, def_xchacha20poly1305, 'wasm');\n/**\n * xsalsa20-poly1305 eXtended-nonce (24 bytes) salsa.\n * With 24-byte nonce, it's safe to make it random (CSPRNG).\n * Also known as 'secretbox' from libsodium / nacl.\n *\n * @param key - secret key bytes.\n * @param args - algorithm-specific extra arguments such as nonce or AAD.\n * @returns Configured cipher instance.\n * @example\n * ```ts\n * import { xsalsa20poly1305 } from '@awasm/noble';\n * xsalsa20poly1305(new Uint8Array(32), new Uint8Array(24));\n * ```\n */\nexport const xsalsa20poly1305 = /* @__PURE__ */ mkCipher(mod_xsalsa20poly1305, def_xsalsa20poly1305, 'wasm');\n/**\n * Scrypt KDF\n *\n * @param password - password or key material bytes.\n * @param salt - salt bytes.\n * @param opts - algorithm configuration options.\n * @returns Derived output bytes.\n * @example\n * ```ts\n * import { scrypt } from '@awasm/noble';\n * scrypt('password', 'salt', { N: 16, r: 1, p: 1, dkLen: 32 });\n * ```\n */\nexport const scrypt = /* @__PURE__ */ def_scrypt(mod_scrypt, { sha256 }, 'wasm');\n/**\n * argon2d GPU-resistant version.\n *\n * @param password - password or key material bytes.\n * @param salt - salt bytes.\n * @param opts - algorithm configuration options.\n * @returns Derived output bytes.\n * @example\n * ```ts\n * import { argon2d } from '@awasm/noble';\n * argon2d('password', 'saltsalt', { t: 1, m: 8, p: 1, dkLen: 32 });\n * ```\n */\nexport const argon2d = /* @__PURE__ */ def_argon2d(mod_argon2d, { blake2b }, 'wasm');\n/**\n * argon2i side-channel-resistant version.\n *\n * @param password - password or key material bytes.\n * @param salt - salt bytes.\n * @param opts - algorithm configuration options.\n * @returns Derived output bytes.\n * @example\n * ```ts\n * import { argon2i } from '@awasm/noble';\n * argon2i('password', 'saltsalt', { t: 1, m: 8, p: 1, dkLen: 32 });\n * ```\n */\nexport const argon2i = /* @__PURE__ */ def_argon2i(mod_argon2i, { blake2b }, 'wasm');\n/**\n * argon2id, combining i+d, the most popular version from RFC 9106\n *\n * @param password - password or key material bytes.\n * @param salt - salt bytes.\n * @param opts - algorithm configuration options.\n * @returns Derived output bytes.\n * @example\n * ```ts\n * import { argon2id } from '@awasm/noble';\n * argon2id('password', 'saltsalt', { t: 1, m: 8, p: 1, dkLen: 32 });\n * ```\n */\nexport const argon2id = /* @__PURE__ */ def_argon2id(mod_argon2id, { blake2b }, 'wasm');\n/**\n * Alias to xsalsa20poly1305, for compatibility with libsodium / nacl.\n * Check out for crypto_box.\n *\n * @param key - secret key bytes.\n * @param nonce - nonce bytes.\n * @returns Configured secretbox helper.\n * @example\n * ```ts\n * import { secretbox } from '@awasm/noble';\n * secretbox(new Uint8Array(32), new Uint8Array(24));\n * ```\n */\nexport const secretbox = (key, nonce) => {\n const xs = xsalsa20poly1305(key, nonce);\n return { seal: xs.encrypt, open: xs.decrypt };\n};\n", "\nexport const is = Object.freeze({\n\n\t/** not undefined or null */\n\thappy: <X>(x: X): x is NonNullable<X> =>\n\t\tx !== undefined && x !== null,\n\n\t/** undefined or null */\n\tsad: (x: any): x is (undefined | null) =>\n\t\tx === undefined || x === null,\n\n\tboolean: (x: any): x is boolean =>\n\t\ttypeof x === \"boolean\",\n\n\tnumber: (x: any): x is number =>\n\t\ttypeof x === \"number\",\n\n\tstring: (x: any): x is string =>\n\t\ttypeof x === \"string\",\n\n\tbigint: (x: any): x is bigint =>\n\t\ttypeof x === \"bigint\",\n\n\tobject: <X>(x: X): x is object & NonNullable<X> =>\n\t\ttypeof x === \"object\" && x !== null,\n\n\tarray: (x: any | any[]): x is any[] =>\n\t\tArray.isArray(x),\n\n\tfn: (x: any): x is (...a: any[]) => any =>\n\t\ttypeof x === \"function\",\n\n\tsymbol: (x: any): x is symbol =>\n\t\ttypeof x === \"symbol\",\n})\n\n", "\nexport function got<X>(thing: X | undefined | null, err = \"got failed\"): X {\n\tif (thing === undefined || thing === null) throw new Error(err)\n\treturn thing\n}\n\n", "\nimport {is} from \"@e280/stz\"\nimport {Scan} from \"../../types.js\"\n\nexport function idbRange({start, end}: Scan) {\n\tif (is.happy(start) && is.happy(end)) return IDBKeyRange.bound(start, end, false, true)\n\tif (is.happy(start)) return IDBKeyRange.lowerBound(start, false)\n\tif (is.happy(end)) return IDBKeyRange.upperBound(end, true)\n}\n\n", "\nexport async function idbWait<T>(request: IDBRequest<T>) {\n\treturn new Promise<T>((resolve, reject) => {\n\t\trequest.onsuccess = () => resolve(request.result)\n\t\trequest.onerror = () => reject(request.error)\n\t})\n}\n\n", "\nimport {Idb} from \"./types.js\"\nimport {idbWait} from \"./wait.js\"\n\nexport function idbTransactions({db, storeName}: Idb) {\n\tconst setup = (mode: IDBTransactionMode) => (\n\t\tasync<R>(fn: (store: IDBObjectStore, wait: typeof idbWait) => Promise<R>) => {\n\t\t\tconst tx = db.transaction(storeName, mode)\n\t\t\tconst store = tx.objectStore(storeName)\n\n\t\t\tconst completed = new Promise((resolve, reject) => {\n\t\t\t\ttx.onabort = () => reject(tx.error ?? new Error(\"transaction aborted\"))\n\t\t\t\ttx.oncomplete = () => resolve(undefined)\n\t\t\t})\n\n\t\t\ttry {\n\t\t\t\tconst result = await fn(store, idbWait)\n\t\t\t\ttx.commit()\n\t\t\t\tawait completed\n\t\t\t\treturn result\n\t\t\t}\n\t\t\tcatch (error) {\n\t\t\t\ttry { tx.abort() }\n\t\t\t\tcatch {}\n\t\t\t\tthrow error\n\t\t\t}\n\t\t}\n\t)\n\n\treturn {\n\t\treadonly: setup(\"readonly\"),\n\t\treadwrite: setup(\"readwrite\"),\n\t}\n}\n\n", "\nimport {Idb} from \"../utils/idb/types.js\"\nimport {idbRange} from \"../utils/idb/range.js\"\nimport {Op, Magazine, Scan} from \"../types.js\"\nimport {idbTransactions} from \"../utils/idb/transactions.js\"\n\nexport class IdbMagazine implements Magazine {\n\t#tx\n\n\tconstructor(idb: Idb) {\n\t\tthis.#tx = idbTransactions(idb)\n\t}\n\n\tasync commit(ops: Op<string>[]) {\n\t\treturn this.#tx.readwrite(async store => {\n\t\t\tfor (const [key, value] of ops) {\n\t\t\t\tif (value === undefined)\n\t\t\t\t\tstore.delete(key)\n\t\t\t\telse\n\t\t\t\t\tstore.put(value, key)\n\t\t\t}\n\t\t})\n\t}\n\n\tasync getMany(keys: string[]) {\n\t\treturn this.#tx.readonly((store, wait) => (\n\t\t\tPromise.all(\n\t\t\t\tkeys.map(key => wait<string | undefined>(store.get(key)))\n\t\t\t)\n\t\t))\n\t}\n\n\tasync* entries(scan: Scan = {}) {\n\t\tif (scan.limit === 0)\n\t\t\treturn\n\n\t\tyield* await this.#tx.readonly(async (store, wait) => {\n\t\t\tconst entries: [string, string][] = []\n\t\t\tconst direction = scan.reverse ? \"prev\" : \"next\"\n\t\t\tconst request = store.openCursor(idbRange(scan), direction)\n\n\t\t\tlet cursor = await wait<IDBCursorWithValue | null>(request)\n\n\t\t\twhile (cursor) {\n\t\t\t\tentries.push([cursor.key as string, cursor.value])\n\n\t\t\t\tif (scan.limit !== undefined && entries.length >= scan.limit)\n\t\t\t\t\tbreak\n\n\t\t\t\tcursor.continue()\n\t\t\t\tcursor = await wait<IDBCursorWithValue | null>(request)\n\t\t\t}\n\n\t\t\treturn entries\n\t\t})\n\t}\n}\n\n", "\nexport const lexSort = (a: string, b: string) => (\n\ta < b ? -1 : a > b ? 1 : 0\n)\n\n", "\nimport {Scan} from \"../types.js\"\n\nexport function scanMatch(key: string, {start, end}: Scan) {\n\tif (start !== undefined && key < start) return false\n\tif (end !== undefined && key >= end) return false\n\treturn true\n}\n\n", "\nimport {Scan} from \"../types.js\"\nimport {lexSort} from \"./lex-sort.js\"\nimport {scanMatch} from \"./scan-match.js\"\n\nexport function* scanEntries(scan: Scan, entries: [string, string][]) {\n\tif (scan.limit === 0)\n\t\treturn\n\n\tconst matches = entries\n\t\t.filter(([key]) => scanMatch(key, scan))\n\t\t.sort(([a], [b]) => lexSort(a, b))\n\n\tif (scan.reverse)\n\t\tmatches.reverse()\n\n\tyield* matches.slice(0, scan.limit ?? Infinity)\n}\n\n", "\nimport {Op, Magazine, Scan} from \"../types.js\"\nimport {scanEntries} from \"../utils/scan-entries.js\"\n\nexport class MemoryMagazine implements Magazine {\n\t#map = new Map<string, string>()\n\n\tasync commit(ops: Op<string>[]) {\n\t\tfor (const [key, value] of ops) {\n\t\t\tif (value === undefined)\n\t\t\t\tthis.#map.delete(key)\n\t\t\telse\n\t\t\t\tthis.#map.set(key, value)\n\t\t}\n\t}\n\n\tasync getMany(keys: string[]) {\n\t\treturn keys.map(key => this.#map.get(key))\n\t}\n\n\tasync* entries(scan: Scan = {}) {\n\t\tyield* scanEntries(scan, [...this.#map.entries()])\n\t}\n}\n\n", "\nimport {Idb} from \"./types.js\"\n\nexport async function idbOpen(dbName: string, storeName = dbName): Promise<Idb> {\n\tconst db = await new Promise<IDBDatabase>((resolve, reject) => {\n\t\tconst request = indexedDB.open(dbName, 1)\n\t\trequest.onblocked = () => reject(new Error(\"idb blocked\"))\n\t\trequest.onerror = () => reject(request.error)\n\t\trequest.onupgradeneeded = () => request.result.createObjectStore(storeName)\n\t\trequest.onsuccess = () => resolve(request.result)\n\t})\n\treturn {db, storeName}\n}\n\n", "\nimport {Operator} from \"./operator.js\"\n\nexport class StoreOperator<V = unknown> {\n\t#key\n\t#parent\n\n\tconstructor(key: string, parent: Operator<V>) {\n\t\tthis.#key = key\n\t\tthis.#parent = parent\n\t}\n\n\tset(value: V | undefined) {\n\t\treturn this.#parent.set(this.#key, value)\n\t}\n\n\tdelete() {\n\t\treturn this.#parent.delete(this.#key)\n\t}\n}\n\n", "\nimport {Cubby} from \"@e280/stz\"\nimport {Kv} from \"./kv.js\"\nimport {StoreOperator} from \"./utils/store-operator.js\"\n\nexport class Store<V = unknown> implements Cubby<V> {\n\top\n\n\tconstructor(public kv: Kv, public key: string) {\n\t\tthis.op = new StoreOperator(key, kv.op)\n\t}\n\n\tasync set(value: V | undefined) {\n\t\treturn this.kv.set(this.key, value)\n\t}\n\n\tasync get(): Promise<V | undefined> {\n\t\treturn this.kv.get(this.key)\n\t}\n\n\tasync delete() {\n\t\treturn this.kv.set(this.key, undefined)\n\t}\n}\n\n", "\nimport {Op} from \"../types.js\"\nimport {Prefixer} from \"./prefixer.js\"\n\nexport class Operator<V = unknown> {\n\t#prefixer: Prefixer\n\n\tconstructor(prefixer: Prefixer) {\n\t\tthis.#prefixer = prefixer\n\t}\n\n\tset<X extends V = V>(key: string, value: X | undefined): Op<X> {\n\t\treturn [this.#prefixer.prefix(key), value]\n\t}\n\n\tdelete(key: string): Op<undefined> {\n\t\treturn [this.#prefixer.prefix(key), undefined]\n\t}\n}\n\n", "\nimport {Options, Scan} from \"../types.js\"\n\nexport class Prefixer {\n\t#prefix: string\n\t#end: string | undefined\n\n\tconstructor(options: Options) {\n\t\tconst {scopes, divisor, delimiter} = options\n\t\tthis.#prefix = scopes.join(divisor) + delimiter\n\t\tthis.#end = prefixEnd(this.#prefix)\n\t}\n\n\tprefix = (key: string) => {\n\t\treturn this.#prefix + key\n\t}\n\n\tunprefix = (fullkey: string) => {\n\t\treturn fullkey.slice(this.#prefix.length)\n\t}\n\n\tscan = (scan: Scan): Scan => {\n\t\tconst {start, end, limit, reverse} = scan\n\n\t\treturn {\n\t\t\tstart: this.#prefix + (start ?? \"\"),\n\t\t\tend: end === undefined\n\t\t\t\t? this.#end\n\t\t\t\t: this.#prefix + end,\n\t\t\tlimit,\n\t\t\treverse,\n\t\t}\n\t}\n}\n\nfunction prefixEnd(prefix: string) {\n\tfor (let index = prefix.length - 1; index >= 0; index--) {\n\t\tconst code = prefix.charCodeAt(index)\n\n\t\tif (code < 0xFFFF) {\n\t\t\treturn (\n\t\t\t\tprefix.slice(0, index) +\n\t\t\t\tString.fromCharCode(code + 1)\n\t\t\t)\n\t\t}\n\t}\n\n\treturn undefined\n}\n\n", "\nimport {Codec} from \"../types.js\"\n\nexport class JsonCodec implements Codec {\n\tencode = (value: unknown) => JSON.stringify(value)\n\tdecode = <X>(text: string): X => JSON.parse(text)\n}\n\n", "\nimport {got} from \"@e280/stz\"\nimport {Store} from \"./store.js\"\nimport {Operator} from \"./utils/operator.js\"\nimport {Prefixer} from \"./utils/prefixer.js\"\nimport {JsonCodec} from \"./utils/json-codec.js\"\nimport {MemoryMagazine} from \"./magazines/memory.js\"\nimport {Magazine, Op, Options, Scan, Pair} from \"./types.js\"\n\nexport class Kv<V = unknown> {\n\top\n\t#magazine\n\t#prefixer\n\t#options: Options\n\n\tconstructor(magazine: Magazine = new MemoryMagazine(), options: Partial<Options> = {}) {\n\t\tthis.#magazine = magazine\n\t\tthis.#options = {\n\t\t\tcodec: new JsonCodec(),\n\t\t\tscopes: [],\n\t\t\tdivisor: \".\",\n\t\t\tdelimiter: \":\",\n\t\t\t...options,\n\t\t}\n\t\tthis.#prefixer = new Prefixer(this.#options)\n\t\tthis.op = new Operator<V>(this.#prefixer)\n\t}\n\n\t/** create a store which can set or get on a single key */\n\tstore<X extends V = V>(key: string) {\n\t\treturn new Store<X>(this, key)\n\t}\n\n\t/** create a sub kv where all keys inherit a prefix */\n\tscope<X = unknown>(scope: string, delimiter = this.#options.delimiter) {\n\t\tconst scopes = [...this.#options.scopes, scope]\n\t\treturn new Kv<X>(this.#magazine, {...this.#options, delimiter, scopes})\n\t}\n\n\t/** no delimiter means all sub namespaces are accessible */\n\tcrush() {\n\t\treturn new Kv<V>(this.#magazine, {...this.#options, delimiter: \"\"})\n\t}\n\n\tasync commit(ops: Op<V>[]) {\n\t\tawait this.#magazine.commit(\n\t\t\tops.map(([key, value]) => [key, this.#options.codec.encode(value)])\n\t\t)\n\t}\n\n\tasync set<X extends V = V>(key: string, value: X | undefined) {\n\t\treturn this.commit([this.op.set(key, value)])\n\t}\n\n\tasync delete(key: string) {\n\t\treturn this.commit([this.op.delete(key)])\n\t}\n\n\tasync getMany<X extends V = V>(keys: string[]) {\n\t\tkeys = keys.map(key => this.#prefixer.prefix(key))\n\t\treturn (await this.#magazine.getMany(keys)).map(value =>\n\t\t\t(value === undefined)\n\t\t\t\t? undefined\n\t\t\t\t: this.#options.codec.decode(value) as X\n\t\t)\n\t}\n\n\tasync get<X extends V = V>(key: string) {\n\t\tconst [value] = await this.getMany<X>([key])\n\t\treturn value\n\t}\n\n\tasync has(key: string) {\n\t\treturn (await this.get(key)) !== undefined\n\t}\n\n\tasync need<X extends V = V>(key: string) {\n\t\treturn got(await this.get<X>(key), `key not found \"${key}\"`)\n\t}\n\n\tasync needMany<X extends V = V>(keys: string[]) {\n\t\tconst values = await this.getMany<X>(keys)\n\t\tfor (const [index, key] of keys.entries())\n\t\t\tgot(values[index], `key not found \"${key}\"`)\n\t\treturn values as X[]\n\t}\n\n\tasync* entries<X extends V = V>(scan: Scan = {}) {\n\t\tscan = this.#prefixer.scan(scan)\n\n\t\tfor await (const [key, value] of this.#magazine.entries(scan))\n\t\t\tyield [this.#prefixer.unprefix(key), this.#options.codec.decode(value)] as Pair<X>\n\t}\n\n\t[Symbol.asyncIterator]() {\n\t\treturn this.entries()\n\t}\n\n\tasync* keys(scan: Scan = {}) {\n\t\tfor await (const [key] of this.entries(scan))\n\t\t\tyield key\n\t}\n\n\tasync* values<X extends V = V>(scan: Scan = {}) {\n\t\tfor await (const [, value] of this.entries(scan))\n\t\t\tyield value as X\n\t}\n\n\tasync count(scan: Scan = {}) {\n\t\tlet count = 0\n\t\tfor await (const _ of this.keys(scan)) count++\n\t\treturn count\n\t}\n\n\tasync clear(scan: Scan = {}) {\n\t\tlet changes: Op<V>[] = []\n\n\t\tfor await (const [key] of this.entries(scan)) {\n\t\t\tchanges.push(this.op.delete(key))\n\t\t\tif (changes.length >= 1024) {\n\t\t\t\tawait this.commit(changes)\n\t\t\t\tchanges = []\n\t\t\t}\n\t\t}\n\n\t\tif (changes.length)\n\t\t\tawait this.commit(changes)\n\t}\n}\n\n", "\nimport {time} from \"@e280/stz\"\n\nexport const consts = {\n\tmax_jobs: 64,\n\texpiry_time: time.days(7),\n}\n\n", "\nimport {hex} from \"@e280/stz\"\nimport {blake3} from \"@awasm/noble\"\nimport {Analysis, Bucket, Id} from \"../types.js\"\n\nexport async function save(\n\t\tbucket: Bucket,\n\t\tid: Id,\n\t\treadable: ReadableStream<Uint8Array>,\n\t): Promise<Analysis> {\n\n\tlet size = 0\n\tconst hasher = blake3.create()\n\n\tawait bucket.write(id, readable.pipeThrough(\n\t\tnew TransformStream({\n\t\t\ttransform(chunk, controller) {\n\t\t\t\thasher.update(chunk)\n\t\t\t\tsize += chunk.byteLength\n\t\t\t\tcontroller.enqueue(chunk)\n\t\t\t},\n\t\t})\n\t))\n\n\tconst hash = hex.fromBytes(hasher.digest())\n\treturn {hash, size}\n}\n\n", "\nimport {time} from \"@e280/stz\"\nimport {consts} from \"../consts.js\"\n\nexport function isExpired(created: number) {\n\tconst since = Date.now() - created\n\treturn since > time.days(consts.expiry_time)\n}\n\n", "\nimport {Manifest} from \"../manifest.js\"\nimport {isExpired} from \"../../utils/is-expired.js\"\n\nexport async function* getExpiredWrites({writes}: Manifest) {\n\tfor await (const [id, w] of writes.entries()) {\n\t\tif (isExpired(w.created))\n\t\t\tyield id\n\t}\n}\n\n", "\nimport {Id} from \"../../types.js\"\nimport {Manifest} from \"../manifest.js\"\n\nexport async function moveWriteToTrash({kv, writes, trash}: Manifest, id: Id) {\n\tawait kv.commit([\n\t\twrites.op.delete(id),\n\t\ttrash.op.set(id, true),\n\t])\n}\n\n", "\nimport {Bucket} from \"../types.js\"\nimport {Manifest} from \"../manifest/manifest.js\"\nimport {getExpiredWrites} from \"../manifest/fns/get-expired-writes.js\"\nimport {moveWriteToTrash} from \"../manifest/fns/move-write-to-trash.js\"\n\nexport async function cleanup(bucket: Bucket, manifest: Manifest) {\n\tfor await (const id of getExpiredWrites(manifest))\n\t\tawait moveWriteToTrash(manifest, id)\n\n\tfor await (const id of manifest.trash.keys()) {\n\t\tawait bucket.delete(id)\n\t\tawait manifest.trash.delete(id)\n\t}\n}\n\n", "\nimport {hex} from \"@e280/stz\"\n\nexport function randomId() {\n\treturn hex.random(32)\n}\n\n", "\nimport {Kv} from \"@e280/kv\"\nimport {Write} from \"./types.js\"\nimport {Info, Stats} from \"../types.js\"\n\nexport class Manifest {\n\n\t/** statistics about the whole datalake */\n\tstats\n\n\t/** associates file hashes with bucket ids */\n\tcatalog\n\n\t/** temporary record of writes in-progress */\n\twrites\n\n\t/** bucket ids that are pending deletion */\n\ttrash\n\n\tconstructor(public kv: Kv) {\n\t\tthis.stats = kv.store<Stats>(\"stats\")\n\t\tthis.catalog = kv.scope<Info>(\"catalog\")\n\t\tthis.writes = kv.scope<Write>(\"writes\")\n\t\tthis.trash = kv.scope<true>(\"trash\")\n\t}\n}\n\n", "\nimport {Manifest} from \"../manifest.js\"\n\nexport async function getStats({stats}: Manifest) {\n\treturn structuredClone(\n\t\t(await stats.get())\n\t\t\t?? {count: 0, size: 0}\n\t)\n}\n\n", "\nimport {getStats} from \"./get-stats.js\"\nimport {Manifest} from \"../manifest.js\"\nimport {Hash, Info} from \"../../types.js\"\n\nexport async function commit(manifest: Manifest, hash: Hash, info: Info) {\n\tconst {kv, stats, catalog, writes, trash} = manifest\n\tconst isNewFile = !await catalog.has(hash)\n\n\tif (isNewFile) {\n\t\tconst s = await getStats(manifest)\n\t\ts.count += 1\n\t\ts.size += info.size\n\t\tawait kv.commit([\n\t\t\twrites.op.delete(info.id),\n\t\t\tcatalog.op.set(hash, info),\n\t\t\tstats.op.set(s),\n\t\t])\n\t}\n\telse {\n\t\tawait kv.commit([\n\t\t\twrites.op.delete(info.id),\n\t\t\ttrash.op.set(info.id, true),\n\t\t])\n\t}\n}\n\n", "\nimport {Hash} from \"../types.js\"\n\nexport function notFoundMessage(hash: Hash) {\n\treturn `file not found by hash \"${hash}\"`\n}\n\n", "\nimport {got} from \"@e280/stz\"\nimport {Hash} from \"../../types.js\"\nimport {Manifest} from \"../manifest.js\"\nimport {notFoundMessage} from \"../../utils/not-found.js\"\n\nexport async function needInfo({catalog}: Manifest, hash: Hash) {\n\treturn got(await catalog.get(hash), notFoundMessage(hash))\n}\n\n", "\nimport {getStats} from \"./get-stats.js\"\nimport {Manifest} from \"../manifest.js\"\nimport {Hash, Info} from \"../../types.js\"\n\nexport async function scheduleDeletion(manifest: Manifest, hash: Hash, info: Info) {\n\tconst {kv, stats, catalog, trash} = manifest\n\n\tconst s = await getStats(manifest)\n\ts.count -= 1\n\ts.size -= info.size\n\n\tawait kv.commit([\n\t\tcatalog.op.delete(hash),\n\t\ttrash.op.set(info.id, true),\n\t\tstats.op.set(s),\n\t])\n}\n\n", "\nimport {Kv} from \"@e280/kv\"\nimport {lane, queue} from \"@e280/stz\"\n\nimport {consts} from \"./consts.js\"\nimport {save} from \"./utils/save.js\"\nimport {Hash, Bucket} from \"./types.js\"\nimport {cleanup} from \"./utils/cleanup.js\"\nimport {randomId} from \"./utils/random-id.js\"\nimport {Manifest} from \"./manifest/manifest.js\"\nimport {commit} from \"./manifest/fns/commit.js\"\nimport {needInfo} from \"./manifest/fns/need-info.js\"\nimport {getStats} from \"./manifest/fns/get-stats.js\"\nimport {MemoryBucket} from \"./buckets/memory-bucket.js\"\nimport {scheduleDeletion} from \"./manifest/fns/schedule-deletion.js\"\nimport {moveWriteToTrash} from \"./manifest/fns/move-write-to-trash.js\"\n\n/** file storage datalake, content-addressed with blake3 hashes. */\nexport class Mammoth {\n\t#bucket\n\t#manifest\n\t#wholesome = lane(consts.max_jobs)\n\n\tconstructor(bucket: Bucket = new MemoryBucket(), kv = new Kv()) {\n\t\tthis.#bucket = bucket\n\t\tthis.#manifest = new Manifest(kv)\n\t}\n\n\tasync* entries() {\n\t\tyield* this.#manifest.catalog.entries()\n\t}\n\n\tasync has(hash: Hash) {\n\t\treturn this.#manifest.catalog.has(hash)\n\t}\n\n\tasync info(hash: Hash) {\n\t\treturn needInfo(this.#manifest, hash)\n\t}\n\n\tasync stats() {\n\t\treturn getStats(this.#manifest)\n\t}\n\n\tasync read(hash: Hash) {\n\t\tconst {id} = await this.info(hash)\n\t\treturn this.#bucket.read(id)\n\t}\n\n\tasync delete(hash: Hash) {\n\t\tawait this.#wholesome(async() => {\n\t\t\tconst info = await this.#manifest.catalog.get(hash)\n\t\t\tif (info)\n\t\t\t\tawait scheduleDeletion(this.#manifest, hash, info)\n\t\t})\n\t\tawait this.#cleanup()\n\t}\n\n\tasync write(readable: ReadableStream<Uint8Array>): Promise<Hash> {\n\t\tconst id = randomId()\n\t\tawait this.#manifest.writes.set(id, {created: Date.now()})\n\t\ttry {\n\t\t\tconst analysis = await save(this.#bucket, id, readable)\n\t\t\tconst {hash, size} = analysis\n\t\t\tconst info = {id, size, added: Date.now()}\n\t\t\tawait this.#wholesome(() => commit(this.#manifest, hash, info))\n\t\t\treturn analysis.hash\n\t\t}\n\t\tcatch (error) {\n\t\t\tawait moveWriteToTrash(this.#manifest, id)\n\t\t\tthrow error\n\t\t}\n\t\tfinally {\n\t\t\tvoid this.#cleanup().catch(e => console.error(\"cleanup failed\", e))\n\t\t}\n\t}\n\n\t#cleanup = queue(() => cleanup(this.#bucket, this.#manifest), consts.max_jobs)\n}\n\n", "\nimport {collect} from \"@e280/stz\"\nimport {Comrade} from \"@e280/comrade\"\nimport {Mammoth, OpfsBucket} from \"@e280/mammoth\"\nimport {idbOpen, IdbMagazine, Kv} from \"@e280/kv\"\n\nimport type {MammothSchematic} from \"./mammoth.js\"\n\nlet mammoth: Mammoth\n\nawait Comrade.worker<MammothSchematic>(() => ({\n\tasync setup(dirname) {\n\t\tconst root = await navigator.storage.getDirectory()\n\t\tconst directory = await root.getDirectoryHandle(dirname, {create: true})\n\t\tmammoth = new Mammoth(\n\t\t\tnew OpfsBucket(directory),\n\t\t\tnew Kv(new IdbMagazine(await idbOpen(`quay.mammoth:${dirname}`))),\n\t\t)\n\t},\n\n\twrite: readable => mammoth.write(readable),\n\thas: hash => mammoth.has(hash),\n\tread: hash => mammoth.read(hash),\n\tdelete: hash => mammoth.delete(hash),\n\n\tasync hashes() {\n\t\treturn (await collect(mammoth.entries())).map(([hash]) => hash)\n\t},\n}))\n\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
|
+
"names": ["collect", "iterable", "array", "item", "bindTap", "tap", "ctx", "o", "basicTheme", "colors", "autoTheme", "basicTheme", "codes", "colorFns", "s", "uncolor", "mix", "hex", "rgb", "bgRgb", "fn", "bigint", "r", "g", "b", "c", "code", "codes", "colorless", "codes", "key", "s", "colorFns", "colorful", "codes", "key", "code", "s", "colorFns", "isDeno", "isNode", "isColorSupported", "autoColors", "isColorSupported", "colorful", "colorless", "errorsShaper", "colors", "theme", "palette", "errstring", "error", "stack", "processErrors", "item", "processAll", "items", "combineShapers", "shapers", "context", "items", "shaper", "defaultTimestampOptions", "timestampShaper", "options", "colors", "theme", "opts", "palette", "date", "year", "month", "day", "calendar", "hour", "minute", "second", "milliseconds", "clock", "stamp", "items", "autoShaper", "combineShapers", "errorsShaper", "timestampShaper", "denoWriter", "line", "nodeWriter", "line", "consoleWriter", "line", "autoWriter", "isDeno", "denoWriter", "isNode", "nodeWriter", "consoleWriter", "voidWriter", "noneShaper", "items", "Logger", "_Logger", "autoWriter", "voidWriter", "denoWriter", "nodeWriter", "consoleWriter", "autoColors", "colorful", "colorless", "autoTheme", "basicTheme", "autoShaper", "noneShaper", "errorsShaper", "timestampShaper", "items", "writer", "colors", "theme", "shapers", "combineShapers", "LoggerTap", "Logger", "request", "context", "g", "#context", "error", "meta", "label", "remote", "cRemote", "cLocal", "#meta", "headers", "ErrorTap", "LoggerTap", "defer", "resolve", "reject", "promise", "res", "rej", "entangle", "outside", "is", "x", "ok", "value", "err", "error", "gotOk", "result", "error", "needOk", "gotOk", "dig", "target", "path", "current", "key", "is", "err", "ok", "DeadlineError", "milliseconds", "deadline", "fn", "resolve", "reject", "id", "disposer", "fns", "d", "fn", "newFns", "xub", "set", "publish", "fn", "subscribe", "pub", "sub", "next", "promise", "resolve", "defer", "unsubscribe", "a", "clear", "x", "pub", "listener", "x", "xub", "JsonRpc", "getId", "request", "ExposedError", "RemoteError", "execute", "tap", "request", "action", "id", "JsonRpc", "result", "error", "ExposedError", "makeEndpoint", "options", "tap", "ErrorTap", "request", "path", "fn", "needOk", "dig", "action", "execute", "tune", "query", "notify", "settings", "remoteProxy", "executor", "recurse", "path", "currentSettings", "_", "_this", "args", "target", "key", "value", "makeRemote", "options", "endpoint", "tap", "ErrorTap", "id", "remoteProxy", "path", "params", "settings", "notify", "transfer", "base", "request", "response", "RemoteError", "makeMock", "options", "makeRemote", "makeEndpoint", "Conduit", "pub", "origin", "a", "b", "disposers", "data", "fn", "onMessage", "channel", "fn", "makeRemoteEndpoint", "waiter", "sendRequest", "request", "transfer", "done", "defer", "waiting", "response", "interpretIncoming", "json", "requests", "responses", "item", "handleIncomingRequests", "localEndpoint", "r", "PostableConduit", "Conduit", "disposer", "channel", "m", "transfer", "onMessage", "e", "MessengerMeta", "remote", "defaults", "ResponseWaiter", "timeout", "id", "method", "deferred", "defer", "deadline", "error", "DeadlineError", "response", "pend", "RemoteError", "Messenger", "disposer", "#waiter", "options", "conduit", "tap", "ResponseWaiter", "defaults", "makeRemoteEndpoint", "makeRemote", "bindTap", "m", "incoming", "meta", "MessengerMeta", "rpc", "requests", "responses", "interpretIncoming", "response", "fns", "endpoint", "makeEndpoint", "outgoing", "handleIncomingRequests", "shells", "meta", "t", "defaultTap", "ErrorTap", "worker", "compat", "setupWork", "options", "tap", "defaultTap", "messenger", "Messenger", "PostableConduit", "m", "shells", "defer", "resolve", "reject", "promise", "res", "rej", "entangle", "outside", "Thread", "worker", "messenger", "compat", "options", "tap", "defaultTap", "label", "readyprom", "defer", "infra", "Messenger", "PostableConduit", "m", "shells", "Cluster", "compat", "options", "workerCount", "threads", "_", "index", "Thread", "#available", "#tasks", "tap", "defaultTap", "remoteEndpoint", "request", "special", "#scheduleTask", "defer", "makeRemote", "thread", "task", "#distributeTasks", "callprom", "setupComrade", "compat", "options", "Thread", "Cluster", "setupWork", "worker", "fn", "setupHost", "tap", "defaultTap", "hostShell", "shells", "workShell", "makeMock", "setupBrowserCompat", "count", "url", "name", "compat", "setupBrowserCompat", "Comrade", "setupComrade", "bytes", "a", "b", "diff", "i", "count", "parts", "size", "part", "offset", "BaseX", "lexicon", "char", "i", "fn", "s", "bitsPerChar", "bitBuffer", "bitCount", "output", "val", "num", "base", "zeroCharacter", "leadingZeroBytes", "out", "writeIndex", "bytes", "byte", "index", "n", "negative", "value", "count", "hex", "BaseX", "base2", "base36", "base58", "base62", "base64", "base64url", "queue", "fn", "limit", "pending", "last", "args", "job", "current", "lane", "limit", "queue", "fn", "got", "thing", "err", "nap", "milliseconds", "resolve", "time", "n", "relaxer", "delta", "last", "now", "MemoryBucket", "#map", "id", "got", "readable", "relax", "relaxer", "parts", "chunk", "nap", "payload", "bytes", "isNotFoundErr", "error", "OpfsBucket", "#directory", "directory", "id", "error", "isNotFoundErr", "readable", "writable", "isLE", "assertLE", "littleEndian", "isBytes", "a", "anumber", "n", "title", "prefix", "abytes", "value", "length", "bytes", "isBytes", "len", "needsLen", "u8", "arr", "u32", "clean", "arrays", "i", "copyFast", "dst", "dstPos", "src", "srcPos", "len", "i", "copyBytes", "bytes", "abytes", "checkOpts", "defaults", "opts", "mkAsync", "cb_", "cb", "genSetup", "canReturn", "setupDone", "progressTotal", "done", "stateBytes", "state", "onSave", "_state", "onRestore", "onNextTick", "_opts", "rawOpts", "anumber", "onProgress", "inc", "callbackPer", "asyncTick", "_stateBytes", "save", "restore", "nextTick", "total", "k", "v", "needReturn", "ts", "diff", "progress", "res", "args", "setup", "g", "r", "onEnd", "setupMode", "checkParallelOutput", "opts", "count", "outputLen", "canXOF", "raw", "isBytes", "anumber", "dkLen", "i", "abytes", "out", "outPos", "slices", "pos", "BRAND", "brandSet", "mkHash", "modFn", "def_", "platform", "def", "outputLen", "blockLen", "suffix", "init", "canXOF", "oid", "outBlockLen", "hashImpl", "hashAsyncImpl", "chunksImpl", "chunksAsyncImpl", "parallelImpl", "parallelAsyncImpl", "createImpl", "cleanStateImpl", "inited", "lazyInit", "mod", "processBlocks", "processOutBlocks", "padding", "reset", "BUFFER", "STATE", "STATE_CHUNKS", "parallelChunks", "maxBlocks", "chunks", "maxOutBlocks", "prefixStates", "initHash", "opts", "batchPos", "rawOpts", "blocks", "streamOutputLen", "anumber", "i", "hash", "processMessage", "msg", "padBlocks", "pos", "take", "copyFast", "isLast", "left", "processMessages", "parts", "prefix", "cap", "prefixLen", "totalLen", "k", "idx", "off", "written", "n", "cur", "rem", "processMessageParallel", "chunkPos", "chunkLen", "msgLen", "copyLane", "dst", "lane", "j", "checkOutputOpts", "o", "bytes", "defaultLen", "raw", "abytes", "dkLen", "out", "outPos", "processOutput", "checked", "batch", "blocksTotal", "produced", "blocksLeft", "maxWritten", "takeBlocks", "emitted", "need", "takeBytes", "processOutputParallel", "outOffset", "stateBytes", "state", "isBytes", "prefixState", "StreamHash", "copyBytes", "msgPos", "msgFirstLen", "leftover", "outChecked", "res", "buf", "to", "hashSync", "chunksSync", "total", "p", "parallelSync", "maxGroups", "maxOutGroups", "groupLen", "checkParallelOutput", "t", "setupTick", "setup", "rawSetup", "_inc", "hashRun", "mkAsync", "setupMode", "tick", "chunksRun", "parallelRun", "clean", "chunksFn", "parallel", "BRAND", "brandSet", "SHA256_IV", "B3_Flags", "B3_IV", "SHA256_IV", "B3_IV_U8", "u8", "blake3", "batchPos", "_maxBlocks", "mod", "hash", "opts", "key", "context", "_keyContext", "anumber", "flags", "IV", "B3_IV_U8", "abytes", "B3_Flags", "u32", "init_module", "_imports", "pool", "_importsEmbed", "code", "char", "module", "_exports", "buffer", "memoryExport", "segments", "_", "i", "_cache", "blake3", "blake3", "mkHash", "is", "x", "got", "thing", "err", "idbRange", "start", "end", "is", "idbWait", "request", "resolve", "reject", "idbTransactions", "db", "storeName", "setup", "mode", "fn", "tx", "store", "completed", "resolve", "reject", "result", "idbWait", "error", "IdbMagazine", "#tx", "idb", "idbTransactions", "ops", "store", "key", "value", "keys", "wait", "scan", "entries", "direction", "request", "idbRange", "cursor", "lexSort", "a", "b", "scanMatch", "key", "start", "end", "scanEntries", "scan", "entries", "matches", "key", "scanMatch", "a", "b", "lexSort", "MemoryMagazine", "#map", "ops", "key", "value", "keys", "scan", "scanEntries", "idbOpen", "dbName", "storeName", "resolve", "reject", "request", "StoreOperator", "#key", "#parent", "key", "parent", "value", "Store", "kv", "key", "StoreOperator", "value", "Operator", "#prefixer", "prefixer", "key", "value", "Prefixer", "#prefix", "#end", "options", "scopes", "divisor", "delimiter", "prefixEnd", "key", "fullkey", "scan", "start", "end", "limit", "reverse", "prefix", "index", "code", "JsonCodec", "value", "text", "Kv", "_Kv", "#magazine", "#prefixer", "#options", "magazine", "MemoryMagazine", "options", "JsonCodec", "Prefixer", "Operator", "key", "Store", "scope", "delimiter", "scopes", "ops", "value", "keys", "got", "values", "index", "scan", "count", "_", "changes", "consts", "time", "save", "bucket", "id", "readable", "size", "hasher", "blake3", "chunk", "controller", "hex", "isExpired", "created", "time", "consts", "getExpiredWrites", "writes", "id", "w", "isExpired", "moveWriteToTrash", "kv", "writes", "trash", "id", "cleanup", "bucket", "manifest", "id", "getExpiredWrites", "moveWriteToTrash", "randomId", "hex", "Manifest", "kv", "getStats", "stats", "commit", "manifest", "hash", "info", "kv", "stats", "catalog", "writes", "trash", "s", "getStats", "notFoundMessage", "hash", "needInfo", "catalog", "hash", "got", "notFoundMessage", "scheduleDeletion", "manifest", "hash", "info", "kv", "stats", "catalog", "trash", "s", "getStats", "Mammoth", "#bucket", "#manifest", "#wholesome", "lane", "consts", "bucket", "MemoryBucket", "kv", "Kv", "Manifest", "hash", "needInfo", "getStats", "id", "info", "scheduleDeletion", "#cleanup", "readable", "randomId", "analysis", "save", "size", "commit", "error", "moveWriteToTrash", "queue", "cleanup", "mammoth", "Comrade", "dirname", "directory", "Mammoth", "OpfsBucket", "Kv", "IdbMagazine", "idbOpen", "readable", "hash", "collect"]
|
|
7
|
+
}
|