@ecomweb/cli 0.6.1 → 0.8.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 (191) hide show
  1. package/README.md +235 -40
  2. package/dist/base-command.d.ts +8 -0
  3. package/dist/base-command.js +43 -4
  4. package/dist/base-command.js.map +1 -1
  5. package/dist/commands/auth/login.d.ts +6 -4
  6. package/dist/commands/auth/login.js +117 -89
  7. package/dist/commands/auth/login.js.map +1 -1
  8. package/dist/commands/auth/logout.js +28 -9
  9. package/dist/commands/auth/logout.js.map +1 -1
  10. package/dist/commands/auth/profiles/delete.js +11 -0
  11. package/dist/commands/auth/profiles/delete.js.map +1 -1
  12. package/dist/commands/auth/profiles/list.js +2 -2
  13. package/dist/commands/auth/profiles/list.js.map +1 -1
  14. package/dist/commands/auth/status.js +17 -9
  15. package/dist/commands/auth/status.js.map +1 -1
  16. package/dist/commands/deploy.js +16 -3
  17. package/dist/commands/deploy.js.map +1 -1
  18. package/dist/commands/deployments/promote.js +1 -1
  19. package/dist/commands/deployments/promote.js.map +1 -1
  20. package/dist/commands/deployments/rollback.js +1 -1
  21. package/dist/commands/deployments/rollback.js.map +1 -1
  22. package/dist/commands/deployments/unpublish.js +1 -1
  23. package/dist/commands/deployments/unpublish.js.map +1 -1
  24. package/dist/commands/describe.d.ts +1 -1
  25. package/dist/commands/describe.js +4 -4
  26. package/dist/commands/describe.js.map +1 -1
  27. package/dist/commands/{init.d.ts → metafield-definitions/create.d.ts} +4 -6
  28. package/dist/commands/metafield-definitions/create.js +34 -0
  29. package/dist/commands/metafield-definitions/create.js.map +1 -0
  30. package/dist/commands/metafield-definitions/delete.d.ts +21 -0
  31. package/dist/commands/metafield-definitions/delete.js +32 -0
  32. package/dist/commands/metafield-definitions/delete.js.map +1 -0
  33. package/dist/commands/metafield-definitions/get.d.ts +21 -0
  34. package/dist/commands/metafield-definitions/get.js +30 -0
  35. package/dist/commands/metafield-definitions/get.js.map +1 -0
  36. package/dist/commands/metafield-definitions/list.d.ts +19 -0
  37. package/dist/commands/metafield-definitions/list.js +35 -0
  38. package/dist/commands/metafield-definitions/list.js.map +1 -0
  39. package/dist/commands/metafield-definitions/update.d.ts +23 -0
  40. package/dist/commands/metafield-definitions/update.js +39 -0
  41. package/dist/commands/metafield-definitions/update.js.map +1 -0
  42. package/dist/commands/{auth/verify.d.ts → metafields/get.d.ts} +2 -3
  43. package/dist/commands/metafields/get.js +32 -0
  44. package/dist/commands/metafields/get.js.map +1 -0
  45. package/dist/commands/metafields/set.d.ts +24 -0
  46. package/dist/commands/metafields/set.js +83 -0
  47. package/dist/commands/metafields/set.js.map +1 -0
  48. package/dist/commands/metaobject-definitions/create.d.ts +20 -0
  49. package/dist/commands/metaobject-definitions/create.js +33 -0
  50. package/dist/commands/metaobject-definitions/create.js.map +1 -0
  51. package/dist/commands/metaobject-definitions/delete.d.ts +21 -0
  52. package/dist/commands/metaobject-definitions/delete.js +32 -0
  53. package/dist/commands/metaobject-definitions/delete.js.map +1 -0
  54. package/dist/commands/metaobject-definitions/get.d.ts +21 -0
  55. package/dist/commands/metaobject-definitions/get.js +31 -0
  56. package/dist/commands/metaobject-definitions/get.js.map +1 -0
  57. package/dist/commands/metaobject-definitions/list.d.ts +20 -0
  58. package/dist/commands/metaobject-definitions/list.js +41 -0
  59. package/dist/commands/metaobject-definitions/list.js.map +1 -0
  60. package/dist/commands/metaobject-definitions/update.d.ts +23 -0
  61. package/dist/commands/metaobject-definitions/update.js +38 -0
  62. package/dist/commands/metaobject-definitions/update.js.map +1 -0
  63. package/dist/commands/metaobjects/create.d.ts +24 -0
  64. package/dist/commands/metaobjects/create.js +40 -0
  65. package/dist/commands/metaobjects/create.js.map +1 -0
  66. package/dist/commands/metaobjects/delete.d.ts +22 -0
  67. package/dist/commands/metaobjects/delete.js +34 -0
  68. package/dist/commands/metaobjects/delete.js.map +1 -0
  69. package/dist/commands/metaobjects/get.d.ts +22 -0
  70. package/dist/commands/metaobjects/get.js +32 -0
  71. package/dist/commands/metaobjects/get.js.map +1 -0
  72. package/dist/commands/metaobjects/list.d.ts +24 -0
  73. package/dist/commands/metaobjects/list.js +56 -0
  74. package/dist/commands/metaobjects/list.js.map +1 -0
  75. package/dist/commands/metaobjects/update.d.ts +27 -0
  76. package/dist/commands/metaobjects/update.js +45 -0
  77. package/dist/commands/metaobjects/update.js.map +1 -0
  78. package/dist/commands/storefront/init.d.ts +3 -1
  79. package/dist/commands/storefront/init.js +23 -2
  80. package/dist/commands/storefront/init.js.map +1 -1
  81. package/dist/commands/stores/create.d.ts +21 -0
  82. package/dist/commands/stores/create.js +68 -0
  83. package/dist/commands/stores/create.js.map +1 -0
  84. package/dist/commands/stores/current.js +1 -1
  85. package/dist/commands/stores/current.js.map +1 -1
  86. package/dist/commands/stores/list.js +3 -3
  87. package/dist/commands/stores/list.js.map +1 -1
  88. package/dist/commands/stores/switch.js +14 -6
  89. package/dist/commands/stores/switch.js.map +1 -1
  90. package/dist/commands/theme/create.d.ts +20 -0
  91. package/dist/commands/theme/create.js +40 -0
  92. package/dist/commands/theme/create.js.map +1 -0
  93. package/dist/commands/{auth/register.d.ts → theme/duplicate.d.ts} +4 -2
  94. package/dist/commands/theme/duplicate.js +34 -0
  95. package/dist/commands/theme/duplicate.js.map +1 -0
  96. package/dist/commands/theme/link.d.ts +24 -0
  97. package/dist/commands/theme/link.js +60 -0
  98. package/dist/commands/theme/link.js.map +1 -0
  99. package/dist/commands/{setup.d.ts → theme/list.d.ts} +2 -3
  100. package/dist/commands/theme/list.js +32 -0
  101. package/dist/commands/theme/list.js.map +1 -0
  102. package/dist/commands/theme/publish.d.ts +22 -0
  103. package/dist/commands/theme/publish.js +68 -0
  104. package/dist/commands/theme/publish.js.map +1 -0
  105. package/dist/commands/theme/schema/push.d.ts +20 -0
  106. package/dist/commands/theme/schema/push.js +61 -0
  107. package/dist/commands/theme/schema/push.js.map +1 -0
  108. package/dist/commands/theme/update.d.ts +23 -0
  109. package/dist/commands/theme/update.js +62 -0
  110. package/dist/commands/theme/update.js.map +1 -0
  111. package/dist/commands/theme/use.d.ts +23 -0
  112. package/dist/commands/theme/use.js +71 -0
  113. package/dist/commands/theme/use.js.map +1 -0
  114. package/dist/commands/theme/versions.d.ts +21 -0
  115. package/dist/commands/theme/versions.js +33 -0
  116. package/dist/commands/theme/versions.js.map +1 -0
  117. package/dist/lib/api-client.d.ts +5 -4
  118. package/dist/lib/api-client.js +32 -16
  119. package/dist/lib/api-client.js.map +1 -1
  120. package/dist/lib/codex-skill.d.ts +1 -1
  121. package/dist/lib/codex-skill.js +12 -8
  122. package/dist/lib/codex-skill.js.map +1 -1
  123. package/dist/lib/config.d.ts +6 -18
  124. package/dist/lib/config.js +35 -64
  125. package/dist/lib/config.js.map +1 -1
  126. package/dist/lib/credential-store.d.ts +44 -0
  127. package/dist/lib/credential-store.js +137 -0
  128. package/dist/lib/credential-store.js.map +1 -0
  129. package/dist/lib/custom-data.d.ts +42 -0
  130. package/dist/lib/custom-data.js +167 -0
  131. package/dist/lib/custom-data.js.map +1 -0
  132. package/dist/lib/deployments.d.ts +8 -1
  133. package/dist/lib/deployments.js +58 -11
  134. package/dist/lib/deployments.js.map +1 -1
  135. package/dist/lib/describe-metafields.d.ts +9 -0
  136. package/dist/lib/describe-metafields.js +213 -0
  137. package/dist/lib/describe-metafields.js.map +1 -0
  138. package/dist/lib/device-login.d.ts +22 -0
  139. package/dist/lib/device-login.js +66 -0
  140. package/dist/lib/device-login.js.map +1 -0
  141. package/dist/lib/errors.d.ts +1 -0
  142. package/dist/lib/errors.js +6 -1
  143. package/dist/lib/errors.js.map +1 -1
  144. package/dist/lib/file-lock.d.ts +6 -0
  145. package/dist/lib/file-lock.js +66 -0
  146. package/dist/lib/file-lock.js.map +1 -0
  147. package/dist/lib/live-confirm.d.ts +11 -0
  148. package/dist/lib/live-confirm.js +34 -0
  149. package/dist/lib/live-confirm.js.map +1 -0
  150. package/dist/lib/open-browser.d.ts +13 -0
  151. package/dist/lib/open-browser.js +38 -0
  152. package/dist/lib/open-browser.js.map +1 -0
  153. package/dist/lib/pending-login.d.ts +5 -0
  154. package/dist/lib/pending-login.js +39 -0
  155. package/dist/lib/pending-login.js.map +1 -0
  156. package/dist/lib/project-setup.d.ts +1 -0
  157. package/dist/lib/project-setup.js +20 -0
  158. package/dist/lib/project-setup.js.map +1 -1
  159. package/dist/lib/secure-file.d.ts +1 -0
  160. package/dist/lib/secure-file.js +15 -0
  161. package/dist/lib/secure-file.js.map +1 -0
  162. package/dist/lib/session.d.ts +40 -0
  163. package/dist/lib/session.js +80 -0
  164. package/dist/lib/session.js.map +1 -0
  165. package/dist/lib/store-selection.d.ts +19 -0
  166. package/dist/lib/store-selection.js +23 -0
  167. package/dist/lib/store-selection.js.map +1 -0
  168. package/dist/lib/template-scaffold.d.ts +1 -0
  169. package/dist/lib/template-scaffold.js +5 -2
  170. package/dist/lib/template-scaffold.js.map +1 -1
  171. package/dist/lib/theme-schema-export.d.ts +1 -1
  172. package/dist/lib/theme-schema-export.js +4 -5
  173. package/dist/lib/theme-schema-export.js.map +1 -1
  174. package/dist/lib/themes.d.ts +143 -0
  175. package/dist/lib/themes.js +277 -0
  176. package/dist/lib/themes.js.map +1 -0
  177. package/dist/lib/validators.js +16 -0
  178. package/dist/lib/validators.js.map +1 -1
  179. package/oclif.manifest.json +8168 -5388
  180. package/package.json +2 -1
  181. package/dist/commands/auth/register.js +0 -35
  182. package/dist/commands/auth/register.js.map +0 -1
  183. package/dist/commands/auth/verify.js +0 -43
  184. package/dist/commands/auth/verify.js.map +0 -1
  185. package/dist/commands/init.js +0 -84
  186. package/dist/commands/init.js.map +0 -1
  187. package/dist/commands/setup.js +0 -186
  188. package/dist/commands/setup.js.map +0 -1
  189. package/dist/lib/email-login.d.ts +0 -35
  190. package/dist/lib/email-login.js +0 -86
  191. package/dist/lib/email-login.js.map +0 -1
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@ecomweb/cli",
3
- "version": "0.6.1",
3
+ "version": "0.8.0",
4
4
  "description": "Agent-friendly CLI for the ecomweb platform",
5
5
  "author": "travistech20",
6
6
  "license": "MIT",
@@ -39,6 +39,7 @@
39
39
  },
40
40
  "dependencies": {
41
41
  "@inquirer/prompts": "^8.3.0",
42
+ "@napi-rs/keyring": "2.1.0",
42
43
  "@oclif/core": "^4.3.0",
43
44
  "@oclif/plugin-help": "^6.2.0",
44
45
  "axios": "^1.7.0",
@@ -1,35 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- const core_1 = require("@oclif/core");
4
- const base_command_1 = require("../../base-command");
5
- class AuthRegister extends base_command_1.BaseCommand {
6
- async run() {
7
- const email = this.getFlag("email");
8
- const name = this.getFlag("name");
9
- const result = await this.apiClient.post("/auth/signup", {
10
- email,
11
- ...(name && { name }),
12
- });
13
- this.outputJson({
14
- ...result,
15
- hint: `Run: ecomweb auth verify --email ${email} --code <6-digit-code-from-email>`,
16
- });
17
- }
18
- }
19
- AuthRegister.description = "Register a new account (sends OTP to email)";
20
- AuthRegister.examples = [
21
- 'ecomweb auth register --email user@example.com --name "John Doe"',
22
- "ecomweb auth register --email user@example.com",
23
- ];
24
- AuthRegister.flags = {
25
- ...base_command_1.BaseCommand.baseFlags,
26
- email: core_1.Flags.string({
27
- description: "Email address for the new account",
28
- required: true,
29
- }),
30
- name: core_1.Flags.string({
31
- description: "Display name for the account",
32
- }),
33
- };
34
- exports.default = AuthRegister;
35
- //# sourceMappingURL=register.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"register.js","sourceRoot":"","sources":["../../../src/commands/auth/register.ts"],"names":[],"mappings":";;AAAA,sCAAoC;AACpC,qDAAiD;AAEjD,MAAqB,YAAa,SAAQ,0BAAW;IAmBnD,KAAK,CAAC,GAAG;QACP,MAAM,KAAK,GAAG,IAAI,CAAC,OAAO,CAAS,OAAO,CAAE,CAAC;QAC7C,MAAM,IAAI,GAAG,IAAI,CAAC,OAAO,CAAS,MAAM,CAAC,CAAC;QAE1C,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,cAAc,EAAE;YACvD,KAAK;YACL,GAAG,CAAC,IAAI,IAAI,EAAE,IAAI,EAAE,CAAC;SACtB,CAAC,CAAC;QAEH,IAAI,CAAC,UAAU,CAAC;YACd,GAAG,MAAM;YACT,IAAI,EAAE,oCAAoC,KAAK,mCAAmC;SACnF,CAAC,CAAC;IACL,CAAC;;AA/BM,wBAAW,GAAG,6CAA6C,CAAC;AAE5D,qBAAQ,GAAG;IAChB,kEAAkE;IAClE,gDAAgD;CACjD,CAAC;AAEK,kBAAK,GAAG;IACb,GAAG,0BAAW,CAAC,SAAS;IACxB,KAAK,EAAE,YAAK,CAAC,MAAM,CAAC;QAClB,WAAW,EAAE,mCAAmC;QAChD,QAAQ,EAAE,IAAI;KACf,CAAC;IACF,IAAI,EAAE,YAAK,CAAC,MAAM,CAAC;QACjB,WAAW,EAAE,8BAA8B;KAC5C,CAAC;CACH,CAAC;kBAjBiB,YAAY"}
@@ -1,43 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- const core_1 = require("@oclif/core");
4
- const base_command_1 = require("../../base-command");
5
- class AuthVerify extends base_command_1.BaseCommand {
6
- async run() {
7
- const email = this.getFlag("email");
8
- const code = this.getFlag("code");
9
- const profileName = this.getFlag("profile") || "default";
10
- const result = await this.apiClient.post("/auth/verify", {
11
- email,
12
- token: code,
13
- });
14
- this.configManager.setJwtTokens({
15
- access_token: result.access_token,
16
- refresh_token: result.refresh_token,
17
- expires_at: result.expires_at,
18
- }, profileName);
19
- this.outputJson({
20
- message: "Authentication successful.",
21
- user: result.user,
22
- profile: profileName,
23
- hint: "Run: ecomweb init --store-name 'My Store' to create your first store",
24
- });
25
- }
26
- }
27
- AuthVerify.description = "Verify email with OTP code and authenticate";
28
- AuthVerify.examples = [
29
- "ecomweb auth verify --email user@example.com --code 123456",
30
- ];
31
- AuthVerify.flags = {
32
- ...base_command_1.BaseCommand.baseFlags,
33
- email: core_1.Flags.string({
34
- description: "Email address used during registration",
35
- required: true,
36
- }),
37
- code: core_1.Flags.string({
38
- description: "6-digit verification code from email",
39
- required: true,
40
- }),
41
- };
42
- exports.default = AuthVerify;
43
- //# sourceMappingURL=verify.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"verify.js","sourceRoot":"","sources":["../../../src/commands/auth/verify.ts"],"names":[],"mappings":";;AAAA,sCAAoC;AACpC,qDAAiD;AAEjD,MAAqB,UAAW,SAAQ,0BAAW;IAmBjD,KAAK,CAAC,GAAG;QACP,MAAM,KAAK,GAAG,IAAI,CAAC,OAAO,CAAS,OAAO,CAAE,CAAC;QAC7C,MAAM,IAAI,GAAG,IAAI,CAAC,OAAO,CAAS,MAAM,CAAE,CAAC;QAC3C,MAAM,WAAW,GAAG,IAAI,CAAC,OAAO,CAAS,SAAS,CAAC,IAAI,SAAS,CAAC;QAEjE,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,cAAc,EAAE;YACvD,KAAK;YACL,KAAK,EAAE,IAAI;SACZ,CAAC,CAAC;QAGH,IAAI,CAAC,aAAa,CAAC,YAAY,CAC7B;YACE,YAAY,EAAE,MAAM,CAAC,YAAY;YACjC,aAAa,EAAE,MAAM,CAAC,aAAa;YACnC,UAAU,EAAE,MAAM,CAAC,UAAU;SAC9B,EACD,WAAW,CACZ,CAAC;QAEF,IAAI,CAAC,UAAU,CAAC;YACd,OAAO,EAAE,4BAA4B;YACrC,IAAI,EAAE,MAAM,CAAC,IAAI;YACjB,OAAO,EAAE,WAAW;YACpB,IAAI,EAAE,sEAAsE;SAC7E,CAAC,CAAC;IACL,CAAC;;AA5CM,sBAAW,GAAG,6CAA6C,CAAC;AAE5D,mBAAQ,GAAG;IAChB,4DAA4D;CAC7D,CAAC;AAEK,gBAAK,GAAG;IACb,GAAG,0BAAW,CAAC,SAAS;IACxB,KAAK,EAAE,YAAK,CAAC,MAAM,CAAC;QAClB,WAAW,EAAE,wCAAwC;QACrD,QAAQ,EAAE,IAAI;KACf,CAAC;IACF,IAAI,EAAE,YAAK,CAAC,MAAM,CAAC;QACjB,WAAW,EAAE,sCAAsC;QACnD,QAAQ,EAAE,IAAI;KACf,CAAC;CACH,CAAC;kBAjBiB,UAAU"}
@@ -1,84 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- const core_1 = require("@oclif/core");
4
- const base_command_1 = require("../base-command");
5
- const errors_1 = require("../lib/errors");
6
- class Init extends base_command_1.BaseCommand {
7
- async run() {
8
- const profileName = this.getFlag("profile") || "default";
9
- await this.ensureJwtAuth(profileName);
10
- const storeName = this.getFlag("store-name");
11
- const storeDescription = this.getFlag("store-description");
12
- const keyName = this.getFlag("key-name");
13
- const result = await this.apiClient.post("/auth/init", {
14
- store_name: storeName,
15
- store_description: storeDescription,
16
- api_key_name: keyName,
17
- });
18
- this.configManager.setApiKey(result.api_key.plain_key, profileName);
19
- this.configManager.setStoreRef(result.store.ref, result.store.name);
20
- this.configManager.removeJwtTokens(profileName);
21
- this.outputJson({
22
- message: "Store created and API key configured successfully.",
23
- store: result.store,
24
- api_key: {
25
- key_id: result.api_key.key_id,
26
- key_prefix: result.api_key.key_prefix,
27
- warning: result.api_key.warning,
28
- },
29
- profile: profileName,
30
- hint: "You are now ready to use the CLI. Try: ecomweb products list",
31
- });
32
- }
33
- async ensureJwtAuth(profileName) {
34
- const tokens = this.configManager.getJwtTokens(profileName);
35
- if (!tokens) {
36
- throw new errors_1.CliError("NO_SESSION", "No authenticated session found.", errors_1.ExitCode.AUTH_FAILURE, {
37
- hint: 'Or in one step, with no session: ecomweb auth login --email <email> --store-name "My Store"',
38
- });
39
- }
40
- if (this.configManager.isJwtExpired(profileName)) {
41
- try {
42
- const refreshed = await this.apiClient.post("/auth/refresh", {
43
- refresh_token: tokens.refresh_token,
44
- });
45
- this.configManager.setJwtTokens({
46
- access_token: refreshed.access_token,
47
- refresh_token: refreshed.refresh_token,
48
- expires_at: refreshed.expires_at,
49
- }, profileName);
50
- this.apiClient.setJwtToken(refreshed.access_token);
51
- }
52
- catch {
53
- throw new errors_1.CliError("SESSION_EXPIRED", "Session expired and refresh failed.", errors_1.ExitCode.AUTH_FAILURE, {
54
- hint: 'Start over in one step: ecomweb auth login --email <email> --store-name "My Store"',
55
- });
56
- }
57
- }
58
- else {
59
- this.apiClient.setJwtToken(tokens.access_token);
60
- }
61
- }
62
- }
63
- Init.description = "Create a store and generate an API key (requires authenticated session)";
64
- Init.examples = [
65
- 'ecomweb init --store-name "My Store"',
66
- 'ecomweb init --store-name "My Store" --store-description "An awesome store"',
67
- 'ecomweb init --store-name "My Store" --key-name "Production Key"',
68
- ];
69
- Init.flags = {
70
- ...base_command_1.BaseCommand.baseFlags,
71
- "store-name": core_1.Flags.string({
72
- description: "Name for the new store",
73
- required: true,
74
- }),
75
- "store-description": core_1.Flags.string({
76
- description: "Description for the new store",
77
- }),
78
- "key-name": core_1.Flags.string({
79
- description: "Name for the generated API key",
80
- default: "CLI Key",
81
- }),
82
- };
83
- exports.default = Init;
84
- //# sourceMappingURL=init.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"init.js","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":"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"}
@@ -1,186 +0,0 @@
1
- "use strict";
2
- var __importDefault = (this && this.__importDefault) || function (mod) {
3
- return (mod && mod.__esModule) ? mod : { "default": mod };
4
- };
5
- Object.defineProperty(exports, "__esModule", { value: true });
6
- const core_1 = require("@oclif/core");
7
- const prompts_1 = require("@inquirer/prompts");
8
- const chalk_1 = __importDefault(require("chalk"));
9
- const base_command_1 = require("../base-command");
10
- const errors_1 = require("../lib/errors");
11
- const CREATE_NEW = "__create_new__";
12
- class Setup extends base_command_1.BaseCommand {
13
- async run() {
14
- if (!process.stdout.isTTY) {
15
- throw new errors_1.CliError("NON_INTERACTIVE", "The setup wizard requires an interactive terminal.", errors_1.ExitCode.VALIDATION, {
16
- hint: "Use the non-interactive commands instead:\n" +
17
- " ecomweb auth register --email <email>\n" +
18
- " ecomweb auth verify --email <email> --code <code>\n" +
19
- " ecomweb init --store-name <name>",
20
- });
21
- }
22
- const profileName = this.getFlag("profile") || "default";
23
- this.log("");
24
- this.log(chalk_1.default.bold(" Welcome to ecomweb!"));
25
- this.log(" Let's set up your store in a few steps.");
26
- this.log("");
27
- this.log(chalk_1.default.cyan(" ── Step 1 · Account ──────────────────────"));
28
- this.log("");
29
- const email = await (0, prompts_1.input)({
30
- message: "Enter your email:",
31
- validate: (value) => {
32
- if (!/^[^\s@]+@[^\s@]+\.[^\s@]+$/.test(value)) {
33
- return "Please enter a valid email address.";
34
- }
35
- return true;
36
- },
37
- });
38
- core_1.ux.action.start(" Sending verification code");
39
- try {
40
- await this.apiClient.post("/auth/signup", { email });
41
- }
42
- catch (error) {
43
- core_1.ux.action.stop(chalk_1.default.red("failed"));
44
- throw error;
45
- }
46
- core_1.ux.action.stop(chalk_1.default.green("sent!"));
47
- this.log(chalk_1.default.gray(` Check your inbox at ${email}`));
48
- this.log("");
49
- this.log(chalk_1.default.cyan(" ── Step 2 · Verify ───────────────────────"));
50
- this.log("");
51
- let verifyResult;
52
- let verified = false;
53
- const maxAttempts = 3;
54
- for (let attempt = 1; attempt <= maxAttempts; attempt++) {
55
- const code = await (0, prompts_1.input)({
56
- message: "Enter the 6-digit code from your email:",
57
- validate: (value) => {
58
- if (!/^\d{6}$/.test(value)) {
59
- return "Code must be exactly 6 digits.";
60
- }
61
- return true;
62
- },
63
- });
64
- try {
65
- verifyResult = await this.apiClient.post("/auth/verify", {
66
- email,
67
- token: code,
68
- });
69
- verified = true;
70
- break;
71
- }
72
- catch {
73
- const remaining = maxAttempts - attempt;
74
- if (remaining > 0) {
75
- this.log(chalk_1.default.yellow(` Invalid code. ${remaining} attempt${remaining > 1 ? "s" : ""} remaining.`));
76
- }
77
- }
78
- }
79
- if (!verified) {
80
- throw new errors_1.CliError("VERIFICATION_FAILED", "Too many failed verification attempts.", errors_1.ExitCode.AUTH_FAILURE, { hint: "Run: ecomweb setup to start over" });
81
- }
82
- this.log(chalk_1.default.green(" ✔ Email verified!"));
83
- this.log("");
84
- this.configManager.setJwtTokens({
85
- access_token: verifyResult.access_token,
86
- refresh_token: verifyResult.refresh_token,
87
- expires_at: verifyResult.expires_at,
88
- }, profileName);
89
- this.apiClient.setJwtToken(verifyResult.access_token);
90
- this.log(chalk_1.default.cyan(" ── Step 3 · Your Store ───────────────────"));
91
- this.log("");
92
- let existingStores = [];
93
- try {
94
- existingStores = await this.apiClient.get("/auth/stores");
95
- if (!Array.isArray(existingStores)) {
96
- existingStores = [];
97
- }
98
- }
99
- catch {
100
- existingStores = [];
101
- }
102
- let initBody;
103
- if (existingStores.length > 0) {
104
- const choices = [
105
- ...existingStores.map((s) => ({
106
- name: `${s.name} (ID: ${s.id})`,
107
- value: String(s.id),
108
- })),
109
- {
110
- name: chalk_1.default.dim("── Create a new store ──"),
111
- value: CREATE_NEW,
112
- },
113
- ];
114
- const selection = await (0, prompts_1.select)({
115
- message: "Select a store:",
116
- choices,
117
- });
118
- if (selection === CREATE_NEW) {
119
- initBody = await this.promptNewStore();
120
- }
121
- else {
122
- initBody = { store_ref: selection };
123
- }
124
- }
125
- else {
126
- initBody = await this.promptNewStore();
127
- }
128
- core_1.ux.action.start(initBody.store_ref
129
- ? " Generating API key"
130
- : " Creating store");
131
- let initResult;
132
- try {
133
- initResult = await this.apiClient.post("/auth/init", initBody);
134
- }
135
- catch (error) {
136
- core_1.ux.action.stop(chalk_1.default.red("failed"));
137
- throw error;
138
- }
139
- core_1.ux.action.stop(chalk_1.default.green("done!"));
140
- this.configManager.setApiKey(initResult.api_key.plain_key, profileName);
141
- this.configManager.setStoreRef(initResult.store.ref, initResult.store.name);
142
- this.configManager.removeJwtTokens(profileName);
143
- this.log("");
144
- this.log(chalk_1.default.green(" ─────────────────────────────────────────"));
145
- this.log(chalk_1.default.green.bold(" ✔ All done! Your store is ready."));
146
- this.log("");
147
- this.log(` Store: ${chalk_1.default.bold(initResult.store.name)} (ref: ${initResult.store.ref})`);
148
- this.log(` API Key: ${chalk_1.default.dim(initResult.api_key.key_prefix + "...")} (saved)`);
149
- this.log(` Profile: ${profileName}`);
150
- this.log("");
151
- this.log(" Next steps:");
152
- this.log(chalk_1.default.cyan(" ecomweb products list"));
153
- this.log(chalk_1.default.cyan(" ecomweb orders list"));
154
- this.log(chalk_1.default.cyan(" ecomweb --help"));
155
- this.log("");
156
- }
157
- async promptNewStore() {
158
- const storeName = await (0, prompts_1.input)({
159
- message: "Store name:",
160
- validate: (value) => {
161
- if (value.length < 2)
162
- return "Name must be at least 2 characters.";
163
- if (value.length > 100)
164
- return "Name must be at most 100 characters.";
165
- return true;
166
- },
167
- });
168
- const storeDescription = await (0, prompts_1.input)({
169
- message: "Description (optional):",
170
- });
171
- return {
172
- store_name: storeName,
173
- ...(storeDescription && { store_description: storeDescription }),
174
- };
175
- }
176
- }
177
- Setup.description = "Interactive setup wizard — create account, verify email, and set up your store";
178
- Setup.examples = [
179
- "ecomweb setup",
180
- "ecomweb setup --profile staging",
181
- ];
182
- Setup.flags = {
183
- ...base_command_1.BaseCommand.baseFlags,
184
- };
185
- exports.default = Setup;
186
- //# sourceMappingURL=setup.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"setup.js","sourceRoot":"","sources":["../../src/commands/setup.ts"],"names":[],"mappings":"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"}
@@ -1,35 +0,0 @@
1
- export interface LoginClient {
2
- post<T = any>(path: string, body?: unknown): Promise<T>;
3
- get<T = any>(path: string): Promise<T>;
4
- setJwtToken(token: string): void;
5
- }
6
- export interface LoginStore {
7
- id: number;
8
- ref: string;
9
- name: string;
10
- }
11
- export interface LoginSession {
12
- access_token: string;
13
- refresh_token: string;
14
- expires_at: number;
15
- }
16
- export type LoginResult = {
17
- status: "code_sent";
18
- } | {
19
- status: "logged_in";
20
- store: LoginStore;
21
- apiKey: string;
22
- created?: boolean;
23
- };
24
- export declare function emailLogin(client: LoginClient, opts: {
25
- email: string;
26
- code?: string;
27
- storeRef?: string;
28
- storeName?: string;
29
- keyName?: string;
30
- askStoreName?: () => Promise<string>;
31
- askCode?: () => Promise<string>;
32
- chooseStore?: (stores: LoginStore[]) => Promise<LoginStore>;
33
- session?: LoginSession;
34
- onSession?: (session: LoginSession) => void;
35
- }): Promise<LoginResult>;
@@ -1,86 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.emailLogin = emailLogin;
4
- const errors_1 = require("./errors");
5
- async function emailLogin(client, opts) {
6
- let code = opts.code?.trim();
7
- let session = !code && opts.session ? await renewSession(client, opts.session) : undefined;
8
- if (!session) {
9
- if (!code) {
10
- await client.post("/auth/signup", { email: opts.email });
11
- if (!opts.askCode)
12
- return { status: "code_sent" };
13
- code = (await opts.askCode()).trim();
14
- }
15
- try {
16
- session = await client.post("/auth/verify", { email: opts.email, token: code });
17
- }
18
- catch (error) {
19
- if (isClientError(error)) {
20
- throw new errors_1.CliError("INVALID_CODE", "That code is wrong or has expired", errors_1.ExitCode.AUTH_FAILURE, {
21
- hint: `Get a new one: ecomweb auth login --email ${opts.email}`,
22
- });
23
- }
24
- throw error;
25
- }
26
- }
27
- client.setJwtToken(session.access_token);
28
- opts.onSession?.(session);
29
- const listed = await client.get("/auth/stores");
30
- const stores = (Array.isArray(listed) ? listed : listed.data ?? []).map((s) => ({ id: s.id, ref: s.ref, name: s.name }));
31
- const name = opts.storeName?.trim() || (!stores.length && opts.askStoreName ? (await opts.askStoreName()).trim() : "");
32
- if (name) {
33
- const created = await client.post("/auth/init", {
34
- store_name: name,
35
- api_key_name: opts.keyName ?? "CLI",
36
- });
37
- const { id, ref, name: storeName } = created.store;
38
- return { status: "logged_in", store: { id, ref, name: storeName }, apiKey: created.api_key.plain_key, created: true };
39
- }
40
- if (!stores.length) {
41
- throw new errors_1.CliError("NO_STORES", "This account has no store yet", errors_1.ExitCode.NOT_FOUND, {
42
- hint: `Name it to create it (no new code needed): ecomweb auth login --email ${opts.email} --store-name "My Store"`,
43
- });
44
- }
45
- let store;
46
- if (opts.storeRef) {
47
- store = stores.find((s) => s.ref === opts.storeRef);
48
- if (!store) {
49
- throw new errors_1.CliError("STORE_NOT_FOUND", `This account has no store "${opts.storeRef}"`, errors_1.ExitCode.NOT_FOUND, {
50
- details: { stores: stores.map(({ ref, name }) => ({ ref, name })) },
51
- });
52
- }
53
- }
54
- else if (stores.length === 1) {
55
- store = stores[0];
56
- }
57
- else if (opts.chooseStore) {
58
- store = await opts.chooseStore(stores);
59
- }
60
- else {
61
- throw new errors_1.CliError("STORE_REQUIRED", "This account has several stores: say which one with --store-ref", errors_1.ExitCode.VALIDATION, {
62
- hint: `Run again with no new code needed: ecomweb auth login --email ${opts.email} --store-ref <ref>`,
63
- details: { stores: stores.map(({ ref, name }) => ({ ref, name })) },
64
- });
65
- }
66
- const bound = await client.post("/auth/init", {
67
- store_id: store.id,
68
- api_key_name: opts.keyName ?? "CLI",
69
- });
70
- return { status: "logged_in", store: store, apiKey: bound.api_key.plain_key };
71
- }
72
- async function renewSession(client, kept) {
73
- try {
74
- return await client.post("/auth/refresh", { refresh_token: kept.refresh_token });
75
- }
76
- catch (error) {
77
- if (isClientError(error))
78
- return undefined;
79
- throw error;
80
- }
81
- }
82
- function isClientError(error) {
83
- const status = error.response?.status;
84
- return Boolean(status && status >= 400 && status < 500);
85
- }
86
- //# sourceMappingURL=email-login.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"email-login.js","sourceRoot":"","sources":["../../src/lib/email-login.ts"],"names":[],"mappings":"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"}