@rhinestone/sdk 2.0.0-beta.1 → 2.0.0-beta.11
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 +13 -18
- package/dist/src/execution/index.d.ts.map +1 -1
- package/dist/src/execution/index.js +19 -51
- 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 +18 -15
- 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 +46 -28
- 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 +6 -5
- package/dist/src/orchestrator/index.d.ts.map +1 -1
- package/dist/src/orchestrator/index.js +4 -3
- 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 +97 -32
- package/dist/src/orchestrator/types.d.ts.map +1 -1
- package/dist/src/orchestrator/types.js +1 -5
- 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;YAe5C,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',
|
|
@@ -83,17 +84,12 @@ export class Orchestrator {
|
|
|
83
84
|
});
|
|
84
85
|
return {
|
|
85
86
|
status: json.status,
|
|
86
|
-
claims: (json.claims ?? []).map((claim) => ({
|
|
87
|
-
depositId: claim.depositId !== undefined ? BigInt(claim.depositId) : 0n,
|
|
88
|
-
chainId: parseChainId(claim.chainId),
|
|
89
|
-
status: claim.status,
|
|
90
|
-
claimTimestamp: claim.claimTimestamp,
|
|
91
|
-
claimTransactionHash: claim.claimTransactionHash,
|
|
92
|
-
})),
|
|
93
|
-
destinationChainId: parseChainId(json.destinationChainId),
|
|
94
87
|
accountAddress: json.accountAddress,
|
|
95
|
-
|
|
96
|
-
|
|
88
|
+
// Flatten orchestrator's per-chain items[] to one entry per chain.
|
|
89
|
+
operations: (json.operations ?? []).map((op) => {
|
|
90
|
+
const item = op.items?.[0] ?? {};
|
|
91
|
+
return { chain: op.chain, ...item };
|
|
92
|
+
}),
|
|
97
93
|
};
|
|
98
94
|
}
|
|
99
95
|
async getHeaders() {
|
|
@@ -146,9 +142,11 @@ function parseChainId(value) {
|
|
|
146
142
|
if (typeof value === 'number')
|
|
147
143
|
return value;
|
|
148
144
|
if (typeof value === 'string') {
|
|
149
|
-
if (value
|
|
145
|
+
if (isCaip2(value))
|
|
150
146
|
return fromCaip2(value);
|
|
151
|
-
|
|
147
|
+
const numeric = Number(value);
|
|
148
|
+
if (Number.isFinite(numeric))
|
|
149
|
+
return numeric;
|
|
152
150
|
}
|
|
153
151
|
throw new OrchestratorError({
|
|
154
152
|
message: `Invalid chain id value: ${String(value)}`,
|
|
@@ -207,12 +205,31 @@ function encodeAuxiliaryFunds(funds) {
|
|
|
207
205
|
]));
|
|
208
206
|
}
|
|
209
207
|
function encodeOptions(options) {
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
208
|
+
const wire = { ...options };
|
|
209
|
+
if (options.auxiliaryFunds) {
|
|
210
|
+
wire.auxiliaryFunds = encodeAuxiliaryFunds(options.auxiliaryFunds);
|
|
211
|
+
}
|
|
212
|
+
if (options.settlementLayers) {
|
|
213
|
+
wire.settlementLayers = encodeSettlementLayers(options.settlementLayers);
|
|
214
|
+
}
|
|
215
|
+
return wire;
|
|
216
|
+
}
|
|
217
|
+
// Inversion universe for `{ exclude }`. Drop once the orchestrator accepts the
|
|
218
|
+
// union natively; RHINO/CCTP are listed despite not being in `SettlementLayer`.
|
|
219
|
+
const KNOWN_SETTLEMENT_LAYERS = [
|
|
220
|
+
'ACROSS',
|
|
221
|
+
'ECO',
|
|
222
|
+
'RELAY',
|
|
223
|
+
'OFT',
|
|
224
|
+
'NEAR',
|
|
225
|
+
'RHINO',
|
|
226
|
+
'CCTP',
|
|
227
|
+
];
|
|
228
|
+
export function encodeSettlementLayers(filter) {
|
|
229
|
+
if ('include' in filter)
|
|
230
|
+
return filter.include;
|
|
231
|
+
const excluded = new Set(filter.exclude);
|
|
232
|
+
return KNOWN_SETTLEMENT_LAYERS.filter((layer) => !excluded.has(layer));
|
|
216
233
|
}
|
|
217
234
|
function decodeQuoteResponse(json) {
|
|
218
235
|
const routes = (json.routes ?? []);
|
|
@@ -229,18 +246,19 @@ function decodeQuote(route) {
|
|
|
229
246
|
tokenRequirements: route.tokenRequirements
|
|
230
247
|
? decodeTokenRequirements(route.tokenRequirements)
|
|
231
248
|
: undefined,
|
|
249
|
+
bridgeFill: decodeBridgeFill(route.bridgeFill),
|
|
232
250
|
};
|
|
233
251
|
}
|
|
252
|
+
// Normalizes CAIP-2 strings to numeric IDs for consistency with BridgeFill decodeCostTokenEntry, and getIntent
|
|
253
|
+
function decodeBridgeFill(bf) {
|
|
254
|
+
if (!bf)
|
|
255
|
+
return undefined;
|
|
256
|
+
return { ...bf, destinationChainId: parseChainId(bf.destinationChainId) };
|
|
257
|
+
}
|
|
234
258
|
function decodeCost(cost) {
|
|
235
259
|
return {
|
|
236
260
|
input: cost.input.map(decodeCostTokenEntry),
|
|
237
261
|
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
262
|
fees: cost.fees,
|
|
245
263
|
};
|
|
246
264
|
}
|
|
@@ -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.11";
|
|
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
|