reactor-effect-client 0.0.0-reserved.0 → 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.
Files changed (267) hide show
  1. package/LICENSE +201 -0
  2. package/NOTICE +29 -0
  3. package/README.md +124 -2
  4. package/dist/FetchHttp.d.ts +9 -0
  5. package/dist/FetchHttp.d.ts.map +1 -0
  6. package/dist/FetchHttp.js +63 -0
  7. package/dist/FetchHttp.js.map +1 -0
  8. package/dist/PeerFactory.d.ts +15 -0
  9. package/dist/PeerFactory.d.ts.map +1 -0
  10. package/dist/PeerFactory.js +4 -0
  11. package/dist/PeerFactory.js.map +1 -0
  12. package/dist/PeerTypes.d.ts +64 -0
  13. package/dist/PeerTypes.d.ts.map +1 -0
  14. package/dist/PeerTypes.js +2 -0
  15. package/dist/PeerTypes.js.map +1 -0
  16. package/dist/Sequence.d.ts +81 -0
  17. package/dist/Sequence.d.ts.map +1 -0
  18. package/dist/Sequence.js +215 -0
  19. package/dist/Sequence.js.map +1 -0
  20. package/dist/SessionTypes.d.ts +164 -0
  21. package/dist/SessionTypes.d.ts.map +1 -0
  22. package/dist/SessionTypes.js +2 -0
  23. package/dist/SessionTypes.js.map +1 -0
  24. package/dist/Submission.d.ts +42 -0
  25. package/dist/Submission.d.ts.map +1 -0
  26. package/dist/Submission.js +52 -0
  27. package/dist/Submission.js.map +1 -0
  28. package/dist/bytes.d.ts +6 -0
  29. package/dist/bytes.d.ts.map +1 -0
  30. package/dist/bytes.js +32 -0
  31. package/dist/bytes.js.map +1 -0
  32. package/dist/contract.d.ts +58 -0
  33. package/dist/contract.d.ts.map +1 -0
  34. package/dist/contract.js +87 -0
  35. package/dist/contract.js.map +1 -0
  36. package/dist/coordinator/_internal/client.d.ts +127 -0
  37. package/dist/coordinator/_internal/client.d.ts.map +1 -0
  38. package/dist/coordinator/_internal/client.js +450 -0
  39. package/dist/coordinator/_internal/client.js.map +1 -0
  40. package/dist/coordinator/_internal/response.d.ts +15 -0
  41. package/dist/coordinator/_internal/response.d.ts.map +1 -0
  42. package/dist/coordinator/_internal/response.js +57 -0
  43. package/dist/coordinator/_internal/response.js.map +1 -0
  44. package/dist/coordinator/_internal/schemas.d.ts +51 -0
  45. package/dist/coordinator/_internal/schemas.d.ts.map +1 -0
  46. package/dist/coordinator/_internal/schemas.js +170 -0
  47. package/dist/coordinator/_internal/schemas.js.map +1 -0
  48. package/dist/coordinator/index.d.ts +28 -0
  49. package/dist/coordinator/index.d.ts.map +1 -0
  50. package/dist/coordinator/index.js +25 -0
  51. package/dist/coordinator/index.js.map +1 -0
  52. package/dist/correlation.d.ts +32 -0
  53. package/dist/correlation.d.ts.map +1 -0
  54. package/dist/correlation.js +113 -0
  55. package/dist/correlation.js.map +1 -0
  56. package/dist/errors.d.ts +88 -0
  57. package/dist/errors.d.ts.map +1 -0
  58. package/dist/errors.js +93 -0
  59. package/dist/errors.js.map +1 -0
  60. package/dist/h3/_internal/client.d.ts +9 -0
  61. package/dist/h3/_internal/client.d.ts.map +1 -0
  62. package/dist/h3/_internal/client.js +510 -0
  63. package/dist/h3/_internal/client.js.map +1 -0
  64. package/dist/h3/_internal/contracts.d.ts +123 -0
  65. package/dist/h3/_internal/contracts.d.ts.map +1 -0
  66. package/dist/h3/_internal/contracts.js +113 -0
  67. package/dist/h3/_internal/contracts.js.map +1 -0
  68. package/dist/h3/_internal/deployment.d.ts +8 -0
  69. package/dist/h3/_internal/deployment.d.ts.map +1 -0
  70. package/dist/h3/_internal/deployment.js +132 -0
  71. package/dist/h3/_internal/deployment.js.map +1 -0
  72. package/dist/h3/_internal/evidence.d.ts +17 -0
  73. package/dist/h3/_internal/evidence.d.ts.map +1 -0
  74. package/dist/h3/_internal/evidence.js +48 -0
  75. package/dist/h3/_internal/evidence.js.map +1 -0
  76. package/dist/h3/_internal/references.d.ts +18 -0
  77. package/dist/h3/_internal/references.d.ts.map +1 -0
  78. package/dist/h3/_internal/references.js +186 -0
  79. package/dist/h3/_internal/references.js.map +1 -0
  80. package/dist/h3/_internal/request.d.ts +16 -0
  81. package/dist/h3/_internal/request.d.ts.map +1 -0
  82. package/dist/h3/_internal/request.js +79 -0
  83. package/dist/h3/_internal/request.js.map +1 -0
  84. package/dist/h3/_internal/state.d.ts +30 -0
  85. package/dist/h3/_internal/state.d.ts.map +1 -0
  86. package/dist/h3/_internal/state.js +243 -0
  87. package/dist/h3/_internal/state.js.map +1 -0
  88. package/dist/h3/index.d.ts +10 -0
  89. package/dist/h3/index.d.ts.map +1 -0
  90. package/dist/h3/index.js +7 -0
  91. package/dist/h3/index.js.map +1 -0
  92. package/dist/h3/messages.d.ts +310 -0
  93. package/dist/h3/messages.d.ts.map +1 -0
  94. package/dist/h3/messages.js +114 -0
  95. package/dist/h3/messages.js.map +1 -0
  96. package/dist/h3/profile.d.ts +109 -0
  97. package/dist/h3/profile.d.ts.map +1 -0
  98. package/dist/h3/profile.js +70 -0
  99. package/dist/h3/profile.js.map +1 -0
  100. package/dist/h3/types.d.ts +173 -0
  101. package/dist/h3/types.d.ts.map +1 -0
  102. package/dist/h3/types.js +2 -0
  103. package/dist/h3/types.js.map +1 -0
  104. package/dist/host.d.ts +25 -0
  105. package/dist/host.d.ts.map +1 -0
  106. package/dist/host.js +20 -0
  107. package/dist/host.js.map +1 -0
  108. package/dist/index.d.ts +17 -0
  109. package/dist/index.d.ts.map +1 -0
  110. package/dist/index.js +8 -0
  111. package/dist/index.js.map +1 -0
  112. package/dist/json.d.ts +18 -0
  113. package/dist/json.d.ts.map +1 -0
  114. package/dist/json.js +123 -0
  115. package/dist/json.js.map +1 -0
  116. package/dist/media-stream.d.ts +10 -0
  117. package/dist/media-stream.d.ts.map +1 -0
  118. package/dist/media-stream.js +20 -0
  119. package/dist/media-stream.js.map +1 -0
  120. package/dist/observation.d.ts +26 -0
  121. package/dist/observation.d.ts.map +1 -0
  122. package/dist/observation.js +106 -0
  123. package/dist/observation.js.map +1 -0
  124. package/dist/orchestration/h3-source.d.ts +30 -0
  125. package/dist/orchestration/h3-source.d.ts.map +1 -0
  126. package/dist/orchestration/h3-source.js +303 -0
  127. package/dist/orchestration/h3-source.js.map +1 -0
  128. package/dist/orchestration/index.d.ts +12 -0
  129. package/dist/orchestration/index.d.ts.map +1 -0
  130. package/dist/orchestration/index.js +9 -0
  131. package/dist/orchestration/index.js.map +1 -0
  132. package/dist/orchestration/media-buffer.d.ts +23 -0
  133. package/dist/orchestration/media-buffer.d.ts.map +1 -0
  134. package/dist/orchestration/media-buffer.js +73 -0
  135. package/dist/orchestration/media-buffer.js.map +1 -0
  136. package/dist/orchestration/queries.d.ts +10 -0
  137. package/dist/orchestration/queries.d.ts.map +1 -0
  138. package/dist/orchestration/queries.js +40 -0
  139. package/dist/orchestration/queries.js.map +1 -0
  140. package/dist/orchestration/references.d.ts +16 -0
  141. package/dist/orchestration/references.d.ts.map +1 -0
  142. package/dist/orchestration/references.js +76 -0
  143. package/dist/orchestration/references.js.map +1 -0
  144. package/dist/orchestration/renewal-state.d.ts +58 -0
  145. package/dist/orchestration/renewal-state.d.ts.map +1 -0
  146. package/dist/orchestration/renewal-state.js +60 -0
  147. package/dist/orchestration/renewal-state.js.map +1 -0
  148. package/dist/orchestration/renewal.d.ts +76 -0
  149. package/dist/orchestration/renewal.d.ts.map +1 -0
  150. package/dist/orchestration/renewal.js +633 -0
  151. package/dist/orchestration/renewal.js.map +1 -0
  152. package/dist/orchestration/request.d.ts +53 -0
  153. package/dist/orchestration/request.d.ts.map +1 -0
  154. package/dist/orchestration/request.js +122 -0
  155. package/dist/orchestration/request.js.map +1 -0
  156. package/dist/orchestration/routing.d.ts +21 -0
  157. package/dist/orchestration/routing.d.ts.map +1 -0
  158. package/dist/orchestration/routing.js +90 -0
  159. package/dist/orchestration/routing.js.map +1 -0
  160. package/dist/orchestration/source-slot.d.ts +99 -0
  161. package/dist/orchestration/source-slot.d.ts.map +1 -0
  162. package/dist/orchestration/source-slot.js +206 -0
  163. package/dist/orchestration/source-slot.js.map +1 -0
  164. package/dist/orchestration/types.d.ts +334 -0
  165. package/dist/orchestration/types.d.ts.map +1 -0
  166. package/dist/orchestration/types.js +11 -0
  167. package/dist/orchestration/types.js.map +1 -0
  168. package/dist/protobuf.d.ts +63 -0
  169. package/dist/protobuf.d.ts.map +1 -0
  170. package/dist/protobuf.js +252 -0
  171. package/dist/protobuf.js.map +1 -0
  172. package/dist/session/_internal/acquire.d.ts +23 -0
  173. package/dist/session/_internal/acquire.d.ts.map +1 -0
  174. package/dist/session/_internal/acquire.js +167 -0
  175. package/dist/session/_internal/acquire.js.map +1 -0
  176. package/dist/session/_internal/cleanup.d.ts +18 -0
  177. package/dist/session/_internal/cleanup.d.ts.map +1 -0
  178. package/dist/session/_internal/cleanup.js +94 -0
  179. package/dist/session/_internal/cleanup.js.map +1 -0
  180. package/dist/session/_internal/lifecycle.d.ts +62 -0
  181. package/dist/session/_internal/lifecycle.d.ts.map +1 -0
  182. package/dist/session/_internal/lifecycle.js +132 -0
  183. package/dist/session/_internal/lifecycle.js.map +1 -0
  184. package/dist/session/_internal/remote.d.ts +28 -0
  185. package/dist/session/_internal/remote.d.ts.map +1 -0
  186. package/dist/session/_internal/remote.js +61 -0
  187. package/dist/session/_internal/remote.js.map +1 -0
  188. package/dist/session/_internal/uploads.d.ts +4 -0
  189. package/dist/session/_internal/uploads.d.ts.map +1 -0
  190. package/dist/session/_internal/uploads.js +33 -0
  191. package/dist/session/_internal/uploads.js.map +1 -0
  192. package/dist/session/commands.d.ts +22 -0
  193. package/dist/session/commands.d.ts.map +1 -0
  194. package/dist/session/commands.js +13 -0
  195. package/dist/session/commands.js.map +1 -0
  196. package/dist/session/files.d.ts +15 -0
  197. package/dist/session/files.d.ts.map +1 -0
  198. package/dist/session/files.js +54 -0
  199. package/dist/session/files.js.map +1 -0
  200. package/dist/session/index.d.ts +76 -0
  201. package/dist/session/index.d.ts.map +1 -0
  202. package/dist/session/index.js +16 -0
  203. package/dist/session/index.js.map +1 -0
  204. package/dist/session/media.d.ts +67 -0
  205. package/dist/session/media.d.ts.map +1 -0
  206. package/dist/session/media.js +2 -0
  207. package/dist/session/media.js.map +1 -0
  208. package/dist/session.d.ts +104 -0
  209. package/dist/session.d.ts.map +1 -0
  210. package/dist/session.js +872 -0
  211. package/dist/session.js.map +1 -0
  212. package/dist/simulation/_internal/source.d.ts +12 -0
  213. package/dist/simulation/_internal/source.d.ts.map +1 -0
  214. package/dist/simulation/_internal/source.js +477 -0
  215. package/dist/simulation/_internal/source.js.map +1 -0
  216. package/dist/simulation/index.d.ts +14 -0
  217. package/dist/simulation/index.d.ts.map +1 -0
  218. package/dist/simulation/index.js +13 -0
  219. package/dist/simulation/index.js.map +1 -0
  220. package/dist/simulation/types.d.ts +29 -0
  221. package/dist/simulation/types.d.ts.map +1 -0
  222. package/dist/simulation/types.js +2 -0
  223. package/dist/simulation/types.js.map +1 -0
  224. package/dist/stats.d.ts +33 -0
  225. package/dist/stats.d.ts.map +1 -0
  226. package/dist/stats.js +134 -0
  227. package/dist/stats.js.map +1 -0
  228. package/dist/testing/Faults.d.ts +4 -0
  229. package/dist/testing/Faults.d.ts.map +1 -0
  230. package/dist/testing/Faults.js +7 -0
  231. package/dist/testing/Faults.js.map +1 -0
  232. package/dist/testing/Png.d.ts +3 -0
  233. package/dist/testing/Png.d.ts.map +1 -0
  234. package/dist/testing/Png.js +68 -0
  235. package/dist/testing/Png.js.map +1 -0
  236. package/dist/testing/index.d.ts +3 -0
  237. package/dist/testing/index.d.ts.map +1 -0
  238. package/dist/testing/index.js +3 -0
  239. package/dist/testing/index.js.map +1 -0
  240. package/dist/wire.d.ts +7 -0
  241. package/dist/wire.d.ts.map +1 -0
  242. package/dist/wire.generated.d.ts +305 -0
  243. package/dist/wire.generated.d.ts.map +1 -0
  244. package/dist/wire.generated.js +1257 -0
  245. package/dist/wire.generated.js.map +1 -0
  246. package/dist/wire.js +5 -0
  247. package/dist/wire.js.map +1 -0
  248. package/notices/effect-LICENSE +21 -0
  249. package/notices/google-protobuf-LICENSE +32 -0
  250. package/notices/owned-webrtc/Effect-MIT.txt +21 -0
  251. package/notices/owned-webrtc/IETF.txt +43 -0
  252. package/notices/owned-webrtc/LICENSE +21 -0
  253. package/notices/owned-webrtc/UPSTREAM.md +20 -0
  254. package/notices/owned-webrtc/VP8-ADAPTATION.md +32 -0
  255. package/notices/owned-webrtc/VP8-AUTHORS.txt +42 -0
  256. package/notices/owned-webrtc/VP8-LICENSE.txt +25 -0
  257. package/notices/owned-webrtc/VP8-PATENTS.txt +21 -0
  258. package/notices/owned-webrtc/Werift-MIT.txt +21 -0
  259. package/notices/owned-webrtc/libvpx-v1.12.0-LICENSE.txt +28 -0
  260. package/notices/owned-webrtc/libvpx-v1.12.0-PATENTS.txt +22 -0
  261. package/notices/owned-webrtc/rfc3711.txt +3139 -0
  262. package/notices/owned-webrtc/str0m-MIT.txt +7 -0
  263. package/notices/owned-webrtc-LICENSE +21 -0
  264. package/notices/reactor-runtime-LICENSE +201 -0
  265. package/notices/reactor-runtime-NOTICE +5 -0
  266. package/notices/reactor-sdk-LICENSE +201 -0
  267. package/package.json +62 -4
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Sequence.d.ts","sourceRoot":"","sources":["../src/Sequence.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,215 @@
1
+ import { Data, Effect, Ref, Semaphore } from "effect";
2
+ export class InvalidSequenceOptions extends Data.TaggedError("InvalidSequenceOptions") {
3
+ }
4
+ export class SequenceError extends Data.TaggedError("SequenceError") {
5
+ }
6
+ const immutableMembers = (members) => Object.freeze(members.map((member) => Object.freeze({ ...member })));
7
+ const snapshot = (entry) => Object.freeze({
8
+ id: entry.id,
9
+ owner: entry.owner,
10
+ status: entry.status,
11
+ acceptedCount: entry.acceptedCount,
12
+ rejectedCount: entry.rejectedCount,
13
+ indeterminateCount: entry.indeterminateCount,
14
+ pendingCount: entry.pending.size,
15
+ sealRequested: entry.sealRequested,
16
+ members: immutableMembers(entry.members),
17
+ });
18
+ const positiveInteger = (value, name) => Number.isSafeInteger(value) && value > 0
19
+ ? Effect.succeed(value)
20
+ : Effect.fail(new InvalidSequenceOptions({ reason: `${name} must be a positive safe integer` }));
21
+ /**
22
+ * Bounded sequence-affinity state. Unresolved work is never evicted to admit
23
+ * another sequence or member; callers explicitly account and release history.
24
+ */
25
+ export const makeAffinity = (options = {}) => Effect.gen(function* () {
26
+ const maxEntries = yield* positiveInteger(options.maxEntries ?? 256, "maxEntries");
27
+ const maxMembers = yield* positiveInteger(options.maxMembers ?? 256, "maxMembers");
28
+ const sameOwner = options.sameOwner ?? Object.is;
29
+ const entries = yield* Ref.make(new Map());
30
+ const lock = yield* Semaphore.make(1);
31
+ const get = (id) => Ref.get(entries).pipe(Effect.map((all) => {
32
+ const entry = all.get(id);
33
+ return entry === undefined ? undefined : snapshot(entry);
34
+ }));
35
+ const unavailable = (id, entry) => entry.status === "sealed"
36
+ ? new SequenceError({ sequenceId: id, reason: "sealed" })
37
+ : entry.status === "indeterminate"
38
+ ? new SequenceError({ sequenceId: id, reason: "indeterminate" })
39
+ : entry.status === "retired"
40
+ ? new SequenceError({ sequenceId: id, reason: "retired" })
41
+ : entry.sealRequested
42
+ ? new SequenceError({ sequenceId: id, reason: "sealing" })
43
+ : undefined;
44
+ const set = (all, entry) => Ref.set(entries, new Map(all).set(entry.id, entry));
45
+ const bind = (id, owner) => lock.withPermit(Effect.gen(function* () {
46
+ const all = yield* Ref.get(entries);
47
+ const existing = all.get(id);
48
+ if (existing !== undefined) {
49
+ if (!sameOwner(existing.owner, owner))
50
+ return yield* new SequenceError({ sequenceId: id, reason: "owner-mismatch" });
51
+ const failure = unavailable(id, existing);
52
+ if (failure !== undefined)
53
+ return yield* failure;
54
+ return existing.owner;
55
+ }
56
+ if (all.size >= maxEntries)
57
+ return yield* new SequenceError({ sequenceId: id, reason: "capacity" });
58
+ const entry = {
59
+ id,
60
+ owner,
61
+ status: "open",
62
+ acceptedCount: 0,
63
+ rejectedCount: 0,
64
+ indeterminateCount: 0,
65
+ pending: new Set(),
66
+ sealRequested: false,
67
+ members: [],
68
+ };
69
+ yield* set(all, entry);
70
+ return owner;
71
+ }));
72
+ const begin = (id, memberId) => lock.withPermit(Effect.gen(function* () {
73
+ const all = yield* Ref.get(entries);
74
+ const entry = all.get(id);
75
+ if (entry === undefined)
76
+ return yield* new SequenceError({ sequenceId: id, reason: "missing" });
77
+ const failure = unavailable(id, entry);
78
+ if (failure !== undefined)
79
+ return yield* failure;
80
+ if (entry.pending.has(memberId) ||
81
+ entry.members.some((member) => member.memberId === memberId)) {
82
+ return yield* new SequenceError({ sequenceId: id, reason: "member-duplicate" });
83
+ }
84
+ if (entry.pending.size + entry.members.length >= maxMembers) {
85
+ return yield* new SequenceError({ sequenceId: id, reason: "member-capacity" });
86
+ }
87
+ yield* set(all, { ...entry, pending: new Set(entry.pending).add(memberId) });
88
+ }));
89
+ const settle = (id, memberId, outcome, update, terminal, requestSeal = false) => lock.withPermit(Effect.gen(function* () {
90
+ const all = yield* Ref.get(entries);
91
+ const entry = all.get(id);
92
+ if (entry === undefined)
93
+ return yield* new SequenceError({ sequenceId: id, reason: "missing" });
94
+ if (!entry.pending.has(memberId)) {
95
+ if (entry.members.some((member) => member.memberId === memberId)) {
96
+ return yield* new SequenceError({ sequenceId: id, reason: "member-duplicate" });
97
+ }
98
+ return yield* new SequenceError({ sequenceId: id, reason: "member-missing" });
99
+ }
100
+ const pending = new Set(entry.pending);
101
+ pending.delete(memberId);
102
+ const counts = update(entry);
103
+ const sealRequested = entry.sealRequested || requestSeal;
104
+ const status = entry.status === "indeterminate" || entry.status === "retired"
105
+ ? entry.status
106
+ : terminal === "unknown"
107
+ ? "indeterminate"
108
+ : sealRequested && pending.size === 0
109
+ ? "sealed"
110
+ : entry.status;
111
+ yield* set(all, {
112
+ ...entry,
113
+ ...counts,
114
+ status,
115
+ sealRequested,
116
+ pending,
117
+ members: [...entry.members, outcome(entry)],
118
+ });
119
+ }));
120
+ const accepted = (id, memberId, clipId, final = false) => settle(id, memberId, (entry) => ({ _tag: "Accepted", memberId, clipId, index: entry.acceptedCount, final }), (entry) => ({
121
+ acceptedCount: entry.acceptedCount + 1,
122
+ rejectedCount: entry.rejectedCount,
123
+ indeterminateCount: entry.indeterminateCount,
124
+ }), "known", final);
125
+ const rejected = (id, memberId, reason, final = false) => settle(id, memberId, () => ({ _tag: "Rejected", memberId, reason }), (entry) => ({
126
+ acceptedCount: entry.acceptedCount,
127
+ rejectedCount: entry.rejectedCount + 1,
128
+ indeterminateCount: entry.indeterminateCount,
129
+ }), "known", final);
130
+ const uncertain = (id, memberId, reason) => settle(id, memberId, () => ({ _tag: "Indeterminate", memberId, reason }), (entry) => ({
131
+ acceptedCount: entry.acceptedCount,
132
+ rejectedCount: entry.rejectedCount,
133
+ indeterminateCount: entry.indeterminateCount + 1,
134
+ }), "unknown");
135
+ const seal = (id) => lock.withPermit(Effect.gen(function* () {
136
+ const all = yield* Ref.get(entries);
137
+ const entry = all.get(id);
138
+ if (entry === undefined)
139
+ return yield* new SequenceError({ sequenceId: id, reason: "missing" });
140
+ if (entry.status === "indeterminate")
141
+ return yield* new SequenceError({ sequenceId: id, reason: "indeterminate" });
142
+ if (entry.status === "retired")
143
+ return yield* new SequenceError({ sequenceId: id, reason: "retired" });
144
+ if (entry.status === "sealed")
145
+ return;
146
+ yield* set(all, {
147
+ ...entry,
148
+ sealRequested: true,
149
+ status: entry.pending.size === 0 ? "sealed" : "open",
150
+ });
151
+ }));
152
+ const retire = (owner) => lock.withPermit(Ref.update(entries, (all) => {
153
+ const next = new Map(all);
154
+ for (const [id, entry] of all) {
155
+ if (!sameOwner(entry.owner, owner))
156
+ continue;
157
+ if (entry.pending.size === 0) {
158
+ if (entry.status !== "indeterminate")
159
+ next.set(id, { ...entry, status: "retired" });
160
+ continue;
161
+ }
162
+ const pendingOutcomes = [...entry.pending].map((memberId) => Object.freeze({
163
+ _tag: "Indeterminate",
164
+ memberId,
165
+ reason: "owning session retired before outcome was known",
166
+ }));
167
+ next.set(id, {
168
+ ...entry,
169
+ status: "indeterminate",
170
+ indeterminateCount: entry.indeterminateCount + entry.pending.size,
171
+ pending: new Set(),
172
+ members: [...entry.members, ...pendingOutcomes],
173
+ });
174
+ }
175
+ return next;
176
+ }));
177
+ const acknowledgeIndeterminate = (id) => lock.withPermit(Effect.gen(function* () {
178
+ const all = yield* Ref.get(entries);
179
+ const entry = all.get(id);
180
+ if (entry === undefined)
181
+ return yield* new SequenceError({ sequenceId: id, reason: "missing" });
182
+ if (entry.status !== "indeterminate" || entry.pending.size !== 0) {
183
+ return yield* new SequenceError({ sequenceId: id, reason: "not-releasable" });
184
+ }
185
+ yield* set(all, { ...entry, status: "retired" });
186
+ }));
187
+ const release = (id) => lock.withPermit(Effect.gen(function* () {
188
+ const all = yield* Ref.get(entries);
189
+ const entry = all.get(id);
190
+ if (entry === undefined)
191
+ return yield* new SequenceError({ sequenceId: id, reason: "missing" });
192
+ if (entry.pending.size !== 0 ||
193
+ (entry.status !== "sealed" && entry.status !== "retired")) {
194
+ return yield* new SequenceError({ sequenceId: id, reason: "not-releasable" });
195
+ }
196
+ const next = new Map(all);
197
+ next.delete(id);
198
+ yield* Ref.set(entries, next);
199
+ }));
200
+ return {
201
+ get,
202
+ snapshots: Ref.get(entries).pipe(Effect.map((all) => Object.freeze([...all.values()].map(snapshot)))),
203
+ bind,
204
+ begin,
205
+ accepted,
206
+ rejected,
207
+ uncertain,
208
+ seal,
209
+ retire,
210
+ acknowledgeIndeterminate,
211
+ release,
212
+ size: Ref.get(entries).pipe(Effect.map((all) => all.size)),
213
+ };
214
+ });
215
+ //# sourceMappingURL=Sequence.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Sequence.js","sourceRoot":"","sources":["../src/Sequence.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,164 @@
1
+ import type * as Effect from "effect/Effect";
2
+ import type * as Scope from "effect/Scope";
3
+ import type * as Stream from "effect/Stream";
4
+ import type { Capabilities, Descriptor } from "./contract.js";
5
+ import type { HttpOptions, Termination } from "./coordinator/_internal/client.js";
6
+ import type { Correlation } from "./correlation.js";
7
+ import type { ReactorError } from "./errors.js";
8
+ import type { Json, JsonObject } from "./json.js";
9
+ import type * as W from "./wire.generated.js";
10
+ export type Status = "idle" | "connecting" | "waiting" | "ready" | "disconnected" | "closing" | "closed";
11
+ export type Ownership = "owned" | "attached" | "allocating" | "unknown";
12
+ /** Constructed by the acquisition boundary after validating operation-specific input. */
13
+ export type AcquisitionIntent = {
14
+ readonly _tag: "Create";
15
+ readonly model: {
16
+ readonly name: string;
17
+ readonly version?: string;
18
+ };
19
+ readonly extraArgs?: Json;
20
+ } | {
21
+ readonly _tag: "Attach";
22
+ readonly sessionId: string;
23
+ readonly connectionId?: number;
24
+ };
25
+ export interface SessionOptions extends HttpOptions {
26
+ readonly intent: AcquisitionIntent;
27
+ readonly readyTimeoutMs?: number;
28
+ readonly connectTimeoutMs?: number;
29
+ readonly commandTimeoutMs?: number;
30
+ readonly heartbeatMs?: number;
31
+ readonly autoResumeTracks?: boolean;
32
+ readonly maxPending?: number;
33
+ readonly requestNamespace?: string;
34
+ readonly maxUploadBytes?: number;
35
+ /** Completion does not imply remote termination or stopped billing. */
36
+ readonly onClose?: (report: CloseReport) => void;
37
+ }
38
+ export interface CloseReport {
39
+ readonly localClosed: boolean;
40
+ readonly allocation: "none" | "known" | "unknown";
41
+ readonly ownership?: "owned" | "attached";
42
+ readonly sessionId?: string;
43
+ readonly remote: Termination;
44
+ readonly unpublishSubmitted: readonly string[];
45
+ /** Claims possibly accepted remotely without an attributable response. */
46
+ readonly unresolvedPublications: readonly string[];
47
+ readonly localErrors: readonly ReactorError[];
48
+ }
49
+ export interface ReadyDescriptor extends Descriptor {
50
+ readonly capabilities: Capabilities;
51
+ readonly selected_transport: {
52
+ readonly protocol: string;
53
+ readonly version: string;
54
+ };
55
+ }
56
+ export interface ReadyState {
57
+ readonly status: "ready";
58
+ readonly generation: bigint;
59
+ readonly remote: {
60
+ readonly ownership: "owned" | "attached";
61
+ readonly sessionId: string;
62
+ readonly descriptor: ReadyDescriptor;
63
+ readonly connectionId: number;
64
+ };
65
+ }
66
+ interface SnapshotDetails {
67
+ readonly generation: bigint;
68
+ readonly pending: {
69
+ readonly data: number;
70
+ readonly control: number;
71
+ };
72
+ readonly pausedLocally: readonly string[];
73
+ readonly claimedTracks: readonly string[];
74
+ readonly unresolvedPublications: readonly string[];
75
+ readonly receivedTracks: readonly string[];
76
+ readonly observationOverflows: bigint;
77
+ readonly subscribers: number;
78
+ readonly lastError?: ReactorError;
79
+ readonly close?: CloseReport;
80
+ }
81
+ export type Snapshot = SnapshotDetails & (ReadyState | {
82
+ readonly status: Exclude<Status, "ready">;
83
+ readonly remote?: {
84
+ readonly ownership: Ownership;
85
+ readonly sessionId?: string;
86
+ readonly descriptor?: Descriptor;
87
+ readonly connectionId?: number;
88
+ };
89
+ });
90
+ export interface Attribution {
91
+ readonly requestId: string;
92
+ readonly sequence: bigint;
93
+ readonly generation: bigint;
94
+ readonly correlation: Correlation;
95
+ }
96
+ /** The command result and its observation are the same attributed object. */
97
+ export type CommandReply = Attribution & {
98
+ readonly _tag: "Model";
99
+ readonly outcome: "replied";
100
+ } & ({
101
+ readonly kind: "ack";
102
+ readonly raw: W.DataServerMessage;
103
+ } | {
104
+ readonly kind: "message";
105
+ readonly type: string;
106
+ readonly data?: JsonObject;
107
+ readonly raw: W.DataServerMessage;
108
+ });
109
+ export type EventPayload = {
110
+ readonly _tag: "Status";
111
+ readonly status: Status;
112
+ } | {
113
+ readonly _tag: "CommandError";
114
+ readonly error: ReactorError;
115
+ readonly requestId: string;
116
+ readonly correlation: Correlation;
117
+ } | {
118
+ readonly _tag: "Control";
119
+ readonly message: W.ControlServerMessage;
120
+ readonly correlation: Correlation;
121
+ } | {
122
+ readonly _tag: "Track";
123
+ readonly name: string;
124
+ readonly mid: string;
125
+ } | {
126
+ readonly _tag: "Decoded";
127
+ readonly kind: "audio" | "video";
128
+ readonly name: string;
129
+ readonly mid: string;
130
+ } | {
131
+ readonly _tag: "Diagnostic";
132
+ readonly error: ReactorError;
133
+ } | {
134
+ readonly _tag: "Upload";
135
+ readonly progress: UploadProgress;
136
+ };
137
+ export type SessionEvent = CommandReply | (EventPayload & {
138
+ readonly sequence: bigint;
139
+ readonly generation: bigint;
140
+ });
141
+ export interface UploadProgress {
142
+ readonly allocation: "not-requested" | "unknown" | "confirmed";
143
+ readonly transfer: "not-requested" | "unknown" | "confirmed";
144
+ readonly notification: "not-submitted" | "unknown" | "submitted";
145
+ readonly file?: W.UploadReference;
146
+ }
147
+ export interface Uploaded {
148
+ readonly file: W.UploadReference;
149
+ readonly transfer: "confirmed";
150
+ readonly notification: "submitted";
151
+ }
152
+ export type ControlPayload = NonNullable<W.ControlClientMessage["payload"]>;
153
+ export type ControlReply = NonNullable<W.ControlServerMessage["payload"]>;
154
+ export interface Observation {
155
+ readonly initial: Snapshot;
156
+ readonly revision: bigint;
157
+ readonly events: Stream.Stream<SessionEvent, ReactorError>;
158
+ }
159
+ export type Observe = (options?: {
160
+ readonly capacity?: number;
161
+ readonly maxBytes?: number;
162
+ }) => Effect.Effect<Observation, ReactorError, Scope.Scope>;
163
+ export {};
164
+ //# sourceMappingURL=SessionTypes.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SessionTypes.d.ts","sourceRoot":"","sources":["../src/SessionTypes.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=SessionTypes.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SessionTypes.js","sourceRoot":"","sources":["../src/SessionTypes.ts"],"names":[],"mappings":""}
@@ -0,0 +1,42 @@
1
+ import * as Effect from "effect/Effect";
2
+ import * as Exit from "effect/Exit";
3
+ import * as Scope from "effect/Scope";
4
+ /** Prepared is inert. Committed means execution may have reached the peer. */
5
+ export type State<A, E> = {
6
+ readonly _tag: "Prepared";
7
+ } | {
8
+ readonly _tag: "Committed";
9
+ } | {
10
+ readonly _tag: "Completed";
11
+ readonly exit: Exit.Exit<A, E>;
12
+ };
13
+ export interface Submission<A, E> {
14
+ readonly id: string;
15
+ /** Each explicit call may retry interrupted prework; committed execution is never replayed. */
16
+ readonly submit: Effect.Effect<A, E>;
17
+ readonly state: Effect.Effect<State<A, E>>;
18
+ }
19
+ export interface Options<P, A, E> {
20
+ readonly id: string;
21
+ /** All interruptible uploads, validation and admission waits belong here. */
22
+ readonly prepare: Effect.Effect<P, E, Scope.Scope>;
23
+ /**
24
+ * Optional local commit registration. It runs exactly once after successful
25
+ * interruptible preparation and inside the uninterruptible commit boundary,
26
+ * immediately before the state becomes Committed and execution is forked.
27
+ * Keep it bounded and non-blocking. A failure sends nothing, closes the
28
+ * provisional preparation scope and leaves the Submission retryable/Prepared.
29
+ */
30
+ readonly commit?: (prepared: P) => Effect.Effect<void, E>;
31
+ /** Register correlation before dispatch. This effect must bound its response/reconciliation wait. */
32
+ readonly execute: (prepared: P) => Effect.Effect<A, E>;
33
+ }
34
+ /**
35
+ * Bind an input to one dispatch without starting it. The caller owns preparation;
36
+ * the supplied scope owns committed execution. No registry entry exists merely
37
+ * because a caller holds a prepared Submission.
38
+ */
39
+ export declare const make: <P, A, E>(options: Options<P, A, E>) => Effect.Effect<Submission<A, E>, never, Scope.Scope>;
40
+ /** Project a result without adding preparation, execution, or commit ownership. */
41
+ export declare const map: <A, B, E>(submission: Submission<A, E>, project: (value: A) => B) => Submission<B, E>;
42
+ //# sourceMappingURL=Submission.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Submission.d.ts","sourceRoot":"","sources":["../src/Submission.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,MAAM,eAAe,CAAC;AACxC,OAAO,KAAK,IAAI,MAAM,aAAa,CAAC;AAEpC,OAAO,KAAK,KAAK,MAAM,cAAc,CAAC;AAGtC,8EAA8E;AAC9E,MAAM,MAAM,KAAK,CAAC,CAAC,EAAE,CAAC,IAClB;IAAE,QAAQ,CAAC,IAAI,EAAE,UAAU,CAAA;CAAE,GAC7B;IAAE,QAAQ,CAAC,IAAI,EAAE,WAAW,CAAA;CAAE,GAC9B;IAAE,QAAQ,CAAC,IAAI,EAAE,WAAW,CAAC;IAAC,QAAQ,CAAC,IAAI,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC,CAAA;CAAE,CAAC;AAEnE,MAAM,WAAW,UAAU,CAAC,CAAC,EAAE,CAAC;IAC9B,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,+FAA+F;IAC/F,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IACrC,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;CAC5C;AAED,MAAM,WAAW,OAAO,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC;IAC9B,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,6EAA6E;IAC7E,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,KAAK,CAAC,KAAK,CAAC,CAAC;IACnD;;;;;;OAMG;IACH,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC,QAAQ,EAAE,CAAC,KAAK,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;IAC1D,qGAAqG;IACrG,QAAQ,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE,CAAC,KAAK,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;CACxD;AAED;;;;GAIG;AACH,eAAO,MAAM,IAAI,GAAI,CAAC,EAAE,CAAC,EAAE,CAAC,WACjB,OAAO,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,KACxB,MAAM,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,KAAK,EAAE,KAAK,CAAC,KAAK,CA8CjD,CAAC;AAEL,mFAAmF;AACnF,eAAO,MAAM,GAAG,GAAI,CAAC,EAAE,CAAC,EAAE,CAAC,cACb,UAAU,CAAC,CAAC,EAAE,CAAC,CAAC,WACnB,CAAC,KAAK,EAAE,CAAC,KAAK,CAAC,KACvB,UAAU,CAAC,CAAC,EAAE,CAAC,CAUhB,CAAC"}
@@ -0,0 +1,52 @@
1
+ import * as Effect from "effect/Effect";
2
+ import * as Exit from "effect/Exit";
3
+ import * as Fiber from "effect/Fiber";
4
+ import * as Scope from "effect/Scope";
5
+ import * as Semaphore from "effect/Semaphore";
6
+ /**
7
+ * Bind an input to one dispatch without starting it. The caller owns preparation;
8
+ * the supplied scope owns committed execution. No registry entry exists merely
9
+ * because a caller holds a prepared Submission.
10
+ */
11
+ export const make = (options) => Effect.gen(function* () {
12
+ const scope = yield* Effect.scope;
13
+ const gate = yield* Semaphore.make(1);
14
+ let committed;
15
+ let state = { _tag: "Prepared" };
16
+ const acquire = gate.withPermit(Effect.uninterruptibleMask((restore) => Effect.gen(function* () {
17
+ if (committed !== undefined)
18
+ return committed;
19
+ // A provisional scope owns locks/staging acquired during preparation. It
20
+ // is closed on cancellation or transferred with the committed execution.
21
+ const provisional = yield* Scope.fork(scope);
22
+ let transferred = false;
23
+ return yield* Effect.gen(function* () {
24
+ const prepared = yield* restore(options.prepare.pipe(Scope.provide(provisional)));
25
+ if (options.commit !== undefined)
26
+ yield* options.commit(prepared);
27
+ // The fork and ownership transfer form one small commit. The execution
28
+ // itself is interruptible by the session scope, never by a waiting caller.
29
+ state = { _tag: "Committed" };
30
+ const fiber = yield* Effect.suspend(() => options.execute(prepared)).pipe(Effect.interruptible, Effect.onExit((exit) => Scope.close(provisional, exit)), Effect.onExit((exit) => Effect.sync(() => {
31
+ state = { _tag: "Completed", exit };
32
+ })), Effect.forkIn(scope, { startImmediately: true }));
33
+ committed = fiber;
34
+ transferred = true;
35
+ return fiber;
36
+ }).pipe(Effect.onExit((exit) => (transferred ? Effect.void : Scope.close(provisional, exit))));
37
+ })));
38
+ return {
39
+ id: options.id,
40
+ submit: acquire.pipe(Effect.flatMap(Fiber.join)),
41
+ state: Effect.sync(() => state),
42
+ };
43
+ });
44
+ /** Project a result without adding preparation, execution, or commit ownership. */
45
+ export const map = (submission, project) => ({
46
+ id: submission.id,
47
+ submit: submission.submit.pipe(Effect.map(project)),
48
+ state: submission.state.pipe(Effect.map((state) => state._tag === "Completed"
49
+ ? { _tag: "Completed", exit: Exit.map(state.exit, project) }
50
+ : state)),
51
+ });
52
+ //# sourceMappingURL=Submission.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Submission.js","sourceRoot":"","sources":["../src/Submission.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ import * as Effect from "effect/Effect";
2
+ import * as Stream from "effect/Stream";
3
+ import { ReactorError } from "./errors.js";
4
+ /** Copy borrowed chunks once, enforcing both memory and chunk-admission bounds. */
5
+ export declare const collectBytes: <E, R>(source: Stream.Stream<Uint8Array, E, R>, maxBytes: number) => Effect.Effect<Uint8Array, E | ReactorError, R>;
6
+ //# sourceMappingURL=bytes.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bytes.d.ts","sourceRoot":"","sources":["../src/bytes.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,MAAM,eAAe,CAAC;AACxC,OAAO,KAAK,MAAM,MAAM,eAAe,CAAC;AACxC,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAE3C,mFAAmF;AACnF,eAAO,MAAM,YAAY,GAAI,CAAC,EAAE,CAAC,UACvB,MAAM,CAAC,MAAM,CAAC,UAAU,EAAE,CAAC,EAAE,CAAC,CAAC,YAC7B,MAAM,KACf,MAAM,CAAC,MAAM,CAAC,UAAU,EAAE,CAAC,GAAG,YAAY,EAAE,CAAC,CAuC5C,CAAC"}
package/dist/bytes.js ADDED
@@ -0,0 +1,32 @@
1
+ import * as Effect from "effect/Effect";
2
+ import * as Stream from "effect/Stream";
3
+ import { ReactorError } from "./errors.js";
4
+ /** Copy borrowed chunks once, enforcing both memory and chunk-admission bounds. */
5
+ export const collectBytes = (source, maxBytes) => Effect.suspend(() => {
6
+ if (!Number.isSafeInteger(maxBytes) || maxBytes <= 0)
7
+ return Effect.fail(new ReactorError("InvalidInput", "Invalid byte collection bound", {
8
+ outcome: "not-submitted",
9
+ }));
10
+ return Stream.runFoldEffect(source, () => ({ chunks: [], total: 0 }), (buffer, chunk) => {
11
+ if (chunk.byteLength > maxBytes - buffer.total)
12
+ return Effect.fail(new ReactorError("Upload", "Source exceeds the byte bound", {
13
+ outcome: "not-submitted",
14
+ }));
15
+ if (buffer.chunks.length >= 16_384)
16
+ return Effect.fail(new ReactorError("Upload", "Source exceeds the chunk bound", {
17
+ outcome: "not-submitted",
18
+ }));
19
+ buffer.total += chunk.byteLength;
20
+ buffer.chunks.push(new Uint8Array(chunk));
21
+ return Effect.succeed(buffer);
22
+ }).pipe(Effect.map(({ chunks, total }) => {
23
+ const bytes = new Uint8Array(total);
24
+ let offset = 0;
25
+ for (const chunk of chunks) {
26
+ bytes.set(chunk, offset);
27
+ offset += chunk.byteLength;
28
+ }
29
+ return bytes;
30
+ }));
31
+ });
32
+ //# sourceMappingURL=bytes.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bytes.js","sourceRoot":"","sources":["../src/bytes.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,MAAM,eAAe,CAAC;AACxC,OAAO,KAAK,MAAM,MAAM,eAAe,CAAC;AACxC,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAE3C,mFAAmF;AACnF,MAAM,CAAC,MAAM,YAAY,GAAG,CAC1B,MAAuC,EACvC,QAAgB,EACgC,EAAE,CAClD,MAAM,CAAC,OAAO,CAAC,GAAG,EAAE;IAClB,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,QAAQ,CAAC,IAAI,QAAQ,IAAI,CAAC;QAClD,OAAO,MAAM,CAAC,IAAI,CAChB,IAAI,YAAY,CAAC,cAAc,EAAE,+BAA+B,EAAE;YAChE,OAAO,EAAE,eAAe;SACzB,CAAC,CACH,CAAC;IACJ,OAAO,MAAM,CAAC,aAAa,CACzB,MAAM,EACN,GAAG,EAAE,CAAC,CAAC,EAAE,MAAM,EAAE,EAAkB,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC,EAChD,CAAC,MAAM,EAAE,KAAK,EAAE,EAAE;QAChB,IAAI,KAAK,CAAC,UAAU,GAAG,QAAQ,GAAG,MAAM,CAAC,KAAK;YAC5C,OAAO,MAAM,CAAC,IAAI,CAChB,IAAI,YAAY,CAAC,QAAQ,EAAE,+BAA+B,EAAE;gBAC1D,OAAO,EAAE,eAAe;aACzB,CAAC,CACH,CAAC;QACJ,IAAI,MAAM,CAAC,MAAM,CAAC,MAAM,IAAI,MAAM;YAChC,OAAO,MAAM,CAAC,IAAI,CAChB,IAAI,YAAY,CAAC,QAAQ,EAAE,gCAAgC,EAAE;gBAC3D,OAAO,EAAE,eAAe;aACzB,CAAC,CACH,CAAC;QACJ,MAAM,CAAC,KAAK,IAAI,KAAK,CAAC,UAAU,CAAC;QACjC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,UAAU,CAAC,KAAK,CAAC,CAAC,CAAC;QAC1C,OAAO,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;IAChC,CAAC,CACF,CAAC,IAAI,CACJ,MAAM,CAAC,GAAG,CAAC,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,EAAE,EAAE;QAC/B,MAAM,KAAK,GAAG,IAAI,UAAU,CAAC,KAAK,CAAC,CAAC;QACpC,IAAI,MAAM,GAAG,CAAC,CAAC;QACf,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;YAC3B,KAAK,CAAC,GAAG,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;YACzB,MAAM,IAAI,KAAK,CAAC,UAAU,CAAC;QAC7B,CAAC;QACD,OAAO,KAAK,CAAC;IACf,CAAC,CAAC,CACH,CAAC;AACJ,CAAC,CAAC,CAAC"}
@@ -0,0 +1,58 @@
1
+ import type { Json, JsonObject } from "./json.js";
2
+ export declare const SDK_PIN = "24f1865b48f03354b15402731f1b92e90ceee92a";
3
+ export declare const RUNTIME_PIN = "8e98536c6daedca298700dc45cbb5fd9e3676f16";
4
+ export declare const CLIENT_INFO: Readonly<{
5
+ sdk_version: "0.1.0";
6
+ sdk_type: "typescript-effect-independent";
7
+ }>;
8
+ export interface Track {
9
+ readonly name: string;
10
+ readonly kind: "audio" | "video";
11
+ readonly direction: "recvonly" | "sendonly";
12
+ }
13
+ export interface Mapping extends Track {
14
+ readonly mid: string;
15
+ }
16
+ export interface Capabilities {
17
+ readonly protocol_version: string;
18
+ readonly tracks: readonly Track[];
19
+ readonly commands?: readonly {
20
+ readonly name: string;
21
+ readonly description?: string;
22
+ readonly schema?: Json;
23
+ }[];
24
+ readonly emission_fps?: number;
25
+ }
26
+ export interface Descriptor {
27
+ readonly session_id: string;
28
+ /** Unknown future state values remain available, rather than becoming a made-up known state. */
29
+ readonly state: string;
30
+ readonly capabilities?: Capabilities;
31
+ readonly selected_transport?: {
32
+ readonly protocol: string;
33
+ readonly version: string;
34
+ };
35
+ /** Includes unknown top-level fields and original null/absence distinctions. */
36
+ readonly raw: JsonObject;
37
+ }
38
+ export declare const terminal: (state: string) => boolean;
39
+ export declare const parseTrack: (input: unknown) => Track;
40
+ export declare const parseCapabilities: (input: unknown) => Capabilities;
41
+ export declare const parseDescriptor: (input: unknown) => Descriptor;
42
+ export interface IceServer {
43
+ readonly urls: string | string[];
44
+ readonly username?: string;
45
+ readonly credential?: string;
46
+ }
47
+ export declare const parseIce: (input: unknown) => IceServer[];
48
+ export interface IceCandidate {
49
+ readonly candidate: string;
50
+ readonly sdp_mid?: string;
51
+ readonly sdp_mline_index?: number;
52
+ }
53
+ export declare const parseConnectionId: (input: unknown) => number;
54
+ export declare const parseAnswer: (input: unknown) => {
55
+ readonly sdp_answer: string;
56
+ readonly connection_id?: number;
57
+ };
58
+ //# sourceMappingURL=contract.d.ts.map