huntr-cli 1.0.9 → 1.2.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.
Files changed (74) hide show
  1. package/README.md +34 -1
  2. package/build.mjs +21 -0
  3. package/dist/cli.js +1576 -442
  4. package/dist/cli.js.map +7 -1
  5. package/docs/DEV-SETUP.md +4 -3
  6. package/package.json +3 -2
  7. package/src/api/client.ts +6 -3
  8. package/src/api/personal/activities.ts +2 -0
  9. package/src/api/personal/boards.ts +8 -1
  10. package/src/api/personal/user.ts +2 -1
  11. package/src/cli.ts +393 -108
  12. package/src/config/clerk-session-manager.ts +3 -1
  13. package/src/config/config-manager.ts +17 -0
  14. package/src/config/token-capture.ts +13 -8
  15. package/tests/api-endpoints.test.ts +32 -0
  16. package/tests/example.test.ts +8 -0
  17. package/dist/api/client.d.ts +0 -14
  18. package/dist/api/client.d.ts.map +0 -1
  19. package/dist/api/client.js +0 -74
  20. package/dist/api/client.js.map +0 -1
  21. package/dist/api/personal/activities.d.ts +0 -20
  22. package/dist/api/personal/activities.d.ts.map +0 -1
  23. package/dist/api/personal/activities.js +0 -50
  24. package/dist/api/personal/activities.js.map +0 -1
  25. package/dist/api/personal/boards.d.ts +0 -9
  26. package/dist/api/personal/boards.d.ts.map +0 -1
  27. package/dist/api/personal/boards.js +0 -16
  28. package/dist/api/personal/boards.js.map +0 -1
  29. package/dist/api/personal/index.d.ts +0 -17
  30. package/dist/api/personal/index.d.ts.map +0 -1
  31. package/dist/api/personal/index.js +0 -37
  32. package/dist/api/personal/index.js.map +0 -1
  33. package/dist/api/personal/jobs.d.ts +0 -13
  34. package/dist/api/personal/jobs.d.ts.map +0 -1
  35. package/dist/api/personal/jobs.js +0 -31
  36. package/dist/api/personal/jobs.js.map +0 -1
  37. package/dist/api/personal/user.d.ts +0 -8
  38. package/dist/api/personal/user.d.ts.map +0 -1
  39. package/dist/api/personal/user.js +0 -13
  40. package/dist/api/personal/user.js.map +0 -1
  41. package/dist/cli.d.ts +0 -3
  42. package/dist/cli.d.ts.map +0 -1
  43. package/dist/commands/capture-session.d.ts +0 -10
  44. package/dist/commands/capture-session.d.ts.map +0 -1
  45. package/dist/commands/capture-session.js +0 -478
  46. package/dist/commands/capture-session.js.map +0 -1
  47. package/dist/config/clerk-session-manager.d.ts +0 -44
  48. package/dist/config/clerk-session-manager.d.ts.map +0 -1
  49. package/dist/config/clerk-session-manager.js +0 -232
  50. package/dist/config/clerk-session-manager.js.map +0 -1
  51. package/dist/config/config-manager.d.ts +0 -15
  52. package/dist/config/config-manager.d.ts.map +0 -1
  53. package/dist/config/config-manager.js +0 -51
  54. package/dist/config/config-manager.js.map +0 -1
  55. package/dist/config/keychain-manager.d.ts +0 -6
  56. package/dist/config/keychain-manager.d.ts.map +0 -1
  57. package/dist/config/keychain-manager.js +0 -37
  58. package/dist/config/keychain-manager.js.map +0 -1
  59. package/dist/config/token-capture.d.ts +0 -11
  60. package/dist/config/token-capture.d.ts.map +0 -1
  61. package/dist/config/token-capture.js +0 -252
  62. package/dist/config/token-capture.js.map +0 -1
  63. package/dist/config/token-manager.d.ts +0 -38
  64. package/dist/config/token-manager.d.ts.map +0 -1
  65. package/dist/config/token-manager.js +0 -153
  66. package/dist/config/token-manager.js.map +0 -1
  67. package/dist/lib/list-options.d.ts +0 -69
  68. package/dist/lib/list-options.d.ts.map +0 -1
  69. package/dist/lib/list-options.js +0 -299
  70. package/dist/lib/list-options.js.map +0 -1
  71. package/dist/types/personal.d.ts +0 -113
  72. package/dist/types/personal.d.ts.map +0 -1
  73. package/dist/types/personal.js +0 -4
  74. package/dist/types/personal.js.map +0 -1
@@ -0,0 +1,32 @@
1
+ import { describe, it, expect } from 'vitest';
2
+ import { PersonalBoardsApi } from '../src/api/personal/boards';
3
+ import { PersonalUserApi } from '../src/api/personal/user';
4
+
5
+ class FakeClient {
6
+ public lastPath: string | null = null;
7
+ async get<T>(path: string): Promise<any> {
8
+ this.lastPath = path;
9
+ // Return shapes expected by parsers
10
+ if (path === '/user/boards') return [{ id: 'b1', _id: 'b1', name: 'Board', createdAt: new Date().toISOString() }];
11
+ if (path === '/user') return { id: 'u1', email: 'user@example.com', createdAt: new Date().toISOString() };
12
+ return {};
13
+ }
14
+ }
15
+
16
+ describe('API endpoints', () => {
17
+ it('uses /api/user/boards for boards list', async () => {
18
+ const client = new FakeClient() as any;
19
+ const api = new PersonalBoardsApi(client);
20
+ const boards = await api.list();
21
+ expect(boards.length).toBeGreaterThan(0);
22
+ expect((client as any).lastPath).toBe('/user/boards');
23
+ });
24
+
25
+ it('uses /api/user for profile', async () => {
26
+ const client = new FakeClient() as any;
27
+ const api = new PersonalUserApi(client);
28
+ const user = await api.getProfile();
29
+ expect(user.email).toBe('user@example.com');
30
+ expect((client as any).lastPath).toBe('/user');
31
+ });
32
+ });
@@ -86,6 +86,14 @@ describe('huntr-cli Workflow Tests', () => {
86
86
  });
87
87
  });
88
88
 
89
+ describe('Jobs Fields Helper', () => {
90
+ it('documents that jobs fields are discoverable', () => {
91
+ const available = ['ID', 'Title', 'URL', 'Created'];
92
+ expect(available).toContain('ID');
93
+ expect(available).toContain('Title');
94
+ });
95
+ });
96
+
89
97
  describe('Output Formatting', () => {
90
98
  it('should support field selection with --fields', () => {
91
99
  // Example: huntr boards list --fields ID,Name
@@ -1,14 +0,0 @@
1
- /** A static token string OR an async function that returns a fresh token. */
2
- export type TokenProvider = string | (() => Promise<string>);
3
- export declare class HuntrApiClient {
4
- private axiosInstance;
5
- private tokenProvider;
6
- constructor(tokenProvider: TokenProvider, baseURL?: string);
7
- get<T>(endpoint: string, params?: Record<string, any>): Promise<T>;
8
- post<T>(endpoint: string, data?: any): Promise<T>;
9
- put<T>(endpoint: string, data?: any): Promise<T>;
10
- delete<T>(endpoint: string): Promise<T>;
11
- paginate<T>(endpoint: string, params?: Record<string, any>, limit?: number): AsyncGenerator<T[], void, undefined>;
12
- }
13
- export declare const createClient: (tokenProvider: TokenProvider, baseURL?: string) => HuntrApiClient;
14
- //# sourceMappingURL=client.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../src/api/client.ts"],"names":[],"mappings":"AAMA,6EAA6E;AAC7E,MAAM,MAAM,aAAa,GAAG,MAAM,GAAG,CAAC,MAAM,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC;AAE7D,qBAAa,cAAc;IACzB,OAAO,CAAC,aAAa,CAAgB;IACrC,OAAO,CAAC,aAAa,CAAwB;gBAEjC,aAAa,EAAE,aAAa,EAAE,OAAO,GAAE,MAAmC;IAmChF,GAAG,CAAC,CAAC,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC;IAKlE,IAAI,CAAC,CAAC,EAAE,QAAQ,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,GAAG,GAAG,OAAO,CAAC,CAAC,CAAC;IAKjD,GAAG,CAAC,CAAC,EAAE,QAAQ,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,GAAG,GAAG,OAAO,CAAC,CAAC,CAAC;IAKhD,MAAM,CAAC,CAAC,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,CAAC,CAAC;IAKtC,QAAQ,CAAC,CAAC,EACf,QAAQ,EAAE,MAAM,EAChB,MAAM,GAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAM,EAChC,KAAK,GAAE,MAAY,GAClB,cAAc,CAAC,CAAC,EAAE,EAAE,IAAI,EAAE,SAAS,CAAC;CAWxC;AAED,eAAO,MAAM,YAAY,GAAI,eAAe,aAAa,EAAE,UAAU,MAAM,KAAG,cAE7E,CAAC"}
@@ -1,74 +0,0 @@
1
- "use strict";
2
- var __importDefault = (this && this.__importDefault) || function (mod) {
3
- return (mod && mod.__esModule) ? mod : { "default": mod };
4
- };
5
- Object.defineProperty(exports, "__esModule", { value: true });
6
- exports.createClient = exports.HuntrApiClient = void 0;
7
- const axios_1 = __importDefault(require("axios"));
8
- const dotenv_1 = __importDefault(require("dotenv"));
9
- // Load .env file silently (debug: false suppresses info messages)
10
- dotenv_1.default.config({ debug: false });
11
- class HuntrApiClient {
12
- constructor(tokenProvider, baseURL = 'https://api.huntr.co/org') {
13
- this.tokenProvider =
14
- typeof tokenProvider === 'string'
15
- ? async () => tokenProvider
16
- : tokenProvider;
17
- this.axiosInstance = axios_1.default.create({ baseURL });
18
- // Inject a fresh Authorization header before every request
19
- this.axiosInstance.interceptors.request.use(async (config) => {
20
- const token = await this.tokenProvider();
21
- if (!token)
22
- throw new Error('No API token available.');
23
- config.headers = config.headers ?? {};
24
- config.headers['Authorization'] = `Bearer ${token}`;
25
- config.headers['Content-Type'] = 'application/json';
26
- return config;
27
- });
28
- this.axiosInstance.interceptors.response.use((response) => response, (error) => {
29
- if (error.response) {
30
- const status = error.response.status;
31
- const apiError = error.response.data;
32
- const message = apiError?.error?.message ?? apiError?.message ?? 'API request failed';
33
- throw new Error(`HTTP ${status}: ${message}`);
34
- }
35
- if (error.request) {
36
- throw new Error('No response from API - check your network connection');
37
- }
38
- throw error;
39
- });
40
- }
41
- async get(endpoint, params) {
42
- const response = await this.axiosInstance.get(endpoint, { params });
43
- return response.data;
44
- }
45
- async post(endpoint, data) {
46
- const response = await this.axiosInstance.post(endpoint, data);
47
- return response.data;
48
- }
49
- async put(endpoint, data) {
50
- const response = await this.axiosInstance.put(endpoint, data);
51
- return response.data;
52
- }
53
- async delete(endpoint) {
54
- const response = await this.axiosInstance.delete(endpoint);
55
- return response.data;
56
- }
57
- async *paginate(endpoint, params = {}, limit = 100) {
58
- let next = undefined;
59
- do {
60
- const queryParams = { ...params, limit };
61
- if (next)
62
- queryParams.next = next;
63
- const response = await this.get(endpoint, queryParams);
64
- yield response.data;
65
- next = response.next;
66
- } while (next);
67
- }
68
- }
69
- exports.HuntrApiClient = HuntrApiClient;
70
- const createClient = (tokenProvider, baseURL) => {
71
- return new HuntrApiClient(tokenProvider, baseURL);
72
- };
73
- exports.createClient = createClient;
74
- //# sourceMappingURL=client.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"client.js","sourceRoot":"","sources":["../../src/api/client.ts"],"names":[],"mappings":"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"}
@@ -1,20 +0,0 @@
1
- import { HuntrApiClient } from '../client';
2
- import { PersonalAction } from '../../types/personal';
3
- export declare class PersonalActionsApi {
4
- private client;
5
- constructor(client: HuntrApiClient);
6
- listByBoard(boardId: string): Promise<Record<string, PersonalAction>>;
7
- listByBoardFlat(boardId: string, opts?: {
8
- since?: Date;
9
- types?: string[];
10
- }): Promise<PersonalAction[]>;
11
- weekSummary(boardId: string): Promise<Array<{
12
- date: string;
13
- actionType: string;
14
- company: string;
15
- jobTitle: string;
16
- status: string;
17
- url: string;
18
- }>>;
19
- }
20
- //# sourceMappingURL=activities.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"activities.d.ts","sourceRoot":"","sources":["../../../src/api/personal/activities.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,WAAW,CAAC;AAC3C,OAAO,EAAE,cAAc,EAAqC,MAAM,sBAAsB,CAAC;AAEzF,qBAAa,kBAAkB;IACjB,OAAO,CAAC,MAAM;gBAAN,MAAM,EAAE,cAAc;IAGpC,WAAW,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,cAAc,CAAC,CAAC;IAKrE,eAAe,CACnB,OAAO,EAAE,MAAM,EACf,IAAI,CAAC,EAAE;QAAE,KAAK,CAAC,EAAE,IAAI,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,EAAE,CAAA;KAAE,GACxC,OAAO,CAAC,cAAc,EAAE,CAAC;IAmBtB,WAAW,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,KAAK,CAAC;QAChD,IAAI,EAAE,MAAM,CAAC;QACb,UAAU,EAAE,MAAM,CAAC;QACnB,OAAO,EAAE,MAAM,CAAC;QAChB,QAAQ,EAAE,MAAM,CAAC;QACjB,MAAM,EAAE,MAAM,CAAC;QACf,GAAG,EAAE,MAAM,CAAC;KACb,CAAC,CAAC;CAwBJ"}
@@ -1,50 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.PersonalActionsApi = void 0;
4
- class PersonalActionsApi {
5
- constructor(client) {
6
- this.client = client;
7
- }
8
- // Returns object map { [actionId]: PersonalAction }
9
- async listByBoard(boardId) {
10
- return this.client.get(`/board/${boardId}/actions`);
11
- }
12
- // Returns flattened array sorted by date desc, optionally filtered by action types
13
- async listByBoardFlat(boardId, opts) {
14
- const raw = await this.listByBoard(boardId);
15
- let actions = Object.values(raw);
16
- if (opts?.since) {
17
- const cutoff = opts.since.getTime();
18
- actions = actions.filter(a => new Date(a.date || a.createdAt).getTime() >= cutoff);
19
- }
20
- if (opts?.types && opts.types.length > 0) {
21
- actions = actions.filter(a => opts.types.includes(a.actionType));
22
- }
23
- return actions.sort((a, b) => new Date(b.date || b.createdAt).getTime() - new Date(a.date || a.createdAt).getTime());
24
- }
25
- // Joins actions with job data to produce enriched rows
26
- async weekSummary(boardId) {
27
- const since = new Date(Date.now() - 7 * 24 * 60 * 60 * 1000);
28
- const [actions, jobsResponse] = await Promise.all([
29
- this.listByBoardFlat(boardId, { since }),
30
- this.client.get(`/board/${boardId}/jobs`),
31
- ]);
32
- const jobs = jobsResponse.jobs;
33
- return actions
34
- .filter(a => a.actionType !== 'ACTIVITY_CREATED')
35
- .map(a => {
36
- const jobId = a.data?._job;
37
- const job = jobId ? jobs[jobId] : undefined;
38
- return {
39
- date: new Date(a.date || a.createdAt).toISOString().substring(0, 16),
40
- actionType: a.actionType,
41
- company: a.data?.company?.name ?? '',
42
- jobTitle: a.data?.job?.title ?? '',
43
- status: a.data?.toList?.name ?? '',
44
- url: job?.url ?? '',
45
- };
46
- });
47
- }
48
- }
49
- exports.PersonalActionsApi = PersonalActionsApi;
50
- //# sourceMappingURL=activities.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"activities.js","sourceRoot":"","sources":["../../../src/api/personal/activities.ts"],"names":[],"mappings":"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"}
@@ -1,9 +0,0 @@
1
- import { HuntrApiClient } from '../client';
2
- import { Board } from '../../types/personal';
3
- export declare class PersonalBoardsApi {
4
- private client;
5
- constructor(client: HuntrApiClient);
6
- list(): Promise<Board[]>;
7
- get(boardId: string): Promise<Board>;
8
- }
9
- //# sourceMappingURL=boards.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"boards.d.ts","sourceRoot":"","sources":["../../../src/api/personal/boards.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,WAAW,CAAC;AAC3C,OAAO,EAAE,KAAK,EAAE,MAAM,sBAAsB,CAAC;AAE7C,qBAAa,iBAAiB;IAChB,OAAO,CAAC,MAAM;gBAAN,MAAM,EAAE,cAAc;IAEpC,IAAI,IAAI,OAAO,CAAC,KAAK,EAAE,CAAC;IAIxB,GAAG,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,KAAK,CAAC;CAG3C"}
@@ -1,16 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.PersonalBoardsApi = void 0;
4
- class PersonalBoardsApi {
5
- constructor(client) {
6
- this.client = client;
7
- }
8
- async list() {
9
- return this.client.get('/boards');
10
- }
11
- async get(boardId) {
12
- return this.client.get(`/boards/${boardId}`);
13
- }
14
- }
15
- exports.PersonalBoardsApi = PersonalBoardsApi;
16
- //# sourceMappingURL=boards.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"boards.js","sourceRoot":"","sources":["../../../src/api/personal/boards.ts"],"names":[],"mappings":";;;AAGA,MAAa,iBAAiB;IAC5B,YAAoB,MAAsB;QAAtB,WAAM,GAAN,MAAM,CAAgB;IAAG,CAAC;IAE9C,KAAK,CAAC,IAAI;QACR,OAAO,IAAI,CAAC,MAAM,CAAC,GAAG,CAAU,SAAS,CAAC,CAAC;IAC7C,CAAC;IAED,KAAK,CAAC,GAAG,CAAC,OAAe;QACvB,OAAO,IAAI,CAAC,MAAM,CAAC,GAAG,CAAQ,WAAW,OAAO,EAAE,CAAC,CAAC;IACtD,CAAC;CACF;AAVD,8CAUC"}
@@ -1,17 +0,0 @@
1
- import { TokenProvider } from '../client';
2
- import { PersonalUserApi } from './user';
3
- import { PersonalBoardsApi } from './boards';
4
- import { PersonalJobsApi } from './jobs';
5
- import { PersonalActionsApi } from './activities';
6
- export declare class HuntrPersonalApi {
7
- user: PersonalUserApi;
8
- boards: PersonalBoardsApi;
9
- jobs: PersonalJobsApi;
10
- actions: PersonalActionsApi;
11
- constructor(tokenProvider: TokenProvider);
12
- }
13
- export * from './user';
14
- export * from './boards';
15
- export * from './jobs';
16
- export * from './activities';
17
- //# sourceMappingURL=index.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/api/personal/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAgB,aAAa,EAAE,MAAM,WAAW,CAAC;AACxD,OAAO,EAAE,eAAe,EAAE,MAAM,QAAQ,CAAC;AACzC,OAAO,EAAE,iBAAiB,EAAE,MAAM,UAAU,CAAC;AAC7C,OAAO,EAAE,eAAe,EAAE,MAAM,QAAQ,CAAC;AACzC,OAAO,EAAE,kBAAkB,EAAE,MAAM,cAAc,CAAC;AAElD,qBAAa,gBAAgB;IACpB,IAAI,EAAE,eAAe,CAAC;IACtB,MAAM,EAAE,iBAAiB,CAAC;IAC1B,IAAI,EAAE,eAAe,CAAC;IACtB,OAAO,EAAE,kBAAkB,CAAC;gBAEvB,aAAa,EAAE,aAAa;CAOzC;AAED,cAAc,QAAQ,CAAC;AACvB,cAAc,UAAU,CAAC;AACzB,cAAc,QAAQ,CAAC;AACvB,cAAc,cAAc,CAAC"}
@@ -1,37 +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 __exportStar = (this && this.__exportStar) || function(m, exports) {
14
- for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
- };
16
- Object.defineProperty(exports, "__esModule", { value: true });
17
- exports.HuntrPersonalApi = void 0;
18
- const client_1 = require("../client");
19
- const user_1 = require("./user");
20
- const boards_1 = require("./boards");
21
- const jobs_1 = require("./jobs");
22
- const activities_1 = require("./activities");
23
- class HuntrPersonalApi {
24
- constructor(tokenProvider) {
25
- const client = (0, client_1.createClient)(tokenProvider, 'https://api.huntr.co/api');
26
- this.user = new user_1.PersonalUserApi(client);
27
- this.boards = new boards_1.PersonalBoardsApi(client);
28
- this.jobs = new jobs_1.PersonalJobsApi(client);
29
- this.actions = new activities_1.PersonalActionsApi(client);
30
- }
31
- }
32
- exports.HuntrPersonalApi = HuntrPersonalApi;
33
- __exportStar(require("./user"), exports);
34
- __exportStar(require("./boards"), exports);
35
- __exportStar(require("./jobs"), exports);
36
- __exportStar(require("./activities"), exports);
37
- //# sourceMappingURL=index.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/api/personal/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;AAAA,sCAAwD;AACxD,iCAAyC;AACzC,qCAA6C;AAC7C,iCAAyC;AACzC,6CAAkD;AAElD,MAAa,gBAAgB;IAM3B,YAAY,aAA4B;QACtC,MAAM,MAAM,GAAG,IAAA,qBAAY,EAAC,aAAa,EAAE,0BAA0B,CAAC,CAAC;QACvE,IAAI,CAAC,IAAI,GAAG,IAAI,sBAAe,CAAC,MAAM,CAAC,CAAC;QACxC,IAAI,CAAC,MAAM,GAAG,IAAI,0BAAiB,CAAC,MAAM,CAAC,CAAC;QAC5C,IAAI,CAAC,IAAI,GAAG,IAAI,sBAAe,CAAC,MAAM,CAAC,CAAC;QACxC,IAAI,CAAC,OAAO,GAAG,IAAI,+BAAkB,CAAC,MAAM,CAAC,CAAC;IAChD,CAAC;CACF;AAbD,4CAaC;AAED,yCAAuB;AACvB,2CAAyB;AACzB,yCAAuB;AACvB,+CAA6B"}
@@ -1,13 +0,0 @@
1
- import { HuntrApiClient } from '../client';
2
- import { PersonalJob, PersonalJobsResponse } from '../../types/personal';
3
- export declare class PersonalJobsApi {
4
- private client;
5
- constructor(client: HuntrApiClient);
6
- listByBoard(boardId: string): Promise<PersonalJobsResponse>;
7
- listByBoardFlat(boardId: string): Promise<PersonalJob[]>;
8
- get(boardId: string, jobId: string): Promise<PersonalJob>;
9
- create(boardId: string, job: Partial<PersonalJob>): Promise<PersonalJob>;
10
- update(boardId: string, jobId: string, updates: Partial<PersonalJob>): Promise<PersonalJob>;
11
- delete(boardId: string, jobId: string): Promise<void>;
12
- }
13
- //# sourceMappingURL=jobs.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"jobs.d.ts","sourceRoot":"","sources":["../../../src/api/personal/jobs.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,WAAW,CAAC;AAC3C,OAAO,EAAE,WAAW,EAAE,oBAAoB,EAAE,MAAM,sBAAsB,CAAC;AAEzE,qBAAa,eAAe;IACd,OAAO,CAAC,MAAM;gBAAN,MAAM,EAAE,cAAc;IAGpC,WAAW,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,oBAAoB,CAAC;IAK3D,eAAe,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,EAAE,CAAC;IAKxD,GAAG,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,CAAC;IAIzD,MAAM,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE,OAAO,CAAC,WAAW,CAAC,GAAG,OAAO,CAAC,WAAW,CAAC;IAIxE,MAAM,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,CAAC,WAAW,CAAC,GAAG,OAAO,CAAC,WAAW,CAAC;IAI3F,MAAM,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;CAG5D"}
@@ -1,31 +0,0 @@
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
@@ -1 +0,0 @@
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"}
@@ -1,8 +0,0 @@
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
@@ -1 +0,0 @@
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"}
@@ -1,13 +0,0 @@
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
@@ -1 +0,0 @@
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 DELETED
@@ -1,3 +0,0 @@
1
- #!/usr/bin/env node
2
- export {};
3
- //# sourceMappingURL=cli.d.ts.map
package/dist/cli.d.ts.map DELETED
@@ -1 +0,0 @@
1
- {"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":""}
@@ -1,10 +0,0 @@
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
@@ -1 +0,0 @@
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"}