@felan-ai/ext-web-access 0.4.1 → 0.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.
Files changed (58) hide show
  1. package/NOTICE +0 -8
  2. package/README.md +126 -62
  3. package/dist/boundary.d.ts +1 -3
  4. package/dist/boundary.d.ts.map +1 -1
  5. package/dist/boundary.js +1 -19
  6. package/dist/boundary.js.map +1 -1
  7. package/dist/config.d.ts +4 -9
  8. package/dist/config.d.ts.map +1 -1
  9. package/dist/config.js +82 -36
  10. package/dist/config.js.map +1 -1
  11. package/dist/content-find.d.ts +19 -10
  12. package/dist/content-find.d.ts.map +1 -1
  13. package/dist/content-find.js +104 -70
  14. package/dist/content-find.js.map +1 -1
  15. package/dist/credentials.d.ts.map +1 -1
  16. package/dist/credentials.js +12 -6
  17. package/dist/credentials.js.map +1 -1
  18. package/dist/extract.d.ts +7 -7
  19. package/dist/extract.d.ts.map +1 -1
  20. package/dist/extract.js +237 -84
  21. package/dist/extract.js.map +1 -1
  22. package/dist/http.d.ts +3 -3
  23. package/dist/http.d.ts.map +1 -1
  24. package/dist/http.js +19 -5
  25. package/dist/http.js.map +1 -1
  26. package/dist/index.d.ts.map +1 -1
  27. package/dist/index.js +444 -460
  28. package/dist/index.js.map +1 -1
  29. package/dist/pdf-service.d.ts +22 -0
  30. package/dist/pdf-service.d.ts.map +1 -0
  31. package/dist/pdf-service.js +61 -0
  32. package/dist/pdf-service.js.map +1 -0
  33. package/dist/providers.d.ts.map +1 -1
  34. package/dist/providers.js +191 -171
  35. package/dist/providers.js.map +1 -1
  36. package/dist/ssrf.d.ts +1 -0
  37. package/dist/ssrf.d.ts.map +1 -1
  38. package/dist/ssrf.js +36 -6
  39. package/dist/ssrf.js.map +1 -1
  40. package/dist/types.d.ts +6 -76
  41. package/dist/types.d.ts.map +1 -1
  42. package/dist/url.d.ts +2 -0
  43. package/dist/url.d.ts.map +1 -0
  44. package/dist/url.js +15 -0
  45. package/dist/url.js.map +1 -0
  46. package/package.json +7 -8
  47. package/dist/github.d.ts +0 -13
  48. package/dist/github.d.ts.map +0 -1
  49. package/dist/github.js +0 -166
  50. package/dist/github.js.map +0 -1
  51. package/dist/source-check.d.ts +0 -21
  52. package/dist/source-check.d.ts.map +0 -1
  53. package/dist/source-check.js +0 -136
  54. package/dist/source-check.js.map +0 -1
  55. package/dist/storage.d.ts +0 -19
  56. package/dist/storage.d.ts.map +0 -1
  57. package/dist/storage.js +0 -458
  58. package/dist/storage.js.map +0 -1
package/dist/storage.js DELETED
@@ -1,458 +0,0 @@
1
- import { join } from 'node:path';
2
- import { PROVIDER_NAMES } from './types.js';
3
- const CACHE_TTL_MS = 60 * 60 * 1_000;
4
- const CACHE_DIRECTORY = 'web-access-results';
5
- const CACHE_REFERENCE_VERSION = 1;
6
- const CACHE_ID_PATTERN = /^[A-Za-z0-9_-]{1,128}$/u;
7
- const CACHE_KEY_PATTERN = /^[A-Za-z0-9_-]{1,128}\.json$/u;
8
- const MAX_ITEM_BYTES = 32 * 1024 * 1024;
9
- const MAX_TOTAL_BYTES = 64 * 1024 * 1024;
10
- const MAX_ENTRIES = 128;
11
- const MAX_LEGACY_INLINE_BYTES = 256 * 1024;
12
- const SESSION_ENTRY_TYPE = 'felan-web-access-result';
13
- const encoder = new TextEncoder();
14
- const decoder = new TextDecoder();
15
- const providerNames = new Set(PROVIDER_NAMES);
16
- const DEFAULT_LIMITS = {
17
- maxEntries: MAX_ENTRIES,
18
- maxItemBytes: MAX_ITEM_BYTES,
19
- maxTotalBytes: MAX_TOTAL_BYTES,
20
- maxLegacyInlineBytes: MAX_LEGACY_INLINE_BYTES,
21
- };
22
- export class ResultStore {
23
- appendEntry;
24
- #entries = new Map();
25
- #storage;
26
- #directory;
27
- #limits;
28
- #control = Promise.resolve();
29
- #totalBytes = 0;
30
- constructor(runtime, appendEntry, limits = {}) {
31
- this.appendEntry = appendEntry;
32
- this.#storage = runtime.storage('session');
33
- this.#directory = join(this.#storage.root, CACHE_DIRECTORY);
34
- this.#limits = validateLimits({ ...DEFAULT_LIMITS, ...limits });
35
- }
36
- async restore(ctx) {
37
- await this.#run(async () => {
38
- this.#clearMemory();
39
- const now = Date.now();
40
- const cached = await this.#pruneCache(now);
41
- const restored = [];
42
- const seen = new Set();
43
- for (const entry of [...ctx.sessionManager.getBranch()].reverse()) {
44
- if (entry.type !== 'custom' || entry.customType !== SESSION_ENTRY_TYPE)
45
- continue;
46
- const reference = parseStoredResultReference(entry.data);
47
- if (reference) {
48
- if (seen.has(reference.id) || !isCurrent(reference.timestamp, now))
49
- continue;
50
- const cacheEntry = cached.get(reference.key);
51
- if (!cacheEntry
52
- || cacheEntry.value.id !== reference.id
53
- || cacheEntry.value.type !== reference.type
54
- || cacheEntry.value.timestamp !== reference.timestamp
55
- || cacheEntry.bytes !== reference.bytes)
56
- continue;
57
- seen.add(reference.id);
58
- restored.push({ ...cacheEntry, key: reference.key });
59
- continue;
60
- }
61
- if (!isStoredResult(entry.data) || seen.has(entry.data.id) || !isCurrent(entry.data.timestamp, now))
62
- continue;
63
- const bytes = serializedBytes(entry.data);
64
- if (bytes > this.#limits.maxLegacyInlineBytes || bytes > this.#limits.maxItemBytes)
65
- continue;
66
- seen.add(entry.data.id);
67
- restored.push({ value: entry.data, bytes });
68
- }
69
- restored.sort(compareStoredEntries);
70
- for (const entry of restored)
71
- this.#addMemoryEntry(entry);
72
- await this.#enforceMemoryLimits();
73
- });
74
- }
75
- async put(value) {
76
- await this.#run(async () => {
77
- const now = Date.now();
78
- if (!isStoredResult(value) || !isCurrent(value.timestamp, now)) {
79
- throw new Error('Stored web result is invalid');
80
- }
81
- const bytes = serialize(value);
82
- if (bytes.byteLength > this.#limits.maxItemBytes) {
83
- throw new Error('Stored web result exceeds the per-result storage limit');
84
- }
85
- const key = cacheKeyForId(value.id);
86
- const path = this.#cachePath(key);
87
- await this.#storage.mkdir(this.#directory, { recursive: true });
88
- await this.#storage.writeFile(path, bytes);
89
- let appended = false;
90
- try {
91
- const cached = await this.#pruneCache(now);
92
- this.#reconcileMemory(cached);
93
- const written = cached.get(key);
94
- if (!written || written.bytes !== bytes.byteLength) {
95
- throw new Error('Stored web result could not be retained within cache limits');
96
- }
97
- this.#removeMemoryEntry(value.id);
98
- this.#addMemoryEntry({ value, bytes: bytes.byteLength, key });
99
- await this.#enforceMemoryLimits();
100
- if (!this.#entries.has(value.id)) {
101
- throw new Error('Stored web result could not be retained within cache limits');
102
- }
103
- const reference = {
104
- version: CACHE_REFERENCE_VERSION,
105
- id: value.id,
106
- type: value.type,
107
- timestamp: value.timestamp,
108
- key,
109
- bytes: bytes.byteLength,
110
- };
111
- this.appendEntry(SESSION_ENTRY_TYPE, reference);
112
- appended = true;
113
- }
114
- finally {
115
- if (!appended) {
116
- this.#removeMemoryEntry(value.id);
117
- await removeIfPresent(this.#storage, path);
118
- }
119
- }
120
- });
121
- }
122
- async get(id) {
123
- return this.#run(async () => {
124
- if (!CACHE_ID_PATTERN.test(id))
125
- return undefined;
126
- await this.#pruneExpiredMemory(Date.now());
127
- return this.#entries.get(id)?.value;
128
- });
129
- }
130
- async clear() {
131
- await this.#run(async () => this.#clearMemory());
132
- }
133
- async #pruneCache(now) {
134
- const cached = new Map();
135
- const candidates = [];
136
- let keys;
137
- try {
138
- keys = await this.#storage.listFiles(this.#directory);
139
- }
140
- catch (error) {
141
- if (isNotFoundError(error))
142
- return cached;
143
- throw error;
144
- }
145
- for (const key of keys) {
146
- if (!CACHE_KEY_PATTERN.test(key))
147
- continue;
148
- const path = this.#cachePath(key);
149
- let bytes;
150
- try {
151
- bytes = await this.#storage.readFile(path);
152
- }
153
- catch (error) {
154
- if (isNotFoundError(error))
155
- continue;
156
- throw error;
157
- }
158
- if (bytes.byteLength > this.#limits.maxItemBytes) {
159
- await removeIfPresent(this.#storage, path);
160
- continue;
161
- }
162
- const value = parseStoredResult(bytes);
163
- if (!value || cacheKeyForId(value.id) !== key || !isCurrent(value.timestamp, now)) {
164
- await removeIfPresent(this.#storage, path);
165
- continue;
166
- }
167
- candidates.push({
168
- id: value.id,
169
- type: value.type,
170
- timestamp: value.timestamp,
171
- key,
172
- bytes: bytes.byteLength,
173
- });
174
- }
175
- candidates.sort(compareCacheCandidates);
176
- let firstRetained = 0;
177
- let retainedBytes = candidates.reduce((total, candidate) => total + candidate.bytes, 0);
178
- while (candidates.length - firstRetained > this.#limits.maxEntries
179
- || retainedBytes > this.#limits.maxTotalBytes) {
180
- const evicted = candidates[firstRetained++];
181
- if (!evicted)
182
- break;
183
- retainedBytes -= evicted.bytes;
184
- await removeIfPresent(this.#storage, this.#cachePath(evicted.key));
185
- }
186
- for (const candidate of candidates.slice(firstRetained)) {
187
- const path = this.#cachePath(candidate.key);
188
- let bytes;
189
- try {
190
- bytes = await this.#storage.readFile(path);
191
- }
192
- catch (error) {
193
- if (isNotFoundError(error))
194
- continue;
195
- throw error;
196
- }
197
- const value = bytes.byteLength === candidate.bytes ? parseStoredResult(bytes) : undefined;
198
- if (!value || !matchesCandidate(value, candidate)) {
199
- await removeIfPresent(this.#storage, path);
200
- continue;
201
- }
202
- cached.set(candidate.key, { value, bytes: candidate.bytes, key: candidate.key });
203
- }
204
- return cached;
205
- }
206
- async #enforceMemoryLimits() {
207
- const ordered = [...this.#entries.entries()].sort((left, right) => compareStoredEntries(left[1], right[1]));
208
- while (this.#entries.size > this.#limits.maxEntries || this.#totalBytes > this.#limits.maxTotalBytes) {
209
- const evicted = ordered.shift();
210
- if (!evicted)
211
- break;
212
- this.#removeMemoryEntry(evicted[0]);
213
- if (evicted[1].key)
214
- await removeIfPresent(this.#storage, this.#cachePath(evicted[1].key));
215
- }
216
- }
217
- async #pruneExpiredMemory(now) {
218
- for (const [id, entry] of this.#entries) {
219
- if (isCurrent(entry.value.timestamp, now))
220
- continue;
221
- this.#removeMemoryEntry(id);
222
- if (entry.key)
223
- await removeIfPresent(this.#storage, this.#cachePath(entry.key));
224
- }
225
- }
226
- #reconcileMemory(cached) {
227
- for (const [id, entry] of this.#entries) {
228
- if (entry.key && !cached.has(entry.key))
229
- this.#removeMemoryEntry(id);
230
- }
231
- }
232
- #cachePath(key) {
233
- if (!CACHE_KEY_PATTERN.test(key))
234
- throw new Error(`Invalid stored web result cache key: ${key}`);
235
- return join(this.#directory, key);
236
- }
237
- #addMemoryEntry(entry) {
238
- this.#entries.set(entry.value.id, entry);
239
- this.#totalBytes += entry.bytes;
240
- }
241
- #removeMemoryEntry(id) {
242
- const entry = this.#entries.get(id);
243
- if (!entry)
244
- return;
245
- this.#entries.delete(id);
246
- this.#totalBytes -= entry.bytes;
247
- }
248
- #clearMemory() {
249
- this.#entries.clear();
250
- this.#totalBytes = 0;
251
- }
252
- async #run(operation) {
253
- const previous = this.#control;
254
- let release;
255
- this.#control = new Promise((resolve) => {
256
- release = resolve;
257
- });
258
- await previous;
259
- try {
260
- return await operation();
261
- }
262
- finally {
263
- release();
264
- }
265
- }
266
- }
267
- export function generateResponseId() {
268
- return `${Date.now().toString(36)}${Math.random().toString(36).slice(2, 9)}`;
269
- }
270
- function cacheKeyForId(id) {
271
- if (!CACHE_ID_PATTERN.test(id))
272
- throw new Error(`Invalid stored web result id: ${id}`);
273
- return `${id}.json`;
274
- }
275
- function parseStoredResultReference(value) {
276
- if (!isRecord(value)
277
- || value.version !== CACHE_REFERENCE_VERSION
278
- || typeof value.id !== 'string'
279
- || !CACHE_ID_PATTERN.test(value.id)
280
- || (value.type !== 'search' && value.type !== 'fetch' && value.type !== 'research')
281
- || !isFiniteTimestamp(value.timestamp)
282
- || typeof value.key !== 'string'
283
- || !CACHE_KEY_PATTERN.test(value.key)
284
- || value.key !== `${value.id}.json`
285
- || typeof value.bytes !== 'number'
286
- || !Number.isSafeInteger(value.bytes)
287
- || value.bytes <= 0
288
- || value.bytes > MAX_ITEM_BYTES)
289
- return undefined;
290
- return value;
291
- }
292
- function parseStoredResult(bytes) {
293
- try {
294
- const value = JSON.parse(decoder.decode(bytes));
295
- return isStoredResult(value) ? value : undefined;
296
- }
297
- catch {
298
- return undefined;
299
- }
300
- }
301
- function serialize(value) {
302
- return encoder.encode(JSON.stringify(value));
303
- }
304
- function serializedBytes(value) {
305
- return serialize(value).byteLength;
306
- }
307
- function compareStoredEntries(left, right) {
308
- return left.value.timestamp - right.value.timestamp || left.value.id.localeCompare(right.value.id);
309
- }
310
- function compareCacheCandidates(left, right) {
311
- return left.timestamp - right.timestamp || left.id.localeCompare(right.id);
312
- }
313
- function matchesCandidate(value, candidate) {
314
- return value.id === candidate.id
315
- && value.type === candidate.type
316
- && value.timestamp === candidate.timestamp;
317
- }
318
- function isCurrent(timestamp, now) {
319
- return timestamp <= now && now - timestamp < CACHE_TTL_MS;
320
- }
321
- function validateLimits(limits) {
322
- if (!Number.isSafeInteger(limits.maxEntries) || limits.maxEntries <= 0
323
- || !Number.isSafeInteger(limits.maxItemBytes) || limits.maxItemBytes <= 0
324
- || !Number.isSafeInteger(limits.maxTotalBytes) || limits.maxTotalBytes <= 0
325
- || limits.maxItemBytes > limits.maxTotalBytes
326
- || !Number.isSafeInteger(limits.maxLegacyInlineBytes) || limits.maxLegacyInlineBytes <= 0) {
327
- throw new Error('Stored web result limits must be positive integers');
328
- }
329
- return limits;
330
- }
331
- async function removeIfPresent(storage, path) {
332
- try {
333
- await storage.remove(path);
334
- }
335
- catch (error) {
336
- if (!isNotFoundError(error))
337
- throw error;
338
- }
339
- }
340
- function isNotFoundError(error) {
341
- return error instanceof Error && (('code' in error && error.code === 'ENOENT')
342
- || /(?:not found|does not exist|no such file)/iu.test(error.message));
343
- }
344
- function isStoredResult(value) {
345
- if (!isRecord(value)
346
- || typeof value.id !== 'string'
347
- || !CACHE_ID_PATTERN.test(value.id)
348
- || !isFiniteTimestamp(value.timestamp)
349
- || (value.answer !== undefined && typeof value.answer !== 'string'))
350
- return false;
351
- if (value.type === 'search')
352
- return Array.isArray(value.queries) && value.queries.every(isSearchQueryRecord);
353
- if (value.type === 'fetch')
354
- return Array.isArray(value.urls) && value.urls.every(isExtractedContent);
355
- if (value.type === 'research') {
356
- return Array.isArray(value.queries)
357
- && value.queries.every(isSearchQueryRecord)
358
- && Array.isArray(value.urls)
359
- && value.urls.every(isExtractedContent)
360
- && isResearchArtifact(value.artifact);
361
- }
362
- return false;
363
- }
364
- function isSearchQueryRecord(value) {
365
- return isRecord(value)
366
- && typeof value.query === 'string'
367
- && Array.isArray(value.responses)
368
- && value.responses.every(isSearchResponse)
369
- && Array.isArray(value.fetched)
370
- && value.fetched.every(isExtractedContent)
371
- && Array.isArray(value.errors)
372
- && value.errors.every((error) => isRecord(error) && providerNames.has(String(error.provider)) && typeof error.error === 'string');
373
- }
374
- function isSearchResponse(value) {
375
- return isRecord(value)
376
- && providerNames.has(String(value.provider))
377
- && typeof value.answer === 'string'
378
- && Array.isArray(value.results)
379
- && value.results.every((result) => isRecord(result)
380
- && typeof result.title === 'string'
381
- && typeof result.url === 'string'
382
- && typeof result.snippet === 'string')
383
- && (value.inlineContent === undefined
384
- || (Array.isArray(value.inlineContent) && value.inlineContent.every(isExtractedContent)));
385
- }
386
- function isExtractedContent(value) {
387
- return isRecord(value)
388
- && typeof value.url === 'string'
389
- && typeof value.title === 'string'
390
- && typeof value.content === 'string'
391
- && (value.error === null || typeof value.error === 'string')
392
- && (value.contentType === undefined || typeof value.contentType === 'string')
393
- && (value.truncated === undefined || typeof value.truncated === 'boolean')
394
- && (value.image === undefined || (isRecord(value.image)
395
- && typeof value.image.data === 'string'
396
- && typeof value.image.mimeType === 'string'));
397
- }
398
- function isResearchArtifact(value) {
399
- return isRecord(value)
400
- && typeof value.id === 'string'
401
- && value.type === 'research'
402
- && isFiniteTimestamp(value.timestamp)
403
- && typeof value.claim === 'string'
404
- && typeof value.provider === 'string'
405
- && (value.status === 'supported' || value.status === 'contradicted' || value.status === 'unclear' || value.status === 'missing-evidence')
406
- && typeof value.confidence === 'number'
407
- && Number.isFinite(value.confidence)
408
- && typeof value.rationale === 'string'
409
- && Array.isArray(value.summaries)
410
- && value.summaries.every((summary) => isRecord(summary) && providerNames.has(String(summary.provider)) && typeof summary.text === 'string')
411
- && Array.isArray(value.sources)
412
- && value.sources.every(isResearchSource)
413
- && Array.isArray(value.passages)
414
- && value.passages.every(isResearchPassage)
415
- && isStringArray(value.supportingPassages)
416
- && isStringArray(value.contradictingPassages)
417
- && isRecord(value.filters)
418
- && (value.filters.recency === undefined || value.filters.recency === 'day' || value.filters.recency === 'week' || value.filters.recency === 'month' || value.filters.recency === 'year')
419
- && isStringArray(value.filters.domainInclude)
420
- && isStringArray(value.filters.domainExclude)
421
- && Array.isArray(value.errors)
422
- && value.errors.every((error) => isRecord(error) && typeof error.query === 'string' && typeof error.error === 'string');
423
- }
424
- function isResearchSource(value) {
425
- return isRecord(value)
426
- && isFiniteNumber(value.rank)
427
- && typeof value.url === 'string'
428
- && typeof value.title === 'string'
429
- && typeof value.snippet === 'string'
430
- && typeof value.quality === 'string'
431
- && typeof value.fetched === 'boolean'
432
- && (value.fetchError === undefined || typeof value.fetchError === 'string')
433
- && (value.contentHash === undefined || typeof value.contentHash === 'string');
434
- }
435
- function isResearchPassage(value) {
436
- return isRecord(value)
437
- && typeof value.passageId === 'string'
438
- && typeof value.sourceUrl === 'string'
439
- && isFiniteNumber(value.sourceRank)
440
- && typeof value.text === 'string'
441
- && typeof value.contentHash === 'string'
442
- && (value.extractionSpan === undefined || (isRecord(value.extractionSpan)
443
- && isFiniteNumber(value.extractionSpan.start)
444
- && isFiniteNumber(value.extractionSpan.end)));
445
- }
446
- function isRecord(value) {
447
- return Boolean(value) && typeof value === 'object' && !Array.isArray(value);
448
- }
449
- function isFiniteTimestamp(value) {
450
- return typeof value === 'number' && Number.isFinite(value) && value >= 0;
451
- }
452
- function isFiniteNumber(value) {
453
- return typeof value === 'number' && Number.isFinite(value);
454
- }
455
- function isStringArray(value) {
456
- return Array.isArray(value) && value.every((item) => typeof item === 'string');
457
- }
458
- //# sourceMappingURL=storage.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"storage.js","sourceRoot":"","sources":["../src/storage.ts"],"names":[],"mappings":"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"}