Repository files navigation

Better Auth Beta Plugin

A flexible, secure, and extensible authentication plugin designed for beta access management. This plugin allows you to gate sign-ups behind beta codes, manage invite flows, and add custom fields or logic for your application's early access program.


Features

  • Restrict sign-up to users with valid beta codes or wildcard access
  • Add and remove beta users via API endpoints
  • Send custom invite links to users
  • Support for additional fields in beta user schema
  • Secure middleware to enforce beta access at sign-up
  • Extensible with custom code generation and email logic
  • Built on top of the better-auth ecosystem

Installation

npm install @studiisapp/beta


Usage

import { betaPlugin } from '@studiisapp/beta';
plugins: [
betaPlugin({
enabled: true,
sendInviteLink: async ({ email, url, code }) => {
await sendBetaInviteEmail({
mailTo: email,
betaKey: code,
url,
});
},
betaSecret: process.env.BETA_SECRET || "",
}),
]

Endpoints

EndpointMethodDescription
/beta/add-userPOSTAdd a beta user or wildcard code
/beta/remove-userDELETERemove a beta user (not yet implemented)
/beta/sign-up/:codeGETCallback for beta code sign-up
/beta/sign-upPOSTComplete sign-up with beta code
/beta/checkGETCheck if a beta code is valid

How It Works

  • Beta Gating: The plugin enforces beta access at the sign-up endpoint using a secret header (X-Beta-Signup). Only requests with the correct secret are allowed to proceed.
  • Invite Flow: Admins can add users to the beta list, generating unique codes and sending invite links via email.
  • Wildcard Codes: Supports "wildcard" codes for broader access (e.g., public beta).
  • Custom Fields: Extend the beta user schema with additional fields as needed for your use case.
  • Secure Callbacks: Redirects and error handling are built-in for a smooth user experience.

Configuration Options

OptionTypeDescription
enabledbooleanEnable or disable the beta plugin
betaSecretstringSecret required in X-Beta-Signup header
sendInviteLinkfunctionCustom function to send invite emails
additionalFieldsobjectExtra fields to add to the beta user schema
generateCodefunctionCustom function to generate invite codes
schemaobjectCustom schema overrides

Error Codes

  • USER_EXISTS: User already exists in the beta
  • USER_NOT_FOUND: User does not have beta access
  • INVALID_CODE: Invalid or expired beta code

Extending

You can customize invite links, code generation, and schema fields to fit your application's needs. See the betaPlugin options for details.


License

MIT


Contributing

Contributions and feedback are welcome! Please open issues or pull requests for improvements or bug fixes.


Disclaimer

This plugin is designed for beta access use cases and should be integrated with proper security and validation according to your application's requirements.


For more details, see the source code and inline documentation.

About

better-auth beta plugin

Resources

Stars

4 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Add copy buttons to all
 blocks\n(function() {\n function addCopyButtons() {\n document.querySelectorAll('pre code').forEach(function(codeBlock) {\n if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;\n codeBlock.parentElement.setAttribute('data-copy-added', 'true');\n \n var btn = document.createElement('button');\n btn.textContent = 'Copy';\n btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';\n btn.onmouseover = function() { this.style.opacity = '1'; };\n btn.onmouseout = function() { this.style.opacity = '0.7'; };\n btn.onclick = function() {\n navigator.clipboard.writeText(codeBlock.textContent).then(function() {\n btn.textContent = 'Copied!';\n setTimeout(function() { btn.textContent = 'Copy'; }, 1500);\n });\n };\n codeBlock.parentElement.style.position = 'relative';\n codeBlock.parentElement.appendChild(btn);\n });\n }\n \n addCopyButtons();\n \n // Re-run on dynamic content\n var observer = new MutationObserver(addCopyButtons);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Add Copy Buttons to Code Blocks");
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
Skip to content

Repository files navigation

Better Auth Beta Plugin

A flexible, secure, and extensible authentication plugin designed for beta access management. This plugin allows you to gate sign-ups behind beta codes, manage invite flows, and add custom fields or logic for your application's early access program.


Features

  • Restrict sign-up to users with valid beta codes or wildcard access
  • Add and remove beta users via API endpoints
  • Send custom invite links to users
  • Support for additional fields in beta user schema
  • Secure middleware to enforce beta access at sign-up
  • Extensible with custom code generation and email logic
  • Built on top of the better-auth ecosystem

Installation

npm install @studiisapp/beta


Usage

import { betaPlugin } from '@studiisapp/beta';
plugins: [
betaPlugin({
enabled: true,
sendInviteLink: async ({ email, url, code }) => {
await sendBetaInviteEmail({
mailTo: email,
betaKey: code,
url,
});
},
betaSecret: process.env.BETA_SECRET || "",
}),
]

Endpoints

EndpointMethodDescription
/beta/add-userPOSTAdd a beta user or wildcard code
/beta/remove-userDELETERemove a beta user (not yet implemented)
/beta/sign-up/:codeGETCallback for beta code sign-up
/beta/sign-upPOSTComplete sign-up with beta code
/beta/checkGETCheck if a beta code is valid

How It Works

  • Beta Gating: The plugin enforces beta access at the sign-up endpoint using a secret header (X-Beta-Signup). Only requests with the correct secret are allowed to proceed.
  • Invite Flow: Admins can add users to the beta list, generating unique codes and sending invite links via email.
  • Wildcard Codes: Supports "wildcard" codes for broader access (e.g., public beta).
  • Custom Fields: Extend the beta user schema with additional fields as needed for your use case.
  • Secure Callbacks: Redirects and error handling are built-in for a smooth user experience.

Configuration Options

OptionTypeDescription
enabledbooleanEnable or disable the beta plugin
betaSecretstringSecret required in X-Beta-Signup header
sendInviteLinkfunctionCustom function to send invite emails
additionalFieldsobjectExtra fields to add to the beta user schema
generateCodefunctionCustom function to generate invite codes
schemaobjectCustom schema overrides

Error Codes

  • USER_EXISTS: User already exists in the beta
  • USER_NOT_FOUND: User does not have beta access
  • INVALID_CODE: Invalid or expired beta code

Extending

You can customize invite links, code generation, and schema fields to fit your application's needs. See the betaPlugin options for details.


License

MIT


Contributing

Contributions and feedback are welcome! Please open issues or pull requests for improvements or bug fixes.


Disclaimer

This plugin is designed for beta access use cases and should be integrated with proper security and validation according to your application's requirements.


For more details, see the source code and inline documentation.

About

better-auth beta plugin

Resources

Stars

4 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Force GitHub README to respect dark mode\n(function() {\n var style = document.createElement('style');\n style.textContent = '\n .markdown-body {\n color-scheme: dark light;\n }\n .markdown-body pre { background: #161b22 !important; }\n .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; }\n .markdown-body table th, .markdown-body table td { border-color: #30363d !important; }\n .markdown-body img { background: #0d1117; }\n .markdown-body blockquote { border-left-color: #8b949e; }\n .markdown-body hr { border-color: #30363d; }\n ';\n document.head.appendChild(style);\n})();", "GitHub Dark Mode README Fix"); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

Better Auth Beta Plugin

A flexible, secure, and extensible authentication plugin designed for beta access management. This plugin allows you to gate sign-ups behind beta codes, manage invite flows, and add custom fields or logic for your application's early access program.


Features

  • Restrict sign-up to users with valid beta codes or wildcard access
  • Add and remove beta users via API endpoints
  • Send custom invite links to users
  • Support for additional fields in beta user schema
  • Secure middleware to enforce beta access at sign-up
  • Extensible with custom code generation and email logic
  • Built on top of the better-auth ecosystem

Installation

npm install @studiisapp/beta


Usage

import { betaPlugin } from '@studiisapp/beta';
plugins: [
betaPlugin({
enabled: true,
sendInviteLink: async ({ email, url, code }) => {
await sendBetaInviteEmail({
mailTo: email,
betaKey: code,
url,
});
},
betaSecret: process.env.BETA_SECRET || "",
}),
]

Endpoints

EndpointMethodDescription
/beta/add-userPOSTAdd a beta user or wildcard code
/beta/remove-userDELETERemove a beta user (not yet implemented)
/beta/sign-up/:codeGETCallback for beta code sign-up
/beta/sign-upPOSTComplete sign-up with beta code
/beta/checkGETCheck if a beta code is valid

How It Works

  • Beta Gating: The plugin enforces beta access at the sign-up endpoint using a secret header (X-Beta-Signup). Only requests with the correct secret are allowed to proceed.
  • Invite Flow: Admins can add users to the beta list, generating unique codes and sending invite links via email.
  • Wildcard Codes: Supports "wildcard" codes for broader access (e.g., public beta).
  • Custom Fields: Extend the beta user schema with additional fields as needed for your use case.
  • Secure Callbacks: Redirects and error handling are built-in for a smooth user experience.

Configuration Options

OptionTypeDescription
enabledbooleanEnable or disable the beta plugin
betaSecretstringSecret required in X-Beta-Signup header
sendInviteLinkfunctionCustom function to send invite emails
additionalFieldsobjectExtra fields to add to the beta user schema
generateCodefunctionCustom function to generate invite codes
schemaobjectCustom schema overrides

Error Codes

  • USER_EXISTS: User already exists in the beta
  • USER_NOT_FOUND: User does not have beta access
  • INVALID_CODE: Invalid or expired beta code

Extending

You can customize invite links, code generation, and schema fields to fit your application's needs. See the betaPlugin options for details.


License

MIT


Contributing

Contributions and feedback are welcome! Please open issues or pull requests for improvements or bug fixes.


Disclaimer

This plugin is designed for beta access use cases and should be integrated with proper security and validation according to your application's requirements.


For more details, see the source code and inline documentation.

About

better-auth beta plugin

Resources

Stars

4 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Highlight search terms from Google/DuckDuckGo/Bing referrer\n(function() {\n var ref = document.referrer;\n var terms = [];\n \n if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) {\n var url = new URL(ref);\n var q = url.searchParams.get('q') || url.searchParams.get('p');\n if (q) {\n terms = q.split(/\\s+/).filter(function(t) { return t.length > 2; });\n }\n }\n \n if (terms.length === 0) return;\n \n var style = document.createElement('style');\n style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }';\n document.head.appendChild(style);\n \n function highlight(node) {\n if (node.nodeType === 3) { // text node\n var text = node.textContent;\n var found = false;\n terms.forEach(function(term) {\n var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\') + ')', 'gi');\n if (regex.test(text)) {\n found = true;\n var frag = document.createDocumentFragment();\n var parts = text.split(regex);\n parts.forEach(function(part, i) {\n if (i % 2 === 0) {\n frag.appendChild(document.createTextNode(part));\n } else {\n var span = document.createElement('span');\n span.className = 'userscript-highlight';\n span.textContent = part;\n frag.appendChild(span);\n }\n });\n node.parentNode.replaceChild(frag, node);\n }\n });\n } else if (node.nodeType === 1 && node.childNodes) { // element\n var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT'];\n if (!skipTags.includes(node.tagName)) {\n Array.from(node.childNodes).forEach(highlight);\n }\n }\n }\n \n highlight(document.body);\n \n // Re-highlight on dynamic content\n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1 || node.nodeType === 3) highlight(node);\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Highlight Search Terms"); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

Better Auth Beta Plugin

A flexible, secure, and extensible authentication plugin designed for beta access management. This plugin allows you to gate sign-ups behind beta codes, manage invite flows, and add custom fields or logic for your application's early access program.


Features

  • Restrict sign-up to users with valid beta codes or wildcard access
  • Add and remove beta users via API endpoints
  • Send custom invite links to users
  • Support for additional fields in beta user schema
  • Secure middleware to enforce beta access at sign-up
  • Extensible with custom code generation and email logic
  • Built on top of the better-auth ecosystem

Installation

npm install @studiisapp/beta


Usage

import { betaPlugin } from '@studiisapp/beta';
plugins: [
betaPlugin({
enabled: true,
sendInviteLink: async ({ email, url, code }) => {
await sendBetaInviteEmail({
mailTo: email,
betaKey: code,
url,
});
},
betaSecret: process.env.BETA_SECRET || "",
}),
]

Endpoints

EndpointMethodDescription
/beta/add-userPOSTAdd a beta user or wildcard code
/beta/remove-userDELETERemove a beta user (not yet implemented)
/beta/sign-up/:codeGETCallback for beta code sign-up
/beta/sign-upPOSTComplete sign-up with beta code
/beta/checkGETCheck if a beta code is valid

How It Works

  • Beta Gating: The plugin enforces beta access at the sign-up endpoint using a secret header (X-Beta-Signup). Only requests with the correct secret are allowed to proceed.
  • Invite Flow: Admins can add users to the beta list, generating unique codes and sending invite links via email.
  • Wildcard Codes: Supports "wildcard" codes for broader access (e.g., public beta).
  • Custom Fields: Extend the beta user schema with additional fields as needed for your use case.
  • Secure Callbacks: Redirects and error handling are built-in for a smooth user experience.

Configuration Options

OptionTypeDescription
enabledbooleanEnable or disable the beta plugin
betaSecretstringSecret required in X-Beta-Signup header
sendInviteLinkfunctionCustom function to send invite emails
additionalFieldsobjectExtra fields to add to the beta user schema
generateCodefunctionCustom function to generate invite codes
schemaobjectCustom schema overrides

Error Codes

  • USER_EXISTS: User already exists in the beta
  • USER_NOT_FOUND: User does not have beta access
  • INVALID_CODE: Invalid or expired beta code

Extending

You can customize invite links, code generation, and schema fields to fit your application's needs. See the betaPlugin options for details.


License

MIT


Contributing

Contributions and feedback are welcome! Please open issues or pull requests for improvements or bug fixes.


Disclaimer

This plugin is designed for beta access use cases and should be integrated with proper security and validation according to your application's requirements.


For more details, see the source code and inline documentation.

About

better-auth beta plugin

Resources

Stars

4 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Strip utm_, fbclid, gclid, etc. from all links on page\n(function() {\n var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content',\n 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid',\n 'ref', 'ref_src', 'source', 'medium', 'campaign'];\n \n function cleanUrl(url) {\n try {\n var u = new URL(url, window.location.origin);\n var changed = false;\n trackingParams.forEach(function(p) {\n if (u.searchParams.has(p)) {\n u.searchParams.delete(p);\n changed = true;\n }\n });\n return changed ? u.toString() : url;\n } catch (e) {\n return url;\n }\n }\n \n function cleanLinks() {\n document.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n \n cleanLinks();\n \n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1) {\n if (node.tagName === 'A') cleanLinks();\n node.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Remove Tracking Parameters from Links"); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + '
Skip to content

Repository files navigation

Better Auth Beta Plugin

A flexible, secure, and extensible authentication plugin designed for beta access management. This plugin allows you to gate sign-ups behind beta codes, manage invite flows, and add custom fields or logic for your application's early access program.


Features

  • Restrict sign-up to users with valid beta codes or wildcard access
  • Add and remove beta users via API endpoints
  • Send custom invite links to users
  • Support for additional fields in beta user schema
  • Secure middleware to enforce beta access at sign-up
  • Extensible with custom code generation and email logic
  • Built on top of the better-auth ecosystem

Installation

npm install @studiisapp/beta


Usage

import { betaPlugin } from '@studiisapp/beta';
plugins: [
betaPlugin({
enabled: true,
sendInviteLink: async ({ email, url, code }) => {
await sendBetaInviteEmail({
mailTo: email,
betaKey: code,
url,
});
},
betaSecret: process.env.BETA_SECRET || "",
}),
]

Endpoints

EndpointMethodDescription
/beta/add-userPOSTAdd a beta user or wildcard code
/beta/remove-userDELETERemove a beta user (not yet implemented)
/beta/sign-up/:codeGETCallback for beta code sign-up
/beta/sign-upPOSTComplete sign-up with beta code
/beta/checkGETCheck if a beta code is valid

How It Works

  • Beta Gating: The plugin enforces beta access at the sign-up endpoint using a secret header (X-Beta-Signup). Only requests with the correct secret are allowed to proceed.
  • Invite Flow: Admins can add users to the beta list, generating unique codes and sending invite links via email.
  • Wildcard Codes: Supports "wildcard" codes for broader access (e.g., public beta).
  • Custom Fields: Extend the beta user schema with additional fields as needed for your use case.
  • Secure Callbacks: Redirects and error handling are built-in for a smooth user experience.

Configuration Options

OptionTypeDescription
enabledbooleanEnable or disable the beta plugin
betaSecretstringSecret required in X-Beta-Signup header
sendInviteLinkfunctionCustom function to send invite emails
additionalFieldsobjectExtra fields to add to the beta user schema
generateCodefunctionCustom function to generate invite codes
schemaobjectCustom schema overrides

Error Codes

  • USER_EXISTS: User already exists in the beta
  • USER_NOT_FOUND: User does not have beta access
  • INVALID_CODE: Invalid or expired beta code

Extending

You can customize invite links, code generation, and schema fields to fit your application's needs. See the betaPlugin options for details.


License

MIT


Contributing

Contributions and feedback are welcome! Please open issues or pull requests for improvements or bug fixes.


Disclaimer

This plugin is designed for beta access use cases and should be integrated with proper security and validation according to your application's requirements.


For more details, see the source code and inline documentation.

About

better-auth beta plugin

Resources

Stars

4 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Auto-enable theater mode on YouTube\n(function() {\n function tryTheater() {\n var btn = document.querySelector('button[aria-label=\"Theater mode\"], ytd-player #player button[title=\"Theater mode\"]');\n if (btn && !btn.classList.contains('activated')) {\n btn.click();\n }\n }\n \n // Try immediately\n tryTheater();\n \n // Try after navigation (SPA)\n var lastUrl = location.href;\n setInterval(function() {\n if (location.href !== lastUrl) {\n lastUrl = location.href;\n setTimeout(tryTheater, 500);\n }\n }, 1000);\n \n // Also try on player load\n var observer = new MutationObserver(tryTheater);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "YouTube Theater Mode Default"); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

Better Auth Beta Plugin

A flexible, secure, and extensible authentication plugin designed for beta access management. This plugin allows you to gate sign-ups behind beta codes, manage invite flows, and add custom fields or logic for your application's early access program.


Features

  • Restrict sign-up to users with valid beta codes or wildcard access
  • Add and remove beta users via API endpoints
  • Send custom invite links to users
  • Support for additional fields in beta user schema
  • Secure middleware to enforce beta access at sign-up
  • Extensible with custom code generation and email logic
  • Built on top of the better-auth ecosystem

Installation

npm install @studiisapp/beta


Usage

import { betaPlugin } from '@studiisapp/beta';
plugins: [
betaPlugin({
enabled: true,
sendInviteLink: async ({ email, url, code }) => {
await sendBetaInviteEmail({
mailTo: email,
betaKey: code,
url,
});
},
betaSecret: process.env.BETA_SECRET || "",
}),
]

Endpoints

EndpointMethodDescription
/beta/add-userPOSTAdd a beta user or wildcard code
/beta/remove-userDELETERemove a beta user (not yet implemented)
/beta/sign-up/:codeGETCallback for beta code sign-up
/beta/sign-upPOSTComplete sign-up with beta code
/beta/checkGETCheck if a beta code is valid

How It Works

  • Beta Gating: The plugin enforces beta access at the sign-up endpoint using a secret header (X-Beta-Signup). Only requests with the correct secret are allowed to proceed.
  • Invite Flow: Admins can add users to the beta list, generating unique codes and sending invite links via email.
  • Wildcard Codes: Supports "wildcard" codes for broader access (e.g., public beta).
  • Custom Fields: Extend the beta user schema with additional fields as needed for your use case.
  • Secure Callbacks: Redirects and error handling are built-in for a smooth user experience.

Configuration Options

OptionTypeDescription
enabledbooleanEnable or disable the beta plugin
betaSecretstringSecret required in X-Beta-Signup header
sendInviteLinkfunctionCustom function to send invite emails
additionalFieldsobjectExtra fields to add to the beta user schema
generateCodefunctionCustom function to generate invite codes
schemaobjectCustom schema overrides

Error Codes

  • USER_EXISTS: User already exists in the beta
  • USER_NOT_FOUND: User does not have beta access
  • INVALID_CODE: Invalid or expired beta code

Extending

You can customize invite links, code generation, and schema fields to fit your application's needs. See the betaPlugin options for details.


License

MIT


Contributing

Contributions and feedback are welcome! Please open issues or pull requests for improvements or bug fixes.


Disclaimer

This plugin is designed for beta access use cases and should be integrated with proper security and validation according to your application's requirements.


For more details, see the source code and inline documentation.

About

better-auth beta plugin

Resources

Stars

4 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Remove or un-stick sticky/fixed headers that block content\n(function() {\n function unstick() {\n document.querySelectorAll('header, nav, [role=\"banner\"], .header, .navbar, .sticky, .fixed-top, [style*=\"position: fixed\"], [style*=\"position:sticky\"]').forEach(function(el) {\n if (el.style.position === 'fixed' || el.style.position === 'sticky' || \n getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') {\n el.style.position = 'static';\n el.style.top = 'auto';\n el.style.zIndex = 'auto';\n }\n });\n }\n \n unstick();\n \n var observer = new MutationObserver(unstick);\n observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] });\n})();", "Kill Sticky Headers"); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

Better Auth Beta Plugin

A flexible, secure, and extensible authentication plugin designed for beta access management. This plugin allows you to gate sign-ups behind beta codes, manage invite flows, and add custom fields or logic for your application's early access program.


Features

  • Restrict sign-up to users with valid beta codes or wildcard access
  • Add and remove beta users via API endpoints
  • Send custom invite links to users
  • Support for additional fields in beta user schema
  • Secure middleware to enforce beta access at sign-up
  • Extensible with custom code generation and email logic
  • Built on top of the better-auth ecosystem

Installation

npm install @studiisapp/beta


Usage

import { betaPlugin } from '@studiisapp/beta';
plugins: [
betaPlugin({
enabled: true,
sendInviteLink: async ({ email, url, code }) => {
await sendBetaInviteEmail({
mailTo: email,
betaKey: code,
url,
});
},
betaSecret: process.env.BETA_SECRET || "",
}),
]

Endpoints

EndpointMethodDescription
/beta/add-userPOSTAdd a beta user or wildcard code
/beta/remove-userDELETERemove a beta user (not yet implemented)
/beta/sign-up/:codeGETCallback for beta code sign-up
/beta/sign-upPOSTComplete sign-up with beta code
/beta/checkGETCheck if a beta code is valid

How It Works

  • Beta Gating: The plugin enforces beta access at the sign-up endpoint using a secret header (X-Beta-Signup). Only requests with the correct secret are allowed to proceed.
  • Invite Flow: Admins can add users to the beta list, generating unique codes and sending invite links via email.
  • Wildcard Codes: Supports "wildcard" codes for broader access (e.g., public beta).
  • Custom Fields: Extend the beta user schema with additional fields as needed for your use case.
  • Secure Callbacks: Redirects and error handling are built-in for a smooth user experience.

Configuration Options

OptionTypeDescription
enabledbooleanEnable or disable the beta plugin
betaSecretstringSecret required in X-Beta-Signup header
sendInviteLinkfunctionCustom function to send invite emails
additionalFieldsobjectExtra fields to add to the beta user schema
generateCodefunctionCustom function to generate invite codes
schemaobjectCustom schema overrides

Error Codes

  • USER_EXISTS: User already exists in the beta
  • USER_NOT_FOUND: User does not have beta access
  • INVALID_CODE: Invalid or expired beta code

Extending

You can customize invite links, code generation, and schema fields to fit your application's needs. See the betaPlugin options for details.


License

MIT


Contributing

Contributions and feedback are welcome! Please open issues or pull requests for improvements or bug fixes.


Disclaimer

This plugin is designed for beta access use cases and should be integrated with proper security and validation according to your application's requirements.


For more details, see the source code and inline documentation.

About

better-auth beta plugin

Resources

Stars

4 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Universal Dark Mode - works on any site\n(function() {\n var enabled = true;\n \n function applyDarkMode() {\n if (!enabled) return;\n \n // Create style element if it doesn't exist\n var style = document.getElementById('universal-dark-mode-style');\n if (!style) {\n style = document.createElement('style');\n style.id = 'universal-dark-mode-style';\n document.head.appendChild(style);\n }\n \n // Dark mode CSS - inverts colors but preserves images/video\n style.textContent = '\n /* Invert everything except media */\n html {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #1a1a2e !important;\n }\n \n /* Restore images, videos, iframes, canvas */\n img, video, iframe, canvas, svg, picture, [style*=\"background-image\"] {\n filter: invert(1) hue-rotate(180deg) !important;\n }\n \n /* Preserve specific elements that should not be inverted */\n .no-dark-mode, .no-dark-mode *,\n [data-theme=\"light\"], [data-theme=\"light\"],\n .ace_editor, .ace_editor *,\n .CodeMirror, .CodeMirror *,\n .monaco-editor, .monaco-editor *,\n .markdown-body pre, .markdown-body pre *,\n .highlight, .highlight *,\n pre code, pre code * {\n filter: none !important;\n }\n \n /* Fix common UI elements */\n .modal, .popup, .dropdown-menu, .tooltip, .popover {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #2d2d44 !important;\n border-color: #444 !important;\n }\n \n /* Scrollbars */\n ::-webkit-scrollbar { background: #1a1a2e !important; }\n ::-webkit-scrollbar-thumb { background: #444 !important; }\n ::-webkit-scrollbar-thumb:hover { background: #555 !important; }\n \n /* Selection */\n ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ';\n }\n \n function removeDarkMode() {\n var style = document.getElementById('universal-dark-mode-style');\n if (style) style.remove();\n }\n \n // Toggle with Alt+Shift+D\n document.addEventListener('keydown', function(e) {\n if (e.altKey && e.shiftKey && e.key === 'D') {\n e.preventDefault();\n enabled = !enabled;\n if (enabled) {\n applyDarkMode();\n console.log('[Universal Dark Mode] Enabled');\n } else {\n removeDarkMode();\n console.log('[Universal Dark Mode] Disabled');\n }\n }\n });\n \n // Apply on load\n applyDarkMode();\n \n // Re-apply on dynamic content\n var observer = new MutationObserver(function(mutations) {\n if (enabled && !document.getElementById('universal-dark-mode-style')) {\n applyDarkMode();\n }\n });\n observer.observe(document.head, { childList: true });\n \n console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle');\n})();", "Universal Dark Mode"); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })();
Skip to content

Repository files navigation

Better Auth Beta Plugin

A flexible, secure, and extensible authentication plugin designed for beta access management. This plugin allows you to gate sign-ups behind beta codes, manage invite flows, and add custom fields or logic for your application's early access program.


Features

  • Restrict sign-up to users with valid beta codes or wildcard access
  • Add and remove beta users via API endpoints
  • Send custom invite links to users
  • Support for additional fields in beta user schema
  • Secure middleware to enforce beta access at sign-up
  • Extensible with custom code generation and email logic
  • Built on top of the better-auth ecosystem

Installation

npm install @studiisapp/beta


Usage

import { betaPlugin } from '@studiisapp/beta';
plugins: [
betaPlugin({
enabled: true,
sendInviteLink: async ({ email, url, code }) => {
await sendBetaInviteEmail({
mailTo: email,
betaKey: code,
url,
});
},
betaSecret: process.env.BETA_SECRET || "",
}),
]

Endpoints

EndpointMethodDescription
/beta/add-userPOSTAdd a beta user or wildcard code
/beta/remove-userDELETERemove a beta user (not yet implemented)
/beta/sign-up/:codeGETCallback for beta code sign-up
/beta/sign-upPOSTComplete sign-up with beta code
/beta/checkGETCheck if a beta code is valid

How It Works

  • Beta Gating: The plugin enforces beta access at the sign-up endpoint using a secret header (X-Beta-Signup). Only requests with the correct secret are allowed to proceed.
  • Invite Flow: Admins can add users to the beta list, generating unique codes and sending invite links via email.
  • Wildcard Codes: Supports "wildcard" codes for broader access (e.g., public beta).
  • Custom Fields: Extend the beta user schema with additional fields as needed for your use case.
  • Secure Callbacks: Redirects and error handling are built-in for a smooth user experience.

Configuration Options

OptionTypeDescription
enabledbooleanEnable or disable the beta plugin
betaSecretstringSecret required in X-Beta-Signup header
sendInviteLinkfunctionCustom function to send invite emails
additionalFieldsobjectExtra fields to add to the beta user schema
generateCodefunctionCustom function to generate invite codes
schemaobjectCustom schema overrides

Error Codes

  • USER_EXISTS: User already exists in the beta
  • USER_NOT_FOUND: User does not have beta access
  • INVALID_CODE: Invalid or expired beta code

Extending

You can customize invite links, code generation, and schema fields to fit your application's needs. See the betaPlugin options for details.


License

MIT


Contributing

Contributions and feedback are welcome! Please open issues or pull requests for improvements or bug fixes.


Disclaimer

This plugin is designed for beta access use cases and should be integrated with proper security and validation according to your application's requirements.


For more details, see the source code and inline documentation.

About

better-auth beta plugin

Resources

Stars

4 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages