@telestack/auth-sdk 1.2.0 → 1.2.1

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/dist/index.d.mts CHANGED
@@ -6642,16 +6642,57 @@ declare const createTelestackAuth: (config: TelestackConfig) => {
6642
6642
  }, FetchOptions["throw"] extends true ? true : boolean>>;
6643
6643
  verifyPhoneOtp: <FetchOptions extends better_auth.ClientFetchOption<Partial<{
6644
6644
  phoneNumber: string;
6645
- password: string;
6646
- rememberMe?: boolean | undefined;
6647
- }> & Record<string, any>, Partial<Record<string, any>> & Record<string, any>, Record<string, any> | undefined>>(data_0: better_auth.Prettify<{
6645
+ code: string;
6646
+ disableSession?: boolean | undefined;
6647
+ updatePhoneNumber?: boolean | undefined;
6648
+ } & Record<string, any>> & Record<string, any>, Partial<Record<string, any>> & Record<string, any>, Record<string, any> | undefined>>(data_0: better_auth.Prettify<{
6648
6649
  phoneNumber: string;
6649
- password: string;
6650
- rememberMe?: boolean | undefined;
6651
- } & {
6650
+ code: string;
6651
+ disableSession?: boolean | undefined;
6652
+ updatePhoneNumber?: boolean | undefined;
6653
+ } & Record<string, any> & {
6652
6654
  fetchOptions?: FetchOptions | undefined;
6653
- }>, data_1?: FetchOptions | undefined) => Promise<_better_fetch_fetch.BetterFetchResponse<Omit<{
6655
+ }>, data_1?: FetchOptions | undefined) => Promise<_better_fetch_fetch.BetterFetchResponse<(Omit<{
6656
+ status: boolean;
6654
6657
  token: string;
6658
+ user: {
6659
+ id: string;
6660
+ createdAt: Date;
6661
+ updatedAt: Date;
6662
+ email: string;
6663
+ emailVerified: boolean;
6664
+ name: string;
6665
+ image?: string | null | undefined;
6666
+ } & better_auth_plugins.UserWithPhoneNumber;
6667
+ }, "user"> & {
6668
+ user: better_auth.StripEmptyObjects<{
6669
+ id: string;
6670
+ createdAt: Date;
6671
+ updatedAt: Date;
6672
+ email: string;
6673
+ emailVerified: boolean;
6674
+ name: string;
6675
+ image?: string | null | undefined;
6676
+ } & {
6677
+ twoFactorEnabled: boolean | null | undefined;
6678
+ } & {} & {} & {
6679
+ username?: string | null | undefined;
6680
+ displayUsername?: string | null | undefined;
6681
+ } & {
6682
+ banned: boolean | null | undefined;
6683
+ } & {
6684
+ role?: string | null | undefined;
6685
+ banReason?: string | null | undefined;
6686
+ banExpires?: Date | null | undefined;
6687
+ } & {} & {
6688
+ phoneNumber?: string | null | undefined;
6689
+ phoneNumberVerified?: boolean | null | undefined;
6690
+ } & {
6691
+ isAnonymous: boolean | null | undefined;
6692
+ } & {}>;
6693
+ }) | (Omit<{
6694
+ status: boolean;
6695
+ token: null;
6655
6696
  user: better_auth_plugins.UserWithPhoneNumber;
6656
6697
  }, "user"> & {
6657
6698
  user: better_auth.StripEmptyObjects<{
@@ -6679,7 +6720,7 @@ declare const createTelestackAuth: (config: TelestackConfig) => {
6679
6720
  } & {
6680
6721
  isAnonymous: boolean | null | undefined;
6681
6722
  } & {}>;
6682
- }, {
6723
+ }), {
6683
6724
  code?: string | undefined;
6684
6725
  message?: string | undefined;
6685
6726
  }, FetchOptions["throw"] extends true ? true : boolean>>;
package/dist/index.d.ts CHANGED
@@ -6642,16 +6642,57 @@ declare const createTelestackAuth: (config: TelestackConfig) => {
6642
6642
  }, FetchOptions["throw"] extends true ? true : boolean>>;
6643
6643
  verifyPhoneOtp: <FetchOptions extends better_auth.ClientFetchOption<Partial<{
6644
6644
  phoneNumber: string;
6645
- password: string;
6646
- rememberMe?: boolean | undefined;
6647
- }> & Record<string, any>, Partial<Record<string, any>> & Record<string, any>, Record<string, any> | undefined>>(data_0: better_auth.Prettify<{
6645
+ code: string;
6646
+ disableSession?: boolean | undefined;
6647
+ updatePhoneNumber?: boolean | undefined;
6648
+ } & Record<string, any>> & Record<string, any>, Partial<Record<string, any>> & Record<string, any>, Record<string, any> | undefined>>(data_0: better_auth.Prettify<{
6648
6649
  phoneNumber: string;
6649
- password: string;
6650
- rememberMe?: boolean | undefined;
6651
- } & {
6650
+ code: string;
6651
+ disableSession?: boolean | undefined;
6652
+ updatePhoneNumber?: boolean | undefined;
6653
+ } & Record<string, any> & {
6652
6654
  fetchOptions?: FetchOptions | undefined;
6653
- }>, data_1?: FetchOptions | undefined) => Promise<_better_fetch_fetch.BetterFetchResponse<Omit<{
6655
+ }>, data_1?: FetchOptions | undefined) => Promise<_better_fetch_fetch.BetterFetchResponse<(Omit<{
6656
+ status: boolean;
6654
6657
  token: string;
6658
+ user: {
6659
+ id: string;
6660
+ createdAt: Date;
6661
+ updatedAt: Date;
6662
+ email: string;
6663
+ emailVerified: boolean;
6664
+ name: string;
6665
+ image?: string | null | undefined;
6666
+ } & better_auth_plugins.UserWithPhoneNumber;
6667
+ }, "user"> & {
6668
+ user: better_auth.StripEmptyObjects<{
6669
+ id: string;
6670
+ createdAt: Date;
6671
+ updatedAt: Date;
6672
+ email: string;
6673
+ emailVerified: boolean;
6674
+ name: string;
6675
+ image?: string | null | undefined;
6676
+ } & {
6677
+ twoFactorEnabled: boolean | null | undefined;
6678
+ } & {} & {} & {
6679
+ username?: string | null | undefined;
6680
+ displayUsername?: string | null | undefined;
6681
+ } & {
6682
+ banned: boolean | null | undefined;
6683
+ } & {
6684
+ role?: string | null | undefined;
6685
+ banReason?: string | null | undefined;
6686
+ banExpires?: Date | null | undefined;
6687
+ } & {} & {
6688
+ phoneNumber?: string | null | undefined;
6689
+ phoneNumberVerified?: boolean | null | undefined;
6690
+ } & {
6691
+ isAnonymous: boolean | null | undefined;
6692
+ } & {}>;
6693
+ }) | (Omit<{
6694
+ status: boolean;
6695
+ token: null;
6655
6696
  user: better_auth_plugins.UserWithPhoneNumber;
6656
6697
  }, "user"> & {
6657
6698
  user: better_auth.StripEmptyObjects<{
@@ -6679,7 +6720,7 @@ declare const createTelestackAuth: (config: TelestackConfig) => {
6679
6720
  } & {
6680
6721
  isAnonymous: boolean | null | undefined;
6681
6722
  } & {}>;
6682
- }, {
6723
+ }), {
6683
6724
  code?: string | undefined;
6684
6725
  message?: string | undefined;
6685
6726
  }, FetchOptions["throw"] extends true ? true : boolean>>;
package/dist/index.js CHANGED
@@ -81,7 +81,7 @@ var createTelestackAuth = (config) => {
81
81
  signInWithUsername: rawClient.signIn.username,
82
82
  signInWithPhone: rawClient.signIn.phoneNumber,
83
83
  sendPhoneOtp: rawClient.phoneNumber.sendOtp,
84
- verifyPhoneOtp: rawClient.signIn.phoneNumber,
84
+ verifyPhoneOtp: rawClient.phoneNumber.verify,
85
85
  signInWithGoogle: (options) => rawClient.signIn.social({ provider: "google", ...options }),
86
86
  signInWithGithub: (options) => rawClient.signIn.social({ provider: "github", ...options }),
87
87
  signInWithPasskey: rawClient.signIn.passkey,
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/index.ts"],"sourcesContent":["import { createAuthClient } from \"better-auth/client\";\r\nimport {\r\n magicLinkClient,\r\n organizationClient,\r\n twoFactorClient,\r\n usernameClient,\r\n multiSessionClient,\r\n jwtClient,\r\n adminClient,\r\n phoneNumberClient,\r\n emailOTPClient,\r\n oneTapClient,\r\n genericOAuthClient,\r\n oneTimeTokenClient,\r\n deviceAuthorizationClient,\r\n anonymousClient,\r\n} from \"better-auth/client/plugins\";\r\nimport { passkeyClient } from \"@better-auth/passkey/client\";\r\nimport { ssoClient } from \"@better-auth/sso/client\";\r\nimport { apiKeyClient } from \"@better-auth/api-key/client\";\r\n\r\nexport interface TelestackConfig {\r\n url: string;\r\n tenantId: string;\r\n apiKey?: string;\r\n googleClientId?: string;\r\n fetchOptions?: any;\r\n}\r\n\r\n// Internal factory to preserve strict typing when wrapping methods\r\nexport const createTelestackAuth = (config: TelestackConfig) => {\r\n let internalSession: any = null;\r\n let internalActiveOrg: any = null;\r\n let internalOrgs: any = null;\r\n\r\n // Inlining the plugins array is MANDATORY for Better Auth strict TypeScript inference.\r\n const rawClient = createAuthClient({\r\n baseURL: `${config.url}/api/v1/${config.tenantId}/auth`,\r\n fetchOptions: {\r\n ...config.fetchOptions,\r\n headers: {\r\n ...config.fetchOptions?.headers,\r\n ...(config.apiKey ? { \"X-Telestack-API-Key\": config.apiKey } : {})\r\n }\r\n },\r\n plugins: [\r\n magicLinkClient(),\r\n passkeyClient(),\r\n organizationClient(),\r\n ssoClient(),\r\n twoFactorClient(),\r\n usernameClient(),\r\n multiSessionClient(),\r\n jwtClient(),\r\n adminClient(),\r\n apiKeyClient(),\r\n phoneNumberClient(),\r\n emailOTPClient(),\r\n anonymousClient(),\r\n genericOAuthClient(),\r\n oneTimeTokenClient(),\r\n deviceAuthorizationClient(),\r\n ...(config?.googleClientId ? [oneTapClient({ clientId: config.googleClientId })] : [])\r\n ]\r\n });\r\n\r\n // Subscribe to atoms for live updates while the closure lives\r\n const sessionAtom = (rawClient as any).useSession;\r\n if (sessionAtom) {\r\n sessionAtom.subscribe((state: any) => {\r\n internalSession = state?.data;\r\n });\r\n }\r\n\r\n const activeOrgAtom = (rawClient as any).organization?.useActiveOrganization;\r\n if (activeOrgAtom) {\r\n activeOrgAtom.subscribe((state: any) => {\r\n internalActiveOrg = state?.data;\r\n });\r\n }\r\n\r\n return {\r\n rawClient,\r\n auth: {\r\n signInWithEmail: rawClient.signIn.email,\r\n signInWithUsername: rawClient.signIn.username,\r\n signInWithPhone: rawClient.signIn.phoneNumber,\r\n sendPhoneOtp: rawClient.phoneNumber.sendOtp,\r\n verifyPhoneOtp: rawClient.signIn.phoneNumber,\r\n signInWithGoogle: (options?: Parameters<typeof rawClient.signIn.social>[0]) => rawClient.signIn.social({ provider: \"google\", ...options }),\r\n signInWithGithub: (options?: Parameters<typeof rawClient.signIn.social>[0]) => rawClient.signIn.social({ provider: \"github\", ...options }),\r\n signInWithPasskey: rawClient.signIn.passkey,\r\n signInAnonymously: rawClient.signIn.anonymous,\r\n sendMagicLink: async (options: { email: string; callbackURL?: string }) => {\r\n return await rawClient.signIn.magicLink({\r\n email: options.email,\r\n callbackURL: options.callbackURL || window.location.href,\r\n });\r\n },\r\n signInWithMagicLink: rawClient.signIn.magicLink,\r\n sendOtp: async (options: { email: string }) => {\r\n return await rawClient.emailOtp.sendVerificationOtp({\r\n email: options.email,\r\n type: \"sign-in\"\r\n });\r\n },\r\n signInWithOtp: rawClient.signIn.emailOtp,\r\n signInWithSiwe: (rawClient as any).siwe?.signIn,\r\n signUpWithEmail: rawClient.signUp.email,\r\n signOut: rawClient.signOut,\r\n verifyEmail: rawClient.verifyEmail,\r\n forgetPassword: rawClient.forgetPassword,\r\n resetPassword: rawClient.resetPassword,\r\n },\r\n mfa: {\r\n enableTwoFactor: rawClient.twoFactor.enable,\r\n disableTwoFactor: rawClient.twoFactor.disable,\r\n sendOtp: rawClient.twoFactor.sendOtp,\r\n verifyOtp: rawClient.twoFactor.verifyTotp,\r\n },\r\n user: {\r\n getSession: async () => {\r\n const res = await (rawClient.getSession() as any);\r\n internalSession = res?.data;\r\n return res;\r\n },\r\n listSessions: rawClient.listSessions,\r\n updateProfile: rawClient.updateUser,\r\n changeEmail: rawClient.changeEmail,\r\n changePassword: rawClient.changePassword,\r\n deleteAccount: rawClient.deleteUser,\r\n },\r\n organization: {\r\n create: rawClient.organization.create,\r\n update: rawClient.organization.update,\r\n setActive: rawClient.organization.setActive,\r\n list: async () => {\r\n const res = await (rawClient.organization.list() as any);\r\n internalOrgs = res?.data;\r\n return res;\r\n },\r\n inviteMember: rawClient.organization.inviteMember,\r\n acceptInvitation: rawClient.organization.acceptInvitation,\r\n rejectInvitation: rawClient.organization.rejectInvitation,\r\n removeMember: rawClient.organization.removeMember,\r\n },\r\n admin: {\r\n listUsers: rawClient.admin.listUsers,\r\n impersonateUser: rawClient.admin.impersonateUser,\r\n banUser: rawClient.admin.banUser,\r\n },\r\n sso: {\r\n signIn: rawClient.signIn.sso,\r\n register: rawClient.sso.register,\r\n },\r\n apiKey: {\r\n create: rawClient.apiKey.create,\r\n list: rawClient.apiKey.list,\r\n delete: rawClient.apiKey.delete\r\n },\r\n /**\r\n * The Advanced User Context. Provides stateful access to user attributes,\r\n * security status, and organizational roles without constant API calls.\r\n */\r\n get currentUser() {\r\n return {\r\n get profile() {\r\n return internalSession?.user;\r\n },\r\n get security() {\r\n return {\r\n mfaEnabled: internalSession?.user?.twoFactorEnabled || false,\r\n lastLogin: internalSession?.user?.updatedAt,\r\n isAnonymous: internalSession?.user?.isAnonymous || false,\r\n };\r\n },\r\n get organizations() {\r\n return {\r\n active: internalActiveOrg,\r\n all: internalOrgs,\r\n };\r\n },\r\n get session() {\r\n return {\r\n id: internalSession?.session?.id,\r\n expiresAt: internalSession?.session?.expiresAt,\r\n userAgent: internalSession?.session?.userAgent,\r\n };\r\n },\r\n };\r\n },\r\n /**\r\n * Listens for authentication state changes (sign-in, sign-out, session refresh).\r\n */\r\n onAuthStateChanged(callback: (user: any | null) => void) {\r\n const atom = (rawClient as any).useSession;\r\n if (atom) {\r\n return atom.subscribe((state: any) => {\r\n callback(state?.data?.user || null);\r\n });\r\n }\r\n return () => { };\r\n },\r\n /**\r\n * Forces a synchronization of the local auth state with the server.\r\n */\r\n async syncState() {\r\n const session = await (rawClient.getSession() as any);\r\n internalSession = session?.data;\r\n if (rawClient.organization) {\r\n const [orgs, activeOrg] = await Promise.all([\r\n (rawClient.organization as any).list(),\r\n (rawClient.organization as any).getActiveOrganization()\r\n ]);\r\n internalOrgs = (orgs as any)?.data;\r\n internalActiveOrg = (activeOrg as any)?.data;\r\n }\r\n return session;\r\n }\r\n };\r\n};\r\n\r\nexport type TelestackAuthInstance = ReturnType<typeof createTelestackAuth>;\r\n\r\n/**\r\n * The core singleton SDK for TelestackAuth.\r\n * Designed entirely for extreme developer experience and Firebase-style fluency.\r\n */\r\nexport class TelestackAuth {\r\n private static instance: TelestackAuthInstance | null = null;\r\n private static config: TelestackConfig | null = null;\r\n\r\n /**\r\n * Initializes the TelestackAuth SDK. Must be called once at app startup.\r\n */\r\n public static initialize(config: TelestackConfig): TelestackAuthInstance {\r\n this.config = config;\r\n this.instance = createTelestackAuth(config);\r\n return this.instance;\r\n }\r\n\r\n /**\r\n * Updates the SDK configuration (e.g., adding a token).\r\n */\r\n public static updateConfig(config: Partial<TelestackConfig>): TelestackAuthInstance {\r\n if (!this.config) throw new Error(\"Initialize SDK first\");\r\n this.config = { ...this.config, ...config };\r\n this.instance = createTelestackAuth(this.config);\r\n return this.instance;\r\n }\r\n\r\n /**\r\n * Sets the Bearer token for all subsequent requests.\r\n */\r\n public static setToken(token: string): TelestackAuthInstance {\r\n if (!this.config) throw new Error(\"Initialize SDK first\");\r\n return this.updateConfig({\r\n fetchOptions: {\r\n ...this.config.fetchOptions,\r\n headers: {\r\n ...this.config.fetchOptions?.headers,\r\n \"Authorization\": `Bearer ${token}`\r\n }\r\n }\r\n });\r\n }\r\n\r\n /**\r\n * Retrieves the initialized instance of the SDK.\r\n */\r\n public static getInstance(): TelestackAuthInstance {\r\n if (!this.instance) {\r\n throw new Error(\"TelestackAuth has not been initialized. Call initialize(config) first.\");\r\n }\r\n return this.instance;\r\n }\r\n}\r\n\r\n"],"mappings":"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","names":["import_client"]}
1
+ {"version":3,"sources":["../src/index.ts"],"sourcesContent":["import { createAuthClient } from \"better-auth/client\";\r\nimport {\r\n magicLinkClient,\r\n organizationClient,\r\n twoFactorClient,\r\n usernameClient,\r\n multiSessionClient,\r\n jwtClient,\r\n adminClient,\r\n phoneNumberClient,\r\n emailOTPClient,\r\n oneTapClient,\r\n genericOAuthClient,\r\n oneTimeTokenClient,\r\n deviceAuthorizationClient,\r\n anonymousClient,\r\n} from \"better-auth/client/plugins\";\r\nimport { passkeyClient } from \"@better-auth/passkey/client\";\r\nimport { ssoClient } from \"@better-auth/sso/client\";\r\nimport { apiKeyClient } from \"@better-auth/api-key/client\";\r\n\r\nexport interface TelestackConfig {\r\n url: string;\r\n tenantId: string;\r\n apiKey?: string;\r\n googleClientId?: string;\r\n fetchOptions?: any;\r\n}\r\n\r\n// Internal factory to preserve strict typing when wrapping methods\r\nexport const createTelestackAuth = (config: TelestackConfig) => {\r\n let internalSession: any = null;\r\n let internalActiveOrg: any = null;\r\n let internalOrgs: any = null;\r\n\r\n // Inlining the plugins array is MANDATORY for Better Auth strict TypeScript inference.\r\n const rawClient = createAuthClient({\r\n baseURL: `${config.url}/api/v1/${config.tenantId}/auth`,\r\n fetchOptions: {\r\n ...config.fetchOptions,\r\n headers: {\r\n ...config.fetchOptions?.headers,\r\n ...(config.apiKey ? { \"X-Telestack-API-Key\": config.apiKey } : {})\r\n }\r\n },\r\n plugins: [\r\n magicLinkClient(),\r\n passkeyClient(),\r\n organizationClient(),\r\n ssoClient(),\r\n twoFactorClient(),\r\n usernameClient(),\r\n multiSessionClient(),\r\n jwtClient(),\r\n adminClient(),\r\n apiKeyClient(),\r\n phoneNumberClient(),\r\n emailOTPClient(),\r\n anonymousClient(),\r\n genericOAuthClient(),\r\n oneTimeTokenClient(),\r\n deviceAuthorizationClient(),\r\n ...(config?.googleClientId ? [oneTapClient({ clientId: config.googleClientId })] : [])\r\n ]\r\n });\r\n\r\n // Subscribe to atoms for live updates while the closure lives\r\n const sessionAtom = (rawClient as any).useSession;\r\n if (sessionAtom) {\r\n sessionAtom.subscribe((state: any) => {\r\n internalSession = state?.data;\r\n });\r\n }\r\n\r\n const activeOrgAtom = (rawClient as any).organization?.useActiveOrganization;\r\n if (activeOrgAtom) {\r\n activeOrgAtom.subscribe((state: any) => {\r\n internalActiveOrg = state?.data;\r\n });\r\n }\r\n\r\n return {\r\n rawClient,\r\n auth: {\r\n signInWithEmail: rawClient.signIn.email,\r\n signInWithUsername: rawClient.signIn.username,\r\n signInWithPhone: rawClient.signIn.phoneNumber,\r\n sendPhoneOtp: rawClient.phoneNumber.sendOtp,\r\n verifyPhoneOtp: rawClient.phoneNumber.verify,\r\n signInWithGoogle: (options?: Parameters<typeof rawClient.signIn.social>[0]) => rawClient.signIn.social({ provider: \"google\", ...options }),\r\n signInWithGithub: (options?: Parameters<typeof rawClient.signIn.social>[0]) => rawClient.signIn.social({ provider: \"github\", ...options }),\r\n signInWithPasskey: rawClient.signIn.passkey,\r\n signInAnonymously: rawClient.signIn.anonymous,\r\n sendMagicLink: async (options: { email: string; callbackURL?: string }) => {\r\n return await rawClient.signIn.magicLink({\r\n email: options.email,\r\n callbackURL: options.callbackURL || window.location.href,\r\n });\r\n },\r\n signInWithMagicLink: rawClient.signIn.magicLink,\r\n sendOtp: async (options: { email: string }) => {\r\n return await rawClient.emailOtp.sendVerificationOtp({\r\n email: options.email,\r\n type: \"sign-in\"\r\n });\r\n },\r\n signInWithOtp: rawClient.signIn.emailOtp,\r\n signInWithSiwe: (rawClient as any).siwe?.signIn,\r\n signUpWithEmail: rawClient.signUp.email,\r\n signOut: rawClient.signOut,\r\n verifyEmail: rawClient.verifyEmail,\r\n forgetPassword: rawClient.forgetPassword,\r\n resetPassword: rawClient.resetPassword,\r\n },\r\n mfa: {\r\n enableTwoFactor: rawClient.twoFactor.enable,\r\n disableTwoFactor: rawClient.twoFactor.disable,\r\n sendOtp: rawClient.twoFactor.sendOtp,\r\n verifyOtp: rawClient.twoFactor.verifyTotp,\r\n },\r\n user: {\r\n getSession: async () => {\r\n const res = await (rawClient.getSession() as any);\r\n internalSession = res?.data;\r\n return res;\r\n },\r\n listSessions: rawClient.listSessions,\r\n updateProfile: rawClient.updateUser,\r\n changeEmail: rawClient.changeEmail,\r\n changePassword: rawClient.changePassword,\r\n deleteAccount: rawClient.deleteUser,\r\n },\r\n organization: {\r\n create: rawClient.organization.create,\r\n update: rawClient.organization.update,\r\n setActive: rawClient.organization.setActive,\r\n list: async () => {\r\n const res = await (rawClient.organization.list() as any);\r\n internalOrgs = res?.data;\r\n return res;\r\n },\r\n inviteMember: rawClient.organization.inviteMember,\r\n acceptInvitation: rawClient.organization.acceptInvitation,\r\n rejectInvitation: rawClient.organization.rejectInvitation,\r\n removeMember: rawClient.organization.removeMember,\r\n },\r\n admin: {\r\n listUsers: rawClient.admin.listUsers,\r\n impersonateUser: rawClient.admin.impersonateUser,\r\n banUser: rawClient.admin.banUser,\r\n },\r\n sso: {\r\n signIn: rawClient.signIn.sso,\r\n register: rawClient.sso.register,\r\n },\r\n apiKey: {\r\n create: rawClient.apiKey.create,\r\n list: rawClient.apiKey.list,\r\n delete: rawClient.apiKey.delete\r\n },\r\n /**\r\n * The Advanced User Context. Provides stateful access to user attributes,\r\n * security status, and organizational roles without constant API calls.\r\n */\r\n get currentUser() {\r\n return {\r\n get profile() {\r\n return internalSession?.user;\r\n },\r\n get security() {\r\n return {\r\n mfaEnabled: internalSession?.user?.twoFactorEnabled || false,\r\n lastLogin: internalSession?.user?.updatedAt,\r\n isAnonymous: internalSession?.user?.isAnonymous || false,\r\n };\r\n },\r\n get organizations() {\r\n return {\r\n active: internalActiveOrg,\r\n all: internalOrgs,\r\n };\r\n },\r\n get session() {\r\n return {\r\n id: internalSession?.session?.id,\r\n expiresAt: internalSession?.session?.expiresAt,\r\n userAgent: internalSession?.session?.userAgent,\r\n };\r\n },\r\n };\r\n },\r\n /**\r\n * Listens for authentication state changes (sign-in, sign-out, session refresh).\r\n */\r\n onAuthStateChanged(callback: (user: any | null) => void) {\r\n const atom = (rawClient as any).useSession;\r\n if (atom) {\r\n return atom.subscribe((state: any) => {\r\n callback(state?.data?.user || null);\r\n });\r\n }\r\n return () => { };\r\n },\r\n /**\r\n * Forces a synchronization of the local auth state with the server.\r\n */\r\n async syncState() {\r\n const session = await (rawClient.getSession() as any);\r\n internalSession = session?.data;\r\n if (rawClient.organization) {\r\n const [orgs, activeOrg] = await Promise.all([\r\n (rawClient.organization as any).list(),\r\n (rawClient.organization as any).getActiveOrganization()\r\n ]);\r\n internalOrgs = (orgs as any)?.data;\r\n internalActiveOrg = (activeOrg as any)?.data;\r\n }\r\n return session;\r\n }\r\n };\r\n};\r\n\r\nexport type TelestackAuthInstance = ReturnType<typeof createTelestackAuth>;\r\n\r\n/**\r\n * The core singleton SDK for TelestackAuth.\r\n * Designed entirely for extreme developer experience and Firebase-style fluency.\r\n */\r\nexport class TelestackAuth {\r\n private static instance: TelestackAuthInstance | null = null;\r\n private static config: TelestackConfig | null = null;\r\n\r\n /**\r\n * Initializes the TelestackAuth SDK. Must be called once at app startup.\r\n */\r\n public static initialize(config: TelestackConfig): TelestackAuthInstance {\r\n this.config = config;\r\n this.instance = createTelestackAuth(config);\r\n return this.instance;\r\n }\r\n\r\n /**\r\n * Updates the SDK configuration (e.g., adding a token).\r\n */\r\n public static updateConfig(config: Partial<TelestackConfig>): TelestackAuthInstance {\r\n if (!this.config) throw new Error(\"Initialize SDK first\");\r\n this.config = { ...this.config, ...config };\r\n this.instance = createTelestackAuth(this.config);\r\n return this.instance;\r\n }\r\n\r\n /**\r\n * Sets the Bearer token for all subsequent requests.\r\n */\r\n public static setToken(token: string): TelestackAuthInstance {\r\n if (!this.config) throw new Error(\"Initialize SDK first\");\r\n return this.updateConfig({\r\n fetchOptions: {\r\n ...this.config.fetchOptions,\r\n headers: {\r\n ...this.config.fetchOptions?.headers,\r\n \"Authorization\": `Bearer ${token}`\r\n }\r\n }\r\n });\r\n }\r\n\r\n /**\r\n * Retrieves the initialized instance of the SDK.\r\n */\r\n public static getInstance(): TelestackAuthInstance {\r\n if (!this.instance) {\r\n throw new Error(\"TelestackAuth has not been initialized. Call initialize(config) first.\");\r\n }\r\n return this.instance;\r\n }\r\n}\r\n\r\n"],"mappings":";;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,oBAAiC;AACjC,qBAeO;AACP,IAAAA,iBAA8B;AAC9B,IAAAA,iBAA0B;AAC1B,IAAAA,iBAA6B;AAWtB,IAAM,sBAAsB,CAAC,WAA4B;AAC5D,MAAI,kBAAuB;AAC3B,MAAI,oBAAyB;AAC7B,MAAI,eAAoB;AAGxB,QAAM,gBAAY,gCAAiB;AAAA,IAC/B,SAAS,GAAG,OAAO,GAAG,WAAW,OAAO,QAAQ;AAAA,IAChD,cAAc;AAAA,MACV,GAAG,OAAO;AAAA,MACV,SAAS;AAAA,QACL,GAAG,OAAO,cAAc;AAAA,QACxB,GAAI,OAAO,SAAS,EAAE,uBAAuB,OAAO,OAAO,IAAI,CAAC;AAAA,MACpE;AAAA,IACJ;AAAA,IACA,SAAS;AAAA,UACL,gCAAgB;AAAA,UAChB,8BAAc;AAAA,UACd,mCAAmB;AAAA,UACnB,0BAAU;AAAA,UACV,gCAAgB;AAAA,UAChB,+BAAe;AAAA,UACf,mCAAmB;AAAA,UACnB,0BAAU;AAAA,UACV,4BAAY;AAAA,UACZ,6BAAa;AAAA,UACb,kCAAkB;AAAA,UAClB,+BAAe;AAAA,UACf,gCAAgB;AAAA,UAChB,mCAAmB;AAAA,UACnB,mCAAmB;AAAA,UACnB,0CAA0B;AAAA,MAC1B,GAAI,QAAQ,iBAAiB,KAAC,6BAAa,EAAE,UAAU,OAAO,eAAe,CAAC,CAAC,IAAI,CAAC;AAAA,IACxF;AAAA,EACJ,CAAC;AAGD,QAAM,cAAe,UAAkB;AACvC,MAAI,aAAa;AACb,gBAAY,UAAU,CAAC,UAAe;AAClC,wBAAkB,OAAO;AAAA,IAC7B,CAAC;AAAA,EACL;AAEA,QAAM,gBAAiB,UAAkB,cAAc;AACvD,MAAI,eAAe;AACf,kBAAc,UAAU,CAAC,UAAe;AACpC,0BAAoB,OAAO;AAAA,IAC/B,CAAC;AAAA,EACL;AAEA,SAAO;AAAA,IACH;AAAA,IACA,MAAM;AAAA,MACF,iBAAiB,UAAU,OAAO;AAAA,MAClC,oBAAoB,UAAU,OAAO;AAAA,MACrC,iBAAiB,UAAU,OAAO;AAAA,MAClC,cAAc,UAAU,YAAY;AAAA,MACpC,gBAAgB,UAAU,YAAY;AAAA,MACtC,kBAAkB,CAAC,YAA4D,UAAU,OAAO,OAAO,EAAE,UAAU,UAAU,GAAG,QAAQ,CAAC;AAAA,MACzI,kBAAkB,CAAC,YAA4D,UAAU,OAAO,OAAO,EAAE,UAAU,UAAU,GAAG,QAAQ,CAAC;AAAA,MACzI,mBAAmB,UAAU,OAAO;AAAA,MACpC,mBAAmB,UAAU,OAAO;AAAA,MACpC,eAAe,OAAO,YAAqD;AACvE,eAAO,MAAM,UAAU,OAAO,UAAU;AAAA,UACpC,OAAO,QAAQ;AAAA,UACf,aAAa,QAAQ,eAAe,OAAO,SAAS;AAAA,QACxD,CAAC;AAAA,MACL;AAAA,MACA,qBAAqB,UAAU,OAAO;AAAA,MACtC,SAAS,OAAO,YAA+B;AAC3C,eAAO,MAAM,UAAU,SAAS,oBAAoB;AAAA,UAChD,OAAO,QAAQ;AAAA,UACf,MAAM;AAAA,QACV,CAAC;AAAA,MACL;AAAA,MACA,eAAe,UAAU,OAAO;AAAA,MAChC,gBAAiB,UAAkB,MAAM;AAAA,MACzC,iBAAiB,UAAU,OAAO;AAAA,MAClC,SAAS,UAAU;AAAA,MACnB,aAAa,UAAU;AAAA,MACvB,gBAAgB,UAAU;AAAA,MAC1B,eAAe,UAAU;AAAA,IAC7B;AAAA,IACA,KAAK;AAAA,MACD,iBAAiB,UAAU,UAAU;AAAA,MACrC,kBAAkB,UAAU,UAAU;AAAA,MACtC,SAAS,UAAU,UAAU;AAAA,MAC7B,WAAW,UAAU,UAAU;AAAA,IACnC;AAAA,IACA,MAAM;AAAA,MACF,YAAY,YAAY;AACpB,cAAM,MAAM,MAAO,UAAU,WAAW;AACxC,0BAAkB,KAAK;AACvB,eAAO;AAAA,MACX;AAAA,MACA,cAAc,UAAU;AAAA,MACxB,eAAe,UAAU;AAAA,MACzB,aAAa,UAAU;AAAA,MACvB,gBAAgB,UAAU;AAAA,MAC1B,eAAe,UAAU;AAAA,IAC7B;AAAA,IACA,cAAc;AAAA,MACV,QAAQ,UAAU,aAAa;AAAA,MAC/B,QAAQ,UAAU,aAAa;AAAA,MAC/B,WAAW,UAAU,aAAa;AAAA,MAClC,MAAM,YAAY;AACd,cAAM,MAAM,MAAO,UAAU,aAAa,KAAK;AAC/C,uBAAe,KAAK;AACpB,eAAO;AAAA,MACX;AAAA,MACA,cAAc,UAAU,aAAa;AAAA,MACrC,kBAAkB,UAAU,aAAa;AAAA,MACzC,kBAAkB,UAAU,aAAa;AAAA,MACzC,cAAc,UAAU,aAAa;AAAA,IACzC;AAAA,IACA,OAAO;AAAA,MACH,WAAW,UAAU,MAAM;AAAA,MAC3B,iBAAiB,UAAU,MAAM;AAAA,MACjC,SAAS,UAAU,MAAM;AAAA,IAC7B;AAAA,IACA,KAAK;AAAA,MACD,QAAQ,UAAU,OAAO;AAAA,MACzB,UAAU,UAAU,IAAI;AAAA,IAC5B;AAAA,IACA,QAAQ;AAAA,MACJ,QAAQ,UAAU,OAAO;AAAA,MACzB,MAAM,UAAU,OAAO;AAAA,MACvB,QAAQ,UAAU,OAAO;AAAA,IAC7B;AAAA;AAAA;AAAA;AAAA;AAAA,IAKA,IAAI,cAAc;AACd,aAAO;AAAA,QACH,IAAI,UAAU;AACV,iBAAO,iBAAiB;AAAA,QAC5B;AAAA,QACA,IAAI,WAAW;AACX,iBAAO;AAAA,YACH,YAAY,iBAAiB,MAAM,oBAAoB;AAAA,YACvD,WAAW,iBAAiB,MAAM;AAAA,YAClC,aAAa,iBAAiB,MAAM,eAAe;AAAA,UACvD;AAAA,QACJ;AAAA,QACA,IAAI,gBAAgB;AAChB,iBAAO;AAAA,YACH,QAAQ;AAAA,YACR,KAAK;AAAA,UACT;AAAA,QACJ;AAAA,QACA,IAAI,UAAU;AACV,iBAAO;AAAA,YACH,IAAI,iBAAiB,SAAS;AAAA,YAC9B,WAAW,iBAAiB,SAAS;AAAA,YACrC,WAAW,iBAAiB,SAAS;AAAA,UACzC;AAAA,QACJ;AAAA,MACJ;AAAA,IACJ;AAAA;AAAA;AAAA;AAAA,IAIA,mBAAmB,UAAsC;AACrD,YAAM,OAAQ,UAAkB;AAChC,UAAI,MAAM;AACN,eAAO,KAAK,UAAU,CAAC,UAAe;AAClC,mBAAS,OAAO,MAAM,QAAQ,IAAI;AAAA,QACtC,CAAC;AAAA,MACL;AACA,aAAO,MAAM;AAAA,MAAE;AAAA,IACnB;AAAA;AAAA;AAAA;AAAA,IAIA,MAAM,YAAY;AACd,YAAM,UAAU,MAAO,UAAU,WAAW;AAC5C,wBAAkB,SAAS;AAC3B,UAAI,UAAU,cAAc;AACxB,cAAM,CAAC,MAAM,SAAS,IAAI,MAAM,QAAQ,IAAI;AAAA,UACvC,UAAU,aAAqB,KAAK;AAAA,UACpC,UAAU,aAAqB,sBAAsB;AAAA,QAC1D,CAAC;AACD,uBAAgB,MAAc;AAC9B,4BAAqB,WAAmB;AAAA,MAC5C;AACA,aAAO;AAAA,IACX;AAAA,EACJ;AACJ;AAQO,IAAM,gBAAN,MAAoB;AAAA,EACvB,OAAe,WAAyC;AAAA,EACxD,OAAe,SAAiC;AAAA;AAAA;AAAA;AAAA,EAKhD,OAAc,WAAW,QAAgD;AACrE,SAAK,SAAS;AACd,SAAK,WAAW,oBAAoB,MAAM;AAC1C,WAAO,KAAK;AAAA,EAChB;AAAA;AAAA;AAAA;AAAA,EAKA,OAAc,aAAa,QAAyD;AAChF,QAAI,CAAC,KAAK,OAAQ,OAAM,IAAI,MAAM,sBAAsB;AACxD,SAAK,SAAS,EAAE,GAAG,KAAK,QAAQ,GAAG,OAAO;AAC1C,SAAK,WAAW,oBAAoB,KAAK,MAAM;AAC/C,WAAO,KAAK;AAAA,EAChB;AAAA;AAAA;AAAA;AAAA,EAKA,OAAc,SAAS,OAAsC;AACzD,QAAI,CAAC,KAAK,OAAQ,OAAM,IAAI,MAAM,sBAAsB;AACxD,WAAO,KAAK,aAAa;AAAA,MACrB,cAAc;AAAA,QACV,GAAG,KAAK,OAAO;AAAA,QACf,SAAS;AAAA,UACL,GAAG,KAAK,OAAO,cAAc;AAAA,UAC7B,iBAAiB,UAAU,KAAK;AAAA,QACpC;AAAA,MACJ;AAAA,IACJ,CAAC;AAAA,EACL;AAAA;AAAA;AAAA;AAAA,EAKA,OAAc,cAAqC;AAC/C,QAAI,CAAC,KAAK,UAAU;AAChB,YAAM,IAAI,MAAM,wEAAwE;AAAA,IAC5F;AACA,WAAO,KAAK;AAAA,EAChB;AACJ;","names":["import_client"]}
package/dist/index.mjs CHANGED
@@ -71,7 +71,7 @@ var createTelestackAuth = (config) => {
71
71
  signInWithUsername: rawClient.signIn.username,
72
72
  signInWithPhone: rawClient.signIn.phoneNumber,
73
73
  sendPhoneOtp: rawClient.phoneNumber.sendOtp,
74
- verifyPhoneOtp: rawClient.signIn.phoneNumber,
74
+ verifyPhoneOtp: rawClient.phoneNumber.verify,
75
75
  signInWithGoogle: (options) => rawClient.signIn.social({ provider: "google", ...options }),
76
76
  signInWithGithub: (options) => rawClient.signIn.social({ provider: "github", ...options }),
77
77
  signInWithPasskey: rawClient.signIn.passkey,
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/index.ts"],"sourcesContent":["import { createAuthClient } from \"better-auth/client\";\r\nimport {\r\n magicLinkClient,\r\n organizationClient,\r\n twoFactorClient,\r\n usernameClient,\r\n multiSessionClient,\r\n jwtClient,\r\n adminClient,\r\n phoneNumberClient,\r\n emailOTPClient,\r\n oneTapClient,\r\n genericOAuthClient,\r\n oneTimeTokenClient,\r\n deviceAuthorizationClient,\r\n anonymousClient,\r\n} from \"better-auth/client/plugins\";\r\nimport { passkeyClient } from \"@better-auth/passkey/client\";\r\nimport { ssoClient } from \"@better-auth/sso/client\";\r\nimport { apiKeyClient } from \"@better-auth/api-key/client\";\r\n\r\nexport interface TelestackConfig {\r\n url: string;\r\n tenantId: string;\r\n apiKey?: string;\r\n googleClientId?: string;\r\n fetchOptions?: any;\r\n}\r\n\r\n// Internal factory to preserve strict typing when wrapping methods\r\nexport const createTelestackAuth = (config: TelestackConfig) => {\r\n let internalSession: any = null;\r\n let internalActiveOrg: any = null;\r\n let internalOrgs: any = null;\r\n\r\n // Inlining the plugins array is MANDATORY for Better Auth strict TypeScript inference.\r\n const rawClient = createAuthClient({\r\n baseURL: `${config.url}/api/v1/${config.tenantId}/auth`,\r\n fetchOptions: {\r\n ...config.fetchOptions,\r\n headers: {\r\n ...config.fetchOptions?.headers,\r\n ...(config.apiKey ? { \"X-Telestack-API-Key\": config.apiKey } : {})\r\n }\r\n },\r\n plugins: [\r\n magicLinkClient(),\r\n passkeyClient(),\r\n organizationClient(),\r\n ssoClient(),\r\n twoFactorClient(),\r\n usernameClient(),\r\n multiSessionClient(),\r\n jwtClient(),\r\n adminClient(),\r\n apiKeyClient(),\r\n phoneNumberClient(),\r\n emailOTPClient(),\r\n anonymousClient(),\r\n genericOAuthClient(),\r\n oneTimeTokenClient(),\r\n deviceAuthorizationClient(),\r\n ...(config?.googleClientId ? [oneTapClient({ clientId: config.googleClientId })] : [])\r\n ]\r\n });\r\n\r\n // Subscribe to atoms for live updates while the closure lives\r\n const sessionAtom = (rawClient as any).useSession;\r\n if (sessionAtom) {\r\n sessionAtom.subscribe((state: any) => {\r\n internalSession = state?.data;\r\n });\r\n }\r\n\r\n const activeOrgAtom = (rawClient as any).organization?.useActiveOrganization;\r\n if (activeOrgAtom) {\r\n activeOrgAtom.subscribe((state: any) => {\r\n internalActiveOrg = state?.data;\r\n });\r\n }\r\n\r\n return {\r\n rawClient,\r\n auth: {\r\n signInWithEmail: rawClient.signIn.email,\r\n signInWithUsername: rawClient.signIn.username,\r\n signInWithPhone: rawClient.signIn.phoneNumber,\r\n sendPhoneOtp: rawClient.phoneNumber.sendOtp,\r\n verifyPhoneOtp: rawClient.signIn.phoneNumber,\r\n signInWithGoogle: (options?: Parameters<typeof rawClient.signIn.social>[0]) => rawClient.signIn.social({ provider: \"google\", ...options }),\r\n signInWithGithub: (options?: Parameters<typeof rawClient.signIn.social>[0]) => rawClient.signIn.social({ provider: \"github\", ...options }),\r\n signInWithPasskey: rawClient.signIn.passkey,\r\n signInAnonymously: rawClient.signIn.anonymous,\r\n sendMagicLink: async (options: { email: string; callbackURL?: string }) => {\r\n return await rawClient.signIn.magicLink({\r\n email: options.email,\r\n callbackURL: options.callbackURL || window.location.href,\r\n });\r\n },\r\n signInWithMagicLink: rawClient.signIn.magicLink,\r\n sendOtp: async (options: { email: string }) => {\r\n return await rawClient.emailOtp.sendVerificationOtp({\r\n email: options.email,\r\n type: \"sign-in\"\r\n });\r\n },\r\n signInWithOtp: rawClient.signIn.emailOtp,\r\n signInWithSiwe: (rawClient as any).siwe?.signIn,\r\n signUpWithEmail: rawClient.signUp.email,\r\n signOut: rawClient.signOut,\r\n verifyEmail: rawClient.verifyEmail,\r\n forgetPassword: rawClient.forgetPassword,\r\n resetPassword: rawClient.resetPassword,\r\n },\r\n mfa: {\r\n enableTwoFactor: rawClient.twoFactor.enable,\r\n disableTwoFactor: rawClient.twoFactor.disable,\r\n sendOtp: rawClient.twoFactor.sendOtp,\r\n verifyOtp: rawClient.twoFactor.verifyTotp,\r\n },\r\n user: {\r\n getSession: async () => {\r\n const res = await (rawClient.getSession() as any);\r\n internalSession = res?.data;\r\n return res;\r\n },\r\n listSessions: rawClient.listSessions,\r\n updateProfile: rawClient.updateUser,\r\n changeEmail: rawClient.changeEmail,\r\n changePassword: rawClient.changePassword,\r\n deleteAccount: rawClient.deleteUser,\r\n },\r\n organization: {\r\n create: rawClient.organization.create,\r\n update: rawClient.organization.update,\r\n setActive: rawClient.organization.setActive,\r\n list: async () => {\r\n const res = await (rawClient.organization.list() as any);\r\n internalOrgs = res?.data;\r\n return res;\r\n },\r\n inviteMember: rawClient.organization.inviteMember,\r\n acceptInvitation: rawClient.organization.acceptInvitation,\r\n rejectInvitation: rawClient.organization.rejectInvitation,\r\n removeMember: rawClient.organization.removeMember,\r\n },\r\n admin: {\r\n listUsers: rawClient.admin.listUsers,\r\n impersonateUser: rawClient.admin.impersonateUser,\r\n banUser: rawClient.admin.banUser,\r\n },\r\n sso: {\r\n signIn: rawClient.signIn.sso,\r\n register: rawClient.sso.register,\r\n },\r\n apiKey: {\r\n create: rawClient.apiKey.create,\r\n list: rawClient.apiKey.list,\r\n delete: rawClient.apiKey.delete\r\n },\r\n /**\r\n * The Advanced User Context. Provides stateful access to user attributes,\r\n * security status, and organizational roles without constant API calls.\r\n */\r\n get currentUser() {\r\n return {\r\n get profile() {\r\n return internalSession?.user;\r\n },\r\n get security() {\r\n return {\r\n mfaEnabled: internalSession?.user?.twoFactorEnabled || false,\r\n lastLogin: internalSession?.user?.updatedAt,\r\n isAnonymous: internalSession?.user?.isAnonymous || false,\r\n };\r\n },\r\n get organizations() {\r\n return {\r\n active: internalActiveOrg,\r\n all: internalOrgs,\r\n };\r\n },\r\n get session() {\r\n return {\r\n id: internalSession?.session?.id,\r\n expiresAt: internalSession?.session?.expiresAt,\r\n userAgent: internalSession?.session?.userAgent,\r\n };\r\n },\r\n };\r\n },\r\n /**\r\n * Listens for authentication state changes (sign-in, sign-out, session refresh).\r\n */\r\n onAuthStateChanged(callback: (user: any | null) => void) {\r\n const atom = (rawClient as any).useSession;\r\n if (atom) {\r\n return atom.subscribe((state: any) => {\r\n callback(state?.data?.user || null);\r\n });\r\n }\r\n return () => { };\r\n },\r\n /**\r\n * Forces a synchronization of the local auth state with the server.\r\n */\r\n async syncState() {\r\n const session = await (rawClient.getSession() as any);\r\n internalSession = session?.data;\r\n if (rawClient.organization) {\r\n const [orgs, activeOrg] = await Promise.all([\r\n (rawClient.organization as any).list(),\r\n (rawClient.organization as any).getActiveOrganization()\r\n ]);\r\n internalOrgs = (orgs as any)?.data;\r\n internalActiveOrg = (activeOrg as any)?.data;\r\n }\r\n return session;\r\n }\r\n };\r\n};\r\n\r\nexport type TelestackAuthInstance = ReturnType<typeof createTelestackAuth>;\r\n\r\n/**\r\n * The core singleton SDK for TelestackAuth.\r\n * Designed entirely for extreme developer experience and Firebase-style fluency.\r\n */\r\nexport class TelestackAuth {\r\n private static instance: TelestackAuthInstance | null = null;\r\n private static config: TelestackConfig | null = null;\r\n\r\n /**\r\n * Initializes the TelestackAuth SDK. Must be called once at app startup.\r\n */\r\n public static initialize(config: TelestackConfig): TelestackAuthInstance {\r\n this.config = config;\r\n this.instance = createTelestackAuth(config);\r\n return this.instance;\r\n }\r\n\r\n /**\r\n * Updates the SDK configuration (e.g., adding a token).\r\n */\r\n public static updateConfig(config: Partial<TelestackConfig>): TelestackAuthInstance {\r\n if (!this.config) throw new Error(\"Initialize SDK first\");\r\n this.config = { ...this.config, ...config };\r\n this.instance = createTelestackAuth(this.config);\r\n return this.instance;\r\n }\r\n\r\n /**\r\n * Sets the Bearer token for all subsequent requests.\r\n */\r\n public static setToken(token: string): TelestackAuthInstance {\r\n if (!this.config) throw new Error(\"Initialize SDK first\");\r\n return this.updateConfig({\r\n fetchOptions: {\r\n ...this.config.fetchOptions,\r\n headers: {\r\n ...this.config.fetchOptions?.headers,\r\n \"Authorization\": `Bearer ${token}`\r\n }\r\n }\r\n });\r\n }\r\n\r\n /**\r\n * Retrieves the initialized instance of the SDK.\r\n */\r\n public static getInstance(): TelestackAuthInstance {\r\n if (!this.instance) {\r\n throw new Error(\"TelestackAuth has not been initialized. Call initialize(config) first.\");\r\n }\r\n return this.instance;\r\n }\r\n}\r\n\r\n"],"mappings":"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","names":[]}
1
+ {"version":3,"sources":["../src/index.ts"],"sourcesContent":["import { createAuthClient } from \"better-auth/client\";\r\nimport {\r\n magicLinkClient,\r\n organizationClient,\r\n twoFactorClient,\r\n usernameClient,\r\n multiSessionClient,\r\n jwtClient,\r\n adminClient,\r\n phoneNumberClient,\r\n emailOTPClient,\r\n oneTapClient,\r\n genericOAuthClient,\r\n oneTimeTokenClient,\r\n deviceAuthorizationClient,\r\n anonymousClient,\r\n} from \"better-auth/client/plugins\";\r\nimport { passkeyClient } from \"@better-auth/passkey/client\";\r\nimport { ssoClient } from \"@better-auth/sso/client\";\r\nimport { apiKeyClient } from \"@better-auth/api-key/client\";\r\n\r\nexport interface TelestackConfig {\r\n url: string;\r\n tenantId: string;\r\n apiKey?: string;\r\n googleClientId?: string;\r\n fetchOptions?: any;\r\n}\r\n\r\n// Internal factory to preserve strict typing when wrapping methods\r\nexport const createTelestackAuth = (config: TelestackConfig) => {\r\n let internalSession: any = null;\r\n let internalActiveOrg: any = null;\r\n let internalOrgs: any = null;\r\n\r\n // Inlining the plugins array is MANDATORY for Better Auth strict TypeScript inference.\r\n const rawClient = createAuthClient({\r\n baseURL: `${config.url}/api/v1/${config.tenantId}/auth`,\r\n fetchOptions: {\r\n ...config.fetchOptions,\r\n headers: {\r\n ...config.fetchOptions?.headers,\r\n ...(config.apiKey ? { \"X-Telestack-API-Key\": config.apiKey } : {})\r\n }\r\n },\r\n plugins: [\r\n magicLinkClient(),\r\n passkeyClient(),\r\n organizationClient(),\r\n ssoClient(),\r\n twoFactorClient(),\r\n usernameClient(),\r\n multiSessionClient(),\r\n jwtClient(),\r\n adminClient(),\r\n apiKeyClient(),\r\n phoneNumberClient(),\r\n emailOTPClient(),\r\n anonymousClient(),\r\n genericOAuthClient(),\r\n oneTimeTokenClient(),\r\n deviceAuthorizationClient(),\r\n ...(config?.googleClientId ? [oneTapClient({ clientId: config.googleClientId })] : [])\r\n ]\r\n });\r\n\r\n // Subscribe to atoms for live updates while the closure lives\r\n const sessionAtom = (rawClient as any).useSession;\r\n if (sessionAtom) {\r\n sessionAtom.subscribe((state: any) => {\r\n internalSession = state?.data;\r\n });\r\n }\r\n\r\n const activeOrgAtom = (rawClient as any).organization?.useActiveOrganization;\r\n if (activeOrgAtom) {\r\n activeOrgAtom.subscribe((state: any) => {\r\n internalActiveOrg = state?.data;\r\n });\r\n }\r\n\r\n return {\r\n rawClient,\r\n auth: {\r\n signInWithEmail: rawClient.signIn.email,\r\n signInWithUsername: rawClient.signIn.username,\r\n signInWithPhone: rawClient.signIn.phoneNumber,\r\n sendPhoneOtp: rawClient.phoneNumber.sendOtp,\r\n verifyPhoneOtp: rawClient.phoneNumber.verify,\r\n signInWithGoogle: (options?: Parameters<typeof rawClient.signIn.social>[0]) => rawClient.signIn.social({ provider: \"google\", ...options }),\r\n signInWithGithub: (options?: Parameters<typeof rawClient.signIn.social>[0]) => rawClient.signIn.social({ provider: \"github\", ...options }),\r\n signInWithPasskey: rawClient.signIn.passkey,\r\n signInAnonymously: rawClient.signIn.anonymous,\r\n sendMagicLink: async (options: { email: string; callbackURL?: string }) => {\r\n return await rawClient.signIn.magicLink({\r\n email: options.email,\r\n callbackURL: options.callbackURL || window.location.href,\r\n });\r\n },\r\n signInWithMagicLink: rawClient.signIn.magicLink,\r\n sendOtp: async (options: { email: string }) => {\r\n return await rawClient.emailOtp.sendVerificationOtp({\r\n email: options.email,\r\n type: \"sign-in\"\r\n });\r\n },\r\n signInWithOtp: rawClient.signIn.emailOtp,\r\n signInWithSiwe: (rawClient as any).siwe?.signIn,\r\n signUpWithEmail: rawClient.signUp.email,\r\n signOut: rawClient.signOut,\r\n verifyEmail: rawClient.verifyEmail,\r\n forgetPassword: rawClient.forgetPassword,\r\n resetPassword: rawClient.resetPassword,\r\n },\r\n mfa: {\r\n enableTwoFactor: rawClient.twoFactor.enable,\r\n disableTwoFactor: rawClient.twoFactor.disable,\r\n sendOtp: rawClient.twoFactor.sendOtp,\r\n verifyOtp: rawClient.twoFactor.verifyTotp,\r\n },\r\n user: {\r\n getSession: async () => {\r\n const res = await (rawClient.getSession() as any);\r\n internalSession = res?.data;\r\n return res;\r\n },\r\n listSessions: rawClient.listSessions,\r\n updateProfile: rawClient.updateUser,\r\n changeEmail: rawClient.changeEmail,\r\n changePassword: rawClient.changePassword,\r\n deleteAccount: rawClient.deleteUser,\r\n },\r\n organization: {\r\n create: rawClient.organization.create,\r\n update: rawClient.organization.update,\r\n setActive: rawClient.organization.setActive,\r\n list: async () => {\r\n const res = await (rawClient.organization.list() as any);\r\n internalOrgs = res?.data;\r\n return res;\r\n },\r\n inviteMember: rawClient.organization.inviteMember,\r\n acceptInvitation: rawClient.organization.acceptInvitation,\r\n rejectInvitation: rawClient.organization.rejectInvitation,\r\n removeMember: rawClient.organization.removeMember,\r\n },\r\n admin: {\r\n listUsers: rawClient.admin.listUsers,\r\n impersonateUser: rawClient.admin.impersonateUser,\r\n banUser: rawClient.admin.banUser,\r\n },\r\n sso: {\r\n signIn: rawClient.signIn.sso,\r\n register: rawClient.sso.register,\r\n },\r\n apiKey: {\r\n create: rawClient.apiKey.create,\r\n list: rawClient.apiKey.list,\r\n delete: rawClient.apiKey.delete\r\n },\r\n /**\r\n * The Advanced User Context. Provides stateful access to user attributes,\r\n * security status, and organizational roles without constant API calls.\r\n */\r\n get currentUser() {\r\n return {\r\n get profile() {\r\n return internalSession?.user;\r\n },\r\n get security() {\r\n return {\r\n mfaEnabled: internalSession?.user?.twoFactorEnabled || false,\r\n lastLogin: internalSession?.user?.updatedAt,\r\n isAnonymous: internalSession?.user?.isAnonymous || false,\r\n };\r\n },\r\n get organizations() {\r\n return {\r\n active: internalActiveOrg,\r\n all: internalOrgs,\r\n };\r\n },\r\n get session() {\r\n return {\r\n id: internalSession?.session?.id,\r\n expiresAt: internalSession?.session?.expiresAt,\r\n userAgent: internalSession?.session?.userAgent,\r\n };\r\n },\r\n };\r\n },\r\n /**\r\n * Listens for authentication state changes (sign-in, sign-out, session refresh).\r\n */\r\n onAuthStateChanged(callback: (user: any | null) => void) {\r\n const atom = (rawClient as any).useSession;\r\n if (atom) {\r\n return atom.subscribe((state: any) => {\r\n callback(state?.data?.user || null);\r\n });\r\n }\r\n return () => { };\r\n },\r\n /**\r\n * Forces a synchronization of the local auth state with the server.\r\n */\r\n async syncState() {\r\n const session = await (rawClient.getSession() as any);\r\n internalSession = session?.data;\r\n if (rawClient.organization) {\r\n const [orgs, activeOrg] = await Promise.all([\r\n (rawClient.organization as any).list(),\r\n (rawClient.organization as any).getActiveOrganization()\r\n ]);\r\n internalOrgs = (orgs as any)?.data;\r\n internalActiveOrg = (activeOrg as any)?.data;\r\n }\r\n return session;\r\n }\r\n };\r\n};\r\n\r\nexport type TelestackAuthInstance = ReturnType<typeof createTelestackAuth>;\r\n\r\n/**\r\n * The core singleton SDK for TelestackAuth.\r\n * Designed entirely for extreme developer experience and Firebase-style fluency.\r\n */\r\nexport class TelestackAuth {\r\n private static instance: TelestackAuthInstance | null = null;\r\n private static config: TelestackConfig | null = null;\r\n\r\n /**\r\n * Initializes the TelestackAuth SDK. Must be called once at app startup.\r\n */\r\n public static initialize(config: TelestackConfig): TelestackAuthInstance {\r\n this.config = config;\r\n this.instance = createTelestackAuth(config);\r\n return this.instance;\r\n }\r\n\r\n /**\r\n * Updates the SDK configuration (e.g., adding a token).\r\n */\r\n public static updateConfig(config: Partial<TelestackConfig>): TelestackAuthInstance {\r\n if (!this.config) throw new Error(\"Initialize SDK first\");\r\n this.config = { ...this.config, ...config };\r\n this.instance = createTelestackAuth(this.config);\r\n return this.instance;\r\n }\r\n\r\n /**\r\n * Sets the Bearer token for all subsequent requests.\r\n */\r\n public static setToken(token: string): TelestackAuthInstance {\r\n if (!this.config) throw new Error(\"Initialize SDK first\");\r\n return this.updateConfig({\r\n fetchOptions: {\r\n ...this.config.fetchOptions,\r\n headers: {\r\n ...this.config.fetchOptions?.headers,\r\n \"Authorization\": `Bearer ${token}`\r\n }\r\n }\r\n });\r\n }\r\n\r\n /**\r\n * Retrieves the initialized instance of the SDK.\r\n */\r\n public static getInstance(): TelestackAuthInstance {\r\n if (!this.instance) {\r\n throw new Error(\"TelestackAuth has not been initialized. Call initialize(config) first.\");\r\n }\r\n return this.instance;\r\n }\r\n}\r\n\r\n"],"mappings":"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","names":[]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@telestack/auth-sdk",
3
- "version": "1.2.0",
3
+ "version": "1.2.1",
4
4
  "description": "Firebase-style fluent SDK for TelestackAuth",
5
5
  "main": "dist/index.js",
6
6
  "module": "dist/index.mjs",