huntr-cli 1.0.9

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.
Files changed (117) hide show
  1. package/.env.example +7 -0
  2. package/.github/ISSUE_TEMPLATE/bug_report.md +43 -0
  3. package/.github/ISSUE_TEMPLATE/config.yml +8 -0
  4. package/.github/ISSUE_TEMPLATE/feature_request.md +29 -0
  5. package/.github/labels.json +92 -0
  6. package/.github/pull_request_template.md +64 -0
  7. package/.github/workflows/ci.yml +87 -0
  8. package/.github/workflows/labels.yml +27 -0
  9. package/.github/workflows/manual-publish.yml +105 -0
  10. package/.github/workflows/publish.yml +57 -0
  11. package/.github/workflows/release.yml +124 -0
  12. package/.github/workflows/security-audit.yml +44 -0
  13. package/.husky/pre-commit +12 -0
  14. package/.husky/pre-push +27 -0
  15. package/.lintstagedrc.json +3 -0
  16. package/AGENTS.md +449 -0
  17. package/CHANGELOG.md +38 -0
  18. package/CHANGES.md +259 -0
  19. package/LICENSE +15 -0
  20. package/PUBLISHING.md +191 -0
  21. package/README.md +385 -0
  22. package/ROADMAP.md +158 -0
  23. package/SETUP-COMPLETE.md +446 -0
  24. package/WORKFLOW-SUMMARY.md +368 -0
  25. package/completions/_huntr +168 -0
  26. package/completions/huntr.1 +266 -0
  27. package/completions/huntr.bash +91 -0
  28. package/dist/api/client.d.ts +14 -0
  29. package/dist/api/client.d.ts.map +1 -0
  30. package/dist/api/client.js +74 -0
  31. package/dist/api/client.js.map +1 -0
  32. package/dist/api/personal/activities.d.ts +20 -0
  33. package/dist/api/personal/activities.d.ts.map +1 -0
  34. package/dist/api/personal/activities.js +50 -0
  35. package/dist/api/personal/activities.js.map +1 -0
  36. package/dist/api/personal/boards.d.ts +9 -0
  37. package/dist/api/personal/boards.d.ts.map +1 -0
  38. package/dist/api/personal/boards.js +16 -0
  39. package/dist/api/personal/boards.js.map +1 -0
  40. package/dist/api/personal/index.d.ts +17 -0
  41. package/dist/api/personal/index.d.ts.map +1 -0
  42. package/dist/api/personal/index.js +37 -0
  43. package/dist/api/personal/index.js.map +1 -0
  44. package/dist/api/personal/jobs.d.ts +13 -0
  45. package/dist/api/personal/jobs.d.ts.map +1 -0
  46. package/dist/api/personal/jobs.js +31 -0
  47. package/dist/api/personal/jobs.js.map +1 -0
  48. package/dist/api/personal/user.d.ts +8 -0
  49. package/dist/api/personal/user.d.ts.map +1 -0
  50. package/dist/api/personal/user.js +13 -0
  51. package/dist/api/personal/user.js.map +1 -0
  52. package/dist/cli.d.ts +3 -0
  53. package/dist/cli.d.ts.map +1 -0
  54. package/dist/cli.js +501 -0
  55. package/dist/cli.js.map +1 -0
  56. package/dist/commands/capture-session.d.ts +10 -0
  57. package/dist/commands/capture-session.d.ts.map +1 -0
  58. package/dist/commands/capture-session.js +478 -0
  59. package/dist/commands/capture-session.js.map +1 -0
  60. package/dist/config/clerk-session-manager.d.ts +44 -0
  61. package/dist/config/clerk-session-manager.d.ts.map +1 -0
  62. package/dist/config/clerk-session-manager.js +232 -0
  63. package/dist/config/clerk-session-manager.js.map +1 -0
  64. package/dist/config/config-manager.d.ts +15 -0
  65. package/dist/config/config-manager.d.ts.map +1 -0
  66. package/dist/config/config-manager.js +51 -0
  67. package/dist/config/config-manager.js.map +1 -0
  68. package/dist/config/keychain-manager.d.ts +6 -0
  69. package/dist/config/keychain-manager.d.ts.map +1 -0
  70. package/dist/config/keychain-manager.js +37 -0
  71. package/dist/config/keychain-manager.js.map +1 -0
  72. package/dist/config/token-capture.d.ts +11 -0
  73. package/dist/config/token-capture.d.ts.map +1 -0
  74. package/dist/config/token-capture.js +252 -0
  75. package/dist/config/token-capture.js.map +1 -0
  76. package/dist/config/token-manager.d.ts +38 -0
  77. package/dist/config/token-manager.d.ts.map +1 -0
  78. package/dist/config/token-manager.js +153 -0
  79. package/dist/config/token-manager.js.map +1 -0
  80. package/dist/lib/list-options.d.ts +69 -0
  81. package/dist/lib/list-options.d.ts.map +1 -0
  82. package/dist/lib/list-options.js +299 -0
  83. package/dist/lib/list-options.js.map +1 -0
  84. package/dist/types/personal.d.ts +113 -0
  85. package/dist/types/personal.d.ts.map +1 -0
  86. package/dist/types/personal.js +4 -0
  87. package/dist/types/personal.js.map +1 -0
  88. package/docs/AUTOMATIC-PUBLISHING.md +520 -0
  89. package/docs/CHANGELOG-AUTOMATION.md +418 -0
  90. package/docs/CI-CD-SETUP.md +582 -0
  91. package/docs/DEV-SETUP.md +512 -0
  92. package/docs/ENHANCEMENT-PLAN.md +204 -0
  93. package/docs/ENTITY-TYPES.md +462 -0
  94. package/docs/GITHUB-ACTIONS-GUIDE.md +367 -0
  95. package/docs/NPM-PUBLISHING.md +324 -0
  96. package/docs/OUTPUT-EXAMPLES.md +414 -0
  97. package/docs/OUTPUT-FORMATS.md +299 -0
  98. package/docs/TESTING.md +216 -0
  99. package/eslint.config.js +68 -0
  100. package/package.json +64 -0
  101. package/src/api/client.ts +88 -0
  102. package/src/api/personal/activities.ts +66 -0
  103. package/src/api/personal/boards.ts +14 -0
  104. package/src/api/personal/index.ts +25 -0
  105. package/src/api/personal/jobs.ts +33 -0
  106. package/src/api/personal/user.ts +10 -0
  107. package/src/cli.ts +487 -0
  108. package/src/commands/capture-session.ts +582 -0
  109. package/src/config/clerk-session-manager.ts +263 -0
  110. package/src/config/config-manager.ts +56 -0
  111. package/src/config/keychain-manager.ts +30 -0
  112. package/src/config/token-capture.ts +233 -0
  113. package/src/config/token-manager.ts +139 -0
  114. package/src/lib/list-options.ts +370 -0
  115. package/src/types/personal.ts +114 -0
  116. package/tests/example.test.ts +130 -0
  117. package/tsconfig.json +19 -0
@@ -0,0 +1,31 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.PersonalJobsApi = void 0;
4
+ class PersonalJobsApi {
5
+ constructor(client) {
6
+ this.client = client;
7
+ }
8
+ // API returns { jobs: { [id]: PersonalJob } } — an object map, not an array
9
+ async listByBoard(boardId) {
10
+ return this.client.get(`/board/${boardId}/jobs`);
11
+ }
12
+ // Convenience: returns flat array
13
+ async listByBoardFlat(boardId) {
14
+ const response = await this.listByBoard(boardId);
15
+ return Object.values(response.jobs);
16
+ }
17
+ async get(boardId, jobId) {
18
+ return this.client.get(`/board/${boardId}/jobs/${jobId}`);
19
+ }
20
+ async create(boardId, job) {
21
+ return this.client.post(`/board/${boardId}/jobs`, job);
22
+ }
23
+ async update(boardId, jobId, updates) {
24
+ return this.client.put(`/board/${boardId}/jobs/${jobId}`, updates);
25
+ }
26
+ async delete(boardId, jobId) {
27
+ return this.client.delete(`/board/${boardId}/jobs/${jobId}`);
28
+ }
29
+ }
30
+ exports.PersonalJobsApi = PersonalJobsApi;
31
+ //# sourceMappingURL=jobs.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"jobs.js","sourceRoot":"","sources":["../../../src/api/personal/jobs.ts"],"names":[],"mappings":";;;AAGA,MAAa,eAAe;IAC1B,YAAoB,MAAsB;QAAtB,WAAM,GAAN,MAAM,CAAgB;IAAG,CAAC;IAE9C,4EAA4E;IAC5E,KAAK,CAAC,WAAW,CAAC,OAAe;QAC/B,OAAO,IAAI,CAAC,MAAM,CAAC,GAAG,CAAuB,UAAU,OAAO,OAAO,CAAC,CAAC;IACzE,CAAC;IAED,kCAAkC;IAClC,KAAK,CAAC,eAAe,CAAC,OAAe;QACnC,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC;QACjD,OAAO,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;IACtC,CAAC;IAED,KAAK,CAAC,GAAG,CAAC,OAAe,EAAE,KAAa;QACtC,OAAO,IAAI,CAAC,MAAM,CAAC,GAAG,CAAc,UAAU,OAAO,SAAS,KAAK,EAAE,CAAC,CAAC;IACzE,CAAC;IAED,KAAK,CAAC,MAAM,CAAC,OAAe,EAAE,GAAyB;QACrD,OAAO,IAAI,CAAC,MAAM,CAAC,IAAI,CAAc,UAAU,OAAO,OAAO,EAAE,GAAG,CAAC,CAAC;IACtE,CAAC;IAED,KAAK,CAAC,MAAM,CAAC,OAAe,EAAE,KAAa,EAAE,OAA6B;QACxE,OAAO,IAAI,CAAC,MAAM,CAAC,GAAG,CAAc,UAAU,OAAO,SAAS,KAAK,EAAE,EAAE,OAAO,CAAC,CAAC;IAClF,CAAC;IAED,KAAK,CAAC,MAAM,CAAC,OAAe,EAAE,KAAa;QACzC,OAAO,IAAI,CAAC,MAAM,CAAC,MAAM,CAAO,UAAU,OAAO,SAAS,KAAK,EAAE,CAAC,CAAC;IACrE,CAAC;CACF;AA7BD,0CA6BC"}
@@ -0,0 +1,8 @@
1
+ import { HuntrApiClient } from '../client';
2
+ import { UserProfile } from '../../types/personal';
3
+ export declare class PersonalUserApi {
4
+ private client;
5
+ constructor(client: HuntrApiClient);
6
+ getProfile(): Promise<UserProfile>;
7
+ }
8
+ //# sourceMappingURL=user.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"user.d.ts","sourceRoot":"","sources":["../../../src/api/personal/user.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,WAAW,CAAC;AAC3C,OAAO,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AAEnD,qBAAa,eAAe;IACd,OAAO,CAAC,MAAM;gBAAN,MAAM,EAAE,cAAc;IAEpC,UAAU,IAAI,OAAO,CAAC,WAAW,CAAC;CAGzC"}
@@ -0,0 +1,13 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.PersonalUserApi = void 0;
4
+ class PersonalUserApi {
5
+ constructor(client) {
6
+ this.client = client;
7
+ }
8
+ async getProfile() {
9
+ return this.client.get('/me');
10
+ }
11
+ }
12
+ exports.PersonalUserApi = PersonalUserApi;
13
+ //# sourceMappingURL=user.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"user.js","sourceRoot":"","sources":["../../../src/api/personal/user.ts"],"names":[],"mappings":";;;AAGA,MAAa,eAAe;IAC1B,YAAoB,MAAsB;QAAtB,WAAM,GAAN,MAAM,CAAgB;IAAG,CAAC;IAE9C,KAAK,CAAC,UAAU;QACd,OAAO,IAAI,CAAC,MAAM,CAAC,GAAG,CAAc,KAAK,CAAC,CAAC;IAC7C,CAAC;CACF;AAND,0CAMC"}
package/dist/cli.d.ts ADDED
@@ -0,0 +1,3 @@
1
+ #!/usr/bin/env node
2
+ export {};
3
+ //# sourceMappingURL=cli.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":""}
package/dist/cli.js ADDED
@@ -0,0 +1,501 @@
1
+ #!/usr/bin/env node
2
+ "use strict";
3
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
4
+ if (k2 === undefined) k2 = k;
5
+ var desc = Object.getOwnPropertyDescriptor(m, k);
6
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
7
+ desc = { enumerable: true, get: function() { return m[k]; } };
8
+ }
9
+ Object.defineProperty(o, k2, desc);
10
+ }) : (function(o, m, k, k2) {
11
+ if (k2 === undefined) k2 = k;
12
+ o[k2] = m[k];
13
+ }));
14
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
15
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
16
+ }) : function(o, v) {
17
+ o["default"] = v;
18
+ });
19
+ var __importStar = (this && this.__importStar) || (function () {
20
+ var ownKeys = function(o) {
21
+ ownKeys = Object.getOwnPropertyNames || function (o) {
22
+ var ar = [];
23
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
24
+ return ar;
25
+ };
26
+ return ownKeys(o);
27
+ };
28
+ return function (mod) {
29
+ if (mod && mod.__esModule) return mod;
30
+ var result = {};
31
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
32
+ __setModuleDefault(result, mod);
33
+ return result;
34
+ };
35
+ })();
36
+ Object.defineProperty(exports, "__esModule", { value: true });
37
+ const commander_1 = require("commander");
38
+ const personal_1 = require("./api/personal");
39
+ const token_manager_1 = require("./config/token-manager");
40
+ const clerk_session_manager_1 = require("./config/clerk-session-manager");
41
+ const capture_session_1 = require("./commands/capture-session");
42
+ const list_options_1 = require("./lib/list-options");
43
+ const program = new commander_1.Command();
44
+ const tokenManager = new token_manager_1.TokenManager();
45
+ async function getApi(token) {
46
+ const provider = await tokenManager.getTokenProvider({ token });
47
+ return new personal_1.HuntrPersonalApi(provider);
48
+ }
49
+ program
50
+ .name('huntr')
51
+ .description('CLI tool for Huntr')
52
+ .version('1.0.0')
53
+ .option('-t, --token <token>', 'API token (overrides all other sources)');
54
+ // ── me ───────────────────────────────────────────────────────────────────────
55
+ program
56
+ .command('me')
57
+ .description('Show your user profile')
58
+ .option('-j, --json', 'Output as JSON')
59
+ .action(async (options, command) => {
60
+ try {
61
+ const api = await getApi(command.parent?.opts().token);
62
+ const profile = await api.user.getProfile();
63
+ if (options.json) {
64
+ console.log(JSON.stringify(profile, null, 2));
65
+ }
66
+ else {
67
+ console.log(`Name: ${profile.givenName ?? profile.firstName ?? ''} ${profile.familyName ?? profile.lastName ?? ''}`);
68
+ console.log(`Email: ${profile.email}`);
69
+ console.log(`ID: ${profile.id}`);
70
+ }
71
+ }
72
+ catch (error) {
73
+ console.error('Error:', error instanceof Error ? error.message : error);
74
+ process.exit(1);
75
+ }
76
+ });
77
+ // ── boards ───────────────────────────────────────────────────────────────────
78
+ const boards = program.command('boards').description('Manage your boards');
79
+ boards
80
+ .command('list')
81
+ .description('List all your boards')
82
+ .option('-f, --format <format>', 'Output format: table (default), json, csv, pdf, excel')
83
+ .option('-j, --json', 'Output as JSON (legacy, same as --format json)')
84
+ .option('--fields <fields>', 'Comma-separated list of fields to include')
85
+ .action(async (options, command) => {
86
+ try {
87
+ const AVAILABLE_FIELDS = ['ID', 'Name', 'Created'];
88
+ const listOpts = (0, list_options_1.parseListOptions)(options);
89
+ const fields = (0, list_options_1.validateFields)(AVAILABLE_FIELDS, listOpts.fields);
90
+ const api = await getApi(command.parent?.parent?.opts().token);
91
+ const response = await api.boards.list();
92
+ const boardsList = Array.isArray(response) ? response : response.data ?? [];
93
+ if (boardsList.length === 0) {
94
+ console.log('No boards found.');
95
+ return;
96
+ }
97
+ const rows = boardsList.map((b) => ({
98
+ ID: b.id,
99
+ Name: b.name ?? 'N/A',
100
+ Created: new Date(b.createdAt).toLocaleDateString(),
101
+ }));
102
+ if (listOpts.format === 'json') {
103
+ console.log((0, list_options_1.formatJsonWithFields)(rows, fields));
104
+ }
105
+ else if (listOpts.format === 'csv') {
106
+ console.log((0, list_options_1.formatCsvWithFields)(rows, fields));
107
+ }
108
+ else if (listOpts.format === 'pdf') {
109
+ const buffer = (0, list_options_1.formatPdf)(rows, fields, 'Boards List');
110
+ process.stdout.write(buffer);
111
+ }
112
+ else if (listOpts.format === 'excel') {
113
+ const buffer = await (0, list_options_1.formatExcel)(rows, fields, 'Boards');
114
+ process.stdout.write(buffer);
115
+ }
116
+ else {
117
+ console.log((0, list_options_1.formatTableWithFields)(rows, fields));
118
+ }
119
+ }
120
+ catch (error) {
121
+ console.error('Error:', error instanceof Error ? error.message : error);
122
+ process.exit(1);
123
+ }
124
+ });
125
+ boards
126
+ .command('get')
127
+ .description('Get details of a specific board')
128
+ .argument('<board-id>', 'Board ID')
129
+ .option('-j, --json', 'Output as JSON')
130
+ .action(async (boardId, options, command) => {
131
+ try {
132
+ const api = await getApi(command.parent?.parent?.opts().token);
133
+ const board = await api.boards.get(boardId);
134
+ if (options.json) {
135
+ console.log(JSON.stringify(board, null, 2));
136
+ }
137
+ else {
138
+ console.log(`Board: ${board.name}`);
139
+ console.log(`ID: ${board.id}`);
140
+ console.log(`Created: ${new Date(board.createdAt).toLocaleString()}`);
141
+ if (board.lists?.length) {
142
+ console.log('\nLists:');
143
+ board.lists.forEach(l => console.log(` - ${l.name}`));
144
+ }
145
+ }
146
+ }
147
+ catch (error) {
148
+ console.error('Error:', error instanceof Error ? error.message : error);
149
+ process.exit(1);
150
+ }
151
+ });
152
+ // ── jobs ─────────────────────────────────────────────────────────────────────
153
+ const jobs = program.command('jobs').description('Manage jobs on your boards');
154
+ jobs
155
+ .command('list')
156
+ .description('List jobs on a board')
157
+ .argument('<board-id>', 'Board ID')
158
+ .option('-f, --format <format>', 'Output format: table (default), json, csv, pdf, excel')
159
+ .option('-j, --json', 'Output as JSON (legacy, same as --format json)')
160
+ .option('--fields <fields>', 'Comma-separated list of fields to include')
161
+ .action(async (boardId, options, command) => {
162
+ try {
163
+ const AVAILABLE_FIELDS = ['ID', 'Title', 'URL', 'Created'];
164
+ const listOpts = (0, list_options_1.parseListOptions)(options);
165
+ const fields = (0, list_options_1.validateFields)(AVAILABLE_FIELDS, listOpts.fields);
166
+ const api = await getApi(command.parent?.parent?.opts().token);
167
+ const jobsList = await api.jobs.listByBoardFlat(boardId);
168
+ if (jobsList.length === 0) {
169
+ console.log('No jobs found.');
170
+ return;
171
+ }
172
+ const rows = jobsList.map(j => ({
173
+ ID: j.id,
174
+ Title: j.title,
175
+ URL: j.url ?? 'N/A',
176
+ Created: new Date(j.createdAt).toLocaleDateString(),
177
+ }));
178
+ if (listOpts.format === 'json') {
179
+ console.log((0, list_options_1.formatJsonWithFields)(rows, fields));
180
+ }
181
+ else if (listOpts.format === 'csv') {
182
+ console.log((0, list_options_1.formatCsvWithFields)(rows, fields));
183
+ }
184
+ else if (listOpts.format === 'pdf') {
185
+ const buffer = (0, list_options_1.formatPdf)(rows, fields, 'Jobs List');
186
+ process.stdout.write(buffer);
187
+ }
188
+ else if (listOpts.format === 'excel') {
189
+ const buffer = await (0, list_options_1.formatExcel)(rows, fields, 'Jobs');
190
+ process.stdout.write(buffer);
191
+ }
192
+ else {
193
+ console.log((0, list_options_1.formatTableWithFields)(rows, fields));
194
+ }
195
+ }
196
+ catch (error) {
197
+ console.error('Error:', error instanceof Error ? error.message : error);
198
+ process.exit(1);
199
+ }
200
+ });
201
+ jobs
202
+ .command('get')
203
+ .description('Get details of a specific job')
204
+ .argument('<board-id>', 'Board ID')
205
+ .argument('<job-id>', 'Job ID')
206
+ .option('-j, --json', 'Output as JSON')
207
+ .action(async (boardId, jobId, options, command) => {
208
+ try {
209
+ const api = await getApi(command.parent?.parent?.opts().token);
210
+ const job = await api.jobs.get(boardId, jobId);
211
+ if (options.json) {
212
+ console.log(JSON.stringify(job, null, 2));
213
+ }
214
+ else {
215
+ console.log('\nJob Details:');
216
+ console.log(` Title: ${job.title}`);
217
+ console.log(` URL: ${job.url ?? 'N/A'}`);
218
+ console.log(` Location: ${job.location?.address ?? 'N/A'}`);
219
+ if (job.salary) {
220
+ console.log(` Salary: ${job.salary.min ?? 'N/A'} - ${job.salary.max ?? 'N/A'} ${job.salary.currency ?? ''}`);
221
+ }
222
+ console.log(` Created: ${new Date(job.createdAt).toLocaleString()}`);
223
+ }
224
+ }
225
+ catch (error) {
226
+ console.error('Error:', error instanceof Error ? error.message : error);
227
+ process.exit(1);
228
+ }
229
+ });
230
+ // ── activities ───────────────────────────────────────────────────────────────
231
+ const activities = program.command('activities').description('View your board activity log');
232
+ activities
233
+ .command('list')
234
+ .description('List actions for a board')
235
+ .argument('<board-id>', 'Board ID')
236
+ .option('-f, --format <format>', 'Output format: table (default), json, csv, pdf, excel')
237
+ .option('-d, --days <days>', 'Filter to last N days (e.g. 7 for past week)')
238
+ .option('-w, --week', 'Filter to last 7 days (legacy, same as --days 7)')
239
+ .option('--types <types>', 'Comma-separated action types (e.g. JOB_MOVED,NOTE_CREATED)')
240
+ .option('--fields <fields>', 'Comma-separated list of fields to include')
241
+ .option('-j, --json', 'Output as JSON (legacy, same as --format json)')
242
+ .action(async (boardId, options, command) => {
243
+ try {
244
+ const AVAILABLE_FIELDS = ['Date', 'Type', 'Company', 'Job', 'Status'];
245
+ const listOpts = (0, list_options_1.parseListOptions)(options);
246
+ const fields = (0, list_options_1.validateFields)(AVAILABLE_FIELDS, listOpts.fields);
247
+ const api = await getApi(command.parent?.parent?.opts().token);
248
+ const apiOpts = {};
249
+ if (listOpts.days) {
250
+ apiOpts.since = new Date(Date.now() - listOpts.days * 24 * 60 * 60 * 1000);
251
+ }
252
+ if (listOpts.types) {
253
+ apiOpts.types = listOpts.types;
254
+ }
255
+ const actions = await api.actions.listByBoardFlat(boardId, apiOpts);
256
+ if (actions.length === 0) {
257
+ console.log('No activities found.');
258
+ return;
259
+ }
260
+ const rows = actions.map(a => ({
261
+ Date: new Date(a.date || a.createdAt).toISOString().substring(0, 16),
262
+ Type: a.actionType,
263
+ Company: a.data?.company?.name ?? '',
264
+ Job: (a.data?.job?.title ?? '').substring(0, 40),
265
+ Status: a.data?.toList?.name ?? '',
266
+ }));
267
+ if (listOpts.format === 'json') {
268
+ console.log((0, list_options_1.formatJsonWithFields)(rows, fields));
269
+ }
270
+ else if (listOpts.format === 'csv') {
271
+ console.log((0, list_options_1.formatCsvWithFields)(rows, fields));
272
+ }
273
+ else if (listOpts.format === 'pdf') {
274
+ const buffer = (0, list_options_1.formatPdf)(rows, fields, 'Activities List');
275
+ process.stdout.write(buffer);
276
+ }
277
+ else if (listOpts.format === 'excel') {
278
+ const buffer = await (0, list_options_1.formatExcel)(rows, fields, 'Activities');
279
+ process.stdout.write(buffer);
280
+ }
281
+ else {
282
+ console.log((0, list_options_1.formatTableWithFields)(rows, fields));
283
+ }
284
+ }
285
+ catch (error) {
286
+ console.error('Error:', error instanceof Error ? error.message : error);
287
+ process.exit(1);
288
+ }
289
+ });
290
+ activities
291
+ .command('week-csv')
292
+ .description('Export last 7 days of activity as CSV')
293
+ .argument('<board-id>', 'Board ID')
294
+ .action(async (boardId, options, command) => {
295
+ try {
296
+ const api = await getApi(command.parent?.parent?.opts().token);
297
+ const rows = await api.actions.weekSummary(boardId);
298
+ const lines = ['Date,Action,Company,Job Title,Status,Job URL'];
299
+ for (const r of rows) {
300
+ lines.push([
301
+ r.date,
302
+ r.actionType,
303
+ `"${r.company.replace(/"/g, '""')}"`,
304
+ `"${r.jobTitle.replace(/"/g, '""')}"`,
305
+ r.status,
306
+ r.url,
307
+ ].join(','));
308
+ }
309
+ console.log(lines.join('\n'));
310
+ }
311
+ catch (error) {
312
+ console.error('Error:', error instanceof Error ? error.message : error);
313
+ process.exit(1);
314
+ }
315
+ });
316
+ // ── config ───────────────────────────────────────────────────────────────────
317
+ const config = program.command('config').description('Manage CLI configuration');
318
+ config
319
+ .command('set-token')
320
+ .description('Save API token to config file or keychain')
321
+ .argument('<token>', 'API token to save')
322
+ .option('-k, --keychain', 'Save to macOS Keychain instead of config file')
323
+ .action(async (token, options) => {
324
+ try {
325
+ const location = options.keychain ? 'keychain' : 'config';
326
+ await tokenManager.saveToken(token, location);
327
+ const locationName = options.keychain ? 'macOS Keychain' : '~/.huntr/config.json';
328
+ console.log(`✓ Token saved to ${locationName}`);
329
+ }
330
+ catch (error) {
331
+ console.error('Error:', error instanceof Error ? error.message : error);
332
+ process.exit(1);
333
+ }
334
+ });
335
+ config
336
+ .command('capture-session')
337
+ .description('Capture Clerk session from your browser automatically (recommended)')
338
+ .action(async () => {
339
+ try {
340
+ await (0, capture_session_1.captureSession)();
341
+ }
342
+ catch (error) {
343
+ console.error('Error:', error instanceof Error ? error.message : error);
344
+ process.exit(1);
345
+ }
346
+ });
347
+ config
348
+ .command('check-cdp')
349
+ .description('Check Chrome DevTools + Clerk cookie visibility for session capture')
350
+ .action(async () => {
351
+ try {
352
+ await (0, capture_session_1.checkCdpSession)();
353
+ }
354
+ catch (error) {
355
+ console.error('Error:', error instanceof Error ? error.message : error);
356
+ process.exit(1);
357
+ }
358
+ });
359
+ config
360
+ .command('set-session')
361
+ .description('Save Clerk session cookie for automatic JWT refresh (recommended)')
362
+ .argument('<session-cookie>', 'Value of the __session cookie from your browser')
363
+ .argument('[session-id]', 'Clerk session ID (sess_...) — auto-detected from cookie if omitted')
364
+ .addHelpText('after', `
365
+ How to get your __session cookie:
366
+ 1. Open huntr.co in Chrome and log in
367
+ 2. Open DevTools → Application → Cookies → https://huntr.co
368
+ 3. Find the cookie named __session and copy its Value (the long JWT string)
369
+ 4. Run: huntr config set-session <value>
370
+
371
+ The session ID (sess_...) is extracted automatically from the JWT.
372
+ The session persists for weeks; re-run set-session if you get auth errors.
373
+ `)
374
+ .action(async (sessionCookie, sessionId) => {
375
+ try {
376
+ const mgr = tokenManager.clerkSession;
377
+ // Auto-detect session ID from the JWT payload (sid claim)
378
+ let resolvedSessionId = sessionId;
379
+ if (!resolvedSessionId) {
380
+ const detected = clerk_session_manager_1.ClerkSessionManager.extractSessionId(sessionCookie);
381
+ if (detected) {
382
+ resolvedSessionId = detected;
383
+ console.log(` Session ID detected: ${resolvedSessionId}`);
384
+ }
385
+ else {
386
+ console.error('Could not auto-detect session ID from the __session JWT.\n' +
387
+ 'Find it in the browser console: Clerk.session.id\n' +
388
+ 'Then run: huntr config set-session <cookie> <session-id>');
389
+ process.exit(1);
390
+ }
391
+ }
392
+ // Strip prefix if user pasted "__session=..." prefix
393
+ const rawCookie = sessionCookie.startsWith('__session=')
394
+ ? sessionCookie.slice('__session='.length)
395
+ : sessionCookie;
396
+ await mgr.saveSession(rawCookie, resolvedSessionId);
397
+ // Verify it works immediately
398
+ console.log(' Testing session…');
399
+ try {
400
+ const token = await mgr.getFreshToken();
401
+ console.log(`✓ Session saved and verified (token starts with: ${token.substring(0, 20)}…)`);
402
+ console.log(' Tokens will auto-refresh before each command.');
403
+ }
404
+ catch (err) {
405
+ console.warn(`⚠ Session saved but test refresh failed: ${err instanceof Error ? err.message : err}`);
406
+ console.warn(' Your cookie may be expired. Try extracting it again from the browser.');
407
+ }
408
+ }
409
+ catch (error) {
410
+ console.error('Error:', error instanceof Error ? error.message : error);
411
+ process.exit(1);
412
+ }
413
+ });
414
+ config
415
+ .command('test-session')
416
+ .description('Test the stored Clerk session by fetching a fresh token and calling /me')
417
+ .action(async () => {
418
+ try {
419
+ const mgr = tokenManager.clerkSession;
420
+ if (!(await mgr.hasSession())) {
421
+ console.error('No session stored. Run: huntr config set-session <__session-cookie>');
422
+ process.exit(1);
423
+ }
424
+ process.stdout.write(' Refreshing token from Clerk… ');
425
+ const token = await mgr.getFreshToken();
426
+ console.log(`✓ (${token.substring(0, 20)}…)`);
427
+ process.stdout.write(' Calling Huntr API /me… ');
428
+ const api = new (await Promise.resolve().then(() => __importStar(require('./api/personal')))).HuntrPersonalApi(token);
429
+ const profile = await api.user.getProfile();
430
+ console.log('✓');
431
+ console.log(`\n Logged in as: ${profile.givenName ?? profile.firstName ?? ''} ${profile.familyName ?? profile.lastName ?? ''} <${profile.email}>`);
432
+ console.log(' Session is working correctly. Tokens auto-refresh before each command.');
433
+ }
434
+ catch (error) {
435
+ console.error('\nFailed:', error instanceof Error ? error.message : error);
436
+ process.exit(1);
437
+ }
438
+ });
439
+ config
440
+ .command('show-token')
441
+ .description('Show which authentication sources are configured')
442
+ .action(async () => {
443
+ try {
444
+ const sources = await tokenManager.showTokenSources();
445
+ console.log('\nConfigured authentication sources:');
446
+ console.log(` Environment variable (HUNTR_API_TOKEN): ${sources.env ? '✓ Set' : '✗ Not set'}`);
447
+ console.log(` Clerk session (auto-refresh): ${sources.clerkSession ? '✓ Set' : '✗ Not set'}`);
448
+ console.log(` Config file (~/.huntr/config.json): ${sources.config ? '✓ Set' : '✗ Not set'}`);
449
+ console.log(` macOS Keychain: ${sources.keychain ? '✓ Set' : '✗ Not set'}`);
450
+ if (!sources.env && !sources.clerkSession && !sources.config && !sources.keychain) {
451
+ console.log('\nNo credentials found.');
452
+ console.log('Recommended: huntr config set-session <__session-cookie>');
453
+ console.log('Alternative: huntr config set-token <token> [--keychain]');
454
+ }
455
+ else if (sources.clerkSession) {
456
+ console.log('\n✓ Clerk session active — tokens refresh automatically.');
457
+ }
458
+ }
459
+ catch (error) {
460
+ console.error('Error:', error instanceof Error ? error.message : error);
461
+ process.exit(1);
462
+ }
463
+ });
464
+ config
465
+ .command('clear-token')
466
+ .description('Remove saved API token')
467
+ .option('-k, --keychain', 'Clear from macOS Keychain only')
468
+ .option('-c, --config', 'Clear from config file only')
469
+ .action(async (options) => {
470
+ try {
471
+ let location = 'all';
472
+ if (options.keychain && !options.config)
473
+ location = 'keychain';
474
+ else if (options.config && !options.keychain)
475
+ location = 'config';
476
+ await tokenManager.clearToken(location);
477
+ const message = location === 'all' ? 'all locations'
478
+ : location === 'keychain' ? 'macOS Keychain'
479
+ : 'config file';
480
+ console.log(`✓ Token cleared from ${message}`);
481
+ }
482
+ catch (error) {
483
+ console.error('Error:', error instanceof Error ? error.message : error);
484
+ process.exit(1);
485
+ }
486
+ });
487
+ config
488
+ .command('clear-session')
489
+ .description('Remove saved Clerk session cookie')
490
+ .action(async () => {
491
+ try {
492
+ await tokenManager.clerkSession.clearSession();
493
+ console.log('✓ Clerk session cleared');
494
+ }
495
+ catch (error) {
496
+ console.error('Error:', error instanceof Error ? error.message : error);
497
+ process.exit(1);
498
+ }
499
+ });
500
+ program.parse();
501
+ //# sourceMappingURL=cli.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,10 @@
1
+ #!/usr/bin/env node
2
+ /**
3
+ * Session capture via Chrome DevTools Protocol (CDP).
4
+ * - Connects to a Chrome instance started with --remote-debugging-port.
5
+ * - Reads required Huntr/Clerk cookies from the active huntr.co tab.
6
+ * - Verifies refresh with Clerk and stores session data in macOS Keychain.
7
+ */
8
+ export declare function captureSession(): Promise<void>;
9
+ export declare function checkCdpSession(): Promise<void>;
10
+ //# sourceMappingURL=capture-session.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"capture-session.d.ts","sourceRoot":"","sources":["../../src/commands/capture-session.ts"],"names":[],"mappings":";AACA;;;;;GAKG;AA+CH,wBAAsB,cAAc,IAAI,OAAO,CAAC,IAAI,CAAC,CA+EpD;AAED,wBAAsB,eAAe,IAAI,OAAO,CAAC,IAAI,CAAC,CAsDrD"}