@gol/sdk 0.1.0-next.0 → 0.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1 @@
1
+ {"version":3,"file":"owner.d.ts","sourceRoot":"","sources":["../src/owner.ts"],"names":[],"mappings":"AAAA,OAAO,EAYL,KAAK,OAAO,EACZ,KAAK,GAAG,EACR,KAAK,YAAY,EAClB,MAAM,MAAM,CAAC;AAEd,OAAO,EAKL,KAAK,aAAa,EAClB,KAAK,gBAAgB,EACtB,MAAM,uBAAuB,CAAC;AAO/B,OAAO,KAAK,EAAE,iBAAiB,EAAE,wBAAwB,EAAE,MAAM,YAAY,CAAC;AAE9E,8EAA8E;AAC9E,eAAO,MAAM,iBAAiB,EAC5B,4CAAqD,CAAC;AACxD,eAAO,MAAM,eAAe,EAC1B,4CAAqD,CAAC;AAuBxD,MAAM,WAAW,mBAAmB;IAClC,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,UAAU,EAAE,SAAS,OAAO,EAAE,CAAC;IAC/B,qBAAqB,EAAE,MAAM,CAAC;IAC9B,iBAAiB,EAAE,MAAM,CAAC;CAC3B;AAyBD;;;GAGG;AACH,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,mBAAmB,GAAG,GAAG,CAoBpE;AAMD,MAAM,MAAM,eAAe,GACzB,gBAAgB,GAAG,UAAU,GAAG,aAAa,GAAG,qBAAqB,CAAC;AAExE,MAAM,WAAW,gBAAgB;IAC/B,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAChC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC,CAAC;IAC7D,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CAClC;AAED,MAAM,WAAW,oBAAoB;IACnC,MAAM,EAAE,aAAa,CAAC;IACtB,MAAM,EAAE,sBAAsB,CAAC;IAC/B,SAAS,EAAE,gBAAgB,CAAC;IAC5B,YAAY,EAAE,GAAG,CAAC;IAClB,MAAM,EAAE,GAAG,CAAC;IACZ,eAAe,EAAE,eAAe,CAAC;CAClC;AAED,sDAAsD;AACtD,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,GAAG,GAAG,CAmBvE;AAED,wBAAgB,0BAA0B,CACxC,SAAS,EAAE,GAAG,EACd,WAAW,EAAE,GAAG,GACf,GAAG,CAOL;AAED,wBAAgB,oBAAoB,CAClC,WAAW,EAAE,GAAG,EAChB,KAAK,EAAE,MAAM,EACb,QAAQ,EAAE,MAAM,GACf,GAAG,CAYL;AASD;;;GAGG;AACH,wBAAgB,yBAAyB,CAAC,KAAK,EAAE;IAC/C,MAAM,EAAE,aAAa,CAAC;IACtB,OAAO,EAAE,OAAO,CAAC;IACjB,IAAI,EAAE,OAAO,CAAC;IACd,UAAU,EAAE,GAAG,CAAC;IAChB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB,GAAG,oBAAoB,CA+DvB;AAMD;;;GAGG;AACH,wBAAgB,0BAA0B,CACxC,OAAO,EAAE,oBAAoB,EAC7B,QAAQ,EAAE;IACR,MAAM,EAAE,aAAa,CAAC;IACtB,OAAO,EAAE,OAAO,CAAC;IACjB,IAAI,EAAE,OAAO,CAAC;IACd,UAAU,EAAE,GAAG,CAAC;IAChB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB,GACA,IAAI,CAWN;AAED,yFAAyF;AACzF,MAAM,WAAW,WAAW;IAC1B,aAAa,CAAC,SAAS,EAAE,gBAAgB,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC;IACzD,WAAW,CAAC,CAAC,IAAI,EAAE;QAAE,OAAO,EAAE;YAAE,GAAG,EAAE,GAAG,CAAA;SAAE,CAAA;KAAE,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC;CAC7D;AAED,qFAAqF;AACrF,wBAAsB,wBAAwB,CAC5C,MAAM,EAAE,WAAW,EACnB,OAAO,EAAE,oBAAoB,GAC5B,OAAO,CAAC,GAAG,CAAC,CAQd;AAWD,2DAA2D;AAC3D,KAAK,OAAO,GAAG,MAAM,GAAG,MAAM,GAAG,MAAM,CAAC;AACxC,MAAM,WAAW,iBAAiB;IAChC,QAAQ,EAAE,GAAG,CAAC;IACd,OAAO,EAAE,OAAO,CAAC;IACjB,KAAK,EAAE,OAAO,CAAC;IACf,gBAAgB,EAAE,GAAG,CAAC;IACtB,YAAY,EAAE,OAAO,CAAC;IACtB,SAAS,EAAE,GAAG,CAAC;IACf,IAAI,EAAE,OAAO,CAAC;IACd,aAAa,EAAE,OAAO,CAAC;IACvB,UAAU,EAAE,GAAG,CAAC;IAChB,SAAS,EAAE,OAAO,CAAC;IACnB,SAAS,EAAE,OAAO,CAAC;IACnB,QAAQ,EAAE,OAAO,CAAC;IAClB,oBAAoB,EAAE,OAAO,CAAC;IAC9B,iBAAiB,EAAE,OAAO,CAAC;IAC3B,IAAI,EAAE,GAAG,CAAC;CACX;AACD,MAAM,WAAW,cAAc;IAC7B,SAAS,EAAE,GAAG,CAAC;IACf,OAAO,EAAE,OAAO,CAAC;IACjB,SAAS,EAAE,GAAG,CAAC;IACf,gBAAgB,EAAE,GAAG,CAAC;IACtB,YAAY,EAAE,OAAO,CAAC;IACtB,QAAQ,EAAE,OAAO,CAAC;IAClB,SAAS,EAAE,OAAO,CAAC;IACnB,QAAQ,EAAE,OAAO,CAAC;IAClB,YAAY,EAAE,OAAO,CAAC;IACtB,QAAQ,EAAE,OAAO,CAAC;IAClB,SAAS,EAAE,OAAO,CAAC;IACnB,kBAAkB,EAAE,OAAO,CAAC;IAC5B,cAAc,EAAE,OAAO,CAAC;IACxB,KAAK,EAAE,OAAO,CAAC;CAChB;AAED,gGAAgG;AAChG,wBAAgB,0BAA0B,CACxC,KAAK,EAAE,iBAAiB,EACxB,aAAa,EAAE,GAAG,EAClB,SAAS,EAAE,cAAc,EACzB,oBAAoB,EAAE,GAAG,GACxB,GAAG,CA0CL;AAED,+GAA+G;AAC/G,wBAAgB,qBAAqB,CACnC,WAAW,EAAE,GAAG,EAChB,QAAQ,EAAE,MAAM,EAChB,oBAAoB,EAAE,GAAG,GACxB,GAAG,CAML;AAMD,qEAAqE;AACrE,wBAAgB,kBAAkB,CAChC,MAAM,EAAE,aAAa,EACrB,OAAO,EAAE,OAAO,EAChB,MAAM,EAAE,OAAO,EACf,IAAI,EAAE,GAAG,GACR,gBAAgB,CA2BlB;AAED,MAAM,WAAW,mBAAmB;IAClC,MAAM,EAAE,OAAO,CAAC;IAChB,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,GAAG,CAAC;IACd,QAAQ,EAAE,GAAG,CAAC;IACd,gBAAgB,EAAE,GAAG,CAAC;IACtB,kBAAkB,EAAE,MAAM,CAAC;IAC3B,OAAO,EAAE,GAAG,CAAC;IACb,gBAAgB,EAAE,GAAG,CAAC;IACtB,SAAS,EAAE,GAAG,CAAC;CAChB;AAED,MAAM,MAAM,cAAc,GACtB;IACE,IAAI,EAAE,kBAAkB,CAAC;IACzB,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,OAAO,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,EAAE,gBAAgB,CAAC;IAC5B,YAAY,EAAE,GAAG,CAAC;IAClB,kEAAkE;IAClE,MAAM,CAAC,UAAU,EAAE,GAAG,GAAG;QAAE,EAAE,EAAE,OAAO,CAAC;QAAC,IAAI,EAAE,GAAG,CAAC;QAAC,KAAK,EAAE,EAAE,CAAA;KAAE,CAAC;CAChE,GACD;IACE,IAAI,EAAE,gBAAgB,CAAC;IACvB,MAAM,EAAE,OAAO,CAAC,aAAa,EAAE,MAAM,CAAC,CAAC;IACvC,OAAO,EAAE,OAAO,CAAC;IACjB,aAAa,EAAE,mBAAmB,CAAC;IACnC,UAAU,EAAE,GAAG,CAAC;IAChB,wEAAwE;IACxE,OAAO,EAAE;QAAE,GAAG,EAAE,GAAG,CAAA;KAAE,CAAC;IACtB,uGAAuG;IACvG,MAAM,CACJ,cAAc,EAAE,GAAG,EACnB,WAAW,EAAE,OAAO,GACnB;QACD,EAAE,EAAE,OAAO,CAAC;QACZ,IAAI,EAAE,GAAG,CAAC;QACV,KAAK,EAAE,EAAE,CAAC;QACV,GAAG,EAAE,MAAM,CAAC;QACZ,aAAa,EAAE,mBAAmB,CAAC;KACpC,CAAC;CACH,CAAC;AAWN,MAAM,WAAW,qBAAqB;IACpC,oBAAoB,CAAC,EAAE,MAAM,CAAC;IAC9B,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,oBAAoB,CAAC,EAAE,MAAM,CAAC;CAC/B;AAKD,6DAA6D;AAC7D,wBAAgB,iBAAiB,CAC/B,EAAE,EAAE,mBAAmB,EACvB,OAAO,SAAwB,GAC9B,GAAG,CA+BL;AAED;;;GAGG;AACH,wBAAsB,qBAAqB,CACzC,MAAM,EAAE,IAAI,CACV,YAAY,EACZ,YAAY,GAAG,cAAc,GAAG,oBAAoB,CACrD,EACD,MAAM,EAAE,aAAa,EACrB,OAAO,EAAE,OAAO,EAChB,IAAI,EAAE,gBAAgB,EACtB,OAAO,GAAE,qBAA0B,GAClC,OAAO,CAAC,cAAc,CAAC,CA+HzB;AAED,2EAA2E;AAC3E,wBAAsB,kBAAkB,CACtC,MAAM,EAAE,WAAW,EACnB,SAAS,EAAE,cAAc,GACxB,OAAO,CAAC,GAAG,CAAC,CAMd;AAMD,MAAM,WAAW,6BAA6B;IAC5C,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,UAAU,CAAC,EAAE,SAAS,OAAO,EAAE,CAAC;IAChC,qBAAqB,CAAC,EAAE,MAAM,CAAC;IAC/B,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,IAAI,CAAC,EAAE,OAAO,CAAC;CAChB;AAKD;;;;;GAKG;AACH,wBAAgB,uBAAuB,CACrC,QAAQ,EAAE,iBAAiB,EAC3B,QAAQ,GAAE,6BAAkC,GAC3C,IAAI,CAoIN;AAED,sFAAsF;AACtF,wBAAsB,qBAAqB,CACzC,MAAM,EAAE,WAAW,EACnB,QAAQ,EAAE,iBAAiB,EAC3B,QAAQ,GAAE,6BAAkC,GAC3C,OAAO,CAAC;IAAE,EAAE,EAAE,OAAO,CAAC;IAAC,IAAI,EAAE,GAAG,CAAA;CAAE,CAAC,CAerC;AAED,qGAAqG;AACrG,wBAAsB,sBAAsB,CAC1C,MAAM,EAAE,WAAW,EACnB,QAAQ,EAAE,wBAAwB,GACjC,OAAO,CAAC;IAAE,EAAE,EAAE,OAAO,CAAC;IAAC,IAAI,EAAE,GAAG,CAAA;CAAE,CAAC,CAwBrC"}
package/dist/owner.js ADDED
@@ -0,0 +1,591 @@
1
+ import { concatHex, encodeAbiParameters, encodeFunctionData, getAddress, hashTypedData, keccak256, numberToHex, padHex, parseAbi, size, stringToHex, } from "viem";
2
+ import { BASE_SEPOLIA_CHAIN_ID, ownerUserOpNonceKey, packOwnerSignature, packOwnerUserOpSignature, } from "./account-dialects.js";
3
+ import { hashGasMandate, hashOwnerGasPolicy, } from "./gas-approval.js";
4
+ /** Circle USDC on Base Sepolia, the only transfer asset in this candidate. */
5
+ export const BASE_SEPOLIA_USDC = "0x036CbD53842c5426634e7929541eC2318f3dCF7e";
6
+ export const ENTRY_POINT_V07 = "0x0000000071727De22E5E9d8BAf0edAc6f37da032";
7
+ const ALCHEMY_SINGLE_SIGNER_MODULE = "0x00000000000099DE0BF6fA90dEB851E2A2df7d83";
8
+ const MAX_UINT128 = (1n << 128n) - 1n;
9
+ const DOMAIN_TYPEHASH = keccak256(stringToHex("EIP712Domain(string name,string version,uint256 chainId,address verifyingContract)"));
10
+ const COMBINED_TYPEHASH = keccak256(stringToHex("CombinedGasApproval(bytes32 mandateId,bytes32 gasPolicyId)"));
11
+ const REVOCATION_TYPEHASH = keccak256(stringToHex("GasRevocation(bytes32 gasPolicyId,uint256 nonce,uint48 deadline)"));
12
+ const hex16 = (value) => numberToHex(value, { size: 2 });
13
+ function addressSet(addresses) {
14
+ const sorted = [...addresses]
15
+ .map((address) => getAddress(address))
16
+ .sort((a, b) => BigInt(a) < BigInt(b) ? -1 : BigInt(a) > BigInt(b) ? 1 : 0);
17
+ for (let i = 1; i < sorted.length; i++)
18
+ if (BigInt(sorted[i]) === BigInt(sorted[i - 1]))
19
+ throw new Error("duplicate_policy_address");
20
+ return concatHex([hex16(sorted.length), ...sorted]);
21
+ }
22
+ function singleAssetCap(asset, cap) {
23
+ if (cap <= 0n || cap > MAX_UINT128)
24
+ throw new Error("invalid_policy_cap");
25
+ return concatHex(["0x00", hex16(1), asset, numberToHex(cap, { size: 32 })]);
26
+ }
27
+ function rule(tag, body) {
28
+ return concatHex([hex16(tag), hex16(size(body)), body]);
29
+ }
30
+ /**
31
+ * Canonical bounded `fungible_asset.transfer@1` policy (encoding section 3):
32
+ * action, asset, and recipient allowlists plus per-action and lifetime caps.
33
+ */
34
+ export function encodeTransferPolicy(input) {
35
+ const asset = getAddress(input.asset ?? BASE_SEPOLIA_USDC);
36
+ if (input.recipients.length < 1 || input.recipients.length > 16)
37
+ throw new Error("invalid_policy_recipients");
38
+ if (input.maxPerActionBaseUnits > input.maxTotalBaseUnits)
39
+ throw new Error("invalid_policy_caps");
40
+ const rules = [
41
+ rule(0x0010, concatHex([hex16(1), numberToHex(1, { size: 4 })])),
42
+ rule(0x0100, addressSet([asset])),
43
+ rule(0x0110, addressSet(input.recipients)),
44
+ rule(0x0200, singleAssetCap(asset, input.maxPerActionBaseUnits)),
45
+ rule(0x0210, singleAssetCap(asset, input.maxTotalBaseUnits)),
46
+ ];
47
+ return concatHex([
48
+ "0x474f",
49
+ "0x01",
50
+ "0x01",
51
+ hex16(rules.length),
52
+ ...rules,
53
+ ]).toLowerCase();
54
+ }
55
+ /** EIP-712 domain separator of the version 2 core. */
56
+ export function coreDomainSeparator(chainId, core) {
57
+ return keccak256(encodeAbiParameters([
58
+ { type: "bytes32" },
59
+ { type: "bytes32" },
60
+ { type: "bytes32" },
61
+ { type: "uint256" },
62
+ { type: "address" },
63
+ ], [
64
+ DOMAIN_TYPEHASH,
65
+ keccak256(stringToHex("GOL Mandate")),
66
+ keccak256(stringToHex("2")),
67
+ BigInt(chainId),
68
+ core,
69
+ ]));
70
+ }
71
+ export function combinedApprovalStructHash(mandateId, gasPolicyId) {
72
+ return keccak256(encodeAbiParameters([{ type: "bytes32" }, { type: "bytes32" }, { type: "bytes32" }], [COMBINED_TYPEHASH, mandateId, gasPolicyId]));
73
+ }
74
+ export function revocationStructHash(gasPolicyId, nonce, deadline) {
75
+ return keccak256(encodeAbiParameters([
76
+ { type: "bytes32" },
77
+ { type: "bytes32" },
78
+ { type: "uint256" },
79
+ { type: "uint48" },
80
+ ], [REVOCATION_TYPEHASH, gasPolicyId, nonce, deadline]));
81
+ }
82
+ const FORMAT = {
83
+ safe: "safe_threshold",
84
+ nexus: "nexus_k1",
85
+ kernel: "kernel_root",
86
+ alchemy: "alchemy_entity_zero",
87
+ };
88
+ /**
89
+ * Build the exact `eth_signTypedData_v4` payload whose hash the selected
90
+ * account's reviewed owner path checks for a core digest.
91
+ */
92
+ export function buildWalletSigningPayload(input) {
93
+ const chainId = input.chainId ?? BASE_SEPOLIA_CHAIN_ID;
94
+ const account = getAddress(input.account);
95
+ const domainSeparator = coreDomainSeparator(chainId, input.core);
96
+ const digest = keccak256(concatHex(["0x1901", domainSeparator, input.structHash]));
97
+ let typedData;
98
+ if (input.family === "safe") {
99
+ typedData = {
100
+ domain: { chainId, verifyingContract: account },
101
+ types: { SafeMessage: [{ name: "message", type: "bytes" }] },
102
+ primaryType: "SafeMessage",
103
+ message: {
104
+ message: encodeAbiParameters([{ type: "bytes32" }], [digest]),
105
+ },
106
+ };
107
+ }
108
+ else if (input.family === "nexus") {
109
+ typedData = {
110
+ domain: {
111
+ name: "Nexus",
112
+ version: "1.0.0",
113
+ chainId,
114
+ verifyingContract: account,
115
+ },
116
+ types: { PersonalSign: [{ name: "prefixed", type: "bytes" }] },
117
+ primaryType: "PersonalSign",
118
+ message: {
119
+ prefixed: concatHex(["0x1901", domainSeparator, input.structHash]),
120
+ },
121
+ };
122
+ }
123
+ else if (input.family === "kernel") {
124
+ typedData = {
125
+ domain: {
126
+ name: "Kernel",
127
+ version: "0.3.1",
128
+ chainId,
129
+ verifyingContract: account,
130
+ },
131
+ types: { Kernel: [{ name: "hash", type: "bytes32" }] },
132
+ primaryType: "Kernel",
133
+ message: { hash: digest },
134
+ };
135
+ }
136
+ else {
137
+ typedData = {
138
+ domain: {
139
+ chainId,
140
+ verifyingContract: ALCHEMY_SINGLE_SIGNER_MODULE,
141
+ salt: padHex(account, { size: 32 }),
142
+ },
143
+ types: { ReplaySafeHash: [{ name: "hash", type: "bytes32" }] },
144
+ primaryType: "ReplaySafeHash",
145
+ message: { hash: digest },
146
+ };
147
+ }
148
+ return {
149
+ family: input.family,
150
+ method: "eth_signTypedData_v4",
151
+ typedData,
152
+ expectedHash: hashWalletTypedData(typedData),
153
+ digest,
154
+ signatureFormat: FORMAT[input.family],
155
+ };
156
+ }
157
+ function hashWalletTypedData(typedData) {
158
+ return hashTypedData(typedData);
159
+ }
160
+ /**
161
+ * Recompute a payload received from the API. Throws unless it is the exact
162
+ * reviewed shape for the family, account, and digest.
163
+ */
164
+ export function verifyWalletSigningPayload(payload, expected) {
165
+ const rebuilt = buildWalletSigningPayload(expected);
166
+ if (payload.family !== rebuilt.family ||
167
+ payload.signatureFormat !== rebuilt.signatureFormat ||
168
+ payload.digest.toLowerCase() !== rebuilt.digest.toLowerCase() ||
169
+ payload.expectedHash.toLowerCase() !== rebuilt.expectedHash.toLowerCase() ||
170
+ hashWalletTypedData(payload.typedData).toLowerCase() !==
171
+ rebuilt.expectedHash.toLowerCase())
172
+ throw new Error("wallet_payload_mismatch");
173
+ }
174
+ /** Ask the owner wallet to sign, then pack the reviewed account-family signature. */
175
+ export async function signWalletSigningPayload(signer, payload) {
176
+ if (hashWalletTypedData(payload.typedData).toLowerCase() !==
177
+ payload.expectedHash.toLowerCase())
178
+ throw new Error("wallet_payload_mismatch");
179
+ const signature = await signer.signTypedData(payload.typedData);
180
+ return packOwnerSignature(payload.family, signature);
181
+ }
182
+ // ---------------------------------------------------------------------------
183
+ // Core calls
184
+ // ---------------------------------------------------------------------------
185
+ const coreAbi = parseAbi([
186
+ "function createMandateWithGas((bytes32 parentId,address account,address agent,bytes32 accountProfileId,uint64 installEpoch,bytes32 projectId,uint8 mode,uint8 policyVersion,bytes32 policyHash,uint48 validFrom,uint48 expiresAt,uint32 maxDepth,uint32 maxActiveDescendants,uint48 approvalExpiresAt,bytes32 salt) terms,bytes policy,(bytes32 mandateId,address account,bytes32 projectId,bytes32 accountProfileId,uint64 installEpoch,address feeAsset,address recipient,address attester,uint128 maxPerAction,uint128 maxTotal,uint48 expiresAt,uint8 chargeableOutcomes,uint8 formulaVersion,uint256 nonce) gasPolicy,bytes ownerSignature) returns (bytes32 mandateId,bytes32 gasPolicyId)",
187
+ "function revokeGasPolicy(bytes32 policyId,uint48 deadline,bytes signature)",
188
+ ]);
189
+ /** Calldata for the core. Anyone may send it; authority comes only from the owner signature. */
190
+ export function encodeCreateMandateWithGas(terms, mandatePolicy, gasPolicy, packedOwnerSignature) {
191
+ return encodeFunctionData({
192
+ abi: coreAbi,
193
+ functionName: "createMandateWithGas",
194
+ args: [
195
+ {
196
+ parentId: terms.parentId,
197
+ account: terms.account,
198
+ agent: terms.agent,
199
+ accountProfileId: terms.accountProfileId,
200
+ installEpoch: BigInt(terms.installEpoch),
201
+ projectId: terms.projectId,
202
+ mode: Number(terms.mode),
203
+ policyVersion: Number(terms.policyVersion),
204
+ policyHash: terms.policyHash,
205
+ validFrom: Number(terms.validFrom),
206
+ expiresAt: Number(terms.expiresAt),
207
+ maxDepth: Number(terms.maxDepth),
208
+ maxActiveDescendants: Number(terms.maxActiveDescendants),
209
+ approvalExpiresAt: Number(terms.approvalExpiresAt),
210
+ salt: terms.salt,
211
+ },
212
+ mandatePolicy,
213
+ {
214
+ mandateId: gasPolicy.mandateId,
215
+ account: gasPolicy.account,
216
+ projectId: gasPolicy.projectId,
217
+ accountProfileId: gasPolicy.accountProfileId,
218
+ installEpoch: BigInt(gasPolicy.installEpoch),
219
+ feeAsset: gasPolicy.feeAsset,
220
+ recipient: gasPolicy.recipient,
221
+ attester: gasPolicy.attester,
222
+ maxPerAction: BigInt(gasPolicy.maxPerAction),
223
+ maxTotal: BigInt(gasPolicy.maxTotal),
224
+ expiresAt: Number(gasPolicy.expiresAt),
225
+ chargeableOutcomes: Number(gasPolicy.chargeableOutcomes),
226
+ formulaVersion: Number(gasPolicy.formulaVersion),
227
+ nonce: BigInt(gasPolicy.nonce),
228
+ },
229
+ packedOwnerSignature,
230
+ ],
231
+ });
232
+ }
233
+ /** Relayed revocation with an owner signature; `deadline = 0` and empty signature is the direct owner form. */
234
+ export function encodeRevokeGasPolicy(gasPolicyId, deadline, packedOwnerSignature) {
235
+ return encodeFunctionData({
236
+ abi: coreAbi,
237
+ functionName: "revokeGasPolicy",
238
+ args: [gasPolicyId, deadline, packedOwnerSignature],
239
+ });
240
+ }
241
+ // ---------------------------------------------------------------------------
242
+ // Owner account operations
243
+ // ---------------------------------------------------------------------------
244
+ /** Make the account call `target` through its own execution path. */
245
+ export function accountExecuteCall(family, account, target, data) {
246
+ if (family === "safe")
247
+ return { to: target, data, operation: 0 };
248
+ if (family === "alchemy")
249
+ return {
250
+ to: account,
251
+ data: encodeFunctionData({
252
+ abi: parseAbi([
253
+ "function execute(address target,uint256 value,bytes data) returns (bytes)",
254
+ ]),
255
+ functionName: "execute",
256
+ args: [target, 0n, data],
257
+ }),
258
+ operation: 0,
259
+ };
260
+ // ERC-7579 single call, default exec type: mode 0 and packed (target, value, data).
261
+ return {
262
+ to: account,
263
+ data: encodeFunctionData({
264
+ abi: parseAbi(["function execute(bytes32 mode,bytes executionCalldata)"]),
265
+ functionName: "execute",
266
+ args: [
267
+ padHex("0x", { size: 32 }),
268
+ concatHex([target, numberToHex(0, { size: 32 }), data]),
269
+ ],
270
+ }),
271
+ operation: 0,
272
+ };
273
+ }
274
+ const safeAbi = parseAbi([
275
+ "function nonce() view returns (uint256)",
276
+ "function execTransaction(address to,uint256 value,bytes data,uint8 operation,uint256 safeTxGas,uint256 baseGas,uint256 gasPrice,address gasToken,address refundReceiver,bytes signatures) payable returns (bool)",
277
+ ]);
278
+ const entryPointAbi = parseAbi([
279
+ "function getNonce(address sender,uint192 key) view returns (uint256)",
280
+ "function handleOps((address sender,uint256 nonce,bytes initCode,bytes callData,bytes32 accountGasLimits,uint256 preVerificationGas,bytes32 gasFees,bytes paymasterAndData,bytes signature)[] ops,address beneficiary)",
281
+ ]);
282
+ const pack128 = (high, low) => numberToHex((high << 128n) | low, { size: 32 });
283
+ /** EntryPoint v0.7 user operation hash, computed locally. */
284
+ export function userOperationHash(op, chainId = BASE_SEPOLIA_CHAIN_ID) {
285
+ const packed = keccak256(encodeAbiParameters([
286
+ { type: "address" },
287
+ { type: "uint256" },
288
+ { type: "bytes32" },
289
+ { type: "bytes32" },
290
+ { type: "bytes32" },
291
+ { type: "uint256" },
292
+ { type: "bytes32" },
293
+ { type: "bytes32" },
294
+ ], [
295
+ op.sender,
296
+ op.nonce,
297
+ keccak256(op.initCode),
298
+ keccak256(op.callData),
299
+ op.accountGasLimits,
300
+ op.preVerificationGas,
301
+ op.gasFees,
302
+ keccak256(op.paymasterAndData),
303
+ ]));
304
+ return keccak256(encodeAbiParameters([{ type: "bytes32" }, { type: "address" }, { type: "uint256" }], [packed, ENTRY_POINT_V07, BigInt(chainId)]));
305
+ }
306
+ /**
307
+ * Prepare an owner operation that makes the account perform `call` through its
308
+ * reviewed owner path: a Safe transaction, or an EntryPoint v0.7 user operation.
309
+ */
310
+ export async function prepareOwnerOperation(client, family, account, call, options = {}) {
311
+ const chainId = await client.getChainId();
312
+ if (chainId !== BASE_SEPOLIA_CHAIN_ID)
313
+ throw new Error("wrong_chain");
314
+ account = getAddress(account);
315
+ if (family === "safe") {
316
+ const nonce = await client.readContract({
317
+ address: account,
318
+ abi: safeAbi,
319
+ functionName: "nonce",
320
+ });
321
+ const typedData = {
322
+ domain: { chainId, verifyingContract: account },
323
+ types: {
324
+ SafeTx: [
325
+ { name: "to", type: "address" },
326
+ { name: "value", type: "uint256" },
327
+ { name: "data", type: "bytes" },
328
+ { name: "operation", type: "uint8" },
329
+ { name: "safeTxGas", type: "uint256" },
330
+ { name: "baseGas", type: "uint256" },
331
+ { name: "gasPrice", type: "uint256" },
332
+ { name: "gasToken", type: "address" },
333
+ { name: "refundReceiver", type: "address" },
334
+ { name: "nonce", type: "uint256" },
335
+ ],
336
+ },
337
+ primaryType: "SafeTx",
338
+ message: {
339
+ to: call.to,
340
+ value: 0n,
341
+ data: call.data,
342
+ operation: call.operation,
343
+ safeTxGas: 0n,
344
+ baseGas: 0n,
345
+ gasPrice: 0n,
346
+ gasToken: "0x0000000000000000000000000000000000000000",
347
+ refundReceiver: "0x0000000000000000000000000000000000000000",
348
+ nonce,
349
+ },
350
+ };
351
+ return {
352
+ kind: "safe_transaction",
353
+ family,
354
+ account,
355
+ nonce,
356
+ typedData,
357
+ expectedHash: hashWalletTypedData(typedData),
358
+ encode(signatures) {
359
+ return {
360
+ to: account,
361
+ value: 0n,
362
+ data: encodeFunctionData({
363
+ abi: safeAbi,
364
+ functionName: "execTransaction",
365
+ args: [
366
+ call.to,
367
+ 0n,
368
+ call.data,
369
+ call.operation,
370
+ 0n,
371
+ 0n,
372
+ 0n,
373
+ "0x0000000000000000000000000000000000000000",
374
+ "0x0000000000000000000000000000000000000000",
375
+ packOwnerSignature("safe", signatures),
376
+ ],
377
+ }),
378
+ };
379
+ },
380
+ };
381
+ }
382
+ if (getAddress(call.to) !== account || call.operation !== 0)
383
+ throw new Error("owner_user_operation_must_self_call");
384
+ const nonce = await client.readContract({
385
+ address: ENTRY_POINT_V07,
386
+ abi: entryPointAbi,
387
+ functionName: "getNonce",
388
+ args: [account, ownerUserOpNonceKey(family)],
389
+ });
390
+ let { maxFeePerGas, maxPriorityFeePerGas } = options;
391
+ if (maxFeePerGas === undefined || maxPriorityFeePerGas === undefined) {
392
+ const fees = await client.estimateFeesPerGas();
393
+ maxPriorityFeePerGas ??= fees.maxPriorityFeePerGas ?? 1000000n;
394
+ maxFeePerGas ??= (fees.maxFeePerGas ?? 0n) * 2n + maxPriorityFeePerGas;
395
+ }
396
+ const verificationGasLimit = options.verificationGasLimit ?? 1000000n;
397
+ const callGasLimit = options.callGasLimit ?? 1500000n;
398
+ const preVerificationGas = options.preVerificationGas ?? 100000n;
399
+ const userOperation = {
400
+ sender: account,
401
+ nonce,
402
+ initCode: "0x",
403
+ callData: call.data,
404
+ accountGasLimits: pack128(verificationGasLimit, callGasLimit),
405
+ preVerificationGas,
406
+ gasFees: pack128(maxPriorityFeePerGas, maxFeePerGas),
407
+ paymasterAndData: "0x",
408
+ signature: "0x",
409
+ };
410
+ const userOpHash = userOperationHash(userOperation, chainId);
411
+ return {
412
+ kind: "user_operation",
413
+ family,
414
+ account,
415
+ userOperation,
416
+ userOpHash,
417
+ message: { raw: userOpHash },
418
+ encode(ownerSignature, beneficiary) {
419
+ const signed = {
420
+ ...userOperation,
421
+ signature: packOwnerUserOpSignature(family, ownerSignature),
422
+ };
423
+ return {
424
+ to: ENTRY_POINT_V07,
425
+ value: 0n,
426
+ // EntryPoint v0.7 refuses (AA95) unless the transaction carries the declared gas.
427
+ gas: verificationGasLimit + callGasLimit + preVerificationGas + 400000n,
428
+ userOperation: signed,
429
+ data: encodeFunctionData({
430
+ abi: entryPointAbi,
431
+ functionName: "handleOps",
432
+ args: [[signed], beneficiary],
433
+ }),
434
+ };
435
+ },
436
+ };
437
+ }
438
+ /** Sign a prepared owner operation with a caller-supplied owner wallet. */
439
+ export async function signOwnerOperation(signer, operation) {
440
+ if (operation.kind === "safe_transaction")
441
+ return signer.signTypedData(operation.typedData);
442
+ if (!signer.signMessage)
443
+ throw new Error("owner_signer_requires_sign_message");
444
+ return signer.signMessage({ message: operation.message });
445
+ }
446
+ const eq = (a, b) => String(a).toLowerCase() === String(b).toLowerCase();
447
+ /**
448
+ * Recompute a prepared approval without trusting the API: the policy bytes
449
+ * against the reviewed intent, mandate and gas-policy IDs, the combined
450
+ * digest, and the wallet payload. Optional expectations pin what the
451
+ * application asked for. Throws `prepared_policy_mismatch` on any difference.
452
+ */
453
+ export function verifyPreparedGasPolicy(prepared, expected = {}) {
454
+ const fail = (what) => {
455
+ throw new Error(`prepared_policy_mismatch: ${what}`);
456
+ };
457
+ const { authority, review, signing } = prepared;
458
+ const t = authority.mandateTerms;
459
+ const g = authority.gasPolicy;
460
+ const r = review;
461
+ const chainId = prepared.chainId;
462
+ if (chainId !== BASE_SEPOLIA_CHAIN_ID)
463
+ fail("chain");
464
+ if (expected.core && !eq(expected.core, prepared.core))
465
+ fail("core");
466
+ const terms = {
467
+ parentId: t.parentId,
468
+ account: t.account,
469
+ agent: t.agent,
470
+ accountProfileId: t.accountProfileId,
471
+ installEpoch: BigInt(t.installEpoch),
472
+ projectId: t.projectId,
473
+ mode: Number(t.mode),
474
+ policyVersion: Number(t.policyVersion),
475
+ policyHash: t.policyHash,
476
+ validFrom: Number(t.validFrom),
477
+ expiresAt: Number(t.expiresAt),
478
+ maxDepth: Number(t.maxDepth),
479
+ maxActiveDescendants: Number(t.maxActiveDescendants),
480
+ approvalExpiresAt: Number(t.approvalExpiresAt),
481
+ salt: t.salt,
482
+ };
483
+ const policy = {
484
+ mandateId: g.mandateId,
485
+ account: g.account,
486
+ projectId: g.projectId,
487
+ accountProfileId: g.accountProfileId,
488
+ installEpoch: BigInt(g.installEpoch),
489
+ feeAsset: g.feeAsset,
490
+ recipient: g.recipient,
491
+ attester: g.attester,
492
+ maxPerAction: BigInt(g.maxPerAction),
493
+ maxTotal: BigInt(g.maxTotal),
494
+ expiresAt: Number(g.expiresAt),
495
+ chargeableOutcomes: Number(g.chargeableOutcomes),
496
+ formulaVersion: Number(g.formulaVersion),
497
+ nonce: BigInt(g.nonce),
498
+ };
499
+ if (terms.parentId !== `0x${"00".repeat(32)}` ||
500
+ terms.mode !== 1 ||
501
+ terms.maxDepth !== 0 ||
502
+ terms.maxActiveDescendants !== 0)
503
+ fail("mandate shape");
504
+ if (!eq(terms.account, prepared.account) ||
505
+ !eq(policy.account, prepared.account))
506
+ fail("account");
507
+ if (policy.feeAsset !== "0x0000000000000000000000000000000000000000" ||
508
+ policy.formulaVersion !== 1)
509
+ fail("gas asset");
510
+ const recipients = r.recipients ?? [];
511
+ const compiled = encodeTransferPolicy({
512
+ asset: r.asset,
513
+ recipients,
514
+ maxPerActionBaseUnits: BigInt(r.maxPerActionBaseUnits),
515
+ maxTotalBaseUnits: BigInt(r.maxTotalBaseUnits),
516
+ });
517
+ if (!eq(compiled, authority.mandatePolicy) ||
518
+ !eq(keccak256(authority.mandatePolicy), terms.policyHash))
519
+ fail("policy bytes");
520
+ if (!eq(r.asset, BASE_SEPOLIA_USDC))
521
+ fail("asset");
522
+ const mandateId = hashGasMandate(terms, chainId, prepared.core);
523
+ if (!eq(mandateId, authority.mandateId) || !eq(policy.mandateId, mandateId))
524
+ fail("mandate id");
525
+ const gasPolicyId = hashOwnerGasPolicy(policy, chainId, prepared.core);
526
+ if (!eq(gasPolicyId, authority.gasPolicyId))
527
+ fail("gas policy id");
528
+ if (!eq(r.agent, terms.agent) ||
529
+ !eq(r.gasRecipient, policy.recipient) ||
530
+ !eq(r.attester, policy.attester) ||
531
+ BigInt(r.maxGasPerActionWei) !== policy.maxPerAction ||
532
+ BigInt(r.maxGasTotalWei) !== policy.maxTotal ||
533
+ Number(r.chargeableOutcomesMask) !== policy.chargeableOutcomes ||
534
+ Number(r.gasExpiresAt) !== policy.expiresAt ||
535
+ Number(r.mandateExpiresAt) !== terms.expiresAt)
536
+ fail("review summary");
537
+ if (expected.account && !eq(expected.account, terms.account))
538
+ fail("expected account");
539
+ if (expected.agent && !eq(expected.agent, terms.agent))
540
+ fail("expected agent");
541
+ if (expected.recipients &&
542
+ (expected.recipients.length !== recipients.length ||
543
+ !expected.recipients.every((a) => recipients.some((b) => eq(a, b)))))
544
+ fail("expected recipients");
545
+ if (expected.maxPerActionBaseUnits !== undefined &&
546
+ BigInt(r.maxPerActionBaseUnits) !== expected.maxPerActionBaseUnits)
547
+ fail("expected per-action cap");
548
+ if (expected.maxTotalBaseUnits !== undefined &&
549
+ BigInt(r.maxTotalBaseUnits) !== expected.maxTotalBaseUnits)
550
+ fail("expected total cap");
551
+ if (expected.maxGasPerActionWei !== undefined &&
552
+ policy.maxPerAction !== expected.maxGasPerActionWei)
553
+ fail("expected gas per-action cap");
554
+ if (expected.maxGasTotalWei !== undefined &&
555
+ policy.maxTotal !== expected.maxGasTotalWei)
556
+ fail("expected gas total cap");
557
+ verifyWalletSigningPayload(signing, {
558
+ family: prepared.family,
559
+ account: prepared.account,
560
+ core: prepared.core,
561
+ structHash: combinedApprovalStructHash(mandateId, gasPolicyId),
562
+ chainId,
563
+ });
564
+ if (!eq(signing.digest, authority.combinedDigest))
565
+ fail("digest");
566
+ }
567
+ /** Verify, ask the owner wallet to sign, and return the core call anyone may send. */
568
+ export async function signPreparedGasPolicy(signer, prepared, expected = {}) {
569
+ verifyPreparedGasPolicy(prepared, expected);
570
+ const signature = await signWalletSigningPayload(signer, prepared.signing);
571
+ return {
572
+ to: prepared.core,
573
+ data: encodeCreateMandateWithGas(prepared.authority.mandateTerms, prepared.authority.mandatePolicy, prepared.authority.gasPolicy, signature),
574
+ };
575
+ }
576
+ /** Verify a prepared relayed revocation, sign it with the owner wallet, and return the core call. */
577
+ export async function signPreparedRevocation(signer, prepared) {
578
+ verifyWalletSigningPayload(prepared.relayed.signing, {
579
+ family: prepared.family,
580
+ account: prepared.account,
581
+ core: prepared.core,
582
+ structHash: revocationStructHash(prepared.gasPolicyId, BigInt(prepared.nonce), prepared.deadline),
583
+ chainId: prepared.chainId,
584
+ });
585
+ const signature = await signWalletSigningPayload(signer, prepared.relayed.signing);
586
+ return {
587
+ to: prepared.core,
588
+ data: encodeRevokeGasPolicy(prepared.gasPolicyId, prepared.deadline, signature),
589
+ };
590
+ }
591
+ //# sourceMappingURL=owner.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"owner.js","sourceRoot":"","sources":["../src/owner.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ import type { Hex } from "viem";
2
+ /** Version 1: canonical UUID bytes followed by 16 zero bytes. */
3
+ export declare function contractProjectId(projectUuid: string): Hex;
4
+ //# sourceMappingURL=project-id.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"project-id.d.ts","sourceRoot":"","sources":["../src/project-id.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,MAAM,CAAC;AAEhC,iEAAiE;AACjE,wBAAgB,iBAAiB,CAAC,WAAW,EAAE,MAAM,GAAG,GAAG,CAQ1D"}
@@ -0,0 +1,7 @@
1
+ /** Version 1: canonical UUID bytes followed by 16 zero bytes. */
2
+ export function contractProjectId(projectUuid) {
3
+ if (!/^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}$/.test(projectUuid))
4
+ throw new Error("invalid project UUID");
5
+ return `0x${projectUuid.replaceAll("-", "").toLowerCase()}${"0".repeat(32)}`;
6
+ }
7
+ //# sourceMappingURL=project-id.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"project-id.js","sourceRoot":"","sources":["../src/project-id.ts"],"names":[],"mappings":"AAEA,iEAAiE;AACjE,MAAM,UAAU,iBAAiB,CAAC,WAAmB;IACnD,IACE,CAAC,+EAA+E,CAAC,IAAI,CACnF,WAAW,CACZ;QAED,MAAM,IAAI,KAAK,CAAC,sBAAsB,CAAC,CAAC;IAC1C,OAAO,KAAK,WAAW,CAAC,UAAU,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC,WAAW,EAAE,GAAG,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,EAAE,CAAC;AAC/E,CAAC"}