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.
- package/LICENSE +21 -0
- package/README.md +366 -0
- package/dist/cjs/cache.js +125 -0
- package/dist/cjs/cache.js.map +1 -0
- package/dist/cjs/client.js +304 -0
- package/dist/cjs/client.js.map +1 -0
- package/dist/cjs/errors.js +85 -0
- package/dist/cjs/errors.js.map +1 -0
- package/dist/cjs/index.js +44 -0
- package/dist/cjs/index.js.map +1 -0
- package/dist/cjs/options.js +659 -0
- package/dist/cjs/options.js.map +1 -0
- package/dist/cjs/types.js +3 -0
- package/dist/cjs/types.js.map +1 -0
- package/dist/cjs/webhooks.js +152 -0
- package/dist/cjs/webhooks.js.map +1 -0
- package/dist/esm/cache.js +121 -0
- package/dist/esm/cache.js.map +1 -0
- package/dist/esm/client.js +300 -0
- package/dist/esm/client.js.map +1 -0
- package/dist/esm/errors.js +81 -0
- package/dist/esm/errors.js.map +1 -0
- package/dist/esm/index.js +34 -0
- package/dist/esm/index.js.map +1 -0
- package/dist/esm/options.js +655 -0
- package/dist/esm/options.js.map +1 -0
- package/dist/esm/types.js +2 -0
- package/dist/esm/types.js.map +1 -0
- package/dist/esm/webhooks.js +147 -0
- package/dist/esm/webhooks.js.map +1 -0
- package/dist/types/cache.d.ts +96 -0
- package/dist/types/cache.d.ts.map +1 -0
- package/dist/types/client.d.ts +147 -0
- package/dist/types/client.d.ts.map +1 -0
- package/dist/types/errors.d.ts +51 -0
- package/dist/types/errors.d.ts.map +1 -0
- package/dist/types/index.d.ts +35 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/types/options.d.ts +265 -0
- package/dist/types/options.d.ts.map +1 -0
- package/dist/types/types.d.ts +249 -0
- package/dist/types/types.d.ts.map +1 -0
- package/dist/types/webhooks.d.ts +60 -0
- package/dist/types/webhooks.d.ts.map +1 -0
- 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
|
+
}
|