@rhinestone/sdk 2.0.0-beta.1 → 2.0.0-beta.10
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 +42 -1
- package/dist/src/accounts/index.d.ts.map +1 -1
- package/dist/src/accounts/index.js +6 -34
- package/dist/src/actions/smart-sessions.d.ts.map +1 -1
- package/dist/src/actions/smart-sessions.js +3 -3
- package/dist/src/execution/error.d.ts +2 -2
- package/dist/src/execution/error.d.ts.map +1 -1
- package/dist/src/execution/error.js +3 -3
- package/dist/src/execution/index.d.ts +9 -9
- package/dist/src/execution/index.d.ts.map +1 -1
- package/dist/src/execution/index.js +18 -32
- package/dist/src/execution/utils.d.ts +11 -9
- package/dist/src/execution/utils.d.ts.map +1 -1
- package/dist/src/execution/utils.js +94 -29
- package/dist/src/index.d.ts +17 -12
- package/dist/src/index.d.ts.map +1 -1
- package/dist/src/index.js +12 -39
- package/dist/src/modules/index.d.ts +2 -2
- package/dist/src/modules/index.d.ts.map +1 -1
- package/dist/src/modules/index.js +2 -2
- package/dist/src/modules/read.d.ts.map +1 -1
- package/dist/src/modules/read.js +2 -4
- package/dist/src/modules/validators/index.d.ts +2 -2
- package/dist/src/modules/validators/index.d.ts.map +1 -1
- package/dist/src/modules/validators/index.js +2 -2
- package/dist/src/modules/validators/permissions.d.ts +5 -0
- package/dist/src/modules/validators/permissions.d.ts.map +1 -0
- package/dist/src/modules/validators/permissions.js +111 -0
- package/dist/src/modules/validators/policies/claim/permit2.d.ts +29 -3
- package/dist/src/modules/validators/policies/claim/permit2.d.ts.map +1 -1
- package/dist/src/modules/validators/smart-sessions.d.ts +14 -27
- package/dist/src/modules/validators/smart-sessions.d.ts.map +1 -1
- package/dist/src/modules/validators/smart-sessions.js +71 -17
- package/dist/src/orchestrator/caip2.d.ts +9 -3
- package/dist/src/orchestrator/caip2.d.ts.map +1 -1
- package/dist/src/orchestrator/caip2.js +40 -5
- package/dist/src/orchestrator/client.d.ts +2 -1
- package/dist/src/orchestrator/client.d.ts.map +1 -1
- package/dist/src/orchestrator/client.js +41 -18
- package/dist/src/orchestrator/consts.d.ts +1 -1
- package/dist/src/orchestrator/consts.d.ts.map +1 -1
- package/dist/src/orchestrator/consts.js +1 -1
- package/dist/src/orchestrator/destinations.d.ts +23 -0
- package/dist/src/orchestrator/destinations.d.ts.map +1 -0
- package/dist/src/orchestrator/destinations.js +36 -0
- package/dist/src/orchestrator/index.d.ts +5 -4
- package/dist/src/orchestrator/index.d.ts.map +1 -1
- package/dist/src/orchestrator/index.js +3 -2
- package/dist/src/orchestrator/registry.d.ts +3 -9
- package/dist/src/orchestrator/registry.d.ts.map +1 -1
- package/dist/src/orchestrator/registry.js +11 -26
- package/dist/src/orchestrator/types.d.ts +47 -15
- package/dist/src/orchestrator/types.d.ts.map +1 -1
- package/dist/src/types.d.ts +124 -33
- package/dist/src/types.d.ts.map +1 -1
- package/dist/src/utils/index.d.ts +2 -1
- package/dist/src/utils/index.d.ts.map +1 -1
- package/dist/src/utils/index.js +2 -1
- package/dist/src/utils/walletClient.d.ts.map +1 -0
- package/dist/src/{accounts → utils}/walletClient.js +1 -1
- package/package.json +2 -6
- package/dist/src/accounts/passport.d.ts +0 -9
- package/dist/src/accounts/passport.d.ts.map +0 -1
- package/dist/src/accounts/passport.js +0 -78
- package/dist/src/accounts/walletClient.d.ts.map +0 -1
- package/dist/src/actions/compact.d.ts +0 -15
- package/dist/src/actions/compact.d.ts.map +0 -1
- package/dist/src/actions/compact.js +0 -200
- package/dist/src/actions/deployment.d.ts +0 -19
- package/dist/src/actions/deployment.d.ts.map +0 -1
- package/dist/src/actions/deployment.js +0 -76
- package/dist/src/execution/permit2.d.ts +0 -7
- package/dist/src/execution/permit2.d.ts.map +0 -1
- package/dist/src/execution/permit2.js +0 -51
- /package/dist/src/{accounts → utils}/walletClient.d.ts +0 -0
|
@@ -0,0 +1,111 @@
|
|
|
1
|
+
import { isAddress, isHex, size, toFunctionSelector, } from 'viem';
|
|
2
|
+
function isStaticAbiType(type) {
|
|
3
|
+
if (type === 'address' || type === 'bool')
|
|
4
|
+
return true;
|
|
5
|
+
if (/^u?int\d*$/.test(type))
|
|
6
|
+
return true;
|
|
7
|
+
if (/^bytes\d+$/.test(type)) {
|
|
8
|
+
const n = Number.parseInt(type.slice(5), 10);
|
|
9
|
+
return n >= 1 && n <= 32;
|
|
10
|
+
}
|
|
11
|
+
return false;
|
|
12
|
+
}
|
|
13
|
+
function toReferenceValue(value, abiType) {
|
|
14
|
+
if (abiType === 'address') {
|
|
15
|
+
if (typeof value === 'string' && isAddress(value))
|
|
16
|
+
return value;
|
|
17
|
+
throw new Error(`Expected address value, got: ${typeof value}`);
|
|
18
|
+
}
|
|
19
|
+
if (abiType === 'bool') {
|
|
20
|
+
if (typeof value === 'boolean')
|
|
21
|
+
return value ? 1n : 0n;
|
|
22
|
+
throw new Error(`Expected boolean value, got: ${typeof value}`);
|
|
23
|
+
}
|
|
24
|
+
if (abiType.startsWith('uint') || abiType.startsWith('int')) {
|
|
25
|
+
if (typeof value === 'bigint')
|
|
26
|
+
return value;
|
|
27
|
+
if (typeof value === 'number')
|
|
28
|
+
return BigInt(value);
|
|
29
|
+
throw new Error(`Expected bigint value for ${abiType}, got: ${typeof value}`);
|
|
30
|
+
}
|
|
31
|
+
if (/^bytes\d+$/.test(abiType)) {
|
|
32
|
+
const expectedSize = Number.parseInt(abiType.slice(5), 10);
|
|
33
|
+
if (typeof value === 'string' &&
|
|
34
|
+
isHex(value) &&
|
|
35
|
+
size(value) === expectedSize) {
|
|
36
|
+
return value;
|
|
37
|
+
}
|
|
38
|
+
throw new Error(`Expected ${expectedSize}-byte hex string for ${abiType}`);
|
|
39
|
+
}
|
|
40
|
+
throw new Error(`Unsupported ABI type: ${abiType}`);
|
|
41
|
+
}
|
|
42
|
+
function resolvePermission(permission) {
|
|
43
|
+
const { abi, address, functions } = permission;
|
|
44
|
+
const actions = [];
|
|
45
|
+
for (const [fnName, fnConfig] of Object.entries(functions)) {
|
|
46
|
+
if (!fnConfig)
|
|
47
|
+
continue;
|
|
48
|
+
const config = fnConfig;
|
|
49
|
+
const abiEntries = abi.filter((entry) => entry.type === 'function' &&
|
|
50
|
+
entry.name === fnName);
|
|
51
|
+
if (abiEntries.length === 0) {
|
|
52
|
+
throw new Error(`Function "${fnName}" not found in the provided ABI.`);
|
|
53
|
+
}
|
|
54
|
+
if (abiEntries.length > 1) {
|
|
55
|
+
throw new Error(`Function "${fnName}" is overloaded (${abiEntries.length} variants). ` +
|
|
56
|
+
'Permission entries do not support overloaded functions. ' +
|
|
57
|
+
'Pre-filter the ABI to a single overload before passing it.');
|
|
58
|
+
}
|
|
59
|
+
const abiEntry = abiEntries[0];
|
|
60
|
+
const selector = toFunctionSelector(abiEntry);
|
|
61
|
+
const policies = config.policies ? [...config.policies] : [];
|
|
62
|
+
const params = config.params ?? {};
|
|
63
|
+
const paramEntries = Object.entries(params).filter(([, v]) => v !== undefined);
|
|
64
|
+
if (paramEntries.length > 0) {
|
|
65
|
+
const rules = paramEntries.map(([paramName, rule]) => {
|
|
66
|
+
const paramIndex = abiEntry.inputs.findIndex((p) => p.name === paramName);
|
|
67
|
+
if (paramIndex === -1) {
|
|
68
|
+
throw new Error(`Parameter "${paramName}" not found in function "${fnName}". ` +
|
|
69
|
+
`Available: ${abiEntry.inputs.map((i) => i.name).join(', ')}`);
|
|
70
|
+
}
|
|
71
|
+
const param = abiEntry.inputs[paramIndex];
|
|
72
|
+
if (!isStaticAbiType(param.type)) {
|
|
73
|
+
throw new Error(`Parameter "${paramName}" has dynamic type "${param.type}". ` +
|
|
74
|
+
'Permission rules only support static types ' +
|
|
75
|
+
'(address, bool, uint*, int*, bytes1–bytes32).');
|
|
76
|
+
}
|
|
77
|
+
const calldataOffset = BigInt(paramIndex) * 32n;
|
|
78
|
+
const referenceValue = toReferenceValue(rule.value, param.type);
|
|
79
|
+
return {
|
|
80
|
+
condition: rule.condition,
|
|
81
|
+
calldataOffset,
|
|
82
|
+
referenceValue,
|
|
83
|
+
...(rule.usageLimit !== undefined
|
|
84
|
+
? { usageLimit: rule.usageLimit }
|
|
85
|
+
: {}),
|
|
86
|
+
};
|
|
87
|
+
});
|
|
88
|
+
policies.push({
|
|
89
|
+
type: 'universal-action',
|
|
90
|
+
valueLimitPerUse: config.valueLimitPerUse ?? 0n,
|
|
91
|
+
rules: rules,
|
|
92
|
+
});
|
|
93
|
+
}
|
|
94
|
+
else if (config.valueLimitPerUse !== undefined) {
|
|
95
|
+
policies.push({
|
|
96
|
+
type: 'value-limit',
|
|
97
|
+
limit: config.valueLimitPerUse,
|
|
98
|
+
});
|
|
99
|
+
}
|
|
100
|
+
actions.push({
|
|
101
|
+
target: address,
|
|
102
|
+
selector,
|
|
103
|
+
...(policies.length > 0 ? { policies } : {}),
|
|
104
|
+
});
|
|
105
|
+
}
|
|
106
|
+
return actions;
|
|
107
|
+
}
|
|
108
|
+
function resolvePermissions(permissions) {
|
|
109
|
+
return permissions.flatMap(resolvePermission);
|
|
110
|
+
}
|
|
111
|
+
export { resolvePermissions, resolvePermission };
|
|
@@ -1,5 +1,30 @@
|
|
|
1
1
|
import { type Address, type Hex } from 'viem';
|
|
2
|
-
|
|
2
|
+
interface InternalPermit2ClaimPolicy {
|
|
3
|
+
type: 'permit2-claim';
|
|
4
|
+
arbiters?: Address[];
|
|
5
|
+
tokensIn?: {
|
|
6
|
+
chainId: number;
|
|
7
|
+
token: Address;
|
|
8
|
+
}[];
|
|
9
|
+
tokensOut?: {
|
|
10
|
+
chainId: number;
|
|
11
|
+
token: Address;
|
|
12
|
+
}[];
|
|
13
|
+
recipients?: {
|
|
14
|
+
chainId: number;
|
|
15
|
+
recipient: Address | 'any';
|
|
16
|
+
}[];
|
|
17
|
+
recipientIsSponsor?: boolean;
|
|
18
|
+
expiryBounds?: {
|
|
19
|
+
min?: bigint;
|
|
20
|
+
max?: bigint;
|
|
21
|
+
};
|
|
22
|
+
fillExpiryBounds?: {
|
|
23
|
+
chainId: number;
|
|
24
|
+
min?: bigint;
|
|
25
|
+
max?: bigint;
|
|
26
|
+
}[];
|
|
27
|
+
}
|
|
3
28
|
/** Typed representation of the Permit2 message fields used for calldata building */
|
|
4
29
|
export interface Permit2ClaimMessage {
|
|
5
30
|
permitted: readonly {
|
|
@@ -49,7 +74,8 @@ export interface Permit2ClaimMessage {
|
|
|
49
74
|
* else — pre-computed mandateHash [32]
|
|
50
75
|
*
|
|
51
76
|
*/
|
|
52
|
-
export declare function buildPermit2ClaimPolicyCalldata(policy:
|
|
77
|
+
export declare function buildPermit2ClaimPolicyCalldata(policy: InternalPermit2ClaimPolicy, message: Permit2ClaimMessage): Hex;
|
|
53
78
|
export declare const PERMIT2_CLAIM_POLICY_ADDRESS: Address;
|
|
54
|
-
export declare function encodePermit2ClaimPolicyInitData(policy:
|
|
79
|
+
export declare function encodePermit2ClaimPolicyInitData(policy: InternalPermit2ClaimPolicy): Hex;
|
|
80
|
+
export type { InternalPermit2ClaimPolicy };
|
|
55
81
|
//# sourceMappingURL=permit2.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"permit2.d.ts","sourceRoot":"","sources":["../../../../../../modules/validators/policies/claim/permit2.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,KAAK,OAAO,EAIZ,KAAK,GAAG,EAKT,MAAM,MAAM,CAAA;
|
|
1
|
+
{"version":3,"file":"permit2.d.ts","sourceRoot":"","sources":["../../../../../../modules/validators/policies/claim/permit2.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,KAAK,OAAO,EAIZ,KAAK,GAAG,EAKT,MAAM,MAAM,CAAA;AAab,UAAU,0BAA0B;IAClC,IAAI,EAAE,eAAe,CAAA;IACrB,QAAQ,CAAC,EAAE,OAAO,EAAE,CAAA;IACpB,QAAQ,CAAC,EAAE;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,OAAO,CAAA;KAAE,EAAE,CAAA;IAChD,SAAS,CAAC,EAAE;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,OAAO,CAAA;KAAE,EAAE,CAAA;IACjD,UAAU,CAAC,EAAE;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,OAAO,GAAG,KAAK,CAAA;KAAE,EAAE,CAAA;IAC9D,kBAAkB,CAAC,EAAE,OAAO,CAAA;IAC5B,YAAY,CAAC,EAAE;QAAE,GAAG,CAAC,EAAE,MAAM,CAAC;QAAC,GAAG,CAAC,EAAE,MAAM,CAAA;KAAE,CAAA;IAC7C,gBAAgB,CAAC,EAAE;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,GAAG,CAAC,EAAE,MAAM,CAAC;QAAC,GAAG,CAAC,EAAE,MAAM,CAAA;KAAE,EAAE,CAAA;CACrE;AAsCD,oFAAoF;AACpF,MAAM,WAAW,mBAAmB;IAClC,SAAS,EAAE,SAAS;QAAE,KAAK,EAAE,OAAO,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,EAAE,CAAA;IACxD,OAAO,EAAE,OAAO,CAAA;IAChB,KAAK,EAAE,MAAM,CAAA;IACb,QAAQ,EAAE,MAAM,CAAA;IAChB,OAAO,EAAE;QACP,MAAM,EAAE;YACN,SAAS,EAAE,OAAO,CAAA;YAClB,QAAQ,EAAE,SAAS;gBAAE,KAAK,EAAE,OAAO,CAAC;gBAAC,MAAM,EAAE,MAAM,CAAA;aAAE,EAAE,CAAA;YACvD,WAAW,EAAE,MAAM,CAAA;YACnB,UAAU,EAAE,MAAM,CAAA;SACnB,CAAA;QACD,MAAM,EAAE,MAAM,CAAA;QACd,SAAS,EAAE;YACT,EAAE,EAAE,GAAG,CAAA;YACP,GAAG,EAAE,SAAS;gBAAE,EAAE,EAAE,OAAO,CAAC;gBAAC,KAAK,EAAE,MAAM,CAAC;gBAAC,IAAI,EAAE,GAAG,CAAA;aAAE,EAAE,CAAA;SAC1D,CAAA;QACD,OAAO,EAAE;YACP,EAAE,EAAE,GAAG,CAAA;YACP,GAAG,EAAE,SAAS;gBAAE,EAAE,EAAE,OAAO,CAAC;gBAAC,KAAK,EAAE,MAAM,CAAC;gBAAC,IAAI,EAAE,GAAG,CAAA;aAAE,EAAE,CAAA;SAC1D,CAAA;QACD,CAAC,EAAE,GAAG,CAAA;KACP,CAAA;CACF;AA+ED;;;;;;;;;GASG;AACH,wBAAgB,+BAA+B,CAC7C,MAAM,EAAE,0BAA0B,EAClC,OAAO,EAAE,mBAAmB,GAC3B,GAAG,CA2EL;AAED,eAAO,MAAM,4BAA4B,EAAE,OACG,CAAA;AAE9C,wBAAgB,gCAAgC,CAC9C,MAAM,EAAE,0BAA0B,GACjC,GAAG,CA2FL;AAED,YAAY,EAAE,0BAA0B,EAAE,CAAA"}
|
|
@@ -1,35 +1,18 @@
|
|
|
1
|
-
import { type Address, type Hex, type TypedDataDefinition } from 'viem';
|
|
2
|
-
import type { Policy, ProviderConfig, RhinestoneAccountConfig, RhinestoneConfig, Session, SessionEnableData } from '../../types.js';
|
|
1
|
+
import { type Abi, type Address, type Hex, type TypedDataDefinition } from 'viem';
|
|
2
|
+
import type { Permit2ClaimPolicy, Policy, ProviderConfig, ResolvedAction, ResolvedERC7739Policies, ResolvedPolicy, RhinestoneAccountConfig, RhinestoneConfig, Session, SessionDefinition, SessionEnableData } from '../../types.js';
|
|
3
3
|
import { type Module } from '../common.js';
|
|
4
4
|
import { SMART_SESSION_EMISSARY_ADDRESS, SMART_SESSION_EMISSARY_ADDRESS_DEV } from './core.js';
|
|
5
|
+
import { type InternalPermit2ClaimPolicy } from './policies/claim/permit2.js';
|
|
5
6
|
interface SessionData {
|
|
6
7
|
sessionValidator: Address;
|
|
7
8
|
sessionValidatorInitData: Hex;
|
|
8
9
|
salt: Hex;
|
|
9
|
-
erc7739Policies:
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
};
|
|
13
|
-
actions: readonly ActionData[];
|
|
14
|
-
claimPolicies: readonly PolicyData[];
|
|
15
|
-
}
|
|
16
|
-
interface ERC1271Policy {
|
|
17
|
-
policy: Address;
|
|
18
|
-
initData: Hex;
|
|
19
|
-
}
|
|
20
|
-
interface AllowedERC7739Content {
|
|
21
|
-
appDomainSeparator: Hex;
|
|
22
|
-
contentNames: readonly string[];
|
|
23
|
-
}
|
|
24
|
-
interface ActionData {
|
|
25
|
-
actionTargetSelector: Hex;
|
|
26
|
-
actionTarget: Address;
|
|
27
|
-
actionPolicies: readonly PolicyData[];
|
|
28
|
-
}
|
|
29
|
-
interface PolicyData {
|
|
30
|
-
policy: Address;
|
|
31
|
-
initData: Hex;
|
|
10
|
+
erc7739Policies: ResolvedERC7739Policies;
|
|
11
|
+
actions: readonly ResolvedAction[];
|
|
12
|
+
claimPolicies: readonly ResolvedPolicy[];
|
|
32
13
|
}
|
|
14
|
+
type ActionData = ResolvedAction;
|
|
15
|
+
type PolicyData = ResolvedPolicy;
|
|
33
16
|
type SmartSessionModeType = typeof SMART_SESSION_MODE_USE | typeof SMART_SESSION_MODE_ENABLE;
|
|
34
17
|
interface ChainDigest {
|
|
35
18
|
chainId: bigint;
|
|
@@ -191,7 +174,11 @@ declare function getEnableSessionCall(account: Address, session: Session, enable
|
|
|
191
174
|
to: `0x${string}`;
|
|
192
175
|
data: `0x${string}`;
|
|
193
176
|
}>;
|
|
194
|
-
declare function
|
|
177
|
+
declare function toSession<const TAbis extends readonly Abi[]>(definition: SessionDefinition<TAbis>, options?: {
|
|
178
|
+
useDevContracts?: boolean;
|
|
179
|
+
}): Session;
|
|
180
|
+
declare function resolvePermit2ClaimPolicy(policy: Permit2ClaimPolicy): InternalPermit2ClaimPolicy;
|
|
181
|
+
declare function getSessionData(session: Session): SessionData;
|
|
195
182
|
declare function getPermissionId(session: Session): `0x${string}`;
|
|
196
183
|
declare function getPolicyData(policy: Policy, useDevContracts?: boolean): PolicyData;
|
|
197
184
|
declare function getSmartSessionValidator(config: RhinestoneConfig): Module | null;
|
|
@@ -204,6 +191,6 @@ declare function getSmartSessionValidator(config: RhinestoneConfig): Module | nu
|
|
|
204
191
|
* simulates verifyExecution with the mock emissary to estimate gas before the user signs.
|
|
205
192
|
*/
|
|
206
193
|
declare function buildMockSignature(session: Session, useDevContracts?: boolean, chainCount?: number, targetChainId?: number): Hex;
|
|
207
|
-
export { SMART_SESSION_EMISSARY_ADDRESS, SMART_SESSION_EMISSARY_ADDRESS_DEV, SMART_SESSIONS_FALLBACK_TARGET_FLAG, SMART_SESSIONS_FALLBACK_TARGET_SELECTOR_FLAG, SMART_SESSIONS_FALLBACK_TARGET_SELECTOR_FLAG_PERMITTED_TO_CALL_SMARTSESSION, DUMMY_PRECLAIMOP_TARGET, DUMMY_PRECLAIMOP_SELECTOR, SPENDING_LIMITS_POLICY_ADDRESS, TIME_FRAME_POLICY_ADDRESS, SUDO_POLICY_ADDRESS, UNIVERSAL_ACTION_POLICY_ADDRESS, USAGE_LIMIT_POLICY_ADDRESS, VALUE_LIMIT_POLICY_ADDRESS, INTENT_EXECUTION_POLICY_ADDRESS, packSignature, getSessionData, getPolicyData, getEnableSessionCall, getPermissionId, getSmartSessionValidator, getSessionDetails, isSessionEnabled, signEnableSession, buildMockSignature, };
|
|
194
|
+
export { SMART_SESSION_EMISSARY_ADDRESS, SMART_SESSION_EMISSARY_ADDRESS_DEV, SMART_SESSIONS_FALLBACK_TARGET_FLAG, SMART_SESSIONS_FALLBACK_TARGET_SELECTOR_FLAG, SMART_SESSIONS_FALLBACK_TARGET_SELECTOR_FLAG_PERMITTED_TO_CALL_SMARTSESSION, DUMMY_PRECLAIMOP_TARGET, DUMMY_PRECLAIMOP_SELECTOR, SPENDING_LIMITS_POLICY_ADDRESS, TIME_FRAME_POLICY_ADDRESS, SUDO_POLICY_ADDRESS, UNIVERSAL_ACTION_POLICY_ADDRESS, USAGE_LIMIT_POLICY_ADDRESS, VALUE_LIMIT_POLICY_ADDRESS, INTENT_EXECUTION_POLICY_ADDRESS, packSignature, toSession, resolvePermit2ClaimPolicy, getSessionData, getPolicyData, getEnableSessionCall, getPermissionId, getSmartSessionValidator, getSessionDetails, isSessionEnabled, signEnableSession, buildMockSignature, };
|
|
208
195
|
export type { ChainSession, ChainDigest, ResolvedSessionSignerSet, SessionData, SmartSessionModeType, SessionDetails, };
|
|
209
196
|
//# sourceMappingURL=smart-sessions.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"smart-sessions.d.ts","sourceRoot":"","sources":["../../../../modules/validators/smart-sessions.ts"],"names":[],"mappings":"AACA,OAAO,EACL,KAAK,OAAO,EAMZ,KAAK,GAAG,EAOR,KAAK,mBAAmB,EAKzB,MAAM,MAAM,CAAA;AAcb,OAAO,KAAK,EAEV,MAAM,EACN,cAAc,EACd,uBAAuB,EACvB,gBAAgB,EAChB,OAAO,EACP,iBAAiB,EAElB,MAAM,aAAa,CAAA;AAEpB,OAAO,EAA4B,KAAK,MAAM,EAAE,MAAM,WAAW,CAAA;AACjE,OAAO,EAGL,8BAA8B,EAC9B,kCAAkC,EACnC,MAAM,QAAQ,CAAA;
|
|
1
|
+
{"version":3,"file":"smart-sessions.d.ts","sourceRoot":"","sources":["../../../../modules/validators/smart-sessions.ts"],"names":[],"mappings":"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"}
|
|
@@ -10,6 +10,7 @@ import { getChainById, getWrappedTokenAddress, } from '../../orchestrator/regist
|
|
|
10
10
|
import smartSessionEmissaryAbi from '../abi/smart-session-emissary.js';
|
|
11
11
|
import { MODULE_TYPE_ID_VALIDATOR } from '../common.js';
|
|
12
12
|
import { getOwnerValidator, getValidator, SMART_SESSION_EMISSARY_ADDRESS, SMART_SESSION_EMISSARY_ADDRESS_DEV, } from './core.js';
|
|
13
|
+
import { resolvePermissions } from './permissions.js';
|
|
13
14
|
import { encodePermit2ClaimPolicyInitData, PERMIT2_CLAIM_POLICY_ADDRESS, } from './policies/claim/permit2.js';
|
|
14
15
|
const types = {
|
|
15
16
|
PolicyData: [
|
|
@@ -230,7 +231,7 @@ function packSignature(signers, validatorSignature) {
|
|
|
230
231
|
async function getSessionDetails(account, sessions, provider, useDevContracts) {
|
|
231
232
|
const lockTag = '0x000000000000000000000000';
|
|
232
233
|
const sessionNonces = await Promise.all(sessions.map((session) => getSessionNonce(account, session, lockTag, provider, useDevContracts)));
|
|
233
|
-
const sessionDatas = sessions.map((session) => getSessionData(session
|
|
234
|
+
const sessionDatas = sessions.map((session) => getSessionData(session));
|
|
234
235
|
const signedSessions = sessionDatas.map((session, index) => getSignedSession(account, lockTag, session, sessionNonces[index], useDevContracts));
|
|
235
236
|
const chains = sessions.map((session) => session.chain);
|
|
236
237
|
const hashesAndChainIds = signedSessions.map((session, index) => ({
|
|
@@ -359,7 +360,7 @@ function getSignedSession(account, lockTag, session, nonce, useDevContracts) {
|
|
|
359
360
|
};
|
|
360
361
|
}
|
|
361
362
|
async function getEnableSessionCall(account, session, enableSessionSignature, hashesAndChainIds, sessionToEnableIndex, useDevContracts) {
|
|
362
|
-
const sessionData = getSessionData(session
|
|
363
|
+
const sessionData = getSessionData(session);
|
|
363
364
|
const permissionId = getPermissionId(session);
|
|
364
365
|
return {
|
|
365
366
|
to: getSmartSessionEmissaryAddress(useDevContracts),
|
|
@@ -388,7 +389,47 @@ async function getEnableSessionCall(account, session, enableSessionSignature, ha
|
|
|
388
389
|
}),
|
|
389
390
|
};
|
|
390
391
|
}
|
|
391
|
-
function
|
|
392
|
+
function toSession(definition, options = {}) {
|
|
393
|
+
const sessionData = resolveSessionData(definition, options.useDevContracts);
|
|
394
|
+
return {
|
|
395
|
+
chain: definition.chain,
|
|
396
|
+
owners: definition.owners,
|
|
397
|
+
hasExplicitPermissions: !!definition.permissions?.length,
|
|
398
|
+
permissionId: getPermissionIdFromData(sessionData),
|
|
399
|
+
sessionValidator: sessionData.sessionValidator,
|
|
400
|
+
sessionValidatorInitData: sessionData.sessionValidatorInitData,
|
|
401
|
+
salt: sessionData.salt,
|
|
402
|
+
erc7739Policies: sessionData.erc7739Policies,
|
|
403
|
+
actions: sessionData.actions,
|
|
404
|
+
claimPolicies: definition.claimPolicies ?? [],
|
|
405
|
+
};
|
|
406
|
+
}
|
|
407
|
+
function resolvePermit2ClaimPolicy(policy) {
|
|
408
|
+
return {
|
|
409
|
+
type: 'permit2-claim',
|
|
410
|
+
arbiters: policy.spenders,
|
|
411
|
+
tokensIn: policy.sourceTokens?.map(({ chain, address }) => ({
|
|
412
|
+
chainId: chain.id,
|
|
413
|
+
token: address,
|
|
414
|
+
})),
|
|
415
|
+
tokensOut: policy.destinationTokens?.map(({ chain, address }) => ({
|
|
416
|
+
chainId: chain.id,
|
|
417
|
+
token: address,
|
|
418
|
+
})),
|
|
419
|
+
recipients: policy.recipients?.map(({ chain, address }) => ({
|
|
420
|
+
chainId: chain.id,
|
|
421
|
+
recipient: address,
|
|
422
|
+
})),
|
|
423
|
+
recipientIsSponsor: policy.recipientIsAccount,
|
|
424
|
+
expiryBounds: policy.permitDeadline,
|
|
425
|
+
fillExpiryBounds: policy.fillDeadline?.map(({ chain, min, max }) => ({
|
|
426
|
+
chainId: chain.id,
|
|
427
|
+
min,
|
|
428
|
+
max,
|
|
429
|
+
})),
|
|
430
|
+
};
|
|
431
|
+
}
|
|
432
|
+
function resolveSessionData(session, useDevContracts) {
|
|
392
433
|
const validator = getValidator(session.owners);
|
|
393
434
|
const allowedContent = [
|
|
394
435
|
{
|
|
@@ -415,7 +456,9 @@ function getSessionData(session, useDevContracts) {
|
|
|
415
456
|
},
|
|
416
457
|
],
|
|
417
458
|
};
|
|
418
|
-
const
|
|
459
|
+
const userActions = session.permissions?.length
|
|
460
|
+
? resolvePermissions(session.permissions)
|
|
461
|
+
: [];
|
|
419
462
|
const injectedActions = [
|
|
420
463
|
// Native token wrapping
|
|
421
464
|
{
|
|
@@ -428,12 +471,8 @@ function getSessionData(session, useDevContracts) {
|
|
|
428
471
|
stateMutability: 'payable',
|
|
429
472
|
}),
|
|
430
473
|
},
|
|
431
|
-
//
|
|
432
|
-
|
|
433
|
-
// causing IntentExecutionPolicy to be required for all fallback calls
|
|
434
|
-
...(!userHasFallbackAction
|
|
435
|
-
? [{ policies: [{ type: 'intent-execution' }] }]
|
|
436
|
-
: []),
|
|
474
|
+
// Intent-execution fallback for any non-scoped call.
|
|
475
|
+
{ policies: [{ type: 'intent-execution' }] },
|
|
437
476
|
// Dummy action: allows the filler to call verifyExecution in ENABLE mode using
|
|
438
477
|
// an injected dummy preclaimop so any session can be enabled on-chain without
|
|
439
478
|
// a separate UserOp, regardless of whether it has claim or action policies.
|
|
@@ -443,8 +482,9 @@ function getSessionData(session, useDevContracts) {
|
|
|
443
482
|
policies: [{ type: 'sudo' }],
|
|
444
483
|
},
|
|
445
484
|
];
|
|
446
|
-
const
|
|
447
|
-
|
|
485
|
+
const allActions = [...userActions, ...injectedActions];
|
|
486
|
+
const actions = userActions.length
|
|
487
|
+
? allActions.map((action) => ({
|
|
448
488
|
actionTargetSelector: 'selector' in action
|
|
449
489
|
? action.selector
|
|
450
490
|
: SMART_SESSIONS_FALLBACK_TARGET_SELECTOR_FLAG,
|
|
@@ -465,15 +505,29 @@ function getSessionData(session, useDevContracts) {
|
|
|
465
505
|
sessionValidatorInitData: validator.initData,
|
|
466
506
|
erc7739Policies: erc7739Data,
|
|
467
507
|
actions,
|
|
468
|
-
|
|
469
|
-
claimPolicies: session.claimPolicies?.map((p) => ({
|
|
508
|
+
claimPolicies: session.claimPolicies?.map((policy) => ({
|
|
470
509
|
policy: PERMIT2_CLAIM_POLICY_ADDRESS,
|
|
471
|
-
initData: encodePermit2ClaimPolicyInitData(
|
|
510
|
+
initData: encodePermit2ClaimPolicyInitData(resolvePermit2ClaimPolicy(policy)),
|
|
472
511
|
})) ?? [],
|
|
473
512
|
};
|
|
474
513
|
}
|
|
514
|
+
function getSessionData(session) {
|
|
515
|
+
return {
|
|
516
|
+
sessionValidator: session.sessionValidator,
|
|
517
|
+
salt: session.salt,
|
|
518
|
+
sessionValidatorInitData: session.sessionValidatorInitData,
|
|
519
|
+
erc7739Policies: session.erc7739Policies,
|
|
520
|
+
actions: session.actions,
|
|
521
|
+
claimPolicies: session.claimPolicies.map((policy) => ({
|
|
522
|
+
policy: PERMIT2_CLAIM_POLICY_ADDRESS,
|
|
523
|
+
initData: encodePermit2ClaimPolicyInitData(resolvePermit2ClaimPolicy(policy)),
|
|
524
|
+
})),
|
|
525
|
+
};
|
|
526
|
+
}
|
|
475
527
|
function getPermissionId(session) {
|
|
476
|
-
|
|
528
|
+
return session.permissionId;
|
|
529
|
+
}
|
|
530
|
+
function getPermissionIdFromData(sessionData) {
|
|
477
531
|
return keccak256(encodeAbiParameters([
|
|
478
532
|
{
|
|
479
533
|
type: 'address',
|
|
@@ -715,4 +769,4 @@ function buildMockSignature(session, useDevContracts, chainCount = 1, targetChai
|
|
|
715
769
|
function createFixedArray(length, getValue) {
|
|
716
770
|
return Array.from({ length }, (_, i) => getValue(i));
|
|
717
771
|
}
|
|
718
|
-
export { SMART_SESSION_EMISSARY_ADDRESS, SMART_SESSION_EMISSARY_ADDRESS_DEV, SMART_SESSIONS_FALLBACK_TARGET_FLAG, SMART_SESSIONS_FALLBACK_TARGET_SELECTOR_FLAG, SMART_SESSIONS_FALLBACK_TARGET_SELECTOR_FLAG_PERMITTED_TO_CALL_SMARTSESSION, DUMMY_PRECLAIMOP_TARGET, DUMMY_PRECLAIMOP_SELECTOR, SPENDING_LIMITS_POLICY_ADDRESS, TIME_FRAME_POLICY_ADDRESS, SUDO_POLICY_ADDRESS, UNIVERSAL_ACTION_POLICY_ADDRESS, USAGE_LIMIT_POLICY_ADDRESS, VALUE_LIMIT_POLICY_ADDRESS, INTENT_EXECUTION_POLICY_ADDRESS, packSignature, getSessionData, getPolicyData, getEnableSessionCall, getPermissionId, getSmartSessionValidator, getSessionDetails, isSessionEnabled, signEnableSession, buildMockSignature, };
|
|
772
|
+
export { SMART_SESSION_EMISSARY_ADDRESS, SMART_SESSION_EMISSARY_ADDRESS_DEV, SMART_SESSIONS_FALLBACK_TARGET_FLAG, SMART_SESSIONS_FALLBACK_TARGET_SELECTOR_FLAG, SMART_SESSIONS_FALLBACK_TARGET_SELECTOR_FLAG_PERMITTED_TO_CALL_SMARTSESSION, DUMMY_PRECLAIMOP_TARGET, DUMMY_PRECLAIMOP_SELECTOR, SPENDING_LIMITS_POLICY_ADDRESS, TIME_FRAME_POLICY_ADDRESS, SUDO_POLICY_ADDRESS, UNIVERSAL_ACTION_POLICY_ADDRESS, USAGE_LIMIT_POLICY_ADDRESS, VALUE_LIMIT_POLICY_ADDRESS, INTENT_EXECUTION_POLICY_ADDRESS, packSignature, toSession, resolvePermit2ClaimPolicy, getSessionData, getPolicyData, getEnableSessionCall, getPermissionId, getSmartSessionValidator, getSessionDetails, isSessionEnabled, signEnableSession, buildMockSignature, };
|
|
@@ -1,7 +1,13 @@
|
|
|
1
|
-
type
|
|
1
|
+
type EvmCaip2ChainId = `eip155:${number}`;
|
|
2
|
+
type SolanaCaip2ChainId = `solana:${string}`;
|
|
3
|
+
type TronCaip2ChainId = `tron:${string}`;
|
|
4
|
+
type Caip2ChainId = EvmCaip2ChainId | SolanaCaip2ChainId | TronCaip2ChainId;
|
|
2
5
|
declare function toCaip2(chainId: number): Caip2ChainId;
|
|
3
6
|
declare function fromCaip2(chainId: string): number;
|
|
4
7
|
declare function isCaip2(chainId: string): chainId is Caip2ChainId;
|
|
5
|
-
|
|
6
|
-
|
|
8
|
+
declare function isEvmCaip2(chainId: string): chainId is EvmCaip2ChainId;
|
|
9
|
+
/** True when a numeric chain id corresponds to a known non-eip155 namespace. */
|
|
10
|
+
declare function isNonEvmChainId(chainId: number): boolean;
|
|
11
|
+
export type { Caip2ChainId, EvmCaip2ChainId, SolanaCaip2ChainId, TronCaip2ChainId, };
|
|
12
|
+
export { fromCaip2, isCaip2, isEvmCaip2, isNonEvmChainId, toCaip2 };
|
|
7
13
|
//# sourceMappingURL=caip2.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"caip2.d.ts","sourceRoot":"","sources":["../../../orchestrator/caip2.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"caip2.d.ts","sourceRoot":"","sources":["../../../orchestrator/caip2.ts"],"names":[],"mappings":"AAOA,KAAK,eAAe,GAAG,UAAU,MAAM,EAAE,CAAA;AACzC,KAAK,kBAAkB,GAAG,UAAU,MAAM,EAAE,CAAA;AAC5C,KAAK,gBAAgB,GAAG,QAAQ,MAAM,EAAE,CAAA;AACxC,KAAK,YAAY,GAAG,eAAe,GAAG,kBAAkB,GAAG,gBAAgB,CAAA;AAmB3E,iBAAS,OAAO,CAAC,OAAO,EAAE,MAAM,GAAG,YAAY,CAO9C;AAED,iBAAS,SAAS,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAS1C;AAED,iBAAS,OAAO,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,IAAI,YAAY,CAGzD;AAED,iBAAS,UAAU,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,IAAI,eAAe,CAE/D;AAED,gFAAgF;AAChF,iBAAS,eAAe,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAEjD;AAED,YAAY,EACV,YAAY,EACZ,eAAe,EACf,kBAAkB,EAClB,gBAAgB,GACjB,CAAA;AACD,OAAO,EAAE,SAAS,EAAE,OAAO,EAAE,UAAU,EAAE,eAAe,EAAE,OAAO,EAAE,CAAA"}
|
|
@@ -1,17 +1,52 @@
|
|
|
1
|
+
// CAIP-2 wire format. Mirrors the orchestrator's caip2.ts namespace registry
|
|
2
|
+
// — Solana / Tron synthetic numeric ids round-trip through the same CAIP-2
|
|
3
|
+
// strings the orchestrator emits, so the SDK and orchestrator agree on the
|
|
4
|
+
// wire shape without needing the user to think about CAIP-2 themselves.
|
|
5
|
+
//
|
|
6
|
+
// Spec: https://chainagnostic.org/CAIPs/caip-2
|
|
1
7
|
const EIP155_CAIP2_REGEX = /^eip155:\d+$/;
|
|
8
|
+
const NON_EIP155_CAIP2_REGEX = /^(?:solana|tron):[-_a-zA-Z0-9]{1,32}$/;
|
|
9
|
+
// Synthetic numeric ids ↔ CAIP-2 strings for non-eip155 chains. Must match
|
|
10
|
+
// the orchestrator's NON_EIP155_CAIP2_TO_ID exactly — these flow over the
|
|
11
|
+
// wire and any drift would cause routing failures.
|
|
12
|
+
const NON_EIP155_ID_TO_CAIP2 = {
|
|
13
|
+
792703809: 'solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp',
|
|
14
|
+
728126428: 'tron:0x2b6653dc',
|
|
15
|
+
};
|
|
16
|
+
const NON_EIP155_CAIP2_TO_ID = Object.fromEntries(Object.entries(NON_EIP155_ID_TO_CAIP2).map(([id, caip2]) => [
|
|
17
|
+
caip2,
|
|
18
|
+
Number(id),
|
|
19
|
+
]));
|
|
2
20
|
function toCaip2(chainId) {
|
|
3
21
|
if (!Number.isInteger(chainId) || chainId < 0) {
|
|
4
|
-
throw new Error(`Invalid
|
|
22
|
+
throw new Error(`Invalid chain id: ${chainId}`);
|
|
5
23
|
}
|
|
24
|
+
const nonEvm = NON_EIP155_ID_TO_CAIP2[chainId];
|
|
25
|
+
if (nonEvm)
|
|
26
|
+
return nonEvm;
|
|
6
27
|
return `eip155:${chainId}`;
|
|
7
28
|
}
|
|
8
29
|
function fromCaip2(chainId) {
|
|
9
|
-
if (
|
|
10
|
-
|
|
30
|
+
if (EIP155_CAIP2_REGEX.test(chainId)) {
|
|
31
|
+
return Number(chainId.slice('eip155:'.length));
|
|
11
32
|
}
|
|
12
|
-
|
|
33
|
+
if (NON_EIP155_CAIP2_REGEX.test(chainId)) {
|
|
34
|
+
const id = NON_EIP155_CAIP2_TO_ID[chainId];
|
|
35
|
+
if (id !== undefined)
|
|
36
|
+
return id;
|
|
37
|
+
}
|
|
38
|
+
throw new Error(`Invalid CAIP-2 chain id: ${chainId}`);
|
|
13
39
|
}
|
|
14
40
|
function isCaip2(chainId) {
|
|
41
|
+
if (EIP155_CAIP2_REGEX.test(chainId))
|
|
42
|
+
return true;
|
|
43
|
+
return chainId in NON_EIP155_CAIP2_TO_ID;
|
|
44
|
+
}
|
|
45
|
+
function isEvmCaip2(chainId) {
|
|
15
46
|
return EIP155_CAIP2_REGEX.test(chainId);
|
|
16
47
|
}
|
|
17
|
-
|
|
48
|
+
/** True when a numeric chain id corresponds to a known non-eip155 namespace. */
|
|
49
|
+
function isNonEvmChainId(chainId) {
|
|
50
|
+
return chainId in NON_EIP155_ID_TO_CAIP2;
|
|
51
|
+
}
|
|
52
|
+
export { fromCaip2, isCaip2, isEvmCaip2, isNonEvmChainId, toCaip2 };
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import type { Address } from 'viem';
|
|
2
2
|
import type { AuthProvider } from '../auth/provider.js';
|
|
3
|
-
import type { IntentInput, IntentOpStatus, IntentSubmitRequestInternal, IntentSubmitResponse, Portfolio, QuoteResponse, SplitIntentsInput, SplitIntentsResult } from './types.js';
|
|
3
|
+
import type { IntentInput, IntentOpStatus, IntentSubmitRequestInternal, IntentSubmitResponse, Portfolio, QuoteResponse, SettlementLayerFilter, SplitIntentsInput, SplitIntentsResult } from './types.js';
|
|
4
4
|
interface PolicyContext {
|
|
5
5
|
intentInput: unknown;
|
|
6
6
|
isSponsored: boolean;
|
|
@@ -24,5 +24,6 @@ export declare class Orchestrator {
|
|
|
24
24
|
private getSubmitHeaders;
|
|
25
25
|
private fetch;
|
|
26
26
|
}
|
|
27
|
+
export declare function encodeSettlementLayers(filter: SettlementLayerFilter): readonly string[];
|
|
27
28
|
export {};
|
|
28
29
|
//# sourceMappingURL=client.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../../orchestrator/client.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,MAAM,CAAA;AACnC,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAA;AAQpD,OAAO,KAAK,
|
|
1
|
+
{"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../../orchestrator/client.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,MAAM,CAAA;AACnC,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAA;AAQpD,OAAO,KAAK,EAMV,WAAW,EACX,cAAc,EAEd,2BAA2B,EAC3B,oBAAoB,EACpB,SAAS,EAET,aAAa,EACb,qBAAqB,EACrB,iBAAiB,EACjB,kBAAkB,EAEnB,MAAM,SAAS,CAAA;AAGhB,UAAU,aAAa;IACrB,WAAW,EAAE,OAAO,CAAA;IACpB,WAAW,EAAE,OAAO,CAAA;CACrB;AAED,qBAAa,YAAY;IACvB,OAAO,CAAC,SAAS,CAAQ;IACzB,OAAO,CAAC,YAAY,CAAc;IAClC,OAAO,CAAC,YAAY,CAAC,CAAwB;gBAG3C,SAAS,EAAE,MAAM,EACjB,YAAY,EAAE,YAAY,EAC1B,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC;IAO5B,YAAY,CAChB,cAAc,EAAE,OAAO,EACvB,MAAM,CAAC,EAAE;QACP,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAA;QACnB,MAAM,CAAC,EAAE;YAAE,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,EAAE,CAAA;SAAE,CAAA;KAC1C,GACA,OAAO,CAAC,SAAS,CAAC;IAyCf,WAAW,CAAC,KAAK,EAAE,WAAW,GAAG,OAAO,CAAC,aAAa,CAAC;IAUvD,QAAQ,CAAC,KAAK,EAAE,iBAAiB,GAAG,OAAO,CAAC,kBAAkB,CAAC;IAoB/D,YAAY,CAChB,OAAO,EAAE,2BAA2B,EACpC,aAAa,CAAC,EAAE,aAAa,GAC5B,OAAO,CAAC,oBAAoB,CAAC;IAe1B,SAAS,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,CAAC;YAoB5C,UAAU;YAWV,gBAAgB;YAiBhB,KAAK;CAwBpB;AA4HD,wBAAgB,sBAAsB,CACpC,MAAM,EAAE,qBAAqB,GAC5B,SAAS,MAAM,EAAE,CAInB"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { fromCaip2, toCaip2 } from './caip2.js';
|
|
1
|
+
import { fromCaip2, isCaip2, toCaip2 } from './caip2.js';
|
|
2
2
|
import { API_VERSION, SDK_VERSION } from './consts.js';
|
|
3
3
|
import { OrchestratorError, parseErrorEnvelope, } from './error.js';
|
|
4
4
|
import { convertBigIntFields } from './utils.js';
|
|
@@ -37,8 +37,7 @@ export class Orchestrator {
|
|
|
37
37
|
chain: parseChainId(c.chainId),
|
|
38
38
|
address: c.address,
|
|
39
39
|
decimals: c.decimals,
|
|
40
|
-
|
|
41
|
-
unlocked: BigInt(c.balance.unlocked),
|
|
40
|
+
amount: BigInt(c.amount),
|
|
42
41
|
})),
|
|
43
42
|
}));
|
|
44
43
|
}
|
|
@@ -55,7 +54,9 @@ export class Orchestrator {
|
|
|
55
54
|
const body = convertBigIntFields({
|
|
56
55
|
chainId: toCaip2(input.chain.id),
|
|
57
56
|
tokens: input.tokens,
|
|
58
|
-
settlementLayers: input.settlementLayers
|
|
57
|
+
settlementLayers: input.settlementLayers
|
|
58
|
+
? encodeSettlementLayers(input.settlementLayers)
|
|
59
|
+
: undefined,
|
|
59
60
|
});
|
|
60
61
|
const json = await this.fetch(`${this.serverUrl}/intents/splits`, {
|
|
61
62
|
method: 'POST',
|
|
@@ -146,9 +147,11 @@ function parseChainId(value) {
|
|
|
146
147
|
if (typeof value === 'number')
|
|
147
148
|
return value;
|
|
148
149
|
if (typeof value === 'string') {
|
|
149
|
-
if (value
|
|
150
|
+
if (isCaip2(value))
|
|
150
151
|
return fromCaip2(value);
|
|
151
|
-
|
|
152
|
+
const numeric = Number(value);
|
|
153
|
+
if (Number.isFinite(numeric))
|
|
154
|
+
return numeric;
|
|
152
155
|
}
|
|
153
156
|
throw new OrchestratorError({
|
|
154
157
|
message: `Invalid chain id value: ${String(value)}`,
|
|
@@ -207,12 +210,31 @@ function encodeAuxiliaryFunds(funds) {
|
|
|
207
210
|
]));
|
|
208
211
|
}
|
|
209
212
|
function encodeOptions(options) {
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
213
|
+
const wire = { ...options };
|
|
214
|
+
if (options.auxiliaryFunds) {
|
|
215
|
+
wire.auxiliaryFunds = encodeAuxiliaryFunds(options.auxiliaryFunds);
|
|
216
|
+
}
|
|
217
|
+
if (options.settlementLayers) {
|
|
218
|
+
wire.settlementLayers = encodeSettlementLayers(options.settlementLayers);
|
|
219
|
+
}
|
|
220
|
+
return wire;
|
|
221
|
+
}
|
|
222
|
+
// Inversion universe for `{ exclude }`. Drop once the orchestrator accepts the
|
|
223
|
+
// union natively; RHINO/CCTP are listed despite not being in `SettlementLayer`.
|
|
224
|
+
const KNOWN_SETTLEMENT_LAYERS = [
|
|
225
|
+
'ACROSS',
|
|
226
|
+
'ECO',
|
|
227
|
+
'RELAY',
|
|
228
|
+
'OFT',
|
|
229
|
+
'NEAR',
|
|
230
|
+
'RHINO',
|
|
231
|
+
'CCTP',
|
|
232
|
+
];
|
|
233
|
+
export function encodeSettlementLayers(filter) {
|
|
234
|
+
if ('include' in filter)
|
|
235
|
+
return filter.include;
|
|
236
|
+
const excluded = new Set(filter.exclude);
|
|
237
|
+
return KNOWN_SETTLEMENT_LAYERS.filter((layer) => !excluded.has(layer));
|
|
216
238
|
}
|
|
217
239
|
function decodeQuoteResponse(json) {
|
|
218
240
|
const routes = (json.routes ?? []);
|
|
@@ -229,18 +251,19 @@ function decodeQuote(route) {
|
|
|
229
251
|
tokenRequirements: route.tokenRequirements
|
|
230
252
|
? decodeTokenRequirements(route.tokenRequirements)
|
|
231
253
|
: undefined,
|
|
254
|
+
bridgeFill: decodeBridgeFill(route.bridgeFill),
|
|
232
255
|
};
|
|
233
256
|
}
|
|
257
|
+
// Normalizes CAIP-2 strings to numeric IDs for consistency with BridgeFill decodeCostTokenEntry, and getIntent
|
|
258
|
+
function decodeBridgeFill(bf) {
|
|
259
|
+
if (!bf)
|
|
260
|
+
return undefined;
|
|
261
|
+
return { ...bf, destinationChainId: parseChainId(bf.destinationChainId) };
|
|
262
|
+
}
|
|
234
263
|
function decodeCost(cost) {
|
|
235
264
|
return {
|
|
236
265
|
input: cost.input.map(decodeCostTokenEntry),
|
|
237
266
|
output: cost.output.map(decodeCostTokenEntry),
|
|
238
|
-
feeToken: cost.feeToken
|
|
239
|
-
? {
|
|
240
|
-
chainId: parseChainId(cost.feeToken.chainId),
|
|
241
|
-
tokenAddress: cost.feeToken.tokenAddress,
|
|
242
|
-
}
|
|
243
|
-
: undefined,
|
|
244
267
|
fees: cost.fees,
|
|
245
268
|
};
|
|
246
269
|
}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
declare const PROD_ORCHESTRATOR_URL = "https://v1.orchestrator.rhinestone.dev";
|
|
2
2
|
declare const RHINESTONE_SPOKE_POOL_ADDRESS = "0x000000000060f6e853447881951574cdd0663530";
|
|
3
|
-
declare const SDK_VERSION = "2.0.0-beta.
|
|
3
|
+
declare const SDK_VERSION = "2.0.0-beta.10";
|
|
4
4
|
declare const API_VERSION = "2026-04.blanc";
|
|
5
5
|
export { PROD_ORCHESTRATOR_URL, RHINESTONE_SPOKE_POOL_ADDRESS, SDK_VERSION, API_VERSION, };
|
|
6
6
|
//# sourceMappingURL=consts.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"consts.d.ts","sourceRoot":"","sources":["../../../orchestrator/consts.ts"],"names":[],"mappings":"AAAA,QAAA,MAAM,qBAAqB,2CAA2C,CAAA;AACtE,QAAA,MAAM,6BAA6B,+CACW,CAAA;AAE9C,QAAA,MAAM,WAAW,
|
|
1
|
+
{"version":3,"file":"consts.d.ts","sourceRoot":"","sources":["../../../orchestrator/consts.ts"],"names":[],"mappings":"AAAA,QAAA,MAAM,qBAAqB,2CAA2C,CAAA;AACtE,QAAA,MAAM,6BAA6B,+CACW,CAAA;AAE9C,QAAA,MAAM,WAAW,kBAAkB,CAAA;AACnC,QAAA,MAAM,WAAW,kBAAkB,CAAA;AAEnC,OAAO,EACL,qBAAqB,EACrB,6BAA6B,EAC7B,WAAW,EACX,WAAW,GACZ,CAAA"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
const PROD_ORCHESTRATOR_URL = 'https://v1.orchestrator.rhinestone.dev';
|
|
2
2
|
const RHINESTONE_SPOKE_POOL_ADDRESS = '0x000000000060f6e853447881951574cdd0663530';
|
|
3
|
-
const SDK_VERSION = '2.0.0-beta.
|
|
3
|
+
const SDK_VERSION = '2.0.0-beta.10';
|
|
4
4
|
const API_VERSION = '2026-04.blanc';
|
|
5
5
|
export { PROD_ORCHESTRATOR_URL, RHINESTONE_SPOKE_POOL_ADDRESS, SDK_VERSION, API_VERSION, };
|