@beamarco/auth-sdk 0.1.4 → 0.1.5

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/client.d.ts CHANGED
@@ -55,5 +55,16 @@ export declare class BeamarAuthClient {
55
55
  * Update password with reset token
56
56
  */
57
57
  updatePassword(key: string, password: string): Promise<void>;
58
+ /**
59
+ * System admin login: email/password, allowlist-check, sets system admin cookie.
60
+ * Use with app "system-admin" (or configured admin app). User must exist in that app.
61
+ */
62
+ adminLogin(credentials: LoginCredentials): Promise<{
63
+ email: string;
64
+ }>;
65
+ /**
66
+ * Get current system admin session. Returns admin email if logged in as system admin.
67
+ */
68
+ getAdminSession(): Promise<User | null>;
58
69
  }
59
70
  //# sourceMappingURL=client.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,gBAAgB,EAAE,mBAAmB,EAAE,gBAAgB,EAAE,MAAM,SAAS,CAAA;AAG5F,MAAM,WAAW,uBAAuB;IACtC,MAAM,EAAE,MAAM,CAAA;IACd,OAAO,EAAE,MAAM,CAAA;IACf,SAAS,CAAC,EAAE,MAAM,CAAA;CACnB;AAED;;;GAGG;AACH,qBAAa,gBAAgB;IAC3B,OAAO,CAAC,MAAM,CAAQ;IACtB,OAAO,CAAC,OAAO,CAAQ;IACvB,OAAO,CAAC,SAAS,CAAQ;gBAEb,OAAO,EAAE,uBAAuB;YAS9B,OAAO;IAoCrB;;OAEG;IACG,KAAK,CAAC,WAAW,EAAE,gBAAgB,GAAG,OAAO,CAAC,IAAI,CAAC;IAWzD;;OAEG;IACG,QAAQ,CAAC,WAAW,EAAE,mBAAmB,GAAG,OAAO,CAAC;QAAE,OAAO,EAAE,MAAM,CAAA;KAAE,CAAC;IAW9E;;OAEG;IACG,MAAM,IAAI,OAAO,CAAC,IAAI,CAAC;IAI7B;;OAEG;IACG,aAAa,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAQtD;;;OAGG;IACG,UAAU,IAAI,OAAO,CAAC,IAAI,GAAG,IAAI,CAAC;IAwBxC;;OAEG;IACG,eAAe,CAAC,UAAU,EAAE,gBAAgB,GAAG,OAAO,CAAC,IAAI,CAAC;IAWlE;;OAEG;IACG,kBAAkB,CAAC,UAAU,EAAE,gBAAgB,GAAG,OAAO,CAAC;QAAE,OAAO,EAAE,MAAM,CAAA;KAAE,CAAC;IAYpF;;OAEG;IACG,oBAAoB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAQ1D;;OAEG;IACG,cAAc,CAAC,GAAG,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;CAMnE"}
1
+ {"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,gBAAgB,EAAE,mBAAmB,EAAE,gBAAgB,EAAE,MAAM,SAAS,CAAA;AAG5F,MAAM,WAAW,uBAAuB;IACtC,MAAM,EAAE,MAAM,CAAA;IACd,OAAO,EAAE,MAAM,CAAA;IACf,SAAS,CAAC,EAAE,MAAM,CAAA;CACnB;AAED;;;GAGG;AACH,qBAAa,gBAAgB;IAC3B,OAAO,CAAC,MAAM,CAAQ;IACtB,OAAO,CAAC,OAAO,CAAQ;IACvB,OAAO,CAAC,SAAS,CAAQ;gBAEb,OAAO,EAAE,uBAAuB;YAS9B,OAAO;IAqCrB;;OAEG;IACG,KAAK,CAAC,WAAW,EAAE,gBAAgB,GAAG,OAAO,CAAC,IAAI,CAAC;IAUzD;;OAEG;IACG,QAAQ,CAAC,WAAW,EAAE,mBAAmB,GAAG,OAAO,CAAC;QAAE,OAAO,EAAE,MAAM,CAAA;KAAE,CAAC;IAW9E;;OAEG;IACG,MAAM,IAAI,OAAO,CAAC,IAAI,CAAC;IAI7B;;OAEG;IACG,aAAa,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAQtD;;;OAGG;IACG,UAAU,IAAI,OAAO,CAAC,IAAI,GAAG,IAAI,CAAC;IAwBxC;;OAEG;IACG,eAAe,CAAC,UAAU,EAAE,gBAAgB,GAAG,OAAO,CAAC,IAAI,CAAC;IAUlE;;OAEG;IACG,kBAAkB,CAAC,UAAU,EAAE,gBAAgB,GAAG,OAAO,CAAC;QAAE,OAAO,EAAE,MAAM,CAAA;KAAE,CAAC;IAWpF;;OAEG;IACG,oBAAoB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAQ1D;;OAEG;IACG,cAAc,CAAC,GAAG,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAOlE;;;OAGG;IACG,UAAU,CAAC,WAAW,EAAE,gBAAgB,GAAG,OAAO,CAAC;QAAE,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC;IAW3E;;OAEG;IACG,eAAe,IAAI,OAAO,CAAC,IAAI,GAAG,IAAI,CAAC;CAa9C"}
package/dist/client.js CHANGED
@@ -23,6 +23,7 @@ export class BeamarAuthClient {
23
23
  credentials: 'include',
24
24
  headers: {
25
25
  'Content-Type': 'application/json',
26
+ 'X-Beamar-App': this.appName,
26
27
  ...fetchOptions.headers,
27
28
  },
28
29
  });
@@ -46,7 +47,6 @@ export class BeamarAuthClient {
46
47
  const basic = btoa(`${credentials.email}:${credentials.password}`);
47
48
  return this.request('/auth/login', {
48
49
  method: 'POST',
49
- params: { appName: this.appName },
50
50
  headers: {
51
51
  Authorization: `Basic ${basic}`,
52
52
  },
@@ -109,7 +109,6 @@ export class BeamarAuthClient {
109
109
  async loginWithGoogle(credential) {
110
110
  return this.request('/goauth/login', {
111
111
  method: 'POST',
112
- params: { appName: this.appName },
113
112
  body: JSON.stringify({
114
113
  tokenId: credential.credential,
115
114
  googleId: credential.clientId,
@@ -122,7 +121,6 @@ export class BeamarAuthClient {
122
121
  async registerWithGoogle(credential) {
123
122
  const res = await this.request('/goauth/register', {
124
123
  method: 'POST',
125
- params: { appName: this.appName },
126
124
  body: JSON.stringify({
127
125
  tokenId: credential.credential,
128
126
  googleId: credential.clientId,
@@ -136,7 +134,7 @@ export class BeamarAuthClient {
136
134
  async requestPasswordReset(loginId) {
137
135
  await this.request('/auth/password-request', {
138
136
  method: 'POST',
139
- params: { parentUrl: this.parentUrl, appName: this.appName },
137
+ params: { parentUrl: this.parentUrl },
140
138
  body: JSON.stringify({ loginId }),
141
139
  });
142
140
  }
@@ -149,4 +147,36 @@ export class BeamarAuthClient {
149
147
  body: JSON.stringify({ key, password }),
150
148
  });
151
149
  }
150
+ /**
151
+ * System admin login: email/password, allowlist-check, sets system admin cookie.
152
+ * Use with app "system-admin" (or configured admin app). User must exist in that app.
153
+ */
154
+ async adminLogin(credentials) {
155
+ const basic = btoa(`${credentials.email}:${credentials.password}`);
156
+ await this.request('/auth/admin-login', {
157
+ method: 'POST',
158
+ headers: {
159
+ Authorization: `Basic ${basic}`,
160
+ },
161
+ });
162
+ return { email: credentials.email };
163
+ }
164
+ /**
165
+ * Get current system admin session. Returns admin email if logged in as system admin.
166
+ */
167
+ async getAdminSession() {
168
+ try {
169
+ const res = await this.request('/admin/me', { method: 'GET' });
170
+ if (!res?.email)
171
+ return null;
172
+ return {
173
+ id: '',
174
+ loginId: res.email,
175
+ tenants: [],
176
+ };
177
+ }
178
+ catch {
179
+ return null;
180
+ }
181
+ }
152
182
  }
@@ -57,13 +57,19 @@ declare const defaultStyles: {
57
57
  backgroundColor: string;
58
58
  };
59
59
  };
60
+ /** Style overrides - values can be string or number (React.CSSProperties) */
61
+ type StyleOverrides = {
62
+ [K in keyof typeof defaultStyles]?: Partial<React.CSSProperties>;
63
+ };
60
64
  export interface SignInProps {
61
65
  /** Redirect path after sign in (optional - caller handles navigation) */
62
66
  afterSignInUrl?: string;
63
- /** Custom styles */
64
- styles?: Partial<typeof defaultStyles>;
67
+ /** Custom styles - partial overrides merged with defaults */
68
+ styles?: StyleOverrides;
65
69
  /** Show Google sign in button */
66
70
  showGoogle?: boolean;
71
+ /** Show sign up link */
72
+ showSignUp?: boolean;
67
73
  /** Link to sign up - e.g. /sign-up */
68
74
  signUpUrl?: string;
69
75
  /** Link to forgot password - e.g. /forgot-password */
@@ -82,6 +88,6 @@ export interface SignInRenderProps {
82
88
  error: string | null;
83
89
  isLoading: boolean;
84
90
  }
85
- export declare function SignIn({ afterSignInUrl, styles: customStyles, showGoogle, signUpUrl, forgotPasswordUrl, onSuccess, children, }: SignInProps): import("react/jsx-runtime").JSX.Element;
91
+ export declare function SignIn({ afterSignInUrl, styles: customStyles, showGoogle, showSignUp, signUpUrl, forgotPasswordUrl, onSuccess, children, }: SignInProps): import("react/jsx-runtime").JSX.Element;
86
92
  export {};
87
93
  //# sourceMappingURL=SignIn.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"SignIn.d.ts","sourceRoot":"","sources":["../../src/components/SignIn.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAmB,MAAM,OAAO,CAAA;AAEvC,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,UAAU,CAAA;AAEhD,QAAA,MAAM,aAAa;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAwDlB,CAAA;AAED,MAAM,WAAW,WAAW;IAC1B,yEAAyE;IACzE,cAAc,CAAC,EAAE,MAAM,CAAA;IACvB,oBAAoB;IACpB,MAAM,CAAC,EAAE,OAAO,CAAC,OAAO,aAAa,CAAC,CAAA;IACtC,iCAAiC;IACjC,UAAU,CAAC,EAAE,OAAO,CAAA;IACpB,sCAAsC;IACtC,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,sDAAsD;IACtD,iBAAiB,CAAC,EAAE,MAAM,CAAA;IAC1B,sCAAsC;IACtC,SAAS,CAAC,EAAE,MAAM,IAAI,CAAA;IACtB,oCAAoC;IACpC,QAAQ,CAAC,EAAE,CAAC,KAAK,EAAE,iBAAiB,KAAK,KAAK,CAAC,SAAS,CAAA;CACzD;AAED,MAAM,WAAW,iBAAiB;IAChC,MAAM,EAAE,CAAC,WAAW,EAAE,gBAAgB,KAAK,OAAO,CAAC,IAAI,CAAC,CAAA;IACxD,gBAAgB,EAAE,CAAC,UAAU,EAAE;QAAE,UAAU,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAA;KAAE,KAAK,OAAO,CAAC,IAAI,CAAC,CAAA;IACzF,KAAK,EAAE,MAAM,GAAG,IAAI,CAAA;IACpB,SAAS,EAAE,OAAO,CAAA;CACnB;AAED,wBAAgB,MAAM,CAAC,EACrB,cAAc,EACd,MAAM,EAAE,YAAiB,EACzB,UAAiB,EACjB,SAAsB,EACtB,iBAAiB,EACjB,SAAS,EACT,QAAQ,GACT,EAAE,WAAW,2CAuHb"}
1
+ {"version":3,"file":"SignIn.d.ts","sourceRoot":"","sources":["../../src/components/SignIn.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAmB,MAAM,OAAO,CAAA;AAEvC,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,UAAU,CAAA;AAEhD,QAAA,MAAM,aAAa;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAwDlB,CAAA;AAED,6EAA6E;AAC7E,KAAK,cAAc,GAAG;KACnB,CAAC,IAAI,MAAM,OAAO,aAAa,CAAC,CAAC,EAAE,OAAO,CAAC,KAAK,CAAC,aAAa,CAAC;CACjE,CAAA;AAED,MAAM,WAAW,WAAW;IAC1B,yEAAyE;IACzE,cAAc,CAAC,EAAE,MAAM,CAAA;IACvB,6DAA6D;IAC7D,MAAM,CAAC,EAAE,cAAc,CAAA;IACvB,iCAAiC;IACjC,UAAU,CAAC,EAAE,OAAO,CAAA;IACpB,wBAAwB;IACxB,UAAU,CAAC,EAAE,OAAO,CAAA;IACpB,sCAAsC;IACtC,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,sDAAsD;IACtD,iBAAiB,CAAC,EAAE,MAAM,CAAA;IAC1B,sCAAsC;IACtC,SAAS,CAAC,EAAE,MAAM,IAAI,CAAA;IACtB,oCAAoC;IACpC,QAAQ,CAAC,EAAE,CAAC,KAAK,EAAE,iBAAiB,KAAK,KAAK,CAAC,SAAS,CAAA;CACzD;AAED,MAAM,WAAW,iBAAiB;IAChC,MAAM,EAAE,CAAC,WAAW,EAAE,gBAAgB,KAAK,OAAO,CAAC,IAAI,CAAC,CAAA;IACxD,gBAAgB,EAAE,CAAC,UAAU,EAAE;QAAE,UAAU,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAA;KAAE,KAAK,OAAO,CAAC,IAAI,CAAC,CAAA;IACzF,KAAK,EAAE,MAAM,GAAG,IAAI,CAAA;IACpB,SAAS,EAAE,OAAO,CAAA;CACnB;AAED,wBAAgB,MAAM,CAAC,EACrB,cAAc,EACd,MAAM,EAAE,YAAiB,EACzB,UAAiB,EACjB,UAAiB,EACjB,SAAsB,EACtB,iBAAiB,EACjB,SAAS,EACT,QAAQ,GACT,EAAE,WAAW,2CA8Hb"}
@@ -58,13 +58,16 @@ const defaultStyles = {
58
58
  backgroundColor: '#ddd',
59
59
  },
60
60
  };
61
- export function SignIn({ afterSignInUrl, styles: customStyles = {}, showGoogle = true, signUpUrl = '/sign-up', forgotPasswordUrl, onSuccess, children, }) {
61
+ export function SignIn({ afterSignInUrl, styles: customStyles = {}, showGoogle = true, showSignUp = true, signUpUrl = '/sign-up', forgotPasswordUrl, onSuccess, children, }) {
62
62
  const { signIn, apiUrl, appName } = useBeamarAuth();
63
63
  const [email, setEmail] = useState('');
64
64
  const [password, setPassword] = useState('');
65
65
  const [error, setError] = useState(null);
66
66
  const [isLoading, setIsLoading] = useState(false);
67
- const styles = { ...defaultStyles, ...customStyles };
67
+ const styles = Object.fromEntries(Object.keys(defaultStyles).map((k) => [
68
+ k,
69
+ { ...defaultStyles[k], ...(customStyles[k] ?? {}) },
70
+ ]));
68
71
  const handleSubmit = async (e) => {
69
72
  e.preventDefault();
70
73
  setError(null);
@@ -121,5 +124,5 @@ export function SignIn({ afterSignInUrl, styles: customStyles = {}, showGoogle =
121
124
  isLoading,
122
125
  }) }));
123
126
  }
124
- return (_jsxs("form", { onSubmit: handleSubmit, style: styles.container, children: [error && _jsx("div", { style: styles.error, children: error }), _jsx("input", { type: "email", placeholder: "Email", value: email, onChange: (e) => setEmail(e.target.value), required: true, disabled: isLoading, style: styles.input }), _jsx("input", { type: "password", placeholder: "Password", value: password, onChange: (e) => setPassword(e.target.value), required: true, disabled: isLoading, style: styles.input }), forgotPasswordUrl && (_jsx("a", { href: forgotPasswordUrl, style: styles.link, children: "Forgot password?" })), _jsx("button", { type: "submit", disabled: isLoading, style: styles.button, children: isLoading ? 'Signing in...' : 'Sign in' }), showGoogle && (_jsxs(_Fragment, { children: [_jsxs("div", { style: styles.divider, children: [_jsx("span", { style: styles.dividerLine }), _jsx("span", { children: "or" }), _jsx("span", { style: styles.dividerLine })] }), _jsx("button", { type: "button", onClick: redirectToHostedGoogleSignIn, disabled: isLoading, style: styles.buttonGoogle, children: "Sign in with Google" })] })), _jsxs("p", { children: ["Don't have an account? ", _jsx("a", { href: signUpUrl, style: styles.link, children: "Sign up" })] })] }));
127
+ return (_jsxs("form", { onSubmit: handleSubmit, style: styles.container, children: [error && _jsx("div", { style: styles.error, children: error }), _jsx("input", { type: "email", placeholder: "Email", value: email, onChange: (e) => setEmail(e.target.value), required: true, disabled: isLoading, style: styles.input }), _jsx("input", { type: "password", placeholder: "Password", value: password, onChange: (e) => setPassword(e.target.value), required: true, disabled: isLoading, style: styles.input }), forgotPasswordUrl && (_jsx("a", { href: forgotPasswordUrl, style: styles.link, children: "Forgot password?" })), _jsx("button", { type: "submit", disabled: isLoading, style: styles.button, children: isLoading ? 'Signing in...' : 'Sign in' }), showGoogle && (_jsxs(_Fragment, { children: [_jsxs("div", { style: styles.divider, children: [_jsx("span", { style: styles.dividerLine }), _jsx("span", { children: "or" }), _jsx("span", { style: styles.dividerLine })] }), _jsx("button", { type: "button", onClick: redirectToHostedGoogleSignIn, disabled: isLoading, style: styles.buttonGoogle, children: "Sign in with Google" })] })), showSignUp && (_jsxs("p", { children: ["Don't have an account? ", _jsx("a", { href: signUpUrl, style: styles.link, children: "Sign up" })] }))] }));
125
128
  }
package/dist/context.d.ts CHANGED
@@ -24,14 +24,16 @@ declare const AuthContext: React.Context<AuthContextValue | null>;
24
24
  export interface BeamarAuthProviderProps {
25
25
  /** Full config (advanced) */
26
26
  config?: BeamarAuthConfig;
27
- /** Publishable key - Clerk-style, single env var (e.g. beamar_live_developers-portal) */
27
+ /** Publishable key - Clerk-style, single env var (e.g. beamar_live_system-admin) */
28
28
  publishableKey?: string;
29
+ /** Use system admin login (admin-login, /admin/me). Requires app e.g. system-admin. */
30
+ adminMode?: boolean;
29
31
  children: React.ReactNode;
30
32
  }
31
33
  /**
32
34
  * BeamarAuthProvider - wrap your app to enable auth
33
35
  * Use publishableKey for Clerk-style single config, or config for full control
34
36
  */
35
- export declare function BeamarAuthProvider({ config: configProp, publishableKey, children }: BeamarAuthProviderProps): import("react/jsx-runtime").JSX.Element;
37
+ export declare function BeamarAuthProvider({ config: configProp, publishableKey, adminMode, children }: BeamarAuthProviderProps): import("react/jsx-runtime").JSX.Element;
36
38
  export { AuthContext };
37
39
  //# sourceMappingURL=context.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"context.d.ts","sourceRoot":"","sources":["../src/context.tsx"],"names":[],"mappings":"AAAA,OAAO,KAA0D,MAAM,OAAO,CAAA;AAC9E,OAAO,EAAE,gBAAgB,EAAE,MAAM,UAAU,CAAA;AAE3C,OAAO,KAAK,EAAE,IAAI,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,mBAAmB,EAAE,gBAAgB,EAAE,MAAM,SAAS,CAAA;AAE9G,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,EAAE,OAAO,CAAA;IACjB,UAAU,EAAE,OAAO,CAAA;IACnB,IAAI,EAAE,IAAI,GAAG,IAAI,CAAA;IACjB,MAAM,EAAE,CAAC,WAAW,EAAE,gBAAgB,KAAK,OAAO,CAAC,IAAI,CAAC,CAAA;IACxD,MAAM,EAAE,CAAC,WAAW,EAAE,mBAAmB,KAAK,OAAO,CAAC,IAAI,CAAC,CAAA;IAC3D,OAAO,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAA;IAC5B,gBAAgB,EAAE,CAAC,UAAU,EAAE,gBAAgB,KAAK,OAAO,CAAC,IAAI,CAAC,CAAA;IACjE,gBAAgB,EAAE,CAAC,UAAU,EAAE,gBAAgB,KAAK,OAAO,CAAC,IAAI,CAAC,CAAA;IACjE,QAAQ,EAAE,MAAM,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAAA;IACtC,cAAc,EAAE,MAAM,OAAO,CAAC,IAAI,GAAG,IAAI,CAAC,CAAA;IAC1C,MAAM,EAAE,gBAAgB,CAAA;IACxB,4CAA4C;IAC5C,MAAM,EAAE,MAAM,CAAA;IACd,mCAAmC;IACnC,OAAO,EAAE,MAAM,CAAA;IACf,2EAA2E;IAC3E,cAAc,CAAC,EAAE,MAAM,CAAA;CACxB;AAED,QAAA,MAAM,WAAW,wCAA+C,CAAA;AAEhE,MAAM,WAAW,uBAAuB;IACtC,6BAA6B;IAC7B,MAAM,CAAC,EAAE,gBAAgB,CAAA;IACzB,yFAAyF;IACzF,cAAc,CAAC,EAAE,MAAM,CAAA;IACvB,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAA;CAC1B;AAED;;;GAGG;AACH,wBAAgB,kBAAkB,CAAC,EAAE,MAAM,EAAE,UAAU,EAAE,cAAc,EAAE,QAAQ,EAAE,EAAE,uBAAuB,2CA6I3G;AAED,OAAO,EAAE,WAAW,EAAE,CAAA"}
1
+ {"version":3,"file":"context.d.ts","sourceRoot":"","sources":["../src/context.tsx"],"names":[],"mappings":"AAAA,OAAO,KAA0D,MAAM,OAAO,CAAA;AAC9E,OAAO,EAAE,gBAAgB,EAAE,MAAM,UAAU,CAAA;AAE3C,OAAO,KAAK,EAAE,IAAI,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,mBAAmB,EAAE,gBAAgB,EAAE,MAAM,SAAS,CAAA;AAE9G,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,EAAE,OAAO,CAAA;IACjB,UAAU,EAAE,OAAO,CAAA;IACnB,IAAI,EAAE,IAAI,GAAG,IAAI,CAAA;IACjB,MAAM,EAAE,CAAC,WAAW,EAAE,gBAAgB,KAAK,OAAO,CAAC,IAAI,CAAC,CAAA;IACxD,MAAM,EAAE,CAAC,WAAW,EAAE,mBAAmB,KAAK,OAAO,CAAC,IAAI,CAAC,CAAA;IAC3D,OAAO,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAA;IAC5B,gBAAgB,EAAE,CAAC,UAAU,EAAE,gBAAgB,KAAK,OAAO,CAAC,IAAI,CAAC,CAAA;IACjE,gBAAgB,EAAE,CAAC,UAAU,EAAE,gBAAgB,KAAK,OAAO,CAAC,IAAI,CAAC,CAAA;IACjE,QAAQ,EAAE,MAAM,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAAA;IACtC,cAAc,EAAE,MAAM,OAAO,CAAC,IAAI,GAAG,IAAI,CAAC,CAAA;IAC1C,MAAM,EAAE,gBAAgB,CAAA;IACxB,4CAA4C;IAC5C,MAAM,EAAE,MAAM,CAAA;IACd,mCAAmC;IACnC,OAAO,EAAE,MAAM,CAAA;IACf,2EAA2E;IAC3E,cAAc,CAAC,EAAE,MAAM,CAAA;CACxB;AAED,QAAA,MAAM,WAAW,wCAA+C,CAAA;AAEhE,MAAM,WAAW,uBAAuB;IACtC,6BAA6B;IAC7B,MAAM,CAAC,EAAE,gBAAgB,CAAA;IACzB,oFAAoF;IACpF,cAAc,CAAC,EAAE,MAAM,CAAA;IACvB,uFAAuF;IACvF,SAAS,CAAC,EAAE,OAAO,CAAA;IACnB,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAA;CAC1B;AAED;;;GAGG;AACH,wBAAgB,kBAAkB,CAAC,EAAE,MAAM,EAAE,UAAU,EAAE,cAAc,EAAE,SAAS,EAAE,QAAQ,EAAE,EAAE,uBAAuB,2CAqJtH;AAED,OAAO,EAAE,WAAW,EAAE,CAAA"}
package/dist/context.js CHANGED
@@ -7,13 +7,13 @@ const AuthContext = createContext(null);
7
7
  * BeamarAuthProvider - wrap your app to enable auth
8
8
  * Use publishableKey for Clerk-style single config, or config for full control
9
9
  */
10
- export function BeamarAuthProvider({ config: configProp, publishableKey, children }) {
10
+ export function BeamarAuthProvider({ config: configProp, publishableKey, adminMode, children }) {
11
11
  const [config, setConfig] = useState(configProp ?? null);
12
12
  const [user, setUser] = useState(null);
13
13
  const [isLoaded, setIsLoaded] = useState(false);
14
14
  useEffect(() => {
15
15
  if (configProp) {
16
- setConfig(configProp);
16
+ setConfig({ ...configProp, adminMode: configProp.adminMode ?? adminMode });
17
17
  return;
18
18
  }
19
19
  if (!publishableKey) {
@@ -21,15 +21,16 @@ export function BeamarAuthProvider({ config: configProp, publishableKey, childre
21
21
  return;
22
22
  }
23
23
  resolveConfigFromPublishableKey(publishableKey)
24
- .then(setConfig)
24
+ .then((c) => setConfig({ ...c, adminMode: c.adminMode ?? adminMode }))
25
25
  .catch((err) => {
26
26
  console.error('BeamarAuthProvider: failed to resolve config', err);
27
27
  setConfig({
28
28
  apiUrl: 'https://auth.s.beamar.co',
29
29
  appName: publishableKey,
30
+ adminMode,
30
31
  });
31
32
  });
32
- }, [configProp, publishableKey]);
33
+ }, [configProp, publishableKey, adminMode]);
33
34
  const client = React.useMemo(() => {
34
35
  if (!config?.apiUrl)
35
36
  return null;
@@ -42,16 +43,18 @@ export function BeamarAuthProvider({ config: configProp, publishableKey, childre
42
43
  const refreshSession = useCallback(async () => {
43
44
  if (!client)
44
45
  return null;
45
- const u = await client.getSession();
46
+ const u = config?.adminMode
47
+ ? await client.getAdminSession()
48
+ : await client.getSession();
46
49
  setUser(u);
47
50
  return u;
48
- }, [client]);
51
+ }, [client, config?.adminMode]);
49
52
  useEffect(() => {
50
53
  if (!client)
51
54
  return;
52
55
  let cancelled = false;
53
- client
54
- .getSession()
56
+ const loadSession = config?.adminMode ? client.getAdminSession() : client.getSession();
57
+ loadSession
55
58
  .then((u) => {
56
59
  if (!cancelled) {
57
60
  setUser(u);
@@ -65,13 +68,19 @@ export function BeamarAuthProvider({ config: configProp, publishableKey, childre
65
68
  return () => {
66
69
  cancelled = true;
67
70
  };
68
- }, [client]);
71
+ }, [client, config?.adminMode]);
69
72
  const signIn = useCallback(async (credentials) => {
70
73
  if (!client)
71
74
  return;
72
- const u = await client.login(credentials);
73
- setUser(u);
74
- }, [client]);
75
+ if (config?.adminMode) {
76
+ const { email } = await client.adminLogin(credentials);
77
+ setUser({ id: '', loginId: email, tenants: [] });
78
+ }
79
+ else {
80
+ const u = await client.login(credentials);
81
+ setUser(u);
82
+ }
83
+ }, [client, config?.adminMode]);
75
84
  const signUp = useCallback(async (credentials) => {
76
85
  if (!client)
77
86
  return;
package/dist/types.d.ts CHANGED
@@ -31,6 +31,8 @@ export interface BeamarAuthConfig {
31
31
  googleClientId?: string;
32
32
  /** Optional callback URL after password reset */
33
33
  parentUrl?: string;
34
+ /** Use system admin login and session (admin-login, /admin/me) */
35
+ adminMode?: boolean;
34
36
  }
35
37
  /** Default auth API URL - overridable via VITE_AUTH_API_URL */
36
38
  export declare const DEFAULT_AUTH_API_URL = "https://auth.s.beamar.co";
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,MAAM,WAAW,IAAI;IACnB,EAAE,EAAE,MAAM,CAAA;IACV,OAAO,EAAE,MAAM,CAAA;IACf,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,OAAO,CAAC,EAAE,YAAY,EAAE,CAAA;CACzB;AAED;;GAEG;AACH,MAAM,WAAW,YAAY;IAC3B,MAAM,EAAE;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,IAAI,CAAC,EAAE,MAAM,CAAA;KAAE,CAAA;IACrC,QAAQ,CAAC,EAAE,MAAM,CAAA;CAClB;AAED;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B,uEAAuE;IACvE,MAAM,EAAE,MAAM,CAAA;IACd,yEAAyE;IACzE,OAAO,EAAE,MAAM,CAAA;IACf,qDAAqD;IACrD,cAAc,CAAC,EAAE,MAAM,CAAA;IACvB,iDAAiD;IACjD,SAAS,CAAC,EAAE,MAAM,CAAA;CACnB;AAED,+DAA+D;AAC/D,eAAO,MAAM,oBAAoB,6BAA6B,CAAA;AAE9D,2DAA2D;AAC3D,MAAM,WAAW,kBAAkB;IACjC,cAAc,CAAC,EAAE,MAAM,CAAA;CACxB;AAED;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B,KAAK,EAAE,MAAM,CAAA;IACb,QAAQ,EAAE,MAAM,CAAA;CACjB;AAED;;GAEG;AACH,MAAM,WAAW,mBAAmB;IAClC,KAAK,EAAE,MAAM,CAAA;IACb,QAAQ,EAAE,MAAM,CAAA;CACjB;AAED;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B,UAAU,EAAE,MAAM,CAAA;IAClB,QAAQ,EAAE,MAAM,CAAA;CACjB;AAED,qBAAa,SAAU,SAAQ,KAAK;IAGzB,UAAU,CAAC,EAAE,MAAM;IACnB,IAAI,CAAC,EAAE,MAAM;gBAFpB,OAAO,EAAE,MAAM,EACR,UAAU,CAAC,EAAE,MAAM,YAAA,EACnB,IAAI,CAAC,EAAE,MAAM,YAAA;CAKvB"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,MAAM,WAAW,IAAI;IACnB,EAAE,EAAE,MAAM,CAAA;IACV,OAAO,EAAE,MAAM,CAAA;IACf,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,OAAO,CAAC,EAAE,YAAY,EAAE,CAAA;CACzB;AAED;;GAEG;AACH,MAAM,WAAW,YAAY;IAC3B,MAAM,EAAE;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,IAAI,CAAC,EAAE,MAAM,CAAA;KAAE,CAAA;IACrC,QAAQ,CAAC,EAAE,MAAM,CAAA;CAClB;AAED;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B,uEAAuE;IACvE,MAAM,EAAE,MAAM,CAAA;IACd,yEAAyE;IACzE,OAAO,EAAE,MAAM,CAAA;IACf,qDAAqD;IACrD,cAAc,CAAC,EAAE,MAAM,CAAA;IACvB,iDAAiD;IACjD,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,kEAAkE;IAClE,SAAS,CAAC,EAAE,OAAO,CAAA;CACpB;AAED,+DAA+D;AAC/D,eAAO,MAAM,oBAAoB,6BAA6B,CAAA;AAE9D,2DAA2D;AAC3D,MAAM,WAAW,kBAAkB;IACjC,cAAc,CAAC,EAAE,MAAM,CAAA;CACxB;AAED;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B,KAAK,EAAE,MAAM,CAAA;IACb,QAAQ,EAAE,MAAM,CAAA;CACjB;AAED;;GAEG;AACH,MAAM,WAAW,mBAAmB;IAClC,KAAK,EAAE,MAAM,CAAA;IACb,QAAQ,EAAE,MAAM,CAAA;CACjB;AAED;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B,UAAU,EAAE,MAAM,CAAA;IAClB,QAAQ,EAAE,MAAM,CAAA;CACjB;AAED,qBAAa,SAAU,SAAQ,KAAK;IAGzB,UAAU,CAAC,EAAE,MAAM;IACnB,IAAI,CAAC,EAAE,MAAM;gBAFpB,OAAO,EAAE,MAAM,EACR,UAAU,CAAC,EAAE,MAAM,YAAA,EACnB,IAAI,CAAC,EAAE,MAAM,YAAA;CAKvB"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@beamarco/auth-sdk",
3
- "version": "0.1.4",
3
+ "version": "0.1.5",
4
4
  "description": "Beamar Auth SDK - Embed authentication like Clerk in your React apps",
5
5
  "type": "module",
6
6
  "main": "./dist/index.js",