@aigne/aos 0.2.0-beta
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/CHANGELOG.md +49 -0
- package/LICENSE.md +26 -0
- package/dist/agent-dsl.cjs +116 -0
- package/dist/agent-dsl.d.cts +31 -0
- package/dist/agent-dsl.d.cts.map +1 -0
- package/dist/agent-dsl.d.mts +31 -0
- package/dist/agent-dsl.d.mts.map +1 -0
- package/dist/agent-dsl.mjs +115 -0
- package/dist/agent-dsl.mjs.map +1 -0
- package/dist/arc-compat.cjs +125 -0
- package/dist/arc-compat.d.cts +17 -0
- package/dist/arc-compat.d.cts.map +1 -0
- package/dist/arc-compat.d.mts +17 -0
- package/dist/arc-compat.d.mts.map +1 -0
- package/dist/arc-compat.mjs +123 -0
- package/dist/arc-compat.mjs.map +1 -0
- package/dist/auto-surface/compiler.cjs +36 -0
- package/dist/auto-surface/compiler.d.cts +7 -0
- package/dist/auto-surface/compiler.d.cts.map +1 -0
- package/dist/auto-surface/compiler.d.mts +7 -0
- package/dist/auto-surface/compiler.d.mts.map +1 -0
- package/dist/auto-surface/compiler.mjs +37 -0
- package/dist/auto-surface/compiler.mjs.map +1 -0
- package/dist/auto-surface/definition-dsl.cjs +333 -0
- package/dist/auto-surface/definition-dsl.d.cts +41 -0
- package/dist/auto-surface/definition-dsl.d.cts.map +1 -0
- package/dist/auto-surface/definition-dsl.d.mts +41 -0
- package/dist/auto-surface/definition-dsl.d.mts.map +1 -0
- package/dist/auto-surface/definition-dsl.mjs +332 -0
- package/dist/auto-surface/definition-dsl.mjs.map +1 -0
- package/dist/auto-surface/fragments.cjs +177 -0
- package/dist/auto-surface/fragments.d.cts +23 -0
- package/dist/auto-surface/fragments.d.cts.map +1 -0
- package/dist/auto-surface/fragments.d.mts +23 -0
- package/dist/auto-surface/fragments.d.mts.map +1 -0
- package/dist/auto-surface/fragments.mjs +175 -0
- package/dist/auto-surface/fragments.mjs.map +1 -0
- package/dist/auto-surface/index.d.mts +9 -0
- package/dist/auto-surface/layering.cjs +43 -0
- package/dist/auto-surface/layering.d.cts +7 -0
- package/dist/auto-surface/layering.d.cts.map +1 -0
- package/dist/auto-surface/layering.d.mts +7 -0
- package/dist/auto-surface/layering.d.mts.map +1 -0
- package/dist/auto-surface/layering.mjs +43 -0
- package/dist/auto-surface/layering.mjs.map +1 -0
- package/dist/auto-surface/projection.cjs +11 -0
- package/dist/auto-surface/projection.d.cts +11 -0
- package/dist/auto-surface/projection.d.cts.map +1 -0
- package/dist/auto-surface/projection.d.mts +11 -0
- package/dist/auto-surface/projection.d.mts.map +1 -0
- package/dist/auto-surface/projection.mjs +12 -0
- package/dist/auto-surface/projection.mjs.map +1 -0
- package/dist/auto-surface/projectors/settings-shell.cjs +114 -0
- package/dist/auto-surface/projectors/settings-shell.d.cts +10 -0
- package/dist/auto-surface/projectors/settings-shell.d.cts.map +1 -0
- package/dist/auto-surface/projectors/settings-shell.d.mts +10 -0
- package/dist/auto-surface/projectors/settings-shell.d.mts.map +1 -0
- package/dist/auto-surface/projectors/settings-shell.mjs +114 -0
- package/dist/auto-surface/projectors/settings-shell.mjs.map +1 -0
- package/dist/auto-surface/scenario.cjs +38 -0
- package/dist/auto-surface/scenario.d.cts +31 -0
- package/dist/auto-surface/scenario.d.cts.map +1 -0
- package/dist/auto-surface/scenario.d.mts +31 -0
- package/dist/auto-surface/scenario.d.mts.map +1 -0
- package/dist/auto-surface/scenario.mjs +37 -0
- package/dist/auto-surface/scenario.mjs.map +1 -0
- package/dist/auto-surface/types.cjs +9 -0
- package/dist/auto-surface/types.d.cts +153 -0
- package/dist/auto-surface/types.d.cts.map +1 -0
- package/dist/auto-surface/types.d.mts +153 -0
- package/dist/auto-surface/types.d.mts.map +1 -0
- package/dist/auto-surface/types.mjs +9 -0
- package/dist/auto-surface/types.mjs.map +1 -0
- package/dist/auto-surface/value-dsl.cjs +80 -0
- package/dist/auto-surface/value-dsl.d.cts +24 -0
- package/dist/auto-surface/value-dsl.d.cts.map +1 -0
- package/dist/auto-surface/value-dsl.d.mts +24 -0
- package/dist/auto-surface/value-dsl.d.mts.map +1 -0
- package/dist/auto-surface/value-dsl.mjs +79 -0
- package/dist/auto-surface/value-dsl.mjs.map +1 -0
- package/dist/blocklet/activation.cjs +94 -0
- package/dist/blocklet/activation.d.cts +30 -0
- package/dist/blocklet/activation.d.cts.map +1 -0
- package/dist/blocklet/activation.d.mts +30 -0
- package/dist/blocklet/activation.d.mts.map +1 -0
- package/dist/blocklet/activation.mjs +94 -0
- package/dist/blocklet/activation.mjs.map +1 -0
- package/dist/blocklet/did-space-registry.cjs +282 -0
- package/dist/blocklet/did-space-registry.d.cts +82 -0
- package/dist/blocklet/did-space-registry.d.cts.map +1 -0
- package/dist/blocklet/did-space-registry.d.mts +82 -0
- package/dist/blocklet/did-space-registry.d.mts.map +1 -0
- package/dist/blocklet/did-space-registry.mjs +281 -0
- package/dist/blocklet/did-space-registry.mjs.map +1 -0
- package/dist/blocklet/handlers.cjs +66 -0
- package/dist/blocklet/handlers.d.cts +16 -0
- package/dist/blocklet/handlers.d.cts.map +1 -0
- package/dist/blocklet/handlers.d.mts +16 -0
- package/dist/blocklet/handlers.d.mts.map +1 -0
- package/dist/blocklet/handlers.mjs +65 -0
- package/dist/blocklet/handlers.mjs.map +1 -0
- package/dist/blocklet/index.d.mts +7 -0
- package/dist/blocklet/manifest.d.cts +2 -0
- package/dist/blocklet/manifest.d.mts +2 -0
- package/dist/blocklet/manifest.mjs +3 -0
- package/dist/blocklet/registry.cjs +447 -0
- package/dist/blocklet/registry.d.cts +197 -0
- package/dist/blocklet/registry.d.cts.map +1 -0
- package/dist/blocklet/registry.d.mts +197 -0
- package/dist/blocklet/registry.d.mts.map +1 -0
- package/dist/blocklet/registry.mjs +441 -0
- package/dist/blocklet/registry.mjs.map +1 -0
- package/dist/blocklet/static-render.cjs +183 -0
- package/dist/blocklet/static-render.d.cts +55 -0
- package/dist/blocklet/static-render.d.cts.map +1 -0
- package/dist/blocklet/static-render.d.mts +55 -0
- package/dist/blocklet/static-render.d.mts.map +1 -0
- package/dist/blocklet/static-render.mjs +181 -0
- package/dist/blocklet/static-render.mjs.map +1 -0
- package/dist/blocklet/types.d.cts +70 -0
- package/dist/blocklet/types.d.cts.map +1 -0
- package/dist/blocklet/types.d.mts +70 -0
- package/dist/blocklet/types.d.mts.map +1 -0
- package/dist/devices/chain.cjs +127 -0
- package/dist/devices/chain.d.cts +48 -0
- package/dist/devices/chain.d.cts.map +1 -0
- package/dist/devices/chain.d.mts +48 -0
- package/dist/devices/chain.d.mts.map +1 -0
- package/dist/devices/chain.mjs +125 -0
- package/dist/devices/chain.mjs.map +1 -0
- package/dist/dsl-shared.cjs +290 -0
- package/dist/dsl-shared.d.cts +54 -0
- package/dist/dsl-shared.d.cts.map +1 -0
- package/dist/dsl-shared.d.mts +54 -0
- package/dist/dsl-shared.d.mts.map +1 -0
- package/dist/dsl-shared.mjs +287 -0
- package/dist/dsl-shared.mjs.map +1 -0
- package/dist/http/afs-mcp.cjs +85 -0
- package/dist/http/afs-mcp.d.cts +14 -0
- package/dist/http/afs-mcp.d.cts.map +1 -0
- package/dist/http/afs-mcp.d.mts +14 -0
- package/dist/http/afs-mcp.d.mts.map +1 -0
- package/dist/http/afs-mcp.mjs +86 -0
- package/dist/http/afs-mcp.mjs.map +1 -0
- package/dist/http/afs-raw.cjs +264 -0
- package/dist/http/afs-raw.d.cts +31 -0
- package/dist/http/afs-raw.d.cts.map +1 -0
- package/dist/http/afs-raw.d.mts +31 -0
- package/dist/http/afs-raw.d.mts.map +1 -0
- package/dist/http/afs-raw.mjs +264 -0
- package/dist/http/afs-raw.mjs.map +1 -0
- package/dist/http/afs-rest.cjs +30 -0
- package/dist/http/afs-rest.d.cts +21 -0
- package/dist/http/afs-rest.d.cts.map +1 -0
- package/dist/http/afs-rest.d.mts +21 -0
- package/dist/http/afs-rest.d.mts.map +1 -0
- package/dist/http/afs-rest.mjs +31 -0
- package/dist/http/afs-rest.mjs.map +1 -0
- package/dist/http/afs-rpc-wire.cjs +271 -0
- package/dist/http/afs-rpc-wire.d.cts +195 -0
- package/dist/http/afs-rpc-wire.d.cts.map +1 -0
- package/dist/http/afs-rpc-wire.d.mts +195 -0
- package/dist/http/afs-rpc-wire.d.mts.map +1 -0
- package/dist/http/afs-rpc-wire.mjs +262 -0
- package/dist/http/afs-rpc-wire.mjs.map +1 -0
- package/dist/http/afs-rpc.cjs +729 -0
- package/dist/http/afs-rpc.d.cts +103 -0
- package/dist/http/afs-rpc.d.cts.map +1 -0
- package/dist/http/afs-rpc.d.mts +103 -0
- package/dist/http/afs-rpc.d.mts.map +1 -0
- package/dist/http/afs-rpc.mjs +729 -0
- package/dist/http/afs-rpc.mjs.map +1 -0
- package/dist/http/afs-upload.cjs +116 -0
- package/dist/http/afs-upload.d.cts +40 -0
- package/dist/http/afs-upload.d.cts.map +1 -0
- package/dist/http/afs-upload.d.mts +40 -0
- package/dist/http/afs-upload.d.mts.map +1 -0
- package/dist/http/afs-upload.mjs +116 -0
- package/dist/http/afs-upload.mjs.map +1 -0
- package/dist/http/aup-client.cjs +60 -0
- package/dist/http/aup-client.d.cts +22 -0
- package/dist/http/aup-client.d.cts.map +1 -0
- package/dist/http/aup-client.d.mts +22 -0
- package/dist/http/aup-client.d.mts.map +1 -0
- package/dist/http/aup-client.mjs +59 -0
- package/dist/http/aup-client.mjs.map +1 -0
- package/dist/http/aup-event.cjs +100 -0
- package/dist/http/aup-event.d.cts +38 -0
- package/dist/http/aup-event.d.cts.map +1 -0
- package/dist/http/aup-event.d.mts +38 -0
- package/dist/http/aup-event.d.mts.map +1 -0
- package/dist/http/aup-event.mjs +101 -0
- package/dist/http/aup-event.mjs.map +1 -0
- package/dist/http/auth-context.cjs +66 -0
- package/dist/http/auth-context.d.cts +64 -0
- package/dist/http/auth-context.d.cts.map +1 -0
- package/dist/http/auth-context.d.mts +64 -0
- package/dist/http/auth-context.d.mts.map +1 -0
- package/dist/http/auth-context.mjs +66 -0
- package/dist/http/auth-context.mjs.map +1 -0
- package/dist/http/csrf.cjs +50 -0
- package/dist/http/csrf.d.cts +8 -0
- package/dist/http/csrf.d.cts.map +1 -0
- package/dist/http/csrf.d.mts +8 -0
- package/dist/http/csrf.d.mts.map +1 -0
- package/dist/http/csrf.mjs +49 -0
- package/dist/http/csrf.mjs.map +1 -0
- package/dist/http/handlers.cjs +106 -0
- package/dist/http/handlers.d.cts +39 -0
- package/dist/http/handlers.d.cts.map +1 -0
- package/dist/http/handlers.d.mts +39 -0
- package/dist/http/handlers.d.mts.map +1 -0
- package/dist/http/handlers.mjs +104 -0
- package/dist/http/handlers.mjs.map +1 -0
- package/dist/http/index.d.mts +1 -0
- package/dist/http/ingest-facade.cjs +315 -0
- package/dist/http/ingest-facade.mjs +314 -0
- package/dist/http/ingest-facade.mjs.map +1 -0
- package/dist/http/raw-url.cjs +136 -0
- package/dist/http/raw-url.d.cts +54 -0
- package/dist/http/raw-url.d.cts.map +1 -0
- package/dist/http/raw-url.d.mts +54 -0
- package/dist/http/raw-url.d.mts.map +1 -0
- package/dist/http/raw-url.mjs +136 -0
- package/dist/http/raw-url.mjs.map +1 -0
- package/dist/http/request-context.cjs +178 -0
- package/dist/http/request-context.d.cts +76 -0
- package/dist/http/request-context.d.cts.map +1 -0
- package/dist/http/request-context.d.mts +76 -0
- package/dist/http/request-context.d.mts.map +1 -0
- package/dist/http/request-context.mjs +179 -0
- package/dist/http/request-context.mjs.map +1 -0
- package/dist/index.cjs +197 -0
- package/dist/index.d.cts +63 -0
- package/dist/index.d.mts +68 -0
- package/dist/index.mjs +61 -0
- package/dist/mcp/index.cjs +9 -0
- package/dist/mcp/index.d.cts +5 -0
- package/dist/mcp/index.d.mts +5 -0
- package/dist/mcp/index.mjs +6 -0
- package/dist/mcp/prompts.cjs +17 -0
- package/dist/mcp/prompts.d.cts +8 -0
- package/dist/mcp/prompts.d.cts.map +1 -0
- package/dist/mcp/prompts.d.mts +8 -0
- package/dist/mcp/prompts.d.mts.map +1 -0
- package/dist/mcp/prompts.mjs +17 -0
- package/dist/mcp/prompts.mjs.map +1 -0
- package/dist/mcp/resources.cjs +22 -0
- package/dist/mcp/resources.d.cts +8 -0
- package/dist/mcp/resources.d.cts.map +1 -0
- package/dist/mcp/resources.d.mts +8 -0
- package/dist/mcp/resources.d.mts.map +1 -0
- package/dist/mcp/resources.mjs +22 -0
- package/dist/mcp/resources.mjs.map +1 -0
- package/dist/mcp/server.cjs +51 -0
- package/dist/mcp/server.d.cts +20 -0
- package/dist/mcp/server.d.cts.map +1 -0
- package/dist/mcp/server.d.mts +20 -0
- package/dist/mcp/server.d.mts.map +1 -0
- package/dist/mcp/server.mjs +52 -0
- package/dist/mcp/server.mjs.map +1 -0
- package/dist/mcp/tools.cjs +218 -0
- package/dist/mcp/tools.d.cts +8 -0
- package/dist/mcp/tools.d.cts.map +1 -0
- package/dist/mcp/tools.d.mts +8 -0
- package/dist/mcp/tools.d.mts.map +1 -0
- package/dist/mcp/tools.mjs +219 -0
- package/dist/mcp/tools.mjs.map +1 -0
- package/dist/mcp/utils.cjs +75 -0
- package/dist/mcp/utils.mjs +69 -0
- package/dist/mcp/utils.mjs.map +1 -0
- package/dist/mount/index.cjs +4 -0
- package/dist/mount/index.d.cts +3 -0
- package/dist/mount/index.d.mts +3 -0
- package/dist/mount/index.mjs +3 -0
- package/dist/mount/materializer.cjs +167 -0
- package/dist/mount/materializer.d.cts +97 -0
- package/dist/mount/materializer.d.cts.map +1 -0
- package/dist/mount/materializer.d.mts +97 -0
- package/dist/mount/materializer.d.mts.map +1 -0
- package/dist/mount/materializer.mjs +167 -0
- package/dist/mount/materializer.mjs.map +1 -0
- package/dist/mount/types.d.cts +90 -0
- package/dist/mount/types.d.cts.map +1 -0
- package/dist/mount/types.d.mts +90 -0
- package/dist/mount/types.d.mts.map +1 -0
- package/dist/mount-config.cjs +61 -0
- package/dist/mount-config.d.cts +19 -0
- package/dist/mount-config.d.cts.map +1 -0
- package/dist/mount-config.d.mts +19 -0
- package/dist/mount-config.d.mts.map +1 -0
- package/dist/mount-config.mjs +61 -0
- package/dist/mount-config.mjs.map +1 -0
- package/dist/projectors/aup-projector.cjs +190 -0
- package/dist/projectors/aup-projector.d.cts +59 -0
- package/dist/projectors/aup-projector.d.cts.map +1 -0
- package/dist/projectors/aup-projector.d.mts +59 -0
- package/dist/projectors/aup-projector.d.mts.map +1 -0
- package/dist/projectors/aup-projector.mjs +188 -0
- package/dist/projectors/aup-projector.mjs.map +1 -0
- package/dist/projectors/index.cjs +6 -0
- package/dist/projectors/index.d.cts +2 -0
- package/dist/projectors/index.d.mts +2 -0
- package/dist/projectors/index.mjs +3 -0
- package/dist/scaffold/afs.cjs +195 -0
- package/dist/scaffold/afs.d.cts +16 -0
- package/dist/scaffold/afs.d.cts.map +1 -0
- package/dist/scaffold/afs.d.mts +16 -0
- package/dist/scaffold/afs.d.mts.map +1 -0
- package/dist/scaffold/afs.mjs +195 -0
- package/dist/scaffold/afs.mjs.map +1 -0
- package/dist/scaffold/composition.cjs +92 -0
- package/dist/scaffold/composition.d.cts +10 -0
- package/dist/scaffold/composition.d.cts.map +1 -0
- package/dist/scaffold/composition.d.mts +10 -0
- package/dist/scaffold/composition.d.mts.map +1 -0
- package/dist/scaffold/composition.mjs +92 -0
- package/dist/scaffold/composition.mjs.map +1 -0
- package/dist/scaffold/dsl-error.cjs +21 -0
- package/dist/scaffold/dsl-error.d.cts +11 -0
- package/dist/scaffold/dsl-error.d.cts.map +1 -0
- package/dist/scaffold/dsl-error.d.mts +11 -0
- package/dist/scaffold/dsl-error.d.mts.map +1 -0
- package/dist/scaffold/dsl-error.mjs +20 -0
- package/dist/scaffold/dsl-error.mjs.map +1 -0
- package/dist/scaffold/index.d.mts +12 -0
- package/dist/scaffold/manifest-dsl.cjs +188 -0
- package/dist/scaffold/manifest-dsl.d.cts +8 -0
- package/dist/scaffold/manifest-dsl.d.cts.map +1 -0
- package/dist/scaffold/manifest-dsl.d.mts +8 -0
- package/dist/scaffold/manifest-dsl.d.mts.map +1 -0
- package/dist/scaffold/manifest-dsl.mjs +188 -0
- package/dist/scaffold/manifest-dsl.mjs.map +1 -0
- package/dist/scaffold/module-dsl.cjs +284 -0
- package/dist/scaffold/module-dsl.d.cts +8 -0
- package/dist/scaffold/module-dsl.d.cts.map +1 -0
- package/dist/scaffold/module-dsl.d.mts +8 -0
- package/dist/scaffold/module-dsl.d.mts.map +1 -0
- package/dist/scaffold/module-dsl.mjs +284 -0
- package/dist/scaffold/module-dsl.mjs.map +1 -0
- package/dist/scaffold/resolver.cjs +156 -0
- package/dist/scaffold/resolver.d.cts +7 -0
- package/dist/scaffold/resolver.d.cts.map +1 -0
- package/dist/scaffold/resolver.d.mts +7 -0
- package/dist/scaffold/resolver.d.mts.map +1 -0
- package/dist/scaffold/resolver.mjs +156 -0
- package/dist/scaffold/resolver.mjs.map +1 -0
- package/dist/scaffold/runtime.cjs +24 -0
- package/dist/scaffold/runtime.d.cts +19 -0
- package/dist/scaffold/runtime.d.cts.map +1 -0
- package/dist/scaffold/runtime.d.mts +19 -0
- package/dist/scaffold/runtime.d.mts.map +1 -0
- package/dist/scaffold/runtime.mjs +25 -0
- package/dist/scaffold/runtime.mjs.map +1 -0
- package/dist/scaffold/shell-dsl.cjs +279 -0
- package/dist/scaffold/shell-dsl.d.cts +8 -0
- package/dist/scaffold/shell-dsl.d.cts.map +1 -0
- package/dist/scaffold/shell-dsl.d.mts +8 -0
- package/dist/scaffold/shell-dsl.d.mts.map +1 -0
- package/dist/scaffold/shell-dsl.mjs +279 -0
- package/dist/scaffold/shell-dsl.mjs.map +1 -0
- package/dist/scaffold/surface-dsl.cjs +182 -0
- package/dist/scaffold/surface-dsl.d.cts +8 -0
- package/dist/scaffold/surface-dsl.d.cts.map +1 -0
- package/dist/scaffold/surface-dsl.d.mts +8 -0
- package/dist/scaffold/surface-dsl.d.mts.map +1 -0
- package/dist/scaffold/surface-dsl.mjs +182 -0
- package/dist/scaffold/surface-dsl.mjs.map +1 -0
- package/dist/scaffold/surfaces.cjs +84 -0
- package/dist/scaffold/surfaces.d.cts +23 -0
- package/dist/scaffold/surfaces.d.cts.map +1 -0
- package/dist/scaffold/surfaces.d.mts +24 -0
- package/dist/scaffold/surfaces.d.mts.map +1 -0
- package/dist/scaffold/surfaces.mjs +84 -0
- package/dist/scaffold/surfaces.mjs.map +1 -0
- package/dist/scaffold/types.d.cts +264 -0
- package/dist/scaffold/types.d.cts.map +1 -0
- package/dist/scaffold/types.d.mts +265 -0
- package/dist/scaffold/types.d.mts.map +1 -0
- package/dist/scaffold/workspace-dsl.cjs +339 -0
- package/dist/scaffold/workspace-dsl.d.cts +49 -0
- package/dist/scaffold/workspace-dsl.d.cts.map +1 -0
- package/dist/scaffold/workspace-dsl.d.mts +49 -0
- package/dist/scaffold/workspace-dsl.d.mts.map +1 -0
- package/dist/scaffold/workspace-dsl.mjs +337 -0
- package/dist/scaffold/workspace-dsl.mjs.map +1 -0
- package/dist/scope/index.d.mts +3 -0
- package/dist/scope/read-blocklet-scope.cjs +29 -0
- package/dist/scope/read-blocklet-scope.d.cts +8 -0
- package/dist/scope/read-blocklet-scope.d.cts.map +1 -0
- package/dist/scope/read-blocklet-scope.d.mts +8 -0
- package/dist/scope/read-blocklet-scope.d.mts.map +1 -0
- package/dist/scope/read-blocklet-scope.mjs +30 -0
- package/dist/scope/read-blocklet-scope.mjs.map +1 -0
- package/dist/scope/resolve-scoped-afs.cjs +87 -0
- package/dist/scope/resolve-scoped-afs.d.cts +7 -0
- package/dist/scope/resolve-scoped-afs.d.cts.map +1 -0
- package/dist/scope/resolve-scoped-afs.d.mts +7 -0
- package/dist/scope/resolve-scoped-afs.d.mts.map +1 -0
- package/dist/scope/resolve-scoped-afs.mjs +88 -0
- package/dist/scope/resolve-scoped-afs.mjs.map +1 -0
- package/dist/scope/types.d.cts +25 -0
- package/dist/scope/types.d.cts.map +1 -0
- package/dist/scope/types.d.mts +25 -0
- package/dist/scope/types.d.mts.map +1 -0
- package/dist/session/backends.cjs +90 -0
- package/dist/session/backends.d.cts +35 -0
- package/dist/session/backends.d.cts.map +1 -0
- package/dist/session/backends.d.mts +35 -0
- package/dist/session/backends.d.mts.map +1 -0
- package/dist/session/backends.mjs +89 -0
- package/dist/session/backends.mjs.map +1 -0
- package/dist/session/replication-resolver.cjs +323 -0
- package/dist/session/replication-resolver.d.cts +71 -0
- package/dist/session/replication-resolver.d.cts.map +1 -0
- package/dist/session/replication-resolver.d.mts +71 -0
- package/dist/session/replication-resolver.d.mts.map +1 -0
- package/dist/session/replication-resolver.mjs +323 -0
- package/dist/session/replication-resolver.mjs.map +1 -0
- package/dist/session/role-level.cjs +36 -0
- package/dist/session/role-level.d.cts +24 -0
- package/dist/session/role-level.d.cts.map +1 -0
- package/dist/session/role-level.d.mts +24 -0
- package/dist/session/role-level.d.mts.map +1 -0
- package/dist/session/role-level.mjs +35 -0
- package/dist/session/role-level.mjs.map +1 -0
- package/dist/session/session-dir-providers.cjs +254 -0
- package/dist/session/session-dir-providers.d.cts +32 -0
- package/dist/session/session-dir-providers.d.cts.map +1 -0
- package/dist/session/session-dir-providers.d.mts +32 -0
- package/dist/session/session-dir-providers.d.mts.map +1 -0
- package/dist/session/session-dir-providers.mjs +252 -0
- package/dist/session/session-dir-providers.mjs.map +1 -0
- package/dist/session/session-id.cjs +20 -0
- package/dist/session/session-id.d.cts +15 -0
- package/dist/session/session-id.d.cts.map +1 -0
- package/dist/session/session-id.d.mts +15 -0
- package/dist/session/session-id.d.mts.map +1 -0
- package/dist/session/session-id.mjs +20 -0
- package/dist/session/session-id.mjs.map +1 -0
- package/dist/session/session-user-afs.cjs +899 -0
- package/dist/session/session-user-afs.d.cts +296 -0
- package/dist/session/session-user-afs.d.cts.map +1 -0
- package/dist/session/session-user-afs.d.mts +296 -0
- package/dist/session/session-user-afs.d.mts.map +1 -0
- package/dist/session/session-user-afs.mjs +896 -0
- package/dist/session/session-user-afs.mjs.map +1 -0
- package/dist/session/settings-cascade.cjs +69 -0
- package/dist/session/settings-cascade.d.cts +81 -0
- package/dist/session/settings-cascade.d.cts.map +1 -0
- package/dist/session/settings-cascade.d.mts +81 -0
- package/dist/session/settings-cascade.d.mts.map +1 -0
- package/dist/session/settings-cascade.mjs +69 -0
- package/dist/session/settings-cascade.mjs.map +1 -0
- package/dist/session/settings-resolver.cjs +770 -0
- package/dist/session/settings-resolver.d.cts +177 -0
- package/dist/session/settings-resolver.d.cts.map +1 -0
- package/dist/session/settings-resolver.d.mts +177 -0
- package/dist/session/settings-resolver.d.mts.map +1 -0
- package/dist/session/settings-resolver.mjs +771 -0
- package/dist/session/settings-resolver.mjs.map +1 -0
- package/dist/session/settings-schema-store.cjs +0 -0
- package/dist/session/settings-schema-store.d.cts +72 -0
- package/dist/session/settings-schema-store.d.cts.map +1 -0
- package/dist/session/settings-schema-store.d.mts +72 -0
- package/dist/session/settings-schema-store.d.mts.map +1 -0
- package/dist/session/settings-schema-store.mjs +0 -0
- package/dist/session/settings-schema-store.mjs.map +1 -0
- package/dist/system-mounts/index.cjs +14 -0
- package/dist/system-mounts/index.d.cts +6 -0
- package/dist/system-mounts/index.d.mts +6 -0
- package/dist/system-mounts/index.mjs +6 -0
- package/dist/system-mounts/install.cjs +101 -0
- package/dist/system-mounts/install.d.cts +36 -0
- package/dist/system-mounts/install.d.cts.map +1 -0
- package/dist/system-mounts/install.d.mts +37 -0
- package/dist/system-mounts/install.d.mts.map +1 -0
- package/dist/system-mounts/install.mjs +102 -0
- package/dist/system-mounts/install.mjs.map +1 -0
- package/dist/system-mounts/installers.cjs +247 -0
- package/dist/system-mounts/installers.d.cts +13 -0
- package/dist/system-mounts/installers.d.cts.map +1 -0
- package/dist/system-mounts/installers.d.mts +14 -0
- package/dist/system-mounts/installers.d.mts.map +1 -0
- package/dist/system-mounts/installers.mjs +244 -0
- package/dist/system-mounts/installers.mjs.map +1 -0
- package/dist/system-mounts/lists.cjs +122 -0
- package/dist/system-mounts/lists.d.cts +34 -0
- package/dist/system-mounts/lists.d.cts.map +1 -0
- package/dist/system-mounts/lists.d.mts +34 -0
- package/dist/system-mounts/lists.d.mts.map +1 -0
- package/dist/system-mounts/lists.mjs +122 -0
- package/dist/system-mounts/lists.mjs.map +1 -0
- package/dist/system-mounts/types.d.cts +124 -0
- package/dist/system-mounts/types.d.cts.map +1 -0
- package/dist/system-mounts/types.d.mts +125 -0
- package/dist/system-mounts/types.d.mts.map +1 -0
- package/dist/system-mounts/validate.cjs +56 -0
- package/dist/system-mounts/validate.d.cts +34 -0
- package/dist/system-mounts/validate.d.cts.map +1 -0
- package/dist/system-mounts/validate.d.mts +34 -0
- package/dist/system-mounts/validate.d.mts.map +1 -0
- package/dist/system-mounts/validate.mjs +56 -0
- package/dist/system-mounts/validate.mjs.map +1 -0
- package/dist/terminal-llm.cjs +90 -0
- package/dist/terminal-llm.d.cts +50 -0
- package/dist/terminal-llm.d.cts.map +1 -0
- package/dist/terminal-llm.d.mts +50 -0
- package/dist/terminal-llm.d.mts.map +1 -0
- package/dist/terminal-llm.mjs +90 -0
- package/dist/terminal-llm.mjs.map +1 -0
- package/dist/terminal-repl.cjs +371 -0
- package/dist/terminal-repl.d.cts +69 -0
- package/dist/terminal-repl.d.cts.map +1 -0
- package/dist/terminal-repl.d.mts +69 -0
- package/dist/terminal-repl.d.mts.map +1 -0
- package/dist/terminal-repl.mjs +370 -0
- package/dist/terminal-repl.mjs.map +1 -0
- package/dist/transport/idle-timer.cjs +136 -0
- package/dist/transport/idle-timer.d.cts +92 -0
- package/dist/transport/idle-timer.d.cts.map +1 -0
- package/dist/transport/idle-timer.d.mts +92 -0
- package/dist/transport/idle-timer.d.mts.map +1 -0
- package/dist/transport/idle-timer.mjs +132 -0
- package/dist/transport/idle-timer.mjs.map +1 -0
- package/dist/web-component-dsl.cjs +153 -0
- package/dist/web-component-dsl.d.cts +27 -0
- package/dist/web-component-dsl.d.cts.map +1 -0
- package/dist/web-component-dsl.d.mts +27 -0
- package/dist/web-component-dsl.d.mts.map +1 -0
- package/dist/web-component-dsl.mjs +152 -0
- package/dist/web-component-dsl.mjs.map +1 -0
- package/package.json +81 -0
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
import { AFSModule, AFSRoot, BlockletManifest } from "@aigne/afs";
|
|
2
|
+
|
|
3
|
+
//#region src/blocklet/types.d.ts
|
|
4
|
+
/** Information about a discovered blocklet. */
|
|
5
|
+
interface BlockletInfo {
|
|
6
|
+
/** Unique identifier (from manifest.id) */
|
|
7
|
+
id: string;
|
|
8
|
+
/** Human-readable name (from manifest.name) */
|
|
9
|
+
name: string;
|
|
10
|
+
/** Parsed manifest */
|
|
11
|
+
manifest: BlockletManifest;
|
|
12
|
+
/** Where the blocklet was discovered */
|
|
13
|
+
source: "local" | "embedded" | "remote";
|
|
14
|
+
/** Mount path in the global AFS namespace */
|
|
15
|
+
mountPath: string;
|
|
16
|
+
/** Filesystem path (Node only, for module: mounts) */
|
|
17
|
+
diskPath?: string;
|
|
18
|
+
}
|
|
19
|
+
/**
|
|
20
|
+
* Runtime-specific blocklet discovery and loading.
|
|
21
|
+
*
|
|
22
|
+
* Each runtime implements this:
|
|
23
|
+
* - Node: scans blocklets/ directory, uses dynamic import()
|
|
24
|
+
* - CF: reads from worker bundle or R2
|
|
25
|
+
*/
|
|
26
|
+
interface BlockletLoader {
|
|
27
|
+
/** Discover available blocklets */
|
|
28
|
+
discover(): Promise<BlockletInfo[]>;
|
|
29
|
+
/** Load a blocklet's provider module */
|
|
30
|
+
loadProvider(blockletId: string, providerSpec: string): Promise<AFSModule>;
|
|
31
|
+
}
|
|
32
|
+
/** Credential store abstraction — runtime provides vault-backed implementation. */
|
|
33
|
+
interface BlockletCredentialStore {
|
|
34
|
+
get(key: string): Promise<Record<string, string> | undefined>;
|
|
35
|
+
set(key: string, credentials: Record<string, string>): Promise<void>;
|
|
36
|
+
delete(key: string): Promise<boolean>;
|
|
37
|
+
}
|
|
38
|
+
/** Trigger specification discovered from ASH scripts. */
|
|
39
|
+
interface TriggerSpec {
|
|
40
|
+
kind: "event" | "cron";
|
|
41
|
+
scriptPath: string;
|
|
42
|
+
jobName: string;
|
|
43
|
+
path?: string;
|
|
44
|
+
event?: string;
|
|
45
|
+
expression?: string;
|
|
46
|
+
}
|
|
47
|
+
/**
|
|
48
|
+
* Platform-specific hooks injected by runtime during blocklet activation.
|
|
49
|
+
* All hooks are optional — missing hooks mean the feature is unavailable.
|
|
50
|
+
*/
|
|
51
|
+
interface ActivationHooks {
|
|
52
|
+
/** Called when a blocklet declares a domain binding */
|
|
53
|
+
onDomainBind?(blockletId: string, domain: string): Promise<void>;
|
|
54
|
+
/** Called when a blocklet's domain binding is removed */
|
|
55
|
+
onDomainUnbind?(blockletId: string, domain: string): Promise<void>;
|
|
56
|
+
/** Called when a blocklet needs credentials for a provider */
|
|
57
|
+
onCredentialNeeded?(blockletId: string, providerSpec: string): Promise<BlockletCredentialStore | null>;
|
|
58
|
+
/** Called when ASH triggers are discovered in a blocklet */
|
|
59
|
+
onTriggersDiscovered?(blockletId: string, triggers: TriggerSpec[]): void;
|
|
60
|
+
}
|
|
61
|
+
/** Internal state for an activated blocklet instance. */
|
|
62
|
+
interface ActivatedBlocklet {
|
|
63
|
+
info: BlockletInfo;
|
|
64
|
+
runtimeAFS: AFSRoot;
|
|
65
|
+
ownedProviders: AFSModule[];
|
|
66
|
+
domains: string[];
|
|
67
|
+
}
|
|
68
|
+
//#endregion
|
|
69
|
+
export { ActivatedBlocklet, ActivationHooks, BlockletCredentialStore, BlockletInfo, BlockletLoader, TriggerSpec };
|
|
70
|
+
//# sourceMappingURL=types.d.cts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.cts","names":[],"sources":["../../src/blocklet/types.ts"],"mappings":";;;;UAciB,YAAA;EAMf;EAJA,EAAA;EAMA;EAJA,IAAA;EAQA;EANA,QAAA,EAAU,gBAAA;EAMF;EAJR,MAAA;EAc6B;EAZ7B,SAAA;EAcoB;EAZpB,QAAA;AAAA;;;;;;;;UAUe,cAAA;EAKkB;EAHjC,QAAA,IAAY,OAAA,CAAQ,YAAA;EAG4C;EAAhE,YAAA,CAAa,UAAA,UAAoB,YAAA,WAAuB,OAAA,CAAQ,SAAA;AAAA;AAQlE;AAAA,UAAiB,uBAAA;EACf,GAAA,CAAI,GAAA,WAAc,OAAA,CAAQ,MAAA;EAC1B,GAAA,CAAI,GAAA,UAAa,WAAA,EAAa,MAAA,mBAAyB,OAAA;EACvD,MAAA,CAAO,GAAA,WAAc,OAAA;AAAA;;UAIN,WAAA;EACf,IAAA;EACA,UAAA;EACA,OAAA;EACA,IAAA;EACA,KAAA;EACA,UAAA;AAAA;;;;;UAOe,eAAA;EAjBR;EAmBP,YAAA,EAAc,UAAA,UAAoB,MAAA,WAAiB,OAAA;EAnBvB;EAqB5B,cAAA,EAAgB,UAAA,UAAoB,MAAA,WAAiB,OAAA;EAjBtC;EAmBf,kBAAA,EACE,UAAA,UACA,YAAA,WACC,OAAA,CAAQ,uBAAA;;EAEX,oBAAA,EAAsB,UAAA,UAAoB,QAAA,EAAU,WAAA;AAAA;;UAQrC,iBAAA;EACf,IAAA,EAAM,YAAA;EACN,UAAA,EAAY,OAAA;EACZ,cAAA,EAAgB,SAAA;EAChB,OAAA;AAAA"}
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
import { AFSModule, AFSRoot, BlockletManifest } from "@aigne/afs";
|
|
2
|
+
|
|
3
|
+
//#region src/blocklet/types.d.ts
|
|
4
|
+
/** Information about a discovered blocklet. */
|
|
5
|
+
interface BlockletInfo {
|
|
6
|
+
/** Unique identifier (from manifest.id) */
|
|
7
|
+
id: string;
|
|
8
|
+
/** Human-readable name (from manifest.name) */
|
|
9
|
+
name: string;
|
|
10
|
+
/** Parsed manifest */
|
|
11
|
+
manifest: BlockletManifest;
|
|
12
|
+
/** Where the blocklet was discovered */
|
|
13
|
+
source: "local" | "embedded" | "remote";
|
|
14
|
+
/** Mount path in the global AFS namespace */
|
|
15
|
+
mountPath: string;
|
|
16
|
+
/** Filesystem path (Node only, for module: mounts) */
|
|
17
|
+
diskPath?: string;
|
|
18
|
+
}
|
|
19
|
+
/**
|
|
20
|
+
* Runtime-specific blocklet discovery and loading.
|
|
21
|
+
*
|
|
22
|
+
* Each runtime implements this:
|
|
23
|
+
* - Node: scans blocklets/ directory, uses dynamic import()
|
|
24
|
+
* - CF: reads from worker bundle or R2
|
|
25
|
+
*/
|
|
26
|
+
interface BlockletLoader {
|
|
27
|
+
/** Discover available blocklets */
|
|
28
|
+
discover(): Promise<BlockletInfo[]>;
|
|
29
|
+
/** Load a blocklet's provider module */
|
|
30
|
+
loadProvider(blockletId: string, providerSpec: string): Promise<AFSModule>;
|
|
31
|
+
}
|
|
32
|
+
/** Credential store abstraction — runtime provides vault-backed implementation. */
|
|
33
|
+
interface BlockletCredentialStore {
|
|
34
|
+
get(key: string): Promise<Record<string, string> | undefined>;
|
|
35
|
+
set(key: string, credentials: Record<string, string>): Promise<void>;
|
|
36
|
+
delete(key: string): Promise<boolean>;
|
|
37
|
+
}
|
|
38
|
+
/** Trigger specification discovered from ASH scripts. */
|
|
39
|
+
interface TriggerSpec {
|
|
40
|
+
kind: "event" | "cron";
|
|
41
|
+
scriptPath: string;
|
|
42
|
+
jobName: string;
|
|
43
|
+
path?: string;
|
|
44
|
+
event?: string;
|
|
45
|
+
expression?: string;
|
|
46
|
+
}
|
|
47
|
+
/**
|
|
48
|
+
* Platform-specific hooks injected by runtime during blocklet activation.
|
|
49
|
+
* All hooks are optional — missing hooks mean the feature is unavailable.
|
|
50
|
+
*/
|
|
51
|
+
interface ActivationHooks {
|
|
52
|
+
/** Called when a blocklet declares a domain binding */
|
|
53
|
+
onDomainBind?(blockletId: string, domain: string): Promise<void>;
|
|
54
|
+
/** Called when a blocklet's domain binding is removed */
|
|
55
|
+
onDomainUnbind?(blockletId: string, domain: string): Promise<void>;
|
|
56
|
+
/** Called when a blocklet needs credentials for a provider */
|
|
57
|
+
onCredentialNeeded?(blockletId: string, providerSpec: string): Promise<BlockletCredentialStore | null>;
|
|
58
|
+
/** Called when ASH triggers are discovered in a blocklet */
|
|
59
|
+
onTriggersDiscovered?(blockletId: string, triggers: TriggerSpec[]): void;
|
|
60
|
+
}
|
|
61
|
+
/** Internal state for an activated blocklet instance. */
|
|
62
|
+
interface ActivatedBlocklet {
|
|
63
|
+
info: BlockletInfo;
|
|
64
|
+
runtimeAFS: AFSRoot;
|
|
65
|
+
ownedProviders: AFSModule[];
|
|
66
|
+
domains: string[];
|
|
67
|
+
}
|
|
68
|
+
//#endregion
|
|
69
|
+
export { ActivatedBlocklet, ActivationHooks, BlockletCredentialStore, BlockletInfo, BlockletLoader, TriggerSpec };
|
|
70
|
+
//# sourceMappingURL=types.d.mts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.mts","names":[],"sources":["../../src/blocklet/types.ts"],"mappings":";;;;UAciB,YAAA;EAMf;EAJA,EAAA;EAMA;EAJA,IAAA;EAQA;EANA,QAAA,EAAU,gBAAA;EAMF;EAJR,MAAA;EAc6B;EAZ7B,SAAA;EAcoB;EAZpB,QAAA;AAAA;;;;;;;;UAUe,cAAA;EAKkB;EAHjC,QAAA,IAAY,OAAA,CAAQ,YAAA;EAG4C;EAAhE,YAAA,CAAa,UAAA,UAAoB,YAAA,WAAuB,OAAA,CAAQ,SAAA;AAAA;AAQlE;AAAA,UAAiB,uBAAA;EACf,GAAA,CAAI,GAAA,WAAc,OAAA,CAAQ,MAAA;EAC1B,GAAA,CAAI,GAAA,UAAa,WAAA,EAAa,MAAA,mBAAyB,OAAA;EACvD,MAAA,CAAO,GAAA,WAAc,OAAA;AAAA;;UAIN,WAAA;EACf,IAAA;EACA,UAAA;EACA,OAAA;EACA,IAAA;EACA,KAAA;EACA,UAAA;AAAA;;;;;UAOe,eAAA;EAjBR;EAmBP,YAAA,EAAc,UAAA,UAAoB,MAAA,WAAiB,OAAA;EAnBvB;EAqB5B,cAAA,EAAgB,UAAA,UAAoB,MAAA,WAAiB,OAAA;EAjBtC;EAmBf,kBAAA,EACE,UAAA,UACA,YAAA,WACC,OAAA,CAAQ,uBAAA;;EAEX,oBAAA,EAAsB,UAAA,UAAoB,QAAA,EAAU,WAAA;AAAA;;UAQrC,iBAAA;EACf,IAAA,EAAM,YAAA;EACN,UAAA,EAAY,OAAA;EACZ,cAAA,EAAgB,SAAA;EAChB,OAAA;AAAA"}
|
|
@@ -0,0 +1,127 @@
|
|
|
1
|
+
let ufo = require("ufo");
|
|
2
|
+
|
|
3
|
+
//#region src/devices/chain.ts
|
|
4
|
+
/**
|
|
5
|
+
* Chain device helpers.
|
|
6
|
+
*
|
|
7
|
+
* Phase 1 of `planning/chain-as-device-placement` — pure helpers for
|
|
8
|
+
* normalizing chain network configurations into AFS `MountEntry` form.
|
|
9
|
+
*
|
|
10
|
+
* Source contracts:
|
|
11
|
+
* - `planning/chain-as-device-placement/schema.md` §三 / §四 (decisions)
|
|
12
|
+
* - `planning/chain-as-device-placement/README.md` §3.5 / §3.6 (rules)
|
|
13
|
+
* - `docs/architecture/chain-as-device.md` §4.2 (placement)
|
|
14
|
+
*
|
|
15
|
+
* Helpers are runtime-agnostic: Node daemon and CF worker both consume them.
|
|
16
|
+
* They do NOT instantiate AFSOCAP nor mount anything — that lives in
|
|
17
|
+
* runtime-specific setup glue (Phase 2 / 5).
|
|
18
|
+
*/
|
|
19
|
+
/** Mount path prefix for chain devices: `/dev/chain`. */
|
|
20
|
+
const CHAIN_DEVICE_PREFIX = "/dev/chain";
|
|
21
|
+
const MAX_NETWORK_NAME_LENGTH = 128;
|
|
22
|
+
const MAX_ENDPOINT_LENGTH = 2048;
|
|
23
|
+
const MAX_CONFIGS_LENGTH = 1e3;
|
|
24
|
+
const NETWORK_NAME_RE = /^[a-z][a-z0-9-]*$/;
|
|
25
|
+
const RESERVED_NETWORK_NAMES = new Set([
|
|
26
|
+
"__proto__",
|
|
27
|
+
"constructor",
|
|
28
|
+
"prototype"
|
|
29
|
+
]);
|
|
30
|
+
const ALLOWED_ENDPOINT_SCHEMES = new Set(["http:", "https:"]);
|
|
31
|
+
/**
|
|
32
|
+
* Built-in default networks injected when no user configuration is provided.
|
|
33
|
+
*
|
|
34
|
+
* Deeply frozen (array + each element) so accidental mutation throws in
|
|
35
|
+
* strict mode rather than silently corrupting shared defaults.
|
|
36
|
+
*/
|
|
37
|
+
const BUILTIN_CHAIN_NETWORKS = Object.freeze([Object.freeze({
|
|
38
|
+
network: "main",
|
|
39
|
+
endpoint: "https://main.abtnetwork.io/api"
|
|
40
|
+
}), Object.freeze({
|
|
41
|
+
network: "beta",
|
|
42
|
+
endpoint: "https://beta.abtnetwork.io/api"
|
|
43
|
+
})]);
|
|
44
|
+
/**
|
|
45
|
+
* Sanitize a value for inclusion in error messages: truncate long input and
|
|
46
|
+
* escape control characters so a hostile name cannot smuggle ANSI escapes
|
|
47
|
+
* or null bytes into log lines.
|
|
48
|
+
*/
|
|
49
|
+
function safeLabel(value, max = 64) {
|
|
50
|
+
const str = typeof value === "string" ? value : String(value);
|
|
51
|
+
const truncated = str.length > max ? `${str.slice(0, max)}…` : str;
|
|
52
|
+
let out = "";
|
|
53
|
+
for (let i = 0; i < truncated.length; i++) {
|
|
54
|
+
const code = truncated.charCodeAt(i);
|
|
55
|
+
if (code < 32 || code === 127) out += `\\x${code.toString(16).padStart(2, "0")}`;
|
|
56
|
+
else out += truncated[i];
|
|
57
|
+
}
|
|
58
|
+
return out;
|
|
59
|
+
}
|
|
60
|
+
function validateNetwork(value) {
|
|
61
|
+
if (typeof value !== "string") throw new Error(`network must be a string, got ${typeof value}`);
|
|
62
|
+
if (value.length === 0) throw new Error("network name must be non-empty");
|
|
63
|
+
if (value.length > MAX_NETWORK_NAME_LENGTH) throw new Error(`network name too long: ${value.length} > ${MAX_NETWORK_NAME_LENGTH}`);
|
|
64
|
+
if (RESERVED_NETWORK_NAMES.has(value)) throw new Error(`network "${safeLabel(value)}" is a reserved identifier`);
|
|
65
|
+
if (!NETWORK_NAME_RE.test(value)) throw new Error(`network "${safeLabel(value)}" invalid: must match ^[a-z][a-z0-9-]*$`);
|
|
66
|
+
return value;
|
|
67
|
+
}
|
|
68
|
+
function validateEndpoint(endpoint, network) {
|
|
69
|
+
if (typeof endpoint !== "string") throw new Error(`endpoint must be a string for network "${safeLabel(network)}"`);
|
|
70
|
+
if (endpoint.length === 0) throw new Error(`endpoint required for network "${safeLabel(network)}"`);
|
|
71
|
+
if (endpoint.length > MAX_ENDPOINT_LENGTH) throw new Error(`endpoint too long: ${endpoint.length} > ${MAX_ENDPOINT_LENGTH}`);
|
|
72
|
+
let url;
|
|
73
|
+
try {
|
|
74
|
+
url = new URL(endpoint);
|
|
75
|
+
} catch {
|
|
76
|
+
throw new Error(`endpoint for network "${safeLabel(network)}" is not a valid URL`);
|
|
77
|
+
}
|
|
78
|
+
if (!ALLOWED_ENDPOINT_SCHEMES.has(url.protocol)) {
|
|
79
|
+
const scheme = url.protocol.replace(/:$/, "");
|
|
80
|
+
throw new Error(`endpoint scheme not allowed: ${safeLabel(scheme, 16)}`);
|
|
81
|
+
}
|
|
82
|
+
if (url.username || url.password) throw new Error("endpoint must not contain basic auth credentials");
|
|
83
|
+
}
|
|
84
|
+
/**
|
|
85
|
+
* Validate an array of `ChainNetworkConfig`.
|
|
86
|
+
*
|
|
87
|
+
* Throws a standard `Error` on any violation. Error messages are
|
|
88
|
+
* sanitized — they never include the path / query string / fragment of an
|
|
89
|
+
* endpoint, so a misconfigured token cannot leak into daemon logs.
|
|
90
|
+
*
|
|
91
|
+
* Pure function: input array and elements are not mutated.
|
|
92
|
+
*/
|
|
93
|
+
function validateChainNetworks(configs) {
|
|
94
|
+
if (!Array.isArray(configs)) throw new Error("chain configs must be an array");
|
|
95
|
+
if (configs.length > MAX_CONFIGS_LENGTH) throw new Error(`chain configs exceed limit: ${configs.length} > ${MAX_CONFIGS_LENGTH}`);
|
|
96
|
+
const seen = /* @__PURE__ */ new Set();
|
|
97
|
+
for (let i = 0; i < configs.length; i++) {
|
|
98
|
+
const cfg = configs[i];
|
|
99
|
+
if (cfg === null || typeof cfg !== "object") throw new Error(`chain configs[${i}] must be an object`);
|
|
100
|
+
const name = validateNetwork(cfg.network);
|
|
101
|
+
validateEndpoint(cfg.endpoint, name);
|
|
102
|
+
if (seen.has(name)) throw new Error(`network "${safeLabel(name)}" duplicated`);
|
|
103
|
+
seen.add(name);
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
/**
|
|
107
|
+
* Normalize one `ChainNetworkConfig` to a `MountEntry`.
|
|
108
|
+
*
|
|
109
|
+
* Pure function: the input config is not mutated, and each call returns a
|
|
110
|
+
* fresh independent `MountEntry` with no shared object references.
|
|
111
|
+
*
|
|
112
|
+
* Validation is the caller's responsibility — invoke
|
|
113
|
+
* `validateChainNetworks` before normalization in setup paths.
|
|
114
|
+
*/
|
|
115
|
+
function chainNetworkToMountEntry(cfg) {
|
|
116
|
+
return {
|
|
117
|
+
path: (0, ufo.joinURL)(CHAIN_DEVICE_PREFIX, cfg.network),
|
|
118
|
+
provider: "ocap",
|
|
119
|
+
options: { endpoint: cfg.endpoint }
|
|
120
|
+
};
|
|
121
|
+
}
|
|
122
|
+
|
|
123
|
+
//#endregion
|
|
124
|
+
exports.BUILTIN_CHAIN_NETWORKS = BUILTIN_CHAIN_NETWORKS;
|
|
125
|
+
exports.CHAIN_DEVICE_PREFIX = CHAIN_DEVICE_PREFIX;
|
|
126
|
+
exports.chainNetworkToMountEntry = chainNetworkToMountEntry;
|
|
127
|
+
exports.validateChainNetworks = validateChainNetworks;
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
import { MountEntry } from "../mount-config.cjs";
|
|
2
|
+
|
|
3
|
+
//#region src/devices/chain.d.ts
|
|
4
|
+
/** Mount path prefix for chain devices: `/dev/chain`. */
|
|
5
|
+
declare const CHAIN_DEVICE_PREFIX = "/dev/chain";
|
|
6
|
+
/**
|
|
7
|
+
* One chain network configuration entry.
|
|
8
|
+
*
|
|
9
|
+
* Cross-runtime contract: the same shape is consumed by the Node daemon
|
|
10
|
+
* (`[[devices.chain]]` TOML section) and CF worker (post-normalization of
|
|
11
|
+
* `AFS_MOUNTS`). See schema.md §3.3 for the normalization table.
|
|
12
|
+
*/
|
|
13
|
+
interface ChainNetworkConfig {
|
|
14
|
+
/** Network name. Must match `^[a-z][a-z0-9-]*$`, ≤128 chars. */
|
|
15
|
+
network: string;
|
|
16
|
+
/** OCAP HTTP endpoint URL. Scheme ∈ {http, https}, ≤2048 chars, no basic auth. */
|
|
17
|
+
endpoint: string;
|
|
18
|
+
}
|
|
19
|
+
/**
|
|
20
|
+
* Built-in default networks injected when no user configuration is provided.
|
|
21
|
+
*
|
|
22
|
+
* Deeply frozen (array + each element) so accidental mutation throws in
|
|
23
|
+
* strict mode rather than silently corrupting shared defaults.
|
|
24
|
+
*/
|
|
25
|
+
declare const BUILTIN_CHAIN_NETWORKS: readonly ChainNetworkConfig[];
|
|
26
|
+
/**
|
|
27
|
+
* Validate an array of `ChainNetworkConfig`.
|
|
28
|
+
*
|
|
29
|
+
* Throws a standard `Error` on any violation. Error messages are
|
|
30
|
+
* sanitized — they never include the path / query string / fragment of an
|
|
31
|
+
* endpoint, so a misconfigured token cannot leak into daemon logs.
|
|
32
|
+
*
|
|
33
|
+
* Pure function: input array and elements are not mutated.
|
|
34
|
+
*/
|
|
35
|
+
declare function validateChainNetworks(configs: ChainNetworkConfig[]): void;
|
|
36
|
+
/**
|
|
37
|
+
* Normalize one `ChainNetworkConfig` to a `MountEntry`.
|
|
38
|
+
*
|
|
39
|
+
* Pure function: the input config is not mutated, and each call returns a
|
|
40
|
+
* fresh independent `MountEntry` with no shared object references.
|
|
41
|
+
*
|
|
42
|
+
* Validation is the caller's responsibility — invoke
|
|
43
|
+
* `validateChainNetworks` before normalization in setup paths.
|
|
44
|
+
*/
|
|
45
|
+
declare function chainNetworkToMountEntry(cfg: ChainNetworkConfig): MountEntry;
|
|
46
|
+
//#endregion
|
|
47
|
+
export { BUILTIN_CHAIN_NETWORKS, CHAIN_DEVICE_PREFIX, ChainNetworkConfig, chainNetworkToMountEntry, validateChainNetworks };
|
|
48
|
+
//# sourceMappingURL=chain.d.cts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"chain.d.cts","names":[],"sources":["../../src/devices/chain.ts"],"mappings":";;;;cAoBa,mBAAA;AAkHb;;;;;AAgCA;;AAhCA,UA9FiB,kBAAA;EA8H4D;EA5H3E,OAAA;EA4HuC;EA1HvC,QAAA;AAAA;;;;;;;cASW,sBAAA,WAAiC,kBAAA;;;;;;;;;;iBAiF9B,qBAAA,CAAsB,OAAA,EAAS,kBAAA;;;;;;;;;;iBAgC/B,wBAAA,CAAyB,GAAA,EAAK,kBAAA,GAAqB,UAAA"}
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
import { MountEntry } from "../mount-config.mjs";
|
|
2
|
+
|
|
3
|
+
//#region src/devices/chain.d.ts
|
|
4
|
+
/** Mount path prefix for chain devices: `/dev/chain`. */
|
|
5
|
+
declare const CHAIN_DEVICE_PREFIX = "/dev/chain";
|
|
6
|
+
/**
|
|
7
|
+
* One chain network configuration entry.
|
|
8
|
+
*
|
|
9
|
+
* Cross-runtime contract: the same shape is consumed by the Node daemon
|
|
10
|
+
* (`[[devices.chain]]` TOML section) and CF worker (post-normalization of
|
|
11
|
+
* `AFS_MOUNTS`). See schema.md §3.3 for the normalization table.
|
|
12
|
+
*/
|
|
13
|
+
interface ChainNetworkConfig {
|
|
14
|
+
/** Network name. Must match `^[a-z][a-z0-9-]*$`, ≤128 chars. */
|
|
15
|
+
network: string;
|
|
16
|
+
/** OCAP HTTP endpoint URL. Scheme ∈ {http, https}, ≤2048 chars, no basic auth. */
|
|
17
|
+
endpoint: string;
|
|
18
|
+
}
|
|
19
|
+
/**
|
|
20
|
+
* Built-in default networks injected when no user configuration is provided.
|
|
21
|
+
*
|
|
22
|
+
* Deeply frozen (array + each element) so accidental mutation throws in
|
|
23
|
+
* strict mode rather than silently corrupting shared defaults.
|
|
24
|
+
*/
|
|
25
|
+
declare const BUILTIN_CHAIN_NETWORKS: readonly ChainNetworkConfig[];
|
|
26
|
+
/**
|
|
27
|
+
* Validate an array of `ChainNetworkConfig`.
|
|
28
|
+
*
|
|
29
|
+
* Throws a standard `Error` on any violation. Error messages are
|
|
30
|
+
* sanitized — they never include the path / query string / fragment of an
|
|
31
|
+
* endpoint, so a misconfigured token cannot leak into daemon logs.
|
|
32
|
+
*
|
|
33
|
+
* Pure function: input array and elements are not mutated.
|
|
34
|
+
*/
|
|
35
|
+
declare function validateChainNetworks(configs: ChainNetworkConfig[]): void;
|
|
36
|
+
/**
|
|
37
|
+
* Normalize one `ChainNetworkConfig` to a `MountEntry`.
|
|
38
|
+
*
|
|
39
|
+
* Pure function: the input config is not mutated, and each call returns a
|
|
40
|
+
* fresh independent `MountEntry` with no shared object references.
|
|
41
|
+
*
|
|
42
|
+
* Validation is the caller's responsibility — invoke
|
|
43
|
+
* `validateChainNetworks` before normalization in setup paths.
|
|
44
|
+
*/
|
|
45
|
+
declare function chainNetworkToMountEntry(cfg: ChainNetworkConfig): MountEntry;
|
|
46
|
+
//#endregion
|
|
47
|
+
export { BUILTIN_CHAIN_NETWORKS, CHAIN_DEVICE_PREFIX, ChainNetworkConfig, chainNetworkToMountEntry, validateChainNetworks };
|
|
48
|
+
//# sourceMappingURL=chain.d.mts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"chain.d.mts","names":[],"sources":["../../src/devices/chain.ts"],"mappings":";;;;cAoBa,mBAAA;AAkHb;;;;;AAgCA;;AAhCA,UA9FiB,kBAAA;EA8H4D;EA5H3E,OAAA;EA4HuC;EA1HvC,QAAA;AAAA;;;;;;;cASW,sBAAA,WAAiC,kBAAA;;;;;;;;;;iBAiF9B,qBAAA,CAAsB,OAAA,EAAS,kBAAA;;;;;;;;;;iBAgC/B,wBAAA,CAAyB,GAAA,EAAK,kBAAA,GAAqB,UAAA"}
|
|
@@ -0,0 +1,125 @@
|
|
|
1
|
+
import { joinURL } from "ufo";
|
|
2
|
+
|
|
3
|
+
//#region src/devices/chain.ts
|
|
4
|
+
/**
|
|
5
|
+
* Chain device helpers.
|
|
6
|
+
*
|
|
7
|
+
* Phase 1 of `planning/chain-as-device-placement` — pure helpers for
|
|
8
|
+
* normalizing chain network configurations into AFS `MountEntry` form.
|
|
9
|
+
*
|
|
10
|
+
* Source contracts:
|
|
11
|
+
* - `planning/chain-as-device-placement/schema.md` §三 / §四 (decisions)
|
|
12
|
+
* - `planning/chain-as-device-placement/README.md` §3.5 / §3.6 (rules)
|
|
13
|
+
* - `docs/architecture/chain-as-device.md` §4.2 (placement)
|
|
14
|
+
*
|
|
15
|
+
* Helpers are runtime-agnostic: Node daemon and CF worker both consume them.
|
|
16
|
+
* They do NOT instantiate AFSOCAP nor mount anything — that lives in
|
|
17
|
+
* runtime-specific setup glue (Phase 2 / 5).
|
|
18
|
+
*/
|
|
19
|
+
/** Mount path prefix for chain devices: `/dev/chain`. */
|
|
20
|
+
const CHAIN_DEVICE_PREFIX = "/dev/chain";
|
|
21
|
+
const MAX_NETWORK_NAME_LENGTH = 128;
|
|
22
|
+
const MAX_ENDPOINT_LENGTH = 2048;
|
|
23
|
+
const MAX_CONFIGS_LENGTH = 1e3;
|
|
24
|
+
const NETWORK_NAME_RE = /^[a-z][a-z0-9-]*$/;
|
|
25
|
+
const RESERVED_NETWORK_NAMES = new Set([
|
|
26
|
+
"__proto__",
|
|
27
|
+
"constructor",
|
|
28
|
+
"prototype"
|
|
29
|
+
]);
|
|
30
|
+
const ALLOWED_ENDPOINT_SCHEMES = new Set(["http:", "https:"]);
|
|
31
|
+
/**
|
|
32
|
+
* Built-in default networks injected when no user configuration is provided.
|
|
33
|
+
*
|
|
34
|
+
* Deeply frozen (array + each element) so accidental mutation throws in
|
|
35
|
+
* strict mode rather than silently corrupting shared defaults.
|
|
36
|
+
*/
|
|
37
|
+
const BUILTIN_CHAIN_NETWORKS = Object.freeze([Object.freeze({
|
|
38
|
+
network: "main",
|
|
39
|
+
endpoint: "https://main.abtnetwork.io/api"
|
|
40
|
+
}), Object.freeze({
|
|
41
|
+
network: "beta",
|
|
42
|
+
endpoint: "https://beta.abtnetwork.io/api"
|
|
43
|
+
})]);
|
|
44
|
+
/**
|
|
45
|
+
* Sanitize a value for inclusion in error messages: truncate long input and
|
|
46
|
+
* escape control characters so a hostile name cannot smuggle ANSI escapes
|
|
47
|
+
* or null bytes into log lines.
|
|
48
|
+
*/
|
|
49
|
+
function safeLabel(value, max = 64) {
|
|
50
|
+
const str = typeof value === "string" ? value : String(value);
|
|
51
|
+
const truncated = str.length > max ? `${str.slice(0, max)}…` : str;
|
|
52
|
+
let out = "";
|
|
53
|
+
for (let i = 0; i < truncated.length; i++) {
|
|
54
|
+
const code = truncated.charCodeAt(i);
|
|
55
|
+
if (code < 32 || code === 127) out += `\\x${code.toString(16).padStart(2, "0")}`;
|
|
56
|
+
else out += truncated[i];
|
|
57
|
+
}
|
|
58
|
+
return out;
|
|
59
|
+
}
|
|
60
|
+
function validateNetwork(value) {
|
|
61
|
+
if (typeof value !== "string") throw new Error(`network must be a string, got ${typeof value}`);
|
|
62
|
+
if (value.length === 0) throw new Error("network name must be non-empty");
|
|
63
|
+
if (value.length > MAX_NETWORK_NAME_LENGTH) throw new Error(`network name too long: ${value.length} > ${MAX_NETWORK_NAME_LENGTH}`);
|
|
64
|
+
if (RESERVED_NETWORK_NAMES.has(value)) throw new Error(`network "${safeLabel(value)}" is a reserved identifier`);
|
|
65
|
+
if (!NETWORK_NAME_RE.test(value)) throw new Error(`network "${safeLabel(value)}" invalid: must match ^[a-z][a-z0-9-]*$`);
|
|
66
|
+
return value;
|
|
67
|
+
}
|
|
68
|
+
function validateEndpoint(endpoint, network) {
|
|
69
|
+
if (typeof endpoint !== "string") throw new Error(`endpoint must be a string for network "${safeLabel(network)}"`);
|
|
70
|
+
if (endpoint.length === 0) throw new Error(`endpoint required for network "${safeLabel(network)}"`);
|
|
71
|
+
if (endpoint.length > MAX_ENDPOINT_LENGTH) throw new Error(`endpoint too long: ${endpoint.length} > ${MAX_ENDPOINT_LENGTH}`);
|
|
72
|
+
let url;
|
|
73
|
+
try {
|
|
74
|
+
url = new URL(endpoint);
|
|
75
|
+
} catch {
|
|
76
|
+
throw new Error(`endpoint for network "${safeLabel(network)}" is not a valid URL`);
|
|
77
|
+
}
|
|
78
|
+
if (!ALLOWED_ENDPOINT_SCHEMES.has(url.protocol)) {
|
|
79
|
+
const scheme = url.protocol.replace(/:$/, "");
|
|
80
|
+
throw new Error(`endpoint scheme not allowed: ${safeLabel(scheme, 16)}`);
|
|
81
|
+
}
|
|
82
|
+
if (url.username || url.password) throw new Error("endpoint must not contain basic auth credentials");
|
|
83
|
+
}
|
|
84
|
+
/**
|
|
85
|
+
* Validate an array of `ChainNetworkConfig`.
|
|
86
|
+
*
|
|
87
|
+
* Throws a standard `Error` on any violation. Error messages are
|
|
88
|
+
* sanitized — they never include the path / query string / fragment of an
|
|
89
|
+
* endpoint, so a misconfigured token cannot leak into daemon logs.
|
|
90
|
+
*
|
|
91
|
+
* Pure function: input array and elements are not mutated.
|
|
92
|
+
*/
|
|
93
|
+
function validateChainNetworks(configs) {
|
|
94
|
+
if (!Array.isArray(configs)) throw new Error("chain configs must be an array");
|
|
95
|
+
if (configs.length > MAX_CONFIGS_LENGTH) throw new Error(`chain configs exceed limit: ${configs.length} > ${MAX_CONFIGS_LENGTH}`);
|
|
96
|
+
const seen = /* @__PURE__ */ new Set();
|
|
97
|
+
for (let i = 0; i < configs.length; i++) {
|
|
98
|
+
const cfg = configs[i];
|
|
99
|
+
if (cfg === null || typeof cfg !== "object") throw new Error(`chain configs[${i}] must be an object`);
|
|
100
|
+
const name = validateNetwork(cfg.network);
|
|
101
|
+
validateEndpoint(cfg.endpoint, name);
|
|
102
|
+
if (seen.has(name)) throw new Error(`network "${safeLabel(name)}" duplicated`);
|
|
103
|
+
seen.add(name);
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
/**
|
|
107
|
+
* Normalize one `ChainNetworkConfig` to a `MountEntry`.
|
|
108
|
+
*
|
|
109
|
+
* Pure function: the input config is not mutated, and each call returns a
|
|
110
|
+
* fresh independent `MountEntry` with no shared object references.
|
|
111
|
+
*
|
|
112
|
+
* Validation is the caller's responsibility — invoke
|
|
113
|
+
* `validateChainNetworks` before normalization in setup paths.
|
|
114
|
+
*/
|
|
115
|
+
function chainNetworkToMountEntry(cfg) {
|
|
116
|
+
return {
|
|
117
|
+
path: joinURL(CHAIN_DEVICE_PREFIX, cfg.network),
|
|
118
|
+
provider: "ocap",
|
|
119
|
+
options: { endpoint: cfg.endpoint }
|
|
120
|
+
};
|
|
121
|
+
}
|
|
122
|
+
|
|
123
|
+
//#endregion
|
|
124
|
+
export { BUILTIN_CHAIN_NETWORKS, CHAIN_DEVICE_PREFIX, chainNetworkToMountEntry, validateChainNetworks };
|
|
125
|
+
//# sourceMappingURL=chain.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"chain.mjs","names":[],"sources":["../../src/devices/chain.ts"],"sourcesContent":["/**\n * Chain device helpers.\n *\n * Phase 1 of `planning/chain-as-device-placement` — pure helpers for\n * normalizing chain network configurations into AFS `MountEntry` form.\n *\n * Source contracts:\n * - `planning/chain-as-device-placement/schema.md` §三 / §四 (decisions)\n * - `planning/chain-as-device-placement/README.md` §3.5 / §3.6 (rules)\n * - `docs/architecture/chain-as-device.md` §4.2 (placement)\n *\n * Helpers are runtime-agnostic: Node daemon and CF worker both consume them.\n * They do NOT instantiate AFSOCAP nor mount anything — that lives in\n * runtime-specific setup glue (Phase 2 / 5).\n */\n\nimport { joinURL } from \"ufo\";\nimport type { MountEntry } from \"../mount-config.js\";\n\n/** Mount path prefix for chain devices: `/dev/chain`. */\nexport const CHAIN_DEVICE_PREFIX = \"/dev/chain\";\n\nconst MAX_NETWORK_NAME_LENGTH = 128;\nconst MAX_ENDPOINT_LENGTH = 2048;\nconst MAX_CONFIGS_LENGTH = 1000;\nconst NETWORK_NAME_RE = /^[a-z][a-z0-9-]*$/;\nconst RESERVED_NETWORK_NAMES: ReadonlySet<string> = new Set([\n \"__proto__\",\n \"constructor\",\n \"prototype\",\n]);\nconst ALLOWED_ENDPOINT_SCHEMES: ReadonlySet<string> = new Set([\"http:\", \"https:\"]);\n\n/**\n * One chain network configuration entry.\n *\n * Cross-runtime contract: the same shape is consumed by the Node daemon\n * (`[[devices.chain]]` TOML section) and CF worker (post-normalization of\n * `AFS_MOUNTS`). See schema.md §3.3 for the normalization table.\n */\nexport interface ChainNetworkConfig {\n /** Network name. Must match `^[a-z][a-z0-9-]*$`, ≤128 chars. */\n network: string;\n /** OCAP HTTP endpoint URL. Scheme ∈ {http, https}, ≤2048 chars, no basic auth. */\n endpoint: string;\n}\n\n/**\n * Built-in default networks injected when no user configuration is provided.\n *\n * Deeply frozen (array + each element) so accidental mutation throws in\n * strict mode rather than silently corrupting shared defaults.\n */\nexport const BUILTIN_CHAIN_NETWORKS: readonly ChainNetworkConfig[] = Object.freeze([\n Object.freeze({ network: \"main\", endpoint: \"https://main.abtnetwork.io/api\" }),\n Object.freeze({ network: \"beta\", endpoint: \"https://beta.abtnetwork.io/api\" }),\n]);\n\n/**\n * Sanitize a value for inclusion in error messages: truncate long input and\n * escape control characters so a hostile name cannot smuggle ANSI escapes\n * or null bytes into log lines.\n */\nfunction safeLabel(value: unknown, max = 64): string {\n const str = typeof value === \"string\" ? value : String(value);\n const truncated = str.length > max ? `${str.slice(0, max)}…` : str;\n let out = \"\";\n for (let i = 0; i < truncated.length; i++) {\n const code = truncated.charCodeAt(i);\n if (code < 0x20 || code === 0x7f) {\n out += `\\\\x${code.toString(16).padStart(2, \"0\")}`;\n } else {\n out += truncated[i];\n }\n }\n return out;\n}\n\nfunction validateNetwork(value: unknown): string {\n if (typeof value !== \"string\") {\n throw new Error(`network must be a string, got ${typeof value}`);\n }\n if (value.length === 0) {\n throw new Error(\"network name must be non-empty\");\n }\n if (value.length > MAX_NETWORK_NAME_LENGTH) {\n throw new Error(`network name too long: ${value.length} > ${MAX_NETWORK_NAME_LENGTH}`);\n }\n if (RESERVED_NETWORK_NAMES.has(value)) {\n throw new Error(`network \"${safeLabel(value)}\" is a reserved identifier`);\n }\n if (!NETWORK_NAME_RE.test(value)) {\n throw new Error(`network \"${safeLabel(value)}\" invalid: must match ^[a-z][a-z0-9-]*$`);\n }\n return value;\n}\n\nfunction validateEndpoint(endpoint: unknown, network: string): void {\n if (typeof endpoint !== \"string\") {\n throw new Error(`endpoint must be a string for network \"${safeLabel(network)}\"`);\n }\n if (endpoint.length === 0) {\n throw new Error(`endpoint required for network \"${safeLabel(network)}\"`);\n }\n if (endpoint.length > MAX_ENDPOINT_LENGTH) {\n throw new Error(`endpoint too long: ${endpoint.length} > ${MAX_ENDPOINT_LENGTH}`);\n }\n\n let url: URL;\n try {\n url = new URL(endpoint);\n } catch {\n throw new Error(`endpoint for network \"${safeLabel(network)}\" is not a valid URL`);\n }\n\n if (!ALLOWED_ENDPOINT_SCHEMES.has(url.protocol)) {\n const scheme = url.protocol.replace(/:$/, \"\");\n throw new Error(`endpoint scheme not allowed: ${safeLabel(scheme, 16)}`);\n }\n\n if (url.username || url.password) {\n throw new Error(\"endpoint must not contain basic auth credentials\");\n }\n}\n\n/**\n * Validate an array of `ChainNetworkConfig`.\n *\n * Throws a standard `Error` on any violation. Error messages are\n * sanitized — they never include the path / query string / fragment of an\n * endpoint, so a misconfigured token cannot leak into daemon logs.\n *\n * Pure function: input array and elements are not mutated.\n */\nexport function validateChainNetworks(configs: ChainNetworkConfig[]): void {\n if (!Array.isArray(configs)) {\n throw new Error(\"chain configs must be an array\");\n }\n if (configs.length > MAX_CONFIGS_LENGTH) {\n throw new Error(`chain configs exceed limit: ${configs.length} > ${MAX_CONFIGS_LENGTH}`);\n }\n\n const seen = new Set<string>();\n for (let i = 0; i < configs.length; i++) {\n const cfg = configs[i];\n if (cfg === null || typeof cfg !== \"object\") {\n throw new Error(`chain configs[${i}] must be an object`);\n }\n const name = validateNetwork((cfg as ChainNetworkConfig).network);\n validateEndpoint((cfg as ChainNetworkConfig).endpoint, name);\n if (seen.has(name)) {\n throw new Error(`network \"${safeLabel(name)}\" duplicated`);\n }\n seen.add(name);\n }\n}\n\n/**\n * Normalize one `ChainNetworkConfig` to a `MountEntry`.\n *\n * Pure function: the input config is not mutated, and each call returns a\n * fresh independent `MountEntry` with no shared object references.\n *\n * Validation is the caller's responsibility — invoke\n * `validateChainNetworks` before normalization in setup paths.\n */\nexport function chainNetworkToMountEntry(cfg: ChainNetworkConfig): MountEntry {\n return {\n path: joinURL(CHAIN_DEVICE_PREFIX, cfg.network),\n provider: \"ocap\",\n options: { endpoint: cfg.endpoint },\n };\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;AAoBA,MAAa,sBAAsB;AAEnC,MAAM,0BAA0B;AAChC,MAAM,sBAAsB;AAC5B,MAAM,qBAAqB;AAC3B,MAAM,kBAAkB;AACxB,MAAM,yBAA8C,IAAI,IAAI;CAC1D;CACA;CACA;CACD,CAAC;AACF,MAAM,2BAAgD,IAAI,IAAI,CAAC,SAAS,SAAS,CAAC;;;;;;;AAsBlF,MAAa,yBAAwD,OAAO,OAAO,CACjF,OAAO,OAAO;CAAE,SAAS;CAAQ,UAAU;CAAkC,CAAC,EAC9E,OAAO,OAAO;CAAE,SAAS;CAAQ,UAAU;CAAkC,CAAC,CAC/E,CAAC;;;;;;AAOF,SAAS,UAAU,OAAgB,MAAM,IAAY;CACnD,MAAM,MAAM,OAAO,UAAU,WAAW,QAAQ,OAAO,MAAM;CAC7D,MAAM,YAAY,IAAI,SAAS,MAAM,GAAG,IAAI,MAAM,GAAG,IAAI,CAAC,KAAK;CAC/D,IAAI,MAAM;AACV,MAAK,IAAI,IAAI,GAAG,IAAI,UAAU,QAAQ,KAAK;EACzC,MAAM,OAAO,UAAU,WAAW,EAAE;AACpC,MAAI,OAAO,MAAQ,SAAS,IAC1B,QAAO,MAAM,KAAK,SAAS,GAAG,CAAC,SAAS,GAAG,IAAI;MAE/C,QAAO,UAAU;;AAGrB,QAAO;;AAGT,SAAS,gBAAgB,OAAwB;AAC/C,KAAI,OAAO,UAAU,SACnB,OAAM,IAAI,MAAM,iCAAiC,OAAO,QAAQ;AAElE,KAAI,MAAM,WAAW,EACnB,OAAM,IAAI,MAAM,iCAAiC;AAEnD,KAAI,MAAM,SAAS,wBACjB,OAAM,IAAI,MAAM,0BAA0B,MAAM,OAAO,KAAK,0BAA0B;AAExF,KAAI,uBAAuB,IAAI,MAAM,CACnC,OAAM,IAAI,MAAM,YAAY,UAAU,MAAM,CAAC,4BAA4B;AAE3E,KAAI,CAAC,gBAAgB,KAAK,MAAM,CAC9B,OAAM,IAAI,MAAM,YAAY,UAAU,MAAM,CAAC,yCAAyC;AAExF,QAAO;;AAGT,SAAS,iBAAiB,UAAmB,SAAuB;AAClE,KAAI,OAAO,aAAa,SACtB,OAAM,IAAI,MAAM,0CAA0C,UAAU,QAAQ,CAAC,GAAG;AAElF,KAAI,SAAS,WAAW,EACtB,OAAM,IAAI,MAAM,kCAAkC,UAAU,QAAQ,CAAC,GAAG;AAE1E,KAAI,SAAS,SAAS,oBACpB,OAAM,IAAI,MAAM,sBAAsB,SAAS,OAAO,KAAK,sBAAsB;CAGnF,IAAI;AACJ,KAAI;AACF,QAAM,IAAI,IAAI,SAAS;SACjB;AACN,QAAM,IAAI,MAAM,yBAAyB,UAAU,QAAQ,CAAC,sBAAsB;;AAGpF,KAAI,CAAC,yBAAyB,IAAI,IAAI,SAAS,EAAE;EAC/C,MAAM,SAAS,IAAI,SAAS,QAAQ,MAAM,GAAG;AAC7C,QAAM,IAAI,MAAM,gCAAgC,UAAU,QAAQ,GAAG,GAAG;;AAG1E,KAAI,IAAI,YAAY,IAAI,SACtB,OAAM,IAAI,MAAM,mDAAmD;;;;;;;;;;;AAavE,SAAgB,sBAAsB,SAAqC;AACzE,KAAI,CAAC,MAAM,QAAQ,QAAQ,CACzB,OAAM,IAAI,MAAM,iCAAiC;AAEnD,KAAI,QAAQ,SAAS,mBACnB,OAAM,IAAI,MAAM,+BAA+B,QAAQ,OAAO,KAAK,qBAAqB;CAG1F,MAAM,uBAAO,IAAI,KAAa;AAC9B,MAAK,IAAI,IAAI,GAAG,IAAI,QAAQ,QAAQ,KAAK;EACvC,MAAM,MAAM,QAAQ;AACpB,MAAI,QAAQ,QAAQ,OAAO,QAAQ,SACjC,OAAM,IAAI,MAAM,iBAAiB,EAAE,qBAAqB;EAE1D,MAAM,OAAO,gBAAiB,IAA2B,QAAQ;AACjE,mBAAkB,IAA2B,UAAU,KAAK;AAC5D,MAAI,KAAK,IAAI,KAAK,CAChB,OAAM,IAAI,MAAM,YAAY,UAAU,KAAK,CAAC,cAAc;AAE5D,OAAK,IAAI,KAAK;;;;;;;;;;;;AAalB,SAAgB,yBAAyB,KAAqC;AAC5E,QAAO;EACL,MAAM,QAAQ,qBAAqB,IAAI,QAAQ;EAC/C,UAAU;EACV,SAAS,EAAE,UAAU,IAAI,UAAU;EACpC"}
|