@dealcrawl/sdk 2.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 (166) hide show
  1. package/README.md +540 -0
  2. package/dist/sdk/src/client.d.ts +285 -0
  3. package/dist/sdk/src/client.d.ts.map +1 -0
  4. package/dist/sdk/src/client.js +336 -0
  5. package/dist/sdk/src/client.js.map +1 -0
  6. package/dist/sdk/src/error.d.ts +54 -0
  7. package/dist/sdk/src/error.d.ts.map +1 -0
  8. package/dist/sdk/src/error.js +115 -0
  9. package/dist/sdk/src/error.js.map +1 -0
  10. package/dist/sdk/src/index.d.ts +58 -0
  11. package/dist/sdk/src/index.d.ts.map +1 -0
  12. package/dist/sdk/src/index.js +65 -0
  13. package/dist/sdk/src/index.js.map +1 -0
  14. package/dist/sdk/src/resources/account.d.ts +143 -0
  15. package/dist/sdk/src/resources/account.d.ts.map +1 -0
  16. package/dist/sdk/src/resources/account.js +186 -0
  17. package/dist/sdk/src/resources/account.js.map +1 -0
  18. package/dist/sdk/src/resources/crawl.d.ts +87 -0
  19. package/dist/sdk/src/resources/crawl.d.ts.map +1 -0
  20. package/dist/sdk/src/resources/crawl.js +205 -0
  21. package/dist/sdk/src/resources/crawl.js.map +1 -0
  22. package/dist/sdk/src/resources/data.d.ts +157 -0
  23. package/dist/sdk/src/resources/data.d.ts.map +1 -0
  24. package/dist/sdk/src/resources/data.js +239 -0
  25. package/dist/sdk/src/resources/data.js.map +1 -0
  26. package/dist/sdk/src/resources/dork.d.ts +104 -0
  27. package/dist/sdk/src/resources/dork.d.ts.map +1 -0
  28. package/dist/sdk/src/resources/dork.js +163 -0
  29. package/dist/sdk/src/resources/dork.js.map +1 -0
  30. package/dist/sdk/src/resources/extract.d.ts +105 -0
  31. package/dist/sdk/src/resources/extract.d.ts.map +1 -0
  32. package/dist/sdk/src/resources/extract.js +246 -0
  33. package/dist/sdk/src/resources/extract.js.map +1 -0
  34. package/dist/sdk/src/resources/index.d.ts +14 -0
  35. package/dist/sdk/src/resources/index.d.ts.map +1 -0
  36. package/dist/sdk/src/resources/index.js +14 -0
  37. package/dist/sdk/src/resources/index.js.map +1 -0
  38. package/dist/sdk/src/resources/keys.d.ts +124 -0
  39. package/dist/sdk/src/resources/keys.d.ts.map +1 -0
  40. package/dist/sdk/src/resources/keys.js +168 -0
  41. package/dist/sdk/src/resources/keys.js.map +1 -0
  42. package/dist/sdk/src/resources/scrape.d.ts +53 -0
  43. package/dist/sdk/src/resources/scrape.d.ts.map +1 -0
  44. package/dist/sdk/src/resources/scrape.js +85 -0
  45. package/dist/sdk/src/resources/scrape.js.map +1 -0
  46. package/dist/sdk/src/resources/status.d.ts +100 -0
  47. package/dist/sdk/src/resources/status.d.ts.map +1 -0
  48. package/dist/sdk/src/resources/status.js +133 -0
  49. package/dist/sdk/src/resources/status.js.map +1 -0
  50. package/dist/sdk/src/resources/webhooks.d.ts +126 -0
  51. package/dist/sdk/src/resources/webhooks.d.ts.map +1 -0
  52. package/dist/sdk/src/resources/webhooks.js +167 -0
  53. package/dist/sdk/src/resources/webhooks.js.map +1 -0
  54. package/dist/sdk/src/types/config.d.ts +45 -0
  55. package/dist/sdk/src/types/config.d.ts.map +1 -0
  56. package/dist/sdk/src/types/config.js +10 -0
  57. package/dist/sdk/src/types/config.js.map +1 -0
  58. package/dist/sdk/src/types/index.d.ts +8 -0
  59. package/dist/sdk/src/types/index.d.ts.map +1 -0
  60. package/dist/sdk/src/types/index.js +8 -0
  61. package/dist/sdk/src/types/index.js.map +1 -0
  62. package/dist/sdk/src/types/options.d.ts +286 -0
  63. package/dist/sdk/src/types/options.d.ts.map +1 -0
  64. package/dist/sdk/src/types/options.js +6 -0
  65. package/dist/sdk/src/types/options.js.map +1 -0
  66. package/dist/sdk/src/types/responses.d.ts +385 -0
  67. package/dist/sdk/src/types/responses.d.ts.map +1 -0
  68. package/dist/sdk/src/types/responses.js +6 -0
  69. package/dist/sdk/src/types/responses.js.map +1 -0
  70. package/dist/sdk/src/utils/polling.d.ts +57 -0
  71. package/dist/sdk/src/utils/polling.d.ts.map +1 -0
  72. package/dist/sdk/src/utils/polling.js +110 -0
  73. package/dist/sdk/src/utils/polling.js.map +1 -0
  74. package/dist/sdk/src/utils/request.d.ts +47 -0
  75. package/dist/sdk/src/utils/request.d.ts.map +1 -0
  76. package/dist/sdk/src/utils/request.js +161 -0
  77. package/dist/sdk/src/utils/request.js.map +1 -0
  78. package/dist/shared/src/constants/errors.d.ts +26 -0
  79. package/dist/shared/src/constants/errors.d.ts.map +1 -0
  80. package/dist/shared/src/constants/errors.js +39 -0
  81. package/dist/shared/src/constants/errors.js.map +1 -0
  82. package/dist/shared/src/constants/http.d.ts +26 -0
  83. package/dist/shared/src/constants/http.d.ts.map +1 -0
  84. package/dist/shared/src/constants/http.js +26 -0
  85. package/dist/shared/src/constants/http.js.map +1 -0
  86. package/dist/shared/src/constants/index.d.ts +4 -0
  87. package/dist/shared/src/constants/index.d.ts.map +1 -0
  88. package/dist/shared/src/constants/index.js +5 -0
  89. package/dist/shared/src/constants/index.js.map +1 -0
  90. package/dist/shared/src/constants/limits.d.ts +52 -0
  91. package/dist/shared/src/constants/limits.d.ts.map +1 -0
  92. package/dist/shared/src/constants/limits.js +43 -0
  93. package/dist/shared/src/constants/limits.js.map +1 -0
  94. package/dist/shared/src/index.d.ts +5 -0
  95. package/dist/shared/src/index.d.ts.map +1 -0
  96. package/dist/shared/src/index.js +11 -0
  97. package/dist/shared/src/index.js.map +1 -0
  98. package/dist/shared/src/lib/index.d.ts +2 -0
  99. package/dist/shared/src/lib/index.d.ts.map +1 -0
  100. package/dist/shared/src/lib/index.js +2 -0
  101. package/dist/shared/src/lib/index.js.map +1 -0
  102. package/dist/shared/src/lib/redis.d.ts +14 -0
  103. package/dist/shared/src/lib/redis.d.ts.map +1 -0
  104. package/dist/shared/src/lib/redis.js +60 -0
  105. package/dist/shared/src/lib/redis.js.map +1 -0
  106. package/dist/shared/src/types/api-key.types.d.ts +94 -0
  107. package/dist/shared/src/types/api-key.types.d.ts.map +1 -0
  108. package/dist/shared/src/types/api-key.types.js +30 -0
  109. package/dist/shared/src/types/api-key.types.js.map +1 -0
  110. package/dist/shared/src/types/api.types.d.ts +38 -0
  111. package/dist/shared/src/types/api.types.d.ts.map +1 -0
  112. package/dist/shared/src/types/api.types.js +2 -0
  113. package/dist/shared/src/types/api.types.js.map +1 -0
  114. package/dist/shared/src/types/client.types.d.ts +73 -0
  115. package/dist/shared/src/types/client.types.d.ts.map +1 -0
  116. package/dist/shared/src/types/client.types.js +9 -0
  117. package/dist/shared/src/types/client.types.js.map +1 -0
  118. package/dist/shared/src/types/crawl.types.d.ts +65 -0
  119. package/dist/shared/src/types/crawl.types.d.ts.map +1 -0
  120. package/dist/shared/src/types/crawl.types.js +2 -0
  121. package/dist/shared/src/types/crawl.types.js.map +1 -0
  122. package/dist/shared/src/types/deal.types.d.ts +210 -0
  123. package/dist/shared/src/types/deal.types.d.ts.map +1 -0
  124. package/dist/shared/src/types/deal.types.js +6 -0
  125. package/dist/shared/src/types/deal.types.js.map +1 -0
  126. package/dist/shared/src/types/dork.types.d.ts +29 -0
  127. package/dist/shared/src/types/dork.types.d.ts.map +1 -0
  128. package/dist/shared/src/types/dork.types.js +2 -0
  129. package/dist/shared/src/types/dork.types.js.map +1 -0
  130. package/dist/shared/src/types/index.d.ts +8 -0
  131. package/dist/shared/src/types/index.d.ts.map +1 -0
  132. package/dist/shared/src/types/index.js +9 -0
  133. package/dist/shared/src/types/index.js.map +1 -0
  134. package/dist/shared/src/types/scrape.types.d.ts +151 -0
  135. package/dist/shared/src/types/scrape.types.d.ts.map +1 -0
  136. package/dist/shared/src/types/scrape.types.js +2 -0
  137. package/dist/shared/src/types/scrape.types.js.map +1 -0
  138. package/dist/shared/src/utils/date.d.ts +7 -0
  139. package/dist/shared/src/utils/date.d.ts.map +1 -0
  140. package/dist/shared/src/utils/date.js +25 -0
  141. package/dist/shared/src/utils/date.js.map +1 -0
  142. package/dist/shared/src/utils/hash.d.ts +4 -0
  143. package/dist/shared/src/utils/hash.d.ts.map +1 -0
  144. package/dist/shared/src/utils/hash.js +21 -0
  145. package/dist/shared/src/utils/hash.js.map +1 -0
  146. package/dist/shared/src/utils/index.d.ts +7 -0
  147. package/dist/shared/src/utils/index.d.ts.map +1 -0
  148. package/dist/shared/src/utils/index.js +8 -0
  149. package/dist/shared/src/utils/index.js.map +1 -0
  150. package/dist/shared/src/utils/logger.d.ts +66 -0
  151. package/dist/shared/src/utils/logger.d.ts.map +1 -0
  152. package/dist/shared/src/utils/logger.js +268 -0
  153. package/dist/shared/src/utils/logger.js.map +1 -0
  154. package/dist/shared/src/utils/retry.d.ts +11 -0
  155. package/dist/shared/src/utils/retry.d.ts.map +1 -0
  156. package/dist/shared/src/utils/retry.js +36 -0
  157. package/dist/shared/src/utils/retry.js.map +1 -0
  158. package/dist/shared/src/utils/url-validator.d.ts +37 -0
  159. package/dist/shared/src/utils/url-validator.d.ts.map +1 -0
  160. package/dist/shared/src/utils/url-validator.js +179 -0
  161. package/dist/shared/src/utils/url-validator.js.map +1 -0
  162. package/dist/shared/src/utils/url.d.ts +6 -0
  163. package/dist/shared/src/utils/url.d.ts.map +1 -0
  164. package/dist/shared/src/utils/url.js +56 -0
  165. package/dist/shared/src/utils/url.js.map +1 -0
  166. package/package.json +49 -0
@@ -0,0 +1,205 @@
1
+ /**
2
+ * Crawl Resource
3
+ * Handles website crawling operations
4
+ */
5
+ import { post, get } from "../utils/request";
6
+ /**
7
+ * Predefined crawl templates with optimized settings
8
+ */
9
+ const CRAWL_TEMPLATES = {
10
+ ecommerce: {
11
+ id: "ecommerce",
12
+ name: "E-commerce",
13
+ description: "Optimized for product pages and online stores",
14
+ defaultOptions: {
15
+ maxDepth: 3,
16
+ maxPages: 500,
17
+ delayMs: 1500,
18
+ extractDeal: true,
19
+ prioritizeDealPages: true,
20
+ excludePatterns: [
21
+ "*/cart*",
22
+ "*/checkout*",
23
+ "*/account*",
24
+ "*/login*",
25
+ "*/register*",
26
+ "*/wishlist*",
27
+ "*/compare*",
28
+ ],
29
+ },
30
+ },
31
+ blog: {
32
+ id: "blog",
33
+ name: "Blog",
34
+ description: "Optimized for blog posts and articles",
35
+ defaultOptions: {
36
+ maxDepth: 2,
37
+ maxPages: 200,
38
+ delayMs: 1000,
39
+ extractDeal: false,
40
+ prioritizeDealPages: false,
41
+ excludePatterns: ["*/tag/*", "*/category/*", "*/author/*", "*/page/*"],
42
+ },
43
+ },
44
+ docs: {
45
+ id: "docs",
46
+ name: "Documentation",
47
+ description: "Optimized for documentation sites",
48
+ defaultOptions: {
49
+ maxDepth: 4,
50
+ maxPages: 300,
51
+ delayMs: 500,
52
+ extractDeal: false,
53
+ prioritizeDealPages: false,
54
+ },
55
+ },
56
+ marketplace: {
57
+ id: "marketplace",
58
+ name: "Marketplace",
59
+ description: "Optimized for multi-vendor marketplaces",
60
+ defaultOptions: {
61
+ maxDepth: 3,
62
+ maxPages: 1000,
63
+ delayMs: 2000,
64
+ extractDeal: true,
65
+ prioritizeDealPages: true,
66
+ followExternalLinks: false,
67
+ excludePatterns: [
68
+ "*/seller/*",
69
+ "*/vendor/*",
70
+ "*/shop/*",
71
+ "*/reviews*",
72
+ "*/questions*",
73
+ ],
74
+ },
75
+ },
76
+ custom: {
77
+ id: "custom",
78
+ name: "Custom",
79
+ description: "No preset - use your own settings",
80
+ defaultOptions: {},
81
+ },
82
+ };
83
+ /**
84
+ * Crawl resource class
85
+ * Provides methods for website crawling
86
+ */
87
+ export class CrawlResource {
88
+ ctx;
89
+ constructor(ctx) {
90
+ this.ctx = ctx;
91
+ }
92
+ /**
93
+ * Create a new crawl job
94
+ *
95
+ * @example
96
+ * ```ts
97
+ * const job = await client.crawl.create({
98
+ * url: "https://example.com",
99
+ * maxDepth: 3,
100
+ * maxPages: 100,
101
+ * extractDeal: true
102
+ * });
103
+ * console.log(job.jobId);
104
+ * ```
105
+ */
106
+ async create(options) {
107
+ const body = {
108
+ startUrl: options.url || options.startUrl,
109
+ url: options.url || options.startUrl,
110
+ prompt: options.prompt,
111
+ maxDepth: options.maxDepth,
112
+ maxPages: options.maxPages,
113
+ delayMs: options.delayMs,
114
+ detectSignals: options.detectSignals,
115
+ extractWithAI: options.extractWithAI,
116
+ extractDeal: options.extractDeal,
117
+ minDealScore: options.minDealScore,
118
+ prioritizeDealPages: options.prioritizeDealPages,
119
+ followExternalLinks: options.followExternalLinks,
120
+ allowedDomains: options.allowedDomains,
121
+ excludePatterns: options.excludePatterns,
122
+ };
123
+ const result = await post(this.ctx, "/v1/crawl", body);
124
+ return result.data;
125
+ }
126
+ /**
127
+ * Create a crawl job using a template
128
+ *
129
+ * @example
130
+ * ```ts
131
+ * const job = await client.crawl.withTemplate("ecommerce", {
132
+ * url: "https://shop.example.com",
133
+ * maxPages: 200 // Override template default
134
+ * });
135
+ * ```
136
+ */
137
+ async withTemplate(templateId, options) {
138
+ const template = CRAWL_TEMPLATES[templateId];
139
+ return this.create({
140
+ ...template.defaultOptions,
141
+ ...options,
142
+ });
143
+ }
144
+ /**
145
+ * List available crawl templates
146
+ *
147
+ * @example
148
+ * ```ts
149
+ * const templates = client.crawl.listTemplates();
150
+ * templates.forEach(t => console.log(t.name, t.description));
151
+ * ```
152
+ */
153
+ listTemplates() {
154
+ return Object.values(CRAWL_TEMPLATES);
155
+ }
156
+ /**
157
+ * Get a specific template by ID
158
+ *
159
+ * @example
160
+ * ```ts
161
+ * const template = client.crawl.getTemplate("ecommerce");
162
+ * console.log(template.defaultOptions);
163
+ * ```
164
+ */
165
+ getTemplate(templateId) {
166
+ return CRAWL_TEMPLATES[templateId];
167
+ }
168
+ /**
169
+ * Analyze a URL before crawling
170
+ * Returns recommended settings based on site structure
171
+ *
172
+ * @example
173
+ * ```ts
174
+ * const analysis = await client.crawl.analyze("https://shop.example.com");
175
+ * console.log(analysis.recommendedTemplate);
176
+ * console.log(analysis.estimatedPages);
177
+ * ```
178
+ */
179
+ async analyze(url) {
180
+ const result = await get(this.ctx, "/v1/crawl/analyze", {
181
+ url,
182
+ });
183
+ return result.data;
184
+ }
185
+ /**
186
+ * Crawl a URL with deal extraction enabled
187
+ * Convenience method for e-commerce crawling
188
+ *
189
+ * @example
190
+ * ```ts
191
+ * const job = await client.crawl.forDeals("https://shop.example.com", {
192
+ * minDealScore: 70
193
+ * });
194
+ * ```
195
+ */
196
+ async forDeals(url, options) {
197
+ return this.withTemplate("ecommerce", {
198
+ url,
199
+ extractDeal: true,
200
+ prioritizeDealPages: true,
201
+ ...options,
202
+ });
203
+ }
204
+ }
205
+ //# sourceMappingURL=crawl.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"crawl.js","sourceRoot":"","sources":["../../../../src/resources/crawl.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,157 @@
1
+ /**
2
+ * Data Resource
3
+ * Handles data retrieval, listing, and export operations
4
+ */
5
+ import type { RequestContext } from "../types/config";
6
+ import type { ListJobsOptions, ListDealsOptions, ExportJobsOptions, ExportDealsOptions } from "../types/options";
7
+ import type { ListJobsResponse, ListDealsResponse, DealDetails, ClientStatsResponse } from "../types/responses";
8
+ /**
9
+ * Data resource class
10
+ * Provides methods for accessing job and deal data
11
+ */
12
+ export declare class DataResource {
13
+ private ctx;
14
+ constructor(ctx: RequestContext);
15
+ /**
16
+ * List all jobs
17
+ *
18
+ * @example
19
+ * ```ts
20
+ * const jobs = await client.data.listJobs({
21
+ * status: "completed",
22
+ * type: "crawl",
23
+ * page: 1,
24
+ * limit: 20
25
+ * });
26
+ * console.log(jobs.data);
27
+ * console.log(jobs.pagination.total);
28
+ * ```
29
+ */
30
+ listJobs(options?: ListJobsOptions): Promise<ListJobsResponse>;
31
+ /**
32
+ * Get jobs by status
33
+ * Convenience method for filtering by status
34
+ *
35
+ * @example
36
+ * ```ts
37
+ * const activeJobs = await client.data.getJobsByStatus("active");
38
+ * ```
39
+ */
40
+ getJobsByStatus(status: ListJobsOptions["status"], options?: Omit<ListJobsOptions, "status">): Promise<ListJobsResponse>;
41
+ /**
42
+ * Get jobs by type
43
+ * Convenience method for filtering by type
44
+ *
45
+ * @example
46
+ * ```ts
47
+ * const crawlJobs = await client.data.getJobsByType("crawl");
48
+ * ```
49
+ */
50
+ getJobsByType(type: ListJobsOptions["type"], options?: Omit<ListJobsOptions, "type">): Promise<ListJobsResponse>;
51
+ /**
52
+ * Get recent jobs
53
+ * Convenience method for getting latest jobs
54
+ *
55
+ * @example
56
+ * ```ts
57
+ * const recentJobs = await client.data.getRecentJobs(10);
58
+ * ```
59
+ */
60
+ getRecentJobs(limit?: number): Promise<ListJobsResponse>;
61
+ /**
62
+ * List all deals
63
+ *
64
+ * @example
65
+ * ```ts
66
+ * const deals = await client.data.listDeals({
67
+ * minScore: 70,
68
+ * category: "electronics",
69
+ * sortBy: "deal_score",
70
+ * sortOrder: "desc"
71
+ * });
72
+ * ```
73
+ */
74
+ listDeals(options?: ListDealsOptions): Promise<ListDealsResponse>;
75
+ /**
76
+ * Get a single deal by ID
77
+ *
78
+ * @example
79
+ * ```ts
80
+ * const deal = await client.data.getDeal("deal_abc123");
81
+ * console.log(deal.product.name);
82
+ * console.log(deal.pricing.discountPercent);
83
+ * ```
84
+ */
85
+ getDeal(dealId: string): Promise<DealDetails>;
86
+ /**
87
+ * Get top deals by score
88
+ * Convenience method for finding best deals
89
+ *
90
+ * @example
91
+ * ```ts
92
+ * const topDeals = await client.data.getTopDeals(20, 80);
93
+ * ```
94
+ */
95
+ getTopDeals(limit?: number, minScore?: number): Promise<ListDealsResponse>;
96
+ /**
97
+ * Get deals by category
98
+ * Convenience method for filtering by category
99
+ *
100
+ * @example
101
+ * ```ts
102
+ * const electronicsDeals = await client.data.getDealsByCategory("electronics");
103
+ * ```
104
+ */
105
+ getDealsByCategory(category: string, options?: Omit<ListDealsOptions, "category">): Promise<ListDealsResponse>;
106
+ /**
107
+ * Get unsynced deals (not yet sent to DealUp)
108
+ *
109
+ * @example
110
+ * ```ts
111
+ * const unsyncedDeals = await client.data.getUnsyncedDeals();
112
+ * ```
113
+ */
114
+ getUnsyncedDeals(options?: Omit<ListDealsOptions, "synced">): Promise<ListDealsResponse>;
115
+ /**
116
+ * Export jobs data
117
+ *
118
+ * @example
119
+ * ```ts
120
+ * // Export as JSON
121
+ * const jsonData = await client.data.exportJobs({ format: "json" });
122
+ *
123
+ * // Export as CSV
124
+ * const csvData = await client.data.exportJobs({ format: "csv" });
125
+ * ```
126
+ */
127
+ exportJobs(options?: ExportJobsOptions): Promise<string | object[]>;
128
+ /**
129
+ * Export deals data
130
+ *
131
+ * @example
132
+ * ```ts
133
+ * // Export as JSON
134
+ * const jsonData = await client.data.exportDeals({ format: "json" });
135
+ *
136
+ * // Export as CSV with filters
137
+ * const csvData = await client.data.exportDeals({
138
+ * format: "csv",
139
+ * minScore: 70,
140
+ * category: "software"
141
+ * });
142
+ * ```
143
+ */
144
+ exportDeals(options?: ExportDealsOptions): Promise<string | object[]>;
145
+ /**
146
+ * Get client statistics
147
+ *
148
+ * @example
149
+ * ```ts
150
+ * const stats = await client.data.getStats();
151
+ * console.log(stats.totals.deals);
152
+ * console.log(stats.performance.avgDealScore);
153
+ * ```
154
+ */
155
+ getStats(): Promise<ClientStatsResponse>;
156
+ }
157
+ //# sourceMappingURL=data.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"data.d.ts","sourceRoot":"","sources":["../../../../src/resources/data.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AACtD,OAAO,KAAK,EACV,eAAe,EACf,gBAAgB,EAChB,iBAAiB,EACjB,kBAAkB,EACnB,MAAM,kBAAkB,CAAC;AAC1B,OAAO,KAAK,EACV,gBAAgB,EAChB,iBAAiB,EACjB,WAAW,EACX,mBAAmB,EACpB,MAAM,oBAAoB,CAAC;AAG5B;;;GAGG;AACH,qBAAa,YAAY;IACX,OAAO,CAAC,GAAG;gBAAH,GAAG,EAAE,cAAc;IAMvC;;;;;;;;;;;;;;OAcG;IACG,QAAQ,CAAC,OAAO,GAAE,eAAoB,GAAG,OAAO,CAAC,gBAAgB,CAAC;IAcxE;;;;;;;;OAQG;IACG,eAAe,CACnB,MAAM,EAAE,eAAe,CAAC,QAAQ,CAAC,EACjC,OAAO,CAAC,EAAE,IAAI,CAAC,eAAe,EAAE,QAAQ,CAAC,GACxC,OAAO,CAAC,gBAAgB,CAAC;IAI5B;;;;;;;;OAQG;IACG,aAAa,CACjB,IAAI,EAAE,eAAe,CAAC,MAAM,CAAC,EAC7B,OAAO,CAAC,EAAE,IAAI,CAAC,eAAe,EAAE,MAAM,CAAC,GACtC,OAAO,CAAC,gBAAgB,CAAC;IAI5B;;;;;;;;OAQG;IACG,aAAa,CAAC,KAAK,GAAE,MAAW,GAAG,OAAO,CAAC,gBAAgB,CAAC;IAYlE;;;;;;;;;;;;OAYG;IACG,SAAS,CAAC,OAAO,GAAE,gBAAqB,GAAG,OAAO,CAAC,iBAAiB,CAAC;IAe3E;;;;;;;;;OASG;IACG,OAAO,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,CAAC;IAKnD;;;;;;;;OAQG;IACG,WAAW,CACf,KAAK,GAAE,MAAW,EAClB,QAAQ,GAAE,MAAW,GACpB,OAAO,CAAC,iBAAiB,CAAC;IAS7B;;;;;;;;OAQG;IACG,kBAAkB,CACtB,QAAQ,EAAE,MAAM,EAChB,OAAO,CAAC,EAAE,IAAI,CAAC,gBAAgB,EAAE,UAAU,CAAC,GAC3C,OAAO,CAAC,iBAAiB,CAAC;IAI7B;;;;;;;OAOG;IACG,gBAAgB,CACpB,OAAO,CAAC,EAAE,IAAI,CAAC,gBAAgB,EAAE,QAAQ,CAAC,GACzC,OAAO,CAAC,iBAAiB,CAAC;IAQ7B;;;;;;;;;;;OAWG;IACG,UAAU,CACd,OAAO,GAAE,iBAAsB,GAC9B,OAAO,CAAC,MAAM,GAAG,MAAM,EAAE,CAAC;IAe7B;;;;;;;;;;;;;;;OAeG;IACG,WAAW,CACf,OAAO,GAAE,kBAAuB,GAC/B,OAAO,CAAC,MAAM,GAAG,MAAM,EAAE,CAAC;IAmB7B;;;;;;;;;OASG;IACG,QAAQ,IAAI,OAAO,CAAC,mBAAmB,CAAC;CAI/C"}
@@ -0,0 +1,239 @@
1
+ /**
2
+ * Data Resource
3
+ * Handles data retrieval, listing, and export operations
4
+ */
5
+ import { get } from "../utils/request";
6
+ /**
7
+ * Data resource class
8
+ * Provides methods for accessing job and deal data
9
+ */
10
+ export class DataResource {
11
+ ctx;
12
+ constructor(ctx) {
13
+ this.ctx = ctx;
14
+ }
15
+ // ============================================
16
+ // JOBS
17
+ // ============================================
18
+ /**
19
+ * List all jobs
20
+ *
21
+ * @example
22
+ * ```ts
23
+ * const jobs = await client.data.listJobs({
24
+ * status: "completed",
25
+ * type: "crawl",
26
+ * page: 1,
27
+ * limit: 20
28
+ * });
29
+ * console.log(jobs.data);
30
+ * console.log(jobs.pagination.total);
31
+ * ```
32
+ */
33
+ async listJobs(options = {}) {
34
+ const result = await get(this.ctx, "/v1/data/jobs", {
35
+ page: options.page,
36
+ limit: options.limit,
37
+ status: options.status,
38
+ type: options.type,
39
+ sortBy: options.sortBy,
40
+ sortOrder: options.sortOrder,
41
+ fromDate: options.fromDate,
42
+ toDate: options.toDate,
43
+ });
44
+ return result.data;
45
+ }
46
+ /**
47
+ * Get jobs by status
48
+ * Convenience method for filtering by status
49
+ *
50
+ * @example
51
+ * ```ts
52
+ * const activeJobs = await client.data.getJobsByStatus("active");
53
+ * ```
54
+ */
55
+ async getJobsByStatus(status, options) {
56
+ return this.listJobs({ status, ...options });
57
+ }
58
+ /**
59
+ * Get jobs by type
60
+ * Convenience method for filtering by type
61
+ *
62
+ * @example
63
+ * ```ts
64
+ * const crawlJobs = await client.data.getJobsByType("crawl");
65
+ * ```
66
+ */
67
+ async getJobsByType(type, options) {
68
+ return this.listJobs({ type, ...options });
69
+ }
70
+ /**
71
+ * Get recent jobs
72
+ * Convenience method for getting latest jobs
73
+ *
74
+ * @example
75
+ * ```ts
76
+ * const recentJobs = await client.data.getRecentJobs(10);
77
+ * ```
78
+ */
79
+ async getRecentJobs(limit = 10) {
80
+ return this.listJobs({
81
+ limit,
82
+ sortBy: "created_at",
83
+ sortOrder: "desc",
84
+ });
85
+ }
86
+ // ============================================
87
+ // DEALS
88
+ // ============================================
89
+ /**
90
+ * List all deals
91
+ *
92
+ * @example
93
+ * ```ts
94
+ * const deals = await client.data.listDeals({
95
+ * minScore: 70,
96
+ * category: "electronics",
97
+ * sortBy: "deal_score",
98
+ * sortOrder: "desc"
99
+ * });
100
+ * ```
101
+ */
102
+ async listDeals(options = {}) {
103
+ const result = await get(this.ctx, "/v1/data/deals", {
104
+ page: options.page,
105
+ limit: options.limit,
106
+ minScore: options.minScore,
107
+ maxPrice: options.maxPrice,
108
+ category: options.category,
109
+ merchant: options.merchant,
110
+ synced: options.synced?.toString(),
111
+ sortBy: options.sortBy,
112
+ sortOrder: options.sortOrder,
113
+ });
114
+ return result.data;
115
+ }
116
+ /**
117
+ * Get a single deal by ID
118
+ *
119
+ * @example
120
+ * ```ts
121
+ * const deal = await client.data.getDeal("deal_abc123");
122
+ * console.log(deal.product.name);
123
+ * console.log(deal.pricing.discountPercent);
124
+ * ```
125
+ */
126
+ async getDeal(dealId) {
127
+ const result = await get(this.ctx, `/v1/data/deals/${dealId}`);
128
+ return result.data;
129
+ }
130
+ /**
131
+ * Get top deals by score
132
+ * Convenience method for finding best deals
133
+ *
134
+ * @example
135
+ * ```ts
136
+ * const topDeals = await client.data.getTopDeals(20, 80);
137
+ * ```
138
+ */
139
+ async getTopDeals(limit = 20, minScore = 70) {
140
+ return this.listDeals({
141
+ limit,
142
+ minScore,
143
+ sortBy: "deal_score",
144
+ sortOrder: "desc",
145
+ });
146
+ }
147
+ /**
148
+ * Get deals by category
149
+ * Convenience method for filtering by category
150
+ *
151
+ * @example
152
+ * ```ts
153
+ * const electronicsDeals = await client.data.getDealsByCategory("electronics");
154
+ * ```
155
+ */
156
+ async getDealsByCategory(category, options) {
157
+ return this.listDeals({ category, ...options });
158
+ }
159
+ /**
160
+ * Get unsynced deals (not yet sent to DealUp)
161
+ *
162
+ * @example
163
+ * ```ts
164
+ * const unsyncedDeals = await client.data.getUnsyncedDeals();
165
+ * ```
166
+ */
167
+ async getUnsyncedDeals(options) {
168
+ return this.listDeals({ synced: false, ...options });
169
+ }
170
+ // ============================================
171
+ // EXPORT
172
+ // ============================================
173
+ /**
174
+ * Export jobs data
175
+ *
176
+ * @example
177
+ * ```ts
178
+ * // Export as JSON
179
+ * const jsonData = await client.data.exportJobs({ format: "json" });
180
+ *
181
+ * // Export as CSV
182
+ * const csvData = await client.data.exportJobs({ format: "csv" });
183
+ * ```
184
+ */
185
+ async exportJobs(options = {}) {
186
+ const result = await get(this.ctx, "/v1/data/export/jobs", {
187
+ format: options.format || "json",
188
+ status: options.status,
189
+ type: options.type,
190
+ fromDate: options.fromDate,
191
+ toDate: options.toDate,
192
+ });
193
+ return result.data;
194
+ }
195
+ /**
196
+ * Export deals data
197
+ *
198
+ * @example
199
+ * ```ts
200
+ * // Export as JSON
201
+ * const jsonData = await client.data.exportDeals({ format: "json" });
202
+ *
203
+ * // Export as CSV with filters
204
+ * const csvData = await client.data.exportDeals({
205
+ * format: "csv",
206
+ * minScore: 70,
207
+ * category: "software"
208
+ * });
209
+ * ```
210
+ */
211
+ async exportDeals(options = {}) {
212
+ const result = await get(this.ctx, "/v1/data/export/deals", {
213
+ format: options.format || "json",
214
+ minScore: options.minScore,
215
+ maxPrice: options.maxPrice,
216
+ category: options.category,
217
+ includeRawSignals: options.includeRawSignals,
218
+ });
219
+ return result.data;
220
+ }
221
+ // ============================================
222
+ // STATS
223
+ // ============================================
224
+ /**
225
+ * Get client statistics
226
+ *
227
+ * @example
228
+ * ```ts
229
+ * const stats = await client.data.getStats();
230
+ * console.log(stats.totals.deals);
231
+ * console.log(stats.performance.avgDealScore);
232
+ * ```
233
+ */
234
+ async getStats() {
235
+ const result = await get(this.ctx, "/v1/data/stats");
236
+ return result.data;
237
+ }
238
+ }
239
+ //# sourceMappingURL=data.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"data.js","sourceRoot":"","sources":["../../../../src/resources/data.ts"],"names":[],"mappings":"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"}