effect 4.0.0-beta.44 → 4.0.0-beta.46

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 (151) hide show
  1. package/dist/Equal.d.ts.map +1 -1
  2. package/dist/Equal.js +16 -0
  3. package/dist/Equal.js.map +1 -1
  4. package/dist/Hash.js +1 -1
  5. package/dist/Hash.js.map +1 -1
  6. package/dist/Semaphore.d.ts +1 -1
  7. package/dist/Semaphore.d.ts.map +1 -1
  8. package/dist/Semaphore.js +1 -3
  9. package/dist/Semaphore.js.map +1 -1
  10. package/dist/unstable/ai/McpServer.d.ts.map +1 -1
  11. package/dist/unstable/ai/McpServer.js +24 -21
  12. package/dist/unstable/ai/McpServer.js.map +1 -1
  13. package/dist/unstable/eventlog/Event.d.ts +0 -6
  14. package/dist/unstable/eventlog/Event.d.ts.map +1 -1
  15. package/dist/unstable/eventlog/Event.js +0 -5
  16. package/dist/unstable/eventlog/Event.js.map +1 -1
  17. package/dist/unstable/eventlog/EventGroup.d.ts +0 -2
  18. package/dist/unstable/eventlog/EventGroup.d.ts.map +1 -1
  19. package/dist/unstable/eventlog/EventGroup.js +0 -2
  20. package/dist/unstable/eventlog/EventGroup.js.map +1 -1
  21. package/dist/unstable/eventlog/EventJournal.d.ts +22 -5
  22. package/dist/unstable/eventlog/EventJournal.d.ts.map +1 -1
  23. package/dist/unstable/eventlog/EventJournal.js +126 -67
  24. package/dist/unstable/eventlog/EventJournal.js.map +1 -1
  25. package/dist/unstable/eventlog/EventLog.d.ts +88 -34
  26. package/dist/unstable/eventlog/EventLog.d.ts.map +1 -1
  27. package/dist/unstable/eventlog/EventLog.js +215 -141
  28. package/dist/unstable/eventlog/EventLog.js.map +1 -1
  29. package/dist/unstable/eventlog/EventLogEncryption.d.ts +9 -7
  30. package/dist/unstable/eventlog/EventLogEncryption.d.ts.map +1 -1
  31. package/dist/unstable/eventlog/EventLogEncryption.js +13 -15
  32. package/dist/unstable/eventlog/EventLogEncryption.js.map +1 -1
  33. package/dist/unstable/eventlog/EventLogMessage.d.ts +228 -0
  34. package/dist/unstable/eventlog/EventLogMessage.d.ts.map +1 -0
  35. package/dist/unstable/eventlog/EventLogMessage.js +214 -0
  36. package/dist/unstable/eventlog/EventLogMessage.js.map +1 -0
  37. package/dist/unstable/eventlog/EventLogRemote.d.ts +109 -194
  38. package/dist/unstable/eventlog/EventLogRemote.d.ts.map +1 -1
  39. package/dist/unstable/eventlog/EventLogRemote.js +165 -320
  40. package/dist/unstable/eventlog/EventLogRemote.js.map +1 -1
  41. package/dist/unstable/eventlog/EventLogServer.d.ts +25 -47
  42. package/dist/unstable/eventlog/EventLogServer.d.ts.map +1 -1
  43. package/dist/unstable/eventlog/EventLogServer.js +127 -198
  44. package/dist/unstable/eventlog/EventLogServer.js.map +1 -1
  45. package/dist/unstable/eventlog/EventLogServerEncrypted.d.ts +60 -0
  46. package/dist/unstable/eventlog/EventLogServerEncrypted.d.ts.map +1 -0
  47. package/dist/unstable/eventlog/EventLogServerEncrypted.js +166 -0
  48. package/dist/unstable/eventlog/EventLogServerEncrypted.js.map +1 -0
  49. package/dist/unstable/eventlog/EventLogServerUnencrypted.d.ts +183 -0
  50. package/dist/unstable/eventlog/EventLogServerUnencrypted.d.ts.map +1 -0
  51. package/dist/unstable/eventlog/EventLogServerUnencrypted.js +461 -0
  52. package/dist/unstable/eventlog/EventLogServerUnencrypted.js.map +1 -0
  53. package/dist/unstable/eventlog/EventLogSessionAuth.d.ts +117 -0
  54. package/dist/unstable/eventlog/EventLogSessionAuth.d.ts.map +1 -0
  55. package/dist/unstable/eventlog/EventLogSessionAuth.js +284 -0
  56. package/dist/unstable/eventlog/EventLogSessionAuth.js.map +1 -0
  57. package/dist/unstable/eventlog/{SqlEventLogJournal.d.ts → SqlEventJournal.d.ts} +2 -2
  58. package/dist/unstable/eventlog/SqlEventJournal.d.ts.map +1 -0
  59. package/dist/unstable/eventlog/{SqlEventLogJournal.js → SqlEventJournal.js} +20 -14
  60. package/dist/unstable/eventlog/SqlEventJournal.js.map +1 -0
  61. package/dist/unstable/eventlog/{SqlEventLogServer.d.ts → SqlEventLogServerEncrypted.d.ts} +5 -5
  62. package/dist/unstable/eventlog/SqlEventLogServerEncrypted.d.ts.map +1 -0
  63. package/dist/unstable/eventlog/{SqlEventLogServer.js → SqlEventLogServerEncrypted.js} +65 -24
  64. package/dist/unstable/eventlog/SqlEventLogServerEncrypted.js.map +1 -0
  65. package/dist/unstable/eventlog/SqlEventLogServerUnencrypted.d.ts +25 -0
  66. package/dist/unstable/eventlog/SqlEventLogServerUnencrypted.d.ts.map +1 -0
  67. package/dist/unstable/eventlog/SqlEventLogServerUnencrypted.js +354 -0
  68. package/dist/unstable/eventlog/SqlEventLogServerUnencrypted.js.map +1 -0
  69. package/dist/unstable/eventlog/index.d.ts +22 -2
  70. package/dist/unstable/eventlog/index.d.ts.map +1 -1
  71. package/dist/unstable/eventlog/index.js +22 -2
  72. package/dist/unstable/eventlog/index.js.map +1 -1
  73. package/dist/unstable/eventlog/internal/identityRootSecretDerivation.d.ts +2 -0
  74. package/dist/unstable/eventlog/internal/identityRootSecretDerivation.d.ts.map +1 -0
  75. package/dist/unstable/eventlog/internal/identityRootSecretDerivation.js +89 -0
  76. package/dist/unstable/eventlog/internal/identityRootSecretDerivation.js.map +1 -0
  77. package/dist/unstable/reactivity/AtomHttpApi.d.ts +1 -2
  78. package/dist/unstable/reactivity/AtomHttpApi.d.ts.map +1 -1
  79. package/dist/unstable/reactivity/AtomHttpApi.js +2 -2
  80. package/dist/unstable/reactivity/AtomHttpApi.js.map +1 -1
  81. package/dist/unstable/reactivity/AtomRpc.d.ts +1 -2
  82. package/dist/unstable/reactivity/AtomRpc.d.ts.map +1 -1
  83. package/dist/unstable/reactivity/AtomRpc.js +3 -3
  84. package/dist/unstable/reactivity/AtomRpc.js.map +1 -1
  85. package/dist/unstable/rpc/Rpc.d.ts +25 -4
  86. package/dist/unstable/rpc/Rpc.d.ts.map +1 -1
  87. package/dist/unstable/rpc/Rpc.js +26 -0
  88. package/dist/unstable/rpc/Rpc.js.map +1 -1
  89. package/dist/unstable/rpc/RpcClient.d.ts +3 -13
  90. package/dist/unstable/rpc/RpcClient.d.ts.map +1 -1
  91. package/dist/unstable/rpc/RpcClient.js +47 -23
  92. package/dist/unstable/rpc/RpcClient.js.map +1 -1
  93. package/dist/unstable/rpc/RpcGroup.d.ts +1 -1
  94. package/dist/unstable/rpc/RpcGroup.d.ts.map +1 -1
  95. package/dist/unstable/rpc/RpcMiddleware.d.ts +2 -2
  96. package/dist/unstable/rpc/RpcMiddleware.d.ts.map +1 -1
  97. package/dist/unstable/rpc/RpcServer.d.ts.map +1 -1
  98. package/dist/unstable/rpc/RpcServer.js +3 -2
  99. package/dist/unstable/rpc/RpcServer.js.map +1 -1
  100. package/dist/unstable/rpc/Utils.d.ts +6 -0
  101. package/dist/unstable/rpc/Utils.d.ts.map +1 -1
  102. package/dist/unstable/rpc/Utils.js +44 -0
  103. package/dist/unstable/rpc/Utils.js.map +1 -1
  104. package/dist/unstable/schema/Model.d.ts +2 -2
  105. package/dist/unstable/schema/Model.d.ts.map +1 -1
  106. package/dist/unstable/schema/Model.js +2 -4
  107. package/dist/unstable/schema/Model.js.map +1 -1
  108. package/dist/unstable/schema/VariantSchema.d.ts +1 -1
  109. package/dist/unstable/schema/VariantSchema.d.ts.map +1 -1
  110. package/dist/unstable/schema/VariantSchema.js +1 -12
  111. package/dist/unstable/schema/VariantSchema.js.map +1 -1
  112. package/dist/unstable/workers/Transferable.d.ts +1 -1
  113. package/dist/unstable/workers/Transferable.d.ts.map +1 -1
  114. package/dist/unstable/workers/Transferable.js +1 -1
  115. package/dist/unstable/workers/Transferable.js.map +1 -1
  116. package/package.json +1 -1
  117. package/src/Equal.ts +17 -0
  118. package/src/Hash.ts +2 -2
  119. package/src/Semaphore.ts +2 -4
  120. package/src/unstable/ai/McpServer.ts +24 -22
  121. package/src/unstable/eventlog/Event.ts +0 -8
  122. package/src/unstable/eventlog/EventGroup.ts +0 -4
  123. package/src/unstable/eventlog/EventJournal.ts +144 -76
  124. package/src/unstable/eventlog/EventLog.ts +342 -221
  125. package/src/unstable/eventlog/EventLogEncryption.ts +16 -30
  126. package/src/unstable/eventlog/EventLogMessage.ts +277 -0
  127. package/src/unstable/eventlog/EventLogRemote.ts +261 -408
  128. package/src/unstable/eventlog/EventLogServer.ts +182 -274
  129. package/src/unstable/eventlog/EventLogServerEncrypted.ts +206 -0
  130. package/src/unstable/eventlog/EventLogServerUnencrypted.ts +749 -0
  131. package/src/unstable/eventlog/EventLogSessionAuth.ts +437 -0
  132. package/src/unstable/eventlog/{SqlEventLogJournal.ts → SqlEventJournal.ts} +26 -18
  133. package/src/unstable/eventlog/{SqlEventLogServer.ts → SqlEventLogServerEncrypted.ts} +102 -40
  134. package/src/unstable/eventlog/SqlEventLogServerUnencrypted.ts +500 -0
  135. package/src/unstable/eventlog/index.ts +27 -2
  136. package/src/unstable/eventlog/internal/identityRootSecretDerivation.ts +153 -0
  137. package/src/unstable/reactivity/AtomHttpApi.ts +23 -8
  138. package/src/unstable/reactivity/AtomRpc.ts +16 -5
  139. package/src/unstable/rpc/Rpc.ts +42 -4
  140. package/src/unstable/rpc/RpcClient.ts +59 -24
  141. package/src/unstable/rpc/RpcGroup.ts +1 -1
  142. package/src/unstable/rpc/RpcMiddleware.ts +2 -2
  143. package/src/unstable/rpc/RpcServer.ts +5 -3
  144. package/src/unstable/rpc/Utils.ts +59 -0
  145. package/src/unstable/schema/Model.ts +4 -6
  146. package/src/unstable/schema/VariantSchema.ts +4 -17
  147. package/src/unstable/workers/Transferable.ts +9 -11
  148. package/dist/unstable/eventlog/SqlEventLogJournal.d.ts.map +0 -1
  149. package/dist/unstable/eventlog/SqlEventLogJournal.js.map +0 -1
  150. package/dist/unstable/eventlog/SqlEventLogServer.d.ts.map +0 -1
  151. package/dist/unstable/eventlog/SqlEventLogServer.js.map +0 -1
@@ -0,0 +1,461 @@
1
+ /**
2
+ * @since 4.0.0
3
+ */
4
+ import * as Arr from "../../Array.js";
5
+ import * as Context from "../../Context.js";
6
+ import * as Data from "../../Data.js";
7
+ import * as Effect from "../../Effect.js";
8
+ import * as Layer from "../../Layer.js";
9
+ import * as Option from "../../Option.js";
10
+ import * as PubSub from "../../PubSub.js";
11
+ import * as RcMap from "../../RcMap.js";
12
+ import * as Redacted from "../../Redacted.js";
13
+ import * as Schema from "../../Schema.js";
14
+ import * as Semaphore from "../../Semaphore.js";
15
+ import * as Stream from "../../Stream.js";
16
+ import * as RpcServer from "../rpc/RpcServer.js";
17
+ import * as EventJournal from "./EventJournal.js";
18
+ import { Entry, makeEntryIdUnsafe, makeRemoteIdUnsafe, RemoteEntry } from "./EventJournal.js";
19
+ import * as EventLog from "./EventLog.js";
20
+ import { ChangesRpc, EventLogProtocolError, EventLogRemoteRpcs, WriteEntriesUnencrypted } from "./EventLogMessage.js";
21
+ import * as EventLogServer from "./EventLogServer.js";
22
+ /**
23
+ * @since 4.0.0
24
+ * @category EventLogServerUnencrypted
25
+ */
26
+ export class EventLogServerUnencrypted extends /*#__PURE__*/Context.Service()("effect/eventlog/EventLogServerUnencrypted") {}
27
+ /**
28
+ * @since 4.0.0
29
+ * @category EventLogServerUnencrypted
30
+ */
31
+ export const makeWrite = schema => EventLogServerUnencrypted.useSync(_ => _.makeWrite(schema));
32
+ /**
33
+ * @since 4.0.0
34
+ * @category Layers
35
+ */
36
+ export const layerRpcHandlers = /*#__PURE__*/Layer.unwrap(/*#__PURE__*/Effect.gen(function* () {
37
+ const storage = yield* Storage;
38
+ const mapping = yield* StoreMapping;
39
+ const auth = yield* EventLogServerAuthorization;
40
+ const registry = yield* EventLog.Registry;
41
+ const handler = yield* makeServerHandler;
42
+ const remoteId = yield* storage.getId;
43
+ const processEntries = Effect.fnUntraced(function* (options) {
44
+ const entries = Arr.sort(options.entries, Entry.Order);
45
+ let history = yield* storage.entriesAfter(options.storeId, entries[0]);
46
+ const persistedEntries = Arr.empty();
47
+ for (const entry of entries) {
48
+ const [duplicate, conflicts, newHistory] = toConflicts(history, entry);
49
+ if (duplicate) continue;
50
+ history = newHistory;
51
+ yield* handler({
52
+ publicKey: options.publicKey,
53
+ storeId: options.storeId,
54
+ entry,
55
+ conflicts
56
+ });
57
+ persistedEntries.push(entry);
58
+ }
59
+ yield* storage.write(options.storeId, persistedEntries);
60
+ }, storage.withTransaction);
61
+ return EventLogServer.layerRpcHandlers({
62
+ remoteId,
63
+ getOrCreateSessionAuthBinding: (publicKey, signingPublicKey) => storage.getOrCreateSessionAuthBinding(publicKey, signingPublicKey),
64
+ onWrite: Effect.fnUntraced(function* (data) {
65
+ const request = yield* WriteEntriesUnencrypted.decode(data).pipe(Effect.mapError(_ => new EventLogProtocolError({
66
+ requestTag: "WriteEntries",
67
+ publicKey: undefined,
68
+ code: "InternalServerError",
69
+ message: "Decoding failure"
70
+ })));
71
+ if (!Arr.isReadonlyArrayNonEmpty(request.entries)) return;
72
+ const resolvedStoreId = yield* mapping.resolve({
73
+ publicKey: request.publicKey,
74
+ storeId: request.storeId
75
+ }).pipe(Effect.mapError(_ => new EventLogProtocolError({
76
+ requestTag: "WriteEntries",
77
+ publicKey: request.publicKey,
78
+ storeId: request.storeId,
79
+ code: "Unauthorized",
80
+ message: _.message
81
+ })));
82
+ yield* auth.authorizeWrite({
83
+ publicKey: request.publicKey,
84
+ storeId: resolvedStoreId,
85
+ entries: request.entries
86
+ }).pipe(Effect.mapError(_ => new EventLogProtocolError({
87
+ requestTag: "WriteEntries",
88
+ publicKey: request.publicKey,
89
+ storeId: request.storeId,
90
+ code: "Unauthorized",
91
+ message: _.message
92
+ })));
93
+ yield* processEntries({
94
+ publicKey: request.publicKey,
95
+ storeId: resolvedStoreId,
96
+ entries: request.entries
97
+ }).pipe(Effect.catchCause(_ => Effect.fail(new EventLogProtocolError({
98
+ requestTag: "WriteEntries",
99
+ publicKey: request.publicKey,
100
+ code: "InternalServerError",
101
+ message: "Persistence failure"
102
+ }))), Effect.provideService(EventLog.Identity, makeClientIdentity(request.publicKey)));
103
+ }),
104
+ changes: Effect.fnUntraced(function* (request) {
105
+ const storeId = yield* mapping.resolve({
106
+ publicKey: request.publicKey,
107
+ storeId: request.storeId
108
+ });
109
+ yield* auth.authorizeRead({
110
+ publicKey: request.publicKey,
111
+ storeId
112
+ });
113
+ return storage.changes({
114
+ storeId,
115
+ startSequence: request.startSequence,
116
+ compactors: registry.compactors
117
+ }).pipe(Stream.mapArrayEffect(entries => Effect.map(ChangesRpc.encodeUnencrypted(entries), Arr.of)));
118
+ }, Stream.unwrap)
119
+ });
120
+ }));
121
+ /**
122
+ * @since 4.0.0
123
+ * @category errors
124
+ */
125
+ export class EventLogServerStoreError extends /*#__PURE__*/Data.TaggedError("EventLogServerStoreError") {}
126
+ /**
127
+ * @since 4.0.0
128
+ * @category errors
129
+ */
130
+ export class EventLogServerAuthError extends /*#__PURE__*/Data.TaggedError("EventLogServerAuthError") {}
131
+ /**
132
+ * @since 4.0.0
133
+ * @category context
134
+ */
135
+ export class EventLogServerAuthorization extends /*#__PURE__*/Context.Service()("effect/eventlog/EventLogServerUnencrypted/EventLogServerAuthorization") {}
136
+ /**
137
+ * @since 4.0.0
138
+ * @category context
139
+ */
140
+ export class StoreMapping extends /*#__PURE__*/Context.Service()("effect/eventlog/EventLogServerUnencrypted/StoreMapping") {}
141
+ const toStoreNotFoundError = options => new EventLogServerStoreError({
142
+ reason: "NotFound",
143
+ publicKey: options.publicKey,
144
+ storeId: options.storeId,
145
+ message: options.publicKey === undefined ? `No provisioned store found for store id: ${options.storeId}` : `No provisioned store found for public key: ${options.publicKey} and store id: ${options.storeId}`
146
+ });
147
+ /**
148
+ * @since 4.0.0
149
+ * @category store
150
+ */
151
+ export const layerStoreMappingStatic = options => Layer.succeed(StoreMapping, {
152
+ resolve(request) {
153
+ if (request.storeId === options.storeId) {
154
+ return Effect.succeed(options.storeId);
155
+ }
156
+ return Effect.fail(toStoreNotFoundError(request));
157
+ },
158
+ hasStore: ({
159
+ storeId
160
+ }) => Effect.succeed(storeId === options.storeId)
161
+ });
162
+ /**
163
+ * @since 4.0.0
164
+ * @category storage
165
+ */
166
+ export class Storage extends /*#__PURE__*/Context.Service()("effect/eventlog/EventLogServerUnencrypted/Storage") {}
167
+ const makeClientIdentity = publicKey => ({
168
+ publicKey,
169
+ privateKey: constEmptyPrivateKey
170
+ });
171
+ const constEmptyPrivateKey = /*#__PURE__*/Redacted.make(/*#__PURE__*/new Uint8Array(32));
172
+ const makeServerWriteIdentityPublicKey = storeId => `effect-eventlog-server-write:${storeId}`;
173
+ const entriesAfter = (journal, startSequence) => journal.filter(entry => entry.remoteSequence >= startSequence);
174
+ const toConflicts = (history, originEntry) => {
175
+ let duplicate = false;
176
+ for (let i = 0; i < history.length; i++) {
177
+ const entry = history[i];
178
+ if (entry.createdAtMillis < originEntry.createdAtMillis) {
179
+ continue;
180
+ } else if (entry.idString === originEntry.idString) {
181
+ duplicate = true;
182
+ continue;
183
+ }
184
+ const newHistory = history.slice(i);
185
+ let conflicts = [];
186
+ for (let j = 0; j < newHistory.length; j++) {
187
+ const scannedEntry = history[j];
188
+ if (scannedEntry.event === originEntry.event && scannedEntry.primaryKey === originEntry.primaryKey) {
189
+ conflicts.push(scannedEntry);
190
+ }
191
+ }
192
+ return [duplicate, conflicts, newHistory];
193
+ }
194
+ return [duplicate, [], []];
195
+ };
196
+ const representativeSequences = options => {
197
+ if (options.compactedCount === 0) {
198
+ return [];
199
+ }
200
+ if (options.compactedCount > options.remoteEntries.length) {
201
+ return undefined;
202
+ }
203
+ const maxSequence = options.remoteEntries[options.remoteEntries.length - 1].remoteSequence;
204
+ if (options.compactedCount === 1) {
205
+ return [maxSequence];
206
+ }
207
+ const selected = options.remoteEntries.slice(0, options.compactedCount - 1).map(entry => entry.remoteSequence);
208
+ selected.push(maxSequence);
209
+ for (let i = 1; i < selected.length; i++) {
210
+ if (selected[i] <= selected[i - 1]) {
211
+ return undefined;
212
+ }
213
+ }
214
+ return selected;
215
+ };
216
+ const toCompactedRemoteEntries = options => {
217
+ const sequences = representativeSequences({
218
+ remoteEntries: options.remoteEntries,
219
+ compactedCount: options.compacted.length
220
+ });
221
+ if (sequences === undefined) {
222
+ return undefined;
223
+ }
224
+ return options.compacted.map((entry, index) => new RemoteEntry({
225
+ remoteSequence: sequences[index],
226
+ entry
227
+ }, {
228
+ disableChecks: true
229
+ }));
230
+ };
231
+ /**
232
+ * @since 4.0.0
233
+ * @category compaction
234
+ */
235
+ export const compactBacklog = /*#__PURE__*/Effect.fnUntraced(function* (options) {
236
+ if (options.compactors.size === 0 || options.remoteEntries.length === 0) {
237
+ return options.remoteEntries;
238
+ }
239
+ const compactedRemoteEntries = [];
240
+ let index = 0;
241
+ while (index < options.remoteEntries.length) {
242
+ const remoteEntry = options.remoteEntries[index];
243
+ const compactor = options.compactors.get(remoteEntry.entry.event);
244
+ if (compactor === undefined) {
245
+ compactedRemoteEntries.push(remoteEntry);
246
+ index++;
247
+ continue;
248
+ }
249
+ const entries = [remoteEntry.entry];
250
+ const remoteGroup = [remoteEntry];
251
+ const compacted = [];
252
+ index++;
253
+ while (index < options.remoteEntries.length) {
254
+ const nextRemoteEntry = options.remoteEntries[index];
255
+ const nextCompactor = options.compactors.get(nextRemoteEntry.entry.event);
256
+ if (nextCompactor !== compactor) {
257
+ break;
258
+ }
259
+ entries.push(nextRemoteEntry.entry);
260
+ remoteGroup.push(nextRemoteEntry);
261
+ index++;
262
+ }
263
+ yield* compactor.effect({
264
+ entries,
265
+ write(entry) {
266
+ return Effect.sync(() => {
267
+ compacted.push(entry);
268
+ });
269
+ }
270
+ }).pipe(Effect.orDie);
271
+ const projected = toCompactedRemoteEntries({
272
+ compacted,
273
+ remoteEntries: remoteGroup
274
+ });
275
+ if (projected === undefined) {
276
+ compactedRemoteEntries.push(...remoteGroup);
277
+ continue;
278
+ }
279
+ compactedRemoteEntries.push(...projected);
280
+ }
281
+ return compactedRemoteEntries;
282
+ });
283
+ /**
284
+ * @since 4.0.0
285
+ * @category storage
286
+ */
287
+ export const makeStorageMemory = /*#__PURE__*/Effect.gen(function* () {
288
+ const knownIds = new Map();
289
+ const journals = new Map();
290
+ const sessionAuthBindings = new Map();
291
+ const remoteId = makeRemoteIdUnsafe();
292
+ const ensureKnownIds = storeId => {
293
+ let storeKnownIds = knownIds.get(storeId);
294
+ if (storeKnownIds) return storeKnownIds;
295
+ storeKnownIds = new Map();
296
+ knownIds.set(storeId, storeKnownIds);
297
+ return storeKnownIds;
298
+ };
299
+ const ensureJournal = storeId => {
300
+ let journal = journals.get(storeId);
301
+ if (journal) return journal;
302
+ journal = [];
303
+ journals.set(storeId, journal);
304
+ return journal;
305
+ };
306
+ const pubsubs = yield* RcMap.make({
307
+ lookup: _storeId => Effect.acquireRelease(PubSub.unbounded(), PubSub.shutdown),
308
+ idleTimeToLive: 60000
309
+ });
310
+ const write = Effect.fnUntraced(function* (storeId, entries) {
311
+ const sequenceNumbers = [];
312
+ const committed = [];
313
+ const storeKnownIds = ensureKnownIds(storeId);
314
+ const journal = ensureJournal(storeId);
315
+ let lastSequenceNumber = Arr.last(journal).pipe(Option.map(entry => entry.remoteSequence), Option.getOrElse(() => 0));
316
+ if (entries.some(entry => storeKnownIds.has(entry.idString))) {
317
+ return yield* Effect.die("Duplicate entries");
318
+ }
319
+ for (const entry of entries) {
320
+ const remoteEntry = new RemoteEntry({
321
+ remoteSequence: ++lastSequenceNumber,
322
+ entry
323
+ }, {
324
+ disableChecks: true
325
+ });
326
+ sequenceNumbers.push(remoteEntry.remoteSequence);
327
+ committed.push(remoteEntry);
328
+ journal.push(remoteEntry);
329
+ storeKnownIds.set(entry.idString, remoteEntry.remoteSequence);
330
+ }
331
+ const pubsub = yield* RcMap.get(pubsubs, storeId);
332
+ yield* PubSub.publishAll(pubsub, committed);
333
+ return committed;
334
+ }, Effect.scoped);
335
+ const transactionSemaphore = yield* Semaphore.make(1);
336
+ return Storage.of({
337
+ getId: Effect.succeed(remoteId),
338
+ getOrCreateSessionAuthBinding: (publicKey, signingPublicKey) => Effect.sync(() => {
339
+ const existing = sessionAuthBindings.get(publicKey);
340
+ if (existing) return existing;
341
+ sessionAuthBindings.set(publicKey, signingPublicKey);
342
+ return signingPublicKey;
343
+ }),
344
+ entriesAfter: (storeId, entry) => Effect.sync(() => {
345
+ const journal = ensureJournal(storeId);
346
+ return journal.filter(e => Entry.Order(e.entry, entry) >= 0).map(e => e.entry);
347
+ }),
348
+ write,
349
+ changes: Effect.fnUntraced(function* ({
350
+ storeId,
351
+ startSequence,
352
+ compactors
353
+ }) {
354
+ const pubsub = yield* RcMap.get(pubsubs, storeId);
355
+ const subscription = yield* PubSub.subscribe(pubsub);
356
+ const backlog = yield* compactBacklog({
357
+ remoteEntries: entriesAfter(ensureJournal(storeId), startSequence),
358
+ compactors
359
+ });
360
+ const replayedUpTo = backlog.length > 0 ? backlog[backlog.length - 1].remoteSequence : startSequence - 1;
361
+ return Stream.fromArray(backlog).pipe(Stream.concat(Stream.fromSubscription(subscription).pipe(Stream.filter(entry => entry.remoteSequence > replayedUpTo))));
362
+ }, Stream.unwrap),
363
+ withTransaction: transactionSemaphore.withPermits(1)
364
+ });
365
+ });
366
+ /**
367
+ * @since 4.0.0
368
+ * @category storage
369
+ */
370
+ export const layerStorageMemory = /*#__PURE__*/Layer.effect(Storage)(makeStorageMemory);
371
+ /**
372
+ * @since 4.0.0
373
+ * @category constructors
374
+ */
375
+ export const make = /*#__PURE__*/Effect.gen(function* () {
376
+ const storage = yield* Storage;
377
+ const handler = yield* makeServerHandler;
378
+ return EventLogServerUnencrypted.of({
379
+ makeWrite(schema) {
380
+ const events = new Map();
381
+ for (const group of schema.groups) {
382
+ for (const [tag, event] of Object.entries(group.events)) {
383
+ events.set(tag, event);
384
+ }
385
+ }
386
+ return Effect.fnUntraced(function* (options) {
387
+ const publicKey = makeServerWriteIdentityPublicKey(options.storeId);
388
+ const schemaEvent = events.get(options.event);
389
+ if (schemaEvent === undefined) {
390
+ return yield* Effect.die(`Event schema not found for: "${options.event}"`);
391
+ }
392
+ const entry = new EventJournal.Entry({
393
+ id: makeEntryIdUnsafe(),
394
+ event: options.event,
395
+ primaryKey: schemaEvent.primaryKey(options.payload),
396
+ payload: yield* Schema.encodeUnknownEffect(schemaEvent.payloadMsgPack)(options.payload).pipe(Effect.mapError(_ => new EventLogServerStoreError({
397
+ reason: "PersistenceFailure",
398
+ publicKey: publicKey,
399
+ storeId: options.storeId,
400
+ message: "Failed to encode event"
401
+ })))
402
+ }, {
403
+ disableChecks: true
404
+ });
405
+ const result = yield* handler({
406
+ publicKey,
407
+ storeId: options.storeId,
408
+ entry,
409
+ conflicts: []
410
+ }).pipe(Effect.provideService(EventLog.Identity, makeClientIdentity(publicKey)));
411
+ yield* storage.write(options.storeId, [entry]);
412
+ return result;
413
+ }, storage.withTransaction);
414
+ }
415
+ });
416
+ });
417
+ /**
418
+ * @since 4.0.0
419
+ * @category layers
420
+ */
421
+ export const layerServer = /*#__PURE__*/Layer.effect(EventLogServerUnencrypted, make).pipe(/*#__PURE__*/Layer.provideMerge(EventLog.layerRegistry));
422
+ /**
423
+ * @since 4.0.0
424
+ * @category layers
425
+ */
426
+ export const layer = (_schema, layer) => RpcServer.layer(EventLogRemoteRpcs).pipe(Layer.provide(layerRpcHandlers), Layer.provide(layer), Layer.provide(layerServer));
427
+ /**
428
+ * @since 4.0.0
429
+ * @category layers
430
+ */
431
+ export const layerNoRpcServer = (_schema, layer) => layerRpcHandlers.pipe(Layer.merge(layer), Layer.provide(layerServer));
432
+ const makeServerHandler = /*#__PURE__*/Effect.gen(function* () {
433
+ const registry = yield* EventLog.Registry;
434
+ return Effect.fnUntraced(function* (options) {
435
+ const handler = registry.handlers.get(options.entry.event);
436
+ if (handler === undefined) {
437
+ return yield* Effect.logDebug(`Event handler not found for: "${options.entry.event}"`);
438
+ }
439
+ const decodePayload = Schema.decodeUnknownEffect(handler.event.payloadMsgPack);
440
+ const decodedConflicts = [];
441
+ for (const conflict of options.conflicts) {
442
+ decodedConflicts.push({
443
+ entry: conflict,
444
+ payload: yield* decodePayload(conflict.payload).pipe(Effect.updateContext(input => Context.merge(handler.context, input)))
445
+ });
446
+ }
447
+ const payloadEffect = "payload" in options ? Effect.succeed(options.payload) : decodePayload(options.entry.payload);
448
+ return yield* payloadEffect.pipe(Effect.mapError(_ => new EventLogServerStoreError({
449
+ reason: "PersistenceFailure",
450
+ publicKey: options.publicKey,
451
+ storeId: options.storeId,
452
+ message: "Failed to decode event"
453
+ })), Effect.flatMap(payload => handler.handler({
454
+ storeId: options.storeId,
455
+ payload,
456
+ entry: options.entry,
457
+ conflicts: decodedConflicts
458
+ })), Effect.updateContext(input => Context.merge(handler.context, input)));
459
+ });
460
+ });
461
+ //# sourceMappingURL=EventLogServerUnencrypted.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"EventLogServerUnencrypted.js","names":["Arr","Context","Data","Effect","Layer","Option","PubSub","RcMap","Redacted","Schema","Semaphore","Stream","RpcServer","EventJournal","Entry","makeEntryIdUnsafe","makeRemoteIdUnsafe","RemoteEntry","EventLog","ChangesRpc","EventLogProtocolError","EventLogRemoteRpcs","WriteEntriesUnencrypted","EventLogServer","EventLogServerUnencrypted","Service","makeWrite","schema","useSync","_","layerRpcHandlers","unwrap","gen","storage","Storage","mapping","StoreMapping","auth","EventLogServerAuthorization","registry","Registry","handler","makeServerHandler","remoteId","getId","processEntries","fnUntraced","options","entries","sort","Order","history","entriesAfter","storeId","persistedEntries","empty","entry","duplicate","conflicts","newHistory","toConflicts","publicKey","push","write","withTransaction","getOrCreateSessionAuthBinding","signingPublicKey","onWrite","data","request","decode","pipe","mapError","requestTag","undefined","code","message","isReadonlyArrayNonEmpty","resolvedStoreId","resolve","authorizeWrite","catchCause","fail","provideService","Identity","makeClientIdentity","changes","authorizeRead","startSequence","compactors","mapArrayEffect","map","encodeUnencrypted","of","EventLogServerStoreError","TaggedError","EventLogServerAuthError","toStoreNotFoundError","reason","layerStoreMappingStatic","succeed","hasStore","privateKey","constEmptyPrivateKey","make","Uint8Array","makeServerWriteIdentityPublicKey","journal","filter","remoteSequence","originEntry","i","length","createdAtMillis","idString","slice","j","scannedEntry","event","primaryKey","representativeSequences","compactedCount","remoteEntries","maxSequence","selected","toCompactedRemoteEntries","sequences","compacted","index","disableChecks","compactBacklog","size","compactedRemoteEntries","remoteEntry","compactor","get","remoteGroup","nextRemoteEntry","nextCompactor","effect","sync","orDie","projected","makeStorageMemory","knownIds","Map","journals","sessionAuthBindings","ensureKnownIds","storeKnownIds","set","ensureJournal","pubsubs","lookup","_storeId","acquireRelease","unbounded","shutdown","idleTimeToLive","sequenceNumbers","committed","lastSequenceNumber","last","getOrElse","some","has","die","pubsub","publishAll","scoped","transactionSemaphore","existing","e","subscription","subscribe","backlog","replayedUpTo","fromArray","concat","fromSubscription","withPermits","layerStorageMemory","events","group","groups","tag","Object","schemaEvent","id","payload","encodeUnknownEffect","payloadMsgPack","result","layerServer","provideMerge","layerRegistry","layer","_schema","provide","layerNoRpcServer","merge","handlers","logDebug","decodePayload","decodeUnknownEffect","decodedConflicts","conflict","updateContext","input","context","payloadEffect","flatMap"],"sources":["../../../src/unstable/eventlog/EventLogServerUnencrypted.ts"],"sourcesContent":[null],"mappings":"AAAA;;;AAGA,OAAO,KAAKA,GAAG,MAAM,gBAAgB;AACrC,OAAO,KAAKC,OAAO,MAAM,kBAAkB;AAC3C,OAAO,KAAKC,IAAI,MAAM,eAAe;AACrC,OAAO,KAAKC,MAAM,MAAM,iBAAiB;AACzC,OAAO,KAAKC,KAAK,MAAM,gBAAgB;AACvC,OAAO,KAAKC,MAAM,MAAM,iBAAiB;AACzC,OAAO,KAAKC,MAAM,MAAM,iBAAiB;AACzC,OAAO,KAAKC,KAAK,MAAM,gBAAgB;AACvC,OAAO,KAAKC,QAAQ,MAAM,mBAAmB;AAC7C,OAAO,KAAKC,MAAM,MAAM,iBAAiB;AAEzC,OAAO,KAAKC,SAAS,MAAM,oBAAoB;AAC/C,OAAO,KAAKC,MAAM,MAAM,iBAAiB;AAGzC,OAAO,KAAKC,SAAS,MAAM,qBAAqB;AAGhD,OAAO,KAAKC,YAAY,MAAM,mBAAmB;AACjD,SAASC,KAAK,EAAEC,iBAAiB,EAAEC,kBAAkB,EAAEC,WAAW,QAAuB,mBAAmB;AAC5G,OAAO,KAAKC,QAAQ,MAAM,eAAe;AACzC,SACEC,UAAU,EAEVC,qBAAqB,EACrBC,kBAAkB,EAElBC,uBAAuB,QAClB,sBAAsB;AAC7B,OAAO,KAAKC,cAAc,MAAM,qBAAqB;AAErD;;;;AAIA,OAAM,MAAOC,yBAA0B,sBAAQvB,OAAO,CAACwB,OAAO,EAc1D,CAAC,2CAA2C,CAAC;AAEjD;;;;AAIA,OAAO,MAAMC,SAAS,GACpBC,MAAuC,IAepCH,yBAAyB,CAACI,OAAO,CAAEC,CAAC,IAAKA,CAAC,CAACH,SAAS,CAACC,MAAM,CAAC,CAAC;AAElE;;;;AAIA,OAAO,MAAMG,gBAAgB,gBAIzB1B,KAAK,CAAC2B,MAAM,cAAC5B,MAAM,CAAC6B,GAAG,CAAC,aAAS;EACnC,MAAMC,OAAO,GAAG,OAAOC,OAAO;EAC9B,MAAMC,OAAO,GAAG,OAAOC,YAAY;EACnC,MAAMC,IAAI,GAAG,OAAOC,2BAA2B;EAC/C,MAAMC,QAAQ,GAAG,OAAOrB,QAAQ,CAACsB,QAAQ;EACzC,MAAMC,OAAO,GAAG,OAAOC,iBAAiB;EACxC,MAAMC,QAAQ,GAAG,OAAOV,OAAO,CAACW,KAAK;EAErC,MAAMC,cAAc,GAAG1C,MAAM,CAAC2C,UAAU,CAAC,WAAUC,OAIlD;IACC,MAAMC,OAAO,GAAGhD,GAAG,CAACiD,IAAI,CAACF,OAAO,CAACC,OAAO,EAAElC,KAAK,CAACoC,KAAK,CAAC;IACtD,IAAIC,OAAO,GAAG,OAAOlB,OAAO,CAACmB,YAAY,CAACL,OAAO,CAACM,OAAO,EAAEL,OAAO,CAAC,CAAC,CAAC,CAAC;IACtE,MAAMM,gBAAgB,GAAGtD,GAAG,CAACuD,KAAK,EAAS;IAC3C,KAAK,MAAMC,KAAK,IAAIR,OAAO,EAAE;MAC3B,MAAM,CAACS,SAAS,EAAEC,SAAS,EAAEC,UAAU,CAAC,GAAGC,WAAW,CAACT,OAAO,EAAEK,KAAK,CAAC;MACtE,IAAIC,SAAS,EAAE;MACfN,OAAO,GAAGQ,UAAU;MACpB,OAAOlB,OAAO,CAAC;QACboB,SAAS,EAAEd,OAAO,CAACc,SAAS;QAC5BR,OAAO,EAAEN,OAAO,CAACM,OAAO;QACxBG,KAAK;QACLE;OACD,CAAC;MACFJ,gBAAgB,CAACQ,IAAI,CAACN,KAAK,CAAC;IAC9B;IACA,OAAOvB,OAAO,CAAC8B,KAAK,CAAChB,OAAO,CAACM,OAAO,EAAEC,gBAAgB,CAAC;EACzD,CAAC,EAAErB,OAAO,CAAC+B,eAAe,CAAC;EAE3B,OAAOzC,cAAc,CAACO,gBAAgB,CAAC;IACrCa,QAAQ;IACRsB,6BAA6B,EAAEA,CAACJ,SAAS,EAAEK,gBAAgB,KACzDjC,OAAO,CAACgC,6BAA6B,CAACJ,SAAS,EAAEK,gBAAgB,CAAC;IACpEC,OAAO,EAAEhE,MAAM,CAAC2C,UAAU,CAAC,WAAUsB,IAAI;MACvC,MAAMC,OAAO,GAAG,OAAO/C,uBAAuB,CAACgD,MAAM,CAACF,IAAI,CAAC,CAACG,IAAI,CAC9DpE,MAAM,CAACqE,QAAQ,CAAE3C,CAAC,IAChB,IAAIT,qBAAqB,CAAC;QACxBqD,UAAU,EAAE,cAAc;QAC1BZ,SAAS,EAAEa,SAAS;QACpBC,IAAI,EAAE,qBAAqB;QAC3BC,OAAO,EAAE;OACV,CAAC,CACH,CACF;MACD,IAAI,CAAC5E,GAAG,CAAC6E,uBAAuB,CAACR,OAAO,CAACrB,OAAO,CAAC,EAAE;MAEnD,MAAM8B,eAAe,GAAG,OAAO3C,OAAO,CAAC4C,OAAO,CAAC;QAC7ClB,SAAS,EAAEQ,OAAO,CAACR,SAAS;QAC5BR,OAAO,EAAEgB,OAAO,CAAChB;OAClB,CAAC,CAACkB,IAAI,CACLpE,MAAM,CAACqE,QAAQ,CAAE3C,CAAC,IAChB,IAAIT,qBAAqB,CAAC;QACxBqD,UAAU,EAAE,cAAc;QAC1BZ,SAAS,EAAEQ,OAAO,CAACR,SAAS;QAC5BR,OAAO,EAAEgB,OAAO,CAAChB,OAAO;QACxBsB,IAAI,EAAE,cAAc;QACpBC,OAAO,EAAE/C,CAAC,CAAC+C;OACZ,CAAC,CACH,CACF;MACD,OAAOvC,IAAI,CAAC2C,cAAc,CAAC;QACzBnB,SAAS,EAAEQ,OAAO,CAACR,SAAS;QAC5BR,OAAO,EAAEyB,eAAe;QACxB9B,OAAO,EAAEqB,OAAO,CAACrB;OAClB,CAAC,CAACuB,IAAI,CACLpE,MAAM,CAACqE,QAAQ,CAAE3C,CAAC,IAChB,IAAIT,qBAAqB,CAAC;QACxBqD,UAAU,EAAE,cAAc;QAC1BZ,SAAS,EAAEQ,OAAO,CAACR,SAAS;QAC5BR,OAAO,EAAEgB,OAAO,CAAChB,OAAO;QACxBsB,IAAI,EAAE,cAAc;QACpBC,OAAO,EAAE/C,CAAC,CAAC+C;OACZ,CAAC,CACH,CACF;MACD,OAAO/B,cAAc,CAAC;QACpBgB,SAAS,EAAEQ,OAAO,CAACR,SAAS;QAC5BR,OAAO,EAAEyB,eAAe;QACxB9B,OAAO,EAAEqB,OAAO,CAACrB;OAClB,CAAC,CAACuB,IAAI,CACLpE,MAAM,CAAC8E,UAAU,CAAEpD,CAAC,IAClB1B,MAAM,CAAC+E,IAAI,CACT,IAAI9D,qBAAqB,CAAC;QACxBqD,UAAU,EAAE,cAAc;QAC1BZ,SAAS,EAAEQ,OAAO,CAACR,SAAS;QAC5Bc,IAAI,EAAE,qBAAqB;QAC3BC,OAAO,EAAE;OACV,CAAC,CACH,CACF,EACDzE,MAAM,CAACgF,cAAc,CAACjE,QAAQ,CAACkE,QAAQ,EAAEC,kBAAkB,CAAChB,OAAO,CAACR,SAAS,CAAC,CAAC,CAChF;IACH,CAAC,CAAC;IACFyB,OAAO,EAAEnF,MAAM,CAAC2C,UAAU,CAAC,WAAUuB,OAAO;MAC1C,MAAMhB,OAAO,GAAG,OAAOlB,OAAO,CAAC4C,OAAO,CAAC;QACrClB,SAAS,EAAEQ,OAAO,CAACR,SAAS;QAC5BR,OAAO,EAAEgB,OAAO,CAAChB;OAClB,CAAC;MACF,OAAOhB,IAAI,CAACkD,aAAa,CAAC;QACxB1B,SAAS,EAAEQ,OAAO,CAACR,SAAS;QAC5BR;OACD,CAAC;MACF,OAAOpB,OAAO,CAACqD,OAAO,CAAC;QACrBjC,OAAO;QACPmC,aAAa,EAAEnB,OAAO,CAACmB,aAAa;QACpCC,UAAU,EAAElD,QAAQ,CAACkD;OACtB,CAAC,CAAClB,IAAI,CACL5D,MAAM,CAAC+E,cAAc,CAAE1C,OAAO,IAAK7C,MAAM,CAACwF,GAAG,CAACxE,UAAU,CAACyE,iBAAiB,CAAC5C,OAAO,CAAC,EAAEhD,GAAG,CAAC6F,EAAE,CAAC,CAAC,CAC9F;IACH,CAAC,EAAElF,MAAM,CAACoB,MAAM;GACjB,CAAC;AACJ,CAAC,CAAC,CAAC;AAEH;;;;AAIA,OAAM,MAAO+D,wBAAyB,sBAAQ5F,IAAI,CAAC6F,WAAW,CAAC,0BAA0B,CAKvF;AAEF;;;;AAIA,OAAM,MAAOC,uBAAwB,sBAAQ9F,IAAI,CAAC6F,WAAW,CAAC,yBAAyB,CAKrF;AAEF;;;;AAIA,OAAM,MAAOzD,2BAA4B,sBAAQrC,OAAO,CAACwB,OAAO,EAa5D,CAAC,uEAAuE,CAAC;AAE7E;;;;AAIA,OAAM,MAAOW,YAAa,sBAAQnC,OAAO,CAACwB,OAAO,EAW7C,CAAC,wDAAwD,CAAC;AAE9D,MAAMwE,oBAAoB,GAAIlD,OAG7B,IACC,IAAI+C,wBAAwB,CAAC;EAC3BI,MAAM,EAAE,UAAU;EAClBrC,SAAS,EAAEd,OAAO,CAACc,SAAS;EAC5BR,OAAO,EAAEN,OAAO,CAACM,OAAO;EACxBuB,OAAO,EAAE7B,OAAO,CAACc,SAAS,KAAKa,SAAS,GACpC,4CAA4C3B,OAAO,CAACM,OAAO,EAAE,GAC7D,8CAA8CN,OAAO,CAACc,SAAS,kBAAkBd,OAAO,CAACM,OAAO;CACrG,CAAC;AAEJ;;;;AAIA,OAAO,MAAM8C,uBAAuB,GAAIpD,OAEvC,IACC3C,KAAK,CAACgG,OAAO,CAAChE,YAAY,EAAE;EAC1B2C,OAAOA,CAACV,OAAO;IACb,IAAIA,OAAO,CAAChB,OAAO,KAAKN,OAAO,CAACM,OAAO,EAAE;MACvC,OAAOlD,MAAM,CAACiG,OAAO,CAACrD,OAAO,CAACM,OAAO,CAAC;IACxC;IACA,OAAOlD,MAAM,CAAC+E,IAAI,CAACe,oBAAoB,CAAC5B,OAAO,CAAC,CAAC;EACnD,CAAC;EACDgC,QAAQ,EAAEA,CAAC;IAAEhD;EAAO,CAAE,KAAKlD,MAAM,CAACiG,OAAO,CAAC/C,OAAO,KAAKN,OAAO,CAACM,OAAO;CACtE,CAAC;AAEJ;;;;AAIA,OAAM,MAAOnB,OAAQ,sBAAQjC,OAAO,CAACwB,OAAO,EAiBxC,CAAC,mDAAmD,CAAC;AAEzD,MAAM4D,kBAAkB,GAAIxB,SAAiB,KAAoC;EAC/EA,SAAS;EACTyC,UAAU,EAAEC;CACb,CAAC;AACF,MAAMA,oBAAoB,gBAAG/F,QAAQ,CAACgG,IAAI,cAAC,IAAIC,UAAU,CAAC,EAAE,CAAC,CAAC;AAE9D,MAAMC,gCAAgC,GAAIrD,OAAgB,IAAa,gCAAgCA,OAAO,EAAE;AAEhH,MAAMD,YAAY,GAAGA,CAACuD,OAA2B,EAAEnB,aAAqB,KACtEmB,OAAO,CAACC,MAAM,CAAEpD,KAAK,IAAKA,KAAK,CAACqD,cAAc,IAAIrB,aAAa,CAAC;AAElE,MAAM5B,WAAW,GAAGA,CAClBT,OAA6B,EAC7B2D,WAAkB,KACyD;EAC3E,IAAIrD,SAAS,GAAG,KAAK;EAErB,KAAK,IAAIsD,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAG5D,OAAO,CAAC6D,MAAM,EAAED,CAAC,EAAE,EAAE;IACvC,MAAMvD,KAAK,GAAGL,OAAO,CAAC4D,CAAC,CAAC;IACxB,IAAIvD,KAAK,CAACyD,eAAe,GAAGH,WAAW,CAACG,eAAe,EAAE;MACvD;IACF,CAAC,MAAM,IAAIzD,KAAK,CAAC0D,QAAQ,KAAKJ,WAAW,CAACI,QAAQ,EAAE;MAClDzD,SAAS,GAAG,IAAI;MAChB;IACF;IAEA,MAAME,UAAU,GAAGR,OAAO,CAACgE,KAAK,CAACJ,CAAC,CAAC;IACnC,IAAIrD,SAAS,GAAiB,EAAE;IAChC,KAAK,IAAI0D,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAGzD,UAAU,CAACqD,MAAM,EAAEI,CAAC,EAAE,EAAE;MAC1C,MAAMC,YAAY,GAAGlE,OAAO,CAACiE,CAAC,CAAE;MAChC,IAAIC,YAAY,CAACC,KAAK,KAAKR,WAAW,CAACQ,KAAK,IAAID,YAAY,CAACE,UAAU,KAAKT,WAAW,CAACS,UAAU,EAAE;QAClG7D,SAAS,CAACI,IAAI,CAACuD,YAAY,CAAC;MAC9B;IACF;IACA,OAAO,CAAC5D,SAAS,EAAEC,SAAS,EAAEC,UAAU,CAAC;EAC3C;EAEA,OAAO,CAACF,SAAS,EAAE,EAAE,EAAE,EAAE,CAAC;AAC5B,CAAC;AAUD,MAAM+D,uBAAuB,GAAIzE,OAGhC,IAAuC;EACtC,IAAIA,OAAO,CAAC0E,cAAc,KAAK,CAAC,EAAE;IAChC,OAAO,EAAE;EACX;EACA,IAAI1E,OAAO,CAAC0E,cAAc,GAAG1E,OAAO,CAAC2E,aAAa,CAACV,MAAM,EAAE;IACzD,OAAOtC,SAAS;EAClB;EAEA,MAAMiD,WAAW,GAAG5E,OAAO,CAAC2E,aAAa,CAAC3E,OAAO,CAAC2E,aAAa,CAACV,MAAM,GAAG,CAAC,CAAE,CAACH,cAAc;EAC3F,IAAI9D,OAAO,CAAC0E,cAAc,KAAK,CAAC,EAAE;IAChC,OAAO,CAACE,WAAW,CAAC;EACtB;EAEA,MAAMC,QAAQ,GAAG7E,OAAO,CAAC2E,aAAa,CACnCP,KAAK,CAAC,CAAC,EAAEpE,OAAO,CAAC0E,cAAc,GAAG,CAAC,CAAC,CACpC9B,GAAG,CAAEnC,KAAK,IAAKA,KAAK,CAACqD,cAAc,CAAC;EACvCe,QAAQ,CAAC9D,IAAI,CAAC6D,WAAW,CAAC;EAC1B,KAAK,IAAIZ,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAGa,QAAQ,CAACZ,MAAM,EAAED,CAAC,EAAE,EAAE;IACxC,IAAIa,QAAQ,CAACb,CAAC,CAAE,IAAIa,QAAQ,CAACb,CAAC,GAAG,CAAC,CAAE,EAAE;MACpC,OAAOrC,SAAS;IAClB;EACF;EACA,OAAOkD,QAAQ;AACjB,CAAC;AAED,MAAMC,wBAAwB,GAAI9E,OAGjC,IAA4C;EAC3C,MAAM+E,SAAS,GAAGN,uBAAuB,CAAC;IACxCE,aAAa,EAAE3E,OAAO,CAAC2E,aAAa;IACpCD,cAAc,EAAE1E,OAAO,CAACgF,SAAS,CAACf;GACnC,CAAC;EACF,IAAIc,SAAS,KAAKpD,SAAS,EAAE;IAC3B,OAAOA,SAAS;EAClB;EAEA,OAAO3B,OAAO,CAACgF,SAAS,CAACpC,GAAG,CAAC,CAACnC,KAAK,EAAEwE,KAAK,KACxC,IAAI/G,WAAW,CAAC;IACd4F,cAAc,EAAEiB,SAAS,CAACE,KAAK,CAAE;IACjCxE;GACD,EAAE;IAAEyE,aAAa,EAAE;EAAI,CAAE,CAAC,CAC5B;AACH,CAAC;AAED;;;;AAIA,OAAO,MAAMC,cAAc,gBAAG/H,MAAM,CAAC2C,UAAU,CAAC,WAAUC,OAGzD;EACC,IAAIA,OAAO,CAAC0C,UAAU,CAAC0C,IAAI,KAAK,CAAC,IAAIpF,OAAO,CAAC2E,aAAa,CAACV,MAAM,KAAK,CAAC,EAAE;IACvE,OAAOjE,OAAO,CAAC2E,aAAa;EAC9B;EAEA,MAAMU,sBAAsB,GAAuB,EAAE;EACrD,IAAIJ,KAAK,GAAG,CAAC;EAEb,OAAOA,KAAK,GAAGjF,OAAO,CAAC2E,aAAa,CAACV,MAAM,EAAE;IAC3C,MAAMqB,WAAW,GAAGtF,OAAO,CAAC2E,aAAa,CAACM,KAAK,CAAE;IACjD,MAAMM,SAAS,GAAGvF,OAAO,CAAC0C,UAAU,CAAC8C,GAAG,CAACF,WAAW,CAAC7E,KAAK,CAAC8D,KAAK,CAAC;IACjE,IAAIgB,SAAS,KAAK5D,SAAS,EAAE;MAC3B0D,sBAAsB,CAACtE,IAAI,CAACuE,WAAW,CAAC;MACxCL,KAAK,EAAE;MACP;IACF;IAEA,MAAMhF,OAAO,GAAiB,CAACqF,WAAW,CAAC7E,KAAK,CAAC;IACjD,MAAMgF,WAAW,GAAuB,CAACH,WAAW,CAAC;IACrD,MAAMN,SAAS,GAAiB,EAAE;IAClCC,KAAK,EAAE;IAEP,OAAOA,KAAK,GAAGjF,OAAO,CAAC2E,aAAa,CAACV,MAAM,EAAE;MAC3C,MAAMyB,eAAe,GAAG1F,OAAO,CAAC2E,aAAa,CAACM,KAAK,CAAE;MACrD,MAAMU,aAAa,GAAG3F,OAAO,CAAC0C,UAAU,CAAC8C,GAAG,CAACE,eAAe,CAACjF,KAAK,CAAC8D,KAAK,CAAC;MACzE,IAAIoB,aAAa,KAAKJ,SAAS,EAAE;QAC/B;MACF;MACAtF,OAAO,CAACc,IAAI,CAAC2E,eAAe,CAACjF,KAAK,CAAC;MACnCgF,WAAW,CAAC1E,IAAI,CAAC2E,eAAe,CAAC;MACjCT,KAAK,EAAE;IACT;IAEA,OAAOM,SAAS,CAACK,MAAM,CAAC;MACtB3F,OAAO;MACPe,KAAKA,CAACP,KAAK;QACT,OAAOrD,MAAM,CAACyI,IAAI,CAAC,MAAK;UACtBb,SAAS,CAACjE,IAAI,CAACN,KAAK,CAAC;QACvB,CAAC,CAAC;MACJ;KACD,CAAC,CAACe,IAAI,CAACpE,MAAM,CAAC0I,KAAK,CAAC;IAErB,MAAMC,SAAS,GAAGjB,wBAAwB,CAAC;MACzCE,SAAS;MACTL,aAAa,EAAEc;KAChB,CAAC;IAEF,IAAIM,SAAS,KAAKpE,SAAS,EAAE;MAC3B0D,sBAAsB,CAACtE,IAAI,CAAC,GAAG0E,WAAW,CAAC;MAC3C;IACF;IACAJ,sBAAsB,CAACtE,IAAI,CAAC,GAAGgF,SAAS,CAAC;EAC3C;EAEA,OAAOV,sBAAsB;AAC/B,CAAC,CAAC;AAEF;;;;AAIA,OAAO,MAAMW,iBAAiB,gBAA0D5I,MAAM,CAAC6B,GAAG,CAAC,aAAS;EAC1G,MAAMgH,QAAQ,GAAG,IAAIC,GAAG,EAA+B;EACvD,MAAMC,QAAQ,GAAG,IAAID,GAAG,EAA8B;EACtD,MAAME,mBAAmB,GAAG,IAAIF,GAAG,EAAmC;EACtE,MAAMtG,QAAQ,GAAG3B,kBAAkB,EAAE;EAErC,MAAMoI,cAAc,GAAI/F,OAAgB,IAAyB;IAC/D,IAAIgG,aAAa,GAAGL,QAAQ,CAACT,GAAG,CAAClF,OAAO,CAAC;IACzC,IAAIgG,aAAa,EAAE,OAAOA,aAAa;IACvCA,aAAa,GAAG,IAAIJ,GAAG,EAAE;IACzBD,QAAQ,CAACM,GAAG,CAACjG,OAAO,EAAEgG,aAAa,CAAC;IACpC,OAAOA,aAAa;EACtB,CAAC;EAED,MAAME,aAAa,GAAIlG,OAAgB,IAAwB;IAC7D,IAAIsD,OAAO,GAAGuC,QAAQ,CAACX,GAAG,CAAClF,OAAO,CAAC;IACnC,IAAIsD,OAAO,EAAE,OAAOA,OAAO;IAC3BA,OAAO,GAAG,EAAE;IACZuC,QAAQ,CAACI,GAAG,CAACjG,OAAO,EAAEsD,OAAO,CAAC;IAC9B,OAAOA,OAAO;EAChB,CAAC;EAED,MAAM6C,OAAO,GAAG,OAAOjJ,KAAK,CAACiG,IAAI,CAAC;IAChCiD,MAAM,EAAGC,QAAgB,IACvBvJ,MAAM,CAACwJ,cAAc,CACnBrJ,MAAM,CAACsJ,SAAS,EAAe,EAC/BtJ,MAAM,CAACuJ,QAAQ,CAChB;IACHC,cAAc,EAAE;GACjB,CAAC;EAEF,MAAM/F,KAAK,GAAG5D,MAAM,CAAC2C,UAAU,CAAC,WAAUO,OAAgB,EAAEL,OAA6B;IACvF,MAAM+G,eAAe,GAAkB,EAAE;IACzC,MAAMC,SAAS,GAAuB,EAAE;IACxC,MAAMX,aAAa,GAAGD,cAAc,CAAC/F,OAAO,CAAC;IAC7C,MAAMsD,OAAO,GAAG4C,aAAa,CAAClG,OAAO,CAAC;IACtC,IAAI4G,kBAAkB,GAAGjK,GAAG,CAACkK,IAAI,CAACvD,OAAO,CAAC,CAACpC,IAAI,CAC7ClE,MAAM,CAACsF,GAAG,CAAEnC,KAAK,IAAKA,KAAK,CAACqD,cAAc,CAAC,EAC3CxG,MAAM,CAAC8J,SAAS,CAAC,MAAM,CAAC,CAAC,CAC1B;IACD,IAAInH,OAAO,CAACoH,IAAI,CAAE5G,KAAK,IAAK6F,aAAa,CAACgB,GAAG,CAAC7G,KAAK,CAAC0D,QAAQ,CAAC,CAAC,EAAE;MAC9D,OAAO,OAAO/G,MAAM,CAACmK,GAAG,CAAC,mBAAmB,CAAC;IAC/C;IAEA,KAAK,MAAM9G,KAAK,IAAIR,OAAO,EAAE;MAC3B,MAAMqF,WAAW,GAAG,IAAIpH,WAAW,CAAC;QAClC4F,cAAc,EAAE,EAAEoD,kBAAkB;QACpCzG;OACD,EAAE;QAAEyE,aAAa,EAAE;MAAI,CAAE,CAAC;MAE3B8B,eAAe,CAACjG,IAAI,CAACuE,WAAW,CAACxB,cAAc,CAAC;MAChDmD,SAAS,CAAClG,IAAI,CAACuE,WAAW,CAAC;MAC3B1B,OAAO,CAAC7C,IAAI,CAACuE,WAAW,CAAC;MACzBgB,aAAa,CAACC,GAAG,CAAC9F,KAAK,CAAC0D,QAAQ,EAAEmB,WAAW,CAACxB,cAAc,CAAC;IAC/D;IAEA,MAAM0D,MAAM,GAAG,OAAOhK,KAAK,CAACgI,GAAG,CAACiB,OAAO,EAAEnG,OAAO,CAAC;IACjD,OAAO/C,MAAM,CAACkK,UAAU,CAACD,MAAM,EAAEP,SAAS,CAAC;IAE3C,OAAOA,SAAS;EAClB,CAAC,EAAE7J,MAAM,CAACsK,MAAM,CAAC;EAEjB,MAAMC,oBAAoB,GAAG,OAAOhK,SAAS,CAAC8F,IAAI,CAAC,CAAC,CAAC;EAErD,OAAOtE,OAAO,CAAC2D,EAAE,CAAC;IAChBjD,KAAK,EAAEzC,MAAM,CAACiG,OAAO,CAACzD,QAAQ,CAAC;IAC/BsB,6BAA6B,EAAEA,CAACJ,SAAS,EAAEK,gBAAgB,KACzD/D,MAAM,CAACyI,IAAI,CAAC,MAAK;MACf,MAAM+B,QAAQ,GAAGxB,mBAAmB,CAACZ,GAAG,CAAC1E,SAAS,CAAC;MACnD,IAAI8G,QAAQ,EAAE,OAAOA,QAAQ;MAC7BxB,mBAAmB,CAACG,GAAG,CAACzF,SAAS,EAAEK,gBAAgB,CAAC;MACpD,OAAOA,gBAAgB;IACzB,CAAC,CAAC;IACJd,YAAY,EAAEA,CAACC,OAAO,EAAEG,KAAK,KAC3BrD,MAAM,CAACyI,IAAI,CAAC,MAAK;MACf,MAAMjC,OAAO,GAAG4C,aAAa,CAAClG,OAAO,CAAC;MACtC,OAAOsD,OAAO,CAACC,MAAM,CAAEgE,CAAC,IAAK9J,KAAK,CAACoC,KAAK,CAAC0H,CAAC,CAACpH,KAAK,EAAEA,KAAK,CAAC,IAAI,CAAC,CAAC,CAACmC,GAAG,CAAEiF,CAAC,IAAKA,CAAC,CAACpH,KAAK,CAAC;IACpF,CAAC,CAAC;IACJO,KAAK;IACLuB,OAAO,EAAEnF,MAAM,CAAC2C,UAAU,CAAC,WAAU;MAAEO,OAAO;MAAEmC,aAAa;MAAEC;IAAU,CAAE;MACzE,MAAM8E,MAAM,GAAG,OAAOhK,KAAK,CAACgI,GAAG,CAACiB,OAAO,EAAEnG,OAAO,CAAC;MACjD,MAAMwH,YAAY,GAAG,OAAOvK,MAAM,CAACwK,SAAS,CAACP,MAAM,CAAC;MAEpD,MAAMQ,OAAO,GAAG,OAAO7C,cAAc,CAAC;QACpCR,aAAa,EAAEtE,YAAY,CAACmG,aAAa,CAAClG,OAAO,CAAC,EAAEmC,aAAa,CAAC;QAClEC;OACD,CAAC;MACF,MAAMuF,YAAY,GAAGD,OAAO,CAAC/D,MAAM,GAAG,CAAC,GAAG+D,OAAO,CAACA,OAAO,CAAC/D,MAAM,GAAG,CAAC,CAAC,CAACH,cAAc,GAAGrB,aAAa,GAAG,CAAC;MAExG,OAAO7E,MAAM,CAACsK,SAAS,CAACF,OAAO,CAAC,CAACxG,IAAI,CACnC5D,MAAM,CAACuK,MAAM,CACXvK,MAAM,CAACwK,gBAAgB,CAACN,YAAY,CAAC,CAACtG,IAAI,CACxC5D,MAAM,CAACiG,MAAM,CAAEpD,KAAK,IAAKA,KAAK,CAACqD,cAAc,GAAGmE,YAAY,CAAC,CAC9D,CACF,CACF;IACH,CAAC,EAAErK,MAAM,CAACoB,MAAM,CAAC;IACjBiC,eAAe,EAAE0G,oBAAoB,CAACU,WAAW,CAAC,CAAC;GACpD,CAAC;AACJ,CAAC,CAAC;AAEF;;;;AAIA,OAAO,MAAMC,kBAAkB,gBAAyBjL,KAAK,CAACuI,MAAM,CAACzG,OAAO,CAAC,CAAC6G,iBAAiB,CAAC;AAEhG;;;;AAIA,OAAO,MAAMvC,IAAI,gBAAGrG,MAAM,CAAC6B,GAAG,CAAC,aAAS;EACtC,MAAMC,OAAO,GAAG,OAAOC,OAAO;EAC9B,MAAMO,OAAO,GAAG,OAAOC,iBAAiB;EAExC,OAAOlB,yBAAyB,CAACqE,EAAE,CAAC;IAClCnE,SAASA,CAAgCC,MAAuC;MAC9E,MAAM2J,MAAM,GAAG,IAAIrC,GAAG,EAA8B;MACpD,KAAK,MAAMsC,KAAK,IAAI5J,MAAM,CAAC6J,MAAoE,EAAE;QAC/F,KAAK,MAAM,CAACC,GAAG,EAAEnE,KAAK,CAAC,IAAIoE,MAAM,CAAC1I,OAAO,CAACuI,KAAK,CAACD,MAAM,CAAC,EAAE;UACvDA,MAAM,CAAChC,GAAG,CAACmC,GAAG,EAAEnE,KAAK,CAAC;QACxB;MACF;MACA,OAAOnH,MAAM,CAAC2C,UAAU,CAAC,WAAUC,OAIlC;QACC,MAAMc,SAAS,GAAG6C,gCAAgC,CAAC3D,OAAO,CAACM,OAAO,CAAC;QACnE,MAAMsI,WAAW,GAAGL,MAAM,CAAC/C,GAAG,CAACxF,OAAO,CAACuE,KAAK,CAAC;QAC7C,IAAIqE,WAAW,KAAKjH,SAAS,EAAE;UAC7B,OAAO,OAAOvE,MAAM,CAACmK,GAAG,CAAC,gCAAgCvH,OAAO,CAACuE,KAAK,GAAG,CAAC;QAC5E;QAEA,MAAM9D,KAAK,GAAG,IAAI3C,YAAY,CAACC,KAAK,CAAC;UACnC8K,EAAE,EAAE7K,iBAAiB,EAAE;UACvBuG,KAAK,EAAEvE,OAAO,CAACuE,KAAK;UACpBC,UAAU,EAAEoE,WAAW,CAACpE,UAAU,CAACxE,OAAO,CAAC8I,OAAO,CAAC;UACnDA,OAAO,EAAE,OAAOpL,MAAM,CAACqL,mBAAmB,CAACH,WAAW,CAACI,cAAc,CAAC,CAAChJ,OAAO,CAAC8I,OAAO,CAAC,CAACtH,IAAI,CAC1FpE,MAAM,CAACqE,QAAQ,CAAE3C,CAAC,IAChB,IAAIiE,wBAAwB,CAAC;YAC3BI,MAAM,EAAE,oBAAoB;YAC5BrC,SAAS,EAAEA,SAAS;YACpBR,OAAO,EAAEN,OAAO,CAACM,OAAO;YACxBuB,OAAO,EAAE;WACV,CAAC,CACH;SAEJ,EAAE;UAAEqD,aAAa,EAAE;QAAI,CAAE,CAAC;QAE3B,MAAM+D,MAAM,GAAG,OAAOvJ,OAAO,CAAC;UAC5BoB,SAAS;UACTR,OAAO,EAAEN,OAAO,CAACM,OAAO;UACxBG,KAAK;UACLE,SAAS,EAAE;SACZ,CAAC,CAACa,IAAI,CACLpE,MAAM,CAACgF,cAAc,CAACjE,QAAQ,CAACkE,QAAQ,EAAEC,kBAAkB,CAACxB,SAAS,CAAC,CAAC,CACxE;QAED,OAAO5B,OAAO,CAAC8B,KAAK,CAAChB,OAAO,CAACM,OAAO,EAAE,CAACG,KAAK,CAAC,CAAC;QAE9C,OAAOwI,MAAM;MACf,CAAC,EAAE/J,OAAO,CAAC+B,eAAe,CAAQ;IACpC;GACD,CAAC;AACJ,CAAC,CAAC;AAEF;;;;AAIA,OAAO,MAAMiI,WAAW,gBAIpB7L,KAAK,CAACuI,MAAM,CAACnH,yBAAyB,EAAEgF,IAAI,CAAC,CAACjC,IAAI,cACpDnE,KAAK,CAAC8L,YAAY,CAAChL,QAAQ,CAACiL,aAAa,CAAC,CAC3C;AAED;;;;AAIA,OAAO,MAAMC,KAAK,GAAGA,CACnBC,OAAwC,EACxCD,KAAsD,KAUtDxL,SAAS,CAACwL,KAAK,CAAC/K,kBAAkB,CAAC,CAACkD,IAAI,CACtCnE,KAAK,CAACkM,OAAO,CAACxK,gBAAgB,CAAC,EAC/B1B,KAAK,CAACkM,OAAO,CAACF,KAAK,CAAC,EACpBhM,KAAK,CAACkM,OAAO,CAACL,WAAW,CAAC,CAC3B;AAEH;;;;AAIA,OAAO,MAAMM,gBAAgB,GAAGA,CAC9BF,OAAwC,EACxCD,KAAsD,KAStDtK,gBAAgB,CAACyC,IAAI,CACnBnE,KAAK,CAACoM,KAAK,CAACJ,KAAK,CAAC,EAClBhM,KAAK,CAACkM,OAAO,CAACL,WAAW,CAAC,CAC3B;AAEH,MAAMvJ,iBAAiB,gBAAGvC,MAAM,CAAC6B,GAAG,CAAC,aAAS;EAC5C,MAAMO,QAAQ,GAAG,OAAOrB,QAAQ,CAACsB,QAAQ;EAEzC,OAAOrC,MAAM,CAAC2C,UAAU,CACtB,WAAUC,OAMT;IACC,MAAMN,OAAO,GAAGF,QAAQ,CAACkK,QAAQ,CAAClE,GAAG,CAACxF,OAAO,CAACS,KAAK,CAAC8D,KAAK,CAAC;IAC1D,IAAI7E,OAAO,KAAKiC,SAAS,EAAE;MACzB,OAAO,OAAOvE,MAAM,CAACuM,QAAQ,CAAC,iCAAiC3J,OAAO,CAACS,KAAK,CAAC8D,KAAK,GAAG,CAAC;IACxF;IAEA,MAAMqF,aAAa,GAAGlM,MAAM,CAACmM,mBAAmB,CAACnK,OAAO,CAAC6E,KAAK,CAACyE,cAAc,CAAC;IAC9E,MAAMc,gBAAgB,GAAgE,EAAE;IAExF,KAAK,MAAMC,QAAQ,IAAI/J,OAAO,CAACW,SAAS,EAAE;MACxCmJ,gBAAgB,CAAC/I,IAAI,CAAC;QACpBN,KAAK,EAAEsJ,QAAQ;QACfjB,OAAO,EAAE,OAAOc,aAAa,CAACG,QAAQ,CAACjB,OAAO,CAAC,CAACtH,IAAI,CAClDpE,MAAM,CAAC4M,aAAa,CAAEC,KAAK,IAAK/M,OAAO,CAACuM,KAAK,CAAC/J,OAAO,CAACwK,OAAO,EAAED,KAAK,CAAC,CAAC;OAEzE,CAAC;IACJ;IAEA,MAAME,aAAa,GAAG,SAAS,IAAInK,OAAO,GACtC5C,MAAM,CAACiG,OAAO,CAACrD,OAAO,CAAC8I,OAAO,CAAC,GAC/Bc,aAAa,CAAC5J,OAAO,CAACS,KAAK,CAACqI,OAAO,CAAC;IAExC,OAAO,OAAOqB,aAAa,CAAC3I,IAAI,CAC9BpE,MAAM,CAACqE,QAAQ,CAAE3C,CAAC,IAChB,IAAIiE,wBAAwB,CAAC;MAC3BI,MAAM,EAAE,oBAAoB;MAC5BrC,SAAS,EAAEd,OAAO,CAACc,SAAS;MAC5BR,OAAO,EAAEN,OAAO,CAACM,OAAO;MACxBuB,OAAO,EAAE;KACV,CAAC,CACH,EACDzE,MAAM,CAACgN,OAAO,CAAEtB,OAAO,IACrBpJ,OAAO,CAACA,OAAO,CAAC;MACdY,OAAO,EAAEN,OAAO,CAACM,OAAO;MACxBwI,OAAO;MACPrI,KAAK,EAAET,OAAO,CAACS,KAAK;MACpBE,SAAS,EAAEmJ;KACZ,CAAC,CACH,EACD1M,MAAM,CAAC4M,aAAa,CAAEC,KAAK,IAAK/M,OAAO,CAACuM,KAAK,CAAC/J,OAAO,CAACwK,OAAO,EAAED,KAAK,CAAC,CAAC,CACrB;EACrD,CAAC,CACF;AACH,CAAC,CAAC","ignoreList":[]}
@@ -0,0 +1,117 @@
1
+ import * as Effect from "../../Effect.ts";
2
+ /**
3
+ * @since 4.0.0
4
+ * @category constants
5
+ */
6
+ export declare const AuthPayloadContext = "eventlog-auth-v1";
7
+ /**
8
+ * @since 4.0.0
9
+ * @category constants
10
+ */
11
+ export declare const Ed25519PublicKeyLength = 32;
12
+ /**
13
+ * @since 4.0.0
14
+ * @category constants
15
+ */
16
+ export declare const Ed25519SignatureLength = 64;
17
+ /**
18
+ * @since 4.0.0
19
+ * @category constants
20
+ */
21
+ export declare const SessionAuthChallengeLength = 32;
22
+ /**
23
+ * @since 4.0.0
24
+ * @category constants
25
+ */
26
+ export declare const SessionAuthChallengeTimeToLiveMillis = 30000;
27
+ /**
28
+ * @since 4.0.0
29
+ * @category model
30
+ */
31
+ export interface SessionAuthPayload {
32
+ readonly remoteId: string | Uint8Array;
33
+ readonly challenge: Uint8Array;
34
+ readonly publicKey: string;
35
+ readonly signingPublicKey: Uint8Array;
36
+ }
37
+ declare const EventLogSessionAuthError_base: new <A extends Record<string, any> = {}>(args: import("../../Types.ts").VoidIfEmpty<{ readonly [P in keyof A as P extends "_tag" ? never : P]: A[P]; }>) => import("../../Cause.ts").YieldableError & {
38
+ readonly _tag: "EventLogSessionAuthError";
39
+ } & Readonly<A>;
40
+ /**
41
+ * @since 4.0.0
42
+ * @category errors
43
+ */
44
+ export declare class EventLogSessionAuthError extends EventLogSessionAuthError_base<{
45
+ readonly reason: "InvalidPayload" | "InvalidContext" | "InvalidAlgorithm" | "InvalidSigningPublicKeyLength" | "InvalidSignatureLength" | "InvalidSigningPrivateKey" | "CryptoUnavailable" | "CryptoFailure";
46
+ readonly message: string;
47
+ readonly cause?: unknown;
48
+ }> {
49
+ }
50
+ /**
51
+ * Canonical payload format uses ordered big-endian length-prefixed fields:
52
+ *
53
+ * 1. context (fixed: eventlog-auth-v1)
54
+ * 2. remoteId
55
+ * 3. challenge bytes
56
+ * 4. publicKey
57
+ * 5. signingPublicKey bytes
58
+ *
59
+ * @since 4.0.0
60
+ * @category encoding
61
+ */
62
+ export declare const encodeSessionAuthPayload: (payload: SessionAuthPayload) => Effect.Effect<Uint8Array<ArrayBuffer>, EventLogSessionAuthError, never>;
63
+ /**
64
+ * @since 4.0.0
65
+ * @category encoding
66
+ */
67
+ export declare const decodeSessionAuthPayload: (payload: Uint8Array<ArrayBufferLike>) => Effect.Effect<SessionAuthPayload, EventLogSessionAuthError, never>;
68
+ /**
69
+ * @since 4.0.0
70
+ * @category signing
71
+ */
72
+ export declare const signSessionAuthPayloadBytes: (options: {
73
+ readonly payload: Uint8Array;
74
+ readonly signingPrivateKey: Uint8Array;
75
+ }) => Effect.Effect<Uint8Array<ArrayBuffer>, EventLogSessionAuthError, never>;
76
+ /**
77
+ * @since 4.0.0
78
+ * @category verification
79
+ */
80
+ export declare const verifySessionAuthPayloadBytes: (options: {
81
+ readonly payload: Uint8Array;
82
+ readonly signingPublicKey: Uint8Array;
83
+ readonly signature: Uint8Array;
84
+ }) => Effect.Effect<boolean, EventLogSessionAuthError, never>;
85
+ /**
86
+ * @since 4.0.0
87
+ * @category signing
88
+ */
89
+ export declare const signSessionAuthPayload: (options: SessionAuthPayload & {
90
+ readonly signingPrivateKey: Uint8Array;
91
+ }) => Effect.Effect<Uint8Array<ArrayBuffer>, EventLogSessionAuthError, never>;
92
+ /**
93
+ * @since 4.0.0
94
+ * @category verification
95
+ */
96
+ export declare const verifySessionAuthPayload: (options: SessionAuthPayload & {
97
+ readonly signature: Uint8Array;
98
+ }) => Effect.Effect<boolean, EventLogSessionAuthError, never>;
99
+ /**
100
+ * @since 4.0.0
101
+ * @category challenge
102
+ */
103
+ export declare const makeSessionAuthChallenge: Effect.Effect<Uint8Array<ArrayBuffer>, EventLogSessionAuthError>;
104
+ /**
105
+ * @since 4.0.0
106
+ * @category verification
107
+ */
108
+ export declare const verifySessionAuthenticateRequest: (options: {
109
+ readonly remoteId: string | Uint8Array;
110
+ readonly challenge: Uint8Array;
111
+ readonly publicKey: string;
112
+ readonly signingPublicKey: Uint8Array;
113
+ readonly signature: Uint8Array;
114
+ readonly algorithm: string;
115
+ }) => Effect.Effect<boolean, EventLogSessionAuthError, never>;
116
+ export {};
117
+ //# sourceMappingURL=EventLogSessionAuth.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"EventLogSessionAuth.d.ts","sourceRoot":"","sources":["../../../src/unstable/eventlog/EventLogSessionAuth.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,MAAM,MAAM,iBAAiB,CAAA;AAOzC;;;GAGG;AACH,eAAO,MAAM,kBAAkB,qBAAqB,CAAA;AAEpD;;;GAGG;AACH,eAAO,MAAM,sBAAsB,KAAK,CAAA;AAExC;;;GAGG;AACH,eAAO,MAAM,sBAAsB,KAAK,CAAA;AAExC;;;GAGG;AACH,eAAO,MAAM,0BAA0B,KAAK,CAAA;AAE5C;;;GAGG;AACH,eAAO,MAAM,oCAAoC,QAAS,CAAA;AAE1D;;;GAGG;AACH,MAAM,WAAW,kBAAkB;IACjC,QAAQ,CAAC,QAAQ,EAAE,MAAM,GAAG,UAAU,CAAA;IACtC,QAAQ,CAAC,SAAS,EAAE,UAAU,CAAA;IAC9B,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAA;IAC1B,QAAQ,CAAC,gBAAgB,EAAE,UAAU,CAAA;CACtC;;;;AAED;;;GAGG;AACH,qBAAa,wBAAyB,SAAQ,8BAA6C;IACzF,QAAQ,CAAC,MAAM,EACX,gBAAgB,GAChB,gBAAgB,GAChB,kBAAkB,GAClB,+BAA+B,GAC/B,wBAAwB,GACxB,0BAA0B,GAC1B,mBAAmB,GACnB,eAAe,CAAA;IACnB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAA;IACxB,QAAQ,CAAC,KAAK,CAAC,EAAE,OAAO,CAAA;CACzB,CAAC;CAAG;AA2IL;;;;;;;;;;;GAWG;AACH,eAAO,MAAM,wBAAwB,0GAyBnC,CAAA;AAEF;;;GAGG;AACH,eAAO,MAAM,wBAAwB,8GAgCpC,CAAA;AAED;;;GAGG;AACH,eAAO,MAAM,2BAA2B;sBACpB,UAAU;gCACA,UAAU;6EAgCtC,CAAA;AAEF;;;GAGG;AACH,eAAO,MAAM,6BAA6B;sBACtB,UAAU;+BACD,UAAU;wBACjB,UAAU;6DA0B9B,CAAA;AAEF;;;GAGG;AACH,eAAO,MAAM,sBAAsB,GACjC,SAAS,kBAAkB,GAAG;IAC5B,QAAQ,CAAC,iBAAiB,EAAE,UAAU,CAAA;CACvC,4EASA,CAAA;AAEH;;;GAGG;AACH,eAAO,MAAM,wBAAwB,GACnC,SAAS,kBAAkB,GAAG;IAC5B,QAAQ,CAAC,SAAS,EAAE,UAAU,CAAA;CAC/B,4DAUA,CAAA;AAEH;;;GAGG;AACH,eAAO,MAAM,wBAAwB,EAAE,MAAM,CAAC,MAAM,CAClD,UAAU,CAAC,WAAW,CAAC,EACvB,wBAAwB,CAMxB,CAAA;AAEF;;;GAGG;AACH,eAAO,MAAM,gCAAgC;uBACxB,MAAM,GAAG,UAAU;wBAClB,UAAU;wBACV,MAAM;+BACC,UAAU;wBACjB,UAAU;wBACV,MAAM;6DAgB1B,CAAA"}