supabase-rb 2.0.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 (74) hide show
  1. checksums.yaml +7 -0
  2. data/lib/supabase/README.md +90 -0
  3. data/lib/supabase/auth/README.md +172 -0
  4. data/lib/supabase/auth/admin_api.rb +218 -0
  5. data/lib/supabase/auth/admin_oauth_api.rb +51 -0
  6. data/lib/supabase/auth/api.rb +125 -0
  7. data/lib/supabase/auth/async/admin_api.rb +36 -0
  8. data/lib/supabase/auth/async/admin_oauth_api.rb +15 -0
  9. data/lib/supabase/auth/async/api.rb +32 -0
  10. data/lib/supabase/auth/async/client.rb +33 -0
  11. data/lib/supabase/auth/async.rb +14 -0
  12. data/lib/supabase/auth/client.rb +1217 -0
  13. data/lib/supabase/auth/constants.rb +32 -0
  14. data/lib/supabase/auth/errors.rb +207 -0
  15. data/lib/supabase/auth/helpers.rb +222 -0
  16. data/lib/supabase/auth/memory_storage.rb +25 -0
  17. data/lib/supabase/auth/storage.rb +19 -0
  18. data/lib/supabase/auth/timer.rb +40 -0
  19. data/lib/supabase/auth/types.rb +517 -0
  20. data/lib/supabase/auth/version.rb +7 -0
  21. data/lib/supabase/auth.rb +19 -0
  22. data/lib/supabase/client.rb +200 -0
  23. data/lib/supabase/client_options.rb +82 -0
  24. data/lib/supabase/functions/README.md +71 -0
  25. data/lib/supabase/functions/async/client.rb +45 -0
  26. data/lib/supabase/functions/async.rb +8 -0
  27. data/lib/supabase/functions/client.rb +174 -0
  28. data/lib/supabase/functions/errors.rb +38 -0
  29. data/lib/supabase/functions/types.rb +37 -0
  30. data/lib/supabase/functions/version.rb +7 -0
  31. data/lib/supabase/functions.rb +11 -0
  32. data/lib/supabase/postgrest/README.md +84 -0
  33. data/lib/supabase/postgrest/async/client.rb +50 -0
  34. data/lib/supabase/postgrest/async.rb +8 -0
  35. data/lib/supabase/postgrest/client.rb +136 -0
  36. data/lib/supabase/postgrest/errors.rb +49 -0
  37. data/lib/supabase/postgrest/request_builder.rb +657 -0
  38. data/lib/supabase/postgrest/types.rb +60 -0
  39. data/lib/supabase/postgrest/utils.rb +24 -0
  40. data/lib/supabase/postgrest/version.rb +7 -0
  41. data/lib/supabase/postgrest.rb +13 -0
  42. data/lib/supabase/realtime/README.md +90 -0
  43. data/lib/supabase/realtime/channel.rb +274 -0
  44. data/lib/supabase/realtime/client.rb +182 -0
  45. data/lib/supabase/realtime/errors.rb +19 -0
  46. data/lib/supabase/realtime/message.rb +38 -0
  47. data/lib/supabase/realtime/presence.rb +136 -0
  48. data/lib/supabase/realtime/push.rb +48 -0
  49. data/lib/supabase/realtime/socket.rb +40 -0
  50. data/lib/supabase/realtime/sockets/async_websocket.rb +175 -0
  51. data/lib/supabase/realtime/sockets/websocket_client_simple.rb +94 -0
  52. data/lib/supabase/realtime/test_socket.rb +65 -0
  53. data/lib/supabase/realtime/transformers.rb +26 -0
  54. data/lib/supabase/realtime/types.rb +70 -0
  55. data/lib/supabase/realtime/version.rb +7 -0
  56. data/lib/supabase/realtime.rb +18 -0
  57. data/lib/supabase/storage/README.md +108 -0
  58. data/lib/supabase/storage/analytics.rb +69 -0
  59. data/lib/supabase/storage/async/client.rb +52 -0
  60. data/lib/supabase/storage/async.rb +8 -0
  61. data/lib/supabase/storage/bucket_api.rb +65 -0
  62. data/lib/supabase/storage/client.rb +80 -0
  63. data/lib/supabase/storage/errors.rb +32 -0
  64. data/lib/supabase/storage/file_api.rb +281 -0
  65. data/lib/supabase/storage/request.rb +63 -0
  66. data/lib/supabase/storage/types.rb +236 -0
  67. data/lib/supabase/storage/utils.rb +35 -0
  68. data/lib/supabase/storage/vectors.rb +189 -0
  69. data/lib/supabase/storage/version.rb +7 -0
  70. data/lib/supabase/storage.rb +17 -0
  71. data/lib/supabase/version.rb +5 -0
  72. data/lib/supabase-auth.rb +3 -0
  73. data/lib/supabase.rb +63 -0
  74. metadata +272 -0
@@ -0,0 +1,189 @@
1
+ # frozen_string_literal: true
2
+
3
+ require_relative "request"
4
+ require_relative "types"
5
+ require_relative "errors"
6
+
7
+ module Supabase
8
+ module Storage
9
+ # Vector bucket / index / record management. Mirrors storage3's
10
+ # `SyncStorageVectorsClient`. All endpoints are POSTs to actions under
11
+ # `{storage_url}/vector/...`.
12
+ #
13
+ # vectors = client.vectors
14
+ # vectors.create_bucket("docs")
15
+ # vectors.from("docs").create_index("paragraphs", 1536, "cosine", "float32")
16
+ # vectors.from("docs").index("paragraphs").put([{ key: "p1", data: { float32: [...] } }])
17
+ class VectorsClient
18
+ include Request
19
+
20
+ def initialize(session, base_url, headers)
21
+ @session = session
22
+ normalized = base_url.end_with?("/") ? base_url : "#{base_url}/"
23
+ @base_url = "#{normalized}vector/"
24
+ @headers = headers
25
+ end
26
+
27
+ # Scope subsequent index/record operations to a particular vector bucket.
28
+ def from(bucket_name)
29
+ VectorBucketScope.new(self, bucket_name)
30
+ end
31
+
32
+ alias from_ from
33
+
34
+ def create_bucket(bucket_name)
35
+ _request(:post, ["CreateVectorBucket"], json: { "vectorBucketName" => bucket_name })
36
+ nil
37
+ end
38
+
39
+ # Returns nil if the bucket doesn't exist (matches py's swallow of
40
+ # StorageApiError). Any other API failure still surfaces.
41
+ def get_bucket(bucket_name)
42
+ body = _request(:post, ["GetVectorBucket"], json: { "vectorBucketName" => bucket_name })
43
+ Types::GetVectorBucketResponse.from_hash(body)
44
+ rescue Errors::StorageApiError
45
+ nil
46
+ end
47
+
48
+ def list_buckets(prefix: nil, max_results: nil, next_token: nil)
49
+ json = { "prefix" => prefix, "maxResults" => max_results, "nextToken" => next_token }.compact
50
+ body = _request(:post, ["ListVectorBuckets"], json: json)
51
+ Types::ListVectorBucketsResponse.from_hash(body)
52
+ end
53
+
54
+ def delete_bucket(bucket_name)
55
+ _request(:post, ["DeleteVectorBucket"], json: { "vectorBucketName" => bucket_name })
56
+ nil
57
+ end
58
+
59
+ # Exposed so the scope classes can reuse our wired-up session/headers
60
+ # without re-implementing `_request`. Not part of the public API.
61
+ def send_action(path:, json: nil) # :nodoc:
62
+ _request(:post, [path], json: json)
63
+ end
64
+ end
65
+
66
+ # A bucket-scoped facade. Mirrors storage3's `SyncVectorBucketScope`.
67
+ class VectorBucketScope
68
+ def initialize(vectors_client, bucket_name)
69
+ @client = vectors_client
70
+ @bucket_name = bucket_name
71
+ end
72
+
73
+ def create_index(index_name, dimension, distance_metric, data_type, metadata: nil)
74
+ json = with_metadata(
75
+ "indexName" => index_name,
76
+ "dimension" => dimension,
77
+ "distanceMetric" => distance_metric,
78
+ "dataType" => data_type,
79
+ "metadataConfiguration" => metadata
80
+ )
81
+ @client.send_action(path: "CreateIndex", json: json)
82
+ nil
83
+ end
84
+
85
+ def get_index(index_name)
86
+ body = @client.send_action(path: "GetIndex", json: with_metadata("indexName" => index_name))
87
+ Types::GetVectorIndexResponse.from_hash(body)
88
+ rescue Errors::StorageApiError
89
+ nil
90
+ end
91
+
92
+ def list_indexes(next_token: nil, max_results: nil, prefix: nil)
93
+ json = with_metadata("next_token" => next_token, "max_results" => max_results, "prefix" => prefix)
94
+ body = @client.send_action(path: "ListIndexes", json: json)
95
+ Types::ListVectorIndexesResponse.from_hash(body)
96
+ end
97
+
98
+ def delete_index(index_name)
99
+ @client.send_action(path: "DeleteIndex", json: with_metadata("indexName" => index_name))
100
+ nil
101
+ end
102
+
103
+ def index(index_name)
104
+ VectorIndexScope.new(@client, @bucket_name, index_name)
105
+ end
106
+
107
+ private
108
+
109
+ # Drops nil values and stamps the vector bucket name onto every request,
110
+ # matching the py helper of the same name.
111
+ def with_metadata(extra = {})
112
+ { "vectorBucketName" => @bucket_name }.merge(extra).reject { |_, v| v.nil? }
113
+ end
114
+ end
115
+
116
+ # A bucket+index-scoped facade for record-level operations. Mirrors
117
+ # storage3's `SyncVectorIndexScope`.
118
+ class VectorIndexScope
119
+ VECTOR_BATCH_MIN = 1
120
+ VECTOR_BATCH_MAX = 500
121
+
122
+ def initialize(vectors_client, bucket_name, index_name)
123
+ @client = vectors_client
124
+ @bucket_name = bucket_name
125
+ @index_name = index_name
126
+ end
127
+
128
+ def put(vectors)
129
+ # Accept either Hashes or VectorMatch-like Structs; serialize hashes
130
+ # directly so callers can pass plain `{ key:, data:, metadata: }`.
131
+ serialized = Array(vectors).map { |v| v.respond_to?(:to_h) ? v.to_h : v }
132
+ .map { |h| h.reject { |_, val| val.nil? } }
133
+ @client.send_action(path: "PutVectors", json: with_metadata("vectors" => serialized))
134
+ nil
135
+ end
136
+
137
+ def get(*keys, return_data: true, return_metadata: true)
138
+ json = with_metadata("keys" => keys, "returnData" => return_data, "returnMetadata" => return_metadata)
139
+ body = @client.send_action(path: "GetVectors", json: json)
140
+ Types::GetVectorsResponse.from_hash(body)
141
+ end
142
+
143
+ def list(max_results: nil, next_token: nil, return_data: true, return_metadata: true,
144
+ segment_count: nil, segment_index: nil)
145
+ json = with_metadata(
146
+ "maxResults" => max_results,
147
+ "nextToken" => next_token,
148
+ "returnData" => return_data,
149
+ "returnMetadata" => return_metadata,
150
+ "segmentCount" => segment_count,
151
+ "segmentIndex" => segment_index
152
+ )
153
+ body = @client.send_action(path: "ListVectors", json: json)
154
+ Types::ListVectorsResponse.from_hash(body)
155
+ end
156
+
157
+ def query(query_vector, top_k: nil, filter: nil, return_distance: true, return_metadata: true)
158
+ json = with_metadata(
159
+ "queryVector" => query_vector,
160
+ "topK" => top_k,
161
+ "filter" => filter,
162
+ "returnDistance" => return_distance,
163
+ "returnMetadata" => return_metadata
164
+ )
165
+ body = @client.send_action(path: "QueryVectors", json: json)
166
+ Types::QueryVectorsResponse.from_hash(body)
167
+ end
168
+
169
+ def delete(keys)
170
+ keys = Array(keys)
171
+ if keys.size < VECTOR_BATCH_MIN || keys.size > VECTOR_BATCH_MAX
172
+ raise Errors::VectorBucketException, "Keys batch size must be between #{VECTOR_BATCH_MIN} and #{VECTOR_BATCH_MAX}."
173
+ end
174
+
175
+ @client.send_action(path: "DeleteVectors", json: with_metadata("keys" => keys))
176
+ nil
177
+ end
178
+
179
+ private
180
+
181
+ def with_metadata(extra = {})
182
+ {
183
+ "vectorBucketName" => @bucket_name,
184
+ "indexName" => @index_name
185
+ }.merge(extra).reject { |_, v| v.nil? }
186
+ end
187
+ end
188
+ end
189
+ end
@@ -0,0 +1,7 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Supabase
4
+ module Storage
5
+ VERSION = "0.1.0"
6
+ end
7
+ end
@@ -0,0 +1,17 @@
1
+ # frozen_string_literal: true
2
+
3
+ require_relative "storage/version"
4
+ require_relative "storage/errors"
5
+ require_relative "storage/types"
6
+ require_relative "storage/utils"
7
+ require_relative "storage/request"
8
+ require_relative "storage/bucket_api"
9
+ require_relative "storage/file_api"
10
+ require_relative "storage/analytics"
11
+ require_relative "storage/vectors"
12
+ require_relative "storage/client"
13
+
14
+ module Supabase
15
+ module Storage
16
+ end
17
+ end
@@ -0,0 +1,5 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Supabase
4
+ VERSION = "2.0.0"
5
+ end
@@ -0,0 +1,3 @@
1
+ # frozen_string_literal: true
2
+
3
+ require_relative "supabase/auth"
data/lib/supabase.rb ADDED
@@ -0,0 +1,63 @@
1
+ # frozen_string_literal: true
2
+
3
+ require_relative "supabase/version"
4
+ require_relative "supabase/client_options"
5
+ require_relative "supabase/client"
6
+
7
+ module Supabase
8
+ # Re-exports of error types from each sub-library, so callers can rescue with
9
+ # the umbrella names that mirror supabase-py's top-level `__init__.py`:
10
+ #
11
+ # rescue Supabase::PostgrestAPIError => e # postgrest
12
+ # rescue Supabase::StorageException => e # storage
13
+ # rescue Supabase::AuthApiError => e # auth
14
+ # rescue Supabase::FunctionsHttpError => e # functions
15
+ # rescue Supabase::AuthorizationError => e # realtime
16
+ #
17
+ # The actual classes live in their sub-namespaces; these are aliases.
18
+
19
+ # Postgrest
20
+ PostgrestAPIError = Postgrest::Errors::APIError if defined?(Postgrest::Errors::APIError)
21
+ PostgrestAPIResponse = Postgrest::APIResponse if defined?(Postgrest::APIResponse)
22
+
23
+ # Storage
24
+ StorageException = Storage::Errors::StorageError if defined?(Storage::Errors::StorageError)
25
+ StorageApiError = Storage::Errors::StorageApiError if defined?(Storage::Errors::StorageApiError)
26
+
27
+ # Auth (supabase_auth.errors.*)
28
+ if defined?(Auth::Errors)
29
+ AuthError = Auth::Errors::AuthError if defined?(Auth::Errors::AuthError)
30
+ AuthApiError = Auth::Errors::AuthApiError if defined?(Auth::Errors::AuthApiError)
31
+ AuthImplicitGrantRedirectError = Auth::Errors::AuthImplicitGrantRedirectError if defined?(Auth::Errors::AuthImplicitGrantRedirectError)
32
+ AuthInvalidCredentialsError = Auth::Errors::AuthInvalidCredentialsError if defined?(Auth::Errors::AuthInvalidCredentialsError)
33
+ AuthRetryableError = Auth::Errors::AuthRetryableError if defined?(Auth::Errors::AuthRetryableError)
34
+ AuthSessionMissingError = Auth::Errors::AuthSessionMissingError if defined?(Auth::Errors::AuthSessionMissingError)
35
+ AuthUnknownError = Auth::Errors::AuthUnknownError if defined?(Auth::Errors::AuthUnknownError)
36
+ AuthWeakPasswordError = Auth::Errors::AuthWeakPasswordError if defined?(Auth::Errors::AuthWeakPasswordError)
37
+ end
38
+
39
+ # Functions
40
+ if defined?(Functions::Errors)
41
+ FunctionsError = Functions::Errors::FunctionsError if defined?(Functions::Errors::FunctionsError)
42
+ FunctionsHttpError = Functions::Errors::FunctionsHttpError if defined?(Functions::Errors::FunctionsHttpError)
43
+ FunctionsRelayError = Functions::Errors::FunctionsRelayError if defined?(Functions::Errors::FunctionsRelayError)
44
+ end
45
+
46
+ # Realtime
47
+ if defined?(Realtime::Errors)
48
+ AuthorizationError = Realtime::Errors::AuthorizationError if defined?(Realtime::Errors::AuthorizationError)
49
+ NotConnectedError = Realtime::Errors::NotConnectedError if defined?(Realtime::Errors::NotConnectedError)
50
+ end
51
+
52
+ # Raised by {Supabase.create_client} on a missing url/key. Mirrors py's
53
+ # `SupabaseException`. We don't inherit from a sub-library error because the
54
+ # umbrella factory predates choosing any of them.
55
+ class SupabaseException < StandardError; end
56
+
57
+ # Alias mirroring supabase-py's `acreate_client` / `create_async_client`.
58
+ # Equivalent to `create_client(..., async: true)`.
59
+ def self.acreate_client(supabase_url:, supabase_key:, options: {})
60
+ create_client(supabase_url: supabase_url, supabase_key: supabase_key, options: options, async: true)
61
+ end
62
+ singleton_class.send(:alias_method, :create_async_client, :acreate_client)
63
+ end
metadata ADDED
@@ -0,0 +1,272 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: supabase-rb
3
+ version: !ruby/object:Gem::Version
4
+ version: 2.0.0
5
+ platform: ruby
6
+ authors:
7
+ - Supabase
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: faraday
14
+ requirement: !ruby/object:Gem::Requirement
15
+ requirements:
16
+ - - "~>"
17
+ - !ruby/object:Gem::Version
18
+ version: '2.0'
19
+ type: :runtime
20
+ prerelease: false
21
+ version_requirements: !ruby/object:Gem::Requirement
22
+ requirements:
23
+ - - "~>"
24
+ - !ruby/object:Gem::Version
25
+ version: '2.0'
26
+ - !ruby/object:Gem::Dependency
27
+ name: faraday-multipart
28
+ requirement: !ruby/object:Gem::Requirement
29
+ requirements:
30
+ - - "~>"
31
+ - !ruby/object:Gem::Version
32
+ version: '1.0'
33
+ type: :runtime
34
+ prerelease: false
35
+ version_requirements: !ruby/object:Gem::Requirement
36
+ requirements:
37
+ - - "~>"
38
+ - !ruby/object:Gem::Version
39
+ version: '1.0'
40
+ - !ruby/object:Gem::Dependency
41
+ name: jwt
42
+ requirement: !ruby/object:Gem::Requirement
43
+ requirements:
44
+ - - "~>"
45
+ - !ruby/object:Gem::Version
46
+ version: '2.8'
47
+ type: :runtime
48
+ prerelease: false
49
+ version_requirements: !ruby/object:Gem::Requirement
50
+ requirements:
51
+ - - "~>"
52
+ - !ruby/object:Gem::Version
53
+ version: '2.8'
54
+ - !ruby/object:Gem::Dependency
55
+ name: rspec
56
+ requirement: !ruby/object:Gem::Requirement
57
+ requirements:
58
+ - - "~>"
59
+ - !ruby/object:Gem::Version
60
+ version: '3.12'
61
+ type: :development
62
+ prerelease: false
63
+ version_requirements: !ruby/object:Gem::Requirement
64
+ requirements:
65
+ - - "~>"
66
+ - !ruby/object:Gem::Version
67
+ version: '3.12'
68
+ - !ruby/object:Gem::Dependency
69
+ name: simplecov
70
+ requirement: !ruby/object:Gem::Requirement
71
+ requirements:
72
+ - - "~>"
73
+ - !ruby/object:Gem::Version
74
+ version: '0.22'
75
+ type: :development
76
+ prerelease: false
77
+ version_requirements: !ruby/object:Gem::Requirement
78
+ requirements:
79
+ - - "~>"
80
+ - !ruby/object:Gem::Version
81
+ version: '0.22'
82
+ - !ruby/object:Gem::Dependency
83
+ name: webmock
84
+ requirement: !ruby/object:Gem::Requirement
85
+ requirements:
86
+ - - "~>"
87
+ - !ruby/object:Gem::Version
88
+ version: '3.19'
89
+ type: :development
90
+ prerelease: false
91
+ version_requirements: !ruby/object:Gem::Requirement
92
+ requirements:
93
+ - - "~>"
94
+ - !ruby/object:Gem::Version
95
+ version: '3.19'
96
+ - !ruby/object:Gem::Dependency
97
+ name: faker
98
+ requirement: !ruby/object:Gem::Requirement
99
+ requirements:
100
+ - - "~>"
101
+ - !ruby/object:Gem::Version
102
+ version: '3.2'
103
+ type: :development
104
+ prerelease: false
105
+ version_requirements: !ruby/object:Gem::Requirement
106
+ requirements:
107
+ - - "~>"
108
+ - !ruby/object:Gem::Version
109
+ version: '3.2'
110
+ - !ruby/object:Gem::Dependency
111
+ name: async
112
+ requirement: !ruby/object:Gem::Requirement
113
+ requirements:
114
+ - - "~>"
115
+ - !ruby/object:Gem::Version
116
+ version: '2.0'
117
+ type: :development
118
+ prerelease: false
119
+ version_requirements: !ruby/object:Gem::Requirement
120
+ requirements:
121
+ - - "~>"
122
+ - !ruby/object:Gem::Version
123
+ version: '2.0'
124
+ - !ruby/object:Gem::Dependency
125
+ name: async-http-faraday
126
+ requirement: !ruby/object:Gem::Requirement
127
+ requirements:
128
+ - - "~>"
129
+ - !ruby/object:Gem::Version
130
+ version: '0.20'
131
+ type: :development
132
+ prerelease: false
133
+ version_requirements: !ruby/object:Gem::Requirement
134
+ requirements:
135
+ - - "~>"
136
+ - !ruby/object:Gem::Version
137
+ version: '0.20'
138
+ - !ruby/object:Gem::Dependency
139
+ name: websocket-client-simple
140
+ requirement: !ruby/object:Gem::Requirement
141
+ requirements:
142
+ - - "~>"
143
+ - !ruby/object:Gem::Version
144
+ version: '0.9'
145
+ type: :development
146
+ prerelease: false
147
+ version_requirements: !ruby/object:Gem::Requirement
148
+ requirements:
149
+ - - "~>"
150
+ - !ruby/object:Gem::Version
151
+ version: '0.9'
152
+ - !ruby/object:Gem::Dependency
153
+ name: async-websocket
154
+ requirement: !ruby/object:Gem::Requirement
155
+ requirements:
156
+ - - "~>"
157
+ - !ruby/object:Gem::Version
158
+ version: '0.30'
159
+ type: :development
160
+ prerelease: false
161
+ version_requirements: !ruby/object:Gem::Requirement
162
+ requirements:
163
+ - - "~>"
164
+ - !ruby/object:Gem::Version
165
+ version: '0.30'
166
+ description: 'Ruby client for Supabase: Auth, PostgREST, Storage, Edge Functions,
167
+ and Realtime exposed through a single Supabase.create_client(supabase_url:, supabase_key:)
168
+ factory, mirroring supabase-py''s create_client().'
169
+ email:
170
+ - support@supabase.io
171
+ executables: []
172
+ extensions: []
173
+ extra_rdoc_files: []
174
+ files:
175
+ - lib/supabase-auth.rb
176
+ - lib/supabase.rb
177
+ - lib/supabase/README.md
178
+ - lib/supabase/auth.rb
179
+ - lib/supabase/auth/README.md
180
+ - lib/supabase/auth/admin_api.rb
181
+ - lib/supabase/auth/admin_oauth_api.rb
182
+ - lib/supabase/auth/api.rb
183
+ - lib/supabase/auth/async.rb
184
+ - lib/supabase/auth/async/admin_api.rb
185
+ - lib/supabase/auth/async/admin_oauth_api.rb
186
+ - lib/supabase/auth/async/api.rb
187
+ - lib/supabase/auth/async/client.rb
188
+ - lib/supabase/auth/client.rb
189
+ - lib/supabase/auth/constants.rb
190
+ - lib/supabase/auth/errors.rb
191
+ - lib/supabase/auth/helpers.rb
192
+ - lib/supabase/auth/memory_storage.rb
193
+ - lib/supabase/auth/storage.rb
194
+ - lib/supabase/auth/timer.rb
195
+ - lib/supabase/auth/types.rb
196
+ - lib/supabase/auth/version.rb
197
+ - lib/supabase/client.rb
198
+ - lib/supabase/client_options.rb
199
+ - lib/supabase/functions.rb
200
+ - lib/supabase/functions/README.md
201
+ - lib/supabase/functions/async.rb
202
+ - lib/supabase/functions/async/client.rb
203
+ - lib/supabase/functions/client.rb
204
+ - lib/supabase/functions/errors.rb
205
+ - lib/supabase/functions/types.rb
206
+ - lib/supabase/functions/version.rb
207
+ - lib/supabase/postgrest.rb
208
+ - lib/supabase/postgrest/README.md
209
+ - lib/supabase/postgrest/async.rb
210
+ - lib/supabase/postgrest/async/client.rb
211
+ - lib/supabase/postgrest/client.rb
212
+ - lib/supabase/postgrest/errors.rb
213
+ - lib/supabase/postgrest/request_builder.rb
214
+ - lib/supabase/postgrest/types.rb
215
+ - lib/supabase/postgrest/utils.rb
216
+ - lib/supabase/postgrest/version.rb
217
+ - lib/supabase/realtime.rb
218
+ - lib/supabase/realtime/README.md
219
+ - lib/supabase/realtime/channel.rb
220
+ - lib/supabase/realtime/client.rb
221
+ - lib/supabase/realtime/errors.rb
222
+ - lib/supabase/realtime/message.rb
223
+ - lib/supabase/realtime/presence.rb
224
+ - lib/supabase/realtime/push.rb
225
+ - lib/supabase/realtime/socket.rb
226
+ - lib/supabase/realtime/sockets/async_websocket.rb
227
+ - lib/supabase/realtime/sockets/websocket_client_simple.rb
228
+ - lib/supabase/realtime/test_socket.rb
229
+ - lib/supabase/realtime/transformers.rb
230
+ - lib/supabase/realtime/types.rb
231
+ - lib/supabase/realtime/version.rb
232
+ - lib/supabase/storage.rb
233
+ - lib/supabase/storage/README.md
234
+ - lib/supabase/storage/analytics.rb
235
+ - lib/supabase/storage/async.rb
236
+ - lib/supabase/storage/async/client.rb
237
+ - lib/supabase/storage/bucket_api.rb
238
+ - lib/supabase/storage/client.rb
239
+ - lib/supabase/storage/errors.rb
240
+ - lib/supabase/storage/file_api.rb
241
+ - lib/supabase/storage/request.rb
242
+ - lib/supabase/storage/types.rb
243
+ - lib/supabase/storage/utils.rb
244
+ - lib/supabase/storage/vectors.rb
245
+ - lib/supabase/storage/version.rb
246
+ - lib/supabase/version.rb
247
+ homepage: https://github.com/supabase-ruby/supabase-rb
248
+ licenses:
249
+ - MIT
250
+ metadata:
251
+ homepage_uri: https://github.com/supabase-ruby/supabase-rb
252
+ source_code_uri: https://github.com/supabase-ruby/supabase-rb
253
+ documentation_uri: https://github.com/supabase-ruby/supabase-rb/blob/master/lib/supabase/README.md
254
+ changelog_uri: https://github.com/supabase-ruby/supabase-rb/blob/master/CHANGELOG.md
255
+ rdoc_options: []
256
+ require_paths:
257
+ - lib
258
+ required_ruby_version: !ruby/object:Gem::Requirement
259
+ requirements:
260
+ - - ">="
261
+ - !ruby/object:Gem::Version
262
+ version: 3.0.0
263
+ required_rubygems_version: !ruby/object:Gem::Requirement
264
+ requirements:
265
+ - - ">="
266
+ - !ruby/object:Gem::Version
267
+ version: '0'
268
+ requirements: []
269
+ rubygems_version: 4.0.11
270
+ specification_version: 4
271
+ summary: Ruby client for Supabase
272
+ test_files: []