near-safe 0.7.0 → 0.7.2
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/dist/cjs/index.d.ts +1 -1
- package/dist/cjs/lib/bundler.d.ts +2 -1
- package/dist/cjs/lib/bundler.js +12 -0
- package/dist/cjs/lib/safe.d.ts +1 -1
- package/dist/cjs/lib/safe.js +9 -9
- package/dist/cjs/near-safe.d.ts +2 -1
- package/dist/cjs/near-safe.js +7 -3
- package/dist/cjs/types.d.ts +27 -0
- package/dist/esm/index.d.ts +1 -1
- package/dist/esm/index.js +1 -1
- package/dist/esm/lib/bundler.d.ts +2 -1
- package/dist/esm/lib/bundler.js +12 -0
- package/dist/esm/lib/safe.d.ts +1 -1
- package/dist/esm/lib/safe.js +9 -9
- package/dist/esm/near-safe.d.ts +2 -1
- package/dist/esm/near-safe.js +7 -3
- package/dist/esm/types.d.ts +27 -0
- package/package.json +1 -1
package/dist/cjs/index.d.ts
CHANGED
@@ -2,4 +2,4 @@ export * from "./near-safe";
|
|
2
2
|
export * from "./types";
|
3
3
|
export * from "./util";
|
4
4
|
export * from "./constants";
|
5
|
-
export { Network, BaseTx, SignRequestData, populateTx } from "near-ca";
|
5
|
+
export { Network, BaseTx, SignRequestData, populateTx, NetworkFields, } from "near-ca";
|
@@ -1,5 +1,5 @@
|
|
1
1
|
import { Address, Hash, PublicClient, Transport } from "viem";
|
2
|
-
import { GasPrices, PaymasterData, UnsignedUserOperation, UserOperation, UserOperationReceipt } from "../types";
|
2
|
+
import { GasPrices, PaymasterData, SponsorshipPolicyData, UnsignedUserOperation, UserOperation, UserOperationReceipt } from "../types";
|
3
3
|
type SponsorshipPolicy = {
|
4
4
|
sponsorshipPolicyId: string;
|
5
5
|
};
|
@@ -36,6 +36,7 @@ export declare class Erc4337Bundler {
|
|
36
36
|
getGasPrice(): Promise<GasPrices>;
|
37
37
|
getUserOpReceipt(userOpHash: Hash): Promise<UserOperationReceipt>;
|
38
38
|
private _getUserOpReceiptInner;
|
39
|
+
getSponsorshipPolicies(): Promise<SponsorshipPolicyData[]>;
|
39
40
|
}
|
40
41
|
export declare function stripApiKey(error: unknown): string;
|
41
42
|
export {};
|
package/dist/cjs/lib/bundler.js
CHANGED
@@ -60,6 +60,18 @@ class Erc4337Bundler {
|
|
60
60
|
params: [userOpHash],
|
61
61
|
}));
|
62
62
|
}
|
63
|
+
// New method to query sponsorship policies
|
64
|
+
async getSponsorshipPolicies() {
|
65
|
+
const url = `https://api.pimlico.io/v2/account/sponsorship_policies?apikey=${this.apiKey}`;
|
66
|
+
const allPolocies = await handleRequest(async () => {
|
67
|
+
const response = await fetch(url);
|
68
|
+
if (!response.ok) {
|
69
|
+
throw new Error(`HTTP error! status: ${response.status}: ${response.statusText}`);
|
70
|
+
}
|
71
|
+
return response.json();
|
72
|
+
});
|
73
|
+
return allPolocies.data.filter((p) => p.chain_ids.allowlist.includes(this.chainId));
|
74
|
+
}
|
63
75
|
}
|
64
76
|
exports.Erc4337Bundler = Erc4337Bundler;
|
65
77
|
async function handleRequest(clientMethod) {
|
package/dist/cjs/lib/safe.d.ts
CHANGED
@@ -11,7 +11,7 @@ export declare class SafeContractSuite {
|
|
11
11
|
moduleSetup: Deployment;
|
12
12
|
entryPoint: Deployment;
|
13
13
|
constructor();
|
14
|
-
addressForSetup(setup: Hex, saltNonce
|
14
|
+
addressForSetup(setup: Hex, saltNonce: string): Promise<Address>;
|
15
15
|
getSetup(owners: string[]): Hex;
|
16
16
|
addOwnerData(newOwner: Address): Hex;
|
17
17
|
getOpHash(chainId: number, unsignedUserOp: UserOperation): Promise<Hash>;
|
package/dist/cjs/lib/safe.js
CHANGED
@@ -21,7 +21,7 @@ class SafeContractSuite {
|
|
21
21
|
async addressForSetup(setup, saltNonce) {
|
22
22
|
// bytes32 salt = keccak256(abi.encodePacked(keccak256(initializer), saltNonce));
|
23
23
|
// cf: https://github.com/safe-global/safe-smart-account/blob/499b17ad0191b575fcadc5cb5b8e3faeae5391ae/contracts/proxies/SafeProxyFactory.sol#L58
|
24
|
-
const salt = (0, viem_1.keccak256)((0, viem_1.encodePacked)(["bytes32", "uint256"], [(0, viem_1.keccak256)(setup), BigInt(saltNonce
|
24
|
+
const salt = (0, viem_1.keccak256)((0, viem_1.encodePacked)(["bytes32", "uint256"], [(0, viem_1.keccak256)(setup), BigInt(saltNonce)]));
|
25
25
|
// abi.encodePacked(type(SafeProxy).creationCode, uint256(uint160(_singleton)));
|
26
26
|
// cf: https://github.com/safe-global/safe-smart-account/blob/499b17ad0191b575fcadc5cb5b8e3faeae5391ae/contracts/proxies/SafeProxyFactory.sol#L29
|
27
27
|
const initCode = (0, viem_1.encodePacked)(["bytes", "uint256"], [
|
@@ -43,18 +43,18 @@ class SafeContractSuite {
|
|
43
43
|
abi: this.singleton.abi,
|
44
44
|
functionName: "setup",
|
45
45
|
args: [
|
46
|
-
owners,
|
47
|
-
1, //
|
48
|
-
this.moduleSetup.address,
|
46
|
+
owners, // _owners
|
47
|
+
1, // _threshold
|
48
|
+
this.moduleSetup.address, // to
|
49
49
|
(0, viem_1.encodeFunctionData)({
|
50
50
|
abi: this.moduleSetup.abi,
|
51
51
|
functionName: "enableModules",
|
52
52
|
args: [[this.m4337.address]],
|
53
|
-
}),
|
54
|
-
this.m4337.address,
|
55
|
-
viem_1.zeroAddress,
|
56
|
-
0,
|
57
|
-
viem_1.zeroAddress,
|
53
|
+
}), // data
|
54
|
+
this.m4337.address, // fallbackHandler
|
55
|
+
viem_1.zeroAddress, // paymentToken
|
56
|
+
0, // payment
|
57
|
+
viem_1.zeroAddress, // paymentReceiver
|
58
58
|
],
|
59
59
|
});
|
60
60
|
}
|
package/dist/cjs/near-safe.d.ts
CHANGED
@@ -3,7 +3,7 @@ import { FinalExecutionOutcome } from "near-api-js/lib/providers";
|
|
3
3
|
import { NearEthAdapter, SignRequestData } from "near-ca";
|
4
4
|
import { Address, Hash, Hex } from "viem";
|
5
5
|
import { SafeContractSuite } from "./lib/safe";
|
6
|
-
import { DecodedMultisend, EncodedTxData, EvmTransactionData, MetaTransaction, UserOperation, UserOperationReceipt } from "./types";
|
6
|
+
import { DecodedMultisend, EncodedTxData, EvmTransactionData, MetaTransaction, SponsorshipPolicyData, UserOperation, UserOperationReceipt } from "./types";
|
7
7
|
export interface NearSafeConfig {
|
8
8
|
accountId: string;
|
9
9
|
mpcContractId: string;
|
@@ -178,4 +178,5 @@ export declare class NearSafe {
|
|
178
178
|
payload: number[];
|
179
179
|
hash: Hash;
|
180
180
|
}>;
|
181
|
+
policyForChainId(chainId: number): Promise<SponsorshipPolicyData[]>;
|
181
182
|
}
|
package/dist/cjs/near-safe.js
CHANGED
@@ -18,7 +18,8 @@ class NearSafe {
|
|
18
18
|
* @returns {Promise<NearSafe>} - A promise that resolves to a new `NearSafe` instance.
|
19
19
|
*/
|
20
20
|
static async create(config) {
|
21
|
-
const { pimlicoKey
|
21
|
+
const { pimlicoKey } = config;
|
22
|
+
const safeSaltNonce = config.safeSaltNonce || constants_1.DEFAULT_SAFE_SALT_NONCE;
|
22
23
|
// const nearAdapter = await mockAdapter();
|
23
24
|
const nearAdapter = await (0, near_ca_1.setupAdapter)({ ...config });
|
24
25
|
const safePack = new safe_1.SafeContractSuite();
|
@@ -30,7 +31,7 @@ class NearSafe {
|
|
30
31
|
MPC EOA: ${nearAdapter.address}
|
31
32
|
Safe: ${safeAddress}
|
32
33
|
`);
|
33
|
-
return new NearSafe(nearAdapter, safePack, pimlicoKey, setup, safeAddress, safeSaltNonce
|
34
|
+
return new NearSafe(nearAdapter, safePack, pimlicoKey, setup, safeAddress, safeSaltNonce);
|
34
35
|
}
|
35
36
|
/**
|
36
37
|
* Constructs a new `NearSafe` object with the provided parameters.
|
@@ -91,7 +92,6 @@ class NearSafe {
|
|
91
92
|
if (transactions.length === 0) {
|
92
93
|
throw new Error("Empty transaction set!");
|
93
94
|
}
|
94
|
-
console.log(`Building UserOp on chainId ${chainId} with ${transactions.length} transaction(s)`);
|
95
95
|
const bundler = this.bundlerForChainId(chainId);
|
96
96
|
const [gasFees, nonce, safeDeployed] = await Promise.all([
|
97
97
|
bundler.getGasPrice(),
|
@@ -329,5 +329,9 @@ class NearSafe {
|
|
329
329
|
}
|
330
330
|
}
|
331
331
|
}
|
332
|
+
async policyForChainId(chainId) {
|
333
|
+
const bundler = this.bundlerForChainId(chainId);
|
334
|
+
return bundler.getSponsorshipPolicies();
|
335
|
+
}
|
332
336
|
}
|
333
337
|
exports.NearSafe = NearSafe;
|
package/dist/cjs/types.d.ts
CHANGED
@@ -246,4 +246,31 @@ export interface EncodedTxData {
|
|
246
246
|
request: SignArgs;
|
247
247
|
}>;
|
248
248
|
}
|
249
|
+
export interface SponsorshipPoliciesResponse {
|
250
|
+
has_more: boolean;
|
251
|
+
data: SponsorshipPolicyData[];
|
252
|
+
}
|
253
|
+
export interface SponsorshipPolicyData {
|
254
|
+
id: string;
|
255
|
+
policy_name: string;
|
256
|
+
limits: PolicyLimits;
|
257
|
+
start_time: string;
|
258
|
+
end_time: string;
|
259
|
+
chain_ids: ChainIds;
|
260
|
+
policy_status: string;
|
261
|
+
created_at: string;
|
262
|
+
}
|
263
|
+
export interface PolicyLimits {
|
264
|
+
global: GlobalLimits;
|
265
|
+
}
|
266
|
+
export interface GlobalLimits {
|
267
|
+
user_operation_spending: SpendingLimit;
|
268
|
+
}
|
269
|
+
export interface SpendingLimit {
|
270
|
+
amount: number;
|
271
|
+
currency: string;
|
272
|
+
}
|
273
|
+
export interface ChainIds {
|
274
|
+
allowlist: number[];
|
275
|
+
}
|
249
276
|
export {};
|
package/dist/esm/index.d.ts
CHANGED
@@ -2,4 +2,4 @@ export * from "./near-safe";
|
|
2
2
|
export * from "./types";
|
3
3
|
export * from "./util";
|
4
4
|
export * from "./constants";
|
5
|
-
export { Network, BaseTx, SignRequestData, populateTx } from "near-ca";
|
5
|
+
export { Network, BaseTx, SignRequestData, populateTx, NetworkFields, } from "near-ca";
|
package/dist/esm/index.js
CHANGED
@@ -1,5 +1,5 @@
|
|
1
1
|
import { Address, Hash, PublicClient, Transport } from "viem";
|
2
|
-
import { GasPrices, PaymasterData, UnsignedUserOperation, UserOperation, UserOperationReceipt } from "../types";
|
2
|
+
import { GasPrices, PaymasterData, SponsorshipPolicyData, UnsignedUserOperation, UserOperation, UserOperationReceipt } from "../types";
|
3
3
|
type SponsorshipPolicy = {
|
4
4
|
sponsorshipPolicyId: string;
|
5
5
|
};
|
@@ -36,6 +36,7 @@ export declare class Erc4337Bundler {
|
|
36
36
|
getGasPrice(): Promise<GasPrices>;
|
37
37
|
getUserOpReceipt(userOpHash: Hash): Promise<UserOperationReceipt>;
|
38
38
|
private _getUserOpReceiptInner;
|
39
|
+
getSponsorshipPolicies(): Promise<SponsorshipPolicyData[]>;
|
39
40
|
}
|
40
41
|
export declare function stripApiKey(error: unknown): string;
|
41
42
|
export {};
|
package/dist/esm/lib/bundler.js
CHANGED
@@ -60,6 +60,18 @@ export class Erc4337Bundler {
|
|
60
60
|
params: [userOpHash],
|
61
61
|
}));
|
62
62
|
}
|
63
|
+
// New method to query sponsorship policies
|
64
|
+
async getSponsorshipPolicies() {
|
65
|
+
const url = `https://api.pimlico.io/v2/account/sponsorship_policies?apikey=${this.apiKey}`;
|
66
|
+
const allPolocies = await handleRequest(async () => {
|
67
|
+
const response = await fetch(url);
|
68
|
+
if (!response.ok) {
|
69
|
+
throw new Error(`HTTP error! status: ${response.status}: ${response.statusText}`);
|
70
|
+
}
|
71
|
+
return response.json();
|
72
|
+
});
|
73
|
+
return allPolocies.data.filter((p) => p.chain_ids.allowlist.includes(this.chainId));
|
74
|
+
}
|
63
75
|
}
|
64
76
|
async function handleRequest(clientMethod) {
|
65
77
|
try {
|
package/dist/esm/lib/safe.d.ts
CHANGED
@@ -11,7 +11,7 @@ export declare class SafeContractSuite {
|
|
11
11
|
moduleSetup: Deployment;
|
12
12
|
entryPoint: Deployment;
|
13
13
|
constructor();
|
14
|
-
addressForSetup(setup: Hex, saltNonce
|
14
|
+
addressForSetup(setup: Hex, saltNonce: string): Promise<Address>;
|
15
15
|
getSetup(owners: string[]): Hex;
|
16
16
|
addOwnerData(newOwner: Address): Hex;
|
17
17
|
getOpHash(chainId: number, unsignedUserOp: UserOperation): Promise<Hash>;
|
package/dist/esm/lib/safe.js
CHANGED
@@ -25,7 +25,7 @@ export class SafeContractSuite {
|
|
25
25
|
async addressForSetup(setup, saltNonce) {
|
26
26
|
// bytes32 salt = keccak256(abi.encodePacked(keccak256(initializer), saltNonce));
|
27
27
|
// cf: https://github.com/safe-global/safe-smart-account/blob/499b17ad0191b575fcadc5cb5b8e3faeae5391ae/contracts/proxies/SafeProxyFactory.sol#L58
|
28
|
-
const salt = keccak256(encodePacked(["bytes32", "uint256"], [keccak256(setup), BigInt(saltNonce
|
28
|
+
const salt = keccak256(encodePacked(["bytes32", "uint256"], [keccak256(setup), BigInt(saltNonce)]));
|
29
29
|
// abi.encodePacked(type(SafeProxy).creationCode, uint256(uint160(_singleton)));
|
30
30
|
// cf: https://github.com/safe-global/safe-smart-account/blob/499b17ad0191b575fcadc5cb5b8e3faeae5391ae/contracts/proxies/SafeProxyFactory.sol#L29
|
31
31
|
const initCode = encodePacked(["bytes", "uint256"], [
|
@@ -47,18 +47,18 @@ export class SafeContractSuite {
|
|
47
47
|
abi: this.singleton.abi,
|
48
48
|
functionName: "setup",
|
49
49
|
args: [
|
50
|
-
owners,
|
51
|
-
1, //
|
52
|
-
this.moduleSetup.address,
|
50
|
+
owners, // _owners
|
51
|
+
1, // _threshold
|
52
|
+
this.moduleSetup.address, // to
|
53
53
|
encodeFunctionData({
|
54
54
|
abi: this.moduleSetup.abi,
|
55
55
|
functionName: "enableModules",
|
56
56
|
args: [[this.m4337.address]],
|
57
|
-
}),
|
58
|
-
this.m4337.address,
|
59
|
-
zeroAddress,
|
60
|
-
0,
|
61
|
-
zeroAddress,
|
57
|
+
}), // data
|
58
|
+
this.m4337.address, // fallbackHandler
|
59
|
+
zeroAddress, // paymentToken
|
60
|
+
0, // payment
|
61
|
+
zeroAddress, // paymentReceiver
|
62
62
|
],
|
63
63
|
});
|
64
64
|
}
|
package/dist/esm/near-safe.d.ts
CHANGED
@@ -3,7 +3,7 @@ import { FinalExecutionOutcome } from "near-api-js/lib/providers";
|
|
3
3
|
import { NearEthAdapter, SignRequestData } from "near-ca";
|
4
4
|
import { Address, Hash, Hex } from "viem";
|
5
5
|
import { SafeContractSuite } from "./lib/safe";
|
6
|
-
import { DecodedMultisend, EncodedTxData, EvmTransactionData, MetaTransaction, UserOperation, UserOperationReceipt } from "./types";
|
6
|
+
import { DecodedMultisend, EncodedTxData, EvmTransactionData, MetaTransaction, SponsorshipPolicyData, UserOperation, UserOperationReceipt } from "./types";
|
7
7
|
export interface NearSafeConfig {
|
8
8
|
accountId: string;
|
9
9
|
mpcContractId: string;
|
@@ -178,4 +178,5 @@ export declare class NearSafe {
|
|
178
178
|
payload: number[];
|
179
179
|
hash: Hash;
|
180
180
|
}>;
|
181
|
+
policyForChainId(chainId: number): Promise<SponsorshipPolicyData[]>;
|
181
182
|
}
|
package/dist/esm/near-safe.js
CHANGED
@@ -21,7 +21,8 @@ export class NearSafe {
|
|
21
21
|
* @returns {Promise<NearSafe>} - A promise that resolves to a new `NearSafe` instance.
|
22
22
|
*/
|
23
23
|
static async create(config) {
|
24
|
-
const { pimlicoKey
|
24
|
+
const { pimlicoKey } = config;
|
25
|
+
const safeSaltNonce = config.safeSaltNonce || DEFAULT_SAFE_SALT_NONCE;
|
25
26
|
// const nearAdapter = await mockAdapter();
|
26
27
|
const nearAdapter = await setupAdapter({ ...config });
|
27
28
|
const safePack = new SafeContractSuite();
|
@@ -33,7 +34,7 @@ export class NearSafe {
|
|
33
34
|
MPC EOA: ${nearAdapter.address}
|
34
35
|
Safe: ${safeAddress}
|
35
36
|
`);
|
36
|
-
return new NearSafe(nearAdapter, safePack, pimlicoKey, setup, safeAddress, safeSaltNonce
|
37
|
+
return new NearSafe(nearAdapter, safePack, pimlicoKey, setup, safeAddress, safeSaltNonce);
|
37
38
|
}
|
38
39
|
/**
|
39
40
|
* Constructs a new `NearSafe` object with the provided parameters.
|
@@ -94,7 +95,6 @@ export class NearSafe {
|
|
94
95
|
if (transactions.length === 0) {
|
95
96
|
throw new Error("Empty transaction set!");
|
96
97
|
}
|
97
|
-
console.log(`Building UserOp on chainId ${chainId} with ${transactions.length} transaction(s)`);
|
98
98
|
const bundler = this.bundlerForChainId(chainId);
|
99
99
|
const [gasFees, nonce, safeDeployed] = await Promise.all([
|
100
100
|
bundler.getGasPrice(),
|
@@ -332,4 +332,8 @@ export class NearSafe {
|
|
332
332
|
}
|
333
333
|
}
|
334
334
|
}
|
335
|
+
async policyForChainId(chainId) {
|
336
|
+
const bundler = this.bundlerForChainId(chainId);
|
337
|
+
return bundler.getSponsorshipPolicies();
|
338
|
+
}
|
335
339
|
}
|
package/dist/esm/types.d.ts
CHANGED
@@ -246,4 +246,31 @@ export interface EncodedTxData {
|
|
246
246
|
request: SignArgs;
|
247
247
|
}>;
|
248
248
|
}
|
249
|
+
export interface SponsorshipPoliciesResponse {
|
250
|
+
has_more: boolean;
|
251
|
+
data: SponsorshipPolicyData[];
|
252
|
+
}
|
253
|
+
export interface SponsorshipPolicyData {
|
254
|
+
id: string;
|
255
|
+
policy_name: string;
|
256
|
+
limits: PolicyLimits;
|
257
|
+
start_time: string;
|
258
|
+
end_time: string;
|
259
|
+
chain_ids: ChainIds;
|
260
|
+
policy_status: string;
|
261
|
+
created_at: string;
|
262
|
+
}
|
263
|
+
export interface PolicyLimits {
|
264
|
+
global: GlobalLimits;
|
265
|
+
}
|
266
|
+
export interface GlobalLimits {
|
267
|
+
user_operation_spending: SpendingLimit;
|
268
|
+
}
|
269
|
+
export interface SpendingLimit {
|
270
|
+
amount: number;
|
271
|
+
currency: string;
|
272
|
+
}
|
273
|
+
export interface ChainIds {
|
274
|
+
allowlist: number[];
|
275
|
+
}
|
249
276
|
export {};
|