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 @@
|
|
|
1
|
+
{"version":3,"file":"options.js","sourceRoot":"","sources":["../../src/options.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/types.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,152 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.verifyWebhook = verifyWebhook;
|
|
4
|
+
exports.parseWebhook = parseWebhook;
|
|
5
|
+
exports.extractWebhookHeaders = extractWebhookHeaders;
|
|
6
|
+
const node_crypto_1 = require("node:crypto");
|
|
7
|
+
/**
|
|
8
|
+
* Verify a webhook signature
|
|
9
|
+
*
|
|
10
|
+
* Webhooks are signed using HMAC-SHA256 with the format:
|
|
11
|
+
* `sha256=hmac(secret, "${timestamp}.${payload}")`
|
|
12
|
+
*
|
|
13
|
+
* @param payload - The raw request body as a string
|
|
14
|
+
* @param signature - The X-Webhook-Signature header value
|
|
15
|
+
* @param timestamp - The X-Webhook-Timestamp header value
|
|
16
|
+
* @param secret - Your webhook signing secret from the dashboard
|
|
17
|
+
* @returns true if the signature is valid
|
|
18
|
+
*
|
|
19
|
+
* @example
|
|
20
|
+
* ```typescript
|
|
21
|
+
* import { verifyWebhook } from 'renderscreenshot';
|
|
22
|
+
*
|
|
23
|
+
* // In your webhook handler
|
|
24
|
+
* const signature = req.headers['x-webhook-signature'];
|
|
25
|
+
* const timestamp = req.headers['x-webhook-timestamp'];
|
|
26
|
+
* const payload = JSON.stringify(req.body);
|
|
27
|
+
*
|
|
28
|
+
* if (verifyWebhook(payload, signature, timestamp, process.env.WEBHOOK_SECRET)) {
|
|
29
|
+
* // Process webhook
|
|
30
|
+
* } else {
|
|
31
|
+
* res.status(401).send('Invalid signature');
|
|
32
|
+
* }
|
|
33
|
+
* ```
|
|
34
|
+
*/
|
|
35
|
+
function verifyWebhook(payload, signature, timestamp, secret) {
|
|
36
|
+
// Validate inputs
|
|
37
|
+
if (payload === '' || signature === '' || timestamp === '' || secret === '') {
|
|
38
|
+
return false;
|
|
39
|
+
}
|
|
40
|
+
// Check timestamp to prevent replay attacks (5 minute tolerance)
|
|
41
|
+
const timestampNum = parseInt(timestamp, 10);
|
|
42
|
+
if (isNaN(timestampNum)) {
|
|
43
|
+
return false;
|
|
44
|
+
}
|
|
45
|
+
const now = Math.floor(Date.now() / 1000);
|
|
46
|
+
const tolerance = 5 * 60; // 5 minutes
|
|
47
|
+
if (Math.abs(now - timestampNum) > tolerance) {
|
|
48
|
+
return false;
|
|
49
|
+
}
|
|
50
|
+
// Compute expected signature
|
|
51
|
+
const message = `${timestamp}.${payload}`;
|
|
52
|
+
const expected = `sha256=${(0, node_crypto_1.createHmac)('sha256', secret).update(message).digest('hex')}`;
|
|
53
|
+
// Use timing-safe comparison to prevent timing attacks
|
|
54
|
+
try {
|
|
55
|
+
return (0, node_crypto_1.timingSafeEqual)(Buffer.from(expected), Buffer.from(signature));
|
|
56
|
+
}
|
|
57
|
+
catch {
|
|
58
|
+
// Buffers have different lengths
|
|
59
|
+
return false;
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
/**
|
|
63
|
+
* Parse a webhook payload into a typed event object
|
|
64
|
+
*
|
|
65
|
+
* @param payload - The raw request body (string or parsed object)
|
|
66
|
+
* @returns Typed webhook event
|
|
67
|
+
*
|
|
68
|
+
* @example
|
|
69
|
+
* ```typescript
|
|
70
|
+
* import { parseWebhook, verifyWebhook } from 'renderscreenshot';
|
|
71
|
+
*
|
|
72
|
+
* // After verifying signature
|
|
73
|
+
* const event = parseWebhook(req.body);
|
|
74
|
+
*
|
|
75
|
+
* if (event.type === 'screenshot.completed') {
|
|
76
|
+
* console.log(`Screenshot ready: ${event.data.response?.url}`);
|
|
77
|
+
* }
|
|
78
|
+
* ```
|
|
79
|
+
*/
|
|
80
|
+
function parseWebhook(payload) {
|
|
81
|
+
const raw = typeof payload === 'string' ? JSON.parse(payload) : payload;
|
|
82
|
+
const data = raw;
|
|
83
|
+
const event = {
|
|
84
|
+
id: data.id,
|
|
85
|
+
type: data.event,
|
|
86
|
+
timestamp: new Date(data.timestamp),
|
|
87
|
+
data: {},
|
|
88
|
+
};
|
|
89
|
+
// Parse based on event type
|
|
90
|
+
switch (data.event) {
|
|
91
|
+
case 'screenshot.completed': {
|
|
92
|
+
const eventData = {
|
|
93
|
+
response: {
|
|
94
|
+
url: data.data.screenshot_url ?? '',
|
|
95
|
+
width: data.data.width ?? 0,
|
|
96
|
+
height: data.data.height ?? 0,
|
|
97
|
+
format: (data.data.format ?? 'png'),
|
|
98
|
+
size: data.data.size ?? 0,
|
|
99
|
+
cached: data.data.cached ?? false,
|
|
100
|
+
},
|
|
101
|
+
};
|
|
102
|
+
if (data.data.url !== undefined) {
|
|
103
|
+
eventData.url = data.data.url;
|
|
104
|
+
}
|
|
105
|
+
event.data = eventData;
|
|
106
|
+
break;
|
|
107
|
+
}
|
|
108
|
+
case 'screenshot.failed': {
|
|
109
|
+
const eventData = {
|
|
110
|
+
error: {
|
|
111
|
+
code: 'render_failed',
|
|
112
|
+
message: data.data.error ?? 'Unknown error',
|
|
113
|
+
},
|
|
114
|
+
};
|
|
115
|
+
if (data.data.url !== undefined) {
|
|
116
|
+
eventData.url = data.data.url;
|
|
117
|
+
}
|
|
118
|
+
event.data = eventData;
|
|
119
|
+
break;
|
|
120
|
+
}
|
|
121
|
+
case 'batch.completed':
|
|
122
|
+
case 'batch.failed':
|
|
123
|
+
event.data = {
|
|
124
|
+
batchId: data.id,
|
|
125
|
+
};
|
|
126
|
+
break;
|
|
127
|
+
}
|
|
128
|
+
return event;
|
|
129
|
+
}
|
|
130
|
+
/**
|
|
131
|
+
* Extract webhook headers from a request-like object
|
|
132
|
+
*
|
|
133
|
+
* @param headers - Headers object (works with Express, Node http, etc.)
|
|
134
|
+
* @returns Object with signature and timestamp
|
|
135
|
+
*/
|
|
136
|
+
function extractWebhookHeaders(headers) {
|
|
137
|
+
const getHeader = (name) => {
|
|
138
|
+
if (headers instanceof Headers) {
|
|
139
|
+
return headers.get(name) ?? '';
|
|
140
|
+
}
|
|
141
|
+
const value = headers[name] ?? headers[name.toLowerCase()];
|
|
142
|
+
if (Array.isArray(value)) {
|
|
143
|
+
return value[0] ?? '';
|
|
144
|
+
}
|
|
145
|
+
return value ?? '';
|
|
146
|
+
};
|
|
147
|
+
return {
|
|
148
|
+
signature: getHeader('X-Webhook-Signature'),
|
|
149
|
+
timestamp: getHeader('X-Webhook-Timestamp'),
|
|
150
|
+
};
|
|
151
|
+
}
|
|
152
|
+
//# sourceMappingURL=webhooks.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"webhooks.js","sourceRoot":"","sources":["../../src/webhooks.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,121 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Cache management methods for RenderScreenshot
|
|
3
|
+
*/
|
|
4
|
+
export class CacheManager {
|
|
5
|
+
client;
|
|
6
|
+
constructor(client) {
|
|
7
|
+
this.client = client;
|
|
8
|
+
}
|
|
9
|
+
/**
|
|
10
|
+
* Get a cached screenshot by its cache key
|
|
11
|
+
*
|
|
12
|
+
* @param key - The cache key returned in X-Cache-Key header
|
|
13
|
+
* @returns Buffer containing the screenshot, or null if not found
|
|
14
|
+
*
|
|
15
|
+
* @example
|
|
16
|
+
* ```typescript
|
|
17
|
+
* const image = await client.cache.get('cache_xyz789');
|
|
18
|
+
* if (image) {
|
|
19
|
+
* await fs.writeFile('cached.png', image);
|
|
20
|
+
* }
|
|
21
|
+
* ```
|
|
22
|
+
*/
|
|
23
|
+
async get(key) {
|
|
24
|
+
try {
|
|
25
|
+
return await this.client.request('GET', `/cache/${key}`, {
|
|
26
|
+
responseType: 'buffer',
|
|
27
|
+
});
|
|
28
|
+
}
|
|
29
|
+
catch (error) {
|
|
30
|
+
// Return null for 404 errors
|
|
31
|
+
if (error !== null &&
|
|
32
|
+
typeof error === 'object' &&
|
|
33
|
+
'httpStatus' in error &&
|
|
34
|
+
error.httpStatus === 404) {
|
|
35
|
+
return null;
|
|
36
|
+
}
|
|
37
|
+
throw error;
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
/**
|
|
41
|
+
* Delete a single cache entry
|
|
42
|
+
*
|
|
43
|
+
* @param key - The cache key to delete
|
|
44
|
+
* @returns true if deleted, false if not found
|
|
45
|
+
*
|
|
46
|
+
* @example
|
|
47
|
+
* ```typescript
|
|
48
|
+
* const deleted = await client.cache.delete('cache_xyz789');
|
|
49
|
+
* ```
|
|
50
|
+
*/
|
|
51
|
+
async delete(key) {
|
|
52
|
+
const response = await this.client.request('DELETE', `/cache/${key}`);
|
|
53
|
+
return response.deleted;
|
|
54
|
+
}
|
|
55
|
+
/**
|
|
56
|
+
* Bulk purge cache entries by keys
|
|
57
|
+
*
|
|
58
|
+
* @param keys - Array of cache keys to purge
|
|
59
|
+
* @returns Purge result with count and keys
|
|
60
|
+
*
|
|
61
|
+
* @example
|
|
62
|
+
* ```typescript
|
|
63
|
+
* const result = await client.cache.purge(['cache_abc', 'cache_def']);
|
|
64
|
+
* console.log(`Purged ${result.purged} entries`);
|
|
65
|
+
* ```
|
|
66
|
+
*/
|
|
67
|
+
async purge(keys) {
|
|
68
|
+
return this.client.request('POST', '/cache/purge', {
|
|
69
|
+
body: { keys },
|
|
70
|
+
});
|
|
71
|
+
}
|
|
72
|
+
/**
|
|
73
|
+
* Purge cache entries matching a URL pattern
|
|
74
|
+
*
|
|
75
|
+
* @param pattern - Glob pattern to match source URLs (e.g., "https://mysite.com/*")
|
|
76
|
+
* @returns Purge result with count
|
|
77
|
+
*
|
|
78
|
+
* @example
|
|
79
|
+
* ```typescript
|
|
80
|
+
* const result = await client.cache.purgeUrl('https://mysite.com/blog/*');
|
|
81
|
+
* ```
|
|
82
|
+
*/
|
|
83
|
+
async purgeUrl(pattern) {
|
|
84
|
+
return this.client.request('POST', '/cache/purge', {
|
|
85
|
+
body: { url: pattern },
|
|
86
|
+
});
|
|
87
|
+
}
|
|
88
|
+
/**
|
|
89
|
+
* Purge cache entries created before a specific date
|
|
90
|
+
*
|
|
91
|
+
* @param date - Purge entries created before this date
|
|
92
|
+
* @returns Purge result with count
|
|
93
|
+
*
|
|
94
|
+
* @example
|
|
95
|
+
* ```typescript
|
|
96
|
+
* const result = await client.cache.purgeBefore(new Date('2024-01-01'));
|
|
97
|
+
* ```
|
|
98
|
+
*/
|
|
99
|
+
async purgeBefore(date) {
|
|
100
|
+
return this.client.request('POST', '/cache/purge', {
|
|
101
|
+
body: { before: date.toISOString() },
|
|
102
|
+
});
|
|
103
|
+
}
|
|
104
|
+
/**
|
|
105
|
+
* Purge cache entries matching a storage path pattern
|
|
106
|
+
*
|
|
107
|
+
* @param pattern - Glob pattern for storage paths (e.g., "screenshots/2024/01/*")
|
|
108
|
+
* @returns Purge result with count
|
|
109
|
+
*
|
|
110
|
+
* @example
|
|
111
|
+
* ```typescript
|
|
112
|
+
* const result = await client.cache.purgePattern('screenshots/2024/*');
|
|
113
|
+
* ```
|
|
114
|
+
*/
|
|
115
|
+
async purgePattern(pattern) {
|
|
116
|
+
return this.client.request('POST', '/cache/purge', {
|
|
117
|
+
body: { pattern },
|
|
118
|
+
});
|
|
119
|
+
}
|
|
120
|
+
}
|
|
121
|
+
//# sourceMappingURL=cache.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cache.js","sourceRoot":"","sources":["../../src/cache.ts"],"names":[],"mappings":"AAiBA;;GAEG;AACH,MAAM,OAAO,YAAY;IACN,MAAM,CAAkB;IAEzC,YAAY,MAAuB;QACjC,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;IACvB,CAAC;IAED;;;;;;;;;;;;;OAaG;IACH,KAAK,CAAC,GAAG,CAAC,GAAW;QACnB,IAAI,CAAC;YACH,OAAO,MAAM,IAAI,CAAC,MAAM,CAAC,OAAO,CAAS,KAAK,EAAE,UAAU,GAAG,EAAE,EAAE;gBAC/D,YAAY,EAAE,QAAQ;aACvB,CAAC,CAAC;QACL,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,6BAA6B;YAC7B,IACE,KAAK,KAAK,IAAI;gBACd,OAAO,KAAK,KAAK,QAAQ;gBACzB,YAAY,IAAI,KAAK;gBACrB,KAAK,CAAC,UAAU,KAAK,GAAG,EACxB,CAAC;gBACD,OAAO,IAAI,CAAC;YACd,CAAC;YACD,MAAM,KAAK,CAAC;QACd,CAAC;IACH,CAAC;IAED;;;;;;;;;;OAUG;IACH,KAAK,CAAC,MAAM,CAAC,GAAW;QAItB,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,OAAO,CAAiB,QAAQ,EAAE,UAAU,GAAG,EAAE,CAAC,CAAC;QACtF,OAAO,QAAQ,CAAC,OAAO,CAAC;IAC1B,CAAC;IAED;;;;;;;;;;;OAWG;IACH,KAAK,CAAC,KAAK,CAAC,IAAc;QACxB,OAAO,IAAI,CAAC,MAAM,CAAC,OAAO,CAAc,MAAM,EAAE,cAAc,EAAE;YAC9D,IAAI,EAAE,EAAE,IAAI,EAAE;SACf,CAAC,CAAC;IACL,CAAC;IAED;;;;;;;;;;OAUG;IACH,KAAK,CAAC,QAAQ,CAAC,OAAe;QAC5B,OAAO,IAAI,CAAC,MAAM,CAAC,OAAO,CAAc,MAAM,EAAE,cAAc,EAAE;YAC9D,IAAI,EAAE,EAAE,GAAG,EAAE,OAAO,EAAE;SACvB,CAAC,CAAC;IACL,CAAC;IAED;;;;;;;;;;OAUG;IACH,KAAK,CAAC,WAAW,CAAC,IAAU;QAC1B,OAAO,IAAI,CAAC,MAAM,CAAC,OAAO,CAAc,MAAM,EAAE,cAAc,EAAE;YAC9D,IAAI,EAAE,EAAE,MAAM,EAAE,IAAI,CAAC,WAAW,EAAE,EAAE;SACrC,CAAC,CAAC;IACL,CAAC;IAED;;;;;;;;;;OAUG;IACH,KAAK,CAAC,YAAY,CAAC,OAAe;QAChC,OAAO,IAAI,CAAC,MAAM,CAAC,OAAO,CAAc,MAAM,EAAE,cAAc,EAAE;YAC9D,IAAI,EAAE,EAAE,OAAO,EAAE;SAClB,CAAC,CAAC;IACL,CAAC;CACF"}
|
|
@@ -0,0 +1,300 @@
|
|
|
1
|
+
import { createHmac } from 'node:crypto';
|
|
2
|
+
import { RenderScreenshotError } from './errors.js';
|
|
3
|
+
import { TakeOptions } from './options.js';
|
|
4
|
+
import { CacheManager } from './cache.js';
|
|
5
|
+
const DEFAULT_BASE_URL = 'https://api.renderscreenshot.com';
|
|
6
|
+
const DEFAULT_TIMEOUT = 30000;
|
|
7
|
+
const API_VERSION = 'v1';
|
|
8
|
+
/**
|
|
9
|
+
* Parse a response body from the API
|
|
10
|
+
*/
|
|
11
|
+
async function parseResponseBody(response) {
|
|
12
|
+
const contentType = response.headers.get('content-type') ?? '';
|
|
13
|
+
if (contentType.includes('application/json')) {
|
|
14
|
+
return response.json();
|
|
15
|
+
}
|
|
16
|
+
return response.text();
|
|
17
|
+
}
|
|
18
|
+
/**
|
|
19
|
+
* Handle API errors and convert to RenderScreenshotError
|
|
20
|
+
*/
|
|
21
|
+
async function handleApiError(response) {
|
|
22
|
+
const retryAfterHeader = response.headers.get('retry-after');
|
|
23
|
+
const retryAfter = retryAfterHeader !== null ? parseInt(retryAfterHeader, 10) : undefined;
|
|
24
|
+
const body = await parseResponseBody(response);
|
|
25
|
+
const errorBody = typeof body === 'object' && body !== null ? body : {};
|
|
26
|
+
const errorParams = {};
|
|
27
|
+
if (typeof errorBody['code'] === 'string')
|
|
28
|
+
errorParams.code = errorBody['code'];
|
|
29
|
+
if (typeof errorBody['message'] === 'string')
|
|
30
|
+
errorParams.message = errorBody['message'];
|
|
31
|
+
if (typeof errorBody['error'] === 'string')
|
|
32
|
+
errorParams.error = errorBody['error'];
|
|
33
|
+
throw RenderScreenshotError.fromResponse(response.status, errorParams, retryAfter);
|
|
34
|
+
}
|
|
35
|
+
/**
|
|
36
|
+
* RenderScreenshot API client
|
|
37
|
+
*/
|
|
38
|
+
export class Client {
|
|
39
|
+
apiKey;
|
|
40
|
+
baseUrl;
|
|
41
|
+
timeout;
|
|
42
|
+
/** Cache management methods */
|
|
43
|
+
cache;
|
|
44
|
+
/**
|
|
45
|
+
* Create a new RenderScreenshot client
|
|
46
|
+
* @param apiKey - Your API key (rs_live_* or rs_test_*)
|
|
47
|
+
* @param options - Optional client configuration
|
|
48
|
+
*/
|
|
49
|
+
constructor(apiKey, options = {}) {
|
|
50
|
+
if (apiKey === '' || apiKey === undefined) {
|
|
51
|
+
throw new Error('API key is required');
|
|
52
|
+
}
|
|
53
|
+
this.apiKey = apiKey;
|
|
54
|
+
this.baseUrl = options.baseUrl ?? DEFAULT_BASE_URL;
|
|
55
|
+
this.timeout = options.timeout ?? DEFAULT_TIMEOUT;
|
|
56
|
+
this.cache = new CacheManager(this);
|
|
57
|
+
}
|
|
58
|
+
/**
|
|
59
|
+
* Get the API key for internal use
|
|
60
|
+
* @internal
|
|
61
|
+
*/
|
|
62
|
+
getApiKey() {
|
|
63
|
+
return this.apiKey;
|
|
64
|
+
}
|
|
65
|
+
/**
|
|
66
|
+
* Get the base URL for internal use
|
|
67
|
+
* @internal
|
|
68
|
+
*/
|
|
69
|
+
getBaseUrl() {
|
|
70
|
+
return this.baseUrl;
|
|
71
|
+
}
|
|
72
|
+
/**
|
|
73
|
+
* Get the timeout for internal use
|
|
74
|
+
* @internal
|
|
75
|
+
*/
|
|
76
|
+
getTimeout() {
|
|
77
|
+
return this.timeout;
|
|
78
|
+
}
|
|
79
|
+
/**
|
|
80
|
+
* Make an authenticated request to the API
|
|
81
|
+
* @internal
|
|
82
|
+
*/
|
|
83
|
+
async request(method, path, options = {}) {
|
|
84
|
+
const url = `${this.baseUrl}/${API_VERSION}${path}`;
|
|
85
|
+
const controller = new AbortController();
|
|
86
|
+
const timeoutId = setTimeout(() => {
|
|
87
|
+
controller.abort();
|
|
88
|
+
}, this.timeout);
|
|
89
|
+
try {
|
|
90
|
+
const headers = {
|
|
91
|
+
Authorization: `Bearer ${this.apiKey}`,
|
|
92
|
+
'User-Agent': 'renderscreenshot-node/1.0.0',
|
|
93
|
+
...options.headers,
|
|
94
|
+
};
|
|
95
|
+
if (options.body !== undefined) {
|
|
96
|
+
headers['Content-Type'] = 'application/json';
|
|
97
|
+
}
|
|
98
|
+
const fetchOptions = {
|
|
99
|
+
method,
|
|
100
|
+
headers,
|
|
101
|
+
signal: controller.signal,
|
|
102
|
+
};
|
|
103
|
+
if (options.body !== undefined) {
|
|
104
|
+
fetchOptions.body = JSON.stringify(options.body);
|
|
105
|
+
}
|
|
106
|
+
const response = await fetch(url, fetchOptions);
|
|
107
|
+
if (!response.ok) {
|
|
108
|
+
await handleApiError(response);
|
|
109
|
+
}
|
|
110
|
+
if (options.responseType === 'buffer') {
|
|
111
|
+
const arrayBuffer = await response.arrayBuffer();
|
|
112
|
+
return Buffer.from(arrayBuffer);
|
|
113
|
+
}
|
|
114
|
+
return (await response.json());
|
|
115
|
+
}
|
|
116
|
+
catch (error) {
|
|
117
|
+
if (error instanceof RenderScreenshotError) {
|
|
118
|
+
throw error;
|
|
119
|
+
}
|
|
120
|
+
if (error instanceof Error && error.name === 'AbortError') {
|
|
121
|
+
throw RenderScreenshotError.timeout();
|
|
122
|
+
}
|
|
123
|
+
throw RenderScreenshotError.internal(error instanceof Error ? error.message : 'Unknown error');
|
|
124
|
+
}
|
|
125
|
+
finally {
|
|
126
|
+
clearTimeout(timeoutId);
|
|
127
|
+
}
|
|
128
|
+
}
|
|
129
|
+
/**
|
|
130
|
+
* Generate a signed URL for embedding screenshots
|
|
131
|
+
*
|
|
132
|
+
* @param options - Screenshot options (TakeOptions instance or config object)
|
|
133
|
+
* @param expiresAt - Expiration time for the signed URL
|
|
134
|
+
* @returns Signed URL string
|
|
135
|
+
*
|
|
136
|
+
* @example
|
|
137
|
+
* ```typescript
|
|
138
|
+
* const url = client.generateUrl(
|
|
139
|
+
* TakeOptions.url('https://example.com').preset('og_card'),
|
|
140
|
+
* new Date(Date.now() + 24 * 60 * 60 * 1000) // 24 hours
|
|
141
|
+
* );
|
|
142
|
+
* ```
|
|
143
|
+
*/
|
|
144
|
+
generateUrl(options, expiresAt) {
|
|
145
|
+
const config = options instanceof TakeOptions ? options.toConfig() : options;
|
|
146
|
+
// Extract the public key from api key (rs_pub_xxx or use the full key for signing)
|
|
147
|
+
// For signed URLs, we need a secret key (rs_secret_xxx) and a public key (rs_pub_xxx)
|
|
148
|
+
// If user provides rs_live_xxx, we'll use it directly
|
|
149
|
+
// Build query params from config
|
|
150
|
+
const params = {};
|
|
151
|
+
if (config.url !== undefined)
|
|
152
|
+
params['url'] = config.url;
|
|
153
|
+
if (config.width !== undefined)
|
|
154
|
+
params['width'] = String(config.width);
|
|
155
|
+
if (config.height !== undefined)
|
|
156
|
+
params['height'] = String(config.height);
|
|
157
|
+
if (config.scale !== undefined)
|
|
158
|
+
params['scale'] = String(config.scale);
|
|
159
|
+
if (config.mobile !== undefined)
|
|
160
|
+
params['mobile'] = String(config.mobile);
|
|
161
|
+
if (config.fullPage !== undefined)
|
|
162
|
+
params['full_page'] = String(config.fullPage);
|
|
163
|
+
if (config.element !== undefined)
|
|
164
|
+
params['element'] = config.element;
|
|
165
|
+
if (config.format !== undefined)
|
|
166
|
+
params['format'] = config.format;
|
|
167
|
+
if (config.quality !== undefined)
|
|
168
|
+
params['quality'] = String(config.quality);
|
|
169
|
+
if (config.preset !== undefined)
|
|
170
|
+
params['preset'] = config.preset;
|
|
171
|
+
if (config.device !== undefined)
|
|
172
|
+
params['device'] = config.device;
|
|
173
|
+
if (config.waitFor !== undefined)
|
|
174
|
+
params['wait_for'] = config.waitFor;
|
|
175
|
+
if (config.delay !== undefined)
|
|
176
|
+
params['delay'] = String(config.delay);
|
|
177
|
+
if (config.blockAds !== undefined)
|
|
178
|
+
params['block_ads'] = String(config.blockAds);
|
|
179
|
+
if (config.blockTrackers !== undefined)
|
|
180
|
+
params['block_trackers'] = String(config.blockTrackers);
|
|
181
|
+
if (config.blockCookieBanners !== undefined)
|
|
182
|
+
params['block_cookie_banners'] = String(config.blockCookieBanners);
|
|
183
|
+
if (config.blockChatWidgets !== undefined)
|
|
184
|
+
params['block_chat_widgets'] = String(config.blockChatWidgets);
|
|
185
|
+
if (config.darkMode !== undefined)
|
|
186
|
+
params['dark_mode'] = String(config.darkMode);
|
|
187
|
+
if (config.cacheTtl !== undefined)
|
|
188
|
+
params['cache_ttl'] = String(config.cacheTtl);
|
|
189
|
+
// Sort params alphabetically and create canonical string
|
|
190
|
+
const sortedKeys = Object.keys(params).sort();
|
|
191
|
+
const canonical = sortedKeys.map((k) => `${k}=${params[k]}`).join('&');
|
|
192
|
+
// Add expiration
|
|
193
|
+
const expires = Math.floor(expiresAt.getTime() / 1000);
|
|
194
|
+
const message = `${canonical}&expires=${expires}`;
|
|
195
|
+
// Generate signature
|
|
196
|
+
const signature = createHmac('sha256', this.apiKey).update(message).digest('hex');
|
|
197
|
+
return `${this.baseUrl}/${API_VERSION}/screenshot?${message}&signature=${signature}`;
|
|
198
|
+
}
|
|
199
|
+
/**
|
|
200
|
+
* Take a screenshot and return the binary data
|
|
201
|
+
*
|
|
202
|
+
* @param options - Screenshot options (TakeOptions instance or config object)
|
|
203
|
+
* @returns Buffer containing the screenshot binary data
|
|
204
|
+
*
|
|
205
|
+
* @example
|
|
206
|
+
* ```typescript
|
|
207
|
+
* const image = await client.take(
|
|
208
|
+
* TakeOptions.url('https://example.com').preset('og_card')
|
|
209
|
+
* );
|
|
210
|
+
* await fs.writeFile('screenshot.png', image);
|
|
211
|
+
* ```
|
|
212
|
+
*/
|
|
213
|
+
async take(options) {
|
|
214
|
+
const params = options instanceof TakeOptions ? options.toParams() : TakeOptions.from(options).toParams();
|
|
215
|
+
return this.request('POST', '/screenshot', {
|
|
216
|
+
body: params,
|
|
217
|
+
responseType: 'buffer',
|
|
218
|
+
});
|
|
219
|
+
}
|
|
220
|
+
/**
|
|
221
|
+
* Take a screenshot and return JSON metadata with URLs
|
|
222
|
+
*
|
|
223
|
+
* @param options - Screenshot options (TakeOptions instance or config object)
|
|
224
|
+
* @returns Screenshot response with metadata and URLs
|
|
225
|
+
*
|
|
226
|
+
* @example
|
|
227
|
+
* ```typescript
|
|
228
|
+
* const response = await client.takeJson(
|
|
229
|
+
* TakeOptions.url('https://example.com').preset('og_card')
|
|
230
|
+
* );
|
|
231
|
+
* console.log(response.url); // CDN URL to the screenshot
|
|
232
|
+
* ```
|
|
233
|
+
*/
|
|
234
|
+
async takeJson(options) {
|
|
235
|
+
const params = options instanceof TakeOptions ? options.toParams() : TakeOptions.from(options).toParams();
|
|
236
|
+
return this.request('POST', '/screenshot', {
|
|
237
|
+
body: { ...params, response_type: 'json' },
|
|
238
|
+
});
|
|
239
|
+
}
|
|
240
|
+
async batch(urlsOrRequests, options) {
|
|
241
|
+
// Type guard to check if it's an array of strings (URLs)
|
|
242
|
+
const isUrlArray = (arr) => arr.every((item) => typeof item === 'string');
|
|
243
|
+
let body;
|
|
244
|
+
if (isUrlArray(urlsOrRequests)) {
|
|
245
|
+
const opts = options instanceof TakeOptions
|
|
246
|
+
? options.toParams()
|
|
247
|
+
: options !== undefined
|
|
248
|
+
? TakeOptions.from(options).toParams()
|
|
249
|
+
: {};
|
|
250
|
+
body = {
|
|
251
|
+
urls: urlsOrRequests,
|
|
252
|
+
options: opts,
|
|
253
|
+
};
|
|
254
|
+
}
|
|
255
|
+
else {
|
|
256
|
+
body = {
|
|
257
|
+
requests: urlsOrRequests.map((req) => ({
|
|
258
|
+
url: req.url,
|
|
259
|
+
...TakeOptions.from(req.options ?? {}).toParams(),
|
|
260
|
+
})),
|
|
261
|
+
};
|
|
262
|
+
}
|
|
263
|
+
return this.request('POST', '/batch', { body });
|
|
264
|
+
}
|
|
265
|
+
/**
|
|
266
|
+
* Get the status of a batch job
|
|
267
|
+
*
|
|
268
|
+
* @param batchId - The batch job ID
|
|
269
|
+
* @returns Batch status and results
|
|
270
|
+
*/
|
|
271
|
+
async getBatch(batchId) {
|
|
272
|
+
return this.request('GET', `/batch/${batchId}`);
|
|
273
|
+
}
|
|
274
|
+
/**
|
|
275
|
+
* List all available presets
|
|
276
|
+
*
|
|
277
|
+
* @returns Array of preset configurations
|
|
278
|
+
*/
|
|
279
|
+
async presets() {
|
|
280
|
+
return this.request('GET', '/presets');
|
|
281
|
+
}
|
|
282
|
+
/**
|
|
283
|
+
* Get a single preset by ID
|
|
284
|
+
*
|
|
285
|
+
* @param id - Preset identifier
|
|
286
|
+
* @returns Preset configuration
|
|
287
|
+
*/
|
|
288
|
+
async preset(id) {
|
|
289
|
+
return this.request('GET', `/presets/${id}`);
|
|
290
|
+
}
|
|
291
|
+
/**
|
|
292
|
+
* List all available device presets
|
|
293
|
+
*
|
|
294
|
+
* @returns Array of device configurations
|
|
295
|
+
*/
|
|
296
|
+
async devices() {
|
|
297
|
+
return this.request('GET', '/devices');
|
|
298
|
+
}
|
|
299
|
+
}
|
|
300
|
+
//# sourceMappingURL=client.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"client.js","sourceRoot":"","sources":["../../src/client.ts"],"names":[],"mappings":"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"}
|