@powerhousedao/ph-cli 6.0.0-dev.235 → 6.0.0-dev.236

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 (56) hide show
  1. package/dist/{assign-env-vars-DZMMuzB2.mjs → assign-env-vars-W-lZmdMi.mjs} +1 -1
  2. package/dist/{assign-env-vars-DZMMuzB2.mjs.map → assign-env-vars-W-lZmdMi.mjs.map} +1 -1
  3. package/dist/{auth-Ch5B5mNU.mjs → auth-AR3VxAIk.mjs} +1 -1
  4. package/dist/{auth-Ch5B5mNU.mjs.map → auth-AR3VxAIk.mjs.map} +1 -1
  5. package/dist/auth-BNkN6kS9.mjs +2 -0
  6. package/dist/{build-DCXpFtjA.mjs → build-CYAQMjy1.mjs} +1 -1
  7. package/dist/{build-DCXpFtjA.mjs.map → build-CYAQMjy1.mjs.map} +1 -1
  8. package/dist/build-DzxGiqu2.mjs +2 -0
  9. package/dist/cli.mjs +248 -47
  10. package/dist/cli.mjs.map +1 -1
  11. package/dist/{connect-build-6yhCIKkQ.mjs → connect-build-BIvwnJ8o.mjs} +3 -3
  12. package/dist/{connect-build-6yhCIKkQ.mjs.map → connect-build-BIvwnJ8o.mjs.map} +1 -1
  13. package/dist/{connect-preview-CaEiWmqU.mjs → connect-preview-CNJkhtxL.mjs} +2 -2
  14. package/dist/{connect-preview-CaEiWmqU.mjs.map → connect-preview-CNJkhtxL.mjs.map} +1 -1
  15. package/dist/{connect-studio-BaqbrWYQ.mjs → connect-studio-DTdSFftL.mjs} +2 -2
  16. package/dist/{connect-studio-BaqbrWYQ.mjs.map → connect-studio-DTdSFftL.mjs.map} +1 -1
  17. package/dist/connect-studio-DySbZFEc.mjs +3 -0
  18. package/dist/{generate-all-DaXXjoms.mjs → generate-all-Cj8zjFhN.mjs} +1 -1
  19. package/dist/{generate-all-DaXXjoms.mjs.map → generate-all-Cj8zjFhN.mjs.map} +1 -1
  20. package/dist/{generate-app-GvQeAG4w.mjs → generate-app-KE0rbE-b.mjs} +1 -1
  21. package/dist/{generate-app-GvQeAG4w.mjs.map → generate-app-KE0rbE-b.mjs.map} +1 -1
  22. package/dist/{generate-document-model-Dnik0rKd.mjs → generate-document-model-Cut44i6D.mjs} +1 -1
  23. package/dist/{generate-document-model-Dnik0rKd.mjs.map → generate-document-model-Cut44i6D.mjs.map} +1 -1
  24. package/dist/{generate-editor-BNN2OmmX.mjs → generate-editor-DmSzWm3W.mjs} +1 -1
  25. package/dist/{generate-editor-BNN2OmmX.mjs.map → generate-editor-DmSzWm3W.mjs.map} +1 -1
  26. package/dist/{generate-processor-CCSW2Ed2.mjs → generate-processor-BcuHtOSn.mjs} +1 -1
  27. package/dist/{generate-processor-CCSW2Ed2.mjs.map → generate-processor-BcuHtOSn.mjs.map} +1 -1
  28. package/dist/{generate-subgraph-B-d3J6hU.mjs → generate-subgraph-sh0GWC6T.mjs} +1 -1
  29. package/dist/{generate-subgraph-B-d3J6hU.mjs.map → generate-subgraph-sh0GWC6T.mjs.map} +1 -1
  30. package/dist/{init-8FtJDKxG.mjs → init-Cw_5H_Z1.mjs} +1 -1
  31. package/dist/{init-8FtJDKxG.mjs.map → init-Cw_5H_Z1.mjs.map} +1 -1
  32. package/dist/{inspect-BwkihsT7.mjs → inspect-BwuBW_zW.mjs} +2 -2
  33. package/dist/{inspect-BwkihsT7.mjs.map → inspect-BwuBW_zW.mjs.map} +1 -1
  34. package/dist/{migrate-B-O6P7jA.mjs → migrate-DCUKk5c2.mjs} +1 -1
  35. package/dist/{migrate-B-O6P7jA.mjs.map → migrate-DCUKk5c2.mjs.map} +1 -1
  36. package/dist/{registry-auth-BX9_n8hE.mjs → registry-auth-CNH84uo4.mjs} +2 -2
  37. package/dist/{registry-auth-BX9_n8hE.mjs.map → registry-auth-CNH84uo4.mjs.map} +1 -1
  38. package/dist/{switchboard-CJMoMzWx.mjs → switchboard-BsdbF-rL.mjs} +1 -1
  39. package/dist/{switchboard-CJMoMzWx.mjs.map → switchboard-BsdbF-rL.mjs.map} +1 -1
  40. package/dist/switchboard-GTBlxiJZ.mjs +2 -0
  41. package/dist/{switchboard-migrate-BRgCgg7N.mjs → switchboard-migrate-BumRp7rC.mjs} +1 -1
  42. package/dist/{switchboard-migrate-BRgCgg7N.mjs.map → switchboard-migrate-BumRp7rC.mjs.map} +1 -1
  43. package/dist/{utils-DkOZWO0i.mjs → utils-C6581aex.mjs} +1 -1
  44. package/dist/{utils-D7x443W6.mjs → utils-mth8NsDA.mjs} +1 -1
  45. package/dist/{utils-D7x443W6.mjs.map → utils-mth8NsDA.mjs.map} +1 -1
  46. package/dist/{vetra-xk2hwf6X.mjs → vetra-_JnFPpL5.mjs} +5 -5
  47. package/dist/{vetra-xk2hwf6X.mjs.map → vetra-_JnFPpL5.mjs.map} +1 -1
  48. package/package.json +10 -14
  49. package/dist/auth-Dq7JjwYn.mjs +0 -2
  50. package/dist/build-CWcQj0YI.mjs +0 -2
  51. package/dist/cli-BEsmTJHX.mjs +0 -140
  52. package/dist/cli-BEsmTJHX.mjs.map +0 -1
  53. package/dist/connect-studio-Dndkp0Q_.mjs +0 -3
  54. package/dist/logout-A2UHfQZF.mjs +0 -232
  55. package/dist/logout-A2UHfQZF.mjs.map +0 -1
  56. package/dist/switchboard-iRFugh8I.mjs +0 -2
@@ -12,4 +12,4 @@ function assignEnvVars(args) {
12
12
  //#endregion
13
13
  export { assignEnvVars as t };
14
14
 
15
- //# sourceMappingURL=assign-env-vars-DZMMuzB2.mjs.map
15
+ //# sourceMappingURL=assign-env-vars-W-lZmdMi.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"assign-env-vars-DZMMuzB2.mjs","names":[],"sources":["../src/utils/assign-env-vars.ts"],"sourcesContent":["import type {\n ConnectBuildArgs,\n ConnectPreviewArgs,\n ConnectStudioArgs,\n} from \"../types.js\";\nimport { setConnectEnv } from \"@powerhousedao/shared/connect\";\n\nexport function assignEnvVars(\n args: ConnectBuildArgs | ConnectPreviewArgs | ConnectStudioArgs,\n) {\n const {\n connectBasePath,\n defaultDrivesUrl,\n drivesPreserveStrategy,\n disableLocalPackages,\n } = args;\n\n setConnectEnv({\n PH_CONNECT_BASE_PATH: connectBasePath,\n PH_CONNECT_DEFAULT_DRIVES_URL: defaultDrivesUrl,\n PH_CONNECT_DRIVES_PRESERVE_STRATEGY: drivesPreserveStrategy,\n PH_DISABLE_LOCAL_PACKAGE: disableLocalPackages,\n });\n}\n"],"mappings":";;AAOA,SAAgB,cACd,MACA;CACA,MAAM,EACJ,iBACA,kBACA,wBACA,yBACE;AAEJ,eAAc;EACZ,sBAAsB;EACtB,+BAA+B;EAC/B,qCAAqC;EACrC,0BAA0B;EAC3B,CAAC"}
1
+ {"version":3,"file":"assign-env-vars-W-lZmdMi.mjs","names":[],"sources":["../src/utils/assign-env-vars.ts"],"sourcesContent":["import type {\n ConnectBuildArgs,\n ConnectPreviewArgs,\n ConnectStudioArgs,\n} from \"../types.js\";\nimport { setConnectEnv } from \"@powerhousedao/shared/connect\";\n\nexport function assignEnvVars(\n args: ConnectBuildArgs | ConnectPreviewArgs | ConnectStudioArgs,\n) {\n const {\n connectBasePath,\n defaultDrivesUrl,\n drivesPreserveStrategy,\n disableLocalPackages,\n } = args;\n\n setConnectEnv({\n PH_CONNECT_BASE_PATH: connectBasePath,\n PH_CONNECT_DEFAULT_DRIVES_URL: defaultDrivesUrl,\n PH_CONNECT_DRIVES_PRESERVE_STRATEGY: drivesPreserveStrategy,\n PH_DISABLE_LOCAL_PACKAGE: disableLocalPackages,\n });\n}\n"],"mappings":";;AAOA,SAAgB,cACd,MACA;CACA,MAAM,EACJ,iBACA,kBACA,wBACA,yBACE;AAEJ,eAAc;EACZ,sBAAsB;EACtB,+BAA+B;EAC/B,qCAAqC;EACrC,0BAA0B;EAC3B,CAAC"}
@@ -12,4 +12,4 @@ async function getRenown(baseUrl) {
12
12
  //#endregion
13
13
  export { getRenown as t };
14
14
 
15
- //# sourceMappingURL=auth-Ch5B5mNU.mjs.map
15
+ //# sourceMappingURL=auth-AR3VxAIk.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"auth-Ch5B5mNU.mjs","names":[],"sources":["../src/services/auth.ts"],"sourcesContent":["import { RenownBuilder, type IRenown } from \"@renown/sdk/node\";\n\n// Singleton instance of Renown\nlet renownInstance: IRenown | null = null;\n\n/**\n * Get or create the Renown instance\n * Uses PH_RENOWN_PRIVATE_KEY env var if set, otherwise generates/loads from file\n */\nexport async function getRenown(baseUrl?: string): Promise<IRenown> {\n if (!renownInstance) {\n renownInstance = await new RenownBuilder(\"ph-cli\", { baseUrl }).build();\n }\n return renownInstance;\n}\n"],"mappings":";;AAGA,IAAI,iBAAiC;;;;;AAMrC,eAAsB,UAAU,SAAoC;AAClE,KAAI,CAAC,eACH,kBAAiB,MAAM,IAAI,cAAc,UAAU,EAAE,SAAS,CAAC,CAAC,OAAO;AAEzE,QAAO"}
1
+ {"version":3,"file":"auth-AR3VxAIk.mjs","names":[],"sources":["../src/services/auth.ts"],"sourcesContent":["import { RenownBuilder, type IRenown } from \"@renown/sdk/node\";\n\n// Singleton instance of Renown\nlet renownInstance: IRenown | null = null;\n\n/**\n * Get or create the Renown instance\n * Uses PH_RENOWN_PRIVATE_KEY env var if set, otherwise generates/loads from file\n */\nexport async function getRenown(baseUrl?: string): Promise<IRenown> {\n if (!renownInstance) {\n renownInstance = await new RenownBuilder(\"ph-cli\", { baseUrl }).build();\n }\n return renownInstance;\n}\n"],"mappings":";;AAGA,IAAI,iBAAiC;;;;;AAMrC,eAAsB,UAAU,SAAoC;AAClE,KAAI,CAAC,eACH,kBAAiB,MAAM,IAAI,cAAc,UAAU,EAAE,SAAS,CAAC,CAAC,OAAO;AAEzE,QAAO"}
@@ -0,0 +1,2 @@
1
+ import { t as getRenown } from "./auth-AR3VxAIk.mjs";
2
+ export { getRenown };
@@ -43,4 +43,4 @@ async function runBuild(args) {
43
43
  //#endregion
44
44
  export { runBuild as t };
45
45
 
46
- //# sourceMappingURL=build-DCXpFtjA.mjs.map
46
+ //# sourceMappingURL=build-CYAQMjy1.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"build-DCXpFtjA.mjs","names":["tsdownBuild"],"sources":["../src/services/build.ts"],"sourcesContent":["import {\n browserBuildConfig,\n nodeBuildConfig,\n} from \"@powerhousedao/shared/clis\";\nimport { execSync } from \"node:child_process\";\nimport { join } from \"node:path\";\nimport { detect, resolveCommand } from \"package-manager-detector\";\nimport { build as tsdownBuild } from \"tsdown\";\nimport type { BuildArgs } from \"../types.js\";\n\nexport async function runBuild(args: BuildArgs) {\n const { outDir } = args;\n\n await tsdownBuild({\n ...browserBuildConfig,\n outDir: join(outDir, \"browser\"),\n });\n\n await tsdownBuild({\n ...nodeBuildConfig,\n outDir: join(outDir, \"node\"),\n });\n\n const detectResult = await detect();\n const agent = detectResult?.agent ?? \"npm\";\n\n // Emit types with tsc\n const tscCommand = resolveCommand(agent, \"execute-local\", [\"tsc\"]);\n if (tscCommand === null) {\n console.error(\n \"You need to have typescript installed to use the `build` command.\",\n );\n process.exit(1);\n }\n console.log(\"\\n▶ Emitting types via tsc...\");\n try {\n execSync(`${tscCommand.command} ${tscCommand.args.join(\" \")}`, {\n stdio: \"inherit\",\n });\n console.log(\"✔ Types emitted to\", join(outDir, \"types\"));\n } catch {\n console.warn(\n \"✘ tsc reported errors above; declarations were still written. Fix the errors to keep types accurate.\",\n );\n }\n\n const executeLocalCommand = resolveCommand(agent, \"execute-local\", [\n \"tailwindcss\",\n \"-i\",\n \"./style.css\",\n \"-o\",\n \"./dist/style.css\",\n ]);\n if (executeLocalCommand === null) {\n console.error(\n \"You need to have tailwindcss installed to use the `build` command.\",\n );\n process.exit(1);\n }\n execSync(\n `${executeLocalCommand.command} ${executeLocalCommand.args.join(\" \")}`,\n );\n}\n"],"mappings":";;;;;;AAUA,eAAsB,SAAS,MAAiB;CAC9C,MAAM,EAAE,WAAW;AAEnB,OAAMA,MAAY;EAChB,GAAG;EACH,QAAQ,KAAK,QAAQ,UAAU;EAChC,CAAC;AAEF,OAAMA,MAAY;EAChB,GAAG;EACH,QAAQ,KAAK,QAAQ,OAAO;EAC7B,CAAC;CAGF,MAAM,SADe,MAAM,QAAQ,GACP,SAAS;CAGrC,MAAM,aAAa,eAAe,OAAO,iBAAiB,CAAC,MAAM,CAAC;AAClE,KAAI,eAAe,MAAM;AACvB,UAAQ,MACN,oEACD;AACD,UAAQ,KAAK,EAAE;;AAEjB,SAAQ,IAAI,gCAAgC;AAC5C,KAAI;AACF,WAAS,GAAG,WAAW,QAAQ,GAAG,WAAW,KAAK,KAAK,IAAI,IAAI,EAC7D,OAAO,WACR,CAAC;AACF,UAAQ,IAAI,sBAAsB,KAAK,QAAQ,QAAQ,CAAC;SAClD;AACN,UAAQ,KACN,uGACD;;CAGH,MAAM,sBAAsB,eAAe,OAAO,iBAAiB;EACjE;EACA;EACA;EACA;EACA;EACD,CAAC;AACF,KAAI,wBAAwB,MAAM;AAChC,UAAQ,MACN,qEACD;AACD,UAAQ,KAAK,EAAE;;AAEjB,UACE,GAAG,oBAAoB,QAAQ,GAAG,oBAAoB,KAAK,KAAK,IAAI,GACrE"}
1
+ {"version":3,"file":"build-CYAQMjy1.mjs","names":["tsdownBuild"],"sources":["../src/services/build.ts"],"sourcesContent":["import {\n browserBuildConfig,\n nodeBuildConfig,\n} from \"@powerhousedao/shared/clis\";\nimport { execSync } from \"node:child_process\";\nimport { join } from \"node:path\";\nimport { detect, resolveCommand } from \"package-manager-detector\";\nimport { build as tsdownBuild } from \"tsdown\";\nimport type { BuildArgs } from \"../types.js\";\n\nexport async function runBuild(args: BuildArgs) {\n const { outDir } = args;\n\n await tsdownBuild({\n ...browserBuildConfig,\n outDir: join(outDir, \"browser\"),\n });\n\n await tsdownBuild({\n ...nodeBuildConfig,\n outDir: join(outDir, \"node\"),\n });\n\n const detectResult = await detect();\n const agent = detectResult?.agent ?? \"npm\";\n\n // Emit types with tsc\n const tscCommand = resolveCommand(agent, \"execute-local\", [\"tsc\"]);\n if (tscCommand === null) {\n console.error(\n \"You need to have typescript installed to use the `build` command.\",\n );\n process.exit(1);\n }\n console.log(\"\\n▶ Emitting types via tsc...\");\n try {\n execSync(`${tscCommand.command} ${tscCommand.args.join(\" \")}`, {\n stdio: \"inherit\",\n });\n console.log(\"✔ Types emitted to\", join(outDir, \"types\"));\n } catch {\n console.warn(\n \"✘ tsc reported errors above; declarations were still written. Fix the errors to keep types accurate.\",\n );\n }\n\n const executeLocalCommand = resolveCommand(agent, \"execute-local\", [\n \"tailwindcss\",\n \"-i\",\n \"./style.css\",\n \"-o\",\n \"./dist/style.css\",\n ]);\n if (executeLocalCommand === null) {\n console.error(\n \"You need to have tailwindcss installed to use the `build` command.\",\n );\n process.exit(1);\n }\n execSync(\n `${executeLocalCommand.command} ${executeLocalCommand.args.join(\" \")}`,\n );\n}\n"],"mappings":";;;;;;AAUA,eAAsB,SAAS,MAAiB;CAC9C,MAAM,EAAE,WAAW;AAEnB,OAAMA,MAAY;EAChB,GAAG;EACH,QAAQ,KAAK,QAAQ,UAAU;EAChC,CAAC;AAEF,OAAMA,MAAY;EAChB,GAAG;EACH,QAAQ,KAAK,QAAQ,OAAO;EAC7B,CAAC;CAGF,MAAM,SADe,MAAM,QAAQ,GACP,SAAS;CAGrC,MAAM,aAAa,eAAe,OAAO,iBAAiB,CAAC,MAAM,CAAC;AAClE,KAAI,eAAe,MAAM;AACvB,UAAQ,MACN,oEACD;AACD,UAAQ,KAAK,EAAE;;AAEjB,SAAQ,IAAI,gCAAgC;AAC5C,KAAI;AACF,WAAS,GAAG,WAAW,QAAQ,GAAG,WAAW,KAAK,KAAK,IAAI,IAAI,EAC7D,OAAO,WACR,CAAC;AACF,UAAQ,IAAI,sBAAsB,KAAK,QAAQ,QAAQ,CAAC;SAClD;AACN,UAAQ,KACN,uGACD;;CAGH,MAAM,sBAAsB,eAAe,OAAO,iBAAiB;EACjE;EACA;EACA;EACA;EACA;EACD,CAAC;AACF,KAAI,wBAAwB,MAAM;AAChC,UAAQ,MACN,qEACD;AACD,UAAQ,KAAK,EAAE;;AAEjB,UACE,GAAG,oBAAoB,QAAQ,GAAG,oBAAoB,KAAK,KAAK,IAAI,GACrE"}
@@ -0,0 +1,2 @@
1
+ import { t as runBuild } from "./build-CYAQMjy1.mjs";
2
+ export { runBuild };
package/dist/cli.mjs CHANGED
@@ -1,15 +1,20 @@
1
1
  #!/usr/bin/env node
2
- import { a as getVersion, i as accessToken, n as login, r as list, t as logout } from "./logout-A2UHfQZF.mjs";
3
2
  import { assertNodeVersion } from "@powerhousedao/shared/clis/utils";
4
3
  import { captureCliError, initCliTelemetry } from "@powerhousedao/shared/clis/telemetry";
5
4
  import { array, boolean, command, flag, multioption, oneOf, option, optional, run, string, subcommands } from "cmd-ts";
6
- import { AGENTS, buildArgs, codeArgs, connectBuildArgs, connectPreviewArgs, connectStudioArgs, debugArgs, initArgs, inspectArgs, installArgs, migrateArgs, phCliHelpCommands, publishArgs, registryLoginArgs, switchboardArgs, uninstallArgs, unpublishArgs, vetraArgs } from "@powerhousedao/shared/clis/args";
5
+ import { AGENTS, accessTokenArgs, buildArgs, connectBuildArgs, connectPreviewArgs, connectStudioArgs, debugArgs, initArgs, inspectArgs, installArgs, listArgs, loginArgs, migrateArgs, phCliHelpCommands, publishArgs, registryLoginArgs, switchboardArgs, uninstallArgs, unpublishArgs, vetraArgs } from "@powerhousedao/shared/clis/args";
6
+ import { DEFAULT_EXPIRY_SECONDS } from "@powerhousedao/shared/clis/constants";
7
7
  import { Directory, File } from "cmd-ts/dist/cjs/batteries/fs.js";
8
8
  import path from "path";
9
9
  import { PROCESSOR_APPS } from "@powerhousedao/shared/processors";
10
10
  import { execSync } from "child_process";
11
11
  import { execSync as execSync$1 } from "node:child_process";
12
12
  import { createInterface } from "node:readline/promises";
13
+ //#region src/get-version.ts
14
+ function getVersion() {
15
+ return "6.0.0-dev.236";
16
+ }
17
+ //#endregion
13
18
  //#region src/utils/constants.ts
14
19
  const PH_CLI_DESCRIPTION = "The Powerhouse CLI (ph-cli) is a command-line interface tool that provides essential commands for managing Powerhouse projects. The tool and it's commands are fundamental for creating, building, and running Document Models as a builder in studio mode.";
15
20
  const phCliHelp = subcommands({
@@ -19,6 +24,77 @@ const phCliHelp = subcommands({
19
24
  cmds: phCliHelpCommands
20
25
  });
21
26
  //#endregion
27
+ //#region src/commands/access-token.ts
28
+ const accessToken = command({
29
+ name: "access-token",
30
+ description: `
31
+ The access-token command generates a bearer token for API authentication. This token
32
+ can be used to authenticate requests to Powerhouse APIs like reactor-api (Switchboard).
33
+
34
+ This command:
35
+ 1. Uses your CLI's cryptographic identity (DID) to sign a verifiable credential
36
+ 2. Creates a JWT bearer token with configurable expiration
37
+ 3. Outputs the token to stdout (info to stderr) for easy piping
38
+
39
+ Prerequisites:
40
+ You must have a cryptographic identity. Run 'ph login' first to:
41
+ - Generate a keypair (stored in .ph/.keypair.json)
42
+ - Optionally link your Ethereum address (stored in .ph/.renown.json)
43
+
44
+ Token Details:
45
+ The generated token is a JWT (JSON Web Token) containing:
46
+ - Issuer (iss): Your CLI's DID (did:key:...)
47
+ - Subject (sub): Your CLI's DID
48
+ - Credential Subject: Chain ID, network ID, and address (if authenticated)
49
+ - Expiration (exp): Based on --expiry option
50
+ - Audience (aud): If --audience is specified
51
+
52
+ Output:
53
+ - Token information (DID, address, expiry) is printed to stderr
54
+ - The token itself is printed to stdout for easy piping/copying
55
+
56
+ This allows you to use the command in scripts:
57
+ TOKEN=$(ph access-token)
58
+ curl -H "Authorization: Bearer $TOKEN" http://localhost:4001/graphql
59
+
60
+ Usage with APIs:
61
+ Generate token and use with curl
62
+ TOKEN=$(ph access-token --expiry 1d)
63
+ curl -X POST http://localhost:4001/graphql \\
64
+ -H "Content-Type: application/json" \\
65
+ -H "Authorization: Bearer $TOKEN" \\
66
+ -d '{"query": "{ drives { id name } }"}'
67
+
68
+ Export as environment variable
69
+ export PH_ACCESS_TOKEN=$(ph access-token)
70
+
71
+ Notes:
72
+ - Tokens are self-signed using your CLI's private key
73
+ - No network request is made; tokens are generated locally
74
+ - The recipient API must trust your CLI's DID to accept the token
75
+ - For reactor-api, ensure AUTH_ENABLED=true to require authentication
76
+ `,
77
+ args: accessTokenArgs,
78
+ handler: async (args) => {
79
+ if (args.debug) console.log(args);
80
+ const { generateAccessToken, parseExpiry, formatExpiry } = await import("@renown/sdk/node");
81
+ const { getRenown } = await import("./auth-BNkN6kS9.mjs");
82
+ const renown = await getRenown();
83
+ let expiresIn = DEFAULT_EXPIRY_SECONDS;
84
+ if (args.expiry) expiresIn = parseExpiry(args.expiry);
85
+ const result = await generateAccessToken(renown, {
86
+ expiresIn,
87
+ aud: args.audience
88
+ });
89
+ console.error(`CLI DID: ${result.did}`);
90
+ console.error(`ETH Address: ${result.address}`);
91
+ console.error(`Token expires in: ${formatExpiry(expiresIn)}`);
92
+ console.error("");
93
+ console.log(result.token);
94
+ process.exit(0);
95
+ }
96
+ });
97
+ //#endregion
22
98
  //#region src/commands/build.ts
23
99
  const build$1 = command({
24
100
  name: "build",
@@ -26,7 +102,7 @@ const build$1 = command({
26
102
  handler: async (args) => {
27
103
  if (args.debug) console.log(args);
28
104
  try {
29
- const { runBuild } = await import("./build-CWcQj0YI.mjs");
105
+ const { runBuild } = await import("./build-DzxGiqu2.mjs");
30
106
  await runBuild(args);
31
107
  } catch (error) {
32
108
  console.error(error);
@@ -34,30 +110,6 @@ const build$1 = command({
34
110
  }
35
111
  }
36
112
  });
37
- //#endregion
38
- //#region src/commands/code.ts
39
- const code = command({
40
- name: "code",
41
- description: `
42
- Open the Powerhouse coding agent — a REPL backed by Mastra that has every
43
- installed Powerhouse tool available as an agent tool.
44
-
45
- Examples:
46
- ph code Start the interactive REPL.
47
- ph code "list my installed packs" One-shot agent prompt.
48
- `,
49
- args: codeArgs,
50
- handler: async (args) => {
51
- const { buildPhCodeCli } = await import("./cli-BEsmTJHX.mjs");
52
- const cli = buildPhCodeCli();
53
- const argv = [
54
- "node",
55
- "ph-code",
56
- ...args.rest.length === 0 ? ["-i"] : args.rest
57
- ];
58
- await cli.run(argv);
59
- }
60
- });
61
113
  const connect = subcommands({
62
114
  name: "connect",
63
115
  description: `Powerhouse Connect commands. Use with \`studio\`, \`build\` or \`preview\`. Defaults to \`studio\` if not specified.`,
@@ -77,7 +129,7 @@ This command:
77
129
  args: connectStudioArgs,
78
130
  handler: async (args) => {
79
131
  if (args.debug) console.log(args);
80
- const { runConnectStudio } = await import("./connect-studio-Dndkp0Q_.mjs");
132
+ const { runConnectStudio } = await import("./connect-studio-DySbZFEc.mjs");
81
133
  await runConnectStudio(args);
82
134
  }
83
135
  }),
@@ -89,7 +141,7 @@ external packages included
89
141
  args: connectBuildArgs,
90
142
  handler: async (args) => {
91
143
  if (args.debug) console.log(args);
92
- const { runConnectBuild } = await import("./connect-build-6yhCIKkQ.mjs");
144
+ const { runConnectBuild } = await import("./connect-build-BIvwnJ8o.mjs");
93
145
  await runConnectBuild(args);
94
146
  process.exit(0);
95
147
  }
@@ -102,7 +154,7 @@ NOTE: You must run \`ph connect build\` first
102
154
  args: connectPreviewArgs,
103
155
  handler: async (args) => {
104
156
  if (args.debug) console.log(args);
105
- const { runConnectPreview } = await import("./connect-preview-CaEiWmqU.mjs");
157
+ const { runConnectPreview } = await import("./connect-preview-CNJkhtxL.mjs");
106
158
  await runConnectPreview(args);
107
159
  }
108
160
  })
@@ -115,7 +167,7 @@ const generateAllCmd = command({
115
167
  description: "Re-generate all modules in the current project",
116
168
  args: {},
117
169
  handler: async () => {
118
- const { startGenerateAll } = await import("./generate-all-DaXXjoms.mjs");
170
+ const { startGenerateAll } = await import("./generate-all-Cj8zjFhN.mjs");
119
171
  await startGenerateAll(process.cwd());
120
172
  process.exit(0);
121
173
  }
@@ -159,7 +211,7 @@ const generateAppCmd = command({
159
211
  ...debugArgs
160
212
  },
161
213
  handler: async (args) => {
162
- const { startGenerateApp } = await import("./generate-app-GvQeAG4w.mjs");
214
+ const { startGenerateApp } = await import("./generate-app-KE0rbE-b.mjs");
163
215
  await startGenerateApp(args, process.cwd());
164
216
  process.exit(0);
165
217
  }
@@ -191,7 +243,7 @@ const generateDocumentModelCmd = command({
191
243
  ...debugArgs
192
244
  },
193
245
  handler: async (args) => {
194
- const { startGenerateDocumentModel } = await import("./generate-document-model-Dnik0rKd.mjs");
246
+ const { startGenerateDocumentModel } = await import("./generate-document-model-Cut44i6D.mjs");
195
247
  await startGenerateDocumentModel(args, process.cwd());
196
248
  process.exit(0);
197
249
  }
@@ -228,7 +280,7 @@ const generateEditorCmd = command({
228
280
  ...debugArgs
229
281
  },
230
282
  handler: async (args) => {
231
- const { startGenerateEditor } = await import("./generate-editor-BNN2OmmX.mjs");
283
+ const { startGenerateEditor } = await import("./generate-editor-DmSzWm3W.mjs");
232
284
  await startGenerateEditor(args, process.cwd());
233
285
  process.exit(0);
234
286
  }
@@ -313,7 +365,7 @@ const generateProcessorCmd = command({
313
365
  ...debugArgs
314
366
  },
315
367
  handler: async (args) => {
316
- const { startGenerateProcessor } = await import("./generate-processor-CCSW2Ed2.mjs");
368
+ const { startGenerateProcessor } = await import("./generate-processor-BcuHtOSn.mjs");
317
369
  await startGenerateProcessor(args, process.cwd());
318
370
  process.exit(0);
319
371
  }
@@ -344,7 +396,7 @@ const generateSubgraphCmd = command({
344
396
  ...debugArgs
345
397
  },
346
398
  handler: async (args) => {
347
- const { startGenerateSubgraph } = await import("./generate-subgraph-B-d3J6hU.mjs");
399
+ const { startGenerateSubgraph } = await import("./generate-subgraph-sh0GWC6T.mjs");
348
400
  await startGenerateSubgraph(args, process.cwd());
349
401
  process.exit(0);
350
402
  }
@@ -372,7 +424,7 @@ const init = command({
372
424
  args: initArgs,
373
425
  handler: async (args) => {
374
426
  if (args.debug) console.log({ args });
375
- const { startInit } = await import("./init-8FtJDKxG.mjs");
427
+ const { startInit } = await import("./init-Cw_5H_Z1.mjs");
376
428
  await startInit(args);
377
429
  process.exit(0);
378
430
  }
@@ -395,7 +447,7 @@ This command:
395
447
  args: inspectArgs,
396
448
  handler: async (args) => {
397
449
  if (args.debug) console.log(args);
398
- const { startInspect } = await import("./inspect-BwkihsT7.mjs");
450
+ const { startInspect } = await import("./inspect-BwuBW_zW.mjs");
399
451
  startInspect(args);
400
452
  process.exit(0);
401
453
  }
@@ -474,7 +526,7 @@ Resolution order for the registry URL:
474
526
  throw error;
475
527
  }
476
528
  }
477
- const { updateConfigFile, updateStylesFile } = await import("./utils-DkOZWO0i.mjs");
529
+ const { updateConfigFile, updateStylesFile } = await import("./utils-C6581aex.mjs");
478
530
  try {
479
531
  console.log("⚙️ Updating powerhouse config file...");
480
532
  updateConfigFile(dependenciesWithVersions, projectPath, "install", args.local ? "local" : "registry", registryUrl);
@@ -495,6 +547,156 @@ Resolution order for the registry URL:
495
547
  }
496
548
  });
497
549
  //#endregion
550
+ //#region src/commands/list.ts
551
+ const list = command({
552
+ name: "list",
553
+ description: `
554
+ The list command displays information about installed Powerhouse packages in your project.
555
+ It reads the powerhouse.config.json file and shows the packages that are currently installed.
556
+
557
+ This command:
558
+ 1. Examines your project configuration
559
+ 2. Lists all installed Powerhouse packages
560
+ 3. Provides a clear overview of your project's dependencies
561
+ 4. Helps you manage and track your Powerhouse components
562
+ `,
563
+ aliases: ["l"],
564
+ args: listArgs,
565
+ handler: async (args) => {
566
+ if (args.debug) console.log(args);
567
+ try {
568
+ const { getPowerhouseProjectInfo } = await import("@powerhousedao/shared/clis");
569
+ const projectInfo = await getPowerhouseProjectInfo();
570
+ console.log("\n>>> projectInfo", projectInfo);
571
+ const { getConfig } = await import("@powerhousedao/config/node");
572
+ const phConfig = getConfig(projectInfo.projectPath + "/powerhouse.config.json");
573
+ if (!phConfig.packages || phConfig.packages.length === 0) {
574
+ console.log("No packages found in the project");
575
+ return;
576
+ }
577
+ console.log("Installed Packages:\n");
578
+ phConfig.packages.forEach((pkg) => {
579
+ console.log(pkg.packageName);
580
+ });
581
+ } catch (e) {
582
+ console.log("No packages found in the project");
583
+ }
584
+ process.exit(0);
585
+ }
586
+ });
587
+ //#endregion
588
+ //#region src/commands/login.ts
589
+ const login = command({
590
+ name: "login",
591
+ description: `
592
+ The login command authenticates you with Renown using your Ethereum wallet. This enables
593
+ the CLI to act on behalf of your Ethereum identity for authenticated operations.
594
+
595
+ This command:
596
+ 1. Generates or loads a cryptographic identity (DID) for the CLI
597
+ 2. Opens your browser to the Renown authentication page
598
+ 3. You authorize the CLI's DID to act on behalf of your Ethereum address
599
+ 4. Stores the credentials locally in .ph/.renown.json
600
+ `,
601
+ args: loginArgs,
602
+ handler: async (args) => {
603
+ if (args.debug) console.log(args);
604
+ const { getRenown } = await import("./auth-BNkN6kS9.mjs");
605
+ const renown = await getRenown(args.renownUrl);
606
+ if (args.showDid) {
607
+ console.log(renown.did);
608
+ process.exit(0);
609
+ }
610
+ if (args.status) {
611
+ const { getAuthStatus } = await import("@renown/sdk/node");
612
+ const status = getAuthStatus(renown);
613
+ if (!status.authenticated || !status.address) {
614
+ console.log("Not authenticated with an Ethereum address.");
615
+ console.log("Run \"ph login\" to authenticate.");
616
+ } else {
617
+ console.log("Authenticated");
618
+ console.log(` ETH Address: ${status.address}`);
619
+ console.log(` User DID: ${status.userDid}`);
620
+ console.log(` Chain ID: ${status.chainId}`);
621
+ console.log(` CLI DID: ${status.cliDid}`);
622
+ console.log(` Authenticated at: ${status.authenticatedAt?.toLocaleString()}`);
623
+ console.log(` Renown URL: ${status.baseUrl}`);
624
+ }
625
+ process.exit(0);
626
+ }
627
+ if (args.logout) {
628
+ await handleLogout();
629
+ process.exit(0);
630
+ }
631
+ const { browserLogin } = await import("@renown/sdk/node");
632
+ console.debug("Initializing cryptographic identity...");
633
+ console.log(`CLI DID: ${renown.did}`);
634
+ try {
635
+ const timeoutMs = args.timeout ? args.timeout * 1e3 : void 0;
636
+ const result = await browserLogin(renown, {
637
+ renownUrl: args.renownUrl,
638
+ timeoutMs,
639
+ onLoginUrl: (url, sessionId) => {
640
+ console.log("Opening browser for authentication...");
641
+ console.log(`Session ID: ${sessionId.slice(0, 8)}...`);
642
+ console.log(`Login URL: ${url}`);
643
+ console.log();
644
+ console.log("Waiting for authentication in browser");
645
+ console.log(`(timeout in ${(timeoutMs ?? 3e5) / 1e3} seconds)`);
646
+ console.log();
647
+ console.log("Please connect your wallet and authorize this CLI to act on your behalf.");
648
+ console.log();
649
+ process.stdout.write("Waiting");
650
+ },
651
+ onPollTick: () => process.stdout.write("."),
652
+ onBrowserOpenFailed: (url) => {
653
+ console.error("Failed to open browser automatically.");
654
+ console.log(`Please open this URL manually: ${url}`);
655
+ }
656
+ });
657
+ console.log();
658
+ console.log();
659
+ console.log("Successfully authenticated!");
660
+ console.log(` ETH Address: ${result.user.address}`);
661
+ console.log(` User DID: ${result.user.did}`);
662
+ console.log(` CLI DID: ${result.cliDid}`);
663
+ console.log();
664
+ console.log("The CLI can now act on behalf of your Ethereum identity.");
665
+ } catch (error) {
666
+ console.log();
667
+ throw error;
668
+ }
669
+ process.exit(0);
670
+ }
671
+ });
672
+ async function handleLogout() {
673
+ const { getRenown } = await import("./auth-BNkN6kS9.mjs");
674
+ const renown = await getRenown();
675
+ if (!renown.user) {
676
+ console.log("Not currently authenticated.");
677
+ return;
678
+ }
679
+ try {
680
+ await renown.logout();
681
+ console.log("Successfully logged out.");
682
+ } catch (error) {
683
+ console.error("Failed to clear credentials.");
684
+ console.debug(error);
685
+ }
686
+ }
687
+ //#endregion
688
+ //#region src/commands/logout.ts
689
+ const logout = command({
690
+ name: "logout",
691
+ description: `
692
+ The logout command removes an existing session created with 'ph login'`,
693
+ args: {},
694
+ handler: async () => {
695
+ await handleLogout();
696
+ process.exit(0);
697
+ }
698
+ });
699
+ //#endregion
498
700
  //#region src/commands/migrate.ts
499
701
  const migrate = command({
500
702
  name: "migrate",
@@ -502,7 +704,7 @@ const migrate = command({
502
704
  description: "Run migrations",
503
705
  handler: async (args) => {
504
706
  if (args.debug) console.log(args);
505
- const { startMigrate } = await import("./migrate-B-O6P7jA.mjs");
707
+ const { startMigrate } = await import("./migrate-DCUKk5c2.mjs");
506
708
  await startMigrate(args);
507
709
  process.exit(0);
508
710
  }
@@ -550,7 +752,7 @@ This command:
550
752
  const { projectPath } = await getPowerhouseProjectInfo();
551
753
  if (!projectPath) throw new Error("Could not find project path.");
552
754
  const { checkNpmAuth, npmPublish, resolveRegistryUrl } = await import("@powerhousedao/shared/registry");
553
- const { mintRegistryAuthToken } = await import("./registry-auth-BX9_n8hE.mjs");
755
+ const { mintRegistryAuthToken } = await import("./registry-auth-CNH84uo4.mjs");
554
756
  const registryUrl = resolveRegistryUrl({
555
757
  registry: args.registry,
556
758
  projectPath
@@ -640,7 +842,7 @@ Usage:
640
842
  const projectPath = (await getPowerhouseProjectInfo().catch(() => null))?.projectPath ?? process.cwd();
641
843
  const [{ resolveRegistryUrl, writeRegistryAuthToken }, { mintRegistryAuthToken }, { parseExpiry, formatExpiry }] = await Promise.all([
642
844
  import("@powerhousedao/shared/registry"),
643
- import("./registry-auth-BX9_n8hE.mjs"),
845
+ import("./registry-auth-CNH84uo4.mjs"),
644
846
  import("@renown/sdk/node")
645
847
  ]);
646
848
  const registryUrl = resolveRegistryUrl({
@@ -677,14 +879,14 @@ This command:
677
879
  const { basePath, dbPath, migrate, migrateStatus } = args;
678
880
  if (basePath) process.env.BASE_PATH = basePath;
679
881
  if (migrate || migrateStatus) {
680
- const { runSwitchboardMigrations } = await import("./switchboard-migrate-BRgCgg7N.mjs");
882
+ const { runSwitchboardMigrations } = await import("./switchboard-migrate-BumRp7rC.mjs");
681
883
  await runSwitchboardMigrations({
682
884
  dbPath,
683
885
  statusOnly: migrateStatus
684
886
  });
685
887
  process.exit(0);
686
888
  }
687
- const { startSwitchboard } = await import("./switchboard-iRFugh8I.mjs");
889
+ const { startSwitchboard } = await import("./switchboard-GTBlxiJZ.mjs");
688
890
  const { defaultDriveUrl, renown } = await startSwitchboard(args);
689
891
  console.log(" ➜ Switchboard:", defaultDriveUrl);
690
892
  if (renown) console.log(" ➜ Identity:", renown.did);
@@ -730,7 +932,7 @@ This command:
730
932
  console.error("❌ Failed to uninstall dependencies");
731
933
  throw error;
732
934
  }
733
- const { removeStylesImports, updateConfigFile } = await import("./utils-DkOZWO0i.mjs");
935
+ const { removeStylesImports, updateConfigFile } = await import("./utils-C6581aex.mjs");
734
936
  try {
735
937
  console.log("⚙️ Updating powerhouse config file...");
736
938
  updateConfigFile(dependenciesWithVersions, projectPath, "uninstall");
@@ -845,7 +1047,6 @@ async function confirm(prompt) {
845
1047
  //#region src/commands/ph-cli-commands.ts
846
1048
  const phCliCommands = {
847
1049
  init,
848
- code,
849
1050
  generate,
850
1051
  vetra: command({
851
1052
  name: "vetra",
@@ -862,7 +1063,7 @@ This command:
862
1063
  args: vetraArgs,
863
1064
  handler: async (args) => {
864
1065
  if (args.debug) console.log(args);
865
- const { startVetra } = await import("./vetra-xk2hwf6X.mjs");
1066
+ const { startVetra } = await import("./vetra-_JnFPpL5.mjs");
866
1067
  await startVetra(args);
867
1068
  }
868
1069
  }),