@renown/sdk 6.2.2-dev.22 → 6.2.2-dev.24

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 (65) hide show
  1. package/README.md +58 -26
  2. package/dist/crypto.d.ts +2 -2
  3. package/dist/{index-25fTa4yI.d.ts → index-CLJb-Nle.d.ts} +2 -2
  4. package/dist/{index-25fTa4yI.d.ts.map → index-CLJb-Nle.d.ts.map} +1 -1
  5. package/dist/index.d.ts +4 -4
  6. package/dist/index.d.ts.map +1 -1
  7. package/dist/index.js +3 -2
  8. package/dist/index.js.map +1 -1
  9. package/dist/meta-BIIw0yao.d.ts +16 -0
  10. package/dist/meta-BIIw0yao.d.ts.map +1 -0
  11. package/dist/meta-ClnkfLQZ.js +27 -0
  12. package/dist/meta-ClnkfLQZ.js.map +1 -0
  13. package/dist/meta-DEiGzvRl.d.ts +14 -0
  14. package/dist/meta-DEiGzvRl.d.ts.map +1 -0
  15. package/dist/meta-DoUiCChW.d.ts +19 -0
  16. package/dist/meta-DoUiCChW.d.ts.map +1 -0
  17. package/dist/meta-v66wx9x-.js +31 -0
  18. package/dist/meta-v66wx9x-.js.map +1 -0
  19. package/dist/node.d.ts +3 -46
  20. package/dist/node.d.ts.map +1 -1
  21. package/dist/node.js +17 -8
  22. package/dist/node.js.map +1 -1
  23. package/dist/{renown-builder-BqWoYtBR.js → renown-builder-1WTEoRc6.js} +24 -1
  24. package/dist/{renown-builder-BqWoYtBR.js.map → renown-builder-1WTEoRc6.js.map} +1 -1
  25. package/dist/types-DiIZNA8t.js +20 -0
  26. package/dist/types-DiIZNA8t.js.map +1 -0
  27. package/dist/{types-Z6jyeonm.d.ts → types-DteAE_lL.d.ts} +23 -18
  28. package/dist/types-DteAE_lL.d.ts.map +1 -0
  29. package/dist/{types-DsF91dDF.d.ts → types-efrA0fu2.d.ts} +6 -4
  30. package/dist/{types-DsF91dDF.d.ts.map → types-efrA0fu2.d.ts.map} +1 -1
  31. package/dist/{utils-OOrVXHof.d.ts → utils-BuICPHTW.d.ts} +51 -3
  32. package/dist/utils-BuICPHTW.d.ts.map +1 -0
  33. package/dist/wallet/index.d.ts +4 -26
  34. package/dist/wallet/index.d.ts.map +1 -1
  35. package/dist/wallet/index.js +20 -64
  36. package/dist/wallet/index.js.map +1 -1
  37. package/dist/wallet/mock/factory.d.ts +9 -0
  38. package/dist/wallet/mock/factory.d.ts.map +1 -0
  39. package/dist/wallet/mock/factory.js +35 -0
  40. package/dist/wallet/mock/factory.js.map +1 -0
  41. package/dist/wallet/mock/index.d.ts +5 -14
  42. package/dist/wallet/mock/index.d.ts.map +1 -1
  43. package/dist/wallet/mock/index.js +9 -31
  44. package/dist/wallet/mock/index.js.map +1 -1
  45. package/dist/wallet/privy/factory.d.ts +58 -0
  46. package/dist/wallet/privy/factory.d.ts.map +1 -0
  47. package/dist/wallet/privy/factory.js +218 -0
  48. package/dist/wallet/privy/factory.js.map +1 -0
  49. package/dist/wallet/privy/index.d.ts +5 -59
  50. package/dist/wallet/privy/index.d.ts.map +1 -1
  51. package/dist/wallet/privy/index.js +9 -223
  52. package/dist/wallet/privy/index.js.map +1 -1
  53. package/dist/wallet/rainbow/factory.d.ts +7 -0
  54. package/dist/wallet/rainbow/factory.d.ts.map +1 -0
  55. package/dist/wallet/rainbow/factory.js +216 -0
  56. package/dist/wallet/rainbow/factory.js.map +1 -0
  57. package/dist/wallet/rainbow/index.d.ts +6 -11
  58. package/dist/wallet/rainbow/index.d.ts.map +1 -1
  59. package/dist/wallet/rainbow/index.js +13 -210
  60. package/dist/wallet/rainbow/index.js.map +1 -1
  61. package/package.json +21 -2
  62. package/dist/types-DG816Qa8.js +0 -27
  63. package/dist/types-DG816Qa8.js.map +0 -1
  64. package/dist/types-Z6jyeonm.d.ts.map +0 -1
  65. package/dist/utils-OOrVXHof.d.ts.map +0 -1
@@ -0,0 +1,216 @@
1
+ "use client";
2
+ import { n as normalizeWalletTheme, t as LoginMethod } from "../../types-DiIZNA8t.js";
3
+ import "@rainbow-me/rainbowkit/styles.css";
4
+ import { QueryClient, QueryClientProvider } from "@tanstack/react-query";
5
+ import { disconnect, getAccount, signTypedData, watchAccount } from "wagmi/actions";
6
+ import { RainbowKitProvider, darkTheme, getDefaultConfig, getDefaultWallets, lightTheme, useConnectModal } from "@rainbow-me/rainbowkit";
7
+ import { useEffect, useMemo, useRef } from "react";
8
+ import { WagmiProvider, http } from "wagmi";
9
+ import { arbitrum, base, mainnet, optimism, polygon, sepolia } from "wagmi/chains";
10
+ import { jsx, jsxs } from "react/jsx-runtime";
11
+ //#region src/wallet/rainbow/bridge.tsx
12
+ const useConnectModal$1 = useConnectModal;
13
+ function createRainbowBridge() {
14
+ let openConnectModal = null;
15
+ let pendingReject = null;
16
+ let readyWaiters = [];
17
+ return {
18
+ getOpenConnectModal: () => openConnectModal,
19
+ setOpenConnectModal: (open) => {
20
+ openConnectModal = open;
21
+ if (open && readyWaiters.length) {
22
+ const waiters = readyWaiters;
23
+ readyWaiters = [];
24
+ for (const resolve of waiters) resolve(open);
25
+ }
26
+ },
27
+ whenOpenConnectModalReady: (timeoutMs = 8e3) => {
28
+ if (openConnectModal) return Promise.resolve(openConnectModal);
29
+ return new Promise((resolve, reject) => {
30
+ const waiter = (open) => {
31
+ clearTimeout(timer);
32
+ resolve(open);
33
+ };
34
+ const timer = setTimeout(() => {
35
+ readyWaiters = readyWaiters.filter((w) => w !== waiter);
36
+ reject(/* @__PURE__ */ new Error("rainbow adapter: connect modal unavailable. Ensure the adapter Provider is mounted."));
37
+ }, timeoutMs);
38
+ readyWaiters.push(waiter);
39
+ });
40
+ },
41
+ setPendingReject: (reject) => {
42
+ pendingReject = reject;
43
+ },
44
+ handleModalClosed: () => {
45
+ const reject = pendingReject;
46
+ pendingReject = null;
47
+ if (reject) reject(/* @__PURE__ */ new Error("Login cancelled by user"));
48
+ }
49
+ };
50
+ }
51
+ function RainbowAdapterBridge({ bridge }) {
52
+ const { openConnectModal, connectModalOpen } = useConnectModal$1();
53
+ const wasOpen = useRef(false);
54
+ useEffect(() => {
55
+ bridge.setOpenConnectModal(openConnectModal ?? null);
56
+ return () => bridge.setOpenConnectModal(null);
57
+ }, [bridge, openConnectModal]);
58
+ useEffect(() => {
59
+ if (connectModalOpen) {
60
+ wasOpen.current = true;
61
+ return;
62
+ }
63
+ if (wasOpen.current) {
64
+ wasOpen.current = false;
65
+ bridge.handleModalClosed();
66
+ }
67
+ }, [bridge, connectModalOpen]);
68
+ return null;
69
+ }
70
+ //#endregion
71
+ //#region src/wallet/rainbow/config.ts
72
+ const getDefaultConfig$1 = getDefaultConfig;
73
+ const getDefaultWallets$1 = getDefaultWallets;
74
+ function walletsWithoutWalletConnect() {
75
+ return getDefaultWallets$1().wallets.map((group) => ({
76
+ ...group,
77
+ wallets: group.wallets.filter((w) => w.name !== "walletConnectWallet")
78
+ })).filter((group) => group.wallets.length > 0);
79
+ }
80
+ function buildWagmiConfig(config) {
81
+ const { walletConnectProjectId, infuraProjectId, appName = "Renown", ssr } = config;
82
+ if (!walletConnectProjectId) console.debug("renown rainbow adapter: walletConnectProjectId is not set — hiding the WalletConnect option; only injected/browser wallets are offered.");
83
+ const infuraUrl = (subdomain) => infuraProjectId ? `https://${subdomain}.infura.io/v3/${infuraProjectId}` : void 0;
84
+ return getDefaultConfig$1({
85
+ appName,
86
+ projectId: walletConnectProjectId || "MISSING_WALLET_CONNECT_PROJECT_ID",
87
+ chains: [
88
+ mainnet,
89
+ sepolia,
90
+ polygon,
91
+ optimism,
92
+ arbitrum,
93
+ base
94
+ ],
95
+ ssr,
96
+ ...walletConnectProjectId ? {} : { wallets: walletsWithoutWalletConnect() },
97
+ transports: {
98
+ [mainnet.id]: http(infuraUrl("mainnet")),
99
+ [sepolia.id]: http(infuraUrl("sepolia")),
100
+ [polygon.id]: http(infuraUrl("polygon-mainnet")),
101
+ [optimism.id]: http(infuraUrl("optimism-mainnet")),
102
+ [arbitrum.id]: http(infuraUrl("arbitrum-mainnet")),
103
+ [base.id]: http(infuraUrl("base-mainnet"))
104
+ }
105
+ });
106
+ }
107
+ //#endregion
108
+ //#region src/wallet/rainbow/provider.tsx
109
+ const lightTheme$1 = lightTheme;
110
+ const darkTheme$1 = darkTheme;
111
+ const RainbowKitProvider$1 = RainbowKitProvider;
112
+ function buildRainbowKitTheme(theme) {
113
+ const { mode, accentColor, accentColorForeground } = normalizeWalletTheme(theme);
114
+ const options = {
115
+ accentColor,
116
+ accentColorForeground,
117
+ borderRadius: "medium",
118
+ fontStack: "system",
119
+ overlayBlur: "small"
120
+ };
121
+ return mode === "dark" ? darkTheme$1(options) : lightTheme$1(options);
122
+ }
123
+ function createRainbowProvider(options) {
124
+ const { wagmiConfig, queryClient, bridge, appName } = options;
125
+ return function RainbowAuthProvider({ children, theme }) {
126
+ const rainbowKitTheme = useMemo(() => buildRainbowKitTheme(theme), [theme]);
127
+ return /* @__PURE__ */ jsx(WagmiProvider, {
128
+ config: wagmiConfig,
129
+ children: /* @__PURE__ */ jsx(QueryClientProvider, {
130
+ client: queryClient,
131
+ children: /* @__PURE__ */ jsxs(RainbowKitProvider$1, {
132
+ appInfo: { appName },
133
+ theme: rainbowKitTheme,
134
+ children: [/* @__PURE__ */ jsx(RainbowAdapterBridge, { bridge }), children]
135
+ })
136
+ })
137
+ });
138
+ };
139
+ }
140
+ //#endregion
141
+ //#region src/wallet/rainbow/factory.ts
142
+ function makeSignTypedData(config, address) {
143
+ return (args) => signTypedData(config, {
144
+ account: address,
145
+ domain: args.domain,
146
+ types: args.types,
147
+ primaryType: args.primaryType,
148
+ message: args.message
149
+ });
150
+ }
151
+ function toSession(config, account) {
152
+ return {
153
+ address: account.address,
154
+ chainId: account.chainId,
155
+ signTypedData: makeSignTypedData(config, account.address)
156
+ };
157
+ }
158
+ function createRainbowAdapter(config) {
159
+ const wagmiConfig = buildWagmiConfig(config);
160
+ const queryClient = new QueryClient();
161
+ const bridge = createRainbowBridge();
162
+ const Provider = createRainbowProvider({
163
+ wagmiConfig,
164
+ queryClient,
165
+ bridge,
166
+ appName: config.appName ?? "Renown"
167
+ });
168
+ const controller = {
169
+ getSession() {
170
+ const account = getAccount(wagmiConfig);
171
+ return account.status === "connected" ? toSession(wagmiConfig, account) : void 0;
172
+ },
173
+ async disconnect() {
174
+ await disconnect(wagmiConfig);
175
+ },
176
+ connect(method) {
177
+ if (method && method !== LoginMethod.WALLET) return Promise.reject(/* @__PURE__ */ new Error(`rainbow adapter does not support login method "${method}"`));
178
+ const existing = getAccount(wagmiConfig);
179
+ if (existing.status === "connected") return Promise.resolve(toSession(wagmiConfig, existing));
180
+ return new Promise((resolve, reject) => {
181
+ const unwatch = watchAccount(wagmiConfig, { onChange(account) {
182
+ if (account.status === "connected") {
183
+ unwatch();
184
+ bridge.setPendingReject(null);
185
+ resolve(toSession(wagmiConfig, account));
186
+ }
187
+ } });
188
+ bridge.setPendingReject((error) => {
189
+ unwatch();
190
+ reject(error);
191
+ });
192
+ bridge.whenOpenConnectModalReady().then((open) => {
193
+ try {
194
+ open();
195
+ } catch (error) {
196
+ unwatch();
197
+ bridge.setPendingReject(null);
198
+ reject(error instanceof Error ? error : new Error(String(error)));
199
+ }
200
+ }, (error) => {
201
+ unwatch();
202
+ bridge.setPendingReject(null);
203
+ reject(error instanceof Error ? error : new Error(String(error)));
204
+ });
205
+ });
206
+ }
207
+ };
208
+ return {
209
+ Provider,
210
+ useController: () => controller
211
+ };
212
+ }
213
+ //#endregion
214
+ export { createRainbowAdapter };
215
+
216
+ //# sourceMappingURL=factory.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"factory.js","names":["useConnectModal","rainbowUseConnectModal","getDefaultConfig","rainbowGetDefaultConfig","getDefaultWallets","rainbowGetDefaultWallets","lightTheme","rainbowLightTheme","darkTheme","rainbowDarkTheme","RainbowKitProvider","RainbowKitProviderRaw","wagmiSignTypedData","wagmiDisconnect"],"sources":["../../../src/wallet/rainbow/bridge.tsx","../../../src/wallet/rainbow/config.ts","../../../src/wallet/rainbow/provider.tsx","../../../src/wallet/rainbow/factory.ts"],"sourcesContent":["import { useConnectModal as rainbowUseConnectModal } from \"@rainbow-me/rainbowkit\";\nimport { useEffect, useRef } from \"react\";\n\n// RainbowKit ships types via an exports map with no \"types\" condition, so\n// type-aware lint sees it as error-typed; assert the shape we rely on.\nconst useConnectModal = rainbowUseConnectModal as () => {\n openConnectModal: (() => void) | undefined;\n connectModalOpen: boolean;\n};\n\n// Imperative handle the controller reads across the React boundary: the bridge\n// component feeds it RainbowKit's modal opener and pending-login cancellation.\nexport interface RainbowBridge {\n getOpenConnectModal: () => (() => void) | null;\n setOpenConnectModal: (open: (() => void) | null) => void;\n /** Resolve once the modal opener is published, or reject after `timeoutMs`. */\n whenOpenConnectModalReady: (timeoutMs?: number) => Promise<() => void>;\n setPendingReject: (reject: ((error: Error) => void) | null) => void;\n handleModalClosed: () => void;\n}\n\n// Plain-JS bridge (created outside React) so effects only call its methods\n// rather than mutating a prop, satisfying the react-hooks immutability rule.\nexport function createRainbowBridge(): RainbowBridge {\n let openConnectModal: (() => void) | null = null;\n let pendingReject: ((error: Error) => void) | null = null;\n // connect() may fire before the RainbowKit Provider's effect publishes the\n // opener (wagmi reconnect / StrictMode double-invoke); these waiters bridge it.\n let readyWaiters: Array<(open: () => void) => void> = [];\n return {\n getOpenConnectModal: () => openConnectModal,\n setOpenConnectModal: (open) => {\n openConnectModal = open;\n if (open && readyWaiters.length) {\n const waiters = readyWaiters;\n readyWaiters = [];\n for (const resolve of waiters) resolve(open);\n }\n },\n whenOpenConnectModalReady: (timeoutMs = 8000) => {\n if (openConnectModal) return Promise.resolve(openConnectModal);\n return new Promise<() => void>((resolve, reject) => {\n const waiter = (open: () => void) => {\n clearTimeout(timer);\n resolve(open);\n };\n const timer = setTimeout(() => {\n readyWaiters = readyWaiters.filter((w) => w !== waiter);\n reject(\n new Error(\n \"rainbow adapter: connect modal unavailable. Ensure the adapter Provider is mounted.\",\n ),\n );\n }, timeoutMs);\n readyWaiters.push(waiter);\n });\n },\n setPendingReject: (reject) => {\n pendingReject = reject;\n },\n handleModalClosed: () => {\n const reject = pendingReject;\n pendingReject = null;\n if (reject) reject(new Error(\"Login cancelled by user\"));\n },\n };\n}\n\n// Wires RainbowKit's useConnectModal into the bridge so the controller's\n// connect() can open the React-only modal, and cancels on modal dismissal.\nexport function RainbowAdapterBridge({ bridge }: { bridge: RainbowBridge }) {\n const { openConnectModal, connectModalOpen } = useConnectModal();\n const wasOpen = useRef(false);\n\n useEffect(() => {\n bridge.setOpenConnectModal(openConnectModal ?? null);\n return () => bridge.setOpenConnectModal(null);\n }, [bridge, openConnectModal]);\n\n useEffect(() => {\n if (connectModalOpen) {\n wasOpen.current = true;\n return;\n }\n if (wasOpen.current) {\n wasOpen.current = false;\n bridge.handleModalClosed();\n }\n }, [bridge, connectModalOpen]);\n\n return null;\n}\n","import {\n getDefaultConfig as rainbowGetDefaultConfig,\n getDefaultWallets as rainbowGetDefaultWallets,\n} from \"@rainbow-me/rainbowkit\";\nimport { http, type Config } from \"wagmi\";\nimport {\n arbitrum,\n base,\n mainnet,\n optimism,\n polygon,\n sepolia,\n} from \"wagmi/chains\";\nimport type { PHRenownRainbowAdapterConfig } from \"./meta.js\";\n\n// RainbowKit ships types via an exports map with no \"types\" condition, so\n// type-aware lint sees them as error-typed; assert the shapes we rely on.\ntype WalletCreator = { name?: string };\ntype WalletGroup = { groupName: string; wallets: WalletCreator[] };\nconst getDefaultConfig = rainbowGetDefaultConfig as (params: {\n appName: string;\n projectId: string;\n chains: readonly [unknown, ...unknown[]];\n wallets?: WalletGroup[];\n transports: Record<number, unknown>;\n ssr?: boolean;\n}) => Config;\nconst getDefaultWallets = rainbowGetDefaultWallets as () => {\n wallets: WalletGroup[];\n};\n\n// RainbowKit's default wallet list minus the WalletConnect option, used when no\n// project id is set (WalletConnect can't work without one; injected wallets do).\nfunction walletsWithoutWalletConnect(): WalletGroup[] {\n return getDefaultWallets()\n .wallets.map((group) => ({\n ...group,\n wallets: group.wallets.filter((w) => w.name !== \"walletConnectWallet\"),\n }))\n .filter((group) => group.wallets.length > 0);\n}\n\n// Build the wagmi + RainbowKit config from operator-provided project ids.\n// Ported from renown/utils/wagmi.ts (env vars replaced by config fields).\nexport function buildWagmiConfig(config: PHRenownRainbowAdapterConfig): Config {\n const {\n walletConnectProjectId,\n infuraProjectId,\n appName = \"Renown\",\n ssr,\n } = config;\n\n if (!walletConnectProjectId) {\n console.debug(\n \"renown rainbow adapter: walletConnectProjectId is not set — hiding the WalletConnect option; only injected/browser wallets are offered.\",\n );\n }\n\n const infuraUrl = (subdomain: string) =>\n infuraProjectId\n ? `https://${subdomain}.infura.io/v3/${infuraProjectId}`\n : undefined;\n\n return getDefaultConfig({\n appName,\n projectId: walletConnectProjectId || \"MISSING_WALLET_CONNECT_PROJECT_ID\",\n chains: [mainnet, sepolia, polygon, optimism, arbitrum, base],\n // On SSR hosts wagmi's Hydrate defers reconnect to an effect; without it that\n // runs during render, which setState-in-render warns via RainbowKit's modal.\n ssr,\n // Omit `wallets` to keep RainbowKit's default set when a project id exists;\n // otherwise drop only the WalletConnect option from that default set.\n ...(walletConnectProjectId\n ? {}\n : { wallets: walletsWithoutWalletConnect() }),\n transports: {\n [mainnet.id]: http(infuraUrl(\"mainnet\")),\n [sepolia.id]: http(infuraUrl(\"sepolia\")),\n [polygon.id]: http(infuraUrl(\"polygon-mainnet\")),\n [optimism.id]: http(infuraUrl(\"optimism-mainnet\")),\n [arbitrum.id]: http(infuraUrl(\"arbitrum-mainnet\")),\n [base.id]: http(infuraUrl(\"base-mainnet\")),\n },\n });\n}\n","import {\n RainbowKitProvider as RainbowKitProviderRaw,\n darkTheme as rainbowDarkTheme,\n lightTheme as rainbowLightTheme,\n} from \"@rainbow-me/rainbowkit\";\nimport type { QueryClient } from \"@tanstack/react-query\";\nimport { QueryClientProvider } from \"@tanstack/react-query\";\nimport { useMemo, type ComponentType, type ReactNode } from \"react\";\nimport { WagmiProvider, type Config } from \"wagmi\";\nimport { normalizeWalletTheme, type WalletTheme } from \"../types.js\";\nimport { RainbowAdapterBridge, type RainbowBridge } from \"./bridge.js\";\n\n// RainbowKit ships types via an exports map with no \"types\" condition, so\n// type-aware lint sees them as error-typed; assert the shapes we rely on.\ntype RainbowKitTheme = Record<string, unknown>;\ninterface RainbowThemeOptions {\n accentColor?: string;\n accentColorForeground?: string;\n borderRadius?: \"none\" | \"small\" | \"medium\" | \"large\";\n fontStack?: \"rounded\" | \"system\";\n overlayBlur?: \"none\" | \"small\" | \"large\";\n}\nconst lightTheme = rainbowLightTheme as (\n options?: RainbowThemeOptions,\n) => RainbowKitTheme;\nconst darkTheme = rainbowDarkTheme as (\n options?: RainbowThemeOptions,\n) => RainbowKitTheme;\nconst RainbowKitProvider = RainbowKitProviderRaw as ComponentType<{\n appInfo?: { appName?: string };\n theme?: RainbowKitTheme;\n children?: ReactNode;\n}>;\n\n// Map the host theme to a RainbowKit theme: light/dark scheme plus the accent\n// colors the host passes in (omitted colors fall back to RainbowKit defaults).\nfunction buildRainbowKitTheme(theme: WalletTheme | undefined): RainbowKitTheme {\n const { mode, accentColor, accentColorForeground } =\n normalizeWalletTheme(theme);\n const options: RainbowThemeOptions = {\n accentColor,\n accentColorForeground,\n borderRadius: \"medium\",\n fontStack: \"system\",\n overlayBlur: \"small\",\n };\n return mode === \"dark\" ? darkTheme(options) : lightTheme(options);\n}\n\n// Build the adapter Provider: mounts wagmi + react-query + RainbowKit and the\n// bridge, so useController() (called under it) can drive the connect modal.\nexport function createRainbowProvider(options: {\n wagmiConfig: Config;\n queryClient: QueryClient;\n bridge: RainbowBridge;\n appName: string;\n}): ComponentType<{ children: ReactNode; theme?: WalletTheme }> {\n const { wagmiConfig, queryClient, bridge, appName } = options;\n\n return function RainbowAuthProvider({\n children,\n theme,\n }: {\n children: ReactNode;\n theme?: WalletTheme;\n }) {\n const rainbowKitTheme = useMemo(() => buildRainbowKitTheme(theme), [theme]);\n return (\n <WagmiProvider config={wagmiConfig}>\n <QueryClientProvider client={queryClient}>\n <RainbowKitProvider appInfo={{ appName }} theme={rainbowKitTheme}>\n <RainbowAdapterBridge bridge={bridge} />\n {children}\n </RainbowKitProvider>\n </QueryClientProvider>\n </WagmiProvider>\n );\n };\n}\n","// Renders React (RainbowKitProvider + wagmi hooks), so RSC hosts must treat this\n// as a client module even though the descriptor entry reaches it lazily.\n\"use client\";\n\n// RainbowKit's modal styles; without them the connect modal renders unstyled.\n// Loaded lazily with this adapter, so it costs nothing until it's activated.\nimport \"@rainbow-me/rainbowkit/styles.css\";\nimport { QueryClient } from \"@tanstack/react-query\";\nimport type { Config } from \"wagmi\";\nimport {\n disconnect as wagmiDisconnect,\n getAccount,\n signTypedData as wagmiSignTypedData,\n watchAccount,\n type GetAccountReturnType,\n} from \"wagmi/actions\";\nimport type { SignCredentialTypedData } from \"../../credential.js\";\nimport {\n LoginMethod,\n type WalletAdapterImpl,\n type WalletController,\n type WalletSession,\n} from \"../types.js\";\nimport { createRainbowBridge } from \"./bridge.js\";\nimport { buildWagmiConfig } from \"./config.js\";\nimport type { PHRenownRainbowAdapterConfig } from \"./meta.js\";\nimport { createRainbowProvider } from \"./provider.js\";\n\ntype ConnectedAccount = Extract<GetAccountReturnType, { status: \"connected\" }>;\n\n// Wagmi actions accept the broader viem typed-data shape; buildAndSignCredential\n// already strips EIP712Domain, so viem derives the domain type from `domain`.\nfunction makeSignTypedData(\n config: Config,\n address: `0x${string}`,\n): SignCredentialTypedData {\n return (args) =>\n wagmiSignTypedData(config, {\n account: address,\n domain: args.domain,\n types: args.types as Record<\n string,\n readonly { name: string; type: string }[]\n >,\n primaryType: args.primaryType,\n message: args.message,\n });\n}\n\nfunction toSession(config: Config, account: ConnectedAccount): WalletSession {\n return {\n address: account.address,\n chainId: account.chainId,\n signTypedData: makeSignTypedData(config, account.address),\n };\n}\n\n// wagmi + RainbowKit external-wallet adapter. connect() opens the RainbowKit\n// modal and resolves once wagmi reports a connected account.\nexport function createRainbowAdapter(\n config: PHRenownRainbowAdapterConfig,\n): WalletAdapterImpl {\n const wagmiConfig = buildWagmiConfig(config);\n const queryClient = new QueryClient();\n const bridge = createRainbowBridge();\n const appName = config.appName ?? \"Renown\";\n\n const Provider = createRainbowProvider({\n wagmiConfig,\n queryClient,\n bridge,\n appName,\n });\n\n const controller: WalletController = {\n getSession() {\n const account = getAccount(wagmiConfig);\n return account.status === \"connected\"\n ? toSession(wagmiConfig, account)\n : undefined;\n },\n async disconnect() {\n await wagmiDisconnect(wagmiConfig);\n },\n connect(method?: LoginMethod) {\n if (method && method !== LoginMethod.WALLET) {\n return Promise.reject(\n new Error(\n `rainbow adapter does not support login method \"${method}\"`,\n ),\n );\n }\n\n const existing = getAccount(wagmiConfig);\n if (existing.status === \"connected\") {\n return Promise.resolve(toSession(wagmiConfig, existing));\n }\n\n return new Promise<WalletSession>((resolve, reject) => {\n const unwatch = watchAccount(wagmiConfig, {\n onChange(account) {\n if (account.status === \"connected\") {\n unwatch();\n bridge.setPendingReject(null);\n resolve(toSession(wagmiConfig, account));\n }\n },\n });\n bridge.setPendingReject((error) => {\n unwatch();\n reject(error);\n });\n // Wait for the RainbowKit Provider to publish the modal opener (it can\n // lag connect() during wagmi reconnect / StrictMode remount), then open.\n bridge.whenOpenConnectModalReady().then(\n (open) => {\n try {\n open();\n } catch (error) {\n unwatch();\n bridge.setPendingReject(null);\n reject(error instanceof Error ? error : new Error(String(error)));\n }\n },\n (error: unknown) => {\n unwatch();\n bridge.setPendingReject(null);\n reject(error instanceof Error ? error : new Error(String(error)));\n },\n );\n });\n },\n };\n\n return { Provider, useController: () => controller };\n}\n"],"mappings":"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"}
@@ -1,14 +1,9 @@
1
- import { i as WalletAdapter } from "../../types-Z6jyeonm.js";
2
- //#region src/wallet/rainbow/config.d.ts
3
- interface PHRenownRainbowAdapterConfig {
4
- walletConnectProjectId?: string;
5
- infuraProjectId?: string;
6
- appName?: string;
7
- ssr?: boolean;
8
- }
9
- //#endregion
1
+ import { r as WalletAdapterDescriptor } from "../../types-DteAE_lL.js";
2
+ import { n as RAINBOW_METHODS, r as rainbowAdapterMeta, t as PHRenownRainbowAdapterConfig } from "../../meta-DEiGzvRl.js";
3
+
10
4
  //#region src/wallet/rainbow/index.d.ts
11
- declare function createRainbowAdapter(config: PHRenownRainbowAdapterConfig): WalletAdapter;
5
+ /** RainbowKit + wagmi wallet adapter (external / injected wallets) for `RenownWalletProvider`. Importing this module loads no wallet library — `@rainbow-me/rainbowkit`, `wagmi` and `@tanstack/react-query` are fetched by `load()` on the first login click — but it does make them build-time requirements, so install them alongside this import. Pass `ssr: true` on server-rendered hosts. */
6
+ declare function rainbowAdapter(config: PHRenownRainbowAdapterConfig): WalletAdapterDescriptor;
12
7
  //#endregion
13
- export { type PHRenownRainbowAdapterConfig, createRainbowAdapter };
8
+ export { type PHRenownRainbowAdapterConfig, RAINBOW_METHODS, rainbowAdapter, rainbowAdapterMeta };
14
9
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","names":[],"sources":["../../../src/wallet/rainbow/config.ts","../../../src/wallet/rainbow/index.ts"],"mappings":";;UAgCiB,4BAAA;EAGf,sBAAA;EACA,eAAA;EACA,OAAA;EAEA,GAAA;AAAA;;;iBCoBc,oBAAA,CACd,MAAA,EAAQ,4BAAA,GACP,aAAA"}
1
+ {"version":3,"file":"index.d.ts","names":[],"sources":["../../../src/wallet/rainbow/index.ts"],"mappings":";;;;;iBAOgB,cAAA,CACd,MAAA,EAAQ,4BAAA,GACP,uBAAA"}
@@ -1,218 +1,21 @@
1
- import { i as normalizeWalletTheme, r as LoginMethod } from "../../types-DG816Qa8.js";
2
- import "@rainbow-me/rainbowkit/styles.css";
3
- import { QueryClient, QueryClientProvider } from "@tanstack/react-query";
4
- import { disconnect, getAccount, signTypedData, watchAccount } from "wagmi/actions";
5
- import { RainbowKitProvider, darkTheme, getDefaultConfig, getDefaultWallets, lightTheme, useConnectModal } from "@rainbow-me/rainbowkit";
6
- import { useEffect, useMemo, useRef } from "react";
7
- import { WagmiProvider, http } from "wagmi";
8
- import { arbitrum, base, mainnet, optimism, polygon, sepolia } from "wagmi/chains";
9
- import { jsx, jsxs } from "react/jsx-runtime";
10
- //#region src/wallet/rainbow/bridge.tsx
11
- const useConnectModal$1 = useConnectModal;
12
- function createRainbowBridge() {
13
- let openConnectModal = null;
14
- let pendingReject = null;
15
- let readyWaiters = [];
16
- return {
17
- getOpenConnectModal: () => openConnectModal,
18
- setOpenConnectModal: (open) => {
19
- openConnectModal = open;
20
- if (open && readyWaiters.length) {
21
- const waiters = readyWaiters;
22
- readyWaiters = [];
23
- for (const resolve of waiters) resolve(open);
24
- }
25
- },
26
- whenOpenConnectModalReady: (timeoutMs = 8e3) => {
27
- if (openConnectModal) return Promise.resolve(openConnectModal);
28
- return new Promise((resolve, reject) => {
29
- const waiter = (open) => {
30
- clearTimeout(timer);
31
- resolve(open);
32
- };
33
- const timer = setTimeout(() => {
34
- readyWaiters = readyWaiters.filter((w) => w !== waiter);
35
- reject(/* @__PURE__ */ new Error("rainbow adapter: connect modal unavailable. Ensure the adapter Provider is mounted."));
36
- }, timeoutMs);
37
- readyWaiters.push(waiter);
38
- });
39
- },
40
- setPendingReject: (reject) => {
41
- pendingReject = reject;
42
- },
43
- handleModalClosed: () => {
44
- const reject = pendingReject;
45
- pendingReject = null;
46
- if (reject) reject(/* @__PURE__ */ new Error("Login cancelled by user"));
47
- }
48
- };
49
- }
50
- function RainbowAdapterBridge({ bridge }) {
51
- const { openConnectModal, connectModalOpen } = useConnectModal$1();
52
- const wasOpen = useRef(false);
53
- useEffect(() => {
54
- bridge.setOpenConnectModal(openConnectModal ?? null);
55
- return () => bridge.setOpenConnectModal(null);
56
- }, [bridge, openConnectModal]);
57
- useEffect(() => {
58
- if (connectModalOpen) {
59
- wasOpen.current = true;
60
- return;
61
- }
62
- if (wasOpen.current) {
63
- wasOpen.current = false;
64
- bridge.handleModalClosed();
65
- }
66
- }, [bridge, connectModalOpen]);
67
- return null;
68
- }
69
- //#endregion
70
- //#region src/wallet/rainbow/config.ts
71
- const getDefaultConfig$1 = getDefaultConfig;
72
- const getDefaultWallets$1 = getDefaultWallets;
73
- function walletsWithoutWalletConnect() {
74
- return getDefaultWallets$1().wallets.map((group) => ({
75
- ...group,
76
- wallets: group.wallets.filter((w) => w.name !== "walletConnectWallet")
77
- })).filter((group) => group.wallets.length > 0);
78
- }
79
- function buildWagmiConfig(config) {
80
- const { walletConnectProjectId, infuraProjectId, appName = "Renown", ssr } = config;
81
- if (!walletConnectProjectId) console.debug("renown rainbow adapter: walletConnectProjectId is not set — hiding the WalletConnect option; only injected/browser wallets are offered.");
82
- const infuraUrl = (subdomain) => infuraProjectId ? `https://${subdomain}.infura.io/v3/${infuraProjectId}` : void 0;
83
- return getDefaultConfig$1({
84
- appName,
85
- projectId: walletConnectProjectId || "MISSING_WALLET_CONNECT_PROJECT_ID",
86
- chains: [
87
- mainnet,
88
- sepolia,
89
- polygon,
90
- optimism,
91
- arbitrum,
92
- base
93
- ],
94
- ssr,
95
- ...walletConnectProjectId ? {} : { wallets: walletsWithoutWalletConnect() },
96
- transports: {
97
- [mainnet.id]: http(infuraUrl("mainnet")),
98
- [sepolia.id]: http(infuraUrl("sepolia")),
99
- [polygon.id]: http(infuraUrl("polygon-mainnet")),
100
- [optimism.id]: http(infuraUrl("optimism-mainnet")),
101
- [arbitrum.id]: http(infuraUrl("arbitrum-mainnet")),
102
- [base.id]: http(infuraUrl("base-mainnet"))
103
- }
104
- });
105
- }
106
- //#endregion
107
- //#region src/wallet/rainbow/provider.tsx
108
- const lightTheme$1 = lightTheme;
109
- const darkTheme$1 = darkTheme;
110
- const RainbowKitProvider$1 = RainbowKitProvider;
111
- function buildRainbowKitTheme(theme) {
112
- const { mode, accentColor, accentColorForeground } = normalizeWalletTheme(theme);
113
- const options = {
114
- accentColor,
115
- accentColorForeground,
116
- borderRadius: "medium",
117
- fontStack: "system",
118
- overlayBlur: "small"
119
- };
120
- return mode === "dark" ? darkTheme$1(options) : lightTheme$1(options);
121
- }
122
- function createRainbowProvider(options) {
123
- const { wagmiConfig, queryClient, bridge, appName } = options;
124
- return function RainbowAuthProvider({ children, theme }) {
125
- const rainbowKitTheme = useMemo(() => buildRainbowKitTheme(theme), [theme]);
126
- return /* @__PURE__ */ jsx(WagmiProvider, {
127
- config: wagmiConfig,
128
- children: /* @__PURE__ */ jsx(QueryClientProvider, {
129
- client: queryClient,
130
- children: /* @__PURE__ */ jsxs(RainbowKitProvider$1, {
131
- appInfo: { appName },
132
- theme: rainbowKitTheme,
133
- children: [/* @__PURE__ */ jsx(RainbowAdapterBridge, { bridge }), children]
134
- })
135
- })
136
- });
137
- };
138
- }
1
+ import { t as LoginMethod } from "../../types-DiIZNA8t.js";
2
+ //#region src/wallet/rainbow/meta.ts
3
+ const RAINBOW_METHODS = [LoginMethod.WALLET];
4
+ const rainbowAdapterMeta = {
5
+ id: "rainbow",
6
+ redirectReturnParams: [],
7
+ supportedMethods: RAINBOW_METHODS
8
+ };
139
9
  //#endregion
140
10
  //#region src/wallet/rainbow/index.ts
141
- function makeSignTypedData(config, address) {
142
- return (args) => signTypedData(config, {
143
- account: address,
144
- domain: args.domain,
145
- types: args.types,
146
- primaryType: args.primaryType,
147
- message: args.message
148
- });
149
- }
150
- function toSession(config, account) {
151
- return {
152
- address: account.address,
153
- chainId: account.chainId,
154
- signTypedData: makeSignTypedData(config, account.address)
155
- };
156
- }
157
- function createRainbowAdapter(config) {
158
- const wagmiConfig = buildWagmiConfig(config);
159
- const queryClient = new QueryClient();
160
- const bridge = createRainbowBridge();
161
- const Provider = createRainbowProvider({
162
- wagmiConfig,
163
- queryClient,
164
- bridge,
165
- appName: config.appName ?? "Renown"
166
- });
167
- const controller = {
168
- supportedMethods: [LoginMethod.WALLET],
169
- getSession() {
170
- const account = getAccount(wagmiConfig);
171
- return account.status === "connected" ? toSession(wagmiConfig, account) : void 0;
172
- },
173
- async disconnect() {
174
- await disconnect(wagmiConfig);
175
- },
176
- connect(method) {
177
- if (method && method !== LoginMethod.WALLET) return Promise.reject(/* @__PURE__ */ new Error(`rainbow adapter does not support login method "${method}"`));
178
- const existing = getAccount(wagmiConfig);
179
- if (existing.status === "connected") return Promise.resolve(toSession(wagmiConfig, existing));
180
- return new Promise((resolve, reject) => {
181
- const unwatch = watchAccount(wagmiConfig, { onChange(account) {
182
- if (account.status === "connected") {
183
- unwatch();
184
- bridge.setPendingReject(null);
185
- resolve(toSession(wagmiConfig, account));
186
- }
187
- } });
188
- bridge.setPendingReject((error) => {
189
- unwatch();
190
- reject(error);
191
- });
192
- bridge.whenOpenConnectModalReady().then((open) => {
193
- try {
194
- open();
195
- } catch (error) {
196
- unwatch();
197
- bridge.setPendingReject(null);
198
- reject(error instanceof Error ? error : new Error(String(error)));
199
- }
200
- }, (error) => {
201
- unwatch();
202
- bridge.setPendingReject(null);
203
- reject(error instanceof Error ? error : new Error(String(error)));
204
- });
205
- });
206
- }
207
- };
11
+ /** RainbowKit + wagmi wallet adapter (external / injected wallets) for `RenownWalletProvider`. Importing this module loads no wallet library — `@rainbow-me/rainbowkit`, `wagmi` and `@tanstack/react-query` are fetched by `load()` on the first login click — but it does make them build-time requirements, so install them alongside this import. Pass `ssr: true` on server-rendered hosts. */
12
+ function rainbowAdapter(config) {
208
13
  return {
209
- id: "rainbow",
210
- supportedMethods: [LoginMethod.WALLET],
211
- Provider,
212
- useController: () => controller
14
+ meta: rainbowAdapterMeta,
15
+ load: () => import("./factory.js").then((m) => m.createRainbowAdapter(config))
213
16
  };
214
17
  }
215
18
  //#endregion
216
- export { createRainbowAdapter };
19
+ export { RAINBOW_METHODS, rainbowAdapter, rainbowAdapterMeta };
217
20
 
218
21
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","names":["useConnectModal","rainbowUseConnectModal","getDefaultConfig","rainbowGetDefaultConfig","getDefaultWallets","rainbowGetDefaultWallets","lightTheme","rainbowLightTheme","darkTheme","rainbowDarkTheme","RainbowKitProvider","RainbowKitProviderRaw","wagmiSignTypedData","wagmiDisconnect"],"sources":["../../../src/wallet/rainbow/bridge.tsx","../../../src/wallet/rainbow/config.ts","../../../src/wallet/rainbow/provider.tsx","../../../src/wallet/rainbow/index.ts"],"sourcesContent":["import { useConnectModal as rainbowUseConnectModal } from \"@rainbow-me/rainbowkit\";\nimport { useEffect, useRef } from \"react\";\n\n// RainbowKit ships types via an exports map with no \"types\" condition, so\n// type-aware lint sees it as error-typed; assert the shape we rely on.\nconst useConnectModal = rainbowUseConnectModal as () => {\n openConnectModal: (() => void) | undefined;\n connectModalOpen: boolean;\n};\n\n// Imperative handle the controller reads across the React boundary: the bridge\n// component feeds it RainbowKit's modal opener and pending-login cancellation.\nexport interface RainbowBridge {\n getOpenConnectModal: () => (() => void) | null;\n setOpenConnectModal: (open: (() => void) | null) => void;\n /** Resolve once the modal opener is published, or reject after `timeoutMs`. */\n whenOpenConnectModalReady: (timeoutMs?: number) => Promise<() => void>;\n setPendingReject: (reject: ((error: Error) => void) | null) => void;\n handleModalClosed: () => void;\n}\n\n// Plain-JS bridge (created outside React) so effects only call its methods\n// rather than mutating a prop, satisfying the react-hooks immutability rule.\nexport function createRainbowBridge(): RainbowBridge {\n let openConnectModal: (() => void) | null = null;\n let pendingReject: ((error: Error) => void) | null = null;\n // connect() may fire before the RainbowKit Provider's effect publishes the\n // opener (wagmi reconnect / StrictMode double-invoke); these waiters bridge it.\n let readyWaiters: Array<(open: () => void) => void> = [];\n return {\n getOpenConnectModal: () => openConnectModal,\n setOpenConnectModal: (open) => {\n openConnectModal = open;\n if (open && readyWaiters.length) {\n const waiters = readyWaiters;\n readyWaiters = [];\n for (const resolve of waiters) resolve(open);\n }\n },\n whenOpenConnectModalReady: (timeoutMs = 8000) => {\n if (openConnectModal) return Promise.resolve(openConnectModal);\n return new Promise<() => void>((resolve, reject) => {\n const waiter = (open: () => void) => {\n clearTimeout(timer);\n resolve(open);\n };\n const timer = setTimeout(() => {\n readyWaiters = readyWaiters.filter((w) => w !== waiter);\n reject(\n new Error(\n \"rainbow adapter: connect modal unavailable. Ensure the adapter Provider is mounted.\",\n ),\n );\n }, timeoutMs);\n readyWaiters.push(waiter);\n });\n },\n setPendingReject: (reject) => {\n pendingReject = reject;\n },\n handleModalClosed: () => {\n const reject = pendingReject;\n pendingReject = null;\n if (reject) reject(new Error(\"Login cancelled by user\"));\n },\n };\n}\n\n// Wires RainbowKit's useConnectModal into the bridge so the controller's\n// connect() can open the React-only modal, and cancels on modal dismissal.\nexport function RainbowAdapterBridge({ bridge }: { bridge: RainbowBridge }) {\n const { openConnectModal, connectModalOpen } = useConnectModal();\n const wasOpen = useRef(false);\n\n useEffect(() => {\n bridge.setOpenConnectModal(openConnectModal ?? null);\n return () => bridge.setOpenConnectModal(null);\n }, [bridge, openConnectModal]);\n\n useEffect(() => {\n if (connectModalOpen) {\n wasOpen.current = true;\n return;\n }\n if (wasOpen.current) {\n wasOpen.current = false;\n bridge.handleModalClosed();\n }\n }, [bridge, connectModalOpen]);\n\n return null;\n}\n","import {\n getDefaultConfig as rainbowGetDefaultConfig,\n getDefaultWallets as rainbowGetDefaultWallets,\n} from \"@rainbow-me/rainbowkit\";\nimport { http, type Config } from \"wagmi\";\nimport {\n arbitrum,\n base,\n mainnet,\n optimism,\n polygon,\n sepolia,\n} from \"wagmi/chains\";\n\n// RainbowKit ships types via an exports map with no \"types\" condition, so\n// type-aware lint sees them as error-typed; assert the shapes we rely on.\ntype WalletCreator = { name?: string };\ntype WalletGroup = { groupName: string; wallets: WalletCreator[] };\nconst getDefaultConfig = rainbowGetDefaultConfig as (params: {\n appName: string;\n projectId: string;\n chains: readonly [unknown, ...unknown[]];\n wallets?: WalletGroup[];\n transports: Record<number, unknown>;\n ssr?: boolean;\n}) => Config;\nconst getDefaultWallets = rainbowGetDefaultWallets as () => {\n wallets: WalletGroup[];\n};\n\n// Config slice this adapter consumes; mirrors WalletRainbowConfig in the core\n// controller so operators pass the same shape from powerhouse.config.json.\nexport interface PHRenownRainbowAdapterConfig {\n // Optional: when unset the WalletConnect option is hidden; injected/browser\n // wallets (MetaMask, etc.) still work. See buildWagmiConfig.\n walletConnectProjectId?: string;\n infuraProjectId?: string;\n appName?: string;\n // See WalletRainbowConfig.ssr: opt-in for server-rendered hosts.\n ssr?: boolean;\n}\n\n// RainbowKit's default wallet list minus the WalletConnect option, used when no\n// project id is set (WalletConnect can't work without one; injected wallets do).\nfunction walletsWithoutWalletConnect(): WalletGroup[] {\n return getDefaultWallets()\n .wallets.map((group) => ({\n ...group,\n wallets: group.wallets.filter((w) => w.name !== \"walletConnectWallet\"),\n }))\n .filter((group) => group.wallets.length > 0);\n}\n\n// Build the wagmi + RainbowKit config from operator-provided project ids.\n// Ported from renown/utils/wagmi.ts (env vars replaced by config fields).\nexport function buildWagmiConfig(config: PHRenownRainbowAdapterConfig): Config {\n const {\n walletConnectProjectId,\n infuraProjectId,\n appName = \"Renown\",\n ssr,\n } = config;\n\n if (!walletConnectProjectId) {\n console.debug(\n \"renown rainbow adapter: walletConnectProjectId is not set — hiding the WalletConnect option; only injected/browser wallets are offered.\",\n );\n }\n\n const infuraUrl = (subdomain: string) =>\n infuraProjectId\n ? `https://${subdomain}.infura.io/v3/${infuraProjectId}`\n : undefined;\n\n return getDefaultConfig({\n appName,\n projectId: walletConnectProjectId || \"MISSING_WALLET_CONNECT_PROJECT_ID\",\n chains: [mainnet, sepolia, polygon, optimism, arbitrum, base],\n // On SSR hosts wagmi's Hydrate defers reconnect to an effect; without it that\n // runs during render, which setState-in-render warns via RainbowKit's modal.\n ssr,\n // Omit `wallets` to keep RainbowKit's default set when a project id exists;\n // otherwise drop only the WalletConnect option from that default set.\n ...(walletConnectProjectId\n ? {}\n : { wallets: walletsWithoutWalletConnect() }),\n transports: {\n [mainnet.id]: http(infuraUrl(\"mainnet\")),\n [sepolia.id]: http(infuraUrl(\"sepolia\")),\n [polygon.id]: http(infuraUrl(\"polygon-mainnet\")),\n [optimism.id]: http(infuraUrl(\"optimism-mainnet\")),\n [arbitrum.id]: http(infuraUrl(\"arbitrum-mainnet\")),\n [base.id]: http(infuraUrl(\"base-mainnet\")),\n },\n });\n}\n","import {\n RainbowKitProvider as RainbowKitProviderRaw,\n darkTheme as rainbowDarkTheme,\n lightTheme as rainbowLightTheme,\n} from \"@rainbow-me/rainbowkit\";\nimport type { QueryClient } from \"@tanstack/react-query\";\nimport { QueryClientProvider } from \"@tanstack/react-query\";\nimport { useMemo, type ComponentType, type ReactNode } from \"react\";\nimport { WagmiProvider, type Config } from \"wagmi\";\nimport { normalizeWalletTheme, type WalletTheme } from \"../types.js\";\nimport { RainbowAdapterBridge, type RainbowBridge } from \"./bridge.js\";\n\n// RainbowKit ships types via an exports map with no \"types\" condition, so\n// type-aware lint sees them as error-typed; assert the shapes we rely on.\ntype RainbowKitTheme = Record<string, unknown>;\ninterface RainbowThemeOptions {\n accentColor?: string;\n accentColorForeground?: string;\n borderRadius?: \"none\" | \"small\" | \"medium\" | \"large\";\n fontStack?: \"rounded\" | \"system\";\n overlayBlur?: \"none\" | \"small\" | \"large\";\n}\nconst lightTheme = rainbowLightTheme as (\n options?: RainbowThemeOptions,\n) => RainbowKitTheme;\nconst darkTheme = rainbowDarkTheme as (\n options?: RainbowThemeOptions,\n) => RainbowKitTheme;\nconst RainbowKitProvider = RainbowKitProviderRaw as ComponentType<{\n appInfo?: { appName?: string };\n theme?: RainbowKitTheme;\n children?: ReactNode;\n}>;\n\n// Map the host theme to a RainbowKit theme: light/dark scheme plus the accent\n// colors the host passes in (omitted colors fall back to RainbowKit defaults).\nfunction buildRainbowKitTheme(theme: WalletTheme | undefined): RainbowKitTheme {\n const { mode, accentColor, accentColorForeground } =\n normalizeWalletTheme(theme);\n const options: RainbowThemeOptions = {\n accentColor,\n accentColorForeground,\n borderRadius: \"medium\",\n fontStack: \"system\",\n overlayBlur: \"small\",\n };\n return mode === \"dark\" ? darkTheme(options) : lightTheme(options);\n}\n\n// Build the adapter Provider: mounts wagmi + react-query + RainbowKit and the\n// bridge, so useController() (called under it) can drive the connect modal.\nexport function createRainbowProvider(options: {\n wagmiConfig: Config;\n queryClient: QueryClient;\n bridge: RainbowBridge;\n appName: string;\n}): ComponentType<{ children: ReactNode; theme?: WalletTheme }> {\n const { wagmiConfig, queryClient, bridge, appName } = options;\n\n return function RainbowAuthProvider({\n children,\n theme,\n }: {\n children: ReactNode;\n theme?: WalletTheme;\n }) {\n const rainbowKitTheme = useMemo(() => buildRainbowKitTheme(theme), [theme]);\n return (\n <WagmiProvider config={wagmiConfig}>\n <QueryClientProvider client={queryClient}>\n <RainbowKitProvider appInfo={{ appName }} theme={rainbowKitTheme}>\n <RainbowAdapterBridge bridge={bridge} />\n {children}\n </RainbowKitProvider>\n </QueryClientProvider>\n </WagmiProvider>\n );\n };\n}\n","// RainbowKit's modal styles; without them the connect modal renders unstyled.\n// Loaded lazily with this adapter, so it costs nothing until it's activated.\nimport \"@rainbow-me/rainbowkit/styles.css\";\nimport { QueryClient } from \"@tanstack/react-query\";\nimport type { Config } from \"wagmi\";\nimport {\n disconnect as wagmiDisconnect,\n getAccount,\n signTypedData as wagmiSignTypedData,\n watchAccount,\n type GetAccountReturnType,\n} from \"wagmi/actions\";\nimport type { SignCredentialTypedData } from \"../../credential.js\";\nimport {\n LoginMethod,\n type WalletAdapter,\n type WalletController,\n type WalletSession,\n} from \"../types.js\";\nimport { createRainbowBridge } from \"./bridge.js\";\nimport {\n buildWagmiConfig,\n type PHRenownRainbowAdapterConfig,\n} from \"./config.js\";\nimport { createRainbowProvider } from \"./provider.js\";\n\nexport type { PHRenownRainbowAdapterConfig } from \"./config.js\";\n\ntype ConnectedAccount = Extract<GetAccountReturnType, { status: \"connected\" }>;\n\n// Wagmi actions accept the broader viem typed-data shape; buildAndSignCredential\n// already strips EIP712Domain, so viem derives the domain type from `domain`.\nfunction makeSignTypedData(\n config: Config,\n address: `0x${string}`,\n): SignCredentialTypedData {\n return (args) =>\n wagmiSignTypedData(config, {\n account: address,\n domain: args.domain,\n types: args.types as Record<\n string,\n readonly { name: string; type: string }[]\n >,\n primaryType: args.primaryType,\n message: args.message,\n });\n}\n\nfunction toSession(config: Config, account: ConnectedAccount): WalletSession {\n return {\n address: account.address,\n chainId: account.chainId,\n signTypedData: makeSignTypedData(config, account.address),\n };\n}\n\n// wagmi + RainbowKit external-wallet adapter. connect() opens the RainbowKit\n// modal and resolves once wagmi reports a connected account.\nexport function createRainbowAdapter(\n config: PHRenownRainbowAdapterConfig,\n): WalletAdapter {\n const wagmiConfig = buildWagmiConfig(config);\n const queryClient = new QueryClient();\n const bridge = createRainbowBridge();\n const appName = config.appName ?? \"Renown\";\n\n const Provider = createRainbowProvider({\n wagmiConfig,\n queryClient,\n bridge,\n appName,\n });\n\n const controller: WalletController = {\n supportedMethods: [LoginMethod.WALLET],\n getSession() {\n const account = getAccount(wagmiConfig);\n return account.status === \"connected\"\n ? toSession(wagmiConfig, account)\n : undefined;\n },\n async disconnect() {\n await wagmiDisconnect(wagmiConfig);\n },\n connect(method?: LoginMethod) {\n if (method && method !== LoginMethod.WALLET) {\n return Promise.reject(\n new Error(\n `rainbow adapter does not support login method \"${method}\"`,\n ),\n );\n }\n\n const existing = getAccount(wagmiConfig);\n if (existing.status === \"connected\") {\n return Promise.resolve(toSession(wagmiConfig, existing));\n }\n\n return new Promise<WalletSession>((resolve, reject) => {\n const unwatch = watchAccount(wagmiConfig, {\n onChange(account) {\n if (account.status === \"connected\") {\n unwatch();\n bridge.setPendingReject(null);\n resolve(toSession(wagmiConfig, account));\n }\n },\n });\n bridge.setPendingReject((error) => {\n unwatch();\n reject(error);\n });\n // Wait for the RainbowKit Provider to publish the modal opener (it can\n // lag connect() during wagmi reconnect / StrictMode remount), then open.\n bridge.whenOpenConnectModalReady().then(\n (open) => {\n try {\n open();\n } catch (error) {\n unwatch();\n bridge.setPendingReject(null);\n reject(error instanceof Error ? error : new Error(String(error)));\n }\n },\n (error: unknown) => {\n unwatch();\n bridge.setPendingReject(null);\n reject(error instanceof Error ? error : new Error(String(error)));\n },\n );\n });\n },\n };\n\n return {\n id: \"rainbow\",\n supportedMethods: [LoginMethod.WALLET],\n Provider,\n useController: () => controller,\n };\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"index.js","names":[],"sources":["../../../src/wallet/rainbow/meta.ts","../../../src/wallet/rainbow/index.ts"],"sourcesContent":["import { LoginMethod, type WalletAdapterMeta } from \"../types.js\";\n\n// Config slice this adapter consumes; operators pass the same shape from\n// powerhouse.config.json. No `methods`: this adapter only does wallet login.\nexport interface PHRenownRainbowAdapterConfig {\n // Optional: when unset the WalletConnect option is hidden; injected/browser\n // wallets (MetaMask, etc.) still work. See buildWagmiConfig.\n walletConnectProjectId?: string;\n infuraProjectId?: string;\n appName?: string;\n // Opt-in for server-rendered hosts (e.g. Next.js) so wagmi defers its hydrate\n // reconnect to an effect instead of running it during render.\n ssr?: boolean;\n}\n\nexport const RAINBOW_METHODS: LoginMethod[] = [LoginMethod.WALLET];\n\n// Dependency-free identity (see privy/meta.ts). Injected wallets have no\n// full-page OAuth redirect, so no redirect-return params.\nexport const rainbowAdapterMeta: WalletAdapterMeta = {\n id: \"rainbow\",\n redirectReturnParams: [],\n supportedMethods: RAINBOW_METHODS,\n};\n","import type { WalletAdapterDescriptor } from \"../types.js\";\nimport {\n rainbowAdapterMeta,\n type PHRenownRainbowAdapterConfig,\n} from \"./meta.js\";\n\n/** RainbowKit + wagmi wallet adapter (external / injected wallets) for `RenownWalletProvider`. Importing this module loads no wallet library — `@rainbow-me/rainbowkit`, `wagmi` and `@tanstack/react-query` are fetched by `load()` on the first login click — but it does make them build-time requirements, so install them alongside this import. Pass `ssr: true` on server-rendered hosts. */\nexport function rainbowAdapter(\n config: PHRenownRainbowAdapterConfig,\n): WalletAdapterDescriptor {\n return {\n meta: rainbowAdapterMeta,\n load: () =>\n import(\"./factory.js\").then((m) => m.createRainbowAdapter(config)),\n };\n}\n\nexport { RAINBOW_METHODS, rainbowAdapterMeta } from \"./meta.js\";\nexport type { PHRenownRainbowAdapterConfig } from \"./meta.js\";\n"],"mappings":";;AAeA,MAAa,kBAAiC,CAAC,YAAY,OAAO;AAIlE,MAAa,qBAAwC;CACnD,IAAI;CACJ,sBAAsB,EAAE;CACxB,kBAAkB;CACnB;;;;AChBD,SAAgB,eACd,QACyB;AACzB,QAAO;EACL,MAAM;EACN,YACE,OAAO,gBAAgB,MAAM,MAAM,EAAE,qBAAqB,OAAO,CAAC;EACrE"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@renown/sdk",
3
- "version": "6.2.2-dev.22",
3
+ "version": "6.2.2-dev.24",
4
4
  "description": "Renown SDK — wallet-based authentication and user identity management for Powerhouse React applications.",
5
5
  "license": "AGPL-3.0-only",
6
6
  "private": false,
@@ -44,17 +44,35 @@
44
44
  "import": "./dist/wallet/rainbow/index.js",
45
45
  "default": "./dist/wallet/rainbow/index.js"
46
46
  },
47
+ "./wallet/rainbow/factory": {
48
+ "source": "./src/wallet/rainbow/factory.ts",
49
+ "types": "./dist/wallet/rainbow/factory.d.ts",
50
+ "import": "./dist/wallet/rainbow/factory.js",
51
+ "default": "./dist/wallet/rainbow/factory.js"
52
+ },
47
53
  "./wallet/privy": {
48
54
  "source": "./src/wallet/privy/index.ts",
49
55
  "types": "./dist/wallet/privy/index.d.ts",
50
56
  "import": "./dist/wallet/privy/index.js",
51
57
  "default": "./dist/wallet/privy/index.js"
52
58
  },
59
+ "./wallet/privy/factory": {
60
+ "source": "./src/wallet/privy/factory.ts",
61
+ "types": "./dist/wallet/privy/factory.d.ts",
62
+ "import": "./dist/wallet/privy/factory.js",
63
+ "default": "./dist/wallet/privy/factory.js"
64
+ },
53
65
  "./wallet/mock": {
54
66
  "source": "./src/wallet/mock/index.ts",
55
67
  "types": "./dist/wallet/mock/index.d.ts",
56
68
  "import": "./dist/wallet/mock/index.js",
57
69
  "default": "./dist/wallet/mock/index.js"
70
+ },
71
+ "./wallet/mock/factory": {
72
+ "source": "./src/wallet/mock/factory.ts",
73
+ "types": "./dist/wallet/mock/factory.d.ts",
74
+ "import": "./dist/wallet/mock/factory.js",
75
+ "default": "./dist/wallet/mock/factory.js"
58
76
  }
59
77
  },
60
78
  "types": "./dist/index.d.ts",
@@ -86,7 +104,7 @@
86
104
  "key-did-resolver": "^4.0.0",
87
105
  "uint8arrays": "^5.1.0",
88
106
  "viem": "~2.50.4",
89
- "@powerhousedao/shared": "6.2.2-dev.22"
107
+ "@powerhousedao/shared": "6.2.2-dev.24"
90
108
  },
91
109
  "peerDependencies": {
92
110
  "@privy-io/react-auth": "^3.25.0",
@@ -129,6 +147,7 @@
129
147
  "homepage": "https://academy.vetra.io/academy/Reference/Authorization/renown-sdk/Overview",
130
148
  "scripts": {
131
149
  "build": "tsdown",
150
+ "test": "vitest --run",
132
151
  "tsc": "tsc",
133
152
  "lint": "eslint"
134
153
  }
@@ -1,27 +0,0 @@
1
- //#region src/wallet/types.ts
2
- let LoginMethod = /* @__PURE__ */ function(LoginMethod) {
3
- LoginMethod["WALLET"] = "wallet";
4
- LoginMethod["GOOGLE"] = "google";
5
- LoginMethod["EMAIL"] = "email";
6
- LoginMethod["APPLE"] = "apple";
7
- return LoginMethod;
8
- }({});
9
- const DEFAULT_PRIVY_METHODS = [LoginMethod.GOOGLE, LoginMethod.EMAIL];
10
- const DEFAULT_MOCK_METHODS = [
11
- LoginMethod.WALLET,
12
- LoginMethod.GOOGLE,
13
- LoginMethod.EMAIL
14
- ];
15
- function normalizeWalletTheme(theme) {
16
- if (theme === void 0) return { mode: "light" };
17
- if (typeof theme === "string") return { mode: theme };
18
- return {
19
- mode: theme.mode,
20
- accentColor: theme.accentColor,
21
- accentColorForeground: theme.accentColorForeground
22
- };
23
- }
24
- //#endregion
25
- export { normalizeWalletTheme as i, DEFAULT_PRIVY_METHODS as n, LoginMethod as r, DEFAULT_MOCK_METHODS as t };
26
-
27
- //# sourceMappingURL=types-DG816Qa8.js.map