@copperline/rendex 1.4.0 → 1.5.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/README.md +61 -0
- package/dist/client.d.ts +83 -1
- package/dist/client.d.ts.map +1 -1
- package/dist/client.js +168 -0
- package/dist/client.js.map +1 -1
- package/dist/index.d.ts +3 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -0
- package/dist/index.js.map +1 -1
- package/dist/types.d.ts +207 -1
- package/dist/types.d.ts.map +1 -1
- package/dist/webhook.d.ts +82 -0
- package/dist/webhook.d.ts.map +1 -0
- package/dist/webhook.js +67 -0
- package/dist/webhook.js.map +1 -0
- package/package.json +2 -7
package/README.md
CHANGED
|
@@ -232,6 +232,67 @@ All options except `url` are optional:
|
|
|
232
232
|
| `bestAttempt` | `boolean` | `true` | Return best-effort screenshot on timeout |
|
|
233
233
|
| `selector` | `string` | — | Capture a specific element by CSS selector |
|
|
234
234
|
|
|
235
|
+
## Rendex Watch
|
|
236
|
+
|
|
237
|
+
Monitor a URL on a schedule and get alerted when it changes — real-Chrome visual diff (with a highlighted overlay), an extracted-text diff, or both. One `rdx_` key, your shared credit pool.
|
|
238
|
+
|
|
239
|
+
```typescript
|
|
240
|
+
// Create a watch (an active watch captures its baseline immediately — 1 credit)
|
|
241
|
+
const watch = await rendex.createWatch({
|
|
242
|
+
url: "https://example.com/pricing",
|
|
243
|
+
diffMode: "visual", // "visual" | "text" | "both"
|
|
244
|
+
intervalMinutes: 1440, // your plan's floor is the minimum (Free 1440 / Starter 180 / Pro 30 / Ent 5)
|
|
245
|
+
webhookUrl: "https://hooks.example.com/rendex", // Starter+; HMAC-signed
|
|
246
|
+
notifyEmail: "you@example.com", // any plan; must be your account email
|
|
247
|
+
});
|
|
248
|
+
|
|
249
|
+
// Dry-run a config BEFORE saving — what we'd capture + is the page reachable
|
|
250
|
+
const test = await rendex.testWatch({ url: "https://example.com", selector: "#price" });
|
|
251
|
+
if (test.reachable) console.log(test.screenshotUrl);
|
|
252
|
+
|
|
253
|
+
await rendex.listWatches({ status: "active" }); // { items, nextCursor }
|
|
254
|
+
await rendex.getWatch(watch.id);
|
|
255
|
+
await rendex.runWatch(watch.id); // run a check now → { runId }
|
|
256
|
+
const { items } = await rendex.listWatchRuns(watch.id, { limit: 10 });
|
|
257
|
+
await rendex.updateWatch(watch.id, { paused: true }); // pause; { paused: false } resumes
|
|
258
|
+
await rendex.deleteWatch(watch.id);
|
|
259
|
+
```
|
|
260
|
+
|
|
261
|
+
| Method | Endpoint | Returns |
|
|
262
|
+
|--------|----------|---------|
|
|
263
|
+
| `createWatch(options)` | `POST /v1/watches` | `Watch` |
|
|
264
|
+
| `listWatches(query?)` | `GET /v1/watches` | `{ items: Watch[]; nextCursor }` |
|
|
265
|
+
| `getWatch(id)` | `GET /v1/watches/:id` | `Watch` |
|
|
266
|
+
| `updateWatch(id, patch)` | `PATCH /v1/watches/:id` | `Watch` |
|
|
267
|
+
| `deleteWatch(id)` | `DELETE /v1/watches/:id` | `void` |
|
|
268
|
+
| `runWatch(id)` | `POST /v1/watches/:id/run` | `{ runId, watchId, status }` |
|
|
269
|
+
| `listWatchRuns(id, query?)` | `GET /v1/watches/:id/runs` | `{ items: WatchRun[]; nextCursor }` |
|
|
270
|
+
| `testWatch(options)` | `POST /v1/watches/test` | `WatchTestResult` |
|
|
271
|
+
|
|
272
|
+
### Verifying Watch webhooks
|
|
273
|
+
|
|
274
|
+
When a watched page changes Rendex POSTs an HMAC-signed `watch.changed` (or `watch.recovered` / `watch.error`) event to your `webhookUrl`. Verify it with the raw request body:
|
|
275
|
+
|
|
276
|
+
```typescript
|
|
277
|
+
import { verifyWebhook, type RendexWebhookPayload } from "@copperline/rendex";
|
|
278
|
+
|
|
279
|
+
// rawBody is the unparsed request body string
|
|
280
|
+
const ok = await verifyWebhook({
|
|
281
|
+
payload: rawBody,
|
|
282
|
+
signature: req.headers["x-rendex-signature"],
|
|
283
|
+
timestamp: req.headers["x-rendex-timestamp"],
|
|
284
|
+
secret: process.env.WEBHOOK_SIGNING_SECRET,
|
|
285
|
+
});
|
|
286
|
+
if (!ok) return res.status(400).end();
|
|
287
|
+
|
|
288
|
+
const event = JSON.parse(rawBody) as RendexWebhookPayload;
|
|
289
|
+
if (event.event === "watch.changed") {
|
|
290
|
+
console.log(event.url, event.diffScore, event.diffOverlayUrl);
|
|
291
|
+
}
|
|
292
|
+
```
|
|
293
|
+
|
|
294
|
+
> A `watch.changed` payload carries the same change fields as a `WatchRun`: `diffScore`, `diffPixels`, `beforeUrl`, `afterUrl`, `diffOverlayUrl`.
|
|
295
|
+
|
|
235
296
|
## Error Handling
|
|
236
297
|
|
|
237
298
|
```typescript
|
package/dist/client.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type { BatchCreateResponse, BatchOptions, BatchStatusResponse, ExtractResult, JobStatusResponse, RenderHtmlOptions, RenderLinkResult, RenderMarkdownOptions, RendexConfig, ScreenshotJsonResponse, ScreenshotOptions, ScreenshotResult } from "./types.js";
|
|
1
|
+
import type { BatchCreateResponse, BatchOptions, BatchStatusResponse, CreateWatchOptions, ExtractResult, JobStatusResponse, ListWatchesQuery, ListWatchRunsQuery, RenderHtmlOptions, RenderLinkResult, RenderMarkdownOptions, RendexConfig, ScreenshotJsonResponse, ScreenshotOptions, ScreenshotResult, UpdateWatchOptions, Watch, WatchList, WatchRunList, WatchRunQueued, WatchTestResult } from "./types.js";
|
|
2
2
|
export declare class Rendex {
|
|
3
3
|
private readonly apiKey;
|
|
4
4
|
private readonly baseUrl;
|
|
@@ -134,8 +134,90 @@ export declare class Rendex {
|
|
|
134
134
|
* ```
|
|
135
135
|
*/
|
|
136
136
|
batchStatus(batchId: string): Promise<BatchStatusResponse>;
|
|
137
|
+
/**
|
|
138
|
+
* Create a watch — monitor a URL on a schedule and diff each capture against
|
|
139
|
+
* a baseline. An active watch captures its baseline immediately (1 credit).
|
|
140
|
+
*
|
|
141
|
+
* ```ts
|
|
142
|
+
* const watch = await rendex.createWatch({
|
|
143
|
+
* url: "https://example.com/pricing",
|
|
144
|
+
* diffMode: "visual",
|
|
145
|
+
* intervalMinutes: 1440,
|
|
146
|
+
* webhookUrl: "https://hooks.example.com/rendex", // Starter+
|
|
147
|
+
* });
|
|
148
|
+
* ```
|
|
149
|
+
*/
|
|
150
|
+
createWatch(options: CreateWatchOptions): Promise<Watch>;
|
|
151
|
+
/**
|
|
152
|
+
* List your watches (newest first), optionally filtered by status and paged.
|
|
153
|
+
*
|
|
154
|
+
* ```ts
|
|
155
|
+
* const { items, nextCursor } = await rendex.listWatches({ status: "active" });
|
|
156
|
+
* ```
|
|
157
|
+
*/
|
|
158
|
+
listWatches(query?: ListWatchesQuery): Promise<WatchList>;
|
|
159
|
+
/**
|
|
160
|
+
* Fetch one watch by ID.
|
|
161
|
+
*
|
|
162
|
+
* ```ts
|
|
163
|
+
* const watch = await rendex.getWatch("uuid-here");
|
|
164
|
+
* ```
|
|
165
|
+
*/
|
|
166
|
+
getWatch(id: string): Promise<Watch>;
|
|
167
|
+
/**
|
|
168
|
+
* Update, pause, resume, or re-point a watch. Pass `{ paused: true }` to pause
|
|
169
|
+
* and `{ paused: false }` to resume; pass `webhookUrl: null` to clear a channel.
|
|
170
|
+
*
|
|
171
|
+
* ```ts
|
|
172
|
+
* await rendex.updateWatch("uuid-here", { paused: true });
|
|
173
|
+
* ```
|
|
174
|
+
*/
|
|
175
|
+
updateWatch(id: string, patch: UpdateWatchOptions): Promise<Watch>;
|
|
176
|
+
/**
|
|
177
|
+
* Delete a watch and its run history (resolves on success; throws on failure).
|
|
178
|
+
*
|
|
179
|
+
* ```ts
|
|
180
|
+
* await rendex.deleteWatch("uuid-here");
|
|
181
|
+
* ```
|
|
182
|
+
*/
|
|
183
|
+
deleteWatch(id: string): Promise<void>;
|
|
184
|
+
/**
|
|
185
|
+
* Run an immediate check now (charges 1 credit; returns the queued run).
|
|
186
|
+
* Poll `listWatchRuns(id)` for the result, or receive a `watch.changed` webhook.
|
|
187
|
+
*
|
|
188
|
+
* ```ts
|
|
189
|
+
* const { runId } = await rendex.runWatch("uuid-here");
|
|
190
|
+
* ```
|
|
191
|
+
*/
|
|
192
|
+
runWatch(id: string): Promise<WatchRunQueued>;
|
|
193
|
+
/**
|
|
194
|
+
* Read a watch's run history (newest first), paged.
|
|
195
|
+
*
|
|
196
|
+
* ```ts
|
|
197
|
+
* const { items } = await rendex.listWatchRuns("uuid-here", { limit: 10 });
|
|
198
|
+
* ```
|
|
199
|
+
*/
|
|
200
|
+
listWatchRuns(id: string, query?: ListWatchRunsQuery): Promise<WatchRunList>;
|
|
201
|
+
/**
|
|
202
|
+
* Dry-run a watch config BEFORE creating it — renders the proposed config once
|
|
203
|
+
* and reports what was captured + whether the page is reachable. Creates no
|
|
204
|
+
* watch, no baseline, no diff. Charges 1 credit (refunded if the page can't be
|
|
205
|
+
* read — a "couldn't reach" is a `{ ok: false }` RESULT, not an error).
|
|
206
|
+
*
|
|
207
|
+
* ```ts
|
|
208
|
+
* const result = await rendex.testWatch({ url: "https://example.com", diffMode: "visual" });
|
|
209
|
+
* if (result.reachable) console.log(result.screenshotUrl);
|
|
210
|
+
* ```
|
|
211
|
+
*/
|
|
212
|
+
testWatch(options: CreateWatchOptions): Promise<WatchTestResult>;
|
|
137
213
|
private _post;
|
|
138
214
|
private _get;
|
|
215
|
+
private _patch;
|
|
216
|
+
private _delete;
|
|
217
|
+
/** Parse a `{ success, data, meta }` envelope, throwing RendexApiError on `success: false`. */
|
|
218
|
+
private _readData;
|
|
219
|
+
/** Build a query string (leading "?") from defined scalar params, or "" when empty. */
|
|
220
|
+
private _qs;
|
|
139
221
|
private _handleErrorResponse;
|
|
140
222
|
private _parseMetadataHeaders;
|
|
141
223
|
}
|
package/dist/client.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EACV,mBAAmB,EACnB,YAAY,EACZ,mBAAmB,EACnB,aAAa,EACb,iBAAiB,EACjB,iBAAiB,EACjB,gBAAgB,EAChB,qBAAqB,EACrB,YAAY,EACZ,sBAAsB,EAEtB,iBAAiB,EACjB,gBAAgB,
|
|
1
|
+
{"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"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"}
|
package/dist/client.js
CHANGED
|
@@ -1,6 +1,12 @@
|
|
|
1
1
|
// ─── Rendex SDK Client ───────────────────────────────────────────────
|
|
2
2
|
import { RendexApiError, RendexError, RendexNetworkError } from "./errors.js";
|
|
3
3
|
const DEFAULT_BASE_URL = "https://api.rendex.dev";
|
|
4
|
+
// Sent on every request so first-party SDK traffic is attributable in API
|
|
5
|
+
// analytics (and distinguishable from raw fetch/axios). Kept in sync by
|
|
6
|
+
// scripts/bump-version.sh. In a browser, fetch silently drops User-Agent
|
|
7
|
+
// (forbidden header) — harmless; only Node/Bun/Workers callers are tagged.
|
|
8
|
+
const SDK_VERSION = "1.5.0";
|
|
9
|
+
const USER_AGENT = `rendex-js/${SDK_VERSION}`;
|
|
4
10
|
export class Rendex {
|
|
5
11
|
apiKey;
|
|
6
12
|
baseUrl;
|
|
@@ -213,6 +219,106 @@ export class Rendex {
|
|
|
213
219
|
}
|
|
214
220
|
return body;
|
|
215
221
|
}
|
|
222
|
+
// ─── Rendex Watch (website-change monitoring) ─────────────────────
|
|
223
|
+
/**
|
|
224
|
+
* Create a watch — monitor a URL on a schedule and diff each capture against
|
|
225
|
+
* a baseline. An active watch captures its baseline immediately (1 credit).
|
|
226
|
+
*
|
|
227
|
+
* ```ts
|
|
228
|
+
* const watch = await rendex.createWatch({
|
|
229
|
+
* url: "https://example.com/pricing",
|
|
230
|
+
* diffMode: "visual",
|
|
231
|
+
* intervalMinutes: 1440,
|
|
232
|
+
* webhookUrl: "https://hooks.example.com/rendex", // Starter+
|
|
233
|
+
* });
|
|
234
|
+
* ```
|
|
235
|
+
*/
|
|
236
|
+
async createWatch(options) {
|
|
237
|
+
const response = await this._post("/v1/watches", options);
|
|
238
|
+
return this._readData(response);
|
|
239
|
+
}
|
|
240
|
+
/**
|
|
241
|
+
* List your watches (newest first), optionally filtered by status and paged.
|
|
242
|
+
*
|
|
243
|
+
* ```ts
|
|
244
|
+
* const { items, nextCursor } = await rendex.listWatches({ status: "active" });
|
|
245
|
+
* ```
|
|
246
|
+
*/
|
|
247
|
+
async listWatches(query) {
|
|
248
|
+
const response = await this._get(`/v1/watches${this._qs(query)}`);
|
|
249
|
+
return this._readData(response);
|
|
250
|
+
}
|
|
251
|
+
/**
|
|
252
|
+
* Fetch one watch by ID.
|
|
253
|
+
*
|
|
254
|
+
* ```ts
|
|
255
|
+
* const watch = await rendex.getWatch("uuid-here");
|
|
256
|
+
* ```
|
|
257
|
+
*/
|
|
258
|
+
async getWatch(id) {
|
|
259
|
+
const response = await this._get(`/v1/watches/${encodeURIComponent(id)}`);
|
|
260
|
+
return this._readData(response);
|
|
261
|
+
}
|
|
262
|
+
/**
|
|
263
|
+
* Update, pause, resume, or re-point a watch. Pass `{ paused: true }` to pause
|
|
264
|
+
* and `{ paused: false }` to resume; pass `webhookUrl: null` to clear a channel.
|
|
265
|
+
*
|
|
266
|
+
* ```ts
|
|
267
|
+
* await rendex.updateWatch("uuid-here", { paused: true });
|
|
268
|
+
* ```
|
|
269
|
+
*/
|
|
270
|
+
async updateWatch(id, patch) {
|
|
271
|
+
const response = await this._patch(`/v1/watches/${encodeURIComponent(id)}`, patch);
|
|
272
|
+
return this._readData(response);
|
|
273
|
+
}
|
|
274
|
+
/**
|
|
275
|
+
* Delete a watch and its run history (resolves on success; throws on failure).
|
|
276
|
+
*
|
|
277
|
+
* ```ts
|
|
278
|
+
* await rendex.deleteWatch("uuid-here");
|
|
279
|
+
* ```
|
|
280
|
+
*/
|
|
281
|
+
async deleteWatch(id) {
|
|
282
|
+
await this._delete(`/v1/watches/${encodeURIComponent(id)}`);
|
|
283
|
+
}
|
|
284
|
+
/**
|
|
285
|
+
* Run an immediate check now (charges 1 credit; returns the queued run).
|
|
286
|
+
* Poll `listWatchRuns(id)` for the result, or receive a `watch.changed` webhook.
|
|
287
|
+
*
|
|
288
|
+
* ```ts
|
|
289
|
+
* const { runId } = await rendex.runWatch("uuid-here");
|
|
290
|
+
* ```
|
|
291
|
+
*/
|
|
292
|
+
async runWatch(id) {
|
|
293
|
+
const response = await this._post(`/v1/watches/${encodeURIComponent(id)}/run`, {});
|
|
294
|
+
return this._readData(response);
|
|
295
|
+
}
|
|
296
|
+
/**
|
|
297
|
+
* Read a watch's run history (newest first), paged.
|
|
298
|
+
*
|
|
299
|
+
* ```ts
|
|
300
|
+
* const { items } = await rendex.listWatchRuns("uuid-here", { limit: 10 });
|
|
301
|
+
* ```
|
|
302
|
+
*/
|
|
303
|
+
async listWatchRuns(id, query) {
|
|
304
|
+
const response = await this._get(`/v1/watches/${encodeURIComponent(id)}/runs${this._qs(query)}`);
|
|
305
|
+
return this._readData(response);
|
|
306
|
+
}
|
|
307
|
+
/**
|
|
308
|
+
* Dry-run a watch config BEFORE creating it — renders the proposed config once
|
|
309
|
+
* and reports what was captured + whether the page is reachable. Creates no
|
|
310
|
+
* watch, no baseline, no diff. Charges 1 credit (refunded if the page can't be
|
|
311
|
+
* read — a "couldn't reach" is a `{ ok: false }` RESULT, not an error).
|
|
312
|
+
*
|
|
313
|
+
* ```ts
|
|
314
|
+
* const result = await rendex.testWatch({ url: "https://example.com", diffMode: "visual" });
|
|
315
|
+
* if (result.reachable) console.log(result.screenshotUrl);
|
|
316
|
+
* ```
|
|
317
|
+
*/
|
|
318
|
+
async testWatch(options) {
|
|
319
|
+
const response = await this._post("/v1/watches/test", options);
|
|
320
|
+
return this._readData(response);
|
|
321
|
+
}
|
|
216
322
|
// ─── Private ─────────────────────────────────────────────────────
|
|
217
323
|
async _post(path, body) {
|
|
218
324
|
let response;
|
|
@@ -222,6 +328,7 @@ export class Rendex {
|
|
|
222
328
|
headers: {
|
|
223
329
|
"Content-Type": "application/json",
|
|
224
330
|
Authorization: `Bearer ${this.apiKey}`,
|
|
331
|
+
"User-Agent": USER_AGENT,
|
|
225
332
|
},
|
|
226
333
|
body: JSON.stringify(body),
|
|
227
334
|
});
|
|
@@ -241,6 +348,47 @@ export class Rendex {
|
|
|
241
348
|
method: "GET",
|
|
242
349
|
headers: {
|
|
243
350
|
Authorization: `Bearer ${this.apiKey}`,
|
|
351
|
+
"User-Agent": USER_AGENT,
|
|
352
|
+
},
|
|
353
|
+
});
|
|
354
|
+
}
|
|
355
|
+
catch (err) {
|
|
356
|
+
throw new RendexNetworkError(`Network request to ${this.baseUrl}${path} failed: ${err instanceof Error ? err.message : String(err)}`, err);
|
|
357
|
+
}
|
|
358
|
+
if (!response.ok) {
|
|
359
|
+
await this._handleErrorResponse(response);
|
|
360
|
+
}
|
|
361
|
+
return response;
|
|
362
|
+
}
|
|
363
|
+
async _patch(path, body) {
|
|
364
|
+
let response;
|
|
365
|
+
try {
|
|
366
|
+
response = await this._fetch(`${this.baseUrl}${path}`, {
|
|
367
|
+
method: "PATCH",
|
|
368
|
+
headers: {
|
|
369
|
+
"Content-Type": "application/json",
|
|
370
|
+
Authorization: `Bearer ${this.apiKey}`,
|
|
371
|
+
"User-Agent": USER_AGENT,
|
|
372
|
+
},
|
|
373
|
+
body: JSON.stringify(body),
|
|
374
|
+
});
|
|
375
|
+
}
|
|
376
|
+
catch (err) {
|
|
377
|
+
throw new RendexNetworkError(`Network request to ${this.baseUrl}${path} failed: ${err instanceof Error ? err.message : String(err)}`, err);
|
|
378
|
+
}
|
|
379
|
+
if (!response.ok) {
|
|
380
|
+
await this._handleErrorResponse(response);
|
|
381
|
+
}
|
|
382
|
+
return response;
|
|
383
|
+
}
|
|
384
|
+
async _delete(path) {
|
|
385
|
+
let response;
|
|
386
|
+
try {
|
|
387
|
+
response = await this._fetch(`${this.baseUrl}${path}`, {
|
|
388
|
+
method: "DELETE",
|
|
389
|
+
headers: {
|
|
390
|
+
Authorization: `Bearer ${this.apiKey}`,
|
|
391
|
+
"User-Agent": USER_AGENT,
|
|
244
392
|
},
|
|
245
393
|
});
|
|
246
394
|
}
|
|
@@ -252,6 +400,26 @@ export class Rendex {
|
|
|
252
400
|
}
|
|
253
401
|
return response;
|
|
254
402
|
}
|
|
403
|
+
/** Parse a `{ success, data, meta }` envelope, throwing RendexApiError on `success: false`. */
|
|
404
|
+
async _readData(response) {
|
|
405
|
+
const body = await response.json();
|
|
406
|
+
if (!body.success) {
|
|
407
|
+
throw new RendexApiError(body.error?.message ?? "Unknown error", response.status, body.error?.code ?? "UNKNOWN", body.meta?.requestId, body.error?.details);
|
|
408
|
+
}
|
|
409
|
+
return body.data;
|
|
410
|
+
}
|
|
411
|
+
/** Build a query string (leading "?") from defined scalar params, or "" when empty. */
|
|
412
|
+
_qs(query) {
|
|
413
|
+
if (!query)
|
|
414
|
+
return "";
|
|
415
|
+
const params = new URLSearchParams();
|
|
416
|
+
for (const [key, value] of Object.entries(query)) {
|
|
417
|
+
if (value !== undefined && value !== null)
|
|
418
|
+
params.set(key, String(value));
|
|
419
|
+
}
|
|
420
|
+
const s = params.toString();
|
|
421
|
+
return s ? `?${s}` : "";
|
|
422
|
+
}
|
|
255
423
|
async _handleErrorResponse(response) {
|
|
256
424
|
let body;
|
|
257
425
|
try {
|
package/dist/client.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"client.js","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"client.js","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
CHANGED
|
@@ -1,4 +1,6 @@
|
|
|
1
1
|
export { Rendex } from "./client.js";
|
|
2
2
|
export { RendexError, RendexApiError, RendexNetworkError } from "./errors.js";
|
|
3
|
-
export
|
|
3
|
+
export { verifyWebhook } from "./webhook.js";
|
|
4
|
+
export type { RendexWebhookEvent, RendexWebhookPayload, VerifyWebhookOptions, } from "./webhook.js";
|
|
5
|
+
export type { ScreenshotOptions, RenderHtmlOptions, RenderMarkdownOptions, ScreenshotResult, ScreenshotMetadata, ScreenshotJsonResponse, ScreenshotData, RenderLinkResult, ExtractResult, BatchOptions, BatchCreateResponse, BatchStatusResponse, JobStatusResponse, JobStatus, BatchStatus, CookieParam, PdfMargin, ResponseMeta, UsageInfo, RendexConfig, ApiErrorCode, WatchDiffMode, WatchStatus, WatchRunStatus, WatchUaMode, WatchIgnoreRegion, WatchRenderParams, CreateWatchOptions, UpdateWatchOptions, ListWatchesQuery, ListWatchRunsQuery, Watch, WatchRun, WatchTestResult, WatchRunQueued, WatchList, WatchRunList, } from "./types.js";
|
|
4
6
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AACrC,OAAO,EAAE,WAAW,EAAE,cAAc,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAC;AAC9E,YAAY,EACV,iBAAiB,EACjB,iBAAiB,EACjB,qBAAqB,EACrB,gBAAgB,EAChB,kBAAkB,EAClB,sBAAsB,EACtB,cAAc,EACd,gBAAgB,EAChB,aAAa,EACb,YAAY,EACZ,mBAAmB,EACnB,mBAAmB,EACnB,iBAAiB,EACjB,SAAS,EACT,WAAW,EACX,WAAW,EACX,SAAS,EACT,YAAY,EACZ,SAAS,EACT,YAAY,EACZ,YAAY,GACb,MAAM,YAAY,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AACrC,OAAO,EAAE,WAAW,EAAE,cAAc,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAC;AAC9E,OAAO,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAC7C,YAAY,EACV,kBAAkB,EAClB,oBAAoB,EACpB,oBAAoB,GACrB,MAAM,cAAc,CAAC;AACtB,YAAY,EACV,iBAAiB,EACjB,iBAAiB,EACjB,qBAAqB,EACrB,gBAAgB,EAChB,kBAAkB,EAClB,sBAAsB,EACtB,cAAc,EACd,gBAAgB,EAChB,aAAa,EACb,YAAY,EACZ,mBAAmB,EACnB,mBAAmB,EACnB,iBAAiB,EACjB,SAAS,EACT,WAAW,EACX,WAAW,EACX,SAAS,EACT,YAAY,EACZ,SAAS,EACT,YAAY,EACZ,YAAY,EAEZ,aAAa,EACb,WAAW,EACX,cAAc,EACd,WAAW,EACX,iBAAiB,EACjB,iBAAiB,EACjB,kBAAkB,EAClB,kBAAkB,EAClB,gBAAgB,EAChB,kBAAkB,EAClB,KAAK,EACL,QAAQ,EACR,eAAe,EACf,cAAc,EACd,SAAS,EACT,YAAY,GACb,MAAM,YAAY,CAAC"}
|
package/dist/index.js
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
// ─── @copperline/rendex — Official TypeScript SDK ────────────────────
|
|
2
2
|
export { Rendex } from "./client.js";
|
|
3
3
|
export { RendexError, RendexApiError, RendexNetworkError } from "./errors.js";
|
|
4
|
+
export { verifyWebhook } from "./webhook.js";
|
|
4
5
|
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,wEAAwE;AAExE,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AACrC,OAAO,EAAE,WAAW,EAAE,cAAc,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,wEAAwE;AAExE,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AACrC,OAAO,EAAE,WAAW,EAAE,cAAc,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAC;AAC9E,OAAO,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC"}
|
package/dist/types.d.ts
CHANGED
|
@@ -295,6 +295,212 @@ export interface BatchStatusResponse {
|
|
|
295
295
|
};
|
|
296
296
|
meta: ResponseMeta;
|
|
297
297
|
}
|
|
298
|
+
/** Diff strategy: visual = pixel diff + overlay; text = extracted-text diff; both runs each. */
|
|
299
|
+
export type WatchDiffMode = "visual" | "text" | "both";
|
|
300
|
+
/** Whether a watch is currently checking on its schedule. */
|
|
301
|
+
export type WatchStatus = "active" | "paused";
|
|
302
|
+
/** Lifecycle of a single executed check. */
|
|
303
|
+
export type WatchRunStatus = "queued" | "processing" | "completed" | "failed";
|
|
304
|
+
/** How the monitor presents its User-Agent. See https://rendex.dev/bot */
|
|
305
|
+
export type WatchUaMode = "auto" | "identify" | "stealth";
|
|
306
|
+
/** A pixel rectangle masked in BOTH captures before the visual diff. */
|
|
307
|
+
export interface WatchIgnoreRegion {
|
|
308
|
+
x: number;
|
|
309
|
+
y: number;
|
|
310
|
+
width: number;
|
|
311
|
+
height: number;
|
|
312
|
+
}
|
|
313
|
+
/**
|
|
314
|
+
* Render knobs applied on every check — a subset of the screenshot capture
|
|
315
|
+
* params (inline source params `url`/`html`/`markdown`/`data` and credential
|
|
316
|
+
* knobs `cookies`/`headers`/`css`/`js` are NOT accepted; the target is the
|
|
317
|
+
* watch's top-level `url`).
|
|
318
|
+
*/
|
|
319
|
+
export interface WatchRenderParams {
|
|
320
|
+
/** A pdf cannot be visually diffed — pair it with diffMode "text". @default "png" */
|
|
321
|
+
format?: "png" | "jpeg" | "webp" | "pdf";
|
|
322
|
+
width?: number;
|
|
323
|
+
height?: number;
|
|
324
|
+
/** Whole-page monitoring. Defaults to true for watches (the screenshot default is false). @default true */
|
|
325
|
+
fullPage?: boolean;
|
|
326
|
+
device?: "desktop" | "iphone_15" | "iphone_se" | "pixel_8" | "ipad" | "ipad_pro";
|
|
327
|
+
deviceScaleFactor?: number;
|
|
328
|
+
darkMode?: boolean;
|
|
329
|
+
blockAds?: boolean;
|
|
330
|
+
blockCookieBanners?: boolean;
|
|
331
|
+
hideSelectors?: string[];
|
|
332
|
+
waitUntil?: "load" | "domcontentloaded" | "networkidle0" | "networkidle2";
|
|
333
|
+
delay?: number;
|
|
334
|
+
timeout?: number;
|
|
335
|
+
/** Pro+ — ISO country code to render from. Cannot be combined with a text diffMode. */
|
|
336
|
+
geo?: string;
|
|
337
|
+
geoCity?: string;
|
|
338
|
+
geoState?: string;
|
|
339
|
+
/** Capture and diff ONLY this CSS element — watch one price/banner/section. */
|
|
340
|
+
selector?: string;
|
|
341
|
+
/** Pixel rectangles masked in both captures before the visual diff (max 20). Visual mode only. */
|
|
342
|
+
ignoreRegions?: WatchIgnoreRegion[];
|
|
343
|
+
/** Substrings or `/regex/flags` patterns stripped from both texts before the text diff (max 50). */
|
|
344
|
+
ignoreText?: string[];
|
|
345
|
+
/** Minimum added + removed characters for a text change to count. */
|
|
346
|
+
minTextChars?: number;
|
|
347
|
+
/** While the page text contains any of these markers, the run is treated as unchanged (max 20). */
|
|
348
|
+
suppressWhilePresent?: string[];
|
|
349
|
+
uaMode?: WatchUaMode;
|
|
350
|
+
}
|
|
351
|
+
/** Options for `Rendex.createWatch()` / `testWatch()`. Only `url` is required. */
|
|
352
|
+
export interface CreateWatchOptions {
|
|
353
|
+
/** The page to monitor. */
|
|
354
|
+
url: string;
|
|
355
|
+
/** Optional label. */
|
|
356
|
+
name?: string;
|
|
357
|
+
/**
|
|
358
|
+
* Check frequency in minutes. The accepted minimum is your plan's floor —
|
|
359
|
+
* Free 1440 (daily), Starter 180, Pro 30, Enterprise 5. A faster value returns
|
|
360
|
+
* 403 WATCH_INTERVAL_TOO_FAST. @default 1440
|
|
361
|
+
*/
|
|
362
|
+
intervalMinutes?: number;
|
|
363
|
+
/** @default "visual" */
|
|
364
|
+
diffMode?: WatchDiffMode;
|
|
365
|
+
/** Visual-change noise floor as a 0..1 fraction; the diff must EXCEED it. @default 0.01 */
|
|
366
|
+
threshold?: number;
|
|
367
|
+
renderParams?: WatchRenderParams;
|
|
368
|
+
/** Pro+ — attach an AI "what changed" summary (roadmap). @default false */
|
|
369
|
+
aiSummary?: boolean;
|
|
370
|
+
/** Starter+ — HMAC-signed change-webhook target. */
|
|
371
|
+
webhookUrl?: string;
|
|
372
|
+
/** Any plan — send change alerts here. Must be your OWN account email. Defaults to it if omitted. */
|
|
373
|
+
notifyEmail?: string;
|
|
374
|
+
/** Create the watch paused (no baseline capture or charge until resumed). @default false */
|
|
375
|
+
paused?: boolean;
|
|
376
|
+
}
|
|
377
|
+
/**
|
|
378
|
+
* Options for `Rendex.updateWatch()`. All fields optional. `webhookUrl` and
|
|
379
|
+
* `notifyEmail` additionally accept `null` to clear a channel. Set `paused`
|
|
380
|
+
* true to pause, false to resume.
|
|
381
|
+
*/
|
|
382
|
+
export interface UpdateWatchOptions {
|
|
383
|
+
url?: string;
|
|
384
|
+
name?: string;
|
|
385
|
+
intervalMinutes?: number;
|
|
386
|
+
diffMode?: WatchDiffMode;
|
|
387
|
+
threshold?: number;
|
|
388
|
+
renderParams?: WatchRenderParams;
|
|
389
|
+
aiSummary?: boolean;
|
|
390
|
+
webhookUrl?: string | null;
|
|
391
|
+
notifyEmail?: string | null;
|
|
392
|
+
paused?: boolean;
|
|
393
|
+
}
|
|
394
|
+
/** Query for `Rendex.listWatches()`. */
|
|
395
|
+
export interface ListWatchesQuery {
|
|
396
|
+
/** @default "all" */
|
|
397
|
+
status?: "active" | "paused" | "all";
|
|
398
|
+
/** Opaque pagination cursor from a previous `nextCursor`. */
|
|
399
|
+
cursor?: string;
|
|
400
|
+
/** Page size (1–100). @default 20 */
|
|
401
|
+
limit?: number;
|
|
402
|
+
}
|
|
403
|
+
/** Query for `Rendex.listWatchRuns()`. */
|
|
404
|
+
export interface ListWatchRunsQuery {
|
|
405
|
+
cursor?: string;
|
|
406
|
+
/** Page size (1–100). @default 20 */
|
|
407
|
+
limit?: number;
|
|
408
|
+
}
|
|
409
|
+
/** A monitoring configuration. `webhookUrl` is redacted to its host on read. */
|
|
410
|
+
export interface Watch {
|
|
411
|
+
id: string;
|
|
412
|
+
url: string;
|
|
413
|
+
name: string | null;
|
|
414
|
+
intervalMinutes: number;
|
|
415
|
+
diffMode: WatchDiffMode;
|
|
416
|
+
/** 0..1 fraction. */
|
|
417
|
+
threshold: number;
|
|
418
|
+
renderParams: WatchRenderParams;
|
|
419
|
+
aiSummary: boolean;
|
|
420
|
+
/** Redacted to host; null when no webhook channel. */
|
|
421
|
+
webhookUrl: string | null;
|
|
422
|
+
notifyEmail: string | null;
|
|
423
|
+
status: WatchStatus;
|
|
424
|
+
/** Short-lived signed URL; null until a baseline exists. */
|
|
425
|
+
baselineImageUrl: string | null;
|
|
426
|
+
baselineCapturedAt: string | null;
|
|
427
|
+
lastRunAt: string | null;
|
|
428
|
+
/** Null while paused. */
|
|
429
|
+
nextRunAt: string | null;
|
|
430
|
+
lastChangedAt: string | null;
|
|
431
|
+
lastStatus: string | null;
|
|
432
|
+
consecutiveFailures: number;
|
|
433
|
+
/** When the target last blocked the RendexWatch identity; null if never. */
|
|
434
|
+
uaBlockedAt: string | null;
|
|
435
|
+
createdAt: string;
|
|
436
|
+
updatedAt: string;
|
|
437
|
+
}
|
|
438
|
+
/** One execution of a watch. Image URLs are short-lived signed links. */
|
|
439
|
+
export interface WatchRun {
|
|
440
|
+
id: string;
|
|
441
|
+
watchId: string;
|
|
442
|
+
status: WatchRunStatus;
|
|
443
|
+
/** Null until the run completes. */
|
|
444
|
+
changed: boolean | null;
|
|
445
|
+
/** 0..1 fraction of the page that changed; null for text-only or failed runs. */
|
|
446
|
+
diffScore: number | null;
|
|
447
|
+
diffPixels: number | null;
|
|
448
|
+
/** Signed "before" baseline — the image this run was diffed against. */
|
|
449
|
+
beforeUrl: string | null;
|
|
450
|
+
/** Signed "after" capture — the image taken on this run. */
|
|
451
|
+
afterUrl: string | null;
|
|
452
|
+
/** Signed highlighted overlay. */
|
|
453
|
+
diffOverlayUrl: string | null;
|
|
454
|
+
/** Present for text/both runs; null otherwise. */
|
|
455
|
+
textDiff: {
|
|
456
|
+
added?: string[];
|
|
457
|
+
removed?: string[];
|
|
458
|
+
summary?: string;
|
|
459
|
+
} | null;
|
|
460
|
+
/** Net credits charged for this run (0 after a refund or for the demo account). */
|
|
461
|
+
creditsCharged: number;
|
|
462
|
+
/** Failure reason when status is "failed". */
|
|
463
|
+
error: string | null;
|
|
464
|
+
createdAt: string;
|
|
465
|
+
completedAt: string | null;
|
|
466
|
+
}
|
|
467
|
+
/** Result of `Rendex.testWatch()` — the pre-create dry-run (creates nothing). */
|
|
468
|
+
export interface WatchTestResult {
|
|
469
|
+
/** True when the page was rendered. */
|
|
470
|
+
ok: boolean;
|
|
471
|
+
/** True when the page could be read (not blocked/errored). */
|
|
472
|
+
reachable: boolean;
|
|
473
|
+
/** Capture format (png/jpeg/webp/pdf). */
|
|
474
|
+
format?: string;
|
|
475
|
+
/** Navigated page HTTP status (URL mode; null for geo). */
|
|
476
|
+
httpStatus?: number | null;
|
|
477
|
+
/** Whether the geo (Decodo) render path was used. */
|
|
478
|
+
usedGeo?: boolean;
|
|
479
|
+
/** Signed URL of the captured screenshot (short-lived). */
|
|
480
|
+
screenshotUrl?: string | null;
|
|
481
|
+
/** Text a text-watch would compare (text mode only). */
|
|
482
|
+
extractedText?: string | null;
|
|
483
|
+
capturedAt?: string;
|
|
484
|
+
/** Actionable reason when `reachable` is false (blocked / needs login / HTTP error). */
|
|
485
|
+
reason?: string;
|
|
486
|
+
}
|
|
487
|
+
/** Result of `Rendex.runWatch()` — the run was queued (202). */
|
|
488
|
+
export interface WatchRunQueued {
|
|
489
|
+
runId: string;
|
|
490
|
+
watchId: string;
|
|
491
|
+
status: "queued";
|
|
492
|
+
}
|
|
493
|
+
/** A page of watches from `Rendex.listWatches()`. */
|
|
494
|
+
export interface WatchList {
|
|
495
|
+
items: Watch[];
|
|
496
|
+
/** Pass to the next `listWatches({ cursor })` call; null when no more pages. */
|
|
497
|
+
nextCursor: string | null;
|
|
498
|
+
}
|
|
499
|
+
/** A page of runs from `Rendex.listWatchRuns()`. */
|
|
500
|
+
export interface WatchRunList {
|
|
501
|
+
items: WatchRun[];
|
|
502
|
+
nextCursor: string | null;
|
|
503
|
+
}
|
|
298
504
|
/** Known API error codes returned by the Rendex API. */
|
|
299
|
-
export type ApiErrorCode = "VALIDATION_ERROR" | "INVALID_URL" | "INVALID_JSON" | "TIMEOUT" | "CAPTURE_FAILED" | "MISSING_API_KEY" | "INVALID_API_KEY" | "KEY_DISABLED" | "RATE_LIMITED" | "USAGE_EXCEEDED" | "NOT_FOUND" | "GEO_FEATURE_UNAVAILABLE" | "PLAN_UPGRADE_REQUIRED" | "CONFIGURATION_ERROR" | "UNSAFE_URL" | "INVALID_WEBHOOK_URL" | "QUEUE_LIMIT_REACHED" | "BATCH_LIMIT_EXCEEDED" | "INTERNAL_ERROR" | "FORBIDDEN";
|
|
505
|
+
export type ApiErrorCode = "VALIDATION_ERROR" | "INVALID_URL" | "INVALID_JSON" | "TIMEOUT" | "CAPTURE_FAILED" | "MISSING_API_KEY" | "INVALID_API_KEY" | "KEY_DISABLED" | "RATE_LIMITED" | "USAGE_EXCEEDED" | "NOT_FOUND" | "GEO_FEATURE_UNAVAILABLE" | "PLAN_UPGRADE_REQUIRED" | "CONFIGURATION_ERROR" | "UNSAFE_URL" | "INVALID_WEBHOOK_URL" | "QUEUE_LIMIT_REACHED" | "BATCH_LIMIT_EXCEEDED" | "WATCH_NOT_FOUND" | "WATCH_PAUSED" | "WATCH_LIMIT_REACHED" | "WATCH_HOST_LIMIT_REACHED" | "WATCH_INTERVAL_TOO_FAST" | "INTERNAL_ERROR" | "FORBIDDEN";
|
|
300
506
|
//# sourceMappingURL=types.d.ts.map
|
package/dist/types.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
/** Webhook event names Rendex can deliver. */
|
|
2
|
+
export type RendexWebhookEvent = "job.completed" | "job.failed" | "batch.completed" | "watch.changed" | "watch.recovered" | "watch.error";
|
|
3
|
+
/**
|
|
4
|
+
* Parsed body of a Rendex webhook. Watch-specific fields are populated only on
|
|
5
|
+
* `watch.*` events. A `watch.*` change carries the same change vocabulary as a
|
|
6
|
+
* `WatchRun`: `diffScore`, `diffPixels`, `beforeUrl`, `afterUrl`, `diffOverlayUrl`.
|
|
7
|
+
*/
|
|
8
|
+
export interface RendexWebhookPayload {
|
|
9
|
+
event: RendexWebhookEvent;
|
|
10
|
+
status: string;
|
|
11
|
+
completedAt: string;
|
|
12
|
+
jobId?: string;
|
|
13
|
+
batchId?: string;
|
|
14
|
+
resultUrl?: string;
|
|
15
|
+
error?: string;
|
|
16
|
+
metadata?: Record<string, unknown>;
|
|
17
|
+
totalJobs?: number;
|
|
18
|
+
completedJobs?: number;
|
|
19
|
+
failedJobs?: number;
|
|
20
|
+
jobs?: Array<{
|
|
21
|
+
jobId: string;
|
|
22
|
+
status: string;
|
|
23
|
+
resultUrl?: string;
|
|
24
|
+
error?: string;
|
|
25
|
+
}>;
|
|
26
|
+
watchId?: string;
|
|
27
|
+
runId?: string;
|
|
28
|
+
url?: string;
|
|
29
|
+
changed?: boolean;
|
|
30
|
+
/** 0..1 fraction of the page that changed. */
|
|
31
|
+
diffScore?: number;
|
|
32
|
+
diffPixels?: number;
|
|
33
|
+
beforeUrl?: string;
|
|
34
|
+
afterUrl?: string;
|
|
35
|
+
diffOverlayUrl?: string;
|
|
36
|
+
textDiff?: {
|
|
37
|
+
added?: string[];
|
|
38
|
+
removed?: string[];
|
|
39
|
+
summary?: string;
|
|
40
|
+
};
|
|
41
|
+
summary?: string | null;
|
|
42
|
+
}
|
|
43
|
+
/** Options for {@link verifyWebhook}. */
|
|
44
|
+
export interface VerifyWebhookOptions {
|
|
45
|
+
/**
|
|
46
|
+
* The RAW request body, exactly as received — the bytes the signature was
|
|
47
|
+
* computed over. Do NOT `JSON.parse` and re-stringify first (key order/spacing
|
|
48
|
+
* would change and the HMAC would no longer match).
|
|
49
|
+
*/
|
|
50
|
+
payload: string;
|
|
51
|
+
/** The `x-rendex-signature` header value (hex HMAC-SHA256). */
|
|
52
|
+
signature: string;
|
|
53
|
+
/** The `x-rendex-timestamp` header value (unix seconds). */
|
|
54
|
+
timestamp: string;
|
|
55
|
+
/** Your webhook signing secret (`WEBHOOK_SIGNING_SECRET`). */
|
|
56
|
+
secret: string;
|
|
57
|
+
/**
|
|
58
|
+
* Reject deliveries whose timestamp is older than this many seconds (replay
|
|
59
|
+
* defense). Set to 0 to disable the freshness check. @default 300
|
|
60
|
+
*/
|
|
61
|
+
toleranceSeconds?: number;
|
|
62
|
+
}
|
|
63
|
+
/**
|
|
64
|
+
* Verify a Rendex webhook signature. Returns `true` only when the signature
|
|
65
|
+
* matches AND (unless disabled) the timestamp is within `toleranceSeconds`.
|
|
66
|
+
* Never throws on a bad signature — returns `false` so callers can reply 400.
|
|
67
|
+
*
|
|
68
|
+
* ```ts
|
|
69
|
+
* // In your webhook handler (raw body string + headers):
|
|
70
|
+
* const ok = await verifyWebhook({
|
|
71
|
+
* payload: rawBody,
|
|
72
|
+
* signature: req.headers["x-rendex-signature"],
|
|
73
|
+
* timestamp: req.headers["x-rendex-timestamp"],
|
|
74
|
+
* secret: process.env.WEBHOOK_SIGNING_SECRET,
|
|
75
|
+
* });
|
|
76
|
+
* if (!ok) return res.status(400).end();
|
|
77
|
+
* const payload: RendexWebhookPayload = JSON.parse(rawBody);
|
|
78
|
+
* if (payload.event === "watch.changed") { ... }
|
|
79
|
+
* ```
|
|
80
|
+
*/
|
|
81
|
+
export declare function verifyWebhook(options: VerifyWebhookOptions): Promise<boolean>;
|
|
82
|
+
//# sourceMappingURL=webhook.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"webhook.d.ts","sourceRoot":"","sources":["../src/webhook.ts"],"names":[],"mappings":"AAeA,8CAA8C;AAC9C,MAAM,MAAM,kBAAkB,GAC1B,eAAe,GACf,YAAY,GACZ,iBAAiB,GAKjB,eAAe,GACf,iBAAiB,GACjB,aAAa,CAAC;AAElB;;;;GAIG;AACH,MAAM,WAAW,oBAAoB;IACnC,KAAK,EAAE,kBAAkB,CAAC;IAC1B,MAAM,EAAE,MAAM,CAAC;IACf,WAAW,EAAE,MAAM,CAAC;IAEpB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACnC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,IAAI,CAAC,EAAE,KAAK,CAAC;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAC;QAAC,SAAS,CAAC,EAAE,MAAM,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAEpF,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,8CAA8C;IAC9C,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,EAAE;QAAE,KAAK,CAAC,EAAE,MAAM,EAAE,CAAC;QAAC,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;QAAC,OAAO,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;IACtE,OAAO,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CACzB;AAED,yCAAyC;AACzC,MAAM,WAAW,oBAAoB;IACnC;;;;OAIG;IACH,OAAO,EAAE,MAAM,CAAC;IAChB,+DAA+D;IAC/D,SAAS,EAAE,MAAM,CAAC;IAClB,4DAA4D;IAC5D,SAAS,EAAE,MAAM,CAAC;IAClB,8DAA8D;IAC9D,MAAM,EAAE,MAAM,CAAC;IACf;;;OAGG;IACH,gBAAgB,CAAC,EAAE,MAAM,CAAC;CAC3B;AAoBD;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAsB,aAAa,CAAC,OAAO,EAAE,oBAAoB,GAAG,OAAO,CAAC,OAAO,CAAC,CAuBnF"}
|
package/dist/webhook.js
ADDED
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
// ─── Rendex Webhook Verification ─────────────────────────────────────
|
|
2
|
+
// Verify the HMAC-SHA256 signature Rendex attaches to every webhook (async
|
|
3
|
+
// job results AND Rendex Watch change alerts). Zero-dependency: uses the Web
|
|
4
|
+
// Crypto API (`crypto.subtle`), available in Node 18+, Bun, Workers, Deno, and
|
|
5
|
+
// browsers. The contract mirrors the server exactly (services/webhook.ts):
|
|
6
|
+
//
|
|
7
|
+
// message = `${timestamp}.${rawBody}`
|
|
8
|
+
// signature = hex( HMAC-SHA256(secret, message) )
|
|
9
|
+
//
|
|
10
|
+
// delivered as headers:
|
|
11
|
+
// x-rendex-signature hex HMAC-SHA256 (compare against this)
|
|
12
|
+
// x-rendex-timestamp unix seconds (used in the signed message; replay window)
|
|
13
|
+
// x-rendex-event the event name (e.g. "watch.changed")
|
|
14
|
+
// x-rendex-delivery-id stable across retries (idempotency key)
|
|
15
|
+
const encoder = new TextEncoder();
|
|
16
|
+
/** Constant-time comparison of two hex strings (avoids leaking via early-exit). */
|
|
17
|
+
function timingSafeEqualHex(a, b) {
|
|
18
|
+
if (a.length !== b.length)
|
|
19
|
+
return false;
|
|
20
|
+
let mismatch = 0;
|
|
21
|
+
for (let i = 0; i < a.length; i++) {
|
|
22
|
+
mismatch |= a.charCodeAt(i) ^ b.charCodeAt(i);
|
|
23
|
+
}
|
|
24
|
+
return mismatch === 0;
|
|
25
|
+
}
|
|
26
|
+
function toHex(buffer) {
|
|
27
|
+
return Array.from(new Uint8Array(buffer))
|
|
28
|
+
.map((b) => b.toString(16).padStart(2, "0"))
|
|
29
|
+
.join("");
|
|
30
|
+
}
|
|
31
|
+
/**
|
|
32
|
+
* Verify a Rendex webhook signature. Returns `true` only when the signature
|
|
33
|
+
* matches AND (unless disabled) the timestamp is within `toleranceSeconds`.
|
|
34
|
+
* Never throws on a bad signature — returns `false` so callers can reply 400.
|
|
35
|
+
*
|
|
36
|
+
* ```ts
|
|
37
|
+
* // In your webhook handler (raw body string + headers):
|
|
38
|
+
* const ok = await verifyWebhook({
|
|
39
|
+
* payload: rawBody,
|
|
40
|
+
* signature: req.headers["x-rendex-signature"],
|
|
41
|
+
* timestamp: req.headers["x-rendex-timestamp"],
|
|
42
|
+
* secret: process.env.WEBHOOK_SIGNING_SECRET,
|
|
43
|
+
* });
|
|
44
|
+
* if (!ok) return res.status(400).end();
|
|
45
|
+
* const payload: RendexWebhookPayload = JSON.parse(rawBody);
|
|
46
|
+
* if (payload.event === "watch.changed") { ... }
|
|
47
|
+
* ```
|
|
48
|
+
*/
|
|
49
|
+
export async function verifyWebhook(options) {
|
|
50
|
+
const { payload, signature, timestamp, secret, toleranceSeconds = 300 } = options;
|
|
51
|
+
if (!payload || !signature || !timestamp || !secret)
|
|
52
|
+
return false;
|
|
53
|
+
// Optional replay-window check.
|
|
54
|
+
if (toleranceSeconds > 0) {
|
|
55
|
+
const ts = Number(timestamp);
|
|
56
|
+
if (!Number.isFinite(ts))
|
|
57
|
+
return false;
|
|
58
|
+
const ageSeconds = Math.abs(Date.now() / 1000 - ts);
|
|
59
|
+
if (ageSeconds > toleranceSeconds)
|
|
60
|
+
return false;
|
|
61
|
+
}
|
|
62
|
+
const key = await crypto.subtle.importKey("raw", encoder.encode(secret), { name: "HMAC", hash: "SHA-256" }, false, ["sign"]);
|
|
63
|
+
const sig = await crypto.subtle.sign("HMAC", key, encoder.encode(`${timestamp}.${payload}`));
|
|
64
|
+
const expected = toHex(sig);
|
|
65
|
+
return timingSafeEqualHex(expected, signature.trim().toLowerCase());
|
|
66
|
+
}
|
|
67
|
+
//# sourceMappingURL=webhook.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"webhook.js","sourceRoot":"","sources":["../src/webhook.ts"],"names":[],"mappings":"AAAA,wEAAwE;AACxE,2EAA2E;AAC3E,6EAA6E;AAC7E,+EAA+E;AAC/E,2EAA2E;AAC3E,EAAE;AACF,0CAA0C;AAC1C,oDAAoD;AACpD,EAAE;AACF,wBAAwB;AACxB,gEAAgE;AAChE,kFAAkF;AAClF,+DAA+D;AAC/D,iEAAiE;AAsEjE,MAAM,OAAO,GAAG,IAAI,WAAW,EAAE,CAAC;AAElC,mFAAmF;AACnF,SAAS,kBAAkB,CAAC,CAAS,EAAE,CAAS;IAC9C,IAAI,CAAC,CAAC,MAAM,KAAK,CAAC,CAAC,MAAM;QAAE,OAAO,KAAK,CAAC;IACxC,IAAI,QAAQ,GAAG,CAAC,CAAC;IACjB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QAClC,QAAQ,IAAI,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;IAChD,CAAC;IACD,OAAO,QAAQ,KAAK,CAAC,CAAC;AACxB,CAAC;AAED,SAAS,KAAK,CAAC,MAAmB;IAChC,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,UAAU,CAAC,MAAM,CAAC,CAAC;SACtC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;SAC3C,IAAI,CAAC,EAAE,CAAC,CAAC;AACd,CAAC;AAED;;;;;;;;;;;;;;;;;GAiBG;AACH,MAAM,CAAC,KAAK,UAAU,aAAa,CAAC,OAA6B;IAC/D,MAAM,EAAE,OAAO,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,EAAE,gBAAgB,GAAG,GAAG,EAAE,GAAG,OAAO,CAAC;IAClF,IAAI,CAAC,OAAO,IAAI,CAAC,SAAS,IAAI,CAAC,SAAS,IAAI,CAAC,MAAM;QAAE,OAAO,KAAK,CAAC;IAElE,gCAAgC;IAChC,IAAI,gBAAgB,GAAG,CAAC,EAAE,CAAC;QACzB,MAAM,EAAE,GAAG,MAAM,CAAC,SAAS,CAAC,CAAC;QAC7B,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,EAAE,CAAC;YAAE,OAAO,KAAK,CAAC;QACvC,MAAM,UAAU,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,GAAG,EAAE,CAAC,CAAC;QACpD,IAAI,UAAU,GAAG,gBAAgB;YAAE,OAAO,KAAK,CAAC;IAClD,CAAC;IAED,MAAM,GAAG,GAAG,MAAM,MAAM,CAAC,MAAM,CAAC,SAAS,CACvC,KAAK,EACL,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC,EACtB,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,SAAS,EAAE,EACjC,KAAK,EACL,CAAC,MAAM,CAAC,CACT,CAAC;IACF,MAAM,GAAG,GAAG,MAAM,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG,EAAE,OAAO,CAAC,MAAM,CAAC,GAAG,SAAS,IAAI,OAAO,EAAE,CAAC,CAAC,CAAC;IAC7F,MAAM,QAAQ,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC;IAE5B,OAAO,kBAAkB,CAAC,QAAQ,EAAE,SAAS,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC,CAAC;AACtE,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@copperline/rendex",
|
|
3
|
-
"version": "1.
|
|
4
|
-
"description": "Official TypeScript SDK for Rendex — render HTML or Markdown to images, generate PDFs, and
|
|
3
|
+
"version": "1.5.0",
|
|
4
|
+
"description": "Official TypeScript SDK for Rendex — render HTML or Markdown to images, generate PDFs, capture screenshots, and monitor pages for changes with Rendex Watch",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "./dist/index.js",
|
|
7
7
|
"types": "./dist/index.d.ts",
|
|
@@ -41,11 +41,6 @@
|
|
|
41
41
|
"author": "Copperline Labs LLC",
|
|
42
42
|
"license": "MIT",
|
|
43
43
|
"homepage": "https://rendex.dev",
|
|
44
|
-
"repository": {
|
|
45
|
-
"type": "git",
|
|
46
|
-
"url": "https://github.com/copperline-labs/copperline-labs",
|
|
47
|
-
"directory": "packages/rendex-js"
|
|
48
|
-
},
|
|
49
44
|
"devDependencies": {
|
|
50
45
|
"typescript": "^5.7.0"
|
|
51
46
|
}
|