@arch-cadre/core 0.0.6

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 (190) hide show
  1. package/dist/_virtual/_rolldown/runtime.cjs +29 -0
  2. package/dist/_virtual/_rolldown/runtime.mjs +18 -0
  3. package/dist/core/auth/augment.cjs +71 -0
  4. package/dist/core/auth/augment.d.cts +20 -0
  5. package/dist/core/auth/augment.d.cts.map +1 -0
  6. package/dist/core/auth/augment.d.mts +20 -0
  7. package/dist/core/auth/augment.d.mts.map +1 -0
  8. package/dist/core/auth/augment.mjs +66 -0
  9. package/dist/core/auth/augment.mjs.map +1 -0
  10. package/dist/core/auth/email-verification.cjs +99 -0
  11. package/dist/core/auth/email-verification.d.cts +62 -0
  12. package/dist/core/auth/email-verification.d.cts.map +1 -0
  13. package/dist/core/auth/email-verification.d.mts +62 -0
  14. package/dist/core/auth/email-verification.d.mts.map +1 -0
  15. package/dist/core/auth/email-verification.mjs +92 -0
  16. package/dist/core/auth/email-verification.mjs.map +1 -0
  17. package/dist/core/auth/logic.cjs +224 -0
  18. package/dist/core/auth/logic.d.cts +110 -0
  19. package/dist/core/auth/logic.d.cts.map +1 -0
  20. package/dist/core/auth/logic.d.mts +110 -0
  21. package/dist/core/auth/logic.d.mts.map +1 -0
  22. package/dist/core/auth/logic.mjs +213 -0
  23. package/dist/core/auth/logic.mjs.map +1 -0
  24. package/dist/core/auth/password-reset.cjs +118 -0
  25. package/dist/core/auth/password-reset.d.cts +39 -0
  26. package/dist/core/auth/password-reset.d.cts.map +1 -0
  27. package/dist/core/auth/password-reset.d.mts +39 -0
  28. package/dist/core/auth/password-reset.d.mts.map +1 -0
  29. package/dist/core/auth/password-reset.mjs +111 -0
  30. package/dist/core/auth/password-reset.mjs.map +1 -0
  31. package/dist/core/auth/rbac.cjs +118 -0
  32. package/dist/core/auth/rbac.d.cts +61 -0
  33. package/dist/core/auth/rbac.d.cts.map +1 -0
  34. package/dist/core/auth/rbac.d.mts +61 -0
  35. package/dist/core/auth/rbac.d.mts.map +1 -0
  36. package/dist/core/auth/rbac.mjs +104 -0
  37. package/dist/core/auth/rbac.mjs.map +1 -0
  38. package/dist/core/auth/session.cjs +161 -0
  39. package/dist/core/auth/session.d.cts +54 -0
  40. package/dist/core/auth/session.d.cts.map +1 -0
  41. package/dist/core/auth/session.d.mts +54 -0
  42. package/dist/core/auth/session.d.mts.map +1 -0
  43. package/dist/core/auth/session.mjs +150 -0
  44. package/dist/core/auth/session.mjs.map +1 -0
  45. package/dist/core/auth/types.d.cts +55 -0
  46. package/dist/core/auth/types.d.cts.map +1 -0
  47. package/dist/core/auth/types.d.mts +55 -0
  48. package/dist/core/auth/types.d.mts.map +1 -0
  49. package/dist/core/auth/utils/encode.cjs +27 -0
  50. package/dist/core/auth/utils/encode.d.cts +15 -0
  51. package/dist/core/auth/utils/encode.d.cts.map +1 -0
  52. package/dist/core/auth/utils/encode.d.mts +15 -0
  53. package/dist/core/auth/utils/encode.d.mts.map +1 -0
  54. package/dist/core/auth/utils/encode.mjs +26 -0
  55. package/dist/core/auth/utils/encode.mjs.map +1 -0
  56. package/dist/core/auth/utils/encryption.cjs +67 -0
  57. package/dist/core/auth/utils/encryption.d.cts +28 -0
  58. package/dist/core/auth/utils/encryption.d.cts.map +1 -0
  59. package/dist/core/auth/utils/encryption.d.mts +28 -0
  60. package/dist/core/auth/utils/encryption.d.mts.map +1 -0
  61. package/dist/core/auth/utils/encryption.mjs +64 -0
  62. package/dist/core/auth/utils/encryption.mjs.map +1 -0
  63. package/dist/core/auth/validation.cjs +39 -0
  64. package/dist/core/auth/validation.d.cts +48 -0
  65. package/dist/core/auth/validation.d.cts.map +1 -0
  66. package/dist/core/auth/validation.d.mts +48 -0
  67. package/dist/core/auth/validation.d.mts.map +1 -0
  68. package/dist/core/auth/validation.mjs +31 -0
  69. package/dist/core/auth/validation.mjs.map +1 -0
  70. package/dist/core/bootstrap.cjs +32 -0
  71. package/dist/core/bootstrap.d.cts +5 -0
  72. package/dist/core/bootstrap.d.cts.map +1 -0
  73. package/dist/core/bootstrap.d.mts +5 -0
  74. package/dist/core/bootstrap.d.mts.map +1 -0
  75. package/dist/core/bootstrap.mjs +33 -0
  76. package/dist/core/bootstrap.mjs.map +1 -0
  77. package/dist/core/config.cjs +6 -0
  78. package/dist/core/config.d.cts +11 -0
  79. package/dist/core/config.d.cts.map +1 -0
  80. package/dist/core/config.d.mts +11 -0
  81. package/dist/core/config.d.mts.map +1 -0
  82. package/dist/core/config.mjs +6 -0
  83. package/dist/core/config.mjs.map +1 -0
  84. package/dist/core/config.server.cjs +60 -0
  85. package/dist/core/config.server.d.cts +16 -0
  86. package/dist/core/config.server.d.cts.map +1 -0
  87. package/dist/core/config.server.d.mts +16 -0
  88. package/dist/core/config.server.d.mts.map +1 -0
  89. package/dist/core/config.server.mjs +57 -0
  90. package/dist/core/config.server.mjs.map +1 -0
  91. package/dist/core/event-bus.cjs +48 -0
  92. package/dist/core/event-bus.d.cts +17 -0
  93. package/dist/core/event-bus.d.cts.map +1 -0
  94. package/dist/core/event-bus.d.mts +17 -0
  95. package/dist/core/event-bus.d.mts.map +1 -0
  96. package/dist/core/event-bus.mjs +48 -0
  97. package/dist/core/event-bus.mjs.map +1 -0
  98. package/dist/core/filesystem/service.cjs +43 -0
  99. package/dist/core/filesystem/service.d.cts +19 -0
  100. package/dist/core/filesystem/service.d.cts.map +1 -0
  101. package/dist/core/filesystem/service.d.mts +19 -0
  102. package/dist/core/filesystem/service.d.mts.map +1 -0
  103. package/dist/core/filesystem/service.mjs +43 -0
  104. package/dist/core/filesystem/service.mjs.map +1 -0
  105. package/dist/core/filesystem/types.d.cts +22 -0
  106. package/dist/core/filesystem/types.d.cts.map +1 -0
  107. package/dist/core/filesystem/types.d.mts +22 -0
  108. package/dist/core/filesystem/types.d.mts.map +1 -0
  109. package/dist/core/notifications/actions.cjs +36 -0
  110. package/dist/core/notifications/actions.d.cts +58 -0
  111. package/dist/core/notifications/actions.d.cts.map +1 -0
  112. package/dist/core/notifications/actions.d.mts +58 -0
  113. package/dist/core/notifications/actions.d.mts.map +1 -0
  114. package/dist/core/notifications/actions.mjs +33 -0
  115. package/dist/core/notifications/actions.mjs.map +1 -0
  116. package/dist/core/notifications/index.cjs +2 -0
  117. package/dist/core/notifications/index.mjs +4 -0
  118. package/dist/core/notifications/service.cjs +30 -0
  119. package/dist/core/notifications/service.d.cts +9 -0
  120. package/dist/core/notifications/service.d.cts.map +1 -0
  121. package/dist/core/notifications/service.d.mts +9 -0
  122. package/dist/core/notifications/service.d.mts.map +1 -0
  123. package/dist/core/notifications/service.mjs +31 -0
  124. package/dist/core/notifications/service.mjs.map +1 -0
  125. package/dist/core/notifications/types.d.cts +21 -0
  126. package/dist/core/notifications/types.d.cts.map +1 -0
  127. package/dist/core/notifications/types.d.mts +21 -0
  128. package/dist/core/notifications/types.d.mts.map +1 -0
  129. package/dist/core/setup.cjs +25 -0
  130. package/dist/core/setup.d.cts +9 -0
  131. package/dist/core/setup.d.cts.map +1 -0
  132. package/dist/core/setup.d.mts +9 -0
  133. package/dist/core/setup.d.mts.map +1 -0
  134. package/dist/core/setup.mjs +25 -0
  135. package/dist/core/setup.mjs.map +1 -0
  136. package/dist/core/types.d.cts +13 -0
  137. package/dist/core/types.d.cts.map +1 -0
  138. package/dist/core/types.d.mts +13 -0
  139. package/dist/core/types.d.mts.map +1 -0
  140. package/dist/index.cjs +30 -0
  141. package/dist/index.d.cts +8 -0
  142. package/dist/index.d.mts +8 -0
  143. package/dist/index.mjs +6 -0
  144. package/dist/server/auth/email.cjs +24 -0
  145. package/dist/server/auth/email.d.cts +13 -0
  146. package/dist/server/auth/email.d.cts.map +1 -0
  147. package/dist/server/auth/email.d.mts +13 -0
  148. package/dist/server/auth/email.d.mts.map +1 -0
  149. package/dist/server/auth/email.mjs +23 -0
  150. package/dist/server/auth/email.mjs.map +1 -0
  151. package/dist/server/auth/password.cjs +37 -0
  152. package/dist/server/auth/password.d.cts +23 -0
  153. package/dist/server/auth/password.d.cts.map +1 -0
  154. package/dist/server/auth/password.d.mts +23 -0
  155. package/dist/server/auth/password.d.mts.map +1 -0
  156. package/dist/server/auth/password.mjs +34 -0
  157. package/dist/server/auth/password.mjs.map +1 -0
  158. package/dist/server/auth/user.cjs +165 -0
  159. package/dist/server/auth/user.d.cts +58 -0
  160. package/dist/server/auth/user.d.cts.map +1 -0
  161. package/dist/server/auth/user.d.mts +58 -0
  162. package/dist/server/auth/user.d.mts.map +1 -0
  163. package/dist/server/auth/user.mjs +153 -0
  164. package/dist/server/auth/user.mjs.map +1 -0
  165. package/dist/server/database/inject.cjs +24 -0
  166. package/dist/server/database/inject.d.cts +15 -0
  167. package/dist/server/database/inject.d.cts.map +1 -0
  168. package/dist/server/database/inject.d.mts +15 -0
  169. package/dist/server/database/inject.d.mts.map +1 -0
  170. package/dist/server/database/inject.mjs +23 -0
  171. package/dist/server/database/inject.mjs.map +1 -0
  172. package/dist/server/database/schema.cjs +163 -0
  173. package/dist/server/database/schema.d.cts +2962 -0
  174. package/dist/server/database/schema.d.cts.map +1 -0
  175. package/dist/server/database/schema.d.mts +2962 -0
  176. package/dist/server/database/schema.d.mts.map +1 -0
  177. package/dist/server/database/schema.mjs +151 -0
  178. package/dist/server/database/schema.mjs.map +1 -0
  179. package/dist/server/emails/index.cjs +32 -0
  180. package/dist/server/emails/index.d.cts +26 -0
  181. package/dist/server/emails/index.d.cts.map +1 -0
  182. package/dist/server/emails/index.d.mts +26 -0
  183. package/dist/server/emails/index.d.mts.map +1 -0
  184. package/dist/server/emails/index.mjs +29 -0
  185. package/dist/server/emails/index.mjs.map +1 -0
  186. package/dist/server.cjs +145 -0
  187. package/dist/server.d.cts +26 -0
  188. package/dist/server.d.mts +26 -0
  189. package/dist/server.mjs +23 -0
  190. package/package.json +60 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bootstrap.mjs","names":[],"sources":["../../src/core/bootstrap.ts"],"sourcesContent":["import { injectDb } from \"../server/database/inject\";\nimport { initEmailVerification } from \"./auth/email-verification\";\nimport { eventBus } from \"./event-bus\";\nimport { notificationService } from \"./notifications/service\";\nimport { isSystemInstalled } from \"./setup\";\n\nexport async function ensureSystemInitialized(providedDb?: any) {\n if (typeof window !== \"undefined\") return;\n\n const g = globalThis as any;\n\n // 1. Immediate injection if provided\n if (providedDb) {\n // const { injectDb } = await import(\"../server/database/inject\");\n injectDb(providedDb);\n }\n\n // 2. Prevent infinite recursion and double initialization\n if (g.__KRYO_INITIALIZED__) return;\n if (g.__KRYO_INITIALIZING__) return; // Already in progress, don't block/deadlock\n\n g.__KRYO_INITIALIZING__ = true;\n\n try {\n console.log(\"[Kryo:Bootstrap] Starting system initialization...\");\n\n // Check if we have DB after any possible injection\n if (!g.__KRYO_DB__) {\n console.warn(\n \"[Kryo:Bootstrap] DB not detected during bootstrap start. Trying to continue...\",\n );\n }\n\n // const { eventBus } = await import(\"./event-bus\");\n // const { initEmailVerification } = await import(\"./auth/email-verification\");\n // const { notificationService } = await import(\"./notifications/service\");\n // const { initModules } = await import(\"./modules/registry\");\n // const { isSystemInstalled } = await import(\"./setup\");\n\n // Order matters: services first, then modules (which use services)\n notificationService.init();\n await initEmailVerification();\n\n // Check if system is installed before initializing modules\n if (await isSystemInstalled()) {\n // await initModules();\n } else {\n console.log(\n \"[Kryo:Bootstrap] System not installed. Skipping module initialization.\",\n );\n }\n\n await eventBus.publish(\"system:start\", { runtime: \"nodejs\" });\n\n console.log(\"[Kryo:Bootstrap] System initialized successfully.\");\n g.__KRYO_INITIALIZED__ = true;\n } catch (error) {\n console.error(\"[Kryo:Bootstrap] Initialization failed:\", error);\n } finally {\n g.__KRYO_INITIALIZING__ = false;\n }\n}\n"],"mappings":";;;;;;;AAMA,eAAsB,wBAAwB,YAAkB;AAC9D,KAAI,OAAO,WAAW,YAAa;CAEnC,MAAM,IAAI;AAGV,KAAI,WAEF,UAAS,WAAW;AAItB,KAAI,EAAE,qBAAsB;AAC5B,KAAI,EAAE,sBAAuB;AAE7B,GAAE,wBAAwB;AAE1B,KAAI;AACF,UAAQ,IAAI,qDAAqD;AAGjE,MAAI,CAAC,EAAE,YACL,SAAQ,KACN,iFACD;AAUH,sBAAoB,MAAM;AAC1B,QAAM,uBAAuB;AAG7B,MAAI,MAAM,mBAAmB,EAAE,OAG7B,SAAQ,IACN,yEACD;AAGH,QAAM,SAAS,QAAQ,gBAAgB,EAAE,SAAS,UAAU,CAAC;AAE7D,UAAQ,IAAI,oDAAoD;AAChE,IAAE,uBAAuB;UAClB,OAAO;AACd,UAAQ,MAAM,2CAA2C,MAAM;WACvD;AACR,IAAE,wBAAwB"}
@@ -0,0 +1,6 @@
1
+
2
+ //#region src/core/config.ts
3
+ const DEFAULT_CONFIG = { modulesDirectory: "modules" };
4
+
5
+ //#endregion
6
+ exports.DEFAULT_CONFIG = DEFAULT_CONFIG;
@@ -0,0 +1,11 @@
1
+ //#region src/core/config.d.ts
2
+ interface KryoConfig {
3
+ /**
4
+ * Path to the directory with local modules.
5
+ * Default: "./modules"
6
+ */
7
+ modulesDirectory?: string;
8
+ }
9
+ //#endregion
10
+ export { KryoConfig };
11
+ //# sourceMappingURL=config.d.cts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.d.cts","names":[],"sources":["../../src/core/config.ts"],"mappings":";UAAiB,UAAA;EAAA;;;;EAKf,gBAAA;AAAA"}
@@ -0,0 +1,11 @@
1
+ //#region src/core/config.d.ts
2
+ interface KryoConfig {
3
+ /**
4
+ * Path to the directory with local modules.
5
+ * Default: "./modules"
6
+ */
7
+ modulesDirectory?: string;
8
+ }
9
+ //#endregion
10
+ export { KryoConfig };
11
+ //# sourceMappingURL=config.d.mts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.d.mts","names":[],"sources":["../../src/core/config.ts"],"mappings":";UAAiB,UAAA;EAAA;;;;EAKf,gBAAA;AAAA"}
@@ -0,0 +1,6 @@
1
+ //#region src/core/config.ts
2
+ const DEFAULT_CONFIG = { modulesDirectory: "modules" };
3
+
4
+ //#endregion
5
+ export { DEFAULT_CONFIG };
6
+ //# sourceMappingURL=config.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.mjs","names":[],"sources":["../../src/core/config.ts"],"sourcesContent":["export interface KryoConfig {\n /**\n * Path to the directory with local modules.\n * Default: \"./modules\"\n */\n modulesDirectory?: string;\n}\n\nexport const DEFAULT_CONFIG: KryoConfig = {\n modulesDirectory: \"modules\",\n};\n"],"mappings":";AAQA,MAAa,iBAA6B,EACxC,kBAAkB,WACnB"}
@@ -0,0 +1,60 @@
1
+ const require_runtime = require('../_virtual/_rolldown/runtime.cjs');
2
+ const require_config = require('./config.cjs');
3
+ let node_fs = require("node:fs");
4
+ node_fs = require_runtime.__toESM(node_fs);
5
+ let node_path = require("node:path");
6
+ node_path = require_runtime.__toESM(node_path);
7
+
8
+ //#region src/core/config.server.ts
9
+ let cachedConfig = null;
10
+ /**
11
+ * Loads the Kryo configuration from kryo.config.ts or kryo.config.js in the current working directory.
12
+ * SERVER ONLY.
13
+ */
14
+ async function getKryoConfig() {
15
+ if (typeof window !== "undefined") throw new Error("getKryoConfig can only be called on the server.");
16
+ if (process.env.NODE_ENV === "production" && cachedConfig) return cachedConfig;
17
+ const cwd = process.cwd();
18
+ const configPathTS = node_path.default.join(cwd, "kryo.config.ts");
19
+ const configPathJS = node_path.default.join(cwd, "kryo.config.js");
20
+ const configPathMJS = node_path.default.join(cwd, "kryo.config.mjs");
21
+ let loadedConfig = {};
22
+ try {
23
+ const { createJiti } = await import("jiti");
24
+ const jiti = createJiti(cwd, {
25
+ fsCache: false,
26
+ moduleCache: false
27
+ });
28
+ if (node_fs.default.existsSync(configPathTS)) {
29
+ const cacheBuster = `?t=${Date.now()}`;
30
+ const imported = await jiti.import(`file://${configPathTS}${cacheBuster}`, { default: true });
31
+ loadedConfig = imported.default || imported;
32
+ } else if (node_fs.default.existsSync(configPathMJS)) {
33
+ const imported = await jiti.import(configPathMJS, { default: true });
34
+ loadedConfig = imported.default || imported;
35
+ } else if (node_fs.default.existsSync(configPathJS)) {
36
+ const imported = await jiti.import(configPathJS, { default: true });
37
+ loadedConfig = imported.default || imported;
38
+ }
39
+ } catch (error) {
40
+ console.warn("[Kryo:Config] Could not load kryo.config.ts, using defaults.", error);
41
+ }
42
+ const finalConfig = {
43
+ ...require_config.DEFAULT_CONFIG,
44
+ ...loadedConfig
45
+ };
46
+ if (process.env.NODE_ENV === "production") cachedConfig = finalConfig;
47
+ return finalConfig;
48
+ }
49
+ /**
50
+ * Helper returning the absolute path to the modules directory.
51
+ * SERVER ONLY.
52
+ */
53
+ async function getModulesDir() {
54
+ const dir = (await getKryoConfig()).modulesDirectory || "modules";
55
+ return node_path.default.isAbsolute(dir) ? dir : node_path.default.join(process.cwd(), dir);
56
+ }
57
+
58
+ //#endregion
59
+ exports.getKryoConfig = getKryoConfig;
60
+ exports.getModulesDir = getModulesDir;
@@ -0,0 +1,16 @@
1
+ import { KryoConfig } from "./config.cjs";
2
+
3
+ //#region src/core/config.server.d.ts
4
+ /**
5
+ * Loads the Kryo configuration from kryo.config.ts or kryo.config.js in the current working directory.
6
+ * SERVER ONLY.
7
+ */
8
+ declare function getKryoConfig(): Promise<KryoConfig>;
9
+ /**
10
+ * Helper returning the absolute path to the modules directory.
11
+ * SERVER ONLY.
12
+ */
13
+ declare function getModulesDir(): Promise<string>;
14
+ //#endregion
15
+ export { getKryoConfig, getModulesDir };
16
+ //# sourceMappingURL=config.server.d.cts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.server.d.cts","names":[],"sources":["../../src/core/config.server.ts"],"mappings":";;;;;AAUA;;iBAAsB,aAAA,CAAA,GAAiB,OAAA,CAAQ,UAAA;;;AA4D/C;;iBAAsB,aAAA,CAAA,GAAiB,OAAA"}
@@ -0,0 +1,16 @@
1
+ import { KryoConfig } from "./config.mjs";
2
+
3
+ //#region src/core/config.server.d.ts
4
+ /**
5
+ * Loads the Kryo configuration from kryo.config.ts or kryo.config.js in the current working directory.
6
+ * SERVER ONLY.
7
+ */
8
+ declare function getKryoConfig(): Promise<KryoConfig>;
9
+ /**
10
+ * Helper returning the absolute path to the modules directory.
11
+ * SERVER ONLY.
12
+ */
13
+ declare function getModulesDir(): Promise<string>;
14
+ //#endregion
15
+ export { getKryoConfig, getModulesDir };
16
+ //# sourceMappingURL=config.server.d.mts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.server.d.mts","names":[],"sources":["../../src/core/config.server.ts"],"mappings":";;;;;AAUA;;iBAAsB,aAAA,CAAA,GAAiB,OAAA,CAAQ,UAAA;;;AA4D/C;;iBAAsB,aAAA,CAAA,GAAiB,OAAA"}
@@ -0,0 +1,57 @@
1
+ import { DEFAULT_CONFIG } from "./config.mjs";
2
+ import fs from "node:fs";
3
+ import path from "node:path";
4
+
5
+ //#region src/core/config.server.ts
6
+ let cachedConfig = null;
7
+ /**
8
+ * Loads the Kryo configuration from kryo.config.ts or kryo.config.js in the current working directory.
9
+ * SERVER ONLY.
10
+ */
11
+ async function getKryoConfig() {
12
+ if (typeof window !== "undefined") throw new Error("getKryoConfig can only be called on the server.");
13
+ if (process.env.NODE_ENV === "production" && cachedConfig) return cachedConfig;
14
+ const cwd = process.cwd();
15
+ const configPathTS = path.join(cwd, "kryo.config.ts");
16
+ const configPathJS = path.join(cwd, "kryo.config.js");
17
+ const configPathMJS = path.join(cwd, "kryo.config.mjs");
18
+ let loadedConfig = {};
19
+ try {
20
+ const { createJiti } = await import("jiti");
21
+ const jiti = createJiti(cwd, {
22
+ fsCache: false,
23
+ moduleCache: false
24
+ });
25
+ if (fs.existsSync(configPathTS)) {
26
+ const cacheBuster = `?t=${Date.now()}`;
27
+ const imported = await jiti.import(`file://${configPathTS}${cacheBuster}`, { default: true });
28
+ loadedConfig = imported.default || imported;
29
+ } else if (fs.existsSync(configPathMJS)) {
30
+ const imported = await jiti.import(configPathMJS, { default: true });
31
+ loadedConfig = imported.default || imported;
32
+ } else if (fs.existsSync(configPathJS)) {
33
+ const imported = await jiti.import(configPathJS, { default: true });
34
+ loadedConfig = imported.default || imported;
35
+ }
36
+ } catch (error) {
37
+ console.warn("[Kryo:Config] Could not load kryo.config.ts, using defaults.", error);
38
+ }
39
+ const finalConfig = {
40
+ ...DEFAULT_CONFIG,
41
+ ...loadedConfig
42
+ };
43
+ if (process.env.NODE_ENV === "production") cachedConfig = finalConfig;
44
+ return finalConfig;
45
+ }
46
+ /**
47
+ * Helper returning the absolute path to the modules directory.
48
+ * SERVER ONLY.
49
+ */
50
+ async function getModulesDir() {
51
+ const dir = (await getKryoConfig()).modulesDirectory || "modules";
52
+ return path.isAbsolute(dir) ? dir : path.join(process.cwd(), dir);
53
+ }
54
+
55
+ //#endregion
56
+ export { getKryoConfig, getModulesDir };
57
+ //# sourceMappingURL=config.server.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.server.mjs","names":[],"sources":["../../src/core/config.server.ts"],"sourcesContent":["import fs from \"node:fs\";\nimport path from \"node:path\";\nimport { DEFAULT_CONFIG, type KryoConfig } from \"./config\";\n\nlet cachedConfig: KryoConfig | null = null;\n\n/**\n * Loads the Kryo configuration from kryo.config.ts or kryo.config.js in the current working directory.\n * SERVER ONLY.\n */\nexport async function getKryoConfig(): Promise<KryoConfig> {\n // Prevent this from ever running on the client even if imported\n if (typeof window !== \"undefined\") {\n throw new Error(\"getKryoConfig can only be called on the server.\");\n }\n\n // Use memory cache in production\n if (process.env.NODE_ENV === \"production\" && cachedConfig) {\n return cachedConfig;\n }\n\n const cwd = process.cwd();\n const configPathTS = path.join(cwd, \"kryo.config.ts\");\n const configPathJS = path.join(cwd, \"kryo.config.js\");\n const configPathMJS = path.join(cwd, \"kryo.config.mjs\");\n\n let loadedConfig: Partial<KryoConfig> = {};\n\n try {\n // Dynamic import jiti only on server to avoid bundling issues\n const { createJiti } = await import(\"jiti\");\n const jiti = createJiti(cwd, {\n fsCache: false,\n moduleCache: false,\n });\n\n if (fs.existsSync(configPathTS)) {\n const cacheBuster = `?t=${Date.now()}`;\n const imported: any = await jiti.import(\n `file://${configPathTS}${cacheBuster}`,\n { default: true },\n );\n loadedConfig = imported.default || imported;\n } else if (fs.existsSync(configPathMJS)) {\n const imported: any = await jiti.import(configPathMJS, { default: true });\n loadedConfig = imported.default || imported;\n } else if (fs.existsSync(configPathJS)) {\n const imported: any = await jiti.import(configPathJS, { default: true });\n loadedConfig = imported.default || imported;\n }\n } catch (error) {\n console.warn(\n \"[Kryo:Config] Could not load kryo.config.ts, using defaults.\",\n error,\n );\n }\n\n const finalConfig = { ...DEFAULT_CONFIG, ...loadedConfig };\n\n if (process.env.NODE_ENV === \"production\") {\n cachedConfig = finalConfig;\n }\n\n return finalConfig;\n}\n\n/**\n * Helper returning the absolute path to the modules directory.\n * SERVER ONLY.\n */\nexport async function getModulesDir(): Promise<string> {\n const config = await getKryoConfig();\n const dir = config.modulesDirectory || \"modules\";\n return path.isAbsolute(dir) ? dir : path.join(process.cwd(), dir);\n}\n"],"mappings":";;;;;AAIA,IAAI,eAAkC;;;;;AAMtC,eAAsB,gBAAqC;AAEzD,KAAI,OAAO,WAAW,YACpB,OAAM,IAAI,MAAM,kDAAkD;AAIpE,KAAI,QAAQ,IAAI,aAAa,gBAAgB,aAC3C,QAAO;CAGT,MAAM,MAAM,QAAQ,KAAK;CACzB,MAAM,eAAe,KAAK,KAAK,KAAK,iBAAiB;CACrD,MAAM,eAAe,KAAK,KAAK,KAAK,iBAAiB;CACrD,MAAM,gBAAgB,KAAK,KAAK,KAAK,kBAAkB;CAEvD,IAAI,eAAoC,EAAE;AAE1C,KAAI;EAEF,MAAM,EAAE,eAAe,MAAM,OAAO;EACpC,MAAM,OAAO,WAAW,KAAK;GAC3B,SAAS;GACT,aAAa;GACd,CAAC;AAEF,MAAI,GAAG,WAAW,aAAa,EAAE;GAC/B,MAAM,cAAc,MAAM,KAAK,KAAK;GACpC,MAAM,WAAgB,MAAM,KAAK,OAC/B,UAAU,eAAe,eACzB,EAAE,SAAS,MAAM,CAClB;AACD,kBAAe,SAAS,WAAW;aAC1B,GAAG,WAAW,cAAc,EAAE;GACvC,MAAM,WAAgB,MAAM,KAAK,OAAO,eAAe,EAAE,SAAS,MAAM,CAAC;AACzE,kBAAe,SAAS,WAAW;aAC1B,GAAG,WAAW,aAAa,EAAE;GACtC,MAAM,WAAgB,MAAM,KAAK,OAAO,cAAc,EAAE,SAAS,MAAM,CAAC;AACxE,kBAAe,SAAS,WAAW;;UAE9B,OAAO;AACd,UAAQ,KACN,gEACA,MACD;;CAGH,MAAM,cAAc;EAAE,GAAG;EAAgB,GAAG;EAAc;AAE1D,KAAI,QAAQ,IAAI,aAAa,aAC3B,gBAAe;AAGjB,QAAO;;;;;;AAOT,eAAsB,gBAAiC;CAErD,MAAM,OADS,MAAM,eAAe,EACjB,oBAAoB;AACvC,QAAO,KAAK,WAAW,IAAI,GAAG,MAAM,KAAK,KAAK,QAAQ,KAAK,EAAE,IAAI"}
@@ -0,0 +1,48 @@
1
+
2
+ //#region src/core/event-bus.ts
3
+ /**
4
+ * EventBus (Pub/Sub) - Global Singleton Pattern.
5
+ */
6
+ var EventBus = class {
7
+ constructor() {
8
+ this.handlers = /* @__PURE__ */ new Map();
9
+ }
10
+ subscribe(eventType, subscriberId, handler) {
11
+ if (!this.handlers.has(eventType)) this.handlers.set(eventType, /* @__PURE__ */ new Map());
12
+ this.handlers.get(eventType)?.set(subscriberId, handler);
13
+ console.log(`[Event Bus] Subscriber "${subscriberId}" added for "${eventType}"`);
14
+ }
15
+ unsubscribe(eventType, subscriberId) {
16
+ this.handlers.get(eventType)?.delete(subscriberId);
17
+ console.log(`[Event Bus] Subscriber "${subscriberId}" removed from "${eventType}"`);
18
+ }
19
+ clearAll() {
20
+ console.log("[Event Bus] Resetting all listeners...");
21
+ this.handlers.clear();
22
+ }
23
+ async publish(eventType, payload, source = "system") {
24
+ const eventHandlers = this.handlers.get(eventType);
25
+ if (!eventHandlers) return;
26
+ const handlers = Array.from(eventHandlers.values());
27
+ console.log(`[Event Bus] Publishing "${eventType}" to ${handlers.length} subscribers`);
28
+ const event = {
29
+ type: eventType,
30
+ payload,
31
+ timestamp: Date.now(),
32
+ source
33
+ };
34
+ await Promise.all(handlers.map(async (handler) => {
35
+ try {
36
+ await handler(event);
37
+ } catch (error) {
38
+ console.error(`[Event Bus] Handler Error for ${eventType}:`, error);
39
+ }
40
+ }));
41
+ }
42
+ };
43
+ const globalForEventBus = globalThis;
44
+ const eventBus = globalForEventBus.__WINKLY_EVENT_BUS__ ?? new EventBus();
45
+ globalForEventBus.__WINKLY_EVENT_BUS__ = eventBus;
46
+
47
+ //#endregion
48
+ exports.eventBus = eventBus;
@@ -0,0 +1,17 @@
1
+ import { EventHandler } from "./types.cjs";
2
+
3
+ //#region src/core/event-bus.d.ts
4
+ /**
5
+ * EventBus (Pub/Sub) - Global Singleton Pattern.
6
+ */
7
+ declare class EventBus {
8
+ private handlers;
9
+ subscribe<T>(eventType: string, subscriberId: string, handler: EventHandler<T>): void;
10
+ unsubscribe(eventType: string, subscriberId: string): void;
11
+ clearAll(): void;
12
+ publish<T>(eventType: string, payload: T, source?: string): Promise<void>;
13
+ }
14
+ declare const eventBus: EventBus;
15
+ //#endregion
16
+ export { eventBus };
17
+ //# sourceMappingURL=event-bus.d.cts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"event-bus.d.cts","names":[],"sources":["../../src/core/event-bus.ts"],"mappings":";;;;;AAAyD;cAKnD,QAAA;EAAA,QACI,QAAA;EAED,SAAA,GAAA,CACL,SAAA,UACA,YAAA,UACA,OAAA,EAAS,YAAA,CAAa,CAAA;EAYjB,WAAA,CAAY,SAAA,UAAmB,YAAA;EAO/B,QAAA,CAAA;EAKM,OAAA,GAAA,CACX,SAAA,UACA,OAAA,EAAS,CAAA,EACT,MAAA,YACC,OAAA;AAAA;AAAA,cAkCQ,QAAA,EAAQ,QAAA"}
@@ -0,0 +1,17 @@
1
+ import { EventHandler } from "./types.mjs";
2
+
3
+ //#region src/core/event-bus.d.ts
4
+ /**
5
+ * EventBus (Pub/Sub) - Global Singleton Pattern.
6
+ */
7
+ declare class EventBus {
8
+ private handlers;
9
+ subscribe<T>(eventType: string, subscriberId: string, handler: EventHandler<T>): void;
10
+ unsubscribe(eventType: string, subscriberId: string): void;
11
+ clearAll(): void;
12
+ publish<T>(eventType: string, payload: T, source?: string): Promise<void>;
13
+ }
14
+ declare const eventBus: EventBus;
15
+ //#endregion
16
+ export { eventBus };
17
+ //# sourceMappingURL=event-bus.d.mts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"event-bus.d.mts","names":[],"sources":["../../src/core/event-bus.ts"],"mappings":";;;;;AAAyD;cAKnD,QAAA;EAAA,QACI,QAAA;EAED,SAAA,GAAA,CACL,SAAA,UACA,YAAA,UACA,OAAA,EAAS,YAAA,CAAa,CAAA;EAYjB,WAAA,CAAY,SAAA,UAAmB,YAAA;EAO/B,QAAA,CAAA;EAKM,OAAA,GAAA,CACX,SAAA,UACA,OAAA,EAAS,CAAA,EACT,MAAA,YACC,OAAA;AAAA;AAAA,cAkCQ,QAAA,EAAQ,QAAA"}
@@ -0,0 +1,48 @@
1
+ //#region src/core/event-bus.ts
2
+ /**
3
+ * EventBus (Pub/Sub) - Global Singleton Pattern.
4
+ */
5
+ var EventBus = class {
6
+ constructor() {
7
+ this.handlers = /* @__PURE__ */ new Map();
8
+ }
9
+ subscribe(eventType, subscriberId, handler) {
10
+ if (!this.handlers.has(eventType)) this.handlers.set(eventType, /* @__PURE__ */ new Map());
11
+ this.handlers.get(eventType)?.set(subscriberId, handler);
12
+ console.log(`[Event Bus] Subscriber "${subscriberId}" added for "${eventType}"`);
13
+ }
14
+ unsubscribe(eventType, subscriberId) {
15
+ this.handlers.get(eventType)?.delete(subscriberId);
16
+ console.log(`[Event Bus] Subscriber "${subscriberId}" removed from "${eventType}"`);
17
+ }
18
+ clearAll() {
19
+ console.log("[Event Bus] Resetting all listeners...");
20
+ this.handlers.clear();
21
+ }
22
+ async publish(eventType, payload, source = "system") {
23
+ const eventHandlers = this.handlers.get(eventType);
24
+ if (!eventHandlers) return;
25
+ const handlers = Array.from(eventHandlers.values());
26
+ console.log(`[Event Bus] Publishing "${eventType}" to ${handlers.length} subscribers`);
27
+ const event = {
28
+ type: eventType,
29
+ payload,
30
+ timestamp: Date.now(),
31
+ source
32
+ };
33
+ await Promise.all(handlers.map(async (handler) => {
34
+ try {
35
+ await handler(event);
36
+ } catch (error) {
37
+ console.error(`[Event Bus] Handler Error for ${eventType}:`, error);
38
+ }
39
+ }));
40
+ }
41
+ };
42
+ const globalForEventBus = globalThis;
43
+ const eventBus = globalForEventBus.__WINKLY_EVENT_BUS__ ?? new EventBus();
44
+ globalForEventBus.__WINKLY_EVENT_BUS__ = eventBus;
45
+
46
+ //#endregion
47
+ export { eventBus };
48
+ //# sourceMappingURL=event-bus.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"event-bus.mjs","names":[],"sources":["../../src/core/event-bus.ts"],"sourcesContent":["import type { EventHandler, SystemEvent } from \"./types\";\n\n/**\n * EventBus (Pub/Sub) - Global Singleton Pattern.\n */\nclass EventBus {\n private handlers: Map<string, Map<string, EventHandler>> = new Map();\n\n public subscribe<T>(\n eventType: string,\n subscriberId: string,\n handler: EventHandler<T>,\n ): void {\n if (!this.handlers.has(eventType)) {\n this.handlers.set(eventType, new Map());\n }\n const eventHandlers = this.handlers.get(eventType);\n eventHandlers?.set(subscriberId, handler);\n console.log(\n `[Event Bus] Subscriber \"${subscriberId}\" added for \"${eventType}\"`,\n );\n }\n\n public unsubscribe(eventType: string, subscriberId: string): void {\n this.handlers.get(eventType)?.delete(subscriberId);\n console.log(\n `[Event Bus] Subscriber \"${subscriberId}\" removed from \"${eventType}\"`,\n );\n }\n\n public clearAll(): void {\n console.log(\"[Event Bus] Resetting all listeners...\");\n this.handlers.clear();\n }\n\n public async publish<T>(\n eventType: string,\n payload: T,\n source: string = \"system\",\n ): Promise<void> {\n const eventHandlers = this.handlers.get(eventType);\n if (!eventHandlers) return;\n\n const handlers = Array.from(eventHandlers.values());\n\n console.log(\n `[Event Bus] Publishing \"${eventType}\" to ${handlers.length} subscribers`,\n );\n\n const event: SystemEvent<T> = {\n type: eventType,\n payload,\n timestamp: Date.now(),\n source,\n };\n\n await Promise.all(\n handlers.map(async (handler) => {\n try {\n await handler(event);\n } catch (error) {\n console.error(`[Event Bus] Handler Error for ${eventType}:`, error);\n }\n }),\n );\n }\n}\n\n// Ensure global singleton\nconst globalForEventBus = globalThis as unknown as {\n __WINKLY_EVENT_BUS__: EventBus | undefined;\n};\n\nexport const eventBus =\n globalForEventBus.__WINKLY_EVENT_BUS__ ?? new EventBus();\n\nglobalForEventBus.__WINKLY_EVENT_BUS__ = eventBus;\n"],"mappings":";;;;AAKA,IAAM,WAAN,MAAe;;kCAC8C,IAAI,KAAK;;CAEpE,AAAO,UACL,WACA,cACA,SACM;AACN,MAAI,CAAC,KAAK,SAAS,IAAI,UAAU,CAC/B,MAAK,SAAS,IAAI,2BAAW,IAAI,KAAK,CAAC;AAGzC,EADsB,KAAK,SAAS,IAAI,UAAU,EACnC,IAAI,cAAc,QAAQ;AACzC,UAAQ,IACN,2BAA2B,aAAa,eAAe,UAAU,GAClE;;CAGH,AAAO,YAAY,WAAmB,cAA4B;AAChE,OAAK,SAAS,IAAI,UAAU,EAAE,OAAO,aAAa;AAClD,UAAQ,IACN,2BAA2B,aAAa,kBAAkB,UAAU,GACrE;;CAGH,AAAO,WAAiB;AACtB,UAAQ,IAAI,yCAAyC;AACrD,OAAK,SAAS,OAAO;;CAGvB,MAAa,QACX,WACA,SACA,SAAiB,UACF;EACf,MAAM,gBAAgB,KAAK,SAAS,IAAI,UAAU;AAClD,MAAI,CAAC,cAAe;EAEpB,MAAM,WAAW,MAAM,KAAK,cAAc,QAAQ,CAAC;AAEnD,UAAQ,IACN,2BAA2B,UAAU,OAAO,SAAS,OAAO,cAC7D;EAED,MAAM,QAAwB;GAC5B,MAAM;GACN;GACA,WAAW,KAAK,KAAK;GACrB;GACD;AAED,QAAM,QAAQ,IACZ,SAAS,IAAI,OAAO,YAAY;AAC9B,OAAI;AACF,UAAM,QAAQ,MAAM;YACb,OAAO;AACd,YAAQ,MAAM,iCAAiC,UAAU,IAAI,MAAM;;IAErE,CACH;;;AAKL,MAAM,oBAAoB;AAI1B,MAAa,WACX,kBAAkB,wBAAwB,IAAI,UAAU;AAE1D,kBAAkB,uBAAuB"}
@@ -0,0 +1,43 @@
1
+
2
+ //#region src/core/filesystem/service.ts
3
+ var FilesystemService = class {
4
+ constructor() {
5
+ this.providers = /* @__PURE__ */ new Map();
6
+ this.defaultProviderId = null;
7
+ }
8
+ registerProvider(provider) {
9
+ this.providers.set(provider.id, provider);
10
+ if (!this.defaultProviderId || this.defaultProviderId === "local") this.defaultProviderId = provider.id;
11
+ console.log(`[Filesystem] Provider registered: ${provider.id}`);
12
+ }
13
+ unregisterProvider(id) {
14
+ this.providers.delete(id);
15
+ if (this.defaultProviderId === id) this.defaultProviderId = this.providers.has("local") ? "local" : Array.from(this.providers.keys())[0] || null;
16
+ console.log(`[Filesystem] Provider unregistered: ${id}`);
17
+ }
18
+ setDefaultProvider(id) {
19
+ if (this.providers.has(id)) {
20
+ this.defaultProviderId = id;
21
+ console.log(`[Filesystem] Default provider set to: ${id}`);
22
+ }
23
+ }
24
+ async upload(file, providerId) {
25
+ let id = providerId || this.defaultProviderId;
26
+ if (!id || !this.providers.has(id)) id = "local";
27
+ const provider = this.providers.get(id);
28
+ if (!provider) return { error: "No storage provider available (local fallback failed)" };
29
+ return await provider.upload(file);
30
+ }
31
+ getProviders() {
32
+ return Array.from(this.providers.values()).map((p) => ({
33
+ id: p.id,
34
+ name: p.name
35
+ }));
36
+ }
37
+ };
38
+ const globalForFilesystem = globalThis;
39
+ const filesystemService = globalForFilesystem.__WINKLY_FILESYSTEM_SERVICE__ ?? new FilesystemService();
40
+ globalForFilesystem.__WINKLY_FILESYSTEM_SERVICE__ = filesystemService;
41
+
42
+ //#endregion
43
+ exports.filesystemService = filesystemService;
@@ -0,0 +1,19 @@
1
+ import { IStorageProvider, StorageResult } from "./types.cjs";
2
+
3
+ //#region src/core/filesystem/service.d.ts
4
+ declare class FilesystemService {
5
+ private providers;
6
+ private defaultProviderId;
7
+ registerProvider(provider: IStorageProvider): void;
8
+ unregisterProvider(id: string): void;
9
+ setDefaultProvider(id: string): void;
10
+ upload(file: File, providerId?: string): Promise<StorageResult>;
11
+ getProviders(): {
12
+ id: string;
13
+ name: string;
14
+ }[];
15
+ }
16
+ declare const filesystemService: FilesystemService;
17
+ //#endregion
18
+ export { filesystemService };
19
+ //# sourceMappingURL=service.d.cts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"service.d.cts","names":[],"sources":["../../../src/core/filesystem/service.ts"],"mappings":";;;cAEM,iBAAA;EAAA,QACI,SAAA;EAAA,QACA,iBAAA;EAED,gBAAA,CAAiB,QAAA,EAAU,gBAAA;EAQ3B,kBAAA,CAAmB,EAAA;EAUnB,kBAAA,CAAmB,EAAA;EAOb,MAAA,CAAO,IAAA,EAAM,IAAA,EAAM,UAAA,YAAsB,OAAA,CAAQ,aAAA;EAgBvD,YAAA,CAAA;;;;;cAaI,iBAAA,EAAiB,iBAAA"}
@@ -0,0 +1,19 @@
1
+ import { IStorageProvider, StorageResult } from "./types.mjs";
2
+
3
+ //#region src/core/filesystem/service.d.ts
4
+ declare class FilesystemService {
5
+ private providers;
6
+ private defaultProviderId;
7
+ registerProvider(provider: IStorageProvider): void;
8
+ unregisterProvider(id: string): void;
9
+ setDefaultProvider(id: string): void;
10
+ upload(file: File, providerId?: string): Promise<StorageResult>;
11
+ getProviders(): {
12
+ id: string;
13
+ name: string;
14
+ }[];
15
+ }
16
+ declare const filesystemService: FilesystemService;
17
+ //#endregion
18
+ export { filesystemService };
19
+ //# sourceMappingURL=service.d.mts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"service.d.mts","names":[],"sources":["../../../src/core/filesystem/service.ts"],"mappings":";;;cAEM,iBAAA;EAAA,QACI,SAAA;EAAA,QACA,iBAAA;EAED,gBAAA,CAAiB,QAAA,EAAU,gBAAA;EAQ3B,kBAAA,CAAmB,EAAA;EAUnB,kBAAA,CAAmB,EAAA;EAOb,MAAA,CAAO,IAAA,EAAM,IAAA,EAAM,UAAA,YAAsB,OAAA,CAAQ,aAAA;EAgBvD,YAAA,CAAA;;;;;cAaI,iBAAA,EAAiB,iBAAA"}
@@ -0,0 +1,43 @@
1
+ //#region src/core/filesystem/service.ts
2
+ var FilesystemService = class {
3
+ constructor() {
4
+ this.providers = /* @__PURE__ */ new Map();
5
+ this.defaultProviderId = null;
6
+ }
7
+ registerProvider(provider) {
8
+ this.providers.set(provider.id, provider);
9
+ if (!this.defaultProviderId || this.defaultProviderId === "local") this.defaultProviderId = provider.id;
10
+ console.log(`[Filesystem] Provider registered: ${provider.id}`);
11
+ }
12
+ unregisterProvider(id) {
13
+ this.providers.delete(id);
14
+ if (this.defaultProviderId === id) this.defaultProviderId = this.providers.has("local") ? "local" : Array.from(this.providers.keys())[0] || null;
15
+ console.log(`[Filesystem] Provider unregistered: ${id}`);
16
+ }
17
+ setDefaultProvider(id) {
18
+ if (this.providers.has(id)) {
19
+ this.defaultProviderId = id;
20
+ console.log(`[Filesystem] Default provider set to: ${id}`);
21
+ }
22
+ }
23
+ async upload(file, providerId) {
24
+ let id = providerId || this.defaultProviderId;
25
+ if (!id || !this.providers.has(id)) id = "local";
26
+ const provider = this.providers.get(id);
27
+ if (!provider) return { error: "No storage provider available (local fallback failed)" };
28
+ return await provider.upload(file);
29
+ }
30
+ getProviders() {
31
+ return Array.from(this.providers.values()).map((p) => ({
32
+ id: p.id,
33
+ name: p.name
34
+ }));
35
+ }
36
+ };
37
+ const globalForFilesystem = globalThis;
38
+ const filesystemService = globalForFilesystem.__WINKLY_FILESYSTEM_SERVICE__ ?? new FilesystemService();
39
+ globalForFilesystem.__WINKLY_FILESYSTEM_SERVICE__ = filesystemService;
40
+
41
+ //#endregion
42
+ export { filesystemService };
43
+ //# sourceMappingURL=service.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"service.mjs","names":[],"sources":["../../../src/core/filesystem/service.ts"],"sourcesContent":["import type { IStorageProvider, StorageResult } from \"./types\";\n\nclass FilesystemService {\n private providers: Map<string, IStorageProvider> = new Map();\n private defaultProviderId: string | null = null;\n\n public registerProvider(provider: IStorageProvider) {\n this.providers.set(provider.id, provider);\n if (!this.defaultProviderId || this.defaultProviderId === \"local\") {\n this.defaultProviderId = provider.id;\n }\n console.log(`[Filesystem] Provider registered: ${provider.id}`);\n }\n\n public unregisterProvider(id: string) {\n this.providers.delete(id);\n if (this.defaultProviderId === id) {\n this.defaultProviderId = this.providers.has(\"local\")\n ? \"local\"\n : Array.from(this.providers.keys())[0] || null;\n }\n console.log(`[Filesystem] Provider unregistered: ${id}`);\n }\n\n public setDefaultProvider(id: string) {\n if (this.providers.has(id)) {\n this.defaultProviderId = id;\n console.log(`[Filesystem] Default provider set to: ${id}`);\n }\n }\n\n public async upload(file: File, providerId?: string): Promise<StorageResult> {\n let id = providerId || this.defaultProviderId;\n\n // Fallback logic\n if (!id || !this.providers.has(id)) {\n id = \"local\";\n }\n\n const provider = this.providers.get(id);\n if (!provider) {\n return { error: \"No storage provider available (local fallback failed)\" };\n }\n\n return await provider.upload(file);\n }\n\n public getProviders() {\n return Array.from(this.providers.values()).map((p) => ({\n id: p.id,\n name: p.name,\n }));\n }\n}\n\n// Global Singleton Pattern\nconst globalForFilesystem = globalThis as unknown as {\n __WINKLY_FILESYSTEM_SERVICE__: FilesystemService | undefined;\n};\n\nexport const filesystemService =\n globalForFilesystem.__WINKLY_FILESYSTEM_SERVICE__ ?? new FilesystemService();\n\nglobalForFilesystem.__WINKLY_FILESYSTEM_SERVICE__ = filesystemService;\n"],"mappings":";AAEA,IAAM,oBAAN,MAAwB;;mCAC6B,IAAI,KAAK;2BACjB;;CAE3C,AAAO,iBAAiB,UAA4B;AAClD,OAAK,UAAU,IAAI,SAAS,IAAI,SAAS;AACzC,MAAI,CAAC,KAAK,qBAAqB,KAAK,sBAAsB,QACxD,MAAK,oBAAoB,SAAS;AAEpC,UAAQ,IAAI,qCAAqC,SAAS,KAAK;;CAGjE,AAAO,mBAAmB,IAAY;AACpC,OAAK,UAAU,OAAO,GAAG;AACzB,MAAI,KAAK,sBAAsB,GAC7B,MAAK,oBAAoB,KAAK,UAAU,IAAI,QAAQ,GAChD,UACA,MAAM,KAAK,KAAK,UAAU,MAAM,CAAC,CAAC,MAAM;AAE9C,UAAQ,IAAI,uCAAuC,KAAK;;CAG1D,AAAO,mBAAmB,IAAY;AACpC,MAAI,KAAK,UAAU,IAAI,GAAG,EAAE;AAC1B,QAAK,oBAAoB;AACzB,WAAQ,IAAI,yCAAyC,KAAK;;;CAI9D,MAAa,OAAO,MAAY,YAA6C;EAC3E,IAAI,KAAK,cAAc,KAAK;AAG5B,MAAI,CAAC,MAAM,CAAC,KAAK,UAAU,IAAI,GAAG,CAChC,MAAK;EAGP,MAAM,WAAW,KAAK,UAAU,IAAI,GAAG;AACvC,MAAI,CAAC,SACH,QAAO,EAAE,OAAO,yDAAyD;AAG3E,SAAO,MAAM,SAAS,OAAO,KAAK;;CAGpC,AAAO,eAAe;AACpB,SAAO,MAAM,KAAK,KAAK,UAAU,QAAQ,CAAC,CAAC,KAAK,OAAO;GACrD,IAAI,EAAE;GACN,MAAM,EAAE;GACT,EAAE;;;AAKP,MAAM,sBAAsB;AAI5B,MAAa,oBACX,oBAAoB,iCAAiC,IAAI,mBAAmB;AAE9E,oBAAoB,gCAAgC"}
@@ -0,0 +1,22 @@
1
+ //#region src/core/filesystem/types.d.ts
2
+ interface StorageData {
3
+ name: string;
4
+ url: string;
5
+ type: string;
6
+ size: number;
7
+ service: string;
8
+ serviceId: string;
9
+ }
10
+ interface StorageError {
11
+ error: string;
12
+ }
13
+ type StorageResult = StorageData | StorageError;
14
+ interface IStorageProvider {
15
+ id: string;
16
+ name: string;
17
+ upload(file: File, options?: any): Promise<StorageResult>;
18
+ delete?(serviceId: string): Promise<boolean>;
19
+ }
20
+ //#endregion
21
+ export { IStorageProvider, StorageData, StorageError, StorageResult };
22
+ //# sourceMappingURL=types.d.cts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.cts","names":[],"sources":["../../../src/core/filesystem/types.ts"],"mappings":";UAAiB,WAAA;EACf,IAAA;EACA,GAAA;EACA,IAAA;EACA,IAAA;EACA,OAAA;EACA,SAAA;AAAA;AAAA,UAGe,YAAA;EACf,KAAA;AAAA;AAAA,KAGU,aAAA,GAAgB,WAAA,GAAc,YAAA;AAAA,UAEzB,gBAAA;EACf,EAAA;EACA,IAAA;EACA,MAAA,CAAO,IAAA,EAAM,IAAA,EAAM,OAAA,SAAgB,OAAA,CAAQ,aAAA;EAC3C,MAAA,EAAQ,SAAA,WAAoB,OAAA;AAAA"}
@@ -0,0 +1,22 @@
1
+ //#region src/core/filesystem/types.d.ts
2
+ interface StorageData {
3
+ name: string;
4
+ url: string;
5
+ type: string;
6
+ size: number;
7
+ service: string;
8
+ serviceId: string;
9
+ }
10
+ interface StorageError {
11
+ error: string;
12
+ }
13
+ type StorageResult = StorageData | StorageError;
14
+ interface IStorageProvider {
15
+ id: string;
16
+ name: string;
17
+ upload(file: File, options?: any): Promise<StorageResult>;
18
+ delete?(serviceId: string): Promise<boolean>;
19
+ }
20
+ //#endregion
21
+ export { IStorageProvider, StorageData, StorageError, StorageResult };
22
+ //# sourceMappingURL=types.d.mts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.mts","names":[],"sources":["../../../src/core/filesystem/types.ts"],"mappings":";UAAiB,WAAA;EACf,IAAA;EACA,GAAA;EACA,IAAA;EACA,IAAA;EACA,OAAA;EACA,SAAA;AAAA;AAAA,UAGe,YAAA;EACf,KAAA;AAAA;AAAA,KAGU,aAAA,GAAgB,WAAA,GAAc,YAAA;AAAA,UAEzB,gBAAA;EACf,EAAA;EACA,IAAA;EACA,MAAA,CAAO,IAAA,EAAM,IAAA,EAAM,OAAA,SAAgB,OAAA,CAAQ,aAAA;EAC3C,MAAA,EAAQ,SAAA,WAAoB,OAAA;AAAA"}
@@ -0,0 +1,36 @@
1
+ "use server";
2
+
3
+ const require_runtime = require('../../_virtual/_rolldown/runtime.cjs');
4
+ const require_inject = require('../../server/database/inject.cjs');
5
+ const require_schema = require('../../server/database/schema.cjs');
6
+ const require_session = require('../auth/session.cjs');
7
+ let drizzle_orm = require("drizzle-orm");
8
+
9
+ //#region src/core/notifications/actions.ts
10
+ async function getUserNotifications() {
11
+ const { user } = await require_session.getCurrentSession();
12
+ if (!user) return null;
13
+ return await require_inject.db.select().from(require_schema.notificationTable).where((0, drizzle_orm.eq)(require_schema.notificationTable.userId, user.id)).orderBy((0, drizzle_orm.desc)(require_schema.notificationTable.createdAt));
14
+ }
15
+ async function createNotification(data) {
16
+ const [notification] = await require_inject.db.insert(require_schema.notificationTable).values({
17
+ ...data,
18
+ isRead: false
19
+ }).returning();
20
+ return notification;
21
+ }
22
+ async function markNotificationAsRead(id) {
23
+ const [updated] = await require_inject.db.update(require_schema.notificationTable).set({ isRead: true }).where((0, drizzle_orm.eq)(require_schema.notificationTable.id, id)).returning();
24
+ return updated;
25
+ }
26
+ async function markAllNotificationsAsRead() {
27
+ const { user } = await require_session.getCurrentSession();
28
+ if (!user) return null;
29
+ return await require_inject.db.update(require_schema.notificationTable).set({ isRead: true }).where((0, drizzle_orm.eq)(require_schema.notificationTable.userId, user.id)).returning();
30
+ }
31
+
32
+ //#endregion
33
+ exports.createNotification = createNotification;
34
+ exports.getUserNotifications = getUserNotifications;
35
+ exports.markAllNotificationsAsRead = markAllNotificationsAsRead;
36
+ exports.markNotificationAsRead = markNotificationAsRead;