@rikalabs/akter 0.1.0-alpha.0 → 0.1.0-alpha.3

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 (308) hide show
  1. package/CHANGELOG.md +46 -3
  2. package/README.md +2 -2
  3. package/dist/actor/definition.d.ts +13 -9
  4. package/dist/actor/descriptor.d.ts +2 -2
  5. package/dist/actor/descriptor.js +4 -4
  6. package/dist/client/calls.js +1 -1
  7. package/dist/client/index.d.ts +1 -1
  8. package/dist/client/index.js +1 -1
  9. package/dist/errors/actor.d.ts +12 -42
  10. package/dist/errors/actor.js +13 -42
  11. package/dist/index.d.ts +1 -1
  12. package/dist/index.js +1 -1
  13. package/dist/members/payload.d.ts +1 -1
  14. package/dist/protocol/inspection.d.ts +221 -1
  15. package/dist/protocol/inspection.js +151 -2
  16. package/dist/protocol/wire.d.ts +6 -49
  17. package/dist/protocol/wire.js +1 -10
  18. package/dist/runtime/actors.d.ts +3 -0
  19. package/dist/runtime/adoption/backfill.js +1 -1
  20. package/dist/runtime/adoption/enforce.js +2 -2
  21. package/dist/runtime/adoption/observe.js +1 -1
  22. package/dist/runtime/adoption/plan.d.ts +1 -1
  23. package/dist/runtime/adoption/startup.js +1 -1
  24. package/dist/runtime/adoption/status.d.ts +1 -1
  25. package/dist/runtime/app.d.ts +65 -0
  26. package/dist/runtime/app.js +38 -0
  27. package/dist/runtime/connections/holder.d.ts +11 -1
  28. package/dist/runtime/connections/holder.js +8 -4
  29. package/dist/runtime/connections/streams.d.ts +4 -4
  30. package/dist/runtime/content/store.js +15 -11
  31. package/dist/runtime/database/bounded.d.ts +4 -18
  32. package/dist/runtime/database/bounded.js +36 -22
  33. package/dist/runtime/database/coordination.d.ts +12 -3
  34. package/dist/runtime/database/coordination.js +29 -36
  35. package/dist/runtime/database/migrations.d.ts +61 -29
  36. package/dist/runtime/database/migrations.js +375 -139
  37. package/dist/runtime/database/replica.d.ts +4 -1
  38. package/dist/runtime/database/replica.js +4 -1
  39. package/dist/runtime/database/schema.d.ts +13 -0
  40. package/dist/runtime/database/schema.js +13 -0
  41. package/dist/runtime/database/shards.d.ts +31 -13
  42. package/dist/runtime/database/shards.js +38 -26
  43. package/dist/runtime/entity/register.d.ts +8 -1
  44. package/dist/runtime/entity/register.js +58 -7
  45. package/dist/runtime/fleet/checks.js +4 -4
  46. package/dist/runtime/fleet/maintainer.d.ts +1 -1
  47. package/dist/runtime/fleet/maintainer.js +1 -1
  48. package/dist/runtime/index.d.ts +2 -0
  49. package/dist/runtime/index.js +1 -0
  50. package/dist/runtime/inspector/layer.d.ts +20 -0
  51. package/dist/runtime/inspector/layer.js +224 -5
  52. package/dist/runtime/inspector/queries.d.ts +54 -8
  53. package/dist/runtime/inspector/queries.js +84 -15
  54. package/dist/runtime/layer.d.ts +48 -39
  55. package/dist/runtime/layer.js +124 -56
  56. package/dist/runtime/operators/audit.d.ts +3 -0
  57. package/dist/runtime/operators/audit.js +6 -2
  58. package/dist/runtime/operators/repair.js +30 -10
  59. package/dist/runtime/operators/seed.js +4 -2
  60. package/dist/runtime/payloads/versions.d.ts +4 -4
  61. package/dist/runtime/payloads/versions.js +24 -15
  62. package/dist/runtime/queries.js +4 -2
  63. package/dist/runtime/registration.d.ts +5 -2
  64. package/dist/runtime/registration.js +3 -3
  65. package/dist/runtime/runner.d.ts +12 -0
  66. package/dist/runtime/runner.js +12 -0
  67. package/dist/runtime/storage/codec.d.ts +19 -7
  68. package/dist/runtime/storage/codec.js +23 -7
  69. package/dist/runtime/storage/placements.d.ts +6 -1
  70. package/dist/runtime/storage/placements.js +98 -6
  71. package/dist/runtime/storage/retention.d.ts +6 -0
  72. package/dist/runtime/storage/retention.js +25 -13
  73. package/dist/runtime/subscriptions/relay.js +47 -44
  74. package/dist/runtime/subscriptions/storage.d.ts +3 -2
  75. package/dist/runtime/subscriptions/storage.js +9 -6
  76. package/dist/runtime/telemetry/live.d.ts +255 -0
  77. package/dist/runtime/telemetry/live.js +540 -0
  78. package/dist/runtime/telemetry/metrics.d.ts +2 -0
  79. package/dist/runtime/telemetry/metrics.js +4 -1
  80. package/dist/runtime/telemetry/sampler.js +33 -13
  81. package/dist/runtime/telemetry/spans.d.ts +1 -1
  82. package/dist/runtime/telemetry/spans.js +1 -1
  83. package/dist/runtime/topology/locks.d.ts +6 -3
  84. package/dist/runtime/topology/locks.js +27 -4
  85. package/dist/runtime/turn/execute.d.ts +2 -0
  86. package/dist/runtime/turn/execute.js +5 -2
  87. package/dist/runtime/turn/pipeline.d.ts +5 -12
  88. package/dist/runtime/turn/pipeline.js +11 -11
  89. package/dist/runtime/turn/relay.d.ts +13 -3
  90. package/dist/runtime/turn/relay.js +27 -14
  91. package/dist/runtime/turn/rows.js +4 -4
  92. package/dist/runtime/workflows/compatibility.d.ts +1 -1
  93. package/dist/runtime/workflows/compatibility.js +85 -31
  94. package/dist/runtime/workflows/engine.js +20 -17
  95. package/dist/serve/layer.js +3 -2
  96. package/dist/tables/owned.d.ts +1 -1
  97. package/dist/tables/owned.js +1 -1
  98. package/dist/testing/actor-test.d.ts +2 -24
  99. package/dist/testing/actor-test.js +1 -27
  100. package/dist/testing/index.d.ts +0 -12
  101. package/dist/testing/index.js +0 -6
  102. package/package.json +1 -1
  103. package/dist/runtime/database/neki/migrations.d.ts +0 -31
  104. package/dist/runtime/database/neki/migrations.js +0 -276
  105. package/dist/runtime/database/neki/session.d.ts +0 -23
  106. package/dist/runtime/database/neki/session.js +0 -31
  107. package/dist/testing/cluster.d.ts +0 -93
  108. package/dist/testing/cluster.js +0 -296
  109. package/dist/testing/conformance/access.d.ts +0 -5
  110. package/dist/testing/conformance/access.js +0 -531
  111. package/dist/testing/conformance/admission.d.ts +0 -11
  112. package/dist/testing/conformance/admission.js +0 -182
  113. package/dist/testing/conformance/adoption.d.ts +0 -2
  114. package/dist/testing/conformance/adoption.js +0 -1019
  115. package/dist/testing/conformance/assertions.d.ts +0 -202
  116. package/dist/testing/conformance/assertions.js +0 -849
  117. package/dist/testing/conformance/batches.d.ts +0 -41
  118. package/dist/testing/conformance/batches.js +0 -388
  119. package/dist/testing/conformance/blobs.d.ts +0 -14
  120. package/dist/testing/conformance/blobs.js +0 -405
  121. package/dist/testing/conformance/capacity.d.ts +0 -8
  122. package/dist/testing/conformance/capacity.js +0 -433
  123. package/dist/testing/conformance/client.d.ts +0 -5
  124. package/dist/testing/conformance/client.js +0 -719
  125. package/dist/testing/conformance/cold-serve.d.ts +0 -16
  126. package/dist/testing/conformance/cold-serve.js +0 -254
  127. package/dist/testing/conformance/connections/actors.d.ts +0 -1143
  128. package/dist/testing/conformance/connections/actors.js +0 -180
  129. package/dist/testing/conformance/connections/harness.d.ts +0 -1754
  130. package/dist/testing/conformance/connections/harness.js +0 -142
  131. package/dist/testing/conformance/connections/holders.d.ts +0 -4
  132. package/dist/testing/conformance/connections/holders.js +0 -165
  133. package/dist/testing/conformance/connections/lifecycle.d.ts +0 -4
  134. package/dist/testing/conformance/connections/lifecycle.js +0 -113
  135. package/dist/testing/conformance/connections/limits.d.ts +0 -4
  136. package/dist/testing/conformance/connections/limits.js +0 -127
  137. package/dist/testing/conformance/connections/reauthorization.d.ts +0 -4
  138. package/dist/testing/conformance/connections/reauthorization.js +0 -170
  139. package/dist/testing/conformance/connections/resync.d.ts +0 -4
  140. package/dist/testing/conformance/connections/resync.js +0 -360
  141. package/dist/testing/conformance/connections/takeover.d.ts +0 -4
  142. package/dist/testing/conformance/connections/takeover.js +0 -287
  143. package/dist/testing/conformance/connections.d.ts +0 -4
  144. package/dist/testing/conformance/connections.js +0 -15
  145. package/dist/testing/conformance/content-blobs.d.ts +0 -16
  146. package/dist/testing/conformance/content-blobs.js +0 -534
  147. package/dist/testing/conformance/counter.d.ts +0 -16
  148. package/dist/testing/conformance/counter.js +0 -813
  149. package/dist/testing/conformance/cron.d.ts +0 -5
  150. package/dist/testing/conformance/cron.js +0 -665
  151. package/dist/testing/conformance/drain.d.ts +0 -26
  152. package/dist/testing/conformance/drain.js +0 -540
  153. package/dist/testing/conformance/effect-control.d.ts +0 -38
  154. package/dist/testing/conformance/effect-control.js +0 -1059
  155. package/dist/testing/conformance/effects.d.ts +0 -23
  156. package/dist/testing/conformance/effects.js +0 -432
  157. package/dist/testing/conformance/events.d.ts +0 -28
  158. package/dist/testing/conformance/events.js +0 -335
  159. package/dist/testing/conformance/export.d.ts +0 -2
  160. package/dist/testing/conformance/export.js +0 -368
  161. package/dist/testing/conformance/fleet.d.ts +0 -444
  162. package/dist/testing/conformance/fleet.js +0 -1009
  163. package/dist/testing/conformance/groups.d.ts +0 -7
  164. package/dist/testing/conformance/groups.js +0 -353
  165. package/dist/testing/conformance/heap.d.ts +0 -3
  166. package/dist/testing/conformance/heap.js +0 -149
  167. package/dist/testing/conformance/http.d.ts +0 -2809
  168. package/dist/testing/conformance/http.js +0 -1234
  169. package/dist/testing/conformance/inspection-views.d.ts +0 -8
  170. package/dist/testing/conformance/inspection-views.js +0 -272
  171. package/dist/testing/conformance/inspector.d.ts +0 -7
  172. package/dist/testing/conformance/inspector.js +0 -650
  173. package/dist/testing/conformance/mint.d.ts +0 -58
  174. package/dist/testing/conformance/mint.js +0 -692
  175. package/dist/testing/conformance/multi-runner.d.ts +0 -8
  176. package/dist/testing/conformance/multi-runner.js +0 -403
  177. package/dist/testing/conformance/neki/plan.d.ts +0 -19
  178. package/dist/testing/conformance/neki/plan.js +0 -30
  179. package/dist/testing/conformance/observability.d.ts +0 -3
  180. package/dist/testing/conformance/observability.js +0 -343
  181. package/dist/testing/conformance/offline.d.ts +0 -4
  182. package/dist/testing/conformance/offline.js +0 -474
  183. package/dist/testing/conformance/operator-harness.d.ts +0 -57
  184. package/dist/testing/conformance/operator-harness.js +0 -78
  185. package/dist/testing/conformance/operator.d.ts +0 -3
  186. package/dist/testing/conformance/operator.js +0 -379
  187. package/dist/testing/conformance/outbox-cross-shard.d.ts +0 -14
  188. package/dist/testing/conformance/outbox-cross-shard.js +0 -160
  189. package/dist/testing/conformance/outbox.d.ts +0 -36
  190. package/dist/testing/conformance/outbox.js +0 -437
  191. package/dist/testing/conformance/payload-migrations.d.ts +0 -3
  192. package/dist/testing/conformance/payload-migrations.js +0 -612
  193. package/dist/testing/conformance/pipeline.d.ts +0 -3
  194. package/dist/testing/conformance/pipeline.js +0 -1040
  195. package/dist/testing/conformance/placement.d.ts +0 -22
  196. package/dist/testing/conformance/placement.js +0 -539
  197. package/dist/testing/conformance/platform.d.ts +0 -40
  198. package/dist/testing/conformance/platform.js +0 -101
  199. package/dist/testing/conformance/progress.d.ts +0 -39
  200. package/dist/testing/conformance/progress.js +0 -666
  201. package/dist/testing/conformance/properties.d.ts +0 -6
  202. package/dist/testing/conformance/properties.js +0 -295
  203. package/dist/testing/conformance/protocols.d.ts +0 -4
  204. package/dist/testing/conformance/protocols.js +0 -618
  205. package/dist/testing/conformance/provider/advertise.d.ts +0 -21
  206. package/dist/testing/conformance/provider/advertise.js +0 -44
  207. package/dist/testing/conformance/read-your-writes.d.ts +0 -20
  208. package/dist/testing/conformance/read-your-writes.js +0 -192
  209. package/dist/testing/conformance/reducers.d.ts +0 -8
  210. package/dist/testing/conformance/reducers.js +0 -258
  211. package/dist/testing/conformance/relay.d.ts +0 -42
  212. package/dist/testing/conformance/relay.js +0 -1115
  213. package/dist/testing/conformance/restore.d.ts +0 -43
  214. package/dist/testing/conformance/restore.js +0 -341
  215. package/dist/testing/conformance/retention.d.ts +0 -14
  216. package/dist/testing/conformance/retention.js +0 -463
  217. package/dist/testing/conformance/rls.d.ts +0 -24
  218. package/dist/testing/conformance/rls.js +0 -576
  219. package/dist/testing/conformance/simulation.d.ts +0 -31
  220. package/dist/testing/conformance/simulation.js +0 -167
  221. package/dist/testing/conformance/single-shard.d.ts +0 -2
  222. package/dist/testing/conformance/single-shard.js +0 -125
  223. package/dist/testing/conformance/singleton.d.ts +0 -3
  224. package/dist/testing/conformance/singleton.js +0 -293
  225. package/dist/testing/conformance/statements.d.ts +0 -60
  226. package/dist/testing/conformance/statements.js +0 -108
  227. package/dist/testing/conformance/streams.d.ts +0 -7
  228. package/dist/testing/conformance/streams.js +0 -280
  229. package/dist/testing/conformance/subscriptions/access.d.ts +0 -4
  230. package/dist/testing/conformance/subscriptions/access.js +0 -98
  231. package/dist/testing/conformance/subscriptions/actors.d.ts +0 -4910
  232. package/dist/testing/conformance/subscriptions/actors.js +0 -372
  233. package/dist/testing/conformance/subscriptions/cluster.d.ts +0 -4
  234. package/dist/testing/conformance/subscriptions/cluster.js +0 -89
  235. package/dist/testing/conformance/subscriptions/delivery.d.ts +0 -4
  236. package/dist/testing/conformance/subscriptions/delivery.js +0 -253
  237. package/dist/testing/conformance/subscriptions/deploys.d.ts +0 -4
  238. package/dist/testing/conformance/subscriptions/deploys.js +0 -162
  239. package/dist/testing/conformance/subscriptions/epochs.d.ts +0 -4
  240. package/dist/testing/conformance/subscriptions/epochs.js +0 -169
  241. package/dist/testing/conformance/subscriptions/failures.d.ts +0 -4
  242. package/dist/testing/conformance/subscriptions/failures.js +0 -108
  243. package/dist/testing/conformance/subscriptions/feeds.d.ts +0 -4
  244. package/dist/testing/conformance/subscriptions/feeds.js +0 -218
  245. package/dist/testing/conformance/subscriptions/harness.d.ts +0 -124
  246. package/dist/testing/conformance/subscriptions/harness.js +0 -143
  247. package/dist/testing/conformance/subscriptions/operator.d.ts +0 -4
  248. package/dist/testing/conformance/subscriptions/operator.js +0 -128
  249. package/dist/testing/conformance/subscriptions/retention.d.ts +0 -4
  250. package/dist/testing/conformance/subscriptions/retention.js +0 -288
  251. package/dist/testing/conformance/subscriptions/routing.d.ts +0 -4
  252. package/dist/testing/conformance/subscriptions/routing.js +0 -179
  253. package/dist/testing/conformance/subscriptions.d.ts +0 -4
  254. package/dist/testing/conformance/subscriptions.js +0 -19
  255. package/dist/testing/conformance/tables.d.ts +0 -125
  256. package/dist/testing/conformance/tables.js +0 -664
  257. package/dist/testing/conformance/transports/actors.d.ts +0 -1907
  258. package/dist/testing/conformance/transports/actors.js +0 -163
  259. package/dist/testing/conformance/transports/client.d.ts +0 -3
  260. package/dist/testing/conformance/transports/client.js +0 -237
  261. package/dist/testing/conformance/transports/feeds.d.ts +0 -3
  262. package/dist/testing/conformance/transports/feeds.js +0 -232
  263. package/dist/testing/conformance/transports/harness.d.ts +0 -93
  264. package/dist/testing/conformance/transports/harness.js +0 -84
  265. package/dist/testing/conformance/transports/streams.d.ts +0 -3
  266. package/dist/testing/conformance/transports/streams.js +0 -96
  267. package/dist/testing/conformance/transports/websocket.d.ts +0 -3
  268. package/dist/testing/conformance/transports/websocket.js +0 -384
  269. package/dist/testing/conformance/transports/wire.d.ts +0 -141
  270. package/dist/testing/conformance/transports/wire.js +0 -204
  271. package/dist/testing/conformance/transports.d.ts +0 -3
  272. package/dist/testing/conformance/transports.js +0 -11
  273. package/dist/testing/conformance/watch.d.ts +0 -59
  274. package/dist/testing/conformance/watch.js +0 -879
  275. package/dist/testing/conformance/workflow-engine.d.ts +0 -97
  276. package/dist/testing/conformance/workflow-engine.js +0 -253
  277. package/dist/testing/conformance/workflow-versions.d.ts +0 -3
  278. package/dist/testing/conformance/workflow-versions.js +0 -545
  279. package/dist/testing/conformance/workflows/access.d.ts +0 -4
  280. package/dist/testing/conformance/workflows/access.js +0 -147
  281. package/dist/testing/conformance/workflows/actors.d.ts +0 -2317
  282. package/dist/testing/conformance/workflows/actors.js +0 -305
  283. package/dist/testing/conformance/workflows/basics.d.ts +0 -4
  284. package/dist/testing/conformance/workflows/basics.js +0 -144
  285. package/dist/testing/conformance/workflows/engine.d.ts +0 -4
  286. package/dist/testing/conformance/workflows/engine.js +0 -80
  287. package/dist/testing/conformance/workflows/guards.d.ts +0 -4
  288. package/dist/testing/conformance/workflows/guards.js +0 -172
  289. package/dist/testing/conformance/workflows/harness.d.ts +0 -14
  290. package/dist/testing/conformance/workflows/harness.js +0 -44
  291. package/dist/testing/conformance/workflows/recovery.d.ts +0 -4
  292. package/dist/testing/conformance/workflows/recovery.js +0 -181
  293. package/dist/testing/conformance/workflows/starts.d.ts +0 -4
  294. package/dist/testing/conformance/workflows/starts.js +0 -57
  295. package/dist/testing/conformance/workflows/suspension.d.ts +0 -4
  296. package/dist/testing/conformance/workflows/suspension.js +0 -106
  297. package/dist/testing/conformance/workflows/waits.d.ts +0 -4
  298. package/dist/testing/conformance/workflows/waits.js +0 -284
  299. package/dist/testing/conformance/workflows.d.ts +0 -4
  300. package/dist/testing/conformance/workflows.js +0 -19
  301. package/dist/testing/conformance.d.ts +0 -330
  302. package/dist/testing/conformance.js +0 -364
  303. package/dist/testing/foundation.d.ts +0 -41
  304. package/dist/testing/foundation.js +0 -517
  305. package/dist/testing/simulate-cluster.d.ts +0 -112
  306. package/dist/testing/simulate-cluster.js +0 -257
  307. package/dist/testing/simulate.d.ts +0 -90
  308. package/dist/testing/simulate.js +0 -127
@@ -1,93 +0,0 @@
1
- import { type Cause, Effect, Queue, Schema } from "effect";
2
- import { SqlClient } from "effect/sql";
3
- import type { ActorRef } from "../../../identity/caller.ts";
4
- import type { ServeOptions } from "../../../serve/layer.ts";
5
- import { ActorTest } from "../../actor-test.ts";
6
- import type { ConformanceEnvironment } from "../../conformance.ts";
7
- import { type WireSocket } from "./wire.ts";
8
- interface SseMessage {
9
- readonly id: string | undefined;
10
- readonly event: string | undefined;
11
- readonly data: string;
12
- }
13
- export declare const decodeEntry: (input: unknown, options?: import("effect/SchemaAST").ParseOptions) => Effect.Effect<{
14
- readonly event: {
15
- readonly _tag: "Said";
16
- readonly text: string;
17
- };
18
- readonly commandId: string;
19
- readonly timestamp: number;
20
- }, Schema.SchemaError, never>;
21
- /**
22
- * An event feed read over `fetch`, as the Promise client reads one: SSE
23
- * messages parsed from the body, comments skipped. Closed with the scope.
24
- */
25
- export declare const feed: (host: string, id: string, query: string, headers: Readonly<Record<string, string>>) => Effect.Effect<{
26
- status: number;
27
- body: string;
28
- messages: Queue.Queue<SseMessage, Cause.Done<void>>;
29
- }, never, import("effect/Scope").Scope>;
30
- /** The next `count` feed messages, failing the test if they don't arrive in time. */
31
- export declare const take: (messages: Queue.Dequeue<SseMessage, Cause.Done>, count: number, timeout?: number) => Effect.Effect<SseMessage[], never, never>;
32
- /** The `Said` text a feed message carries. */
33
- export declare const textOf: (message: SseMessage) => Effect.Effect<string, never, never>;
34
- /** The reason of a feed's `end` message or a refused feed's body, without its `_tag` key. */
35
- export declare const feedReason: (data: string) => Effect.Effect<{
36
- tag: string;
37
- code: string | undefined;
38
- cause: string | undefined;
39
- }, never, never>;
40
- export declare const cursorError: (body: string) => Effect.Effect<{
41
- tag: string;
42
- cursor: string;
43
- }, never, never>;
44
- export declare const rows: (ref: {
45
- readonly tenant: string;
46
- readonly actor: string;
47
- readonly id: string;
48
- }) => Effect.Effect<{
49
- connections: number;
50
- generations: number;
51
- }, never, SqlClient.SqlClient>;
52
- export declare const setup: (environment: ConformanceEnvironment, options?: Partial<ServeOptions<never>>) => Effect.Effect<{
53
- test: {
54
- readonly tenant: string;
55
- readonly actor: <D extends import("../../actor-test.ts").TestDefinition, O extends import("../../actor-test.ts").TestActorOptions = {}>(definition: D, id?: string, options?: O) => Effect.Effect<{
56
- readonly system: D extends import("../../../actor/definition.ts").DefinitionWithInternal<infer H> ? H : never;
57
- readonly inspect: Effect.Effect<import("../../actor-test.ts").Inspection>;
58
- }, never, import("../../../index.ts").Actors | (O extends {
59
- readonly seed: string;
60
- } ? import("effect/FileSystem").FileSystem : never)>;
61
- readonly inspect: (ref: ActorRef) => Effect.Effect<import("../../actor-test.ts").Inspection>;
62
- readonly crashNext: (point: import("../../index.ts").TurnPoint, options?: import("../../actor-test.ts").FaultOptions) => Effect.Effect<void>;
63
- readonly pauseNext: (point: import("../../index.ts").TurnPoint, options?: import("../../actor-test.ts").FaultOptions) => Effect.Effect<{
64
- readonly reached: Effect.Effect<void>;
65
- readonly release: Effect.Effect<void>;
66
- }>;
67
- readonly clearFaults: Effect.Effect<ReadonlyArray<import("../../index.ts").TurnPoint>>;
68
- readonly invalidate: (ref: ActorRef) => Effect.Effect<void>;
69
- readonly connect: <C extends import("../../../index.ts").AnyConnection>(ref: ActorRef, member: C, params: C["payload"]["Type"]) => Effect.Effect<import("../../actor-test.ts").TestConnection<C>, import("../../../index.ts").ActorError | C["error"]["Type"]>;
70
- readonly hibernate: (ref: ActorRef) => Effect.Effect<void>;
71
- readonly advance: (duration: import("effect/Duration").Input) => Effect.Effect<void>;
72
- readonly now: Effect.Effect<import("effect/DateTime").Utc>;
73
- readonly cleanup: Effect.Effect<import("../../../runtime/storage/retention.ts").Swept>;
74
- readonly receiptsFor: (ref: ActorRef, command: string) => Effect.Effect<number>;
75
- readonly seed: (ref: ActorRef, state: {
76
- readonly [key: string]: Schema.Json;
77
- }, version: number) => Effect.Effect<void>;
78
- readonly progress: Effect.Effect<ReadonlyArray<import("../../actor-test.ts").ProgressRecord>>;
79
- readonly resendProgress: (message: import("../../../runtime/jobs/progress.ts").ProgressMessage) => Effect.Effect<void>;
80
- readonly dropCommitted: (dropping: boolean) => Effect.Effect<void>;
81
- readonly dropProgress: (predicate: (message: import("../../../runtime/jobs/progress.ts").ProgressMessage | import("../../../runtime/jobs/progress.ts").ProgressClosed) => boolean) => Effect.Effect<void>;
82
- };
83
- host: string;
84
- token: (subject?: string) => string;
85
- }, never, ActorTest | import("../../index.ts").InternalActors | import("../../../runtime/drain.ts").RuntimeControl | import("effect/Scope").Scope>;
86
- /** Says `hello` and reads through `open` and the open handler's greeting. */
87
- export declare const greet: (ws: WireSocket, authorization: string, name?: string) => Effect.Effect<{
88
- readonly t: "open";
89
- readonly connectionId: string;
90
- readonly baseline?: string | undefined;
91
- readonly reauthenticateBy?: number | undefined;
92
- }, never, never>;
93
- export {};
@@ -1,84 +0,0 @@
1
- import { Context, Effect, Layer, Queue, Schema, Stream } from "effect";
2
- import { FetchHttpClient, HttpClient, HttpClientRequest } from "effect/http";
3
- import { SqlClient } from "effect/sql";
4
- import { ActorTest } from "../../actor-test.js";
5
- import { Said } from "./actors.js";
6
- import { decodeReason, opened, serveSockets } from "./wire.js";
7
- const FeedEntry = Schema.fromJsonString(Schema.Struct({
8
- event: Schema.toCodecJson(Said),
9
- commandId: Schema.String,
10
- timestamp: Schema.Finite,
11
- }));
12
- export const decodeEntry = Schema.decodeUnknownEffect(FeedEntry);
13
- const decodeBody = Schema.decodeUnknownEffect(Schema.fromJsonString(Schema.Json));
14
- /**
15
- * An event feed read over `fetch`, as the Promise client reads one: SSE
16
- * messages parsed from the body, comments skipped. Closed with the scope.
17
- */
18
- export const feed = (host, id, query, headers) => Effect.gen(function* () {
19
- const client = Context.get(yield* Layer.build(FetchHttpClient.layer), HttpClient.HttpClient);
20
- const response = yield* client
21
- .execute(HttpClientRequest.get(`http://${host}/api/actors/FeedRoom/${id}/events?${query}`, {
22
- headers,
23
- }))
24
- .pipe(Effect.orDie);
25
- const messages = yield* Queue.unbounded();
26
- if (response.status !== 200)
27
- return { status: response.status, body: yield* response.text.pipe(Effect.orDie), messages };
28
- let text = "";
29
- yield* response.stream.pipe(Stream.decodeText, Stream.runForEach((chunk) => Effect.gen(function* () {
30
- text += chunk;
31
- let end = text.indexOf("\n\n");
32
- while (end !== -1) {
33
- const block = text.slice(0, end);
34
- text = text.slice(end + 2);
35
- end = text.indexOf("\n\n");
36
- const fields = new Map();
37
- for (const line of block.split("\n"))
38
- if (!line.startsWith(":")) {
39
- const colon = line.indexOf(":");
40
- fields.set(line.slice(0, colon), line.slice(colon + 2));
41
- }
42
- if (fields.has("data"))
43
- yield* Queue.offer(messages, {
44
- id: fields.get("id"),
45
- event: fields.get("event"),
46
- data: fields.get("data"),
47
- });
48
- }
49
- })), Effect.ignore, Effect.andThen(Queue.end(messages)), Effect.forkScoped);
50
- return { status: 200, body: "", messages };
51
- });
52
- /** The next `count` feed messages, failing the test if they don't arrive in time. */
53
- export const take = (messages, count, timeout = 20_000) => Effect.forEach(Array.from({ length: count }, (_, index) => index), () => Queue.take(messages).pipe(Effect.catch(() => Effect.die(new Error("The feed ended"))), Effect.timeoutOrElse({
54
- duration: timeout,
55
- orElse: () => Effect.die(new Error("No feed message arrived")),
56
- })));
57
- /** The `Said` text a feed message carries. */
58
- export const textOf = (message) => decodeEntry(message.data).pipe(Effect.orDie, Effect.map((entry) => entry.event.text));
59
- /** The reason of a feed's `end` message or a refused feed's body, without its `_tag` key. */
60
- export const feedReason = (data) => decodeBody(data).pipe(Effect.flatMap(decodeReason), Effect.orDie, Effect.map(({ reason }) => ({ tag: reason._tag, code: reason.code, cause: reason.cause })));
61
- const CursorBody = Schema.Struct({ _tag: Schema.String, cursor: Schema.String });
62
- export const cursorError = (body) => decodeBody(body).pipe(Effect.flatMap(Schema.decodeUnknownEffect(CursorBody)), Effect.orDie, Effect.map((error) => ({ tag: error._tag, cursor: error.cursor })));
63
- export const rows = Effect.fnUntraced(function* (ref) {
64
- const sql = yield* SqlClient.SqlClient;
65
- const [counts] = yield* sql `
66
- SELECT
67
- (SELECT count(*)::int FROM actor_connections WHERE tenant_id = ${ref.tenant}
68
- AND actor_type = ${ref.actor} AND actor_id = ${ref.id}) AS connections,
69
- (SELECT count(*)::int FROM actor_generations WHERE tenant_id = ${ref.tenant}
70
- AND actor_type = ${ref.actor} AND actor_id = ${ref.id}) AS generations`;
71
- return counts;
72
- }, Effect.orDie);
73
- export const setup = (environment, options) => Effect.gen(function* () {
74
- const test = yield* ActorTest;
75
- const host = yield* serveSockets(environment, options);
76
- return { test, host, token: (subject = "alice") => `Bearer ${test.tenant}:${subject}` };
77
- });
78
- /** Says `hello` and reads through `open` and the open handler's greeting. */
79
- export const greet = (ws, authorization, name = "alice") => Effect.gen(function* () {
80
- yield* ws.send({ t: "hello", authorization, params: { name } });
81
- const open = yield* opened((yield* ws.until("open")).at(-1));
82
- yield* ws.until("frame");
83
- return open;
84
- });
@@ -1,3 +0,0 @@
1
- import type { ConformanceCase } from "../../conformance.ts";
2
- /** Unwritable sockets and stream members served over SSE. */
3
- export declare const transportStreamConformance: ReadonlyArray<ConformanceCase>;
@@ -1,96 +0,0 @@
1
- import { Context, Effect, Layer, Stream } from "effect";
2
- import { FetchHttpClient, HttpClient, HttpClientRequest } from "effect/http";
3
- import { Socket } from "effect/socket";
4
- import { User } from "../../../index.js";
5
- import { InternalActors } from "../../../runtime/actors.js";
6
- import { descriptorOf } from "../../../actor/descriptor.js";
7
- import { socketSession } from "../../../serve/sessions/socket.js";
8
- import { ActorTest } from "../../actor-test.js";
9
- import { Chat, FeedRoom, Refused, SocketRoom } from "./actors.js";
10
- import { asFailure, encodeClient } from "./wire.js";
11
- import { rows, setup } from "./harness.js";
12
- /** Unwritable sockets and stream members served over SSE. */
13
- export const transportStreamConformance = [
14
- {
15
- name: "ends a WebSocket session whose socket can no longer be written, and deletes its row",
16
- run: ({ expect, environment }) => environment.run(Effect.gen(function* () {
17
- const test = yield* ActorTest;
18
- const actors = yield* InternalActors;
19
- const ref = (yield* SocketRoom.get("ws-unwritable")).ref;
20
- const hello = yield* encodeClient({ t: "hello", params: { name: "alice" } }).pipe(Effect.orDie);
21
- let pulled = false;
22
- let writes = 0;
23
- const socket = Socket.make({
24
- reader: Effect.succeed({
25
- pull: Effect.suspend(() => {
26
- if (pulled)
27
- return Effect.never;
28
- pulled = true;
29
- return Effect.succeed([hello]);
30
- }),
31
- upgrade: () => Effect.void,
32
- }),
33
- writer: Effect.succeed({
34
- write: () => Effect.suspend(() => {
35
- writes += 1;
36
- return writes > 1
37
- ? Effect.fail(Socket.SocketError.make({
38
- reason: Socket.SocketWriteError.make({ cause: new Error("peer gone") }),
39
- }))
40
- : Effect.void;
41
- }),
42
- writeAll: () => Effect.void,
43
- }),
44
- });
45
- const principal = { tenant: test.tenant, caller: User.make({ subject: "alice" }) };
46
- yield* socketSession({
47
- socket,
48
- connection: descriptorOf(SocketRoom).served.connections.find((connection) => connection.tag === Chat.tag),
49
- holder: actors.holder,
50
- ref: () => ref,
51
- upgrade: principal,
52
- authenticate: () => Effect.succeed(principal),
53
- reauthenticate: () => Effect.succeed(principal),
54
- greeted: Effect.void,
55
- }).pipe(Effect.scoped, Effect.timeout("10 seconds"), Effect.orDie);
56
- expect(writes).toBe(2);
57
- yield* Effect.gen(function* () {
58
- while ((yield* rows(ref)).connections > 0)
59
- yield* Effect.sleep("20 millis");
60
- }).pipe(Effect.timeout("10 seconds"), Effect.orDie);
61
- })),
62
- },
63
- {
64
- name: "serves a stream over SSE: element messages, then end, with a declared failure in its end message",
65
- run: ({ expect, environment }) => environment.run(Effect.gen(function* () {
66
- const { host, token } = yield* setup(environment);
67
- yield* (yield* FeedRoom.get("sse-stream")).Tell("x");
68
- const client = Context.get(yield* Layer.build(FetchHttpClient.layer), HttpClient.HttpClient);
69
- const subscribe = (body) => client
70
- .execute(HttpClientRequest.post(`http://${host}/api/actors/FeedRoom/sse-stream/Count`, {
71
- headers: { authorization: token(), accept: "text/event-stream" },
72
- }).pipe(HttpClientRequest.bodyText(body, "application/json")))
73
- .pipe(Effect.flatMap((response) => response.text), Effect.orDie);
74
- expect(yield* subscribe("3")).toBe("event: element\ndata: 1\n\nevent: element\ndata: 2\n\nevent: element\ndata: 3\n\nevent: end\ndata: null\n\n");
75
- expect(yield* subscribe("101")).toBe('event: element\ndata: 1\n\nevent: end\ndata: {"_tag":"Refused","at":1}\n\n');
76
- })),
77
- },
78
- {
79
- name: "client subscribes to a stream as an AsyncIterable, and gets its declared failure as its class",
80
- run: ({ expect, environment }) => environment.run(Effect.gen(function* () {
81
- const { host, token } = yield* setup(environment);
82
- const room = yield* FeedRoom.get("client-stream");
83
- yield* room.Tell("one");
84
- const handle = FeedRoom.client({
85
- baseUrl: `http://${host}/api`,
86
- headers: { authorization: token() },
87
- }).get("client-stream");
88
- const counted = yield* Stream.fromAsyncIterable(handle.Count(3), asFailure).pipe(Stream.runCollect);
89
- expect([...counted]).toEqual([1, 2, 3]);
90
- const refused = yield* Stream.fromAsyncIterable(handle.Count(101), asFailure).pipe(Stream.runDrain, Effect.flip);
91
- expect(refused).toBeInstanceOf(Refused);
92
- const heard = yield* Stream.fromAsyncIterable(handle.Heard({}), asFailure).pipe(Stream.tap((text) => (text === "one" ? room.Tell("two") : Effect.void)), Stream.take(2), Stream.runCollect, Effect.timeout("20 seconds"), Effect.orDie);
93
- expect([...heard]).toEqual(["one", "two"]);
94
- })),
95
- },
96
- ];
@@ -1,3 +0,0 @@
1
- import type { ConformanceCase } from "../../conformance.ts";
2
- /** WebSocket handshake, framing, limits, reauthentication, parking, and resync. */
3
- export declare const transportWebSocketConformance: ReadonlyArray<ConformanceCase>;