@renown/sdk 6.2.2-dev.2 → 6.2.2-dev.20

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 (48) hide show
  1. package/README.md +103 -1
  2. package/dist/crypto.d.ts +2 -2
  3. package/dist/crypto.js +1 -1
  4. package/dist/index-25fTa4yI.d.ts +127 -0
  5. package/dist/index-25fTa4yI.d.ts.map +1 -0
  6. package/dist/index.d.ts +9 -8
  7. package/dist/index.d.ts.map +1 -1
  8. package/dist/index.js +17 -8
  9. package/dist/index.js.map +1 -1
  10. package/dist/node.d.ts +54 -11
  11. package/dist/node.d.ts.map +1 -1
  12. package/dist/node.js +94 -12
  13. package/dist/node.js.map +1 -1
  14. package/dist/renown-builder-BqWoYtBR.js +841 -0
  15. package/dist/renown-builder-BqWoYtBR.js.map +1 -0
  16. package/dist/{signer-XkA-D7Qt.js → signer-CgYhXTV7.js} +2 -2
  17. package/dist/{signer-XkA-D7Qt.js.map → signer-CgYhXTV7.js.map} +1 -1
  18. package/dist/types-DG816Qa8.js +27 -0
  19. package/dist/types-DG816Qa8.js.map +1 -0
  20. package/dist/{signer-DYKGoYHB.d.ts → types-DsF91dDF.d.ts} +121 -115
  21. package/dist/types-DsF91dDF.d.ts.map +1 -0
  22. package/dist/types-Z6jyeonm.d.ts +54 -0
  23. package/dist/types-Z6jyeonm.d.ts.map +1 -0
  24. package/dist/{utils-D8C7f9Qs.d.ts → utils-OOrVXHof.d.ts} +39 -65
  25. package/dist/utils-OOrVXHof.d.ts.map +1 -0
  26. package/dist/wallet/index.d.ts +30 -0
  27. package/dist/wallet/index.d.ts.map +1 -0
  28. package/dist/wallet/index.js +74 -0
  29. package/dist/wallet/index.js.map +1 -0
  30. package/dist/wallet/mock/index.d.ts +18 -0
  31. package/dist/wallet/mock/index.d.ts.map +1 -0
  32. package/dist/wallet/mock/index.js +38 -0
  33. package/dist/wallet/mock/index.js.map +1 -0
  34. package/dist/wallet/privy/index.d.ts +63 -0
  35. package/dist/wallet/privy/index.d.ts.map +1 -0
  36. package/dist/wallet/privy/index.js +230 -0
  37. package/dist/wallet/privy/index.js.map +1 -0
  38. package/dist/wallet/rainbow/index.d.ts +14 -0
  39. package/dist/wallet/rainbow/index.d.ts.map +1 -0
  40. package/dist/wallet/rainbow/index.js +218 -0
  41. package/dist/wallet/rainbow/index.js.map +1 -0
  42. package/package.json +57 -3
  43. package/dist/browser-key-storage-DSkDBAhU.d.ts +0 -14
  44. package/dist/browser-key-storage-DSkDBAhU.d.ts.map +0 -1
  45. package/dist/renown-builder-DP0iFzK1.js +0 -433
  46. package/dist/renown-builder-DP0iFzK1.js.map +0 -1
  47. package/dist/signer-DYKGoYHB.d.ts.map +0 -1
  48. package/dist/utils-D8C7f9Qs.d.ts.map +0 -1
@@ -0,0 +1,230 @@
1
+ import { i as normalizeWalletTheme, n as DEFAULT_PRIVY_METHODS, r as LoginMethod } from "../../types-DG816Qa8.js";
2
+ import { useEffect, useMemo, useRef } from "react";
3
+ import { jsx, jsxs } from "react/jsx-runtime";
4
+ import { PrivyProvider, getEmbeddedConnectedWallet, useLogin, useLoginWithOAuth, useLogout, usePrivy, useSignTypedData, useWallets } from "@privy-io/react-auth";
5
+ //#region src/wallet/privy/adapter.ts
6
+ const PRIVY_METHOD_MAP = {
7
+ [LoginMethod.WALLET]: "wallet",
8
+ [LoginMethod.GOOGLE]: "google",
9
+ [LoginMethod.APPLE]: "apple",
10
+ [LoginMethod.EMAIL]: "email"
11
+ };
12
+ const PRIVY_OAUTH_PROVIDERS = {
13
+ [LoginMethod.GOOGLE]: "google",
14
+ [LoginMethod.APPLE]: "apple"
15
+ };
16
+ function resolvePrivyMethods(methods) {
17
+ if (!methods || methods.length === 0) return [...DEFAULT_PRIVY_METHODS];
18
+ const resolved = [];
19
+ for (const method of methods) {
20
+ const value = method;
21
+ if (!(value in PRIVY_METHOD_MAP)) throw new Error(`PrivyAdapter cannot support login method "${method}"`);
22
+ resolved.push(value);
23
+ }
24
+ return resolved;
25
+ }
26
+ var PrivyCore = class {
27
+ supportedMethods;
28
+ bindings = null;
29
+ pending = null;
30
+ session = void 0;
31
+ listeners = /* @__PURE__ */ new Set();
32
+ constructor(supportedMethods) {
33
+ this.supportedMethods = supportedMethods;
34
+ }
35
+ bind(bindings) {
36
+ this.bindings = bindings;
37
+ return () => {
38
+ if (this.bindings === bindings) this.bindings = null;
39
+ };
40
+ }
41
+ getSession() {
42
+ return this.session;
43
+ }
44
+ subscribe(listener) {
45
+ this.listeners.add(listener);
46
+ if (this.session) listener(this.session);
47
+ return () => {
48
+ this.listeners.delete(listener);
49
+ };
50
+ }
51
+ emit(session) {
52
+ for (const listener of this.listeners) listener(session);
53
+ }
54
+ syncFromEmbeddedWallet(wallet) {
55
+ const address = wallet.address;
56
+ const chainId = parseCaip2ChainId(wallet.chainId);
57
+ const signTypedData = async (args) => {
58
+ if (!this.bindings) throw new Error("PrivyAdapter not bound (bridge not mounted)");
59
+ return this.bindings.signTypedData(args, address);
60
+ };
61
+ const session = {
62
+ address,
63
+ chainId,
64
+ signTypedData,
65
+ canSignSilently: true
66
+ };
67
+ this.session = session;
68
+ if (this.pending) {
69
+ this.pending.resolve(session);
70
+ this.pending = null;
71
+ } else this.emit(session);
72
+ }
73
+ clearSession() {
74
+ this.session = void 0;
75
+ this.emit(void 0);
76
+ }
77
+ handleLoginError(error) {
78
+ if (!this.pending) return;
79
+ const err = error instanceof Error ? error : new Error(String(error));
80
+ this.pending.reject(err);
81
+ this.pending = null;
82
+ }
83
+ async connect(method) {
84
+ if (this.session) return this.session;
85
+ if (!this.bindings) throw new Error("PrivyAdapter not bound. Ensure the adapter Provider wraps the app.");
86
+ const chosen = method ?? this.supportedMethods.at(0);
87
+ if (!chosen) throw new Error("PrivyAdapter has no supported login methods configured");
88
+ const privyMethod = PRIVY_METHOD_MAP[chosen];
89
+ if (!privyMethod || !this.supportedMethods.includes(chosen)) throw new Error(`PrivyAdapter does not support login method "${chosen}"`);
90
+ const bindings = this.bindings;
91
+ const oauthProvider = PRIVY_OAUTH_PROVIDERS[chosen];
92
+ return new Promise((resolve, reject) => {
93
+ this.pending = {
94
+ resolve,
95
+ reject
96
+ };
97
+ const fail = (error) => {
98
+ this.pending = null;
99
+ reject(error instanceof Error ? error : new Error(String(error)));
100
+ };
101
+ try {
102
+ if (oauthProvider) bindings.initOAuth({ provider: oauthProvider }).catch(fail);
103
+ else bindings.openLoginModal({ loginMethods: [privyMethod] });
104
+ } catch (error) {
105
+ fail(error);
106
+ }
107
+ });
108
+ }
109
+ async disconnect() {
110
+ this.clearSession();
111
+ if (!this.bindings) return;
112
+ await this.bindings.logout();
113
+ }
114
+ };
115
+ function parseCaip2ChainId(caip2) {
116
+ const last = caip2.split(":").at(-1);
117
+ const n = Number(last);
118
+ if (!Number.isFinite(n)) throw new Error(`PrivyAdapter: could not parse chainId from CAIP-2 "${caip2}"`);
119
+ return n;
120
+ }
121
+ //#endregion
122
+ //#region src/wallet/privy/bridge.tsx
123
+ function PrivyAdapterBridge({ core }) {
124
+ const { ready, authenticated } = usePrivy();
125
+ const { wallets } = useWallets();
126
+ const { signTypedData } = useSignTypedData();
127
+ const { logout } = useLogout();
128
+ const { login: openLoginModal } = useLogin({ onError: (error) => core.handleLoginError(error) });
129
+ const { initOAuth } = useLoginWithOAuth({ onError: (error) => core.handleLoginError(error) });
130
+ const fnsRef = useRef({
131
+ openLoginModal,
132
+ initOAuth,
133
+ logout,
134
+ signTypedData
135
+ });
136
+ useEffect(() => {
137
+ fnsRef.current = {
138
+ openLoginModal,
139
+ initOAuth,
140
+ logout,
141
+ signTypedData
142
+ };
143
+ }, [
144
+ openLoginModal,
145
+ initOAuth,
146
+ logout,
147
+ signTypedData
148
+ ]);
149
+ useEffect(() => {
150
+ return core.bind({
151
+ openLoginModal: (opts) => fnsRef.current.openLoginModal(opts),
152
+ initOAuth: (opts) => fnsRef.current.initOAuth(opts),
153
+ logout: () => fnsRef.current.logout(),
154
+ signTypedData: async (args, address) => {
155
+ return (await fnsRef.current.signTypedData(args, {
156
+ address,
157
+ uiOptions: { showWalletUIs: false }
158
+ })).signature;
159
+ }
160
+ });
161
+ }, [core]);
162
+ useEffect(() => {
163
+ if (!ready) return;
164
+ if (!authenticated) {
165
+ core.clearSession();
166
+ return;
167
+ }
168
+ const embedded = getEmbeddedConnectedWallet(wallets);
169
+ if (embedded) core.syncFromEmbeddedWallet(embedded);
170
+ }, [
171
+ core,
172
+ ready,
173
+ authenticated,
174
+ wallets
175
+ ]);
176
+ return null;
177
+ }
178
+ //#endregion
179
+ //#region src/wallet/privy/provider.tsx
180
+ function createPrivyProvider(core, config) {
181
+ return function PrivyAuthProvider({ children, theme }) {
182
+ const { mode } = normalizeWalletTheme(theme);
183
+ const privyConfig = useMemo(() => ({
184
+ appearance: { theme: mode },
185
+ embeddedWallets: {
186
+ ethereum: { createOnLogin: "users-without-wallets" },
187
+ showWalletUIs: false
188
+ },
189
+ externalWallets: {
190
+ disableAllExternalWallets: true,
191
+ walletConnect: { enabled: false }
192
+ }
193
+ }), [mode]);
194
+ return /* @__PURE__ */ jsxs(PrivyProvider, {
195
+ appId: config.appId,
196
+ clientId: config.clientId,
197
+ config: privyConfig,
198
+ children: [/* @__PURE__ */ jsx(PrivyAdapterBridge, { core }), children]
199
+ });
200
+ };
201
+ }
202
+ //#endregion
203
+ //#region src/wallet/privy/index.ts
204
+ function createPrivyAdapter(config) {
205
+ const supportedMethods = resolvePrivyMethods(config.methods);
206
+ const core = new PrivyCore(supportedMethods);
207
+ const Provider = createPrivyProvider(core, {
208
+ appId: config.appId,
209
+ clientId: config.clientId
210
+ });
211
+ function useController() {
212
+ return {
213
+ connect: (method) => core.connect(method),
214
+ disconnect: () => core.disconnect(),
215
+ getSession: () => core.getSession(),
216
+ subscribe: (listener) => core.subscribe(listener),
217
+ supportedMethods
218
+ };
219
+ }
220
+ return {
221
+ id: "privy",
222
+ supportedMethods,
223
+ Provider,
224
+ useController
225
+ };
226
+ }
227
+ //#endregion
228
+ export { PrivyAdapterBridge, PrivyCore, createPrivyAdapter, createPrivyProvider, resolvePrivyMethods };
229
+
230
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","names":[],"sources":["../../../src/wallet/privy/adapter.ts","../../../src/wallet/privy/bridge.tsx","../../../src/wallet/privy/provider.tsx","../../../src/wallet/privy/index.ts"],"sourcesContent":["import type {\n ConnectedWallet,\n LoginModalOptions,\n SignTypedDataParams,\n} from \"@privy-io/react-auth\";\nimport type { SignCredentialTypedData } from \"../../credential.js\";\nimport {\n DEFAULT_PRIVY_METHODS,\n LoginMethod,\n type WalletSession,\n} from \"../types.js\";\n\ntype Hex = `0x${string}`;\ntype PrivyLoginMethodId = NonNullable<\n LoginModalOptions[\"loginMethods\"]\n>[number];\n\n// Login methods the Privy adapter can drive. Config `methods` is validated\n// against these; the default is [GOOGLE, EMAIL].\nconst PRIVY_METHOD_MAP: Partial<Record<LoginMethod, PrivyLoginMethodId>> = {\n [LoginMethod.WALLET]: \"wallet\",\n [LoginMethod.GOOGLE]: \"google\",\n [LoginMethod.APPLE]: \"apple\",\n [LoginMethod.EMAIL]: \"email\",\n};\n\ntype PrivyOAuthProviderId = \"google\" | \"apple\";\n\n// Methods Privy can start headlessly with initOAuth. Opening the modal for these\n// would only render a single button for a provider the caller already picked.\nconst PRIVY_OAUTH_PROVIDERS: Partial<\n Record<LoginMethod, PrivyOAuthProviderId>\n> = {\n [LoginMethod.GOOGLE]: \"google\",\n [LoginMethod.APPLE]: \"apple\",\n};\n\n// Resolve config `methods` (LoginMethod string values) to the supported set,\n// falling back to the default when none are provided.\nexport function resolvePrivyMethods(methods?: string[]): LoginMethod[] {\n if (!methods || methods.length === 0) return [...DEFAULT_PRIVY_METHODS];\n const resolved: LoginMethod[] = [];\n for (const method of methods) {\n const value = method as LoginMethod;\n if (!(value in PRIVY_METHOD_MAP)) {\n throw new Error(`PrivyAdapter cannot support login method \"${method}\"`);\n }\n resolved.push(value);\n }\n return resolved;\n}\n\n// Privy React functions captured by <PrivyAdapterBridge> via bind(). Until bind\n// runs, connect/disconnect calls throw.\nexport interface PrivyBindings {\n openLoginModal: (options?: LoginModalOptions) => void;\n initOAuth: (options: { provider: PrivyOAuthProviderId }) => Promise<void>;\n logout: () => Promise<void>;\n signTypedData: (\n args: Parameters<SignCredentialTypedData>[0],\n address: Hex,\n ) => Promise<Hex>;\n}\n\ninterface PendingLogin {\n resolve(session: WalletSession): void;\n reject(error: Error): void;\n}\n\n// Framework-agnostic core the bridge drives. Holds the session and pending\n// login promise so the class can operate Privy without owning React state.\nexport class PrivyCore {\n readonly supportedMethods: LoginMethod[];\n\n private bindings: PrivyBindings | null = null;\n private pending: PendingLogin | null = null;\n private session: WalletSession | undefined = undefined;\n private listeners = new Set<(session: WalletSession | undefined) => void>();\n\n constructor(supportedMethods: LoginMethod[]) {\n this.supportedMethods = supportedMethods;\n }\n\n bind(bindings: PrivyBindings): () => void {\n this.bindings = bindings;\n return () => {\n if (this.bindings === bindings) this.bindings = null;\n };\n }\n\n getSession(): WalletSession | undefined {\n return this.session;\n }\n\n // Push session changes to subscribers, replaying the current one on subscribe.\n // Lets the host complete sign-in when a session arrives with no pending connect().\n subscribe(\n listener: (session: WalletSession | undefined) => void,\n ): () => void {\n this.listeners.add(listener);\n if (this.session) listener(this.session);\n return () => {\n this.listeners.delete(listener);\n };\n }\n\n private emit(session: WalletSession | undefined): void {\n for (const listener of this.listeners) listener(session);\n }\n\n // Called by the bridge when the embedded wallet is available. Builds the\n // session and resolves any pending login promise.\n syncFromEmbeddedWallet(wallet: ConnectedWallet): void {\n const address = wallet.address as Hex;\n const chainId = parseCaip2ChainId(wallet.chainId);\n\n const signTypedData: SignCredentialTypedData = async (args) => {\n if (!this.bindings) {\n throw new Error(\"PrivyAdapter not bound (bridge not mounted)\");\n }\n return this.bindings.signTypedData(args, address);\n };\n\n // Privy's embedded wallet signs without a prompt, so a host may auto-complete\n // sign-in with this session after a full-page OAuth redirect return.\n const session: WalletSession = {\n address,\n chainId,\n signTypedData,\n canSignSilently: true,\n };\n this.session = session;\n // A live connect() (in-page popup flow) consumes the session via its promise;\n // otherwise the promise died with the pre-redirect page, so emit to subscribers.\n if (this.pending) {\n this.pending.resolve(session);\n this.pending = null;\n } else {\n this.emit(session);\n }\n }\n\n clearSession(): void {\n this.session = undefined;\n this.emit(undefined);\n }\n\n // Called by the bridge on Privy's onError. String codes like `exited_auth_flow`\n // mean the user dismissed the modal.\n handleLoginError(error: unknown): void {\n if (!this.pending) return;\n const err = error instanceof Error ? error : new Error(String(error));\n this.pending.reject(err);\n this.pending = null;\n }\n\n async connect(method?: LoginMethod): Promise<WalletSession> {\n if (this.session) return this.session;\n if (!this.bindings) {\n throw new Error(\n \"PrivyAdapter not bound. Ensure the adapter Provider wraps the app.\",\n );\n }\n\n const chosen = method ?? this.supportedMethods.at(0);\n if (!chosen) {\n throw new Error(\"PrivyAdapter has no supported login methods configured\");\n }\n const privyMethod = PRIVY_METHOD_MAP[chosen];\n if (!privyMethod || !this.supportedMethods.includes(chosen)) {\n throw new Error(`PrivyAdapter does not support login method \"${chosen}\"`);\n }\n\n const bindings = this.bindings;\n const oauthProvider = PRIVY_OAUTH_PROVIDERS[chosen];\n return new Promise<WalletSession>((resolve, reject) => {\n this.pending = { resolve, reject };\n const fail = (error: unknown) => {\n this.pending = null;\n reject(error instanceof Error ? error : new Error(String(error)));\n };\n try {\n // initOAuth navigates away, so this promise stays pending until the page\n // unloads; syncFromEmbeddedWallet emits the session on the redirect back.\n if (oauthProvider) {\n bindings.initOAuth({ provider: oauthProvider }).catch(fail);\n } else {\n bindings.openLoginModal({ loginMethods: [privyMethod] });\n }\n } catch (error) {\n fail(error);\n }\n });\n }\n\n async disconnect(): Promise<void> {\n this.clearSession();\n if (!this.bindings) return;\n await this.bindings.logout();\n }\n}\n\nfunction parseCaip2ChainId(caip2: string): number {\n const last = caip2.split(\":\").at(-1);\n const n = Number(last);\n if (!Number.isFinite(n)) {\n throw new Error(\n `PrivyAdapter: could not parse chainId from CAIP-2 \"${caip2}\"`,\n );\n }\n return n;\n}\n\nexport type { SignTypedDataParams };\n","import { useEffect, useRef } from \"react\";\nimport {\n getEmbeddedConnectedWallet,\n useLogin,\n useLoginWithOAuth,\n useLogout,\n usePrivy,\n useSignTypedData,\n useWallets,\n} from \"@privy-io/react-auth\";\nimport type { PrivyCore, SignTypedDataParams } from \"./adapter.js\";\n\ntype Hex = `0x${string}`;\n\ninterface PrivyAdapterBridgeProps {\n core: PrivyCore;\n}\n\n// Captures the React-only Privy hooks and wires them into PrivyCore so the\n// class can drive Privy without owning React state. Mounted inside PrivyProvider.\nexport function PrivyAdapterBridge({ core }: PrivyAdapterBridgeProps) {\n const { ready, authenticated } = usePrivy();\n const { wallets } = useWallets();\n const { signTypedData } = useSignTypedData();\n const { logout } = useLogout();\n const { login: openLoginModal } = useLogin({\n onError: (error) => core.handleLoginError(error),\n });\n // Also mounts this hook on the page Privy redirects back to, which is what\n // lets it finish the OAuth flow there.\n const { initOAuth } = useLoginWithOAuth({\n onError: (error) => core.handleLoginError(error),\n });\n\n // Privy returns fresh function references each render. A ref keeps the bind\n // stable so we bind once per core instead of re-binding every render.\n const fnsRef = useRef({ openLoginModal, initOAuth, logout, signTypedData });\n useEffect(() => {\n fnsRef.current = { openLoginModal, initOAuth, logout, signTypedData };\n }, [openLoginModal, initOAuth, logout, signTypedData]);\n\n useEffect(() => {\n return core.bind({\n openLoginModal: (opts) => fnsRef.current.openLoginModal(opts),\n initOAuth: (opts) => fnsRef.current.initOAuth(opts),\n logout: () => fnsRef.current.logout(),\n // Privy owns the embedded wallet keys, so showWalletUIs:false signs the\n // credential typed-data silently as part of login.\n signTypedData: async (args, address) => {\n const result = await fnsRef.current.signTypedData(\n args as unknown as SignTypedDataParams,\n { address, uiOptions: { showWalletUIs: false } },\n );\n return result.signature as Hex;\n },\n });\n }, [core]);\n\n useEffect(() => {\n if (!ready) return;\n if (!authenticated) {\n core.clearSession();\n return;\n }\n const embedded = getEmbeddedConnectedWallet(wallets);\n if (embedded) core.syncFromEmbeddedWallet(embedded);\n }, [core, ready, authenticated, wallets]);\n\n return null;\n}\n","import { useMemo, type ComponentType, type ReactNode } from \"react\";\nimport { PrivyProvider, type PrivyClientConfig } from \"@privy-io/react-auth\";\nimport { normalizeWalletTheme, type WalletTheme } from \"../types.js\";\nimport type { PrivyCore } from \"./adapter.js\";\nimport { PrivyAdapterBridge } from \"./bridge.js\";\n\ninterface PrivyProviderConfig {\n appId: string;\n clientId?: string;\n}\n\n// Build the adapter Provider bound to a specific core + config. Mounts\n// PrivyProvider with embedded wallets + showWalletUIs:false for silent signing.\nexport function createPrivyProvider(\n core: PrivyCore,\n config: PrivyProviderConfig,\n): ComponentType<{ children: ReactNode; theme?: WalletTheme }> {\n return function PrivyAuthProvider({\n children,\n theme,\n }: {\n children: ReactNode;\n theme?: WalletTheme;\n }) {\n const { mode } = normalizeWalletTheme(theme);\n // Memoize so a new config object per render doesn't rebuild PrivyProvider's\n // context and cascade re-renders into descendants.\n const privyConfig = useMemo<PrivyClientConfig>(\n () => ({\n appearance: { theme: mode },\n embeddedWallets: {\n ethereum: { createOnLogin: \"users-without-wallets\" as const },\n showWalletUIs: false,\n },\n // Social/email adapter only (external wallets go through the rainbow\n // adapter), so don't init WalletConnect / fetch its registry on mount.\n externalWallets: {\n disableAllExternalWallets: true,\n walletConnect: { enabled: false },\n },\n }),\n [mode],\n );\n\n return (\n <PrivyProvider\n appId={config.appId}\n clientId={config.clientId}\n config={privyConfig}\n >\n <PrivyAdapterBridge core={core} />\n {children}\n </PrivyProvider>\n );\n };\n}\n","import type { LoginMethod, WalletAdapter, WalletController } from \"../types.js\";\nimport { PrivyCore, resolvePrivyMethods } from \"./adapter.js\";\nimport { createPrivyProvider } from \"./provider.js\";\n\n// Config slice for the Privy adapter (mirrors connect.renown.adapters.privy).\n// `methods` defaults to [GOOGLE, EMAIL] when omitted.\nexport interface PHRenownPrivyAdapterConfig {\n appId: string;\n clientId?: string;\n methods?: string[];\n}\n\n// Build the Privy WalletAdapter. Provider mounts PrivyProvider + a bridge;\n// useController exposes imperative connect/disconnect over the shared core.\nexport function createPrivyAdapter(\n config: PHRenownPrivyAdapterConfig,\n): WalletAdapter {\n const supportedMethods: LoginMethod[] = resolvePrivyMethods(config.methods);\n const core = new PrivyCore(supportedMethods);\n const Provider = createPrivyProvider(core, {\n appId: config.appId,\n clientId: config.clientId,\n });\n\n function useController(): WalletController {\n return {\n connect: (method) => core.connect(method),\n disconnect: () => core.disconnect(),\n getSession: () => core.getSession(),\n subscribe: (listener) => core.subscribe(listener),\n supportedMethods,\n };\n }\n\n return {\n id: \"privy\",\n supportedMethods,\n Provider,\n useController,\n };\n}\n\nexport { PrivyCore, resolvePrivyMethods } from \"./adapter.js\";\nexport type { PrivyBindings } from \"./adapter.js\";\nexport { PrivyAdapterBridge } from \"./bridge.js\";\nexport { createPrivyProvider } from \"./provider.js\";\n"],"mappings":"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"}
@@ -0,0 +1,14 @@
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
10
+ //#region src/wallet/rainbow/index.d.ts
11
+ declare function createRainbowAdapter(config: PHRenownRainbowAdapterConfig): WalletAdapter;
12
+ //#endregion
13
+ export { type PHRenownRainbowAdapterConfig, createRainbowAdapter };
14
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +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"}
@@ -0,0 +1,218 @@
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
+ }
139
+ //#endregion
140
+ //#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
+ };
208
+ return {
209
+ id: "rainbow",
210
+ supportedMethods: [LoginMethod.WALLET],
211
+ Provider,
212
+ useController: () => controller
213
+ };
214
+ }
215
+ //#endregion
216
+ export { createRainbowAdapter };
217
+
218
+ //# sourceMappingURL=index.js.map
@@ -0,0 +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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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@renown/sdk",
3
- "version": "6.2.2-dev.2",
3
+ "version": "6.2.2-dev.20",
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,
@@ -31,6 +31,30 @@
31
31
  "types": "./dist/crypto.d.ts",
32
32
  "import": "./dist/crypto.js",
33
33
  "default": "./dist/crypto.js"
34
+ },
35
+ "./wallet": {
36
+ "source": "./src/wallet/index.ts",
37
+ "types": "./dist/wallet/index.d.ts",
38
+ "import": "./dist/wallet/index.js",
39
+ "default": "./dist/wallet/index.js"
40
+ },
41
+ "./wallet/rainbow": {
42
+ "source": "./src/wallet/rainbow/index.ts",
43
+ "types": "./dist/wallet/rainbow/index.d.ts",
44
+ "import": "./dist/wallet/rainbow/index.js",
45
+ "default": "./dist/wallet/rainbow/index.js"
46
+ },
47
+ "./wallet/privy": {
48
+ "source": "./src/wallet/privy/index.ts",
49
+ "types": "./dist/wallet/privy/index.d.ts",
50
+ "import": "./dist/wallet/privy/index.js",
51
+ "default": "./dist/wallet/privy/index.js"
52
+ },
53
+ "./wallet/mock": {
54
+ "source": "./src/wallet/mock/index.ts",
55
+ "types": "./dist/wallet/mock/index.d.ts",
56
+ "import": "./dist/wallet/mock/index.js",
57
+ "default": "./dist/wallet/mock/index.js"
34
58
  }
35
59
  },
36
60
  "types": "./dist/index.d.ts",
@@ -46,8 +70,14 @@
46
70
  "dist"
47
71
  ],
48
72
  "devDependencies": {
73
+ "@privy-io/react-auth": "^3.25.0",
74
+ "@rainbow-me/rainbowkit": "^2.2.11",
75
+ "@tanstack/react-query": "^5.90.2",
76
+ "@types/react": "19.2.14",
77
+ "react": ">=19",
49
78
  "tsdown": "0.21.1",
50
- "vitest": "4.1.1"
79
+ "vitest": "4.1.1",
80
+ "wagmi": "^2.19.5"
51
81
  },
52
82
  "dependencies": {
53
83
  "@didtools/key-webcrypto": "^0.2.0",
@@ -56,7 +86,31 @@
56
86
  "key-did-resolver": "^4.0.0",
57
87
  "uint8arrays": "^5.1.0",
58
88
  "viem": "~2.50.4",
59
- "@powerhousedao/shared": "6.2.2-dev.2"
89
+ "@powerhousedao/shared": "6.2.2-dev.20"
90
+ },
91
+ "peerDependencies": {
92
+ "@privy-io/react-auth": "^3.25.0",
93
+ "@rainbow-me/rainbowkit": "^2.2.11",
94
+ "@tanstack/react-query": "^5.90.2",
95
+ "react": ">=19",
96
+ "wagmi": "^2.19.5"
97
+ },
98
+ "peerDependenciesMeta": {
99
+ "@privy-io/react-auth": {
100
+ "optional": true
101
+ },
102
+ "@rainbow-me/rainbowkit": {
103
+ "optional": true
104
+ },
105
+ "@tanstack/react-query": {
106
+ "optional": true
107
+ },
108
+ "react": {
109
+ "optional": true
110
+ },
111
+ "wagmi": {
112
+ "optional": true
113
+ }
60
114
  },
61
115
  "keywords": [
62
116
  "powerhouse",
@@ -1,14 +0,0 @@
1
- import { m as JwkKeyPair, p as JsonWebKeyPairStorage } from "./signer-DYKGoYHB.js";
2
-
3
- //#region src/crypto/browser-key-storage.d.ts
4
- declare class BrowserKeyStorage implements JsonWebKeyPairStorage {
5
- #private;
6
- constructor(db: IDBDatabase);
7
- static create(dbName?: string): Promise<BrowserKeyStorage>;
8
- saveKeyPair(keyPair: JwkKeyPair): Promise<void>;
9
- loadKeyPair(): Promise<JwkKeyPair | undefined>;
10
- removeKeyPair(): Promise<void>;
11
- }
12
- //#endregion
13
- export { BrowserKeyStorage as t };
14
- //# sourceMappingURL=browser-key-storage-DSkDBAhU.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"browser-key-storage-DSkDBAhU.d.ts","names":[],"sources":["../src/crypto/browser-key-storage.ts"],"mappings":";;;cAMa,iBAAA,YAA6B,qBAAA;EAAA;cAG5B,EAAA,EAAI,WAAA;EAAA,OAIH,MAAA,CACX,MAAA,YACC,OAAA,CAAQ,iBAAA;EA4CL,WAAA,CAAY,OAAA,EAAS,UAAA,GAAU,OAAA;EAS/B,WAAA,CAAA,GAAe,OAAA,CAAQ,UAAA;EAavB,aAAA,CAAA,GAAiB,OAAA;AAAA"}