@aifinpay/agent 2.0.0-rc.8 → 2.0.3
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/LICENSE +21 -0
- package/PAYMENT_RECEIPTS.md +114 -0
- package/README.md +85 -28
- package/dist/agent.d.ts +8 -1
- package/dist/agent.d.ts.map +1 -1
- package/dist/agent.js +50 -17
- package/dist/agent.js.map +1 -1
- package/dist/agentHistory.d.ts +55 -0
- package/dist/agentHistory.d.ts.map +1 -0
- package/dist/agentHistory.js +145 -0
- package/dist/agentHistory.js.map +1 -0
- package/dist/agentPassport.d.ts +71 -7
- package/dist/agentPassport.d.ts.map +1 -1
- package/dist/agentPassport.js +135 -27
- package/dist/agentPassport.js.map +1 -1
- package/dist/aifp1.d.ts +94 -5
- package/dist/aifp1.d.ts.map +1 -1
- package/dist/aifp1.js +370 -114
- package/dist/aifp1.js.map +1 -1
- package/dist/apiUrl.d.ts +3 -0
- package/dist/apiUrl.d.ts.map +1 -0
- package/dist/apiUrl.js +8 -0
- package/dist/apiUrl.js.map +1 -0
- package/dist/chains.d.ts +7 -0
- package/dist/chains.d.ts.map +1 -1
- package/dist/chains.js +19 -1
- package/dist/chains.js.map +1 -1
- package/dist/crossChain.d.ts +1 -0
- package/dist/crossChain.d.ts.map +1 -1
- package/dist/crossChain.js +87 -5
- package/dist/crossChain.js.map +1 -1
- package/dist/crypto.d.ts.map +1 -1
- package/dist/crypto.js.map +1 -1
- package/dist/deploymentResolver.d.ts +95 -0
- package/dist/deploymentResolver.d.ts.map +1 -0
- package/dist/deploymentResolver.js +169 -0
- package/dist/deploymentResolver.js.map +1 -0
- package/dist/errors.d.ts +17 -0
- package/dist/errors.d.ts.map +1 -1
- package/dist/errors.js +14 -0
- package/dist/errors.js.map +1 -1
- package/dist/facilitators/aifinpay.d.ts +4 -5
- package/dist/facilitators/aifinpay.d.ts.map +1 -1
- package/dist/facilitators/aifinpay.js +50 -21
- package/dist/facilitators/aifinpay.js.map +1 -1
- package/dist/facilitators/base.d.ts +12 -1
- package/dist/facilitators/base.d.ts.map +1 -1
- package/dist/facilitators/coinbase.d.ts.map +1 -1
- package/dist/facilitators/coinbase.js +3 -7
- package/dist/facilitators/coinbase.js.map +1 -1
- package/dist/facilitators/detect.d.ts.map +1 -1
- package/dist/facilitators/detect.js +2 -7
- package/dist/facilitators/detect.js.map +1 -1
- package/dist/facilitators/standard-x402.d.ts.map +1 -1
- package/dist/facilitators/standard-x402.js +40 -30
- package/dist/facilitators/standard-x402.js.map +1 -1
- package/dist/generated/solanaV14Deployments.generated.d.ts +25 -0
- package/dist/generated/solanaV14Deployments.generated.d.ts.map +1 -0
- package/dist/generated/solanaV14Deployments.generated.js +39 -0
- package/dist/generated/solanaV14Deployments.generated.js.map +1 -0
- package/dist/generated/splitterRoutes.generated.d.ts +24 -0
- package/dist/generated/splitterRoutes.generated.d.ts.map +1 -0
- package/dist/generated/splitterRoutes.generated.js +453 -0
- package/dist/generated/splitterRoutes.generated.js.map +1 -0
- package/dist/generated/v14Deployments.generated.d.ts +49 -0
- package/dist/generated/v14Deployments.generated.d.ts.map +1 -0
- package/dist/generated/v14Deployments.generated.js +415 -0
- package/dist/generated/v14Deployments.generated.js.map +1 -0
- package/dist/index.d.ts +27 -13
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +16 -7
- package/dist/index.js.map +1 -1
- package/dist/localIdentity.d.ts +17 -0
- package/dist/localIdentity.d.ts.map +1 -0
- package/dist/localIdentity.js +95 -0
- package/dist/localIdentity.js.map +1 -0
- package/dist/settlement.d.ts +35 -5
- package/dist/settlement.d.ts.map +1 -1
- package/dist/settlement.js +232 -76
- package/dist/settlement.js.map +1 -1
- package/dist/settlementHttp.d.ts +10 -0
- package/dist/settlementHttp.d.ts.map +1 -0
- package/dist/settlementHttp.js +78 -0
- package/dist/settlementHttp.js.map +1 -0
- package/dist/settlementV14.d.ts +10 -9
- package/dist/settlementV14.d.ts.map +1 -1
- package/dist/settlementV14.js +43 -55
- package/dist/settlementV14.js.map +1 -1
- package/dist/solanaDeploymentResolver.d.ts +98 -0
- package/dist/solanaDeploymentResolver.d.ts.map +1 -0
- package/dist/solanaDeploymentResolver.js +162 -0
- package/dist/solanaDeploymentResolver.js.map +1 -0
- package/dist/solanaV14Deployments.generated.d.ts +25 -0
- package/dist/solanaV14Deployments.generated.d.ts.map +1 -0
- package/dist/solanaV14Deployments.generated.js +39 -0
- package/dist/solanaV14Deployments.generated.js.map +1 -0
- package/dist/spendLedger.d.ts.map +1 -1
- package/dist/spendLedger.js +1 -3
- package/dist/spendLedger.js.map +1 -1
- package/dist/splitterRoutes.d.ts +11 -4
- package/dist/splitterRoutes.d.ts.map +1 -1
- package/dist/splitterRoutes.generated.d.ts +11 -9
- package/dist/splitterRoutes.generated.d.ts.map +1 -1
- package/dist/splitterRoutes.generated.js +72 -18
- package/dist/splitterRoutes.generated.js.map +1 -1
- package/dist/splitterRoutes.js +7 -5
- package/dist/splitterRoutes.js.map +1 -1
- package/dist/unifiedAgent.d.ts +97 -29
- package/dist/unifiedAgent.d.ts.map +1 -1
- package/dist/unifiedAgent.js +232 -349
- package/dist/unifiedAgent.js.map +1 -1
- package/dist/v14Deployments.generated.d.ts +49 -0
- package/dist/v14Deployments.generated.d.ts.map +1 -0
- package/dist/v14Deployments.generated.js +413 -0
- package/dist/v14Deployments.generated.js.map +1 -0
- package/dist/wallet.d.ts.map +1 -1
- package/dist/wallet.js +2 -2
- package/dist/wallet.js.map +1 -1
- package/package.json +27 -6
- package/dist/cli.d.ts +0 -3
- package/dist/cli.d.ts.map +0 -1
- package/dist/cli.js +0 -127
- package/dist/cli.js.map +0 -1
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
/** Bounded transport for payment API requests, including response body reads. */
|
|
2
|
+
export class SettlementHttpError extends Error {
|
|
3
|
+
code;
|
|
4
|
+
constructor(message, code) {
|
|
5
|
+
super(message);
|
|
6
|
+
this.code = code;
|
|
7
|
+
this.name = "SettlementHttpError";
|
|
8
|
+
}
|
|
9
|
+
}
|
|
10
|
+
export async function settlementHttp(fetchImpl, url, init = {}, timeoutMs = 15_000) {
|
|
11
|
+
if (!Number.isSafeInteger(timeoutMs) || timeoutMs <= 0 || timeoutMs > 2_147_483_647) {
|
|
12
|
+
throw new SettlementHttpError("invalid payment API timeout", "invalid_timeout");
|
|
13
|
+
}
|
|
14
|
+
const controller = new AbortController();
|
|
15
|
+
let timer;
|
|
16
|
+
const deadline = new Promise((_resolve, reject) => {
|
|
17
|
+
timer = setTimeout(() => {
|
|
18
|
+
const error = new SettlementHttpError("settlement API timed out", "request_timeout");
|
|
19
|
+
controller.abort(error);
|
|
20
|
+
reject(error);
|
|
21
|
+
}, timeoutMs);
|
|
22
|
+
});
|
|
23
|
+
const operation = async () => {
|
|
24
|
+
const response = await fetchImpl(url, {
|
|
25
|
+
...init,
|
|
26
|
+
redirect: "error",
|
|
27
|
+
signal: controller.signal,
|
|
28
|
+
});
|
|
29
|
+
if (response.redirected ||
|
|
30
|
+
(response.url && response.url !== url) ||
|
|
31
|
+
(response.status >= 300 && response.status < 400)) {
|
|
32
|
+
void response.body?.cancel().catch(() => { });
|
|
33
|
+
throw new SettlementHttpError("settlement API redirect refused", "redirect_refused");
|
|
34
|
+
}
|
|
35
|
+
const reader = response.body?.getReader();
|
|
36
|
+
const chunks = [];
|
|
37
|
+
let size = 0;
|
|
38
|
+
if (reader) {
|
|
39
|
+
const cancel = () => {
|
|
40
|
+
void reader.cancel().catch(() => { });
|
|
41
|
+
};
|
|
42
|
+
controller.signal.addEventListener("abort", cancel, { once: true });
|
|
43
|
+
try {
|
|
44
|
+
if (controller.signal.aborted)
|
|
45
|
+
throw controller.signal.reason;
|
|
46
|
+
for (;;) {
|
|
47
|
+
const { done, value } = await reader.read();
|
|
48
|
+
if (done)
|
|
49
|
+
break;
|
|
50
|
+
size += value.byteLength;
|
|
51
|
+
if (size > 1_048_576 || controller.signal.aborted) {
|
|
52
|
+
void reader.cancel().catch(() => { });
|
|
53
|
+
throw new SettlementHttpError("payment API response exceeded its limit", "response_limit");
|
|
54
|
+
}
|
|
55
|
+
chunks.push(value);
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
finally {
|
|
59
|
+
controller.signal.removeEventListener("abort", cancel);
|
|
60
|
+
reader.releaseLock();
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
const body = new Uint8Array(size);
|
|
64
|
+
let offset = 0;
|
|
65
|
+
for (const chunk of chunks) {
|
|
66
|
+
body.set(chunk, offset);
|
|
67
|
+
offset += chunk.byteLength;
|
|
68
|
+
}
|
|
69
|
+
return { response, text: new TextDecoder().decode(body) };
|
|
70
|
+
};
|
|
71
|
+
try {
|
|
72
|
+
return await Promise.race([operation(), deadline]);
|
|
73
|
+
}
|
|
74
|
+
finally {
|
|
75
|
+
clearTimeout(timer);
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
//# sourceMappingURL=settlementHttp.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"settlementHttp.js","sourceRoot":"","sources":["../src/settlementHttp.ts"],"names":[],"mappings":"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"}
|
package/dist/settlementV14.d.ts
CHANGED
|
@@ -82,7 +82,8 @@ export interface V14ValidateOptions {
|
|
|
82
82
|
allowRoutes?: readonly string[];
|
|
83
83
|
}
|
|
84
84
|
/**
|
|
85
|
-
*
|
|
85
|
+
* Read-only structural checks. Success does not authenticate the signer,
|
|
86
|
+
* deployment, fees or treasury and does not authorize settlement.
|
|
86
87
|
*
|
|
87
88
|
* Throws on the first failure with a code, because these are not equivalent:
|
|
88
89
|
* an expired quote should be re-requested, a foreign payer is a caller bug, and
|
|
@@ -113,20 +114,20 @@ export declare function checkV14Submittable(publicClient: PublicClient, call: V1
|
|
|
113
114
|
code: string;
|
|
114
115
|
}>;
|
|
115
116
|
/**
|
|
116
|
-
*
|
|
117
|
-
*
|
|
118
|
-
*
|
|
119
|
-
*
|
|
120
|
-
*
|
|
121
|
-
*
|
|
117
|
+
* v1.4 signing is quarantined. Its current signed Quote omits mutable profile
|
|
118
|
+
* fees and treasury. RPC preflight cannot bind those values at execution time.
|
|
119
|
+
* Keep the exported API for callers to handle the refusal, but provide no
|
|
120
|
+
* bypass: re-enabling requires a contract-bound economics commitment, reviewed
|
|
121
|
+
* deployment/signer/token pins, approval handling and mined-success recovery.
|
|
122
|
+
* Validation and nonce inspection above remain read-only diagnostics.
|
|
122
123
|
*/
|
|
123
|
-
export declare function executeV14Settlement(
|
|
124
|
+
export declare function executeV14Settlement(_call: V14SettlementCall, _ctx: {
|
|
124
125
|
publicClient: PublicClient;
|
|
125
126
|
walletClient: WalletClient;
|
|
126
127
|
account: Address;
|
|
127
128
|
orderId?: string;
|
|
128
129
|
minSecondsRemaining?: number;
|
|
129
|
-
/**
|
|
130
|
+
/** @deprecated Cannot bypass the v1.4 settlement quarantine. */
|
|
130
131
|
skipPreflight?: boolean;
|
|
131
132
|
}): Promise<{
|
|
132
133
|
hash: Hex;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"settlementV14.d.ts","sourceRoot":"","sources":["../src/settlementV14.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AACH,OAAO,
|
|
1
|
+
{"version":3,"file":"settlementV14.d.ts","sourceRoot":"","sources":["../src/settlementV14.ts"],"names":[],"mappings":"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"}
|
package/dist/settlementV14.js
CHANGED
|
@@ -13,7 +13,7 @@
|
|
|
13
13
|
* Responsibilities". Each check below cites the clause it implements, because
|
|
14
14
|
* a check nobody can trace back to a requirement is a check somebody deletes.
|
|
15
15
|
*/
|
|
16
|
-
import { keccak256, stringToHex, parseAbi
|
|
16
|
+
import { keccak256, stringToHex, parseAbi } from "viem";
|
|
17
17
|
export class V14SettlementError extends Error {
|
|
18
18
|
code;
|
|
19
19
|
constructor(code, message) {
|
|
@@ -46,14 +46,17 @@ export function knownRouteIds() {
|
|
|
46
46
|
const ZERO = "0x0000000000000000000000000000000000000000";
|
|
47
47
|
const lc = (s) => String(s || "").toLowerCase();
|
|
48
48
|
/**
|
|
49
|
-
*
|
|
49
|
+
* Read-only structural checks. Success does not authenticate the signer,
|
|
50
|
+
* deployment, fees or treasury and does not authorize settlement.
|
|
50
51
|
*
|
|
51
52
|
* Throws on the first failure with a code, because these are not equivalent:
|
|
52
53
|
* an expired quote should be re-requested, a foreign payer is a caller bug, and
|
|
53
54
|
* an unknown route means this SDK is older than the deployment.
|
|
54
55
|
*/
|
|
55
56
|
export function validateV14SettlementCall(call, opts = {}) {
|
|
56
|
-
const fail = (code, msg) => {
|
|
57
|
+
const fail = (code, msg) => {
|
|
58
|
+
throw new V14SettlementError(code, msg);
|
|
59
|
+
};
|
|
57
60
|
if (!call || typeof call !== "object")
|
|
58
61
|
fail("V14_MALFORMED", "no settlement call");
|
|
59
62
|
if (call.splitter_version !== "1.4") {
|
|
@@ -134,70 +137,55 @@ const NONCE_ABI = parseAbi([
|
|
|
134
137
|
export async function checkV14Submittable(publicClient, call) {
|
|
135
138
|
const q = call.args.quote;
|
|
136
139
|
const [spent, expected, paused] = await Promise.all([
|
|
137
|
-
publicClient.readContract({
|
|
138
|
-
|
|
140
|
+
publicClient.readContract({
|
|
141
|
+
address: call.contract,
|
|
142
|
+
abi: NONCE_ABI,
|
|
143
|
+
functionName: "consumedNonce",
|
|
144
|
+
args: [q.payer, BigInt(q.nonce)],
|
|
145
|
+
}),
|
|
146
|
+
publicClient.readContract({
|
|
147
|
+
address: call.contract,
|
|
148
|
+
abi: NONCE_ABI,
|
|
149
|
+
functionName: "payerNonce",
|
|
150
|
+
args: [q.payer],
|
|
151
|
+
}),
|
|
139
152
|
publicClient.readContract({ address: call.contract, abi: NONCE_ABI, functionName: "paused" }),
|
|
140
153
|
]);
|
|
141
154
|
if (paused) {
|
|
142
|
-
return {
|
|
143
|
-
|
|
155
|
+
return {
|
|
156
|
+
submittable: false,
|
|
157
|
+
code: "V14_PAUSED",
|
|
158
|
+
reason: "the splitter is paused — every settlement reverts until it is unpaused",
|
|
159
|
+
};
|
|
144
160
|
}
|
|
145
161
|
if (spent) {
|
|
146
|
-
return {
|
|
147
|
-
|
|
162
|
+
return {
|
|
163
|
+
submittable: false,
|
|
164
|
+
code: "V14_ALREADY_SETTLED",
|
|
165
|
+
reason: `nonce ${q.nonce} has already been spent by ${q.payer} — this quote is settled, do not pay twice`,
|
|
166
|
+
};
|
|
148
167
|
}
|
|
149
168
|
if (BigInt(expected) !== BigInt(q.nonce)) {
|
|
150
|
-
return {
|
|
169
|
+
return {
|
|
170
|
+
submittable: false,
|
|
171
|
+
code: "V14_STALE_NONCE",
|
|
151
172
|
reason: `this quote was signed at nonce ${q.nonce} but the contract now expects ${expected} — ` +
|
|
152
|
-
`another payment from this wallet settled first; request a fresh quote
|
|
173
|
+
`another payment from this wallet settled first; request a fresh quote`,
|
|
174
|
+
};
|
|
153
175
|
}
|
|
154
176
|
return { submittable: true };
|
|
155
177
|
}
|
|
156
|
-
const SETTLE_ABI = parseAbi([
|
|
157
|
-
"function settleNative((address payer,address merchant,address token,uint256 grossAmount,address ipCreator,uint256 validUntil,bytes32 orderIdHash,uint256 nonce,bytes32 routeId) quote, bytes signature) payable",
|
|
158
|
-
"function settleStable((address payer,address merchant,address token,uint256 grossAmount,address ipCreator,uint256 validUntil,bytes32 orderIdHash,uint256 nonce,bytes32 routeId) quote, bytes signature)",
|
|
159
|
-
]);
|
|
160
|
-
const asTuple = (q) => ({
|
|
161
|
-
payer: q.payer, merchant: q.merchant, token: q.token,
|
|
162
|
-
grossAmount: BigInt(q.grossAmount), ipCreator: q.ipCreator,
|
|
163
|
-
validUntil: BigInt(q.validUntil), orderIdHash: q.orderIdHash,
|
|
164
|
-
nonce: BigInt(q.nonce), routeId: q.routeId,
|
|
165
|
-
});
|
|
166
178
|
/**
|
|
167
|
-
*
|
|
168
|
-
*
|
|
169
|
-
*
|
|
170
|
-
*
|
|
171
|
-
*
|
|
172
|
-
*
|
|
179
|
+
* v1.4 signing is quarantined. Its current signed Quote omits mutable profile
|
|
180
|
+
* fees and treasury. RPC preflight cannot bind those values at execution time.
|
|
181
|
+
* Keep the exported API for callers to handle the refusal, but provide no
|
|
182
|
+
* bypass: re-enabling requires a contract-bound economics commitment, reviewed
|
|
183
|
+
* deployment/signer/token pins, approval handling and mined-success recovery.
|
|
184
|
+
* Validation and nonce inspection above remain read-only diagnostics.
|
|
173
185
|
*/
|
|
174
|
-
export async function executeV14Settlement(
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
if (!ctx.skipPreflight) {
|
|
179
|
-
const pre = await checkV14Submittable(ctx.publicClient, call);
|
|
180
|
-
if (!pre.submittable)
|
|
181
|
-
throw new V14SettlementError(pre.code, pre.reason);
|
|
182
|
-
}
|
|
183
|
-
const q = call.args.quote;
|
|
184
|
-
const native = lc(q.token) === ZERO;
|
|
185
|
-
if (!native) {
|
|
186
|
-
// §9.1 — settleStable needs an allowance first. Refused rather than
|
|
187
|
-
// silently attempted: approving on the agent's behalf is a decision the
|
|
188
|
-
// agent's own policy layer makes, not this function.
|
|
189
|
-
throw new V14SettlementError("V14_STABLE_NOT_SUPPORTED", "stablecoin settlement requires approve(splitter, grossAmount) first and is not yet wired here — " +
|
|
190
|
-
"quote in native for now");
|
|
191
|
-
}
|
|
192
|
-
const hash = await ctx.walletClient.writeContract({
|
|
193
|
-
address: call.contract,
|
|
194
|
-
abi: SETTLE_ABI,
|
|
195
|
-
functionName: "settleNative",
|
|
196
|
-
args: [asTuple(q), call.args.signature],
|
|
197
|
-
value: BigInt(q.grossAmount),
|
|
198
|
-
account: ctx.account,
|
|
199
|
-
chain: null,
|
|
200
|
-
});
|
|
201
|
-
return { hash, route };
|
|
186
|
+
export async function executeV14Settlement(_call, _ctx) {
|
|
187
|
+
throw new V14SettlementError("V14_SETTLEMENT_DISABLED", "v1.4 settlement is disabled: signed quotes do not bind mutable fees and treasury. " +
|
|
188
|
+
"Use a separately reviewed v1.3 route or wait for the contract and SDK upgrade; " +
|
|
189
|
+
"do not manually submit this quote or automatically fall back to another contract.");
|
|
202
190
|
}
|
|
203
191
|
//# sourceMappingURL=settlementV14.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"settlementV14.js","sourceRoot":"","sources":["../src/settlementV14.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AACH,OAAO,
|
|
1
|
+
{"version":3,"file":"settlementV14.js","sourceRoot":"","sources":["../src/settlementV14.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,98 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* AIFINP-224 — SDK Environment & Protocol Version resolver (Solana).
|
|
3
|
+
*
|
|
4
|
+
* The Solana sibling of deploymentResolver.ts (AIFINP-223). Same idea — one
|
|
5
|
+
* place that answers "which deployment does the SDK use?" given an environment,
|
|
6
|
+
* a network and a requested version — shaped for Solana, where a deployment is
|
|
7
|
+
* a base58 program id + IDL rather than an EVM address record.
|
|
8
|
+
*
|
|
9
|
+
* Two axes, mirroring the EVM resolver:
|
|
10
|
+
* environment — "dev" | "prod". Development supports devnet only; production
|
|
11
|
+
* uses mainnet-beta. Both read their v1.4 artifacts from solana-contract's
|
|
12
|
+
* dev branch (bundled in solanaV14Deployments.generated.ts).
|
|
13
|
+
* version — "v1.4" | "auto" (and "v1.2" is accepted at the type level for
|
|
14
|
+
* parity with EVM). An explicit "v1.4" never silently downgrades.
|
|
15
|
+
*
|
|
16
|
+
* FALLBACK DIFFERS FROM EVM — READ THIS. The EVM resolver falls back v1.4 -> v1.2.
|
|
17
|
+
* Solana has NO v1.2-equivalent splitter: the old program was closed and removed
|
|
18
|
+
* from mainnet, and the SDK never bundled it (it reads the Solana program id at
|
|
19
|
+
* runtime from the bridge's pay_solana challenge). So there is nothing to fall
|
|
20
|
+
* back to. Therefore:
|
|
21
|
+
* - "auto" resolves v1.4 where deployed, and otherwise throws
|
|
22
|
+
* NoSolanaDeploymentError (no invented downgrade).
|
|
23
|
+
* - an explicit "v1.2" always throws SolanaV12UnavailableError, because no
|
|
24
|
+
* Solana v1.2 deployment exists.
|
|
25
|
+
* This is an open product question for Paul: whether the EVM v1.2/v1.4 fallback
|
|
26
|
+
* model should map onto Solana at all. Until a real Solana fallback exists, this
|
|
27
|
+
* resolver refuses to pretend one does.
|
|
28
|
+
*
|
|
29
|
+
* Program ids live in solanaV14Deployments.generated.ts, never inline here —
|
|
30
|
+
* this module is selection logic only.
|
|
31
|
+
*/
|
|
32
|
+
import { DeploymentResolverError, type SdkEnvironment } from "./deploymentResolver.js";
|
|
33
|
+
import { type SolanaV14Deployment } from "./generated/solanaV14Deployments.generated.js";
|
|
34
|
+
/** Selectable protocol versions on the request side. "v1.2" exists for parity
|
|
35
|
+
* with the EVM selector but has no Solana deployment behind it. */
|
|
36
|
+
export type SolanaProtocolVersion = "v1.2" | "v1.4";
|
|
37
|
+
/** What a caller may ask for. "auto" (the default) resolves v1.4, or throws if
|
|
38
|
+
* it is not deployed for the environment+network — Solana has no fallback. */
|
|
39
|
+
export type SolanaRequestedVersion = SolanaProtocolVersion | "auto";
|
|
40
|
+
export interface ResolveSolanaDeploymentOptions {
|
|
41
|
+
environment: SdkEnvironment;
|
|
42
|
+
/** Cluster name: "devnet", or "mainnet"/"mainnet-beta". Case-insensitive. */
|
|
43
|
+
network: string;
|
|
44
|
+
/** Defaults to "auto". */
|
|
45
|
+
version?: SolanaRequestedVersion;
|
|
46
|
+
}
|
|
47
|
+
/** The resolved Solana deployment. Only v1.4 is ever returned; the field is
|
|
48
|
+
* kept for symmetry with the EVM resolver's discriminated union. */
|
|
49
|
+
export interface ResolvedSolanaDeployment {
|
|
50
|
+
version: "v1.4";
|
|
51
|
+
environment: SdkEnvironment;
|
|
52
|
+
network: "devnet" | "mainnet";
|
|
53
|
+
programId: string;
|
|
54
|
+
deployment: SolanaV14Deployment;
|
|
55
|
+
}
|
|
56
|
+
/** The development environment was asked for a cluster other than devnet. */
|
|
57
|
+
export declare class UnsupportedSolanaDevNetworkError extends DeploymentResolverError {
|
|
58
|
+
readonly network: string;
|
|
59
|
+
constructor(network: string);
|
|
60
|
+
}
|
|
61
|
+
/** Explicit "v1.4" requested but not deployed for this environment+network.
|
|
62
|
+
* Thrown rather than downgrading. */
|
|
63
|
+
export declare class SolanaVersionUnavailableError extends DeploymentResolverError {
|
|
64
|
+
readonly requested: SolanaProtocolVersion;
|
|
65
|
+
constructor(requested: SolanaProtocolVersion, environment: SdkEnvironment, network: string);
|
|
66
|
+
}
|
|
67
|
+
/** Explicit "v1.2" requested — no Solana v1.2 splitter exists at all. Distinct
|
|
68
|
+
* from SolanaVersionUnavailableError so callers can tell "not on this network"
|
|
69
|
+
* from "does not exist on Solana". */
|
|
70
|
+
export declare class SolanaV12UnavailableError extends DeploymentResolverError {
|
|
71
|
+
constructor();
|
|
72
|
+
}
|
|
73
|
+
/** The program exists, but settlement is quarantined until verification and
|
|
74
|
+
* governance gates are complete. */
|
|
75
|
+
export declare class SolanaDeploymentDisabledError extends DeploymentResolverError {
|
|
76
|
+
readonly environment: SdkEnvironment;
|
|
77
|
+
readonly network: string;
|
|
78
|
+
readonly reason: string;
|
|
79
|
+
constructor(environment: SdkEnvironment, network: string, reason: string);
|
|
80
|
+
}
|
|
81
|
+
/** No Solana v1.4 deployment exists for this environment+network, and Solana
|
|
82
|
+
* has no fallback version. */
|
|
83
|
+
export declare class NoSolanaDeploymentError extends DeploymentResolverError {
|
|
84
|
+
constructor(environment: SdkEnvironment, network: string);
|
|
85
|
+
}
|
|
86
|
+
/** Is a Solana v1.4 deployment available for this environment+network? */
|
|
87
|
+
export declare function isSolanaV14Available(environment: SdkEnvironment, network: string): boolean;
|
|
88
|
+
/**
|
|
89
|
+
* Resolve the Solana deployment the SDK should use. The single source of truth
|
|
90
|
+
* for Solana environment + protocol-version selection.
|
|
91
|
+
*
|
|
92
|
+
* @throws UnsupportedSolanaDevNetworkError dev asked for a non-devnet cluster
|
|
93
|
+
* @throws SolanaV12UnavailableError explicit v1.2 (none exists on Solana)
|
|
94
|
+
* @throws SolanaVersionUnavailableError explicit v1.4 not deployed here
|
|
95
|
+
* @throws NoSolanaDeploymentError auto, but no v1.4 for this env+network
|
|
96
|
+
*/
|
|
97
|
+
export declare function resolveSolanaDeployment(options: ResolveSolanaDeploymentOptions): ResolvedSolanaDeployment;
|
|
98
|
+
//# sourceMappingURL=solanaDeploymentResolver.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"solanaDeploymentResolver.d.ts","sourceRoot":"","sources":["../src/solanaDeploymentResolver.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8BG;AACH,OAAO,EAAE,uBAAuB,EAAE,KAAK,cAAc,EAAE,MAAM,yBAAyB,CAAC;AACvF,OAAO,EAGL,KAAK,mBAAmB,EACzB,MAAM,+CAA+C,CAAC;AAEvD;oEACoE;AACpE,MAAM,MAAM,qBAAqB,GAAG,MAAM,GAAG,MAAM,CAAC;AAEpD;+EAC+E;AAC/E,MAAM,MAAM,sBAAsB,GAAG,qBAAqB,GAAG,MAAM,CAAC;AAEpE,MAAM,WAAW,8BAA8B;IAC7C,WAAW,EAAE,cAAc,CAAC;IAC5B,6EAA6E;IAC7E,OAAO,EAAE,MAAM,CAAC;IAChB,0BAA0B;IAC1B,OAAO,CAAC,EAAE,sBAAsB,CAAC;CAClC;AAED;qEACqE;AACrE,MAAM,WAAW,wBAAwB;IACvC,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,EAAE,cAAc,CAAC;IAC5B,OAAO,EAAE,QAAQ,GAAG,SAAS,CAAC;IAC9B,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,mBAAmB,CAAC;CACjC;AAID,6EAA6E;AAC7E,qBAAa,gCAAiC,SAAQ,uBAAuB;IAC3E,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;gBACb,OAAO,EAAE,MAAM;CAS5B;AAED;sCACsC;AACtC,qBAAa,6BAA8B,SAAQ,uBAAuB;IACxE,QAAQ,CAAC,SAAS,EAAE,qBAAqB,CAAC;gBAC9B,SAAS,EAAE,qBAAqB,EAAE,WAAW,EAAE,cAAc,EAAE,OAAO,EAAE,MAAM;CAS3F;AAED;;uCAEuC;AACvC,qBAAa,yBAA0B,SAAQ,uBAAuB;;CASrE;AAED;qCACqC;AACrC,qBAAa,6BAA8B,SAAQ,uBAAuB;IACxE,QAAQ,CAAC,WAAW,EAAE,cAAc,CAAC;IACrC,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;gBAEZ,WAAW,EAAE,cAAc,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM;CAOzE;AAED;+BAC+B;AAC/B,qBAAa,uBAAwB,SAAQ,uBAAuB;gBACtD,WAAW,EAAE,cAAc,EAAE,OAAO,EAAE,MAAM;CAIzD;AAmBD,0EAA0E;AAC1E,wBAAgB,oBAAoB,CAAC,WAAW,EAAE,cAAc,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAE1F;AAID;;;;;;;;GAQG;AACH,wBAAgB,uBAAuB,CAAC,OAAO,EAAE,8BAA8B,GAAG,wBAAwB,CA+CzG"}
|
|
@@ -0,0 +1,162 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* AIFINP-224 — SDK Environment & Protocol Version resolver (Solana).
|
|
3
|
+
*
|
|
4
|
+
* The Solana sibling of deploymentResolver.ts (AIFINP-223). Same idea — one
|
|
5
|
+
* place that answers "which deployment does the SDK use?" given an environment,
|
|
6
|
+
* a network and a requested version — shaped for Solana, where a deployment is
|
|
7
|
+
* a base58 program id + IDL rather than an EVM address record.
|
|
8
|
+
*
|
|
9
|
+
* Two axes, mirroring the EVM resolver:
|
|
10
|
+
* environment — "dev" | "prod". Development supports devnet only; production
|
|
11
|
+
* uses mainnet-beta. Both read their v1.4 artifacts from solana-contract's
|
|
12
|
+
* dev branch (bundled in solanaV14Deployments.generated.ts).
|
|
13
|
+
* version — "v1.4" | "auto" (and "v1.2" is accepted at the type level for
|
|
14
|
+
* parity with EVM). An explicit "v1.4" never silently downgrades.
|
|
15
|
+
*
|
|
16
|
+
* FALLBACK DIFFERS FROM EVM — READ THIS. The EVM resolver falls back v1.4 -> v1.2.
|
|
17
|
+
* Solana has NO v1.2-equivalent splitter: the old program was closed and removed
|
|
18
|
+
* from mainnet, and the SDK never bundled it (it reads the Solana program id at
|
|
19
|
+
* runtime from the bridge's pay_solana challenge). So there is nothing to fall
|
|
20
|
+
* back to. Therefore:
|
|
21
|
+
* - "auto" resolves v1.4 where deployed, and otherwise throws
|
|
22
|
+
* NoSolanaDeploymentError (no invented downgrade).
|
|
23
|
+
* - an explicit "v1.2" always throws SolanaV12UnavailableError, because no
|
|
24
|
+
* Solana v1.2 deployment exists.
|
|
25
|
+
* This is an open product question for Paul: whether the EVM v1.2/v1.4 fallback
|
|
26
|
+
* model should map onto Solana at all. Until a real Solana fallback exists, this
|
|
27
|
+
* resolver refuses to pretend one does.
|
|
28
|
+
*
|
|
29
|
+
* Program ids live in solanaV14Deployments.generated.ts, never inline here —
|
|
30
|
+
* this module is selection logic only.
|
|
31
|
+
*/
|
|
32
|
+
import { DeploymentResolverError } from "./deploymentResolver.js";
|
|
33
|
+
import { SOLANA_DEV_NETWORKS, SOLANA_V14_DEPLOYMENTS, } from "./generated/solanaV14Deployments.generated.js";
|
|
34
|
+
// ── Errors (parallel to the EVM resolver, Solana-worded) ─────────────────────
|
|
35
|
+
/** The development environment was asked for a cluster other than devnet. */
|
|
36
|
+
export class UnsupportedSolanaDevNetworkError extends DeploymentResolverError {
|
|
37
|
+
network;
|
|
38
|
+
constructor(network) {
|
|
39
|
+
super(`Development environment supports ${SOLANA_DEV_NETWORKS.join(", ")} only; ` +
|
|
40
|
+
`"${network}" is not a supported Solana development cluster. Use ` +
|
|
41
|
+
`environment "prod" for mainnet.`);
|
|
42
|
+
this.name = "UnsupportedSolanaDevNetworkError";
|
|
43
|
+
this.network = network;
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
/** Explicit "v1.4" requested but not deployed for this environment+network.
|
|
47
|
+
* Thrown rather than downgrading. */
|
|
48
|
+
export class SolanaVersionUnavailableError extends DeploymentResolverError {
|
|
49
|
+
requested;
|
|
50
|
+
constructor(requested, environment, network) {
|
|
51
|
+
super(`Solana ${requested} is not deployed for ${environment}/${network}. It ` +
|
|
52
|
+
`was requested explicitly, so the SDK will not substitute another ` +
|
|
53
|
+
`version.`);
|
|
54
|
+
this.name = "SolanaVersionUnavailableError";
|
|
55
|
+
this.requested = requested;
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
/** Explicit "v1.2" requested — no Solana v1.2 splitter exists at all. Distinct
|
|
59
|
+
* from SolanaVersionUnavailableError so callers can tell "not on this network"
|
|
60
|
+
* from "does not exist on Solana". */
|
|
61
|
+
export class SolanaV12UnavailableError extends DeploymentResolverError {
|
|
62
|
+
constructor() {
|
|
63
|
+
super(`Solana has no v1.2 deployment. The previous Solana program was closed ` +
|
|
64
|
+
`and there is no v1.2-equivalent to fall back to; only v1.4 is available. ` +
|
|
65
|
+
`Use version "v1.4" or "auto".`);
|
|
66
|
+
this.name = "SolanaV12UnavailableError";
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
/** The program exists, but settlement is quarantined until verification and
|
|
70
|
+
* governance gates are complete. */
|
|
71
|
+
export class SolanaDeploymentDisabledError extends DeploymentResolverError {
|
|
72
|
+
environment;
|
|
73
|
+
network;
|
|
74
|
+
reason;
|
|
75
|
+
constructor(environment, network, reason) {
|
|
76
|
+
super(`Solana v1.4 settlement is disabled for ${environment}/${network}: ${reason}`);
|
|
77
|
+
this.name = "SolanaDeploymentDisabledError";
|
|
78
|
+
this.environment = environment;
|
|
79
|
+
this.network = network;
|
|
80
|
+
this.reason = reason;
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
/** No Solana v1.4 deployment exists for this environment+network, and Solana
|
|
84
|
+
* has no fallback version. */
|
|
85
|
+
export class NoSolanaDeploymentError extends DeploymentResolverError {
|
|
86
|
+
constructor(environment, network) {
|
|
87
|
+
super(`No Solana v1.4 deployment is known for ${environment}/${network}, and ` + `Solana has no fallback version.`);
|
|
88
|
+
this.name = "NoSolanaDeploymentError";
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
// ── Lookups ──────────────────────────────────────────────────────────────────
|
|
92
|
+
/** Normalise a cluster name: lower-cased, and "mainnet-beta" -> "mainnet". */
|
|
93
|
+
function normalizeNetwork(network) {
|
|
94
|
+
const n = network.trim().toLowerCase();
|
|
95
|
+
return n === "mainnet-beta" ? "mainnet" : n;
|
|
96
|
+
}
|
|
97
|
+
/** The v1.4 deployment for this environment+network, or undefined. A record is
|
|
98
|
+
* only valid for the environment it was deployed under: devnet is dev-only and
|
|
99
|
+
* must never resolve under "prod", and vice versa. */
|
|
100
|
+
function findSolanaV14(environment, network) {
|
|
101
|
+
const entry = SOLANA_V14_DEPLOYMENTS[network];
|
|
102
|
+
if (!entry)
|
|
103
|
+
return undefined;
|
|
104
|
+
return entry.environment === environment ? entry : undefined;
|
|
105
|
+
}
|
|
106
|
+
/** Is a Solana v1.4 deployment available for this environment+network? */
|
|
107
|
+
export function isSolanaV14Available(environment, network) {
|
|
108
|
+
return findSolanaV14(environment, normalizeNetwork(network))?.settlementEnabled === true;
|
|
109
|
+
}
|
|
110
|
+
// ── The resolver ─────────────────────────────────────────────────────────────
|
|
111
|
+
/**
|
|
112
|
+
* Resolve the Solana deployment the SDK should use. The single source of truth
|
|
113
|
+
* for Solana environment + protocol-version selection.
|
|
114
|
+
*
|
|
115
|
+
* @throws UnsupportedSolanaDevNetworkError dev asked for a non-devnet cluster
|
|
116
|
+
* @throws SolanaV12UnavailableError explicit v1.2 (none exists on Solana)
|
|
117
|
+
* @throws SolanaVersionUnavailableError explicit v1.4 not deployed here
|
|
118
|
+
* @throws NoSolanaDeploymentError auto, but no v1.4 for this env+network
|
|
119
|
+
*/
|
|
120
|
+
export function resolveSolanaDeployment(options) {
|
|
121
|
+
const { environment } = options;
|
|
122
|
+
if (environment !== "dev" && environment !== "prod") {
|
|
123
|
+
throw new DeploymentResolverError(`Unknown environment "${String(environment)}"; use "dev" or "prod".`);
|
|
124
|
+
}
|
|
125
|
+
const network = normalizeNetwork(options.network);
|
|
126
|
+
const requested = options.version ?? "auto";
|
|
127
|
+
// Development is restricted to devnet, whatever version is asked for. Reject
|
|
128
|
+
// any other development cluster rather than silently resolving mainnet.
|
|
129
|
+
if (environment === "dev" && !SOLANA_DEV_NETWORKS.includes(network)) {
|
|
130
|
+
throw new UnsupportedSolanaDevNetworkError(options.network);
|
|
131
|
+
}
|
|
132
|
+
const v14 = findSolanaV14(environment, network);
|
|
133
|
+
const asV14 = (d) => ({
|
|
134
|
+
version: "v1.4",
|
|
135
|
+
environment,
|
|
136
|
+
network: d.network,
|
|
137
|
+
programId: d.programId,
|
|
138
|
+
deployment: d,
|
|
139
|
+
});
|
|
140
|
+
const enabledV14 = () => {
|
|
141
|
+
if (!v14)
|
|
142
|
+
throw new NoSolanaDeploymentError(environment, options.network);
|
|
143
|
+
if (!v14.settlementEnabled) {
|
|
144
|
+
throw new SolanaDeploymentDisabledError(environment, network, v14.disabledReason ?? "deployment has not passed the settlement gate");
|
|
145
|
+
}
|
|
146
|
+
return v14;
|
|
147
|
+
};
|
|
148
|
+
switch (requested) {
|
|
149
|
+
case "v1.4":
|
|
150
|
+
if (!v14)
|
|
151
|
+
throw new SolanaVersionUnavailableError("v1.4", environment, options.network);
|
|
152
|
+
return asV14(enabledV14());
|
|
153
|
+
case "v1.2":
|
|
154
|
+
// No Solana v1.2 deployment exists — there is nothing to return.
|
|
155
|
+
throw new SolanaV12UnavailableError();
|
|
156
|
+
case "auto":
|
|
157
|
+
return asV14(enabledV14());
|
|
158
|
+
default:
|
|
159
|
+
throw new DeploymentResolverError(`Unknown version "${String(requested)}"; use "v1.2", "v1.4" or "auto".`);
|
|
160
|
+
}
|
|
161
|
+
}
|
|
162
|
+
//# sourceMappingURL=solanaDeploymentResolver.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"solanaDeploymentResolver.js","sourceRoot":"","sources":["../src/solanaDeploymentResolver.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import type { SdkEnvironment } from "./deploymentResolver.js";
|
|
2
|
+
export type SolanaNetwork = "devnet" | "mainnet";
|
|
3
|
+
export interface SolanaV14Deployment {
|
|
4
|
+
network: SolanaNetwork;
|
|
5
|
+
environment: SdkEnvironment;
|
|
6
|
+
splitterVersion: "1.4";
|
|
7
|
+
status: "enabled" | "disabled" | "invalid" | "retired";
|
|
8
|
+
settlementEnabled: boolean;
|
|
9
|
+
disabledReason?: string;
|
|
10
|
+
programId: string;
|
|
11
|
+
idl: {
|
|
12
|
+
name: string;
|
|
13
|
+
version: string;
|
|
14
|
+
artifact: string;
|
|
15
|
+
};
|
|
16
|
+
}
|
|
17
|
+
export declare const SOLANA_V14_DEPLOYMENTS_SOURCE: {
|
|
18
|
+
readonly repo: "AiFinPay/solana-contract";
|
|
19
|
+
readonly commit: "e5df8f5436cf646ab495381eee04e0d1a10b4e2f";
|
|
20
|
+
readonly path: "deployments/splitter_v14/";
|
|
21
|
+
readonly branch: "dev";
|
|
22
|
+
};
|
|
23
|
+
export declare const SOLANA_V14_DEPLOYMENTS: Record<string, SolanaV14Deployment>;
|
|
24
|
+
export declare const SOLANA_DEV_NETWORKS: readonly ["devnet"];
|
|
25
|
+
//# sourceMappingURL=solanaV14Deployments.generated.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"solanaV14Deployments.generated.d.ts","sourceRoot":"","sources":["../src/solanaV14Deployments.generated.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAC;AAE9D,MAAM,MAAM,aAAa,GAAG,QAAQ,GAAG,SAAS,CAAC;AAEjD,MAAM,WAAW,mBAAmB;IAClC,OAAO,EAAE,aAAa,CAAC;IACvB,WAAW,EAAE,cAAc,CAAC;IAC5B,eAAe,EAAE,KAAK,CAAC;IACvB,MAAM,EAAE,SAAS,GAAG,UAAU,GAAG,SAAS,GAAG,SAAS,CAAC;IACvD,iBAAiB,EAAE,OAAO,CAAC;IAC3B,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,SAAS,EAAE,MAAM,CAAC;IAClB,GAAG,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAA;KAAE,CAAC;CAC1D;AAED,eAAO,MAAM,6BAA6B;;;;;CAKhC,CAAC;AAEX,eAAO,MAAM,sBAAsB,EAAE,MAAM,CAAC,MAAM,EAAE,mBAAmB,CA6BtE,CAAC;AAEF,eAAO,MAAM,mBAAmB,qBAAsB,CAAC"}
|