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.
Files changed (191) hide show
  1. package/CHANGELOG.md +2 -0
  2. package/dist/cjs/cache/adapters/in-memory/index.cjs +155 -155
  3. package/dist/cjs/cache/adapters/in-memory/index.cjs.map +1 -1
  4. package/dist/cjs/cache/adapters/in-memory/index.min.cjs +3 -3
  5. package/dist/cjs/cache/adapters/in-memory/index.min.cjs.map +1 -1
  6. package/dist/cjs/dbs/adapters/mongodb/index.cjs.map +1 -1
  7. package/dist/cjs/dbs/adapters/mongodb/index.min.cjs +2 -2
  8. package/dist/cjs/dbs/adapters/mongodb/index.min.cjs.map +1 -1
  9. package/dist/cjs/dbs/index.cjs +181 -179
  10. package/dist/cjs/dbs/index.cjs.map +1 -1
  11. package/dist/cjs/dbs/index.min.cjs +3 -3
  12. package/dist/cjs/dbs/index.min.cjs.map +1 -1
  13. package/dist/cjs/events/adapters/kafka/index.cjs.map +1 -1
  14. package/dist/cjs/events/adapters/kafka/index.min.cjs +2 -2
  15. package/dist/cjs/events/adapters/kafka/index.min.cjs.map +1 -1
  16. package/dist/cjs/events/adapters/rabbitmq/index.cjs +179 -179
  17. package/dist/cjs/events/adapters/rabbitmq/index.cjs.map +1 -1
  18. package/dist/cjs/events/adapters/rabbitmq/index.min.cjs +3 -3
  19. package/dist/cjs/events/adapters/rabbitmq/index.min.cjs.map +1 -1
  20. package/dist/cjs/orm/adapters/mongodb/index.cjs +144 -144
  21. package/dist/cjs/orm/adapters/mongodb/index.cjs.map +1 -1
  22. package/dist/cjs/orm/adapters/mongodb/index.min.cjs +1 -1
  23. package/dist/cjs/orm/adapters/mongodb/index.min.cjs.map +1 -1
  24. package/dist/cjs/orm/adapters/postgresql/index.cjs +144 -215
  25. package/dist/cjs/orm/adapters/postgresql/index.cjs.map +1 -1
  26. package/dist/cjs/orm/adapters/postgresql/index.min.cjs +11 -11
  27. package/dist/cjs/orm/adapters/postgresql/index.min.cjs.map +1 -1
  28. package/dist/cjs/server/adapters/express/index.cjs +291 -225
  29. package/dist/cjs/server/adapters/express/index.cjs.map +1 -1
  30. package/dist/cjs/server/adapters/express/index.min.cjs +7 -7
  31. package/dist/cjs/server/adapters/express/index.min.cjs.map +1 -1
  32. package/dist/cjs/server/adapters/fastify/index.cjs +276 -210
  33. package/dist/cjs/server/adapters/fastify/index.cjs.map +1 -1
  34. package/dist/cjs/server/adapters/fastify/index.min.cjs +7 -7
  35. package/dist/cjs/server/adapters/fastify/index.min.cjs.map +1 -1
  36. package/dist/cjs/server/index.cjs +81 -15
  37. package/dist/cjs/server/index.cjs.map +1 -1
  38. package/dist/cjs/server/index.min.cjs +7 -7
  39. package/dist/cjs/server/index.min.cjs.map +1 -1
  40. package/dist/cjs/utilities/index.cjs +0 -5
  41. package/dist/cjs/utilities/index.cjs.map +1 -1
  42. package/dist/cjs/utilities/index.min.cjs +2 -2
  43. package/dist/cjs/utilities/index.min.cjs.map +1 -1
  44. package/dist/esm/cache/adapters/in-memory/index.min.mjs +1 -1
  45. package/dist/esm/cache/adapters/in-memory/index.min.mjs.map +1 -1
  46. package/dist/esm/cache/adapters/in-memory/index.mjs +6 -3
  47. package/dist/esm/cache/adapters/in-memory/index.mjs.map +1 -1
  48. package/dist/esm/cache/adapters/redis/index.min.mjs +1 -1
  49. package/dist/esm/cache/adapters/redis/index.mjs +5 -3
  50. package/dist/esm/cache/index.min.mjs +1 -1
  51. package/dist/esm/cache/index.mjs +2 -2
  52. package/dist/esm/{chunk-5PZACGPI.mjs → chunk-26BOI6IL.mjs} +7 -5
  53. package/dist/esm/{chunk-5PZACGPI.mjs.map → chunk-26BOI6IL.mjs.map} +1 -1
  54. package/dist/esm/{chunk-7SQ5JQYR.min.mjs → chunk-AODOD22O.min.mjs} +2 -2
  55. package/dist/esm/chunk-APSDCRY5.min.mjs +32 -0
  56. package/dist/esm/chunk-APSDCRY5.min.mjs.map +1 -0
  57. package/dist/esm/{chunk-A4P7P6BU.mjs → chunk-CEYT5YBA.mjs} +157 -347
  58. package/dist/esm/chunk-CEYT5YBA.mjs.map +1 -0
  59. package/dist/esm/chunk-CU2HU5UE.min.mjs +2 -0
  60. package/dist/esm/chunk-CU2HU5UE.min.mjs.map +1 -0
  61. package/dist/esm/chunk-DAK7OKSH.min.mjs +2 -0
  62. package/dist/esm/{chunk-MQXTTWPS.min.mjs.map → chunk-DAK7OKSH.min.mjs.map} +1 -1
  63. package/dist/esm/{chunk-IRYCN6PI.min.mjs → chunk-DAUQA32Q.min.mjs} +2 -2
  64. package/dist/esm/{chunk-BWUFPMVG.mjs → chunk-FQYRVHQT.mjs} +2 -2
  65. package/dist/esm/chunk-NEF3UYFA.mjs +144 -0
  66. package/dist/esm/chunk-NEF3UYFA.mjs.map +1 -0
  67. package/dist/esm/chunk-NNFUYHQ7.mjs +135 -0
  68. package/dist/esm/chunk-NNFUYHQ7.mjs.map +1 -0
  69. package/dist/esm/{chunk-7CP7ZE2O.mjs → chunk-PCEHFZ6G.mjs} +9 -5
  70. package/dist/esm/{chunk-7CP7ZE2O.mjs.map → chunk-PCEHFZ6G.mjs.map} +1 -1
  71. package/dist/esm/{chunk-P4PRHHIY.min.mjs → chunk-QCCDJLBH.min.mjs} +2 -2
  72. package/dist/esm/{chunk-3TP7NINX.mjs → chunk-RIXTQQUU.mjs} +2 -2
  73. package/dist/esm/{chunk-LKS5ZE45.mjs → chunk-RPPYCWXW.mjs} +2 -2
  74. package/dist/esm/{chunk-HXFNN6RI.mjs → chunk-T2O72JBW.mjs} +3 -3
  75. package/dist/esm/{chunk-TSVHZZE4.mjs → chunk-VQO4MSEC.mjs} +5 -5
  76. package/dist/esm/{chunk-676VIABN.min.mjs → chunk-X7VNAGLR.min.mjs} +2 -2
  77. package/dist/esm/chunk-XTXAEBXY.min.mjs +2 -0
  78. package/dist/esm/{chunk-7NF7PV6S.min.mjs.map → chunk-XTXAEBXY.min.mjs.map} +1 -1
  79. package/dist/esm/{chunk-2GGMLKRP.min.mjs → chunk-YDQW6ETS.min.mjs} +2 -2
  80. package/dist/esm/chunk-ZDBDR3IB.min.mjs +2 -0
  81. package/dist/esm/chunk-ZDBDR3IB.min.mjs.map +1 -0
  82. package/dist/esm/dbs/adapters/mongodb/index.min.mjs +1 -1
  83. package/dist/esm/dbs/adapters/mongodb/index.min.mjs.map +1 -1
  84. package/dist/esm/dbs/adapters/mongodb/index.mjs +8 -5
  85. package/dist/esm/dbs/adapters/mongodb/index.mjs.map +1 -1
  86. package/dist/esm/dbs/index.min.mjs +1 -1
  87. package/dist/esm/dbs/index.mjs +5 -3
  88. package/dist/esm/errors/index.min.mjs +1 -1
  89. package/dist/esm/errors/index.mjs +1 -1
  90. package/dist/esm/events/adapters/kafka/index.min.mjs +1 -1
  91. package/dist/esm/events/adapters/kafka/index.mjs +4 -2
  92. package/dist/esm/events/adapters/rabbitmq/index.min.mjs +1 -1
  93. package/dist/esm/events/adapters/rabbitmq/index.min.mjs.map +1 -1
  94. package/dist/esm/events/adapters/rabbitmq/index.mjs +7 -3
  95. package/dist/esm/events/adapters/rabbitmq/index.mjs.map +1 -1
  96. package/dist/esm/index.min.mjs +1 -1
  97. package/dist/esm/index.mjs +1 -1
  98. package/dist/esm/instance/index.min.mjs +1 -1
  99. package/dist/esm/instance/index.mjs +1 -1
  100. package/dist/esm/{introspection-YJF3QAUK.mjs → introspection-FGDVYTPP.mjs} +3 -3
  101. package/dist/esm/introspection-UDWDS6DV.min.mjs +2 -0
  102. package/dist/esm/jobs/adapters/redis/index.min.mjs +1 -1
  103. package/dist/esm/jobs/adapters/redis/index.min.mjs.map +1 -1
  104. package/dist/esm/jobs/adapters/redis/index.mjs +10 -6
  105. package/dist/esm/jobs/adapters/redis/index.mjs.map +1 -1
  106. package/dist/esm/orm/adapters/in-memory/index.min.mjs +1 -1
  107. package/dist/esm/orm/adapters/in-memory/index.mjs +4 -3
  108. package/dist/esm/orm/adapters/json/index.min.mjs +1 -1
  109. package/dist/esm/orm/adapters/json/index.min.mjs.map +1 -1
  110. package/dist/esm/orm/adapters/json/index.mjs +6 -5
  111. package/dist/esm/orm/adapters/json/index.mjs.map +1 -1
  112. package/dist/esm/orm/adapters/mongodb/index.min.mjs +1 -1
  113. package/dist/esm/orm/adapters/mongodb/index.min.mjs.map +1 -1
  114. package/dist/esm/orm/adapters/mongodb/index.mjs +6 -4
  115. package/dist/esm/orm/adapters/mongodb/index.mjs.map +1 -1
  116. package/dist/esm/orm/adapters/postgresql/index.min.mjs +2 -2
  117. package/dist/esm/orm/adapters/postgresql/index.min.mjs.map +1 -1
  118. package/dist/esm/orm/adapters/postgresql/index.mjs +8 -5
  119. package/dist/esm/orm/adapters/postgresql/index.mjs.map +1 -1
  120. package/dist/esm/orm/index.min.mjs +1 -1
  121. package/dist/esm/orm/index.mjs +3 -3
  122. package/dist/esm/server/adapters/express/index.min.mjs +1 -1
  123. package/dist/esm/server/adapters/express/index.min.mjs.map +1 -1
  124. package/dist/esm/server/adapters/express/index.mjs +7 -3
  125. package/dist/esm/server/adapters/express/index.mjs.map +1 -1
  126. package/dist/esm/server/adapters/fastify/index.min.mjs +1 -1
  127. package/dist/esm/server/adapters/fastify/index.min.mjs.map +1 -1
  128. package/dist/esm/server/adapters/fastify/index.mjs +7 -3
  129. package/dist/esm/server/adapters/fastify/index.mjs.map +1 -1
  130. package/dist/esm/server/index.min.mjs +1 -1
  131. package/dist/esm/server/index.mjs +1 -1
  132. package/dist/esm/utilities/index.min.mjs +1 -1
  133. package/dist/esm/utilities/index.mjs +5 -4
  134. package/dist/esm/validations/index.min.mjs +1 -1
  135. package/dist/esm/validations/index.mjs +1 -1
  136. package/dist/types/{base-BDTBLZ9a.d.ts → base-qDndMBf8.d.ts} +2 -2
  137. package/dist/types/cache/adapters/in-memory/index.js +7 -4
  138. package/dist/types/cache/adapters/redis/index.js +5 -3
  139. package/dist/types/cache/index.js +2 -2
  140. package/dist/types/{chunk-4DH3POYM.js → chunk-35CDCTLR.js} +4 -4
  141. package/dist/types/{chunk-J3TGB5YQ.js → chunk-4YQA5GPT.js} +8 -4
  142. package/dist/types/{chunk-YLJNBL6J.js → chunk-AQIV47BY.js} +6 -4
  143. package/dist/types/{chunk-TT5EORDK.js → chunk-BKDWUJRG.js} +156 -346
  144. package/dist/types/{chunk-5Z26ZURE.js → chunk-DA2VYP7D.js} +1 -1
  145. package/dist/types/{chunk-LPB5LS7A.js → chunk-GDMGPX4C.js} +1 -1
  146. package/dist/types/chunk-H5V6ADFD.js +134 -0
  147. package/dist/types/{chunk-IZDJDGOV.js → chunk-OOKJEMQI.js} +2 -2
  148. package/dist/types/chunk-PPD4WDG6.js +143 -0
  149. package/dist/types/{chunk-55CTVK7R.js → chunk-T7K7PO6G.js} +1 -1
  150. package/dist/types/dbs/adapters/mongodb/index.js +8 -5
  151. package/dist/types/dbs/index.js +5 -3
  152. package/dist/types/errors/index.js +1 -1
  153. package/dist/types/events/adapters/kafka/index.js +4 -2
  154. package/dist/types/events/adapters/rabbitmq/index.js +7 -3
  155. package/dist/types/index.js +1 -1
  156. package/dist/types/instance/index.js +1 -1
  157. package/dist/types/{introspection-EHGM4RMO.js → introspection-FSNS33CQ.js} +2 -2
  158. package/dist/types/jobs/adapters/redis/index.js +10 -6
  159. package/dist/types/orm/adapters/in-memory/index.js +4 -3
  160. package/dist/types/orm/adapters/json/index.js +6 -5
  161. package/dist/types/orm/adapters/mongodb/index.js +6 -4
  162. package/dist/types/orm/adapters/postgresql/index.js +8 -5
  163. package/dist/types/orm/index.js +3 -3
  164. package/dist/types/server/adapters/express/index.d.ts +1 -1
  165. package/dist/types/server/adapters/express/index.js +7 -3
  166. package/dist/types/server/adapters/fastify/index.d.ts +1 -1
  167. package/dist/types/server/adapters/fastify/index.js +7 -3
  168. package/dist/types/server/index.d.ts +2 -2
  169. package/dist/types/server/index.js +1 -1
  170. package/dist/types/utilities/index.d.ts +1 -2
  171. package/dist/types/utilities/index.js +5 -4
  172. package/dist/types/validations/index.js +1 -1
  173. package/package.json +1 -1
  174. package/dist/esm/chunk-7NF7PV6S.min.mjs +0 -2
  175. package/dist/esm/chunk-A4P7P6BU.mjs.map +0 -1
  176. package/dist/esm/chunk-IN5YKIJ7.min.mjs +0 -32
  177. package/dist/esm/chunk-IN5YKIJ7.min.mjs.map +0 -1
  178. package/dist/esm/chunk-MQXTTWPS.min.mjs +0 -2
  179. package/dist/esm/introspection-THKMXV5V.min.mjs +0 -2
  180. /package/dist/esm/{chunk-7SQ5JQYR.min.mjs.map → chunk-AODOD22O.min.mjs.map} +0 -0
  181. /package/dist/esm/{chunk-IRYCN6PI.min.mjs.map → chunk-DAUQA32Q.min.mjs.map} +0 -0
  182. /package/dist/esm/{chunk-BWUFPMVG.mjs.map → chunk-FQYRVHQT.mjs.map} +0 -0
  183. /package/dist/esm/{chunk-P4PRHHIY.min.mjs.map → chunk-QCCDJLBH.min.mjs.map} +0 -0
  184. /package/dist/esm/{chunk-3TP7NINX.mjs.map → chunk-RIXTQQUU.mjs.map} +0 -0
  185. /package/dist/esm/{chunk-LKS5ZE45.mjs.map → chunk-RPPYCWXW.mjs.map} +0 -0
  186. /package/dist/esm/{chunk-HXFNN6RI.mjs.map → chunk-T2O72JBW.mjs.map} +0 -0
  187. /package/dist/esm/{chunk-TSVHZZE4.mjs.map → chunk-VQO4MSEC.mjs.map} +0 -0
  188. /package/dist/esm/{chunk-676VIABN.min.mjs.map → chunk-X7VNAGLR.min.mjs.map} +0 -0
  189. /package/dist/esm/{chunk-2GGMLKRP.min.mjs.map → chunk-YDQW6ETS.min.mjs.map} +0 -0
  190. /package/dist/esm/{introspection-THKMXV5V.min.mjs.map → introspection-FGDVYTPP.mjs.map} +0 -0
  191. /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 v6 } from "valleyed";
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 v5 } from "valleyed";
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 v3 } from "valleyed";
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
- this.query = parseJSONObject(query);
629
- this.body = Object.assign(parseJSONObject(body), files);
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 jwt2 from "jsonwebtoken";
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 = jwt2.sign(payload, this.options.signingKey, { expiresIn: this.options.storageTTL });
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 = jwt2.verify(token, this.options.signingKey);
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 jwt2.TokenExpiredError) throw new TokenExpired(void 0, err);
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 = () => v3.object({
895
- port: v3.number(),
896
- cors: v3.optional(
897
- v3.object({
898
- origin: v3.optional(v3.or([v3.array(v3.string()), v3.is(true)])),
899
- methods: v3.optional(v3.array(v3.in(Object.values(Methods)))),
900
- credentials: v3.optional(v3.boolean())
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: v3.optional(v3.instanceOf(EventBus)),
904
- publicPath: v3.optional(v3.string()),
905
- healthPath: v3.optional(v3.string()),
906
- openapi: v3.defaults(
907
- v3.object({
908
- docsVersion: v3.defaults(v3.string(), "1.0.0"),
909
- docsBaseUrl: v3.defaults(v3.array(v3.string()), ["/"]),
910
- docsPath: v3.defaults(v3.string(), "/__docs")
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: v3.defaults(
915
- v3.object({
916
- log: v3.defaults(v3.boolean(), true),
917
- rateLimit: v3.defaults(
918
- v3.object({
919
- enabled: v3.defaults(v3.boolean(), false),
920
- periodInMs: v3.defaults(v3.number(), 60 * 60 * 1e3),
921
- limit: v3.defaults(v3.number(), 5e3)
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: v3.defaults(
926
- v3.object({
927
- enabled: v3.defaults(v3.boolean(), false),
928
- periodInMs: v3.defaults(v3.number(), 10 * 60 * 1e3),
929
- delayAfter: v3.defaults(v3.number(), 2e3),
930
- delayInMs: v3.defaults(v3.number(), 500)
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: v3.defaults(v3.array(v3.instanceOf(BaseRequestAuthMethod)), [])
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: v3.meta(v3.array(v3.object({ message: v3.string(), field: v3.optional(v3.string()) })), {
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] ?? v3.any();
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] = v3.schema(pipe);
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] = v3.any().pipe((input) => {
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 = v3.validate(p, input);
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: v3.schema(record.pipe)
952
+ schema: v2.schema(record.pipe)
1134
953
  }));
1135
954
  }
1136
955
  });
1137
- const requestPipe = v3.object(requestPipeDefs);
1138
- v3.compile(requestPipe, { allErrors: true });
1139
- const responsePipe = v3.object(responsePipeDefs);
1140
- v3.compile(responsePipe, { allErrors: true });
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
- () => v3.validate(requestPipe, {
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
- () => v3.validate(responsePipe, {
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 v4 } from "valleyed";
1862
- var instanceSettingsPipe = () => v4.object({
1863
- app: v4.object({
1864
- name: v4.string()
1680
+ import { v as v3 } from "valleyed";
1681
+ var instanceSettingsPipe = () => v3.object({
1682
+ app: v3.object({
1683
+ name: v3.string()
1865
1684
  }),
1866
- log: v4.defaults(
1867
- v4.object({
1868
- level: v4.defaults(v4.in(["fatal", "error", "warn", "info", "debug", "trace", "silent"]), "info")
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: v4.defaults(
1873
- v4.object({
1874
- hashSaltRounds: v4.defaults(v4.number(), 10),
1875
- paginationDefaultLimit: v4.defaults(v4.number(), 100),
1876
- maxFileUploadSizeInMb: v4.defaults(v4.number(), 500)
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 = v5.validate(envsPipe, process.env);
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 = v5.validate(instanceSettingsPipe(), settings);
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) => v6.array(
1995
- v6.file(err).pipe((input) => {
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) => v6.define(
2003
- v6.compile(
2004
- filePipe(err).pipe(v6.min(1, "no file provided")).pipe((files) => files[0])
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) => v6.define(v6.compile(filePipe(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) => v6.define((input) => {
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 = v6.validate(fn(req), input);
1835
+ const validated = v5.validate(fn(req), input);
2017
1836
  return validated.valid ? validated.value : validated.error;
2018
1837
  });
2019
- var withResponse = (fn) => v6.define((input) => {
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 = v6.validate(fn(res), input);
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 v7 } from "valleyed";
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 = v7.validate(pipe, value);
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,