@trokky/trokky 2.0.3

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 (639) hide show
  1. package/dist/adapters/filesystem/filesystem-adapter.d.ts +80 -0
  2. package/dist/adapters/filesystem/filesystem-adapter.d.ts.map +1 -0
  3. package/dist/adapters/filesystem/filesystem-adapter.js +1370 -0
  4. package/dist/adapters/filesystem/filesystem-adapter.js.map +1 -0
  5. package/dist/adapters/filesystem/index.d.ts +29 -0
  6. package/dist/adapters/filesystem/index.d.ts.map +1 -0
  7. package/dist/adapters/filesystem/index.js +31 -0
  8. package/dist/adapters/filesystem/index.js.map +1 -0
  9. package/dist/adapters/filesystem/types.d.ts +111 -0
  10. package/dist/adapters/filesystem/types.d.ts.map +1 -0
  11. package/dist/adapters/filesystem/types.js +2 -0
  12. package/dist/adapters/filesystem/types.js.map +1 -0
  13. package/dist/adapters/filesystem-data/filesystem-data-adapter.d.ts +111 -0
  14. package/dist/adapters/filesystem-data/filesystem-data-adapter.d.ts.map +1 -0
  15. package/dist/adapters/filesystem-data/filesystem-data-adapter.js +1363 -0
  16. package/dist/adapters/filesystem-data/filesystem-data-adapter.js.map +1 -0
  17. package/dist/adapters/filesystem-data/index.d.ts +3 -0
  18. package/dist/adapters/filesystem-data/index.d.ts.map +1 -0
  19. package/dist/adapters/filesystem-data/index.js +13 -0
  20. package/dist/adapters/filesystem-data/index.js.map +1 -0
  21. package/dist/adapters/filesystem-data/types.d.ts +147 -0
  22. package/dist/adapters/filesystem-data/types.d.ts.map +1 -0
  23. package/dist/adapters/filesystem-data/types.js +2 -0
  24. package/dist/adapters/filesystem-data/types.js.map +1 -0
  25. package/dist/adapters/filesystem-media/filesystem-media-adapter.d.ts +32 -0
  26. package/dist/adapters/filesystem-media/filesystem-media-adapter.d.ts.map +1 -0
  27. package/dist/adapters/filesystem-media/filesystem-media-adapter.js +639 -0
  28. package/dist/adapters/filesystem-media/filesystem-media-adapter.js.map +1 -0
  29. package/dist/adapters/filesystem-media/index.d.ts +3 -0
  30. package/dist/adapters/filesystem-media/index.d.ts.map +1 -0
  31. package/dist/adapters/filesystem-media/index.js +13 -0
  32. package/dist/adapters/filesystem-media/index.js.map +1 -0
  33. package/dist/adapters/filesystem-media/types.d.ts +76 -0
  34. package/dist/adapters/filesystem-media/types.d.ts.map +1 -0
  35. package/dist/adapters/filesystem-media/types.js +2 -0
  36. package/dist/adapters/filesystem-media/types.js.map +1 -0
  37. package/dist/adapters/postgres-data/index.d.ts +3 -0
  38. package/dist/adapters/postgres-data/index.d.ts.map +1 -0
  39. package/dist/adapters/postgres-data/index.js +13 -0
  40. package/dist/adapters/postgres-data/index.js.map +1 -0
  41. package/dist/adapters/postgres-data/postgres-data-adapter.d.ts +154 -0
  42. package/dist/adapters/postgres-data/postgres-data-adapter.d.ts.map +1 -0
  43. package/dist/adapters/postgres-data/postgres-data-adapter.js +1432 -0
  44. package/dist/adapters/postgres-data/postgres-data-adapter.js.map +1 -0
  45. package/dist/adapters/postgres-data/types.d.ts +139 -0
  46. package/dist/adapters/postgres-data/types.d.ts.map +1 -0
  47. package/dist/adapters/postgres-data/types.js +2 -0
  48. package/dist/adapters/postgres-data/types.js.map +1 -0
  49. package/dist/core/adapters/registry.d.ts +79 -0
  50. package/dist/core/adapters/registry.d.ts.map +1 -0
  51. package/dist/core/adapters/registry.js +149 -0
  52. package/dist/core/adapters/registry.js.map +1 -0
  53. package/dist/core/core/engine.d.ts +551 -0
  54. package/dist/core/core/engine.d.ts.map +1 -0
  55. package/dist/core/core/engine.js +1074 -0
  56. package/dist/core/core/engine.js.map +1 -0
  57. package/dist/core/crypto/adapter.d.ts +63 -0
  58. package/dist/core/crypto/adapter.d.ts.map +1 -0
  59. package/dist/core/crypto/adapter.js +63 -0
  60. package/dist/core/crypto/adapter.js.map +1 -0
  61. package/dist/core/crypto/fallback-adapter.d.ts +23 -0
  62. package/dist/core/crypto/fallback-adapter.d.ts.map +1 -0
  63. package/dist/core/crypto/fallback-adapter.js +195 -0
  64. package/dist/core/crypto/fallback-adapter.js.map +1 -0
  65. package/dist/core/crypto/node-adapter.d.ts +20 -0
  66. package/dist/core/crypto/node-adapter.d.ts.map +1 -0
  67. package/dist/core/crypto/node-adapter.js +85 -0
  68. package/dist/core/crypto/node-adapter.js.map +1 -0
  69. package/dist/core/crypto/password-hash.d.ts +73 -0
  70. package/dist/core/crypto/password-hash.d.ts.map +1 -0
  71. package/dist/core/crypto/password-hash.js +244 -0
  72. package/dist/core/crypto/password-hash.js.map +1 -0
  73. package/dist/core/crypto/webcrypto-adapter.d.ts +24 -0
  74. package/dist/core/crypto/webcrypto-adapter.d.ts.map +1 -0
  75. package/dist/core/crypto/webcrypto-adapter.js +158 -0
  76. package/dist/core/crypto/webcrypto-adapter.js.map +1 -0
  77. package/dist/core/errors/index.d.ts +30 -0
  78. package/dist/core/errors/index.d.ts.map +1 -0
  79. package/dist/core/errors/index.js +61 -0
  80. package/dist/core/errors/index.js.map +1 -0
  81. package/dist/core/events/event-bus.d.ts +121 -0
  82. package/dist/core/events/event-bus.d.ts.map +1 -0
  83. package/dist/core/events/event-bus.js +631 -0
  84. package/dist/core/events/event-bus.js.map +1 -0
  85. package/dist/core/events/index.d.ts +17 -0
  86. package/dist/core/events/index.d.ts.map +1 -0
  87. package/dist/core/events/index.js +22 -0
  88. package/dist/core/events/index.js.map +1 -0
  89. package/dist/core/events/memory-storage.d.ts +57 -0
  90. package/dist/core/events/memory-storage.d.ts.map +1 -0
  91. package/dist/core/events/memory-storage.js +175 -0
  92. package/dist/core/events/memory-storage.js.map +1 -0
  93. package/dist/core/events/types.d.ts +434 -0
  94. package/dist/core/events/types.d.ts.map +1 -0
  95. package/dist/core/events/types.js +9 -0
  96. package/dist/core/events/types.js.map +1 -0
  97. package/dist/core/events/utils.d.ts +134 -0
  98. package/dist/core/events/utils.d.ts.map +1 -0
  99. package/dist/core/events/utils.js +333 -0
  100. package/dist/core/events/utils.js.map +1 -0
  101. package/dist/core/fields/conditional.d.ts +115 -0
  102. package/dist/core/fields/conditional.d.ts.map +1 -0
  103. package/dist/core/fields/conditional.js +296 -0
  104. package/dist/core/fields/conditional.js.map +1 -0
  105. package/dist/core/fields/field-type.d.ts +218 -0
  106. package/dist/core/fields/field-type.d.ts.map +1 -0
  107. package/dist/core/fields/field-type.js +17 -0
  108. package/dist/core/fields/field-type.js.map +1 -0
  109. package/dist/core/fields/helpers.d.ts +86 -0
  110. package/dist/core/fields/helpers.d.ts.map +1 -0
  111. package/dist/core/fields/helpers.js +260 -0
  112. package/dist/core/fields/helpers.js.map +1 -0
  113. package/dist/core/fields/index.d.ts +5 -0
  114. package/dist/core/fields/index.d.ts.map +1 -0
  115. package/dist/core/fields/index.js +6 -0
  116. package/dist/core/fields/index.js.map +1 -0
  117. package/dist/core/fields/registry.d.ts +78 -0
  118. package/dist/core/fields/registry.d.ts.map +1 -0
  119. package/dist/core/fields/registry.js +185 -0
  120. package/dist/core/fields/registry.js.map +1 -0
  121. package/dist/core/index.d.ts +39 -0
  122. package/dist/core/index.d.ts.map +1 -0
  123. package/dist/core/index.js +57 -0
  124. package/dist/core/index.js.map +1 -0
  125. package/dist/core/media/image-processor.d.ts +24 -0
  126. package/dist/core/media/image-processor.d.ts.map +1 -0
  127. package/dist/core/media/image-processor.js +69 -0
  128. package/dist/core/media/image-processor.js.map +1 -0
  129. package/dist/core/media/processors/cloudflare-images.d.ts +83 -0
  130. package/dist/core/media/processors/cloudflare-images.d.ts.map +1 -0
  131. package/dist/core/media/processors/cloudflare-images.js +241 -0
  132. package/dist/core/media/processors/cloudflare-images.js.map +1 -0
  133. package/dist/core/media/processors/cloudflare-transform-store.d.ts +127 -0
  134. package/dist/core/media/processors/cloudflare-transform-store.d.ts.map +1 -0
  135. package/dist/core/media/processors/cloudflare-transform-store.js +237 -0
  136. package/dist/core/media/processors/cloudflare-transform-store.js.map +1 -0
  137. package/dist/core/media/processors/cloudflare-transformations.d.ts +81 -0
  138. package/dist/core/media/processors/cloudflare-transformations.d.ts.map +1 -0
  139. package/dist/core/media/processors/cloudflare-transformations.js +144 -0
  140. package/dist/core/media/processors/cloudflare-transformations.js.map +1 -0
  141. package/dist/core/media/processors/index.d.ts +9 -0
  142. package/dist/core/media/processors/index.d.ts.map +1 -0
  143. package/dist/core/media/processors/index.js +13 -0
  144. package/dist/core/media/processors/index.js.map +1 -0
  145. package/dist/core/media/processors/noop.d.ts +22 -0
  146. package/dist/core/media/processors/noop.d.ts.map +1 -0
  147. package/dist/core/media/processors/noop.js +38 -0
  148. package/dist/core/media/processors/noop.js.map +1 -0
  149. package/dist/core/media/processors/sharp.d.ts +30 -0
  150. package/dist/core/media/processors/sharp.d.ts.map +1 -0
  151. package/dist/core/media/processors/sharp.js +126 -0
  152. package/dist/core/media/processors/sharp.js.map +1 -0
  153. package/dist/core/media/processors/types.d.ts +67 -0
  154. package/dist/core/media/processors/types.d.ts.map +1 -0
  155. package/dist/core/media/processors/types.js +42 -0
  156. package/dist/core/media/processors/types.js.map +1 -0
  157. package/dist/core/media/processors/workers-images.d.ts +112 -0
  158. package/dist/core/media/processors/workers-images.d.ts.map +1 -0
  159. package/dist/core/media/processors/workers-images.js +257 -0
  160. package/dist/core/media/processors/workers-images.js.map +1 -0
  161. package/dist/core/schema/registry.d.ts +41 -0
  162. package/dist/core/schema/registry.d.ts.map +1 -0
  163. package/dist/core/schema/registry.js +248 -0
  164. package/dist/core/schema/registry.js.map +1 -0
  165. package/dist/core/schema/singleton.d.ts +107 -0
  166. package/dist/core/schema/singleton.d.ts.map +1 -0
  167. package/dist/core/schema/singleton.js +180 -0
  168. package/dist/core/schema/singleton.js.map +1 -0
  169. package/dist/core/security/auth.d.ts +120 -0
  170. package/dist/core/security/auth.d.ts.map +1 -0
  171. package/dist/core/security/auth.js +274 -0
  172. package/dist/core/security/auth.js.map +1 -0
  173. package/dist/core/security/captcha/index.d.ts +21 -0
  174. package/dist/core/security/captcha/index.d.ts.map +1 -0
  175. package/dist/core/security/captcha/index.js +34 -0
  176. package/dist/core/security/captcha/index.js.map +1 -0
  177. package/dist/core/security/captcha/recaptcha.d.ts +41 -0
  178. package/dist/core/security/captcha/recaptcha.d.ts.map +1 -0
  179. package/dist/core/security/captcha/recaptcha.js +89 -0
  180. package/dist/core/security/captcha/recaptcha.js.map +1 -0
  181. package/dist/core/security/captcha/turnstile.d.ts +41 -0
  182. package/dist/core/security/captcha/turnstile.d.ts.map +1 -0
  183. package/dist/core/security/captcha/turnstile.js +90 -0
  184. package/dist/core/security/captcha/turnstile.js.map +1 -0
  185. package/dist/core/security/captcha/types.d.ts +66 -0
  186. package/dist/core/security/captcha/types.d.ts.map +1 -0
  187. package/dist/core/security/captcha/types.js +7 -0
  188. package/dist/core/security/captcha/types.js.map +1 -0
  189. package/dist/core/security/mfa/email-otp.d.ts +91 -0
  190. package/dist/core/security/mfa/email-otp.d.ts.map +1 -0
  191. package/dist/core/security/mfa/email-otp.js +264 -0
  192. package/dist/core/security/mfa/email-otp.js.map +1 -0
  193. package/dist/core/security/mfa/index.d.ts +8 -0
  194. package/dist/core/security/mfa/index.d.ts.map +1 -0
  195. package/dist/core/security/mfa/index.js +8 -0
  196. package/dist/core/security/mfa/index.js.map +1 -0
  197. package/dist/core/security/mfa/totp.d.ts +87 -0
  198. package/dist/core/security/mfa/totp.d.ts.map +1 -0
  199. package/dist/core/security/mfa/totp.js +293 -0
  200. package/dist/core/security/mfa/totp.js.map +1 -0
  201. package/dist/core/security/middleware.d.ts +102 -0
  202. package/dist/core/security/middleware.d.ts.map +1 -0
  203. package/dist/core/security/middleware.js +261 -0
  204. package/dist/core/security/middleware.js.map +1 -0
  205. package/dist/core/security/oauth/google.d.ts +76 -0
  206. package/dist/core/security/oauth/google.d.ts.map +1 -0
  207. package/dist/core/security/oauth/google.js +154 -0
  208. package/dist/core/security/oauth/google.js.map +1 -0
  209. package/dist/core/security/oauth/index.d.ts +8 -0
  210. package/dist/core/security/oauth/index.d.ts.map +1 -0
  211. package/dist/core/security/oauth/index.js +7 -0
  212. package/dist/core/security/oauth/index.js.map +1 -0
  213. package/dist/core/security/oauth2/authorization-server.d.ts +195 -0
  214. package/dist/core/security/oauth2/authorization-server.d.ts.map +1 -0
  215. package/dist/core/security/oauth2/authorization-server.js +569 -0
  216. package/dist/core/security/oauth2/authorization-server.js.map +1 -0
  217. package/dist/core/security/oauth2/index.d.ts +9 -0
  218. package/dist/core/security/oauth2/index.d.ts.map +1 -0
  219. package/dist/core/security/oauth2/index.js +9 -0
  220. package/dist/core/security/oauth2/index.js.map +1 -0
  221. package/dist/core/security/rate-limiter.d.ts +15 -0
  222. package/dist/core/security/rate-limiter.d.ts.map +1 -0
  223. package/dist/core/security/rate-limiter.js +48 -0
  224. package/dist/core/security/rate-limiter.js.map +1 -0
  225. package/dist/core/security/validation.d.ts +20 -0
  226. package/dist/core/security/validation.d.ts.map +1 -0
  227. package/dist/core/security/validation.js +273 -0
  228. package/dist/core/security/validation.js.map +1 -0
  229. package/dist/core/services/auth-service.d.ts +128 -0
  230. package/dist/core/services/auth-service.d.ts.map +1 -0
  231. package/dist/core/services/auth-service.js +530 -0
  232. package/dist/core/services/auth-service.js.map +1 -0
  233. package/dist/core/services/captcha-service.d.ts +44 -0
  234. package/dist/core/services/captcha-service.d.ts.map +1 -0
  235. package/dist/core/services/captcha-service.js +82 -0
  236. package/dist/core/services/captcha-service.js.map +1 -0
  237. package/dist/core/services/document-service.d.ts +59 -0
  238. package/dist/core/services/document-service.d.ts.map +1 -0
  239. package/dist/core/services/document-service.js +269 -0
  240. package/dist/core/services/document-service.js.map +1 -0
  241. package/dist/core/services/media-service.d.ts +40 -0
  242. package/dist/core/services/media-service.d.ts.map +1 -0
  243. package/dist/core/services/media-service.js +396 -0
  244. package/dist/core/services/media-service.js.map +1 -0
  245. package/dist/core/services/mfa-service.d.ts +123 -0
  246. package/dist/core/services/mfa-service.d.ts.map +1 -0
  247. package/dist/core/services/mfa-service.js +606 -0
  248. package/dist/core/services/mfa-service.js.map +1 -0
  249. package/dist/core/services/oauth-service.d.ts +58 -0
  250. package/dist/core/services/oauth-service.d.ts.map +1 -0
  251. package/dist/core/services/oauth-service.js +253 -0
  252. package/dist/core/services/oauth-service.js.map +1 -0
  253. package/dist/core/services/oauth2-server-service.d.ts +61 -0
  254. package/dist/core/services/oauth2-server-service.d.ts.map +1 -0
  255. package/dist/core/services/oauth2-server-service.js +259 -0
  256. package/dist/core/services/oauth2-server-service.js.map +1 -0
  257. package/dist/core/services/passkey-service.d.ts +59 -0
  258. package/dist/core/services/passkey-service.d.ts.map +1 -0
  259. package/dist/core/services/passkey-service.js +238 -0
  260. package/dist/core/services/passkey-service.js.map +1 -0
  261. package/dist/core/services/token-service.d.ts +31 -0
  262. package/dist/core/services/token-service.d.ts.map +1 -0
  263. package/dist/core/services/token-service.js +132 -0
  264. package/dist/core/services/token-service.js.map +1 -0
  265. package/dist/core/services/trusted-device-service.d.ts +39 -0
  266. package/dist/core/services/trusted-device-service.d.ts.map +1 -0
  267. package/dist/core/services/trusted-device-service.js +123 -0
  268. package/dist/core/services/trusted-device-service.js.map +1 -0
  269. package/dist/core/services/user-service.d.ts +38 -0
  270. package/dist/core/services/user-service.d.ts.map +1 -0
  271. package/dist/core/services/user-service.js +265 -0
  272. package/dist/core/services/user-service.js.map +1 -0
  273. package/dist/core/studio/integration.d.ts +54 -0
  274. package/dist/core/studio/integration.d.ts.map +1 -0
  275. package/dist/core/studio/integration.js +326 -0
  276. package/dist/core/studio/integration.js.map +1 -0
  277. package/dist/core/types/index.d.ts +282 -0
  278. package/dist/core/types/index.d.ts.map +1 -0
  279. package/dist/core/types/index.js +83 -0
  280. package/dist/core/types/index.js.map +1 -0
  281. package/dist/core/types/mail.d.ts +90 -0
  282. package/dist/core/types/mail.d.ts.map +1 -0
  283. package/dist/core/types/mail.js +7 -0
  284. package/dist/core/types/mail.js.map +1 -0
  285. package/dist/core/types/oauth2.d.ts +9 -0
  286. package/dist/core/types/oauth2.d.ts.map +1 -0
  287. package/dist/core/types/oauth2.js +7 -0
  288. package/dist/core/types/oauth2.js.map +1 -0
  289. package/dist/core/types/storage-adapters.d.ts +611 -0
  290. package/dist/core/types/storage-adapters.d.ts.map +1 -0
  291. package/dist/core/types/storage-adapters.js +14 -0
  292. package/dist/core/types/storage-adapters.js.map +1 -0
  293. package/dist/core/types/user.d.ts +10 -0
  294. package/dist/core/types/user.d.ts.map +1 -0
  295. package/dist/core/types/user.js +45 -0
  296. package/dist/core/types/user.js.map +1 -0
  297. package/dist/core/utils/id-generator.d.ts +16 -0
  298. package/dist/core/utils/id-generator.d.ts.map +1 -0
  299. package/dist/core/utils/id-generator.js +61 -0
  300. package/dist/core/utils/id-generator.js.map +1 -0
  301. package/dist/core/utils/logger.d.ts +100 -0
  302. package/dist/core/utils/logger.d.ts.map +1 -0
  303. package/dist/core/utils/logger.js +212 -0
  304. package/dist/core/utils/logger.js.map +1 -0
  305. package/dist/core/utils/reference-expander.d.ts +57 -0
  306. package/dist/core/utils/reference-expander.d.ts.map +1 -0
  307. package/dist/core/utils/reference-expander.js +192 -0
  308. package/dist/core/utils/reference-expander.js.map +1 -0
  309. package/dist/core/utils/universal-crypto.d.ts +46 -0
  310. package/dist/core/utils/universal-crypto.d.ts.map +1 -0
  311. package/dist/core/utils/universal-crypto.js +171 -0
  312. package/dist/core/utils/universal-crypto.js.map +1 -0
  313. package/dist/core/validation/validator.d.ts +11 -0
  314. package/dist/core/validation/validator.d.ts.map +1 -0
  315. package/dist/core/validation/validator.js +164 -0
  316. package/dist/core/validation/validator.js.map +1 -0
  317. package/dist/i18n/config.d.ts +4077 -0
  318. package/dist/i18n/config.d.ts.map +1 -0
  319. package/dist/i18n/config.js +116 -0
  320. package/dist/i18n/config.js.map +1 -0
  321. package/dist/i18n/hooks.d.ts +86 -0
  322. package/dist/i18n/hooks.d.ts.map +1 -0
  323. package/dist/i18n/hooks.js +122 -0
  324. package/dist/i18n/hooks.js.map +1 -0
  325. package/dist/i18n/index.d.ts +39 -0
  326. package/dist/i18n/index.d.ts.map +1 -0
  327. package/dist/i18n/index.js +40 -0
  328. package/dist/i18n/index.js.map +1 -0
  329. package/dist/i18n/locales/en/auth.json +108 -0
  330. package/dist/i18n/locales/en/common.json +100 -0
  331. package/dist/i18n/locales/en/errors.json +55 -0
  332. package/dist/i18n/locales/en/fields.json +456 -0
  333. package/dist/i18n/locales/en/studio.json +1329 -0
  334. package/dist/i18n/locales/fr/auth.json +108 -0
  335. package/dist/i18n/locales/fr/common.json +100 -0
  336. package/dist/i18n/locales/fr/errors.json +55 -0
  337. package/dist/i18n/locales/fr/fields.json +456 -0
  338. package/dist/i18n/locales/fr/studio.json +1274 -0
  339. package/dist/i18n/provider.d.ts +45 -0
  340. package/dist/i18n/provider.d.ts.map +1 -0
  341. package/dist/i18n/provider.js +49 -0
  342. package/dist/i18n/provider.js.map +1 -0
  343. package/dist/i18n/types.d.ts +8 -0
  344. package/dist/i18n/types.d.ts.map +1 -0
  345. package/dist/i18n/types.js +7 -0
  346. package/dist/i18n/types.js.map +1 -0
  347. package/dist/index.d.ts +15 -0
  348. package/dist/index.d.ts.map +1 -0
  349. package/dist/index.js +16 -0
  350. package/dist/index.js.map +1 -0
  351. package/dist/integrations/express/adapter.d.ts +33 -0
  352. package/dist/integrations/express/adapter.d.ts.map +1 -0
  353. package/dist/integrations/express/adapter.js +203 -0
  354. package/dist/integrations/express/adapter.js.map +1 -0
  355. package/dist/integrations/express/config.d.ts +599 -0
  356. package/dist/integrations/express/config.d.ts.map +1 -0
  357. package/dist/integrations/express/config.js +166 -0
  358. package/dist/integrations/express/config.js.map +1 -0
  359. package/dist/integrations/express/index.d.ts +10 -0
  360. package/dist/integrations/express/index.d.ts.map +1 -0
  361. package/dist/integrations/express/index.js +9 -0
  362. package/dist/integrations/express/index.js.map +1 -0
  363. package/dist/integrations/express/integration.d.ts +111 -0
  364. package/dist/integrations/express/integration.d.ts.map +1 -0
  365. package/dist/integrations/express/integration.js +730 -0
  366. package/dist/integrations/express/integration.js.map +1 -0
  367. package/dist/integrations/express/media-rewrite-middleware.d.ts +78 -0
  368. package/dist/integrations/express/media-rewrite-middleware.d.ts.map +1 -0
  369. package/dist/integrations/express/media-rewrite-middleware.js +211 -0
  370. package/dist/integrations/express/media-rewrite-middleware.js.map +1 -0
  371. package/dist/integrations/express/media-url-generator.d.ts +52 -0
  372. package/dist/integrations/express/media-url-generator.d.ts.map +1 -0
  373. package/dist/integrations/express/media-url-generator.js +107 -0
  374. package/dist/integrations/express/media-url-generator.js.map +1 -0
  375. package/dist/integrations/express/middleware.d.ts +25 -0
  376. package/dist/integrations/express/middleware.d.ts.map +1 -0
  377. package/dist/integrations/express/middleware.js +130 -0
  378. package/dist/integrations/express/middleware.js.map +1 -0
  379. package/dist/integrations/express/server.d.ts +99 -0
  380. package/dist/integrations/express/server.d.ts.map +1 -0
  381. package/dist/integrations/express/server.js +597 -0
  382. package/dist/integrations/express/server.js.map +1 -0
  383. package/dist/integrations/express/types.d.ts +106 -0
  384. package/dist/integrations/express/types.d.ts.map +1 -0
  385. package/dist/integrations/express/types.js +2 -0
  386. package/dist/integrations/express/types.js.map +1 -0
  387. package/dist/mail/adapters/console.d.ts +30 -0
  388. package/dist/mail/adapters/console.d.ts.map +1 -0
  389. package/dist/mail/adapters/console.js +169 -0
  390. package/dist/mail/adapters/console.js.map +1 -0
  391. package/dist/mail/adapters/resend.d.ts +18 -0
  392. package/dist/mail/adapters/resend.d.ts.map +1 -0
  393. package/dist/mail/adapters/resend.js +148 -0
  394. package/dist/mail/adapters/resend.js.map +1 -0
  395. package/dist/mail/adapters/smtp.d.ts +22 -0
  396. package/dist/mail/adapters/smtp.d.ts.map +1 -0
  397. package/dist/mail/adapters/smtp.js +180 -0
  398. package/dist/mail/adapters/smtp.js.map +1 -0
  399. package/dist/mail/index.d.ts +15 -0
  400. package/dist/mail/index.d.ts.map +1 -0
  401. package/dist/mail/index.js +13 -0
  402. package/dist/mail/index.js.map +1 -0
  403. package/dist/mail/mail-service.d.ts +180 -0
  404. package/dist/mail/mail-service.d.ts.map +1 -0
  405. package/dist/mail/mail-service.js +370 -0
  406. package/dist/mail/mail-service.js.map +1 -0
  407. package/dist/mail/notification-service.d.ts +82 -0
  408. package/dist/mail/notification-service.d.ts.map +1 -0
  409. package/dist/mail/notification-service.js +262 -0
  410. package/dist/mail/notification-service.js.map +1 -0
  411. package/dist/mail/templates/built-in-templates.d.ts +47 -0
  412. package/dist/mail/templates/built-in-templates.d.ts.map +1 -0
  413. package/dist/mail/templates/built-in-templates.js +416 -0
  414. package/dist/mail/templates/built-in-templates.js.map +1 -0
  415. package/dist/mail/templates/custom-template-renderer.d.ts +115 -0
  416. package/dist/mail/templates/custom-template-renderer.d.ts.map +1 -0
  417. package/dist/mail/templates/custom-template-renderer.js +225 -0
  418. package/dist/mail/templates/custom-template-renderer.js.map +1 -0
  419. package/dist/mail/types.d.ts +7 -0
  420. package/dist/mail/types.d.ts.map +1 -0
  421. package/dist/mail/types.js +7 -0
  422. package/dist/mail/types.js.map +1 -0
  423. package/dist/routes/auth/captcha.d.ts +33 -0
  424. package/dist/routes/auth/captcha.d.ts.map +1 -0
  425. package/dist/routes/auth/captcha.js +102 -0
  426. package/dist/routes/auth/captcha.js.map +1 -0
  427. package/dist/routes/auth/change-password.d.ts +17 -0
  428. package/dist/routes/auth/change-password.d.ts.map +1 -0
  429. package/dist/routes/auth/change-password.js +121 -0
  430. package/dist/routes/auth/change-password.js.map +1 -0
  431. package/dist/routes/auth/index.d.ts +13 -0
  432. package/dist/routes/auth/index.d.ts.map +1 -0
  433. package/dist/routes/auth/index.js +35 -0
  434. package/dist/routes/auth/index.js.map +1 -0
  435. package/dist/routes/auth/mfa.d.ts +121 -0
  436. package/dist/routes/auth/mfa.d.ts.map +1 -0
  437. package/dist/routes/auth/mfa.js +1143 -0
  438. package/dist/routes/auth/mfa.js.map +1 -0
  439. package/dist/routes/auth/oauth.d.ts +37 -0
  440. package/dist/routes/auth/oauth.d.ts.map +1 -0
  441. package/dist/routes/auth/oauth.js +420 -0
  442. package/dist/routes/auth/oauth.js.map +1 -0
  443. package/dist/routes/auth/oauth2-server.d.ts +70 -0
  444. package/dist/routes/auth/oauth2-server.d.ts.map +1 -0
  445. package/dist/routes/auth/oauth2-server.js +775 -0
  446. package/dist/routes/auth/oauth2-server.js.map +1 -0
  447. package/dist/routes/auth/passkey.d.ts +65 -0
  448. package/dist/routes/auth/passkey.d.ts.map +1 -0
  449. package/dist/routes/auth/passkey.js +910 -0
  450. package/dist/routes/auth/passkey.js.map +1 -0
  451. package/dist/routes/auth/password-reset.d.ts +23 -0
  452. package/dist/routes/auth/password-reset.d.ts.map +1 -0
  453. package/dist/routes/auth/password-reset.js +336 -0
  454. package/dist/routes/auth/password-reset.js.map +1 -0
  455. package/dist/routes/handlers/audit.d.ts +21 -0
  456. package/dist/routes/handlers/audit.d.ts.map +1 -0
  457. package/dist/routes/handlers/audit.js +124 -0
  458. package/dist/routes/handlers/audit.js.map +1 -0
  459. package/dist/routes/handlers/auth.d.ts +150 -0
  460. package/dist/routes/handlers/auth.d.ts.map +1 -0
  461. package/dist/routes/handlers/auth.js +512 -0
  462. package/dist/routes/handlers/auth.js.map +1 -0
  463. package/dist/routes/handlers/base.d.ts +34 -0
  464. package/dist/routes/handlers/base.d.ts.map +1 -0
  465. package/dist/routes/handlers/base.js +366 -0
  466. package/dist/routes/handlers/base.js.map +1 -0
  467. package/dist/routes/handlers/config.d.ts +31 -0
  468. package/dist/routes/handlers/config.d.ts.map +1 -0
  469. package/dist/routes/handlers/config.js +483 -0
  470. package/dist/routes/handlers/config.js.map +1 -0
  471. package/dist/routes/handlers/documents.d.ts +50 -0
  472. package/dist/routes/handlers/documents.d.ts.map +1 -0
  473. package/dist/routes/handlers/documents.js +708 -0
  474. package/dist/routes/handlers/documents.js.map +1 -0
  475. package/dist/routes/handlers/index.d.ts +12 -0
  476. package/dist/routes/handlers/index.d.ts.map +1 -0
  477. package/dist/routes/handlers/index.js +11 -0
  478. package/dist/routes/handlers/index.js.map +1 -0
  479. package/dist/routes/handlers/media.d.ts +24 -0
  480. package/dist/routes/handlers/media.d.ts.map +1 -0
  481. package/dist/routes/handlers/media.js +432 -0
  482. package/dist/routes/handlers/media.js.map +1 -0
  483. package/dist/routes/handlers/search.d.ts +10 -0
  484. package/dist/routes/handlers/search.d.ts.map +1 -0
  485. package/dist/routes/handlers/search.js +153 -0
  486. package/dist/routes/handlers/search.js.map +1 -0
  487. package/dist/routes/handlers/tokens.d.ts +14 -0
  488. package/dist/routes/handlers/tokens.d.ts.map +1 -0
  489. package/dist/routes/handlers/tokens.js +109 -0
  490. package/dist/routes/handlers/tokens.js.map +1 -0
  491. package/dist/routes/handlers/types.d.ts +13 -0
  492. package/dist/routes/handlers/types.d.ts.map +1 -0
  493. package/dist/routes/handlers/types.js +5 -0
  494. package/dist/routes/handlers/types.js.map +1 -0
  495. package/dist/routes/handlers/users.d.ts +16 -0
  496. package/dist/routes/handlers/users.d.ts.map +1 -0
  497. package/dist/routes/handlers/users.js +198 -0
  498. package/dist/routes/handlers/users.js.map +1 -0
  499. package/dist/routes/handlers/webhooks.d.ts +37 -0
  500. package/dist/routes/handlers/webhooks.d.ts.map +1 -0
  501. package/dist/routes/handlers/webhooks.js +343 -0
  502. package/dist/routes/handlers/webhooks.js.map +1 -0
  503. package/dist/routes/index.d.ts +5 -0
  504. package/dist/routes/index.d.ts.map +1 -0
  505. package/dist/routes/index.js +5 -0
  506. package/dist/routes/index.js.map +1 -0
  507. package/dist/routes/routes.d.ts +29 -0
  508. package/dist/routes/routes.d.ts.map +1 -0
  509. package/dist/routes/routes.js +531 -0
  510. package/dist/routes/routes.js.map +1 -0
  511. package/dist/routes/slug-processor.d.ts +32 -0
  512. package/dist/routes/slug-processor.d.ts.map +1 -0
  513. package/dist/routes/slug-processor.js +328 -0
  514. package/dist/routes/slug-processor.js.map +1 -0
  515. package/dist/routes/types.d.ts +31 -0
  516. package/dist/routes/types.d.ts.map +1 -0
  517. package/dist/routes/types.js +7 -0
  518. package/dist/routes/types.js.map +1 -0
  519. package/dist/routes/users/index.d.ts +7 -0
  520. package/dist/routes/users/index.d.ts.map +1 -0
  521. package/dist/routes/users/index.js +7 -0
  522. package/dist/routes/users/index.js.map +1 -0
  523. package/dist/structure/builder/StructureBuilder.d.ts +209 -0
  524. package/dist/structure/builder/StructureBuilder.d.ts.map +1 -0
  525. package/dist/structure/builder/StructureBuilder.js +425 -0
  526. package/dist/structure/builder/StructureBuilder.js.map +1 -0
  527. package/dist/structure/builder/index.d.ts +8 -0
  528. package/dist/structure/builder/index.d.ts.map +1 -0
  529. package/dist/structure/builder/index.js +6 -0
  530. package/dist/structure/builder/index.js.map +1 -0
  531. package/dist/structure/builder/navigation-tree-builder.d.ts +33 -0
  532. package/dist/structure/builder/navigation-tree-builder.d.ts.map +1 -0
  533. package/dist/structure/builder/navigation-tree-builder.js +284 -0
  534. package/dist/structure/builder/navigation-tree-builder.js.map +1 -0
  535. package/dist/structure/errors/index.d.ts +72 -0
  536. package/dist/structure/errors/index.d.ts.map +1 -0
  537. package/dist/structure/errors/index.js +136 -0
  538. package/dist/structure/errors/index.js.map +1 -0
  539. package/dist/structure/index.d.ts +14 -0
  540. package/dist/structure/index.d.ts.map +1 -0
  541. package/dist/structure/index.js +16 -0
  542. package/dist/structure/index.js.map +1 -0
  543. package/dist/structure/types/filters.d.ts +167 -0
  544. package/dist/structure/types/filters.d.ts.map +1 -0
  545. package/dist/structure/types/filters.js +38 -0
  546. package/dist/structure/types/filters.js.map +1 -0
  547. package/dist/structure/types/index.d.ts +11 -0
  548. package/dist/structure/types/index.d.ts.map +1 -0
  549. package/dist/structure/types/index.js +7 -0
  550. package/dist/structure/types/index.js.map +1 -0
  551. package/dist/structure/types/permissions.d.ts +159 -0
  552. package/dist/structure/types/permissions.d.ts.map +1 -0
  553. package/dist/structure/types/permissions.js +49 -0
  554. package/dist/structure/types/permissions.js.map +1 -0
  555. package/dist/structure/types/structure.d.ts +342 -0
  556. package/dist/structure/types/structure.d.ts.map +1 -0
  557. package/dist/structure/types/structure.js +6 -0
  558. package/dist/structure/types/structure.js.map +1 -0
  559. package/dist/structure/types/views.d.ts +278 -0
  560. package/dist/structure/types/views.d.ts.map +1 -0
  561. package/dist/structure/types/views.js +6 -0
  562. package/dist/structure/types/views.js.map +1 -0
  563. package/dist/structure/utils/hash.d.ts +61 -0
  564. package/dist/structure/utils/hash.d.ts.map +1 -0
  565. package/dist/structure/utils/hash.js +118 -0
  566. package/dist/structure/utils/hash.js.map +1 -0
  567. package/dist/structure/utils/index.d.ts +10 -0
  568. package/dist/structure/utils/index.d.ts.map +1 -0
  569. package/dist/structure/utils/index.js +7 -0
  570. package/dist/structure/utils/index.js.map +1 -0
  571. package/dist/structure/utils/permission-checker.d.ts +57 -0
  572. package/dist/structure/utils/permission-checker.d.ts.map +1 -0
  573. package/dist/structure/utils/permission-checker.js +286 -0
  574. package/dist/structure/utils/permission-checker.js.map +1 -0
  575. package/dist/structure/utils/query-builder.d.ts +82 -0
  576. package/dist/structure/utils/query-builder.d.ts.map +1 -0
  577. package/dist/structure/utils/query-builder.js +489 -0
  578. package/dist/structure/utils/query-builder.js.map +1 -0
  579. package/dist/structure/utils/structure-merger.d.ts +91 -0
  580. package/dist/structure/utils/structure-merger.d.ts.map +1 -0
  581. package/dist/structure/utils/structure-merger.js +445 -0
  582. package/dist/structure/utils/structure-merger.js.map +1 -0
  583. package/dist/structure/validation/schemas.d.ts +3107 -0
  584. package/dist/structure/validation/schemas.d.ts.map +1 -0
  585. package/dist/structure/validation/schemas.js +436 -0
  586. package/dist/structure/validation/schemas.js.map +1 -0
  587. package/dist/types/api-requests.d.ts +334 -0
  588. package/dist/types/api-requests.d.ts.map +1 -0
  589. package/dist/types/api-requests.js +8 -0
  590. package/dist/types/api-requests.js.map +1 -0
  591. package/dist/types/auth.d.ts +394 -0
  592. package/dist/types/auth.d.ts.map +1 -0
  593. package/dist/types/auth.js +8 -0
  594. package/dist/types/auth.js.map +1 -0
  595. package/dist/types/document.d.ts +49 -0
  596. package/dist/types/document.d.ts.map +1 -0
  597. package/dist/types/document.js +6 -0
  598. package/dist/types/document.js.map +1 -0
  599. package/dist/types/field-system.d.ts +197 -0
  600. package/dist/types/field-system.d.ts.map +1 -0
  601. package/dist/types/field-system.js +8 -0
  602. package/dist/types/field-system.js.map +1 -0
  603. package/dist/types/fields.d.ts +17 -0
  604. package/dist/types/fields.d.ts.map +1 -0
  605. package/dist/types/fields.js +21 -0
  606. package/dist/types/fields.js.map +1 -0
  607. package/dist/types/http.d.ts +162 -0
  608. package/dist/types/http.d.ts.map +1 -0
  609. package/dist/types/http.js +8 -0
  610. package/dist/types/http.js.map +1 -0
  611. package/dist/types/i18n.d.ts +56 -0
  612. package/dist/types/i18n.d.ts.map +1 -0
  613. package/dist/types/i18n.js +25 -0
  614. package/dist/types/i18n.js.map +1 -0
  615. package/dist/types/index.d.ts +22 -0
  616. package/dist/types/index.d.ts.map +1 -0
  617. package/dist/types/index.js +10 -0
  618. package/dist/types/index.js.map +1 -0
  619. package/dist/types/mail.d.ts +224 -0
  620. package/dist/types/mail.d.ts.map +1 -0
  621. package/dist/types/mail.js +8 -0
  622. package/dist/types/mail.js.map +1 -0
  623. package/dist/types/media.d.ts +56 -0
  624. package/dist/types/media.d.ts.map +1 -0
  625. package/dist/types/media.js +6 -0
  626. package/dist/types/media.js.map +1 -0
  627. package/dist/types/oauth2.d.ts +287 -0
  628. package/dist/types/oauth2.d.ts.map +1 -0
  629. package/dist/types/oauth2.js +43 -0
  630. package/dist/types/oauth2.js.map +1 -0
  631. package/dist/types/passkey.d.ts +217 -0
  632. package/dist/types/passkey.d.ts.map +1 -0
  633. package/dist/types/passkey.js +8 -0
  634. package/dist/types/passkey.js.map +1 -0
  635. package/dist/types/slug.d.ts +99 -0
  636. package/dist/types/slug.d.ts.map +1 -0
  637. package/dist/types/slug.js +8 -0
  638. package/dist/types/slug.js.map +1 -0
  639. package/package.json +183 -0
@@ -0,0 +1,328 @@
1
+ import { createLogger } from '../core/index.js';
2
+ const logger = createLogger('routes', 'SlugProcessor');
3
+ /**
4
+ * Type-safe helper to get a number option from field or options
5
+ */
6
+ function getNumberOption(fieldValue, optionValue, defaultValue) {
7
+ if (typeof fieldValue === 'number' && !isNaN(fieldValue))
8
+ return fieldValue;
9
+ if (typeof optionValue === 'number' && !isNaN(optionValue))
10
+ return optionValue;
11
+ return defaultValue;
12
+ }
13
+ /**
14
+ * Type-safe helper to get a string option from field or options
15
+ */
16
+ function getStringOption(fieldValue, optionValue, defaultValue) {
17
+ if (typeof fieldValue === 'string')
18
+ return fieldValue;
19
+ if (typeof optionValue === 'string')
20
+ return optionValue;
21
+ return defaultValue;
22
+ }
23
+ /**
24
+ * Type-safe helper to get a boolean option from field or options
25
+ */
26
+ function getBooleanOption(fieldValue, optionValue, defaultValue) {
27
+ if (typeof fieldValue === 'boolean')
28
+ return fieldValue;
29
+ if (typeof optionValue === 'boolean')
30
+ return optionValue;
31
+ return defaultValue;
32
+ }
33
+ /**
34
+ * Unicode-aware slugify algorithm
35
+ * Replicates the client-side logic from @trokky/fields for server-side consistency
36
+ *
37
+ * Note: Character class regex is safe - user input (allowedChars) is properly escaped
38
+ */
39
+ export function defaultSlugify(input, options = {}) {
40
+ if (!input || typeof input !== 'string') {
41
+ return '';
42
+ }
43
+ const { preserveCase = false, allowedChars = '', allowSlashes = true, prefix = '', suffix = '' } = options;
44
+ let slug = input
45
+ .toString()
46
+ .normalize('NFD') // Normalize unicode characters (decompose)
47
+ .replace(/[\u0300-\u036f]/g, '') // Remove diacritical marks (accents)
48
+ .trim(); // Remove leading/trailing whitespace
49
+ // Convert to lowercase unless preserveCase is true
50
+ if (!preserveCase) {
51
+ slug = slug.toLowerCase();
52
+ }
53
+ // Build character class for allowed characters
54
+ const baseChars = preserveCase ? 'a-zA-Z0-9' : 'a-z0-9';
55
+ const slashChar = allowSlashes ? '\\/' : '';
56
+ // Escape special regex characters in allowedChars to prevent ReDoS
57
+ const escapedAllowedChars = allowedChars.replace(/[.*+?^${}()|[\]\\]/g, '\\$&');
58
+ const allowedPattern = `[^${baseChars}\\s\\-${slashChar}${escapedAllowedChars}]`;
59
+ slug = slug
60
+ .replace(new RegExp(allowedPattern, 'g'), '') // Remove invalid characters
61
+ .replace(/\s+/g, '-') // Replace spaces with hyphens
62
+ .replace(/-+/g, '-') // Replace multiple hyphens with single
63
+ .replace(/^-|-$/g, ''); // Remove leading/trailing hyphens
64
+ // Add prefix and suffix
65
+ if (prefix && slug) {
66
+ // Don't add separator if prefix already ends with one (/, -, etc.)
67
+ const needsSeparator = !prefix.endsWith('/') && !prefix.endsWith('-') && !slug.startsWith('-');
68
+ slug = prefix + (needsSeparator ? '-' : '') + slug;
69
+ }
70
+ if (suffix && slug) {
71
+ // Don't add separator if suffix already starts with one or slug ends with one
72
+ const needsSeparator = !suffix.startsWith('/') && !suffix.startsWith('-') && !slug.endsWith('-');
73
+ slug = slug + (needsSeparator ? '-' : '') + suffix;
74
+ }
75
+ return slug;
76
+ }
77
+ /**
78
+ * Get source field value for auto-generation
79
+ * Supports nested paths via dot notation (e.g., 'metadata.title')
80
+ */
81
+ export function getSourceValue(source, document) {
82
+ if (!source)
83
+ return '';
84
+ const sources = Array.isArray(source) ? source : [source];
85
+ for (const fieldPath of sources) {
86
+ if (!fieldPath || typeof fieldPath !== 'string')
87
+ continue;
88
+ const value = getNestedValue(document, fieldPath);
89
+ if (value && typeof value === 'string' && value.trim()) {
90
+ return value.trim();
91
+ }
92
+ }
93
+ return '';
94
+ }
95
+ /**
96
+ * Helper function to get nested object values safely
97
+ */
98
+ function getNestedValue(obj, path) {
99
+ if (!obj || typeof obj !== 'object')
100
+ return undefined;
101
+ if (!path || typeof path !== 'string')
102
+ return undefined;
103
+ return path.split('.').reduce((current, key) => {
104
+ return current && typeof current === 'object' && current[key] !== undefined
105
+ ? current[key]
106
+ : undefined;
107
+ }, obj);
108
+ }
109
+ /**
110
+ * Find all slug fields in a schema that have autoGenerate enabled
111
+ */
112
+ export function findAutoGenerateSlugFields(schema) {
113
+ const slugFields = [];
114
+ // Validate schema structure
115
+ if (!schema.fields || typeof schema.fields !== 'object') {
116
+ return slugFields;
117
+ }
118
+ for (const [fieldName, rawFieldDef] of Object.entries(schema.fields)) {
119
+ // Skip invalid field definitions
120
+ if (!rawFieldDef || typeof rawFieldDef !== 'object') {
121
+ continue;
122
+ }
123
+ // Cast to SchemaFieldDefinition to access field properties
124
+ const fieldDef = rawFieldDef;
125
+ if (fieldDef.type !== 'slug') {
126
+ continue;
127
+ }
128
+ // Safely access options object
129
+ const options = (fieldDef.options && typeof fieldDef.options === 'object')
130
+ ? fieldDef.options
131
+ : {};
132
+ // Check for source at field level first, then fall back to options
133
+ const source = fieldDef.source || options.source;
134
+ // Default autoGenerate to true unless explicitly set to false
135
+ const autoGenerate = getBooleanOption(fieldDef.autoGenerate, options.autoGenerate, true);
136
+ if (autoGenerate && source) {
137
+ slugFields.push({
138
+ fieldName,
139
+ source,
140
+ autoGenerate: true,
141
+ unique: getBooleanOption(fieldDef.unique, options.unique, true),
142
+ maxLength: getNumberOption(fieldDef.maxLength, options.maxLength, 200),
143
+ minLength: getNumberOption(fieldDef.minLength, options.minLength, 1),
144
+ preserveCase: getBooleanOption(fieldDef.preserveCase, options.preserveCase, false),
145
+ allowedChars: getStringOption(fieldDef.allowedChars, options.allowedChars, ''),
146
+ allowSlashes: getBooleanOption(fieldDef.allowSlashes, options.allowSlashes, true),
147
+ prefix: getStringOption(fieldDef.prefix, options.prefix, ''),
148
+ suffix: getStringOption(fieldDef.suffix, options.suffix, '')
149
+ });
150
+ }
151
+ }
152
+ return slugFields;
153
+ }
154
+ /**
155
+ * Get a document's id, supporting adapters that return `id` and/or `_id`
156
+ */
157
+ function getDocId(doc) {
158
+ const record = doc;
159
+ const id = record?.id ?? record?._id;
160
+ return typeof id === 'string' ? id : undefined;
161
+ }
162
+ /**
163
+ * Check if a slug is unique within a collection
164
+ *
165
+ * @requires Storage adapter must support filtering by arbitrary fields via listDocuments
166
+ */
167
+ async function isSlugUnique(core, collection, slug, excludeId) {
168
+ const documents = await core.listDocuments(collection, {
169
+ filter: { slug }
170
+ });
171
+ // Filter out the current document if updating
172
+ const conflictingDocs = excludeId
173
+ ? documents.filter(doc => getDocId(doc) !== excludeId)
174
+ : documents;
175
+ return conflictingDocs.length === 0;
176
+ }
177
+ /**
178
+ * Escape special regex characters in a string
179
+ */
180
+ function escapeRegExp(str) {
181
+ return str.replace(/[.*+?^${}()|[\]\\]/g, '\\$&');
182
+ }
183
+ /**
184
+ * Generate a unique slug by appending numbers if conflicts exist
185
+ *
186
+ * Optimized to query all matching slugs once instead of making N+1 queries.
187
+ *
188
+ * @param core - TrokkyCore instance
189
+ * @param collection - Collection name
190
+ * @param baseSlug - Base slug to make unique
191
+ * @param excludeId - Document ID to exclude (for updates)
192
+ * @param maxAttempts - Maximum number of attempts before throwing error
193
+ */
194
+ async function generateUniqueSlug(core, collection, baseSlug, excludeId, maxAttempts = 100) {
195
+ // First check if base slug is available (common case)
196
+ if (await isSlugUnique(core, collection, baseSlug, excludeId)) {
197
+ return baseSlug;
198
+ }
199
+ logger.debug('Base slug taken, finding unique variant', { baseSlug, collection });
200
+ // Get all documents in collection to find existing numbered variants
201
+ // This is more efficient than making individual queries for each candidate
202
+ const allDocs = await core.listDocuments(collection, {});
203
+ // Build regex to match baseSlug and baseSlug-N patterns
204
+ const escapedBase = escapeRegExp(baseSlug);
205
+ const pattern = new RegExp(`^${escapedBase}(?:-([0-9]+))?$`);
206
+ // Extract existing numbers from matching slugs
207
+ const existingNumbers = new Set();
208
+ existingNumbers.add(1); // Base slug (no suffix) counts as "1"
209
+ for (const doc of allDocs) {
210
+ if (excludeId && getDocId(doc) === excludeId)
211
+ continue;
212
+ const docSlug = doc.slug;
213
+ if (typeof docSlug !== 'string')
214
+ continue;
215
+ const match = docSlug.match(pattern);
216
+ if (match) {
217
+ // If it's baseSlug-N, add N; if it's just baseSlug, add 1
218
+ const num = match[1] ? parseInt(match[1], 10) : 1;
219
+ if (!isNaN(num)) {
220
+ existingNumbers.add(num);
221
+ }
222
+ }
223
+ }
224
+ // Find first available number starting from 2
225
+ for (let counter = 2; counter <= maxAttempts + 1; counter++) {
226
+ if (!existingNumbers.has(counter)) {
227
+ const uniqueSlug = `${baseSlug}-${counter}`;
228
+ logger.debug('Generated unique slug', { baseSlug, uniqueSlug, counter });
229
+ return uniqueSlug;
230
+ }
231
+ }
232
+ throw new Error(`Could not generate unique slug after ${maxAttempts} attempts`);
233
+ }
234
+ /**
235
+ * Process document data to auto-generate slug fields
236
+ * This should be called before saving a document
237
+ *
238
+ * Note on maxLength: The limit is applied AFTER prefix/suffix are added.
239
+ * E.g., maxLength=20, prefix="blog", slug="hello-world" yields "blog-hello-world" (17 chars)
240
+ *
241
+ * Note on race conditions: If two concurrent requests create documents with the same title,
242
+ * both might get the same slug. For production use, consider adding a unique constraint
243
+ * at the database/storage adapter level.
244
+ */
245
+ export async function processSlugFields(core, collection, data, existingDocumentId) {
246
+ const schema = core.getSchema(collection);
247
+ if (!schema) {
248
+ logger.debug('No schema found, skipping slug processing', { collection });
249
+ return data; // No schema found, return data as-is
250
+ }
251
+ const slugFields = findAutoGenerateSlugFields(schema);
252
+ if (slugFields.length === 0) {
253
+ return data; // No slug fields to process
254
+ }
255
+ logger.debug('Processing slug fields', {
256
+ collection,
257
+ fieldCount: slugFields.length,
258
+ hasExistingId: !!existingDocumentId
259
+ });
260
+ const processedData = { ...data };
261
+ for (const slugField of slugFields) {
262
+ // Validate field name
263
+ if (!slugField.fieldName || typeof slugField.fieldName !== 'string') {
264
+ continue;
265
+ }
266
+ const currentValue = processedData[slugField.fieldName];
267
+ // Only auto-generate if the field is empty or not provided
268
+ if (currentValue && typeof currentValue === 'string' && currentValue.trim() !== '') {
269
+ // Slug already provided, skip auto-generation
270
+ // But still check uniqueness if required
271
+ if (slugField.unique) {
272
+ const isUnique = await isSlugUnique(core, collection, currentValue, existingDocumentId);
273
+ if (!isUnique) {
274
+ logger.debug('Provided slug not unique, generating variant', {
275
+ field: slugField.fieldName,
276
+ slug: currentValue
277
+ });
278
+ // Generate unique variant
279
+ processedData[slugField.fieldName] = await generateUniqueSlug(core, collection, currentValue, existingDocumentId);
280
+ }
281
+ }
282
+ continue;
283
+ }
284
+ // Get source value for generation
285
+ const sourceValue = getSourceValue(slugField.source, processedData);
286
+ if (!sourceValue) {
287
+ logger.debug('No source value available, skipping slug generation', {
288
+ field: slugField.fieldName,
289
+ source: slugField.source
290
+ });
291
+ // No source value available, can't auto-generate
292
+ continue;
293
+ }
294
+ // Generate the slug
295
+ const baseSlug = defaultSlugify(sourceValue, {
296
+ preserveCase: slugField.preserveCase,
297
+ allowedChars: slugField.allowedChars,
298
+ allowSlashes: slugField.allowSlashes,
299
+ prefix: slugField.prefix,
300
+ suffix: slugField.suffix
301
+ });
302
+ if (!baseSlug) {
303
+ logger.debug('Slugification resulted in empty string', {
304
+ field: slugField.fieldName,
305
+ sourceValue
306
+ });
307
+ // Slugification resulted in empty string
308
+ continue;
309
+ }
310
+ // Apply length limits (after prefix/suffix)
311
+ let finalSlug = baseSlug;
312
+ if (slugField.maxLength && finalSlug.length > slugField.maxLength) {
313
+ finalSlug = finalSlug.slice(0, slugField.maxLength).replace(/-+$/, '');
314
+ }
315
+ // Ensure uniqueness if required
316
+ if (slugField.unique) {
317
+ finalSlug = await generateUniqueSlug(core, collection, finalSlug, existingDocumentId);
318
+ }
319
+ logger.debug('Slug generated', {
320
+ field: slugField.fieldName,
321
+ sourceValue,
322
+ slug: finalSlug
323
+ });
324
+ processedData[slugField.fieldName] = finalSlug;
325
+ }
326
+ return processedData;
327
+ }
328
+ //# sourceMappingURL=slug-processor.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"slug-processor.js","sourceRoot":"","sources":["../../src/routes/slug-processor.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,31 @@
1
+ /**
2
+ * Route types for Trokky
3
+ *
4
+ * Types are now centralized in @trokky/types and re-exported here for backwards compatibility.
5
+ */
6
+ import type { TrokkyCore } from '../core/index.js';
7
+ export type { HttpMethod, HttpRequest, HttpResponse, RouteHandler, RouteDefinition, StaticRouteConfig, CorsOptions, RateLimitOptions, AuthenticationOptions, ApiResponse, FrameworkAdapter } from '../types/index.js';
8
+ export type { ListDocumentsRequest, CreateDocumentRequest, UpdateDocumentRequest, GetDocumentRequest, DeleteDocumentRequest, UploadMediaRequest, GetMediaRequest, DeleteMediaRequest, ListUsersRequest, CreateUserRequest, UpdateUserRequest, GetUserRequest, DeleteUserRequest, GetUserByUsernameRequest, GetUserByEmailRequest, LoginRequest, LoginResponse, LogoutRequest, ValidateTokenRequest, RefreshTokenRequest, CheckSlugUniquenessRequest, CheckSlugUniquenessResponse, WebhookRetryPolicy, ListWebhooksRequest, CreateWebhookRequest, UpdateWebhookRequest, GetWebhookRequest, DeleteWebhookRequest, GetWebhookDeliveriesRequest, TestWebhookRequest } from '../types/index.js';
9
+ import type { HttpRequest, StaticRouteConfig, CorsOptions, RateLimitOptions, AuthenticationOptions } from '../types/index.js';
10
+ export interface RoutesConfig {
11
+ core: TrokkyCore;
12
+ basePath?: string;
13
+ corsOptions?: CorsOptions;
14
+ rateLimiting?: RateLimitOptions;
15
+ authentication?: AuthenticationOptions;
16
+ staticRoutes?: {
17
+ media?: StaticRouteConfig;
18
+ assets?: StaticRouteConfig;
19
+ [key: string]: StaticRouteConfig | undefined;
20
+ };
21
+ /** Studio configuration (passed from integration, avoids globals) */
22
+ studioConfig?: any;
23
+ /** Structure configuration (passed from integration, avoids globals) */
24
+ structureConfig?: any;
25
+ }
26
+ export interface RouteContext {
27
+ core: TrokkyCore;
28
+ config: RoutesConfig;
29
+ request: HttpRequest;
30
+ }
31
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/routes/types.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAA;AAGlD,YAAY,EACV,UAAU,EACV,WAAW,EACX,YAAY,EACZ,YAAY,EACZ,eAAe,EACf,iBAAiB,EACjB,WAAW,EACX,gBAAgB,EAChB,qBAAqB,EACrB,WAAW,EACX,gBAAgB,EACjB,MAAM,mBAAmB,CAAA;AAG1B,YAAY,EACV,oBAAoB,EACpB,qBAAqB,EACrB,qBAAqB,EACrB,kBAAkB,EAClB,qBAAqB,EACrB,kBAAkB,EAClB,eAAe,EACf,kBAAkB,EAClB,gBAAgB,EAChB,iBAAiB,EACjB,iBAAiB,EACjB,cAAc,EACd,iBAAiB,EACjB,wBAAwB,EACxB,qBAAqB,EACrB,YAAY,EACZ,aAAa,EACb,aAAa,EACb,oBAAoB,EACpB,mBAAmB,EACnB,0BAA0B,EAC1B,2BAA2B,EAC3B,kBAAkB,EAClB,mBAAmB,EACnB,oBAAoB,EACpB,oBAAoB,EACpB,iBAAiB,EACjB,oBAAoB,EACpB,2BAA2B,EAC3B,kBAAkB,EACnB,MAAM,mBAAmB,CAAA;AAG1B,OAAO,KAAK,EACV,WAAW,EACX,iBAAiB,EACjB,WAAW,EACX,gBAAgB,EAChB,qBAAqB,EACtB,MAAM,mBAAmB,CAAA;AAG1B,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,UAAU,CAAA;IAChB,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,WAAW,CAAC,EAAE,WAAW,CAAA;IACzB,YAAY,CAAC,EAAE,gBAAgB,CAAA;IAC/B,cAAc,CAAC,EAAE,qBAAqB,CAAA;IACtC,YAAY,CAAC,EAAE;QACb,KAAK,CAAC,EAAE,iBAAiB,CAAA;QACzB,MAAM,CAAC,EAAE,iBAAiB,CAAA;QAC1B,CAAC,GAAG,EAAE,MAAM,GAAG,iBAAiB,GAAG,SAAS,CAAA;KAC7C,CAAA;IACD,qEAAqE;IACrE,YAAY,CAAC,EAAE,GAAG,CAAA;IAClB,wEAAwE;IACxE,eAAe,CAAC,EAAE,GAAG,CAAA;CACtB;AAGD,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,UAAU,CAAA;IAChB,MAAM,EAAE,YAAY,CAAA;IACpB,OAAO,EAAE,WAAW,CAAA;CACrB"}
@@ -0,0 +1,7 @@
1
+ /**
2
+ * Route types for Trokky
3
+ *
4
+ * Types are now centralized in @trokky/types and re-exported here for backwards compatibility.
5
+ */
6
+ export {};
7
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/routes/types.ts"],"names":[],"mappings":"AAAA;;;;GAIG"}
@@ -0,0 +1,7 @@
1
+ export {};
2
+ /**
3
+ * User Management Routes
4
+ *
5
+ * Export user-related route handlers
6
+ */
7
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/routes/users/index.ts"],"names":[],"mappings":";AAAA;;;;GAIG"}
@@ -0,0 +1,7 @@
1
+ export {};
2
+ /**
3
+ * User Management Routes
4
+ *
5
+ * Export user-related route handlers
6
+ */
7
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/routes/users/index.ts"],"names":[],"mappings":";AAAA;;;;GAIG"}
@@ -0,0 +1,209 @@
1
+ /**
2
+ * Structure Builder
3
+ * Main class for building, validating, and processing structure configurations
4
+ */
5
+ import { SchemaRegistry, User } from '../../core/index.js';
6
+ import type { TrokkyStructure, StructureItem, DocumentListItem, ResolvedQuery, QueryContext } from '../types/index.js';
7
+ import { CountService } from './navigation-tree-builder.js';
8
+ /**
9
+ * Structure builder options
10
+ */
11
+ export interface StructureBuilderOptions {
12
+ /** Enable query optimization */
13
+ enableOptimization?: boolean;
14
+ /** Enable caching */
15
+ enableCaching?: boolean;
16
+ /** Default cache TTL (ms) */
17
+ defaultCacheTTL?: number;
18
+ /** Maximum query complexity */
19
+ maxQueryComplexity?: number;
20
+ /** Enable permission inheritance */
21
+ enablePermissionInheritance?: boolean;
22
+ /** Count service for badge counting */
23
+ countService?: CountService;
24
+ }
25
+ /**
26
+ * Validation result
27
+ */
28
+ export interface ValidationResult {
29
+ /** Validation success flag */
30
+ isValid: boolean;
31
+ /** Validation errors */
32
+ errors: ValidationError[];
33
+ /** Validation warnings */
34
+ warnings: ValidationWarning[];
35
+ /** Performance suggestions */
36
+ suggestions?: string[];
37
+ }
38
+ /**
39
+ * Validation error
40
+ */
41
+ export interface ValidationError {
42
+ /** Error path */
43
+ path: string;
44
+ /** Error message */
45
+ message: string;
46
+ /** Error code */
47
+ code: string;
48
+ /** Error context */
49
+ context?: any;
50
+ }
51
+ /**
52
+ * Validation warning
53
+ */
54
+ export interface ValidationWarning {
55
+ /** Warning path */
56
+ path: string;
57
+ /** Warning message */
58
+ message: string;
59
+ /** Warning code */
60
+ code: string;
61
+ }
62
+ /**
63
+ * Navigation tree
64
+ */
65
+ export interface NavigationTree {
66
+ /** Tree items */
67
+ items: NavigationItem[];
68
+ /** Tree metadata */
69
+ metadata: {
70
+ totalItems: number;
71
+ maxDepth: number;
72
+ permissions: PermissionSummary;
73
+ };
74
+ }
75
+ /**
76
+ * Navigation item
77
+ */
78
+ export interface NavigationItem {
79
+ /** Item ID */
80
+ id: string;
81
+ /** Display title */
82
+ title: string;
83
+ /** Item type */
84
+ type: string;
85
+ /** Icon */
86
+ icon?: string;
87
+ /** Badge */
88
+ badge?: BadgeInfo;
89
+ /** Child items */
90
+ children?: NavigationItem[];
91
+ /** Route/path */
92
+ path?: string;
93
+ /** Permissions */
94
+ permissions: PermissionSummary;
95
+ /** Metadata */
96
+ metadata?: any;
97
+ }
98
+ /**
99
+ * Permission summary
100
+ */
101
+ export interface PermissionSummary {
102
+ /** Can read */
103
+ canRead: boolean;
104
+ /** Can create */
105
+ canCreate: boolean;
106
+ /** Can update */
107
+ canUpdate: boolean;
108
+ /** Can delete */
109
+ canDelete: boolean;
110
+ /** Custom permissions */
111
+ custom?: Record<string, boolean>;
112
+ /** Effective role */
113
+ effectiveRole?: string;
114
+ }
115
+ /**
116
+ * Badge info
117
+ */
118
+ export interface BadgeInfo {
119
+ /** Badge text */
120
+ text: string;
121
+ /** Badge color */
122
+ color: string;
123
+ /** Badge count */
124
+ count?: number;
125
+ }
126
+ /**
127
+ * Generation options
128
+ */
129
+ export interface GenerationOptions {
130
+ /** Group by field */
131
+ groupBy?: 'category' | 'type' | 'none';
132
+ /** Default views */
133
+ defaultViews?: string[];
134
+ /** Include workflow states */
135
+ includeWorkflowStates?: boolean;
136
+ /** Exclude types */
137
+ excludeTypes?: string[];
138
+ /** Custom views for specific types */
139
+ customViews?: Record<string, string[]>;
140
+ /** Auto-generate permissions */
141
+ autoPermissions?: boolean;
142
+ }
143
+ /**
144
+ * Main StructureBuilder class
145
+ */
146
+ export declare class StructureBuilder {
147
+ private schemaRegistry;
148
+ private options;
149
+ private permissionChecker;
150
+ private queryBuilder;
151
+ private navigationBuilder;
152
+ private structureMerger;
153
+ private cache;
154
+ constructor(schemaRegistry: SchemaRegistry, options?: StructureBuilderOptions);
155
+ /**
156
+ * Validate structure configuration
157
+ */
158
+ validate(structure: TrokkyStructure): ValidationResult;
159
+ /**
160
+ * Build navigation tree for Studio
161
+ */
162
+ buildNavigation(structure: TrokkyStructure, user?: User): Promise<NavigationTree>;
163
+ /**
164
+ * Resolve queries for a structure item
165
+ */
166
+ resolveQuery(item: DocumentListItem, context?: QueryContext): Promise<ResolvedQuery>;
167
+ /**
168
+ * Check permissions for current user
169
+ */
170
+ checkPermissions(item: StructureItem, action: 'read' | 'create' | 'update' | 'delete', user?: User, context?: any): Promise<boolean>;
171
+ /**
172
+ * Merge multiple structure configurations
173
+ */
174
+ merge(...structures: TrokkyStructure[]): TrokkyStructure;
175
+ /**
176
+ * Generate structure from schemas
177
+ */
178
+ generateFromSchemas(options?: GenerationOptions): TrokkyStructure;
179
+ /**
180
+ * Optimize structure for performance
181
+ */
182
+ optimize(structure: TrokkyStructure): TrokkyStructure;
183
+ /**
184
+ * Clear cache
185
+ */
186
+ clearCache(): void;
187
+ /**
188
+ * Get cache statistics
189
+ */
190
+ getCacheStats(): {
191
+ size: number;
192
+ keys: string[];
193
+ };
194
+ private validateSemantics;
195
+ private validateSchemaTypes;
196
+ private validatePermissions;
197
+ private validatePerformance;
198
+ private collectIds;
199
+ private checkEmptyGroups;
200
+ private checkQueryComplexity;
201
+ private checkDefaultViews;
202
+ private calculateMaxDepth;
203
+ private groupSchemasByCategory;
204
+ private formatCategoryTitle;
205
+ private getCategoryIcon;
206
+ private createDocumentListItem;
207
+ private optimizeItems;
208
+ }
209
+ //# sourceMappingURL=StructureBuilder.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"StructureBuilder.d.ts","sourceRoot":"","sources":["../../../src/structure/builder/StructureBuilder.ts"],"names":[],"mappings":"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"}