@gol/sdk 0.1.0-next.0 → 0.3.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,209 @@
1
+ import { type Address, type Hex, type PublicClient } from "viem";
2
+ import { type AccountFamily, type OwnerAccountCall } from "./account-dialects.js";
3
+ import type { PreparedGasPolicy, PreparedPolicyRevocation, PreparedMandateSafetyAction } from "./types.js";
4
+ /** Circle USDC on Base Sepolia, the only transfer asset in this candidate. */
5
+ export declare const BASE_SEPOLIA_USDC: "0x036CbD53842c5426634e7929541eC2318f3dCF7e";
6
+ export declare const ENTRY_POINT_V07: "0x0000000071727De22E5E9d8BAf0edAc6f37da032";
7
+ export interface TransferPolicyInput {
8
+ asset?: Address;
9
+ recipients: readonly Address[];
10
+ maxPerActionBaseUnits: bigint;
11
+ maxTotalBaseUnits: bigint;
12
+ }
13
+ /**
14
+ * Canonical bounded `fungible_asset.transfer@1` policy (encoding section 3):
15
+ * action, asset, and recipient allowlists plus per-action and lifetime caps.
16
+ */
17
+ export declare function encodeTransferPolicy(input: TransferPolicyInput): Hex;
18
+ export type SignatureFormat = "safe_threshold" | "nexus_k1" | "kernel_root" | "alchemy_entity_zero";
19
+ export interface TypedDataPayload {
20
+ domain: Record<string, unknown>;
21
+ types: Record<string, Array<{
22
+ name: string;
23
+ type: string;
24
+ }>>;
25
+ primaryType: string;
26
+ message: Record<string, unknown>;
27
+ }
28
+ export interface WalletSigningPayload {
29
+ family: AccountFamily;
30
+ method: "eth_signTypedData_v4";
31
+ typedData: TypedDataPayload;
32
+ expectedHash: Hex;
33
+ digest: Hex;
34
+ signatureFormat: SignatureFormat;
35
+ }
36
+ /** EIP-712 domain separator of the version 2 core. */
37
+ export declare function coreDomainSeparator(chainId: number, core: Address): Hex;
38
+ export declare function combinedApprovalStructHash(mandateId: Hex, gasPolicyId: Hex): Hex;
39
+ export declare function revocationStructHash(gasPolicyId: Hex, nonce: bigint, deadline: number): Hex;
40
+ export declare function safetyActionStructHash(mandateId: Hex, actionCode: 1 | 2, nonce: bigint, deadline: number): Hex;
41
+ /**
42
+ * Build the exact `eth_signTypedData_v4` payload whose hash the selected
43
+ * account's reviewed owner path checks for a core digest.
44
+ */
45
+ export declare function buildWalletSigningPayload(input: {
46
+ family: AccountFamily;
47
+ account: Address;
48
+ core: Address;
49
+ structHash: Hex;
50
+ chainId?: number;
51
+ }): WalletSigningPayload;
52
+ /**
53
+ * Recompute a payload received from the API. Throws unless it is the exact
54
+ * reviewed shape for the family, account, and digest.
55
+ */
56
+ export declare function verifyWalletSigningPayload(payload: WalletSigningPayload, expected: {
57
+ family: AccountFamily;
58
+ account: Address;
59
+ core: Address;
60
+ structHash: Hex;
61
+ chainId?: number;
62
+ }): void;
63
+ /** A caller-supplied owner wallet. viem wallet clients and local accounts satisfy it. */
64
+ export interface OwnerSigner {
65
+ signTypedData(typedData: TypedDataPayload): Promise<Hex>;
66
+ signMessage?(args: {
67
+ message: {
68
+ raw: Hex;
69
+ };
70
+ }): Promise<Hex>;
71
+ }
72
+ /** Ask the owner wallet to sign, then pack the reviewed account-family signature. */
73
+ export declare function signWalletSigningPayload(signer: OwnerSigner, payload: WalletSigningPayload): Promise<Hex>;
74
+ /** Integers may arrive as decimal strings from the API. */
75
+ type Numeric = bigint | number | string;
76
+ export interface MandateTermsInput {
77
+ parentId: Hex;
78
+ account: Address;
79
+ agent: Address;
80
+ accountProfileId: Hex;
81
+ installEpoch: Numeric;
82
+ projectId: Hex;
83
+ mode: Numeric;
84
+ policyVersion: Numeric;
85
+ policyHash: Hex;
86
+ validFrom: Numeric;
87
+ expiresAt: Numeric;
88
+ maxDepth: Numeric;
89
+ maxActiveDescendants: Numeric;
90
+ approvalExpiresAt: Numeric;
91
+ salt: Hex;
92
+ }
93
+ export interface GasPolicyInput {
94
+ mandateId: Hex;
95
+ account: Address;
96
+ projectId: Hex;
97
+ accountProfileId: Hex;
98
+ installEpoch: Numeric;
99
+ feeAsset: Address;
100
+ recipient: Address;
101
+ attester: Address;
102
+ maxPerAction: Numeric;
103
+ maxTotal: Numeric;
104
+ expiresAt: Numeric;
105
+ chargeableOutcomes: Numeric;
106
+ formulaVersion: Numeric;
107
+ nonce: Numeric;
108
+ }
109
+ /** Calldata for the core. Anyone may send it; authority comes only from the owner signature. */
110
+ export declare function encodeCreateMandateWithGas(terms: MandateTermsInput, mandatePolicy: Hex, gasPolicy: GasPolicyInput, packedOwnerSignature: Hex): Hex;
111
+ /** Relayed revocation with an owner signature; `deadline = 0` and empty signature is the direct owner form. */
112
+ export declare function encodeRevokeGasPolicy(gasPolicyId: Hex, deadline: number, packedOwnerSignature: Hex): Hex;
113
+ /** Relayed owner pause or resume; a direct account call uses deadline 0 and no signature. */
114
+ export declare function encodeSafetyAction(mandateId: Hex, actionCode: 1 | 2, deadline: number, packedOwnerSignature: Hex): Hex;
115
+ /** Make the account call `target` through its own execution path. */
116
+ export declare function accountExecuteCall(family: AccountFamily, account: Address, target: Address, data: Hex): OwnerAccountCall;
117
+ export interface PackedUserOperation {
118
+ sender: Address;
119
+ nonce: bigint;
120
+ initCode: Hex;
121
+ callData: Hex;
122
+ accountGasLimits: Hex;
123
+ preVerificationGas: bigint;
124
+ gasFees: Hex;
125
+ paymasterAndData: Hex;
126
+ signature: Hex;
127
+ }
128
+ export type OwnerOperation = {
129
+ kind: "safe_transaction";
130
+ family: "safe";
131
+ account: Address;
132
+ nonce: bigint;
133
+ typedData: TypedDataPayload;
134
+ expectedHash: Hex;
135
+ /** Encode `execTransaction` after the owners sign `typedData`. */
136
+ encode(signatures: Hex): {
137
+ to: Address;
138
+ data: Hex;
139
+ value: 0n;
140
+ };
141
+ } | {
142
+ kind: "user_operation";
143
+ family: Exclude<AccountFamily, "safe">;
144
+ account: Address;
145
+ userOperation: PackedUserOperation;
146
+ userOpHash: Hex;
147
+ /** The owner wallet signs `userOpHash` with EIP-191 `personal_sign`. */
148
+ message: {
149
+ raw: Hex;
150
+ };
151
+ /** Direct EntryPoint submission from any funded address, or give the signed operation to a bundler. */
152
+ encode(ownerSignature: Hex, beneficiary: Address): {
153
+ to: Address;
154
+ data: Hex;
155
+ value: 0n;
156
+ gas: bigint;
157
+ userOperation: PackedUserOperation;
158
+ };
159
+ };
160
+ export interface OwnerOperationOptions {
161
+ verificationGasLimit?: bigint;
162
+ callGasLimit?: bigint;
163
+ preVerificationGas?: bigint;
164
+ maxFeePerGas?: bigint;
165
+ maxPriorityFeePerGas?: bigint;
166
+ }
167
+ /** EntryPoint v0.7 user operation hash, computed locally. */
168
+ export declare function userOperationHash(op: PackedUserOperation, chainId?: number): Hex;
169
+ /**
170
+ * Prepare an owner operation that makes the account perform `call` through its
171
+ * reviewed owner path: a Safe transaction, or an EntryPoint v0.7 user operation.
172
+ */
173
+ export declare function prepareOwnerOperation(client: Pick<PublicClient, "getChainId" | "readContract" | "estimateFeesPerGas">, family: AccountFamily, account: Address, call: OwnerAccountCall, options?: OwnerOperationOptions): Promise<OwnerOperation>;
174
+ /** Sign a prepared owner operation with a caller-supplied owner wallet. */
175
+ export declare function signOwnerOperation(signer: OwnerSigner, operation: OwnerOperation): Promise<Hex>;
176
+ export interface PreparedGasPolicyExpectations {
177
+ account?: Address;
178
+ agent?: Address;
179
+ recipients?: readonly Address[];
180
+ maxPerActionBaseUnits?: bigint;
181
+ maxTotalBaseUnits?: bigint;
182
+ maxGasPerActionWei?: bigint;
183
+ maxGasTotalWei?: bigint;
184
+ core?: Address;
185
+ }
186
+ /**
187
+ * Recompute a prepared approval without trusting the API: the policy bytes
188
+ * against the reviewed intent, mandate and gas-policy IDs, the combined
189
+ * digest, and the wallet payload. Optional expectations pin what the
190
+ * application asked for. Throws `prepared_policy_mismatch` on any difference.
191
+ */
192
+ export declare function verifyPreparedGasPolicy(prepared: PreparedGasPolicy, expected?: PreparedGasPolicyExpectations): void;
193
+ /** Verify, ask the owner wallet to sign, and return the core call anyone may send. */
194
+ export declare function signPreparedGasPolicy(signer: OwnerSigner, prepared: PreparedGasPolicy, expected?: PreparedGasPolicyExpectations): Promise<{
195
+ to: Address;
196
+ data: Hex;
197
+ }>;
198
+ /** Verify a prepared relayed revocation, sign it with the owner wallet, and return the core call. */
199
+ export declare function signPreparedRevocation(signer: OwnerSigner, prepared: PreparedPolicyRevocation): Promise<{
200
+ to: Address;
201
+ data: Hex;
202
+ }>;
203
+ /** Recompute the core digest and wallet payload before signing an owner pause or resume. */
204
+ export declare function signPreparedSafetyAction(signer: OwnerSigner, prepared: PreparedMandateSafetyAction): Promise<{
205
+ to: Address;
206
+ data: Hex;
207
+ }>;
208
+ export {};
209
+ //# sourceMappingURL=owner.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"owner.d.ts","sourceRoot":"","sources":["../src/owner.ts"],"names":[],"mappings":"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"}