insta-dista-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/README.md ADDED
@@ -0,0 +1,58 @@
1
+ # 📬 insta-cli-dm
2
+
3
+ > Distraction-free Instagram from your terminal. **DMs only** — no reels, no stories, no feed.
4
+
5
+ Built for people who want to stay in touch without falling into the Instagram doom-scroll.
6
+
7
+ ## Install
8
+
9
+ ```bash
10
+ npm install -g insta-cli-dm
11
+ ```
12
+
13
+ ## Usage
14
+
15
+ ```bash
16
+ # Log in to your Instagram account
17
+ ig login
18
+
19
+ # View your DM inbox
20
+ ig inbox
21
+
22
+ # Open a chat with someone
23
+ ig chat <username>
24
+
25
+ # Log out
26
+ ig logout
27
+ ```
28
+
29
+ ## Commands
30
+
31
+ | Command | Description |
32
+ | ------------------ | ---------------------------------- |
33
+ | `ig login` | Log in (supports 2FA) |
34
+ | `ig logout` | Log out and clear saved session |
35
+ | `ig inbox` | View your recent DM threads |
36
+ | `ig chat <user>` | Open a conversation with `<user>` |
37
+
38
+ ### Inside a Chat
39
+
40
+ | Input | Action |
41
+ | ----------- | ------------------------- |
42
+ | any text | Sends the message |
43
+ | `/refresh` | Reload recent messages |
44
+ | `/exit` | Leave the chat |
45
+
46
+ ## How It Works
47
+
48
+ - Uses [`instagram-private-api`](https://github.com/dilame/instagram-private-api) to interface with Instagram's mobile API.
49
+ - Your session is saved locally at `~/.instagram-cli/session.json` so you don't have to log in every time.
50
+ - **No feed, no explore, no reels, no stories** — only DM endpoints are used.
51
+
52
+ ## ⚠️ Disclaimer
53
+
54
+ This tool uses an unofficial Instagram API. Use at your own risk. Instagram may flag accounts using third-party tools. Consider using a secondary account.
55
+
56
+ ## License
57
+
58
+ MIT
package/dist/auth.d.ts ADDED
@@ -0,0 +1,6 @@
1
+ import { IgApiClient } from 'instagram-private-api';
2
+ export declare function getClient(): IgApiClient;
3
+ export declare function login(): Promise<IgApiClient>;
4
+ export declare function logout(): Promise<void>;
5
+ export declare function ensureLoggedIn(): Promise<IgApiClient>;
6
+ //# sourceMappingURL=auth.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"auth.d.ts","sourceRoot":"","sources":["../src/auth.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AAOpD,wBAAgB,SAAS,IAAI,WAAW,CAKvC;AAED,wBAAsB,KAAK,IAAI,OAAO,CAAC,WAAW,CAAC,CA4FlD;AAED,wBAAsB,MAAM,IAAI,OAAO,CAAC,IAAI,CAAC,CAG5C;AAED,wBAAsB,cAAc,IAAI,OAAO,CAAC,WAAW,CAAC,CAO3D"}
package/dist/auth.js ADDED
@@ -0,0 +1,155 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ var __importDefault = (this && this.__importDefault) || function (mod) {
36
+ return (mod && mod.__esModule) ? mod : { "default": mod };
37
+ };
38
+ Object.defineProperty(exports, "__esModule", { value: true });
39
+ exports.getClient = getClient;
40
+ exports.login = login;
41
+ exports.logout = logout;
42
+ exports.ensureLoggedIn = ensureLoggedIn;
43
+ const instagram_private_api_1 = require("instagram-private-api");
44
+ const inquirer = __importStar(require("inquirer"));
45
+ const chalk_1 = __importDefault(require("chalk"));
46
+ const config_1 = require("./config");
47
+ let ig = null;
48
+ function getClient() {
49
+ if (!ig) {
50
+ ig = new instagram_private_api_1.IgApiClient();
51
+ }
52
+ return ig;
53
+ }
54
+ async function login() {
55
+ const client = getClient();
56
+ // Check for saved session first
57
+ const saved = (0, config_1.loadSession)();
58
+ if (saved && saved.cookies && saved.username) {
59
+ console.log(chalk_1.default.cyan(` Restoring session for @${saved.username}...`));
60
+ client.state.generateDevice(saved.username);
61
+ try {
62
+ await client.state.deserialize(saved.cookies);
63
+ // Verify the session is still valid
64
+ await client.account.currentUser();
65
+ console.log(chalk_1.default.green(` ✓ Logged in as @${saved.username}\n`));
66
+ return client;
67
+ }
68
+ catch {
69
+ console.log(chalk_1.default.yellow(' ⚠ Saved session expired. Please log in again.\n'));
70
+ (0, config_1.clearSession)();
71
+ }
72
+ }
73
+ // Interactive login
74
+ const answers = await inquirer.prompt([
75
+ {
76
+ type: 'input',
77
+ name: 'username',
78
+ message: chalk_1.default.bold('Instagram username:'),
79
+ validate: (val) => val.length > 0 || 'Username is required',
80
+ },
81
+ {
82
+ type: 'password',
83
+ name: 'password',
84
+ message: chalk_1.default.bold('Password:'),
85
+ mask: '•',
86
+ validate: (val) => val.length > 0 || 'Password is required',
87
+ },
88
+ ]);
89
+ client.state.generateDevice(answers.username);
90
+ try {
91
+ console.log(chalk_1.default.cyan('\n Logging in...'));
92
+ try {
93
+ await client.simulate.preLoginFlow();
94
+ }
95
+ catch { /* non-critical */ }
96
+ const loggedInUser = await client.account.login(answers.username, answers.password);
97
+ // Save session
98
+ const serialized = await client.state.serialize();
99
+ delete serialized.constants; // remove large constants to reduce file size
100
+ (0, config_1.saveSession)({ username: answers.username, cookies: serialized, userId: loggedInUser.pk });
101
+ (0, config_1.saveConfig)({ username: answers.username, userId: loggedInUser.pk });
102
+ console.log(chalk_1.default.green(` ✓ Successfully logged in as @${answers.username}\n`));
103
+ // Simulate post-login (non-critical, may fail on newer IG API versions)
104
+ try {
105
+ await client.simulate.postLoginFlow();
106
+ }
107
+ catch { /* non-critical */ }
108
+ return client;
109
+ }
110
+ catch (err) {
111
+ if (err.name === 'IgCheckpointError') {
112
+ // 2FA / Checkpoint challenge
113
+ console.log(chalk_1.default.yellow('\n ⚠ Instagram requires verification (2FA/Checkpoint).'));
114
+ await client.challenge.auto(true); // Trigger the challenge (sends code via SMS/email)
115
+ console.log(chalk_1.default.cyan(' A verification code has been sent to your device.\n'));
116
+ const { code } = await inquirer.prompt([
117
+ {
118
+ type: 'input',
119
+ name: 'code',
120
+ message: chalk_1.default.bold('Enter the verification code:'),
121
+ validate: (val) => val.length > 0 || 'Code is required',
122
+ },
123
+ ]);
124
+ try {
125
+ await client.challenge.sendSecurityCode(code);
126
+ const loggedInUser = await client.account.currentUser();
127
+ const serialized = await client.state.serialize();
128
+ delete serialized.constants;
129
+ (0, config_1.saveSession)({ username: answers.username, cookies: serialized, userId: loggedInUser.pk });
130
+ (0, config_1.saveConfig)({ username: answers.username, userId: loggedInUser.pk });
131
+ console.log(chalk_1.default.green(` ✓ Verified and logged in as @${answers.username}\n`));
132
+ return client;
133
+ }
134
+ catch (challengeErr) {
135
+ console.error(chalk_1.default.red(` ✗ Verification failed: ${challengeErr.message}`));
136
+ process.exit(1);
137
+ }
138
+ }
139
+ console.error(chalk_1.default.red(` ✗ Login failed: ${err.message}`));
140
+ process.exit(1);
141
+ }
142
+ }
143
+ async function logout() {
144
+ (0, config_1.clearSession)();
145
+ console.log(chalk_1.default.green(' ✓ Logged out successfully. Session cleared.\n'));
146
+ }
147
+ async function ensureLoggedIn() {
148
+ const saved = (0, config_1.loadSession)();
149
+ if (!saved) {
150
+ console.log(chalk_1.default.yellow(' You are not logged in. Please log in first.\n'));
151
+ return login();
152
+ }
153
+ return login();
154
+ }
155
+ //# sourceMappingURL=auth.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"auth.js","sourceRoot":"","sources":["../src/auth.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ export declare function saveSession(data: Record<string, any>): void;
2
+ export declare function loadSession(): Record<string, any> | null;
3
+ export declare function clearSession(): void;
4
+ export declare function saveConfig(data: Record<string, any>): void;
5
+ export declare function loadConfig(): Record<string, any>;
6
+ //# sourceMappingURL=config.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAcA,wBAAgB,WAAW,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,IAAI,CAG3D;AAED,wBAAgB,WAAW,IAAI,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,IAAI,CAOxD;AAED,wBAAgB,YAAY,IAAI,IAAI,CAInC;AAED,wBAAgB,UAAU,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,IAAI,CAK1D;AAED,wBAAgB,UAAU,IAAI,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAOhD"}
package/dist/config.js ADDED
@@ -0,0 +1,87 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ Object.defineProperty(exports, "__esModule", { value: true });
36
+ exports.saveSession = saveSession;
37
+ exports.loadSession = loadSession;
38
+ exports.clearSession = clearSession;
39
+ exports.saveConfig = saveConfig;
40
+ exports.loadConfig = loadConfig;
41
+ const fs = __importStar(require("fs"));
42
+ const path = __importStar(require("path"));
43
+ const os = __importStar(require("os"));
44
+ const CONFIG_DIR = path.join(os.homedir(), '.instagram-cli');
45
+ const SESSION_FILE = path.join(CONFIG_DIR, 'session.json');
46
+ const CONFIG_FILE = path.join(CONFIG_DIR, 'config.json');
47
+ function ensureConfigDir() {
48
+ if (!fs.existsSync(CONFIG_DIR)) {
49
+ fs.mkdirSync(CONFIG_DIR, { recursive: true });
50
+ }
51
+ }
52
+ function saveSession(data) {
53
+ ensureConfigDir();
54
+ fs.writeFileSync(SESSION_FILE, JSON.stringify(data, null, 2));
55
+ }
56
+ function loadSession() {
57
+ if (!fs.existsSync(SESSION_FILE))
58
+ return null;
59
+ try {
60
+ return JSON.parse(fs.readFileSync(SESSION_FILE, 'utf-8'));
61
+ }
62
+ catch {
63
+ return null;
64
+ }
65
+ }
66
+ function clearSession() {
67
+ if (fs.existsSync(SESSION_FILE)) {
68
+ fs.unlinkSync(SESSION_FILE);
69
+ }
70
+ }
71
+ function saveConfig(data) {
72
+ ensureConfigDir();
73
+ const existing = loadConfig();
74
+ const merged = { ...existing, ...data };
75
+ fs.writeFileSync(CONFIG_FILE, JSON.stringify(merged, null, 2));
76
+ }
77
+ function loadConfig() {
78
+ if (!fs.existsSync(CONFIG_FILE))
79
+ return {};
80
+ try {
81
+ return JSON.parse(fs.readFileSync(CONFIG_FILE, 'utf-8'));
82
+ }
83
+ catch {
84
+ return {};
85
+ }
86
+ }
87
+ //# sourceMappingURL=config.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAcA,kCAGC;AAED,kCAOC;AAED,oCAIC;AAED,gCAKC;AAED,gCAOC;AAhDD,uCAAyB;AACzB,2CAA6B;AAC7B,uCAAyB;AAEzB,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,EAAE,gBAAgB,CAAC,CAAC;AAC7D,MAAM,YAAY,GAAG,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,cAAc,CAAC,CAAC;AAC3D,MAAM,WAAW,GAAG,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,aAAa,CAAC,CAAC;AAEzD,SAAS,eAAe;IACpB,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;QAC7B,EAAE,CAAC,SAAS,CAAC,UAAU,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAClD,CAAC;AACL,CAAC;AAED,SAAgB,WAAW,CAAC,IAAyB;IACjD,eAAe,EAAE,CAAC;IAClB,EAAE,CAAC,aAAa,CAAC,YAAY,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;AAClE,CAAC;AAED,SAAgB,WAAW;IACvB,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,YAAY,CAAC;QAAE,OAAO,IAAI,CAAC;IAC9C,IAAI,CAAC;QACD,OAAO,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,YAAY,CAAC,YAAY,EAAE,OAAO,CAAC,CAAC,CAAC;IAC9D,CAAC;IAAC,MAAM,CAAC;QACL,OAAO,IAAI,CAAC;IAChB,CAAC;AACL,CAAC;AAED,SAAgB,YAAY;IACxB,IAAI,EAAE,CAAC,UAAU,CAAC,YAAY,CAAC,EAAE,CAAC;QAC9B,EAAE,CAAC,UAAU,CAAC,YAAY,CAAC,CAAC;IAChC,CAAC;AACL,CAAC;AAED,SAAgB,UAAU,CAAC,IAAyB;IAChD,eAAe,EAAE,CAAC;IAClB,MAAM,QAAQ,GAAG,UAAU,EAAE,CAAC;IAC9B,MAAM,MAAM,GAAG,EAAE,GAAG,QAAQ,EAAE,GAAG,IAAI,EAAE,CAAC;IACxC,EAAE,CAAC,aAAa,CAAC,WAAW,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;AACnE,CAAC;AAED,SAAgB,UAAU;IACtB,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,WAAW,CAAC;QAAE,OAAO,EAAE,CAAC;IAC3C,IAAI,CAAC;QACD,OAAO,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,YAAY,CAAC,WAAW,EAAE,OAAO,CAAC,CAAC,CAAC;IAC7D,CAAC;IAAC,MAAM,CAAC;QACL,OAAO,EAAE,CAAC;IACd,CAAC;AACL,CAAC"}
package/dist/dm.d.ts ADDED
@@ -0,0 +1,10 @@
1
+ import { IgApiClient } from 'instagram-private-api';
2
+ /**
3
+ * Fetches and displays the DM inbox.
4
+ */
5
+ export declare function showInbox(client: IgApiClient): Promise<void>;
6
+ /**
7
+ * Opens a chat with a specific user.
8
+ */
9
+ export declare function openChat(client: IgApiClient, targetUsername: string): Promise<void>;
10
+ //# sourceMappingURL=dm.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dm.d.ts","sourceRoot":"","sources":["../src/dm.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AAMpD;;GAEG;AACH,wBAAsB,SAAS,CAAC,MAAM,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC,CAyFlE;AAED;;GAEG;AACH,wBAAsB,QAAQ,CAAC,MAAM,EAAE,WAAW,EAAE,cAAc,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAwDzF"}
package/dist/dm.js ADDED
@@ -0,0 +1,344 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ var __importDefault = (this && this.__importDefault) || function (mod) {
36
+ return (mod && mod.__esModule) ? mod : { "default": mod };
37
+ };
38
+ Object.defineProperty(exports, "__esModule", { value: true });
39
+ exports.showInbox = showInbox;
40
+ exports.openChat = openChat;
41
+ const chalk_1 = __importDefault(require("chalk"));
42
+ const cli_table3_1 = __importDefault(require("cli-table3"));
43
+ const inquirer = __importStar(require("inquirer"));
44
+ const ora_1 = __importDefault(require("ora"));
45
+ /**
46
+ * Fetches and displays the DM inbox.
47
+ */
48
+ async function showInbox(client) {
49
+ const spinner = (0, ora_1.default)(chalk_1.default.cyan(' Fetching inbox...')).start();
50
+ try {
51
+ const inboxFeed = client.feed.directInbox();
52
+ const threads = await inboxFeed.items();
53
+ spinner.stop();
54
+ if (!threads || threads.length === 0) {
55
+ console.log(chalk_1.default.yellow('\n 📭 Your inbox is empty.\n'));
56
+ return;
57
+ }
58
+ console.log(chalk_1.default.bold.white('\n ╔══════════════════════════════════════╗'));
59
+ console.log(chalk_1.default.bold.white(' ║') + chalk_1.default.bold.cyan(' 📬 YOUR INBOX ') + chalk_1.default.bold.white('║'));
60
+ console.log(chalk_1.default.bold.white(' ╚══════════════════════════════════════╝\n'));
61
+ const table = new cli_table3_1.default({
62
+ head: [
63
+ chalk_1.default.bold.cyan('#'),
64
+ chalk_1.default.bold.cyan('User'),
65
+ chalk_1.default.bold.cyan('Last Message'),
66
+ chalk_1.default.bold.cyan('Time'),
67
+ ],
68
+ colWidths: [5, 22, 40, 14],
69
+ style: { 'padding-left': 1, 'padding-right': 1 },
70
+ chars: {
71
+ 'top': '─', 'top-mid': '┬', 'top-left': '┌', 'top-right': '┐',
72
+ 'bottom': '─', 'bottom-mid': '┴', 'bottom-left': '└', 'bottom-right': '┘',
73
+ 'left': '│', 'left-mid': '├', 'mid': '─', 'mid-mid': '┼',
74
+ 'right': '│', 'right-mid': '┤', 'middle': '│',
75
+ },
76
+ });
77
+ threads.forEach((thread, index) => {
78
+ const users = thread.users?.map((u) => u.username).join(', ') || 'Unknown';
79
+ const lastItem = thread.last_permanent_item || thread.items?.[0];
80
+ let lastMessage = '';
81
+ if (lastItem) {
82
+ if (lastItem.item_type === 'text') {
83
+ lastMessage = lastItem.text || '';
84
+ }
85
+ else if (lastItem.item_type === 'reel_share') {
86
+ lastMessage = '📷 Story reply';
87
+ }
88
+ else if (lastItem.item_type === 'media_share') {
89
+ lastMessage = '🖼️ Shared post';
90
+ }
91
+ else if (lastItem.item_type === 'media') {
92
+ lastMessage = '📸 Photo';
93
+ }
94
+ else if (lastItem.item_type === 'voice_media') {
95
+ lastMessage = '🎤 Voice message';
96
+ }
97
+ else if (lastItem.item_type === 'animated_media') {
98
+ lastMessage = '🎬 GIF';
99
+ }
100
+ else if (lastItem.item_type === 'like') {
101
+ lastMessage = '❤️ Like';
102
+ }
103
+ else if (lastItem.item_type === 'link') {
104
+ lastMessage = '🔗 Link';
105
+ }
106
+ else {
107
+ lastMessage = `[${lastItem.item_type}]`;
108
+ }
109
+ }
110
+ // Truncate message
111
+ if (lastMessage.length > 36) {
112
+ lastMessage = lastMessage.substring(0, 33) + '...';
113
+ }
114
+ // Format timestamp
115
+ const timestamp = lastItem?.timestamp
116
+ ? formatTimestamp(Number(lastItem.timestamp) / 1000)
117
+ : '';
118
+ const isUnread = !thread.read_state;
119
+ const prefix = isUnread ? chalk_1.default.green('● ') : ' ';
120
+ table.push([
121
+ chalk_1.default.gray(`${index + 1}`),
122
+ prefix + chalk_1.default.white(users),
123
+ chalk_1.default.gray(lastMessage),
124
+ chalk_1.default.dim(timestamp),
125
+ ]);
126
+ });
127
+ console.log(table.toString());
128
+ console.log(chalk_1.default.dim(`\n ${chalk_1.default.green('●')} = unread | Use ${chalk_1.default.cyan('ig chat <username>')} to open a conversation\n`));
129
+ }
130
+ catch (err) {
131
+ spinner.stop();
132
+ console.error(chalk_1.default.red(` ✗ Failed to fetch inbox: ${err.message}\n`));
133
+ }
134
+ }
135
+ /**
136
+ * Opens a chat with a specific user.
137
+ */
138
+ async function openChat(client, targetUsername) {
139
+ const spinner = (0, ora_1.default)(chalk_1.default.cyan(` Finding @${targetUsername}...`)).start();
140
+ try {
141
+ // Find the user ID
142
+ const userId = await client.user.getIdByUsername(targetUsername);
143
+ // Find or create the thread with this user
144
+ spinner.text = chalk_1.default.cyan(' Opening thread...');
145
+ const threadResponse = await client.directThread.getByParticipants([userId.toString()]);
146
+ const threadId = threadResponse.thread?.thread_id;
147
+ if (!threadId) {
148
+ spinner.stop();
149
+ console.log(chalk_1.default.yellow(`\n No existing conversation with @${targetUsername}.`));
150
+ console.log(chalk_1.default.dim(' Send your first message to start a conversation!\n'));
151
+ // Create a new thread by sending a message
152
+ await newChatLoop(client, userId, targetUsername);
153
+ return;
154
+ }
155
+ spinner.text = chalk_1.default.cyan(' Loading messages...');
156
+ const threadFeed = client.feed.directThread({
157
+ thread_id: threadId,
158
+ oldest_cursor: '',
159
+ });
160
+ const messages = await threadFeed.items();
161
+ spinner.stop();
162
+ console.log(chalk_1.default.bold.white('\n ╔══════════════════════════════════════════════╗'));
163
+ console.log(chalk_1.default.bold.white(' ║') + chalk_1.default.bold.cyan(` 💬 Chat with @${targetUsername}`.padEnd(45)) + chalk_1.default.bold.white('║'));
164
+ console.log(chalk_1.default.bold.white(' ╚══════════════════════════════════════════════╝\n'));
165
+ if (messages && messages.length > 0) {
166
+ // Display messages in chronological order (oldest first)
167
+ const reversed = [...messages].reverse();
168
+ for (const msg of reversed) {
169
+ displayMessage(msg, userId, targetUsername);
170
+ }
171
+ }
172
+ else {
173
+ console.log(chalk_1.default.dim(' No messages yet. Start the conversation!\n'));
174
+ }
175
+ // Enter interactive chat mode
176
+ await chatLoop(client, threadId, targetUsername, userId);
177
+ }
178
+ catch (err) {
179
+ spinner.stop();
180
+ if (err.message?.includes('User not found')) {
181
+ console.error(chalk_1.default.red(` ✗ User @${targetUsername} not found.\n`));
182
+ }
183
+ else {
184
+ console.error(chalk_1.default.red(` ✗ Failed to open chat: ${err.message}\n`));
185
+ }
186
+ }
187
+ }
188
+ function displayMessage(msg, otherUserId, otherUsername) {
189
+ const isMe = msg.user_id !== otherUserId;
190
+ const sender = isMe ? chalk_1.default.cyan('You') : chalk_1.default.magenta(`@${otherUsername}`);
191
+ const time = formatTimestamp(Number(msg.timestamp) / 1000);
192
+ let content = '';
193
+ switch (msg.item_type) {
194
+ case 'text':
195
+ content = msg.text || '';
196
+ break;
197
+ case 'media':
198
+ content = '📸 [Photo]';
199
+ break;
200
+ case 'voice_media':
201
+ content = '🎤 [Voice message]';
202
+ break;
203
+ case 'animated_media':
204
+ content = '🎬 [GIF]';
205
+ break;
206
+ case 'reel_share':
207
+ content = '📷 [Story reply]';
208
+ if (msg.reel_share?.text) {
209
+ content += `: ${msg.reel_share.text}`;
210
+ }
211
+ break;
212
+ case 'media_share':
213
+ content = '🖼️ [Shared post]';
214
+ break;
215
+ case 'like':
216
+ content = '❤️';
217
+ break;
218
+ case 'link':
219
+ content = `🔗 ${msg.link?.text || '[Link]'}`;
220
+ break;
221
+ default:
222
+ content = `[${msg.item_type}]`;
223
+ }
224
+ if (isMe) {
225
+ console.log(` ${chalk_1.default.dim(time)} ${sender}: ${chalk_1.default.white(content)}`);
226
+ }
227
+ else {
228
+ console.log(` ${chalk_1.default.dim(time)} ${sender}: ${chalk_1.default.gray(content)}`);
229
+ }
230
+ }
231
+ /**
232
+ * New chat loop — for when there's no existing thread. Creates thread on first message.
233
+ */
234
+ async function newChatLoop(client, targetUserId, targetUsername) {
235
+ console.log(chalk_1.default.dim(` Type a message and press Enter to send.`));
236
+ console.log(chalk_1.default.dim(` Type ${chalk_1.default.yellow('/exit')} to leave.\n`));
237
+ const { message } = await inquirer.prompt([
238
+ {
239
+ type: 'input',
240
+ name: 'message',
241
+ message: chalk_1.default.green(' ➤'),
242
+ prefix: '',
243
+ },
244
+ ]);
245
+ const trimmed = message.trim();
246
+ if (!trimmed || trimmed === '/exit' || trimmed === '/quit') {
247
+ console.log(chalk_1.default.dim('\n 👋 Left the chat.\n'));
248
+ return;
249
+ }
250
+ try {
251
+ const threadEntity = client.entity.directThread([targetUserId.toString()]);
252
+ await threadEntity.broadcastText(trimmed);
253
+ const now = new Date().toLocaleTimeString([], { hour: '2-digit', minute: '2-digit' });
254
+ console.log(` ${chalk_1.default.dim(now)} ${chalk_1.default.cyan('You')}: ${chalk_1.default.white(trimmed)}`);
255
+ // Now get the thread ID and continue in chatLoop
256
+ const threadResponse = await client.directThread.getByParticipants([targetUserId.toString()]);
257
+ const threadId = threadResponse.thread?.thread_id;
258
+ if (threadId) {
259
+ await chatLoop(client, threadId, targetUsername, targetUserId);
260
+ }
261
+ }
262
+ catch (err) {
263
+ console.error(chalk_1.default.red(` ✗ Failed to send: ${err.message}`));
264
+ }
265
+ }
266
+ /**
267
+ * Interactive chat loop — send messages back-and-forth.
268
+ */
269
+ async function chatLoop(client, threadId, targetUsername, targetUserId) {
270
+ console.log(chalk_1.default.dim('\n ─────────────────────────────────────────'));
271
+ console.log(chalk_1.default.dim(` Type a message and press Enter to send.`));
272
+ console.log(chalk_1.default.dim(` Type ${chalk_1.default.yellow('/refresh')} to reload messages.`));
273
+ console.log(chalk_1.default.dim(` Type ${chalk_1.default.yellow('/exit')} or press Ctrl+C to leave.\n`));
274
+ while (true) {
275
+ const { message } = await inquirer.prompt([
276
+ {
277
+ type: 'input',
278
+ name: 'message',
279
+ message: chalk_1.default.green(' ➤'),
280
+ prefix: '',
281
+ },
282
+ ]);
283
+ const trimmed = message.trim();
284
+ if (!trimmed)
285
+ continue;
286
+ if (trimmed === '/exit' || trimmed === '/quit') {
287
+ console.log(chalk_1.default.dim('\n 👋 Left the chat.\n'));
288
+ break;
289
+ }
290
+ if (trimmed === '/refresh') {
291
+ console.log('');
292
+ const spinner = (0, ora_1.default)(chalk_1.default.cyan(' Refreshing messages...')).start();
293
+ try {
294
+ const threadFeed = client.feed.directThread({
295
+ thread_id: threadId,
296
+ oldest_cursor: '',
297
+ });
298
+ const messages = await threadFeed.items();
299
+ spinner.stop();
300
+ if (messages && messages.length > 0) {
301
+ console.log(chalk_1.default.dim('\n ─── Recent Messages ───\n'));
302
+ const reversed = [...messages].reverse().slice(-10); // last 10
303
+ for (const msg of reversed) {
304
+ displayMessage(msg, targetUserId, targetUsername);
305
+ }
306
+ console.log(chalk_1.default.dim('\n ─────────────────────────────────────────\n'));
307
+ }
308
+ }
309
+ catch (err) {
310
+ spinner.stop();
311
+ console.error(chalk_1.default.red(` ✗ Refresh failed: ${err.message}`));
312
+ }
313
+ continue;
314
+ }
315
+ // Send the message via the thread entity
316
+ try {
317
+ const threadEntity = client.entity.directThread(threadId);
318
+ await threadEntity.broadcastText(trimmed);
319
+ const now = new Date().toLocaleTimeString([], { hour: '2-digit', minute: '2-digit' });
320
+ console.log(` ${chalk_1.default.dim(now)} ${chalk_1.default.cyan('You')}: ${chalk_1.default.white(trimmed)}`);
321
+ }
322
+ catch (err) {
323
+ console.error(chalk_1.default.red(` ✗ Failed to send: ${err.message}`));
324
+ }
325
+ }
326
+ }
327
+ function formatTimestamp(epochMs) {
328
+ const date = new Date(epochMs);
329
+ const now = new Date();
330
+ const diffMs = now.getTime() - date.getTime();
331
+ const diffMins = Math.floor(diffMs / 60000);
332
+ const diffHours = Math.floor(diffMs / 3600000);
333
+ const diffDays = Math.floor(diffMs / 86400000);
334
+ if (diffMins < 1)
335
+ return 'just now';
336
+ if (diffMins < 60)
337
+ return `${diffMins}m ago`;
338
+ if (diffHours < 24)
339
+ return `${diffHours}h ago`;
340
+ if (diffDays < 7)
341
+ return `${diffDays}d ago`;
342
+ return date.toLocaleDateString();
343
+ }
344
+ //# sourceMappingURL=dm.js.map
package/dist/dm.js.map ADDED
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dm.js","sourceRoot":"","sources":["../src/dm.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ #!/usr/bin/env node
2
+ export {};
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":""}
package/dist/index.js ADDED
@@ -0,0 +1,64 @@
1
+ #!/usr/bin/env node
2
+ "use strict";
3
+ var __importDefault = (this && this.__importDefault) || function (mod) {
4
+ return (mod && mod.__esModule) ? mod : { "default": mod };
5
+ };
6
+ Object.defineProperty(exports, "__esModule", { value: true });
7
+ const commander_1 = require("commander");
8
+ const chalk_1 = __importDefault(require("chalk"));
9
+ const auth_1 = require("./auth");
10
+ const dm_1 = require("./dm");
11
+ const program = new commander_1.Command();
12
+ const BANNER = `
13
+ ${chalk_1.default.bold.magenta(' ╦╗╗╔═╗╔╦╗╔═╗ ╔═╗╦ ╦')}
14
+ ${chalk_1.default.bold.magenta(' ║║║╚═╗ ║ ╠═╣───║ ║ ║')}
15
+ ${chalk_1.default.bold.magenta(' ╩╝╚╚═╝ ╩ ╩ ╩ ╚═╝╩═╝╩')}
16
+ ${chalk_1.default.dim(' Distraction-free Instagram from your terminal')}
17
+ ${chalk_1.default.dim(' ─────────────────────────────────────────────')}
18
+ `;
19
+ program
20
+ .name('ig')
21
+ .description('Distraction-free Instagram CLI — DMs only, no reels, no feed.')
22
+ .version('1.0.0')
23
+ .addHelpText('before', BANNER);
24
+ // ─── Login ───
25
+ program
26
+ .command('login')
27
+ .description('Log in to your Instagram account')
28
+ .action(async () => {
29
+ console.log(BANNER);
30
+ await (0, auth_1.login)();
31
+ });
32
+ // ─── Logout ───
33
+ program
34
+ .command('logout')
35
+ .description('Log out and clear saved session')
36
+ .action(async () => {
37
+ console.log(BANNER);
38
+ await (0, auth_1.logout)();
39
+ });
40
+ // ─── Inbox ───
41
+ program
42
+ .command('inbox')
43
+ .description('View your DM inbox')
44
+ .action(async () => {
45
+ console.log(BANNER);
46
+ const client = await (0, auth_1.ensureLoggedIn)();
47
+ await (0, dm_1.showInbox)(client);
48
+ });
49
+ // ─── Chat ───
50
+ program
51
+ .command('chat <username>')
52
+ .description('Open a chat with a specific user')
53
+ .action(async (username) => {
54
+ console.log(BANNER);
55
+ const client = await (0, auth_1.ensureLoggedIn)();
56
+ await (0, dm_1.openChat)(client, username);
57
+ });
58
+ // ─── Default: show help ───
59
+ if (!process.argv.slice(2).length) {
60
+ console.log(BANNER);
61
+ program.outputHelp();
62
+ }
63
+ program.parse(process.argv);
64
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;;;;AAEA,yCAAoC;AACpC,kDAA0B;AAC1B,iCAAuD;AACvD,6BAA2C;AAE3C,MAAM,OAAO,GAAG,IAAI,mBAAO,EAAE,CAAC;AAE9B,MAAM,MAAM,GAAG;EACb,eAAK,CAAC,IAAI,CAAC,OAAO,CAAC,0BAA0B,CAAC;EAC9C,eAAK,CAAC,IAAI,CAAC,OAAO,CAAC,0BAA0B,CAAC;EAC9C,eAAK,CAAC,IAAI,CAAC,OAAO,CAAC,0BAA0B,CAAC;EAC9C,eAAK,CAAC,GAAG,CAAC,iDAAiD,CAAC;EAC5D,eAAK,CAAC,GAAG,CAAC,iDAAiD,CAAC;CAC7D,CAAC;AAEF,OAAO;KACF,IAAI,CAAC,IAAI,CAAC;KACV,WAAW,CAAC,+DAA+D,CAAC;KAC5E,OAAO,CAAC,OAAO,CAAC;KAChB,WAAW,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;AAEnC,gBAAgB;AAChB,OAAO;KACF,OAAO,CAAC,OAAO,CAAC;KAChB,WAAW,CAAC,kCAAkC,CAAC;KAC/C,MAAM,CAAC,KAAK,IAAI,EAAE;IACf,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;IACpB,MAAM,IAAA,YAAK,GAAE,CAAC;AAClB,CAAC,CAAC,CAAC;AAEP,iBAAiB;AACjB,OAAO;KACF,OAAO,CAAC,QAAQ,CAAC;KACjB,WAAW,CAAC,iCAAiC,CAAC;KAC9C,MAAM,CAAC,KAAK,IAAI,EAAE;IACf,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;IACpB,MAAM,IAAA,aAAM,GAAE,CAAC;AACnB,CAAC,CAAC,CAAC;AAEP,gBAAgB;AAChB,OAAO;KACF,OAAO,CAAC,OAAO,CAAC;KAChB,WAAW,CAAC,oBAAoB,CAAC;KACjC,MAAM,CAAC,KAAK,IAAI,EAAE;IACf,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;IACpB,MAAM,MAAM,GAAG,MAAM,IAAA,qBAAc,GAAE,CAAC;IACtC,MAAM,IAAA,cAAS,EAAC,MAAM,CAAC,CAAC;AAC5B,CAAC,CAAC,CAAC;AAEP,eAAe;AACf,OAAO;KACF,OAAO,CAAC,iBAAiB,CAAC;KAC1B,WAAW,CAAC,kCAAkC,CAAC;KAC/C,MAAM,CAAC,KAAK,EAAE,QAAgB,EAAE,EAAE;IAC/B,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;IACpB,MAAM,MAAM,GAAG,MAAM,IAAA,qBAAc,GAAE,CAAC;IACtC,MAAM,IAAA,aAAQ,EAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;AACrC,CAAC,CAAC,CAAC;AAEP,6BAA6B;AAC7B,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC;IAChC,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;IACpB,OAAO,CAAC,UAAU,EAAE,CAAC;AACzB,CAAC;AAED,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC"}
package/package.json ADDED
@@ -0,0 +1,42 @@
1
+ {
2
+ "name": "insta-dista-cli",
3
+ "version": "1.0.0",
4
+ "description": "Distraction-free Instagram CLI — DMs only, no reels, no feed, no stories.",
5
+ "main": "dist/index.js",
6
+ "bin": {
7
+ "ig": "dist/index.js"
8
+ },
9
+ "scripts": {
10
+ "build": "tsc",
11
+ "start": "node dist/index.js",
12
+ "dev": "tsc && node dist/index.js"
13
+ },
14
+ "keywords": [
15
+ "instagram",
16
+ "cli",
17
+ "dm",
18
+ "distraction-free",
19
+ "terminal",
20
+ "messaging"
21
+ ],
22
+ "author": "",
23
+ "license": "MIT",
24
+ "type": "commonjs",
25
+ "files": [
26
+ "dist/**/*",
27
+ "README.md"
28
+ ],
29
+ "dependencies": {
30
+ "chalk": "^4.1.2",
31
+ "cli-table3": "^0.6.5",
32
+ "commander": "^14.0.3",
33
+ "inquirer": "^8.2.6",
34
+ "instagram-private-api": "^1.46.1",
35
+ "ora": "^5.4.1"
36
+ },
37
+ "devDependencies": {
38
+ "@types/inquirer": "^8.2.10",
39
+ "@types/node": "^25.3.0",
40
+ "typescript": "^5.9.3"
41
+ }
42
+ }