@namera-ai/cli 0.1.4 → 1.0.0

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 (148) hide show
  1. package/README.md +91 -221
  2. package/dist/index.js +1660 -0
  3. package/dist/index.js.map +1 -0
  4. package/package.json +57 -50
  5. package/LICENSE +0 -201
  6. package/dist/commands/index.mjs +0 -21
  7. package/dist/commands/index.mjs.map +0 -1
  8. package/dist/commands/keystore/create.mjs +0 -74
  9. package/dist/commands/keystore/create.mjs.map +0 -1
  10. package/dist/commands/keystore/decrypt.mjs +0 -71
  11. package/dist/commands/keystore/decrypt.mjs.map +0 -1
  12. package/dist/commands/keystore/import.mjs +0 -84
  13. package/dist/commands/keystore/import.mjs.map +0 -1
  14. package/dist/commands/keystore/index.mjs +0 -28
  15. package/dist/commands/keystore/index.mjs.map +0 -1
  16. package/dist/commands/keystore/info.mjs +0 -62
  17. package/dist/commands/keystore/info.mjs.map +0 -1
  18. package/dist/commands/keystore/list.mjs +0 -46
  19. package/dist/commands/keystore/list.mjs.map +0 -1
  20. package/dist/commands/keystore/remove.mjs +0 -51
  21. package/dist/commands/keystore/remove.mjs.map +0 -1
  22. package/dist/commands/mcp/index.mjs +0 -13
  23. package/dist/commands/mcp/index.mjs.map +0 -1
  24. package/dist/commands/mcp/start.mjs +0 -82
  25. package/dist/commands/mcp/start.mjs.map +0 -1
  26. package/dist/commands/schema/index.mjs +0 -53
  27. package/dist/commands/schema/index.mjs.map +0 -1
  28. package/dist/commands/session-key/create/index.mjs +0 -87
  29. package/dist/commands/session-key/create/index.mjs.map +0 -1
  30. package/dist/commands/session-key/create/prompts/base.mjs +0 -52
  31. package/dist/commands/session-key/create/prompts/base.mjs.map +0 -1
  32. package/dist/commands/session-key/create/prompts/call.mjs +0 -85
  33. package/dist/commands/session-key/create/prompts/call.mjs.map +0 -1
  34. package/dist/commands/session-key/create/prompts/common.mjs +0 -27
  35. package/dist/commands/session-key/create/prompts/common.mjs.map +0 -1
  36. package/dist/commands/session-key/create/prompts/gas.mjs +0 -19
  37. package/dist/commands/session-key/create/prompts/gas.mjs.map +0 -1
  38. package/dist/commands/session-key/create/prompts/index.mjs +0 -44
  39. package/dist/commands/session-key/create/prompts/index.mjs.map +0 -1
  40. package/dist/commands/session-key/create/prompts/rate-limit.mjs +0 -40
  41. package/dist/commands/session-key/create/prompts/rate-limit.mjs.map +0 -1
  42. package/dist/commands/session-key/create/prompts/signature-caller.mjs +0 -26
  43. package/dist/commands/session-key/create/prompts/signature-caller.mjs.map +0 -1
  44. package/dist/commands/session-key/create/prompts/timestamp.mjs +0 -32
  45. package/dist/commands/session-key/create/prompts/timestamp.mjs.map +0 -1
  46. package/dist/commands/session-key/index.mjs +0 -26
  47. package/dist/commands/session-key/index.mjs.map +0 -1
  48. package/dist/commands/session-key/info.mjs +0 -64
  49. package/dist/commands/session-key/info.mjs.map +0 -1
  50. package/dist/commands/session-key/list.mjs +0 -54
  51. package/dist/commands/session-key/list.mjs.map +0 -1
  52. package/dist/commands/session-key/remove.mjs +0 -51
  53. package/dist/commands/session-key/remove.mjs.map +0 -1
  54. package/dist/commands/session-key/status.mjs +0 -64
  55. package/dist/commands/session-key/status.mjs.map +0 -1
  56. package/dist/commands/smart-account/create.mjs +0 -94
  57. package/dist/commands/smart-account/create.mjs.map +0 -1
  58. package/dist/commands/smart-account/import.mjs +0 -45
  59. package/dist/commands/smart-account/import.mjs.map +0 -1
  60. package/dist/commands/smart-account/index.mjs +0 -30
  61. package/dist/commands/smart-account/index.mjs.map +0 -1
  62. package/dist/commands/smart-account/info.mjs +0 -66
  63. package/dist/commands/smart-account/info.mjs.map +0 -1
  64. package/dist/commands/smart-account/list.mjs +0 -48
  65. package/dist/commands/smart-account/list.mjs.map +0 -1
  66. package/dist/commands/smart-account/remove.mjs +0 -54
  67. package/dist/commands/smart-account/remove.mjs.map +0 -1
  68. package/dist/commands/smart-account/status.mjs +0 -63
  69. package/dist/commands/smart-account/status.mjs.map +0 -1
  70. package/dist/dto/index.mjs +0 -6
  71. package/dist/dto/keystore.mjs +0 -44
  72. package/dist/dto/keystore.mjs.map +0 -1
  73. package/dist/dto/mcp.mjs +0 -13
  74. package/dist/dto/mcp.mjs.map +0 -1
  75. package/dist/dto/session-key.mjs +0 -54
  76. package/dist/dto/session-key.mjs.map +0 -1
  77. package/dist/dto/smart-account.mjs +0 -45
  78. package/dist/dto/smart-account.mjs.map +0 -1
  79. package/dist/flags/global.mjs +0 -29
  80. package/dist/flags/global.mjs.map +0 -1
  81. package/dist/flags/shared.mjs +0 -11
  82. package/dist/flags/shared.mjs.map +0 -1
  83. package/dist/helpers/humanize.mjs +0 -153
  84. package/dist/helpers/humanize.mjs.map +0 -1
  85. package/dist/helpers/paths.mjs +0 -31
  86. package/dist/helpers/paths.mjs.map +0 -1
  87. package/dist/helpers/policy.mjs +0 -89
  88. package/dist/helpers/policy.mjs.map +0 -1
  89. package/dist/helpers/pretty.mjs +0 -71
  90. package/dist/helpers/pretty.mjs.map +0 -1
  91. package/dist/index.d.mts +0 -2
  92. package/dist/index.mjs +0 -36
  93. package/dist/index.mjs.map +0 -1
  94. package/dist/layers/config.mjs +0 -124
  95. package/dist/layers/config.mjs.map +0 -1
  96. package/dist/layers/index.mjs +0 -11
  97. package/dist/layers/keystore.mjs +0 -225
  98. package/dist/layers/keystore.mjs.map +0 -1
  99. package/dist/layers/mcp-context.mjs +0 -8
  100. package/dist/layers/mcp-context.mjs.map +0 -1
  101. package/dist/layers/mcp.mjs +0 -31
  102. package/dist/layers/mcp.mjs.map +0 -1
  103. package/dist/layers/output.mjs +0 -21
  104. package/dist/layers/output.mjs.map +0 -1
  105. package/dist/layers/prompt.mjs +0 -78
  106. package/dist/layers/prompt.mjs.map +0 -1
  107. package/dist/layers/session-key.mjs +0 -218
  108. package/dist/layers/session-key.mjs.map +0 -1
  109. package/dist/layers/smart-account.mjs +0 -175
  110. package/dist/layers/smart-account.mjs.map +0 -1
  111. package/dist/layers/web3.mjs +0 -83
  112. package/dist/layers/web3.mjs.map +0 -1
  113. package/dist/mcp/helpers/common.mjs +0 -9
  114. package/dist/mcp/helpers/common.mjs.map +0 -1
  115. package/dist/mcp/helpers/index.mjs +0 -4
  116. package/dist/mcp/helpers/session-key.mjs +0 -129
  117. package/dist/mcp/helpers/session-key.mjs.map +0 -1
  118. package/dist/mcp/index.mjs +0 -43
  119. package/dist/mcp/index.mjs.map +0 -1
  120. package/dist/mcp/mcp.mjs +0 -15
  121. package/dist/mcp/mcp.mjs.map +0 -1
  122. package/dist/mcp/tools/account/address.mjs +0 -20
  123. package/dist/mcp/tools/account/address.mjs.map +0 -1
  124. package/dist/mcp/tools/account/get-balance.mjs +0 -54
  125. package/dist/mcp/tools/account/get-balance.mjs.map +0 -1
  126. package/dist/mcp/tools/account/index.mjs +0 -15
  127. package/dist/mcp/tools/account/index.mjs.map +0 -1
  128. package/dist/mcp/tools/read/index.mjs +0 -11
  129. package/dist/mcp/tools/read/index.mjs.map +0 -1
  130. package/dist/mcp/tools/read/read-contract.mjs +0 -49
  131. package/dist/mcp/tools/read/read-contract.mjs.map +0 -1
  132. package/dist/mcp/tools/transaction/execute-transaction.mjs +0 -38
  133. package/dist/mcp/tools/transaction/execute-transaction.mjs.map +0 -1
  134. package/dist/mcp/tools/transaction/index.mjs +0 -15
  135. package/dist/mcp/tools/transaction/index.mjs.map +0 -1
  136. package/dist/mcp/tools/transaction/native-transfer.mjs +0 -59
  137. package/dist/mcp/tools/transaction/native-transfer.mjs.map +0 -1
  138. package/dist/schema/chain.mjs +0 -124
  139. package/dist/schema/chain.mjs.map +0 -1
  140. package/dist/schema/common.mjs +0 -29
  141. package/dist/schema/common.mjs.map +0 -1
  142. package/dist/schema/index.mjs +0 -5
  143. package/dist/schema/policy.mjs +0 -114
  144. package/dist/schema/policy.mjs.map +0 -1
  145. package/dist/schema/tx.mjs +0 -19
  146. package/dist/schema/tx.mjs.map +0 -1
  147. package/dist/types/index.mjs +0 -11
  148. package/dist/types/index.mjs.map +0 -1
@@ -1,46 +0,0 @@
1
- #!/usr/bin/env node
2
- import { getGlobalFlags } from "../../flags/global.mjs";
3
- import { KeystoreManager } from "../../layers/keystore.mjs";
4
- import { OutputFormatter } from "../../layers/output.mjs";
5
- import "../../layers/index.mjs";
6
- import { Console, Effect } from "effect";
7
- import { Command } from "effect/unstable/cli";
8
- //#region src/commands/keystore/list.ts
9
- const listKeystoreHandler = () => Effect.gen(function* () {
10
- const keystoreManager = yield* KeystoreManager;
11
- const outputFormatter = yield* OutputFormatter;
12
- const globalFlags = yield* getGlobalFlags();
13
- const data = (yield* keystoreManager.listKeystores()).map((k) => ({
14
- alias: k.alias,
15
- address: k.data.address,
16
- path: k.path
17
- }));
18
- if (globalFlags.quiet) return;
19
- const output = yield* outputFormatter.format(data, globalFlags.out);
20
- yield* Console.log(output);
21
- });
22
- /**
23
- * Command that lists all stored keystores.
24
- */
25
- const listKeystoresCommand = Command.make("list", {}, () => listKeystoreHandler()).pipe(Command.withAlias("ls"), Command.withDescription("List all keystores"), Command.withExamples([
26
- {
27
- command: "namera keystore list",
28
- description: "List all keystores"
29
- },
30
- {
31
- command: "namera keystore list --output json",
32
- description: "List all keystores in json format"
33
- },
34
- {
35
- command: "namera keystore list --output ndjson",
36
- description: "List all keystores in ndjson format"
37
- },
38
- {
39
- command: "namera schema keystore.list",
40
- description: "Get the schema for the list command"
41
- }
42
- ]));
43
- //#endregion
44
- export { listKeystoresCommand };
45
-
46
- //# sourceMappingURL=list.mjs.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"list.mjs","names":["KeystoreManager.KeystoreManager","OutputFormatter.OutputFormatter"],"sources":["../../../src/commands/keystore/list.ts"],"sourcesContent":["import { Console, Effect } from \"effect\";\nimport { Command } from \"effect/unstable/cli\";\n\nimport { getGlobalFlags } from \"@/flags/global\";\nimport { KeystoreManager, OutputFormatter } from \"@/layers\";\n\nconst listKeystoreHandler = () =>\n Effect.gen(function* () {\n const keystoreManager = yield* KeystoreManager.KeystoreManager;\n const outputFormatter = yield* OutputFormatter.OutputFormatter;\n const globalFlags = yield* getGlobalFlags();\n\n const res = yield* keystoreManager.listKeystores();\n\n const data = res.map((k) => ({\n alias: k.alias,\n address: k.data.address,\n path: k.path,\n }));\n\n if (globalFlags.quiet) return;\n\n const output = yield* outputFormatter.format(data, globalFlags.out);\n yield* Console.log(output);\n });\n\n/**\n * Command that lists all stored keystores.\n */\nexport const listKeystoresCommand = Command.make(\"list\", {}, () =>\n listKeystoreHandler(),\n).pipe(\n Command.withAlias(\"ls\"),\n Command.withDescription(\"List all keystores\"),\n Command.withExamples([\n {\n command: \"namera keystore list\",\n description: \"List all keystores\",\n },\n {\n command: \"namera keystore list --output json\",\n description: \"List all keystores in json format\",\n },\n {\n command: \"namera keystore list --output ndjson\",\n description: \"List all keystores in ndjson format\",\n },\n {\n command: \"namera schema keystore.list\",\n description: \"Get the schema for the list command\",\n },\n ]),\n);\n"],"mappings":";;;;;;;;AAMA,MAAM,4BACJ,OAAO,IAAI,aAAa;CACtB,MAAM,kBAAkB,OAAOA;CAC/B,MAAM,kBAAkB,OAAOC;CAC/B,MAAM,cAAc,OAAO,gBAAgB;CAI3C,MAAM,QAAO,OAFM,gBAAgB,eAAe,EAEjC,KAAK,OAAO;EAC3B,OAAO,EAAE;EACT,SAAS,EAAE,KAAK;EAChB,MAAM,EAAE;EACT,EAAE;AAEH,KAAI,YAAY,MAAO;CAEvB,MAAM,SAAS,OAAO,gBAAgB,OAAO,MAAM,YAAY,IAAI;AACnE,QAAO,QAAQ,IAAI,OAAO;EAC1B;;;;AAKJ,MAAa,uBAAuB,QAAQ,KAAK,QAAQ,EAAE,QACzD,qBAAqB,CACtB,CAAC,KACA,QAAQ,UAAU,KAAK,EACvB,QAAQ,gBAAgB,qBAAqB,EAC7C,QAAQ,aAAa;CACnB;EACE,SAAS;EACT,aAAa;EACd;CACD;EACE,SAAS;EACT,aAAa;EACd;CACD;EACE,SAAS;EACT,aAAa;EACd;CACD;EACE,SAAS;EACT,aAAa;EACd;CACF,CAAC,CACH"}
@@ -1,51 +0,0 @@
1
- #!/usr/bin/env node
2
- import { RemoveKeystoreParams } from "../../dto/keystore.mjs";
3
- import "../../dto/index.mjs";
4
- import { getGlobalFlags } from "../../flags/global.mjs";
5
- import { KeystoreManager } from "../../layers/keystore.mjs";
6
- import { OutputFormatter } from "../../layers/output.mjs";
7
- import "../../layers/index.mjs";
8
- import { Console, Effect, Schema } from "effect";
9
- import { Command, Flag } from "effect/unstable/cli";
10
- //#region src/commands/keystore/remove.ts
11
- const handler = (flagAlias) => Effect.gen(function* () {
12
- const keystoreManager = yield* KeystoreManager;
13
- const outputFormatter = yield* OutputFormatter;
14
- const globalFlags = yield* getGlobalFlags();
15
- let params;
16
- if (globalFlags.params._tag === "Some") params = Schema.decodeUnknownSync(Schema.fromJsonString(RemoveKeystoreParams))(globalFlags.params.value);
17
- else {
18
- let alias;
19
- if (flagAlias._tag === "Some") alias = flagAlias.value;
20
- else alias = (yield* keystoreManager.selectKeystore({ message: "Select keystore:" })).alias;
21
- params = { alias };
22
- }
23
- yield* keystoreManager.removeKeystore(params);
24
- const data = { success: true };
25
- if (globalFlags.quiet) return;
26
- const output = yield* outputFormatter.format(data, globalFlags.out);
27
- yield* Console.log(output);
28
- });
29
- const alias = Flag.string("alias").pipe(Flag.withDescription("The alias of the keystore to remove"), Flag.withAlias("a"), Flag.optional);
30
- const removeKeystoreCommand = Command.make("remove", { alias }, ({ alias }) => handler(alias)).pipe(Command.withAlias("rm"), Command.withDescription("Remove a keystore"), Command.withExamples([
31
- {
32
- command: "namera keystore remove",
33
- description: "Remove a keystore with alias prompt"
34
- },
35
- {
36
- command: "namera keystore remove --alias my-wallet",
37
- description: "Remove a keystore with alias 'my-wallet'"
38
- },
39
- {
40
- command: `namera keystore remove --params '{"alias":"my-wallet"}'`,
41
- description: "Remove a keystore with json params"
42
- },
43
- {
44
- command: "namera schema keystore.remove",
45
- description: "Get the schema for the remove command"
46
- }
47
- ]));
48
- //#endregion
49
- export { removeKeystoreCommand };
50
-
51
- //# sourceMappingURL=remove.mjs.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"remove.mjs","names":["KeystoreManager.KeystoreManager","OutputFormatter.OutputFormatter"],"sources":["../../../src/commands/keystore/remove.ts"],"sourcesContent":["import { Console, Effect, type Option, Schema } from \"effect\";\nimport { Command, Flag } from \"effect/unstable/cli\";\n\nimport { RemoveKeystoreParams } from \"@/dto\";\nimport { getGlobalFlags } from \"@/flags/global\";\nimport { KeystoreManager, OutputFormatter } from \"@/layers\";\n\nconst handler = (flagAlias: Option.Option<string>) =>\n Effect.gen(function* () {\n const keystoreManager = yield* KeystoreManager.KeystoreManager;\n const outputFormatter = yield* OutputFormatter.OutputFormatter;\n const globalFlags = yield* getGlobalFlags();\n\n let params: RemoveKeystoreParams;\n\n if (globalFlags.params._tag === \"Some\") {\n params = Schema.decodeUnknownSync(\n Schema.fromJsonString(RemoveKeystoreParams),\n )(globalFlags.params.value);\n } else {\n let alias: string;\n\n if (flagAlias._tag === \"Some\") {\n alias = flagAlias.value;\n } else {\n const res = yield* keystoreManager.selectKeystore({\n message: \"Select keystore:\",\n });\n alias = res.alias;\n }\n\n params = { alias };\n }\n\n yield* keystoreManager.removeKeystore(params);\n\n const data = { success: true };\n\n if (globalFlags.quiet) return;\n const output = yield* outputFormatter.format(data, globalFlags.out);\n yield* Console.log(output);\n });\n\nconst alias = Flag.string(\"alias\").pipe(\n Flag.withDescription(\"The alias of the keystore to remove\"),\n Flag.withAlias(\"a\"),\n Flag.optional,\n);\n\nexport const removeKeystoreCommand = Command.make(\n \"remove\",\n { alias },\n ({ alias }) => handler(alias),\n).pipe(\n Command.withAlias(\"rm\"),\n Command.withDescription(\"Remove a keystore\"),\n Command.withExamples([\n {\n command: \"namera keystore remove\",\n description: \"Remove a keystore with alias prompt\",\n },\n {\n command: \"namera keystore remove --alias my-wallet\",\n description: \"Remove a keystore with alias 'my-wallet'\",\n },\n {\n command: `namera keystore remove --params '{\"alias\":\"my-wallet\"}'`,\n description: \"Remove a keystore with json params\",\n },\n {\n command: \"namera schema keystore.remove\",\n description: \"Get the schema for the remove command\",\n },\n ]),\n);\n"],"mappings":";;;;;;;;;;AAOA,MAAM,WAAW,cACf,OAAO,IAAI,aAAa;CACtB,MAAM,kBAAkB,OAAOA;CAC/B,MAAM,kBAAkB,OAAOC;CAC/B,MAAM,cAAc,OAAO,gBAAgB;CAE3C,IAAI;AAEJ,KAAI,YAAY,OAAO,SAAS,OAC9B,UAAS,OAAO,kBACd,OAAO,eAAe,qBAAqB,CAC5C,CAAC,YAAY,OAAO,MAAM;MACtB;EACL,IAAI;AAEJ,MAAI,UAAU,SAAS,OACrB,SAAQ,UAAU;MAKlB,UAAQ,OAHW,gBAAgB,eAAe,EAChD,SAAS,oBACV,CAAC,EACU;AAGd,WAAS,EAAE,OAAO;;AAGpB,QAAO,gBAAgB,eAAe,OAAO;CAE7C,MAAM,OAAO,EAAE,SAAS,MAAM;AAE9B,KAAI,YAAY,MAAO;CACvB,MAAM,SAAS,OAAO,gBAAgB,OAAO,MAAM,YAAY,IAAI;AACnE,QAAO,QAAQ,IAAI,OAAO;EAC1B;AAEJ,MAAM,QAAQ,KAAK,OAAO,QAAQ,CAAC,KACjC,KAAK,gBAAgB,sCAAsC,EAC3D,KAAK,UAAU,IAAI,EACnB,KAAK,SACN;AAED,MAAa,wBAAwB,QAAQ,KAC3C,UACA,EAAE,OAAO,GACR,EAAE,YAAY,QAAQ,MAAM,CAC9B,CAAC,KACA,QAAQ,UAAU,KAAK,EACvB,QAAQ,gBAAgB,oBAAoB,EAC5C,QAAQ,aAAa;CACnB;EACE,SAAS;EACT,aAAa;EACd;CACD;EACE,SAAS;EACT,aAAa;EACd;CACD;EACE,SAAS;EACT,aAAa;EACd;CACD;EACE,SAAS;EACT,aAAa;EACd;CACF,CAAC,CACH"}
@@ -1,13 +0,0 @@
1
- #!/usr/bin/env node
2
- import { startMcpCommand } from "./start.mjs";
3
- import { Effect } from "effect";
4
- import { CliError, Command } from "effect/unstable/cli";
5
- //#region src/commands/mcp/index.ts
6
- const mcpCommands = Command.make("mcp", {}, () => Effect.fail(new CliError.ShowHelp({
7
- commandPath: ["namera", "mcp"],
8
- errors: []
9
- }))).pipe(Command.withDescription("Start and manage the Namera MCP server"), Command.withSubcommands([startMcpCommand]));
10
- //#endregion
11
- export { mcpCommands };
12
-
13
- //# sourceMappingURL=index.mjs.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.mjs","names":[],"sources":["../../../src/commands/mcp/index.ts"],"sourcesContent":["import { Effect } from \"effect\";\nimport { CliError, Command } from \"effect/unstable/cli\";\n\nimport { startMcpCommand } from \"./start\";\n\nexport const mcpCommands = Command.make(\"mcp\", {}, () =>\n Effect.fail(\n new CliError.ShowHelp({\n commandPath: [\"namera\", \"mcp\"],\n errors: [],\n }),\n ),\n).pipe(\n Command.withDescription(\"Start and manage the Namera MCP server\"),\n Command.withSubcommands([startMcpCommand]),\n);\n"],"mappings":";;;;;AAKA,MAAa,cAAc,QAAQ,KAAK,OAAO,EAAE,QAC/C,OAAO,KACL,IAAI,SAAS,SAAS;CACpB,aAAa,CAAC,UAAU,MAAM;CAC9B,QAAQ,EAAE;CACX,CAAC,CACH,CACF,CAAC,KACA,QAAQ,gBAAgB,yCAAyC,EACjE,QAAQ,gBAAgB,CAAC,gBAAgB,CAAC,CAC3C"}
@@ -1,82 +0,0 @@
1
- #!/usr/bin/env node
2
- import { StartMcpServerParams } from "../../dto/mcp.mjs";
3
- import { getGlobalFlags } from "../../flags/global.mjs";
4
- import { SmartAccountManager } from "../../layers/smart-account.mjs";
5
- import { SessionKeyManager } from "../../layers/session-key.mjs";
6
- import { McpManager } from "../../layers/mcp.mjs";
7
- import "../../layers/index.mjs";
8
- import { Effect, Redacted, Schema } from "effect";
9
- import { Command, Flag } from "effect/unstable/cli";
10
- //#region src/commands/mcp/start.ts
11
- const handler = (flagSmartAccount, flagSessionKeys, flagTransport, flagPort) => Effect.gen(function* () {
12
- const smartAccountManager = yield* SmartAccountManager;
13
- const sessionKeyManager = yield* SessionKeyManager;
14
- const mcpManager = yield* McpManager;
15
- const globalFlags = yield* getGlobalFlags();
16
- let params;
17
- if (globalFlags.params._tag === "Some") params = Schema.decodeUnknownSync(Schema.fromJsonString(StartMcpServerParams))(globalFlags.params.value);
18
- else {
19
- let smartAccountAlias;
20
- let sessionKeys = {};
21
- let transport;
22
- let port;
23
- if (flagSmartAccount._tag === "Some") smartAccountAlias = flagSmartAccount.value;
24
- else smartAccountAlias = (yield* smartAccountManager.selectSmartAccount({ message: "Select smart account to use for the MCP server" })).alias;
25
- if (flagSessionKeys._tag === "Some") sessionKeys = flagSessionKeys.value;
26
- else {
27
- const keys = yield* sessionKeyManager.multiSelectSessionKeys({
28
- message: "Select session keys to use for the MCP server",
29
- smartAccount: smartAccountAlias
30
- });
31
- for (const key of keys) {
32
- const pass = yield* sessionKeyManager.getSessionKeyPassword({
33
- alias: key.alias,
34
- message: `Enter password for session key ${key.alias}:`
35
- });
36
- sessionKeys[key.alias] = Redacted.value(pass);
37
- }
38
- }
39
- if (flagTransport._tag === "Some") transport = flagTransport.value;
40
- else transport = "stdio";
41
- if (flagPort._tag === "Some") port = flagPort.value;
42
- else port = 8080;
43
- params = {
44
- smartAccountAlias,
45
- sessionKeys,
46
- transport,
47
- port
48
- };
49
- }
50
- yield* mcpManager.startMcpServer(params);
51
- });
52
- const smartAccount = Flag.string("smart-account").pipe(Flag.withAlias("sa"), Flag.optional, Flag.withDescription("The smart account alias to use for the MCP server"));
53
- const sessionKeys = Flag.keyValuePair("session-key").pipe(Flag.withAlias("sk"), Flag.optional, Flag.withDescription("The session key aliases, password pairs to use for the MCP server"));
54
- const transport = Flag.choice("transport", ["stdio", "http"]).pipe(Flag.withAlias("t"), Flag.optional, Flag.withDescription("The transport to use for the MCP server"));
55
- const port = Flag.integer("port").pipe(Flag.withAlias("p"), Flag.optional, Flag.withDescription("The port to use for the MCP server when using http transport"));
56
- const startMcpCommand = Command.make("start", {
57
- smartAccount,
58
- sessionKeys,
59
- transport,
60
- port
61
- }, ({ smartAccount, sessionKeys, transport, port }) => handler(smartAccount, sessionKeys, transport, port)).pipe(Command.withAlias("s"), Command.withDescription("Starts the local MCP server."), Command.withExamples([
62
- {
63
- command: "namera mcp start --smart-account my-smart --session-key my-key=my-password",
64
- description: "Starts the local MCP server with a single session key and the default transport"
65
- },
66
- {
67
- command: "namera mcp start --smart-account my-smart --session-key my-key=my-password --transport http --port 8080",
68
- description: "Starts the local MCP server with a single session key and http transport on port 8080"
69
- },
70
- {
71
- command: "namera mcp start --smart-account my-smart --session-key my-key=my-password --session-key my-other-key=my-other-password",
72
- description: "Starts the local MCP server with multiple session keys and the default transport"
73
- },
74
- {
75
- command: "namera schema mcp.start",
76
- description: "Get the schema for the start command"
77
- }
78
- ]));
79
- //#endregion
80
- export { startMcpCommand };
81
-
82
- //# sourceMappingURL=start.mjs.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"start.mjs","names":["SmartAccountManager.SmartAccountManager","SessionKeyManager.SessionKeyManager","McpManager.McpManager"],"sources":["../../../src/commands/mcp/start.ts"],"sourcesContent":["import { Effect, type Option, Redacted, Schema } from \"effect\";\nimport { Command, Flag } from \"effect/unstable/cli\";\n\nimport { StartMcpServerParams } from \"@/dto/mcp\";\nimport { getGlobalFlags } from \"@/flags/global\";\nimport { McpManager, SessionKeyManager, SmartAccountManager } from \"@/layers\";\n\nexport const handler = (\n flagSmartAccount: Option.Option<string>,\n flagSessionKeys: Option.Option<Record<string, string>>,\n flagTransport: Option.Option<\"stdio\" | \"http\">,\n flagPort: Option.Option<number>,\n) =>\n Effect.gen(function* () {\n const smartAccountManager = yield* SmartAccountManager.SmartAccountManager;\n const sessionKeyManager = yield* SessionKeyManager.SessionKeyManager;\n const mcpManager = yield* McpManager.McpManager;\n const globalFlags = yield* getGlobalFlags();\n\n let params: StartMcpServerParams;\n\n if (globalFlags.params._tag === \"Some\") {\n params = Schema.decodeUnknownSync(\n Schema.fromJsonString(StartMcpServerParams),\n )(globalFlags.params.value);\n } else {\n let smartAccountAlias: string;\n let sessionKeys: Record<string, string> = {};\n let transport: \"stdio\" | \"http\";\n let port: number;\n\n if (flagSmartAccount._tag === \"Some\") {\n smartAccountAlias = flagSmartAccount.value;\n } else {\n smartAccountAlias = (yield* smartAccountManager.selectSmartAccount({\n message: \"Select smart account to use for the MCP server\",\n })).alias;\n }\n\n if (flagSessionKeys._tag === \"Some\") {\n sessionKeys = flagSessionKeys.value;\n } else {\n const keys = yield* sessionKeyManager.multiSelectSessionKeys({\n message: \"Select session keys to use for the MCP server\",\n smartAccount: smartAccountAlias,\n });\n\n for (const key of keys) {\n const pass = yield* sessionKeyManager.getSessionKeyPassword({\n alias: key.alias,\n message: `Enter password for session key ${key.alias}:`,\n });\n sessionKeys[key.alias] = Redacted.value(pass);\n }\n }\n\n if (flagTransport._tag === \"Some\") {\n transport = flagTransport.value;\n } else {\n transport = \"stdio\";\n }\n\n if (flagPort._tag === \"Some\") {\n port = flagPort.value;\n } else {\n port = 8080;\n }\n\n params = { smartAccountAlias, sessionKeys, transport, port };\n }\n\n yield* mcpManager.startMcpServer(params);\n });\n\nconst smartAccount = Flag.string(\"smart-account\").pipe(\n Flag.withAlias(\"sa\"),\n Flag.optional,\n Flag.withDescription(\"The smart account alias to use for the MCP server\"),\n);\n\nconst sessionKeys = Flag.keyValuePair(\"session-key\").pipe(\n Flag.withAlias(\"sk\"),\n Flag.optional,\n Flag.withDescription(\n \"The session key aliases, password pairs to use for the MCP server\",\n ),\n);\n\nconst transport = Flag.choice(\"transport\", [\"stdio\", \"http\"]).pipe(\n Flag.withAlias(\"t\"),\n Flag.optional,\n Flag.withDescription(\"The transport to use for the MCP server\"),\n);\n\nconst port = Flag.integer(\"port\").pipe(\n Flag.withAlias(\"p\"),\n Flag.optional,\n Flag.withDescription(\n \"The port to use for the MCP server when using http transport\",\n ),\n);\n\nexport const startMcpCommand = Command.make(\n \"start\",\n { smartAccount, sessionKeys, transport, port },\n ({ smartAccount, sessionKeys, transport, port }) =>\n handler(smartAccount, sessionKeys, transport, port),\n).pipe(\n Command.withAlias(\"s\"),\n Command.withDescription(\"Starts the local MCP server.\"),\n Command.withExamples([\n {\n command:\n \"namera mcp start --smart-account my-smart --session-key my-key=my-password\",\n description:\n \"Starts the local MCP server with a single session key and the default transport\",\n },\n {\n command:\n \"namera mcp start --smart-account my-smart --session-key my-key=my-password --transport http --port 8080\",\n description:\n \"Starts the local MCP server with a single session key and http transport on port 8080\",\n },\n {\n command:\n \"namera mcp start --smart-account my-smart --session-key my-key=my-password --session-key my-other-key=my-other-password\",\n description:\n \"Starts the local MCP server with multiple session keys and the default transport\",\n },\n {\n command: \"namera schema mcp.start\",\n description: \"Get the schema for the start command\",\n },\n ]),\n);\n"],"mappings":";;;;;;;;;;AAOA,MAAa,WACX,kBACA,iBACA,eACA,aAEA,OAAO,IAAI,aAAa;CACtB,MAAM,sBAAsB,OAAOA;CACnC,MAAM,oBAAoB,OAAOC;CACjC,MAAM,aAAa,OAAOC;CAC1B,MAAM,cAAc,OAAO,gBAAgB;CAE3C,IAAI;AAEJ,KAAI,YAAY,OAAO,SAAS,OAC9B,UAAS,OAAO,kBACd,OAAO,eAAe,qBAAqB,CAC5C,CAAC,YAAY,OAAO,MAAM;MACtB;EACL,IAAI;EACJ,IAAI,cAAsC,EAAE;EAC5C,IAAI;EACJ,IAAI;AAEJ,MAAI,iBAAiB,SAAS,OAC5B,qBAAoB,iBAAiB;MAErC,sBAAqB,OAAO,oBAAoB,mBAAmB,EACjE,SAAS,kDACV,CAAC,EAAE;AAGN,MAAI,gBAAgB,SAAS,OAC3B,eAAc,gBAAgB;OACzB;GACL,MAAM,OAAO,OAAO,kBAAkB,uBAAuB;IAC3D,SAAS;IACT,cAAc;IACf,CAAC;AAEF,QAAK,MAAM,OAAO,MAAM;IACtB,MAAM,OAAO,OAAO,kBAAkB,sBAAsB;KAC1D,OAAO,IAAI;KACX,SAAS,kCAAkC,IAAI,MAAM;KACtD,CAAC;AACF,gBAAY,IAAI,SAAS,SAAS,MAAM,KAAK;;;AAIjD,MAAI,cAAc,SAAS,OACzB,aAAY,cAAc;MAE1B,aAAY;AAGd,MAAI,SAAS,SAAS,OACpB,QAAO,SAAS;MAEhB,QAAO;AAGT,WAAS;GAAE;GAAmB;GAAa;GAAW;GAAM;;AAG9D,QAAO,WAAW,eAAe,OAAO;EACxC;AAEJ,MAAM,eAAe,KAAK,OAAO,gBAAgB,CAAC,KAChD,KAAK,UAAU,KAAK,EACpB,KAAK,UACL,KAAK,gBAAgB,oDAAoD,CAC1E;AAED,MAAM,cAAc,KAAK,aAAa,cAAc,CAAC,KACnD,KAAK,UAAU,KAAK,EACpB,KAAK,UACL,KAAK,gBACH,oEACD,CACF;AAED,MAAM,YAAY,KAAK,OAAO,aAAa,CAAC,SAAS,OAAO,CAAC,CAAC,KAC5D,KAAK,UAAU,IAAI,EACnB,KAAK,UACL,KAAK,gBAAgB,0CAA0C,CAChE;AAED,MAAM,OAAO,KAAK,QAAQ,OAAO,CAAC,KAChC,KAAK,UAAU,IAAI,EACnB,KAAK,UACL,KAAK,gBACH,+DACD,CACF;AAED,MAAa,kBAAkB,QAAQ,KACrC,SACA;CAAE;CAAc;CAAa;CAAW;CAAM,GAC7C,EAAE,cAAc,aAAa,WAAW,WACvC,QAAQ,cAAc,aAAa,WAAW,KAAK,CACtD,CAAC,KACA,QAAQ,UAAU,IAAI,EACtB,QAAQ,gBAAgB,+BAA+B,EACvD,QAAQ,aAAa;CACnB;EACE,SACE;EACF,aACE;EACH;CACD;EACE,SACE;EACF,aACE;EACH;CACD;EACE,SACE;EACF,aACE;EACH;CACD;EACE,SAAS;EACT,aAAa;EACd;CACF,CAAC,CACH"}
@@ -1,53 +0,0 @@
1
- #!/usr/bin/env node
2
- import { CreateKeystoreParams, DecryptKeystoreParams, GetKeystoreParams, ImportKeystoreParams, ListKeystoreParams, RemoveKeystoreParams } from "../../dto/keystore.mjs";
3
- import { StartMcpServerParams } from "../../dto/mcp.mjs";
4
- import { CreateSessionKeyParams, GetSessionKeyInfoParams, GetSessionKeyStatusParams, ListSessionKeysParams, RemoveSessionKeyParams } from "../../dto/session-key.mjs";
5
- import { CreateSmartAccountParams, GetSmartAccountInfoParams, GetSmartAccountStatusParams, ImportSmartAccountParams, ListSmartAccountParams, RemoveSmartAccountParams } from "../../dto/smart-account.mjs";
6
- import "../../dto/index.mjs";
7
- import { extractPaths, getSchema } from "../../helpers/paths.mjs";
8
- import { Console, Effect, Schema } from "effect";
9
- import { Argument, Command } from "effect/unstable/cli";
10
- //#region src/commands/schema/index.ts
11
- /**
12
- * Schema registry keyed by command path.
13
- */
14
- const schemas = {
15
- keystore: {
16
- create: CreateKeystoreParams,
17
- decrypt: DecryptKeystoreParams,
18
- info: GetKeystoreParams,
19
- list: ListKeystoreParams,
20
- import: ImportKeystoreParams,
21
- remove: RemoveKeystoreParams
22
- },
23
- "smart-account": {
24
- create: CreateSmartAccountParams,
25
- list: ListSmartAccountParams,
26
- info: GetSmartAccountInfoParams,
27
- remove: RemoveSmartAccountParams,
28
- status: GetSmartAccountStatusParams,
29
- import: ImportSmartAccountParams
30
- },
31
- "session-key": {
32
- create: CreateSessionKeyParams,
33
- list: ListSessionKeysParams,
34
- info: GetSessionKeyInfoParams,
35
- remove: RemoveSessionKeyParams,
36
- status: GetSessionKeyStatusParams
37
- },
38
- mcp: { start: StartMcpServerParams }
39
- };
40
- const commands = extractPaths(schemas);
41
- const command = Argument.choice("command", commands).pipe(Argument.withDescription("The command to get the schema for"));
42
- /**
43
- * Command that prints JSON Schema for a given CLI command.
44
- */
45
- const schemaCommand = Command.make("schema", { command }, ({ command }) => Effect.gen(function* () {
46
- const schema = getSchema(schemas, command);
47
- const json = Schema.toJsonSchemaDocument(schema);
48
- yield* Console.log(JSON.stringify(json, null, 2));
49
- })).pipe(Command.withDescription("Get the schema for a command"));
50
- //#endregion
51
- export { schemaCommand };
52
-
53
- //# sourceMappingURL=index.mjs.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.mjs","names":["Dto.CreateKeystoreParams","Dto.DecryptKeystoreParams","Dto.GetKeystoreParams","Dto.ListKeystoreParams","Dto.ImportKeystoreParams","Dto.RemoveKeystoreParams","Dto.CreateSmartAccountParams","Dto.ListSmartAccountParams","Dto.GetSmartAccountInfoParams","Dto.RemoveSmartAccountParams","Dto.GetSmartAccountStatusParams","Dto.ImportSmartAccountParams","Dto.CreateSessionKeyParams","Dto.ListSessionKeysParams","Dto.GetSessionKeyInfoParams","Dto.RemoveSessionKeyParams","Dto.GetSessionKeyStatusParams","Dto.StartMcpServerParams"],"sources":["../../../src/commands/schema/index.ts"],"sourcesContent":["import { Console, Effect, Schema } from \"effect\";\nimport { Argument, Command } from \"effect/unstable/cli\";\n\nimport * as Dto from \"@/dto\";\nimport { extractPaths, getSchema } from \"@/helpers/paths\";\n\n/**\n * Schema registry keyed by command path.\n */\nconst schemas = {\n keystore: {\n create: Dto.CreateKeystoreParams,\n decrypt: Dto.DecryptKeystoreParams,\n info: Dto.GetKeystoreParams,\n list: Dto.ListKeystoreParams,\n import: Dto.ImportKeystoreParams,\n remove: Dto.RemoveKeystoreParams,\n },\n \"smart-account\": {\n create: Dto.CreateSmartAccountParams,\n list: Dto.ListSmartAccountParams,\n info: Dto.GetSmartAccountInfoParams,\n remove: Dto.RemoveSmartAccountParams,\n status: Dto.GetSmartAccountStatusParams,\n import: Dto.ImportSmartAccountParams,\n },\n \"session-key\": {\n create: Dto.CreateSessionKeyParams,\n list: Dto.ListSessionKeysParams,\n info: Dto.GetSessionKeyInfoParams,\n remove: Dto.RemoveSessionKeyParams,\n status: Dto.GetSessionKeyStatusParams,\n },\n mcp: {\n start: Dto.StartMcpServerParams,\n },\n};\n\nconst commands = extractPaths(schemas);\nconst command = Argument.choice(\"command\", commands).pipe(\n Argument.withDescription(\"The command to get the schema for\"),\n);\n\n/**\n * Command that prints JSON Schema for a given CLI command.\n */\nexport const schemaCommand = Command.make(\n \"schema\",\n { command },\n ({ command }) =>\n Effect.gen(function* () {\n const schema = getSchema(schemas, command);\n const json = Schema.toJsonSchemaDocument(schema);\n\n yield* Console.log(JSON.stringify(json, null, 2));\n }),\n).pipe(Command.withDescription(\"Get the schema for a command\"));\n"],"mappings":";;;;;;;;;;;;;AASA,MAAM,UAAU;CACd,UAAU;EACR,QAAQA;EACR,SAASC;EACT,MAAMC;EACN,MAAMC;EACN,QAAQC;EACR,QAAQC;EACT;CACD,iBAAiB;EACf,QAAQC;EACR,MAAMC;EACN,MAAMC;EACN,QAAQC;EACR,QAAQC;EACR,QAAQC;EACT;CACD,eAAe;EACb,QAAQC;EACR,MAAMC;EACN,MAAMC;EACN,QAAQC;EACR,QAAQC;EACT;CACD,KAAK,EACH,OAAOC,sBACR;CACF;AAED,MAAM,WAAW,aAAa,QAAQ;AACtC,MAAM,UAAU,SAAS,OAAO,WAAW,SAAS,CAAC,KACnD,SAAS,gBAAgB,oCAAoC,CAC9D;;;;AAKD,MAAa,gBAAgB,QAAQ,KACnC,UACA,EAAE,SAAS,GACV,EAAE,cACD,OAAO,IAAI,aAAa;CACtB,MAAM,SAAS,UAAU,SAAS,QAAQ;CAC1C,MAAM,OAAO,OAAO,qBAAqB,OAAO;AAEhD,QAAO,QAAQ,IAAI,KAAK,UAAU,MAAM,MAAM,EAAE,CAAC;EACjD,CACL,CAAC,KAAK,QAAQ,gBAAgB,+BAA+B,CAAC"}
@@ -1,87 +0,0 @@
1
- #!/usr/bin/env node
2
- import { getChain } from "../../../schema/chain.mjs";
3
- import "../../../schema/index.mjs";
4
- import { CreateSessionKeyParams } from "../../../dto/session-key.mjs";
5
- import "../../../dto/index.mjs";
6
- import { getGlobalFlags } from "../../../flags/global.mjs";
7
- import { PromptManager } from "../../../layers/prompt.mjs";
8
- import { Web3Service } from "../../../layers/web3.mjs";
9
- import { SmartAccountManager } from "../../../layers/smart-account.mjs";
10
- import { SessionKeyManager } from "../../../layers/session-key.mjs";
11
- import { OutputFormatter } from "../../../layers/output.mjs";
12
- import "../../../layers/index.mjs";
13
- import { getPoliciesFromUser } from "./prompts/index.mjs";
14
- import { Console, Effect, Redacted, Schema } from "effect";
15
- import { Command, Flag } from "effect/unstable/cli";
16
- //#region src/commands/session-key/create/index.ts
17
- const handler = (flagAlias, flagSmartAccountAlias, flagSessionKeyPassword, flagOwnerKeystorePassword) => Effect.gen(function* () {
18
- const promptManager = yield* PromptManager;
19
- const web3Service = yield* Web3Service;
20
- const smartAccountManager = yield* SmartAccountManager;
21
- const sessionKeyManager = yield* SessionKeyManager;
22
- const outputFormatter = yield* OutputFormatter;
23
- const globalFlags = yield* getGlobalFlags();
24
- let params;
25
- if (globalFlags.params._tag === "Some") params = Schema.decodeUnknownSync(Schema.fromJsonString(CreateSessionKeyParams))(globalFlags.params.value);
26
- else {
27
- let alias;
28
- let smartAccountAlias;
29
- let sessionKeyPassword;
30
- let ownerKeystorePassword;
31
- if (flagAlias._tag === "Some") alias = flagAlias.value;
32
- else alias = yield* promptManager.aliasPrompt({
33
- aliasType: "new",
34
- message: "Enter alias for session key:",
35
- type: "session-key"
36
- });
37
- if (flagSmartAccountAlias._tag === "Some") smartAccountAlias = flagSmartAccountAlias.value;
38
- else smartAccountAlias = (yield* smartAccountManager.selectSmartAccount({ message: "Select smart account:" })).alias;
39
- const chains = yield* web3Service.multiSelectChain({ message: "Select chains:" });
40
- if (flagSessionKeyPassword._tag === "Some") sessionKeyPassword = flagSessionKeyPassword.value;
41
- else sessionKeyPassword = yield* promptManager.passwordPrompt({ message: "Enter session key password:" });
42
- const sa = yield* smartAccountManager.getSmartAccount({ alias: smartAccountAlias });
43
- if (flagOwnerKeystorePassword._tag === "Some") ownerKeystorePassword = flagOwnerKeystorePassword.value;
44
- else ownerKeystorePassword = yield* promptManager.passwordPrompt({ message: `Enter keystore password for owner (${sa.data.ownerAlias}):` });
45
- const policyParams = yield* getPoliciesFromUser();
46
- params = {
47
- alias,
48
- chains,
49
- smartAccountAlias,
50
- sessionKeyPassword: Redacted.value(sessionKeyPassword),
51
- ownerKeystorePassword: Redacted.value(ownerKeystorePassword),
52
- policyParams
53
- };
54
- }
55
- const res = yield* sessionKeyManager.createSessionKey(params);
56
- const data = {
57
- ...res.data.sessionKeyType === "ecdsa" ? { sessionKeyAddress: res.data.sessionKeyAddress } : { passKeyName: res.data.passKeyName },
58
- smartAccount: res.data.smartAccountAlias,
59
- chains: res.data.serializedAccounts.map((a) => getChain(a.chain).name)
60
- };
61
- if (globalFlags.quiet) return;
62
- const output = yield* outputFormatter.format(data, globalFlags.out);
63
- yield* Console.log(output);
64
- });
65
- const alias = Flag.string("alias").pipe(Flag.withDescription("The alias of the session key to create"), Flag.withAlias("a"), Flag.optional);
66
- const smartAccountAlias = Flag.string("smart-account").pipe(Flag.withDescription("The alias of the smart account to create session key for"), Flag.withAlias("sa"), Flag.optional);
67
- const sessionKeyPassword = Flag.redacted("password").pipe(Flag.withDescription("Password to encrypt session key"), Flag.withAlias("p"), Flag.optional);
68
- const ownerKeystorePassword = Flag.redacted("owner-password").pipe(Flag.withDescription("Password to encrypt session key"), Flag.withAlias("op"), Flag.optional);
69
- /**
70
- * Command that creates a new session key and stores it locally.
71
- */
72
- const createSessionKeyCommand = Command.make("create", {
73
- alias,
74
- smartAccountAlias,
75
- sessionKeyPassword,
76
- ownerKeystorePassword
77
- }, ({ alias, smartAccountAlias, sessionKeyPassword, ownerKeystorePassword }) => handler(alias, smartAccountAlias, sessionKeyPassword, ownerKeystorePassword)).pipe(Command.withAlias("c"), Command.withDescription("Creates a new session key"), Command.withExamples([{
78
- command: "namera session-key create",
79
- description: "Creates a new session key with interactive prompts"
80
- }, {
81
- command: "namera schema session-key.create",
82
- description: "Get the schema for session key create command"
83
- }]));
84
- //#endregion
85
- export { createSessionKeyCommand };
86
-
87
- //# sourceMappingURL=index.mjs.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.mjs","names":["PromptManager.PromptManager","Web3Service.Web3Service","SmartAccountManager.SmartAccountManager","SessionKeyManager.SessionKeyManager","OutputFormatter.OutputFormatter"],"sources":["../../../../src/commands/session-key/create/index.ts"],"sourcesContent":["import { Console, Effect, type Option, Redacted, Schema } from \"effect\";\nimport { Command, Flag } from \"effect/unstable/cli\";\n\nimport { CreateSessionKeyParams } from \"@/dto\";\nimport { getGlobalFlags } from \"@/flags/global\";\nimport {\n OutputFormatter,\n PromptManager,\n SessionKeyManager,\n SmartAccountManager,\n Web3Service,\n} from \"@/layers\";\nimport { getChain } from \"@/schema\";\n\nimport { getPoliciesFromUser } from \"./prompts\";\n\nconst handler = (\n flagAlias: Option.Option<string>,\n flagSmartAccountAlias: Option.Option<string>,\n flagSessionKeyPassword: Option.Option<Redacted.Redacted<string>>,\n flagOwnerKeystorePassword: Option.Option<Redacted.Redacted<string>>,\n) =>\n Effect.gen(function* () {\n const promptManager = yield* PromptManager.PromptManager;\n const web3Service = yield* Web3Service.Web3Service;\n const smartAccountManager = yield* SmartAccountManager.SmartAccountManager;\n const sessionKeyManager = yield* SessionKeyManager.SessionKeyManager;\n const outputFormatter = yield* OutputFormatter.OutputFormatter;\n const globalFlags = yield* getGlobalFlags();\n\n let params: CreateSessionKeyParams;\n\n if (globalFlags.params._tag === \"Some\") {\n params = Schema.decodeUnknownSync(\n Schema.fromJsonString(CreateSessionKeyParams),\n )(globalFlags.params.value);\n } else {\n let alias: string;\n let smartAccountAlias: string;\n let sessionKeyPassword: Redacted.Redacted<string>;\n let ownerKeystorePassword: Redacted.Redacted<string>;\n\n if (flagAlias._tag === \"Some\") {\n alias = flagAlias.value;\n } else {\n alias = yield* promptManager.aliasPrompt({\n aliasType: \"new\",\n message: \"Enter alias for session key:\",\n type: \"session-key\",\n });\n }\n\n if (flagSmartAccountAlias._tag === \"Some\") {\n smartAccountAlias = flagSmartAccountAlias.value;\n } else {\n smartAccountAlias = (yield* smartAccountManager.selectSmartAccount({\n message: \"Select smart account:\",\n })).alias;\n }\n\n const chains = yield* web3Service.multiSelectChain({\n message: \"Select chains:\",\n });\n\n if (flagSessionKeyPassword._tag === \"Some\") {\n sessionKeyPassword = flagSessionKeyPassword.value;\n } else {\n sessionKeyPassword = yield* promptManager.passwordPrompt({\n message: \"Enter session key password:\",\n });\n }\n\n const sa = yield* smartAccountManager.getSmartAccount({\n alias: smartAccountAlias,\n });\n\n if (flagOwnerKeystorePassword._tag === \"Some\") {\n ownerKeystorePassword = flagOwnerKeystorePassword.value;\n } else {\n ownerKeystorePassword = yield* promptManager.passwordPrompt({\n message: `Enter keystore password for owner (${sa.data.ownerAlias}):`,\n });\n }\n\n const policyParams = yield* getPoliciesFromUser();\n\n params = {\n alias,\n chains,\n smartAccountAlias,\n sessionKeyPassword: Redacted.value(sessionKeyPassword),\n ownerKeystorePassword: Redacted.value(ownerKeystorePassword),\n policyParams,\n };\n }\n\n const res = yield* sessionKeyManager.createSessionKey(params);\n\n const data = {\n ...(res.data.sessionKeyType === \"ecdsa\"\n ? {\n sessionKeyAddress: res.data.sessionKeyAddress,\n }\n : {\n passKeyName: res.data.passKeyName,\n }),\n smartAccount: res.data.smartAccountAlias,\n chains: res.data.serializedAccounts.map((a) => getChain(a.chain).name),\n };\n\n if (globalFlags.quiet) return;\n\n const output = yield* outputFormatter.format(data, globalFlags.out);\n yield* Console.log(output);\n });\n\nconst alias = Flag.string(\"alias\").pipe(\n Flag.withDescription(\"The alias of the session key to create\"),\n Flag.withAlias(\"a\"),\n Flag.optional,\n);\n\nconst smartAccountAlias = Flag.string(\"smart-account\").pipe(\n Flag.withDescription(\n \"The alias of the smart account to create session key for\",\n ),\n Flag.withAlias(\"sa\"),\n Flag.optional,\n);\n\nconst sessionKeyPassword = Flag.redacted(\"password\").pipe(\n Flag.withDescription(\"Password to encrypt session key\"),\n Flag.withAlias(\"p\"),\n Flag.optional,\n);\n\nconst ownerKeystorePassword = Flag.redacted(\"owner-password\").pipe(\n Flag.withDescription(\"Password to encrypt session key\"),\n Flag.withAlias(\"op\"),\n Flag.optional,\n);\n\n/**\n * Command that creates a new session key and stores it locally.\n */\nexport const createSessionKeyCommand = Command.make(\n \"create\",\n { alias, smartAccountAlias, sessionKeyPassword, ownerKeystorePassword },\n ({ alias, smartAccountAlias, sessionKeyPassword, ownerKeystorePassword }) =>\n handler(\n alias,\n smartAccountAlias,\n sessionKeyPassword,\n ownerKeystorePassword,\n ),\n).pipe(\n Command.withAlias(\"c\"),\n Command.withDescription(\"Creates a new session key\"),\n Command.withExamples([\n {\n command: \"namera session-key create\",\n description: \"Creates a new session key with interactive prompts\",\n },\n {\n command: \"namera schema session-key.create\",\n description: \"Get the schema for session key create command\",\n },\n ]),\n);\n"],"mappings":";;;;;;;;;;;;;;;;AAgBA,MAAM,WACJ,WACA,uBACA,wBACA,8BAEA,OAAO,IAAI,aAAa;CACtB,MAAM,gBAAgB,OAAOA;CAC7B,MAAM,cAAc,OAAOC;CAC3B,MAAM,sBAAsB,OAAOC;CACnC,MAAM,oBAAoB,OAAOC;CACjC,MAAM,kBAAkB,OAAOC;CAC/B,MAAM,cAAc,OAAO,gBAAgB;CAE3C,IAAI;AAEJ,KAAI,YAAY,OAAO,SAAS,OAC9B,UAAS,OAAO,kBACd,OAAO,eAAe,uBAAuB,CAC9C,CAAC,YAAY,OAAO,MAAM;MACtB;EACL,IAAI;EACJ,IAAI;EACJ,IAAI;EACJ,IAAI;AAEJ,MAAI,UAAU,SAAS,OACrB,SAAQ,UAAU;MAElB,SAAQ,OAAO,cAAc,YAAY;GACvC,WAAW;GACX,SAAS;GACT,MAAM;GACP,CAAC;AAGJ,MAAI,sBAAsB,SAAS,OACjC,qBAAoB,sBAAsB;MAE1C,sBAAqB,OAAO,oBAAoB,mBAAmB,EACjE,SAAS,yBACV,CAAC,EAAE;EAGN,MAAM,SAAS,OAAO,YAAY,iBAAiB,EACjD,SAAS,kBACV,CAAC;AAEF,MAAI,uBAAuB,SAAS,OAClC,sBAAqB,uBAAuB;MAE5C,sBAAqB,OAAO,cAAc,eAAe,EACvD,SAAS,+BACV,CAAC;EAGJ,MAAM,KAAK,OAAO,oBAAoB,gBAAgB,EACpD,OAAO,mBACR,CAAC;AAEF,MAAI,0BAA0B,SAAS,OACrC,yBAAwB,0BAA0B;MAElD,yBAAwB,OAAO,cAAc,eAAe,EAC1D,SAAS,sCAAsC,GAAG,KAAK,WAAW,KACnE,CAAC;EAGJ,MAAM,eAAe,OAAO,qBAAqB;AAEjD,WAAS;GACP;GACA;GACA;GACA,oBAAoB,SAAS,MAAM,mBAAmB;GACtD,uBAAuB,SAAS,MAAM,sBAAsB;GAC5D;GACD;;CAGH,MAAM,MAAM,OAAO,kBAAkB,iBAAiB,OAAO;CAE7D,MAAM,OAAO;EACX,GAAI,IAAI,KAAK,mBAAmB,UAC5B,EACE,mBAAmB,IAAI,KAAK,mBAC7B,GACD,EACE,aAAa,IAAI,KAAK,aACvB;EACL,cAAc,IAAI,KAAK;EACvB,QAAQ,IAAI,KAAK,mBAAmB,KAAK,MAAM,SAAS,EAAE,MAAM,CAAC,KAAK;EACvE;AAED,KAAI,YAAY,MAAO;CAEvB,MAAM,SAAS,OAAO,gBAAgB,OAAO,MAAM,YAAY,IAAI;AACnE,QAAO,QAAQ,IAAI,OAAO;EAC1B;AAEJ,MAAM,QAAQ,KAAK,OAAO,QAAQ,CAAC,KACjC,KAAK,gBAAgB,yCAAyC,EAC9D,KAAK,UAAU,IAAI,EACnB,KAAK,SACN;AAED,MAAM,oBAAoB,KAAK,OAAO,gBAAgB,CAAC,KACrD,KAAK,gBACH,2DACD,EACD,KAAK,UAAU,KAAK,EACpB,KAAK,SACN;AAED,MAAM,qBAAqB,KAAK,SAAS,WAAW,CAAC,KACnD,KAAK,gBAAgB,kCAAkC,EACvD,KAAK,UAAU,IAAI,EACnB,KAAK,SACN;AAED,MAAM,wBAAwB,KAAK,SAAS,iBAAiB,CAAC,KAC5D,KAAK,gBAAgB,kCAAkC,EACvD,KAAK,UAAU,KAAK,EACpB,KAAK,SACN;;;;AAKD,MAAa,0BAA0B,QAAQ,KAC7C,UACA;CAAE;CAAO;CAAmB;CAAoB;CAAuB,GACtE,EAAE,OAAO,mBAAmB,oBAAoB,4BAC/C,QACE,OACA,mBACA,oBACA,sBACD,CACJ,CAAC,KACA,QAAQ,UAAU,IAAI,EACtB,QAAQ,gBAAgB,4BAA4B,EACpD,QAAQ,aAAa,CACnB;CACE,SAAS;CACT,aAAa;CACd,EACD;CACE,SAAS;CACT,aAAa;CACd,CACF,CAAC,CACH"}
@@ -1,52 +0,0 @@
1
- #!/usr/bin/env node
2
- import { Effect } from "effect";
3
- import { Prompt } from "effect/unstable/cli";
4
- //#region src/commands/session-key/create/prompts/base.ts
5
- const policyChoices = [
6
- {
7
- description: "Grant access to all operations",
8
- title: "Sudo Permission",
9
- value: "sudo"
10
- },
11
- {
12
- description: "Whitelist addresses, contract and functions",
13
- title: "Call Permission",
14
- value: "call"
15
- },
16
- {
17
- description: "Specify the start and end time for when the key is valid",
18
- title: "Timestamp Permission",
19
- value: "timestamp"
20
- },
21
- {
22
- description: "Specify the allowed gas usage for the session key",
23
- title: "Gas Permission",
24
- value: "gas"
25
- },
26
- {
27
- description: "Specify which addresses can verify signatures from this session key",
28
- title: "Signature Permission",
29
- value: "signature-caller"
30
- },
31
- {
32
- description: "Specify the allowed gas usage for the session key",
33
- title: "Rate Limit Permission",
34
- value: "rate-limit"
35
- },
36
- {
37
- description: "Complete the session key creation",
38
- title: "Done",
39
- value: "done"
40
- }
41
- ];
42
- const policyChoicePrompt = (prevPolicies) => Effect.gen(function* () {
43
- const choices = policyChoices.filter((c) => !prevPolicies.some((p) => p.type === c.value));
44
- return yield* Prompt.select({
45
- choices,
46
- message: "Select Permission type you want to add for this session key"
47
- });
48
- });
49
- //#endregion
50
- export { policyChoicePrompt };
51
-
52
- //# sourceMappingURL=base.mjs.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"base.mjs","names":[],"sources":["../../../../../src/commands/session-key/create/prompts/base.ts"],"sourcesContent":["import { Effect } from \"effect\";\nimport { Prompt } from \"effect/unstable/cli\";\n\nimport type { PolicyParams } from \"@/schema\";\n\nconst policyChoices = [\n {\n description: \"Grant access to all operations\",\n title: \"Sudo Permission\",\n value: \"sudo\",\n },\n {\n description: \"Whitelist addresses, contract and functions\",\n title: \"Call Permission\",\n value: \"call\",\n },\n {\n description: \"Specify the start and end time for when the key is valid\",\n title: \"Timestamp Permission\",\n value: \"timestamp\",\n },\n {\n description: \"Specify the allowed gas usage for the session key\",\n title: \"Gas Permission\",\n value: \"gas\",\n },\n {\n description:\n \"Specify which addresses can verify signatures from this session key\",\n title: \"Signature Permission\",\n value: \"signature-caller\",\n },\n {\n description: \"Specify the allowed gas usage for the session key\",\n title: \"Rate Limit Permission\",\n value: \"rate-limit\",\n },\n {\n description: \"Complete the session key creation\",\n title: \"Done\",\n value: \"done\",\n },\n] as const;\n\nexport const policyChoicePrompt = (prevPolicies: PolicyParams[]) =>\n Effect.gen(function* () {\n // show only those which are not in prevPolicies\n const choices = policyChoices.filter(\n (c) => !prevPolicies.some((p) => p.type === c.value),\n );\n\n const prompt = Prompt.select({\n choices,\n message: \"Select Permission type you want to add for this session key\",\n });\n\n return yield* prompt;\n });\n"],"mappings":";;;;AAKA,MAAM,gBAAgB;CACpB;EACE,aAAa;EACb,OAAO;EACP,OAAO;EACR;CACD;EACE,aAAa;EACb,OAAO;EACP,OAAO;EACR;CACD;EACE,aAAa;EACb,OAAO;EACP,OAAO;EACR;CACD;EACE,aAAa;EACb,OAAO;EACP,OAAO;EACR;CACD;EACE,aACE;EACF,OAAO;EACP,OAAO;EACR;CACD;EACE,aAAa;EACb,OAAO;EACP,OAAO;EACR;CACD;EACE,aAAa;EACb,OAAO;EACP,OAAO;EACR;CACF;AAED,MAAa,sBAAsB,iBACjC,OAAO,IAAI,aAAa;CAEtB,MAAM,UAAU,cAAc,QAC3B,MAAM,CAAC,aAAa,MAAM,MAAM,EAAE,SAAS,EAAE,MAAM,CACrD;AAOD,QAAO,OALQ,OAAO,OAAO;EAC3B;EACA,SAAS;EACV,CAEa;EACd"}
@@ -1,85 +0,0 @@
1
- #!/usr/bin/env node
2
- import { addressPrompt, etherPrompt } from "./common.mjs";
3
- import { Effect, FileSystem } from "effect";
4
- import { Prompt } from "effect/unstable/cli";
5
- import { parseEther, toFunctionSelector } from "viem";
6
- //#region src/commands/session-key/create/prompts/call.ts
7
- const getEOAPermission = () => Effect.gen(function* () {
8
- return [{
9
- target: yield* addressPrompt("Enter target address:"),
10
- valueLimit: parseEther(yield* etherPrompt("Max value that can be transferred (in ETH units):"), "wei")
11
- }];
12
- });
13
- const getSmartContractPermission = () => Effect.gen(function* () {
14
- const fs = yield* FileSystem.FileSystem;
15
- const address = yield* addressPrompt("Enter smart contract address:");
16
- const maxLimit = yield* etherPrompt("Max value that can be transferred (in ETH units)");
17
- const abiFilePath = yield* Prompt.file({ message: "Select the ABI file for the smart contract" });
18
- const abiString = yield* fs.readFileString(abiFilePath).pipe(Effect.orDie);
19
- const functions = JSON.parse(abiString).filter((e) => e.type === "function");
20
- const allowedFunctions = yield* Prompt.multiSelect({
21
- choices: functions.map((f) => {
22
- let signature = `${f.name}(`;
23
- for (let i = 0; i < f.inputs.length; i++) {
24
- const sep = f.inputs.length === 0 || i === f.inputs.length - 1 ? "" : ", ";
25
- const input = f.inputs[i];
26
- signature += `${input.type}${input.name ? ` ${input.name}` : ""}${sep}`;
27
- }
28
- signature += ")";
29
- return {
30
- description: signature,
31
- title: f.name,
32
- value: f
33
- };
34
- }),
35
- message: "Select the functions you want to allow",
36
- min: 1
37
- });
38
- const weiUnits = parseEther(maxLimit);
39
- return allowedFunctions.map((f) => {
40
- return {
41
- abi: [f],
42
- functionName: f.name,
43
- selector: toFunctionSelector(f),
44
- target: address,
45
- valueLimit: weiUnits
46
- };
47
- });
48
- });
49
- const getPermissions = () => Effect.gen(function* () {
50
- const permissions = [];
51
- const targetAddressPrompt = Prompt.select({
52
- choices: [{
53
- title: "EOA",
54
- value: "eoa"
55
- }, {
56
- title: "Smart Contract",
57
- value: "smart-contract"
58
- }],
59
- message: "Select target address type"
60
- });
61
- while (true) {
62
- if (permissions.length > 0) {
63
- if (!(yield* Prompt.confirm({ message: "Do you want to add another call permission?" }))) break;
64
- }
65
- if ((yield* targetAddressPrompt) === "eoa") {
66
- const res = yield* getEOAPermission();
67
- permissions.push(...res);
68
- } else {
69
- const res = yield* getSmartContractPermission();
70
- permissions.push(...res);
71
- }
72
- }
73
- return permissions;
74
- });
75
- const getCallPolicyParams = Effect.gen(function* () {
76
- return {
77
- permissions: yield* getPermissions(),
78
- policyVersion: "0.0.4",
79
- type: "call"
80
- };
81
- });
82
- //#endregion
83
- export { getCallPolicyParams };
84
-
85
- //# sourceMappingURL=call.mjs.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"call.mjs","names":[],"sources":["../../../../../src/commands/session-key/create/prompts/call.ts"],"sourcesContent":["import { Effect, FileSystem } from \"effect\";\nimport type { QuitError } from \"effect/Terminal\";\nimport { Prompt } from \"effect/unstable/cli\";\nimport type { SelectChoice } from \"effect/unstable/cli/Prompt\";\nimport {\n type Abi,\n type AbiFunction,\n type Address,\n parseEther,\n toFunctionSelector,\n} from \"viem\";\n\nimport type {\n CallPolicyParams,\n Permission,\n PermissionManual,\n PermissionWithABI,\n} from \"@/schema\";\n\nimport { addressPrompt, etherPrompt } from \"./common\";\n\nconst getEOAPermission = () =>\n Effect.gen(function* () {\n const target = yield* addressPrompt(\"Enter target address:\");\n const valueLimit = yield* etherPrompt(\n \"Max value that can be transferred (in ETH units):\",\n );\n const weiUnits = parseEther(valueLimit, \"wei\");\n\n return [\n {\n target: target as Address,\n valueLimit: weiUnits,\n },\n ] satisfies PermissionManual[];\n });\n\nconst getSmartContractPermission = () =>\n Effect.gen(function* () {\n const fs = yield* FileSystem.FileSystem;\n const address = yield* addressPrompt(\"Enter smart contract address:\");\n const maxLimit = yield* etherPrompt(\n \"Max value that can be transferred (in ETH units)\",\n );\n\n // 1. Get Abi File\n // TODO: Add Abi Validation\n const abiFilePath = yield* Prompt.file({\n message: \"Select the ABI file for the smart contract\",\n });\n\n const abiString = yield* fs.readFileString(abiFilePath).pipe(Effect.orDie);\n const abi = JSON.parse(abiString) as Abi;\n\n const functions = abi.filter((e) => e.type === \"function\");\n\n const allowedFunctions = yield* Prompt.multiSelect({\n choices: functions.map((f) => {\n let signature = `${f.name}(`;\n for (let i = 0; i < f.inputs.length; i++) {\n const sep =\n f.inputs.length === 0 || i === f.inputs.length - 1 ? \"\" : \", \";\n // biome-ignore lint/style/noNonNullAssertion: safe\n const input = f.inputs[i]!;\n signature += `${input.type}${input.name ? ` ${input.name}` : \"\"}${sep}`;\n }\n signature += \")\";\n return {\n description: signature,\n title: f.name,\n value: f,\n } as SelectChoice<AbiFunction>;\n }),\n message: \"Select the functions you want to allow\",\n min: 1,\n });\n\n const weiUnits = parseEther(maxLimit);\n\n const res: PermissionWithABI[] = allowedFunctions.map((f) => {\n return {\n abi: [f],\n functionName: f.name,\n selector: toFunctionSelector(f),\n target: address as Address,\n valueLimit: weiUnits,\n };\n });\n\n return res;\n });\n\nconst getPermissions = () =>\n Effect.gen(function* () {\n const permissions: Permission[] = [];\n\n const targetAddressPrompt = Prompt.select({\n choices: [\n {\n title: \"EOA\",\n value: \"eoa\",\n },\n {\n title: \"Smart Contract\",\n value: \"smart-contract\",\n },\n ],\n message: \"Select target address type\",\n });\n\n while (true) {\n if (permissions.length > 0) {\n const addMore = yield* Prompt.confirm({\n message: \"Do you want to add another call permission?\",\n });\n if (!addMore) break;\n }\n\n const targetAddress = yield* targetAddressPrompt;\n\n if (targetAddress === \"eoa\") {\n const res = yield* getEOAPermission();\n permissions.push(...res);\n } else {\n const res = yield* getSmartContractPermission();\n permissions.push(...res);\n }\n }\n\n return permissions;\n });\n\nexport const getCallPolicyParams: Effect.Effect<\n CallPolicyParams,\n QuitError,\n Prompt.Environment\n> = Effect.gen(function* () {\n const permissions = yield* getPermissions();\n\n return {\n permissions,\n policyVersion: \"0.0.4\",\n type: \"call\",\n };\n});\n"],"mappings":";;;;;;AAqBA,MAAM,yBACJ,OAAO,IAAI,aAAa;AAOtB,QAAO,CACL;EACU,eARU,cAAc,wBAAwB;EASxD,YALa,WAAW,OAHF,YACxB,oDACD,EACuC,MAKxB;EACb,CACF;EACD;AAEJ,MAAM,mCACJ,OAAO,IAAI,aAAa;CACtB,MAAM,KAAK,OAAO,WAAW;CAC7B,MAAM,UAAU,OAAO,cAAc,gCAAgC;CACrE,MAAM,WAAW,OAAO,YACtB,mDACD;CAID,MAAM,cAAc,OAAO,OAAO,KAAK,EACrC,SAAS,8CACV,CAAC;CAEF,MAAM,YAAY,OAAO,GAAG,eAAe,YAAY,CAAC,KAAK,OAAO,MAAM;CAG1E,MAAM,YAFM,KAAK,MAAM,UAEL,CAAI,QAAQ,MAAM,EAAE,SAAS,WAAW;CAE1D,MAAM,mBAAmB,OAAO,OAAO,YAAY;EACjD,SAAS,UAAU,KAAK,MAAM;GAC5B,IAAI,YAAY,GAAG,EAAE,KAAK;AAC1B,QAAK,IAAI,IAAI,GAAG,IAAI,EAAE,OAAO,QAAQ,KAAK;IACxC,MAAM,MACJ,EAAE,OAAO,WAAW,KAAK,MAAM,EAAE,OAAO,SAAS,IAAI,KAAK;IAE5D,MAAM,QAAQ,EAAE,OAAO;AACvB,iBAAa,GAAG,MAAM,OAAO,MAAM,OAAO,IAAI,MAAM,SAAS,KAAK;;AAEpE,gBAAa;AACb,UAAO;IACL,aAAa;IACb,OAAO,EAAE;IACT,OAAO;IACR;IACD;EACF,SAAS;EACT,KAAK;EACN,CAAC;CAEF,MAAM,WAAW,WAAW,SAAS;AAYrC,QAViC,iBAAiB,KAAK,MAAM;AAC3D,SAAO;GACL,KAAK,CAAC,EAAE;GACR,cAAc,EAAE;GAChB,UAAU,mBAAmB,EAAE;GAC/B,QAAQ;GACR,YAAY;GACb;GAGI;EACP;AAEJ,MAAM,uBACJ,OAAO,IAAI,aAAa;CACtB,MAAM,cAA4B,EAAE;CAEpC,MAAM,sBAAsB,OAAO,OAAO;EACxC,SAAS,CACP;GACE,OAAO;GACP,OAAO;GACR,EACD;GACE,OAAO;GACP,OAAO;GACR,CACF;EACD,SAAS;EACV,CAAC;AAEF,QAAO,MAAM;AACX,MAAI,YAAY,SAAS,GAIvB;OAAI,EAAC,OAHkB,OAAO,QAAQ,EACpC,SAAS,+CACV,CAAC,EACY;;AAKhB,OAAI,OAFyB,yBAEP,OAAO;GAC3B,MAAM,MAAM,OAAO,kBAAkB;AACrC,eAAY,KAAK,GAAG,IAAI;SACnB;GACL,MAAM,MAAM,OAAO,4BAA4B;AAC/C,eAAY,KAAK,GAAG,IAAI;;;AAI5B,QAAO;EACP;AAEJ,MAAa,sBAIT,OAAO,IAAI,aAAa;AAG1B,QAAO;EACL,oBAHyB,gBAAgB;EAIzC,eAAe;EACf,MAAM;EACP;EACD"}
@@ -1,27 +0,0 @@
1
- #!/usr/bin/env node
2
- import { EthereumAddress } from "../../../../schema/common.mjs";
3
- import "../../../../schema/index.mjs";
4
- import { Effect, Option, Schema } from "effect";
5
- import { Prompt } from "effect/unstable/cli";
6
- //#region src/commands/session-key/create/prompts/common.ts
7
- const addressPrompt = (message) => Prompt.text({
8
- message,
9
- validate: (value) => Effect.gen(function* () {
10
- const res = Schema.decodeUnknownOption(EthereumAddress)(value);
11
- if (Option.isNone(res)) return yield* Effect.fail("Invalid Ethereum Address");
12
- return value;
13
- })
14
- });
15
- const etherPrompt = (message) => Prompt.text({
16
- message,
17
- validate: (val) => Effect.gen(function* () {
18
- const schema = Schema.NumberFromString.check(Schema.isGreaterThanOrEqualTo(0));
19
- const res = Schema.decodeOption(schema)(val);
20
- if (Option.isNone(res)) return yield* Effect.fail("Invalid Number");
21
- return res.value.toString();
22
- })
23
- });
24
- //#endregion
25
- export { addressPrompt, etherPrompt };
26
-
27
- //# sourceMappingURL=common.mjs.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"common.mjs","names":[],"sources":["../../../../../src/commands/session-key/create/prompts/common.ts"],"sourcesContent":["import { Effect, Option, Schema } from \"effect\";\nimport { Prompt } from \"effect/unstable/cli\";\n\nimport { EthereumAddress } from \"@/schema\";\n\nexport const addressPrompt = (message: string) =>\n Prompt.text({\n message,\n validate: (value) =>\n Effect.gen(function* () {\n const res = Schema.decodeUnknownOption(EthereumAddress)(value);\n if (Option.isNone(res))\n return yield* Effect.fail(\"Invalid Ethereum Address\");\n return value;\n }),\n });\n\nexport const etherPrompt = (message: string) =>\n Prompt.text({\n message,\n validate: (val) =>\n Effect.gen(function* () {\n const schema = Schema.NumberFromString.check(\n Schema.isGreaterThanOrEqualTo(0),\n );\n const res = Schema.decodeOption(schema)(val);\n if (Option.isNone(res)) return yield* Effect.fail(\"Invalid Number\");\n return res.value.toString();\n }),\n });\n"],"mappings":";;;;;;AAKA,MAAa,iBAAiB,YAC5B,OAAO,KAAK;CACV;CACA,WAAW,UACT,OAAO,IAAI,aAAa;EACtB,MAAM,MAAM,OAAO,oBAAoB,gBAAgB,CAAC,MAAM;AAC9D,MAAI,OAAO,OAAO,IAAI,CACpB,QAAO,OAAO,OAAO,KAAK,2BAA2B;AACvD,SAAO;GACP;CACL,CAAC;AAEJ,MAAa,eAAe,YAC1B,OAAO,KAAK;CACV;CACA,WAAW,QACT,OAAO,IAAI,aAAa;EACtB,MAAM,SAAS,OAAO,iBAAiB,MACrC,OAAO,uBAAuB,EAAE,CACjC;EACD,MAAM,MAAM,OAAO,aAAa,OAAO,CAAC,IAAI;AAC5C,MAAI,OAAO,OAAO,IAAI,CAAE,QAAO,OAAO,OAAO,KAAK,iBAAiB;AACnE,SAAO,IAAI,MAAM,UAAU;GAC3B;CACL,CAAC"}
@@ -1,19 +0,0 @@
1
- #!/usr/bin/env node
2
- import { etherPrompt } from "./common.mjs";
3
- import { Effect } from "effect";
4
- import { Prompt } from "effect/unstable/cli";
5
- import { parseEther } from "viem";
6
- //#region src/commands/session-key/create/prompts/gas.ts
7
- const getGasPolicyParams = Effect.gen(function* () {
8
- const allowed = yield* etherPrompt("Total amount of gas allowed (in ETH units)");
9
- const enforcePaymaster = yield* Prompt.confirm({ message: "Should UserOperations require Paymaster?" });
10
- return {
11
- amount: parseEther(allowed),
12
- type: "gas",
13
- enforcePaymaster
14
- };
15
- });
16
- //#endregion
17
- export { getGasPolicyParams };
18
-
19
- //# sourceMappingURL=gas.mjs.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"gas.mjs","names":[],"sources":["../../../../../src/commands/session-key/create/prompts/gas.ts"],"sourcesContent":["import { Effect } from \"effect\";\nimport { Prompt } from \"effect/unstable/cli\";\nimport { parseEther } from \"viem\";\n\nimport type { GasPolicyParams } from \"@/schema\";\n\nimport { etherPrompt } from \"./common\";\n\nexport const getGasPolicyParams = Effect.gen(function* () {\n const allowed = yield* etherPrompt(\n \"Total amount of gas allowed (in ETH units)\",\n );\n\n const enforcePaymaster = yield* Prompt.confirm({\n message: \"Should UserOperations require Paymaster?\",\n });\n\n const weiUnits = parseEther(allowed);\n\n return {\n amount: weiUnits,\n type: \"gas\",\n enforcePaymaster,\n } satisfies GasPolicyParams;\n});\n"],"mappings":";;;;;;AAQA,MAAa,qBAAqB,OAAO,IAAI,aAAa;CACxD,MAAM,UAAU,OAAO,YACrB,6CACD;CAED,MAAM,mBAAmB,OAAO,OAAO,QAAQ,EAC7C,SAAS,4CACV,CAAC;AAIF,QAAO;EACL,QAHe,WAAW,QAGlB;EACR,MAAM;EACN;EACD;EACD"}