@sendly/cli 3.0.2 → 3.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.
@@ -1,7 +1,7 @@
1
1
  import { BaseCommand } from "../lib/base-command.js";
2
2
  import { getAuthInfo } from "../lib/auth.js";
3
3
  import { success, info, keyValue, colors, json } from "../lib/output.js";
4
- import { getConfigPath } from "../lib/config.js";
4
+ import { getConfigValue, getConfigPath } from "../lib/config.js";
5
5
  export default class Whoami extends BaseCommand {
6
6
  static description = "Show current authentication status";
7
7
  static examples = ["<%= config.bin %> whoami"];
@@ -30,22 +30,26 @@ export default class Whoami extends BaseCommand {
30
30
  }
31
31
  success("Authenticated");
32
32
  console.log();
33
- const displayData = {
34
- Environment: colors.primary(authInfo.environment),
35
- };
33
+ const displayData = {};
34
+ // Show API mode (test vs live) - this determines if messages are actually sent
35
+ const mode = authInfo.keyType || authInfo.environment;
36
+ displayData["API Mode"] =
37
+ mode === "test"
38
+ ? colors.warning("test") + colors.dim(" (sandbox - no real messages)")
39
+ : colors.success("live") + colors.dim(" (production)");
36
40
  if (authInfo.email) {
37
41
  displayData["Email"] = authInfo.email;
38
42
  }
39
- if (authInfo.keyType) {
40
- displayData["Key Type"] = authInfo.keyType === "test"
41
- ? colors.warning("test")
42
- : colors.success("live");
43
- }
44
43
  if (authInfo.userId) {
45
44
  displayData["User ID"] = colors.dim(authInfo.userId);
46
45
  }
46
+ // Show which server we're connected to
47
+ const baseUrl = getConfigValue("baseUrl");
48
+ if (baseUrl && baseUrl !== "https://sendly.live") {
49
+ displayData["Server"] = colors.dim(baseUrl);
50
+ }
47
51
  displayData["Config"] = colors.dim(getConfigPath());
48
52
  keyValue(displayData);
49
53
  }
50
54
  }
51
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2hvYW1pLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2NvbW1hbmRzL3dob2FtaS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDckQsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzdDLE9BQU8sRUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFFLFFBQVEsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFDekUsT0FBTyxFQUFrQixhQUFhLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUVqRSxNQUFNLENBQUMsT0FBTyxPQUFPLE1BQU8sU0FBUSxXQUFXO0lBQzdDLE1BQU0sQ0FBQyxXQUFXLEdBQUcsb0NBQW9DLENBQUM7SUFFMUQsTUFBTSxDQUFDLFFBQVEsR0FBRyxDQUFDLDBCQUEwQixDQUFDLENBQUM7SUFFL0MsTUFBTSxDQUFDLEtBQUssR0FBRztRQUNiLEdBQUcsV0FBVyxDQUFDLFNBQVM7S0FDekIsQ0FBQztJQUVGLEtBQUssQ0FBQyxHQUFHO1FBQ1AsTUFBTSxFQUFFLEtBQUssRUFBRSxHQUFHLE1BQU0sSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUUzQyxNQUFNLFFBQVEsR0FBRyxNQUFNLFdBQVcsRUFBRSxDQUFDO1FBRXJDLElBQUksS0FBSyxDQUFDLElBQUksRUFBRSxDQUFDO1lBQ2YsSUFBSSxDQUFDO2dCQUNILGFBQWEsRUFBRSxRQUFRLENBQUMsYUFBYTtnQkFDckMsS0FBSyxFQUFFLFFBQVEsQ0FBQyxLQUFLO2dCQUNyQixNQUFNLEVBQUUsUUFBUSxDQUFDLE1BQU07Z0JBQ3ZCLFdBQVcsRUFBRSxRQUFRLENBQUMsV0FBVztnQkFDakMsT0FBTyxFQUFFLFFBQVEsQ0FBQyxPQUFPO2dCQUN6QixVQUFVLEVBQUUsYUFBYSxFQUFFO2FBQzVCLENBQUMsQ0FBQztZQUNILE9BQU87UUFDVCxDQUFDO1FBRUQsSUFBSSxDQUFDLFFBQVEsQ0FBQyxhQUFhLEVBQUUsQ0FBQztZQUM1QixJQUFJLENBQUMsZUFBZSxDQUFDLENBQUM7WUFDdEIsT0FBTyxDQUFDLEdBQUcsRUFBRSxDQUFDO1lBQ2QsT0FBTyxDQUFDLEdBQUcsQ0FBQyxTQUFTLE1BQU0sQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLGtCQUFrQixDQUFDLENBQUM7WUFDcEUsT0FBTztRQUNULENBQUM7UUFFRCxPQUFPLENBQUMsZUFBZSxDQUFDLENBQUM7UUFDekIsT0FBTyxDQUFDLEdBQUcsRUFBRSxDQUFDO1FBRWQsTUFBTSxXQUFXLEdBQTJCO1lBQzFDLFdBQVcsRUFBRSxNQUFNLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxXQUFXLENBQUM7U0FDbEQsQ0FBQztRQUVGLElBQUksUUFBUSxDQUFDLEtBQUssRUFBRSxDQUFDO1lBQ25CLFdBQVcsQ0FBQyxPQUFPLENBQUMsR0FBRyxRQUFRLENBQUMsS0FBSyxDQUFDO1FBQ3hDLENBQUM7UUFFRCxJQUFJLFFBQVEsQ0FBQyxPQUFPLEVBQUUsQ0FBQztZQUNyQixXQUFXLENBQUMsVUFBVSxDQUFDLEdBQUcsUUFBUSxDQUFDLE9BQU8sS0FBSyxNQUFNO2dCQUNuRCxDQUFDLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUM7Z0JBQ3hCLENBQUMsQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQzdCLENBQUM7UUFFRCxJQUFJLFFBQVEsQ0FBQyxNQUFNLEVBQUUsQ0FBQztZQUNwQixXQUFXLENBQUMsU0FBUyxDQUFDLEdBQUcsTUFBTSxDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDdkQsQ0FBQztRQUVELFdBQVcsQ0FBQyxRQUFRLENBQUMsR0FBRyxNQUFNLENBQUMsR0FBRyxDQUFDLGFBQWEsRUFBRSxDQUFDLENBQUM7UUFFcEQsUUFBUSxDQUFDLFdBQVcsQ0FBQyxDQUFDO0lBQ3hCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBCYXNlQ29tbWFuZCB9IGZyb20gXCIuLi9saWIvYmFzZS1jb21tYW5kLmpzXCI7XG5pbXBvcnQgeyBnZXRBdXRoSW5mbyB9IGZyb20gXCIuLi9saWIvYXV0aC5qc1wiO1xuaW1wb3J0IHsgc3VjY2VzcywgaW5mbywga2V5VmFsdWUsIGNvbG9ycywganNvbiB9IGZyb20gXCIuLi9saWIvb3V0cHV0LmpzXCI7XG5pbXBvcnQgeyBnZXRDb25maWdWYWx1ZSwgZ2V0Q29uZmlnUGF0aCB9IGZyb20gXCIuLi9saWIvY29uZmlnLmpzXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFdob2FtaSBleHRlbmRzIEJhc2VDb21tYW5kIHtcbiAgc3RhdGljIGRlc2NyaXB0aW9uID0gXCJTaG93IGN1cnJlbnQgYXV0aGVudGljYXRpb24gc3RhdHVzXCI7XG5cbiAgc3RhdGljIGV4YW1wbGVzID0gW1wiPCU9IGNvbmZpZy5iaW4gJT4gd2hvYW1pXCJdO1xuXG4gIHN0YXRpYyBmbGFncyA9IHtcbiAgICAuLi5CYXNlQ29tbWFuZC5iYXNlRmxhZ3MsXG4gIH07XG5cbiAgYXN5bmMgcnVuKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IHsgZmxhZ3MgfSA9IGF3YWl0IHRoaXMucGFyc2UoV2hvYW1pKTtcblxuICAgIGNvbnN0IGF1dGhJbmZvID0gYXdhaXQgZ2V0QXV0aEluZm8oKTtcblxuICAgIGlmIChmbGFncy5qc29uKSB7XG4gICAgICBqc29uKHtcbiAgICAgICAgYXV0aGVudGljYXRlZDogYXV0aEluZm8uYXV0aGVudGljYXRlZCxcbiAgICAgICAgZW1haWw6IGF1dGhJbmZvLmVtYWlsLFxuICAgICAgICB1c2VySWQ6IGF1dGhJbmZvLnVzZXJJZCxcbiAgICAgICAgZW52aXJvbm1lbnQ6IGF1dGhJbmZvLmVudmlyb25tZW50LFxuICAgICAgICBrZXlUeXBlOiBhdXRoSW5mby5rZXlUeXBlLFxuICAgICAgICBjb25maWdQYXRoOiBnZXRDb25maWdQYXRoKCksXG4gICAgICB9KTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAoIWF1dGhJbmZvLmF1dGhlbnRpY2F0ZWQpIHtcbiAgICAgIGluZm8oXCJOb3QgbG9nZ2VkIGluXCIpO1xuICAgICAgY29uc29sZS5sb2coKTtcbiAgICAgIGNvbnNvbGUubG9nKGAgIFJ1biAke2NvbG9ycy5jb2RlKFwic2VuZGx5IGxvZ2luXCIpfSB0byBhdXRoZW50aWNhdGVgKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBzdWNjZXNzKFwiQXV0aGVudGljYXRlZFwiKTtcbiAgICBjb25zb2xlLmxvZygpO1xuXG4gICAgY29uc3QgZGlzcGxheURhdGE6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4gPSB7XG4gICAgICBFbnZpcm9ubWVudDogY29sb3JzLnByaW1hcnkoYXV0aEluZm8uZW52aXJvbm1lbnQpLFxuICAgIH07XG5cbiAgICBpZiAoYXV0aEluZm8uZW1haWwpIHtcbiAgICAgIGRpc3BsYXlEYXRhW1wiRW1haWxcIl0gPSBhdXRoSW5mby5lbWFpbDtcbiAgICB9XG5cbiAgICBpZiAoYXV0aEluZm8ua2V5VHlwZSkge1xuICAgICAgZGlzcGxheURhdGFbXCJLZXkgVHlwZVwiXSA9IGF1dGhJbmZvLmtleVR5cGUgPT09IFwidGVzdFwiXG4gICAgICAgID8gY29sb3JzLndhcm5pbmcoXCJ0ZXN0XCIpXG4gICAgICAgIDogY29sb3JzLnN1Y2Nlc3MoXCJsaXZlXCIpO1xuICAgIH1cblxuICAgIGlmIChhdXRoSW5mby51c2VySWQpIHtcbiAgICAgIGRpc3BsYXlEYXRhW1wiVXNlciBJRFwiXSA9IGNvbG9ycy5kaW0oYXV0aEluZm8udXNlcklkKTtcbiAgICB9XG5cbiAgICBkaXNwbGF5RGF0YVtcIkNvbmZpZ1wiXSA9IGNvbG9ycy5kaW0oZ2V0Q29uZmlnUGF0aCgpKTtcblxuICAgIGtleVZhbHVlKGRpc3BsYXlEYXRhKTtcbiAgfVxufVxuIl19
55
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2hvYW1pLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2NvbW1hbmRzL3dob2FtaS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDckQsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzdDLE9BQU8sRUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFFLFFBQVEsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFDekUsT0FBTyxFQUFFLGNBQWMsRUFBRSxhQUFhLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUVqRSxNQUFNLENBQUMsT0FBTyxPQUFPLE1BQU8sU0FBUSxXQUFXO0lBQzdDLE1BQU0sQ0FBQyxXQUFXLEdBQUcsb0NBQW9DLENBQUM7SUFFMUQsTUFBTSxDQUFDLFFBQVEsR0FBRyxDQUFDLDBCQUEwQixDQUFDLENBQUM7SUFFL0MsTUFBTSxDQUFDLEtBQUssR0FBRztRQUNiLEdBQUcsV0FBVyxDQUFDLFNBQVM7S0FDekIsQ0FBQztJQUVGLEtBQUssQ0FBQyxHQUFHO1FBQ1AsTUFBTSxFQUFFLEtBQUssRUFBRSxHQUFHLE1BQU0sSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUUzQyxNQUFNLFFBQVEsR0FBRyxNQUFNLFdBQVcsRUFBRSxDQUFDO1FBRXJDLElBQUksS0FBSyxDQUFDLElBQUksRUFBRSxDQUFDO1lBQ2YsSUFBSSxDQUFDO2dCQUNILGFBQWEsRUFBRSxRQUFRLENBQUMsYUFBYTtnQkFDckMsS0FBSyxFQUFFLFFBQVEsQ0FBQyxLQUFLO2dCQUNyQixNQUFNLEVBQUUsUUFBUSxDQUFDLE1BQU07Z0JBQ3ZCLFdBQVcsRUFBRSxRQUFRLENBQUMsV0FBVztnQkFDakMsT0FBTyxFQUFFLFFBQVEsQ0FBQyxPQUFPO2dCQUN6QixVQUFVLEVBQUUsYUFBYSxFQUFFO2FBQzVCLENBQUMsQ0FBQztZQUNILE9BQU87UUFDVCxDQUFDO1FBRUQsSUFBSSxDQUFDLFFBQVEsQ0FBQyxhQUFhLEVBQUUsQ0FBQztZQUM1QixJQUFJLENBQUMsZUFBZSxDQUFDLENBQUM7WUFDdEIsT0FBTyxDQUFDLEdBQUcsRUFBRSxDQUFDO1lBQ2QsT0FBTyxDQUFDLEdBQUcsQ0FBQyxTQUFTLE1BQU0sQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLGtCQUFrQixDQUFDLENBQUM7WUFDcEUsT0FBTztRQUNULENBQUM7UUFFRCxPQUFPLENBQUMsZUFBZSxDQUFDLENBQUM7UUFDekIsT0FBTyxDQUFDLEdBQUcsRUFBRSxDQUFDO1FBRWQsTUFBTSxXQUFXLEdBQTJCLEVBQUUsQ0FBQztRQUUvQywrRUFBK0U7UUFDL0UsTUFBTSxJQUFJLEdBQUcsUUFBUSxDQUFDLE9BQU8sSUFBSSxRQUFRLENBQUMsV0FBVyxDQUFDO1FBQ3RELFdBQVcsQ0FBQyxVQUFVLENBQUM7WUFDckIsSUFBSSxLQUFLLE1BQU07Z0JBQ2IsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLEdBQUcsTUFBTSxDQUFDLEdBQUcsQ0FBQywrQkFBK0IsQ0FBQztnQkFDdEUsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLEdBQUcsTUFBTSxDQUFDLEdBQUcsQ0FBQyxlQUFlLENBQUMsQ0FBQztRQUUzRCxJQUFJLFFBQVEsQ0FBQyxLQUFLLEVBQUUsQ0FBQztZQUNuQixXQUFXLENBQUMsT0FBTyxDQUFDLEdBQUcsUUFBUSxDQUFDLEtBQUssQ0FBQztRQUN4QyxDQUFDO1FBRUQsSUFBSSxRQUFRLENBQUMsTUFBTSxFQUFFLENBQUM7WUFDcEIsV0FBVyxDQUFDLFNBQVMsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQ3ZELENBQUM7UUFFRCx1Q0FBdUM7UUFDdkMsTUFBTSxPQUFPLEdBQUcsY0FBYyxDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBQzFDLElBQUksT0FBTyxJQUFJLE9BQU8sS0FBSyxxQkFBcUIsRUFBRSxDQUFDO1lBQ2pELFdBQVcsQ0FBQyxRQUFRLENBQUMsR0FBRyxNQUFNLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQzlDLENBQUM7UUFFRCxXQUFXLENBQUMsUUFBUSxDQUFDLEdBQUcsTUFBTSxDQUFDLEdBQUcsQ0FBQyxhQUFhLEVBQUUsQ0FBQyxDQUFDO1FBRXBELFFBQVEsQ0FBQyxXQUFXLENBQUMsQ0FBQztJQUN4QixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQmFzZUNvbW1hbmQgfSBmcm9tIFwiLi4vbGliL2Jhc2UtY29tbWFuZC5qc1wiO1xuaW1wb3J0IHsgZ2V0QXV0aEluZm8gfSBmcm9tIFwiLi4vbGliL2F1dGguanNcIjtcbmltcG9ydCB7IHN1Y2Nlc3MsIGluZm8sIGtleVZhbHVlLCBjb2xvcnMsIGpzb24gfSBmcm9tIFwiLi4vbGliL291dHB1dC5qc1wiO1xuaW1wb3J0IHsgZ2V0Q29uZmlnVmFsdWUsIGdldENvbmZpZ1BhdGggfSBmcm9tIFwiLi4vbGliL2NvbmZpZy5qc1wiO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBXaG9hbWkgZXh0ZW5kcyBCYXNlQ29tbWFuZCB7XG4gIHN0YXRpYyBkZXNjcmlwdGlvbiA9IFwiU2hvdyBjdXJyZW50IGF1dGhlbnRpY2F0aW9uIHN0YXR1c1wiO1xuXG4gIHN0YXRpYyBleGFtcGxlcyA9IFtcIjwlPSBjb25maWcuYmluICU+IHdob2FtaVwiXTtcblxuICBzdGF0aWMgZmxhZ3MgPSB7XG4gICAgLi4uQmFzZUNvbW1hbmQuYmFzZUZsYWdzLFxuICB9O1xuXG4gIGFzeW5jIHJ1bigpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCB7IGZsYWdzIH0gPSBhd2FpdCB0aGlzLnBhcnNlKFdob2FtaSk7XG5cbiAgICBjb25zdCBhdXRoSW5mbyA9IGF3YWl0IGdldEF1dGhJbmZvKCk7XG5cbiAgICBpZiAoZmxhZ3MuanNvbikge1xuICAgICAganNvbih7XG4gICAgICAgIGF1dGhlbnRpY2F0ZWQ6IGF1dGhJbmZvLmF1dGhlbnRpY2F0ZWQsXG4gICAgICAgIGVtYWlsOiBhdXRoSW5mby5lbWFpbCxcbiAgICAgICAgdXNlcklkOiBhdXRoSW5mby51c2VySWQsXG4gICAgICAgIGVudmlyb25tZW50OiBhdXRoSW5mby5lbnZpcm9ubWVudCxcbiAgICAgICAga2V5VHlwZTogYXV0aEluZm8ua2V5VHlwZSxcbiAgICAgICAgY29uZmlnUGF0aDogZ2V0Q29uZmlnUGF0aCgpLFxuICAgICAgfSk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKCFhdXRoSW5mby5hdXRoZW50aWNhdGVkKSB7XG4gICAgICBpbmZvKFwiTm90IGxvZ2dlZCBpblwiKTtcbiAgICAgIGNvbnNvbGUubG9nKCk7XG4gICAgICBjb25zb2xlLmxvZyhgICBSdW4gJHtjb2xvcnMuY29kZShcInNlbmRseSBsb2dpblwiKX0gdG8gYXV0aGVudGljYXRlYCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgc3VjY2VzcyhcIkF1dGhlbnRpY2F0ZWRcIik7XG4gICAgY29uc29sZS5sb2coKTtcblxuICAgIGNvbnN0IGRpc3BsYXlEYXRhOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+ID0ge307XG5cbiAgICAvLyBTaG93IEFQSSBtb2RlICh0ZXN0IHZzIGxpdmUpIC0gdGhpcyBkZXRlcm1pbmVzIGlmIG1lc3NhZ2VzIGFyZSBhY3R1YWxseSBzZW50XG4gICAgY29uc3QgbW9kZSA9IGF1dGhJbmZvLmtleVR5cGUgfHwgYXV0aEluZm8uZW52aXJvbm1lbnQ7XG4gICAgZGlzcGxheURhdGFbXCJBUEkgTW9kZVwiXSA9XG4gICAgICBtb2RlID09PSBcInRlc3RcIlxuICAgICAgICA/IGNvbG9ycy53YXJuaW5nKFwidGVzdFwiKSArIGNvbG9ycy5kaW0oXCIgKHNhbmRib3ggLSBubyByZWFsIG1lc3NhZ2VzKVwiKVxuICAgICAgICA6IGNvbG9ycy5zdWNjZXNzKFwibGl2ZVwiKSArIGNvbG9ycy5kaW0oXCIgKHByb2R1Y3Rpb24pXCIpO1xuXG4gICAgaWYgKGF1dGhJbmZvLmVtYWlsKSB7XG4gICAgICBkaXNwbGF5RGF0YVtcIkVtYWlsXCJdID0gYXV0aEluZm8uZW1haWw7XG4gICAgfVxuXG4gICAgaWYgKGF1dGhJbmZvLnVzZXJJZCkge1xuICAgICAgZGlzcGxheURhdGFbXCJVc2VyIElEXCJdID0gY29sb3JzLmRpbShhdXRoSW5mby51c2VySWQpO1xuICAgIH1cblxuICAgIC8vIFNob3cgd2hpY2ggc2VydmVyIHdlJ3JlIGNvbm5lY3RlZCB0b1xuICAgIGNvbnN0IGJhc2VVcmwgPSBnZXRDb25maWdWYWx1ZShcImJhc2VVcmxcIik7XG4gICAgaWYgKGJhc2VVcmwgJiYgYmFzZVVybCAhPT0gXCJodHRwczovL3NlbmRseS5saXZlXCIpIHtcbiAgICAgIGRpc3BsYXlEYXRhW1wiU2VydmVyXCJdID0gY29sb3JzLmRpbShiYXNlVXJsKTtcbiAgICB9XG5cbiAgICBkaXNwbGF5RGF0YVtcIkNvbmZpZ1wiXSA9IGNvbG9ycy5kaW0oZ2V0Q29uZmlnUGF0aCgpKTtcblxuICAgIGtleVZhbHVlKGRpc3BsYXlEYXRhKTtcbiAgfVxufVxuIl19
@@ -0,0 +1,3 @@
1
+ import { Hook } from "@oclif/core";
2
+ declare const hook: Hook<"command_not_found">;
3
+ export default hook;
@@ -0,0 +1,142 @@
1
+ import { colors } from "../lib/output.js";
2
+ // Known commands for suggestions
3
+ const KNOWN_COMMANDS = [
4
+ "send",
5
+ "status",
6
+ "login",
7
+ "logout",
8
+ "whoami",
9
+ "doctor",
10
+ "onboarding",
11
+ "help",
12
+ "sms send",
13
+ "sms list",
14
+ "sms get",
15
+ "sms batch",
16
+ "sms schedule",
17
+ "sms scheduled",
18
+ "sms cancel",
19
+ "credits balance",
20
+ "credits history",
21
+ "keys list",
22
+ "keys create",
23
+ "keys revoke",
24
+ "webhooks list",
25
+ "webhooks create",
26
+ "webhooks delete",
27
+ "webhooks test",
28
+ "webhooks listen",
29
+ "webhooks deliveries",
30
+ "webhooks rotate-secret",
31
+ "logs tail",
32
+ "config get",
33
+ "config set",
34
+ "config reset",
35
+ ];
36
+ // Common typos and their corrections
37
+ const TYPO_MAP = {
38
+ "text": "send",
39
+ "txt": "send",
40
+ "msg": "send",
41
+ "message": "sms send",
42
+ "messages": "sms list",
43
+ "balance": "credits balance",
44
+ "credit": "credits balance",
45
+ "key": "keys list",
46
+ "apikey": "keys list",
47
+ "apikeys": "keys list",
48
+ "webhook": "webhooks list",
49
+ "hook": "webhooks list",
50
+ "hooks": "webhooks list",
51
+ "log": "logs tail",
52
+ "tail": "logs tail",
53
+ "auth": "login",
54
+ "signin": "login",
55
+ "signout": "logout",
56
+ "me": "whoami",
57
+ "info": "status",
58
+ "dashboard": "status",
59
+ "account": "status",
60
+ "check": "doctor",
61
+ "test": "doctor",
62
+ "setup": "onboarding",
63
+ "init": "onboarding",
64
+ "start": "onboarding",
65
+ };
66
+ /**
67
+ * Calculate Levenshtein distance between two strings
68
+ */
69
+ function levenshteinDistance(a, b) {
70
+ const matrix = [];
71
+ for (let i = 0; i <= b.length; i++) {
72
+ matrix[i] = [i];
73
+ }
74
+ for (let j = 0; j <= a.length; j++) {
75
+ matrix[0][j] = j;
76
+ }
77
+ for (let i = 1; i <= b.length; i++) {
78
+ for (let j = 1; j <= a.length; j++) {
79
+ if (b.charAt(i - 1) === a.charAt(j - 1)) {
80
+ matrix[i][j] = matrix[i - 1][j - 1];
81
+ }
82
+ else {
83
+ matrix[i][j] = Math.min(matrix[i - 1][j - 1] + 1, matrix[i][j - 1] + 1, matrix[i - 1][j] + 1);
84
+ }
85
+ }
86
+ }
87
+ return matrix[b.length][a.length];
88
+ }
89
+ /**
90
+ * Find similar commands based on Levenshtein distance
91
+ */
92
+ function findSimilarCommands(input, maxDistance = 3) {
93
+ const inputLower = input.toLowerCase();
94
+ const suggestions = [];
95
+ for (const command of KNOWN_COMMANDS) {
96
+ const distance = levenshteinDistance(inputLower, command.toLowerCase());
97
+ if (distance <= maxDistance) {
98
+ suggestions.push({ command, distance });
99
+ }
100
+ }
101
+ // Sort by distance and return top 3
102
+ return suggestions
103
+ .sort((a, b) => a.distance - b.distance)
104
+ .slice(0, 3)
105
+ .map((s) => s.command);
106
+ }
107
+ const hook = async function (options) {
108
+ const { id } = options;
109
+ const inputCommand = id;
110
+ console.log();
111
+ console.log(colors.error(`Command not found: ${colors.code(inputCommand)}`));
112
+ console.log();
113
+ // Check for known typos first
114
+ const typoFix = TYPO_MAP[inputCommand.toLowerCase()];
115
+ if (typoFix) {
116
+ console.log(colors.dim("Did you mean?"));
117
+ console.log(` ${colors.code(`sendly ${typoFix}`)}`);
118
+ console.log();
119
+ return;
120
+ }
121
+ // Find similar commands
122
+ const similar = findSimilarCommands(inputCommand);
123
+ if (similar.length > 0) {
124
+ console.log(colors.dim("Did you mean?"));
125
+ similar.forEach((cmd) => {
126
+ console.log(` ${colors.code(`sendly ${cmd}`)}`);
127
+ });
128
+ console.log();
129
+ return;
130
+ }
131
+ // Default help
132
+ console.log(colors.dim("Available topics:"));
133
+ console.log(` ${colors.code("sendly sms")} Send and manage SMS messages`);
134
+ console.log(` ${colors.code("sendly credits")} Check credit balance`);
135
+ console.log(` ${colors.code("sendly keys")} Manage API keys`);
136
+ console.log(` ${colors.code("sendly webhooks")} Manage webhooks`);
137
+ console.log();
138
+ console.log(`Run ${colors.code("sendly --help")} for all commands.`);
139
+ console.log();
140
+ };
141
+ export default hook;
142
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tbWFuZC1ub3QtZm91bmQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvaG9va3MvY29tbWFuZC1ub3QtZm91bmQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBRTFDLGlDQUFpQztBQUNqQyxNQUFNLGNBQWMsR0FBRztJQUNyQixNQUFNO0lBQ04sUUFBUTtJQUNSLE9BQU87SUFDUCxRQUFRO0lBQ1IsUUFBUTtJQUNSLFFBQVE7SUFDUixZQUFZO0lBQ1osTUFBTTtJQUNOLFVBQVU7SUFDVixVQUFVO0lBQ1YsU0FBUztJQUNULFdBQVc7SUFDWCxjQUFjO0lBQ2QsZUFBZTtJQUNmLFlBQVk7SUFDWixpQkFBaUI7SUFDakIsaUJBQWlCO0lBQ2pCLFdBQVc7SUFDWCxhQUFhO0lBQ2IsYUFBYTtJQUNiLGVBQWU7SUFDZixpQkFBaUI7SUFDakIsaUJBQWlCO0lBQ2pCLGVBQWU7SUFDZixpQkFBaUI7SUFDakIscUJBQXFCO0lBQ3JCLHdCQUF3QjtJQUN4QixXQUFXO0lBQ1gsWUFBWTtJQUNaLFlBQVk7SUFDWixjQUFjO0NBQ2YsQ0FBQztBQUVGLHFDQUFxQztBQUNyQyxNQUFNLFFBQVEsR0FBMkI7SUFDdkMsTUFBTSxFQUFFLE1BQU07SUFDZCxLQUFLLEVBQUUsTUFBTTtJQUNiLEtBQUssRUFBRSxNQUFNO0lBQ2IsU0FBUyxFQUFFLFVBQVU7SUFDckIsVUFBVSxFQUFFLFVBQVU7SUFDdEIsU0FBUyxFQUFFLGlCQUFpQjtJQUM1QixRQUFRLEVBQUUsaUJBQWlCO0lBQzNCLEtBQUssRUFBRSxXQUFXO0lBQ2xCLFFBQVEsRUFBRSxXQUFXO0lBQ3JCLFNBQVMsRUFBRSxXQUFXO0lBQ3RCLFNBQVMsRUFBRSxlQUFlO0lBQzFCLE1BQU0sRUFBRSxlQUFlO0lBQ3ZCLE9BQU8sRUFBRSxlQUFlO0lBQ3hCLEtBQUssRUFBRSxXQUFXO0lBQ2xCLE1BQU0sRUFBRSxXQUFX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cnQgeyBjb2xvcnMgfSBmcm9tIFwiLi4vbGliL291dHB1dC5qc1wiO1xuXG4vLyBLbm93biBjb21tYW5kcyBmb3Igc3VnZ2VzdGlvbnNcbmNvbnN0IEtOT1dOX0NPTU1BTkRTID0gW1xuICBcInNlbmRcIixcbiAgXCJzdGF0dXNcIixcbiAgXCJsb2dpblwiLFxuICBcImxvZ291dFwiLFxuICBcIndob2FtaVwiLFxuICBcImRvY3RvclwiLFxuICBcIm9uYm9hcmRpbmdcIixcbiAgXCJoZWxwXCIsXG4gIFwic21zIHNlbmRcIixcbiAgXCJzbXMgbGlzdFwiLFxuICBcInNtcyBnZXRcIixcbiAgXCJzbXMgYmF0Y2hcIixcbiAgXCJzbXMgc2NoZWR1bGVcIixcbiAgXCJzbXMgc2NoZWR1bGVkXCIsXG4gIFwic21zIGNhbmNlbFwiLFxuICBcImNyZWRpdHMgYmFsYW5jZVwiLFxuICBcImNyZWRpdHMgaGlzdG9yeVwiLFxuICBcImtleXMgbGlzdFwiLFxuICBcImtleXMgY3JlYXRlXCIsXG4gIFwia2V5cyByZXZva2VcIixcbiAgXCJ3ZWJob29rcyBsaXN0XCIsXG4gIFwid2ViaG9va3MgY3JlYXRlXCIsXG4gIFwid2ViaG9va3MgZGVsZXRlXCIsXG4gIFwid2ViaG9va3MgdGVzdFwiLFxuICBcIndlYmhvb2tzIGxpc3RlblwiLFxuICBcIndlYmhvb2tzIGRlbGl2ZXJpZXNcIixcbiAgXCJ3ZWJob29rcyByb3RhdGUtc2VjcmV0XCIsXG4gIFwibG9ncyB0YWlsXCIsXG4gIFwiY29uZmlnIGdldFwiLFxuICBcImNvbmZpZyBzZXRcIixcbiAgXCJjb25maWcgcmVzZXRcIixcbl07XG5cbi8vIENvbW1vbiB0eXBvcyBhbmQgdGhlaXIgY29ycmVjdGlvbnNcbmNvbnN0IFRZUE9fTUFQOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+ID0ge1xuICBcInRleHRcIjogXCJzZW5kXCIsXG4gIFwidHh0XCI6IFwic2VuZFwiLFxuICBcIm1zZ1wiOiBcInNlbmRcIixcbiAgXCJtZXNzYWdlXCI6IFwic21zIHNlbmRcIixcbiAgXCJtZXNzYWdlc1wiOiBcInNtcyBsaXN0XCIsXG4gIFwiYmFsYW5jZVwiOiBcImNyZWRpdHMgYmFsYW5jZVwiLFxuICBcImNyZWRpdFwiOiBcImNyZWRpdHMgYmFsYW5jZVwiLFxuICBcImtleVwiOiBcImtleXMgbGlzdFwiLFxuICBcImFwaWtleVwiOiBcImtleXMgbGlzdFwiLFxuICBcImFwaWtleXNcIjogXCJrZXlzIGxpc3RcIixcbiAgXCJ3ZWJob29rXCI6IFwid2ViaG9va3MgbGlzdFwiLFxuICBcImhvb2tcIjogXCJ3ZWJob29rcyBsaXN0XCIsXG4gIFwiaG9va3NcIjogXCJ3ZWJob29rcyBsaXN0XCIsXG4gIFwibG9nXCI6IFwibG9ncyB0YWlsXCIsXG4gIFwidGFpbFwiOiBcImxvZ3MgdGFpbFwiLFxuICBcImF1dGhcIjogXCJsb2dpblwiLFxuICBcInNpZ25pblwiOiBcImxvZ2luXCIsXG4gIFwic2lnbm91dFwiOiBcImxvZ291dFwiLFxuICBcIm1lXCI6IFwid2hvYW1pXCIsXG4gIFwiaW5mb1wiOiBcInN0YXR1c1wiLFxuICBcImRhc2hib2FyZFwiOiBcInN0YXR1c1wiLFxuICBcImFjY291bnRcIjogXCJzdGF0dXNcIixcbiAgXCJjaGVja1wiOiBcImRvY3RvclwiLFxuICBcInRlc3RcIjogXCJkb2N0b3JcIixcbiAgXCJzZXR1cFwiOiBcIm9uYm9hcmRpbmdcIixcbiAgXCJpbml0XCI6IFwib25ib2FyZGluZ1wiLFxuICBcInN0YXJ0XCI6IFwib25ib2FyZGluZ1wiLFxufTtcblxuLyoqXG4gKiBDYWxjdWxhdGUgTGV2ZW5zaHRlaW4gZGlzdGFuY2UgYmV0d2VlbiB0d28gc3RyaW5nc1xuICovXG5mdW5jdGlvbiBsZXZlbnNodGVpbkRpc3RhbmNlKGE6IHN0cmluZywgYjogc3RyaW5nKTogbnVtYmVyIHtcbiAgY29uc3QgbWF0cml4OiBudW1iZXJbXVtdID0gW107XG5cbiAgZm9yIChsZXQgaSA9IDA7IGkgPD0gYi5sZW5ndGg7IGkrKykge1xuICAgIG1hdHJpeFtpXSA9IFtpXTtcbiAgfVxuXG4gIGZvciAobGV0IGogPSAwOyBqIDw9IGEubGVuZ3RoOyBqKyspIHtcbiAgICBtYXRyaXhbMF1bal0gPSBqO1xuICB9XG5cbiAgZm9yIChsZXQgaSA9IDE7IGkgPD0gYi5sZW5ndGg7IGkrKykge1xuICAgIGZvciAobGV0IGogPSAxOyBqIDw9IGEubGVuZ3RoOyBqKyspIHtcbiAgICAgIGlmIChiLmNoYXJBdChpIC0gMSkgPT09IGEuY2hhckF0KGogLSAxKSkge1xuICAgICAgICBtYXRyaXhbaV1bal0gPSBtYXRyaXhbaSAtIDFdW2ogLSAxXTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIG1hdHJpeFtpXVtqXSA9IE1hdGgubWluKFxuICAgICAgICAgIG1hdHJpeFtpIC0gMV1baiAtIDFdICsgMSxcbiAgICAgICAgICBtYXRyaXhbaV1baiAtIDFdICsgMSxcbiAgICAgICAgICBtYXRyaXhbaSAtIDFdW2pdICsgMSxcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZXR1cm4gbWF0cml4W2IubGVuZ3RoXVthLmxlbmd0aF07XG59XG5cbi8qKlxuICogRmluZCBzaW1pbGFyIGNvbW1hbmRzIGJhc2VkIG9uIExldmVuc2h0ZWluIGRpc3RhbmNlXG4gKi9cbmZ1bmN0aW9uIGZpbmRTaW1pbGFyQ29tbWFuZHMoaW5wdXQ6IHN0cmluZywgbWF4RGlzdGFuY2UgPSAzKTogc3RyaW5nW10ge1xuICBjb25zdCBpbnB1dExvd2VyID0gaW5wdXQudG9Mb3dlckNhc2UoKTtcbiAgY29uc3Qgc3VnZ2VzdGlvbnM6IEFycmF5PHsgY29tbWFuZDogc3RyaW5nOyBkaXN0YW5jZTogbnVtYmVyIH0+ID0gW107XG5cbiAgZm9yIChjb25zdCBjb21tYW5kIG9mIEtOT1dOX0NPTU1BTkRTKSB7XG4gICAgY29uc3QgZGlzdGFuY2UgPSBsZXZlbnNodGVpbkRpc3RhbmNlKGlucHV0TG93ZXIsIGNvbW1hbmQudG9Mb3dlckNhc2UoKSk7XG4gICAgaWYgKGRpc3RhbmNlIDw9IG1heERpc3RhbmNlKSB7XG4gICAgICBzdWdnZXN0aW9ucy5wdXNoKHsgY29tbWFuZCwgZGlzdGFuY2UgfSk7XG4gICAgfVxuICB9XG5cbiAgLy8gU29ydCBieSBkaXN0YW5jZSBhbmQgcmV0dXJuIHRvcCAzXG4gIHJldHVybiBzdWdnZXN0aW9uc1xuICAgIC5zb3J0KChhLCBiKSA9PiBhLmRpc3RhbmNlIC0gYi5kaXN0YW5jZSlcbiAgICAuc2xpY2UoMCwgMylcbiAgICAubWFwKChzKSA9PiBzLmNvbW1hbmQpO1xufVxuXG5jb25zdCBob29rOiBIb29rPFwiY29tbWFuZF9ub3RfZm91bmRcIj4gPSBhc3luYyBmdW5jdGlvbiAob3B0aW9ucykge1xuICBjb25zdCB7IGlkIH0gPSBvcHRpb25zO1xuICBjb25zdCBpbnB1dENvbW1hbmQgPSBpZDtcblxuICBjb25zb2xlLmxvZygpO1xuICBjb25zb2xlLmxvZyhjb2xvcnMuZXJyb3IoYENvbW1hbmQgbm90IGZvdW5kOiAke2NvbG9ycy5jb2RlKGlucHV0Q29tbWFuZCl9YCkpO1xuICBjb25zb2xlLmxvZygpO1xuXG4gIC8vIENoZWNrIGZvciBrbm93biB0eXBvcyBmaXJzdFxuICBjb25zdCB0eXBvRml4ID0gVFlQT19NQVBbaW5wdXRDb21tYW5kLnRvTG93ZXJDYXNlKCldO1xuICBpZiAodHlwb0ZpeCkge1xuICAgIGNvbnNvbGUubG9nKGNvbG9ycy5kaW0oXCJEaWQgeW91IG1lYW4/XCIpKTtcbiAgICBjb25zb2xlLmxvZyhgICAke2NvbG9ycy5jb2RlKGBzZW5kbHkgJHt0eXBvRml4fWApfWApO1xuICAgIGNvbnNvbGUubG9nKCk7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgLy8gRmluZCBzaW1pbGFyIGNvbW1hbmRzXG4gIGNvbnN0IHNpbWlsYXIgPSBmaW5kU2ltaWxhckNvbW1hbmRzKGlucHV0Q29tbWFuZCk7XG4gIGlmIChzaW1pbGFyLmxlbmd0aCA+IDApIHtcbiAgICBjb25zb2xlLmxvZyhjb2xvcnMuZGltKFwiRGlkIHlvdSBtZWFuP1wiKSk7XG4gICAgc2ltaWxhci5mb3JFYWNoKChjbWQpID0+IHtcbiAgICAgIGNvbnNvbGUubG9nKGAgICR7Y29sb3JzLmNvZGUoYHNlbmRseSAke2NtZH1gKX1gKTtcbiAgICB9KTtcbiAgICBjb25zb2xlLmxvZygpO1xuICAgIHJldHVybjtcbiAgfVxuXG4gIC8vIERlZmF1bHQgaGVscFxuICBjb25zb2xlLmxvZyhjb2xvcnMuZGltKFwiQXZhaWxhYmxlIHRvcGljczpcIikpO1xuICBjb25zb2xlLmxvZyhgICAke2NvbG9ycy5jb2RlKFwic2VuZGx5IHNtc1wiKX0gICAgICAgIFNlbmQgYW5kIG1hbmFnZSBTTVMgbWVzc2FnZXNgKTtcbiAgY29uc29sZS5sb2coYCAgJHtjb2xvcnMuY29kZShcInNlbmRseSBjcmVkaXRzXCIpfSAgICBDaGVjayBjcmVkaXQgYmFsYW5jZWApO1xuICBjb25zb2xlLmxvZyhgICAke2NvbG9ycy5jb2RlKFwic2VuZGx5IGtleXNcIil9ICAgICAgIE1hbmFnZSBBUEkga2V5c2ApO1xuICBjb25zb2xlLmxvZyhgICAke2NvbG9ycy5jb2RlKFwic2VuZGx5IHdlYmhvb2tzXCIpfSAgIE1hbmFnZSB3ZWJob29rc2ApO1xuICBjb25zb2xlLmxvZygpO1xuICBjb25zb2xlLmxvZyhgUnVuICR7Y29sb3JzLmNvZGUoXCJzZW5kbHkgLS1oZWxwXCIpfSBmb3IgYWxsIGNvbW1hbmRzLmApO1xuICBjb25zb2xlLmxvZygpO1xufTtcblxuZXhwb3J0IGRlZmF1bHQgaG9vaztcbiJdfQ==
@@ -152,6 +152,107 @@
152
152
  "onboarding.js"
153
153
  ]
154
154
  },
155
+ "send": {
156
+ "aliases": [],
157
+ "args": {},
158
+ "description": "Send an SMS message (shortcut for 'sms send')",
159
+ "examples": [
160
+ "<%= config.bin %> send --to \"+1234567890\" --text \"Hello!\"",
161
+ "<%= config.bin %> send -t \"+1234567890\" -m \"Meeting at 3pm\"",
162
+ "<%= config.bin %> send --to \"+1234567890\" --text \"Hello!\" --json"
163
+ ],
164
+ "flags": {
165
+ "json": {
166
+ "description": "Output in JSON format",
167
+ "name": "json",
168
+ "allowNo": false,
169
+ "type": "boolean"
170
+ },
171
+ "quiet": {
172
+ "char": "q",
173
+ "description": "Minimal output",
174
+ "name": "quiet",
175
+ "allowNo": false,
176
+ "type": "boolean"
177
+ },
178
+ "to": {
179
+ "char": "t",
180
+ "description": "Recipient phone number (E.164 format)",
181
+ "name": "to",
182
+ "required": true,
183
+ "hasDynamicHelp": false,
184
+ "multiple": false,
185
+ "type": "option"
186
+ },
187
+ "text": {
188
+ "char": "m",
189
+ "description": "Message text",
190
+ "name": "text",
191
+ "required": true,
192
+ "hasDynamicHelp": false,
193
+ "multiple": false,
194
+ "type": "option"
195
+ },
196
+ "from": {
197
+ "char": "f",
198
+ "description": "Sender phone number (optional, uses default if not set)",
199
+ "name": "from",
200
+ "hasDynamicHelp": false,
201
+ "multiple": false,
202
+ "type": "option"
203
+ }
204
+ },
205
+ "hasDynamicHelp": false,
206
+ "hiddenAliases": [],
207
+ "id": "send",
208
+ "pluginAlias": "@sendly/cli",
209
+ "pluginName": "@sendly/cli",
210
+ "pluginType": "core",
211
+ "strict": true,
212
+ "isESM": true,
213
+ "relativePath": [
214
+ "dist",
215
+ "commands",
216
+ "send.js"
217
+ ]
218
+ },
219
+ "status": {
220
+ "aliases": [],
221
+ "args": {},
222
+ "description": "Show account status dashboard with credits, usage, and health",
223
+ "examples": [
224
+ "<%= config.bin %> status",
225
+ "<%= config.bin %> status --json"
226
+ ],
227
+ "flags": {
228
+ "json": {
229
+ "description": "Output in JSON format",
230
+ "name": "json",
231
+ "allowNo": false,
232
+ "type": "boolean"
233
+ },
234
+ "quiet": {
235
+ "char": "q",
236
+ "description": "Minimal output",
237
+ "name": "quiet",
238
+ "allowNo": false,
239
+ "type": "boolean"
240
+ }
241
+ },
242
+ "hasDynamicHelp": false,
243
+ "hiddenAliases": [],
244
+ "id": "status",
245
+ "pluginAlias": "@sendly/cli",
246
+ "pluginName": "@sendly/cli",
247
+ "pluginType": "core",
248
+ "strict": true,
249
+ "isESM": true,
250
+ "relativePath": [
251
+ "dist",
252
+ "commands",
253
+ "status.js"
254
+ ]
255
+ },
155
256
  "whoami": {
156
257
  "aliases": [],
157
258
  "args": {},
@@ -1111,6 +1212,20 @@
1111
1212
  "hasDynamicHelp": false,
1112
1213
  "multiple": false,
1113
1214
  "type": "option"
1215
+ },
1216
+ "mode": {
1217
+ "char": "m",
1218
+ "description": "Event mode filter: all (default), test (sandbox only), live (production only)",
1219
+ "name": "mode",
1220
+ "default": "all",
1221
+ "hasDynamicHelp": false,
1222
+ "multiple": false,
1223
+ "options": [
1224
+ "all",
1225
+ "test",
1226
+ "live"
1227
+ ],
1228
+ "type": "option"
1114
1229
  }
1115
1230
  },
1116
1231
  "hasDynamicHelp": false,
@@ -1563,5 +1678,5 @@
1563
1678
  ]
1564
1679
  }
1565
1680
  },
1566
- "version": "3.0.2"
1681
+ "version": "3.1.0"
1567
1682
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@sendly/cli",
3
- "version": "3.0.2",
3
+ "version": "3.1.0",
4
4
  "type": "module",
5
5
  "description": "Sendly CLI - Send SMS from your terminal",
6
6
  "author": "Sendly <support@sendly.live>",
@@ -30,6 +30,9 @@
30
30
  "bin": "sendly",
31
31
  "dirname": "sendly",
32
32
  "commands": "./dist/commands",
33
+ "hooks": {
34
+ "command_not_found": "./dist/hooks/command-not-found"
35
+ },
33
36
  "plugins": [
34
37
  "@oclif/plugin-help",
35
38
  "@oclif/plugin-plugins"