@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,272 @@
1
+ 'use strict';
2
+
3
+ var chunkNE3QKDOB_cjs = require('./chunk-NE3QKDOB.cjs');
4
+ var chunkC2XW44FI_cjs = require('./chunk-C2XW44FI.cjs');
5
+ var chunkYQL7NISX_cjs = require('./chunk-YQL7NISX.cjs');
6
+ var react = require('react');
7
+ var reactAuth = require('@privy-io/react-auth');
8
+
9
+ // src/privy/ensure-client.ts
10
+ var DEFAULT_ENSURE_ENDPOINT = "/api/wallet/ensure";
11
+ var DEFAULT_ENSURE_REQUEST_TIMEOUT_MS = 2e4;
12
+ var DEFAULT_ENSURE_APPEAR_TIMEOUT_MS = 8e3;
13
+ var KNOWN_CODES = new Set(chunkYQL7NISX_cjs.PEPU_ERROR_CATALOG.map((e) => e.code));
14
+ var isRecord = (v) => typeof v === "object" && v !== null;
15
+ function errorFromEnsureResponse(status, body) {
16
+ const err = isRecord(body) ? body["error"] : void 0;
17
+ if (isRecord(err)) {
18
+ const code = typeof err["code"] === "string" && KNOWN_CODES.has(err["code"]) ? err["code"] : "UNKNOWN";
19
+ const message2 = typeof err["message"] === "string" ? err["message"] : `Wallet setup failed (HTTP ${status}).`;
20
+ const hint = typeof err["hint"] === "string" ? err["hint"] : void 0;
21
+ const opts = { status, ...hint !== void 0 ? { hint } : {} };
22
+ return status === 401 ? new chunkYQL7NISX_cjs.PepuAuthError(code, message2, opts) : new chunkYQL7NISX_cjs.PepuError(code, message2, opts);
23
+ }
24
+ const message = typeof err === "string" ? err : `Wallet setup failed (HTTP ${status}).`;
25
+ if (status === 401) return new chunkYQL7NISX_cjs.PepuAuthError("AUTH_INVALID_TOKEN", message, { status });
26
+ return new chunkYQL7NISX_cjs.PepuError("WALLET_NOT_PROVISIONED", message, { status });
27
+ }
28
+ async function requestEnsureWallet(o) {
29
+ const token = await o.getAccessToken();
30
+ if (!token) {
31
+ throw new chunkYQL7NISX_cjs.PepuAuthError(
32
+ "AUTH_INVALID_TOKEN",
33
+ "Could not get a Privy access token for this session. Try signing in again."
34
+ );
35
+ }
36
+ const controller = new AbortController();
37
+ const timeoutMs = o.timeoutMs ?? DEFAULT_ENSURE_REQUEST_TIMEOUT_MS;
38
+ let timedOut = false;
39
+ const timer = setTimeout(() => {
40
+ timedOut = true;
41
+ controller.abort();
42
+ }, timeoutMs);
43
+ const onAbort = () => controller.abort();
44
+ o.signal?.addEventListener("abort", onAbort);
45
+ try {
46
+ const doFetch = o.fetch ?? globalThis.fetch;
47
+ let response;
48
+ try {
49
+ response = await doFetch(o.endpoint ?? DEFAULT_ENSURE_ENDPOINT, {
50
+ method: "POST",
51
+ headers: { Authorization: `Bearer ${token}` },
52
+ signal: controller.signal
53
+ });
54
+ } catch (e) {
55
+ if (timedOut) {
56
+ throw new chunkYQL7NISX_cjs.PepuError("WALLET_NOT_PROVISIONED", "Wallet setup timed out. Please try again.", {
57
+ retryable: true,
58
+ cause: e
59
+ });
60
+ }
61
+ throw chunkYQL7NISX_cjs.toPepuError(e, { op: "ensure wallet" });
62
+ }
63
+ const body = await response.json().catch(() => null);
64
+ if (!response.ok) throw errorFromEnsureResponse(response.status, body);
65
+ const address = isRecord(body) ? body["address"] : void 0;
66
+ if (typeof address !== "string" || !/^0x[0-9a-fA-F]{40}$/.test(address)) {
67
+ throw new chunkYQL7NISX_cjs.PepuError("WALLET_NOT_PROVISIONED", "The ensure-wallet route did not return a wallet address.", {
68
+ status: 502
69
+ });
70
+ }
71
+ return { address, created: isRecord(body) && body["created"] === true };
72
+ } finally {
73
+ clearTimeout(timer);
74
+ o.signal?.removeEventListener("abort", onAbort);
75
+ }
76
+ }
77
+
78
+ // src/privy/react.ts
79
+ function composeProviders(layers, leaves = []) {
80
+ return function ComposedProviders({ children }) {
81
+ let node = react.createElement(
82
+ react.Fragment,
83
+ null,
84
+ ...leaves.map((Leaf, i) => react.createElement(Leaf, { key: `leaf-${i}` })),
85
+ children
86
+ );
87
+ for (let i = layers.length - 1; i >= 0; i--) {
88
+ const layer = layers[i];
89
+ if (!layer) continue;
90
+ node = react.createElement(layer[0], layer[1], node);
91
+ }
92
+ return node;
93
+ };
94
+ }
95
+ function PepuPrivyProvider(props) {
96
+ const { appId, config, fallback, wrapper, children } = props;
97
+ if (!appId) {
98
+ return react.createElement(
99
+ react.Fragment,
100
+ null,
101
+ fallback ?? react.createElement(
102
+ "div",
103
+ { role: "alert" },
104
+ `Missing ${chunkC2XW44FI_cjs.PRIVY_ENV.appId}. Set it to your Privy app id and restart the dev server.`
105
+ )
106
+ );
107
+ }
108
+ const inner = wrapper ? react.createElement(wrapper, null, children) : children;
109
+ return react.createElement(reactAuth.PrivyProvider, {
110
+ appId,
111
+ config: chunkNE3QKDOB_cjs.createPepuPrivyConfig(config),
112
+ children: inner
113
+ });
114
+ }
115
+ function useEmbeddedWallet() {
116
+ const { wallets, ready } = reactAuth.useWallets();
117
+ const wallet = reactAuth.getEmbeddedConnectedWallet(wallets);
118
+ const external = wallets.filter((w) => w !== wallet);
119
+ return wallet ? { ready, wallet, address: wallet.address, external } : { ready, wallet: null, external };
120
+ }
121
+ function shouldPinEmbeddedWallet(o) {
122
+ if (!o.enabled || !o.ready || !o.embeddedAddress) return false;
123
+ return o.activeAddress?.toLowerCase() !== o.embeddedAddress.toLowerCase();
124
+ }
125
+ function usePinEmbeddedWallet(o) {
126
+ const { enabled, activeAddress, setActiveWallet } = o;
127
+ const { wallets, ready } = reactAuth.useWallets();
128
+ const embedded = reactAuth.getEmbeddedConnectedWallet(wallets);
129
+ const embeddedAddress = embedded?.address;
130
+ react.useEffect(() => {
131
+ if (!embedded) return;
132
+ if (!shouldPinEmbeddedWallet({ enabled, ready, embeddedAddress, activeAddress })) return;
133
+ void setActiveWallet(embedded);
134
+ }, [enabled, ready, embedded, embeddedAddress, activeAddress, setActiveWallet]);
135
+ }
136
+ function useEnsureWallet(o = {}) {
137
+ const endpoint = o.endpoint ?? DEFAULT_ENSURE_ENDPOINT;
138
+ const requestTimeoutMs = o.requestTimeoutMs ?? DEFAULT_ENSURE_REQUEST_TIMEOUT_MS;
139
+ const appearTimeoutMs = o.appearTimeoutMs ?? DEFAULT_ENSURE_APPEAR_TIMEOUT_MS;
140
+ const { ready: privyReady, authenticated, getAccessToken } = reactAuth.usePrivy();
141
+ const { wallets, ready: walletsReady } = reactAuth.useWallets();
142
+ const { refreshUser } = reactAuth.useUser();
143
+ const [error, setError] = react.useState(null);
144
+ const [requesting, setRequesting] = react.useState(false);
145
+ const [confirmed, setConfirmed] = react.useState(null);
146
+ const [stalled, setStalled] = react.useState(false);
147
+ const [attempt, setAttempt] = react.useState(0);
148
+ const settledFor = react.useRef(-1);
149
+ const getAccessTokenRef = react.useRef(getAccessToken);
150
+ const refreshUserRef = react.useRef(refreshUser);
151
+ getAccessTokenRef.current = getAccessToken;
152
+ refreshUserRef.current = refreshUser;
153
+ const embedded = reactAuth.getEmbeddedConnectedWallet(wallets);
154
+ const hasWallet = embedded !== null;
155
+ react.useEffect(() => {
156
+ if (!privyReady || !authenticated || !walletsReady || hasWallet) return;
157
+ if (settledFor.current === attempt) return;
158
+ let cancelled = false;
159
+ const controller = new AbortController();
160
+ setRequesting(true);
161
+ void (async () => {
162
+ try {
163
+ const { address } = await requestEnsureWallet({
164
+ getAccessToken: () => getAccessTokenRef.current(),
165
+ endpoint,
166
+ timeoutMs: requestTimeoutMs,
167
+ signal: controller.signal
168
+ });
169
+ await refreshUserRef.current();
170
+ if (cancelled) return;
171
+ settledFor.current = attempt;
172
+ setConfirmed(address);
173
+ } catch (e) {
174
+ if (cancelled) return;
175
+ settledFor.current = attempt;
176
+ setError(chunkYQL7NISX_cjs.toPepuError(e, { op: "ensure wallet" }));
177
+ } finally {
178
+ if (!cancelled) setRequesting(false);
179
+ }
180
+ })();
181
+ return () => {
182
+ cancelled = true;
183
+ controller.abort();
184
+ };
185
+ }, [privyReady, authenticated, walletsReady, hasWallet, attempt, endpoint, requestTimeoutMs]);
186
+ react.useEffect(() => {
187
+ if (!confirmed || hasWallet) return;
188
+ const id = setTimeout(() => setStalled(true), appearTimeoutMs);
189
+ return () => {
190
+ clearTimeout(id);
191
+ setStalled(false);
192
+ };
193
+ }, [confirmed, hasWallet, appearTimeoutMs]);
194
+ const retry = react.useCallback(() => {
195
+ setError(null);
196
+ setConfirmed(null);
197
+ setStalled(false);
198
+ setRequesting(false);
199
+ setAttempt((n) => n + 1);
200
+ }, []);
201
+ if (hasWallet) return { status: "ready", address: embedded.address, retry };
202
+ if (!privyReady || !authenticated || !walletsReady) return { status: "idle", retry };
203
+ if (error) return { status: "error", error, retry };
204
+ if (stalled && confirmed) return { status: "stalled", address: confirmed, retry };
205
+ if (confirmed) return { status: "checking", address: confirmed, retry };
206
+ return { status: requesting ? "creating" : "checking", retry };
207
+ }
208
+ function WalletGate(p) {
209
+ const ensure = useEnsureWallet(p.endpoint !== void 0 ? { endpoint: p.endpoint } : {});
210
+ if (ensure.status === "ready") return react.createElement(react.Fragment, null, p.children);
211
+ if (ensure.status === "error" && ensure.error) {
212
+ const { error, retry } = ensure;
213
+ return react.createElement(
214
+ react.Fragment,
215
+ null,
216
+ p.error ? p.error(error, retry) : react.createElement(
217
+ "div",
218
+ { role: "alert" },
219
+ react.createElement("p", null, "Could not create your wallet."),
220
+ react.createElement("p", null, error.message),
221
+ react.createElement("button", { type: "button", onClick: retry }, "Try again")
222
+ )
223
+ );
224
+ }
225
+ if (ensure.status === "stalled" && ensure.address) {
226
+ const a = ensure.address;
227
+ const reload = () => globalThis.location.reload();
228
+ if (p.stalled) return react.createElement(react.Fragment, null, p.stalled(a, reload));
229
+ return react.createElement(
230
+ "div",
231
+ { role: "status" },
232
+ react.createElement("p", null, `Your wallet was created (${a.slice(0, 6)}\u2026${a.slice(-4)}), but it has not appeared in this session yet.`),
233
+ react.createElement("p", null, "This is a client sync delay, not a lost wallet. Reloading usually fixes it."),
234
+ react.createElement("button", { type: "button", onClick: reload }, "Reload")
235
+ );
236
+ }
237
+ return react.createElement(
238
+ react.Fragment,
239
+ null,
240
+ p.loading ?? react.createElement("div", { role: "status", "aria-label": "Loading" }, "Setting up your wallet\u2026")
241
+ );
242
+ }
243
+ function usePepuAuthFetch() {
244
+ const { getAccessToken } = reactAuth.usePrivy();
245
+ return react.useCallback(
246
+ async (input, init) => {
247
+ const token = await getAccessToken();
248
+ if (!token) {
249
+ throw new chunkYQL7NISX_cjs.PepuAuthError(
250
+ "AUTH_INVALID_TOKEN",
251
+ "No Privy access token for this session. Sign in again."
252
+ );
253
+ }
254
+ const headers = new Headers(init?.headers);
255
+ headers.set("Authorization", `Bearer ${token}`);
256
+ return fetch(input, { ...init, headers });
257
+ },
258
+ [getAccessToken]
259
+ );
260
+ }
261
+
262
+ exports.PepuPrivyProvider = PepuPrivyProvider;
263
+ exports.WalletGate = WalletGate;
264
+ exports.composeProviders = composeProviders;
265
+ exports.requestEnsureWallet = requestEnsureWallet;
266
+ exports.shouldPinEmbeddedWallet = shouldPinEmbeddedWallet;
267
+ exports.useEmbeddedWallet = useEmbeddedWallet;
268
+ exports.useEnsureWallet = useEnsureWallet;
269
+ exports.usePepuAuthFetch = usePepuAuthFetch;
270
+ exports.usePinEmbeddedWallet = usePinEmbeddedWallet;
271
+ //# sourceMappingURL=chunk-DH6BFNVJ.cjs.map
272
+ //# sourceMappingURL=chunk-DH6BFNVJ.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/privy/ensure-client.ts","../src/privy/react.ts"],"names":["PEPU_ERROR_CATALOG","message","PepuAuthError","PepuError","toPepuError","createElement","Fragment","PRIVY_ENV","PrivyProvider","createPepuPrivyConfig","useWallets","getEmbeddedConnectedWallet","useEffect","usePrivy","useUser","useState","useRef","useCallback"],"mappings":"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","file":"chunk-DH6BFNVJ.cjs","sourcesContent":["import type { Address } from \"viem\";\nimport { PEPU_ERROR_CATALOG, PepuAuthError, PepuError, toPepuError } from \"../errors.js\";\nimport type { PepuErrorCode } from \"../errors.js\";\n\n/**\n * Framework-free client for the ensure-wallet route. No React, no Privy: the\n * hooks in `./react.ts` wrap it, and tests drive it directly.\n *\n * Ported from templates/consumer-app/components/wallet-gate.tsx (request,\n * timeout and response handling).\n */\n\n/** Default route path, matching `createEnsureWalletRoute()`. */\nexport const DEFAULT_ENSURE_ENDPOINT = \"/api/wallet/ensure\";\n/** Bound on the request itself (consumer-app: ENSURE_REQUEST_TIMEOUT_MS). */\nexport const DEFAULT_ENSURE_REQUEST_TIMEOUT_MS = 20_000;\n/** Bound on waiting for the wallet to show up client-side (consumer-app: APPEAR_IN_CLIENT_TIMEOUT_MS). */\nexport const DEFAULT_ENSURE_APPEAR_TIMEOUT_MS = 8_000;\n\nconst KNOWN_CODES: ReadonlySet<string> = new Set(PEPU_ERROR_CATALOG.map((e) => e.code));\n\nconst isRecord = (v: unknown): v is Record<string, unknown> => typeof v === \"object\" && v !== null;\n\n/**\n * Turn a non-2xx response body into a typed error. Understands the SDK shape\n * `{ error: { code, message, hint } }` and the legacy `{ error: \"text\" }`.\n */\nexport function errorFromEnsureResponse(status: number, body: unknown): PepuError {\n const err = isRecord(body) ? body[\"error\"] : undefined;\n if (isRecord(err)) {\n const code = typeof err[\"code\"] === \"string\" && KNOWN_CODES.has(err[\"code\"]) ? (err[\"code\"] as PepuErrorCode) : \"UNKNOWN\";\n const message = typeof err[\"message\"] === \"string\" ? err[\"message\"] : `Wallet setup failed (HTTP ${status}).`;\n const hint = typeof err[\"hint\"] === \"string\" ? err[\"hint\"] : undefined;\n const opts = { status, ...(hint !== undefined ? { hint } : {}) };\n return status === 401 ? new PepuAuthError(code, message, opts) : new PepuError(code, message, opts);\n }\n const message = typeof err === \"string\" ? err : `Wallet setup failed (HTTP ${status}).`;\n if (status === 401) return new PepuAuthError(\"AUTH_INVALID_TOKEN\", message, { status });\n return new PepuError(\"WALLET_NOT_PROVISIONED\", message, { status });\n}\n\n/**\n * POST to the ensure-wallet route with the user's Privy access token and return\n * the wallet address. Bounded by a timeout. Never leaks the token in errors.\n *\n * @example\n * ```ts\n * const { address } = await requestEnsureWallet({ getAccessToken, endpoint: \"/api/wallet/ensure\" });\n * ```\n */\nexport async function requestEnsureWallet(o: {\n getAccessToken: () => Promise<string | null>;\n endpoint?: string;\n timeoutMs?: number;\n fetch?: typeof fetch;\n signal?: AbortSignal;\n}): Promise<{ address: Address; created: boolean }> {\n const token = await o.getAccessToken();\n if (!token) {\n throw new PepuAuthError(\n \"AUTH_INVALID_TOKEN\",\n \"Could not get a Privy access token for this session. Try signing in again.\",\n );\n }\n const controller = new AbortController();\n const timeoutMs = o.timeoutMs ?? DEFAULT_ENSURE_REQUEST_TIMEOUT_MS;\n let timedOut = false;\n const timer = setTimeout(() => {\n timedOut = true;\n controller.abort();\n }, timeoutMs);\n const onAbort = (): void => controller.abort();\n o.signal?.addEventListener(\"abort\", onAbort);\n try {\n const doFetch = o.fetch ?? globalThis.fetch;\n let response: Response;\n try {\n response = await doFetch(o.endpoint ?? DEFAULT_ENSURE_ENDPOINT, {\n method: \"POST\",\n headers: { Authorization: `Bearer ${token}` },\n signal: controller.signal,\n });\n } catch (e) {\n if (timedOut) {\n throw new PepuError(\"WALLET_NOT_PROVISIONED\", \"Wallet setup timed out. Please try again.\", {\n retryable: true,\n cause: e,\n });\n }\n throw toPepuError(e, { op: \"ensure wallet\" });\n }\n const body: unknown = await response.json().catch(() => null);\n if (!response.ok) throw errorFromEnsureResponse(response.status, body);\n const address = isRecord(body) ? body[\"address\"] : undefined;\n if (typeof address !== \"string\" || !/^0x[0-9a-fA-F]{40}$/.test(address)) {\n throw new PepuError(\"WALLET_NOT_PROVISIONED\", \"The ensure-wallet route did not return a wallet address.\", {\n status: 502,\n });\n }\n return { address: address as Address, created: isRecord(body) && body[\"created\"] === true };\n } finally {\n clearTimeout(timer);\n o.signal?.removeEventListener(\"abort\", onAbort);\n }\n}\n","import { createElement, Fragment, useCallback, useEffect, useRef, useState } from \"react\";\nimport type { ComponentType, ReactElement, ReactNode } from \"react\";\nimport { getEmbeddedConnectedWallet, PrivyProvider, usePrivy, useUser, useWallets } from \"@privy-io/react-auth\";\nimport type { ConnectedWallet, PrivyClientConfig } from \"@privy-io/react-auth\";\nimport type { Address } from \"viem\";\nimport { PepuAuthError, PepuError, toPepuError } from \"../errors.js\";\nimport { createPepuPrivyConfig, PRIVY_ENV } from \"./config.js\";\nimport type { CreatePepuPrivyConfigOptions } from \"./config.js\";\nimport {\n DEFAULT_ENSURE_APPEAR_TIMEOUT_MS,\n DEFAULT_ENSURE_ENDPOINT,\n DEFAULT_ENSURE_REQUEST_TIMEOUT_MS,\n requestEnsureWallet,\n} from \"./ensure-client.js\";\n\n/**\n * `@pepu-chain/sdk/privy/react` (browser). Provider, embedded-wallet\n * detection, wallet provisioning and the gate. Add `\"use client\"` in the file\n * where you import these from a Next.js server component.\n *\n * `react` and `@privy-io/react-auth` are optional peers of this entry only.\n */\n\nexport { requestEnsureWallet } from \"./ensure-client.js\";\n\n// ---------------------------------------------------------------------------\n// Provider\n// ---------------------------------------------------------------------------\n\nexport interface PepuPrivyProviderProps {\n /** Privy app id. When missing, `fallback` renders instead of throwing deep inside Privy. */\n appId: string | undefined;\n /** Overrides for {@link createPepuPrivyConfig}. */\n config?: Partial<CreatePepuPrivyConfigOptions> | undefined;\n /** Shown when `appId` is empty. Defaults to a short notice naming the env variable. */\n fallback?: ReactNode;\n /**\n * Extra providers rendered inside PrivyProvider (used by `/privy/wagmi`).\n * Build one with {@link composeProviders}.\n */\n wrapper?: ComponentType<{ children?: ReactNode }> | undefined;\n children?: ReactNode;\n}\n\n/**\n * Compose providers (outermost first) into one wrapper component, with optional\n * leaf components rendered next to `children` in the innermost position. A\n * building block for `/privy/wagmi`; it keeps `react` imports in this entry.\n *\n * @example\n * ```ts\n * const Wrapper = composeProviders([[QueryClientProvider, { client }]], [MyEffectOnlyComponent]);\n * ```\n */\nexport function composeProviders(\n layers: readonly (readonly [ComponentType<any>, Record<string, unknown>])[], // eslint-disable-line @typescript-eslint/no-explicit-any\n leaves: readonly ComponentType<Record<string, never>>[] = [],\n): ComponentType<{ children?: ReactNode }> {\n return function ComposedProviders({ children }: { children?: ReactNode }): ReactElement {\n let node: ReactElement = createElement(\n Fragment,\n null,\n ...leaves.map((Leaf, i) => createElement(Leaf as ComponentType<{ key?: string }>, { key: `leaf-${i}` })),\n children,\n );\n for (let i = layers.length - 1; i >= 0; i--) {\n const layer = layers[i];\n if (!layer) continue;\n node = createElement(layer[0], layer[1], node);\n }\n return node;\n };\n}\n\n/**\n * `<PrivyProvider>` preconfigured for PEPU: mainnet only, Coinbase pinned to\n * `eoaOnly`, wallet creation off (the server provisions it, see\n * {@link WalletGate}). Renders `fallback` instead of crashing when `appId` is\n * missing.\n *\n * Ported from templates/consumer-app/app/providers.tsx.\n *\n * @example\n * ```tsx\n * <PepuPrivyProvider appId={process.env.NEXT_PUBLIC_PRIVY_APP_ID} config={{ loginMethods: [\"email\", \"google\"] }}>\n * <App />\n * </PepuPrivyProvider>\n * ```\n */\nexport function PepuPrivyProvider(props: PepuPrivyProviderProps): ReactElement {\n const { appId, config, fallback, wrapper, children } = props;\n if (!appId) {\n return createElement(\n Fragment,\n null,\n fallback ??\n createElement(\n \"div\",\n { role: \"alert\" },\n `Missing ${PRIVY_ENV.appId}. Set it to your Privy app id and restart the dev server.`,\n ),\n );\n }\n const inner: ReactNode = wrapper ? createElement(wrapper, null, children) : children;\n return createElement(PrivyProvider, {\n appId,\n config: createPepuPrivyConfig(config) as unknown as PrivyClientConfig,\n children: inner,\n });\n}\n\n// ---------------------------------------------------------------------------\n// Embedded wallet\n// ---------------------------------------------------------------------------\n\n/**\n * This user's Privy embedded wallet, separated from any external wallet Privy\n * is tracking (an installed MetaMask or Phantom). Never re-implements the\n * embedded filter: it calls Privy's `getEmbeddedConnectedWallet`.\n *\n * Ported from templates/consumer-app/lib/wallet.ts (`useWalletSnapshot`).\n *\n * @example\n * ```tsx\n * const { ready, address, external } = useEmbeddedWallet();\n * ```\n */\nexport function useEmbeddedWallet(): {\n ready: boolean;\n wallet: ConnectedWallet | null;\n address?: Address;\n external: ConnectedWallet[];\n} {\n const { wallets, ready } = useWallets();\n const wallet = getEmbeddedConnectedWallet(wallets);\n const external = wallets.filter((w) => w !== wallet);\n return wallet\n ? { ready, wallet, address: wallet.address as Address, external }\n : { ready, wallet: null, external };\n}\n\n/**\n * Pure decision behind the pin hooks: pin only when enabled, hydrated, an\n * embedded wallet exists and the active account is not already it. The address\n * comparison is what prevents a render loop.\n *\n * @example\n * ```ts\n * shouldPinEmbeddedWallet({ enabled: true, ready: true, embeddedAddress: \"0xA\", activeAddress: \"0xB\" }); // true\n * ```\n */\nexport function shouldPinEmbeddedWallet(o: {\n enabled: boolean;\n ready: boolean;\n embeddedAddress: string | undefined;\n activeAddress: string | undefined;\n}): boolean {\n if (!o.enabled || !o.ready || !o.embeddedAddress) return false;\n return o.activeAddress?.toLowerCase() !== o.embeddedAddress.toLowerCase();\n}\n\n/**\n * Generic half of the active-wallet pin: re-asserts the embedded wallet whenever\n * the active account drifts away from it. `useActiveWalletPin` in\n * `/privy/wagmi` supplies wagmi's active address and `setActiveWallet`.\n *\n * Ported from templates/consumer-app/lib/wallet.ts (`useActiveWalletSync`).\n * A user with no embedded wallet is left alone on purpose.\n *\n * @example\n * ```ts\n * usePinEmbeddedWallet({ enabled: true, activeAddress, setActiveWallet });\n * ```\n */\nexport function usePinEmbeddedWallet(o: {\n enabled: boolean;\n activeAddress: string | undefined;\n setActiveWallet: (wallet: ConnectedWallet) => Promise<unknown> | void;\n}): void {\n const { enabled, activeAddress, setActiveWallet } = o;\n const { wallets, ready } = useWallets();\n const embedded = getEmbeddedConnectedWallet(wallets);\n const embeddedAddress = embedded?.address;\n useEffect(() => {\n if (!embedded) return;\n if (!shouldPinEmbeddedWallet({ enabled, ready, embeddedAddress, activeAddress })) return;\n void setActiveWallet(embedded);\n }, [enabled, ready, embedded, embeddedAddress, activeAddress, setActiveWallet]);\n}\n\n// ---------------------------------------------------------------------------\n// Ensure wallet\n// ---------------------------------------------------------------------------\n\ntype FetchInput = Parameters<typeof fetch>[0];\n\nexport type EnsureWalletStatus = \"idle\" | \"checking\" | \"creating\" | \"ready\" | \"stalled\" | \"error\";\n\n/**\n * Provision this user's embedded wallet through the ensure-wallet route (see\n * `createEnsureWalletRoute` in `/privy/server`), not Privy's client-side\n * creation, which hangs for apps with the dashboard's creation setting off.\n * Gates on the EMBEDDED wallet, never on \"any connected wallet\".\n *\n * Ported from templates/consumer-app/components/wallet-gate.tsx.\n *\n * @example\n * ```tsx\n * const { status, address, error, retry } = useEnsureWallet();\n * ```\n */\nexport function useEnsureWallet(o: { endpoint?: string; requestTimeoutMs?: number; appearTimeoutMs?: number } = {}): {\n status: EnsureWalletStatus;\n address?: Address;\n error?: PepuError;\n retry(): void;\n} {\n const endpoint = o.endpoint ?? DEFAULT_ENSURE_ENDPOINT;\n const requestTimeoutMs = o.requestTimeoutMs ?? DEFAULT_ENSURE_REQUEST_TIMEOUT_MS;\n const appearTimeoutMs = o.appearTimeoutMs ?? DEFAULT_ENSURE_APPEAR_TIMEOUT_MS;\n\n const { ready: privyReady, authenticated, getAccessToken } = usePrivy();\n const { wallets, ready: walletsReady } = useWallets();\n const { refreshUser } = useUser();\n\n const [error, setError] = useState<PepuError | null>(null);\n const [requesting, setRequesting] = useState(false);\n const [confirmed, setConfirmed] = useState<Address | null>(null);\n const [stalled, setStalled] = useState(false);\n const [attempt, setAttempt] = useState(0);\n // The attempt number whose request already settled. An unsettled attempt is\n // restarted if the effect re-runs (React StrictMode mounts effects twice), a\n // settled one never is, so a re-render cannot trigger a second POST.\n const settledFor = useRef(-1);\n // Latest Privy callbacks, kept out of the effect deps so a new function\n // identity never cancels an in-flight request.\n const getAccessTokenRef = useRef(getAccessToken);\n const refreshUserRef = useRef(refreshUser);\n getAccessTokenRef.current = getAccessToken;\n refreshUserRef.current = refreshUser;\n\n const embedded = getEmbeddedConnectedWallet(wallets);\n const hasWallet = embedded !== null;\n\n useEffect(() => {\n if (!privyReady || !authenticated || !walletsReady || hasWallet) return;\n if (settledFor.current === attempt) return;\n\n let cancelled = false;\n const controller = new AbortController();\n setRequesting(true);\n void (async () => {\n try {\n const { address } = await requestEnsureWallet({\n getAccessToken: () => getAccessTokenRef.current(),\n endpoint,\n timeoutMs: requestTimeoutMs,\n signal: controller.signal,\n });\n // Pull the server-side change into Privy's client state without a reload.\n await refreshUserRef.current();\n if (cancelled) return;\n settledFor.current = attempt;\n setConfirmed(address);\n } catch (e) {\n if (cancelled) return;\n settledFor.current = attempt;\n setError(toPepuError(e, { op: \"ensure wallet\" }));\n } finally {\n if (!cancelled) setRequesting(false);\n }\n })();\n return () => {\n cancelled = true;\n controller.abort();\n };\n }, [privyReady, authenticated, walletsReady, hasWallet, attempt, endpoint, requestTimeoutMs]);\n\n // Bounded safety net: the server confirmed the wallet, the client never saw it.\n useEffect(() => {\n if (!confirmed || hasWallet) return;\n const id = setTimeout(() => setStalled(true), appearTimeoutMs);\n return () => {\n clearTimeout(id);\n setStalled(false);\n };\n }, [confirmed, hasWallet, appearTimeoutMs]);\n\n const retry = useCallback((): void => {\n setError(null);\n setConfirmed(null);\n setStalled(false);\n setRequesting(false);\n setAttempt((n) => n + 1);\n }, []);\n\n if (hasWallet) return { status: \"ready\", address: embedded.address as Address, retry };\n if (!privyReady || !authenticated || !walletsReady) return { status: \"idle\", retry };\n if (error) return { status: \"error\", error, retry };\n if (stalled && confirmed) return { status: \"stalled\", address: confirmed, retry };\n if (confirmed) return { status: \"checking\", address: confirmed, retry };\n return { status: requesting ? \"creating\" : \"checking\", retry };\n}\n\n/**\n * Renders `children` once the user's embedded wallet exists, provisioning it\n * first through the ensure-wallet route. Shows `loading`, an error (with\n * retry) or a reload prompt when the wallet exists but has not synced yet.\n * Each of the three states takes a render prop (`loading`, `error`, `stalled`)\n * so an app can use the gate directly with its own markup and classes.\n *\n * Ported from templates/consumer-app/components/wallet-gate.tsx.\n *\n * @example\n * ```tsx\n * <WalletGate\n * loading={<Spinner />}\n * error={(e, retry) => <button onClick={retry}>{e.message}</button>}\n * stalled={(address, reload) => <button onClick={reload}>Reload ({address})</button>}\n * >\n * <Dashboard />\n * </WalletGate>\n * ```\n */\nexport function WalletGate(p: {\n endpoint?: string;\n loading?: ReactNode;\n error?: (e: PepuError, retry: () => void) => ReactNode;\n /**\n * The server confirmed the wallet but this session has not seen it after a\n * bounded wait (a client sync delay). `reload` reloads the page.\n */\n stalled?: (address: Address, reload: () => void) => ReactNode;\n children: ReactNode;\n}): ReactElement {\n const ensure = useEnsureWallet(p.endpoint !== undefined ? { endpoint: p.endpoint } : {});\n if (ensure.status === \"ready\") return createElement(Fragment, null, p.children);\n\n if (ensure.status === \"error\" && ensure.error) {\n const { error, retry } = ensure;\n return createElement(\n Fragment,\n null,\n p.error\n ? p.error(error, retry)\n : createElement(\n \"div\",\n { role: \"alert\" },\n createElement(\"p\", null, \"Could not create your wallet.\"),\n createElement(\"p\", null, error.message),\n createElement(\"button\", { type: \"button\", onClick: retry }, \"Try again\"),\n ),\n );\n }\n\n if (ensure.status === \"stalled\" && ensure.address) {\n const a = ensure.address;\n const reload = (): void => (globalThis as unknown as { location: { reload(): void } }).location.reload();\n if (p.stalled) return createElement(Fragment, null, p.stalled(a, reload));\n return createElement(\n \"div\",\n { role: \"status\" },\n createElement(\"p\", null, `Your wallet was created (${a.slice(0, 6)}…${a.slice(-4)}), but it has not appeared in this session yet.`),\n createElement(\"p\", null, \"This is a client sync delay, not a lost wallet. Reloading usually fixes it.\"),\n createElement(\"button\", { type: \"button\", onClick: reload }, \"Reload\"),\n );\n }\n\n return createElement(\n Fragment,\n null,\n p.loading ?? createElement(\"div\", { role: \"status\", \"aria-label\": \"Loading\" }, \"Setting up your wallet…\"),\n );\n}\n\n// ---------------------------------------------------------------------------\n// Authenticated fetch\n// ---------------------------------------------------------------------------\n\n/**\n * A `fetch` that attaches `Authorization: Bearer <Privy access token>`. Throws\n * {@link PepuAuthError} when there is no token (signed out or expired).\n *\n * @example\n * ```tsx\n * const authFetch = usePepuAuthFetch();\n * const res = await authFetch(\"/api/session/status\");\n * ```\n */\nexport function usePepuAuthFetch(): (input: FetchInput, init?: RequestInit) => Promise<Response> {\n const { getAccessToken } = usePrivy();\n return useCallback(\n async (input: FetchInput, init?: RequestInit): Promise<Response> => {\n const token = await getAccessToken();\n if (!token) {\n throw new PepuAuthError(\n \"AUTH_INVALID_TOKEN\",\n \"No Privy access token for this session. Sign in again.\",\n );\n }\n const headers = new Headers(init?.headers);\n headers.set(\"Authorization\", `Bearer ${token}`);\n return fetch(input, { ...init, headers });\n },\n [getAccessToken],\n );\n}\n"]}
@@ -0,0 +1,87 @@
1
+ 'use strict';
2
+
3
+ var viem = require('viem');
4
+
5
+ // src/chains.ts
6
+ var pepuMainnet = /* @__PURE__ */ viem.defineChain({
7
+ id: 97741,
8
+ name: "Pepe Unchained V2",
9
+ nativeCurrency: {
10
+ name: "Pepe Unchained",
11
+ symbol: "PEPU",
12
+ decimals: 18
13
+ },
14
+ rpcUrls: {
15
+ default: {
16
+ http: ["https://rpc-pepu-v2-mainnet-0.t.conduit.xyz"]
17
+ }
18
+ },
19
+ blockExplorers: {
20
+ default: {
21
+ name: "PepuScan",
22
+ url: "https://pepuscan.com",
23
+ apiUrl: "https://pepuscan.com/api"
24
+ }
25
+ },
26
+ contracts: {
27
+ multicall3: {
28
+ address: "0x9CE19273Ae9c24437DFF512E8DFCAed4E4B001bd",
29
+ blockCreated: 10521048
30
+ }
31
+ },
32
+ // IMPORTANT: that Multicall3 address is PEPU-specific and deliberately
33
+ // NOT the canonical 0xcA11bde05977b3631167028862bE2a173976CA11.
34
+ //
35
+ // The canonical address is structurally unreachable on this chain: it
36
+ // was created elsewhere by a pre-signed CREATE transaction carrying a
37
+ // hardcoded 1,000,000 gas limit, and this Arbitrum Nitro chain needs
38
+ // ~14.3M gas for the same bytecode, so that transaction can never
39
+ // execute here. Conduit support confirmed there is no predeploy and
40
+ // that deploying our own is the supported path.
41
+ //
42
+ // Ours was built from the canonical mds1/multicall3 source (solc
43
+ // 0.8.12, optimizer 10,000,000 runs) and deployed through the CREATE2
44
+ // deterministic deployer with a zero salt, so the address is
45
+ // reproducible from the same inputs. It is verified on pepuscan, and
46
+ // viem's `multicall` has been confirmed working against it.
47
+ //
48
+ // Never substitute the canonical address here — viem/wagmi would call
49
+ // an address with no code and every batched read would fail.
50
+ testnet: false
51
+ });
52
+ var pepuTestnet = /* @__PURE__ */ viem.defineChain({
53
+ id: 97740,
54
+ name: "Pepe Unchained V2 Testnet",
55
+ nativeCurrency: {
56
+ name: "Pepe Unchained",
57
+ symbol: "PEPU",
58
+ decimals: 18
59
+ },
60
+ rpcUrls: {
61
+ default: {
62
+ http: ["https://rpc-pepu-v2-testnet-vn4qxxp9og.t.conduit.xyz"]
63
+ }
64
+ },
65
+ // No `blockExplorers` entry: `pepuscan.com` is a Blockscout instance
66
+ // registered against mainnet (chain 97741) specifically. Blockscout
67
+ // instances index one chain each, so pointing the testnet definition at
68
+ // the mainnet explorer would silently produce wrong/empty links for
69
+ // testnet transactions and addresses. No verified Blockscout (or other)
70
+ // explorer for chain 97740 was available at the time this package was
71
+ // written. Add `blockExplorers.default` here once one is confirmed live.
72
+ // See the mainnet definition above: Multicall3 is not deployed at the
73
+ // canonical address on this chain either (no `contracts.multicall3`
74
+ // here), and must not be faked with a placeholder.
75
+ testnet: true
76
+ });
77
+ var pepuChains = [pepuMainnet, pepuTestnet];
78
+ function isPepuChain(chainId) {
79
+ return pepuChains.some((chain) => chain.id === chainId);
80
+ }
81
+
82
+ exports.isPepuChain = isPepuChain;
83
+ exports.pepuChains = pepuChains;
84
+ exports.pepuMainnet = pepuMainnet;
85
+ exports.pepuTestnet = pepuTestnet;
86
+ //# sourceMappingURL=chunk-DPCZJLB3.cjs.map
87
+ //# sourceMappingURL=chunk-DPCZJLB3.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/chains.ts"],"names":["defineChain"],"mappings":";;;;;AAQO,IAAM,8BAA4BA,gBAAA,CAAY;AAAA,EACnD,EAAA,EAAI,KAAA;AAAA,EACJ,IAAA,EAAM,mBAAA;AAAA,EACN,cAAA,EAAgB;AAAA,IACd,IAAA,EAAM,gBAAA;AAAA,IACN,MAAA,EAAQ,MAAA;AAAA,IACR,QAAA,EAAU;AAAA,GACZ;AAAA,EACA,OAAA,EAAS;AAAA,IACP,OAAA,EAAS;AAAA,MACP,IAAA,EAAM,CAAC,6CAA6C;AAAA;AACtD,GACF;AAAA,EACA,cAAA,EAAgB;AAAA,IACd,OAAA,EAAS;AAAA,MACP,IAAA,EAAM,UAAA;AAAA,MACN,GAAA,EAAK,sBAAA;AAAA,MACL,MAAA,EAAQ;AAAA;AACV,GACF;AAAA,EACA,SAAA,EAAW;AAAA,IACT,UAAA,EAAY;AAAA,MACV,OAAA,EAAS,4CAAA;AAAA,MACT,YAAA,EAAc;AAAA;AAChB,GACF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAmBA,OAAA,EAAS;AACX,CAAC;AAOM,IAAM,8BAA4BA,gBAAA,CAAY;AAAA,EACnD,EAAA,EAAI,KAAA;AAAA,EACJ,IAAA,EAAM,2BAAA;AAAA,EACN,cAAA,EAAgB;AAAA,IACd,IAAA,EAAM,gBAAA;AAAA,IACN,MAAA,EAAQ,MAAA;AAAA,IACR,QAAA,EAAU;AAAA,GACZ;AAAA,EACA,OAAA,EAAS;AAAA,IACP,OAAA,EAAS;AAAA,MACP,IAAA,EAAM,CAAC,sDAAsD;AAAA;AAC/D,GACF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAWA,OAAA,EAAS;AACX,CAAC;AAGM,IAAM,UAAA,GAAa,CAAC,WAAA,EAAa,WAAW;AAe5C,SAAS,YAAY,OAAA,EAAyC;AACnE,EAAA,OAAO,WAAW,IAAA,CAAK,CAAC,KAAA,KAAU,KAAA,CAAM,OAAO,OAAO,CAAA;AACxD","file":"chunk-DPCZJLB3.cjs","sourcesContent":["import { defineChain } from \"viem\";\n\n/**\n * Pepe Unchained V2 — mainnet.\n *\n * Arbitrum Orbit / Nitro chain (ArbOS 51), hosted by Conduit, settling to\n * Ethereum L1 via AnyTrust. Verified against the live RPC endpoint.\n */\nexport const pepuMainnet = /*#__PURE__*/ defineChain({\n id: 97741,\n name: \"Pepe Unchained V2\",\n nativeCurrency: {\n name: \"Pepe Unchained\",\n symbol: \"PEPU\",\n decimals: 18,\n },\n rpcUrls: {\n default: {\n http: [\"https://rpc-pepu-v2-mainnet-0.t.conduit.xyz\"],\n },\n },\n blockExplorers: {\n default: {\n name: \"PepuScan\",\n url: \"https://pepuscan.com\",\n apiUrl: \"https://pepuscan.com/api\",\n },\n },\n contracts: {\n multicall3: {\n address: \"0x9CE19273Ae9c24437DFF512E8DFCAed4E4B001bd\",\n blockCreated: 10521048,\n },\n },\n // IMPORTANT: that Multicall3 address is PEPU-specific and deliberately\n // NOT the canonical 0xcA11bde05977b3631167028862bE2a173976CA11.\n //\n // The canonical address is structurally unreachable on this chain: it\n // was created elsewhere by a pre-signed CREATE transaction carrying a\n // hardcoded 1,000,000 gas limit, and this Arbitrum Nitro chain needs\n // ~14.3M gas for the same bytecode, so that transaction can never\n // execute here. Conduit support confirmed there is no predeploy and\n // that deploying our own is the supported path.\n //\n // Ours was built from the canonical mds1/multicall3 source (solc\n // 0.8.12, optimizer 10,000,000 runs) and deployed through the CREATE2\n // deterministic deployer with a zero salt, so the address is\n // reproducible from the same inputs. It is verified on pepuscan, and\n // viem's `multicall` has been confirmed working against it.\n //\n // Never substitute the canonical address here — viem/wagmi would call\n // an address with no code and every batched read would fail.\n testnet: false,\n});\n\n/**\n * Pepe Unchained V2 — testnet.\n *\n * Same stack as mainnet; used for development and faucet-funded testing.\n */\nexport const pepuTestnet = /*#__PURE__*/ defineChain({\n id: 97740,\n name: \"Pepe Unchained V2 Testnet\",\n nativeCurrency: {\n name: \"Pepe Unchained\",\n symbol: \"PEPU\",\n decimals: 18,\n },\n rpcUrls: {\n default: {\n http: [\"https://rpc-pepu-v2-testnet-vn4qxxp9og.t.conduit.xyz\"],\n },\n },\n // No `blockExplorers` entry: `pepuscan.com` is a Blockscout instance\n // registered against mainnet (chain 97741) specifically. Blockscout\n // instances index one chain each, so pointing the testnet definition at\n // the mainnet explorer would silently produce wrong/empty links for\n // testnet transactions and addresses. No verified Blockscout (or other)\n // explorer for chain 97740 was available at the time this package was\n // written. Add `blockExplorers.default` here once one is confirmed live.\n // See the mainnet definition above: Multicall3 is not deployed at the\n // canonical address on this chain either (no `contracts.multicall3`\n // here), and must not be faked with a placeholder.\n testnet: true,\n});\n\n/** All Pepe Unchained V2 chain definitions, mainnet first. */\nexport const pepuChains = [pepuMainnet, pepuTestnet] as const;\n\n/** Union type of the two Pepe Unchained V2 chain definitions. */\nexport type PepuChain = (typeof pepuChains)[number];\n\n/** The chain ids this package knows about — {@link pepuMainnet}'s and {@link pepuTestnet}'s. */\nexport type PepuChainId = PepuChain[\"id\"];\n\n/**\n * Type guard: is `chainId` one of PEPU's chain ids (mainnet `97741` or\n * testnet `97740`)? Narrows `number` to {@link PepuChainId}, so a caller can\n * use it to guard which chain-specific helper (`getContract`,\n * `explorerUrl`, etc.) is safe to call without re-deriving the id list by\n * hand each time.\n */\nexport function isPepuChain(chainId: number): chainId is PepuChainId {\n return pepuChains.some((chain) => chain.id === chainId);\n}\n"]}