hyperbrane 0.1.2 → 0.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +67 -25
- package/dist/agent/agentClient.d.ts +5 -0
- package/dist/agent/agentClient.js +4 -0
- package/dist/agent/agentService.d.ts +9 -37
- package/dist/agent/agentService.js +62 -322
- package/dist/agent/agentStorage.d.ts +1 -20
- package/dist/agent/agentStorage.js +0 -30
- package/dist/agent/api.d.ts +80 -151
- package/dist/agent/api.js +1 -8
- package/dist/agent/client.d.ts +3 -1
- package/dist/agent/client.js +2 -3
- package/dist/agent/control.d.ts +23 -0
- package/dist/agent/control.js +479 -0
- package/dist/agent/hostTranscript.d.ts +0 -6
- package/dist/agent/hostTranscript.js +3 -14
- package/dist/agent/session/backend.d.ts +17 -32
- package/dist/agent/session/claude/home.d.ts +0 -1
- package/dist/agent/session/claude/home.js +0 -1
- package/dist/agent/session/claude/provision.d.ts +10 -0
- package/dist/agent/session/claude/provision.js +17 -0
- package/dist/agent/session/claude/transcript.d.ts +2 -7
- package/dist/agent/session/claude/transcript.js +68 -14
- package/dist/agent/session/client.d.ts +1 -10
- package/dist/agent/session/client.js +0 -3
- package/dist/agent/session/codex/provision.d.ts +14 -0
- package/dist/agent/session/codex/provision.js +25 -0
- package/dist/agent/session/fileTranscript.d.ts +6 -49
- package/dist/agent/session/fileTranscript.js +26 -82
- package/dist/agent/session/install.d.ts +5 -0
- package/dist/agent/session/install.js +35 -0
- package/dist/agent/session/sessionStorage.d.ts +4 -35
- package/dist/agent/session/sessionStorage.js +10 -16
- package/dist/agent/session/sharedConnection.d.ts +0 -8
- package/dist/agent/session/sharedConnection.js +0 -7
- package/dist/agent/session/storedTranscripts.d.ts +1 -6
- package/dist/agent/session/storedTranscripts.js +0 -3
- package/dist/agent/session/worker/jsonRpc.d.ts +2 -13
- package/dist/agent/session/worker/jsonRpc.js +2 -11
- package/dist/agent/session/worker/protocol.d.ts +26 -20
- package/dist/agent/session/worker/protocol.js +29 -18
- package/dist/agent/session/worker/workerParams.d.ts +0 -5
- package/dist/agent/session/worker/workerParams.js +14 -14
- package/dist/agent/session/workerConnection.d.ts +2 -13
- package/dist/agent/session/workerConnection.js +7 -12
- package/dist/agent/session/workerGatewayConnection.d.ts +18 -0
- package/dist/agent/session/workerGatewayConnection.js +86 -0
- package/dist/agent/vendor-types/manifest.json +87 -0
- package/dist/agent/workerBundle.d.ts +4 -19
- package/dist/agent/workerBundle.generated.js +1 -1
- package/dist/agent/workerBundle.js +3 -30
- package/dist/agent/workerReplacement.d.ts +3 -0
- package/dist/agent/workerReplacement.js +49 -0
- package/dist/cli/agent.js +31 -16
- package/dist/cli/command.d.ts +10 -11
- package/dist/cli/command.js +0 -4
- package/dist/cli/dimension.js +6 -6
- package/dist/cli/gateway.js +3 -6
- package/dist/cli/main.js +14 -31
- package/dist/cli/streamPrinter.d.ts +2 -10
- package/dist/cli/streamPrinter.js +16 -46
- package/dist/cli/table.d.ts +0 -3
- package/dist/cli/table.js +0 -4
- package/dist/dimension/api.d.ts +39 -27
- package/dist/dimension/api.js +28 -47
- package/dist/dimension/client.d.ts +5 -0
- package/dist/dimension/client.js +4 -0
- package/dist/dimension/control.d.ts +21 -0
- package/dist/dimension/control.js +328 -0
- package/dist/dimension/image.d.ts +0 -5
- package/dist/dimension/image.js +0 -8
- package/dist/dimension/imageFiles.generated.js +1 -1
- package/dist/dimension/paths.d.ts +5 -4
- package/dist/dimension/paths.js +15 -6
- package/dist/dimension/service.d.ts +8 -24
- package/dist/dimension/service.js +60 -228
- package/dist/dimension/transport-worker.d.ts +1 -0
- package/dist/dimension/transport-worker.js +151 -0
- package/dist/dimension/transportBundle.d.ts +2 -0
- package/dist/dimension/transportBundle.generated.d.ts +1 -0
- package/dist/dimension/transportBundle.generated.js +2 -0
- package/dist/dimension/transportBundle.js +4 -0
- package/dist/dimension/transportClient.d.ts +10 -0
- package/dist/dimension/transportClient.js +115 -0
- package/dist/dimension/transportProtocol.d.ts +53 -0
- package/dist/dimension/transportProtocol.js +8 -0
- package/dist/index.d.ts +5 -9
- package/dist/index.js +5 -19
- package/dist/lib/control.d.ts +8 -0
- package/dist/lib/control.js +62 -0
- package/dist/lib/docker.d.ts +0 -22
- package/dist/lib/docker.js +0 -10
- package/dist/lib/image.d.ts +0 -3
- package/dist/lib/image.js +0 -2
- package/dist/lib/jsonDirectory.d.ts +0 -13
- package/dist/lib/jsonDirectory.js +10 -15
- package/dist/lib/scriptBundle.d.ts +6 -0
- package/dist/lib/scriptBundle.js +28 -0
- package/dist/lib/sh.d.ts +2 -0
- package/dist/lib/sh.js +8 -0
- package/dist/lib/sleep.d.ts +0 -1
- package/dist/lib/sleep.js +0 -1
- package/dist/lib/streamFetch.d.ts +15 -0
- package/dist/lib/streamFetch.js +150 -0
- package/dist/lib/tar.d.ts +0 -1
- package/dist/lib/tar.js +5 -11
- package/dist/portal-gateway/api.d.ts +13 -44
- package/dist/portal-gateway/api.js +1 -3
- package/dist/portal-gateway/control.d.ts +42 -0
- package/dist/portal-gateway/control.js +657 -0
- package/dist/portal-gateway/gatewayClient.d.ts +5 -0
- package/dist/portal-gateway/gatewayClient.js +4 -0
- package/dist/portal-gateway/gatewayService.d.ts +8 -38
- package/dist/portal-gateway/gatewayService.js +68 -254
- package/dist/portal-gateway/image.d.ts +0 -1
- package/dist/portal-gateway/image.js +0 -2
- package/dist/portal-gateway/imageFiles.generated.js +2 -2
- package/dist/portal-gateway/portalClient.d.ts +5 -0
- package/dist/portal-gateway/portalClient.js +4 -0
- package/dist/portal-gateway/portalService.d.ts +5 -47
- package/dist/portal-gateway/portalService.js +19 -349
- package/dist/portal-gateway/transport-worker.d.ts +1 -0
- package/dist/portal-gateway/transport-worker.js +205 -0
- package/dist/portal-gateway/transportBundle.d.ts +2 -0
- package/dist/portal-gateway/transportBundle.generated.d.ts +1 -0
- package/dist/portal-gateway/transportBundle.generated.js +2 -0
- package/dist/portal-gateway/transportBundle.js +4 -0
- package/dist/portal-gateway/upstream.d.ts +0 -81
- package/dist/portal-gateway/upstream.js +0 -1
- package/dist/sandbox/api.d.ts +121 -187
- package/dist/sandbox/api.js +5 -7
- package/dist/sandbox/client.d.ts +2 -0
- package/dist/sandbox/client.js +4 -0
- package/dist/sandbox/data-endpoints/dataEndpoints.d.ts +13 -0
- package/dist/sandbox/data-endpoints/dataEndpoints.js +100 -0
- package/dist/sandbox/data-endpoints/firewalledPorts.d.ts +4 -0
- package/dist/sandbox/data-endpoints/firewalledPorts.js +28 -0
- package/dist/sandbox/lib/httpOverStream.d.ts +3 -0
- package/dist/sandbox/lib/httpOverStream.js +21 -0
- package/dist/sandbox/lib/remoteFileOperations.d.ts +10 -0
- package/dist/sandbox/lib/remoteFileOperations.js +70 -0
- package/dist/sandbox/lib/shellCommand.d.ts +3 -0
- package/dist/sandbox/lib/shellCommand.js +7 -0
- package/dist/sandbox/providers/boat/boatService.d.ts +2 -0
- package/dist/sandbox/providers/boat/boatService.js +321 -0
- package/dist/sandbox/providers/exedev/exeDevService.d.ts +2 -0
- package/dist/sandbox/providers/exedev/exeDevService.js +127 -0
- package/dist/sandbox/providers/exedev/exeDevToken.d.ts +1 -0
- package/dist/sandbox/providers/exedev/exeDevToken.js +54 -0
- package/dist/sandbox/providers/local/localService.d.ts +2 -0
- package/dist/sandbox/providers/local/localService.js +219 -0
- package/dist/sandbox/providers/ssh/sshService.d.ts +2 -0
- package/dist/sandbox/providers/ssh/sshService.js +82 -0
- package/dist/sandbox/providers/ssh/sshTransport.d.ts +12 -0
- package/dist/sandbox/providers/ssh/sshTransport.js +216 -0
- package/dist/sandbox/service.d.ts +2 -0
- package/dist/sandbox/service.js +18 -0
- package/dist/sandbox/storage/descriptors.d.ts +6 -0
- package/dist/sandbox/storage/descriptors.js +25 -0
- package/dist/sandbox/storage/sandboxStorage.d.ts +11 -0
- package/dist/sandbox/storage/sandboxStorage.js +42 -0
- package/dist/upstreams/anthropic.d.ts +0 -5
- package/dist/upstreams/anthropic.js +1 -8
- package/dist/upstreams/index.d.ts +2 -6
- package/dist/upstreams/index.js +0 -4
- package/dist/upstreams/openai.d.ts +0 -5
- package/dist/upstreams/openai.js +1 -13
- package/package.json +12 -4
- package/dist/agent/gatewaySignIns.d.ts +0 -5
- package/dist/agent/gatewaySignIns.js +0 -11
- package/dist/agent/session/codex/home.d.ts +0 -2
- package/dist/agent/session/codex/home.js +0 -4
- package/dist/agent/session/codex/messages.d.ts +0 -30
- package/dist/agent/session/codex/messages.js +0 -135
- package/dist/agent/session/codex/transcript.d.ts +0 -12
- package/dist/agent/session/codex/transcript.js +0 -22
- package/dist/agent/session/sdkMessages.d.ts +0 -15
- package/dist/agent/session/sdkMessages.js +0 -28
- package/dist/agent/session/workerSseConnection.d.ts +0 -31
- package/dist/agent/session/workerSseConnection.js +0 -76
- package/dist/agent/vendor-types/codex/app-server/AbsolutePathBuf.d.ts +0 -10
- package/dist/agent/vendor-types/codex/app-server/AbsolutePathBuf.js +0 -2
- package/dist/agent/vendor-types/codex/app-server/FunctionCallOutputBody.d.ts +0 -2
- package/dist/agent/vendor-types/codex/app-server/FunctionCallOutputBody.js +0 -2
- package/dist/agent/vendor-types/codex/app-server/FunctionCallOutputContentItem.d.ts +0 -22
- package/dist/agent/vendor-types/codex/app-server/FunctionCallOutputContentItem.js +0 -2
- package/dist/agent/vendor-types/codex/app-server/ImageDetail.d.ts +0 -1
- package/dist/agent/vendor-types/codex/app-server/ImageDetail.js +0 -2
- package/dist/agent/vendor-types/codex/app-server/ImageGenerationFailure.d.ts +0 -5
- package/dist/agent/vendor-types/codex/app-server/ImageGenerationFailure.js +0 -2
- package/dist/agent/vendor-types/codex/app-server/ImageGenerationItem.d.ts +0 -11
- package/dist/agent/vendor-types/codex/app-server/ImageGenerationItem.js +0 -2
- package/dist/agent/vendor-types/codex/app-server/LegacyAppPathString.d.ts +0 -23
- package/dist/agent/vendor-types/codex/app-server/LegacyAppPathString.js +0 -2
- package/dist/agent/vendor-types/codex/app-server/MessagePhase.d.ts +0 -7
- package/dist/agent/vendor-types/codex/app-server/MessagePhase.js +0 -2
- package/dist/agent/vendor-types/codex/app-server/ReasoningEffort.d.ts +0 -4
- package/dist/agent/vendor-types/codex/app-server/ReasoningEffort.js +0 -2
- package/dist/agent/vendor-types/codex/app-server/SleepItem.d.ts +0 -7
- package/dist/agent/vendor-types/codex/app-server/SleepItem.js +0 -2
- package/dist/agent/vendor-types/codex/app-server/WebSearchItem.d.ts +0 -14
- package/dist/agent/vendor-types/codex/app-server/WebSearchItem.js +0 -2
- package/dist/agent/vendor-types/codex/app-server/serde_json/JsonValue.d.ts +0 -3
- package/dist/agent/vendor-types/codex/app-server/serde_json/JsonValue.js +0 -2
- package/dist/agent/vendor-types/codex/app-server/v2/AgentMessageDelivery.d.ts +0 -1
- package/dist/agent/vendor-types/codex/app-server/v2/AgentMessageDelivery.js +0 -2
- package/dist/agent/vendor-types/codex/app-server/v2/AsyncUserInputQuestion.d.ts +0 -4
- package/dist/agent/vendor-types/codex/app-server/v2/AsyncUserInputQuestion.js +0 -2
- package/dist/agent/vendor-types/codex/app-server/v2/ByteRange.d.ts +0 -4
- package/dist/agent/vendor-types/codex/app-server/v2/ByteRange.js +0 -2
- package/dist/agent/vendor-types/codex/app-server/v2/CollabAgentState.d.ts +0 -5
- package/dist/agent/vendor-types/codex/app-server/v2/CollabAgentState.js +0 -2
- package/dist/agent/vendor-types/codex/app-server/v2/CollabAgentStatus.d.ts +0 -1
- package/dist/agent/vendor-types/codex/app-server/v2/CollabAgentStatus.js +0 -2
- package/dist/agent/vendor-types/codex/app-server/v2/CollabAgentTool.d.ts +0 -1
- package/dist/agent/vendor-types/codex/app-server/v2/CollabAgentTool.js +0 -2
- package/dist/agent/vendor-types/codex/app-server/v2/CollabAgentToolCallStatus.d.ts +0 -1
- package/dist/agent/vendor-types/codex/app-server/v2/CollabAgentToolCallStatus.js +0 -2
- package/dist/agent/vendor-types/codex/app-server/v2/CommandAction.d.ts +0 -19
- package/dist/agent/vendor-types/codex/app-server/v2/CommandAction.js +0 -2
- package/dist/agent/vendor-types/codex/app-server/v2/CommandExecutionSource.d.ts +0 -1
- package/dist/agent/vendor-types/codex/app-server/v2/CommandExecutionSource.js +0 -2
- package/dist/agent/vendor-types/codex/app-server/v2/CommandExecutionStatus.d.ts +0 -1
- package/dist/agent/vendor-types/codex/app-server/v2/CommandExecutionStatus.js +0 -2
- package/dist/agent/vendor-types/codex/app-server/v2/DynamicToolCallOutputContentItem.d.ts +0 -10
- package/dist/agent/vendor-types/codex/app-server/v2/DynamicToolCallOutputContentItem.js +0 -2
- package/dist/agent/vendor-types/codex/app-server/v2/DynamicToolCallStatus.d.ts +0 -1
- package/dist/agent/vendor-types/codex/app-server/v2/DynamicToolCallStatus.js +0 -2
- package/dist/agent/vendor-types/codex/app-server/v2/FileUpdateChange.d.ts +0 -6
- package/dist/agent/vendor-types/codex/app-server/v2/FileUpdateChange.js +0 -2
- package/dist/agent/vendor-types/codex/app-server/v2/HookPromptFragment.d.ts +0 -4
- package/dist/agent/vendor-types/codex/app-server/v2/HookPromptFragment.js +0 -2
- package/dist/agent/vendor-types/codex/app-server/v2/McpAppDisplayMode.d.ts +0 -1
- package/dist/agent/vendor-types/codex/app-server/v2/McpAppDisplayMode.js +0 -2
- package/dist/agent/vendor-types/codex/app-server/v2/McpAppUi.d.ts +0 -8
- package/dist/agent/vendor-types/codex/app-server/v2/McpAppUi.js +0 -2
- package/dist/agent/vendor-types/codex/app-server/v2/McpToolCallAppContext.d.ts +0 -7
- package/dist/agent/vendor-types/codex/app-server/v2/McpToolCallAppContext.js +0 -2
- package/dist/agent/vendor-types/codex/app-server/v2/McpToolCallError.d.ts +0 -3
- package/dist/agent/vendor-types/codex/app-server/v2/McpToolCallError.js +0 -2
- package/dist/agent/vendor-types/codex/app-server/v2/McpToolCallResult.d.ts +0 -6
- package/dist/agent/vendor-types/codex/app-server/v2/McpToolCallResult.js +0 -2
- package/dist/agent/vendor-types/codex/app-server/v2/McpToolCallStatus.d.ts +0 -1
- package/dist/agent/vendor-types/codex/app-server/v2/McpToolCallStatus.js +0 -2
- package/dist/agent/vendor-types/codex/app-server/v2/MemoryCitation.d.ts +0 -5
- package/dist/agent/vendor-types/codex/app-server/v2/MemoryCitation.js +0 -2
- package/dist/agent/vendor-types/codex/app-server/v2/MemoryCitationEntry.d.ts +0 -6
- package/dist/agent/vendor-types/codex/app-server/v2/MemoryCitationEntry.js +0 -2
- package/dist/agent/vendor-types/codex/app-server/v2/PatchApplyStatus.d.ts +0 -1
- package/dist/agent/vendor-types/codex/app-server/v2/PatchApplyStatus.js +0 -2
- package/dist/agent/vendor-types/codex/app-server/v2/PatchChangeKind.d.ts +0 -8
- package/dist/agent/vendor-types/codex/app-server/v2/PatchChangeKind.js +0 -2
- package/dist/agent/vendor-types/codex/app-server/v2/SubAgentActivityKind.d.ts +0 -1
- package/dist/agent/vendor-types/codex/app-server/v2/SubAgentActivityKind.js +0 -2
- package/dist/agent/vendor-types/codex/app-server/v2/TextElement.d.ts +0 -11
- package/dist/agent/vendor-types/codex/app-server/v2/TextElement.js +0 -2
- package/dist/agent/vendor-types/codex/app-server/v2/ThreadItem.d.ts +0 -215
- package/dist/agent/vendor-types/codex/app-server/v2/ThreadItem.js +0 -2
- package/dist/agent/vendor-types/codex/app-server/v2/UserInput.d.ts +0 -35
- package/dist/agent/vendor-types/codex/app-server/v2/UserInput.js +0 -2
- package/dist/agent/vendor-types/codex/app-server/v2/WebSearchAction.d.ts +0 -14
- package/dist/agent/vendor-types/codex/app-server/v2/WebSearchAction.js +0 -2
- package/dist/cli/services.d.ts +0 -19
- package/dist/cli/services.js +0 -34
- package/dist/dimension/http.d.ts +0 -7
- package/dist/dimension/http.js +0 -77
- package/dist/dimension/storage.d.ts +0 -39
- package/dist/dimension/storage.js +0 -79
- package/dist/portal-gateway/fakes.d.ts +0 -3
- package/dist/portal-gateway/fakes.js +0 -11
- package/dist/portal-gateway/gatewayStorage.d.ts +0 -66
- package/dist/portal-gateway/gatewayStorage.js +0 -125
- package/dist/portal-gateway/portalStorage.d.ts +0 -34
- package/dist/portal-gateway/portalStorage.js +0 -44
- package/dist/sandbox/boatService.d.ts +0 -52
- package/dist/sandbox/boatService.js +0 -343
- package/dist/sandbox/containerService.d.ts +0 -15
- package/dist/sandbox/containerService.js +0 -184
- package/dist/sandbox/endpointProxy.d.ts +0 -90
- package/dist/sandbox/endpointProxy.js +0 -716
- package/dist/sandbox/exeDevAuth.d.ts +0 -16
- package/dist/sandbox/exeDevAuth.js +0 -49
- package/dist/sandbox/localService.d.ts +0 -19
- package/dist/sandbox/localService.js +0 -200
- package/dist/sandbox/sseConnection.d.ts +0 -41
- package/dist/sandbox/sseConnection.js +0 -166
- package/dist/sandbox/sshService.d.ts +0 -30
- package/dist/sandbox/sshService.js +0 -680
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
// Generated by scripts/bundle-worker.ts — do not edit; run `bun run bundle:worker`.
|
|
2
|
+
export const DIMENSION_TRANSPORT_SOURCE = "// @bun\nvar __commonJS = (cb, mod) => () => (mod || cb((mod = { exports: {} }).exports, mod), mod.exports);\nvar __require = import.meta.require;\n\n// ../node_modules/.bun/detect-libc@2.1.2/node_modules/detect-libc/lib/process.js\nvar require_process = __commonJS(function(exports, module) {\n var isLinux = () => process.platform === \"linux\";\n var report = null;\n var getReport = () => {\n if (!report) {\n if (isLinux() && process.report) {\n const orig = process.report.excludeNetwork;\n process.report.excludeNetwork = true;\n report = process.report.getReport();\n process.report.excludeNetwork = orig;\n } else {\n report = {};\n }\n }\n return report;\n };\n module.exports = { isLinux, getReport };\n});\n\n// ../node_modules/.bun/detect-libc@2.1.2/node_modules/detect-libc/lib/filesystem.js\nvar require_filesystem = __commonJS(function(exports, module) {\n var fs = __require(\"fs\");\n var LDD_PATH = \"/usr/bin/ldd\";\n var SELF_PATH = \"/proc/self/exe\";\n var MAX_LENGTH = 2048;\n var readFileSync = (path) => {\n const fd = fs.openSync(path, \"r\");\n const buffer = Buffer.alloc(MAX_LENGTH);\n const bytesRead = fs.readSync(fd, buffer, 0, MAX_LENGTH, 0);\n fs.close(fd, () => {});\n return buffer.subarray(0, bytesRead);\n };\n var readFile = (path) => new Promise((resolve, reject) => {\n fs.open(path, \"r\", (err, fd) => {\n if (err) {\n reject(err);\n } else {\n const buffer = Buffer.alloc(MAX_LENGTH);\n fs.read(fd, buffer, 0, MAX_LENGTH, 0, (_, bytesRead) => {\n resolve(buffer.subarray(0, bytesRead));\n fs.close(fd, () => {});\n });\n }\n });\n });\n module.exports = {\n LDD_PATH,\n SELF_PATH,\n readFileSync,\n readFile\n };\n});\n\n// ../node_modules/.bun/detect-libc@2.1.2/node_modules/detect-libc/lib/elf.js\nvar require_elf = __commonJS(function(exports, module) {\n var interpreterPath = (elf) => {\n if (elf.length < 64) {\n return null;\n }\n if (elf.readUInt32BE(0) !== 2135247942) {\n return null;\n }\n if (elf.readUInt8(4) !== 2) {\n return null;\n }\n if (elf.readUInt8(5) !== 1) {\n return null;\n }\n const offset = elf.readUInt32LE(32);\n const size = elf.readUInt16LE(54);\n const count = elf.readUInt16LE(56);\n for (let i = 0;i < count; i++) {\n const headerOffset = offset + i * size;\n const type = elf.readUInt32LE(headerOffset);\n if (type === 3) {\n const fileOffset = elf.readUInt32LE(headerOffset + 8);\n const fileSize = elf.readUInt32LE(headerOffset + 32);\n return elf.subarray(fileOffset, fileOffset + fileSize).toString().replace(/\\0.*$/g, \"\");\n }\n }\n return null;\n };\n module.exports = {\n interpreterPath\n };\n});\n\n// ../node_modules/.bun/detect-libc@2.1.2/node_modules/detect-libc/lib/detect-libc.js\nvar require_detect_libc = __commonJS(function(exports, module) {\n var childProcess = __require(\"child_process\");\n var { isLinux, getReport } = require_process();\n var { LDD_PATH, SELF_PATH, readFile, readFileSync } = require_filesystem();\n var { interpreterPath } = require_elf();\n var cachedFamilyInterpreter;\n var cachedFamilyFilesystem;\n var cachedVersionFilesystem;\n var command = \"getconf GNU_LIBC_VERSION 2>&1 || true; ldd --version 2>&1 || true\";\n var commandOut = \"\";\n var safeCommand = () => {\n if (!commandOut) {\n return new Promise((resolve) => {\n childProcess.exec(command, (err, out) => {\n commandOut = err ? \" \" : out;\n resolve(commandOut);\n });\n });\n }\n return commandOut;\n };\n var safeCommandSync = () => {\n if (!commandOut) {\n try {\n commandOut = childProcess.execSync(command, { encoding: \"utf8\" });\n } catch (_err) {\n commandOut = \" \";\n }\n }\n return commandOut;\n };\n var GLIBC = \"glibc\";\n var RE_GLIBC_VERSION = /LIBC[a-z0-9 \\-).]*?(\\d+\\.\\d+)/i;\n var MUSL = \"musl\";\n var isFileMusl = (f) => f.includes(\"libc.musl-\") || f.includes(\"ld-musl-\");\n var familyFromReport = () => {\n const report = getReport();\n if (report.header && report.header.glibcVersionRuntime) {\n return GLIBC;\n }\n if (Array.isArray(report.sharedObjects)) {\n if (report.sharedObjects.some(isFileMusl)) {\n return MUSL;\n }\n }\n return null;\n };\n var familyFromCommand = (out) => {\n const [getconf, ldd1] = out.split(/[\\r\\n]+/);\n if (getconf && getconf.includes(GLIBC)) {\n return GLIBC;\n }\n if (ldd1 && ldd1.includes(MUSL)) {\n return MUSL;\n }\n return null;\n };\n var familyFromInterpreterPath = (path) => {\n if (path) {\n if (path.includes(\"/ld-musl-\")) {\n return MUSL;\n } else if (path.includes(\"/ld-linux-\")) {\n return GLIBC;\n }\n }\n return null;\n };\n var getFamilyFromLddContent = (content) => {\n content = content.toString();\n if (content.includes(\"musl\")) {\n return MUSL;\n }\n if (content.includes(\"GNU C Library\")) {\n return GLIBC;\n }\n return null;\n };\n var familyFromFilesystem = async () => {\n if (cachedFamilyFilesystem !== undefined) {\n return cachedFamilyFilesystem;\n }\n cachedFamilyFilesystem = null;\n try {\n const lddContent = await readFile(LDD_PATH);\n cachedFamilyFilesystem = getFamilyFromLddContent(lddContent);\n } catch (e) {}\n return cachedFamilyFilesystem;\n };\n var familyFromFilesystemSync = () => {\n if (cachedFamilyFilesystem !== undefined) {\n return cachedFamilyFilesystem;\n }\n cachedFamilyFilesystem = null;\n try {\n const lddContent = readFileSync(LDD_PATH);\n cachedFamilyFilesystem = getFamilyFromLddContent(lddContent);\n } catch (e) {}\n return cachedFamilyFilesystem;\n };\n var familyFromInterpreter = async () => {\n if (cachedFamilyInterpreter !== undefined) {\n return cachedFamilyInterpreter;\n }\n cachedFamilyInterpreter = null;\n try {\n const selfContent = await readFile(SELF_PATH);\n const path = interpreterPath(selfContent);\n cachedFamilyInterpreter = familyFromInterpreterPath(path);\n } catch (e) {}\n return cachedFamilyInterpreter;\n };\n var familyFromInterpreterSync = () => {\n if (cachedFamilyInterpreter !== undefined) {\n return cachedFamilyInterpreter;\n }\n cachedFamilyInterpreter = null;\n try {\n const selfContent = readFileSync(SELF_PATH);\n const path = interpreterPath(selfContent);\n cachedFamilyInterpreter = familyFromInterpreterPath(path);\n } catch (e) {}\n return cachedFamilyInterpreter;\n };\n var family = async () => {\n let family = null;\n if (isLinux()) {\n family = await familyFromInterpreter();\n if (!family) {\n family = await familyFromFilesystem();\n if (!family) {\n family = familyFromReport();\n }\n if (!family) {\n const out = await safeCommand();\n family = familyFromCommand(out);\n }\n }\n }\n return family;\n };\n var familySync = () => {\n let family = null;\n if (isLinux()) {\n family = familyFromInterpreterSync();\n if (!family) {\n family = familyFromFilesystemSync();\n if (!family) {\n family = familyFromReport();\n }\n if (!family) {\n const out = safeCommandSync();\n family = familyFromCommand(out);\n }\n }\n }\n return family;\n };\n var isNonGlibcLinux = async () => isLinux() && await family() !== GLIBC;\n var isNonGlibcLinuxSync = () => isLinux() && familySync() !== GLIBC;\n var versionFromFilesystem = async () => {\n if (cachedVersionFilesystem !== undefined) {\n return cachedVersionFilesystem;\n }\n cachedVersionFilesystem = null;\n try {\n const lddContent = await readFile(LDD_PATH);\n const versionMatch = lddContent.match(RE_GLIBC_VERSION);\n if (versionMatch) {\n cachedVersionFilesystem = versionMatch[1];\n }\n } catch (e) {}\n return cachedVersionFilesystem;\n };\n var versionFromFilesystemSync = () => {\n if (cachedVersionFilesystem !== undefined) {\n return cachedVersionFilesystem;\n }\n cachedVersionFilesystem = null;\n try {\n const lddContent = readFileSync(LDD_PATH);\n const versionMatch = lddContent.match(RE_GLIBC_VERSION);\n if (versionMatch) {\n cachedVersionFilesystem = versionMatch[1];\n }\n } catch (e) {}\n return cachedVersionFilesystem;\n };\n var versionFromReport = () => {\n const report = getReport();\n if (report.header && report.header.glibcVersionRuntime) {\n return report.header.glibcVersionRuntime;\n }\n return null;\n };\n var versionSuffix = (s) => s.trim().split(/\\s+/)[1];\n var versionFromCommand = (out) => {\n const [getconf, ldd1, ldd2] = out.split(/[\\r\\n]+/);\n if (getconf && getconf.includes(GLIBC)) {\n return versionSuffix(getconf);\n }\n if (ldd1 && ldd2 && ldd1.includes(MUSL)) {\n return versionSuffix(ldd2);\n }\n return null;\n };\n var version = async () => {\n let version = null;\n if (isLinux()) {\n version = await versionFromFilesystem();\n if (!version) {\n version = versionFromReport();\n }\n if (!version) {\n const out = await safeCommand();\n version = versionFromCommand(out);\n }\n }\n return version;\n };\n var versionSync = () => {\n let version = null;\n if (isLinux()) {\n version = versionFromFilesystemSync();\n if (!version) {\n version = versionFromReport();\n }\n if (!version) {\n const out = safeCommandSync();\n version = versionFromCommand(out);\n }\n }\n return version;\n };\n module.exports = {\n GLIBC,\n MUSL,\n family,\n familySync,\n isNonGlibcLinux,\n isNonGlibcLinuxSync,\n version,\n versionSync\n };\n});\n\n// ../node_modules/.bun/node-gyp-build-optional-packages@5.2.2/node_modules/node-gyp-build-optional-packages/node-gyp-build.js\nvar require_node_gyp_build = __commonJS(function(exports, module) {\n var fs = __require(\"fs\");\n var path = __require(\"path\");\n var url = __require(\"url\");\n var os = __require(\"os\");\n var runtimeRequire = typeof __webpack_require__ === \"function\" ? __non_webpack_require__ : __require;\n var vars = process.config && process.config.variables || {};\n var prebuildsOnly = !!process.env.PREBUILDS_ONLY;\n var versions = process.versions;\n var abi = versions.modules;\n if (versions.deno || process.isBun) {\n abi = \"unsupported\";\n }\n var runtime = isElectron() ? \"electron\" : isNwjs() ? \"node-webkit\" : \"node\";\n var arch = process.env.npm_config_arch || os.arch();\n var platform = process.env.npm_config_platform || os.platform();\n var libc = process.env.LIBC || (isMusl(platform) ? \"musl\" : \"glibc\");\n var armv = process.env.ARM_VERSION || (arch === \"arm64\" ? \"8\" : vars.arm_version) || \"\";\n var uv = (versions.uv || \"\").split(\".\")[0];\n module.exports = load;\n function load(dir) {\n return runtimeRequire(load.resolve(dir));\n }\n load.resolve = load.path = function(dir) {\n dir = path.resolve(dir || \".\");\n var packageName = \"\";\n var packageNameError;\n try {\n packageName = runtimeRequire(path.join(dir, \"package.json\")).name;\n var varName = packageName.toUpperCase().replace(/-/g, \"_\");\n if (process.env[varName + \"_PREBUILD\"])\n dir = process.env[varName + \"_PREBUILD\"];\n } catch (err) {\n packageNameError = err;\n }\n if (!prebuildsOnly) {\n var release = getFirst(path.join(dir, \"build/Release\"), matchBuild);\n if (release)\n return release;\n var debug = getFirst(path.join(dir, \"build/Debug\"), matchBuild);\n if (debug)\n return debug;\n }\n var prebuild = resolve(dir);\n if (prebuild)\n return prebuild;\n var nearby = resolve(path.dirname(process.execPath));\n if (nearby)\n return nearby;\n var platformPackage = (packageName[0] == \"@\" ? \"\" : \"@\" + packageName + \"/\") + packageName + \"-\" + platform + \"-\" + arch;\n var packageResolutionError;\n try {\n var prebuildPackage = path.dirname(__require(\"module\").createRequire(url.pathToFileURL(path.join(dir, \"package.json\"))).resolve(platformPackage));\n return resolveFile(prebuildPackage);\n } catch (error) {\n packageResolutionError = error;\n }\n var target = [\n \"platform=\" + platform,\n \"arch=\" + arch,\n \"runtime=\" + runtime,\n \"abi=\" + abi,\n \"uv=\" + uv,\n armv ? \"armv=\" + armv : \"\",\n \"libc=\" + libc,\n \"node=\" + process.versions.node,\n process.versions.electron ? \"electron=\" + process.versions.electron : \"\",\n typeof __webpack_require__ === \"function\" ? \"webpack=true\" : \"\"\n ].filter(Boolean).join(\" \");\n let errMessage = \"No native build was found for \" + target + `\n attempted loading from: ` + dir + \" and package:\" + \" \" + platformPackage + `\n`;\n if (packageNameError) {\n errMessage += \"Error finding package.json: \" + packageNameError.message + `\n`;\n }\n if (packageResolutionError) {\n errMessage += \"Error resolving package: \" + packageResolutionError.message + `\n`;\n }\n throw new Error(errMessage);\n function resolve(dir) {\n var tuples = readdirSync(path.join(dir, \"prebuilds\")).map(parseTuple);\n var tuple = tuples.filter(matchTuple(platform, arch)).sort(compareTuples)[0];\n if (!tuple)\n return;\n return resolveFile(path.join(dir, \"prebuilds\", tuple.name));\n }\n function resolveFile(prebuilds) {\n var parsed = readdirSync(prebuilds).map(parseTags);\n var candidates = parsed.filter(matchTags(runtime, abi));\n var winner = candidates.sort(compareTags(runtime))[0];\n if (winner)\n return path.join(prebuilds, winner.file);\n }\n };\n function readdirSync(dir) {\n try {\n return fs.readdirSync(dir);\n } catch (err) {\n return [];\n }\n }\n function getFirst(dir, filter) {\n var files = readdirSync(dir).filter(filter);\n return files[0] && path.join(dir, files[0]);\n }\n function matchBuild(name) {\n return /\\.node$/.test(name);\n }\n function parseTuple(name) {\n var arr = name.split(\"-\");\n if (arr.length !== 2)\n return;\n var platform = arr[0];\n var architectures = arr[1].split(\"+\");\n if (!platform)\n return;\n if (!architectures.length)\n return;\n if (!architectures.every(Boolean))\n return;\n return { name, platform, architectures };\n }\n function matchTuple(platform, arch) {\n return function(tuple) {\n if (tuple == null)\n return false;\n if (tuple.platform !== platform)\n return false;\n return tuple.architectures.includes(arch);\n };\n }\n function compareTuples(a, b) {\n return a.architectures.length - b.architectures.length;\n }\n function parseTags(file) {\n var arr = file.split(\".\");\n var extension = arr.pop();\n var tags = { file, specificity: 0 };\n if (extension !== \"node\")\n return;\n for (var i = 0;i < arr.length; i++) {\n var tag = arr[i];\n if (tag === \"node\" || tag === \"electron\" || tag === \"node-webkit\") {\n tags.runtime = tag;\n } else if (tag === \"napi\") {\n tags.napi = true;\n } else if (tag.slice(0, 3) === \"abi\") {\n tags.abi = tag.slice(3);\n } else if (tag.slice(0, 2) === \"uv\") {\n tags.uv = tag.slice(2);\n } else if (tag.slice(0, 4) === \"armv\") {\n tags.armv = tag.slice(4);\n } else if (tag === \"glibc\" || tag === \"musl\") {\n tags.libc = tag;\n } else {\n continue;\n }\n tags.specificity++;\n }\n return tags;\n }\n function matchTags(runtime, abi) {\n return function(tags) {\n if (tags == null)\n return false;\n if (tags.runtime !== runtime && !runtimeAgnostic(tags))\n return false;\n if (tags.abi !== abi && !tags.napi)\n return false;\n if (tags.uv && tags.uv !== uv)\n return false;\n if (tags.armv && tags.armv !== armv)\n return false;\n if (tags.libc && tags.libc !== libc)\n return false;\n return true;\n };\n }\n function runtimeAgnostic(tags) {\n return tags.runtime === \"node\" && tags.napi;\n }\n function compareTags(runtime) {\n return function(a, b) {\n if (a.runtime !== b.runtime) {\n return a.runtime === runtime ? -1 : 1;\n } else if (a.abi !== b.abi) {\n return a.abi ? -1 : 1;\n } else if (a.specificity !== b.specificity) {\n return a.specificity > b.specificity ? -1 : 1;\n } else {\n return 0;\n }\n };\n }\n function isNwjs() {\n return !!(process.versions && process.versions.nw);\n }\n function isElectron() {\n if (process.versions && process.versions.electron)\n return true;\n if (process.env.ELECTRON_RUN_AS_NODE)\n return true;\n return typeof window !== \"undefined\" && window.process && window.process.type === \"renderer\";\n }\n function isMusl(platform) {\n if (platform !== \"linux\")\n return false;\n const { familySync, MUSL } = require_detect_libc();\n return familySync() === MUSL;\n }\n load.parseTags = parseTags;\n load.matchTags = matchTags;\n load.compareTags = compareTags;\n load.parseTuple = parseTuple;\n load.matchTuple = matchTuple;\n load.compareTuples = compareTuples;\n});\n\n// ../node_modules/.bun/node-gyp-build-optional-packages@5.2.2/node_modules/node-gyp-build-optional-packages/index.js\nvar require_node_gyp_build_optional_packages = __commonJS(function(exports, module) {\n var runtimeRequire = typeof __webpack_require__ === \"function\" ? __non_webpack_require__ : __require;\n if (typeof runtimeRequire.addon === \"function\") {\n module.exports = runtimeRequire.addon.bind(runtimeRequire);\n } else {\n module.exports = require_node_gyp_build();\n }\n});\n\n// ../node_modules/.bun/msgpackr-extract@3.0.4/node_modules/msgpackr-extract/index.js\nvar require_msgpackr_extract = __commonJS(function(exports, module) {\n var __dirname = \"/home/exedev/boxfs/pavs/node_modules/.bun/msgpackr-extract@3.0.4/node_modules/msgpackr-extract\";\n module.exports = require_node_gyp_build_optional_packages()(__dirname);\n});\n\n// dimension/transport-worker.ts\nimport { constants } from \"fs\";\nimport { chown, mkdir, open, realpath, rename, rm, stat, writeFile } from \"fs/promises\";\nimport { createServer } from \"net\";\nimport { basename, dirname, join, resolve } from \"path\";\n\n// ../node_modules/.bun/msgpackr@2.1.2/node_modules/msgpackr/unpack.js\nvar decoder;\ntry {\n decoder = new TextDecoder;\n} catch (error) {}\nvar src;\nvar srcEnd;\nvar position = 0;\nvar EMPTY_ARRAY = [];\nvar EXTRACTION_FAILED = [];\nvar strings = EMPTY_ARRAY;\nvar stringPosition = 0;\nvar currentUnpackr = {};\nvar currentStructures;\nvar srcString;\nvar srcStringStart = 0;\nvar srcStringEnd = 0;\nvar bundledStrings;\nvar referenceMap;\nvar currentExtensions = [];\nvar dataView;\nvar arrayAllocationBudget;\nvar defaultOptions = {\n useRecords: false,\n mapsAsObjects: true\n};\n\nclass C1Type {\n}\nvar C1 = new C1Type;\nC1.name = \"MessagePack 0xC1\";\nvar sequentialMode = false;\nvar inlineObjectReadThreshold = 2;\nclass Unpackr {\n constructor(options) {\n if (options) {\n if (options.useRecords === false && options.mapsAsObjects === undefined)\n options.mapsAsObjects = true;\n if (options.sequential && options.trusted !== false) {\n options.trusted = true;\n if (!options.structures && options.useRecords != false) {\n options.structures = [];\n if (!options.maxSharedStructures)\n options.maxSharedStructures = 0;\n }\n }\n if (options.structures)\n options.structures.sharedLength = options.structures.length;\n else if (options.getStructures) {\n (options.structures = []).uninitialized = true;\n options.structures.sharedLength = 0;\n }\n if (options.int64AsNumber) {\n options.int64AsType = \"number\";\n }\n }\n Object.assign(this, options);\n }\n unpack(source, options) {\n if (src) {\n return saveState(() => {\n clearSource();\n try {\n return this ? this.unpack(source, options) : Unpackr.prototype.unpack.call(defaultOptions, source, options);\n } catch (error) {\n if (error && typeof error == \"object\")\n nestedUnpackErrors.add(error);\n throw error;\n }\n });\n }\n if (!source.buffer && source.constructor === ArrayBuffer)\n source = typeof Buffer !== \"undefined\" ? Buffer.from(source) : new Uint8Array(source);\n if (typeof options === \"object\") {\n srcEnd = options.end || source.length;\n position = options.start || 0;\n } else {\n position = 0;\n srcEnd = options > -1 ? options : source.length;\n }\n stringPosition = 0;\n srcStringEnd = 0;\n srcString = null;\n strings = EMPTY_ARRAY;\n bundledStrings = null;\n src = source;\n try {\n dataView = source.dataView || (source.dataView = new DataView(source.buffer, source.byteOffset, source.byteLength));\n } catch (error) {\n src = null;\n if (source instanceof Uint8Array)\n throw error;\n throw new Error(\"Source must be a Uint8Array or Buffer but was a \" + (source && typeof source == \"object\" ? source.constructor.name : typeof source));\n }\n if (this instanceof Unpackr) {\n currentUnpackr = this;\n if (this.structures) {\n currentStructures = this.structures;\n return checkedRead(options);\n } else if (!currentStructures || currentStructures.length > 0) {\n currentStructures = [];\n }\n } else {\n currentUnpackr = defaultOptions;\n if (!currentStructures || currentStructures.length > 0)\n currentStructures = [];\n }\n return checkedRead(options);\n }\n unpackMultiple(source, forEach) {\n let values, lastPosition = 0;\n try {\n sequentialMode = true;\n let size = source.length;\n let value = this ? this.unpack(source, size) : defaultUnpackr.unpack(source, size);\n if (forEach) {\n if (forEach(value, lastPosition, position) === false)\n return;\n while (position < size) {\n lastPosition = position;\n if (forEach(checkedRead(), lastPosition, position) === false) {\n return;\n }\n }\n } else {\n values = [value];\n while (position < size) {\n lastPosition = position;\n values.push(checkedRead());\n }\n return values;\n }\n } catch (error) {\n error.lastPosition = lastPosition;\n error.values = values;\n throw error;\n } finally {\n sequentialMode = false;\n clearSource();\n }\n }\n _mergeStructures(loadedStructures, existingStructures) {\n if (this._onLoadedStructures)\n loadedStructures = this._onLoadedStructures(loadedStructures);\n loadedStructures = loadedStructures || [];\n if (Object.isFrozen(loadedStructures))\n loadedStructures = loadedStructures.map((structure) => structure.slice(0));\n for (let i = 0, l = loadedStructures.length;i < l; i++) {\n let structure = loadedStructures[i];\n if (structure) {\n structure.isShared = true;\n if (i >= 32)\n structure.highByte = i - 32 >> 5;\n }\n }\n loadedStructures.sharedLength = loadedStructures.length;\n for (let id in existingStructures || []) {\n if (id >= 0) {\n let structure = loadedStructures[id];\n let existing = existingStructures[id];\n if (existing) {\n if (structure)\n (loadedStructures.restoreStructures || (loadedStructures.restoreStructures = []))[id] = structure;\n loadedStructures[id] = existing;\n }\n }\n }\n return this.structures = loadedStructures;\n }\n decode(source, options) {\n return this.unpack(source, options);\n }\n}\nvar nestedUnpackErrors = new WeakSet;\nfunction checkedRead(options) {\n try {\n if (!currentUnpackr.trusted && !sequentialMode) {\n let sharedLength = currentStructures.sharedLength || 0;\n if (sharedLength < currentStructures.length)\n currentStructures.length = sharedLength;\n }\n let result;\n arrayAllocationBudget = srcEnd - position;\n if (currentUnpackr._readStruct && src[position] < 64 && src[position] >= 32) {\n result = currentUnpackr._readStruct(src, position, srcEnd);\n src = null;\n if (!(options && options.lazy) && result)\n result = result.toJSON();\n position = srcEnd;\n } else\n result = read();\n if (bundledStrings) {\n position = bundledStrings.postBundlePosition;\n bundledStrings = null;\n }\n if (sequentialMode)\n currentStructures.restoreStructures = null;\n if (position == srcEnd) {\n if (currentStructures && currentStructures.restoreStructures)\n restoreStructures();\n currentStructures = null;\n src = null;\n if (referenceMap)\n referenceMap = null;\n } else if (position > srcEnd) {\n throw new Error(\"Unexpected end of MessagePack data\");\n } else if (!sequentialMode) {\n let jsonView;\n try {\n jsonView = JSON.stringify(result, (_, value) => typeof value === \"bigint\" ? `${value}n` : value).slice(0, 100);\n } catch (error) {\n jsonView = \"(JSON view not available \" + error + \")\";\n }\n throw new Error(\"Data read, but end of buffer not reached \" + jsonView);\n }\n return result;\n } catch (error) {\n if (currentStructures && currentStructures.restoreStructures)\n restoreStructures();\n clearSource();\n classifyIncomplete(error);\n throw error;\n }\n}\nfunction classifyIncomplete(error) {\n if (!error || typeof error != \"object\")\n return;\n if (position > srcEnd) {\n error.incomplete = true;\n } else if (nestedUnpackErrors.has(error)) {\n if (error.incomplete)\n error.incomplete = false;\n } else if (error instanceof RangeError && position + 8 > srcEnd || typeof error.message == \"string\" && error.message.startsWith(\"Unexpected end of buffer\")) {\n error.incomplete = true;\n }\n}\nfunction restoreStructures() {\n for (let id in currentStructures.restoreStructures) {\n currentStructures[id] = currentStructures.restoreStructures[id];\n }\n currentStructures.restoreStructures = null;\n}\nfunction read() {\n let token = src[position++];\n if (token < 160) {\n if (token < 128) {\n if (token < 64)\n return token;\n else {\n let structure = currentStructures[token & 63] || currentUnpackr.getStructures && loadStructures()[token & 63];\n if (structure) {\n if (!structure.read) {\n structure.read = createStructureReader(structure, token & 63);\n }\n return structure.read();\n } else\n return token;\n }\n } else if (token < 144) {\n token -= 128;\n if (currentUnpackr.mapsAsObjects) {\n let object = {};\n for (let i = 0;i < token; i++) {\n let key = readKey();\n if (key === \"__proto__\")\n key = \"__proto_\";\n object[key] = read();\n }\n return object;\n } else {\n let map = new Map;\n for (let i = 0;i < token; i++) {\n map.set(read(), read());\n }\n return map;\n }\n } else {\n token -= 144;\n let array = new Array(token);\n for (let i = 0;i < token; i++) {\n array[i] = read();\n }\n if (currentUnpackr.freezeData)\n return Object.freeze(array);\n return array;\n }\n } else if (token < 192) {\n let length = token - 160;\n if (srcStringEnd >= position) {\n return srcString.slice(position - srcStringStart, (position += length) - srcStringStart);\n }\n if (srcStringEnd == 0 && srcEnd < 140) {\n let string = length < 16 ? shortStringInJS(length) : longStringInJS(length);\n if (string != null)\n return string;\n }\n return readFixedString(length);\n } else {\n let value;\n switch (token) {\n case 192:\n return null;\n case 193:\n if (bundledStrings) {\n value = read();\n if (value > 0)\n return bundledStrings[1].slice(bundledStrings.position1, bundledStrings.position1 += value);\n else\n return bundledStrings[0].slice(bundledStrings.position0, bundledStrings.position0 -= value);\n }\n return C1;\n case 194:\n return false;\n case 195:\n return true;\n case 196:\n value = src[position++];\n if (value === undefined)\n throw new Error(\"Unexpected end of buffer\");\n return readBin(value);\n case 197:\n value = dataView.getUint16(position);\n position += 2;\n if (value > srcEnd - position)\n throw endOfMessagePackError(position + value);\n return readBin(value);\n case 198:\n value = dataView.getUint32(position);\n position += 4;\n if (value > srcEnd - position)\n throw endOfMessagePackError(position + value);\n return readBin(value);\n case 199:\n return readExt(src[position++]);\n case 200:\n value = dataView.getUint16(position);\n position += 2;\n return readExt(value);\n case 201:\n value = dataView.getUint32(position);\n position += 4;\n return readExt(value);\n case 202:\n value = dataView.getFloat32(position);\n if (currentUnpackr.useFloat32 > 2) {\n let multiplier = mult10[(src[position] & 127) << 1 | src[position + 1] >> 7];\n position += 4;\n return (multiplier * value + (value > 0 ? 0.5 : -0.5) >> 0) / multiplier;\n }\n position += 4;\n return value;\n case 203:\n value = dataView.getFloat64(position);\n position += 8;\n return value;\n case 204:\n return src[position++];\n case 205:\n value = dataView.getUint16(position);\n position += 2;\n return value;\n case 206:\n value = dataView.getUint32(position);\n position += 4;\n return value;\n case 207:\n if (currentUnpackr.int64AsType === \"number\") {\n value = dataView.getUint32(position) * 4294967296;\n value += dataView.getUint32(position + 4);\n } else if (currentUnpackr.int64AsType === \"string\") {\n value = dataView.getBigUint64(position).toString();\n } else if (currentUnpackr.int64AsType === \"auto\") {\n value = dataView.getBigUint64(position);\n if (value <= BigInt(2) << BigInt(52))\n value = Number(value);\n } else\n value = dataView.getBigUint64(position);\n position += 8;\n return value;\n case 208:\n return dataView.getInt8(position++);\n case 209:\n value = dataView.getInt16(position);\n position += 2;\n return value;\n case 210:\n value = dataView.getInt32(position);\n position += 4;\n return value;\n case 211:\n if (currentUnpackr.int64AsType === \"number\") {\n value = dataView.getInt32(position) * 4294967296;\n value += dataView.getUint32(position + 4);\n } else if (currentUnpackr.int64AsType === \"string\") {\n value = dataView.getBigInt64(position).toString();\n } else if (currentUnpackr.int64AsType === \"auto\") {\n value = dataView.getBigInt64(position);\n if (value >= BigInt(-2) << BigInt(52) && value <= BigInt(2) << BigInt(52))\n value = Number(value);\n } else\n value = dataView.getBigInt64(position);\n position += 8;\n return value;\n case 212:\n value = src[position++];\n if (value == 114) {\n return recordDefinition(src[position++] & 63);\n } else {\n let extension = currentExtensions[value];\n if (extension) {\n if (extension.read) {\n position++;\n return extension.read(read());\n } else if (extension.noBuffer) {\n position++;\n return extension();\n } else {\n if (position >= srcEnd)\n throw endOfMessagePackError();\n return extension(src.subarray(position, ++position));\n }\n } else\n throw new Error(\"Unknown extension \" + value);\n }\n case 213:\n value = src[position];\n if (value == 114) {\n position++;\n return recordDefinition(src[position++] & 63, src[position++]);\n } else\n return readExt(2);\n case 214:\n return readExt(4);\n case 215:\n return readExt(8);\n case 216:\n return readExt(16);\n case 217:\n value = src[position++];\n if (srcStringEnd >= position) {\n return srcString.slice(position - srcStringStart, (position += value) - srcStringStart);\n }\n return readString8(value);\n case 218:\n value = dataView.getUint16(position);\n position += 2;\n if (value > srcEnd - position)\n throw endOfMessagePackError(position + value);\n if (srcStringEnd >= position) {\n return srcString.slice(position - srcStringStart, (position += value) - srcStringStart);\n }\n return readString16(value);\n case 219:\n value = dataView.getUint32(position);\n position += 4;\n if (value > srcEnd - position)\n throw endOfMessagePackError(position + value);\n if (srcStringEnd >= position) {\n return srcString.slice(position - srcStringStart, (position += value) - srcStringStart);\n }\n return readString32(value);\n case 220:\n value = dataView.getUint16(position);\n position += 2;\n return readArray(value);\n case 221:\n value = dataView.getUint32(position);\n position += 4;\n return readArray(value);\n case 222:\n value = dataView.getUint16(position);\n position += 2;\n return readMap(value);\n case 223:\n value = dataView.getUint32(position);\n position += 4;\n return readMap(value);\n default:\n if (token >= 224)\n return token - 256;\n if (token === undefined)\n throw endOfMessagePackError();\n throw new Error(\"Unknown MessagePack token \" + token);\n }\n }\n}\nvar validName = /^[a-zA-Z_$][a-zA-Z\\d_$]*$/;\nfunction createStructureReader(structure, firstId) {\n function readObject() {\n if (readObject.count++ > inlineObjectReadThreshold) {\n let optimizedReadObject;\n try {\n optimizedReadObject = structure.read = new Function(\"r\", \"return function(){return \" + (currentUnpackr.freezeData ? \"Object.freeze\" : \"\") + \"({\" + structure.map((key) => key === \"__proto__\" ? \"__proto_:r()\" : validName.test(key) ? key + \":r()\" : \"[\" + JSON.stringify(key) + \"]:r()\").join(\",\") + \"})}\")(read);\n } catch (error) {\n inlineObjectReadThreshold = Infinity;\n return readObject();\n }\n structure.read0 = optimizedReadObject;\n if (structure.highByte === 0)\n structure.read = createSecondByteReader(firstId, structure.read);\n return optimizedReadObject();\n }\n let object = {};\n for (let i = 0, l = structure.length;i < l; i++) {\n let key = structure[i];\n if (key === \"__proto__\")\n key = \"__proto_\";\n object[key] = read();\n }\n if (currentUnpackr.freezeData)\n return Object.freeze(object);\n return object;\n }\n readObject.count = 0;\n structure.read0 = readObject;\n if (structure.highByte === 0) {\n return createSecondByteReader(firstId, readObject);\n }\n return readObject;\n}\nvar createSecondByteReader = (firstId, read0) => {\n return function() {\n let highByte = src[position++];\n if (highByte === 0)\n return read0();\n let id = firstId < 32 ? -(firstId + (highByte << 5)) : firstId + (highByte << 5);\n let structure = currentStructures[id] || loadStructures()[id];\n if (!structure) {\n throw new Error(\"Record id is not defined for \" + id);\n }\n if (!structure.read)\n structure.read = createStructureReader(structure, firstId);\n return structure.read();\n };\n};\nfunction loadStructures() {\n let loadedStructures = saveState(() => {\n src = null;\n return currentUnpackr.getStructures();\n });\n return currentStructures = currentUnpackr._mergeStructures(loadedStructures, currentStructures);\n}\nvar readFixedString = readStringJS;\nvar readString8 = readStringJS;\nvar readString16 = readStringJS;\nvar readString32 = readStringJS;\nvar isNativeAccelerationEnabled = false;\nfunction setExtractor(extractStrings) {\n isNativeAccelerationEnabled = true;\n readFixedString = readString(1);\n readString8 = readString(2);\n readString16 = readString(3);\n readString32 = readString(5);\n function tryExtractStrings(start, end, buffer) {\n try {\n return extractStrings(start, end, buffer);\n } catch (error) {\n return EXTRACTION_FAILED;\n }\n }\n function readString(headerLength) {\n return function readString(length) {\n let string = strings[stringPosition++];\n if (string == null) {\n if (bundledStrings || strings === EXTRACTION_FAILED)\n return readStringJS(length);\n let byteOffset = src.byteOffset;\n let extraction = tryExtractStrings(position - headerLength + byteOffset, srcEnd + byteOffset, src.buffer);\n if (extraction === EXTRACTION_FAILED) {\n strings = EXTRACTION_FAILED;\n return readStringJS(length);\n }\n if (typeof extraction == \"string\") {\n string = extraction;\n strings = EMPTY_ARRAY;\n } else {\n strings = extraction;\n stringPosition = 1;\n srcStringEnd = 1;\n string = strings[0];\n if (string === undefined)\n throw new Error(\"Unexpected end of buffer\");\n }\n }\n let srcStringLength = string.length;\n if (srcStringLength <= length) {\n position += length;\n return string;\n }\n srcString = string;\n srcStringStart = position;\n srcStringEnd = position + srcStringLength;\n position += length;\n return string.slice(0, length);\n };\n }\n}\nfunction readStringJS(length) {\n let result;\n if (length < 16) {\n if (result = shortStringInJS(length))\n return result;\n }\n if (length > 64 && decoder)\n return decoder.decode(src.subarray(position, position += length));\n const end = position + length;\n const units = [];\n result = \"\";\n while (position < end) {\n const byte1 = src[position++];\n if ((byte1 & 128) === 0) {\n units.push(byte1);\n } else if ((byte1 & 224) === 192) {\n if (byte1 < 194 || position >= end || (src[position] & 192) !== 128) {\n units.push(65533);\n } else {\n const byte2 = src[position++] & 63;\n units.push((byte1 & 31) << 6 | byte2);\n }\n } else if ((byte1 & 240) === 224) {\n const byte2 = position < end ? src[position] : 0;\n if (position >= end || (byte2 & 192) !== 128 || byte1 === 224 && byte2 < 160 || byte1 === 237 && byte2 >= 160) {\n units.push(65533);\n } else {\n position++;\n if (position >= end || (src[position] & 192) !== 128) {\n units.push(65533);\n } else {\n const byte3 = src[position++] & 63;\n units.push((byte1 & 31) << 12 | (byte2 & 63) << 6 | byte3);\n }\n }\n } else if ((byte1 & 248) === 240) {\n const byte2 = position < end ? src[position] : 0;\n if (byte1 > 244 || position >= end || (byte2 & 192) !== 128 || byte1 === 240 && byte2 < 144 || byte1 === 244 && byte2 >= 144) {\n units.push(65533);\n } else {\n position++;\n if (position >= end || (src[position] & 192) !== 128) {\n units.push(65533);\n } else {\n const byte3 = src[position++] & 63;\n if (position >= end || (src[position] & 192) !== 128) {\n units.push(65533);\n } else {\n const byte4 = src[position++] & 63;\n let unit = (byte1 & 7) << 18 | (byte2 & 63) << 12 | byte3 << 6 | byte4;\n unit -= 65536;\n units.push(unit >>> 10 & 1023 | 55296);\n units.push(56320 | unit & 1023);\n }\n }\n }\n } else {\n units.push(65533);\n }\n if (units.length >= 4096) {\n result += fromCharCode.apply(String, units);\n units.length = 0;\n }\n }\n if (units.length > 0) {\n result += fromCharCode.apply(String, units);\n }\n return result;\n}\nfunction endOfMessagePackError(end) {\n let error = new Error(\"Unexpected end of MessagePack data\");\n error.incomplete = true;\n if (end > srcEnd && position <= srcEnd)\n error.missingBytes = end - srcEnd;\n return error;\n}\nfunction readArray(length) {\n if (length > srcEnd - position || (arrayAllocationBudget -= length) < 0)\n throw endOfMessagePackError(position + length);\n let array = new Array(length);\n for (let i = 0;i < length; i++) {\n array[i] = read();\n }\n if (currentUnpackr.freezeData)\n return Object.freeze(array);\n return array;\n}\nfunction readMap(length) {\n if (length > (srcEnd - position) / 2)\n throw endOfMessagePackError(position + 2 * length);\n if (currentUnpackr.mapsAsObjects) {\n let object = {};\n for (let i = 0;i < length; i++) {\n let key = readKey();\n if (key === \"__proto__\")\n key = \"__proto_\";\n object[key] = read();\n }\n return object;\n } else {\n let map = new Map;\n for (let i = 0;i < length; i++) {\n map.set(read(), read());\n }\n return map;\n }\n}\nvar fromCharCode = String.fromCharCode;\nfunction longStringInJS(length) {\n let start = position;\n let bytes = new Array(length);\n for (let i = 0;i < length; i++) {\n const byte = src[position++];\n if ((byte & 128) > 0) {\n position = start;\n return;\n }\n bytes[i] = byte;\n }\n return fromCharCode.apply(String, bytes);\n}\nfunction shortStringInJS(length) {\n if (length < 4) {\n if (length < 2) {\n if (length === 0)\n return \"\";\n else {\n let a = src[position++];\n if ((a & 128) > 1) {\n position -= 1;\n return;\n }\n return fromCharCode(a);\n }\n } else {\n let a = src[position++];\n let b = src[position++];\n if ((a & 128) > 0 || (b & 128) > 0) {\n position -= 2;\n return;\n }\n if (length < 3)\n return fromCharCode(a, b);\n let c = src[position++];\n if ((c & 128) > 0) {\n position -= 3;\n return;\n }\n return fromCharCode(a, b, c);\n }\n } else {\n let a = src[position++];\n let b = src[position++];\n let c = src[position++];\n let d = src[position++];\n if ((a & 128) > 0 || (b & 128) > 0 || (c & 128) > 0 || (d & 128) > 0) {\n position -= 4;\n return;\n }\n if (length < 6) {\n if (length === 4)\n return fromCharCode(a, b, c, d);\n else {\n let e = src[position++];\n if ((e & 128) > 0) {\n position -= 5;\n return;\n }\n return fromCharCode(a, b, c, d, e);\n }\n } else if (length < 8) {\n let e = src[position++];\n let f = src[position++];\n if ((e & 128) > 0 || (f & 128) > 0) {\n position -= 6;\n return;\n }\n if (length < 7)\n return fromCharCode(a, b, c, d, e, f);\n let g = src[position++];\n if ((g & 128) > 0) {\n position -= 7;\n return;\n }\n return fromCharCode(a, b, c, d, e, f, g);\n } else {\n let e = src[position++];\n let f = src[position++];\n let g = src[position++];\n let h = src[position++];\n if ((e & 128) > 0 || (f & 128) > 0 || (g & 128) > 0 || (h & 128) > 0) {\n position -= 8;\n return;\n }\n if (length < 10) {\n if (length === 8)\n return fromCharCode(a, b, c, d, e, f, g, h);\n else {\n let i = src[position++];\n if ((i & 128) > 0) {\n position -= 9;\n return;\n }\n return fromCharCode(a, b, c, d, e, f, g, h, i);\n }\n } else if (length < 12) {\n let i = src[position++];\n let j = src[position++];\n if ((i & 128) > 0 || (j & 128) > 0) {\n position -= 10;\n return;\n }\n if (length < 11)\n return fromCharCode(a, b, c, d, e, f, g, h, i, j);\n let k = src[position++];\n if ((k & 128) > 0) {\n position -= 11;\n return;\n }\n return fromCharCode(a, b, c, d, e, f, g, h, i, j, k);\n } else {\n let i = src[position++];\n let j = src[position++];\n let k = src[position++];\n let l = src[position++];\n if ((i & 128) > 0 || (j & 128) > 0 || (k & 128) > 0 || (l & 128) > 0) {\n position -= 12;\n return;\n }\n if (length < 14) {\n if (length === 12)\n return fromCharCode(a, b, c, d, e, f, g, h, i, j, k, l);\n else {\n let m = src[position++];\n if ((m & 128) > 0) {\n position -= 13;\n return;\n }\n return fromCharCode(a, b, c, d, e, f, g, h, i, j, k, l, m);\n }\n } else {\n let m = src[position++];\n let n = src[position++];\n if ((m & 128) > 0 || (n & 128) > 0) {\n position -= 14;\n return;\n }\n if (length < 15)\n return fromCharCode(a, b, c, d, e, f, g, h, i, j, k, l, m, n);\n let o = src[position++];\n if ((o & 128) > 0) {\n position -= 15;\n return;\n }\n return fromCharCode(a, b, c, d, e, f, g, h, i, j, k, l, m, n, o);\n }\n }\n }\n }\n}\nfunction readOnlyJSString() {\n let token = src[position++];\n let length;\n if (token < 192) {\n length = token - 160;\n } else {\n switch (token) {\n case 217:\n length = src[position++];\n break;\n case 218:\n length = dataView.getUint16(position);\n position += 2;\n break;\n case 219:\n length = dataView.getUint32(position);\n position += 4;\n break;\n default:\n throw new Error(\"Expected string\");\n }\n }\n return readStringJS(length);\n}\nfunction readBin(length) {\n return currentUnpackr.copyBuffers ? Uint8Array.prototype.slice.call(src, position, position += length) : src.subarray(position, position += length);\n}\nfunction readExt(length) {\n if (length >= srcEnd - position)\n throw endOfMessagePackError(position + 1 + length);\n let type = src[position++];\n if (currentExtensions[type]) {\n let end;\n return currentExtensions[type](src.subarray(position, end = position += length), (readPosition) => {\n position = readPosition;\n try {\n return read();\n } finally {\n position = end;\n }\n });\n } else\n throw new Error(\"Unknown extension type \" + type);\n}\nvar keyCache = new Array(4096);\nfunction readKey() {\n let length = src[position++];\n if (length >= 160 && length < 192) {\n length = length - 160;\n if (srcStringEnd >= position)\n return srcString.slice(position - srcStringStart, (position += length) - srcStringStart);\n else if (!(srcStringEnd == 0 && srcEnd < 180))\n return readFixedString(length);\n } else {\n position--;\n return asSafeString(read());\n }\n if (length > srcEnd - position)\n throw endOfMessagePackError(position + length);\n let key = (length << 5 ^ (length > 1 ? dataView.getUint16(position) : length > 0 ? src[position] : 0)) & 4095;\n let entry = keyCache[key];\n let checkPosition = position;\n let end = position + length - 3;\n let chunk;\n let i = 0;\n if (entry && entry.bytes == length) {\n while (checkPosition < end) {\n chunk = dataView.getUint32(checkPosition);\n if (chunk != entry[i++]) {\n checkPosition = 1879048192;\n break;\n }\n checkPosition += 4;\n }\n end += 3;\n while (checkPosition < end) {\n chunk = src[checkPosition++];\n if (chunk != entry[i++]) {\n checkPosition = 1879048192;\n break;\n }\n }\n if (checkPosition === end) {\n position = checkPosition;\n return entry.string;\n }\n end -= 3;\n checkPosition = position;\n }\n entry = [];\n keyCache[key] = entry;\n entry.bytes = length;\n while (checkPosition < end) {\n chunk = dataView.getUint32(checkPosition);\n entry.push(chunk);\n checkPosition += 4;\n }\n end += 3;\n while (checkPosition < end) {\n chunk = src[checkPosition++];\n entry.push(chunk);\n }\n let string = length < 16 ? shortStringInJS(length) : longStringInJS(length);\n if (string != null)\n return entry.string = string;\n return entry.string = readFixedString(length);\n}\nfunction asSafeString(property) {\n if (typeof property === \"string\")\n return property;\n if (typeof property === \"number\" || typeof property === \"boolean\" || typeof property === \"bigint\")\n return property.toString();\n if (property == null)\n return property + \"\";\n if (currentUnpackr.allowArraysInMapKeys && Array.isArray(property) && property.flat().every((item) => [\"string\", \"number\", \"boolean\", \"bigint\"].includes(typeof item))) {\n return property.flat().toString();\n }\n throw new Error(`Invalid property type for record: ${typeof property}. A MessagePack map with non-string keys can be decoded as a Map with mapsAsObjects: false`);\n}\nvar recordDefinition = (id, highByte) => {\n let structure = read().map(asSafeString);\n let firstByte = id;\n if (highByte !== undefined) {\n id = id < 32 ? -((highByte << 5) + id) : (highByte << 5) + id;\n structure.highByte = highByte;\n }\n let existingStructure = currentStructures[id];\n if (existingStructure && (existingStructure.isShared || sequentialMode)) {\n (currentStructures.restoreStructures || (currentStructures.restoreStructures = []))[id] = existingStructure;\n }\n currentStructures[id] = structure;\n structure.read = createStructureReader(structure, firstByte);\n return (structure.read0 || structure.read)();\n};\ncurrentExtensions[0] = () => {};\ncurrentExtensions[0].noBuffer = true;\ncurrentExtensions[66] = (data) => {\n let headLength = data.byteLength % 8 || 8;\n let head = BigInt(data[0] & 128 ? data[0] - 256 : data[0]);\n for (let i = 1;i < headLength; i++) {\n head <<= BigInt(8);\n head += BigInt(data[i]);\n }\n if (data.byteLength !== headLength) {\n let view = new DataView(data.buffer, data.byteOffset, data.byteLength);\n let decode = (start, end) => {\n let length = end - start;\n if (length <= 40) {\n let out = view.getBigUint64(start);\n for (let i = start + 8;i < end; i += 8) {\n out <<= BigInt(64);\n out |= view.getBigUint64(i);\n }\n return out;\n }\n let middle = start + (length >> 4 << 3);\n let left = decode(start, middle);\n let right = decode(middle, end);\n return left << BigInt((end - middle) * 8) | right;\n };\n head = head << BigInt((view.byteLength - headLength) * 8) | decode(headLength, view.byteLength);\n }\n return head;\n};\nvar errors = {\n Error,\n EvalError,\n RangeError,\n ReferenceError,\n SyntaxError,\n TypeError,\n URIError,\n AggregateError: typeof AggregateError === \"function\" ? AggregateError : null\n};\ncurrentExtensions[101] = () => {\n let data = read();\n if (!errors[data[0]]) {\n let error = Error(data[1], { cause: data[2] });\n error.name = data[0];\n return error;\n }\n return errors[data[0]](data[1], { cause: data[2] });\n};\ncurrentExtensions[105] = (data) => {\n if (currentUnpackr.structuredClone === false)\n throw new Error(\"Structured clone extension is disabled\");\n let id = dataView.getUint32(position - 4);\n if (!referenceMap)\n referenceMap = new Map;\n let token = src[position];\n let target;\n if (token >= 144 && token < 160 || token == 220 || token == 221)\n target = [];\n else if (token >= 128 && token < 144 || token == 222 || token == 223)\n target = new Map;\n else if ((token >= 199 && token <= 201 || token >= 212 && token <= 216) && src[position + 1] === 115)\n target = new Set;\n else\n target = {};\n let refEntry = { target };\n referenceMap.set(id, refEntry);\n let targetProperties = read();\n if (!refEntry.used) {\n return refEntry.target = targetProperties;\n } else {\n Object.assign(target, targetProperties);\n }\n if (target instanceof Map)\n for (let [k, v] of targetProperties.entries())\n target.set(k, v);\n if (target instanceof Set)\n for (let i of Array.from(targetProperties))\n target.add(i);\n return target;\n};\ncurrentExtensions[112] = (data) => {\n if (currentUnpackr.structuredClone === false)\n throw new Error(\"Structured clone extension is disabled\");\n let id = dataView.getUint32(position - 4);\n let refEntry = referenceMap.get(id);\n refEntry.used = true;\n return refEntry.target;\n};\ncurrentExtensions[115] = () => new Set(read());\nvar typedArrays = [\"Int8\", \"Uint8\", \"Uint8Clamped\", \"Int16\", \"Uint16\", \"Int32\", \"Uint32\", \"Float32\", \"Float64\", \"BigInt64\", \"BigUint64\"].map((type) => type + \"Array\");\nvar glbl = typeof globalThis === \"object\" ? globalThis : window;\ncurrentExtensions[116] = (data) => {\n let typeCode = data[0];\n let buffer = Uint8Array.prototype.slice.call(data, 1).buffer;\n let typedArrayName = typedArrays[typeCode];\n if (!typedArrayName) {\n if (typeCode === 16)\n return buffer;\n if (typeCode === 17)\n return new DataView(buffer);\n throw new Error(\"Could not find typed array for code \" + typeCode);\n }\n return new glbl[typedArrayName](buffer);\n};\ncurrentExtensions[120] = () => {\n let data = read();\n return new RegExp(data[0], data[1]);\n};\nvar TEMP_BUNDLE = [];\ncurrentExtensions[98] = (data) => {\n let dataSize = (data[0] << 24) + (data[1] << 16) + (data[2] << 8) + data[3];\n let dataPosition = position;\n position += dataSize - data.length;\n bundledStrings = TEMP_BUNDLE;\n bundledStrings = [readOnlyJSString(), readOnlyJSString()];\n bundledStrings.position0 = 0;\n bundledStrings.position1 = 0;\n bundledStrings.postBundlePosition = position;\n position = dataPosition;\n return read();\n};\ncurrentExtensions[255] = (data) => {\n if (data.length == 4)\n return new Date((data[0] * 16777216 + (data[1] << 16) + (data[2] << 8) + data[3]) * 1000);\n else if (data.length == 8)\n return new Date(((data[0] << 22) + (data[1] << 14) + (data[2] << 6) + (data[3] >> 2)) / 1e6 + ((data[3] & 3) * 4294967296 + data[4] * 16777216 + (data[5] << 16) + (data[6] << 8) + data[7]) * 1000);\n else if (data.length == 12)\n return new Date(((data[0] << 24) + (data[1] << 16) + (data[2] << 8) + data[3]) / 1e6 + ((data[4] & 128 ? -281474976710656 : 0) + data[6] * 1099511627776 + data[7] * 4294967296 + data[8] * 16777216 + (data[9] << 16) + (data[10] << 8) + data[11]) * 1000);\n else\n return new Date(\"invalid\");\n};\nfunction saveState(callback) {\n if (currentUnpackr && currentUnpackr._onSaveState)\n currentUnpackr._onSaveState();\n let savedSrcEnd = srcEnd;\n let savedPosition = position;\n let savedStringPosition = stringPosition;\n let savedSrcStringStart = srcStringStart;\n let savedSrcStringEnd = srcStringEnd;\n let savedSrcString = srcString;\n let savedStrings = strings;\n let savedReferenceMap = referenceMap;\n let savedBundledStrings = bundledStrings;\n let savedArrayAllocationBudget = arrayAllocationBudget;\n let savedSrc = new Uint8Array(src.slice(0, srcEnd));\n let savedStructures = currentStructures;\n let savedStructuresContents = currentStructures.slice(0, currentStructures.length);\n let savedPackr = currentUnpackr;\n let savedSequentialMode = sequentialMode;\n try {\n return callback();\n } finally {\n srcEnd = savedSrcEnd;\n position = savedPosition;\n stringPosition = savedStringPosition;\n srcStringStart = savedSrcStringStart;\n srcStringEnd = savedSrcStringEnd;\n srcString = savedSrcString;\n strings = savedStrings;\n referenceMap = savedReferenceMap;\n bundledStrings = savedBundledStrings;\n arrayAllocationBudget = savedArrayAllocationBudget;\n src = savedSrc;\n sequentialMode = savedSequentialMode;\n currentStructures = savedStructures;\n currentStructures.splice(0, currentStructures.length, ...savedStructuresContents);\n currentUnpackr = savedPackr;\n dataView = new DataView(src.buffer, src.byteOffset, src.byteLength);\n }\n}\nfunction clearSource() {\n src = null;\n referenceMap = null;\n currentStructures = null;\n}\nvar mult10 = new Array(147);\nfor (let i = 0;i < 256; i++) {\n mult10[i] = +(\"1e\" + Math.floor(45.15 - i * 0.30103));\n}\nvar defaultUnpackr = new Unpackr({ useRecords: false });\nvar unpack = defaultUnpackr.unpack;\nvar unpackMultiple = defaultUnpackr.unpackMultiple;\nvar decode = defaultUnpackr.unpack;\nvar FLOAT32_OPTIONS = {\n NEVER: 0,\n ALWAYS: 1,\n DECIMAL_ROUND: 3,\n DECIMAL_FIT: 4\n};\nvar f32Array = new Float32Array(1);\nvar u8Array = new Uint8Array(f32Array.buffer, 0, 4);\nUnpackr.SUPPORTS_STRUCT_HOOKS = true;\n// ../node_modules/.bun/msgpackr@2.1.2/node_modules/msgpackr/pack.js\nvar textEncoder;\ntry {\n textEncoder = new TextEncoder;\n} catch (error) {}\nvar extensions;\nvar extensionClasses;\nvar hasNodeBuffer = typeof Buffer !== \"undefined\";\nvar ByteArrayAllocate = hasNodeBuffer ? function(length) {\n return Buffer.allocUnsafeSlow(length);\n} : Uint8Array;\nvar ByteArray = hasNodeBuffer ? Buffer : Uint8Array;\nvar MAX_BUFFER_SIZE = hasNodeBuffer ? 4294967296 : 2144337920;\nvar target;\nvar keysTarget;\nvar targetView;\nvar position2 = 0;\nvar safeEnd;\nvar bundledStrings2 = null;\nvar packing = false;\nvar MAX_BUNDLE_SIZE = 21760;\nvar hasNonLatin = /[\\u0080-\\uFFFF]/;\nvar RECORD_SYMBOL = Symbol(\"record-id\");\n\nclass Packr extends Unpackr {\n constructor(options) {\n super(options);\n this.offset = 0;\n let typeBuffer;\n let start;\n let hasSharedUpdate;\n let structures;\n let referenceMap;\n let encodeUtf8 = ByteArray.prototype.utf8Write ? function(string, position) {\n return target.utf8Write(string, position, target.byteLength - position);\n } : textEncoder && textEncoder.encodeInto ? function(string, position) {\n return textEncoder.encodeInto(string, target.subarray(position)).written;\n } : false;\n let packr = this;\n if (!options)\n options = {};\n let isSequential = options && options.sequential;\n let hasSharedStructures = options.structures || options.saveStructures;\n let maxSharedStructures = options.maxSharedStructures;\n if (maxSharedStructures == null)\n maxSharedStructures = hasSharedStructures ? 32 : 0;\n if (maxSharedStructures > 8160)\n throw new Error(\"Maximum maxSharedStructure is 8160\");\n if (options.structuredClone && options.moreTypes == undefined) {\n this.moreTypes = true;\n }\n let maxOwnStructures = options.maxOwnStructures;\n if (maxOwnStructures == null)\n maxOwnStructures = hasSharedStructures ? 32 : 64;\n if (!this.structures && options.useRecords != false)\n this.structures = [];\n let useTwoByteRecords = maxSharedStructures > 32 || maxOwnStructures + maxSharedStructures > 64;\n let sharedLimitId = maxSharedStructures + 64;\n let maxStructureId = maxSharedStructures + maxOwnStructures + 64;\n if (maxStructureId > 8256) {\n throw new Error(\"Maximum maxSharedStructure + maxOwnStructure is 8192\");\n }\n let recordIdsToRemove = [];\n let transitionsCount = 0;\n let serializationsSinceTransitionRebuild = 0;\n let instancePacking = false;\n let reentrantDepth = 0;\n let pendingNestedStructures = null;\n this.pack = this.encode = function(value, encodeOptions) {\n if (packing) {\n return saveState(value, encodeOptions);\n }\n if (!target) {\n target = new ByteArrayAllocate(8192);\n targetView = target.dataView || (target.dataView = new DataView(target.buffer, 0, 8192));\n position2 = 0;\n }\n safeEnd = target.length - 10;\n if (safeEnd - position2 < 2048) {\n target = new ByteArrayAllocate(target.length);\n targetView = target.dataView || (target.dataView = new DataView(target.buffer, 0, target.length));\n safeEnd = target.length - 10;\n position2 = 0;\n } else\n position2 = position2 + 7 & 2147483640;\n start = position2;\n if (encodeOptions & RESERVE_START_SPACE)\n position2 += encodeOptions & 255;\n referenceMap = packr.structuredClone ? new Map : null;\n if (packr.bundleStrings && typeof value !== \"string\") {\n bundledStrings2 = [];\n bundledStrings2.size = Infinity;\n } else\n bundledStrings2 = null;\n structures = packr.structures;\n if (structures) {\n if (structures.uninitialized)\n structures = packr._mergeStructures(packr.getStructures());\n let sharedLength = structures.sharedLength || 0;\n if (sharedLength > maxSharedStructures) {\n throw new Error(\"Shared structures is larger than maximum shared structures, try increasing maxSharedStructures to \" + structures.sharedLength);\n }\n if (!structures.transitions) {\n rebuildTransitions(reentrantDepth && packr.saveStructures ? Math.min(sharedLength, packr.lastNamedStructuresLength || 0) : sharedLength);\n if (!reentrantDepth)\n packr.lastNamedStructuresLength = sharedLength;\n }\n if (!isSequential || !(structures.nextId >= sharedLength + 64)) {\n structures.nextId = sharedLength + 64;\n }\n }\n if (hasSharedUpdate)\n hasSharedUpdate = false;\n if (!reentrantDepth && pendingNestedStructures)\n pendingNestedStructures = null;\n let encodingError;\n packing = true;\n instancePacking = true;\n try {\n if (packr._writeStruct && !(reentrantDepth && packr.saveStructures) && value && typeof value === \"object\") {\n if (value.constructor === Object)\n writeStruct(value);\n else if (value.constructor !== Map && !Array.isArray(value) && !extensionClasses.some((extClass) => value instanceof extClass)) {\n writeStruct(packr.useToJSON !== false && value.toJSON ? value.toJSON() : value);\n } else\n pack(value);\n } else\n pack(value);\n let lastBundle = bundledStrings2;\n if (bundledStrings2)\n writeBundles(start, pack, 0);\n if (referenceMap && referenceMap.idsToInsert) {\n let idsToInsert = referenceMap.idsToInsert.sort((a, b) => a.offset > b.offset ? 1 : -1);\n let i = idsToInsert.length;\n let incrementPosition = -1;\n while (lastBundle && i > 0) {\n let insertionPoint = idsToInsert[--i].offset + start;\n if (insertionPoint < lastBundle.stringsPosition + start && incrementPosition === -1)\n incrementPosition = 0;\n if (insertionPoint > lastBundle.position + start) {\n if (incrementPosition >= 0)\n incrementPosition += 6;\n } else {\n if (incrementPosition >= 0) {\n targetView.setUint32(lastBundle.position + start, targetView.getUint32(lastBundle.position + start) + incrementPosition);\n incrementPosition = -1;\n }\n lastBundle = lastBundle.previous;\n i++;\n }\n }\n if (incrementPosition >= 0 && lastBundle) {\n targetView.setUint32(lastBundle.position + start, targetView.getUint32(lastBundle.position + start) + incrementPosition);\n }\n position2 += idsToInsert.length * 6;\n if (position2 > safeEnd)\n makeRoom(position2);\n packr.offset = position2;\n let serialized = insertIds(target.subarray(start, position2), idsToInsert);\n referenceMap = null;\n return serialized;\n }\n packr.offset = position2;\n if (encodeOptions & REUSE_BUFFER_MODE) {\n target.start = start;\n target.end = position2;\n return target;\n }\n return target.subarray(start, position2);\n } catch (error) {\n encodingError = error;\n throw error;\n } finally {\n instancePacking = false;\n if (structures) {\n resetStructures();\n if (pendingNestedStructures && !reentrantDepth) {\n let toPromote = pendingNestedStructures;\n pendingNestedStructures = null;\n if (!encodingError && packr.saveStructures) {\n let sharedLength = structures.sharedLength || 0;\n if (!structures.transitions)\n rebuildTransitions(sharedLength);\n for (let i = 0, l = toPromote.length;i < l && sharedLength < maxSharedStructures; i++) {\n let keys = toPromote[i];\n let nextTransition, transition = structures.transitions;\n for (let j = 0, kl = keys.length;j < kl; j++) {\n let key = keys[j];\n nextTransition = transition[key];\n if (!nextTransition)\n nextTransition = transition[key] = Object.create(null);\n transition = nextTransition;\n }\n if (!transition[RECORD_SYMBOL]) {\n let recordId = sharedLength + 64;\n keys.highByte = recordId >= 96 && useTwoByteRecords ? recordId - 96 >> 5 : -1;\n keys.isShared = true;\n transition[RECORD_SYMBOL] = recordId;\n transition.__keys__ = keys;\n structures[sharedLength++] = keys;\n structures.sharedLength = sharedLength;\n hasSharedUpdate = true;\n }\n }\n if (!isSequential || !(structures.nextId >= sharedLength + 64))\n structures.nextId = sharedLength + 64;\n }\n }\n if (hasSharedUpdate && !reentrantDepth && packr.saveStructures) {\n let sharedLength = structures.sharedLength || 0;\n let returnBuffer = target.subarray(start, position2);\n if (!encodingError) {\n let saveSucceeded = false;\n try {\n let newSharedData = (packr._prepareStructures || prepareStructures)(structures, packr);\n if (packr.saveStructures(newSharedData, newSharedData.isCompatible) === false) {\n structures.uninitialized = true;\n saveSucceeded = true;\n packing = false;\n return packr.pack(value, encodeOptions);\n }\n saveSucceeded = true;\n } finally {\n packing = false;\n if (!saveSucceeded) {\n structures = packr.structures;\n if (packr.getStructures)\n structures.uninitialized = true;\n structures.length = structures.sharedLength = packr.lastNamedStructuresLength || 0;\n structures.transitions = null;\n }\n }\n packr.lastNamedStructuresLength = sharedLength;\n if (target.length > 1073741824)\n target = null;\n return returnBuffer;\n }\n if (packr.getStructures)\n structures.uninitialized = true;\n structures.length = structures.sharedLength = packr.lastNamedStructuresLength || 0;\n structures.transitions = null;\n }\n }\n packing = false;\n if (target.length > 1073741824)\n target = null;\n if (encodeOptions & RESET_BUFFER_MODE)\n position2 = start;\n }\n };\n const rebuildTransitions = (sharedLength) => {\n structures.transitions = Object.create(null);\n for (let i = 0;i < sharedLength; i++) {\n let keys = structures[i];\n if (!keys)\n continue;\n let nextTransition, transition = structures.transitions;\n for (let j = 0, l = keys.length;j < l; j++) {\n let key = keys[j];\n nextTransition = transition[key];\n if (!nextTransition) {\n nextTransition = transition[key] = Object.create(null);\n }\n transition = nextTransition;\n }\n transition[RECORD_SYMBOL] = i + 64;\n }\n };\n const saveState = (value, encodeOptions) => {\n let savedTarget = target;\n let savedTargetView = targetView;\n let savedPosition = position2;\n let savedSafeEnd = safeEnd;\n let savedBundledStrings = bundledStrings2;\n let savedStart = start;\n let savedReferenceMap = referenceMap;\n let savedHasSharedUpdate = hasSharedUpdate;\n let wasInstancePacking = instancePacking;\n let savedStructures, savedTransitions, savedNextId, savedNextOwnId, savedRecordIdsToRemove, savedRecordIds, savedOwnStructures, savedSharedLength, savedLastNamedLength, savedUnsavedShared, savedTransitionsCount, savedPendingNestedLen;\n let nestedSucceeded = false;\n if (wasInstancePacking) {\n savedPendingNestedLen = pendingNestedStructures ? pendingNestedStructures.length : 0;\n reentrantDepth++;\n }\n try {\n if (wasInstancePacking && structures) {\n savedStructures = structures;\n savedTransitions = structures.transitions;\n savedNextId = structures.nextId;\n savedNextOwnId = structures.nextOwnId;\n savedLastNamedLength = packr.lastNamedStructuresLength;\n savedSharedLength = structures.sharedLength || 0;\n savedOwnStructures = structures.slice(savedSharedLength);\n savedRecordIdsToRemove = recordIdsToRemove;\n savedRecordIds = [];\n for (let i = 0, l = recordIdsToRemove.length;i < l; i++) {\n let transition = recordIdsToRemove[i];\n let recordId = transition[RECORD_SYMBOL];\n savedRecordIds[i] = recordId;\n transition[RECORD_SYMBOL] = 0;\n if (recordId >= savedSharedLength + 64 && transition.__keys__)\n savedOwnStructures[recordId - savedSharedLength - 64] = transition.__keys__;\n }\n recordIdsToRemove = [];\n if (savedHasSharedUpdate && packr.saveStructures && savedTransitions) {\n savedUnsavedShared = [];\n for (let i = savedLastNamedLength || 0;i < savedSharedLength; i++) {\n let keys = structures[i];\n if (!keys)\n continue;\n let transition = savedTransitions;\n for (let j = 0, l = keys.length;j < l && transition; j++) {\n transition = transition[keys[j]];\n }\n if (transition && transition[RECORD_SYMBOL] === i + 64) {\n savedUnsavedShared.push(transition, i + 64, transition.__keys__);\n transition[RECORD_SYMBOL] = 0;\n transition.__keys__ = null;\n }\n }\n }\n structures.length = savedSharedLength;\n structures.nextId = savedSharedLength + 64;\n structures.nextOwnId = undefined;\n savedTransitionsCount = transitionsCount;\n transitionsCount = 0;\n }\n target = null;\n packing = false;\n instancePacking = false;\n let result = packr.pack(value, encodeOptions);\n nestedSucceeded = true;\n return result;\n } finally {\n if (!nestedSucceeded && wasInstancePacking && pendingNestedStructures)\n pendingNestedStructures.length = savedPendingNestedLen;\n packing = true;\n instancePacking = wasInstancePacking;\n target = savedTarget;\n targetView = savedTargetView;\n position2 = savedPosition;\n safeEnd = savedSafeEnd;\n bundledStrings2 = savedBundledStrings;\n start = savedStart;\n referenceMap = savedReferenceMap;\n if (wasInstancePacking) {\n reentrantDepth--;\n hasSharedUpdate = savedHasSharedUpdate || hasSharedUpdate;\n structures = packr.structures;\n if (structures && savedOwnStructures) {\n if (recordIdsToRemove !== savedRecordIdsToRemove) {\n for (let i = 0, l = recordIdsToRemove.length;i < l; i++) {\n recordIdsToRemove[i][RECORD_SYMBOL] = 0;\n }\n }\n let currentSharedLength = structures.sharedLength || 0;\n if (structures !== savedStructures) {\n if (savedHasSharedUpdate || savedOwnStructures.length > 0) {\n for (let i = 0;i < savedSharedLength; i++) {\n if (savedStructures[i] !== undefined)\n structures[i] = savedStructures[i];\n }\n currentSharedLength = structures.sharedLength = structures.length = savedSharedLength;\n packr.lastNamedStructuresLength = savedLastNamedLength;\n } else if (!reentrantDepth && !hasSharedUpdate) {\n packr.lastNamedStructuresLength = currentSharedLength;\n }\n }\n structures.length = Math.max(currentSharedLength, savedSharedLength + savedOwnStructures.length);\n for (let i = Math.max(0, currentSharedLength - savedSharedLength), l = savedOwnStructures.length;i < l; i++) {\n if (savedOwnStructures[i] !== undefined)\n structures[savedSharedLength + i] = savedOwnStructures[i];\n }\n if (structures.transitions !== savedTransitions || structures !== savedStructures) {\n if (structures === savedStructures && !structures.transitions && currentSharedLength === savedSharedLength) {\n structures.transitions = savedTransitions;\n } else {\n rebuildTransitions(reentrantDepth && packr.saveStructures ? Math.min(currentSharedLength, packr.lastNamedStructuresLength || 0) : currentSharedLength);\n savedUnsavedShared = null;\n savedRecordIdsToRemove = [];\n savedRecordIds = [];\n for (let i = Math.max(0, currentSharedLength - savedSharedLength), l = savedOwnStructures.length;i < l; i++) {\n let keys = savedOwnStructures[i];\n if (!keys)\n continue;\n let nextTransition, transition = structures.transitions;\n for (let j = 0, kl = keys.length;j < kl; j++) {\n let key = keys[j];\n nextTransition = transition[key];\n if (!nextTransition)\n nextTransition = transition[key] = Object.create(null);\n transition = nextTransition;\n }\n if (!transition[RECORD_SYMBOL]) {\n savedRecordIdsToRemove.push(transition);\n savedRecordIds.push(savedSharedLength + i + 64);\n }\n }\n }\n }\n if (savedUnsavedShared) {\n for (let i = 0, l = savedUnsavedShared.length;i < l; i += 3) {\n savedUnsavedShared[i][RECORD_SYMBOL] = savedUnsavedShared[i + 1];\n savedUnsavedShared[i].__keys__ = savedUnsavedShared[i + 2];\n }\n }\n recordIdsToRemove = savedRecordIdsToRemove;\n for (let i = 0, l = savedRecordIds.length;i < l; i++) {\n if (!recordIdsToRemove[i][RECORD_SYMBOL])\n recordIdsToRemove[i][RECORD_SYMBOL] = savedRecordIds[i];\n }\n structures.nextId = !(savedNextId >= currentSharedLength + 64) ? currentSharedLength + 64 : savedNextId;\n structures.nextOwnId = savedNextOwnId;\n if (savedTransitionsCount !== undefined)\n transitionsCount += savedTransitionsCount;\n }\n } else {\n hasSharedUpdate = savedHasSharedUpdate;\n }\n }\n };\n const resetStructures = () => {\n if (serializationsSinceTransitionRebuild < 10)\n serializationsSinceTransitionRebuild++;\n let sharedLength = structures.sharedLength || 0;\n if (structures.length > sharedLength && !isSequential)\n structures.length = sharedLength;\n if (transitionsCount > 1e4 && !reentrantDepth) {\n structures.transitions = null;\n serializationsSinceTransitionRebuild = 0;\n transitionsCount = 0;\n if (recordIdsToRemove.length > 0)\n recordIdsToRemove = [];\n } else if (recordIdsToRemove.length > 0 && !isSequential) {\n for (let i = 0, l = recordIdsToRemove.length;i < l; i++) {\n recordIdsToRemove[i][RECORD_SYMBOL] = 0;\n }\n recordIdsToRemove = [];\n }\n };\n const packArray = (value) => {\n var length = value.length;\n if (length < 16) {\n target[position2++] = 144 | length;\n } else if (length < 65536) {\n target[position2++] = 220;\n target[position2++] = length >> 8;\n target[position2++] = length & 255;\n } else {\n target[position2++] = 221;\n targetView.setUint32(position2, length);\n position2 += 4;\n }\n for (let i = 0;i < length; i++) {\n pack(value[i]);\n }\n };\n const pack = (value) => {\n if (position2 > safeEnd)\n target = makeRoom(position2);\n var type = typeof value;\n var length;\n if (type === \"string\") {\n let strLength = value.length;\n if (bundledStrings2 && strLength >= 4 && strLength < 4096) {\n if ((bundledStrings2.size += strLength) > MAX_BUNDLE_SIZE) {\n let extStart;\n let maxBytes = (bundledStrings2[0] ? bundledStrings2[0].length * 3 + bundledStrings2[1].length : 0) + 10;\n if (position2 + maxBytes > safeEnd)\n target = makeRoom(position2 + maxBytes);\n let lastBundle;\n if (bundledStrings2.position) {\n lastBundle = bundledStrings2;\n target[position2] = 200;\n position2 += 3;\n target[position2++] = 98;\n extStart = position2 - start;\n position2 += 4;\n writeBundles(start, pack, 0);\n targetView.setUint16(extStart + start - 3, position2 - start - extStart);\n } else {\n target[position2++] = 214;\n target[position2++] = 98;\n extStart = position2 - start;\n position2 += 4;\n }\n bundledStrings2 = [\"\", \"\"];\n bundledStrings2.previous = lastBundle;\n bundledStrings2.size = 0;\n bundledStrings2.position = extStart;\n }\n let twoByte = hasNonLatin.test(value);\n bundledStrings2[twoByte ? 0 : 1] += value;\n target[position2++] = 193;\n pack(twoByte ? -strLength : strLength);\n return;\n }\n let headerSize;\n if (strLength < 32) {\n headerSize = 1;\n } else if (strLength < 256) {\n headerSize = 2;\n } else if (strLength < 65536) {\n headerSize = 3;\n } else {\n headerSize = 5;\n }\n let maxBytes = strLength * 3;\n if (position2 + maxBytes > safeEnd)\n target = makeRoom(position2 + maxBytes);\n if (strLength < 64 || !encodeUtf8) {\n let i, c1, c2, strPosition = position2 + headerSize;\n for (i = 0;i < strLength; i++) {\n c1 = value.charCodeAt(i);\n if (c1 < 128) {\n target[strPosition++] = c1;\n } else if (c1 < 2048) {\n target[strPosition++] = c1 >> 6 | 192;\n target[strPosition++] = c1 & 63 | 128;\n } else if ((c1 & 64512) === 55296 && ((c2 = value.charCodeAt(i + 1)) & 64512) === 56320) {\n c1 = 65536 + ((c1 & 1023) << 10) + (c2 & 1023);\n i++;\n target[strPosition++] = c1 >> 18 | 240;\n target[strPosition++] = c1 >> 12 & 63 | 128;\n target[strPosition++] = c1 >> 6 & 63 | 128;\n target[strPosition++] = c1 & 63 | 128;\n } else {\n target[strPosition++] = c1 >> 12 | 224;\n target[strPosition++] = c1 >> 6 & 63 | 128;\n target[strPosition++] = c1 & 63 | 128;\n }\n }\n length = strPosition - position2 - headerSize;\n } else {\n length = encodeUtf8(value, position2 + headerSize);\n }\n if (length < 32) {\n target[position2++] = 160 | length;\n } else if (length < 256) {\n if (headerSize < 2) {\n target.copyWithin(position2 + 2, position2 + 1, position2 + 1 + length);\n }\n target[position2++] = 217;\n target[position2++] = length;\n } else if (length < 65536) {\n if (headerSize < 3) {\n target.copyWithin(position2 + 3, position2 + 2, position2 + 2 + length);\n }\n target[position2++] = 218;\n target[position2++] = length >> 8;\n target[position2++] = length & 255;\n } else {\n if (headerSize < 5) {\n target.copyWithin(position2 + 5, position2 + 3, position2 + 3 + length);\n }\n target[position2++] = 219;\n targetView.setUint32(position2, length);\n position2 += 4;\n }\n position2 += length;\n } else if (type === \"number\") {\n if (value >>> 0 === value) {\n if (value < 32 || value < 128 && this.useRecords === false || value < 64 && !this._writeStruct) {\n target[position2++] = value;\n } else if (value < 256) {\n target[position2++] = 204;\n target[position2++] = value;\n } else if (value < 65536) {\n target[position2++] = 205;\n target[position2++] = value >> 8;\n target[position2++] = value & 255;\n } else {\n target[position2++] = 206;\n targetView.setUint32(position2, value);\n position2 += 4;\n }\n } else if (value >> 0 === value) {\n if (value >= -32) {\n target[position2++] = 256 + value;\n } else if (value >= -128) {\n target[position2++] = 208;\n target[position2++] = value + 256;\n } else if (value >= -32768) {\n target[position2++] = 209;\n targetView.setInt16(position2, value);\n position2 += 2;\n } else {\n target[position2++] = 210;\n targetView.setInt32(position2, value);\n position2 += 4;\n }\n } else {\n let useFloat32;\n if ((useFloat32 = this.useFloat32) > 0 && value < 4294967296 && value >= -2147483648) {\n target[position2++] = 202;\n targetView.setFloat32(position2, value);\n let xShifted;\n if (useFloat32 < 4 || (xShifted = value * mult10[(target[position2] & 127) << 1 | target[position2 + 1] >> 7]) >> 0 === xShifted) {\n position2 += 4;\n return;\n } else\n position2--;\n }\n target[position2++] = 203;\n targetView.setFloat64(position2, value);\n position2 += 8;\n }\n } else if (type === \"object\" || type === \"function\") {\n if (!value)\n target[position2++] = 192;\n else {\n if (referenceMap) {\n let referee = referenceMap.get(value);\n if (referee) {\n if (!referee.id) {\n let idsToInsert = referenceMap.idsToInsert || (referenceMap.idsToInsert = []);\n referee.id = idsToInsert.push(referee);\n }\n target[position2++] = 214;\n target[position2++] = 112;\n targetView.setUint32(position2, referee.id);\n position2 += 4;\n return;\n } else\n referenceMap.set(value, { offset: position2 - start });\n }\n let constructor = value.constructor;\n if (constructor === Object) {\n writeObject(value);\n } else if (constructor === Array) {\n packArray(value);\n } else if (constructor === Map) {\n if (this.mapAsEmptyObject)\n target[position2++] = 128;\n else {\n length = value.size;\n if (length < 16) {\n target[position2++] = 128 | length;\n } else if (length < 65536) {\n target[position2++] = 222;\n target[position2++] = length >> 8;\n target[position2++] = length & 255;\n } else {\n target[position2++] = 223;\n targetView.setUint32(position2, length);\n position2 += 4;\n }\n for (let [key, entryValue] of value) {\n pack(key);\n pack(entryValue);\n }\n }\n } else {\n for (let i = 0, l = extensions.length;i < l; i++) {\n let extensionClass = extensionClasses[i];\n if (value instanceof extensionClass) {\n if (value.constructor !== extensionClass && packr.useToJSON !== false && value.toJSON !== undefined && value.toJSON !== dateToJSON && value.toJSON !== bufferToJSON) {\n break;\n }\n let extension = extensions[i];\n if (extension.write) {\n if (extension.type) {\n target[position2++] = 212;\n target[position2++] = extension.type;\n target[position2++] = 0;\n }\n let writeResult = extension.write.call(this, value);\n if (writeResult === value) {\n if (Array.isArray(value)) {\n packArray(value);\n } else {\n writeObject(value);\n }\n } else {\n pack(writeResult);\n }\n return;\n }\n let currentTarget = target;\n let currentTargetView = targetView;\n let currentPosition = position2;\n let currentBundledStrings = bundledStrings2;\n target = null;\n let result;\n try {\n result = extension.pack.call(this, value, (size) => {\n target = currentTarget;\n currentTarget = null;\n position2 += size;\n if (position2 > safeEnd)\n makeRoom(position2);\n return {\n target,\n targetView,\n position: position2 - size\n };\n }, pack);\n } finally {\n if (currentTarget) {\n target = currentTarget;\n targetView = currentTargetView;\n position2 = currentPosition;\n bundledStrings2 = currentBundledStrings;\n safeEnd = target.length - 10;\n }\n }\n if (result) {\n if (result.length + position2 > safeEnd)\n makeRoom(result.length + position2);\n position2 = writeExtensionData(result, target, position2, extension.type);\n }\n return;\n }\n }\n if (Array.isArray(value)) {\n packArray(value);\n } else {\n if (packr.useToJSON !== false && value.toJSON) {\n const json = value.toJSON();\n if (json !== value)\n return pack(json);\n }\n if (type === \"function\")\n return pack(this.writeFunction && this.writeFunction(value));\n writeObject(value);\n }\n }\n }\n } else if (type === \"boolean\") {\n target[position2++] = value ? 195 : 194;\n } else if (type === \"bigint\") {\n if (value < 9223372036854776000 && value >= -9223372036854776000) {\n target[position2++] = 211;\n targetView.setBigInt64(position2, value);\n } else if (value < 18446744073709552000 && value > 0) {\n target[position2++] = 207;\n targetView.setBigUint64(position2, value);\n } else {\n if (this.largeBigIntToFloat) {\n target[position2++] = 203;\n targetView.setFloat64(position2, Number(value));\n } else if (this.largeBigIntToString) {\n return pack(value.toString());\n } else if (this.useBigIntExtension || this.moreTypes) {\n let empty = value < 0 ? BigInt(-1) : BigInt(0);\n let array;\n if (value >> BigInt(65536) === empty) {\n let mask = BigInt(18446744073709552000) - BigInt(1);\n let chunks = [];\n while (true) {\n chunks.push(value & mask);\n if (value >> BigInt(63) === empty)\n break;\n value >>= BigInt(64);\n }\n array = new Uint8Array(new BigUint64Array(chunks).buffer);\n array.reverse();\n } else {\n let invert = value < 0;\n let string = (invert ? ~value : value).toString(16);\n if (string.length % 2) {\n string = \"0\" + string;\n } else if (parseInt(string.charAt(0), 16) >= 8) {\n string = \"00\" + string;\n }\n if (hasNodeBuffer) {\n array = Buffer.from(string, \"hex\");\n } else {\n array = new Uint8Array(string.length / 2);\n for (let i = 0;i < array.length; i++) {\n array[i] = parseInt(string.slice(i * 2, i * 2 + 2), 16);\n }\n }\n if (invert) {\n for (let i = 0;i < array.length; i++)\n array[i] = ~array[i];\n }\n }\n if (array.length + position2 > safeEnd)\n makeRoom(array.length + position2);\n position2 = writeExtensionData(array, target, position2, 66);\n return;\n } else {\n throw new RangeError(value + \" was too large to fit in MessagePack 64-bit integer format, use\" + \" useBigIntExtension, or set largeBigIntToFloat to convert to float-64, or set\" + \" largeBigIntToString to convert to string\");\n }\n }\n position2 += 8;\n } else if (type === \"undefined\") {\n if (this.encodeUndefinedAsNil)\n target[position2++] = 192;\n else {\n target[position2++] = 212;\n target[position2++] = 0;\n target[position2++] = 0;\n }\n } else {\n throw new Error(\"Unknown type: \" + type);\n }\n };\n const writePlainObject = this.variableMapSize || this.coercibleKeyAsNumber || this.skipValues ? (object) => {\n let keys;\n if (this.skipValues) {\n keys = [];\n for (let key in object) {\n if ((typeof object.hasOwnProperty !== \"function\" || object.hasOwnProperty(key)) && !this.skipValues.includes(object[key]))\n keys.push(key);\n }\n } else {\n keys = Object.keys(object);\n }\n let length = keys.length;\n if (length < 16) {\n target[position2++] = 128 | length;\n } else if (length < 65536) {\n target[position2++] = 222;\n target[position2++] = length >> 8;\n target[position2++] = length & 255;\n } else {\n target[position2++] = 223;\n targetView.setUint32(position2, length);\n position2 += 4;\n }\n let key;\n if (this.coercibleKeyAsNumber) {\n for (let i = 0;i < length; i++) {\n key = keys[i];\n let num = Number(key);\n pack(isNaN(num) ? key : num);\n pack(object[key]);\n }\n } else {\n for (let i = 0;i < length; i++) {\n pack(key = keys[i]);\n pack(object[key]);\n }\n }\n } : (object) => {\n target[position2++] = 222;\n let objectOffset = position2 - start;\n position2 += 2;\n let size = 0;\n for (let key in object) {\n if (typeof object.hasOwnProperty !== \"function\" || object.hasOwnProperty(key)) {\n pack(key);\n pack(object[key]);\n size++;\n }\n }\n if (size > 65535) {\n throw new Error(\"Object is too large to serialize with fast 16-bit map size,\" + ' use the \"variableMapSize\" option to serialize this object');\n }\n target[objectOffset++ + start] = size >> 8;\n target[objectOffset + start] = size & 255;\n };\n const writeRecord = this.useRecords === false ? writePlainObject : options.progressiveRecords && !useTwoByteRecords && maxOwnStructures > 0 ? (object) => {\n let nextTransition, transition = structures.transitions || (structures.transitions = Object.create(null));\n let objectOffset = position2++ - start;\n let wroteKeys;\n for (let key in object) {\n if (typeof object.hasOwnProperty !== \"function\" || object.hasOwnProperty(key)) {\n nextTransition = transition[key];\n if (nextTransition)\n transition = nextTransition;\n else {\n let keys = Object.keys(object);\n let lastTransition = transition;\n transition = structures.transitions;\n let newTransitions = 0;\n for (let i = 0, l = keys.length;i < l; i++) {\n let key = keys[i];\n nextTransition = transition[key];\n if (!nextTransition) {\n nextTransition = transition[key] = Object.create(null);\n newTransitions++;\n }\n transition = nextTransition;\n }\n if (objectOffset + start + 1 == position2) {\n position2--;\n newRecord(transition, keys, newTransitions);\n } else\n insertNewRecord(transition, keys, objectOffset, newTransitions);\n wroteKeys = true;\n transition = lastTransition[key];\n }\n pack(object[key]);\n }\n }\n if (!wroteKeys) {\n let recordId = transition[RECORD_SYMBOL];\n if (recordId)\n target[objectOffset + start] = recordId;\n else\n insertNewRecord(transition, Object.keys(object), objectOffset, 0);\n }\n } : (object) => {\n let nextTransition, transition = structures.transitions || (structures.transitions = Object.create(null));\n let newTransitions = 0;\n for (let key in object)\n if (typeof object.hasOwnProperty !== \"function\" || object.hasOwnProperty(key)) {\n nextTransition = transition[key];\n if (!nextTransition) {\n nextTransition = transition[key] = Object.create(null);\n newTransitions++;\n }\n transition = nextTransition;\n }\n let recordId = transition[RECORD_SYMBOL];\n if (recordId) {\n if (recordId >= 96 && useTwoByteRecords) {\n target[position2++] = ((recordId -= 96) & 31) + 96;\n target[position2++] = recordId >> 5;\n } else\n target[position2++] = recordId;\n } else if (newRecord(transition, transition.__keys__ || Object.keys(object), newTransitions) === false) {\n return writePlainObject(object);\n }\n for (let key in object)\n if (typeof object.hasOwnProperty !== \"function\" || object.hasOwnProperty(key)) {\n pack(object[key]);\n }\n };\n const checkUseRecords = typeof this.useRecords == \"function\" && this.useRecords;\n const writeObject = checkUseRecords ? (object) => {\n checkUseRecords(object) ? writeRecord(object) : writePlainObject(object);\n } : writeRecord;\n const writeStruct = (object) => {\n let newPosition = packr._writeStruct(object, target, start, position2, structures, makeRoom, (value, newPosition, notifySharedUpdate) => {\n if (notifySharedUpdate)\n return hasSharedUpdate = true;\n position2 = newPosition;\n let startTarget = target;\n pack(value);\n resetStructures();\n if (startTarget !== target) {\n return { position: position2, targetView, target };\n }\n return position2;\n });\n if (newPosition === 0)\n return writeObject(object);\n position2 = newPosition;\n };\n const makeRoom = (end) => {\n let newSize;\n if (end > 16777216) {\n if (end - start > MAX_BUFFER_SIZE)\n throw new Error(\"Packed buffer would be larger than maximum buffer size\");\n newSize = Math.min(MAX_BUFFER_SIZE, Math.round(Math.max((end - start) * (end > 67108864 ? 1.25 : 2), 4194304) / 4096) * 4096);\n } else\n newSize = (Math.max(end - start << 2, target.length - 1) >> 12) + 1 << 12;\n let newBuffer = new ByteArrayAllocate(newSize);\n targetView = newBuffer.dataView || (newBuffer.dataView = new DataView(newBuffer.buffer, 0, newSize));\n end = Math.min(end, target.length);\n if (target.copy)\n target.copy(newBuffer, 0, start, end);\n else\n newBuffer.set(target.slice(start, end));\n position2 -= start;\n start = 0;\n safeEnd = newBuffer.length - 10;\n return target = newBuffer;\n };\n const newRecord = (transition, keys, newTransitions) => {\n let recordId = structures.nextId;\n if (!recordId)\n recordId = 64;\n if (recordId < sharedLimitId && (reentrantDepth && this.saveStructures || this.shouldShareStructure && !this.shouldShareStructure(keys))) {\n if (reentrantDepth && this.saveStructures && !(this.shouldShareStructure && !this.shouldShareStructure(keys)))\n (pendingNestedStructures || (pendingNestedStructures = [])).push(keys);\n if (!maxOwnStructures)\n return false;\n recordId = structures.nextOwnId;\n if (!(recordId < maxStructureId))\n recordId = sharedLimitId;\n structures.nextOwnId = recordId + 1;\n } else {\n if (recordId >= maxStructureId) {\n if (!maxOwnStructures)\n return false;\n recordId = sharedLimitId;\n }\n structures.nextId = recordId + 1;\n }\n let highByte = keys.highByte = recordId >= 96 && useTwoByteRecords ? recordId - 96 >> 5 : -1;\n transition[RECORD_SYMBOL] = recordId;\n transition.__keys__ = keys;\n structures[recordId - 64] = keys;\n if (recordId < sharedLimitId) {\n keys.isShared = true;\n structures.sharedLength = recordId - 63;\n hasSharedUpdate = true;\n if (highByte >= 0) {\n target[position2++] = (recordId & 31) + 96;\n target[position2++] = highByte;\n } else {\n target[position2++] = recordId;\n }\n } else {\n if (highByte >= 0) {\n target[position2++] = 213;\n target[position2++] = 114;\n target[position2++] = (recordId & 31) + 96;\n target[position2++] = highByte;\n } else {\n target[position2++] = 212;\n target[position2++] = 114;\n target[position2++] = recordId;\n }\n if (newTransitions)\n transitionsCount += serializationsSinceTransitionRebuild * newTransitions;\n if (recordIdsToRemove.length >= maxOwnStructures)\n recordIdsToRemove.shift()[RECORD_SYMBOL] = 0;\n recordIdsToRemove.push(transition);\n pack(keys);\n }\n };\n const insertNewRecord = (transition, keys, insertionOffset, newTransitions) => {\n let mainTarget = target;\n let mainPosition = position2;\n let mainSafeEnd = safeEnd;\n let mainStart = start;\n target = keysTarget;\n position2 = 0;\n start = 0;\n if (!target)\n keysTarget = target = new ByteArrayAllocate(8192);\n safeEnd = target.length - 10;\n newRecord(transition, keys, newTransitions);\n keysTarget = target;\n let keysPosition = position2;\n target = mainTarget;\n position2 = mainPosition;\n safeEnd = mainSafeEnd;\n start = mainStart;\n if (keysPosition > 1) {\n let newEnd = position2 + keysPosition - 1;\n if (newEnd > safeEnd)\n makeRoom(newEnd);\n let insertionPosition = insertionOffset + start;\n target.copyWithin(insertionPosition + keysPosition, insertionPosition + 1, position2);\n target.set(keysTarget.slice(0, keysPosition), insertionPosition);\n position2 = newEnd;\n } else {\n target[insertionOffset + start] = keysTarget[0];\n }\n };\n }\n useBuffer(buffer) {\n target = buffer;\n target.dataView || (target.dataView = new DataView(target.buffer, target.byteOffset, target.byteLength));\n targetView = target.dataView;\n position2 = 0;\n }\n set position(value) {\n position2 = value;\n }\n get position() {\n return position2;\n }\n clearSharedData() {\n if (this.structures) {\n this.structures = [];\n this.lastNamedStructuresLength = 0;\n }\n if (this.typedStructs)\n this.typedStructs = [];\n }\n}\nvar dateToJSON = Date.prototype.toJSON;\nvar bufferToJSON = typeof Buffer !== \"undefined\" ? Buffer.prototype.toJSON : dateToJSON;\nextensionClasses = [Date, Set, Error, RegExp, ArrayBuffer, Object.getPrototypeOf(Uint8Array.prototype).constructor, DataView, C1Type];\nextensions = [{\n pack(date, allocateForWrite, pack) {\n let seconds = date.getTime() / 1000;\n if ((this.useTimestamp32 || date.getMilliseconds() === 0) && seconds >= 0 && seconds < 4294967296) {\n let { target, targetView, position } = allocateForWrite(6);\n target[position++] = 214;\n target[position++] = 255;\n targetView.setUint32(position, seconds);\n } else if (seconds > 0 && seconds < 4294967296) {\n let { target, targetView, position } = allocateForWrite(10);\n target[position++] = 215;\n target[position++] = 255;\n targetView.setUint32(position, date.getMilliseconds() * 4000000 + (seconds / 1000 / 4294967296 >> 0));\n targetView.setUint32(position + 4, seconds);\n } else if (isNaN(seconds)) {\n if (this.onInvalidDate) {\n allocateForWrite(0);\n return pack(this.onInvalidDate());\n }\n let { target, targetView, position } = allocateForWrite(3);\n target[position++] = 212;\n target[position++] = 255;\n target[position++] = 255;\n } else {\n let { target, targetView, position } = allocateForWrite(15);\n target[position++] = 199;\n target[position++] = 12;\n target[position++] = 255;\n targetView.setUint32(position, date.getMilliseconds() * 1e6);\n targetView.setBigInt64(position + 4, BigInt(Math.floor(seconds)));\n }\n }\n}, {\n pack(set, allocateForWrite, pack) {\n if (this.setAsEmptyObject) {\n allocateForWrite(0);\n return pack({});\n }\n let array = Array.from(set);\n let { target, position } = allocateForWrite(this.moreTypes ? 3 : 0);\n if (this.moreTypes) {\n target[position++] = 212;\n target[position++] = 115;\n target[position++] = 0;\n }\n pack(array);\n }\n}, {\n pack(error, allocateForWrite, pack) {\n let { target, position } = allocateForWrite(this.moreTypes ? 3 : 0);\n if (this.moreTypes) {\n target[position++] = 212;\n target[position++] = 101;\n target[position++] = 0;\n }\n pack([error.name, error.message, error.cause]);\n }\n}, {\n pack(regex, allocateForWrite, pack) {\n let { target, position } = allocateForWrite(this.moreTypes ? 3 : 0);\n if (this.moreTypes) {\n target[position++] = 212;\n target[position++] = 120;\n target[position++] = 0;\n }\n pack([regex.source, regex.flags]);\n }\n}, {\n pack(arrayBuffer, allocateForWrite) {\n if (this.moreTypes)\n writeExtBuffer(arrayBuffer, 16, allocateForWrite);\n else\n writeBuffer(hasNodeBuffer ? Buffer.from(arrayBuffer) : new Uint8Array(arrayBuffer), allocateForWrite);\n }\n}, {\n pack(typedArray, allocateForWrite) {\n let constructor = typedArray.constructor;\n if (constructor !== ByteArray && this.moreTypes)\n writeExtBuffer(typedArray, typedArrays.indexOf(constructor.name), allocateForWrite);\n else\n writeBuffer(typedArray, allocateForWrite);\n }\n}, {\n pack(arrayBuffer, allocateForWrite) {\n if (this.moreTypes)\n writeExtBuffer(arrayBuffer, 17, allocateForWrite);\n else\n writeBuffer(hasNodeBuffer ? Buffer.from(arrayBuffer) : new Uint8Array(arrayBuffer), allocateForWrite);\n }\n}, {\n pack(c1, allocateForWrite) {\n let { target, position } = allocateForWrite(1);\n target[position] = 193;\n }\n}];\nfunction writeExtBuffer(typedArray, type, allocateForWrite, encode) {\n let length = typedArray.byteLength;\n if (length + 1 < 256) {\n var { target, position } = allocateForWrite(4 + length);\n target[position++] = 199;\n target[position++] = length + 1;\n } else if (length + 1 < 65536) {\n var { target, position } = allocateForWrite(5 + length);\n target[position++] = 200;\n target[position++] = length + 1 >> 8;\n target[position++] = length + 1 & 255;\n } else {\n var { target, position, targetView } = allocateForWrite(7 + length);\n target[position++] = 201;\n targetView.setUint32(position, length + 1);\n position += 4;\n }\n target[position++] = 116;\n target[position++] = type;\n if (!typedArray.buffer)\n typedArray = new Uint8Array(typedArray);\n target.set(new Uint8Array(typedArray.buffer, typedArray.byteOffset, typedArray.byteLength), position);\n}\nfunction writeBuffer(buffer, allocateForWrite) {\n let length = buffer.byteLength;\n var target, position;\n if (length < 256) {\n var { target, position } = allocateForWrite(length + 2);\n target[position++] = 196;\n target[position++] = length;\n } else if (length < 65536) {\n var { target, position } = allocateForWrite(length + 3);\n target[position++] = 197;\n target[position++] = length >> 8;\n target[position++] = length & 255;\n } else {\n var { target, position, targetView } = allocateForWrite(length + 5);\n target[position++] = 198;\n targetView.setUint32(position, length);\n position += 4;\n }\n target.set(buffer, position);\n}\nfunction writeExtensionData(result, target, position, type) {\n let length = result.length;\n switch (length) {\n case 1:\n target[position++] = 212;\n break;\n case 2:\n target[position++] = 213;\n break;\n case 4:\n target[position++] = 214;\n break;\n case 8:\n target[position++] = 215;\n break;\n case 16:\n target[position++] = 216;\n break;\n default:\n if (length < 256) {\n target[position++] = 199;\n target[position++] = length;\n } else if (length < 65536) {\n target[position++] = 200;\n target[position++] = length >> 8;\n target[position++] = length & 255;\n } else {\n target[position++] = 201;\n target[position++] = length >> 24;\n target[position++] = length >> 16 & 255;\n target[position++] = length >> 8 & 255;\n target[position++] = length & 255;\n }\n }\n target[position++] = type;\n target.set(result, position);\n position += length;\n return position;\n}\nfunction insertIds(serialized, idsToInsert) {\n let nextId;\n let distanceToMove = idsToInsert.length * 6;\n let lastEnd = serialized.length - distanceToMove;\n while (nextId = idsToInsert.pop()) {\n let offset = nextId.offset;\n let id = nextId.id;\n serialized.copyWithin(offset + distanceToMove, offset, lastEnd);\n distanceToMove -= 6;\n let position = offset + distanceToMove;\n serialized[position++] = 214;\n serialized[position++] = 105;\n serialized[position++] = id >> 24;\n serialized[position++] = id >> 16 & 255;\n serialized[position++] = id >> 8 & 255;\n serialized[position++] = id & 255;\n lastEnd = offset;\n }\n return serialized;\n}\nfunction writeBundles(start, pack, incrementPosition) {\n if (bundledStrings2.length > 0) {\n targetView.setUint32(bundledStrings2.position + start, position2 + incrementPosition - bundledStrings2.position - start);\n bundledStrings2.stringsPosition = position2 - start;\n let writeStrings = bundledStrings2;\n bundledStrings2 = null;\n pack(writeStrings[0]);\n pack(writeStrings[1]);\n }\n}\nfunction prepareStructures(structures, packr) {\n structures.isCompatible = (existingStructures) => {\n let compatible = !existingStructures || (packr.lastNamedStructuresLength || 0) === existingStructures.length;\n if (!compatible)\n packr._mergeStructures(existingStructures);\n return compatible;\n };\n return structures;\n}\nPackr.SUPPORTS_STRUCT_HOOKS = true;\nvar defaultPackr = new Packr({ useRecords: false });\nvar pack = defaultPackr.pack;\nvar encode = defaultPackr.pack;\nvar { NEVER, ALWAYS, DECIMAL_ROUND, DECIMAL_FIT } = FLOAT32_OPTIONS;\nvar REUSE_BUFFER_MODE = 512;\nvar RESET_BUFFER_MODE = 1024;\nvar RESERVE_START_SPACE = 2048;\n// ../node_modules/.bun/msgpackr@2.1.2/node_modules/msgpackr/stream.js\nimport { Transform } from \"stream\";\n\n// ../node_modules/.bun/msgpackr@2.1.2/node_modules/msgpackr/iterators.js\nvar DEFAULT_MAX_INCOMPLETE_BUFFER_SIZE = 67108864;\nfunction unpackChunk(state, chunk) {\n if (chunk.length === 0)\n return [];\n let source = chunk;\n if (state.incompleteBuffer) {\n if (!(ArrayBuffer.isView(chunk) && chunk.BYTES_PER_ELEMENT === 1))\n throw new TypeError(\"Chunk must be a Uint8Array or Buffer\");\n const length = state.incompleteLength + chunk.length;\n if (length < state.incompleteNeeded) {\n if (length > state.maxIncompleteBufferSize) {\n state.incompleteBuffer = null;\n throw new Error(\"Maximum incomplete buffer size exceeded\");\n }\n holdIncomplete(state, chunk, length);\n return [];\n }\n if (length <= state.incompleteBuffer.length) {\n state.incompleteBuffer.set(chunk, state.incompleteLength);\n state.incompleteBuffer.fill(0, length);\n source = state.incompleteBuffer.subarray(0, length);\n } else {\n source = Buffer.concat([state.incompleteBuffer.subarray(0, state.incompleteLength), chunk], length);\n }\n state.incompleteBuffer = null;\n }\n try {\n return state.unpackr.unpackMultiple(source);\n } catch (error) {\n if (!error.incomplete)\n throw error;\n try {\n holdRemainder(state, source.subarray(error.lastPosition), source === chunk, error.missingBytes);\n } catch (holdError) {\n holdError.values = error.values;\n throw holdError;\n }\n return error.values || [];\n }\n}\nfunction holdRemainder(state, remainder, borrowed, missingBytes) {\n if (remainder.length > state.maxIncompleteBufferSize)\n throw new Error(\"Maximum incomplete buffer size exceeded\");\n state.incompleteBuffer = borrowed ? Buffer.from(remainder) : remainder;\n state.incompleteLength = remainder.length;\n state.incompleteNeeded = remainder.length + (missingBytes || 1);\n}\nfunction holdIncomplete(state, chunk, length) {\n let buffer = state.incompleteBuffer;\n if (length > buffer.length) {\n const grown = Buffer.allocUnsafe(Math.min(Math.max(length, buffer.length * 2), state.incompleteNeeded + chunk.length, state.maxIncompleteBufferSize));\n buffer.copy(grown, 0, 0, state.incompleteLength);\n buffer = state.incompleteBuffer = grown;\n }\n buffer.set(chunk, state.incompleteLength);\n state.incompleteLength = length;\n}\n\n// ../node_modules/.bun/msgpackr@2.1.2/node_modules/msgpackr/stream.js\nclass UnpackrStream extends Transform {\n constructor(options) {\n if (!options)\n options = {};\n options.objectMode = true;\n super(options);\n options.structures = [];\n this.maxIncompleteBufferSize = options.maxIncompleteBufferSize !== undefined ? options.maxIncompleteBufferSize : DEFAULT_MAX_INCOMPLETE_BUFFER_SIZE;\n this.unpackr = options.unpackr || new Unpackr(options);\n }\n _transform(chunk, encoding, callback) {\n let values, fatalError;\n try {\n values = unpackChunk(this, chunk);\n } catch (error) {\n values = error.values;\n fatalError = error;\n }\n for (let value of values || []) {\n if (value === null)\n value = this.getNullValue();\n this.push(value);\n }\n callback(fatalError);\n }\n _flush(callback) {\n if (this.incompleteBuffer) {\n this.incompleteBuffer = null;\n let error = new Error(\"Unexpected end of MessagePack data\");\n error.incomplete = true;\n return callback(error);\n }\n callback();\n }\n getNullValue() {\n return Symbol.for(null);\n }\n}\n// ../node_modules/.bun/msgpackr@2.1.2/node_modules/msgpackr/node-index.js\nvar nativeAccelerationDisabled = process.env.MSGPACKR_NATIVE_ACCELERATION_DISABLED !== undefined && process.env.MSGPACKR_NATIVE_ACCELERATION_DISABLED.toLowerCase() === \"true\";\nif (!nativeAccelerationDisabled) {\n let extractor;\n try {\n if (true)\n extractor = require_msgpackr_extract();\n if (extractor)\n setExtractor(extractor.extractStrings);\n } catch (error) {}\n}\n\n// dimension/transportProtocol.ts\nvar TRANSPORT_CHUNK = 256 * 1024;\nvar TRANSPORT_MSGPACK = {\n useRecords: false\n};\nvar transportPackr = new Packr(TRANSPORT_MSGPACK);\n\n// dimension/transport-worker.ts\nclass TransportFailure extends Error {\n name;\n constructor(name, message) {\n super(message);\n this.name = name;\n }\n}\nfunction required(name) {\n const value = process.env[name];\n if (!value)\n throw new Error(`${name} is not set`);\n return value;\n}\nasync function existingAncestor(path) {\n for (let current = path;; current = dirname(current)) {\n try {\n return await realpath(current);\n } catch (error) {\n if (error.code !== \"ENOENT\" || current === \"/\")\n throw error;\n }\n }\n}\nfunction assertInside(real, path) {\n if (real !== workspace && !real.startsWith(`${workspace}/`))\n throw new TransportFailure(\"DimensionInvalidError\", `\"${path}\" is outside the workspace`);\n}\nasync function workspacePath(path) {\n const full = resolve(workspace, path.replace(/^\\/+/, \"\"));\n assertInside(await existingAncestor(full), path);\n return full;\n}\nfunction checkUpload(upload) {\n if (!/^[A-Za-z0-9-]{1,64}$/.test(upload))\n throw new TransportFailure(\"DimensionInvalidError\", \"the upload id must be 1-64 letters, digits or dashes\");\n}\nasync function stagingPath(path, upload) {\n checkUpload(upload);\n const target = await workspacePath(path);\n return join(dirname(target), `.${basename(target)}.${upload}.upload`);\n}\nfunction notFound(path) {\n return (error) => {\n if (error.code === \"ENOENT\")\n throw new TransportFailure(\"DimensionNotFoundError\", `no file \"${path}\" in the workspace`);\n throw error;\n };\n}\nasync function handle(request, send) {\n switch (request.op) {\n case \"stat\": {\n const info = await stat(await workspacePath(request.path)).catch(notFound(request.path));\n const type = info.isFile() ? \"file\" : info.isDirectory() ? \"directory\" : \"other\";\n return send({ id: request.id, info: { type, size: info.size } });\n }\n case \"read\": {\n const file = await open(await workspacePath(request.path), \"r\").catch(notFound(request.path));\n try {\n const offset = request.offset ?? 0;\n const end = request.length === undefined ? (await file.stat()).size : offset + request.length;\n for (let position = offset;position < end; ) {\n const buffer = new Uint8Array(Math.min(TRANSPORT_CHUNK, end - position));\n const { bytesRead } = await file.read(buffer, 0, buffer.length, position);\n if (bytesRead === 0)\n break;\n await send({ id: request.id, data: buffer.subarray(0, bytesRead) });\n position += bytesRead;\n }\n } finally {\n await file.close();\n }\n return send({ id: request.id, done: true });\n }\n case \"staged\": {\n const staged = await stat(await stagingPath(request.path, request.upload)).catch(() => null);\n return send({ id: request.id, size: staged?.size ?? 0 });\n }\n case \"write\": {\n const staging = await stagingPath(request.path, request.upload);\n await mkdir(dirname(staging), { recursive: true });\n assertInside(await realpath(dirname(staging)), request.path);\n const file = await open(staging, constants.O_CREAT | constants.O_WRONLY, 438);\n try {\n await file.write(request.data, 0, request.data.length, request.offset);\n } finally {\n await file.close();\n }\n return send({ id: request.id });\n }\n case \"commit\": {\n const staging = await stagingPath(request.path, request.upload);\n const staged = await stat(staging).catch(notFound(request.path));\n if (staged.size < request.size)\n throw new TransportFailure(\"DimensionInvalidError\", `the upload of \"${request.path}\" has ${staged.size} of ${request.size} bytes`);\n const file = await open(staging, \"r+\");\n try {\n await file.truncate(request.size);\n } finally {\n await file.close();\n }\n await rename(staging, await workspacePath(request.path));\n return send({ id: request.id });\n }\n }\n}\nfunction serve(socket) {\n const send = (reply) => new Promise((done) => {\n if (socket.destroyed || socket.write(transportPackr.pack(reply)))\n return done();\n socket.once(\"drain\", done);\n socket.once(\"close\", done);\n });\n const decoder = new UnpackrStream(TRANSPORT_MSGPACK);\n decoder.on(\"data\", (request) => {\n handle(request, send).catch((error) => {\n const { name, message } = error instanceof Error ? error : new Error(String(error));\n return send({ id: request.id, error: { name, message } });\n });\n });\n decoder.on(\"error\", () => socket.destroy());\n socket.on(\"error\", () => socket.destroy());\n socket.pipe(decoder);\n}\nvar workspace = await realpath(required(\"HYB_WORKSPACE\"));\nvar socketPath = required(\"HYB_TRANSPORT_SOCKET\");\nvar build = required(\"HYB_TRANSPORT_BUILD\");\nvar owner = process.env.HYB_SOCKET_OWNER;\nawait rm(socketPath, { force: true });\nvar server = createServer(serve);\nawait new Promise((done) => server.listen(socketPath, done));\nif (owner) {\n const [uid, gid] = owner.split(\":\").map(Number);\n await chown(socketPath, uid, gid);\n}\nfor (const signal of [\"SIGTERM\", \"SIGINT\"]) {\n process.once(signal, () => {\n server.close();\n process.exit(0);\n });\n}\nawait writeFile(required(\"HYB_TRANSPORT_READY\"), `${process.pid} ${build}\n`);\n";
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import { join } from "node:path";
|
|
2
|
+
import { scriptBundle } from "../lib/scriptBundle.js";
|
|
3
|
+
export const dimensionTransportEntry = () => join(import.meta.dirname, "transport-worker.ts");
|
|
4
|
+
export const dimensionTransportBundle = scriptBundle(dimensionTransportEntry, async () => (await import("./transportBundle.generated.js")).DIMENSION_TRANSPORT_SOURCE);
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import type { SandboxConnection } from "../sandbox/api.ts";
|
|
2
|
+
import { type DimensionFileInfo } from "./api.ts";
|
|
3
|
+
export declare function transportFiles(connect: (dimensionName: string) => Promise<SandboxConnection>): {
|
|
4
|
+
statFile: (dimensionName: string, path: string) => Promise<DimensionFileInfo>;
|
|
5
|
+
readFile: (dimensionName: string, path: string, options?: {
|
|
6
|
+
offset?: number;
|
|
7
|
+
length?: number;
|
|
8
|
+
}) => Promise<ReadableStream<Uint8Array>>;
|
|
9
|
+
writeFile: (dimensionName: string, path: string, data: Uint8Array | ReadableStream<Uint8Array>) => Promise<void>;
|
|
10
|
+
};
|
|
@@ -0,0 +1,115 @@
|
|
|
1
|
+
import { UnpackrStream } from "msgpackr";
|
|
2
|
+
import { DimensionInvalidError, DimensionNotFoundError } from "./api.js";
|
|
3
|
+
import { TRANSPORT_CHUNK, TRANSPORT_MSGPACK, transportPackr } from "./transportProtocol.js";
|
|
4
|
+
const WRITE_WINDOW = 8;
|
|
5
|
+
function failure({ name, message }) {
|
|
6
|
+
if (name === "DimensionNotFoundError")
|
|
7
|
+
return new DimensionNotFoundError(message);
|
|
8
|
+
if (name === "DimensionInvalidError")
|
|
9
|
+
return new DimensionInvalidError(message);
|
|
10
|
+
const error = new Error(message);
|
|
11
|
+
error.name = name;
|
|
12
|
+
return error;
|
|
13
|
+
}
|
|
14
|
+
function openSession(connection) {
|
|
15
|
+
const waiting = new Map();
|
|
16
|
+
let nextId = 1;
|
|
17
|
+
const decoder = new UnpackrStream(TRANSPORT_MSGPACK);
|
|
18
|
+
decoder.on("data", (reply) => waiting.get(reply.id)?.(reply));
|
|
19
|
+
connection.onData((data) => decoder.write(data));
|
|
20
|
+
void connection.closed.then(() => {
|
|
21
|
+
for (const onReply of waiting.values())
|
|
22
|
+
onReply({ id: 0, error: { name: "Error", message: "the dimension's transport worker closed the connection" } });
|
|
23
|
+
waiting.clear();
|
|
24
|
+
});
|
|
25
|
+
function request(message, onReply) {
|
|
26
|
+
const id = nextId++;
|
|
27
|
+
waiting.set(id, (reply) => {
|
|
28
|
+
if (reply.error || reply.done || reply.data === undefined)
|
|
29
|
+
waiting.delete(id);
|
|
30
|
+
onReply(reply);
|
|
31
|
+
});
|
|
32
|
+
connection.write(transportPackr.pack({ ...message, id }));
|
|
33
|
+
}
|
|
34
|
+
function call(message) {
|
|
35
|
+
return new Promise((resolve, reject) => request(message, (reply) => (reply.error ? reject(failure(reply.error)) : resolve(reply))));
|
|
36
|
+
}
|
|
37
|
+
return { request, call, close: () => connection.close() };
|
|
38
|
+
}
|
|
39
|
+
async function* chunks(data) {
|
|
40
|
+
if (data instanceof Uint8Array) {
|
|
41
|
+
for (let offset = 0; offset < data.length; offset += TRANSPORT_CHUNK)
|
|
42
|
+
yield data.subarray(offset, offset + TRANSPORT_CHUNK);
|
|
43
|
+
return;
|
|
44
|
+
}
|
|
45
|
+
for await (const chunk of data) {
|
|
46
|
+
for (let offset = 0; offset < chunk.length; offset += TRANSPORT_CHUNK)
|
|
47
|
+
yield chunk.subarray(offset, offset + TRANSPORT_CHUNK);
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
export function transportFiles(connect) {
|
|
51
|
+
async function statFile(dimensionName, path) {
|
|
52
|
+
const session = openSession(await connect(dimensionName));
|
|
53
|
+
try {
|
|
54
|
+
return (await session.call({ op: "stat", path })).info;
|
|
55
|
+
}
|
|
56
|
+
finally {
|
|
57
|
+
session.close();
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
async function readFile(dimensionName, path, options = {}) {
|
|
61
|
+
const session = openSession(await connect(dimensionName));
|
|
62
|
+
return new Promise((resolve, reject) => {
|
|
63
|
+
let controller;
|
|
64
|
+
const stream = new ReadableStream({
|
|
65
|
+
start: (opened) => void (controller = opened),
|
|
66
|
+
cancel: () => session.close(),
|
|
67
|
+
});
|
|
68
|
+
let started = false;
|
|
69
|
+
session.request({ op: "read", path, ...options }, (reply) => {
|
|
70
|
+
if (reply.error) {
|
|
71
|
+
session.close();
|
|
72
|
+
if (started)
|
|
73
|
+
controller.error(failure(reply.error));
|
|
74
|
+
else
|
|
75
|
+
reject(failure(reply.error));
|
|
76
|
+
return;
|
|
77
|
+
}
|
|
78
|
+
if (reply.data)
|
|
79
|
+
controller.enqueue(reply.data);
|
|
80
|
+
if (reply.done) {
|
|
81
|
+
session.close();
|
|
82
|
+
controller.close();
|
|
83
|
+
}
|
|
84
|
+
if (!started) {
|
|
85
|
+
started = true;
|
|
86
|
+
resolve(stream);
|
|
87
|
+
}
|
|
88
|
+
});
|
|
89
|
+
});
|
|
90
|
+
}
|
|
91
|
+
async function writeFile(dimensionName, path, data) {
|
|
92
|
+
const session = openSession(await connect(dimensionName));
|
|
93
|
+
try {
|
|
94
|
+
const upload = crypto.randomUUID();
|
|
95
|
+
const pending = new Set();
|
|
96
|
+
let size = 0;
|
|
97
|
+
for await (const chunk of chunks(data)) {
|
|
98
|
+
const written = session.call({ op: "write", path, upload, offset: size, data: chunk });
|
|
99
|
+
pending.add(written);
|
|
100
|
+
void written.then(() => pending.delete(written), () => { });
|
|
101
|
+
size += chunk.length;
|
|
102
|
+
if (pending.size >= WRITE_WINDOW)
|
|
103
|
+
await Promise.race(pending);
|
|
104
|
+
}
|
|
105
|
+
await Promise.all(pending);
|
|
106
|
+
if (size === 0)
|
|
107
|
+
await session.call({ op: "write", path, upload, offset: 0, data: new Uint8Array() });
|
|
108
|
+
await session.call({ op: "commit", path, upload, size });
|
|
109
|
+
}
|
|
110
|
+
finally {
|
|
111
|
+
session.close();
|
|
112
|
+
}
|
|
113
|
+
}
|
|
114
|
+
return { statFile, readFile, writeFile };
|
|
115
|
+
}
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
import { Packr } from "msgpackr";
|
|
2
|
+
export declare const TRANSPORT_CHUNK: number;
|
|
3
|
+
export declare const TRANSPORT_READY = ".transport.ready";
|
|
4
|
+
export declare const TRANSPORT_LOG = ".transport.log";
|
|
5
|
+
export declare const TRANSPORT_MSGPACK: {
|
|
6
|
+
useRecords: boolean;
|
|
7
|
+
};
|
|
8
|
+
export declare const transportPackr: Packr;
|
|
9
|
+
export type TransportFileInfo = {
|
|
10
|
+
type: "file" | "directory" | "other";
|
|
11
|
+
size: number;
|
|
12
|
+
};
|
|
13
|
+
export type TransportRequest = {
|
|
14
|
+
id: number;
|
|
15
|
+
op: "stat";
|
|
16
|
+
path: string;
|
|
17
|
+
} | {
|
|
18
|
+
id: number;
|
|
19
|
+
op: "read";
|
|
20
|
+
path: string;
|
|
21
|
+
offset?: number;
|
|
22
|
+
length?: number;
|
|
23
|
+
} | {
|
|
24
|
+
id: number;
|
|
25
|
+
op: "staged";
|
|
26
|
+
path: string;
|
|
27
|
+
upload: string;
|
|
28
|
+
} | {
|
|
29
|
+
id: number;
|
|
30
|
+
op: "write";
|
|
31
|
+
path: string;
|
|
32
|
+
upload: string;
|
|
33
|
+
offset: number;
|
|
34
|
+
data: Uint8Array;
|
|
35
|
+
} | {
|
|
36
|
+
id: number;
|
|
37
|
+
op: "commit";
|
|
38
|
+
path: string;
|
|
39
|
+
upload: string;
|
|
40
|
+
size: number;
|
|
41
|
+
};
|
|
42
|
+
export type TransportError = {
|
|
43
|
+
name: string;
|
|
44
|
+
message: string;
|
|
45
|
+
};
|
|
46
|
+
export type TransportReply = {
|
|
47
|
+
id: number;
|
|
48
|
+
data?: Uint8Array;
|
|
49
|
+
done?: boolean;
|
|
50
|
+
info?: TransportFileInfo;
|
|
51
|
+
size?: number;
|
|
52
|
+
error?: TransportError;
|
|
53
|
+
};
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { Packr } from "msgpackr";
|
|
2
|
+
export const TRANSPORT_CHUNK = 256 * 1024;
|
|
3
|
+
export const TRANSPORT_READY = ".transport.ready";
|
|
4
|
+
export const TRANSPORT_LOG = ".transport.log";
|
|
5
|
+
export const TRANSPORT_MSGPACK = {
|
|
6
|
+
useRecords: false,
|
|
7
|
+
};
|
|
8
|
+
export const transportPackr = new Packr(TRANSPORT_MSGPACK);
|
package/dist/index.d.ts
CHANGED
|
@@ -2,16 +2,12 @@ export * from "./sandbox/api.ts";
|
|
|
2
2
|
export * from "./dimension/api.ts";
|
|
3
3
|
export * from "./portal-gateway/api.ts";
|
|
4
4
|
export * from "./agent/api.ts";
|
|
5
|
-
export {
|
|
6
|
-
export {
|
|
7
|
-
export {
|
|
8
|
-
export {
|
|
9
|
-
export {
|
|
10
|
-
export { parseAccessibleHost, proxyCredentialsAuth, type SandboxEndpointAuth, type SandboxEndpointsOptions } from "./sandbox/endpointProxy.ts";
|
|
11
|
-
export { exeDevProxyAuth, type ExeDevAuthOptions } from "./sandbox/exeDevAuth.ts";
|
|
12
|
-
export { EndpointLoginRequiredError, endpointRequest, exeDevLoginUrl, openSseConnection, type EndpointAccess } from "./sandbox/sseConnection.ts";
|
|
5
|
+
export { createDimensionClient } from "./dimension/client.ts";
|
|
6
|
+
export { createGatewayClient } from "./portal-gateway/gatewayClient.ts";
|
|
7
|
+
export { createPortalClient } from "./portal-gateway/portalClient.ts";
|
|
8
|
+
export { createAgentClient } from "./agent/agentClient.ts";
|
|
9
|
+
export { createSandboxClient } from "./sandbox/client.ts";
|
|
13
10
|
export * from "./agent/client.ts";
|
|
14
|
-
export { createPortalWatcher, type PortalWatcher } from "./portal-gateway/portalService.ts";
|
|
15
11
|
export { createDockerClient, DockerError, type DockerClient } from "./lib/docker.ts";
|
|
16
12
|
export { BUILTIN_UPSTREAMS } from "./upstreams/index.ts";
|
|
17
13
|
export { HYPERBRANE_VERSION } from "./lib/version.ts";
|
package/dist/index.js
CHANGED
|
@@ -1,27 +1,13 @@
|
|
|
1
|
-
// The hyperbrane SDK's entry point: what an application drives a server with. The package exports
|
|
2
|
-
// this and, for browsers (which can't take the server side along), each part's api and the worker
|
|
3
|
-
// client: hyperbrane/{sandbox,dimension,portal-gateway,agent}/api, hyperbrane/agent/client.
|
|
4
|
-
// The APIs: types, errors and helpers of each part.
|
|
5
1
|
export * from "./sandbox/api.js";
|
|
6
2
|
export * from "./dimension/api.js";
|
|
7
3
|
export * from "./portal-gateway/api.js";
|
|
8
4
|
export * from "./agent/api.js";
|
|
9
|
-
|
|
10
|
-
export {
|
|
11
|
-
|
|
12
|
-
export {
|
|
13
|
-
export {
|
|
14
|
-
export { createContainerSandbox } from "./sandbox/containerService.js";
|
|
15
|
-
export { BOAT_API_URL, BoatError, archiveBoatMachine, authorizeBoatSshKey, boatHostPortAuth, createBoatApi, createBoatMachine, createBoatSandbox, ensureBoatRunning, } from "./sandbox/boatService.js";
|
|
16
|
-
// Accessible endpoints: how they are authenticated, and reaching them.
|
|
17
|
-
export { parseAccessibleHost, proxyCredentialsAuth } from "./sandbox/endpointProxy.js";
|
|
18
|
-
export { exeDevProxyAuth } from "./sandbox/exeDevAuth.js";
|
|
19
|
-
export { EndpointLoginRequiredError, endpointRequest, exeDevLoginUrl, openSseConnection } from "./sandbox/sseConnection.js";
|
|
20
|
-
// An agent's worker, reached through its endpoint (AgentService.exposeAgent), from a server or a browser.
|
|
5
|
+
export { createDimensionClient } from "./dimension/client.js";
|
|
6
|
+
export { createGatewayClient } from "./portal-gateway/gatewayClient.js";
|
|
7
|
+
export { createPortalClient } from "./portal-gateway/portalClient.js";
|
|
8
|
+
export { createAgentClient } from "./agent/agentClient.js";
|
|
9
|
+
export { createSandboxClient } from "./sandbox/client.js";
|
|
21
10
|
export * from "./agent/client.js";
|
|
22
|
-
// Portals come back by themselves after the services' own restarts; after any other (docker's own, a
|
|
23
|
-
// reboot), restorePortals, or a watcher that runs it for each container that starts.
|
|
24
|
-
export { createPortalWatcher } from "./portal-gateway/portalService.js";
|
|
25
11
|
export { createDockerClient, DockerError } from "./lib/docker.js";
|
|
26
12
|
export { BUILTIN_UPSTREAMS } from "./upstreams/index.js";
|
|
27
13
|
export { HYPERBRANE_VERSION } from "./lib/version.js";
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import type { RunCommandResult, Sandbox } from "../sandbox/api.ts";
|
|
2
|
+
export type ControlOptions = {
|
|
3
|
+
dataDirectory?: string;
|
|
4
|
+
};
|
|
5
|
+
export declare const RECORD_END = "\n\u001E\n";
|
|
6
|
+
export declare function runControl(host: Sandbox, prelude: string, script: string, env: Record<string, string>, options: ControlOptions): Promise<RunCommandResult>;
|
|
7
|
+
export declare function exitEnv(codes: Record<string, number>): Record<string, string>;
|
|
8
|
+
export declare function records<T>(stdout: string): [string, T][];
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
import { sh } from "./sh.js";
|
|
2
|
+
export const RECORD_END = "\n\x1e\n";
|
|
3
|
+
export function runControl(host, prelude, script, env, options) {
|
|
4
|
+
const data = options.dataDirectory === undefined ? {} : { DATA: options.dataDirectory };
|
|
5
|
+
return host.runCommand(["sh", "-c", `${CONTROL_FUNCTIONS}\n${prelude}\n${script}`], { env: { ...data, ...env } });
|
|
6
|
+
}
|
|
7
|
+
export function exitEnv(codes) {
|
|
8
|
+
return Object.fromEntries(Object.entries(codes).map(([name, code]) => [`E_${name.replace(/[A-Z]/g, (c) => `_${c}`).toUpperCase()}`, String(code)]));
|
|
9
|
+
}
|
|
10
|
+
export function records(stdout) {
|
|
11
|
+
return stdout
|
|
12
|
+
.split(RECORD_END)
|
|
13
|
+
.filter((block) => block.trim())
|
|
14
|
+
.flatMap((block) => {
|
|
15
|
+
const newline = block.indexOf("\n");
|
|
16
|
+
try {
|
|
17
|
+
return [[block.slice(0, newline), JSON.parse(block.slice(newline + 1))]];
|
|
18
|
+
}
|
|
19
|
+
catch {
|
|
20
|
+
return [];
|
|
21
|
+
}
|
|
22
|
+
});
|
|
23
|
+
}
|
|
24
|
+
const CONTROL_FUNCTIONS = sh `
|
|
25
|
+
DATA="\${DATA:-$HOME/.local/share/hyperbrane}"
|
|
26
|
+
|
|
27
|
+
refuse() {
|
|
28
|
+
code="$1"
|
|
29
|
+
shift
|
|
30
|
+
echo "$*" >&2
|
|
31
|
+
exit "$code"
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
record_field() {
|
|
35
|
+
sed -n 's/^ "'"$2"'": \(.*\)$/\1/p' "$1" | sed 's/,$//'
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
record_text() {
|
|
39
|
+
record_field "$1" "$2" | sed 's/^"\(.*\)"$/\1/'
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
write_whole() {
|
|
43
|
+
cat > "$1.$$"
|
|
44
|
+
mv -f "$1.$$" "$1"
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
write_new() {
|
|
48
|
+
cat > "$1.$$"
|
|
49
|
+
ln "$1.$$" "$1" 2>/dev/null || true
|
|
50
|
+
rm -f "$1.$$"
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
print_records() {
|
|
54
|
+
for record in "$1"/*.json; do
|
|
55
|
+
[ -f "$record" ] || continue
|
|
56
|
+
name="\${record##*/}"
|
|
57
|
+
printf '%s\n' "\${name%.json}"
|
|
58
|
+
cat "$record"
|
|
59
|
+
printf '\n\036\n'
|
|
60
|
+
done
|
|
61
|
+
}
|
|
62
|
+
`;
|