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.
Files changed (63) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +153 -0
  3. package/dist/auth-fast.d.ts +32 -0
  4. package/dist/auth-fast.d.ts.map +1 -0
  5. package/dist/auth-fast.js +505 -0
  6. package/dist/auth-fast.js.map +1 -0
  7. package/dist/auth.d.ts +80 -0
  8. package/dist/auth.d.ts.map +1 -0
  9. package/dist/auth.js +370 -0
  10. package/dist/auth.js.map +1 -0
  11. package/dist/benchmark.d.ts +48 -0
  12. package/dist/benchmark.d.ts.map +1 -0
  13. package/dist/benchmark.js +125 -0
  14. package/dist/benchmark.js.map +1 -0
  15. package/dist/health.d.ts +28 -0
  16. package/dist/health.d.ts.map +1 -0
  17. package/dist/health.js +108 -0
  18. package/dist/health.js.map +1 -0
  19. package/dist/index.d.ts +101 -0
  20. package/dist/index.d.ts.map +1 -0
  21. package/dist/index.js +492 -0
  22. package/dist/index.js.map +1 -0
  23. package/dist/logger.d.ts +22 -0
  24. package/dist/logger.d.ts.map +1 -0
  25. package/dist/logger.js +151 -0
  26. package/dist/logger.js.map +1 -0
  27. package/dist/memory.d.ts +56 -0
  28. package/dist/memory.d.ts.map +1 -0
  29. package/dist/memory.js +144 -0
  30. package/dist/memory.js.map +1 -0
  31. package/dist/metrics.d.ts +19 -0
  32. package/dist/metrics.d.ts.map +1 -0
  33. package/dist/metrics.js +79 -0
  34. package/dist/metrics.js.map +1 -0
  35. package/dist/parallel.d.ts +59 -0
  36. package/dist/parallel.d.ts.map +1 -0
  37. package/dist/parallel.js +202 -0
  38. package/dist/parallel.js.map +1 -0
  39. package/dist/platforms/index.d.ts +7 -0
  40. package/dist/platforms/index.d.ts.map +1 -0
  41. package/dist/platforms/index.js +13 -0
  42. package/dist/platforms/index.js.map +1 -0
  43. package/dist/platforms/instagram.d.ts +6 -0
  44. package/dist/platforms/instagram.d.ts.map +1 -0
  45. package/dist/platforms/instagram.js +189 -0
  46. package/dist/platforms/instagram.js.map +1 -0
  47. package/dist/plugins.d.ts +128 -0
  48. package/dist/plugins.d.ts.map +1 -0
  49. package/dist/plugins.js +107 -0
  50. package/dist/plugins.js.map +1 -0
  51. package/dist/test-integration.d.ts +2 -0
  52. package/dist/test-integration.d.ts.map +1 -0
  53. package/dist/test-integration.js +46 -0
  54. package/dist/test-integration.js.map +1 -0
  55. package/dist/types.d.ts +75 -0
  56. package/dist/types.d.ts.map +1 -0
  57. package/dist/types.js +6 -0
  58. package/dist/types.js.map +1 -0
  59. package/dist/worker.d.ts +2 -0
  60. package/dist/worker.d.ts.map +1 -0
  61. package/dist/worker.js +23 -0
  62. package/dist/worker.js.map +1 -0
  63. 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":"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"}
@@ -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"}