effect 4.0.0-beta.44 → 4.0.0-beta.45
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.
- package/dist/Equal.d.ts.map +1 -1
- package/dist/Equal.js +16 -0
- package/dist/Equal.js.map +1 -1
- package/dist/Hash.js +1 -1
- package/dist/Hash.js.map +1 -1
- package/dist/Semaphore.d.ts +1 -1
- package/dist/Semaphore.d.ts.map +1 -1
- package/dist/Semaphore.js +1 -3
- package/dist/Semaphore.js.map +1 -1
- package/dist/unstable/ai/McpServer.d.ts.map +1 -1
- package/dist/unstable/ai/McpServer.js +24 -21
- package/dist/unstable/ai/McpServer.js.map +1 -1
- package/dist/unstable/eventlog/Event.d.ts +0 -6
- package/dist/unstable/eventlog/Event.d.ts.map +1 -1
- package/dist/unstable/eventlog/Event.js +0 -5
- package/dist/unstable/eventlog/Event.js.map +1 -1
- package/dist/unstable/eventlog/EventGroup.d.ts +0 -2
- package/dist/unstable/eventlog/EventGroup.d.ts.map +1 -1
- package/dist/unstable/eventlog/EventGroup.js +0 -2
- package/dist/unstable/eventlog/EventGroup.js.map +1 -1
- package/dist/unstable/eventlog/EventJournal.d.ts +22 -5
- package/dist/unstable/eventlog/EventJournal.d.ts.map +1 -1
- package/dist/unstable/eventlog/EventJournal.js +126 -67
- package/dist/unstable/eventlog/EventJournal.js.map +1 -1
- package/dist/unstable/eventlog/EventLog.d.ts +88 -34
- package/dist/unstable/eventlog/EventLog.d.ts.map +1 -1
- package/dist/unstable/eventlog/EventLog.js +215 -141
- package/dist/unstable/eventlog/EventLog.js.map +1 -1
- package/dist/unstable/eventlog/EventLogEncryption.d.ts +9 -7
- package/dist/unstable/eventlog/EventLogEncryption.d.ts.map +1 -1
- package/dist/unstable/eventlog/EventLogEncryption.js +13 -15
- package/dist/unstable/eventlog/EventLogEncryption.js.map +1 -1
- package/dist/unstable/eventlog/EventLogMessage.d.ts +228 -0
- package/dist/unstable/eventlog/EventLogMessage.d.ts.map +1 -0
- package/dist/unstable/eventlog/EventLogMessage.js +214 -0
- package/dist/unstable/eventlog/EventLogMessage.js.map +1 -0
- package/dist/unstable/eventlog/EventLogRemote.d.ts +109 -194
- package/dist/unstable/eventlog/EventLogRemote.d.ts.map +1 -1
- package/dist/unstable/eventlog/EventLogRemote.js +165 -320
- package/dist/unstable/eventlog/EventLogRemote.js.map +1 -1
- package/dist/unstable/eventlog/EventLogServer.d.ts +25 -47
- package/dist/unstable/eventlog/EventLogServer.d.ts.map +1 -1
- package/dist/unstable/eventlog/EventLogServer.js +127 -198
- package/dist/unstable/eventlog/EventLogServer.js.map +1 -1
- package/dist/unstable/eventlog/EventLogServerEncrypted.d.ts +60 -0
- package/dist/unstable/eventlog/EventLogServerEncrypted.d.ts.map +1 -0
- package/dist/unstable/eventlog/EventLogServerEncrypted.js +166 -0
- package/dist/unstable/eventlog/EventLogServerEncrypted.js.map +1 -0
- package/dist/unstable/eventlog/EventLogServerUnencrypted.d.ts +183 -0
- package/dist/unstable/eventlog/EventLogServerUnencrypted.d.ts.map +1 -0
- package/dist/unstable/eventlog/EventLogServerUnencrypted.js +461 -0
- package/dist/unstable/eventlog/EventLogServerUnencrypted.js.map +1 -0
- package/dist/unstable/eventlog/EventLogSessionAuth.d.ts +117 -0
- package/dist/unstable/eventlog/EventLogSessionAuth.d.ts.map +1 -0
- package/dist/unstable/eventlog/EventLogSessionAuth.js +284 -0
- package/dist/unstable/eventlog/EventLogSessionAuth.js.map +1 -0
- package/dist/unstable/eventlog/{SqlEventLogJournal.d.ts → SqlEventJournal.d.ts} +2 -2
- package/dist/unstable/eventlog/SqlEventJournal.d.ts.map +1 -0
- package/dist/unstable/eventlog/{SqlEventLogJournal.js → SqlEventJournal.js} +20 -14
- package/dist/unstable/eventlog/SqlEventJournal.js.map +1 -0
- package/dist/unstable/eventlog/{SqlEventLogServer.d.ts → SqlEventLogServerEncrypted.d.ts} +5 -5
- package/dist/unstable/eventlog/SqlEventLogServerEncrypted.d.ts.map +1 -0
- package/dist/unstable/eventlog/{SqlEventLogServer.js → SqlEventLogServerEncrypted.js} +65 -24
- package/dist/unstable/eventlog/SqlEventLogServerEncrypted.js.map +1 -0
- package/dist/unstable/eventlog/SqlEventLogServerUnencrypted.d.ts +25 -0
- package/dist/unstable/eventlog/SqlEventLogServerUnencrypted.d.ts.map +1 -0
- package/dist/unstable/eventlog/SqlEventLogServerUnencrypted.js +354 -0
- package/dist/unstable/eventlog/SqlEventLogServerUnencrypted.js.map +1 -0
- package/dist/unstable/eventlog/index.d.ts +22 -2
- package/dist/unstable/eventlog/index.d.ts.map +1 -1
- package/dist/unstable/eventlog/index.js +22 -2
- package/dist/unstable/eventlog/index.js.map +1 -1
- package/dist/unstable/eventlog/internal/identityRootSecretDerivation.d.ts +2 -0
- package/dist/unstable/eventlog/internal/identityRootSecretDerivation.d.ts.map +1 -0
- package/dist/unstable/eventlog/internal/identityRootSecretDerivation.js +89 -0
- package/dist/unstable/eventlog/internal/identityRootSecretDerivation.js.map +1 -0
- package/dist/unstable/reactivity/AtomHttpApi.d.ts +1 -2
- package/dist/unstable/reactivity/AtomHttpApi.d.ts.map +1 -1
- package/dist/unstable/reactivity/AtomHttpApi.js +2 -2
- package/dist/unstable/reactivity/AtomHttpApi.js.map +1 -1
- package/dist/unstable/reactivity/AtomRpc.d.ts +1 -2
- package/dist/unstable/reactivity/AtomRpc.d.ts.map +1 -1
- package/dist/unstable/reactivity/AtomRpc.js +3 -3
- package/dist/unstable/reactivity/AtomRpc.js.map +1 -1
- package/dist/unstable/rpc/Rpc.d.ts +25 -4
- package/dist/unstable/rpc/Rpc.d.ts.map +1 -1
- package/dist/unstable/rpc/Rpc.js +26 -0
- package/dist/unstable/rpc/Rpc.js.map +1 -1
- package/dist/unstable/rpc/RpcClient.d.ts +3 -13
- package/dist/unstable/rpc/RpcClient.d.ts.map +1 -1
- package/dist/unstable/rpc/RpcClient.js +47 -23
- package/dist/unstable/rpc/RpcClient.js.map +1 -1
- package/dist/unstable/rpc/RpcGroup.d.ts +1 -1
- package/dist/unstable/rpc/RpcGroup.d.ts.map +1 -1
- package/dist/unstable/rpc/RpcMiddleware.d.ts +2 -2
- package/dist/unstable/rpc/RpcMiddleware.d.ts.map +1 -1
- package/dist/unstable/rpc/RpcServer.d.ts.map +1 -1
- package/dist/unstable/rpc/RpcServer.js +3 -2
- package/dist/unstable/rpc/RpcServer.js.map +1 -1
- package/dist/unstable/rpc/Utils.d.ts +6 -0
- package/dist/unstable/rpc/Utils.d.ts.map +1 -1
- package/dist/unstable/rpc/Utils.js +44 -0
- package/dist/unstable/rpc/Utils.js.map +1 -1
- package/dist/unstable/schema/Model.d.ts +2 -2
- package/dist/unstable/schema/Model.d.ts.map +1 -1
- package/dist/unstable/schema/Model.js +2 -4
- package/dist/unstable/schema/Model.js.map +1 -1
- package/dist/unstable/schema/VariantSchema.d.ts +1 -1
- package/dist/unstable/schema/VariantSchema.d.ts.map +1 -1
- package/dist/unstable/schema/VariantSchema.js +1 -12
- package/dist/unstable/schema/VariantSchema.js.map +1 -1
- package/dist/unstable/workers/Transferable.d.ts +1 -1
- package/dist/unstable/workers/Transferable.d.ts.map +1 -1
- package/dist/unstable/workers/Transferable.js +1 -1
- package/dist/unstable/workers/Transferable.js.map +1 -1
- package/package.json +1 -1
- package/src/Equal.ts +17 -0
- package/src/Hash.ts +2 -2
- package/src/Semaphore.ts +2 -4
- package/src/unstable/ai/McpServer.ts +24 -22
- package/src/unstable/eventlog/Event.ts +0 -8
- package/src/unstable/eventlog/EventGroup.ts +0 -4
- package/src/unstable/eventlog/EventJournal.ts +144 -76
- package/src/unstable/eventlog/EventLog.ts +342 -221
- package/src/unstable/eventlog/EventLogEncryption.ts +16 -30
- package/src/unstable/eventlog/EventLogMessage.ts +277 -0
- package/src/unstable/eventlog/EventLogRemote.ts +261 -408
- package/src/unstable/eventlog/EventLogServer.ts +182 -274
- package/src/unstable/eventlog/EventLogServerEncrypted.ts +206 -0
- package/src/unstable/eventlog/EventLogServerUnencrypted.ts +749 -0
- package/src/unstable/eventlog/EventLogSessionAuth.ts +437 -0
- package/src/unstable/eventlog/{SqlEventLogJournal.ts → SqlEventJournal.ts} +26 -18
- package/src/unstable/eventlog/{SqlEventLogServer.ts → SqlEventLogServerEncrypted.ts} +102 -40
- package/src/unstable/eventlog/SqlEventLogServerUnencrypted.ts +500 -0
- package/src/unstable/eventlog/index.ts +27 -2
- package/src/unstable/eventlog/internal/identityRootSecretDerivation.ts +153 -0
- package/src/unstable/reactivity/AtomHttpApi.ts +23 -8
- package/src/unstable/reactivity/AtomRpc.ts +16 -5
- package/src/unstable/rpc/Rpc.ts +42 -4
- package/src/unstable/rpc/RpcClient.ts +59 -24
- package/src/unstable/rpc/RpcGroup.ts +1 -1
- package/src/unstable/rpc/RpcMiddleware.ts +2 -2
- package/src/unstable/rpc/RpcServer.ts +5 -3
- package/src/unstable/rpc/Utils.ts +59 -0
- package/src/unstable/schema/Model.ts +4 -6
- package/src/unstable/schema/VariantSchema.ts +4 -17
- package/src/unstable/workers/Transferable.ts +9 -11
- package/dist/unstable/eventlog/SqlEventLogJournal.d.ts.map +0 -1
- package/dist/unstable/eventlog/SqlEventLogJournal.js.map +0 -1
- package/dist/unstable/eventlog/SqlEventLogServer.d.ts.map +0 -1
- 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;
|
|
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,GAAGrB,aAAa,CAAC;AAEjE,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;MAEpG,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"}
|