equipped 5.3.1 → 5.3.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/CHANGELOG.md +2 -0
- package/dist/cjs/cache/adapters/in-memory/index.cjs +155 -155
- package/dist/cjs/cache/adapters/in-memory/index.cjs.map +1 -1
- package/dist/cjs/cache/adapters/in-memory/index.min.cjs +3 -3
- package/dist/cjs/cache/adapters/in-memory/index.min.cjs.map +1 -1
- package/dist/cjs/dbs/adapters/mongodb/index.cjs.map +1 -1
- package/dist/cjs/dbs/adapters/mongodb/index.min.cjs +2 -2
- package/dist/cjs/dbs/adapters/mongodb/index.min.cjs.map +1 -1
- package/dist/cjs/dbs/index.cjs +181 -179
- package/dist/cjs/dbs/index.cjs.map +1 -1
- package/dist/cjs/dbs/index.min.cjs +3 -3
- package/dist/cjs/dbs/index.min.cjs.map +1 -1
- package/dist/cjs/events/adapters/kafka/index.cjs.map +1 -1
- package/dist/cjs/events/adapters/kafka/index.min.cjs +2 -2
- package/dist/cjs/events/adapters/kafka/index.min.cjs.map +1 -1
- package/dist/cjs/events/adapters/rabbitmq/index.cjs +179 -179
- package/dist/cjs/events/adapters/rabbitmq/index.cjs.map +1 -1
- package/dist/cjs/events/adapters/rabbitmq/index.min.cjs +3 -3
- package/dist/cjs/events/adapters/rabbitmq/index.min.cjs.map +1 -1
- package/dist/cjs/orm/adapters/mongodb/index.cjs +144 -144
- package/dist/cjs/orm/adapters/mongodb/index.cjs.map +1 -1
- package/dist/cjs/orm/adapters/mongodb/index.min.cjs +1 -1
- package/dist/cjs/orm/adapters/mongodb/index.min.cjs.map +1 -1
- package/dist/cjs/orm/adapters/postgresql/index.cjs +144 -215
- package/dist/cjs/orm/adapters/postgresql/index.cjs.map +1 -1
- package/dist/cjs/orm/adapters/postgresql/index.min.cjs +11 -11
- package/dist/cjs/orm/adapters/postgresql/index.min.cjs.map +1 -1
- package/dist/cjs/server/adapters/express/index.cjs +291 -225
- package/dist/cjs/server/adapters/express/index.cjs.map +1 -1
- package/dist/cjs/server/adapters/express/index.min.cjs +7 -7
- package/dist/cjs/server/adapters/express/index.min.cjs.map +1 -1
- package/dist/cjs/server/adapters/fastify/index.cjs +276 -210
- package/dist/cjs/server/adapters/fastify/index.cjs.map +1 -1
- package/dist/cjs/server/adapters/fastify/index.min.cjs +7 -7
- package/dist/cjs/server/adapters/fastify/index.min.cjs.map +1 -1
- package/dist/cjs/server/index.cjs +81 -15
- package/dist/cjs/server/index.cjs.map +1 -1
- package/dist/cjs/server/index.min.cjs +7 -7
- package/dist/cjs/server/index.min.cjs.map +1 -1
- package/dist/cjs/utilities/index.cjs +0 -5
- package/dist/cjs/utilities/index.cjs.map +1 -1
- package/dist/cjs/utilities/index.min.cjs +2 -2
- package/dist/cjs/utilities/index.min.cjs.map +1 -1
- package/dist/esm/cache/adapters/in-memory/index.min.mjs +1 -1
- package/dist/esm/cache/adapters/in-memory/index.min.mjs.map +1 -1
- package/dist/esm/cache/adapters/in-memory/index.mjs +6 -3
- package/dist/esm/cache/adapters/in-memory/index.mjs.map +1 -1
- package/dist/esm/cache/adapters/redis/index.min.mjs +1 -1
- package/dist/esm/cache/adapters/redis/index.mjs +5 -3
- package/dist/esm/cache/index.min.mjs +1 -1
- package/dist/esm/cache/index.mjs +2 -2
- package/dist/esm/{chunk-5PZACGPI.mjs → chunk-26BOI6IL.mjs} +7 -5
- package/dist/esm/{chunk-5PZACGPI.mjs.map → chunk-26BOI6IL.mjs.map} +1 -1
- package/dist/esm/{chunk-7SQ5JQYR.min.mjs → chunk-AODOD22O.min.mjs} +2 -2
- package/dist/esm/chunk-APSDCRY5.min.mjs +32 -0
- package/dist/esm/chunk-APSDCRY5.min.mjs.map +1 -0
- package/dist/esm/{chunk-A4P7P6BU.mjs → chunk-CEYT5YBA.mjs} +157 -347
- package/dist/esm/chunk-CEYT5YBA.mjs.map +1 -0
- package/dist/esm/chunk-CU2HU5UE.min.mjs +2 -0
- package/dist/esm/chunk-CU2HU5UE.min.mjs.map +1 -0
- package/dist/esm/chunk-DAK7OKSH.min.mjs +2 -0
- package/dist/esm/{chunk-MQXTTWPS.min.mjs.map → chunk-DAK7OKSH.min.mjs.map} +1 -1
- package/dist/esm/{chunk-IRYCN6PI.min.mjs → chunk-DAUQA32Q.min.mjs} +2 -2
- package/dist/esm/{chunk-BWUFPMVG.mjs → chunk-FQYRVHQT.mjs} +2 -2
- package/dist/esm/chunk-NEF3UYFA.mjs +144 -0
- package/dist/esm/chunk-NEF3UYFA.mjs.map +1 -0
- package/dist/esm/chunk-NNFUYHQ7.mjs +135 -0
- package/dist/esm/chunk-NNFUYHQ7.mjs.map +1 -0
- package/dist/esm/{chunk-7CP7ZE2O.mjs → chunk-PCEHFZ6G.mjs} +9 -5
- package/dist/esm/{chunk-7CP7ZE2O.mjs.map → chunk-PCEHFZ6G.mjs.map} +1 -1
- package/dist/esm/{chunk-P4PRHHIY.min.mjs → chunk-QCCDJLBH.min.mjs} +2 -2
- package/dist/esm/{chunk-3TP7NINX.mjs → chunk-RIXTQQUU.mjs} +2 -2
- package/dist/esm/{chunk-LKS5ZE45.mjs → chunk-RPPYCWXW.mjs} +2 -2
- package/dist/esm/{chunk-HXFNN6RI.mjs → chunk-T2O72JBW.mjs} +3 -3
- package/dist/esm/{chunk-TSVHZZE4.mjs → chunk-VQO4MSEC.mjs} +5 -5
- package/dist/esm/{chunk-676VIABN.min.mjs → chunk-X7VNAGLR.min.mjs} +2 -2
- package/dist/esm/chunk-XTXAEBXY.min.mjs +2 -0
- package/dist/esm/{chunk-7NF7PV6S.min.mjs.map → chunk-XTXAEBXY.min.mjs.map} +1 -1
- package/dist/esm/{chunk-2GGMLKRP.min.mjs → chunk-YDQW6ETS.min.mjs} +2 -2
- package/dist/esm/chunk-ZDBDR3IB.min.mjs +2 -0
- package/dist/esm/chunk-ZDBDR3IB.min.mjs.map +1 -0
- package/dist/esm/dbs/adapters/mongodb/index.min.mjs +1 -1
- package/dist/esm/dbs/adapters/mongodb/index.min.mjs.map +1 -1
- package/dist/esm/dbs/adapters/mongodb/index.mjs +8 -5
- package/dist/esm/dbs/adapters/mongodb/index.mjs.map +1 -1
- package/dist/esm/dbs/index.min.mjs +1 -1
- package/dist/esm/dbs/index.mjs +5 -3
- package/dist/esm/errors/index.min.mjs +1 -1
- package/dist/esm/errors/index.mjs +1 -1
- package/dist/esm/events/adapters/kafka/index.min.mjs +1 -1
- package/dist/esm/events/adapters/kafka/index.mjs +4 -2
- package/dist/esm/events/adapters/rabbitmq/index.min.mjs +1 -1
- package/dist/esm/events/adapters/rabbitmq/index.min.mjs.map +1 -1
- package/dist/esm/events/adapters/rabbitmq/index.mjs +7 -3
- package/dist/esm/events/adapters/rabbitmq/index.mjs.map +1 -1
- package/dist/esm/index.min.mjs +1 -1
- package/dist/esm/index.mjs +1 -1
- package/dist/esm/instance/index.min.mjs +1 -1
- package/dist/esm/instance/index.mjs +1 -1
- package/dist/esm/{introspection-YJF3QAUK.mjs → introspection-FGDVYTPP.mjs} +3 -3
- package/dist/esm/introspection-UDWDS6DV.min.mjs +2 -0
- package/dist/esm/jobs/adapters/redis/index.min.mjs +1 -1
- package/dist/esm/jobs/adapters/redis/index.min.mjs.map +1 -1
- package/dist/esm/jobs/adapters/redis/index.mjs +10 -6
- package/dist/esm/jobs/adapters/redis/index.mjs.map +1 -1
- package/dist/esm/orm/adapters/in-memory/index.min.mjs +1 -1
- package/dist/esm/orm/adapters/in-memory/index.mjs +4 -3
- package/dist/esm/orm/adapters/json/index.min.mjs +1 -1
- package/dist/esm/orm/adapters/json/index.min.mjs.map +1 -1
- package/dist/esm/orm/adapters/json/index.mjs +6 -5
- package/dist/esm/orm/adapters/json/index.mjs.map +1 -1
- package/dist/esm/orm/adapters/mongodb/index.min.mjs +1 -1
- package/dist/esm/orm/adapters/mongodb/index.min.mjs.map +1 -1
- package/dist/esm/orm/adapters/mongodb/index.mjs +6 -4
- package/dist/esm/orm/adapters/mongodb/index.mjs.map +1 -1
- package/dist/esm/orm/adapters/postgresql/index.min.mjs +2 -2
- package/dist/esm/orm/adapters/postgresql/index.min.mjs.map +1 -1
- package/dist/esm/orm/adapters/postgresql/index.mjs +8 -5
- package/dist/esm/orm/adapters/postgresql/index.mjs.map +1 -1
- package/dist/esm/orm/index.min.mjs +1 -1
- package/dist/esm/orm/index.mjs +3 -3
- package/dist/esm/server/adapters/express/index.min.mjs +1 -1
- package/dist/esm/server/adapters/express/index.min.mjs.map +1 -1
- package/dist/esm/server/adapters/express/index.mjs +7 -3
- package/dist/esm/server/adapters/express/index.mjs.map +1 -1
- package/dist/esm/server/adapters/fastify/index.min.mjs +1 -1
- package/dist/esm/server/adapters/fastify/index.min.mjs.map +1 -1
- package/dist/esm/server/adapters/fastify/index.mjs +7 -3
- package/dist/esm/server/adapters/fastify/index.mjs.map +1 -1
- package/dist/esm/server/index.min.mjs +1 -1
- package/dist/esm/server/index.mjs +1 -1
- package/dist/esm/utilities/index.min.mjs +1 -1
- package/dist/esm/utilities/index.mjs +5 -4
- package/dist/esm/validations/index.min.mjs +1 -1
- package/dist/esm/validations/index.mjs +1 -1
- package/dist/types/{base-BDTBLZ9a.d.ts → base-qDndMBf8.d.ts} +2 -2
- package/dist/types/cache/adapters/in-memory/index.js +7 -4
- package/dist/types/cache/adapters/redis/index.js +5 -3
- package/dist/types/cache/index.js +2 -2
- package/dist/types/{chunk-4DH3POYM.js → chunk-35CDCTLR.js} +4 -4
- package/dist/types/{chunk-J3TGB5YQ.js → chunk-4YQA5GPT.js} +8 -4
- package/dist/types/{chunk-YLJNBL6J.js → chunk-AQIV47BY.js} +6 -4
- package/dist/types/{chunk-TT5EORDK.js → chunk-BKDWUJRG.js} +156 -346
- package/dist/types/{chunk-5Z26ZURE.js → chunk-DA2VYP7D.js} +1 -1
- package/dist/types/{chunk-LPB5LS7A.js → chunk-GDMGPX4C.js} +1 -1
- package/dist/types/chunk-H5V6ADFD.js +134 -0
- package/dist/types/{chunk-IZDJDGOV.js → chunk-OOKJEMQI.js} +2 -2
- package/dist/types/chunk-PPD4WDG6.js +143 -0
- package/dist/types/{chunk-55CTVK7R.js → chunk-T7K7PO6G.js} +1 -1
- package/dist/types/dbs/adapters/mongodb/index.js +8 -5
- package/dist/types/dbs/index.js +5 -3
- package/dist/types/errors/index.js +1 -1
- package/dist/types/events/adapters/kafka/index.js +4 -2
- package/dist/types/events/adapters/rabbitmq/index.js +7 -3
- package/dist/types/index.js +1 -1
- package/dist/types/instance/index.js +1 -1
- package/dist/types/{introspection-EHGM4RMO.js → introspection-FSNS33CQ.js} +2 -2
- package/dist/types/jobs/adapters/redis/index.js +10 -6
- package/dist/types/orm/adapters/in-memory/index.js +4 -3
- package/dist/types/orm/adapters/json/index.js +6 -5
- package/dist/types/orm/adapters/mongodb/index.js +6 -4
- package/dist/types/orm/adapters/postgresql/index.js +8 -5
- package/dist/types/orm/index.js +3 -3
- package/dist/types/server/adapters/express/index.d.ts +1 -1
- package/dist/types/server/adapters/express/index.js +7 -3
- package/dist/types/server/adapters/fastify/index.d.ts +1 -1
- package/dist/types/server/adapters/fastify/index.js +7 -3
- package/dist/types/server/index.d.ts +2 -2
- package/dist/types/server/index.js +1 -1
- package/dist/types/utilities/index.d.ts +1 -2
- package/dist/types/utilities/index.js +5 -4
- package/dist/types/validations/index.js +1 -1
- package/package.json +1 -1
- package/dist/esm/chunk-7NF7PV6S.min.mjs +0 -2
- package/dist/esm/chunk-A4P7P6BU.mjs.map +0 -1
- package/dist/esm/chunk-IN5YKIJ7.min.mjs +0 -32
- package/dist/esm/chunk-IN5YKIJ7.min.mjs.map +0 -1
- package/dist/esm/chunk-MQXTTWPS.min.mjs +0 -2
- package/dist/esm/introspection-THKMXV5V.min.mjs +0 -2
- /package/dist/esm/{chunk-7SQ5JQYR.min.mjs.map → chunk-AODOD22O.min.mjs.map} +0 -0
- /package/dist/esm/{chunk-IRYCN6PI.min.mjs.map → chunk-DAUQA32Q.min.mjs.map} +0 -0
- /package/dist/esm/{chunk-BWUFPMVG.mjs.map → chunk-FQYRVHQT.mjs.map} +0 -0
- /package/dist/esm/{chunk-P4PRHHIY.min.mjs.map → chunk-QCCDJLBH.min.mjs.map} +0 -0
- /package/dist/esm/{chunk-3TP7NINX.mjs.map → chunk-RIXTQQUU.mjs.map} +0 -0
- /package/dist/esm/{chunk-LKS5ZE45.mjs.map → chunk-RPPYCWXW.mjs.map} +0 -0
- /package/dist/esm/{chunk-HXFNN6RI.mjs.map → chunk-T2O72JBW.mjs.map} +0 -0
- /package/dist/esm/{chunk-TSVHZZE4.mjs.map → chunk-VQO4MSEC.mjs.map} +0 -0
- /package/dist/esm/{chunk-676VIABN.min.mjs.map → chunk-X7VNAGLR.min.mjs.map} +0 -0
- /package/dist/esm/{chunk-2GGMLKRP.min.mjs.map → chunk-YDQW6ETS.min.mjs.map} +0 -0
- /package/dist/esm/{introspection-THKMXV5V.min.mjs.map → introspection-FGDVYTPP.mjs.map} +0 -0
- /package/dist/esm/{introspection-YJF3QAUK.mjs.map → introspection-UDWDS6DV.min.mjs.map} +0 -0
|
@@ -19,12 +19,12 @@ __export(valleyed_exports, {
|
|
|
19
19
|
withResponse: () => withResponse
|
|
20
20
|
});
|
|
21
21
|
import { AsyncLocalStorage } from "async_hooks";
|
|
22
|
-
import { PipeError as PipeError2, v as
|
|
22
|
+
import { PipeError as PipeError2, v as v5 } from "valleyed";
|
|
23
23
|
|
|
24
24
|
// src/instance/index.ts
|
|
25
25
|
import pino from "pino";
|
|
26
26
|
import { ulid } from "ulid";
|
|
27
|
-
import { v as
|
|
27
|
+
import { v as v4 } from "valleyed";
|
|
28
28
|
|
|
29
29
|
// src/errors/equippedError.ts
|
|
30
30
|
var EquippedError = class extends Error {
|
|
@@ -51,7 +51,7 @@ import "@fastify/cors";
|
|
|
51
51
|
import "cors";
|
|
52
52
|
import { Server as SocketServer } from "socket.io";
|
|
53
53
|
import supertest from "supertest";
|
|
54
|
-
import { PipeError, v as
|
|
54
|
+
import { PipeError, v as v2 } from "valleyed";
|
|
55
55
|
|
|
56
56
|
// src/server/openapi.ts
|
|
57
57
|
import { convert } from "@openapi-contrib/json-schema-to-openapi-schema";
|
|
@@ -337,266 +337,6 @@ var openapi = (config) => {
|
|
|
337
337
|
};
|
|
338
338
|
};
|
|
339
339
|
|
|
340
|
-
// src/utilities/authProviders.ts
|
|
341
|
-
var authProviders_exports = {};
|
|
342
|
-
__export(authProviders_exports, {
|
|
343
|
-
signinWithApple: () => signinWithApple,
|
|
344
|
-
signinWithFacebook: () => signinWithFacebook,
|
|
345
|
-
signinWithGoogle: () => signinWithGoogle
|
|
346
|
-
});
|
|
347
|
-
import axios from "axios";
|
|
348
|
-
import jwt from "jsonwebtoken";
|
|
349
|
-
import jwksClient from "jwks-rsa";
|
|
350
|
-
var signinWithGoogle = async (idToken) => {
|
|
351
|
-
const authUrl = `https://oauth2.googleapis.com/tokeninfo?id_token=${idToken}`;
|
|
352
|
-
const { data } = await axios.get(authUrl).catch((err) => {
|
|
353
|
-
throw new EquippedError("Failed to sign in with google", { idToken }, err);
|
|
354
|
-
});
|
|
355
|
-
data.first_name = data.given_name;
|
|
356
|
-
data.last_name = data.family_name;
|
|
357
|
-
return data;
|
|
358
|
-
};
|
|
359
|
-
var signinWithApple = async (idToken) => {
|
|
360
|
-
try {
|
|
361
|
-
const APPLE_BASE = "https://appleid.apple.com";
|
|
362
|
-
const json = jwt.decode(idToken, { complete: true });
|
|
363
|
-
if (!json?.header) throw new EquippedError("Missing JWT header", { idToken, json });
|
|
364
|
-
const { kid, alg } = json.header;
|
|
365
|
-
const publicKey = await jwksClient({ jwksUri: `${APPLE_BASE}/auth/keys`, cache: true }).getSigningKey(kid).then((key) => key.getPublicKey()).catch(() => null);
|
|
366
|
-
if (!publicKey) throw new EquippedError("no publicKey", { idToken, publicKey, json });
|
|
367
|
-
const data = jwt.verify(idToken, publicKey, { algorithms: [alg] });
|
|
368
|
-
if (!data) throw new EquippedError("no data", { idToken, data });
|
|
369
|
-
if (data.iss !== APPLE_BASE) throw new EquippedError("iss doesnt match", { idToken, data });
|
|
370
|
-
if (data.exp * 1e3 < Date.now()) throw new EquippedError("expired idToken", { idToken, data });
|
|
371
|
-
return data;
|
|
372
|
-
} catch (err) {
|
|
373
|
-
throw new EquippedError("Failed to sign in with apple", { idToken }, err);
|
|
374
|
-
}
|
|
375
|
-
};
|
|
376
|
-
var signinWithFacebook = async (accessToken, fields = []) => {
|
|
377
|
-
fields = [.../* @__PURE__ */ new Set([...fields, "name", "picture", "email"])];
|
|
378
|
-
const { data } = await axios.request({
|
|
379
|
-
method: "get",
|
|
380
|
-
url: "https://graph.facebook.com/v15.0/me",
|
|
381
|
-
params: {
|
|
382
|
-
fields: fields.join(","),
|
|
383
|
-
access_token: accessToken
|
|
384
|
-
}
|
|
385
|
-
}).catch((err) => {
|
|
386
|
-
throw new EquippedError("Failed to sign in with facebook", { accessToken, fields }, err);
|
|
387
|
-
});
|
|
388
|
-
const isValidData = fields.every((key) => key in data);
|
|
389
|
-
if (!isValidData) throw new EquippedError("Incomplete scope for access token", { accessToken, fields, data });
|
|
390
|
-
data.email_verified = "true";
|
|
391
|
-
return data;
|
|
392
|
-
};
|
|
393
|
-
|
|
394
|
-
// src/utilities/configurable.ts
|
|
395
|
-
import { v as v2 } from "valleyed";
|
|
396
|
-
function configurable(pipeFn, base) {
|
|
397
|
-
const pipe = pipeFn();
|
|
398
|
-
v2.compile(pipe);
|
|
399
|
-
class Configurable extends base {
|
|
400
|
-
constructor(config, ...baseArgs) {
|
|
401
|
-
super(...baseArgs);
|
|
402
|
-
this.config = config;
|
|
403
|
-
}
|
|
404
|
-
static create(input, ...args) {
|
|
405
|
-
const r = v2.validate(pipe, input);
|
|
406
|
-
if (!r.valid) throw r.error;
|
|
407
|
-
return new this(r.value, ...args);
|
|
408
|
-
}
|
|
409
|
-
}
|
|
410
|
-
return Configurable;
|
|
411
|
-
}
|
|
412
|
-
if (void 0) {
|
|
413
|
-
const { describe, test, expect, expectTypeOf } = void 0;
|
|
414
|
-
const { v: v8 } = await null;
|
|
415
|
-
const testPipe = () => v8.object({
|
|
416
|
-
host: v8.string(),
|
|
417
|
-
port: v8.number()
|
|
418
|
-
});
|
|
419
|
-
class TestBase {
|
|
420
|
-
baseValue;
|
|
421
|
-
constructor() {
|
|
422
|
-
this.baseValue = "base";
|
|
423
|
-
}
|
|
424
|
-
}
|
|
425
|
-
class TestBaseWithArgs {
|
|
426
|
-
label;
|
|
427
|
-
constructor(label) {
|
|
428
|
-
this.label = label;
|
|
429
|
-
}
|
|
430
|
-
}
|
|
431
|
-
describe("configurable", () => {
|
|
432
|
-
test("validation runs in static create before constructor body executes", () => {
|
|
433
|
-
let constructorRan = false;
|
|
434
|
-
const Wrapped = configurable(testPipe, TestBase);
|
|
435
|
-
class MyClass extends Wrapped {
|
|
436
|
-
constructor(config) {
|
|
437
|
-
super(config);
|
|
438
|
-
constructorRan = true;
|
|
439
|
-
}
|
|
440
|
-
}
|
|
441
|
-
expect(() => MyClass.create({ host: 123, port: "bad" })).toThrow();
|
|
442
|
-
expect(constructorRan).toBe(false);
|
|
443
|
-
MyClass.create({ host: "localhost", port: 3e3 });
|
|
444
|
-
expect(constructorRan).toBe(true);
|
|
445
|
-
});
|
|
446
|
-
test("constructor receives validated value", () => {
|
|
447
|
-
const Wrapped = configurable(testPipe, TestBase);
|
|
448
|
-
let receivedConfig;
|
|
449
|
-
class MyClass extends Wrapped {
|
|
450
|
-
constructor(config) {
|
|
451
|
-
super(config);
|
|
452
|
-
receivedConfig = this.config;
|
|
453
|
-
}
|
|
454
|
-
}
|
|
455
|
-
MyClass.create({ host: "localhost", port: 3e3 });
|
|
456
|
-
expect(receivedConfig).toEqual({ host: "localhost", port: 3e3 });
|
|
457
|
-
});
|
|
458
|
-
test("external new is a compile error", () => {
|
|
459
|
-
const Wrapped = configurable(testPipe, TestBase);
|
|
460
|
-
class MyClass extends Wrapped {
|
|
461
|
-
constructor(config) {
|
|
462
|
-
super(config);
|
|
463
|
-
}
|
|
464
|
-
}
|
|
465
|
-
void (() => new MyClass({ host: "localhost", port: 3e3 }));
|
|
466
|
-
});
|
|
467
|
-
test("static Config resolves to PipeOutput<P> at the type level", () => {
|
|
468
|
-
const Wrapped = configurable(testPipe, TestBase);
|
|
469
|
-
class MyClass extends Wrapped {
|
|
470
|
-
constructor(config) {
|
|
471
|
-
super(config);
|
|
472
|
-
}
|
|
473
|
-
}
|
|
474
|
-
expectTypeOf().toEqualTypeOf();
|
|
475
|
-
expect(MyClass.create).toBeTypeOf("function");
|
|
476
|
-
});
|
|
477
|
-
test("ConstructorParameters<This>-based extras inference works for non-zero-arg leaf signatures", () => {
|
|
478
|
-
const Wrapped = configurable(testPipe, TestBase);
|
|
479
|
-
class MyClass extends Wrapped {
|
|
480
|
-
extra;
|
|
481
|
-
constructor(config, extra) {
|
|
482
|
-
super(config);
|
|
483
|
-
this.extra = extra;
|
|
484
|
-
}
|
|
485
|
-
}
|
|
486
|
-
const instance = MyClass.create({ host: "localhost", port: 3e3 }, 42);
|
|
487
|
-
expect(instance.extra).toBe(42);
|
|
488
|
-
expectTypeOf(instance).toHaveProperty("extra");
|
|
489
|
-
expectTypeOf(instance.extra).toEqualTypeOf();
|
|
490
|
-
void (() => MyClass.create({ host: "localhost", port: 3e3 }, "not-a-number"));
|
|
491
|
-
});
|
|
492
|
-
test("base-args forwarding works for non-zero-arg bases", () => {
|
|
493
|
-
const Wrapped = configurable(testPipe, TestBaseWithArgs);
|
|
494
|
-
class MyClass extends Wrapped {
|
|
495
|
-
constructor(config, label) {
|
|
496
|
-
super(config, label);
|
|
497
|
-
}
|
|
498
|
-
}
|
|
499
|
-
const instance = MyClass.create({ host: "localhost", port: 3e3 }, "test-label");
|
|
500
|
-
expect(instance.label).toBe("test-label");
|
|
501
|
-
});
|
|
502
|
-
test("config is accessible as protected readonly on instances", () => {
|
|
503
|
-
const Wrapped = configurable(testPipe, TestBase);
|
|
504
|
-
class MyClass extends Wrapped {
|
|
505
|
-
constructor(config) {
|
|
506
|
-
super(config);
|
|
507
|
-
}
|
|
508
|
-
getHost() {
|
|
509
|
-
return this.config.host;
|
|
510
|
-
}
|
|
511
|
-
}
|
|
512
|
-
const instance = MyClass.create({ host: "localhost", port: 3e3 });
|
|
513
|
-
expect(instance.getHost()).toBe("localhost");
|
|
514
|
-
});
|
|
515
|
-
test("accepts an abstract base class", () => {
|
|
516
|
-
class AbstractBase {
|
|
517
|
-
}
|
|
518
|
-
const Wrapped = configurable(testPipe, AbstractBase);
|
|
519
|
-
class Concrete extends Wrapped {
|
|
520
|
-
constructor(config) {
|
|
521
|
-
super(config);
|
|
522
|
-
}
|
|
523
|
-
greet() {
|
|
524
|
-
return `hello from ${this.config.host}`;
|
|
525
|
-
}
|
|
526
|
-
}
|
|
527
|
-
const instance = Concrete.create({ host: "localhost", port: 3e3 });
|
|
528
|
-
expect(instance.greet()).toBe("hello from localhost");
|
|
529
|
-
expectTypeOf(instance).toHaveProperty("config");
|
|
530
|
-
});
|
|
531
|
-
});
|
|
532
|
-
}
|
|
533
|
-
|
|
534
|
-
// src/utilities/hash.ts
|
|
535
|
-
var hash_exports = {};
|
|
536
|
-
__export(hash_exports, {
|
|
537
|
-
compare: () => compare2,
|
|
538
|
-
hash: () => hash2
|
|
539
|
-
});
|
|
540
|
-
import * as bcrypt from "bcryptjs";
|
|
541
|
-
var hash2 = async (password) => {
|
|
542
|
-
password = password.trim();
|
|
543
|
-
if (!password) return "";
|
|
544
|
-
return await bcrypt.hash(password, Instance.get().settings.utils.hashSaltRounds);
|
|
545
|
-
};
|
|
546
|
-
var compare2 = async (plainPassword, hashed) => {
|
|
547
|
-
plainPassword = plainPassword.trim();
|
|
548
|
-
if (!plainPassword && plainPassword === hashed) return true;
|
|
549
|
-
return await bcrypt.compare(plainPassword, hashed);
|
|
550
|
-
};
|
|
551
|
-
|
|
552
|
-
// src/utilities/json.ts
|
|
553
|
-
var parseJSONValue = (data) => {
|
|
554
|
-
try {
|
|
555
|
-
if (data?.constructor?.name !== "String") return data;
|
|
556
|
-
return JSON.parse(data);
|
|
557
|
-
} catch {
|
|
558
|
-
return data;
|
|
559
|
-
}
|
|
560
|
-
};
|
|
561
|
-
function parseJSONObject(data) {
|
|
562
|
-
return Object.fromEntries(Object.entries(data).map(([key, value]) => [key, parseJSONValue(value)]));
|
|
563
|
-
}
|
|
564
|
-
|
|
565
|
-
// src/utilities/media.ts
|
|
566
|
-
import { parseBuffer } from "music-metadata";
|
|
567
|
-
var getMediaDuration = async (buffer) => {
|
|
568
|
-
try {
|
|
569
|
-
const meta = await parseBuffer(buffer);
|
|
570
|
-
return meta.format.duration ?? 0;
|
|
571
|
-
} catch {
|
|
572
|
-
return 0;
|
|
573
|
-
}
|
|
574
|
-
};
|
|
575
|
-
|
|
576
|
-
// src/utilities/random.ts
|
|
577
|
-
var random_exports = {};
|
|
578
|
-
__export(random_exports, {
|
|
579
|
-
number: () => number,
|
|
580
|
-
string: () => string
|
|
581
|
-
});
|
|
582
|
-
import crypto from "crypto";
|
|
583
|
-
function string(length = 20) {
|
|
584
|
-
return crypto.randomBytes(length).toString("hex").slice(0, length);
|
|
585
|
-
}
|
|
586
|
-
function number(min = 0, max = 2 ** 48 - 1) {
|
|
587
|
-
return crypto.randomInt(min, max);
|
|
588
|
-
}
|
|
589
|
-
|
|
590
|
-
// src/utilities/retry.ts
|
|
591
|
-
var sleep = (ms) => new Promise((resolve) => setTimeout(resolve, ms));
|
|
592
|
-
var retry = async (cb, tries, waitTimeInMs) => {
|
|
593
|
-
if (tries <= 0) throw new EquippedError("out of tries", { tries, waitTimeInMs });
|
|
594
|
-
const result = await cb();
|
|
595
|
-
if (result.done === true) return result.value;
|
|
596
|
-
await sleep(waitTimeInMs);
|
|
597
|
-
return await retry(cb, tries - 1, waitTimeInMs);
|
|
598
|
-
};
|
|
599
|
-
|
|
600
340
|
// src/server/requests.ts
|
|
601
341
|
var Request = class {
|
|
602
342
|
ip;
|
|
@@ -625,8 +365,10 @@ var Request = class {
|
|
|
625
365
|
this.params = params;
|
|
626
366
|
this.cookies = cookies;
|
|
627
367
|
this.headers = headers;
|
|
628
|
-
|
|
629
|
-
|
|
368
|
+
const hasFiles = Object.keys(files).length > 0;
|
|
369
|
+
const bodyFields = body && typeof body === "object" && !Array.isArray(body) ? body : {};
|
|
370
|
+
this.query = query;
|
|
371
|
+
this.body = hasFiles ? Object.assign({}, bodyFields, files) : body;
|
|
630
372
|
}
|
|
631
373
|
pipe(stream, opts = {}) {
|
|
632
374
|
return new Response({ ...opts, piped: true, body: stream });
|
|
@@ -672,6 +414,83 @@ var Response = class {
|
|
|
672
414
|
});
|
|
673
415
|
}
|
|
674
416
|
};
|
|
417
|
+
if (void 0) {
|
|
418
|
+
const { describe, expect, test } = void 0;
|
|
419
|
+
describe("Request", () => {
|
|
420
|
+
test("preserves adapter-provided query and body values without JSON normalization", () => {
|
|
421
|
+
const query = {
|
|
422
|
+
count: "10",
|
|
423
|
+
active: "true",
|
|
424
|
+
filter: '{"name":"test"}',
|
|
425
|
+
quoted: '"value"'
|
|
426
|
+
};
|
|
427
|
+
const body = {
|
|
428
|
+
count: "10",
|
|
429
|
+
active: "false",
|
|
430
|
+
payload: '{"nested":true}',
|
|
431
|
+
quoted: '"value"'
|
|
432
|
+
};
|
|
433
|
+
const request = new Request({
|
|
434
|
+
ip: void 0,
|
|
435
|
+
body,
|
|
436
|
+
cookies: {},
|
|
437
|
+
params: {},
|
|
438
|
+
query,
|
|
439
|
+
method: "post",
|
|
440
|
+
path: "/items",
|
|
441
|
+
headers: {},
|
|
442
|
+
files: {}
|
|
443
|
+
});
|
|
444
|
+
expect(request.query).toEqual(query);
|
|
445
|
+
expect(request.body).toEqual(body);
|
|
446
|
+
});
|
|
447
|
+
test("continues merging uploaded files into body fields without parsing string fields", () => {
|
|
448
|
+
const file = {
|
|
449
|
+
name: "avatar.png",
|
|
450
|
+
type: "image/png",
|
|
451
|
+
size: 4,
|
|
452
|
+
isTruncated: false,
|
|
453
|
+
data: Buffer.from("file"),
|
|
454
|
+
duration: 0
|
|
455
|
+
};
|
|
456
|
+
const body = { metadata: '{"alt":"avatar"}' };
|
|
457
|
+
const request = new Request({
|
|
458
|
+
ip: void 0,
|
|
459
|
+
body,
|
|
460
|
+
cookies: {},
|
|
461
|
+
params: {},
|
|
462
|
+
query: {},
|
|
463
|
+
method: "post",
|
|
464
|
+
path: "/upload",
|
|
465
|
+
headers: {},
|
|
466
|
+
files: { avatar: [file] }
|
|
467
|
+
});
|
|
468
|
+
expect(request.body).toEqual({ metadata: '{"alt":"avatar"}', avatar: [file] });
|
|
469
|
+
});
|
|
470
|
+
test("does not spread non-object body values when uploaded files are present", () => {
|
|
471
|
+
const file = {
|
|
472
|
+
name: "avatar.png",
|
|
473
|
+
type: "image/png",
|
|
474
|
+
size: 4,
|
|
475
|
+
isTruncated: false,
|
|
476
|
+
data: Buffer.from("file"),
|
|
477
|
+
duration: 0
|
|
478
|
+
};
|
|
479
|
+
const request = new Request({
|
|
480
|
+
ip: void 0,
|
|
481
|
+
body: "raw text body",
|
|
482
|
+
cookies: {},
|
|
483
|
+
params: {},
|
|
484
|
+
query: {},
|
|
485
|
+
method: "post",
|
|
486
|
+
path: "/upload",
|
|
487
|
+
headers: {},
|
|
488
|
+
files: { avatar: [file] }
|
|
489
|
+
});
|
|
490
|
+
expect(request.body).toEqual({ avatar: [file] });
|
|
491
|
+
});
|
|
492
|
+
});
|
|
493
|
+
}
|
|
675
494
|
|
|
676
495
|
// src/server/requests-auth-methods/base.ts
|
|
677
496
|
import "http2";
|
|
@@ -709,7 +528,7 @@ var BaseApiKeyRequestAuthMethod = class extends BaseRequestAuthMethod {
|
|
|
709
528
|
|
|
710
529
|
// src/server/requests-auth-methods/jwt.ts
|
|
711
530
|
import cookie from "@fastify/cookie";
|
|
712
|
-
import
|
|
531
|
+
import jwt from "jsonwebtoken";
|
|
713
532
|
var BaseJwtRequestAuthMethod = class extends BaseRequestAuthMethod {
|
|
714
533
|
options;
|
|
715
534
|
constructor(options) {
|
|
@@ -720,14 +539,14 @@ var BaseJwtRequestAuthMethod = class extends BaseRequestAuthMethod {
|
|
|
720
539
|
return `${this.options.storagePrefix ?? ""}${userId}`;
|
|
721
540
|
}
|
|
722
541
|
async createToken(payload) {
|
|
723
|
-
const token =
|
|
542
|
+
const token = jwt.sign(payload, this.options.signingKey, { expiresIn: this.options.storageTTL });
|
|
724
543
|
await this.store(this.#getKey(payload.id), token, this.options.storageTTL);
|
|
725
544
|
return token;
|
|
726
545
|
}
|
|
727
546
|
async parse(headers) {
|
|
728
547
|
try {
|
|
729
548
|
const token = await this.parseHeader(headers);
|
|
730
|
-
const user =
|
|
549
|
+
const user = jwt.verify(token, this.options.signingKey);
|
|
731
550
|
if (!user) throw new NotAuthenticatedError();
|
|
732
551
|
if (this.options.enforceSingleSession) {
|
|
733
552
|
const cachedToken = await this.retrieve(this.#getKey(user.id));
|
|
@@ -736,7 +555,7 @@ var BaseJwtRequestAuthMethod = class extends BaseRequestAuthMethod {
|
|
|
736
555
|
return user;
|
|
737
556
|
} catch (err) {
|
|
738
557
|
if (err instanceof TokenExpired) throw err;
|
|
739
|
-
if (err instanceof
|
|
558
|
+
if (err instanceof jwt.TokenExpiredError) throw new TokenExpired(void 0, err);
|
|
740
559
|
else throw new NotAuthenticatedError(void 0, err);
|
|
741
560
|
}
|
|
742
561
|
}
|
|
@@ -891,50 +710,50 @@ var SocketEmitter = class {
|
|
|
891
710
|
};
|
|
892
711
|
|
|
893
712
|
// src/server/adapters/base.ts
|
|
894
|
-
var serverConfigPipe = () =>
|
|
895
|
-
port:
|
|
896
|
-
cors:
|
|
897
|
-
|
|
898
|
-
origin:
|
|
899
|
-
methods:
|
|
900
|
-
credentials:
|
|
713
|
+
var serverConfigPipe = () => v2.object({
|
|
714
|
+
port: v2.number(),
|
|
715
|
+
cors: v2.optional(
|
|
716
|
+
v2.object({
|
|
717
|
+
origin: v2.optional(v2.or([v2.array(v2.string()), v2.is(true)])),
|
|
718
|
+
methods: v2.optional(v2.array(v2.in(Object.values(Methods)))),
|
|
719
|
+
credentials: v2.optional(v2.boolean())
|
|
901
720
|
})
|
|
902
721
|
),
|
|
903
|
-
eventBus:
|
|
904
|
-
publicPath:
|
|
905
|
-
healthPath:
|
|
906
|
-
openapi:
|
|
907
|
-
|
|
908
|
-
docsVersion:
|
|
909
|
-
docsBaseUrl:
|
|
910
|
-
docsPath:
|
|
722
|
+
eventBus: v2.optional(v2.instanceOf(EventBus)),
|
|
723
|
+
publicPath: v2.optional(v2.string()),
|
|
724
|
+
healthPath: v2.optional(v2.string()),
|
|
725
|
+
openapi: v2.defaults(
|
|
726
|
+
v2.object({
|
|
727
|
+
docsVersion: v2.defaults(v2.string(), "1.0.0"),
|
|
728
|
+
docsBaseUrl: v2.defaults(v2.array(v2.string()), ["/"]),
|
|
729
|
+
docsPath: v2.defaults(v2.string(), "/__docs")
|
|
911
730
|
}),
|
|
912
731
|
{}
|
|
913
732
|
),
|
|
914
|
-
requests:
|
|
915
|
-
|
|
916
|
-
log:
|
|
917
|
-
rateLimit:
|
|
918
|
-
|
|
919
|
-
enabled:
|
|
920
|
-
periodInMs:
|
|
921
|
-
limit:
|
|
733
|
+
requests: v2.defaults(
|
|
734
|
+
v2.object({
|
|
735
|
+
log: v2.defaults(v2.boolean(), true),
|
|
736
|
+
rateLimit: v2.defaults(
|
|
737
|
+
v2.object({
|
|
738
|
+
enabled: v2.defaults(v2.boolean(), false),
|
|
739
|
+
periodInMs: v2.defaults(v2.number(), 60 * 60 * 1e3),
|
|
740
|
+
limit: v2.defaults(v2.number(), 5e3)
|
|
922
741
|
}),
|
|
923
742
|
{}
|
|
924
743
|
),
|
|
925
|
-
slowdown:
|
|
926
|
-
|
|
927
|
-
enabled:
|
|
928
|
-
periodInMs:
|
|
929
|
-
delayAfter:
|
|
930
|
-
delayInMs:
|
|
744
|
+
slowdown: v2.defaults(
|
|
745
|
+
v2.object({
|
|
746
|
+
enabled: v2.defaults(v2.boolean(), false),
|
|
747
|
+
periodInMs: v2.defaults(v2.number(), 10 * 60 * 1e3),
|
|
748
|
+
delayAfter: v2.defaults(v2.number(), 2e3),
|
|
749
|
+
delayInMs: v2.defaults(v2.number(), 500)
|
|
931
750
|
}),
|
|
932
751
|
{}
|
|
933
752
|
)
|
|
934
753
|
}),
|
|
935
754
|
{}
|
|
936
755
|
),
|
|
937
|
-
socketsAuthMethods:
|
|
756
|
+
socketsAuthMethods: v2.defaults(v2.array(v2.instanceOf(BaseRequestAuthMethod)), [])
|
|
938
757
|
});
|
|
939
758
|
var rawResponseHandledSymbol = /* @__PURE__ */ Symbol("rawResponseHandled");
|
|
940
759
|
var rawResponseHandled = Object.freeze({ [rawResponseHandledSymbol]: true });
|
|
@@ -955,7 +774,7 @@ function writeRawHandlerError(response, error) {
|
|
|
955
774
|
var errorsSchemas = Object.entries(StatusCodes).filter(([, value]) => value > 399).map(([key, value]) => ({
|
|
956
775
|
status: value,
|
|
957
776
|
contentType: "application/json",
|
|
958
|
-
pipe:
|
|
777
|
+
pipe: v2.meta(v2.array(v2.object({ message: v2.string(), field: v2.optional(v2.string()) })), {
|
|
959
778
|
$refId: `Errors.${key}Response`,
|
|
960
779
|
description: `${key} Response`
|
|
961
780
|
})
|
|
@@ -1112,37 +931,37 @@ var Server = class {
|
|
|
1112
931
|
{ key: "responseCookies", type: "response" }
|
|
1113
932
|
];
|
|
1114
933
|
defs.forEach((def) => {
|
|
1115
|
-
const pipe = schema[def.key] ??
|
|
934
|
+
const pipe = schema[def.key] ?? v2.any();
|
|
1116
935
|
if (def.skip) return;
|
|
1117
936
|
if (def.type === "request") {
|
|
1118
937
|
requestPipeDefs[def.key] = pipe;
|
|
1119
|
-
jsonSchema.request[def.key] =
|
|
938
|
+
jsonSchema.request[def.key] = v2.schema(pipe);
|
|
1120
939
|
}
|
|
1121
940
|
if (def.type === "response") {
|
|
1122
941
|
const pipeRecords = errorsSchemas.concat({ status: defaultStatusCode, contentType, pipe });
|
|
1123
|
-
responsePipeDefs[def.key] =
|
|
942
|
+
responsePipeDefs[def.key] = v2.any().pipe((input) => {
|
|
1124
943
|
const p = pipeRecords.find((rec) => rec.status === status)?.pipe;
|
|
1125
944
|
if (!p) throw PipeError.root(`schema not defined for status code: ${status}`, input);
|
|
1126
|
-
const r =
|
|
945
|
+
const r = v2.validate(p, input);
|
|
1127
946
|
if (!r.valid) throw r.error;
|
|
1128
947
|
return r.value;
|
|
1129
948
|
});
|
|
1130
949
|
jsonSchema.response[def.key] = pipeRecords.map((record) => ({
|
|
1131
950
|
status: record.status,
|
|
1132
951
|
contentType: record.contentType,
|
|
1133
|
-
schema:
|
|
952
|
+
schema: v2.schema(record.pipe)
|
|
1134
953
|
}));
|
|
1135
954
|
}
|
|
1136
955
|
});
|
|
1137
|
-
const requestPipe =
|
|
1138
|
-
|
|
1139
|
-
const responsePipe =
|
|
1140
|
-
|
|
956
|
+
const requestPipe = v2.object(requestPipeDefs);
|
|
957
|
+
v2.compile(requestPipe, { allErrors: true });
|
|
958
|
+
const responsePipe = v2.object(responsePipeDefs);
|
|
959
|
+
v2.compile(responsePipe, { allErrors: true });
|
|
1141
960
|
const validateRequest = async (request) => {
|
|
1142
961
|
if (!Object.keys(requestPipeDefs)) return request;
|
|
1143
962
|
const validity = requestLocalStorage.run(
|
|
1144
963
|
request,
|
|
1145
|
-
() =>
|
|
964
|
+
() => v2.validate(requestPipe, {
|
|
1146
965
|
params: request.params,
|
|
1147
966
|
headers: request.headers,
|
|
1148
967
|
query: request.query,
|
|
@@ -1164,7 +983,7 @@ var Server = class {
|
|
|
1164
983
|
contentType = response.contentType;
|
|
1165
984
|
const validity = responseLocalStorage.run(
|
|
1166
985
|
response,
|
|
1167
|
-
() =>
|
|
986
|
+
() => v2.validate(responsePipe, {
|
|
1168
987
|
responseHeaders: response.headers,
|
|
1169
988
|
responseCookies: Object.fromEntries(Object.entries(response.cookies).map(([key, val]) => [key, val.value])),
|
|
1170
989
|
response: response.body
|
|
@@ -1858,22 +1677,22 @@ if (void 0) {
|
|
|
1858
1677
|
}
|
|
1859
1678
|
|
|
1860
1679
|
// src/instance/settings.ts
|
|
1861
|
-
import { v as
|
|
1862
|
-
var instanceSettingsPipe = () =>
|
|
1863
|
-
app:
|
|
1864
|
-
name:
|
|
1680
|
+
import { v as v3 } from "valleyed";
|
|
1681
|
+
var instanceSettingsPipe = () => v3.object({
|
|
1682
|
+
app: v3.object({
|
|
1683
|
+
name: v3.string()
|
|
1865
1684
|
}),
|
|
1866
|
-
log:
|
|
1867
|
-
|
|
1868
|
-
level:
|
|
1685
|
+
log: v3.defaults(
|
|
1686
|
+
v3.object({
|
|
1687
|
+
level: v3.defaults(v3.in(["fatal", "error", "warn", "info", "debug", "trace", "silent"]), "info")
|
|
1869
1688
|
}),
|
|
1870
1689
|
{}
|
|
1871
1690
|
),
|
|
1872
|
-
utils:
|
|
1873
|
-
|
|
1874
|
-
hashSaltRounds:
|
|
1875
|
-
paginationDefaultLimit:
|
|
1876
|
-
maxFileUploadSizeInMb:
|
|
1691
|
+
utils: v3.defaults(
|
|
1692
|
+
v3.object({
|
|
1693
|
+
hashSaltRounds: v3.defaults(v3.number(), 10),
|
|
1694
|
+
paginationDefaultLimit: v3.defaults(v3.number(), 100),
|
|
1695
|
+
maxFileUploadSizeInMb: v3.defaults(v3.number(), 500)
|
|
1877
1696
|
}),
|
|
1878
1697
|
{}
|
|
1879
1698
|
)
|
|
@@ -1923,7 +1742,7 @@ var Instance = class _Instance {
|
|
|
1923
1742
|
}
|
|
1924
1743
|
}
|
|
1925
1744
|
static envs(envsPipe) {
|
|
1926
|
-
const envValidity =
|
|
1745
|
+
const envValidity = v4.validate(envsPipe, process.env);
|
|
1927
1746
|
if (!envValidity.valid) {
|
|
1928
1747
|
_Instance.crash(
|
|
1929
1748
|
new EquippedError(`Environment variables are not valid
|
|
@@ -1936,7 +1755,7 @@ ${envValidity.error.toString()}`, {
|
|
|
1936
1755
|
}
|
|
1937
1756
|
static create(settings) {
|
|
1938
1757
|
if (_Instance.#instance) return _Instance.crash(new EquippedError("Instance has been initialized already", {}));
|
|
1939
|
-
const settingsValidity =
|
|
1758
|
+
const settingsValidity = v4.validate(instanceSettingsPipe(), settings);
|
|
1940
1759
|
if (!settingsValidity.valid) {
|
|
1941
1760
|
_Instance.crash(
|
|
1942
1761
|
new EquippedError(`Settings are not valid
|
|
@@ -1991,40 +1810,40 @@ ${settingsValidity.error.toString()}`, {
|
|
|
1991
1810
|
};
|
|
1992
1811
|
|
|
1993
1812
|
// src/validations/valleyed.ts
|
|
1994
|
-
var filePipe = (err) =>
|
|
1995
|
-
|
|
1813
|
+
var filePipe = (err) => v5.array(
|
|
1814
|
+
v5.file(err).pipe((input) => {
|
|
1996
1815
|
const err2 = `is larger than allowed limit of ${Instance.get().settings.utils.maxFileUploadSizeInMb}mb`;
|
|
1997
1816
|
const valid = input ? !input.isTruncated : true;
|
|
1998
1817
|
if (valid) return input;
|
|
1999
1818
|
throw PipeError2.root(err2, input);
|
|
2000
1819
|
})
|
|
2001
1820
|
);
|
|
2002
|
-
var incomingFile = (err) =>
|
|
2003
|
-
|
|
2004
|
-
filePipe(err).pipe(
|
|
1821
|
+
var incomingFile = (err) => v5.define(
|
|
1822
|
+
v5.compile(
|
|
1823
|
+
filePipe(err).pipe(v5.min(1, "no file provided")).pipe((files) => files[0])
|
|
2005
1824
|
),
|
|
2006
1825
|
{ schema: () => ({ type: "string", format: "binary" }) }
|
|
2007
1826
|
);
|
|
2008
|
-
var incomingFiles = (err) =>
|
|
1827
|
+
var incomingFiles = (err) => v5.define(v5.compile(filePipe(err)), {
|
|
2009
1828
|
schema: () => ({ type: "string", format: "binary" })
|
|
2010
1829
|
});
|
|
2011
1830
|
var requestLocalStorage = new AsyncLocalStorage();
|
|
2012
1831
|
var responseLocalStorage = new AsyncLocalStorage();
|
|
2013
|
-
var withRequest = (fn) =>
|
|
1832
|
+
var withRequest = (fn) => v5.define((input) => {
|
|
2014
1833
|
const req = requestLocalStorage.getStore();
|
|
2015
1834
|
if (!req) throw new Error("Request not found in context");
|
|
2016
|
-
const validated =
|
|
1835
|
+
const validated = v5.validate(fn(req), input);
|
|
2017
1836
|
return validated.valid ? validated.value : validated.error;
|
|
2018
1837
|
});
|
|
2019
|
-
var withResponse = (fn) =>
|
|
1838
|
+
var withResponse = (fn) => v5.define((input) => {
|
|
2020
1839
|
const res = responseLocalStorage.getStore();
|
|
2021
1840
|
if (!res) throw new Error("Response not found in context");
|
|
2022
|
-
const validated =
|
|
1841
|
+
const validated = v5.validate(fn(res), input);
|
|
2023
1842
|
return validated.valid ? validated.value : validated.error;
|
|
2024
1843
|
});
|
|
2025
1844
|
|
|
2026
1845
|
// src/validations/index.ts
|
|
2027
|
-
import { v as
|
|
1846
|
+
import { v as v6 } from "valleyed";
|
|
2028
1847
|
function pipeErrorToValidationError(error) {
|
|
2029
1848
|
const errorsObject = error.messages.reduce((acc, { path = "", message }) => {
|
|
2030
1849
|
if (acc[path]) acc[path].messages.push(message);
|
|
@@ -2034,7 +1853,7 @@ function pipeErrorToValidationError(error) {
|
|
|
2034
1853
|
return new ValidationError(Object.values(errorsObject));
|
|
2035
1854
|
}
|
|
2036
1855
|
function validate(pipe, value) {
|
|
2037
|
-
const validity =
|
|
1856
|
+
const validity = v6.validate(pipe, value);
|
|
2038
1857
|
if (validity.valid) return validity.value;
|
|
2039
1858
|
throw pipeErrorToValidationError(validity.error);
|
|
2040
1859
|
}
|
|
@@ -2051,15 +1870,6 @@ export {
|
|
|
2051
1870
|
makeResponseMiddleware,
|
|
2052
1871
|
makeErrorMiddleware,
|
|
2053
1872
|
Router,
|
|
2054
|
-
authProviders_exports,
|
|
2055
|
-
configurable,
|
|
2056
|
-
hash_exports,
|
|
2057
|
-
parseJSONValue,
|
|
2058
|
-
parseJSONObject,
|
|
2059
|
-
getMediaDuration,
|
|
2060
|
-
random_exports,
|
|
2061
|
-
sleep,
|
|
2062
|
-
retry,
|
|
2063
1873
|
Request,
|
|
2064
1874
|
Response,
|
|
2065
1875
|
BaseRequestAuthMethod,
|