@aifinpay/deployments 1.1.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/README.md +133 -0
- package/USAGE.md +534 -0
- package/dist/artifacts.d.ts +62 -0
- package/dist/artifacts.d.ts.map +1 -0
- package/dist/artifacts.js +210 -0
- package/dist/artifacts.js.map +1 -0
- package/dist/build.d.ts +2 -0
- package/dist/build.d.ts.map +1 -0
- package/dist/build.js +25 -0
- package/dist/build.js.map +1 -0
- package/dist/grabber.d.ts +42 -0
- package/dist/grabber.d.ts.map +1 -0
- package/dist/grabber.js +379 -0
- package/dist/grabber.js.map +1 -0
- package/dist/index.d.ts +8 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +6 -0
- package/dist/index.js.map +1 -0
- package/dist/registry.d.ts +147 -0
- package/dist/registry.d.ts.map +1 -0
- package/dist/registry.js +263 -0
- package/dist/registry.js.map +1 -0
- package/dist/types.d.ts +139 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +14 -0
- package/dist/types.js.map +1 -0
- package/package.json +36 -0
- package/registry/abi/evm/B2BSplitterV14/B2BSplitterV14.json +1318 -0
- package/registry/abi/evm/TimelockWrapper/TimelockWrapper.json +277 -0
- package/registry/abi/tron/.gitkeep +0 -0
- package/registry/idl/aptos/.gitkeep +0 -0
- package/registry/idl/casper/.gitkeep +0 -0
- package/registry/idl/casper/aifinpay-casper-schema.json +108 -0
- package/registry/idl/solana/splitter-v14/splitter.devnet.json +1962 -0
- package/registry/idl/solana/splitter-v14/splitter.mainnet.json +1962 -0
- package/registry/splitter/INDEX.md +163 -0
- package/registry/splitter/casper/README.md +101 -0
- package/registry/splitter/casper/deployments.json +110 -0
- package/registry/splitter/evm/v1.1/README.md +32 -0
- package/registry/splitter/evm/v1.1/deployments.json +45 -0
- package/registry/splitter/evm/v1.2/README.md +47 -0
- package/registry/splitter/evm/v1.2/deployments.json +76 -0
- package/registry/splitter/evm/v1.3/README.md +78 -0
- package/registry/splitter/evm/v1.3/deployments.json +280 -0
- package/registry/splitter/evm/v1.4/README.md +75 -0
- package/registry/splitter/evm/v1.4/deployments.json +358 -0
- package/registry/splitter/solana/README.md +49 -0
- package/registry/splitter/solana/deployments.json +48 -0
package/dist/grabber.js
ADDED
|
@@ -0,0 +1,379 @@
|
|
|
1
|
+
import { existsSync, mkdirSync, writeFileSync } from "node:fs";
|
|
2
|
+
import { dirname, join } from "node:path";
|
|
3
|
+
import { fileURLToPath } from "node:url";
|
|
4
|
+
const ROOT = dirname(fileURLToPath(import.meta.url));
|
|
5
|
+
export const ABI_DIR = join(ROOT, "../registry/abi");
|
|
6
|
+
export const IDL_DIR = join(ROOT, "../registry/idl");
|
|
7
|
+
const EVM_VERSIONS = new Set(["1.2", "1.4"]);
|
|
8
|
+
const SOLANA_VERSIONS = new Set(["1.4", "1.4.1"]);
|
|
9
|
+
/** Ensure an output directory exists. */
|
|
10
|
+
export function ensureDir(dir) {
|
|
11
|
+
if (!existsSync(dir))
|
|
12
|
+
mkdirSync(dir, { recursive: true });
|
|
13
|
+
}
|
|
14
|
+
/**
|
|
15
|
+
* Fetch the directory listing of raw JSON files from a GitHub repository.
|
|
16
|
+
* Uses the public GitHub API (no auth required for public repos).
|
|
17
|
+
*/
|
|
18
|
+
export async function listGitHubFiles(owner, repo, path, ref) {
|
|
19
|
+
const url = `https://api.github.com/repos/${owner}/${repo}/contents/${path}?ref=${ref}`;
|
|
20
|
+
const res = await fetch(url, {
|
|
21
|
+
headers: { Accept: "application/vnd.github+json", "User-Agent": "aifinpay-sdk-grabber" },
|
|
22
|
+
});
|
|
23
|
+
if (!res.ok) {
|
|
24
|
+
throw new Error(`GitHub listing failed: ${res.status} ${res.statusText} (${url})`);
|
|
25
|
+
}
|
|
26
|
+
const items = (await res.json());
|
|
27
|
+
return items
|
|
28
|
+
.filter((i) => i.type === "file" && i.name.endsWith(".json") && i.download_url)
|
|
29
|
+
.map((i) => i.download_url);
|
|
30
|
+
}
|
|
31
|
+
/** Fetch a single raw JSON document. */
|
|
32
|
+
export async function fetchJson(url) {
|
|
33
|
+
const res = await fetch(url, { headers: { "User-Agent": "aifinpay-sdk-grabber" } });
|
|
34
|
+
if (!res.ok) {
|
|
35
|
+
throw new Error(`Fetch failed: ${res.status} ${res.statusText} (${url})`);
|
|
36
|
+
}
|
|
37
|
+
return res.json();
|
|
38
|
+
}
|
|
39
|
+
/**
|
|
40
|
+
* Parse an EVM deployment filename and return its network + timestamp.
|
|
41
|
+
* Supports:
|
|
42
|
+
* {network}-{iso}.json
|
|
43
|
+
* {network}-v14-{network}-latest.json
|
|
44
|
+
* {network}-v13-latest.json (ignored because not 1.2/1.4)
|
|
45
|
+
* {network}-safe-multisig-{iso}.json (ignored, Safe metadata, not splitter)
|
|
46
|
+
*/
|
|
47
|
+
function parseEvmFilename(url) {
|
|
48
|
+
const name = url.split("/").pop() ?? "";
|
|
49
|
+
const base = name.replace(/\.json$/, "");
|
|
50
|
+
// Skip multisig metadata files and v1.3-only files
|
|
51
|
+
if (base.includes("safe-multisig"))
|
|
52
|
+
return null;
|
|
53
|
+
if (base.includes("-v13-") && !base.includes("-v14-"))
|
|
54
|
+
return null;
|
|
55
|
+
// E.g. amoy-2026-09-02T00-42-08-319Z
|
|
56
|
+
const datedMatch = /^(?<network>[a-z]+)-(?<year>\d{4})-(?<month>\d{2})-(?<day>\d{2})T(?<hh>\d{2})-(?<mm>\d{2})-(?<ss>\d{2})-(?<ms>\d+)Z$/.exec(base);
|
|
57
|
+
if (datedMatch?.groups) {
|
|
58
|
+
const { network, year, month, day, hh, mm, ss, ms } = datedMatch.groups;
|
|
59
|
+
return {
|
|
60
|
+
network,
|
|
61
|
+
timestamp: `${year}-${month}-${day}T${hh}:${mm}:${ss}.${ms}Z`,
|
|
62
|
+
version: inferVersion(base),
|
|
63
|
+
};
|
|
64
|
+
}
|
|
65
|
+
// E.g. polygon-v14-polygon-latest -> treated as latest known for that network
|
|
66
|
+
const latestMatch = /^(?<network>[a-z]+)-v14-(?<network2>[a-z]+)-latest$/.exec(base);
|
|
67
|
+
if (latestMatch?.groups) {
|
|
68
|
+
return {
|
|
69
|
+
network: latestMatch.groups.network,
|
|
70
|
+
timestamp: new Date().toISOString(),
|
|
71
|
+
version: "1.4",
|
|
72
|
+
};
|
|
73
|
+
}
|
|
74
|
+
return null;
|
|
75
|
+
}
|
|
76
|
+
function inferVersion(base) {
|
|
77
|
+
if (base.includes("-v14-") || base.endsWith("-v14"))
|
|
78
|
+
return "1.4";
|
|
79
|
+
if (base.includes("-v13-"))
|
|
80
|
+
return "1.3";
|
|
81
|
+
return "1.2";
|
|
82
|
+
}
|
|
83
|
+
function normalizeStablecoins(raw) {
|
|
84
|
+
if (raw.stablecoins && raw.stablecoins.length > 0) {
|
|
85
|
+
return raw.stablecoins.map((s) => ({ symbol: s.symbol, name: s.name, address: s.address }));
|
|
86
|
+
}
|
|
87
|
+
const out = [];
|
|
88
|
+
if (raw.usdc && raw.usdc !== "0x0000000000000000000000000000000000000000") {
|
|
89
|
+
out.push({ symbol: "USDC", name: "USDC", address: raw.usdc });
|
|
90
|
+
}
|
|
91
|
+
if (raw.usdt && raw.usdt !== "0x0000000000000000000000000000000000000000") {
|
|
92
|
+
out.push({ symbol: "USDT", name: "Tether USD", address: raw.usdt });
|
|
93
|
+
}
|
|
94
|
+
return out;
|
|
95
|
+
}
|
|
96
|
+
/**
|
|
97
|
+
* List and fetch EVM deployments. For each chainId keep only the latest record
|
|
98
|
+
* by (version desc, timestamp desc), restricted to v1.2 and v1.4.
|
|
99
|
+
*/
|
|
100
|
+
export async function grabEvmDeployments() {
|
|
101
|
+
const urls = await listGitHubFiles("AiFinPay", "evm-contract", "deployments", "dev");
|
|
102
|
+
const parsed = urls
|
|
103
|
+
.map((url) => ({ url, meta: parseEvmFilename(url) }))
|
|
104
|
+
.filter((x) => x.meta !== null)
|
|
105
|
+
.filter((x) => EVM_VERSIONS.has(x.meta.version));
|
|
106
|
+
const byChain = new Map();
|
|
107
|
+
for (const { url, meta } of parsed) {
|
|
108
|
+
const data = await fetchJson(url);
|
|
109
|
+
const version = meta.version;
|
|
110
|
+
const ts = Date.parse(data.timestamp || meta.timestamp);
|
|
111
|
+
if (Number.isNaN(ts))
|
|
112
|
+
continue;
|
|
113
|
+
const chainId = data.chainId;
|
|
114
|
+
const existing = byChain.get(chainId);
|
|
115
|
+
if (!existing || compareVersionTime(version, ts, existing.version, existing.ts) > 0) {
|
|
116
|
+
byChain.set(chainId, { ts, version, url, data });
|
|
117
|
+
}
|
|
118
|
+
}
|
|
119
|
+
const registry = {};
|
|
120
|
+
for (const [chainId, { version, url, data }] of byChain) {
|
|
121
|
+
registry[String(chainId)] = {
|
|
122
|
+
kind: "evm",
|
|
123
|
+
chainId,
|
|
124
|
+
network: data.network,
|
|
125
|
+
version,
|
|
126
|
+
splitterAddress: data.splitter.address,
|
|
127
|
+
tokenListAddress: data.splitter.tokenList,
|
|
128
|
+
profilesAddress: data.splitter.profiles,
|
|
129
|
+
admin: data.splitter.admin,
|
|
130
|
+
signer: data.splitter.signer,
|
|
131
|
+
pauser: data.splitter.pauser,
|
|
132
|
+
treasury: data.splitter.treasury,
|
|
133
|
+
runtimeCodeHash: data.runtimeCodeHash,
|
|
134
|
+
stablecoins: normalizeStablecoins(data.splitter),
|
|
135
|
+
settlementEnabled: data.settlementEnabled,
|
|
136
|
+
status: data.status,
|
|
137
|
+
deployedAt: data.timestamp,
|
|
138
|
+
sourceUrl: url,
|
|
139
|
+
abiPath: evmAbiPath(data.network),
|
|
140
|
+
};
|
|
141
|
+
}
|
|
142
|
+
return registry;
|
|
143
|
+
}
|
|
144
|
+
function evmAbiPath(network) {
|
|
145
|
+
const candidate = join(ABI_DIR, "evm", `B2BSplitterV14`, `B2BSplitterV14.json`);
|
|
146
|
+
if (existsSync(candidate)) {
|
|
147
|
+
return candidate.replace(join(ROOT, "../registry/"), "registry/");
|
|
148
|
+
}
|
|
149
|
+
return null;
|
|
150
|
+
}
|
|
151
|
+
/**
|
|
152
|
+
* Parse Solana deployment filenames:
|
|
153
|
+
* splitter.devnet.20260911-195503.json
|
|
154
|
+
* splitter.mainnet.20260911-200222.json
|
|
155
|
+
*/
|
|
156
|
+
function parseSolanaFilename(url) {
|
|
157
|
+
const name = url.split("/").pop() ?? "";
|
|
158
|
+
const match = /^splitter\.(?<cluster>mainnet|devnet)\.(?<year>\d{4})(?<month>\d{2})(?<day>\d{2})-(?<hh>\d{2})(?<mm>\d{2})(?<ss>\d{2})\.json$/.exec(name);
|
|
159
|
+
if (!match?.groups)
|
|
160
|
+
return null;
|
|
161
|
+
const { cluster, year, month, day, hh, mm, ss } = match.groups;
|
|
162
|
+
return {
|
|
163
|
+
cluster: cluster,
|
|
164
|
+
timestamp: `${year}-${month}-${day}T${hh}:${mm}:${ss}Z`,
|
|
165
|
+
};
|
|
166
|
+
}
|
|
167
|
+
/**
|
|
168
|
+
* List and fetch Solana splitter_v14 deployments. Keep latest per cluster.
|
|
169
|
+
*/
|
|
170
|
+
export async function grabSolanaDeployments() {
|
|
171
|
+
const urls = await listGitHubFiles("AiFinPay", "solana-contract", "deployments/splitter_v14", "dev");
|
|
172
|
+
const parsed = urls
|
|
173
|
+
.map((url) => ({ url, meta: parseSolanaFilename(url) }))
|
|
174
|
+
.filter((x) => x.meta !== null);
|
|
175
|
+
const byCluster = new Map();
|
|
176
|
+
for (const { url, meta } of parsed) {
|
|
177
|
+
const data = await fetchJson(url);
|
|
178
|
+
const version = data.metadata?.version ?? "1.4";
|
|
179
|
+
if (!SOLANA_VERSIONS.has(version))
|
|
180
|
+
continue;
|
|
181
|
+
const ts = Date.parse(meta.timestamp);
|
|
182
|
+
if (Number.isNaN(ts))
|
|
183
|
+
continue;
|
|
184
|
+
const existing = byCluster.get(meta.cluster);
|
|
185
|
+
if (!existing || ts > existing.ts) {
|
|
186
|
+
byCluster.set(meta.cluster, { ts, url, data });
|
|
187
|
+
}
|
|
188
|
+
}
|
|
189
|
+
const registry = {};
|
|
190
|
+
for (const [cluster, { url, data }] of byCluster) {
|
|
191
|
+
const idlPath = join(IDL_DIR, "solana/splitter-v14", `splitter.${cluster}.json`);
|
|
192
|
+
registry[cluster] = {
|
|
193
|
+
kind: "solana",
|
|
194
|
+
cluster,
|
|
195
|
+
version: data.metadata?.version ?? "1.4",
|
|
196
|
+
programAddress: data.address,
|
|
197
|
+
deployedAt: new Date().toISOString(),
|
|
198
|
+
sourceUrl: url,
|
|
199
|
+
idlPath: `registry/idl/solana/splitter-v14/splitter.${cluster}.json`,
|
|
200
|
+
idl: {
|
|
201
|
+
name: "splitter",
|
|
202
|
+
version: data.metadata?.version ?? "1.4.1",
|
|
203
|
+
},
|
|
204
|
+
};
|
|
205
|
+
}
|
|
206
|
+
return registry;
|
|
207
|
+
}
|
|
208
|
+
/**
|
|
209
|
+
* Compare two (version, timestamp) pairs.
|
|
210
|
+
* Higher semantic version wins; if equal, later timestamp wins.
|
|
211
|
+
*/
|
|
212
|
+
export function compareVersionTime(aVersion, aTime, bVersion, bTime) {
|
|
213
|
+
const va = versionRank(aVersion);
|
|
214
|
+
const vb = versionRank(bVersion);
|
|
215
|
+
if (va !== vb)
|
|
216
|
+
return va - vb;
|
|
217
|
+
return aTime - bTime;
|
|
218
|
+
}
|
|
219
|
+
function versionRank(v) {
|
|
220
|
+
return v
|
|
221
|
+
.split(".")
|
|
222
|
+
.map((n) => Number.parseInt(n, 10))
|
|
223
|
+
.reduce((acc, n, i) => acc + n * Math.pow(1000, 2 - i), 0);
|
|
224
|
+
}
|
|
225
|
+
/**
|
|
226
|
+
* Build the combined registry from upstream repos.
|
|
227
|
+
*/
|
|
228
|
+
export async function buildRegistry() {
|
|
229
|
+
const [evm, solana] = await Promise.all([grabEvmDeployments(), grabSolanaDeployments()]);
|
|
230
|
+
return {
|
|
231
|
+
evm,
|
|
232
|
+
solana,
|
|
233
|
+
generatedAt: new Date().toISOString(),
|
|
234
|
+
sources: [
|
|
235
|
+
"https://github.com/AiFinPay/evm-contract/tree/dev/deployments",
|
|
236
|
+
"https://github.com/AiFinPay/solana-contract/tree/dev/deployments/splitter_v14",
|
|
237
|
+
"https://github.com/AiFinPay/evm-contract/tree/dev/config",
|
|
238
|
+
],
|
|
239
|
+
};
|
|
240
|
+
}
|
|
241
|
+
/**
|
|
242
|
+
* Write per-ecosystem split registry files from the combined registry.
|
|
243
|
+
* Returns the list of file paths written.
|
|
244
|
+
* Uses the same schema as splitter versioned deployments.json for consistency.
|
|
245
|
+
*/
|
|
246
|
+
export function writeSplitRegistries(registry, outDir) {
|
|
247
|
+
const evmDir = join(outDir, "splitter/evm/v1.4");
|
|
248
|
+
const solanaDir = join(outDir, "splitter/solana");
|
|
249
|
+
ensureDir(evmDir);
|
|
250
|
+
ensureDir(solanaDir);
|
|
251
|
+
const evm14 = {
|
|
252
|
+
$schema: "./reference/payment-deployments.schema.json",
|
|
253
|
+
version: "1.4",
|
|
254
|
+
description: "B2BSplitter v1.4 — Full contract suite deployment",
|
|
255
|
+
schemaVersion: 1,
|
|
256
|
+
generatedAt: registry.generatedAt,
|
|
257
|
+
ecosystem: "evm",
|
|
258
|
+
protocolVersion: "v1.4",
|
|
259
|
+
source: {
|
|
260
|
+
repo: "AiFinPay/evm-contract",
|
|
261
|
+
commit: "a54a4c107de7bb42f54e411e621d3897938bfc31",
|
|
262
|
+
path: "deployments/*-v14-*-latest.json",
|
|
263
|
+
},
|
|
264
|
+
governance: {
|
|
265
|
+
prod: {
|
|
266
|
+
safe: "0x5AFe07483886DFa0B77C6d60212B6E52D78ac11e",
|
|
267
|
+
version: "1.5.0",
|
|
268
|
+
threshold: 3,
|
|
269
|
+
owners: [
|
|
270
|
+
"0x25A834b6fEC79e9ee6ED04Ef5b97440149C6Cc24",
|
|
271
|
+
"0x2118c57dEBD53f614DDfE464Ff2941BE6646cA82",
|
|
272
|
+
"0x3C31dd9daCeC5473cC9B660CD69247A20701cF19",
|
|
273
|
+
"0x588A80e94a762C670711ff77CC60a2e65E64F53A",
|
|
274
|
+
],
|
|
275
|
+
},
|
|
276
|
+
testnet: {
|
|
277
|
+
safe: "0xc9ab36c2af2888414c7ea9160d9e33b773c2b388",
|
|
278
|
+
version: "1.4.1",
|
|
279
|
+
threshold: 3,
|
|
280
|
+
owners: [
|
|
281
|
+
"0x25A834b6fEC79e9ee6ED04Ef5b97440149C6Cc24",
|
|
282
|
+
"0x2118c57dEBD53f614DDfE464Ff2941BE6646cA82",
|
|
283
|
+
"0x3C31dd9daCeC5473cC9B660CD69247A20701cF19",
|
|
284
|
+
"0x588A80e94a762C670711ff77CC60a2e65E64F53A",
|
|
285
|
+
],
|
|
286
|
+
},
|
|
287
|
+
},
|
|
288
|
+
deployments: Object.values(registry.evm).map((evm) => {
|
|
289
|
+
const isTestnet = evm.network === "amoy";
|
|
290
|
+
const disabledReasonMap = {
|
|
291
|
+
disabled: "Backend v1.4 receipt verification and end-to-end settlement gate are incomplete",
|
|
292
|
+
invalid: "INVALID: splitter address equals TokenList; Profiles has no runtime code; redeploy required",
|
|
293
|
+
retired: "Superseded by newer deployment",
|
|
294
|
+
};
|
|
295
|
+
return {
|
|
296
|
+
chain: evm.network,
|
|
297
|
+
chainId: evm.chainId,
|
|
298
|
+
environment: isTestnet ? "dev" : "prod",
|
|
299
|
+
testnet: isTestnet,
|
|
300
|
+
status: evm.status,
|
|
301
|
+
settlementEnabled: evm.settlementEnabled,
|
|
302
|
+
disabledReason: evm.status !== "enabled" ? (disabledReasonMap[evm.status] || undefined) : undefined,
|
|
303
|
+
runtimeCodeHash: evm.runtimeCodeHash,
|
|
304
|
+
contracts: {
|
|
305
|
+
splitter: evm.splitterAddress,
|
|
306
|
+
tokenList: evm.tokenListAddress,
|
|
307
|
+
profiles: evm.profilesAddress,
|
|
308
|
+
admin: evm.admin,
|
|
309
|
+
signer: evm.signer,
|
|
310
|
+
pauser: evm.pauser,
|
|
311
|
+
treasury: evm.treasury,
|
|
312
|
+
},
|
|
313
|
+
assets: evm.stablecoins.map((s) => ({
|
|
314
|
+
symbol: s.symbol,
|
|
315
|
+
name: s.name || s.symbol,
|
|
316
|
+
address: s.address,
|
|
317
|
+
})),
|
|
318
|
+
safe: {
|
|
319
|
+
address: isTestnet ? "0xc9ab36c2af2888414c7ea9160d9e33b773c2b388" : "0x5afe07483886dfa0b77c6d60212b6e52d78ac11e",
|
|
320
|
+
version: isTestnet ? "1.4.1" : "1.5.0",
|
|
321
|
+
threshold: 3,
|
|
322
|
+
},
|
|
323
|
+
};
|
|
324
|
+
}),
|
|
325
|
+
sourceArtifact: {
|
|
326
|
+
path: "./splitter/evm/v1.4/deployments.json",
|
|
327
|
+
retrievedAt: new Date().toISOString().split("T")[0],
|
|
328
|
+
},
|
|
329
|
+
};
|
|
330
|
+
const solana14 = {
|
|
331
|
+
$schema: "./reference/payment-deployments.schema.json",
|
|
332
|
+
version: "1.4",
|
|
333
|
+
description: "Solana Splitter v1.4 — Program deployment",
|
|
334
|
+
schemaVersion: 1,
|
|
335
|
+
generatedAt: registry.generatedAt,
|
|
336
|
+
ecosystem: "solana",
|
|
337
|
+
protocolVersion: "v1.4",
|
|
338
|
+
source: {
|
|
339
|
+
repo: "AiFinPay/solana-contract",
|
|
340
|
+
commit: "e5df8f5436cf646ab495381eee04e0d1a10b4e2f",
|
|
341
|
+
path: "deployments/splitter_v14/",
|
|
342
|
+
},
|
|
343
|
+
deployments: Object.values(registry.solana).map((solana) => ({
|
|
344
|
+
cluster: solana.cluster,
|
|
345
|
+
environment: solana.cluster === "devnet" ? "dev" : "prod",
|
|
346
|
+
testnet: solana.cluster === "devnet",
|
|
347
|
+
status: "disabled",
|
|
348
|
+
settlementEnabled: false,
|
|
349
|
+
disabledReason: solana.cluster === "devnet"
|
|
350
|
+
? "Backend Solana receipt verification is not implemented"
|
|
351
|
+
: "Backend Solana receipt verification is not implemented and upgrade authority is not multisig",
|
|
352
|
+
programId: solana.programAddress,
|
|
353
|
+
idl: solana.idl ?? {
|
|
354
|
+
name: "splitter",
|
|
355
|
+
version: solana.version || "1.4.1",
|
|
356
|
+
},
|
|
357
|
+
sourceArtifact: `deployments/splitter_v14/splitter.${solana.cluster}.json`,
|
|
358
|
+
})),
|
|
359
|
+
sourceArtifact: {
|
|
360
|
+
path: "./splitter/solana/deployments.json",
|
|
361
|
+
retrievedAt: new Date().toISOString().split("T")[0],
|
|
362
|
+
},
|
|
363
|
+
};
|
|
364
|
+
const evmPath = join(evmDir, "deployments.json");
|
|
365
|
+
const solanaPath = join(solanaDir, "deployments.json");
|
|
366
|
+
writeFileSync(evmPath, JSON.stringify(evm14, null, 2) + "\n");
|
|
367
|
+
writeFileSync(solanaPath, JSON.stringify(solana14, null, 2) + "\n");
|
|
368
|
+
return [evmPath, solanaPath];
|
|
369
|
+
}
|
|
370
|
+
/**
|
|
371
|
+
* O(1) lookup helpers for generated registry.
|
|
372
|
+
*/
|
|
373
|
+
export function getEvmDeployment(registry, chainId) {
|
|
374
|
+
return registry.evm[String(chainId)];
|
|
375
|
+
}
|
|
376
|
+
export function getSolanaDeployment(registry, cluster) {
|
|
377
|
+
return registry.solana[cluster];
|
|
378
|
+
}
|
|
379
|
+
//# sourceMappingURL=grabber.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"grabber.js","sourceRoot":"","sources":["../src/grabber.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
export { buildRegistry, grabEvmDeployments, grabSolanaDeployments, writeSplitRegistries, ABI_DIR, IDL_DIR, } from "./grabber.js";
|
|
2
|
+
export type { Deployment, DeploymentRegistry, EvmDeployment, SolanaDeployment, Stablecoin, SplitterRegistry, EvmDeploymentRecord, SolanaDeploymentRecord, GovernanceConfig, Governance, SourceInfo, SourceArtifact, } from "./types.js";
|
|
3
|
+
export { isEvmDeployment, isSolanaDeployment } from "./types.js";
|
|
4
|
+
export { getEvmDeployment, getSolanaDeployment } from "./grabber.js";
|
|
5
|
+
export { AifinpayRegistry } from "./registry.js";
|
|
6
|
+
export { ArtifactRegistry } from "./artifacts.js";
|
|
7
|
+
export type { EvmAbiArtifact, SolanaIdlArtifact, CasperIdlArtifact, AptosIdlArtifact, TronAbiArtifact, } from "./artifacts.js";
|
|
8
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,aAAa,EACb,kBAAkB,EAClB,qBAAqB,EACrB,oBAAoB,EACpB,OAAO,EACP,OAAO,GACR,MAAM,cAAc,CAAC;AACtB,YAAY,EACV,UAAU,EACV,kBAAkB,EAClB,aAAa,EACb,gBAAgB,EAChB,UAAU,EACV,gBAAgB,EAChB,mBAAmB,EACnB,sBAAsB,EACtB,gBAAgB,EAChB,UAAU,EACV,UAAU,EACV,cAAc,GACf,MAAM,YAAY,CAAC;AACpB,OAAO,EAAE,eAAe,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAC;AACjE,OAAO,EAAE,gBAAgB,EAAE,mBAAmB,EAAE,MAAM,cAAc,CAAC;AACrE,OAAO,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAC;AACjD,OAAO,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AAClD,YAAY,EACV,cAAc,EACd,iBAAiB,EACjB,iBAAiB,EACjB,gBAAgB,EAChB,eAAe,GAChB,MAAM,gBAAgB,CAAC"}
|
package/dist/index.js
ADDED
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
export { buildRegistry, grabEvmDeployments, grabSolanaDeployments, writeSplitRegistries, ABI_DIR, IDL_DIR, } from "./grabber.js";
|
|
2
|
+
export { isEvmDeployment, isSolanaDeployment } from "./types.js";
|
|
3
|
+
export { getEvmDeployment, getSolanaDeployment } from "./grabber.js";
|
|
4
|
+
export { AifinpayRegistry } from "./registry.js";
|
|
5
|
+
export { ArtifactRegistry } from "./artifacts.js";
|
|
6
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,aAAa,EACb,kBAAkB,EAClB,qBAAqB,EACrB,oBAAoB,EACpB,OAAO,EACP,OAAO,GACR,MAAM,cAAc,CAAC;AAetB,OAAO,EAAE,eAAe,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAC;AACjE,OAAO,EAAE,gBAAgB,EAAE,mBAAmB,EAAE,MAAM,cAAc,CAAC;AACrE,OAAO,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAC;AACjD,OAAO,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAC"}
|
|
@@ -0,0 +1,147 @@
|
|
|
1
|
+
import type { EvmDeploymentRecord, SolanaDeploymentRecord } from "./types.js";
|
|
2
|
+
declare const EVM_VERSIONS: readonly ["1.1", "1.2", "1.3", "1.4", "latest"];
|
|
3
|
+
type EvmVersion = typeof EVM_VERSIONS[number];
|
|
4
|
+
/**
|
|
5
|
+
* Programmatic interface to query AIFP deployment records.
|
|
6
|
+
* Provides type-safe access to EVM and Solana deployments with O(1) lookups.
|
|
7
|
+
*/
|
|
8
|
+
export declare class AifinpayRegistry {
|
|
9
|
+
private evmRegistry;
|
|
10
|
+
private solanaRegistry;
|
|
11
|
+
private governance?;
|
|
12
|
+
private readonly version;
|
|
13
|
+
private readonly generatedAt;
|
|
14
|
+
private constructor();
|
|
15
|
+
/**
|
|
16
|
+
* Load EVM registry.
|
|
17
|
+
* @param version - EVM version to load. Accepts "1.1", "1.2", "1.3", "1.4", or "latest". Defaults to "latest".
|
|
18
|
+
*/
|
|
19
|
+
static loadEvm(version?: EvmVersion): AifinpayRegistry;
|
|
20
|
+
/**
|
|
21
|
+
* Load Solana registry.
|
|
22
|
+
* @param _version - Solana version to load. Accepts "1.4" or "latest". Defaults to "latest".
|
|
23
|
+
*/
|
|
24
|
+
static loadSolana(_version?: "1.4" | "latest"): AifinpayRegistry;
|
|
25
|
+
/**
|
|
26
|
+
* Get EVM deployment by chain ID.
|
|
27
|
+
* Returns null if not found.
|
|
28
|
+
*/
|
|
29
|
+
getEvmDeployment(chainId: number): EvmDeploymentRecord | null;
|
|
30
|
+
/**
|
|
31
|
+
* Get EVM deployment by network name (e.g., "optimism", "polygon").
|
|
32
|
+
* Returns null if not found.
|
|
33
|
+
*/
|
|
34
|
+
getEvmByNetwork(network: string): EvmDeploymentRecord | null;
|
|
35
|
+
/**
|
|
36
|
+
* Get all EVM deployments.
|
|
37
|
+
*/
|
|
38
|
+
getAllEvmDeployments(): EvmDeploymentRecord[];
|
|
39
|
+
/**
|
|
40
|
+
* Get Solana deployment by cluster.
|
|
41
|
+
* Returns null if not found.
|
|
42
|
+
*/
|
|
43
|
+
getSolanaDeployment(cluster: "mainnet" | "devnet"): SolanaDeploymentRecord | null;
|
|
44
|
+
/**
|
|
45
|
+
* Get all Solana deployments.
|
|
46
|
+
*/
|
|
47
|
+
getAllSolanaDeployments(): SolanaDeploymentRecord[];
|
|
48
|
+
/**
|
|
49
|
+
* Check if settlement is enabled for a chain.
|
|
50
|
+
*/
|
|
51
|
+
isSettlementEnabled(chainId: number): boolean;
|
|
52
|
+
/**
|
|
53
|
+
* Get stablecoin list for a chain.
|
|
54
|
+
* Returns empty array if not found.
|
|
55
|
+
*/
|
|
56
|
+
getStablecoins(chainId: number): Array<{
|
|
57
|
+
symbol: string;
|
|
58
|
+
name: string;
|
|
59
|
+
address: string;
|
|
60
|
+
}>;
|
|
61
|
+
/**
|
|
62
|
+
* Get the Splitter contract address for a chain.
|
|
63
|
+
* Returns null if not found.
|
|
64
|
+
*/
|
|
65
|
+
getSplitterAddress(chainId: number): string | null;
|
|
66
|
+
/**
|
|
67
|
+
* Get the TokenList contract address for a chain.
|
|
68
|
+
* Returns null if not found.
|
|
69
|
+
*/
|
|
70
|
+
getTokenListAddress(chainId: number): string | null;
|
|
71
|
+
/**
|
|
72
|
+
* Get the Profiles contract address for a chain.
|
|
73
|
+
* Returns null if not found.
|
|
74
|
+
*/
|
|
75
|
+
getProfilesAddress(chainId: number): string | null;
|
|
76
|
+
/**
|
|
77
|
+
* Get governance Safe address for environment.
|
|
78
|
+
*/
|
|
79
|
+
getGovernanceSafe(env: "prod" | "testnet"): string | null;
|
|
80
|
+
/**
|
|
81
|
+
* Get registry version.
|
|
82
|
+
*/
|
|
83
|
+
getVersion(): string;
|
|
84
|
+
/**
|
|
85
|
+
* Get registry generation timestamp.
|
|
86
|
+
*/
|
|
87
|
+
getGeneratedAt(): string;
|
|
88
|
+
/**
|
|
89
|
+
* Filter deployments by status.
|
|
90
|
+
*/
|
|
91
|
+
filterByStatus(status: "enabled" | "disabled" | "invalid" | "retired"): EvmDeploymentRecord[];
|
|
92
|
+
/**
|
|
93
|
+
* Get only production deployments (excludes testnet/dev).
|
|
94
|
+
*/
|
|
95
|
+
getProdDeployments(): EvmDeploymentRecord[];
|
|
96
|
+
/**
|
|
97
|
+
* Get only testnet deployments.
|
|
98
|
+
*/
|
|
99
|
+
getTestnetDeployments(): EvmDeploymentRecord[];
|
|
100
|
+
/**
|
|
101
|
+
* Get list of supported chain IDs.
|
|
102
|
+
* @param filter - Optional filter: "all" | "prod" | "testnet" | "enabled"
|
|
103
|
+
*/
|
|
104
|
+
getSupportedChains(filter?: "all" | "prod" | "testnet" | "enabled"): number[];
|
|
105
|
+
/**
|
|
106
|
+
* Get list of supported networks with metadata.
|
|
107
|
+
* @param filter - Optional filter: "all" | "prod" | "testnet" | "enabled"
|
|
108
|
+
*/
|
|
109
|
+
getNetworkList(filter?: "all" | "prod" | "testnet" | "enabled"): Array<{
|
|
110
|
+
chainId: number;
|
|
111
|
+
name: string;
|
|
112
|
+
status: string;
|
|
113
|
+
settlementEnabled: boolean;
|
|
114
|
+
testnet: boolean;
|
|
115
|
+
}>;
|
|
116
|
+
/**
|
|
117
|
+
* Check if a chain is supported.
|
|
118
|
+
*/
|
|
119
|
+
isChainSupported(chainId: number): boolean;
|
|
120
|
+
/**
|
|
121
|
+
* Get chain ID by network name.
|
|
122
|
+
* Returns null if not found.
|
|
123
|
+
*/
|
|
124
|
+
getChainIdByNetwork(network: string): number | null;
|
|
125
|
+
/**
|
|
126
|
+
* Get network name by chain ID.
|
|
127
|
+
* Returns null if not found.
|
|
128
|
+
*/
|
|
129
|
+
getNetworkByChainId(chainId: number): string | null;
|
|
130
|
+
/**
|
|
131
|
+
* Export supported chains as markdown table.
|
|
132
|
+
* @param filter - Optional filter: "all" | "prod" | "testnet" | "enabled"
|
|
133
|
+
*/
|
|
134
|
+
exportAsMarkdown(filter?: "all" | "prod" | "testnet" | "enabled"): string;
|
|
135
|
+
/**
|
|
136
|
+
* Export supported chains as JSON.
|
|
137
|
+
* @param filter - Optional filter: "all" | "prod" | "testnet" | "enabled"
|
|
138
|
+
*/
|
|
139
|
+
exportAsJson(filter?: "all" | "prod" | "testnet" | "enabled"): string;
|
|
140
|
+
/**
|
|
141
|
+
* Export supported chains as CSV.
|
|
142
|
+
* @param filter - Optional filter: "all" | "prod" | "testnet" | "enabled"
|
|
143
|
+
*/
|
|
144
|
+
exportAsCsv(filter?: "all" | "prod" | "testnet" | "enabled"): string;
|
|
145
|
+
}
|
|
146
|
+
export {};
|
|
147
|
+
//# sourceMappingURL=registry.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"registry.d.ts","sourceRoot":"","sources":["../src/registry.ts"],"names":[],"mappings":"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"}
|