@omnimedia/omnitool 1.1.0-4 → 1.1.0-7
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/package.json +4 -2
- package/s/demo/demo.css +5 -0
- package/s/demo/routines/transcode-test.ts +4 -2
- package/s/demo/routines/transitions-test.ts +43 -0
- package/s/driver/driver.ts +17 -9
- package/s/driver/fns/schematic.ts +44 -21
- package/s/driver/fns/work.ts +112 -97
- package/s/features/transition/parts/fragment.ts +24 -0
- package/s/features/transition/parts/types.ts +94 -0
- package/s/features/transition/parts/uniforms.ts +29 -0
- package/s/features/transition/parts/vertex.ts +31 -0
- package/s/features/transition/transition.ts +60 -0
- package/s/index.html.ts +6 -1
- package/s/timeline/parts/basics.ts +1 -1
- package/s/timeline/parts/compositor/export.ts +77 -0
- package/s/timeline/parts/compositor/parts/html-tree.ts +37 -0
- package/s/timeline/parts/compositor/parts/schedulers.ts +85 -0
- package/s/timeline/parts/compositor/parts/tree-builder.ts +184 -0
- package/s/timeline/parts/compositor/parts/webcodecs-tree.ts +30 -0
- package/s/timeline/parts/compositor/playback.ts +81 -0
- package/s/timeline/parts/compositor/samplers/html.ts +115 -0
- package/s/timeline/parts/compositor/samplers/webcodecs.ts +60 -0
- package/s/timeline/parts/item.ts +38 -6
- package/s/timeline/parts/media.ts +21 -0
- package/s/timeline/parts/waveform.ts +1 -1
- package/s/timeline/sugar/builders.ts +102 -0
- package/s/timeline/sugar/o.ts +75 -16
- package/s/timeline/sugar/omni-test.ts +2 -2
- package/s/timeline/sugar/omni.ts +14 -11
- package/s/timeline/timeline.ts +22 -0
- package/s/timeline/types.ts +29 -0
- package/s/timeline/utils/audio-stream.ts +15 -0
- package/s/timeline/utils/matrix.ts +33 -0
- package/s/timeline/utils/video-cursor.ts +40 -0
- package/x/demo/demo.bundle.min.js +39 -37
- package/x/demo/demo.bundle.min.js.map +4 -4
- package/x/demo/demo.css +5 -0
- package/x/demo/routines/transcode-test.js +4 -2
- package/x/demo/routines/transcode-test.js.map +1 -1
- package/x/demo/routines/transitions-test.d.ts +5 -0
- package/x/demo/routines/transitions-test.js +35 -0
- package/x/demo/routines/transitions-test.js.map +1 -0
- package/x/driver/driver.d.ts +3 -5
- package/x/driver/driver.js +16 -9
- package/x/driver/driver.js.map +1 -1
- package/x/driver/driver.worker.bundle.min.js +2537 -148
- package/x/driver/driver.worker.bundle.min.js.map +4 -4
- package/x/driver/fns/host.d.ts +9 -2
- package/x/driver/fns/schematic.d.ts +38 -20
- package/x/driver/fns/work.d.ts +11 -4
- package/x/driver/fns/work.js +105 -96
- package/x/driver/fns/work.js.map +1 -1
- package/x/features/speech/transcribe/worker.bundle.min.js +541 -541
- package/x/features/speech/transcribe/worker.bundle.min.js.map +4 -4
- package/x/features/transition/parts/fragment.d.ts +1 -0
- package/x/features/transition/parts/fragment.js +25 -0
- package/x/features/transition/parts/fragment.js.map +1 -0
- package/x/features/transition/parts/types.d.ts +23 -0
- package/x/features/transition/parts/types.js +2 -0
- package/x/features/transition/parts/types.js.map +1 -0
- package/x/features/transition/parts/uniforms.d.ts +31 -0
- package/x/features/transition/parts/uniforms.js +27 -0
- package/x/features/transition/parts/uniforms.js.map +1 -0
- package/x/features/transition/parts/vertex.d.ts +1 -0
- package/x/features/transition/parts/vertex.js +32 -0
- package/x/features/transition/parts/vertex.js.map +1 -0
- package/x/features/transition/transition.d.ts +5 -0
- package/x/features/transition/transition.js +50 -0
- package/x/features/transition/transition.js.map +1 -0
- package/x/index.html +13 -3
- package/x/index.html.js +6 -1
- package/x/index.html.js.map +1 -1
- package/x/timeline/parts/basics.d.ts +1 -1
- package/x/timeline/parts/compositor/export.d.ts +9 -0
- package/x/timeline/parts/compositor/export.js +64 -0
- package/x/timeline/parts/compositor/export.js.map +1 -0
- package/x/timeline/parts/compositor/parts/html-tree.d.ts +3 -0
- package/x/timeline/parts/compositor/parts/html-tree.js +40 -0
- package/x/timeline/parts/compositor/parts/html-tree.js.map +1 -0
- package/x/timeline/parts/compositor/parts/schedulers.d.ts +15 -0
- package/x/timeline/parts/compositor/parts/schedulers.js +64 -0
- package/x/timeline/parts/compositor/parts/schedulers.js.map +1 -0
- package/x/timeline/parts/compositor/parts/tree-builder.d.ts +37 -0
- package/x/timeline/parts/compositor/parts/tree-builder.js +147 -0
- package/x/timeline/parts/compositor/parts/tree-builder.js.map +1 -0
- package/x/timeline/parts/compositor/parts/webcodecs-tree.d.ts +3 -0
- package/x/timeline/parts/compositor/parts/webcodecs-tree.js +28 -0
- package/x/timeline/parts/compositor/parts/webcodecs-tree.js.map +1 -0
- package/x/timeline/parts/compositor/playback.d.ts +19 -0
- package/x/timeline/parts/compositor/playback.js +71 -0
- package/x/timeline/parts/compositor/playback.js.map +1 -0
- package/x/timeline/parts/compositor/samplers/html.d.ts +3 -0
- package/x/timeline/parts/compositor/samplers/html.js +106 -0
- package/x/timeline/parts/compositor/samplers/html.js.map +1 -0
- package/x/timeline/parts/compositor/samplers/webcodecs.d.ts +2 -0
- package/x/timeline/parts/compositor/samplers/webcodecs.js +55 -0
- package/x/timeline/parts/compositor/samplers/webcodecs.js.map +1 -0
- package/x/timeline/parts/item.d.ts +34 -8
- package/x/timeline/parts/item.js +6 -3
- package/x/timeline/parts/item.js.map +1 -1
- package/x/timeline/parts/media.d.ts +3 -0
- package/x/timeline/parts/media.js +17 -0
- package/x/timeline/parts/media.js.map +1 -1
- package/x/timeline/parts/waveform.js +1 -1
- package/x/timeline/parts/waveform.js.map +1 -1
- package/x/timeline/sugar/builders.d.ts +96 -0
- package/x/timeline/sugar/builders.js +108 -0
- package/x/timeline/sugar/builders.js.map +1 -0
- package/x/timeline/sugar/o.d.ts +21 -8
- package/x/timeline/sugar/o.js +63 -14
- package/x/timeline/sugar/o.js.map +1 -1
- package/x/timeline/sugar/omni-test.js +1 -1
- package/x/timeline/sugar/omni-test.js.map +1 -1
- package/x/timeline/sugar/omni.d.ts +7 -3
- package/x/timeline/sugar/omni.js +9 -8
- package/x/timeline/sugar/omni.js.map +1 -1
- package/x/timeline/timeline.d.ts +9 -0
- package/x/timeline/timeline.js +22 -0
- package/x/timeline/timeline.js.map +1 -0
- package/x/timeline/types.d.ts +24 -0
- package/x/timeline/types.js +2 -0
- package/x/timeline/types.js.map +1 -0
- package/x/timeline/utils/audio-stream.d.ts +6 -0
- package/x/timeline/utils/audio-stream.js +17 -0
- package/x/timeline/utils/audio-stream.js.map +1 -0
- package/x/timeline/utils/matrix.d.ts +8 -0
- package/x/timeline/utils/matrix.js +26 -0
- package/x/timeline/utils/matrix.js.map +1 -0
- package/x/timeline/utils/video-cursor.d.ts +10 -0
- package/x/timeline/utils/video-cursor.js +36 -0
- package/x/timeline/utils/video-cursor.js.map +1 -0
- package/x/tools/speech-recognition/whisper/parts/worker.bundle.min.js +6 -6
- package/x/tools/speech-recognition/whisper/parts/worker.bundle.min.js.map +4 -4
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
|
-
"sources": ["../../../../../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/stz/s/data/bytes.ts", "../../../../../node_modules/@e280/stz/s/data/hex.ts", "../../../../../node_modules/@e280/stz/s/data/base58.ts", "../../../../../node_modules/@e280/stz/s/data/base-x.ts", "../../../../../node_modules/@e280/stz/s/data/base64.ts", "../../../../../node_modules/@e280/stz/s/data/txt.ts", "../../../../../node_modules/@e280/stz/s/is.ts", "../../../../../node_modules/@e280/stz/s/deadline.ts", "../../../../../node_modules/@e280/stz/s/defer.ts", "../../../../../node_modules/@e280/stz/s/drill.ts", "../../../../../node_modules/@e280/stz/s/ob.ts", "../../../../../node_modules/@e280/stz/s/pubsub.ts", "../../../../../node_modules/@e280/stz/s/trash.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/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", "../../../../../s/tools/speech-recognition/whisper/fns/work.ts", "../../../../../s/tools/common/transformer-pipeline.ts", "../../../../../s/tools/speech-recognition/whisper/parts/worker.bundle.ts"],
|
|
4
|
-
"sourcesContent": ["\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", "\nexport const Bytes = Object.freeze({\n\teq(a: Uint8Array, b: Uint8Array) {\n\t\tif (a.length !== b.length)\n\t\t\treturn false\n\t\tfor (let i = 0; i <= a.length; i++) {\n\t\t\tif (a.at(i) !== b.at(i))\n\t\t\t\treturn false\n\t\t}\n\t\treturn true\n\t},\n\n\trandom(count: number) {\n\t\treturn crypto.getRandomValues(new Uint8Array(count))\n\t},\n})\n\n", "\n/*\n\n256-bit hex ids look like this:\n\n\t8ff8dfbc7c994c5439d2dd327b9898aa6796f97fb396e262985f03f868707e32\n\t6b99284a2c4a1c5f101502bd009f9fb592ca4427e4375155e411ddd07ed9da6b\n\t2eb73fb00a2b9e38c855b5aa353b530d820a3a2dcea5013b7e4e277ddfe9d0ad\n\n*/\n\nimport {Bytes} from \"./bytes.js\"\n\nexport const Hex = Object.freeze({\n\tfromBytes(bytes: Uint8Array) {\n\t\treturn [...bytes]\n\t\t\t.map(byte => byte.toString(16).padStart(2, \"0\"))\n\t\t\t.join(\"\")\n\t},\n\n\ttoBytes(string: string) {\n\t\tif (string.length % 2 !== 0)\n\t\t\tthrow new Error(\"must have even number of hex characters\")\n\t\tconst bytes = new Uint8Array(string.length / 2)\n\t\tfor (let i = 0; i < string.length; i += 2)\n\t\t\tbytes[i / 2] = parseInt(string.slice(i, i + 2), 16)\n\t\treturn bytes\n\t},\n\n\t/** generate a random hex string. byteCount defaults to 32. */\n\trandom(byteCount = 32) {\n\t\treturn this.fromBytes(Bytes.random(byteCount))\n\t},\n\n\t/** @deprecated renamed to `fromBytes` */\n\tstring(bytes: Uint8Array) {\n\t\treturn Hex.fromBytes(bytes)\n\t},\n\n\t/** @deprecated renamed to `toBytes` */\n\tbytes(string: string) {\n\t\treturn Hex.toBytes(string)\n\t},\n})\n\n", "\n/*\n\n256-bit base58 ids look like this:\n\n\t9X1D9rdkDgRdykzmogNcxfopRc7TnbS869ow1E2ehCFS\n\tAmRKyNfq6jhhsd9qda1Y6rAVS2NLUqyTUvfcB2wUiiAC\n\t8skYcqBAXsejDcJzsZMo19PErt43DHP3bykaXBtMvdu\n\n*/\n\nimport {Hex} from \"./hex.js\"\nimport {Bytes} from \"./bytes.js\"\n\nconst base = 58\nconst characters = \"123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz\"\n\nexport const Base58 = Object.freeze({\n\tfromBytes(bytes: Uint8Array) {\n\t\tlet intVal = BigInt(\"0x\" + Hex.fromBytes(bytes))\n\t\tlet encoded = \"\"\n\n\t\twhile (intVal > 0) {\n\t\t\tconst remainder = intVal % BigInt(base)\n\t\t\tintVal = intVal / BigInt(base)\n\t\t\tencoded = characters[Number(remainder)] + encoded\n\t\t}\n\n\t\tfor (const byte of bytes) {\n\t\t\tif (byte === 0) encoded = characters[0] + encoded\n\t\t\telse break\n\t\t}\n\n\t\treturn encoded\n\t},\n\n\ttoBytes(string: string) {\n\t\tlet intVal = BigInt(0)\n\n\t\tfor (const char of string) {\n\t\t\tconst index = characters.indexOf(char)\n\t\t\tif (index === -1) throw new Error(`Invalid character '${char}' in base58 string`)\n\t\t\tintVal = intVal * BigInt(base) + BigInt(index)\n\t\t}\n\n\t\tlet hex = intVal.toString(16)\n\t\tif (hex.length % 2 !== 0) hex = \"0\" + hex\n\t\tconst bytes = Hex.toBytes(hex)\n\n\t\tlet leadingZeroes = 0\n\t\tfor (const char of string) {\n\t\t\tif (char === characters[0]) leadingZeroes++\n\t\t\telse break\n\t\t}\n\n\t\tconst decoded = new Uint8Array(leadingZeroes + bytes.length)\n\t\tdecoded.set(bytes, leadingZeroes)\n\t\treturn decoded\n\t},\n\n\trandom(count = 32) {\n\t\treturn this.fromBytes(Bytes.random(count))\n\t},\n\n\t/** @deprecated renamed to `fromBytes` */\n\tstring(bytes: Uint8Array) {\n\t\treturn Base58.fromBytes(bytes)\n\t},\n\n\t/** @deprecated renamed to `toBytes` */\n\tbytes(string: string) {\n\t\treturn Base58.toBytes(string)\n\t},\n})\n\n", "\nimport {Bytes} from \"./bytes.js\"\n\nexport type Lexicon = {\n\tcharacters: string\n\tnegativePrefix?: string\n\tpadding?: {\n\t\tcharacter: string\n\t\tsize: number\n\t}\n}\n\nexport class BaseX {\n\tstatic lexicons = Object.freeze({\n\t\tbase2: {characters: \"01\"},\n\t\thex: {characters: \"0123456789abcdef\"},\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\t}\n\n\ttoBytes(s: string): Uint8Array {\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\tlet negative = false\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 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: number[] = []\n\t\twhile (num > 0n) {\n\t\t\tout.unshift(Number(num % 256n))\n\t\t\tnum = num / 256n\n\t\t}\n\t\treturn new Uint8Array(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\tlet num = 0n\n\t\tfor (const byte of bytes)\n\t\t\tnum = (num << 8n) + BigInt(byte)\n\n\t\tif (num === 0n) return this.lexicon.characters[0]\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 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\n", "\nimport {Bytes} from \"./bytes.js\"\n\nexport const Base64 = Object.freeze({\n\tfromBytes(bytes: Uint8Array) {\n\t\treturn (typeof btoa === \"function\")\n\t\t\t? btoa(String.fromCharCode(...bytes))\n\t\t\t: Buffer.from(bytes).toString(\"base64\")\n\t},\n\n\ttoBytes(string: string) {\n\t\treturn (typeof atob === \"function\")\n\t\t\t? Uint8Array.from(atob(string), char => char.charCodeAt(0))\n\t\t\t: Uint8Array.from(Buffer.from(string, \"base64\"))\n\t},\n\n\trandom(count = 32) {\n\t\treturn this.fromBytes(Bytes.random(count))\n\t},\n\n\t/** @deprecated rename to \"fromBytes\" */\n\tstring(bytes: Uint8Array) {\n\t\treturn Base64.fromBytes(bytes)\n\t},\n\n\t/** @deprecated rename to \"toBytes\" */\n\tbytes(string: string) {\n\t\treturn Base64.toBytes(string)\n\t},\n})\n\n", "\nexport const Txt = Object.freeze({\n\tfromBytes(bytes: Uint8Array) {\n\t\treturn new TextDecoder().decode(bytes)\n\t},\n\n\ttoBytes(string: string) {\n\t\treturn new TextEncoder().encode(string)\n\t},\n\n\t/** @deprecated renamed to `fromBytes` */\n\tstring(bytes: Uint8Array) {\n\t\treturn Txt.fromBytes(bytes)\n\t},\n\n\t/** @deprecated renamed to `toBytes` */\n\tbytes(string: string) {\n\t\treturn Txt.toBytes(string)\n\t},\n})\n\n", "\nexport const is = Object.freeze({\n\tset: <X>(x: X): x is NonNullable<X> =>\n\t\tx !== undefined && x !== null,\n\n\tunset: (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 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", "\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 {is} from \"./is.js\"\n\n/** return a value within an object tree, found at the given path. */\nexport function drill<xResult>(\n\t\tobject: {[key: string]: any},\n\t\tpath: string[],\n\t): xResult {\n\n\tlet current: any = object\n\n\tfor (const key of path) {\n\t\tcurrent = current[key]\n\t\tif (is.unset(current))\n\t\t\tbreak\n\t}\n\n\treturn current\n}\n\n", "\nexport function ob<Ob extends object>(o: Ob) {\n\treturn {\n\t\tmap: <Value>(transform: ObTransform<Ob, Value>) => (\n\t\t\tobMap(o, transform)\n\t\t),\n\t\tfilter: (predicate: ObPredicate<Ob>) => (\n\t\t\tobFilter(o, predicate)\n\t\t),\n\t}\n}\n\n////////////\n////////////\n\nob.pipe = Object.freeze({\n\tmap: <O extends {}, Value>(\n\t\t\ttransform: (value: O[keyof O], key: keyof O) => Value,\n\t\t) => (\n\t\t(o: O) => obMap(o, transform)\n\t),\n\tfilter: <O extends {}>(\n\t\t\ttransform: (value: O[keyof O], key: keyof O) => boolean,\n\t\t) => (\n\t\t(o: O) => obFilter(o, transform) as {[key: string]: O[keyof O]}\n\t),\n})\n\n////////////\n////////////\n\nexport type ObTransform<Ob extends object, Value> = (\n\t(value: Ob[keyof Ob], key: keyof Ob) => Value\n)\n\nexport type ObPredicate<Ob extends object> = (\n\t(value: Ob[keyof Ob], key: keyof Ob) => boolean\n)\n\n////////////\n////////////\n\nconst obMap = <Ob extends object, Value>(\n\t\to: Ob,\n\t\ttransform: ObTransform<Ob, Value>,\n\t) => {\n\n\treturn Object.fromEntries(\n\t\tObject.entries(o).map(\n\t\t\t([key, value]: any) => [key, transform(value, key)]\n\t\t)\n\t) as {[P in keyof Ob]: Value}\n}\n\nconst obFilter = <Ob extends object>(\n\t\to: Ob,\n\t\tpredicate: ObPredicate<Ob>,\n\t) => {\n\n\treturn Object.fromEntries(\n\t\tObject.entries(o).filter(\n\t\t\t([key, value]: any) => predicate(value, key)\n\t\t)\n\t) as {[P in keyof Ob]?: Ob[keyof Ob]}\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\tpub(...a: A): Promise<void>\n\n\t/** subscribe a listener function. */\n\tsub(fn: Listener<A>): () => void\n\n\t/**\n\t * subscribe a listener function.\n\t * @alias sub\n\t */\n\ton(fn: Listener<A>): () => void\n\n\t/** wait for the next published value */\n\tnext(): 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\nexport function xub<A extends any[] = []>() {\n\tconst set = new Set<Listener<A>>()\n\n\tfunction sub(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\tawait Promise.all([...set].map(fn => fn(...a)))\n\t}\n\n\tasync function next() {\n\t\tconst {promise, resolve} = defer<A>()\n\t\tconst unsubscribe = sub((...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\tsub.pub = pub\n\tsub.sub = sub\n\tsub.on = sub\n\tsub.next = next\n\tsub.clear = clear\n\n\tpub.pub = pub\n\tpub.sub = sub\n\tpub.on = sub\n\tpub.next = next\n\tpub.clear = clear\n\n\treturn [pub, sub] as [Pub<A>, Sub<A>]\n}\n\n/** create a subscriber fn that can be published to */\nexport function sub<A extends any[] = []>(listener?: Listener<A>): Sub<A> {\n\tconst fn = xub<A>()[1]\n\tif (listener)\n\t\tfn.sub(listener)\n\treturn fn\n}\n\n/** create a publisher fn that can be subscribed to */\nexport function pub<A extends any[] = []>(listener?: Listener<A>): Pub<A> {\n\tconst fn = xub<A>()[0]\n\tif (listener)\n\t\tfn.sub(listener)\n\treturn fn\n}\n\n", "\n/** a trashcan where you can collect disposer fns, and dispose them all at once */\nexport class Trash {\n\t#fns: (() => void)[] = []\n\n\t/** add a disposer fn to the trashcan */\n\tadd(...fns: (() => void)[]) {\n\t\tthis.#fns.push(...fns)\n\t\treturn this\n\t}\n\n\t/** add a disposable object to the trashcan, and return the object */\n\tdisposable<X extends {dispose: () => void}>(x: X) {\n\t\treturn this.bag(x, () => x.dispose())\n\t}\n\n\t/** add an item's disposer fn, and return the item */\n\tbag<X>(x: X, fn: (x: X) => void) {\n\t\tthis.add(() => fn(x))\n\t\treturn x\n\t}\n\n\t/** dispose of everything in the trashcan */\n\tdispose() {\n\t\tfor (const fn of this.#fns.reverse())\n\t\t\tfn()\n\t\tthis.#fns = []\n\t}\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 {drill} 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 = drill(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\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\tsendRequest(request, transfer, done.promise)\n\t\t\treturn waiter.wait(request.id, request.method).then(response => {\n\t\t\t\tdone.resolve(response)\n\t\t\t\treturn response\n\t\t\t})\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 {Trash} 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\t#trash = new Trash()\n\n\tconstructor(channel: PostableChannel) {\n\t\tsuper()\n\t\tthis.#trash.add(\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\tdispose() {\n\t\tthis.#trash.dispose()\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\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}\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 {Trash} 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\n\t#waiter: ResponseWaiter\n\t#trash = new Trash()\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.#trash.add(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\tdispose() {\n\t\tthis.#trash.dispose()\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", "\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", "import {Comrade} from \"@e280/comrade\"\n//@ts-ignore\nimport {pipeline, WhisperTextStreamer} from \"https://cdn.jsdelivr.net/npm/@huggingface/transformers@3.7.0/dist/transformers.min.js\"\n\nimport {WhisperSchematic} from \"./schematic.js\"\nimport {TranscriptionChunk} from \"../parts/types.js\"\nimport {PipelineFactory} from \"../../../common/transformer-pipeline.js\"\n\n// TODO suspicious globals, probably bad\nconst pipeline = new PipelineFactory(\"automatic-speech-recognition\")\nlet transcriber: any\n\nexport const setupWhisperWork = Comrade.work<WhisperSchematic>(shell => ({\n\tasync transcribe({audio, model, language, duration}) {\n\t\tconst isDistil = model.startsWith(\"distil-whisper/\")\n\n\t\tif(!pipeline.model || pipeline.model !== model) {\n\t\t\tpipeline.instance?.dispose()?.()\n\t\t\tpipeline.instance = null\n\t\t\ttranscriber = await pipeline.createInstance(\n\t\t\t\tmodel,\n\t\t\t\t(data) => {\n\t\t\t\t\tif(data.progress)\n\t\t\t\t\t\tshell.host.updateModelLoadProgress({\n\t\t\t\t\t\t\tid: data.file,\n\t\t\t\t\t\t\tprogress: data.progress\n\t\t\t\t\t\t})\n\t\t\t\t}\n\t\t\t)\n\t\t}\n\n\t\tconst timePrecision =\n\t\t\ttranscriber.processor.feature_extractor.config.chunk_length /\n\t\t\ttranscriber.model.config.max_source_positions\n\n\t\tconst chunkLength = isDistil ? 20 : 30\n\t\tconst strideLength = isDistil ? 3 : 5\n\n\t\tlet chunkCount = 0\n\t\tlet startTime: number | null = null\n\t\tlet tokenCount = 0\n\t\tlet tps = 0\n\n\t\tconst chunkDuration = chunkLength - strideLength\n\n\t\tconst estimateProgress = () => {\n\t\t\tconst audioProgressSeconds = chunkCount * chunkDuration\n\t\t\treturn Math.min(audioProgressSeconds / duration, 1)\n\t\t}\n\n\t\tconst streamer = new WhisperTextStreamer(transcriber.tokenizer, {\n\t\t\ttime_precision: timePrecision,\n\t\t\ttoken_callback_function: () => {\n\t\t\t\tstartTime ??= performance.now()\n\t\t\t\tif (++tokenCount > 1) {\n\t\t\t\t\ttps = (tokenCount / (performance.now() - startTime)) * 1000\n\t\t\t\t\tshell.host.updateTps(tps)\n\t\t\t\t}\n\t\t\t},\n\t\t\tcallback_function: (textChunk: any) => {\n\t\t\t\tshell.host.deliverTranscriptionChunk(textChunk)\n\t\t\t},\n\t\t\ton_finalize: () => {\n\t\t\t\tstartTime = null\n\t\t\t\ttokenCount = 0\n\t\t\t\tchunkCount++\n\t\t\t\tconst progress = estimateProgress()\n\t\t\t\tshell.host.updateTranscribeProgress(progress)\n\t\t\t},\n\t\t})\n\n\t\tconst output = await transcriber(audio, {\n\t\t\ttop_k: 0,\n\t\t\tdo_sample: false,\n\t\t\tchunk_length_s: chunkLength,\n\t\t\tstride_length_s: strideLength,\n\t\t\tlanguage,\n\t\t\ttask: \"transcribe\",\n\t\t\treturn_timestamps: \"word\", // if using \"word\" the on_chunk_start & end is not called thus we cant retrieve timestamps, only after whole thing finishes\n\t\t\tforce_full_sequences: false,\n\t\t\tstreamer,\n\t\t})\n\n\t\tif (!output) return null\n\n\t\treturn {\n\t\t\ttps,\n\t\t\t...output,\n\t\t}\n\t}\n}))\n", "//@ts-ignore\nimport {pipeline} from \"https://cdn.jsdelivr.net/npm/@huggingface/transformers@3.7.0/dist/transformers.min.js\"\n\nimport {ProgressCallback} from \"../speech-recognition/whisper/parts/types.js\"\n\nexport class PipelineFactory {\n\tinstance: any = null\n\tmodel: string | null = null\n\n\tconstructor(public task: string) {}\n\n\tasync createInstance(model: string, progressCallback?: ProgressCallback) {\n\t\tthis.model = model\n\t\treturn this.instance = await pipeline(this.task, this.model, {\n\t\t\tdtype: {\n\t\t\t\tencoder_model:\n\t\t\t\t\tthis.model === \"onnx-community/whisper-large-v3-turbo\"\n\t\t\t\t\t\t? \"fp16\"\n\t\t\t\t\t\t: \"fp32\",\n\t\t\t\tdecoder_model_merged: \"q4\",\n\t\t\t},\n\t\t\tdevice: \"webgpu\",\n\t\t\tprogress_callback: progressCallback,\n\t\t})\n\t}\n}\n", "import {Comrade} from \"@e280/comrade\"\n\nimport {setupWhisperWork} from \"../fns/work.js\"\nimport {WhisperSchematic} from \"../fns/schematic.js\"\n\nawait Comrade.worker<WhisperSchematic>(setupWhisperWork)\n\n"],
|
|
5
|
-
"mappings": "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",
|
|
6
|
-
"names": ["bindTap", "tap", "ctx", "o", "basicTheme", "colors", "autoTheme", "basicTheme", "codes", "colorFns", "s", "uncolor", "mix", "hex", "rgb", "bgRgb", "fn", "bigint", "g", "b", "c", "r", "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", "Bytes", "a", "b", "i", "count", "Hex", "bytes", "byte", "string", "i", "byteCount", "Bytes", "base", "characters", "Base58", "bytes", "intVal", "Hex", "encoded", "remainder", "byte", "string", "char", "index", "hex", "leadingZeroes", "decoded", "count", "Bytes", "BaseX", "lexicon", "char", "i", "s", "bitsPerChar", "bitBuffer", "bitCount", "output", "val", "num", "base", "negative", "out", "bytes", "byte", "index", "n", "value", "count", "Bytes", "Base64", "bytes", "string", "char", "count", "Bytes", "Txt", "bytes", "string", "is", "x", "DeadlineError", "milliseconds", "deadline", "fn", "resolve", "reject", "id", "defer", "resolve", "reject", "promise", "res", "rej", "entangle", "outside", "drill", "object", "path", "current", "key", "is", "ob", "o", "transform", "obMap", "predicate", "obFilter", "key", "value", "xub", "set", "sub", "fn", "pub", "a", "next", "promise", "resolve", "defer", "unsubscribe", "clear", "pub", "listener", "fn", "xub", "Trash", "#fns", "fns", "x", "fn", "JsonRpc", "getId", "request", "ExposedError", "RemoteError", "execute", "tap", "request", "action", "id", "JsonRpc", "result", "error", "ExposedError", "makeEndpoint", "options", "tap", "ErrorTap", "request", "path", "fn", "drill", "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", "response", "interpretIncoming", "json", "requests", "responses", "item", "handleIncomingRequests", "localEndpoint", "r", "PostableConduit", "Conduit", "#trash", "Trash", "channel", "m", "transfer", "onMessage", "e", "MessengerMeta", "remote", "defaults", "ResponseWaiter", "timeout", "id", "method", "deferred", "defer", "deadline", "error", "DeadlineError", "response", "pend", "RemoteError", "Messenger", "#waiter", "#trash", "Trash", "options", "conduit", "tap", "ResponseWaiter", "defaults", "makeRemoteEndpoint", "makeRemote", "bindTap", "m", "incoming", "meta", "MessengerMeta", "rpc", "requests", "responses", "interpretIncoming", "response", "fns", "endpoint", "makeEndpoint", "outgoing", "handleIncomingRequests", "shells", "meta", "
|
|
3
|
+
"sources": ["../../../../../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/data/bytes.ts", "../../../../../node_modules/@e280/renraku/node_modules/@e280/stz/s/data/hex.ts", "../../../../../node_modules/@e280/renraku/node_modules/@e280/stz/s/data/base58.ts", "../../../../../node_modules/@e280/renraku/node_modules/@e280/stz/s/data/base-x.ts", "../../../../../node_modules/@e280/renraku/node_modules/@e280/stz/s/data/base64.ts", "../../../../../node_modules/@e280/renraku/node_modules/@e280/stz/s/data/txt.ts", "../../../../../node_modules/@e280/renraku/node_modules/@e280/stz/s/is.ts", "../../../../../node_modules/@e280/renraku/node_modules/@e280/stz/s/deadline.ts", "../../../../../node_modules/@e280/renraku/node_modules/@e280/stz/s/defer.ts", "../../../../../node_modules/@e280/renraku/node_modules/@e280/stz/s/drill.ts", "../../../../../node_modules/@e280/renraku/node_modules/@e280/stz/s/ob.ts", "../../../../../node_modules/@e280/renraku/node_modules/@e280/stz/s/pubsub.ts", "../../../../../node_modules/@e280/renraku/node_modules/@e280/stz/s/trash.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/stz/s/data/bytes.ts", "../../../../../node_modules/@e280/stz/s/data/hex.ts", "../../../../../node_modules/@e280/stz/s/data/base58.ts", "../../../../../node_modules/@e280/stz/s/data/base-x.ts", "../../../../../node_modules/@e280/stz/s/data/base64.ts", "../../../../../node_modules/@e280/stz/s/data/txt.ts", "../../../../../node_modules/@e280/stz/s/is.ts", "../../../../../node_modules/@e280/stz/s/defer.ts", "../../../../../node_modules/@e280/stz/s/ob.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", "../../../../../s/tools/speech-recognition/whisper/fns/work.ts", "../../../../../s/tools/common/transformer-pipeline.ts", "../../../../../s/tools/speech-recognition/whisper/parts/worker.bundle.ts"],
|
|
4
|
+
"sourcesContent": ["\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", "\nexport const Bytes = Object.freeze({\n\teq(a: Uint8Array, b: Uint8Array) {\n\t\tif (a.length !== b.length)\n\t\t\treturn false\n\t\tfor (let i = 0; i <= a.length; i++) {\n\t\t\tif (a.at(i) !== b.at(i))\n\t\t\t\treturn false\n\t\t}\n\t\treturn true\n\t},\n\n\trandom(count: number) {\n\t\treturn crypto.getRandomValues(new Uint8Array(count))\n\t},\n})\n\n", "\n/*\n\n256-bit hex ids look like this:\n\n\t8ff8dfbc7c994c5439d2dd327b9898aa6796f97fb396e262985f03f868707e32\n\t6b99284a2c4a1c5f101502bd009f9fb592ca4427e4375155e411ddd07ed9da6b\n\t2eb73fb00a2b9e38c855b5aa353b530d820a3a2dcea5013b7e4e277ddfe9d0ad\n\n*/\n\nimport {Bytes} from \"./bytes.js\"\n\nexport const Hex = Object.freeze({\n\tfromBytes(bytes: Uint8Array) {\n\t\treturn [...bytes]\n\t\t\t.map(byte => byte.toString(16).padStart(2, \"0\"))\n\t\t\t.join(\"\")\n\t},\n\n\ttoBytes(string: string) {\n\t\tif (string.length % 2 !== 0)\n\t\t\tthrow new Error(\"must have even number of hex characters\")\n\t\tconst bytes = new Uint8Array(string.length / 2)\n\t\tfor (let i = 0; i < string.length; i += 2)\n\t\t\tbytes[i / 2] = parseInt(string.slice(i, i + 2), 16)\n\t\treturn bytes\n\t},\n\n\t/** generate a random hex string. byteCount defaults to 32. */\n\trandom(byteCount = 32) {\n\t\treturn this.fromBytes(Bytes.random(byteCount))\n\t},\n\n\t/** @deprecated renamed to `fromBytes` */\n\tstring(bytes: Uint8Array) {\n\t\treturn Hex.fromBytes(bytes)\n\t},\n\n\t/** @deprecated renamed to `toBytes` */\n\tbytes(string: string) {\n\t\treturn Hex.toBytes(string)\n\t},\n})\n\n", "\n/*\n\n256-bit base58 ids look like this:\n\n\t9X1D9rdkDgRdykzmogNcxfopRc7TnbS869ow1E2ehCFS\n\tAmRKyNfq6jhhsd9qda1Y6rAVS2NLUqyTUvfcB2wUiiAC\n\t8skYcqBAXsejDcJzsZMo19PErt43DHP3bykaXBtMvdu\n\n*/\n\nimport {Hex} from \"./hex.js\"\nimport {Bytes} from \"./bytes.js\"\n\nconst base = 58\nconst characters = \"123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz\"\n\nexport const Base58 = Object.freeze({\n\tfromBytes(bytes: Uint8Array) {\n\t\tlet intVal = BigInt(\"0x\" + Hex.fromBytes(bytes))\n\t\tlet encoded = \"\"\n\n\t\twhile (intVal > 0) {\n\t\t\tconst remainder = intVal % BigInt(base)\n\t\t\tintVal = intVal / BigInt(base)\n\t\t\tencoded = characters[Number(remainder)] + encoded\n\t\t}\n\n\t\tfor (const byte of bytes) {\n\t\t\tif (byte === 0) encoded = characters[0] + encoded\n\t\t\telse break\n\t\t}\n\n\t\treturn encoded\n\t},\n\n\ttoBytes(string: string) {\n\t\tlet intVal = BigInt(0)\n\n\t\tfor (const char of string) {\n\t\t\tconst index = characters.indexOf(char)\n\t\t\tif (index === -1) throw new Error(`Invalid character '${char}' in base58 string`)\n\t\t\tintVal = intVal * BigInt(base) + BigInt(index)\n\t\t}\n\n\t\tlet hex = intVal.toString(16)\n\t\tif (hex.length % 2 !== 0) hex = \"0\" + hex\n\t\tconst bytes = Hex.toBytes(hex)\n\n\t\tlet leadingZeroes = 0\n\t\tfor (const char of string) {\n\t\t\tif (char === characters[0]) leadingZeroes++\n\t\t\telse break\n\t\t}\n\n\t\tconst decoded = new Uint8Array(leadingZeroes + bytes.length)\n\t\tdecoded.set(bytes, leadingZeroes)\n\t\treturn decoded\n\t},\n\n\trandom(count = 32) {\n\t\treturn this.fromBytes(Bytes.random(count))\n\t},\n\n\t/** @deprecated renamed to `fromBytes` */\n\tstring(bytes: Uint8Array) {\n\t\treturn Base58.fromBytes(bytes)\n\t},\n\n\t/** @deprecated renamed to `toBytes` */\n\tbytes(string: string) {\n\t\treturn Base58.toBytes(string)\n\t},\n})\n\n", "\nimport {Bytes} from \"./bytes.js\"\n\nexport type Lexicon = {\n\tcharacters: string\n\tnegativePrefix?: string\n\tpadding?: {\n\t\tcharacter: string\n\t\tsize: number\n\t}\n}\n\nexport class BaseX {\n\tstatic lexicons = Object.freeze({\n\t\tbase2: {characters: \"01\"},\n\t\thex: {characters: \"0123456789abcdef\"},\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\t}\n\n\ttoBytes(s: string): Uint8Array {\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\tlet negative = false\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 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: number[] = []\n\t\twhile (num > 0n) {\n\t\t\tout.unshift(Number(num % 256n))\n\t\t\tnum = num / 256n\n\t\t}\n\t\treturn new Uint8Array(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\tlet num = 0n\n\t\tfor (const byte of bytes)\n\t\t\tnum = (num << 8n) + BigInt(byte)\n\n\t\tif (num === 0n) return this.lexicon.characters[0]\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 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\n", "\nimport {Bytes} from \"./bytes.js\"\n\nexport const Base64 = Object.freeze({\n\tfromBytes(bytes: Uint8Array) {\n\t\treturn (typeof btoa === \"function\")\n\t\t\t? btoa(String.fromCharCode(...bytes))\n\t\t\t: Buffer.from(bytes).toString(\"base64\")\n\t},\n\n\ttoBytes(string: string) {\n\t\treturn (typeof atob === \"function\")\n\t\t\t? Uint8Array.from(atob(string), char => char.charCodeAt(0))\n\t\t\t: Uint8Array.from(Buffer.from(string, \"base64\"))\n\t},\n\n\trandom(count = 32) {\n\t\treturn this.fromBytes(Bytes.random(count))\n\t},\n\n\t/** @deprecated rename to \"fromBytes\" */\n\tstring(bytes: Uint8Array) {\n\t\treturn Base64.fromBytes(bytes)\n\t},\n\n\t/** @deprecated rename to \"toBytes\" */\n\tbytes(string: string) {\n\t\treturn Base64.toBytes(string)\n\t},\n})\n\n", "\nexport const Txt = Object.freeze({\n\tfromBytes(bytes: Uint8Array) {\n\t\treturn new TextDecoder().decode(bytes)\n\t},\n\n\ttoBytes(string: string) {\n\t\treturn new TextEncoder().encode(string)\n\t},\n\n\t/** @deprecated renamed to `fromBytes` */\n\tstring(bytes: Uint8Array) {\n\t\treturn Txt.fromBytes(bytes)\n\t},\n\n\t/** @deprecated renamed to `toBytes` */\n\tbytes(string: string) {\n\t\treturn Txt.toBytes(string)\n\t},\n})\n\n", "\nexport const is = Object.freeze({\n\tset: <X>(x: X): x is NonNullable<X> =>\n\t\tx !== undefined && x !== null,\n\n\tunset: (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 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", "\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 {is} from \"./is.js\"\n\n/** return a value within an object tree, found at the given path. */\nexport function drill<xResult>(\n\t\tobject: {[key: string]: any},\n\t\tpath: string[],\n\t): xResult {\n\n\tlet current: any = object\n\n\tfor (const key of path) {\n\t\tcurrent = current[key]\n\t\tif (is.unset(current))\n\t\t\tbreak\n\t}\n\n\treturn current\n}\n\n", "\nexport function ob<Ob extends object>(o: Ob) {\n\treturn {\n\t\tmap: <Value>(transform: ObTransform<Ob, Value>) => (\n\t\t\tobMap(o, transform)\n\t\t),\n\t\tfilter: (predicate: ObPredicate<Ob>) => (\n\t\t\tobFilter(o, predicate)\n\t\t),\n\t}\n}\n\n////////////\n////////////\n\nob.pipe = Object.freeze({\n\tmap: <O extends {}, Value>(\n\t\t\ttransform: (value: O[keyof O], key: keyof O) => Value,\n\t\t) => (\n\t\t(o: O) => obMap(o, transform)\n\t),\n\tfilter: <O extends {}>(\n\t\t\ttransform: (value: O[keyof O], key: keyof O) => boolean,\n\t\t) => (\n\t\t(o: O) => obFilter(o, transform) as {[key: string]: O[keyof O]}\n\t),\n})\n\n////////////\n////////////\n\nexport type ObTransform<Ob extends object, Value> = (\n\t(value: Ob[keyof Ob], key: keyof Ob) => Value\n)\n\nexport type ObPredicate<Ob extends object> = (\n\t(value: Ob[keyof Ob], key: keyof Ob) => boolean\n)\n\n////////////\n////////////\n\nexport const obMap = <Ob extends object, Value>(\n\t\to: Ob,\n\t\ttransform: ObTransform<Ob, Value>,\n\t) => {\n\n\treturn Object.fromEntries(\n\t\tObject.entries(o).map(\n\t\t\t([key, value]: any) => [key, transform(value, key)]\n\t\t)\n\t) as {[P in keyof Ob]: Value}\n}\n\nexport const obFilter = <Ob extends object>(\n\t\to: Ob,\n\t\tpredicate: ObPredicate<Ob>,\n\t) => {\n\n\treturn Object.fromEntries(\n\t\tObject.entries(o).filter(\n\t\t\t([key, value]: any) => predicate(value, key)\n\t\t)\n\t) as {[P in keyof Ob]?: Ob[keyof Ob]}\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\tpub(...a: A): Promise<void>\n\n\t/** subscribe a listener function. */\n\tsub(fn: Listener<A>): () => void\n\n\t/**\n\t * subscribe a listener function.\n\t * @alias sub\n\t */\n\ton(fn: Listener<A>): () => void\n\n\t/** wait for the next published value */\n\tnext(): 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\nexport function xub<A extends any[] = []>() {\n\tconst set = new Set<Listener<A>>()\n\n\tfunction sub(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\tawait Promise.all([...set].map(fn => fn(...a)))\n\t}\n\n\tasync function next() {\n\t\tconst {promise, resolve} = defer<A>()\n\t\tconst unsubscribe = sub((...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\tsub.pub = pub\n\tsub.sub = sub\n\tsub.on = sub\n\tsub.next = next\n\tsub.clear = clear\n\n\tpub.pub = pub\n\tpub.sub = sub\n\tpub.on = sub\n\tpub.next = next\n\tpub.clear = clear\n\n\treturn [pub, sub] as [Pub<A>, Sub<A>]\n}\n\n/** create a subscriber fn that can be published to */\nexport function sub<A extends any[] = []>(listener?: Listener<A>): Sub<A> {\n\tconst fn = xub<A>()[1]\n\tif (listener)\n\t\tfn.sub(listener)\n\treturn fn\n}\n\n/** create a publisher fn that can be subscribed to */\nexport function pub<A extends any[] = []>(listener?: Listener<A>): Pub<A> {\n\tconst fn = xub<A>()[0]\n\tif (listener)\n\t\tfn.sub(listener)\n\treturn fn\n}\n\n", "\n/** a trashcan where you can collect disposer fns, and dispose them all at once */\nexport class Trash {\n\t#fns: (() => void)[] = []\n\n\t/** add a disposer fn to the trashcan */\n\tadd(...fns: (() => void)[]) {\n\t\tthis.#fns.push(...fns)\n\t\treturn this\n\t}\n\n\t/** add a disposable object to the trashcan, and return the object */\n\tdisposable<X extends {dispose: () => void}>(x: X) {\n\t\treturn this.bag(x, () => x.dispose())\n\t}\n\n\t/** add an item's disposer fn, and return the item */\n\tbag<X>(x: X, fn: (x: X) => void) {\n\t\tthis.add(() => fn(x))\n\t\treturn x\n\t}\n\n\t/** dispose of everything in the trashcan */\n\tdispose() {\n\t\tfor (const fn of this.#fns.reverse())\n\t\t\tfn()\n\t\tthis.#fns = []\n\t}\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 {drill} 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 = drill(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\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\tsendRequest(request, transfer, done.promise)\n\t\t\treturn waiter.wait(request.id, request.method).then(response => {\n\t\t\t\tdone.resolve(response)\n\t\t\t\treturn response\n\t\t\t})\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 {Trash} 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\t#trash = new Trash()\n\n\tconstructor(channel: PostableChannel) {\n\t\tsuper()\n\t\tthis.#trash.add(\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\tdispose() {\n\t\tthis.#trash.dispose()\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\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}\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 {Trash} 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\n\t#waiter: ResponseWaiter\n\t#trash = new Trash()\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.#trash.add(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\tdispose() {\n\t\tthis.#trash.dispose()\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", "\nexport const Bytes = Object.freeze({\n\teq(a: Uint8Array, b: Uint8Array) {\n\t\tif (a.length !== b.length)\n\t\t\treturn false\n\t\tfor (let i = 0; i <= a.length; i++) {\n\t\t\tif (a.at(i) !== b.at(i))\n\t\t\t\treturn false\n\t\t}\n\t\treturn true\n\t},\n\n\trandom(count: number) {\n\t\treturn crypto.getRandomValues(new Uint8Array(count))\n\t},\n})\n\n", "\n/*\n\n256-bit hex ids look like this:\n\n\t8ff8dfbc7c994c5439d2dd327b9898aa6796f97fb396e262985f03f868707e32\n\t6b99284a2c4a1c5f101502bd009f9fb592ca4427e4375155e411ddd07ed9da6b\n\t2eb73fb00a2b9e38c855b5aa353b530d820a3a2dcea5013b7e4e277ddfe9d0ad\n\n*/\n\nimport {Bytes} from \"./bytes.js\"\n\nexport const Hex = Object.freeze({\n\tfromBytes(bytes: Uint8Array) {\n\t\treturn [...bytes]\n\t\t\t.map(byte => byte.toString(16).padStart(2, \"0\"))\n\t\t\t.join(\"\")\n\t},\n\n\ttoBytes(string: string) {\n\t\tif (string.length % 2 !== 0)\n\t\t\tthrow new Error(\"must have even number of hex characters\")\n\t\tconst bytes = new Uint8Array(string.length / 2)\n\t\tfor (let i = 0; i < string.length; i += 2)\n\t\t\tbytes[i / 2] = parseInt(string.slice(i, i + 2), 16)\n\t\treturn bytes\n\t},\n\n\t/** generate a random hex string. byteCount defaults to 32. */\n\trandom(byteCount = 32) {\n\t\treturn this.fromBytes(Bytes.random(byteCount))\n\t},\n\n\t/** @deprecated renamed to `fromBytes` */\n\tstring(bytes: Uint8Array) {\n\t\treturn Hex.fromBytes(bytes)\n\t},\n\n\t/** @deprecated renamed to `toBytes` */\n\tbytes(string: string) {\n\t\treturn Hex.toBytes(string)\n\t},\n})\n\n", "\n/*\n\n256-bit base58 ids look like this:\n\n\t9X1D9rdkDgRdykzmogNcxfopRc7TnbS869ow1E2ehCFS\n\tAmRKyNfq6jhhsd9qda1Y6rAVS2NLUqyTUvfcB2wUiiAC\n\t8skYcqBAXsejDcJzsZMo19PErt43DHP3bykaXBtMvdu\n\n*/\n\nimport {Hex} from \"./hex.js\"\nimport {Bytes} from \"./bytes.js\"\n\nconst base = 58\nconst characters = \"123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz\"\n\nexport const Base58 = Object.freeze({\n\tfromBytes(bytes: Uint8Array) {\n\t\tlet intVal = BigInt(\"0x\" + Hex.fromBytes(bytes))\n\t\tlet encoded = \"\"\n\n\t\twhile (intVal > 0) {\n\t\t\tconst remainder = intVal % BigInt(base)\n\t\t\tintVal = intVal / BigInt(base)\n\t\t\tencoded = characters[Number(remainder)] + encoded\n\t\t}\n\n\t\tfor (const byte of bytes) {\n\t\t\tif (byte === 0) encoded = characters[0] + encoded\n\t\t\telse break\n\t\t}\n\n\t\treturn encoded\n\t},\n\n\ttoBytes(string: string) {\n\t\tlet intVal = BigInt(0)\n\n\t\tfor (const char of string) {\n\t\t\tconst index = characters.indexOf(char)\n\t\t\tif (index === -1) throw new Error(`Invalid character '${char}' in base58 string`)\n\t\t\tintVal = intVal * BigInt(base) + BigInt(index)\n\t\t}\n\n\t\tlet hex = intVal.toString(16)\n\t\tif (hex.length % 2 !== 0) hex = \"0\" + hex\n\t\tconst bytes = Hex.toBytes(hex)\n\n\t\tlet leadingZeroes = 0\n\t\tfor (const char of string) {\n\t\t\tif (char === characters[0]) leadingZeroes++\n\t\t\telse break\n\t\t}\n\n\t\tconst decoded = new Uint8Array(leadingZeroes + bytes.length)\n\t\tdecoded.set(bytes, leadingZeroes)\n\t\treturn decoded\n\t},\n\n\trandom(count = 32) {\n\t\treturn this.fromBytes(Bytes.random(count))\n\t},\n\n\t/** @deprecated renamed to `fromBytes` */\n\tstring(bytes: Uint8Array) {\n\t\treturn Base58.fromBytes(bytes)\n\t},\n\n\t/** @deprecated renamed to `toBytes` */\n\tbytes(string: string) {\n\t\treturn Base58.toBytes(string)\n\t},\n})\n\n", "\nimport {Bytes} from \"./bytes.js\"\n\nexport type Lexicon = {\n\tcharacters: string\n\tnegativePrefix?: string\n\tpadding?: {\n\t\tcharacter: string\n\t\tsize: number\n\t}\n}\n\nexport class BaseX {\n\tstatic lexicons = Object.freeze({\n\t\tbase2: {characters: \"01\"},\n\t\thex: {characters: \"0123456789abcdef\"},\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\t}\n\n\ttoBytes(s: string): Uint8Array {\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\tlet negative = false\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 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: number[] = []\n\t\twhile (num > 0n) {\n\t\t\tout.unshift(Number(num % 256n))\n\t\t\tnum = num / 256n\n\t\t}\n\t\treturn new Uint8Array(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\tlet num = 0n\n\t\tfor (const byte of bytes)\n\t\t\tnum = (num << 8n) + BigInt(byte)\n\n\t\tif (num === 0n) return this.lexicon.characters[0]\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 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\n", "\nimport {Bytes} from \"./bytes.js\"\n\nexport const Base64 = Object.freeze({\n\tfromBytes(bytes: Uint8Array) {\n\t\treturn (typeof btoa === \"function\")\n\t\t\t? btoa(String.fromCharCode(...bytes))\n\t\t\t: Buffer.from(bytes).toString(\"base64\")\n\t},\n\n\ttoBytes(string: string) {\n\t\treturn (typeof atob === \"function\")\n\t\t\t? Uint8Array.from(atob(string), char => char.charCodeAt(0))\n\t\t\t: Uint8Array.from(Buffer.from(string, \"base64\"))\n\t},\n\n\trandom(count = 32) {\n\t\treturn this.fromBytes(Bytes.random(count))\n\t},\n\n\t/** @deprecated rename to \"fromBytes\" */\n\tstring(bytes: Uint8Array) {\n\t\treturn Base64.fromBytes(bytes)\n\t},\n\n\t/** @deprecated rename to \"toBytes\" */\n\tbytes(string: string) {\n\t\treturn Base64.toBytes(string)\n\t},\n})\n\n", "\nexport const Txt = Object.freeze({\n\tfromBytes(bytes: Uint8Array) {\n\t\treturn new TextDecoder().decode(bytes)\n\t},\n\n\ttoBytes(string: string) {\n\t\treturn new TextEncoder().encode(string)\n\t},\n\n\t/** @deprecated renamed to `fromBytes` */\n\tstring(bytes: Uint8Array) {\n\t\treturn Txt.fromBytes(bytes)\n\t},\n\n\t/** @deprecated renamed to `toBytes` */\n\tbytes(string: string) {\n\t\treturn Txt.toBytes(string)\n\t},\n})\n\n", "\nexport const is = Object.freeze({\n\tset: <X>(x: X): x is NonNullable<X> =>\n\t\tx !== undefined && x !== null,\n\n\tunset: (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", "\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 function ob<Ob extends object>(o: Ob) {\n\treturn {\n\t\tmap: <Value>(transform: ObTransform<Ob, Value>) => (\n\t\t\tobMap(o, transform)\n\t\t),\n\t\tfilter: (predicate: ObPredicate<Ob>) => (\n\t\t\tobFilter(o, predicate)\n\t\t),\n\t}\n}\n\n////////////\n////////////\n\nob.pipe = Object.freeze({\n\tmap: <O extends {}, Value>(\n\t\t\ttransform: (value: O[keyof O], key: keyof O) => Value,\n\t\t) => (\n\t\t(o: O) => obMap(o, transform)\n\t),\n\tfilter: <O extends {}>(\n\t\t\ttransform: (value: O[keyof O], key: keyof O) => boolean,\n\t\t) => (\n\t\t(o: O) => obFilter(o, transform) as {[key: string]: O[keyof O]}\n\t),\n})\n\n////////////\n////////////\n\nexport type ObTransform<Ob extends object, Value> = (\n\t(value: Ob[keyof Ob], key: keyof Ob) => Value\n)\n\nexport type ObPredicate<Ob extends object> = (\n\t(value: Ob[keyof Ob], key: keyof Ob) => boolean\n)\n\n////////////\n////////////\n\nconst obMap = <Ob extends object, Value>(\n\t\to: Ob,\n\t\ttransform: ObTransform<Ob, Value>,\n\t) => {\n\n\treturn Object.fromEntries(\n\t\tObject.entries(o).map(\n\t\t\t([key, value]: any) => [key, transform(value, key)]\n\t\t)\n\t) as {[P in keyof Ob]: Value}\n}\n\nconst obFilter = <Ob extends object>(\n\t\to: Ob,\n\t\tpredicate: ObPredicate<Ob>,\n\t) => {\n\n\treturn Object.fromEntries(\n\t\tObject.entries(o).filter(\n\t\t\t([key, value]: any) => predicate(value, key)\n\t\t)\n\t) as {[P in keyof Ob]?: Ob[keyof Ob]}\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", "import {Comrade} from \"@e280/comrade\"\n//@ts-ignore\nimport {pipeline, WhisperTextStreamer} from \"https://cdn.jsdelivr.net/npm/@huggingface/transformers@3.7.0/dist/transformers.min.js\"\n\nimport {WhisperSchematic} from \"./schematic.js\"\nimport {TranscriptionChunk} from \"../parts/types.js\"\nimport {PipelineFactory} from \"../../../common/transformer-pipeline.js\"\n\n// TODO suspicious globals, probably bad\nconst pipeline = new PipelineFactory(\"automatic-speech-recognition\")\nlet transcriber: any\n\nexport const setupWhisperWork = Comrade.work<WhisperSchematic>(shell => ({\n\tasync transcribe({audio, model, language, duration}) {\n\t\tconst isDistil = model.startsWith(\"distil-whisper/\")\n\n\t\tif(!pipeline.model || pipeline.model !== model) {\n\t\t\tpipeline.instance?.dispose()?.()\n\t\t\tpipeline.instance = null\n\t\t\ttranscriber = await pipeline.createInstance(\n\t\t\t\tmodel,\n\t\t\t\t(data) => {\n\t\t\t\t\tif(data.progress)\n\t\t\t\t\t\tshell.host.updateModelLoadProgress({\n\t\t\t\t\t\t\tid: data.file,\n\t\t\t\t\t\t\tprogress: data.progress\n\t\t\t\t\t\t})\n\t\t\t\t}\n\t\t\t)\n\t\t}\n\n\t\tconst timePrecision =\n\t\t\ttranscriber.processor.feature_extractor.config.chunk_length /\n\t\t\ttranscriber.model.config.max_source_positions\n\n\t\tconst chunkLength = isDistil ? 20 : 30\n\t\tconst strideLength = isDistil ? 3 : 5\n\n\t\tlet chunkCount = 0\n\t\tlet startTime: number | null = null\n\t\tlet tokenCount = 0\n\t\tlet tps = 0\n\n\t\tconst chunkDuration = chunkLength - strideLength\n\n\t\tconst estimateProgress = () => {\n\t\t\tconst audioProgressSeconds = chunkCount * chunkDuration\n\t\t\treturn Math.min(audioProgressSeconds / duration, 1)\n\t\t}\n\n\t\tconst streamer = new WhisperTextStreamer(transcriber.tokenizer, {\n\t\t\ttime_precision: timePrecision,\n\t\t\ttoken_callback_function: () => {\n\t\t\t\tstartTime ??= performance.now()\n\t\t\t\tif (++tokenCount > 1) {\n\t\t\t\t\ttps = (tokenCount / (performance.now() - startTime)) * 1000\n\t\t\t\t\tshell.host.updateTps(tps)\n\t\t\t\t}\n\t\t\t},\n\t\t\tcallback_function: (textChunk: any) => {\n\t\t\t\tshell.host.deliverTranscriptionChunk(textChunk)\n\t\t\t},\n\t\t\ton_finalize: () => {\n\t\t\t\tstartTime = null\n\t\t\t\ttokenCount = 0\n\t\t\t\tchunkCount++\n\t\t\t\tconst progress = estimateProgress()\n\t\t\t\tshell.host.updateTranscribeProgress(progress)\n\t\t\t},\n\t\t})\n\n\t\tconst output = await transcriber(audio, {\n\t\t\ttop_k: 0,\n\t\t\tdo_sample: false,\n\t\t\tchunk_length_s: chunkLength,\n\t\t\tstride_length_s: strideLength,\n\t\t\tlanguage,\n\t\t\ttask: \"transcribe\",\n\t\t\treturn_timestamps: \"word\", // if using \"word\" the on_chunk_start & end is not called thus we cant retrieve timestamps, only after whole thing finishes\n\t\t\tforce_full_sequences: false,\n\t\t\tstreamer,\n\t\t})\n\n\t\tif (!output) return null\n\n\t\treturn {\n\t\t\ttps,\n\t\t\t...output,\n\t\t}\n\t}\n}))\n", "//@ts-ignore\nimport {pipeline} from \"https://cdn.jsdelivr.net/npm/@huggingface/transformers@3.7.0/dist/transformers.min.js\"\n\nimport {ProgressCallback} from \"../speech-recognition/whisper/parts/types.js\"\n\nexport class PipelineFactory {\n\tinstance: any = null\n\tmodel: string | null = null\n\n\tconstructor(public task: string) {}\n\n\tasync createInstance(model: string, progressCallback?: ProgressCallback) {\n\t\tthis.model = model\n\t\treturn this.instance = await pipeline(this.task, this.model, {\n\t\t\tdtype: {\n\t\t\t\tencoder_model:\n\t\t\t\t\tthis.model === \"onnx-community/whisper-large-v3-turbo\"\n\t\t\t\t\t\t? \"fp16\"\n\t\t\t\t\t\t: \"fp32\",\n\t\t\t\tdecoder_model_merged: \"q4\",\n\t\t\t},\n\t\t\tdevice: \"webgpu\",\n\t\t\tprogress_callback: progressCallback,\n\t\t})\n\t}\n}\n", "import {Comrade} from \"@e280/comrade\"\n\nimport {setupWhisperWork} from \"../fns/work.js\"\nimport {WhisperSchematic} from \"../fns/schematic.js\"\n\nawait Comrade.worker<WhisperSchematic>(setupWhisperWork)\n\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
|
+
"names": ["bindTap", "tap", "ctx", "o", "basicTheme", "colors", "autoTheme", "basicTheme", "codes", "colorFns", "s", "uncolor", "mix", "hex", "rgb", "bgRgb", "fn", "bigint", "g", "b", "c", "r", "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", "Bytes", "a", "b", "i", "count", "Hex", "bytes", "byte", "string", "i", "byteCount", "Bytes", "base", "characters", "Base58", "bytes", "intVal", "Hex", "encoded", "remainder", "byte", "string", "char", "index", "hex", "leadingZeroes", "decoded", "count", "Bytes", "BaseX", "lexicon", "char", "i", "s", "bitsPerChar", "bitBuffer", "bitCount", "output", "val", "num", "base", "negative", "out", "bytes", "byte", "index", "n", "value", "count", "Bytes", "Base64", "bytes", "string", "char", "count", "Bytes", "Txt", "bytes", "string", "is", "x", "DeadlineError", "milliseconds", "deadline", "fn", "resolve", "reject", "id", "defer", "resolve", "reject", "promise", "res", "rej", "entangle", "outside", "drill", "object", "path", "current", "key", "is", "ob", "o", "transform", "obMap", "predicate", "obFilter", "key", "value", "xub", "set", "sub", "fn", "pub", "a", "next", "promise", "resolve", "defer", "unsubscribe", "clear", "pub", "listener", "fn", "xub", "Trash", "#fns", "fns", "x", "fn", "JsonRpc", "getId", "request", "ExposedError", "RemoteError", "execute", "tap", "request", "action", "id", "JsonRpc", "result", "error", "ExposedError", "makeEndpoint", "options", "tap", "ErrorTap", "request", "path", "fn", "drill", "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", "response", "interpretIncoming", "json", "requests", "responses", "item", "handleIncomingRequests", "localEndpoint", "r", "PostableConduit", "Conduit", "#trash", "Trash", "channel", "m", "transfer", "onMessage", "e", "MessengerMeta", "remote", "defaults", "ResponseWaiter", "timeout", "id", "method", "deferred", "defer", "deadline", "error", "DeadlineError", "response", "pend", "RemoteError", "Messenger", "#waiter", "#trash", "Trash", "options", "conduit", "tap", "ResponseWaiter", "defaults", "makeRemoteEndpoint", "makeRemote", "bindTap", "m", "incoming", "meta", "MessengerMeta", "rpc", "requests", "responses", "interpretIncoming", "response", "fns", "endpoint", "makeEndpoint", "outgoing", "handleIncomingRequests", "shells", "meta", "defaultTap", "ErrorTap", "worker", "compat", "setupWork", "options", "tap", "defaultTap", "messenger", "Messenger", "PostableConduit", "m", "shells", "Bytes", "a", "b", "i", "count", "Hex", "bytes", "byte", "string", "i", "byteCount", "Bytes", "base", "characters", "Base58", "bytes", "intVal", "Hex", "encoded", "remainder", "byte", "string", "char", "index", "hex", "leadingZeroes", "decoded", "count", "Bytes", "BaseX", "lexicon", "char", "i", "s", "bitsPerChar", "bitBuffer", "bitCount", "output", "val", "num", "base", "negative", "out", "bytes", "byte", "index", "n", "value", "count", "Bytes", "Base64", "bytes", "string", "char", "count", "Bytes", "Txt", "bytes", "string", "is", "x", "defer", "resolve", "reject", "promise", "res", "rej", "entangle", "outside", "ob", "o", "transform", "obMap", "predicate", "obFilter", "key", "value", "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", "t", "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", "WhisperTextStreamer", "pipeline", "PipelineFactory", "task", "model", "progressCallback", "pipeline", "PipelineFactory", "transcriber", "setupWhisperWork", "Comrade", "shell", "audio", "model", "language", "duration", "isDistil", "data", "timePrecision", "chunkLength", "strideLength", "chunkCount", "startTime", "tokenCount", "tps", "chunkDuration", "estimateProgress", "audioProgressSeconds", "streamer", "WhisperTextStreamer", "textChunk", "progress", "output", "Comrade", "setupWhisperWork"]
|
|
7
7
|
}
|