@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 +4 -0
- package/dist/index.js +5 -1
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
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.
|
|
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":";AAAA,SAAS,sBAAsB,kBAAkB;AACjD,SAAS,sBAAsB;AAC/B,SAAS,2BAA2B;AAGpC,IAAM,iBAAiB;AACvB,IAAM,UAAU;AAEhB,SAAS,aAAa,KAAyC;AAC7D,MAAI,CAAC,IAAK,QAAO;AACjB,QAAM,MAAM,IAAI,WAAW,IAAI,IAAI,MAAM,KAAK,GAAG;AACjD,MAAI,CAAC,sBAAsB,KAAK,GAAG,GAAG;AACpC,UAAM,IAAI,MAAM,8DAA8D;AAAA,EAChF;AACA,SAAO;AACT;AAEA,SAAS,GAAG,QAAyC;AACnD,QAAM,KAAK,IAAI,gBAAgB;AAC/B,aAAW,CAAC,GAAG,CAAC,KAAK,OAAO,QAAQ,MAAM,GAAG;AAC3C,QAAI,KAAK,QAAQ,MAAM,GAAI;AAC3B,OAAG,IAAI,GAAG,OAAO,CAAC,CAAC;AAAA,EACrB;AACA,SAAO,GAAG,SAAS;AACrB;AAEO,IAAM,uBAAN,cAAmC,MAAM;AAAA,EACrC,SAAS;AAAA,EACT;AAAA,EACA;AAAA,EACA;AAAA,EACT,YAAY,KAAa,iBAA0B,MAAe;AAChE,UAAM,0FAA0F;AAChG,SAAK,OAAO;AACZ,SAAK,MAAM;AACX,SAAK,kBAAkB;AACvB,SAAK,OAAO;AAAA,EACd;AACF;AAEO,IAAM,oBAAN,MAAwB;AAAA,EACpB;AAAA,EACA;AAAA,EACQ;AAAA,EACA;AAAA,EACA;AAAA,EAEjB,YAAY,OAAsB,CAAC,GAAG;AACpC,SAAK,UAAU,KAAK,UAAU,gBAAgB,QAAQ,OAAO,EAAE;AAC/D,UAAM,MAAM;AAAA,MACV,KAAK,cACH,QAAQ,IAAI,2BACZ,QAAQ,IAAI,mBACZ,QAAQ,IAAI;AAAA,IAChB;AACA,SAAK,SAAS,CAAC,CAAC;AAChB,SAAK,iBAAiB,KAAK,WAAW,CAAC,KAAK;AAC5C,SAAK,KAAK,KAAK,aAAa,8BAA8B,OAAO;AACjE,QAAI,KAAK;AACP,YAAM,UAAU,oBAAoB,GAAG;AACvC,YAAM,SAAS,IAAI,WAAW,EAAE,SAAS,eAAe,IAAI,eAAe,OAAO,CAAC;AACnF,YAAM,OAAO,KAAK,SAAS,WAAW,MAAM,KAAK,UAAU;AAC3D,WAAK,UAAU,qBAAqB,MAAM,MAAM;AAAA,IAClD,OAAO;AACL,WAAK,UAAU,KAAK,SAAS,WAAW,MAAM,KAAK,UAAU;AAAA,IAC/D;AAAA,EACF;AAAA,EAEA,MAAc,QACZ,MACA,OAAgD,CAAC,GACjD,OAAoB,CAAC,GACP;AACd,UAAM,MAAM,IAAI,IAAI,KAAK,WAAW,MAAM,IAAI,OAAO,GAAG,KAAK,MAAM,GAAG,IAAI,EAAE;AAC5E,QAAI,KAAK,OAAO;AACd,iBAAW,CAAC,GAAG,CAAC,KAAK,OAAO,QAAQ,KAAK,KAAK,GAAG;AAC/C,YAAI,KAAK,QAAQ,MAAM,GAAI;AAC3B,YAAI,aAAa,IAAI,GAAG,OAAO,CAAC,CAAC;AAAA,MACnC;AAAA,IACF;AACA,UAAM,cACJ,KAAK,YAAY,QAChB,KAAK,YAAY,SAAS,KAAK,kBAAkB,KAAK,WAAW,UAAU,KAAK,gBAAgB;AACnG,QAAI,eAAe,CAAC,IAAI,aAAa,IAAI,SAAS,GAAG;AACnD,UAAI,aAAa,IAAI,WAAW,GAAG;AAAA,IACrC;AACA,UAAM,MAAM,MAAM,KAAK,QAAQ,IAAI,SAAS,GAAG;AAAA,MAC7C,GAAG;AAAA,MACH,SAAS;AAAA,QACP,QAAQ;AAAA,QACR,cAAc,KAAK;AAAA,QACnB,GAAI,KAAK,WAAW,CAAC;AAAA,MACvB;AAAA,IACF,CAAC;AACD,UAAM,KAAK,IAAI,QAAQ,IAAI,kBAAkB,KAAK,IAAI,QAAQ,IAAI,kBAAkB;AACpF,UAAM,OAAO,MAAM,IAAI,KAAK;AAC5B,QAAI;AACJ,QAAI;AACF,aAAO,KAAK,MAAM,IAAI;AAAA,IACxB,QAAQ;AACN,aAAO,EAAE,KAAK,KAAK,MAAM,GAAG,GAAI,EAAE;AAAA,IACpC;AACA,QAAI,IAAI,WAAW,OAAO,IAAI;AAC5B,UAAI,UAAmB;AACvB,UAAI,IAAI;AACN,YAAI;AACF,oBAAU,KAAK,MAAM,OAAO,KAAK,IAAI,QAAQ,EAAE,SAAS,MAAM,CAAC;AAAA,QACjE,QAAQ;AACN,oBAAU,EAAE,KAAK,GAAG,MAAM,GAAG,GAAG,EAAE;AAAA,QACpC;AAAA,MACF;AACA,YAAM,IAAI,qBAAqB,IAAI,SAAS,GAAG,WAAW,MAAM,IAAI;AAAA,IACtE;AACA,QAAI,CAAC,IAAI,IAAI;AACX,YAAM,MAAW,IAAI,MAAM,MAAM,SAAS,QAAQ,IAAI,MAAM,EAAE;AAC9D,UAAI,SAAS,IAAI;AACjB,UAAI,OAAO;AACX,YAAM;AAAA,IACR;AACA,WAAO;AAAA,EACT;AAAA,EAEQ,IAAI,MAAc,OAAiC,MAAoB;AAC7E,UAAM,IAAI,GAAG,EAAE,GAAI,SAAS,CAAC,GAAI,GAAI,MAAM,SAAS,CAAC,EAAG,CAAC;AACzD,WAAO,KAAK,QAAQ,GAAG,IAAI,GAAG,IAAI,IAAI,CAAC,KAAK,EAAE,IAAI,EAAE,QAAQ,MAAM,GAAG,IAAI;AAAA,EAC3E;AAAA;AAAA,EAGA,QAAQ,MAAoB;AAC1B,WAAO,KAAK,QAAQ,GAAG,KAAK,MAAM,qBAAqB,EAAE,QAAQ,OAAO,aAAa,MAAM,GAAG,EAAE,GAAG,MAAM,SAAS,MAAM,CAAC;AAAA,EAC3H;AAAA,EAEA,QAAQ,OAAwB,MAAoB;AAClD,WAAO,KAAK,IAAI,SAAS,OAAO,IAAI;AAAA,EACtC;AAAA,EACA,aAAa,OAAwB,MAAoB;AACvD,WAAO,KAAK,IAAI,UAAU,OAAO,IAAI;AAAA,EACvC;AAAA,EACA,YAAY,OAA2B,MAAoB;AACzD,WAAO,KAAK,IAAI,UAAU,OAAO,IAAI;AAAA,EACvC;AAAA,EACA,gBAAgB,OAA2B,MAAoB;AAC7D,WAAO,KAAK,IAAI,YAAY,OAAO,IAAI;AAAA,EACzC;AAAA,EACA,UAAU,OAA2C,MAAoB;AACvE,WAAO,KAAK,IAAI,eAAe,OAAO,IAAI;AAAA,EAC5C;AAAA,EACA,cAAc,OAA2C,MAAoB;AAC3E,WAAO,KAAK,IAAI,oBAAoB,OAAO,IAAI;AAAA,EACjD;AAAA,EACA,YAAY,OAA2B,MAAoB;AACzD,WAAO,KAAK,IAAI,iBAAiB,OAAO,IAAI;AAAA,EAC9C;AAAA,EACA,gBAAgB,OAAsD,MAAoB;AACxF,WAAO,KAAK,IAAI,YAAY,EAAE,QAAQ,YAAY,GAAG,MAAM,GAAG,IAAI;AAAA,EACpE;AAAA,EACA,cACE,OACA,MACA;AACA,WAAO,KAAK;AAAA,MACV,GAAG,KAAK,MAAM;AAAA,MACd;AAAA,QACE,QAAQ;AAAA,QACR,SAAS,EAAE,gBAAgB,mBAAmB;AAAA,QAC9C,MAAM,KAAK,UAAU,KAAK;AAAA,QAC1B,aAAa;AAAA,MACf;AAAA,MACA,EAAE,GAAG,MAAM,SAAS,MAAM;AAAA,IAC5B;AAAA,EACF;AAAA,EACA,eAAe,OAA4D,MAAoB;AAC7F,WAAO,KAAK,IAAI,WAAW,OAAO,IAAI;AAAA,EACxC;AAAA,EACA,SAAS,OAAwC,MAAoB;AACnE,WAAO,KAAK,IAAI,OAAO,OAAO,IAAI;AAAA,EACpC;AAAA,EACA,WAAW,OAA2C,MAAoB;AACxE,WAAO,KAAK,IAAI,gBAAgB,OAAO,IAAI;AAAA,EAC7C;AAAA,EACA,QACE,QAA6E,CAAC,GAC9E,MACA;AACA,WAAO,KAAK,IAAI,OAAO,OAAO,IAAI;AAAA,EACpC;AAAA,EACA,UAAU,OAA4C,MAAoB;AACxE,WAAO,KAAK,IAAI,QAAQ,OAAO,IAAI;AAAA,EACrC;AAAA,EACA,cAAc,OAA2C,MAAoB;AAC3E,WAAO,KAAK,IAAI,UAAU,OAAO,IAAI;AAAA,EACvC;AAAA,EACA,eACE,OACA,MACA;AACA,WAAO,KAAK,IAAI,cAAc,OAAO,IAAI;AAAA,EAC3C;AAAA,EACA,aAAa,OAA2C,MAAoB;AAC1E,WAAO,KAAK,IAAI,aAAa,OAAO,IAAI;AAAA,EAC1C;AAAA,EACA,QAAQ,QAA2B,CAAC,GAAG,MAAoB;AACzD,WAAO,KAAK,IAAI,QAAQ,OAAO,IAAI;AAAA,EACrC;AAAA,EACA,YAAY,QAAgE,CAAC,GAAG,MAAoB;AAClG,WAAO,KAAK,IAAI,UAAU,OAAO,IAAI;AAAA,EACvC;AAAA,EACA,UAAU,OAA8D,MAAoB;AAC1F,WAAO,KAAK,IAAI,QAAQ,OAAO,IAAI;AAAA,EACrC;AAAA,EACA,UAAU,OAAiE,MAAoB;AAC7F,WAAO,KAAK,IAAI,WAAW,OAAO,IAAI;AAAA,EACxC;AAAA,EACA,iBAAiB,OAA8C,MAAoB;AACjF,WAAO,KAAK,IAAI,gBAAgB,OAAO,IAAI;AAAA,EAC7C;AAAA,EACA,cAAc,OAA6B,MAAoB;AAC7D,WAAO,KAAK,IAAI,YAAY,OAAO,IAAI;AAAA,EACzC;AAAA,EACA,UAAU,OAA4D,MAAoB;AACxF,WAAO,KAAK,IAAI,eAAe,OAAO,IAAI;AAAA,EAC5C;AAAA,EACA,cAAc,OAA4D,MAAoB;AAC5F,WAAO,KAAK,IAAI,oBAAoB,OAAO,IAAI;AAAA,EACjD;AAAA,EACA,MAAM,OAA0C,MAAoB;AAClE,WAAO,KAAK,IAAI,WAAW,OAAO,IAAI;AAAA,EACxC;AAAA,EACA,UAAU,OAA0C,MAAoB;AACtE,WAAO,KAAK,IAAI,gBAAgB,OAAO,IAAI;AAAA,EAC7C;AAAA,EACA,MAAM,OAA4D,MAAoB;AACpF,WAAO,KAAK,IAAI,WAAW,OAAO,IAAI;AAAA,EACxC;AACF;AAGO,SAAS,aAAa,OAAsB,CAAC,GAAsB;AACxE,SAAO,IAAI,kBAAkB,IAAI;AACnC;","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.
|
|
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",
|