@iterable/cli 0.1.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/COMMANDS.md +1574 -0
- package/LICENSE.md +21 -0
- package/README.md +194 -0
- package/dist/commands/campaigns.d.ts +3 -0
- package/dist/commands/campaigns.d.ts.map +1 -0
- package/dist/commands/campaigns.js +106 -0
- package/dist/commands/campaigns.js.map +1 -0
- package/dist/commands/catalogs.d.ts +3 -0
- package/dist/commands/catalogs.d.ts.map +1 -0
- package/dist/commands/catalogs.js +99 -0
- package/dist/commands/catalogs.js.map +1 -0
- package/dist/commands/events.d.ts +3 -0
- package/dist/commands/events.d.ts.map +1 -0
- package/dist/commands/events.js +33 -0
- package/dist/commands/events.js.map +1 -0
- package/dist/commands/experiments.d.ts +3 -0
- package/dist/commands/experiments.d.ts.map +1 -0
- package/dist/commands/experiments.js +33 -0
- package/dist/commands/experiments.js.map +1 -0
- package/dist/commands/export.d.ts +3 -0
- package/dist/commands/export.d.ts.map +1 -0
- package/dist/commands/export.js +33 -0
- package/dist/commands/export.js.map +1 -0
- package/dist/commands/journeys.d.ts +3 -0
- package/dist/commands/journeys.d.ts.map +1 -0
- package/dist/commands/journeys.js +21 -0
- package/dist/commands/journeys.js.map +1 -0
- package/dist/commands/lists.d.ts +3 -0
- package/dist/commands/lists.d.ts.map +1 -0
- package/dist/commands/lists.js +64 -0
- package/dist/commands/lists.js.map +1 -0
- package/dist/commands/messaging.d.ts +3 -0
- package/dist/commands/messaging.d.ts.map +1 -0
- package/dist/commands/messaging.js +120 -0
- package/dist/commands/messaging.js.map +1 -0
- package/dist/commands/registry.d.ts +46 -0
- package/dist/commands/registry.d.ts.map +1 -0
- package/dist/commands/registry.js +42 -0
- package/dist/commands/registry.js.map +1 -0
- package/dist/commands/snippets.d.ts +3 -0
- package/dist/commands/snippets.d.ts.map +1 -0
- package/dist/commands/snippets.js +42 -0
- package/dist/commands/snippets.js.map +1 -0
- package/dist/commands/subscriptions.d.ts +3 -0
- package/dist/commands/subscriptions.d.ts.map +1 -0
- package/dist/commands/subscriptions.js +40 -0
- package/dist/commands/subscriptions.js.map +1 -0
- package/dist/commands/templates.d.ts +3 -0
- package/dist/commands/templates.d.ts.map +1 -0
- package/dist/commands/templates.js +160 -0
- package/dist/commands/templates.js.map +1 -0
- package/dist/commands/transforms.d.ts +3 -0
- package/dist/commands/transforms.d.ts.map +1 -0
- package/dist/commands/transforms.js +24 -0
- package/dist/commands/transforms.js.map +1 -0
- package/dist/commands/types.d.ts +40 -0
- package/dist/commands/types.d.ts.map +1 -0
- package/dist/commands/types.js +15 -0
- package/dist/commands/types.js.map +1 -0
- package/dist/commands/users.d.ts +3 -0
- package/dist/commands/users.d.ts.map +1 -0
- package/dist/commands/users.js +103 -0
- package/dist/commands/users.js.map +1 -0
- package/dist/commands/webhooks.d.ts +3 -0
- package/dist/commands/webhooks.d.ts.map +1 -0
- package/dist/commands/webhooks.js +21 -0
- package/dist/commands/webhooks.js.map +1 -0
- package/dist/config.d.ts +14 -0
- package/dist/config.d.ts.map +1 -0
- package/dist/config.js +60 -0
- package/dist/config.js.map +1 -0
- package/dist/errors.d.ts +11 -0
- package/dist/errors.d.ts.map +1 -0
- package/dist/errors.js +21 -0
- package/dist/errors.js.map +1 -0
- package/dist/index.d.ts +3 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +107 -0
- package/dist/index.js.map +1 -0
- package/dist/key-manager.d.ts +280 -0
- package/dist/key-manager.d.ts.map +1 -0
- package/dist/key-manager.js +989 -0
- package/dist/key-manager.js.map +1 -0
- package/dist/keys-cli.d.ts +3 -0
- package/dist/keys-cli.d.ts.map +1 -0
- package/dist/keys-cli.js +396 -0
- package/dist/keys-cli.js.map +1 -0
- package/dist/output.d.ts +5 -0
- package/dist/output.d.ts.map +1 -0
- package/dist/output.js +104 -0
- package/dist/output.js.map +1 -0
- package/dist/parser.d.ts +26 -0
- package/dist/parser.d.ts.map +1 -0
- package/dist/parser.js +281 -0
- package/dist/parser.js.map +1 -0
- package/dist/router.d.ts +20 -0
- package/dist/router.d.ts.map +1 -0
- package/dist/router.js +137 -0
- package/dist/router.js.map +1 -0
- package/dist/utils/cli-env.d.ts +10 -0
- package/dist/utils/cli-env.d.ts.map +1 -0
- package/dist/utils/cli-env.js +21 -0
- package/dist/utils/cli-env.js.map +1 -0
- package/dist/utils/command-info.d.ts +7 -0
- package/dist/utils/command-info.d.ts.map +1 -0
- package/dist/utils/command-info.js +36 -0
- package/dist/utils/command-info.js.map +1 -0
- package/dist/utils/detect-background.d.ts +3 -0
- package/dist/utils/detect-background.d.ts.map +1 -0
- package/dist/utils/detect-background.js +33 -0
- package/dist/utils/detect-background.js.map +1 -0
- package/dist/utils/endpoint-prompt.d.ts +5 -0
- package/dist/utils/endpoint-prompt.d.ts.map +1 -0
- package/dist/utils/endpoint-prompt.js +98 -0
- package/dist/utils/endpoint-prompt.js.map +1 -0
- package/dist/utils/formatting.d.ts +3 -0
- package/dist/utils/formatting.d.ts.map +1 -0
- package/dist/utils/formatting.js +5 -0
- package/dist/utils/formatting.js.map +1 -0
- package/dist/utils/password-prompt.d.ts +3 -0
- package/dist/utils/password-prompt.d.ts.map +1 -0
- package/dist/utils/password-prompt.js +21 -0
- package/dist/utils/password-prompt.js.map +1 -0
- package/dist/utils/sanitize.d.ts +13 -0
- package/dist/utils/sanitize.d.ts.map +1 -0
- package/dist/utils/sanitize.js +23 -0
- package/dist/utils/sanitize.js.map +1 -0
- package/dist/utils/theme.d.ts +11 -0
- package/dist/utils/theme.d.ts.map +1 -0
- package/dist/utils/theme.js +14 -0
- package/dist/utils/theme.js.map +1 -0
- package/dist/utils/ui.d.ts +22 -0
- package/dist/utils/ui.d.ts.map +1 -0
- package/dist/utils/ui.js +107 -0
- package/dist/utils/ui.js.map +1 -0
- package/dist/utils/url.d.ts +13 -0
- package/dist/utils/url.d.ts.map +1 -0
- package/dist/utils/url.js +20 -0
- package/dist/utils/url.js.map +1 -0
- package/package.json +90 -0
|
@@ -0,0 +1,98 @@
|
|
|
1
|
+
import chalk from "chalk";
|
|
2
|
+
import inquirer from "inquirer";
|
|
3
|
+
import { isHttpsOrLocalhost, isLocalhostHost } from "./url.js";
|
|
4
|
+
const US_ENDPOINT = "https://api.iterable.com";
|
|
5
|
+
const EU_ENDPOINT = "https://api.eu.iterable.com";
|
|
6
|
+
/** Prompt user to select Iterable region or provide a custom endpoint. */
|
|
7
|
+
export async function promptForIterableBaseUrl(options) {
|
|
8
|
+
const defaultBaseUrl = options?.defaultBaseUrl;
|
|
9
|
+
const allowFlagEmoji = process.platform !== "win32";
|
|
10
|
+
let defaultChoice = "us";
|
|
11
|
+
if (defaultBaseUrl) {
|
|
12
|
+
if (defaultBaseUrl === US_ENDPOINT)
|
|
13
|
+
defaultChoice = "us";
|
|
14
|
+
else if (defaultBaseUrl === EU_ENDPOINT)
|
|
15
|
+
defaultChoice = "eu";
|
|
16
|
+
else
|
|
17
|
+
defaultChoice = "custom";
|
|
18
|
+
}
|
|
19
|
+
const { endpointChoice } = await inquirer.prompt([
|
|
20
|
+
{
|
|
21
|
+
type: "list",
|
|
22
|
+
name: "endpointChoice",
|
|
23
|
+
message: "Select your Iterable region:",
|
|
24
|
+
choices: [
|
|
25
|
+
{
|
|
26
|
+
name: `${allowFlagEmoji ? "🇺🇸 " : ""}US (api.iterable.com)`,
|
|
27
|
+
value: "us",
|
|
28
|
+
short: "US",
|
|
29
|
+
},
|
|
30
|
+
{
|
|
31
|
+
name: `${allowFlagEmoji ? "🇪🇺 " : ""}EU (api.eu.iterable.com)`,
|
|
32
|
+
value: "eu",
|
|
33
|
+
short: "EU",
|
|
34
|
+
},
|
|
35
|
+
{
|
|
36
|
+
name: `${allowFlagEmoji ? "🌍 " : ""}Custom endpoint`,
|
|
37
|
+
value: "custom",
|
|
38
|
+
short: "Custom",
|
|
39
|
+
},
|
|
40
|
+
],
|
|
41
|
+
default: defaultChoice,
|
|
42
|
+
},
|
|
43
|
+
]);
|
|
44
|
+
if (endpointChoice === "us")
|
|
45
|
+
return US_ENDPOINT;
|
|
46
|
+
if (endpointChoice === "eu")
|
|
47
|
+
return EU_ENDPOINT;
|
|
48
|
+
const customUrlQuestion = {
|
|
49
|
+
type: "input",
|
|
50
|
+
name: "customUrl",
|
|
51
|
+
message: "Enter custom API endpoint URL:",
|
|
52
|
+
validate: (input) => {
|
|
53
|
+
if (!input)
|
|
54
|
+
return "URL is required";
|
|
55
|
+
try {
|
|
56
|
+
new URL(input);
|
|
57
|
+
return true;
|
|
58
|
+
}
|
|
59
|
+
catch {
|
|
60
|
+
return "Invalid URL format";
|
|
61
|
+
}
|
|
62
|
+
},
|
|
63
|
+
...(defaultChoice === "custom" && defaultBaseUrl
|
|
64
|
+
? { default: defaultBaseUrl }
|
|
65
|
+
: {}),
|
|
66
|
+
};
|
|
67
|
+
const { customUrl } = await inquirer.prompt([
|
|
68
|
+
customUrlQuestion,
|
|
69
|
+
]);
|
|
70
|
+
const url = new URL(customUrl);
|
|
71
|
+
const isIterableDomain = url.hostname === "iterable.com" || url.hostname.endsWith(".iterable.com");
|
|
72
|
+
const isLocalhost = isLocalhostHost(url.hostname);
|
|
73
|
+
if (!isHttpsOrLocalhost(url)) {
|
|
74
|
+
console.error(
|
|
75
|
+
// eslint-disable-line no-console
|
|
76
|
+
chalk.red("HTTP is not allowed for non-local endpoints. Please use HTTPS."));
|
|
77
|
+
throw new Error("insecure-nonlocal");
|
|
78
|
+
}
|
|
79
|
+
if (!isIterableDomain && !isLocalhost) {
|
|
80
|
+
console.log(); // eslint-disable-line no-console
|
|
81
|
+
console.log(
|
|
82
|
+
// eslint-disable-line no-console
|
|
83
|
+
chalk.yellow("You selected a non-Iterable domain. This reduces security assurances and may not be supported."));
|
|
84
|
+
const { confirmCustom } = await inquirer.prompt([
|
|
85
|
+
{
|
|
86
|
+
type: "confirm",
|
|
87
|
+
name: "confirmCustom",
|
|
88
|
+
message: `Proceed with endpoint ${customUrl}?`,
|
|
89
|
+
default: false,
|
|
90
|
+
},
|
|
91
|
+
]);
|
|
92
|
+
if (!confirmCustom) {
|
|
93
|
+
throw new Error("custom-cancelled");
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
return customUrl;
|
|
97
|
+
}
|
|
98
|
+
//# sourceMappingURL=endpoint-prompt.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"endpoint-prompt.js","sourceRoot":"","sources":["../../src/utils/endpoint-prompt.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"formatting.d.ts","sourceRoot":"","sources":["../../src/utils/formatting.ts"],"names":[],"mappings":"AAAA,gEAAgE;AAChE,wBAAgB,oBAAoB,IAAI,MAAM,CAE7C"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"formatting.js","sourceRoot":"","sources":["../../src/utils/formatting.ts"],"names":[],"mappings":"AAAA,gEAAgE;AAChE,MAAM,UAAU,oBAAoB;IAClC,OAAO,mGAAmG,CAAC;AAC7G,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"password-prompt.d.ts","sourceRoot":"","sources":["../../src/utils/password-prompt.ts"],"names":[],"mappings":"AAEA,2DAA2D;AAC3D,wBAAsB,eAAe,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAgBzE"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import inquirer from "inquirer";
|
|
2
|
+
/** Prompt for API key input with masking and validation */
|
|
3
|
+
export async function promptForApiKey(promptText) {
|
|
4
|
+
const { apiKey } = await inquirer.prompt([
|
|
5
|
+
{
|
|
6
|
+
type: "password",
|
|
7
|
+
name: "apiKey",
|
|
8
|
+
message: promptText,
|
|
9
|
+
mask: "*",
|
|
10
|
+
validate: (input) => {
|
|
11
|
+
if (!input)
|
|
12
|
+
return "API key is required";
|
|
13
|
+
if (!/^[a-f0-9]{32}$/.test(input))
|
|
14
|
+
return "API key must be a 32-character lowercase hexadecimal string";
|
|
15
|
+
return true;
|
|
16
|
+
},
|
|
17
|
+
},
|
|
18
|
+
]);
|
|
19
|
+
return apiKey.trim();
|
|
20
|
+
}
|
|
21
|
+
//# sourceMappingURL=password-prompt.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"password-prompt.js","sourceRoot":"","sources":["../../src/utils/password-prompt.ts"],"names":[],"mappings":"AAAA,OAAO,QAAQ,MAAM,UAAU,CAAC;AAEhC,2DAA2D;AAC3D,MAAM,CAAC,KAAK,UAAU,eAAe,CAAC,UAAkB;IACtD,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,QAAQ,CAAC,MAAM,CAAqB;QAC3D;YACE,IAAI,EAAE,UAAU;YAChB,IAAI,EAAE,QAAQ;YACd,OAAO,EAAE,UAAU;YACnB,IAAI,EAAE,GAAG;YACT,QAAQ,EAAE,CAAC,KAAa,EAAE,EAAE;gBAC1B,IAAI,CAAC,KAAK;oBAAE,OAAO,qBAAqB,CAAC;gBACzC,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,KAAK,CAAC;oBAC/B,OAAO,6DAA6D,CAAC;gBACvE,OAAO,IAAI,CAAC;YACd,CAAC;SACF;KACF,CAAC,CAAC;IACH,OAAO,MAAM,CAAC,IAAI,EAAE,CAAC;AACvB,CAAC"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Sanitization utilities for logging
|
|
3
|
+
*
|
|
4
|
+
* Prevents accidental exposure of Iterable API keys in logs and error messages.
|
|
5
|
+
*/
|
|
6
|
+
/**
|
|
7
|
+
* Sanitize a string by replacing Iterable API keys with [REDACTED]
|
|
8
|
+
*
|
|
9
|
+
* @param text - The text to sanitize
|
|
10
|
+
* @returns Sanitized text with API keys replaced
|
|
11
|
+
*/
|
|
12
|
+
export declare function sanitizeString(text: string): string;
|
|
13
|
+
//# sourceMappingURL=sanitize.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sanitize.d.ts","sourceRoot":"","sources":["../../src/utils/sanitize.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAOH;;;;;GAKG;AACH,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAKnD"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Sanitization utilities for logging
|
|
3
|
+
*
|
|
4
|
+
* Prevents accidental exposure of Iterable API keys in logs and error messages.
|
|
5
|
+
*/
|
|
6
|
+
// Pattern to match Iterable API keys (32-character lowercase hexadecimal)
|
|
7
|
+
const ITERABLE_API_KEY_PATTERN = /\b[a-f0-9]{32}\b/gi;
|
|
8
|
+
// Pattern to match emails (basic heuristic)
|
|
9
|
+
const EMAIL_PATTERN = /\b[\w.+-]+@[\w.-]+\.[A-Za-z]{2,}\b/g;
|
|
10
|
+
/**
|
|
11
|
+
* Sanitize a string by replacing Iterable API keys with [REDACTED]
|
|
12
|
+
*
|
|
13
|
+
* @param text - The text to sanitize
|
|
14
|
+
* @returns Sanitized text with API keys replaced
|
|
15
|
+
*/
|
|
16
|
+
export function sanitizeString(text) {
|
|
17
|
+
if (!text)
|
|
18
|
+
return text;
|
|
19
|
+
return text
|
|
20
|
+
.replace(ITERABLE_API_KEY_PATTERN, "[REDACTED]")
|
|
21
|
+
.replace(EMAIL_PATTERN, "[REDACTED_EMAIL]");
|
|
22
|
+
}
|
|
23
|
+
//# sourceMappingURL=sanitize.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sanitize.js","sourceRoot":"","sources":["../../src/utils/sanitize.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,0EAA0E;AAC1E,MAAM,wBAAwB,GAAG,oBAAoB,CAAC;AACtD,4CAA4C;AAC5C,MAAM,aAAa,GAAG,qCAAqC,CAAC;AAE5D;;;;;GAKG;AACH,MAAM,UAAU,cAAc,CAAC,IAAY;IACzC,IAAI,CAAC,IAAI;QAAE,OAAO,IAAI,CAAC;IACvB,OAAO,IAAI;SACR,OAAO,CAAC,wBAAwB,EAAE,YAAY,CAAC;SAC/C,OAAO,CAAC,aAAa,EAAE,kBAAkB,CAAC,CAAC;AAChD,CAAC"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
export declare const theme: {
|
|
2
|
+
readonly mode: import("./detect-background.js").BackgroundMode;
|
|
3
|
+
readonly key: import("chalk").ChalkInstance;
|
|
4
|
+
readonly value: import("chalk").ChalkInstance;
|
|
5
|
+
readonly number: import("chalk").ChalkInstance;
|
|
6
|
+
readonly boolean: import("chalk").ChalkInstance;
|
|
7
|
+
readonly muted: import("chalk").ChalkInstance;
|
|
8
|
+
readonly accent: import("chalk").ChalkInstance;
|
|
9
|
+
readonly bold: import("chalk").ChalkInstance;
|
|
10
|
+
};
|
|
11
|
+
//# sourceMappingURL=theme.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"theme.d.ts","sourceRoot":"","sources":["../../src/utils/theme.ts"],"names":[],"mappings":"AAMA,eAAO,MAAM,KAAK;;;;;;;;;CAUR,CAAC"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import chalk from "chalk";
|
|
2
|
+
import { detectBackground } from "./detect-background.js";
|
|
3
|
+
const mode = detectBackground();
|
|
4
|
+
export const theme = {
|
|
5
|
+
mode,
|
|
6
|
+
key: mode === "dark" ? chalk.hex("#7DD3FC") : chalk.hex("#0369A1"),
|
|
7
|
+
value: mode === "dark" ? chalk.hex("#86EFAC") : chalk.green,
|
|
8
|
+
number: mode === "dark" ? chalk.hex("#FDE68A") : chalk.yellow,
|
|
9
|
+
boolean: mode === "dark" ? chalk.hex("#67E8F9") : chalk.cyan,
|
|
10
|
+
muted: mode === "dark" ? chalk.hex("#E5E7EB") : chalk.dim,
|
|
11
|
+
accent: mode === "dark" ? chalk.hex("#7DD3FC") : chalk.cyan,
|
|
12
|
+
bold: chalk.bold,
|
|
13
|
+
};
|
|
14
|
+
//# sourceMappingURL=theme.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"theme.js","sourceRoot":"","sources":["../../src/utils/theme.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B,OAAO,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAE1D,MAAM,IAAI,GAAG,gBAAgB,EAAE,CAAC;AAEhC,MAAM,CAAC,MAAM,KAAK,GAAG;IACnB,IAAI;IAEJ,GAAG,EAAE,IAAI,KAAK,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,SAAS,CAAC;IAClE,KAAK,EAAE,IAAI,KAAK,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK;IAC3D,MAAM,EAAE,IAAI,KAAK,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,MAAM;IAC7D,OAAO,EAAE,IAAI,KAAK,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI;IAC5D,KAAK,EAAE,IAAI,KAAK,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG;IACzD,MAAM,EAAE,IAAI,KAAK,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI;IAC3D,IAAI,EAAE,KAAK,CAAC,IAAI;CACR,CAAC"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import Table from "cli-table3";
|
|
2
|
+
export declare function linkColor(): (s: string) => string;
|
|
3
|
+
export declare const icons: {
|
|
4
|
+
readonly key: "🔑";
|
|
5
|
+
readonly bulb: "💡";
|
|
6
|
+
readonly fire: "🔥";
|
|
7
|
+
};
|
|
8
|
+
export declare function showSuccess(message: string): void;
|
|
9
|
+
export declare function showError(message: string): void;
|
|
10
|
+
export declare function showInfo(message: string): void;
|
|
11
|
+
export declare function showBox(title: string, content: string | string[], options?: {
|
|
12
|
+
icon?: string;
|
|
13
|
+
theme?: "primary" | "success" | "warning" | "error" | "info";
|
|
14
|
+
padding?: number;
|
|
15
|
+
}): void;
|
|
16
|
+
export declare function showSection(title: string, icon?: string): void;
|
|
17
|
+
export declare function createTable(options: {
|
|
18
|
+
head: string[];
|
|
19
|
+
colWidths?: (number | null)[];
|
|
20
|
+
style?: "compact" | "normal" | "spacious";
|
|
21
|
+
}): Table.Table;
|
|
22
|
+
//# sourceMappingURL=ui.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ui.d.ts","sourceRoot":"","sources":["../../src/utils/ui.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,MAAM,YAAY,CAAC;AAuB/B,wBAAgB,SAAS,IAAI,CAAC,CAAC,EAAE,MAAM,KAAK,MAAM,CAEjD;AAMD,eAAO,MAAM,KAAK;;;;CAIR,CAAC;AAEX,wBAAgB,WAAW,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAEjD;AAED,wBAAgB,SAAS,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAE/C;AAED,wBAAgB,QAAQ,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAE9C;AAED,wBAAgB,OAAO,CACrB,KAAK,EAAE,MAAM,EACb,OAAO,EAAE,MAAM,GAAG,MAAM,EAAE,EAC1B,OAAO,GAAE;IACP,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,SAAS,GAAG,SAAS,GAAG,SAAS,GAAG,OAAO,GAAG,MAAM,CAAC;IAC7D,OAAO,CAAC,EAAE,MAAM,CAAC;CACb,GACL,IAAI,CAuBN;AAED,wBAAgB,WAAW,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,GAAG,IAAI,CAa9D;AAED,wBAAgB,WAAW,CAAC,OAAO,EAAE;IACnC,IAAI,EAAE,MAAM,EAAE,CAAC;IACf,SAAS,CAAC,EAAE,CAAC,MAAM,GAAG,IAAI,CAAC,EAAE,CAAC;IAC9B,KAAK,CAAC,EAAE,SAAS,GAAG,QAAQ,GAAG,UAAU,CAAC;CAC3C,GAAG,KAAK,CAAC,KAAK,CAsCd"}
|
package/dist/utils/ui.js
ADDED
|
@@ -0,0 +1,107 @@
|
|
|
1
|
+
/* eslint-disable no-console */
|
|
2
|
+
import boxen from "boxen";
|
|
3
|
+
import chalk from "chalk";
|
|
4
|
+
import Table from "cli-table3";
|
|
5
|
+
import { detectBackground } from "./detect-background.js";
|
|
6
|
+
const THEME = {
|
|
7
|
+
primary: "#5F40D8",
|
|
8
|
+
accent: "#16C5FF",
|
|
9
|
+
success: "#5DB5A1",
|
|
10
|
+
error: "#E64F7C",
|
|
11
|
+
info: "#16C5FF",
|
|
12
|
+
neutralDark: "#111827",
|
|
13
|
+
neutralLighter: "#CBD5E1",
|
|
14
|
+
purpleBright: "#C4B5FD",
|
|
15
|
+
};
|
|
16
|
+
function isDarkBackground() {
|
|
17
|
+
return detectBackground() === "dark";
|
|
18
|
+
}
|
|
19
|
+
function linkHex() {
|
|
20
|
+
return isDarkBackground() ? THEME.accent : "#0EA5E9";
|
|
21
|
+
}
|
|
22
|
+
export function linkColor() {
|
|
23
|
+
return chalk.hex(linkHex());
|
|
24
|
+
}
|
|
25
|
+
function successHex() {
|
|
26
|
+
return isDarkBackground() ? THEME.success : "#166534";
|
|
27
|
+
}
|
|
28
|
+
export const icons = {
|
|
29
|
+
key: "🔑",
|
|
30
|
+
bulb: "💡",
|
|
31
|
+
fire: "🔥",
|
|
32
|
+
};
|
|
33
|
+
export function showSuccess(message) {
|
|
34
|
+
console.log(chalk.hex(successHex())("✔ " + message));
|
|
35
|
+
}
|
|
36
|
+
export function showError(message) {
|
|
37
|
+
console.log(chalk.hex(THEME.error)("✖ " + message));
|
|
38
|
+
}
|
|
39
|
+
export function showInfo(message) {
|
|
40
|
+
console.log(chalk.hex(THEME.info)(" " + message));
|
|
41
|
+
}
|
|
42
|
+
export function showBox(title, content, options = {}) {
|
|
43
|
+
const { icon, theme: boxTheme = "primary", padding = 1 } = options;
|
|
44
|
+
const displayTitle = icon ? `${icon} ${title}` : title;
|
|
45
|
+
const message = Array.isArray(content) ? content.join("\n") : content;
|
|
46
|
+
const borderColorMap = {
|
|
47
|
+
primary: "magenta",
|
|
48
|
+
success: "green",
|
|
49
|
+
warning: "yellow",
|
|
50
|
+
error: "red",
|
|
51
|
+
info: "cyan",
|
|
52
|
+
};
|
|
53
|
+
console.log(boxen(message, {
|
|
54
|
+
title: displayTitle,
|
|
55
|
+
titleAlignment: "center",
|
|
56
|
+
padding,
|
|
57
|
+
margin: { top: 1, bottom: 1 },
|
|
58
|
+
borderStyle: "round",
|
|
59
|
+
borderColor: borderColorMap[boxTheme] ?? "magenta",
|
|
60
|
+
}));
|
|
61
|
+
}
|
|
62
|
+
export function showSection(title, icon) {
|
|
63
|
+
console.log();
|
|
64
|
+
const showIcons = process.env.ITERABLE_UI_ICONS === "true";
|
|
65
|
+
const displayTitle = icon && showIcons ? `${icon} ${title}` : title;
|
|
66
|
+
const dark = isDarkBackground();
|
|
67
|
+
console.log(chalk.bold.hex(dark ? THEME.purpleBright : THEME.primary)(displayTitle));
|
|
68
|
+
console.log(chalk.hex(dark ? THEME.neutralLighter : THEME.neutralDark)("─".repeat(Math.min(displayTitle.length + 2, 60))));
|
|
69
|
+
}
|
|
70
|
+
export function createTable(options) {
|
|
71
|
+
const { head, colWidths, style = "normal" } = options;
|
|
72
|
+
const padding = style === "compact"
|
|
73
|
+
? { left: 1, right: 1 }
|
|
74
|
+
: style === "spacious"
|
|
75
|
+
? { left: 2, right: 2 }
|
|
76
|
+
: { left: 1, right: 1 };
|
|
77
|
+
const dark = isDarkBackground();
|
|
78
|
+
const headColorHex = dark ? THEME.accent : THEME.primary;
|
|
79
|
+
return new Table({
|
|
80
|
+
head: head.map((h) => chalk.bold.hex(headColorHex)(h)),
|
|
81
|
+
...(colWidths && { colWidths }),
|
|
82
|
+
style: {
|
|
83
|
+
head: [],
|
|
84
|
+
border: ["magenta"],
|
|
85
|
+
"padding-left": padding.left,
|
|
86
|
+
"padding-right": padding.right,
|
|
87
|
+
},
|
|
88
|
+
chars: {
|
|
89
|
+
top: "─",
|
|
90
|
+
"top-mid": "┬",
|
|
91
|
+
"top-left": "╭",
|
|
92
|
+
"top-right": "╮",
|
|
93
|
+
bottom: "─",
|
|
94
|
+
"bottom-mid": "┴",
|
|
95
|
+
"bottom-left": "╰",
|
|
96
|
+
"bottom-right": "╯",
|
|
97
|
+
left: "│",
|
|
98
|
+
"left-mid": "├",
|
|
99
|
+
mid: "─",
|
|
100
|
+
"mid-mid": "┼",
|
|
101
|
+
right: "│",
|
|
102
|
+
"right-mid": "┤",
|
|
103
|
+
middle: "│",
|
|
104
|
+
},
|
|
105
|
+
});
|
|
106
|
+
}
|
|
107
|
+
//# sourceMappingURL=ui.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ui.js","sourceRoot":"","sources":["../../src/utils/ui.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* URL-related helpers
|
|
3
|
+
*/
|
|
4
|
+
/**
|
|
5
|
+
* Return true if the hostname is a localhost variant.
|
|
6
|
+
* Accepts IPv4/IPv6 loopback and "localhost".
|
|
7
|
+
*/
|
|
8
|
+
export declare function isLocalhostHost(hostname: string): boolean;
|
|
9
|
+
/**
|
|
10
|
+
* True if URL uses https, or is localhost over http(s).
|
|
11
|
+
*/
|
|
12
|
+
export declare function isHttpsOrLocalhost(url: URL): boolean;
|
|
13
|
+
//# sourceMappingURL=url.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"url.d.ts","sourceRoot":"","sources":["../../src/utils/url.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH;;;GAGG;AACH,wBAAgB,eAAe,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAIzD;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,GAAG,EAAE,GAAG,GAAG,OAAO,CAEpD"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* URL-related helpers
|
|
3
|
+
*/
|
|
4
|
+
/**
|
|
5
|
+
* Return true if the hostname is a localhost variant.
|
|
6
|
+
* Accepts IPv4/IPv6 loopback and "localhost".
|
|
7
|
+
*/
|
|
8
|
+
export function isLocalhostHost(hostname) {
|
|
9
|
+
if (!hostname)
|
|
10
|
+
return false;
|
|
11
|
+
const lower = hostname.toLowerCase();
|
|
12
|
+
return lower === "localhost" || lower === "127.0.0.1" || lower === "::1";
|
|
13
|
+
}
|
|
14
|
+
/**
|
|
15
|
+
* True if URL uses https, or is localhost over http(s).
|
|
16
|
+
*/
|
|
17
|
+
export function isHttpsOrLocalhost(url) {
|
|
18
|
+
return url.protocol === "https:" || isLocalhostHost(url.hostname);
|
|
19
|
+
}
|
|
20
|
+
//# sourceMappingURL=url.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"url.js","sourceRoot":"","sources":["../../src/utils/url.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH;;;GAGG;AACH,MAAM,UAAU,eAAe,CAAC,QAAgB;IAC9C,IAAI,CAAC,QAAQ;QAAE,OAAO,KAAK,CAAC;IAC5B,MAAM,KAAK,GAAG,QAAQ,CAAC,WAAW,EAAE,CAAC;IACrC,OAAO,KAAK,KAAK,WAAW,IAAI,KAAK,KAAK,WAAW,IAAI,KAAK,KAAK,KAAK,CAAC;AAC3E,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,kBAAkB,CAAC,GAAQ;IACzC,OAAO,GAAG,CAAC,QAAQ,KAAK,QAAQ,IAAI,eAAe,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;AACpE,CAAC"}
|
package/package.json
ADDED
|
@@ -0,0 +1,90 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@iterable/cli",
|
|
3
|
+
"version": "0.1.0",
|
|
4
|
+
"description": "Command-line interface for the Iterable API",
|
|
5
|
+
"keywords": [
|
|
6
|
+
"iterable",
|
|
7
|
+
"cli",
|
|
8
|
+
"api",
|
|
9
|
+
"command-line"
|
|
10
|
+
],
|
|
11
|
+
"author": "Greg Methvin",
|
|
12
|
+
"license": "MIT",
|
|
13
|
+
"repository": {
|
|
14
|
+
"type": "git",
|
|
15
|
+
"url": "git+https://github.com/Iterable/cli.git"
|
|
16
|
+
},
|
|
17
|
+
"main": "dist/index.js",
|
|
18
|
+
"types": "dist/index.d.ts",
|
|
19
|
+
"type": "module",
|
|
20
|
+
"bin": {
|
|
21
|
+
"iterable": "dist/index.js"
|
|
22
|
+
},
|
|
23
|
+
"files": [
|
|
24
|
+
"dist",
|
|
25
|
+
"README.md",
|
|
26
|
+
"COMMANDS.md",
|
|
27
|
+
"LICENSE"
|
|
28
|
+
],
|
|
29
|
+
"engines": {
|
|
30
|
+
"node": ">=20.0.0"
|
|
31
|
+
},
|
|
32
|
+
"packageManager": "pnpm@10.23.0",
|
|
33
|
+
"publishConfig": {
|
|
34
|
+
"access": "public"
|
|
35
|
+
},
|
|
36
|
+
"pnpm": {
|
|
37
|
+
"minimumReleaseAge": 4320,
|
|
38
|
+
"minimumReleaseAgeExclude": [
|
|
39
|
+
"@iterable/*"
|
|
40
|
+
]
|
|
41
|
+
},
|
|
42
|
+
"scripts": {
|
|
43
|
+
"build": "pnpm lint:fix && tsc --project tsconfig.build.json && pnpm update-commands && chmod +x dist/index.js",
|
|
44
|
+
"build:clean": "rm -rf dist && pnpm build",
|
|
45
|
+
"build:dev": "tsc --incremental && pnpm update-commands && chmod +x dist/index.js",
|
|
46
|
+
"build:watch": "tsc --incremental --watch",
|
|
47
|
+
"check": "pnpm format:check && tsc --noEmit && eslint \"src/**/*.ts\" \"tests/**/*.ts\" --quiet",
|
|
48
|
+
"dev": "tsx watch src/index.ts",
|
|
49
|
+
"format": "prettier --write \"src/**/*.ts\" \"tests/**/*.ts\" --log-level=warn",
|
|
50
|
+
"format:check": "prettier --check \"src/**/*.ts\" \"tests/**/*.ts\" --log-level=warn",
|
|
51
|
+
"lint:fix": "eslint \"src/**/*.ts\" \"tests/**/*.ts\" --fix --quiet",
|
|
52
|
+
"prepublishOnly": "pnpm build",
|
|
53
|
+
"pretest": "pnpm --silent build",
|
|
54
|
+
"start": "node dist/index.js",
|
|
55
|
+
"test": "jest",
|
|
56
|
+
"test:unit": "jest --testPathPatterns=unit",
|
|
57
|
+
"test:integration": "jest --testPathPatterns=integration",
|
|
58
|
+
"test:e2e": "jest --testPathPatterns=e2e",
|
|
59
|
+
"update-commands": "node scripts/update-commands.js"
|
|
60
|
+
},
|
|
61
|
+
"dependencies": {
|
|
62
|
+
"@iterable/api": "0.8.2",
|
|
63
|
+
"@primno/dpapi": "2.0.1",
|
|
64
|
+
"boxen": "^8.0.1",
|
|
65
|
+
"chalk": "5.6.2",
|
|
66
|
+
"cli-table3": "0.6.5",
|
|
67
|
+
"inquirer": "12.10.0",
|
|
68
|
+
"ora": "9.0.0",
|
|
69
|
+
"zod": "4.1.11",
|
|
70
|
+
"zod-opts": "1.0.0"
|
|
71
|
+
},
|
|
72
|
+
"devDependencies": {
|
|
73
|
+
"@eslint/js": "9.39.1",
|
|
74
|
+
"@jest/globals": "30.2.0",
|
|
75
|
+
"@swc/core": "1.15.0",
|
|
76
|
+
"@swc/jest": "0.2.39",
|
|
77
|
+
"@types/inquirer": "9.0.9",
|
|
78
|
+
"@types/jest": "30.0.0",
|
|
79
|
+
"@types/node": "24.10.0",
|
|
80
|
+
"@typescript-eslint/eslint-plugin": "8.46.3",
|
|
81
|
+
"@typescript-eslint/parser": "8.46.3",
|
|
82
|
+
"eslint": "9.39.1",
|
|
83
|
+
"eslint-plugin-simple-import-sort": "12.1.1",
|
|
84
|
+
"jest": "30.2.0",
|
|
85
|
+
"prettier": "3.6.2",
|
|
86
|
+
"tsx": "4.20.6",
|
|
87
|
+
"typescript": "5.9.3"
|
|
88
|
+
},
|
|
89
|
+
"sideEffects": false
|
|
90
|
+
}
|