@powerhousedao/reactor 6.0.0-dev.42 → 6.0.0-dev.44
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/src/cache/kysely-operation-index.d.ts +2 -1
- package/dist/src/cache/kysely-operation-index.d.ts.map +1 -1
- package/dist/src/cache/kysely-operation-index.js +7 -2
- package/dist/src/cache/kysely-operation-index.js.map +1 -1
- package/dist/src/cache/operation-index-types.d.ts +4 -2
- package/dist/src/cache/operation-index-types.d.ts.map +1 -1
- package/dist/src/cache/operation-index-types.js.map +1 -1
- package/dist/src/core/types.d.ts +1 -1
- package/dist/src/core/types.d.ts.map +1 -1
- package/dist/src/events/types.d.ts +1 -1
- package/dist/src/events/types.d.ts.map +1 -1
- package/dist/src/executor/document-action-handler.d.ts +1 -1
- package/dist/src/executor/document-action-handler.d.ts.map +1 -1
- package/dist/src/executor/document-action-handler.js +16 -11
- package/dist/src/executor/document-action-handler.js.map +1 -1
- package/dist/src/executor/simple-job-executor.d.ts.map +1 -1
- package/dist/src/executor/simple-job-executor.js +32 -19
- package/dist/src/executor/simple-job-executor.js.map +1 -1
- package/dist/src/executor/types.d.ts +1 -1
- package/dist/src/executor/types.d.ts.map +1 -1
- package/dist/src/executor/util.d.ts +1 -1
- package/dist/src/executor/util.d.ts.map +1 -1
- package/dist/src/executor/util.js.map +1 -1
- package/dist/src/index.d.ts +6 -7
- package/dist/src/index.d.ts.map +1 -1
- package/dist/src/index.js +2 -3
- package/dist/src/index.js.map +1 -1
- package/dist/src/processors/index.d.ts +1 -1
- package/dist/src/processors/index.d.ts.map +1 -1
- package/dist/src/processors/processor-manager.d.ts +2 -2
- package/dist/src/processors/processor-manager.d.ts.map +1 -1
- package/dist/src/processors/processor-manager.js.map +1 -1
- package/dist/src/processors/relational/types.d.ts +1 -26
- package/dist/src/processors/relational/types.d.ts.map +1 -1
- package/dist/src/processors/relational/types.js +1 -1
- package/dist/src/processors/relational/types.js.map +1 -1
- package/dist/src/processors/relational/utils.d.ts +1 -28
- package/dist/src/processors/relational/utils.d.ts.map +1 -1
- package/dist/src/processors/relational/utils.js +1 -66
- package/dist/src/processors/relational/utils.js.map +1 -1
- package/dist/src/processors/utils.d.ts +2 -2
- package/dist/src/processors/utils.d.ts.map +1 -1
- package/dist/src/read-models/base-read-model.d.ts +1 -1
- package/dist/src/read-models/base-read-model.d.ts.map +1 -1
- package/dist/src/read-models/document-view.d.ts +2 -2
- package/dist/src/read-models/document-view.d.ts.map +1 -1
- package/dist/src/read-models/document-view.js.map +1 -1
- package/dist/src/read-models/interfaces.d.ts +1 -1
- package/dist/src/read-models/interfaces.d.ts.map +1 -1
- package/dist/src/storage/interfaces.d.ts +4 -14
- package/dist/src/storage/interfaces.d.ts.map +1 -1
- package/dist/src/storage/interfaces.js.map +1 -1
- package/dist/src/storage/kysely/document-indexer.d.ts +2 -1
- package/dist/src/storage/kysely/document-indexer.d.ts.map +1 -1
- package/dist/src/storage/kysely/document-indexer.js.map +1 -1
- package/dist/src/storage/kysely/store.d.ts +2 -2
- package/dist/src/storage/kysely/store.d.ts.map +1 -1
- package/dist/src/storage/kysely/store.js.map +1 -1
- package/dist/src/storage/kysely/sync-cursor-storage.d.ts +1 -1
- package/dist/src/storage/kysely/sync-cursor-storage.d.ts.map +1 -1
- package/dist/src/storage/kysely/sync-cursor-storage.js +6 -2
- package/dist/src/storage/kysely/sync-cursor-storage.js.map +1 -1
- package/dist/src/storage/kysely/types.d.ts +2 -0
- package/dist/src/storage/kysely/types.d.ts.map +1 -1
- package/dist/src/storage/migrations/011_add_cursor_type_column.d.ts +3 -0
- package/dist/src/storage/migrations/011_add_cursor_type_column.d.ts.map +1 -0
- package/dist/src/storage/migrations/011_add_cursor_type_column.js +29 -0
- package/dist/src/storage/migrations/011_add_cursor_type_column.js.map +1 -0
- package/dist/src/storage/migrations/012_add_source_remote_column.d.ts +3 -0
- package/dist/src/storage/migrations/012_add_source_remote_column.d.ts.map +1 -0
- package/dist/src/storage/migrations/012_add_source_remote_column.js +7 -0
- package/dist/src/storage/migrations/012_add_source_remote_column.js.map +1 -0
- package/dist/src/storage/migrations/migrator.d.ts.map +1 -1
- package/dist/src/storage/migrations/migrator.js +4 -0
- package/dist/src/storage/migrations/migrator.js.map +1 -1
- package/dist/src/subs/subscription-notification-read-model.d.ts +2 -1
- package/dist/src/subs/subscription-notification-read-model.d.ts.map +1 -1
- package/dist/src/subs/subscription-notification-read-model.js.map +1 -1
- package/dist/src/sync/batch-aggregator.d.ts +25 -0
- package/dist/src/sync/batch-aggregator.d.ts.map +1 -0
- package/dist/src/sync/batch-aggregator.js +94 -0
- package/dist/src/sync/batch-aggregator.js.map +1 -0
- package/dist/src/sync/buffered-mailbox.d.ts +14 -8
- package/dist/src/sync/buffered-mailbox.d.ts.map +1 -1
- package/dist/src/sync/buffered-mailbox.js +34 -6
- package/dist/src/sync/buffered-mailbox.js.map +1 -1
- package/dist/src/sync/channels/composite-channel-factory.d.ts +0 -6
- package/dist/src/sync/channels/composite-channel-factory.d.ts.map +1 -1
- package/dist/src/sync/channels/composite-channel-factory.js +4 -10
- package/dist/src/sync/channels/composite-channel-factory.js.map +1 -1
- package/dist/src/sync/channels/gql-channel-factory.js +2 -2
- package/dist/src/sync/channels/gql-channel-factory.js.map +1 -1
- package/dist/src/sync/channels/{gql-channel.d.ts → gql-req-channel.d.ts} +8 -27
- package/dist/src/sync/channels/gql-req-channel.d.ts.map +1 -0
- package/dist/src/sync/channels/{gql-channel.js → gql-req-channel.js} +142 -182
- package/dist/src/sync/channels/gql-req-channel.js.map +1 -0
- package/dist/src/sync/channels/gql-res-channel.d.ts +25 -0
- package/dist/src/sync/channels/gql-res-channel.d.ts.map +1 -0
- package/dist/src/sync/channels/gql-res-channel.js +79 -0
- package/dist/src/sync/channels/gql-res-channel.js.map +1 -0
- package/dist/src/sync/channels/index.d.ts +5 -5
- package/dist/src/sync/channels/index.d.ts.map +1 -1
- package/dist/src/sync/channels/index.js +5 -5
- package/dist/src/sync/channels/index.js.map +1 -1
- package/dist/src/sync/channels/utils.d.ts +15 -1
- package/dist/src/sync/channels/utils.d.ts.map +1 -1
- package/dist/src/sync/channels/utils.js +66 -2
- package/dist/src/sync/channels/utils.js.map +1 -1
- package/dist/src/sync/index.d.ts +6 -6
- package/dist/src/sync/index.d.ts.map +1 -1
- package/dist/src/sync/index.js +5 -5
- package/dist/src/sync/index.js.map +1 -1
- package/dist/src/sync/interfaces.d.ts +4 -18
- package/dist/src/sync/interfaces.d.ts.map +1 -1
- package/dist/src/sync/mailbox.d.ts +39 -18
- package/dist/src/sync/mailbox.d.ts.map +1 -1
- package/dist/src/sync/mailbox.js +50 -20
- package/dist/src/sync/mailbox.js.map +1 -1
- package/dist/src/sync/sync-manager.d.ts +5 -13
- package/dist/src/sync/sync-manager.d.ts.map +1 -1
- package/dist/src/sync/sync-manager.js +91 -275
- package/dist/src/sync/sync-manager.js.map +1 -1
- package/dist/src/sync/sync-operation.d.ts +1 -1
- package/dist/src/sync/sync-operation.d.ts.map +1 -1
- package/dist/src/sync/sync-operation.js +3 -0
- package/dist/src/sync/sync-operation.js.map +1 -1
- package/dist/src/sync/types.d.ts +2 -1
- package/dist/src/sync/types.d.ts.map +1 -1
- package/dist/src/sync/types.js.map +1 -1
- package/dist/src/sync/utils.d.ts +19 -3
- package/dist/src/sync/utils.d.ts.map +1 -1
- package/dist/src/sync/utils.js +120 -1
- package/dist/src/sync/utils.js.map +1 -1
- package/package.json +5 -4
- package/dist/src/processors/relational/relational-db-processor.d.ts +0 -47
- package/dist/src/processors/relational/relational-db-processor.d.ts.map +0 -1
- package/dist/src/processors/relational/relational-db-processor.js +0 -45
- package/dist/src/processors/relational/relational-db-processor.js.map +0 -1
- package/dist/src/processors/types.d.ts +0 -71
- package/dist/src/processors/types.d.ts.map +0 -1
- package/dist/src/processors/types.js +0 -2
- package/dist/src/processors/types.js.map +0 -1
- package/dist/src/sync/channels/gql-channel.d.ts.map +0 -1
- package/dist/src/sync/channels/gql-channel.js.map +0 -1
- package/dist/src/sync/channels/polling-channel.d.ts +0 -39
- package/dist/src/sync/channels/polling-channel.d.ts.map +0 -1
- package/dist/src/sync/channels/polling-channel.js +0 -72
- package/dist/src/sync/channels/polling-channel.js.map +0 -1
|
@@ -2,12 +2,12 @@ import { BufferedMailbox } from "../buffered-mailbox.js";
|
|
|
2
2
|
import { ChannelError } from "../errors.js";
|
|
3
3
|
import { Mailbox } from "../mailbox.js";
|
|
4
4
|
import { ChannelErrorSource } from "../types.js";
|
|
5
|
-
import { sortEnvelopesByFirstOperationTimestamp } from "../utils.js";
|
|
6
|
-
import { envelopesToSyncOperations } from "./utils.js";
|
|
5
|
+
import { sortEnvelopesByFirstOperationTimestamp, trimMailboxFromAckOrdinal, } from "../utils.js";
|
|
6
|
+
import { envelopesToSyncOperations, getLatestAppliedOrdinal, serializeEnvelope, } from "./utils.js";
|
|
7
7
|
/**
|
|
8
8
|
* GraphQL-based synchronization channel for network communication between reactors.
|
|
9
9
|
*/
|
|
10
|
-
export class
|
|
10
|
+
export class GqlRequestChannel {
|
|
11
11
|
logger;
|
|
12
12
|
inbox;
|
|
13
13
|
outbox;
|
|
@@ -23,6 +23,8 @@ export class GqlChannel {
|
|
|
23
23
|
failureCount;
|
|
24
24
|
lastSuccessUtcMs;
|
|
25
25
|
lastFailureUtcMs;
|
|
26
|
+
lastPersistedInboxOrdinal = 0;
|
|
27
|
+
lastPersistedOutboxOrdinal = 0;
|
|
26
28
|
constructor(logger, channelId, remoteName, cursorStorage, config, operationIndex, pollTimer) {
|
|
27
29
|
this.logger = logger;
|
|
28
30
|
this.channelId = channelId;
|
|
@@ -46,8 +48,56 @@ export class GqlChannel {
|
|
|
46
48
|
this.bufferedOutbox = new BufferedMailbox(500, 25);
|
|
47
49
|
this.outbox = this.bufferedOutbox;
|
|
48
50
|
this.deadLetter = new Mailbox();
|
|
51
|
+
// when sync ops are added to the outbox, push them to the remote
|
|
49
52
|
this.outbox.onAdded((syncOps) => {
|
|
50
|
-
this.
|
|
53
|
+
if (this.isShutdown) {
|
|
54
|
+
return;
|
|
55
|
+
}
|
|
56
|
+
this.pushSyncOperations(syncOps).catch((error) => {
|
|
57
|
+
const err = error instanceof Error ? error : new Error(String(error));
|
|
58
|
+
const channelError = new ChannelError(ChannelErrorSource.Outbox, err);
|
|
59
|
+
for (const syncOp of syncOps) {
|
|
60
|
+
syncOp.failed(channelError);
|
|
61
|
+
}
|
|
62
|
+
// move to dead letters
|
|
63
|
+
this.deadLetter.add(...syncOps);
|
|
64
|
+
this.outbox.remove(...syncOps);
|
|
65
|
+
});
|
|
66
|
+
});
|
|
67
|
+
// Instead of listening to syncops directly for cursor updates, we listen
|
|
68
|
+
// to the mailbox. This is for efficiency: many syncops may fire on a trim,
|
|
69
|
+
// but only one onRemoved callback will be fired for the batch.
|
|
70
|
+
this.outbox.onRemoved((syncOps) => {
|
|
71
|
+
const maxOrdinal = getLatestAppliedOrdinal(syncOps);
|
|
72
|
+
if (maxOrdinal > this.lastPersistedOutboxOrdinal) {
|
|
73
|
+
this.lastPersistedOutboxOrdinal = maxOrdinal;
|
|
74
|
+
this.cursorStorage
|
|
75
|
+
.upsert({
|
|
76
|
+
remoteName: this.remoteName,
|
|
77
|
+
cursorType: "outbox",
|
|
78
|
+
cursorOrdinal: maxOrdinal,
|
|
79
|
+
lastSyncedAtUtcMs: Date.now(),
|
|
80
|
+
})
|
|
81
|
+
.catch((error) => {
|
|
82
|
+
this.logger.error("Failed to update outbox cursor for @ChannelId! This means that future application runs may resend duplicate operations. This is recoverable (with deduplication protection), but not-optimal: @Error", this.channelId, error);
|
|
83
|
+
});
|
|
84
|
+
}
|
|
85
|
+
});
|
|
86
|
+
this.inbox.onRemoved((syncOps) => {
|
|
87
|
+
const maxOrdinal = getLatestAppliedOrdinal(syncOps);
|
|
88
|
+
if (maxOrdinal > this.lastPersistedInboxOrdinal) {
|
|
89
|
+
this.lastPersistedInboxOrdinal = maxOrdinal;
|
|
90
|
+
this.cursorStorage
|
|
91
|
+
.upsert({
|
|
92
|
+
remoteName: this.remoteName,
|
|
93
|
+
cursorType: "inbox",
|
|
94
|
+
cursorOrdinal: maxOrdinal,
|
|
95
|
+
lastSyncedAtUtcMs: Date.now(),
|
|
96
|
+
})
|
|
97
|
+
.catch((error) => {
|
|
98
|
+
this.logger.error("Failed to update inbox cursor for @ChannelId! This is unlikely to cause a problem, but not-optimal: @Error", this.channelId, error);
|
|
99
|
+
});
|
|
100
|
+
}
|
|
51
101
|
});
|
|
52
102
|
}
|
|
53
103
|
/**
|
|
@@ -57,12 +107,21 @@ export class GqlChannel {
|
|
|
57
107
|
this.bufferedOutbox.flush();
|
|
58
108
|
this.isShutdown = true;
|
|
59
109
|
this.pollTimer.stop();
|
|
110
|
+
return Promise.resolve();
|
|
60
111
|
}
|
|
61
112
|
/**
|
|
62
113
|
* Initializes the channel by registering it on the remote server and starting polling.
|
|
63
114
|
*/
|
|
64
115
|
async init() {
|
|
65
116
|
await this.touchRemoteChannel();
|
|
117
|
+
// get cursors -- these are the last acknowledged ordinals for the inbox and outbox
|
|
118
|
+
const cursors = await this.cursorStorage.list(this.remoteName);
|
|
119
|
+
const inboxOrdinal = cursors.find((c) => c.cursorType === "inbox")?.cursorOrdinal ?? 0;
|
|
120
|
+
const outboxOrdinal = cursors.find((c) => c.cursorType === "outbox")?.cursorOrdinal ?? 0;
|
|
121
|
+
this.inbox.init(inboxOrdinal);
|
|
122
|
+
this.outbox.init(outboxOrdinal);
|
|
123
|
+
this.lastPersistedInboxOrdinal = inboxOrdinal;
|
|
124
|
+
this.lastPersistedOutboxOrdinal = outboxOrdinal;
|
|
66
125
|
this.pollTimer.setDelegate(() => this.poll());
|
|
67
126
|
this.pollTimer.start();
|
|
68
127
|
}
|
|
@@ -76,58 +135,35 @@ export class GqlChannel {
|
|
|
76
135
|
if (this.failureCount >= this.config.maxFailures) {
|
|
77
136
|
return;
|
|
78
137
|
}
|
|
79
|
-
let
|
|
138
|
+
let response;
|
|
80
139
|
try {
|
|
81
|
-
|
|
140
|
+
response = await this.pollSyncEnvelopes(this.inbox.ackOrdinal, this.inbox.latestOrdinal);
|
|
82
141
|
}
|
|
83
142
|
catch (error) {
|
|
84
143
|
this.handlePollError(error);
|
|
85
144
|
return;
|
|
86
145
|
}
|
|
87
|
-
const
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
}
|
|
92
|
-
catch (error) {
|
|
93
|
-
this.handlePollError(error);
|
|
94
|
-
return;
|
|
146
|
+
const { envelopes, ackOrdinal } = response;
|
|
147
|
+
// first: trim outbox
|
|
148
|
+
if (ackOrdinal > 0) {
|
|
149
|
+
trimMailboxFromAckOrdinal(this.outbox, ackOrdinal);
|
|
95
150
|
}
|
|
96
|
-
|
|
151
|
+
// todo: Is this necessary? Outbox items should have been sorted when returned.
|
|
97
152
|
const sortedEnvelopes = sortEnvelopesByFirstOperationTimestamp(envelopes);
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
envelope.operations) {
|
|
106
|
-
const syncOps = envelopesToSyncOperations(envelope, this.remoteName);
|
|
107
|
-
for (const syncOp of syncOps) {
|
|
108
|
-
syncOp.transported();
|
|
109
|
-
this.inbox.add(syncOp);
|
|
110
|
-
}
|
|
153
|
+
// convert the envelopes to sync operations
|
|
154
|
+
const allSyncOps = [];
|
|
155
|
+
for (const envelope of sortedEnvelopes) {
|
|
156
|
+
if (envelope.type.toLowerCase() === "operations" && envelope.operations) {
|
|
157
|
+
const syncOps = envelopesToSyncOperations(envelope, this.remoteName);
|
|
158
|
+
for (const syncOp of syncOps) {
|
|
159
|
+
syncOp.transported();
|
|
111
160
|
}
|
|
112
|
-
|
|
113
|
-
envelope.cursor.cursorOrdinal > maxCursorOrdinal) {
|
|
114
|
-
maxCursorOrdinal = envelope.cursor.cursorOrdinal;
|
|
115
|
-
}
|
|
116
|
-
}
|
|
117
|
-
}
|
|
118
|
-
finally {
|
|
119
|
-
if (hasKeyedEnvelopes) {
|
|
120
|
-
this.inbox.resume();
|
|
161
|
+
allSyncOps.push(...syncOps);
|
|
121
162
|
}
|
|
122
163
|
}
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
}
|
|
127
|
-
catch (error) {
|
|
128
|
-
this.handlePollError(error);
|
|
129
|
-
return;
|
|
130
|
-
}
|
|
164
|
+
// add all of them to the inbox
|
|
165
|
+
if (allSyncOps.length > 0) {
|
|
166
|
+
this.inbox.add(...allSyncOps);
|
|
131
167
|
}
|
|
132
168
|
this.lastSuccessUtcMs = Date.now();
|
|
133
169
|
this.failureCount = 0;
|
|
@@ -171,74 +207,82 @@ export class GqlChannel {
|
|
|
171
207
|
/**
|
|
172
208
|
* Queries the remote GraphQL endpoint for sync envelopes.
|
|
173
209
|
*/
|
|
174
|
-
async pollSyncEnvelopes(
|
|
210
|
+
async pollSyncEnvelopes(ackOrdinal, latestOrdinal) {
|
|
175
211
|
const query = `
|
|
176
|
-
query PollSyncEnvelopes($channelId: String!, $
|
|
177
|
-
pollSyncEnvelopes(channelId: $channelId,
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
}
|
|
182
|
-
operations {
|
|
183
|
-
operation {
|
|
184
|
-
index
|
|
185
|
-
timestampUtcMs
|
|
186
|
-
hash
|
|
187
|
-
skip
|
|
188
|
-
error
|
|
212
|
+
query PollSyncEnvelopes($channelId: String!, $outboxAck: Int!, $outboxLatest: Int!) {
|
|
213
|
+
pollSyncEnvelopes(channelId: $channelId, outboxAck: $outboxAck, outboxLatest: $outboxLatest) {
|
|
214
|
+
envelopes {
|
|
215
|
+
type
|
|
216
|
+
channelMeta {
|
|
189
217
|
id
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
218
|
+
}
|
|
219
|
+
operations {
|
|
220
|
+
operation {
|
|
221
|
+
index
|
|
193
222
|
timestampUtcMs
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
223
|
+
hash
|
|
224
|
+
skip
|
|
225
|
+
error
|
|
226
|
+
id
|
|
227
|
+
action {
|
|
228
|
+
id
|
|
229
|
+
type
|
|
230
|
+
timestampUtcMs
|
|
231
|
+
input
|
|
232
|
+
scope
|
|
233
|
+
attachments {
|
|
234
|
+
data
|
|
235
|
+
mimeType
|
|
236
|
+
hash
|
|
237
|
+
extension
|
|
238
|
+
fileName
|
|
239
|
+
}
|
|
240
|
+
context {
|
|
241
|
+
signer {
|
|
242
|
+
user {
|
|
243
|
+
address
|
|
244
|
+
networkId
|
|
245
|
+
chainId
|
|
246
|
+
}
|
|
247
|
+
app {
|
|
248
|
+
name
|
|
249
|
+
key
|
|
250
|
+
}
|
|
251
|
+
signatures
|
|
213
252
|
}
|
|
214
|
-
signatures
|
|
215
253
|
}
|
|
216
254
|
}
|
|
217
255
|
}
|
|
256
|
+
context {
|
|
257
|
+
documentId
|
|
258
|
+
documentType
|
|
259
|
+
scope
|
|
260
|
+
branch
|
|
261
|
+
ordinal
|
|
262
|
+
}
|
|
218
263
|
}
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
branch
|
|
264
|
+
cursor {
|
|
265
|
+
remoteName
|
|
266
|
+
cursorOrdinal
|
|
267
|
+
lastSyncedAtUtcMs
|
|
224
268
|
}
|
|
269
|
+
key
|
|
270
|
+
dependsOn
|
|
225
271
|
}
|
|
226
|
-
|
|
227
|
-
remoteName
|
|
228
|
-
cursorOrdinal
|
|
229
|
-
lastSyncedAtUtcMs
|
|
230
|
-
}
|
|
231
|
-
key
|
|
232
|
-
dependsOn
|
|
272
|
+
ackOrdinal
|
|
233
273
|
}
|
|
234
274
|
}
|
|
235
275
|
`;
|
|
236
276
|
const variables = {
|
|
237
277
|
channelId: this.channelId,
|
|
238
|
-
|
|
278
|
+
outboxAck: ackOrdinal,
|
|
279
|
+
outboxLatest: latestOrdinal,
|
|
239
280
|
};
|
|
240
281
|
const response = await this.executeGraphQL(query, variables);
|
|
241
|
-
return
|
|
282
|
+
return {
|
|
283
|
+
envelopes: response.pollSyncEnvelopes.envelopes,
|
|
284
|
+
ackOrdinal: response.pollSyncEnvelopes.ackOrdinal,
|
|
285
|
+
};
|
|
242
286
|
}
|
|
243
287
|
/**
|
|
244
288
|
* Registers or updates this channel on the remote server via GraphQL mutation.
|
|
@@ -274,24 +318,6 @@ export class GqlChannel {
|
|
|
274
318
|
};
|
|
275
319
|
await this.executeGraphQL(mutation, variables);
|
|
276
320
|
}
|
|
277
|
-
/**
|
|
278
|
-
* Handles sync operations added to the outbox by sending them to the remote.
|
|
279
|
-
*/
|
|
280
|
-
handleOutboxAdded(syncOps) {
|
|
281
|
-
if (this.isShutdown) {
|
|
282
|
-
return;
|
|
283
|
-
}
|
|
284
|
-
// Execute async but don't await (fire and forget with error handling)
|
|
285
|
-
this.pushSyncOperations(syncOps).catch((error) => {
|
|
286
|
-
const err = error instanceof Error ? error : new Error(String(error));
|
|
287
|
-
const channelError = new ChannelError(ChannelErrorSource.Outbox, err);
|
|
288
|
-
for (const syncOp of syncOps) {
|
|
289
|
-
syncOp.failed(channelError);
|
|
290
|
-
this.deadLetter.add(syncOp);
|
|
291
|
-
this.outbox.remove(syncOp);
|
|
292
|
-
}
|
|
293
|
-
});
|
|
294
|
-
}
|
|
295
321
|
/**
|
|
296
322
|
* Pushes multiple sync operations to the remote via a single GraphQL mutation.
|
|
297
323
|
* Creates one SyncEnvelope per SyncOperation with key/dependsOn for batch ordering.
|
|
@@ -333,64 +359,9 @@ export class GqlChannel {
|
|
|
333
359
|
}
|
|
334
360
|
`;
|
|
335
361
|
const variables = {
|
|
336
|
-
envelopes: envelopes.map((e) =>
|
|
362
|
+
envelopes: envelopes.map((e) => serializeEnvelope(e)),
|
|
337
363
|
};
|
|
338
364
|
await this.executeGraphQL(mutation, variables);
|
|
339
|
-
for (const syncOp of syncOps) {
|
|
340
|
-
this.outbox.remove(syncOp);
|
|
341
|
-
}
|
|
342
|
-
}
|
|
343
|
-
/**
|
|
344
|
-
* Serializes a SyncEnvelope for GraphQL transport.
|
|
345
|
-
*
|
|
346
|
-
* Signatures are serialized as comma-separated strings since GraphQL schema
|
|
347
|
-
* defines them as [String!]!. Extra context fields (resultingState, ordinal)
|
|
348
|
-
* are stripped since they are not defined in OperationContextInput.
|
|
349
|
-
*/
|
|
350
|
-
serializeEnvelope(envelope) {
|
|
351
|
-
return {
|
|
352
|
-
type: envelope.type.toUpperCase(),
|
|
353
|
-
channelMeta: envelope.channelMeta,
|
|
354
|
-
operations: envelope.operations?.map((opWithContext) => ({
|
|
355
|
-
operation: {
|
|
356
|
-
index: opWithContext.operation.index,
|
|
357
|
-
timestampUtcMs: opWithContext.operation.timestampUtcMs,
|
|
358
|
-
hash: opWithContext.operation.hash,
|
|
359
|
-
skip: opWithContext.operation.skip,
|
|
360
|
-
error: opWithContext.operation.error,
|
|
361
|
-
id: opWithContext.operation.id,
|
|
362
|
-
action: this.serializeAction(opWithContext.operation.action),
|
|
363
|
-
},
|
|
364
|
-
context: {
|
|
365
|
-
documentId: opWithContext.context.documentId,
|
|
366
|
-
documentType: opWithContext.context.documentType,
|
|
367
|
-
scope: opWithContext.context.scope,
|
|
368
|
-
branch: opWithContext.context.branch,
|
|
369
|
-
},
|
|
370
|
-
})),
|
|
371
|
-
cursor: envelope.cursor,
|
|
372
|
-
key: envelope.key,
|
|
373
|
-
dependsOn: envelope.dependsOn,
|
|
374
|
-
};
|
|
375
|
-
}
|
|
376
|
-
/**
|
|
377
|
-
* Serializes an action for GraphQL transport, converting signature tuples to strings.
|
|
378
|
-
*/
|
|
379
|
-
serializeAction(action) {
|
|
380
|
-
const signer = action.context?.signer;
|
|
381
|
-
if (!signer?.signatures) {
|
|
382
|
-
return action;
|
|
383
|
-
}
|
|
384
|
-
return {
|
|
385
|
-
...action,
|
|
386
|
-
context: {
|
|
387
|
-
...action.context,
|
|
388
|
-
signer: {
|
|
389
|
-
...signer,
|
|
390
|
-
signatures: signer.signatures.map((sig) => Array.isArray(sig) ? sig.join(", ") : sig),
|
|
391
|
-
},
|
|
392
|
-
},
|
|
393
|
-
};
|
|
394
365
|
}
|
|
395
366
|
/**
|
|
396
367
|
* Gets the authorization header value using jwtHandler.
|
|
@@ -454,17 +425,6 @@ export class GqlChannel {
|
|
|
454
425
|
}
|
|
455
426
|
return result.data;
|
|
456
427
|
}
|
|
457
|
-
/**
|
|
458
|
-
* Updates the synchronization cursor for this channel's remote.
|
|
459
|
-
*/
|
|
460
|
-
async updateCursor(cursorOrdinal) {
|
|
461
|
-
const cursor = {
|
|
462
|
-
remoteName: this.remoteName,
|
|
463
|
-
cursorOrdinal,
|
|
464
|
-
lastSyncedAtUtcMs: Date.now(),
|
|
465
|
-
};
|
|
466
|
-
await this.cursorStorage.upsert(cursor);
|
|
467
|
-
}
|
|
468
428
|
/**
|
|
469
429
|
* Gets the current health status of the channel.
|
|
470
430
|
*/
|
|
@@ -484,4 +444,4 @@ export class GqlChannel {
|
|
|
484
444
|
return this.pollTimer;
|
|
485
445
|
}
|
|
486
446
|
}
|
|
487
|
-
//# sourceMappingURL=gql-channel.js.map
|
|
447
|
+
//# sourceMappingURL=gql-req-channel.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"gql-req-channel.js","sourceRoot":"","sources":["../../../../src/sync/channels/gql-req-channel.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import type { ILogger } from "../../logging/types.js";
|
|
2
|
+
import type { ISyncCursorStorage } from "../../storage/interfaces.js";
|
|
3
|
+
import type { IChannel } from "../interfaces.js";
|
|
4
|
+
import { Mailbox } from "../mailbox.js";
|
|
5
|
+
/**
|
|
6
|
+
* This class is used server-side to accumulate inbox + outbox operations.
|
|
7
|
+
*
|
|
8
|
+
* In general, the resolvers are responsible for updating mailboxes.
|
|
9
|
+
*/
|
|
10
|
+
export declare class GqlResponseChannel implements IChannel {
|
|
11
|
+
private readonly logger;
|
|
12
|
+
readonly inbox: Mailbox;
|
|
13
|
+
readonly outbox: Mailbox;
|
|
14
|
+
readonly deadLetter: Mailbox;
|
|
15
|
+
private readonly channelId;
|
|
16
|
+
private readonly remoteName;
|
|
17
|
+
private readonly cursorStorage;
|
|
18
|
+
private isShutdown;
|
|
19
|
+
private lastPersistedInboxOrdinal;
|
|
20
|
+
private lastPersistedOutboxOrdinal;
|
|
21
|
+
constructor(logger: ILogger, channelId: string, remoteName: string, cursorStorage: ISyncCursorStorage);
|
|
22
|
+
shutdown(): Promise<void>;
|
|
23
|
+
init(): Promise<void>;
|
|
24
|
+
}
|
|
25
|
+
//# sourceMappingURL=gql-res-channel.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"gql-res-channel.d.ts","sourceRoot":"","sources":["../../../../src/sync/channels/gql-res-channel.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,wBAAwB,CAAC;AACtD,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,6BAA6B,CAAC;AACtE,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AACjD,OAAO,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AAGxC;;;;GAIG;AACH,qBAAa,kBAAmB,YAAW,QAAQ;IAa/C,OAAO,CAAC,QAAQ,CAAC,MAAM;IAZzB,QAAQ,CAAC,KAAK,EAAE,OAAO,CAAC;IACxB,QAAQ,CAAC,MAAM,EAAE,OAAO,CAAC;IACzB,QAAQ,CAAC,UAAU,EAAE,OAAO,CAAC;IAE7B,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAS;IACnC,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAS;IACpC,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAqB;IACnD,OAAO,CAAC,UAAU,CAAU;IAC5B,OAAO,CAAC,yBAAyB,CAAa;IAC9C,OAAO,CAAC,0BAA0B,CAAa;gBAG5B,MAAM,EAAE,OAAO,EAChC,SAAS,EAAE,MAAM,EACjB,UAAU,EAAE,MAAM,EAClB,aAAa,EAAE,kBAAkB;IAyDnC,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC;IAKnB,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;CAY5B"}
|
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
import { Mailbox } from "../mailbox.js";
|
|
2
|
+
import { getLatestAppliedOrdinal } from "./utils.js";
|
|
3
|
+
/**
|
|
4
|
+
* This class is used server-side to accumulate inbox + outbox operations.
|
|
5
|
+
*
|
|
6
|
+
* In general, the resolvers are responsible for updating mailboxes.
|
|
7
|
+
*/
|
|
8
|
+
export class GqlResponseChannel {
|
|
9
|
+
logger;
|
|
10
|
+
inbox;
|
|
11
|
+
outbox;
|
|
12
|
+
deadLetter;
|
|
13
|
+
channelId;
|
|
14
|
+
remoteName;
|
|
15
|
+
cursorStorage;
|
|
16
|
+
isShutdown;
|
|
17
|
+
lastPersistedInboxOrdinal = 0;
|
|
18
|
+
lastPersistedOutboxOrdinal = 0;
|
|
19
|
+
constructor(logger, channelId, remoteName, cursorStorage) {
|
|
20
|
+
this.logger = logger;
|
|
21
|
+
this.channelId = channelId;
|
|
22
|
+
this.remoteName = remoteName;
|
|
23
|
+
this.cursorStorage = cursorStorage;
|
|
24
|
+
this.isShutdown = false;
|
|
25
|
+
this.inbox = new Mailbox();
|
|
26
|
+
this.outbox = new Mailbox();
|
|
27
|
+
this.deadLetter = new Mailbox();
|
|
28
|
+
// Instead of listening to syncops directly for cursor updates, we listen
|
|
29
|
+
// to the mailbox. This is for efficiency: many syncops may fire on a trim,
|
|
30
|
+
// but only one onRemoved callback will be fired for the batch.
|
|
31
|
+
this.outbox.onRemoved((syncOps) => {
|
|
32
|
+
const maxOrdinal = getLatestAppliedOrdinal(syncOps);
|
|
33
|
+
if (maxOrdinal > this.lastPersistedOutboxOrdinal) {
|
|
34
|
+
this.lastPersistedOutboxOrdinal = maxOrdinal;
|
|
35
|
+
this.cursorStorage
|
|
36
|
+
.upsert({
|
|
37
|
+
remoteName: this.remoteName,
|
|
38
|
+
cursorType: "outbox",
|
|
39
|
+
cursorOrdinal: maxOrdinal,
|
|
40
|
+
lastSyncedAtUtcMs: Date.now(),
|
|
41
|
+
})
|
|
42
|
+
.catch((error) => {
|
|
43
|
+
this.logger.error("Failed to update outbox cursor for @ChannelId! This means that future application runs may resend duplicate operations. This is recoverable (with deduplication protection), but not-optimal: @Error", this.channelId, error);
|
|
44
|
+
});
|
|
45
|
+
}
|
|
46
|
+
});
|
|
47
|
+
this.inbox.onRemoved((syncOps) => {
|
|
48
|
+
const maxOrdinal = getLatestAppliedOrdinal(syncOps);
|
|
49
|
+
if (maxOrdinal > this.lastPersistedInboxOrdinal) {
|
|
50
|
+
this.lastPersistedInboxOrdinal = maxOrdinal;
|
|
51
|
+
this.cursorStorage
|
|
52
|
+
.upsert({
|
|
53
|
+
remoteName: this.remoteName,
|
|
54
|
+
cursorType: "inbox",
|
|
55
|
+
cursorOrdinal: maxOrdinal,
|
|
56
|
+
lastSyncedAtUtcMs: Date.now(),
|
|
57
|
+
})
|
|
58
|
+
.catch((error) => {
|
|
59
|
+
this.logger.error("Failed to update inbox cursor for @ChannelId! This is unlikely to cause a problem, but not-optimal: @Error", this.channelId, error);
|
|
60
|
+
});
|
|
61
|
+
}
|
|
62
|
+
});
|
|
63
|
+
}
|
|
64
|
+
shutdown() {
|
|
65
|
+
this.isShutdown = true;
|
|
66
|
+
return Promise.resolve();
|
|
67
|
+
}
|
|
68
|
+
async init() {
|
|
69
|
+
// get cursors -- these are the last acknowledged ordinals for the inbox and outbox
|
|
70
|
+
const cursors = await this.cursorStorage.list(this.remoteName);
|
|
71
|
+
const inboxOrdinal = cursors.find((c) => c.cursorType === "inbox")?.cursorOrdinal ?? 0;
|
|
72
|
+
const outboxOrdinal = cursors.find((c) => c.cursorType === "outbox")?.cursorOrdinal ?? 0;
|
|
73
|
+
this.inbox.init(inboxOrdinal);
|
|
74
|
+
this.outbox.init(outboxOrdinal);
|
|
75
|
+
this.lastPersistedInboxOrdinal = inboxOrdinal;
|
|
76
|
+
this.lastPersistedOutboxOrdinal = outboxOrdinal;
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
//# sourceMappingURL=gql-res-channel.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"gql-res-channel.js","sourceRoot":"","sources":["../../../../src/sync/channels/gql-res-channel.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
export { PollingChannel } from "./polling-channel.js";
|
|
2
|
-
export { GqlChannel, type GqlChannelConfig } from "./gql-channel.js";
|
|
3
|
-
export { GqlChannelFactory } from "./gql-channel-factory.js";
|
|
4
1
|
export { CompositeChannelFactory } from "./composite-channel-factory.js";
|
|
5
|
-
export {
|
|
6
|
-
export { type
|
|
2
|
+
export { GqlChannelFactory } from "./gql-channel-factory.js";
|
|
3
|
+
export { GqlRequestChannel as GqlChannel, type GqlChannelConfig, } from "./gql-req-channel.js";
|
|
4
|
+
export { GqlResponseChannel as PollingChannel } from "./gql-res-channel.js";
|
|
7
5
|
export { IntervalPollTimer } from "./interval-poll-timer.js";
|
|
6
|
+
export { type IPollTimer } from "./poll-timer.js";
|
|
7
|
+
export { envelopeToSyncOperation } from "./utils.js";
|
|
8
8
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/sync/channels/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/sync/channels/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,uBAAuB,EAAE,MAAM,gCAAgC,CAAC;AACzE,OAAO,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAC7D,OAAO,EACL,iBAAiB,IAAI,UAAU,EAC/B,KAAK,gBAAgB,GACtB,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EAAE,kBAAkB,IAAI,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAC5E,OAAO,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAC7D,OAAO,EAAE,KAAK,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAClD,OAAO,EAAE,uBAAuB,EAAE,MAAM,YAAY,CAAC"}
|
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
export { PollingChannel } from "./polling-channel.js";
|
|
2
|
-
export { GqlChannel } from "./gql-channel.js";
|
|
3
|
-
export { GqlChannelFactory } from "./gql-channel-factory.js";
|
|
4
1
|
export { CompositeChannelFactory } from "./composite-channel-factory.js";
|
|
5
|
-
export {
|
|
6
|
-
export {} from "./
|
|
2
|
+
export { GqlChannelFactory } from "./gql-channel-factory.js";
|
|
3
|
+
export { GqlRequestChannel as GqlChannel, } from "./gql-req-channel.js";
|
|
4
|
+
export { GqlResponseChannel as PollingChannel } from "./gql-res-channel.js";
|
|
7
5
|
export { IntervalPollTimer } from "./interval-poll-timer.js";
|
|
6
|
+
export {} from "./poll-timer.js";
|
|
7
|
+
export { envelopeToSyncOperation } from "./utils.js";
|
|
8
8
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/sync/channels/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/sync/channels/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,uBAAuB,EAAE,MAAM,gCAAgC,CAAC;AACzE,OAAO,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAC7D,OAAO,EACL,iBAAiB,IAAI,UAAU,GAEhC,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EAAE,kBAAkB,IAAI,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAC5E,OAAO,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAC7D,OAAO,EAAmB,MAAM,iBAAiB,CAAC;AAClD,OAAO,EAAE,uBAAuB,EAAE,MAAM,YAAY,CAAC"}
|
|
@@ -1,5 +1,18 @@
|
|
|
1
|
+
import type { Action } from "document-model";
|
|
1
2
|
import { SyncOperation } from "../sync-operation.js";
|
|
2
|
-
import type
|
|
3
|
+
import { type SyncEnvelope } from "../types.js";
|
|
4
|
+
/**
|
|
5
|
+
* Serializes an action for GraphQL transport, converting signature tuples to strings.
|
|
6
|
+
*/
|
|
7
|
+
export declare function serializeAction(action: Action): unknown;
|
|
8
|
+
/**
|
|
9
|
+
* Serializes a SyncEnvelope for GraphQL transport.
|
|
10
|
+
*
|
|
11
|
+
* Signatures are serialized as comma-separated strings since GraphQL schema
|
|
12
|
+
* defines them as [String!]!. Extra context fields (resultingState, ordinal)
|
|
13
|
+
* are stripped since they are not defined in OperationContextInput.
|
|
14
|
+
*/
|
|
15
|
+
export declare function serializeEnvelope(envelope: SyncEnvelope): unknown;
|
|
3
16
|
/**
|
|
4
17
|
* Converts a SyncEnvelope containing operations into a SyncOperation.
|
|
5
18
|
*
|
|
@@ -27,4 +40,5 @@ export declare function envelopeToSyncOperation(envelope: SyncEnvelope, remoteNa
|
|
|
27
40
|
* causality across documents.
|
|
28
41
|
*/
|
|
29
42
|
export declare function envelopesToSyncOperations(envelope: SyncEnvelope, remoteName: string): SyncOperation[];
|
|
43
|
+
export declare const getLatestAppliedOrdinal: (syncOps: SyncOperation[]) => number;
|
|
30
44
|
//# sourceMappingURL=utils.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../../../src/sync/channels/utils.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../../../src/sync/channels/utils.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAwB,MAAM,gBAAgB,CAAC;AAEnE,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AACrD,OAAO,EAAuB,KAAK,YAAY,EAAE,MAAM,aAAa,CAAC;AAKrE;;GAEG;AACH,wBAAgB,eAAe,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAkBvD;AAED;;;;;;GAMG;AACH,wBAAgB,iBAAiB,CAAC,QAAQ,EAAE,YAAY,GAAG,OAAO,CAyBjE;AAmDD;;;;;;;;;;;;GAYG;AACH,wBAAgB,uBAAuB,CACrC,QAAQ,EAAE,YAAY,EACtB,UAAU,EAAE,MAAM,GACjB,aAAa,CA6Bf;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,yBAAyB,CACvC,QAAQ,EAAE,YAAY,EACtB,UAAU,EAAE,MAAM,GACjB,aAAa,EAAE,CAuBjB;AAED,eAAO,MAAM,uBAAuB,GAAI,SAAS,aAAa,EAAE,KAAG,MAUlE,CAAC"}
|