@permissionless/wagmi 0.0.4 → 0.1.1
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/CHANGELOG.md +12 -0
- package/README.md +102 -0
- package/_cjs/context.js +14 -0
- package/_cjs/context.js.map +1 -0
- package/_cjs/hooks/useAvailableCapabilities.js +37 -0
- package/_cjs/hooks/useAvailableCapabilities.js.map +1 -0
- package/_cjs/hooks/useSendTransaction.js +42 -0
- package/_cjs/hooks/useSendTransaction.js.map +1 -0
- package/_cjs/hooks/useWaitForTransactionReceipt.js +167 -0
- package/_cjs/hooks/useWaitForTransactionReceipt.js.map +1 -0
- package/_cjs/index.js +7 -11
- package/_cjs/index.js.map +1 -1
- package/_cjs/utils/observe.js +43 -0
- package/_cjs/utils/observe.js.map +1 -0
- package/_esm/context.js +10 -0
- package/_esm/context.js.map +1 -0
- package/_esm/hooks/useAvailableCapabilities.js +33 -0
- package/_esm/hooks/useAvailableCapabilities.js.map +1 -0
- package/_esm/hooks/useSendTransaction.js +38 -0
- package/_esm/hooks/useSendTransaction.js.map +1 -0
- package/_esm/hooks/useWaitForTransactionReceipt.js +175 -0
- package/_esm/hooks/useWaitForTransactionReceipt.js.map +1 -0
- package/_esm/index.js +3 -6
- package/_esm/index.js.map +1 -1
- package/_esm/utils/observe.js +46 -0
- package/_esm/utils/observe.js.map +1 -0
- package/_types/context.d.ts +11 -0
- package/_types/context.d.ts.map +1 -0
- package/_types/hooks/useAvailableCapabilities.d.ts +5 -0
- package/_types/hooks/useAvailableCapabilities.d.ts.map +1 -0
- package/_types/hooks/useSendTransaction.d.ts +20 -0
- package/_types/hooks/useSendTransaction.d.ts.map +1 -0
- package/_types/hooks/useWaitForTransactionReceipt.d.ts +83 -0
- package/_types/hooks/useWaitForTransactionReceipt.d.ts.map +1 -0
- package/_types/index.d.ts +3 -6
- package/_types/index.d.ts.map +1 -1
- package/_types/utils/observe.d.ts +23 -0
- package/_types/utils/observe.d.ts.map +1 -0
- package/context.ts +22 -0
- package/hooks/useAvailableCapabilities.ts +43 -0
- package/hooks/useSendTransaction.ts +148 -0
- package/hooks/useWaitForTransactionReceipt.ts +431 -0
- package/index.ts +13 -30
- package/package.json +2 -4
- package/utils/observe.ts +76 -0
- package/_cjs/connectors/biconomySmartAccount.js +0 -18
- package/_cjs/connectors/biconomySmartAccount.js.map +0 -1
- package/_cjs/connectors/kernelSmartAccount.js +0 -18
- package/_cjs/connectors/kernelSmartAccount.js.map +0 -1
- package/_cjs/connectors/safeSmartAccount.js +0 -18
- package/_cjs/connectors/safeSmartAccount.js.map +0 -1
- package/_cjs/connectors/simpleSmartAccount.js +0 -30
- package/_cjs/connectors/simpleSmartAccount.js.map +0 -1
- package/_cjs/connectors/smartAccount.js +0 -51
- package/_cjs/connectors/smartAccount.js.map +0 -1
- package/_esm/connectors/biconomySmartAccount.js +0 -14
- package/_esm/connectors/biconomySmartAccount.js.map +0 -1
- package/_esm/connectors/kernelSmartAccount.js +0 -14
- package/_esm/connectors/kernelSmartAccount.js.map +0 -1
- package/_esm/connectors/safeSmartAccount.js +0 -14
- package/_esm/connectors/safeSmartAccount.js.map +0 -1
- package/_esm/connectors/simpleSmartAccount.js +0 -26
- package/_esm/connectors/simpleSmartAccount.js.map +0 -1
- package/_esm/connectors/smartAccount.js +0 -53
- package/_esm/connectors/smartAccount.js.map +0 -1
- package/_types/connectors/biconomySmartAccount.d.ts +0 -317
- package/_types/connectors/biconomySmartAccount.d.ts.map +0 -1
- package/_types/connectors/kernelSmartAccount.d.ts +0 -317
- package/_types/connectors/kernelSmartAccount.d.ts.map +0 -1
- package/_types/connectors/safeSmartAccount.d.ts +0 -317
- package/_types/connectors/safeSmartAccount.d.ts.map +0 -1
- package/_types/connectors/simpleSmartAccount.d.ts +0 -635
- package/_types/connectors/simpleSmartAccount.d.ts.map +0 -1
- package/_types/connectors/smartAccount.d.ts +0 -294
- package/_types/connectors/smartAccount.d.ts.map +0 -1
- package/connectors/biconomySmartAccount.ts +0 -53
- package/connectors/kernelSmartAccount.ts +0 -53
- package/connectors/safeSmartAccount.ts +0 -50
- package/connectors/simpleSmartAccount.ts +0 -90
- package/connectors/smartAccount.ts +0 -72
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,17 @@
|
|
|
1
1
|
# @permissionless/wagmi
|
|
2
2
|
|
|
3
|
+
## 0.1.1
|
|
4
|
+
|
|
5
|
+
### Patch Changes
|
|
6
|
+
|
|
7
|
+
- a5593ef8ee73001434ff717b39fe1298cba196d3: Added exports for parameters and return types
|
|
8
|
+
|
|
9
|
+
## 0.1.0
|
|
10
|
+
|
|
11
|
+
### Minor Changes
|
|
12
|
+
|
|
13
|
+
- c3f6a95fc4d4264a0d761931da74d9c46a052468: Added hooks for Erc5792
|
|
14
|
+
|
|
3
15
|
## 0.0.4
|
|
4
16
|
|
|
5
17
|
### Patch Changes
|
package/README.md
ADDED
|
@@ -0,0 +1,102 @@
|
|
|
1
|
+
---
|
|
2
|
+
showOutline: false
|
|
3
|
+
content:
|
|
4
|
+
width: 100%
|
|
5
|
+
description: Build with ERC-4337 smart accounts, bundlers, paymasters, and user operations
|
|
6
|
+
title: permissionless.js
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
<h1 className='vocs_HomePage_title'>@permissionless/wagmi</h1>
|
|
10
|
+
Enable gas sponsorship and transaction batching for your app with just a couple lines of cod.
|
|
11
|
+
<br />
|
|
12
|
+
<br />
|
|
13
|
+
permissionless/wagmi is a TypeScript library built on top of permissionless.js
|
|
14
|
+
and wagmi for quickly enabling support for EIP-5792 features on your app,
|
|
15
|
+
including gas sponsorship and transaction batching, with just a couple lines of
|
|
16
|
+
code. We built @permissionless/wagmi to allow app developers to support the
|
|
17
|
+
features of new smart accounts such as Coinbase Smart Wallet without any of the
|
|
18
|
+
complexity.
|
|
19
|
+
|
|
20
|
+
<article className="vocs_Content max-w-4xl mt-[-80px] mx-auto">
|
|
21
|
+
|
|
22
|
+
#
|
|
23
|
+
|
|
24
|
+
# Overview
|
|
25
|
+
|
|
26
|
+
```tsx [main.tsx]
|
|
27
|
+
import { PermissionlessProvider } from "@permissionless/wagmi"; // [!code ++] // [!code focus]
|
|
28
|
+
|
|
29
|
+
function Main() {
|
|
30
|
+
return (
|
|
31
|
+
<WagmiProvider config={config}>
|
|
32
|
+
<QueryClientProvider client={queryClient}>
|
|
33
|
+
<PermissionlessProvider // [!code ++] // [!code focus]
|
|
34
|
+
capabilities={capabilities} // [!code ++] // [!code focus]
|
|
35
|
+
>
|
|
36
|
+
// [!code ++] // [!code focus]
|
|
37
|
+
{/** ... */}
|
|
38
|
+
</PermissionlessProvider>{" "}
|
|
39
|
+
// [!code ++] // [!code focus]
|
|
40
|
+
</QueryClientProvider>
|
|
41
|
+
</WagmiProvider>
|
|
42
|
+
);
|
|
43
|
+
}
|
|
44
|
+
```
|
|
45
|
+
|
|
46
|
+
```tsx [app.tsx]
|
|
47
|
+
import { useSendTransaction, useWaitForTransactionReceipt } from "wagmi" // [!code --] // [!code focus]
|
|
48
|
+
import { // [!code ++] // [!code focus]
|
|
49
|
+
useSendTransaction, // [!code ++] // [!code focus]
|
|
50
|
+
useWaitForTransactionReceipt // [!code ++] // [!code focus]
|
|
51
|
+
} from "@permissionless/wagmi" // [!code ++] // [!code focus]
|
|
52
|
+
|
|
53
|
+
function App() {
|
|
54
|
+
const {
|
|
55
|
+
sendTransaction, // [!code focus]
|
|
56
|
+
data: transactionReference,
|
|
57
|
+
isPending
|
|
58
|
+
} = useSendTransaction() // [!code focus]
|
|
59
|
+
|
|
60
|
+
const { data: receipt, isPending: isReceiptPending } = // [!code focus]
|
|
61
|
+
useWaitForTransactionReceipt({ // [!code focus]
|
|
62
|
+
hash: "0x1234" // [!code --] // [!code focus]
|
|
63
|
+
id: transactionReference // [!code ++] // [!code focus]
|
|
64
|
+
}) // [!code focus]
|
|
65
|
+
|
|
66
|
+
const sendTransactionCallback = useCallback(async () => {
|
|
67
|
+
console.log("Sending transaction...")
|
|
68
|
+
sendTransaction({ // [!code focus]
|
|
69
|
+
to: "0xd8da6bf26964af9d7eed9e03e53415d37aa96045", // [!code focus]
|
|
70
|
+
data: "0x1234" // [!code focus]
|
|
71
|
+
}) // [!code focus]
|
|
72
|
+
}, [sendTransaction])
|
|
73
|
+
|
|
74
|
+
}
|
|
75
|
+
```
|
|
76
|
+
|
|
77
|
+
And that's it!
|
|
78
|
+
|
|
79
|
+
# Features
|
|
80
|
+
|
|
81
|
+
- **ERC-7677 Paymaster service**: Makes it easier to interact with an external
|
|
82
|
+
smart account that offers support.
|
|
83
|
+
- **Sending multiple transactions**: Makes it easier to send multiple
|
|
84
|
+
transactions from an external smart account.
|
|
85
|
+
- **Built on & for wagmi**: `@permissionless/wagmi` is designed to be a thin
|
|
86
|
+
wrapper around wagmi, maintaining the same style and overall feel wagmi
|
|
87
|
+
provides.
|
|
88
|
+
- and a lot more coming soon...
|
|
89
|
+
|
|
90
|
+
# Source Code
|
|
91
|
+
|
|
92
|
+
The source code for `@permissionless/wagmi` is available on
|
|
93
|
+
[GitHub](https://github.com/pimlicolabs/permissionless.js)
|
|
94
|
+
|
|
95
|
+
`@permissionless/wagmi` is distributed under an MIT License.
|
|
96
|
+
|
|
97
|
+
We welcome contributions from the community. If you would like to contribute,
|
|
98
|
+
please open an issue or a pull request.
|
|
99
|
+
|
|
100
|
+
Feel free to ask any questions in our [Telegram group](https://t.me/pimlicoHQ)
|
|
101
|
+
|
|
102
|
+
</article>
|
package/_cjs/context.js
ADDED
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.PermissionlessProvider = exports.PermissionlessContext = void 0;
|
|
4
|
+
const react_1 = require("react");
|
|
5
|
+
exports.PermissionlessContext = (0, react_1.createContext)({
|
|
6
|
+
capabilities: {}
|
|
7
|
+
});
|
|
8
|
+
const PermissionlessProvider = (parameters) => {
|
|
9
|
+
const { capabilities, children } = parameters;
|
|
10
|
+
const props = { value: { capabilities } };
|
|
11
|
+
return (0, react_1.createElement)(exports.PermissionlessContext.Provider, props, children);
|
|
12
|
+
};
|
|
13
|
+
exports.PermissionlessProvider = PermissionlessProvider;
|
|
14
|
+
//# sourceMappingURL=context.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"context.js","sourceRoot":"","sources":["../context.ts"],"names":[],"mappings":";;;AAAA,iCAAoD;AAGvC,QAAA,qBAAqB,GAAG,IAAA,qBAAa,EAE/C;IACC,YAAY,EAAE,EAAE;CACnB,CAAC,CAAA;AAMK,MAAM,sBAAsB,GAAG,CAClC,UAAgE,EAClE,EAAE;IACA,MAAM,EAAE,YAAY,EAAE,QAAQ,EAAE,GAAG,UAAU,CAAA;IAE7C,MAAM,KAAK,GAAG,EAAE,KAAK,EAAE,EAAE,YAAY,EAAE,EAAE,CAAA;IAEzC,OAAO,IAAA,qBAAa,EAAC,6BAAqB,CAAC,QAAQ,EAAE,KAAK,EAAE,QAAQ,CAAC,CAAA;AACzE,CAAC,CAAA;AARY,QAAA,sBAAsB,0BAQlC"}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
"use client";
|
|
3
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
4
|
+
exports.useAvailableCapabilities = void 0;
|
|
5
|
+
const react_1 = require("react");
|
|
6
|
+
const wagmi_1 = require("wagmi");
|
|
7
|
+
const experimental_1 = require("wagmi/experimental");
|
|
8
|
+
const context_1 = require("../context.js");
|
|
9
|
+
const useAvailableCapabilities = () => {
|
|
10
|
+
const { capabilities: capabilitiesConfigured } = (0, react_1.useContext)(context_1.PermissionlessContext);
|
|
11
|
+
const account = (0, wagmi_1.useAccount)();
|
|
12
|
+
const { data: availableCapabilities } = (0, experimental_1.useCapabilities)({
|
|
13
|
+
account: account.address
|
|
14
|
+
});
|
|
15
|
+
const memoisedCapabilities = (0, react_1.useMemo)(() => {
|
|
16
|
+
if (!availableCapabilities || !account.chainId)
|
|
17
|
+
return undefined;
|
|
18
|
+
const capabilitiesForChain = availableCapabilities[account.chainId];
|
|
19
|
+
if (capabilitiesConfigured === undefined)
|
|
20
|
+
return undefined;
|
|
21
|
+
let capabilities = undefined;
|
|
22
|
+
for (const capabilityConfigured in capabilitiesConfigured) {
|
|
23
|
+
if (capabilitiesForChain[capabilityConfigured]?.supported) {
|
|
24
|
+
if (!capabilities) {
|
|
25
|
+
capabilities = {};
|
|
26
|
+
}
|
|
27
|
+
capabilities[capabilityConfigured] = {
|
|
28
|
+
...capabilitiesConfigured[capabilityConfigured]
|
|
29
|
+
};
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
return capabilities;
|
|
33
|
+
}, [availableCapabilities, account.chainId, capabilitiesConfigured]);
|
|
34
|
+
return { capabilities: memoisedCapabilities };
|
|
35
|
+
};
|
|
36
|
+
exports.useAvailableCapabilities = useAvailableCapabilities;
|
|
37
|
+
//# sourceMappingURL=useAvailableCapabilities.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useAvailableCapabilities.js","sourceRoot":"","sources":["../../hooks/useAvailableCapabilities.ts"],"names":[],"mappings":";AAAA,YAAY,CAAA;;;AAEZ,iCAA2C;AAE3C,iCAAkC;AAClC,qDAAoD;AACpD,wCAAkD;AAE3C,MAAM,wBAAwB,GAAG,GAAG,EAAE;IACzC,MAAM,EAAE,YAAY,EAAE,sBAAsB,EAAE,GAAG,IAAA,kBAAU,EACvD,+BAAqB,CACxB,CAAA;IAED,MAAM,OAAO,GAAG,IAAA,kBAAU,GAAE,CAAA;IAE5B,MAAM,EAAE,IAAI,EAAE,qBAAqB,EAAE,GAAG,IAAA,8BAAe,EAAC;QACpD,OAAO,EAAE,OAAO,CAAC,OAAO;KAC3B,CAAC,CAAA;IAEF,MAAM,oBAAoB,GAAG,IAAA,eAAO,EAAC,GAAG,EAAE;QACtC,IAAI,CAAC,qBAAqB,IAAI,CAAC,OAAO,CAAC,OAAO;YAAE,OAAO,SAAS,CAAA;QAChE,MAAM,oBAAoB,GAAG,qBAAqB,CAAC,OAAO,CAAC,OAAO,CAAC,CAAA;QACnE,IAAI,sBAAsB,KAAK,SAAS;YAAE,OAAO,SAAS,CAAA;QAE1D,IAAI,YAAY,GACZ,SAAS,CAAA;QAEb,KAAK,MAAM,oBAAoB,IAAI,sBAAsB,EAAE,CAAC;YACxD,IAAI,oBAAoB,CAAC,oBAAoB,CAAC,EAAE,SAAS,EAAE,CAAC;gBACxD,IAAI,CAAC,YAAY,EAAE,CAAC;oBAChB,YAAY,GAAG,EAAE,CAAA;gBACrB,CAAC;gBACD,YAAY,CAAC,oBAAoB,CAAC,GAAG;oBACjC,GAAG,sBAAsB,CAAC,oBAAoB,CAAC;iBAClD,CAAA;YACL,CAAC;QACL,CAAC;QAED,OAAO,YAAY,CAAA;IACvB,CAAC,EAAE,CAAC,qBAAqB,EAAE,OAAO,CAAC,OAAO,EAAE,sBAAsB,CAAC,CAAC,CAAA;IAEpE,OAAO,EAAE,YAAY,EAAE,oBAAoB,EAAE,CAAA;AACjD,CAAC,CAAA;AAlCY,QAAA,wBAAwB,4BAkCpC"}
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.useSendTransaction = void 0;
|
|
4
|
+
const react_query_1 = require("@tanstack/react-query");
|
|
5
|
+
const core_1 = require("@wagmi/core");
|
|
6
|
+
const experimental_1 = require("@wagmi/core/experimental");
|
|
7
|
+
const wagmi_1 = require("wagmi");
|
|
8
|
+
const useAvailableCapabilities_1 = require("./useAvailableCapabilities.js");
|
|
9
|
+
const sendTransactionMutationOptions = (config, parameters = {}) => {
|
|
10
|
+
return {
|
|
11
|
+
mutationFn(variables) {
|
|
12
|
+
if (parameters.capabilities) {
|
|
13
|
+
return (0, experimental_1.sendCalls)(config, {
|
|
14
|
+
calls: [variables],
|
|
15
|
+
capabilities: parameters.capabilities
|
|
16
|
+
});
|
|
17
|
+
}
|
|
18
|
+
return (0, core_1.sendTransaction)(config, variables);
|
|
19
|
+
},
|
|
20
|
+
mutationKey: ["sendTransaction"]
|
|
21
|
+
};
|
|
22
|
+
};
|
|
23
|
+
const useSendTransaction = (parameters = {}) => {
|
|
24
|
+
const { mutation } = parameters;
|
|
25
|
+
const { capabilities } = (0, useAvailableCapabilities_1.useAvailableCapabilities)();
|
|
26
|
+
const config = (0, wagmi_1.useConfig)(parameters);
|
|
27
|
+
const mutationOptions = sendTransactionMutationOptions(config, {
|
|
28
|
+
...parameters,
|
|
29
|
+
capabilities
|
|
30
|
+
});
|
|
31
|
+
const { mutate, mutateAsync, ...result } = (0, react_query_1.useMutation)({
|
|
32
|
+
...mutation,
|
|
33
|
+
...mutationOptions
|
|
34
|
+
});
|
|
35
|
+
return {
|
|
36
|
+
...result,
|
|
37
|
+
sendTransaction: mutate,
|
|
38
|
+
sendTransactionAsync: mutateAsync
|
|
39
|
+
};
|
|
40
|
+
};
|
|
41
|
+
exports.useSendTransaction = useSendTransaction;
|
|
42
|
+
//# sourceMappingURL=useSendTransaction.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useSendTransaction.js","sourceRoot":"","sources":["../../hooks/useSendTransaction.ts"],"names":[],"mappings":";;;AAAA,uDAI8B;AAC9B,sCAA6C;AAC7C,2DAAoD;AAQpD,iCAAqE;AAMrE,yEAAqE;AAErE,MAAM,8BAA8B,GAAG,CACnC,MAAc,EACd,aAEI,EAAE,EACR,EAAE;IACA,OAAO;QACH,UAAU,CAAC,SAAS;YAChB,IAAI,UAAU,CAAC,YAAY,EAAE,CAAC;gBAC1B,OAAO,IAAA,wBAAS,EAAC,MAAM,EAAE;oBACrB,KAAK,EAAE,CAAC,SAAS,CAAC;oBAClB,YAAY,EAAE,UAAU,CAAC,YAAY;iBACxC,CAAC,CAAA;YACN,CAAC;YAED,OAAO,IAAA,sBAAe,EAAC,MAAM,EAAE,SAAS,CAAoB,CAAA;QAChE,CAAC;QACD,WAAW,EAAE,CAAC,iBAAiB,CAAC;KAKnC,CAAA;AACL,CAAC,CAAA;AA2EM,MAAM,kBAAkB,GAAG,CAI9B,aAA4D,EAAE,EACjB,EAAE;IAC/C,MAAM,EAAE,QAAQ,EAAE,GAAG,UAAU,CAAA;IAC/B,MAAM,EAAE,YAAY,EAAE,GAAG,IAAA,mDAAwB,GAAE,CAAA;IAEnD,MAAM,MAAM,GAAG,IAAA,iBAAS,EAAC,UAAU,CAAC,CAAA;IAEpC,MAAM,eAAe,GAAG,8BAA8B,CAAC,MAAM,EAAE;QAC3D,GAAG,UAAU;QACb,YAAY;KACf,CAAC,CAAA;IAEF,MAAM,EAAE,MAAM,EAAE,WAAW,EAAE,GAAG,MAAM,EAAE,GAAG,IAAA,yBAAW,EAAC;QACnD,GAAG,QAAQ;QACX,GAAG,eAAe;KACrB,CAAC,CAAA;IAGF,OAAO;QACH,GAAG,MAAM;QACT,eAAe,EAAE,MAAmC;QACpD,oBAAoB,EAAE,WAA6C;KACtE,CAAA;AACL,CAAC,CAAA;AA3BY,QAAA,kBAAkB,sBA2B9B"}
|
|
@@ -0,0 +1,167 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
"use client";
|
|
3
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
4
|
+
exports.waitForTransactionReceiptQueryKey = waitForTransactionReceiptQueryKey;
|
|
5
|
+
exports.filterQueryOptions = filterQueryOptions;
|
|
6
|
+
exports.getCallsStatusQueryKey = getCallsStatusQueryKey;
|
|
7
|
+
exports.waitForCallsStatus = waitForCallsStatus;
|
|
8
|
+
exports.waitForTransactionReceiptQueryOptions = waitForTransactionReceiptQueryOptions;
|
|
9
|
+
exports.useWaitForTransactionReceipt = useWaitForTransactionReceipt;
|
|
10
|
+
const core_1 = require("@wagmi/core");
|
|
11
|
+
const core_2 = require("@wagmi/core");
|
|
12
|
+
const viem_1 = require("viem");
|
|
13
|
+
const actions_1 = require("viem/actions");
|
|
14
|
+
const experimental_1 = require("viem/experimental");
|
|
15
|
+
const utils_1 = require("viem/utils");
|
|
16
|
+
const wagmi_1 = require("wagmi");
|
|
17
|
+
const query_1 = require("wagmi/query");
|
|
18
|
+
const observe_1 = require("../utils/observe.js");
|
|
19
|
+
const useAvailableCapabilities_1 = require("./useAvailableCapabilities.js");
|
|
20
|
+
function waitForTransactionReceiptQueryKey(options = {}) {
|
|
21
|
+
const { ...rest } = options;
|
|
22
|
+
return ["waitForTransactionReceipt", filterQueryOptions(rest)];
|
|
23
|
+
}
|
|
24
|
+
function filterQueryOptions(options) {
|
|
25
|
+
const { _defaulted, behavior, gcTime, initialData, initialDataUpdatedAt, maxPages, meta, networkMode, queryFn, queryHash, queryKey, queryKeyHashFn, retry, retryDelay, structuralSharing, getPreviousPageParam, getNextPageParam, initialPageParam, _optimisticResults, enabled, notifyOnChangeProps, placeholderData, refetchInterval, refetchIntervalInBackground, refetchOnMount, refetchOnReconnect, refetchOnWindowFocus, retryOnMount, select, staleTime, suspense, throwOnError, config, connector, query, ...rest } = options;
|
|
26
|
+
return rest;
|
|
27
|
+
}
|
|
28
|
+
function getCallsStatusQueryKey(options) {
|
|
29
|
+
return ["callsStatus", filterQueryOptions(options)];
|
|
30
|
+
}
|
|
31
|
+
async function waitForCallsStatus(config, parameters) {
|
|
32
|
+
const { timeout = 0, id, pollingInterval, retryCount = 6, confirmations = 1 } = parameters;
|
|
33
|
+
const client = await (0, core_1.getConnectorClient)(config, {});
|
|
34
|
+
const observerId = (0, viem_1.stringify)(["waitForTransactionReceipt", client.uid, id]);
|
|
35
|
+
let count = 0;
|
|
36
|
+
let receipt;
|
|
37
|
+
return new Promise((resolve, reject) => {
|
|
38
|
+
if (timeout)
|
|
39
|
+
setTimeout(() => reject(new viem_1.WaitForTransactionReceiptTimeoutError({
|
|
40
|
+
hash: id
|
|
41
|
+
})), timeout);
|
|
42
|
+
const _unobserve = (0, observe_1.observe)(observerId, { resolve, reject }, (emit) => {
|
|
43
|
+
const _unwatch = (0, utils_1.getAction)(client, actions_1.watchBlockNumber, "watchBlockNumber")({
|
|
44
|
+
emitMissed: true,
|
|
45
|
+
emitOnBegin: true,
|
|
46
|
+
poll: true,
|
|
47
|
+
pollingInterval,
|
|
48
|
+
async onBlockNumber(blockNumber) {
|
|
49
|
+
const done = (fn) => {
|
|
50
|
+
_unwatch();
|
|
51
|
+
fn();
|
|
52
|
+
_unobserve();
|
|
53
|
+
};
|
|
54
|
+
if (count > retryCount)
|
|
55
|
+
done(() => emit.reject(new viem_1.WaitForTransactionReceiptTimeoutError({
|
|
56
|
+
hash: id
|
|
57
|
+
})));
|
|
58
|
+
try {
|
|
59
|
+
if (receipt) {
|
|
60
|
+
if (confirmations > 1 &&
|
|
61
|
+
(!receipt.receipts?.[0]?.blockNumber ||
|
|
62
|
+
blockNumber -
|
|
63
|
+
receipt.receipts?.[0]?.blockNumber +
|
|
64
|
+
1n <
|
|
65
|
+
confirmations))
|
|
66
|
+
return;
|
|
67
|
+
if (receipt.status === "PENDING") {
|
|
68
|
+
return;
|
|
69
|
+
}
|
|
70
|
+
if (receipt.receipts?.length === 0) {
|
|
71
|
+
return;
|
|
72
|
+
}
|
|
73
|
+
const finalReceipt = receipt.receipts;
|
|
74
|
+
if (!finalReceipt) {
|
|
75
|
+
return;
|
|
76
|
+
}
|
|
77
|
+
const transactionReceipt = await (0, utils_1.getAction)(client, actions_1.getTransactionReceipt, "getTransactionReceipt")({ hash: finalReceipt[0].transactionHash });
|
|
78
|
+
done(() => emit.resolve({
|
|
79
|
+
...transactionReceipt,
|
|
80
|
+
chainId: client.chain.id
|
|
81
|
+
}));
|
|
82
|
+
return;
|
|
83
|
+
}
|
|
84
|
+
receipt = await (0, utils_1.getAction)(client, experimental_1.getCallsStatus, "getCallsStatus")({ id });
|
|
85
|
+
if (receipt.status === "PENDING") {
|
|
86
|
+
return;
|
|
87
|
+
}
|
|
88
|
+
if (confirmations > 1 &&
|
|
89
|
+
(!receipt.receipts?.[0]?.blockNumber ||
|
|
90
|
+
blockNumber -
|
|
91
|
+
receipt.receipts?.[0]?.blockNumber +
|
|
92
|
+
1n <
|
|
93
|
+
confirmations))
|
|
94
|
+
return;
|
|
95
|
+
if (receipt.receipts?.length === 0) {
|
|
96
|
+
return;
|
|
97
|
+
}
|
|
98
|
+
const finalReceipt = receipt.receipts;
|
|
99
|
+
if (!finalReceipt) {
|
|
100
|
+
return;
|
|
101
|
+
}
|
|
102
|
+
const transactionReceipt = await (0, utils_1.getAction)(client, actions_1.getTransactionReceipt, "getTransactionReceipt")({ hash: finalReceipt[0].transactionHash });
|
|
103
|
+
done(() => emit.resolve({
|
|
104
|
+
...transactionReceipt,
|
|
105
|
+
chainId: client.chain.id
|
|
106
|
+
}));
|
|
107
|
+
}
|
|
108
|
+
catch (err) {
|
|
109
|
+
done(() => emit.reject(err));
|
|
110
|
+
}
|
|
111
|
+
finally {
|
|
112
|
+
count++;
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
});
|
|
116
|
+
});
|
|
117
|
+
});
|
|
118
|
+
}
|
|
119
|
+
function waitForTransactionReceiptQueryOptions(config, options) {
|
|
120
|
+
return {
|
|
121
|
+
async queryFn({ queryKey }) {
|
|
122
|
+
const { scopeKey: _, id, ...parameters } = queryKey[1];
|
|
123
|
+
if (!id)
|
|
124
|
+
throw new Error("id is required");
|
|
125
|
+
if (!options.capabilities && !(0, viem_1.isHash)(id)) {
|
|
126
|
+
throw new Error("capabilities or hash is required");
|
|
127
|
+
}
|
|
128
|
+
if (options.capabilities) {
|
|
129
|
+
const status = await waitForCallsStatus(config, {
|
|
130
|
+
id,
|
|
131
|
+
...parameters
|
|
132
|
+
});
|
|
133
|
+
return status;
|
|
134
|
+
}
|
|
135
|
+
const status = await (0, core_1.waitForTransactionReceipt)(config, {
|
|
136
|
+
hash: id,
|
|
137
|
+
...options,
|
|
138
|
+
...parameters
|
|
139
|
+
});
|
|
140
|
+
return status;
|
|
141
|
+
},
|
|
142
|
+
queryKey: waitForTransactionReceiptQueryKey(options),
|
|
143
|
+
retry(failureCount, error) {
|
|
144
|
+
if (error instanceof core_2.ConnectorNotConnectedError)
|
|
145
|
+
return false;
|
|
146
|
+
return failureCount < 3;
|
|
147
|
+
}
|
|
148
|
+
};
|
|
149
|
+
}
|
|
150
|
+
function useWaitForTransactionReceipt(parameters = {}) {
|
|
151
|
+
const { query = {} } = parameters;
|
|
152
|
+
const { capabilities } = (0, useAvailableCapabilities_1.useAvailableCapabilities)();
|
|
153
|
+
const config = (0, wagmi_1.useConfig)(parameters);
|
|
154
|
+
const chainId = (0, wagmi_1.useChainId)({ config });
|
|
155
|
+
const enabled = Boolean(parameters.id && (query.enabled ?? true));
|
|
156
|
+
const options = waitForTransactionReceiptQueryOptions(config, {
|
|
157
|
+
...parameters,
|
|
158
|
+
chainId: parameters.chainId ?? chainId,
|
|
159
|
+
capabilities
|
|
160
|
+
});
|
|
161
|
+
return (0, query_1.useQuery)({
|
|
162
|
+
...query,
|
|
163
|
+
...options,
|
|
164
|
+
enabled
|
|
165
|
+
});
|
|
166
|
+
}
|
|
167
|
+
//# sourceMappingURL=useWaitForTransactionReceipt.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useWaitForTransactionReceipt.js","sourceRoot":"","sources":["../../hooks/useWaitForTransactionReceipt.ts"],"names":[],"mappings":"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"}
|
package/_cjs/index.js
CHANGED
|
@@ -1,14 +1,10 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.
|
|
4
|
-
|
|
5
|
-
Object.defineProperty(exports, "
|
|
6
|
-
|
|
7
|
-
Object.defineProperty(exports, "
|
|
8
|
-
|
|
9
|
-
Object.defineProperty(exports, "
|
|
10
|
-
const biconomySmartAccount_1 = require("./connectors/biconomySmartAccount.js");
|
|
11
|
-
Object.defineProperty(exports, "biconomySmartAccount", { enumerable: true, get: function () { return biconomySmartAccount_1.biconomySmartAccount; } });
|
|
12
|
-
const kernelSmartAccount_1 = require("./connectors/kernelSmartAccount.js");
|
|
13
|
-
Object.defineProperty(exports, "kernelSmartAccount", { enumerable: true, get: function () { return kernelSmartAccount_1.kernelSmartAccount; } });
|
|
3
|
+
exports.useWaitForTransactionReceipt = exports.useSendTransaction = exports.PermissionlessProvider = void 0;
|
|
4
|
+
var context_1 = require("./context.js");
|
|
5
|
+
Object.defineProperty(exports, "PermissionlessProvider", { enumerable: true, get: function () { return context_1.PermissionlessProvider; } });
|
|
6
|
+
var useSendTransaction_1 = require("./hooks/useSendTransaction.js");
|
|
7
|
+
Object.defineProperty(exports, "useSendTransaction", { enumerable: true, get: function () { return useSendTransaction_1.useSendTransaction; } });
|
|
8
|
+
var useWaitForTransactionReceipt_1 = require("./hooks/useWaitForTransactionReceipt.js");
|
|
9
|
+
Object.defineProperty(exports, "useWaitForTransactionReceipt", { enumerable: true, get: function () { return useWaitForTransactionReceipt_1.useWaitForTransactionReceipt; } });
|
|
14
10
|
//# sourceMappingURL=index.js.map
|
package/_cjs/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../index.ts"],"names":[],"mappings":";;;AAAA,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../index.ts"],"names":[],"mappings":";;;AAAA,qCAGkB;AAFd,iHAAA,sBAAsB,OAAA;AAI1B,iEAImC;AAH/B,wHAAA,kBAAkB,OAAA;AAItB,qFAI6C;AAHzC,4IAAA,4BAA4B,OAAA"}
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.cleanupCache = exports.listenersCache = void 0;
|
|
4
|
+
exports.observe = observe;
|
|
5
|
+
exports.listenersCache = new Map();
|
|
6
|
+
exports.cleanupCache = new Map();
|
|
7
|
+
let callbackCount = 0;
|
|
8
|
+
function observe(observerId, callbacks, fn) {
|
|
9
|
+
const callbackId = ++callbackCount;
|
|
10
|
+
const getListeners = () => exports.listenersCache.get(observerId) || [];
|
|
11
|
+
const unsubscribe = () => {
|
|
12
|
+
const listeners = getListeners();
|
|
13
|
+
exports.listenersCache.set(observerId, listeners.filter((cb) => cb.id !== callbackId));
|
|
14
|
+
};
|
|
15
|
+
const unwatch = () => {
|
|
16
|
+
const cleanup = exports.cleanupCache.get(observerId);
|
|
17
|
+
if (getListeners().length === 1 && cleanup)
|
|
18
|
+
cleanup();
|
|
19
|
+
unsubscribe();
|
|
20
|
+
};
|
|
21
|
+
const listeners = getListeners();
|
|
22
|
+
exports.listenersCache.set(observerId, [
|
|
23
|
+
...listeners,
|
|
24
|
+
{ id: callbackId, fns: callbacks }
|
|
25
|
+
]);
|
|
26
|
+
if (listeners && listeners.length > 0)
|
|
27
|
+
return unwatch;
|
|
28
|
+
const emit = {};
|
|
29
|
+
for (const key in callbacks) {
|
|
30
|
+
emit[key] = ((...args) => {
|
|
31
|
+
const listeners = getListeners();
|
|
32
|
+
if (listeners.length === 0)
|
|
33
|
+
return;
|
|
34
|
+
for (const listener of listeners)
|
|
35
|
+
listener.fns[key]?.(...args);
|
|
36
|
+
});
|
|
37
|
+
}
|
|
38
|
+
const cleanup = fn(emit);
|
|
39
|
+
if (typeof cleanup === "function")
|
|
40
|
+
exports.cleanupCache.set(observerId, cleanup);
|
|
41
|
+
return unwatch;
|
|
42
|
+
}
|
|
43
|
+
//# sourceMappingURL=observe.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"observe.js","sourceRoot":"","sources":["../../utils/observe.ts"],"names":[],"mappings":";;;AA6BA,0BA8CC;AAjEY,QAAA,cAAc,GAAiB,IAAI,GAAG,EAGhD,CAAA;AAEU,QAAA,YAAY,GAAiB,IAAI,GAAG,EAAsB,CAAA;AAOvE,IAAI,aAAa,GAAG,CAAC,CAAA;AAOrB,SAAgB,OAAO,CACnB,UAAkB,EAClB,SAAoB,EACpB,EAA2B;IAE3B,MAAM,UAAU,GAAG,EAAE,aAAa,CAAA;IAElC,MAAM,YAAY,GAAG,GAAG,EAAE,CAAC,sBAAc,CAAC,GAAG,CAAC,UAAU,CAAC,IAAI,EAAE,CAAA;IAE/D,MAAM,WAAW,GAAG,GAAG,EAAE;QACrB,MAAM,SAAS,GAAG,YAAY,EAAE,CAAA;QAChC,sBAAc,CAAC,GAAG,CACd,UAAU,EACV,SAAS,CAAC,MAAM,CAAC,CAAC,EAAO,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,KAAK,UAAU,CAAC,CACtD,CAAA;IACL,CAAC,CAAA;IAED,MAAM,OAAO,GAAG,GAAG,EAAE;QACjB,MAAM,OAAO,GAAG,oBAAY,CAAC,GAAG,CAAC,UAAU,CAAC,CAAA;QAC5C,IAAI,YAAY,EAAE,CAAC,MAAM,KAAK,CAAC,IAAI,OAAO;YAAE,OAAO,EAAE,CAAA;QACrD,WAAW,EAAE,CAAA;IACjB,CAAC,CAAA;IAED,MAAM,SAAS,GAAG,YAAY,EAAE,CAAA;IAChC,sBAAc,CAAC,GAAG,CAAC,UAAU,EAAE;QAC3B,GAAG,SAAS;QACZ,EAAE,EAAE,EAAE,UAAU,EAAE,GAAG,EAAE,SAAS,EAAE;KACrC,CAAC,CAAA;IAEF,IAAI,SAAS,IAAI,SAAS,CAAC,MAAM,GAAG,CAAC;QAAE,OAAO,OAAO,CAAA;IAErD,MAAM,IAAI,GAAc,EAAe,CAAA;IACvC,KAAK,MAAM,GAAG,IAAI,SAAS,EAAE,CAAC;QAC1B,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CACT,GAAG,IAAyD,EAC9D,EAAE;YACA,MAAM,SAAS,GAAG,YAAY,EAAE,CAAA;YAChC,IAAI,SAAS,CAAC,MAAM,KAAK,CAAC;gBAAE,OAAM;YAClC,KAAK,MAAM,QAAQ,IAAI,SAAS;gBAAE,QAAQ,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,CAAA;QAClE,CAAC,CAAgD,CAAA;IACrD,CAAC;IAED,MAAM,OAAO,GAAG,EAAE,CAAC,IAAI,CAAC,CAAA;IACxB,IAAI,OAAO,OAAO,KAAK,UAAU;QAAE,oBAAY,CAAC,GAAG,CAAC,UAAU,EAAE,OAAO,CAAC,CAAA;IAExE,OAAO,OAAO,CAAA;AAClB,CAAC"}
|
package/_esm/context.js
ADDED
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { createContext, createElement } from "react";
|
|
2
|
+
export const PermissionlessContext = createContext({
|
|
3
|
+
capabilities: {}
|
|
4
|
+
});
|
|
5
|
+
export const PermissionlessProvider = (parameters) => {
|
|
6
|
+
const { capabilities, children } = parameters;
|
|
7
|
+
const props = { value: { capabilities } };
|
|
8
|
+
return createElement(PermissionlessContext.Provider, props, children);
|
|
9
|
+
};
|
|
10
|
+
//# sourceMappingURL=context.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"context.js","sourceRoot":"","sources":["../context.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,OAAO,CAAA;AAGpD,MAAM,CAAC,MAAM,qBAAqB,GAAG,aAAa,CAE/C;IACC,YAAY,EAAE,EAAE;CACnB,CAAC,CAAA;AAMF,MAAM,CAAC,MAAM,sBAAsB,GAAG,CAClC,UAAgE,EAClE,EAAE;IACA,MAAM,EAAE,YAAY,EAAE,QAAQ,EAAE,GAAG,UAAU,CAAA;IAE7C,MAAM,KAAK,GAAG,EAAE,KAAK,EAAE,EAAE,YAAY,EAAE,EAAE,CAAA;IAEzC,OAAO,aAAa,CAAC,qBAAqB,CAAC,QAAQ,EAAE,KAAK,EAAE,QAAQ,CAAC,CAAA;AACzE,CAAC,CAAA"}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import { useContext, useMemo } from "react";
|
|
3
|
+
import { useAccount } from "wagmi";
|
|
4
|
+
import { useCapabilities } from "wagmi/experimental";
|
|
5
|
+
import { PermissionlessContext } from "../context.js";
|
|
6
|
+
export const useAvailableCapabilities = () => {
|
|
7
|
+
const { capabilities: capabilitiesConfigured } = useContext(PermissionlessContext);
|
|
8
|
+
const account = useAccount();
|
|
9
|
+
const { data: availableCapabilities } = useCapabilities({
|
|
10
|
+
account: account.address
|
|
11
|
+
});
|
|
12
|
+
const memoisedCapabilities = useMemo(() => {
|
|
13
|
+
if (!availableCapabilities || !account.chainId)
|
|
14
|
+
return undefined;
|
|
15
|
+
const capabilitiesForChain = availableCapabilities[account.chainId];
|
|
16
|
+
if (capabilitiesConfigured === undefined)
|
|
17
|
+
return undefined;
|
|
18
|
+
let capabilities = undefined;
|
|
19
|
+
for (const capabilityConfigured in capabilitiesConfigured) {
|
|
20
|
+
if (capabilitiesForChain[capabilityConfigured]?.supported) {
|
|
21
|
+
if (!capabilities) {
|
|
22
|
+
capabilities = {};
|
|
23
|
+
}
|
|
24
|
+
capabilities[capabilityConfigured] = {
|
|
25
|
+
...capabilitiesConfigured[capabilityConfigured]
|
|
26
|
+
};
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
return capabilities;
|
|
30
|
+
}, [availableCapabilities, account.chainId, capabilitiesConfigured]);
|
|
31
|
+
return { capabilities: memoisedCapabilities };
|
|
32
|
+
};
|
|
33
|
+
//# sourceMappingURL=useAvailableCapabilities.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useAvailableCapabilities.js","sourceRoot":"","sources":["../../hooks/useAvailableCapabilities.ts"],"names":[],"mappings":"AAAA,YAAY,CAAA;AAEZ,OAAO,EAAE,UAAU,EAAE,OAAO,EAAE,MAAM,OAAO,CAAA;AAE3C,OAAO,EAAE,UAAU,EAAE,MAAM,OAAO,CAAA;AAClC,OAAO,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAA;AACpD,OAAO,EAAE,qBAAqB,EAAE,MAAM,YAAY,CAAA;AAElD,MAAM,CAAC,MAAM,wBAAwB,GAAG,GAAG,EAAE;IACzC,MAAM,EAAE,YAAY,EAAE,sBAAsB,EAAE,GAAG,UAAU,CACvD,qBAAqB,CACxB,CAAA;IAED,MAAM,OAAO,GAAG,UAAU,EAAE,CAAA;IAE5B,MAAM,EAAE,IAAI,EAAE,qBAAqB,EAAE,GAAG,eAAe,CAAC;QACpD,OAAO,EAAE,OAAO,CAAC,OAAO;KAC3B,CAAC,CAAA;IAEF,MAAM,oBAAoB,GAAG,OAAO,CAAC,GAAG,EAAE;QACtC,IAAI,CAAC,qBAAqB,IAAI,CAAC,OAAO,CAAC,OAAO;YAAE,OAAO,SAAS,CAAA;QAChE,MAAM,oBAAoB,GAAG,qBAAqB,CAAC,OAAO,CAAC,OAAO,CAAC,CAAA;QACnE,IAAI,sBAAsB,KAAK,SAAS;YAAE,OAAO,SAAS,CAAA;QAE1D,IAAI,YAAY,GACZ,SAAS,CAAA;QAEb,KAAK,MAAM,oBAAoB,IAAI,sBAAsB,EAAE,CAAC;YACxD,IAAI,oBAAoB,CAAC,oBAAoB,CAAC,EAAE,SAAS,EAAE,CAAC;gBACxD,IAAI,CAAC,YAAY,EAAE,CAAC;oBAChB,YAAY,GAAG,EAAE,CAAA;gBACrB,CAAC;gBACD,YAAY,CAAC,oBAAoB,CAAC,GAAG;oBACjC,GAAG,sBAAsB,CAAC,oBAAoB,CAAC;iBAClD,CAAA;YACL,CAAC;QACL,CAAC;QAED,OAAO,YAAY,CAAA;IACvB,CAAC,EAAE,CAAC,qBAAqB,EAAE,OAAO,CAAC,OAAO,EAAE,sBAAsB,CAAC,CAAC,CAAA;IAEpE,OAAO,EAAE,YAAY,EAAE,oBAAoB,EAAE,CAAA;AACjD,CAAC,CAAA"}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
import { useMutation } from "@tanstack/react-query";
|
|
2
|
+
import { sendTransaction } from "@wagmi/core";
|
|
3
|
+
import { sendCalls } from "@wagmi/core/experimental";
|
|
4
|
+
import { useConfig } from "wagmi";
|
|
5
|
+
import { useAvailableCapabilities } from "./useAvailableCapabilities.js";
|
|
6
|
+
const sendTransactionMutationOptions = (config, parameters = {}) => {
|
|
7
|
+
return {
|
|
8
|
+
mutationFn(variables) {
|
|
9
|
+
if (parameters.capabilities) {
|
|
10
|
+
return sendCalls(config, {
|
|
11
|
+
calls: [variables],
|
|
12
|
+
capabilities: parameters.capabilities
|
|
13
|
+
});
|
|
14
|
+
}
|
|
15
|
+
return sendTransaction(config, variables);
|
|
16
|
+
},
|
|
17
|
+
mutationKey: ["sendTransaction"]
|
|
18
|
+
};
|
|
19
|
+
};
|
|
20
|
+
export const useSendTransaction = (parameters = {}) => {
|
|
21
|
+
const { mutation } = parameters;
|
|
22
|
+
const { capabilities } = useAvailableCapabilities();
|
|
23
|
+
const config = useConfig(parameters);
|
|
24
|
+
const mutationOptions = sendTransactionMutationOptions(config, {
|
|
25
|
+
...parameters,
|
|
26
|
+
capabilities
|
|
27
|
+
});
|
|
28
|
+
const { mutate, mutateAsync, ...result } = useMutation({
|
|
29
|
+
...mutation,
|
|
30
|
+
...mutationOptions
|
|
31
|
+
});
|
|
32
|
+
return {
|
|
33
|
+
...result,
|
|
34
|
+
sendTransaction: mutate,
|
|
35
|
+
sendTransactionAsync: mutateAsync
|
|
36
|
+
};
|
|
37
|
+
};
|
|
38
|
+
//# sourceMappingURL=useSendTransaction.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useSendTransaction.js","sourceRoot":"","sources":["../../hooks/useSendTransaction.ts"],"names":[],"mappings":"AAAA,OAAO,EAGH,WAAW,EACd,MAAM,uBAAuB,CAAA;AAC9B,OAAO,EAAE,eAAe,EAAE,MAAM,aAAa,CAAA;AAC7C,OAAO,EAAE,SAAS,EAAE,MAAM,0BAA0B,CAAA;AAQpD,OAAO,EAAsC,SAAS,EAAE,MAAM,OAAO,CAAA;AAMrE,OAAO,EAAE,wBAAwB,EAAE,MAAM,4BAA4B,CAAA;AAErE,MAAM,8BAA8B,GAAG,CACnC,MAAc,EACd,aAEI,EAAE,EACR,EAAE;IACA,OAAO;QACH,UAAU,CAAC,SAAS;YAChB,IAAI,UAAU,CAAC,YAAY,EAAE,CAAC;gBAC1B,OAAO,SAAS,CAAC,MAAM,EAAE;oBACrB,KAAK,EAAE,CAAC,SAAS,CAAC;oBAClB,YAAY,EAAE,UAAU,CAAC,YAAY;iBACxC,CAAC,CAAA;YACN,CAAC;YAED,OAAO,eAAe,CAAC,MAAM,EAAE,SAAS,CAAoB,CAAA;QAChE,CAAC;QACD,WAAW,EAAE,CAAC,iBAAiB,CAAC;KAKnC,CAAA;AACL,CAAC,CAAA;AA2ED,MAAM,CAAC,MAAM,kBAAkB,GAAG,CAI9B,aAA4D,EAAE,EACjB,EAAE;IAC/C,MAAM,EAAE,QAAQ,EAAE,GAAG,UAAU,CAAA;IAC/B,MAAM,EAAE,YAAY,EAAE,GAAG,wBAAwB,EAAE,CAAA;IAEnD,MAAM,MAAM,GAAG,SAAS,CAAC,UAAU,CAAC,CAAA;IAEpC,MAAM,eAAe,GAAG,8BAA8B,CAAC,MAAM,EAAE;QAC3D,GAAG,UAAU;QACb,YAAY;KACf,CAAC,CAAA;IAEF,MAAM,EAAE,MAAM,EAAE,WAAW,EAAE,GAAG,MAAM,EAAE,GAAG,WAAW,CAAC;QACnD,GAAG,QAAQ;QACX,GAAG,eAAe;KACrB,CAAC,CAAA;IAGF,OAAO;QACH,GAAG,MAAM;QACT,eAAe,EAAE,MAAmC;QACpD,oBAAoB,EAAE,WAA6C;KACtE,CAAA;AACL,CAAC,CAAA"}
|