better_auth-redis-storage 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.
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA256:
3
+ metadata.gz: fec3e6f91d2678257084d87d27d230b401dde8dc9c4d852e47d5a0bc5c910de8
4
+ data.tar.gz: 5eee5736114ba877ba5e7308ba5da7d400a08686b9b46d01a98e57fda4bb24cc
5
+ SHA512:
6
+ metadata.gz: 3890b8e529be3471125825d684da70a0280988c6c554683bfbabba6cc26612ca0d3508377ae49592c323101b2f52feb363807e996236b2c2a76640a949253226
7
+ data.tar.gz: bf77b96b0f29ad9c86a4ae11fc00c92a6a6a9f28aa8e02d233c4ae38a39285a63bd126b90c1b41dadc4490f993fdc88f1d0829e8b5af8fa27cff157d5f8e56fe
data/CHANGELOG.md ADDED
@@ -0,0 +1,6 @@
1
+ # Changelog
2
+
3
+ ## 0.1.0
4
+
5
+ - Initial Redis secondary storage package for Better Auth Ruby.
6
+
data/README.md ADDED
@@ -0,0 +1,31 @@
1
+ # better_auth-redis-storage
2
+
3
+ Redis secondary storage package for Better Auth Ruby.
4
+
5
+ ## Installation
6
+
7
+ Add the gem and require the package before configuring auth:
8
+
9
+ ```ruby
10
+ gem "better_auth-redis-storage"
11
+ ```
12
+
13
+ ```ruby
14
+ require "redis"
15
+ require "better_auth/redis_storage"
16
+
17
+ redis = Redis.new(url: ENV.fetch("REDIS_URL"))
18
+
19
+ auth = BetterAuth.auth(
20
+ secret: ENV.fetch("BETTER_AUTH_SECRET"),
21
+ database: :memory,
22
+ secondary_storage: BetterAuth::RedisStorage.new(client: redis)
23
+ )
24
+ ```
25
+
26
+ ## Notes
27
+
28
+ This package depends on the official `redis` gem. Keeping Redis storage outside `better_auth` avoids installing Redis client dependencies for applications that do not use secondary storage.
29
+
30
+ `secondary_storage` is used by Better Auth for session payload storage, active-session indexes, and rate limiting when `rate_limit: { storage: "secondary-storage" }` is configured.
31
+
@@ -0,0 +1,7 @@
1
+ # frozen_string_literal: true
2
+
3
+ module BetterAuth
4
+ class RedisStorage
5
+ VERSION = "0.1.0"
6
+ end
7
+ end
@@ -0,0 +1,59 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "better_auth"
4
+ require_relative "redis_storage/version"
5
+
6
+ module BetterAuth
7
+ class RedisStorage
8
+ DEFAULT_KEY_PREFIX = "better-auth:"
9
+
10
+ attr_reader :client, :key_prefix
11
+
12
+ def self.build(client:, key_prefix: DEFAULT_KEY_PREFIX)
13
+ new(client: client, key_prefix: key_prefix)
14
+ end
15
+
16
+ def initialize(client:, key_prefix: DEFAULT_KEY_PREFIX)
17
+ @client = client
18
+ @key_prefix = key_prefix.to_s
19
+ end
20
+
21
+ def get(key)
22
+ client.get(prefix_key(key))
23
+ end
24
+
25
+ def set(key, value, ttl = nil)
26
+ prefixed_key = prefix_key(key)
27
+ if ttl&.to_i&.positive?
28
+ client.setex(prefixed_key, ttl.to_i, value)
29
+ else
30
+ client.set(prefixed_key, value)
31
+ end
32
+ end
33
+
34
+ def delete(key)
35
+ client.del(prefix_key(key))
36
+ end
37
+
38
+ def list_keys
39
+ client.keys("#{key_prefix}*").map { |key| unprefix_key(key) }
40
+ end
41
+
42
+ def clear
43
+ keys = client.keys("#{key_prefix}*")
44
+ client.del(*keys) unless keys.empty?
45
+ end
46
+
47
+ alias_method :listKeys, :list_keys
48
+
49
+ private
50
+
51
+ def prefix_key(key)
52
+ "#{key_prefix}#{key}"
53
+ end
54
+
55
+ def unprefix_key(key)
56
+ key.sub(/\A#{Regexp.escape(key_prefix)}/, "")
57
+ end
58
+ end
59
+ end
metadata ADDED
@@ -0,0 +1,139 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: better_auth-redis-storage
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.1.0
5
+ platform: ruby
6
+ authors:
7
+ - Sebastian Sala
8
+ bindir: bin
9
+ cert_chain: []
10
+ date: 1980-01-02 00:00:00.000000000 Z
11
+ dependencies:
12
+ - !ruby/object:Gem::Dependency
13
+ name: better_auth
14
+ requirement: !ruby/object:Gem::Requirement
15
+ requirements:
16
+ - - "~>"
17
+ - !ruby/object:Gem::Version
18
+ version: '0.1'
19
+ type: :runtime
20
+ prerelease: false
21
+ version_requirements: !ruby/object:Gem::Requirement
22
+ requirements:
23
+ - - "~>"
24
+ - !ruby/object:Gem::Version
25
+ version: '0.1'
26
+ - !ruby/object:Gem::Dependency
27
+ name: redis
28
+ requirement: !ruby/object:Gem::Requirement
29
+ requirements:
30
+ - - ">="
31
+ - !ruby/object:Gem::Version
32
+ version: '5'
33
+ - - "<"
34
+ - !ruby/object:Gem::Version
35
+ version: '6'
36
+ type: :runtime
37
+ prerelease: false
38
+ version_requirements: !ruby/object:Gem::Requirement
39
+ requirements:
40
+ - - ">="
41
+ - !ruby/object:Gem::Version
42
+ version: '5'
43
+ - - "<"
44
+ - !ruby/object:Gem::Version
45
+ version: '6'
46
+ - !ruby/object:Gem::Dependency
47
+ name: bundler
48
+ requirement: !ruby/object:Gem::Requirement
49
+ requirements:
50
+ - - "~>"
51
+ - !ruby/object:Gem::Version
52
+ version: '2.5'
53
+ type: :development
54
+ prerelease: false
55
+ version_requirements: !ruby/object:Gem::Requirement
56
+ requirements:
57
+ - - "~>"
58
+ - !ruby/object:Gem::Version
59
+ version: '2.5'
60
+ - !ruby/object:Gem::Dependency
61
+ name: minitest
62
+ requirement: !ruby/object:Gem::Requirement
63
+ requirements:
64
+ - - "~>"
65
+ - !ruby/object:Gem::Version
66
+ version: '5.25'
67
+ type: :development
68
+ prerelease: false
69
+ version_requirements: !ruby/object:Gem::Requirement
70
+ requirements:
71
+ - - "~>"
72
+ - !ruby/object:Gem::Version
73
+ version: '5.25'
74
+ - !ruby/object:Gem::Dependency
75
+ name: rake
76
+ requirement: !ruby/object:Gem::Requirement
77
+ requirements:
78
+ - - "~>"
79
+ - !ruby/object:Gem::Version
80
+ version: '13.2'
81
+ type: :development
82
+ prerelease: false
83
+ version_requirements: !ruby/object:Gem::Requirement
84
+ requirements:
85
+ - - "~>"
86
+ - !ruby/object:Gem::Version
87
+ version: '13.2'
88
+ - !ruby/object:Gem::Dependency
89
+ name: standardrb
90
+ requirement: !ruby/object:Gem::Requirement
91
+ requirements:
92
+ - - "~>"
93
+ - !ruby/object:Gem::Version
94
+ version: '1.0'
95
+ type: :development
96
+ prerelease: false
97
+ version_requirements: !ruby/object:Gem::Requirement
98
+ requirements:
99
+ - - "~>"
100
+ - !ruby/object:Gem::Version
101
+ version: '1.0'
102
+ description: Adds a Redis-backed secondary storage adapter for Better Auth Ruby sessions
103
+ and rate limiting.
104
+ email:
105
+ - sebastian.sala.tech@gmail.com
106
+ executables: []
107
+ extensions: []
108
+ extra_rdoc_files: []
109
+ files:
110
+ - CHANGELOG.md
111
+ - README.md
112
+ - lib/better_auth/redis_storage.rb
113
+ - lib/better_auth/redis_storage/version.rb
114
+ homepage: https://github.com/sebasxsala/better-auth
115
+ licenses:
116
+ - MIT
117
+ metadata:
118
+ homepage_uri: https://github.com/sebasxsala/better-auth
119
+ source_code_uri: https://github.com/sebasxsala/better-auth
120
+ changelog_uri: https://github.com/sebasxsala/better-auth/blob/main/packages/better_auth-redis-storage/CHANGELOG.md
121
+ bug_tracker_uri: https://github.com/sebasxsala/better-auth/issues
122
+ rdoc_options: []
123
+ require_paths:
124
+ - lib
125
+ required_ruby_version: !ruby/object:Gem::Requirement
126
+ requirements:
127
+ - - ">="
128
+ - !ruby/object:Gem::Version
129
+ version: 3.2.0
130
+ required_rubygems_version: !ruby/object:Gem::Requirement
131
+ requirements:
132
+ - - ">="
133
+ - !ruby/object:Gem::Version
134
+ version: '0'
135
+ requirements: []
136
+ rubygems_version: 3.6.9
137
+ specification_version: 4
138
+ summary: Redis secondary storage package for Better Auth Ruby
139
+ test_files: []