bright-auth 0.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.
@@ -0,0 +1,127 @@
1
+ var __defProp = Object.defineProperty;
2
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
3
+ var __getOwnPropNames = Object.getOwnPropertyNames;
4
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
5
+ var __export = (target, all) => {
6
+ for (var name in all)
7
+ __defProp(target, name, { get: all[name], enumerable: true });
8
+ };
9
+ var __copyProps = (to, from, except, desc) => {
10
+ if (from && typeof from === "object" || typeof from === "function") {
11
+ for (let key of __getOwnPropNames(from))
12
+ if (!__hasOwnProp.call(to, key) && key !== except)
13
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
14
+ }
15
+ return to;
16
+ };
17
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
18
+
19
+ // src/index.js
20
+ var src_exports = {};
21
+ __export(src_exports, {
22
+ BrightAuth: () => BrightAuth,
23
+ default: () => src_default
24
+ });
25
+ module.exports = __toCommonJS(src_exports);
26
+ var DEFAULT_API_BASE = "https://api.thebrightapp.xyz/v1";
27
+ var DEFAULT_AUTH_BASE = "https://developers.thebrightapp.xyz";
28
+ var TOKEN_KEY = "bright_access_token";
29
+ var BrightAuth = class {
30
+ /**
31
+ * @param {{ clientId: string, clientSecret: string, redirectUri: string, apiBase?: string, authBase?: string }} config
32
+ */
33
+ constructor({ clientId, clientSecret, redirectUri, apiBase, authBase } = {}) {
34
+ if (!clientId) throw new Error("BrightAuth: clientId is required");
35
+ if (!clientSecret) throw new Error("BrightAuth: clientSecret is required");
36
+ if (!redirectUri) throw new Error("BrightAuth: redirectUri is required");
37
+ this._clientId = clientId;
38
+ this._clientSecret = clientSecret;
39
+ this._redirectUri = redirectUri;
40
+ this._apiBase = (apiBase || DEFAULT_API_BASE).replace(/\/$/, "");
41
+ this._authBase = (authBase || DEFAULT_AUTH_BASE).replace(/\/$/, "");
42
+ }
43
+ /** Redirect the user to the Bright consent page. */
44
+ signIn(scopes = ["health"]) {
45
+ const url = new URL(`${this._authBase}/oauth/authorize`);
46
+ url.searchParams.set("client_id", this._clientId);
47
+ url.searchParams.set("redirect_uri", this._redirectUri);
48
+ scopes.forEach((s) => url.searchParams.append("scope", s));
49
+ window.location.href = url.toString();
50
+ }
51
+ /**
52
+ * Call on every page load. If the URL contains ?code=, exchanges it for an
53
+ * access token, stores it, and cleans the URL.
54
+ * @returns {Promise<string|null>} The access token, or null if no code in URL.
55
+ */
56
+ async handleCallback() {
57
+ const params = new URLSearchParams(window.location.search);
58
+ const code = params.get("code");
59
+ const error = params.get("error");
60
+ if (error) throw new Error(`Bright OAuth error: ${error}`);
61
+ if (!code) return null;
62
+ window.history.replaceState({}, "", window.location.pathname);
63
+ const res = await fetch(`${this._apiBase}/oauth/token`, {
64
+ method: "POST",
65
+ headers: { "Content-Type": "application/json" },
66
+ body: JSON.stringify({
67
+ client_id: this._clientId,
68
+ client_secret: this._clientSecret,
69
+ code
70
+ })
71
+ });
72
+ const data = await res.json();
73
+ if (!res.ok) throw new Error(data.detail || "Token exchange failed");
74
+ localStorage.setItem(TOKEN_KEY, data.access_token);
75
+ return data.access_token;
76
+ }
77
+ /** Returns the stored access token, or null if not signed in. */
78
+ getToken() {
79
+ return localStorage.getItem(TOKEN_KEY);
80
+ }
81
+ /** Remove the stored token (signs the user out locally). */
82
+ signOut() {
83
+ localStorage.removeItem(TOKEN_KEY);
84
+ }
85
+ /** Returns true if an access token is stored. */
86
+ isSignedIn() {
87
+ return !!this.getToken();
88
+ }
89
+ /**
90
+ * Fetch the signed-in user's identity from Bright.
91
+ * @returns {Promise<{ uid: string, email?: string, name?: string, photo_url?: string }>}
92
+ */
93
+ async getUser() {
94
+ return this._call("/oauth/me");
95
+ }
96
+ /**
97
+ * Make an authenticated request to any Bright API endpoint.
98
+ * @param {string} path e.g. "/sleep_track/home"
99
+ * @param {object} [init] fetch options (method, body, etc.)
100
+ * @param {object} [query] query params object
101
+ */
102
+ async fetch(path, init = {}, query = {}) {
103
+ const token = this.getToken();
104
+ if (!token) throw new Error("BrightAuth: not signed in");
105
+ const url = new URL(`${this._apiBase}${path}`);
106
+ Object.entries(query).forEach(([k, v]) => url.searchParams.set(k, v));
107
+ const res = await globalThis.fetch(url.toString(), {
108
+ ...init,
109
+ headers: {
110
+ ...init.headers || {},
111
+ Authorization: `Bearer ${token}`,
112
+ "Content-Type": "application/json"
113
+ }
114
+ });
115
+ if (!res.ok) {
116
+ const err = await res.json().catch(() => ({}));
117
+ throw new Error(err.detail || `Bright API error ${res.status}`);
118
+ }
119
+ return res.json();
120
+ }
121
+ /** @private */
122
+ async _call(path, query = {}) {
123
+ return this.fetch(path, {}, query);
124
+ }
125
+ };
126
+ var src_default = BrightAuth;
127
+ //# sourceMappingURL=bright-auth.cjs.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../src/index.js"],
4
+ "sourcesContent": ["const DEFAULT_API_BASE = \"https://api.thebrightapp.xyz/v1\"\nconst DEFAULT_AUTH_BASE = \"https://developers.thebrightapp.xyz\"\nconst TOKEN_KEY = \"bright_access_token\"\n\nexport class BrightAuth {\n /**\n * @param {{ clientId: string, clientSecret: string, redirectUri: string, apiBase?: string, authBase?: string }} config\n */\n constructor({ clientId, clientSecret, redirectUri, apiBase, authBase } = {}) {\n if (!clientId) throw new Error(\"BrightAuth: clientId is required\")\n if (!clientSecret) throw new Error(\"BrightAuth: clientSecret is required\")\n if (!redirectUri) throw new Error(\"BrightAuth: redirectUri is required\")\n\n this._clientId = clientId\n this._clientSecret = clientSecret\n this._redirectUri = redirectUri\n this._apiBase = (apiBase || DEFAULT_API_BASE).replace(/\\/$/, \"\")\n this._authBase = (authBase || DEFAULT_AUTH_BASE).replace(/\\/$/, \"\")\n }\n\n /** Redirect the user to the Bright consent page. */\n signIn(scopes = [\"health\"]) {\n const url = new URL(`${this._authBase}/oauth/authorize`)\n url.searchParams.set(\"client_id\", this._clientId)\n url.searchParams.set(\"redirect_uri\", this._redirectUri)\n scopes.forEach(s => url.searchParams.append(\"scope\", s))\n window.location.href = url.toString()\n }\n\n /**\n * Call on every page load. If the URL contains ?code=, exchanges it for an\n * access token, stores it, and cleans the URL.\n * @returns {Promise<string|null>} The access token, or null if no code in URL.\n */\n async handleCallback() {\n const params = new URLSearchParams(window.location.search)\n const code = params.get(\"code\")\n const error = params.get(\"error\")\n\n if (error) throw new Error(`Bright OAuth error: ${error}`)\n if (!code) return null\n\n window.history.replaceState({}, \"\", window.location.pathname)\n\n const res = await fetch(`${this._apiBase}/oauth/token`, {\n method: \"POST\",\n headers: { \"Content-Type\": \"application/json\" },\n body: JSON.stringify({\n client_id: this._clientId,\n client_secret: this._clientSecret,\n code,\n }),\n })\n const data = await res.json()\n if (!res.ok) throw new Error(data.detail || \"Token exchange failed\")\n\n localStorage.setItem(TOKEN_KEY, data.access_token)\n return data.access_token\n }\n\n /** Returns the stored access token, or null if not signed in. */\n getToken() {\n return localStorage.getItem(TOKEN_KEY)\n }\n\n /** Remove the stored token (signs the user out locally). */\n signOut() {\n localStorage.removeItem(TOKEN_KEY)\n }\n\n /** Returns true if an access token is stored. */\n isSignedIn() {\n return !!this.getToken()\n }\n\n /**\n * Fetch the signed-in user's identity from Bright.\n * @returns {Promise<{ uid: string, email?: string, name?: string, photo_url?: string }>}\n */\n async getUser() {\n return this._call(\"/oauth/me\")\n }\n\n /**\n * Make an authenticated request to any Bright API endpoint.\n * @param {string} path e.g. \"/sleep_track/home\"\n * @param {object} [init] fetch options (method, body, etc.)\n * @param {object} [query] query params object\n */\n async fetch(path, init = {}, query = {}) {\n const token = this.getToken()\n if (!token) throw new Error(\"BrightAuth: not signed in\")\n\n const url = new URL(`${this._apiBase}${path}`)\n Object.entries(query).forEach(([k, v]) => url.searchParams.set(k, v))\n\n const res = await globalThis.fetch(url.toString(), {\n ...init,\n headers: {\n ...(init.headers || {}),\n Authorization: `Bearer ${token}`,\n \"Content-Type\": \"application/json\",\n },\n })\n\n if (!res.ok) {\n const err = await res.json().catch(() => ({}))\n throw new Error(err.detail || `Bright API error ${res.status}`)\n }\n return res.json()\n }\n\n /** @private */\n async _call(path, query = {}) {\n return this.fetch(path, {}, query)\n }\n}\n\nexport default BrightAuth\n"],
5
+ "mappings": "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",
6
+ "names": []
7
+ }
@@ -0,0 +1,107 @@
1
+ // src/index.js
2
+ var DEFAULT_API_BASE = "https://api.thebrightapp.xyz/v1";
3
+ var DEFAULT_AUTH_BASE = "https://developers.thebrightapp.xyz";
4
+ var TOKEN_KEY = "bright_access_token";
5
+ var BrightAuth = class {
6
+ /**
7
+ * @param {{ clientId: string, clientSecret: string, redirectUri: string, apiBase?: string, authBase?: string }} config
8
+ */
9
+ constructor({ clientId, clientSecret, redirectUri, apiBase, authBase } = {}) {
10
+ if (!clientId) throw new Error("BrightAuth: clientId is required");
11
+ if (!clientSecret) throw new Error("BrightAuth: clientSecret is required");
12
+ if (!redirectUri) throw new Error("BrightAuth: redirectUri is required");
13
+ this._clientId = clientId;
14
+ this._clientSecret = clientSecret;
15
+ this._redirectUri = redirectUri;
16
+ this._apiBase = (apiBase || DEFAULT_API_BASE).replace(/\/$/, "");
17
+ this._authBase = (authBase || DEFAULT_AUTH_BASE).replace(/\/$/, "");
18
+ }
19
+ /** Redirect the user to the Bright consent page. */
20
+ signIn(scopes = ["health"]) {
21
+ const url = new URL(`${this._authBase}/oauth/authorize`);
22
+ url.searchParams.set("client_id", this._clientId);
23
+ url.searchParams.set("redirect_uri", this._redirectUri);
24
+ scopes.forEach((s) => url.searchParams.append("scope", s));
25
+ window.location.href = url.toString();
26
+ }
27
+ /**
28
+ * Call on every page load. If the URL contains ?code=, exchanges it for an
29
+ * access token, stores it, and cleans the URL.
30
+ * @returns {Promise<string|null>} The access token, or null if no code in URL.
31
+ */
32
+ async handleCallback() {
33
+ const params = new URLSearchParams(window.location.search);
34
+ const code = params.get("code");
35
+ const error = params.get("error");
36
+ if (error) throw new Error(`Bright OAuth error: ${error}`);
37
+ if (!code) return null;
38
+ window.history.replaceState({}, "", window.location.pathname);
39
+ const res = await fetch(`${this._apiBase}/oauth/token`, {
40
+ method: "POST",
41
+ headers: { "Content-Type": "application/json" },
42
+ body: JSON.stringify({
43
+ client_id: this._clientId,
44
+ client_secret: this._clientSecret,
45
+ code
46
+ })
47
+ });
48
+ const data = await res.json();
49
+ if (!res.ok) throw new Error(data.detail || "Token exchange failed");
50
+ localStorage.setItem(TOKEN_KEY, data.access_token);
51
+ return data.access_token;
52
+ }
53
+ /** Returns the stored access token, or null if not signed in. */
54
+ getToken() {
55
+ return localStorage.getItem(TOKEN_KEY);
56
+ }
57
+ /** Remove the stored token (signs the user out locally). */
58
+ signOut() {
59
+ localStorage.removeItem(TOKEN_KEY);
60
+ }
61
+ /** Returns true if an access token is stored. */
62
+ isSignedIn() {
63
+ return !!this.getToken();
64
+ }
65
+ /**
66
+ * Fetch the signed-in user's identity from Bright.
67
+ * @returns {Promise<{ uid: string, email?: string, name?: string, photo_url?: string }>}
68
+ */
69
+ async getUser() {
70
+ return this._call("/oauth/me");
71
+ }
72
+ /**
73
+ * Make an authenticated request to any Bright API endpoint.
74
+ * @param {string} path e.g. "/sleep_track/home"
75
+ * @param {object} [init] fetch options (method, body, etc.)
76
+ * @param {object} [query] query params object
77
+ */
78
+ async fetch(path, init = {}, query = {}) {
79
+ const token = this.getToken();
80
+ if (!token) throw new Error("BrightAuth: not signed in");
81
+ const url = new URL(`${this._apiBase}${path}`);
82
+ Object.entries(query).forEach(([k, v]) => url.searchParams.set(k, v));
83
+ const res = await globalThis.fetch(url.toString(), {
84
+ ...init,
85
+ headers: {
86
+ ...init.headers || {},
87
+ Authorization: `Bearer ${token}`,
88
+ "Content-Type": "application/json"
89
+ }
90
+ });
91
+ if (!res.ok) {
92
+ const err = await res.json().catch(() => ({}));
93
+ throw new Error(err.detail || `Bright API error ${res.status}`);
94
+ }
95
+ return res.json();
96
+ }
97
+ /** @private */
98
+ async _call(path, query = {}) {
99
+ return this.fetch(path, {}, query);
100
+ }
101
+ };
102
+ var src_default = BrightAuth;
103
+ export {
104
+ BrightAuth,
105
+ src_default as default
106
+ };
107
+ //# sourceMappingURL=bright-auth.esm.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../src/index.js"],
4
+ "sourcesContent": ["const DEFAULT_API_BASE = \"https://api.thebrightapp.xyz/v1\"\nconst DEFAULT_AUTH_BASE = \"https://developers.thebrightapp.xyz\"\nconst TOKEN_KEY = \"bright_access_token\"\n\nexport class BrightAuth {\n /**\n * @param {{ clientId: string, clientSecret: string, redirectUri: string, apiBase?: string, authBase?: string }} config\n */\n constructor({ clientId, clientSecret, redirectUri, apiBase, authBase } = {}) {\n if (!clientId) throw new Error(\"BrightAuth: clientId is required\")\n if (!clientSecret) throw new Error(\"BrightAuth: clientSecret is required\")\n if (!redirectUri) throw new Error(\"BrightAuth: redirectUri is required\")\n\n this._clientId = clientId\n this._clientSecret = clientSecret\n this._redirectUri = redirectUri\n this._apiBase = (apiBase || DEFAULT_API_BASE).replace(/\\/$/, \"\")\n this._authBase = (authBase || DEFAULT_AUTH_BASE).replace(/\\/$/, \"\")\n }\n\n /** Redirect the user to the Bright consent page. */\n signIn(scopes = [\"health\"]) {\n const url = new URL(`${this._authBase}/oauth/authorize`)\n url.searchParams.set(\"client_id\", this._clientId)\n url.searchParams.set(\"redirect_uri\", this._redirectUri)\n scopes.forEach(s => url.searchParams.append(\"scope\", s))\n window.location.href = url.toString()\n }\n\n /**\n * Call on every page load. If the URL contains ?code=, exchanges it for an\n * access token, stores it, and cleans the URL.\n * @returns {Promise<string|null>} The access token, or null if no code in URL.\n */\n async handleCallback() {\n const params = new URLSearchParams(window.location.search)\n const code = params.get(\"code\")\n const error = params.get(\"error\")\n\n if (error) throw new Error(`Bright OAuth error: ${error}`)\n if (!code) return null\n\n window.history.replaceState({}, \"\", window.location.pathname)\n\n const res = await fetch(`${this._apiBase}/oauth/token`, {\n method: \"POST\",\n headers: { \"Content-Type\": \"application/json\" },\n body: JSON.stringify({\n client_id: this._clientId,\n client_secret: this._clientSecret,\n code,\n }),\n })\n const data = await res.json()\n if (!res.ok) throw new Error(data.detail || \"Token exchange failed\")\n\n localStorage.setItem(TOKEN_KEY, data.access_token)\n return data.access_token\n }\n\n /** Returns the stored access token, or null if not signed in. */\n getToken() {\n return localStorage.getItem(TOKEN_KEY)\n }\n\n /** Remove the stored token (signs the user out locally). */\n signOut() {\n localStorage.removeItem(TOKEN_KEY)\n }\n\n /** Returns true if an access token is stored. */\n isSignedIn() {\n return !!this.getToken()\n }\n\n /**\n * Fetch the signed-in user's identity from Bright.\n * @returns {Promise<{ uid: string, email?: string, name?: string, photo_url?: string }>}\n */\n async getUser() {\n return this._call(\"/oauth/me\")\n }\n\n /**\n * Make an authenticated request to any Bright API endpoint.\n * @param {string} path e.g. \"/sleep_track/home\"\n * @param {object} [init] fetch options (method, body, etc.)\n * @param {object} [query] query params object\n */\n async fetch(path, init = {}, query = {}) {\n const token = this.getToken()\n if (!token) throw new Error(\"BrightAuth: not signed in\")\n\n const url = new URL(`${this._apiBase}${path}`)\n Object.entries(query).forEach(([k, v]) => url.searchParams.set(k, v))\n\n const res = await globalThis.fetch(url.toString(), {\n ...init,\n headers: {\n ...(init.headers || {}),\n Authorization: `Bearer ${token}`,\n \"Content-Type\": \"application/json\",\n },\n })\n\n if (!res.ok) {\n const err = await res.json().catch(() => ({}))\n throw new Error(err.detail || `Bright API error ${res.status}`)\n }\n return res.json()\n }\n\n /** @private */\n async _call(path, query = {}) {\n return this.fetch(path, {}, query)\n }\n}\n\nexport default BrightAuth\n"],
5
+ "mappings": "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",
6
+ "names": []
7
+ }
package/package.json ADDED
@@ -0,0 +1,28 @@
1
+ {
2
+ "name": "bright-auth",
3
+ "version": "0.1.0",
4
+ "description": "Sign in with Bright — OAuth SDK for web",
5
+ "main": "dist/bright-auth.cjs.js",
6
+ "module": "dist/bright-auth.esm.js",
7
+ "exports": {
8
+ ".": {
9
+ "import": "./dist/bright-auth.esm.js",
10
+ "require": "./dist/bright-auth.cjs.js"
11
+ }
12
+ },
13
+ "files": ["dist"],
14
+ "scripts": {
15
+ "build": "node build.js",
16
+ "dev": "node build.js --watch"
17
+ },
18
+ "devDependencies": {
19
+ "esbuild": "^0.21.0"
20
+ },
21
+ "keywords": ["bright", "oauth", "auth", "health", "fitness"],
22
+ "license": "MIT",
23
+ "repository": {
24
+ "type": "git",
25
+ "url": "https://github.com/thebrightapp/bright-auth-js"
26
+ },
27
+ "homepage": "https://developers.thebrightapp.xyz"
28
+ }