@getopencrawl/sdk 0.0.0-stage → 0.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (88) hide show
  1. package/README.md +598 -2
  2. package/dist/agentPlatform.d.ts +142 -0
  3. package/dist/agentPlatform.d.ts.map +1 -0
  4. package/dist/agentPlatform.js +46 -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,227 @@
1
+ import { OpenCrawlAPIError, OpenCrawlAbortError, OpenCrawlConnectionError, OpenCrawlProtocolError, OpenCrawlTimeoutError, OpenCrawlValidationError } from './errors.js';
2
+ const RETRYABLE = new Set([429, 502, 503, 504]);
3
+ const MAX_RESPONSE = 16 * 1024 * 1024;
4
+ export function boundedInteger(value, name, min, max) { if (!Number.isSafeInteger(value) || value < min || value > max)
5
+ throw new OpenCrawlValidationError(`${name} must be an integer between ${min} and ${max}.`); return value; }
6
+ export function idPath(value) { if (typeof value !== 'string' || !value || value.length > 200 || value === '.' || value === '..' || /[\x00-\x1f\x7f]/.test(value))
7
+ throw new OpenCrawlValidationError('A valid OpenCrawl identifier is required.'); return encodeURIComponent(value); }
8
+ export function idempotencyKey(value) { if (typeof value !== 'string' || !(/^[A-Za-z0-9_-]{16,128}$/).test(value))
9
+ throw new OpenCrawlValidationError('Use a 16–128 character random idempotency key containing letters, numbers, hyphens or underscores.'); return value; }
10
+ function retryAfter(value) { if (!value)
11
+ return undefined; const seconds = Number(value); const delay = Number.isFinite(seconds) ? seconds * 1000 : Date.parse(value) - Date.now(); return Number.isFinite(delay) ? Math.max(0, delay) : undefined; }
12
+ function scalar(value, max = 160) { return typeof value === 'string' ? value.slice(0, max) : undefined; }
13
+ function record(value) { return value !== null && typeof value === 'object' && !Array.isArray(value) ? value : {}; }
14
+ function discard(response) { void response.body?.cancel().catch(() => { }); }
15
+ async function readJson(response, signal) {
16
+ const limit = response.ok ? MAX_RESPONSE : 65536;
17
+ if (Number(response.headers.get('Content-Length')) > limit) {
18
+ discard(response);
19
+ throw new OpenCrawlProtocolError('OpenCrawl returned a response larger than the SDK limit.');
20
+ }
21
+ if (!response.body)
22
+ return undefined;
23
+ const reader = response.body.getReader();
24
+ let bytes = 0;
25
+ const chunks = [];
26
+ const cancel = () => { void reader.cancel().catch(() => { }); };
27
+ if (signal.aborted)
28
+ cancel();
29
+ else
30
+ signal.addEventListener('abort', cancel, { once: true });
31
+ try {
32
+ while (true) {
33
+ const part = await reader.read();
34
+ if (part.done)
35
+ break;
36
+ bytes += part.value.byteLength;
37
+ if (bytes > limit) {
38
+ cancel();
39
+ throw new OpenCrawlProtocolError('OpenCrawl returned a response larger than the SDK limit.');
40
+ }
41
+ chunks.push(part.value);
42
+ }
43
+ }
44
+ finally {
45
+ signal.removeEventListener('abort', cancel);
46
+ reader.releaseLock();
47
+ }
48
+ const joined = new Uint8Array(bytes);
49
+ let offset = 0;
50
+ for (const chunk of chunks) {
51
+ joined.set(chunk, offset);
52
+ offset += chunk.byteLength;
53
+ }
54
+ if (!bytes)
55
+ return undefined;
56
+ try {
57
+ return JSON.parse(new TextDecoder('utf-8', { fatal: true }).decode(joined));
58
+ }
59
+ catch {
60
+ throw new OpenCrawlProtocolError('OpenCrawl returned an invalid JSON response.');
61
+ }
62
+ }
63
+ async function readPng(response, signal) {
64
+ if (response.headers.get('Content-Type')?.split(';')[0]?.trim() !== 'image/png' || Number(response.headers.get('Content-Length')) > 2097152) {
65
+ discard(response);
66
+ throw new OpenCrawlProtocolError('Invalid bounded PNG response.');
67
+ }
68
+ if (!response.body)
69
+ throw new OpenCrawlProtocolError('Missing PNG response.');
70
+ const reader = response.body.getReader(), parts = [];
71
+ let size = 0;
72
+ const cancel = () => { void reader.cancel().catch(() => { }); };
73
+ if (signal.aborted)
74
+ cancel();
75
+ else
76
+ signal.addEventListener('abort', cancel, { once: true });
77
+ try {
78
+ while (true) {
79
+ const row = await reader.read();
80
+ if (row.done)
81
+ break;
82
+ size += row.value.length;
83
+ if (size > 2097152) {
84
+ cancel();
85
+ throw new OpenCrawlProtocolError('PNG response exceeds its bound.');
86
+ }
87
+ parts.push(row.value);
88
+ }
89
+ }
90
+ finally {
91
+ signal.removeEventListener('abort', cancel);
92
+ reader.releaseLock();
93
+ }
94
+ const result = new Uint8Array(size);
95
+ let offset = 0;
96
+ for (const part of parts) {
97
+ result.set(part, offset);
98
+ offset += part.length;
99
+ }
100
+ if (size < 33 || [137, 80, 78, 71, 13, 10, 26, 10].some((v, i) => result[i] !== v) || String.fromCharCode(...result.subarray(12, 16)) !== 'IHDR' || new DataView(result.buffer).getUint32(16) < 320 || new DataView(result.buffer).getUint32(16) > 1920 || new DataView(result.buffer).getUint32(20) < 240 || new DataView(result.buffer).getUint32(20) > 1080)
101
+ throw new OpenCrawlProtocolError('Invalid PNG signature.');
102
+ return result;
103
+ }
104
+ function delay(ms, signal) { return new Promise((resolve, reject) => { if (signal.aborted) {
105
+ reject(new OpenCrawlAbortError('The request was cancelled.'));
106
+ return;
107
+ } const done = () => { clearTimeout(timer); signal.removeEventListener('abort', abort); resolve(); }, abort = () => { clearTimeout(timer); signal.removeEventListener('abort', abort); reject(new OpenCrawlAbortError('The request was cancelled.')); }, timer = setTimeout(done, ms); signal.addEventListener('abort', abort, { once: true }); }); }
108
+ function abortable(pending, signal, onLate) { return new Promise((resolve, reject) => { let settled = false; const abort = () => { if (settled)
109
+ return; settled = true; signal.removeEventListener('abort', abort); reject(new OpenCrawlAbortError('The request was cancelled.')); }; pending.then(value => { signal.removeEventListener('abort', abort); if (settled) {
110
+ onLate?.(value);
111
+ return;
112
+ } settled = true; resolve(value); }, error => { signal.removeEventListener('abort', abort); if (settled)
113
+ return; settled = true; reject(error); }); if (signal.aborted)
114
+ abort();
115
+ else
116
+ signal.addEventListener('abort', abort, { once: true }); }); }
117
+ export class Transport {
118
+ baseUrl;
119
+ #apiKey;
120
+ #fetch;
121
+ #timeoutMs;
122
+ #maxRetries;
123
+ constructor(options) {
124
+ if ('window' in globalThis && 'document' in globalThis)
125
+ throw new OpenCrawlValidationError('OpenCrawl API keys belong on your server. Do not use this SDK in a browser.');
126
+ let base;
127
+ try {
128
+ base = new URL(options.baseUrl ?? 'https://app.getopencrawl.com');
129
+ }
130
+ catch {
131
+ throw new OpenCrawlValidationError('baseUrl must be an absolute HTTPS origin.');
132
+ }
133
+ const loopback = ['localhost', '127.0.0.1', '[::1]'].includes(base.hostname);
134
+ if ((base.protocol !== 'https:' && !(base.protocol === 'http:' && loopback)) || base.username || base.password || base.search || base.hash || (base.pathname !== '/' && base.pathname !== ''))
135
+ throw new OpenCrawlValidationError('baseUrl must be an HTTPS origin without credentials, path, query or fragment. HTTP is permitted only for loopback development.');
136
+ if (typeof options.apiKey !== 'string' || options.apiKey.length < 1 || options.apiKey.length > 4096 || /[\s\x00-\x1f\x7f]/.test(options.apiKey))
137
+ throw new OpenCrawlValidationError('A nonempty server-side API key is required.');
138
+ this.baseUrl = base.origin;
139
+ this.#apiKey = options.apiKey;
140
+ this.#fetch = options.fetch ?? ((url, init) => fetch(url, init));
141
+ this.#timeoutMs = boundedInteger(options.timeoutMs ?? 30000, 'timeoutMs', 1, 300000);
142
+ this.#maxRetries = boundedInteger(options.maxRetries ?? 2, 'maxRetries', 0, 5);
143
+ }
144
+ async request(path, options = {}) {
145
+ if (!path.startsWith('/api/') || path.startsWith('//') || path.includes('\\') || /[\x00-\x1f\x7f]/.test(path))
146
+ throw new OpenCrawlValidationError('Only OpenCrawl API routes are supported.');
147
+ const url = new URL(path, this.baseUrl);
148
+ if (url.origin !== this.baseUrl)
149
+ throw new OpenCrawlValidationError('Requests cannot leave the configured OpenCrawl origin.');
150
+ const method = options.method ?? 'GET', key = options.idempotencyKey === undefined ? undefined : idempotencyKey(options.idempotencyKey), safe = options.automaticRetry !== false && (method === 'GET' || options.readOnly === true || !!key);
151
+ let body;
152
+ try {
153
+ body = options.body === undefined ? undefined : JSON.stringify(options.body);
154
+ }
155
+ catch {
156
+ throw new OpenCrawlValidationError('The request body must be JSON serializable.');
157
+ }
158
+ const timeoutMs = boundedInteger(options.timeoutMs ?? this.#timeoutMs, 'timeoutMs', 1, 300000), controller = new AbortController();
159
+ let timedOut = false, dispatched = false;
160
+ const cancel = () => controller.abort();
161
+ if (options.signal?.aborted)
162
+ cancel();
163
+ else
164
+ options.signal?.addEventListener('abort', cancel, { once: true });
165
+ const timeout = setTimeout(() => { timedOut = true; controller.abort(); }, timeoutMs);
166
+ const checkAbort = () => { if (controller.signal.aborted)
167
+ throw timedOut ? new OpenCrawlTimeoutError('The OpenCrawl request timed out.', undefined, method !== 'GET' && !options.readOnly && dispatched, key) : new OpenCrawlAbortError('The OpenCrawl request was cancelled.', method !== 'GET' && !options.readOnly && dispatched, key); };
168
+ const redact = (value) => value.split(this.#apiKey).join('[redacted]').replace(/[\x00-\x08\x0b\x0c\x0e-\x1f\x7f]/g, '').slice(0, 1024);
169
+ try {
170
+ for (let attempt = 0;; attempt++) {
171
+ checkAbort();
172
+ let response;
173
+ try {
174
+ dispatched = true;
175
+ response = await abortable(this.#fetch(url.href, { method, headers: { Authorization: `Bearer ${this.#apiKey}`, Accept: options.responseType === 'png' ? 'image/png' : 'application/json', ...(body === undefined ? {} : { 'Content-Type': 'application/json' }), ...(key ? { 'Idempotency-Key': key } : {}) }, body, signal: controller.signal, redirect: 'error', credentials: 'omit', cache: 'no-store' }), controller.signal, discard);
176
+ }
177
+ catch {
178
+ checkAbort();
179
+ if (safe && attempt < this.#maxRetries) {
180
+ await delay(Math.min(250 * 2 ** attempt, 2000), controller.signal);
181
+ continue;
182
+ }
183
+ throw new OpenCrawlConnectionError('OpenCrawl could not be reached. Recover a mutation with its original idempotency key; do not create a new request blindly.', method !== 'GET' && !options.readOnly && dispatched, key);
184
+ }
185
+ checkAbort();
186
+ if (response.redirected || (response.url && new URL(response.url).origin !== this.baseUrl) || response.status >= 300 && response.status < 400) {
187
+ discard(response);
188
+ throw new OpenCrawlProtocolError('OpenCrawl redirects are not followed. Confirm the configured server origin.');
189
+ }
190
+ const wait = retryAfter(response.headers.get('Retry-After'));
191
+ if (!response.ok && safe && RETRYABLE.has(response.status) && attempt < this.#maxRetries && (wait === undefined || wait <= 10000)) {
192
+ discard(response);
193
+ await delay(wait ?? Math.min(250 * 2 ** attempt, 2000), controller.signal);
194
+ continue;
195
+ }
196
+ let data;
197
+ try {
198
+ data = await abortable(options.responseType === 'png' && response.ok ? readPng(response, controller.signal) : readJson(response, controller.signal), controller.signal);
199
+ }
200
+ catch (error) {
201
+ checkAbort();
202
+ if (!response.ok && error instanceof OpenCrawlProtocolError)
203
+ throw new OpenCrawlAPIError(`OpenCrawl request failed (${response.status}).`, response.status);
204
+ throw error;
205
+ }
206
+ checkAbort();
207
+ if (!response.ok) {
208
+ const object = record(data), detail = record(object.detail);
209
+ const message = scalar(object.detail, 2048) ?? scalar(detail.message, 2048) ?? `OpenCrawl request failed (${response.status}).`;
210
+ throw new OpenCrawlAPIError(redact(message), response.status, redact(scalar(object.code) ?? scalar(detail.code) ?? '') || undefined, redact(scalar(response.headers.get('X-Request-ID')) ?? '') || undefined, wait);
211
+ }
212
+ if (response.status !== 204 && data === undefined)
213
+ throw new OpenCrawlProtocolError('OpenCrawl returned an empty response.');
214
+ return data;
215
+ }
216
+ }
217
+ catch (error) {
218
+ checkAbort();
219
+ throw error;
220
+ }
221
+ finally {
222
+ clearTimeout(timeout);
223
+ options.signal?.removeEventListener('abort', cancel);
224
+ }
225
+ }
226
+ }
227
+ //# sourceMappingURL=transport.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"transport.js","sourceRoot":"","sources":["../src/transport.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,399 @@
1
+ export type CursorPage<T> = {
2
+ items: T[];
3
+ next_cursor: string | null;
4
+ };
5
+ export type PageOptions = {
6
+ limit?: number;
7
+ cursor?: string;
8
+ };
9
+ export type CollectionInput = {
10
+ name: string;
11
+ brief?: string;
12
+ seed_urls: string[];
13
+ allowed_origins?: string[];
14
+ sitemap_urls?: string[];
15
+ page_limit?: number;
16
+ schedule_minutes?: number;
17
+ include_media?: boolean;
18
+ };
19
+ export type ResearchJobStatus = 'queued' | 'running' | 'completed' | 'partial' | 'failed' | 'cancelled';
20
+ export type ResearchJob = {
21
+ id: string;
22
+ collection_id: string;
23
+ status: ResearchJobStatus;
24
+ phase: 'discovery' | 'fetching' | 'finished';
25
+ created_at: string;
26
+ started_at: string | null;
27
+ finished_at: string | null;
28
+ progress: {
29
+ discovered: number;
30
+ fetched: number;
31
+ indexed: number;
32
+ failed: number;
33
+ bytes: number;
34
+ };
35
+ coverage: Record<string, unknown>;
36
+ error: string | null;
37
+ };
38
+ export type Collection = {
39
+ id: string;
40
+ source_id: string;
41
+ name: string;
42
+ brief: string;
43
+ status: 'active' | 'paused';
44
+ can_manage?: boolean;
45
+ seed_urls: string[];
46
+ allowed_origins: string[];
47
+ sitemap_urls: string[];
48
+ page_limit: number;
49
+ schedule_minutes: number;
50
+ include_media: boolean;
51
+ revision: number;
52
+ created_at: string;
53
+ updated_at: string;
54
+ last_checked_at: string | null;
55
+ stats: {
56
+ discovered: number;
57
+ indexed: number;
58
+ failed: number;
59
+ bytes: number;
60
+ };
61
+ latest_job?: ResearchJob | null;
62
+ };
63
+ export type CollectionReceipt = {
64
+ collection: Collection;
65
+ job: ResearchJob;
66
+ replayed: boolean;
67
+ };
68
+ export type CollectionUpdate = {
69
+ status: 'active' | 'paused';
70
+ expected_revision: number;
71
+ };
72
+ export type CollectionSettings = {
73
+ expected_revision: number;
74
+ page_limit: number;
75
+ schedule_minutes: number;
76
+ include_media: boolean;
77
+ };
78
+ export type CollectionSettingsReceipt = {
79
+ collection: Collection;
80
+ next_scheduled_at: string | null;
81
+ replayed: boolean;
82
+ };
83
+ export type RefreshInput = {
84
+ expected_revision?: number;
85
+ };
86
+ export type RefreshReceipt = {
87
+ job: ResearchJob;
88
+ replayed: boolean;
89
+ };
90
+ export type ResearchSearchInput = {
91
+ query: string;
92
+ collection_ids?: string[];
93
+ freshness?: 'indexed' | 'refresh';
94
+ max_age_seconds?: number;
95
+ limit?: number;
96
+ budget?: number;
97
+ };
98
+ export type SourceDates = {
99
+ source_created_at?: string | null;
100
+ source_updated_at?: string | null;
101
+ indexed_at?: string | null;
102
+ freshness?: Record<string, unknown>;
103
+ };
104
+ export type SearchResult = SourceDates & {
105
+ research_observation?: {
106
+ observed_at: string | null;
107
+ checked_at: string | null;
108
+ state: string;
109
+ gap: boolean | number;
110
+ collection_id: string;
111
+ version_id: string | null;
112
+ };
113
+ document_id: string;
114
+ source_id: string | null;
115
+ title: string;
116
+ kind?: string;
117
+ text?: string;
118
+ content?: string;
119
+ snippet?: string;
120
+ url?: string;
121
+ score: number;
122
+ metadata: Record<string, unknown>;
123
+ location?: Record<string, unknown>;
124
+ citation?: string;
125
+ };
126
+ export type ResearchSearchResponse = {
127
+ query: string;
128
+ results: SearchResult[];
129
+ context: string;
130
+ latency_ms: number;
131
+ total: number;
132
+ evidence?: Record<string, unknown>;
133
+ freshness: {
134
+ checked_at: string | null;
135
+ oldest_checked_at: string | null;
136
+ refresh_jobs: ResearchJob[];
137
+ status: 'indexed' | 'refreshing' | 'empty';
138
+ };
139
+ };
140
+ export type ObservationExcerpt = {
141
+ version_id: string;
142
+ title: string;
143
+ url: string;
144
+ excerpt: string;
145
+ excerpt_truncated?: boolean;
146
+ full_length?: number;
147
+ };
148
+ export type ResearchEvent = {
149
+ id: string;
150
+ collection_id: string;
151
+ url: string;
152
+ kind: 'baseline' | 'changed' | 'unavailable' | 'recovered';
153
+ observed_at: string;
154
+ previous_observed_at: string | null;
155
+ before: ObservationExcerpt | null;
156
+ after: ObservationExcerpt | null;
157
+ change_summary: ChangeSummary;
158
+ gap: boolean;
159
+ };
160
+ /** Line hunks and substance exist on changes observed after classification shipped; older observations omit them. */
161
+ export type ChangeHunk = {
162
+ removed: string[];
163
+ added: string[];
164
+ volatile: boolean;
165
+ };
166
+ export type ChangeSummary = {
167
+ added: string[];
168
+ removed: string[];
169
+ truncated: boolean;
170
+ comparison?: 'contiguous_region' | 'baseline';
171
+ changes?: ChangeHunk[];
172
+ changes_truncated?: boolean;
173
+ substance?: 'content' | 'volatile_only';
174
+ /** Generated by OpenCrawl for some content changes; the changed lines remain the evidence. */
175
+ headline?: string;
176
+ relevance?: 'high' | 'medium' | 'low';
177
+ relevance_reason?: string;
178
+ note?: 'generated';
179
+ };
180
+ /** Exact codepoint window into an immutable retained version; hashes describe the full observation. */
181
+ export type ResearchEventWindow = {
182
+ version_id: string;
183
+ version_sha256: string;
184
+ body_sha256: string;
185
+ title: string;
186
+ url: string;
187
+ final_url: string | null;
188
+ extraction_version: string | null;
189
+ version_observed_at: string;
190
+ text: string;
191
+ start_char: number;
192
+ end_char: number;
193
+ full_length: number;
194
+ next_start_char: number | null;
195
+ omitted_before: boolean;
196
+ omitted_after: boolean;
197
+ window_origin: 'changed_region' | 'page_start' | 'explicit_offset';
198
+ changed_start_char: number | null;
199
+ changed_end_char: number | null;
200
+ };
201
+ /** Observed source evidence, not a generated answer or a verified business signal. */
202
+ export type ResearchEventDetail = {
203
+ id: string;
204
+ collection_id: string;
205
+ url: string;
206
+ kind: ResearchEvent['kind'];
207
+ observed_at: string;
208
+ previous_observed_at: string | null;
209
+ gap: boolean;
210
+ comparison: 'contiguous_region' | 'equal_body' | 'single_observation' | 'no_observation';
211
+ budget: number;
212
+ text_bytes: number;
213
+ before: ResearchEventWindow | null;
214
+ after: ResearchEventWindow | null;
215
+ };
216
+ export type ContextInput = {
217
+ query: string;
218
+ source_ids?: string[];
219
+ limit?: number;
220
+ budget?: number;
221
+ };
222
+ export type Citation = SourceDates & {
223
+ citation: string;
224
+ document_id: string;
225
+ title?: string;
226
+ source_id?: string | null;
227
+ url?: string;
228
+ context_span?: {
229
+ start_char: number;
230
+ end_char: number;
231
+ };
232
+ [field: string]: unknown;
233
+ };
234
+ export type ContextResponse = {
235
+ query: string;
236
+ context: string;
237
+ citations: Citation[];
238
+ latency_ms: number;
239
+ context_bytes?: number;
240
+ budget_unit?: 'utf8_bytes';
241
+ coverage?: Record<string, unknown>;
242
+ };
243
+ export type WebhookEventType = 'changed' | 'recovered' | 'baseline' | 'unavailable';
244
+ export type Webhook = {
245
+ id: string;
246
+ collection_id: string;
247
+ endpoint_origin: string;
248
+ event_types: WebhookEventType[];
249
+ status: 'active' | 'paused' | 'revoked';
250
+ revision: number;
251
+ created_at: string;
252
+ updated_at: string;
253
+ last_issue: string | null;
254
+ };
255
+ export type WebhookInput = {
256
+ endpoint: string;
257
+ event_types?: WebhookEventType[];
258
+ expected_collection_revision: number;
259
+ };
260
+ export type WebhookUpdate = {
261
+ expected_revision: number;
262
+ status: 'active' | 'paused';
263
+ };
264
+ export type WebhookRevision = {
265
+ expected_revision: number;
266
+ };
267
+ export type WebhookSecretReceipt = {
268
+ webhook: Webhook;
269
+ secret: string | null;
270
+ replayed: boolean;
271
+ };
272
+ export type WebhookDelivery = {
273
+ id: string;
274
+ event_id: string;
275
+ webhook_revision: number;
276
+ collection_revision: number;
277
+ kind: 'research.changed' | 'research.recovered' | 'research.baseline' | 'research.unavailable' | 'webhook.test';
278
+ state: 'queued' | 'delivering' | 'retry_wait' | 'delivered' | 'failed' | 'unknown' | 'cancelled';
279
+ attempts: number;
280
+ replay_count: number;
281
+ created_at: string;
282
+ updated_at: string;
283
+ next_attempt_at: string | null;
284
+ last_http_status: number | null;
285
+ last_issue: string | null;
286
+ may_have_been_delivered: boolean;
287
+ };
288
+ export type WebhookDeliveryReceipt = {
289
+ delivery: WebhookDelivery;
290
+ replayed: boolean;
291
+ };
292
+ export type WebhookReplay = {
293
+ expected_revision: number;
294
+ expected_replay_count: number;
295
+ };
296
+ export type OffsetPage<T> = {
297
+ items: T[];
298
+ total: number;
299
+ limit: number;
300
+ offset: number;
301
+ has_more: boolean;
302
+ };
303
+ export type ResearchPlanInput = {
304
+ brief: string;
305
+ name?: string;
306
+ seed_urls?: string[];
307
+ };
308
+ export type ProposedResearchSource = {
309
+ url: string;
310
+ reason: string;
311
+ provenance: 'user_supplied' | 'model_suggested';
312
+ availability: 'not_checked';
313
+ };
314
+ export type ResearchPlanReceipt = {
315
+ id: string;
316
+ state: 'generating' | 'ready' | 'failed' | 'unknown' | 'expired';
317
+ created_at: string;
318
+ expires_at: string;
319
+ proposal: {
320
+ name: string;
321
+ objective: string;
322
+ questions: string[];
323
+ sources: ProposedResearchSource[];
324
+ clarifications: string[];
325
+ } | null;
326
+ usage: {
327
+ input_tokens: number;
328
+ output_tokens: number;
329
+ } | null;
330
+ error: {
331
+ code: string;
332
+ message: string;
333
+ } | null;
334
+ replayed: boolean;
335
+ };
336
+ export type ResearchPlannerStatus = {
337
+ available: boolean;
338
+ provider: 'bedrock' | null;
339
+ limits: {
340
+ brief_chars: number;
341
+ seed_urls: number;
342
+ proposal_sources: number;
343
+ workspace_daily_requests: number;
344
+ proposal_retention_days: number;
345
+ };
346
+ };
347
+ export type ServiceTenantCredential = {
348
+ id: string;
349
+ prefix: string;
350
+ created_at: string;
351
+ expires_at: string | null;
352
+ last_used_at: string | null;
353
+ };
354
+ export type ServiceTenant = {
355
+ id: string;
356
+ external_customer_id: string;
357
+ name: string;
358
+ workspace_id: string;
359
+ machine_user_id: string;
360
+ status: 'active' | 'revoked';
361
+ access_state: 'active' | 'suspended' | 'revoked';
362
+ revision: number;
363
+ provisioning_key_id: string;
364
+ credential: ServiceTenantCredential | null;
365
+ created_at: string;
366
+ updated_at: string;
367
+ revoked_at: string | null;
368
+ };
369
+ export type ServiceTenantInput = {
370
+ external_customer_id: string;
371
+ name: string;
372
+ };
373
+ export type ServiceTenantRevision = {
374
+ expected_revision: number;
375
+ };
376
+ export type ServiceTenantOperation = 'create' | `rotate:${string}` | `revoke:${string}`;
377
+ export type ServiceTenantReceipt = {
378
+ tenant: ServiceTenant;
379
+ receipt: {
380
+ id: string;
381
+ operation: ServiceTenantOperation;
382
+ tenant_id: string;
383
+ target_revision: number;
384
+ created_at: string;
385
+ };
386
+ key: string | null;
387
+ secret_available: boolean;
388
+ replayed: boolean;
389
+ };
390
+ export type ServiceTenantPage = {
391
+ items: ServiceTenant[];
392
+ next_offset: number | null;
393
+ };
394
+ export type ServiceTenantListOptions = {
395
+ limit?: number;
396
+ offset?: number;
397
+ external_customer_id?: string;
398
+ };
399
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}