instasave-sdk 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/LICENSE +21 -0
- package/README.md +153 -0
- package/dist/auth-fast.d.ts +32 -0
- package/dist/auth-fast.d.ts.map +1 -0
- package/dist/auth-fast.js +505 -0
- package/dist/auth-fast.js.map +1 -0
- package/dist/auth.d.ts +80 -0
- package/dist/auth.d.ts.map +1 -0
- package/dist/auth.js +370 -0
- package/dist/auth.js.map +1 -0
- package/dist/benchmark.d.ts +48 -0
- package/dist/benchmark.d.ts.map +1 -0
- package/dist/benchmark.js +125 -0
- package/dist/benchmark.js.map +1 -0
- package/dist/health.d.ts +28 -0
- package/dist/health.d.ts.map +1 -0
- package/dist/health.js +108 -0
- package/dist/health.js.map +1 -0
- package/dist/index.d.ts +101 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +492 -0
- package/dist/index.js.map +1 -0
- package/dist/logger.d.ts +22 -0
- package/dist/logger.d.ts.map +1 -0
- package/dist/logger.js +151 -0
- package/dist/logger.js.map +1 -0
- package/dist/memory.d.ts +56 -0
- package/dist/memory.d.ts.map +1 -0
- package/dist/memory.js +144 -0
- package/dist/memory.js.map +1 -0
- package/dist/metrics.d.ts +19 -0
- package/dist/metrics.d.ts.map +1 -0
- package/dist/metrics.js +79 -0
- package/dist/metrics.js.map +1 -0
- package/dist/parallel.d.ts +59 -0
- package/dist/parallel.d.ts.map +1 -0
- package/dist/parallel.js +202 -0
- package/dist/parallel.js.map +1 -0
- package/dist/platforms/index.d.ts +7 -0
- package/dist/platforms/index.d.ts.map +1 -0
- package/dist/platforms/index.js +13 -0
- package/dist/platforms/index.js.map +1 -0
- package/dist/platforms/instagram.d.ts +6 -0
- package/dist/platforms/instagram.d.ts.map +1 -0
- package/dist/platforms/instagram.js +189 -0
- package/dist/platforms/instagram.js.map +1 -0
- package/dist/plugins.d.ts +128 -0
- package/dist/plugins.d.ts.map +1 -0
- package/dist/plugins.js +107 -0
- package/dist/plugins.js.map +1 -0
- package/dist/test-integration.d.ts +2 -0
- package/dist/test-integration.d.ts.map +1 -0
- package/dist/test-integration.js +46 -0
- package/dist/test-integration.js.map +1 -0
- package/dist/types.d.ts +75 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +6 -0
- package/dist/types.js.map +1 -0
- package/dist/worker.d.ts +2 -0
- package/dist/worker.d.ts.map +1 -0
- package/dist/worker.js +23 -0
- package/dist/worker.js.map +1 -0
- package/package.json +56 -0
package/dist/index.js
ADDED
|
@@ -0,0 +1,492 @@
|
|
|
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 __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
36
|
+
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
37
|
+
};
|
|
38
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
39
|
+
exports.log = exports.InstaScraper = exports.MediaScraper = exports.WorkflowExecutor = void 0;
|
|
40
|
+
const logger_1 = require("./logger");
|
|
41
|
+
const fs_1 = require("fs");
|
|
42
|
+
const path_1 = require("path");
|
|
43
|
+
const crawlee_1 = require("crawlee");
|
|
44
|
+
const dotenv = __importStar(require("dotenv"));
|
|
45
|
+
const auth_fast_1 = require("./auth-fast");
|
|
46
|
+
const plugins_1 = require("./plugins");
|
|
47
|
+
const metrics_1 = require("./metrics");
|
|
48
|
+
const health_1 = require("./health");
|
|
49
|
+
const platforms_1 = require("./platforms");
|
|
50
|
+
// Load environment variables
|
|
51
|
+
dotenv.config();
|
|
52
|
+
// Re-export types for backward compatibility
|
|
53
|
+
__exportStar(require("./types"), exports);
|
|
54
|
+
__exportStar(require("./auth-fast"), exports);
|
|
55
|
+
__exportStar(require("./plugins"), exports);
|
|
56
|
+
__exportStar(require("./metrics"), exports);
|
|
57
|
+
__exportStar(require("./health"), exports);
|
|
58
|
+
__exportStar(require("./platforms"), exports);
|
|
59
|
+
/**
|
|
60
|
+
* Executes predefined workflows for platform interaction automation
|
|
61
|
+
* @class WorkflowExecutor
|
|
62
|
+
*/
|
|
63
|
+
class WorkflowExecutor {
|
|
64
|
+
/**
|
|
65
|
+
* Pauses execution for specified milliseconds
|
|
66
|
+
*/
|
|
67
|
+
sleep(ms) {
|
|
68
|
+
return new Promise(resolve => setTimeout(resolve, ms));
|
|
69
|
+
}
|
|
70
|
+
/**
|
|
71
|
+
* Executes a workflow from JSON file or array
|
|
72
|
+
*/
|
|
73
|
+
async executeWorkflow(page, workflowOrPath) {
|
|
74
|
+
let workflow;
|
|
75
|
+
if (typeof workflowOrPath === 'string') {
|
|
76
|
+
workflow = JSON.parse((0, fs_1.readFileSync)(workflowOrPath, 'utf-8'));
|
|
77
|
+
}
|
|
78
|
+
else {
|
|
79
|
+
workflow = workflowOrPath;
|
|
80
|
+
}
|
|
81
|
+
for (const task of workflow) {
|
|
82
|
+
logger_1.log.info(`Executing: ${task.name}`);
|
|
83
|
+
try {
|
|
84
|
+
switch (task.action) {
|
|
85
|
+
case 'clickOutside':
|
|
86
|
+
for (let i = 0; i < (task.clicks || 1); i++) {
|
|
87
|
+
await page.mouse.click(100, 100);
|
|
88
|
+
logger_1.log.info(`✓ Clicked outside modal (${i + 1}/${task.clicks})`);
|
|
89
|
+
await this.sleep(500);
|
|
90
|
+
}
|
|
91
|
+
break;
|
|
92
|
+
case 'doubleClick':
|
|
93
|
+
let doubleClicked = false;
|
|
94
|
+
for (const selector of task.selectors || []) {
|
|
95
|
+
try {
|
|
96
|
+
await page.waitForSelector(selector, { timeout: 2000 });
|
|
97
|
+
await page.click(selector, { clickCount: 2 });
|
|
98
|
+
logger_1.log.info(`✓ Double-clicked with selector: ${selector}`);
|
|
99
|
+
doubleClicked = true;
|
|
100
|
+
break;
|
|
101
|
+
}
|
|
102
|
+
catch (e) { }
|
|
103
|
+
}
|
|
104
|
+
if (!doubleClicked && task.fallback === 'findByText' && task.fallbackText) {
|
|
105
|
+
const found = await page.evaluate((text) => {
|
|
106
|
+
const elements = Array.from(document.querySelectorAll('*'));
|
|
107
|
+
const el = elements.find(e => e.textContent?.includes(text));
|
|
108
|
+
if (el && el instanceof HTMLElement) {
|
|
109
|
+
const event = new MouseEvent('dblclick', { bubbles: true });
|
|
110
|
+
el.dispatchEvent(event);
|
|
111
|
+
return true;
|
|
112
|
+
}
|
|
113
|
+
return false;
|
|
114
|
+
}, task.fallbackText);
|
|
115
|
+
if (found)
|
|
116
|
+
logger_1.log.info(`✓ Double-clicked via text: ${task.fallbackText}`);
|
|
117
|
+
}
|
|
118
|
+
break;
|
|
119
|
+
case 'hold':
|
|
120
|
+
const holdDuration = task.holdDuration || 1000;
|
|
121
|
+
for (const selector of task.selectors || []) {
|
|
122
|
+
try {
|
|
123
|
+
await page.waitForSelector(selector, { timeout: 2000 });
|
|
124
|
+
const element = await page.$(selector);
|
|
125
|
+
if (element) {
|
|
126
|
+
const box = await element.boundingBox();
|
|
127
|
+
if (box) {
|
|
128
|
+
await page.mouse.move(box.x + box.width / 2, box.y + box.height / 2);
|
|
129
|
+
await page.mouse.down();
|
|
130
|
+
await this.sleep(holdDuration);
|
|
131
|
+
await page.mouse.up();
|
|
132
|
+
logger_1.log.info(`✓ Held mouse button for ${holdDuration}ms on: ${selector}`);
|
|
133
|
+
break;
|
|
134
|
+
}
|
|
135
|
+
}
|
|
136
|
+
}
|
|
137
|
+
catch (e) { }
|
|
138
|
+
}
|
|
139
|
+
break;
|
|
140
|
+
case 'keypress':
|
|
141
|
+
if (task.key) {
|
|
142
|
+
// Press modifiers first
|
|
143
|
+
if (task.modifiers) {
|
|
144
|
+
for (const mod of task.modifiers) {
|
|
145
|
+
await page.keyboard.down(mod);
|
|
146
|
+
}
|
|
147
|
+
}
|
|
148
|
+
// Press the main key
|
|
149
|
+
await page.keyboard.press(task.key); // Cast to any for flexibility
|
|
150
|
+
// Release modifiers
|
|
151
|
+
if (task.modifiers) {
|
|
152
|
+
for (const mod of task.modifiers.reverse()) {
|
|
153
|
+
await page.keyboard.up(mod);
|
|
154
|
+
}
|
|
155
|
+
}
|
|
156
|
+
logger_1.log.info(`✓ Pressed key: ${task.modifiers ? task.modifiers.join('+') + '+' : ''}${task.key}`);
|
|
157
|
+
}
|
|
158
|
+
break;
|
|
159
|
+
case 'click':
|
|
160
|
+
default:
|
|
161
|
+
let clicked = false;
|
|
162
|
+
for (const selector of task.selectors || []) {
|
|
163
|
+
try {
|
|
164
|
+
await page.waitForSelector(selector, { timeout: 2000 });
|
|
165
|
+
await page.click(selector);
|
|
166
|
+
logger_1.log.info(`✓ Clicked with selector: ${selector}`);
|
|
167
|
+
clicked = true;
|
|
168
|
+
break;
|
|
169
|
+
}
|
|
170
|
+
catch (e) { }
|
|
171
|
+
}
|
|
172
|
+
if (!clicked && task.fallback === 'findByText' && task.fallbackText) {
|
|
173
|
+
const found = await page.evaluate((text) => {
|
|
174
|
+
const buttons = Array.from(document.querySelectorAll('button'));
|
|
175
|
+
const btn = buttons.find(b => b.textContent?.includes(text));
|
|
176
|
+
if (btn) {
|
|
177
|
+
btn.click();
|
|
178
|
+
return true;
|
|
179
|
+
}
|
|
180
|
+
return false;
|
|
181
|
+
}, task.fallbackText);
|
|
182
|
+
if (found)
|
|
183
|
+
logger_1.log.info(`✓ Clicked via text: ${task.fallbackText}`);
|
|
184
|
+
}
|
|
185
|
+
break;
|
|
186
|
+
}
|
|
187
|
+
if (task.wait)
|
|
188
|
+
await this.sleep(task.wait);
|
|
189
|
+
}
|
|
190
|
+
catch (e) {
|
|
191
|
+
if (!task.optional)
|
|
192
|
+
throw e;
|
|
193
|
+
logger_1.log.info(`⚠ Skipped (optional): ${task.name}`);
|
|
194
|
+
}
|
|
195
|
+
}
|
|
196
|
+
}
|
|
197
|
+
}
|
|
198
|
+
exports.WorkflowExecutor = WorkflowExecutor;
|
|
199
|
+
/**
|
|
200
|
+
* Main media scraper class with multi-platform support
|
|
201
|
+
* @class MediaScraper
|
|
202
|
+
*/
|
|
203
|
+
class MediaScraper {
|
|
204
|
+
/**
|
|
205
|
+
* Creates a new MediaScraper instance
|
|
206
|
+
*/
|
|
207
|
+
constructor() {
|
|
208
|
+
this.currentScrapeId = null;
|
|
209
|
+
this.stepCallback = null;
|
|
210
|
+
this.workflowExecutor = new WorkflowExecutor();
|
|
211
|
+
this.metricsCollector = new metrics_1.MetricsCollector();
|
|
212
|
+
this.healthChecker = new health_1.HealthChecker();
|
|
213
|
+
this.pluginManager = new plugins_1.PluginManager();
|
|
214
|
+
this.authManager = new auth_fast_1.FastAuthManager();
|
|
215
|
+
// Register built-in platforms
|
|
216
|
+
platforms_1.BUILTIN_PLATFORMS.forEach(plugin => this.pluginManager.register(plugin));
|
|
217
|
+
}
|
|
218
|
+
/**
|
|
219
|
+
* Register a plugin (platform or utility)
|
|
220
|
+
*/
|
|
221
|
+
use(plugin) {
|
|
222
|
+
this.pluginManager.register(plugin);
|
|
223
|
+
}
|
|
224
|
+
/**
|
|
225
|
+
* Login to Instagram
|
|
226
|
+
*/
|
|
227
|
+
async login(credentials) {
|
|
228
|
+
// Create a temporary page for login
|
|
229
|
+
const crawler = new crawlee_1.PuppeteerCrawler({
|
|
230
|
+
maxRequestRetries: 0,
|
|
231
|
+
requestHandlerTimeoutSecs: 60,
|
|
232
|
+
launchContext: {
|
|
233
|
+
launchOptions: {
|
|
234
|
+
executablePath: process.env.PUPPETEER_EXECUTABLE_PATH || undefined
|
|
235
|
+
}
|
|
236
|
+
},
|
|
237
|
+
requestHandler: async ({ page }) => {
|
|
238
|
+
logger_1.log.info('🔧 Puppeteer page created, starting login...');
|
|
239
|
+
const success = await this.authManager.login(page, credentials);
|
|
240
|
+
// Session is already saved in login method, no need to save again
|
|
241
|
+
}
|
|
242
|
+
});
|
|
243
|
+
await crawler.run(['https://www.instagram.com']);
|
|
244
|
+
return this.authManager.isAuthenticated();
|
|
245
|
+
}
|
|
246
|
+
/**
|
|
247
|
+
* Logout and clear session
|
|
248
|
+
*/
|
|
249
|
+
async logout() {
|
|
250
|
+
await this.authManager.logout();
|
|
251
|
+
}
|
|
252
|
+
/**
|
|
253
|
+
* Universal scrape method - automatically detects platform
|
|
254
|
+
*/
|
|
255
|
+
async scrape(url, options = {}) {
|
|
256
|
+
// Find platform plugin for URL
|
|
257
|
+
const platformPlugin = this.pluginManager.getPlatformForUrl(url);
|
|
258
|
+
if (!platformPlugin) {
|
|
259
|
+
throw new Error(`No platform plugin found for URL: ${url}. Supported platforms: ${this.pluginManager.getPlatformPlugins().map(p => p.name).join(', ')}`);
|
|
260
|
+
}
|
|
261
|
+
logger_1.log.info(`🔍 Detected platform: ${platformPlugin.name}`);
|
|
262
|
+
// Execute onBeforeScrape hooks
|
|
263
|
+
await this.pluginManager.executeHook('onBeforeScrape', url, options);
|
|
264
|
+
const startTime = Date.now();
|
|
265
|
+
const authManager = this.authManager;
|
|
266
|
+
const useSession = options.useSession !== false && authManager.isAuthenticated();
|
|
267
|
+
return new Promise((resolve, reject) => {
|
|
268
|
+
const crawler = new crawlee_1.PuppeteerCrawler({
|
|
269
|
+
maxRequestRetries: options.retries || 0,
|
|
270
|
+
requestHandlerTimeoutSecs: options.timeout || 60,
|
|
271
|
+
launchContext: {
|
|
272
|
+
launchOptions: {
|
|
273
|
+
executablePath: process.env.PUPPETEER_EXECUTABLE_PATH || undefined
|
|
274
|
+
}
|
|
275
|
+
},
|
|
276
|
+
// Apply cookies BEFORE navigation
|
|
277
|
+
preNavigationHooks: [
|
|
278
|
+
async ({ page }) => {
|
|
279
|
+
if (useSession) {
|
|
280
|
+
logger_1.log.info('🔐 Applying session cookies before navigation...');
|
|
281
|
+
await authManager.applyCookies(page);
|
|
282
|
+
}
|
|
283
|
+
}
|
|
284
|
+
],
|
|
285
|
+
requestHandler: async ({ page, request }) => {
|
|
286
|
+
try {
|
|
287
|
+
logger_1.log.info('Starting scrape operation...');
|
|
288
|
+
// Set user agent
|
|
289
|
+
await page.setUserAgent('Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36');
|
|
290
|
+
// Block unnecessary resources for faster loading
|
|
291
|
+
await page.setRequestInterception(true);
|
|
292
|
+
page.on('request', (req) => {
|
|
293
|
+
const resourceType = req.resourceType();
|
|
294
|
+
if (['stylesheet', 'font'].includes(resourceType)) {
|
|
295
|
+
req.abort();
|
|
296
|
+
}
|
|
297
|
+
else {
|
|
298
|
+
req.continue();
|
|
299
|
+
}
|
|
300
|
+
});
|
|
301
|
+
// Navigate to the URL
|
|
302
|
+
await page.goto(url, { waitUntil: 'domcontentloaded', timeout: 30000 });
|
|
303
|
+
// Check if login is required
|
|
304
|
+
const needsLogin = await page.evaluate(() => {
|
|
305
|
+
const loginIndicators = [
|
|
306
|
+
'Log in to continue',
|
|
307
|
+
'Login • Instagram',
|
|
308
|
+
'You must log in',
|
|
309
|
+
'This content isn\'t available right now'
|
|
310
|
+
];
|
|
311
|
+
const pageText = document.body.innerText;
|
|
312
|
+
const currentUrl = window.location.href;
|
|
313
|
+
return loginIndicators.some(indicator => pageText.includes(indicator) || currentUrl.includes('accounts/login'));
|
|
314
|
+
});
|
|
315
|
+
if (needsLogin) {
|
|
316
|
+
logger_1.log.info('🔐 Login required for this content');
|
|
317
|
+
if (!this.authManager.isAuthenticated()) {
|
|
318
|
+
throw new Error('Login required but no authentication available. Please login first via settings.');
|
|
319
|
+
}
|
|
320
|
+
logger_1.log.info('🔐 Applying authenticated session...');
|
|
321
|
+
// Navigate to Instagram homepage to establish session
|
|
322
|
+
await page.goto('https://www.instagram.com/', { waitUntil: 'domcontentloaded' });
|
|
323
|
+
await page.waitForTimeout(2000);
|
|
324
|
+
// Navigate back to target URL with session
|
|
325
|
+
await page.goto(url, { waitUntil: 'domcontentloaded', timeout: 30000 });
|
|
326
|
+
// Verify access was granted
|
|
327
|
+
const stillBlocked = await page.evaluate(() => {
|
|
328
|
+
const pageText = document.body.innerText;
|
|
329
|
+
return pageText.includes('Log in to continue') || pageText.includes('You must log in');
|
|
330
|
+
});
|
|
331
|
+
if (stillBlocked) {
|
|
332
|
+
throw new Error('Content requires login but authentication failed. Content may be private or age-restricted.');
|
|
333
|
+
}
|
|
334
|
+
logger_1.log.info('✅ Successfully accessed content with authentication');
|
|
335
|
+
}
|
|
336
|
+
// Navigate to page
|
|
337
|
+
await page.goto(request.url, {
|
|
338
|
+
waitUntil: 'domcontentloaded',
|
|
339
|
+
timeout: 15000
|
|
340
|
+
});
|
|
341
|
+
await this.sleep(1000);
|
|
342
|
+
// Execute platform workflow if available
|
|
343
|
+
if (platformPlugin.workflow) {
|
|
344
|
+
await this.workflowExecutor.executeWorkflow(page, platformPlugin.workflow);
|
|
345
|
+
}
|
|
346
|
+
// Scrape using platform plugin
|
|
347
|
+
let data = await platformPlugin.scrape(page, request.url);
|
|
348
|
+
// Execute onMediaExtracted hook
|
|
349
|
+
data.media = await this.pluginManager.executeHook('onMediaExtracted', data.media) || data.media;
|
|
350
|
+
// Execute onAfterScrape hook
|
|
351
|
+
data = await this.pluginManager.executeHook('onAfterScrape', data) || data;
|
|
352
|
+
// Validate extracted data
|
|
353
|
+
if (!data.post_id) {
|
|
354
|
+
throw new Error('Failed to extract post ID');
|
|
355
|
+
}
|
|
356
|
+
// Save to file if requested
|
|
357
|
+
if (options.saveToFile) {
|
|
358
|
+
await this.saveToFile(data, options.outputPath);
|
|
359
|
+
}
|
|
360
|
+
logger_1.log.info(`✅ Successfully scraped ${data.platform} post: ${data.post_id}`);
|
|
361
|
+
// Record metrics
|
|
362
|
+
const responseTime = Date.now() - startTime;
|
|
363
|
+
this.metricsCollector.recordRequest(true, responseTime, data.media.length, JSON.stringify(data).length);
|
|
364
|
+
resolve(data);
|
|
365
|
+
}
|
|
366
|
+
catch (error) {
|
|
367
|
+
logger_1.log.error('Scraping failed:', error);
|
|
368
|
+
// Execute onError hook
|
|
369
|
+
await this.pluginManager.executeHook('onError', error);
|
|
370
|
+
// Record failed metrics
|
|
371
|
+
const responseTime = Date.now() - startTime;
|
|
372
|
+
this.metricsCollector.recordRequest(false, responseTime, 0, 0, error instanceof Error ? error.message : String(error));
|
|
373
|
+
reject(error);
|
|
374
|
+
}
|
|
375
|
+
},
|
|
376
|
+
failedRequestHandler: async ({ request, error }) => {
|
|
377
|
+
logger_1.log.error(`Request failed for ${request.url}:`, error);
|
|
378
|
+
reject(error);
|
|
379
|
+
}
|
|
380
|
+
});
|
|
381
|
+
crawler.run([url]).catch(reject);
|
|
382
|
+
});
|
|
383
|
+
}
|
|
384
|
+
/**
|
|
385
|
+
* Scrape Instagram post (backward compatible method)
|
|
386
|
+
* @deprecated Use scrape() instead for multi-platform support
|
|
387
|
+
*/
|
|
388
|
+
async scrapePost(url, options = {}) {
|
|
389
|
+
const data = await this.scrape(url, options);
|
|
390
|
+
// Convert MediaData to InstagramPostData for backward compatibility
|
|
391
|
+
const instagramData = {
|
|
392
|
+
url: data.url,
|
|
393
|
+
post_id: data.post_id,
|
|
394
|
+
profile_name: data.profile_name,
|
|
395
|
+
media: data.media,
|
|
396
|
+
metadata: data.metadata,
|
|
397
|
+
// Deprecated images property - generated from media
|
|
398
|
+
images: data.media.map(item => item.url)
|
|
399
|
+
};
|
|
400
|
+
return instagramData;
|
|
401
|
+
}
|
|
402
|
+
async saveToFile(data, outputPath) {
|
|
403
|
+
try {
|
|
404
|
+
const filename = `${data.platform}_${data.post_id || 'post'}.json`;
|
|
405
|
+
const filepath = outputPath ? (0, path_1.join)(outputPath, filename) : filename;
|
|
406
|
+
(0, fs_1.writeFileSync)(filepath, JSON.stringify(data, null, 2));
|
|
407
|
+
logger_1.log.info(`✓ Saved data to ${filepath}`);
|
|
408
|
+
}
|
|
409
|
+
catch (error) {
|
|
410
|
+
logger_1.log.error('Failed to save file:', error);
|
|
411
|
+
throw new Error(`Failed to save data to file: ${error}`);
|
|
412
|
+
}
|
|
413
|
+
}
|
|
414
|
+
/**
|
|
415
|
+
* Set callback for step tracking
|
|
416
|
+
*/
|
|
417
|
+
setStepCallback(callback) {
|
|
418
|
+
this.stepCallback = callback;
|
|
419
|
+
}
|
|
420
|
+
/**
|
|
421
|
+
* Gets current metrics
|
|
422
|
+
*/
|
|
423
|
+
getMetrics() {
|
|
424
|
+
return this.metricsCollector.getMetrics();
|
|
425
|
+
}
|
|
426
|
+
/**
|
|
427
|
+
* Gets health status
|
|
428
|
+
*/
|
|
429
|
+
async getHealth() {
|
|
430
|
+
return await this.healthChecker.checkHealth();
|
|
431
|
+
}
|
|
432
|
+
/**
|
|
433
|
+
* Gets Prometheus-formatted metrics
|
|
434
|
+
*/
|
|
435
|
+
getPrometheusMetrics() {
|
|
436
|
+
return this.metricsCollector.getPrometheusMetrics();
|
|
437
|
+
}
|
|
438
|
+
/**
|
|
439
|
+
* Get plugin manager for advanced plugin operations
|
|
440
|
+
*/
|
|
441
|
+
getPluginManager() {
|
|
442
|
+
return this.pluginManager;
|
|
443
|
+
}
|
|
444
|
+
/**
|
|
445
|
+
* Get auth manager for advanced auth operations
|
|
446
|
+
*/
|
|
447
|
+
getAuthManager() {
|
|
448
|
+
return this.authManager;
|
|
449
|
+
}
|
|
450
|
+
async refreshSession() {
|
|
451
|
+
const { PuppeteerCrawler } = require('crawlee');
|
|
452
|
+
let result = false;
|
|
453
|
+
const crawler = new PuppeteerCrawler({
|
|
454
|
+
launchContext: {
|
|
455
|
+
launchOptions: {
|
|
456
|
+
headless: false, // Open browser for manual login if needed
|
|
457
|
+
executablePath: process.env.PUPPETEER_EXECUTABLE_PATH || undefined,
|
|
458
|
+
args: ['--no-sandbox', '--disable-setuid-sandbox']
|
|
459
|
+
}
|
|
460
|
+
},
|
|
461
|
+
requestHandler: async ({ page }) => {
|
|
462
|
+
result = await this.authManager.refreshSession(page);
|
|
463
|
+
},
|
|
464
|
+
maxRequestsPerCrawl: 1,
|
|
465
|
+
navigationTimeoutSecs: 60
|
|
466
|
+
});
|
|
467
|
+
await crawler.run([{ url: 'https://www.instagram.com/' }]);
|
|
468
|
+
return result;
|
|
469
|
+
}
|
|
470
|
+
/**
|
|
471
|
+
* Pauses execution for specified milliseconds
|
|
472
|
+
*/
|
|
473
|
+
sleep(ms) {
|
|
474
|
+
return new Promise(resolve => setTimeout(resolve, ms));
|
|
475
|
+
}
|
|
476
|
+
}
|
|
477
|
+
exports.MediaScraper = MediaScraper;
|
|
478
|
+
/**
|
|
479
|
+
* Backward compatibility alias
|
|
480
|
+
* @deprecated Use MediaScraper instead
|
|
481
|
+
*/
|
|
482
|
+
class InstaScraper extends MediaScraper {
|
|
483
|
+
constructor() {
|
|
484
|
+
super();
|
|
485
|
+
logger_1.log.warn('InstaScraper is deprecated. Use MediaScraper for multi-platform support.');
|
|
486
|
+
}
|
|
487
|
+
}
|
|
488
|
+
exports.InstaScraper = InstaScraper;
|
|
489
|
+
// Export logger for external use
|
|
490
|
+
var logger_2 = require("./logger");
|
|
491
|
+
Object.defineProperty(exports, "log", { enumerable: true, get: function () { return logger_2.log; } });
|
|
492
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,qCAA+B;AAC/B,2BAAiD;AACjD,+BAA4B;AAC5B,qCAA2C;AAC3C,+CAAiC;AAKjC,2CAAgE;AAChE,uCAAiG;AACjG,uCAA6C;AAC7C,qCAAyC;AACzC,2CAAgD;AAEhD,6BAA6B;AAC7B,MAAM,CAAC,MAAM,EAAE,CAAC;AAEhB,6CAA6C;AAC7C,0CAAwB;AACxB,8CAA4B;AAC5B,4CAA0B;AAC1B,4CAA0B;AAC1B,2CAAyB;AACzB,8CAA4B;AAE5B;;;GAGG;AACH,MAAa,gBAAgB;IAC3B;;OAEG;IACK,KAAK,CAAC,EAAU;QACtB,OAAO,IAAI,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,CAAC;IACzD,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,eAAe,CAAC,IAAU,EAAE,cAAuC;QACvE,IAAI,QAAwB,CAAC;QAE7B,IAAI,OAAO,cAAc,KAAK,QAAQ,EAAE,CAAC;YACvC,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,IAAA,iBAAY,EAAC,cAAc,EAAE,OAAO,CAAC,CAAC,CAAC;QAC/D,CAAC;aAAM,CAAC;YACN,QAAQ,GAAG,cAAc,CAAC;QAC5B,CAAC;QAED,KAAK,MAAM,IAAI,IAAI,QAAQ,EAAE,CAAC;YAC5B,YAAG,CAAC,IAAI,CAAC,cAAc,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC;YACpC,IAAI,CAAC;gBACH,QAAQ,IAAI,CAAC,MAAM,EAAE,CAAC;oBACpB,KAAK,cAAc;wBACjB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,IAAI,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;4BAC5C,MAAM,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;4BACjC,YAAG,CAAC,IAAI,CAAC,4BAA4B,CAAC,GAAG,CAAC,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC;4BAC9D,MAAM,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;wBACxB,CAAC;wBACD,MAAM;oBAER,KAAK,aAAa;wBAChB,IAAI,aAAa,GAAG,KAAK,CAAC;wBAC1B,KAAK,MAAM,QAAQ,IAAI,IAAI,CAAC,SAAS,IAAI,EAAE,EAAE,CAAC;4BAC5C,IAAI,CAAC;gCACH,MAAM,IAAI,CAAC,eAAe,CAAC,QAAQ,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC;gCACxD,MAAM,IAAI,CAAC,KAAK,CAAC,QAAQ,EAAE,EAAE,UAAU,EAAE,CAAC,EAAE,CAAC,CAAC;gCAC9C,YAAG,CAAC,IAAI,CAAC,mCAAmC,QAAQ,EAAE,CAAC,CAAC;gCACxD,aAAa,GAAG,IAAI,CAAC;gCACrB,MAAM;4BACR,CAAC;4BAAC,OAAO,CAAC,EAAE,CAAC,CAAA,CAAC;wBAChB,CAAC;wBACD,IAAI,CAAC,aAAa,IAAI,IAAI,CAAC,QAAQ,KAAK,YAAY,IAAI,IAAI,CAAC,YAAY,EAAE,CAAC;4BAC1E,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,CAAC,IAAY,EAAE,EAAE;gCACjD,MAAM,QAAQ,GAAG,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,gBAAgB,CAAC,GAAG,CAAC,CAAC,CAAC;gCAC5D,MAAM,EAAE,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,WAAW,EAAE,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC;gCAC7D,IAAI,EAAE,IAAI,EAAE,YAAY,WAAW,EAAE,CAAC;oCACpC,MAAM,KAAK,GAAG,IAAI,UAAU,CAAC,UAAU,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC;oCAC5D,EAAE,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;oCACxB,OAAO,IAAI,CAAC;gCACd,CAAC;gCACD,OAAO,KAAK,CAAC;4BACf,CAAC,EAAE,IAAI,CAAC,YAAY,CAAC,CAAC;4BACtB,IAAI,KAAK;gCAAE,YAAG,CAAC,IAAI,CAAC,8BAA8B,IAAI,CAAC,YAAY,EAAE,CAAC,CAAC;wBACzE,CAAC;wBACD,MAAM;oBAER,KAAK,MAAM;wBACT,MAAM,YAAY,GAAG,IAAI,CAAC,YAAY,IAAI,IAAI,CAAC;wBAC/C,KAAK,MAAM,QAAQ,IAAI,IAAI,CAAC,SAAS,IAAI,EAAE,EAAE,CAAC;4BAC5C,IAAI,CAAC;gCACH,MAAM,IAAI,CAAC,eAAe,CAAC,QAAQ,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC;gCACxD,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC;gCACvC,IAAI,OAAO,EAAE,CAAC;oCACZ,MAAM,GAAG,GAAG,MAAM,OAAO,CAAC,WAAW,EAAE,CAAC;oCACxC,IAAI,GAAG,EAAE,CAAC;wCACR,MAAM,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,GAAG,CAAC,KAAK,GAAG,CAAC,EAAE,GAAG,CAAC,CAAC,GAAG,GAAG,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;wCACrE,MAAM,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC;wCACxB,MAAM,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC;wCAC/B,MAAM,IAAI,CAAC,KAAK,CAAC,EAAE,EAAE,CAAC;wCACtB,YAAG,CAAC,IAAI,CAAC,2BAA2B,YAAY,UAAU,QAAQ,EAAE,CAAC,CAAC;wCACtE,MAAM;oCACR,CAAC;gCACH,CAAC;4BACH,CAAC;4BAAC,OAAO,CAAC,EAAE,CAAC,CAAA,CAAC;wBAChB,CAAC;wBACD,MAAM;oBAER,KAAK,UAAU;wBACb,IAAI,IAAI,CAAC,GAAG,EAAE,CAAC;4BACb,wBAAwB;4BACxB,IAAI,IAAI,CAAC,SAAS,EAAE,CAAC;gCACnB,KAAK,MAAM,GAAG,IAAI,IAAI,CAAC,SAAS,EAAE,CAAC;oCACjC,MAAM,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;gCAChC,CAAC;4BACH,CAAC;4BAED,qBAAqB;4BACrB,MAAM,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,GAAU,CAAC,CAAC,CAAC,8BAA8B;4BAE1E,oBAAoB;4BACpB,IAAI,IAAI,CAAC,SAAS,EAAE,CAAC;gCACnB,KAAK,MAAM,GAAG,IAAI,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,EAAE,CAAC;oCAC3C,MAAM,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC;gCAC9B,CAAC;4BACH,CAAC;4BAED,YAAG,CAAC,IAAI,CAAC,kBAAkB,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC;wBAChG,CAAC;wBACD,MAAM;oBAER,KAAK,OAAO,CAAC;oBACb;wBACE,IAAI,OAAO,GAAG,KAAK,CAAC;wBAEpB,KAAK,MAAM,QAAQ,IAAI,IAAI,CAAC,SAAS,IAAI,EAAE,EAAE,CAAC;4BAC5C,IAAI,CAAC;gCACH,MAAM,IAAI,CAAC,eAAe,CAAC,QAAQ,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC;gCACxD,MAAM,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;gCAC3B,YAAG,CAAC,IAAI,CAAC,4BAA4B,QAAQ,EAAE,CAAC,CAAC;gCACjD,OAAO,GAAG,IAAI,CAAC;gCACf,MAAM;4BACR,CAAC;4BAAC,OAAO,CAAC,EAAE,CAAC,CAAA,CAAC;wBAChB,CAAC;wBAED,IAAI,CAAC,OAAO,IAAI,IAAI,CAAC,QAAQ,KAAK,YAAY,IAAI,IAAI,CAAC,YAAY,EAAE,CAAC;4BACpE,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,CAAC,IAAY,EAAE,EAAE;gCACjD,MAAM,OAAO,GAAG,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,gBAAgB,CAAC,QAAQ,CAAC,CAAC,CAAC;gCAChE,MAAM,GAAG,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,WAAW,EAAE,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC;gCAC7D,IAAI,GAAG,EAAE,CAAC;oCACR,GAAG,CAAC,KAAK,EAAE,CAAC;oCACZ,OAAO,IAAI,CAAC;gCACd,CAAC;gCACD,OAAO,KAAK,CAAC;4BACf,CAAC,EAAE,IAAI,CAAC,YAAY,CAAC,CAAC;4BACtB,IAAI,KAAK;gCAAE,YAAG,CAAC,IAAI,CAAC,uBAAuB,IAAI,CAAC,YAAY,EAAE,CAAC,CAAC;wBAClE,CAAC;wBACD,MAAM;gBACV,CAAC;gBAED,IAAI,IAAI,CAAC,IAAI;oBAAE,MAAM,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YAC7C,CAAC;YAAC,OAAO,CAAC,EAAE,CAAC;gBACX,IAAI,CAAC,IAAI,CAAC,QAAQ;oBAAE,MAAM,CAAC,CAAC;gBAC5B,YAAG,CAAC,IAAI,CAAC,yBAAyB,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC;YACjD,CAAC;QACH,CAAC;IACH,CAAC;CACF;AA1ID,4CA0IC;AAED;;;GAGG;AACH,MAAa,YAAY;IASvB;;OAEG;IACH;QANQ,oBAAe,GAAkB,IAAI,CAAC;QACtC,iBAAY,GAAqC,IAAI,CAAC;QAM5D,IAAI,CAAC,gBAAgB,GAAG,IAAI,gBAAgB,EAAE,CAAC;QAC/C,IAAI,CAAC,gBAAgB,GAAG,IAAI,0BAAgB,EAAE,CAAC;QAC/C,IAAI,CAAC,aAAa,GAAG,IAAI,sBAAa,EAAE,CAAC;QACzC,IAAI,CAAC,aAAa,GAAG,IAAI,uBAAa,EAAE,CAAC;QACzC,IAAI,CAAC,WAAW,GAAG,IAAI,2BAAe,EAAE,CAAC;QAEzC,8BAA8B;QAC9B,6BAAiB,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC;IAC3E,CAAC;IAED;;OAEG;IACH,GAAG,CAAC,MAAc;QAChB,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;IACtC,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,KAAK,CAAC,WAA6B;QACvC,oCAAoC;QACpC,MAAM,OAAO,GAAG,IAAI,0BAAgB,CAAC;YACnC,iBAAiB,EAAE,CAAC;YACpB,yBAAyB,EAAE,EAAE;YAC7B,aAAa,EAAE;gBACb,aAAa,EAAE;oBACb,cAAc,EAAE,OAAO,CAAC,GAAG,CAAC,yBAAyB,IAAI,SAAS;iBACnE;aACF;YACD,cAAc,EAAE,KAAK,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE;gBACjC,YAAG,CAAC,IAAI,CAAC,8CAA8C,CAAC,CAAC;gBACzD,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,IAAI,EAAE,WAAW,CAAC,CAAC;gBAChE,kEAAkE;YACpE,CAAC;SACF,CAAC,CAAC;QAEH,MAAM,OAAO,CAAC,GAAG,CAAC,CAAC,2BAA2B,CAAC,CAAC,CAAC;QACjD,OAAO,IAAI,CAAC,WAAW,CAAC,eAAe,EAAE,CAAC;IAC5C,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,MAAM;QACV,MAAM,IAAI,CAAC,WAAW,CAAC,MAAM,EAAE,CAAC;IAClC,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,MAAM,CAAC,GAAW,EAAE,UAA2B,EAAE;QACrD,+BAA+B;QAC/B,MAAM,cAAc,GAAG,IAAI,CAAC,aAAa,CAAC,iBAAiB,CAAC,GAAG,CAAC,CAAC;QAEjE,IAAI,CAAC,cAAc,EAAE,CAAC;YACpB,MAAM,IAAI,KAAK,CAAC,qCAAqC,GAAG,0BAA0B,IAAI,CAAC,aAAa,CAAC,kBAAkB,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QAC3J,CAAC;QAED,YAAG,CAAC,IAAI,CAAC,yBAAyB,cAAc,CAAC,IAAI,EAAE,CAAC,CAAC;QAEzD,+BAA+B;QAC/B,MAAM,IAAI,CAAC,aAAa,CAAC,WAAW,CAAC,gBAAgB,EAAE,GAAG,EAAE,OAAO,CAAC,CAAC;QAErE,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QAC7B,MAAM,WAAW,GAAG,IAAI,CAAC,WAAW,CAAC;QACrC,MAAM,UAAU,GAAG,OAAO,CAAC,UAAU,KAAK,KAAK,IAAI,WAAW,CAAC,eAAe,EAAE,CAAC;QAEjF,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;YACrC,MAAM,OAAO,GAAG,IAAI,0BAAgB,CAAC;gBACnC,iBAAiB,EAAE,OAAO,CAAC,OAAO,IAAI,CAAC;gBACvC,yBAAyB,EAAE,OAAO,CAAC,OAAO,IAAI,EAAE;gBAChD,aAAa,EAAE;oBACb,aAAa,EAAE;wBACb,cAAc,EAAE,OAAO,CAAC,GAAG,CAAC,yBAAyB,IAAI,SAAS;qBACnE;iBACF;gBACD,kCAAkC;gBAClC,kBAAkB,EAAE;oBAClB,KAAK,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE;wBACjB,IAAI,UAAU,EAAE,CAAC;4BACf,YAAG,CAAC,IAAI,CAAC,kDAAkD,CAAC,CAAC;4BAC7D,MAAM,WAAW,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC;wBACvC,CAAC;oBACH,CAAC;iBACF;gBACD,cAAc,EAAE,KAAK,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,EAAE,EAAE;oBAC1C,IAAI,CAAC;wBACH,YAAG,CAAC,IAAI,CAAC,8BAA8B,CAAC,CAAC;wBAEzC,iBAAiB;wBACjB,MAAM,IAAI,CAAC,YAAY,CAAC,uHAAuH,CAAC,CAAC;wBAEjJ,iDAAiD;wBACjD,MAAM,IAAI,CAAC,sBAAsB,CAAC,IAAI,CAAC,CAAC;wBACxC,IAAI,CAAC,EAAE,CAAC,SAAS,EAAE,CAAC,GAAG,EAAE,EAAE;4BACzB,MAAM,YAAY,GAAG,GAAG,CAAC,YAAY,EAAE,CAAC;4BACxC,IAAI,CAAC,YAAY,EAAE,MAAM,CAAC,CAAC,QAAQ,CAAC,YAAY,CAAC,EAAE,CAAC;gCAClD,GAAG,CAAC,KAAK,EAAE,CAAC;4BACd,CAAC;iCAAM,CAAC;gCACN,GAAG,CAAC,QAAQ,EAAE,CAAC;4BACjB,CAAC;wBACH,CAAC,CAAC,CAAC;wBAEH,sBAAsB;wBACtB,MAAM,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,EAAE,SAAS,EAAE,kBAAkB,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC,CAAC;wBAExE,6BAA6B;wBAC7B,MAAM,UAAU,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,GAAG,EAAE;4BAC1C,MAAM,eAAe,GAAG;gCACtB,oBAAoB;gCACpB,mBAAmB;gCACnB,iBAAiB;gCACjB,yCAAyC;6BAC1C,CAAC;4BAEF,MAAM,QAAQ,GAAG,QAAQ,CAAC,IAAI,CAAC,SAAS,CAAC;4BACzC,MAAM,UAAU,GAAG,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC;4BAExC,OAAO,eAAe,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,CACtC,QAAQ,CAAC,QAAQ,CAAC,SAAS,CAAC,IAAI,UAAU,CAAC,QAAQ,CAAC,gBAAgB,CAAC,CACtE,CAAC;wBACJ,CAAC,CAAC,CAAC;wBAEH,IAAI,UAAU,EAAE,CAAC;4BACf,YAAG,CAAC,IAAI,CAAC,oCAAoC,CAAC,CAAC;4BAE/C,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,eAAe,EAAE,EAAE,CAAC;gCACxC,MAAM,IAAI,KAAK,CAAC,kFAAkF,CAAC,CAAC;4BACtG,CAAC;4BAED,YAAG,CAAC,IAAI,CAAC,sCAAsC,CAAC,CAAC;4BAEjD,sDAAsD;4BACtD,MAAM,IAAI,CAAC,IAAI,CAAC,4BAA4B,EAAE,EAAE,SAAS,EAAE,kBAAkB,EAAE,CAAC,CAAC;4BACjF,MAAM,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC;4BAEhC,2CAA2C;4BAC3C,MAAM,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,EAAE,SAAS,EAAE,kBAAkB,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC,CAAC;4BAExE,4BAA4B;4BAC5B,MAAM,YAAY,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,GAAG,EAAE;gCAC5C,MAAM,QAAQ,GAAG,QAAQ,CAAC,IAAI,CAAC,SAAS,CAAC;gCACzC,OAAO,QAAQ,CAAC,QAAQ,CAAC,oBAAoB,CAAC,IAAI,QAAQ,CAAC,QAAQ,CAAC,iBAAiB,CAAC,CAAC;4BACzF,CAAC,CAAC,CAAC;4BAEH,IAAI,YAAY,EAAE,CAAC;gCACjB,MAAM,IAAI,KAAK,CAAC,6FAA6F,CAAC,CAAC;4BACjH,CAAC;4BAED,YAAG,CAAC,IAAI,CAAC,qDAAqD,CAAC,CAAC;wBAClE,CAAC;wBAED,mBAAmB;wBACnB,MAAM,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE;4BAC3B,SAAS,EAAE,kBAAkB;4BAC7B,OAAO,EAAE,KAAK;yBACf,CAAC,CAAC;wBACH,MAAM,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;wBAEvB,yCAAyC;wBACzC,IAAI,cAAc,CAAC,QAAQ,EAAE,CAAC;4BAC5B,MAAM,IAAI,CAAC,gBAAgB,CAAC,eAAe,CAAC,IAAI,EAAE,cAAc,CAAC,QAAQ,CAAC,CAAC;wBAC7E,CAAC;wBAED,+BAA+B;wBAC/B,IAAI,IAAI,GAAG,MAAM,cAAc,CAAC,MAAM,CAAC,IAAI,EAAE,OAAO,CAAC,GAAG,CAAC,CAAC;wBAE1D,gCAAgC;wBAChC,IAAI,CAAC,KAAK,GAAG,MAAM,IAAI,CAAC,aAAa,CAAC,WAAW,CAAC,kBAAkB,EAAE,IAAI,CAAC,KAAK,CAAC,IAAI,IAAI,CAAC,KAAK,CAAC;wBAEhG,6BAA6B;wBAC7B,IAAI,GAAG,MAAM,IAAI,CAAC,aAAa,CAAC,WAAW,CAAC,eAAe,EAAE,IAAI,CAAC,IAAI,IAAI,CAAC;wBAE3E,0BAA0B;wBAC1B,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC;4BAClB,MAAM,IAAI,KAAK,CAAC,2BAA2B,CAAC,CAAC;wBAC/C,CAAC;wBAED,4BAA4B;wBAC5B,IAAI,OAAO,CAAC,UAAU,EAAE,CAAC;4BACvB,MAAM,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE,OAAO,CAAC,UAAU,CAAC,CAAC;wBAClD,CAAC;wBAED,YAAG,CAAC,IAAI,CAAC,0BAA0B,IAAI,CAAC,QAAQ,UAAU,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC;wBAE1E,iBAAiB;wBACjB,MAAM,YAAY,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS,CAAC;wBAC5C,IAAI,CAAC,gBAAgB,CAAC,aAAa,CAAC,IAAI,EAAE,YAAY,EAAE,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,CAAC;wBAExG,OAAO,CAAC,IAAI,CAAC,CAAC;oBAChB,CAAC;oBAAC,OAAO,KAAK,EAAE,CAAC;wBACf,YAAG,CAAC,KAAK,CAAC,kBAAkB,EAAE,KAAK,CAAC,CAAC;wBAErC,uBAAuB;wBACvB,MAAM,IAAI,CAAC,aAAa,CAAC,WAAW,CAAC,SAAS,EAAE,KAAc,CAAC,CAAC;wBAEhE,wBAAwB;wBACxB,MAAM,YAAY,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS,CAAC;wBAC5C,IAAI,CAAC,gBAAgB,CAAC,aAAa,CAAC,KAAK,EAAE,YAAY,EAAE,CAAC,EAAE,CAAC,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;wBAEvH,MAAM,CAAC,KAAK,CAAC,CAAC;oBAChB,CAAC;gBACH,CAAC;gBACD,oBAAoB,EAAE,KAAK,EAAE,EAAE,OAAO,EAAE,KAAK,EAAE,EAAE,EAAE;oBACjD,YAAG,CAAC,KAAK,CAAC,sBAAsB,OAAO,CAAC,GAAG,GAAG,EAAE,KAAK,CAAC,CAAC;oBACvD,MAAM,CAAC,KAAK,CAAC,CAAC;gBAChB,CAAC;aACF,CAAC,CAAC;YAEH,OAAO,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;QACnC,CAAC,CAAC,CAAC;IACL,CAAC;IAED;;;OAGG;IACH,KAAK,CAAC,UAAU,CAAC,GAAW,EAAE,UAA2B,EAAE;QACzD,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC;QAE7C,oEAAoE;QACpE,MAAM,aAAa,GAAsB;YACvC,GAAG,EAAE,IAAI,CAAC,GAAG;YACb,OAAO,EAAE,IAAI,CAAC,OAAO;YACrB,YAAY,EAAE,IAAI,CAAC,YAAY;YAC/B,KAAK,EAAE,IAAI,CAAC,KAAK;YACjB,QAAQ,EAAE,IAAI,CAAC,QAAQ;YACvB,oDAAoD;YACpD,MAAM,EAAE,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC;SACzC,CAAC;QAEF,OAAO,aAAa,CAAC;IACvB,CAAC;IAEO,KAAK,CAAC,UAAU,CAAC,IAAe,EAAE,UAAmB;QAC3D,IAAI,CAAC;YACH,MAAM,QAAQ,GAAG,GAAG,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,OAAO,IAAI,MAAM,OAAO,CAAC;YACnE,MAAM,QAAQ,GAAG,UAAU,CAAC,CAAC,CAAC,IAAA,WAAI,EAAC,UAAU,EAAE,QAAQ,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC;YAEpE,IAAA,kBAAa,EAAC,QAAQ,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;YACvD,YAAG,CAAC,IAAI,CAAC,mBAAmB,QAAQ,EAAE,CAAC,CAAC;QAC1C,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,YAAG,CAAC,KAAK,CAAC,sBAAsB,EAAE,KAAK,CAAC,CAAC;YACzC,MAAM,IAAI,KAAK,CAAC,gCAAgC,KAAK,EAAE,CAAC,CAAC;QAC3D,CAAC;IACH,CAAC;IAED;;OAEG;IACH,eAAe,CAAC,QAAiC;QAC/C,IAAI,CAAC,YAAY,GAAG,QAAQ,CAAC;IAC/B,CAAC;IAED;;OAEG;IACH,UAAU;QACR,OAAO,IAAI,CAAC,gBAAgB,CAAC,UAAU,EAAE,CAAC;IAC5C,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,SAAS;QACb,OAAO,MAAM,IAAI,CAAC,aAAa,CAAC,WAAW,EAAE,CAAC;IAChD,CAAC;IAED;;OAEG;IACH,oBAAoB;QAClB,OAAO,IAAI,CAAC,gBAAgB,CAAC,oBAAoB,EAAE,CAAC;IACtD,CAAC;IAED;;OAEG;IACH,gBAAgB;QACd,OAAO,IAAI,CAAC,aAAa,CAAC;IAC5B,CAAC;IAED;;OAEG;IACH,cAAc;QACZ,OAAO,IAAI,CAAC,WAAW,CAAC;IAC1B,CAAC;IAED,KAAK,CAAC,cAAc;QAClB,MAAM,EAAE,gBAAgB,EAAE,GAAG,OAAO,CAAC,SAAS,CAAC,CAAC;QAChD,IAAI,MAAM,GAAG,KAAK,CAAC;QAEnB,MAAM,OAAO,GAAG,IAAI,gBAAgB,CAAC;YACnC,aAAa,EAAE;gBACb,aAAa,EAAE;oBACb,QAAQ,EAAE,KAAK,EAAE,0CAA0C;oBAC3D,cAAc,EAAE,OAAO,CAAC,GAAG,CAAC,yBAAyB,IAAI,SAAS;oBAClE,IAAI,EAAE,CAAC,cAAc,EAAE,0BAA0B,CAAC;iBACnD;aACF;YACD,cAAc,EAAE,KAAK,EAAE,EAAE,IAAI,EAAiB,EAAE,EAAE;gBAChD,MAAM,GAAG,MAAM,IAAI,CAAC,WAAW,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC;YACvD,CAAC;YACD,mBAAmB,EAAE,CAAC;YACtB,qBAAqB,EAAE,EAAE;SAC1B,CAAC,CAAC;QAEH,MAAM,OAAO,CAAC,GAAG,CAAC,CAAC,EAAE,GAAG,EAAE,4BAA4B,EAAE,CAAC,CAAC,CAAC;QAC3D,OAAO,MAAM,CAAC;IAChB,CAAC;IAED;;OAEG;IACK,KAAK,CAAC,EAAU;QACtB,OAAO,IAAI,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,CAAC;IACzD,CAAC;CACF;AA5UD,oCA4UC;AAED;;;GAGG;AACH,MAAa,YAAa,SAAQ,YAAY;IAC5C;QACE,KAAK,EAAE,CAAC;QACR,YAAG,CAAC,IAAI,CAAC,0EAA0E,CAAC,CAAC;IACvF,CAAC;CACF;AALD,oCAKC;AAED,iCAAiC;AACjC,mCAA+B;AAAtB,6FAAA,GAAG,OAAA"}
|
package/dist/logger.d.ts
ADDED
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Structured Logger with format: TIMESTAMP | LEVEL | module:function:line - message
|
|
3
|
+
*/
|
|
4
|
+
declare class Logger {
|
|
5
|
+
private logFile;
|
|
6
|
+
private minLevel;
|
|
7
|
+
constructor();
|
|
8
|
+
private initLogFile;
|
|
9
|
+
private getCallerInfo;
|
|
10
|
+
private formatTimestamp;
|
|
11
|
+
private formatMessage;
|
|
12
|
+
private shouldLog;
|
|
13
|
+
private writeToFile;
|
|
14
|
+
private log;
|
|
15
|
+
debug(message: string, ...args: any[]): void;
|
|
16
|
+
info(message: string, ...args: any[]): void;
|
|
17
|
+
warn(message: string, ...args: any[]): void;
|
|
18
|
+
error(message: string, ...args: any[]): void;
|
|
19
|
+
}
|
|
20
|
+
export declare const log: Logger;
|
|
21
|
+
export default log;
|
|
22
|
+
//# sourceMappingURL=logger.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"logger.d.ts","sourceRoot":"","sources":["../src/logger.ts"],"names":[],"mappings":"AAAA;;GAEG;AAcH,cAAM,MAAM;IACV,OAAO,CAAC,OAAO,CAAuB;IACtC,OAAO,CAAC,QAAQ,CAAqB;;IAOrC,OAAO,CAAC,WAAW;IAsBnB,OAAO,CAAC,aAAa;IAqBrB,OAAO,CAAC,eAAe;IAKvB,OAAO,CAAC,aAAa;IAcrB,OAAO,CAAC,SAAS;IAIjB,OAAO,CAAC,WAAW;IAQnB,OAAO,CAAC,GAAG;IAkBX,KAAK,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,IAAI,EAAE,GAAG,EAAE,GAAG,IAAI;IAI5C,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,IAAI,EAAE,GAAG,EAAE,GAAG,IAAI;IAI3C,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,IAAI,EAAE,GAAG,EAAE,GAAG,IAAI;IAI3C,KAAK,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,IAAI,EAAE,GAAG,EAAE,GAAG,IAAI;CAG7C;AAED,eAAO,MAAM,GAAG,QAAe,CAAC;AAChC,eAAe,GAAG,CAAC"}
|