@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 +11 -0
- package/dist/client.d.ts.map +1 -1
- package/dist/client.js +34 -4
- package/dist/components/SignIn.d.ts +9 -3
- package/dist/components/SignIn.d.ts.map +1 -1
- package/dist/components/SignIn.js +6 -3
- package/dist/context.d.ts +4 -2
- package/dist/context.d.ts.map +1 -1
- package/dist/context.js +21 -12
- package/dist/types.d.ts +2 -0
- package/dist/types.d.ts.map +1 -1
- package/package.json +1 -1
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
|
package/dist/client.d.ts.map
CHANGED
|
@@ -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;
|
|
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
|
|
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?:
|
|
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,
|
|
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 =
|
|
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.
|
|
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
|
package/dist/context.d.ts.map
CHANGED
|
@@ -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,
|
|
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 =
|
|
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
|
-
|
|
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
|
-
|
|
73
|
-
|
|
74
|
-
|
|
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";
|
package/dist/types.d.ts.map
CHANGED
|
@@ -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;
|
|
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"}
|