@pepu-chain/sdk 0.0.0-stage → 0.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (232) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +565 -2
  3. package/dist/aa/kernel.cjs +40 -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.js +11 -0
  8. package/dist/aa/kernel.js.map +1 -0
  9. package/dist/aa/react-direct.cjs +110 -0
  10. package/dist/aa/react-direct.cjs.map +1 -0
  11. package/dist/aa/react-direct.d.cts +42 -0
  12. package/dist/aa/react-direct.d.ts +42 -0
  13. package/dist/aa/react-direct.js +107 -0
  14. package/dist/aa/react-direct.js.map +1 -0
  15. package/dist/aa/react.cjs +151 -0
  16. package/dist/aa/react.cjs.map +1 -0
  17. package/dist/aa/react.d.cts +62 -0
  18. package/dist/aa/react.d.ts +62 -0
  19. package/dist/aa/react.js +147 -0
  20. package/dist/aa/react.js.map +1 -0
  21. package/dist/aa.cjs +84 -0
  22. package/dist/aa.cjs.map +1 -0
  23. package/dist/aa.d.cts +85 -0
  24. package/dist/aa.d.ts +85 -0
  25. package/dist/aa.js +11 -0
  26. package/dist/aa.js.map +1 -0
  27. package/dist/api-Dz4sCHH_.d.cts +654 -0
  28. package/dist/api-Dz4sCHH_.d.ts +654 -0
  29. package/dist/calls-BRPjKgjl.d.cts +70 -0
  30. package/dist/calls-z_EQOtFb.d.ts +70 -0
  31. package/dist/chains-DK13zGIp.d.cts +235 -0
  32. package/dist/chains-DK13zGIp.d.ts +235 -0
  33. package/dist/chunk-3XUGQODR.js +194 -0
  34. package/dist/chunk-3XUGQODR.js.map +1 -0
  35. package/dist/chunk-45KSZH26.cjs +145 -0
  36. package/dist/chunk-45KSZH26.cjs.map +1 -0
  37. package/dist/chunk-4GINFJO6.cjs +44 -0
  38. package/dist/chunk-4GINFJO6.cjs.map +1 -0
  39. package/dist/chunk-62M2LKQW.js +136 -0
  40. package/dist/chunk-62M2LKQW.js.map +1 -0
  41. package/dist/chunk-6DSZ4Z2N.js +498 -0
  42. package/dist/chunk-6DSZ4Z2N.js.map +1 -0
  43. package/dist/chunk-7MNJF2OB.cjs +72 -0
  44. package/dist/chunk-7MNJF2OB.cjs.map +1 -0
  45. package/dist/chunk-A5LP2UCS.cjs +2729 -0
  46. package/dist/chunk-A5LP2UCS.cjs.map +1 -0
  47. package/dist/chunk-AJS4UFQX.cjs +121 -0
  48. package/dist/chunk-AJS4UFQX.cjs.map +1 -0
  49. package/dist/chunk-C2XW44FI.cjs +200 -0
  50. package/dist/chunk-C2XW44FI.cjs.map +1 -0
  51. package/dist/chunk-C7IC36XS.cjs +13 -0
  52. package/dist/chunk-C7IC36XS.cjs.map +1 -0
  53. package/dist/chunk-D52PADVY.js +84 -0
  54. package/dist/chunk-D52PADVY.js.map +1 -0
  55. package/dist/chunk-DH6BFNVJ.cjs +272 -0
  56. package/dist/chunk-DH6BFNVJ.cjs.map +1 -0
  57. package/dist/chunk-DPCZJLB3.cjs +87 -0
  58. package/dist/chunk-DPCZJLB3.cjs.map +1 -0
  59. package/dist/chunk-EHBPIYY4.js +262 -0
  60. package/dist/chunk-EHBPIYY4.js.map +1 -0
  61. package/dist/chunk-ESMNAXUI.js +86 -0
  62. package/dist/chunk-ESMNAXUI.js.map +1 -0
  63. package/dist/chunk-ET3P6TX6.cjs +49 -0
  64. package/dist/chunk-ET3P6TX6.cjs.map +1 -0
  65. package/dist/chunk-FCXSP2YF.js +219 -0
  66. package/dist/chunk-FCXSP2YF.js.map +1 -0
  67. package/dist/chunk-IB2FSPMJ.js +66 -0
  68. package/dist/chunk-IB2FSPMJ.js.map +1 -0
  69. package/dist/chunk-IG7RSL2Y.cjs +178 -0
  70. package/dist/chunk-IG7RSL2Y.cjs.map +1 -0
  71. package/dist/chunk-IY3ALPUJ.js +2716 -0
  72. package/dist/chunk-IY3ALPUJ.js.map +1 -0
  73. package/dist/chunk-J3O2ZGG3.cjs +93 -0
  74. package/dist/chunk-J3O2ZGG3.cjs.map +1 -0
  75. package/dist/chunk-J6UXXHBE.js +37 -0
  76. package/dist/chunk-J6UXXHBE.js.map +1 -0
  77. package/dist/chunk-JLZ4LZ4Z.js +22 -0
  78. package/dist/chunk-JLZ4LZ4Z.js.map +1 -0
  79. package/dist/chunk-KIIFL4VM.js +274 -0
  80. package/dist/chunk-KIIFL4VM.js.map +1 -0
  81. package/dist/chunk-KVG3AYYR.js +99 -0
  82. package/dist/chunk-KVG3AYYR.js.map +1 -0
  83. package/dist/chunk-MBA4CLA5.js +45 -0
  84. package/dist/chunk-MBA4CLA5.js.map +1 -0
  85. package/dist/chunk-NE3QKDOB.cjs +24 -0
  86. package/dist/chunk-NE3QKDOB.cjs.map +1 -0
  87. package/dist/chunk-NVOPDXTA.cjs +95 -0
  88. package/dist/chunk-NVOPDXTA.cjs.map +1 -0
  89. package/dist/chunk-OH3QMAIB.js +11 -0
  90. package/dist/chunk-OH3QMAIB.js.map +1 -0
  91. package/dist/chunk-PHM3ZORG.cjs +110 -0
  92. package/dist/chunk-PHM3ZORG.cjs.map +1 -0
  93. package/dist/chunk-R5PXQNO3.cjs +209 -0
  94. package/dist/chunk-R5PXQNO3.cjs.map +1 -0
  95. package/dist/chunk-SLW7FRTL.cjs +285 -0
  96. package/dist/chunk-SLW7FRTL.cjs.map +1 -0
  97. package/dist/chunk-SVWRRALU.cjs +17 -0
  98. package/dist/chunk-SVWRRALU.cjs.map +1 -0
  99. package/dist/chunk-T43PQXJD.js +202 -0
  100. package/dist/chunk-T43PQXJD.js.map +1 -0
  101. package/dist/chunk-TIEAZYHF.cjs +225 -0
  102. package/dist/chunk-TIEAZYHF.cjs.map +1 -0
  103. package/dist/chunk-VBH3JLQ5.js +116 -0
  104. package/dist/chunk-VBH3JLQ5.js.map +1 -0
  105. package/dist/chunk-VF3D6KLQ.cjs +94 -0
  106. package/dist/chunk-VF3D6KLQ.cjs.map +1 -0
  107. package/dist/chunk-VTQIHMF3.js +82 -0
  108. package/dist/chunk-VTQIHMF3.js.map +1 -0
  109. package/dist/chunk-W3JN3YIW.js +15 -0
  110. package/dist/chunk-W3JN3YIW.js.map +1 -0
  111. package/dist/chunk-WANILJZQ.cjs +87 -0
  112. package/dist/chunk-WANILJZQ.cjs.map +1 -0
  113. package/dist/chunk-XC4IBCI2.js +86 -0
  114. package/dist/chunk-XC4IBCI2.js.map +1 -0
  115. package/dist/chunk-YKEWWQEJ.js +165 -0
  116. package/dist/chunk-YKEWWQEJ.js.map +1 -0
  117. package/dist/chunk-YQL7NISX.cjs +515 -0
  118. package/dist/chunk-YQL7NISX.cjs.map +1 -0
  119. package/dist/chunk-ZB6SVBK4.js +89 -0
  120. package/dist/chunk-ZB6SVBK4.js.map +1 -0
  121. package/dist/combo/react.cjs +235 -0
  122. package/dist/combo/react.cjs.map +1 -0
  123. package/dist/combo/react.d.cts +148 -0
  124. package/dist/combo/react.d.ts +148 -0
  125. package/dist/combo/react.js +230 -0
  126. package/dist/combo/react.js.map +1 -0
  127. package/dist/combo.cjs +262 -0
  128. package/dist/combo.cjs.map +1 -0
  129. package/dist/combo.d.cts +139 -0
  130. package/dist/combo.d.ts +139 -0
  131. package/dist/combo.js +249 -0
  132. package/dist/combo.js.map +1 -0
  133. package/dist/config-CHjz7ZjZ.d.cts +57 -0
  134. package/dist/config-COjhIZTh.d.ts +57 -0
  135. package/dist/doctor.cjs +354 -0
  136. package/dist/doctor.cjs.map +1 -0
  137. package/dist/doctor.d.cts +177 -0
  138. package/dist/doctor.d.ts +177 -0
  139. package/dist/doctor.js +345 -0
  140. package/dist/doctor.js.map +1 -0
  141. package/dist/erc7677-DOW58QBE.d.cts +111 -0
  142. package/dist/erc7677-DOW58QBE.d.ts +111 -0
  143. package/dist/errors-CgX1vNj7.d.cts +100 -0
  144. package/dist/errors-CgX1vNj7.d.ts +100 -0
  145. package/dist/index.cjs +802 -0
  146. package/dist/index.cjs.map +1 -0
  147. package/dist/index.d.cts +2398 -0
  148. package/dist/index.d.ts +2398 -0
  149. package/dist/index.js +559 -0
  150. package/dist/index.js.map +1 -0
  151. package/dist/paymaster/server.cjs +38 -0
  152. package/dist/paymaster/server.cjs.map +1 -0
  153. package/dist/paymaster/server.d.cts +57 -0
  154. package/dist/paymaster/server.d.ts +57 -0
  155. package/dist/paymaster/server.js +36 -0
  156. package/dist/paymaster/server.js.map +1 -0
  157. package/dist/paymaster.cjs +356 -0
  158. package/dist/paymaster.cjs.map +1 -0
  159. package/dist/paymaster.d.cts +1851 -0
  160. package/dist/paymaster.d.ts +1851 -0
  161. package/dist/paymaster.js +289 -0
  162. package/dist/paymaster.js.map +1 -0
  163. package/dist/privy/react.cjs +48 -0
  164. package/dist/privy/react.cjs.map +1 -0
  165. package/dist/privy/react.d.cts +194 -0
  166. package/dist/privy/react.d.ts +194 -0
  167. package/dist/privy/react.js +7 -0
  168. package/dist/privy/react.js.map +1 -0
  169. package/dist/privy/server.cjs +43 -0
  170. package/dist/privy/server.cjs.map +1 -0
  171. package/dist/privy/server.d.cts +192 -0
  172. package/dist/privy/server.d.ts +192 -0
  173. package/dist/privy/server.js +6 -0
  174. package/dist/privy/server.js.map +1 -0
  175. package/dist/privy/wagmi.d.ts +90 -0
  176. package/dist/privy/wagmi.js +55 -0
  177. package/dist/privy/wagmi.js.map +1 -0
  178. package/dist/privy.cjs +34 -0
  179. package/dist/privy.cjs.map +1 -0
  180. package/dist/privy.d.cts +4 -0
  181. package/dist/privy.d.ts +4 -0
  182. package/dist/privy.js +5 -0
  183. package/dist/privy.js.map +1 -0
  184. package/dist/react.cjs +72 -0
  185. package/dist/react.cjs.map +1 -0
  186. package/dist/react.d.cts +66 -0
  187. package/dist/react.d.ts +66 -0
  188. package/dist/react.js +68 -0
  189. package/dist/react.js.map +1 -0
  190. package/dist/requirements-C-QiJkL9.d.cts +134 -0
  191. package/dist/requirements-C-QiJkL9.d.ts +134 -0
  192. package/dist/scope-DBRkN7bR.d.cts +94 -0
  193. package/dist/scope-DBRkN7bR.d.ts +94 -0
  194. package/dist/server.cjs +59 -0
  195. package/dist/server.cjs.map +1 -0
  196. package/dist/server.d.cts +208 -0
  197. package/dist/server.d.ts +208 -0
  198. package/dist/server.js +8 -0
  199. package/dist/server.js.map +1 -0
  200. package/dist/session/kernel.cjs +82 -0
  201. package/dist/session/kernel.cjs.map +1 -0
  202. package/dist/session/kernel.d.cts +131 -0
  203. package/dist/session/kernel.d.ts +131 -0
  204. package/dist/session/kernel.js +13 -0
  205. package/dist/session/kernel.js.map +1 -0
  206. package/dist/session/react.cjs +37 -0
  207. package/dist/session/react.cjs.map +1 -0
  208. package/dist/session/react.d.cts +119 -0
  209. package/dist/session/react.d.ts +119 -0
  210. package/dist/session/react.js +8 -0
  211. package/dist/session/react.js.map +1 -0
  212. package/dist/session/server.cjs +267 -0
  213. package/dist/session/server.cjs.map +1 -0
  214. package/dist/session/server.d.cts +151 -0
  215. package/dist/session/server.d.ts +151 -0
  216. package/dist/session/server.js +252 -0
  217. package/dist/session/server.js.map +1 -0
  218. package/dist/session.cjs +74 -0
  219. package/dist/session.cjs.map +1 -0
  220. package/dist/session.d.cts +3 -0
  221. package/dist/session.d.ts +3 -0
  222. package/dist/session.js +5 -0
  223. package/dist/session.js.map +1 -0
  224. package/dist/status-CmOsyPmO.d.cts +295 -0
  225. package/dist/status-DwkkOrGQ.d.ts +295 -0
  226. package/dist/store-CjmLgp9g.d.cts +64 -0
  227. package/dist/store-CjmLgp9g.d.ts +64 -0
  228. package/dist/types-BEEM7WdG.d.cts +25 -0
  229. package/dist/types-BEEM7WdG.d.ts +25 -0
  230. package/dist/types-BilBTDqK.d.cts +27 -0
  231. package/dist/types-BilBTDqK.d.ts +27 -0
  232. package/package.json +209 -3
@@ -0,0 +1,151 @@
1
+ 'use strict';
2
+
3
+ var chunkAJS4UFQX_cjs = require('../chunk-AJS4UFQX.cjs');
4
+ var chunkSLW7FRTL_cjs = require('../chunk-SLW7FRTL.cjs');
5
+ var chunkWANILJZQ_cjs = require('../chunk-WANILJZQ.cjs');
6
+ require('../chunk-TIEAZYHF.cjs');
7
+ var chunkC7IC36XS_cjs = require('../chunk-C7IC36XS.cjs');
8
+ var chunk4GINFJO6_cjs = require('../chunk-4GINFJO6.cjs');
9
+ require('../chunk-VF3D6KLQ.cjs');
10
+ var chunkDPCZJLB3_cjs = require('../chunk-DPCZJLB3.cjs');
11
+ var chunkYQL7NISX_cjs = require('../chunk-YQL7NISX.cjs');
12
+ var reactAuth = require('@privy-io/react-auth');
13
+ var smartWallets = require('@privy-io/react-auth/smart-wallets');
14
+ var react = require('react');
15
+
16
+ var sharedClient;
17
+ function publicClient() {
18
+ sharedClient ??= chunkC7IC36XS_cjs.getPublicClient(chunkDPCZJLB3_cjs.pepuMainnet);
19
+ return sharedClient;
20
+ }
21
+ function useEmbeddedWallet() {
22
+ const { wallets } = reactAuth.useWallets();
23
+ return wallets.find((w) => w.walletClientType === "privy");
24
+ }
25
+ function usePepuSmartAccount() {
26
+ const embedded = useEmbeddedWallet();
27
+ const { client, getClientForChain } = smartWallets.useSmartWallets();
28
+ const getClientRef = react.useRef(getClientForChain);
29
+ getClientRef.current = getClientForChain;
30
+ const owner = embedded?.address;
31
+ const fromProvider = client?.account?.address;
32
+ const [resolved, setResolved] = react.useState();
33
+ react.useEffect(() => {
34
+ if (!owner || fromProvider) return;
35
+ let cancelled = false;
36
+ Promise.resolve(getClientRef.current?.({ id: chunkDPCZJLB3_cjs.pepuMainnet.id })).then((c) => {
37
+ const address = c?.account?.address;
38
+ if (!cancelled && address) setResolved({ owner, address });
39
+ }).catch(() => {
40
+ });
41
+ return () => {
42
+ cancelled = true;
43
+ };
44
+ }, [owner, fromProvider]);
45
+ const smartAccount = fromProvider ?? (resolved && resolved.owner === owner ? resolved.address : void 0);
46
+ return {
47
+ ...owner ? { owner } : {},
48
+ ...smartAccount ? { smartAccount } : {},
49
+ ready: owner !== void 0 && smartAccount !== void 0
50
+ };
51
+ }
52
+ function useSponsoredSend(_options = {}) {
53
+ const { client, getClientForChain } = smartWallets.useSmartWallets();
54
+ const [status, setStatus] = react.useState("idle");
55
+ const [result, setResult] = react.useState();
56
+ const [error, setError] = react.useState();
57
+ const inFlight = react.useRef(false);
58
+ const send = react.useCallback(
59
+ async (calls) => {
60
+ if (inFlight.current) {
61
+ throw new chunkYQL7NISX_cjs.PepuConfigError("UNKNOWN", "A sponsored send is already in progress.", {
62
+ hint: "Wait for the current send to finish."
63
+ });
64
+ }
65
+ inFlight.current = true;
66
+ setStatus("signing");
67
+ setError(void 0);
68
+ setResult(void 0);
69
+ try {
70
+ const encoded = chunkAJS4UFQX_cjs.normalizeCalls(calls);
71
+ const pc = publicClient();
72
+ const sw = client ?? await getClientForChain({ id: chunkDPCZJLB3_cjs.pepuMainnet.id });
73
+ if (!sw) {
74
+ throw new chunkYQL7NISX_cjs.PepuConfigError(
75
+ "CONFIG_PRIVY_DASHBOARD",
76
+ "No Privy smart-wallet client is available.",
77
+ { hint: 'Enable "Smart Wallets" for chain 97741 in the Privy dashboard and wrap the app in SmartWalletsProvider.' }
78
+ );
79
+ }
80
+ setStatus("submitting");
81
+ 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 });
82
+ const receipt = await pc.waitForTransactionReceipt({ hash });
83
+ const paid = chunkAJS4UFQX_cjs.userOpEventFromReceipt(receipt, sw.account.address);
84
+ const out = {
85
+ userOpHash: paid?.userOpHash ?? null,
86
+ transactionHash: hash,
87
+ success: paid?.success ?? receipt.status === "success",
88
+ paymaster: paid?.paymaster ?? null,
89
+ actualGasCostWei: paid?.actualGasCost ?? 0n,
90
+ explorerUrl: chunk4GINFJO6_cjs.txUrl(chunkDPCZJLB3_cjs.pepuMainnet, hash)
91
+ };
92
+ setResult(out);
93
+ setStatus("confirmed");
94
+ return out;
95
+ } catch (caught) {
96
+ const err = chunkYQL7NISX_cjs.toPepuError(caught) === caught ? caught : chunkWANILJZQ_cjs.describeUserOpFailure(caught);
97
+ setError(err);
98
+ setStatus("error");
99
+ throw err;
100
+ } finally {
101
+ inFlight.current = false;
102
+ }
103
+ },
104
+ [client, getClientForChain]
105
+ );
106
+ return { send, status, ...result ? { result } : {}, ...error ? { error } : {} };
107
+ }
108
+ function usePepuSponsorship(o = {}) {
109
+ const [report, setReport] = react.useState({
110
+ available: false,
111
+ transport: "none",
112
+ bundler: { configured: false },
113
+ paymaster: { configured: false },
114
+ reason: "Checking sponsorship status.",
115
+ fixes: []
116
+ });
117
+ const [loading, setLoading] = react.useState(true);
118
+ const { pollMs = 3e4, bundlerUrl, paymasterUrl } = o;
119
+ react.useEffect(() => {
120
+ let cancelled = false;
121
+ const run = async () => {
122
+ try {
123
+ const r = await chunkSLW7FRTL_cjs.checkSponsorship({
124
+ publicClient: publicClient(),
125
+ ...bundlerUrl !== void 0 ? { bundlerUrl } : {},
126
+ ...paymasterUrl !== void 0 ? { paymasterUrl } : {}
127
+ });
128
+ if (!cancelled) setReport(r);
129
+ } catch (e) {
130
+ if (!cancelled) {
131
+ setReport((prev) => ({ ...prev, available: false, reason: chunkYQL7NISX_cjs.toPepuError(e).message, fixes: [chunkYQL7NISX_cjs.toPepuError(e).hint] }));
132
+ }
133
+ } finally {
134
+ if (!cancelled) setLoading(false);
135
+ }
136
+ };
137
+ void run();
138
+ const id = pollMs > 0 ? setInterval(() => void run(), pollMs) : void 0;
139
+ return () => {
140
+ cancelled = true;
141
+ if (id !== void 0) clearInterval(id);
142
+ };
143
+ }, [pollMs, bundlerUrl, paymasterUrl]);
144
+ return { ...report, loading };
145
+ }
146
+
147
+ exports.usePepuSmartAccount = usePepuSmartAccount;
148
+ exports.usePepuSponsorship = usePepuSponsorship;
149
+ exports.useSponsoredSend = useSponsoredSend;
150
+ //# sourceMappingURL=react.cjs.map
151
+ //# 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-CmOsyPmO.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-DwkkOrGQ.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,147 @@
1
+ import { normalizeCalls, userOpEventFromReceipt } from '../chunk-VBH3JLQ5.js';
2
+ import { checkSponsorship } from '../chunk-KIIFL4VM.js';
3
+ import { describeUserOpFailure } from '../chunk-D52PADVY.js';
4
+ import '../chunk-FCXSP2YF.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 chunkSLW7FRTL_cjs = require('./chunk-SLW7FRTL.cjs');
7
+ var chunkWANILJZQ_cjs = require('./chunk-WANILJZQ.cjs');
8
+ require('./chunk-TIEAZYHF.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 chunkSLW7FRTL_cjs.checkSponsorship; }
50
+ });
51
+ Object.defineProperty(exports, "getKernelAccountAddress", {
52
+ enumerable: true,
53
+ get: function () { return chunkSLW7FRTL_cjs.getKernelAccountAddress; }
54
+ });
55
+ Object.defineProperty(exports, "getPaymasterDeposit", {
56
+ enumerable: true,
57
+ get: function () { return chunkSLW7FRTL_cjs.getPaymasterDeposit; }
58
+ });
59
+ Object.defineProperty(exports, "getPepuKernelStack", {
60
+ enumerable: true,
61
+ get: function () { return chunkSLW7FRTL_cjs.getPepuKernelStack; }
62
+ });
63
+ Object.defineProperty(exports, "getSponsorshipStatus", {
64
+ enumerable: true,
65
+ get: function () { return chunkSLW7FRTL_cjs.getSponsorshipStatus; }
66
+ });
67
+ Object.defineProperty(exports, "probeBundler", {
68
+ enumerable: true,
69
+ get: function () { return chunkSLW7FRTL_cjs.probeBundler; }
70
+ });
71
+ Object.defineProperty(exports, "probePaymaster", {
72
+ enumerable: true,
73
+ get: function () { return chunkSLW7FRTL_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"}
package/dist/aa.d.cts ADDED
@@ -0,0 +1,85 @@
1
+ import { PublicClient } from 'viem';
2
+ import { SmartAccount, PaymasterClient, BundlerClient } from 'viem/account-abstraction';
3
+ import { P as PaymasterContext } from './erc7677-DOW58QBE.cjs';
4
+ export { B as BundlerProbeResult, C as CheckSponsorshipOptions, F as FetchLike, G as GetSponsorshipStatusOptions, P as PaymasterProbeResult, a as PepuKernelStack, b as ProbeOptions, S as SponsorshipReport, c as SponsorshipStatus, d as checkSponsorship, g as getKernelAccountAddress, e as getPaymasterDeposit, f as getPepuKernelStack, h as getSponsorshipStatus, p as probeBundler, i as probePaymaster } from './status-CmOsyPmO.cjs';
5
+ import { a as PepuBundlerError, b as PepuPaymasterError } from './errors-CgX1vNj7.cjs';
6
+ export { E as EncodedCall, U as UserOpEvent, e as encodeKernelExecute, n as normalizeCalls, u as userOpEventFromReceipt, a as userOpEventsFromReceipt } from './calls-BRPjKgjl.cjs';
7
+ export { C as Call, S as SponsoredResult } from './types-BilBTDqK.cjs';
8
+ import './chains-DK13zGIp.cjs';
9
+
10
+ /** EntryPoint v0.7, the only version PEPU's bundler and paymaster speak. */
11
+ declare const ENTRY_POINT_V07: {
12
+ readonly address: "0x0000000071727De22E5E9d8BAf0edAc6f37da032";
13
+ readonly version: "0.7";
14
+ };
15
+ /**
16
+ * The Alto-compatible fee estimator: the chain's own `estimateFeesPerGas`,
17
+ * with `maxFeePerGas` x 1.2. Alto does not implement ZeroDev's
18
+ * `zd_getUserOperationGasPrice`, so the default estimator would fail.
19
+ * Ported from `templates/sponsored-session-app/lib/kernel.ts`.
20
+ *
21
+ * @example
22
+ * const fees = await estimatePepuUserOpFees(publicClient);
23
+ */
24
+ declare function estimatePepuUserOpFees(publicClient: Pick<PublicClient, "estimateFeesPerGas">): Promise<{
25
+ maxFeePerGas: bigint;
26
+ maxPriorityFeePerGas: bigint;
27
+ }>;
28
+ /**
29
+ * An ERC-7677 paymaster client for PEPU (viem `createPaymasterClient`), using
30
+ * the endpoints registry for the URL. A `context` (for example
31
+ * `buildPaymasterContext({ privyAccessToken })`) is injected into every
32
+ * `pm_getPaymasterStubData` and `pm_getPaymasterData` call unless the caller
33
+ * passes one.
34
+ *
35
+ * @example
36
+ * const paymaster = createPepuPaymasterClient({
37
+ * context: buildPaymasterContext({ privyAccessToken }),
38
+ * });
39
+ */
40
+ declare function createPepuPaymasterClient(o?: {
41
+ paymasterUrl?: string;
42
+ paymasterToken?: string;
43
+ context?: PaymasterContext;
44
+ }): PaymasterClient;
45
+ /**
46
+ * A viem bundler client for PEPU's bundler, with the fee estimator
47
+ * pre-wired ({@link estimatePepuUserOpFees}).
48
+ *
49
+ * @example
50
+ * const bundler = createPepuBundlerClient({ account, paymaster: createPepuPaymasterClient() });
51
+ * const hash = await bundler.sendUserOperation({ calls: [{ to, data }] });
52
+ */
53
+ declare function createPepuBundlerClient(o: {
54
+ bundlerUrl?: string;
55
+ account: SmartAccount;
56
+ paymaster?: PaymasterClient;
57
+ paymasterContext?: PaymasterContext;
58
+ publicClient?: PublicClient;
59
+ }): BundlerClient;
60
+
61
+ /**
62
+ * Remove anything credential-shaped from text that may reach a message:
63
+ * `/paymaster/<token>` URL paths, bearer tokens, API keys, JWTs and URL
64
+ * credentials.
65
+ *
66
+ * @example
67
+ * redactSecrets("POST https://pm.example/paymaster/sk_live_123 failed");
68
+ * // "POST https://pm.example/paymaster/[redacted] failed"
69
+ */
70
+ declare function redactSecrets(text: string): string;
71
+ /**
72
+ * Turn anything thrown by the bundler, paymaster or viem/Privy stack into a
73
+ * typed PepuError. Walks the `cause` chain (viem's `details` is where the
74
+ * paymaster's real denial reason lives; Privy's own log prints
75
+ * `[object Error]`), maps `AA10`..`AA9x` to a fix, maps paymaster reason codes
76
+ * through the error catalog, and redacts tokens and URL credentials.
77
+ * Port of `templates/sponsored-demo/lib/describe-error.ts`.
78
+ *
79
+ * @example
80
+ * try { await sendSponsored({ client, calls }); }
81
+ * catch (e) { const err = describeUserOpFailure(e); console.log(err.code, err.hint); }
82
+ */
83
+ declare function describeUserOpFailure(e: unknown): PepuBundlerError | PepuPaymasterError;
84
+
85
+ export { ENTRY_POINT_V07, createPepuBundlerClient, createPepuPaymasterClient, describeUserOpFailure, estimatePepuUserOpFees, redactSecrets };