restate-sdk 0.5.1 → 0.7.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.
data/rbi/restate-sdk.rbi CHANGED
@@ -14,25 +14,204 @@ module Restate
14
14
  end
15
15
  def self.endpoint(*services, protocol: nil, identity_keys: nil); end
16
16
 
17
- # Returns the current context (any handler).
18
- sig { returns(Restate::Context) }
19
- def self.current_context; end
17
+ # ── Durable execution ──
20
18
 
21
- # Returns the current context for a VirtualObject exclusive handler.
22
- sig { returns(Restate::ObjectContext) }
23
- def self.current_object_context; end
19
+ # Execute a durable side effect. Returns a DurableFuture.
20
+ sig do
21
+ params(
22
+ name: String, serde: T.untyped, retry_policy: T.nilable(RunRetryPolicy),
23
+ background: T::Boolean, action: T.proc.returns(T.untyped)
24
+ ).returns(DurableFuture)
25
+ end
26
+ def self.run(name, serde: Restate::JsonSerde, retry_policy: nil, background: false, &action); end
27
+
28
+ # Convenience shortcut for +run(...).await+. Returns the result directly.
29
+ sig do
30
+ params(
31
+ name: String, serde: T.untyped, retry_policy: T.nilable(RunRetryPolicy),
32
+ background: T::Boolean, action: T.proc.returns(T.untyped)
33
+ ).returns(T.untyped)
34
+ end
35
+ def self.run_sync(name, serde: Restate::JsonSerde, retry_policy: nil, background: false, &action); end
36
+
37
+ # Durable timer that survives handler restarts.
38
+ sig { params(seconds: Numeric).returns(DurableFuture) }
39
+ def self.sleep(seconds); end
40
+
41
+ # ── State operations (VirtualObject / Workflow) ──
42
+
43
+ # Durably retrieve a state entry. Returns nil if unset.
44
+ sig { params(name: String, serde: T.untyped).returns(T.untyped) }
45
+ def self.get(name, serde: Restate::JsonSerde); end
46
+
47
+ # Durably retrieve a state entry, returning a DurableFuture instead of blocking.
48
+ sig { params(name: String, serde: T.untyped).returns(DurableFuture) }
49
+ def self.get_async(name, serde: Restate::JsonSerde); end
50
+
51
+ # Durably set a state entry.
52
+ sig { params(name: String, value: T.untyped, serde: T.untyped).void }
53
+ def self.set(name, value, serde: Restate::JsonSerde); end
54
+
55
+ # Durably remove a single state entry.
56
+ sig { params(name: String).void }
57
+ def self.clear(name); end
58
+
59
+ # Durably remove all state entries.
60
+ sig { void }
61
+ def self.clear_all; end
62
+
63
+ # List all state entry names.
64
+ sig { returns(T.untyped) }
65
+ def self.state_keys; end
66
+
67
+ # List all state entry names, returning a DurableFuture.
68
+ sig { returns(DurableFuture) }
69
+ def self.state_keys_async; end
70
+
71
+ # ── Service communication ──
72
+
73
+ # Durably call a handler on a Restate service.
74
+ sig do
75
+ params(
76
+ service: T.any(String, T::Class[T.anything]), handler: T.any(String, Symbol),
77
+ arg: T.untyped, key: T.nilable(String), idempotency_key: T.nilable(String),
78
+ headers: T.nilable(T::Hash[String, String]), input_serde: T.untyped, output_serde: T.untyped
79
+ ).returns(DurableCallFuture)
80
+ end
81
+ def self.service_call(service, handler, arg, key: nil, idempotency_key: nil, headers: nil,
82
+ input_serde: T.unsafe(nil), output_serde: T.unsafe(nil)); end
83
+
84
+ # Fire-and-forget send to a Restate service handler.
85
+ sig do
86
+ params(
87
+ service: T.any(String, T::Class[T.anything]), handler: T.any(String, Symbol),
88
+ arg: T.untyped, key: T.nilable(String), delay: T.nilable(Numeric),
89
+ idempotency_key: T.nilable(String), headers: T.nilable(T::Hash[String, String]),
90
+ input_serde: T.untyped
91
+ ).returns(SendHandle)
92
+ end
93
+ def self.service_send(service, handler, arg, key: nil, delay: nil, idempotency_key: nil,
94
+ headers: nil, input_serde: T.unsafe(nil)); end
95
+
96
+ # Durably call a handler on a Restate virtual object.
97
+ sig do
98
+ params(
99
+ service: T.any(String, T::Class[T.anything]), handler: T.any(String, Symbol),
100
+ key: String, arg: T.untyped, idempotency_key: T.nilable(String),
101
+ headers: T.nilable(T::Hash[String, String]), input_serde: T.untyped, output_serde: T.untyped
102
+ ).returns(DurableCallFuture)
103
+ end
104
+ def self.object_call(service, handler, key, arg, idempotency_key: nil, headers: nil,
105
+ input_serde: T.unsafe(nil), output_serde: T.unsafe(nil)); end
106
+
107
+ # Fire-and-forget send to a Restate virtual object handler.
108
+ sig do
109
+ params(
110
+ service: T.any(String, T::Class[T.anything]), handler: T.any(String, Symbol),
111
+ key: String, arg: T.untyped, delay: T.nilable(Numeric),
112
+ idempotency_key: T.nilable(String), headers: T.nilable(T::Hash[String, String]),
113
+ input_serde: T.untyped
114
+ ).returns(SendHandle)
115
+ end
116
+ def self.object_send(service, handler, key, arg, delay: nil, idempotency_key: nil,
117
+ headers: nil, input_serde: T.unsafe(nil)); end
118
+
119
+ # Durably call a handler on a Restate workflow.
120
+ sig do
121
+ params(
122
+ service: T.any(String, T::Class[T.anything]), handler: T.any(String, Symbol),
123
+ key: String, arg: T.untyped, idempotency_key: T.nilable(String),
124
+ headers: T.nilable(T::Hash[String, String]), input_serde: T.untyped, output_serde: T.untyped
125
+ ).returns(DurableCallFuture)
126
+ end
127
+ def self.workflow_call(service, handler, key, arg, idempotency_key: nil, headers: nil,
128
+ input_serde: T.unsafe(nil), output_serde: T.unsafe(nil)); end
129
+
130
+ # Fire-and-forget send to a Restate workflow handler.
131
+ sig do
132
+ params(
133
+ service: T.any(String, T::Class[T.anything]), handler: T.any(String, Symbol),
134
+ key: String, arg: T.untyped, delay: T.nilable(Numeric),
135
+ idempotency_key: T.nilable(String), headers: T.nilable(T::Hash[String, String]),
136
+ input_serde: T.untyped
137
+ ).returns(SendHandle)
138
+ end
139
+ def self.workflow_send(service, handler, key, arg, delay: nil, idempotency_key: nil,
140
+ headers: nil, input_serde: T.unsafe(nil)); end
141
+
142
+ # Durably call a handler using raw bytes (no serialization).
143
+ sig do
144
+ params(
145
+ service: String, handler: String, arg: String,
146
+ key: T.nilable(String), idempotency_key: T.nilable(String),
147
+ headers: T.nilable(T::Hash[String, String])
148
+ ).returns(DurableCallFuture)
149
+ end
150
+ def self.generic_call(service, handler, arg, key: nil, idempotency_key: nil, headers: nil); end
151
+
152
+ # Fire-and-forget send using raw bytes (no serialization).
153
+ sig do
154
+ params(
155
+ service: String, handler: String, arg: String,
156
+ key: T.nilable(String), delay: T.nilable(Numeric),
157
+ idempotency_key: T.nilable(String), headers: T.nilable(T::Hash[String, String])
158
+ ).returns(SendHandle)
159
+ end
160
+ def self.generic_send(service, handler, arg, key: nil, delay: nil, idempotency_key: nil, headers: nil); end
161
+
162
+ # ── Awakeables ──
163
+
164
+ # Create an awakeable for external callbacks. Returns [awakeable_id, DurableFuture].
165
+ sig { params(serde: T.untyped).returns([String, DurableFuture]) }
166
+ def self.awakeable(serde: Restate::JsonSerde); end
24
167
 
25
- # Returns the current context for a VirtualObject shared handler.
26
- sig { returns(Restate::ObjectSharedContext) }
27
- def self.current_shared_context; end
168
+ # Resolve an awakeable with a success value.
169
+ sig { params(awakeable_id: String, payload: T.untyped, serde: T.untyped).void }
170
+ def self.resolve_awakeable(awakeable_id, payload, serde: Restate::JsonSerde); end
28
171
 
29
- # Returns the current context for a Workflow main handler.
30
- sig { returns(Restate::WorkflowContext) }
31
- def self.current_workflow_context; end
172
+ # Reject an awakeable with a terminal failure.
173
+ sig { params(awakeable_id: String, message: String, code: Integer).void }
174
+ def self.reject_awakeable(awakeable_id, message, code: 500); end
32
175
 
33
- # Returns the current context for a Workflow shared handler.
34
- sig { returns(Restate::WorkflowSharedContext) }
35
- def self.current_shared_workflow_context; end
176
+ # ── Promises (Workflow only) ──
177
+
178
+ # Get a durable promise value, blocking until resolved.
179
+ sig { params(name: String, serde: T.untyped).returns(T.untyped) }
180
+ def self.promise(name, serde: Restate::JsonSerde); end
181
+
182
+ # Peek at a durable promise without blocking. Returns nil if not yet resolved.
183
+ sig { params(name: String, serde: T.untyped).returns(T.untyped) }
184
+ def self.peek_promise(name, serde: Restate::JsonSerde); end
185
+
186
+ # Resolve a durable promise with a value.
187
+ sig { params(name: String, payload: T.untyped, serde: T.untyped).void }
188
+ def self.resolve_promise(name, payload, serde: Restate::JsonSerde); end
189
+
190
+ # Reject a durable promise with a terminal failure.
191
+ sig { params(name: String, message: String, code: Integer).void }
192
+ def self.reject_promise(name, message, code: 500); end
193
+
194
+ # ── Futures ──
195
+
196
+ # Wait until any of the given futures completes. Returns [completed, remaining].
197
+ sig { params(futures: DurableFuture).returns([T::Array[DurableFuture], T::Array[DurableFuture]]) }
198
+ def self.wait_any(*futures); end
199
+
200
+ # ── Request metadata ──
201
+
202
+ # Returns metadata about the current invocation (id, headers, raw body).
203
+ sig { returns(T.untyped) }
204
+ def self.request; end
205
+
206
+ # Returns the key for this virtual object or workflow invocation.
207
+ sig { returns(String) }
208
+ def self.key; end
209
+
210
+ # ── Invocation control ──
211
+
212
+ # Request cancellation of another invocation.
213
+ sig { params(invocation_id: String).void }
214
+ def self.cancel_invocation(invocation_id); end
36
215
 
37
216
  class TerminalError < StandardError
38
217
  sig { returns(Integer) }
@@ -277,13 +456,106 @@ module Restate
277
456
  end
278
457
 
279
458
  # Stateless service base class.
280
- class Service; end
459
+ class Service
460
+ sig { returns(ServiceCallProxy) }
461
+ def self.call; end
462
+
463
+ sig { params(delay: T.nilable(Numeric)).returns(ServiceSendProxy) }
464
+ def self.send!(delay: nil); end
465
+ end
281
466
 
282
467
  # Keyed virtual object base class.
283
- class VirtualObject; end
468
+ class VirtualObject
469
+ sig { params(key: String).returns(ServiceCallProxy) }
470
+ def self.call(key); end
471
+
472
+ sig { params(key: String, delay: T.nilable(Numeric)).returns(ServiceSendProxy) }
473
+ def self.send!(key, delay: nil); end
474
+
475
+ sig { params(name: Symbol, default: T.untyped, serde: T.untyped).void }
476
+ def self.state(name, default: nil, serde: nil); end
477
+ end
284
478
 
285
479
  # Durable workflow base class.
286
- class Workflow; end
480
+ class Workflow
481
+ sig { params(key: String).returns(ServiceCallProxy) }
482
+ def self.call(key); end
483
+
484
+ sig { params(key: String, delay: T.nilable(Numeric)).returns(ServiceSendProxy) }
485
+ def self.send!(key, delay: nil); end
486
+
487
+ sig { params(name: Symbol, default: T.untyped, serde: T.untyped).void }
488
+ def self.state(name, default: nil, serde: nil); end
489
+ end
490
+
491
+ # Proxy for fluent durable calls.
492
+ class ServiceCallProxy; end
493
+
494
+ # Proxy for fluent fire-and-forget sends.
495
+ class ServiceSendProxy; end
496
+
497
+ # Global SDK configuration.
498
+ class Config
499
+ sig { returns(String) }
500
+ attr_accessor :ingress_url
501
+
502
+ sig { returns(String) }
503
+ attr_accessor :admin_url
504
+
505
+ sig { returns(T::Hash[String, String]) }
506
+ attr_accessor :ingress_headers
507
+
508
+ sig { returns(T::Hash[String, String]) }
509
+ attr_accessor :admin_headers
510
+ end
511
+
512
+ # Configure the SDK globally.
513
+ sig { params(block: T.proc.params(arg0: Config).void).void }
514
+ def self.configure(&block); end
515
+
516
+ # Returns the global configuration.
517
+ sig { returns(Config) }
518
+ def self.config; end
519
+
520
+ # Returns a pre-configured Client using the global config.
521
+ sig { returns(Client) }
522
+ def self.client; end
523
+
524
+ # HTTP client for invoking Restate services and managing the runtime.
525
+ class Client
526
+ sig do
527
+ params(ingress_url: String, admin_url: String,
528
+ ingress_headers: T::Hash[String, String],
529
+ admin_headers: T::Hash[String, String]).void
530
+ end
531
+ def initialize(ingress_url: 'http://localhost:8080', admin_url: 'http://localhost:9070',
532
+ ingress_headers: {}, admin_headers: {}); end
533
+
534
+ sig { params(service: T.any(String, T::Class[T.anything])).returns(ClientServiceProxy) }
535
+ def service(service); end
536
+
537
+ sig { params(service: T.any(String, T::Class[T.anything]), key: String).returns(ClientServiceProxy) }
538
+ def object(service, key); end
539
+
540
+ sig { params(service: T.any(String, T::Class[T.anything]), key: String).returns(ClientServiceProxy) }
541
+ def workflow(service, key); end
542
+
543
+ sig { params(awakeable_id: String, payload: T.untyped).void }
544
+ def resolve_awakeable(awakeable_id, payload); end
545
+
546
+ sig { params(awakeable_id: String, message: String, code: Integer).void }
547
+ def reject_awakeable(awakeable_id, message, code: 500); end
548
+
549
+ sig { params(invocation_id: String).void }
550
+ def cancel_invocation(invocation_id); end
551
+
552
+ sig { params(invocation_id: String).void }
553
+ def kill_invocation(invocation_id); end
554
+
555
+ end
556
+
557
+ # Proxy for HTTP client calls.
558
+ class ClientServiceProxy; end
287
559
 
288
560
  class Endpoint
289
561
  sig { params(services: T.untyped).void }
@@ -298,6 +570,9 @@ module Restate
298
570
  sig { params(key: String).void }
299
571
  def identity_key(key); end
300
572
 
573
+ sig { params(klass: T.untyped, args: T.untyped, kwargs: T.untyped).returns(T.self_type) }
574
+ def use(klass, *args, **kwargs); end
575
+
301
576
  sig { returns(T.untyped) }
302
577
  def app; end
303
578
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: restate-sdk
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.5.1
4
+ version: 0.7.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Restate Developers
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2026-03-18 00:00:00.000000000 Z
11
+ date: 2026-03-20 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: async
@@ -69,6 +69,8 @@ files:
69
69
  - ext/restate_internal/extconf.rb
70
70
  - ext/restate_internal/src/lib.rs
71
71
  - lib/restate.rb
72
+ - lib/restate/client.rb
73
+ - lib/restate/config.rb
72
74
  - lib/restate/context.rb
73
75
  - lib/restate/discovery.rb
74
76
  - lib/restate/durable_future.rb
@@ -80,6 +82,7 @@ files:
80
82
  - lib/restate/server_context.rb
81
83
  - lib/restate/service.rb
82
84
  - lib/restate/service_dsl.rb
85
+ - lib/restate/service_proxy.rb
83
86
  - lib/restate/testing.rb
84
87
  - lib/restate/version.rb
85
88
  - lib/restate/virtual_object.rb