@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.
- package/README.md +235 -40
- package/dist/base-command.d.ts +8 -0
- package/dist/base-command.js +43 -4
- package/dist/base-command.js.map +1 -1
- package/dist/commands/auth/login.d.ts +6 -4
- package/dist/commands/auth/login.js +117 -89
- package/dist/commands/auth/login.js.map +1 -1
- package/dist/commands/auth/logout.js +28 -9
- package/dist/commands/auth/logout.js.map +1 -1
- package/dist/commands/auth/profiles/delete.js +11 -0
- package/dist/commands/auth/profiles/delete.js.map +1 -1
- package/dist/commands/auth/profiles/list.js +2 -2
- package/dist/commands/auth/profiles/list.js.map +1 -1
- package/dist/commands/auth/status.js +17 -9
- package/dist/commands/auth/status.js.map +1 -1
- package/dist/commands/deploy.js +16 -3
- package/dist/commands/deploy.js.map +1 -1
- package/dist/commands/deployments/promote.js +1 -1
- package/dist/commands/deployments/promote.js.map +1 -1
- package/dist/commands/deployments/rollback.js +1 -1
- package/dist/commands/deployments/rollback.js.map +1 -1
- package/dist/commands/deployments/unpublish.js +1 -1
- package/dist/commands/deployments/unpublish.js.map +1 -1
- package/dist/commands/describe.d.ts +1 -1
- package/dist/commands/describe.js +4 -4
- package/dist/commands/describe.js.map +1 -1
- package/dist/commands/{init.d.ts → metafield-definitions/create.d.ts} +4 -6
- package/dist/commands/metafield-definitions/create.js +34 -0
- package/dist/commands/metafield-definitions/create.js.map +1 -0
- package/dist/commands/metafield-definitions/delete.d.ts +21 -0
- package/dist/commands/metafield-definitions/delete.js +32 -0
- package/dist/commands/metafield-definitions/delete.js.map +1 -0
- package/dist/commands/metafield-definitions/get.d.ts +21 -0
- package/dist/commands/metafield-definitions/get.js +30 -0
- package/dist/commands/metafield-definitions/get.js.map +1 -0
- package/dist/commands/metafield-definitions/list.d.ts +19 -0
- package/dist/commands/metafield-definitions/list.js +35 -0
- package/dist/commands/metafield-definitions/list.js.map +1 -0
- package/dist/commands/metafield-definitions/update.d.ts +23 -0
- package/dist/commands/metafield-definitions/update.js +39 -0
- package/dist/commands/metafield-definitions/update.js.map +1 -0
- package/dist/commands/{auth/verify.d.ts → metafields/get.d.ts} +2 -3
- package/dist/commands/metafields/get.js +32 -0
- package/dist/commands/metafields/get.js.map +1 -0
- package/dist/commands/metafields/set.d.ts +24 -0
- package/dist/commands/metafields/set.js +83 -0
- package/dist/commands/metafields/set.js.map +1 -0
- package/dist/commands/metaobject-definitions/create.d.ts +20 -0
- package/dist/commands/metaobject-definitions/create.js +33 -0
- package/dist/commands/metaobject-definitions/create.js.map +1 -0
- package/dist/commands/metaobject-definitions/delete.d.ts +21 -0
- package/dist/commands/metaobject-definitions/delete.js +32 -0
- package/dist/commands/metaobject-definitions/delete.js.map +1 -0
- package/dist/commands/metaobject-definitions/get.d.ts +21 -0
- package/dist/commands/metaobject-definitions/get.js +31 -0
- package/dist/commands/metaobject-definitions/get.js.map +1 -0
- package/dist/commands/metaobject-definitions/list.d.ts +20 -0
- package/dist/commands/metaobject-definitions/list.js +41 -0
- package/dist/commands/metaobject-definitions/list.js.map +1 -0
- package/dist/commands/metaobject-definitions/update.d.ts +23 -0
- package/dist/commands/metaobject-definitions/update.js +38 -0
- package/dist/commands/metaobject-definitions/update.js.map +1 -0
- package/dist/commands/metaobjects/create.d.ts +24 -0
- package/dist/commands/metaobjects/create.js +40 -0
- package/dist/commands/metaobjects/create.js.map +1 -0
- package/dist/commands/metaobjects/delete.d.ts +22 -0
- package/dist/commands/metaobjects/delete.js +34 -0
- package/dist/commands/metaobjects/delete.js.map +1 -0
- package/dist/commands/metaobjects/get.d.ts +22 -0
- package/dist/commands/metaobjects/get.js +32 -0
- package/dist/commands/metaobjects/get.js.map +1 -0
- package/dist/commands/metaobjects/list.d.ts +24 -0
- package/dist/commands/metaobjects/list.js +56 -0
- package/dist/commands/metaobjects/list.js.map +1 -0
- package/dist/commands/metaobjects/update.d.ts +27 -0
- package/dist/commands/metaobjects/update.js +45 -0
- package/dist/commands/metaobjects/update.js.map +1 -0
- package/dist/commands/storefront/init.d.ts +3 -1
- package/dist/commands/storefront/init.js +23 -2
- package/dist/commands/storefront/init.js.map +1 -1
- package/dist/commands/stores/create.d.ts +21 -0
- package/dist/commands/stores/create.js +68 -0
- package/dist/commands/stores/create.js.map +1 -0
- package/dist/commands/stores/current.js +1 -1
- package/dist/commands/stores/current.js.map +1 -1
- package/dist/commands/stores/list.js +3 -3
- package/dist/commands/stores/list.js.map +1 -1
- package/dist/commands/stores/switch.js +14 -6
- package/dist/commands/stores/switch.js.map +1 -1
- package/dist/commands/theme/create.d.ts +20 -0
- package/dist/commands/theme/create.js +40 -0
- package/dist/commands/theme/create.js.map +1 -0
- package/dist/commands/{auth/register.d.ts → theme/duplicate.d.ts} +4 -2
- package/dist/commands/theme/duplicate.js +34 -0
- package/dist/commands/theme/duplicate.js.map +1 -0
- package/dist/commands/theme/link.d.ts +24 -0
- package/dist/commands/theme/link.js +60 -0
- package/dist/commands/theme/link.js.map +1 -0
- package/dist/commands/{setup.d.ts → theme/list.d.ts} +2 -3
- package/dist/commands/theme/list.js +32 -0
- package/dist/commands/theme/list.js.map +1 -0
- package/dist/commands/theme/publish.d.ts +22 -0
- package/dist/commands/theme/publish.js +68 -0
- package/dist/commands/theme/publish.js.map +1 -0
- package/dist/commands/theme/schema/push.d.ts +20 -0
- package/dist/commands/theme/schema/push.js +61 -0
- package/dist/commands/theme/schema/push.js.map +1 -0
- package/dist/commands/theme/update.d.ts +23 -0
- package/dist/commands/theme/update.js +62 -0
- package/dist/commands/theme/update.js.map +1 -0
- package/dist/commands/theme/use.d.ts +23 -0
- package/dist/commands/theme/use.js +71 -0
- package/dist/commands/theme/use.js.map +1 -0
- package/dist/commands/theme/versions.d.ts +21 -0
- package/dist/commands/theme/versions.js +33 -0
- package/dist/commands/theme/versions.js.map +1 -0
- package/dist/lib/api-client.d.ts +5 -4
- package/dist/lib/api-client.js +32 -16
- package/dist/lib/api-client.js.map +1 -1
- package/dist/lib/codex-skill.d.ts +1 -1
- package/dist/lib/codex-skill.js +12 -8
- package/dist/lib/codex-skill.js.map +1 -1
- package/dist/lib/config.d.ts +6 -18
- package/dist/lib/config.js +35 -64
- package/dist/lib/config.js.map +1 -1
- package/dist/lib/credential-store.d.ts +44 -0
- package/dist/lib/credential-store.js +137 -0
- package/dist/lib/credential-store.js.map +1 -0
- package/dist/lib/custom-data.d.ts +42 -0
- package/dist/lib/custom-data.js +167 -0
- package/dist/lib/custom-data.js.map +1 -0
- package/dist/lib/deployments.d.ts +8 -1
- package/dist/lib/deployments.js +58 -11
- package/dist/lib/deployments.js.map +1 -1
- package/dist/lib/describe-metafields.d.ts +9 -0
- package/dist/lib/describe-metafields.js +213 -0
- package/dist/lib/describe-metafields.js.map +1 -0
- package/dist/lib/device-login.d.ts +22 -0
- package/dist/lib/device-login.js +66 -0
- package/dist/lib/device-login.js.map +1 -0
- package/dist/lib/errors.d.ts +1 -0
- package/dist/lib/errors.js +6 -1
- package/dist/lib/errors.js.map +1 -1
- package/dist/lib/file-lock.d.ts +6 -0
- package/dist/lib/file-lock.js +66 -0
- package/dist/lib/file-lock.js.map +1 -0
- package/dist/lib/live-confirm.d.ts +11 -0
- package/dist/lib/live-confirm.js +34 -0
- package/dist/lib/live-confirm.js.map +1 -0
- package/dist/lib/open-browser.d.ts +13 -0
- package/dist/lib/open-browser.js +38 -0
- package/dist/lib/open-browser.js.map +1 -0
- package/dist/lib/pending-login.d.ts +5 -0
- package/dist/lib/pending-login.js +39 -0
- package/dist/lib/pending-login.js.map +1 -0
- package/dist/lib/project-setup.d.ts +1 -0
- package/dist/lib/project-setup.js +20 -0
- package/dist/lib/project-setup.js.map +1 -1
- package/dist/lib/secure-file.d.ts +1 -0
- package/dist/lib/secure-file.js +15 -0
- package/dist/lib/secure-file.js.map +1 -0
- package/dist/lib/session.d.ts +40 -0
- package/dist/lib/session.js +80 -0
- package/dist/lib/session.js.map +1 -0
- package/dist/lib/store-selection.d.ts +19 -0
- package/dist/lib/store-selection.js +23 -0
- package/dist/lib/store-selection.js.map +1 -0
- package/dist/lib/template-scaffold.d.ts +1 -0
- package/dist/lib/template-scaffold.js +5 -2
- package/dist/lib/template-scaffold.js.map +1 -1
- package/dist/lib/theme-schema-export.d.ts +1 -1
- package/dist/lib/theme-schema-export.js +4 -5
- package/dist/lib/theme-schema-export.js.map +1 -1
- package/dist/lib/themes.d.ts +143 -0
- package/dist/lib/themes.js +277 -0
- package/dist/lib/themes.js.map +1 -0
- package/dist/lib/validators.js +16 -0
- package/dist/lib/validators.js.map +1 -1
- package/oclif.manifest.json +8168 -5388
- package/package.json +2 -1
- package/dist/commands/auth/register.js +0 -35
- package/dist/commands/auth/register.js.map +0 -1
- package/dist/commands/auth/verify.js +0 -43
- package/dist/commands/auth/verify.js.map +0 -1
- package/dist/commands/init.js +0 -84
- package/dist/commands/init.js.map +0 -1
- package/dist/commands/setup.js +0 -186
- package/dist/commands/setup.js.map +0 -1
- package/dist/lib/email-login.d.ts +0 -35
- package/dist/lib/email-login.js +0 -86
- package/dist/lib/email-login.js.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"api-client.js","sourceRoot":"","sources":["../../src/lib/api-client.ts"],"names":[],"mappings":";;;;;;AAAA,kDAAiE;
|
|
1
|
+
{"version":3,"file":"api-client.js","sourceRoot":"","sources":["../../src/lib/api-client.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
export declare const CODEX_SKILL = "---\nname: ecomweb\ndescription: Use when someone wants to start building an ecomweb storefront, or asks how to build their ecomweb store's website with Codex, outside an existing storefront project.\n---\n\n# Starting an ecomweb storefront\n\nAn ecomweb storefront is a Next.js project for one ecomweb store: products,\ncart, checkout and accounts come from ecomweb; the merchant (with Codex) owns\nthe pages and the design.\n\n## Inside a storefront project\n\nIf the current folder has an `.ecomweb.json` file, it already is a storefront\nproject. Follow its `AGENTS.md`, which points to the project's own skill.\n\n## Starting one\n\n1. Check the prerequisites: `node --version` (24 or newer), `pnpm --version`,\n `git --version`. If one is missing, stop and give the install links:\n https://nodejs.org, https://pnpm.io/installation, https://git-scm.com/downloads.\n2. Check the login: `npx @ecomweb/cli auth status`. If
|
|
1
|
+
export declare const CODEX_SKILL = "---\nname: ecomweb\ndescription: Use when someone wants to start building an ecomweb storefront, or asks how to build their ecomweb store's website with Codex, outside an existing storefront project.\n---\n\n# Starting an ecomweb storefront\n\nAn ecomweb storefront is a Next.js project for one ecomweb store: products,\ncart, checkout and accounts come from ecomweb; the merchant (with Codex) owns\nthe pages and the design.\n\n## Inside a storefront project\n\nIf the current folder has an `.ecomweb.json` file, it already is a storefront\nproject. Follow its `AGENTS.md`, which points to the project's own skill.\n\n## Starting one\n\n1. Check the prerequisites: `node --version` (24 or newer), `pnpm --version`,\n `git --version`. If one is missing, stop and give the install links:\n https://nodejs.org, https://pnpm.io/installation, https://git-scm.com/downloads.\n2. Check the login: `npx @ecomweb/cli auth status`. If `logged_in` is false,\n run `npx @ecomweb/cli auth login`. Show the user the\n `verification_uri_complete` link and the `user_code`, and ask them to open\n the link and approve (the code on the page must match). Then run\n `npx @ecomweb/cli auth login --wait`; run it again while it still answers\n `authorization_pending`.\n3. The login picks the store when there is one; if it lists several, ask which\n and run `npx @ecomweb/cli stores switch <ref>`. With none, ask for a name and\n run `npx @ecomweb/cli stores create --name \"<name>\"`.\n `npx @ecomweb/cli stores current` shows the store.\n4. Ask whether to create the project on this machine or as a new GitHub\n repository (add `--github`).\n5. Create it: `npx @ecomweb/cli storefront init`. It\n installs dependencies and prints the next steps.\n6. Tell the user to start `codex` inside the new folder and describe the\n storefront they want; `pnpm dev` shows it at http://localhost:3002.\n\nNever ask for codes, keys or tokens, and never write them into files: the\nuser approves the login in their own browser.\n";
|
|
2
2
|
export declare function codexSkillPath(home: string): string;
|
|
3
3
|
export declare function installCodexSkill(home: string, opts?: {
|
|
4
4
|
force?: boolean;
|
package/dist/lib/codex-skill.js
CHANGED
|
@@ -30,12 +30,16 @@ project. Follow its \`AGENTS.md\`, which points to the project's own skill.
|
|
|
30
30
|
1. Check the prerequisites: \`node --version\` (24 or newer), \`pnpm --version\`,
|
|
31
31
|
\`git --version\`. If one is missing, stop and give the install links:
|
|
32
32
|
https://nodejs.org, https://pnpm.io/installation, https://git-scm.com/downloads.
|
|
33
|
-
2. Check the login: \`npx @ecomweb/cli auth status\`. If
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
33
|
+
2. Check the login: \`npx @ecomweb/cli auth status\`. If \`logged_in\` is false,
|
|
34
|
+
run \`npx @ecomweb/cli auth login\`. Show the user the
|
|
35
|
+
\`verification_uri_complete\` link and the \`user_code\`, and ask them to open
|
|
36
|
+
the link and approve (the code on the page must match). Then run
|
|
37
|
+
\`npx @ecomweb/cli auth login --wait\`; run it again while it still answers
|
|
38
|
+
\`authorization_pending\`.
|
|
39
|
+
3. The login picks the store when there is one; if it lists several, ask which
|
|
40
|
+
and run \`npx @ecomweb/cli stores switch <ref>\`. With none, ask for a name and
|
|
41
|
+
run \`npx @ecomweb/cli stores create --name "<name>"\`.
|
|
42
|
+
\`npx @ecomweb/cli stores current\` shows the store.
|
|
39
43
|
4. Ask whether to create the project on this machine or as a new GitHub
|
|
40
44
|
repository (add \`--github\`).
|
|
41
45
|
5. Create it: \`npx @ecomweb/cli storefront init\`. It
|
|
@@ -43,8 +47,8 @@ project. Follow its \`AGENTS.md\`, which points to the project's own skill.
|
|
|
43
47
|
6. Tell the user to start \`codex\` inside the new folder and describe the
|
|
44
48
|
storefront they want; \`pnpm dev\` shows it at http://localhost:3002.
|
|
45
49
|
|
|
46
|
-
|
|
47
|
-
|
|
50
|
+
Never ask for codes, keys or tokens, and never write them into files: the
|
|
51
|
+
user approves the login in their own browser.
|
|
48
52
|
`;
|
|
49
53
|
function codexSkillPath(home) {
|
|
50
54
|
return node_path_1.default.join(home, ".agents/skills/ecomweb/SKILL.md");
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"codex-skill.js","sourceRoot":"","sources":["../../src/lib/codex-skill.ts"],"names":[],"mappings":";;;;;;
|
|
1
|
+
{"version":3,"file":"codex-skill.js","sourceRoot":"","sources":["../../src/lib/codex-skill.ts"],"names":[],"mappings":";;;;;;AAmDA,wCAEC;AAED,8CAkBC;AAzED,qCAA6E;AAC7E,0DAA6B;AAC7B,qCAA8C;AAOjC,QAAA,WAAW,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAwC1B,CAAC;AAEF,SAAgB,cAAc,CAAC,IAAY;IACzC,OAAO,mBAAI,CAAC,IAAI,CAAC,IAAI,EAAE,iCAAiC,CAAC,CAAC;AAC5D,CAAC;AAED,SAAgB,iBAAiB,CAC/B,IAAY,EACZ,OAA8C,EAAE;IAEhD,MAAM,IAAI,GAAG,cAAc,CAAC,IAAI,CAAC,CAAC;IAClC,IAAI,IAAA,oBAAU,EAAC,IAAI,CAAC,EAAE,CAAC;QACrB,MAAM,OAAO,GAAG,IAAA,sBAAY,EAAC,IAAI,EAAE,MAAM,CAAC,CAAC;QAC3C,IAAI,OAAO,KAAK,mBAAW;YAAE,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,WAAW,EAAE,CAAC;QACxE,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC;YAChB,MAAM,IAAI,iBAAQ,CAAC,cAAc,EAAE,uCAAuC,IAAI,EAAE,EAAE,iBAAQ,CAAC,UAAU,EAAE;gBACrG,IAAI,EAAE,6BAA6B;aACpC,CAAC,CAAC;QACL,CAAC;IACH,CAAC;IACD,IAAI,IAAI,CAAC,MAAM;QAAE,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,eAAe,EAAE,CAAC;IAChE,IAAA,mBAAS,EAAC,mBAAI,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IACnD,IAAA,uBAAa,EAAC,IAAI,EAAE,mBAAW,CAAC,CAAC;IACjC,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,WAAW,EAAE,CAAC;AAC7C,CAAC"}
|
package/dist/lib/config.d.ts
CHANGED
|
@@ -8,39 +8,27 @@ export interface AppConfig {
|
|
|
8
8
|
active_profile: string;
|
|
9
9
|
profiles: Record<string, ProfileConfig>;
|
|
10
10
|
}
|
|
11
|
+
export declare const CREDENTIALS_DIR: string;
|
|
12
|
+
export declare function assertValidProfileName(name: string, source?: "flag" | "config"): void;
|
|
11
13
|
export declare class ConfigManager {
|
|
12
14
|
private config;
|
|
13
|
-
|
|
15
|
+
private readonly selected;
|
|
16
|
+
constructor(selectedProfile?: string);
|
|
14
17
|
private ensureDir;
|
|
15
18
|
private loadConfig;
|
|
16
19
|
save(): void;
|
|
17
20
|
getActiveProfileName(): string;
|
|
21
|
+
getProfileName(): string;
|
|
18
22
|
getProfile(name?: string): ProfileConfig;
|
|
19
23
|
setProfile(name: string, profile: Partial<ProfileConfig>): void;
|
|
20
24
|
setActiveProfile(name: string): void;
|
|
21
25
|
setStoreRef(storeRef: string, storeName?: string, profileName?: string): void;
|
|
22
26
|
getStoreRef(): string | undefined;
|
|
23
|
-
getApiKey(profileName?: string): string | undefined;
|
|
24
|
-
setApiKey(key: string, profileName?: string): void;
|
|
25
|
-
removeApiKey(profileName?: string): void;
|
|
26
|
-
getJwtTokens(profileName?: string): {
|
|
27
|
-
access_token: string;
|
|
28
|
-
refresh_token: string;
|
|
29
|
-
expires_at: number;
|
|
30
|
-
email?: string;
|
|
31
|
-
} | undefined;
|
|
32
|
-
setJwtTokens(tokens: {
|
|
33
|
-
access_token: string;
|
|
34
|
-
refresh_token: string;
|
|
35
|
-
expires_at: number;
|
|
36
|
-
email?: string;
|
|
37
|
-
}, profileName?: string): void;
|
|
38
|
-
removeJwtTokens(profileName?: string): void;
|
|
39
|
-
isJwtExpired(profileName?: string): boolean;
|
|
40
27
|
getProfileNames(): string[];
|
|
41
28
|
deleteProfile(name: string): void;
|
|
42
29
|
resolve<T>(flag: T | undefined, envVar: string, profileValue: T | undefined, defaultValue: T): T;
|
|
43
30
|
resolveApiUrl(flag?: string): string;
|
|
44
31
|
resolveApiKey(flag?: string): string | undefined;
|
|
32
|
+
removeLegacyCredentials(profileName: string): void;
|
|
45
33
|
resolveStoreRef(flag?: string): string | undefined;
|
|
46
34
|
}
|
package/dist/lib/config.js
CHANGED
|
@@ -33,13 +33,15 @@ var __importStar = (this && this.__importStar) || (function () {
|
|
|
33
33
|
};
|
|
34
34
|
})();
|
|
35
35
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
36
|
-
exports.ConfigManager = void 0;
|
|
36
|
+
exports.ConfigManager = exports.CREDENTIALS_DIR = void 0;
|
|
37
|
+
exports.assertValidProfileName = assertValidProfileName;
|
|
37
38
|
const fs = __importStar(require("fs"));
|
|
38
39
|
const path = __importStar(require("path"));
|
|
39
40
|
const os = __importStar(require("os"));
|
|
41
|
+
const errors_1 = require("./errors");
|
|
40
42
|
const CONFIG_DIR = path.join(os.homedir(), ".config", "ecomweb");
|
|
41
43
|
const CONFIG_FILE = path.join(CONFIG_DIR, "config.json");
|
|
42
|
-
|
|
44
|
+
exports.CREDENTIALS_DIR = path.join(CONFIG_DIR, "credentials");
|
|
43
45
|
const DEFAULT_PROFILE = {
|
|
44
46
|
api_url: "https://apibase.ecomweb.app/api/v1",
|
|
45
47
|
default_output: "json",
|
|
@@ -50,9 +52,24 @@ const DEFAULT_CONFIG = {
|
|
|
50
52
|
default: { ...DEFAULT_PROFILE },
|
|
51
53
|
},
|
|
52
54
|
};
|
|
55
|
+
function assertValidProfileName(name, source) {
|
|
56
|
+
if (!/^[A-Za-z0-9._-]+$/.test(name) || name === "." || name.includes("..")) {
|
|
57
|
+
const allowed = "Use only letters, digits, dot, underscore and hyphen (no \"..\").";
|
|
58
|
+
const from = source === "flag"
|
|
59
|
+
? " (from --profile)"
|
|
60
|
+
: source === "config"
|
|
61
|
+
? ` (from active_profile in ${CONFIG_FILE})`
|
|
62
|
+
: "";
|
|
63
|
+
throw new errors_1.CliError("INVALID_PROFILE_NAME", `Invalid profile name: ${JSON.stringify(name)}${from}`, errors_1.ExitCode.VALIDATION, {
|
|
64
|
+
hint: source === "config" ? `${allowed} Fix active_profile in ${CONFIG_FILE}, or pass --profile default.` : allowed,
|
|
65
|
+
});
|
|
66
|
+
}
|
|
67
|
+
}
|
|
53
68
|
class ConfigManager {
|
|
54
|
-
constructor() {
|
|
69
|
+
constructor(selectedProfile) {
|
|
55
70
|
this.config = this.loadConfig();
|
|
71
|
+
this.selected = selectedProfile || this.config.active_profile;
|
|
72
|
+
assertValidProfileName(this.selected, selectedProfile ? "flag" : "config");
|
|
56
73
|
}
|
|
57
74
|
ensureDir(dir) {
|
|
58
75
|
if (!fs.existsSync(dir)) {
|
|
@@ -68,7 +85,7 @@ class ConfigManager {
|
|
|
68
85
|
}
|
|
69
86
|
catch {
|
|
70
87
|
}
|
|
71
|
-
return
|
|
88
|
+
return structuredClone(DEFAULT_CONFIG);
|
|
72
89
|
}
|
|
73
90
|
save() {
|
|
74
91
|
this.ensureDir(CONFIG_DIR);
|
|
@@ -77,11 +94,15 @@ class ConfigManager {
|
|
|
77
94
|
getActiveProfileName() {
|
|
78
95
|
return this.config.active_profile;
|
|
79
96
|
}
|
|
97
|
+
getProfileName() {
|
|
98
|
+
return this.selected;
|
|
99
|
+
}
|
|
80
100
|
getProfile(name) {
|
|
81
|
-
const profileName = name || this.
|
|
101
|
+
const profileName = name || this.selected;
|
|
82
102
|
return this.config.profiles[profileName] || { ...DEFAULT_PROFILE };
|
|
83
103
|
}
|
|
84
104
|
setProfile(name, profile) {
|
|
105
|
+
assertValidProfileName(name);
|
|
85
106
|
this.config.profiles[name] = {
|
|
86
107
|
...DEFAULT_PROFILE,
|
|
87
108
|
...this.config.profiles[name],
|
|
@@ -90,11 +111,12 @@ class ConfigManager {
|
|
|
90
111
|
this.save();
|
|
91
112
|
}
|
|
92
113
|
setActiveProfile(name) {
|
|
114
|
+
assertValidProfileName(name);
|
|
93
115
|
this.config.active_profile = name;
|
|
94
116
|
this.save();
|
|
95
117
|
}
|
|
96
118
|
setStoreRef(storeRef, storeName, profileName) {
|
|
97
|
-
const name = profileName || this.
|
|
119
|
+
const name = profileName || this.selected;
|
|
98
120
|
const profile = this.getProfile(name);
|
|
99
121
|
profile.store_ref = storeRef;
|
|
100
122
|
if (storeName)
|
|
@@ -105,62 +127,6 @@ class ConfigManager {
|
|
|
105
127
|
getStoreRef() {
|
|
106
128
|
return this.getProfile().store_ref;
|
|
107
129
|
}
|
|
108
|
-
getApiKey(profileName) {
|
|
109
|
-
const name = profileName || this.config.active_profile;
|
|
110
|
-
const keyFile = path.join(CREDENTIALS_DIR, `${name}.key`);
|
|
111
|
-
try {
|
|
112
|
-
if (fs.existsSync(keyFile)) {
|
|
113
|
-
return fs.readFileSync(keyFile, "utf-8").trim();
|
|
114
|
-
}
|
|
115
|
-
}
|
|
116
|
-
catch {
|
|
117
|
-
}
|
|
118
|
-
return undefined;
|
|
119
|
-
}
|
|
120
|
-
setApiKey(key, profileName) {
|
|
121
|
-
const name = profileName || this.config.active_profile;
|
|
122
|
-
this.ensureDir(CREDENTIALS_DIR);
|
|
123
|
-
const keyFile = path.join(CREDENTIALS_DIR, `${name}.key`);
|
|
124
|
-
fs.writeFileSync(keyFile, key, { mode: 0o600 });
|
|
125
|
-
}
|
|
126
|
-
removeApiKey(profileName) {
|
|
127
|
-
const name = profileName || this.config.active_profile;
|
|
128
|
-
const keyFile = path.join(CREDENTIALS_DIR, `${name}.key`);
|
|
129
|
-
if (fs.existsSync(keyFile)) {
|
|
130
|
-
fs.unlinkSync(keyFile);
|
|
131
|
-
}
|
|
132
|
-
}
|
|
133
|
-
getJwtTokens(profileName) {
|
|
134
|
-
const name = profileName || this.config.active_profile;
|
|
135
|
-
const tokenFile = path.join(CREDENTIALS_DIR, `${name}.jwt`);
|
|
136
|
-
try {
|
|
137
|
-
if (fs.existsSync(tokenFile)) {
|
|
138
|
-
return JSON.parse(fs.readFileSync(tokenFile, "utf-8"));
|
|
139
|
-
}
|
|
140
|
-
}
|
|
141
|
-
catch {
|
|
142
|
-
}
|
|
143
|
-
return undefined;
|
|
144
|
-
}
|
|
145
|
-
setJwtTokens(tokens, profileName) {
|
|
146
|
-
const name = profileName || this.config.active_profile;
|
|
147
|
-
this.ensureDir(CREDENTIALS_DIR);
|
|
148
|
-
const tokenFile = path.join(CREDENTIALS_DIR, `${name}.jwt`);
|
|
149
|
-
fs.writeFileSync(tokenFile, JSON.stringify(tokens), { mode: 0o600 });
|
|
150
|
-
}
|
|
151
|
-
removeJwtTokens(profileName) {
|
|
152
|
-
const name = profileName || this.config.active_profile;
|
|
153
|
-
const tokenFile = path.join(CREDENTIALS_DIR, `${name}.jwt`);
|
|
154
|
-
if (fs.existsSync(tokenFile)) {
|
|
155
|
-
fs.unlinkSync(tokenFile);
|
|
156
|
-
}
|
|
157
|
-
}
|
|
158
|
-
isJwtExpired(profileName) {
|
|
159
|
-
const tokens = this.getJwtTokens(profileName);
|
|
160
|
-
if (!tokens)
|
|
161
|
-
return true;
|
|
162
|
-
return Date.now() / 1000 >= tokens.expires_at - 60;
|
|
163
|
-
}
|
|
164
130
|
getProfileNames() {
|
|
165
131
|
return Object.keys(this.config.profiles);
|
|
166
132
|
}
|
|
@@ -170,7 +136,7 @@ class ConfigManager {
|
|
|
170
136
|
this.config.active_profile = "default";
|
|
171
137
|
}
|
|
172
138
|
this.save();
|
|
173
|
-
this.
|
|
139
|
+
this.removeLegacyCredentials(name);
|
|
174
140
|
}
|
|
175
141
|
resolve(flag, envVar, profileValue, defaultValue) {
|
|
176
142
|
if (flag !== undefined)
|
|
@@ -186,7 +152,12 @@ class ConfigManager {
|
|
|
186
152
|
return this.resolve(flag, "ECOMWEB_API_URL", this.getProfile().api_url, "https://apibase.ecomweb.app/api/v1");
|
|
187
153
|
}
|
|
188
154
|
resolveApiKey(flag) {
|
|
189
|
-
return this.resolve(flag, "ECOMWEB_API_KEY",
|
|
155
|
+
return this.resolve(flag, "ECOMWEB_API_KEY", undefined, undefined);
|
|
156
|
+
}
|
|
157
|
+
removeLegacyCredentials(profileName) {
|
|
158
|
+
for (const ext of ["key", "jwt"]) {
|
|
159
|
+
fs.rmSync(path.join(exports.CREDENTIALS_DIR, `${profileName}.${ext}`), { force: true });
|
|
160
|
+
}
|
|
190
161
|
}
|
|
191
162
|
resolveStoreRef(flag) {
|
|
192
163
|
const envVal = process.env["ECOMWEB_STORE_REF"];
|
package/dist/lib/config.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/lib/config.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/lib/config.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
export interface StoredSession {
|
|
2
|
+
access_token: string;
|
|
3
|
+
refresh_token: string;
|
|
4
|
+
expires_at: number;
|
|
5
|
+
email: string | null;
|
|
6
|
+
user_id: string;
|
|
7
|
+
api_url?: string;
|
|
8
|
+
}
|
|
9
|
+
export interface CredentialStore {
|
|
10
|
+
readonly kind: "keychain" | "file";
|
|
11
|
+
get(profile: string): StoredSession | undefined;
|
|
12
|
+
set(profile: string, session: StoredSession): void;
|
|
13
|
+
delete(profile: string): void;
|
|
14
|
+
}
|
|
15
|
+
export declare const KEYCHAIN_SERVICE = "ecomweb-cli";
|
|
16
|
+
export interface KeyringEntry {
|
|
17
|
+
getPassword(): string | null;
|
|
18
|
+
setPassword(password: string): void;
|
|
19
|
+
deletePassword(): boolean;
|
|
20
|
+
}
|
|
21
|
+
export type EntryFactory = (service: string, account: string) => KeyringEntry;
|
|
22
|
+
export declare class FileCredentialStore implements CredentialStore {
|
|
23
|
+
private readonly dir;
|
|
24
|
+
readonly kind: "file";
|
|
25
|
+
constructor(dir: string);
|
|
26
|
+
private file;
|
|
27
|
+
get(profile: string): StoredSession | undefined;
|
|
28
|
+
set(profile: string, session: StoredSession): void;
|
|
29
|
+
delete(profile: string): void;
|
|
30
|
+
}
|
|
31
|
+
export declare class KeychainCredentialStore implements CredentialStore {
|
|
32
|
+
private readonly entry;
|
|
33
|
+
readonly kind: "keychain";
|
|
34
|
+
constructor(entry: EntryFactory);
|
|
35
|
+
get(profile: string): StoredSession | undefined;
|
|
36
|
+
set(profile: string, session: StoredSession): void;
|
|
37
|
+
delete(profile: string): void;
|
|
38
|
+
}
|
|
39
|
+
export declare function openCredentialStore(opts: {
|
|
40
|
+
dir: string;
|
|
41
|
+
env?: NodeJS.ProcessEnv;
|
|
42
|
+
loadEntry?: () => EntryFactory;
|
|
43
|
+
}): CredentialStore;
|
|
44
|
+
export declare function lazyCredentialStore(open: () => CredentialStore): CredentialStore;
|
|
@@ -0,0 +1,137 @@
|
|
|
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
|
+
exports.KeychainCredentialStore = exports.FileCredentialStore = exports.KEYCHAIN_SERVICE = void 0;
|
|
7
|
+
exports.openCredentialStore = openCredentialStore;
|
|
8
|
+
exports.lazyCredentialStore = lazyCredentialStore;
|
|
9
|
+
const node_fs_1 = require("node:fs");
|
|
10
|
+
const node_path_1 = __importDefault(require("node:path"));
|
|
11
|
+
const errors_1 = require("./errors");
|
|
12
|
+
const secure_file_1 = require("./secure-file");
|
|
13
|
+
exports.KEYCHAIN_SERVICE = "ecomweb-cli";
|
|
14
|
+
function parseSession(raw) {
|
|
15
|
+
try {
|
|
16
|
+
const s = JSON.parse(raw);
|
|
17
|
+
if (typeof s?.access_token === "string" &&
|
|
18
|
+
typeof s.refresh_token === "string" &&
|
|
19
|
+
typeof s.expires_at === "number" &&
|
|
20
|
+
typeof s.user_id === "string") {
|
|
21
|
+
return {
|
|
22
|
+
access_token: s.access_token,
|
|
23
|
+
refresh_token: s.refresh_token,
|
|
24
|
+
expires_at: s.expires_at,
|
|
25
|
+
email: s.email ?? null,
|
|
26
|
+
user_id: s.user_id,
|
|
27
|
+
...(typeof s.api_url === "string" && { api_url: s.api_url }),
|
|
28
|
+
};
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
catch {
|
|
32
|
+
}
|
|
33
|
+
return undefined;
|
|
34
|
+
}
|
|
35
|
+
class FileCredentialStore {
|
|
36
|
+
constructor(dir) {
|
|
37
|
+
this.dir = dir;
|
|
38
|
+
this.kind = "file";
|
|
39
|
+
}
|
|
40
|
+
file(profile) {
|
|
41
|
+
return node_path_1.default.join(this.dir, `${profile}.session.json`);
|
|
42
|
+
}
|
|
43
|
+
get(profile) {
|
|
44
|
+
try {
|
|
45
|
+
return parseSession((0, node_fs_1.readFileSync)(this.file(profile), "utf8"));
|
|
46
|
+
}
|
|
47
|
+
catch {
|
|
48
|
+
return undefined;
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
set(profile, session) {
|
|
52
|
+
(0, secure_file_1.writePrivateFile)(this.file(profile), JSON.stringify(session));
|
|
53
|
+
}
|
|
54
|
+
delete(profile) {
|
|
55
|
+
(0, node_fs_1.rmSync)(this.file(profile), { force: true });
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
exports.FileCredentialStore = FileCredentialStore;
|
|
59
|
+
function keychainRefused(error) {
|
|
60
|
+
return new errors_1.CliError("CREDENTIAL_STORE_UNAVAILABLE", `The OS keychain refused access: ${error instanceof Error ? error.message : String(error)}`, errors_1.ExitCode.AUTH_FAILURE, { hint: "Unlock the keychain, or keep the login in a file instead: export ECOMWEB_CREDENTIAL_STORE=file" });
|
|
61
|
+
}
|
|
62
|
+
class KeychainCredentialStore {
|
|
63
|
+
constructor(entry) {
|
|
64
|
+
this.entry = entry;
|
|
65
|
+
this.kind = "keychain";
|
|
66
|
+
}
|
|
67
|
+
get(profile) {
|
|
68
|
+
let raw;
|
|
69
|
+
try {
|
|
70
|
+
raw = this.entry(exports.KEYCHAIN_SERVICE, profile).getPassword();
|
|
71
|
+
}
|
|
72
|
+
catch (error) {
|
|
73
|
+
throw keychainRefused(error);
|
|
74
|
+
}
|
|
75
|
+
return raw ? parseSession(raw) : undefined;
|
|
76
|
+
}
|
|
77
|
+
set(profile, session) {
|
|
78
|
+
try {
|
|
79
|
+
this.entry(exports.KEYCHAIN_SERVICE, profile).setPassword(JSON.stringify(session));
|
|
80
|
+
}
|
|
81
|
+
catch (error) {
|
|
82
|
+
throw keychainRefused(error);
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
delete(profile) {
|
|
86
|
+
try {
|
|
87
|
+
this.entry(exports.KEYCHAIN_SERVICE, profile).deletePassword();
|
|
88
|
+
}
|
|
89
|
+
catch {
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
exports.KeychainCredentialStore = KeychainCredentialStore;
|
|
94
|
+
function loadNapiKeyring() {
|
|
95
|
+
const { Entry } = require("@napi-rs/keyring");
|
|
96
|
+
return (service, account) => new Entry(service, account);
|
|
97
|
+
}
|
|
98
|
+
function probeKeychain(load) {
|
|
99
|
+
try {
|
|
100
|
+
const entry = load();
|
|
101
|
+
entry(exports.KEYCHAIN_SERVICE, "__probe__").getPassword();
|
|
102
|
+
return entry;
|
|
103
|
+
}
|
|
104
|
+
catch {
|
|
105
|
+
return undefined;
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
function openCredentialStore(opts) {
|
|
109
|
+
const forced = (opts.env ?? process.env).ECOMWEB_CREDENTIAL_STORE;
|
|
110
|
+
if (forced !== undefined && forced !== "file" && forced !== "keychain") {
|
|
111
|
+
throw new errors_1.CliError("INVALID_CREDENTIAL_STORE", `ECOMWEB_CREDENTIAL_STORE must be "file" or "keychain", not "${forced}"`, errors_1.ExitCode.VALIDATION);
|
|
112
|
+
}
|
|
113
|
+
if (forced === "file")
|
|
114
|
+
return new FileCredentialStore(opts.dir);
|
|
115
|
+
const entry = probeKeychain(opts.loadEntry ?? loadNapiKeyring);
|
|
116
|
+
if (entry)
|
|
117
|
+
return new KeychainCredentialStore(entry);
|
|
118
|
+
if (forced === "keychain") {
|
|
119
|
+
throw new errors_1.CliError("KEYCHAIN_UNAVAILABLE", "No OS keychain is available on this machine", errors_1.ExitCode.ERROR, {
|
|
120
|
+
hint: "Unset ECOMWEB_CREDENTIAL_STORE to keep the login in a file instead",
|
|
121
|
+
});
|
|
122
|
+
}
|
|
123
|
+
return new FileCredentialStore(opts.dir);
|
|
124
|
+
}
|
|
125
|
+
function lazyCredentialStore(open) {
|
|
126
|
+
let inner;
|
|
127
|
+
const store = () => (inner ??= open());
|
|
128
|
+
return {
|
|
129
|
+
get kind() {
|
|
130
|
+
return store().kind;
|
|
131
|
+
},
|
|
132
|
+
get: (profile) => store().get(profile),
|
|
133
|
+
set: (profile, session) => store().set(profile, session),
|
|
134
|
+
delete: (profile) => store().delete(profile),
|
|
135
|
+
};
|
|
136
|
+
}
|
|
137
|
+
//# sourceMappingURL=credential-store.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"credential-store.js","sourceRoot":"","sources":["../../src/lib/credential-store.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
import { CliError } from "./errors";
|
|
2
|
+
export declare const METAFIELD_OWNER_TYPES: readonly ["product", "variant", "collection", "customer", "order", "page", "blog_post", "location", "shop"];
|
|
3
|
+
export type MetafieldOwnerType = (typeof METAFIELD_OWNER_TYPES)[number];
|
|
4
|
+
export interface MetafieldOwner {
|
|
5
|
+
owner_type: MetafieldOwnerType;
|
|
6
|
+
path: string;
|
|
7
|
+
}
|
|
8
|
+
export declare const OWNER_FLAG_DESCRIPTION = "Owner: product:<id>, variant:<product id>/<variant id>, collection:<id>, customer:<id>, order:<id>, page:<id>, blog_post:<id>, location:<id>, shop";
|
|
9
|
+
export declare function parseOwner(raw: string): MetafieldOwner;
|
|
10
|
+
export declare function ownerExample(owner_type: unknown): string;
|
|
11
|
+
export declare function splitIdentifier(identifier: string): {
|
|
12
|
+
namespace: string;
|
|
13
|
+
key: string;
|
|
14
|
+
};
|
|
15
|
+
export declare function routeIdArg(raw: string, flagOrArg?: string): string;
|
|
16
|
+
export declare function entriesPath(type: string): string;
|
|
17
|
+
export declare const jsonInputFlags: {
|
|
18
|
+
stdin: import("@oclif/core/lib/interfaces").BooleanFlag<boolean>;
|
|
19
|
+
file: import("@oclif/core/lib/interfaces").OptionFlag<string | undefined, import("@oclif/core/lib/interfaces").CustomOptions>;
|
|
20
|
+
};
|
|
21
|
+
export declare function isPlainObject(value: unknown): value is Record<string, unknown>;
|
|
22
|
+
export declare function readJsonObject(flags: {
|
|
23
|
+
stdin?: boolean;
|
|
24
|
+
file?: string;
|
|
25
|
+
}, hint: string): Promise<Record<string, unknown> | null>;
|
|
26
|
+
export declare function noInput(hint: string): CliError;
|
|
27
|
+
export declare function parseJsonFlag(flag: string, raw: string, hint: string): unknown;
|
|
28
|
+
export declare const entryFlags: {
|
|
29
|
+
handle: import("@oclif/core/lib/interfaces").OptionFlag<string | undefined, import("@oclif/core/lib/interfaces").CustomOptions>;
|
|
30
|
+
status: import("@oclif/core/lib/interfaces").OptionFlag<string | undefined, import("@oclif/core/lib/interfaces").CustomOptions>;
|
|
31
|
+
data: import("@oclif/core/lib/interfaces").OptionFlag<string | undefined, import("@oclif/core/lib/interfaces").CustomOptions>;
|
|
32
|
+
stdin: import("@oclif/core/lib/interfaces").BooleanFlag<boolean>;
|
|
33
|
+
file: import("@oclif/core/lib/interfaces").OptionFlag<string | undefined, import("@oclif/core/lib/interfaces").CustomOptions>;
|
|
34
|
+
};
|
|
35
|
+
export declare function readEntryBody(flags: {
|
|
36
|
+
stdin?: boolean;
|
|
37
|
+
file?: string;
|
|
38
|
+
handle?: string;
|
|
39
|
+
status?: string;
|
|
40
|
+
data?: string;
|
|
41
|
+
}, hint: string): Promise<Record<string, unknown>>;
|
|
42
|
+
export declare function callApi<T>(request: () => Promise<T>): Promise<T>;
|