mosquito-transport 1.7.1 → 1.7.2

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/lib/index.d.ts CHANGED
@@ -283,6 +283,7 @@ interface MSocketSnapshot {
283
283
  emitWithAck: Socket['emitWithAck'];
284
284
  });
285
285
  disconnect: Socket['disconnect'];
286
+ disconnected: boolean;
286
287
  }
287
288
 
288
289
  interface MSocketError {
package/lib/index.js CHANGED
@@ -603,8 +603,14 @@ const useMosquitoServer = (app, config) => {
603
603
  },
604
604
  disconnect: (...args) => {
605
605
  socket.disconnect(...args);
606
- }
606
+ },
607
+ disconnected: false
607
608
  };
609
+
610
+ socket.on('disconnect', () => {
611
+ clonedSocket.disconnected = true;
612
+ });
613
+ // TODO: disconnected
608
614
  onSocketSnapshot(clonedSocket);
609
615
  } catch (e) {
610
616
  onSocketError?.(Object.assign(simplifyCaughtError(e).simpleError, { socket }));
@@ -959,7 +965,7 @@ export default class MosquitoTransportServer {
959
965
  deleteFile = async (path = '') => {
960
966
  if (Validator.LINK(path)) {
961
967
  const url = new URL(path);
962
- if (url.pathname.startsWith(`${STORAGE_ROUTE}/`))
968
+ if (!url.pathname.startsWith(`${STORAGE_ROUTE}/`))
963
969
  throw `link must have a pathname that starts with ${STORAGE_ROUTE}/`;
964
970
  path = url.pathname.substring(STORAGE_ROUTE.length);
965
971
  }
@@ -69,9 +69,10 @@ export const streamWritableSource = (path, makeHash, projectName, callback) => {
69
69
  await handler.close();
70
70
  };
71
71
  /** @type {import('fs').WriteStream} */
72
- let fileWriter,
73
- bufferSize = 0,
74
- residueExecutions = [];
72
+ let fileWriter;
73
+ let bufferSize = 0;
74
+ let residueExecutions = [];
75
+ let resolvedData;
75
76
 
76
77
  const hasher = createHash('sha256');
77
78
 
@@ -88,7 +89,7 @@ export const streamWritableSource = (path, makeHash, projectName, callback) => {
88
89
 
89
90
  stream.on('error', async err => {
90
91
  await writeReadyPromise;
91
- reject(err);
92
+ fileWriter.destroy(new Error(err));
92
93
  removeLogFlag(true);
93
94
  });
94
95
 
@@ -144,10 +145,10 @@ export const streamWritableSource = (path, makeHash, projectName, callback) => {
144
145
  await new Promise(async (resolve, reject) => {
145
146
  const writer = createWriteStream(await ensureDir(join(FILES, path)));
146
147
  writtenPath = writer.path;
148
+ writer.on('finish', resolve).on('error', reject);
149
+
147
150
  createReadStream(fileWriter.path)
148
- .pipe(writer)
149
- .on('finish', resolve)
150
- .on('error', reject);
151
+ .pipe(writer);
151
152
  });
152
153
  break;
153
154
  }
@@ -164,7 +165,8 @@ export const streamWritableSource = (path, makeHash, projectName, callback) => {
164
165
  });
165
166
  } else uri = hashPath;
166
167
  await removeLogFlag(true);
167
- resolve(uri);
168
+ resolvedData = uri;
169
+ fileWriter.end();
168
170
  } else {
169
171
  try {
170
172
  await deleteSource(path, projectName);
@@ -172,11 +174,12 @@ export const streamWritableSource = (path, makeHash, projectName, callback) => {
172
174
  await rename(fileWriter.path, hashPath);
173
175
  await saveHash();
174
176
  await removeLogFlag();
175
- resolve(hashPath);
177
+ resolvedData = hashPath;
178
+ fileWriter.end();
176
179
  }
177
180
  } catch (error) {
178
181
  await removeLogFlag(true);
179
- reject(error);
182
+ fileWriter.destroy(new Error(error));
180
183
  }
181
184
  });
182
185
  await openIO(await ensureDir(PENDING_HASH_LOG)).then(async handler => {
@@ -186,25 +189,42 @@ export const streamWritableSource = (path, makeHash, projectName, callback) => {
186
189
  await handler.close();
187
190
  });
188
191
  fileWriter = createWriteStream(await ensureDir(join(HASH_FILE, sessionID)));
192
+ fileWriter.on('finish', () => {
193
+ resolve(resolvedData);
194
+ });
195
+ fileWriter.on('error', (err) => {
196
+ reject(err);
197
+ });
189
198
  residueExecutions.forEach(e => e());
190
199
  residueExecutions = undefined;
191
200
  writeReadyCallback();
192
201
  } else {
193
- let writable, residueBuffers = [];
202
+ /** @type {import('fs').WriteStream} */
203
+ let writable;
204
+ let residueBuffers = [];
194
205
 
195
206
  stream.on('data', buf => {
196
207
  if (residueBuffers) residueBuffers.push(buf);
197
208
  else writable.write(buf);
198
209
  });
199
- stream.on('error', reject);
210
+ stream.on('error', async (err) => {
211
+ await writeReadyPromise;
212
+ writable.destroy(err);
213
+ });
200
214
  stream.on('end', async () => {
201
215
  await writeReadyPromise;
202
216
  try {
203
217
  await deleteSource(path, projectName, 'hash');
204
218
  } catch (_) { }
205
- resolve(writable.path);
219
+ writable.end();
206
220
  });
207
221
  writable = createWriteStream(await ensureDir(join(FILES, path)));
222
+ writable.on('finish', () => {
223
+ resolve(writable.path);
224
+ });
225
+ writable.on('error', (err) => {
226
+ reject(err);
227
+ });
208
228
  residueBuffers.forEach(buf => {
209
229
  writable.write(buf);
210
230
  });
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "mosquito-transport",
3
- "version": "1.7.1",
3
+ "version": "1.7.2",
4
4
  "description": "Quickly spawn server infrastructure along robust authentication, database, storage, and cross-platform compatibility",
5
5
  "main": "lib/index.js",
6
6
  "type": "module",
@@ -43,7 +43,7 @@
43
43
  "entity-serializer": "^1.0.2",
44
44
  "express": "^4.18.2",
45
45
  "google-auth-library": "^8.8.0",
46
- "guard-object": "^1.1.3",
46
+ "guard-object": "^1.1.4",
47
47
  "jsonwebtoken": "^9.0.0",
48
48
  "limit-task": "1.0.0",
49
49
  "lodash": "^4.17.21",