@getopencrawl/sdk 0.0.0-stage → 0.2.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (88) hide show
  1. package/README.md +598 -2
  2. package/dist/agentPlatform.d.ts +146 -0
  3. package/dist/agentPlatform.d.ts.map +1 -0
  4. package/dist/agentPlatform.js +48 -0
  5. package/dist/agentPlatform.js.map +1 -0
  6. package/dist/agents.d.ts +237 -0
  7. package/dist/agents.d.ts.map +1 -0
  8. package/dist/agents.js +279 -0
  9. package/dist/agents.js.map +1 -0
  10. package/dist/answerContract.d.ts +85 -0
  11. package/dist/answerContract.d.ts.map +1 -0
  12. package/dist/answerContract.js +112 -0
  13. package/dist/answerContract.js.map +1 -0
  14. package/dist/answerView.d.ts +40 -0
  15. package/dist/answerView.d.ts.map +1 -0
  16. package/dist/answerView.js +118 -0
  17. package/dist/answerView.js.map +1 -0
  18. package/dist/configuration.d.ts +5 -0
  19. package/dist/configuration.d.ts.map +1 -0
  20. package/dist/configuration.js +29 -0
  21. package/dist/configuration.js.map +1 -0
  22. package/dist/customers.d.ts +176 -0
  23. package/dist/customers.d.ts.map +1 -0
  24. package/dist/customers.js +286 -0
  25. package/dist/customers.js.map +1 -0
  26. package/dist/errors.d.ts +35 -0
  27. package/dist/errors.d.ts.map +1 -0
  28. package/dist/errors.js +58 -0
  29. package/dist/errors.js.map +1 -0
  30. package/dist/eventEvidence.d.ts +10 -0
  31. package/dist/eventEvidence.d.ts.map +1 -0
  32. package/dist/eventEvidence.js +52 -0
  33. package/dist/eventEvidence.js.map +1 -0
  34. package/dist/index.d.ts +98 -0
  35. package/dist/index.d.ts.map +1 -0
  36. package/dist/index.js +139 -0
  37. package/dist/index.js.map +1 -0
  38. package/dist/productMonitors.d.ts +258 -0
  39. package/dist/productMonitors.d.ts.map +1 -0
  40. package/dist/productMonitors.js +68 -0
  41. package/dist/productMonitors.js.map +1 -0
  42. package/dist/researchAnswerContract.d.ts +8 -0
  43. package/dist/researchAnswerContract.d.ts.map +1 -0
  44. package/dist/researchAnswerContract.js +23 -0
  45. package/dist/researchAnswerContract.js.map +1 -0
  46. package/dist/researchAnswerView.d.ts +8 -0
  47. package/dist/researchAnswerView.d.ts.map +1 -0
  48. package/dist/researchAnswerView.js +27 -0
  49. package/dist/researchAnswerView.js.map +1 -0
  50. package/dist/researchCompletion.d.ts +114 -0
  51. package/dist/researchCompletion.d.ts.map +1 -0
  52. package/dist/researchCompletion.js +94 -0
  53. package/dist/researchCompletion.js.map +1 -0
  54. package/dist/serviceTenants.d.ts +15 -0
  55. package/dist/serviceTenants.d.ts.map +1 -0
  56. package/dist/serviceTenants.js +58 -0
  57. package/dist/serviceTenants.js.map +1 -0
  58. package/dist/tools.d.ts +59 -0
  59. package/dist/tools.d.ts.map +1 -0
  60. package/dist/tools.js +60 -0
  61. package/dist/tools.js.map +1 -0
  62. package/dist/transport.d.ts +34 -0
  63. package/dist/transport.d.ts.map +1 -0
  64. package/dist/transport.js +227 -0
  65. package/dist/transport.js.map +1 -0
  66. package/dist/types.d.ts +399 -0
  67. package/dist/types.d.ts.map +1 -0
  68. package/dist/types.js +2 -0
  69. package/dist/types.js.map +1 -0
  70. package/dist/webhooks.d.ts +38 -0
  71. package/dist/webhooks.d.ts.map +1 -0
  72. package/dist/webhooks.js +73 -0
  73. package/dist/webhooks.js.map +1 -0
  74. package/examples/letter-customer-research-demo.mjs +54 -0
  75. package/examples/letter-customer-research-store.d.mts +38 -0
  76. package/examples/letter-customer-research-store.mjs +186 -0
  77. package/examples/letter-customer-research.d.mts +39 -0
  78. package/examples/letter-customer-research.mjs +194 -0
  79. package/examples/letter-event-receiver.d.mts +10 -0
  80. package/examples/letter-event-receiver.mjs +55 -0
  81. package/examples/letter-event-store.d.mts +35 -0
  82. package/examples/letter-event-store.mjs +84 -0
  83. package/examples/letter-seer.d.mts +31 -0
  84. package/examples/letter-seer.mjs +78 -0
  85. package/examples/letter-service-tenants.d.mts +12 -0
  86. package/examples/letter-service-tenants.mjs +49 -0
  87. package/examples/research-webhook-receiver.mjs +29 -0
  88. package/package.json +75 -4
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
package/dist/index.js ADDED
@@ -0,0 +1,139 @@
1
+ import { Customers, memoryKeyStore } from './customers.js';
2
+ import { AgentPlatform } from './agentPlatform.js';
3
+ import { OpenCrawlAbortError, OpenCrawlProtocolError, OpenCrawlTimeoutError, OpenCrawlValidationError } from './errors.js';
4
+ import { Transport, boundedInteger, idPath, idempotencyKey } from './transport.js';
5
+ import { ResearchWebhooks } from './webhooks.js';
6
+ import { ServiceTenantControl } from './serviceTenants.js';
7
+ import { ResearchAgents } from './agents.js';
8
+ import { ProductMonitors } from './productMonitors.js';
9
+ export * from './productMonitors.js';
10
+ import { configureCollection } from './configuration.js';
11
+ import { readEvent } from './eventEvidence.js';
12
+ export * from './errors.js';
13
+ export * from './types.js';
14
+ export { verifyResearchWebhook } from './webhooks.js';
15
+ export { Customer, Customers, memoryKeyStore, signalHeadline } from './customers.js';
16
+ export { AgentPlatform, signupOrganization, pollOrganizationSignup } from './agentPlatform.js';
17
+ export { agentTools } from './tools.js';
18
+ function query(options) { const params = new URLSearchParams(); if (options.limit !== undefined)
19
+ params.set('limit', String(boundedInteger(options.limit, 'limit', 1, 100))); if (options.cursor !== undefined) {
20
+ if (typeof options.cursor !== 'string' || options.cursor.length > 8192)
21
+ throw new OpenCrawlValidationError('cursor must be a bounded opaque string.');
22
+ params.set('cursor', options.cursor);
23
+ } const text = params.toString(); return text ? `?${text}` : ''; }
24
+ function page(value) { if (!value || !Array.isArray(value.items) || !(value.next_cursor === null || typeof value.next_cursor === 'string'))
25
+ throw new OpenCrawlProtocolError('OpenCrawl returned an invalid pagination receipt.'); return value; }
26
+ function job(value) { if (!value || typeof value.id !== 'string' || !['queued', 'running', 'completed', 'partial', 'failed', 'cancelled'].includes(value.status))
27
+ throw new OpenCrawlProtocolError('OpenCrawl returned an invalid job receipt.'); return value; }
28
+ function signalCheck(signal) { if (signal?.aborted)
29
+ throw new OpenCrawlAbortError('The OpenCrawl operation was cancelled.'); }
30
+ function sleep(ms, signal) { return new Promise((resolve, reject) => { signalCheck(signal); const abort = () => { clearTimeout(timer); signal?.removeEventListener('abort', abort); reject(new OpenCrawlAbortError('The OpenCrawl operation was cancelled.')); }, timer = setTimeout(() => { signal?.removeEventListener('abort', abort); resolve(); }, ms); signal?.addEventListener('abort', abort, { once: true }); }); }
31
+ async function* iterate(fetchPage, options) { const max = boundedInteger(options.maxPages ?? 1000, 'maxPages', 1, 10000); let cursor = options.cursor; const seen = new Set(); if (cursor !== undefined)
32
+ seen.add(cursor); for (let count = 0; count < max; count++) {
33
+ signalCheck(options.signal);
34
+ const result = page(await fetchPage({ ...options, cursor }));
35
+ for (const item of result.items) {
36
+ signalCheck(options.signal);
37
+ yield item;
38
+ }
39
+ if (result.next_cursor === null)
40
+ return;
41
+ if (seen.has(result.next_cursor))
42
+ throw new OpenCrawlProtocolError('OpenCrawl repeated a pagination cursor. Iteration stopped.');
43
+ seen.add(result.next_cursor);
44
+ cursor = result.next_cursor;
45
+ } throw new OpenCrawlProtocolError('Pagination reached maxPages. Continue explicitly with a saved page cursor.'); }
46
+ class Collections {
47
+ transport;
48
+ constructor(transport) {
49
+ this.transport = transport;
50
+ }
51
+ create(input, options) { idempotencyKey(options?.idempotencyKey); return this.transport.request('/api/research/collections', { ...options, method: 'POST', body: input }); }
52
+ async list(options = {}) { return page(await this.transport.request(`/api/research/collections${query(options)}`, options)); }
53
+ get(id, options = {}) { return this.transport.request(`/api/research/collections/${idPath(id)}`, options); }
54
+ update(id, input, options = {}) { boundedInteger(input.expected_revision, 'expected_revision', 1, Number.MAX_SAFE_INTEGER); if (!['active', 'paused'].includes(input.status))
55
+ throw new OpenCrawlValidationError('status must be active or paused.'); return this.transport.request(`/api/research/collections/${idPath(id)}`, { ...options, method: 'PATCH', body: input }); }
56
+ configure(id, input, options) { return configureCollection(this.transport, id, input, options); }
57
+ refresh(id, input, options) { idempotencyKey(options?.idempotencyKey); return this.transport.request(`/api/research/collections/${idPath(id)}/refresh`, { ...options, method: 'POST', body: input }); }
58
+ async events(id, options = {}) { if (options.includeVolatile !== undefined && typeof options.includeVolatile !== 'boolean')
59
+ throw new OpenCrawlValidationError('includeVolatile must be a boolean.'); const base = query(options), filter = options.includeVolatile === false ? 'include_volatile=false' : ''; return page(await this.transport.request(`/api/research/collections/${idPath(id)}/events${base}${filter ? (base ? '&' : '?') + filter : ''}`, options)); }
60
+ event(collectionId, eventId, options = {}) { return readEvent(this.transport, collectionId, eventId, options); }
61
+ iterate(options = {}) { return iterate(value => this.list(value), options); }
62
+ iterateEvents(id, options = {}) { return iterate(value => this.events(id, { ...value, includeVolatile: options.includeVolatile }), options); }
63
+ }
64
+ class Jobs {
65
+ transport;
66
+ constructor(transport) {
67
+ this.transport = transport;
68
+ }
69
+ async get(id, options = {}) { return job(await this.transport.request(`/api/research/jobs/${idPath(id)}`, options)); }
70
+ /** Waits for a terminal receipt. Failed/partial/cancelled jobs are returned, not disguised as success. */
71
+ async wait(id, options = {}) {
72
+ const maxWait = boundedInteger(options.maxWaitMs ?? 300000, 'maxWaitMs', 1, 3600000), interval = boundedInteger(options.pollIntervalMs ?? 1000, 'pollIntervalMs', 10, 60000), deadline = Date.now() + maxWait;
73
+ while (true) {
74
+ signalCheck(options.signal);
75
+ const remaining = deadline - Date.now();
76
+ if (remaining <= 0)
77
+ throw new OpenCrawlTimeoutError('The job is still pending. Resume waiting with the same job identifier.', id);
78
+ let value;
79
+ try {
80
+ value = await this.get(id, { signal: options.signal, timeoutMs: Math.max(1, Math.min(options.timeoutMs ?? 30000, remaining)) });
81
+ }
82
+ catch (error) {
83
+ if (error instanceof OpenCrawlTimeoutError)
84
+ throw new OpenCrawlTimeoutError('Job status could not be read before the deadline. Resume with the same job identifier.', id);
85
+ throw error;
86
+ }
87
+ options.onProgress?.(value);
88
+ if (!['queued', 'running'].includes(value.status))
89
+ return value;
90
+ const wait = Math.min(interval, Math.max(0, deadline - Date.now()));
91
+ await sleep(wait, options.signal);
92
+ }
93
+ }
94
+ }
95
+ class Plans {
96
+ transport;
97
+ constructor(transport) {
98
+ this.transport = transport;
99
+ }
100
+ status(options = {}) { return this.transport.request('/api/research/planner', options); }
101
+ /** Returns a proposal only. Source selection and collection creation remain explicit. */
102
+ create(input, options) { idempotencyKey(options?.idempotencyKey); return this.transport.request('/api/research/plans', { ...options, method: 'POST', body: input }); }
103
+ get(id, options = {}) { return this.transport.request(`/api/research/plans/${idPath(id)}`, options); }
104
+ byKey(key, options = {}) { idempotencyKey(key); return this.transport.request(`/api/research/plans/by-key/${encodeURIComponent(key)}`, options); }
105
+ }
106
+ /** Server-only. Supply tenant-specific credentials explicitly; no environment or local config is read. */
107
+ export class OpenCrawl {
108
+ productMonitors;
109
+ agents;
110
+ collections;
111
+ jobs;
112
+ webhooks;
113
+ plans;
114
+ agent;
115
+ baseUrl;
116
+ #transport;
117
+ #tenantControl;
118
+ #options;
119
+ constructor(options) { this.#options = { ...options }; this.#transport = new Transport(options); this.baseUrl = this.#transport.baseUrl; this.productMonitors = new ProductMonitors(this.#transport); this.agents = new ResearchAgents(this.#transport); this.collections = new Collections(this.#transport); this.jobs = new Jobs(this.#transport); this.webhooks = new ResearchWebhooks(this.#transport); this.plans = new Plans(this.#transport); this.agent = new AgentPlatform(this.#transport); this.#tenantControl = new ServiceTenantControl(this.#transport); }
120
+ /** Your end customers, each isolated in its own workspace and provisioned on first use.
121
+ * Requires a parent administrator API key. Pass a shared KeyStore when several processes
122
+ * serve customers; keys lost from the store are recovered by rotation. */
123
+ customers(options = {}) { return new Customers(this, options.keys ?? memoryKeyStore(), key => new OpenCrawl({ ...this.#options, apiKey: key })); }
124
+ /** Requires a parent administrator API key; these writes never retry automatically. */
125
+ createServiceTenant(input, options) { return this.#tenantControl.create(input, options); }
126
+ listServiceTenants(options = {}) { return this.#tenantControl.list(options); }
127
+ getServiceTenant(id, options = {}) { return this.#tenantControl.get(id, options); }
128
+ rotateServiceTenantKey(id, input, options) { return this.#tenantControl.rotate(id, input, options); }
129
+ revokeServiceTenant(id, input, options) { return this.#tenantControl.revoke(id, input, options); }
130
+ getServiceTenantReceipt(operation, options) { return this.#tenantControl.recover(operation, options); }
131
+ search(input, options = {}) { return this.#transport.request('/api/research/search', { ...options, method: 'POST', body: input, readOnly: input.freshness !== 'refresh' }); }
132
+ /** Existing source-scoped context API; explicit [] is retained, never broadened. */
133
+ context(input, options = {}) { return this.#transport.request('/api/v1/context', { ...options, method: 'POST', body: input, readOnly: true }); }
134
+ }
135
+ export default OpenCrawl;
136
+ export { readResearchAnswerContract } from './researchAnswerContract.js';
137
+ export { readResearchCompletion, readResearchPresentation } from './researchCompletion.js';
138
+ export { readResearchAnswerView } from "./researchAnswerView.js";
139
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,258 @@
1
+ /** Private client-attested observations; browser state stays on the capture device. */
2
+ import { Transport, type RequestOptions } from './transport.js';
3
+ export type ProductCapturePolicy = ({
4
+ version: 1;
5
+ request_adapter?: never;
6
+ } | {
7
+ version: 2;
8
+ request_adapter: 'letter-connections-read-v1';
9
+ } | {
10
+ version: 3;
11
+ request_adapter: 'letter-capabilities-read-v1';
12
+ }) & {
13
+ viewport: {
14
+ width: number;
15
+ height: number;
16
+ device_scale_factor: 1;
17
+ };
18
+ locale: string;
19
+ timezone_id: string;
20
+ color_scheme: 'light' | 'dark';
21
+ screenshot_mode: 'viewport';
22
+ extractor: 'product-screen-v1';
23
+ masks: Array<{
24
+ selector: string;
25
+ label: string;
26
+ }>;
27
+ noise_regions: Array<{
28
+ selector: string;
29
+ label: string;
30
+ }>;
31
+ };
32
+ export type ProductPageInput = {
33
+ url: string;
34
+ label: string;
35
+ ready_selector: string;
36
+ scope_selector: string;
37
+ login_selector: string | null;
38
+ account_marker: {
39
+ selector: string;
40
+ required: true;
41
+ } | null;
42
+ };
43
+ export type ProductMonitorInput = {
44
+ client_create_id: string;
45
+ name: string;
46
+ account_label: string;
47
+ pages: ProductPageInput[];
48
+ policy: ProductCapturePolicy;
49
+ cadence_minutes: 0 | 60 | 360 | 1440;
50
+ };
51
+ export type ProductSnapshot = {
52
+ id: string;
53
+ version: string;
54
+ observed_at: string;
55
+ received_at: string;
56
+ title: string;
57
+ text_sha256: string;
58
+ text_bytes: number;
59
+ screenshot_sha256: string;
60
+ screenshot_bytes: number;
61
+ pixel_sha256: string;
62
+ width: number;
63
+ height: number;
64
+ policy_sha256: string;
65
+ comparability_sha256: string;
66
+ account_assurance: 'declared_only' | 'dom_marker_matched';
67
+ account_label: string;
68
+ requested_url: string;
69
+ final_url: string;
70
+ };
71
+ export type ProductComparison = {
72
+ id: string;
73
+ version: string;
74
+ before_snapshot_id: string;
75
+ after_snapshot_id: string;
76
+ observed_before: string;
77
+ observed_after: string;
78
+ text_changed: boolean;
79
+ image_changed: boolean;
80
+ gap: boolean;
81
+ assessment: 'observed_interface_difference';
82
+ };
83
+ export type ProductMonitor = {
84
+ version: 1;
85
+ id: string;
86
+ name: string;
87
+ owner_id: string;
88
+ visibility: 'private';
89
+ status: 'active' | 'paused' | 'revoked';
90
+ generation: number;
91
+ origin: string;
92
+ account_label: string;
93
+ pages: Array<ProductPageInput & {
94
+ id: string;
95
+ last_attempt: unknown | null;
96
+ latest_snapshot: ProductSnapshot | null;
97
+ }>;
98
+ policy: ProductCapturePolicy;
99
+ policy_sha256: string;
100
+ cadence_minutes: 0 | 60 | 360 | 1440;
101
+ local_runner_required: true;
102
+ last_attempt_at: string | null;
103
+ last_success_at: string | null;
104
+ expected_next_capture_at: string | null;
105
+ observation_freshness: 'never' | 'recent' | 'overdue';
106
+ retention: {
107
+ days: number;
108
+ max_comparisons_per_page: number;
109
+ max_attempts_per_page: number;
110
+ max_recent_snapshots_per_page?: number;
111
+ current_baseline_retained: boolean;
112
+ };
113
+ capacity: {
114
+ used_bytes: number;
115
+ limit_bytes: number;
116
+ };
117
+ created_at: string;
118
+ updated_at: string;
119
+ };
120
+ export type ProductCaptureOutcome = 'captured' | 'session_expired' | 'context_mismatch' | 'not_ready' | 'scope_mismatch' | 'mask_unresolved' | 'request_blocked' | 'timeout' | 'capture_failed';
121
+ export type ProductCaptureUpload = {
122
+ version: 1;
123
+ client_capture_id: string;
124
+ page_id: string;
125
+ expected_generation: number;
126
+ policy_sha256: string;
127
+ expected_previous_snapshot_id: string | null;
128
+ session_epoch: string;
129
+ observed_at: string;
130
+ requested_url: string;
131
+ final_url: string | null;
132
+ outcome: ProductCaptureOutcome;
133
+ account: {
134
+ label: string;
135
+ assurance: 'declared_only' | 'dom_marker_matched';
136
+ marker_sha256: string | null;
137
+ };
138
+ ready_matched: boolean;
139
+ login_marker_matched: boolean;
140
+ title: string | null;
141
+ text: string | null;
142
+ screenshot_png_base64: string | null;
143
+ };
144
+ export type ProductCaptureReceipt = {
145
+ version: 1;
146
+ id: string;
147
+ client_capture_id: string;
148
+ monitor_id: string;
149
+ page_id: string;
150
+ generation: number;
151
+ manifest_sha256: string;
152
+ observed_at: string;
153
+ received_at: string;
154
+ outcome: ProductCaptureOutcome;
155
+ snapshot: ProductSnapshot | null;
156
+ comparison: ProductComparison | null;
157
+ baseline_reason: string | null;
158
+ };
159
+ export type ProductComparisonDetail = ProductComparison & {
160
+ monitor_id: string;
161
+ page_id: string;
162
+ before: ProductSnapshot;
163
+ after: ProductSnapshot;
164
+ regions: {
165
+ before: ProductTextRegion;
166
+ after: ProductTextRegion;
167
+ };
168
+ exclusions: {
169
+ masks: Array<{
170
+ selector: string;
171
+ label: string;
172
+ }>;
173
+ noise_regions: Array<{
174
+ selector: string;
175
+ label: string;
176
+ }>;
177
+ };
178
+ explanation: string;
179
+ };
180
+ export type ProductTextRegion = {
181
+ text: string;
182
+ start: number;
183
+ end: number;
184
+ changed_start: number;
185
+ changed_end: number;
186
+ truncated: boolean;
187
+ };
188
+ export type ProductContextInput = {
189
+ selections: Array<{
190
+ comparison_id: string;
191
+ version: string;
192
+ }>;
193
+ budget: number;
194
+ };
195
+ export type ProductContext = {
196
+ context: string;
197
+ context_bytes: number;
198
+ budget: number;
199
+ included: Array<{
200
+ comparison_id: string;
201
+ version: string;
202
+ side: 'before' | 'after';
203
+ snapshot_id: string;
204
+ observed_at: string;
205
+ excerpt: string;
206
+ context_span: {
207
+ start_char: number;
208
+ end_char: number;
209
+ };
210
+ truncated: boolean;
211
+ }>;
212
+ omitted: Array<{
213
+ comparison_id: string;
214
+ side: 'before' | 'after';
215
+ reason: 'budget' | 'no_text_region';
216
+ }>;
217
+ image_content_included: false;
218
+ assessment: 'observed_interface_difference';
219
+ };
220
+ export declare class ProductMonitors {
221
+ private readonly transport;
222
+ constructor(transport: Transport);
223
+ /** One POST only. Save client_create_id first; use byClientId after an uncertain result. */
224
+ create(input: ProductMonitorInput, o?: RequestOptions): Promise<ProductMonitor>;
225
+ byClientId(key: string, o?: RequestOptions): Promise<ProductMonitor>;
226
+ list(o?: RequestOptions): Promise<{
227
+ monitors: ProductMonitor[];
228
+ }>;
229
+ get(key: string, o?: RequestOptions): Promise<ProductMonitor>;
230
+ update(key: string, input: {
231
+ expected_generation: number;
232
+ name?: string;
233
+ policy?: ProductCapturePolicy;
234
+ cadence_minutes?: 0 | 60 | 360 | 1440;
235
+ status?: 'active' | 'paused' | 'revoked';
236
+ }, o?: RequestOptions): Promise<ProductMonitor>;
237
+ delete(key: string, o?: RequestOptions): Promise<{
238
+ deleted: true;
239
+ }>;
240
+ /** No automatic POST retry. Recovery is a separate exact-ID read. */
241
+ capture(key: string, input: ProductCaptureUpload, o?: RequestOptions): Promise<ProductCaptureReceipt>;
242
+ captureByClientId(key: string, clientId: string, o?: RequestOptions): Promise<ProductCaptureReceipt>;
243
+ captures(key: string, o?: RequestOptions): Promise<{
244
+ captures: ProductCaptureReceipt[];
245
+ }>;
246
+ snapshot(key: string, o?: RequestOptions): Promise<ProductSnapshot & {
247
+ text: string;
248
+ monitor_id: string;
249
+ page_id: string;
250
+ }>;
251
+ image(key: string, o?: RequestOptions): Promise<Uint8Array>;
252
+ comparisons(key: string, o?: RequestOptions): Promise<{
253
+ comparisons: ProductComparison[];
254
+ }>;
255
+ comparison(key: string, version: string, o?: RequestOptions): Promise<ProductComparisonDetail>;
256
+ context(input: ProductContextInput, o?: RequestOptions): Promise<ProductContext>;
257
+ }
258
+ //# sourceMappingURL=productMonitors.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"productMonitors.d.ts","sourceRoot":"","sources":["../src/productMonitors.ts"],"names":[],"mappings":"AAAA,uFAAuF;AACvF,OAAO,EAAC,SAAS,EAAgB,KAAK,cAAc,EAAC,MAAM,gBAAgB,CAAC;AAE5E,MAAM,MAAM,oBAAoB,GAAC,CAAC;IAAC,OAAO,EAAC,CAAC,CAAC;IAAA,eAAe,CAAC,EAAC,KAAK,CAAA;CAAC,GAAC;IAAC,OAAO,EAAC,CAAC,CAAC;IAAA,eAAe,EAAC,4BAA4B,CAAA;CAAC,GAAC;IAAC,OAAO,EAAC,CAAC,CAAC;IAAA,eAAe,EAAC,6BAA6B,CAAA;CAAC,CAAC,GAAC;IAAC,QAAQ,EAAC;QAAC,KAAK,EAAC,MAAM,CAAC;QAAA,MAAM,EAAC,MAAM,CAAC;QAAA,mBAAmB,EAAC,CAAC,CAAA;KAAC,CAAC;IAAA,MAAM,EAAC,MAAM,CAAC;IAAA,WAAW,EAAC,MAAM,CAAC;IAAA,YAAY,EAAC,OAAO,GAAC,MAAM,CAAC;IAAA,eAAe,EAAC,UAAU,CAAC;IAAA,SAAS,EAAC,mBAAmB,CAAC;IAAA,KAAK,EAAC,KAAK,CAAC;QAAC,QAAQ,EAAC,MAAM,CAAC;QAAA,KAAK,EAAC,MAAM,CAAA;KAAC,CAAC,CAAC;IAAA,aAAa,EAAC,KAAK,CAAC;QAAC,QAAQ,EAAC,MAAM,CAAC;QAAA,KAAK,EAAC,MAAM,CAAA;KAAC,CAAC,CAAA;CAAC,CAAC;AAC7c,MAAM,MAAM,gBAAgB,GAAC;IAAC,GAAG,EAAC,MAAM,CAAC;IAAA,KAAK,EAAC,MAAM,CAAC;IAAA,cAAc,EAAC,MAAM,CAAC;IAAA,cAAc,EAAC,MAAM,CAAC;IAAA,cAAc,EAAC,MAAM,GAAC,IAAI,CAAC;IAAA,cAAc,EAAC;QAAC,QAAQ,EAAC,MAAM,CAAC;QAAA,QAAQ,EAAC,IAAI,CAAA;KAAC,GAAC,IAAI,CAAA;CAAC,CAAC;AAClL,MAAM,MAAM,mBAAmB,GAAC;IAAC,gBAAgB,EAAC,MAAM,CAAC;IAAA,IAAI,EAAC,MAAM,CAAC;IAAA,aAAa,EAAC,MAAM,CAAC;IAAA,KAAK,EAAC,gBAAgB,EAAE,CAAC;IAAA,MAAM,EAAC,oBAAoB,CAAC;IAAA,eAAe,EAAC,CAAC,GAAC,EAAE,GAAC,GAAG,GAAC,IAAI,CAAA;CAAC,CAAC;AAC9K,MAAM,MAAM,eAAe,GAAC;IAAC,EAAE,EAAC,MAAM,CAAC;IAAA,OAAO,EAAC,MAAM,CAAC;IAAA,WAAW,EAAC,MAAM,CAAC;IAAA,WAAW,EAAC,MAAM,CAAC;IAAA,KAAK,EAAC,MAAM,CAAC;IAAA,WAAW,EAAC,MAAM,CAAC;IAAA,UAAU,EAAC,MAAM,CAAC;IAAA,iBAAiB,EAAC,MAAM,CAAC;IAAA,gBAAgB,EAAC,MAAM,CAAC;IAAA,YAAY,EAAC,MAAM,CAAC;IAAA,KAAK,EAAC,MAAM,CAAC;IAAA,MAAM,EAAC,MAAM,CAAC;IAAA,aAAa,EAAC,MAAM,CAAC;IAAA,oBAAoB,EAAC,MAAM,CAAC;IAAA,iBAAiB,EAAC,eAAe,GAAC,oBAAoB,CAAC;IAAA,aAAa,EAAC,MAAM,CAAC;IAAA,aAAa,EAAC,MAAM,CAAC;IAAA,SAAS,EAAC,MAAM,CAAA;CAAC,CAAC;AAClZ,MAAM,MAAM,iBAAiB,GAAC;IAAC,EAAE,EAAC,MAAM,CAAC;IAAA,OAAO,EAAC,MAAM,CAAC;IAAA,kBAAkB,EAAC,MAAM,CAAC;IAAA,iBAAiB,EAAC,MAAM,CAAC;IAAA,eAAe,EAAC,MAAM,CAAC;IAAA,cAAc,EAAC,MAAM,CAAC;IAAA,YAAY,EAAC,OAAO,CAAC;IAAA,aAAa,EAAC,OAAO,CAAC;IAAA,GAAG,EAAC,OAAO,CAAC;IAAA,UAAU,EAAC,+BAA+B,CAAA;CAAC,CAAC;AAC3P,MAAM,MAAM,cAAc,GAAC;IAAC,OAAO,EAAC,CAAC,CAAC;IAAA,EAAE,EAAC,MAAM,CAAC;IAAA,IAAI,EAAC,MAAM,CAAC;IAAA,QAAQ,EAAC,MAAM,CAAC;IAAA,UAAU,EAAC,SAAS,CAAC;IAAA,MAAM,EAAC,QAAQ,GAAC,QAAQ,GAAC,SAAS,CAAC;IAAA,UAAU,EAAC,MAAM,CAAC;IAAA,MAAM,EAAC,MAAM,CAAC;IAAA,aAAa,EAAC,MAAM,CAAC;IAAA,KAAK,EAAC,KAAK,CAAC,gBAAgB,GAAC;QAAC,EAAE,EAAC,MAAM,CAAC;QAAA,YAAY,EAAC,OAAO,GAAC,IAAI,CAAC;QAAA,eAAe,EAAC,eAAe,GAAC,IAAI,CAAA;KAAC,CAAC,CAAC;IAAA,MAAM,EAAC,oBAAoB,CAAC;IAAA,aAAa,EAAC,MAAM,CAAC;IAAA,eAAe,EAAC,CAAC,GAAC,EAAE,GAAC,GAAG,GAAC,IAAI,CAAC;IAAA,qBAAqB,EAAC,IAAI,CAAC;IAAA,eAAe,EAAC,MAAM,GAAC,IAAI,CAAC;IAAA,eAAe,EAAC,MAAM,GAAC,IAAI,CAAC;IAAA,wBAAwB,EAAC,MAAM,GAAC,IAAI,CAAC;IAAA,qBAAqB,EAAC,OAAO,GAAC,QAAQ,GAAC,SAAS,CAAC;IAAA,SAAS,EAAC;QAAC,IAAI,EAAC,MAAM,CAAC;QAAA,wBAAwB,EAAC,MAAM,CAAC;QAAA,qBAAqB,EAAC,MAAM,CAAC;QAAA,6BAA6B,CAAC,EAAC,MAAM,CAAC;QAAA,yBAAyB,EAAC,OAAO,CAAA;KAAC,CAAC;IAAA,QAAQ,EAAC;QAAC,UAAU,EAAC,MAAM,CAAC;QAAA,WAAW,EAAC,MAAM,CAAA;KAAC,CAAC;IAAA,UAAU,EAAC,MAAM,CAAC;IAAA,UAAU,EAAC,MAAM,CAAA;CAAC,CAAC;AAC5wB,MAAM,MAAM,qBAAqB,GAAC,UAAU,GAAC,iBAAiB,GAAC,kBAAkB,GAAC,WAAW,GAAC,gBAAgB,GAAC,iBAAiB,GAAC,iBAAiB,GAAC,SAAS,GAAC,gBAAgB,CAAC;AAC9K,MAAM,MAAM,oBAAoB,GAAC;IAAC,OAAO,EAAC,CAAC,CAAC;IAAA,iBAAiB,EAAC,MAAM,CAAC;IAAA,OAAO,EAAC,MAAM,CAAC;IAAA,mBAAmB,EAAC,MAAM,CAAC;IAAA,aAAa,EAAC,MAAM,CAAC;IAAA,6BAA6B,EAAC,MAAM,GAAC,IAAI,CAAC;IAAA,aAAa,EAAC,MAAM,CAAC;IAAA,WAAW,EAAC,MAAM,CAAC;IAAA,aAAa,EAAC,MAAM,CAAC;IAAA,SAAS,EAAC,MAAM,GAAC,IAAI,CAAC;IAAA,OAAO,EAAC,qBAAqB,CAAC;IAAA,OAAO,EAAC;QAAC,KAAK,EAAC,MAAM,CAAC;QAAA,SAAS,EAAC,eAAe,GAAC,oBAAoB,CAAC;QAAA,aAAa,EAAC,MAAM,GAAC,IAAI,CAAA;KAAC,CAAC;IAAA,aAAa,EAAC,OAAO,CAAC;IAAA,oBAAoB,EAAC,OAAO,CAAC;IAAA,KAAK,EAAC,MAAM,GAAC,IAAI,CAAC;IAAA,IAAI,EAAC,MAAM,GAAC,IAAI,CAAC;IAAA,qBAAqB,EAAC,MAAM,GAAC,IAAI,CAAA;CAAC,CAAC;AACxf,MAAM,MAAM,qBAAqB,GAAC;IAAC,OAAO,EAAC,CAAC,CAAC;IAAA,EAAE,EAAC,MAAM,CAAC;IAAA,iBAAiB,EAAC,MAAM,CAAC;IAAA,UAAU,EAAC,MAAM,CAAC;IAAA,OAAO,EAAC,MAAM,CAAC;IAAA,UAAU,EAAC,MAAM,CAAC;IAAA,eAAe,EAAC,MAAM,CAAC;IAAA,WAAW,EAAC,MAAM,CAAC;IAAA,WAAW,EAAC,MAAM,CAAC;IAAA,OAAO,EAAC,qBAAqB,CAAC;IAAA,QAAQ,EAAC,eAAe,GAAC,IAAI,CAAC;IAAA,UAAU,EAAC,iBAAiB,GAAC,IAAI,CAAC;IAAA,eAAe,EAAC,MAAM,GAAC,IAAI,CAAA;CAAC,CAAC;AAC3T,MAAM,MAAM,uBAAuB,GAAC,iBAAiB,GAAC;IAAC,UAAU,EAAC,MAAM,CAAC;IAAA,OAAO,EAAC,MAAM,CAAC;IAAA,MAAM,EAAC,eAAe,CAAC;IAAA,KAAK,EAAC,eAAe,CAAC;IAAA,OAAO,EAAC;QAAC,MAAM,EAAC,iBAAiB,CAAC;QAAA,KAAK,EAAC,iBAAiB,CAAA;KAAC,CAAC;IAAA,UAAU,EAAC;QAAC,KAAK,EAAC,KAAK,CAAC;YAAC,QAAQ,EAAC,MAAM,CAAC;YAAA,KAAK,EAAC,MAAM,CAAA;SAAC,CAAC,CAAC;QAAA,aAAa,EAAC,KAAK,CAAC;YAAC,QAAQ,EAAC,MAAM,CAAC;YAAA,KAAK,EAAC,MAAM,CAAA;SAAC,CAAC,CAAA;KAAC,CAAC;IAAA,WAAW,EAAC,MAAM,CAAA;CAAC,CAAC;AACjU,MAAM,MAAM,iBAAiB,GAAC;IAAC,IAAI,EAAC,MAAM,CAAC;IAAA,KAAK,EAAC,MAAM,CAAC;IAAA,GAAG,EAAC,MAAM,CAAC;IAAA,aAAa,EAAC,MAAM,CAAC;IAAA,WAAW,EAAC,MAAM,CAAC;IAAA,SAAS,EAAC,OAAO,CAAA;CAAC,CAAC;AAC9H,MAAM,MAAM,mBAAmB,GAAC;IAAC,UAAU,EAAC,KAAK,CAAC;QAAC,aAAa,EAAC,MAAM,CAAC;QAAA,OAAO,EAAC,MAAM,CAAA;KAAC,CAAC,CAAC;IAAA,MAAM,EAAC,MAAM,CAAA;CAAC,CAAC;AACxG,MAAM,MAAM,cAAc,GAAC;IAAC,OAAO,EAAC,MAAM,CAAC;IAAA,aAAa,EAAC,MAAM,CAAC;IAAA,MAAM,EAAC,MAAM,CAAC;IAAA,QAAQ,EAAC,KAAK,CAAC;QAAC,aAAa,EAAC,MAAM,CAAC;QAAA,OAAO,EAAC,MAAM,CAAC;QAAA,IAAI,EAAC,QAAQ,GAAC,OAAO,CAAC;QAAA,WAAW,EAAC,MAAM,CAAC;QAAA,WAAW,EAAC,MAAM,CAAC;QAAA,OAAO,EAAC,MAAM,CAAC;QAAA,YAAY,EAAC;YAAC,UAAU,EAAC,MAAM,CAAC;YAAA,QAAQ,EAAC,MAAM,CAAA;SAAC,CAAC;QAAA,SAAS,EAAC,OAAO,CAAA;KAAC,CAAC,CAAC;IAAA,OAAO,EAAC,KAAK,CAAC;QAAC,aAAa,EAAC,MAAM,CAAC;QAAA,IAAI,EAAC,QAAQ,GAAC,OAAO,CAAC;QAAA,MAAM,EAAC,QAAQ,GAAC,gBAAgB,CAAA;KAAC,CAAC,CAAC;IAAA,sBAAsB,EAAC,KAAK,CAAC;IAAA,UAAU,EAAC,+BAA+B,CAAA;CAAC,CAAC;AAUxb,qBAAa,eAAe;IACf,OAAO,CAAC,QAAQ,CAAC,SAAS;gBAAT,SAAS,EAAC,SAAS;IAChD,4FAA4F;IACtF,MAAM,CAAC,KAAK,EAAC,mBAAmB,EAAC,CAAC,GAAC,cAAiB,GAAE,OAAO,CAAC,cAAc,CAAC;IAC7E,UAAU,CAAC,GAAG,EAAC,MAAM,EAAC,CAAC,GAAC,cAAiB,GAAE,OAAO,CAAC,cAAc,CAAC;IAClE,IAAI,CAAC,CAAC,GAAC,cAAiB,GAAE,OAAO,CAAC;QAAC,QAAQ,EAAC,cAAc,EAAE,CAAA;KAAC,CAAC;IAC9D,GAAG,CAAC,GAAG,EAAC,MAAM,EAAC,CAAC,GAAC,cAAiB,GAAE,OAAO,CAAC,cAAc,CAAC;IAC3D,MAAM,CAAC,GAAG,EAAC,MAAM,EAAC,KAAK,EAAC;QAAC,mBAAmB,EAAC,MAAM,CAAC;QAAA,IAAI,CAAC,EAAC,MAAM,CAAC;QAAA,MAAM,CAAC,EAAC,oBAAoB,CAAC;QAAA,eAAe,CAAC,EAAC,CAAC,GAAC,EAAE,GAAC,GAAG,GAAC,IAAI,CAAC;QAAA,MAAM,CAAC,EAAC,QAAQ,GAAC,QAAQ,GAAC,SAAS,CAAA;KAAC,EAAC,CAAC,GAAC,cAAiB,GAAE,OAAO,CAAC,cAAc,CAAC;IACpN,MAAM,CAAC,GAAG,EAAC,MAAM,EAAC,CAAC,GAAC,cAAiB,GAAE,OAAO,CAAC;QAAC,OAAO,EAAC,IAAI,CAAA;KAAC,CAAC;IAC9D,qEAAqE;IAC/D,OAAO,CAAC,GAAG,EAAC,MAAM,EAAC,KAAK,EAAC,oBAAoB,EAAC,CAAC,GAAC,cAAiB,GAAE,OAAO,CAAC,qBAAqB,CAAC;IAOvG,iBAAiB,CAAC,GAAG,EAAC,MAAM,EAAC,QAAQ,EAAC,MAAM,EAAC,CAAC,GAAC,cAAiB,GAAE,OAAO,CAAC,qBAAqB,CAAC;IAChG,QAAQ,CAAC,GAAG,EAAC,MAAM,EAAC,CAAC,GAAC,cAAiB,GAAE,OAAO,CAAC;QAAC,QAAQ,EAAC,qBAAqB,EAAE,CAAA;KAAC,CAAC;IAC9E,QAAQ,CAAC,GAAG,EAAC,MAAM,EAAC,CAAC,GAAC,cAAiB,GAAE,OAAO,CAAC,eAAe,GAAC;QAAC,IAAI,EAAC,MAAM,CAAC;QAAA,UAAU,EAAC,MAAM,CAAC;QAAA,OAAO,EAAC,MAAM,CAAA;KAAC,CAAC;IAChH,KAAK,CAAC,GAAG,EAAC,MAAM,EAAC,CAAC,GAAC,cAAiB,GAAE,OAAO,CAAC,UAAU,CAAC;IAC/D,WAAW,CAAC,GAAG,EAAC,MAAM,EAAC,CAAC,GAAC,cAAiB,GAAE,OAAO,CAAC;QAAC,WAAW,EAAC,iBAAiB,EAAE,CAAA;KAAC,CAAC;IAChF,UAAU,CAAC,GAAG,EAAC,MAAM,EAAC,OAAO,EAAC,MAAM,EAAC,CAAC,GAAC,cAAiB,GAAE,OAAO,CAAC,uBAAuB,CAAC;IAChG,OAAO,CAAC,KAAK,EAAC,mBAAmB,EAAC,CAAC,GAAC,cAAiB,GAAE,OAAO,CAAC,cAAc,CAAC;CAC9E"}
@@ -0,0 +1,68 @@
1
+ /** Private client-attested observations; browser state stays on the capture device. */
2
+ import { boundedInteger } from './transport.js';
3
+ import { OpenCrawlValidationError, OpenCrawlProtocolError } from './errors.js';
4
+ const API = '/api/v1/product-monitors', HASH = /^[a-f0-9]{64}$/, UUID = /^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/;
5
+ function id(v, p) { if (typeof v !== 'string' || !new RegExp(`^${p}_[a-f0-9]{32}$`).test(v))
6
+ throw new OpenCrawlValidationError('Use the exact product resource ID.'); return v; }
7
+ function uuid(v) { if (!UUID.test(v))
8
+ throw new OpenCrawlValidationError('Use a canonical UUID saved before the operation.'); return v; }
9
+ function canonical(v) { return JSON.stringify(v, (_, x) => x && typeof x === 'object' && !Array.isArray(x) ? Object.fromEntries(Object.keys(x).sort().map(k => [k, x[k]])) : x); }
10
+ async function digest(v) { return Array.from(new Uint8Array(await crypto.subtle.digest('SHA-256', new TextEncoder().encode(v))), x => x.toString(16).padStart(2, '0')).join(''); }
11
+ function monitor(v, expected) { if (v?.version !== 1 || !/^src_[a-f0-9]{32}$/.test(v.id) || expected !== undefined && v.id !== expected || v.visibility !== 'private' || !Number.isSafeInteger(v.generation) || v.generation < 1 || !Array.isArray(v.pages) || v.pages.length < 1 || v.pages.length > 5 || !HASH.test(v.policy_sha256) || !(v.policy?.version === 1 && !Object.hasOwn(v.policy, 'request_adapter') || (v.policy?.version === 2 && v.policy.request_adapter === 'letter-connections-read-v1' || v.policy?.version === 3 && v.policy.request_adapter === 'letter-capabilities-read-v1' && v.pages[0]?.ready_selector === '[data-testid="connect-integration-open"]' && v.pages[0]?.scope_selector === '[data-testid="connect-integration"]') && v.pages.length === 1 && v.pages[0]?.url === 'https://app.letterstory.com/letterpress?view=connections' && v.pages[0]?.account_marker?.required === true))
12
+ throw new OpenCrawlProtocolError('Invalid private product monitor response.'); return v; }
13
+ function capture(v, expected, clientId) { if (v?.version !== 1 || !/^pcap_[a-f0-9]{32}$/.test(v.id) || v.monitor_id !== expected || clientId !== undefined && v.client_capture_id !== clientId || !HASH.test(v.manifest_sha256))
14
+ throw new OpenCrawlProtocolError('Invalid product capture receipt.'); return v; }
15
+ async function bytesDigest(value) { return Array.from(new Uint8Array(await crypto.subtle.digest('SHA-256', value)), x => x.toString(16).padStart(2, '0')).join(''); }
16
+ function bodyLimit(v) { if (new TextEncoder().encode(JSON.stringify(v)).length > 3145728)
17
+ throw new OpenCrawlValidationError('Product capture exceeds the 3 MiB encoded request limit.'); }
18
+ export class ProductMonitors {
19
+ transport;
20
+ constructor(transport) {
21
+ this.transport = transport;
22
+ }
23
+ /** One POST only. Save client_create_id first; use byClientId after an uncertain result. */
24
+ async create(input, o = {}) { uuid(input.client_create_id); bodyLimit(input); return monitor(await this.transport.request(API, { ...o, method: 'POST', body: input, automaticRetry: false })); }
25
+ async byClientId(key, o = {}) { return monitor(await this.transport.request(`${API}/by-client-id/${uuid(key)}`, { ...o, automaticRetry: false })); }
26
+ async list(o = {}) { const r = await this.transport.request(API, o); if (!Array.isArray(r?.monitors) || r.monitors.length > 10)
27
+ throw new OpenCrawlProtocolError('Invalid monitor list.'); r.monitors.forEach(x => monitor(x)); return r; }
28
+ async get(key, o = {}) { return monitor(await this.transport.request(`${API}/${id(key, 'src')}`, o), key); }
29
+ async update(key, input, o = {}) { boundedInteger(input.expected_generation, 'expected_generation', 1, Number.MAX_SAFE_INTEGER); return monitor(await this.transport.request(`${API}/${id(key, 'src')}`, { ...o, method: 'PATCH', body: input, automaticRetry: false }), key); }
30
+ delete(key, o = {}) { return this.transport.request(`${API}/${id(key, 'src')}`, { ...o, method: 'DELETE', automaticRetry: false }); }
31
+ /** No automatic POST retry. Recovery is a separate exact-ID read. */
32
+ async capture(key, input, o = {}) {
33
+ id(key, 'src');
34
+ uuid(input.client_capture_id);
35
+ uuid(input.session_epoch);
36
+ id(input.page_id, 'ppg');
37
+ boundedInteger(input.expected_generation, 'expected_generation', 1, Number.MAX_SAFE_INTEGER);
38
+ if (input.outcome === 'captured') {
39
+ if (typeof input.text !== 'string' || new TextEncoder().encode(input.text).length > 131072 || typeof input.screenshot_png_base64 !== 'string' || input.screenshot_png_base64.length > 2796204)
40
+ throw new OpenCrawlValidationError('Capture text or image exceeds its bound.');
41
+ }
42
+ else if (input.text !== null || input.title !== null || input.screenshot_png_base64 !== null || input.final_url !== null)
43
+ throw new OpenCrawlValidationError('Failed observations cannot contain page text or images.');
44
+ bodyLimit(input);
45
+ const expected = await digest(canonical(input));
46
+ const r = capture(await this.transport.request(`${API}/${key}/captures`, { ...o, method: 'POST', body: input, automaticRetry: false }), key, input.client_capture_id);
47
+ if (r.manifest_sha256 !== expected || r.page_id !== input.page_id || r.generation !== input.expected_generation || r.outcome !== input.outcome)
48
+ throw new OpenCrawlProtocolError('Product capture does not match the submitted observation.');
49
+ return r;
50
+ }
51
+ captureByClientId(key, clientId, o = {}) { return this.transport.request(`${API}/${id(key, 'src')}/captures/by-client-id/${uuid(clientId)}`, { ...o, automaticRetry: false }).then(r => capture(r, key, clientId)); }
52
+ captures(key, o = {}) { return this.transport.request(`${API}/${id(key, 'src')}/captures`, o); }
53
+ async snapshot(key, o = {}) { const r = await this.transport.request(`${API}/snapshots/${id(key, 'psnap')}`, o); if (r?.id !== key || !HASH.test(r.version) || typeof r.text !== 'string' || !HASH.test(r.screenshot_sha256))
54
+ throw new OpenCrawlProtocolError('Invalid immutable product snapshot.'); return r; }
55
+ async image(key, o = {}) { const snapshot = await this.snapshot(key, o); const bytes = await this.transport.request(`${API}/snapshots/${id(key, 'psnap')}/image`, { ...o, responseType: 'png' }); if (bytes.length !== snapshot.screenshot_bytes || await bytesDigest(bytes) !== snapshot.screenshot_sha256)
56
+ throw new OpenCrawlProtocolError('PNG does not match its immutable snapshot.'); return bytes; }
57
+ comparisons(key, o = {}) { return this.transport.request(`${API}/${id(key, 'src')}/comparisons`, o); }
58
+ async comparison(key, version, o = {}) { if (!HASH.test(version))
59
+ throw new OpenCrawlValidationError('Select the exact immutable comparison version.'); const r = await this.transport.request(`${API}/comparisons/${id(key, 'pcmp')}`, o); if (r?.id !== key || r.version !== version)
60
+ throw new OpenCrawlProtocolError('Comparison identity changed; no newer version was substituted.'); return r; }
61
+ context(input, o = {}) { boundedInteger(input.budget, 'budget', 256, 16384); if (!Array.isArray(input.selections) || input.selections.length < 1 || input.selections.length > 3 || new Set(input.selections.map(s => s.comparison_id)).size !== input.selections.length)
62
+ throw new OpenCrawlValidationError('Select 1–3 distinct exact comparisons.'); for (const s of input.selections) {
63
+ id(s.comparison_id, 'pcmp');
64
+ if (!HASH.test(s.version))
65
+ throw new OpenCrawlValidationError('Select the exact comparison version.');
66
+ } return this.transport.request('/api/v1/product-monitor-context', { ...o, method: 'POST', body: input, readOnly: true }); }
67
+ }
68
+ //# sourceMappingURL=productMonitors.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"productMonitors.js","sourceRoot":"","sources":["../src/productMonitors.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,8 @@
1
+ import { type AnswerContractRun, type AnswerContractView } from './answerContract.js';
2
+ export type { AnswerSourceScope, AnswerFactRef, AnswerComponent, AnswerContract, AnswerContractMarker, AnswerContractView } from './answerContract.js';
3
+ /** Optional run metadata only. No requests, run mutation or completeness certification.
4
+ * Use the original run returned by the SDK, never substitute the agent's current goal.
5
+ * An absent/invalid/unassessed value is not evidence that every question was answered.
6
+ */
7
+ export declare function readResearchAnswerContract(run: AnswerContractRun): Promise<AnswerContractView>;
8
+ //# sourceMappingURL=researchAnswerContract.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"researchAnswerContract.d.ts","sourceRoot":"","sources":["../src/researchAnswerContract.ts"],"names":[],"mappings":"AAAA,OAAO,EAAoB,KAAK,iBAAiB,EAAC,KAAK,kBAAkB,EAAC,MAAM,qBAAqB,CAAC;AACtG,YAAY,EAAC,iBAAiB,EAAC,aAAa,EAAC,eAAe,EAAC,cAAc,EAAC,oBAAoB,EAAC,kBAAkB,EAAC,MAAM,qBAAqB,CAAC;AAChJ;;;GAGG;AACH,wBAAsB,0BAA0B,CAAC,GAAG,EAAC,iBAAiB,GAAE,OAAO,CAAC,kBAAkB,CAAC,CAUlG"}
@@ -0,0 +1,23 @@
1
+ import { readAnswerContract } from './answerContract.js';
2
+ /** Optional run metadata only. No requests, run mutation or completeness certification.
3
+ * Use the original run returned by the SDK, never substitute the agent's current goal.
4
+ * An absent/invalid/unassessed value is not evidence that every question was answered.
5
+ */
6
+ export async function readResearchAnswerContract(run) {
7
+ if (!Object.hasOwn(run.usage, 'answer_contract'))
8
+ return { state: 'absent', contract: null, notices: [] };
9
+ const hashes = new Map();
10
+ try {
11
+ if (run.findings.length > 5 || run.gaps.length > 5 || new TextEncoder().encode(JSON.stringify(run.usage)).length > 16384)
12
+ throw new Error('bound');
13
+ const texts = [...run.gaps, ...run.findings.flatMap(f => [f.claim, ...f.qualifiers])];
14
+ if (texts.length > 35 || texts.some(t => typeof t !== 'string' || Array.from(t).length > 1500))
15
+ throw new Error('bound');
16
+ await Promise.all([...new Set(texts)].map(async (text) => hashes.set(text, Array.from(new Uint8Array(await crypto.subtle.digest('SHA-256', new TextEncoder().encode(text))), b => b.toString(16).padStart(2, '0')).join(''))));
17
+ }
18
+ catch {
19
+ return { state: 'invalid', contract: null, notices: [{ id: 'invalid', text: 'Requested-answer assessment could not be validated for this run. The findings and coverage notes remain available.' }] };
20
+ }
21
+ return readAnswerContract(run, text => hashes.get(text) ?? '');
22
+ }
23
+ //# sourceMappingURL=researchAnswerContract.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"researchAnswerContract.js","sourceRoot":"","sources":["../src/researchAnswerContract.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,kBAAkB,EAAgD,MAAM,qBAAqB,CAAC;AAEtG;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,0BAA0B,CAAC,GAAqB;IACrE,IAAG,CAAC,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,KAAK,EAAC,iBAAiB,CAAC;QAAC,OAAO,EAAC,KAAK,EAAC,QAAQ,EAAC,QAAQ,EAAC,IAAI,EAAC,OAAO,EAAC,EAAE,EAAC,CAAC;IAChG,MAAM,MAAM,GAAC,IAAI,GAAG,EAAiB,CAAC;IACtC,IAAG,CAAC;QACH,IAAG,GAAG,CAAC,QAAQ,CAAC,MAAM,GAAC,CAAC,IAAE,GAAG,CAAC,IAAI,CAAC,MAAM,GAAC,CAAC,IAAE,IAAI,WAAW,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,GAAC,KAAK;YAAC,MAAM,IAAI,KAAK,CAAC,OAAO,CAAC,CAAC;QACvI,MAAM,KAAK,GAAC,CAAC,GAAG,GAAG,CAAC,IAAI,EAAC,GAAG,GAAG,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAA,EAAE,CAAA,CAAC,CAAC,CAAC,KAAK,EAAC,GAAG,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;QAChF,IAAG,KAAK,CAAC,MAAM,GAAC,EAAE,IAAE,KAAK,CAAC,IAAI,CAAC,CAAC,CAAA,EAAE,CAAA,OAAO,CAAC,KAAG,QAAQ,IAAE,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,MAAM,GAAC,IAAI,CAAC;YAAC,MAAM,IAAI,KAAK,CAAC,OAAO,CAAC,CAAC;QAC3G,MAAM,OAAO,CAAC,GAAG,CAAC,CAAC,GAAG,IAAI,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,EAAC,IAAI,EAAA,EAAE,CAAA,MAAM,CAAC,GAAG,CAAC,IAAI,EAAC,KAAK,CAAC,IAAI,CAAC,IAAI,UAAU,CAAC,MAAM,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,SAAS,EAAC,IAAI,WAAW,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAC,CAAC,CAAA,EAAE,CAAA,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;IACtN,CAAC;IAAA,MAAK,CAAC;QAAA,OAAO,EAAC,KAAK,EAAC,SAAS,EAAC,QAAQ,EAAC,IAAI,EAAC,OAAO,EAAC,CAAC,EAAC,EAAE,EAAC,SAAS,EAAC,IAAI,EAAC,oHAAoH,EAAC,CAAC,EAAC,CAAA;IAAA,CAAC;IACjM,OAAO,kBAAkB,CAAC,GAAG,EAAC,IAAI,CAAA,EAAE,CAAA,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,IAAE,EAAE,CAAC,CAAC;AAC3D,CAAC"}
@@ -0,0 +1,8 @@
1
+ import type { AnswerContractRun } from './answerContract.js';
2
+ import { type ResearchAnswerViewResult } from './answerView.js';
3
+ export type { AnswerAssertion, AnswerOmissionReason, ResearchAnswerView, ResearchAnswerSection, ResearchAnswerViewResult } from './answerView.js';
4
+ /** Read only the optional saved concise answer. No generation, requests or run mutation.
5
+ * Exact findings, qualifications, citations and coverage remain authoritative.
6
+ */
7
+ export declare function readResearchAnswerView(run: AnswerContractRun): Promise<ResearchAnswerViewResult>;
8
+ //# sourceMappingURL=researchAnswerView.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"researchAnswerView.d.ts","sourceRoot":"","sources":["../src/researchAnswerView.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAC,iBAAiB,EAAC,MAAM,qBAAqB,CAAC;AAE3D,OAAO,EAAoC,KAAK,wBAAwB,EAAC,MAAM,iBAAiB,CAAC;AACjG,YAAY,EAAC,eAAe,EAAC,oBAAoB,EAAC,kBAAkB,EAAC,qBAAqB,EAAC,wBAAwB,EAAC,MAAM,iBAAiB,CAAC;AAE5I;;GAEG;AACH,wBAAsB,sBAAsB,CAAC,GAAG,EAAC,iBAAiB,GAAE,OAAO,CAAC,wBAAwB,CAAC,CAcpG"}
@@ -0,0 +1,27 @@
1
+ import { readResearchAnswerContract } from './researchAnswerContract.js';
2
+ import { canonicalAnswerJson, readAnswerView } from './answerView.js';
3
+ /** Read only the optional saved concise answer. No generation, requests or run mutation.
4
+ * Exact findings, qualifications, citations and coverage remain authoritative.
5
+ */
6
+ export async function readResearchAnswerView(run) {
7
+ if (!Object.hasOwn(run.usage, 'answer_view'))
8
+ return { state: 'absent', view: null, sections: [] };
9
+ try {
10
+ const contract = await readResearchAnswerContract(run), hashes = new Map();
11
+ if (contract.state !== 'assessed_nonexhaustive')
12
+ return { state: 'invalid', view: null, sections: [] };
13
+ const literals = run.findings.flatMap(f => [f.claim, ...f.qualifiers]);
14
+ if (run.findings.length > 5 || run.findings.some(f => f.qualifiers.length > 5) || literals.length > 30 || literals.some(t => typeof t !== 'string' || Array.from(t).length > 1500))
15
+ return { state: 'invalid', view: null, sections: [] };
16
+ const texts = [canonicalAnswerJson(run.usage.answer_contract), canonicalAnswerJson(run.findings), ...literals];
17
+ await Promise.all([...new Set(texts)].map(async (text) => {
18
+ const bytes = await crypto.subtle.digest('SHA-256', new TextEncoder().encode(text));
19
+ hashes.set(text, Array.from(new Uint8Array(bytes), b => b.toString(16).padStart(2, '0')).join(''));
20
+ }));
21
+ return readAnswerView(run, contract, text => hashes.get(text) ?? '');
22
+ }
23
+ catch {
24
+ return { state: 'invalid', view: null, sections: [] };
25
+ }
26
+ }
27
+ //# sourceMappingURL=researchAnswerView.js.map