@axiomworks/agentreader 1.7.0 → 1.9.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.d.ts CHANGED
@@ -152,12 +152,16 @@ declare class AgentReaderClient {
152
152
  ticker?: string;
153
153
  cik?: string;
154
154
  }, opts?: RequestOpts): Promise<any>;
155
+ /** Single-fact EVM lookups ($0.001–0.003): name is e.g. "erc20-balance", "nonce", "receipt" (see chainRoutes). */
156
+ chain(name: ChainRouteName, input?: Record<string, string | number | undefined>, opts?: RequestOpts): Promise<any>;
155
157
  euVat(input: {
156
158
  vat?: string;
157
159
  country?: string;
158
160
  number?: string;
159
161
  }, opts?: RequestOpts): Promise<any>;
160
162
  }
163
+ type ChainRouteName = "erc20-balance" | "balance" | "block-number" | "nonce" | "total-supply" | "erc20-transfers" | "events" | "network-info" | "receipt" | "code" | "call" | "estimate-gas" | "nft-owner" | "erc1155-balance" | "storage" | "proxy" | "chain-id";
164
+
161
165
  /** Create a typed AgentReader client. Pass privateKey (or set AGENTREADER_PRIVATE_KEY) to auto-pay. */
162
166
  declare function createClient(opts?: ClientOptions): AgentReaderClient;
163
167
 
package/dist/index.js CHANGED
@@ -3,7 +3,7 @@ import { wrapFetchWithPayment, x402Client } from "@x402/fetch";
3
3
  import { ExactEvmScheme } from "@x402/evm/exact/client";
4
4
  import { privateKeyToAccount } from "viem/accounts";
5
5
  var DEFAULT_ORIGIN = "https://api.axiomworks.co.uk";
6
- var VERSION = "1.7.0";
6
+ var VERSION = "1.8.0";
7
7
  function normalizeKey(raw) {
8
8
  if (!raw) return void 0;
9
9
  const key = raw.startsWith("0x") ? raw : `0x${raw}`;
@@ -201,6 +201,10 @@ var AgentReaderClient = class {
201
201
  usSecFull(input, opts) {
202
202
  return this.get("/us-sec-full", input, opts);
203
203
  }
204
+ /** Single-fact EVM lookups ($0.001–0.003): name is e.g. "erc20-balance", "nonce", "receipt" (see chainRoutes). */
205
+ chain(name, input = {}, opts) {
206
+ return this.get(`/chain/${name}`, input, opts);
207
+ }
204
208
  euVat(input, opts) {
205
209
  return this.get("/eu-vat", input, opts);
206
210
  }
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/client.ts"],"sourcesContent":["import { wrapFetchWithPayment, x402Client } from \"@x402/fetch\";\nimport { ExactEvmScheme } from \"@x402/evm/exact/client\";\nimport { privateKeyToAccount } from \"viem/accounts\";\nimport type { Chain, ClientOptions, RequestOpts } from \"./types.js\";\n\nconst DEFAULT_ORIGIN = \"https://api.axiomworks.co.uk\";\nconst VERSION = \"1.7.0\";\n\nfunction normalizeKey(raw?: string): `0x${string}` | undefined {\n if (!raw) return undefined;\n const key = raw.startsWith(\"0x\") ? raw : `0x${raw}`;\n if (!/^0x[0-9a-fA-F]{64}$/.test(key)) {\n throw new Error(\"privateKey must be a 32-byte hex string (optional 0x prefix)\");\n }\n return key as `0x${string}`;\n}\n\nfunction qs(params: Record<string, unknown>): string {\n const sp = new URLSearchParams();\n for (const [k, v] of Object.entries(params)) {\n if (v == null || v === \"\") continue;\n sp.set(k, String(v));\n }\n return sp.toString();\n}\n\nexport class PaymentRequiredError extends Error {\n readonly status = 402;\n readonly paymentRequired: unknown;\n readonly body: unknown;\n readonly url: string;\n constructor(url: string, paymentRequired: unknown, body: unknown) {\n super(\"Payment required (x402). Pass privateKey to createClient or fund/retry with @x402/fetch.\");\n this.name = \"PaymentRequiredError\";\n this.url = url;\n this.paymentRequired = paymentRequired;\n this.body = body;\n }\n}\n\nexport class AgentReaderClient {\n readonly origin: string;\n readonly paying: boolean;\n private readonly fetchFn: typeof fetch;\n private readonly defaultPreview: boolean;\n private readonly ua: string;\n\n constructor(opts: ClientOptions = {}) {\n this.origin = (opts.origin || DEFAULT_ORIGIN).replace(/\\/$/, \"\");\n const key = normalizeKey(\n opts.privateKey ||\n process.env.AGENTREADER_PRIVATE_KEY ||\n process.env.EVM_PRIVATE_KEY ||\n process.env.PRIVATE_KEY,\n );\n this.paying = !!key;\n this.defaultPreview = opts.preview ?? !this.paying;\n this.ua = opts.userAgent || `axiomworks-agentreader-sdk/${VERSION}`;\n if (key) {\n const account = privateKeyToAccount(key);\n const client = new x402Client().register(\"eip155:8453\", new ExactEvmScheme(account));\n const base = opts.fetch || globalThis.fetch.bind(globalThis);\n this.fetchFn = wrapFetchWithPayment(base, client);\n } else {\n this.fetchFn = opts.fetch || globalThis.fetch.bind(globalThis);\n }\n }\n\n private async request(\n path: string,\n init: RequestInit & { previewable?: boolean } = {},\n opts: RequestOpts = {},\n ): Promise<any> {\n const url = new URL(path.startsWith(\"http\") ? path : `${this.origin}${path}`);\n if (opts.query) {\n for (const [k, v] of Object.entries(opts.query)) {\n if (v == null || v === \"\") continue;\n url.searchParams.set(k, String(v));\n }\n }\n const wantPreview =\n opts.preview === true ||\n (opts.preview !== false && this.defaultPreview && init.method !== \"POST\" && init.previewable !== false);\n if (wantPreview && !url.searchParams.has(\"preview\")) {\n url.searchParams.set(\"preview\", \"1\");\n }\n const res = await this.fetchFn(url.toString(), {\n ...init,\n headers: {\n accept: \"application/json\",\n \"user-agent\": this.ua,\n ...(init.headers || {}),\n },\n });\n const pr = res.headers.get(\"payment-required\") || res.headers.get(\"PAYMENT-REQUIRED\");\n const text = await res.text();\n let body: any;\n try {\n body = JSON.parse(text);\n } catch {\n body = { raw: text.slice(0, 4000) };\n }\n if (res.status === 402 || pr) {\n let payment: unknown = null;\n if (pr) {\n try {\n payment = JSON.parse(Buffer.from(pr, \"base64\").toString(\"utf8\"));\n } catch {\n payment = { raw: pr.slice(0, 200) };\n }\n }\n throw new PaymentRequiredError(url.toString(), payment ?? body, body);\n }\n if (!res.ok) {\n const err: any = new Error(body?.error || `HTTP ${res.status}`);\n err.status = res.status;\n err.body = body;\n throw err;\n }\n return body;\n }\n\n private get(path: string, query?: Record<string, unknown>, opts?: RequestOpts) {\n const q = qs({ ...(query || {}), ...(opts?.query || {}) });\n return this.request(`${path}${q ? `?${q}` : \"\"}`, { method: \"GET\" }, opts);\n }\n\n /** Free: x402 catalog / prices */\n pricing(opts?: RequestOpts) {\n return this.request(`${this.origin}/.well-known/x402`, { method: \"GET\", previewable: false }, { ...opts, preview: false });\n }\n\n readUrl(input: { url: string }, opts?: RequestOpts) {\n return this.get(\"/read\", input, opts);\n }\n extractLinks(input: { url: string }, opts?: RequestOpts) {\n return this.get(\"/links\", input, opts);\n }\n checkDomain(input: { domain: string }, opts?: RequestOpts) {\n return this.get(\"/check\", input, opts);\n }\n companyResearch(input: { domain: string }, opts?: RequestOpts) {\n return this.get(\"/company\", input, opts);\n }\n ukCompany(input: { number?: string; name?: string }, opts?: RequestOpts) {\n return this.get(\"/uk-company\", input, opts);\n }\n ukCompanyLite(input: { number?: string; name?: string }, opts?: RequestOpts) {\n return this.get(\"/uk-company-lite\", input, opts);\n }\n companyFull(input: { domain: string }, opts?: RequestOpts) {\n return this.get(\"/company-full\", input, opts);\n }\n convertDocument(input: { url: string; format?: \"markdown\" | \"text\" }, opts?: RequestOpts) {\n return this.get(\"/convert\", { format: \"markdown\", ...input }, opts);\n }\n createMonitor(\n input: { url: string; webhook: string; selector?: string; keyword?: string },\n opts?: RequestOpts,\n ) {\n return this.request(\n `${this.origin}/monitor`,\n {\n method: \"POST\",\n headers: { \"content-type\": \"application/json\" },\n body: JSON.stringify(input),\n previewable: false,\n },\n { ...opts, preview: false },\n );\n }\n walletBalances(input: { address: string; chain?: Chain; tokens?: string }, opts?: RequestOpts) {\n return this.get(\"/wallet\", input, opts);\n }\n txStatus(input: { hash: string; chain?: Chain }, opts?: RequestOpts) {\n return this.get(\"/tx\", input, opts);\n }\n tokenCheck(input: { address: string; chain?: Chain }, opts?: RequestOpts) {\n return this.get(\"/token-check\", input, opts);\n }\n fxRates(\n input: { base?: string; symbols?: string; date?: string; amount?: string } = {},\n opts?: RequestOpts,\n ) {\n return this.get(\"/fx\", input, opts);\n }\n ensLookup(input: { name?: string; address?: string }, opts?: RequestOpts) {\n return this.get(\"/ens\", input, opts);\n }\n tokenMetadata(input: { address: string; chain?: Chain }, opts?: RequestOpts) {\n return this.get(\"/token\", input, opts);\n }\n tokenAllowance(\n input: { token: string; owner: string; spender: string; chain?: Chain },\n opts?: RequestOpts,\n ) {\n return this.get(\"/allowance\", input, opts);\n }\n contractInfo(input: { address: string; chain?: Chain }, opts?: RequestOpts) {\n return this.get(\"/contract\", input, opts);\n }\n gasFees(input: { chain?: Chain } = {}, opts?: RequestOpts) {\n return this.get(\"/gas\", input, opts);\n }\n blockLookup(input: { number?: string; timestamp?: string; chain?: Chain } = {}, opts?: RequestOpts) {\n return this.get(\"/block\", input, opts);\n }\n nftLookup(input: { contract: string; token_id: string; chain?: Chain }, opts?: RequestOpts) {\n return this.get(\"/nft\", input, opts);\n }\n webSearch(input: { q: string; sources?: string; limit?: string | number }, opts?: RequestOpts) {\n return this.get(\"/search\", input, opts);\n }\n ukPropertyPrices(input: { postcode: string; radius?: string }, opts?: RequestOpts) {\n return this.get(\"/uk-property\", input, opts);\n }\n ukAreaProfile(input: { postcode: string }, opts?: RequestOpts) {\n return this.get(\"/uk-area\", input, opts);\n }\n ukCharity(input: { number?: string; name?: string; suffix?: string }, opts?: RequestOpts) {\n return this.get(\"/uk-charity\", input, opts);\n }\n ukCharityFull(input: { number?: string; name?: string; suffix?: string }, opts?: RequestOpts) {\n return this.get(\"/uk-charity-full\", input, opts);\n }\n usSec(input: { ticker?: string; cik?: string }, opts?: RequestOpts) {\n return this.get(\"/us-sec\", input, opts);\n }\n usSecFull(input: { ticker?: string; cik?: string }, opts?: RequestOpts) {\n return this.get(\"/us-sec-full\", input, opts);\n }\n euVat(input: { vat?: string; country?: string; number?: string }, opts?: RequestOpts) {\n return this.get(\"/eu-vat\", input, opts);\n }\n}\n\n/** Create a typed AgentReader client. Pass privateKey (or set AGENTREADER_PRIVATE_KEY) to auto-pay. */\nexport function createClient(opts: ClientOptions = {}): AgentReaderClient {\n return new AgentReaderClient(opts);\n}\n"],"mappings":"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","names":[]}
1
+ {"version":3,"sources":["../src/client.ts"],"sourcesContent":["import { wrapFetchWithPayment, x402Client } from \"@x402/fetch\";\nimport { ExactEvmScheme } from \"@x402/evm/exact/client\";\nimport { privateKeyToAccount } from \"viem/accounts\";\nimport type { Chain, ClientOptions, RequestOpts } from \"./types.js\";\n\nconst DEFAULT_ORIGIN = \"https://api.axiomworks.co.uk\";\nconst VERSION = \"1.8.0\";\n\nfunction normalizeKey(raw?: string): `0x${string}` | undefined {\n if (!raw) return undefined;\n const key = raw.startsWith(\"0x\") ? raw : `0x${raw}`;\n if (!/^0x[0-9a-fA-F]{64}$/.test(key)) {\n throw new Error(\"privateKey must be a 32-byte hex string (optional 0x prefix)\");\n }\n return key as `0x${string}`;\n}\n\nfunction qs(params: Record<string, unknown>): string {\n const sp = new URLSearchParams();\n for (const [k, v] of Object.entries(params)) {\n if (v == null || v === \"\") continue;\n sp.set(k, String(v));\n }\n return sp.toString();\n}\n\nexport class PaymentRequiredError extends Error {\n readonly status = 402;\n readonly paymentRequired: unknown;\n readonly body: unknown;\n readonly url: string;\n constructor(url: string, paymentRequired: unknown, body: unknown) {\n super(\"Payment required (x402). Pass privateKey to createClient or fund/retry with @x402/fetch.\");\n this.name = \"PaymentRequiredError\";\n this.url = url;\n this.paymentRequired = paymentRequired;\n this.body = body;\n }\n}\n\nexport class AgentReaderClient {\n readonly origin: string;\n readonly paying: boolean;\n private readonly fetchFn: typeof fetch;\n private readonly defaultPreview: boolean;\n private readonly ua: string;\n\n constructor(opts: ClientOptions = {}) {\n this.origin = (opts.origin || DEFAULT_ORIGIN).replace(/\\/$/, \"\");\n const key = normalizeKey(\n opts.privateKey ||\n process.env.AGENTREADER_PRIVATE_KEY ||\n process.env.EVM_PRIVATE_KEY ||\n process.env.PRIVATE_KEY,\n );\n this.paying = !!key;\n this.defaultPreview = opts.preview ?? !this.paying;\n this.ua = opts.userAgent || `axiomworks-agentreader-sdk/${VERSION}`;\n if (key) {\n const account = privateKeyToAccount(key);\n const client = new x402Client().register(\"eip155:8453\", new ExactEvmScheme(account));\n const base = opts.fetch || globalThis.fetch.bind(globalThis);\n this.fetchFn = wrapFetchWithPayment(base, client);\n } else {\n this.fetchFn = opts.fetch || globalThis.fetch.bind(globalThis);\n }\n }\n\n private async request(\n path: string,\n init: RequestInit & { previewable?: boolean } = {},\n opts: RequestOpts = {},\n ): Promise<any> {\n const url = new URL(path.startsWith(\"http\") ? path : `${this.origin}${path}`);\n if (opts.query) {\n for (const [k, v] of Object.entries(opts.query)) {\n if (v == null || v === \"\") continue;\n url.searchParams.set(k, String(v));\n }\n }\n const wantPreview =\n opts.preview === true ||\n (opts.preview !== false && this.defaultPreview && init.method !== \"POST\" && init.previewable !== false);\n if (wantPreview && !url.searchParams.has(\"preview\")) {\n url.searchParams.set(\"preview\", \"1\");\n }\n const res = await this.fetchFn(url.toString(), {\n ...init,\n headers: {\n accept: \"application/json\",\n \"user-agent\": this.ua,\n ...(init.headers || {}),\n },\n });\n const pr = res.headers.get(\"payment-required\") || res.headers.get(\"PAYMENT-REQUIRED\");\n const text = await res.text();\n let body: any;\n try {\n body = JSON.parse(text);\n } catch {\n body = { raw: text.slice(0, 4000) };\n }\n if (res.status === 402 || pr) {\n let payment: unknown = null;\n if (pr) {\n try {\n payment = JSON.parse(Buffer.from(pr, \"base64\").toString(\"utf8\"));\n } catch {\n payment = { raw: pr.slice(0, 200) };\n }\n }\n throw new PaymentRequiredError(url.toString(), payment ?? body, body);\n }\n if (!res.ok) {\n const err: any = new Error(body?.error || `HTTP ${res.status}`);\n err.status = res.status;\n err.body = body;\n throw err;\n }\n return body;\n }\n\n private get(path: string, query?: Record<string, unknown>, opts?: RequestOpts) {\n const q = qs({ ...(query || {}), ...(opts?.query || {}) });\n return this.request(`${path}${q ? `?${q}` : \"\"}`, { method: \"GET\" }, opts);\n }\n\n /** Free: x402 catalog / prices */\n pricing(opts?: RequestOpts) {\n return this.request(`${this.origin}/.well-known/x402`, { method: \"GET\", previewable: false }, { ...opts, preview: false });\n }\n\n readUrl(input: { url: string }, opts?: RequestOpts) {\n return this.get(\"/read\", input, opts);\n }\n extractLinks(input: { url: string }, opts?: RequestOpts) {\n return this.get(\"/links\", input, opts);\n }\n checkDomain(input: { domain: string }, opts?: RequestOpts) {\n return this.get(\"/check\", input, opts);\n }\n companyResearch(input: { domain: string }, opts?: RequestOpts) {\n return this.get(\"/company\", input, opts);\n }\n ukCompany(input: { number?: string; name?: string }, opts?: RequestOpts) {\n return this.get(\"/uk-company\", input, opts);\n }\n ukCompanyLite(input: { number?: string; name?: string }, opts?: RequestOpts) {\n return this.get(\"/uk-company-lite\", input, opts);\n }\n companyFull(input: { domain: string }, opts?: RequestOpts) {\n return this.get(\"/company-full\", input, opts);\n }\n convertDocument(input: { url: string; format?: \"markdown\" | \"text\" }, opts?: RequestOpts) {\n return this.get(\"/convert\", { format: \"markdown\", ...input }, opts);\n }\n createMonitor(\n input: { url: string; webhook: string; selector?: string; keyword?: string },\n opts?: RequestOpts,\n ) {\n return this.request(\n `${this.origin}/monitor`,\n {\n method: \"POST\",\n headers: { \"content-type\": \"application/json\" },\n body: JSON.stringify(input),\n previewable: false,\n },\n { ...opts, preview: false },\n );\n }\n walletBalances(input: { address: string; chain?: Chain; tokens?: string }, opts?: RequestOpts) {\n return this.get(\"/wallet\", input, opts);\n }\n txStatus(input: { hash: string; chain?: Chain }, opts?: RequestOpts) {\n return this.get(\"/tx\", input, opts);\n }\n tokenCheck(input: { address: string; chain?: Chain }, opts?: RequestOpts) {\n return this.get(\"/token-check\", input, opts);\n }\n fxRates(\n input: { base?: string; symbols?: string; date?: string; amount?: string } = {},\n opts?: RequestOpts,\n ) {\n return this.get(\"/fx\", input, opts);\n }\n ensLookup(input: { name?: string; address?: string }, opts?: RequestOpts) {\n return this.get(\"/ens\", input, opts);\n }\n tokenMetadata(input: { address: string; chain?: Chain }, opts?: RequestOpts) {\n return this.get(\"/token\", input, opts);\n }\n tokenAllowance(\n input: { token: string; owner: string; spender: string; chain?: Chain },\n opts?: RequestOpts,\n ) {\n return this.get(\"/allowance\", input, opts);\n }\n contractInfo(input: { address: string; chain?: Chain }, opts?: RequestOpts) {\n return this.get(\"/contract\", input, opts);\n }\n gasFees(input: { chain?: Chain } = {}, opts?: RequestOpts) {\n return this.get(\"/gas\", input, opts);\n }\n blockLookup(input: { number?: string; timestamp?: string; chain?: Chain } = {}, opts?: RequestOpts) {\n return this.get(\"/block\", input, opts);\n }\n nftLookup(input: { contract: string; token_id: string; chain?: Chain }, opts?: RequestOpts) {\n return this.get(\"/nft\", input, opts);\n }\n webSearch(input: { q: string; sources?: string; limit?: string | number }, opts?: RequestOpts) {\n return this.get(\"/search\", input, opts);\n }\n ukPropertyPrices(input: { postcode: string; radius?: string }, opts?: RequestOpts) {\n return this.get(\"/uk-property\", input, opts);\n }\n ukAreaProfile(input: { postcode: string }, opts?: RequestOpts) {\n return this.get(\"/uk-area\", input, opts);\n }\n ukCharity(input: { number?: string; name?: string; suffix?: string }, opts?: RequestOpts) {\n return this.get(\"/uk-charity\", input, opts);\n }\n ukCharityFull(input: { number?: string; name?: string; suffix?: string }, opts?: RequestOpts) {\n return this.get(\"/uk-charity-full\", input, opts);\n }\n usSec(input: { ticker?: string; cik?: string }, opts?: RequestOpts) {\n return this.get(\"/us-sec\", input, opts);\n }\n usSecFull(input: { ticker?: string; cik?: string }, opts?: RequestOpts) {\n return this.get(\"/us-sec-full\", input, opts);\n }\n /** Single-fact EVM lookups ($0.001–0.003): name is e.g. \"erc20-balance\", \"nonce\", \"receipt\" (see chainRoutes). */\n chain(name: ChainRouteName, input: Record<string, string | number | undefined> = {}, opts?: RequestOpts) {\n return this.get(`/chain/${name}`, input as any, opts);\n }\n euVat(input: { vat?: string; country?: string; number?: string }, opts?: RequestOpts) {\n return this.get(\"/eu-vat\", input, opts);\n }\n}\n\nexport type ChainRouteName = \"erc20-balance\" | \"balance\" | \"block-number\" | \"nonce\" | \"total-supply\" | \"erc20-transfers\" | \"events\" | \"network-info\" | \"receipt\" | \"code\" | \"call\" | \"estimate-gas\" | \"nft-owner\" | \"erc1155-balance\" | \"storage\" | \"proxy\" | \"chain-id\";\nexport { default as chainRoutes } from \"./chain-routes.json\";\n\n/** Create a typed AgentReader client. Pass privateKey (or set AGENTREADER_PRIVATE_KEY) to auto-pay. */\nexport function createClient(opts: ClientOptions = {}): AgentReaderClient {\n return new AgentReaderClient(opts);\n}\n"],"mappings":"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","names":[]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@axiomworks/agentreader",
3
- "version": "1.7.0",
3
+ "version": "1.9.0",
4
4
  "description": "Axiom Works AgentReader typed JS/TS SDK \u2014 createClient({ privateKey }) with one method per tool, auto x402 USDC payment on Base, free preview mode. Web read, UK company/charity/property, US SEC, EU VAT, EVM, FX, search.",
5
5
  "type": "module",
6
6
  "main": "./dist/index.js",