@nextclaw/app-runtime 0.7.9 → 0.7.11

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.
Files changed (199) hide show
  1. package/dist/bridge/host-bridge.service.d.ts +2 -1
  2. package/dist/bridge/host-bridge.service.d.ts.map +1 -0
  3. package/dist/bridge/host-bridge.service.js +2 -0
  4. package/dist/bridge/host-bridge.service.js.map +1 -0
  5. package/dist/bundle/app-bundle.service.d.ts +2 -1
  6. package/dist/bundle/app-bundle.service.d.ts.map +1 -0
  7. package/dist/bundle/app-bundle.service.js +2 -0
  8. package/dist/bundle/app-bundle.service.js.map +1 -0
  9. package/dist/bundle/app-bundle.types.d.ts +2 -1
  10. package/dist/bundle/app-bundle.types.d.ts.map +1 -0
  11. package/dist/cli/app-runtime-cli.service.d.ts +2 -1
  12. package/dist/cli/app-runtime-cli.service.d.ts.map +1 -0
  13. package/dist/cli/app-runtime-cli.service.js +2 -0
  14. package/dist/cli/app-runtime-cli.service.js.map +1 -0
  15. package/dist/cli/app-runtime-options.service.d.ts +2 -1
  16. package/dist/cli/app-runtime-options.service.d.ts.map +1 -0
  17. package/dist/cli/app-runtime-options.service.js +2 -0
  18. package/dist/cli/app-runtime-options.service.js.map +1 -0
  19. package/dist/commands/create.controller.d.ts +2 -1
  20. package/dist/commands/create.controller.d.ts.map +1 -0
  21. package/dist/commands/create.controller.js +2 -0
  22. package/dist/commands/create.controller.js.map +1 -0
  23. package/dist/commands/dev.controller.js +2 -0
  24. package/dist/commands/dev.controller.js.map +1 -0
  25. package/dist/commands/grant.controller.d.ts +2 -1
  26. package/dist/commands/grant.controller.d.ts.map +1 -0
  27. package/dist/commands/grant.controller.js +2 -0
  28. package/dist/commands/grant.controller.js.map +1 -0
  29. package/dist/commands/info.controller.d.ts +2 -1
  30. package/dist/commands/info.controller.d.ts.map +1 -0
  31. package/dist/commands/info.controller.js +2 -0
  32. package/dist/commands/info.controller.js.map +1 -0
  33. package/dist/commands/inspect.controller.js +2 -0
  34. package/dist/commands/inspect.controller.js.map +1 -0
  35. package/dist/commands/install.controller.d.ts +2 -1
  36. package/dist/commands/install.controller.d.ts.map +1 -0
  37. package/dist/commands/install.controller.js +2 -0
  38. package/dist/commands/install.controller.js.map +1 -0
  39. package/dist/commands/list.controller.d.ts +2 -1
  40. package/dist/commands/list.controller.d.ts.map +1 -0
  41. package/dist/commands/list.controller.js +2 -0
  42. package/dist/commands/list.controller.js.map +1 -0
  43. package/dist/commands/pack.controller.d.ts +2 -1
  44. package/dist/commands/pack.controller.d.ts.map +1 -0
  45. package/dist/commands/pack.controller.js +2 -0
  46. package/dist/commands/pack.controller.js.map +1 -0
  47. package/dist/commands/permissions.controller.d.ts +2 -1
  48. package/dist/commands/permissions.controller.d.ts.map +1 -0
  49. package/dist/commands/permissions.controller.js +2 -0
  50. package/dist/commands/permissions.controller.js.map +1 -0
  51. package/dist/commands/publish.controller.d.ts +2 -1
  52. package/dist/commands/publish.controller.d.ts.map +1 -0
  53. package/dist/commands/publish.controller.js +2 -0
  54. package/dist/commands/publish.controller.js.map +1 -0
  55. package/dist/commands/registry.controller.d.ts +2 -1
  56. package/dist/commands/registry.controller.d.ts.map +1 -0
  57. package/dist/commands/registry.controller.js +2 -0
  58. package/dist/commands/registry.controller.js.map +1 -0
  59. package/dist/commands/revoke.controller.d.ts +2 -1
  60. package/dist/commands/revoke.controller.d.ts.map +1 -0
  61. package/dist/commands/revoke.controller.js +2 -0
  62. package/dist/commands/revoke.controller.js.map +1 -0
  63. package/dist/commands/run.controller.js +2 -0
  64. package/dist/commands/run.controller.js.map +1 -0
  65. package/dist/commands/uninstall.controller.d.ts +2 -1
  66. package/dist/commands/uninstall.controller.d.ts.map +1 -0
  67. package/dist/commands/uninstall.controller.js +2 -0
  68. package/dist/commands/uninstall.controller.js.map +1 -0
  69. package/dist/commands/update.controller.d.ts +2 -1
  70. package/dist/commands/update.controller.d.ts.map +1 -0
  71. package/dist/commands/update.controller.js +2 -0
  72. package/dist/commands/update.controller.js.map +1 -0
  73. package/dist/commands/validate-publish.controller.d.ts +2 -1
  74. package/dist/commands/validate-publish.controller.d.ts.map +1 -0
  75. package/dist/commands/validate-publish.controller.js +2 -0
  76. package/dist/commands/validate-publish.controller.js.map +1 -0
  77. package/dist/host/app-host.service.d.ts +2 -1
  78. package/dist/host/app-host.service.d.ts.map +1 -0
  79. package/dist/host/app-host.service.js +2 -0
  80. package/dist/host/app-host.service.js.map +1 -0
  81. package/dist/host/app-instance.service.d.ts +2 -1
  82. package/dist/host/app-instance.service.d.ts.map +1 -0
  83. package/dist/host/app-instance.service.js +2 -0
  84. package/dist/host/app-instance.service.js.map +1 -0
  85. package/dist/install/app-installation.service.d.ts +2 -1
  86. package/dist/install/app-installation.service.d.ts.map +1 -0
  87. package/dist/install/app-installation.service.js +2 -0
  88. package/dist/install/app-installation.service.js.map +1 -0
  89. package/dist/install/app-installation.types.d.ts +2 -1
  90. package/dist/install/app-installation.types.d.ts.map +1 -0
  91. package/dist/main.js +2 -0
  92. package/dist/main.js.map +1 -0
  93. package/dist/manifest/app-manifest.service.d.ts +2 -1
  94. package/dist/manifest/app-manifest.service.d.ts.map +1 -0
  95. package/dist/manifest/app-manifest.service.js +2 -0
  96. package/dist/manifest/app-manifest.service.js.map +1 -0
  97. package/dist/manifest/app-manifest.types.d.ts +2 -1
  98. package/dist/manifest/app-manifest.types.d.ts.map +1 -0
  99. package/dist/package.js +3 -1
  100. package/dist/package.js.map +1 -0
  101. package/dist/paths/app-home.service.d.ts +2 -1
  102. package/dist/paths/app-home.service.d.ts.map +1 -0
  103. package/dist/paths/app-home.service.js +2 -0
  104. package/dist/paths/app-home.service.js.map +1 -0
  105. package/dist/permissions/app-grant.service.d.ts +2 -1
  106. package/dist/permissions/app-grant.service.d.ts.map +1 -0
  107. package/dist/permissions/app-grant.service.js +2 -0
  108. package/dist/permissions/app-grant.service.js.map +1 -0
  109. package/dist/permissions/app-permissions.service.d.ts +2 -1
  110. package/dist/permissions/app-permissions.service.d.ts.map +1 -0
  111. package/dist/permissions/app-permissions.service.js +2 -0
  112. package/dist/permissions/app-permissions.service.js.map +1 -0
  113. package/dist/permissions/app-permissions.types.d.ts +2 -1
  114. package/dist/permissions/app-permissions.types.d.ts.map +1 -0
  115. package/dist/publish/app-marketplace-client.service.d.ts +2 -1
  116. package/dist/publish/app-marketplace-client.service.d.ts.map +1 -0
  117. package/dist/publish/app-marketplace-client.service.js +2 -0
  118. package/dist/publish/app-marketplace-client.service.js.map +1 -0
  119. package/dist/publish/app-marketplace-metadata.service.d.ts +2 -1
  120. package/dist/publish/app-marketplace-metadata.service.d.ts.map +1 -0
  121. package/dist/publish/app-marketplace-metadata.service.js +2 -0
  122. package/dist/publish/app-marketplace-metadata.service.js.map +1 -0
  123. package/dist/publish/app-publish-validation.service.d.ts +2 -1
  124. package/dist/publish/app-publish-validation.service.d.ts.map +1 -0
  125. package/dist/publish/app-publish-validation.service.js +2 -0
  126. package/dist/publish/app-publish-validation.service.js.map +1 -0
  127. package/dist/publish/app-publish.service.d.ts +2 -1
  128. package/dist/publish/app-publish.service.d.ts.map +1 -0
  129. package/dist/publish/app-publish.service.js +2 -0
  130. package/dist/publish/app-publish.service.js.map +1 -0
  131. package/dist/publish/app-publish.types.d.ts +2 -1
  132. package/dist/publish/app-publish.types.d.ts.map +1 -0
  133. package/dist/publish/app-publish.types.js +2 -0
  134. package/dist/publish/app-publish.types.js.map +1 -0
  135. package/dist/publish/platform-auth-state.service.d.ts +2 -1
  136. package/dist/publish/platform-auth-state.service.d.ts.map +1 -0
  137. package/dist/publish/platform-auth-state.service.js +2 -0
  138. package/dist/publish/platform-auth-state.service.js.map +1 -0
  139. package/dist/registry/app-registry-config.service.d.ts +2 -1
  140. package/dist/registry/app-registry-config.service.d.ts.map +1 -0
  141. package/dist/registry/app-registry-config.service.js +2 -0
  142. package/dist/registry/app-registry-config.service.js.map +1 -0
  143. package/dist/registry/app-registry.service.d.ts +2 -1
  144. package/dist/registry/app-registry.service.d.ts.map +1 -0
  145. package/dist/registry/app-registry.service.js +2 -0
  146. package/dist/registry/app-registry.service.js.map +1 -0
  147. package/dist/registry/app-registry.types.d.ts +2 -1
  148. package/dist/registry/app-registry.types.d.ts.map +1 -0
  149. package/dist/registry/app-remote-registry-client.service.d.ts +2 -1
  150. package/dist/registry/app-remote-registry-client.service.d.ts.map +1 -0
  151. package/dist/registry/app-remote-registry-client.service.js +2 -0
  152. package/dist/registry/app-remote-registry-client.service.js.map +1 -0
  153. package/dist/registry/app-remote-registry.types.d.ts +2 -1
  154. package/dist/registry/app-remote-registry.types.d.ts.map +1 -0
  155. package/dist/registry/app-remote-registry.types.js +2 -0
  156. package/dist/registry/app-remote-registry.types.js.map +1 -0
  157. package/dist/runtime/app-build.service.d.ts +2 -1
  158. package/dist/runtime/app-build.service.d.ts.map +1 -0
  159. package/dist/runtime/app-build.service.js +2 -0
  160. package/dist/runtime/app-build.service.js.map +1 -0
  161. package/dist/runtime/app-runtime-toolchain.service.d.ts +2 -1
  162. package/dist/runtime/app-runtime-toolchain.service.d.ts.map +1 -0
  163. package/dist/runtime/app-runtime-toolchain.service.js +2 -0
  164. package/dist/runtime/app-runtime-toolchain.service.js.map +1 -0
  165. package/dist/runtime/main-runner.service.d.ts +2 -1
  166. package/dist/runtime/main-runner.service.d.ts.map +1 -0
  167. package/dist/runtime/main-runner.service.js +2 -0
  168. package/dist/runtime/main-runner.service.js.map +1 -0
  169. package/dist/runtime/main-runner.types.d.ts +2 -1
  170. package/dist/runtime/main-runner.types.d.ts.map +1 -0
  171. package/dist/runtime/wasm-main-runner.service.d.ts +2 -1
  172. package/dist/runtime/wasm-main-runner.service.d.ts.map +1 -0
  173. package/dist/runtime/wasm-main-runner.service.js +2 -0
  174. package/dist/runtime/wasm-main-runner.service.js.map +1 -0
  175. package/dist/runtime/wasmtime-wasi-http-component.service.d.ts +2 -1
  176. package/dist/runtime/wasmtime-wasi-http-component.service.d.ts.map +1 -0
  177. package/dist/runtime/wasmtime-wasi-http-component.service.js +2 -0
  178. package/dist/runtime/wasmtime-wasi-http-component.service.js.map +1 -0
  179. package/dist/scaffold/app-scaffold.service.d.ts +2 -1
  180. package/dist/scaffold/app-scaffold.service.d.ts.map +1 -0
  181. package/dist/scaffold/app-scaffold.service.js +2 -0
  182. package/dist/scaffold/app-scaffold.service.js.map +1 -0
  183. package/dist/scaffold/app-ts-http-lite-scaffold-template.service.d.ts +2 -1
  184. package/dist/scaffold/app-ts-http-lite-scaffold-template.service.d.ts.map +1 -0
  185. package/dist/scaffold/app-ts-http-lite-scaffold-template.service.js +2 -0
  186. package/dist/scaffold/app-ts-http-lite-scaffold-template.service.js.map +1 -0
  187. package/dist/scaffold/app-ts-http-scaffold-template.service.d.ts +2 -1
  188. package/dist/scaffold/app-ts-http-scaffold-template.service.d.ts.map +1 -0
  189. package/dist/scaffold/app-ts-http-scaffold-template.service.js +2 -0
  190. package/dist/scaffold/app-ts-http-scaffold-template.service.js.map +1 -0
  191. package/dist/sidecar/wasm-sidecar-client.service.d.ts +2 -1
  192. package/dist/sidecar/wasm-sidecar-client.service.d.ts.map +1 -0
  193. package/dist/sidecar/wasm-sidecar-client.service.js +2 -0
  194. package/dist/sidecar/wasm-sidecar-client.service.js.map +1 -0
  195. package/dist/ui/ui-server.service.d.ts +2 -1
  196. package/dist/ui/ui-server.service.d.ts.map +1 -0
  197. package/dist/ui/ui-server.service.js +2 -0
  198. package/dist/ui/ui-server.service.js.map +1 -0
  199. package/package.json +2 -2
@@ -10,4 +10,5 @@ declare class HostBridgeServer {
10
10
  private writeJson;
11
11
  }
12
12
  //#endregion
13
- export { HostBridgeServer };
13
+ export { HostBridgeServer };
14
+ //# sourceMappingURL=host-bridge.service.d.ts.map
@@ -0,0 +1 @@
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"}
@@ -59,3 +59,5 @@ var HostBridgeServer = class {
59
59
  };
60
60
  //#endregion
61
61
  export { HostBridgeServer };
62
+
63
+ //# sourceMappingURL=host-bridge.service.js.map
@@ -0,0 +1 @@
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"}
@@ -29,4 +29,5 @@ declare class AppBundleService {
29
29
  private verifyChecksums;
30
30
  }
31
31
  //#endregion
32
- export { AppBundleService };
32
+ export { AppBundleService };
33
+ //# sourceMappingURL=app-bundle.service.d.ts.map
@@ -0,0 +1 @@
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"}
@@ -192,3 +192,5 @@ var AppBundleService = class {
192
192
  const SOURCE_WASM_PLACEHOLDER_BYTES = Uint8Array.from(Buffer.from("AGFzbQEAAAABBwFgAn9/AX8DAgEABxMBD3N1bW1hcml6ZV9ub3RlcwAACg0BCwAgACABakHIAWoL", "base64"));
193
193
  //#endregion
194
194
  export { AppBundleService };
195
+
196
+ //# sourceMappingURL=app-bundle.service.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"app-bundle.service.js","names":[],"sources":["../../src/bundle/app-bundle.service.ts"],"sourcesContent":["import { mkdir, readFile, readdir, rm, writeFile } from \"node:fs/promises\";\nimport { createHash } from \"node:crypto\";\nimport path from \"node:path\";\nimport { unzipSync, zipSync, strToU8 } from \"fflate\";\nimport { AppManifestService } from \"../manifest/app-manifest.service.js\";\nimport type {\n AppBundleChecksums,\n AppBundleExtractResult,\n AppBundleMetadata,\n AppBundlePackResult,\n AppDistributionMode,\n} from \"./app-bundle.types.js\";\n\nexport class AppBundleService {\n constructor(\n private readonly manifestService: AppManifestService = new AppManifestService(),\n ) {}\n\n packAppDirectory = async (params: {\n appDirectory: string;\n outputPath?: string;\n mode?: AppDistributionMode;\n }): Promise<AppBundlePackResult> => {\n const { appDirectory, outputPath, mode: requestedMode } = params;\n const bundle = await this.manifestService.load(appDirectory);\n const mode = requestedMode ?? \"bundle\";\n const { appFiles, filePaths } =\n mode === \"source\"\n ? await this.collectSourceFiles(bundle)\n : await this.collectRuntimeFiles(bundle);\n const metadata = this.buildMetadata(\n bundle.manifest.id,\n bundle.manifest.name,\n bundle.manifest.version,\n mode,\n );\n const bundleJsonPath = \".napp/bundle.json\";\n const checksumsJsonPath = \".napp/checksums.json\";\n const bundleJsonBytes = strToU8(`${JSON.stringify(metadata, null, 2)}\\n`);\n const checksums = this.buildChecksums({\n ...appFiles,\n [bundleJsonPath]: bundleJsonBytes,\n });\n const checksumsJsonBytes = strToU8(`${JSON.stringify(checksums, null, 2)}\\n`);\n const archiveBytes = zipSync(\n {\n ...appFiles,\n [bundleJsonPath]: bundleJsonBytes,\n [checksumsJsonPath]: checksumsJsonBytes,\n },\n {\n level: 9,\n },\n );\n const resolvedOutputPath = outputPath\n ? path.resolve(outputPath)\n : path.join(\n path.dirname(bundle.appDirectory),\n `${this.normalizeBundleFileName(bundle.manifest.id)}-${bundle.manifest.version}.napp`,\n );\n await mkdir(path.dirname(resolvedOutputPath), { recursive: true });\n await writeFile(resolvedOutputPath, Buffer.from(archiveBytes));\n return {\n bundlePath: resolvedOutputPath,\n metadata,\n sizeBytes: archiveBytes.byteLength,\n filePaths,\n };\n };\n\n extractBundle = async (params: {\n bundlePath: string;\n targetDirectory: string;\n }): Promise<AppBundleExtractResult> => {\n const bundlePath = path.resolve(params.bundlePath);\n const targetDirectory = path.resolve(params.targetDirectory);\n await rm(targetDirectory, { recursive: true, force: true });\n await mkdir(targetDirectory, { recursive: true });\n const archive = unzipSync(new Uint8Array(await readFile(bundlePath)));\n const entryNames = Object.keys(archive).sort((left, right) => left.localeCompare(right));\n for (const entryName of entryNames) {\n const normalizedEntry = this.normalizeArchiveEntry(entryName);\n const targetPath = path.join(targetDirectory, normalizedEntry);\n await mkdir(path.dirname(targetPath), { recursive: true });\n await writeFile(targetPath, Buffer.from(archive[entryName]));\n }\n const rawMetadata = await this.readJsonFile<Partial<AppBundleMetadata>>(\n path.join(targetDirectory, \".napp\", \"bundle.json\"),\n \"bundle metadata\",\n );\n const metadata = this.normalizeMetadata(rawMetadata);\n const checksums = await this.readJsonFile<AppBundleChecksums>(\n path.join(targetDirectory, \".napp\", \"checksums.json\"),\n \"bundle checksums\",\n );\n await this.verifyChecksums(targetDirectory, checksums);\n await this.manifestService.load(targetDirectory);\n return {\n appDirectory: targetDirectory,\n metadata,\n checksums,\n };\n };\n\n private collectRuntimeFiles = async (\n bundle: AppBundleMetadataBundleSource,\n ): Promise<{\n appFiles: Record<string, Uint8Array>;\n filePaths: string[];\n }> => {\n const appDirectory = bundle.appDirectory;\n const filePaths = new Set<string>([\n path.relative(appDirectory, bundle.manifestPath),\n path.relative(appDirectory, bundle.mainEntryPath),\n ]);\n await this.collectDirectoryPaths(bundle.uiDirectoryPath, appDirectory, filePaths);\n await this.collectDirectoryPaths(bundle.assetsDirectoryPath, appDirectory, filePaths);\n if (bundle.iconPath) {\n filePaths.add(path.relative(appDirectory, bundle.iconPath));\n }\n const sortedPaths = Array.from(filePaths).sort((left, right) => left.localeCompare(right));\n const appFiles: Record<string, Uint8Array> = {};\n for (const relativePath of sortedPaths) {\n appFiles[relativePath] = new Uint8Array(await readFile(path.join(appDirectory, relativePath)));\n }\n return {\n appFiles,\n filePaths: sortedPaths,\n };\n };\n\n private collectSourceFiles = async (\n bundle: AppBundleMetadataBundleSource,\n ): Promise<{\n appFiles: Record<string, Uint8Array>;\n filePaths: string[];\n }> => {\n const filePaths = new Set<string>();\n await this.collectSourceDirectoryPaths(bundle.appDirectory, bundle.appDirectory, filePaths);\n const sortedPaths = Array.from(filePaths).sort((left, right) => left.localeCompare(right));\n const appFiles: Record<string, Uint8Array> = {};\n for (const relativePath of sortedPaths) {\n if (\n bundle.manifest.main.kind === \"wasi-http-component\" &&\n relativePath === bundle.manifest.main.entry\n ) {\n appFiles[relativePath] = SOURCE_WASM_PLACEHOLDER_BYTES;\n continue;\n }\n appFiles[relativePath] = new Uint8Array(await readFile(path.join(bundle.appDirectory, relativePath)));\n }\n return {\n appFiles,\n filePaths: sortedPaths,\n };\n };\n\n private collectDirectoryPaths = async (\n directoryPath: string,\n appDirectory: string,\n filePaths: Set<string>,\n ): Promise<void> => {\n try {\n const entries = await readdir(directoryPath, { withFileTypes: true });\n for (const entry of entries) {\n const entryPath = path.join(directoryPath, entry.name);\n if (entry.isDirectory()) {\n await this.collectDirectoryPaths(entryPath, appDirectory, filePaths);\n continue;\n }\n if (!entry.isFile()) {\n continue;\n }\n filePaths.add(path.relative(appDirectory, entryPath));\n }\n } catch {\n return;\n }\n };\n\n private collectSourceDirectoryPaths = async (\n directoryPath: string,\n appDirectory: string,\n filePaths: Set<string>,\n ): Promise<void> => {\n try {\n const entries = await readdir(directoryPath, { withFileTypes: true });\n for (const entry of entries) {\n const entryPath = path.join(directoryPath, entry.name);\n const relativePath = path.relative(appDirectory, entryPath).replace(/\\\\/g, \"/\");\n if (entry.isDirectory()) {\n if (this.shouldExcludeSourcePath(relativePath)) {\n continue;\n }\n await this.collectSourceDirectoryPaths(entryPath, appDirectory, filePaths);\n continue;\n }\n if (!entry.isFile()) {\n continue;\n }\n if (this.shouldExcludeSourcePath(relativePath)) {\n continue;\n }\n filePaths.add(relativePath);\n }\n } catch {\n return;\n }\n };\n\n private shouldExcludeSourcePath = (relativePath: string): boolean => {\n return (\n relativePath === \".napp\" ||\n relativePath.startsWith(\".napp/\") ||\n relativePath === \"main/node_modules\" ||\n relativePath.startsWith(\"main/node_modules/\") ||\n relativePath === \"main/dist\" ||\n relativePath.startsWith(\"main/dist/\") ||\n relativePath === \"main/generated\" ||\n relativePath.startsWith(\"main/generated/\")\n );\n };\n\n private buildMetadata = (\n appId: string,\n name: string,\n version: string,\n distributionMode: AppDistributionMode,\n ): AppBundleMetadata => {\n return {\n bundleFormatVersion: 1,\n distributionMode,\n appId,\n name,\n version,\n entryManifest: \"manifest.json\",\n checksumsFile: \".napp/checksums.json\",\n };\n };\n\n private normalizeMetadata = (rawMetadata: Partial<AppBundleMetadata>): AppBundleMetadata => {\n return {\n bundleFormatVersion: 1,\n distributionMode: rawMetadata.distributionMode === \"source\" ? \"source\" : \"bundle\",\n appId: String(rawMetadata.appId ?? \"\"),\n name: String(rawMetadata.name ?? \"\"),\n version: String(rawMetadata.version ?? \"\"),\n entryManifest: \"manifest.json\",\n checksumsFile: \".napp/checksums.json\",\n };\n };\n\n private buildChecksums = (\n files: Record<string, Uint8Array>,\n ): AppBundleChecksums => {\n const entries = Object.entries(files).sort(([left], [right]) => left.localeCompare(right));\n return {\n algorithm: \"sha256\",\n files: Object.fromEntries(\n entries.map(([relativePath, fileBytes]) => [relativePath, this.computeSha256(fileBytes)]),\n ),\n };\n };\n\n private computeSha256 = (fileBytes: Uint8Array): string => {\n return createHash(\"sha256\").update(Buffer.from(fileBytes)).digest(\"hex\");\n };\n\n private normalizeBundleFileName = (appId: string): string => {\n return appId.replace(/[^a-zA-Z0-9._-]+/g, \"-\");\n };\n\n private normalizeArchiveEntry = (entryName: string): string => {\n const normalized = entryName.replace(/\\\\/g, \"/\");\n if (!normalized || normalized.startsWith(\"/\") || normalized.includes(\"../\")) {\n throw new Error(`bundle 内包含非法路径:${entryName}`);\n }\n return normalized;\n };\n\n private readJsonFile = async <T>(filePath: string, label: string): Promise<T> => {\n try {\n return JSON.parse(await readFile(filePath, \"utf-8\")) as T;\n } catch (error) {\n throw new Error(\n `无法读取 ${label}:${error instanceof Error ? error.message : String(error)}`,\n );\n }\n };\n\n private verifyChecksums = async (\n appDirectory: string,\n checksums: AppBundleChecksums,\n ): Promise<void> => {\n if (checksums.algorithm !== \"sha256\") {\n throw new Error(\"当前只支持 sha256 checksums。\");\n }\n const entries = Object.entries(checksums.files).sort(([left], [right]) => left.localeCompare(right));\n for (const [relativePath, expectedHash] of entries) {\n const fileBytes = new Uint8Array(await readFile(path.join(appDirectory, relativePath)));\n const actualHash = this.computeSha256(fileBytes);\n if (actualHash !== expectedHash) {\n throw new Error(`bundle checksum 校验失败:${relativePath}`);\n }\n }\n };\n}\n\ntype AppBundleMetadataBundleSource = Awaited<ReturnType<AppManifestService[\"load\"]>>;\n\nconst SOURCE_WASM_PLACEHOLDER_BYTES = Uint8Array.from(\n Buffer.from(\n \"AGFzbQEAAAABBwFgAn9/AX8DAgEABxMBD3N1bW1hcml6ZV9ub3RlcwAACg0BCwAgACABakHIAWoL\",\n \"base64\",\n ),\n);\n"],"mappings":"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"}
@@ -25,4 +25,5 @@ type AppBundleExtractResult = {
25
25
  checksums: AppBundleChecksums;
26
26
  };
27
27
  //#endregion
28
- export { AppBundleChecksums, AppBundleExtractResult, AppBundleMetadata, AppBundlePackResult, AppDistributionMode };
28
+ export { AppBundleChecksums, AppBundleExtractResult, AppBundleMetadata, AppBundlePackResult, AppDistributionMode };
29
+ //# sourceMappingURL=app-bundle.types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"app-bundle.types.d.ts","names":[],"sources":["../../src/bundle/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"}
@@ -28,4 +28,5 @@ declare class AppRuntimeCliService {
28
28
  private write;
29
29
  }
30
30
  //#endregion
31
- export { AppRuntimeCliService };
31
+ export { AppRuntimeCliService };
32
+ //# sourceMappingURL=app-runtime-cli.service.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"app-runtime-cli.service.d.ts","names":[],"sources":["../../src/cli/app-runtime-cli.service.ts"],"mappings":";;;cAqBa,oBAAA;EAAA,iBAEQ,cAAA;cAAA,cAAA,GAAgB,wBAAA;EAGnC,GAAA,QAAgB,OAAA;EAAA,QAkBR,QAAA;EAAA,QA8DA,YAAA;EAAA,QAWA,aAAA;EAAA,QAUA,WAAA;EAAA,QAsBA,YAAA;EAAA,QAwBA,SAAA;EAAA,QAcA,SAAA;EAAA,QAcA,UAAA;EAAA,QAYA,aAAA;EAAA,QAcA,qBAAA;EAAA,QAYA,aAAA;EAAA,QAWA,YAAA;EAAA,QAYA,eAAA;EAAA,QAWA,UAAA;EAAA,QAQA,UAAA;EAAA,QAUA,cAAA;EAAA,QA8CA,iBAAA;EAAA,QAUA,WAAA;EAAA,QAWA,YAAA;EAAA,QAWA,UAAA;EAAA,QAwBA,KAAA;AAAA"}
@@ -367,3 +367,5 @@ var AppRuntimeCliService = class {
367
367
  };
368
368
  //#endregion
369
369
  export { AppRuntimeCliService };
370
+
371
+ //# sourceMappingURL=app-runtime-cli.service.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"app-runtime-cli.service.js","names":["packageJson.version"],"sources":["../../src/cli/app-runtime-cli.service.ts"],"sourcesContent":["import packageJson from \"../../package.json\" with { type: \"json\" };\nimport { CreateCommand } from \"../commands/create.controller.js\";\nimport { DevCommand } from \"../commands/dev.controller.js\";\nimport { GrantCommand } from \"../commands/grant.controller.js\";\nimport { InfoCommand } from \"../commands/info.controller.js\";\nimport { InspectCommand } from \"../commands/inspect.controller.js\";\nimport { InstallCommand } from \"../commands/install.controller.js\";\nimport { ListCommand } from \"../commands/list.controller.js\";\nimport { PackCommand } from \"../commands/pack.controller.js\";\nimport { PermissionsCommand } from \"../commands/permissions.controller.js\";\nimport { PublishCommand } from \"../commands/publish.controller.js\";\nimport { RegistryCommand } from \"../commands/registry.controller.js\";\nimport { RevokeCommand } from \"../commands/revoke.controller.js\";\nimport { RunCommand } from \"../commands/run.controller.js\";\nimport { UninstallCommand } from \"../commands/uninstall.controller.js\";\nimport { UpdateCommand } from \"../commands/update.controller.js\";\nimport { ValidatePublishCommand } from \"../commands/validate-publish.controller.js\";\nimport { AppBuildService } from \"../runtime/app-build.service.js\";\nimport { AppRuntimeToolchainService } from \"../runtime/app-runtime-toolchain.service.js\";\nimport { AppRuntimeOptionsService } from \"./app-runtime-options.service.js\";\n\nexport class AppRuntimeCliService {\n constructor(\n private readonly optionsService: AppRuntimeOptionsService = new AppRuntimeOptionsService(),\n ) {}\n\n run = async (): Promise<void> => {\n const args = process.argv.slice(2);\n const [command, ...restArgs] = args;\n if (command === \"--help\" || command === \"help\") {\n this.writeUsage();\n return;\n }\n if (command === \"--version\" || command === \"version\") {\n this.write(`${packageJson.version}\\n`);\n return;\n }\n if (!command) {\n this.writeUsage();\n process.exit(1);\n }\n await this.dispatch(command, restArgs);\n };\n\n private dispatch = async (command: string, restArgs: string[]): Promise<void> => {\n switch (command) {\n case \"create\":\n await this.handleCreate(restArgs);\n return;\n case \"inspect\":\n await this.handleInspect(restArgs);\n return;\n case \"build\":\n await this.handleBuild(restArgs);\n return;\n case \"doctor\":\n await this.handleDoctor(restArgs);\n return;\n case \"run\":\n await this.handleRun(restArgs);\n return;\n case \"dev\":\n await this.handleDev(restArgs);\n return;\n case \"pack\":\n await this.handlePack(restArgs);\n return;\n case \"publish\":\n await this.handlePublish(restArgs);\n return;\n case \"validate-publish\":\n await this.handleValidatePublish(restArgs);\n return;\n case \"install\":\n await this.handleInstall(restArgs);\n return;\n case \"update\":\n await this.handleUpdate(restArgs);\n return;\n case \"uninstall\":\n await this.handleUninstall(restArgs);\n return;\n case \"list\":\n await this.handleList(restArgs);\n return;\n case \"info\":\n await this.handleInfo(restArgs);\n return;\n case \"registry\":\n await this.handleRegistry(restArgs);\n return;\n case \"permissions\":\n await this.handlePermissions(restArgs);\n return;\n case \"grant\":\n await this.handleGrant(restArgs);\n return;\n case \"revoke\":\n await this.handleRevoke(restArgs);\n return;\n default:\n this.writeUsage();\n process.exit(1);\n }\n };\n\n private handleCreate = async (restArgs: string[]): Promise<void> => {\n const { target, optionArgs } = this.optionsService.readTarget(\"create\", restArgs);\n const options = this.optionsService.readCreateOptions(optionArgs);\n await new CreateCommand().run({\n appDirectory: target,\n template: options.template,\n json: options.json,\n write: this.write,\n });\n };\n\n private handleInspect = async (restArgs: string[]): Promise<void> => {\n const { target, optionArgs } = this.optionsService.readTarget(\"inspect\", restArgs);\n const options = this.optionsService.readJsonOnlyOptions(optionArgs);\n await new InspectCommand().run({\n appDirectory: target,\n json: options.json,\n write: this.write,\n });\n };\n\n private handleBuild = async (restArgs: string[]): Promise<void> => {\n const { target, optionArgs } = this.optionsService.readTarget(\"build\", restArgs);\n const options = this.optionsService.readBuildOptions(optionArgs);\n const result = await new AppBuildService().build({\n appDirectory: target,\n install: options.install,\n });\n if (options.json) {\n this.write(`${JSON.stringify({ ok: true, build: result }, null, 2)}\\n`);\n return;\n }\n if (!result.built) {\n this.write(`Build skipped: ${result.skippedReason ?? result.mainKind}\\n`);\n return;\n }\n this.write(`Built ${result.mainKind} app\\n`);\n this.write(`Main: ${result.mainEntryPath}\\n`);\n if (result.installedDependencies) {\n this.write(\"Dependencies: installed\\n\");\n }\n };\n\n private handleDoctor = async (restArgs: string[]): Promise<void> => {\n const options = this.optionsService.readJsonOnlyOptions(restArgs);\n const result = await new AppRuntimeToolchainService().doctor();\n if (options.json) {\n this.write(`${JSON.stringify({ ok: result.ok, doctor: result }, null, 2)}\\n`);\n if (!result.ok) {\n process.exitCode = 1;\n }\n return;\n }\n this.write(`NApp runtime doctor: ${result.ok ? \"ok\" : \"not ready\"}\\n`);\n for (const tool of result.tools) {\n this.write(\n `${tool.ok ? \"ok\" : \"missing\"} ${tool.name}${tool.version ? ` ${tool.version}` : \"\"}\\n`,\n );\n if (!tool.ok) {\n this.write(` ${tool.installHint}\\n`);\n }\n }\n if (!result.ok) {\n process.exitCode = 1;\n }\n };\n\n private handleRun = async (restArgs: string[]): Promise<void> => {\n const { target, optionArgs } = this.optionsService.readTarget(\"run\", restArgs);\n const options = this.optionsService.readRuntimeOptions(optionArgs);\n await new RunCommand().run({\n appReference: target,\n host: options.host,\n port: options.port,\n dataDirectory: options.dataDirectory,\n json: options.json,\n documentGrantMap: options.documentGrantMap,\n write: this.write,\n });\n };\n\n private handleDev = async (restArgs: string[]): Promise<void> => {\n const { target, optionArgs } = this.optionsService.readTarget(\"dev\", restArgs);\n const options = this.optionsService.readRuntimeOptions(optionArgs);\n await new DevCommand().run({\n appReference: target,\n host: options.host,\n port: options.port,\n dataDirectory: options.dataDirectory,\n json: options.json,\n documentGrantMap: options.documentGrantMap,\n write: this.write,\n });\n };\n\n private handlePack = async (restArgs: string[]): Promise<void> => {\n const { target, optionArgs } = this.optionsService.readTarget(\"pack\", restArgs);\n const options = this.optionsService.readPackOptions(optionArgs);\n await new PackCommand().run({\n appDirectory: target,\n outputPath: options.outputPath,\n mode: options.mode,\n json: options.json,\n write: this.write,\n });\n };\n\n private handlePublish = async (restArgs: string[]): Promise<void> => {\n const { target, optionArgs } = this.optionsService.readTarget(\"publish\", restArgs);\n const options = this.optionsService.readPublishOptions(optionArgs);\n await new PublishCommand().run({\n appDirectory: target,\n metadataPath: options.metadataPath,\n apiBaseUrl: options.apiBaseUrl,\n token: options.token,\n mode: options.mode,\n json: options.json,\n write: this.write,\n });\n };\n\n private handleValidatePublish = async (restArgs: string[]): Promise<void> => {\n const { target, optionArgs } = this.optionsService.readTarget(\"validate-publish\", restArgs);\n const options = this.optionsService.readPublishOptions(optionArgs);\n await new ValidatePublishCommand().run({\n appDirectory: target,\n metadataPath: options.metadataPath,\n mode: options.mode,\n json: options.json,\n write: this.write,\n });\n };\n\n private handleInstall = async (restArgs: string[]): Promise<void> => {\n const { target, optionArgs } = this.optionsService.readTarget(\"install\", restArgs);\n const options = this.optionsService.readInstallOptions(optionArgs);\n await new InstallCommand().run({\n appSource: target,\n registryUrl: options.registryUrl,\n json: options.json,\n write: this.write,\n });\n };\n\n private handleUpdate = async (restArgs: string[]): Promise<void> => {\n const { target, optionArgs } = this.optionsService.readTarget(\"update\", restArgs);\n const options = this.optionsService.readUpdateOptions(optionArgs);\n await new UpdateCommand().run({\n appId: target,\n version: options.version,\n registryUrl: options.registryUrl,\n json: options.json,\n write: this.write,\n });\n };\n\n private handleUninstall = async (restArgs: string[]): Promise<void> => {\n const { target, optionArgs } = this.optionsService.readTarget(\"uninstall\", restArgs);\n const options = this.optionsService.readUninstallOptions(optionArgs);\n await new UninstallCommand().run({\n appId: target,\n purgeData: options.purgeData,\n json: options.json,\n write: this.write,\n });\n };\n\n private handleList = async (restArgs: string[]): Promise<void> => {\n const options = this.optionsService.readJsonOnlyOptions(restArgs);\n await new ListCommand().run({\n json: options.json,\n write: this.write,\n });\n };\n\n private handleInfo = async (restArgs: string[]): Promise<void> => {\n const { target, optionArgs } = this.optionsService.readTarget(\"info\", restArgs);\n const options = this.optionsService.readJsonOnlyOptions(optionArgs);\n await new InfoCommand().run({\n appId: target,\n json: options.json,\n write: this.write,\n });\n };\n\n private handleRegistry = async (restArgs: string[]): Promise<void> => {\n const [actionOrUrl, ...optionArgs] = restArgs;\n if (!actionOrUrl || actionOrUrl === \"get\") {\n const options = this.optionsService.readJsonOnlyOptions(optionArgs);\n await new RegistryCommand().run({\n action: \"get\",\n json: options.json,\n write: this.write,\n });\n return;\n }\n if (actionOrUrl === \"--json\") {\n const options = this.optionsService.readJsonOnlyOptions([actionOrUrl, ...optionArgs]);\n await new RegistryCommand().run({\n action: \"get\",\n json: options.json,\n write: this.write,\n });\n return;\n }\n if (actionOrUrl === \"set\") {\n const { target, optionArgs: actionOptionArgs } = this.optionsService.readTarget(\n \"registry set\",\n optionArgs,\n );\n const options = this.optionsService.readJsonOnlyOptions(actionOptionArgs);\n await new RegistryCommand().run({\n action: \"set\",\n registryUrl: target,\n json: options.json,\n write: this.write,\n });\n return;\n }\n if (actionOrUrl === \"reset\") {\n const options = this.optionsService.readJsonOnlyOptions(optionArgs);\n await new RegistryCommand().run({\n action: \"reset\",\n json: options.json,\n write: this.write,\n });\n return;\n }\n throw new Error(`未知 registry 子命令:${actionOrUrl}`);\n };\n\n private handlePermissions = async (restArgs: string[]): Promise<void> => {\n const { target, optionArgs } = this.optionsService.readTarget(\"permissions\", restArgs);\n const options = this.optionsService.readJsonOnlyOptions(optionArgs);\n await new PermissionsCommand().run({\n appId: target,\n json: options.json,\n write: this.write,\n });\n };\n\n private handleGrant = async (restArgs: string[]): Promise<void> => {\n const { target, optionArgs } = this.optionsService.readTarget(\"grant\", restArgs);\n const options = this.optionsService.readGrantOptions(optionArgs);\n await new GrantCommand().run({\n appId: target,\n documentGrantMap: options.documentGrantMap,\n json: options.json,\n write: this.write,\n });\n };\n\n private handleRevoke = async (restArgs: string[]): Promise<void> => {\n const { target, optionArgs } = this.optionsService.readTarget(\"revoke\", restArgs);\n const options = this.optionsService.readRevokeOptions(optionArgs);\n await new RevokeCommand().run({\n appId: target,\n documentScopeIds: options.documentScopeIds,\n json: options.json,\n write: this.write,\n });\n };\n\n private writeUsage = (): void => {\n this.write(\"Usage: napp create <app-dir> [--template starter|ts-http|ts-http-lite] [--json]\\n\");\n this.write(\" napp inspect <app-dir> [--json]\\n\");\n this.write(\" napp build <app-dir> [--install] [--json]\\n\");\n this.write(\" napp doctor [--json]\\n\");\n this.write(\" napp <run|dev> <app-dir|app-id> [--host 127.0.0.1] [--port 3100] [--data /path] [--json] [--document scope=/path]\\n\");\n this.write(\" napp pack <app-dir> [--mode source|bundle] [--out bundle.napp] [--json]\\n\");\n this.write(\" napp publish <app-dir> [--mode source|bundle] [--meta marketplace.json] [--api-base <url>] [--token <token>] [--json]\\n\");\n this.write(\" napp validate-publish <app-dir> [--mode source|bundle] [--meta marketplace.json] [--json]\\n\");\n this.write(\" napp install <app-dir|bundle.napp|app-id[@version]> [--registry <url>] [--json]\\n\");\n this.write(\" napp update <app-id> [--version <version>] [--registry <url>] [--json]\\n\");\n this.write(\" napp uninstall <app-id> [--purge-data] [--json]\\n\");\n this.write(\" napp list [--json]\\n\");\n this.write(\" napp info <app-id> [--json]\\n\");\n this.write(\" napp registry [get] [--json]\\n\");\n this.write(\" napp registry set <url> [--json]\\n\");\n this.write(\" napp registry reset [--json]\\n\");\n this.write(\" napp permissions <app-id> [--json]\\n\");\n this.write(\" napp grant <app-id> --document scope=/path [--json]\\n\");\n this.write(\" napp revoke <app-id> --document scope [--json]\\n\");\n this.write(\" napp --help\\n\");\n this.write(\" napp --version\\n\");\n };\n\n private write = (text: string): void => {\n process.stdout.write(text);\n };\n}\n"],"mappings":"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"}
@@ -77,4 +77,5 @@ declare class AppRuntimeOptionsService {
77
77
  private requireOptionValue;
78
78
  }
79
79
  //#endregion
80
- export { AppRuntimeOptionsService, BuildCliOptions, CreateCliOptions, GrantCliOptions, InstallCliOptions, JsonOnlyCliOptions, PackCliOptions, PublishCliOptions, RevokeCliOptions, RuntimeCliOptions, UninstallCliOptions, UpdateCliOptions };
80
+ export { AppRuntimeOptionsService, BuildCliOptions, CreateCliOptions, GrantCliOptions, InstallCliOptions, JsonOnlyCliOptions, PackCliOptions, PublishCliOptions, RevokeCliOptions, RuntimeCliOptions, UninstallCliOptions, UpdateCliOptions };
81
+ //# sourceMappingURL=app-runtime-options.service.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"app-runtime-options.service.d.ts","names":[],"sources":["../../src/cli/app-runtime-options.service.ts"],"mappings":";;;;;KAIY,iBAAA;EACV,IAAA;EACA,IAAA;EACA,aAAA;EACA,IAAA;EACA,gBAAA,EAAkB,mBAAA;AAAA;AAAA,KAGR,gBAAA;EACV,IAAA;EACA,QAAA,EAAU,mBAAA;AAAA;AAAA,KAGA,cAAA;EACV,IAAA;EACA,UAAA;EACA,IAAA,EAAM,mBAAA;AAAA;AAAA,KAGI,eAAA;EACV,IAAA;EACA,OAAA;AAAA;AAAA,KAGU,kBAAA;EACV,IAAA;AAAA;AAAA,KAGU,iBAAA;EACV,IAAA;EACA,WAAA;AAAA;AAAA,KAGU,gBAAA;EACV,IAAA;EACA,WAAA;EACA,OAAA;AAAA;AAAA,KAGU,mBAAA;EACV,IAAA;EACA,SAAA;AAAA;AAAA,KAGU,eAAA;EACV,IAAA;EACA,gBAAA,EAAkB,mBAAA;AAAA;AAAA,KAGR,gBAAA;EACV,IAAA;EACA,gBAAA;AAAA;AAAA,KAGU,iBAAA;EACV,IAAA;EACA,YAAA;EACA,UAAA;EACA,KAAA;EACA,IAAA,EAAM,mBAAA;AAAA;AAAA,cAGK,wBAAA;EACX,UAAA,GACE,OAAA,UACA,OAAA;IAEA,MAAA;IACA,UAAA;EAAA;EAYF,iBAAA,GAAqB,OAAA,eAAoB,gBAAA;EAAA,QA4BjC,kBAAA;EAOR,eAAA,GAAmB,OAAA,eAAoB,cAAA;EA8BvC,gBAAA,GAAoB,OAAA,eAAoB,eAAA;EAuBxC,mBAAA,GAAuB,OAAA,eAAoB,kBAAA;EAmB3C,kBAAA,GAAsB,OAAA,eAAoB,iBAAA;EAyB1C,iBAAA,GAAqB,OAAA,eAAoB,gBAAA;EA6BzC,oBAAA,GAAwB,OAAA,eAAoB,mBAAA;EAuB5C,kBAAA,GAAsB,OAAA,eAAoB,iBAAA;EAiD1C,gBAAA,GAAoB,OAAA,eAAoB,eAAA;EAgCxC,iBAAA,GAAqB,OAAA,eAAoB,gBAAA;EA+BzC,kBAAA,GAAsB,OAAA,eAAoB,iBAAA;EAAA,QAsClC,oBAAA;EAAA,QAOA,mBAAA;EAAA,QAgBA,mBAAA;EAAA,QAQA,kBAAA;AAAA"}
@@ -295,3 +295,5 @@ var AppRuntimeOptionsService = class {
295
295
  };
296
296
  //#endregion
297
297
  export { AppRuntimeOptionsService };
298
+
299
+ //# sourceMappingURL=app-runtime-options.service.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"app-runtime-options.service.js","names":[],"sources":["../../src/cli/app-runtime-options.service.ts"],"sourcesContent":["import type { AppDocumentGrantMap } from \"../permissions/app-permissions.types.js\";\nimport type { AppDistributionMode } from \"../bundle/app-bundle.types.js\";\nimport type { AppScaffoldTemplate } from \"../scaffold/app-scaffold.service.js\";\n\nexport type RuntimeCliOptions = {\n host: string;\n port: number;\n dataDirectory?: string;\n json: boolean;\n documentGrantMap: AppDocumentGrantMap;\n};\n\nexport type CreateCliOptions = {\n json: boolean;\n template: AppScaffoldTemplate;\n};\n\nexport type PackCliOptions = {\n json: boolean;\n outputPath?: string;\n mode: AppDistributionMode;\n};\n\nexport type BuildCliOptions = {\n json: boolean;\n install: boolean;\n};\n\nexport type JsonOnlyCliOptions = {\n json: boolean;\n};\n\nexport type InstallCliOptions = {\n json: boolean;\n registryUrl?: string;\n};\n\nexport type UpdateCliOptions = {\n json: boolean;\n registryUrl?: string;\n version?: string;\n};\n\nexport type UninstallCliOptions = {\n json: boolean;\n purgeData: boolean;\n};\n\nexport type GrantCliOptions = {\n json: boolean;\n documentGrantMap: AppDocumentGrantMap;\n};\n\nexport type RevokeCliOptions = {\n json: boolean;\n documentScopeIds: string[];\n};\n\nexport type PublishCliOptions = {\n json: boolean;\n metadataPath?: string;\n apiBaseUrl?: string;\n token?: string;\n mode: AppDistributionMode;\n};\n\nexport class AppRuntimeOptionsService {\n readTarget = (\n command: string,\n rawArgs: string[],\n ): {\n target: string;\n optionArgs: string[];\n } => {\n const [target, ...optionArgs] = rawArgs;\n if (!target || target.startsWith(\"--\")) {\n throw new Error(`${command} 缺少目标参数。`);\n }\n return {\n target,\n optionArgs,\n };\n };\n\n readCreateOptions = (rawArgs: string[]): CreateCliOptions => {\n const options: CreateCliOptions = {\n json: false,\n template: \"starter\",\n };\n\n for (let index = 0; index < rawArgs.length; index += 1) {\n const current = rawArgs[index];\n if (!current?.startsWith(\"--\")) {\n throw new Error(`未知参数:${current}`);\n }\n const nextValue = rawArgs[index + 1];\n switch (current) {\n case \"--json\":\n options.json = true;\n break;\n case \"--template\":\n options.template = this.readCreateTemplate(this.requireOptionValue(current, nextValue));\n index += 1;\n break;\n default:\n throw new Error(`未知参数:${current}`);\n }\n }\n\n return options;\n };\n\n private readCreateTemplate = (rawTemplate: string): AppScaffoldTemplate => {\n if (rawTemplate === \"starter\" || rawTemplate === \"ts-http\" || rawTemplate === \"ts-http-lite\") {\n return rawTemplate;\n }\n throw new Error(\"--template 只支持 starter、ts-http 或 ts-http-lite。\");\n };\n\n readPackOptions = (rawArgs: string[]): PackCliOptions => {\n const options: PackCliOptions = {\n json: false,\n mode: \"source\",\n };\n for (let index = 0; index < rawArgs.length; index += 1) {\n const current = rawArgs[index];\n if (!current?.startsWith(\"--\")) {\n throw new Error(`未知参数:${current}`);\n }\n const nextValue = rawArgs[index + 1];\n switch (current) {\n case \"--json\":\n options.json = true;\n break;\n case \"--out\":\n options.outputPath = this.requireOptionValue(current, nextValue);\n index += 1;\n break;\n case \"--mode\":\n options.mode = this.readDistributionMode(this.requireOptionValue(current, nextValue));\n index += 1;\n break;\n default:\n throw new Error(`未知参数:${current}`);\n }\n }\n return options;\n };\n\n readBuildOptions = (rawArgs: string[]): BuildCliOptions => {\n const options: BuildCliOptions = {\n json: false,\n install: false,\n };\n for (const current of rawArgs) {\n if (!current?.startsWith(\"--\")) {\n throw new Error(`未知参数:${current}`);\n }\n switch (current) {\n case \"--json\":\n options.json = true;\n break;\n case \"--install\":\n options.install = true;\n break;\n default:\n throw new Error(`未知参数:${current}`);\n }\n }\n return options;\n };\n\n readJsonOnlyOptions = (rawArgs: string[]): JsonOnlyCliOptions => {\n const options: JsonOnlyCliOptions = {\n json: false,\n };\n for (const current of rawArgs) {\n if (!current?.startsWith(\"--\")) {\n throw new Error(`未知参数:${current}`);\n }\n switch (current) {\n case \"--json\":\n options.json = true;\n break;\n default:\n throw new Error(`未知参数:${current}`);\n }\n }\n return options;\n };\n\n readInstallOptions = (rawArgs: string[]): InstallCliOptions => {\n const options: InstallCliOptions = {\n json: false,\n };\n for (let index = 0; index < rawArgs.length; index += 1) {\n const current = rawArgs[index];\n if (!current?.startsWith(\"--\")) {\n throw new Error(`未知参数:${current}`);\n }\n const nextValue = rawArgs[index + 1];\n switch (current) {\n case \"--json\":\n options.json = true;\n break;\n case \"--registry\":\n options.registryUrl = this.requireOptionValue(current, nextValue);\n index += 1;\n break;\n default:\n throw new Error(`未知参数:${current}`);\n }\n }\n return options;\n };\n\n readUpdateOptions = (rawArgs: string[]): UpdateCliOptions => {\n const options: UpdateCliOptions = {\n json: false,\n };\n for (let index = 0; index < rawArgs.length; index += 1) {\n const current = rawArgs[index];\n if (!current?.startsWith(\"--\")) {\n throw new Error(`未知参数:${current}`);\n }\n const nextValue = rawArgs[index + 1];\n switch (current) {\n case \"--json\":\n options.json = true;\n break;\n case \"--registry\":\n options.registryUrl = this.requireOptionValue(current, nextValue);\n index += 1;\n break;\n case \"--version\":\n options.version = this.requireOptionValue(current, nextValue);\n index += 1;\n break;\n default:\n throw new Error(`未知参数:${current}`);\n }\n }\n return options;\n };\n\n readUninstallOptions = (rawArgs: string[]): UninstallCliOptions => {\n const options: UninstallCliOptions = {\n json: false,\n purgeData: false,\n };\n for (const current of rawArgs) {\n if (!current?.startsWith(\"--\")) {\n throw new Error(`未知参数:${current}`);\n }\n switch (current) {\n case \"--json\":\n options.json = true;\n break;\n case \"--purge-data\":\n options.purgeData = true;\n break;\n default:\n throw new Error(`未知参数:${current}`);\n }\n }\n return options;\n };\n\n readRuntimeOptions = (rawArgs: string[]): RuntimeCliOptions => {\n const options: RuntimeCliOptions = {\n host: \"127.0.0.1\",\n port: 3100,\n dataDirectory: undefined,\n json: false,\n documentGrantMap: {},\n };\n\n for (let index = 0; index < rawArgs.length; index += 1) {\n const current = rawArgs[index];\n if (!current?.startsWith(\"--\")) {\n throw new Error(`未知参数:${current}`);\n }\n const nextValue = rawArgs[index + 1];\n switch (current) {\n case \"--host\":\n options.host = this.requireOptionValue(current, nextValue);\n index += 1;\n break;\n case \"--port\":\n options.port = Number.parseInt(this.requireOptionValue(current, nextValue), 10);\n if (Number.isNaN(options.port) || options.port < 0) {\n throw new Error(\"--port 必须是非负整数。\");\n }\n index += 1;\n break;\n case \"--json\":\n options.json = true;\n break;\n case \"--data\":\n options.dataDirectory = this.requireOptionValue(current, nextValue);\n index += 1;\n break;\n case \"--document\":\n this.assignDocumentGrant(\n options.documentGrantMap,\n this.requireOptionValue(current, nextValue),\n );\n index += 1;\n break;\n default:\n throw new Error(`未知参数:${current}`);\n }\n }\n\n return options;\n };\n\n readGrantOptions = (rawArgs: string[]): GrantCliOptions => {\n const options: GrantCliOptions = {\n json: false,\n documentGrantMap: {},\n };\n for (let index = 0; index < rawArgs.length; index += 1) {\n const current = rawArgs[index];\n if (!current?.startsWith(\"--\")) {\n throw new Error(`未知参数:${current}`);\n }\n const nextValue = rawArgs[index + 1];\n switch (current) {\n case \"--json\":\n options.json = true;\n break;\n case \"--document\":\n this.assignDocumentGrant(\n options.documentGrantMap,\n this.requireOptionValue(current, nextValue),\n );\n index += 1;\n break;\n default:\n throw new Error(`未知参数:${current}`);\n }\n }\n if (Object.keys(options.documentGrantMap).length === 0) {\n throw new Error(\"grant 至少需要一个 --document scope=/path。\");\n }\n return options;\n };\n\n readRevokeOptions = (rawArgs: string[]): RevokeCliOptions => {\n const options: RevokeCliOptions = {\n json: false,\n documentScopeIds: [],\n };\n for (let index = 0; index < rawArgs.length; index += 1) {\n const current = rawArgs[index];\n if (!current?.startsWith(\"--\")) {\n throw new Error(`未知参数:${current}`);\n }\n const nextValue = rawArgs[index + 1];\n switch (current) {\n case \"--json\":\n options.json = true;\n break;\n case \"--document\":\n options.documentScopeIds.push(\n this.readDocumentScopeId(this.requireOptionValue(current, nextValue)),\n );\n index += 1;\n break;\n default:\n throw new Error(`未知参数:${current}`);\n }\n }\n if (options.documentScopeIds.length === 0) {\n throw new Error(\"revoke 至少需要一个 --document scope。\");\n }\n return options;\n };\n\n readPublishOptions = (rawArgs: string[]): PublishCliOptions => {\n const options: PublishCliOptions = {\n json: false,\n mode: \"source\",\n };\n for (let index = 0; index < rawArgs.length; index += 1) {\n const current = rawArgs[index];\n if (!current?.startsWith(\"--\")) {\n throw new Error(`未知参数:${current}`);\n }\n const nextValue = rawArgs[index + 1];\n switch (current) {\n case \"--json\":\n options.json = true;\n break;\n case \"--meta\":\n options.metadataPath = this.requireOptionValue(current, nextValue);\n index += 1;\n break;\n case \"--api-base\":\n options.apiBaseUrl = this.requireOptionValue(current, nextValue);\n index += 1;\n break;\n case \"--token\":\n options.token = this.requireOptionValue(current, nextValue);\n index += 1;\n break;\n case \"--mode\":\n options.mode = this.readDistributionMode(this.requireOptionValue(current, nextValue));\n index += 1;\n break;\n default:\n throw new Error(`未知参数:${current}`);\n }\n }\n return options;\n };\n\n private readDistributionMode = (rawMode: string): AppDistributionMode => {\n if (rawMode === \"source\" || rawMode === \"bundle\") {\n return rawMode;\n }\n throw new Error(\"--mode 只支持 source 或 bundle。\");\n };\n\n private assignDocumentGrant = (\n documentGrantMap: AppDocumentGrantMap,\n rawGrant: string,\n ): void => {\n const delimiterIndex = rawGrant.indexOf(\"=\");\n if (delimiterIndex < 1) {\n throw new Error(\"--document 必须使用 scopeId=/absolute/or/relative/path 格式。\");\n }\n const scopeId = rawGrant.slice(0, delimiterIndex).trim();\n const directoryPath = rawGrant.slice(delimiterIndex + 1).trim();\n if (!scopeId || !directoryPath) {\n throw new Error(\"--document 缺少 scopeId 或 path。\");\n }\n documentGrantMap[scopeId] = directoryPath;\n };\n\n private readDocumentScopeId = (scopeId: string): string => {\n const normalized = scopeId.trim();\n if (!normalized || normalized.includes(\"=\")) {\n throw new Error(\"--document 必须使用 scopeId 格式。\");\n }\n return normalized;\n };\n\n private requireOptionValue = (flag: string, nextValue: string | undefined): string => {\n if (!nextValue || nextValue.startsWith(\"--\")) {\n throw new Error(`${flag} 缺少值。`);\n }\n return nextValue;\n };\n}\n"],"mappings":"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"}
@@ -12,4 +12,5 @@ declare class CreateCommand {
12
12
  }) => Promise<void>;
13
13
  }
14
14
  //#endregion
15
- export { CreateCommand };
15
+ export { CreateCommand };
16
+ //# sourceMappingURL=create.controller.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"create.controller.d.ts","names":[],"sources":["../../src/commands/create.controller.ts"],"mappings":";;;cAGa,aAAA;EAAA,iBAEQ,eAAA;cAAA,eAAA,GAAiB,kBAAA;EAGpC,GAAA,GAAa,MAAA;IACX,YAAA;IACA,QAAA,EAAU,mBAAA;IACV,IAAA;IACA,KAAA,GAAQ,IAAA;EAAA,MACN,OAAA;AAAA"}
@@ -22,3 +22,5 @@ var CreateCommand = class {
22
22
  };
23
23
  //#endregion
24
24
  export { CreateCommand };
25
+
26
+ //# sourceMappingURL=create.controller.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"create.controller.js","names":[],"sources":["../../src/commands/create.controller.ts"],"sourcesContent":["import { AppScaffoldService } from \"../scaffold/app-scaffold.service.js\";\nimport type { AppScaffoldTemplate } from \"../scaffold/app-scaffold.service.js\";\n\nexport class CreateCommand {\n constructor(\n private readonly scaffoldService: AppScaffoldService = new AppScaffoldService(),\n ) {}\n\n run = async (params: {\n appDirectory: string;\n template: AppScaffoldTemplate;\n json: boolean;\n write: (text: string) => void;\n }): Promise<void> => {\n const { appDirectory, template, json, write } = params;\n const result = await this.scaffoldService.scaffold(appDirectory, { template });\n if (json) {\n write(`${JSON.stringify({ ok: true, created: result }, null, 2)}\\n`);\n return;\n }\n write(`Created app scaffold at ${result.appDirectory}\\n`);\n write(`Template: ${result.template}\\n`);\n write(`Manifest: ${result.manifestPath}\\n`);\n write(\"Next: napp inspect <app-dir> && napp run <app-dir>\\n\");\n };\n}\n"],"mappings":";;AAGA,IAAa,gBAAb,MAA2B;CACzB,YACE,kBAAuD,IAAI,oBAAoB,EAC/E;AADiB,OAAA,kBAAA;;CAGnB,MAAM,OAAO,WAKQ;EACnB,MAAM,EAAE,cAAc,UAAU,MAAM,UAAU;EAChD,MAAM,SAAS,MAAM,KAAK,gBAAgB,SAAS,cAAc,EAAE,UAAU,CAAC;AAC9E,MAAI,MAAM;AACR,SAAM,GAAG,KAAK,UAAU;IAAE,IAAI;IAAM,SAAS;IAAQ,EAAE,MAAM,EAAE,CAAC,IAAI;AACpE;;AAEF,QAAM,2BAA2B,OAAO,aAAa,IAAI;AACzD,QAAM,aAAa,OAAO,SAAS,IAAI;AACvC,QAAM,aAAa,OAAO,aAAa,IAAI;AAC3C,QAAM,uDAAuD"}
@@ -10,3 +10,5 @@ var DevCommand = class {
10
10
  };
11
11
  //#endregion
12
12
  export { DevCommand };
13
+
14
+ //# sourceMappingURL=dev.controller.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dev.controller.js","names":[],"sources":["../../src/commands/dev.controller.ts"],"sourcesContent":["import { RunCommand, type RunCommandInput } from \"./run.controller.js\";\n\nexport class DevCommand {\n constructor(private readonly runCommand: RunCommand = new RunCommand()) {}\n\n run = async (params: RunCommandInput): Promise<void> => {\n await this.runCommand.run(params);\n };\n}\n"],"mappings":";;AAEA,IAAa,aAAb,MAAwB;CACtB,YAAY,aAA0C,IAAI,YAAY,EAAE;AAA3C,OAAA,aAAA;;CAE7B,MAAM,OAAO,WAA2C;AACtD,QAAM,KAAK,WAAW,IAAI,OAAO"}
@@ -13,4 +13,5 @@ declare class GrantCommand {
13
13
  }) => Promise<void>;
14
14
  }
15
15
  //#endregion
16
- export { GrantCommand };
16
+ export { GrantCommand };
17
+ //# sourceMappingURL=grant.controller.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"grant.controller.d.ts","names":[],"sources":["../../src/commands/grant.controller.ts"],"mappings":";;;;cAGa,YAAA;EAAA,iBAEQ,YAAA;cAAA,YAAA,GAAc,eAAA;EAGjC,GAAA,GAAa,MAAA;IACX,KAAA;IACA,gBAAA,EAAkB,mBAAA;IAClB,IAAA;IACA,KAAA,GAAQ,IAAA;EAAA,MACN,OAAA;AAAA"}
@@ -23,3 +23,5 @@ var GrantCommand = class {
23
23
  };
24
24
  //#endregion
25
25
  export { GrantCommand };
26
+
27
+ //# sourceMappingURL=grant.controller.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"grant.controller.js","names":[],"sources":["../../src/commands/grant.controller.ts"],"sourcesContent":["import { AppGrantService } from \"../permissions/app-grant.service.js\";\nimport type { AppDocumentGrantMap } from \"../permissions/app-permissions.types.js\";\n\nexport class GrantCommand {\n constructor(\n private readonly grantService: AppGrantService = new AppGrantService(),\n ) {}\n\n run = async (params: {\n appId: string;\n documentGrantMap: AppDocumentGrantMap;\n json: boolean;\n write: (text: string) => void;\n }): Promise<void> => {\n const { appId, documentGrantMap, json, write } = params;\n const results = await Promise.all(\n Object.entries(documentGrantMap).map(([scopeId, directoryPath]) =>\n this.grantService.grantDocumentScope({\n appId,\n scopeId,\n directoryPath,\n }),\n ),\n );\n if (json) {\n write(`${JSON.stringify({ ok: true, grants: results }, null, 2)}\\n`);\n return;\n }\n for (const result of results) {\n write(`Granted ${result.scopeId} -> ${result.grantedPath}\\n`);\n }\n };\n}\n"],"mappings":";;AAGA,IAAa,eAAb,MAA0B;CACxB,YACE,eAAiD,IAAI,iBAAiB,EACtE;AADiB,OAAA,eAAA;;CAGnB,MAAM,OAAO,WAKQ;EACnB,MAAM,EAAE,OAAO,kBAAkB,MAAM,UAAU;EACjD,MAAM,UAAU,MAAM,QAAQ,IAC5B,OAAO,QAAQ,iBAAiB,CAAC,KAAK,CAAC,SAAS,mBAC9C,KAAK,aAAa,mBAAmB;GACnC;GACA;GACA;GACD,CAAC,CACH,CACF;AACD,MAAI,MAAM;AACR,SAAM,GAAG,KAAK,UAAU;IAAE,IAAI;IAAM,QAAQ;IAAS,EAAE,MAAM,EAAE,CAAC,IAAI;AACpE;;AAEF,OAAK,MAAM,UAAU,QACnB,OAAM,WAAW,OAAO,QAAQ,MAAM,OAAO,YAAY,IAAI"}
@@ -11,4 +11,5 @@ declare class InfoCommand {
11
11
  }) => Promise<void>;
12
12
  }
13
13
  //#endregion
14
- export { InfoCommand };
14
+ export { InfoCommand };
15
+ //# sourceMappingURL=info.controller.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"info.controller.d.ts","names":[],"sources":["../../src/commands/info.controller.ts"],"mappings":";;;cAEa,WAAA;EAAA,iBAEQ,mBAAA;cAAA,mBAAA,GAAqB,sBAAA;EAGxC,GAAA,GAAa,MAAA;IACX,KAAA;IACA,IAAA;IACA,KAAA,GAAQ,IAAA;EAAA,MACN,OAAA;AAAA"}
@@ -25,3 +25,5 @@ var InfoCommand = class {
25
25
  };
26
26
  //#endregion
27
27
  export { InfoCommand };
28
+
29
+ //# sourceMappingURL=info.controller.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"info.controller.js","names":[],"sources":["../../src/commands/info.controller.ts"],"sourcesContent":["import { AppInstallationService } from \"../install/app-installation.service.js\";\n\nexport class InfoCommand {\n constructor(\n private readonly installationService: AppInstallationService = new AppInstallationService(),\n ) {}\n\n run = async (params: {\n appId: string;\n json: boolean;\n write: (text: string) => void;\n }): Promise<void> => {\n const { appId, json, write } = params;\n const result = await this.installationService.info(appId);\n if (json) {\n write(`${JSON.stringify({ ok: true, app: result }, null, 2)}\\n`);\n return;\n }\n write(`App: ${result.name} (${result.appId})\\n`);\n write(`Active version: ${result.activeVersion}\\n`);\n write(`Data: ${result.dataDirectory}\\n`);\n write(`Installed versions: ${result.installedVersions.map((item) => item.version).join(\", \")}\\n`);\n const activeVersion = result.installedVersions.find(\n (item) => item.version === result.activeVersion,\n );\n if (activeVersion?.registryUrl) {\n write(`Registry: ${activeVersion.registryUrl}\\n`);\n }\n if (activeVersion?.publisher) {\n write(`Publisher: ${activeVersion.publisher.name} (${activeVersion.publisher.id})\\n`);\n }\n };\n}\n"],"mappings":";;AAEA,IAAa,cAAb,MAAyB;CACvB,YACE,sBAA+D,IAAI,wBAAwB,EAC3F;AADiB,OAAA,sBAAA;;CAGnB,MAAM,OAAO,WAIQ;EACnB,MAAM,EAAE,OAAO,MAAM,UAAU;EAC/B,MAAM,SAAS,MAAM,KAAK,oBAAoB,KAAK,MAAM;AACzD,MAAI,MAAM;AACR,SAAM,GAAG,KAAK,UAAU;IAAE,IAAI;IAAM,KAAK;IAAQ,EAAE,MAAM,EAAE,CAAC,IAAI;AAChE;;AAEF,QAAM,QAAQ,OAAO,KAAK,IAAI,OAAO,MAAM,KAAK;AAChD,QAAM,mBAAmB,OAAO,cAAc,IAAI;AAClD,QAAM,SAAS,OAAO,cAAc,IAAI;AACxC,QAAM,uBAAuB,OAAO,kBAAkB,KAAK,SAAS,KAAK,QAAQ,CAAC,KAAK,KAAK,CAAC,IAAI;EACjG,MAAM,gBAAgB,OAAO,kBAAkB,MAC5C,SAAS,KAAK,YAAY,OAAO,cACnC;AACD,MAAI,eAAe,YACjB,OAAM,aAAa,cAAc,YAAY,IAAI;AAEnD,MAAI,eAAe,UACjB,OAAM,cAAc,cAAc,UAAU,KAAK,IAAI,cAAc,UAAU,GAAG,KAAK"}
@@ -25,3 +25,5 @@ var InspectCommand = class {
25
25
  };
26
26
  //#endregion
27
27
  export { InspectCommand };
28
+
29
+ //# sourceMappingURL=inspect.controller.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"inspect.controller.js","names":[],"sources":["../../src/commands/inspect.controller.ts"],"sourcesContent":["import { AppManifestService } from \"../manifest/app-manifest.service.js\";\n\nexport class InspectCommand {\n constructor(\n private readonly manifestService: AppManifestService = new AppManifestService(),\n ) {}\n\n run = async (params: {\n appDirectory: string;\n json: boolean;\n write: (text: string) => void;\n }): Promise<void> => {\n const { appDirectory, json, write } = params;\n const bundle = await this.manifestService.load(appDirectory);\n const summary = this.manifestService.summarize(bundle);\n if (json) {\n write(`${JSON.stringify({ ok: true, summary }, null, 2)}\\n`);\n return;\n }\n write(`App: ${summary.name} (${summary.id})\\n`);\n write(`Version: ${summary.version}\\n`);\n write(`Main Kind: ${summary.mainKind}\\n`);\n if (summary.action) {\n write(`Action: ${summary.action}\\n`);\n }\n write(`Main: ${summary.mainEntryPath}\\n`);\n write(`UI: ${summary.uiEntryPath}\\n`);\n };\n}\n"],"mappings":";;AAEA,IAAa,iBAAb,MAA4B;CAC1B,YACE,kBAAuD,IAAI,oBAAoB,EAC/E;AADiB,OAAA,kBAAA;;CAGnB,MAAM,OAAO,WAIQ;EACnB,MAAM,EAAE,cAAc,MAAM,UAAU;EACtC,MAAM,SAAS,MAAM,KAAK,gBAAgB,KAAK,aAAa;EAC5D,MAAM,UAAU,KAAK,gBAAgB,UAAU,OAAO;AACtD,MAAI,MAAM;AACR,SAAM,GAAG,KAAK,UAAU;IAAE,IAAI;IAAM;IAAS,EAAE,MAAM,EAAE,CAAC,IAAI;AAC5D;;AAEF,QAAM,QAAQ,QAAQ,KAAK,IAAI,QAAQ,GAAG,KAAK;AAC/C,QAAM,YAAY,QAAQ,QAAQ,IAAI;AACtC,QAAM,cAAc,QAAQ,SAAS,IAAI;AACzC,MAAI,QAAQ,OACV,OAAM,WAAW,QAAQ,OAAO,IAAI;AAEtC,QAAM,SAAS,QAAQ,cAAc,IAAI;AACzC,QAAM,OAAO,QAAQ,YAAY,IAAI"}
@@ -12,4 +12,5 @@ declare class InstallCommand {
12
12
  }) => Promise<void>;
13
13
  }
14
14
  //#endregion
15
- export { InstallCommand };
15
+ export { InstallCommand };
16
+ //# sourceMappingURL=install.controller.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"install.controller.d.ts","names":[],"sources":["../../src/commands/install.controller.ts"],"mappings":";;;cAEa,cAAA;EAAA,iBAEQ,mBAAA;cAAA,mBAAA,GAAqB,sBAAA;EAGxC,GAAA,GAAa,MAAA;IACX,SAAA;IACA,WAAA;IACA,IAAA;IACA,KAAA,GAAQ,IAAA;EAAA,MACN,OAAA;AAAA"}
@@ -22,3 +22,5 @@ var InstallCommand = class {
22
22
  };
23
23
  //#endregion
24
24
  export { InstallCommand };
25
+
26
+ //# sourceMappingURL=install.controller.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"install.controller.js","names":[],"sources":["../../src/commands/install.controller.ts"],"sourcesContent":["import { AppInstallationService } from \"../install/app-installation.service.js\";\n\nexport class InstallCommand {\n constructor(\n private readonly installationService: AppInstallationService = new AppInstallationService(),\n ) {}\n\n run = async (params: {\n appSource: string;\n registryUrl?: string;\n json: boolean;\n write: (text: string) => void;\n }): Promise<void> => {\n const { appSource, registryUrl, json, write } = params;\n const result = await this.installationService.install(appSource, {\n registryUrl,\n });\n if (json) {\n write(`${JSON.stringify({ ok: true, installation: result }, null, 2)}\\n`);\n return;\n }\n write(`Installed ${result.name} (${result.appId}) ${result.version}\\n`);\n write(`Code: ${result.installDirectory}\\n`);\n write(`Data: ${result.dataDirectory}\\n`);\n if (result.registryUrl) {\n write(`Registry: ${result.registryUrl}\\n`);\n }\n };\n}\n"],"mappings":";;AAEA,IAAa,iBAAb,MAA4B;CAC1B,YACE,sBAA+D,IAAI,wBAAwB,EAC3F;AADiB,OAAA,sBAAA;;CAGnB,MAAM,OAAO,WAKQ;EACnB,MAAM,EAAE,WAAW,aAAa,MAAM,UAAU;EAChD,MAAM,SAAS,MAAM,KAAK,oBAAoB,QAAQ,WAAW,EAC/D,aACD,CAAC;AACF,MAAI,MAAM;AACR,SAAM,GAAG,KAAK,UAAU;IAAE,IAAI;IAAM,cAAc;IAAQ,EAAE,MAAM,EAAE,CAAC,IAAI;AACzE;;AAEF,QAAM,aAAa,OAAO,KAAK,IAAI,OAAO,MAAM,IAAI,OAAO,QAAQ,IAAI;AACvE,QAAM,SAAS,OAAO,iBAAiB,IAAI;AAC3C,QAAM,SAAS,OAAO,cAAc,IAAI;AACxC,MAAI,OAAO,YACT,OAAM,aAAa,OAAO,YAAY,IAAI"}
@@ -10,4 +10,5 @@ declare class ListCommand {
10
10
  }) => Promise<void>;
11
11
  }
12
12
  //#endregion
13
- export { ListCommand };
13
+ export { ListCommand };
14
+ //# sourceMappingURL=list.controller.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"list.controller.d.ts","names":[],"sources":["../../src/commands/list.controller.ts"],"mappings":";;;cAEa,WAAA;EAAA,iBAEQ,mBAAA;cAAA,mBAAA,GAAqB,sBAAA;EAGxC,GAAA,GAAa,MAAA;IACX,IAAA;IACA,KAAA,GAAQ,IAAA;EAAA,MACN,OAAA;AAAA"}
@@ -23,3 +23,5 @@ var ListCommand = class {
23
23
  };
24
24
  //#endregion
25
25
  export { ListCommand };
26
+
27
+ //# sourceMappingURL=list.controller.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"list.controller.js","names":[],"sources":["../../src/commands/list.controller.ts"],"sourcesContent":["import { AppInstallationService } from \"../install/app-installation.service.js\";\n\nexport class ListCommand {\n constructor(\n private readonly installationService: AppInstallationService = new AppInstallationService(),\n ) {}\n\n run = async (params: {\n json: boolean;\n write: (text: string) => void;\n }): Promise<void> => {\n const { json, write } = params;\n const result = await this.installationService.list();\n if (json) {\n write(`${JSON.stringify({ ok: true, apps: result }, null, 2)}\\n`);\n return;\n }\n if (result.length === 0) {\n write(\"No installed apps.\\n\");\n return;\n }\n for (const appItem of result) {\n write(`${appItem.appId} ${appItem.activeVersion} ${appItem.sourceKind} ${appItem.name}\\n`);\n }\n };\n}\n"],"mappings":";;AAEA,IAAa,cAAb,MAAyB;CACvB,YACE,sBAA+D,IAAI,wBAAwB,EAC3F;AADiB,OAAA,sBAAA;;CAGnB,MAAM,OAAO,WAGQ;EACnB,MAAM,EAAE,MAAM,UAAU;EACxB,MAAM,SAAS,MAAM,KAAK,oBAAoB,MAAM;AACpD,MAAI,MAAM;AACR,SAAM,GAAG,KAAK,UAAU;IAAE,IAAI;IAAM,MAAM;IAAQ,EAAE,MAAM,EAAE,CAAC,IAAI;AACjE;;AAEF,MAAI,OAAO,WAAW,GAAG;AACvB,SAAM,uBAAuB;AAC7B;;AAEF,OAAK,MAAM,WAAW,OACpB,OAAM,GAAG,QAAQ,MAAM,GAAG,QAAQ,cAAc,GAAG,QAAQ,WAAW,GAAG,QAAQ,KAAK,IAAI"}
@@ -13,4 +13,5 @@ declare class PackCommand {
13
13
  }) => Promise<void>;
14
14
  }
15
15
  //#endregion
16
- export { PackCommand };
16
+ export { PackCommand };
17
+ //# sourceMappingURL=pack.controller.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pack.controller.d.ts","names":[],"sources":["../../src/commands/pack.controller.ts"],"mappings":";;;cAEa,WAAA;EAAA,iBAEQ,aAAA;cAAA,aAAA,GAAe,gBAAA;EAGlC,GAAA,GAAa,MAAA;IACX,YAAA;IACA,UAAA;IACA,IAAA;IACA,IAAA;IACA,KAAA,GAAQ,IAAA;EAAA,MACN,OAAA;AAAA"}
@@ -24,3 +24,5 @@ var PackCommand = class {
24
24
  };
25
25
  //#endregion
26
26
  export { PackCommand };
27
+
28
+ //# sourceMappingURL=pack.controller.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pack.controller.js","names":[],"sources":["../../src/commands/pack.controller.ts"],"sourcesContent":["import { AppBundleService } from \"../bundle/app-bundle.service.js\";\n\nexport class PackCommand {\n constructor(\n private readonly bundleService: AppBundleService = new AppBundleService(),\n ) {}\n\n run = async (params: {\n appDirectory: string;\n outputPath?: string;\n mode: \"source\" | \"bundle\";\n json: boolean;\n write: (text: string) => void;\n }): Promise<void> => {\n const { appDirectory, outputPath, mode, json, write } = params;\n const result = await this.bundleService.packAppDirectory({\n appDirectory,\n outputPath,\n mode,\n });\n if (json) {\n write(`${JSON.stringify({ ok: true, bundle: result }, null, 2)}\\n`);\n return;\n }\n write(`Packed ${result.metadata.name} ${result.metadata.version} (${result.metadata.distributionMode})\\n`);\n write(`Bundle: ${result.bundlePath}\\n`);\n };\n}\n"],"mappings":";;AAEA,IAAa,cAAb,MAAyB;CACvB,YACE,gBAAmD,IAAI,kBAAkB,EACzE;AADiB,OAAA,gBAAA;;CAGnB,MAAM,OAAO,WAMQ;EACnB,MAAM,EAAE,cAAc,YAAY,MAAM,MAAM,UAAU;EACxD,MAAM,SAAS,MAAM,KAAK,cAAc,iBAAiB;GACvD;GACA;GACA;GACD,CAAC;AACF,MAAI,MAAM;AACR,SAAM,GAAG,KAAK,UAAU;IAAE,IAAI;IAAM,QAAQ;IAAQ,EAAE,MAAM,EAAE,CAAC,IAAI;AACnE;;AAEF,QAAM,UAAU,OAAO,SAAS,KAAK,GAAG,OAAO,SAAS,QAAQ,IAAI,OAAO,SAAS,iBAAiB,KAAK;AAC1G,QAAM,WAAW,OAAO,WAAW,IAAI"}
@@ -11,4 +11,5 @@ declare class PermissionsCommand {
11
11
  }) => Promise<void>;
12
12
  }
13
13
  //#endregion
14
- export { PermissionsCommand };
14
+ export { PermissionsCommand };
15
+ //# sourceMappingURL=permissions.controller.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"permissions.controller.d.ts","names":[],"sources":["../../src/commands/permissions.controller.ts"],"mappings":";;;cAEa,kBAAA;EAAA,iBAEQ,YAAA;cAAA,YAAA,GAAc,eAAA;EAGjC,GAAA,GAAa,MAAA;IACX,KAAA;IACA,IAAA;IACA,KAAA,GAAQ,IAAA;EAAA,MACN,OAAA;AAAA"}
@@ -24,3 +24,5 @@ var PermissionsCommand = class {
24
24
  };
25
25
  //#endregion
26
26
  export { PermissionsCommand };
27
+
28
+ //# sourceMappingURL=permissions.controller.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"permissions.controller.js","names":[],"sources":["../../src/commands/permissions.controller.ts"],"sourcesContent":["import { AppGrantService } from \"../permissions/app-grant.service.js\";\n\nexport class PermissionsCommand {\n constructor(\n private readonly grantService: AppGrantService = new AppGrantService(),\n ) {}\n\n run = async (params: {\n appId: string;\n json: boolean;\n write: (text: string) => void;\n }): Promise<void> => {\n const { appId, json, write } = params;\n const result = await this.grantService.summarize(appId);\n if (json) {\n write(`${JSON.stringify({ ok: true, permissions: result }, null, 2)}\\n`);\n return;\n }\n write(`Permissions: ${result.name} (${result.appId}) ${result.activeVersion}\\n`);\n if (result.documentAccess.length === 0) {\n write(\"Document access: none\\n\");\n } else {\n for (const scope of result.documentAccess) {\n write(\n `Document ${scope.id} ${scope.mode} ${scope.granted ? scope.grantedPath : \"[missing]\"}\\n`,\n );\n }\n }\n write(\n `Allowed domains: ${result.allowedDomains.length > 0 ? result.allowedDomains.join(\", \") : \"none\"}\\n`,\n );\n write(`Storage: ${result.storage.enabled ? result.storage.namespace ?? \"enabled\" : \"disabled\"}\\n`);\n write(`Host bridge: ${result.capabilities.hostBridge ? \"enabled\" : \"disabled\"}\\n`);\n };\n}\n"],"mappings":";;AAEA,IAAa,qBAAb,MAAgC;CAC9B,YACE,eAAiD,IAAI,iBAAiB,EACtE;AADiB,OAAA,eAAA;;CAGnB,MAAM,OAAO,WAIQ;EACnB,MAAM,EAAE,OAAO,MAAM,UAAU;EAC/B,MAAM,SAAS,MAAM,KAAK,aAAa,UAAU,MAAM;AACvD,MAAI,MAAM;AACR,SAAM,GAAG,KAAK,UAAU;IAAE,IAAI;IAAM,aAAa;IAAQ,EAAE,MAAM,EAAE,CAAC,IAAI;AACxE;;AAEF,QAAM,gBAAgB,OAAO,KAAK,IAAI,OAAO,MAAM,IAAI,OAAO,cAAc,IAAI;AAChF,MAAI,OAAO,eAAe,WAAW,EACnC,OAAM,0BAA0B;MAEhC,MAAK,MAAM,SAAS,OAAO,eACzB,OACE,YAAY,MAAM,GAAG,GAAG,MAAM,KAAK,GAAG,MAAM,UAAU,MAAM,cAAc,YAAY,IACvF;AAGL,QACE,oBAAoB,OAAO,eAAe,SAAS,IAAI,OAAO,eAAe,KAAK,KAAK,GAAG,OAAO,IAClG;AACD,QAAM,YAAY,OAAO,QAAQ,UAAU,OAAO,QAAQ,aAAa,YAAY,WAAW,IAAI;AAClG,QAAM,gBAAgB,OAAO,aAAa,aAAa,YAAY,WAAW,IAAI"}
@@ -15,4 +15,5 @@ declare class PublishCommand {
15
15
  }) => Promise<void>;
16
16
  }
17
17
  //#endregion
18
- export { PublishCommand };
18
+ export { PublishCommand };
19
+ //# sourceMappingURL=publish.controller.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"publish.controller.d.ts","names":[],"sources":["../../src/commands/publish.controller.ts"],"mappings":";;;cAEa,cAAA;EAAA,iBAEQ,cAAA;cAAA,cAAA,GAAgB,iBAAA;EAGnC,GAAA,GAAa,MAAA;IACX,YAAA;IACA,YAAA;IACA,UAAA;IACA,KAAA;IACA,IAAA;IACA,IAAA;IACA,KAAA,GAAQ,IAAA;EAAA,MACN,OAAA;AAAA"}
@@ -28,3 +28,5 @@ var PublishCommand = class {
28
28
  };
29
29
  //#endregion
30
30
  export { PublishCommand };
31
+
32
+ //# sourceMappingURL=publish.controller.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"publish.controller.js","names":[],"sources":["../../src/commands/publish.controller.ts"],"sourcesContent":["import { AppPublishService } from \"../publish/app-publish.service.js\";\n\nexport class PublishCommand {\n constructor(\n private readonly publishService: AppPublishService = new AppPublishService(),\n ) {}\n\n run = async (params: {\n appDirectory: string;\n metadataPath?: string;\n apiBaseUrl?: string;\n token?: string;\n mode: \"source\" | \"bundle\";\n json: boolean;\n write: (text: string) => void;\n }): Promise<void> => {\n const { appDirectory, metadataPath, apiBaseUrl, token, mode, json, write } = params;\n const result = await this.publishService.publish({\n appDirectory,\n metadataPath,\n apiBaseUrl,\n token,\n mode,\n });\n if (json) {\n write(`${JSON.stringify({ ok: true, publish: result }, null, 2)}\\n`);\n return;\n }\n write(\n `${result.created ? \"Published\" : \"Updated\"} ${result.item.name} (${result.item.appId}) ${result.item.latestVersion}\\n`,\n );\n write(`Distribution: ${result.distribution.path} (${result.distribution.mode})\\n`);\n if (result.item.webUrl) {\n write(`Details: ${result.item.webUrl}\\n`);\n }\n write(`Install: ${result.item.install.command}\\n`);\n };\n}\n"],"mappings":";;AAEA,IAAa,iBAAb,MAA4B;CAC1B,YACE,iBAAqD,IAAI,mBAAmB,EAC5E;AADiB,OAAA,iBAAA;;CAGnB,MAAM,OAAO,WAQQ;EACnB,MAAM,EAAE,cAAc,cAAc,YAAY,OAAO,MAAM,MAAM,UAAU;EAC7E,MAAM,SAAS,MAAM,KAAK,eAAe,QAAQ;GAC/C;GACA;GACA;GACA;GACA;GACD,CAAC;AACF,MAAI,MAAM;AACR,SAAM,GAAG,KAAK,UAAU;IAAE,IAAI;IAAM,SAAS;IAAQ,EAAE,MAAM,EAAE,CAAC,IAAI;AACpE;;AAEF,QACE,GAAG,OAAO,UAAU,cAAc,UAAU,GAAG,OAAO,KAAK,KAAK,IAAI,OAAO,KAAK,MAAM,IAAI,OAAO,KAAK,cAAc,IACrH;AACD,QAAM,iBAAiB,OAAO,aAAa,KAAK,IAAI,OAAO,aAAa,KAAK,KAAK;AAClF,MAAI,OAAO,KAAK,OACd,OAAM,YAAY,OAAO,KAAK,OAAO,IAAI;AAE3C,QAAM,YAAY,OAAO,KAAK,QAAQ,QAAQ,IAAI"}
@@ -13,4 +13,5 @@ declare class RegistryCommand {
13
13
  private requireRegistryUrl;
14
14
  }
15
15
  //#endregion
16
- export { RegistryCommand };
16
+ export { RegistryCommand };
17
+ //# sourceMappingURL=registry.controller.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"registry.controller.d.ts","names":[],"sources":["../../src/commands/registry.controller.ts"],"mappings":";;;cAEa,eAAA;EAAA,iBAEQ,aAAA;cAAA,aAAA,GAAe,wBAAA;EAGlC,GAAA,GAAa,MAAA;IACX,MAAA;IACA,WAAA;IACA,IAAA;IACA,KAAA,GAAQ,IAAA;EAAA,MACN,OAAA;EAAA,QAiBI,kBAAA;AAAA"}
@@ -25,3 +25,5 @@ var RegistryCommand = class {
25
25
  };
26
26
  //#endregion
27
27
  export { RegistryCommand };
28
+
29
+ //# sourceMappingURL=registry.controller.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"registry.controller.js","names":[],"sources":["../../src/commands/registry.controller.ts"],"sourcesContent":["import { AppRegistryConfigService } from \"../registry/app-registry-config.service.js\";\n\nexport class RegistryCommand {\n constructor(\n private readonly configService: AppRegistryConfigService = new AppRegistryConfigService(),\n ) {}\n\n run = async (params: {\n action: \"get\" | \"set\" | \"reset\";\n registryUrl?: string;\n json: boolean;\n write: (text: string) => void;\n }): Promise<void> => {\n const { action, registryUrl, json, write } = params;\n const snapshot =\n action === \"set\"\n ? await this.configService.setRegistryUrl(this.requireRegistryUrl(registryUrl))\n : action === \"reset\"\n ? await this.configService.resetRegistryUrl()\n : await this.configService.getSnapshot();\n if (json) {\n write(`${JSON.stringify({ ok: true, registry: snapshot }, null, 2)}\\n`);\n return;\n }\n write(`Registry: ${snapshot.currentUrl}\\n`);\n write(`Source: ${snapshot.source}\\n`);\n write(`Default: ${snapshot.defaultUrl}\\n`);\n };\n\n private requireRegistryUrl = (registryUrl: string | undefined): string => {\n if (!registryUrl) {\n throw new Error(\"registry set 缺少 URL。\");\n }\n return registryUrl;\n };\n}\n"],"mappings":";;AAEA,IAAa,kBAAb,MAA6B;CAC3B,YACE,gBAA2D,IAAI,0BAA0B,EACzF;AADiB,OAAA,gBAAA;;CAGnB,MAAM,OAAO,WAKQ;EACnB,MAAM,EAAE,QAAQ,aAAa,MAAM,UAAU;EAC7C,MAAM,WACJ,WAAW,QACP,MAAM,KAAK,cAAc,eAAe,KAAK,mBAAmB,YAAY,CAAC,GAC7E,WAAW,UACT,MAAM,KAAK,cAAc,kBAAkB,GAC3C,MAAM,KAAK,cAAc,aAAa;AAC9C,MAAI,MAAM;AACR,SAAM,GAAG,KAAK,UAAU;IAAE,IAAI;IAAM,UAAU;IAAU,EAAE,MAAM,EAAE,CAAC,IAAI;AACvE;;AAEF,QAAM,aAAa,SAAS,WAAW,IAAI;AAC3C,QAAM,WAAW,SAAS,OAAO,IAAI;AACrC,QAAM,YAAY,SAAS,WAAW,IAAI;;CAG5C,sBAA8B,gBAA4C;AACxE,MAAI,CAAC,YACH,OAAM,IAAI,MAAM,uBAAuB;AAEzC,SAAO"}
@@ -12,4 +12,5 @@ declare class RevokeCommand {
12
12
  }) => Promise<void>;
13
13
  }
14
14
  //#endregion
15
- export { RevokeCommand };
15
+ export { RevokeCommand };
16
+ //# sourceMappingURL=revoke.controller.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"revoke.controller.d.ts","names":[],"sources":["../../src/commands/revoke.controller.ts"],"mappings":";;;cAEa,aAAA;EAAA,iBAEQ,YAAA;cAAA,YAAA,GAAc,eAAA;EAGjC,GAAA,GAAa,MAAA;IACX,KAAA;IACA,gBAAA;IACA,IAAA;IACA,KAAA,GAAQ,IAAA;EAAA,MACN,OAAA;AAAA"}
@@ -22,3 +22,5 @@ var RevokeCommand = class {
22
22
  };
23
23
  //#endregion
24
24
  export { RevokeCommand };
25
+
26
+ //# sourceMappingURL=revoke.controller.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"revoke.controller.js","names":[],"sources":["../../src/commands/revoke.controller.ts"],"sourcesContent":["import { AppGrantService } from \"../permissions/app-grant.service.js\";\n\nexport class RevokeCommand {\n constructor(\n private readonly grantService: AppGrantService = new AppGrantService(),\n ) {}\n\n run = async (params: {\n appId: string;\n documentScopeIds: string[];\n json: boolean;\n write: (text: string) => void;\n }): Promise<void> => {\n const { appId, documentScopeIds, json, write } = params;\n const results = await Promise.all(\n documentScopeIds.map((scopeId) =>\n this.grantService.revokeDocumentScope({\n appId,\n scopeId,\n }),\n ),\n );\n if (json) {\n write(`${JSON.stringify({ ok: true, revocations: results }, null, 2)}\\n`);\n return;\n }\n for (const result of results) {\n write(`Revoked ${result.scopeId}: ${result.removed ? \"yes\" : \"no\"}\\n`);\n }\n };\n}\n"],"mappings":";;AAEA,IAAa,gBAAb,MAA2B;CACzB,YACE,eAAiD,IAAI,iBAAiB,EACtE;AADiB,OAAA,eAAA;;CAGnB,MAAM,OAAO,WAKQ;EACnB,MAAM,EAAE,OAAO,kBAAkB,MAAM,UAAU;EACjD,MAAM,UAAU,MAAM,QAAQ,IAC5B,iBAAiB,KAAK,YACpB,KAAK,aAAa,oBAAoB;GACpC;GACA;GACD,CAAC,CACH,CACF;AACD,MAAI,MAAM;AACR,SAAM,GAAG,KAAK,UAAU;IAAE,IAAI;IAAM,aAAa;IAAS,EAAE,MAAM,EAAE,CAAC,IAAI;AACzE;;AAEF,OAAK,MAAM,UAAU,QACnB,OAAM,WAAW,OAAO,QAAQ,IAAI,OAAO,UAAU,QAAQ,KAAK,IAAI"}
@@ -64,3 +64,5 @@ var RunCommand = class {
64
64
  };
65
65
  //#endregion
66
66
  export { RunCommand };
67
+
68
+ //# sourceMappingURL=run.controller.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"run.controller.js","names":[],"sources":["../../src/commands/run.controller.ts"],"sourcesContent":["import { AppHostService } from \"../host/app-host.service.js\";\nimport { AppInstanceService } from \"../host/app-instance.service.js\";\nimport { AppInstallationService } from \"../install/app-installation.service.js\";\nimport { AppManifestService } from \"../manifest/app-manifest.service.js\";\nimport type { AppDocumentGrantMap } from \"../permissions/app-permissions.types.js\";\nimport { WasmtimeWasiHttpComponentService } from \"../runtime/wasmtime-wasi-http-component.service.js\";\n\nexport type RunCommandInput = {\n appReference: string;\n host: string;\n port: number;\n dataDirectory?: string;\n json: boolean;\n documentGrantMap: AppDocumentGrantMap;\n write: (text: string) => void;\n};\n\nexport class RunCommand {\n constructor(\n private readonly manifestService: AppManifestService = new AppManifestService(),\n private readonly installationService: AppInstallationService = new AppInstallationService(),\n ) {}\n\n run = async (params: RunCommandInput): Promise<void> => {\n const { appReference, host, port, dataDirectory, json, documentGrantMap, write } = params;\n const launch = await this.installationService.resolveLaunch(appReference, documentGrantMap);\n const bundle = await this.manifestService.load(launch.appDirectory);\n const appInstance = new AppInstanceService(bundle);\n await appInstance.initialize(launch.documentGrantMap, {\n appId: launch.appId,\n });\n await this.installationService.persistGrants(launch.appId, launch.documentGrantMap);\n const wasiHttpComponentService =\n bundle.manifest.main.kind === \"wasi-http-component\"\n ? new WasmtimeWasiHttpComponentService()\n : undefined;\n const effectiveDataDirectory = dataDirectory ?? launch.dataDirectory;\n if (wasiHttpComponentService) {\n if (!effectiveDataDirectory) {\n throw new Error(\"wasi-http-component 应用需要通过 --data /path 指定后端数据目录。\");\n }\n await wasiHttpComponentService.start({\n wasmPath: bundle.mainEntryPath,\n dataDirectory: effectiveDataDirectory,\n });\n }\n const appHost = new AppHostService(appInstance, wasiHttpComponentService);\n let hostHandle: Awaited<ReturnType<AppHostService[\"start\"]>>;\n try {\n hostHandle = await appHost.start({\n host,\n port,\n });\n } catch (error) {\n await wasiHttpComponentService?.stop();\n throw error;\n }\n\n const shutdown = async (): Promise<void> => {\n await appHost.stop();\n await wasiHttpComponentService?.stop();\n process.exit(0);\n };\n\n process.once(\"SIGINT\", () => {\n void shutdown();\n });\n process.once(\"SIGTERM\", () => {\n void shutdown();\n });\n\n if (json) {\n write(\n `${JSON.stringify(\n {\n ok: true,\n host: hostHandle,\n app: {\n appId: launch.appId ?? bundle.manifest.id,\n appDirectory: launch.appDirectory,\n dataDirectory: effectiveDataDirectory,\n },\n },\n null,\n 2,\n )}\\n`,\n );\n return;\n }\n\n write(`[napp] ${bundle.manifest.name} listening on ${hostHandle.url}\\n`);\n };\n}\n"],"mappings":";;;;;;AAiBA,IAAa,aAAb,MAAwB;CACtB,YACE,kBAAuD,IAAI,oBAAoB,EAC/E,sBAA+D,IAAI,wBAAwB,EAC3F;AAFiB,OAAA,kBAAA;AACA,OAAA,sBAAA;;CAGnB,MAAM,OAAO,WAA2C;EACtD,MAAM,EAAE,cAAc,MAAM,MAAM,eAAe,MAAM,kBAAkB,UAAU;EACnF,MAAM,SAAS,MAAM,KAAK,oBAAoB,cAAc,cAAc,iBAAiB;EAC3F,MAAM,SAAS,MAAM,KAAK,gBAAgB,KAAK,OAAO,aAAa;EACnE,MAAM,cAAc,IAAI,mBAAmB,OAAO;AAClD,QAAM,YAAY,WAAW,OAAO,kBAAkB,EACpD,OAAO,OAAO,OACf,CAAC;AACF,QAAM,KAAK,oBAAoB,cAAc,OAAO,OAAO,OAAO,iBAAiB;EACnF,MAAM,2BACJ,OAAO,SAAS,KAAK,SAAS,wBAC1B,IAAI,kCAAkC,GACtC,KAAA;EACN,MAAM,yBAAyB,iBAAiB,OAAO;AACvD,MAAI,0BAA0B;AAC5B,OAAI,CAAC,uBACH,OAAM,IAAI,MAAM,oDAAoD;AAEtE,SAAM,yBAAyB,MAAM;IACnC,UAAU,OAAO;IACjB,eAAe;IAChB,CAAC;;EAEJ,MAAM,UAAU,IAAI,eAAe,aAAa,yBAAyB;EACzE,IAAI;AACJ,MAAI;AACF,gBAAa,MAAM,QAAQ,MAAM;IAC/B;IACA;IACD,CAAC;WACK,OAAO;AACd,SAAM,0BAA0B,MAAM;AACtC,SAAM;;EAGR,MAAM,WAAW,YAA2B;AAC1C,SAAM,QAAQ,MAAM;AACpB,SAAM,0BAA0B,MAAM;AACtC,WAAQ,KAAK,EAAE;;AAGjB,UAAQ,KAAK,gBAAgB;AACtB,aAAU;IACf;AACF,UAAQ,KAAK,iBAAiB;AACvB,aAAU;IACf;AAEF,MAAI,MAAM;AACR,SACE,GAAG,KAAK,UACN;IACE,IAAI;IACJ,MAAM;IACN,KAAK;KACH,OAAO,OAAO,SAAS,OAAO,SAAS;KACvC,cAAc,OAAO;KACrB,eAAe;KAChB;IACF,EACD,MACA,EACD,CAAC,IACH;AACD;;AAGF,QAAM,UAAU,OAAO,SAAS,KAAK,gBAAgB,WAAW,IAAI,IAAI"}
@@ -12,4 +12,5 @@ declare class UninstallCommand {
12
12
  }) => Promise<void>;
13
13
  }
14
14
  //#endregion
15
- export { UninstallCommand };
15
+ export { UninstallCommand };
16
+ //# sourceMappingURL=uninstall.controller.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"uninstall.controller.d.ts","names":[],"sources":["../../src/commands/uninstall.controller.ts"],"mappings":";;;cAEa,gBAAA;EAAA,iBAEQ,mBAAA;cAAA,mBAAA,GAAqB,sBAAA;EAGxC,GAAA,GAAa,MAAA;IACX,KAAA;IACA,SAAA;IACA,IAAA;IACA,KAAA,GAAQ,IAAA;EAAA,MACN,OAAA;AAAA"}
@@ -21,3 +21,5 @@ var UninstallCommand = class {
21
21
  };
22
22
  //#endregion
23
23
  export { UninstallCommand };
24
+
25
+ //# sourceMappingURL=uninstall.controller.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"uninstall.controller.js","names":[],"sources":["../../src/commands/uninstall.controller.ts"],"sourcesContent":["import { AppInstallationService } from \"../install/app-installation.service.js\";\n\nexport class UninstallCommand {\n constructor(\n private readonly installationService: AppInstallationService = new AppInstallationService(),\n ) {}\n\n run = async (params: {\n appId: string;\n purgeData: boolean;\n json: boolean;\n write: (text: string) => void;\n }): Promise<void> => {\n const { appId, purgeData, json, write } = params;\n const result = await this.installationService.uninstall(appId, purgeData);\n if (json) {\n write(`${JSON.stringify({ ok: true, uninstall: result }, null, 2)}\\n`);\n return;\n }\n write(`Uninstalled ${result.appId}\\n`);\n write(`Versions: ${result.removedVersions.join(\", \")}\\n`);\n write(`Data removed: ${result.dataRemoved ? \"yes\" : \"no\"}\\n`);\n };\n}\n"],"mappings":";;AAEA,IAAa,mBAAb,MAA8B;CAC5B,YACE,sBAA+D,IAAI,wBAAwB,EAC3F;AADiB,OAAA,sBAAA;;CAGnB,MAAM,OAAO,WAKQ;EACnB,MAAM,EAAE,OAAO,WAAW,MAAM,UAAU;EAC1C,MAAM,SAAS,MAAM,KAAK,oBAAoB,UAAU,OAAO,UAAU;AACzE,MAAI,MAAM;AACR,SAAM,GAAG,KAAK,UAAU;IAAE,IAAI;IAAM,WAAW;IAAQ,EAAE,MAAM,EAAE,CAAC,IAAI;AACtE;;AAEF,QAAM,eAAe,OAAO,MAAM,IAAI;AACtC,QAAM,aAAa,OAAO,gBAAgB,KAAK,KAAK,CAAC,IAAI;AACzD,QAAM,iBAAiB,OAAO,cAAc,QAAQ,KAAK,IAAI"}