better_auth 0.1.1 → 0.2.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.
Files changed (107) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +6 -0
  3. data/README.md +106 -16
  4. data/lib/better_auth/adapters/base.rb +49 -0
  5. data/lib/better_auth/adapters/internal_adapter.rb +439 -0
  6. data/lib/better_auth/adapters/memory.rb +232 -0
  7. data/lib/better_auth/adapters/mongodb.rb +369 -0
  8. data/lib/better_auth/adapters/mssql.rb +42 -0
  9. data/lib/better_auth/adapters/mysql.rb +33 -0
  10. data/lib/better_auth/adapters/postgres.rb +17 -0
  11. data/lib/better_auth/adapters/sql.rb +425 -0
  12. data/lib/better_auth/adapters/sqlite.rb +20 -0
  13. data/lib/better_auth/api.rb +226 -0
  14. data/lib/better_auth/api_error.rb +53 -0
  15. data/lib/better_auth/auth.rb +42 -0
  16. data/lib/better_auth/configuration.rb +399 -0
  17. data/lib/better_auth/context.rb +210 -0
  18. data/lib/better_auth/cookies.rb +278 -0
  19. data/lib/better_auth/core.rb +37 -1
  20. data/lib/better_auth/crypto/jwe.rb +76 -0
  21. data/lib/better_auth/crypto.rb +191 -0
  22. data/lib/better_auth/database_hooks.rb +114 -0
  23. data/lib/better_auth/endpoint.rb +326 -0
  24. data/lib/better_auth/error.rb +52 -0
  25. data/lib/better_auth/middleware/origin_check.rb +128 -0
  26. data/lib/better_auth/password.rb +120 -0
  27. data/lib/better_auth/plugin.rb +129 -0
  28. data/lib/better_auth/plugin_context.rb +16 -0
  29. data/lib/better_auth/plugin_registry.rb +67 -0
  30. data/lib/better_auth/plugins/access.rb +87 -0
  31. data/lib/better_auth/plugins/additional_fields.rb +29 -0
  32. data/lib/better_auth/plugins/admin/schema.rb +28 -0
  33. data/lib/better_auth/plugins/admin.rb +518 -0
  34. data/lib/better_auth/plugins/anonymous.rb +198 -0
  35. data/lib/better_auth/plugins/api_key.rb +16 -0
  36. data/lib/better_auth/plugins/bearer.rb +128 -0
  37. data/lib/better_auth/plugins/captcha.rb +159 -0
  38. data/lib/better_auth/plugins/custom_session.rb +84 -0
  39. data/lib/better_auth/plugins/device_authorization.rb +302 -0
  40. data/lib/better_auth/plugins/email_otp.rb +536 -0
  41. data/lib/better_auth/plugins/expo.rb +88 -0
  42. data/lib/better_auth/plugins/generic_oauth.rb +780 -0
  43. data/lib/better_auth/plugins/have_i_been_pwned.rb +94 -0
  44. data/lib/better_auth/plugins/jwt.rb +482 -0
  45. data/lib/better_auth/plugins/last_login_method.rb +92 -0
  46. data/lib/better_auth/plugins/magic_link.rb +181 -0
  47. data/lib/better_auth/plugins/mcp.rb +342 -0
  48. data/lib/better_auth/plugins/multi_session.rb +173 -0
  49. data/lib/better_auth/plugins/oauth_protocol.rb +348 -0
  50. data/lib/better_auth/plugins/oauth_provider.rb +16 -0
  51. data/lib/better_auth/plugins/oauth_proxy.rb +257 -0
  52. data/lib/better_auth/plugins/oidc_provider.rb +597 -0
  53. data/lib/better_auth/plugins/one_tap.rb +154 -0
  54. data/lib/better_auth/plugins/one_time_token.rb +106 -0
  55. data/lib/better_auth/plugins/open_api.rb +489 -0
  56. data/lib/better_auth/plugins/organization/schema.rb +106 -0
  57. data/lib/better_auth/plugins/organization.rb +990 -0
  58. data/lib/better_auth/plugins/passkey.rb +16 -0
  59. data/lib/better_auth/plugins/phone_number.rb +321 -0
  60. data/lib/better_auth/plugins/scim.rb +16 -0
  61. data/lib/better_auth/plugins/siwe.rb +242 -0
  62. data/lib/better_auth/plugins/sso.rb +16 -0
  63. data/lib/better_auth/plugins/stripe.rb +16 -0
  64. data/lib/better_auth/plugins/two_factor.rb +514 -0
  65. data/lib/better_auth/plugins/username.rb +278 -0
  66. data/lib/better_auth/plugins.rb +46 -0
  67. data/lib/better_auth/rate_limiter.rb +215 -0
  68. data/lib/better_auth/request_ip.rb +70 -0
  69. data/lib/better_auth/router.rb +365 -0
  70. data/lib/better_auth/routes/account.rb +211 -0
  71. data/lib/better_auth/routes/email_verification.rb +108 -0
  72. data/lib/better_auth/routes/error.rb +102 -0
  73. data/lib/better_auth/routes/ok.rb +15 -0
  74. data/lib/better_auth/routes/password.rb +164 -0
  75. data/lib/better_auth/routes/session.rb +137 -0
  76. data/lib/better_auth/routes/sign_in.rb +90 -0
  77. data/lib/better_auth/routes/sign_out.rb +15 -0
  78. data/lib/better_auth/routes/sign_up.rb +145 -0
  79. data/lib/better_auth/routes/social.rb +188 -0
  80. data/lib/better_auth/routes/user.rb +193 -0
  81. data/lib/better_auth/schema/sql.rb +191 -0
  82. data/lib/better_auth/schema.rb +275 -0
  83. data/lib/better_auth/session.rb +122 -0
  84. data/lib/better_auth/session_store.rb +91 -0
  85. data/lib/better_auth/social_providers/apple.rb +55 -0
  86. data/lib/better_auth/social_providers/base.rb +67 -0
  87. data/lib/better_auth/social_providers/discord.rb +59 -0
  88. data/lib/better_auth/social_providers/github.rb +59 -0
  89. data/lib/better_auth/social_providers/gitlab.rb +54 -0
  90. data/lib/better_auth/social_providers/google.rb +65 -0
  91. data/lib/better_auth/social_providers/microsoft_entra_id.rb +65 -0
  92. data/lib/better_auth/social_providers.rb +9 -0
  93. data/lib/better_auth/version.rb +1 -1
  94. data/lib/better_auth.rb +87 -2
  95. metadata +218 -21
  96. data/.ruby-version +0 -1
  97. data/.standard.yml +0 -12
  98. data/.vscode/settings.json +0 -22
  99. data/AGENTS.md +0 -50
  100. data/CLAUDE.md +0 -1
  101. data/CODE_OF_CONDUCT.md +0 -173
  102. data/CONTRIBUTING.md +0 -187
  103. data/Gemfile +0 -12
  104. data/Makefile +0 -207
  105. data/Rakefile +0 -25
  106. data/SECURITY.md +0 -28
  107. data/docker-compose.yml +0 -63
@@ -0,0 +1,59 @@
1
+ # frozen_string_literal: true
2
+
3
+ module BetterAuth
4
+ module SocialProviders
5
+ module_function
6
+
7
+ def github(client_id:, client_secret:, scopes: ["read:user", "user:email"], **options)
8
+ {
9
+ id: "github",
10
+ name: "GitHub",
11
+ client_id: client_id,
12
+ client_secret: client_secret,
13
+ create_authorization_url: lambda do |data|
14
+ Base.authorization_url(options[:authorization_endpoint] || "https://github.com/login/oauth/authorize", {
15
+ client_id: client_id,
16
+ redirect_uri: data[:redirect_uri] || data[:redirectURI],
17
+ scope: data[:scopes] || scopes,
18
+ state: data[:state],
19
+ login_hint: data[:loginHint] || data[:login_hint],
20
+ prompt: options[:prompt]
21
+ })
22
+ end,
23
+ validate_authorization_code: lambda do |data|
24
+ Base.post_form("https://github.com/login/oauth/access_token", {
25
+ client_id: client_id,
26
+ client_secret: client_secret,
27
+ code: data[:code],
28
+ code_verifier: data[:code_verifier] || data[:codeVerifier],
29
+ redirect_uri: data[:redirect_uri] || data[:redirectURI]
30
+ })
31
+ end,
32
+ get_user_info: lambda do |tokens|
33
+ headers = {
34
+ "Authorization" => "Bearer #{Base.access_token(tokens)}",
35
+ "Accept" => "application/json",
36
+ "User-Agent" => "better-auth"
37
+ }
38
+ profile = Base.get_json("https://api.github.com/user", headers)
39
+ emails = Base.get_json("https://api.github.com/user/emails", headers)
40
+ primary = Array(emails).find { |email| email["email"] == profile["email"] } ||
41
+ Array(emails).find { |email| email["primary"] } ||
42
+ Array(emails).first ||
43
+ {}
44
+
45
+ {
46
+ user: {
47
+ id: profile["id"].to_s,
48
+ email: profile["email"] || primary["email"],
49
+ name: profile["name"] || profile["login"],
50
+ image: profile["avatar_url"],
51
+ emailVerified: !!primary["verified"]
52
+ },
53
+ data: profile
54
+ }
55
+ end
56
+ }
57
+ end
58
+ end
59
+ end
@@ -0,0 +1,54 @@
1
+ # frozen_string_literal: true
2
+
3
+ module BetterAuth
4
+ module SocialProviders
5
+ module_function
6
+
7
+ def gitlab(client_id:, client_secret:, issuer: "https://gitlab.com", scopes: ["read_user"], **options)
8
+ base = issuer.to_s.sub(%r{/+\z}, "")
9
+ {
10
+ id: "gitlab",
11
+ name: "GitLab",
12
+ client_id: client_id,
13
+ client_secret: client_secret,
14
+ create_authorization_url: lambda do |data|
15
+ Base.authorization_url(options[:authorization_endpoint] || "#{base}/oauth/authorize", {
16
+ client_id: client_id,
17
+ redirect_uri: data[:redirect_uri] || data[:redirectURI],
18
+ response_type: "code",
19
+ scope: data[:scopes] || scopes,
20
+ state: data[:state],
21
+ code_challenge: (data[:code_verifier] || data[:codeVerifier]) && Base.pkce_challenge(data[:code_verifier] || data[:codeVerifier]),
22
+ code_challenge_method: (data[:code_verifier] || data[:codeVerifier]) && "S256",
23
+ login_hint: data[:loginHint] || data[:login_hint]
24
+ })
25
+ end,
26
+ validate_authorization_code: lambda do |data|
27
+ Base.post_form("#{base}/oauth/token", {
28
+ client_id: client_id,
29
+ client_secret: client_secret,
30
+ code: data[:code],
31
+ code_verifier: data[:code_verifier] || data[:codeVerifier],
32
+ grant_type: "authorization_code",
33
+ redirect_uri: data[:redirect_uri] || data[:redirectURI]
34
+ })
35
+ end,
36
+ get_user_info: lambda do |tokens|
37
+ profile = Base.get_json("#{base}/api/v4/user", "Authorization" => "Bearer #{Base.access_token(tokens)}")
38
+ return nil if profile["state"] && profile["state"] != "active"
39
+
40
+ {
41
+ user: {
42
+ id: profile["id"].to_s,
43
+ email: profile["email"],
44
+ name: profile["name"] || profile["username"],
45
+ image: profile["avatar_url"],
46
+ emailVerified: !!profile["email_verified"]
47
+ },
48
+ data: profile
49
+ }
50
+ end
51
+ }
52
+ end
53
+ end
54
+ end
@@ -0,0 +1,65 @@
1
+ # frozen_string_literal: true
2
+
3
+ module BetterAuth
4
+ module SocialProviders
5
+ module_function
6
+
7
+ def google(client_id:, client_secret:, scopes: ["openid", "email", "profile"], **options)
8
+ {
9
+ id: "google",
10
+ name: "Google",
11
+ client_id: client_id,
12
+ client_secret: client_secret,
13
+ create_authorization_url: lambda do |data|
14
+ verifier = data[:code_verifier] || data[:codeVerifier]
15
+ Base.authorization_url(options[:authorization_endpoint] || "https://accounts.google.com/o/oauth2/v2/auth", {
16
+ client_id: client_id,
17
+ redirect_uri: data[:redirect_uri] || data[:redirectURI],
18
+ response_type: "code",
19
+ scope: data[:scopes] || scopes,
20
+ state: data[:state],
21
+ code_challenge: verifier && Base.pkce_challenge(verifier),
22
+ code_challenge_method: verifier && "S256",
23
+ login_hint: data[:loginHint] || data[:login_hint],
24
+ prompt: options[:prompt],
25
+ access_type: options[:access_type] || options[:accessType] || "offline",
26
+ display: data[:display] || options[:display],
27
+ hd: options[:hd],
28
+ include_granted_scopes: "true"
29
+ })
30
+ end,
31
+ validate_authorization_code: lambda do |data|
32
+ Base.post_form("https://oauth2.googleapis.com/token", {
33
+ client_id: client_id,
34
+ client_secret: client_secret,
35
+ code: data[:code],
36
+ code_verifier: data[:code_verifier] || data[:codeVerifier],
37
+ grant_type: "authorization_code",
38
+ redirect_uri: data[:redirect_uri] || data[:redirectURI]
39
+ })
40
+ end,
41
+ get_user_info: lambda do |tokens|
42
+ profile = if Base.id_token(tokens)
43
+ Base.decode_jwt_payload(Base.id_token(tokens))
44
+ else
45
+ Base.get_json(
46
+ "https://openidconnect.googleapis.com/v1/userinfo",
47
+ "Authorization" => "Bearer #{Base.access_token(tokens)}"
48
+ )
49
+ end
50
+
51
+ {
52
+ user: {
53
+ id: profile["sub"],
54
+ email: profile["email"],
55
+ name: profile["name"],
56
+ image: profile["picture"],
57
+ emailVerified: !!profile["email_verified"]
58
+ },
59
+ data: profile
60
+ }
61
+ end
62
+ }
63
+ end
64
+ end
65
+ end
@@ -0,0 +1,65 @@
1
+ # frozen_string_literal: true
2
+
3
+ module BetterAuth
4
+ module SocialProviders
5
+ module_function
6
+
7
+ def microsoft_entra_id(client_id:, client_secret:, tenant_id: "common", scopes: ["openid", "profile", "email", "User.Read", "offline_access"], **options)
8
+ authority = options[:authority] || "https://login.microsoftonline.com"
9
+ base = "#{authority.to_s.sub(%r{/+\z}, "")}/#{tenant_id}/oauth2/v2.0"
10
+ {
11
+ id: "microsoft-entra-id",
12
+ name: "Microsoft Entra ID",
13
+ client_id: client_id,
14
+ client_secret: client_secret,
15
+ create_authorization_url: lambda do |data|
16
+ verifier = data[:code_verifier] || data[:codeVerifier]
17
+ Base.authorization_url(options[:authorization_endpoint] || "#{base}/authorize", {
18
+ client_id: client_id,
19
+ redirect_uri: data[:redirect_uri] || data[:redirectURI],
20
+ response_type: "code",
21
+ scope: data[:scopes] || scopes,
22
+ state: data[:state],
23
+ code_challenge: verifier && Base.pkce_challenge(verifier),
24
+ code_challenge_method: verifier && "S256",
25
+ login_hint: data[:loginHint] || data[:login_hint],
26
+ prompt: options[:prompt]
27
+ })
28
+ end,
29
+ validate_authorization_code: lambda do |data|
30
+ Base.post_form("#{base}/token", {
31
+ client_id: client_id,
32
+ client_secret: client_secret,
33
+ code: data[:code],
34
+ code_verifier: data[:code_verifier] || data[:codeVerifier],
35
+ grant_type: "authorization_code",
36
+ redirect_uri: data[:redirect_uri] || data[:redirectURI]
37
+ })
38
+ end,
39
+ get_user_info: lambda do |tokens|
40
+ profile = Base.id_token(tokens) ? Base.decode_jwt_payload(Base.id_token(tokens)) : {}
41
+ profile = Base.get_json("https://graph.microsoft.com/v1.0/me", "Authorization" => "Bearer #{Base.access_token(tokens)}") if profile.empty?
42
+ email = profile["email"] || profile["mail"] || profile["userPrincipalName"] || profile["preferred_username"]
43
+
44
+ {
45
+ user: {
46
+ id: profile["sub"] || profile["id"] || profile["oid"],
47
+ email: email,
48
+ name: profile["name"] || profile["displayName"],
49
+ image: profile["picture"],
50
+ emailVerified: microsoft_email_verified?(profile, email)
51
+ },
52
+ data: profile
53
+ }
54
+ end
55
+ }
56
+ end
57
+
58
+ def microsoft_email_verified?(profile, email)
59
+ return !!profile["email_verified"] if profile.key?("email_verified")
60
+
61
+ Array(profile["verified_primary_email"]).include?(email) ||
62
+ Array(profile["verified_secondary_email"]).include?(email)
63
+ end
64
+ end
65
+ end
@@ -0,0 +1,9 @@
1
+ # frozen_string_literal: true
2
+
3
+ require_relative "social_providers/base"
4
+ require_relative "social_providers/google"
5
+ require_relative "social_providers/github"
6
+ require_relative "social_providers/gitlab"
7
+ require_relative "social_providers/discord"
8
+ require_relative "social_providers/apple"
9
+ require_relative "social_providers/microsoft_entra_id"
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module BetterAuth
4
- VERSION = "0.1.1"
4
+ VERSION = "0.2.0"
5
5
  end
data/lib/better_auth.rb CHANGED
@@ -2,8 +2,93 @@
2
2
 
3
3
  require_relative "better_auth/version"
4
4
  require_relative "better_auth/core"
5
+ require_relative "better_auth/error"
6
+ require_relative "better_auth/api_error"
7
+ require_relative "better_auth/crypto"
8
+ require_relative "better_auth/password"
9
+ require_relative "better_auth/plugin"
10
+ require_relative "better_auth/configuration"
11
+ require_relative "better_auth/schema"
12
+ require_relative "better_auth/schema/sql"
13
+ require_relative "better_auth/adapters/base"
14
+ require_relative "better_auth/adapters/memory"
15
+ require_relative "better_auth/adapters/sql"
16
+ require_relative "better_auth/adapters/postgres"
17
+ require_relative "better_auth/adapters/mysql"
18
+ require_relative "better_auth/adapters/sqlite"
19
+ require_relative "better_auth/adapters/mssql"
20
+ require_relative "better_auth/adapters/mongodb"
21
+ require_relative "better_auth/database_hooks"
22
+ require_relative "better_auth/adapters/internal_adapter"
23
+ require_relative "better_auth/context"
24
+ require_relative "better_auth/plugin_context"
25
+ require_relative "better_auth/plugin_registry"
26
+ require_relative "better_auth/plugins"
27
+ require_relative "better_auth/plugins/additional_fields"
28
+ require_relative "better_auth/plugins/custom_session"
29
+ require_relative "better_auth/plugins/multi_session"
30
+ require_relative "better_auth/plugins/last_login_method"
31
+ require_relative "better_auth/plugins/bearer"
32
+ require_relative "better_auth/plugins/jwt"
33
+ require_relative "better_auth/plugins/open_api"
34
+ require_relative "better_auth/plugins/access"
35
+ require_relative "better_auth/plugins/username"
36
+ require_relative "better_auth/plugins/anonymous"
37
+ require_relative "better_auth/plugins/magic_link"
38
+ require_relative "better_auth/plugins/email_otp"
39
+ require_relative "better_auth/plugins/phone_number"
40
+ require_relative "better_auth/plugins/one_time_token"
41
+ require_relative "better_auth/plugins/one_tap"
42
+ require_relative "better_auth/plugins/siwe"
43
+ require_relative "better_auth/plugins/generic_oauth"
44
+ require_relative "better_auth/plugins/oauth_proxy"
45
+ require_relative "better_auth/plugins/passkey"
46
+ require_relative "better_auth/plugins/organization/schema"
47
+ require_relative "better_auth/plugins/organization"
48
+ require_relative "better_auth/plugins/admin/schema"
49
+ require_relative "better_auth/plugins/admin"
50
+ require_relative "better_auth/plugins/oauth_protocol"
51
+ require_relative "better_auth/plugins/oidc_provider"
52
+ require_relative "better_auth/plugins/oauth_provider"
53
+ require_relative "better_auth/plugins/device_authorization"
54
+ require_relative "better_auth/plugins/mcp"
55
+ require_relative "better_auth/plugins/two_factor"
56
+ require_relative "better_auth/plugins/captcha"
57
+ require_relative "better_auth/plugins/have_i_been_pwned"
58
+ require_relative "better_auth/plugins/api_key"
59
+ require_relative "better_auth/plugins/sso"
60
+ require_relative "better_auth/plugins/scim"
61
+ require_relative "better_auth/social_providers"
62
+ %w[
63
+ better_auth/plugins/stripe
64
+ better_auth/plugins/expo
65
+ ].each do |optional_plugin|
66
+ require_relative optional_plugin if File.file?(File.expand_path("#{optional_plugin}.rb", __dir__))
67
+ end
68
+ require_relative "better_auth/session_store"
69
+ require_relative "better_auth/cookies"
70
+ require_relative "better_auth/session"
71
+ require_relative "better_auth/endpoint"
72
+ require_relative "better_auth/routes/ok"
73
+ require_relative "better_auth/routes/error"
74
+ require_relative "better_auth/routes/sign_up"
75
+ require_relative "better_auth/routes/sign_in"
76
+ require_relative "better_auth/routes/sign_out"
77
+ require_relative "better_auth/routes/session"
78
+ require_relative "better_auth/routes/password"
79
+ require_relative "better_auth/routes/email_verification"
80
+ require_relative "better_auth/routes/user"
81
+ require_relative "better_auth/routes/account"
82
+ require_relative "better_auth/routes/social"
83
+ require_relative "better_auth/api"
84
+ require_relative "better_auth/rate_limiter"
85
+ require_relative "better_auth/request_ip"
86
+ require_relative "better_auth/middleware/origin_check"
87
+ require_relative "better_auth/router"
88
+ require_relative "better_auth/auth"
5
89
 
6
90
  module BetterAuth
7
- # Main entry point for Better Auth
8
- # This module provides the core authentication functionality
91
+ def self.auth(options = {})
92
+ Auth.new(options)
93
+ end
9
94
  end
metadata CHANGED
@@ -1,15 +1,34 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: better_auth
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.1
4
+ version: 0.2.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Sebastian Sala
8
- autorequire:
9
8
  bindir: exe
10
9
  cert_chain: []
11
- date: 2026-03-23 00:00:00.000000000 Z
10
+ date: 1980-01-02 00:00:00.000000000 Z
12
11
  dependencies:
12
+ - !ruby/object:Gem::Dependency
13
+ name: base64
14
+ requirement: !ruby/object:Gem::Requirement
15
+ requirements:
16
+ - - ">="
17
+ - !ruby/object:Gem::Version
18
+ version: '0.2'
19
+ - - "<"
20
+ - !ruby/object:Gem::Version
21
+ version: '1.0'
22
+ type: :runtime
23
+ prerelease: false
24
+ version_requirements: !ruby/object:Gem::Requirement
25
+ requirements:
26
+ - - ">="
27
+ - !ruby/object:Gem::Version
28
+ version: '0.2'
29
+ - - "<"
30
+ - !ruby/object:Gem::Version
31
+ version: '1.0'
13
32
  - !ruby/object:Gem::Dependency
14
33
  name: rack
15
34
  requirement: !ruby/object:Gem::Requirement
@@ -53,19 +72,25 @@ dependencies:
53
72
  - !ruby/object:Gem::Version
54
73
  version: '2.8'
55
74
  - !ruby/object:Gem::Dependency
56
- name: bcrypt
75
+ name: jwe
57
76
  requirement: !ruby/object:Gem::Requirement
58
77
  requirements:
59
78
  - - "~>"
60
79
  - !ruby/object:Gem::Version
61
- version: '3.1'
80
+ version: '1.1'
81
+ - - ">="
82
+ - !ruby/object:Gem::Version
83
+ version: 1.1.1
62
84
  type: :runtime
63
85
  prerelease: false
64
86
  version_requirements: !ruby/object:Gem::Requirement
65
87
  requirements:
66
88
  - - "~>"
67
89
  - !ruby/object:Gem::Version
68
- version: '3.1'
90
+ version: '1.1'
91
+ - - ">="
92
+ - !ruby/object:Gem::Version
93
+ version: 1.1.1
69
94
  - !ruby/object:Gem::Dependency
70
95
  name: bundler
71
96
  requirement: !ruby/object:Gem::Requirement
@@ -80,6 +105,20 @@ dependencies:
80
105
  - - "~>"
81
106
  - !ruby/object:Gem::Version
82
107
  version: '2.5'
108
+ - !ruby/object:Gem::Dependency
109
+ name: bcrypt
110
+ requirement: !ruby/object:Gem::Requirement
111
+ requirements:
112
+ - - "~>"
113
+ - !ruby/object:Gem::Version
114
+ version: '3.1'
115
+ type: :development
116
+ prerelease: false
117
+ version_requirements: !ruby/object:Gem::Requirement
118
+ requirements:
119
+ - - "~>"
120
+ - !ruby/object:Gem::Version
121
+ version: '3.1'
83
122
  - !ruby/object:Gem::Dependency
84
123
  name: minitest
85
124
  requirement: !ruby/object:Gem::Requirement
@@ -136,6 +175,90 @@ dependencies:
136
175
  - - "~>"
137
176
  - !ruby/object:Gem::Version
138
177
  version: '0.22'
178
+ - !ruby/object:Gem::Dependency
179
+ name: pg
180
+ requirement: !ruby/object:Gem::Requirement
181
+ requirements:
182
+ - - "~>"
183
+ - !ruby/object:Gem::Version
184
+ version: '1.5'
185
+ type: :development
186
+ prerelease: false
187
+ version_requirements: !ruby/object:Gem::Requirement
188
+ requirements:
189
+ - - "~>"
190
+ - !ruby/object:Gem::Version
191
+ version: '1.5'
192
+ - !ruby/object:Gem::Dependency
193
+ name: mysql2
194
+ requirement: !ruby/object:Gem::Requirement
195
+ requirements:
196
+ - - "~>"
197
+ - !ruby/object:Gem::Version
198
+ version: '0.5'
199
+ type: :development
200
+ prerelease: false
201
+ version_requirements: !ruby/object:Gem::Requirement
202
+ requirements:
203
+ - - "~>"
204
+ - !ruby/object:Gem::Version
205
+ version: '0.5'
206
+ - !ruby/object:Gem::Dependency
207
+ name: sqlite3
208
+ requirement: !ruby/object:Gem::Requirement
209
+ requirements:
210
+ - - "~>"
211
+ - !ruby/object:Gem::Version
212
+ version: '2.0'
213
+ type: :development
214
+ prerelease: false
215
+ version_requirements: !ruby/object:Gem::Requirement
216
+ requirements:
217
+ - - "~>"
218
+ - !ruby/object:Gem::Version
219
+ version: '2.0'
220
+ - !ruby/object:Gem::Dependency
221
+ name: mongo
222
+ requirement: !ruby/object:Gem::Requirement
223
+ requirements:
224
+ - - "~>"
225
+ - !ruby/object:Gem::Version
226
+ version: '2.21'
227
+ type: :development
228
+ prerelease: false
229
+ version_requirements: !ruby/object:Gem::Requirement
230
+ requirements:
231
+ - - "~>"
232
+ - !ruby/object:Gem::Version
233
+ version: '2.21'
234
+ - !ruby/object:Gem::Dependency
235
+ name: sequel
236
+ requirement: !ruby/object:Gem::Requirement
237
+ requirements:
238
+ - - "~>"
239
+ - !ruby/object:Gem::Version
240
+ version: '5.83'
241
+ type: :development
242
+ prerelease: false
243
+ version_requirements: !ruby/object:Gem::Requirement
244
+ requirements:
245
+ - - "~>"
246
+ - !ruby/object:Gem::Version
247
+ version: '5.83'
248
+ - !ruby/object:Gem::Dependency
249
+ name: tiny_tds
250
+ requirement: !ruby/object:Gem::Requirement
251
+ requirements:
252
+ - - "~>"
253
+ - !ruby/object:Gem::Version
254
+ version: '2.1'
255
+ type: :development
256
+ prerelease: false
257
+ version_requirements: !ruby/object:Gem::Requirement
258
+ requirements:
259
+ - - "~>"
260
+ - !ruby/object:Gem::Version
261
+ version: '2.1'
139
262
  description: Better Auth is a comprehensive, framework-agnostic authentication library
140
263
  for Ruby. It provides a complete set of features out of the box with a plugin ecosystem.
141
264
  email:
@@ -144,23 +267,99 @@ executables: []
144
267
  extensions: []
145
268
  extra_rdoc_files: []
146
269
  files:
147
- - ".ruby-version"
148
- - ".standard.yml"
149
- - ".vscode/settings.json"
150
- - AGENTS.md
151
270
  - CHANGELOG.md
152
- - CLAUDE.md
153
- - CODE_OF_CONDUCT.md
154
- - CONTRIBUTING.md
155
- - Gemfile
156
271
  - LICENSE.md
157
- - Makefile
158
272
  - README.md
159
- - Rakefile
160
- - SECURITY.md
161
- - docker-compose.yml
162
273
  - lib/better_auth.rb
274
+ - lib/better_auth/adapters/base.rb
275
+ - lib/better_auth/adapters/internal_adapter.rb
276
+ - lib/better_auth/adapters/memory.rb
277
+ - lib/better_auth/adapters/mongodb.rb
278
+ - lib/better_auth/adapters/mssql.rb
279
+ - lib/better_auth/adapters/mysql.rb
280
+ - lib/better_auth/adapters/postgres.rb
281
+ - lib/better_auth/adapters/sql.rb
282
+ - lib/better_auth/adapters/sqlite.rb
283
+ - lib/better_auth/api.rb
284
+ - lib/better_auth/api_error.rb
285
+ - lib/better_auth/auth.rb
286
+ - lib/better_auth/configuration.rb
287
+ - lib/better_auth/context.rb
288
+ - lib/better_auth/cookies.rb
163
289
  - lib/better_auth/core.rb
290
+ - lib/better_auth/crypto.rb
291
+ - lib/better_auth/crypto/jwe.rb
292
+ - lib/better_auth/database_hooks.rb
293
+ - lib/better_auth/endpoint.rb
294
+ - lib/better_auth/error.rb
295
+ - lib/better_auth/middleware/origin_check.rb
296
+ - lib/better_auth/password.rb
297
+ - lib/better_auth/plugin.rb
298
+ - lib/better_auth/plugin_context.rb
299
+ - lib/better_auth/plugin_registry.rb
300
+ - lib/better_auth/plugins.rb
301
+ - lib/better_auth/plugins/access.rb
302
+ - lib/better_auth/plugins/additional_fields.rb
303
+ - lib/better_auth/plugins/admin.rb
304
+ - lib/better_auth/plugins/admin/schema.rb
305
+ - lib/better_auth/plugins/anonymous.rb
306
+ - lib/better_auth/plugins/api_key.rb
307
+ - lib/better_auth/plugins/bearer.rb
308
+ - lib/better_auth/plugins/captcha.rb
309
+ - lib/better_auth/plugins/custom_session.rb
310
+ - lib/better_auth/plugins/device_authorization.rb
311
+ - lib/better_auth/plugins/email_otp.rb
312
+ - lib/better_auth/plugins/expo.rb
313
+ - lib/better_auth/plugins/generic_oauth.rb
314
+ - lib/better_auth/plugins/have_i_been_pwned.rb
315
+ - lib/better_auth/plugins/jwt.rb
316
+ - lib/better_auth/plugins/last_login_method.rb
317
+ - lib/better_auth/plugins/magic_link.rb
318
+ - lib/better_auth/plugins/mcp.rb
319
+ - lib/better_auth/plugins/multi_session.rb
320
+ - lib/better_auth/plugins/oauth_protocol.rb
321
+ - lib/better_auth/plugins/oauth_provider.rb
322
+ - lib/better_auth/plugins/oauth_proxy.rb
323
+ - lib/better_auth/plugins/oidc_provider.rb
324
+ - lib/better_auth/plugins/one_tap.rb
325
+ - lib/better_auth/plugins/one_time_token.rb
326
+ - lib/better_auth/plugins/open_api.rb
327
+ - lib/better_auth/plugins/organization.rb
328
+ - lib/better_auth/plugins/organization/schema.rb
329
+ - lib/better_auth/plugins/passkey.rb
330
+ - lib/better_auth/plugins/phone_number.rb
331
+ - lib/better_auth/plugins/scim.rb
332
+ - lib/better_auth/plugins/siwe.rb
333
+ - lib/better_auth/plugins/sso.rb
334
+ - lib/better_auth/plugins/stripe.rb
335
+ - lib/better_auth/plugins/two_factor.rb
336
+ - lib/better_auth/plugins/username.rb
337
+ - lib/better_auth/rate_limiter.rb
338
+ - lib/better_auth/request_ip.rb
339
+ - lib/better_auth/router.rb
340
+ - lib/better_auth/routes/account.rb
341
+ - lib/better_auth/routes/email_verification.rb
342
+ - lib/better_auth/routes/error.rb
343
+ - lib/better_auth/routes/ok.rb
344
+ - lib/better_auth/routes/password.rb
345
+ - lib/better_auth/routes/session.rb
346
+ - lib/better_auth/routes/sign_in.rb
347
+ - lib/better_auth/routes/sign_out.rb
348
+ - lib/better_auth/routes/sign_up.rb
349
+ - lib/better_auth/routes/social.rb
350
+ - lib/better_auth/routes/user.rb
351
+ - lib/better_auth/schema.rb
352
+ - lib/better_auth/schema/sql.rb
353
+ - lib/better_auth/session.rb
354
+ - lib/better_auth/session_store.rb
355
+ - lib/better_auth/social_providers.rb
356
+ - lib/better_auth/social_providers/apple.rb
357
+ - lib/better_auth/social_providers/base.rb
358
+ - lib/better_auth/social_providers/discord.rb
359
+ - lib/better_auth/social_providers/github.rb
360
+ - lib/better_auth/social_providers/gitlab.rb
361
+ - lib/better_auth/social_providers/google.rb
362
+ - lib/better_auth/social_providers/microsoft_entra_id.rb
164
363
  - lib/better_auth/version.rb
165
364
  homepage: https://github.com/sebasxsala/better-auth
166
365
  licenses:
@@ -170,7 +369,6 @@ metadata:
170
369
  source_code_uri: https://github.com/sebasxsala/better-auth
171
370
  changelog_uri: https://github.com/sebasxsala/better-auth/blob/main/packages/better_auth/CHANGELOG.md
172
371
  bug_tracker_uri: https://github.com/sebasxsala/better-auth/issues
173
- post_install_message:
174
372
  rdoc_options: []
175
373
  require_paths:
176
374
  - lib
@@ -185,8 +383,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
185
383
  - !ruby/object:Gem::Version
186
384
  version: '0'
187
385
  requirements: []
188
- rubygems_version: 3.5.22
189
- signing_key:
386
+ rubygems_version: 3.6.9
190
387
  specification_version: 4
191
388
  summary: Comprehensive authentication framework for Ruby/Rack
192
389
  test_files: []
data/.ruby-version DELETED
@@ -1 +0,0 @@
1
- 3.3.10
data/.standard.yml DELETED
@@ -1,12 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- # StandardRB Configuration
4
- # https://github.com/standardrb/standard
5
-
6
- ignore:
7
- - 'vendor/**/*'
8
- - 'node_modules/**/*'
9
- - 'tmp/**/*'
10
- - 'coverage/**/*'
11
- - 'doc/**/*'
12
- - 'pkg/**/*'