@telestack/auth-sdk 1.1.0 → 1.1.2
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 +3821 -744
- package/dist/index.d.ts +3821 -744
- package/dist/index.js +2 -2
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +1 -3
- package/dist/index.mjs.map +1 -1
- package/package.json +9 -7
package/dist/index.js
CHANGED
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
import { createRequire } from "module"; const require = createRequire(import.meta.url);
|
|
2
1
|
"use strict";
|
|
3
2
|
var __defProp = Object.defineProperty;
|
|
4
3
|
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
@@ -29,6 +28,7 @@ var import_client = require("better-auth/client");
|
|
|
29
28
|
var import_plugins = require("better-auth/client/plugins");
|
|
30
29
|
var import_client2 = require("@better-auth/passkey/client");
|
|
31
30
|
var import_client3 = require("@better-auth/sso/client");
|
|
31
|
+
var import_client4 = require("@better-auth/api-key/client");
|
|
32
32
|
var createTelestackAuth = (config) => {
|
|
33
33
|
let internalSession = null;
|
|
34
34
|
let internalActiveOrg = null;
|
|
@@ -52,7 +52,7 @@ var createTelestackAuth = (config) => {
|
|
|
52
52
|
(0, import_plugins.multiSessionClient)(),
|
|
53
53
|
(0, import_plugins.jwtClient)(),
|
|
54
54
|
(0, import_plugins.adminClient)(),
|
|
55
|
-
(0,
|
|
55
|
+
(0, import_client4.apiKeyClient)(),
|
|
56
56
|
(0, import_plugins.phoneNumberClient)(),
|
|
57
57
|
(0, import_plugins.emailOTPClient)(),
|
|
58
58
|
(0, import_plugins.anonymousClient)(),
|
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 apiKeyClient,\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\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 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 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"]}
|
package/dist/index.mjs
CHANGED
|
@@ -1,5 +1,3 @@
|
|
|
1
|
-
import { createRequire } from "module"; const require = createRequire(import.meta.url);
|
|
2
|
-
|
|
3
1
|
// src/index.ts
|
|
4
2
|
import { createAuthClient } from "better-auth/client";
|
|
5
3
|
import {
|
|
@@ -10,7 +8,6 @@ import {
|
|
|
10
8
|
multiSessionClient,
|
|
11
9
|
jwtClient,
|
|
12
10
|
adminClient,
|
|
13
|
-
apiKeyClient,
|
|
14
11
|
phoneNumberClient,
|
|
15
12
|
emailOTPClient,
|
|
16
13
|
oneTapClient,
|
|
@@ -21,6 +18,7 @@ import {
|
|
|
21
18
|
} from "better-auth/client/plugins";
|
|
22
19
|
import { passkeyClient } from "@better-auth/passkey/client";
|
|
23
20
|
import { ssoClient } from "@better-auth/sso/client";
|
|
21
|
+
import { apiKeyClient } from "@better-auth/api-key/client";
|
|
24
22
|
var createTelestackAuth = (config) => {
|
|
25
23
|
let internalSession = null;
|
|
26
24
|
let internalActiveOrg = null;
|
package/dist/index.mjs.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 apiKeyClient,\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\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 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 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.1.
|
|
3
|
+
"version": "1.1.2",
|
|
4
4
|
"description": "Firebase-style fluent SDK for TelestackAuth",
|
|
5
5
|
"main": "dist/index.js",
|
|
6
6
|
"module": "dist/index.mjs",
|
|
@@ -14,16 +14,18 @@
|
|
|
14
14
|
"author": "",
|
|
15
15
|
"license": "ISC",
|
|
16
16
|
"peerDependencies": {
|
|
17
|
-
"better-auth": "^1.
|
|
18
|
-
"@better-auth/passkey": "^1.
|
|
19
|
-
"@better-auth/sso": "^1.
|
|
17
|
+
"better-auth": "^1.5.0",
|
|
18
|
+
"@better-auth/passkey": "^1.5.0",
|
|
19
|
+
"@better-auth/sso": "^1.5.0",
|
|
20
|
+
"@better-auth/api-key": "^1.5.0"
|
|
20
21
|
},
|
|
21
22
|
"devDependencies": {
|
|
22
23
|
"tsup": "^8.5.1",
|
|
23
24
|
"typescript": "^5.9.3",
|
|
24
|
-
"better-auth": "^1.
|
|
25
|
-
"@better-auth/passkey": "^1.
|
|
26
|
-
"@better-auth/sso": "^1.
|
|
25
|
+
"better-auth": "^1.5.0",
|
|
26
|
+
"@better-auth/passkey": "^1.5.0",
|
|
27
|
+
"@better-auth/sso": "^1.5.0",
|
|
28
|
+
"@better-auth/api-key": "^1.5.0"
|
|
27
29
|
},
|
|
28
30
|
"files": [
|
|
29
31
|
"dist",
|