@renown/sdk 6.2.2-dev.5 → 6.2.2-dev.51

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 (75) hide show
  1. package/README.md +162 -1
  2. package/dist/{browser-key-storage-v4O-fjz0.js → browser-key-storage-e3RQsnLS.js} +1 -1
  3. package/dist/{browser-key-storage-v4O-fjz0.js.map → browser-key-storage-e3RQsnLS.js.map} +1 -1
  4. package/dist/constants-B7wOp9oo.js +79 -0
  5. package/dist/constants-B7wOp9oo.js.map +1 -0
  6. package/dist/crypto.d.ts +2 -2
  7. package/dist/crypto.js +2 -2
  8. package/dist/index-BF2qTv7d.d.ts +131 -0
  9. package/dist/index-BF2qTv7d.d.ts.map +1 -0
  10. package/dist/index.d.ts +11 -8
  11. package/dist/index.d.ts.map +1 -1
  12. package/dist/index.js +21 -9
  13. package/dist/index.js.map +1 -1
  14. package/dist/meta-CHgd9Qd0.js +31 -0
  15. package/dist/meta-CHgd9Qd0.js.map +1 -0
  16. package/dist/meta-D-5kvwx8.js +27 -0
  17. package/dist/meta-D-5kvwx8.js.map +1 -0
  18. package/dist/meta-DY5WCada.d.ts +19 -0
  19. package/dist/meta-DY5WCada.d.ts.map +1 -0
  20. package/dist/meta-DbqBJa4j.d.ts +19 -0
  21. package/dist/meta-DbqBJa4j.d.ts.map +1 -0
  22. package/dist/meta-DjoNJy1t.d.ts +16 -0
  23. package/dist/meta-DjoNJy1t.d.ts.map +1 -0
  24. package/dist/node.d.ts +11 -11
  25. package/dist/node.d.ts.map +1 -1
  26. package/dist/node.js +104 -12
  27. package/dist/node.js.map +1 -1
  28. package/dist/renown-builder-KOzzCXrQ.js +804 -0
  29. package/dist/renown-builder-KOzzCXrQ.js.map +1 -0
  30. package/dist/{signer-CgYhXTV7.js → signer-BpvojvCh.js} +13 -6
  31. package/dist/signer-BpvojvCh.js.map +1 -0
  32. package/dist/types-C_qc_62W.js +20 -0
  33. package/dist/types-C_qc_62W.js.map +1 -0
  34. package/dist/types-CxKG5UsV.d.ts +59 -0
  35. package/dist/types-CxKG5UsV.d.ts.map +1 -0
  36. package/dist/{signer-DYKGoYHB.d.ts → types-ocCFjR5j.d.ts} +128 -118
  37. package/dist/types-ocCFjR5j.d.ts.map +1 -0
  38. package/dist/{utils-C9ZgMs_C.d.ts → utils-DS2Ha4Bg.d.ts} +91 -96
  39. package/dist/utils-DS2Ha4Bg.d.ts.map +1 -0
  40. package/dist/wallet/index.d.ts +8 -0
  41. package/dist/wallet/index.d.ts.map +1 -0
  42. package/dist/wallet/index.js +30 -0
  43. package/dist/wallet/index.js.map +1 -0
  44. package/dist/wallet/mock/factory.d.ts +9 -0
  45. package/dist/wallet/mock/factory.d.ts.map +1 -0
  46. package/dist/wallet/mock/factory.js +35 -0
  47. package/dist/wallet/mock/factory.js.map +1 -0
  48. package/dist/wallet/mock/index.d.ts +9 -0
  49. package/dist/wallet/mock/index.d.ts.map +1 -0
  50. package/dist/wallet/mock/index.js +16 -0
  51. package/dist/wallet/mock/index.js.map +1 -0
  52. package/dist/wallet/privy/factory.d.ts +58 -0
  53. package/dist/wallet/privy/factory.d.ts.map +1 -0
  54. package/dist/wallet/privy/factory.js +258 -0
  55. package/dist/wallet/privy/factory.js.map +1 -0
  56. package/dist/wallet/privy/index.d.ts +9 -0
  57. package/dist/wallet/privy/index.d.ts.map +1 -0
  58. package/dist/wallet/privy/index.js +16 -0
  59. package/dist/wallet/privy/index.js.map +1 -0
  60. package/dist/wallet/rainbow/factory.d.ts +7 -0
  61. package/dist/wallet/rainbow/factory.d.ts.map +1 -0
  62. package/dist/wallet/rainbow/factory.js +219 -0
  63. package/dist/wallet/rainbow/factory.js.map +1 -0
  64. package/dist/wallet/rainbow/index.d.ts +9 -0
  65. package/dist/wallet/rainbow/index.d.ts.map +1 -0
  66. package/dist/wallet/rainbow/index.js +21 -0
  67. package/dist/wallet/rainbow/index.js.map +1 -0
  68. package/package.json +76 -3
  69. package/dist/browser-key-storage-DSkDBAhU.d.ts +0 -14
  70. package/dist/browser-key-storage-DSkDBAhU.d.ts.map +0 -1
  71. package/dist/renown-builder-Sn_Y2Cb2.js +0 -496
  72. package/dist/renown-builder-Sn_Y2Cb2.js.map +0 -1
  73. package/dist/signer-CgYhXTV7.js.map +0 -1
  74. package/dist/signer-DYKGoYHB.d.ts.map +0 -1
  75. package/dist/utils-C9ZgMs_C.d.ts.map +0 -1
@@ -0,0 +1,35 @@
1
+ import { r as resolveMockMethods } from "../../meta-CHgd9Qd0.js";
2
+ import { privateKeyToAccount } from "viem/accounts";
3
+ //#region src/wallet/mock/factory.ts
4
+ const DEFAULT_TEST_KEY = "0xac0974bec39a17e36ba4a6b4d238ff944bacb478cbed5efcae784d7bf4f2ff80";
5
+ const MockProvider = (props) => props.children;
6
+ /** 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. */
7
+ function createMockAdapter(config) {
8
+ const account = privateKeyToAccount(config.privateKey ?? DEFAULT_TEST_KEY);
9
+ const chainId = config.chainId ?? 1;
10
+ resolveMockMethods(config.methods);
11
+ const signTypedData = (args) => account.signTypedData({
12
+ domain: args.domain,
13
+ types: args.types,
14
+ primaryType: args.primaryType,
15
+ message: args.message
16
+ });
17
+ const session = {
18
+ address: account.address,
19
+ chainId,
20
+ signTypedData
21
+ };
22
+ const controller = {
23
+ connect: () => Promise.resolve(session),
24
+ disconnect: () => Promise.resolve(),
25
+ getSession: () => session
26
+ };
27
+ return {
28
+ Provider: MockProvider,
29
+ useController: () => controller
30
+ };
31
+ }
32
+ //#endregion
33
+ export { createMockAdapter };
34
+
35
+ //# sourceMappingURL=factory.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"factory.js","names":[],"sources":["../../../src/wallet/mock/factory.ts"],"sourcesContent":["import { privateKeyToAccount } from \"viem/accounts\";\nimport type { ComponentType, ReactNode } from \"react\";\nimport type { SignCredentialTypedData } from \"../../credential.js\";\nimport type {\n WalletAdapterImpl,\n WalletController,\n WalletSession,\n} from \"../types.js\";\nimport { resolveMockMethods, type PHRenownMockAdapterConfig } from \"./meta.js\";\n\ntype Hex = `0x${string}`;\n\n// Well-known Anvil/Hardhat test account #0 private key. Default so tests need no\n// key; every connect resolves to its deterministic address.\nconst DEFAULT_TEST_KEY: Hex =\n \"0xac0974bec39a17e36ba4a6b4d238ff944bacb478cbed5efcae784d7bf4f2ff80\";\n\nconst MockProvider: ComponentType<{ children: ReactNode }> = (props) =>\n props.children;\n\n/** 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. */\nexport function createMockAdapter(\n config: PHRenownMockAdapterConfig,\n): WalletAdapterImpl {\n const account = privateKeyToAccount(config.privateKey ?? DEFAULT_TEST_KEY);\n const chainId = config.chainId ?? 1;\n // Validated here too: the descriptor resolves these for its meta, but the\n // factory is public API and may be called directly.\n resolveMockMethods(config.methods);\n\n const signTypedData: SignCredentialTypedData = (args) =>\n account.signTypedData({\n domain: args.domain,\n types: args.types,\n primaryType: args.primaryType,\n message: args.message,\n } as unknown as Parameters<typeof account.signTypedData>[0]);\n\n const session: WalletSession = {\n address: account.address,\n chainId,\n signTypedData,\n };\n\n const controller: WalletController = {\n connect: () => Promise.resolve(session),\n disconnect: () => Promise.resolve(),\n getSession: () => session,\n };\n\n return { Provider: MockProvider, useController: () => controller };\n}\n"],"mappings":";;;AAcA,MAAM,mBACJ;AAEF,MAAM,gBAAwD,UAC5D,MAAM;;AAGR,SAAgB,kBACd,QACmB;CACnB,MAAM,UAAU,oBAAoB,OAAO,cAAc,iBAAiB;CAC1E,MAAM,UAAU,OAAO,WAAW;AAGlC,oBAAmB,OAAO,QAAQ;CAElC,MAAM,iBAA0C,SAC9C,QAAQ,cAAc;EACpB,QAAQ,KAAK;EACb,OAAO,KAAK;EACZ,aAAa,KAAK;EAClB,SAAS,KAAK;EACf,CAA2D;CAE9D,MAAM,UAAyB;EAC7B,SAAS,QAAQ;EACjB;EACA;EACD;CAED,MAAM,aAA+B;EACnC,eAAe,QAAQ,QAAQ,QAAQ;EACvC,kBAAkB,QAAQ,SAAS;EACnC,kBAAkB;EACnB;AAED,QAAO;EAAE,UAAU;EAAc,qBAAqB;EAAY"}
@@ -0,0 +1,9 @@
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
+
4
+ //#region src/wallet/mock/index.d.ts
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. */
6
+ declare function mockAdapter(config: PHRenownMockAdapterConfig): WalletAdapterDescriptor;
7
+ //#endregion
8
+ export { DEFAULT_MOCK_METHODS, type MockLoginMethod, type PHRenownMockAdapterConfig, mockAdapter, mockAdapterMeta, resolveMockMethods };
9
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","names":[],"sources":["../../../src/wallet/mock/index.ts"],"mappings":";;;;;iBAQgB,WAAA,CACd,MAAA,EAAQ,yBAAA,GACP,uBAAA"}
@@ -0,0 +1,16 @@
1
+ import { n as mockAdapterMeta, r as resolveMockMethods, t as DEFAULT_MOCK_METHODS } from "../../meta-CHgd9Qd0.js";
2
+ //#region src/wallet/mock/index.ts
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
+ function mockAdapter(config) {
5
+ return {
6
+ meta: {
7
+ ...mockAdapterMeta,
8
+ supportedMethods: resolveMockMethods(config.methods)
9
+ },
10
+ load: () => import("./factory.js").then((m) => m.createMockAdapter(config))
11
+ };
12
+ }
13
+ //#endregion
14
+ export { DEFAULT_MOCK_METHODS, mockAdapter, mockAdapterMeta, resolveMockMethods };
15
+
16
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","names":[],"sources":["../../../src/wallet/mock/index.ts"],"sourcesContent":["import type { WalletAdapterDescriptor } from \"../types.js\";\nimport {\n mockAdapterMeta,\n resolveMockMethods,\n type PHRenownMockAdapterConfig,\n} from \"./meta.js\";\n\n/** 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. */\nexport function mockAdapter(\n config: PHRenownMockAdapterConfig,\n): WalletAdapterDescriptor {\n return {\n meta: {\n ...mockAdapterMeta,\n supportedMethods: resolveMockMethods(config.methods),\n },\n load: () => import(\"./factory.js\").then((m) => m.createMockAdapter(config)),\n };\n}\n\nexport {\n DEFAULT_MOCK_METHODS,\n mockAdapterMeta,\n resolveMockMethods,\n} from \"./meta.js\";\nexport type { MockLoginMethod, PHRenownMockAdapterConfig } from \"./meta.js\";\n"],"mappings":";;;AAQA,SAAgB,YACd,QACyB;AACzB,QAAO;EACL,MAAM;GACJ,GAAG;GACH,kBAAkB,mBAAmB,OAAO,QAAQ;GACrD;EACD,YAAY,OAAO,gBAAgB,MAAM,MAAM,EAAE,kBAAkB,OAAO,CAAC;EAC5E"}
@@ -0,0 +1,58 @@
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
+ import { ComponentType, ReactNode } from "react";
5
+ import { ConnectedWallet, LoginModalOptions } from "@privy-io/react-auth";
6
+
7
+ //#region src/wallet/privy/adapter.d.ts
8
+ type Hex = `0x${string}`;
9
+ type PrivyOAuthProviderId = "google" | "apple";
10
+ interface PrivyBindings {
11
+ openLoginModal: (options?: LoginModalOptions) => void;
12
+ initOAuth: (options: {
13
+ provider: PrivyOAuthProviderId;
14
+ }) => Promise<void>;
15
+ logout: () => Promise<void>;
16
+ signTypedData: (args: Parameters<SignCredentialTypedData>[0], address: Hex) => Promise<Hex>;
17
+ }
18
+ declare class PrivyCore {
19
+ readonly supportedMethods: LoginMethod[];
20
+ private bindings;
21
+ private pending;
22
+ private session;
23
+ private listeners;
24
+ constructor(supportedMethods: LoginMethod[]);
25
+ bind(bindings: PrivyBindings): () => void;
26
+ getSession(): WalletSession | undefined;
27
+ subscribe(listener: (session: WalletSession | undefined) => void): () => void;
28
+ private emit;
29
+ syncFromEmbeddedWallet(wallet: ConnectedWallet): void;
30
+ clearSession(): void;
31
+ handleLoginError(error: unknown): void;
32
+ connect(method?: LoginMethod): Promise<WalletSession>;
33
+ disconnect(): Promise<void>;
34
+ }
35
+ //#endregion
36
+ //#region src/wallet/privy/bridge.d.ts
37
+ interface PrivyAdapterBridgeProps {
38
+ core: PrivyCore;
39
+ }
40
+ declare function PrivyAdapterBridge({
41
+ core
42
+ }: PrivyAdapterBridgeProps): null;
43
+ //#endregion
44
+ //#region src/wallet/privy/provider.d.ts
45
+ interface PrivyProviderConfig {
46
+ appId: string;
47
+ clientId?: string;
48
+ }
49
+ declare function createPrivyProvider(core: PrivyCore, config: PrivyProviderConfig): ComponentType<{
50
+ children: ReactNode;
51
+ theme?: WalletTheme;
52
+ }>;
53
+ //#endregion
54
+ //#region src/wallet/privy/factory.d.ts
55
+ declare function createPrivyAdapter(config: PHRenownPrivyAdapterConfig): WalletAdapterImpl;
56
+ //#endregion
57
+ export { PrivyAdapterBridge, type PrivyBindings, PrivyCore, createPrivyAdapter, createPrivyProvider };
58
+ //# sourceMappingURL=factory.d.ts.map
@@ -0,0 +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;;;UCpJZ,uBAAA;EACR,IAAA,EAAM,SAAA;AAAA;AAAA,iBAKQ,kBAAA,CAAA;EAAqB;AAAA,GAAQ,uBAAA;;;UC9BnC,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"}
@@ -0,0 +1,258 @@
1
+ "use client";
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
+ import { useEffect, useMemo, useRef } from "react";
5
+ import { jsx, jsxs } from "react/jsx-runtime";
6
+ import { PrivyProvider, getEmbeddedConnectedWallet, useCreateWallet, useLogin, useLoginWithOAuth, useLogout, usePrivy, useSignTypedData, useWallets } from "@privy-io/react-auth";
7
+ //#region src/wallet/privy/adapter.ts
8
+ const PRIVY_METHOD_MAP = {
9
+ [LoginMethod.WALLET]: "wallet",
10
+ [LoginMethod.GOOGLE]: "google",
11
+ [LoginMethod.APPLE]: "apple",
12
+ [LoginMethod.EMAIL]: "email"
13
+ };
14
+ const PRIVY_OAUTH_PROVIDERS = {
15
+ [LoginMethod.GOOGLE]: "google",
16
+ [LoginMethod.APPLE]: "apple"
17
+ };
18
+ var PrivyCore = class {
19
+ supportedMethods;
20
+ bindings = null;
21
+ pending = null;
22
+ session = void 0;
23
+ listeners = /* @__PURE__ */ new Set();
24
+ constructor(supportedMethods) {
25
+ this.supportedMethods = supportedMethods;
26
+ }
27
+ bind(bindings) {
28
+ this.bindings = bindings;
29
+ return () => {
30
+ if (this.bindings === bindings) this.bindings = null;
31
+ };
32
+ }
33
+ getSession() {
34
+ return this.session;
35
+ }
36
+ subscribe(listener) {
37
+ this.listeners.add(listener);
38
+ if (this.session) listener(this.session);
39
+ return () => {
40
+ this.listeners.delete(listener);
41
+ };
42
+ }
43
+ emit(session) {
44
+ for (const listener of this.listeners) listener(session);
45
+ }
46
+ syncFromEmbeddedWallet(wallet) {
47
+ const address = wallet.address;
48
+ const chainId = parseCaip2ChainId(wallet.chainId);
49
+ const signTypedData = async (args) => {
50
+ if (!this.bindings) throw new Error("PrivyAdapter not bound (bridge not mounted)");
51
+ return this.bindings.signTypedData(args, address);
52
+ };
53
+ const session = {
54
+ address,
55
+ chainId,
56
+ signTypedData,
57
+ canSignSilently: true
58
+ };
59
+ this.session = session;
60
+ if (this.pending) {
61
+ this.pending.resolve(session);
62
+ this.pending = null;
63
+ } else this.emit(session);
64
+ }
65
+ clearSession() {
66
+ this.session = void 0;
67
+ this.emit(void 0);
68
+ }
69
+ handleLoginError(error) {
70
+ if (!this.pending) return;
71
+ const err = error instanceof Error ? error : new Error(String(error));
72
+ this.pending.reject(err);
73
+ this.pending = null;
74
+ }
75
+ async connect(method) {
76
+ if (this.session) return this.session;
77
+ if (!this.bindings) throw new Error("PrivyAdapter not bound. Ensure the adapter Provider wraps the app.");
78
+ const chosen = method ?? this.supportedMethods.at(0);
79
+ if (!chosen) throw new Error("PrivyAdapter has no supported login methods configured");
80
+ if (!this.supportedMethods.includes(chosen)) throw new Error(`PrivyAdapter does not support login method "${chosen}"`);
81
+ const privyMethod = PRIVY_METHOD_MAP[chosen];
82
+ const bindings = this.bindings;
83
+ const oauthProvider = PRIVY_OAUTH_PROVIDERS[chosen];
84
+ return new Promise((resolve, reject) => {
85
+ this.pending = {
86
+ resolve,
87
+ reject
88
+ };
89
+ const fail = (error) => {
90
+ this.pending = null;
91
+ reject(error instanceof Error ? error : new Error(String(error)));
92
+ };
93
+ try {
94
+ if (oauthProvider) bindings.initOAuth({ provider: oauthProvider }).catch(fail);
95
+ else bindings.openLoginModal({ loginMethods: [privyMethod] });
96
+ } catch (error) {
97
+ fail(error);
98
+ }
99
+ });
100
+ }
101
+ async disconnect() {
102
+ this.clearSession();
103
+ if (!this.bindings) return;
104
+ await this.bindings.logout();
105
+ }
106
+ };
107
+ function parseCaip2ChainId(caip2) {
108
+ const last = caip2.split(":").at(-1);
109
+ const n = Number(last);
110
+ if (!Number.isFinite(n)) throw new Error(`PrivyAdapter: could not parse chainId from CAIP-2 "${caip2}"`);
111
+ return n;
112
+ }
113
+ //#endregion
114
+ //#region src/wallet/privy/bridge.tsx
115
+ const EMBEDDED_WALLET_ALREADY_EXISTS = "embedded_wallet_already_exists";
116
+ function isAlreadyExistsError(error) {
117
+ if (error === EMBEDDED_WALLET_ALREADY_EXISTS) return true;
118
+ return typeof error === "object" && error !== null && error.privyErrorCode === EMBEDDED_WALLET_ALREADY_EXISTS;
119
+ }
120
+ function PrivyAdapterBridge({ core }) {
121
+ const { ready, authenticated } = usePrivy();
122
+ const { wallets } = useWallets();
123
+ const { signTypedData } = useSignTypedData();
124
+ const { logout } = useLogout();
125
+ const { createWallet } = useCreateWallet({ onError: (error) => {
126
+ if (!isAlreadyExistsError(error)) core.handleLoginError(error);
127
+ } });
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
+ createWallet
136
+ });
137
+ useEffect(() => {
138
+ fnsRef.current = {
139
+ openLoginModal,
140
+ initOAuth,
141
+ logout,
142
+ signTypedData,
143
+ createWallet
144
+ };
145
+ }, [
146
+ openLoginModal,
147
+ initOAuth,
148
+ logout,
149
+ signTypedData,
150
+ createWallet
151
+ ]);
152
+ const creatingWalletRef = useRef(false);
153
+ useEffect(() => {
154
+ return core.bind({
155
+ openLoginModal: (opts) => fnsRef.current.openLoginModal(opts),
156
+ initOAuth: (opts) => fnsRef.current.initOAuth(opts),
157
+ logout: () => fnsRef.current.logout(),
158
+ signTypedData: async (args, address) => {
159
+ return (await fnsRef.current.signTypedData(args, {
160
+ address,
161
+ uiOptions: { showWalletUIs: false }
162
+ })).signature;
163
+ }
164
+ });
165
+ }, [core]);
166
+ useEffect(() => {
167
+ if (!ready) return;
168
+ if (!authenticated) {
169
+ core.clearSession();
170
+ creatingWalletRef.current = false;
171
+ return;
172
+ }
173
+ const embedded = getEmbeddedConnectedWallet(wallets);
174
+ if (embedded) {
175
+ core.syncFromEmbeddedWallet(embedded);
176
+ return;
177
+ }
178
+ if (creatingWalletRef.current) return;
179
+ creatingWalletRef.current = true;
180
+ fnsRef.current.createWallet().catch(() => void 0);
181
+ }, [
182
+ core,
183
+ ready,
184
+ authenticated,
185
+ wallets
186
+ ]);
187
+ return null;
188
+ }
189
+ //#endregion
190
+ //#region src/wallet/privy/theme.ts
191
+ const HEX = /^#(?:[0-9a-f]{3}|[0-9a-f]{4}|[0-9a-f]{6}|[0-9a-f]{8})$/i;
192
+ const RGB = /^rgba?\(\s*(-?[\d.]+)[\s,]+(-?[\d.]+)[\s,]+(-?[\d.]+)/i;
193
+ function channel(value) {
194
+ const byte = Math.round(Number(value));
195
+ return Math.min(255, Math.max(0, byte)).toString(16).padStart(2, "0");
196
+ }
197
+ /** 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. */
198
+ function toPrivyAccentColor(color) {
199
+ if (!color) return void 0;
200
+ const value = color.trim();
201
+ if (HEX.test(value)) return value;
202
+ const rgb = RGB.exec(value);
203
+ if (!rgb) return void 0;
204
+ return `#${channel(rgb[1])}${channel(rgb[2])}${channel(rgb[3])}`;
205
+ }
206
+ //#endregion
207
+ //#region src/wallet/privy/provider.tsx
208
+ function createPrivyProvider(core, config) {
209
+ return function PrivyAuthProvider({ children, theme }) {
210
+ const { mode, accentColor } = normalizeWalletTheme(theme);
211
+ const accent = toPrivyAccentColor(accentColor);
212
+ const privyConfig = useMemo(() => ({
213
+ appearance: {
214
+ theme: mode,
215
+ ...accent ? { accentColor: accent } : {}
216
+ },
217
+ embeddedWallets: {
218
+ ethereum: { createOnLogin: "users-without-wallets" },
219
+ showWalletUIs: false
220
+ },
221
+ externalWallets: {
222
+ disableAllExternalWallets: true,
223
+ walletConnect: { enabled: false }
224
+ }
225
+ }), [mode, accent]);
226
+ return /* @__PURE__ */ jsxs(PrivyProvider, {
227
+ appId: config.appId,
228
+ clientId: config.clientId,
229
+ config: privyConfig,
230
+ children: [/* @__PURE__ */ jsx(PrivyAdapterBridge, { core }), children]
231
+ });
232
+ };
233
+ }
234
+ //#endregion
235
+ //#region src/wallet/privy/factory.ts
236
+ function createPrivyAdapter(config) {
237
+ const core = new PrivyCore(resolvePrivyMethods(config.methods));
238
+ const Provider = createPrivyProvider(core, {
239
+ appId: config.appId,
240
+ clientId: config.clientId
241
+ });
242
+ function useController() {
243
+ return {
244
+ connect: (method) => core.connect(method),
245
+ disconnect: () => core.disconnect(),
246
+ getSession: () => core.getSession(),
247
+ subscribe: (listener) => core.subscribe(listener)
248
+ };
249
+ }
250
+ return {
251
+ Provider,
252
+ useController
253
+ };
254
+ }
255
+ //#endregion
256
+ export { PrivyAdapterBridge, PrivyCore, createPrivyAdapter, createPrivyProvider };
257
+
258
+ //# sourceMappingURL=factory.js.map
@@ -0,0 +1 @@
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 useCreateWallet,\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\n// PrivyErrorCode is declared in the types but not exported at runtime, so match\n// the code by value.\nconst EMBEDDED_WALLET_ALREADY_EXISTS = \"embedded_wallet_already_exists\";\n\n// onError is typed as the bare code, but Privy's error class carries it on\n// `privyErrorCode`, so accept either rather than trusting toString().\nfunction isAlreadyExistsError(error: unknown): boolean {\n if (error === EMBEDDED_WALLET_ALREADY_EXISTS) return true;\n return (\n typeof error === \"object\" &&\n error !== null &&\n (error as { privyErrorCode?: unknown }).privyErrorCode ===\n EMBEDDED_WALLET_ALREADY_EXISTS\n );\n}\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 { createWallet } = useCreateWallet({\n // A wallet that already exists still arrives through useWallets(), so that\n // code is not a login failure.\n onError: (error) => {\n if (!isAlreadyExistsError(error)) core.handleLoginError(error);\n },\n });\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({\n openLoginModal,\n initOAuth,\n logout,\n signTypedData,\n createWallet,\n });\n useEffect(() => {\n fnsRef.current = {\n openLoginModal,\n initOAuth,\n logout,\n signTypedData,\n createWallet,\n };\n }, [openLoginModal, initOAuth, logout, signTypedData, createWallet]);\n\n // One attempt per authenticated session, reset on logout.\n const creatingWalletRef = useRef(false);\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 creatingWalletRef.current = false;\n return;\n }\n const embedded = getEmbeddedConnectedWallet(wallets);\n if (embedded) {\n core.syncFromEmbeddedWallet(embedded);\n return;\n }\n // `createOnLogin` only fires for Privy's own modal, so initOAuth logins\n // reach here with no wallet. Privy's docs prescribe creating it manually.\n if (creatingWalletRef.current) return;\n creatingWalletRef.current = true;\n // Failures are reported through useCreateWallet's onError; this only keeps\n // the rejection from surfacing as an unhandled one.\n void fnsRef.current.createWallet().catch(() => undefined);\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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"}
@@ -0,0 +1,9 @@
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
+
4
+ //#region src/wallet/privy/index.d.ts
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. */
6
+ declare function privyAdapter(config: PHRenownPrivyAdapterConfig): WalletAdapterDescriptor;
7
+ //#endregion
8
+ export { DEFAULT_PRIVY_METHODS, type PHRenownPrivyAdapterConfig, type PrivyLoginMethod, privyAdapter, privyAdapterMeta, resolvePrivyMethods };
9
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","names":[],"sources":["../../../src/wallet/privy/index.ts"],"mappings":";;;;;iBAQgB,YAAA,CACd,MAAA,EAAQ,0BAAA,GACP,uBAAA"}
@@ -0,0 +1,16 @@
1
+ import { n as privyAdapterMeta, r as resolvePrivyMethods, t as DEFAULT_PRIVY_METHODS } from "../../meta-D-5kvwx8.js";
2
+ //#region src/wallet/privy/index.ts
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
+ function privyAdapter(config) {
5
+ return {
6
+ meta: {
7
+ ...privyAdapterMeta,
8
+ supportedMethods: resolvePrivyMethods(config.methods)
9
+ },
10
+ load: () => import("./factory.js").then((m) => m.createPrivyAdapter(config))
11
+ };
12
+ }
13
+ //#endregion
14
+ export { DEFAULT_PRIVY_METHODS, privyAdapter, privyAdapterMeta, resolvePrivyMethods };
15
+
16
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","names":[],"sources":["../../../src/wallet/privy/index.ts"],"sourcesContent":["import type { WalletAdapterDescriptor } from \"../types.js\";\nimport {\n privyAdapterMeta,\n resolvePrivyMethods,\n type PHRenownPrivyAdapterConfig,\n} from \"./meta.js\";\n\n/** 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. */\nexport function privyAdapter(\n config: PHRenownPrivyAdapterConfig,\n): WalletAdapterDescriptor {\n return {\n meta: {\n ...privyAdapterMeta,\n supportedMethods: resolvePrivyMethods(config.methods),\n },\n load: () =>\n import(\"./factory.js\").then((m) => m.createPrivyAdapter(config)),\n };\n}\n\nexport {\n DEFAULT_PRIVY_METHODS,\n privyAdapterMeta,\n resolvePrivyMethods,\n} from \"./meta.js\";\nexport type { PHRenownPrivyAdapterConfig, PrivyLoginMethod } from \"./meta.js\";\n"],"mappings":";;;AAQA,SAAgB,aACd,QACyB;AACzB,QAAO;EACL,MAAM;GACJ,GAAG;GACH,kBAAkB,oBAAoB,OAAO,QAAQ;GACtD;EACD,YACE,OAAO,gBAAgB,MAAM,MAAM,EAAE,mBAAmB,OAAO,CAAC;EACnE"}
@@ -0,0 +1,7 @@
1
+ import { a as WalletAdapterImpl } from "../../types-CxKG5UsV.js";
2
+ import { n as PHRenownRainbowAdapterConfig } from "../../meta-DbqBJa4j.js";
3
+ //#region src/wallet/rainbow/factory.d.ts
4
+ declare function createRainbowAdapter(config: PHRenownRainbowAdapterConfig): WalletAdapterImpl;
5
+ //#endregion
6
+ export { createRainbowAdapter };
7
+ //# sourceMappingURL=factory.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"factory.d.ts","names":[],"sources":["../../../src/wallet/rainbow/factory.ts"],"mappings":";;;iBA2DgB,oBAAA,CACd,MAAA,EAAQ,4BAAA,GACP,iBAAA"}