@ecomweb/cli 0.7.0 → 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 (76) hide show
  1. package/README.md +56 -32
  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/{auth/register.d.ts → stores/create.d.ts} +4 -3
  17. package/dist/commands/stores/create.js +68 -0
  18. package/dist/commands/stores/create.js.map +1 -0
  19. package/dist/commands/stores/current.js +1 -1
  20. package/dist/commands/stores/current.js.map +1 -1
  21. package/dist/commands/stores/list.js +3 -3
  22. package/dist/commands/stores/list.js.map +1 -1
  23. package/dist/commands/stores/switch.js +14 -6
  24. package/dist/commands/stores/switch.js.map +1 -1
  25. package/dist/lib/api-client.d.ts +5 -4
  26. package/dist/lib/api-client.js +32 -16
  27. package/dist/lib/api-client.js.map +1 -1
  28. package/dist/lib/codex-skill.d.ts +1 -1
  29. package/dist/lib/codex-skill.js +12 -8
  30. package/dist/lib/codex-skill.js.map +1 -1
  31. package/dist/lib/config.d.ts +6 -18
  32. package/dist/lib/config.js +35 -64
  33. package/dist/lib/config.js.map +1 -1
  34. package/dist/lib/credential-store.d.ts +44 -0
  35. package/dist/lib/credential-store.js +137 -0
  36. package/dist/lib/credential-store.js.map +1 -0
  37. package/dist/lib/device-login.d.ts +22 -0
  38. package/dist/lib/device-login.js +66 -0
  39. package/dist/lib/device-login.js.map +1 -0
  40. package/dist/lib/errors.d.ts +1 -0
  41. package/dist/lib/errors.js +6 -1
  42. package/dist/lib/errors.js.map +1 -1
  43. package/dist/lib/file-lock.d.ts +6 -0
  44. package/dist/lib/file-lock.js +66 -0
  45. package/dist/lib/file-lock.js.map +1 -0
  46. package/dist/lib/open-browser.d.ts +13 -0
  47. package/dist/lib/open-browser.js +38 -0
  48. package/dist/lib/open-browser.js.map +1 -0
  49. package/dist/lib/pending-login.d.ts +5 -0
  50. package/dist/lib/pending-login.js +39 -0
  51. package/dist/lib/pending-login.js.map +1 -0
  52. package/dist/lib/secure-file.d.ts +1 -0
  53. package/dist/lib/secure-file.js +15 -0
  54. package/dist/lib/secure-file.js.map +1 -0
  55. package/dist/lib/session.d.ts +40 -0
  56. package/dist/lib/session.js +80 -0
  57. package/dist/lib/session.js.map +1 -0
  58. package/dist/lib/store-selection.d.ts +19 -0
  59. package/dist/lib/store-selection.js +23 -0
  60. package/dist/lib/store-selection.js.map +1 -0
  61. package/oclif.manifest.json +227 -578
  62. package/package.json +2 -1
  63. package/dist/commands/auth/register.js +0 -35
  64. package/dist/commands/auth/register.js.map +0 -1
  65. package/dist/commands/auth/verify.d.ts +0 -20
  66. package/dist/commands/auth/verify.js +0 -43
  67. package/dist/commands/auth/verify.js.map +0 -1
  68. package/dist/commands/init.d.ts +0 -22
  69. package/dist/commands/init.js +0 -84
  70. package/dist/commands/init.js.map +0 -1
  71. package/dist/commands/setup.d.ts +0 -19
  72. package/dist/commands/setup.js +0 -186
  73. package/dist/commands/setup.js.map +0 -1
  74. package/dist/lib/email-login.d.ts +0 -35
  75. package/dist/lib/email-login.js +0 -86
  76. 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.7.0",
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,20 +0,0 @@
1
- import { BaseCommand } from "../../base-command";
2
- export default class AuthVerify extends BaseCommand {
3
- static description: string;
4
- static examples: string[];
5
- static flags: {
6
- email: import("@oclif/core/lib/interfaces").OptionFlag<string, import("@oclif/core/lib/interfaces").CustomOptions>;
7
- code: import("@oclif/core/lib/interfaces").OptionFlag<string, import("@oclif/core/lib/interfaces").CustomOptions>;
8
- "store-ref": import("@oclif/core/lib/interfaces").OptionFlag<string | undefined, import("@oclif/core/lib/interfaces").CustomOptions>;
9
- "api-key": import("@oclif/core/lib/interfaces").OptionFlag<string | undefined, import("@oclif/core/lib/interfaces").CustomOptions>;
10
- "api-url": import("@oclif/core/lib/interfaces").OptionFlag<string | undefined, import("@oclif/core/lib/interfaces").CustomOptions>;
11
- output: import("@oclif/core/lib/interfaces").OptionFlag<string, import("@oclif/core/lib/interfaces").CustomOptions>;
12
- quiet: import("@oclif/core/lib/interfaces").BooleanFlag<boolean>;
13
- "dry-run": import("@oclif/core/lib/interfaces").BooleanFlag<boolean>;
14
- profile: import("@oclif/core/lib/interfaces").OptionFlag<string | undefined, import("@oclif/core/lib/interfaces").CustomOptions>;
15
- full: import("@oclif/core/lib/interfaces").BooleanFlag<boolean>;
16
- fields: import("@oclif/core/lib/interfaces").OptionFlag<string | undefined, import("@oclif/core/lib/interfaces").CustomOptions>;
17
- exclude: import("@oclif/core/lib/interfaces").OptionFlag<string | undefined, import("@oclif/core/lib/interfaces").CustomOptions>;
18
- };
19
- run(): Promise<void>;
20
- }
@@ -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,22 +0,0 @@
1
- import { BaseCommand } from "../base-command";
2
- export default class Init extends BaseCommand {
3
- static description: string;
4
- static examples: string[];
5
- static flags: {
6
- "store-name": import("@oclif/core/lib/interfaces").OptionFlag<string, import("@oclif/core/lib/interfaces").CustomOptions>;
7
- "store-description": import("@oclif/core/lib/interfaces").OptionFlag<string | undefined, import("@oclif/core/lib/interfaces").CustomOptions>;
8
- "key-name": import("@oclif/core/lib/interfaces").OptionFlag<string, import("@oclif/core/lib/interfaces").CustomOptions>;
9
- "store-ref": import("@oclif/core/lib/interfaces").OptionFlag<string | undefined, import("@oclif/core/lib/interfaces").CustomOptions>;
10
- "api-key": import("@oclif/core/lib/interfaces").OptionFlag<string | undefined, import("@oclif/core/lib/interfaces").CustomOptions>;
11
- "api-url": import("@oclif/core/lib/interfaces").OptionFlag<string | undefined, import("@oclif/core/lib/interfaces").CustomOptions>;
12
- output: import("@oclif/core/lib/interfaces").OptionFlag<string, import("@oclif/core/lib/interfaces").CustomOptions>;
13
- quiet: import("@oclif/core/lib/interfaces").BooleanFlag<boolean>;
14
- "dry-run": import("@oclif/core/lib/interfaces").BooleanFlag<boolean>;
15
- profile: import("@oclif/core/lib/interfaces").OptionFlag<string | undefined, import("@oclif/core/lib/interfaces").CustomOptions>;
16
- full: import("@oclif/core/lib/interfaces").BooleanFlag<boolean>;
17
- fields: import("@oclif/core/lib/interfaces").OptionFlag<string | undefined, import("@oclif/core/lib/interfaces").CustomOptions>;
18
- exclude: import("@oclif/core/lib/interfaces").OptionFlag<string | undefined, import("@oclif/core/lib/interfaces").CustomOptions>;
19
- };
20
- run(): Promise<void>;
21
- private ensureJwtAuth;
22
- }
@@ -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,19 +0,0 @@
1
- import { BaseCommand } from "../base-command";
2
- export default class Setup extends BaseCommand {
3
- static description: string;
4
- static examples: string[];
5
- static flags: {
6
- "store-ref": import("@oclif/core/lib/interfaces").OptionFlag<string | undefined, import("@oclif/core/lib/interfaces").CustomOptions>;
7
- "api-key": import("@oclif/core/lib/interfaces").OptionFlag<string | undefined, import("@oclif/core/lib/interfaces").CustomOptions>;
8
- "api-url": import("@oclif/core/lib/interfaces").OptionFlag<string | undefined, import("@oclif/core/lib/interfaces").CustomOptions>;
9
- output: import("@oclif/core/lib/interfaces").OptionFlag<string, import("@oclif/core/lib/interfaces").CustomOptions>;
10
- quiet: import("@oclif/core/lib/interfaces").BooleanFlag<boolean>;
11
- "dry-run": import("@oclif/core/lib/interfaces").BooleanFlag<boolean>;
12
- profile: import("@oclif/core/lib/interfaces").OptionFlag<string | undefined, import("@oclif/core/lib/interfaces").CustomOptions>;
13
- full: import("@oclif/core/lib/interfaces").BooleanFlag<boolean>;
14
- fields: import("@oclif/core/lib/interfaces").OptionFlag<string | undefined, import("@oclif/core/lib/interfaces").CustomOptions>;
15
- exclude: import("@oclif/core/lib/interfaces").OptionFlag<string | undefined, import("@oclif/core/lib/interfaces").CustomOptions>;
16
- };
17
- run(): Promise<void>;
18
- private promptNewStore;
19
- }
@@ -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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"}