@verdant-web/server 3.3.4 → 3.3.5

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/bin/server.mjs CHANGED
@@ -1,15 +1,15 @@
1
1
  #!/usr/bin/env node
2
- import { createServer } from 'http';
3
2
  import { createReadStream } from 'fs';
3
+ import { createServer } from 'http';
4
+ import minimist from 'minimist';
4
5
  import { parse, URLSearchParams } from 'url';
5
6
  import {
6
7
  LocalFileStorage,
8
+ ReplicaType,
7
9
  Server,
8
10
  TokenProvider,
9
- ReplicaType,
10
11
  } from '../dist/esm/index.js';
11
12
  import { sqlStorage } from '../dist/esm/storage/index.js';
12
- import minimist from 'minimist';
13
13
 
14
14
  const argv = minimist(process.argv.slice(1));
15
15
 
@@ -39,7 +39,9 @@ const http = createServer((req, res) => {
39
39
 
40
40
  // serve files on the /files path
41
41
  if (url.pathname.startsWith('/files/')) {
42
- const fileStream = createReadStream(`files/${url.pathname.slice(7)}`);
42
+ const file = decodeURIComponent(url.pathname.slice(7));
43
+ console.log('Serving file', file);
44
+ const fileStream = createReadStream(`files/${file}`);
43
45
  fileStream.pipe(res);
44
46
  fileStream.on('error', (err) => {
45
47
  res.writeHead(404);
@@ -1,5 +1,3 @@
1
- /// <reference types="node" resolution-mode="require"/>
2
- /// <reference types="node" resolution-mode="require"/>
3
1
  import { ServerMessage } from '@verdant-web/common';
4
2
  import { IncomingMessage, ServerResponse } from 'http';
5
3
  import { WebSocket } from 'ws';
@@ -1,4 +1,3 @@
1
- /// <reference types="node" resolution-mode="require"/>
2
1
  import { UserInfo, UserInfoUpdate } from '@verdant-web/common';
3
2
  import EventEmitter from 'events';
4
3
  import { UserProfiles } from './Profiles.js';
@@ -1,8 +1,3 @@
1
- /// <reference types="node" resolution-mode="require"/>
2
- /// <reference types="node" resolution-mode="require"/>
3
- /// <reference types="node" resolution-mode="require"/>
4
- /// <reference types="node" resolution-mode="require"/>
5
- /// <reference types="node" resolution-mode="require"/>
6
1
  import { DocumentBaseline, FileData, Operation, ServerMessage } from '@verdant-web/common';
7
2
  import EventEmitter from 'events';
8
3
  import { Server as HttpServer, IncomingMessage, ServerResponse } from 'http';
@@ -10,8 +5,8 @@ import internal from 'stream';
10
5
  import { FileStorage } from './files/FileStorage.js';
11
6
  import { MessageSender } from './MessageSender.js';
12
7
  import { UserProfiles } from './Profiles.js';
13
- import { TokenInfo } from './TokenVerifier.js';
14
8
  import { StorageFactory } from './storage/Storage.js';
9
+ import { TokenInfo } from './TokenVerifier.js';
15
10
  export interface ServerOptions {
16
11
  /**
17
12
  * Attach to a pre-existing HTTP server. Provide this if you have another server,
@@ -9,11 +9,10 @@ var __rest = (this && this.__rest) || function (s, e) {
9
9
  }
10
10
  return t;
11
11
  };
12
+ import { Busboy } from '@fastify/busboy';
12
13
  import { assert, createOid, generateId, VerdantError, } from '@verdant-web/common';
13
- import busboy from 'busboy';
14
14
  import EventEmitter from 'events';
15
15
  import { Server as HttpServer } from 'http';
16
- import { TransformStream } from 'node:stream/web';
17
16
  import { Readable } from 'stream';
18
17
  import { URL } from 'url';
19
18
  import { WebSocketServer } from 'ws';
@@ -83,7 +82,9 @@ export class Server extends EventEmitter {
83
82
  this.getRequestToken = (req) => {
84
83
  if (isFetch(req)) {
85
84
  const authHeader = req.headers.get('Authorization');
86
- assert(authHeader, 'Token is required');
85
+ if (!authHeader) {
86
+ throw new VerdantError(VerdantError.Code.NoToken, undefined, 'Authorization header is required');
87
+ }
87
88
  const [type, token] = authHeader.split(' ');
88
89
  if (type === 'Bearer') {
89
90
  return token;
@@ -106,7 +107,9 @@ export class Server extends EventEmitter {
106
107
  assert(req.url, 'Request URL is required');
107
108
  const url = new URL(req.url, 'http://localhost');
108
109
  const token = url.searchParams.get('token');
109
- assert(token, 'Token is required');
110
+ if (!token) {
111
+ throw new VerdantError(VerdantError.Code.NoToken, undefined, 'Token query parameter is required');
112
+ }
110
113
  return token;
111
114
  };
112
115
  this.createInternalRequestHandler = (pathPrefix = '/sync') => {
@@ -198,6 +201,7 @@ export class Server extends EventEmitter {
198
201
  * must be authenticated with a token to tie it to a library.
199
202
  */
200
203
  this.handleFileRequest = async (req, res) => {
204
+ this.log('info', 'Handling file request', req.url, req.method);
201
205
  try {
202
206
  const info = this.authorizeRequest(req);
203
207
  const url = new URL(req.originalUrl || req.baseUrl || req.url || '', 'http://localhost');
@@ -213,7 +217,9 @@ export class Server extends EventEmitter {
213
217
  id,
214
218
  });
215
219
  this.log('info', 'File upload complete', id);
216
- res.writeHead(200);
220
+ res.writeHead(200, {
221
+ 'Content-Type': 'application/json',
222
+ });
217
223
  res.write(JSON.stringify({ success: true }));
218
224
  res.end();
219
225
  }
@@ -251,12 +257,8 @@ export class Server extends EventEmitter {
251
257
  acc[key] = value;
252
258
  return acc;
253
259
  }, {});
254
- // this is needed because Node's webstreams don't
255
- // like itty's polyfill streams
256
- const intermediate = new TransformStream();
257
- req.body.pipeTo(intermediate.writable);
258
260
  await this.streamIncomingFile({
259
- req: Readable.fromWeb(intermediate.readable),
261
+ req: Readable.fromWeb(req.body),
260
262
  info,
261
263
  headers: headersAsRecord,
262
264
  id,
@@ -294,15 +296,46 @@ export class Server extends EventEmitter {
294
296
  };
295
297
  this.streamIncomingFile = ({ id, req, headers, info, }) => {
296
298
  const fs = this.getFileStorageOrThrow();
299
+ // TODO: remove this once I figured out why the heck multipart
300
+ // file uploads from the integration testing environment are
301
+ // just completely hanging on request...
302
+ if (this.__testMode) {
303
+ this.log('warn', 'TEST MODE: FILE WILL NOT BE WRITTEN', '\n', 'This Verdant server was launched in Test Mode. This is only meant for use', 'in automated testing environments. The file just uploaded WILL NOT be', 'stored on disk or retrievable.');
304
+ // Fake a file upload for testing
305
+ return this.storage.ready
306
+ .then(() => {
307
+ return this.storage.fileMetadata.put(info.libraryId, {
308
+ id,
309
+ libraryId: info.libraryId,
310
+ fileName: 'test.txt',
311
+ type: 'text/plain',
312
+ });
313
+ })
314
+ .then(() => {
315
+ return fs.put(new Readable({
316
+ read() {
317
+ this.push('test');
318
+ this.push(null);
319
+ },
320
+ }), {
321
+ id,
322
+ libraryId: info.libraryId,
323
+ fileName: 'test.txt',
324
+ type: 'text/plain',
325
+ });
326
+ });
327
+ }
297
328
  return new Promise((resolve, reject) => {
298
- const bb = busboy({ headers });
299
- bb.on('file', async (fieldName, stream, fileInfo) => {
329
+ const bb = new Busboy({
330
+ headers: Object.assign(Object.assign({}, headers), { 'content-type': headers['content-type'] }),
331
+ });
332
+ bb.on('file', async (fieldName, stream, fileName, _, mimeType) => {
300
333
  // too many 'info's....
301
334
  const lofiFileInfo = {
302
335
  id,
303
336
  libraryId: info.libraryId,
304
- fileName: fileInfo.filename,
305
- type: fileInfo.mimeType,
337
+ fileName,
338
+ type: mimeType,
306
339
  };
307
340
  // write metadata to storage
308
341
  try {
@@ -315,30 +348,24 @@ export class Server extends EventEmitter {
315
348
  reject(e);
316
349
  }
317
350
  });
318
- bb.on('field', (fieldName, value) => {
319
- if (fieldName === 'file') {
320
- if (this.__testMode) {
321
- // this isn't right in the real world, but in testing it's
322
- // the only way we get file data.
323
- // we create a stream from the data and pass it as if it
324
- // were a file stream
325
- const stream = new Readable();
326
- stream.push(value);
327
- stream.push(null);
328
- const fileInfo = {
329
- filename: 'test.txt',
330
- mimeType: 'text/plain',
331
- };
332
- bb.emit('file', fieldName, stream, fileInfo);
333
- }
334
- else {
335
- throw new Error('Invalid file upload');
336
- }
337
- }
351
+ bb.on('finish', () => {
352
+ this.log('info', 'File upload stream finished');
353
+ resolve();
354
+ });
355
+ bb.on('error', (err) => {
356
+ this.log('error', 'File upload stream error', err);
357
+ reject(new VerdantError(VerdantError.Code.Unexpected, err));
358
+ });
359
+ bb.on('fieldsLimit', () => {
360
+ reject(new VerdantError(VerdantError.Code.Unexpected, undefined, 'Fields limit exceeded'));
361
+ });
362
+ bb.on('filesLimit', () => {
363
+ reject(new VerdantError(VerdantError.Code.Unexpected, undefined, 'Files limit exceeded'));
364
+ });
365
+ bb.on('partsLimit', () => {
366
+ reject(new VerdantError(VerdantError.Code.Unexpected, undefined, 'Parts limit exceeded'));
338
367
  });
339
368
  req.pipe(bb);
340
- bb.on('finish', resolve);
341
- bb.on('error', reject);
342
369
  });
343
370
  };
344
371
  this.getFileData = async (library, fileId) => {
@@ -1 +1 @@
1
- {"version":3,"file":"Server.js","sourceRoot":"","sources":["../../src/Server.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"Server.js","sourceRoot":"","sources":["../../src/Server.ts"],"names":[],"mappings":"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"}
@@ -8,12 +8,12 @@ export declare class TokenProvider {
8
8
  userId: string;
9
9
  libraryId: string;
10
10
  syncEndpoint: string;
11
- fileEndpoint?: string | undefined;
12
- role?: string | undefined;
13
- type?: ReplicaType | undefined;
11
+ fileEndpoint?: string;
12
+ role?: string;
13
+ type?: ReplicaType;
14
14
  /**
15
15
  * The time when the token will expire. A string in the format of "3d" or a number of seconds.
16
16
  */
17
- expiresIn?: string | number | undefined;
17
+ expiresIn?: string | number;
18
18
  }) => string;
19
19
  }
@@ -1,4 +1,3 @@
1
- /// <reference types="node" resolution-mode="require"/>
2
1
  import { Readable } from 'stream';
3
2
  export interface FileInfo {
4
3
  fileName: string;
@@ -13,6 +13,7 @@ export class LocalFileStorage {
13
13
  this.log = log || (() => { });
14
14
  }
15
15
  async put(fileStream, data) {
16
+ this.log('debug', 'Saving file', data.id, data.fileName);
16
17
  const filePath = this.getPath(data);
17
18
  const containingDirectory = path.dirname(path.join(this.rootDirectory, filePath));
18
19
  await fs.promises.mkdir(containingDirectory, {
@@ -20,14 +21,24 @@ export class LocalFileStorage {
20
21
  });
21
22
  const location = this.getStorageLocation(data);
22
23
  const dest = fs.createWriteStream(location);
23
- fileStream.pipe(dest);
24
24
  this.log('info', 'File saving to', location);
25
+ fileStream.pipe(dest);
25
26
  }
26
27
  getUrl(data) {
27
28
  return `${this.host}/${this.getPath(data)}`;
28
29
  }
29
30
  async delete(data) {
30
- await fs.promises.unlink(this.getStorageLocation(data));
31
+ try {
32
+ await fs.promises.unlink(this.getStorageLocation(data));
33
+ }
34
+ catch (e) {
35
+ if (e instanceof Error && e.message.includes('ENOENT')) {
36
+ // ignore
37
+ }
38
+ else {
39
+ throw e;
40
+ }
41
+ }
31
42
  const containingDirectory = path.dirname(path.join(this.rootDirectory, this.getPath(data)));
32
43
  // delete the containing folder if it's empty
33
44
  try {
@@ -1 +1 @@
1
- {"version":3,"file":"FileStorage.js","sourceRoot":"","sources":["../../../src/files/FileStorage.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,IAAI,CAAC;AACzB,OAAO,KAAK,IAAI,MAAM,MAAM,CAAC;AAwB7B,MAAM,OAAO,gBAAgB;IAK5B,YAAY,EACX,aAAa,EACb,IAAI,EACJ,GAAG,GAKH;QAMO,gBAAW,GAAG,CAAC,IAAY,EAAE,EAAE;YACtC,IAAI,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;gBACxB,OAAO,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;YAC1B,CAAC;YACD,OAAO,IAAI,CAAC;QACb,CAAC,CAAC;QAVD,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;QACnC,IAAI,CAAC,aAAa,GAAG,aAAa,CAAC;QACnC,IAAI,CAAC,GAAG,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC,CAAC;IAC9B,CAAC;IASD,KAAK,CAAC,GAAG,CAAC,UAAoB,EAAE,IAAc;QAC7C,MAAM,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;QACpC,MAAM,mBAAmB,GAAG,IAAI,CAAC,OAAO,CACvC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE,QAAQ,CAAC,CACvC,CAAC;QACF,MAAM,EAAE,CAAC,QAAQ,CAAC,KAAK,CAAC,mBAAmB,EAAE;YAC5C,SAAS,EAAE,IAAI;SACf,CAAC,CAAC;QACH,MAAM,QAAQ,GAAG,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,CAAC;QAC/C,MAAM,IAAI,GAAG,EAAE,CAAC,iBAAiB,CAAC,QAAQ,CAAC,CAAC;QAC5C,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACtB,IAAI,CAAC,GAAG,CAAC,MAAM,EAAE,gBAAgB,EAAE,QAAQ,CAAC,CAAC;IAC9C,CAAC;IAED,MAAM,CAAC,IAAc;QACpB,OAAO,GAAG,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC;IAC7C,CAAC;IAED,KAAK,CAAC,MAAM,CAAC,IAAc;QAC1B,MAAM,EAAE,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,CAAC,CAAC;QAExD,MAAM,mBAAmB,GAAG,IAAI,CAAC,OAAO,CACvC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CACjD,CAAC;QAEF,6CAA6C;QAC7C,IAAI,CAAC;YACJ,MAAM,EAAE,CAAC,QAAQ,CAAC,KAAK,CAAC,mBAAmB,CAAC,CAAC;QAC9C,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACZ,SAAS;QACV,CAAC;IACF,CAAC;IAEO,OAAO,CAAC,IAAc;QAC7B,4BAA4B;QAC5B,OAAO,GAAG,IAAI,CAAC,SAAS,IAAI,IAAI,CAAC,EAAE,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;IACxD,CAAC;IAEO,kBAAkB,CAAC,IAAc;QACxC,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC;IAC1D,CAAC;CACD"}
1
+ {"version":3,"file":"FileStorage.js","sourceRoot":"","sources":["../../../src/files/FileStorage.ts"],"names":[],"mappings":"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"}
@@ -8,11 +8,11 @@ export declare class SqlBaselines implements BaselineStorage {
8
8
  private dialect;
9
9
  constructor(db: Kysely<Database>, dialect: 'postgres' | 'sqlite');
10
10
  get: (libraryId: string, oid: string, { tx }?: {
11
- tx?: Kysely<Database> | undefined;
11
+ tx?: Kysely<Database>;
12
12
  }) => Promise<HydratedDocumentBaseline | null>;
13
13
  getAll: (libraryId: string) => Promise<any>;
14
14
  set: (libraryId: string, baseline: DocumentBaseline, { tx, }: {
15
- tx?: Kysely<Database> | undefined;
15
+ tx?: Kysely<Database>;
16
16
  }) => Promise<void>;
17
17
  insertAll: (libraryId: string, baselines: DocumentBaseline[]) => Promise<void>;
18
18
  private hydrate;
@@ -14,7 +14,7 @@ export declare class SqlReplicas implements ReplicaStorage {
14
14
  userId: string;
15
15
  type: ReplicaType;
16
16
  }) => Promise<{
17
- status: 'new' | 'existing' | 'truant';
17
+ status: "new" | "existing" | "truant";
18
18
  replicaInfo: StoredReplicaInfo;
19
19
  }>;
20
20
  getAll: (libraryId: string, options?: {
@@ -1,6 +1,6 @@
1
1
  import { StorageFactory } from '../Storage.js';
2
2
  export declare const sqlStorage: ({ databaseFile: dbFile, skipMigrations, disableWal, }: {
3
3
  databaseFile: string;
4
- skipMigrations?: boolean | undefined;
5
- disableWal?: boolean | undefined;
4
+ skipMigrations?: boolean;
5
+ disableWal?: boolean;
6
6
  }) => StorageFactory;
@@ -9,11 +9,11 @@ export declare class SqlBaselines implements BaselineStorage {
9
9
  private dialect;
10
10
  constructor(dbs: Databases, dialect: 'postgres' | 'sqlite');
11
11
  get: (libraryId: string, oid: string, { tx }?: {
12
- tx?: Kysely<Database> | undefined;
12
+ tx?: Kysely<Database>;
13
13
  }) => Promise<HydratedDocumentBaseline | null>;
14
14
  getAll: (libraryId: string) => Promise<any>;
15
15
  set: (libraryId: string, baseline: DocumentBaseline, { tx, }: {
16
- tx?: Kysely<Database> | undefined;
16
+ tx?: Kysely<Database>;
17
17
  }) => Promise<void>;
18
18
  insertAll: (libraryId: string, baselines: DocumentBaseline[]) => Promise<void>;
19
19
  private hydrate;
@@ -14,7 +14,7 @@ export declare class SqlReplicas implements ReplicaStorage {
14
14
  userId: string;
15
15
  type: ReplicaType;
16
16
  }) => Promise<{
17
- status: 'new' | 'existing' | 'truant';
17
+ status: "new" | "existing" | "truant";
18
18
  replicaInfo: StoredReplicaInfo;
19
19
  }>;
20
20
  getAll: (libraryId: string, options?: {
@@ -1,7 +1,7 @@
1
1
  import { StorageFactory } from '../Storage.js';
2
2
  export declare const sqlShardStorage: ({ databasesDirectory, transferFromUnifiedDatabaseFile, disableWal, closeTimeout, }: {
3
3
  databasesDirectory: string;
4
- transferFromUnifiedDatabaseFile?: string | undefined;
5
- disableWal?: boolean | undefined;
6
- closeTimeout?: number | undefined;
4
+ transferFromUnifiedDatabaseFile?: string;
5
+ disableWal?: boolean;
6
+ closeTimeout?: number;
7
7
  }) => StorageFactory;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@verdant-web/server",
3
- "version": "3.3.4",
3
+ "version": "3.3.5",
4
4
  "access": "public",
5
5
  "type": "module",
6
6
  "bin": {
@@ -26,8 +26,9 @@
26
26
  ],
27
27
  "dependencies": {
28
28
  "@a-type/kysely": "^1.0.2",
29
+ "@fastify/busboy": "^3.1.1",
29
30
  "async-lock": "^1.4.0",
30
- "better-sqlite3": "^11.7.0",
31
+ "better-sqlite3": "^11.8.1",
31
32
  "busboy": "^1.6.0",
32
33
  "jsonwebtoken": "^8.5.1",
33
34
  "kysely": "0.27.5",
@@ -38,7 +39,7 @@
38
39
  },
39
40
  "devDependencies": {
40
41
  "@types/async-lock": "^1.3.0",
41
- "@types/better-sqlite3": "^7.6.0",
42
+ "@types/better-sqlite3": "^7.6.12",
42
43
  "@types/busboy": "^1.5.0",
43
44
  "@types/jsonwebtoken": "^8.5.9",
44
45
  "@types/node": "^20.11.5",
package/src/Server.ts CHANGED
@@ -1,3 +1,4 @@
1
+ import { Busboy } from '@fastify/busboy';
1
2
  import {
2
3
  assert,
3
4
  ClientMessage,
@@ -9,10 +10,8 @@ import {
9
10
  ServerMessage,
10
11
  VerdantError,
11
12
  } from '@verdant-web/common';
12
- import busboy from 'busboy';
13
13
  import EventEmitter from 'events';
14
14
  import { Server as HttpServer, IncomingMessage, ServerResponse } from 'http';
15
- import { TransformStream } from 'node:stream/web';
16
15
  import internal, { Readable } from 'stream';
17
16
  import { URL } from 'url';
18
17
  import { WebSocket, WebSocketServer } from 'ws';
@@ -22,8 +21,8 @@ import { MessageSender } from './MessageSender.js';
22
21
  import { UserProfileLoader, UserProfiles } from './Profiles.js';
23
22
  import { ReplicaKeepaliveTimers } from './ReplicaKeepaliveTimers.js';
24
23
  import { ServerLibrary } from './ServerLibrary.js';
25
- import { TokenInfo, TokenVerifier } from './TokenVerifier.js';
26
24
  import { Storage, StorageFactory } from './storage/Storage.js';
25
+ import { TokenInfo, TokenVerifier } from './TokenVerifier.js';
27
26
 
28
27
  export interface ServerOptions {
29
28
  /**
@@ -237,7 +236,13 @@ export class Server extends EventEmitter implements MessageSender {
237
236
  private getRequestToken = (req: IncomingMessage | Request) => {
238
237
  if (isFetch(req)) {
239
238
  const authHeader = req.headers.get('Authorization');
240
- assert(authHeader, 'Token is required');
239
+ if (!authHeader) {
240
+ throw new VerdantError(
241
+ VerdantError.Code.NoToken,
242
+ undefined,
243
+ 'Authorization header is required',
244
+ );
245
+ }
241
246
  const [type, token] = authHeader.split(' ');
242
247
  if (type === 'Bearer') {
243
248
  return token;
@@ -263,7 +268,13 @@ export class Server extends EventEmitter implements MessageSender {
263
268
  assert(req.url, 'Request URL is required');
264
269
  const url = new URL(req.url, 'http://localhost');
265
270
  const token = url.searchParams.get('token');
266
- assert(token, 'Token is required');
271
+ if (!token) {
272
+ throw new VerdantError(
273
+ VerdantError.Code.NoToken,
274
+ undefined,
275
+ 'Token query parameter is required',
276
+ );
277
+ }
267
278
  return token;
268
279
  };
269
280
 
@@ -437,6 +448,7 @@ export class Server extends EventEmitter implements MessageSender {
437
448
  * must be authenticated with a token to tie it to a library.
438
449
  */
439
450
  handleFileRequest = async (req: IncomingMessage, res: ServerResponse) => {
451
+ this.log('info', 'Handling file request', req.url, req.method);
440
452
  try {
441
453
  const info = this.authorizeRequest(req);
442
454
 
@@ -459,7 +471,9 @@ export class Server extends EventEmitter implements MessageSender {
459
471
  id,
460
472
  });
461
473
  this.log('info', 'File upload complete', id);
462
- res.writeHead(200);
474
+ res.writeHead(200, {
475
+ 'Content-Type': 'application/json',
476
+ });
463
477
  res.write(JSON.stringify({ success: true }));
464
478
  res.end();
465
479
  } else if (req.method === 'GET') {
@@ -505,13 +519,8 @@ export class Server extends EventEmitter implements MessageSender {
505
519
  {} as Record<string, string | string[] | undefined>,
506
520
  );
507
521
 
508
- // this is needed because Node's webstreams don't
509
- // like itty's polyfill streams
510
- const intermediate = new TransformStream();
511
- req.body.pipeTo(intermediate.writable);
512
-
513
522
  await this.streamIncomingFile({
514
- req: Readable.fromWeb(intermediate.readable),
523
+ req: Readable.fromWeb(req.body),
515
524
  info,
516
525
  headers: headersAsRecord,
517
526
  id,
@@ -559,16 +568,61 @@ export class Server extends EventEmitter implements MessageSender {
559
568
  }) => {
560
569
  const fs = this.getFileStorageOrThrow();
561
570
 
562
- return new Promise((resolve, reject) => {
563
- const bb = busboy({ headers });
571
+ // TODO: remove this once I figured out why the heck multipart
572
+ // file uploads from the integration testing environment are
573
+ // just completely hanging on request...
574
+ if (this.__testMode) {
575
+ this.log(
576
+ 'warn',
577
+ 'TEST MODE: FILE WILL NOT BE WRITTEN',
578
+ '\n',
579
+ 'This Verdant server was launched in Test Mode. This is only meant for use',
580
+ 'in automated testing environments. The file just uploaded WILL NOT be',
581
+ 'stored on disk or retrievable.',
582
+ );
583
+ // Fake a file upload for testing
584
+ return this.storage.ready
585
+ .then(() => {
586
+ return this.storage.fileMetadata.put(info.libraryId, {
587
+ id,
588
+ libraryId: info.libraryId,
589
+ fileName: 'test.txt',
590
+ type: 'text/plain',
591
+ });
592
+ })
593
+ .then(() => {
594
+ return fs.put(
595
+ new Readable({
596
+ read() {
597
+ this.push('test');
598
+ this.push(null);
599
+ },
600
+ }),
601
+ {
602
+ id,
603
+ libraryId: info.libraryId,
604
+ fileName: 'test.txt',
605
+ type: 'text/plain',
606
+ },
607
+ );
608
+ });
609
+ }
564
610
 
565
- bb.on('file', async (fieldName, stream, fileInfo) => {
611
+ return new Promise<void>((resolve, reject) => {
612
+ const bb = new Busboy({
613
+ headers: {
614
+ ...headers,
615
+ 'content-type': headers['content-type'] as string,
616
+ },
617
+ });
618
+
619
+ bb.on('file', async (fieldName, stream, fileName, _, mimeType) => {
566
620
  // too many 'info's....
567
621
  const lofiFileInfo: FileInfo = {
568
622
  id,
569
623
  libraryId: info.libraryId,
570
- fileName: fileInfo.filename,
571
- type: fileInfo.mimeType,
624
+ fileName,
625
+ type: mimeType,
572
626
  };
573
627
  // write metadata to storage
574
628
  try {
@@ -580,30 +634,43 @@ export class Server extends EventEmitter implements MessageSender {
580
634
  reject(e);
581
635
  }
582
636
  });
583
- bb.on('field', (fieldName, value) => {
584
- if (fieldName === 'file') {
585
- if (this.__testMode) {
586
- // this isn't right in the real world, but in testing it's
587
- // the only way we get file data.
588
- // we create a stream from the data and pass it as if it
589
- // were a file stream
590
- const stream = new Readable();
591
- stream.push(value);
592
- stream.push(null);
593
- const fileInfo = {
594
- filename: 'test.txt',
595
- mimeType: 'text/plain',
596
- };
597
- bb.emit('file', fieldName, stream, fileInfo);
598
- } else {
599
- throw new Error('Invalid file upload');
600
- }
601
- }
602
- });
603
637
 
638
+ bb.on('finish', () => {
639
+ this.log('info', 'File upload stream finished');
640
+ resolve();
641
+ });
642
+ bb.on('error', (err) => {
643
+ this.log('error', 'File upload stream error', err);
644
+ reject(new VerdantError(VerdantError.Code.Unexpected, err as any));
645
+ });
646
+ bb.on('fieldsLimit', () => {
647
+ reject(
648
+ new VerdantError(
649
+ VerdantError.Code.Unexpected,
650
+ undefined,
651
+ 'Fields limit exceeded',
652
+ ),
653
+ );
654
+ });
655
+ bb.on('filesLimit', () => {
656
+ reject(
657
+ new VerdantError(
658
+ VerdantError.Code.Unexpected,
659
+ undefined,
660
+ 'Files limit exceeded',
661
+ ),
662
+ );
663
+ });
664
+ bb.on('partsLimit', () => {
665
+ reject(
666
+ new VerdantError(
667
+ VerdantError.Code.Unexpected,
668
+ undefined,
669
+ 'Parts limit exceeded',
670
+ ),
671
+ );
672
+ });
604
673
  req.pipe(bb);
605
- bb.on('finish', resolve);
606
- bb.on('error', reject);
607
674
  });
608
675
  };
609
676
 
@@ -50,6 +50,7 @@ export class LocalFileStorage implements FileStorage {
50
50
  };
51
51
 
52
52
  async put(fileStream: Readable, data: FileInfo): Promise<void> {
53
+ this.log('debug', 'Saving file', data.id, data.fileName);
53
54
  const filePath = this.getPath(data);
54
55
  const containingDirectory = path.dirname(
55
56
  path.join(this.rootDirectory, filePath),
@@ -59,8 +60,8 @@ export class LocalFileStorage implements FileStorage {
59
60
  });
60
61
  const location = this.getStorageLocation(data);
61
62
  const dest = fs.createWriteStream(location);
62
- fileStream.pipe(dest);
63
63
  this.log('info', 'File saving to', location);
64
+ fileStream.pipe(dest);
64
65
  }
65
66
 
66
67
  getUrl(data: FileInfo): string {
@@ -68,7 +69,15 @@ export class LocalFileStorage implements FileStorage {
68
69
  }
69
70
 
70
71
  async delete(data: FileInfo): Promise<void> {
71
- await fs.promises.unlink(this.getStorageLocation(data));
72
+ try {
73
+ await fs.promises.unlink(this.getStorageLocation(data));
74
+ } catch (e) {
75
+ if (e instanceof Error && e.message.includes('ENOENT')) {
76
+ // ignore
77
+ } else {
78
+ throw e;
79
+ }
80
+ }
72
81
 
73
82
  const containingDirectory = path.dirname(
74
83
  path.join(this.rootDirectory, this.getPath(data)),