@telestack/auth-sdk 1.0.2 → 1.1.0

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
@@ -88,6 +88,7 @@ interface SAMLConfig {
88
88
  interface TelestackConfig {
89
89
  url: string;
90
90
  tenantId: string;
91
+ apiKey?: string;
91
92
  googleClientId?: string;
92
93
  fetchOptions?: any;
93
94
  }
package/dist/index.d.ts CHANGED
@@ -88,6 +88,7 @@ interface SAMLConfig {
88
88
  interface TelestackConfig {
89
89
  url: string;
90
90
  tenantId: string;
91
+ apiKey?: string;
91
92
  googleClientId?: string;
92
93
  fetchOptions?: any;
93
94
  }
package/dist/index.js CHANGED
@@ -1,2 +1,266 @@
1
- "use strict";var c=Object.defineProperty;var y=Object.getOwnPropertyDescriptor;var I=Object.getOwnPropertyNames;var w=Object.prototype.hasOwnProperty;var C=(a,n)=>{for(var s in n)c(a,s,{get:n[s],enumerable:!0})},b=(a,n,s,r)=>{if(n&&typeof n=="object"||typeof n=="function")for(let e of I(n))!w.call(a,e)&&e!==s&&c(a,e,{get:()=>n[e],enumerable:!(r=y(n,e))||r.enumerable});return a};var A=a=>b(c({},"__esModule",{value:!0}),a);var v={};C(v,{TelestackAuth:()=>u,createTelestackAuth:()=>g});module.exports=A(v);var m=require("better-auth/client"),t=require("better-auth/client/plugins"),d=require("@better-auth/passkey/client"),f=require("@better-auth/sso/client"),g=a=>{let n=null,s=null,r=null,e=(0,m.createAuthClient)({baseURL:`${a.url}/api/v1/${a.tenantId}/auth`,fetchOptions:a.fetchOptions,plugins:[(0,t.magicLinkClient)(),(0,d.passkeyClient)(),(0,t.organizationClient)(),(0,f.ssoClient)(),(0,t.twoFactorClient)(),(0,t.usernameClient)(),(0,t.multiSessionClient)(),(0,t.jwtClient)(),(0,t.adminClient)(),(0,t.apiKeyClient)(),(0,t.phoneNumberClient)(),(0,t.emailOTPClient)(),(0,t.anonymousClient)(),(0,t.genericOAuthClient)(),(0,t.oneTimeTokenClient)(),(0,t.deviceAuthorizationClient)(),...a?.googleClientId?[(0,t.oneTapClient)({clientId:a.googleClientId})]:[]]}),p=e.useSession;p&&p.subscribe(i=>{n=i?.data});let h=e.organization?.useActiveOrganization;return h&&h.subscribe(i=>{s=i?.data}),{rawClient:e,auth:{signInWithEmail:e.signIn.email,signInWithUsername:e.signIn.username,signInWithPhone:e.signIn.phoneNumber,signInWithGoogle:i=>e.signIn.social({provider:"google",...i}),signInWithGithub:i=>e.signIn.social({provider:"github",...i}),signInWithPasskey:e.signIn.passkey,signInAnonymously:e.signIn.anonymous,sendMagicLink:async i=>await e.signIn.magicLink({email:i.email,callbackURL:i.callbackURL||window.location.href}),signInWithMagicLink:e.signIn.magicLink,sendOtp:async i=>await e.emailOtp.sendVerificationOtp({email:i.email,type:"sign-in"}),signInWithOtp:e.signIn.emailOtp,signInWithSiwe:e.siwe?.signIn,signUpWithEmail:e.signUp.email,signOut:e.signOut,verifyEmail:e.verifyEmail,forgetPassword:e.forgetPassword,resetPassword:e.resetPassword},mfa:{enableTwoFactor:e.twoFactor.enable,disableTwoFactor:e.twoFactor.disable,sendOtp:e.twoFactor.sendOtp,verifyOtp:e.twoFactor.verifyTotp},user:{getSession:async()=>{let i=await e.getSession();return n=i?.data,i},listSessions:e.listSessions,updateProfile:e.updateUser,changeEmail:e.changeEmail,changePassword:e.changePassword,deleteAccount:e.deleteUser},organization:{create:e.organization.create,update:e.organization.update,setActive:e.organization.setActive,list:async()=>{let i=await e.organization.list();return r=i?.data,i},inviteMember:e.organization.inviteMember,acceptInvitation:e.organization.acceptInvitation,rejectInvitation:e.organization.rejectInvitation,removeMember:e.organization.removeMember},admin:{listUsers:e.admin.listUsers,impersonateUser:e.admin.impersonateUser,banUser:e.admin.banUser},sso:{signIn:e.signIn.sso,register:e.sso.register},apiKey:{create:e.apiKey.create,list:e.apiKey.list,delete:e.apiKey.delete},get currentUser(){return{get profile(){return n?.user},get security(){return{mfaEnabled:n?.user?.twoFactorEnabled||!1,lastLogin:n?.user?.updatedAt,isAnonymous:n?.user?.isAnonymous||!1}},get organizations(){return{active:s,all:r}},get session(){return{id:n?.session?.id,expiresAt:n?.session?.expiresAt,userAgent:n?.session?.userAgent}}}},onAuthStateChanged(i){let o=e.useSession;return o?o.subscribe(l=>{i(l?.data?.user||null)}):()=>{}},async syncState(){let i=await e.getSession();if(n=i?.data,e.organization){let[o,l]=await Promise.all([e.organization.list(),e.organization.getActiveOrganization()]);r=o?.data,s=l?.data}return i}}},u=class{static instance=null;static config=null;static initialize(n){return this.config=n,this.instance=g(n),this.instance}static updateConfig(n){if(!this.config)throw new Error("Initialize SDK first");return this.config={...this.config,...n},this.instance=g(this.config),this.instance}static setToken(n){if(!this.config)throw new Error("Initialize SDK first");return this.updateConfig({fetchOptions:{...this.config.fetchOptions,headers:{...this.config.fetchOptions?.headers,Authorization:`Bearer ${n}`}}})}static getInstance(){if(!this.instance)throw new Error("TelestackAuth has not been initialized. Call initialize(config) first.");return this.instance}};0&&(module.exports={TelestackAuth,createTelestackAuth});
1
+ import { createRequire } from "module"; const require = createRequire(import.meta.url);
2
+ "use strict";
3
+ var __defProp = Object.defineProperty;
4
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
5
+ var __getOwnPropNames = Object.getOwnPropertyNames;
6
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
7
+ var __export = (target, all) => {
8
+ for (var name in all)
9
+ __defProp(target, name, { get: all[name], enumerable: true });
10
+ };
11
+ var __copyProps = (to, from, except, desc) => {
12
+ if (from && typeof from === "object" || typeof from === "function") {
13
+ for (let key of __getOwnPropNames(from))
14
+ if (!__hasOwnProp.call(to, key) && key !== except)
15
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
16
+ }
17
+ return to;
18
+ };
19
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
20
+
21
+ // src/index.ts
22
+ var index_exports = {};
23
+ __export(index_exports, {
24
+ TelestackAuth: () => TelestackAuth,
25
+ createTelestackAuth: () => createTelestackAuth
26
+ });
27
+ module.exports = __toCommonJS(index_exports);
28
+ var import_client = require("better-auth/client");
29
+ var import_plugins = require("better-auth/client/plugins");
30
+ var import_client2 = require("@better-auth/passkey/client");
31
+ var import_client3 = require("@better-auth/sso/client");
32
+ var createTelestackAuth = (config) => {
33
+ let internalSession = null;
34
+ let internalActiveOrg = null;
35
+ let internalOrgs = null;
36
+ const rawClient = (0, import_client.createAuthClient)({
37
+ baseURL: `${config.url}/api/v1/${config.tenantId}/auth`,
38
+ fetchOptions: {
39
+ ...config.fetchOptions,
40
+ headers: {
41
+ ...config.fetchOptions?.headers,
42
+ ...config.apiKey ? { "X-Telestack-API-Key": config.apiKey } : {}
43
+ }
44
+ },
45
+ plugins: [
46
+ (0, import_plugins.magicLinkClient)(),
47
+ (0, import_client2.passkeyClient)(),
48
+ (0, import_plugins.organizationClient)(),
49
+ (0, import_client3.ssoClient)(),
50
+ (0, import_plugins.twoFactorClient)(),
51
+ (0, import_plugins.usernameClient)(),
52
+ (0, import_plugins.multiSessionClient)(),
53
+ (0, import_plugins.jwtClient)(),
54
+ (0, import_plugins.adminClient)(),
55
+ (0, import_plugins.apiKeyClient)(),
56
+ (0, import_plugins.phoneNumberClient)(),
57
+ (0, import_plugins.emailOTPClient)(),
58
+ (0, import_plugins.anonymousClient)(),
59
+ (0, import_plugins.genericOAuthClient)(),
60
+ (0, import_plugins.oneTimeTokenClient)(),
61
+ (0, import_plugins.deviceAuthorizationClient)(),
62
+ ...config?.googleClientId ? [(0, import_plugins.oneTapClient)({ clientId: config.googleClientId })] : []
63
+ ]
64
+ });
65
+ const sessionAtom = rawClient.useSession;
66
+ if (sessionAtom) {
67
+ sessionAtom.subscribe((state) => {
68
+ internalSession = state?.data;
69
+ });
70
+ }
71
+ const activeOrgAtom = rawClient.organization?.useActiveOrganization;
72
+ if (activeOrgAtom) {
73
+ activeOrgAtom.subscribe((state) => {
74
+ internalActiveOrg = state?.data;
75
+ });
76
+ }
77
+ return {
78
+ rawClient,
79
+ auth: {
80
+ signInWithEmail: rawClient.signIn.email,
81
+ signInWithUsername: rawClient.signIn.username,
82
+ signInWithPhone: rawClient.signIn.phoneNumber,
83
+ signInWithGoogle: (options) => rawClient.signIn.social({ provider: "google", ...options }),
84
+ signInWithGithub: (options) => rawClient.signIn.social({ provider: "github", ...options }),
85
+ signInWithPasskey: rawClient.signIn.passkey,
86
+ signInAnonymously: rawClient.signIn.anonymous,
87
+ sendMagicLink: async (options) => {
88
+ return await rawClient.signIn.magicLink({
89
+ email: options.email,
90
+ callbackURL: options.callbackURL || window.location.href
91
+ });
92
+ },
93
+ signInWithMagicLink: rawClient.signIn.magicLink,
94
+ sendOtp: async (options) => {
95
+ return await rawClient.emailOtp.sendVerificationOtp({
96
+ email: options.email,
97
+ type: "sign-in"
98
+ });
99
+ },
100
+ signInWithOtp: rawClient.signIn.emailOtp,
101
+ signInWithSiwe: rawClient.siwe?.signIn,
102
+ signUpWithEmail: rawClient.signUp.email,
103
+ signOut: rawClient.signOut,
104
+ verifyEmail: rawClient.verifyEmail,
105
+ forgetPassword: rawClient.forgetPassword,
106
+ resetPassword: rawClient.resetPassword
107
+ },
108
+ mfa: {
109
+ enableTwoFactor: rawClient.twoFactor.enable,
110
+ disableTwoFactor: rawClient.twoFactor.disable,
111
+ sendOtp: rawClient.twoFactor.sendOtp,
112
+ verifyOtp: rawClient.twoFactor.verifyTotp
113
+ },
114
+ user: {
115
+ getSession: async () => {
116
+ const res = await rawClient.getSession();
117
+ internalSession = res?.data;
118
+ return res;
119
+ },
120
+ listSessions: rawClient.listSessions,
121
+ updateProfile: rawClient.updateUser,
122
+ changeEmail: rawClient.changeEmail,
123
+ changePassword: rawClient.changePassword,
124
+ deleteAccount: rawClient.deleteUser
125
+ },
126
+ organization: {
127
+ create: rawClient.organization.create,
128
+ update: rawClient.organization.update,
129
+ setActive: rawClient.organization.setActive,
130
+ list: async () => {
131
+ const res = await rawClient.organization.list();
132
+ internalOrgs = res?.data;
133
+ return res;
134
+ },
135
+ inviteMember: rawClient.organization.inviteMember,
136
+ acceptInvitation: rawClient.organization.acceptInvitation,
137
+ rejectInvitation: rawClient.organization.rejectInvitation,
138
+ removeMember: rawClient.organization.removeMember
139
+ },
140
+ admin: {
141
+ listUsers: rawClient.admin.listUsers,
142
+ impersonateUser: rawClient.admin.impersonateUser,
143
+ banUser: rawClient.admin.banUser
144
+ },
145
+ sso: {
146
+ signIn: rawClient.signIn.sso,
147
+ register: rawClient.sso.register
148
+ },
149
+ apiKey: {
150
+ create: rawClient.apiKey.create,
151
+ list: rawClient.apiKey.list,
152
+ delete: rawClient.apiKey.delete
153
+ },
154
+ /**
155
+ * The Advanced User Context. Provides stateful access to user attributes,
156
+ * security status, and organizational roles without constant API calls.
157
+ */
158
+ get currentUser() {
159
+ return {
160
+ get profile() {
161
+ return internalSession?.user;
162
+ },
163
+ get security() {
164
+ return {
165
+ mfaEnabled: internalSession?.user?.twoFactorEnabled || false,
166
+ lastLogin: internalSession?.user?.updatedAt,
167
+ isAnonymous: internalSession?.user?.isAnonymous || false
168
+ };
169
+ },
170
+ get organizations() {
171
+ return {
172
+ active: internalActiveOrg,
173
+ all: internalOrgs
174
+ };
175
+ },
176
+ get session() {
177
+ return {
178
+ id: internalSession?.session?.id,
179
+ expiresAt: internalSession?.session?.expiresAt,
180
+ userAgent: internalSession?.session?.userAgent
181
+ };
182
+ }
183
+ };
184
+ },
185
+ /**
186
+ * Listens for authentication state changes (sign-in, sign-out, session refresh).
187
+ */
188
+ onAuthStateChanged(callback) {
189
+ const atom = rawClient.useSession;
190
+ if (atom) {
191
+ return atom.subscribe((state) => {
192
+ callback(state?.data?.user || null);
193
+ });
194
+ }
195
+ return () => {
196
+ };
197
+ },
198
+ /**
199
+ * Forces a synchronization of the local auth state with the server.
200
+ */
201
+ async syncState() {
202
+ const session = await rawClient.getSession();
203
+ internalSession = session?.data;
204
+ if (rawClient.organization) {
205
+ const [orgs, activeOrg] = await Promise.all([
206
+ rawClient.organization.list(),
207
+ rawClient.organization.getActiveOrganization()
208
+ ]);
209
+ internalOrgs = orgs?.data;
210
+ internalActiveOrg = activeOrg?.data;
211
+ }
212
+ return session;
213
+ }
214
+ };
215
+ };
216
+ var TelestackAuth = class {
217
+ static instance = null;
218
+ static config = null;
219
+ /**
220
+ * Initializes the TelestackAuth SDK. Must be called once at app startup.
221
+ */
222
+ static initialize(config) {
223
+ this.config = config;
224
+ this.instance = createTelestackAuth(config);
225
+ return this.instance;
226
+ }
227
+ /**
228
+ * Updates the SDK configuration (e.g., adding a token).
229
+ */
230
+ static updateConfig(config) {
231
+ if (!this.config) throw new Error("Initialize SDK first");
232
+ this.config = { ...this.config, ...config };
233
+ this.instance = createTelestackAuth(this.config);
234
+ return this.instance;
235
+ }
236
+ /**
237
+ * Sets the Bearer token for all subsequent requests.
238
+ */
239
+ static setToken(token) {
240
+ if (!this.config) throw new Error("Initialize SDK first");
241
+ return this.updateConfig({
242
+ fetchOptions: {
243
+ ...this.config.fetchOptions,
244
+ headers: {
245
+ ...this.config.fetchOptions?.headers,
246
+ "Authorization": `Bearer ${token}`
247
+ }
248
+ }
249
+ });
250
+ }
251
+ /**
252
+ * Retrieves the initialized instance of the SDK.
253
+ */
254
+ static getInstance() {
255
+ if (!this.instance) {
256
+ throw new Error("TelestackAuth has not been initialized. Call initialize(config) first.");
257
+ }
258
+ return this.instance;
259
+ }
260
+ };
261
+ // Annotate the CommonJS export names for ESM import in node:
262
+ 0 && (module.exports = {
263
+ TelestackAuth,
264
+ createTelestackAuth
265
+ });
2
266
  //# sourceMappingURL=index.js.map
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 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: config.fetchOptions,\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":["index_exports","__export","TelestackAuth","createTelestackAuth","__toCommonJS","import_client","import_plugins","config","internalSession","internalActiveOrg","internalOrgs","rawClient","sessionAtom","state","activeOrgAtom","options","res","callback","atom","session","orgs","activeOrg","token"]}
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"]}
package/dist/index.mjs CHANGED
@@ -1,2 +1,257 @@
1
- import{createAuthClient as p}from"better-auth/client";import{magicLinkClient as h,organizationClient as m,twoFactorClient as d,usernameClient as f,multiSessionClient as y,jwtClient as I,adminClient as w,apiKeyClient as C,phoneNumberClient as b,emailOTPClient as A,oneTapClient as v,genericOAuthClient as k,oneTimeTokenClient as z,deviceAuthorizationClient as O,anonymousClient as T}from"better-auth/client/plugins";import{passkeyClient as U}from"@better-auth/passkey/client";import{ssoClient as P}from"@better-auth/sso/client";var g=i=>{let n=null,s=null,r=null,e=p({baseURL:`${i.url}/api/v1/${i.tenantId}/auth`,fetchOptions:i.fetchOptions,plugins:[h(),U(),m(),P(),d(),f(),y(),I(),w(),C(),b(),A(),T(),k(),z(),O(),...i?.googleClientId?[v({clientId:i.googleClientId})]:[]]}),l=e.useSession;l&&l.subscribe(t=>{n=t?.data});let c=e.organization?.useActiveOrganization;return c&&c.subscribe(t=>{s=t?.data}),{rawClient:e,auth:{signInWithEmail:e.signIn.email,signInWithUsername:e.signIn.username,signInWithPhone:e.signIn.phoneNumber,signInWithGoogle:t=>e.signIn.social({provider:"google",...t}),signInWithGithub:t=>e.signIn.social({provider:"github",...t}),signInWithPasskey:e.signIn.passkey,signInAnonymously:e.signIn.anonymous,sendMagicLink:async t=>await e.signIn.magicLink({email:t.email,callbackURL:t.callbackURL||window.location.href}),signInWithMagicLink:e.signIn.magicLink,sendOtp:async t=>await e.emailOtp.sendVerificationOtp({email:t.email,type:"sign-in"}),signInWithOtp:e.signIn.emailOtp,signInWithSiwe:e.siwe?.signIn,signUpWithEmail:e.signUp.email,signOut:e.signOut,verifyEmail:e.verifyEmail,forgetPassword:e.forgetPassword,resetPassword:e.resetPassword},mfa:{enableTwoFactor:e.twoFactor.enable,disableTwoFactor:e.twoFactor.disable,sendOtp:e.twoFactor.sendOtp,verifyOtp:e.twoFactor.verifyTotp},user:{getSession:async()=>{let t=await e.getSession();return n=t?.data,t},listSessions:e.listSessions,updateProfile:e.updateUser,changeEmail:e.changeEmail,changePassword:e.changePassword,deleteAccount:e.deleteUser},organization:{create:e.organization.create,update:e.organization.update,setActive:e.organization.setActive,list:async()=>{let t=await e.organization.list();return r=t?.data,t},inviteMember:e.organization.inviteMember,acceptInvitation:e.organization.acceptInvitation,rejectInvitation:e.organization.rejectInvitation,removeMember:e.organization.removeMember},admin:{listUsers:e.admin.listUsers,impersonateUser:e.admin.impersonateUser,banUser:e.admin.banUser},sso:{signIn:e.signIn.sso,register:e.sso.register},apiKey:{create:e.apiKey.create,list:e.apiKey.list,delete:e.apiKey.delete},get currentUser(){return{get profile(){return n?.user},get security(){return{mfaEnabled:n?.user?.twoFactorEnabled||!1,lastLogin:n?.user?.updatedAt,isAnonymous:n?.user?.isAnonymous||!1}},get organizations(){return{active:s,all:r}},get session(){return{id:n?.session?.id,expiresAt:n?.session?.expiresAt,userAgent:n?.session?.userAgent}}}},onAuthStateChanged(t){let a=e.useSession;return a?a.subscribe(o=>{t(o?.data?.user||null)}):()=>{}},async syncState(){let t=await e.getSession();if(n=t?.data,e.organization){let[a,o]=await Promise.all([e.organization.list(),e.organization.getActiveOrganization()]);r=a?.data,s=o?.data}return t}}},u=class{static instance=null;static config=null;static initialize(n){return this.config=n,this.instance=g(n),this.instance}static updateConfig(n){if(!this.config)throw new Error("Initialize SDK first");return this.config={...this.config,...n},this.instance=g(this.config),this.instance}static setToken(n){if(!this.config)throw new Error("Initialize SDK first");return this.updateConfig({fetchOptions:{...this.config.fetchOptions,headers:{...this.config.fetchOptions?.headers,Authorization:`Bearer ${n}`}}})}static getInstance(){if(!this.instance)throw new Error("TelestackAuth has not been initialized. Call initialize(config) first.");return this.instance}};export{u as TelestackAuth,g as createTelestackAuth};
1
+ import { createRequire } from "module"; const require = createRequire(import.meta.url);
2
+
3
+ // src/index.ts
4
+ import { createAuthClient } from "better-auth/client";
5
+ import {
6
+ magicLinkClient,
7
+ organizationClient,
8
+ twoFactorClient,
9
+ usernameClient,
10
+ multiSessionClient,
11
+ jwtClient,
12
+ adminClient,
13
+ apiKeyClient,
14
+ phoneNumberClient,
15
+ emailOTPClient,
16
+ oneTapClient,
17
+ genericOAuthClient,
18
+ oneTimeTokenClient,
19
+ deviceAuthorizationClient,
20
+ anonymousClient
21
+ } from "better-auth/client/plugins";
22
+ import { passkeyClient } from "@better-auth/passkey/client";
23
+ import { ssoClient } from "@better-auth/sso/client";
24
+ var createTelestackAuth = (config) => {
25
+ let internalSession = null;
26
+ let internalActiveOrg = null;
27
+ let internalOrgs = null;
28
+ const rawClient = createAuthClient({
29
+ baseURL: `${config.url}/api/v1/${config.tenantId}/auth`,
30
+ fetchOptions: {
31
+ ...config.fetchOptions,
32
+ headers: {
33
+ ...config.fetchOptions?.headers,
34
+ ...config.apiKey ? { "X-Telestack-API-Key": config.apiKey } : {}
35
+ }
36
+ },
37
+ plugins: [
38
+ magicLinkClient(),
39
+ passkeyClient(),
40
+ organizationClient(),
41
+ ssoClient(),
42
+ twoFactorClient(),
43
+ usernameClient(),
44
+ multiSessionClient(),
45
+ jwtClient(),
46
+ adminClient(),
47
+ apiKeyClient(),
48
+ phoneNumberClient(),
49
+ emailOTPClient(),
50
+ anonymousClient(),
51
+ genericOAuthClient(),
52
+ oneTimeTokenClient(),
53
+ deviceAuthorizationClient(),
54
+ ...config?.googleClientId ? [oneTapClient({ clientId: config.googleClientId })] : []
55
+ ]
56
+ });
57
+ const sessionAtom = rawClient.useSession;
58
+ if (sessionAtom) {
59
+ sessionAtom.subscribe((state) => {
60
+ internalSession = state?.data;
61
+ });
62
+ }
63
+ const activeOrgAtom = rawClient.organization?.useActiveOrganization;
64
+ if (activeOrgAtom) {
65
+ activeOrgAtom.subscribe((state) => {
66
+ internalActiveOrg = state?.data;
67
+ });
68
+ }
69
+ return {
70
+ rawClient,
71
+ auth: {
72
+ signInWithEmail: rawClient.signIn.email,
73
+ signInWithUsername: rawClient.signIn.username,
74
+ signInWithPhone: rawClient.signIn.phoneNumber,
75
+ signInWithGoogle: (options) => rawClient.signIn.social({ provider: "google", ...options }),
76
+ signInWithGithub: (options) => rawClient.signIn.social({ provider: "github", ...options }),
77
+ signInWithPasskey: rawClient.signIn.passkey,
78
+ signInAnonymously: rawClient.signIn.anonymous,
79
+ sendMagicLink: async (options) => {
80
+ return await rawClient.signIn.magicLink({
81
+ email: options.email,
82
+ callbackURL: options.callbackURL || window.location.href
83
+ });
84
+ },
85
+ signInWithMagicLink: rawClient.signIn.magicLink,
86
+ sendOtp: async (options) => {
87
+ return await rawClient.emailOtp.sendVerificationOtp({
88
+ email: options.email,
89
+ type: "sign-in"
90
+ });
91
+ },
92
+ signInWithOtp: rawClient.signIn.emailOtp,
93
+ signInWithSiwe: rawClient.siwe?.signIn,
94
+ signUpWithEmail: rawClient.signUp.email,
95
+ signOut: rawClient.signOut,
96
+ verifyEmail: rawClient.verifyEmail,
97
+ forgetPassword: rawClient.forgetPassword,
98
+ resetPassword: rawClient.resetPassword
99
+ },
100
+ mfa: {
101
+ enableTwoFactor: rawClient.twoFactor.enable,
102
+ disableTwoFactor: rawClient.twoFactor.disable,
103
+ sendOtp: rawClient.twoFactor.sendOtp,
104
+ verifyOtp: rawClient.twoFactor.verifyTotp
105
+ },
106
+ user: {
107
+ getSession: async () => {
108
+ const res = await rawClient.getSession();
109
+ internalSession = res?.data;
110
+ return res;
111
+ },
112
+ listSessions: rawClient.listSessions,
113
+ updateProfile: rawClient.updateUser,
114
+ changeEmail: rawClient.changeEmail,
115
+ changePassword: rawClient.changePassword,
116
+ deleteAccount: rawClient.deleteUser
117
+ },
118
+ organization: {
119
+ create: rawClient.organization.create,
120
+ update: rawClient.organization.update,
121
+ setActive: rawClient.organization.setActive,
122
+ list: async () => {
123
+ const res = await rawClient.organization.list();
124
+ internalOrgs = res?.data;
125
+ return res;
126
+ },
127
+ inviteMember: rawClient.organization.inviteMember,
128
+ acceptInvitation: rawClient.organization.acceptInvitation,
129
+ rejectInvitation: rawClient.organization.rejectInvitation,
130
+ removeMember: rawClient.organization.removeMember
131
+ },
132
+ admin: {
133
+ listUsers: rawClient.admin.listUsers,
134
+ impersonateUser: rawClient.admin.impersonateUser,
135
+ banUser: rawClient.admin.banUser
136
+ },
137
+ sso: {
138
+ signIn: rawClient.signIn.sso,
139
+ register: rawClient.sso.register
140
+ },
141
+ apiKey: {
142
+ create: rawClient.apiKey.create,
143
+ list: rawClient.apiKey.list,
144
+ delete: rawClient.apiKey.delete
145
+ },
146
+ /**
147
+ * The Advanced User Context. Provides stateful access to user attributes,
148
+ * security status, and organizational roles without constant API calls.
149
+ */
150
+ get currentUser() {
151
+ return {
152
+ get profile() {
153
+ return internalSession?.user;
154
+ },
155
+ get security() {
156
+ return {
157
+ mfaEnabled: internalSession?.user?.twoFactorEnabled || false,
158
+ lastLogin: internalSession?.user?.updatedAt,
159
+ isAnonymous: internalSession?.user?.isAnonymous || false
160
+ };
161
+ },
162
+ get organizations() {
163
+ return {
164
+ active: internalActiveOrg,
165
+ all: internalOrgs
166
+ };
167
+ },
168
+ get session() {
169
+ return {
170
+ id: internalSession?.session?.id,
171
+ expiresAt: internalSession?.session?.expiresAt,
172
+ userAgent: internalSession?.session?.userAgent
173
+ };
174
+ }
175
+ };
176
+ },
177
+ /**
178
+ * Listens for authentication state changes (sign-in, sign-out, session refresh).
179
+ */
180
+ onAuthStateChanged(callback) {
181
+ const atom = rawClient.useSession;
182
+ if (atom) {
183
+ return atom.subscribe((state) => {
184
+ callback(state?.data?.user || null);
185
+ });
186
+ }
187
+ return () => {
188
+ };
189
+ },
190
+ /**
191
+ * Forces a synchronization of the local auth state with the server.
192
+ */
193
+ async syncState() {
194
+ const session = await rawClient.getSession();
195
+ internalSession = session?.data;
196
+ if (rawClient.organization) {
197
+ const [orgs, activeOrg] = await Promise.all([
198
+ rawClient.organization.list(),
199
+ rawClient.organization.getActiveOrganization()
200
+ ]);
201
+ internalOrgs = orgs?.data;
202
+ internalActiveOrg = activeOrg?.data;
203
+ }
204
+ return session;
205
+ }
206
+ };
207
+ };
208
+ var TelestackAuth = class {
209
+ static instance = null;
210
+ static config = null;
211
+ /**
212
+ * Initializes the TelestackAuth SDK. Must be called once at app startup.
213
+ */
214
+ static initialize(config) {
215
+ this.config = config;
216
+ this.instance = createTelestackAuth(config);
217
+ return this.instance;
218
+ }
219
+ /**
220
+ * Updates the SDK configuration (e.g., adding a token).
221
+ */
222
+ static updateConfig(config) {
223
+ if (!this.config) throw new Error("Initialize SDK first");
224
+ this.config = { ...this.config, ...config };
225
+ this.instance = createTelestackAuth(this.config);
226
+ return this.instance;
227
+ }
228
+ /**
229
+ * Sets the Bearer token for all subsequent requests.
230
+ */
231
+ static setToken(token) {
232
+ if (!this.config) throw new Error("Initialize SDK first");
233
+ return this.updateConfig({
234
+ fetchOptions: {
235
+ ...this.config.fetchOptions,
236
+ headers: {
237
+ ...this.config.fetchOptions?.headers,
238
+ "Authorization": `Bearer ${token}`
239
+ }
240
+ }
241
+ });
242
+ }
243
+ /**
244
+ * Retrieves the initialized instance of the SDK.
245
+ */
246
+ static getInstance() {
247
+ if (!this.instance) {
248
+ throw new Error("TelestackAuth has not been initialized. Call initialize(config) first.");
249
+ }
250
+ return this.instance;
251
+ }
252
+ };
253
+ export {
254
+ TelestackAuth,
255
+ createTelestackAuth
256
+ };
2
257
  //# sourceMappingURL=index.mjs.map
@@ -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 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: config.fetchOptions,\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":["createAuthClient","magicLinkClient","organizationClient","twoFactorClient","usernameClient","multiSessionClient","jwtClient","adminClient","apiKeyClient","phoneNumberClient","emailOTPClient","oneTapClient","genericOAuthClient","oneTimeTokenClient","deviceAuthorizationClient","anonymousClient","passkeyClient","ssoClient","createTelestackAuth","config","internalSession","internalActiveOrg","internalOrgs","rawClient","sessionAtom","state","activeOrgAtom","options","res","callback","atom","session","orgs","activeOrg","TelestackAuth","token"]}
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":[]}
package/package.json CHANGED
@@ -1,24 +1,32 @@
1
1
  {
2
2
  "name": "@telestack/auth-sdk",
3
- "version": "1.0.2",
3
+ "version": "1.1.0",
4
4
  "description": "Firebase-style fluent SDK for TelestackAuth",
5
5
  "main": "dist/index.js",
6
6
  "module": "dist/index.mjs",
7
7
  "types": "dist/index.d.ts",
8
8
  "scripts": {
9
9
  "build": "tsup",
10
- "dev": "tsup --watch"
10
+ "dev": "tsup --watch",
11
+ "prepublishOnly": "npm run build"
11
12
  },
12
13
  "keywords": [],
13
14
  "author": "",
14
15
  "license": "ISC",
15
- "dependencies": {
16
+ "peerDependencies": {
17
+ "better-auth": "^1.4.20",
16
18
  "@better-auth/passkey": "^1.4.20",
17
- "@better-auth/sso": "^1.4.20",
18
- "better-auth": "^1.4.20"
19
+ "@better-auth/sso": "^1.4.20"
19
20
  },
20
21
  "devDependencies": {
21
22
  "tsup": "^8.5.1",
22
- "typescript": "^5.9.3"
23
- }
23
+ "typescript": "^5.9.3",
24
+ "better-auth": "^1.4.20",
25
+ "@better-auth/passkey": "^1.4.20",
26
+ "@better-auth/sso": "^1.4.20"
27
+ },
28
+ "files": [
29
+ "dist",
30
+ "README.md"
31
+ ]
24
32
  }