@pushchain/core 6.0.27-alpha.2 → 6.0.27-alpha.4
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/AGW.md +83 -7
- package/CHANGELOG.md +13 -0
- package/MARKETPLACE.md +206 -0
- package/package.json +2 -1
- package/src/lib/agentic/codec/rules.js +74 -69
- package/src/lib/agentic/codec/universal.js +15 -3
- package/src/lib/agentic/constants.d.ts +36 -1
- package/src/lib/agentic/constants.js +14 -1
- package/src/lib/agentic/contracts/prc20-metadata.d.ts +1 -1
- package/src/lib/agentic/contracts/prc20-metadata.js +11 -5
- package/src/lib/agentic/contracts/reader.d.ts +21 -0
- package/src/lib/agentic/contracts/reader.js +3 -0
- package/src/lib/agentic/error-messages.d.ts +3 -0
- package/src/lib/agentic/error-messages.js +125 -0
- package/src/lib/agentic/errors.d.ts +12 -3
- package/src/lib/agentic/errors.js +76 -0
- package/src/lib/agentic/management/common.js +6 -0
- package/src/lib/agentic/management/destination.d.ts +5 -0
- package/src/lib/agentic/management/destination.js +32 -0
- package/src/lib/agentic/management/prepare.js +80 -55
- package/src/lib/agentic/management/svm-public.js +13 -4
- package/src/lib/agentic/presets/catalog.d.ts +2 -0
- package/src/lib/agentic/presets/catalog.js +9 -0
- package/src/lib/agentic/presets/default-policy.d.ts +9 -0
- package/src/lib/agentic/presets/default-policy.js +85 -0
- package/src/lib/agentic/presets/default-tokens.d.ts +4 -0
- package/src/lib/agentic/presets/default-tokens.js +39 -0
- package/src/lib/agentic/presets/index.js +47 -22
- package/src/lib/agentic/presets/routes.d.ts +9 -0
- package/src/lib/agentic/presets/routes.js +50 -0
- package/src/lib/agentic/presets/types.d.ts +24 -8
- package/src/lib/agentic/public-rule.js +13 -2
- package/src/lib/constants/index.d.ts +35 -0
- package/src/lib/index.d.ts +4 -0
- package/src/lib/index.js +6 -2
- package/src/lib/job/job.d.ts +35 -0
- package/src/lib/job/job.js +382 -0
- package/src/lib/job/types.d.ts +94 -0
- package/src/lib/job/types.js +3 -0
- package/src/lib/job/watch.d.ts +3 -0
- package/src/lib/job/watch.js +169 -0
- package/src/lib/job-spec/codec.d.ts +18 -0
- package/src/lib/job-spec/codec.js +348 -0
- package/src/lib/job-spec/constants.d.ts +32 -0
- package/src/lib/job-spec/constants.js +36 -0
- package/src/lib/job-spec/helpers.d.ts +19 -0
- package/src/lib/job-spec/helpers.js +138 -0
- package/src/lib/job-spec/index.d.ts +14 -0
- package/src/lib/job-spec/index.js +17 -0
- package/src/lib/job-spec/preview.d.ts +8 -0
- package/src/lib/job-spec/preview.js +298 -0
- package/src/lib/job-spec/read.d.ts +20 -0
- package/src/lib/job-spec/read.js +224 -0
- package/src/lib/job-spec/schema.d.ts +290 -0
- package/src/lib/job-spec/schema.js +70 -0
- package/src/lib/job-spec/types.d.ts +139 -0
- package/src/lib/job-spec/types.js +3 -0
- package/src/lib/market/contracts/AgenticCommerce.d.ts +1026 -0
- package/src/lib/market/contracts/AgenticCommerce.js +1317 -0
- package/src/lib/market/contracts/RulesBindingHook.d.ts +235 -0
- package/src/lib/market/contracts/RulesBindingHook.js +314 -0
- package/src/lib/market/contracts/UniversalMarketplace.d.ts +1770 -0
- package/src/lib/market/contracts/UniversalMarketplace.js +2295 -0
- package/src/lib/market/contracts/UniversalMarketplaceErrors.d.ts +309 -0
- package/src/lib/market/contracts/UniversalMarketplaceErrors.js +416 -0
- package/src/lib/market/contracts/UniversalMarketplaceRules.d.ts +241 -0
- package/src/lib/market/contracts/UniversalMarketplaceRules.js +323 -0
- package/src/lib/market/data.d.ts +8 -0
- package/src/lib/market/data.js +60 -0
- package/src/lib/market/deployment.d.ts +14 -0
- package/src/lib/market/deployment.js +23 -0
- package/src/lib/market/deposit.d.ts +24 -0
- package/src/lib/market/deposit.js +271 -0
- package/src/lib/market/errors.d.ts +13 -0
- package/src/lib/market/errors.js +81 -0
- package/src/lib/market/history.d.ts +6 -0
- package/src/lib/market/history.js +83 -0
- package/src/lib/market/index.d.ts +4 -0
- package/src/lib/market/index.js +12 -0
- package/src/lib/market/kernel-wire.d.ts +15 -0
- package/src/lib/market/kernel-wire.js +41 -0
- package/src/lib/market/market.d.ts +55 -0
- package/src/lib/market/market.js +635 -0
- package/src/lib/market/rules.d.ts +106 -0
- package/src/lib/market/rules.js +293 -0
- package/src/lib/market/runtime.d.ts +35 -0
- package/src/lib/market/runtime.js +130 -0
- package/src/lib/market/types.d.ts +180 -0
- package/src/lib/market/types.js +3 -0
- package/src/lib/orchestrator/internals/errors.d.ts +9 -2
- package/src/lib/orchestrator/internals/errors.js +9 -2
- package/src/lib/orchestrator/internals/push-chain-tx.js +17 -3
- package/src/lib/push-chain/push-chain.d.ts +44 -1
- package/src/lib/push-chain/push-chain.js +23 -3
- package/src/lib/read-state/read-params.d.ts +9 -0
- package/src/lib/read-state/read-params.js +5 -1
- package/src/lib/universal/prc20-address.js +18 -4
- package/src/lib/utils.d.ts +15 -0
- package/src/lib/utils.js +4 -0
|
@@ -12,72 +12,97 @@ const universal_1 = require("../codec/universal");
|
|
|
12
12
|
const deployments_1 = require("../deployments");
|
|
13
13
|
const capabilities_1 = require("../capabilities");
|
|
14
14
|
const errors_1 = require("../errors");
|
|
15
|
+
const destination_1 = require("./destination");
|
|
15
16
|
const prc20_metadata_1 = require("../contracts/prc20-metadata");
|
|
16
17
|
/** Resolve wallet-dependent wire inputs without signing or mutating authority. */
|
|
17
18
|
async function prepareWalletRules(runtime, gen, owner, wallet, inputs, snap) {
|
|
18
|
-
const rules = await Promise.all(inputs.map(
|
|
19
|
+
const rules = await Promise.all(inputs.map(async (rule, ruleIndex) => {
|
|
20
|
+
try {
|
|
21
|
+
return (0, public_rule_1.isPublicRule)(rule)
|
|
22
|
+
? await (0, public_rule_1.normalizePublicRule)(rule, wallet, runtime)
|
|
23
|
+
: rule;
|
|
24
|
+
}
|
|
25
|
+
catch (error) {
|
|
26
|
+
throw (0, errors_1.ruleErrorContext)(error, ruleIndex, rule?.chainNamespace);
|
|
27
|
+
}
|
|
28
|
+
}));
|
|
19
29
|
if (rules.length)
|
|
20
30
|
await (0, deployments_1.verifyPolicyVersion)(runtime.reader, gen);
|
|
21
31
|
const svm = new Map();
|
|
22
32
|
const universal = new Map();
|
|
23
|
-
for (const rule of rules) {
|
|
24
|
-
|
|
25
|
-
(0,
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
const
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
throw new errors_1.AgenticError(errors_1.AGENTIC_ERROR_CODE.INVALID_RULE, `no gas PRC20 registered for ${chain}`);
|
|
57
|
-
const namespace = await snap.read(token, prc20_metadata_1.PRC20_SOURCE_ABI, 'SOURCE_CHAIN_NAMESPACE');
|
|
58
|
-
if (namespace !== chain)
|
|
59
|
-
throw new errors_1.AgenticError(errors_1.AGENTIC_ERROR_CODE.ASSET_CHAIN_MISMATCH, `PRC20 ${token} belongs to ${namespace}, not ${chain}`);
|
|
60
|
-
if (asset.token !== undefined) {
|
|
61
|
-
const expected = typeof asset.token === 'string'
|
|
62
|
-
? (0, viem_1.getAddress)(asset.token)
|
|
63
|
-
: (0, viem_1.getAddress)(asset.token.address);
|
|
64
|
-
if (expected === viem_1.zeroAddress) {
|
|
65
|
-
if ((await (0, prc20_metadata_1.readGasPrc20)(snap, chain)) !== (0, viem_1.getAddress)(token))
|
|
66
|
-
throw new errors_1.AgenticError(errors_1.AGENTIC_ERROR_CODE.INVALID_RULE, 'resolved token is not the registered native gas token');
|
|
67
|
-
}
|
|
33
|
+
for (const [ruleIndex, rule] of rules.entries()) {
|
|
34
|
+
try {
|
|
35
|
+
if (rule && (0, rules_1.isSolanaRule)(rule)) {
|
|
36
|
+
(0, capabilities_1.requireCapability)(gen.capabilities, capabilities_1.AgenticCapability.UNIVERSAL_SVM_RULES);
|
|
37
|
+
svm.set(rule, await (0, svm_public_1.preparePublicSvmRule)(runtime, snap, wallet, rule));
|
|
38
|
+
continue;
|
|
39
|
+
}
|
|
40
|
+
if (!(0, rules_1.isUniversalRule)(rule))
|
|
41
|
+
continue;
|
|
42
|
+
if (rule.chainNamespace.startsWith('solana:'))
|
|
43
|
+
(0, capabilities_1.requireCapability)(gen.capabilities, capabilities_1.AgenticCapability.UNIVERSAL_SVM_RULES);
|
|
44
|
+
(0, universal_1.validateUniversalRuleShape)(rule, runtime.nowSeconds());
|
|
45
|
+
(0, capabilities_1.requireCapability)(gen.capabilities, rule.chainNamespace.startsWith('solana:')
|
|
46
|
+
? capabilities_1.AgenticCapability.UNIVERSAL_SVM_RULES
|
|
47
|
+
: capabilities_1.AgenticCapability.UNIVERSAL_EVM_RULES);
|
|
48
|
+
const chain = rule.chainNamespace;
|
|
49
|
+
if (chain_1.CHAIN_INFO[chain]?.vm !== enums_1.VM.EVM)
|
|
50
|
+
throw new errors_1.AgenticError(errors_1.AGENTIC_ERROR_CODE.INVALID_RULE, `unsupported EVM rule chain ${chain}`);
|
|
51
|
+
const cea = await (0, destination_1.resolveRuleDestination)(runtime, wallet, chain);
|
|
52
|
+
const assets = rule.assets.length
|
|
53
|
+
? rule.assets.map((a) => ({
|
|
54
|
+
token: typeof a.token === 'string' && (0, viem_1.getAddress)(a.token) === viem_1.zeroAddress
|
|
55
|
+
? undefined
|
|
56
|
+
: a.token,
|
|
57
|
+
maxPerCall: a.maxPerCall,
|
|
58
|
+
maxTotal: (0, defaults_1.withDefault)(a.maxTotal, defaults_1.AGENTIC_DEFAULTS.universal.assetMaxTotal),
|
|
59
|
+
}))
|
|
60
|
+
: [{ token: undefined, maxPerCall: BigInt(0), maxTotal: BigInt(0) }];
|
|
61
|
+
const resolved = [];
|
|
62
|
+
for (const [assetIndex, asset] of assets.entries()) {
|
|
63
|
+
let token;
|
|
64
|
+
if (asset.token === undefined)
|
|
65
|
+
token = await (0, prc20_metadata_1.readGasPrc20)(snap, chain);
|
|
68
66
|
else {
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
67
|
+
try {
|
|
68
|
+
token = runtime.resolvePrc20(asset.token, chain);
|
|
69
|
+
}
|
|
70
|
+
catch (cause) {
|
|
71
|
+
throw (0, errors_1.tokenRouteUnavailable)(cause, typeof asset.token === 'string'
|
|
72
|
+
? asset.token
|
|
73
|
+
: asset.token.address, chain, assetIndex);
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
if (token === viem_1.zeroAddress)
|
|
77
|
+
throw new errors_1.AgenticError(errors_1.AGENTIC_ERROR_CODE.INVALID_RULE, `no gas PRC20 registered for ${chain}`);
|
|
78
|
+
const namespace = await snap.read(token, prc20_metadata_1.PRC20_SOURCE_ABI, 'SOURCE_CHAIN_NAMESPACE');
|
|
79
|
+
if (namespace !== chain)
|
|
80
|
+
throw new errors_1.AgenticError(errors_1.AGENTIC_ERROR_CODE.ASSET_CHAIN_MISMATCH, `PRC20 ${token} belongs to ${namespace}, not ${chain}`);
|
|
81
|
+
if (asset.token !== undefined) {
|
|
82
|
+
const expected = typeof asset.token === 'string'
|
|
83
|
+
? (0, viem_1.getAddress)(asset.token)
|
|
84
|
+
: (0, viem_1.getAddress)(asset.token.address);
|
|
85
|
+
if (expected === viem_1.zeroAddress) {
|
|
86
|
+
if ((await (0, prc20_metadata_1.readGasPrc20)(snap, chain)) !== (0, viem_1.getAddress)(token))
|
|
87
|
+
throw new errors_1.AgenticError(errors_1.AGENTIC_ERROR_CODE.INVALID_RULE, 'resolved token is not the registered native gas token');
|
|
88
|
+
}
|
|
89
|
+
else {
|
|
90
|
+
const source = await (0, prc20_metadata_1.readOriginToken)(snap, token, chain);
|
|
91
|
+
if (source !== expected)
|
|
92
|
+
throw new errors_1.AgenticError(errors_1.AGENTIC_ERROR_CODE.INVALID_RULE, `PRC20 ${token} represents ${source}, not requested token ${expected}`);
|
|
93
|
+
}
|
|
72
94
|
}
|
|
95
|
+
resolved.push({
|
|
96
|
+
token: (0, viem_1.getAddress)(token),
|
|
97
|
+
maxPerCall: asset.maxPerCall,
|
|
98
|
+
maxTotal: asset.maxTotal,
|
|
99
|
+
});
|
|
73
100
|
}
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
});
|
|
101
|
+
universal.set(rule, { expectedCEA: (0, viem_1.getAddress)(cea), assets: resolved });
|
|
102
|
+
}
|
|
103
|
+
catch (error) {
|
|
104
|
+
throw (0, errors_1.ruleErrorContext)(error, ruleIndex, rule?.chainNamespace);
|
|
79
105
|
}
|
|
80
|
-
universal.set(rule, { expectedCEA: (0, viem_1.getAddress)(cea), assets: resolved });
|
|
81
106
|
}
|
|
82
107
|
return (0, rules_1.prepareRules)(rules, {
|
|
83
108
|
owner,
|
|
@@ -36,6 +36,7 @@ const svm_accounts_1 = require("../codec/svm-accounts");
|
|
|
36
36
|
const svm_idl_1 = require("../codec/svm-idl");
|
|
37
37
|
const svm_terms_1 = require("../codec/svm-terms");
|
|
38
38
|
const svm_terms_2 = require("../codec/svm-terms");
|
|
39
|
+
const errors_1 = require("../errors");
|
|
39
40
|
function svmMetadata(runtime) {
|
|
40
41
|
return (runtime.svmMetadata ??
|
|
41
42
|
(0, svm_metadata_1.createSvmMetadataProvider)({
|
|
@@ -62,7 +63,7 @@ async function preparePublicSvmRule(runtime, snap, wallet, rule) {
|
|
|
62
63
|
const caps = [];
|
|
63
64
|
const tokenAccounts = new Map(), mints = new Set();
|
|
64
65
|
const sources = [];
|
|
65
|
-
for (const asset of requested) {
|
|
66
|
+
for (const [assetIndex, asset] of requested.entries()) {
|
|
66
67
|
const source = typeof asset.token === 'string' ? asset.token : asset.token?.address;
|
|
67
68
|
if (typeof source !== 'string')
|
|
68
69
|
throw (0, svm_terms_1.svmInvalid)('asset token requires an address');
|
|
@@ -77,9 +78,17 @@ async function preparePublicSvmRule(runtime, snap, wallet, rule) {
|
|
|
77
78
|
const sourceToken = typeof asset.token === 'string' && key
|
|
78
79
|
? new web3_js_1.PublicKey((0, viem_1.hexToBytes)(key)).toBase58()
|
|
79
80
|
: asset.token;
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
81
|
+
let token;
|
|
82
|
+
if (native)
|
|
83
|
+
token = await (0, prc20_metadata_1.readGasPrc20)(snap, chain);
|
|
84
|
+
else {
|
|
85
|
+
try {
|
|
86
|
+
token = runtime.resolvePrc20(sourceToken, chain);
|
|
87
|
+
}
|
|
88
|
+
catch (cause) {
|
|
89
|
+
throw (0, errors_1.tokenRouteUnavailable)(cause, source, chain, assetIndex);
|
|
90
|
+
}
|
|
91
|
+
}
|
|
83
92
|
if (caps.some((c) => c.token === (0, viem_1.getAddress)(token)))
|
|
84
93
|
throw (0, svm_terms_1.svmInvalid)('duplicate SVM asset');
|
|
85
94
|
caps.push({
|
|
@@ -25,6 +25,8 @@ export interface PresetCallDefinition extends RuleCall {
|
|
|
25
25
|
/** Internal catalog: reviewed addresses and explicit calls only; never fetched at runtime. */
|
|
26
26
|
export interface PresetChainDefinition {
|
|
27
27
|
chainNamespace: ForeignChainNamespace;
|
|
28
|
+
/** Used with the bundled permission policy only when assets is omitted. */
|
|
29
|
+
defaultTokens?: readonly Address[];
|
|
28
30
|
allowedCalls: readonly PresetCallDefinition[];
|
|
29
31
|
/** Static single-hop routers; incomplete pairs return zero-input-cap review calls. */
|
|
30
32
|
swapRouters?: readonly {
|
|
@@ -3,6 +3,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
3
3
|
exports.PRESET_CATALOG = void 0;
|
|
4
4
|
const viem_1 = require("viem");
|
|
5
5
|
const aave_reserves_1 = require("./aave-reserves");
|
|
6
|
+
const default_tokens_1 = require("./default-tokens");
|
|
6
7
|
/** Mainnet and testnet templates from the October 15 Notion export and protocol sources.
|
|
7
8
|
* Read-only deployment/code evidence and exclusions: plan/agw/research/preset-catalog-2026-10-15/.
|
|
8
9
|
* Mainnet entries are templates only; no mainnet deployment or execution guarantee.
|
|
@@ -153,6 +154,7 @@ exports.PRESET_CATALOG = [
|
|
|
153
154
|
],
|
|
154
155
|
].map(([chain, router, app]) => ({
|
|
155
156
|
chainNamespace: chain,
|
|
157
|
+
defaultTokens: default_tokens_1.DEX_DEFAULT_TOKENS[chain],
|
|
156
158
|
allowedCalls: [],
|
|
157
159
|
swapRouters: [{ address: address(router), app }],
|
|
158
160
|
approvals: [{ spender: address(router), app }],
|
|
@@ -169,6 +171,7 @@ exports.PRESET_CATALOG = [
|
|
|
169
171
|
['eip155:56', '0x6807dc923806fE8Fd134338EABCA509979a7e0cB'],
|
|
170
172
|
].map(([chainNamespace, pool]) => ({
|
|
171
173
|
chainNamespace,
|
|
174
|
+
defaultTokens: default_tokens_1.LENDING_DEFAULT_TOKENS[chainNamespace],
|
|
172
175
|
allowedCalls: [
|
|
173
176
|
...aave(address(pool), chainNamespace),
|
|
174
177
|
...mainnetMarkets(chainNamespace).allowedCalls,
|
|
@@ -184,6 +187,7 @@ exports.PRESET_CATALOG = [
|
|
|
184
187
|
})),
|
|
185
188
|
{
|
|
186
189
|
chainNamespace: 'eip155:11155111',
|
|
190
|
+
defaultTokens: default_tokens_1.LENDING_DEFAULT_TOKENS['eip155:11155111'],
|
|
187
191
|
allowedCalls: aave(sepoliaPool, 'eip155:11155111'),
|
|
188
192
|
approvals: [
|
|
189
193
|
{
|
|
@@ -195,6 +199,7 @@ exports.PRESET_CATALOG = [
|
|
|
195
199
|
},
|
|
196
200
|
{
|
|
197
201
|
chainNamespace: 'eip155:421614',
|
|
202
|
+
defaultTokens: default_tokens_1.LENDING_DEFAULT_TOKENS['eip155:421614'],
|
|
198
203
|
allowedCalls: aave(arbitrumPool, 'eip155:421614'),
|
|
199
204
|
approvals: [
|
|
200
205
|
{
|
|
@@ -206,6 +211,7 @@ exports.PRESET_CATALOG = [
|
|
|
206
211
|
},
|
|
207
212
|
{
|
|
208
213
|
chainNamespace: 'eip155:84532',
|
|
214
|
+
defaultTokens: default_tokens_1.LENDING_DEFAULT_TOKENS['eip155:84532'],
|
|
209
215
|
allowedCalls: [
|
|
210
216
|
...aave(basePool, 'eip155:84532'),
|
|
211
217
|
...market(moonUSDBC, 'Moonwell mUSDbC', address('0x4616975f7E6045FD9737e95bC527e9e14c727BD2')),
|
|
@@ -238,6 +244,7 @@ exports.PRESET_CATALOG = [
|
|
|
238
244
|
},
|
|
239
245
|
{
|
|
240
246
|
chainNamespace: 'eip155:97',
|
|
247
|
+
defaultTokens: default_tokens_1.LENDING_DEFAULT_TOKENS['eip155:97'],
|
|
241
248
|
allowedCalls: [
|
|
242
249
|
...market(venusUSDT, 'Venus vUSDT', address('0xA11c8D9DC9b66E209Ef60F0C8D969D3CD988782c')),
|
|
243
250
|
...market(venusUSDC, 'Venus vUSDC', address('0x16227D60f7a0e586C66B005219dfc887D13C9531')),
|
|
@@ -270,6 +277,7 @@ exports.PRESET_CATALOG = [
|
|
|
270
277
|
chains: [
|
|
271
278
|
{
|
|
272
279
|
chainNamespace: 'eip155:1',
|
|
280
|
+
defaultTokens: default_tokens_1.STAKING_DEFAULT_TOKENS['eip155:1'],
|
|
273
281
|
allowedCalls: [
|
|
274
282
|
{
|
|
275
283
|
target: stETH,
|
|
@@ -333,6 +341,7 @@ exports.PRESET_CATALOG = [
|
|
|
333
341
|
},
|
|
334
342
|
{
|
|
335
343
|
chainNamespace: 'eip155:11155111',
|
|
344
|
+
defaultTokens: default_tokens_1.STAKING_DEFAULT_TOKENS['eip155:11155111'],
|
|
336
345
|
allowedCalls: [
|
|
337
346
|
{
|
|
338
347
|
target: eigen,
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import type { Address } from 'viem';
|
|
2
|
+
import type { RuleAsset } from '../agentic.types';
|
|
3
|
+
/** Preset-only permission policy. Ordinary rule authoring retains zero defaults.
|
|
4
|
+
* Amounts are token quantities, not USD valuations or destination lifetime caps.
|
|
5
|
+
* Metadata verified read-only on October 18; evidence is retained under plan/agw/.
|
|
6
|
+
*/
|
|
7
|
+
export declare const PRESET_VALIDITY_SECONDS: number;
|
|
8
|
+
export declare const PRESET_GAS_BUDGETS: Readonly<Record<string, bigint>>;
|
|
9
|
+
export declare function defaultPresetAsset(chain: string, token: Address): RuleAsset;
|
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.PRESET_GAS_BUDGETS = exports.PRESET_VALIDITY_SECONDS = void 0;
|
|
4
|
+
exports.defaultPresetAsset = defaultPresetAsset;
|
|
5
|
+
const viem_1 = require("viem");
|
|
6
|
+
const errors_1 = require("../errors");
|
|
7
|
+
/** Preset-only permission policy. Ordinary rule authoring retains zero defaults.
|
|
8
|
+
* Amounts are token quantities, not USD valuations or destination lifetime caps.
|
|
9
|
+
* Metadata verified read-only on October 18; evidence is retained under plan/agw/.
|
|
10
|
+
*/
|
|
11
|
+
exports.PRESET_VALIDITY_SECONDS = 7 * 24 * 60 * 60;
|
|
12
|
+
// Explicit profiles keep future chains from inheriting an unreviewed budget.
|
|
13
|
+
// 20 PC is a ceiling, not the amount charged: execution obtains a fresh quote.
|
|
14
|
+
// This budget has testnet protocol-flow coverage; mainnet remains template-only.
|
|
15
|
+
exports.PRESET_GAS_BUDGETS = Object.fromEntries([
|
|
16
|
+
'eip155:1',
|
|
17
|
+
'eip155:8453',
|
|
18
|
+
'eip155:42161',
|
|
19
|
+
'eip155:56',
|
|
20
|
+
'eip155:11155111',
|
|
21
|
+
'eip155:84532',
|
|
22
|
+
'eip155:421614',
|
|
23
|
+
'eip155:97',
|
|
24
|
+
].map((chain) => [chain, (0, viem_1.parseUnits)('20', 18)]));
|
|
25
|
+
const stable6 = { decimals: 6, perCall: '10', total: '100' };
|
|
26
|
+
const stable18 = { ...stable6, decimals: 18 };
|
|
27
|
+
const eth = { decimals: 18, perCall: '0.001', total: '0.01' };
|
|
28
|
+
const bnb = { decimals: 18, perCall: '0.01', total: '0.1' };
|
|
29
|
+
const link = { decimals: 18, perCall: '1', total: '10' };
|
|
30
|
+
// Match by chain AND address. Never infer decimals or limits from a symbol,
|
|
31
|
+
// caller metadata, or the position of a token in an arbitrary selection.
|
|
32
|
+
const TOKEN_BUDGETS = {
|
|
33
|
+
'eip155:1': [
|
|
34
|
+
['0x0000000000000000000000000000000000000000', eth],
|
|
35
|
+
['0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2', eth],
|
|
36
|
+
['0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48', stable6],
|
|
37
|
+
['0xae7ab96520DE3A18E5e111B5EaAb095312D7fE84', eth],
|
|
38
|
+
['0x7f39C581F595B53c5cb19bD0b3f8dA6c935E2Ca0', eth],
|
|
39
|
+
],
|
|
40
|
+
'eip155:8453': [
|
|
41
|
+
['0x4200000000000000000000000000000000000006', eth],
|
|
42
|
+
['0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913', stable6],
|
|
43
|
+
],
|
|
44
|
+
'eip155:42161': [
|
|
45
|
+
['0x82aF49447D8a07e3bd95BD0d56f35241523fBab1', eth],
|
|
46
|
+
['0xaf88d065e77c8cC2239327C5EDb3A432268e5831', stable6],
|
|
47
|
+
],
|
|
48
|
+
'eip155:56': [
|
|
49
|
+
['0xbb4CdB9CBd36B01bD1cBaEBF2De08d9173bc095c', bnb],
|
|
50
|
+
['0x55d398326f99059fF775485246999027B3197955', stable18],
|
|
51
|
+
],
|
|
52
|
+
'eip155:11155111': [
|
|
53
|
+
['0xfff9976782d46cc05630d1f6ebab18b2324d6b14', eth],
|
|
54
|
+
['0x1c7D4B196Cb0C7B01d743Fbc6116a902379C7238', stable6],
|
|
55
|
+
['0xf8Fb3713D459D7C1018BD0A49D19b4C44290EBE5', link],
|
|
56
|
+
['0x7b79995e5f793A07Bc00c21412e50Ecae098E7f9', eth],
|
|
57
|
+
],
|
|
58
|
+
'eip155:84532': [
|
|
59
|
+
['0x4200000000000000000000000000000000000006', eth],
|
|
60
|
+
['0x036CbD53842c5426634e7929541eC2318f3dCF7e', stable6],
|
|
61
|
+
['0x810D46F9a9027E28F9B01F75E2bdde839dA61115', link],
|
|
62
|
+
['0x4616975f7E6045FD9737e95bC527e9e14c727BD2', stable6],
|
|
63
|
+
['0x663A6F02d547dFd639BF689FED298712f2FB69Fb', eth],
|
|
64
|
+
],
|
|
65
|
+
'eip155:421614': [
|
|
66
|
+
['0x980B62Da83eFf3D4576C647993b0c1D7faf17c73', eth],
|
|
67
|
+
['0x75faf114eafb1BDbe2F0316DF893fd58CE46AA4d', stable6],
|
|
68
|
+
],
|
|
69
|
+
'eip155:97': [
|
|
70
|
+
['0xae13d989daC2f0dEbFf460aC112a837C89BAa7cd', bnb],
|
|
71
|
+
['0xA11c8D9DC9b66E209Ef60F0C8D969D3CD988782c', stable6],
|
|
72
|
+
['0x16227D60f7a0e586C66B005219dfc887D13C9531', stable6],
|
|
73
|
+
],
|
|
74
|
+
};
|
|
75
|
+
function defaultPresetAsset(chain, token) {
|
|
76
|
+
const budget = TOKEN_BUDGETS[chain]?.find(([address]) => (0, viem_1.getAddress)(address) === (0, viem_1.getAddress)(token))?.[1];
|
|
77
|
+
if (!budget)
|
|
78
|
+
throw (0, errors_1.capabilityUnavailable)('presetPolicy', `No reviewed default spending policy for ${chain}:${token}`);
|
|
79
|
+
return {
|
|
80
|
+
token,
|
|
81
|
+
maxPerCall: (0, viem_1.parseUnits)(budget.perCall, budget.decimals),
|
|
82
|
+
maxTotal: (0, viem_1.parseUnits)(budget.total, budget.decimals),
|
|
83
|
+
};
|
|
84
|
+
}
|
|
85
|
+
//# sourceMappingURL=default-policy.js.map
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import { type Address } from 'viem';
|
|
2
|
+
export declare const DEX_DEFAULT_TOKENS: Readonly<Record<string, readonly Address[]>>;
|
|
3
|
+
export declare const LENDING_DEFAULT_TOKENS: Readonly<Record<string, readonly Address[]>>;
|
|
4
|
+
export declare const STAKING_DEFAULT_TOKENS: Readonly<Record<string, readonly Address[]>>;
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.STAKING_DEFAULT_TOKENS = exports.LENDING_DEFAULT_TOKENS = exports.DEX_DEFAULT_TOKENS = void 0;
|
|
4
|
+
const viem_1 = require("viem");
|
|
5
|
+
/** Curated subsets of the reviewed catalog. Addresses are destination tokens,
|
|
6
|
+
* not a promise that a Push PRC20 route or protocol liquidity is available.
|
|
7
|
+
* Keep these sets within the policy's 32-call/32-pin limits after expansion.
|
|
8
|
+
* Testnet DEX pairs and lending/staking assets match the live preset fixtures.
|
|
9
|
+
* Mainnet addresses share the catalog's October 15 read-only source baseline.
|
|
10
|
+
* Spending caps are intentionally separate from token selection.
|
|
11
|
+
*/
|
|
12
|
+
const addresses = (...values) => values.map((value) => (0, viem_1.getAddress)(value.toLowerCase()));
|
|
13
|
+
exports.DEX_DEFAULT_TOKENS = {
|
|
14
|
+
'eip155:1': addresses('0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2', '0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48'),
|
|
15
|
+
'eip155:8453': addresses('0x4200000000000000000000000000000000000006', '0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913'),
|
|
16
|
+
'eip155:42161': addresses('0x82aF49447D8a07e3bd95BD0d56f35241523fBab1', '0xaf88d065e77c8cC2239327C5EDb3A432268e5831'),
|
|
17
|
+
'eip155:56': addresses('0xbb4CdB9CBd36B01bD1cBaEBF2De08d9173bc095c', '0x55d398326f99059fF775485246999027B3197955'),
|
|
18
|
+
'eip155:11155111': addresses('0xfff9976782d46cc05630d1f6ebab18b2324d6b14', '0x1c7D4B196Cb0C7B01d743Fbc6116a902379C7238'),
|
|
19
|
+
'eip155:84532': addresses('0x4200000000000000000000000000000000000006', '0x036CbD53842c5426634e7929541eC2318f3dCF7e'),
|
|
20
|
+
'eip155:421614': addresses('0x980B62Da83eFf3D4576C647993b0c1D7faf17c73', '0x75faf114eafb1BDbe2F0316DF893fd58CE46AA4d'),
|
|
21
|
+
'eip155:97': addresses('0xae13d989daC2f0dEbFf460aC112a837C89BAa7cd', '0xA11c8D9DC9b66E209Ef60F0C8D969D3CD988782c'),
|
|
22
|
+
};
|
|
23
|
+
exports.LENDING_DEFAULT_TOKENS = {
|
|
24
|
+
'eip155:1': exports.DEX_DEFAULT_TOKENS['eip155:1'],
|
|
25
|
+
// One shared reserve/market token keeps Aave + Moonwell/Venus within 32 pins.
|
|
26
|
+
'eip155:8453': addresses('0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913'),
|
|
27
|
+
'eip155:42161': exports.DEX_DEFAULT_TOKENS['eip155:42161'],
|
|
28
|
+
'eip155:56': addresses('0x55d398326f99059fF775485246999027B3197955'),
|
|
29
|
+
// Protocol testnet reserves differ from Circle USDC and DEX wrapped ETH.
|
|
30
|
+
'eip155:11155111': addresses('0xf8Fb3713D459D7C1018BD0A49D19b4C44290EBE5'),
|
|
31
|
+
'eip155:84532': addresses('0x810D46F9a9027E28F9B01F75E2bdde839dA61115', '0x4616975f7E6045FD9737e95bC527e9e14c727BD2', '0x663A6F02d547dFd639BF689FED298712f2FB69Fb'),
|
|
32
|
+
'eip155:421614': addresses('0x75faf114eafb1BDbe2F0316DF893fd58CE46AA4d'),
|
|
33
|
+
'eip155:97': addresses('0xA11c8D9DC9b66E209Ef60F0C8D969D3CD988782c', '0x16227D60f7a0e586C66B005219dfc887D13C9531'),
|
|
34
|
+
};
|
|
35
|
+
exports.STAKING_DEFAULT_TOKENS = {
|
|
36
|
+
'eip155:1': addresses(viem_1.zeroAddress, '0xae7ab96520DE3A18E5e111B5EaAb095312D7fE84', '0x7f39C581F595B53c5cb19bD0b3f8dA6c935E2Ca0'),
|
|
37
|
+
'eip155:11155111': addresses('0x7b79995e5f793A07Bc00c21412e50Ecae098E7f9'),
|
|
38
|
+
};
|
|
39
|
+
//# sourceMappingURL=default-tokens.js.map
|
|
@@ -7,6 +7,9 @@ const errors_1 = require("../errors");
|
|
|
7
7
|
const selectors_1 = require("../codec/selectors");
|
|
8
8
|
const catalog_1 = require("./catalog");
|
|
9
9
|
const operation_limits_1 = require("./operation-limits");
|
|
10
|
+
const enums_1 = require("../../constants/enums");
|
|
11
|
+
const routes_1 = require("./routes");
|
|
12
|
+
const default_policy_1 = require("./default-policy");
|
|
10
13
|
const MAX_UINT256 = (BigInt(1) << BigInt(256)) - BigInt(1);
|
|
11
14
|
const invalid = (message) => new errors_1.AgenticError(errors_1.AGENTIC_ERROR_CODE.INVALID_RULE, message);
|
|
12
15
|
function cap(value, name) {
|
|
@@ -51,6 +54,7 @@ function buildPresetApi(catalog) {
|
|
|
51
54
|
...p,
|
|
52
55
|
chains: p.chains.map((c) => ({
|
|
53
56
|
...c,
|
|
57
|
+
...(c.defaultTokens ? { defaultTokens: [...c.defaultTokens] } : {}),
|
|
54
58
|
allowedCalls: c.allowedCalls.map((call) => ({
|
|
55
59
|
...copyCall(call),
|
|
56
60
|
...(call.budget
|
|
@@ -93,15 +97,22 @@ function buildPresetApi(catalog) {
|
|
|
93
97
|
throw invalid(`unknown preset ${String(preset)}`);
|
|
94
98
|
if (!options || typeof options !== 'object' || Array.isArray(options))
|
|
95
99
|
throw invalid('preset options must be an object');
|
|
100
|
+
const now = Math.floor(Date.now() / 1000);
|
|
101
|
+
const network = options.network ?? enums_1.PUSH_NETWORK.TESTNET_DONUT;
|
|
102
|
+
if (!Object.values(enums_1.PUSH_NETWORK).includes(network))
|
|
103
|
+
throw invalid('unknown preset Push network');
|
|
104
|
+
if ('funding' in options)
|
|
105
|
+
throw invalid('The preset funding option is no longer supported. Remove it; preset assets and limits are always preserved.');
|
|
96
106
|
if (options.agent !== undefined &&
|
|
97
107
|
(!(0, viem_1.isAddress)(options.agent, { strict: false }) ||
|
|
98
108
|
(0, viem_1.getAddress)(options.agent) === viem_1.zeroAddress))
|
|
99
109
|
throw invalid('preset agent must be a nonzero Push address');
|
|
100
110
|
if (options.validUntil !== undefined &&
|
|
101
111
|
(!Number.isSafeInteger(options.validUntil) ||
|
|
102
|
-
options.validUntil <=
|
|
112
|
+
options.validUntil <= now ||
|
|
103
113
|
options.validUntil >= 2 ** 48))
|
|
104
114
|
throw invalid('preset validUntil must be a future uint48 timestamp');
|
|
115
|
+
const validUntil = options.validUntil ?? now + default_policy_1.PRESET_VALIDITY_SECONDS;
|
|
105
116
|
if (options.maxGasPerCall !== undefined)
|
|
106
117
|
cap(options.maxGasPerCall, 'maxGasPerCall');
|
|
107
118
|
if (options.assets !== undefined && !Array.isArray(options.assets))
|
|
@@ -114,6 +125,12 @@ function buildPresetApi(catalog) {
|
|
|
114
125
|
if (!chains.length && options.assets?.length)
|
|
115
126
|
throw (0, errors_1.capabilityUnavailable)('presetCatalog', `preset ${preset} has no approved app entries`);
|
|
116
127
|
const assets = new Map();
|
|
128
|
+
// An explicit array (including []) replaces the defaults for all selected
|
|
129
|
+
// chains. Never add permissions on chains the caller left unconfigured.
|
|
130
|
+
if (options.assets === undefined)
|
|
131
|
+
for (const chain of chains)
|
|
132
|
+
if (chain.defaultTokens)
|
|
133
|
+
assets.set(chain.chainNamespace, chain.defaultTokens.map((token) => (0, default_policy_1.defaultPresetAsset)(chain.chainNamespace, token)));
|
|
117
134
|
for (const asset of options.assets ?? []) {
|
|
118
135
|
if (!asset || typeof asset !== 'object')
|
|
119
136
|
throw invalid('preset asset must be an object');
|
|
@@ -143,6 +160,11 @@ function buildPresetApi(catalog) {
|
|
|
143
160
|
}
|
|
144
161
|
const readiness = [];
|
|
145
162
|
const rules = chains.map((chain) => {
|
|
163
|
+
const maxGasPerCall = options.maxGasPerCall ??
|
|
164
|
+
chain.maxGasPerCall ??
|
|
165
|
+
(chain.defaultTokens
|
|
166
|
+
? default_policy_1.PRESET_GAS_BUDGETS[chain.chainNamespace]
|
|
167
|
+
: undefined);
|
|
146
168
|
const selectedAssets = assets.get(chain.chainNamespace) ?? [];
|
|
147
169
|
const limits = (0, operation_limits_1.applyOperationLimits)(chain.allowedCalls.map((c) => ({
|
|
148
170
|
...copyCall(c),
|
|
@@ -258,8 +280,9 @@ function buildPresetApi(catalog) {
|
|
|
258
280
|
}
|
|
259
281
|
if (!calls.length || calls.length > 32)
|
|
260
282
|
throw (0, errors_1.capabilityUnavailable)('presetCalls', 'preset must contain 1..32 allowed calls including approvals');
|
|
261
|
-
|
|
262
|
-
|
|
283
|
+
const conditionCount = calls.reduce((n, c) => n + (c.pins?.length ?? 0), 0);
|
|
284
|
+
if (conditionCount > 32)
|
|
285
|
+
throw (0, errors_1.ruleConstraintLimit)(conditionCount, calls.length, chain.chainNamespace);
|
|
263
286
|
const pairs = new Map();
|
|
264
287
|
for (const call of calls) {
|
|
265
288
|
if (!/^[A-Za-z_$][\w$]*\(.*\)$/.test(call.selector))
|
|
@@ -282,13 +305,7 @@ function buildPresetApi(catalog) {
|
|
|
282
305
|
code: 'AGENT_REQUIRED',
|
|
283
306
|
message: 'Choose the agent Push address.',
|
|
284
307
|
});
|
|
285
|
-
if (
|
|
286
|
-
issues.push({
|
|
287
|
-
code: 'EXPIRY_REQUIRED',
|
|
288
|
-
message: 'Choose an expiry.',
|
|
289
|
-
});
|
|
290
|
-
if ((options.maxGasPerCall ?? chain.maxGasPerCall ?? BigInt(0)) ===
|
|
291
|
-
BigInt(0))
|
|
308
|
+
if ((maxGasPerCall ?? BigInt(0)) === BigInt(0))
|
|
292
309
|
issues.push({
|
|
293
310
|
code: 'GAS_BUDGET_REQUIRED',
|
|
294
311
|
message: 'Set a positive PC gas budget per outbound.',
|
|
@@ -308,14 +325,26 @@ function buildPresetApi(catalog) {
|
|
|
308
325
|
code: 'NO_ENABLED_OPERATION',
|
|
309
326
|
message: 'No asset operation has a positive per-call limit.',
|
|
310
327
|
});
|
|
328
|
+
const configurationReady = issues.length === 0;
|
|
329
|
+
const routes = (0, routes_1.presetRoutes)(chain.chainNamespace, selectedAssets, network);
|
|
330
|
+
issues.push(...routes.issues);
|
|
331
|
+
const bridgeAssets = selectedAssets;
|
|
311
332
|
readiness.push({
|
|
312
333
|
chainNamespace: chain.chainNamespace,
|
|
313
334
|
ready: issues.length === 0,
|
|
335
|
+
configurationReady,
|
|
336
|
+
selectedAssets: selectedAssets.map((a) => ({
|
|
337
|
+
...a,
|
|
338
|
+
token: typeof a.token === 'string' ? a.token : { ...a.token },
|
|
339
|
+
})),
|
|
340
|
+
bridgeAssets: routes.bridgeAssets,
|
|
314
341
|
issues,
|
|
315
342
|
disabledCalls: limits.disabledCalls,
|
|
316
343
|
excludedCalls: limits.excludedCalls,
|
|
317
|
-
knownTokens:
|
|
318
|
-
|
|
344
|
+
knownTokens: [
|
|
345
|
+
...new Set([...limits.knownTokens, ...(chain.defaultTokens ?? [])]),
|
|
346
|
+
],
|
|
347
|
+
zeroBridgeLimits: bridgeAssets
|
|
319
348
|
.filter((a) => a.maxPerCall === BigInt(0) || a.maxTotal === BigInt(0))
|
|
320
349
|
.map(operation_limits_1.assetAddress),
|
|
321
350
|
});
|
|
@@ -325,16 +354,12 @@ function buildPresetApi(catalog) {
|
|
|
325
354
|
...(options.agent !== undefined
|
|
326
355
|
? { agent: (0, viem_1.getAddress)(options.agent) }
|
|
327
356
|
: {}),
|
|
328
|
-
|
|
329
|
-
|
|
330
|
-
:
|
|
331
|
-
...(options.assets !== undefined
|
|
332
|
-
? { assets: assets.get(chain.chainNamespace) ?? [] }
|
|
357
|
+
validUntil,
|
|
358
|
+
...(options.assets !== undefined || chain.defaultTokens
|
|
359
|
+
? { assets: bridgeAssets }
|
|
333
360
|
: {}),
|
|
334
|
-
...(
|
|
335
|
-
? {
|
|
336
|
-
maxGasPerCall: cap(options.maxGasPerCall ?? chain.maxGasPerCall, 'maxGasPerCall'),
|
|
337
|
-
}
|
|
361
|
+
...(maxGasPerCall !== undefined
|
|
362
|
+
? { maxGasPerCall: cap(maxGasPerCall, 'maxGasPerCall') }
|
|
338
363
|
: {}),
|
|
339
364
|
};
|
|
340
365
|
});
|
|
@@ -347,7 +372,7 @@ function buildPresetApi(catalog) {
|
|
|
347
372
|
};
|
|
348
373
|
},
|
|
349
374
|
};
|
|
350
|
-
//
|
|
375
|
+
// Expiry is generated; the overload narrows templates when the agent is supplied.
|
|
351
376
|
return Object.freeze(api);
|
|
352
377
|
}
|
|
353
378
|
exports.agenticPresets = buildPresetApi(catalog_1.PRESET_CATALOG);
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { PUSH_NETWORK } from '../../constants/enums';
|
|
2
|
+
import type { RuleAsset } from '../agentic.types';
|
|
3
|
+
import type { PresetChainReadiness, PresetConfigurationIssue } from './types';
|
|
4
|
+
/** Offline registry checks only. Grant preparation still verifies source metadata
|
|
5
|
+
* and wiring against chain state before any signature or transaction. */
|
|
6
|
+
export declare function presetRoutes(chain: string, assets: RuleAsset[], network: PUSH_NETWORK): {
|
|
7
|
+
bridgeAssets: PresetChainReadiness['bridgeAssets'];
|
|
8
|
+
issues: PresetConfigurationIssue[];
|
|
9
|
+
};
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.presetRoutes = presetRoutes;
|
|
4
|
+
const viem_1 = require("viem");
|
|
5
|
+
const enums_1 = require("../../constants/enums");
|
|
6
|
+
const helpers_1 = require("../../orchestrator/internals/helpers");
|
|
7
|
+
const prc20_address_1 = require("../../universal/prc20-address");
|
|
8
|
+
const deployments_1 = require("../deployments");
|
|
9
|
+
const operation_limits_1 = require("./operation-limits");
|
|
10
|
+
/** Offline registry checks only. Grant preparation still verifies source metadata
|
|
11
|
+
* and wiring against chain state before any signature or transaction. */
|
|
12
|
+
function presetRoutes(chain, assets, network) {
|
|
13
|
+
const issues = [];
|
|
14
|
+
network =
|
|
15
|
+
network === enums_1.PUSH_NETWORK.TESTNET ? enums_1.PUSH_NETWORK.TESTNET_DONUT : network;
|
|
16
|
+
if (!(0, deployments_1.generationsFor)(network).some((g) => g.advertised))
|
|
17
|
+
issues.push({
|
|
18
|
+
code: 'AGW_NETWORK_UNAVAILABLE',
|
|
19
|
+
message: `No verified AGW deployment is registered for ${network}.`,
|
|
20
|
+
});
|
|
21
|
+
const supported = helpers_1.SUPPORTED_GATEWAY_CHAINS.includes(chain);
|
|
22
|
+
if (!supported)
|
|
23
|
+
issues.push({
|
|
24
|
+
code: 'DESTINATION_UNAVAILABLE',
|
|
25
|
+
message: `The SDK has no supported gateway route to ${chain}; this is a catalog template.`,
|
|
26
|
+
});
|
|
27
|
+
const bridgeAssets = assets.map((asset) => {
|
|
28
|
+
const token = (0, operation_limits_1.assetAddress)(asset);
|
|
29
|
+
try {
|
|
30
|
+
if (!supported)
|
|
31
|
+
throw new Error(`No supported gateway route to ${chain}`);
|
|
32
|
+
const prc20 = (0, prc20_address_1.getPRC20Address)({ chain, address: token }, { network });
|
|
33
|
+
return {
|
|
34
|
+
token,
|
|
35
|
+
prc20: (0, viem_1.getAddress)(prc20.address),
|
|
36
|
+
status: 'registered',
|
|
37
|
+
};
|
|
38
|
+
}
|
|
39
|
+
catch {
|
|
40
|
+
issues.push({
|
|
41
|
+
code: 'BRIDGE_ASSET_UNAVAILABLE',
|
|
42
|
+
token,
|
|
43
|
+
message: `No SDK PRC20 mapping for ${chain}:${token} on ${network}. Choose a supported asset. This exact token needs a verified Push PRC20 route before it can be used.`,
|
|
44
|
+
});
|
|
45
|
+
return { token, status: 'unavailable' };
|
|
46
|
+
}
|
|
47
|
+
});
|
|
48
|
+
return { bridgeAssets, issues };
|
|
49
|
+
}
|
|
50
|
+
//# sourceMappingURL=routes.js.map
|