@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,50 @@
|
|
|
1
|
+
|
|
2
|
+
//#region src/http/csrf.ts
|
|
3
|
+
/**
|
|
4
|
+
* Resolve the service's own origin (scheme://host[:port]) from a request.
|
|
5
|
+
* Node: trust `x-forwarded-host` (+ `x-forwarded-proto`) when present, else
|
|
6
|
+
* the `Host` header. CF: the request URL already carries the real origin.
|
|
7
|
+
*/
|
|
8
|
+
function resolveSelfOrigin(request) {
|
|
9
|
+
const url = (() => {
|
|
10
|
+
try {
|
|
11
|
+
return new URL(request.url);
|
|
12
|
+
} catch {
|
|
13
|
+
return null;
|
|
14
|
+
}
|
|
15
|
+
})();
|
|
16
|
+
const host = request.headers.get("x-forwarded-host") || request.headers.get("host") || url?.host;
|
|
17
|
+
if (!host) return null;
|
|
18
|
+
return `${request.headers.get("x-forwarded-proto") || url?.protocol.replace(/:$/, "") || "https"}://${host}`;
|
|
19
|
+
}
|
|
20
|
+
/**
|
|
21
|
+
* Decide whether a cookie-authed mutating request must be rejected for CSRF.
|
|
22
|
+
* Returns a reason string when it should be rejected, or null when allowed.
|
|
23
|
+
*
|
|
24
|
+
* Caller passes `isMutating` (the edge's best knowledge — for a wire `exec`
|
|
25
|
+
* the edge treats it as potentially-mutating; reads/list/stat/search are not
|
|
26
|
+
* routed here). The function itself only gates cookie-authed callers.
|
|
27
|
+
*/
|
|
28
|
+
function csrfRejection(request, caller, isMutating) {
|
|
29
|
+
if (!isMutating) return null;
|
|
30
|
+
if (caller?.authSource !== "cookie") return null;
|
|
31
|
+
const origin = request.headers.get("origin");
|
|
32
|
+
if (!origin) return "missing Origin header on a cookie-authenticated mutating request (use Authorization: Bearer for non-browser callers)";
|
|
33
|
+
const self = resolveSelfOrigin(request);
|
|
34
|
+
if (!self) return "could not resolve service origin to validate Origin header";
|
|
35
|
+
if (normalizeOrigin(origin) !== normalizeOrigin(self)) return `cross-origin mutating request rejected (Origin '${origin}' != '${self}')`;
|
|
36
|
+
return null;
|
|
37
|
+
}
|
|
38
|
+
/** Exported for reuse by the Node WS Upgrade CSRF check (server.ts). */
|
|
39
|
+
function normalizeOrigin(origin) {
|
|
40
|
+
try {
|
|
41
|
+
const u = new URL(origin);
|
|
42
|
+
return `${u.protocol}//${u.host}`.toLowerCase();
|
|
43
|
+
} catch {
|
|
44
|
+
return origin.replace(/\/+$/, "").toLowerCase();
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
//#endregion
|
|
49
|
+
exports.csrfRejection = csrfRejection;
|
|
50
|
+
exports.normalizeOrigin = normalizeOrigin;
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { CallerInfo } from "@aigne/afs";
|
|
2
|
+
|
|
3
|
+
//#region src/http/csrf.d.ts
|
|
4
|
+
/** Exported for reuse by the Node WS Upgrade CSRF check (server.ts). */
|
|
5
|
+
declare function normalizeOrigin(origin: string): string;
|
|
6
|
+
//#endregion
|
|
7
|
+
export { normalizeOrigin };
|
|
8
|
+
//# sourceMappingURL=csrf.d.cts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"csrf.d.cts","names":[],"sources":["../../src/http/csrf.ts"],"mappings":";;;;iBA+EgB,eAAA,CAAgB,MAAA"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { CallerInfo } from "@aigne/afs";
|
|
2
|
+
|
|
3
|
+
//#region src/http/csrf.d.ts
|
|
4
|
+
/** Exported for reuse by the Node WS Upgrade CSRF check (server.ts). */
|
|
5
|
+
declare function normalizeOrigin(origin: string): string;
|
|
6
|
+
//#endregion
|
|
7
|
+
export { normalizeOrigin };
|
|
8
|
+
//# sourceMappingURL=csrf.d.mts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"csrf.d.mts","names":[],"sources":["../../src/http/csrf.ts"],"mappings":";;;;iBA+EgB,eAAA,CAAgB,MAAA"}
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
//#region src/http/csrf.ts
|
|
2
|
+
/**
|
|
3
|
+
* Resolve the service's own origin (scheme://host[:port]) from a request.
|
|
4
|
+
* Node: trust `x-forwarded-host` (+ `x-forwarded-proto`) when present, else
|
|
5
|
+
* the `Host` header. CF: the request URL already carries the real origin.
|
|
6
|
+
*/
|
|
7
|
+
function resolveSelfOrigin(request) {
|
|
8
|
+
const url = (() => {
|
|
9
|
+
try {
|
|
10
|
+
return new URL(request.url);
|
|
11
|
+
} catch {
|
|
12
|
+
return null;
|
|
13
|
+
}
|
|
14
|
+
})();
|
|
15
|
+
const host = request.headers.get("x-forwarded-host") || request.headers.get("host") || url?.host;
|
|
16
|
+
if (!host) return null;
|
|
17
|
+
return `${request.headers.get("x-forwarded-proto") || url?.protocol.replace(/:$/, "") || "https"}://${host}`;
|
|
18
|
+
}
|
|
19
|
+
/**
|
|
20
|
+
* Decide whether a cookie-authed mutating request must be rejected for CSRF.
|
|
21
|
+
* Returns a reason string when it should be rejected, or null when allowed.
|
|
22
|
+
*
|
|
23
|
+
* Caller passes `isMutating` (the edge's best knowledge — for a wire `exec`
|
|
24
|
+
* the edge treats it as potentially-mutating; reads/list/stat/search are not
|
|
25
|
+
* routed here). The function itself only gates cookie-authed callers.
|
|
26
|
+
*/
|
|
27
|
+
function csrfRejection(request, caller, isMutating) {
|
|
28
|
+
if (!isMutating) return null;
|
|
29
|
+
if (caller?.authSource !== "cookie") return null;
|
|
30
|
+
const origin = request.headers.get("origin");
|
|
31
|
+
if (!origin) return "missing Origin header on a cookie-authenticated mutating request (use Authorization: Bearer for non-browser callers)";
|
|
32
|
+
const self = resolveSelfOrigin(request);
|
|
33
|
+
if (!self) return "could not resolve service origin to validate Origin header";
|
|
34
|
+
if (normalizeOrigin(origin) !== normalizeOrigin(self)) return `cross-origin mutating request rejected (Origin '${origin}' != '${self}')`;
|
|
35
|
+
return null;
|
|
36
|
+
}
|
|
37
|
+
/** Exported for reuse by the Node WS Upgrade CSRF check (server.ts). */
|
|
38
|
+
function normalizeOrigin(origin) {
|
|
39
|
+
try {
|
|
40
|
+
const u = new URL(origin);
|
|
41
|
+
return `${u.protocol}//${u.host}`.toLowerCase();
|
|
42
|
+
} catch {
|
|
43
|
+
return origin.replace(/\/+$/, "").toLowerCase();
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
//#endregion
|
|
48
|
+
export { csrfRejection, normalizeOrigin };
|
|
49
|
+
//# sourceMappingURL=csrf.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"csrf.mjs","names":[],"sources":["../../src/http/csrf.ts"],"sourcesContent":["/**\n * CSRF / same-origin guard for cookie-authenticated mutating exec\n * (exec-auth-gate §4.7). The effect gate (core) answers \"is the caller\n * authenticated\"; this edge guard answers \"did the user actually intend this\"\n * for cookie sessions, which the browser auto-attaches cross-site.\n *\n * Contract (design §4.7):\n * - Triggers ONLY for cookie-authed callers (`authSource === \"cookie\"`).\n * Bearer is exempt (non-browser, no ambient credential). Anonymous is\n * exempt here (the effect gate handles it) and test-header callers\n * (authSource undefined) are exempt — only real browser cookies qualify.\n * - Same-origin = request `Origin` header equals the service's own origin.\n * - Missing `Origin` on a cookie-authed mutating request → reject\n * (fail-closed; non-browser callers should use Bearer).\n * - `allowAnonymous` does NOT exempt CSRF — a cookie user hitting an open\n * action cross-origin is still a CSRF vector.\n *\n * Edge-layer only: `Origin` is an HTTP request header, never visible to the\n * core `afs.exec` (which sees only `options.context`). HTTP afs-rpc +\n * `/api/aup/event` call this; WS checks at the HTTP Upgrade handshake (the\n * `join_session` frame has no Origin header).\n */\n\nimport type { CallerInfo } from \"@aigne/afs\";\n\n/**\n * Resolve the service's own origin (scheme://host[:port]) from a request.\n * Node: trust `x-forwarded-host` (+ `x-forwarded-proto`) when present, else\n * the `Host` header. CF: the request URL already carries the real origin.\n */\nexport function resolveSelfOrigin(request: Request): string | null {\n const url = (() => {\n try {\n return new URL(request.url);\n } catch {\n return null;\n }\n })();\n const fwdHost = request.headers.get(\"x-forwarded-host\");\n const host = fwdHost || request.headers.get(\"host\") || url?.host;\n if (!host) return null;\n const fwdProto = request.headers.get(\"x-forwarded-proto\");\n const scheme = fwdProto || url?.protocol.replace(/:$/, \"\") || \"https\";\n return `${scheme}://${host}`;\n}\n\n/**\n * Decide whether a cookie-authed mutating request must be rejected for CSRF.\n * Returns a reason string when it should be rejected, or null when allowed.\n *\n * Caller passes `isMutating` (the edge's best knowledge — for a wire `exec`\n * the edge treats it as potentially-mutating; reads/list/stat/search are not\n * routed here). The function itself only gates cookie-authed callers.\n */\nexport function csrfRejection(\n request: Request,\n caller: CallerInfo | null,\n isMutating: boolean,\n): string | null {\n if (!isMutating) return null;\n // Only real browser cookie sessions are CSRF-exposed. Bearer + anonymous +\n // test-header (authSource undefined) are exempt.\n if (caller?.authSource !== \"cookie\") return null;\n\n const origin = request.headers.get(\"origin\");\n if (!origin) {\n return \"missing Origin header on a cookie-authenticated mutating request (use Authorization: Bearer for non-browser callers)\";\n }\n const self = resolveSelfOrigin(request);\n if (!self) {\n return \"could not resolve service origin to validate Origin header\";\n }\n if (normalizeOrigin(origin) !== normalizeOrigin(self)) {\n return `cross-origin mutating request rejected (Origin '${origin}' != '${self}')`;\n }\n return null;\n}\n\n/** Exported for reuse by the Node WS Upgrade CSRF check (server.ts). */\nexport function normalizeOrigin(origin: string): string {\n try {\n const u = new URL(origin);\n return `${u.protocol}//${u.host}`.toLowerCase();\n } catch {\n return origin.replace(/\\/+$/, \"\").toLowerCase();\n }\n}\n"],"mappings":";;;;;;AA8BA,SAAgB,kBAAkB,SAAiC;CACjE,MAAM,aAAa;AACjB,MAAI;AACF,UAAO,IAAI,IAAI,QAAQ,IAAI;UACrB;AACN,UAAO;;KAEP;CAEJ,MAAM,OADU,QAAQ,QAAQ,IAAI,mBAAmB,IAC/B,QAAQ,QAAQ,IAAI,OAAO,IAAI,KAAK;AAC5D,KAAI,CAAC,KAAM,QAAO;AAGlB,QAAO,GAFU,QAAQ,QAAQ,IAAI,oBAAoB,IAC9B,KAAK,SAAS,QAAQ,MAAM,GAAG,IAAI,QAC7C,KAAK;;;;;;;;;;AAWxB,SAAgB,cACd,SACA,QACA,YACe;AACf,KAAI,CAAC,WAAY,QAAO;AAGxB,KAAI,QAAQ,eAAe,SAAU,QAAO;CAE5C,MAAM,SAAS,QAAQ,QAAQ,IAAI,SAAS;AAC5C,KAAI,CAAC,OACH,QAAO;CAET,MAAM,OAAO,kBAAkB,QAAQ;AACvC,KAAI,CAAC,KACH,QAAO;AAET,KAAI,gBAAgB,OAAO,KAAK,gBAAgB,KAAK,CACnD,QAAO,mDAAmD,OAAO,QAAQ,KAAK;AAEhF,QAAO;;;AAIT,SAAgB,gBAAgB,QAAwB;AACtD,KAAI;EACF,MAAM,IAAI,IAAI,IAAI,OAAO;AACzB,SAAO,GAAG,EAAE,SAAS,IAAI,EAAE,OAAO,aAAa;SACzC;AACN,SAAO,OAAO,QAAQ,QAAQ,GAAG,CAAC,aAAa"}
|
|
@@ -0,0 +1,106 @@
|
|
|
1
|
+
|
|
2
|
+
//#region src/http/handlers.ts
|
|
3
|
+
const DEEP_HEALTH_TIMEOUT_MS = 3e3;
|
|
4
|
+
const DEEP_HEALTH_MAX_CONCURRENCY = 8;
|
|
5
|
+
function methodNotAllowed() {
|
|
6
|
+
return new Response(JSON.stringify({ error: "Method Not Allowed" }), {
|
|
7
|
+
status: 405,
|
|
8
|
+
headers: {
|
|
9
|
+
"Content-Type": "application/json",
|
|
10
|
+
Allow: "GET"
|
|
11
|
+
}
|
|
12
|
+
});
|
|
13
|
+
}
|
|
14
|
+
async function withTimeout(promise, timeoutMs) {
|
|
15
|
+
let timer;
|
|
16
|
+
try {
|
|
17
|
+
return await Promise.race([promise, new Promise((_, reject) => {
|
|
18
|
+
timer = setTimeout(() => reject(/* @__PURE__ */ new Error("timeout")), timeoutMs);
|
|
19
|
+
})]);
|
|
20
|
+
} finally {
|
|
21
|
+
if (timer) clearTimeout(timer);
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
async function mapWithConcurrency(items, concurrency, fn) {
|
|
25
|
+
const results = new Array(items.length);
|
|
26
|
+
let nextIndex = 0;
|
|
27
|
+
const workerCount = Math.min(Math.max(1, concurrency), items.length);
|
|
28
|
+
await Promise.all(Array.from({ length: workerCount }, async () => {
|
|
29
|
+
while (nextIndex < items.length) {
|
|
30
|
+
const index = nextIndex++;
|
|
31
|
+
results[index] = await fn(items[index], index);
|
|
32
|
+
}
|
|
33
|
+
}));
|
|
34
|
+
return results;
|
|
35
|
+
}
|
|
36
|
+
/**
|
|
37
|
+
* Factory: `GET /.well-known/service/health`
|
|
38
|
+
*
|
|
39
|
+
* Returns `{ status: "ok", version, uptime, ts }`.
|
|
40
|
+
* With `?deep`: also probes each mount via `stat("/")`.
|
|
41
|
+
*/
|
|
42
|
+
function healthHandler(afs, config) {
|
|
43
|
+
return async (request) => {
|
|
44
|
+
if (request.method !== "GET") return methodNotAllowed();
|
|
45
|
+
const url = new URL(request.url);
|
|
46
|
+
const body = {
|
|
47
|
+
status: "ok",
|
|
48
|
+
version: config.version,
|
|
49
|
+
uptime: Math.floor((Date.now() - config.startedAt) / 1e3),
|
|
50
|
+
ts: (/* @__PURE__ */ new Date()).toISOString()
|
|
51
|
+
};
|
|
52
|
+
if (url.searchParams.has("deep")) body.mounts = await mapWithConcurrency(afs.getMounts(null), DEEP_HEALTH_MAX_CONCURRENCY, async (m) => {
|
|
53
|
+
try {
|
|
54
|
+
if (typeof m.module.stat === "function") await withTimeout(m.module.stat("/"), DEEP_HEALTH_TIMEOUT_MS);
|
|
55
|
+
return {
|
|
56
|
+
path: m.path,
|
|
57
|
+
status: "ok"
|
|
58
|
+
};
|
|
59
|
+
} catch (err) {
|
|
60
|
+
return {
|
|
61
|
+
path: m.path,
|
|
62
|
+
status: "error",
|
|
63
|
+
error: err instanceof Error ? err.message : String(err)
|
|
64
|
+
};
|
|
65
|
+
}
|
|
66
|
+
});
|
|
67
|
+
return Response.json(body);
|
|
68
|
+
};
|
|
69
|
+
}
|
|
70
|
+
/**
|
|
71
|
+
* Factory: `GET /.well-known/service/info`
|
|
72
|
+
*
|
|
73
|
+
* Returns `{ name, version, mode, mounts: [{ path, provider, status }] }`.
|
|
74
|
+
*/
|
|
75
|
+
function infoHandler(afs, config) {
|
|
76
|
+
return async (request) => {
|
|
77
|
+
if (request.method !== "GET") return methodNotAllowed();
|
|
78
|
+
const mounts = afs.getMounts(null);
|
|
79
|
+
return Response.json({
|
|
80
|
+
name: config.name,
|
|
81
|
+
version: config.version,
|
|
82
|
+
mode: config.mode,
|
|
83
|
+
mounts: mounts.map((m) => ({
|
|
84
|
+
path: m.path,
|
|
85
|
+
provider: m.module.name,
|
|
86
|
+
status: m.status ?? "ok"
|
|
87
|
+
}))
|
|
88
|
+
});
|
|
89
|
+
};
|
|
90
|
+
}
|
|
91
|
+
/**
|
|
92
|
+
* Factory: `GET /.well-known/service/api`
|
|
93
|
+
*
|
|
94
|
+
* Returns `{ endpoints: [{ method, path, description }] }`.
|
|
95
|
+
*/
|
|
96
|
+
function apiHandler(routes) {
|
|
97
|
+
return async (request) => {
|
|
98
|
+
if (request.method !== "GET") return methodNotAllowed();
|
|
99
|
+
return Response.json({ endpoints: routes });
|
|
100
|
+
};
|
|
101
|
+
}
|
|
102
|
+
|
|
103
|
+
//#endregion
|
|
104
|
+
exports.apiHandler = apiHandler;
|
|
105
|
+
exports.healthHandler = healthHandler;
|
|
106
|
+
exports.infoHandler = infoHandler;
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
import { AFS } from "@aigne/afs";
|
|
2
|
+
|
|
3
|
+
//#region src/http/handlers.d.ts
|
|
4
|
+
interface HealthConfig {
|
|
5
|
+
version: string;
|
|
6
|
+
startedAt: number;
|
|
7
|
+
}
|
|
8
|
+
interface InfoConfig {
|
|
9
|
+
name: string;
|
|
10
|
+
version: string;
|
|
11
|
+
mode: "serve" | "export";
|
|
12
|
+
}
|
|
13
|
+
interface RouteDescriptor {
|
|
14
|
+
method: string;
|
|
15
|
+
path: string;
|
|
16
|
+
description: string;
|
|
17
|
+
}
|
|
18
|
+
/**
|
|
19
|
+
* Factory: `GET /.well-known/service/health`
|
|
20
|
+
*
|
|
21
|
+
* Returns `{ status: "ok", version, uptime, ts }`.
|
|
22
|
+
* With `?deep`: also probes each mount via `stat("/")`.
|
|
23
|
+
*/
|
|
24
|
+
declare function healthHandler(afs: AFS, config: HealthConfig): (request: Request) => Promise<Response>;
|
|
25
|
+
/**
|
|
26
|
+
* Factory: `GET /.well-known/service/info`
|
|
27
|
+
*
|
|
28
|
+
* Returns `{ name, version, mode, mounts: [{ path, provider, status }] }`.
|
|
29
|
+
*/
|
|
30
|
+
declare function infoHandler(afs: AFS, config: InfoConfig): (request: Request) => Promise<Response>;
|
|
31
|
+
/**
|
|
32
|
+
* Factory: `GET /.well-known/service/api`
|
|
33
|
+
*
|
|
34
|
+
* Returns `{ endpoints: [{ method, path, description }] }`.
|
|
35
|
+
*/
|
|
36
|
+
declare function apiHandler(routes: RouteDescriptor[]): (request: Request) => Promise<Response>;
|
|
37
|
+
//#endregion
|
|
38
|
+
export { HealthConfig, InfoConfig, RouteDescriptor, apiHandler, healthHandler, infoHandler };
|
|
39
|
+
//# sourceMappingURL=handlers.d.cts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"handlers.d.cts","names":[],"sources":["../../src/http/handlers.ts"],"mappings":";;;UAciB,YAAA;EACf,OAAA;EACA,SAAA;AAAA;AAAA,UAGe,UAAA;EACf,IAAA;EACA,OAAA;EACA,IAAA;AAAA;AAAA,UAGe,eAAA;EACf,MAAA;EACA,IAAA;EACA,WAAA;AAAA;;;;AA8DF;;;iBAAgB,aAAA,CACd,GAAA,EAAK,GAAA,EACL,MAAA,EAAQ,YAAA,IACN,OAAA,EAAS,OAAA,KAAY,OAAA,CAAQ,QAAA;;;;;;iBA2CjB,WAAA,CAAY,GAAA,EAAK,GAAA,EAAK,MAAA,EAAQ,UAAA,IAAc,OAAA,EAAS,OAAA,KAAY,OAAA,CAAQ,QAAA;;;;;;iBA2BzE,UAAA,CAAW,MAAA,EAAQ,eAAA,MAAqB,OAAA,EAAS,OAAA,KAAY,OAAA,CAAQ,QAAA"}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
import { AFS } from "@aigne/afs";
|
|
2
|
+
|
|
3
|
+
//#region src/http/handlers.d.ts
|
|
4
|
+
interface HealthConfig {
|
|
5
|
+
version: string;
|
|
6
|
+
startedAt: number;
|
|
7
|
+
}
|
|
8
|
+
interface InfoConfig {
|
|
9
|
+
name: string;
|
|
10
|
+
version: string;
|
|
11
|
+
mode: "serve" | "export";
|
|
12
|
+
}
|
|
13
|
+
interface RouteDescriptor {
|
|
14
|
+
method: string;
|
|
15
|
+
path: string;
|
|
16
|
+
description: string;
|
|
17
|
+
}
|
|
18
|
+
/**
|
|
19
|
+
* Factory: `GET /.well-known/service/health`
|
|
20
|
+
*
|
|
21
|
+
* Returns `{ status: "ok", version, uptime, ts }`.
|
|
22
|
+
* With `?deep`: also probes each mount via `stat("/")`.
|
|
23
|
+
*/
|
|
24
|
+
declare function healthHandler(afs: AFS, config: HealthConfig): (request: Request) => Promise<Response>;
|
|
25
|
+
/**
|
|
26
|
+
* Factory: `GET /.well-known/service/info`
|
|
27
|
+
*
|
|
28
|
+
* Returns `{ name, version, mode, mounts: [{ path, provider, status }] }`.
|
|
29
|
+
*/
|
|
30
|
+
declare function infoHandler(afs: AFS, config: InfoConfig): (request: Request) => Promise<Response>;
|
|
31
|
+
/**
|
|
32
|
+
* Factory: `GET /.well-known/service/api`
|
|
33
|
+
*
|
|
34
|
+
* Returns `{ endpoints: [{ method, path, description }] }`.
|
|
35
|
+
*/
|
|
36
|
+
declare function apiHandler(routes: RouteDescriptor[]): (request: Request) => Promise<Response>;
|
|
37
|
+
//#endregion
|
|
38
|
+
export { HealthConfig, InfoConfig, RouteDescriptor, apiHandler, healthHandler, infoHandler };
|
|
39
|
+
//# sourceMappingURL=handlers.d.mts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"handlers.d.mts","names":[],"sources":["../../src/http/handlers.ts"],"mappings":";;;UAciB,YAAA;EACf,OAAA;EACA,SAAA;AAAA;AAAA,UAGe,UAAA;EACf,IAAA;EACA,OAAA;EACA,IAAA;AAAA;AAAA,UAGe,eAAA;EACf,MAAA;EACA,IAAA;EACA,WAAA;AAAA;;;;AA8DF;;;iBAAgB,aAAA,CACd,GAAA,EAAK,GAAA,EACL,MAAA,EAAQ,YAAA,IACN,OAAA,EAAS,OAAA,KAAY,OAAA,CAAQ,QAAA;;;;;;iBA2CjB,WAAA,CAAY,GAAA,EAAK,GAAA,EAAK,MAAA,EAAQ,UAAA,IAAc,OAAA,EAAS,OAAA,KAAY,OAAA,CAAQ,QAAA;;;;;;iBA2BzE,UAAA,CAAW,MAAA,EAAQ,eAAA,MAAqB,OAAA,EAAS,OAAA,KAAY,OAAA,CAAQ,QAAA"}
|
|
@@ -0,0 +1,104 @@
|
|
|
1
|
+
//#region src/http/handlers.ts
|
|
2
|
+
const DEEP_HEALTH_TIMEOUT_MS = 3e3;
|
|
3
|
+
const DEEP_HEALTH_MAX_CONCURRENCY = 8;
|
|
4
|
+
function methodNotAllowed() {
|
|
5
|
+
return new Response(JSON.stringify({ error: "Method Not Allowed" }), {
|
|
6
|
+
status: 405,
|
|
7
|
+
headers: {
|
|
8
|
+
"Content-Type": "application/json",
|
|
9
|
+
Allow: "GET"
|
|
10
|
+
}
|
|
11
|
+
});
|
|
12
|
+
}
|
|
13
|
+
async function withTimeout(promise, timeoutMs) {
|
|
14
|
+
let timer;
|
|
15
|
+
try {
|
|
16
|
+
return await Promise.race([promise, new Promise((_, reject) => {
|
|
17
|
+
timer = setTimeout(() => reject(/* @__PURE__ */ new Error("timeout")), timeoutMs);
|
|
18
|
+
})]);
|
|
19
|
+
} finally {
|
|
20
|
+
if (timer) clearTimeout(timer);
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
async function mapWithConcurrency(items, concurrency, fn) {
|
|
24
|
+
const results = new Array(items.length);
|
|
25
|
+
let nextIndex = 0;
|
|
26
|
+
const workerCount = Math.min(Math.max(1, concurrency), items.length);
|
|
27
|
+
await Promise.all(Array.from({ length: workerCount }, async () => {
|
|
28
|
+
while (nextIndex < items.length) {
|
|
29
|
+
const index = nextIndex++;
|
|
30
|
+
results[index] = await fn(items[index], index);
|
|
31
|
+
}
|
|
32
|
+
}));
|
|
33
|
+
return results;
|
|
34
|
+
}
|
|
35
|
+
/**
|
|
36
|
+
* Factory: `GET /.well-known/service/health`
|
|
37
|
+
*
|
|
38
|
+
* Returns `{ status: "ok", version, uptime, ts }`.
|
|
39
|
+
* With `?deep`: also probes each mount via `stat("/")`.
|
|
40
|
+
*/
|
|
41
|
+
function healthHandler(afs, config) {
|
|
42
|
+
return async (request) => {
|
|
43
|
+
if (request.method !== "GET") return methodNotAllowed();
|
|
44
|
+
const url = new URL(request.url);
|
|
45
|
+
const body = {
|
|
46
|
+
status: "ok",
|
|
47
|
+
version: config.version,
|
|
48
|
+
uptime: Math.floor((Date.now() - config.startedAt) / 1e3),
|
|
49
|
+
ts: (/* @__PURE__ */ new Date()).toISOString()
|
|
50
|
+
};
|
|
51
|
+
if (url.searchParams.has("deep")) body.mounts = await mapWithConcurrency(afs.getMounts(null), DEEP_HEALTH_MAX_CONCURRENCY, async (m) => {
|
|
52
|
+
try {
|
|
53
|
+
if (typeof m.module.stat === "function") await withTimeout(m.module.stat("/"), DEEP_HEALTH_TIMEOUT_MS);
|
|
54
|
+
return {
|
|
55
|
+
path: m.path,
|
|
56
|
+
status: "ok"
|
|
57
|
+
};
|
|
58
|
+
} catch (err) {
|
|
59
|
+
return {
|
|
60
|
+
path: m.path,
|
|
61
|
+
status: "error",
|
|
62
|
+
error: err instanceof Error ? err.message : String(err)
|
|
63
|
+
};
|
|
64
|
+
}
|
|
65
|
+
});
|
|
66
|
+
return Response.json(body);
|
|
67
|
+
};
|
|
68
|
+
}
|
|
69
|
+
/**
|
|
70
|
+
* Factory: `GET /.well-known/service/info`
|
|
71
|
+
*
|
|
72
|
+
* Returns `{ name, version, mode, mounts: [{ path, provider, status }] }`.
|
|
73
|
+
*/
|
|
74
|
+
function infoHandler(afs, config) {
|
|
75
|
+
return async (request) => {
|
|
76
|
+
if (request.method !== "GET") return methodNotAllowed();
|
|
77
|
+
const mounts = afs.getMounts(null);
|
|
78
|
+
return Response.json({
|
|
79
|
+
name: config.name,
|
|
80
|
+
version: config.version,
|
|
81
|
+
mode: config.mode,
|
|
82
|
+
mounts: mounts.map((m) => ({
|
|
83
|
+
path: m.path,
|
|
84
|
+
provider: m.module.name,
|
|
85
|
+
status: m.status ?? "ok"
|
|
86
|
+
}))
|
|
87
|
+
});
|
|
88
|
+
};
|
|
89
|
+
}
|
|
90
|
+
/**
|
|
91
|
+
* Factory: `GET /.well-known/service/api`
|
|
92
|
+
*
|
|
93
|
+
* Returns `{ endpoints: [{ method, path, description }] }`.
|
|
94
|
+
*/
|
|
95
|
+
function apiHandler(routes) {
|
|
96
|
+
return async (request) => {
|
|
97
|
+
if (request.method !== "GET") return methodNotAllowed();
|
|
98
|
+
return Response.json({ endpoints: routes });
|
|
99
|
+
};
|
|
100
|
+
}
|
|
101
|
+
|
|
102
|
+
//#endregion
|
|
103
|
+
export { apiHandler, healthHandler, infoHandler };
|
|
104
|
+
//# sourceMappingURL=handlers.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"handlers.mjs","names":[],"sources":["../../src/http/handlers.ts"],"sourcesContent":["/**\n * AOS 标准 HTTP Handlers\n *\n * 每个 ARC 实例都应该提供的标准端点。\n * 这些是纯函数工厂 —— 接受 AFS + config,返回 handler 函数。\n * 各 runtime 自行注册到 ServiceRouter。\n */\n\nimport type { AFS } from \"@aigne/afs\";\n\n// ---------------------------------------------------------------------------\n// Types\n// ---------------------------------------------------------------------------\n\nexport interface HealthConfig {\n version: string;\n startedAt: number;\n}\n\nexport interface InfoConfig {\n name: string;\n version: string;\n mode: \"serve\" | \"export\";\n}\n\nexport interface RouteDescriptor {\n method: string;\n path: string;\n description: string;\n}\n\n// ---------------------------------------------------------------------------\n// Shared helpers\n// ---------------------------------------------------------------------------\n\nconst DEEP_HEALTH_TIMEOUT_MS = 3000;\nexport const DEEP_HEALTH_MAX_CONCURRENCY = 8;\n\nfunction methodNotAllowed(): Response {\n return new Response(JSON.stringify({ error: \"Method Not Allowed\" }), {\n status: 405,\n headers: { \"Content-Type\": \"application/json\", Allow: \"GET\" },\n });\n}\n\nasync function withTimeout<T>(promise: Promise<T>, timeoutMs: number): Promise<T> {\n let timer: ReturnType<typeof setTimeout> | undefined;\n try {\n return await Promise.race([\n promise,\n new Promise<T>((_, reject) => {\n timer = setTimeout(() => reject(new Error(\"timeout\")), timeoutMs);\n }),\n ]);\n } finally {\n if (timer) clearTimeout(timer);\n }\n}\n\nasync function mapWithConcurrency<T, R>(\n items: T[],\n concurrency: number,\n fn: (item: T, index: number) => Promise<R>,\n): Promise<R[]> {\n const results = new Array<R>(items.length);\n let nextIndex = 0;\n const workerCount = Math.min(Math.max(1, concurrency), items.length);\n\n await Promise.all(\n Array.from({ length: workerCount }, async () => {\n while (nextIndex < items.length) {\n const index = nextIndex++;\n results[index] = await fn(items[index]!, index);\n }\n }),\n );\n\n return results;\n}\n\n// ---------------------------------------------------------------------------\n// healthHandler\n// ---------------------------------------------------------------------------\n\n/**\n * Factory: `GET /.well-known/service/health`\n *\n * Returns `{ status: \"ok\", version, uptime, ts }`.\n * With `?deep`: also probes each mount via `stat(\"/\")`.\n */\nexport function healthHandler(\n afs: AFS,\n config: HealthConfig,\n): (request: Request) => Promise<Response> {\n return async (request: Request): Promise<Response> => {\n if (request.method !== \"GET\") return methodNotAllowed();\n\n const url = new URL(request.url);\n const body: Record<string, unknown> = {\n status: \"ok\",\n version: config.version,\n uptime: Math.floor((Date.now() - config.startedAt) / 1000),\n ts: new Date().toISOString(),\n };\n\n if (url.searchParams.has(\"deep\")) {\n const mounts = afs.getMounts(null);\n body.mounts = await mapWithConcurrency(mounts, DEEP_HEALTH_MAX_CONCURRENCY, async (m) => {\n try {\n if (typeof m.module.stat === \"function\") {\n await withTimeout(m.module.stat(\"/\"), DEEP_HEALTH_TIMEOUT_MS);\n }\n return { path: m.path, status: \"ok\" as const };\n } catch (err) {\n return {\n path: m.path,\n status: \"error\" as const,\n error: err instanceof Error ? err.message : String(err),\n };\n }\n });\n }\n\n return Response.json(body);\n };\n}\n\n// ---------------------------------------------------------------------------\n// infoHandler\n// ---------------------------------------------------------------------------\n\n/**\n * Factory: `GET /.well-known/service/info`\n *\n * Returns `{ name, version, mode, mounts: [{ path, provider, status }] }`.\n */\nexport function infoHandler(afs: AFS, config: InfoConfig): (request: Request) => Promise<Response> {\n return async (request: Request): Promise<Response> => {\n if (request.method !== \"GET\") return methodNotAllowed();\n\n const mounts = afs.getMounts(null);\n return Response.json({\n name: config.name,\n version: config.version,\n mode: config.mode,\n mounts: mounts.map((m) => ({\n path: m.path,\n provider: m.module.name,\n status: m.status ?? \"ok\",\n })),\n });\n };\n}\n\n// ---------------------------------------------------------------------------\n// apiHandler\n// ---------------------------------------------------------------------------\n\n/**\n * Factory: `GET /.well-known/service/api`\n *\n * Returns `{ endpoints: [{ method, path, description }] }`.\n */\nexport function apiHandler(routes: RouteDescriptor[]): (request: Request) => Promise<Response> {\n return async (request: Request): Promise<Response> => {\n if (request.method !== \"GET\") return methodNotAllowed();\n\n return Response.json({ endpoints: routes });\n };\n}\n"],"mappings":";AAmCA,MAAM,yBAAyB;AAC/B,MAAa,8BAA8B;AAE3C,SAAS,mBAA6B;AACpC,QAAO,IAAI,SAAS,KAAK,UAAU,EAAE,OAAO,sBAAsB,CAAC,EAAE;EACnE,QAAQ;EACR,SAAS;GAAE,gBAAgB;GAAoB,OAAO;GAAO;EAC9D,CAAC;;AAGJ,eAAe,YAAe,SAAqB,WAA+B;CAChF,IAAI;AACJ,KAAI;AACF,SAAO,MAAM,QAAQ,KAAK,CACxB,SACA,IAAI,SAAY,GAAG,WAAW;AAC5B,WAAQ,iBAAiB,uBAAO,IAAI,MAAM,UAAU,CAAC,EAAE,UAAU;IACjE,CACH,CAAC;WACM;AACR,MAAI,MAAO,cAAa,MAAM;;;AAIlC,eAAe,mBACb,OACA,aACA,IACc;CACd,MAAM,UAAU,IAAI,MAAS,MAAM,OAAO;CAC1C,IAAI,YAAY;CAChB,MAAM,cAAc,KAAK,IAAI,KAAK,IAAI,GAAG,YAAY,EAAE,MAAM,OAAO;AAEpE,OAAM,QAAQ,IACZ,MAAM,KAAK,EAAE,QAAQ,aAAa,EAAE,YAAY;AAC9C,SAAO,YAAY,MAAM,QAAQ;GAC/B,MAAM,QAAQ;AACd,WAAQ,SAAS,MAAM,GAAG,MAAM,QAAS,MAAM;;GAEjD,CACH;AAED,QAAO;;;;;;;;AAaT,SAAgB,cACd,KACA,QACyC;AACzC,QAAO,OAAO,YAAwC;AACpD,MAAI,QAAQ,WAAW,MAAO,QAAO,kBAAkB;EAEvD,MAAM,MAAM,IAAI,IAAI,QAAQ,IAAI;EAChC,MAAM,OAAgC;GACpC,QAAQ;GACR,SAAS,OAAO;GAChB,QAAQ,KAAK,OAAO,KAAK,KAAK,GAAG,OAAO,aAAa,IAAK;GAC1D,qBAAI,IAAI,MAAM,EAAC,aAAa;GAC7B;AAED,MAAI,IAAI,aAAa,IAAI,OAAO,CAE9B,MAAK,SAAS,MAAM,mBADL,IAAI,UAAU,KAAK,EACa,6BAA6B,OAAO,MAAM;AACvF,OAAI;AACF,QAAI,OAAO,EAAE,OAAO,SAAS,WAC3B,OAAM,YAAY,EAAE,OAAO,KAAK,IAAI,EAAE,uBAAuB;AAE/D,WAAO;KAAE,MAAM,EAAE;KAAM,QAAQ;KAAe;YACvC,KAAK;AACZ,WAAO;KACL,MAAM,EAAE;KACR,QAAQ;KACR,OAAO,eAAe,QAAQ,IAAI,UAAU,OAAO,IAAI;KACxD;;IAEH;AAGJ,SAAO,SAAS,KAAK,KAAK;;;;;;;;AAa9B,SAAgB,YAAY,KAAU,QAA6D;AACjG,QAAO,OAAO,YAAwC;AACpD,MAAI,QAAQ,WAAW,MAAO,QAAO,kBAAkB;EAEvD,MAAM,SAAS,IAAI,UAAU,KAAK;AAClC,SAAO,SAAS,KAAK;GACnB,MAAM,OAAO;GACb,SAAS,OAAO;GAChB,MAAM,OAAO;GACb,QAAQ,OAAO,KAAK,OAAO;IACzB,MAAM,EAAE;IACR,UAAU,EAAE,OAAO;IACnB,QAAQ,EAAE,UAAU;IACrB,EAAE;GACJ,CAAC;;;;;;;;AAaN,SAAgB,WAAW,QAAoE;AAC7F,QAAO,OAAO,YAAwC;AACpD,MAAI,QAAQ,WAAW,MAAO,QAAO,kBAAkB;AAEvD,SAAO,SAAS,KAAK,EAAE,WAAW,QAAQ,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import { HealthConfig, InfoConfig, RouteDescriptor, apiHandler, healthHandler, infoHandler } from "./handlers.mjs";
|