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
@@ -0,0 +1,135 @@
1
+ import {
2
+ EquippedError,
3
+ Instance
4
+ } from "./chunk-CEYT5YBA.mjs";
5
+ import {
6
+ __export
7
+ } from "./chunk-J5LGTIGS.mjs";
8
+
9
+ // src/utilities/authProviders.ts
10
+ var authProviders_exports = {};
11
+ __export(authProviders_exports, {
12
+ signinWithApple: () => signinWithApple,
13
+ signinWithFacebook: () => signinWithFacebook,
14
+ signinWithGoogle: () => signinWithGoogle
15
+ });
16
+ import axios from "axios";
17
+ import jwt from "jsonwebtoken";
18
+ import jwksClient from "jwks-rsa";
19
+ var signinWithGoogle = async (idToken) => {
20
+ const authUrl = `https://oauth2.googleapis.com/tokeninfo?id_token=${idToken}`;
21
+ const { data } = await axios.get(authUrl).catch((err) => {
22
+ throw new EquippedError("Failed to sign in with google", { idToken }, err);
23
+ });
24
+ data.first_name = data.given_name;
25
+ data.last_name = data.family_name;
26
+ return data;
27
+ };
28
+ var signinWithApple = async (idToken) => {
29
+ try {
30
+ const APPLE_BASE = "https://appleid.apple.com";
31
+ const json = jwt.decode(idToken, { complete: true });
32
+ if (!json?.header) throw new EquippedError("Missing JWT header", { idToken, json });
33
+ const { kid, alg } = json.header;
34
+ const publicKey = await jwksClient({ jwksUri: `${APPLE_BASE}/auth/keys`, cache: true }).getSigningKey(kid).then((key) => key.getPublicKey()).catch(() => null);
35
+ if (!publicKey) throw new EquippedError("no publicKey", { idToken, publicKey, json });
36
+ const data = jwt.verify(idToken, publicKey, { algorithms: [alg] });
37
+ if (!data) throw new EquippedError("no data", { idToken, data });
38
+ if (data.iss !== APPLE_BASE) throw new EquippedError("iss doesnt match", { idToken, data });
39
+ if (data.exp * 1e3 < Date.now()) throw new EquippedError("expired idToken", { idToken, data });
40
+ return data;
41
+ } catch (err) {
42
+ throw new EquippedError("Failed to sign in with apple", { idToken }, err);
43
+ }
44
+ };
45
+ var signinWithFacebook = async (accessToken, fields = []) => {
46
+ fields = [.../* @__PURE__ */ new Set([...fields, "name", "picture", "email"])];
47
+ const { data } = await axios.request({
48
+ method: "get",
49
+ url: "https://graph.facebook.com/v15.0/me",
50
+ params: {
51
+ fields: fields.join(","),
52
+ access_token: accessToken
53
+ }
54
+ }).catch((err) => {
55
+ throw new EquippedError("Failed to sign in with facebook", { accessToken, fields }, err);
56
+ });
57
+ const isValidData = fields.every((key) => key in data);
58
+ if (!isValidData) throw new EquippedError("Incomplete scope for access token", { accessToken, fields, data });
59
+ data.email_verified = "true";
60
+ return data;
61
+ };
62
+
63
+ // src/utilities/hash.ts
64
+ var hash_exports = {};
65
+ __export(hash_exports, {
66
+ compare: () => compare2,
67
+ hash: () => hash2
68
+ });
69
+ import * as bcrypt from "bcryptjs";
70
+ var hash2 = async (password) => {
71
+ password = password.trim();
72
+ if (!password) return "";
73
+ return await bcrypt.hash(password, Instance.get().settings.utils.hashSaltRounds);
74
+ };
75
+ var compare2 = async (plainPassword, hashed) => {
76
+ plainPassword = plainPassword.trim();
77
+ if (!plainPassword && plainPassword === hashed) return true;
78
+ return await bcrypt.compare(plainPassword, hashed);
79
+ };
80
+
81
+ // src/utilities/json.ts
82
+ var parseJSONValue = (data) => {
83
+ try {
84
+ if (data?.constructor?.name !== "String") return data;
85
+ return JSON.parse(data);
86
+ } catch {
87
+ return data;
88
+ }
89
+ };
90
+
91
+ // src/utilities/media.ts
92
+ import { parseBuffer } from "music-metadata";
93
+ var getMediaDuration = async (buffer) => {
94
+ try {
95
+ const meta = await parseBuffer(buffer);
96
+ return meta.format.duration ?? 0;
97
+ } catch {
98
+ return 0;
99
+ }
100
+ };
101
+
102
+ // src/utilities/random.ts
103
+ var random_exports = {};
104
+ __export(random_exports, {
105
+ number: () => number,
106
+ string: () => string
107
+ });
108
+ import crypto from "crypto";
109
+ function string(length = 20) {
110
+ return crypto.randomBytes(length).toString("hex").slice(0, length);
111
+ }
112
+ function number(min = 0, max = 2 ** 48 - 1) {
113
+ return crypto.randomInt(min, max);
114
+ }
115
+
116
+ // src/utilities/retry.ts
117
+ var sleep = (ms) => new Promise((resolve) => setTimeout(resolve, ms));
118
+ var retry = async (cb, tries, waitTimeInMs) => {
119
+ if (tries <= 0) throw new EquippedError("out of tries", { tries, waitTimeInMs });
120
+ const result = await cb();
121
+ if (result.done === true) return result.value;
122
+ await sleep(waitTimeInMs);
123
+ return await retry(cb, tries - 1, waitTimeInMs);
124
+ };
125
+
126
+ export {
127
+ authProviders_exports,
128
+ hash_exports,
129
+ parseJSONValue,
130
+ getMediaDuration,
131
+ random_exports,
132
+ sleep,
133
+ retry
134
+ };
135
+ //# sourceMappingURL=chunk-NNFUYHQ7.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/utilities/authProviders.ts","../../src/utilities/hash.ts","../../src/utilities/json.ts","../../src/utilities/media.ts","../../src/utilities/random.ts","../../src/utilities/retry.ts"],"sourcesContent":["import axios from 'axios'\nimport jwt from 'jsonwebtoken'\nimport jwksClient from 'jwks-rsa'\n\nimport { EquippedError } from '../errors'\n\nexport const signinWithGoogle = async (idToken: string) => {\n\tconst authUrl = `https://oauth2.googleapis.com/tokeninfo?id_token=${idToken}`\n\tconst { data } = await axios.get(authUrl).catch((err) => {\n\t\tthrow new EquippedError('Failed to sign in with google', { idToken }, err)\n\t})\n\tdata.first_name = data.given_name\n\tdata.last_name = data.family_name\n\treturn data as {\n\t\temail: string\n\t\temail_verified: 'true' | 'false'\n\t\tfirst_name: string\n\t\tlast_name: string\n\t\tpicture: string\n\t\tsub: string\n\t} & Record<string, any>\n}\n\nexport const signinWithApple = async (idToken: string) => {\n\ttry {\n\t\tconst APPLE_BASE = 'https://appleid.apple.com'\n\t\tconst json = jwt.decode(idToken, { complete: true })\n\t\tif (!json?.header) throw new EquippedError('Missing JWT header', { idToken, json })\n\t\tconst { kid, alg } = json.header\n\t\tconst publicKey = await jwksClient({ jwksUri: `${APPLE_BASE}/auth/keys`, cache: true })\n\t\t\t.getSigningKey(kid)\n\t\t\t.then((key) => key.getPublicKey())\n\t\t\t.catch(() => null)\n\t\tif (!publicKey) throw new EquippedError('no publicKey', { idToken, publicKey, json })\n\t\tconst data = jwt.verify(idToken, publicKey, { algorithms: [alg as any] }) as Record<string, any>\n\t\tif (!data) throw new EquippedError('no data', { idToken, data })\n\t\tif (data.iss !== APPLE_BASE) throw new EquippedError('iss doesnt match', { idToken, data })\n\t\tif (data.exp * 1000 < Date.now()) throw new EquippedError('expired idToken', { idToken, data })\n\t\t// TODO: Find out how to get profile data from api\n\t\treturn data as {\n\t\t\temail?: string\n\t\t\tsub: string\n\t\t\temail_verified?: 'true' | 'false'\n\t\t\tis_private_email?: 'true' | 'false'\n\t\t} & Record<string, any>\n\t} catch (err) {\n\t\tthrow new EquippedError('Failed to sign in with apple', { idToken }, err)\n\t}\n}\n\nexport const signinWithFacebook = async (accessToken: string, fields = [] as string[]) => {\n\tfields = [...new Set([...fields, 'name', 'picture', 'email'])]\n\tconst { data } = await axios\n\t\t.request({\n\t\t\tmethod: 'get',\n\t\t\turl: 'https://graph.facebook.com/v15.0/me',\n\t\t\tparams: {\n\t\t\t\tfields: fields.join(','),\n\t\t\t\taccess_token: accessToken,\n\t\t\t},\n\t\t})\n\t\t.catch((err) => {\n\t\t\tthrow new EquippedError('Failed to sign in with facebook', { accessToken, fields }, err)\n\t\t})\n\tconst isValidData = fields.every((key) => key in data)\n\tif (!isValidData) throw new EquippedError('Incomplete scope for access token', { accessToken, fields, data })\n\tdata.email_verified = 'true'\n\treturn data as {\n\t\tid: string\n\t\temail: string\n\t\temail_verified: 'true' | 'false'\n\t\tname: string\n\t\tpicture: {\n\t\t\tdata: { height: number; is_silhouette: boolean; url: string; width: number }\n\t\t}\n\t} & Record<string, any>\n}\n","import * as bcrypt from 'bcryptjs'\n\nimport { Instance } from '../instance'\n\nexport const hash = async (password: string) => {\n\tpassword = password.trim()\n\tif (!password) return ''\n\treturn await bcrypt.hash(password, Instance.get().settings.utils.hashSaltRounds)\n}\n\nexport const compare = async (plainPassword: string, hashed: string) => {\n\tplainPassword = plainPassword.trim()\n\tif (!plainPassword && plainPassword === hashed) return true\n\treturn await bcrypt.compare(plainPassword, hashed)\n}\n","export const parseJSONValue = (data: any) => {\n\ttry {\n\t\tif (data?.constructor?.name !== 'String') return data\n\t\treturn JSON.parse(data)\n\t} catch {\n\t\treturn data\n\t}\n}\n","import { parseBuffer } from 'music-metadata'\n\nexport const getMediaDuration = async (buffer: Buffer) => {\n\ttry {\n\t\tconst meta = await parseBuffer(buffer)\n\t\treturn meta.format.duration ?? 0\n\t} catch {\n\t\treturn 0\n\t}\n}\n","import crypto from 'crypto'\n\nexport function string(length = 20) {\n\treturn crypto.randomBytes(length).toString('hex').slice(0, length)\n}\n\nexport function number(min = 0, max = 2 ** 48 - 1) {\n\treturn crypto.randomInt(min, max)\n}\n","import { EquippedError } from '../errors'\n\nexport const sleep = (ms: number): Promise<void> => new Promise((resolve) => setTimeout(resolve, ms))\n\nexport const retry = async <T>(cb: () => Promise<{ done: true; value: T } | { done: false }>, tries: number, waitTimeInMs: number) => {\n\tif (tries <= 0) throw new EquippedError('out of tries', { tries, waitTimeInMs })\n\tconst result = await cb()\n\tif (result.done === true) return result.value\n\tawait sleep(waitTimeInMs)\n\treturn await retry(cb, tries - 1, waitTimeInMs)\n}\n"],"mappings":"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","names":["compare","hash","hash","compare"]}
@@ -1,10 +1,14 @@
1
1
  import {
2
- EquippedError,
3
- Instance,
4
- configurable,
5
2
  parseJSONValue,
6
3
  random_exports
7
- } from "./chunk-A4P7P6BU.mjs";
4
+ } from "./chunk-NNFUYHQ7.mjs";
5
+ import {
6
+ configurable
7
+ } from "./chunk-NEF3UYFA.mjs";
8
+ import {
9
+ EquippedError,
10
+ Instance
11
+ } from "./chunk-CEYT5YBA.mjs";
8
12
  import {
9
13
  EventBus
10
14
  } from "./chunk-VCCS7CAI.mjs";
@@ -99,4 +103,4 @@ export {
99
103
  kafkaConfigPipe,
100
104
  KafkaEventBus
101
105
  };
102
- //# sourceMappingURL=chunk-7CP7ZE2O.mjs.map
106
+ //# sourceMappingURL=chunk-PCEHFZ6G.mjs.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/events/adapters/kafka/index.ts"],"sourcesContent":["import { KafkaJS } from '@confluentinc/kafka-javascript'\nimport { v } from 'valleyed'\n\nimport { EquippedError } from '../../../errors'\nimport { Instance } from '../../../instance'\nimport type { Events } from '../../../types'\nimport { Random, configurable, parseJSONValue } from '../../../utilities'\nimport { EventBus, type Stream, type StreamOptions } from '../base'\n\nexport const kafkaConfigPipe = () =>\n\tv.meta(\n\t\tv.object({\n\t\t\tbrokers: v.array(v.string()),\n\t\t\tssl: v.optional(v.boolean()),\n\t\t\tsasl: v.optional(\n\t\t\t\tv.object({\n\t\t\t\t\tmechanism: v.is('plain' as const),\n\t\t\t\t\tusername: v.string(),\n\t\t\t\t\tpassword: v.string(),\n\t\t\t\t}),\n\t\t\t),\n\t\t\tclientId: v.optional(v.string()),\n\t\t}),\n\t\t{ title: 'Kafka Config', $refId: 'KafkaConfig' },\n\t)\n\nexport class KafkaEventBus extends configurable(kafkaConfigPipe, EventBus) {\n\t#client: KafkaJS.Kafka\n\t#admin: Promise<KafkaJS.Admin> | null = null\n\n\tprotected constructor(config: typeof KafkaEventBus.Config) {\n\t\tsuper(config)\n\t\tthis.#client = new KafkaJS.Kafka({\n\t\t\tkafkaJS: { ...config, logLevel: KafkaJS.logLevel.NOTHING },\n\t\t})\n\t}\n\n\tasync #getAdmin() {\n\t\tif (!this.#admin)\n\t\t\tthis.#admin = (async () => {\n\t\t\t\tconst admin = this.#client.admin()\n\t\t\t\tawait admin.connect()\n\t\t\t\treturn admin\n\t\t\t})()\n\t\treturn this.#admin\n\t}\n\n\tasync #createTopic(topic: string) {\n\t\tconst admin = await this.#getAdmin()\n\t\tawait admin.createTopics({ topics: [{ topic }], timeout: 5000 })\n\t}\n\n\tasync #deleteGroup(groupId: string) {\n\t\tconst admin = await this.#getAdmin()\n\t\tawait admin.deleteGroups([groupId]).catch(() => {})\n\t}\n\n\tstream<Event extends Events[keyof Events]>(topicName: Event['topic'], options: Partial<StreamOptions> = {}): Stream<Event['data']> {\n\t\tconst topic = options.skipScope ? topicName : Instance.get().getScopedName(topicName)\n\t\treturn {\n\t\t\tpublish: async (data) => {\n\t\t\t\tconst producer = this.#client.producer()\n\t\t\t\tawait producer.connect()\n\t\t\t\tawait producer.send({\n\t\t\t\t\ttopic,\n\t\t\t\t\tmessages: [{ value: JSON.stringify(data) }],\n\t\t\t\t})\n\t\t\t\treturn true\n\t\t\t},\n\t\t\tsubscribe: (onMessage) => {\n\t\t\t\tconst subscribe = async () => {\n\t\t\t\t\tawait this.#createTopic(topic)\n\t\t\t\t\tconst groupId = options.fanout\n\t\t\t\t\t\t? Instance.get().getScopedName(`${Instance.get().id}-fanout-${Random.string(10)}`)\n\t\t\t\t\t\t: topic\n\t\t\t\t\tconst consumer = this.#client.consumer({ kafkaJS: { groupId } })\n\n\t\t\t\t\tawait consumer.connect()\n\t\t\t\t\tawait consumer.subscribe({ topic })\n\n\t\t\t\t\tawait consumer.run({\n\t\t\t\t\t\teachMessage: async ({ message }) => {\n\t\t\t\t\t\t\tawait Instance.resolveBeforeCrash(async () => {\n\t\t\t\t\t\t\t\tif (!message.value) return\n\t\t\t\t\t\t\t\tawait onMessage(parseJSONValue(message.value.toString()))\n\t\t\t\t\t\t\t}).catch((error) =>\n\t\t\t\t\t\t\t\tInstance.crash(new EquippedError('Error processing kafka event', { topic, groupId, options }, error)),\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t},\n\t\t\t\t\t})\n\n\t\t\t\t\tif (options.fanout)\n\t\t\t\t\t\tInstance.on('close', async () => {\n\t\t\t\t\t\t\tawait consumer.disconnect()\n\t\t\t\t\t\t\tawait this.#deleteGroup(groupId)\n\t\t\t\t\t\t}, { class: KafkaEventBus })\n\t\t\t\t}\n\t\t\t\tInstance.on('start', subscribe, { class: KafkaEventBus })\n\t\t\t},\n\t\t}\n\t}\n}\n"],"mappings":"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","names":[]}
1
+ {"version":3,"sources":["../../src/events/adapters/kafka/index.ts"],"sourcesContent":["import { KafkaJS } from '@confluentinc/kafka-javascript'\nimport { v } from 'valleyed'\n\nimport { EquippedError } from '../../../errors'\nimport { Instance } from '../../../instance'\nimport type { Events } from '../../../types'\nimport { Random, configurable, parseJSONValue } from '../../../utilities'\nimport { EventBus, type Stream, type StreamOptions } from '../base'\n\nexport const kafkaConfigPipe = () =>\n\tv.meta(\n\t\tv.object({\n\t\t\tbrokers: v.array(v.string()),\n\t\t\tssl: v.optional(v.boolean()),\n\t\t\tsasl: v.optional(\n\t\t\t\tv.object({\n\t\t\t\t\tmechanism: v.is('plain' as const),\n\t\t\t\t\tusername: v.string(),\n\t\t\t\t\tpassword: v.string(),\n\t\t\t\t}),\n\t\t\t),\n\t\t\tclientId: v.optional(v.string()),\n\t\t}),\n\t\t{ title: 'Kafka Config', $refId: 'KafkaConfig' },\n\t)\n\nexport class KafkaEventBus extends configurable(kafkaConfigPipe, EventBus) {\n\t#client: KafkaJS.Kafka\n\t#admin: Promise<KafkaJS.Admin> | null = null\n\n\tprotected constructor(config: typeof KafkaEventBus.Config) {\n\t\tsuper(config)\n\t\tthis.#client = new KafkaJS.Kafka({\n\t\t\tkafkaJS: { ...config, logLevel: KafkaJS.logLevel.NOTHING },\n\t\t})\n\t}\n\n\tasync #getAdmin() {\n\t\tif (!this.#admin)\n\t\t\tthis.#admin = (async () => {\n\t\t\t\tconst admin = this.#client.admin()\n\t\t\t\tawait admin.connect()\n\t\t\t\treturn admin\n\t\t\t})()\n\t\treturn this.#admin\n\t}\n\n\tasync #createTopic(topic: string) {\n\t\tconst admin = await this.#getAdmin()\n\t\tawait admin.createTopics({ topics: [{ topic }], timeout: 5000 })\n\t}\n\n\tasync #deleteGroup(groupId: string) {\n\t\tconst admin = await this.#getAdmin()\n\t\tawait admin.deleteGroups([groupId]).catch(() => {})\n\t}\n\n\tstream<Event extends Events[keyof Events]>(topicName: Event['topic'], options: Partial<StreamOptions> = {}): Stream<Event['data']> {\n\t\tconst topic = options.skipScope ? topicName : Instance.get().getScopedName(topicName)\n\t\treturn {\n\t\t\tpublish: async (data) => {\n\t\t\t\tconst producer = this.#client.producer()\n\t\t\t\tawait producer.connect()\n\t\t\t\tawait producer.send({\n\t\t\t\t\ttopic,\n\t\t\t\t\tmessages: [{ value: JSON.stringify(data) }],\n\t\t\t\t})\n\t\t\t\treturn true\n\t\t\t},\n\t\t\tsubscribe: (onMessage) => {\n\t\t\t\tconst subscribe = async () => {\n\t\t\t\t\tawait this.#createTopic(topic)\n\t\t\t\t\tconst groupId = options.fanout\n\t\t\t\t\t\t? Instance.get().getScopedName(`${Instance.get().id}-fanout-${Random.string(10)}`)\n\t\t\t\t\t\t: topic\n\t\t\t\t\tconst consumer = this.#client.consumer({ kafkaJS: { groupId } })\n\n\t\t\t\t\tawait consumer.connect()\n\t\t\t\t\tawait consumer.subscribe({ topic })\n\n\t\t\t\t\tawait consumer.run({\n\t\t\t\t\t\teachMessage: async ({ message }) => {\n\t\t\t\t\t\t\tawait Instance.resolveBeforeCrash(async () => {\n\t\t\t\t\t\t\t\tif (!message.value) return\n\t\t\t\t\t\t\t\tawait onMessage(parseJSONValue(message.value.toString()))\n\t\t\t\t\t\t\t}).catch((error) =>\n\t\t\t\t\t\t\t\tInstance.crash(new EquippedError('Error processing kafka event', { topic, groupId, options }, error)),\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t},\n\t\t\t\t\t})\n\n\t\t\t\t\tif (options.fanout)\n\t\t\t\t\t\tInstance.on('close', async () => {\n\t\t\t\t\t\t\tawait consumer.disconnect()\n\t\t\t\t\t\t\tawait this.#deleteGroup(groupId)\n\t\t\t\t\t\t}, { class: KafkaEventBus })\n\t\t\t\t}\n\t\t\t\tInstance.on('start', subscribe, { class: KafkaEventBus })\n\t\t\t},\n\t\t}\n\t}\n}\n"],"mappings":"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","names":[]}
@@ -1,2 +1,2 @@
1
- import{f as S,g as F,j as O,k as q,l as C,m as I,n as R,o as P,p as B,q as D,r as T,s as K}from "./chunk-7SQ5JQYR.min.mjs";import{m as k}from "./chunk-IN5YKIJ7.min.mjs";import{AsyncLocalStorage as _}from"async_hooks";import{v as M,differ as h}from"valleyed";var j=()=>M.object({});function d(a){return structuredClone(a)}var w=(a,e)=>{a.clear();for(let[t,n]of e.entries())a.set(t,n)};function b(a){return typeof a=="object"&&a!==null&&!Array.isArray(a)}function A(a,e){return Array.isArray(a)?(Array.isArray(e)?e:[e]).every(n=>a.some(s=>h.equal(s,n))):b(a)&&b(e)?Object.entries(e).every(([t,n])=>A(a[t],n)):h.equal(a,e)}function f(a,e){if(a===e)return 0;if(a==null)return-1;if(e==null)return 1;if(typeof a=="number"&&typeof e=="number"||typeof a=="string"&&typeof e=="string")return a<e?-1:1;if(typeof a=="boolean"&&typeof e=="boolean")return a===!1?-1:1;let t=JSON.stringify(a),n=JSON.stringify(e);return t===n?0:t<n?-1:1}function L(a,e){return`${e.prefix??""}${e.table}`}function z(a,e){let t=a[e.field],n=e.value;switch(e.op){case"eq":return h.equal(t,n);case"ne":return!h.equal(t,n);case"gt":return f(t,n)>0;case"gte":return f(t,n)>=0;case"lt":return f(t,n)<0;case"lte":return f(t,n)<=0;case"in":return Array.isArray(n)?n.some(s=>h.equal(t,s)):!1;case"notIn":return Array.isArray(n)?!n.some(s=>h.equal(t,s)):!0;case"like":return String(t??"").toLowerCase().includes(String(n??"").toLowerCase());case"exists":return t!=null;case"notExists":return t==null;case"contains":return A(t,n);case"notContains":return!A(t,n);default:return!1}}function x(a,e){if(e instanceof S)return z(a,e);if(e instanceof F){if(e.op==="and")return e.children.every(t=>x(a,t));if(e.op==="or")return e.children.some(t=>x(a,t))}return!0}function y(a,e){for(let t of e.children)if(!x(a,t))return!1;return!0}function E(a,e){let t=a;if(e?.orderBy?.length&&(t=[...t].sort((n,s)=>{for(let i of e.orderBy??[]){let c=f(n[i.field],s[i.field]);if(c!==0)return i.direction==="asc"?c:-c}return 0})),e?.offset!=null&&(t=t.slice(Math.max(0,e.offset))),e?.limit!=null&&(t=t.slice(0,e.limit)),e?.select?.length){let n=new Set(e.select);t=t.map(s=>{let i={};for(let c of n)i[c]=s[c];return i})}return t}function N(a,e,t){if(t instanceof C){let n=Number(a[e]??0);a[e]=n+t.value;return}if(t instanceof I){let n=Number(a[e]??0);a[e]=n*t.value;return}if(t instanceof R){let n=a[e];a[e]=n==null||f(t.value,n)<0?t.value:n;return}if(t instanceof P){let n=a[e];a[e]=n==null||f(t.value,n)>0?t.value:n;return}if(t instanceof B){a[e]=null;return}if(t instanceof D){let n=Array.isArray(a[e])?[...a[e]]:[];n.push(d(t.value)),a[e]=n;return}if(t instanceof T){let n=Array.isArray(a[e])?a[e]:[];a[e]=n.filter(s=>!h.equal(s,t.value));return}if(t instanceof K){let n=b(a[e])?d(a[e]):{};if(b(t.value))for(let[s,i]of Object.entries(t.value))n[s]=d(i);a[e]=n;return}a[e]=d(t)}function $(a,e){let t=d(a);for(let[n,s]of Object.entries(e))N(t,n,s);return t}function v(a,e){let t=d(a);for(let n of e)if(n instanceof q)for(let[s,i]of Object.entries(n.values))t[s]=d(i);else N(t,n.field,n);return t}var U=new _,G=class extends k(j,O){schemaConfigPipe=M.object({table:M.string()});supportedFieldTypes=["string","number","boolean","null","object","array","date"];queryableOps=["eq","ne","gt","gte","lt","lte","in","notIn","like","exists","notExists","contains","notContains"];updateOps=["set","inc","mul","min","max","unset","push","pull","patch"];aggregateOps=["count","countDistinct","sum","avg","min","max"];stores=new Map;migrations=new Map;indexes=new Map;tables=new Map;foreignKeys=new Map;#t=Promise.resolve();constructor(e){super(e)}#n(e){return this.stores.has(e)||this.stores.set(e,new Map),this.stores.get(e)}#e(e,t){return this.#n(L(e,t))}#a(){let e=new Map;for(let[c,o]of this.stores.entries()){let r=new Map;for(let[l,u]of o.entries())r.set(l,d(u));e.set(c,r)}let t=new Map(this.migrations),n=new Map(this.indexes),s=new Map;for(let[c,o]of this.tables.entries())s.set(c,{pk:{...o.pk},fields:new Map(o.fields)});let i=new Map(this.foreignKeys);return{stores:e,migrations:t,indexes:n,tables:s,foreignKeys:i}}#r(e){w(this.stores,e.stores),w(this.migrations,e.migrations),w(this.indexes,e.indexes),w(this.tables,e.tables),w(this.foreignKeys,e.foreignKeys)}async findByPk(e,t,n){let i=this.#e(e,t).get(String(n));return i?d(i):null}async createMany(e,t,n){let s=e.pkField.name,i=this.#e(e,t);return n.map(c=>{let o=d(c);return i.set(String(o[s]),o),d(o)})}async deleteByPk(e,t,n){let s=this.#e(e,t),i=String(n),c=s.get(i);return c?(s.delete(i),d(c)):null}async updateByPk(e,t,n,s){let i=this.#e(e,t),c=String(n),o=i.get(c);if(!o)return null;let r=v(o,s);return i.set(c,r),d(r)}async findMany(e,t,n,s){let c=[...this.#e(e,t).values()].filter(o=>y(o,n)).map(o=>d(o));return E(c,s)}async count(e,t,n){return[...this.#e(e,t).values()].filter(i=>y(i,n)).length}async*iterateMany(e,t,n,s){let i=this.#e(e,t),c=E([...i.values()].filter(r=>y(r,n)).map(r=>d(r)),s),o=typeof s?.batchSize=="number"&&Number.isSafeInteger(s.batchSize)&&s.batchSize>0?s.batchSize:1;for(let r=0;r<c.length;r+=o)for(let l of c.slice(r,r+o))yield l}async updateMany(e,t,n,s){let i=this.#e(e,t),c=[...i.entries()].filter(([,r])=>y(r,n)).map(([r])=>r),o=[];for(let r of c){let l=i.get(r);if(!l)continue;let u=$(l,s);i.set(r,u),o.push(d(u))}return o}async deleteMany(e,t,n){let s=this.#e(e,t),i=e.pkField.name,c=[...s.values()].filter(o=>y(o,n)).map(o=>d(o));for(let o of c)s.delete(String(o[i]));return c}async upsertOne(e,t,n,s,i){let c=this.#e(e,t),o=e.pkField.name,l=[...c.values()].filter(g=>y(g,n))[0];if(l){let g=i.length>0?v(l,i):d(l);return c.set(String(g[o]),g),d(g)}let u=d(s),p=i.length>0?v(u,i):u;return c.set(String(p[o]),p),d(p)}async aggregate(e,t,n){let i=[...this.#e(e,t).values()];if(n.where){let r=n.where;i=i.filter(l=>y(l,r))}let c=new Map;if(n.groupBy.length>0)for(let r of i){let l=JSON.stringify(n.groupBy.map(u=>r[u]));c.has(l)||c.set(l,[]),c.get(l).push(r)}else c.set("__all__",i);let o=[];for(let[,r]of c){let l={};if(n.groupBy.length>0)for(let u of n.groupBy)l[u]=r[0][u];for(let u of n.aggregates)switch(u.fn){case"count":l[u.alias]=r.length;break;case"countDistinct":{let p=new Set(r.map(g=>JSON.stringify(g[u.field])));l[u.alias]=p.size;break}case"sum":l[u.alias]=r.reduce((p,g)=>p+Number(g[u.field]??0),0);break;case"avg":{let p=r.reduce((g,m)=>g+Number(m[u.field]??0),0);l[u.alias]=r.length>0?p/r.length:0;break}case"min":{let p=null;for(let g of r){let m=g[u.field];m!=null&&(p===null||f(m,p)<0)&&(p=m)}l[u.alias]=p;break}case"max":{let p=null;for(let g of r){let m=g[u.field];m!=null&&(p===null||f(m,p)>0)&&(p=m)}l[u.alias]=p;break}}o.push(l)}if(n.having){let r=n.having;return o.filter(l=>y(l,r))}return o}async loadMigrations(){return[...this.migrations.values()].map(e=>({id:e.id,appliedAt:e.appliedAt}))}async recordMigration(e,t){this.migrations.set(e,{id:e,appliedAt:t})}async applyCreateTable(e){let t=new Map;for(let n of e.fields)t.set(n.name,{...n});this.tables.set(e.name,{pk:{name:e.pk.name,type:e.pk.type},fields:t})}async applyDropTable(e){this.tables.delete(e.name)}async applyAddField(e){let t=this.tables.get(e.table);t&&t.fields.set(e.field.name,{...e.field})}async applyDropField(e){let t=this.tables.get(e.table);t&&t.fields.delete(e.name)}async applyModifyField(e){let t=this.tables.get(e.table);t&&(t.fields.delete(e.name),t.fields.set(e.to.name,{...e.to}))}async applyRenameTable(e){let t=this.tables.get(e.from);t&&(this.tables.delete(e.from),this.tables.set(e.to,t))}async applyRenameField(e){let t=this.tables.get(e.table);if(t){let n=t.fields.get(e.from);n&&(t.fields.delete(e.from),t.fields.set(e.to,{...n,name:e.to}))}}async applyAddIndex(e){let t=e.name??`${e.table}_${e.on.join("_")}_idx`;this.indexes.set(t,{table:e.table,on:e.on,unique:e.unique??!1})}async applyDropIndex(e){this.indexes.delete(e.name)}async applyAddForeignKey(e){let t=e.name??`${e.table}_${e.on}_fk`;this.foreignKeys.set(t,{table:e.table,on:e.on,references:{table:e.references.table,column:e.references.column},onDelete:e.onDelete,onUpdate:e.onUpdate})}async applyDropForeignKey(e){this.foreignKeys.delete(e.name)}async introspect(){let e=[];for(let[t,n]of this.tables.entries()){let s=[...n.fields.values()].map(o=>({name:o.name,type:o.type,nullable:o.nullable??!1,...o.default!==void 0?{default:o.default}:{},...o.unique?{unique:!0}:{}})),i=[...this.indexes.entries()].filter(([,o])=>o.table===t).map(([o,r])=>({name:o,on:r.on,unique:r.unique})),c=[...this.foreignKeys.entries()].filter(([,o])=>o.table===t).map(([o,r])=>({name:o,on:r.on,references:{table:r.references.table,column:r.references.column},...r.onDelete?{onDelete:r.onDelete}:{},...r.onUpdate?{onUpdate:r.onUpdate}:{}}));e.push({name:t,pk:{name:n.pk.name,type:n.pk.type},fields:s,indexes:i,foreignKeys:c})}return e}async acquireMigrationLock(e){let t,n=new Promise(i=>{t=i}),s=this.#t;this.#t=n,await s;try{return await e()}finally{t()}}async session(e){if(U.getStore())return e();let t=this.#a();try{return await U.run(!0,e)}catch(n){throw this.#r(t),n}}};export{G as a};
2
- //# sourceMappingURL=chunk-P4PRHHIY.min.mjs.map
1
+ import{a as k}from "./chunk-CU2HU5UE.min.mjs";import{f as S,g as F,j as O,k as q,l as C,m as I,n as R,o as P,p as B,q as D,r as T,s as K}from "./chunk-AODOD22O.min.mjs";import{AsyncLocalStorage as _}from"async_hooks";import{v as M,differ as h}from"valleyed";var j=()=>M.object({});function d(a){return structuredClone(a)}var w=(a,e)=>{a.clear();for(let[t,n]of e.entries())a.set(t,n)};function b(a){return typeof a=="object"&&a!==null&&!Array.isArray(a)}function A(a,e){return Array.isArray(a)?(Array.isArray(e)?e:[e]).every(n=>a.some(s=>h.equal(s,n))):b(a)&&b(e)?Object.entries(e).every(([t,n])=>A(a[t],n)):h.equal(a,e)}function f(a,e){if(a===e)return 0;if(a==null)return-1;if(e==null)return 1;if(typeof a=="number"&&typeof e=="number"||typeof a=="string"&&typeof e=="string")return a<e?-1:1;if(typeof a=="boolean"&&typeof e=="boolean")return a===!1?-1:1;let t=JSON.stringify(a),n=JSON.stringify(e);return t===n?0:t<n?-1:1}function L(a,e){return`${e.prefix??""}${e.table}`}function z(a,e){let t=a[e.field],n=e.value;switch(e.op){case"eq":return h.equal(t,n);case"ne":return!h.equal(t,n);case"gt":return f(t,n)>0;case"gte":return f(t,n)>=0;case"lt":return f(t,n)<0;case"lte":return f(t,n)<=0;case"in":return Array.isArray(n)?n.some(s=>h.equal(t,s)):!1;case"notIn":return Array.isArray(n)?!n.some(s=>h.equal(t,s)):!0;case"like":return String(t??"").toLowerCase().includes(String(n??"").toLowerCase());case"exists":return t!=null;case"notExists":return t==null;case"contains":return A(t,n);case"notContains":return!A(t,n);default:return!1}}function x(a,e){if(e instanceof S)return z(a,e);if(e instanceof F){if(e.op==="and")return e.children.every(t=>x(a,t));if(e.op==="or")return e.children.some(t=>x(a,t))}return!0}function y(a,e){for(let t of e.children)if(!x(a,t))return!1;return!0}function E(a,e){let t=a;if(e?.orderBy?.length&&(t=[...t].sort((n,s)=>{for(let i of e.orderBy??[]){let c=f(n[i.field],s[i.field]);if(c!==0)return i.direction==="asc"?c:-c}return 0})),e?.offset!=null&&(t=t.slice(Math.max(0,e.offset))),e?.limit!=null&&(t=t.slice(0,e.limit)),e?.select?.length){let n=new Set(e.select);t=t.map(s=>{let i={};for(let c of n)i[c]=s[c];return i})}return t}function N(a,e,t){if(t instanceof C){let n=Number(a[e]??0);a[e]=n+t.value;return}if(t instanceof I){let n=Number(a[e]??0);a[e]=n*t.value;return}if(t instanceof R){let n=a[e];a[e]=n==null||f(t.value,n)<0?t.value:n;return}if(t instanceof P){let n=a[e];a[e]=n==null||f(t.value,n)>0?t.value:n;return}if(t instanceof B){a[e]=null;return}if(t instanceof D){let n=Array.isArray(a[e])?[...a[e]]:[];n.push(d(t.value)),a[e]=n;return}if(t instanceof T){let n=Array.isArray(a[e])?a[e]:[];a[e]=n.filter(s=>!h.equal(s,t.value));return}if(t instanceof K){let n=b(a[e])?d(a[e]):{};if(b(t.value))for(let[s,i]of Object.entries(t.value))n[s]=d(i);a[e]=n;return}a[e]=d(t)}function $(a,e){let t=d(a);for(let[n,s]of Object.entries(e))N(t,n,s);return t}function v(a,e){let t=d(a);for(let n of e)if(n instanceof q)for(let[s,i]of Object.entries(n.values))t[s]=d(i);else N(t,n.field,n);return t}var U=new _,G=class extends k(j,O){schemaConfigPipe=M.object({table:M.string()});supportedFieldTypes=["string","number","boolean","null","object","array","date"];queryableOps=["eq","ne","gt","gte","lt","lte","in","notIn","like","exists","notExists","contains","notContains"];updateOps=["set","inc","mul","min","max","unset","push","pull","patch"];aggregateOps=["count","countDistinct","sum","avg","min","max"];stores=new Map;migrations=new Map;indexes=new Map;tables=new Map;foreignKeys=new Map;#t=Promise.resolve();constructor(e){super(e)}#n(e){return this.stores.has(e)||this.stores.set(e,new Map),this.stores.get(e)}#e(e,t){return this.#n(L(e,t))}#a(){let e=new Map;for(let[c,o]of this.stores.entries()){let r=new Map;for(let[l,u]of o.entries())r.set(l,d(u));e.set(c,r)}let t=new Map(this.migrations),n=new Map(this.indexes),s=new Map;for(let[c,o]of this.tables.entries())s.set(c,{pk:{...o.pk},fields:new Map(o.fields)});let i=new Map(this.foreignKeys);return{stores:e,migrations:t,indexes:n,tables:s,foreignKeys:i}}#r(e){w(this.stores,e.stores),w(this.migrations,e.migrations),w(this.indexes,e.indexes),w(this.tables,e.tables),w(this.foreignKeys,e.foreignKeys)}async findByPk(e,t,n){let i=this.#e(e,t).get(String(n));return i?d(i):null}async createMany(e,t,n){let s=e.pkField.name,i=this.#e(e,t);return n.map(c=>{let o=d(c);return i.set(String(o[s]),o),d(o)})}async deleteByPk(e,t,n){let s=this.#e(e,t),i=String(n),c=s.get(i);return c?(s.delete(i),d(c)):null}async updateByPk(e,t,n,s){let i=this.#e(e,t),c=String(n),o=i.get(c);if(!o)return null;let r=v(o,s);return i.set(c,r),d(r)}async findMany(e,t,n,s){let c=[...this.#e(e,t).values()].filter(o=>y(o,n)).map(o=>d(o));return E(c,s)}async count(e,t,n){return[...this.#e(e,t).values()].filter(i=>y(i,n)).length}async*iterateMany(e,t,n,s){let i=this.#e(e,t),c=E([...i.values()].filter(r=>y(r,n)).map(r=>d(r)),s),o=typeof s?.batchSize=="number"&&Number.isSafeInteger(s.batchSize)&&s.batchSize>0?s.batchSize:1;for(let r=0;r<c.length;r+=o)for(let l of c.slice(r,r+o))yield l}async updateMany(e,t,n,s){let i=this.#e(e,t),c=[...i.entries()].filter(([,r])=>y(r,n)).map(([r])=>r),o=[];for(let r of c){let l=i.get(r);if(!l)continue;let u=$(l,s);i.set(r,u),o.push(d(u))}return o}async deleteMany(e,t,n){let s=this.#e(e,t),i=e.pkField.name,c=[...s.values()].filter(o=>y(o,n)).map(o=>d(o));for(let o of c)s.delete(String(o[i]));return c}async upsertOne(e,t,n,s,i){let c=this.#e(e,t),o=e.pkField.name,l=[...c.values()].filter(g=>y(g,n))[0];if(l){let g=i.length>0?v(l,i):d(l);return c.set(String(g[o]),g),d(g)}let u=d(s),p=i.length>0?v(u,i):u;return c.set(String(p[o]),p),d(p)}async aggregate(e,t,n){let i=[...this.#e(e,t).values()];if(n.where){let r=n.where;i=i.filter(l=>y(l,r))}let c=new Map;if(n.groupBy.length>0)for(let r of i){let l=JSON.stringify(n.groupBy.map(u=>r[u]));c.has(l)||c.set(l,[]),c.get(l).push(r)}else c.set("__all__",i);let o=[];for(let[,r]of c){let l={};if(n.groupBy.length>0)for(let u of n.groupBy)l[u]=r[0][u];for(let u of n.aggregates)switch(u.fn){case"count":l[u.alias]=r.length;break;case"countDistinct":{let p=new Set(r.map(g=>JSON.stringify(g[u.field])));l[u.alias]=p.size;break}case"sum":l[u.alias]=r.reduce((p,g)=>p+Number(g[u.field]??0),0);break;case"avg":{let p=r.reduce((g,m)=>g+Number(m[u.field]??0),0);l[u.alias]=r.length>0?p/r.length:0;break}case"min":{let p=null;for(let g of r){let m=g[u.field];m!=null&&(p===null||f(m,p)<0)&&(p=m)}l[u.alias]=p;break}case"max":{let p=null;for(let g of r){let m=g[u.field];m!=null&&(p===null||f(m,p)>0)&&(p=m)}l[u.alias]=p;break}}o.push(l)}if(n.having){let r=n.having;return o.filter(l=>y(l,r))}return o}async loadMigrations(){return[...this.migrations.values()].map(e=>({id:e.id,appliedAt:e.appliedAt}))}async recordMigration(e,t){this.migrations.set(e,{id:e,appliedAt:t})}async applyCreateTable(e){let t=new Map;for(let n of e.fields)t.set(n.name,{...n});this.tables.set(e.name,{pk:{name:e.pk.name,type:e.pk.type},fields:t})}async applyDropTable(e){this.tables.delete(e.name)}async applyAddField(e){let t=this.tables.get(e.table);t&&t.fields.set(e.field.name,{...e.field})}async applyDropField(e){let t=this.tables.get(e.table);t&&t.fields.delete(e.name)}async applyModifyField(e){let t=this.tables.get(e.table);t&&(t.fields.delete(e.name),t.fields.set(e.to.name,{...e.to}))}async applyRenameTable(e){let t=this.tables.get(e.from);t&&(this.tables.delete(e.from),this.tables.set(e.to,t))}async applyRenameField(e){let t=this.tables.get(e.table);if(t){let n=t.fields.get(e.from);n&&(t.fields.delete(e.from),t.fields.set(e.to,{...n,name:e.to}))}}async applyAddIndex(e){let t=e.name??`${e.table}_${e.on.join("_")}_idx`;this.indexes.set(t,{table:e.table,on:e.on,unique:e.unique??!1})}async applyDropIndex(e){this.indexes.delete(e.name)}async applyAddForeignKey(e){let t=e.name??`${e.table}_${e.on}_fk`;this.foreignKeys.set(t,{table:e.table,on:e.on,references:{table:e.references.table,column:e.references.column},onDelete:e.onDelete,onUpdate:e.onUpdate})}async applyDropForeignKey(e){this.foreignKeys.delete(e.name)}async introspect(){let e=[];for(let[t,n]of this.tables.entries()){let s=[...n.fields.values()].map(o=>({name:o.name,type:o.type,nullable:o.nullable??!1,...o.default!==void 0?{default:o.default}:{},...o.unique?{unique:!0}:{}})),i=[...this.indexes.entries()].filter(([,o])=>o.table===t).map(([o,r])=>({name:o,on:r.on,unique:r.unique})),c=[...this.foreignKeys.entries()].filter(([,o])=>o.table===t).map(([o,r])=>({name:o,on:r.on,references:{table:r.references.table,column:r.references.column},...r.onDelete?{onDelete:r.onDelete}:{},...r.onUpdate?{onUpdate:r.onUpdate}:{}}));e.push({name:t,pk:{name:n.pk.name,type:n.pk.type},fields:s,indexes:i,foreignKeys:c})}return e}async acquireMigrationLock(e){let t,n=new Promise(i=>{t=i}),s=this.#t;this.#t=n,await s;try{return await e()}finally{t()}}async session(e){if(U.getStore())return e();let t=this.#a();try{return await U.run(!0,e)}catch(n){throw this.#r(t),n}}};export{G as a};
2
+ //# sourceMappingURL=chunk-QCCDJLBH.min.mjs.map
@@ -1,7 +1,7 @@
1
1
  import {
2
2
  EquippedError,
3
3
  Instance
4
- } from "./chunk-A4P7P6BU.mjs";
4
+ } from "./chunk-CEYT5YBA.mjs";
5
5
 
6
6
  // src/orm/errors/validation.ts
7
7
  var OrmValidationError = class extends EquippedError {
@@ -1277,4 +1277,4 @@ export {
1277
1277
  opTouchedFields,
1278
1278
  flattenOps
1279
1279
  };
1280
- //# sourceMappingURL=chunk-3TP7NINX.mjs.map
1280
+ //# sourceMappingURL=chunk-RIXTQQUU.mjs.map
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  Instance
3
- } from "./chunk-A4P7P6BU.mjs";
3
+ } from "./chunk-CEYT5YBA.mjs";
4
4
 
5
5
  // src/cache/adapters/base.ts
6
6
  var Cache = class {
@@ -19,4 +19,4 @@ var Cache = class {
19
19
  export {
20
20
  Cache
21
21
  };
22
- //# sourceMappingURL=chunk-LKS5ZE45.mjs.map
22
+ //# sourceMappingURL=chunk-RPPYCWXW.mjs.map
@@ -1,9 +1,9 @@
1
1
  import {
2
2
  KafkaEventBus
3
- } from "./chunk-7CP7ZE2O.mjs";
3
+ } from "./chunk-PCEHFZ6G.mjs";
4
4
  import {
5
5
  Instance
6
- } from "./chunk-A4P7P6BU.mjs";
6
+ } from "./chunk-CEYT5YBA.mjs";
7
7
 
8
8
  // src/dbs/adapters/base/db.ts
9
9
  var Db = class {
@@ -123,4 +123,4 @@ export {
123
123
  queryResultsPipe,
124
124
  wrapQueryParams
125
125
  };
126
- //# sourceMappingURL=chunk-HXFNN6RI.mjs.map
126
+ //# sourceMappingURL=chunk-T2O72JBW.mjs.map
@@ -1,3 +1,6 @@
1
+ import {
2
+ configurable
3
+ } from "./chunk-NEF3UYFA.mjs";
1
4
  import {
2
5
  Filter,
3
6
  FilterGroup,
@@ -11,10 +14,7 @@ import {
11
14
  PushOp,
12
15
  SetOp,
13
16
  UnsetOp
14
- } from "./chunk-3TP7NINX.mjs";
15
- import {
16
- configurable
17
- } from "./chunk-A4P7P6BU.mjs";
17
+ } from "./chunk-RIXTQQUU.mjs";
18
18
 
19
19
  // src/orm/adapters/in-memory/index.ts
20
20
  import { AsyncLocalStorage } from "async_hooks";
@@ -792,4 +792,4 @@ if (void 0) {
792
792
  export {
793
793
  InMemoryAdapter
794
794
  };
795
- //# sourceMappingURL=chunk-TSVHZZE4.mjs.map
795
+ //# sourceMappingURL=chunk-VQO4MSEC.mjs.map
@@ -1,2 +1,2 @@
1
- import{a as r}from "./chunk-IN5YKIJ7.min.mjs";var t=class extends r{adapter;table;constructor(e){super(`Introspection failed for table '${e.table}' on adapter '${e.adapter}'`,{adapter:e.adapter,table:e.table},e.cause),this.adapter=e.adapter,this.table=e.table}};export{t as a};
2
- //# sourceMappingURL=chunk-676VIABN.min.mjs.map
1
+ import{a as r}from "./chunk-APSDCRY5.min.mjs";var t=class extends r{adapter;table;constructor(e){super(`Introspection failed for table '${e.table}' on adapter '${e.adapter}'`,{adapter:e.adapter,table:e.table},e.cause),this.adapter=e.adapter,this.table=e.table}};export{t as a};
2
+ //# sourceMappingURL=chunk-X7VNAGLR.min.mjs.map
@@ -0,0 +1,2 @@
1
+ import{a as r}from "./chunk-DAUQA32Q.min.mjs";import{a as p}from "./chunk-CU2HU5UE.min.mjs";import{B as n,a as c}from "./chunk-APSDCRY5.min.mjs";import{Cluster as d,Redis as u}from"ioredis";import{v as t}from"valleyed";var m=()=>t.meta(t.object({host:t.string(),port:t.optional(t.number()),password:t.optional(t.string()),username:t.optional(t.string()),tls:t.optional(t.boolean()),cluster:t.optional(t.boolean())}),{title:"Redis Config",$refId:"RedisConfig"}),l=class a extends p(m,r){#e;constructor(e,s){super(e);let o={...e.host?{host:e.host}:{},...e.port?{port:e.port}:{}},i={...s,...e.password?{password:e.password}:{},...e.username?{username:e.username}:{},...e.tls?{tls:{}}:{},lazyConnect:!0};this.#e=e.cluster?new d([o],{...s,redisOptions:i,lazyConnect:!0}):new u({...i,...o}),this.#e.on("error",async h=>{n.crash(new c("Redis failed with error",{},h))}),s||n.on("start",async()=>this.#e.connect(),{class:a}),n.on("close",async()=>this.#e.quit(),{class:a})}get connectionOptions(){return this.#e.options}async delete(e){await this.#e.del(this.getScopedKey(e))}async get(e){return await this.#e.get(this.getScopedKey(e))}async set(e,s,o){o?await this.#e.setex(this.getScopedKey(e),o,s):this.#e.set(this.getScopedKey(e),s)}};export{m as a,l as b};
2
+ //# sourceMappingURL=chunk-XTXAEBXY.min.mjs.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/cache/adapters/redis/index.ts"],"sourcesContent":["import { Cluster, Redis, type RedisOptions } from 'ioredis'\nimport { v } from 'valleyed'\n\nimport { EquippedError } from '../../../errors'\nimport { Instance } from '../../../instance'\nimport { configurable } from '../../../utilities'\nimport { Cache } from '../base'\n\nexport const redisConfigPipe = () =>\n\tv.meta(\n\t\tv.object({\n\t\t\thost: v.string(),\n\t\t\tport: v.optional(v.number()),\n\t\t\tpassword: v.optional(v.string()),\n\t\t\tusername: v.optional(v.string()),\n\t\t\ttls: v.optional(v.boolean()),\n\t\t\tcluster: v.optional(v.boolean()),\n\t\t}),\n\t\t{ title: 'Redis Config', $refId: 'RedisConfig' },\n\t)\n\nexport class RedisCache extends configurable(redisConfigPipe, Cache) {\n\t#client: Cluster | Redis\n\n\tprotected constructor(config: typeof RedisCache.Config, extraConfig?: Partial<RedisOptions>) {\n\t\tsuper(config)\n\t\tconst node = {\n\t\t\t...(config.host ? { host: config.host } : {}),\n\t\t\t...(config.port ? { port: config.port } : {}),\n\t\t}\n\t\tconst common = {\n\t\t\t...extraConfig,\n\t\t\t...(config.password ? { password: config.password } : {}),\n\t\t\t...(config.username ? { username: config.username } : {}),\n\t\t\t...(config.tls ? { tls: {} } : {}),\n\t\t\tlazyConnect: true,\n\t\t}\n\t\tthis.#client = config.cluster\n\t\t\t? new Cluster([node], {\n\t\t\t\t\t...extraConfig,\n\t\t\t\t\tredisOptions: common,\n\t\t\t\t\tlazyConnect: true,\n\t\t\t\t})\n\t\t\t: new Redis({ ...common, ...node })\n\t\tthis.#client.on('error', async (error) => {\n\t\t\tInstance.crash(new EquippedError(`Redis failed with error`, {}, error))\n\t\t})\n\t\tif (!extraConfig) Instance.on('start', async () => this.#client.connect(), { class: RedisCache })\n\t\tInstance.on('close', async () => this.#client.quit(), { class: RedisCache })\n\t}\n\n\tget connectionOptions() {\n\t\treturn this.#client.options\n\t}\n\n\tasync delete(key: string) {\n\t\tawait this.#client.del(this.getScopedKey(key))\n\t}\n\tasync get(key: string) {\n\t\treturn await this.#client.get(this.getScopedKey(key))\n\t}\n\tasync set(key: string, data: string, ttlInSecs?: number) {\n\t\tif (ttlInSecs) await this.#client.setex(this.getScopedKey(key), ttlInSecs, data)\n\t\telse this.#client.set(this.getScopedKey(key), data)\n\t}\n}\n\nif (import.meta.vitest) {\n\tconst { describe, test, expect, expectTypeOf, vi, beforeEach, afterEach } = import.meta.vitest\n\ttype PipeOutput<T> = import('valleyed').PipeOutput<T>\n\n\tlet hookCalls: Array<{ event: string; options?: any }>\n\n\tbeforeEach(() => {\n\t\thookCalls = []\n\t\tvi.spyOn(Instance, 'on').mockImplementation((event, _cb, options) => {\n\t\t\thookCalls.push({ event, options })\n\t\t})\n\t\tvi.spyOn(Instance, 'get').mockReturnValue({ getScopedName: (_name: string, _sep: string) => `test:${_name}` } as any)\n\t})\n\n\tafterEach(() => {\n\t\tvi.restoreAllMocks()\n\t})\n\n\tdescribe('RedisCache', () => {\n\t\ttest('create() produces a working instance', () => {\n\t\t\tconst cache = RedisCache.create({ host: 'localhost' })\n\t\t\texpect(cache).toBeInstanceOf(RedisCache)\n\t\t})\n\n\t\ttest('new RedisCache() is a compile error', () => {\n\t\t\t// @ts-expect-error — external `new` on a class with protected constructor is a compile error\n\t\t\tvoid (() => new RedisCache({ host: 'localhost' }))\n\t\t})\n\n\t\ttest('Instance.on calls use { class: RedisCache }', () => {\n\t\t\tRedisCache.create({ host: 'localhost' })\n\t\t\tconst startHook = hookCalls.find((h) => h.event === 'start')\n\t\t\tconst closeHook = hookCalls.find((h) => h.event === 'close')\n\t\t\texpect(startHook?.options).toEqual({ class: RedisCache })\n\t\t\texpect(closeHook?.options).toEqual({ class: RedisCache })\n\t\t})\n\n\t\ttest('skips start hook when extraConfig is provided', () => {\n\t\t\tRedisCache.create({ host: 'localhost' }, { maxRetriesPerRequest: null })\n\t\t\tconst startHooks = hookCalls.filter((h) => h.event === 'start')\n\t\t\tconst closeHooks = hookCalls.filter((h) => h.event === 'close')\n\t\t\texpect(startHooks).toHaveLength(0)\n\t\t\texpect(closeHooks).toHaveLength(1)\n\t\t})\n\n\t\ttest('Config type matches pipe output', () => {\n\t\t\ttype Expected = PipeOutput<ReturnType<typeof redisConfigPipe>>\n\t\t\texpectTypeOf<typeof RedisCache.Config>().toEqualTypeOf<Expected>()\n\t\t})\n\n\t\ttest('connectionOptions is accessible', () => {\n\t\t\tconst cache = RedisCache.create({ host: 'localhost', port: 6379 })\n\t\t\texpect(cache.connectionOptions).toBeDefined()\n\t\t})\n\t})\n}\n"],"mappings":"wGAAA,OAAS,WAAAA,EAAS,SAAAC,MAAgC,UAClD,OAAS,KAAAC,MAAS,WAOX,IAAMC,EAAkB,IAC9BC,EAAE,KACDA,EAAE,OAAO,CACR,KAAMA,EAAE,OAAO,EACf,KAAMA,EAAE,SAASA,EAAE,OAAO,CAAC,EAC3B,SAAUA,EAAE,SAASA,EAAE,OAAO,CAAC,EAC/B,SAAUA,EAAE,SAASA,EAAE,OAAO,CAAC,EAC/B,IAAKA,EAAE,SAASA,EAAE,QAAQ,CAAC,EAC3B,QAASA,EAAE,SAASA,EAAE,QAAQ,CAAC,CAChC,CAAC,EACD,CAAE,MAAO,eAAgB,OAAQ,aAAc,CAChD,EAEYC,EAAN,MAAMC,UAAmBC,EAAaJ,EAAiBK,CAAK,CAAE,CACpEC,GAEU,YAAYC,EAAkCC,EAAqC,CAC5F,MAAMD,CAAM,EACZ,IAAME,EAAO,CACZ,GAAIF,EAAO,KAAO,CAAE,KAAMA,EAAO,IAAK,EAAI,CAAC,EAC3C,GAAIA,EAAO,KAAO,CAAE,KAAMA,EAAO,IAAK,EAAI,CAAC,CAC5C,EACMG,EAAS,CACd,GAAGF,EACH,GAAID,EAAO,SAAW,CAAE,SAAUA,EAAO,QAAS,EAAI,CAAC,EACvD,GAAIA,EAAO,SAAW,CAAE,SAAUA,EAAO,QAAS,EAAI,CAAC,EACvD,GAAIA,EAAO,IAAM,CAAE,IAAK,CAAC,CAAE,EAAI,CAAC,EAChC,YAAa,EACd,EACA,KAAKD,GAAUC,EAAO,QACnB,IAAII,EAAQ,CAACF,CAAI,EAAG,CACpB,GAAGD,EACH,aAAcE,EACd,YAAa,EACd,CAAC,EACA,IAAIE,EAAM,CAAE,GAAGF,EAAQ,GAAGD,CAAK,CAAC,EACnC,KAAKH,GAAQ,GAAG,QAAS,MAAOO,GAAU,CACzCC,EAAS,MAAM,IAAIC,EAAc,0BAA2B,CAAC,EAAGF,CAAK,CAAC,CACvE,CAAC,EACIL,GAAaM,EAAS,GAAG,QAAS,SAAY,KAAKR,GAAQ,QAAQ,EAAG,CAAE,MAAOH,CAAW,CAAC,EAChGW,EAAS,GAAG,QAAS,SAAY,KAAKR,GAAQ,KAAK,EAAG,CAAE,MAAOH,CAAW,CAAC,CAC5E,CAEA,IAAI,mBAAoB,CACvB,OAAO,KAAKG,GAAQ,OACrB,CAEA,MAAM,OAAOU,EAAa,CACzB,MAAM,KAAKV,GAAQ,IAAI,KAAK,aAAaU,CAAG,CAAC,CAC9C,CACA,MAAM,IAAIA,EAAa,CACtB,OAAO,MAAM,KAAKV,GAAQ,IAAI,KAAK,aAAaU,CAAG,CAAC,CACrD,CACA,MAAM,IAAIA,EAAaC,EAAcC,EAAoB,CACpDA,EAAW,MAAM,KAAKZ,GAAQ,MAAM,KAAK,aAAaU,CAAG,EAAGE,EAAWD,CAAI,EAC1E,KAAKX,GAAQ,IAAI,KAAK,aAAaU,CAAG,EAAGC,CAAI,CACnD,CACD","names":["Cluster","Redis","v","redisConfigPipe","v","RedisCache","_RedisCache","configurable","Cache","#client","config","extraConfig","node","common","Cluster","Redis","error","Instance","EquippedError","key","data","ttlInSecs"]}
1
+ {"version":3,"sources":["../../src/cache/adapters/redis/index.ts"],"sourcesContent":["import { Cluster, Redis, type RedisOptions } from 'ioredis'\nimport { v } from 'valleyed'\n\nimport { EquippedError } from '../../../errors'\nimport { Instance } from '../../../instance'\nimport { configurable } from '../../../utilities'\nimport { Cache } from '../base'\n\nexport const redisConfigPipe = () =>\n\tv.meta(\n\t\tv.object({\n\t\t\thost: v.string(),\n\t\t\tport: v.optional(v.number()),\n\t\t\tpassword: v.optional(v.string()),\n\t\t\tusername: v.optional(v.string()),\n\t\t\ttls: v.optional(v.boolean()),\n\t\t\tcluster: v.optional(v.boolean()),\n\t\t}),\n\t\t{ title: 'Redis Config', $refId: 'RedisConfig' },\n\t)\n\nexport class RedisCache extends configurable(redisConfigPipe, Cache) {\n\t#client: Cluster | Redis\n\n\tprotected constructor(config: typeof RedisCache.Config, extraConfig?: Partial<RedisOptions>) {\n\t\tsuper(config)\n\t\tconst node = {\n\t\t\t...(config.host ? { host: config.host } : {}),\n\t\t\t...(config.port ? { port: config.port } : {}),\n\t\t}\n\t\tconst common = {\n\t\t\t...extraConfig,\n\t\t\t...(config.password ? { password: config.password } : {}),\n\t\t\t...(config.username ? { username: config.username } : {}),\n\t\t\t...(config.tls ? { tls: {} } : {}),\n\t\t\tlazyConnect: true,\n\t\t}\n\t\tthis.#client = config.cluster\n\t\t\t? new Cluster([node], {\n\t\t\t\t\t...extraConfig,\n\t\t\t\t\tredisOptions: common,\n\t\t\t\t\tlazyConnect: true,\n\t\t\t\t})\n\t\t\t: new Redis({ ...common, ...node })\n\t\tthis.#client.on('error', async (error) => {\n\t\t\tInstance.crash(new EquippedError(`Redis failed with error`, {}, error))\n\t\t})\n\t\tif (!extraConfig) Instance.on('start', async () => this.#client.connect(), { class: RedisCache })\n\t\tInstance.on('close', async () => this.#client.quit(), { class: RedisCache })\n\t}\n\n\tget connectionOptions() {\n\t\treturn this.#client.options\n\t}\n\n\tasync delete(key: string) {\n\t\tawait this.#client.del(this.getScopedKey(key))\n\t}\n\tasync get(key: string) {\n\t\treturn await this.#client.get(this.getScopedKey(key))\n\t}\n\tasync set(key: string, data: string, ttlInSecs?: number) {\n\t\tif (ttlInSecs) await this.#client.setex(this.getScopedKey(key), ttlInSecs, data)\n\t\telse this.#client.set(this.getScopedKey(key), data)\n\t}\n}\n\nif (import.meta.vitest) {\n\tconst { describe, test, expect, expectTypeOf, vi, beforeEach, afterEach } = import.meta.vitest\n\ttype PipeOutput<T> = import('valleyed').PipeOutput<T>\n\n\tlet hookCalls: Array<{ event: string; options?: any }>\n\n\tbeforeEach(() => {\n\t\thookCalls = []\n\t\tvi.spyOn(Instance, 'on').mockImplementation((event, _cb, options) => {\n\t\t\thookCalls.push({ event, options })\n\t\t})\n\t\tvi.spyOn(Instance, 'get').mockReturnValue({ getScopedName: (_name: string, _sep: string) => `test:${_name}` } as any)\n\t})\n\n\tafterEach(() => {\n\t\tvi.restoreAllMocks()\n\t})\n\n\tdescribe('RedisCache', () => {\n\t\ttest('create() produces a working instance', () => {\n\t\t\tconst cache = RedisCache.create({ host: 'localhost' })\n\t\t\texpect(cache).toBeInstanceOf(RedisCache)\n\t\t})\n\n\t\ttest('new RedisCache() is a compile error', () => {\n\t\t\t// @ts-expect-error — external `new` on a class with protected constructor is a compile error\n\t\t\tvoid (() => new RedisCache({ host: 'localhost' }))\n\t\t})\n\n\t\ttest('Instance.on calls use { class: RedisCache }', () => {\n\t\t\tRedisCache.create({ host: 'localhost' })\n\t\t\tconst startHook = hookCalls.find((h) => h.event === 'start')\n\t\t\tconst closeHook = hookCalls.find((h) => h.event === 'close')\n\t\t\texpect(startHook?.options).toEqual({ class: RedisCache })\n\t\t\texpect(closeHook?.options).toEqual({ class: RedisCache })\n\t\t})\n\n\t\ttest('skips start hook when extraConfig is provided', () => {\n\t\t\tRedisCache.create({ host: 'localhost' }, { maxRetriesPerRequest: null })\n\t\t\tconst startHooks = hookCalls.filter((h) => h.event === 'start')\n\t\t\tconst closeHooks = hookCalls.filter((h) => h.event === 'close')\n\t\t\texpect(startHooks).toHaveLength(0)\n\t\t\texpect(closeHooks).toHaveLength(1)\n\t\t})\n\n\t\ttest('Config type matches pipe output', () => {\n\t\t\ttype Expected = PipeOutput<ReturnType<typeof redisConfigPipe>>\n\t\t\texpectTypeOf<typeof RedisCache.Config>().toEqualTypeOf<Expected>()\n\t\t})\n\n\t\ttest('connectionOptions is accessible', () => {\n\t\t\tconst cache = RedisCache.create({ host: 'localhost', port: 6379 })\n\t\t\texpect(cache.connectionOptions).toBeDefined()\n\t\t})\n\t})\n}\n"],"mappings":"8IAAA,OAAS,WAAAA,EAAS,SAAAC,MAAgC,UAClD,OAAS,KAAAC,MAAS,WAOX,IAAMC,EAAkB,IAC9BC,EAAE,KACDA,EAAE,OAAO,CACR,KAAMA,EAAE,OAAO,EACf,KAAMA,EAAE,SAASA,EAAE,OAAO,CAAC,EAC3B,SAAUA,EAAE,SAASA,EAAE,OAAO,CAAC,EAC/B,SAAUA,EAAE,SAASA,EAAE,OAAO,CAAC,EAC/B,IAAKA,EAAE,SAASA,EAAE,QAAQ,CAAC,EAC3B,QAASA,EAAE,SAASA,EAAE,QAAQ,CAAC,CAChC,CAAC,EACD,CAAE,MAAO,eAAgB,OAAQ,aAAc,CAChD,EAEYC,EAAN,MAAMC,UAAmBC,EAAaJ,EAAiBK,CAAK,CAAE,CACpEC,GAEU,YAAYC,EAAkCC,EAAqC,CAC5F,MAAMD,CAAM,EACZ,IAAME,EAAO,CACZ,GAAIF,EAAO,KAAO,CAAE,KAAMA,EAAO,IAAK,EAAI,CAAC,EAC3C,GAAIA,EAAO,KAAO,CAAE,KAAMA,EAAO,IAAK,EAAI,CAAC,CAC5C,EACMG,EAAS,CACd,GAAGF,EACH,GAAID,EAAO,SAAW,CAAE,SAAUA,EAAO,QAAS,EAAI,CAAC,EACvD,GAAIA,EAAO,SAAW,CAAE,SAAUA,EAAO,QAAS,EAAI,CAAC,EACvD,GAAIA,EAAO,IAAM,CAAE,IAAK,CAAC,CAAE,EAAI,CAAC,EAChC,YAAa,EACd,EACA,KAAKD,GAAUC,EAAO,QACnB,IAAII,EAAQ,CAACF,CAAI,EAAG,CACpB,GAAGD,EACH,aAAcE,EACd,YAAa,EACd,CAAC,EACA,IAAIE,EAAM,CAAE,GAAGF,EAAQ,GAAGD,CAAK,CAAC,EACnC,KAAKH,GAAQ,GAAG,QAAS,MAAOO,GAAU,CACzCC,EAAS,MAAM,IAAIC,EAAc,0BAA2B,CAAC,EAAGF,CAAK,CAAC,CACvE,CAAC,EACIL,GAAaM,EAAS,GAAG,QAAS,SAAY,KAAKR,GAAQ,QAAQ,EAAG,CAAE,MAAOH,CAAW,CAAC,EAChGW,EAAS,GAAG,QAAS,SAAY,KAAKR,GAAQ,KAAK,EAAG,CAAE,MAAOH,CAAW,CAAC,CAC5E,CAEA,IAAI,mBAAoB,CACvB,OAAO,KAAKG,GAAQ,OACrB,CAEA,MAAM,OAAOU,EAAa,CACzB,MAAM,KAAKV,GAAQ,IAAI,KAAK,aAAaU,CAAG,CAAC,CAC9C,CACA,MAAM,IAAIA,EAAa,CACtB,OAAO,MAAM,KAAKV,GAAQ,IAAI,KAAK,aAAaU,CAAG,CAAC,CACrD,CACA,MAAM,IAAIA,EAAaC,EAAcC,EAAoB,CACpDA,EAAW,MAAM,KAAKZ,GAAQ,MAAM,KAAK,aAAaU,CAAG,EAAGE,EAAWD,CAAI,EAC1E,KAAKX,GAAQ,IAAI,KAAK,aAAaU,CAAG,EAAGC,CAAI,CACnD,CACD","names":["Cluster","Redis","v","redisConfigPipe","v","RedisCache","_RedisCache","configurable","Cache","#client","config","extraConfig","node","common","Cluster","Redis","error","Instance","EquippedError","key","data","ttlInSecs"]}
@@ -1,2 +1,2 @@
1
- import{b as s}from "./chunk-MQXTTWPS.min.mjs";import{K as a}from "./chunk-IN5YKIJ7.min.mjs";var o=class{constructor(n){this.config=n}getScopedDb(n){return a.get().getScopedName(n).replaceAll(".","-")}};import{v as u}from"valleyed";var x=()=>u.object({debeziumUrl:u.string(),eventBus:u.instanceOf(s)});import{v as e}from"valleyed";var i=(p=>(p.and="and",p.or="or",p))(i||{}),y=(r=>(r.lt="lt",r.lte="lte",r.gt="gt",r.gte="gte",r.eq="eq",r.ne="ne",r.in="in",r.nin="nin",r))(y||{}),l=e.catch(e.defaults(e.in(["and","or"]),"and"),"and"),f=e.object({field:e.string(),value:e.any(),condition:e.catch(e.defaults(e.in(Object.values(y)),"eq"),"eq")}),c=e.recursive(()=>e.discriminate(t=>Object.values(i).includes(t.condition)?"block":"regular",{block:e.object({condition:l,value:e.array(c)}),regular:f}),"QueryWhereBlock"),d=e.defaults(e.array(c),[]);function m(){return e.meta(e.object({all:e.defaults(e.boolean(),!1),limit:e.lazy(()=>{let t=a.get().settings.utils.paginationDefaultLimit;return e.catch(e.defaults(e.number().pipe(e.lte(t)),t),t)}),page:e.catch(e.defaults(e.number().pipe(e.gte(1)),1),1),search:e.defaults(e.nullish(e.object({value:e.string(),fields:e.array(e.string())})),null),sort:e.defaults(e.array(e.object({field:e.string(),desc:e.defaults(e.boolean(),!1)})),[]),whereType:l,where:d,select:e.optional(e.array(e.string()))}).pipe(t=>({...t,auth:[],authType:"and"})),{title:"Query Params",$refId:"QueryParams"})}function O(t){return e.object({pages:e.object({current:e.number(),start:e.number(),last:e.number(),previous:e.nullable(e.number()),next:e.nullable(e.number())}),docs:e.object({limit:e.number(),total:e.number(),count:e.number()}),results:e.array(t)})}function v(t){return e.assert(m(),t)}export{o as a,x as b,i as c,y as d,m as e,O as f,v as g};
2
- //# sourceMappingURL=chunk-2GGMLKRP.min.mjs.map
1
+ import{b as s}from "./chunk-DAK7OKSH.min.mjs";import{B as a}from "./chunk-APSDCRY5.min.mjs";var o=class{constructor(n){this.config=n}getScopedDb(n){return a.get().getScopedName(n).replaceAll(".","-")}};import{v as u}from"valleyed";var x=()=>u.object({debeziumUrl:u.string(),eventBus:u.instanceOf(s)});import{v as e}from"valleyed";var i=(p=>(p.and="and",p.or="or",p))(i||{}),y=(r=>(r.lt="lt",r.lte="lte",r.gt="gt",r.gte="gte",r.eq="eq",r.ne="ne",r.in="in",r.nin="nin",r))(y||{}),l=e.catch(e.defaults(e.in(["and","or"]),"and"),"and"),f=e.object({field:e.string(),value:e.any(),condition:e.catch(e.defaults(e.in(Object.values(y)),"eq"),"eq")}),c=e.recursive(()=>e.discriminate(t=>Object.values(i).includes(t.condition)?"block":"regular",{block:e.object({condition:l,value:e.array(c)}),regular:f}),"QueryWhereBlock"),d=e.defaults(e.array(c),[]);function m(){return e.meta(e.object({all:e.defaults(e.boolean(),!1),limit:e.lazy(()=>{let t=a.get().settings.utils.paginationDefaultLimit;return e.catch(e.defaults(e.number().pipe(e.lte(t)),t),t)}),page:e.catch(e.defaults(e.number().pipe(e.gte(1)),1),1),search:e.defaults(e.nullish(e.object({value:e.string(),fields:e.array(e.string())})),null),sort:e.defaults(e.array(e.object({field:e.string(),desc:e.defaults(e.boolean(),!1)})),[]),whereType:l,where:d,select:e.optional(e.array(e.string()))}).pipe(t=>({...t,auth:[],authType:"and"})),{title:"Query Params",$refId:"QueryParams"})}function O(t){return e.object({pages:e.object({current:e.number(),start:e.number(),last:e.number(),previous:e.nullable(e.number()),next:e.nullable(e.number())}),docs:e.object({limit:e.number(),total:e.number(),count:e.number()}),results:e.array(t)})}function v(t){return e.assert(m(),t)}export{o as a,x as b,i as c,y as d,m as e,O as f,v as g};
2
+ //# sourceMappingURL=chunk-YDQW6ETS.min.mjs.map
@@ -0,0 +1,2 @@
1
+ import{B as u,a as n}from "./chunk-APSDCRY5.min.mjs";import{a as m}from "./chunk-AQY7QVYI.min.mjs";var f={};m(f,{signinWithApple:()=>b,signinWithFacebook:()=>_,signinWithGoogle:()=>x});import g from"axios";import p from"jsonwebtoken";import d from"jwks-rsa";var x=async t=>{let r=`https://oauth2.googleapis.com/tokeninfo?id_token=${t}`,{data:e}=await g.get(r).catch(i=>{throw new n("Failed to sign in with google",{idToken:t},i)});return e.first_name=e.given_name,e.last_name=e.family_name,e},b=async t=>{try{let r="https://appleid.apple.com",e=p.decode(t,{complete:!0});if(!e?.header)throw new n("Missing JWT header",{idToken:t,json:e});let{kid:i,alg:a}=e.header,c=await d({jwksUri:`${r}/auth/keys`,cache:!0}).getSigningKey(i).then(y=>y.getPublicKey()).catch(()=>null);if(!c)throw new n("no publicKey",{idToken:t,publicKey:c,json:e});let o=p.verify(t,c,{algorithms:[a]});if(!o)throw new n("no data",{idToken:t,data:o});if(o.iss!==r)throw new n("iss doesnt match",{idToken:t,data:o});if(o.exp*1e3<Date.now())throw new n("expired idToken",{idToken:t,data:o});return o}catch(r){throw new n("Failed to sign in with apple",{idToken:t},r)}},_=async(t,r=[])=>{r=[...new Set([...r,"name","picture","email"])];let{data:e}=await g.request({method:"get",url:"https://graph.facebook.com/v15.0/me",params:{fields:r.join(","),access_token:t}}).catch(a=>{throw new n("Failed to sign in with facebook",{accessToken:t,fields:r},a)});if(!r.every(a=>a in e))throw new n("Incomplete scope for access token",{accessToken:t,fields:r,data:e});return e.email_verified="true",e};var h={};m(h,{compare:()=>S,hash:()=>v});import*as s from"bcryptjs";var v=async t=>(t=t.trim(),t?await s.hash(t,u.get().settings.utils.hashSaltRounds):""),S=async(t,r)=>(t=t.trim(),!t&&t===r?!0:await s.compare(t,r));var J=t=>{try{return t?.constructor?.name!=="String"?t:JSON.parse(t)}catch{return t}};import{parseBuffer as E}from"music-metadata";var k=async t=>{try{return(await E(t)).format.duration??0}catch{return 0}};var w={};m(w,{number:()=>j,string:()=>R});import l from"crypto";function R(t=20){return l.randomBytes(t).toString("hex").slice(0,t)}function j(t=0,r=2**48-1){return l.randomInt(t,r)}var A=t=>new Promise(r=>setTimeout(r,t)),B=async(t,r,e)=>{if(r<=0)throw new n("out of tries",{tries:r,waitTimeInMs:e});let i=await t();return i.done===!0?i.value:(await A(e),await B(t,r-1,e))};export{f as a,h as b,J as c,k as d,w as e,A as f,B as g};
2
+ //# sourceMappingURL=chunk-ZDBDR3IB.min.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/utilities/authProviders.ts","../../src/utilities/hash.ts","../../src/utilities/json.ts","../../src/utilities/media.ts","../../src/utilities/random.ts","../../src/utilities/retry.ts"],"sourcesContent":["import axios from 'axios'\nimport jwt from 'jsonwebtoken'\nimport jwksClient from 'jwks-rsa'\n\nimport { EquippedError } from '../errors'\n\nexport const signinWithGoogle = async (idToken: string) => {\n\tconst authUrl = `https://oauth2.googleapis.com/tokeninfo?id_token=${idToken}`\n\tconst { data } = await axios.get(authUrl).catch((err) => {\n\t\tthrow new EquippedError('Failed to sign in with google', { idToken }, err)\n\t})\n\tdata.first_name = data.given_name\n\tdata.last_name = data.family_name\n\treturn data as {\n\t\temail: string\n\t\temail_verified: 'true' | 'false'\n\t\tfirst_name: string\n\t\tlast_name: string\n\t\tpicture: string\n\t\tsub: string\n\t} & Record<string, any>\n}\n\nexport const signinWithApple = async (idToken: string) => {\n\ttry {\n\t\tconst APPLE_BASE = 'https://appleid.apple.com'\n\t\tconst json = jwt.decode(idToken, { complete: true })\n\t\tif (!json?.header) throw new EquippedError('Missing JWT header', { idToken, json })\n\t\tconst { kid, alg } = json.header\n\t\tconst publicKey = await jwksClient({ jwksUri: `${APPLE_BASE}/auth/keys`, cache: true })\n\t\t\t.getSigningKey(kid)\n\t\t\t.then((key) => key.getPublicKey())\n\t\t\t.catch(() => null)\n\t\tif (!publicKey) throw new EquippedError('no publicKey', { idToken, publicKey, json })\n\t\tconst data = jwt.verify(idToken, publicKey, { algorithms: [alg as any] }) as Record<string, any>\n\t\tif (!data) throw new EquippedError('no data', { idToken, data })\n\t\tif (data.iss !== APPLE_BASE) throw new EquippedError('iss doesnt match', { idToken, data })\n\t\tif (data.exp * 1000 < Date.now()) throw new EquippedError('expired idToken', { idToken, data })\n\t\t// TODO: Find out how to get profile data from api\n\t\treturn data as {\n\t\t\temail?: string\n\t\t\tsub: string\n\t\t\temail_verified?: 'true' | 'false'\n\t\t\tis_private_email?: 'true' | 'false'\n\t\t} & Record<string, any>\n\t} catch (err) {\n\t\tthrow new EquippedError('Failed to sign in with apple', { idToken }, err)\n\t}\n}\n\nexport const signinWithFacebook = async (accessToken: string, fields = [] as string[]) => {\n\tfields = [...new Set([...fields, 'name', 'picture', 'email'])]\n\tconst { data } = await axios\n\t\t.request({\n\t\t\tmethod: 'get',\n\t\t\turl: 'https://graph.facebook.com/v15.0/me',\n\t\t\tparams: {\n\t\t\t\tfields: fields.join(','),\n\t\t\t\taccess_token: accessToken,\n\t\t\t},\n\t\t})\n\t\t.catch((err) => {\n\t\t\tthrow new EquippedError('Failed to sign in with facebook', { accessToken, fields }, err)\n\t\t})\n\tconst isValidData = fields.every((key) => key in data)\n\tif (!isValidData) throw new EquippedError('Incomplete scope for access token', { accessToken, fields, data })\n\tdata.email_verified = 'true'\n\treturn data as {\n\t\tid: string\n\t\temail: string\n\t\temail_verified: 'true' | 'false'\n\t\tname: string\n\t\tpicture: {\n\t\t\tdata: { height: number; is_silhouette: boolean; url: string; width: number }\n\t\t}\n\t} & Record<string, any>\n}\n","import * as bcrypt from 'bcryptjs'\n\nimport { Instance } from '../instance'\n\nexport const hash = async (password: string) => {\n\tpassword = password.trim()\n\tif (!password) return ''\n\treturn await bcrypt.hash(password, Instance.get().settings.utils.hashSaltRounds)\n}\n\nexport const compare = async (plainPassword: string, hashed: string) => {\n\tplainPassword = plainPassword.trim()\n\tif (!plainPassword && plainPassword === hashed) return true\n\treturn await bcrypt.compare(plainPassword, hashed)\n}\n","export const parseJSONValue = (data: any) => {\n\ttry {\n\t\tif (data?.constructor?.name !== 'String') return data\n\t\treturn JSON.parse(data)\n\t} catch {\n\t\treturn data\n\t}\n}\n","import { parseBuffer } from 'music-metadata'\n\nexport const getMediaDuration = async (buffer: Buffer) => {\n\ttry {\n\t\tconst meta = await parseBuffer(buffer)\n\t\treturn meta.format.duration ?? 0\n\t} catch {\n\t\treturn 0\n\t}\n}\n","import crypto from 'crypto'\n\nexport function string(length = 20) {\n\treturn crypto.randomBytes(length).toString('hex').slice(0, length)\n}\n\nexport function number(min = 0, max = 2 ** 48 - 1) {\n\treturn crypto.randomInt(min, max)\n}\n","import { EquippedError } from '../errors'\n\nexport const sleep = (ms: number): Promise<void> => new Promise((resolve) => setTimeout(resolve, ms))\n\nexport const retry = async <T>(cb: () => Promise<{ done: true; value: T } | { done: false }>, tries: number, waitTimeInMs: number) => {\n\tif (tries <= 0) throw new EquippedError('out of tries', { tries, waitTimeInMs })\n\tconst result = await cb()\n\tif (result.done === true) return result.value\n\tawait sleep(waitTimeInMs)\n\treturn await retry(cb, tries - 1, waitTimeInMs)\n}\n"],"mappings":"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","names":["authProviders_exports","__export","signinWithApple","signinWithFacebook","signinWithGoogle","axios","jwt","jwksClient","signinWithGoogle","idToken","authUrl","data","axios","err","EquippedError","signinWithApple","APPLE_BASE","json","jwt","kid","alg","publicKey","jwksClient","key","signinWithFacebook","accessToken","fields","hash_exports","__export","compare","hash","bcrypt","hash","password","Instance","compare","plainPassword","hashed","parseJSONValue","data","parseBuffer","getMediaDuration","buffer","random_exports","__export","number","string","crypto","length","min","max","sleep","ms","resolve","retry","cb","tries","waitTimeInMs","EquippedError","result"]}
@@ -1,2 +1,2 @@
1
- import{a as T,b as P,c as $}from "../../../chunk-2GGMLKRP.min.mjs";import"../../../chunk-MQXTTWPS.min.mjs";import{K as w,a as C,t as O}from "../../../chunk-IN5YKIJ7.min.mjs";import"../../../chunk-DSUJ5FUL.min.mjs";import"../../../chunk-AQY7QVYI.min.mjs";import"mongodb";import{differ as v}from"valleyed";import B from"axios";import{v as R}from"valleyed";var S="db-changes",E=class{constructor(a,i,n){this.config=a;this.callbacks=i;this.mapper=n;this.config=R.assert(P(),a)}async configureConnector(a,i){let n=B.create({baseURL:this.config.debeziumUrl});return await n.put(`/connectors/${a}/config`,{"topic.prefix":S,"topic.creation.enable":"false","topic.creation.default.replication.factor":"-1","topic.creation.default.partitions":"-1","key.converter":"org.apache.kafka.connect.json.JsonConverter","key.converter.schemas.enable":"false","value.converter":"org.apache.kafka.connect.json.JsonConverter","value.converter.schemas.enable":"false",...i}).then(async()=>(await n.get(`/connectors/${a}/topics`)).data[a]?.topics?.includes?.(a)??!1).catch(l=>{throw new C("Failed to configure watcher",{key:a},l)})}};var k=class extends E{#e=!1;constructor(a,i,n,l,f){super(i,l,f);let d=r=>r._id?{...r,_id:r._id.$oid??r._id}:void 0,m=n.dbName,c=n.collectionName,e=`${m}.${c}`,t=`${S}.${e}`,o="5f5f65717569707065645f5f",s={_id:o};i.eventBus.stream(t,{skipScope:!0}).subscribe(async r=>{let p=r.op,u=JSON.parse(r.before??"null"),y=JSON.parse(r.after??"null");u&&(u=d(u)),y&&(y=d(y)),!(u?._id===o||y?._id===o)&&(p==="c"&&this.callbacks.created&&y?await this.callbacks.created({before:null,after:this.mapper(y)}):p==="u"&&this.callbacks.updated&&u&&y?await this.callbacks.updated({before:this.mapper(u),after:this.mapper(y),changes:v.from(v.diff(u,y))}):p==="d"&&this.callbacks.deleted&&u&&await this.callbacks.deleted({before:this.mapper(u),after:null}))}),w.on("start",async()=>{this.#e||(this.#e=!0,await O(async()=>await this.configureConnector(t,{"connector.class":"io.debezium.connector.mongodb.MongoDbConnector","capture.mode":"change_streams_update_full_with_pre_image","mongodb.connection.string":a.uri,"collection.include.list":e,"snapshot.mode":"when_needed","capture.scope":"collection","capture.target":e,"heartbeat.interval.ms":"60000","errors.max.retries":"3"})?{done:!0,value:!0}:(await n.findOneAndUpdate(s,{$set:{colName:c}},{upsert:!0}),await n.findOneAndDelete(s),w.get().log.warn(`Waiting for db changes for ${e} to start...`),{done:!1}),6,3e4).catch(r=>w.crash(new C("Failed to start db changes",{dbColName:e},r))))})}};import{AsyncLocalStorage as F}from"async_hooks";import{MongoClient as q,ObjectId as I}from"mongodb";import{v as N}from"valleyed";import{v as x}from"valleyed";var _=()=>x.meta(x.object({uri:x.string()}),{title:"Mongodb Config",$refId:"MongodbConfig"});import"mongodb";var Q=async(h,a)=>{let i=[],n=A(a.where,a.whereType);n&&i.push(n);let l=A(a.auth,a.authType);if(l&&i.push(l),a.search&&a.search.fields.length>0){let D=a.search.fields.map(j=>({[j]:{$regex:new RegExp(a.search.value,"i")}}));i.push({$or:D})}let f={};i.length>0&&(f.$and=i);let d=a.sort.map(D=>[D.field,D.desc?"desc":"asc"]),m=a.all??!1,c=a.limit,e=a.page,t=await h.countDocuments(f),o=a.select?.length?Object.fromEntries(a.select.map(D=>[D,1])):void 0,s=h.find(f,{projection:o});d.length&&(s=s.sort(Object.fromEntries(d))),!m&&c&&(s=s.limit(c),e&&(s=s.skip((e-1)*c)));let r=await s.toArray(),p=1,u=Math.ceil(t/c)||1,y=e>=u?null:e+1,b=e<=p?null:e-1;return{pages:{start:p,last:u,next:y,previous:b,current:e},docs:{limit:c,total:t,count:r.length},results:r}};function U(h){return Object.values($).includes(h.condition)}var A=(h,a="and")=>{let i=(Array.isArray(h)?h:[]).map(n=>{if(U(n))return A(n.value,n.condition);let{field:l}=n,f=l==="id"?"_id":l??"",d=n.value===void 0?"":n.value;return{field:f,value:d,condition:n.condition,isWhere:!0}}).filter(n=>!!n).map(n=>n.isWhere?{[`${n.field}`]:{[`$${n.condition}`]:n.value}}:n);return i.length>0?{[`$${a}`]:i}:null};var M="_id",g=new F(void 0),W=class extends T{constructor(i,n){super(n);this.mongoConfig=i;this.mongoConfig=N.assert(_(),i),this.client=new q(i.uri,{ignoreUndefined:!0}),w.on("start",async()=>{await this.client.connect();let l=this.#e.reduce((d,m)=>(d[m.db]||(d[m.db]=[]),d[m.db].push(m.col),d),{}),f={changeStreamPreAndPostImages:{enabled:!0}};await Promise.all(Object.entries(l).map(async([d,m])=>{let c=this.client.db(d),e=await c.listCollections().toArray();return m.map(async t=>{let o=e.find(s=>s.name===t);o?o.options?.changeStreamPreAndPostImages?.enabled!==f.changeStreamPreAndPostImages.enabled&&await c.command({collMod:t,...f}):await c.createCollection(t,f)})}))}),w.on("close",async()=>this.client.close())}client;#e=[];async session(i){if(g.getStore())return i();let n=await this.client.startSession();return n.withTransaction(async()=>g.run(n,i))}id(){return new I}use(i){let n=this.getScopedDb(i.db);return this.#e.push({db:n,col:i.col}),this.#t(i,this.client.db(n).collection(i.col))}#t(i,n){function l(e,t){let s=(Array.isArray(e)?e:[e]).map(r=>i.mapper(r,t));return Array.isArray(e)?s:s[0]}function f(e,t,o,s){let r={[M]:t,...i.options?.skipAudit?{}:{createdAt:o.getTime(),...s?{}:{updatedAt:o.getTime()}}};return{...e,...r}}function d(e,t,o=!1){return{...e,$set:{...e.$set,...o||Object.keys(e).length>0&&!i.options?.skipAudit?{updatedAt:t.getTime()}:{}}}}let m=this,c={config:i,extras:{collection:n},query:async e=>{let t=await Q(n,e);return{...t,results:l(t.results,e.select)}},findMany:async(e,t={})=>{let{select:o,...s}=t,r=o?.length?Object.fromEntries(o.map(b=>[b,1])):void 0,u=(Array.isArray(s.sort)?s.sort:s.sort?[s.sort]:[]).map(b=>[b.field,b.desc?"desc":"asc"]),y=await n.find(e,{session:g.getStore(),limit:s.limit,sort:u,projection:r}).toArray();return l(y,o)},findOne:async(e,t={})=>(await c.findMany(e,{...t,limit:1})).at(0)??null,findById:async(e,t={})=>await c.findOne({[M]:e},t),insertMany:async(e,t={})=>{let o=t.getTime?.()??new Date,s=e.map((p,u)=>f(p,t.makeId?.(u)??new I().toString(),o));return await n.insertMany(s,{session:g.getStore()}),(await Promise.all(s.map(async p=>await c.findById(p[M])))).filter(p=>!!p)},insertOne:async(e,t={})=>(await c.insertMany([e],t))[0],updateMany:async(e,t,o={})=>{let s=o.getTime?.()??new Date,r=g.getStore(),u=(await n.find(e,{session:r,projection:{[M]:1}}).toArray()).map(b=>b[M]),y={[M]:{$in:u}};return await n.updateMany(y,d(t,s),{session:r}),c.findMany(y)},updateOne:async(e,t,o={})=>{let s=o.getTime?.()??new Date,r=await n.findOneAndUpdate(e,d(t,s),{returnDocument:"after",session:g.getStore()});return r?l(r,void 0):null},updateById:async(e,t,o={})=>await c.updateOne({[M]:e},t,o),upsertOne:async(e,t,o={})=>{let s=o.getTime?.()??new Date,r=await n.findOneAndUpdate(e,{...d("update"in t?t.update:{},s,!0),$setOnInsert:f(t.insert,o.makeId?.()??new I().toString(),s,!0)},{returnDocument:"after",session:g.getStore(),upsert:!0});return l(r,void 0)},deleteMany:async(e,t={})=>{let o=await c.findMany(e,t);return await n.deleteMany(e,{session:g.getStore()}),o},deleteOne:async e=>{let t=await n.findOneAndDelete(e,{session:g.getStore()});return t?l(t,void 0):null},deleteById:async e=>await c.deleteOne({[M]:e}),bulkWrite:async(e,t={})=>{if(!e.length)return;let o=n.initializeUnorderedBulkOp({session:g.getStore()}),s=t.getTime?.()??new Date;e.forEach((r,p)=>{switch(r.op){case"insert":o.insert(f(r.value,r.makeId?.(p)??new I().toString(),s));break;case"delete":o.find(r.filter).delete();break;case"update":o.find(r.filter).update(d(r.value,s));break;case"upsert":o.find(r.filter).upsert().update({...d("update"in r?r.update:{},s,!0),$setOnInsert:f(r.insert,r.makeId?.(p)??new I().toString(),s,!0)});break;default:throw new C("Unknown bulkWrite operation",{operation:r})}}),await o.execute({session:g.getStore()})},watch(e){return m.config.changes||w.crash(new C("Db changes are not enabled in the configuration.",{config:i})),new k(m.mongoConfig,m.config.changes,n,e,t=>i.mapper(t))}};return c}};export{W as MongoDb,k as MongoDbChange,_ as mongoDbConfigPipe};
1
+ import{a as O,b as P,c as $}from "../../../chunk-YDQW6ETS.min.mjs";import"../../../chunk-DAK7OKSH.min.mjs";import{g as T}from "../../../chunk-ZDBDR3IB.min.mjs";import"../../../chunk-CU2HU5UE.min.mjs";import{B as w,a as C}from "../../../chunk-APSDCRY5.min.mjs";import"../../../chunk-DSUJ5FUL.min.mjs";import"../../../chunk-AQY7QVYI.min.mjs";import"mongodb";import{differ as v}from"valleyed";import B from"axios";import{v as R}from"valleyed";var S="db-changes",E=class{constructor(a,i,n){this.config=a;this.callbacks=i;this.mapper=n;this.config=R.assert(P(),a)}async configureConnector(a,i){let n=B.create({baseURL:this.config.debeziumUrl});return await n.put(`/connectors/${a}/config`,{"topic.prefix":S,"topic.creation.enable":"false","topic.creation.default.replication.factor":"-1","topic.creation.default.partitions":"-1","key.converter":"org.apache.kafka.connect.json.JsonConverter","key.converter.schemas.enable":"false","value.converter":"org.apache.kafka.connect.json.JsonConverter","value.converter.schemas.enable":"false",...i}).then(async()=>(await n.get(`/connectors/${a}/topics`)).data[a]?.topics?.includes?.(a)??!1).catch(l=>{throw new C("Failed to configure watcher",{key:a},l)})}};var k=class extends E{#e=!1;constructor(a,i,n,l,f){super(i,l,f);let d=r=>r._id?{...r,_id:r._id.$oid??r._id}:void 0,m=n.dbName,c=n.collectionName,e=`${m}.${c}`,t=`${S}.${e}`,o="5f5f65717569707065645f5f",s={_id:o};i.eventBus.stream(t,{skipScope:!0}).subscribe(async r=>{let p=r.op,u=JSON.parse(r.before??"null"),y=JSON.parse(r.after??"null");u&&(u=d(u)),y&&(y=d(y)),!(u?._id===o||y?._id===o)&&(p==="c"&&this.callbacks.created&&y?await this.callbacks.created({before:null,after:this.mapper(y)}):p==="u"&&this.callbacks.updated&&u&&y?await this.callbacks.updated({before:this.mapper(u),after:this.mapper(y),changes:v.from(v.diff(u,y))}):p==="d"&&this.callbacks.deleted&&u&&await this.callbacks.deleted({before:this.mapper(u),after:null}))}),w.on("start",async()=>{this.#e||(this.#e=!0,await T(async()=>await this.configureConnector(t,{"connector.class":"io.debezium.connector.mongodb.MongoDbConnector","capture.mode":"change_streams_update_full_with_pre_image","mongodb.connection.string":a.uri,"collection.include.list":e,"snapshot.mode":"when_needed","capture.scope":"collection","capture.target":e,"heartbeat.interval.ms":"60000","errors.max.retries":"3"})?{done:!0,value:!0}:(await n.findOneAndUpdate(s,{$set:{colName:c}},{upsert:!0}),await n.findOneAndDelete(s),w.get().log.warn(`Waiting for db changes for ${e} to start...`),{done:!1}),6,3e4).catch(r=>w.crash(new C("Failed to start db changes",{dbColName:e},r))))})}};import{AsyncLocalStorage as F}from"async_hooks";import{MongoClient as q,ObjectId as I}from"mongodb";import{v as N}from"valleyed";import{v as x}from"valleyed";var _=()=>x.meta(x.object({uri:x.string()}),{title:"Mongodb Config",$refId:"MongodbConfig"});import"mongodb";var Q=async(h,a)=>{let i=[],n=A(a.where,a.whereType);n&&i.push(n);let l=A(a.auth,a.authType);if(l&&i.push(l),a.search&&a.search.fields.length>0){let D=a.search.fields.map(j=>({[j]:{$regex:new RegExp(a.search.value,"i")}}));i.push({$or:D})}let f={};i.length>0&&(f.$and=i);let d=a.sort.map(D=>[D.field,D.desc?"desc":"asc"]),m=a.all??!1,c=a.limit,e=a.page,t=await h.countDocuments(f),o=a.select?.length?Object.fromEntries(a.select.map(D=>[D,1])):void 0,s=h.find(f,{projection:o});d.length&&(s=s.sort(Object.fromEntries(d))),!m&&c&&(s=s.limit(c),e&&(s=s.skip((e-1)*c)));let r=await s.toArray(),p=1,u=Math.ceil(t/c)||1,y=e>=u?null:e+1,b=e<=p?null:e-1;return{pages:{start:p,last:u,next:y,previous:b,current:e},docs:{limit:c,total:t,count:r.length},results:r}};function U(h){return Object.values($).includes(h.condition)}var A=(h,a="and")=>{let i=(Array.isArray(h)?h:[]).map(n=>{if(U(n))return A(n.value,n.condition);let{field:l}=n,f=l==="id"?"_id":l??"",d=n.value===void 0?"":n.value;return{field:f,value:d,condition:n.condition,isWhere:!0}}).filter(n=>!!n).map(n=>n.isWhere?{[`${n.field}`]:{[`$${n.condition}`]:n.value}}:n);return i.length>0?{[`$${a}`]:i}:null};var M="_id",g=new F(void 0),W=class extends O{constructor(i,n){super(n);this.mongoConfig=i;this.mongoConfig=N.assert(_(),i),this.client=new q(i.uri,{ignoreUndefined:!0}),w.on("start",async()=>{await this.client.connect();let l=this.#e.reduce((d,m)=>(d[m.db]||(d[m.db]=[]),d[m.db].push(m.col),d),{}),f={changeStreamPreAndPostImages:{enabled:!0}};await Promise.all(Object.entries(l).map(async([d,m])=>{let c=this.client.db(d),e=await c.listCollections().toArray();return m.map(async t=>{let o=e.find(s=>s.name===t);o?o.options?.changeStreamPreAndPostImages?.enabled!==f.changeStreamPreAndPostImages.enabled&&await c.command({collMod:t,...f}):await c.createCollection(t,f)})}))}),w.on("close",async()=>this.client.close())}client;#e=[];async session(i){if(g.getStore())return i();let n=await this.client.startSession();return n.withTransaction(async()=>g.run(n,i))}id(){return new I}use(i){let n=this.getScopedDb(i.db);return this.#e.push({db:n,col:i.col}),this.#t(i,this.client.db(n).collection(i.col))}#t(i,n){function l(e,t){let s=(Array.isArray(e)?e:[e]).map(r=>i.mapper(r,t));return Array.isArray(e)?s:s[0]}function f(e,t,o,s){let r={[M]:t,...i.options?.skipAudit?{}:{createdAt:o.getTime(),...s?{}:{updatedAt:o.getTime()}}};return{...e,...r}}function d(e,t,o=!1){return{...e,$set:{...e.$set,...o||Object.keys(e).length>0&&!i.options?.skipAudit?{updatedAt:t.getTime()}:{}}}}let m=this,c={config:i,extras:{collection:n},query:async e=>{let t=await Q(n,e);return{...t,results:l(t.results,e.select)}},findMany:async(e,t={})=>{let{select:o,...s}=t,r=o?.length?Object.fromEntries(o.map(b=>[b,1])):void 0,u=(Array.isArray(s.sort)?s.sort:s.sort?[s.sort]:[]).map(b=>[b.field,b.desc?"desc":"asc"]),y=await n.find(e,{session:g.getStore(),limit:s.limit,sort:u,projection:r}).toArray();return l(y,o)},findOne:async(e,t={})=>(await c.findMany(e,{...t,limit:1})).at(0)??null,findById:async(e,t={})=>await c.findOne({[M]:e},t),insertMany:async(e,t={})=>{let o=t.getTime?.()??new Date,s=e.map((p,u)=>f(p,t.makeId?.(u)??new I().toString(),o));return await n.insertMany(s,{session:g.getStore()}),(await Promise.all(s.map(async p=>await c.findById(p[M])))).filter(p=>!!p)},insertOne:async(e,t={})=>(await c.insertMany([e],t))[0],updateMany:async(e,t,o={})=>{let s=o.getTime?.()??new Date,r=g.getStore(),u=(await n.find(e,{session:r,projection:{[M]:1}}).toArray()).map(b=>b[M]),y={[M]:{$in:u}};return await n.updateMany(y,d(t,s),{session:r}),c.findMany(y)},updateOne:async(e,t,o={})=>{let s=o.getTime?.()??new Date,r=await n.findOneAndUpdate(e,d(t,s),{returnDocument:"after",session:g.getStore()});return r?l(r,void 0):null},updateById:async(e,t,o={})=>await c.updateOne({[M]:e},t,o),upsertOne:async(e,t,o={})=>{let s=o.getTime?.()??new Date,r=await n.findOneAndUpdate(e,{...d("update"in t?t.update:{},s,!0),$setOnInsert:f(t.insert,o.makeId?.()??new I().toString(),s,!0)},{returnDocument:"after",session:g.getStore(),upsert:!0});return l(r,void 0)},deleteMany:async(e,t={})=>{let o=await c.findMany(e,t);return await n.deleteMany(e,{session:g.getStore()}),o},deleteOne:async e=>{let t=await n.findOneAndDelete(e,{session:g.getStore()});return t?l(t,void 0):null},deleteById:async e=>await c.deleteOne({[M]:e}),bulkWrite:async(e,t={})=>{if(!e.length)return;let o=n.initializeUnorderedBulkOp({session:g.getStore()}),s=t.getTime?.()??new Date;e.forEach((r,p)=>{switch(r.op){case"insert":o.insert(f(r.value,r.makeId?.(p)??new I().toString(),s));break;case"delete":o.find(r.filter).delete();break;case"update":o.find(r.filter).update(d(r.value,s));break;case"upsert":o.find(r.filter).upsert().update({...d("update"in r?r.update:{},s,!0),$setOnInsert:f(r.insert,r.makeId?.(p)??new I().toString(),s,!0)});break;default:throw new C("Unknown bulkWrite operation",{operation:r})}}),await o.execute({session:g.getStore()})},watch(e){return m.config.changes||w.crash(new C("Db changes are not enabled in the configuration.",{config:i})),new k(m.mongoConfig,m.config.changes,n,e,t=>i.mapper(t))}};return c}};export{W as MongoDb,k as MongoDbChange,_ as mongoDbConfigPipe};
2
2
  //# sourceMappingURL=index.min.mjs.map