@renown/sdk 6.2.2-dev.24 → 6.2.2-dev.26
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.
- package/README.md +27 -0
- package/dist/{browser-key-storage-v4O-fjz0.js → browser-key-storage-e3RQsnLS.js} +1 -1
- package/dist/{browser-key-storage-v4O-fjz0.js.map → browser-key-storage-e3RQsnLS.js.map} +1 -1
- package/dist/constants-B7wOp9oo.js +79 -0
- package/dist/constants-B7wOp9oo.js.map +1 -0
- package/dist/crypto.d.ts +2 -2
- package/dist/crypto.js +2 -2
- package/dist/{index-CLJb-Nle.d.ts → index-BF2qTv7d.d.ts} +7 -3
- package/dist/index-BF2qTv7d.d.ts.map +1 -0
- package/dist/index.d.ts +5 -3
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +5 -3
- package/dist/index.js.map +1 -1
- package/dist/{meta-v66wx9x-.js → meta-CHgd9Qd0.js} +2 -2
- package/dist/{meta-v66wx9x-.js.map → meta-CHgd9Qd0.js.map} +1 -1
- package/dist/{meta-ClnkfLQZ.js → meta-D-5kvwx8.js} +2 -2
- package/dist/{meta-ClnkfLQZ.js.map → meta-D-5kvwx8.js.map} +1 -1
- package/dist/{meta-DoUiCChW.d.ts → meta-DY5WCada.d.ts} +2 -2
- package/dist/{meta-DoUiCChW.d.ts.map → meta-DY5WCada.d.ts.map} +1 -1
- package/dist/{meta-DEiGzvRl.d.ts → meta-DbqBJa4j.d.ts} +8 -3
- package/dist/meta-DbqBJa4j.d.ts.map +1 -0
- package/dist/{meta-BIIw0yao.d.ts → meta-DjoNJy1t.d.ts} +2 -2
- package/dist/{meta-BIIw0yao.d.ts.map → meta-DjoNJy1t.d.ts.map} +1 -1
- package/dist/node.d.ts +3 -3
- package/dist/node.js +3 -2
- package/dist/node.js.map +1 -1
- package/dist/{renown-builder-1WTEoRc6.js → renown-builder-KOzzCXrQ.js} +22 -82
- package/dist/renown-builder-KOzzCXrQ.js.map +1 -0
- package/dist/{signer-CgYhXTV7.js → signer-BpvojvCh.js} +13 -6
- package/dist/signer-BpvojvCh.js.map +1 -0
- package/dist/{types-DiIZNA8t.js → types-C_qc_62W.js} +1 -1
- package/dist/{types-DiIZNA8t.js.map → types-C_qc_62W.js.map} +1 -1
- package/dist/{types-DteAE_lL.d.ts → types-CxKG5UsV.d.ts} +2 -2
- package/dist/{types-DteAE_lL.d.ts.map → types-CxKG5UsV.d.ts.map} +1 -1
- package/dist/{types-efrA0fu2.d.ts → types-ocCFjR5j.d.ts} +3 -1
- package/dist/{types-efrA0fu2.d.ts.map → types-ocCFjR5j.d.ts.map} +1 -1
- package/dist/{utils-BuICPHTW.d.ts → utils-DS2Ha4Bg.d.ts} +8 -3
- package/dist/utils-DS2Ha4Bg.d.ts.map +1 -0
- package/dist/wallet/index.d.ts +1 -1
- package/dist/wallet/index.js +1 -1
- package/dist/wallet/mock/factory.d.ts +2 -2
- package/dist/wallet/mock/factory.js +1 -1
- package/dist/wallet/mock/index.d.ts +2 -2
- package/dist/wallet/mock/index.js +1 -1
- package/dist/wallet/privy/factory.d.ts +3 -3
- package/dist/wallet/privy/factory.d.ts.map +1 -1
- package/dist/wallet/privy/factory.js +26 -5
- package/dist/wallet/privy/factory.js.map +1 -1
- package/dist/wallet/privy/index.d.ts +2 -2
- package/dist/wallet/privy/index.js +1 -1
- package/dist/wallet/rainbow/factory.d.ts +2 -2
- package/dist/wallet/rainbow/factory.js +30 -27
- package/dist/wallet/rainbow/factory.js.map +1 -1
- package/dist/wallet/rainbow/index.d.ts +3 -3
- package/dist/wallet/rainbow/index.js +1 -1
- package/dist/wallet/rainbow/index.js.map +1 -1
- package/package.json +2 -2
- package/dist/index-CLJb-Nle.d.ts.map +0 -1
- package/dist/meta-DEiGzvRl.d.ts.map +0 -1
- package/dist/renown-builder-1WTEoRc6.js.map +0 -1
- package/dist/signer-CgYhXTV7.js.map +0 -1
- package/dist/utils-BuICPHTW.d.ts.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types-
|
|
1
|
+
{"version":3,"file":"types-C_qc_62W.js","names":[],"sources":["../src/wallet/types.ts"],"sourcesContent":["import type { ComponentType, ReactNode } from \"react\";\nimport type { SignCredentialTypedData } from \"../credential.js\";\n\n// Const object rather than an enum so config can be authored with plain string\n// literals (`methods: [\"google\"]`) while `LoginMethod.GOOGLE` still works.\nexport const LoginMethod = {\n WALLET: \"wallet\",\n GOOGLE: \"google\",\n EMAIL: \"email\",\n APPLE: \"apple\",\n} as const;\n\nexport type LoginMethod = (typeof LoginMethod)[keyof typeof LoginMethod];\n\n// Colors the host passes into an adapter Provider so its wallet UI matches.\n// The adapter stays agnostic to how the host derives them (CSS tokens, etc.).\nexport interface WalletThemeColors {\n accentColor?: string;\n accentColorForeground?: string;\n}\n\n// The theme the host passes at runtime: a bare mode, or a mode plus colors.\nexport type WalletTheme =\n | \"light\"\n | \"dark\"\n | ({ mode: \"light\" | \"dark\" } & WalletThemeColors);\n\n// Normalize a WalletTheme (or undefined) to a mode + colors the adapters use.\nexport function normalizeWalletTheme(theme: WalletTheme | undefined): {\n mode: \"light\" | \"dark\";\n accentColor?: string;\n accentColorForeground?: string;\n} {\n if (theme === undefined) return { mode: \"light\" };\n if (typeof theme === \"string\") return { mode: theme };\n return {\n mode: theme.mode,\n accentColor: theme.accentColor,\n accentColorForeground: theme.accentColorForeground,\n };\n}\n\n// The signer surface signIn needs, produced by an adapter after the user connects.\nexport interface WalletSession {\n address: `0x${string}`;\n chainId: number;\n signTypedData: SignCredentialTypedData;\n // Capability, not policy: the session can sign without a user prompt (e.g. a\n // Privy embedded wallet). Whether/when to sign silently is the host's call.\n canSignSilently?: boolean;\n}\n\n// Imperative controls returned by an adapter's React hook (used inside its Provider).\nexport interface WalletController {\n connect(method?: LoginMethod): Promise<WalletSession>;\n disconnect(): Promise<void>;\n getSession(): WalletSession | undefined;\n // Optional push stream of session changes (fires immediately with the current\n // one), so a host can complete sign-in on an OAuth return with no live connect().\n subscribe?(\n listener: (session: WalletSession | undefined) => void,\n ): () => void;\n}\n\n// Identity + capabilities, declared once per adapter in a dependency-free module\n// so a host can list methods and detect a redirect return with no wallet library.\nexport interface WalletAdapterMeta {\n id: string;\n // URL params the adapter leaves when a full-page OAuth login returns; empty for\n // adapters with no redirect flow.\n redirectReturnParams: string[];\n // Must be known before load(): the login UI renders buttons before any wallet\n // library is fetched.\n supportedMethods: LoginMethod[];\n}\n\n// Behaviour only — what an adapter factory returns. Identity lives in the meta.\nexport interface WalletAdapterImpl {\n // React provider that must wrap the app subtree for this adapter to work; the\n // host passes its current theme so the adapter's UI can match.\n Provider: ComponentType<{ children: ReactNode; theme?: WalletTheme }>;\n // Hook returning imperative controls; MUST be called inside <Provider>.\n useController: () => WalletController;\n}\n\n// What the host consumes: resolveAdapters pairs an impl with its meta.\nexport interface WalletAdapter extends WalletAdapterImpl {\n meta: WalletAdapterMeta;\n}\n\n// An adapter's light entry: eager meta plus a lazy loader that pulls the factory\n// and its wallet library only once login is activated.\nexport interface WalletAdapterDescriptor {\n meta: WalletAdapterMeta;\n load: () => Promise<WalletAdapterImpl>;\n}\n\nexport type WalletAdapterFactory<Config = unknown> = (\n config: Config,\n) => WalletAdapterImpl;\n\nexport type WalletAdapterProvider<Config = unknown> = (\n config: Config,\n) => WalletAdapterDescriptor;\n"],"mappings":";AAKA,MAAa,cAAc;CACzB,QAAQ;CACR,QAAQ;CACR,OAAO;CACP,OAAO;CACR;AAkBD,SAAgB,qBAAqB,OAInC;AACA,KAAI,UAAU,KAAA,EAAW,QAAO,EAAE,MAAM,SAAS;AACjD,KAAI,OAAO,UAAU,SAAU,QAAO,EAAE,MAAM,OAAO;AACrD,QAAO;EACL,MAAM,MAAM;EACZ,aAAa,MAAM;EACnB,uBAAuB,MAAM;EAC9B"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { it as SignCredentialTypedData } from "./types-
|
|
1
|
+
import { it as SignCredentialTypedData } from "./types-ocCFjR5j.js";
|
|
2
2
|
import { ComponentType, ReactNode } from "react";
|
|
3
3
|
|
|
4
4
|
//#region src/wallet/types.d.ts
|
|
@@ -56,4 +56,4 @@ type WalletAdapterFactory<Config = unknown> = (config: Config) => WalletAdapterI
|
|
|
56
56
|
type WalletAdapterProvider<Config = unknown> = (config: Config) => WalletAdapterDescriptor;
|
|
57
57
|
//#endregion
|
|
58
58
|
export { WalletAdapterImpl as a, WalletController as c, WalletThemeColors as d, normalizeWalletTheme as f, WalletAdapterFactory as i, WalletSession as l, WalletAdapter as n, WalletAdapterMeta as o, WalletAdapterDescriptor as r, WalletAdapterProvider as s, LoginMethod as t, WalletTheme as u };
|
|
59
|
-
//# sourceMappingURL=types-
|
|
59
|
+
//# sourceMappingURL=types-CxKG5UsV.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types-
|
|
1
|
+
{"version":3,"file":"types-CxKG5UsV.d.ts","names":[],"sources":["../src/wallet/types.ts"],"mappings":";;;;cAKa,WAAA;EAAA;;;;;KAOD,WAAA,WAAsB,WAAA,eAA0B,WAAA;AAAA,UAI3C,iBAAA;EACf,WAAA;EACA,qBAAA;AAAA;AAAA,KAIU,WAAA;EAGL,IAAA;AAAA,IAA2B,iBAAA;AAAA,iBAGlB,oBAAA,CAAqB,KAAA,EAAO,WAAA;EAC1C,IAAA;EACA,WAAA;EACA,qBAAA;AAAA;AAAA,UAYe,aAAA;EACf,OAAA;EACA,OAAA;EACA,aAAA,EAAe,uBAAA;EAGf,eAAA;AAAA;AAAA,UAIe,gBAAA;EACf,OAAA,CAAQ,MAAA,GAAS,WAAA,GAAc,OAAA,CAAQ,aAAA;EACvC,UAAA,IAAc,OAAA;EACd,UAAA,IAAc,aAAA;EAGd,SAAA,EACE,QAAA,GAAW,OAAA,EAAS,aAAA;AAAA;AAAA,UAMP,iBAAA;EACf,EAAA;EAGA,oBAAA;EAGA,gBAAA,EAAkB,WAAA;AAAA;AAAA,UAIH,iBAAA;EAGf,QAAA,EAAU,aAAA;IAAgB,QAAA,EAAU,SAAA;IAAW,KAAA,GAAQ,WAAA;EAAA;EAEvD,aAAA,QAAqB,gBAAA;AAAA;AAAA,UAIN,aAAA,SAAsB,iBAAA;EACrC,IAAA,EAAM,iBAAA;AAAA;AAAA,UAKS,uBAAA;EACf,IAAA,EAAM,iBAAA;EACN,IAAA,QAAY,OAAA,CAAQ,iBAAA;AAAA;AAAA,KAGV,oBAAA,sBACV,MAAA,EAAQ,MAAA,KACL,iBAAA;AAAA,KAEO,qBAAA,sBACV,MAAA,EAAQ,MAAA,KACL,uBAAA"}
|
|
@@ -543,6 +543,8 @@ interface JsonWebKeyPairStorage {
|
|
|
543
543
|
type DID = `did:${string}`;
|
|
544
544
|
interface IRenownCrypto {
|
|
545
545
|
did: DID;
|
|
546
|
+
/** Chain the bearer token is scoped to. Optional so an external implementation still satisfies this; the builder warns when it differs from the issuing chain. */
|
|
547
|
+
chainId?: number;
|
|
546
548
|
publicKey: CryptoKey;
|
|
547
549
|
removeDid(): Promise<void>;
|
|
548
550
|
sign: (data: Uint8Array) => Promise<Uint8Array>;
|
|
@@ -556,4 +558,4 @@ interface IRenownCrypto {
|
|
|
556
558
|
interface IConnectCrypto extends IRenownCrypto {}
|
|
557
559
|
//#endregion
|
|
558
560
|
export { IEventEmitter as $, LoginStatus as A, Service as B, InternalUser as C, JWTVerifyPolicies as D, JWTVerified as E, RenownEventEmitter as F, User$1 as G, SignInParams as H, RenownEvents as I, VerifiedCredential as J, Verifiable as K, RenownProfile as L, PowerhouseVerifiableCredential as M, ProfileFetcher as N, JsonWebKey$1 as O, Proof as P, MemoryStorage as Q, RenownStorage as R, IVerifiableCredential as S, JWTPayload as T, Signer as U, ServiceEndpoint as V, Unsubscribe as W, W3CCredential as X, VerifiedJWT as Y, BaseStorage as Z, IPowerhouseCredentialSubject as _, DEFAULT_RENOWN_URL as _t, JwkKeyPair as a, VerifiedAuthCredential as at, IRenown as b, RENOWN_SESSION_COOKIE as bt, ConditionWeightedThreshold as c, fetchDelegationCredential as ct, DIDDocument as d, verifyCredentialSignature as dt, BuildCredentialParams as et, DIDDocumentMetadata as f, CREDENTIAL_SCHEMA_EIP712_TYPE as ft, IAuthCredentialSubject as g, DEFAULT_RENOWN_NETWORK_ID as gt, EcdsaSignature as h, DEFAULT_RENOWN_CHAIN_ID as ht, JsonWebKeyPairStorage as i, SignCredentialTypedData as it, PKHDid as j, KeyCapabilitySection as k, CreateBearerTokenOptions as l, recoverCredentialSigner as lt, DIDResolutionResult as m, CREDENTIAL_TYPES as mt, IConnectCrypto as n, CredentialMessage as nt, AuthVerifiableCredential as o, VerifyAuthCredentialOptions as ot, DIDResolutionMetadata as p, CREDENTIAL_SUBJECT_TYPE as pt, VerificationMethod as q, IRenownCrypto as r, FetchDelegationCredentialOptions as rt, AuthVerifiedCredential as s, buildAndSignCredential as st, DID as t, CredentialDomain as tt, CredentialStatus as u, verifyAuthCredential as ut, IPowerhouseIssuerType as v, DOMAIN_TYPE as vt, Issuer as w, ISigner$1 as x, VERIFIABLE_CREDENTIAL_EIP712_TYPE as xt, IProof as y, ISSUER_TYPE as yt, RenownStorageMap as z };
|
|
559
|
-
//# sourceMappingURL=types-
|
|
561
|
+
//# sourceMappingURL=types-ocCFjR5j.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types-
|
|
1
|
+
{"version":3,"file":"types-ocCFjR5j.d.ts","names":[],"sources":["../src/constants.ts","../src/credential.ts","../src/event/types.ts","../src/storage/common.ts","../src/types.ts","../src/crypto/types.ts"],"mappings":"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"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { A as LoginStatus, C as InternalUser, F as RenownEventEmitter, G as User$1, H as SignInParams, I as RenownEvents, J as VerifiedCredential, L as RenownProfile, M as PowerhouseVerifiableCredential, N as ProfileFetcher, Q as MemoryStorage, R as RenownStorage, b as IRenown, i as JsonWebKeyPairStorage, j as PKHDid, l as CreateBearerTokenOptions, r as IRenownCrypto, s as AuthVerifiedCredential, w as Issuer, x as ISigner$1, z as RenownStorageMap } from "./types-
|
|
1
|
+
import { A as LoginStatus, C as InternalUser, F as RenownEventEmitter, G as User$1, H as SignInParams, I as RenownEvents, J as VerifiedCredential, L as RenownProfile, M as PowerhouseVerifiableCredential, N as ProfileFetcher, Q as MemoryStorage, R as RenownStorage, b as IRenown, i as JsonWebKeyPairStorage, j as PKHDid, l as CreateBearerTokenOptions, r as IRenownCrypto, s as AuthVerifiedCredential, w as Issuer, x as ISigner$1, z as RenownStorageMap } from "./types-ocCFjR5j.js";
|
|
2
2
|
import { Action } from "@powerhousedao/shared/document-model";
|
|
3
3
|
import { Resolver } from "did-resolver";
|
|
4
4
|
|
|
@@ -28,8 +28,10 @@ declare class SwitchboardClient {
|
|
|
28
28
|
declare class RenownMemoryStorage extends MemoryStorage<RenownStorageMap> {}
|
|
29
29
|
declare class Renown implements IRenown {
|
|
30
30
|
#private;
|
|
31
|
-
constructor(store: RenownStorage, eventEmitter: RenownEventEmitter, crypto: IRenownCrypto, appName: string, baseUrl?: string, profileFetcher?: ProfileFetcher, switchboard?: SwitchboardClient);
|
|
31
|
+
constructor(store: RenownStorage, eventEmitter: RenownEventEmitter, crypto: IRenownCrypto, appName: string, baseUrl?: string, profileFetcher?: ProfileFetcher, switchboard?: SwitchboardClient, chainId?: number);
|
|
32
32
|
get baseUrl(): string;
|
|
33
|
+
/** Chain id this app issues credentials on; a session from another chain is rejected by {@link signIn}. */
|
|
34
|
+
get chainId(): number;
|
|
33
35
|
get user(): InternalUser | undefined;
|
|
34
36
|
get status(): LoginStatus;
|
|
35
37
|
get signer(): ISigner$1;
|
|
@@ -64,6 +66,8 @@ interface RenownBuilderOptions {
|
|
|
64
66
|
baseUrl?: string;
|
|
65
67
|
switchboardUrl?: string;
|
|
66
68
|
profileFetcher?: ProfileFetcher;
|
|
69
|
+
/** Chain id credentials are issued on (default 1). The issuer DID embeds it, so `signIn` rejects a wallet session from another chain. */
|
|
70
|
+
chainId?: number;
|
|
67
71
|
}
|
|
68
72
|
/**
|
|
69
73
|
* Base builder for creating Renown instances.
|
|
@@ -103,6 +107,7 @@ declare class BaseRenownBuilder {
|
|
|
103
107
|
*/
|
|
104
108
|
withBaseUrl(baseUrl: string): this;
|
|
105
109
|
withSwitchboardUrl(switchboardUrl: string): this;
|
|
110
|
+
withChainId(chainId: number): this;
|
|
106
111
|
/**
|
|
107
112
|
* Set a profile fetcher strategy for enriching user data after login.
|
|
108
113
|
* The fetcher receives the authenticated user and the base URL,
|
|
@@ -201,4 +206,4 @@ declare function createAuthBearerToken(chainId: number, networkId: string, addre
|
|
|
201
206
|
declare const getResolver: () => Resolver;
|
|
202
207
|
//#endregion
|
|
203
208
|
export { SwitchboardClient as C, RenownMemoryStorage as S, BaseRenownBuilder as _, getResolver as a, resolveSwitchboardEndpoint as b, RenownSession as c, RenownSessionProfile as d, VerifyRenownSessionOptions as f, fetchRenownProfile as g, verifyRenownSession as h, createAuthBearerToken as i, RenownSessionClaims as l, serializeRenownSessionCookie as m, VerifyAuthBearerTokenOptions as n, parsePkhDid as o, readSessionClaims as p, assertIsAuthCredential as r, verifyAuthBearerToken as s, ILogger as t, RenownSessionCookie as u, RenownBuilderOptions as v, Renown as x, ResolveSwitchboardEndpointOptions as y };
|
|
204
|
-
//# sourceMappingURL=utils-
|
|
209
|
+
//# sourceMappingURL=utils-DS2Ha4Bg.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"utils-DS2Ha4Bg.d.ts","names":[],"sources":["../src/switchboard.ts","../src/common.ts","../src/discovery.ts","../src/renown-builder.ts","../src/profile.ts","../src/session.ts","../src/utils.ts"],"mappings":"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"}
|
package/dist/wallet/index.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { a as WalletAdapterImpl, c as WalletController, d as WalletThemeColors, f as normalizeWalletTheme, i as WalletAdapterFactory, l as WalletSession, n as WalletAdapter, o as WalletAdapterMeta, r as WalletAdapterDescriptor, s as WalletAdapterProvider, t as LoginMethod, u as WalletTheme } from "../types-
|
|
1
|
+
import { a as WalletAdapterImpl, c as WalletController, d as WalletThemeColors, f as normalizeWalletTheme, i as WalletAdapterFactory, l as WalletSession, n as WalletAdapter, o as WalletAdapterMeta, r as WalletAdapterDescriptor, s as WalletAdapterProvider, t as LoginMethod, u as WalletTheme } from "../types-CxKG5UsV.js";
|
|
2
2
|
|
|
3
3
|
//#region src/wallet/controller.d.ts
|
|
4
4
|
declare function isWalletRedirectReturn(search: string, metas: WalletAdapterMeta[]): boolean;
|
package/dist/wallet/index.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { n as normalizeWalletTheme, t as LoginMethod } from "../types-
|
|
1
|
+
import { n as normalizeWalletTheme, t as LoginMethod } from "../types-C_qc_62W.js";
|
|
2
2
|
//#region src/wallet/controller.ts
|
|
3
3
|
function isWalletRedirectReturn(search, metas) {
|
|
4
4
|
const params = new URLSearchParams(search);
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { a as WalletAdapterImpl } from "../../types-
|
|
2
|
-
import { r as PHRenownMockAdapterConfig } from "../../meta-
|
|
1
|
+
import { a as WalletAdapterImpl } from "../../types-CxKG5UsV.js";
|
|
2
|
+
import { r as PHRenownMockAdapterConfig } from "../../meta-DY5WCada.js";
|
|
3
3
|
|
|
4
4
|
//#region src/wallet/mock/factory.d.ts
|
|
5
5
|
/** Headless test/dev wallet adapter: `connect()` resolves immediately with a session backed by a viem local account (real EIP-712 signatures, no wallet UI or OAuth). **TEST/DEV ONLY; never enable in production** — it signs with a known key. See the reactor-browser README "Testing" and the Academy Renown auth guide. */
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { r as resolveMockMethods } from "../../meta-
|
|
1
|
+
import { r as resolveMockMethods } from "../../meta-CHgd9Qd0.js";
|
|
2
2
|
import { privateKeyToAccount } from "viem/accounts";
|
|
3
3
|
//#region src/wallet/mock/factory.ts
|
|
4
4
|
const DEFAULT_TEST_KEY = "0xac0974bec39a17e36ba4a6b4d238ff944bacb478cbed5efcae784d7bf4f2ff80";
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { r as WalletAdapterDescriptor } from "../../types-
|
|
2
|
-
import { a as resolveMockMethods, i as mockAdapterMeta, n as MockLoginMethod, r as PHRenownMockAdapterConfig, t as DEFAULT_MOCK_METHODS } from "../../meta-
|
|
1
|
+
import { r as WalletAdapterDescriptor } from "../../types-CxKG5UsV.js";
|
|
2
|
+
import { a as resolveMockMethods, i as mockAdapterMeta, n as MockLoginMethod, r as PHRenownMockAdapterConfig, t as DEFAULT_MOCK_METHODS } from "../../meta-DY5WCada.js";
|
|
3
3
|
|
|
4
4
|
//#region src/wallet/mock/index.d.ts
|
|
5
5
|
/** Headless test/dev wallet adapter for `RenownWalletProvider`: signs real EIP-712 credentials with a local viem account, no wallet UI or OAuth, so e2e sign-in is deterministic. **TEST/DEV ONLY; never enable in production** — it signs with a known key. Needs only `viem`, which `@renown/sdk` already depends on. */
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { n as mockAdapterMeta, r as resolveMockMethods, t as DEFAULT_MOCK_METHODS } from "../../meta-
|
|
1
|
+
import { n as mockAdapterMeta, r as resolveMockMethods, t as DEFAULT_MOCK_METHODS } from "../../meta-CHgd9Qd0.js";
|
|
2
2
|
//#region src/wallet/mock/index.ts
|
|
3
3
|
/** Headless test/dev wallet adapter for `RenownWalletProvider`: signs real EIP-712 credentials with a local viem account, no wallet UI or OAuth, so e2e sign-in is deterministic. **TEST/DEV ONLY; never enable in production** — it signs with a known key. Needs only `viem`, which `@renown/sdk` already depends on. */
|
|
4
4
|
function mockAdapter(config) {
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import { it as SignCredentialTypedData } from "../../types-
|
|
2
|
-
import { a as WalletAdapterImpl, l as WalletSession, t as LoginMethod, u as WalletTheme } from "../../types-
|
|
3
|
-
import { n as PHRenownPrivyAdapterConfig } from "../../meta-
|
|
1
|
+
import { it as SignCredentialTypedData } from "../../types-ocCFjR5j.js";
|
|
2
|
+
import { a as WalletAdapterImpl, l as WalletSession, t as LoginMethod, u as WalletTheme } from "../../types-CxKG5UsV.js";
|
|
3
|
+
import { n as PHRenownPrivyAdapterConfig } from "../../meta-DjoNJy1t.js";
|
|
4
4
|
import { ComponentType, ReactNode } from "react";
|
|
5
5
|
import { ConnectedWallet, LoginModalOptions } from "@privy-io/react-auth";
|
|
6
6
|
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"factory.d.ts","names":[],"sources":["../../../src/wallet/privy/adapter.ts","../../../src/wallet/privy/bridge.tsx","../../../src/wallet/privy/provider.tsx","../../../src/wallet/privy/factory.ts"],"mappings":";;;;;;;KASK,GAAA;AAAA,KAcA,oBAAA;AAAA,UAaY,aAAA;EACf,cAAA,GAAiB,OAAA,GAAU,iBAAA;EAC3B,SAAA,GAAY,OAAA;IAAW,QAAA,EAAU,oBAAA;EAAA,MAA2B,OAAA;EAC5D,MAAA,QAAc,OAAA;EACd,aAAA,GACE,IAAA,EAAM,UAAA,CAAW,uBAAA,MACjB,OAAA,EAAS,GAAA,KACN,OAAA,CAAQ,GAAA;AAAA;AAAA,cAUF,SAAA;EAAA,SACF,gBAAA,EAAkB,WAAA;EAAA,QAEnB,QAAA;EAAA,QACA,OAAA;EAAA,QACA,OAAA;EAAA,QACA,SAAA;cAEI,gBAAA,EAAkB,WAAA;EAI9B,IAAA,CAAK,QAAA,EAAU,aAAA;EAOf,UAAA,CAAA,GAAc,aAAA;EAMd,SAAA,CACE,QAAA,GAAW,OAAA,EAAS,aAAA;EAAA,QASd,IAAA;EAMR,sBAAA,CAAuB,MAAA,EAAQ,eAAA;EA8B/B,YAAA,CAAA;EAOA,gBAAA,CAAiB,KAAA;EAOX,OAAA,CAAQ,MAAA,GAAS,WAAA,GAAc,OAAA,CAAQ,aAAA;EAyCvC,UAAA,CAAA,GAAc,OAAA;AAAA;;;UCrKZ,uBAAA;EACR,IAAA,EAAM,SAAA;AAAA;AAAA,iBAKQ,kBAAA,CAAA;EAAqB;AAAA,GAAQ,uBAAA;;;
|
|
1
|
+
{"version":3,"file":"factory.d.ts","names":[],"sources":["../../../src/wallet/privy/adapter.ts","../../../src/wallet/privy/bridge.tsx","../../../src/wallet/privy/provider.tsx","../../../src/wallet/privy/factory.ts"],"mappings":";;;;;;;KASK,GAAA;AAAA,KAcA,oBAAA;AAAA,UAaY,aAAA;EACf,cAAA,GAAiB,OAAA,GAAU,iBAAA;EAC3B,SAAA,GAAY,OAAA;IAAW,QAAA,EAAU,oBAAA;EAAA,MAA2B,OAAA;EAC5D,MAAA,QAAc,OAAA;EACd,aAAA,GACE,IAAA,EAAM,UAAA,CAAW,uBAAA,MACjB,OAAA,EAAS,GAAA,KACN,OAAA,CAAQ,GAAA;AAAA;AAAA,cAUF,SAAA;EAAA,SACF,gBAAA,EAAkB,WAAA;EAAA,QAEnB,QAAA;EAAA,QACA,OAAA;EAAA,QACA,OAAA;EAAA,QACA,SAAA;cAEI,gBAAA,EAAkB,WAAA;EAI9B,IAAA,CAAK,QAAA,EAAU,aAAA;EAOf,UAAA,CAAA,GAAc,aAAA;EAMd,SAAA,CACE,QAAA,GAAW,OAAA,EAAS,aAAA;EAAA,QASd,IAAA;EAMR,sBAAA,CAAuB,MAAA,EAAQ,eAAA;EA8B/B,YAAA,CAAA;EAOA,gBAAA,CAAiB,KAAA;EAOX,OAAA,CAAQ,MAAA,GAAS,WAAA,GAAc,OAAA,CAAQ,aAAA;EAyCvC,UAAA,CAAA,GAAc,OAAA;AAAA;;;UCrKZ,uBAAA;EACR,IAAA,EAAM,SAAA;AAAA;AAAA,iBAKQ,kBAAA,CAAA;EAAqB;AAAA,GAAQ,uBAAA;;;UCbnC,mBAAA;EACR,KAAA;EACA,QAAA;AAAA;AAAA,iBAKc,mBAAA,CACd,IAAA,EAAM,SAAA,EACN,MAAA,EAAQ,mBAAA,GACP,aAAA;EAAgB,QAAA,EAAU,SAAA;EAAW,KAAA,GAAQ,WAAA;AAAA;;;iBCHhC,kBAAA,CACd,MAAA,EAAQ,0BAAA,GACP,iBAAA"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"use client";
|
|
2
|
-
import { n as normalizeWalletTheme, t as LoginMethod } from "../../types-
|
|
3
|
-
import { r as resolvePrivyMethods } from "../../meta-
|
|
2
|
+
import { n as normalizeWalletTheme, t as LoginMethod } from "../../types-C_qc_62W.js";
|
|
3
|
+
import { r as resolvePrivyMethods } from "../../meta-D-5kvwx8.js";
|
|
4
4
|
import { useEffect, useMemo, useRef } from "react";
|
|
5
5
|
import { jsx, jsxs } from "react/jsx-runtime";
|
|
6
6
|
import { PrivyProvider, getEmbeddedConnectedWallet, useLogin, useLoginWithOAuth, useLogout, usePrivy, useSignTypedData, useWallets } from "@privy-io/react-auth";
|
|
@@ -168,12 +168,33 @@ function PrivyAdapterBridge({ core }) {
|
|
|
168
168
|
return null;
|
|
169
169
|
}
|
|
170
170
|
//#endregion
|
|
171
|
+
//#region src/wallet/privy/theme.ts
|
|
172
|
+
const HEX = /^#(?:[0-9a-f]{3}|[0-9a-f]{4}|[0-9a-f]{6}|[0-9a-f]{8})$/i;
|
|
173
|
+
const RGB = /^rgba?\(\s*(-?[\d.]+)[\s,]+(-?[\d.]+)[\s,]+(-?[\d.]+)/i;
|
|
174
|
+
function channel(value) {
|
|
175
|
+
const byte = Math.round(Number(value));
|
|
176
|
+
return Math.min(255, Math.max(0, byte)).toString(16).padStart(2, "0");
|
|
177
|
+
}
|
|
178
|
+
/** Convert a host theme accent color to the hex Privy's `appearance` requires, or `undefined` if it is not expressible. Hosts resolve CSS tokens through `getComputedStyle`, which yields `rgb(...)`, so plain pass-through would be rejected. Alpha is dropped: Privy derives its own variants. */
|
|
179
|
+
function toPrivyAccentColor(color) {
|
|
180
|
+
if (!color) return void 0;
|
|
181
|
+
const value = color.trim();
|
|
182
|
+
if (HEX.test(value)) return value;
|
|
183
|
+
const rgb = RGB.exec(value);
|
|
184
|
+
if (!rgb) return void 0;
|
|
185
|
+
return `#${channel(rgb[1])}${channel(rgb[2])}${channel(rgb[3])}`;
|
|
186
|
+
}
|
|
187
|
+
//#endregion
|
|
171
188
|
//#region src/wallet/privy/provider.tsx
|
|
172
189
|
function createPrivyProvider(core, config) {
|
|
173
190
|
return function PrivyAuthProvider({ children, theme }) {
|
|
174
|
-
const { mode } = normalizeWalletTheme(theme);
|
|
191
|
+
const { mode, accentColor } = normalizeWalletTheme(theme);
|
|
192
|
+
const accent = toPrivyAccentColor(accentColor);
|
|
175
193
|
const privyConfig = useMemo(() => ({
|
|
176
|
-
appearance: {
|
|
194
|
+
appearance: {
|
|
195
|
+
theme: mode,
|
|
196
|
+
...accent ? { accentColor: accent } : {}
|
|
197
|
+
},
|
|
177
198
|
embeddedWallets: {
|
|
178
199
|
ethereum: { createOnLogin: "users-without-wallets" },
|
|
179
200
|
showWalletUIs: false
|
|
@@ -182,7 +203,7 @@ function createPrivyProvider(core, config) {
|
|
|
182
203
|
disableAllExternalWallets: true,
|
|
183
204
|
walletConnect: { enabled: false }
|
|
184
205
|
}
|
|
185
|
-
}), [mode]);
|
|
206
|
+
}), [mode, accent]);
|
|
186
207
|
return /* @__PURE__ */ jsxs(PrivyProvider, {
|
|
187
208
|
appId: config.appId,
|
|
188
209
|
clientId: config.clientId,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"factory.js","names":[],"sources":["../../../src/wallet/privy/adapter.ts","../../../src/wallet/privy/bridge.tsx","../../../src/wallet/privy/provider.tsx","../../../src/wallet/privy/factory.ts"],"sourcesContent":["import type {\n ConnectedWallet,\n LoginModalOptions,\n SignTypedDataParams,\n} from \"@privy-io/react-auth\";\nimport type { SignCredentialTypedData } from \"../../credential.js\";\nimport { LoginMethod, type WalletSession } from \"../types.js\";\nimport type { PrivyLoginMethod } from \"./meta.js\";\n\ntype Hex = `0x${string}`;\ntype PrivyLoginMethodId = NonNullable<\n LoginModalOptions[\"loginMethods\"]\n>[number];\n\n// Exhaustive over PrivyLoginMethod, so widening that union without adding the\n// Privy id here is a compile error.\nconst PRIVY_METHOD_MAP: Record<PrivyLoginMethod, 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// 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 // PRIVY_METHOD_MAP is total over the methods Privy can drive, so only the\n // configured subset needs checking here.\n if (!this.supportedMethods.includes(chosen)) {\n throw new Error(`PrivyAdapter does not support login method \"${chosen}\"`);\n }\n const privyMethod = PRIVY_METHOD_MAP[chosen];\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","// Renders React (PrivyProvider + hooks), so RSC hosts must treat this as a\n// client module even though the descriptor entry reaches it lazily.\n\"use client\";\n\nimport type { WalletAdapterImpl, WalletController } from \"../types.js\";\nimport { PrivyCore } from \"./adapter.js\";\nimport {\n resolvePrivyMethods,\n type PHRenownPrivyAdapterConfig,\n} from \"./meta.js\";\nimport { createPrivyProvider } from \"./provider.js\";\n\n// Build the Privy adapter. Provider mounts PrivyProvider + a bridge;\n// useController exposes imperative connect/disconnect over the shared core.\nexport function createPrivyAdapter(\n config: PHRenownPrivyAdapterConfig,\n): WalletAdapterImpl {\n const core = new PrivyCore(resolvePrivyMethods(config.methods));\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 };\n }\n\n return { Provider, useController };\n}\n\nexport { PrivyCore } 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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"}
|
|
1
|
+
{"version":3,"file":"factory.js","names":[],"sources":["../../../src/wallet/privy/adapter.ts","../../../src/wallet/privy/bridge.tsx","../../../src/wallet/privy/theme.ts","../../../src/wallet/privy/provider.tsx","../../../src/wallet/privy/factory.ts"],"sourcesContent":["import type {\n ConnectedWallet,\n LoginModalOptions,\n SignTypedDataParams,\n} from \"@privy-io/react-auth\";\nimport type { SignCredentialTypedData } from \"../../credential.js\";\nimport { LoginMethod, type WalletSession } from \"../types.js\";\nimport type { PrivyLoginMethod } from \"./meta.js\";\n\ntype Hex = `0x${string}`;\ntype PrivyLoginMethodId = NonNullable<\n LoginModalOptions[\"loginMethods\"]\n>[number];\n\n// Exhaustive over PrivyLoginMethod, so widening that union without adding the\n// Privy id here is a compile error.\nconst PRIVY_METHOD_MAP: Record<PrivyLoginMethod, 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// 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 // PRIVY_METHOD_MAP is total over the methods Privy can drive, so only the\n // configured subset needs checking here.\n if (!this.supportedMethods.includes(chosen)) {\n throw new Error(`PrivyAdapter does not support login method \"${chosen}\"`);\n }\n const privyMethod = PRIVY_METHOD_MAP[chosen];\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","const HEX = /^#(?:[0-9a-f]{3}|[0-9a-f]{4}|[0-9a-f]{6}|[0-9a-f]{8})$/i;\nconst RGB = /^rgba?\\(\\s*(-?[\\d.]+)[\\s,]+(-?[\\d.]+)[\\s,]+(-?[\\d.]+)/i;\n\nfunction channel(value: string): string {\n const byte = Math.round(Number(value));\n return Math.min(255, Math.max(0, byte)).toString(16).padStart(2, \"0\");\n}\n\n/** Convert a host theme accent color to the hex Privy's `appearance` requires, or `undefined` if it is not expressible. Hosts resolve CSS tokens through `getComputedStyle`, which yields `rgb(...)`, so plain pass-through would be rejected. Alpha is dropped: Privy derives its own variants. */\nexport function toPrivyAccentColor(\n color: string | undefined,\n): `#${string}` | undefined {\n if (!color) return undefined;\n const value = color.trim();\n if (HEX.test(value)) return value as `#${string}`;\n const rgb = RGB.exec(value);\n if (!rgb) return undefined;\n return `#${channel(rgb[1])}${channel(rgb[2])}${channel(rgb[3])}`;\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\";\nimport { toPrivyAccentColor } from \"./theme.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, accentColor } = normalizeWalletTheme(theme);\n const accent = toPrivyAccentColor(accentColor);\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 // Privy generates its own light/dark variants from the accent.\n appearance: { theme: mode, ...(accent ? { accentColor: accent } : {}) },\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, accent],\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","// Renders React (PrivyProvider + hooks), so RSC hosts must treat this as a\n// client module even though the descriptor entry reaches it lazily.\n\"use client\";\n\nimport type { WalletAdapterImpl, WalletController } from \"../types.js\";\nimport { PrivyCore } from \"./adapter.js\";\nimport {\n resolvePrivyMethods,\n type PHRenownPrivyAdapterConfig,\n} from \"./meta.js\";\nimport { createPrivyProvider } from \"./provider.js\";\n\n// Build the Privy adapter. Provider mounts PrivyProvider + a bridge;\n// useController exposes imperative connect/disconnect over the shared core.\nexport function createPrivyAdapter(\n config: PHRenownPrivyAdapterConfig,\n): WalletAdapterImpl {\n const core = new PrivyCore(resolvePrivyMethods(config.methods));\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 };\n }\n\n return { Provider, useController };\n}\n\nexport { PrivyCore } 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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"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { r as WalletAdapterDescriptor } from "../../types-
|
|
2
|
-
import { a as resolvePrivyMethods, i as privyAdapterMeta, n as PHRenownPrivyAdapterConfig, r as PrivyLoginMethod, t as DEFAULT_PRIVY_METHODS } from "../../meta-
|
|
1
|
+
import { r as WalletAdapterDescriptor } from "../../types-CxKG5UsV.js";
|
|
2
|
+
import { a as resolvePrivyMethods, i as privyAdapterMeta, n as PHRenownPrivyAdapterConfig, r as PrivyLoginMethod, t as DEFAULT_PRIVY_METHODS } from "../../meta-DjoNJy1t.js";
|
|
3
3
|
|
|
4
4
|
//#region src/wallet/privy/index.d.ts
|
|
5
5
|
/** Privy wallet adapter (embedded wallets plus social / email login) for `RenownWalletProvider`. Importing this module loads no wallet library — `@privy-io/react-auth` is fetched by `load()` on the first login click — but it does make that package a build-time requirement, so install it alongside this import. */
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { n as privyAdapterMeta, r as resolvePrivyMethods, t as DEFAULT_PRIVY_METHODS } from "../../meta-
|
|
1
|
+
import { n as privyAdapterMeta, r as resolvePrivyMethods, t as DEFAULT_PRIVY_METHODS } from "../../meta-D-5kvwx8.js";
|
|
2
2
|
//#region src/wallet/privy/index.ts
|
|
3
3
|
/** Privy wallet adapter (embedded wallets plus social / email login) for `RenownWalletProvider`. Importing this module loads no wallet library — `@privy-io/react-auth` is fetched by `load()` on the first login click — but it does make that package a build-time requirement, so install it alongside this import. */
|
|
4
4
|
function privyAdapter(config) {
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { a as WalletAdapterImpl } from "../../types-
|
|
2
|
-
import {
|
|
1
|
+
import { a as WalletAdapterImpl } from "../../types-CxKG5UsV.js";
|
|
2
|
+
import { n as PHRenownRainbowAdapterConfig } from "../../meta-DbqBJa4j.js";
|
|
3
3
|
//#region src/wallet/rainbow/factory.d.ts
|
|
4
4
|
declare function createRainbowAdapter(config: PHRenownRainbowAdapterConfig): WalletAdapterImpl;
|
|
5
5
|
//#endregion
|
|
@@ -1,12 +1,14 @@
|
|
|
1
1
|
"use client";
|
|
2
|
-
import
|
|
2
|
+
import "../../constants-B7wOp9oo.js";
|
|
3
|
+
import { n as normalizeWalletTheme, t as LoginMethod } from "../../types-C_qc_62W.js";
|
|
3
4
|
import "@rainbow-me/rainbowkit/styles.css";
|
|
4
5
|
import { QueryClient, QueryClientProvider } from "@tanstack/react-query";
|
|
5
6
|
import { disconnect, getAccount, signTypedData, watchAccount } from "wagmi/actions";
|
|
6
|
-
import { RainbowKitProvider, darkTheme, getDefaultConfig,
|
|
7
|
+
import { RainbowKitProvider, darkTheme, getDefaultConfig, lightTheme, useConnectModal } from "@rainbow-me/rainbowkit";
|
|
7
8
|
import { useEffect, useMemo, useRef } from "react";
|
|
9
|
+
import { injectedWallet, safeWallet } from "@rainbow-me/rainbowkit/wallets";
|
|
8
10
|
import { WagmiProvider, http } from "wagmi";
|
|
9
|
-
import {
|
|
11
|
+
import { mainnet } from "wagmi/chains";
|
|
10
12
|
import { jsx, jsxs } from "react/jsx-runtime";
|
|
11
13
|
//#region src/wallet/rainbow/bridge.tsx
|
|
12
14
|
const useConnectModal$1 = useConnectModal;
|
|
@@ -70,38 +72,39 @@ function RainbowAdapterBridge({ bridge }) {
|
|
|
70
72
|
//#endregion
|
|
71
73
|
//#region src/wallet/rainbow/config.ts
|
|
72
74
|
const getDefaultConfig$1 = getDefaultConfig;
|
|
73
|
-
const
|
|
75
|
+
const injectedWallet$1 = injectedWallet;
|
|
76
|
+
const safeWallet$1 = safeWallet;
|
|
77
|
+
/** The wallets that work with no WalletConnect project id. Composed rather than subtracted from `getDefaultWallets()`, whose other entries fall back to WalletConnect themselves, so dropping just its entry still leaves buttons that cannot connect. */
|
|
74
78
|
function walletsWithoutWalletConnect() {
|
|
75
|
-
return
|
|
76
|
-
|
|
77
|
-
wallets:
|
|
78
|
-
}
|
|
79
|
+
return [{
|
|
80
|
+
groupName: "Installed",
|
|
81
|
+
wallets: [injectedWallet$1, safeWallet$1]
|
|
82
|
+
}];
|
|
79
83
|
}
|
|
84
|
+
const DEFAULT_CHAINS = [mainnet];
|
|
85
|
+
const INFURA_SUBDOMAINS = {
|
|
86
|
+
1: "mainnet",
|
|
87
|
+
11155111: "sepolia",
|
|
88
|
+
137: "polygon-mainnet",
|
|
89
|
+
10: "optimism-mainnet",
|
|
90
|
+
42161: "arbitrum-mainnet",
|
|
91
|
+
8453: "base-mainnet"
|
|
92
|
+
};
|
|
80
93
|
function buildWagmiConfig(config) {
|
|
81
|
-
const { walletConnectProjectId, infuraProjectId, appName = "Renown", ssr } = config;
|
|
82
|
-
if (!
|
|
83
|
-
|
|
94
|
+
const { walletConnectProjectId, infuraProjectId, appName = "Renown", chains = DEFAULT_CHAINS, ssr } = config;
|
|
95
|
+
if (!chains.some((chain) => chain.id === 1)) console.warn(`renown rainbow adapter: none of the configured chains is 1, the chain credentials are issued on — sign-in will be rejected unless the Renown chain id is configured to match.`);
|
|
96
|
+
if (!walletConnectProjectId) console.warn("renown rainbow adapter: walletConnectProjectId is not set — only an installed browser wallet (or a Safe App iframe) can sign in. Every other RainbowKit wallet connects over WalletConnect, which needs a project id.");
|
|
97
|
+
const infuraUrl = (chainId) => {
|
|
98
|
+
const subdomain = INFURA_SUBDOMAINS[chainId];
|
|
99
|
+
return infuraProjectId && subdomain ? `https://${subdomain}.infura.io/v3/${infuraProjectId}` : void 0;
|
|
100
|
+
};
|
|
84
101
|
return getDefaultConfig$1({
|
|
85
102
|
appName,
|
|
86
103
|
projectId: walletConnectProjectId || "MISSING_WALLET_CONNECT_PROJECT_ID",
|
|
87
|
-
chains
|
|
88
|
-
mainnet,
|
|
89
|
-
sepolia,
|
|
90
|
-
polygon,
|
|
91
|
-
optimism,
|
|
92
|
-
arbitrum,
|
|
93
|
-
base
|
|
94
|
-
],
|
|
104
|
+
chains,
|
|
95
105
|
ssr,
|
|
96
106
|
...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
|
-
}
|
|
107
|
+
transports: Object.fromEntries(chains.map((chain) => [chain.id, http(infuraUrl(chain.id))]))
|
|
105
108
|
});
|
|
106
109
|
}
|
|
107
110
|
//#endregion
|
|
@@ -1 +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
|
+
{"version":3,"file":"factory.js","names":["useConnectModal","rainbowUseConnectModal","getDefaultConfig","rainbowGetDefaultConfig","injectedWallet","rainbowInjectedWallet","safeWallet","rainbowSafeWallet","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 { getDefaultConfig as rainbowGetDefaultConfig } from \"@rainbow-me/rainbowkit\";\nimport {\n injectedWallet as rainbowInjectedWallet,\n safeWallet as rainbowSafeWallet,\n} from \"@rainbow-me/rainbowkit/wallets\";\nimport { http, type Config } from \"wagmi\";\nimport { mainnet } from \"wagmi/chains\";\nimport { DEFAULT_RENOWN_CHAIN_ID } from \"../../constants.js\";\nimport type { PHRenownChain, 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 = () => unknown;\ninterface WalletGroup {\n groupName: string;\n wallets: WalletCreator[];\n}\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 injectedWallet = rainbowInjectedWallet as WalletCreator;\nconst safeWallet = rainbowSafeWallet as WalletCreator;\n\n/** The wallets that work with no WalletConnect project id. Composed rather than subtracted from `getDefaultWallets()`, whose other entries fall back to WalletConnect themselves, so dropping just its entry still leaves buttons that cannot connect. */\nexport function walletsWithoutWalletConnect(): WalletGroup[] {\n return [{ groupName: \"Installed\", wallets: [injectedWallet, safeWallet] }];\n}\n\n// Matches DEFAULT_RENOWN_CHAIN_ID: the issuer DID embeds the chain the wallet\n// signs on, so offering others would let one wallet mint several identities.\nconst DEFAULT_CHAINS: readonly [PHRenownChain, ...PHRenownChain[]] = [mainnet];\n\n// Keyed by id rather than by chain, which would import them. A chain that is not\n// listed falls back to the RPC in its own definition.\nconst INFURA_SUBDOMAINS: Record<number, string> = {\n 1: \"mainnet\",\n 11155111: \"sepolia\",\n 137: \"polygon-mainnet\",\n 10: \"optimism-mainnet\",\n 42161: \"arbitrum-mainnet\",\n 8453: \"base-mainnet\",\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 chains = DEFAULT_CHAINS,\n ssr,\n } = config;\n\n // renown.signIn() rejects a session from any other chain, so say so here\n // rather than at the end of a login the user cannot complete.\n if (!chains.some((chain) => chain.id === Number(DEFAULT_RENOWN_CHAIN_ID))) {\n console.warn(\n `renown rainbow adapter: none of the configured chains is ${DEFAULT_RENOWN_CHAIN_ID}, the chain credentials are issued on — sign-in will be rejected unless the Renown chain id is configured to match.`,\n );\n }\n\n if (!walletConnectProjectId) {\n console.warn(\n \"renown rainbow adapter: walletConnectProjectId is not set — only an installed browser wallet (or a Safe App iframe) can sign in. Every other RainbowKit wallet connects over WalletConnect, which needs a project id.\",\n );\n }\n\n const infuraUrl = (chainId: number) => {\n const subdomain = INFURA_SUBDOMAINS[chainId];\n return infuraProjectId && subdomain\n ? `https://${subdomain}.infura.io/v3/${infuraProjectId}`\n : undefined;\n };\n\n return getDefaultConfig({\n appName,\n projectId: walletConnectProjectId || \"MISSING_WALLET_CONNECT_PROJECT_ID\",\n chains: chains as readonly [unknown, ...unknown[]],\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 (which needs the project\n // id) when one exists; otherwise offer only the WalletConnect-free wallets.\n ...(walletConnectProjectId\n ? {}\n : { wallets: walletsWithoutWalletConnect() }),\n transports: Object.fromEntries(\n chains.map((chain) => [chain.id, http(infuraUrl(chain.id))]),\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,9 +1,9 @@
|
|
|
1
|
-
import { r as WalletAdapterDescriptor } from "../../types-
|
|
2
|
-
import { n as
|
|
1
|
+
import { r as WalletAdapterDescriptor } from "../../types-CxKG5UsV.js";
|
|
2
|
+
import { i as rainbowAdapterMeta, n as PHRenownRainbowAdapterConfig, r as RAINBOW_METHODS, t as PHRenownChain } from "../../meta-DbqBJa4j.js";
|
|
3
3
|
|
|
4
4
|
//#region src/wallet/rainbow/index.d.ts
|
|
5
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
6
|
declare function rainbowAdapter(config: PHRenownRainbowAdapterConfig): WalletAdapterDescriptor;
|
|
7
7
|
//#endregion
|
|
8
|
-
export { type PHRenownRainbowAdapterConfig, RAINBOW_METHODS, rainbowAdapter, rainbowAdapterMeta };
|
|
8
|
+
export { type PHRenownChain, type PHRenownRainbowAdapterConfig, RAINBOW_METHODS, rainbowAdapter, rainbowAdapterMeta };
|
|
9
9
|
//# sourceMappingURL=index.d.ts.map
|