@fireproof/core 0.20.5 → 0.21.0-dev-preview-3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (152) hide show
  1. package/blockstore/commitor.js +3 -3
  2. package/blockstore/commitor.js.map +1 -1
  3. package/blockstore/loader.d.ts +2 -1
  4. package/blockstore/loader.d.ts.map +1 -1
  5. package/blockstore/loader.js +40 -10
  6. package/blockstore/loader.js.map +1 -1
  7. package/blockstore/store.js +1 -1
  8. package/blockstore/store.js.map +1 -1
  9. package/crdt.d.ts +1 -1
  10. package/crdt.d.ts.map +1 -1
  11. package/crdt.js.map +1 -1
  12. package/database.d.ts +2 -3
  13. package/database.d.ts.map +1 -1
  14. package/database.js +7 -3
  15. package/database.js.map +1 -1
  16. package/deno.json +1 -1
  17. package/index.d.ts +1 -0
  18. package/index.d.ts.map +1 -1
  19. package/index.js +1 -0
  20. package/index.js.map +1 -1
  21. package/indexer-helpers.d.ts +29 -28
  22. package/indexer-helpers.d.ts.map +1 -1
  23. package/indexer-helpers.js +21 -3
  24. package/indexer-helpers.js.map +1 -1
  25. package/indexer.d.ts +3 -3
  26. package/indexer.d.ts.map +1 -1
  27. package/indexer.js +16 -24
  28. package/indexer.js.map +1 -1
  29. package/ledger.d.ts +3 -2
  30. package/ledger.d.ts.map +1 -1
  31. package/ledger.js +7 -4
  32. package/ledger.js.map +1 -1
  33. package/package.json +2 -2
  34. package/protocols/cloud/http-connection.d.ts +2 -1
  35. package/protocols/cloud/http-connection.d.ts.map +1 -1
  36. package/protocols/cloud/http-connection.js +1 -0
  37. package/protocols/cloud/http-connection.js.map +1 -1
  38. package/protocols/cloud/msg-types-data.d.ts +4 -4
  39. package/protocols/cloud/msg-types-data.d.ts.map +1 -1
  40. package/protocols/cloud/msg-types-data.js.map +1 -1
  41. package/protocols/cloud/msg-types-meta.d.ts +13 -13
  42. package/protocols/cloud/msg-types-meta.d.ts.map +1 -1
  43. package/protocols/cloud/msg-types-meta.js.map +1 -1
  44. package/protocols/cloud/msg-types-wal.d.ts +4 -4
  45. package/protocols/cloud/msg-types-wal.d.ts.map +1 -1
  46. package/protocols/cloud/msg-types-wal.js.map +1 -1
  47. package/protocols/cloud/msg-types.d.ts +33 -19
  48. package/protocols/cloud/msg-types.d.ts.map +1 -1
  49. package/protocols/cloud/msg-types.js +4 -1
  50. package/protocols/cloud/msg-types.js.map +1 -1
  51. package/protocols/cloud/msger.d.ts +47 -38
  52. package/protocols/cloud/msger.d.ts.map +1 -1
  53. package/protocols/cloud/msger.js +211 -106
  54. package/protocols/cloud/msger.js.map +1 -1
  55. package/protocols/cloud/ws-connection.d.ts +14 -3
  56. package/protocols/cloud/ws-connection.d.ts.map +1 -1
  57. package/protocols/cloud/ws-connection.js +73 -34
  58. package/protocols/cloud/ws-connection.js.map +1 -1
  59. package/protocols/dashboard/index.d.ts +4 -0
  60. package/protocols/dashboard/index.d.ts.map +1 -0
  61. package/protocols/dashboard/index.js +4 -0
  62. package/protocols/dashboard/index.js.map +1 -0
  63. package/protocols/dashboard/msg-api.d.ts +11 -0
  64. package/protocols/dashboard/msg-api.d.ts.map +1 -0
  65. package/protocols/dashboard/msg-api.js +55 -0
  66. package/protocols/dashboard/msg-api.js.map +1 -0
  67. package/protocols/dashboard/msg-is.d.ts +45 -0
  68. package/protocols/dashboard/msg-is.d.ts.map +1 -0
  69. package/protocols/dashboard/msg-is.js +63 -0
  70. package/protocols/dashboard/msg-is.js.map +1 -0
  71. package/protocols/dashboard/msg-types.d.ts +397 -0
  72. package/protocols/dashboard/msg-types.d.ts.map +1 -0
  73. package/protocols/dashboard/msg-types.js +4 -0
  74. package/protocols/dashboard/msg-types.js.map +1 -0
  75. package/protocols/index.d.ts +1 -0
  76. package/protocols/index.d.ts.map +1 -1
  77. package/protocols/index.js +1 -0
  78. package/protocols/index.js.map +1 -1
  79. package/react/img-file.d.ts +2 -2
  80. package/react/img-file.d.ts.map +1 -1
  81. package/react/img-file.js +62 -27
  82. package/react/img-file.js.map +1 -1
  83. package/react/types.d.ts +29 -9
  84. package/react/types.d.ts.map +1 -1
  85. package/react/use-all-docs.d.ts +1 -1
  86. package/react/use-all-docs.d.ts.map +1 -1
  87. package/react/use-all-docs.js.map +1 -1
  88. package/react/use-attach.d.ts +9 -4
  89. package/react/use-attach.d.ts.map +1 -1
  90. package/react/use-attach.js +136 -43
  91. package/react/use-attach.js.map +1 -1
  92. package/react/use-fireproof.js +2 -2
  93. package/react/use-fireproof.js.map +1 -1
  94. package/react/use-live-query.d.ts.map +1 -1
  95. package/react/use-live-query.js +1 -4
  96. package/react/use-live-query.js.map +1 -1
  97. package/runtime/gateways/cloud/gateway.d.ts +8 -8
  98. package/runtime/gateways/cloud/gateway.d.ts.map +1 -1
  99. package/runtime/gateways/cloud/gateway.js +17 -15
  100. package/runtime/gateways/cloud/gateway.js.map +1 -1
  101. package/runtime/gateways/cloud/to-cloud.d.ts +22 -9
  102. package/runtime/gateways/cloud/to-cloud.d.ts.map +1 -1
  103. package/runtime/gateways/cloud/to-cloud.js +75 -59
  104. package/runtime/gateways/cloud/to-cloud.js.map +1 -1
  105. package/runtime/gateways/file/key-bag-file.d.ts +1 -0
  106. package/runtime/gateways/file/key-bag-file.d.ts.map +1 -1
  107. package/runtime/gateways/file/key-bag-file.js +12 -0
  108. package/runtime/gateways/file/key-bag-file.js.map +1 -1
  109. package/runtime/gateways/indexeddb/gateway-impl.d.ts.map +1 -1
  110. package/runtime/gateways/indexeddb/gateway-impl.js.map +1 -1
  111. package/runtime/gateways/indexeddb/key-bag-indexeddb.d.ts +1 -0
  112. package/runtime/gateways/indexeddb/key-bag-indexeddb.d.ts.map +1 -1
  113. package/runtime/gateways/indexeddb/key-bag-indexeddb.js +6 -0
  114. package/runtime/gateways/indexeddb/key-bag-indexeddb.js.map +1 -1
  115. package/runtime/key-bag-memory.d.ts +1 -0
  116. package/runtime/key-bag-memory.d.ts.map +1 -1
  117. package/runtime/key-bag-memory.js +7 -0
  118. package/runtime/key-bag-memory.js.map +1 -1
  119. package/runtime/key-bag.d.ts +3 -0
  120. package/runtime/key-bag.d.ts.map +1 -1
  121. package/runtime/key-bag.js +6 -0
  122. package/runtime/key-bag.js.map +1 -1
  123. package/tests/fireproof/attachable.test.ts +1 -1
  124. package/tests/fireproof/charwise-boolean.test.ts +66 -0
  125. package/tests/fireproof/crdt.test.ts +3 -3
  126. package/tests/fireproof/deleted-docs-handling.test.ts +111 -0
  127. package/tests/fireproof/fireproof.test.ts +10 -10
  128. package/tests/fireproof/hello.test.ts +1 -1
  129. package/tests/fireproof/indexer.test.ts +21 -21
  130. package/tests/fireproof/query-docs.test.ts +42 -7
  131. package/tests/fireproof/query-limit-issue.test.ts +147 -0
  132. package/tests/fireproof/query-property-inconsistency.test.ts +89 -0
  133. package/tests/fireproof/query-result-properties.test.ts +42 -0
  134. package/tests/protocols/cloud/msger.test.ts +563 -0
  135. package/types.d.ts +9 -9
  136. package/types.d.ts.map +1 -1
  137. package/types.js.map +1 -1
  138. package/use-fireproof/iframe-strategy.d.ts +6 -4
  139. package/use-fireproof/iframe-strategy.d.ts.map +1 -1
  140. package/use-fireproof/iframe-strategy.js +7 -11
  141. package/use-fireproof/iframe-strategy.js.map +1 -1
  142. package/use-fireproof/index.d.ts +6 -2
  143. package/use-fireproof/index.d.ts.map +1 -1
  144. package/use-fireproof/index.js +23 -3
  145. package/use-fireproof/index.js.map +1 -1
  146. package/use-fireproof/redirect-strategy.d.ts +11 -4
  147. package/use-fireproof/redirect-strategy.d.ts.map +1 -1
  148. package/use-fireproof/redirect-strategy.js +142 -20
  149. package/use-fireproof/redirect-strategy.js.map +1 -1
  150. package/utils.d.ts +3 -0
  151. package/utils.d.ts.map +1 -1
  152. package/utils.js.map +1 -1
@@ -1,7 +1,9 @@
1
1
  import { BuildURI, Result, runtimeFn, URI } from "@adviser/cement";
2
- import { buildReqGestalt, defaultGestalt, MsgIsResGestalt, buildReqOpen, MsgIsConnected, MsgIsError, MsgIsResOpen, MsgIsTid, buildReqClose, MsgIsResClose, } from "./msg-types.js";
2
+ import { buildReqGestalt, defaultGestalt, MsgIsResGestalt, MsgIsError, buildReqOpen, MsgIsResOpen, MsgIsConnected, MsgIsWithConn, } from "./msg-types.js";
3
3
  import { ensurePath, HttpConnection } from "./http-connection.js";
4
4
  import { WSConnection } from "./ws-connection.js";
5
+ import { ensureLogger, sleep } from "../../utils.js";
6
+ import pLimit from "p-limit";
5
7
  export function selectRandom(arr) {
6
8
  return arr[Math.floor(Math.random() * arr.length)];
7
9
  }
@@ -56,143 +58,246 @@ export async function authTypeFromUri(logger, curi) {
56
58
  },
57
59
  });
58
60
  }
59
- export class MsgConnected {
60
- static async connect(auth, mrc, conn = {}) {
61
- if (Result.Is(mrc)) {
62
- if (mrc.isErr()) {
63
- return Result.Err(mrc.Err());
64
- }
65
- mrc = mrc.Ok();
66
- }
67
- const res = await mrc.request(buildReqOpen(mrc.sthis, auth, conn), { waitFor: MsgIsResOpen });
68
- if (MsgIsError(res) || !MsgIsResOpen(res)) {
69
- return mrc.sthis.logger.Error().Err(res).Msg("unexpected response").ResultError();
70
- }
71
- return Result.Ok(new MsgConnected(mrc, res.conn));
61
+ function initialFPUri(curl) {
62
+ let gestaltUrl = URI.from(curl);
63
+ if (["", "/"].includes(gestaltUrl.pathname)) {
64
+ gestaltUrl = gestaltUrl.build().appendRelative("/fp").URI();
72
65
  }
73
- constructor(raw, conn) {
74
- this.sthis = raw.sthis;
75
- this.raw = raw;
76
- this.exchangedGestalt = raw.exchangedGestalt;
77
- this.conn = conn;
78
- this.activeBinds = raw.activeBinds;
79
- this.id = this.sthis.nextId().str;
66
+ return gestaltUrl;
67
+ }
68
+ export class Msger {
69
+ static connect(sthis, curl, imsgP = {}, conn, mowh) {
70
+ const vc = new VirtualConnected(sthis, { curl, imsgP, conn, openWSorHttp: mowh });
71
+ return Promise.resolve(Result.Ok(vc));
80
72
  }
81
- attachAuth(auth) {
82
- return new MsgConnectedAuth(this, auth);
73
+ constructor() {
83
74
  }
84
75
  }
85
- export class MsgConnectedAuth {
86
- constructor(conn, authFactory) {
87
- this.id = conn.id;
88
- this.raw = conn.raw;
89
- this.conn = conn.conn;
90
- this.sthis = conn.sthis;
91
- this.authFactory = authFactory;
92
- this.exchangedGestalt = conn.exchangedGestalt;
93
- this.activeBinds = conn.activeBinds;
76
+ export class MsgOpenWSAndHttp {
77
+ async openHttp(vc, urls, msgP, exGestalt) {
78
+ return Result.Ok(new HttpConnection(vc, urls, msgP, exGestalt));
94
79
  }
95
- bind(req, opts) {
96
- const stream = this.raw.bind({ ...req, conn: req.conn || this.conn }, opts);
97
- const ts = new TransformStream({
98
- transform: (chunk, controller) => {
99
- if (!MsgIsTid(chunk, req.tid)) {
100
- return;
101
- }
102
- if (MsgIsConnected(chunk, this.conn)) {
103
- if (opts.waitFor?.(chunk) || MsgIsError(chunk)) {
104
- controller.enqueue(chunk);
105
- }
106
- }
107
- },
108
- });
109
- stream.pipeThrough(ts);
110
- return ts.readable;
80
+ async openWS(vc, url, msgP, exGestalt) {
81
+ url = url.build().setParam("random", vc.nextId().str).URI();
82
+ const wsUrl = ensurePath(url, "ws");
83
+ let wsFactory;
84
+ if (runtimeFn().isNodeIsh) {
85
+ const { WebSocket } = await import("ws");
86
+ wsFactory = () => new WebSocket(wsUrl);
87
+ }
88
+ else {
89
+ wsFactory = () => new WebSocket(wsUrl);
90
+ }
91
+ return Result.Ok(new WSConnection(vc, wsFactory(), msgP, exGestalt));
111
92
  }
112
- authType() {
113
- return this.authFactory();
93
+ }
94
+ export class VirtualConnected {
95
+ constructor(sthis, opts) {
96
+ this.retries = [];
97
+ this.activeBinds = new Map();
98
+ this.mutex = pLimit(1);
99
+ this.sthis = sthis;
100
+ this.id = sthis.nextId().str;
101
+ this.logger = ensureLogger(sthis, "VirtualConnected");
102
+ this.opts = {
103
+ ...opts,
104
+ openWSorHttp: opts.openWSorHttp || new MsgOpenWSAndHttp(),
105
+ retryCount: opts.retryCount || 3,
106
+ retryDelay: opts.retryDelay || 500,
107
+ conn: { reqId: sthis.nextId().str, ...opts.conn },
108
+ };
109
+ this.mowh = this.opts.openWSorHttp;
114
110
  }
115
- msgConnAuth() {
116
- return this.authType().then((r) => {
117
- if (r.isErr()) {
118
- return Result.Err(r);
111
+ get conn() {
112
+ if (!this.virtualConn) {
113
+ throw new Error("conn is not set");
114
+ }
115
+ return this.virtualConn;
116
+ }
117
+ async handleBindRealConn(realConn, req, as) {
118
+ const stream = realConn.bind({ ...as.bind.msg, auth: req.auth, conn: { ...this.conn, ...req.conn } }, as.bind.opts);
119
+ for await (const msg of stream) {
120
+ try {
121
+ if (MsgIsConnected(msg, this.conn)) {
122
+ as.controller?.enqueue(msg);
123
+ }
124
+ }
125
+ catch (err) {
126
+ this.sthis.logger.Error().Err(err).Any({ msg }).Msg("Error in handleBindRealConn callback[ignored]");
119
127
  }
120
- return Result.Ok({ conn: this.conn, auth: r.Ok() });
128
+ }
129
+ }
130
+ bind(req, opts) {
131
+ const id = this.sthis.nextId().str;
132
+ return new ReadableStream({
133
+ cancel: (err) => {
134
+ this.sthis.logger.Debug().Msg("vc-bind-cancel", id, err);
135
+ this.activeBinds.delete(id);
136
+ },
137
+ start: (ctl) => {
138
+ this.getRealConn(req, opts, async (realConn) => {
139
+ const as = {
140
+ id,
141
+ bind: {
142
+ msg: req,
143
+ opts,
144
+ },
145
+ controller: ctl,
146
+ };
147
+ this.activeBinds.set(id, as);
148
+ this.handleBindRealConn(realConn, req, as);
149
+ return Result.Ok(undefined);
150
+ }).catch((err) => {
151
+ ctl.error({
152
+ type: "error",
153
+ src: "VirtualConnection:bind",
154
+ message: err.message,
155
+ tid: req.tid,
156
+ version: req.version,
157
+ auth: req.auth,
158
+ stack: [],
159
+ });
160
+ });
161
+ },
121
162
  });
122
163
  }
123
164
  request(req, opts) {
124
- return this.raw.request({ ...req, conn: req.conn || this.conn }, opts);
165
+ return this.getRealConn(req, opts, (realConn) => realConn.request({
166
+ ...req,
167
+ conn: { ...this.virtualConn, ...req.conn },
168
+ }, opts));
125
169
  }
126
170
  send(msg) {
127
- return this.raw.send({ ...msg, conn: msg.conn || this.conn });
128
- }
129
- start() {
130
- return this.raw.start();
131
- }
132
- async close(t) {
133
- await this.request(buildReqClose(this.sthis, t.auth, this.conn), { waitFor: MsgIsResClose });
134
- return await this.raw.close(t);
135
- }
136
- onMsg(msgFn) {
137
- return this.raw.onMsg((msg) => {
138
- if (MsgIsConnected(msg, this.conn)) {
139
- msgFn(msg);
140
- }
171
+ return this.getRealConn(msg, {
172
+ waitFor: () => true,
173
+ }, async (realConn) => {
174
+ const ret = await realConn.send({
175
+ ...msg,
176
+ conn: { ...this.conn, ...msg.conn },
177
+ });
178
+ return ret;
141
179
  });
142
180
  }
143
- }
144
- function initialFPUri(curl) {
145
- let gestaltUrl = URI.from(curl);
146
- if (["", "/"].includes(gestaltUrl.pathname)) {
147
- gestaltUrl = gestaltUrl.build().appendRelative("/fp").URI();
181
+ close(t) {
182
+ return this.getRealConn(t, {
183
+ waitFor: () => true,
184
+ noRetry: true,
185
+ }, (realConn) => realConn.close(t));
148
186
  }
149
- return gestaltUrl;
150
- }
151
- export class Msger {
152
- static async openHttp(sthis, urls, msgP, exGestalt) {
153
- return Result.Ok(new HttpConnection(sthis, urls, msgP, exGestalt));
154
- }
155
- static async openWS(sthis, url, msgP, exGestalt) {
156
- let ws;
157
- url = url.build().setParam("random", sthis.nextId().str).URI();
158
- const wsUrl = ensurePath(url, "ws");
159
- if (runtimeFn().isNodeIsh) {
160
- const { WebSocket } = await import("ws");
161
- ws = new WebSocket(wsUrl);
162
- }
163
- else {
164
- ws = new WebSocket(wsUrl);
165
- }
166
- return Result.Ok(new WSConnection(sthis, ws, msgP, exGestalt));
187
+ onMsg(msgFn) {
188
+ throw new Error("Method not implemented.");
167
189
  }
168
- static async open(sthis, auth, curl, imsgP = {}) {
169
- const jsMsgP = defaultMsgParams(sthis, { ...imsgP, mime: "application/json", ende: jsonEnDe(sthis) });
190
+ async connect(auth, curl, imsgP = {}) {
191
+ const jsMsgP = defaultMsgParams(this.sthis, { ...imsgP, mime: "application/json", ende: jsonEnDe(this.sthis) });
170
192
  const gestaltUrl = initialFPUri(curl);
171
- const gs = defaultGestalt(defaultMsgParams(sthis, imsgP), { id: "FP-Universal-Client" });
172
- const rHC = await Msger.openHttp(sthis, [gestaltUrl], jsMsgP, { my: gs, remote: gs });
193
+ const gs = defaultGestalt(defaultMsgParams(this.sthis, imsgP), { id: "FP-Universal-Client" });
194
+ const rHC = await this.mowh.openHttp(this.sthis, [gestaltUrl], jsMsgP, { my: gs, remote: gs });
173
195
  if (rHC.isErr()) {
174
196
  return rHC;
175
197
  }
176
198
  const hc = rHC.Ok();
177
- const resGestalt = await hc.request(buildReqGestalt(sthis, auth, gs), {
199
+ const resGestalt = await hc.request(buildReqGestalt(this.sthis, auth, gs), {
178
200
  waitFor: MsgIsResGestalt,
201
+ noConn: true,
179
202
  });
180
203
  if (!MsgIsResGestalt(resGestalt)) {
181
- return sthis.logger.Error().Any({ resGestalt }).Msg("should be ResGestalt").ResultError();
204
+ return this.logger.Error().Any({ resGestalt }).Msg("should be ResGestalt").ResultError();
182
205
  }
183
206
  await hc.close(resGestalt);
184
207
  const exGt = { my: gs, remote: resGestalt.gestalt };
185
- const msgP = defaultMsgParams(sthis, imsgP);
208
+ const msgP = defaultMsgParams(this.sthis, imsgP);
209
+ this.exchangedGestalt = exGt;
210
+ let rRealConn;
186
211
  if (exGt.remote.protocolCapabilities.includes("reqRes") && !exGt.remote.protocolCapabilities.includes("stream")) {
187
- return applyStart(Msger.openHttp(sthis, exGt.remote.httpEndpoints.map((i) => BuildURI.from(curl).resolve(i).URI()), msgP, exGt));
212
+ rRealConn = await this.mowh.openHttp(this.sthis, exGt.remote.httpEndpoints.map((i) => BuildURI.from(curl).resolve(i).URI()), msgP, exGt);
213
+ }
214
+ else {
215
+ const wsUrl = BuildURI.from(gestaltUrl).resolve(selectRandom(exGt.remote.wsEndpoints)).URI();
216
+ rRealConn = await this.mowh.openWS(this.sthis, wsUrl, msgP, exGt);
217
+ }
218
+ if (rRealConn.isErr()) {
219
+ return rRealConn;
220
+ }
221
+ const realConn = rRealConn.Ok();
222
+ const rStart = await realConn.start();
223
+ if (rStart.isErr()) {
224
+ return Result.Err(rStart);
188
225
  }
189
- const wsUrl = BuildURI.from(gestaltUrl).resolve(selectRandom(exGt.remote.wsEndpoints)).URI();
190
- return applyStart(Msger.openWS(sthis, wsUrl, msgP, exGt));
226
+ return rRealConn;
191
227
  }
192
- static connect(sthis, auth, curl, imsgP = {}, conn = {}) {
193
- return Msger.open(sthis, auth, curl, imsgP).then((srv) => MsgConnected.connect(auth, srv, conn));
228
+ async getQSIdWithSideEffect(msg, conn) {
229
+ const mOpen = await this.request(buildReqOpen(this.sthis, msg.auth, conn), {
230
+ waitFor: MsgIsResOpen,
231
+ noConn: true,
232
+ });
233
+ if (MsgIsError(mOpen)) {
234
+ return mOpen;
235
+ }
236
+ this.virtualConn = mOpen.conn;
237
+ return mOpen;
194
238
  }
195
- constructor() {
239
+ async getRealConn(msg, opts, action) {
240
+ if (!this.realConn) {
241
+ await this.mutex(async () => {
242
+ if (this.retries.length >= this.opts.retryCount) {
243
+ return Promise.resolve({
244
+ type: "error",
245
+ src: "VirtualConnection:getRealConn",
246
+ message: "retry count exceeded",
247
+ tid: msg.tid,
248
+ version: msg.version,
249
+ auth: msg.auth,
250
+ stack: [],
251
+ });
252
+ }
253
+ const rConn = await this.connect(msg.auth, this.opts.curl, this.opts.imsgP);
254
+ if (rConn.isErr()) {
255
+ this.retries.push({ retryCount: this.retries.length + 1 });
256
+ await sleep(this.opts.retryDelay * this.retries.length);
257
+ return this.getRealConn(msg, opts, action);
258
+ }
259
+ this.realConn = rConn.Ok();
260
+ const mQSid = await this.getQSIdWithSideEffect(msg, {
261
+ reqId: this.sthis.nextId().str,
262
+ ...this.virtualConn,
263
+ ...this.opts.conn,
264
+ });
265
+ if (MsgIsError(mQSid)) {
266
+ return {
267
+ ...mQSid,
268
+ tid: msg.tid,
269
+ };
270
+ }
271
+ for (const as of this.activeBinds.values()) {
272
+ void this.handleBindRealConn(this.realConn, msg, as);
273
+ }
274
+ });
275
+ const ret = await this.getRealConn(msg, opts, action);
276
+ return ret;
277
+ }
278
+ else {
279
+ if (!this.realConn.isReady) {
280
+ await this.realConn.close(msg);
281
+ this.realConn = undefined;
282
+ this.retries = [];
283
+ return this.getRealConn(msg, opts, action);
284
+ }
285
+ if (!opts.noConn && !this.virtualConn) {
286
+ const conn = MsgIsWithConn(msg) ? { conn: msg.conn } : {};
287
+ return {
288
+ type: "error",
289
+ src: msg,
290
+ message: "virtualConn is not set",
291
+ tid: msg.tid,
292
+ ...conn,
293
+ version: msg.version,
294
+ auth: msg.auth,
295
+ stack: [],
296
+ };
297
+ }
298
+ const ret = await action(this.realConn);
299
+ return ret;
300
+ }
196
301
  }
197
302
  }
198
303
  //# sourceMappingURL=msger.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"msger.js","sourceRoot":"","sources":["../../../../../src/protocols/cloud/msger.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"msger.js","sourceRoot":"","sources":["../../../../../src/protocols/cloud/msger.ts"],"names":[],"mappings":"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"}
@@ -7,14 +7,24 @@ export interface WSReqOpen {
7
7
  readonly reqOpen: ReqOpen;
8
8
  readonly ws: WebSocket;
9
9
  }
10
+ interface WaitForTidItem {
11
+ readonly opts: WaitForTid;
12
+ readonly timeout?: ReturnType<typeof setTimeout>;
13
+ }
14
+ declare class WaitForTids {
15
+ readonly waitForTids: Map<string, WaitForTidItem>;
16
+ start(sthis: SuperThis, logger: Logger, waitFor: WaitForTid): void;
17
+ stop(tid: string): void;
18
+ resolve(msg: MsgBase): WaitForTidItem | undefined;
19
+ }
10
20
  export declare class WSConnection extends MsgRawConnectionBase implements MsgRawConnection {
11
21
  #private;
12
22
  readonly logger: Logger;
13
23
  readonly msgP: MsgerParamsWithEnDe;
14
24
  readonly ws: WebSocket;
15
- readonly waitForTid: Map<string, WaitForTid>;
16
- opened: boolean;
25
+ readonly waitForTid: WaitForTids;
17
26
  readonly id: string;
27
+ isReady: boolean;
18
28
  constructor(sthis: SuperThis, ws: WebSocket, msgP: MsgerParamsWithEnDe, exGestalt: ExchangedGestalt);
19
29
  start(): Promise<Result<void>>;
20
30
  close(): Promise<Result<void>>;
@@ -22,8 +32,9 @@ export declare class WSConnection extends MsgRawConnectionBase implements MsgRaw
22
32
  send<Q extends MsgBase, S extends MsgBase>(msg: Q): Promise<S>;
23
33
  onMsg<S extends MsgBase>(fn: OnMsgFn<S>): UnReg;
24
34
  onClose(fn: UnReg): UnReg;
25
- readonly activeBinds: Map<string, ActiveStream<MsgBase, MsgBase>>;
35
+ readonly activeBinds: Map<string, ActiveStream>;
26
36
  bind<Q extends MsgBase, S extends MsgBase>(req: Q, opts: RequestOpts): ReadableStream<MsgWithError<S>>;
27
37
  request<Q extends MsgBase, S extends MsgBase>(req: Q, opts: RequestOpts): Promise<MsgWithError<S>>;
28
38
  }
39
+ export {};
29
40
  //# sourceMappingURL=ws-connection.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"ws-connection.d.ts","sourceRoot":"","sources":["../../../../../src/protocols/cloud/ws-connection.ts"],"names":[],"mappings":"AAAA,OAAO,EAA4B,MAAM,EAAE,MAAM,EAAa,MAAM,iBAAiB,CAAC;AACtF,OAAO,EAAE,OAAO,EAA6B,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,WAAW,EAAY,MAAM,gBAAgB,CAAC;AAC9H,OAAO,EAAE,YAAY,EAAE,gBAAgB,EAAE,mBAAmB,EAAE,gBAAgB,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AACnH,OAAO,EAAE,oBAAoB,EAAE,MAAM,8BAA8B,CAAC;AACpE,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAG3C,MAAM,WAAW,SAAS;IACxB,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC;IAC1B,QAAQ,CAAC,EAAE,EAAE,SAAS,CAAC;CACxB;AAED,qBAAa,YAAa,SAAQ,oBAAqB,YAAW,gBAAgB;;IAChF,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,IAAI,EAAE,mBAAmB,CAAC;IACnC,QAAQ,CAAC,EAAE,EAAE,SAAS,CAAC;IAMvB,QAAQ,CAAC,UAAU,0BAAiC;IAEpD,MAAM,UAAS;IAEf,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;gBAER,KAAK,EAAE,SAAS,EAAE,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,mBAAmB,EAAE,SAAS,EAAE,gBAAgB;IAS7F,KAAK,IAAI,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;IA+E9B,KAAK,IAAI,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;IAQpC,KAAK,CAAC,CAAC,SAAS,OAAO,EAAE,GAAG,EAAE,YAAY,CAAC,CAAC,CAAC,GAAG,YAAY,CAAC,CAAC,CAAC;IAK/D,IAAI,CAAC,CAAC,SAAS,OAAO,EAAE,CAAC,SAAS,OAAO,EAAE,GAAG,EAAE,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC;IAM9D,KAAK,CAAC,CAAC,SAAS,OAAO,EAAE,EAAE,EAAE,OAAO,CAAC,CAAC,CAAC,GAAG,KAAK;IAM/C,OAAO,CAAC,EAAE,EAAE,KAAK,GAAG,KAAK;IAMzB,QAAQ,CAAC,WAAW,8CAAqD;IACzE,IAAI,CAAC,CAAC,SAAS,OAAO,EAAE,CAAC,SAAS,OAAO,EAAE,GAAG,EAAE,CAAC,EAAE,IAAI,EAAE,WAAW,GAAG,cAAc,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;IA2ChG,OAAO,CAAC,CAAC,SAAS,OAAO,EAAE,CAAC,SAAS,OAAO,EAAE,GAAG,EAAE,CAAC,EAAE,IAAI,EAAE,WAAW,GAAG,OAAO,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;CAczG"}
1
+ {"version":3,"file":"ws-connection.d.ts","sourceRoot":"","sources":["../../../../../src/protocols/cloud/ws-connection.ts"],"names":[],"mappings":"AAAA,OAAO,EAA4B,MAAM,EAAE,MAAM,EAAa,MAAM,iBAAiB,CAAC;AACtF,OAAO,EAAE,OAAO,EAA6B,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AACpH,OAAO,EAAE,YAAY,EAAE,gBAAgB,EAAE,mBAAmB,EAAE,gBAAgB,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AACnH,OAAO,EAAE,oBAAoB,EAAE,MAAM,8BAA8B,CAAC;AACpE,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAG3C,MAAM,WAAW,SAAS;IACxB,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC;IAC1B,QAAQ,CAAC,EAAE,EAAE,SAAS,CAAC;CACxB;AAED,UAAU,cAAc;IACtB,QAAQ,CAAC,IAAI,EAAE,UAAU,CAAC;IAC1B,QAAQ,CAAC,OAAO,CAAC,EAAE,UAAU,CAAC,OAAO,UAAU,CAAC,CAAC;CAClD;AAED,cAAM,WAAW;IACf,QAAQ,CAAC,WAAW,8BAAqC;IAEzD,KAAK,CAAC,KAAK,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,UAAU;IAuB3D,IAAI,CAAC,GAAG,EAAE,MAAM;IAWhB,OAAO,CAAC,GAAG,EAAE,OAAO,GAAG,cAAc,GAAG,SAAS;CAalD;AAID,qBAAa,YAAa,SAAQ,oBAAqB,YAAW,gBAAgB;;IAChF,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,IAAI,EAAE,mBAAmB,CAAC;IACnC,QAAQ,CAAC,EAAE,EAAE,SAAS,CAAC;IAMvB,QAAQ,CAAC,UAAU,cAAqB;IAExC,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IAEpB,OAAO,UAAS;gBAEJ,KAAK,EAAE,SAAS,EAAE,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,mBAAmB,EAAE,SAAS,EAAE,gBAAgB;IAS7F,KAAK,IAAI,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;IAmE9B,KAAK,IAAI,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;IAQpC,KAAK,CAAC,CAAC,SAAS,OAAO,EAAE,GAAG,EAAE,YAAY,CAAC,CAAC,CAAC,GAAG,YAAY,CAAC,CAAC,CAAC;IAK/D,IAAI,CAAC,CAAC,SAAS,OAAO,EAAE,CAAC,SAAS,OAAO,EAAE,GAAG,EAAE,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC;IAM9D,KAAK,CAAC,CAAC,SAAS,OAAO,EAAE,EAAE,EAAE,OAAO,CAAC,CAAC,CAAC,GAAG,KAAK;IAM/C,OAAO,CAAC,EAAE,EAAE,KAAK,GAAG,KAAK;IAMzB,QAAQ,CAAC,WAAW,4BAAmC;IACvD,IAAI,CAAC,CAAC,SAAS,OAAO,EAAE,CAAC,SAAS,OAAO,EAAE,GAAG,EAAE,CAAC,EAAE,IAAI,EAAE,WAAW,GAAG,cAAc,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;IA+ChG,OAAO,CAAC,CAAC,SAAS,OAAO,EAAE,CAAC,SAAS,OAAO,EAAE,GAAG,EAAE,CAAC,EAAE,IAAI,EAAE,WAAW,GAAG,OAAO,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;CAgBzG"}
@@ -5,16 +5,60 @@ var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (
5
5
  };
6
6
  var _WSConnection_onMsg, _WSConnection_onClose, _WSConnection_wsOnMessage;
7
7
  import { exception2Result, Future, Result, top_uint8 } from "@adviser/cement";
8
- import { MsgIsError, buildErrorMsg, MsgIsTid } from "./msg-types.js";
8
+ import { MsgIsError, buildErrorMsg } from "./msg-types.js";
9
9
  import { MsgRawConnectionBase } from "./msg-raw-connection-base.js";
10
10
  import { ensureLogger } from "../../utils.js";
11
+ class WaitForTids {
12
+ constructor() {
13
+ this.waitForTids = new Map();
14
+ }
15
+ start(sthis, logger, waitFor) {
16
+ let timeout = undefined;
17
+ if (typeof waitFor.timeout === "number" && waitFor.timeout > 0) {
18
+ timeout = setTimeout(() => {
19
+ this.waitForTids.delete(waitFor.tid);
20
+ waitFor.future.resolve(buildErrorMsg({ logger, sthis }, {
21
+ tid: waitFor.tid,
22
+ }, logger.Error().Any({ tid: waitFor }).Msg("Timeout").AsError()));
23
+ }, waitFor.timeout);
24
+ }
25
+ this.waitForTids.set(waitFor.tid, {
26
+ opts: waitFor,
27
+ timeout,
28
+ });
29
+ }
30
+ stop(tid) {
31
+ const item = this.waitForTids.get(tid);
32
+ if (!item) {
33
+ return;
34
+ }
35
+ if (item.timeout) {
36
+ clearTimeout(item.timeout);
37
+ }
38
+ this.waitForTids.delete(tid);
39
+ }
40
+ resolve(msg) {
41
+ const item = this.waitForTids.get(msg.tid);
42
+ if (!item) {
43
+ return undefined;
44
+ }
45
+ if (item.opts.waitFor(msg)) {
46
+ if (item.timeout) {
47
+ clearTimeout(item.timeout);
48
+ }
49
+ item.opts.future.resolve(msg);
50
+ }
51
+ return item;
52
+ }
53
+ }
54
+ const DefaultRoundTripTime = 1000;
11
55
  export class WSConnection extends MsgRawConnectionBase {
12
56
  constructor(sthis, ws, msgP, exGestalt) {
13
57
  super(sthis, exGestalt);
14
58
  _WSConnection_onMsg.set(this, new Map());
15
59
  _WSConnection_onClose.set(this, new Map());
16
- this.waitForTid = new Map();
17
- this.opened = false;
60
+ this.waitForTid = new WaitForTids();
61
+ this.isReady = false;
18
62
  _WSConnection_wsOnMessage.set(this, async (event) => {
19
63
  const rMsg = await exception2Result(async () => {
20
64
  const msg = this.msgP.ende.decode(await top_uint8(event.data));
@@ -25,24 +69,10 @@ export class WSConnection extends MsgRawConnectionBase {
25
69
  return;
26
70
  }
27
71
  const msg = rMsg.Ok();
28
- const waitFor = this.waitForTid.get(msg.tid);
72
+ this.waitForTid.resolve(msg);
29
73
  Array.from(__classPrivateFieldGet(this, _WSConnection_onMsg, "f").values()).forEach((cb) => {
30
74
  cb(msg);
31
75
  });
32
- if (waitFor) {
33
- if (MsgIsError(msg)) {
34
- this.waitForTid.delete(msg.tid);
35
- waitFor.future.resolve(msg);
36
- }
37
- else if (waitFor.waitFor(msg)) {
38
- this.waitForTid.delete(msg.tid);
39
- waitFor.future.resolve(msg);
40
- }
41
- else {
42
- this.waitForTid.delete(msg.tid);
43
- waitFor.future.resolve(msg);
44
- }
45
- }
46
76
  });
47
77
  this.activeBinds = new Map();
48
78
  this.id = sthis.nextId().str;
@@ -59,7 +89,7 @@ export class WSConnection extends MsgRawConnectionBase {
59
89
  }, this.msgP.timeout);
60
90
  this.ws.onopen = () => {
61
91
  onOpenFuture.resolve(Result.Ok(undefined));
62
- this.opened = true;
92
+ this.isReady = true;
63
93
  };
64
94
  this.ws.onerror = (ierr) => {
65
95
  const err = this.logger.Error().Err(ierr).Msg("WS Error").AsError();
@@ -68,13 +98,13 @@ export class WSConnection extends MsgRawConnectionBase {
68
98
  this.toMsg(res);
69
99
  };
70
100
  this.ws.onmessage = (evt) => {
71
- if (!this.opened) {
101
+ if (!this.isReady) {
72
102
  this.toMsg(buildErrorMsg(this, {}, this.logger.Error().Msg("Received message before onOpen").AsError()));
73
103
  }
74
104
  __classPrivateFieldGet(this, _WSConnection_wsOnMessage, "f").call(this, evt);
75
105
  };
76
106
  this.ws.onclose = () => {
77
- this.opened = false;
107
+ this.isReady = false;
78
108
  this.close().catch((ierr) => {
79
109
  const err = this.logger.Error().Err(ierr).Msg("close error").AsError();
80
110
  onOpenFuture.resolve(Result.Err(err));
@@ -121,6 +151,7 @@ export class WSConnection extends MsgRawConnectionBase {
121
151
  msg: req,
122
152
  opts,
123
153
  },
154
+ controller: undefined,
124
155
  };
125
156
  this.activeBinds.set(state.id, state);
126
157
  return new ReadableStream({
@@ -128,21 +159,27 @@ export class WSConnection extends MsgRawConnectionBase {
128
159
  this.activeBinds.delete(state.id);
129
160
  },
130
161
  start: (controller) => {
162
+ state.controller = controller;
131
163
  this.onMsg((msg) => {
132
- if (MsgIsError(msg)) {
133
- controller.enqueue(msg);
134
- return;
164
+ try {
165
+ if (MsgIsError(msg)) {
166
+ controller.enqueue(msg);
167
+ return;
168
+ }
169
+ if (!opts.waitFor) {
170
+ controller.enqueue(msg);
171
+ }
172
+ else if (opts.waitFor(msg)) {
173
+ controller.enqueue(msg);
174
+ }
135
175
  }
136
- if (!MsgIsTid(msg, req.tid)) {
137
- return;
138
- }
139
- if (opts.waitFor && opts.waitFor(msg)) {
140
- controller.enqueue(msg);
176
+ catch (err) {
177
+ this.logger.Error().Err(err).Any({ msg }).Msg("Error in onMsg callback[ignored]");
141
178
  }
142
179
  });
143
180
  this.send(req);
144
181
  const future = new Future();
145
- this.waitForTid.set(req.tid, { tid: req.tid, future, waitFor: opts.waitFor, timeout: opts.timeout });
182
+ this.waitForTid.start(this.sthis, this.logger, { tid: req.tid, future, waitFor: opts.waitFor });
146
183
  future.asPromise().then((msg) => {
147
184
  if (MsgIsError(msg)) {
148
185
  controller.enqueue(msg);
@@ -153,11 +190,13 @@ export class WSConnection extends MsgRawConnectionBase {
153
190
  });
154
191
  }
155
192
  async request(req, opts) {
156
- if (!this.opened) {
157
- return buildErrorMsg(this, req, this.logger.Error().Msg("Connection not open").AsError());
158
- }
159
193
  const future = new Future();
160
- this.waitForTid.set(req.tid, { tid: req.tid, future, waitFor: opts.waitFor, timeout: opts.timeout });
194
+ this.waitForTid.start(this.sthis, this.logger, {
195
+ tid: req.tid,
196
+ future,
197
+ waitFor: opts.waitFor,
198
+ timeout: opts.timeout ?? DefaultRoundTripTime,
199
+ });
161
200
  await this.send(req);
162
201
  return future.asPromise();
163
202
  }