instasave-sdk 1.2.1 → 1.2.5

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 (210) hide show
  1. package/CHANGELOG.md +47 -0
  2. package/README.md +1 -1
  3. package/dist/{auth-fast.d.ts → auth/auth-manager.d.ts} +4 -12
  4. package/dist/auth/auth-manager.d.ts.map +1 -0
  5. package/dist/{auth-fast.js → auth/auth-manager.js} +26 -68
  6. package/dist/auth/auth-manager.js.map +1 -0
  7. package/dist/auth/index.d.ts +4 -0
  8. package/dist/auth/index.d.ts.map +1 -0
  9. package/dist/auth/index.js +8 -0
  10. package/dist/auth/index.js.map +1 -0
  11. package/dist/auth/session-manager.d.ts +8 -0
  12. package/dist/auth/session-manager.d.ts.map +1 -0
  13. package/dist/auth/session-manager.js +57 -0
  14. package/dist/auth/session-manager.js.map +1 -0
  15. package/dist/browser/browser-pool.d.ts.map +1 -0
  16. package/dist/{browser-pool.js → browser/browser-pool.js} +1 -1
  17. package/dist/browser/browser-pool.js.map +1 -0
  18. package/dist/browser/crawler-manager.d.ts.map +1 -0
  19. package/dist/{crawler-manager.js → browser/crawler-manager.js} +6 -6
  20. package/dist/browser/crawler-manager.js.map +1 -0
  21. package/dist/browser/index.d.ts +3 -0
  22. package/dist/browser/index.d.ts.map +1 -0
  23. package/dist/browser/index.js +8 -0
  24. package/dist/browser/index.js.map +1 -0
  25. package/dist/core/index.d.ts +3 -0
  26. package/dist/core/index.d.ts.map +1 -0
  27. package/dist/core/index.js +8 -0
  28. package/dist/core/index.js.map +1 -0
  29. package/dist/core/media-scraper.d.ts +107 -0
  30. package/dist/core/media-scraper.d.ts.map +1 -0
  31. package/dist/core/media-scraper.js +496 -0
  32. package/dist/core/media-scraper.js.map +1 -0
  33. package/dist/core/workflow-executor.d.ts +17 -0
  34. package/dist/core/workflow-executor.d.ts.map +1 -0
  35. package/dist/core/workflow-executor.js +146 -0
  36. package/dist/core/workflow-executor.js.map +1 -0
  37. package/dist/index.d.ts +13 -132
  38. package/dist/index.d.ts.map +1 -1
  39. package/dist/index.js +31 -635
  40. package/dist/index.js.map +1 -1
  41. package/dist/platforms/instagram/constants.d.ts +25 -0
  42. package/dist/platforms/instagram/constants.d.ts.map +1 -0
  43. package/dist/platforms/instagram/constants.js +34 -0
  44. package/dist/platforms/instagram/constants.js.map +1 -0
  45. package/dist/platforms/instagram/extractors/carousel.d.ts +21 -0
  46. package/dist/platforms/instagram/extractors/carousel.d.ts.map +1 -0
  47. package/dist/platforms/instagram/extractors/carousel.js +64 -0
  48. package/dist/platforms/instagram/extractors/carousel.js.map +1 -0
  49. package/dist/platforms/instagram/extractors/common.d.ts +17 -0
  50. package/dist/platforms/instagram/extractors/common.d.ts.map +1 -0
  51. package/dist/platforms/instagram/extractors/common.js +67 -0
  52. package/dist/platforms/instagram/extractors/common.js.map +1 -0
  53. package/dist/platforms/instagram/extractors/metadata.d.ts +24 -0
  54. package/dist/platforms/instagram/extractors/metadata.d.ts.map +1 -0
  55. package/dist/platforms/instagram/extractors/metadata.js +129 -0
  56. package/dist/platforms/instagram/extractors/metadata.js.map +1 -0
  57. package/dist/platforms/instagram/extractors/profile.d.ts +16 -0
  58. package/dist/platforms/instagram/extractors/profile.d.ts.map +1 -0
  59. package/dist/platforms/instagram/extractors/profile.js +54 -0
  60. package/dist/platforms/instagram/extractors/profile.js.map +1 -0
  61. package/dist/platforms/{instagram.d.ts → instagram/index.d.ts} +2 -2
  62. package/dist/platforms/instagram/index.d.ts.map +1 -0
  63. package/dist/platforms/instagram/index.js +53 -0
  64. package/dist/platforms/instagram/index.js.map +1 -0
  65. package/dist/plugins/index.d.ts +4 -0
  66. package/dist/plugins/index.d.ts.map +1 -0
  67. package/dist/plugins/index.js +21 -0
  68. package/dist/plugins/index.js.map +1 -0
  69. package/dist/plugins/plugin-manager.d.ts +50 -0
  70. package/dist/plugins/plugin-manager.d.ts.map +1 -0
  71. package/dist/{plugins.js → plugins/plugin-manager.js} +4 -4
  72. package/dist/plugins/plugin-manager.js.map +1 -0
  73. package/dist/types/auth.d.ts +15 -0
  74. package/dist/types/auth.d.ts.map +1 -0
  75. package/dist/types/auth.js +3 -0
  76. package/dist/types/auth.js.map +1 -0
  77. package/dist/types/browser.d.ts +28 -0
  78. package/dist/types/browser.d.ts.map +1 -0
  79. package/dist/types/browser.js +3 -0
  80. package/dist/types/browser.js.map +1 -0
  81. package/dist/{types.d.ts → types/common.d.ts} +15 -15
  82. package/dist/types/common.d.ts.map +1 -0
  83. package/dist/{types.js → types/common.js} +1 -1
  84. package/dist/types/common.js.map +1 -0
  85. package/dist/types/index.d.ts +7 -0
  86. package/dist/types/index.d.ts.map +1 -0
  87. package/dist/types/index.js +24 -0
  88. package/dist/types/index.js.map +1 -0
  89. package/dist/types/platform.d.ts +3 -0
  90. package/dist/types/platform.d.ts.map +1 -0
  91. package/dist/types/platform.js +20 -0
  92. package/dist/types/platform.js.map +1 -0
  93. package/dist/types/plugins.d.ts +61 -0
  94. package/dist/types/plugins.d.ts.map +1 -0
  95. package/dist/types/plugins.js +3 -0
  96. package/dist/types/plugins.js.map +1 -0
  97. package/dist/types/workflow.d.ts +17 -0
  98. package/dist/types/workflow.d.ts.map +1 -0
  99. package/dist/types/workflow.js +3 -0
  100. package/dist/types/workflow.js.map +1 -0
  101. package/dist/utils/config/config-parser.d.ts.map +1 -0
  102. package/dist/{config-parser.js → utils/config/config-parser.js} +5 -5
  103. package/dist/utils/config/config-parser.js.map +1 -0
  104. package/dist/utils/config/index.d.ts +2 -0
  105. package/dist/utils/config/index.d.ts.map +1 -0
  106. package/dist/utils/config/index.js +18 -0
  107. package/dist/utils/config/index.js.map +1 -0
  108. package/dist/{file-manager.d.ts → utils/file-manager.d.ts} +1 -1
  109. package/dist/utils/file-manager.d.ts.map +1 -0
  110. package/dist/utils/file-manager.js.map +1 -0
  111. package/dist/{health.d.ts → utils/health/health-checker.d.ts} +1 -1
  112. package/dist/utils/health/health-checker.d.ts.map +1 -0
  113. package/dist/{health.js → utils/health/health-checker.js} +1 -1
  114. package/dist/utils/health/health-checker.js.map +1 -0
  115. package/dist/utils/health/index.d.ts +2 -0
  116. package/dist/utils/health/index.d.ts.map +1 -0
  117. package/dist/utils/health/index.js +18 -0
  118. package/dist/utils/health/index.js.map +1 -0
  119. package/dist/utils/index.d.ts +8 -0
  120. package/dist/utils/index.d.ts.map +1 -0
  121. package/dist/utils/index.js +25 -0
  122. package/dist/utils/index.js.map +1 -0
  123. package/dist/utils/logger/index.d.ts +2 -0
  124. package/dist/utils/logger/index.d.ts.map +1 -0
  125. package/dist/utils/logger/index.js +18 -0
  126. package/dist/utils/logger/index.js.map +1 -0
  127. package/dist/utils/logger/logger.d.ts +44 -0
  128. package/dist/utils/logger/logger.d.ts.map +1 -0
  129. package/dist/utils/logger/logger.js +301 -0
  130. package/dist/utils/logger/logger.js.map +1 -0
  131. package/dist/utils/metrics/index.d.ts +2 -0
  132. package/dist/utils/metrics/index.d.ts.map +1 -0
  133. package/dist/utils/metrics/index.js +18 -0
  134. package/dist/utils/metrics/index.js.map +1 -0
  135. package/dist/{metrics.d.ts → utils/metrics/metrics-collector.d.ts} +1 -1
  136. package/dist/utils/metrics/metrics-collector.d.ts.map +1 -0
  137. package/dist/{metrics.js → utils/metrics/metrics-collector.js} +1 -1
  138. package/dist/utils/metrics/metrics-collector.js.map +1 -0
  139. package/dist/utils/progress-tracker.d.ts +11 -0
  140. package/dist/utils/progress-tracker.d.ts.map +1 -0
  141. package/dist/{progress-tracker.js → utils/progress-tracker.js} +0 -3
  142. package/dist/utils/progress-tracker.js.map +1 -0
  143. package/dist/utils/url-normalizer.d.ts.map +1 -0
  144. package/dist/utils/url-normalizer.js.map +1 -0
  145. package/package.json +1 -1
  146. package/dist/auth-fast.d.ts.map +0 -1
  147. package/dist/auth-fast.js.map +0 -1
  148. package/dist/auth.d.ts +0 -80
  149. package/dist/auth.d.ts.map +0 -1
  150. package/dist/auth.js +0 -370
  151. package/dist/auth.js.map +0 -1
  152. package/dist/benchmark.d.ts +0 -48
  153. package/dist/benchmark.d.ts.map +0 -1
  154. package/dist/benchmark.js +0 -125
  155. package/dist/benchmark.js.map +0 -1
  156. package/dist/browser-pool.d.ts.map +0 -1
  157. package/dist/browser-pool.js.map +0 -1
  158. package/dist/config-parser.d.ts.map +0 -1
  159. package/dist/config-parser.js.map +0 -1
  160. package/dist/crawler-manager.d.ts.map +0 -1
  161. package/dist/crawler-manager.js.map +0 -1
  162. package/dist/file-manager.d.ts.map +0 -1
  163. package/dist/file-manager.js.map +0 -1
  164. package/dist/health.d.ts.map +0 -1
  165. package/dist/health.js.map +0 -1
  166. package/dist/logger.d.ts +0 -22
  167. package/dist/logger.d.ts.map +0 -1
  168. package/dist/logger.js +0 -151
  169. package/dist/logger.js.map +0 -1
  170. package/dist/memory.d.ts +0 -56
  171. package/dist/memory.d.ts.map +0 -1
  172. package/dist/memory.js +0 -144
  173. package/dist/memory.js.map +0 -1
  174. package/dist/metrics.d.ts.map +0 -1
  175. package/dist/metrics.js.map +0 -1
  176. package/dist/parallel.d.ts +0 -59
  177. package/dist/parallel.d.ts.map +0 -1
  178. package/dist/parallel.js +0 -202
  179. package/dist/parallel.js.map +0 -1
  180. package/dist/platforms/instagram.d.ts.map +0 -1
  181. package/dist/platforms/instagram.js +0 -263
  182. package/dist/platforms/instagram.js.map +0 -1
  183. package/dist/plugins.d.ts +0 -132
  184. package/dist/plugins.d.ts.map +0 -1
  185. package/dist/plugins.js.map +0 -1
  186. package/dist/progress-tracker.d.ts +0 -15
  187. package/dist/progress-tracker.d.ts.map +0 -1
  188. package/dist/progress-tracker.js.map +0 -1
  189. package/dist/smart-logger.d.ts +0 -64
  190. package/dist/smart-logger.d.ts.map +0 -1
  191. package/dist/smart-logger.js +0 -149
  192. package/dist/smart-logger.js.map +0 -1
  193. package/dist/test-integration.d.ts +0 -2
  194. package/dist/test-integration.d.ts.map +0 -1
  195. package/dist/test-integration.js +0 -46
  196. package/dist/test-integration.js.map +0 -1
  197. package/dist/types.d.ts.map +0 -1
  198. package/dist/types.js.map +0 -1
  199. package/dist/url-normalizer.d.ts.map +0 -1
  200. package/dist/url-normalizer.js.map +0 -1
  201. package/dist/worker.d.ts +0 -2
  202. package/dist/worker.d.ts.map +0 -1
  203. package/dist/worker.js +0 -23
  204. package/dist/worker.js.map +0 -1
  205. /package/dist/{browser-pool.d.ts → browser/browser-pool.d.ts} +0 -0
  206. /package/dist/{crawler-manager.d.ts → browser/crawler-manager.d.ts} +0 -0
  207. /package/dist/{config-parser.d.ts → utils/config/config-parser.d.ts} +0 -0
  208. /package/dist/{file-manager.js → utils/file-manager.js} +0 -0
  209. /package/dist/{url-normalizer.d.ts → utils/url-normalizer.d.ts} +0 -0
  210. /package/dist/{url-normalizer.js → utils/url-normalizer.js} +0 -0
@@ -0,0 +1,107 @@
1
+ import { MediaData } from '../types';
2
+ import { FastAuthManager, LoginCredentials } from '../auth';
3
+ import { PluginManager, Plugin, ScrapingOptions } from '../plugins';
4
+ import { ConfigParser, InstaSaveConfig } from '../utils/config';
5
+ /**
6
+ * Main media scraper class with multi-platform support
7
+ * @class MediaScraper
8
+ */
9
+ export declare class MediaScraper {
10
+ private workflowExecutor;
11
+ private metricsCollector;
12
+ private healthChecker;
13
+ private pluginManager;
14
+ private authManager;
15
+ private fileManager;
16
+ private configParser;
17
+ private config;
18
+ private currentScrapeId;
19
+ private stepCallback;
20
+ private crawlerManager;
21
+ /**
22
+ * Creates a new MediaScraper instance
23
+ */
24
+ constructor();
25
+ /**
26
+ * Handle configuration changes
27
+ */
28
+ private handleConfigChange;
29
+ /**
30
+ * Auto-login if credentials are available in config
31
+ */
32
+ private autoLogin;
33
+ /**
34
+ * Register a plugin (platform or utility)
35
+ */
36
+ use(plugin: Plugin): void;
37
+ /**
38
+ * Login to Instagram
39
+ */
40
+ login(credentials: LoginCredentials): Promise<boolean>;
41
+ /**
42
+ * Universal scrape method - automatically detects platform
43
+ */
44
+ scrape(url: string, options?: ScrapingOptions): Promise<MediaData>;
45
+ private saveToFile;
46
+ /**
47
+ * Set callback for step tracking
48
+ */
49
+ setStepCallback(callback: (stepData: any) => void): void;
50
+ /**
51
+ * Gets current metrics
52
+ */
53
+ getMetrics(): import("../utils/metrics").ScrapingMetrics;
54
+ /**
55
+ * Gets health status
56
+ */
57
+ getHealth(): Promise<import("../utils/health").HealthStatus>;
58
+ /**
59
+ * Gets Prometheus-formatted metrics
60
+ */
61
+ getPrometheusMetrics(): string;
62
+ /**
63
+ * Get plugin manager for advanced plugin operations
64
+ */
65
+ getPluginManager(): PluginManager;
66
+ /**
67
+ * Get auth manager for advanced auth operations
68
+ */
69
+ getAuthManager(): FastAuthManager;
70
+ /**
71
+ * Get current configuration
72
+ */
73
+ getConfig(): InstaSaveConfig;
74
+ /**
75
+ * Get config parser for advanced config operations
76
+ */
77
+ getConfigParser(): ConfigParser;
78
+ refreshSession(): Promise<boolean>;
79
+ /**
80
+ * Get current logged-in username
81
+ */
82
+ getUsername(): string | null;
83
+ /**
84
+ * Get current logged-in user's display name (real name)
85
+ */
86
+ getDisplayName(): string | null;
87
+ /**
88
+ * Get current logged-in user info
89
+ */
90
+ getUserInfo(): {
91
+ username: string | null;
92
+ displayName: string | null;
93
+ };
94
+ /**
95
+ * Logout and clear session data
96
+ */
97
+ logout(): Promise<void>;
98
+ /**
99
+ * Clear all cached data and reset SDK state
100
+ */
101
+ cleanup(): Promise<void>;
102
+ /**
103
+ * Pauses execution for specified milliseconds
104
+ */
105
+ private sleep;
106
+ }
107
+ //# sourceMappingURL=media-scraper.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"media-scraper.d.ts","sourceRoot":"","sources":["../../src/core/media-scraper.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,SAAS,EAAE,MAAM,UAAU,CAAC;AACrC,OAAO,EAAE,eAAe,EAAE,gBAAgB,EAAE,MAAM,SAAS,CAAC;AAC5D,OAAO,EAAE,aAAa,EAAE,MAAM,EAAkB,eAAe,EAAE,MAAM,YAAY,CAAC;AAKpF,OAAO,EAAE,YAAY,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAShE;;;GAGG;AACH,qBAAa,YAAY;IACvB,OAAO,CAAC,gBAAgB,CAAmB;IAC3C,OAAO,CAAC,gBAAgB,CAAmB;IAC3C,OAAO,CAAC,aAAa,CAAgB;IACrC,OAAO,CAAC,aAAa,CAAgB;IACrC,OAAO,CAAC,WAAW,CAAkB;IACrC,OAAO,CAAC,WAAW,CAAc;IACjC,OAAO,CAAC,YAAY,CAAe;IACnC,OAAO,CAAC,MAAM,CAAkB;IAChC,OAAO,CAAC,eAAe,CAAuB;IAC9C,OAAO,CAAC,YAAY,CAA0C;IAC9D,OAAO,CAAC,cAAc,CAAiB;IAEvC;;OAEG;;IAoCH;;OAEG;IACH,OAAO,CAAC,kBAAkB;IAoB1B;;OAEG;YACW,SAAS;IAevB;;OAEG;IACH,GAAG,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI;IAIzB;;OAEG;IACG,KAAK,CAAC,WAAW,EAAE,gBAAgB,GAAG,OAAO,CAAC,OAAO,CAAC;IA2B5D;;OAEG;IACG,MAAM,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,GAAE,eAAoB,GAAG,OAAO,CAAC,SAAS,CAAC;YAoQ9D,UAAU;IAaxB;;OAEG;IACH,eAAe,CAAC,QAAQ,EAAE,CAAC,QAAQ,EAAE,GAAG,KAAK,IAAI;IAIjD;;OAEG;IACH,UAAU;IAIV;;OAEG;IACG,SAAS;IAIf;;OAEG;IACH,oBAAoB,IAAI,MAAM;IAI9B;;OAEG;IACH,gBAAgB,IAAI,aAAa;IAIjC;;OAEG;IACH,cAAc,IAAI,eAAe;IAIjC;;OAEG;IACH,SAAS,IAAI,eAAe;IAI5B;;OAEG;IACH,eAAe,IAAI,YAAY;IAIzB,cAAc,IAAI,OAAO,CAAC,OAAO,CAAC;IAWxC;;OAEG;IACH,WAAW,IAAI,MAAM,GAAG,IAAI;IAI5B;;OAEG;IACH,cAAc,IAAI,MAAM,GAAG,IAAI;IAI/B;;OAEG;IACH,WAAW,IAAI;QAAE,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;QAAC,WAAW,EAAE,MAAM,GAAG,IAAI,CAAA;KAAE;IAOtE;;OAEG;IACG,MAAM,IAAI,OAAO,CAAC,IAAI,CAAC;IAK7B;;OAEG;IACG,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;IAQ9B;;OAEG;IACH,OAAO,CAAC,KAAK;CAGd"}
@@ -0,0 +1,496 @@
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.MediaScraper = void 0;
37
+ const fs_1 = require("fs");
38
+ const path_1 = require("path");
39
+ const crawlee_1 = require("crawlee");
40
+ const dotenv = __importStar(require("dotenv"));
41
+ const auth_1 = require("../auth");
42
+ const plugins_1 = require("../plugins");
43
+ const metrics_1 = require("../utils/metrics");
44
+ const health_1 = require("../utils/health");
45
+ const platforms_1 = require("../platforms");
46
+ const file_manager_1 = require("../utils/file-manager");
47
+ const config_1 = require("../utils/config");
48
+ const url_normalizer_1 = require("../utils/url-normalizer");
49
+ const crawler_manager_1 = require("../browser/crawler-manager");
50
+ const logger_1 = require("../utils/logger");
51
+ const workflow_executor_1 = require("./workflow-executor");
52
+ // Load environment variables
53
+ dotenv.config();
54
+ /**
55
+ * Main media scraper class with multi-platform support
56
+ * @class MediaScraper
57
+ */
58
+ class MediaScraper {
59
+ /**
60
+ * Creates a new MediaScraper instance
61
+ */
62
+ constructor() {
63
+ this.currentScrapeId = null;
64
+ this.stepCallback = null;
65
+ this.workflowExecutor = new workflow_executor_1.WorkflowExecutor();
66
+ this.metricsCollector = new metrics_1.MetricsCollector();
67
+ this.healthChecker = new health_1.HealthChecker();
68
+ this.healthChecker = new health_1.HealthChecker();
69
+ this.pluginManager = new plugins_1.PluginManager();
70
+ this.authManager = new auth_1.FastAuthManager();
71
+ this.fileManager = new file_manager_1.FileManager();
72
+ this.configParser = new config_1.ConfigParser();
73
+ this.crawlerManager = crawler_manager_1.CrawlerManager.getInstance();
74
+ // Set crawler manager for auth manager
75
+ this.authManager.setCrawlerManager(this.crawlerManager);
76
+ // Load configuration
77
+ this.config = this.configParser.loadConfig();
78
+ this.configParser.applyToEnvironment();
79
+ // Setup config change listener
80
+ this.configParser.onConfigChange((newConfig, oldConfig) => {
81
+ this.handleConfigChange(newConfig, oldConfig);
82
+ });
83
+ // Setup smart logging
84
+ logger_1.Logger.setMode(this.config.settings.console_mode || 'Classic');
85
+ logger_1.Logger.suppressCrawlee();
86
+ logger_1.Logger.config(true);
87
+ // Auto-login if credentials are provided in config
88
+ this.autoLogin();
89
+ // Register built-in platforms
90
+ platforms_1.BUILTIN_PLATFORMS.forEach(plugin => this.pluginManager.register(plugin));
91
+ }
92
+ /**
93
+ * Handle configuration changes
94
+ */
95
+ handleConfigChange(newConfig, oldConfig) {
96
+ this.config = newConfig;
97
+ this.configParser.applyToEnvironment();
98
+ // Update logging mode if changed
99
+ if (newConfig.settings.console_mode !== oldConfig.settings.console_mode) {
100
+ logger_1.Logger.setMode(newConfig.settings.console_mode || 'Classic');
101
+ logger_1.Logger.classic(`Console mode changed to: ${newConfig.settings.console_mode}`);
102
+ }
103
+ // Re-login if credentials changed
104
+ if (newConfig.account.username !== oldConfig.account.username ||
105
+ newConfig.account.password !== oldConfig.account.password) {
106
+ logger_1.Logger.classic('Credentials changed, attempting re-login...');
107
+ this.autoLogin();
108
+ }
109
+ logger_1.Logger.classic('Configuration reloaded');
110
+ }
111
+ /**
112
+ * Auto-login if credentials are available in config
113
+ */
114
+ async autoLogin() {
115
+ const { auto_login, username, password } = this.config.account;
116
+ if (auto_login !== false && username && password) {
117
+ try {
118
+ logger_1.Logger.debug('🔐 Auto-login enabled, logging in with config credentials...');
119
+ await this.login({ username, password });
120
+ }
121
+ catch (error) {
122
+ logger_1.Logger.always('⚠️ Auto-login failed: ' + error);
123
+ }
124
+ }
125
+ else if (auto_login === false) {
126
+ logger_1.Logger.debug('🔐 Auto-login disabled in config');
127
+ }
128
+ }
129
+ /**
130
+ * Register a plugin (platform or utility)
131
+ */
132
+ use(plugin) {
133
+ this.pluginManager.register(plugin);
134
+ }
135
+ /**
136
+ * Login to Instagram
137
+ */
138
+ async login(credentials) {
139
+ // Use original approach for login - create temporary crawler
140
+ const crawler = new crawlee_1.PuppeteerCrawler({
141
+ maxRequestRetries: 0,
142
+ requestHandlerTimeoutSecs: 60,
143
+ launchContext: {
144
+ launchOptions: {
145
+ executablePath: process.env.PUPPETEER_EXECUTABLE_PATH || undefined,
146
+ headless: this.config.settings.headless !== false,
147
+ args: ['--no-sandbox', '--disable-setuid-sandbox']
148
+ }
149
+ },
150
+ requestHandler: async ({ page }) => {
151
+ logger_1.log.info('🔧 Puppeteer page created, starting login...');
152
+ await this.authManager.login(page, credentials);
153
+ }
154
+ });
155
+ try {
156
+ await crawler.run(['https://www.instagram.com/accounts/login']);
157
+ }
158
+ finally {
159
+ await crawler.teardown();
160
+ }
161
+ return this.authManager.isAuthenticated();
162
+ }
163
+ /**
164
+ * Universal scrape method - automatically detects platform
165
+ */
166
+ async scrape(url, options = {}) {
167
+ // Normalize URL for consistent results
168
+ const normalizedUrl = url_normalizer_1.URLNormalizer.isInstagramPostUrl(url)
169
+ ? url_normalizer_1.URLNormalizer.normalizeInstagramUrl(url)
170
+ : url;
171
+ logger_1.Logger.debug(`🔗 URL normalized: ${url} → ${normalizedUrl}`);
172
+ // Initialize progress callback
173
+ const { progressCallback } = options;
174
+ // Step 1: Browser launch
175
+ if (progressCallback) {
176
+ progressCallback({ type: 'browser', percentage: 0, message: 'Launching browser...' });
177
+ }
178
+ // Find platform plugin for URL
179
+ const platformPlugin = this.pluginManager.getPlatformForUrl(normalizedUrl);
180
+ if (!platformPlugin) {
181
+ throw new Error(`No platform plugin found for URL: ${normalizedUrl}. Supported platforms: ${this.pluginManager.getPlatformPlugins().map(p => p.name).join(', ')}`);
182
+ }
183
+ logger_1.Logger.platform(platformPlugin.name);
184
+ logger_1.log.info(`🔍 Detected platform: ${platformPlugin.name}`);
185
+ logger_1.log.info('🚀 Initializing browser and crawler...');
186
+ // Execute onBeforeScrape hooks
187
+ await this.pluginManager.executeHook('onBeforeScrape', normalizedUrl, options);
188
+ const startTime = Date.now();
189
+ const authManager = this.authManager;
190
+ const useSession = options.useSession !== false && authManager.isAuthenticated();
191
+ return new Promise((resolve, reject) => {
192
+ const crawler = new crawlee_1.PuppeteerCrawler({
193
+ maxRequestRetries: options.retries || 0,
194
+ requestHandlerTimeoutSecs: options.timeout || 60,
195
+ launchContext: {
196
+ launchOptions: {
197
+ executablePath: process.env.PUPPETEER_EXECUTABLE_PATH || undefined,
198
+ args: ['--no-sandbox', '--disable-setuid-sandbox']
199
+ }
200
+ },
201
+ // Apply cookies BEFORE navigation
202
+ preNavigationHooks: [
203
+ async ({ page }) => {
204
+ if (useSession) {
205
+ logger_1.log.info('🔐 Applying session cookies before navigation...');
206
+ await authManager.applyCookies(page);
207
+ }
208
+ }
209
+ ],
210
+ requestHandler: async ({ page, request }) => {
211
+ try {
212
+ logger_1.log.info('Starting scrape operation...');
213
+ // Step 2: Navigation
214
+ if (progressCallback) {
215
+ progressCallback({ type: 'navigation', percentage: 25, message: 'Navigating to post...' });
216
+ }
217
+ // Set user agent
218
+ // Try mobile user agent for better audio detection
219
+ await page.setUserAgent('Mozilla/5.0 (iPhone; CPU iPhone OS 17_0 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/17.0 Mobile/15E148 Safari/604.1');
220
+ // Force fresh content - disable cache and add cache-busting headers
221
+ await page.setExtraHTTPHeaders({
222
+ 'Cache-Control': 'no-cache, no-store, must-revalidate',
223
+ 'Pragma': 'no-cache',
224
+ 'Expires': '0'
225
+ });
226
+ // Clear browser cache to force fresh data
227
+ const client = await page.target().createCDPSession();
228
+ await client.send('Network.clearBrowserCache');
229
+ await client.send('Network.clearBrowserCookies');
230
+ // Block unnecessary resources for faster loading
231
+ await page.setRequestInterception(true);
232
+ page.on('request', (req) => {
233
+ const resourceType = req.resourceType();
234
+ if (['stylesheet', 'font'].includes(resourceType)) {
235
+ req.abort();
236
+ }
237
+ else {
238
+ req.continue();
239
+ }
240
+ });
241
+ // Navigate to the URL
242
+ await page.goto(url, { waitUntil: 'domcontentloaded', timeout: 30000 });
243
+ // Check if login is required
244
+ const needsLogin = await page.evaluate(() => {
245
+ const loginIndicators = [
246
+ 'Log in to continue',
247
+ 'Login • Instagram',
248
+ 'You must log in',
249
+ 'This content isn\'t available right now'
250
+ ];
251
+ const pageText = document.body.innerText;
252
+ const currentUrl = window.location.href;
253
+ return loginIndicators.some(indicator => pageText.includes(indicator) || currentUrl.includes('accounts/login'));
254
+ });
255
+ if (needsLogin) {
256
+ logger_1.log.info('🔐 Login required for this content');
257
+ if (!this.authManager.isAuthenticated()) {
258
+ throw new Error('Login required but no authentication available. Please login first via settings.');
259
+ }
260
+ // Validate session before proceeding
261
+ const sessionValid = await this.authManager.validateSession(page);
262
+ if (!sessionValid) {
263
+ throw new Error('Session expired or invalid. Please login again.');
264
+ }
265
+ logger_1.log.info('🔐 Applying authenticated session...');
266
+ // Navigate to Instagram homepage to establish session
267
+ await page.goto('https://www.instagram.com/', { waitUntil: 'domcontentloaded' });
268
+ await page.waitForTimeout(2000);
269
+ // Navigate back to target URL with session
270
+ await page.goto(url, { waitUntil: 'domcontentloaded', timeout: 30000 });
271
+ // Verify access was granted
272
+ const stillBlocked = await page.evaluate(() => {
273
+ const pageText = document.body.innerText;
274
+ return pageText.includes('Log in to continue') || pageText.includes('You must log in');
275
+ });
276
+ if (stillBlocked) {
277
+ throw new Error('Content requires login but authentication failed. Content may be private or age-restricted.');
278
+ }
279
+ logger_1.log.info('✅ Successfully accessed content with authentication');
280
+ }
281
+ // Navigate to page with cache-busting
282
+ const cacheBustUrl = normalizedUrl + (normalizedUrl.includes('?') ? '&' : '?') + '_cb=' + Date.now();
283
+ logger_1.Logger.debug(`🔄 Cache-busting URL: ${cacheBustUrl}`);
284
+ await page.goto(cacheBustUrl, {
285
+ waitUntil: 'domcontentloaded',
286
+ timeout: 15000
287
+ });
288
+ await this.sleep(1000);
289
+ // Execute platform workflow if available
290
+ if (platformPlugin.workflow) {
291
+ await this.workflowExecutor.executeWorkflow(page, platformPlugin.workflow);
292
+ }
293
+ // Step 3: Extraction
294
+ if (progressCallback) {
295
+ progressCallback({ type: 'extraction', percentage: 50, message: 'Extracting media...' });
296
+ }
297
+ // Scrape using platform plugin
298
+ let data = await platformPlugin.scrape(page, normalizedUrl);
299
+ // Step 4: Metadata
300
+ if (progressCallback) {
301
+ progressCallback({ type: 'metadata', percentage: 75, message: 'Fetching metadata...' });
302
+ }
303
+ // Execute onMediaExtracted hook
304
+ data.media = await this.pluginManager.executeHook('onMediaExtracted', data.media) || data.media;
305
+ // Execute onAfterScrape hook
306
+ data = await this.pluginManager.executeHook('onAfterScrape', data) || data;
307
+ // Validate extracted data
308
+ if (!data.post_id) {
309
+ throw new Error('Failed to extract post ID');
310
+ }
311
+ // Step 5: Complete
312
+ if (progressCallback) {
313
+ progressCallback({ type: 'complete', percentage: 100, message: 'Done!' });
314
+ }
315
+ // Save to file if requested
316
+ if (options.saveToFile) {
317
+ try {
318
+ if (options.filenamePattern || options.skipDuplicates) {
319
+ // Use new FileManager
320
+ const savedFiles = await this.fileManager.saveMediaFiles(data, {
321
+ filenamePattern: options.filenamePattern,
322
+ skipDuplicates: options.skipDuplicates,
323
+ outputPath: options.outputPath
324
+ });
325
+ logger_1.log.info(`✓ Saved ${savedFiles.length} files with custom naming`);
326
+ }
327
+ else {
328
+ // Use legacy save method
329
+ await this.saveToFile(data, options.outputPath);
330
+ }
331
+ }
332
+ catch (error) {
333
+ if (error instanceof Error && error.message.includes('Duplicate')) {
334
+ logger_1.log.info('⚠️ Skipped duplicate file');
335
+ }
336
+ else {
337
+ throw error;
338
+ }
339
+ }
340
+ }
341
+ logger_1.Logger.scrape('start', data.post_id);
342
+ logger_1.Logger.scrape('success', data.post_id, { mediaCount: data.media.length });
343
+ logger_1.log.info(`✅ Successfully scraped ${data.platform} post: ${data.post_id}`);
344
+ // Record metrics
345
+ const responseTime = Date.now() - startTime;
346
+ this.metricsCollector.recordRequest(true, responseTime, data.media.length, JSON.stringify(data).length);
347
+ resolve(data);
348
+ }
349
+ catch (error) {
350
+ logger_1.log.error('Scraping failed:', error);
351
+ // Execute onError hook
352
+ await this.pluginManager.executeHook('onError', error);
353
+ // Record failed metrics
354
+ const responseTime = Date.now() - startTime;
355
+ this.metricsCollector.recordRequest(false, responseTime, 0, 0, error instanceof Error ? error.message : String(error));
356
+ // Ensure crawler cleanup on error
357
+ setTimeout(() => crawler.teardown().catch(err => logger_1.log.error('Error during crawler teardown:', err)), 100);
358
+ reject(error);
359
+ }
360
+ },
361
+ failedRequestHandler: async ({ request, error }) => {
362
+ logger_1.log.error(`Request failed for ${request.url}:`, error);
363
+ // Ensure crawler cleanup on failed request
364
+ setTimeout(() => crawler.teardown().catch(err => logger_1.log.error('Error during crawler teardown:', err)), 100);
365
+ reject(error);
366
+ }
367
+ });
368
+ crawler.run([normalizedUrl])
369
+ .then(() => {
370
+ // Cleanup crawler after completion
371
+ crawler.teardown().catch(err => logger_1.log.error('Error during crawler teardown:', err));
372
+ })
373
+ .catch((error) => {
374
+ // Cleanup crawler even on error
375
+ crawler.teardown().catch(err => logger_1.log.error('Error during crawler teardown:', err));
376
+ reject(error);
377
+ });
378
+ });
379
+ }
380
+ async saveToFile(data, outputPath) {
381
+ try {
382
+ const filename = `${data.platform}_${data.post_id || 'post'}.json`;
383
+ const filepath = outputPath ? (0, path_1.join)(outputPath, filename) : filename;
384
+ (0, fs_1.writeFileSync)(filepath, JSON.stringify(data, null, 2));
385
+ logger_1.log.info(`✓ Saved data to ${filepath}`);
386
+ }
387
+ catch (error) {
388
+ logger_1.log.error('Failed to save file:', error);
389
+ throw new Error(`Failed to save data to file: ${error}`);
390
+ }
391
+ }
392
+ /**
393
+ * Set callback for step tracking
394
+ */
395
+ setStepCallback(callback) {
396
+ this.stepCallback = callback;
397
+ }
398
+ /**
399
+ * Gets current metrics
400
+ */
401
+ getMetrics() {
402
+ return this.metricsCollector.getMetrics();
403
+ }
404
+ /**
405
+ * Gets health status
406
+ */
407
+ async getHealth() {
408
+ return await this.healthChecker.checkHealth();
409
+ }
410
+ /**
411
+ * Gets Prometheus-formatted metrics
412
+ */
413
+ getPrometheusMetrics() {
414
+ return this.metricsCollector.getPrometheusMetrics();
415
+ }
416
+ /**
417
+ * Get plugin manager for advanced plugin operations
418
+ */
419
+ getPluginManager() {
420
+ return this.pluginManager;
421
+ }
422
+ /**
423
+ * Get auth manager for advanced auth operations
424
+ */
425
+ getAuthManager() {
426
+ return this.authManager;
427
+ }
428
+ /**
429
+ * Get current configuration
430
+ */
431
+ getConfig() {
432
+ return this.config;
433
+ }
434
+ /**
435
+ * Get config parser for advanced config operations
436
+ */
437
+ getConfigParser() {
438
+ return this.configParser;
439
+ }
440
+ async refreshSession() {
441
+ try {
442
+ return await this.authManager.refreshSessionWithCrawler();
443
+ }
444
+ catch (error) {
445
+ logger_1.log.error('RefreshSession failed:', error);
446
+ throw error;
447
+ }
448
+ return this.authManager.isAuthenticated();
449
+ }
450
+ /**
451
+ * Get current logged-in username
452
+ */
453
+ getUsername() {
454
+ return this.authManager.getUsername();
455
+ }
456
+ /**
457
+ * Get current logged-in user's display name (real name)
458
+ */
459
+ getDisplayName() {
460
+ return this.authManager.getDisplayName();
461
+ }
462
+ /**
463
+ * Get current logged-in user info
464
+ */
465
+ getUserInfo() {
466
+ return {
467
+ username: this.authManager.getUsername(),
468
+ displayName: this.authManager.getDisplayName()
469
+ };
470
+ }
471
+ /**
472
+ * Logout and clear session data
473
+ */
474
+ async logout() {
475
+ await this.authManager.logout();
476
+ logger_1.log.info('🔐 Session cleared successfully');
477
+ }
478
+ /**
479
+ * Clear all cached data and reset SDK state
480
+ */
481
+ async cleanup() {
482
+ await this.logout();
483
+ this.configParser.cleanup();
484
+ await this.crawlerManager.cleanup();
485
+ // Clear any other cached data if needed
486
+ logger_1.log.info('🧹 SDK cleanup completed');
487
+ }
488
+ /**
489
+ * Pauses execution for specified milliseconds
490
+ */
491
+ sleep(ms) {
492
+ return new Promise(resolve => setTimeout(resolve, ms));
493
+ }
494
+ }
495
+ exports.MediaScraper = MediaScraper;
496
+ //# sourceMappingURL=media-scraper.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"media-scraper.js","sourceRoot":"","sources":["../../src/core/media-scraper.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,17 @@
1
+ import { Page } from 'puppeteer';
2
+ import { WorkflowTask } from '../types/workflow';
3
+ /**
4
+ * Executes predefined workflows for platform interaction automation
5
+ * @class WorkflowExecutor
6
+ */
7
+ export declare class WorkflowExecutor {
8
+ /**
9
+ * Pauses execution for specified milliseconds
10
+ */
11
+ private sleep;
12
+ /**
13
+ * Executes a workflow from JSON file or array
14
+ */
15
+ executeWorkflow(page: Page, workflowOrPath: string | WorkflowTask[]): Promise<void>;
16
+ }
17
+ //# sourceMappingURL=workflow-executor.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"workflow-executor.d.ts","sourceRoot":"","sources":["../../src/core/workflow-executor.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAEjC,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAEjD;;;GAGG;AACH,qBAAa,gBAAgB;IAC3B;;OAEG;IACH,OAAO,CAAC,KAAK;IAIb;;OAEG;IACG,eAAe,CAAC,IAAI,EAAE,IAAI,EAAE,cAAc,EAAE,MAAM,GAAG,YAAY,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC;CA+H1F"}