Skip to main content

API Reference

Complete API reference for the Renown SDK.

Table of Contents

Components

RenownUserProvider

Central authentication provider that automatically initializes the Renown SDK.

Props

interface RenownUserProviderProps {
children: React.ReactNode;
renownUrl?: string;
networkId?: string;
chainId?: string;
loadingComponent?: React.ReactNode;
errorComponent?: (error: Error, retry: () => void) => React.ReactNode;
}
PropTypeDefaultDescription
childrenReact.ReactNode-Required. Child components
renownUrlstring'https://www.renown.id'Renown service URL
networkIdstring'eip155'Network identifier
chainIdstring'1'Chain identifier
loadingComponentReact.ReactNodeundefinedCustom loading UI during initialization
errorComponent(error, retry) => ReactNodeundefinedCustom error UI if initialization fails

Example

Basic usage (auto-initializes with defaults):

<RenownUserProvider>
<App />
</RenownUserProvider>

With custom configuration:

<RenownUserProvider
renownUrl={process.env.NEXT_PUBLIC_RENOWN_URL}
networkId="eip155"
chainId="1"
loadingComponent={
<div className="loading-screen">
<Spinner />
<p>Initializing...</p>
</div>
}
errorComponent={(error, retry) => (
<div className="error-screen">
<h2>Failed to initialize</h2>
<p>{error.message}</p>
<button onClick={retry}>Try Again</button>
</div>
)}
>
<App />
</RenownUserProvider>

Behavior

  • Automatically initializes Renown SDK and ConnectCrypto on mount
  • Creates global window.renown and window.connectCrypto instances
  • Checks sessionStorage for existing sessions
  • Handles Renown authentication redirects
  • Shows loadingComponent during initialization (if provided)
  • Shows errorComponent if initialization fails (if provided)
  • If no custom components provided, renders children immediately
  • Provides auth context to all children

RenownAuthButton

Smart button component that adapts based on authentication state.

Props

interface RenownAuthButtonProps {
className?: string;
profileBaseUrl?: string;
renderAuthenticated?: (props: RenownAuthButtonRenderProps) => React.ReactNode;
renderUnauthenticated?: (props: {
openRenown: () => void;
isLoading: boolean;
}) => React.ReactNode;
renderLoading?: () => React.ReactNode;
showUsername?: boolean;
showLogoutButton?: boolean;
logoutButtonText?: string;
}
PropTypeDefaultDescription
classNamestring""Custom CSS class
profileBaseUrlstring"https://www.renown.id/profile"Base URL for profile
renderAuthenticatedfunctionDefault rendererCustom authenticated state
renderUnauthenticatedfunctionDefault rendererCustom unauthenticated state
renderLoadingfunctionDefault rendererCustom loading state
showUsernamebooleantrueShow username next to avatar
showLogoutButtonbooleanfalseShow logout button
logoutButtonTextstring"Logout"Logout button text

Example

import { RenownAuthButton } from '@renown/sdk'

// Basic usage
<RenownAuthButton showLogoutButton />

// Custom rendering
<RenownAuthButton
renderAuthenticated={({ user, logout }) => (
<div>
<span>{user.name}</span>
<button onClick={logout}>Sign Out</button>
</div>
)}
renderUnauthenticated={({ openRenown }) => (
<button onClick={openRenown}>Sign In</button>
)}
/>

RenownLoginButton

A login button with Renown branding. By default, clicking the button triggers login directly. Optionally shows a popover with connect option.

Props

interface RenownLoginButtonProps {
onLogin: (() => void) | undefined;
darkMode?: boolean;
style?: CSSProperties;
className?: string;
renderTrigger?: (props: {
onMouseEnter: () => void;
onMouseLeave: () => void;
isLoading: boolean;
}) => ReactNode;
showPopover?: boolean;
}
PropTypeDefaultDescription
onLogin() => void | undefined-Callback when login is requested
darkModebooleanfalseEnable dark mode styling
styleCSSProperties-Custom styles for the button
classNamestring-Custom class name
renderTriggerfunction-Custom render function for the trigger button
showPopoverbooleanfalseShow a popover with connect option instead of triggering login directly

Example

import { RenownLoginButton } from '@renown/sdk'

// Direct login (default) - clicks trigger onLogin immediately
<RenownLoginButton onLogin={handleLogin} />

// With popover - shows hover popover with "Connect" button
<RenownLoginButton onLogin={handleLogin} showPopover />

// Dark mode
<RenownLoginButton onLogin={handleLogin} darkMode />

// Custom trigger
<RenownLoginButton
onLogin={handleLogin}
renderTrigger={({ onMouseEnter, onMouseLeave, isLoading }) => (
<button onMouseEnter={onMouseEnter} onMouseLeave={onMouseLeave}>
{isLoading ? 'Loading...' : 'Sign In'}
</button>
)}
/>

Hooks

useUser()

Access authentication state and methods.

Returns

interface RenownUserContextValue {
user: User | null;
loginStatus: LoginStatus;
isLoading: boolean;
isInitialized: boolean;
login: (userDid?: string) => Promise<void>;
logout: () => Promise<void>;
openRenown: () => void;
connectCrypto: IConnectCrypto | null;
renown: IRenown | null;
}
PropertyTypeDescription
userUser | nullCurrent authenticated user or null
loginStatusLoginStatusCurrent authentication status
isLoadingbooleanWhether an auth operation is in progress
isInitializedbooleanWhether the auth system has initialized
loginfunctionAuthenticate with optional DID
logoutfunctionLog out current user
openRenownfunctionOpen Renown authentication portal
connectCryptoIConnectCrypto | nullConnectCrypto instance for cryptographic operations
renownIRenown | nullRenown SDK instance

Example

function MyComponent() {
const {
user,
loginStatus,
isLoading,
login,
logout,
openRenown,
connectCrypto,
renown
} = useUser()

if (isLoading) return <div>Loading...</div>
if (!user) return <button onClick={openRenown}>Login</button>
return <button onClick={logout}>Logout</button>
}

Throws

Throws an error if used outside of <RenownUserProvider>:

Error: useUser must be used within a RenownUserProvider

Functions

initRenown()

Initialize the Renown SDK.

Signature

function initRenown(
did: string,
networkId: string,
renownUrl: string,
): Promise<IRenown>;

Parameters

ParameterTypeDescription
didstringDecentralized identifier (DID)
networkIdstringNetwork identifier (e.g., 'eip155')
renownUrlstringRenown service URL

Returns

Promise<IRenown> - Initialized Renown instance

Example

import { initRenown } from "@renown/sdk";

const renown = await initRenown(
"did:pkh:eip155:1:0x123...",
"eip155",
"https://www.renown.id",
);

login()

Authenticate a user with Renown.

Signature

function login(
userDid: string | undefined,
renown: IRenown | undefined,
connectCrypto: IConnectCrypto | undefined,
): Promise<User | undefined>;

Parameters

ParameterTypeDescription
userDidstring | undefinedUser's DID to authenticate
renownIRenown | undefinedRenown instance
connectCryptoIConnectCrypto | undefinedConnectCrypto instance

Returns

Promise<User | undefined> - Authenticated user or undefined

Side Effects

  • Stores user session in sessionStorage
  • Fetches user profile data
  • Updates auth state

Example

import { login } from "@renown/sdk";

const user = await login(
"did:pkh:eip155:1:0x123...",
window.renown,
window.connectCrypto,
);

logout()

Log out the current user.

Signature

function logout(): Promise<void>;

Returns

Promise<void>

Side Effects

  • Clears sessionStorage
  • Calls renown.logout()
  • Removes JWT handler

Example

import { logout } from "@renown/sdk";

await logout();

openRenown()

Open the Renown authentication portal.

Signature

function openRenown(): void;

Returns

void

Behavior

  • Constructs authentication URL with current DID
  • Adds network and chain parameters
  • Sets return URL to current location
  • Redirects to Renown portal

Example

import { openRenown } from '@renown/sdk'

function MyLoginButton() {
return <button onClick={openRenown}>Login</button>
}

// Or use the built-in RenownAuthButton component
import { RenownAuthButton } from '@renown/sdk'

function Header() {
return <RenownAuthButton />
}

handleRenownReturn()

Process authentication redirect from Renown.

Signature

function handleRenownReturn(): Promise<void>;

Returns

Promise<void>

Behavior

  • Checks URL for authentication parameters
  • Extracts user DID from query string
  • Calls login with the DID
  • Cleans up URL parameters

Example

import { handleRenownReturn } from "@renown/sdk";

// Called automatically by UserProvider
useEffect(() => {
handleRenownReturn();
}, []);

fetchProfileDataForUser()

Fetch user profile data from Renown API.

Signature

function fetchProfileDataForUser(user: User): Promise<User>;

Parameters

ParameterTypeDescription
userUserUser object to enrich with profile data

Returns

Promise<User> - User with profile data

Behavior

  • Extracts ETH address from user's DID
  • Calls Renown profile API
  • Enriches user object with profile data (name, avatar, etc.)
  • Returns original user if profile not found

Example

import { fetchProfileDataForUser } from "@renown/sdk";

const userWithProfile = await fetchProfileDataForUser(user);
console.log(userWithProfile.name); // Display name
console.log(userWithProfile.avatar); // Avatar URL

reauthenticateFromSession()

Restore authentication from stored session.

Signature

function reauthenticateFromSession(): Promise<User | null>;

Returns

Promise<User | null> - Restored user or null

Behavior

  • Checks for stored session in sessionStorage
  • Calls login with stored DID
  • Fetches fresh profile data
  • Returns null if session invalid or expired

Example

import { reauthenticateFromSession } from "@renown/sdk";

const user = await reauthenticateFromSession();
if (user) {
console.log("Session restored for:", user.did);
}

extractEthAddressFromDid()

Extract Ethereum address from a DID.

Signature

function extractEthAddressFromDid(did: string): string | null;

Parameters

ParameterTypeDescription
didstringDID string (e.g., 'did:pkh:eip155:1:0x123...')

Returns

string | null - Ethereum address or null if invalid

Example

import { extractEthAddressFromDid } from "@renown/sdk";

const address = extractEthAddressFromDid("did:pkh:eip155:1:0x1234...");
console.log(address); // '0x1234...'

Types

User

Represents an authenticated user.

interface User {
did: string; // Decentralized identifier
address: string; // Ethereum address
name?: string; // Display name from profile
email?: string; // Email address
avatar?: string; // Avatar image URL
ethAddress?: string; // Ethereum address (duplicate of address)
}

LoginStatus

Authentication status enumeration.

type LoginStatus =
| "initial" // Not yet checked
| "checking" // Currently checking auth
| "authorized" // User is authenticated
| "not-authorized"; // User is not authenticated

RenownUserContextValue

Type for the authentication context value.

interface RenownUserContextValue {
user: User | null;
loginStatus: LoginStatus;
isLoading: boolean;
isInitialized: boolean;
login: (userDid?: string) => Promise<void>;
logout: () => Promise<void>;
openRenown: () => void;
connectCrypto: IConnectCrypto | null;
renown: IRenown | null;
}

IRenown

Interface for the Renown instance.

interface IRenown {
user: User | undefined | (() => Promise<User | undefined>);
login: (did: string) => Promise<User | undefined>;
logout: () => Promise<void>;
on: (event: string, handler: Function) => Unsubscribe;
}

IConnectCrypto

Interface for the ConnectCrypto instance.

interface IConnectCrypto {
did: () => Promise<string>;
// Additional methods...
}

Classes

ConnectCrypto

Manages cryptographic operations and DID generation.

Constructor

constructor(keyStorage: IKeyStorage)

Parameters

ParameterTypeDescription
keyStorageIKeyStorageKey storage implementation

Methods

did()

Get the DID for the current key.

async did(): Promise<string>

Returns: Promise<string> - The DID

Example:

const connectCrypto = new ConnectCrypto(new BrowserKeyStorage());
const did = await connectCrypto.did();
console.log(did); // 'did:pkh:eip155:1:0x...'

BrowserKeyStorage

Browser-based key storage using IndexedDB.

Constructor

constructor();

Usage

import { BrowserKeyStorage, ConnectCrypto } from "@renown/sdk";

const keyStorage = new BrowserKeyStorage();
const connectCrypto = new ConnectCrypto(keyStorage);

SessionStorageManager

Manages user session persistence.

Static Methods

setUserData()

Store user session data.

static setUserData(data: {
user: User
userDid: string
loginStatus: LoginStatus
timestamp: number
}): void

Example:

SessionStorageManager.setUserData({
user: currentUser,
userDid: currentUser.did,
loginStatus: "authorized",
timestamp: Date.now(),
});
getUserData()

Retrieve stored user session.

static getUserData(): {
user: User
userDid: string
loginStatus: LoginStatus
timestamp: number
} | null

Returns: Session data or null

Example:

const session = SessionStorageManager.getUserData();
if (session) {
console.log("Found session for:", session.user.did);
}
clearUserData()

Clear stored session.

static clearUserData(): void

Example:

SessionStorageManager.clearUserData();
isUserDataValid()

Check if session data is valid.

static isUserDataValid(data: {
user: User
userDid: string
loginStatus: LoginStatus
timestamp: number
}): boolean

Returns: boolean - Whether session is valid

Example:

const data = SessionStorageManager.getUserData();
if (data && SessionStorageManager.isUserDataValid(data)) {
// Session is valid
}
getStoredUserDid()

Get stored user DID.

static getStoredUserDid(): string | null

Returns: string | null - Stored DID or null


Constants

RENOWN_URL

Default Renown service URL.

const RENOWN_URL: string = "https://www.renown.id";

RENOWN_NETWORK_ID

Default network identifier.

const RENOWN_NETWORK_ID: string = "eip155";

RENOWN_CHAIN_ID

Default chain identifier.

const RENOWN_CHAIN_ID: string = "1";

Global Window Extensions

The SDK extends the global Window interface:

declare global {
interface Window {
renown?: IRenown;
connectCrypto?: IConnectCrypto;
reactor?: {
setGenerateJwtHandler: (
handler: (driveUrl: string) => Promise<string>,
) => void;
removeJwtHandler: () => void;
};
}
}

window.renown

Global Renown instance after initialization.

Usage:

if (window.renown) {
const user = await window.renown.login("did:pkh:...");
}

window.connectCrypto

Global ConnectCrypto instance after initialization.

Usage:

if (window.connectCrypto) {
const did = await window.connectCrypto.did();
}

Error Handling

Common Errors

useUser must be used within a RenownUserProvider

Cause: Using useUser() outside of <RenownUserProvider>

Solution: Wrap your component tree with <RenownUserProvider>

<RenownUserProvider>
<YourComponent /> {/* ✅ Can use useUser */}
</RenownUserProvider>

Invalid DID format

Cause: DID doesn't match expected format did:pkh:networkId:chainId:address

Solution: Ensure DID is properly formatted

// ✅ Valid
"did:pkh:eip155:1:0x1234567890123456789012345678901234567890";

// ❌ Invalid
"did:1234567890123456789012345678901234567890";

Renown or ConnectCrypto not available

Cause: SDK initialization failed

Solution: The RenownUserProvider automatically initializes the SDK. If you see this error:

  1. Check that <RenownUserProvider> is mounted
  2. Check browser console for initialization errors
  3. Verify network connectivity to Renown service
  4. Try providing an errorComponent prop to see detailed error messages
<RenownUserProvider
errorComponent={(error, retry) => (
<div>
<p>Init failed: {error.message}</p>
<button onClick={retry}>Retry</button>
</div>
)}
>
<App />
</RenownUserProvider>

TypeScript Support

The SDK is fully typed. Import types as needed:

import type {
User,
LoginStatus,
RenownUserContextValue,
IRenown,
IConnectCrypto,
} from "@renown/sdk";

Version Compatibility

SDK VersionReact VersionTypeScript Version
5.x18.x - 19.x4.5+
4.x18.x4.5+