@nextclaw/app-runtime 0.9.13 → 0.9.14
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +2 -2
- package/dist/{main.js → app/main.js} +2 -2
- package/dist/app/main.js.map +1 -0
- package/dist/{commands → controllers}/create.controller.d.ts +2 -2
- package/dist/controllers/create.controller.d.ts.map +1 -0
- package/dist/{commands → controllers}/create.controller.js +2 -2
- package/dist/controllers/create.controller.js.map +1 -0
- package/dist/{commands → controllers}/dev.controller.js +1 -1
- package/dist/controllers/dev.controller.js.map +1 -0
- package/dist/{commands → controllers}/grant.controller.d.ts +3 -3
- package/dist/controllers/grant.controller.d.ts.map +1 -0
- package/dist/{commands → controllers}/grant.controller.js +2 -2
- package/dist/controllers/grant.controller.js.map +1 -0
- package/dist/{commands → controllers}/info.controller.d.ts +2 -2
- package/dist/controllers/info.controller.d.ts.map +1 -0
- package/dist/{commands → controllers}/info.controller.js +2 -2
- package/dist/controllers/info.controller.js.map +1 -0
- package/dist/{commands → controllers}/inspect.controller.js +8 -2
- package/dist/controllers/inspect.controller.js.map +1 -0
- package/dist/{commands → controllers}/install.controller.d.ts +2 -2
- package/dist/controllers/install.controller.d.ts.map +1 -0
- package/dist/{commands → controllers}/install.controller.js +2 -2
- package/dist/controllers/install.controller.js.map +1 -0
- package/dist/{commands → controllers}/list.controller.d.ts +2 -2
- package/dist/controllers/list.controller.d.ts.map +1 -0
- package/dist/{commands → controllers}/list.controller.js +2 -2
- package/dist/controllers/list.controller.js.map +1 -0
- package/dist/controllers/pack.controller.d.ts +19 -0
- package/dist/controllers/pack.controller.d.ts.map +1 -0
- package/dist/{commands → controllers}/pack.controller.js +8 -4
- package/dist/controllers/pack.controller.js.map +1 -0
- package/dist/{commands → controllers}/permissions.controller.d.ts +2 -2
- package/dist/controllers/permissions.controller.d.ts.map +1 -0
- package/dist/{commands → controllers}/permissions.controller.js +2 -2
- package/dist/controllers/permissions.controller.js.map +1 -0
- package/dist/{commands → controllers}/publish.controller.d.ts +3 -3
- package/dist/controllers/publish.controller.d.ts.map +1 -0
- package/dist/{commands → controllers}/publish.controller.js +2 -2
- package/dist/controllers/publish.controller.js.map +1 -0
- package/dist/{commands → controllers}/registry.controller.d.ts +2 -2
- package/dist/controllers/registry.controller.d.ts.map +1 -0
- package/dist/{commands → controllers}/registry.controller.js +2 -2
- package/dist/controllers/registry.controller.js.map +1 -0
- package/dist/{commands → controllers}/revoke.controller.d.ts +2 -2
- package/dist/controllers/revoke.controller.d.ts.map +1 -0
- package/dist/{commands → controllers}/revoke.controller.js +2 -2
- package/dist/controllers/revoke.controller.js.map +1 -0
- package/dist/{commands → controllers}/run.controller.js +8 -6
- package/dist/controllers/run.controller.js.map +1 -0
- package/dist/{commands → controllers}/uninstall.controller.d.ts +2 -2
- package/dist/controllers/uninstall.controller.d.ts.map +1 -0
- package/dist/{commands → controllers}/uninstall.controller.js +2 -2
- package/dist/controllers/uninstall.controller.js.map +1 -0
- package/dist/{commands → controllers}/update.controller.d.ts +2 -2
- package/dist/controllers/update.controller.d.ts.map +1 -0
- package/dist/{commands → controllers}/update.controller.js +2 -2
- package/dist/controllers/update.controller.js.map +1 -0
- package/dist/{commands → controllers}/validate-publish.controller.d.ts +3 -3
- package/dist/controllers/validate-publish.controller.d.ts.map +1 -0
- package/dist/{commands → controllers}/validate-publish.controller.js +9 -5
- package/dist/controllers/validate-publish.controller.js.map +1 -0
- package/dist/index.d.ts +51 -51
- package/dist/index.js +46 -45
- package/dist/package.js +1 -1
- package/dist/{runtime → services}/app-build.service.d.ts +2 -2
- package/dist/services/app-build.service.d.ts.map +1 -0
- package/dist/{runtime → services}/app-build.service.js +4 -2
- package/dist/services/app-build.service.js.map +1 -0
- package/dist/{bundle → services}/app-bundle.service.d.ts +18 -6
- package/dist/services/app-bundle.service.d.ts.map +1 -0
- package/dist/services/app-bundle.service.js +305 -0
- package/dist/services/app-bundle.service.js.map +1 -0
- package/dist/{permissions → services}/app-grant.service.d.ts +4 -4
- package/dist/services/app-grant.service.d.ts.map +1 -0
- package/dist/{permissions → services}/app-grant.service.js +7 -4
- package/dist/services/app-grant.service.js.map +1 -0
- package/dist/{paths → services}/app-home.service.d.ts +1 -1
- package/dist/services/app-home.service.d.ts.map +1 -0
- package/dist/{paths → services}/app-home.service.js +1 -1
- package/dist/services/app-home.service.js.map +1 -0
- package/dist/{host → services}/app-host.service.d.ts +2 -2
- package/dist/services/app-host.service.d.ts.map +1 -0
- package/dist/{host → services}/app-host.service.js +3 -3
- package/dist/services/app-host.service.js.map +1 -0
- package/dist/services/app-install-source.service.js +72 -0
- package/dist/services/app-install-source.service.js.map +1 -0
- package/dist/{install → services}/app-installation.service.d.ts +15 -14
- package/dist/services/app-installation.service.d.ts.map +1 -0
- package/dist/services/app-installation.service.js +332 -0
- package/dist/services/app-installation.service.js.map +1 -0
- package/dist/services/app-instance.service.d.ts +34 -0
- package/dist/services/app-instance.service.d.ts.map +1 -0
- package/dist/{host → services}/app-instance.service.js +4 -4
- package/dist/services/app-instance.service.js.map +1 -0
- package/dist/{manifest → services}/app-manifest.service.d.ts +12 -2
- package/dist/services/app-manifest.service.d.ts.map +1 -0
- package/dist/services/app-manifest.service.js +271 -0
- package/dist/services/app-manifest.service.js.map +1 -0
- package/dist/{publish → services}/app-marketplace-client.service.d.ts +2 -2
- package/dist/services/app-marketplace-client.service.d.ts.map +1 -0
- package/dist/{publish → services}/app-marketplace-client.service.js +2 -2
- package/dist/services/app-marketplace-client.service.js.map +1 -0
- package/dist/{publish → services}/app-marketplace-metadata.service.d.ts +3 -3
- package/dist/services/app-marketplace-metadata.service.d.ts.map +1 -0
- package/dist/{publish → services}/app-marketplace-metadata.service.js +1 -1
- package/dist/services/app-marketplace-metadata.service.js.map +1 -0
- package/dist/{permissions → services}/app-permissions.service.d.ts +3 -3
- package/dist/services/app-permissions.service.d.ts.map +1 -0
- package/dist/{permissions → services}/app-permissions.service.js +4 -1
- package/dist/services/app-permissions.service.js.map +1 -0
- package/dist/{publish → services}/app-publish-validation.service.d.ts +9 -7
- package/dist/services/app-publish-validation.service.d.ts.map +1 -0
- package/dist/{publish → services}/app-publish-validation.service.js +14 -10
- package/dist/services/app-publish-validation.service.js.map +1 -0
- package/dist/{publish → services}/app-publish.service.d.ts +5 -5
- package/dist/services/app-publish.service.d.ts.map +1 -0
- package/dist/{publish → services}/app-publish.service.js +6 -6
- package/dist/services/app-publish.service.js.map +1 -0
- package/dist/{registry → services}/app-registry-config.service.d.ts +3 -3
- package/dist/{registry → services}/app-registry-config.service.d.ts.map +1 -1
- package/dist/{registry → services}/app-registry-config.service.js +3 -3
- package/dist/services/app-registry-config.service.js.map +1 -0
- package/dist/{registry → services}/app-registry.service.d.ts +18 -5
- package/dist/services/app-registry.service.d.ts.map +1 -0
- package/dist/services/app-registry.service.js +210 -0
- package/dist/services/app-registry.service.js.map +1 -0
- package/dist/{registry → services}/app-remote-registry-client.service.d.ts +6 -2
- package/dist/services/app-remote-registry-client.service.d.ts.map +1 -0
- package/dist/{registry → services}/app-remote-registry-client.service.js +54 -8
- package/dist/services/app-remote-registry-client.service.js.map +1 -0
- package/dist/{cli → services}/app-runtime-cli.service.d.ts +1 -1
- package/dist/services/app-runtime-cli.service.d.ts.map +1 -0
- package/dist/{cli → services}/app-runtime-cli.service.js +19 -19
- package/dist/services/app-runtime-cli.service.js.map +1 -0
- package/dist/{cli → services}/app-runtime-options.service.d.ts +6 -6
- package/dist/services/app-runtime-options.service.d.ts.map +1 -0
- package/dist/{cli → services}/app-runtime-options.service.js +3 -9
- package/dist/services/app-runtime-options.service.js.map +1 -0
- package/dist/{runtime → services}/app-runtime-toolchain.service.d.ts +1 -1
- package/dist/services/app-runtime-toolchain.service.d.ts.map +1 -0
- package/dist/{runtime → services}/app-runtime-toolchain.service.js +1 -1
- package/dist/services/app-runtime-toolchain.service.js.map +1 -0
- package/dist/{scaffold → services}/app-scaffold.service.d.ts +1 -1
- package/dist/{scaffold → services}/app-scaffold.service.d.ts.map +1 -1
- package/dist/{scaffold → services}/app-scaffold.service.js +1 -1
- package/dist/{scaffold → services}/app-scaffold.service.js.map +1 -1
- package/dist/{scaffold → services}/app-ts-http-lite-scaffold-template.service.d.ts +1 -1
- package/dist/{scaffold → services}/app-ts-http-lite-scaffold-template.service.d.ts.map +1 -1
- package/dist/{scaffold → services}/app-ts-http-lite-scaffold-template.service.js +1 -1
- package/dist/{scaffold → services}/app-ts-http-lite-scaffold-template.service.js.map +1 -1
- package/dist/{scaffold → services}/app-ts-http-scaffold-template.service.d.ts +1 -1
- package/dist/{scaffold → services}/app-ts-http-scaffold-template.service.d.ts.map +1 -1
- package/dist/{scaffold → services}/app-ts-http-scaffold-template.service.js +1 -1
- package/dist/{scaffold → services}/app-ts-http-scaffold-template.service.js.map +1 -1
- package/dist/{bridge → services}/host-bridge.service.d.ts +2 -2
- package/dist/services/host-bridge.service.d.ts.map +1 -0
- package/dist/{bridge → services}/host-bridge.service.js +1 -1
- package/dist/services/host-bridge.service.js.map +1 -0
- package/dist/services/main-runner.service.d.ts +9 -0
- package/dist/services/main-runner.service.d.ts.map +1 -0
- package/dist/services/main-runner.service.js +6 -0
- package/dist/services/main-runner.service.js.map +1 -0
- package/dist/{publish → services}/platform-auth-state.service.d.ts +1 -1
- package/dist/services/platform-auth-state.service.d.ts.map +1 -0
- package/dist/{publish → services}/platform-auth-state.service.js +1 -1
- package/dist/services/platform-auth-state.service.js.map +1 -0
- package/dist/{ui → services}/ui-server.service.d.ts +3 -3
- package/dist/services/ui-server.service.d.ts.map +1 -0
- package/dist/{ui → services}/ui-server.service.js +1 -1
- package/dist/services/ui-server.service.js.map +1 -0
- package/dist/{runtime → services}/wasm-main-runner.service.d.ts +3 -3
- package/dist/services/wasm-main-runner.service.d.ts.map +1 -0
- package/dist/{runtime → services}/wasm-main-runner.service.js +2 -2
- package/dist/services/wasm-main-runner.service.js.map +1 -0
- package/dist/{sidecar → services}/wasm-sidecar-client.service.d.ts +1 -1
- package/dist/services/wasm-sidecar-client.service.d.ts.map +1 -0
- package/dist/{sidecar → services}/wasm-sidecar-client.service.js +1 -1
- package/dist/services/wasm-sidecar-client.service.js.map +1 -0
- package/dist/{runtime → services}/wasmtime-wasi-http-component.service.d.ts +1 -1
- package/dist/services/wasmtime-wasi-http-component.service.d.ts.map +1 -0
- package/dist/{runtime → services}/wasmtime-wasi-http-component.service.js +1 -1
- package/dist/services/wasmtime-wasi-http-component.service.js.map +1 -0
- package/dist/{bundle → types}/app-bundle.types.d.ts +1 -1
- package/dist/types/app-bundle.types.d.ts.map +1 -0
- package/dist/{install → types}/app-installation.types.d.ts +27 -7
- package/dist/types/app-installation.types.d.ts.map +1 -0
- package/dist/types/app-manifest.types.d.ts +119 -0
- package/dist/types/app-manifest.types.d.ts.map +1 -0
- package/dist/types/app-manifest.types.js +11 -0
- package/dist/types/app-manifest.types.js.map +1 -0
- package/dist/{permissions → types}/app-permissions.types.d.ts +2 -2
- package/dist/types/app-permissions.types.d.ts.map +1 -0
- package/dist/{publish → types}/app-publish.types.d.ts +4 -4
- package/dist/types/app-publish.types.d.ts.map +1 -0
- package/dist/{publish → types}/app-publish.types.js +1 -1
- package/dist/types/app-publish.types.js.map +1 -0
- package/dist/{registry → types}/app-registry.types.d.ts +8 -4
- package/dist/types/app-registry.types.d.ts.map +1 -0
- package/dist/{registry → types}/app-remote-registry.types.d.ts +3 -3
- package/dist/types/app-remote-registry.types.d.ts.map +1 -0
- package/dist/{registry → types}/app-remote-registry.types.js +1 -1
- package/dist/types/app-remote-registry.types.js.map +1 -0
- package/dist/{runtime → types}/main-runner.types.d.ts +3 -3
- package/dist/types/main-runner.types.d.ts.map +1 -0
- package/package.json +10 -3
- package/dist/bridge/host-bridge.service.d.ts.map +0 -1
- package/dist/bridge/host-bridge.service.js.map +0 -1
- package/dist/bundle/app-bundle.service.d.ts.map +0 -1
- package/dist/bundle/app-bundle.service.js +0 -196
- package/dist/bundle/app-bundle.service.js.map +0 -1
- package/dist/bundle/app-bundle.types.d.ts.map +0 -1
- package/dist/cli/app-runtime-cli.service.d.ts.map +0 -1
- package/dist/cli/app-runtime-cli.service.js.map +0 -1
- package/dist/cli/app-runtime-options.service.d.ts.map +0 -1
- package/dist/cli/app-runtime-options.service.js.map +0 -1
- package/dist/commands/create.controller.d.ts.map +0 -1
- package/dist/commands/create.controller.js.map +0 -1
- package/dist/commands/dev.controller.js.map +0 -1
- package/dist/commands/grant.controller.d.ts.map +0 -1
- package/dist/commands/grant.controller.js.map +0 -1
- package/dist/commands/info.controller.d.ts.map +0 -1
- package/dist/commands/info.controller.js.map +0 -1
- package/dist/commands/inspect.controller.js.map +0 -1
- package/dist/commands/install.controller.d.ts.map +0 -1
- package/dist/commands/install.controller.js.map +0 -1
- package/dist/commands/list.controller.d.ts.map +0 -1
- package/dist/commands/list.controller.js.map +0 -1
- package/dist/commands/pack.controller.d.ts +0 -17
- package/dist/commands/pack.controller.d.ts.map +0 -1
- package/dist/commands/pack.controller.js.map +0 -1
- package/dist/commands/permissions.controller.d.ts.map +0 -1
- package/dist/commands/permissions.controller.js.map +0 -1
- package/dist/commands/publish.controller.d.ts.map +0 -1
- package/dist/commands/publish.controller.js.map +0 -1
- package/dist/commands/registry.controller.d.ts.map +0 -1
- package/dist/commands/registry.controller.js.map +0 -1
- package/dist/commands/revoke.controller.d.ts.map +0 -1
- package/dist/commands/revoke.controller.js.map +0 -1
- package/dist/commands/run.controller.js.map +0 -1
- package/dist/commands/uninstall.controller.d.ts.map +0 -1
- package/dist/commands/uninstall.controller.js.map +0 -1
- package/dist/commands/update.controller.d.ts.map +0 -1
- package/dist/commands/update.controller.js.map +0 -1
- package/dist/commands/validate-publish.controller.d.ts.map +0 -1
- package/dist/commands/validate-publish.controller.js.map +0 -1
- package/dist/host/app-host.service.d.ts.map +0 -1
- package/dist/host/app-host.service.js.map +0 -1
- package/dist/host/app-instance.service.d.ts +0 -34
- package/dist/host/app-instance.service.d.ts.map +0 -1
- package/dist/host/app-instance.service.js.map +0 -1
- package/dist/install/app-installation.service.d.ts.map +0 -1
- package/dist/install/app-installation.service.js +0 -276
- package/dist/install/app-installation.service.js.map +0 -1
- package/dist/install/app-installation.types.d.ts.map +0 -1
- package/dist/main.js.map +0 -1
- package/dist/manifest/app-manifest.service.d.ts.map +0 -1
- package/dist/manifest/app-manifest.service.js +0 -147
- package/dist/manifest/app-manifest.service.js.map +0 -1
- package/dist/manifest/app-manifest.types.d.ts +0 -68
- package/dist/manifest/app-manifest.types.d.ts.map +0 -1
- package/dist/paths/app-home.service.d.ts.map +0 -1
- package/dist/paths/app-home.service.js.map +0 -1
- package/dist/permissions/app-grant.service.d.ts.map +0 -1
- package/dist/permissions/app-grant.service.js.map +0 -1
- package/dist/permissions/app-permissions.service.d.ts.map +0 -1
- package/dist/permissions/app-permissions.service.js.map +0 -1
- package/dist/permissions/app-permissions.types.d.ts.map +0 -1
- package/dist/publish/app-marketplace-client.service.d.ts.map +0 -1
- package/dist/publish/app-marketplace-client.service.js.map +0 -1
- package/dist/publish/app-marketplace-metadata.service.d.ts.map +0 -1
- package/dist/publish/app-marketplace-metadata.service.js.map +0 -1
- package/dist/publish/app-publish-validation.service.d.ts.map +0 -1
- package/dist/publish/app-publish-validation.service.js.map +0 -1
- package/dist/publish/app-publish.service.d.ts.map +0 -1
- package/dist/publish/app-publish.service.js.map +0 -1
- package/dist/publish/app-publish.types.d.ts.map +0 -1
- package/dist/publish/app-publish.types.js.map +0 -1
- package/dist/publish/platform-auth-state.service.d.ts.map +0 -1
- package/dist/publish/platform-auth-state.service.js.map +0 -1
- package/dist/registry/app-registry-config.service.js.map +0 -1
- package/dist/registry/app-registry.service.d.ts.map +0 -1
- package/dist/registry/app-registry.service.js +0 -118
- package/dist/registry/app-registry.service.js.map +0 -1
- package/dist/registry/app-registry.types.d.ts.map +0 -1
- package/dist/registry/app-remote-registry-client.service.d.ts.map +0 -1
- package/dist/registry/app-remote-registry-client.service.js.map +0 -1
- package/dist/registry/app-remote-registry.types.d.ts.map +0 -1
- package/dist/registry/app-remote-registry.types.js.map +0 -1
- package/dist/runtime/app-build.service.d.ts.map +0 -1
- package/dist/runtime/app-build.service.js.map +0 -1
- package/dist/runtime/app-runtime-toolchain.service.d.ts.map +0 -1
- package/dist/runtime/app-runtime-toolchain.service.js.map +0 -1
- package/dist/runtime/main-runner.service.d.ts +0 -9
- package/dist/runtime/main-runner.service.d.ts.map +0 -1
- package/dist/runtime/main-runner.service.js +0 -6
- package/dist/runtime/main-runner.service.js.map +0 -1
- package/dist/runtime/main-runner.types.d.ts.map +0 -1
- package/dist/runtime/wasm-main-runner.service.d.ts.map +0 -1
- package/dist/runtime/wasm-main-runner.service.js.map +0 -1
- package/dist/runtime/wasmtime-wasi-http-component.service.d.ts.map +0 -1
- package/dist/runtime/wasmtime-wasi-http-component.service.js.map +0 -1
- package/dist/sidecar/wasm-sidecar-client.service.d.ts.map +0 -1
- package/dist/sidecar/wasm-sidecar-client.service.js.map +0 -1
- package/dist/ui/ui-server.service.d.ts.map +0 -1
- package/dist/ui/ui-server.service.js.map +0 -1
- /package/dist/{main.d.ts → app/main.d.ts} +0 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"platform-auth-state.service.js","names":[],"sources":["../../src/services/platform-auth-state.service.ts"],"sourcesContent":["import { existsSync, readFileSync } from \"node:fs\";\nimport { resolve } from \"node:path\";\nimport { homedir } from \"node:os\";\n\ntype NextclawConfig = {\n providers?: Record<string, {\n apiKey?: string;\n apiBase?: string | null;\n } | undefined>;\n};\n\nexport type PlatformPublishAuthState = {\n token: string | null;\n apiBaseUrl?: string;\n};\n\nconst NEXTCLAW_HOME_ENV_KEY = \"NEXTCLAW_HOME\";\nconst NEXTCLAW_DEFAULT_HOME_DIR = \".nextclaw\";\n\nexport class PlatformAuthStateService {\n readCurrentAuthState = (): PlatformPublishAuthState => {\n const configPath = this.resolveConfigPath();\n if (!existsSync(configPath)) {\n return {\n token: null,\n };\n }\n try {\n const raw = readFileSync(configPath, \"utf-8\");\n const parsed = JSON.parse(raw) as NextclawConfig;\n const provider = parsed.providers?.nextclaw;\n const token = typeof provider?.apiKey === \"string\" && provider.apiKey.trim().length > 0\n ? provider.apiKey.trim()\n : null;\n const apiBase = typeof provider?.apiBase === \"string\" && provider.apiBase.trim().length > 0\n ? provider.apiBase.trim()\n : undefined;\n return {\n token,\n apiBaseUrl: apiBase,\n };\n } catch {\n return {\n token: null,\n };\n }\n };\n\n private resolveConfigPath = (): string => {\n const nextclawHome = process.env[NEXTCLAW_HOME_ENV_KEY]?.trim();\n const dataHome = nextclawHome && nextclawHome.length > 0\n ? resolve(nextclawHome)\n : resolve(homedir(), NEXTCLAW_DEFAULT_HOME_DIR);\n return resolve(dataHome, \"config.json\");\n };\n}\n"],"mappings":";;;;AAgBA,MAAM,wBAAwB;AAC9B,MAAM,4BAA4B;AAElC,IAAa,2BAAb,MAAsC;CACpC,6BAAuD;EACrD,MAAM,aAAa,KAAK,mBAAmB;AAC3C,MAAI,CAAC,WAAW,WAAW,CACzB,QAAO,EACL,OAAO,MACR;AAEH,MAAI;GACF,MAAM,MAAM,aAAa,YAAY,QAAQ;GAE7C,MAAM,WADS,KAAK,MAAM,IAAI,CACN,WAAW;AAOnC,UAAO;IACL,OAPY,OAAO,UAAU,WAAW,YAAY,SAAS,OAAO,MAAM,CAAC,SAAS,IAClF,SAAS,OAAO,MAAM,GACtB;IAMF,YALc,OAAO,UAAU,YAAY,YAAY,SAAS,QAAQ,MAAM,CAAC,SAAS,IACtF,SAAS,QAAQ,MAAM,GACvB,KAAA;IAIH;UACK;AACN,UAAO,EACL,OAAO,MACR;;;CAIL,0BAA0C;EACxC,MAAM,eAAe,QAAQ,IAAI,wBAAwB,MAAM;AAI/D,SAAO,QAHU,gBAAgB,aAAa,SAAS,IACnD,QAAQ,aAAa,GACrB,QAAQ,SAAS,EAAE,0BAA0B,EACxB,cAAc"}
|
|
@@ -1,10 +1,10 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { AppStandaloneManifestBundle } from "../types/app-manifest.types.js";
|
|
2
2
|
import { IncomingMessage, ServerResponse } from "node:http";
|
|
3
3
|
|
|
4
|
-
//#region src/
|
|
4
|
+
//#region src/services/ui-server.service.d.ts
|
|
5
5
|
declare class UiServerService {
|
|
6
6
|
private readonly bundle;
|
|
7
|
-
constructor(bundle:
|
|
7
|
+
constructor(bundle: AppStandaloneManifestBundle);
|
|
8
8
|
handle: (request: IncomingMessage, response: ServerResponse) => Promise<boolean>;
|
|
9
9
|
private resolveContentType;
|
|
10
10
|
private exists;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ui-server.service.d.ts","names":[],"sources":["../../src/services/ui-server.service.ts"],"mappings":";;;;cAca,eAAA;EAAA,iBACkB,MAAA;cAAA,MAAA,EAAQ,2BAAA;EAErC,MAAA,GACE,OAAA,EAAS,eAAA,EACT,QAAA,EAAU,cAAA,KACT,OAAA;EAAA,QA8BK,kBAAA;EAAA,QAKA,MAAA;EAAA,QASA,wBAAA;AAAA"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { access, readFile } from "node:fs/promises";
|
|
2
2
|
import path from "node:path";
|
|
3
|
-
//#region src/
|
|
3
|
+
//#region src/services/ui-server.service.ts
|
|
4
4
|
const CONTENT_TYPE_BY_EXTENSION = {
|
|
5
5
|
".css": "text/css; charset=utf-8",
|
|
6
6
|
".html": "text/html; charset=utf-8",
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ui-server.service.js","names":[],"sources":["../../src/services/ui-server.service.ts"],"sourcesContent":["import { access, readFile } from \"node:fs/promises\";\nimport path from \"node:path\";\nimport type { IncomingMessage, ServerResponse } from \"node:http\";\nimport type { AppStandaloneManifestBundle } from \"#app-runtime/types/app-manifest.types.js\";\n\nconst CONTENT_TYPE_BY_EXTENSION: Record<string, string> = {\n \".css\": \"text/css; charset=utf-8\",\n \".html\": \"text/html; charset=utf-8\",\n \".js\": \"text/javascript; charset=utf-8\",\n \".json\": \"application/json; charset=utf-8\",\n \".png\": \"image/png\",\n \".svg\": \"image/svg+xml; charset=utf-8\",\n};\n\nexport class UiServerService {\n constructor(private readonly bundle: AppStandaloneManifestBundle) {}\n\n handle = async (\n request: IncomingMessage,\n response: ServerResponse,\n ): Promise<boolean> => {\n const requestUrl = new URL(request.url ?? \"/\", \"http://127.0.0.1\");\n const requestPath = requestUrl.pathname === \"/\" ? \"/index.html\" : requestUrl.pathname;\n const candidatePaths = [\n path.join(this.bundle.uiDirectoryPath, requestPath.slice(1)),\n path.join(this.bundle.assetsDirectoryPath, requestPath.slice(1)),\n ];\n\n for (const candidatePath of candidatePaths) {\n if (!(await this.isInsideAllowedDirectory(candidatePath))) {\n continue;\n }\n if (!(await this.exists(candidatePath))) {\n continue;\n }\n const content = await readFile(candidatePath);\n response.writeHead(200, {\n \"content-type\": this.resolveContentType(candidatePath),\n });\n response.end(content);\n return true;\n }\n\n response.writeHead(404, {\n \"content-type\": \"text/plain; charset=utf-8\",\n });\n response.end(`Not found: ${requestPath}`);\n return true;\n };\n\n private resolveContentType = (filePath: string): string => {\n const extension = path.extname(filePath).toLowerCase();\n return CONTENT_TYPE_BY_EXTENSION[extension] ?? \"application/octet-stream\";\n };\n\n private exists = async (filePath: string): Promise<boolean> => {\n try {\n await access(filePath);\n return true;\n } catch {\n return false;\n }\n };\n\n private isInsideAllowedDirectory = async (candidatePath: string): Promise<boolean> => {\n const allowedDirectories = [this.bundle.uiDirectoryPath, this.bundle.assetsDirectoryPath];\n return allowedDirectories.some((directoryPath) => {\n const relative = path.relative(directoryPath, candidatePath);\n return relative === \"\" || (!relative.startsWith(\"..\") && !path.isAbsolute(relative));\n });\n };\n}\n"],"mappings":";;;AAKA,MAAM,4BAAoD;CACxD,QAAQ;CACR,SAAS;CACT,OAAO;CACP,SAAS;CACT,QAAQ;CACR,QAAQ;CACT;AAED,IAAa,kBAAb,MAA6B;CAC3B,YAAY,QAAsD;AAArC,OAAA,SAAA;;CAE7B,SAAS,OACP,SACA,aACqB;EACrB,MAAM,aAAa,IAAI,IAAI,QAAQ,OAAO,KAAK,mBAAmB;EAClE,MAAM,cAAc,WAAW,aAAa,MAAM,gBAAgB,WAAW;EAC7E,MAAM,iBAAiB,CACrB,KAAK,KAAK,KAAK,OAAO,iBAAiB,YAAY,MAAM,EAAE,CAAC,EAC5D,KAAK,KAAK,KAAK,OAAO,qBAAqB,YAAY,MAAM,EAAE,CAAC,CACjE;AAED,OAAK,MAAM,iBAAiB,gBAAgB;AAC1C,OAAI,CAAE,MAAM,KAAK,yBAAyB,cAAc,CACtD;AAEF,OAAI,CAAE,MAAM,KAAK,OAAO,cAAc,CACpC;GAEF,MAAM,UAAU,MAAM,SAAS,cAAc;AAC7C,YAAS,UAAU,KAAK,EACtB,gBAAgB,KAAK,mBAAmB,cAAc,EACvD,CAAC;AACF,YAAS,IAAI,QAAQ;AACrB,UAAO;;AAGT,WAAS,UAAU,KAAK,EACtB,gBAAgB,6BACjB,CAAC;AACF,WAAS,IAAI,cAAc,cAAc;AACzC,SAAO;;CAGT,sBAA8B,aAA6B;AAEzD,SAAO,0BADW,KAAK,QAAQ,SAAS,CAAC,aAAa,KACP;;CAGjD,SAAiB,OAAO,aAAuC;AAC7D,MAAI;AACF,SAAM,OAAO,SAAS;AACtB,UAAO;UACD;AACN,UAAO;;;CAIX,2BAAmC,OAAO,kBAA4C;AAEpF,SAD2B,CAAC,KAAK,OAAO,iBAAiB,KAAK,OAAO,oBAAoB,CAC/D,MAAM,kBAAkB;GAChD,MAAM,WAAW,KAAK,SAAS,eAAe,cAAc;AAC5D,UAAO,aAAa,MAAO,CAAC,SAAS,WAAW,KAAK,IAAI,CAAC,KAAK,WAAW,SAAS;IACnF"}
|
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
import { MainRunRequest, MainRunResult } from "
|
|
1
|
+
import { MainRunRequest, MainRunResult } from "../types/main-runner.types.js";
|
|
2
2
|
import { MainRunnerService } from "./main-runner.service.js";
|
|
3
|
-
import { WasmSidecarClientService } from "
|
|
3
|
+
import { WasmSidecarClientService } from "./wasm-sidecar-client.service.js";
|
|
4
4
|
|
|
5
|
-
//#region src/
|
|
5
|
+
//#region src/services/wasm-main-runner.service.d.ts
|
|
6
6
|
declare class WasmMainRunnerService extends MainRunnerService {
|
|
7
7
|
private readonly sidecarClient;
|
|
8
8
|
constructor(sidecarClient?: WasmSidecarClientService);
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"wasm-main-runner.service.d.ts","names":[],"sources":["../../src/services/wasm-main-runner.service.ts"],"mappings":";;;;;cAIa,qBAAA,SAA8B,iBAAA;EAAA,iBAEtB,aAAA;cAAA,aAAA,GAAe,wBAAA;EAKlC,kBAAA,GAA4B,OAAA,EAAS,cAAA,KAAiB,OAAA,CAAQ,aAAA;AAAA"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { MainRunnerService } from "./main-runner.service.js";
|
|
2
|
-
import { WasmSidecarClientService } from "
|
|
3
|
-
//#region src/
|
|
2
|
+
import { WasmSidecarClientService } from "./wasm-sidecar-client.service.js";
|
|
3
|
+
//#region src/services/wasm-main-runner.service.ts
|
|
4
4
|
var WasmMainRunnerService = class extends MainRunnerService {
|
|
5
5
|
constructor(sidecarClient = new WasmSidecarClientService()) {
|
|
6
6
|
super();
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"wasm-main-runner.service.js","names":[],"sources":["../../src/services/wasm-main-runner.service.ts"],"sourcesContent":["import { MainRunnerService } from \"./main-runner.service.js\";\nimport type { MainRunRequest, MainRunResult } from \"#app-runtime/types/main-runner.types.js\";\nimport { WasmSidecarClientService } from \"#app-runtime/services/wasm-sidecar-client.service.js\";\n\nexport class WasmMainRunnerService extends MainRunnerService {\n constructor(\n private readonly sidecarClient: WasmSidecarClientService = new WasmSidecarClientService(),\n ) {\n super();\n }\n\n runDocumentSummary = async (request: MainRunRequest): Promise<MainRunResult> => {\n if (request.bundle.manifest.main.kind !== \"wasm\") {\n throw new Error(\"runDocumentSummary 只支持 main.kind=wasm。\");\n }\n const output = await this.sidecarClient.runExport({\n wasmPath: request.bundle.mainEntryPath,\n exportName: request.bundle.manifest.main.export,\n args: [request.input.documentCount, request.input.textBytes],\n });\n return {\n exportName: request.bundle.manifest.main.export,\n output,\n };\n };\n}\n"],"mappings":";;;AAIA,IAAa,wBAAb,cAA2C,kBAAkB;CAC3D,YACE,gBAA2D,IAAI,0BAA0B,EACzF;AACA,SAAO;AAFU,OAAA,gBAAA;;CAKnB,qBAAqB,OAAO,YAAoD;AAC9E,MAAI,QAAQ,OAAO,SAAS,KAAK,SAAS,OACxC,OAAM,IAAI,MAAM,yCAAyC;EAE3D,MAAM,SAAS,MAAM,KAAK,cAAc,UAAU;GAChD,UAAU,QAAQ,OAAO;GACzB,YAAY,QAAQ,OAAO,SAAS,KAAK;GACzC,MAAM,CAAC,QAAQ,MAAM,eAAe,QAAQ,MAAM,UAAU;GAC7D,CAAC;AACF,SAAO;GACL,YAAY,QAAQ,OAAO,SAAS,KAAK;GACzC;GACD"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"wasm-sidecar-client.service.d.ts","names":[],"sources":["../../src/services/wasm-sidecar-client.service.ts"],"mappings":";cAaa,wBAAA;EACX,SAAA,GAAmB,MAAA;IACjB,QAAA;IACA,UAAA;IACA,IAAA;EAAA,MACE,OAAA;AAAA"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { readFile } from "node:fs/promises";
|
|
2
|
-
//#region src/
|
|
2
|
+
//#region src/services/wasm-sidecar-client.service.ts
|
|
3
3
|
var WasmSidecarClientService = class {
|
|
4
4
|
runExport = async (params) => {
|
|
5
5
|
const { wasmPath, exportName, args } = params;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"wasm-sidecar-client.service.js","names":[],"sources":["../../src/services/wasm-sidecar-client.service.ts"],"sourcesContent":["import { readFile } from \"node:fs/promises\";\n\ntype WasmRuntime = {\n instantiate(\n wasmBytes: Buffer,\n imports: Record<string, unknown>,\n ): Promise<{\n instance: {\n exports: Record<string, unknown>;\n };\n }>;\n};\n\nexport class WasmSidecarClientService {\n runExport = async (params: {\n wasmPath: string;\n exportName: string;\n args: number[];\n }): Promise<number> => {\n const { wasmPath, exportName, args } = params;\n const wasmBytes = await readFile(wasmPath);\n const wasmRuntime = (globalThis as typeof globalThis & { WebAssembly?: WasmRuntime })\n .WebAssembly;\n if (!wasmRuntime) {\n throw new Error(\"当前 Node 运行时不支持 WebAssembly。\");\n }\n const instance = await wasmRuntime.instantiate(wasmBytes, {});\n const exported = instance.instance.exports[exportName];\n if (typeof exported !== \"function\") {\n throw new Error(`Wasm 导出不存在或不可调用:${exportName}`);\n }\n const result = exported(...args);\n if (typeof result !== \"number\") {\n throw new Error(`Wasm 导出 ${exportName} 必须返回 number。`);\n }\n return result;\n };\n}\n"],"mappings":";;AAaA,IAAa,2BAAb,MAAsC;CACpC,YAAY,OAAO,WAII;EACrB,MAAM,EAAE,UAAU,YAAY,SAAS;EACvC,MAAM,YAAY,MAAM,SAAS,SAAS;EAC1C,MAAM,cAAe,WAClB;AACH,MAAI,CAAC,YACH,OAAM,IAAI,MAAM,8BAA8B;EAGhD,MAAM,YADW,MAAM,YAAY,YAAY,WAAW,EAAE,CAAC,EACnC,SAAS,QAAQ;AAC3C,MAAI,OAAO,aAAa,WACtB,OAAM,IAAI,MAAM,mBAAmB,aAAa;EAElD,MAAM,SAAS,SAAS,GAAG,KAAK;AAChC,MAAI,OAAO,WAAW,SACpB,OAAM,IAAI,MAAM,WAAW,WAAW,eAAe;AAEvD,SAAO"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { IncomingMessage, ServerResponse } from "node:http";
|
|
2
2
|
|
|
3
|
-
//#region src/
|
|
3
|
+
//#region src/services/wasmtime-wasi-http-component.service.d.ts
|
|
4
4
|
type WasmtimeWasiHttpComponentStartOptions = {
|
|
5
5
|
wasmPath: string;
|
|
6
6
|
dataDirectory: string;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"wasmtime-wasi-http-component.service.d.ts","names":[],"sources":["../../src/services/wasmtime-wasi-http-component.service.ts"],"mappings":";;;KAMY,qCAAA;EACV,QAAA;EACA,aAAA;AAAA;AAAA,KAGU,+BAAA;EACV,GAAA;EACA,IAAA;AAAA;AAAA,cAGW,gCAAA;EAAA,QACH,OAAA;EAAA,QACA,MAAA;EAER,KAAA,GACE,OAAA,EAAS,qCAAA,KACR,OAAA,CAAQ,+BAAA;EAqCX,IAAA,QAAiB,OAAA;EAqBjB,aAAA,GACE,OAAA,EAAS,eAAA,EACT,QAAA,EAAU,cAAA,KACT,OAAA;EAAA,QAiCK,QAAA;EAAA,QAQA,kBAAA;EAAA,QAIA,iBAAA;EAAA,QAyBA,cAAA;AAAA"}
|
|
@@ -2,7 +2,7 @@ import { mkdir } from "node:fs/promises";
|
|
|
2
2
|
import path from "node:path";
|
|
3
3
|
import { createServer } from "node:http";
|
|
4
4
|
import { spawn } from "node:child_process";
|
|
5
|
-
//#region src/
|
|
5
|
+
//#region src/services/wasmtime-wasi-http-component.service.ts
|
|
6
6
|
var WasmtimeWasiHttpComponentService = class {
|
|
7
7
|
process;
|
|
8
8
|
handle;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"wasmtime-wasi-http-component.service.js","names":[],"sources":["../../src/services/wasmtime-wasi-http-component.service.ts"],"sourcesContent":["import { spawn, type ChildProcessByStdio } from \"node:child_process\";\nimport { mkdir } from \"node:fs/promises\";\nimport { createServer, type IncomingMessage, type ServerResponse } from \"node:http\";\nimport path from \"node:path\";\nimport type { Readable } from \"node:stream\";\n\nexport type WasmtimeWasiHttpComponentStartOptions = {\n wasmPath: string;\n dataDirectory: string;\n};\n\nexport type WasmtimeWasiHttpComponentHandle = {\n url: string;\n port: number;\n};\n\nexport class WasmtimeWasiHttpComponentService {\n private process?: ChildProcessByStdio<null, Readable, Readable>;\n private handle?: WasmtimeWasiHttpComponentHandle;\n\n start = async (\n options: WasmtimeWasiHttpComponentStartOptions,\n ): Promise<WasmtimeWasiHttpComponentHandle> => {\n if (this.process) {\n throw new Error(\"WASI HTTP component 已经启动。\");\n }\n const dataDirectory = path.resolve(options.dataDirectory);\n await mkdir(dataDirectory, { recursive: true });\n const port = await this.findAvailablePort();\n const child = spawn(\n \"wasmtime\",\n [\n \"serve\",\n \"-S\",\n \"cli=y\",\n \"-S\",\n \"http=y\",\n \"-S\",\n \"inherit-network=y\",\n \"--addr\",\n `127.0.0.1:${port}`,\n \"--dir\",\n `${dataDirectory}::/data`,\n options.wasmPath,\n ],\n {\n stdio: [\"ignore\", \"pipe\", \"pipe\"],\n },\n );\n this.process = child;\n const handle = {\n url: `http://127.0.0.1:${port}`,\n port,\n };\n this.handle = handle;\n await this.waitUntilReady(handle.url, child);\n return handle;\n };\n\n stop = async (): Promise<void> => {\n const child = this.process;\n if (!child) {\n return;\n }\n await new Promise<void>((resolve) => {\n child.once(\"exit\", () => {\n resolve();\n });\n child.kill(\"SIGTERM\");\n setTimeout(() => {\n if (!child.killed) {\n child.kill(\"SIGKILL\");\n }\n resolve();\n }, 1_000).unref();\n });\n this.process = undefined;\n this.handle = undefined;\n };\n\n handleRequest = async (\n request: IncomingMessage,\n response: ServerResponse,\n ): Promise<boolean> => {\n const handle = this.handle;\n if (!handle) {\n return false;\n }\n const requestUrl = new URL(request.url ?? \"/\", handle.url);\n if (!requestUrl.pathname.startsWith(\"/api/\")) {\n return false;\n }\n const headers = new Headers();\n for (const [key, value] of Object.entries(request.headers)) {\n if (value === undefined || key.toLowerCase() === \"host\") {\n continue;\n }\n if (Array.isArray(value)) {\n for (const item of value) {\n headers.append(key, item);\n }\n continue;\n }\n headers.set(key, value);\n }\n const body = await this.readBody(request);\n const upstreamResponse = await fetch(requestUrl, {\n method: request.method,\n headers,\n body: this.methodSupportsBody(request.method) ? body : undefined,\n });\n response.writeHead(upstreamResponse.status, Object.fromEntries(upstreamResponse.headers));\n response.end(Buffer.from(await upstreamResponse.arrayBuffer()));\n return true;\n };\n\n private readBody = async (request: IncomingMessage): Promise<Buffer> => {\n const chunks: Buffer[] = [];\n for await (const chunk of request) {\n chunks.push(Buffer.isBuffer(chunk) ? chunk : Buffer.from(chunk));\n }\n return Buffer.concat(chunks);\n };\n\n private methodSupportsBody = (method: string | undefined): boolean => {\n return method !== undefined && method !== \"GET\" && method !== \"HEAD\";\n };\n\n private findAvailablePort = async (): Promise<number> => {\n const server = createServer();\n await new Promise<void>((resolve, reject) => {\n server.once(\"error\", reject);\n server.listen(0, \"127.0.0.1\", () => {\n server.off(\"error\", reject);\n resolve();\n });\n });\n const address = server.address();\n await new Promise<void>((resolve, reject) => {\n server.close((error) => {\n if (error) {\n reject(error);\n return;\n }\n resolve();\n });\n });\n if (!address || typeof address === \"string\") {\n throw new Error(\"无法分配 WASI HTTP component 端口。\");\n }\n return address.port;\n };\n\n private waitUntilReady = async (\n url: string,\n child: ChildProcessByStdio<null, Readable, Readable>,\n ): Promise<void> => {\n const errors: string[] = [];\n child.stderr.on(\"data\", (chunk: Buffer) => {\n errors.push(chunk.toString(\"utf-8\"));\n });\n for (let attempt = 0; attempt < 50; attempt += 1) {\n if (child.exitCode !== null) {\n throw new Error(\n `WASI HTTP component 启动失败:${errors.join(\"\").trim() || `exit ${child.exitCode}`}`,\n );\n }\n try {\n await fetch(url);\n return;\n } catch {\n await new Promise((resolve) => setTimeout(resolve, 100));\n }\n }\n throw new Error(`WASI HTTP component 启动超时:${errors.join(\"\").trim()}`);\n };\n}\n"],"mappings":";;;;;AAgBA,IAAa,mCAAb,MAA8C;CAC5C;CACA;CAEA,QAAQ,OACN,YAC6C;AAC7C,MAAI,KAAK,QACP,OAAM,IAAI,MAAM,4BAA4B;EAE9C,MAAM,gBAAgB,KAAK,QAAQ,QAAQ,cAAc;AACzD,QAAM,MAAM,eAAe,EAAE,WAAW,MAAM,CAAC;EAC/C,MAAM,OAAO,MAAM,KAAK,mBAAmB;EAC3C,MAAM,QAAQ,MACZ,YACA;GACE;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA,aAAa;GACb;GACA,GAAG,cAAc;GACjB,QAAQ;GACT,EACD,EACE,OAAO;GAAC;GAAU;GAAQ;GAAO,EAClC,CACF;AACD,OAAK,UAAU;EACf,MAAM,SAAS;GACb,KAAK,oBAAoB;GACzB;GACD;AACD,OAAK,SAAS;AACd,QAAM,KAAK,eAAe,OAAO,KAAK,MAAM;AAC5C,SAAO;;CAGT,OAAO,YAA2B;EAChC,MAAM,QAAQ,KAAK;AACnB,MAAI,CAAC,MACH;AAEF,QAAM,IAAI,SAAe,YAAY;AACnC,SAAM,KAAK,cAAc;AACvB,aAAS;KACT;AACF,SAAM,KAAK,UAAU;AACrB,oBAAiB;AACf,QAAI,CAAC,MAAM,OACT,OAAM,KAAK,UAAU;AAEvB,aAAS;MACR,IAAM,CAAC,OAAO;IACjB;AACF,OAAK,UAAU,KAAA;AACf,OAAK,SAAS,KAAA;;CAGhB,gBAAgB,OACd,SACA,aACqB;EACrB,MAAM,SAAS,KAAK;AACpB,MAAI,CAAC,OACH,QAAO;EAET,MAAM,aAAa,IAAI,IAAI,QAAQ,OAAO,KAAK,OAAO,IAAI;AAC1D,MAAI,CAAC,WAAW,SAAS,WAAW,QAAQ,CAC1C,QAAO;EAET,MAAM,UAAU,IAAI,SAAS;AAC7B,OAAK,MAAM,CAAC,KAAK,UAAU,OAAO,QAAQ,QAAQ,QAAQ,EAAE;AAC1D,OAAI,UAAU,KAAA,KAAa,IAAI,aAAa,KAAK,OAC/C;AAEF,OAAI,MAAM,QAAQ,MAAM,EAAE;AACxB,SAAK,MAAM,QAAQ,MACjB,SAAQ,OAAO,KAAK,KAAK;AAE3B;;AAEF,WAAQ,IAAI,KAAK,MAAM;;EAEzB,MAAM,OAAO,MAAM,KAAK,SAAS,QAAQ;EACzC,MAAM,mBAAmB,MAAM,MAAM,YAAY;GAC/C,QAAQ,QAAQ;GAChB;GACA,MAAM,KAAK,mBAAmB,QAAQ,OAAO,GAAG,OAAO,KAAA;GACxD,CAAC;AACF,WAAS,UAAU,iBAAiB,QAAQ,OAAO,YAAY,iBAAiB,QAAQ,CAAC;AACzF,WAAS,IAAI,OAAO,KAAK,MAAM,iBAAiB,aAAa,CAAC,CAAC;AAC/D,SAAO;;CAGT,WAAmB,OAAO,YAA8C;EACtE,MAAM,SAAmB,EAAE;AAC3B,aAAW,MAAM,SAAS,QACxB,QAAO,KAAK,OAAO,SAAS,MAAM,GAAG,QAAQ,OAAO,KAAK,MAAM,CAAC;AAElE,SAAO,OAAO,OAAO,OAAO;;CAG9B,sBAA8B,WAAwC;AACpE,SAAO,WAAW,KAAA,KAAa,WAAW,SAAS,WAAW;;CAGhE,oBAA4B,YAA6B;EACvD,MAAM,SAAS,cAAc;AAC7B,QAAM,IAAI,SAAe,SAAS,WAAW;AAC3C,UAAO,KAAK,SAAS,OAAO;AAC5B,UAAO,OAAO,GAAG,mBAAmB;AAClC,WAAO,IAAI,SAAS,OAAO;AAC3B,aAAS;KACT;IACF;EACF,MAAM,UAAU,OAAO,SAAS;AAChC,QAAM,IAAI,SAAe,SAAS,WAAW;AAC3C,UAAO,OAAO,UAAU;AACtB,QAAI,OAAO;AACT,YAAO,MAAM;AACb;;AAEF,aAAS;KACT;IACF;AACF,MAAI,CAAC,WAAW,OAAO,YAAY,SACjC,OAAM,IAAI,MAAM,+BAA+B;AAEjD,SAAO,QAAQ;;CAGjB,iBAAyB,OACvB,KACA,UACkB;EAClB,MAAM,SAAmB,EAAE;AAC3B,QAAM,OAAO,GAAG,SAAS,UAAkB;AACzC,UAAO,KAAK,MAAM,SAAS,QAAQ,CAAC;IACpC;AACF,OAAK,IAAI,UAAU,GAAG,UAAU,IAAI,WAAW,GAAG;AAChD,OAAI,MAAM,aAAa,KACrB,OAAM,IAAI,MACR,4BAA4B,OAAO,KAAK,GAAG,CAAC,MAAM,IAAI,QAAQ,MAAM,aACrE;AAEH,OAAI;AACF,UAAM,MAAM,IAAI;AAChB;WACM;AACN,UAAM,IAAI,SAAS,YAAY,WAAW,SAAS,IAAI,CAAC;;;AAG5D,QAAM,IAAI,MAAM,4BAA4B,OAAO,KAAK,GAAG,CAAC,MAAM,GAAG"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"app-bundle.types.d.ts","names":[],"sources":["../../src/types/app-bundle.types.ts"],"mappings":";KAAY,mBAAA;AAAA,KAEA,iBAAA;EACV,mBAAA;EACA,gBAAA,EAAkB,mBAAA;EAClB,KAAA;EACA,IAAA;EACA,OAAA;EACA,aAAA;EACA,aAAA;AAAA;AAAA,KAGU,kBAAA;EACV,SAAA;EACA,KAAA,EAAO,MAAA;AAAA;AAAA,KAGG,mBAAA;EACV,UAAA;EACA,QAAA,EAAU,iBAAA;EACV,SAAA;EACA,SAAA;AAAA;AAAA,KAGU,sBAAA;EACV,YAAA;EACA,QAAA,EAAU,iBAAA;EACV,SAAA,EAAW,kBAAA;AAAA"}
|
|
@@ -1,10 +1,10 @@
|
|
|
1
|
-
import { AppPermissions } from "
|
|
2
|
-
import { AppDistributionMode } from "
|
|
3
|
-
import { AppDocumentGrantMap } from "
|
|
4
|
-
import { AppPublisher } from "
|
|
5
|
-
import { AppInstallSourceKind } from "
|
|
1
|
+
import { AppPermissions, AppResolvedComponent } from "./app-manifest.types.js";
|
|
2
|
+
import { AppDistributionMode } from "./app-bundle.types.js";
|
|
3
|
+
import { AppDocumentGrantMap } from "./app-permissions.types.js";
|
|
4
|
+
import { AppPublisher } from "./app-remote-registry.types.js";
|
|
5
|
+
import { AppInstallSourceKind } from "./app-registry.types.js";
|
|
6
6
|
|
|
7
|
-
//#region src/
|
|
7
|
+
//#region src/types/app-installation.types.d.ts
|
|
8
8
|
type AppInstallResult = {
|
|
9
9
|
appId: string;
|
|
10
10
|
name: string;
|
|
@@ -19,12 +19,17 @@ type AppInstallResult = {
|
|
|
19
19
|
bundleUrl?: string;
|
|
20
20
|
sha256?: string;
|
|
21
21
|
publisher?: AppPublisher;
|
|
22
|
+
enabled: boolean;
|
|
23
|
+
manifestSchemaVersion: 1 | 2;
|
|
24
|
+
components?: AppResolvedComponent[];
|
|
25
|
+
primaryPanelId?: string;
|
|
22
26
|
};
|
|
23
27
|
type AppInfoResult = {
|
|
24
28
|
appId: string;
|
|
25
29
|
name: string;
|
|
26
30
|
description?: string;
|
|
27
31
|
activeVersion: string;
|
|
32
|
+
enabled: boolean;
|
|
28
33
|
dataDirectory: string;
|
|
29
34
|
installedVersions: Array<{
|
|
30
35
|
version: string;
|
|
@@ -38,6 +43,9 @@ type AppInfoResult = {
|
|
|
38
43
|
bundleUrl?: string;
|
|
39
44
|
sha256?: string;
|
|
40
45
|
publisher?: AppPublisher;
|
|
46
|
+
manifestSchemaVersion: 1 | 2;
|
|
47
|
+
components?: AppResolvedComponent[];
|
|
48
|
+
primaryPanelId?: string;
|
|
41
49
|
}>;
|
|
42
50
|
grants: AppDocumentGrantMap;
|
|
43
51
|
};
|
|
@@ -47,6 +55,9 @@ type InstalledAppListItem = {
|
|
|
47
55
|
activeVersion: string;
|
|
48
56
|
sourceKind: AppInstallSourceKind;
|
|
49
57
|
distributionMode?: AppDistributionMode;
|
|
58
|
+
enabled: boolean;
|
|
59
|
+
manifestSchemaVersion: 1 | 2;
|
|
60
|
+
primaryPanelId?: string;
|
|
50
61
|
};
|
|
51
62
|
type AppUninstallResult = {
|
|
52
63
|
appId: string;
|
|
@@ -63,6 +74,15 @@ type AppUpdateResult = AppInstallResult & {
|
|
|
63
74
|
previousVersion: string;
|
|
64
75
|
updated: boolean;
|
|
65
76
|
};
|
|
77
|
+
type AppActivationResult = {
|
|
78
|
+
appId: string;
|
|
79
|
+
activeVersion: string;
|
|
80
|
+
enabled: boolean;
|
|
81
|
+
};
|
|
82
|
+
type AppRollbackResult = AppActivationResult & {
|
|
83
|
+
previousVersion: string;
|
|
84
|
+
rolledBack: boolean;
|
|
85
|
+
};
|
|
66
86
|
//#endregion
|
|
67
|
-
export { AppInfoResult, AppInstallResult, AppLaunchResolution, AppUninstallResult, AppUpdateResult, InstalledAppListItem };
|
|
87
|
+
export { AppActivationResult, AppInfoResult, AppInstallResult, AppLaunchResolution, AppRollbackResult, AppUninstallResult, AppUpdateResult, InstalledAppListItem };
|
|
68
88
|
//# sourceMappingURL=app-installation.types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"app-installation.types.d.ts","names":[],"sources":["../../src/types/app-installation.types.ts"],"mappings":";;;;;;;KAMY,gBAAA;EACV,KAAA;EACA,IAAA;EACA,OAAA;EACA,gBAAA;EACA,aAAA;EACA,UAAA,EAAY,oBAAA;EACZ,gBAAA,GAAmB,mBAAA;EACnB,SAAA;EACA,WAAA,EAAa,cAAA;EACb,WAAA;EACA,SAAA;EACA,MAAA;EACA,SAAA,GAAY,YAAA;EACZ,OAAA;EACA,qBAAA;EACA,UAAA,GAAa,oBAAA;EACb,cAAA;AAAA;AAAA,KAGU,aAAA;EACV,KAAA;EACA,IAAA;EACA,WAAA;EACA,aAAA;EACA,OAAA;EACA,aAAA;EACA,iBAAA,EAAmB,KAAA;IACjB,OAAA;IACA,gBAAA;IACA,UAAA,EAAY,oBAAA;IACZ,gBAAA,GAAmB,mBAAA;IACnB,SAAA;IACA,WAAA;IACA,WAAA,EAAa,cAAA;IACb,WAAA;IACA,SAAA;IACA,MAAA;IACA,SAAA,GAAY,YAAA;IACZ,qBAAA;IACA,UAAA,GAAa,oBAAA;IACb,cAAA;EAAA;EAEF,MAAA,EAAQ,mBAAA;AAAA;AAAA,KAGE,oBAAA;EACV,KAAA;EACA,IAAA;EACA,aAAA;EACA,UAAA,EAAY,oBAAA;EACZ,gBAAA,GAAmB,mBAAA;EACnB,OAAA;EACA,qBAAA;EACA,cAAA;AAAA;AAAA,KAGU,kBAAA;EACV,KAAA;EACA,eAAA;EACA,WAAA;AAAA;AAAA,KAGU,mBAAA;EACV,YAAA;EACA,KAAA;EACA,aAAA;EACA,gBAAA,EAAkB,mBAAA;AAAA;AAAA,KAGR,eAAA,GAAkB,gBAAA;EAC5B,eAAA;EACA,OAAA;AAAA;AAAA,KAGU,mBAAA;EACV,KAAA;EACA,aAAA;EACA,OAAA;AAAA;AAAA,KAGU,iBAAA,GAAoB,mBAAA;EAC9B,eAAA;EACA,UAAA;AAAA"}
|
|
@@ -0,0 +1,119 @@
|
|
|
1
|
+
//#region src/types/app-manifest.types.d.ts
|
|
2
|
+
type AppDocumentAccessMode = "read" | "read-write";
|
|
3
|
+
type AppDocumentAccessScope = {
|
|
4
|
+
id: string;
|
|
5
|
+
mode: AppDocumentAccessMode;
|
|
6
|
+
description?: string;
|
|
7
|
+
};
|
|
8
|
+
type AppPermissions = {
|
|
9
|
+
documentAccess?: AppDocumentAccessScope[];
|
|
10
|
+
allowedDomains?: string[];
|
|
11
|
+
storage?: boolean | {
|
|
12
|
+
namespace?: string;
|
|
13
|
+
};
|
|
14
|
+
capabilities?: {
|
|
15
|
+
hostBridge?: boolean;
|
|
16
|
+
};
|
|
17
|
+
};
|
|
18
|
+
type AppCoreWasmMainManifest = {
|
|
19
|
+
kind: "wasm";
|
|
20
|
+
entry: string;
|
|
21
|
+
export: string;
|
|
22
|
+
action: string;
|
|
23
|
+
};
|
|
24
|
+
type AppWasiHttpComponentMainManifest = {
|
|
25
|
+
kind: "wasi-http-component";
|
|
26
|
+
entry: string;
|
|
27
|
+
};
|
|
28
|
+
type AppMainManifest = AppCoreWasmMainManifest | AppWasiHttpComponentMainManifest;
|
|
29
|
+
type AppUiManifest = {
|
|
30
|
+
entry: string;
|
|
31
|
+
};
|
|
32
|
+
type AppStandaloneManifest = {
|
|
33
|
+
schemaVersion: 1;
|
|
34
|
+
id: string;
|
|
35
|
+
name: string;
|
|
36
|
+
version: string;
|
|
37
|
+
description?: string;
|
|
38
|
+
icon?: string;
|
|
39
|
+
main: AppMainManifest;
|
|
40
|
+
ui: AppUiManifest;
|
|
41
|
+
permissions?: AppPermissions;
|
|
42
|
+
};
|
|
43
|
+
type AppComponentKind = "panel" | "service";
|
|
44
|
+
type AppComponentReference = {
|
|
45
|
+
kind: AppComponentKind;
|
|
46
|
+
path: string;
|
|
47
|
+
};
|
|
48
|
+
type AppComponentManifest = {
|
|
49
|
+
schemaVersion: 2;
|
|
50
|
+
id: string;
|
|
51
|
+
name: string;
|
|
52
|
+
version: string;
|
|
53
|
+
description?: string;
|
|
54
|
+
icon?: string;
|
|
55
|
+
engines?: {
|
|
56
|
+
nextclaw?: string;
|
|
57
|
+
};
|
|
58
|
+
presentation?: {
|
|
59
|
+
primaryPanel?: string;
|
|
60
|
+
};
|
|
61
|
+
components: AppComponentReference[];
|
|
62
|
+
};
|
|
63
|
+
type AppManifest = AppStandaloneManifest | AppComponentManifest;
|
|
64
|
+
type AppResolvedComponent = AppComponentReference & {
|
|
65
|
+
id: string;
|
|
66
|
+
componentDirectory: string;
|
|
67
|
+
manifestPath: string;
|
|
68
|
+
};
|
|
69
|
+
type AppStandaloneManifestBundle = {
|
|
70
|
+
appDirectory: string;
|
|
71
|
+
manifestPath: string;
|
|
72
|
+
manifest: AppStandaloneManifest;
|
|
73
|
+
mainEntryPath: string;
|
|
74
|
+
uiEntryPath: string;
|
|
75
|
+
uiDirectoryPath: string;
|
|
76
|
+
assetsDirectoryPath: string;
|
|
77
|
+
iconPath?: string;
|
|
78
|
+
};
|
|
79
|
+
type AppComponentManifestBundle = {
|
|
80
|
+
appDirectory: string;
|
|
81
|
+
manifestPath: string;
|
|
82
|
+
manifest: AppComponentManifest;
|
|
83
|
+
components: AppResolvedComponent[];
|
|
84
|
+
assetsDirectoryPath: string;
|
|
85
|
+
iconPath?: string;
|
|
86
|
+
primaryPanelId?: string;
|
|
87
|
+
};
|
|
88
|
+
type AppManifestBundle = AppStandaloneManifestBundle | AppComponentManifestBundle;
|
|
89
|
+
type AppStandaloneManifestSummary = {
|
|
90
|
+
schemaVersion: 1;
|
|
91
|
+
id: string;
|
|
92
|
+
name: string;
|
|
93
|
+
version: string;
|
|
94
|
+
description?: string;
|
|
95
|
+
mainKind: AppMainManifest["kind"];
|
|
96
|
+
action?: string;
|
|
97
|
+
manifestPath: string;
|
|
98
|
+
mainEntryPath: string;
|
|
99
|
+
uiEntryPath: string;
|
|
100
|
+
iconPath?: string;
|
|
101
|
+
permissions: AppPermissions;
|
|
102
|
+
};
|
|
103
|
+
type AppComponentManifestSummary = {
|
|
104
|
+
schemaVersion: 2;
|
|
105
|
+
id: string;
|
|
106
|
+
name: string;
|
|
107
|
+
version: string;
|
|
108
|
+
description?: string;
|
|
109
|
+
manifestPath: string;
|
|
110
|
+
iconPath?: string;
|
|
111
|
+
primaryPanelId?: string;
|
|
112
|
+
components: AppResolvedComponent[];
|
|
113
|
+
};
|
|
114
|
+
type AppManifestSummary = AppStandaloneManifestSummary | AppComponentManifestSummary;
|
|
115
|
+
declare function isAppStandaloneManifestBundle(bundle: AppManifestBundle): bundle is AppStandaloneManifestBundle;
|
|
116
|
+
declare function isAppComponentManifestBundle(bundle: AppManifestBundle): bundle is AppComponentManifestBundle;
|
|
117
|
+
//#endregion
|
|
118
|
+
export { AppComponentKind, AppComponentManifest, AppComponentManifestBundle, AppComponentManifestSummary, AppComponentReference, AppCoreWasmMainManifest, AppDocumentAccessMode, AppDocumentAccessScope, AppMainManifest, AppManifest, AppManifestBundle, AppManifestSummary, AppPermissions, AppResolvedComponent, AppStandaloneManifest, AppStandaloneManifestBundle, AppStandaloneManifestSummary, AppUiManifest, AppWasiHttpComponentMainManifest, isAppComponentManifestBundle, isAppStandaloneManifestBundle };
|
|
119
|
+
//# sourceMappingURL=app-manifest.types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"app-manifest.types.d.ts","names":[],"sources":["../../src/types/app-manifest.types.ts"],"mappings":";KAAY,qBAAA;AAAA,KAEA,sBAAA;EACV,EAAA;EACA,IAAA,EAAM,qBAAA;EACN,WAAA;AAAA;AAAA,KAGU,cAAA;EACV,cAAA,GAAiB,sBAAA;EACjB,cAAA;EACA,OAAA;IAAsB,SAAA;EAAA;EACtB,YAAA;IACE,UAAA;EAAA;AAAA;AAAA,KAIQ,uBAAA;EACV,IAAA;EACA,KAAA;EACA,MAAA;EACA,MAAA;AAAA;AAAA,KAGU,gCAAA;EACV,IAAA;EACA,KAAA;AAAA;AAAA,KAGU,eAAA,GAAkB,uBAAA,GAA0B,gCAAA;AAAA,KAE5C,aAAA;EACV,KAAA;AAAA;AAAA,KAGU,qBAAA;EACV,aAAA;EACA,EAAA;EACA,IAAA;EACA,OAAA;EACA,WAAA;EACA,IAAA;EACA,IAAA,EAAM,eAAA;EACN,EAAA,EAAI,aAAA;EACJ,WAAA,GAAc,cAAA;AAAA;AAAA,KAGJ,gBAAA;AAAA,KAEA,qBAAA;EACV,IAAA,EAAM,gBAAA;EACN,IAAA;AAAA;AAAA,KAGU,oBAAA;EACV,aAAA;EACA,EAAA;EACA,IAAA;EACA,OAAA;EACA,WAAA;EACA,IAAA;EACA,OAAA;IACE,QAAA;EAAA;EAEF,YAAA;IACE,YAAA;EAAA;EAEF,UAAA,EAAY,qBAAA;AAAA;AAAA,KAGF,WAAA,GAAc,qBAAA,GAAwB,oBAAA;AAAA,KAEtC,oBAAA,GAAuB,qBAAA;EACjC,EAAA;EACA,kBAAA;EACA,YAAA;AAAA;AAAA,KAGU,2BAAA;EACV,YAAA;EACA,YAAA;EACA,QAAA,EAAU,qBAAA;EACV,aAAA;EACA,WAAA;EACA,eAAA;EACA,mBAAA;EACA,QAAA;AAAA;AAAA,KAGU,0BAAA;EACV,YAAA;EACA,YAAA;EACA,QAAA,EAAU,oBAAA;EACV,UAAA,EAAY,oBAAA;EACZ,mBAAA;EACA,QAAA;EACA,cAAA;AAAA;AAAA,KAGU,iBAAA,GAAoB,2BAAA,GAA8B,0BAAA;AAAA,KAElD,4BAAA;EACV,aAAA;EACA,EAAA;EACA,IAAA;EACA,OAAA;EACA,WAAA;EACA,QAAA,EAAU,eAAA;EACV,MAAA;EACA,YAAA;EACA,aAAA;EACA,WAAA;EACA,QAAA;EACA,WAAA,EAAa,cAAA;AAAA;AAAA,KAGH,2BAAA;EACV,aAAA;EACA,EAAA;EACA,IAAA;EACA,OAAA;EACA,WAAA;EACA,YAAA;EACA,QAAA;EACA,cAAA;EACA,UAAA,EAAY,oBAAA;AAAA;AAAA,KAGF,kBAAA,GAAqB,4BAAA,GAA+B,2BAAA;AAAA,iBAEhD,6BAAA,CACd,MAAA,EAAQ,iBAAA,GACP,MAAA,IAAU,2BAAA;AAAA,iBAIG,4BAAA,CACd,MAAA,EAAQ,iBAAA,GACP,MAAA,IAAU,0BAAA"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
//#region src/types/app-manifest.types.ts
|
|
2
|
+
function isAppStandaloneManifestBundle(bundle) {
|
|
3
|
+
return bundle.manifest.schemaVersion === 1;
|
|
4
|
+
}
|
|
5
|
+
function isAppComponentManifestBundle(bundle) {
|
|
6
|
+
return bundle.manifest.schemaVersion === 2;
|
|
7
|
+
}
|
|
8
|
+
//#endregion
|
|
9
|
+
export { isAppComponentManifestBundle, isAppStandaloneManifestBundle };
|
|
10
|
+
|
|
11
|
+
//# sourceMappingURL=app-manifest.types.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"app-manifest.types.js","names":[],"sources":["../../src/types/app-manifest.types.ts"],"sourcesContent":["export type AppDocumentAccessMode = \"read\" | \"read-write\";\n\nexport type AppDocumentAccessScope = {\n id: string;\n mode: AppDocumentAccessMode;\n description?: string;\n};\n\nexport type AppPermissions = {\n documentAccess?: AppDocumentAccessScope[];\n allowedDomains?: string[];\n storage?: boolean | { namespace?: string };\n capabilities?: {\n hostBridge?: boolean;\n };\n};\n\nexport type AppCoreWasmMainManifest = {\n kind: \"wasm\";\n entry: string;\n export: string;\n action: string;\n};\n\nexport type AppWasiHttpComponentMainManifest = {\n kind: \"wasi-http-component\";\n entry: string;\n};\n\nexport type AppMainManifest = AppCoreWasmMainManifest | AppWasiHttpComponentMainManifest;\n\nexport type AppUiManifest = {\n entry: string;\n};\n\nexport type AppStandaloneManifest = {\n schemaVersion: 1;\n id: string;\n name: string;\n version: string;\n description?: string;\n icon?: string;\n main: AppMainManifest;\n ui: AppUiManifest;\n permissions?: AppPermissions;\n};\n\nexport type AppComponentKind = \"panel\" | \"service\";\n\nexport type AppComponentReference = {\n kind: AppComponentKind;\n path: string;\n};\n\nexport type AppComponentManifest = {\n schemaVersion: 2;\n id: string;\n name: string;\n version: string;\n description?: string;\n icon?: string;\n engines?: {\n nextclaw?: string;\n };\n presentation?: {\n primaryPanel?: string;\n };\n components: AppComponentReference[];\n};\n\nexport type AppManifest = AppStandaloneManifest | AppComponentManifest;\n\nexport type AppResolvedComponent = AppComponentReference & {\n id: string;\n componentDirectory: string;\n manifestPath: string;\n};\n\nexport type AppStandaloneManifestBundle = {\n appDirectory: string;\n manifestPath: string;\n manifest: AppStandaloneManifest;\n mainEntryPath: string;\n uiEntryPath: string;\n uiDirectoryPath: string;\n assetsDirectoryPath: string;\n iconPath?: string;\n};\n\nexport type AppComponentManifestBundle = {\n appDirectory: string;\n manifestPath: string;\n manifest: AppComponentManifest;\n components: AppResolvedComponent[];\n assetsDirectoryPath: string;\n iconPath?: string;\n primaryPanelId?: string;\n};\n\nexport type AppManifestBundle = AppStandaloneManifestBundle | AppComponentManifestBundle;\n\nexport type AppStandaloneManifestSummary = {\n schemaVersion: 1;\n id: string;\n name: string;\n version: string;\n description?: string;\n mainKind: AppMainManifest[\"kind\"];\n action?: string;\n manifestPath: string;\n mainEntryPath: string;\n uiEntryPath: string;\n iconPath?: string;\n permissions: AppPermissions;\n};\n\nexport type AppComponentManifestSummary = {\n schemaVersion: 2;\n id: string;\n name: string;\n version: string;\n description?: string;\n manifestPath: string;\n iconPath?: string;\n primaryPanelId?: string;\n components: AppResolvedComponent[];\n};\n\nexport type AppManifestSummary = AppStandaloneManifestSummary | AppComponentManifestSummary;\n\nexport function isAppStandaloneManifestBundle(\n bundle: AppManifestBundle,\n): bundle is AppStandaloneManifestBundle {\n return bundle.manifest.schemaVersion === 1;\n}\n\nexport function isAppComponentManifestBundle(\n bundle: AppManifestBundle,\n): bundle is AppComponentManifestBundle {\n return bundle.manifest.schemaVersion === 2;\n}\n"],"mappings":";AAkIA,SAAgB,8BACd,QACuC;AACvC,QAAO,OAAO,SAAS,kBAAkB;;AAG3C,SAAgB,6BACd,QACsC;AACtC,QAAO,OAAO,SAAS,kBAAkB"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import { AppPermissions } from "
|
|
1
|
+
import { AppPermissions } from "./app-manifest.types.js";
|
|
2
2
|
|
|
3
|
-
//#region src/
|
|
3
|
+
//#region src/types/app-permissions.types.d.ts
|
|
4
4
|
type AppDocumentGrantMap = Record<string, string>;
|
|
5
5
|
type ResolvedDocumentGrant = {
|
|
6
6
|
id: string;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"app-permissions.types.d.ts","names":[],"sources":["../../src/types/app-permissions.types.ts"],"mappings":";;;KAEY,mBAAA,GAAsB,MAAA;AAAA,KAEtB,qBAAA;EACV,EAAA;EACA,IAAA;EACA,WAAA;EACA,IAAA;AAAA;AAAA,KAGU,mBAAA;EACV,cAAA,EAAgB,qBAAA;EAChB,cAAA;EACA,OAAA;IACE,OAAA;IACA,SAAA;EAAA;EAEF,YAAA;IACE,UAAA;EAAA;AAAA;AAAA,KAIQ,oBAAA,GAAuB,IAAA,CACjC,mBAAA;EAGA,SAAA,EAAW,cAAA;AAAA;AAAA,KAGD,qBAAA;EACV,EAAA;EACA,IAAA;EACA,WAAA;EACA,OAAA;EACA,WAAA;AAAA;AAAA,KAGU,2BAAA;EACV,KAAA;EACA,IAAA;EACA,aAAA;EACA,cAAA,EAAgB,qBAAA;EAChB,cAAA;EACA,OAAA;IACE,OAAA;IACA,SAAA;EAAA;EAEF,YAAA;IACE,UAAA;EAAA;AAAA;AAAA,KAIQ,8BAAA;EACV,KAAA;EACA,OAAA;EACA,WAAA;EACA,OAAA;AAAA"}
|
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
import { AppManifest, AppPermissions } from "
|
|
2
|
-
import { AppDistributionMode } from "
|
|
3
|
-
import { AppPublisher } from "
|
|
1
|
+
import { AppManifest, AppPermissions } from "./app-manifest.types.js";
|
|
2
|
+
import { AppDistributionMode } from "./app-bundle.types.js";
|
|
3
|
+
import { AppPublisher } from "./app-remote-registry.types.js";
|
|
4
4
|
|
|
5
|
-
//#region src/
|
|
5
|
+
//#region src/types/app-publish.types.d.ts
|
|
6
6
|
declare const DEFAULT_APP_MARKETPLACE_API_BASE = "https://apps-registry.nextclaw.io";
|
|
7
7
|
type AppMarketplaceMetadata = {
|
|
8
8
|
slug: string;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"app-publish.types.d.ts","names":[],"sources":["../../src/types/app-publish.types.ts"],"mappings":";;;;;cAIa,gCAAA;AAAA,KAED,sBAAA;EACV,IAAA;EACA,OAAA;EACA,WAAA,EAAa,MAAA;EACb,WAAA;EACA,eAAA,GAAkB,MAAA;EAClB,MAAA;EACA,IAAA;EACA,UAAA;EACA,QAAA;EACA,QAAA;EACA,SAAA,GAAY,YAAA;AAAA;AAAA,KAGF,cAAA;EACV,IAAA;EACA,aAAA;AAAA;AAAA,KAGU,iBAAA;EACV,IAAA;EACA,KAAA;EACA,IAAA;EACA,OAAA;EACA,OAAA;EACA,WAAA,EAAa,MAAA;EACb,WAAA;EACA,eAAA,GAAkB,MAAA;EAClB,MAAA;EACA,IAAA;EACA,UAAA;EACA,QAAA;EACA,QAAA;EACA,SAAA,EAAW,YAAA;EACX,gBAAA,EAAkB,mBAAA;EAClB,QAAA,EAAU,WAAA;EACV,WAAA,EAAa,cAAA;EACb,YAAA;EACA,YAAA;EACA,KAAA,EAAO,cAAA;AAAA;AAAA,KAGG,gBAAA;EACV,OAAA;EACA,IAAA;IACE,IAAA;IACA,KAAA;IACA,IAAA;IACA,aAAA;IACA,MAAA;IACA,OAAA;MACE,IAAA;MACA,IAAA;MACA,OAAA;MACA,QAAA;IAAA;EAAA;EAGJ,YAAA;IACE,IAAA;IACA,MAAA;IACA,IAAA,EAAM,mBAAA;EAAA;EAER,SAAA;AAAA"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"app-publish.types.js","names":[],"sources":["../../src/types/app-publish.types.ts"],"sourcesContent":["import type { AppDistributionMode } from \"#app-runtime/types/app-bundle.types.js\";\nimport type { AppManifest, AppPermissions } from \"#app-runtime/types/app-manifest.types.js\";\nimport type { AppPublisher } from \"#app-runtime/types/app-remote-registry.types.js\";\n\nexport const DEFAULT_APP_MARKETPLACE_API_BASE = \"https://apps-registry.nextclaw.io\";\n\nexport type AppMarketplaceMetadata = {\n slug: string;\n summary: string;\n summaryI18n: Record<string, string>;\n description?: string;\n descriptionI18n?: Record<string, string>;\n author: string;\n tags: string[];\n sourceRepo?: string;\n homepage?: string;\n featured?: boolean;\n publisher?: AppPublisher;\n};\n\nexport type AppPublishFile = {\n path: string;\n contentBase64: string;\n};\n\nexport type AppPublishPayload = {\n slug: string;\n appId: string;\n name: string;\n version: string;\n summary: string;\n summaryI18n: Record<string, string>;\n description?: string;\n descriptionI18n?: Record<string, string>;\n author: string;\n tags: string[];\n sourceRepo?: string;\n homepage?: string;\n featured: boolean;\n publisher: AppPublisher;\n distributionMode: AppDistributionMode;\n manifest: AppManifest;\n permissions: AppPermissions;\n bundleBase64: string;\n bundleSha256: string;\n files: AppPublishFile[];\n};\n\nexport type AppPublishResult = {\n created: boolean;\n item: {\n slug: string;\n appId: string;\n name: string;\n latestVersion: string;\n webUrl?: string;\n install: {\n kind: \"registry\";\n spec: string;\n command: string;\n registry: string;\n };\n };\n distribution: {\n path: string;\n sha256: string;\n mode: AppDistributionMode;\n };\n fileCount: number;\n};\n"],"mappings":";AAIA,MAAa,mCAAmC"}
|
|
@@ -1,9 +1,9 @@
|
|
|
1
|
-
import { AppPermissions } from "
|
|
2
|
-
import { AppDistributionMode } from "
|
|
3
|
-
import { AppDocumentGrantMap } from "
|
|
1
|
+
import { AppPermissions, AppResolvedComponent } from "./app-manifest.types.js";
|
|
2
|
+
import { AppDistributionMode } from "./app-bundle.types.js";
|
|
3
|
+
import { AppDocumentGrantMap } from "./app-permissions.types.js";
|
|
4
4
|
import { AppPublisher } from "./app-remote-registry.types.js";
|
|
5
5
|
|
|
6
|
-
//#region src/
|
|
6
|
+
//#region src/types/app-registry.types.d.ts
|
|
7
7
|
type AppInstallSourceKind = "bundle" | "directory" | "registry";
|
|
8
8
|
type AppRegistryInstalledVersion = {
|
|
9
9
|
version: string;
|
|
@@ -17,12 +17,16 @@ type AppRegistryInstalledVersion = {
|
|
|
17
17
|
bundleUrl?: string;
|
|
18
18
|
sha256?: string;
|
|
19
19
|
publisher?: AppPublisher;
|
|
20
|
+
manifestSchemaVersion: 1 | 2;
|
|
21
|
+
components?: AppResolvedComponent[];
|
|
22
|
+
primaryPanelId?: string;
|
|
20
23
|
};
|
|
21
24
|
type AppRegistryAppRecord = {
|
|
22
25
|
appId: string;
|
|
23
26
|
name: string;
|
|
24
27
|
description?: string;
|
|
25
28
|
activeVersion: string;
|
|
29
|
+
enabled: boolean;
|
|
26
30
|
dataDirectory: string;
|
|
27
31
|
installedVersions: Record<string, AppRegistryInstalledVersion>;
|
|
28
32
|
grants: AppDocumentGrantMap;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"app-registry.types.d.ts","names":[],"sources":["../../src/types/app-registry.types.ts"],"mappings":";;;;;;KAKY,oBAAA;AAAA,KAEA,2BAAA;EACV,OAAA;EACA,gBAAA;EACA,UAAA,EAAY,oBAAA;EACZ,SAAA;EACA,WAAA;EACA,gBAAA,GAAmB,mBAAA;EACnB,WAAA,EAAa,cAAA;EACb,WAAA;EACA,SAAA;EACA,MAAA;EACA,SAAA,GAAY,YAAA;EACZ,qBAAA;EACA,UAAA,GAAa,oBAAA;EACb,cAAA;AAAA;AAAA,KAGU,oBAAA;EACV,KAAA;EACA,IAAA;EACA,WAAA;EACA,aAAA;EACA,OAAA;EACA,aAAA;EACA,iBAAA,EAAmB,MAAA,SAAe,2BAAA;EAClC,MAAA,EAAQ,mBAAA;AAAA;AAAA,KAGE,WAAA;EACV,aAAA;EACA,IAAA,EAAM,MAAA,SAAe,oBAAA;AAAA"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
import { AppPermissions } from "
|
|
2
|
-
import { AppDistributionMode } from "
|
|
1
|
+
import { AppPermissions } from "./app-manifest.types.js";
|
|
2
|
+
import { AppDistributionMode } from "./app-bundle.types.js";
|
|
3
3
|
|
|
4
|
-
//#region src/
|
|
4
|
+
//#region src/types/app-remote-registry.types.d.ts
|
|
5
5
|
declare const DEFAULT_APP_REGISTRY_URL = "https://apps-registry.nextclaw.io/api/v1/apps/registry/";
|
|
6
6
|
type AppPublisher = {
|
|
7
7
|
id: string;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"app-remote-registry.types.d.ts","names":[],"sources":["../../src/types/app-remote-registry.types.ts"],"mappings":";;;;cAGa,wBAAA;AAAA,KAGD,YAAA;EACV,EAAA;EACA,IAAA;EACA,GAAA;AAAA;AAAA,KAGU,iBAAA;EACV,aAAA;EACA,QAAA;IACE,GAAA;EAAA;AAAA;AAAA,KAIQ,yBAAA;EACV,UAAA;EACA,UAAA;EACA,MAAA;AAAA;AAAA,KAGU,wBAAA;EACV,IAAA;EACA,OAAA;EACA,WAAA;EACA,SAAA,GAAY,YAAA;EACZ,WAAA,GAAc,cAAA;EACd,IAAA;IACE,IAAA,GAAO,mBAAA;IACP,QAAA;IACA,MAAA;IACA,MAAA;IACA,MAAA;EAAA;AAAA;AAAA,KAIQ,yBAAA;EACV,IAAA;EACA,WAAA;EACA,WAAA;IACE,MAAA;EAAA;EAEF,QAAA,EAAU,MAAA,SAAe,wBAAA;AAAA;AAAA,KAGf,2BAAA;EACV,WAAA;EACA,WAAA;EACA,KAAA;EACA,OAAA;EACA,WAAA;EACA,SAAA,GAAY,YAAA;EACZ,WAAA,GAAc,cAAA;EACd,gBAAA,EAAkB,mBAAA;EAClB,SAAA;EACA,MAAA;AAAA"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"app-remote-registry.types.js","names":[],"sources":["../../src/types/app-remote-registry.types.ts"],"sourcesContent":["import type { AppPermissions } from \"#app-runtime/types/app-manifest.types.js\";\nimport type { AppDistributionMode } from \"#app-runtime/types/app-bundle.types.js\";\n\nexport const DEFAULT_APP_REGISTRY_URL =\n \"https://apps-registry.nextclaw.io/api/v1/apps/registry/\";\n\nexport type AppPublisher = {\n id: string;\n name: string;\n url?: string;\n};\n\nexport type AppRegistryConfig = {\n schemaVersion: 1;\n registry: {\n url: string;\n };\n};\n\nexport type AppRegistryConfigSnapshot = {\n defaultUrl: string;\n currentUrl: string;\n source: \"default\" | \"config\" | \"env\";\n};\n\nexport type AppRemoteRegistryVersion = {\n name: string;\n version: string;\n description?: string;\n publisher?: AppPublisher;\n permissions?: AppPermissions;\n dist: {\n kind?: AppDistributionMode;\n artifact?: string;\n bundle: string;\n source?: string;\n sha256: string;\n };\n};\n\nexport type AppRemoteRegistryDocument = {\n name: string;\n description?: string;\n \"dist-tags\": {\n latest: string;\n };\n versions: Record<string, AppRemoteRegistryVersion>;\n};\n\nexport type AppRemoteRegistryResolution = {\n registryUrl: string;\n metadataUrl: string;\n appId: string;\n version: string;\n description?: string;\n publisher?: AppPublisher;\n permissions?: AppPermissions;\n distributionMode: AppDistributionMode;\n bundleUrl: string;\n sha256: string;\n};\n"],"mappings":";AAGA,MAAa,2BACX"}
|
|
@@ -1,12 +1,12 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { AppStandaloneManifestBundle } from "./app-manifest.types.js";
|
|
2
2
|
|
|
3
|
-
//#region src/
|
|
3
|
+
//#region src/types/main-runner.types.d.ts
|
|
4
4
|
type WasmDocumentSummaryInput = {
|
|
5
5
|
documentCount: number;
|
|
6
6
|
textBytes: number;
|
|
7
7
|
};
|
|
8
8
|
type MainRunRequest = {
|
|
9
|
-
bundle:
|
|
9
|
+
bundle: AppStandaloneManifestBundle;
|
|
10
10
|
input: WasmDocumentSummaryInput;
|
|
11
11
|
};
|
|
12
12
|
type MainRunResult = {
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"main-runner.types.d.ts","names":[],"sources":["../../src/types/main-runner.types.ts"],"mappings":";;;KAEY,wBAAA;EACV,aAAA;EACA,SAAA;AAAA;AAAA,KAGU,cAAA;EACV,MAAA,EAAQ,2BAAA;EACR,KAAA,EAAO,wBAAA;AAAA;AAAA,KAGG,aAAA;EACV,UAAA;EACA,MAAA;AAAA"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@nextclaw/app-runtime",
|
|
3
|
-
"version": "0.9.
|
|
3
|
+
"version": "0.9.14",
|
|
4
4
|
"private": false,
|
|
5
5
|
"description": "Standalone micro app runtime and CLI for NextClaw apps.",
|
|
6
6
|
"type": "module",
|
|
@@ -22,7 +22,7 @@
|
|
|
22
22
|
"cli"
|
|
23
23
|
],
|
|
24
24
|
"bin": {
|
|
25
|
-
"napp": "dist/main.js"
|
|
25
|
+
"napp": "dist/app/main.js"
|
|
26
26
|
},
|
|
27
27
|
"publishConfig": {
|
|
28
28
|
"access": "public"
|
|
@@ -34,6 +34,13 @@
|
|
|
34
34
|
"default": "./dist/index.js"
|
|
35
35
|
}
|
|
36
36
|
},
|
|
37
|
+
"imports": {
|
|
38
|
+
"#app-runtime/*.js": {
|
|
39
|
+
"types": "./src/*.ts",
|
|
40
|
+
"development": "./src/*.ts",
|
|
41
|
+
"default": "./dist/*.js"
|
|
42
|
+
}
|
|
43
|
+
},
|
|
37
44
|
"files": [
|
|
38
45
|
"dist",
|
|
39
46
|
"README.md"
|
|
@@ -48,7 +55,7 @@
|
|
|
48
55
|
"vitest": "^4.1.2"
|
|
49
56
|
},
|
|
50
57
|
"scripts": {
|
|
51
|
-
"build": "tsdown src/index.ts src/main.ts --dts.sourcemap --clean --target es2022 --no-fixedExtension --unbundle",
|
|
58
|
+
"build": "tsdown src/index.ts src/app/main.ts --dts.sourcemap --clean --target es2022 --no-fixedExtension --unbundle",
|
|
52
59
|
"lint": "eslint .",
|
|
53
60
|
"tsc": "tsc -p tsconfig.json",
|
|
54
61
|
"test": "vitest run",
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"host-bridge.service.d.ts","names":[],"sources":["../../src/bridge/host-bridge.service.ts"],"mappings":";;;;cAGa,gBAAA;EAAA,iBACkB,WAAA;cAAA,WAAA,EAAa,kBAAA;EAE1C,MAAA,GACE,OAAA,EAAS,eAAA,EACT,QAAA,EAAU,cAAA,KACT,OAAA;EAAA,QA4CK,YAAA;EAAA,QAYA,SAAA;AAAA"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"host-bridge.service.js","names":[],"sources":["../../src/bridge/host-bridge.service.ts"],"sourcesContent":["import type { IncomingMessage, ServerResponse } from \"node:http\";\nimport type { AppInstanceService } from \"../host/app-instance.service.js\";\n\nexport class HostBridgeServer {\n constructor(private readonly appInstance: AppInstanceService) {}\n\n handle = async (\n request: IncomingMessage,\n response: ServerResponse,\n ): Promise<boolean> => {\n const requestUrl = new URL(request.url ?? \"/\", \"http://127.0.0.1\");\n if (!requestUrl.pathname.startsWith(\"/__napp\")) {\n return false;\n }\n\n if (request.method === \"GET\" && requestUrl.pathname === \"/__napp/health\") {\n this.writeJson(response, 200, { ok: true });\n return true;\n }\n\n if (request.method === \"GET\" && requestUrl.pathname === \"/__napp/manifest\") {\n this.writeJson(response, 200, {\n ok: true,\n manifest: this.appInstance.summarizeManifest(),\n });\n return true;\n }\n\n if (request.method === \"GET\" && requestUrl.pathname === \"/__napp/permissions\") {\n this.writeJson(response, 200, {\n ok: true,\n permissions: this.appInstance.summarizePermissions(),\n });\n return true;\n }\n\n if (request.method === \"POST\" && requestUrl.pathname === \"/__napp/run\") {\n const body = await this.readJsonBody<{ action?: string }>(request);\n const result = await this.appInstance.runAction(body.action);\n this.writeJson(response, 200, { ok: true, result });\n return true;\n }\n\n this.writeJson(response, 404, {\n ok: false,\n error: {\n code: \"NOT_FOUND\",\n message: `Unknown bridge path: ${requestUrl.pathname}`,\n },\n });\n return true;\n };\n\n private readJsonBody = async <T>(request: IncomingMessage): Promise<T> => {\n const chunks: Buffer[] = [];\n for await (const chunk of request) {\n chunks.push(Buffer.isBuffer(chunk) ? chunk : Buffer.from(chunk));\n }\n const rawBody = Buffer.concat(chunks).toString(\"utf-8\").trim();\n if (!rawBody) {\n return {} as T;\n }\n return JSON.parse(rawBody) as T;\n };\n\n private writeJson = (\n response: ServerResponse,\n statusCode: number,\n payload: unknown,\n ): void => {\n response.writeHead(statusCode, {\n \"content-type\": \"application/json; charset=utf-8\",\n \"cache-control\": \"no-store\",\n });\n response.end(JSON.stringify(payload, null, 2));\n };\n}\n"],"mappings":";AAGA,IAAa,mBAAb,MAA8B;CAC5B,YAAY,aAAkD;AAAjC,OAAA,cAAA;;CAE7B,SAAS,OACP,SACA,aACqB;EACrB,MAAM,aAAa,IAAI,IAAI,QAAQ,OAAO,KAAK,mBAAmB;AAClE,MAAI,CAAC,WAAW,SAAS,WAAW,UAAU,CAC5C,QAAO;AAGT,MAAI,QAAQ,WAAW,SAAS,WAAW,aAAa,kBAAkB;AACxE,QAAK,UAAU,UAAU,KAAK,EAAE,IAAI,MAAM,CAAC;AAC3C,UAAO;;AAGT,MAAI,QAAQ,WAAW,SAAS,WAAW,aAAa,oBAAoB;AAC1E,QAAK,UAAU,UAAU,KAAK;IAC5B,IAAI;IACJ,UAAU,KAAK,YAAY,mBAAmB;IAC/C,CAAC;AACF,UAAO;;AAGT,MAAI,QAAQ,WAAW,SAAS,WAAW,aAAa,uBAAuB;AAC7E,QAAK,UAAU,UAAU,KAAK;IAC5B,IAAI;IACJ,aAAa,KAAK,YAAY,sBAAsB;IACrD,CAAC;AACF,UAAO;;AAGT,MAAI,QAAQ,WAAW,UAAU,WAAW,aAAa,eAAe;GACtE,MAAM,OAAO,MAAM,KAAK,aAAkC,QAAQ;GAClE,MAAM,SAAS,MAAM,KAAK,YAAY,UAAU,KAAK,OAAO;AAC5D,QAAK,UAAU,UAAU,KAAK;IAAE,IAAI;IAAM;IAAQ,CAAC;AACnD,UAAO;;AAGT,OAAK,UAAU,UAAU,KAAK;GAC5B,IAAI;GACJ,OAAO;IACL,MAAM;IACN,SAAS,wBAAwB,WAAW;IAC7C;GACF,CAAC;AACF,SAAO;;CAGT,eAAuB,OAAU,YAAyC;EACxE,MAAM,SAAmB,EAAE;AAC3B,aAAW,MAAM,SAAS,QACxB,QAAO,KAAK,OAAO,SAAS,MAAM,GAAG,QAAQ,OAAO,KAAK,MAAM,CAAC;EAElE,MAAM,UAAU,OAAO,OAAO,OAAO,CAAC,SAAS,QAAQ,CAAC,MAAM;AAC9D,MAAI,CAAC,QACH,QAAO,EAAE;AAEX,SAAO,KAAK,MAAM,QAAQ;;CAG5B,aACE,UACA,YACA,YACS;AACT,WAAS,UAAU,YAAY;GAC7B,gBAAgB;GAChB,iBAAiB;GAClB,CAAC;AACF,WAAS,IAAI,KAAK,UAAU,SAAS,MAAM,EAAE,CAAC"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"app-bundle.service.d.ts","names":[],"sources":["../../src/bundle/app-bundle.service.ts"],"mappings":";;;;cAaa,gBAAA;EAAA,iBAEQ,eAAA;cAAA,eAAA,GAAiB,kBAAA;EAGpC,gBAAA,GAA0B,MAAA;IACxB,YAAA;IACA,UAAA;IACA,IAAA,GAAO,mBAAA;EAAA,MACL,OAAA,CAAQ,mBAAA;EAgDZ,aAAA,GAAuB,MAAA;IACrB,UAAA;IACA,eAAA;EAAA,MACE,OAAA,CAAQ,sBAAA;EAAA,QA+BJ,mBAAA;EAAA,QA2BA,kBAAA;EAAA,QA0BA,qBAAA;EAAA,QAuBA,2BAAA;EAAA,QA8BA,uBAAA;EAAA,QAaA,aAAA;EAAA,QAiBA,iBAAA;EAAA,QAYA,cAAA;EAAA,QAYA,aAAA;EAAA,QAIA,uBAAA;EAAA,QAIA,qBAAA;EAAA,QAQA,YAAA;EAAA,QAUA,eAAA;AAAA"}
|