@pepu-chain/sdk 0.0.0-stage → 0.2.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.
Files changed (244) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +590 -2
  3. package/dist/aa/kernel.cjs +41 -0
  4. package/dist/aa/kernel.cjs.map +1 -0
  5. package/dist/aa/kernel.d.cts +88 -0
  6. package/dist/aa/kernel.d.ts +88 -0
  7. package/dist/aa/kernel.guard.js +15 -0
  8. package/dist/aa/kernel.js +11 -0
  9. package/dist/aa/kernel.js.map +1 -0
  10. package/dist/aa/react-direct.cjs +111 -0
  11. package/dist/aa/react-direct.cjs.map +1 -0
  12. package/dist/aa/react-direct.d.cts +42 -0
  13. package/dist/aa/react-direct.d.ts +42 -0
  14. package/dist/aa/react-direct.guard.js +15 -0
  15. package/dist/aa/react-direct.js +107 -0
  16. package/dist/aa/react-direct.js.map +1 -0
  17. package/dist/aa/react.cjs +152 -0
  18. package/dist/aa/react.cjs.map +1 -0
  19. package/dist/aa/react.d.cts +62 -0
  20. package/dist/aa/react.d.ts +62 -0
  21. package/dist/aa/react.guard.js +15 -0
  22. package/dist/aa/react.js +147 -0
  23. package/dist/aa/react.js.map +1 -0
  24. package/dist/aa.cjs +84 -0
  25. package/dist/aa.cjs.map +1 -0
  26. package/dist/aa.d.cts +85 -0
  27. package/dist/aa.d.ts +85 -0
  28. package/dist/aa.js +11 -0
  29. package/dist/aa.js.map +1 -0
  30. package/dist/api-Dz4sCHH_.d.cts +654 -0
  31. package/dist/api-Dz4sCHH_.d.ts +654 -0
  32. package/dist/calls-BRPjKgjl.d.cts +70 -0
  33. package/dist/calls-z_EQOtFb.d.ts +70 -0
  34. package/dist/chains-DK13zGIp.d.cts +235 -0
  35. package/dist/chains-DK13zGIp.d.ts +235 -0
  36. package/dist/chunk-3XUGQODR.js +194 -0
  37. package/dist/chunk-3XUGQODR.js.map +1 -0
  38. package/dist/chunk-45KSZH26.cjs +145 -0
  39. package/dist/chunk-45KSZH26.cjs.map +1 -0
  40. package/dist/chunk-4GINFJO6.cjs +44 -0
  41. package/dist/chunk-4GINFJO6.cjs.map +1 -0
  42. package/dist/chunk-62M2LKQW.js +136 -0
  43. package/dist/chunk-62M2LKQW.js.map +1 -0
  44. package/dist/chunk-6DSZ4Z2N.js +498 -0
  45. package/dist/chunk-6DSZ4Z2N.js.map +1 -0
  46. package/dist/chunk-7MNJF2OB.cjs +72 -0
  47. package/dist/chunk-7MNJF2OB.cjs.map +1 -0
  48. package/dist/chunk-7PVR7QSE.js +45 -0
  49. package/dist/chunk-7PVR7QSE.js.map +1 -0
  50. package/dist/chunk-A5LP2UCS.cjs +2729 -0
  51. package/dist/chunk-A5LP2UCS.cjs.map +1 -0
  52. package/dist/chunk-AJS4UFQX.cjs +121 -0
  53. package/dist/chunk-AJS4UFQX.cjs.map +1 -0
  54. package/dist/chunk-BGALSKAF.cjs +315 -0
  55. package/dist/chunk-BGALSKAF.cjs.map +1 -0
  56. package/dist/chunk-C2XW44FI.cjs +200 -0
  57. package/dist/chunk-C2XW44FI.cjs.map +1 -0
  58. package/dist/chunk-C7IC36XS.cjs +13 -0
  59. package/dist/chunk-C7IC36XS.cjs.map +1 -0
  60. package/dist/chunk-D52PADVY.js +84 -0
  61. package/dist/chunk-D52PADVY.js.map +1 -0
  62. package/dist/chunk-DH6BFNVJ.cjs +272 -0
  63. package/dist/chunk-DH6BFNVJ.cjs.map +1 -0
  64. package/dist/chunk-DPCZJLB3.cjs +87 -0
  65. package/dist/chunk-DPCZJLB3.cjs.map +1 -0
  66. package/dist/chunk-EHBPIYY4.js +262 -0
  67. package/dist/chunk-EHBPIYY4.js.map +1 -0
  68. package/dist/chunk-ESMNAXUI.js +86 -0
  69. package/dist/chunk-ESMNAXUI.js.map +1 -0
  70. package/dist/chunk-F2R473FR.js +304 -0
  71. package/dist/chunk-F2R473FR.js.map +1 -0
  72. package/dist/chunk-IB2FSPMJ.js +66 -0
  73. package/dist/chunk-IB2FSPMJ.js.map +1 -0
  74. package/dist/chunk-IG7RSL2Y.cjs +178 -0
  75. package/dist/chunk-IG7RSL2Y.cjs.map +1 -0
  76. package/dist/chunk-IY3ALPUJ.js +2716 -0
  77. package/dist/chunk-IY3ALPUJ.js.map +1 -0
  78. package/dist/chunk-J3O2ZGG3.cjs +93 -0
  79. package/dist/chunk-J3O2ZGG3.cjs.map +1 -0
  80. package/dist/chunk-J6UXXHBE.js +37 -0
  81. package/dist/chunk-J6UXXHBE.js.map +1 -0
  82. package/dist/chunk-JLZ4LZ4Z.js +22 -0
  83. package/dist/chunk-JLZ4LZ4Z.js.map +1 -0
  84. package/dist/chunk-K7JSQPZO.cjs +231 -0
  85. package/dist/chunk-K7JSQPZO.cjs.map +1 -0
  86. package/dist/chunk-KJYNF5KH.js +224 -0
  87. package/dist/chunk-KJYNF5KH.js.map +1 -0
  88. package/dist/chunk-KVG3AYYR.js +99 -0
  89. package/dist/chunk-KVG3AYYR.js.map +1 -0
  90. package/dist/chunk-NE3QKDOB.cjs +24 -0
  91. package/dist/chunk-NE3QKDOB.cjs.map +1 -0
  92. package/dist/chunk-NVOPDXTA.cjs +95 -0
  93. package/dist/chunk-NVOPDXTA.cjs.map +1 -0
  94. package/dist/chunk-OH3QMAIB.js +11 -0
  95. package/dist/chunk-OH3QMAIB.js.map +1 -0
  96. package/dist/chunk-PHM3ZORG.cjs +110 -0
  97. package/dist/chunk-PHM3ZORG.cjs.map +1 -0
  98. package/dist/chunk-R5PXQNO3.cjs +209 -0
  99. package/dist/chunk-R5PXQNO3.cjs.map +1 -0
  100. package/dist/chunk-RCMKPJZO.cjs +49 -0
  101. package/dist/chunk-RCMKPJZO.cjs.map +1 -0
  102. package/dist/chunk-SVWRRALU.cjs +17 -0
  103. package/dist/chunk-SVWRRALU.cjs.map +1 -0
  104. package/dist/chunk-T43PQXJD.js +202 -0
  105. package/dist/chunk-T43PQXJD.js.map +1 -0
  106. package/dist/chunk-VBH3JLQ5.js +116 -0
  107. package/dist/chunk-VBH3JLQ5.js.map +1 -0
  108. package/dist/chunk-VF3D6KLQ.cjs +94 -0
  109. package/dist/chunk-VF3D6KLQ.cjs.map +1 -0
  110. package/dist/chunk-VTQIHMF3.js +82 -0
  111. package/dist/chunk-VTQIHMF3.js.map +1 -0
  112. package/dist/chunk-W3JN3YIW.js +15 -0
  113. package/dist/chunk-W3JN3YIW.js.map +1 -0
  114. package/dist/chunk-WANILJZQ.cjs +87 -0
  115. package/dist/chunk-WANILJZQ.cjs.map +1 -0
  116. package/dist/chunk-XC4IBCI2.js +86 -0
  117. package/dist/chunk-XC4IBCI2.js.map +1 -0
  118. package/dist/chunk-YKEWWQEJ.js +165 -0
  119. package/dist/chunk-YKEWWQEJ.js.map +1 -0
  120. package/dist/chunk-YQL7NISX.cjs +515 -0
  121. package/dist/chunk-YQL7NISX.cjs.map +1 -0
  122. package/dist/chunk-ZB6SVBK4.js +89 -0
  123. package/dist/chunk-ZB6SVBK4.js.map +1 -0
  124. package/dist/combo/react.cjs +236 -0
  125. package/dist/combo/react.cjs.map +1 -0
  126. package/dist/combo/react.d.cts +148 -0
  127. package/dist/combo/react.d.ts +148 -0
  128. package/dist/combo/react.guard.js +15 -0
  129. package/dist/combo/react.js +230 -0
  130. package/dist/combo/react.js.map +1 -0
  131. package/dist/combo.cjs +263 -0
  132. package/dist/combo.cjs.map +1 -0
  133. package/dist/combo.d.cts +139 -0
  134. package/dist/combo.d.ts +139 -0
  135. package/dist/combo.guard.js +15 -0
  136. package/dist/combo.js +249 -0
  137. package/dist/combo.js.map +1 -0
  138. package/dist/config-CHjz7ZjZ.d.cts +57 -0
  139. package/dist/config-COjhIZTh.d.ts +57 -0
  140. package/dist/doctor.cjs +354 -0
  141. package/dist/doctor.cjs.map +1 -0
  142. package/dist/doctor.d.cts +177 -0
  143. package/dist/doctor.d.ts +177 -0
  144. package/dist/doctor.js +345 -0
  145. package/dist/doctor.js.map +1 -0
  146. package/dist/erc7677-DOW58QBE.d.cts +111 -0
  147. package/dist/erc7677-DOW58QBE.d.ts +111 -0
  148. package/dist/errors-CgX1vNj7.d.cts +100 -0
  149. package/dist/errors-CgX1vNj7.d.ts +100 -0
  150. package/dist/index.cjs +806 -0
  151. package/dist/index.cjs.map +1 -0
  152. package/dist/index.d.cts +2398 -0
  153. package/dist/index.d.ts +2398 -0
  154. package/dist/index.js +559 -0
  155. package/dist/index.js.map +1 -0
  156. package/dist/paymaster/server.cjs +38 -0
  157. package/dist/paymaster/server.cjs.map +1 -0
  158. package/dist/paymaster/server.d.cts +57 -0
  159. package/dist/paymaster/server.d.ts +57 -0
  160. package/dist/paymaster/server.js +36 -0
  161. package/dist/paymaster/server.js.map +1 -0
  162. package/dist/paymaster.cjs +356 -0
  163. package/dist/paymaster.cjs.map +1 -0
  164. package/dist/paymaster.d.cts +1851 -0
  165. package/dist/paymaster.d.ts +1851 -0
  166. package/dist/paymaster.js +289 -0
  167. package/dist/paymaster.js.map +1 -0
  168. package/dist/privy/react.cjs +49 -0
  169. package/dist/privy/react.cjs.map +1 -0
  170. package/dist/privy/react.d.cts +194 -0
  171. package/dist/privy/react.d.ts +194 -0
  172. package/dist/privy/react.guard.js +15 -0
  173. package/dist/privy/react.js +7 -0
  174. package/dist/privy/react.js.map +1 -0
  175. package/dist/privy/server.cjs +44 -0
  176. package/dist/privy/server.cjs.map +1 -0
  177. package/dist/privy/server.d.cts +192 -0
  178. package/dist/privy/server.d.ts +192 -0
  179. package/dist/privy/server.guard.js +15 -0
  180. package/dist/privy/server.js +6 -0
  181. package/dist/privy/server.js.map +1 -0
  182. package/dist/privy/wagmi.d.ts +90 -0
  183. package/dist/privy/wagmi.guard.js +15 -0
  184. package/dist/privy/wagmi.js +55 -0
  185. package/dist/privy/wagmi.js.map +1 -0
  186. package/dist/privy.cjs +34 -0
  187. package/dist/privy.cjs.map +1 -0
  188. package/dist/privy.d.cts +4 -0
  189. package/dist/privy.d.ts +4 -0
  190. package/dist/privy.js +5 -0
  191. package/dist/privy.js.map +1 -0
  192. package/dist/react.cjs +73 -0
  193. package/dist/react.cjs.map +1 -0
  194. package/dist/react.d.cts +66 -0
  195. package/dist/react.d.ts +66 -0
  196. package/dist/react.guard.js +15 -0
  197. package/dist/react.js +68 -0
  198. package/dist/react.js.map +1 -0
  199. package/dist/requirements-C-QiJkL9.d.cts +134 -0
  200. package/dist/requirements-C-QiJkL9.d.ts +134 -0
  201. package/dist/scope-DBRkN7bR.d.cts +94 -0
  202. package/dist/scope-DBRkN7bR.d.ts +94 -0
  203. package/dist/server.cjs +59 -0
  204. package/dist/server.cjs.map +1 -0
  205. package/dist/server.d.cts +208 -0
  206. package/dist/server.d.ts +208 -0
  207. package/dist/server.js +8 -0
  208. package/dist/server.js.map +1 -0
  209. package/dist/session/kernel.cjs +83 -0
  210. package/dist/session/kernel.cjs.map +1 -0
  211. package/dist/session/kernel.d.cts +131 -0
  212. package/dist/session/kernel.d.ts +131 -0
  213. package/dist/session/kernel.guard.js +15 -0
  214. package/dist/session/kernel.js +13 -0
  215. package/dist/session/kernel.js.map +1 -0
  216. package/dist/session/react.cjs +38 -0
  217. package/dist/session/react.cjs.map +1 -0
  218. package/dist/session/react.d.cts +119 -0
  219. package/dist/session/react.d.ts +119 -0
  220. package/dist/session/react.guard.js +15 -0
  221. package/dist/session/react.js +8 -0
  222. package/dist/session/react.js.map +1 -0
  223. package/dist/session/server.cjs +268 -0
  224. package/dist/session/server.cjs.map +1 -0
  225. package/dist/session/server.d.cts +151 -0
  226. package/dist/session/server.d.ts +151 -0
  227. package/dist/session/server.guard.js +15 -0
  228. package/dist/session/server.js +252 -0
  229. package/dist/session/server.js.map +1 -0
  230. package/dist/session.cjs +74 -0
  231. package/dist/session.cjs.map +1 -0
  232. package/dist/session.d.cts +3 -0
  233. package/dist/session.d.ts +3 -0
  234. package/dist/session.js +5 -0
  235. package/dist/session.js.map +1 -0
  236. package/dist/status-Dx9zAFo9.d.ts +327 -0
  237. package/dist/status-wgTM26V7.d.cts +327 -0
  238. package/dist/store-CjmLgp9g.d.cts +64 -0
  239. package/dist/store-CjmLgp9g.d.ts +64 -0
  240. package/dist/types-BEEM7WdG.d.cts +25 -0
  241. package/dist/types-BEEM7WdG.d.ts +25 -0
  242. package/dist/types-BilBTDqK.d.cts +27 -0
  243. package/dist/types-BilBTDqK.d.ts +27 -0
  244. package/package.json +245 -3
@@ -0,0 +1,152 @@
1
+ 'use strict';
2
+ /* @pepu-chain/peer-guard */(function(){var p=["react","@privy-io/react-auth","permissionless"];for(var i=0;i<p.length;i++){try{require.resolve(p[i])}catch(e){if(e&&e.code==="MODULE_NOT_FOUND"){var m="@pepu-chain/sdk/aa/react needs peer packages that are not installed: react @privy-io/react-auth permissionless. Install with: npm i react @privy-io/react-auth permissionless (or let create-pepu-app scaffold everything).";var x=new Error(m);x.code="PEPU_MISSING_PEER";throw x}}}})();
3
+
4
+ var chunkAJS4UFQX_cjs = require('../chunk-AJS4UFQX.cjs');
5
+ var chunkBGALSKAF_cjs = require('../chunk-BGALSKAF.cjs');
6
+ var chunkWANILJZQ_cjs = require('../chunk-WANILJZQ.cjs');
7
+ require('../chunk-K7JSQPZO.cjs');
8
+ var chunkC7IC36XS_cjs = require('../chunk-C7IC36XS.cjs');
9
+ var chunk4GINFJO6_cjs = require('../chunk-4GINFJO6.cjs');
10
+ require('../chunk-VF3D6KLQ.cjs');
11
+ var chunkDPCZJLB3_cjs = require('../chunk-DPCZJLB3.cjs');
12
+ var chunkYQL7NISX_cjs = require('../chunk-YQL7NISX.cjs');
13
+ var reactAuth = require('@privy-io/react-auth');
14
+ var smartWallets = require('@privy-io/react-auth/smart-wallets');
15
+ var react = require('react');
16
+
17
+ var sharedClient;
18
+ function publicClient() {
19
+ sharedClient ??= chunkC7IC36XS_cjs.getPublicClient(chunkDPCZJLB3_cjs.pepuMainnet);
20
+ return sharedClient;
21
+ }
22
+ function useEmbeddedWallet() {
23
+ const { wallets } = reactAuth.useWallets();
24
+ return wallets.find((w) => w.walletClientType === "privy");
25
+ }
26
+ function usePepuSmartAccount() {
27
+ const embedded = useEmbeddedWallet();
28
+ const { client, getClientForChain } = smartWallets.useSmartWallets();
29
+ const getClientRef = react.useRef(getClientForChain);
30
+ getClientRef.current = getClientForChain;
31
+ const owner = embedded?.address;
32
+ const fromProvider = client?.account?.address;
33
+ const [resolved, setResolved] = react.useState();
34
+ react.useEffect(() => {
35
+ if (!owner || fromProvider) return;
36
+ let cancelled = false;
37
+ Promise.resolve(getClientRef.current?.({ id: chunkDPCZJLB3_cjs.pepuMainnet.id })).then((c) => {
38
+ const address = c?.account?.address;
39
+ if (!cancelled && address) setResolved({ owner, address });
40
+ }).catch(() => {
41
+ });
42
+ return () => {
43
+ cancelled = true;
44
+ };
45
+ }, [owner, fromProvider]);
46
+ const smartAccount = fromProvider ?? (resolved && resolved.owner === owner ? resolved.address : void 0);
47
+ return {
48
+ ...owner ? { owner } : {},
49
+ ...smartAccount ? { smartAccount } : {},
50
+ ready: owner !== void 0 && smartAccount !== void 0
51
+ };
52
+ }
53
+ function useSponsoredSend(_options = {}) {
54
+ const { client, getClientForChain } = smartWallets.useSmartWallets();
55
+ const [status, setStatus] = react.useState("idle");
56
+ const [result, setResult] = react.useState();
57
+ const [error, setError] = react.useState();
58
+ const inFlight = react.useRef(false);
59
+ const send = react.useCallback(
60
+ async (calls) => {
61
+ if (inFlight.current) {
62
+ throw new chunkYQL7NISX_cjs.PepuConfigError("UNKNOWN", "A sponsored send is already in progress.", {
63
+ hint: "Wait for the current send to finish."
64
+ });
65
+ }
66
+ inFlight.current = true;
67
+ setStatus("signing");
68
+ setError(void 0);
69
+ setResult(void 0);
70
+ try {
71
+ const encoded = chunkAJS4UFQX_cjs.normalizeCalls(calls);
72
+ const pc = publicClient();
73
+ const sw = client ?? await getClientForChain({ id: chunkDPCZJLB3_cjs.pepuMainnet.id });
74
+ if (!sw) {
75
+ throw new chunkYQL7NISX_cjs.PepuConfigError(
76
+ "CONFIG_PRIVY_DASHBOARD",
77
+ "No Privy smart-wallet client is available.",
78
+ { hint: 'Enable "Smart Wallets" for chain 97741 in the Privy dashboard and wrap the app in SmartWalletsProvider.' }
79
+ );
80
+ }
81
+ setStatus("submitting");
82
+ const hash = encoded.length === 1 && encoded[0] ? await sw.sendTransaction({ to: encoded[0].to, data: encoded[0].data, value: encoded[0].value }) : await sw.sendTransaction({ calls: encoded });
83
+ const receipt = await pc.waitForTransactionReceipt({ hash });
84
+ const paid = chunkAJS4UFQX_cjs.userOpEventFromReceipt(receipt, sw.account.address);
85
+ const out = {
86
+ userOpHash: paid?.userOpHash ?? null,
87
+ transactionHash: hash,
88
+ success: paid?.success ?? receipt.status === "success",
89
+ paymaster: paid?.paymaster ?? null,
90
+ actualGasCostWei: paid?.actualGasCost ?? 0n,
91
+ explorerUrl: chunk4GINFJO6_cjs.txUrl(chunkDPCZJLB3_cjs.pepuMainnet, hash)
92
+ };
93
+ setResult(out);
94
+ setStatus("confirmed");
95
+ return out;
96
+ } catch (caught) {
97
+ const err = chunkYQL7NISX_cjs.toPepuError(caught) === caught ? caught : chunkWANILJZQ_cjs.describeUserOpFailure(caught);
98
+ setError(err);
99
+ setStatus("error");
100
+ throw err;
101
+ } finally {
102
+ inFlight.current = false;
103
+ }
104
+ },
105
+ [client, getClientForChain]
106
+ );
107
+ return { send, status, ...result ? { result } : {}, ...error ? { error } : {} };
108
+ }
109
+ function usePepuSponsorship(o = {}) {
110
+ const [report, setReport] = react.useState({
111
+ available: false,
112
+ transport: "none",
113
+ bundler: { configured: false },
114
+ paymaster: { configured: false },
115
+ reason: "Checking sponsorship status.",
116
+ fixes: []
117
+ });
118
+ const [loading, setLoading] = react.useState(true);
119
+ const { pollMs = 3e4, bundlerUrl, paymasterUrl } = o;
120
+ react.useEffect(() => {
121
+ let cancelled = false;
122
+ const run = async () => {
123
+ try {
124
+ const r = await chunkBGALSKAF_cjs.checkSponsorship({
125
+ publicClient: publicClient(),
126
+ ...bundlerUrl !== void 0 ? { bundlerUrl } : {},
127
+ ...paymasterUrl !== void 0 ? { paymasterUrl } : {}
128
+ });
129
+ if (!cancelled) setReport(r);
130
+ } catch (e) {
131
+ if (!cancelled) {
132
+ setReport((prev) => ({ ...prev, available: false, reason: chunkYQL7NISX_cjs.toPepuError(e).message, fixes: [chunkYQL7NISX_cjs.toPepuError(e).hint] }));
133
+ }
134
+ } finally {
135
+ if (!cancelled) setLoading(false);
136
+ }
137
+ };
138
+ void run();
139
+ const id = pollMs > 0 ? setInterval(() => void run(), pollMs) : void 0;
140
+ return () => {
141
+ cancelled = true;
142
+ if (id !== void 0) clearInterval(id);
143
+ };
144
+ }, [pollMs, bundlerUrl, paymasterUrl]);
145
+ return { ...report, loading };
146
+ }
147
+
148
+ exports.usePepuSmartAccount = usePepuSmartAccount;
149
+ exports.usePepuSponsorship = usePepuSponsorship;
150
+ exports.useSponsoredSend = useSponsoredSend;
151
+ //# sourceMappingURL=react.cjs.map
152
+ //# sourceMappingURL=react.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/aa/react.ts"],"names":["getPublicClient","pepuMainnet","useWallets","useSmartWallets","useRef","useState","useEffect","useCallback","PepuConfigError","normalizeCalls","userOpEventFromReceipt","txUrl","toPepuError","describeUserOpFailure","checkSponsorship"],"mappings":"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","file":"react.cjs","sourcesContent":["/**\n * @pepu-chain/sdk/aa/react: React hooks for sponsored transactions with Privy\n * Smart Wallets.\n *\n * Needs `react`, `@privy-io/react-auth` and, because Privy's smart-wallets\n * module requires it, `permissionless`. It never references `@zerodev/*`,\n * statically or dynamically, so a bundler resolving it needs no ZeroDev. The\n * transport reads bundler and paymaster URLs from the Privy dashboard. To use\n * your own bundler and paymaster instead, see `@pepu-chain/sdk/aa/react-direct`.\n *\n * Flow ported from `templates/sponsored-demo/components/sponsored-tap-demo.tsx`\n * (smart-wallet client, in-flight guard, real error text via describeUserOpFailure).\n */\nimport { useWallets } from \"@privy-io/react-auth\";\nimport { useSmartWallets } from \"@privy-io/react-auth/smart-wallets\";\nimport { useCallback, useEffect, useRef, useState } from \"react\";\nimport type { Address, PublicClient } from \"viem\";\n\nimport { pepuMainnet } from \"../chains.js\";\nimport { getPublicClient } from \"../client.js\";\nimport { PepuConfigError, toPepuError } from \"../errors.js\";\nimport type { PepuError } from \"../errors.js\";\nimport { txUrl } from \"../explorer.js\";\nimport { normalizeCalls, userOpEventFromReceipt } from \"./calls.js\";\nimport { describeUserOpFailure } from \"./describe.js\";\nimport { checkSponsorship } from \"./status.js\";\nimport type { SponsorshipReport } from \"./status.js\";\nimport type { Call, SponsoredResult } from \"./types.js\";\n\nexport type { Call, SponsoredResult } from \"./types.js\";\n\nlet sharedClient: PublicClient | undefined;\nfunction publicClient(): PublicClient {\n sharedClient ??= getPublicClient(pepuMainnet) as unknown as PublicClient;\n return sharedClient;\n}\n\n/** The Privy embedded wallet, the owner of the smart account. */\nfunction useEmbeddedWallet() {\n const { wallets } = useWallets();\n return wallets.find((w) => w.walletClientType === \"privy\");\n}\n\n/**\n * The two-address model made explicit: `owner` is the Privy embedded wallet\n * (an EOA that signs), `smartAccount` is the Kernel account that sends and\n * holds assets. With Privy Smart Wallets the smart account comes from the\n * provider: `useSmartWallets().client`, or, while that is still unset,\n * `getClientForChain({ id: 97741 })`. For an address derived without Privy\n * Smart Wallets, use `useDirectSmartAccount` from `@pepu-chain/sdk/aa/react-direct`.\n *\n * @example\n * const { owner, smartAccount, ready } = usePepuSmartAccount();\n */\nexport function usePepuSmartAccount(): { owner?: Address; smartAccount?: Address; ready: boolean } {\n const embedded = useEmbeddedWallet();\n const { client, getClientForChain } = useSmartWallets();\n const getClientRef = useRef(getClientForChain);\n getClientRef.current = getClientForChain;\n const owner = embedded?.address as Address | undefined;\n const fromProvider = client?.account?.address as Address | undefined;\n const [resolved, setResolved] = useState<{ owner: Address; address: Address } | undefined>();\n\n useEffect(() => {\n if (!owner || fromProvider) return;\n let cancelled = false;\n // Privy's per-chain client may populate after `client`.\n Promise.resolve(getClientRef.current?.({ id: pepuMainnet.id }))\n .then((c) => {\n const address = c?.account?.address as Address | undefined;\n if (!cancelled && address) setResolved({ owner, address });\n })\n .catch(() => {\n // Smart Wallets not configured for this chain: `ready` stays false.\n });\n return () => {\n cancelled = true;\n };\n }, [owner, fromProvider]);\n\n const smartAccount = fromProvider ?? (resolved && resolved.owner === owner ? resolved.address : undefined);\n return {\n ...(owner ? { owner } : {}),\n ...(smartAccount ? { smartAccount } : {}),\n ready: owner !== undefined && smartAccount !== undefined,\n };\n}\n\n/** Status of a {@link useSponsoredSend} send. */\nexport type SponsoredSendStatus = \"idle\" | \"signing\" | \"submitting\" | \"confirmed\" | \"error\";\n\n/** Options for {@link useSponsoredSend}. */\nexport interface UseSponsoredSendOptions {\n /** The only transport here. Your own bundler and paymaster: `useDirectSponsoredSend` in `@pepu-chain/sdk/aa/react-direct`. */\n transport?: \"privy-smart-wallets\";\n}\n\n/**\n * Send calls with gas sponsored through Privy's smart-wallet client (bundler\n * and paymaster URLs come from the Privy dashboard). One send at a time: a\n * second call while one is in flight is ignored. For your own bundler and\n * paymaster, use `useDirectSponsoredSend` from `@pepu-chain/sdk/aa/react-direct`.\n *\n * @example\n * const { send, status, result, error } = useSponsoredSend({ transport: \"privy-smart-wallets\" });\n * await send([{ to: tapScore, abi: tapScoreAbi, functionName: \"tap\" }]);\n */\nexport function useSponsoredSend(_options: UseSponsoredSendOptions = {}): {\n send: (calls: Call[]) => Promise<SponsoredResult>;\n status: SponsoredSendStatus;\n result?: SponsoredResult;\n error?: PepuError;\n} {\n const { client, getClientForChain } = useSmartWallets();\n const [status, setStatus] = useState<SponsoredSendStatus>(\"idle\");\n const [result, setResult] = useState<SponsoredResult | undefined>();\n const [error, setError] = useState<PepuError | undefined>();\n const inFlight = useRef(false);\n\n const send = useCallback(\n async (calls: Call[]): Promise<SponsoredResult> => {\n if (inFlight.current) {\n throw new PepuConfigError(\"UNKNOWN\", \"A sponsored send is already in progress.\", {\n hint: \"Wait for the current send to finish.\",\n });\n }\n inFlight.current = true;\n setStatus(\"signing\");\n setError(undefined);\n setResult(undefined);\n try {\n const encoded = normalizeCalls(calls);\n const pc = publicClient();\n\n\n const sw = client ?? (await getClientForChain({ id: pepuMainnet.id }));\n if (!sw) {\n throw new PepuConfigError(\n \"CONFIG_PRIVY_DASHBOARD\",\n \"No Privy smart-wallet client is available.\",\n { hint: 'Enable \"Smart Wallets\" for chain 97741 in the Privy dashboard and wrap the app in SmartWalletsProvider.' },\n );\n }\n setStatus(\"submitting\");\n const hash =\n encoded.length === 1 && encoded[0]\n ? await sw.sendTransaction({ to: encoded[0].to, data: encoded[0].data, value: encoded[0].value })\n : await sw.sendTransaction({ calls: encoded });\n const receipt = await pc.waitForTransactionReceipt({ hash });\n const paid = userOpEventFromReceipt(receipt, sw.account.address as Address);\n const out: SponsoredResult = {\n userOpHash: paid?.userOpHash ?? null,\n transactionHash: hash,\n success: paid?.success ?? receipt.status === \"success\",\n paymaster: paid?.paymaster ?? null,\n actualGasCostWei: paid?.actualGasCost ?? 0n,\n explorerUrl: txUrl(pepuMainnet, hash),\n };\n setResult(out);\n setStatus(\"confirmed\");\n return out;\n } catch (caught) {\n const err = toPepuError(caught) === caught ? (caught as PepuError) : describeUserOpFailure(caught);\n setError(err);\n setStatus(\"error\");\n throw err;\n } finally {\n inFlight.current = false;\n }\n },\n [client, getClientForChain],\n );\n\n return { send, status, ...(result ? { result } : {}), ...(error ? { error } : {}) };\n}\n\n/**\n * Live sponsorship status, polled. The live replacement for the deprecated\n * `useSponsorshipStatus` (which always said unavailable).\n *\n * @example\n * const s = usePepuSponsorship({ pollMs: 15000 });\n * if (!s.loading && !s.available) console.log(s.reason, s.fixes);\n */\nexport function usePepuSponsorship(\n o: { pollMs?: number; bundlerUrl?: string; paymasterUrl?: string } = {},\n): SponsorshipReport & { loading: boolean } {\n const [report, setReport] = useState<SponsorshipReport>({\n available: false,\n transport: \"none\",\n bundler: { configured: false },\n paymaster: { configured: false },\n reason: \"Checking sponsorship status.\",\n fixes: [],\n });\n const [loading, setLoading] = useState(true);\n const { pollMs = 30_000, bundlerUrl, paymasterUrl } = o;\n\n useEffect(() => {\n let cancelled = false;\n const run = async (): Promise<void> => {\n try {\n const r = await checkSponsorship({\n publicClient: publicClient(),\n ...(bundlerUrl !== undefined ? { bundlerUrl } : {}),\n ...(paymasterUrl !== undefined ? { paymasterUrl } : {}),\n });\n if (!cancelled) setReport(r);\n } catch (e) {\n if (!cancelled) {\n setReport((prev) => ({ ...prev, available: false, reason: toPepuError(e).message, fixes: [toPepuError(e).hint] }));\n }\n } finally {\n if (!cancelled) setLoading(false);\n }\n };\n void run();\n const id = pollMs > 0 ? setInterval(() => void run(), pollMs) : undefined;\n return () => {\n cancelled = true;\n if (id !== undefined) clearInterval(id);\n };\n }, [pollMs, bundlerUrl, paymasterUrl]);\n\n return { ...report, loading };\n}\n"]}
@@ -0,0 +1,62 @@
1
+ import { Address } from 'viem';
2
+ import { P as PepuError } from '../errors-CgX1vNj7.cjs';
3
+ import { S as SponsorshipReport } from '../status-wgTM26V7.cjs';
4
+ import { C as Call, S as SponsoredResult } from '../types-BilBTDqK.cjs';
5
+ import '../chains-DK13zGIp.cjs';
6
+
7
+ /**
8
+ * The two-address model made explicit: `owner` is the Privy embedded wallet
9
+ * (an EOA that signs), `smartAccount` is the Kernel account that sends and
10
+ * holds assets. With Privy Smart Wallets the smart account comes from the
11
+ * provider: `useSmartWallets().client`, or, while that is still unset,
12
+ * `getClientForChain({ id: 97741 })`. For an address derived without Privy
13
+ * Smart Wallets, use `useDirectSmartAccount` from `@pepu-chain/sdk/aa/react-direct`.
14
+ *
15
+ * @example
16
+ * const { owner, smartAccount, ready } = usePepuSmartAccount();
17
+ */
18
+ declare function usePepuSmartAccount(): {
19
+ owner?: Address;
20
+ smartAccount?: Address;
21
+ ready: boolean;
22
+ };
23
+ /** Status of a {@link useSponsoredSend} send. */
24
+ type SponsoredSendStatus = "idle" | "signing" | "submitting" | "confirmed" | "error";
25
+ /** Options for {@link useSponsoredSend}. */
26
+ interface UseSponsoredSendOptions {
27
+ /** The only transport here. Your own bundler and paymaster: `useDirectSponsoredSend` in `@pepu-chain/sdk/aa/react-direct`. */
28
+ transport?: "privy-smart-wallets";
29
+ }
30
+ /**
31
+ * Send calls with gas sponsored through Privy's smart-wallet client (bundler
32
+ * and paymaster URLs come from the Privy dashboard). One send at a time: a
33
+ * second call while one is in flight is ignored. For your own bundler and
34
+ * paymaster, use `useDirectSponsoredSend` from `@pepu-chain/sdk/aa/react-direct`.
35
+ *
36
+ * @example
37
+ * const { send, status, result, error } = useSponsoredSend({ transport: "privy-smart-wallets" });
38
+ * await send([{ to: tapScore, abi: tapScoreAbi, functionName: "tap" }]);
39
+ */
40
+ declare function useSponsoredSend(_options?: UseSponsoredSendOptions): {
41
+ send: (calls: Call[]) => Promise<SponsoredResult>;
42
+ status: SponsoredSendStatus;
43
+ result?: SponsoredResult;
44
+ error?: PepuError;
45
+ };
46
+ /**
47
+ * Live sponsorship status, polled. The live replacement for the deprecated
48
+ * `useSponsorshipStatus` (which always said unavailable).
49
+ *
50
+ * @example
51
+ * const s = usePepuSponsorship({ pollMs: 15000 });
52
+ * if (!s.loading && !s.available) console.log(s.reason, s.fixes);
53
+ */
54
+ declare function usePepuSponsorship(o?: {
55
+ pollMs?: number;
56
+ bundlerUrl?: string;
57
+ paymasterUrl?: string;
58
+ }): SponsorshipReport & {
59
+ loading: boolean;
60
+ };
61
+
62
+ export { Call, SponsoredResult, type SponsoredSendStatus, type UseSponsoredSendOptions, usePepuSmartAccount, usePepuSponsorship, useSponsoredSend };
@@ -0,0 +1,62 @@
1
+ import { Address } from 'viem';
2
+ import { P as PepuError } from '../errors-CgX1vNj7.js';
3
+ import { S as SponsorshipReport } from '../status-Dx9zAFo9.js';
4
+ import { C as Call, S as SponsoredResult } from '../types-BilBTDqK.js';
5
+ import '../chains-DK13zGIp.js';
6
+
7
+ /**
8
+ * The two-address model made explicit: `owner` is the Privy embedded wallet
9
+ * (an EOA that signs), `smartAccount` is the Kernel account that sends and
10
+ * holds assets. With Privy Smart Wallets the smart account comes from the
11
+ * provider: `useSmartWallets().client`, or, while that is still unset,
12
+ * `getClientForChain({ id: 97741 })`. For an address derived without Privy
13
+ * Smart Wallets, use `useDirectSmartAccount` from `@pepu-chain/sdk/aa/react-direct`.
14
+ *
15
+ * @example
16
+ * const { owner, smartAccount, ready } = usePepuSmartAccount();
17
+ */
18
+ declare function usePepuSmartAccount(): {
19
+ owner?: Address;
20
+ smartAccount?: Address;
21
+ ready: boolean;
22
+ };
23
+ /** Status of a {@link useSponsoredSend} send. */
24
+ type SponsoredSendStatus = "idle" | "signing" | "submitting" | "confirmed" | "error";
25
+ /** Options for {@link useSponsoredSend}. */
26
+ interface UseSponsoredSendOptions {
27
+ /** The only transport here. Your own bundler and paymaster: `useDirectSponsoredSend` in `@pepu-chain/sdk/aa/react-direct`. */
28
+ transport?: "privy-smart-wallets";
29
+ }
30
+ /**
31
+ * Send calls with gas sponsored through Privy's smart-wallet client (bundler
32
+ * and paymaster URLs come from the Privy dashboard). One send at a time: a
33
+ * second call while one is in flight is ignored. For your own bundler and
34
+ * paymaster, use `useDirectSponsoredSend` from `@pepu-chain/sdk/aa/react-direct`.
35
+ *
36
+ * @example
37
+ * const { send, status, result, error } = useSponsoredSend({ transport: "privy-smart-wallets" });
38
+ * await send([{ to: tapScore, abi: tapScoreAbi, functionName: "tap" }]);
39
+ */
40
+ declare function useSponsoredSend(_options?: UseSponsoredSendOptions): {
41
+ send: (calls: Call[]) => Promise<SponsoredResult>;
42
+ status: SponsoredSendStatus;
43
+ result?: SponsoredResult;
44
+ error?: PepuError;
45
+ };
46
+ /**
47
+ * Live sponsorship status, polled. The live replacement for the deprecated
48
+ * `useSponsorshipStatus` (which always said unavailable).
49
+ *
50
+ * @example
51
+ * const s = usePepuSponsorship({ pollMs: 15000 });
52
+ * if (!s.loading && !s.available) console.log(s.reason, s.fixes);
53
+ */
54
+ declare function usePepuSponsorship(o?: {
55
+ pollMs?: number;
56
+ bundlerUrl?: string;
57
+ paymasterUrl?: string;
58
+ }): SponsorshipReport & {
59
+ loading: boolean;
60
+ };
61
+
62
+ export { Call, SponsoredResult, type SponsoredSendStatus, type UseSponsoredSendOptions, usePepuSmartAccount, usePepuSponsorship, useSponsoredSend };
@@ -0,0 +1,15 @@
1
+ // Generated by scripts/guard-peers.mjs. Used only under the "node" export condition.
2
+ const peers = ["react","@privy-io/react-auth","permissionless"];
3
+ for (const peer of peers) {
4
+ try {
5
+ import.meta.resolve?.(peer);
6
+ } catch (e) {
7
+ if (e && e.code === "ERR_MODULE_NOT_FOUND") {
8
+ const err = new Error("@pepu-chain/sdk/aa/react needs peer packages that are not installed: react @privy-io/react-auth permissionless. Install with: npm i react @privy-io/react-auth permissionless (or let create-pepu-app scaffold everything).");
9
+ err.code = "PEPU_MISSING_PEER";
10
+ throw err;
11
+ }
12
+ }
13
+ }
14
+ const mod = await import("./react.js");
15
+ export const { usePepuSmartAccount, usePepuSponsorship, useSponsoredSend } = mod;
@@ -0,0 +1,147 @@
1
+ import { normalizeCalls, userOpEventFromReceipt } from '../chunk-VBH3JLQ5.js';
2
+ import { checkSponsorship } from '../chunk-F2R473FR.js';
3
+ import { describeUserOpFailure } from '../chunk-D52PADVY.js';
4
+ import '../chunk-KJYNF5KH.js';
5
+ import { getPublicClient } from '../chunk-OH3QMAIB.js';
6
+ import { txUrl } from '../chunk-J6UXXHBE.js';
7
+ import '../chunk-XC4IBCI2.js';
8
+ import { pepuMainnet } from '../chunk-VTQIHMF3.js';
9
+ import { PepuConfigError, toPepuError } from '../chunk-6DSZ4Z2N.js';
10
+ import { useWallets } from '@privy-io/react-auth';
11
+ import { useSmartWallets } from '@privy-io/react-auth/smart-wallets';
12
+ import { useRef, useState, useEffect, useCallback } from 'react';
13
+
14
+ var sharedClient;
15
+ function publicClient() {
16
+ sharedClient ??= getPublicClient(pepuMainnet);
17
+ return sharedClient;
18
+ }
19
+ function useEmbeddedWallet() {
20
+ const { wallets } = useWallets();
21
+ return wallets.find((w) => w.walletClientType === "privy");
22
+ }
23
+ function usePepuSmartAccount() {
24
+ const embedded = useEmbeddedWallet();
25
+ const { client, getClientForChain } = useSmartWallets();
26
+ const getClientRef = useRef(getClientForChain);
27
+ getClientRef.current = getClientForChain;
28
+ const owner = embedded?.address;
29
+ const fromProvider = client?.account?.address;
30
+ const [resolved, setResolved] = useState();
31
+ useEffect(() => {
32
+ if (!owner || fromProvider) return;
33
+ let cancelled = false;
34
+ Promise.resolve(getClientRef.current?.({ id: pepuMainnet.id })).then((c) => {
35
+ const address = c?.account?.address;
36
+ if (!cancelled && address) setResolved({ owner, address });
37
+ }).catch(() => {
38
+ });
39
+ return () => {
40
+ cancelled = true;
41
+ };
42
+ }, [owner, fromProvider]);
43
+ const smartAccount = fromProvider ?? (resolved && resolved.owner === owner ? resolved.address : void 0);
44
+ return {
45
+ ...owner ? { owner } : {},
46
+ ...smartAccount ? { smartAccount } : {},
47
+ ready: owner !== void 0 && smartAccount !== void 0
48
+ };
49
+ }
50
+ function useSponsoredSend(_options = {}) {
51
+ const { client, getClientForChain } = useSmartWallets();
52
+ const [status, setStatus] = useState("idle");
53
+ const [result, setResult] = useState();
54
+ const [error, setError] = useState();
55
+ const inFlight = useRef(false);
56
+ const send = useCallback(
57
+ async (calls) => {
58
+ if (inFlight.current) {
59
+ throw new PepuConfigError("UNKNOWN", "A sponsored send is already in progress.", {
60
+ hint: "Wait for the current send to finish."
61
+ });
62
+ }
63
+ inFlight.current = true;
64
+ setStatus("signing");
65
+ setError(void 0);
66
+ setResult(void 0);
67
+ try {
68
+ const encoded = normalizeCalls(calls);
69
+ const pc = publicClient();
70
+ const sw = client ?? await getClientForChain({ id: pepuMainnet.id });
71
+ if (!sw) {
72
+ throw new PepuConfigError(
73
+ "CONFIG_PRIVY_DASHBOARD",
74
+ "No Privy smart-wallet client is available.",
75
+ { hint: 'Enable "Smart Wallets" for chain 97741 in the Privy dashboard and wrap the app in SmartWalletsProvider.' }
76
+ );
77
+ }
78
+ setStatus("submitting");
79
+ const hash = encoded.length === 1 && encoded[0] ? await sw.sendTransaction({ to: encoded[0].to, data: encoded[0].data, value: encoded[0].value }) : await sw.sendTransaction({ calls: encoded });
80
+ const receipt = await pc.waitForTransactionReceipt({ hash });
81
+ const paid = userOpEventFromReceipt(receipt, sw.account.address);
82
+ const out = {
83
+ userOpHash: paid?.userOpHash ?? null,
84
+ transactionHash: hash,
85
+ success: paid?.success ?? receipt.status === "success",
86
+ paymaster: paid?.paymaster ?? null,
87
+ actualGasCostWei: paid?.actualGasCost ?? 0n,
88
+ explorerUrl: txUrl(pepuMainnet, hash)
89
+ };
90
+ setResult(out);
91
+ setStatus("confirmed");
92
+ return out;
93
+ } catch (caught) {
94
+ const err = toPepuError(caught) === caught ? caught : describeUserOpFailure(caught);
95
+ setError(err);
96
+ setStatus("error");
97
+ throw err;
98
+ } finally {
99
+ inFlight.current = false;
100
+ }
101
+ },
102
+ [client, getClientForChain]
103
+ );
104
+ return { send, status, ...result ? { result } : {}, ...error ? { error } : {} };
105
+ }
106
+ function usePepuSponsorship(o = {}) {
107
+ const [report, setReport] = useState({
108
+ available: false,
109
+ transport: "none",
110
+ bundler: { configured: false },
111
+ paymaster: { configured: false },
112
+ reason: "Checking sponsorship status.",
113
+ fixes: []
114
+ });
115
+ const [loading, setLoading] = useState(true);
116
+ const { pollMs = 3e4, bundlerUrl, paymasterUrl } = o;
117
+ useEffect(() => {
118
+ let cancelled = false;
119
+ const run = async () => {
120
+ try {
121
+ const r = await checkSponsorship({
122
+ publicClient: publicClient(),
123
+ ...bundlerUrl !== void 0 ? { bundlerUrl } : {},
124
+ ...paymasterUrl !== void 0 ? { paymasterUrl } : {}
125
+ });
126
+ if (!cancelled) setReport(r);
127
+ } catch (e) {
128
+ if (!cancelled) {
129
+ setReport((prev) => ({ ...prev, available: false, reason: toPepuError(e).message, fixes: [toPepuError(e).hint] }));
130
+ }
131
+ } finally {
132
+ if (!cancelled) setLoading(false);
133
+ }
134
+ };
135
+ void run();
136
+ const id = pollMs > 0 ? setInterval(() => void run(), pollMs) : void 0;
137
+ return () => {
138
+ cancelled = true;
139
+ if (id !== void 0) clearInterval(id);
140
+ };
141
+ }, [pollMs, bundlerUrl, paymasterUrl]);
142
+ return { ...report, loading };
143
+ }
144
+
145
+ export { usePepuSmartAccount, usePepuSponsorship, useSponsoredSend };
146
+ //# sourceMappingURL=react.js.map
147
+ //# sourceMappingURL=react.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/aa/react.ts"],"names":[],"mappings":"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","file":"react.js","sourcesContent":["/**\n * @pepu-chain/sdk/aa/react: React hooks for sponsored transactions with Privy\n * Smart Wallets.\n *\n * Needs `react`, `@privy-io/react-auth` and, because Privy's smart-wallets\n * module requires it, `permissionless`. It never references `@zerodev/*`,\n * statically or dynamically, so a bundler resolving it needs no ZeroDev. The\n * transport reads bundler and paymaster URLs from the Privy dashboard. To use\n * your own bundler and paymaster instead, see `@pepu-chain/sdk/aa/react-direct`.\n *\n * Flow ported from `templates/sponsored-demo/components/sponsored-tap-demo.tsx`\n * (smart-wallet client, in-flight guard, real error text via describeUserOpFailure).\n */\nimport { useWallets } from \"@privy-io/react-auth\";\nimport { useSmartWallets } from \"@privy-io/react-auth/smart-wallets\";\nimport { useCallback, useEffect, useRef, useState } from \"react\";\nimport type { Address, PublicClient } from \"viem\";\n\nimport { pepuMainnet } from \"../chains.js\";\nimport { getPublicClient } from \"../client.js\";\nimport { PepuConfigError, toPepuError } from \"../errors.js\";\nimport type { PepuError } from \"../errors.js\";\nimport { txUrl } from \"../explorer.js\";\nimport { normalizeCalls, userOpEventFromReceipt } from \"./calls.js\";\nimport { describeUserOpFailure } from \"./describe.js\";\nimport { checkSponsorship } from \"./status.js\";\nimport type { SponsorshipReport } from \"./status.js\";\nimport type { Call, SponsoredResult } from \"./types.js\";\n\nexport type { Call, SponsoredResult } from \"./types.js\";\n\nlet sharedClient: PublicClient | undefined;\nfunction publicClient(): PublicClient {\n sharedClient ??= getPublicClient(pepuMainnet) as unknown as PublicClient;\n return sharedClient;\n}\n\n/** The Privy embedded wallet, the owner of the smart account. */\nfunction useEmbeddedWallet() {\n const { wallets } = useWallets();\n return wallets.find((w) => w.walletClientType === \"privy\");\n}\n\n/**\n * The two-address model made explicit: `owner` is the Privy embedded wallet\n * (an EOA that signs), `smartAccount` is the Kernel account that sends and\n * holds assets. With Privy Smart Wallets the smart account comes from the\n * provider: `useSmartWallets().client`, or, while that is still unset,\n * `getClientForChain({ id: 97741 })`. For an address derived without Privy\n * Smart Wallets, use `useDirectSmartAccount` from `@pepu-chain/sdk/aa/react-direct`.\n *\n * @example\n * const { owner, smartAccount, ready } = usePepuSmartAccount();\n */\nexport function usePepuSmartAccount(): { owner?: Address; smartAccount?: Address; ready: boolean } {\n const embedded = useEmbeddedWallet();\n const { client, getClientForChain } = useSmartWallets();\n const getClientRef = useRef(getClientForChain);\n getClientRef.current = getClientForChain;\n const owner = embedded?.address as Address | undefined;\n const fromProvider = client?.account?.address as Address | undefined;\n const [resolved, setResolved] = useState<{ owner: Address; address: Address } | undefined>();\n\n useEffect(() => {\n if (!owner || fromProvider) return;\n let cancelled = false;\n // Privy's per-chain client may populate after `client`.\n Promise.resolve(getClientRef.current?.({ id: pepuMainnet.id }))\n .then((c) => {\n const address = c?.account?.address as Address | undefined;\n if (!cancelled && address) setResolved({ owner, address });\n })\n .catch(() => {\n // Smart Wallets not configured for this chain: `ready` stays false.\n });\n return () => {\n cancelled = true;\n };\n }, [owner, fromProvider]);\n\n const smartAccount = fromProvider ?? (resolved && resolved.owner === owner ? resolved.address : undefined);\n return {\n ...(owner ? { owner } : {}),\n ...(smartAccount ? { smartAccount } : {}),\n ready: owner !== undefined && smartAccount !== undefined,\n };\n}\n\n/** Status of a {@link useSponsoredSend} send. */\nexport type SponsoredSendStatus = \"idle\" | \"signing\" | \"submitting\" | \"confirmed\" | \"error\";\n\n/** Options for {@link useSponsoredSend}. */\nexport interface UseSponsoredSendOptions {\n /** The only transport here. Your own bundler and paymaster: `useDirectSponsoredSend` in `@pepu-chain/sdk/aa/react-direct`. */\n transport?: \"privy-smart-wallets\";\n}\n\n/**\n * Send calls with gas sponsored through Privy's smart-wallet client (bundler\n * and paymaster URLs come from the Privy dashboard). One send at a time: a\n * second call while one is in flight is ignored. For your own bundler and\n * paymaster, use `useDirectSponsoredSend` from `@pepu-chain/sdk/aa/react-direct`.\n *\n * @example\n * const { send, status, result, error } = useSponsoredSend({ transport: \"privy-smart-wallets\" });\n * await send([{ to: tapScore, abi: tapScoreAbi, functionName: \"tap\" }]);\n */\nexport function useSponsoredSend(_options: UseSponsoredSendOptions = {}): {\n send: (calls: Call[]) => Promise<SponsoredResult>;\n status: SponsoredSendStatus;\n result?: SponsoredResult;\n error?: PepuError;\n} {\n const { client, getClientForChain } = useSmartWallets();\n const [status, setStatus] = useState<SponsoredSendStatus>(\"idle\");\n const [result, setResult] = useState<SponsoredResult | undefined>();\n const [error, setError] = useState<PepuError | undefined>();\n const inFlight = useRef(false);\n\n const send = useCallback(\n async (calls: Call[]): Promise<SponsoredResult> => {\n if (inFlight.current) {\n throw new PepuConfigError(\"UNKNOWN\", \"A sponsored send is already in progress.\", {\n hint: \"Wait for the current send to finish.\",\n });\n }\n inFlight.current = true;\n setStatus(\"signing\");\n setError(undefined);\n setResult(undefined);\n try {\n const encoded = normalizeCalls(calls);\n const pc = publicClient();\n\n\n const sw = client ?? (await getClientForChain({ id: pepuMainnet.id }));\n if (!sw) {\n throw new PepuConfigError(\n \"CONFIG_PRIVY_DASHBOARD\",\n \"No Privy smart-wallet client is available.\",\n { hint: 'Enable \"Smart Wallets\" for chain 97741 in the Privy dashboard and wrap the app in SmartWalletsProvider.' },\n );\n }\n setStatus(\"submitting\");\n const hash =\n encoded.length === 1 && encoded[0]\n ? await sw.sendTransaction({ to: encoded[0].to, data: encoded[0].data, value: encoded[0].value })\n : await sw.sendTransaction({ calls: encoded });\n const receipt = await pc.waitForTransactionReceipt({ hash });\n const paid = userOpEventFromReceipt(receipt, sw.account.address as Address);\n const out: SponsoredResult = {\n userOpHash: paid?.userOpHash ?? null,\n transactionHash: hash,\n success: paid?.success ?? receipt.status === \"success\",\n paymaster: paid?.paymaster ?? null,\n actualGasCostWei: paid?.actualGasCost ?? 0n,\n explorerUrl: txUrl(pepuMainnet, hash),\n };\n setResult(out);\n setStatus(\"confirmed\");\n return out;\n } catch (caught) {\n const err = toPepuError(caught) === caught ? (caught as PepuError) : describeUserOpFailure(caught);\n setError(err);\n setStatus(\"error\");\n throw err;\n } finally {\n inFlight.current = false;\n }\n },\n [client, getClientForChain],\n );\n\n return { send, status, ...(result ? { result } : {}), ...(error ? { error } : {}) };\n}\n\n/**\n * Live sponsorship status, polled. The live replacement for the deprecated\n * `useSponsorshipStatus` (which always said unavailable).\n *\n * @example\n * const s = usePepuSponsorship({ pollMs: 15000 });\n * if (!s.loading && !s.available) console.log(s.reason, s.fixes);\n */\nexport function usePepuSponsorship(\n o: { pollMs?: number; bundlerUrl?: string; paymasterUrl?: string } = {},\n): SponsorshipReport & { loading: boolean } {\n const [report, setReport] = useState<SponsorshipReport>({\n available: false,\n transport: \"none\",\n bundler: { configured: false },\n paymaster: { configured: false },\n reason: \"Checking sponsorship status.\",\n fixes: [],\n });\n const [loading, setLoading] = useState(true);\n const { pollMs = 30_000, bundlerUrl, paymasterUrl } = o;\n\n useEffect(() => {\n let cancelled = false;\n const run = async (): Promise<void> => {\n try {\n const r = await checkSponsorship({\n publicClient: publicClient(),\n ...(bundlerUrl !== undefined ? { bundlerUrl } : {}),\n ...(paymasterUrl !== undefined ? { paymasterUrl } : {}),\n });\n if (!cancelled) setReport(r);\n } catch (e) {\n if (!cancelled) {\n setReport((prev) => ({ ...prev, available: false, reason: toPepuError(e).message, fixes: [toPepuError(e).hint] }));\n }\n } finally {\n if (!cancelled) setLoading(false);\n }\n };\n void run();\n const id = pollMs > 0 ? setInterval(() => void run(), pollMs) : undefined;\n return () => {\n cancelled = true;\n if (id !== undefined) clearInterval(id);\n };\n }, [pollMs, bundlerUrl, paymasterUrl]);\n\n return { ...report, loading };\n}\n"]}
package/dist/aa.cjs ADDED
@@ -0,0 +1,84 @@
1
+ 'use strict';
2
+
3
+ var chunk7MNJF2OB_cjs = require('./chunk-7MNJF2OB.cjs');
4
+ var chunkAJS4UFQX_cjs = require('./chunk-AJS4UFQX.cjs');
5
+ require('./chunk-A5LP2UCS.cjs');
6
+ var chunkBGALSKAF_cjs = require('./chunk-BGALSKAF.cjs');
7
+ var chunkWANILJZQ_cjs = require('./chunk-WANILJZQ.cjs');
8
+ require('./chunk-K7JSQPZO.cjs');
9
+ require('./chunk-VF3D6KLQ.cjs');
10
+ require('./chunk-DPCZJLB3.cjs');
11
+ require('./chunk-YQL7NISX.cjs');
12
+
13
+
14
+
15
+ Object.defineProperty(exports, "ENTRY_POINT_V07", {
16
+ enumerable: true,
17
+ get: function () { return chunk7MNJF2OB_cjs.ENTRY_POINT_V07; }
18
+ });
19
+ Object.defineProperty(exports, "createPepuBundlerClient", {
20
+ enumerable: true,
21
+ get: function () { return chunk7MNJF2OB_cjs.createPepuBundlerClient; }
22
+ });
23
+ Object.defineProperty(exports, "createPepuPaymasterClient", {
24
+ enumerable: true,
25
+ get: function () { return chunk7MNJF2OB_cjs.createPepuPaymasterClient; }
26
+ });
27
+ Object.defineProperty(exports, "estimatePepuUserOpFees", {
28
+ enumerable: true,
29
+ get: function () { return chunk7MNJF2OB_cjs.estimatePepuUserOpFees; }
30
+ });
31
+ Object.defineProperty(exports, "encodeKernelExecute", {
32
+ enumerable: true,
33
+ get: function () { return chunkAJS4UFQX_cjs.encodeKernelExecute; }
34
+ });
35
+ Object.defineProperty(exports, "normalizeCalls", {
36
+ enumerable: true,
37
+ get: function () { return chunkAJS4UFQX_cjs.normalizeCalls; }
38
+ });
39
+ Object.defineProperty(exports, "userOpEventFromReceipt", {
40
+ enumerable: true,
41
+ get: function () { return chunkAJS4UFQX_cjs.userOpEventFromReceipt; }
42
+ });
43
+ Object.defineProperty(exports, "userOpEventsFromReceipt", {
44
+ enumerable: true,
45
+ get: function () { return chunkAJS4UFQX_cjs.userOpEventsFromReceipt; }
46
+ });
47
+ Object.defineProperty(exports, "checkSponsorship", {
48
+ enumerable: true,
49
+ get: function () { return chunkBGALSKAF_cjs.checkSponsorship; }
50
+ });
51
+ Object.defineProperty(exports, "getKernelAccountAddress", {
52
+ enumerable: true,
53
+ get: function () { return chunkBGALSKAF_cjs.getKernelAccountAddress; }
54
+ });
55
+ Object.defineProperty(exports, "getPaymasterDeposit", {
56
+ enumerable: true,
57
+ get: function () { return chunkBGALSKAF_cjs.getPaymasterDeposit; }
58
+ });
59
+ Object.defineProperty(exports, "getPepuKernelStack", {
60
+ enumerable: true,
61
+ get: function () { return chunkBGALSKAF_cjs.getPepuKernelStack; }
62
+ });
63
+ Object.defineProperty(exports, "getSponsorshipStatus", {
64
+ enumerable: true,
65
+ get: function () { return chunkBGALSKAF_cjs.getSponsorshipStatus; }
66
+ });
67
+ Object.defineProperty(exports, "probeBundler", {
68
+ enumerable: true,
69
+ get: function () { return chunkBGALSKAF_cjs.probeBundler; }
70
+ });
71
+ Object.defineProperty(exports, "probePaymaster", {
72
+ enumerable: true,
73
+ get: function () { return chunkBGALSKAF_cjs.probePaymaster; }
74
+ });
75
+ Object.defineProperty(exports, "describeUserOpFailure", {
76
+ enumerable: true,
77
+ get: function () { return chunkWANILJZQ_cjs.describeUserOpFailure; }
78
+ });
79
+ Object.defineProperty(exports, "redactSecrets", {
80
+ enumerable: true,
81
+ get: function () { return chunkWANILJZQ_cjs.redactSecrets; }
82
+ });
83
+ //# sourceMappingURL=aa.cjs.map
84
+ //# sourceMappingURL=aa.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":[],"names":[],"mappings":"","file":"aa.cjs"}