@sente-labs/cli 0.11.0 → 0.14.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/dist/index.js CHANGED
@@ -5,32 +5,20 @@ const commander_1 = require("commander");
5
5
  const login_1 = require("./commands/login");
6
6
  const whoami_1 = require("./commands/whoami");
7
7
  const token_1 = require("./commands/token");
8
- const project_1 = require("./commands/project");
9
- const workflow_1 = require("./commands/workflow");
10
- const appGraph_1 = require("./commands/appGraph");
11
- const task_1 = require("./commands/task");
12
- const init_1 = require("./commands/init");
13
- const secret_1 = require("./commands/secret");
14
- const schedule_1 = require("./commands/schedule");
15
- const deployWebhook_1 = require("./commands/deployWebhook");
16
- const auth_1 = require("./commands/auth");
17
8
  const identity_1 = require("./commands/identity");
18
9
  const inbox_1 = require("./commands/inbox");
19
10
  const webhook_1 = require("./commands/webhook");
20
- const autoupdate_1 = require("./skill/autoupdate");
21
- // Silently refresh the installed Claude Code skill to match the running CLI.
22
- // Synchronous + cheap (a file stat + at most one small write). No-op if the
23
- // user customized the skill (no version marker) or --json mode is active.
24
- (0, autoupdate_1.autoUpdateSkillIfStale)();
11
+ const registration_1 = require("./commands/registration");
12
+ const update_1 = require("./update");
25
13
  // Fire-and-forget npm registry check. Cached for 24h. Prints a one-line
26
14
  // nudge to stderr if a newer CLI is available. Never blocks the user's
27
15
  // command; settles at most by the time their action returns.
28
- void (0, autoupdate_1.checkForCliUpdate)();
16
+ void (0, update_1.checkForCliUpdate)();
29
17
  const program = new commander_1.Command();
30
18
  program
31
19
  .name('sente')
32
20
  .description('Sente CLI -- give your AI agents managed email identities from the terminal and Claude Code')
33
- .version('0.11.0')
21
+ .version(update_1.CLI_VERSION)
34
22
  .option('--json', 'Emit machine-readable JSON instead of human output');
35
23
  /**
36
24
  * Global options aren't auto-propagated to subcommands by Commander, so we
@@ -41,20 +29,10 @@ const globalOpts = () => program.opts();
41
29
  (0, login_1.registerLoginCommand)(program, globalOpts);
42
30
  (0, whoami_1.registerWhoamiCommand)(program, globalOpts);
43
31
  (0, token_1.registerTokenCommand)(program, globalOpts);
44
- (0, init_1.registerInitCommand)(program, globalOpts);
45
- (0, init_1.registerInstallSkillCommand)(program, globalOpts);
46
- (0, project_1.registerProjectCommands)(program, globalOpts);
47
- (0, project_1.registerSyncCommand)(program, globalOpts);
48
- (0, workflow_1.registerWorkflowCommands)(program, globalOpts);
49
- (0, appGraph_1.registerAppGraphCommands)(program, globalOpts);
50
- (0, task_1.registerTaskCommands)(program, globalOpts);
51
- (0, secret_1.registerSecretCommands)(program, globalOpts);
52
- (0, schedule_1.registerScheduleCommands)(program, globalOpts);
53
- (0, deployWebhook_1.registerDeployWebhookCommands)(program, globalOpts);
54
- (0, auth_1.registerAuthCommands)(program, globalOpts);
55
32
  (0, identity_1.registerIdentityCommands)(program, globalOpts);
56
33
  (0, inbox_1.registerInboxCommands)(program, globalOpts);
57
34
  (0, webhook_1.registerWebhookCommands)(program, globalOpts);
35
+ (0, registration_1.registerRegistrationCommands)(program, globalOpts);
58
36
  program.parseAsync(process.argv).catch((err) => {
59
37
  // Defensive: command actions handle their own errors. This only catches
60
38
  // setup-time errors (e.g. unknown subcommand).
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;AACA,yCAAoC;AACpC,4CAAwD;AACxD,8CAA0D;AAC1D,4CAAwD;AACxD,gDAAkF;AAClF,kDAA+D;AAC/D,kDAA+D;AAC/D,0CAAuD;AACvD,0CAAmF;AACnF,8CAA2D;AAC3D,kDAA+D;AAC/D,4DAAyE;AACzE,0CAAuD;AACvD,kDAA+D;AAC/D,4CAAyD;AACzD,gDAA6D;AAC7D,mDAA+E;AAG/E,6EAA6E;AAC7E,4EAA4E;AAC5E,0EAA0E;AAC1E,IAAA,mCAAsB,GAAE,CAAC;AAEzB,wEAAwE;AACxE,uEAAuE;AACvE,6DAA6D;AAC7D,KAAK,IAAA,8BAAiB,GAAE,CAAC;AAEzB,MAAM,OAAO,GAAG,IAAI,mBAAO,EAAE,CAAC;AAE9B,OAAO;KACJ,IAAI,CAAC,OAAO,CAAC;KACb,WAAW,CAAC,6FAA6F,CAAC;KAC1G,OAAO,CAAC,QAAQ,CAAC;KACjB,MAAM,CAAC,QAAQ,EAAE,oDAAoD,CAAC,CAAC;AAE1E;;;;GAIG;AACH,MAAM,UAAU,GAAG,GAAe,EAAE,CAAC,OAAO,CAAC,IAAI,EAAc,CAAC;AAEhE,IAAA,4BAAoB,EAAC,OAAO,EAAE,UAAU,CAAC,CAAC;AAC1C,IAAA,8BAAqB,EAAC,OAAO,EAAE,UAAU,CAAC,CAAC;AAC3C,IAAA,4BAAoB,EAAC,OAAO,EAAE,UAAU,CAAC,CAAC;AAC1C,IAAA,0BAAmB,EAAC,OAAO,EAAE,UAAU,CAAC,CAAC;AACzC,IAAA,kCAA2B,EAAC,OAAO,EAAE,UAAU,CAAC,CAAC;AACjD,IAAA,iCAAuB,EAAC,OAAO,EAAE,UAAU,CAAC,CAAC;AAC7C,IAAA,6BAAmB,EAAC,OAAO,EAAE,UAAU,CAAC,CAAC;AACzC,IAAA,mCAAwB,EAAC,OAAO,EAAE,UAAU,CAAC,CAAC;AAC9C,IAAA,mCAAwB,EAAC,OAAO,EAAE,UAAU,CAAC,CAAC;AAC9C,IAAA,2BAAoB,EAAC,OAAO,EAAE,UAAU,CAAC,CAAC;AAC1C,IAAA,+BAAsB,EAAC,OAAO,EAAE,UAAU,CAAC,CAAC;AAC5C,IAAA,mCAAwB,EAAC,OAAO,EAAE,UAAU,CAAC,CAAC;AAC9C,IAAA,6CAA6B,EAAC,OAAO,EAAE,UAAU,CAAC,CAAC;AACnD,IAAA,2BAAoB,EAAC,OAAO,EAAE,UAAU,CAAC,CAAC;AAC1C,IAAA,mCAAwB,EAAC,OAAO,EAAE,UAAU,CAAC,CAAC;AAC9C,IAAA,6BAAqB,EAAC,OAAO,EAAE,UAAU,CAAC,CAAC;AAC3C,IAAA,iCAAuB,EAAC,OAAO,EAAE,UAAU,CAAC,CAAC;AAE7C,OAAO,CAAC,UAAU,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,CAAC,GAAG,EAAE,EAAE;IAC7C,wEAAwE;IACxE,+CAA+C;IAC/C,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,UAAU,GAAG,EAAE,OAAO,IAAI,GAAG,IAAI,CAAC,CAAC;IACxD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC,CAAC,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;AACA,yCAAoC;AACpC,4CAAwD;AACxD,8CAA0D;AAC1D,4CAAwD;AACxD,kDAA+D;AAC/D,4CAAyD;AACzD,gDAA6D;AAC7D,0DAAuE;AACvE,qCAA0D;AAG1D,wEAAwE;AACxE,uEAAuE;AACvE,6DAA6D;AAC7D,KAAK,IAAA,0BAAiB,GAAE,CAAC;AAEzB,MAAM,OAAO,GAAG,IAAI,mBAAO,EAAE,CAAC;AAE9B,OAAO;KACJ,IAAI,CAAC,OAAO,CAAC;KACb,WAAW,CAAC,6FAA6F,CAAC;KAC1G,OAAO,CAAC,oBAAW,CAAC;KACpB,MAAM,CAAC,QAAQ,EAAE,oDAAoD,CAAC,CAAC;AAE1E;;;;GAIG;AACH,MAAM,UAAU,GAAG,GAAe,EAAE,CAAC,OAAO,CAAC,IAAI,EAAc,CAAC;AAEhE,IAAA,4BAAoB,EAAC,OAAO,EAAE,UAAU,CAAC,CAAC;AAC1C,IAAA,8BAAqB,EAAC,OAAO,EAAE,UAAU,CAAC,CAAC;AAC3C,IAAA,4BAAoB,EAAC,OAAO,EAAE,UAAU,CAAC,CAAC;AAC1C,IAAA,mCAAwB,EAAC,OAAO,EAAE,UAAU,CAAC,CAAC;AAC9C,IAAA,6BAAqB,EAAC,OAAO,EAAE,UAAU,CAAC,CAAC;AAC3C,IAAA,iCAAuB,EAAC,OAAO,EAAE,UAAU,CAAC,CAAC;AAC7C,IAAA,2CAA4B,EAAC,OAAO,EAAE,UAAU,CAAC,CAAC;AAElD,OAAO,CAAC,UAAU,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,CAAC,GAAG,EAAE,EAAE;IAC7C,wEAAwE;IACxE,+CAA+C;IAC/C,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,UAAU,GAAG,EAAE,OAAO,IAAI,GAAG,IAAI,CAAC,CAAC;IACxD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC,CAAC,CAAC"}
@@ -33,52 +33,15 @@ var __importStar = (this && this.__importStar) || (function () {
33
33
  };
34
34
  })();
35
35
  Object.defineProperty(exports, "__esModule", { value: true });
36
- exports.autoUpdateSkillIfStale = autoUpdateSkillIfStale;
36
+ exports.CLI_VERSION = void 0;
37
37
  exports.checkForCliUpdate = checkForCliUpdate;
38
38
  const fs = __importStar(require("fs"));
39
- const os = __importStar(require("os"));
40
39
  const path = __importStar(require("path"));
41
- const template_1 = require("./template");
42
- const config_1 = require("../config");
43
- /**
44
- * Silent skill refresh. If the installed skill has a version marker that
45
- * differs from the current CLI's bundled version, overwrite it.
46
- *
47
- * - No marker → user-customized skill; leave it alone.
48
- * - Marker matches CLI version → up to date; no-op.
49
- * - Installed marker NEWER than this CLI → don't downgrade; leave it alone.
50
- * - Installed marker OLDER than this CLI → auto-upgrade. Print a stderr notice.
51
- *
52
- * All errors are swallowed: this is a UX nicety, not a correctness gate.
53
- * Skipped when `--json` is in argv so machine consumers see clean output.
54
- */
55
- function autoUpdateSkillIfStale() {
56
- if (process.argv.includes('--json'))
57
- return;
58
- try {
59
- const dest = (0, template_1.skillInstallPath)(os.homedir());
60
- if (!fs.existsSync(dest))
61
- return; // never installed; not our place
62
- const installed = fs.readFileSync(dest, 'utf8');
63
- const installedVersion = (0, template_1.readSkillVersion)(installed);
64
- if (!installedVersion)
65
- return; // user-customized; respect it
66
- if (installedVersion === template_1.CLI_VERSION)
67
- return; // already current
68
- // Downgrade floor: never clobber a NEWER installed skill with this (older)
69
- // CLI's bundled copy. Without this, a stale global CLI (e.g. not yet
70
- // `npm i -g`'d to latest) thrashes a newer skill back down on every
71
- // invocation — silently stripping commands/guidance the newer skill added.
72
- // Upgrades (installed older than CLI) still proceed below.
73
- if (isNewer(installedVersion, template_1.CLI_VERSION))
74
- return;
75
- fs.writeFileSync(dest, template_1.SKILL_MD);
76
- process.stderr.write(`sente: refreshed Claude Code skill (${installedVersion} -> ${template_1.CLI_VERSION}). Restart Claude Code to pick up changes.\n`);
77
- }
78
- catch {
79
- // Best-effort. Never crash the user's command on update failures.
80
- }
81
- }
40
+ const config_1 = require("./config");
41
+ // Read package.json once at module load. One level up from dist/update.js at
42
+ // runtime and from src/update.ts at dev time -- same depth.
43
+ const PKG = JSON.parse(fs.readFileSync(path.join(__dirname, '..', 'package.json'), 'utf8'));
44
+ exports.CLI_VERSION = PKG.version;
82
45
  const CACHE_PATH = path.join(config_1.CREDENTIALS_DIR, 'update-check.json');
83
46
  const CACHE_TTL_MS = 24 * 60 * 60 * 1000; // 24h
84
47
  const REGISTRY_URL = 'https://registry.npmjs.org/@sente-labs%2fcli/latest';
@@ -89,7 +52,7 @@ const REGISTRY_URL = 'https://registry.npmjs.org/@sente-labs%2fcli/latest';
89
52
  *
90
53
  * - Network failures, registry errors → silent skip.
91
54
  * - --json mode → silent skip.
92
- * - No SENTE_DISABLE_UPDATE_CHECK env var path so users can opt out.
55
+ * - SENTE_DISABLE_UPDATE_CHECK env var lets users opt out.
93
56
  *
94
57
  * Returns a promise the caller MAY await; the entry point fires-and-forgets
95
58
  * by returning before the request settles, so the user's command doesn't
@@ -114,8 +77,8 @@ async function checkForCliUpdate() {
114
77
  }
115
78
  if (!latest)
116
79
  return;
117
- if (isNewer(latest, template_1.CLI_VERSION)) {
118
- process.stderr.write(`sente: ${template_1.CLI_VERSION} -> ${latest} available. Run: npm i -g @sente-labs/cli@latest\n`);
80
+ if (isNewer(latest, exports.CLI_VERSION)) {
81
+ process.stderr.write(`sente: ${exports.CLI_VERSION} -> ${latest} available. Run: npm i -g @sente-labs/cli@latest\n`);
119
82
  }
120
83
  }
121
84
  catch {
@@ -176,4 +139,4 @@ function isNewer(candidate, current) {
176
139
  }
177
140
  return false;
178
141
  }
179
- //# sourceMappingURL=autoupdate.js.map
142
+ //# sourceMappingURL=update.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"update.js","sourceRoot":"","sources":["../src/update.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@sente-labs/cli",
3
- "version": "0.11.0",
3
+ "version": "0.14.0",
4
4
  "description": "Sente CLI -- give your AI agents managed email identities: create identities, receive and react to email, manage webhooks, from your terminal and Claude Code.",
5
5
  "bin": {
6
6
  "sente": "dist/index.js"
@@ -11,7 +11,7 @@
11
11
  "README.md"
12
12
  ],
13
13
  "scripts": {
14
- "build": "tsc && mkdir -p dist/skill && cp src/skill/SKILL.md dist/skill/SKILL.md && chmod +x dist/index.js",
14
+ "build": "tsc && chmod +x dist/index.js",
15
15
  "dev": "ts-node src/index.ts",
16
16
  "typecheck": "tsc --noEmit",
17
17
  "prepublishOnly": "npm run build",
@@ -49,5 +49,5 @@
49
49
  "ts-node": "^10.9.0",
50
50
  "typescript": "^5.0.0"
51
51
  },
52
- "license": "UNLICENSED"
52
+ "license": "MIT"
53
53
  }
@@ -1,110 +0,0 @@
1
- "use strict";
2
- var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
- if (k2 === undefined) k2 = k;
4
- var desc = Object.getOwnPropertyDescriptor(m, k);
5
- if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
- desc = { enumerable: true, get: function() { return m[k]; } };
7
- }
8
- Object.defineProperty(o, k2, desc);
9
- }) : (function(o, m, k, k2) {
10
- if (k2 === undefined) k2 = k;
11
- o[k2] = m[k];
12
- }));
13
- var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
- Object.defineProperty(o, "default", { enumerable: true, value: v });
15
- }) : function(o, v) {
16
- o["default"] = v;
17
- });
18
- var __importStar = (this && this.__importStar) || (function () {
19
- var ownKeys = function(o) {
20
- ownKeys = Object.getOwnPropertyNames || function (o) {
21
- var ar = [];
22
- for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
- return ar;
24
- };
25
- return ownKeys(o);
26
- };
27
- return function (mod) {
28
- if (mod && mod.__esModule) return mod;
29
- var result = {};
30
- if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
- __setModuleDefault(result, mod);
32
- return result;
33
- };
34
- })();
35
- Object.defineProperty(exports, "__esModule", { value: true });
36
- exports.registerAppGraphCommands = registerAppGraphCommands;
37
- const fs = __importStar(require("fs"));
38
- const client_1 = require("../client");
39
- const config_1 = require("../config");
40
- const output_1 = require("../output");
41
- /**
42
- * App-graph commands. The app graph is a source-derived route map (routes +
43
- * navigation edges) that the customer's coding agent generates from the repo at
44
- * onboarding; the browser agent consults it to localize ("what page am I on,
45
- * what's reachable, which controls leave this page"). The agent authors the JSON
46
- * by reading the repo (see the skill's "Generating the app map" recipe); these
47
- * commands upload and inspect it.
48
- */
49
- function registerAppGraphCommands(program, globalOpts) {
50
- const appGraph = program.command('app-graph').description('App-graph: source-derived route map for the browser agent');
51
- appGraph
52
- .command('push')
53
- .description('Upload a generated app-graph JSON for a project')
54
- .requiredOption('--from <file>', 'JSON file containing the app graph')
55
- .option('--project <id>', 'project id (overrides .sente/config.json)')
56
- .action(async (cmdOpts) => {
57
- const opts = globalOpts();
58
- try {
59
- const projectId = cmdOpts.project ?? (0, config_1.readLocalProjectId)();
60
- if (!projectId) {
61
- throw new Error('No project id found. Pass --project <id> or run `sente init` to create a .sente/config.json.');
62
- }
63
- let graph;
64
- try {
65
- graph = JSON.parse(fs.readFileSync(cmdOpts.from, 'utf8'));
66
- }
67
- catch {
68
- throw new Error(`Could not read or parse JSON from ${cmdOpts.from}`);
69
- }
70
- const client = new client_1.GatewayClient();
71
- const res = await client.request(`/api/projects/${projectId}/app-graph`, { method: 'PUT', body: graph });
72
- (0, output_1.printSuccess)(res, () => process.stdout.write(`Uploaded app graph: ${res.nodeCount} route(s), ${res.edgeCount} edge(s).\n`), opts);
73
- }
74
- catch (err) {
75
- process.exit((0, output_1.printError)(err, opts));
76
- }
77
- });
78
- appGraph
79
- .command('show')
80
- .description('Show the stored app-graph for a project')
81
- .option('--project <id>', 'project id (overrides .sente/config.json)')
82
- .action(async (cmdOpts) => {
83
- const opts = globalOpts();
84
- try {
85
- const projectId = cmdOpts.project ?? (0, config_1.readLocalProjectId)();
86
- if (!projectId) {
87
- throw new Error('No project id found. Pass --project <id> or run `sente init` to create a .sente/config.json.');
88
- }
89
- const client = new client_1.GatewayClient();
90
- const res = await client.request(`/api/projects/${projectId}/app-graph`);
91
- (0, output_1.printSuccess)(res, () => {
92
- const g = res.appGraph;
93
- if (!g) {
94
- process.stdout.write('No app graph stored for this project. Ask Claude Code to "generate the Sente app map", then `sente app-graph push`.\n');
95
- return;
96
- }
97
- const nodes = g.nodes ?? [];
98
- const commit = g.commitSha ? `, commit ${g.commitSha.slice(0, 7)}` : '';
99
- process.stdout.write(`App graph v${g.version}${g.framework ? ` (${g.framework})` : ''} — ${nodes.length} route(s), ${(g.edges ?? []).length} edge(s)${commit}\n`);
100
- for (const n of nodes) {
101
- process.stdout.write(` ${n.pathPattern} → ${n.componentName ?? ''} [${n.confidence}]\n`);
102
- }
103
- }, opts);
104
- }
105
- catch (err) {
106
- process.exit((0, output_1.printError)(err, opts));
107
- }
108
- });
109
- }
110
- //# sourceMappingURL=appGraph.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"appGraph.js","sourceRoot":"","sources":["../../src/commands/appGraph.ts"],"names":[],"mappings":"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"}
@@ -1,54 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.registerAuthCommands = registerAuthCommands;
4
- const client_1 = require("../client");
5
- const output_1 = require("../output");
6
- /**
7
- * Authenticated-session seeding for SSO / 2FA flows. A human logs in once in a
8
- * live browser bound to the project's persistent profile; the login persists,
9
- * and later runs start already authenticated (so tests skip the login entirely).
10
- *
11
- * This is the answer for providers like "Log in with Google" that block
12
- * automated per-run logins (bot detection + 2FA device prompts).
13
- */
14
- function registerAuthCommands(program, globalOpts) {
15
- const auth = program.command('auth').description('Authenticated-session seeding (SSO / 2FA)');
16
- auth
17
- .command('login')
18
- .description('Open a one-time live browser to log in (incl. SSO/2FA); saves the session to the project profile')
19
- .requiredOption('--project <id>', 'project id to seed')
20
- .action(async (cmdOpts) => {
21
- const opts = globalOpts();
22
- try {
23
- const client = new client_1.GatewayClient();
24
- const res = await client.request(`/api/projects/${cmdOpts.project}/auth-session`, { method: 'POST', body: {} });
25
- (0, output_1.printSuccess)(res, () => {
26
- process.stdout.write('Open this URL and log in (complete any 2FA on your device):\n\n');
27
- process.stdout.write(` ${res.liveUrl}\n\n`);
28
- process.stdout.write('Once you have reached the logged-in app, run:\n');
29
- process.stdout.write(` sente auth finish ${res.sessionId} --project ${cmdOpts.project}\n\n`);
30
- process.stdout.write(`(The live session expires at ${res.expiresAt}.)\n`);
31
- }, opts);
32
- }
33
- catch (err) {
34
- process.exit((0, output_1.printError)(err, opts));
35
- }
36
- });
37
- auth
38
- .command('finish')
39
- .description('Close the live login session and persist the logged-in state to the project profile')
40
- .argument('<sessionId>', 'the sessionId returned by `sente auth login`')
41
- .requiredOption('--project <id>', 'project id')
42
- .action(async (sessionId, cmdOpts) => {
43
- const opts = globalOpts();
44
- try {
45
- const client = new client_1.GatewayClient();
46
- const res = await client.request(`/api/projects/${cmdOpts.project}/auth-session/${sessionId}/finish`, { method: 'POST', body: {} });
47
- (0, output_1.printSuccess)(res, 'Login saved to the project profile. Runs with the browser profile enabled will start authenticated.', opts);
48
- }
49
- catch (err) {
50
- process.exit((0, output_1.printError)(err, opts));
51
- }
52
- });
53
- }
54
- //# sourceMappingURL=auth.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"auth.js","sourceRoot":"","sources":["../../src/commands/auth.ts"],"names":[],"mappings":";;AAoBA,oDAqDC;AAxED,sCAA0C;AAC1C,sCAAiE;AAUjE;;;;;;;GAOG;AACH,SAAgB,oBAAoB,CAAC,OAAgB,EAAE,UAA4B;IACjF,MAAM,IAAI,GAAG,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,WAAW,CAAC,2CAA2C,CAAC,CAAC;IAE9F,IAAI;SACD,OAAO,CAAC,OAAO,CAAC;SAChB,WAAW,CAAC,kGAAkG,CAAC;SAC/G,cAAc,CAAC,gBAAgB,EAAE,oBAAoB,CAAC;SACtD,MAAM,CAAC,KAAK,EAAE,OAA4B,EAAE,EAAE;QAC7C,MAAM,IAAI,GAAG,UAAU,EAAE,CAAC;QAC1B,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,IAAI,sBAAa,EAAE,CAAC;YACnC,MAAM,GAAG,GAAG,MAAM,MAAM,CAAC,OAAO,CAC9B,iBAAiB,OAAO,CAAC,OAAO,eAAe,EAC/C,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,EAAE,EAAE,CAC7B,CAAC;YACF,IAAA,qBAAY,EACV,GAAG,EACH,GAAG,EAAE;gBACH,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,iEAAiE,CAAC,CAAC;gBACxF,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,GAAG,CAAC,OAAO,MAAM,CAAC,CAAC;gBAC7C,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,iDAAiD,CAAC,CAAC;gBACxE,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,uBAAuB,GAAG,CAAC,SAAS,cAAc,OAAO,CAAC,OAAO,MAAM,CAAC,CAAC;gBAC9F,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,gCAAgC,GAAG,CAAC,SAAS,MAAM,CAAC,CAAC;YAC5E,CAAC,EACD,IAAI,CACL,CAAC;QACJ,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,OAAO,CAAC,IAAI,CAAC,IAAA,mBAAU,EAAC,GAAG,EAAE,IAAI,CAAC,CAAC,CAAC;QACtC,CAAC;IACH,CAAC,CAAC,CAAC;IAEL,IAAI;SACD,OAAO,CAAC,QAAQ,CAAC;SACjB,WAAW,CAAC,qFAAqF,CAAC;SAClG,QAAQ,CAAC,aAAa,EAAE,8CAA8C,CAAC;SACvE,cAAc,CAAC,gBAAgB,EAAE,YAAY,CAAC;SAC9C,MAAM,CAAC,KAAK,EAAE,SAAiB,EAAE,OAA4B,EAAE,EAAE;QAChE,MAAM,IAAI,GAAG,UAAU,EAAE,CAAC;QAC1B,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,IAAI,sBAAa,EAAE,CAAC;YACnC,MAAM,GAAG,GAAG,MAAM,MAAM,CAAC,OAAO,CAC9B,iBAAiB,OAAO,CAAC,OAAO,iBAAiB,SAAS,SAAS,EACnE,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,EAAE,EAAE,CAC7B,CAAC;YACF,IAAA,qBAAY,EACV,GAAG,EACH,qGAAqG,EACrG,IAAI,CACL,CAAC;QACJ,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,OAAO,CAAC,IAAI,CAAC,IAAA,mBAAU,EAAC,GAAG,EAAE,IAAI,CAAC,CAAC,CAAC;QACtC,CAAC;IACH,CAAC,CAAC,CAAC;AACP,CAAC"}
@@ -1,94 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.registerDeployWebhookCommands = registerDeployWebhookCommands;
4
- const client_1 = require("../client");
5
- const config_1 = require("../config");
6
- const output_1 = require("../output");
7
- /**
8
- * Resolve the target project id from `--project` or the repo's `.sente/config.json`.
9
- * Throws a clear error if neither is available.
10
- */
11
- function resolveProjectId(explicit) {
12
- const projectId = explicit ?? (0, config_1.readLocalProjectId)();
13
- if (!projectId) {
14
- throw new Error('No project id found. Pass --project <projectId> or run `sente init` to create a .sente/config.json.');
15
- }
16
- return projectId;
17
- }
18
- function registerDeployWebhookCommands(program, globalOpts) {
19
- const webhook = program
20
- .command('deploy-webhook')
21
- .description('Manage a project deploy webhook (fires runOnDeploy tasks when staging/prod deploys)');
22
- webhook
23
- .command('status')
24
- .description('Show whether a deploy webhook secret exists, plus recent deploy events')
25
- .option('--project <projectId>', 'Project id (overrides .sente/config.json)')
26
- .action(async (cmdOpts) => {
27
- const opts = globalOpts();
28
- try {
29
- const projectId = resolveProjectId(cmdOpts.project);
30
- const client = new client_1.GatewayClient();
31
- const res = await client.request(`/api/projects/${projectId}/deploy-webhook`);
32
- (0, output_1.printSuccess)({ hasSecret: res.hasSecret, secretPrefix: res.secretPrefix, events: res.events }, () => {
33
- process.stdout.write(res.hasSecret
34
- ? `Deploy webhook: configured (secret ${res.secretPrefix}…)\n`
35
- : 'Deploy webhook: no secret set (PAT-authenticated deploy events only)\n');
36
- if (res.events.length === 0) {
37
- process.stdout.write('No recent deploy events.\n');
38
- return;
39
- }
40
- process.stdout.write('\nRecent deploy events:\n');
41
- for (const e of res.events) {
42
- const sha = e.commitSha ? e.commitSha.slice(0, 8) : '—';
43
- const dedup = e.deduplicated ? ' (deduplicated)' : '';
44
- process.stdout.write(` ${e.createdAt} ${e.environment.padEnd(10)} ${sha} ${e.triggeredTaskIds.length} task(s)${dedup}\n`);
45
- }
46
- }, opts);
47
- }
48
- catch (err) {
49
- process.exit((0, output_1.printError)(err, opts));
50
- }
51
- });
52
- webhook
53
- .command('regenerate')
54
- .description('Rotate (or create) the deploy webhook secret. Returns the raw value ONCE — copy it now.')
55
- .option('--project <projectId>', 'Project id (overrides .sente/config.json)')
56
- .action(async (cmdOpts) => {
57
- const opts = globalOpts();
58
- try {
59
- const projectId = resolveProjectId(cmdOpts.project);
60
- const client = new client_1.GatewayClient();
61
- const res = await client.request(`/api/projects/${projectId}/deploy-webhook/regenerate`, { method: 'POST', body: {} });
62
- (0, output_1.printSuccess)({ rawSecret: res.rawSecret, prefix: res.prefix }, () => {
63
- process.stdout.write('Deploy webhook secret rotated. This is shown ONCE:\n\n');
64
- process.stdout.write(` ${res.rawSecret}\n\n`);
65
- process.stdout.write('Store it as a CI secret and send it as the X-Sente-Secret header when POSTing\n' +
66
- `to /api/projects/${projectId}/deploy-events after each deploy.\n`);
67
- }, opts);
68
- // In human mode, nudge the operator that the value won't be retrievable later.
69
- if (!(0, output_1.isJson)(opts)) {
70
- process.stderr.write('\nThe raw secret is not stored and cannot be retrieved again.\n');
71
- }
72
- }
73
- catch (err) {
74
- process.exit((0, output_1.printError)(err, opts));
75
- }
76
- });
77
- webhook
78
- .command('clear')
79
- .description('Clear the deploy webhook secret (after this, only PAT-authenticated deploy events are accepted)')
80
- .option('--project <projectId>', 'Project id (overrides .sente/config.json)')
81
- .action(async (cmdOpts) => {
82
- const opts = globalOpts();
83
- try {
84
- const projectId = resolveProjectId(cmdOpts.project);
85
- const client = new client_1.GatewayClient();
86
- await client.request(`/api/projects/${projectId}/deploy-webhook`, { method: 'DELETE' });
87
- (0, output_1.printSuccess)({ ok: true, projectId }, `Cleared deploy webhook secret for project ${projectId}.`, opts);
88
- }
89
- catch (err) {
90
- process.exit((0, output_1.printError)(err, opts));
91
- }
92
- });
93
- }
94
- //# sourceMappingURL=deployWebhook.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"deployWebhook.js","sourceRoot":"","sources":["../../src/commands/deployWebhook.ts"],"names":[],"mappings":"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"}