@customyai/customy-access
v0.2.3
Published
Customy Access — Official SDK for Identity & Access Management
Maintainers
Readme
@customyai/customy-access
Official SDK for Customy Access — Identity & Access Management.
One package, three entry points:
npm install @customyai/customy-accessQuick Start
import { CustomyProvider, useAuth, useUser } from "@customyai/customy-access/react";
function App() {
return (
<CustomyProvider
baseUrl={process.env.NEXT_PUBLIC_API_BASE_URL || "http://localhost:4001"}
organizationSlug="my-org"
>
<YourApp />
</CustomyProvider>
);
}
function LoginButton() {
const { signInWithSocial, signInWithEmail } = useAuth();
return <button onClick={() => signInWithSocial("google", "/dashboard")}>Sign in with Google</button>;
}
function NavBar() {
const { isSignedIn, signOut } = useAuth();
const { user } = useUser();
if (!isSignedIn) return <LoginButton />;
return <button onClick={signOut}>Sign out {user?.name}</button>;
}Multi-Environment Setup
// local → NEXT_PUBLIC_API_BASE_URL=http://localhost:4001
// staging → NEXT_PUBLIC_API_BASE_URL=https://access-staging.customy.me
// prod → NEXT_PUBLIC_API_BASE_URL=https://access.customy.me
<CustomyProvider
baseUrl={process.env.NEXT_PUBLIC_API_BASE_URL}
organizationSlug={process.env.NEXT_PUBLIC_ORG_SLUG}
sessionPollingMs={60000} // optional: refresh session every 60s
>Node.js / TypeScript SDK
import { CustomyAccess } from "@customyai/customy-access";
const customy = new CustomyAccess({
baseUrl: "https://access.customy.me",
adminSecret: process.env.CUSTOMY_ADMIN_SECRET,
});
// 26 typed resource clients
const { users } = await customy.users.list("env_123");
const connections = await customy.connections.list("env_123");
const testResult = await customy.connections.test("env_123", "conn_abc");
const roles = await customy.roles.list("env_123");
const history = await customy.impersonation.getHistory("org_123");Available clients: hierarchy · connections · users · sessions · roles · policies · audit · bruteForce · impersonation · webhooks · mfa · branding · delegations · relationships · gdpr · accountLinking · tokenExchange · pushMfa · rateLimits · emailConfig · scim · m2m · logStreams · devices · organizations · health
React SDK — @customyai/customy-access/react
Auth Methods
const { signInWithSocial, signInWithEmail, signUp, signOut, setActiveOrganization } = useAuth();
// Social login (Google, GitHub, Apple, Microsoft, etc.)
signInWithSocial("google", "/dashboard");
// Email/password
const result = await signInWithEmail("[email protected]", "password", "/dashboard");
if (result.error) console.error(result.error);
// Sign up
const signup = await signUp("John", "[email protected]", "password");
// Multi-tenant org switching
await setActiveOrganization("org_abc");Hooks
| Hook | Returns |
|------|---------|
| useAuth() | isSignedIn, signOut, signInWithSocial, signInWithEmail, signUp, setActiveOrganization |
| useUser() | user, isSignedIn, refetch |
| useSession() | data (user + session), isPending |
| useOrganization() | organization, membership |
| useSDK() | Full CustomyAccess admin SDK instance |
| useImpersonation() | isImpersonated, actor, stopImpersonation |
Components
CustomyProvider · SignInButton · SignOutButton · UserButton · ProtectedRoute · OrganizationSwitcher · ImpersonationBanner
Edge SDK — @customyai/customy-access/edge
import { createEdgeClient } from "@customyai/customy-access/edge";
const customy = createEdgeClient({ publishableKey: "pk_live_..." });
// Works in Vercel Edge, Cloudflare Workers, Deno Deploy
const { isValid, user } = await customy.verifySession(token);License
MIT © Customy
