edgebase_core 0.1.5 → 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.
- checksums.yaml +4 -4
- data/lib/edgebase_core/generated/api_core.rb +58 -45
- data/lib/edgebase_core/http_client.rb +58 -13
- metadata +2 -2
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 2136ccb71c9f415d7a60e444e1e4fe74e2daca64a283613ce3ba9e067aef11cb
|
|
4
|
+
data.tar.gz: 4ad0f8d6529d442f9d2f173dc0fa2ff7e5a226539d37308b9c8ff0c26ded44b1
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: d57a88b32dfe78079672b20e7de97e6b9f5691770777e329330619109c28e6da67378d4f19b2f9c70354296b63fc7d62bd22af217e41a3ffa6eb510fd9dacded
|
|
7
|
+
data.tar.gz: 452ceed9d70939fdd7a336b4bcab13cf80a9fc086e5f873a0f3d93d23bf697252673cb7fb9a976b62ea2326737300a676bc3c4c1bd73ffd9bd1703325aface5f
|
|
@@ -237,6 +237,51 @@ module EdgebaseCore
|
|
|
237
237
|
@http.get("/auth/oauth/link/#{CGI.escape(provider).gsub('+', '%20')}/callback")
|
|
238
238
|
end
|
|
239
239
|
|
|
240
|
+
# Count records in a single-instance table — GET /api/db/{namespace}/tables/{table}/count
|
|
241
|
+
def db_single_count_records(namespace, table, query: nil)
|
|
242
|
+
@http.get("/db/#{CGI.escape(namespace).gsub('+', '%20')}/tables/#{CGI.escape(table).gsub('+', '%20')}/count", params: query)
|
|
243
|
+
end
|
|
244
|
+
|
|
245
|
+
# Search records in a single-instance table — GET /api/db/{namespace}/tables/{table}/search
|
|
246
|
+
def db_single_search_records(namespace, table, query: nil)
|
|
247
|
+
@http.get("/db/#{CGI.escape(namespace).gsub('+', '%20')}/tables/#{CGI.escape(table).gsub('+', '%20')}/search", params: query)
|
|
248
|
+
end
|
|
249
|
+
|
|
250
|
+
# Get a single record from a single-instance table — GET /api/db/{namespace}/tables/{table}/{id}
|
|
251
|
+
def db_single_get_record(namespace, table, id, query: nil)
|
|
252
|
+
@http.get("/db/#{CGI.escape(namespace).gsub('+', '%20')}/tables/#{CGI.escape(table).gsub('+', '%20')}/#{CGI.escape(id).gsub('+', '%20')}", params: query)
|
|
253
|
+
end
|
|
254
|
+
|
|
255
|
+
# Update a record in a single-instance table — PATCH /api/db/{namespace}/tables/{table}/{id}
|
|
256
|
+
def db_single_update_record(namespace, table, id, body = nil)
|
|
257
|
+
@http.patch("/db/#{CGI.escape(namespace).gsub('+', '%20')}/tables/#{CGI.escape(table).gsub('+', '%20')}/#{CGI.escape(id).gsub('+', '%20')}", body)
|
|
258
|
+
end
|
|
259
|
+
|
|
260
|
+
# Delete a record from a single-instance table — DELETE /api/db/{namespace}/tables/{table}/{id}
|
|
261
|
+
def db_single_delete_record(namespace, table, id)
|
|
262
|
+
@http.delete("/db/#{CGI.escape(namespace).gsub('+', '%20')}/tables/#{CGI.escape(table).gsub('+', '%20')}/#{CGI.escape(id).gsub('+', '%20')}")
|
|
263
|
+
end
|
|
264
|
+
|
|
265
|
+
# List records from a single-instance table — GET /api/db/{namespace}/tables/{table}
|
|
266
|
+
def db_single_list_records(namespace, table, query: nil)
|
|
267
|
+
@http.get("/db/#{CGI.escape(namespace).gsub('+', '%20')}/tables/#{CGI.escape(table).gsub('+', '%20')}", params: query)
|
|
268
|
+
end
|
|
269
|
+
|
|
270
|
+
# Insert a record into a single-instance table — POST /api/db/{namespace}/tables/{table}
|
|
271
|
+
def db_single_insert_record(namespace, table, body = nil, query: nil)
|
|
272
|
+
@http.post("/db/#{CGI.escape(namespace).gsub('+', '%20')}/tables/#{CGI.escape(table).gsub('+', '%20')}", body, params: query)
|
|
273
|
+
end
|
|
274
|
+
|
|
275
|
+
# Batch insert records into a single-instance table — POST /api/db/{namespace}/tables/{table}/batch
|
|
276
|
+
def db_single_batch_records(namespace, table, body = nil, query: nil)
|
|
277
|
+
@http.post("/db/#{CGI.escape(namespace).gsub('+', '%20')}/tables/#{CGI.escape(table).gsub('+', '%20')}/batch", body, params: query)
|
|
278
|
+
end
|
|
279
|
+
|
|
280
|
+
# Batch update/delete records by filter in a single-instance table — POST /api/db/{namespace}/tables/{table}/batch-by-filter
|
|
281
|
+
def db_single_batch_by_filter(namespace, table, body = nil, query: nil)
|
|
282
|
+
@http.post("/db/#{CGI.escape(namespace).gsub('+', '%20')}/tables/#{CGI.escape(table).gsub('+', '%20')}/batch-by-filter", body, params: query)
|
|
283
|
+
end
|
|
284
|
+
|
|
240
285
|
# Count records in dynamic table — GET /api/db/{namespace}/{instanceId}/tables/{table}/count
|
|
241
286
|
def db_count_records(namespace, instance_id, table, query: nil)
|
|
242
287
|
@http.get("/db/#{CGI.escape(namespace).gsub('+', '%20')}/#{CGI.escape(instance_id).gsub('+', '%20')}/tables/#{CGI.escape(table).gsub('+', '%20')}/count", params: query)
|
|
@@ -447,55 +492,15 @@ module EdgebaseCore
|
|
|
447
492
|
@http.put("/room/media/realtime/tracks/close", body, params: query)
|
|
448
493
|
end
|
|
449
494
|
|
|
495
|
+
# Create a room Cloudflare RealtimeKit session — POST /api/room/media/cloudflare_realtimekit/session
|
|
496
|
+
def create_room_cloudflare_realtime_kit_session(body = nil, query: nil)
|
|
497
|
+
@http.post("/room/media/cloudflare_realtimekit/session", body, params: query)
|
|
498
|
+
end
|
|
499
|
+
|
|
450
500
|
# Track custom events — POST /api/analytics/track
|
|
451
501
|
def track_events(body = nil)
|
|
452
502
|
@http.post("/analytics/track", body)
|
|
453
503
|
end
|
|
454
|
-
|
|
455
|
-
# Count records in a single-instance table — GET /api/db/{namespace}/tables/{table}/count
|
|
456
|
-
def db_single_count_records(namespace, table, query: nil)
|
|
457
|
-
@http.get("/db/#{CGI.escape(namespace).gsub('+', '%20')}/tables/#{CGI.escape(table).gsub('+', '%20')}/count", params: query)
|
|
458
|
-
end
|
|
459
|
-
|
|
460
|
-
# Search records in a single-instance table — GET /api/db/{namespace}/tables/{table}/search
|
|
461
|
-
def db_single_search_records(namespace, table, query: nil)
|
|
462
|
-
@http.get("/db/#{CGI.escape(namespace).gsub('+', '%20')}/tables/#{CGI.escape(table).gsub('+', '%20')}/search", params: query)
|
|
463
|
-
end
|
|
464
|
-
|
|
465
|
-
# Get a single record from a single-instance table — GET /api/db/{namespace}/tables/{table}/{id}
|
|
466
|
-
def db_single_get_record(namespace, table, id, query: nil)
|
|
467
|
-
@http.get("/db/#{CGI.escape(namespace).gsub('+', '%20')}/tables/#{CGI.escape(table).gsub('+', '%20')}/#{CGI.escape(id).gsub('+', '%20')}", params: query)
|
|
468
|
-
end
|
|
469
|
-
|
|
470
|
-
# Update a record in a single-instance table — PATCH /api/db/{namespace}/tables/{table}/{id}
|
|
471
|
-
def db_single_update_record(namespace, table, id, body = nil)
|
|
472
|
-
@http.patch("/db/#{CGI.escape(namespace).gsub('+', '%20')}/tables/#{CGI.escape(table).gsub('+', '%20')}/#{CGI.escape(id).gsub('+', '%20')}", body)
|
|
473
|
-
end
|
|
474
|
-
|
|
475
|
-
# Delete a record from a single-instance table — DELETE /api/db/{namespace}/tables/{table}/{id}
|
|
476
|
-
def db_single_delete_record(namespace, table, id)
|
|
477
|
-
@http.delete("/db/#{CGI.escape(namespace).gsub('+', '%20')}/tables/#{CGI.escape(table).gsub('+', '%20')}/#{CGI.escape(id).gsub('+', '%20')}")
|
|
478
|
-
end
|
|
479
|
-
|
|
480
|
-
# List records from a single-instance table — GET /api/db/{namespace}/tables/{table}
|
|
481
|
-
def db_single_list_records(namespace, table, query: nil)
|
|
482
|
-
@http.get("/db/#{CGI.escape(namespace).gsub('+', '%20')}/tables/#{CGI.escape(table).gsub('+', '%20')}", params: query)
|
|
483
|
-
end
|
|
484
|
-
|
|
485
|
-
# Insert a record into a single-instance table — POST /api/db/{namespace}/tables/{table}
|
|
486
|
-
def db_single_insert_record(namespace, table, body = nil, query: nil)
|
|
487
|
-
@http.post("/db/#{CGI.escape(namespace).gsub('+', '%20')}/tables/#{CGI.escape(table).gsub('+', '%20')}", body, params: query)
|
|
488
|
-
end
|
|
489
|
-
|
|
490
|
-
# Batch insert records into a single-instance table — POST /api/db/{namespace}/tables/{table}/batch
|
|
491
|
-
def db_single_batch_records(namespace, table, body = nil, query: nil)
|
|
492
|
-
@http.post("/db/#{CGI.escape(namespace).gsub('+', '%20')}/tables/#{CGI.escape(table).gsub('+', '%20')}/batch", body, params: query)
|
|
493
|
-
end
|
|
494
|
-
|
|
495
|
-
# Batch update/delete records by filter in a single-instance table — POST /api/db/{namespace}/tables/{table}/batch-by-filter
|
|
496
|
-
def db_single_batch_by_filter(namespace, table, body = nil, query: nil)
|
|
497
|
-
@http.post("/db/#{CGI.escape(namespace).gsub('+', '%20')}/tables/#{CGI.escape(table).gsub('+', '%20')}/batch-by-filter", body, params: query)
|
|
498
|
-
end
|
|
499
504
|
end
|
|
500
505
|
|
|
501
506
|
|
|
@@ -525,12 +530,15 @@ module EdgebaseCore
|
|
|
525
530
|
ADMIN_GET_AUTH_SETTINGS = "/admin/api/data/auth/settings"
|
|
526
531
|
ADMIN_BACKUP_GET_CONFIG = "/admin/api/data/backup/config"
|
|
527
532
|
ADMIN_BACKUP_DUMP_D1 = "/admin/api/data/backup/dump-d1"
|
|
533
|
+
ADMIN_BACKUP_DUMP_DATA = "/admin/api/data/backup/dump-data"
|
|
528
534
|
ADMIN_BACKUP_DUMP_DO = "/admin/api/data/backup/dump-do"
|
|
529
535
|
ADMIN_BACKUP_LIST_DOS = "/admin/api/data/backup/list-dos"
|
|
530
536
|
ADMIN_BACKUP_RESTORE_D1 = "/admin/api/data/backup/restore-d1"
|
|
537
|
+
ADMIN_BACKUP_RESTORE_DATA = "/admin/api/data/backup/restore-data"
|
|
531
538
|
ADMIN_BACKUP_RESTORE_DO = "/admin/api/data/backup/restore-do"
|
|
532
539
|
ADMIN_CLEANUP_ANON = "/admin/api/data/cleanup-anon"
|
|
533
540
|
ADMIN_GET_CONFIG_INFO = "/admin/api/data/config-info"
|
|
541
|
+
ADMIN_DESTROY_APP = "/admin/api/data/destroy-app"
|
|
534
542
|
ADMIN_GET_DEV_INFO = "/admin/api/data/dev-info"
|
|
535
543
|
ADMIN_GET_EMAIL_TEMPLATES = "/admin/api/data/email/templates"
|
|
536
544
|
ADMIN_LIST_FUNCTIONS = "/admin/api/data/functions"
|
|
@@ -613,6 +621,7 @@ module EdgebaseCore
|
|
|
613
621
|
PUSH_UNREGISTER = "/api/push/unregister"
|
|
614
622
|
CONNECT_ROOM = "/api/room"
|
|
615
623
|
CHECK_ROOM_CONNECTION = "/api/room/connect-check"
|
|
624
|
+
CREATE_ROOM_CLOUDFLARE_REALTIME_KIT_SESSION = "/api/room/media/cloudflare_realtimekit/session"
|
|
616
625
|
RENEGOTIATE_ROOM_REALTIME_SESSION = "/api/room/media/realtime/renegotiate"
|
|
617
626
|
GET_ROOM_REALTIME_SESSION = "/api/room/media/realtime/session"
|
|
618
627
|
CREATE_ROOM_REALTIME_SESSION = "/api/room/media/realtime/session"
|
|
@@ -635,6 +644,10 @@ module EdgebaseCore
|
|
|
635
644
|
"/admin/api/data/admins/#{id}/password"
|
|
636
645
|
end
|
|
637
646
|
|
|
647
|
+
def self.admin_list_namespace_instances(namespace)
|
|
648
|
+
"/admin/api/data/namespaces/#{namespace}/instances"
|
|
649
|
+
end
|
|
650
|
+
|
|
638
651
|
def self.admin_list_bucket_objects(name)
|
|
639
652
|
"/admin/api/data/storage/buckets/#{name}/objects"
|
|
640
653
|
end
|
|
@@ -104,6 +104,27 @@ module EdgebaseCore
|
|
|
104
104
|
|
|
105
105
|
private
|
|
106
106
|
|
|
107
|
+
def parse_retry_after_delay(response, attempt)
|
|
108
|
+
base_delay = 1.0 * (2 ** attempt)
|
|
109
|
+
retry_after = response["retry-after"] || response["Retry-After"]
|
|
110
|
+
if retry_after
|
|
111
|
+
begin
|
|
112
|
+
seconds = Integer(retry_after)
|
|
113
|
+
base_delay = seconds.to_f if seconds > 0
|
|
114
|
+
rescue ArgumentError
|
|
115
|
+
# ignore non-integer Retry-After
|
|
116
|
+
end
|
|
117
|
+
end
|
|
118
|
+
jitter = rand * base_delay * 0.25
|
|
119
|
+
[base_delay + jitter, 10.0].min
|
|
120
|
+
end
|
|
121
|
+
|
|
122
|
+
RETRYABLE_ERRORS = [
|
|
123
|
+
Net::OpenTimeout, Net::ReadTimeout, Errno::ECONNREFUSED,
|
|
124
|
+
Errno::ECONNRESET, Errno::ENETUNREACH, Errno::EHOSTUNREACH,
|
|
125
|
+
SocketError, EOFError
|
|
126
|
+
].freeze
|
|
127
|
+
|
|
107
128
|
def request(method, path, params: nil, json_body: nil)
|
|
108
129
|
url = build_url(path)
|
|
109
130
|
if params && !params.empty?
|
|
@@ -111,22 +132,46 @@ module EdgebaseCore
|
|
|
111
132
|
url = "#{url}?#{query}"
|
|
112
133
|
end
|
|
113
134
|
|
|
114
|
-
|
|
115
|
-
|
|
135
|
+
max_retries = 3
|
|
136
|
+
last_response = nil
|
|
116
137
|
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
when "PATCH" then Net::HTTP::Patch.new(uri)
|
|
121
|
-
when "PUT" then Net::HTTP::Put.new(uri)
|
|
122
|
-
when "DELETE" then Net::HTTP::Delete.new(uri)
|
|
123
|
-
else Net::HTTP::Get.new(uri)
|
|
124
|
-
end
|
|
138
|
+
(max_retries + 1).times do |attempt|
|
|
139
|
+
uri = URI(url)
|
|
140
|
+
http = build_http(uri)
|
|
125
141
|
|
|
126
|
-
|
|
127
|
-
|
|
142
|
+
req = case method
|
|
143
|
+
when "GET" then Net::HTTP::Get.new(uri)
|
|
144
|
+
when "POST" then Net::HTTP::Post.new(uri)
|
|
145
|
+
when "PATCH" then Net::HTTP::Patch.new(uri)
|
|
146
|
+
when "PUT" then Net::HTTP::Put.new(uri)
|
|
147
|
+
when "DELETE" then Net::HTTP::Delete.new(uri)
|
|
148
|
+
else Net::HTTP::Get.new(uri)
|
|
149
|
+
end
|
|
128
150
|
|
|
129
|
-
|
|
151
|
+
auth_headers.each { |k, v| req[k] = v }
|
|
152
|
+
req.body = JSON.generate(json_body) if json_body
|
|
153
|
+
|
|
154
|
+
begin
|
|
155
|
+
response = http.request(req)
|
|
156
|
+
last_response = response
|
|
157
|
+
rescue *RETRYABLE_ERRORS => e
|
|
158
|
+
if attempt < 2
|
|
159
|
+
sleep(0.05 * (attempt + 1))
|
|
160
|
+
next
|
|
161
|
+
end
|
|
162
|
+
raise EdgeBaseError.new(0, "Request failed: #{e.message}")
|
|
163
|
+
end
|
|
164
|
+
|
|
165
|
+
if response.code.to_i == 429 && attempt < max_retries
|
|
166
|
+
delay = parse_retry_after_delay(response, attempt)
|
|
167
|
+
sleep(delay)
|
|
168
|
+
next
|
|
169
|
+
end
|
|
170
|
+
|
|
171
|
+
return parse_response(response)
|
|
172
|
+
end
|
|
173
|
+
|
|
174
|
+
parse_response(last_response)
|
|
130
175
|
end
|
|
131
176
|
|
|
132
177
|
def build_url(path)
|
metadata
CHANGED
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: edgebase_core
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 0.
|
|
4
|
+
version: 0.2.0
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- EdgeBase
|
|
8
8
|
autorequire:
|
|
9
9
|
bindir: bin
|
|
10
10
|
cert_chain: []
|
|
11
|
-
date: 2026-03-
|
|
11
|
+
date: 2026-03-22 00:00:00.000000000 Z
|
|
12
12
|
dependencies: []
|
|
13
13
|
description: Core module for EdgeBase Ruby SDK. Provides HttpClient, TableRef, DocRef,
|
|
14
14
|
StorageClient, and generated API layer from OpenAPI spec.
|