infobroker 2026.8.23

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 (112) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +529 -0
  3. package/bin/infobroker.js +5 -0
  4. package/dist/chain.d.ts +14 -0
  5. package/dist/chain.js +63 -0
  6. package/dist/chain.js.map +1 -0
  7. package/dist/config.d.ts +9 -0
  8. package/dist/config.js +271 -0
  9. package/dist/config.js.map +1 -0
  10. package/dist/corroborate.d.ts +25 -0
  11. package/dist/corroborate.js +421 -0
  12. package/dist/corroborate.js.map +1 -0
  13. package/dist/http.d.ts +5 -0
  14. package/dist/http.js +25 -0
  15. package/dist/http.js.map +1 -0
  16. package/dist/index.d.ts +1 -0
  17. package/dist/index.js +909 -0
  18. package/dist/index.js.map +1 -0
  19. package/dist/kb-crypto.d.ts +43 -0
  20. package/dist/kb-crypto.js +199 -0
  21. package/dist/kb-crypto.js.map +1 -0
  22. package/dist/kb.d.ts +100 -0
  23. package/dist/kb.js +1009 -0
  24. package/dist/kb.js.map +1 -0
  25. package/dist/lib/html.d.ts +2 -0
  26. package/dist/lib/html.js +13 -0
  27. package/dist/lib/html.js.map +1 -0
  28. package/dist/lib/url-guard.d.ts +14 -0
  29. package/dist/lib/url-guard.js +75 -0
  30. package/dist/lib/url-guard.js.map +1 -0
  31. package/dist/normalizer.d.ts +2 -0
  32. package/dist/normalizer.js +53 -0
  33. package/dist/normalizer.js.map +1 -0
  34. package/dist/providers/arxiv.d.ts +2 -0
  35. package/dist/providers/arxiv.js +78 -0
  36. package/dist/providers/arxiv.js.map +1 -0
  37. package/dist/providers/brave.d.ts +2 -0
  38. package/dist/providers/brave.js +79 -0
  39. package/dist/providers/brave.js.map +1 -0
  40. package/dist/providers/core.d.ts +2 -0
  41. package/dist/providers/core.js +62 -0
  42. package/dist/providers/core.js.map +1 -0
  43. package/dist/providers/duckduckgo.d.ts +2 -0
  44. package/dist/providers/duckduckgo.js +93 -0
  45. package/dist/providers/duckduckgo.js.map +1 -0
  46. package/dist/providers/exa.d.ts +2 -0
  47. package/dist/providers/exa.js +68 -0
  48. package/dist/providers/exa.js.map +1 -0
  49. package/dist/providers/generic-http.d.ts +2 -0
  50. package/dist/providers/generic-http.js +96 -0
  51. package/dist/providers/generic-http.js.map +1 -0
  52. package/dist/providers/github.d.ts +2 -0
  53. package/dist/providers/github.js +58 -0
  54. package/dist/providers/github.js.map +1 -0
  55. package/dist/providers/index.d.ts +3 -0
  56. package/dist/providers/index.js +59 -0
  57. package/dist/providers/index.js.map +1 -0
  58. package/dist/providers/internet_archive.d.ts +2 -0
  59. package/dist/providers/internet_archive.js +59 -0
  60. package/dist/providers/internet_archive.js.map +1 -0
  61. package/dist/providers/jina.d.ts +2 -0
  62. package/dist/providers/jina.js +34 -0
  63. package/dist/providers/jina.js.map +1 -0
  64. package/dist/providers/marginalia.d.ts +2 -0
  65. package/dist/providers/marginalia.js +47 -0
  66. package/dist/providers/marginalia.js.map +1 -0
  67. package/dist/providers/mojeek.d.ts +2 -0
  68. package/dist/providers/mojeek.js +47 -0
  69. package/dist/providers/mojeek.js.map +1 -0
  70. package/dist/providers/openstreetmap.d.ts +2 -0
  71. package/dist/providers/openstreetmap.js +43 -0
  72. package/dist/providers/openstreetmap.js.map +1 -0
  73. package/dist/providers/searxng.d.ts +2 -0
  74. package/dist/providers/searxng.js +52 -0
  75. package/dist/providers/searxng.js.map +1 -0
  76. package/dist/providers/semantic_scholar.d.ts +2 -0
  77. package/dist/providers/semantic_scholar.js +54 -0
  78. package/dist/providers/semantic_scholar.js.map +1 -0
  79. package/dist/providers/stack_exchange.d.ts +2 -0
  80. package/dist/providers/stack_exchange.js +83 -0
  81. package/dist/providers/stack_exchange.js.map +1 -0
  82. package/dist/providers/tavily.d.ts +2 -0
  83. package/dist/providers/tavily.js +66 -0
  84. package/dist/providers/tavily.js.map +1 -0
  85. package/dist/providers/wiby.d.ts +2 -0
  86. package/dist/providers/wiby.js +46 -0
  87. package/dist/providers/wiby.js.map +1 -0
  88. package/dist/providers/wikidata.d.ts +2 -0
  89. package/dist/providers/wikidata.js +46 -0
  90. package/dist/providers/wikidata.js.map +1 -0
  91. package/dist/providers/wikipedia.d.ts +2 -0
  92. package/dist/providers/wikipedia.js +71 -0
  93. package/dist/providers/wikipedia.js.map +1 -0
  94. package/dist/providers/wiktionary.d.ts +2 -0
  95. package/dist/providers/wiktionary.js +48 -0
  96. package/dist/providers/wiktionary.js.map +1 -0
  97. package/dist/providers/yep.d.ts +2 -0
  98. package/dist/providers/yep.js +104 -0
  99. package/dist/providers/yep.js.map +1 -0
  100. package/dist/quota.d.ts +37 -0
  101. package/dist/quota.js +116 -0
  102. package/dist/quota.js.map +1 -0
  103. package/dist/rate-limiter.d.ts +7 -0
  104. package/dist/rate-limiter.js +37 -0
  105. package/dist/rate-limiter.js.map +1 -0
  106. package/dist/retry.d.ts +11 -0
  107. package/dist/retry.js +51 -0
  108. package/dist/retry.js.map +1 -0
  109. package/dist/types.d.ts +231 -0
  110. package/dist/types.js +2 -0
  111. package/dist/types.js.map +1 -0
  112. package/package.json +58 -0
@@ -0,0 +1,68 @@
1
+ import { normalize } from "../normalizer.js";
2
+ import { RetryableError } from "../retry.js";
3
+ import { getEnvVar } from "../config.js";
4
+ import { infobrokerFetch } from "../http.js";
5
+ const EXA_API = "https://api.exa.ai/search";
6
+ let _exaApiKey;
7
+ function exaApiKey() {
8
+ if (_exaApiKey === undefined)
9
+ _exaApiKey = getEnvVar("exa", "_API_KEY");
10
+ return _exaApiKey;
11
+ }
12
+ async function search(query) {
13
+ const apiKey = exaApiKey();
14
+ if (!apiKey)
15
+ throw new Error("INFOBROKER_EXA_API_KEY not set");
16
+ const resp = await infobrokerFetch(EXA_API, {
17
+ method: "POST",
18
+ headers: {
19
+ "Content-Type": "application/json",
20
+ "x-api-key": apiKey,
21
+ },
22
+ body: JSON.stringify({ query, numResults: 10, useAutoprompt: true }),
23
+ providerSlug: "exa",
24
+ });
25
+ if (!resp.ok)
26
+ throw new RetryableError(`Exa returned HTTP ${resp.status}`, resp.status);
27
+ const data = (await resp.json());
28
+ const raw = (data.results || []).map((item) => ({
29
+ title: item.title,
30
+ url: item.url,
31
+ snippet: item.text || "",
32
+ published_date: item.publishedDate,
33
+ source_type: "semantic",
34
+ }));
35
+ return normalize(raw, "exa");
36
+ }
37
+ async function health() {
38
+ const apiKey = exaApiKey();
39
+ if (!apiKey)
40
+ return { status: "inactive", avgLatencyMs: 0 };
41
+ const start = Date.now();
42
+ try {
43
+ const resp = await infobrokerFetch(EXA_API, {
44
+ method: "POST",
45
+ headers: {
46
+ "Content-Type": "application/json",
47
+ "x-api-key": apiKey,
48
+ },
49
+ body: JSON.stringify({ query: "test", numResults: 1 }),
50
+ providerSlug: "exa",
51
+ });
52
+ const elapsed = Date.now() - start;
53
+ if (resp.ok)
54
+ return { status: "active", avgLatencyMs: elapsed };
55
+ return { status: "degraded", avgLatencyMs: elapsed };
56
+ }
57
+ catch {
58
+ return { status: "inactive", avgLatencyMs: Date.now() - start };
59
+ }
60
+ }
61
+ export const provider = {
62
+ slug: "exa",
63
+ tier: "keyed_http",
64
+ capabilities: ["web_search"],
65
+ search,
66
+ health,
67
+ };
68
+ //# sourceMappingURL=exa.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"exa.js","sourceRoot":"","sources":["../../src/providers/exa.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ import type { Provider, ProviderConfig } from "../types.js";
2
+ export declare function createGenericProvider(slug: string, cfg: ProviderConfig): Provider;
@@ -0,0 +1,96 @@
1
+ import { normalize } from "../normalizer.js";
2
+ import { RetryableError } from "../retry.js";
3
+ import { infobrokerFetch } from "../http.js";
4
+ function getAtPath(obj, path) {
5
+ if (!path)
6
+ return obj;
7
+ let cursor = obj;
8
+ for (const segment of path.split(".")) {
9
+ if (cursor == null)
10
+ return undefined;
11
+ if (Array.isArray(cursor)) {
12
+ const idx = Number(segment);
13
+ if (!Number.isInteger(idx))
14
+ return undefined;
15
+ cursor = cursor[idx];
16
+ }
17
+ else if (typeof cursor === "object") {
18
+ cursor = cursor[segment];
19
+ }
20
+ else {
21
+ return undefined;
22
+ }
23
+ }
24
+ return cursor;
25
+ }
26
+ function pickField(raw, fieldMap, key) {
27
+ const sourceField = fieldMap[key];
28
+ if (!sourceField)
29
+ return undefined;
30
+ const val = getAtPath(raw, sourceField);
31
+ if (typeof val === "string" && val.length > 0)
32
+ return val;
33
+ if (typeof val === "number")
34
+ return String(val);
35
+ return undefined;
36
+ }
37
+ export function createGenericProvider(slug, cfg) {
38
+ const fieldMap = cfg.field_map ?? {
39
+ title: "title",
40
+ url: "url",
41
+ snippet: "snippet",
42
+ };
43
+ async function search(query, options) {
44
+ const maxResults = options?.max_results ?? 10;
45
+ const base = cfg.endpoint.replace(/[?&]$/, "");
46
+ const sep = base.includes("?") ? "&" : "?";
47
+ const url = `${base}${sep}${encodeURIComponent(cfg.query_param)}=${encodeURIComponent(query)}`;
48
+ const resp = await infobrokerFetch(url, { providerSlug: slug });
49
+ if (!resp.ok)
50
+ throw new RetryableError(`${slug} returned HTTP ${resp.status}`, resp.status);
51
+ const data = (await resp.json());
52
+ const list = getAtPath(data, cfg.results_path ?? "");
53
+ if (!Array.isArray(list)) {
54
+ throw new RetryableError(`${slug} results_path "${cfg.results_path ?? ""}" did not resolve to an array`, 200);
55
+ }
56
+ const raw = list.slice(0, maxResults).map((item) => {
57
+ if (typeof item !== "object" || item === null)
58
+ return null;
59
+ const obj = item;
60
+ const originalSource = pickField(obj, fieldMap, "original_source");
61
+ const mapped = {
62
+ title: pickField(obj, fieldMap, "title"),
63
+ url: pickField(obj, fieldMap, "url"),
64
+ snippet: pickField(obj, fieldMap, "snippet"),
65
+ published_date: pickField(obj, fieldMap, "published_date"),
66
+ source_type: pickField(obj, fieldMap, "source_type") ?? "web_search",
67
+ };
68
+ return originalSource ? { ...mapped, original_source: originalSource } : mapped;
69
+ });
70
+ const cleaned = raw.filter((r) => r !== null);
71
+ return normalize(cleaned, slug);
72
+ }
73
+ async function health() {
74
+ const start = Date.now();
75
+ try {
76
+ const base = cfg.endpoint.replace(/[?&]$/, "");
77
+ const sep = base.includes("?") ? "&" : "?";
78
+ const resp = await infobrokerFetch(`${base}${sep}${encodeURIComponent(cfg.query_param)}=test`, { providerSlug: slug });
79
+ const elapsed = Date.now() - start;
80
+ if (resp.ok)
81
+ return { status: "active", avgLatencyMs: elapsed };
82
+ return { status: "degraded", avgLatencyMs: elapsed };
83
+ }
84
+ catch {
85
+ return { status: "inactive", avgLatencyMs: Date.now() - start };
86
+ }
87
+ }
88
+ return {
89
+ slug,
90
+ tier: "generic_http",
91
+ capabilities: cfg.capabilities,
92
+ search,
93
+ health,
94
+ };
95
+ }
96
+ //# sourceMappingURL=generic-http.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"generic-http.js","sourceRoot":"","sources":["../../src/providers/generic-http.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ import type { Provider } from "../types.js";
2
+ export declare const provider: Provider;
@@ -0,0 +1,58 @@
1
+ import { normalize } from "../normalizer.js";
2
+ import { RetryableError } from "../retry.js";
3
+ import { getEnvVar } from "../config.js";
4
+ import { infobrokerFetch } from "../http.js";
5
+ const GH_API = "https://api.github.com/search/code";
6
+ let _ghToken;
7
+ function ghToken() {
8
+ if (_ghToken === undefined)
9
+ _ghToken = getEnvVar("github", "_API_KEY");
10
+ return _ghToken;
11
+ }
12
+ async function search(query) {
13
+ const token = ghToken();
14
+ const headers = {
15
+ "Accept": "application/vnd.github.v3+json",
16
+ };
17
+ if (token)
18
+ headers["Authorization"] = `Bearer ${token}`;
19
+ const params = new URLSearchParams({ q: query, per_page: "10" });
20
+ const resp = await infobrokerFetch(`${GH_API}?${params.toString()}`, {
21
+ providerSlug: "github",
22
+ headers,
23
+ });
24
+ if (!resp.ok)
25
+ throw new RetryableError(`GitHub returned HTTP ${resp.status}`, resp.status);
26
+ const data = (await resp.json());
27
+ const raw = (data.items || []).map((item) => ({
28
+ title: `${item.repository.full_name}: ${item.path}`,
29
+ url: item.html_url,
30
+ snippet: `File ${item.name} in ${item.repository.full_name}`,
31
+ source_type: "code",
32
+ }));
33
+ return normalize(raw, "github");
34
+ }
35
+ async function health() {
36
+ const start = Date.now();
37
+ try {
38
+ const resp = await infobrokerFetch(`${GH_API}?q=test&per_page=1`, {
39
+ providerSlug: "github",
40
+ headers: { "Accept": "application/vnd.github.v3+json" },
41
+ });
42
+ const elapsed = Date.now() - start;
43
+ if (resp.ok)
44
+ return { status: "active", avgLatencyMs: elapsed };
45
+ return { status: "degraded", avgLatencyMs: elapsed };
46
+ }
47
+ catch {
48
+ return { status: "inactive", avgLatencyMs: Date.now() - start };
49
+ }
50
+ }
51
+ export const provider = {
52
+ slug: "github",
53
+ tier: "free_http",
54
+ capabilities: ["code"],
55
+ search,
56
+ health,
57
+ };
58
+ //# sourceMappingURL=github.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"github.js","sourceRoot":"","sources":["../../src/providers/github.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAC7C,OAAO,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAC7C,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AACzC,OAAO,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAE7C,MAAM,MAAM,GAAG,oCAAoC,CAAC;AAEpD,IAAI,QAA4B,CAAC;AACjC,SAAS,OAAO;IACd,IAAI,QAAQ,KAAK,SAAS;QAAE,QAAQ,GAAG,SAAS,CAAC,QAAQ,EAAE,UAAU,CAAC,CAAC;IACvE,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED,KAAK,UAAU,MAAM,CAAC,KAAa;IACjC,MAAM,KAAK,GAAG,OAAO,EAAE,CAAC;IACxB,MAAM,OAAO,GAA2B;QACtC,QAAQ,EAAE,gCAAgC;KAC3C,CAAC;IACF,IAAI,KAAK;QAAE,OAAO,CAAC,eAAe,CAAC,GAAG,UAAU,KAAK,EAAE,CAAC;IAExD,MAAM,MAAM,GAAG,IAAI,eAAe,CAAC,EAAE,CAAC,EAAE,KAAK,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC;IACjE,MAAM,IAAI,GAAG,MAAM,eAAe,CAAC,GAAG,MAAM,IAAI,MAAM,CAAC,QAAQ,EAAE,EAAE,EAAE;QACnE,YAAY,EAAE,QAAQ;QACtB,OAAO;KACR,CAAC,CAAC;IAEH,IAAI,CAAC,IAAI,CAAC,EAAE;QAAE,MAAM,IAAI,cAAc,CAAC,wBAAwB,IAAI,CAAC,MAAM,EAAE,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC;IAE3F,MAAM,IAAI,GAAG,CAAC,MAAM,IAAI,CAAC,IAAI,EAAE,CAO9B,CAAC;IAEF,MAAM,GAAG,GAAG,CAAC,IAAI,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;QAC5C,KAAK,EAAE,GAAG,IAAI,CAAC,UAAU,CAAC,SAAS,KAAK,IAAI,CAAC,IAAI,EAAE;QACnD,GAAG,EAAE,IAAI,CAAC,QAAQ;QAClB,OAAO,EAAE,QAAQ,IAAI,CAAC,IAAI,OAAO,IAAI,CAAC,UAAU,CAAC,SAAS,EAAE;QAC5D,WAAW,EAAE,MAAM;KACpB,CAAC,CAAC,CAAC;IAEJ,OAAO,SAAS,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAC;AAClC,CAAC;AAED,KAAK,UAAU,MAAM;IACnB,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IACzB,IAAI,CAAC;QACH,MAAM,IAAI,GAAG,MAAM,eAAe,CAAC,GAAG,MAAM,oBAAoB,EAAE;YAChE,YAAY,EAAE,QAAQ;YACtB,OAAO,EAAE,EAAE,QAAQ,EAAE,gCAAgC,EAAE;SACxD,CAAC,CAAC;QACH,MAAM,OAAO,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,KAAK,CAAC;QACnC,IAAI,IAAI,CAAC,EAAE;YAAE,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,YAAY,EAAE,OAAO,EAAE,CAAC;QAChE,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,YAAY,EAAE,OAAO,EAAE,CAAC;IACvD,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,YAAY,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,KAAK,EAAE,CAAC;IAClE,CAAC;AACH,CAAC;AAED,MAAM,CAAC,MAAM,QAAQ,GAAa;IAChC,IAAI,EAAE,QAAQ;IACd,IAAI,EAAE,WAAW;IACjB,YAAY,EAAE,CAAC,MAAM,CAAC;IACtB,MAAM;IACN,MAAM;CACP,CAAC"}
@@ -0,0 +1,3 @@
1
+ import type { Provider } from "../types.js";
2
+ export declare const PROVIDERS: Record<string, Provider>;
3
+ export declare function resolveProvider(slug: string): Provider | undefined;
@@ -0,0 +1,59 @@
1
+ // @implements REQ-013 REQ-014 REQ-070
2
+ import { provider as duckduckgo } from "./duckduckgo.js";
3
+ import { provider as jina } from "./jina.js";
4
+ import { provider as wikipedia } from "./wikipedia.js";
5
+ import { provider as wiktionary } from "./wiktionary.js";
6
+ import { provider as wikidata } from "./wikidata.js";
7
+ import { provider as openstreetmap } from "./openstreetmap.js";
8
+ import { provider as internet_archive } from "./internet_archive.js";
9
+ import { provider as arxiv } from "./arxiv.js";
10
+ import { provider as semantic_scholar } from "./semantic_scholar.js";
11
+ import { provider as stack_exchange } from "./stack_exchange.js";
12
+ import { provider as github } from "./github.js";
13
+ import { provider as core } from "./core.js";
14
+ import { provider as marginalia } from "./marginalia.js";
15
+ import { provider as mojeek } from "./mojeek.js";
16
+ import { provider as brave } from "./brave.js";
17
+ import { provider as exa } from "./exa.js";
18
+ import { provider as tavily } from "./tavily.js";
19
+ import { provider as searxng } from "./searxng.js";
20
+ import { provider as yep } from "./yep.js";
21
+ import { provider as wiby } from "./wiby.js";
22
+ import { createGenericProvider } from "./generic-http.js";
23
+ import { getConfig } from "../config.js";
24
+ export const PROVIDERS = {
25
+ duckduckgo,
26
+ jina,
27
+ wikipedia,
28
+ wiktionary,
29
+ wikidata,
30
+ openstreetmap,
31
+ internet_archive,
32
+ arxiv,
33
+ semantic_scholar,
34
+ stack_exchange,
35
+ github,
36
+ core,
37
+ marginalia,
38
+ mojeek,
39
+ brave,
40
+ exa,
41
+ tavily,
42
+ searxng,
43
+ yep,
44
+ wiby,
45
+ };
46
+ const genericCache = {};
47
+ export function resolveProvider(slug) {
48
+ const registered = PROVIDERS[slug];
49
+ if (registered)
50
+ return registered;
51
+ const cfg = getConfig().providers[slug];
52
+ if (!cfg || cfg.tier !== "generic_http")
53
+ return undefined;
54
+ if (!genericCache[slug]) {
55
+ genericCache[slug] = createGenericProvider(slug, cfg);
56
+ }
57
+ return genericCache[slug];
58
+ }
59
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/providers/index.ts"],"names":[],"mappings":"AAAA,sCAAsC;AACtC,OAAO,EAAE,QAAQ,IAAI,UAAU,EAAE,MAAM,iBAAiB,CAAC;AACzD,OAAO,EAAE,QAAQ,IAAI,IAAI,EAAE,MAAM,WAAW,CAAC;AAC7C,OAAO,EAAE,QAAQ,IAAI,SAAS,EAAE,MAAM,gBAAgB,CAAC;AACvD,OAAO,EAAE,QAAQ,IAAI,UAAU,EAAE,MAAM,iBAAiB,CAAC;AACzD,OAAO,EAAE,QAAQ,IAAI,QAAQ,EAAE,MAAM,eAAe,CAAC;AACrD,OAAO,EAAE,QAAQ,IAAI,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAC/D,OAAO,EAAE,QAAQ,IAAI,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AACrE,OAAO,EAAE,QAAQ,IAAI,KAAK,EAAE,MAAM,YAAY,CAAC;AAC/C,OAAO,EAAE,QAAQ,IAAI,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AACrE,OAAO,EAAE,QAAQ,IAAI,cAAc,EAAE,MAAM,qBAAqB,CAAC;AACjE,OAAO,EAAE,QAAQ,IAAI,MAAM,EAAE,MAAM,aAAa,CAAC;AACjD,OAAO,EAAE,QAAQ,IAAI,IAAI,EAAE,MAAM,WAAW,CAAC;AAC7C,OAAO,EAAE,QAAQ,IAAI,UAAU,EAAE,MAAM,iBAAiB,CAAC;AACzD,OAAO,EAAE,QAAQ,IAAI,MAAM,EAAE,MAAM,aAAa,CAAC;AACjD,OAAO,EAAE,QAAQ,IAAI,KAAK,EAAE,MAAM,YAAY,CAAC;AAC/C,OAAO,EAAE,QAAQ,IAAI,GAAG,EAAE,MAAM,UAAU,CAAC;AAC3C,OAAO,EAAE,QAAQ,IAAI,MAAM,EAAE,MAAM,aAAa,CAAC;AACjD,OAAO,EAAE,QAAQ,IAAI,OAAO,EAAE,MAAM,cAAc,CAAC;AACnD,OAAO,EAAE,QAAQ,IAAI,GAAG,EAAE,MAAM,UAAU,CAAC;AAC3C,OAAO,EAAE,QAAQ,IAAI,IAAI,EAAE,MAAM,WAAW,CAAC;AAC7C,OAAO,EAAE,qBAAqB,EAAE,MAAM,mBAAmB,CAAC;AAC1D,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAGzC,MAAM,CAAC,MAAM,SAAS,GAA6B;IACjD,UAAU;IACV,IAAI;IACJ,SAAS;IACT,UAAU;IACV,QAAQ;IACR,aAAa;IACb,gBAAgB;IAChB,KAAK;IACL,gBAAgB;IAChB,cAAc;IACd,MAAM;IACN,IAAI;IACJ,UAAU;IACV,MAAM;IACN,KAAK;IACL,GAAG;IACH,MAAM;IACN,OAAO;IACP,GAAG;IACH,IAAI;CACL,CAAC;AAEF,MAAM,YAAY,GAA6B,EAAE,CAAC;AAElD,MAAM,UAAU,eAAe,CAAC,IAAY;IAC1C,MAAM,UAAU,GAAG,SAAS,CAAC,IAAI,CAAC,CAAC;IACnC,IAAI,UAAU;QAAE,OAAO,UAAU,CAAC;IAElC,MAAM,GAAG,GAAG,SAAS,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;IACxC,IAAI,CAAC,GAAG,IAAI,GAAG,CAAC,IAAI,KAAK,cAAc;QAAE,OAAO,SAAS,CAAC;IAE1D,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,EAAE,CAAC;QACxB,YAAY,CAAC,IAAI,CAAC,GAAG,qBAAqB,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;IACxD,CAAC;IACD,OAAO,YAAY,CAAC,IAAI,CAAC,CAAC;AAC5B,CAAC"}
@@ -0,0 +1,2 @@
1
+ import type { Provider } from "../types.js";
2
+ export declare const provider: Provider;
@@ -0,0 +1,59 @@
1
+ import { normalize } from "../normalizer.js";
2
+ import { RetryableError } from "../retry.js";
3
+ import { infobrokerFetch } from "../http.js";
4
+ const IA_API = "https://archive.org/wayback/available";
5
+ async function fetchPage(url) {
6
+ const checkResp = await infobrokerFetch(`${IA_API}?url=${encodeURIComponent(url)}`, { providerSlug: "internet_archive" });
7
+ if (!checkResp.ok) {
8
+ throw new RetryableError(`Internet Archive returned HTTP ${checkResp.status}`, checkResp.status);
9
+ }
10
+ const checkData = (await checkResp.json());
11
+ const snapshot = checkData.archived_snapshots?.closest;
12
+ if (!snapshot) {
13
+ throw new Error("No archived snapshot available");
14
+ }
15
+ const pageResp = await infobrokerFetch(snapshot.url, { providerSlug: "internet_archive" });
16
+ if (!pageResp.ok) {
17
+ throw new RetryableError(`Internet Archive page fetch returned HTTP ${pageResp.status}`, pageResp.status);
18
+ }
19
+ return pageResp.text();
20
+ }
21
+ async function search(query) {
22
+ const checkResp = await infobrokerFetch(`${IA_API}?url=${encodeURIComponent(query)}`, { providerSlug: "internet_archive" });
23
+ if (!checkResp.ok)
24
+ throw new RetryableError(`Internet Archive returned HTTP ${checkResp.status}`, checkResp.status);
25
+ const checkData = (await checkResp.json());
26
+ const snapshot = checkData.archived_snapshots?.closest;
27
+ if (!snapshot)
28
+ return [];
29
+ return normalize([
30
+ {
31
+ title: `Archived: ${query}`,
32
+ url: snapshot.url,
33
+ snippet: `Snapshot from ${snapshot.timestamp}`,
34
+ source_type: "archive",
35
+ },
36
+ ], "internet_archive");
37
+ }
38
+ async function health() {
39
+ const start = Date.now();
40
+ try {
41
+ const resp = await infobrokerFetch(`${IA_API}?url=https://example.com`, { providerSlug: "internet_archive" });
42
+ const elapsed = Date.now() - start;
43
+ if (resp.ok)
44
+ return { status: "active", avgLatencyMs: elapsed };
45
+ return { status: "degraded", avgLatencyMs: elapsed };
46
+ }
47
+ catch {
48
+ return { status: "inactive", avgLatencyMs: Date.now() - start };
49
+ }
50
+ }
51
+ export const provider = {
52
+ slug: "internet_archive",
53
+ tier: "free_http",
54
+ capabilities: ["archive", "content_fetch"],
55
+ search,
56
+ fetchPage,
57
+ health,
58
+ };
59
+ //# sourceMappingURL=internet_archive.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"internet_archive.js","sourceRoot":"","sources":["../../src/providers/internet_archive.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ import type { Provider } from "../types.js";
2
+ export declare const provider: Provider;
@@ -0,0 +1,34 @@
1
+ import { RetryableError } from "../retry.js";
2
+ import { infobrokerFetch } from "../http.js";
3
+ const JINA_BASE = "https://r.jina.ai/";
4
+ async function fetchPage(url) {
5
+ const target = `${JINA_BASE}${url}`;
6
+ const resp = await infobrokerFetch(target, { providerSlug: "jina" });
7
+ if (!resp.ok) {
8
+ throw new RetryableError(`Jina returned HTTP ${resp.status}`, resp.status);
9
+ }
10
+ return resp.text();
11
+ }
12
+ async function health() {
13
+ const start = Date.now();
14
+ try {
15
+ const resp = await infobrokerFetch(`${JINA_BASE}https://example.com`, { providerSlug: "jina" });
16
+ const elapsed = Date.now() - start;
17
+ if (resp.ok) {
18
+ return { status: "active", avgLatencyMs: elapsed };
19
+ }
20
+ return { status: "degraded", avgLatencyMs: elapsed };
21
+ }
22
+ catch {
23
+ return { status: "inactive", avgLatencyMs: Date.now() - start };
24
+ }
25
+ }
26
+ export const provider = {
27
+ slug: "jina",
28
+ tier: "free_http",
29
+ capabilities: ["content_fetch"],
30
+ search: async () => [],
31
+ fetchPage,
32
+ health,
33
+ };
34
+ //# sourceMappingURL=jina.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"jina.js","sourceRoot":"","sources":["../../src/providers/jina.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAC7C,OAAO,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAE7C,MAAM,SAAS,GAAG,oBAAoB,CAAC;AAEvC,KAAK,UAAU,SAAS,CAAC,GAAW;IAClC,MAAM,MAAM,GAAG,GAAG,SAAS,GAAG,GAAG,EAAE,CAAC;IACpC,MAAM,IAAI,GAAG,MAAM,eAAe,CAAC,MAAM,EAAE,EAAE,YAAY,EAAE,MAAM,EAAE,CAAC,CAAC;IAErE,IAAI,CAAC,IAAI,CAAC,EAAE,EAAE,CAAC;QACb,MAAM,IAAI,cAAc,CAAC,sBAAsB,IAAI,CAAC,MAAM,EAAE,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC;IAC7E,CAAC;IAED,OAAO,IAAI,CAAC,IAAI,EAAE,CAAC;AACrB,CAAC;AAED,KAAK,UAAU,MAAM;IACnB,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IACzB,IAAI,CAAC;QACH,MAAM,IAAI,GAAG,MAAM,eAAe,CAAC,GAAG,SAAS,qBAAqB,EAAE,EAAE,YAAY,EAAE,MAAM,EAAE,CAAC,CAAC;QAChG,MAAM,OAAO,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,KAAK,CAAC;QACnC,IAAI,IAAI,CAAC,EAAE,EAAE,CAAC;YACZ,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,YAAY,EAAE,OAAO,EAAE,CAAC;QACrD,CAAC;QACD,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,YAAY,EAAE,OAAO,EAAE,CAAC;IACvD,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,YAAY,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,KAAK,EAAE,CAAC;IAClE,CAAC;AACH,CAAC;AAED,MAAM,CAAC,MAAM,QAAQ,GAAa;IAChC,IAAI,EAAE,MAAM;IACZ,IAAI,EAAE,WAAW;IACjB,YAAY,EAAE,CAAC,eAAe,CAAC;IAC/B,MAAM,EAAE,KAAK,IAAI,EAAE,CAAC,EAAE;IACtB,SAAS;IACT,MAAM;CACP,CAAC"}
@@ -0,0 +1,2 @@
1
+ import type { Provider } from "../types.js";
2
+ export declare const provider: Provider;
@@ -0,0 +1,47 @@
1
+ // @implements REQ-020
2
+ import * as cheerio from "cheerio";
3
+ import { normalize } from "../normalizer.js";
4
+ import { RetryableError } from "../retry.js";
5
+ import { infobrokerFetch } from "../http.js";
6
+ const MARGINALIA_URL = "https://search.marginalia.nu/search";
7
+ async function search(query) {
8
+ const params = new URLSearchParams({ query, profile: "default" });
9
+ const resp = await infobrokerFetch(`${MARGINALIA_URL}?${params.toString()}`, { providerSlug: "marginalia" });
10
+ if (!resp.ok)
11
+ throw new RetryableError(`Marginalia returned HTTP ${resp.status}`, resp.status);
12
+ const html = await resp.text();
13
+ const $ = cheerio.load(html);
14
+ const raw = [];
15
+ $(".result").each((_i, el) => {
16
+ if (raw.length >= 10)
17
+ return false;
18
+ const title = $(el).find("h2, .title, a").first().text().trim();
19
+ const link = $(el).find("a").first().attr("href") || "";
20
+ const snippet = $(el).find("p, .description, .snippet").first().text().trim();
21
+ if (title) {
22
+ raw.push({ title, url: link.startsWith("/") ? `https://search.marginalia.nu${link}` : link, snippet });
23
+ }
24
+ });
25
+ return normalize(raw, "marginalia");
26
+ }
27
+ async function health() {
28
+ const start = Date.now();
29
+ try {
30
+ const resp = await infobrokerFetch(`${MARGINALIA_URL}?query=test&profile=default`, { providerSlug: "marginalia" });
31
+ const elapsed = Date.now() - start;
32
+ if (resp.ok)
33
+ return { status: "active", avgLatencyMs: elapsed };
34
+ return { status: "degraded", avgLatencyMs: elapsed };
35
+ }
36
+ catch {
37
+ return { status: "inactive", avgLatencyMs: Date.now() - start };
38
+ }
39
+ }
40
+ export const provider = {
41
+ slug: "marginalia",
42
+ tier: "builtin",
43
+ capabilities: ["web_search"],
44
+ search,
45
+ health,
46
+ };
47
+ //# sourceMappingURL=marginalia.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"marginalia.js","sourceRoot":"","sources":["../../src/providers/marginalia.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ import type { Provider } from "../types.js";
2
+ export declare const provider: Provider;
@@ -0,0 +1,47 @@
1
+ // @implements REQ-020
2
+ import * as cheerio from "cheerio";
3
+ import { normalize } from "../normalizer.js";
4
+ import { RetryableError } from "../retry.js";
5
+ import { infobrokerFetch } from "../http.js";
6
+ const MOJEEK_URL = "https://www.mojeek.com/search";
7
+ async function search(query) {
8
+ const params = new URLSearchParams({ q: query });
9
+ const resp = await infobrokerFetch(`${MOJEEK_URL}?${params.toString()}`, { providerSlug: "mojeek" });
10
+ if (!resp.ok)
11
+ throw new RetryableError(`Mojeek returned HTTP ${resp.status}`, resp.status);
12
+ const html = await resp.text();
13
+ const $ = cheerio.load(html);
14
+ const raw = [];
15
+ $(".results .result").each((_i, el) => {
16
+ if (raw.length >= 10)
17
+ return false;
18
+ const title = $(el).find("h2 a, .title a").first().text().trim();
19
+ const link = $(el).find("h2 a, .title a").first().attr("href") || "";
20
+ const snippet = $(el).find(".snippet, .description, p").first().text().trim();
21
+ if (title) {
22
+ raw.push({ title, url: link, snippet });
23
+ }
24
+ });
25
+ return normalize(raw, "mojeek");
26
+ }
27
+ async function health() {
28
+ const start = Date.now();
29
+ try {
30
+ const resp = await infobrokerFetch(`${MOJEEK_URL}?q=test`, { providerSlug: "mojeek" });
31
+ const elapsed = Date.now() - start;
32
+ if (resp.ok)
33
+ return { status: "active", avgLatencyMs: elapsed };
34
+ return { status: "degraded", avgLatencyMs: elapsed };
35
+ }
36
+ catch {
37
+ return { status: "inactive", avgLatencyMs: Date.now() - start };
38
+ }
39
+ }
40
+ export const provider = {
41
+ slug: "mojeek",
42
+ tier: "builtin",
43
+ capabilities: ["web_search"],
44
+ search,
45
+ health,
46
+ };
47
+ //# sourceMappingURL=mojeek.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mojeek.js","sourceRoot":"","sources":["../../src/providers/mojeek.ts"],"names":[],"mappings":"AAAA,sBAAsB;AACtB,OAAO,KAAK,OAAO,MAAM,SAAS,CAAC;AAEnC,OAAO,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAC7C,OAAO,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAC7C,OAAO,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAE7C,MAAM,UAAU,GAAG,+BAA+B,CAAC;AAEnD,KAAK,UAAU,MAAM,CAAC,KAAa;IACjC,MAAM,MAAM,GAAG,IAAI,eAAe,CAAC,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC;IAEjD,MAAM,IAAI,GAAG,MAAM,eAAe,CAAC,GAAG,UAAU,IAAI,MAAM,CAAC,QAAQ,EAAE,EAAE,EAAE,EAAE,YAAY,EAAE,QAAQ,EAAE,CAAC,CAAC;IAErG,IAAI,CAAC,IAAI,CAAC,EAAE;QAAE,MAAM,IAAI,cAAc,CAAC,wBAAwB,IAAI,CAAC,MAAM,EAAE,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC;IAE3F,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,IAAI,EAAE,CAAC;IAC/B,MAAM,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAE7B,MAAM,GAAG,GAAmC,EAAE,CAAC;IAC/C,CAAC,CAAC,kBAAkB,CAAC,CAAC,IAAI,CAAC,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE;QACpC,IAAI,GAAG,CAAC,MAAM,IAAI,EAAE;YAAE,OAAO,KAAK,CAAC;QACnC,MAAM,KAAK,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC,KAAK,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC;QACjE,MAAM,IAAI,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC,KAAK,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC;QACrE,MAAM,OAAO,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,2BAA2B,CAAC,CAAC,KAAK,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC;QAC9E,IAAI,KAAK,EAAE,CAAC;YACV,GAAG,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,GAAG,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC,CAAC;QAC1C,CAAC;IACH,CAAC,CAAC,CAAC;IAEH,OAAO,SAAS,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAC;AAClC,CAAC;AAED,KAAK,UAAU,MAAM;IACnB,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IACzB,IAAI,CAAC;QACH,MAAM,IAAI,GAAG,MAAM,eAAe,CAAC,GAAG,UAAU,SAAS,EAAE,EAAE,YAAY,EAAE,QAAQ,EAAE,CAAC,CAAC;QACvF,MAAM,OAAO,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,KAAK,CAAC;QACnC,IAAI,IAAI,CAAC,EAAE;YAAE,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,YAAY,EAAE,OAAO,EAAE,CAAC;QAChE,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,YAAY,EAAE,OAAO,EAAE,CAAC;IACvD,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,YAAY,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,KAAK,EAAE,CAAC;IAClE,CAAC;AACH,CAAC;AAED,MAAM,CAAC,MAAM,QAAQ,GAAa;IAChC,IAAI,EAAE,QAAQ;IACd,IAAI,EAAE,SAAS;IACf,YAAY,EAAE,CAAC,YAAY,CAAC;IAC5B,MAAM;IACN,MAAM;CACP,CAAC"}
@@ -0,0 +1,2 @@
1
+ import type { Provider } from "../types.js";
2
+ export declare const provider: Provider;
@@ -0,0 +1,43 @@
1
+ import { normalize } from "../normalizer.js";
2
+ import { RetryableError } from "../retry.js";
3
+ import { infobrokerFetch } from "../http.js";
4
+ const OSM_API = "https://nominatim.openstreetmap.org/search";
5
+ async function search(query) {
6
+ const params = new URLSearchParams({
7
+ q: query,
8
+ format: "json",
9
+ limit: "10",
10
+ });
11
+ const resp = await infobrokerFetch(`${OSM_API}?${params.toString()}`, { providerSlug: "openstreetmap" });
12
+ if (!resp.ok)
13
+ throw new RetryableError(`OpenStreetMap returned HTTP ${resp.status}`, resp.status);
14
+ const data = (await resp.json());
15
+ const raw = data.map((item) => ({
16
+ title: item.display_name,
17
+ url: `https://www.openstreetmap.org/?mlat=${item.lat}&mlon=${item.lon}`,
18
+ snippet: `${item.type} at ${item.lat}, ${item.lon}`,
19
+ source_type: "location",
20
+ }));
21
+ return normalize(raw, "openstreetmap");
22
+ }
23
+ async function health() {
24
+ const start = Date.now();
25
+ try {
26
+ const resp = await infobrokerFetch(`${OSM_API}?q=test&format=json&limit=1`, { providerSlug: "openstreetmap" });
27
+ const elapsed = Date.now() - start;
28
+ if (resp.ok)
29
+ return { status: "active", avgLatencyMs: elapsed };
30
+ return { status: "degraded", avgLatencyMs: elapsed };
31
+ }
32
+ catch {
33
+ return { status: "inactive", avgLatencyMs: Date.now() - start };
34
+ }
35
+ }
36
+ export const provider = {
37
+ slug: "openstreetmap",
38
+ tier: "free_http",
39
+ capabilities: ["web_search"],
40
+ search,
41
+ health,
42
+ };
43
+ //# sourceMappingURL=openstreetmap.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"openstreetmap.js","sourceRoot":"","sources":["../../src/providers/openstreetmap.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAC7C,OAAO,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAC7C,OAAO,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAE7C,MAAM,OAAO,GAAG,4CAA4C,CAAC;AAE7D,KAAK,UAAU,MAAM,CAAC,KAAa;IACjC,MAAM,MAAM,GAAG,IAAI,eAAe,CAAC;QACjC,CAAC,EAAE,KAAK;QACR,MAAM,EAAE,MAAM;QACd,KAAK,EAAE,IAAI;KACZ,CAAC,CAAC;IAEH,MAAM,IAAI,GAAG,MAAM,eAAe,CAAC,GAAG,OAAO,IAAI,MAAM,CAAC,QAAQ,EAAE,EAAE,EAAE,EAAE,YAAY,EAAE,eAAe,EAAE,CAAC,CAAC;IAEzG,IAAI,CAAC,IAAI,CAAC,EAAE;QAAE,MAAM,IAAI,cAAc,CAAC,+BAA+B,IAAI,CAAC,MAAM,EAAE,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC;IAElG,MAAM,IAAI,GAAG,CAAC,MAAM,IAAI,CAAC,IAAI,EAAE,CAK7B,CAAC;IAEH,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;QAC9B,KAAK,EAAE,IAAI,CAAC,YAAY;QACxB,GAAG,EAAE,uCAAuC,IAAI,CAAC,GAAG,SAAS,IAAI,CAAC,GAAG,EAAE;QACvE,OAAO,EAAE,GAAG,IAAI,CAAC,IAAI,OAAO,IAAI,CAAC,GAAG,KAAK,IAAI,CAAC,GAAG,EAAE;QACnD,WAAW,EAAE,UAAU;KACxB,CAAC,CAAC,CAAC;IAEJ,OAAO,SAAS,CAAC,GAAG,EAAE,eAAe,CAAC,CAAC;AACzC,CAAC;AAED,KAAK,UAAU,MAAM;IACnB,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IACzB,IAAI,CAAC;QACH,MAAM,IAAI,GAAG,MAAM,eAAe,CAAC,GAAG,OAAO,6BAA6B,EAAE,EAAE,YAAY,EAAE,eAAe,EAAE,CAAC,CAAC;QAC/G,MAAM,OAAO,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,KAAK,CAAC;QACnC,IAAI,IAAI,CAAC,EAAE;YAAE,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,YAAY,EAAE,OAAO,EAAE,CAAC;QAChE,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,YAAY,EAAE,OAAO,EAAE,CAAC;IACvD,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,YAAY,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,KAAK,EAAE,CAAC;IAClE,CAAC;AACH,CAAC;AAED,MAAM,CAAC,MAAM,QAAQ,GAAa;IAChC,IAAI,EAAE,eAAe;IACrB,IAAI,EAAE,WAAW;IACjB,YAAY,EAAE,CAAC,YAAY,CAAC;IAC5B,MAAM;IACN,MAAM;CACP,CAAC"}
@@ -0,0 +1,2 @@
1
+ import type { Provider } from "../types.js";
2
+ export declare const provider: Provider;