@xona-labs/xpay 0.2.21 → 0.2.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.
- package/CHANGELOG.md +41 -0
- package/README.md +33 -2
- package/SKILL.md +1 -0
- package/dist/cli/index.js +11 -1
- package/dist/cli/index.js.map +1 -1
- package/dist/cli/token.d.ts +7 -0
- package/dist/cli/token.d.ts.map +1 -1
- package/dist/cli/token.js +45 -0
- package/dist/cli/token.js.map +1 -1
- package/dist/index.d.ts +4 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +7 -0
- package/dist/index.js.map +1 -1
- package/dist/shop/index.d.ts +84 -8
- package/dist/shop/index.d.ts.map +1 -1
- package/dist/shop/index.js +148 -15
- package/dist/shop/index.js.map +1 -1
- package/dist/token/index.d.ts +11 -0
- package/dist/token/index.d.ts.map +1 -1
- package/dist/token/index.js +13 -1
- package/dist/token/index.js.map +1 -1
- package/dist/token/rwa.d.ts +46 -0
- package/dist/token/rwa.d.ts.map +1 -0
- package/dist/token/rwa.js +101 -0
- package/dist/token/rwa.js.map +1 -0
- package/dist/tools/index.d.ts.map +1 -1
- package/dist/tools/index.js +160 -1
- package/dist/tools/index.js.map +1 -1
- package/package.json +1 -1
package/dist/shop/index.js
CHANGED
|
@@ -1,18 +1,145 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* xona shop partner integration: product discovery across Google Shopping,
|
|
3
|
-
* Amazon, and eBay behind xona's x402-paywalled /shop/search endpoint
|
|
3
|
+
* Amazon, and eBay behind xona's x402-paywalled /shop/search endpoint, and
|
|
4
|
+
* image-based discovery (Google Lens) behind /shop/lens.
|
|
4
5
|
*
|
|
5
|
-
* Flow differs from zauth in one important way:
|
|
6
|
-
* (POST /api/shop/quote) that
|
|
7
|
-
*
|
|
8
|
-
* quote first, then pay: the paid
|
|
9
|
-
*
|
|
10
|
-
*
|
|
11
|
-
* there is no polling
|
|
6
|
+
* Flow differs from zauth in one important way: both doors have a FREE
|
|
7
|
+
* preflight (POST /api/shop/quote, POST /api/shop/lens/quote) that validates
|
|
8
|
+
* the input server-side and reports the exact price a paid call would cost.
|
|
9
|
+
* Callers should quote first, then pay: the paid doors reject bad input
|
|
10
|
+
* (non-product query, unreachable image URL) but still charge for the
|
|
11
|
+
* attempt, so the free quote is what keeps agents from paying for a call
|
|
12
|
+
* that returns nothing. Searches are synchronous, so there is no polling
|
|
13
|
+
* step.
|
|
12
14
|
*/
|
|
13
15
|
export const SHOP_BASE = process.env.XPAY_SHOP_ENDPOINT ?? "https://api.xona-agent.com";
|
|
14
16
|
/** Marketplaces the resource can fan out to. Price scales with how many are searched. */
|
|
15
17
|
export const SHOP_MARKETPLACES = ["google_shopping", "amazon", "ebay"];
|
|
18
|
+
/** Lens engine modes: identify = 1 Lens credit, shop = identify + marketplace fan-out. */
|
|
19
|
+
export const SHOP_LENS_MODES = ["identify", "shop"];
|
|
20
|
+
/**
|
|
21
|
+
* The lens door only accepts a publicly reachable URL (SerpAPI fetches the
|
|
22
|
+
* image, xona never proxies the bytes), so local files and base64 payloads
|
|
23
|
+
* are bridged through xona's free public image host first: uploads land in
|
|
24
|
+
* object storage with a public-read ACL and the returned URL passes the lens
|
|
25
|
+
* validation. Everything below up to fetchShopLensQuote implements that
|
|
26
|
+
* bridge.
|
|
27
|
+
*/
|
|
28
|
+
/**
|
|
29
|
+
* Cap on bytes we will upload. The host itself allows far more, but a lens
|
|
30
|
+
* image is a product photo; anything bigger than this is almost certainly a
|
|
31
|
+
* mistake (raw video frame, wrong file) and would waste upload time before
|
|
32
|
+
* the paid call even starts.
|
|
33
|
+
*/
|
|
34
|
+
export const SHOP_IMAGE_MAX_BYTES = 25 * 1024 * 1024;
|
|
35
|
+
/** Image types the upload endpoint accepts, keyed by magic bytes. */
|
|
36
|
+
function sniffImageMime(buf) {
|
|
37
|
+
if (buf.length >= 3 && buf[0] === 0xff && buf[1] === 0xd8 && buf[2] === 0xff)
|
|
38
|
+
return "image/jpeg";
|
|
39
|
+
if (buf.length >= 8 && buf[0] === 0x89 && buf[1] === 0x50 && buf[2] === 0x4e && buf[3] === 0x47)
|
|
40
|
+
return "image/png";
|
|
41
|
+
if (buf.length >= 6 && buf[0] === 0x47 && buf[1] === 0x49 && buf[2] === 0x46 && buf[3] === 0x38)
|
|
42
|
+
return "image/gif";
|
|
43
|
+
if (buf.length >= 12 &&
|
|
44
|
+
buf[0] === 0x52 && buf[1] === 0x49 && buf[2] === 0x46 && buf[3] === 0x46 &&
|
|
45
|
+
buf[8] === 0x57 && buf[9] === 0x45 && buf[10] === 0x42 && buf[11] === 0x50)
|
|
46
|
+
return "image/webp";
|
|
47
|
+
return null;
|
|
48
|
+
}
|
|
49
|
+
/**
|
|
50
|
+
* Upload image bytes to xona's public image host and return the public URL.
|
|
51
|
+
* Free (no wallet): this is the general-purpose upload endpoint, not an x402
|
|
52
|
+
* door. The type is sniffed from magic bytes rather than trusted from the
|
|
53
|
+
* caller, because the endpoint rejects non-image types anyway.
|
|
54
|
+
*/
|
|
55
|
+
export async function uploadShopImage(bytes, filename) {
|
|
56
|
+
if (bytes.length === 0)
|
|
57
|
+
throw new Error("image is empty");
|
|
58
|
+
if (bytes.length > SHOP_IMAGE_MAX_BYTES) {
|
|
59
|
+
throw new Error(`image is ${bytes.length} bytes; max ${SHOP_IMAGE_MAX_BYTES} (is this really a product photo?)`);
|
|
60
|
+
}
|
|
61
|
+
const mime = sniffImageMime(bytes);
|
|
62
|
+
if (!mime)
|
|
63
|
+
throw new Error("unrecognized image format: expected JPEG, PNG, GIF, or WebP");
|
|
64
|
+
const form = new FormData();
|
|
65
|
+
const ext = mime.split("/")[1];
|
|
66
|
+
form.append("image", new Blob([bytes], { type: mime }), filename ?? `lens-image.${ext}`);
|
|
67
|
+
const res = await fetch(`${SHOP_BASE}/api/upload/image`, { method: "POST", body: form });
|
|
68
|
+
const text = await res.text();
|
|
69
|
+
let data;
|
|
70
|
+
try {
|
|
71
|
+
data = text ? JSON.parse(text) : {};
|
|
72
|
+
}
|
|
73
|
+
catch {
|
|
74
|
+
data = { raw: text };
|
|
75
|
+
}
|
|
76
|
+
if (!res.ok) {
|
|
77
|
+
const detail = typeof data === "object" && data !== null && "message" in data
|
|
78
|
+
? String(data.message)
|
|
79
|
+
: text.slice(0, 200);
|
|
80
|
+
throw new Error(`image upload ${res.status}${detail ? `: ${detail}` : ""}`);
|
|
81
|
+
}
|
|
82
|
+
const url = data?.data?.url;
|
|
83
|
+
if (typeof url !== "string" || !url) {
|
|
84
|
+
throw new Error("image upload succeeded but no URL came back");
|
|
85
|
+
}
|
|
86
|
+
return url;
|
|
87
|
+
}
|
|
88
|
+
/**
|
|
89
|
+
* Resolve whichever image input the caller provided into the public URL the
|
|
90
|
+
* lens door requires. Exactly one of the three fields must be set: silently
|
|
91
|
+
* preferring one over another would hide a caller bug (two different images).
|
|
92
|
+
*/
|
|
93
|
+
export async function resolveLensImageUrl(input) {
|
|
94
|
+
const provided = ["image_url", "image_path", "image_base64"].filter((k) => input[k]);
|
|
95
|
+
if (provided.length !== 1) {
|
|
96
|
+
throw new Error(`provide exactly one of image_url, image_path, image_base64 (got ${provided.length ? provided.join(" + ") : "none"})`);
|
|
97
|
+
}
|
|
98
|
+
if (input.image_url)
|
|
99
|
+
return { image_url: input.image_url, uploaded: false };
|
|
100
|
+
let bytes;
|
|
101
|
+
let filename;
|
|
102
|
+
if (input.image_path) {
|
|
103
|
+
const { readFile } = await import("node:fs/promises");
|
|
104
|
+
const { basename } = await import("node:path");
|
|
105
|
+
bytes = new Uint8Array(await readFile(input.image_path));
|
|
106
|
+
filename = basename(input.image_path);
|
|
107
|
+
}
|
|
108
|
+
else {
|
|
109
|
+
// Accept both a bare base64 string and a full data URI.
|
|
110
|
+
const b64 = input.image_base64.replace(/^data:[^;,]+;base64,/, "").replace(/\s/g, "");
|
|
111
|
+
bytes = new Uint8Array(Buffer.from(b64, "base64"));
|
|
112
|
+
}
|
|
113
|
+
return { image_url: await uploadShopImage(bytes, filename), uploaded: true };
|
|
114
|
+
}
|
|
115
|
+
/**
|
|
116
|
+
* Free preflight against /api/shop/lens/quote. Validates the image URL is a
|
|
117
|
+
* publicly reachable http(s) URL (the dominant failure mode) and reports the
|
|
118
|
+
* exact price the paid call would cost for the requested mode. No wallet, no
|
|
119
|
+
* Lens credit spent.
|
|
120
|
+
*/
|
|
121
|
+
export async function fetchShopLensQuote(params) {
|
|
122
|
+
const res = await fetch(`${SHOP_BASE}/api/shop/lens/quote`, {
|
|
123
|
+
method: "POST",
|
|
124
|
+
headers: { "content-type": "application/json" },
|
|
125
|
+
body: JSON.stringify(params),
|
|
126
|
+
});
|
|
127
|
+
const text = await res.text();
|
|
128
|
+
let data;
|
|
129
|
+
try {
|
|
130
|
+
data = text ? JSON.parse(text) : {};
|
|
131
|
+
}
|
|
132
|
+
catch {
|
|
133
|
+
data = { raw: text };
|
|
134
|
+
}
|
|
135
|
+
if (!res.ok) {
|
|
136
|
+
const detail = typeof data === "object" && data !== null && "message" in data
|
|
137
|
+
? String(data.message)
|
|
138
|
+
: text.slice(0, 200);
|
|
139
|
+
throw new Error(`shop lens quote ${res.status}${detail ? `: ${detail}` : ""}`);
|
|
140
|
+
}
|
|
141
|
+
return data;
|
|
142
|
+
}
|
|
16
143
|
/** Free preflight against /api/shop/quote. No wallet, no SerpAPI credit spent. */
|
|
17
144
|
export async function fetchShopQuote(params) {
|
|
18
145
|
const res = await fetch(`${SHOP_BASE}/api/shop/quote`, {
|
|
@@ -45,17 +172,23 @@ export async function fetchShopQuote(params) {
|
|
|
45
172
|
export function compactShopResult(data) {
|
|
46
173
|
if (typeof data !== "object" || data === null)
|
|
47
174
|
return data;
|
|
48
|
-
const { results, ...rest } = data;
|
|
175
|
+
const { results, marketplace_comparison, ...rest } = data;
|
|
49
176
|
if (!Array.isArray(results))
|
|
50
177
|
return data;
|
|
51
178
|
return {
|
|
52
179
|
...rest,
|
|
53
|
-
results: results.map(
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
180
|
+
results: results.map(compactProduct),
|
|
181
|
+
// Lens mode=shop nests a second result list: the marketplace comparison
|
|
182
|
+
// run on the product name derived from the image.
|
|
183
|
+
...(marketplace_comparison !== undefined
|
|
184
|
+
? { marketplace_comparison: compactShopResult(marketplace_comparison) }
|
|
185
|
+
: {}),
|
|
59
186
|
};
|
|
60
187
|
}
|
|
188
|
+
function compactProduct(p) {
|
|
189
|
+
if (typeof p !== "object" || p === null)
|
|
190
|
+
return p;
|
|
191
|
+
const { image: _image, product_id: _pid, position: _pos, sponsored: _sponsored, relevance_score: _score, badges: _badges, ...keep } = p;
|
|
192
|
+
return keep;
|
|
193
|
+
}
|
|
61
194
|
//# sourceMappingURL=index.js.map
|
package/dist/shop/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/shop/index.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/shop/index.ts"],"names":[],"mappings":"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"}
|
package/dist/token/index.d.ts
CHANGED
|
@@ -23,6 +23,8 @@ export interface TokenInfo {
|
|
|
23
23
|
organicScore?: number;
|
|
24
24
|
tokenProgram?: string;
|
|
25
25
|
icon?: string;
|
|
26
|
+
/** Jupiter's tag list (e.g. verified, rwa, stocks, xstocks, yield). */
|
|
27
|
+
tags?: string[];
|
|
26
28
|
}
|
|
27
29
|
export interface TokenApiOptions {
|
|
28
30
|
/** Jupiter API base. Default https://api.jup.ag (env: XPAY_JUPITER_ENDPOINT). */
|
|
@@ -75,6 +77,15 @@ export declare function enrichTokenBalances(balances: Array<{
|
|
|
75
77
|
address?: string;
|
|
76
78
|
isNative?: boolean;
|
|
77
79
|
}>, opts?: TokenApiOptions): Promise<EnrichedTokenBalance[]>;
|
|
80
|
+
/**
|
|
81
|
+
* Raw Jupiter search, exported for callers that need the unranked result set
|
|
82
|
+
* (e.g. RWA discovery, which filters by tag before ranking). `limit` above the
|
|
83
|
+
* API's default 20 is passed through; at or below it is left client-side so
|
|
84
|
+
* findTokens keeps ranking from the full default window.
|
|
85
|
+
*/
|
|
86
|
+
export declare function searchTokens(query: string, opts?: TokenApiOptions & {
|
|
87
|
+
limit?: number;
|
|
88
|
+
}): Promise<TokenInfo[]>;
|
|
78
89
|
/** GET with a 10s timeout and backoff retries on 429 (keyless bucket is small). */
|
|
79
90
|
export declare function jupiterFetch(url: string, apiKey?: string, init?: RequestInit): Promise<unknown>;
|
|
80
91
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/token/index.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAQH,0FAA0F;AAC1F,eAAO,MAAM,eAAe,gDAAgD,CAAC;AAE7E,MAAM,WAAW,SAAS;IACxB,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;IACjB,mFAAmF;IACnF,QAAQ,EAAE,OAAO,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,IAAI,CAAC,EAAE,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/token/index.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAQH,0FAA0F;AAC1F,eAAO,MAAM,eAAe,gDAAgD,CAAC;AAE7E,MAAM,WAAW,SAAS;IACxB,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;IACjB,mFAAmF;IACnF,QAAQ,EAAE,OAAO,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,uEAAuE;IACvE,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;CACjB;AAED,MAAM,WAAW,eAAe;IAC9B,iFAAiF;IACjF,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,8EAA8E;IAC9E,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,8FAA8F;AAC9F,qBAAa,mBAAoB,SAAQ,KAAK;IAC5C,QAAQ,CAAC,UAAU,EAAE,SAAS,EAAE,CAAC;gBACrB,KAAK,EAAE,MAAM,EAAE,UAAU,EAAE,SAAS,EAAE;CAUnD;AAED;;;GAGG;AACH,wBAAsB,UAAU,CAC9B,KAAK,EAAE,MAAM,EACb,IAAI,GAAE,eAAe,GAAG;IAAE,KAAK,CAAC,EAAE,MAAM,CAAA;CAAO,GAC9C,OAAO,CAAC,SAAS,EAAE,CAAC,CAetB;AAED;;;;GAIG;AACH,wBAAsB,iBAAiB,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,GAAE,eAAoB,GAAG,OAAO,CAAC,SAAS,CAAC,CAoDrG;AAED,qEAAqE;AACrE,MAAM,WAAW,oBAAoB;IACnC,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AAED;;;;;;GAMG;AACH,wBAAsB,mBAAmB,CACvC,QAAQ,EAAE,KAAK,CAAC;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAC;IAAC,OAAO,CAAC,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,EAAE,OAAO,CAAA;CAAE,CAAC,EAC1H,IAAI,GAAE,eAAoB,GACzB,OAAO,CAAC,oBAAoB,EAAE,CAAC,CA0BjC;AAqBD;;;;;GAKG;AACH,wBAAsB,YAAY,CAChC,KAAK,EAAE,MAAM,EACb,IAAI,GAAE,eAAe,GAAG;IAAE,KAAK,CAAC,EAAE,MAAM,CAAA;CAAO,GAC9C,OAAO,CAAC,SAAS,EAAE,CAAC,CAEtB;AAiCD,mFAAmF;AACnF,wBAAsB,YAAY,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC,OAAO,CAAC,CA2BrG"}
|
package/dist/token/index.js
CHANGED
|
@@ -126,11 +126,22 @@ export async function enrichTokenBalances(balances, opts = {}) {
|
|
|
126
126
|
return balances;
|
|
127
127
|
}
|
|
128
128
|
}
|
|
129
|
-
|
|
129
|
+
/**
|
|
130
|
+
* Raw Jupiter search, exported for callers that need the unranked result set
|
|
131
|
+
* (e.g. RWA discovery, which filters by tag before ranking). `limit` above the
|
|
132
|
+
* API's default 20 is passed through; at or below it is left client-side so
|
|
133
|
+
* findTokens keeps ranking from the full default window.
|
|
134
|
+
*/
|
|
135
|
+
export async function searchTokens(query, opts = {}) {
|
|
136
|
+
return searchJupiter(query, opts);
|
|
137
|
+
}
|
|
138
|
+
async function searchJupiter(query, opts = {}) {
|
|
130
139
|
const endpoint = opts.endpoint ?? process.env.XPAY_JUPITER_ENDPOINT ?? DEFAULT_ENDPOINT;
|
|
131
140
|
const apiKey = opts.apiKey ?? process.env.JUPITER_API_KEY;
|
|
132
141
|
const url = new URL("/tokens/v2/search", endpoint);
|
|
133
142
|
url.searchParams.set("query", query);
|
|
143
|
+
if (opts.limit && opts.limit > 20)
|
|
144
|
+
url.searchParams.set("limit", String(Math.min(opts.limit, 100)));
|
|
134
145
|
const body = (await jupiterFetch(url.toString(), apiKey));
|
|
135
146
|
if (!Array.isArray(body))
|
|
136
147
|
return [];
|
|
@@ -150,6 +161,7 @@ async function searchJupiter(query, opts) {
|
|
|
150
161
|
organicScore: numOrUndef(t.organicScore),
|
|
151
162
|
tokenProgram: t.tokenProgram,
|
|
152
163
|
icon: t.icon,
|
|
164
|
+
tags: Array.isArray(t.tags) ? t.tags : undefined,
|
|
153
165
|
}));
|
|
154
166
|
}
|
|
155
167
|
/** GET with a 10s timeout and backoff retries on 429 (keyless bucket is small). */
|
package/dist/token/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/token/index.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AACxD,OAAO,EAAE,OAAO,EAAE,MAAM,mBAAmB,CAAC;AAC5C,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAErD,MAAM,gBAAgB,GAAG,oBAAoB,CAAC;AAE9C,0FAA0F;AAC1F,MAAM,CAAC,MAAM,eAAe,GAAG,6CAA6C,CAAC;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/token/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* RWA (real-world asset) discovery on Solana — Jupiter Token API v2.
|
|
3
|
+
*
|
|
4
|
+
* "RWA" covers every tokenized off-chain asset: equities, ETFs, treasuries,
|
|
5
|
+
* commodities, private credit. What is actually TRADABLE on Solana DEXes
|
|
6
|
+
* today is narrower, and that is what this module surfaces:
|
|
7
|
+
*
|
|
8
|
+
* - Tokenized stocks/ETFs: Backed xStocks (TSLAx, SPYx, ...), Ondo Global
|
|
9
|
+
* Markets (TSLAon, GLDon, ...), Remora, Backpack Securities. Jupiter tags
|
|
10
|
+
* these `rwa` / `stocks` / `xstocks` on each token record.
|
|
11
|
+
* - Treasury-backed yieldcoins: Ondo USDY (tagged `yield`/`yb`, not `rwa`,
|
|
12
|
+
* so it is pinned here explicitly).
|
|
13
|
+
*
|
|
14
|
+
* Permissioned funds (BlackRock BUIDL, Ondo OUSG) exist on Solana but are
|
|
15
|
+
* KYC-gated: unverified on Jupiter, zero DEX liquidity, not swappable — they
|
|
16
|
+
* are deliberately excluded.
|
|
17
|
+
*
|
|
18
|
+
* Jupiter's tag ENDPOINT rejects `rwa`/`stocks`/`xstocks` as queries (only
|
|
19
|
+
* lst/verified work), so discovery sweeps the search endpoint with a few
|
|
20
|
+
* curated queries and filters by each token's `tags` array instead. Free,
|
|
21
|
+
* read-only, no wallet.
|
|
22
|
+
*/
|
|
23
|
+
import { type TokenInfo, type TokenApiOptions } from "./index.js";
|
|
24
|
+
export type RwaCategory = "stocks" | "treasuries";
|
|
25
|
+
export interface RwaToken extends TokenInfo {
|
|
26
|
+
category: RwaCategory;
|
|
27
|
+
/** Issuing platform, derived from Jupiter tags/naming. */
|
|
28
|
+
issuer: string;
|
|
29
|
+
}
|
|
30
|
+
export interface RwaFindOptions extends TokenApiOptions {
|
|
31
|
+
/** Substring filter on symbol/name, e.g. "tesla" matches TSLAx and TSLAon. */
|
|
32
|
+
query?: string;
|
|
33
|
+
/** Restrict to one category. Default: both. */
|
|
34
|
+
category?: RwaCategory;
|
|
35
|
+
/** Max results. Default 20. */
|
|
36
|
+
limit?: number;
|
|
37
|
+
/** Include unverified tokens (excluded by default — same scam caveat as any ticker). */
|
|
38
|
+
includeUnverified?: boolean;
|
|
39
|
+
}
|
|
40
|
+
/**
|
|
41
|
+
* List tradable RWA tokens on Solana, ranked by liquidity. The underlying
|
|
42
|
+
* sweep (5 Jupiter calls) is cached in-process for 5 minutes; query/category
|
|
43
|
+
* filtering is applied per call on the cached set.
|
|
44
|
+
*/
|
|
45
|
+
export declare function findRwaTokens(opts?: RwaFindOptions): Promise<RwaToken[]>;
|
|
46
|
+
//# sourceMappingURL=rwa.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"rwa.d.ts","sourceRoot":"","sources":["../../src/token/rwa.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;GAqBG;AAEH,OAAO,EAAgB,KAAK,SAAS,EAAE,KAAK,eAAe,EAAE,MAAM,YAAY,CAAC;AAehF,MAAM,MAAM,WAAW,GAAG,QAAQ,GAAG,YAAY,CAAC;AAElD,MAAM,WAAW,QAAS,SAAQ,SAAS;IACzC,QAAQ,EAAE,WAAW,CAAC;IACtB,0DAA0D;IAC1D,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,cAAe,SAAQ,eAAe;IACrD,8EAA8E;IAC9E,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,+CAA+C;IAC/C,QAAQ,CAAC,EAAE,WAAW,CAAC;IACvB,+BAA+B;IAC/B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,wFAAwF;IACxF,iBAAiB,CAAC,EAAE,OAAO,CAAC;CAC7B;AAID;;;;GAIG;AACH,wBAAsB,aAAa,CAAC,IAAI,GAAE,cAAmB,GAAG,OAAO,CAAC,QAAQ,EAAE,CAAC,CAalF"}
|
|
@@ -0,0 +1,101 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* RWA (real-world asset) discovery on Solana — Jupiter Token API v2.
|
|
3
|
+
*
|
|
4
|
+
* "RWA" covers every tokenized off-chain asset: equities, ETFs, treasuries,
|
|
5
|
+
* commodities, private credit. What is actually TRADABLE on Solana DEXes
|
|
6
|
+
* today is narrower, and that is what this module surfaces:
|
|
7
|
+
*
|
|
8
|
+
* - Tokenized stocks/ETFs: Backed xStocks (TSLAx, SPYx, ...), Ondo Global
|
|
9
|
+
* Markets (TSLAon, GLDon, ...), Remora, Backpack Securities. Jupiter tags
|
|
10
|
+
* these `rwa` / `stocks` / `xstocks` on each token record.
|
|
11
|
+
* - Treasury-backed yieldcoins: Ondo USDY (tagged `yield`/`yb`, not `rwa`,
|
|
12
|
+
* so it is pinned here explicitly).
|
|
13
|
+
*
|
|
14
|
+
* Permissioned funds (BlackRock BUIDL, Ondo OUSG) exist on Solana but are
|
|
15
|
+
* KYC-gated: unverified on Jupiter, zero DEX liquidity, not swappable — they
|
|
16
|
+
* are deliberately excluded.
|
|
17
|
+
*
|
|
18
|
+
* Jupiter's tag ENDPOINT rejects `rwa`/`stocks`/`xstocks` as queries (only
|
|
19
|
+
* lst/verified work), so discovery sweeps the search endpoint with a few
|
|
20
|
+
* curated queries and filters by each token's `tags` array instead. Free,
|
|
21
|
+
* read-only, no wallet.
|
|
22
|
+
*/
|
|
23
|
+
import { searchTokens } from "./index.js";
|
|
24
|
+
/**
|
|
25
|
+
* Search queries that together surface every rwa-tagged token family on
|
|
26
|
+
* Jupiter. "Ondo Tokenized" is deliberately specific: the generic "tokenized"
|
|
27
|
+
* ranking is volume-based and lets low-liquidity Ondo listings fall out of
|
|
28
|
+
* its top-100 between runs.
|
|
29
|
+
*/
|
|
30
|
+
const SWEEP_QUERIES = ["xstock", "Ondo Tokenized", "tokenized", "treasury", "remora"];
|
|
31
|
+
/** Ondo USDY — treasury-backed yieldcoin, tagged yield/yb on Jupiter rather than rwa. */
|
|
32
|
+
const USDY_MINT = "A1KLoBrKBde8Ty9qtNQUtq3C2ortoC3u7twggz7sEto6";
|
|
33
|
+
const CACHE_TTL_MS = 5 * 60_000;
|
|
34
|
+
let sweepCache;
|
|
35
|
+
/**
|
|
36
|
+
* List tradable RWA tokens on Solana, ranked by liquidity. The underlying
|
|
37
|
+
* sweep (5 Jupiter calls) is cached in-process for 5 minutes; query/category
|
|
38
|
+
* filtering is applied per call on the cached set.
|
|
39
|
+
*/
|
|
40
|
+
export async function findRwaTokens(opts = {}) {
|
|
41
|
+
const all = await sweep(opts);
|
|
42
|
+
const q = opts.query?.trim().toLowerCase();
|
|
43
|
+
const limit = opts.limit ?? 20;
|
|
44
|
+
return all
|
|
45
|
+
.filter((t) => (opts.category ? t.category === opts.category : true))
|
|
46
|
+
.filter((t) => (opts.includeUnverified ? true : t.verified))
|
|
47
|
+
.filter((t) => q ? t.symbol.toLowerCase().includes(q) || t.name.toLowerCase().includes(q) : true)
|
|
48
|
+
.slice(0, limit);
|
|
49
|
+
}
|
|
50
|
+
async function sweep(opts) {
|
|
51
|
+
if (sweepCache && Date.now() - sweepCache.at < CACHE_TTL_MS)
|
|
52
|
+
return sweepCache.tokens;
|
|
53
|
+
const byMint = new Map();
|
|
54
|
+
// Sequential on purpose: the keyless Jupiter bucket is small and
|
|
55
|
+
// jupiterFetch's 429 backoff works better without parallel bursts.
|
|
56
|
+
for (const query of SWEEP_QUERIES) {
|
|
57
|
+
let batch = [];
|
|
58
|
+
try {
|
|
59
|
+
batch = await searchTokens(query, { ...opts, limit: 100 });
|
|
60
|
+
}
|
|
61
|
+
catch {
|
|
62
|
+
// One failed sweep query degrades coverage, not the whole listing.
|
|
63
|
+
continue;
|
|
64
|
+
}
|
|
65
|
+
for (const t of batch) {
|
|
66
|
+
const tags = t.tags ?? [];
|
|
67
|
+
if (!tags.includes("rwa") && !tags.includes("stocks"))
|
|
68
|
+
continue;
|
|
69
|
+
byMint.set(t.mint, { ...t, category: "stocks", issuer: issuerOf(t) });
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
try {
|
|
73
|
+
const [usdy] = await searchTokens(USDY_MINT, opts);
|
|
74
|
+
if (usdy && usdy.mint === USDY_MINT) {
|
|
75
|
+
byMint.set(usdy.mint, { ...usdy, category: "treasuries", issuer: "Ondo" });
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
catch {
|
|
79
|
+
/* listing survives without USDY */
|
|
80
|
+
}
|
|
81
|
+
const tokens = [...byMint.values()].sort((a, b) => {
|
|
82
|
+
if (a.verified !== b.verified)
|
|
83
|
+
return a.verified ? -1 : 1;
|
|
84
|
+
return (b.liquidity ?? 0) - (a.liquidity ?? 0);
|
|
85
|
+
});
|
|
86
|
+
if (tokens.length > 0)
|
|
87
|
+
sweepCache = { at: Date.now(), tokens };
|
|
88
|
+
return tokens;
|
|
89
|
+
}
|
|
90
|
+
function issuerOf(t) {
|
|
91
|
+
if (t.tags?.includes("xstocks") || / xStock$/.test(t.name))
|
|
92
|
+
return "Backed xStocks";
|
|
93
|
+
if (t.name.includes("(Ondo Tokenized)"))
|
|
94
|
+
return "Ondo Global Markets";
|
|
95
|
+
if (/remora/i.test(t.name))
|
|
96
|
+
return "Remora";
|
|
97
|
+
if (/backpack/i.test(t.name))
|
|
98
|
+
return "Backpack Securities";
|
|
99
|
+
return "other";
|
|
100
|
+
}
|
|
101
|
+
//# sourceMappingURL=rwa.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"rwa.js","sourceRoot":"","sources":["../../src/token/rwa.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/tools/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/tools/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,aAAa,CAAC;AA4BxC,MAAM,WAAW,UAAU,CAAC,IAAI;IAC9B,KAAK,EAAE,IAAI,EAAE,CAAC;IACd,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC;CAChF;AAED,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACvC;AAED,MAAM,WAAW,WAAW;IAC1B,kFAAkF;IAClF,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,yCAAyC;AACzC,wBAAgB,SAAS,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,GAAE,WAAgB,GAAG,UAAU,CAAC,aAAa,CAAC,CA0vBvF;AAED,gFAAgF;AAChF,wBAAgB,SAAS,CAAC,IAAI,EAAE,IAAI;;;;;;;;;qCA5wBD,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,OAAO,CAAC,OAAO,CAAC;EAyxB9E;AAED,sDAAsD;AACtD,wBAAgB,SAAS,CAAC,IAAI,EAAE,IAAI;;;;;;;;qCA5xBD,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,OAAO,CAAC,OAAO,CAAC;EA0yB9E"}
|