@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
|
@@ -6,6 +6,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
6
6
|
exports.CHILD_STDIO = void 0;
|
|
7
7
|
exports.projectStoreRef = projectStoreRef;
|
|
8
8
|
exports.projectStoreThemeId = projectStoreThemeId;
|
|
9
|
+
exports.writeProjectStoreThemeId = writeProjectStoreThemeId;
|
|
9
10
|
exports.installDependencies = installDependencies;
|
|
10
11
|
exports.nextSteps = nextSteps;
|
|
11
12
|
exports.writeCloneDevSettings = writeCloneDevSettings;
|
|
@@ -39,6 +40,25 @@ function projectStoreThemeId(dir) {
|
|
|
39
40
|
return undefined;
|
|
40
41
|
}
|
|
41
42
|
}
|
|
43
|
+
function writeProjectStoreThemeId(dir, id, storeRef) {
|
|
44
|
+
const file = node_path_1.default.join(dir, ".ecomweb.json");
|
|
45
|
+
let current = {};
|
|
46
|
+
if ((0, node_fs_1.existsSync)(file)) {
|
|
47
|
+
let parsed;
|
|
48
|
+
try {
|
|
49
|
+
parsed = JSON.parse((0, node_fs_1.readFileSync)(file, "utf8"));
|
|
50
|
+
}
|
|
51
|
+
catch {
|
|
52
|
+
parsed = undefined;
|
|
53
|
+
}
|
|
54
|
+
if (!parsed || typeof parsed !== "object" || Array.isArray(parsed)) {
|
|
55
|
+
throw new Error(`${file} is not a JSON object; add "storeThemeId": "${id}" to it yourself`);
|
|
56
|
+
}
|
|
57
|
+
current = parsed;
|
|
58
|
+
}
|
|
59
|
+
const ref = typeof current.storeRef === "string" && current.storeRef ? undefined : storeRef;
|
|
60
|
+
(0, node_fs_1.writeFileSync)(file, JSON.stringify({ ...current, ...(ref && { storeRef: ref }), storeThemeId: id }, null, 2) + "\n");
|
|
61
|
+
}
|
|
42
62
|
const spawnRun = (cmd, args, cwd) => {
|
|
43
63
|
const r = (0, node_child_process_1.spawnSync)(cmd, args, { cwd, stdio: exports.CHILD_STDIO });
|
|
44
64
|
return { status: r.status, error: r.error };
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"project-setup.js","sourceRoot":"","sources":["../../src/lib/project-setup.ts"],"names":[],"mappings":";;;;;;AASA,0CASC;AAMD,kDAUC;AAaD,kDAGC;AAGD,8BAcC;AAOD,sDAoBC;
|
|
1
|
+
{"version":3,"file":"project-setup.js","sourceRoot":"","sources":["../../src/lib/project-setup.ts"],"names":[],"mappings":";;;;;;AASA,0CASC;AAMD,kDAUC;AASD,4DAiBC;AAaD,kDAGC;AAGD,8BAcC;AAOD,sDAoBC;AAxHD,2DAAkE;AAClE,qCAAkE;AAClE,0DAA6B;AAC7B,2DAAqD;AAGxC,QAAA,WAAW,GAAiB,CAAC,QAAQ,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;AAG1D,SAAgB,eAAe,CAAC,GAAW;IACzC,MAAM,IAAI,GAAG,mBAAI,CAAC,IAAI,CAAC,GAAG,EAAE,eAAe,CAAC,CAAC;IAC7C,IAAI,CAAC,IAAA,oBAAU,EAAC,IAAI,CAAC;QAAE,OAAO,SAAS,CAAC;IACxC,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,IAAA,sBAAY,EAAC,IAAI,EAAE,MAAM,CAAC,CAAC,CAAC,QAAQ,CAAC;QAC5D,OAAO,OAAO,GAAG,KAAK,QAAQ,IAAI,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,SAAS,CAAC;IAC1D,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,SAAS,CAAC;IACnB,CAAC;AACH,CAAC;AAMD,SAAgB,mBAAmB,CAAC,GAAW;IAC7C,MAAM,IAAI,GAAG,mBAAI,CAAC,IAAI,CAAC,GAAG,EAAE,eAAe,CAAC,CAAC;IAC7C,IAAI,CAAC,IAAA,oBAAU,EAAC,IAAI,CAAC;QAAE,OAAO,SAAS,CAAC;IACxC,IAAI,CAAC;QACH,MAAM,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,IAAA,sBAAY,EAAC,IAAI,EAAE,MAAM,CAAC,CAAC,CAAC,YAAY,CAAC;QAC/D,MAAM,IAAI,GAAG,OAAO,EAAE,KAAK,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;QACtD,OAAO,OAAO,IAAI,KAAK,QAAQ,IAAI,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC;IAChF,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,SAAS,CAAC;IACnB,CAAC;AACH,CAAC;AASD,SAAgB,wBAAwB,CAAC,GAAW,EAAE,EAAU,EAAE,QAAiB;IACjF,MAAM,IAAI,GAAG,mBAAI,CAAC,IAAI,CAAC,GAAG,EAAE,eAAe,CAAC,CAAC;IAC7C,IAAI,OAAO,GAA4B,EAAE,CAAC;IAC1C,IAAI,IAAA,oBAAU,EAAC,IAAI,CAAC,EAAE,CAAC;QACrB,IAAI,MAAe,CAAC;QACpB,IAAI,CAAC;YACH,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,IAAA,sBAAY,EAAC,IAAI,EAAE,MAAM,CAAC,CAAC,CAAC;QAClD,CAAC;QAAC,MAAM,CAAC;YACP,MAAM,GAAG,SAAS,CAAC;QACrB,CAAC;QACD,IAAI,CAAC,MAAM,IAAI,OAAO,MAAM,KAAK,QAAQ,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC;YACnE,MAAM,IAAI,KAAK,CAAC,GAAG,IAAI,+CAA+C,EAAE,kBAAkB,CAAC,CAAC;QAC9F,CAAC;QACD,OAAO,GAAG,MAAiC,CAAC;IAC9C,CAAC;IACD,MAAM,GAAG,GAAG,OAAO,OAAO,CAAC,QAAQ,KAAK,QAAQ,IAAI,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,QAAQ,CAAC;IAC5F,IAAA,uBAAa,EAAC,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,GAAG,OAAO,EAAE,GAAG,CAAC,GAAG,IAAI,EAAE,QAAQ,EAAE,GAAG,EAAE,CAAC,EAAE,YAAY,EAAE,EAAE,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC;AACvH,CAAC;AAID,MAAM,QAAQ,GAAe,CAAC,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,EAAE;IAC9C,MAAM,CAAC,GAAG,IAAA,8BAAS,EAAC,GAAG,EAAE,IAAI,EAAE,EAAE,GAAG,EAAE,KAAK,EAAE,mBAAW,EAAE,CAAC,CAAC;IAC5D,OAAO,EAAE,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,KAAK,EAAE,CAAC,CAAC,KAAK,EAAE,CAAC;AAC9C,CAAC,CAAC;AAMF,SAAgB,mBAAmB,CAAC,GAAW,EAAE,MAAkB,QAAQ;IACzE,MAAM,CAAC,GAAG,GAAG,CAAC,MAAM,EAAE,CAAC,SAAS,CAAC,EAAE,GAAG,CAAC,CAAC;IACxC,OAAO,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,QAAQ,CAAC;AAC7D,CAAC;AAGD,SAAgB,SAAS,CAAC,GAAW,EAAE,IAA4B;IACjE,OAAO;QACL,OAAO;QACP,QAAQ,GAAG,EAAE;QACb,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,gBAAgB,CAAC,CAAC;QAC7C,qDAAqD;QACrD,EAAE;QACF,4GAA4G;QAC5G,8EAA8E;QAC9E,gFAAgF;QAChF,+EAA+E;QAC/E,EAAE;QACF,8EAA8E;KAC/E,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACf,CAAC;AAOM,KAAK,UAAU,qBAAqB,CACzC,GAAW,EACX,QAA+B,EAC/B,GAA0C;IAE1C,IAAI,CAAC;QACH,MAAM,cAAc,GAAG,MAAM,QAAQ,EAAE,CAAC;QACxC,IAAA,uBAAa,EACX,mBAAI,CAAC,IAAI,CAAC,GAAG,EAAE,wBAAwB,CAAC,EACxC,IAAA,kCAAc,EAAC,EAAE,GAAG,GAAG,EAAE,cAAc,EAAE,eAAe,EAAE,EAAE,EAAE,CAAC,CAChE,CAAC;QACF,OAAO,IAAI,CAAC;IACd,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,IAAI,IAAA,oBAAU,EAAC,mBAAI,CAAC,IAAI,CAAC,GAAG,EAAE,kBAAkB,CAAC,CAAC;YAAE,OAAO,IAAI,CAAC;QAChE,OAAO,CACL,6CAA8C,KAAe,CAAC,OAAO,KAAK;YAC1E,8FAA8F;YAC9F,yCAAyC,mBAAI,CAAC,IAAI,CAAC,GAAG,EAAE,wBAAwB,CAAC,EAAE,CACpF,CAAC;IACJ,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare function writePrivateFile(file: string, contents: string): void;
|
|
@@ -0,0 +1,15 @@
|
|
|
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.writePrivateFile = writePrivateFile;
|
|
7
|
+
const node_fs_1 = require("node:fs");
|
|
8
|
+
const node_path_1 = __importDefault(require("node:path"));
|
|
9
|
+
function writePrivateFile(file, contents) {
|
|
10
|
+
(0, node_fs_1.mkdirSync)(node_path_1.default.dirname(file), { recursive: true, mode: 0o700 });
|
|
11
|
+
const tmp = `${file}.${process.pid}.${Date.now()}.tmp`;
|
|
12
|
+
(0, node_fs_1.writeFileSync)(tmp, contents, { mode: 0o600 });
|
|
13
|
+
(0, node_fs_1.renameSync)(tmp, file);
|
|
14
|
+
}
|
|
15
|
+
//# sourceMappingURL=secure-file.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"secure-file.js","sourceRoot":"","sources":["../../src/lib/secure-file.ts"],"names":[],"mappings":";;;;;AAQA,4CAKC;AAbD,qCAA+D;AAC/D,0DAA6B;AAO7B,SAAgB,gBAAgB,CAAC,IAAY,EAAE,QAAgB;IAC7D,IAAA,mBAAS,EAAC,mBAAI,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;IAChE,MAAM,GAAG,GAAG,GAAG,IAAI,IAAI,OAAO,CAAC,GAAG,IAAI,IAAI,CAAC,GAAG,EAAE,MAAM,CAAC;IACvD,IAAA,uBAAa,EAAC,GAAG,EAAE,QAAQ,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;IAC9C,IAAA,oBAAU,EAAC,GAAG,EAAE,IAAI,CAAC,CAAC;AACxB,CAAC"}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
import { CredentialStore, StoredSession } from "./credential-store";
|
|
2
|
+
import { CliError } from "./errors";
|
|
3
|
+
export interface TokenResponse {
|
|
4
|
+
access_token: string;
|
|
5
|
+
refresh_token: string;
|
|
6
|
+
expires_at: number;
|
|
7
|
+
expires_in: number;
|
|
8
|
+
user: {
|
|
9
|
+
id: string;
|
|
10
|
+
email: string | null;
|
|
11
|
+
name: string | null;
|
|
12
|
+
};
|
|
13
|
+
}
|
|
14
|
+
export interface SessionProvider {
|
|
15
|
+
hasSession(): boolean;
|
|
16
|
+
accessToken(opts?: {
|
|
17
|
+
force?: boolean;
|
|
18
|
+
}): Promise<string>;
|
|
19
|
+
}
|
|
20
|
+
export declare const REFRESH_MARGIN_SECONDS = 60;
|
|
21
|
+
export declare function sessionFromTokens(t: TokenResponse, apiUrl: string): StoredSession;
|
|
22
|
+
export declare function assertSessionForApi(session: StoredSession, apiUrl: string): void;
|
|
23
|
+
export declare function notLoggedIn(): CliError;
|
|
24
|
+
export interface SessionManagerOptions {
|
|
25
|
+
store: CredentialStore;
|
|
26
|
+
profile: string;
|
|
27
|
+
lockPath: string;
|
|
28
|
+
apiUrl: string;
|
|
29
|
+
refresh: (refreshToken: string) => Promise<TokenResponse>;
|
|
30
|
+
now?: () => number;
|
|
31
|
+
}
|
|
32
|
+
export declare class SessionManager implements SessionProvider {
|
|
33
|
+
private readonly opts;
|
|
34
|
+
constructor(opts: SessionManagerOptions);
|
|
35
|
+
hasSession(): boolean;
|
|
36
|
+
accessToken({ force }?: {
|
|
37
|
+
force?: boolean;
|
|
38
|
+
}): Promise<string>;
|
|
39
|
+
private expiringSoon;
|
|
40
|
+
}
|
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.SessionManager = exports.REFRESH_MARGIN_SECONDS = void 0;
|
|
4
|
+
exports.sessionFromTokens = sessionFromTokens;
|
|
5
|
+
exports.assertSessionForApi = assertSessionForApi;
|
|
6
|
+
exports.notLoggedIn = notLoggedIn;
|
|
7
|
+
const errors_1 = require("./errors");
|
|
8
|
+
const file_lock_1 = require("./file-lock");
|
|
9
|
+
exports.REFRESH_MARGIN_SECONDS = 60;
|
|
10
|
+
function sessionFromTokens(t, apiUrl) {
|
|
11
|
+
return {
|
|
12
|
+
access_token: t.access_token,
|
|
13
|
+
refresh_token: t.refresh_token,
|
|
14
|
+
expires_at: t.expires_at,
|
|
15
|
+
email: t.user.email,
|
|
16
|
+
user_id: t.user.id,
|
|
17
|
+
api_url: apiUrl,
|
|
18
|
+
};
|
|
19
|
+
}
|
|
20
|
+
function assertSessionForApi(session, apiUrl) {
|
|
21
|
+
if (session.api_url === undefined || session.api_url === apiUrl)
|
|
22
|
+
return;
|
|
23
|
+
throw new errors_1.CliError("SESSION_FOR_OTHER_API", `This profile is signed in to ${session.api_url}, but this command would talk to ${apiUrl}`, errors_1.ExitCode.AUTH_FAILURE, {
|
|
24
|
+
hint: `Use --api-url ${session.api_url} to work with that session, or run: ecomweb auth login --api-url ${apiUrl} (ideally with its own --profile) to sign in to the other API`,
|
|
25
|
+
details: { session_api_url: session.api_url, api_url: apiUrl },
|
|
26
|
+
});
|
|
27
|
+
}
|
|
28
|
+
function notLoggedIn() {
|
|
29
|
+
return new errors_1.CliError("NOT_LOGGED_IN", "Not logged in", errors_1.ExitCode.AUTH_FAILURE, { hint: "Run: ecomweb auth login" });
|
|
30
|
+
}
|
|
31
|
+
function isDeadSession(error) {
|
|
32
|
+
const response = error?.response;
|
|
33
|
+
return response?.status === 401 || response?.data?.code === "AUTH_SESSION_EXPIRED";
|
|
34
|
+
}
|
|
35
|
+
class SessionManager {
|
|
36
|
+
constructor(opts) {
|
|
37
|
+
this.opts = opts;
|
|
38
|
+
}
|
|
39
|
+
hasSession() {
|
|
40
|
+
return this.opts.store.get(this.opts.profile) !== undefined;
|
|
41
|
+
}
|
|
42
|
+
async accessToken({ force = false } = {}) {
|
|
43
|
+
const seen = this.opts.store.get(this.opts.profile);
|
|
44
|
+
if (!seen)
|
|
45
|
+
throw notLoggedIn();
|
|
46
|
+
assertSessionForApi(seen, this.opts.apiUrl);
|
|
47
|
+
if (!force && !this.expiringSoon(seen))
|
|
48
|
+
return seen.access_token;
|
|
49
|
+
return (0, file_lock_1.withFileLock)(this.opts.lockPath, async () => {
|
|
50
|
+
const latest = this.opts.store.get(this.opts.profile);
|
|
51
|
+
if (!latest)
|
|
52
|
+
throw notLoggedIn();
|
|
53
|
+
assertSessionForApi(latest, this.opts.apiUrl);
|
|
54
|
+
if (latest.access_token !== seen.access_token && !this.expiringSoon(latest))
|
|
55
|
+
return latest.access_token;
|
|
56
|
+
if (!force && !this.expiringSoon(latest))
|
|
57
|
+
return latest.access_token;
|
|
58
|
+
let tokens;
|
|
59
|
+
try {
|
|
60
|
+
tokens = await this.opts.refresh(latest.refresh_token);
|
|
61
|
+
}
|
|
62
|
+
catch (error) {
|
|
63
|
+
if (isDeadSession(error)) {
|
|
64
|
+
this.opts.store.delete(this.opts.profile);
|
|
65
|
+
throw notLoggedIn();
|
|
66
|
+
}
|
|
67
|
+
throw error;
|
|
68
|
+
}
|
|
69
|
+
const next = sessionFromTokens(tokens, this.opts.apiUrl);
|
|
70
|
+
this.opts.store.set(this.opts.profile, next);
|
|
71
|
+
return next.access_token;
|
|
72
|
+
});
|
|
73
|
+
}
|
|
74
|
+
expiringSoon(session) {
|
|
75
|
+
const nowSeconds = (this.opts.now ?? Date.now)() / 1000;
|
|
76
|
+
return session.expires_at - exports.REFRESH_MARGIN_SECONDS <= nowSeconds;
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
exports.SessionManager = SessionManager;
|
|
80
|
+
//# sourceMappingURL=session.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"session.js","sourceRoot":"","sources":["../../src/lib/session.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
export interface StoreSummary {
|
|
2
|
+
ref: string;
|
|
3
|
+
name: string;
|
|
4
|
+
}
|
|
5
|
+
export type StoreChoice = {
|
|
6
|
+
kind: "selected";
|
|
7
|
+
store: StoreSummary;
|
|
8
|
+
} | {
|
|
9
|
+
kind: "choose";
|
|
10
|
+
stores: StoreSummary[];
|
|
11
|
+
} | {
|
|
12
|
+
kind: "none";
|
|
13
|
+
};
|
|
14
|
+
export declare function chooseStore(opts: {
|
|
15
|
+
stores: StoreSummary[];
|
|
16
|
+
storeRef?: string;
|
|
17
|
+
currentRef?: string;
|
|
18
|
+
prompt?: (stores: StoreSummary[], currentRef?: string) => Promise<StoreSummary>;
|
|
19
|
+
}): Promise<StoreChoice>;
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.chooseStore = chooseStore;
|
|
4
|
+
const errors_1 = require("./errors");
|
|
5
|
+
async function chooseStore(opts) {
|
|
6
|
+
const { stores } = opts;
|
|
7
|
+
if (opts.storeRef) {
|
|
8
|
+
const store = stores.find((s) => s.ref === opts.storeRef);
|
|
9
|
+
if (!store) {
|
|
10
|
+
throw new errors_1.CliError("STORE_NOT_FOUND", `You have no store "${opts.storeRef}"`, errors_1.ExitCode.NOT_FOUND, { details: { stores } });
|
|
11
|
+
}
|
|
12
|
+
return { kind: "selected", store };
|
|
13
|
+
}
|
|
14
|
+
if (stores.length === 0)
|
|
15
|
+
return { kind: "none" };
|
|
16
|
+
if (stores.length === 1)
|
|
17
|
+
return { kind: "selected", store: stores[0] };
|
|
18
|
+
if (opts.prompt)
|
|
19
|
+
return { kind: "selected", store: await opts.prompt(stores, opts.currentRef) };
|
|
20
|
+
const current = stores.find((s) => s.ref === opts.currentRef);
|
|
21
|
+
return current ? { kind: "selected", store: current } : { kind: "choose", stores };
|
|
22
|
+
}
|
|
23
|
+
//# sourceMappingURL=store-selection.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"store-selection.js","sourceRoot":"","sources":["../../src/lib/store-selection.ts"],"names":[],"mappings":";;AAaA,kCAoBC;AAjCD,qCAA8C;AAavC,KAAK,UAAU,WAAW,CAAC,IAMjC;IACC,MAAM,EAAE,MAAM,EAAE,GAAG,IAAI,CAAC;IACxB,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;QAClB,MAAM,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,KAAK,IAAI,CAAC,QAAQ,CAAC,CAAC;QAC1D,IAAI,CAAC,KAAK,EAAE,CAAC;YACX,MAAM,IAAI,iBAAQ,CAAC,iBAAiB,EAAE,sBAAsB,IAAI,CAAC,QAAQ,GAAG,EAAE,iBAAQ,CAAC,SAAS,EAAE,EAAE,OAAO,EAAE,EAAE,MAAM,EAAE,EAAE,CAAC,CAAC;QAC7H,CAAC;QACD,OAAO,EAAE,IAAI,EAAE,UAAU,EAAE,KAAK,EAAE,CAAC;IACrC,CAAC;IACD,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC;IACjD,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,EAAE,IAAI,EAAE,UAAU,EAAE,KAAK,EAAE,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC;IACvE,IAAI,IAAI,CAAC,MAAM;QAAE,OAAO,EAAE,IAAI,EAAE,UAAU,EAAE,KAAK,EAAE,MAAM,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,IAAI,CAAC,UAAU,CAAC,EAAE,CAAC;IAChG,MAAM,OAAO,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,KAAK,IAAI,CAAC,UAAU,CAAC,CAAC;IAC9D,OAAO,OAAO,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,UAAU,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,EAAE,CAAC;AACrF,CAAC"}
|
|
@@ -3,6 +3,7 @@ export interface StoreRepoConfig {
|
|
|
3
3
|
publishableKey: string;
|
|
4
4
|
siteUrl: string;
|
|
5
5
|
templateVersion: string;
|
|
6
|
+
storeThemeId?: string;
|
|
6
7
|
}
|
|
7
8
|
export declare function envProduction(cfg: StoreRepoConfig): string;
|
|
8
9
|
export declare function envDevelopment(cfg: StoreRepoConfig): string;
|
|
@@ -28,8 +28,11 @@ function envDevelopment(cfg) {
|
|
|
28
28
|
return envProduction({ ...cfg, siteUrl: "http://localhost:3002" });
|
|
29
29
|
}
|
|
30
30
|
function ecomwebJson(cfg) {
|
|
31
|
-
return (JSON.stringify({
|
|
32
|
-
|
|
31
|
+
return (JSON.stringify({
|
|
32
|
+
storeRef: cfg.storeRef,
|
|
33
|
+
...(cfg.storeThemeId && { storeThemeId: cfg.storeThemeId }),
|
|
34
|
+
templateVersion: cfg.templateVersion,
|
|
35
|
+
}, null, 2) + "\n");
|
|
33
36
|
}
|
|
34
37
|
function assertEmptyDir(dir) {
|
|
35
38
|
if ((0, node_fs_1.existsSync)(dir) && (0, node_fs_1.readdirSync)(dir).length > 0) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"template-scaffold.js","sourceRoot":"","sources":["../../src/lib/template-scaffold.ts"],"names":[],"mappings":";;;;;
|
|
1
|
+
{"version":3,"file":"template-scaffold.js","sourceRoot":"","sources":["../../src/lib/template-scaffold.ts"],"names":[],"mappings":"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"}
|
|
@@ -4,4 +4,4 @@ export type RunCapture = (cmd: string, args: string[], cwd: string) => {
|
|
|
4
4
|
stderr: string;
|
|
5
5
|
error?: string;
|
|
6
6
|
};
|
|
7
|
-
export declare function exportThemeSchema(dir: string, run?: RunCapture): Promise<unknown>;
|
|
7
|
+
export declare function exportThemeSchema(dir: string, run?: RunCapture, again?: string): Promise<unknown>;
|
|
@@ -13,8 +13,7 @@ const spawnCapture = (cmd, args, cwd) => {
|
|
|
13
13
|
const error = r.error?.code;
|
|
14
14
|
return { status: r.status, stdout: r.stdout ?? "", stderr: r.stderr || r.error?.message || "", error };
|
|
15
15
|
};
|
|
16
|
-
|
|
17
|
-
async function exportThemeSchema(dir, run = spawnCapture) {
|
|
16
|
+
async function exportThemeSchema(dir, run = spawnCapture, again = "deploy again") {
|
|
18
17
|
const pkgFile = node_path_1.default.join(dir, "package.json");
|
|
19
18
|
if (!(0, node_fs_1.existsSync)(pkgFile))
|
|
20
19
|
return undefined;
|
|
@@ -27,13 +26,13 @@ async function exportThemeSchema(dir, run = spawnCapture) {
|
|
|
27
26
|
}
|
|
28
27
|
if (typeof scripts["theme:export"] !== "string")
|
|
29
28
|
return undefined;
|
|
30
|
-
const fail = (detail, hint =
|
|
29
|
+
const fail = (detail, hint = `Fix the theme's settings schema (themes/*/schema.ts), then ${again}.`) => new errors_1.CliError("THEME_EXPORT_FAILED", `pnpm run theme:export failed: ${detail}`, errors_1.ExitCode.VALIDATION, { hint });
|
|
31
30
|
if (!(0, node_fs_1.existsSync)(node_path_1.default.join(dir, "node_modules"))) {
|
|
32
|
-
throw fail("the project's dependencies are not installed",
|
|
31
|
+
throw fail("the project's dependencies are not installed", `Run pnpm install, then ${again}.`);
|
|
33
32
|
}
|
|
34
33
|
const r = run("pnpm", ["run", "--silent", "theme:export"], dir);
|
|
35
34
|
if (r.error === "ENOENT")
|
|
36
|
-
throw fail("pnpm was not found",
|
|
35
|
+
throw fail("pnpm was not found", `Install pnpm (corepack enable), then ${again}.`);
|
|
37
36
|
if (r.status !== 0)
|
|
38
37
|
throw fail(r.stderr.trim() || `exit ${r.status}`);
|
|
39
38
|
try {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"theme-schema-export.js","sourceRoot":"","sources":["../../src/lib/theme-schema-export.ts"],"names":[],"mappings":";;;;;
|
|
1
|
+
{"version":3,"file":"theme-schema-export.js","sourceRoot":"","sources":["../../src/lib/theme-schema-export.ts"],"names":[],"mappings":";;;;;AAwBA,8CA+BC;AAvDD,2DAA+C;AAC/C,qCAAmD;AACnD,0DAA6B;AAC7B,qCAA8C;AAQ9C,MAAM,YAAY,GAAe,CAAC,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,EAAE;IAElD,MAAM,CAAC,GAAG,IAAA,8BAAS,EAAC,GAAG,EAAE,IAAI,EAAE,EAAE,GAAG,EAAE,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,CAAC,QAAQ,KAAK,OAAO,EAAE,CAAC,CAAC;IAC/F,MAAM,KAAK,GAAI,CAAC,CAAC,KAA2C,EAAE,IAAI,CAAC;IACnE,OAAO,EAAE,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC,MAAM,IAAI,EAAE,EAAE,MAAM,EAAE,CAAC,CAAC,MAAM,IAAI,CAAC,CAAC,KAAK,EAAE,OAAO,IAAI,EAAE,EAAE,KAAK,EAAE,CAAC;AACzG,CAAC,CAAC;AAQK,KAAK,UAAU,iBAAiB,CACrC,GAAW,EACX,MAAkB,YAAY,EAC9B,KAAK,GAAG,cAAc;IAEtB,MAAM,OAAO,GAAG,mBAAI,CAAC,IAAI,CAAC,GAAG,EAAE,cAAc,CAAC,CAAC;IAC/C,IAAI,CAAC,IAAA,oBAAU,EAAC,OAAO,CAAC;QAAE,OAAO,SAAS,CAAC;IAC3C,IAAI,OAAO,GAA4B,EAAE,CAAC;IAC1C,IAAI,CAAC;QACH,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,IAAA,sBAAY,EAAC,OAAO,EAAE,MAAM,CAAC,CAAC,CAAC,OAAO,IAAI,EAAE,CAAC;IACpE,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,SAAS,CAAC;IACnB,CAAC;IACD,IAAI,OAAO,OAAO,CAAC,cAAc,CAAC,KAAK,QAAQ;QAAE,OAAO,SAAS,CAAC;IAElE,MAAM,IAAI,GAAG,CAAC,MAAc,EAAE,IAAI,GAAG,8DAA8D,KAAK,GAAG,EAAE,EAAE,CAC7G,IAAI,iBAAQ,CAAC,qBAAqB,EAAE,iCAAiC,MAAM,EAAE,EAAE,iBAAQ,CAAC,UAAU,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC;IAEhH,IAAI,CAAC,IAAA,oBAAU,EAAC,mBAAI,CAAC,IAAI,CAAC,GAAG,EAAE,cAAc,CAAC,CAAC,EAAE,CAAC;QAChD,MAAM,IAAI,CAAC,8CAA8C,EAAE,0BAA0B,KAAK,GAAG,CAAC,CAAC;IACjG,CAAC;IACD,MAAM,CAAC,GAAG,GAAG,CAAC,MAAM,EAAE,CAAC,KAAK,EAAE,UAAU,EAAE,cAAc,CAAC,EAAE,GAAG,CAAC,CAAC;IAChE,IAAI,CAAC,CAAC,KAAK,KAAK,QAAQ;QAAE,MAAM,IAAI,CAAC,oBAAoB,EAAE,wCAAwC,KAAK,GAAG,CAAC,CAAC;IAC7G,IAAI,CAAC,CAAC,MAAM,KAAK,CAAC;QAAE,MAAM,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,EAAE,IAAI,QAAQ,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC;IACtE,IAAI,CAAC;QACH,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;QACrC,IAAI,CAAC,OAAO,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,eAAe,CAAC;YAAE,MAAM,IAAI,KAAK,CAAC,oBAAoB,CAAC,CAAC;QAC/F,OAAO,OAAO,CAAC,eAAe,CAAC;IACjC,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,IAAI,CAAC,6CAA8C,KAAe,CAAC,OAAO,GAAG,CAAC,CAAC;IACvF,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1,143 @@
|
|
|
1
|
+
import { CliError } from "./errors";
|
|
2
|
+
export type ThemeMode = "theme" | "custom" | "headless";
|
|
3
|
+
export type VersionKind = "release" | "build" | "link";
|
|
4
|
+
export interface CurrentVersion {
|
|
5
|
+
id: string;
|
|
6
|
+
kind: VersionKind;
|
|
7
|
+
label: string;
|
|
8
|
+
created_at?: string;
|
|
9
|
+
deployment_id?: string | null;
|
|
10
|
+
url?: string | null;
|
|
11
|
+
release_version?: string | null;
|
|
12
|
+
}
|
|
13
|
+
export interface ThemeView {
|
|
14
|
+
id: string;
|
|
15
|
+
name: string;
|
|
16
|
+
is_published: boolean;
|
|
17
|
+
mode?: ThemeMode;
|
|
18
|
+
current_version?: CurrentVersion | null;
|
|
19
|
+
latest_release?: {
|
|
20
|
+
version: string;
|
|
21
|
+
} | null;
|
|
22
|
+
versions_count?: number;
|
|
23
|
+
kind?: string;
|
|
24
|
+
[key: string]: unknown;
|
|
25
|
+
}
|
|
26
|
+
export interface ThemeRow {
|
|
27
|
+
id: string;
|
|
28
|
+
name: string;
|
|
29
|
+
mode: ThemeMode;
|
|
30
|
+
version: string | null;
|
|
31
|
+
live: boolean;
|
|
32
|
+
update: string | null;
|
|
33
|
+
}
|
|
34
|
+
export interface ThemeVersion {
|
|
35
|
+
id: string;
|
|
36
|
+
kind: VersionKind;
|
|
37
|
+
label: string;
|
|
38
|
+
created_at: string;
|
|
39
|
+
current: boolean;
|
|
40
|
+
serving: boolean;
|
|
41
|
+
usable: boolean;
|
|
42
|
+
unusable_reason?: string | null;
|
|
43
|
+
release?: {
|
|
44
|
+
version?: string;
|
|
45
|
+
[key: string]: unknown;
|
|
46
|
+
} | null;
|
|
47
|
+
build?: {
|
|
48
|
+
deployment_id: string;
|
|
49
|
+
status: string;
|
|
50
|
+
error: string | null;
|
|
51
|
+
} | null;
|
|
52
|
+
link?: {
|
|
53
|
+
url: string;
|
|
54
|
+
allowed_origins: string[];
|
|
55
|
+
} | null;
|
|
56
|
+
url?: string | null;
|
|
57
|
+
}
|
|
58
|
+
export interface VersionRow {
|
|
59
|
+
id: string;
|
|
60
|
+
kind: VersionKind;
|
|
61
|
+
label: string;
|
|
62
|
+
current: boolean;
|
|
63
|
+
serving: boolean;
|
|
64
|
+
usable: string;
|
|
65
|
+
created: string;
|
|
66
|
+
}
|
|
67
|
+
export interface ThemesClient {
|
|
68
|
+
storeGet<T = any>(path: string): Promise<T>;
|
|
69
|
+
storePost<T = any>(path: string, body?: unknown): Promise<T>;
|
|
70
|
+
storePut<T = any>(path: string, body?: unknown): Promise<T>;
|
|
71
|
+
storePatch<T = any>(path: string, body?: unknown): Promise<T>;
|
|
72
|
+
}
|
|
73
|
+
export declare function themeMode(t: Pick<ThemeView, "mode" | "current_version" | "kind">): ThemeMode;
|
|
74
|
+
export declare function newerRelease(t: Pick<ThemeView, "current_version" | "latest_release">): string | null;
|
|
75
|
+
export declare function themeRow(t: ThemeView): ThemeRow;
|
|
76
|
+
export declare function versionRow(v: ThemeVersion): VersionRow;
|
|
77
|
+
export declare function describeVersion(v: Pick<ThemeVersion, "kind" | "label"> & Partial<Pick<ThemeVersion, "link" | "url">>): string;
|
|
78
|
+
export declare function listThemes(client: ThemesClient): Promise<ThemeView[]>;
|
|
79
|
+
export declare function getTheme(client: ThemesClient, id: string): Promise<ThemeView>;
|
|
80
|
+
export declare function getThemeForChange(client: ThemesClient, id: string, opts: {
|
|
81
|
+
yes: boolean;
|
|
82
|
+
retry: string;
|
|
83
|
+
}): Promise<ThemeView | undefined>;
|
|
84
|
+
export declare const DEFAULT_CATALOG_THEME = "default";
|
|
85
|
+
export interface CreateThemeInput {
|
|
86
|
+
name?: string;
|
|
87
|
+
from?: string;
|
|
88
|
+
}
|
|
89
|
+
export declare function createThemeBody(input: CreateThemeInput): Record<string, unknown>;
|
|
90
|
+
export declare function createTheme(client: ThemesClient, input: CreateThemeInput): Promise<ThemeView>;
|
|
91
|
+
export declare function duplicateTheme(client: ThemesClient, id: string, name?: string): Promise<ThemeView>;
|
|
92
|
+
export declare function listVersions(client: ThemesClient, id: string): Promise<ThemeVersion[]>;
|
|
93
|
+
export declare function useVersion(client: ThemesClient, id: string, versionId: string): Promise<ThemeView>;
|
|
94
|
+
export interface AddedVersion {
|
|
95
|
+
theme: ThemeView;
|
|
96
|
+
version: ThemeVersion;
|
|
97
|
+
}
|
|
98
|
+
export interface LinkInput {
|
|
99
|
+
url: string;
|
|
100
|
+
allowedOrigins?: string[];
|
|
101
|
+
}
|
|
102
|
+
export declare function linkVersionBody(input: LinkInput): Record<string, unknown>;
|
|
103
|
+
export declare function addLinkVersion(client: ThemesClient, id: string, input: LinkInput): Promise<AddedVersion>;
|
|
104
|
+
export declare function releaseVersionBody(version?: string): Record<string, unknown>;
|
|
105
|
+
export declare function addReleaseVersion(client: ThemesClient, id: string, version?: string): Promise<AddedVersion>;
|
|
106
|
+
export declare function publishTheme(client: ThemesClient, id: string): Promise<ThemeView>;
|
|
107
|
+
export declare function pushThemeSchema(client: ThemesClient, themeId: string, settingsSchema: unknown): Promise<ThemeView>;
|
|
108
|
+
export interface ErrorContext {
|
|
109
|
+
themeId?: string;
|
|
110
|
+
catalogId?: string;
|
|
111
|
+
releaseVersion?: string;
|
|
112
|
+
}
|
|
113
|
+
export declare function unusableHint(reason: string | null | undefined, ctx?: ErrorContext): string;
|
|
114
|
+
export declare function hostingNotInPlan(versionId: string): CliError;
|
|
115
|
+
export declare function themeError(error: unknown, ctx?: ErrorContext): unknown;
|
|
116
|
+
export interface ThemeOption {
|
|
117
|
+
id: string;
|
|
118
|
+
name: string;
|
|
119
|
+
is_published: boolean;
|
|
120
|
+
}
|
|
121
|
+
export declare function themeOptions(details: unknown): ThemeOption[];
|
|
122
|
+
export interface ThemePromptIO {
|
|
123
|
+
select: (config: {
|
|
124
|
+
message: string;
|
|
125
|
+
choices: {
|
|
126
|
+
name: string;
|
|
127
|
+
value: string;
|
|
128
|
+
}[];
|
|
129
|
+
}) => Promise<string>;
|
|
130
|
+
confirm: (config: {
|
|
131
|
+
message: string;
|
|
132
|
+
default: boolean;
|
|
133
|
+
}) => Promise<boolean>;
|
|
134
|
+
save?: (id: string) => void;
|
|
135
|
+
stderr: (text: string) => void;
|
|
136
|
+
}
|
|
137
|
+
export interface ThemeChoice {
|
|
138
|
+
id: string;
|
|
139
|
+
allowLive: boolean;
|
|
140
|
+
}
|
|
141
|
+
export declare function promptForTheme(options: ThemeOption[], io: ThemePromptIO, opts?: {
|
|
142
|
+
allowLive?: boolean;
|
|
143
|
+
}): Promise<ThemeChoice | undefined>;
|