@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,126 @@
1
+ /**
2
+ * Sharp Image Processor - Completely Isolated Module
3
+ *
4
+ * This file is NEVER imported statically. Only loaded dynamically
5
+ * when 'sharp' processor is explicitly requested.
6
+ *
7
+ * Perfect for:
8
+ * - Node.js server environments
9
+ * - Self-hosted deployments
10
+ * - Development with immediate processing
11
+ */
12
+ import { ImageProcessor } from './types.js';
13
+ import { createLogger } from '../../utils/logger.js';
14
+ /**
15
+ * Sharp processor for local image processing
16
+ */
17
+ export class SharpImageProcessor extends ImageProcessor {
18
+ sharp;
19
+ logger = createLogger('media', 'SharpImageProcessor');
20
+ constructor(config) {
21
+ super(config);
22
+ // Sharp will be initialized lazily when first used
23
+ }
24
+ async ensureSharpInitialized() {
25
+ if (!this.sharp) {
26
+ try {
27
+ // Dynamic import to avoid issues in edge environments
28
+ const sharpModule = await import('sharp');
29
+ this.sharp = sharpModule.default || sharpModule;
30
+ }
31
+ catch (error) {
32
+ throw new Error('Sharp is not installed. Run: npm install sharp\n' +
33
+ 'Note: Sharp is only supported in Node.js environments, not in edge runtimes like Cloudflare Workers.');
34
+ }
35
+ }
36
+ }
37
+ async processImage(file, metadata) {
38
+ await this.ensureSharpInitialized();
39
+ // Convert File to Buffer
40
+ const arrayBuffer = await file.arrayBuffer();
41
+ const buffer = Buffer.from(arrayBuffer);
42
+ // Get original image metadata
43
+ const originalSharp = this.sharp(buffer);
44
+ const originalMetadata = await originalSharp.metadata();
45
+ const original = {
46
+ url: this.getImageUrl(metadata.id, 'original'),
47
+ width: originalMetadata.width || 0,
48
+ height: originalMetadata.height || 0,
49
+ format: originalMetadata.format || 'unknown',
50
+ size: file.size
51
+ // No buffer for original - it's already saved by the storage adapter
52
+ };
53
+ const variants = {};
54
+ // Process each variant
55
+ for (const variant of this.config.variants || []) {
56
+ try {
57
+ let sharpInstance = this.sharp(buffer);
58
+ // Apply transformations
59
+ if (variant.width || variant.height) {
60
+ const resizeOptions = {};
61
+ if (variant.fit) {
62
+ resizeOptions.fit = variant.fit;
63
+ }
64
+ sharpInstance = sharpInstance.resize(variant.width, variant.height, resizeOptions);
65
+ }
66
+ // Set output format and quality
67
+ if (variant.format) {
68
+ switch (variant.format) {
69
+ case 'jpeg':
70
+ sharpInstance = sharpInstance.jpeg({ quality: variant.quality || 80 });
71
+ break;
72
+ case 'png':
73
+ sharpInstance = sharpInstance.png({ quality: variant.quality || 80 });
74
+ break;
75
+ case 'webp':
76
+ sharpInstance = sharpInstance.webp({ quality: variant.quality || 80 });
77
+ break;
78
+ case 'avif':
79
+ sharpInstance = sharpInstance.avif({ quality: variant.quality || 80 });
80
+ break;
81
+ }
82
+ }
83
+ // Get processed image info
84
+ const processedBuffer = await sharpInstance.toBuffer({ resolveWithObject: true });
85
+ variants[variant.name] = {
86
+ url: this.getImageUrl(metadata.id, variant.name),
87
+ width: processedBuffer.info.width,
88
+ height: processedBuffer.info.height,
89
+ format: processedBuffer.info.format,
90
+ size: processedBuffer.data.length,
91
+ buffer: processedBuffer.data // Store buffer for saving
92
+ };
93
+ }
94
+ catch (error) {
95
+ this.logger.warn('Failed to process variant', { variantName: variant.name, error });
96
+ }
97
+ }
98
+ return { original, variants };
99
+ }
100
+ getImageUrl(imageId, variantName) {
101
+ if (!variantName || variantName === 'original') {
102
+ return `/media/${imageId}`;
103
+ }
104
+ return `/media/${imageId}/${variantName}`;
105
+ }
106
+ async deleteImage(imageId) {
107
+ // TODO: Delete all variant files from storage
108
+ // This would integrate with the storage adapter to delete variant files
109
+ return;
110
+ }
111
+ async healthCheck() {
112
+ try {
113
+ await this.ensureSharpInitialized();
114
+ // Test Sharp by creating a simple 1x1 image
115
+ await this.sharp({
116
+ create: { width: 1, height: 1, channels: 3, background: { r: 0, g: 0, b: 0 } }
117
+ }).png().toBuffer();
118
+ return true;
119
+ }
120
+ catch (error) {
121
+ this.logger.error('Sharp health check failed', error);
122
+ return false;
123
+ }
124
+ }
125
+ }
126
+ //# sourceMappingURL=sharp.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sharp.js","sourceRoot":"","sources":["../../../../src/core/media/processors/sharp.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,EACL,cAAc,EAIf,MAAM,YAAY,CAAA;AACnB,OAAO,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAA;AAKpD;;GAEG;AACH,MAAM,OAAO,mBAAoB,SAAQ,cAAc;IAC7C,KAAK,CAAe;IACpB,MAAM,GAAG,YAAY,CAAC,OAAO,EAAE,qBAAqB,CAAC,CAAA;IAE7D,YAAY,MAA4B;QACtC,KAAK,CAAC,MAAM,CAAC,CAAA;QACb,mDAAmD;IACrD,CAAC;IAEO,KAAK,CAAC,sBAAsB;QAClC,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC;YAChB,IAAI,CAAC;gBACH,sDAAsD;gBACtD,MAAM,WAAW,GAAG,MAAM,MAAM,CAAC,OAAO,CAAC,CAAA;gBACzC,IAAI,CAAC,KAAK,GAAG,WAAW,CAAC,OAAO,IAAI,WAAW,CAAA;YACjD,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,MAAM,IAAI,KAAK,CACb,kDAAkD;oBAClD,sGAAsG,CACvG,CAAA;YACH,CAAC;QACH,CAAC;IACH,CAAC;IAED,KAAK,CAAC,YAAY,CAChB,IAAU,EACV,QAAwD;QAExD,MAAM,IAAI,CAAC,sBAAsB,EAAE,CAAA;QAEnC,yBAAyB;QACzB,MAAM,WAAW,GAAG,MAAM,IAAI,CAAC,WAAW,EAAE,CAAA;QAC5C,MAAM,MAAM,GAAG,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,CAAA;QAEvC,8BAA8B;QAC9B,MAAM,aAAa,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAA;QACxC,MAAM,gBAAgB,GAAG,MAAM,aAAa,CAAC,QAAQ,EAAE,CAAA;QAEvD,MAAM,QAAQ,GAA0B;YACtC,GAAG,EAAE,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,EAAE,EAAE,UAAU,CAAC;YAC9C,KAAK,EAAE,gBAAgB,CAAC,KAAK,IAAI,CAAC;YAClC,MAAM,EAAE,gBAAgB,CAAC,MAAM,IAAI,CAAC;YACpC,MAAM,EAAE,gBAAgB,CAAC,MAAM,IAAI,SAAS;YAC5C,IAAI,EAAE,IAAI,CAAC,IAAI;YACf,qEAAqE;SACtE,CAAA;QAED,MAAM,QAAQ,GAA0C,EAAE,CAAA;QAE1D,uBAAuB;QACvB,KAAK,MAAM,OAAO,IAAI,IAAI,CAAC,MAAM,CAAC,QAAQ,IAAI,EAAE,EAAE,CAAC;YACjD,IAAI,CAAC;gBACH,IAAI,aAAa,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAA;gBAEtC,wBAAwB;gBACxB,IAAI,OAAO,CAAC,KAAK,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;oBACpC,MAAM,aAAa,GAAQ,EAAE,CAAA;oBAE7B,IAAI,OAAO,CAAC,GAAG,EAAE,CAAC;wBAChB,aAAa,CAAC,GAAG,GAAG,OAAO,CAAC,GAAG,CAAA;oBACjC,CAAC;oBAED,aAAa,GAAG,aAAa,CAAC,MAAM,CAAC,OAAO,CAAC,KAAK,EAAE,OAAO,CAAC,MAAM,EAAE,aAAa,CAAC,CAAA;gBACpF,CAAC;gBAED,gCAAgC;gBAChC,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;oBACnB,QAAQ,OAAO,CAAC,MAAM,EAAE,CAAC;wBACvB,KAAK,MAAM;4BACT,aAAa,GAAG,aAAa,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,OAAO,CAAC,OAAO,IAAI,EAAE,EAAE,CAAC,CAAA;4BACtE,MAAK;wBACP,KAAK,KAAK;4BACR,aAAa,GAAG,aAAa,CAAC,GAAG,CAAC,EAAE,OAAO,EAAE,OAAO,CAAC,OAAO,IAAI,EAAE,EAAE,CAAC,CAAA;4BACrE,MAAK;wBACP,KAAK,MAAM;4BACT,aAAa,GAAG,aAAa,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,OAAO,CAAC,OAAO,IAAI,EAAE,EAAE,CAAC,CAAA;4BACtE,MAAK;wBACP,KAAK,MAAM;4BACT,aAAa,GAAG,aAAa,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,OAAO,CAAC,OAAO,IAAI,EAAE,EAAE,CAAC,CAAA;4BACtE,MAAK;oBACT,CAAC;gBACH,CAAC;gBAED,2BAA2B;gBAC3B,MAAM,eAAe,GAAG,MAAM,aAAa,CAAC,QAAQ,CAAC,EAAE,iBAAiB,EAAE,IAAI,EAAE,CAAC,CAAA;gBAEjF,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG;oBACvB,GAAG,EAAE,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,EAAE,EAAE,OAAO,CAAC,IAAI,CAAC;oBAChD,KAAK,EAAE,eAAe,CAAC,IAAI,CAAC,KAAK;oBACjC,MAAM,EAAE,eAAe,CAAC,IAAI,CAAC,MAAM;oBACnC,MAAM,EAAE,eAAe,CAAC,IAAI,CAAC,MAAM;oBACnC,IAAI,EAAE,eAAe,CAAC,IAAI,CAAC,MAAM;oBACjC,MAAM,EAAE,eAAe,CAAC,IAAI,CAAC,0BAA0B;iBACxD,CAAA;YAEH,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,2BAA2B,EAAE,EAAE,WAAW,EAAE,OAAO,CAAC,IAAI,EAAE,KAAK,EAAE,CAAC,CAAA;YACrF,CAAC;QACH,CAAC;QAED,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,CAAA;IAC/B,CAAC;IAED,WAAW,CAAC,OAAe,EAAE,WAAoB;QAC/C,IAAI,CAAC,WAAW,IAAI,WAAW,KAAK,UAAU,EAAE,CAAC;YAC/C,OAAO,UAAU,OAAO,EAAE,CAAA;QAC5B,CAAC;QACD,OAAO,UAAU,OAAO,IAAI,WAAW,EAAE,CAAA;IAC3C,CAAC;IAED,KAAK,CAAC,WAAW,CAAC,OAAe;QAC/B,8CAA8C;QAC9C,wEAAwE;QACxE,OAAM;IACR,CAAC;IAED,KAAK,CAAC,WAAW;QACf,IAAI,CAAC;YACH,MAAM,IAAI,CAAC,sBAAsB,EAAE,CAAA;YACnC,4CAA4C;YAC5C,MAAM,IAAI,CAAC,KAAK,CAAC;gBACf,MAAM,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,QAAQ,EAAE,CAAC,EAAE,UAAU,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE;aAC/E,CAAC,CAAC,GAAG,EAAE,CAAC,QAAQ,EAAE,CAAA;YACnB,OAAO,IAAI,CAAA;QACb,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,2BAA2B,EAAE,KAAK,CAAC,CAAA;YACrD,OAAO,KAAK,CAAA;QACd,CAAC;IACH,CAAC;CACF"}
@@ -0,0 +1,67 @@
1
+ /**
2
+ * Shared types for all image processors
3
+ */
4
+ export interface ImageVariant {
5
+ name: string;
6
+ width?: number;
7
+ height?: number;
8
+ format?: 'jpeg' | 'png' | 'webp' | 'avif';
9
+ quality?: number;
10
+ fit?: 'cover' | 'contain' | 'fill' | 'inside' | 'outside';
11
+ }
12
+ export interface ProcessedImageVariant {
13
+ url: string;
14
+ width: number;
15
+ height: number;
16
+ format: string;
17
+ size: number;
18
+ buffer?: Buffer | null;
19
+ }
20
+ export interface ProcessedImage {
21
+ original: ProcessedImageVariant;
22
+ variants: Record<string, ProcessedImageVariant>;
23
+ }
24
+ export interface ImageProcessorConfig {
25
+ type: 'none' | 'sharp' | 'cloudflare-images' | 'cloudflare-transformations' | 'cloudflare-transform-store' | 'workers-images' | 'imagekit' | 'imgix' | 'custom';
26
+ variants?: ImageVariant[];
27
+ options?: Record<string, unknown>;
28
+ }
29
+ /**
30
+ * Base interface for all image processors
31
+ */
32
+ export declare abstract class ImageProcessor {
33
+ protected config: ImageProcessorConfig;
34
+ constructor(config: ImageProcessorConfig);
35
+ /**
36
+ * Process an uploaded image file
37
+ * @param file - The uploaded file
38
+ * @param metadata - File metadata from storage
39
+ * @returns Processed image with variants
40
+ */
41
+ abstract processImage(file: File, metadata: {
42
+ id: string;
43
+ filename: string;
44
+ path: string;
45
+ }): Promise<ProcessedImage>;
46
+ /**
47
+ * Generate URL for a specific variant
48
+ * @param imageId - The image ID
49
+ * @param variantName - The variant name (or 'original')
50
+ * @returns URL to the image variant
51
+ */
52
+ abstract getImageUrl(imageId: string, variantName?: string): string;
53
+ /**
54
+ * Delete all variants of an image
55
+ * @param imageId - The image ID
56
+ */
57
+ abstract deleteImage(imageId: string): Promise<void>;
58
+ /**
59
+ * Health check for the processor
60
+ */
61
+ abstract healthCheck(): Promise<boolean>;
62
+ }
63
+ /**
64
+ * Default image variants for common use cases
65
+ */
66
+ export declare const DEFAULT_IMAGE_VARIANTS: ImageVariant[];
67
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../src/core/media/processors/types.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,MAAM,CAAA;IACZ,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,MAAM,CAAC,EAAE,MAAM,GAAG,KAAK,GAAG,MAAM,GAAG,MAAM,CAAA;IACzC,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,GAAG,CAAC,EAAE,OAAO,GAAG,SAAS,GAAG,MAAM,GAAG,QAAQ,GAAG,SAAS,CAAA;CAC1D;AAED,MAAM,WAAW,qBAAqB;IACpC,GAAG,EAAE,MAAM,CAAA;IACX,KAAK,EAAE,MAAM,CAAA;IACb,MAAM,EAAE,MAAM,CAAA;IACd,MAAM,EAAE,MAAM,CAAA;IACd,IAAI,EAAE,MAAM,CAAA;IACZ,MAAM,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;CACvB;AAED,MAAM,WAAW,cAAc;IAC7B,QAAQ,EAAE,qBAAqB,CAAA;IAC/B,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,qBAAqB,CAAC,CAAA;CAChD;AAED,MAAM,WAAW,oBAAoB;IACnC,IAAI,EAAE,MAAM,GAAG,OAAO,GAAG,mBAAmB,GAAG,4BAA4B,GAAG,4BAA4B,GAAG,gBAAgB,GAAG,UAAU,GAAG,OAAO,GAAG,QAAQ,CAAA;IAC/J,QAAQ,CAAC,EAAE,YAAY,EAAE,CAAA;IACzB,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;CAClC;AAED;;GAEG;AACH,8BAAsB,cAAc;IAClC,SAAS,CAAC,MAAM,EAAE,oBAAoB,CAAA;gBAE1B,MAAM,EAAE,oBAAoB;IAIxC;;;;;OAKG;IACH,QAAQ,CAAC,YAAY,CACnB,IAAI,EAAE,IAAI,EACV,QAAQ,EAAE;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,GACvD,OAAO,CAAC,cAAc,CAAC;IAE1B;;;;;OAKG;IACH,QAAQ,CAAC,WAAW,CAAC,OAAO,EAAE,MAAM,EAAE,WAAW,CAAC,EAAE,MAAM,GAAG,MAAM;IAEnE;;;OAGG;IACH,QAAQ,CAAC,WAAW,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAEpD;;OAEG;IACH,QAAQ,CAAC,WAAW,IAAI,OAAO,CAAC,OAAO,CAAC;CACzC;AAED;;GAEG;AACH,eAAO,MAAM,sBAAsB,EAAE,YAAY,EAyBhD,CAAA"}
@@ -0,0 +1,42 @@
1
+ /**
2
+ * Shared types for all image processors
3
+ */
4
+ /**
5
+ * Base interface for all image processors
6
+ */
7
+ export class ImageProcessor {
8
+ config;
9
+ constructor(config) {
10
+ this.config = config;
11
+ }
12
+ }
13
+ /**
14
+ * Default image variants for common use cases
15
+ */
16
+ export const DEFAULT_IMAGE_VARIANTS = [
17
+ {
18
+ name: 'thumbnail',
19
+ width: 200,
20
+ height: 200,
21
+ format: 'webp',
22
+ quality: 80,
23
+ fit: 'cover'
24
+ },
25
+ {
26
+ name: 'preview',
27
+ width: 800,
28
+ height: 600,
29
+ format: 'webp',
30
+ quality: 85,
31
+ fit: 'inside'
32
+ },
33
+ {
34
+ name: 'large',
35
+ width: 1200,
36
+ height: 1200,
37
+ format: 'webp',
38
+ quality: 90,
39
+ fit: 'inside'
40
+ }
41
+ ];
42
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../../../src/core/media/processors/types.ts"],"names":[],"mappings":"AAAA;;GAEG;AA+BH;;GAEG;AACH,MAAM,OAAgB,cAAc;IACxB,MAAM,CAAsB;IAEtC,YAAY,MAA4B;QACtC,IAAI,CAAC,MAAM,GAAG,MAAM,CAAA;IACtB,CAAC;CA+BF;AAED;;GAEG;AACH,MAAM,CAAC,MAAM,sBAAsB,GAAmB;IACpD;QACE,IAAI,EAAE,WAAW;QACjB,KAAK,EAAE,GAAG;QACV,MAAM,EAAE,GAAG;QACX,MAAM,EAAE,MAAM;QACd,OAAO,EAAE,EAAE;QACX,GAAG,EAAE,OAAO;KACb;IACD;QACE,IAAI,EAAE,SAAS;QACf,KAAK,EAAE,GAAG;QACV,MAAM,EAAE,GAAG;QACX,MAAM,EAAE,MAAM;QACd,OAAO,EAAE,EAAE;QACX,GAAG,EAAE,QAAQ;KACd;IACD;QACE,IAAI,EAAE,OAAO;QACb,KAAK,EAAE,IAAI;QACX,MAAM,EAAE,IAAI;QACZ,MAAM,EAAE,MAAM;QACd,OAAO,EAAE,EAAE;QACX,GAAG,EAAE,QAAQ;KACd;CACF,CAAA"}
@@ -0,0 +1,112 @@
1
+ /**
2
+ * Cloudflare Workers Images Processor
3
+ *
4
+ * Uses Cloudflare Workers' built-in image resizing to transform and store images.
5
+ * This is the recommended approach for Cloudflare Workers as it works seamlessly
6
+ * with R2 storage and doesn't require external API calls.
7
+ *
8
+ * How it works:
9
+ * 1. Fetch original image from R2
10
+ * 2. Use Workers fetch() with image resizing options
11
+ * 3. Store transformed variants back in R2
12
+ * 4. Return R2 URLs for all variants
13
+ *
14
+ * Requirements:
15
+ * - Cloudflare Workers with image resizing enabled
16
+ * - R2 bucket for storage
17
+ * - Your worker must serve images from a route
18
+ *
19
+ * Documentation: https://developers.cloudflare.com/images/image-resizing/resize-with-workers/
20
+ */
21
+ import { ImageProcessor } from './types.js';
22
+ import type { ImageProcessorConfig, ProcessedImage } from './types.js';
23
+ export interface WorkersImagesConfig extends ImageProcessorConfig {
24
+ type: 'workers-images';
25
+ options: {
26
+ /**
27
+ * Base URL where your worker serves images
28
+ * Example: 'https://your-worker.workers.dev' or 'https://yourdomain.com'
29
+ */
30
+ baseUrl: string;
31
+ /**
32
+ * Path prefix for media files
33
+ * Example: '/media'
34
+ */
35
+ mediaPath?: string;
36
+ /**
37
+ * Whether to store variants with a flat structure
38
+ * true: /media/[id]-thumbnail.webp
39
+ * false: /media/[id]/thumbnail.webp
40
+ */
41
+ flatStructure?: boolean;
42
+ /**
43
+ * Default format for variants
44
+ */
45
+ defaultFormat?: 'webp' | 'avif' | 'jpeg' | 'png';
46
+ /**
47
+ * Default quality (1-100)
48
+ */
49
+ defaultQuality?: number;
50
+ /**
51
+ * Whether to process variants immediately or on-demand
52
+ * immediate: Process and store all variants during upload
53
+ * on-demand: Generate variants when first requested
54
+ */
55
+ processingMode?: 'immediate' | 'on-demand';
56
+ };
57
+ }
58
+ /**
59
+ * Workers Images processor using built-in Cloudflare Workers image resizing
60
+ */
61
+ export declare class WorkersImagesProcessor extends ImageProcessor {
62
+ private baseUrl;
63
+ private mediaPath;
64
+ private flatStructure;
65
+ private defaultFormat;
66
+ private defaultQuality;
67
+ private processingMode;
68
+ private env?;
69
+ constructor(config: WorkersImagesConfig);
70
+ /**
71
+ * Set the Worker environment (includes R2 binding)
72
+ */
73
+ setEnv(env: any): void;
74
+ processImage(file: File, metadata: {
75
+ id: string;
76
+ filename: string;
77
+ path: string;
78
+ }): Promise<ProcessedImage>;
79
+ /**
80
+ * Transform an image using Workers fetch with resizing options
81
+ */
82
+ private transformImage;
83
+ /**
84
+ * Build resize options for Cloudflare Workers
85
+ */
86
+ private buildResizeOptions;
87
+ /**
88
+ * Create an on-demand variant URL (transformation happens when accessed)
89
+ */
90
+ private createOnDemandVariant;
91
+ /**
92
+ * Get the storage key for a variant
93
+ */
94
+ private getVariantKey;
95
+ /**
96
+ * Store a variant in R2
97
+ */
98
+ private storeVariant;
99
+ /**
100
+ * Get the URL for a specific variant
101
+ */
102
+ getImageUrl(imageId: string, variantName?: string): string;
103
+ /**
104
+ * Delete image and all variants
105
+ */
106
+ deleteImage(imageId: string): Promise<void>;
107
+ /**
108
+ * Health check
109
+ */
110
+ healthCheck(): Promise<boolean>;
111
+ }
112
+ //# sourceMappingURL=workers-images.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"workers-images.d.ts","sourceRoot":"","sources":["../../../../src/core/media/processors/workers-images.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG;AAEH,OAAO,EAAE,cAAc,EAAE,MAAM,YAAY,CAAA;AAC3C,OAAO,KAAK,EAAE,oBAAoB,EAAgB,cAAc,EAAyB,MAAM,YAAY,CAAA;AAK3G,MAAM,WAAW,mBAAoB,SAAQ,oBAAoB;IAC/D,IAAI,EAAE,gBAAgB,CAAA;IACtB,OAAO,EAAE;QACP;;;WAGG;QACH,OAAO,EAAE,MAAM,CAAA;QAEf;;;WAGG;QACH,SAAS,CAAC,EAAE,MAAM,CAAA;QAElB;;;;WAIG;QACH,aAAa,CAAC,EAAE,OAAO,CAAA;QAEvB;;WAEG;QACH,aAAa,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,MAAM,GAAG,KAAK,CAAA;QAEhD;;WAEG;QACH,cAAc,CAAC,EAAE,MAAM,CAAA;QAEvB;;;;WAIG;QACH,cAAc,CAAC,EAAE,WAAW,GAAG,WAAW,CAAA;KAC3C,CAAA;CACF;AAED;;GAEG;AACH,qBAAa,sBAAuB,SAAQ,cAAc;IACxD,OAAO,CAAC,OAAO,CAAQ;IACvB,OAAO,CAAC,SAAS,CAAQ;IACzB,OAAO,CAAC,aAAa,CAAS;IAC9B,OAAO,CAAC,aAAa,CAAQ;IAC7B,OAAO,CAAC,cAAc,CAAQ;IAC9B,OAAO,CAAC,cAAc,CAA2B;IACjD,OAAO,CAAC,GAAG,CAAC,CAAK;gBAEL,MAAM,EAAE,mBAAmB;IAoBvC;;OAEG;IACH,MAAM,CAAC,GAAG,EAAE,GAAG,GAAG,IAAI;IAIhB,YAAY,CAChB,IAAI,EAAE,IAAI,EACV,QAAQ,EAAE;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,GACvD,OAAO,CAAC,cAAc,CAAC;IAyC1B;;OAEG;YACW,cAAc;IAgD5B;;OAEG;IACH,OAAO,CAAC,kBAAkB;IAgC1B;;OAEG;IACH,OAAO,CAAC,qBAAqB;IAqB7B;;OAEG;IACH,OAAO,CAAC,aAAa;IASrB;;OAEG;YACW,YAAY;IAwB1B;;OAEG;IACI,WAAW,CAAC,OAAO,EAAE,MAAM,EAAE,WAAW,CAAC,EAAE,MAAM,GAAG,MAAM;IAqBjE;;OAEG;IACU,WAAW,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAmBxD;;OAEG;IACU,WAAW,IAAI,OAAO,CAAC,OAAO,CAAC;CAG7C"}
@@ -0,0 +1,257 @@
1
+ /**
2
+ * Cloudflare Workers Images Processor
3
+ *
4
+ * Uses Cloudflare Workers' built-in image resizing to transform and store images.
5
+ * This is the recommended approach for Cloudflare Workers as it works seamlessly
6
+ * with R2 storage and doesn't require external API calls.
7
+ *
8
+ * How it works:
9
+ * 1. Fetch original image from R2
10
+ * 2. Use Workers fetch() with image resizing options
11
+ * 3. Store transformed variants back in R2
12
+ * 4. Return R2 URLs for all variants
13
+ *
14
+ * Requirements:
15
+ * - Cloudflare Workers with image resizing enabled
16
+ * - R2 bucket for storage
17
+ * - Your worker must serve images from a route
18
+ *
19
+ * Documentation: https://developers.cloudflare.com/images/image-resizing/resize-with-workers/
20
+ */
21
+ import { ImageProcessor } from './types.js';
22
+ import { createLogger } from '../../utils/logger.js';
23
+ const logger = createLogger('media', 'WorkersImages');
24
+ /**
25
+ * Workers Images processor using built-in Cloudflare Workers image resizing
26
+ */
27
+ export class WorkersImagesProcessor extends ImageProcessor {
28
+ baseUrl;
29
+ mediaPath;
30
+ flatStructure;
31
+ defaultFormat;
32
+ defaultQuality;
33
+ processingMode;
34
+ env;
35
+ constructor(config) {
36
+ super(config);
37
+ const { baseUrl, mediaPath, flatStructure, defaultFormat, defaultQuality, processingMode } = config.options;
38
+ this.baseUrl = baseUrl.replace(/\/$/, ''); // Remove trailing slash
39
+ this.mediaPath = mediaPath || '/media';
40
+ this.flatStructure = flatStructure !== false; // Default to true
41
+ this.defaultFormat = defaultFormat || 'webp';
42
+ this.defaultQuality = defaultQuality || 85;
43
+ this.processingMode = processingMode || 'immediate';
44
+ }
45
+ /**
46
+ * Set the Worker environment (includes R2 binding)
47
+ */
48
+ setEnv(env) {
49
+ this.env = env;
50
+ }
51
+ async processImage(file, metadata) {
52
+ const buffer = await file.arrayBuffer();
53
+ const variants = {};
54
+ // Original image info - use the /file endpoint
55
+ const original = {
56
+ url: `${this.baseUrl}${this.mediaPath}/${metadata.id}/file`,
57
+ width: 0,
58
+ height: 0,
59
+ format: file.type.split('/')[1] || 'jpeg',
60
+ size: file.size,
61
+ buffer: Buffer.from(buffer)
62
+ };
63
+ if (this.processingMode === 'immediate') {
64
+ // Process all variants immediately
65
+ for (const variant of this.config.variants || []) {
66
+ try {
67
+ const transformedData = await this.transformImage(metadata.id, buffer, variant);
68
+ variants[variant.name] = transformedData;
69
+ }
70
+ catch (error) {
71
+ logger.error('Failed to process variant', { variantName: variant.name, error });
72
+ // Create a URL-only variant as fallback
73
+ variants[variant.name] = this.createOnDemandVariant(metadata.id, variant);
74
+ }
75
+ }
76
+ }
77
+ else {
78
+ // Create on-demand URLs for all variants
79
+ for (const variant of this.config.variants || []) {
80
+ variants[variant.name] = this.createOnDemandVariant(metadata.id, variant);
81
+ }
82
+ }
83
+ return { original, variants };
84
+ }
85
+ /**
86
+ * Transform an image using Workers fetch with resizing options
87
+ */
88
+ async transformImage(imageId, imageBuffer, variant) {
89
+ // Build the resize options for Cloudflare Workers
90
+ const resizeOptions = this.buildResizeOptions(variant);
91
+ // Construct the URL with transformation parameters
92
+ // Use the /file endpoint to get the actual file content
93
+ const originalUrl = `${this.baseUrl}${this.mediaPath}/${imageId}/file`;
94
+ const variantUrl = `${originalUrl}?${new URLSearchParams(resizeOptions).toString()}`;
95
+ try {
96
+ // Use Workers fetch with cf.image options
97
+ // @ts-ignore - cf property is Cloudflare-specific
98
+ const response = await fetch(originalUrl, {
99
+ cf: {
100
+ image: resizeOptions
101
+ }
102
+ });
103
+ if (!response.ok) {
104
+ throw new Error(`Image transformation failed: ${response.status}`);
105
+ }
106
+ const transformedBuffer = await response.arrayBuffer();
107
+ // Store the variant if we have R2 access
108
+ if (this.env?.R2) {
109
+ const variantKey = this.getVariantKey(imageId, variant.name);
110
+ await this.storeVariant(variantKey, Buffer.from(transformedBuffer), variant);
111
+ }
112
+ return {
113
+ url: variantUrl,
114
+ width: variant.width || 0,
115
+ height: variant.height || 0,
116
+ format: variant.format || this.defaultFormat,
117
+ size: transformedBuffer.byteLength,
118
+ buffer: Buffer.from(transformedBuffer)
119
+ };
120
+ }
121
+ catch (error) {
122
+ logger.error('Transformation failed, using on-demand URL', error);
123
+ return this.createOnDemandVariant(imageId, variant);
124
+ }
125
+ }
126
+ /**
127
+ * Build resize options for Cloudflare Workers
128
+ */
129
+ buildResizeOptions(variant) {
130
+ const options = {};
131
+ // Dimensions
132
+ if (variant.width) {
133
+ options.width = variant.width;
134
+ }
135
+ if (variant.height) {
136
+ options.height = variant.height;
137
+ }
138
+ // Fit mode
139
+ if (variant.fit) {
140
+ const fitMap = {
141
+ 'cover': 'cover',
142
+ 'contain': 'contain',
143
+ 'fill': 'scale-down',
144
+ 'inside': 'pad',
145
+ 'outside': 'crop'
146
+ };
147
+ options.fit = fitMap[variant.fit] || variant.fit;
148
+ }
149
+ // Format
150
+ options.format = variant.format || this.defaultFormat;
151
+ // Quality
152
+ options.quality = variant.quality || this.defaultQuality;
153
+ return options;
154
+ }
155
+ /**
156
+ * Create an on-demand variant URL (transformation happens when accessed)
157
+ */
158
+ createOnDemandVariant(imageId, variant) {
159
+ const params = new URLSearchParams();
160
+ if (variant.width)
161
+ params.set('width', variant.width.toString());
162
+ if (variant.height)
163
+ params.set('height', variant.height.toString());
164
+ if (variant.fit)
165
+ params.set('fit', variant.fit);
166
+ params.set('format', variant.format || this.defaultFormat);
167
+ params.set('quality', (variant.quality || this.defaultQuality).toString());
168
+ const variantUrl = `${this.baseUrl}${this.mediaPath}/${imageId}?${params.toString()}`;
169
+ return {
170
+ url: variantUrl,
171
+ width: variant.width || 0,
172
+ height: variant.height || 0,
173
+ format: variant.format || this.defaultFormat,
174
+ size: 0, // Unknown until transformed
175
+ buffer: null // No buffer for on-demand variants
176
+ };
177
+ }
178
+ /**
179
+ * Get the storage key for a variant
180
+ */
181
+ getVariantKey(imageId, variantName) {
182
+ const format = this.defaultFormat;
183
+ if (this.flatStructure) {
184
+ return `${imageId}-${variantName}.${format}`;
185
+ }
186
+ else {
187
+ return `${imageId}/${variantName}.${format}`;
188
+ }
189
+ }
190
+ /**
191
+ * Store a variant in R2
192
+ */
193
+ async storeVariant(key, buffer, variant) {
194
+ if (!this.env?.R2) {
195
+ return;
196
+ }
197
+ const fullKey = `${this.mediaPath}/${key}`.replace(/^\//, '');
198
+ const contentType = `image/${variant.format || this.defaultFormat}`;
199
+ try {
200
+ await this.env.R2.put(fullKey, buffer, {
201
+ httpMetadata: {
202
+ contentType,
203
+ cacheControl: 'public, max-age=31536000' // 1 year cache
204
+ }
205
+ });
206
+ }
207
+ catch (error) {
208
+ logger.error('Failed to store variant', { key, error });
209
+ }
210
+ }
211
+ /**
212
+ * Get the URL for a specific variant
213
+ */
214
+ getImageUrl(imageId, variantName) {
215
+ if (!variantName || variantName === 'original') {
216
+ return `${this.baseUrl}${this.mediaPath}/${imageId}/file`;
217
+ }
218
+ // Find the variant configuration
219
+ const variant = this.config.variants?.find(v => v.name === variantName);
220
+ if (!variant) {
221
+ return `${this.baseUrl}${this.mediaPath}/${imageId}`;
222
+ }
223
+ // For immediate processing, return the stored variant URL
224
+ if (this.processingMode === 'immediate') {
225
+ const variantKey = this.getVariantKey(imageId, variantName);
226
+ return `${this.baseUrl}${this.mediaPath}/${variantKey}`;
227
+ }
228
+ // For on-demand, return URL with transformation parameters
229
+ return this.createOnDemandVariant(imageId, variant).url;
230
+ }
231
+ /**
232
+ * Delete image and all variants
233
+ */
234
+ async deleteImage(imageId) {
235
+ if (!this.env?.R2) {
236
+ return;
237
+ }
238
+ // Delete original
239
+ const originalKey = `${this.mediaPath}/${imageId}`.replace(/^\//, '');
240
+ await this.env.R2.delete(originalKey);
241
+ // Delete all stored variants
242
+ if (this.processingMode === 'immediate') {
243
+ for (const variant of this.config.variants || []) {
244
+ const variantKey = this.getVariantKey(imageId, variant.name);
245
+ const fullKey = `${this.mediaPath}/${variantKey}`.replace(/^\//, '');
246
+ await this.env.R2.delete(fullKey);
247
+ }
248
+ }
249
+ }
250
+ /**
251
+ * Health check
252
+ */
253
+ async healthCheck() {
254
+ return true;
255
+ }
256
+ }
257
+ //# sourceMappingURL=workers-images.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"workers-images.js","sourceRoot":"","sources":["../../../../src/core/media/processors/workers-images.ts"],"names":[],"mappings":"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"}