renderscreenshot 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 (45) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +366 -0
  3. package/dist/cjs/cache.js +125 -0
  4. package/dist/cjs/cache.js.map +1 -0
  5. package/dist/cjs/client.js +304 -0
  6. package/dist/cjs/client.js.map +1 -0
  7. package/dist/cjs/errors.js +85 -0
  8. package/dist/cjs/errors.js.map +1 -0
  9. package/dist/cjs/index.js +44 -0
  10. package/dist/cjs/index.js.map +1 -0
  11. package/dist/cjs/options.js +659 -0
  12. package/dist/cjs/options.js.map +1 -0
  13. package/dist/cjs/types.js +3 -0
  14. package/dist/cjs/types.js.map +1 -0
  15. package/dist/cjs/webhooks.js +152 -0
  16. package/dist/cjs/webhooks.js.map +1 -0
  17. package/dist/esm/cache.js +121 -0
  18. package/dist/esm/cache.js.map +1 -0
  19. package/dist/esm/client.js +300 -0
  20. package/dist/esm/client.js.map +1 -0
  21. package/dist/esm/errors.js +81 -0
  22. package/dist/esm/errors.js.map +1 -0
  23. package/dist/esm/index.js +34 -0
  24. package/dist/esm/index.js.map +1 -0
  25. package/dist/esm/options.js +655 -0
  26. package/dist/esm/options.js.map +1 -0
  27. package/dist/esm/types.js +2 -0
  28. package/dist/esm/types.js.map +1 -0
  29. package/dist/esm/webhooks.js +147 -0
  30. package/dist/esm/webhooks.js.map +1 -0
  31. package/dist/types/cache.d.ts +96 -0
  32. package/dist/types/cache.d.ts.map +1 -0
  33. package/dist/types/client.d.ts +147 -0
  34. package/dist/types/client.d.ts.map +1 -0
  35. package/dist/types/errors.d.ts +51 -0
  36. package/dist/types/errors.d.ts.map +1 -0
  37. package/dist/types/index.d.ts +35 -0
  38. package/dist/types/index.d.ts.map +1 -0
  39. package/dist/types/options.d.ts +265 -0
  40. package/dist/types/options.d.ts.map +1 -0
  41. package/dist/types/types.d.ts +249 -0
  42. package/dist/types/types.d.ts.map +1 -0
  43. package/dist/types/webhooks.d.ts +60 -0
  44. package/dist/types/webhooks.d.ts.map +1 -0
  45. package/package.json +84 -0
@@ -0,0 +1,265 @@
1
+ import type { TakeOptionsConfig, ImageFormat, WaitCondition, BlockableResource, MediaType, StorageAcl, Preset, Device, PdfPaperSize, Cookie } from './types.js';
2
+ /**
3
+ * Fluent builder for screenshot options
4
+ */
5
+ export declare class TakeOptions {
6
+ private readonly config;
7
+ private constructor();
8
+ /**
9
+ * Create options with a URL target
10
+ */
11
+ static url(url: string): TakeOptions;
12
+ /**
13
+ * Create options with HTML content
14
+ */
15
+ static html(html: string): TakeOptions;
16
+ /**
17
+ * Create options from an existing config
18
+ */
19
+ static from(config: TakeOptionsConfig): TakeOptions;
20
+ /**
21
+ * Set viewport width in pixels
22
+ */
23
+ width(value: number): TakeOptions;
24
+ /**
25
+ * Set viewport height in pixels
26
+ */
27
+ height(value: number): TakeOptions;
28
+ /**
29
+ * Set device scale factor (1-3)
30
+ */
31
+ scale(value: number): TakeOptions;
32
+ /**
33
+ * Enable mobile emulation
34
+ */
35
+ mobile(value?: boolean): TakeOptions;
36
+ /**
37
+ * Capture full scrollable page
38
+ */
39
+ fullPage(value?: boolean): TakeOptions;
40
+ /**
41
+ * Capture specific element by CSS selector
42
+ */
43
+ element(selector: string): TakeOptions;
44
+ /**
45
+ * Set output format
46
+ */
47
+ format(value: ImageFormat): TakeOptions;
48
+ /**
49
+ * Set JPEG/WebP quality (1-100)
50
+ */
51
+ quality(value: number): TakeOptions;
52
+ /**
53
+ * Set wait condition
54
+ */
55
+ waitFor(value: WaitCondition): TakeOptions;
56
+ /**
57
+ * Add delay after page load (milliseconds)
58
+ */
59
+ delay(value: number): TakeOptions;
60
+ /**
61
+ * Wait for CSS selector to appear
62
+ */
63
+ waitForSelector(selector: string): TakeOptions;
64
+ /**
65
+ * Maximum wait time in milliseconds
66
+ */
67
+ waitForTimeout(value: number): TakeOptions;
68
+ /**
69
+ * Use a preset configuration
70
+ */
71
+ preset(value: Preset): TakeOptions;
72
+ /**
73
+ * Emulate a specific device
74
+ */
75
+ device(value: Device): TakeOptions;
76
+ /**
77
+ * Block ad network domains
78
+ */
79
+ blockAds(value?: boolean): TakeOptions;
80
+ /**
81
+ * Block analytics/tracking
82
+ */
83
+ blockTrackers(value?: boolean): TakeOptions;
84
+ /**
85
+ * Auto-dismiss cookie popups
86
+ */
87
+ blockCookieBanners(value?: boolean): TakeOptions;
88
+ /**
89
+ * Block chat widgets
90
+ */
91
+ blockChatWidgets(value?: boolean): TakeOptions;
92
+ /**
93
+ * Block URLs matching patterns (glob)
94
+ */
95
+ blockUrls(patterns: string[]): TakeOptions;
96
+ /**
97
+ * Block specific resource types
98
+ */
99
+ blockResources(types: BlockableResource[]): TakeOptions;
100
+ /**
101
+ * Inject JavaScript (inline or URL)
102
+ */
103
+ injectScript(script: string): TakeOptions;
104
+ /**
105
+ * Inject CSS (inline or URL)
106
+ */
107
+ injectStyle(style: string): TakeOptions;
108
+ /**
109
+ * Click element before capture
110
+ */
111
+ click(selector: string): TakeOptions;
112
+ /**
113
+ * Hide elements (visibility: hidden)
114
+ */
115
+ hide(selectors: string[]): TakeOptions;
116
+ /**
117
+ * Remove elements from DOM
118
+ */
119
+ remove(selectors: string[]): TakeOptions;
120
+ /**
121
+ * Enable dark mode (prefers-color-scheme: dark)
122
+ */
123
+ darkMode(value?: boolean): TakeOptions;
124
+ /**
125
+ * Enable reduced motion preference
126
+ */
127
+ reducedMotion(value?: boolean): TakeOptions;
128
+ /**
129
+ * Set media type emulation
130
+ */
131
+ mediaType(value: MediaType): TakeOptions;
132
+ /**
133
+ * Set custom user agent
134
+ */
135
+ userAgent(value: string): TakeOptions;
136
+ /**
137
+ * Set timezone (IANA format)
138
+ */
139
+ timezone(value: string): TakeOptions;
140
+ /**
141
+ * Set locale (BCP 47 format)
142
+ */
143
+ locale(value: string): TakeOptions;
144
+ /**
145
+ * Set geolocation coordinates
146
+ */
147
+ geolocation(latitude: number, longitude: number, accuracy?: number): TakeOptions;
148
+ /**
149
+ * Set custom HTTP headers
150
+ */
151
+ headers(value: Record<string, string>): TakeOptions;
152
+ /**
153
+ * Set cookies
154
+ */
155
+ cookies(value: Cookie[]): TakeOptions;
156
+ /**
157
+ * Set HTTP Basic authentication
158
+ */
159
+ authBasic(username: string, password: string): TakeOptions;
160
+ /**
161
+ * Set Bearer token authentication
162
+ */
163
+ authBearer(token: string): TakeOptions;
164
+ /**
165
+ * Bypass Content Security Policy
166
+ */
167
+ bypassCsp(value?: boolean): TakeOptions;
168
+ /**
169
+ * Set cache TTL in seconds (3600-2592000)
170
+ */
171
+ cacheTtl(value: number): TakeOptions;
172
+ /**
173
+ * Force cache refresh
174
+ */
175
+ cacheRefresh(value?: boolean): TakeOptions;
176
+ /**
177
+ * Set PDF paper size
178
+ */
179
+ pdfPaperSize(value: PdfPaperSize): TakeOptions;
180
+ /**
181
+ * Set custom PDF width (CSS units)
182
+ */
183
+ pdfWidth(value: string): TakeOptions;
184
+ /**
185
+ * Set custom PDF height (CSS units)
186
+ */
187
+ pdfHeight(value: string): TakeOptions;
188
+ /**
189
+ * Set PDF landscape orientation
190
+ */
191
+ pdfLandscape(value?: boolean): TakeOptions;
192
+ /**
193
+ * Set uniform PDF margin (CSS units)
194
+ */
195
+ pdfMargin(value: string): TakeOptions;
196
+ /**
197
+ * Set PDF top margin
198
+ */
199
+ pdfMarginTop(value: string): TakeOptions;
200
+ /**
201
+ * Set PDF right margin
202
+ */
203
+ pdfMarginRight(value: string): TakeOptions;
204
+ /**
205
+ * Set PDF bottom margin
206
+ */
207
+ pdfMarginBottom(value: string): TakeOptions;
208
+ /**
209
+ * Set PDF left margin
210
+ */
211
+ pdfMarginLeft(value: string): TakeOptions;
212
+ /**
213
+ * Set PDF scale factor (0.1-2.0)
214
+ */
215
+ pdfScale(value: number): TakeOptions;
216
+ /**
217
+ * Include background graphics in PDF
218
+ */
219
+ pdfPrintBackground(value?: boolean): TakeOptions;
220
+ /**
221
+ * Set PDF page ranges (e.g., "1-5, 8")
222
+ */
223
+ pdfPageRanges(value: string): TakeOptions;
224
+ /**
225
+ * Set PDF header HTML template
226
+ */
227
+ pdfHeader(value: string): TakeOptions;
228
+ /**
229
+ * Set PDF footer HTML template
230
+ */
231
+ pdfFooter(value: string): TakeOptions;
232
+ /**
233
+ * Fit content to single PDF page
234
+ */
235
+ pdfFitOnePage(value?: boolean): TakeOptions;
236
+ /**
237
+ * Use CSS-defined page size for PDF
238
+ */
239
+ pdfPreferCssPageSize(value?: boolean): TakeOptions;
240
+ /**
241
+ * Enable custom storage upload
242
+ */
243
+ storageEnabled(value?: boolean): TakeOptions;
244
+ /**
245
+ * Set storage path template
246
+ */
247
+ storagePath(value: string): TakeOptions;
248
+ /**
249
+ * Set storage ACL
250
+ */
251
+ storageAcl(value: StorageAcl): TakeOptions;
252
+ /**
253
+ * Get the raw configuration object
254
+ */
255
+ toConfig(): TakeOptionsConfig;
256
+ /**
257
+ * Convert to API request parameters (for POST body)
258
+ */
259
+ toParams(): Record<string, unknown>;
260
+ /**
261
+ * Convert to query string (for GET requests)
262
+ */
263
+ toQueryString(): string;
264
+ }
265
+ //# sourceMappingURL=options.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"options.d.ts","sourceRoot":"","sources":["../../src/options.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,249 @@
1
+ /**
2
+ * Client configuration options
3
+ */
4
+ export interface ClientOptions {
5
+ /** Base URL for the API (defaults to https://api.renderscreenshot.com) */
6
+ baseUrl?: string;
7
+ /** Request timeout in milliseconds (defaults to 30000) */
8
+ timeout?: number;
9
+ }
10
+ /**
11
+ * Screenshot format options
12
+ */
13
+ export type ImageFormat = 'png' | 'jpeg' | 'webp' | 'pdf';
14
+ /**
15
+ * Wait condition types
16
+ */
17
+ export type WaitCondition = 'load' | 'networkidle' | 'domcontentloaded';
18
+ /**
19
+ * Resource types that can be blocked
20
+ */
21
+ export type BlockableResource = 'font' | 'media' | 'image' | 'script' | 'stylesheet';
22
+ /**
23
+ * Media type emulation
24
+ */
25
+ export type MediaType = 'screen' | 'print';
26
+ /**
27
+ * Storage ACL options
28
+ */
29
+ export type StorageAcl = 'public-read' | 'private';
30
+ /**
31
+ * Preset identifiers
32
+ */
33
+ export type Preset = 'og_card' | 'twitter_card' | 'twitter_card_large' | 'full_page' | 'mobile' | 'mobile_landscape' | 'desktop_hd' | 'desktop_4k' | 'link_preview' | 'pdf_document';
34
+ /**
35
+ * Device identifiers
36
+ */
37
+ export type Device = 'iphone_14_pro' | 'iphone_14' | 'iphone_se' | 'pixel_7' | 'pixel_7_pro' | 'samsung_galaxy_s23' | 'ipad_pro_12' | 'ipad_air' | 'macbook_pro_16' | 'macbook_air_15' | 'imac_24' | 'desktop_1080p' | 'desktop_1440p' | 'desktop_4k' | 'surface_pro';
38
+ /**
39
+ * PDF paper size options
40
+ */
41
+ export type PdfPaperSize = 'a0' | 'a1' | 'a2' | 'a3' | 'a4' | 'a5' | 'a6' | 'letter' | 'legal' | 'tabloid';
42
+ /**
43
+ * Cookie configuration
44
+ */
45
+ export interface Cookie {
46
+ name: string;
47
+ value: string;
48
+ domain?: string;
49
+ path?: string;
50
+ expires?: number;
51
+ httpOnly?: boolean;
52
+ secure?: boolean;
53
+ sameSite?: 'Strict' | 'Lax' | 'None';
54
+ }
55
+ /**
56
+ * Geolocation configuration
57
+ */
58
+ export interface Geolocation {
59
+ latitude: number;
60
+ longitude: number;
61
+ accuracy?: number;
62
+ }
63
+ /**
64
+ * Screenshot options configuration
65
+ */
66
+ export interface TakeOptionsConfig {
67
+ url?: string;
68
+ html?: string;
69
+ width?: number;
70
+ height?: number;
71
+ scale?: number;
72
+ mobile?: boolean;
73
+ fullPage?: boolean;
74
+ element?: string;
75
+ format?: ImageFormat;
76
+ quality?: number;
77
+ waitFor?: WaitCondition;
78
+ delay?: number;
79
+ waitForSelector?: string;
80
+ waitForTimeout?: number;
81
+ preset?: Preset;
82
+ device?: Device;
83
+ blockAds?: boolean;
84
+ blockTrackers?: boolean;
85
+ blockCookieBanners?: boolean;
86
+ blockChatWidgets?: boolean;
87
+ blockUrls?: string[];
88
+ blockResources?: BlockableResource[];
89
+ injectScript?: string;
90
+ injectStyle?: string;
91
+ click?: string;
92
+ hide?: string[];
93
+ remove?: string[];
94
+ darkMode?: boolean;
95
+ reducedMotion?: boolean;
96
+ mediaType?: MediaType;
97
+ userAgent?: string;
98
+ timezone?: string;
99
+ locale?: string;
100
+ geolocation?: Geolocation;
101
+ headers?: Record<string, string>;
102
+ cookies?: Cookie[];
103
+ authBasic?: {
104
+ username: string;
105
+ password: string;
106
+ };
107
+ authBearer?: string;
108
+ bypassCsp?: boolean;
109
+ cacheTtl?: number;
110
+ cacheRefresh?: boolean;
111
+ pdfPaperSize?: PdfPaperSize;
112
+ pdfWidth?: string;
113
+ pdfHeight?: string;
114
+ pdfLandscape?: boolean;
115
+ pdfMargin?: string;
116
+ pdfMarginTop?: string;
117
+ pdfMarginRight?: string;
118
+ pdfMarginBottom?: string;
119
+ pdfMarginLeft?: string;
120
+ pdfScale?: number;
121
+ pdfPrintBackground?: boolean;
122
+ pdfPageRanges?: string;
123
+ pdfHeader?: string;
124
+ pdfFooter?: string;
125
+ pdfFitOnePage?: boolean;
126
+ pdfPreferCssPageSize?: boolean;
127
+ storageEnabled?: boolean;
128
+ storagePath?: string;
129
+ storageAcl?: StorageAcl;
130
+ }
131
+ /**
132
+ * Screenshot response from takeJson
133
+ */
134
+ export interface ScreenshotResponse {
135
+ /** URL to the screenshot image */
136
+ url: string;
137
+ /** Cache URL (CDN link) */
138
+ cacheUrl?: string;
139
+ /** Screenshot width in pixels */
140
+ width: number;
141
+ /** Screenshot height in pixels */
142
+ height: number;
143
+ /** Image format */
144
+ format: ImageFormat;
145
+ /** File size in bytes */
146
+ size: number;
147
+ /** Cache key for the screenshot */
148
+ cacheKey?: string;
149
+ /** Time to live in seconds */
150
+ ttl?: number;
151
+ /** Whether the response was served from cache */
152
+ cached: boolean;
153
+ /** Storage path if BYOS was used */
154
+ storagePath?: string;
155
+ }
156
+ /**
157
+ * Batch request item
158
+ */
159
+ export interface BatchRequestItem {
160
+ url: string;
161
+ options?: Partial<TakeOptionsConfig>;
162
+ }
163
+ /**
164
+ * Batch response item
165
+ */
166
+ export interface BatchResponseItem {
167
+ url: string;
168
+ success: boolean;
169
+ response?: ScreenshotResponse;
170
+ error?: {
171
+ code: string;
172
+ message: string;
173
+ };
174
+ }
175
+ /**
176
+ * Batch response
177
+ */
178
+ export interface BatchResponse {
179
+ id: string;
180
+ status: 'pending' | 'processing' | 'completed' | 'failed';
181
+ total: number;
182
+ completed: number;
183
+ failed: number;
184
+ results: BatchResponseItem[];
185
+ }
186
+ /**
187
+ * Cache entry metadata
188
+ */
189
+ export interface CacheEntry {
190
+ key: string;
191
+ url: string;
192
+ createdAt: Date;
193
+ expiresAt: Date;
194
+ size: number;
195
+ format: ImageFormat;
196
+ }
197
+ /**
198
+ * Purge operation result
199
+ */
200
+ export interface PurgeResult {
201
+ purged: number;
202
+ keys: string[];
203
+ }
204
+ /**
205
+ * Webhook event types
206
+ */
207
+ export type WebhookEventType = 'screenshot.completed' | 'screenshot.failed' | 'batch.completed' | 'batch.failed';
208
+ /**
209
+ * Webhook event payload
210
+ */
211
+ export interface WebhookEvent {
212
+ id: string;
213
+ type: WebhookEventType;
214
+ timestamp: Date;
215
+ data: {
216
+ url?: string;
217
+ batchId?: string;
218
+ response?: ScreenshotResponse;
219
+ error?: {
220
+ code: string;
221
+ message: string;
222
+ };
223
+ };
224
+ }
225
+ /**
226
+ * Preset metadata
227
+ */
228
+ export interface PresetInfo {
229
+ id: Preset;
230
+ name: string;
231
+ description: string;
232
+ width: number;
233
+ height: number;
234
+ scale?: number;
235
+ format?: ImageFormat;
236
+ }
237
+ /**
238
+ * Device metadata
239
+ */
240
+ export interface DeviceInfo {
241
+ id: Device;
242
+ name: string;
243
+ width: number;
244
+ height: number;
245
+ scale: number;
246
+ mobile: boolean;
247
+ userAgent: string;
248
+ }
249
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/types.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,60 @@
1
+ import type { WebhookEvent } from './types.js';
2
+ /**
3
+ * Verify a webhook signature
4
+ *
5
+ * Webhooks are signed using HMAC-SHA256 with the format:
6
+ * `sha256=hmac(secret, "${timestamp}.${payload}")`
7
+ *
8
+ * @param payload - The raw request body as a string
9
+ * @param signature - The X-Webhook-Signature header value
10
+ * @param timestamp - The X-Webhook-Timestamp header value
11
+ * @param secret - Your webhook signing secret from the dashboard
12
+ * @returns true if the signature is valid
13
+ *
14
+ * @example
15
+ * ```typescript
16
+ * import { verifyWebhook } from 'renderscreenshot';
17
+ *
18
+ * // In your webhook handler
19
+ * const signature = req.headers['x-webhook-signature'];
20
+ * const timestamp = req.headers['x-webhook-timestamp'];
21
+ * const payload = JSON.stringify(req.body);
22
+ *
23
+ * if (verifyWebhook(payload, signature, timestamp, process.env.WEBHOOK_SECRET)) {
24
+ * // Process webhook
25
+ * } else {
26
+ * res.status(401).send('Invalid signature');
27
+ * }
28
+ * ```
29
+ */
30
+ export declare function verifyWebhook(payload: string, signature: string, timestamp: string, secret: string): boolean;
31
+ /**
32
+ * Parse a webhook payload into a typed event object
33
+ *
34
+ * @param payload - The raw request body (string or parsed object)
35
+ * @returns Typed webhook event
36
+ *
37
+ * @example
38
+ * ```typescript
39
+ * import { parseWebhook, verifyWebhook } from 'renderscreenshot';
40
+ *
41
+ * // After verifying signature
42
+ * const event = parseWebhook(req.body);
43
+ *
44
+ * if (event.type === 'screenshot.completed') {
45
+ * console.log(`Screenshot ready: ${event.data.response?.url}`);
46
+ * }
47
+ * ```
48
+ */
49
+ export declare function parseWebhook(payload: string | Record<string, unknown>): WebhookEvent;
50
+ /**
51
+ * Extract webhook headers from a request-like object
52
+ *
53
+ * @param headers - Headers object (works with Express, Node http, etc.)
54
+ * @returns Object with signature and timestamp
55
+ */
56
+ export declare function extractWebhookHeaders(headers: Record<string, string | string[] | undefined> | Headers): {
57
+ signature: string;
58
+ timestamp: string;
59
+ };
60
+ //# sourceMappingURL=webhooks.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"webhooks.d.ts","sourceRoot":"","sources":["../../src/webhooks.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,YAAY,EAAoB,MAAM,YAAY,CAAC;AA2BjE;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AACH,wBAAgB,aAAa,CAC3B,OAAO,EAAE,MAAM,EACf,SAAS,EAAE,MAAM,EACjB,SAAS,EAAE,MAAM,EACjB,MAAM,EAAE,MAAM,GACb,OAAO,CA6BT;AAED;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAgB,YAAY,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,YAAY,CAuDpF;AAED;;;;;GAKG;AACH,wBAAgB,qBAAqB,CACnC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,EAAE,GAAG,SAAS,CAAC,GAAG,OAAO,GAC/D;IAAE,SAAS,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,MAAM,CAAA;CAAE,CAgB1C"}
package/package.json ADDED
@@ -0,0 +1,84 @@
1
+ {
2
+ "name": "renderscreenshot",
3
+ "version": "1.0.0",
4
+ "description": "Official Node.js/TypeScript SDK for RenderScreenshot - A developer-friendly screenshot API",
5
+ "main": "dist/cjs/index.js",
6
+ "module": "dist/esm/index.js",
7
+ "types": "dist/types/index.d.ts",
8
+ "exports": {
9
+ ".": {
10
+ "import": {
11
+ "types": "./dist/types/index.d.ts",
12
+ "default": "./dist/esm/index.js"
13
+ },
14
+ "require": {
15
+ "types": "./dist/types/index.d.ts",
16
+ "default": "./dist/cjs/index.js"
17
+ }
18
+ }
19
+ },
20
+ "files": [
21
+ "dist",
22
+ "README.md",
23
+ "LICENSE"
24
+ ],
25
+ "scripts": {
26
+ "build": "npm run build:cjs && npm run build:esm && npm run build:types",
27
+ "build:cjs": "tsc --project tsconfig.cjs.json",
28
+ "build:esm": "tsc --project tsconfig.esm.json",
29
+ "build:types": "tsc --project tsconfig.types.json",
30
+ "clean": "rm -rf dist",
31
+ "test": "vitest run",
32
+ "test:watch": "vitest",
33
+ "test:coverage": "vitest run --coverage",
34
+ "lint": "eslint src tests",
35
+ "lint:fix": "eslint src tests --fix",
36
+ "format": "prettier --write \"src/**/*.ts\" \"tests/**/*.ts\"",
37
+ "format:check": "prettier --check \"src/**/*.ts\" \"tests/**/*.ts\"",
38
+ "typecheck": "tsc --noEmit",
39
+ "prepare": "husky"
40
+ },
41
+ "keywords": [
42
+ "screenshot",
43
+ "screenshot-api",
44
+ "web-screenshot",
45
+ "renderscreenshot",
46
+ "headless-browser",
47
+ "pdf-generation",
48
+ "og-image",
49
+ "social-cards",
50
+ "link-preview"
51
+ ],
52
+ "author": "RenderScreenshot",
53
+ "license": "MIT",
54
+ "repository": {
55
+ "type": "git",
56
+ "url": "https://github.com/Render-Screenshot/rs-node.git"
57
+ },
58
+ "bugs": {
59
+ "url": "https://github.com/Render-Screenshot/rs-node/issues"
60
+ },
61
+ "homepage": "https://renderscreenshot.com/docs/sdks/node",
62
+ "engines": {
63
+ "node": ">=18.0.0"
64
+ },
65
+ "devDependencies": {
66
+ "@eslint/js": "^9.0.0",
67
+ "@types/node": "^20.11.0",
68
+ "@vitest/coverage-v8": "^4.0.18",
69
+ "eslint": "^9.0.0",
70
+ "eslint-config-prettier": "^9.1.0",
71
+ "husky": "^9.0.0",
72
+ "lint-staged": "^15.2.0",
73
+ "prettier": "^3.2.0",
74
+ "typescript": "^5.3.0",
75
+ "typescript-eslint": "^8.0.0",
76
+ "vitest": "^4.0.18"
77
+ },
78
+ "lint-staged": {
79
+ "*.ts": [
80
+ "eslint --fix",
81
+ "prettier --write"
82
+ ]
83
+ }
84
+ }