linkedin-automation-cli 1.0.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/.env.example +12 -0
- package/.github/workflows/ci.yml +66 -0
- package/.github/workflows/publish.yml +48 -0
- package/.husky/pre-commit +6 -0
- package/.prettierignore +4 -0
- package/.prettierrc +10 -0
- package/AGENTS.md +294 -0
- package/CHANGELOG.md +40 -0
- package/GIT_RELEASE.md +167 -0
- package/LICENSE +21 -0
- package/Makefile +30 -0
- package/NPM_PUBLISHING.md +230 -0
- package/PYEOF +0 -0
- package/README.md +295 -0
- package/TESTING-GUIDE.md +151 -0
- package/cmd/linkedin/main.go +9 -0
- package/dist/agent/action-executor.d.ts +81 -0
- package/dist/agent/action-executor.d.ts.map +1 -0
- package/dist/agent/action-executor.js +170 -0
- package/dist/agent/action-executor.js.map +1 -0
- package/dist/agent/action-executor.test.d.ts +2 -0
- package/dist/agent/action-executor.test.d.ts.map +1 -0
- package/dist/agent/action-executor.test.js +366 -0
- package/dist/agent/action-executor.test.js.map +1 -0
- package/dist/agent/claude-client.d.ts +74 -0
- package/dist/agent/claude-client.d.ts.map +1 -0
- package/dist/agent/claude-client.js +314 -0
- package/dist/agent/claude-client.js.map +1 -0
- package/dist/agent/claude-client.test.d.ts +2 -0
- package/dist/agent/claude-client.test.d.ts.map +1 -0
- package/dist/agent/claude-client.test.js +590 -0
- package/dist/agent/claude-client.test.js.map +1 -0
- package/dist/agent/dom-extractor.d.ts +50 -0
- package/dist/agent/dom-extractor.d.ts.map +1 -0
- package/dist/agent/dom-extractor.js +374 -0
- package/dist/agent/dom-extractor.js.map +1 -0
- package/dist/agent/dom-extractor.test.d.ts +7 -0
- package/dist/agent/dom-extractor.test.d.ts.map +1 -0
- package/dist/agent/dom-extractor.test.js +504 -0
- package/dist/agent/dom-extractor.test.js.map +1 -0
- package/dist/agent/extension-client.d.ts +75 -0
- package/dist/agent/extension-client.d.ts.map +1 -0
- package/dist/agent/extension-client.js +245 -0
- package/dist/agent/extension-client.js.map +1 -0
- package/dist/agent/index.d.ts +8 -0
- package/dist/agent/index.d.ts.map +1 -0
- package/dist/agent/index.js +16 -0
- package/dist/agent/index.js.map +1 -0
- package/dist/agent/page-agent.d.ts +76 -0
- package/dist/agent/page-agent.d.ts.map +1 -0
- package/dist/agent/page-agent.js +236 -0
- package/dist/agent/page-agent.js.map +1 -0
- package/dist/agent/types.d.ts +236 -0
- package/dist/agent/types.d.ts.map +1 -0
- package/dist/agent/types.js +37 -0
- package/dist/agent/types.js.map +1 -0
- package/dist/cli/agent-commands.d.ts +3 -0
- package/dist/cli/agent-commands.d.ts.map +1 -0
- package/dist/cli/agent-commands.js +250 -0
- package/dist/cli/agent-commands.js.map +1 -0
- package/dist/cli/auth.d.ts +3 -0
- package/dist/cli/auth.d.ts.map +1 -0
- package/dist/cli/auth.js +288 -0
- package/dist/cli/auth.js.map +1 -0
- package/dist/cli/company.d.ts +3 -0
- package/dist/cli/company.d.ts.map +1 -0
- package/dist/cli/company.js +55 -0
- package/dist/cli/company.js.map +1 -0
- package/dist/cli/connection.d.ts +3 -0
- package/dist/cli/connection.d.ts.map +1 -0
- package/dist/cli/connection.js +79 -0
- package/dist/cli/connection.js.map +1 -0
- package/dist/cli/index.d.ts +7 -0
- package/dist/cli/index.d.ts.map +1 -0
- package/dist/cli/index.js +17 -0
- package/dist/cli/index.js.map +1 -0
- package/dist/cli/messages.d.ts +3 -0
- package/dist/cli/messages.d.ts.map +1 -0
- package/dist/cli/messages.js +268 -0
- package/dist/cli/messages.js.map +1 -0
- package/dist/cli/profile.d.ts +3 -0
- package/dist/cli/profile.d.ts.map +1 -0
- package/dist/cli/profile.js +81 -0
- package/dist/cli/profile.js.map +1 -0
- package/dist/cli/profile.test.d.ts +2 -0
- package/dist/cli/profile.test.d.ts.map +1 -0
- package/dist/cli/profile.test.js +15 -0
- package/dist/cli/profile.test.js.map +1 -0
- package/dist/cli/reply.d.ts +3 -0
- package/dist/cli/reply.d.ts.map +1 -0
- package/dist/cli/reply.js +129 -0
- package/dist/cli/reply.js.map +1 -0
- package/dist/core/audit.d.ts +17 -0
- package/dist/core/audit.d.ts.map +1 -0
- package/dist/core/audit.js +121 -0
- package/dist/core/audit.js.map +1 -0
- package/dist/core/audit.test.d.ts +2 -0
- package/dist/core/audit.test.d.ts.map +1 -0
- package/dist/core/audit.test.js +142 -0
- package/dist/core/audit.test.js.map +1 -0
- package/dist/core/browser-cookies.d.ts +19 -0
- package/dist/core/browser-cookies.d.ts.map +1 -0
- package/dist/core/browser-cookies.js +181 -0
- package/dist/core/browser-cookies.js.map +1 -0
- package/dist/core/browser.d.ts +50 -0
- package/dist/core/browser.d.ts.map +1 -0
- package/dist/core/browser.js +318 -0
- package/dist/core/browser.js.map +1 -0
- package/dist/core/config.d.ts +20 -0
- package/dist/core/config.d.ts.map +1 -0
- package/dist/core/config.js +103 -0
- package/dist/core/config.js.map +1 -0
- package/dist/core/config.test.d.ts +2 -0
- package/dist/core/config.test.d.ts.map +1 -0
- package/dist/core/config.test.js +111 -0
- package/dist/core/config.test.js.map +1 -0
- package/dist/core/storage.d.ts +19 -0
- package/dist/core/storage.d.ts.map +1 -0
- package/dist/core/storage.js +124 -0
- package/dist/core/storage.js.map +1 -0
- package/dist/core/storage.test.d.ts +2 -0
- package/dist/core/storage.test.d.ts.map +1 -0
- package/dist/core/storage.test.js +142 -0
- package/dist/core/storage.test.js.map +1 -0
- package/dist/index.d.ts +3 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +63 -0
- package/dist/index.js.map +1 -0
- package/dist/linkedin/auth.d.ts +22 -0
- package/dist/linkedin/auth.d.ts.map +1 -0
- package/dist/linkedin/auth.js +167 -0
- package/dist/linkedin/auth.js.map +1 -0
- package/dist/linkedin/company-extractor.d.ts +36 -0
- package/dist/linkedin/company-extractor.d.ts.map +1 -0
- package/dist/linkedin/company-extractor.js +211 -0
- package/dist/linkedin/company-extractor.js.map +1 -0
- package/dist/linkedin/company-extractor.test.d.ts +2 -0
- package/dist/linkedin/company-extractor.test.d.ts.map +1 -0
- package/dist/linkedin/company-extractor.test.js +52 -0
- package/dist/linkedin/company-extractor.test.js.map +1 -0
- package/dist/linkedin/connector.d.ts +45 -0
- package/dist/linkedin/connector.d.ts.map +1 -0
- package/dist/linkedin/connector.js +245 -0
- package/dist/linkedin/connector.js.map +1 -0
- package/dist/linkedin/message-sender.d.ts +32 -0
- package/dist/linkedin/message-sender.d.ts.map +1 -0
- package/dist/linkedin/message-sender.js +112 -0
- package/dist/linkedin/message-sender.js.map +1 -0
- package/dist/linkedin/messages.d.ts +78 -0
- package/dist/linkedin/messages.d.ts.map +1 -0
- package/dist/linkedin/messages.js +745 -0
- package/dist/linkedin/messages.js.map +1 -0
- package/dist/linkedin/profile.d.ts +37 -0
- package/dist/linkedin/profile.d.ts.map +1 -0
- package/dist/linkedin/profile.js +268 -0
- package/dist/linkedin/profile.js.map +1 -0
- package/dist/linkedin/profile.test.d.ts +2 -0
- package/dist/linkedin/profile.test.d.ts.map +1 -0
- package/dist/linkedin/profile.test.js +68 -0
- package/dist/linkedin/profile.test.js.map +1 -0
- package/dist/linkedin/reply.d.ts +21 -0
- package/dist/linkedin/reply.d.ts.map +1 -0
- package/dist/linkedin/reply.js +76 -0
- package/dist/linkedin/reply.js.map +1 -0
- package/dist/linkedin/selector-engine.d.ts +69 -0
- package/dist/linkedin/selector-engine.d.ts.map +1 -0
- package/dist/linkedin/selector-engine.js +339 -0
- package/dist/linkedin/selector-engine.js.map +1 -0
- package/dist/linkedin/selector-engine.test.d.ts +2 -0
- package/dist/linkedin/selector-engine.test.d.ts.map +1 -0
- package/dist/linkedin/selector-engine.test.js +135 -0
- package/dist/linkedin/selector-engine.test.js.map +1 -0
- package/dist/linkedin/selectors.d.ts +65 -0
- package/dist/linkedin/selectors.d.ts.map +1 -0
- package/dist/linkedin/selectors.js +261 -0
- package/dist/linkedin/selectors.js.map +1 -0
- package/dist/templates/engine.d.ts +37 -0
- package/dist/templates/engine.d.ts.map +1 -0
- package/dist/templates/engine.js +215 -0
- package/dist/templates/engine.js.map +1 -0
- package/dist/templates/engine.test.d.ts +2 -0
- package/dist/templates/engine.test.d.ts.map +1 -0
- package/dist/templates/engine.test.js +212 -0
- package/dist/templates/engine.test.js.map +1 -0
- package/dist/templates/index.d.ts +2 -0
- package/dist/templates/index.d.ts.map +1 -0
- package/dist/templates/index.js +7 -0
- package/dist/templates/index.js.map +1 -0
- package/dist/types/index.d.ts +113 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/types/index.js +3 -0
- package/dist/types/index.js.map +1 -0
- package/dist/types/index.test.d.ts +2 -0
- package/dist/types/index.test.d.ts.map +1 -0
- package/dist/types/index.test.js +90 -0
- package/dist/types/index.test.js.map +1 -0
- package/dist/utils/paths.d.ts +8 -0
- package/dist/utils/paths.d.ts.map +1 -0
- package/dist/utils/paths.js +68 -0
- package/dist/utils/paths.js.map +1 -0
- package/dist/utils/rate-limiter.d.ts +22 -0
- package/dist/utils/rate-limiter.d.ts.map +1 -0
- package/dist/utils/rate-limiter.js +57 -0
- package/dist/utils/rate-limiter.js.map +1 -0
- package/dist/utils/retry.d.ts +18 -0
- package/dist/utils/retry.d.ts.map +1 -0
- package/dist/utils/retry.js +49 -0
- package/dist/utils/retry.js.map +1 -0
- package/docs/connection-command.md +52 -0
- package/docs/plans/2025-03-03-linkedin-cli-design.md +280 -0
- package/docs/plans/2025-03-03-linkedin-cli-implementation-plan.md +2087 -0
- package/docs/plans/2025-03-03-linkedin-cli-implementation.md +2420 -0
- package/docs/plans/2026-02-19-linkedin-connection-feature.md +596 -0
- package/docs/plans/2026-02-28-messages-send-feature.md +480 -0
- package/docs/plans/2026-02-28-messages-show-design.md +243 -0
- package/docs/plans/2026-03-03-linkedin-cli-oss-publishing-design.md +394 -0
- package/docs/plans/2026-03-03-linkedin-cli-oss-publishing-plan.md +1592 -0
- package/docs/superpowers/plans/2026-03-13-linkedin-automation-resilience-migration.md +425 -0
- package/docs/superpowers/plans/2026-03-13-playwright-fara-migration.md +1112 -0
- package/docs/superpowers/plans/2026-03-14-page-agent-plan.md +1598 -0
- package/docs/superpowers/plans/2026-03-15-company-profile-extraction.md +591 -0
- package/docs/superpowers/plans/2026-03-15-profile-extraction-plan.md +943 -0
- package/docs/superpowers/specs/2026-03-14-company-profile-extraction-design.md +371 -0
- package/docs/superpowers/specs/2026-03-14-page-agent-design.md +385 -0
- package/docs/superpowers/specs/2026-03-15-profile-extraction-design.md +409 -0
- package/eslint.config.mjs +58 -0
- package/go.mod +9 -0
- package/go.sum +10 -0
- package/import-cookies.js +376 -0
- package/internal/cmd/actions.go +123 -0
- package/internal/cmd/auth.go +108 -0
- package/internal/cmd/connect.go +42 -0
- package/internal/cmd/message.go +44 -0
- package/internal/cmd/people.go +454 -0
- package/internal/cmd/profiles.go +121 -0
- package/internal/cmd/root.go +89 -0
- package/internal/cmd/sequence.go +192 -0
- package/internal/config/config.go +187 -0
- package/internal/config/config_test.go +121 -0
- package/internal/config/profile.go +65 -0
- package/internal/linkedin/navigator.go +195 -0
- package/internal/linkedin/selectors.go +39 -0
- package/internal/linkedin/validator.go +69 -0
- package/internal/pinchtab/client.go +183 -0
- package/internal/pinchtab/client_test.go +67 -0
- package/internal/pinchtab/types.go +50 -0
- package/internal/ratelimit/limiter.go +115 -0
- package/internal/ratelimit/limits.go +32 -0
- package/package.json +67 -0
- package/release.sh +66 -0
- package/scripts/debug-linkedin.js +156 -0
- package/scripts/debug-login.js +193 -0
- package/scripts/extract-from-edge.js +96 -0
- package/scripts/import-cookies.js +101 -0
- package/scripts/poc-show-data.js +205 -0
- package/scripts/proof-of-access.js +87 -0
- package/scripts/prove-connection.js +110 -0
- package/scripts/show-linkedin-data.js +173 -0
- package/src/agent/action-executor.test.ts +464 -0
- package/src/agent/action-executor.ts +203 -0
- package/src/agent/claude-client.test.ts +707 -0
- package/src/agent/claude-client.ts +422 -0
- package/src/agent/dom-extractor.test.ts +574 -0
- package/src/agent/dom-extractor.ts +437 -0
- package/src/agent/extension-client.ts +306 -0
- package/src/agent/index.ts +28 -0
- package/src/agent/page-agent.ts +292 -0
- package/src/agent/types.ts +288 -0
- package/src/cli/agent-commands.ts +274 -0
- package/src/cli/auth.ts +343 -0
- package/src/cli/company.ts +66 -0
- package/src/cli/connection.ts +89 -0
- package/src/cli/index.ts +7 -0
- package/src/cli/messages.ts +338 -0
- package/src/cli/profile.test.ts +14 -0
- package/src/cli/profile.ts +95 -0
- package/src/cli/reply.ts +110 -0
- package/src/core/audit.test.ts +134 -0
- package/src/core/audit.ts +98 -0
- package/src/core/browser-cookies.ts +203 -0
- package/src/core/browser.ts +304 -0
- package/src/core/config.test.ts +90 -0
- package/src/core/config.ts +81 -0
- package/src/core/storage.test.ts +129 -0
- package/src/core/storage.ts +100 -0
- package/src/index.ts +70 -0
- package/src/linkedin/auth.ts +218 -0
- package/src/linkedin/company-extractor.test.ts +58 -0
- package/src/linkedin/company-extractor.ts +222 -0
- package/src/linkedin/connector.ts +336 -0
- package/src/linkedin/message-sender.ts +141 -0
- package/src/linkedin/messages.ts +894 -0
- package/src/linkedin/profile.test.ts +79 -0
- package/src/linkedin/profile.ts +314 -0
- package/src/linkedin/reply.ts +96 -0
- package/src/linkedin/selector-engine.test.ts +167 -0
- package/src/linkedin/selector-engine.ts +393 -0
- package/src/linkedin/selectors.ts +268 -0
- package/src/templates/defaults/followup.txt +14 -0
- package/src/templates/defaults/meeting.txt +16 -0
- package/src/templates/defaults/welcome.txt +14 -0
- package/src/templates/engine.test.ts +228 -0
- package/src/templates/engine.ts +208 -0
- package/src/templates/index.ts +1 -0
- package/src/types/index.test.ts +94 -0
- package/src/types/index.ts +143 -0
- package/src/types/sql.js.d.ts +23 -0
- package/src/utils/paths.ts +33 -0
- package/src/utils/rate-limiter.ts +75 -0
- package/src/utils/retry.ts +78 -0
- package/test-cli.sh +85 -0
- package/test-real-data.sh +97 -0
- package/tsconfig.json +23 -0
- package/vitest.config.ts +35 -0
package/dist/cli/auth.js
ADDED
|
@@ -0,0 +1,288 @@
|
|
|
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.registerAuthCommands = registerAuthCommands;
|
|
7
|
+
const chalk_1 = __importDefault(require("chalk"));
|
|
8
|
+
const inquirer_1 = __importDefault(require("inquirer"));
|
|
9
|
+
const browser_1 = require("../core/browser");
|
|
10
|
+
const auth_1 = require("../linkedin/auth");
|
|
11
|
+
const storage_1 = require("../core/storage");
|
|
12
|
+
const audit_1 = require("../core/audit");
|
|
13
|
+
const config_1 = require("../core/config");
|
|
14
|
+
const browser_cookies_1 = require("../core/browser-cookies");
|
|
15
|
+
const SESSION_KEY = 'linkedin-session';
|
|
16
|
+
function registerAuthCommands(program) {
|
|
17
|
+
const auth = program.command('auth').description('Authentication commands');
|
|
18
|
+
auth
|
|
19
|
+
.command('login')
|
|
20
|
+
.description('Log in to LinkedIn')
|
|
21
|
+
.option('-e, --email <email>', 'LinkedIn email')
|
|
22
|
+
.option('--headless', 'Run browser in headless mode', false)
|
|
23
|
+
.option('--debug', 'Enable debug mode with screenshots and verbose logging', false)
|
|
24
|
+
.action(async (options) => {
|
|
25
|
+
const storage = (0, storage_1.getSecureStorage)();
|
|
26
|
+
const logger = (0, audit_1.getAuditLogger)();
|
|
27
|
+
const config = (0, config_1.getConfig)();
|
|
28
|
+
try {
|
|
29
|
+
// Get email if not provided
|
|
30
|
+
let email = options.email;
|
|
31
|
+
if (!email) {
|
|
32
|
+
const answer = await inquirer_1.default.prompt([
|
|
33
|
+
{
|
|
34
|
+
type: 'input',
|
|
35
|
+
name: 'email',
|
|
36
|
+
message: 'LinkedIn email:',
|
|
37
|
+
validate: (input) => input.includes('@') || 'Please enter a valid email',
|
|
38
|
+
},
|
|
39
|
+
]);
|
|
40
|
+
email = answer.email;
|
|
41
|
+
}
|
|
42
|
+
// Get password securely
|
|
43
|
+
const { password } = await inquirer_1.default.prompt([
|
|
44
|
+
{
|
|
45
|
+
type: 'password',
|
|
46
|
+
name: 'password',
|
|
47
|
+
message: 'LinkedIn password:',
|
|
48
|
+
mask: '*',
|
|
49
|
+
},
|
|
50
|
+
]);
|
|
51
|
+
console.log(chalk_1.default.blue('Launching browser...'));
|
|
52
|
+
// Launch browser with config
|
|
53
|
+
const browser = new browser_1.BrowserController({
|
|
54
|
+
headless: options.headless ?? config.getValue('headless'),
|
|
55
|
+
debug: options.debug ?? false,
|
|
56
|
+
});
|
|
57
|
+
// Check for existing session
|
|
58
|
+
if (storage.exists(SESSION_KEY)) {
|
|
59
|
+
const sessionData = storage.load(SESSION_KEY);
|
|
60
|
+
if (sessionData) {
|
|
61
|
+
console.log(chalk_1.default.blue('Found existing session, attempting to restore...'));
|
|
62
|
+
await browser.launch();
|
|
63
|
+
const session = JSON.parse(sessionData);
|
|
64
|
+
await browser.restoreSession(session);
|
|
65
|
+
// Verify session is still valid
|
|
66
|
+
const linkedInAuth = new auth_1.LinkedInAuth(browser, options.debug ?? false);
|
|
67
|
+
if (await linkedInAuth.isSessionValid()) {
|
|
68
|
+
console.log(chalk_1.default.green('✓ Already logged in (restored session)'));
|
|
69
|
+
logger.log('auth.login', { method: 'restored_session' }, true);
|
|
70
|
+
await browser.close().catch(() => { });
|
|
71
|
+
return;
|
|
72
|
+
}
|
|
73
|
+
console.log(chalk_1.default.yellow('⚠ Session expired, logging in again...'));
|
|
74
|
+
// Browser is still open, continue to fresh login
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
// Fresh login (browser may already be launched from session check above)
|
|
78
|
+
if (!browser.isLaunched()) {
|
|
79
|
+
await browser.launch();
|
|
80
|
+
}
|
|
81
|
+
const linkedInAuth = new auth_1.LinkedInAuth(browser, options.debug ?? false);
|
|
82
|
+
console.log(chalk_1.default.blue('Logging in to LinkedIn...'));
|
|
83
|
+
const result = await linkedInAuth.login({
|
|
84
|
+
email,
|
|
85
|
+
password,
|
|
86
|
+
});
|
|
87
|
+
if (result.requires2FA) {
|
|
88
|
+
// Prompt for TOTP code
|
|
89
|
+
const { totpCode } = await inquirer_1.default.prompt([
|
|
90
|
+
{
|
|
91
|
+
type: 'input',
|
|
92
|
+
name: 'totpCode',
|
|
93
|
+
message: 'Enter TOTP code from Microsoft Authenticator:',
|
|
94
|
+
validate: (input) => /^\d{6}$/.test(input) || 'Please enter a 6-digit code',
|
|
95
|
+
},
|
|
96
|
+
]);
|
|
97
|
+
console.log(chalk_1.default.blue('Verifying 2FA code...'));
|
|
98
|
+
// Retry login with TOTP
|
|
99
|
+
const result2FA = await linkedInAuth.login({
|
|
100
|
+
email,
|
|
101
|
+
password,
|
|
102
|
+
totpCode,
|
|
103
|
+
});
|
|
104
|
+
if (!result2FA.success) {
|
|
105
|
+
console.error(chalk_1.default.red('✗ Login failed:'), result2FA.error);
|
|
106
|
+
logger.log('auth.login', { email, error: result2FA.error }, false);
|
|
107
|
+
await browser.close();
|
|
108
|
+
process.exit(1);
|
|
109
|
+
}
|
|
110
|
+
// Save session
|
|
111
|
+
if (result2FA.session) {
|
|
112
|
+
storage.save(SESSION_KEY, JSON.stringify(result2FA.session));
|
|
113
|
+
}
|
|
114
|
+
console.log(chalk_1.default.green('✓ Login successful!'));
|
|
115
|
+
logger.log('auth.login', { email, method: '2fa' }, true);
|
|
116
|
+
await browser.close().catch(() => { });
|
|
117
|
+
}
|
|
118
|
+
else if (!result.success) {
|
|
119
|
+
console.error(chalk_1.default.red('✗ Login failed:'), result.error);
|
|
120
|
+
logger.log('auth.login', { email, error: result.error }, false);
|
|
121
|
+
await browser.close();
|
|
122
|
+
process.exit(1);
|
|
123
|
+
}
|
|
124
|
+
else {
|
|
125
|
+
// Success without 2FA
|
|
126
|
+
if (result.session) {
|
|
127
|
+
storage.save(SESSION_KEY, JSON.stringify(result.session));
|
|
128
|
+
}
|
|
129
|
+
console.log(chalk_1.default.green('✓ Login successful!'));
|
|
130
|
+
logger.log('auth.login', { email }, true);
|
|
131
|
+
}
|
|
132
|
+
await browser.close().catch(() => { });
|
|
133
|
+
}
|
|
134
|
+
catch (error) {
|
|
135
|
+
console.error(chalk_1.default.red('✗ Login failed:'), error instanceof Error ? error.message : error);
|
|
136
|
+
process.exit(1);
|
|
137
|
+
}
|
|
138
|
+
});
|
|
139
|
+
auth
|
|
140
|
+
.command('logout')
|
|
141
|
+
.description('Log out and clear session')
|
|
142
|
+
.action(async () => {
|
|
143
|
+
const storage = (0, storage_1.getSecureStorage)();
|
|
144
|
+
const logger = (0, audit_1.getAuditLogger)();
|
|
145
|
+
try {
|
|
146
|
+
console.log(chalk_1.default.blue('Logging out...'));
|
|
147
|
+
// Clear the session from secure storage
|
|
148
|
+
const hadSession = storage.delete(SESSION_KEY);
|
|
149
|
+
if (hadSession) {
|
|
150
|
+
console.log(chalk_1.default.green('✓ Logged out successfully'));
|
|
151
|
+
logger.log('auth.logout', {}, true);
|
|
152
|
+
}
|
|
153
|
+
else {
|
|
154
|
+
console.log(chalk_1.default.yellow('⚠ No active session found'));
|
|
155
|
+
}
|
|
156
|
+
}
|
|
157
|
+
catch (error) {
|
|
158
|
+
console.error(chalk_1.default.red('✗ Logout failed:'), error instanceof Error ? error.message : error);
|
|
159
|
+
logger.log('auth.logout', { error: String(error) }, false);
|
|
160
|
+
process.exit(1);
|
|
161
|
+
}
|
|
162
|
+
});
|
|
163
|
+
auth
|
|
164
|
+
.command('status')
|
|
165
|
+
.description('Check authentication status')
|
|
166
|
+
.action(async () => {
|
|
167
|
+
const storage = (0, storage_1.getSecureStorage)();
|
|
168
|
+
const config = (0, config_1.getConfig)();
|
|
169
|
+
let browser = null;
|
|
170
|
+
try {
|
|
171
|
+
console.log(chalk_1.default.blue('Checking authentication status...'));
|
|
172
|
+
// First try to connect to existing browser via CDP
|
|
173
|
+
console.log(chalk_1.default.blue('Checking for existing browser (Chrome/Edge)...'));
|
|
174
|
+
browser = new browser_1.BrowserController({
|
|
175
|
+
headless: config.getValue('headless'),
|
|
176
|
+
});
|
|
177
|
+
try {
|
|
178
|
+
await browser.launch();
|
|
179
|
+
const linkedInAuth = new auth_1.LinkedInAuth(browser);
|
|
180
|
+
if (await linkedInAuth.isSessionValid()) {
|
|
181
|
+
console.log(chalk_1.default.green('✓ Logged in (via existing browser session)'));
|
|
182
|
+
await browser.close();
|
|
183
|
+
return;
|
|
184
|
+
}
|
|
185
|
+
await browser.close();
|
|
186
|
+
browser = null;
|
|
187
|
+
}
|
|
188
|
+
catch (cdpError) {
|
|
189
|
+
console.log(chalk_1.default.gray('Could not connect to existing browser'));
|
|
190
|
+
if (browser) {
|
|
191
|
+
await browser.close().catch(() => { });
|
|
192
|
+
browser = null;
|
|
193
|
+
}
|
|
194
|
+
}
|
|
195
|
+
// Check if session exists in storage
|
|
196
|
+
if (!storage.exists(SESSION_KEY)) {
|
|
197
|
+
console.log(chalk_1.default.yellow('⚠ Not logged in'));
|
|
198
|
+
console.log(chalk_1.default.gray('Run: linkedin-cli auth login'));
|
|
199
|
+
return;
|
|
200
|
+
}
|
|
201
|
+
// Session exists, try to restore and verify
|
|
202
|
+
const sessionData = storage.load(SESSION_KEY);
|
|
203
|
+
if (!sessionData) {
|
|
204
|
+
console.log(chalk_1.default.yellow('⚠ Session data corrupted'));
|
|
205
|
+
console.log(chalk_1.default.gray('Run: linkedin-cli auth login'));
|
|
206
|
+
return;
|
|
207
|
+
}
|
|
208
|
+
console.log(chalk_1.default.blue('Found saved session, verifying...'));
|
|
209
|
+
// Launch browser to verify session
|
|
210
|
+
browser = new browser_1.BrowserController({
|
|
211
|
+
headless: config.getValue('headless'),
|
|
212
|
+
});
|
|
213
|
+
await browser.launch();
|
|
214
|
+
const session = JSON.parse(sessionData);
|
|
215
|
+
await browser.restoreSession(session);
|
|
216
|
+
const linkedInAuth = new auth_1.LinkedInAuth(browser);
|
|
217
|
+
const isValid = await linkedInAuth.isSessionValid();
|
|
218
|
+
if (isValid) {
|
|
219
|
+
const sessionAge = new Date().getTime() - new Date(session.timestamp).getTime();
|
|
220
|
+
const hoursAgo = Math.floor(sessionAge / (1000 * 60 * 60));
|
|
221
|
+
const daysAgo = Math.floor(sessionAge / (1000 * 60 * 60 * 24));
|
|
222
|
+
console.log(chalk_1.default.green('✓ Logged in'));
|
|
223
|
+
if (daysAgo > 0) {
|
|
224
|
+
console.log(chalk_1.default.gray(`Session created ${daysAgo} day${daysAgo !== 1 ? 's' : ''} ago`));
|
|
225
|
+
}
|
|
226
|
+
else if (hoursAgo > 0) {
|
|
227
|
+
console.log(chalk_1.default.gray(`Session created ${hoursAgo} hour${hoursAgo !== 1 ? 's' : ''} ago`));
|
|
228
|
+
}
|
|
229
|
+
else {
|
|
230
|
+
console.log(chalk_1.default.gray('Session created recently'));
|
|
231
|
+
}
|
|
232
|
+
}
|
|
233
|
+
else {
|
|
234
|
+
console.log(chalk_1.default.yellow('⚠ Session expired'));
|
|
235
|
+
console.log(chalk_1.default.gray('Run: linkedin-cli auth login'));
|
|
236
|
+
}
|
|
237
|
+
await browser.close();
|
|
238
|
+
browser = null;
|
|
239
|
+
}
|
|
240
|
+
catch (error) {
|
|
241
|
+
if (browser) {
|
|
242
|
+
await browser.close().catch(() => { });
|
|
243
|
+
}
|
|
244
|
+
console.error(chalk_1.default.red('✗ Error checking status:'), error instanceof Error ? error.message : error);
|
|
245
|
+
process.exit(1);
|
|
246
|
+
}
|
|
247
|
+
});
|
|
248
|
+
auth
|
|
249
|
+
.command('login-from-browser <browser>')
|
|
250
|
+
.description('Import LinkedIn session from browser (chrome, edge, arc, brave)')
|
|
251
|
+
.action(async (browserName) => {
|
|
252
|
+
const storage = (0, storage_1.getSecureStorage)();
|
|
253
|
+
const logger = (0, audit_1.getAuditLogger)();
|
|
254
|
+
try {
|
|
255
|
+
console.log(chalk_1.default.blue(`Extracting LinkedIn cookies from ${browserName}...`));
|
|
256
|
+
console.log(chalk_1.default.gray('macOS will show a permission dialog to access browser data.'));
|
|
257
|
+
// Extract LinkedIn cookies from browser
|
|
258
|
+
const cookies = await (0, browser_cookies_1.getLinkedinCookies)(browserName);
|
|
259
|
+
if (cookies.length === 0) {
|
|
260
|
+
console.error(chalk_1.default.red('✗ No LinkedIn cookies found.'), chalk_1.default.gray('Make sure you are logged into LinkedIn in', browserName));
|
|
261
|
+
process.exit(1);
|
|
262
|
+
}
|
|
263
|
+
console.log(chalk_1.default.green(`✓ Found ${cookies.length} LinkedIn cookies`));
|
|
264
|
+
// Save cookies to session storage
|
|
265
|
+
const session = {
|
|
266
|
+
cookies,
|
|
267
|
+
localStorage: {},
|
|
268
|
+
timestamp: new Date(),
|
|
269
|
+
};
|
|
270
|
+
storage.save(SESSION_KEY, JSON.stringify(session));
|
|
271
|
+
console.log(chalk_1.default.green('✓ Session imported successfully'));
|
|
272
|
+
logger.log('auth.login-from-browser', { browser: browserName, cookieCount: cookies.length }, true);
|
|
273
|
+
console.log(chalk_1.default.yellow('⚠ Note: Chrome encrypts cookies at rest.'));
|
|
274
|
+
console.log(chalk_1.default.gray(' For best results, keep the browser open while using the CLI.'));
|
|
275
|
+
console.log(chalk_1.default.blue(''));
|
|
276
|
+
console.log(chalk_1.default.blue('Next steps:'));
|
|
277
|
+
console.log(chalk_1.default.gray(' 1. Close any browser windows completely'));
|
|
278
|
+
console.log(chalk_1.default.gray(' 2. Run: linkedin-cli messages list'));
|
|
279
|
+
console.log(chalk_1.default.gray(' 3. The CLI will connect to your browser via CDP'));
|
|
280
|
+
}
|
|
281
|
+
catch (error) {
|
|
282
|
+
console.error(chalk_1.default.red('✗ Failed to import session:'), error instanceof Error ? error.message : error);
|
|
283
|
+
logger.log('auth.login-from-browser', { browser: browserName, error: String(error) }, false);
|
|
284
|
+
process.exit(1);
|
|
285
|
+
}
|
|
286
|
+
});
|
|
287
|
+
}
|
|
288
|
+
//# sourceMappingURL=auth.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"auth.js","sourceRoot":"","sources":["../../src/cli/auth.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"company.d.ts","sourceRoot":"","sources":["../../src/cli/company.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAMpC,wBAAgB,uBAAuB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CA2D9D"}
|
|
@@ -0,0 +1,55 @@
|
|
|
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.registerCompanyCommands = registerCompanyCommands;
|
|
7
|
+
const chalk_1 = __importDefault(require("chalk"));
|
|
8
|
+
const company_extractor_1 = require("../linkedin/company-extractor");
|
|
9
|
+
const browser_1 = require("../core/browser");
|
|
10
|
+
const audit_1 = require("../core/audit");
|
|
11
|
+
function registerCompanyCommands(program) {
|
|
12
|
+
const company = program
|
|
13
|
+
.command('company')
|
|
14
|
+
.description('Extract information from LinkedIn company profiles');
|
|
15
|
+
company
|
|
16
|
+
.command('info')
|
|
17
|
+
.description('Extract company profile information')
|
|
18
|
+
.argument('<url>', 'LinkedIn company URL (e.g., https://www.linkedin.com/company/openai/)')
|
|
19
|
+
.action(async (url) => {
|
|
20
|
+
const logger = (0, audit_1.getAuditLogger)();
|
|
21
|
+
let browserController;
|
|
22
|
+
try {
|
|
23
|
+
// Validate URL
|
|
24
|
+
if (!(0, company_extractor_1.isValidCompanyUrl)(url)) {
|
|
25
|
+
console.error(chalk_1.default.red('✗ Invalid company URL'));
|
|
26
|
+
console.log(chalk_1.default.gray('Expected format: https://www.linkedin.com/company/<name>/'));
|
|
27
|
+
process.exit(1);
|
|
28
|
+
}
|
|
29
|
+
console.error(chalk_1.default.gray(`Extracting company info from ${url}...`));
|
|
30
|
+
// Connect to existing browser via CDP (uses authenticated session)
|
|
31
|
+
browserController = await (0, browser_1.createBrowser)();
|
|
32
|
+
const page = browserController.getPage();
|
|
33
|
+
if (!page) {
|
|
34
|
+
throw new Error('Failed to get page from browser');
|
|
35
|
+
}
|
|
36
|
+
// Extract company profile
|
|
37
|
+
const extractor = new company_extractor_1.CompanyExtractor(page);
|
|
38
|
+
const profile = await extractor.extract(url);
|
|
39
|
+
// Log successful extraction
|
|
40
|
+
const fieldsExtracted = Object.keys(profile).filter((k) => profile[k] !== null);
|
|
41
|
+
logger.log('company.info', { url, fieldsExtracted }, true);
|
|
42
|
+
// Output JSON to stdout
|
|
43
|
+
console.log(JSON.stringify(profile, null, 2));
|
|
44
|
+
await browserController.close();
|
|
45
|
+
}
|
|
46
|
+
catch (error) {
|
|
47
|
+
if (browserController)
|
|
48
|
+
await browserController.close();
|
|
49
|
+
logger.log('company.info', { url, error: error instanceof Error ? error.message : String(error) }, false);
|
|
50
|
+
console.error(chalk_1.default.red('✗ Failed to extract company data:'), error instanceof Error ? error.message : error);
|
|
51
|
+
process.exit(1);
|
|
52
|
+
}
|
|
53
|
+
});
|
|
54
|
+
}
|
|
55
|
+
//# sourceMappingURL=company.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"company.js","sourceRoot":"","sources":["../../src/cli/company.ts"],"names":[],"mappings":";;;;;AAMA,0DA2DC;AAhED,kDAA0B;AAC1B,qEAAoF;AACpF,6CAAgD;AAChD,yCAA+C;AAE/C,SAAgB,uBAAuB,CAAC,OAAgB;IACtD,MAAM,OAAO,GAAG,OAAO;SACpB,OAAO,CAAC,SAAS,CAAC;SAClB,WAAW,CAAC,oDAAoD,CAAC,CAAC;IAErE,OAAO;SACJ,OAAO,CAAC,MAAM,CAAC;SACf,WAAW,CAAC,qCAAqC,CAAC;SAClD,QAAQ,CAAC,OAAO,EAAE,uEAAuE,CAAC;SAC1F,MAAM,CAAC,KAAK,EAAE,GAAG,EAAE,EAAE;QACpB,MAAM,MAAM,GAAG,IAAA,sBAAc,GAAE,CAAC;QAChC,IAAI,iBAAiB,CAAC;QAEtB,IAAI,CAAC;YACH,eAAe;YACf,IAAI,CAAC,IAAA,qCAAiB,EAAC,GAAG,CAAC,EAAE,CAAC;gBAC5B,OAAO,CAAC,KAAK,CAAC,eAAK,CAAC,GAAG,CAAC,uBAAuB,CAAC,CAAC,CAAC;gBAClD,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,IAAI,CAAC,2DAA2D,CAAC,CAAC,CAAC;gBACrF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YAClB,CAAC;YAED,OAAO,CAAC,KAAK,CAAC,eAAK,CAAC,IAAI,CAAC,gCAAgC,GAAG,KAAK,CAAC,CAAC,CAAC;YAEpE,mEAAmE;YACnE,iBAAiB,GAAG,MAAM,IAAA,uBAAa,GAAE,CAAC;YAC1C,MAAM,IAAI,GAAG,iBAAiB,CAAC,OAAO,EAAE,CAAC;YAEzC,IAAI,CAAC,IAAI,EAAE,CAAC;gBACV,MAAM,IAAI,KAAK,CAAC,iCAAiC,CAAC,CAAC;YACrD,CAAC;YAED,0BAA0B;YAC1B,MAAM,SAAS,GAAG,IAAI,oCAAgB,CAAC,IAAI,CAAC,CAAC;YAC7C,MAAM,OAAO,GAAG,MAAM,SAAS,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;YAE7C,4BAA4B;YAC5B,MAAM,eAAe,GAAG,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,MAAM,CACjD,CAAC,CAAC,EAAE,EAAE,CAAC,OAAO,CAAC,CAAyB,CAAC,KAAK,IAAI,CACnD,CAAC;YACF,MAAM,CAAC,GAAG,CAAC,cAAc,EAAE,EAAE,GAAG,EAAE,eAAe,EAAE,EAAE,IAAI,CAAC,CAAC;YAE3D,wBAAwB;YACxB,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;YAE9C,MAAM,iBAAiB,CAAC,KAAK,EAAE,CAAC;QAClC,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAI,iBAAiB;gBAAE,MAAM,iBAAiB,CAAC,KAAK,EAAE,CAAC;YACvD,MAAM,CAAC,GAAG,CACR,cAAc,EACd,EAAE,GAAG,EAAE,KAAK,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,EACtE,KAAK,CACN,CAAC;YACF,OAAO,CAAC,KAAK,CACX,eAAK,CAAC,GAAG,CAAC,mCAAmC,CAAC,EAC9C,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,CAC/C,CAAC;YACF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;IACH,CAAC,CAAC,CAAC;AACP,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"connection.d.ts","sourceRoot":"","sources":["../../src/cli/connection.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAQpC,wBAAgB,0BAA0B,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAgFjE"}
|
|
@@ -0,0 +1,79 @@
|
|
|
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.registerConnectionCommands = registerConnectionCommands;
|
|
7
|
+
const chalk_1 = __importDefault(require("chalk"));
|
|
8
|
+
const browser_1 = require("../core/browser");
|
|
9
|
+
const connector_1 = require("../linkedin/connector");
|
|
10
|
+
const auth_1 = require("../linkedin/auth");
|
|
11
|
+
const audit_1 = require("../core/audit");
|
|
12
|
+
const config_1 = require("../core/config");
|
|
13
|
+
function registerConnectionCommands(program) {
|
|
14
|
+
const connection = program
|
|
15
|
+
.command('connect')
|
|
16
|
+
.description('Send connection requests to LinkedIn profiles');
|
|
17
|
+
connection
|
|
18
|
+
.command('send')
|
|
19
|
+
.description('Send a connection request to a profile')
|
|
20
|
+
.argument('<profile-url>', 'LinkedIn profile URL (e.g., https://www.linkedin.com/in/williamhgates/)')
|
|
21
|
+
.option('-n, --note <note>', 'Personalized note to include with connection request (max 300 characters)')
|
|
22
|
+
.option('--headless', 'Run browser in headless mode', false)
|
|
23
|
+
.action(async (profileUrl, options) => {
|
|
24
|
+
const logger = (0, audit_1.getAuditLogger)();
|
|
25
|
+
const config = (0, config_1.getConfig)();
|
|
26
|
+
let browser = null;
|
|
27
|
+
try {
|
|
28
|
+
// Validate profile URL
|
|
29
|
+
if (!profileUrl.match(/^https?:\/\/www\.linkedin\.com\/in\/[^\/]+\/?$/)) {
|
|
30
|
+
console.error(chalk_1.default.red('✗ Invalid profile URL'));
|
|
31
|
+
console.log(chalk_1.default.gray('Expected format: https://www.linkedin.com/in/username/'));
|
|
32
|
+
process.exit(1);
|
|
33
|
+
}
|
|
34
|
+
console.log(chalk_1.default.blue(`Preparing to connect with ${profileUrl}...`));
|
|
35
|
+
// Launch browser (will try Edge CDP first)
|
|
36
|
+
browser = new browser_1.BrowserController({
|
|
37
|
+
headless: options.headless ?? config.getValue('headless'),
|
|
38
|
+
});
|
|
39
|
+
await browser.launch();
|
|
40
|
+
// Verify we're logged in
|
|
41
|
+
const linkedInAuth = new auth_1.LinkedInAuth(browser);
|
|
42
|
+
if (!(await linkedInAuth.isSessionValid())) {
|
|
43
|
+
console.error(chalk_1.default.red('✗ Not logged in'));
|
|
44
|
+
console.log(chalk_1.default.gray('Run: linkedin-cli auth login'));
|
|
45
|
+
await browser.close();
|
|
46
|
+
process.exit(1);
|
|
47
|
+
}
|
|
48
|
+
console.log(chalk_1.default.blue('Sending connection request...'));
|
|
49
|
+
// Create connector and send request
|
|
50
|
+
const connector = new connector_1.LinkedInConnector(browser);
|
|
51
|
+
const result = await connector.connect({
|
|
52
|
+
profileUrl,
|
|
53
|
+
note: options.note,
|
|
54
|
+
});
|
|
55
|
+
if (result.success && result.sent) {
|
|
56
|
+
console.log(chalk_1.default.green('✓ Connection request sent successfully!'));
|
|
57
|
+
logger.log('connection.send', { profileUrl, hasNote: !!options.note }, true);
|
|
58
|
+
}
|
|
59
|
+
else if (result.pending) {
|
|
60
|
+
console.log(chalk_1.default.yellow('⚠ Connection request already pending'));
|
|
61
|
+
}
|
|
62
|
+
else if (result.error?.includes('Already connected')) {
|
|
63
|
+
console.log(chalk_1.default.yellow('✓ Already connected to this person'));
|
|
64
|
+
}
|
|
65
|
+
else {
|
|
66
|
+
console.error(chalk_1.default.red('✗ Failed to send connection request:'), result.error);
|
|
67
|
+
logger.log('connection.send', { profileUrl, error: result.error }, false);
|
|
68
|
+
await browser.close();
|
|
69
|
+
process.exit(1);
|
|
70
|
+
}
|
|
71
|
+
await browser.close();
|
|
72
|
+
}
|
|
73
|
+
catch (error) {
|
|
74
|
+
console.error(chalk_1.default.red('✗ Connection failed:'), error instanceof Error ? error.message : error);
|
|
75
|
+
process.exit(1);
|
|
76
|
+
}
|
|
77
|
+
});
|
|
78
|
+
}
|
|
79
|
+
//# sourceMappingURL=connection.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"connection.js","sourceRoot":"","sources":["../../src/cli/connection.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
export { registerAuthCommands } from './auth';
|
|
2
|
+
export { registerMessageCommands } from './messages';
|
|
3
|
+
export { registerReplyCommands } from './reply';
|
|
4
|
+
export { registerConnectionCommands } from './connection';
|
|
5
|
+
export { registerCompanyCommands } from './company';
|
|
6
|
+
export { registerProfileCommands } from './profile';
|
|
7
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/cli/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,oBAAoB,EAAE,MAAM,QAAQ,CAAC;AAC9C,OAAO,EAAE,uBAAuB,EAAE,MAAM,YAAY,CAAC;AACrD,OAAO,EAAE,qBAAqB,EAAE,MAAM,SAAS,CAAC;AAChD,OAAO,EAAE,0BAA0B,EAAE,MAAM,cAAc,CAAC;AAC1D,OAAO,EAAE,uBAAuB,EAAE,MAAM,WAAW,CAAC;AACpD,OAAO,EAAE,uBAAuB,EAAE,MAAM,WAAW,CAAC"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.registerProfileCommands = exports.registerCompanyCommands = exports.registerConnectionCommands = exports.registerReplyCommands = exports.registerMessageCommands = exports.registerAuthCommands = void 0;
|
|
4
|
+
// Re-export command registrations from implementation files
|
|
5
|
+
var auth_1 = require("./auth");
|
|
6
|
+
Object.defineProperty(exports, "registerAuthCommands", { enumerable: true, get: function () { return auth_1.registerAuthCommands; } });
|
|
7
|
+
var messages_1 = require("./messages");
|
|
8
|
+
Object.defineProperty(exports, "registerMessageCommands", { enumerable: true, get: function () { return messages_1.registerMessageCommands; } });
|
|
9
|
+
var reply_1 = require("./reply");
|
|
10
|
+
Object.defineProperty(exports, "registerReplyCommands", { enumerable: true, get: function () { return reply_1.registerReplyCommands; } });
|
|
11
|
+
var connection_1 = require("./connection");
|
|
12
|
+
Object.defineProperty(exports, "registerConnectionCommands", { enumerable: true, get: function () { return connection_1.registerConnectionCommands; } });
|
|
13
|
+
var company_1 = require("./company");
|
|
14
|
+
Object.defineProperty(exports, "registerCompanyCommands", { enumerable: true, get: function () { return company_1.registerCompanyCommands; } });
|
|
15
|
+
var profile_1 = require("./profile");
|
|
16
|
+
Object.defineProperty(exports, "registerProfileCommands", { enumerable: true, get: function () { return profile_1.registerProfileCommands; } });
|
|
17
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/cli/index.ts"],"names":[],"mappings":";;;AAAA,4DAA4D;AAC5D,+BAA8C;AAArC,4GAAA,oBAAoB,OAAA;AAC7B,uCAAqD;AAA5C,mHAAA,uBAAuB,OAAA;AAChC,iCAAgD;AAAvC,8GAAA,qBAAqB,OAAA;AAC9B,2CAA0D;AAAjD,wHAAA,0BAA0B,OAAA;AACnC,qCAAoD;AAA3C,kHAAA,uBAAuB,OAAA;AAChC,qCAAoD;AAA3C,kHAAA,uBAAuB,OAAA"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"messages.d.ts","sourceRoot":"","sources":["../../src/cli/messages.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AASpC,wBAAgB,uBAAuB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAwU9D"}
|