nextly 0.0.1 → 0.0.2-alpha.1

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 (268) hide show
  1. package/LICENSE +22 -0
  2. package/README.md +122 -0
  3. package/dist/_dts-chunks/collections-handler.d-DjgO74Wt.d.ts +20540 -0
  4. package/dist/_dts-chunks/config.d-DNwsDnjs.d.ts +2589 -0
  5. package/dist/_dts-chunks/define-component.d-BUgTHmt3.d.ts +1149 -0
  6. package/dist/_dts-chunks/image-processor.d-OO1PmMrv.d.ts +335 -0
  7. package/dist/_dts-chunks/index.d-axCAzZ7m.d.ts +17842 -0
  8. package/dist/_dts-chunks/media.d-DjDOZo4B.d.ts +117 -0
  9. package/dist/_dts-chunks/on-error.d-CHIKWNxd.d.ts +38 -0
  10. package/dist/_dts-chunks/storage.d-BUhQ2we_.d.ts +404 -0
  11. package/dist/actions/index.d.ts +239 -0
  12. package/dist/actions/index.mjs +281 -0
  13. package/dist/api/auth-state.d.ts +5 -0
  14. package/dist/api/auth-state.mjs +131 -0
  15. package/dist/api/collections-schema-detail.d.ts +56 -0
  16. package/dist/api/collections-schema-detail.mjs +244 -0
  17. package/dist/api/collections-schema-export.d.ts +56 -0
  18. package/dist/api/collections-schema-export.mjs +129 -0
  19. package/dist/api/collections-schema.d.ts +59 -0
  20. package/dist/api/collections-schema.mjs +207 -0
  21. package/dist/api/components-detail.d.ts +50 -0
  22. package/dist/api/components-detail.mjs +132 -0
  23. package/dist/api/components.d.ts +69 -0
  24. package/dist/api/components.mjs +144 -0
  25. package/dist/api/email-providers-default.d.ts +40 -0
  26. package/dist/api/email-providers-default.mjs +75 -0
  27. package/dist/api/email-providers-detail.d.ts +81 -0
  28. package/dist/api/email-providers-detail.mjs +109 -0
  29. package/dist/api/email-providers-test.d.ts +43 -0
  30. package/dist/api/email-providers-test.mjs +114 -0
  31. package/dist/api/email-providers.d.ts +69 -0
  32. package/dist/api/email-providers.mjs +110 -0
  33. package/dist/api/email-send-template.d.ts +41 -0
  34. package/dist/api/email-send-template.mjs +58 -0
  35. package/dist/api/email-send.d.ts +42 -0
  36. package/dist/api/email-send.mjs +58 -0
  37. package/dist/api/email-templates-detail.d.ts +74 -0
  38. package/dist/api/email-templates-detail.mjs +112 -0
  39. package/dist/api/email-templates-layout.d.ts +55 -0
  40. package/dist/api/email-templates-layout.mjs +92 -0
  41. package/dist/api/email-templates-preview.d.ts +48 -0
  42. package/dist/api/email-templates-preview.mjs +93 -0
  43. package/dist/api/email-templates.d.ts +61 -0
  44. package/dist/api/email-templates.mjs +118 -0
  45. package/dist/api/health.d.ts +68 -0
  46. package/dist/api/health.mjs +67 -0
  47. package/dist/api/index.d.ts +54 -0
  48. package/dist/api/index.mjs +16 -0
  49. package/dist/api/media-bulk.d.ts +74 -0
  50. package/dist/api/media-bulk.mjs +196 -0
  51. package/dist/api/media-folders.d.ts +112 -0
  52. package/dist/api/media-folders.mjs +187 -0
  53. package/dist/api/media-handlers.d.ts +102 -0
  54. package/dist/api/media-handlers.mjs +437 -0
  55. package/dist/api/media.d.ts +117 -0
  56. package/dist/api/media.mjs +242 -0
  57. package/dist/api/singles-detail.d.ts +87 -0
  58. package/dist/api/singles-detail.mjs +170 -0
  59. package/dist/api/singles-schema-detail.d.ts +54 -0
  60. package/dist/api/singles-schema-detail.mjs +182 -0
  61. package/dist/api/singles.d.ts +34 -0
  62. package/dist/api/singles.mjs +94 -0
  63. package/dist/api/storage-upload-url.d.ts +48 -0
  64. package/dist/api/storage-upload-url.mjs +202 -0
  65. package/dist/api/uploads.d.ts +109 -0
  66. package/dist/api/uploads.mjs +359 -0
  67. package/dist/auth/index.d.ts +425 -0
  68. package/dist/auth/index.mjs +199 -0
  69. package/dist/boot-apply-PQSYLDIN.mjs +7 -0
  70. package/dist/chunk-2OALJTK6.mjs +489 -0
  71. package/dist/chunk-2Q2SX2CS.mjs +365 -0
  72. package/dist/chunk-2TFX4ND3.mjs +13 -0
  73. package/dist/chunk-2TWPDSYD.mjs +87 -0
  74. package/dist/chunk-2W3DVD7S.mjs +647 -0
  75. package/dist/chunk-2ZFKXPQM.mjs +88 -0
  76. package/dist/chunk-3FA7FKAV.mjs +832 -0
  77. package/dist/chunk-3NZ2KMBL.mjs +58 -0
  78. package/dist/chunk-4MJLT6PZ.mjs +0 -0
  79. package/dist/chunk-56WO4WX7.mjs +0 -0
  80. package/dist/chunk-5APFUGAD.mjs +89 -0
  81. package/dist/chunk-5HMZ644B.mjs +108 -0
  82. package/dist/chunk-67GXH6PR.mjs +32 -0
  83. package/dist/chunk-6JNEPWRW.mjs +14368 -0
  84. package/dist/chunk-6NFHQIJD.mjs +45 -0
  85. package/dist/chunk-7P6ASYW6.mjs +9 -0
  86. package/dist/chunk-A3WPLSDT.mjs +1364 -0
  87. package/dist/chunk-AGJ6F2T3.mjs +144 -0
  88. package/dist/chunk-AK6Z23OX.mjs +1464 -0
  89. package/dist/chunk-APKKRD2G.mjs +102 -0
  90. package/dist/chunk-B2GV2BWH.mjs +73 -0
  91. package/dist/chunk-D5HQBNUB.mjs +74 -0
  92. package/dist/chunk-DNNG377Z.mjs +204 -0
  93. package/dist/chunk-DP3G27G5.mjs +135 -0
  94. package/dist/chunk-DV6WVX2Q.mjs +0 -0
  95. package/dist/chunk-DXGGXIUZ.mjs +57 -0
  96. package/dist/chunk-EGXBZCGC.mjs +943 -0
  97. package/dist/chunk-ERCNLX3V.mjs +176 -0
  98. package/dist/chunk-FQULBZ53.mjs +850 -0
  99. package/dist/chunk-G2AA4QLC.mjs +262 -0
  100. package/dist/chunk-GDBJ5JCU.mjs +488 -0
  101. package/dist/chunk-GJNSJU4S.mjs +19 -0
  102. package/dist/chunk-GZ6DCQKC.mjs +69 -0
  103. package/dist/chunk-H26B4FYG.mjs +167 -0
  104. package/dist/chunk-I4JMR3UR.mjs +21 -0
  105. package/dist/chunk-INV7QKLG.mjs +508 -0
  106. package/dist/chunk-IUDOC7N7.mjs +46 -0
  107. package/dist/chunk-IZWPRDC3.mjs +206 -0
  108. package/dist/chunk-KIMNCZGV.mjs +15 -0
  109. package/dist/chunk-L6HW2DA7.mjs +15 -0
  110. package/dist/chunk-LAZXX4HR.mjs +100 -0
  111. package/dist/chunk-LDKCUMHK.mjs +95 -0
  112. package/dist/chunk-LRXMECUA.mjs +0 -0
  113. package/dist/chunk-M52VMPGA.mjs +119 -0
  114. package/dist/chunk-MGUWEEI6.mjs +160 -0
  115. package/dist/chunk-NRUWQ5Z7.mjs +419 -0
  116. package/dist/chunk-NSEFNNU4.mjs +25360 -0
  117. package/dist/chunk-NTHVDFGO.mjs +138 -0
  118. package/dist/chunk-O3QHXMOX.mjs +3166 -0
  119. package/dist/chunk-P7NH2OSC.mjs +2605 -0
  120. package/dist/chunk-PKMABBB5.mjs +184 -0
  121. package/dist/chunk-PWS6XGJK.mjs +76 -0
  122. package/dist/chunk-R6JJQHFC.mjs +20 -0
  123. package/dist/chunk-RJLLGGPG.mjs +0 -0
  124. package/dist/chunk-SBACDPNX.mjs +689 -0
  125. package/dist/chunk-TO5AFLVQ.mjs +124 -0
  126. package/dist/chunk-TS7GHTG2.mjs +5436 -0
  127. package/dist/chunk-UJ2IMJ4W.mjs +133 -0
  128. package/dist/chunk-UOP63Q54.mjs +102 -0
  129. package/dist/chunk-UUOFWCM6.mjs +78 -0
  130. package/dist/chunk-V4EQTOA4.mjs +893 -0
  131. package/dist/chunk-VJ66NCL4.mjs +193 -0
  132. package/dist/chunk-VQJQHVEV.mjs +29 -0
  133. package/dist/chunk-VTJADRO3.mjs +141 -0
  134. package/dist/chunk-VWF3JO32.mjs +0 -0
  135. package/dist/chunk-W4MGXIRR.mjs +27 -0
  136. package/dist/chunk-W5KKPZT5.mjs +1204 -0
  137. package/dist/chunk-WD34YQ6T.mjs +381 -0
  138. package/dist/chunk-WZBYMYVW.mjs +14 -0
  139. package/dist/chunk-X23WKS3Z.mjs +50 -0
  140. package/dist/chunk-X7TXCYYN.mjs +6496 -0
  141. package/dist/chunk-XGI4EMS3.mjs +140 -0
  142. package/dist/chunk-XZKLBMN6.mjs +1153 -0
  143. package/dist/chunk-YB7INWPY.mjs +0 -0
  144. package/dist/chunk-YV4Y7SDL.mjs +83 -0
  145. package/dist/chunk-YZNBLFIW.mjs +1688 -0
  146. package/dist/chunk-YZZCTONM.mjs +263 -0
  147. package/dist/chunk-ZE6A3FYH.mjs +289 -0
  148. package/dist/cli/nextly.mjs +68 -0
  149. package/dist/cli/utils/index.d.ts +449 -0
  150. package/dist/cli/utils/index.mjs +49 -0
  151. package/dist/component-schema-service-5577KVW6.mjs +11 -0
  152. package/dist/config-loader-23YEMC3Z.mjs +23 -0
  153. package/dist/config.d.ts +44 -0
  154. package/dist/config.mjs +109 -0
  155. package/dist/container-ORGFGYSZ.mjs +9 -0
  156. package/dist/database/index.d.ts +12 -0
  157. package/dist/database/index.mjs +40 -0
  158. package/dist/database/seeders/index.d.ts +93 -0
  159. package/dist/database/seeders/index.mjs +47 -0
  160. package/dist/db-sync-demote-LJGKLB3S.mjs +117 -0
  161. package/dist/db-sync-promote-B26VSYQF.mjs +113 -0
  162. package/dist/dev-reload-broadcaster-B73IQ53V.mjs +25 -0
  163. package/dist/dist-M2NOU37V.mjs +19 -0
  164. package/dist/drizzle-kit-lazy-D2M2PXR2.mjs +13 -0
  165. package/dist/dynamic-collection-schema-service-IEXTPIZ7.mjs +8 -0
  166. package/dist/errors/index.d.ts +159 -0
  167. package/dist/errors/index.mjs +10 -0
  168. package/dist/factory-IWMBKUJM.mjs +15 -0
  169. package/dist/first-run-QIVKWJIF.mjs +63 -0
  170. package/dist/fresh-push-NR67DC3R.mjs +8 -0
  171. package/dist/index.d.ts +4175 -0
  172. package/dist/index.mjs +1336 -0
  173. package/dist/local-plugin-PTET4NAT.mjs +7 -0
  174. package/dist/logger-NU46DXNY.mjs +15 -0
  175. package/dist/logger-YE4TC7ZN.mjs +9 -0
  176. package/dist/migration-journal-EP532Y4L.mjs +139 -0
  177. package/dist/migrations/mysql/0000_eager_sentry.sql +174 -0
  178. package/dist/migrations/mysql/0001_soft_giant_girl.sql +27 -0
  179. package/dist/migrations/mysql/0002_media_table.sql +24 -0
  180. package/dist/migrations/mysql/0003_dynamic_singles.sql +37 -0
  181. package/dist/migrations/mysql/0004_dynamic_components.sql +35 -0
  182. package/dist/migrations/mysql/0005_user_management_tables.sql +92 -0
  183. package/dist/migrations/mysql/0006_api_keys.sql +36 -0
  184. package/dist/migrations/mysql/0007_general_settings.sql +20 -0
  185. package/dist/migrations/mysql/0008_site_settings_logo_url.sql +9 -0
  186. package/dist/migrations/mysql/0009_activity_log.sql +30 -0
  187. package/dist/migrations/mysql/0010_site_settings_sidebar.sql +13 -0
  188. package/dist/migrations/mysql/0011_missing_tables_and_columns.sql +54 -0
  189. package/dist/migrations/mysql/0012_image_sizes_and_focal_point.sql +30 -0
  190. package/dist/migrations/mysql/0012_media_folders.sql +43 -0
  191. package/dist/migrations/mysql/0013_user_brute_force_protection.sql +31 -0
  192. package/dist/migrations/mysql/0014_email_template_attachments.sql +12 -0
  193. package/dist/migrations/mysql/0015_media_uploaded_by_nullable.sql +15 -0
  194. package/dist/migrations/mysql/20260429_000000_000_initial_journal.sql +22 -0
  195. package/dist/migrations/mysql/20260501_000000_journal_batch.sql +17 -0
  196. package/dist/migrations/mysql/20260501_000001_audit_log.sql +24 -0
  197. package/dist/migrations/mysql/20260504_000000_nextly_meta.sql +21 -0
  198. package/dist/migrations/mysql/meta/0000_snapshot.json +1005 -0
  199. package/dist/migrations/mysql/meta/0001_snapshot.json +1099 -0
  200. package/dist/migrations/mysql/meta/_journal.json +41 -0
  201. package/dist/migrations/postgresql/0000_misty_king_bedlam.sql +169 -0
  202. package/dist/migrations/postgresql/0001_perpetual_captain_marvel.sql +8 -0
  203. package/dist/migrations/postgresql/0002_sad_spectrum.sql +16 -0
  204. package/dist/migrations/postgresql/0003_hesitant_ultron.sql +17 -0
  205. package/dist/migrations/postgresql/0004_media_table.sql +24 -0
  206. package/dist/migrations/postgresql/0005_media_folders.sql +36 -0
  207. package/dist/migrations/postgresql/0006_dynamic_collections_update.sql +50 -0
  208. package/dist/migrations/postgresql/0007_dynamic_singles.sql +38 -0
  209. package/dist/migrations/postgresql/0008_dynamic_components.sql +37 -0
  210. package/dist/migrations/postgresql/0009_user_management_tables.sql +95 -0
  211. package/dist/migrations/postgresql/0010_api_keys.sql +34 -0
  212. package/dist/migrations/postgresql/0011_general_settings.sql +20 -0
  213. package/dist/migrations/postgresql/0012_site_settings_logo_url.sql +9 -0
  214. package/dist/migrations/postgresql/0013_activity_log.sql +29 -0
  215. package/dist/migrations/postgresql/0014_image_sizes_and_focal_point.sql +33 -0
  216. package/dist/migrations/postgresql/0014_site_settings_sidebar.sql +13 -0
  217. package/dist/migrations/postgresql/0015_user_brute_force_protection.sql +29 -0
  218. package/dist/migrations/postgresql/0016_email_template_attachments.sql +12 -0
  219. package/dist/migrations/postgresql/0017_media_uploaded_by_nullable.sql +15 -0
  220. package/dist/migrations/postgresql/20260429_000000_000_initial_journal.sql +24 -0
  221. package/dist/migrations/postgresql/20260501_000000_journal_batch.sql +17 -0
  222. package/dist/migrations/postgresql/20260501_000001_audit_log.sql +24 -0
  223. package/dist/migrations/postgresql/20260504_000000_nextly_meta.sql +22 -0
  224. package/dist/migrations/postgresql/meta/0000_snapshot.json +1286 -0
  225. package/dist/migrations/postgresql/meta/0001_snapshot.json +1407 -0
  226. package/dist/migrations/postgresql/meta/0002_snapshot.json +1552 -0
  227. package/dist/migrations/postgresql/meta/0003_snapshot.json +1695 -0
  228. package/dist/migrations/postgresql/meta/0010_snapshot.json +2345 -0
  229. package/dist/migrations/postgresql/meta/_journal.json +90 -0
  230. package/dist/migrations/sqlite/0000_api_keys.sql +34 -0
  231. package/dist/migrations/sqlite/0001_general_settings.sql +20 -0
  232. package/dist/migrations/sqlite/0002_site_settings_logo_url.sql +9 -0
  233. package/dist/migrations/sqlite/0003_activity_log.sql +29 -0
  234. package/dist/migrations/sqlite/0004_image_sizes_and_focal_point.sql +29 -0
  235. package/dist/migrations/sqlite/0004_site_settings_sidebar.sql +11 -0
  236. package/dist/migrations/sqlite/0005_user_brute_force_protection.sql +29 -0
  237. package/dist/migrations/sqlite/0006_email_template_attachments.sql +12 -0
  238. package/dist/migrations/sqlite/0007_media_uploaded_by_nullable.sql +111 -0
  239. package/dist/migrations/sqlite/20260429_000000_000_initial_journal.sql +24 -0
  240. package/dist/migrations/sqlite/20260501_000000_journal_batch.sql +19 -0
  241. package/dist/migrations/sqlite/20260501_000001_audit_log.sql +24 -0
  242. package/dist/migrations/sqlite/20260504_000000_nextly_meta.sql +21 -0
  243. package/dist/migrations/sqlite/20260505_000000_user_management_tables.sql +77 -0
  244. package/dist/next.d.ts +57 -0
  245. package/dist/next.mjs +55 -0
  246. package/dist/observability/index.d.ts +87 -0
  247. package/dist/observability/index.mjs +57 -0
  248. package/dist/permissions-3DZZQZMI.mjs +39 -0
  249. package/dist/pipeline-YOML7SWF.mjs +29 -0
  250. package/dist/preview-ZZTR3QGS.mjs +9 -0
  251. package/dist/program-PW6UB2ZC.mjs +5934 -0
  252. package/dist/reconcile-single-tables-7ENVXJGB.mjs +7 -0
  253. package/dist/register-SF6E6FVU.mjs +49 -0
  254. package/dist/reload-config-HWQ4G5MM.mjs +23 -0
  255. package/dist/resolve-single-table-name-JSOMUB3R.mjs +7 -0
  256. package/dist/routeHandler-UNMMJIBM.mjs +77 -0
  257. package/dist/runtime-schema-generator-NRA6A6Z6.mjs +8 -0
  258. package/dist/runtime.d.ts +120 -0
  259. package/dist/runtime.mjs +73 -0
  260. package/dist/schema-hash-FMMG6VPJ.mjs +13 -0
  261. package/dist/schema-registry-EQ36FZDP.mjs +7 -0
  262. package/dist/scripts/load-env.mjs +42 -0
  263. package/dist/storage/index.d.ts +566 -0
  264. package/dist/storage/index.mjs +45 -0
  265. package/dist/super-admin-G5ZK5F4T.mjs +39 -0
  266. package/dist/system-table-service-WGSRVEGT.mjs +17 -0
  267. package/dist/users-7KELGRYJ.mjs +38 -0
  268. package/package.json +308 -9
@@ -0,0 +1,50 @@
1
+ /**
2
+ * Components Detail API Route Handlers for Next.js
3
+ *
4
+ * These route handlers can be re-exported in your Next.js application to provide
5
+ * individual component management endpoints at /api/components/[slug].
6
+ *
7
+ * Services are auto-initialized on first request using environment variables:
8
+ * - DB_DIALECT: Database dialect ("postgresql" | "mysql" | "sqlite")
9
+ * - DATABASE_URL: Database connection string
10
+ *
11
+ * @example
12
+ * ```typescript
13
+ * // In your Next.js app: app/api/components/[slug]/route.ts
14
+ * export { GET, PATCH, DELETE } from 'nextly/api/components-detail';
15
+ * ```
16
+ *
17
+ * @module api/components-detail
18
+ */
19
+ /**
20
+ * Context object for dynamic route handlers.
21
+ * Next.js 15+ requires params to be a Promise.
22
+ */
23
+ interface RouteContext {
24
+ params: Promise<{
25
+ slug: string;
26
+ }>;
27
+ }
28
+ /**
29
+ * GET handler for retrieving a single component by slug.
30
+ *
31
+ * Requires authentication.
32
+ */
33
+ declare const GET: (request: Request, context: RouteContext) => Promise<Response>;
34
+ /**
35
+ * PATCH handler for updating a component.
36
+ *
37
+ * Requires authentication. The registry returns 403 (mapped to LOCKED in
38
+ * `logContext`) if the component is locked (code-first components cannot be
39
+ * modified via API).
40
+ */
41
+ declare const PATCH: (request: Request, context: RouteContext) => Promise<Response>;
42
+ /**
43
+ * DELETE handler for removing a component.
44
+ *
45
+ * Requires authentication. The registry returns 403 if the component is
46
+ * locked, or 409 if it is referenced by other entities.
47
+ */
48
+ declare const DELETE: (request: Request, context: RouteContext) => Promise<Response>;
49
+
50
+ export { DELETE, GET, PATCH };
@@ -0,0 +1,132 @@
1
+ import {
2
+ requireAuthHeader
3
+ } from "../chunk-WZBYMYVW.mjs";
4
+ import "../chunk-VWF3JO32.mjs";
5
+ import {
6
+ withErrorHandler
7
+ } from "../chunk-TO5AFLVQ.mjs";
8
+ import {
9
+ getCachedNextly
10
+ } from "../chunk-P7NH2OSC.mjs";
11
+ import "../chunk-2OALJTK6.mjs";
12
+ import "../chunk-VJ66NCL4.mjs";
13
+ import "../chunk-R6JJQHFC.mjs";
14
+ import "../chunk-X23WKS3Z.mjs";
15
+ import {
16
+ getService
17
+ } from "../chunk-X7TXCYYN.mjs";
18
+ import "../chunk-YZNBLFIW.mjs";
19
+ import "../chunk-FQULBZ53.mjs";
20
+ import "../chunk-67GXH6PR.mjs";
21
+ import "../chunk-2TFX4ND3.mjs";
22
+ import "../chunk-W4MGXIRR.mjs";
23
+ import "../chunk-NSEFNNU4.mjs";
24
+ import "../chunk-3FA7FKAV.mjs";
25
+ import "../chunk-AGJ6F2T3.mjs";
26
+ import "../chunk-KIMNCZGV.mjs";
27
+ import "../chunk-AK6Z23OX.mjs";
28
+ import "../chunk-INV7QKLG.mjs";
29
+ import "../chunk-GZ6DCQKC.mjs";
30
+ import "../chunk-SBACDPNX.mjs";
31
+ import "../chunk-RJLLGGPG.mjs";
32
+ import "../chunk-V4EQTOA4.mjs";
33
+ import "../chunk-I4JMR3UR.mjs";
34
+ import "../chunk-XZKLBMN6.mjs";
35
+ import "../chunk-IZWPRDC3.mjs";
36
+ import "../chunk-DNNG377Z.mjs";
37
+ import {
38
+ calculateSchemaHash
39
+ } from "../chunk-5HMZ644B.mjs";
40
+ import "../chunk-W5KKPZT5.mjs";
41
+ import "../chunk-56WO4WX7.mjs";
42
+ import "../chunk-2W3DVD7S.mjs";
43
+ import "../chunk-TS7GHTG2.mjs";
44
+ import "../chunk-H26B4FYG.mjs";
45
+ import "../chunk-DP3G27G5.mjs";
46
+ import "../chunk-DV6WVX2Q.mjs";
47
+ import "../chunk-UJ2IMJ4W.mjs";
48
+ import "../chunk-EGXBZCGC.mjs";
49
+ import "../chunk-G2AA4QLC.mjs";
50
+ import "../chunk-4MJLT6PZ.mjs";
51
+ import {
52
+ respondDoc,
53
+ respondMutation
54
+ } from "../chunk-IUDOC7N7.mjs";
55
+ import "../chunk-LAZXX4HR.mjs";
56
+ import "../chunk-D5HQBNUB.mjs";
57
+ import {
58
+ NextlyError
59
+ } from "../chunk-NRUWQ5Z7.mjs";
60
+ import "../chunk-VTJADRO3.mjs";
61
+ import "../chunk-5APFUGAD.mjs";
62
+ import "../chunk-7P6ASYW6.mjs";
63
+
64
+ // src/api/components-detail.ts
65
+ async function getComponentRegistry() {
66
+ await getCachedNextly();
67
+ return getService("componentRegistryService");
68
+ }
69
+ var GET = withErrorHandler(
70
+ async (request, context) => {
71
+ requireAuthHeader(request);
72
+ const { slug } = await context.params;
73
+ const registry = await getComponentRegistry();
74
+ const component = await registry.getComponent(slug);
75
+ return respondDoc(component);
76
+ }
77
+ );
78
+ var PATCH = withErrorHandler(
79
+ async (request, context) => {
80
+ requireAuthHeader(request);
81
+ const { slug } = await context.params;
82
+ const registry = await getComponentRegistry();
83
+ let body;
84
+ try {
85
+ body = await request.json();
86
+ } catch {
87
+ throw NextlyError.validation({
88
+ errors: [
89
+ {
90
+ path: "",
91
+ code: "invalid_json",
92
+ message: "Request body is not valid JSON."
93
+ }
94
+ ]
95
+ });
96
+ }
97
+ const updateData = {};
98
+ if (body.label !== void 0) {
99
+ updateData.label = body.label;
100
+ }
101
+ if (body.description !== void 0) {
102
+ updateData.description = body.description;
103
+ }
104
+ if (body.fields !== void 0) {
105
+ updateData.fields = body.fields;
106
+ updateData.schemaHash = calculateSchemaHash(
107
+ body.fields
108
+ );
109
+ }
110
+ if (body.admin !== void 0) {
111
+ updateData.admin = body.admin;
112
+ }
113
+ const updated = await registry.updateComponent(slug, updateData, {
114
+ source: "ui"
115
+ });
116
+ return respondMutation("Component updated.", updated);
117
+ }
118
+ );
119
+ var DELETE = withErrorHandler(
120
+ async (request, context) => {
121
+ requireAuthHeader(request);
122
+ const { slug } = await context.params;
123
+ const registry = await getComponentRegistry();
124
+ await registry.deleteComponent(slug);
125
+ return new Response(null, { status: 204 });
126
+ }
127
+ );
128
+ export {
129
+ DELETE,
130
+ GET,
131
+ PATCH
132
+ };
@@ -0,0 +1,69 @@
1
+ /**
2
+ * Components API Route Handlers for Next.js
3
+ *
4
+ * These route handlers can be re-exported in your Next.js application to provide
5
+ * component definition management endpoints at /api/components.
6
+ *
7
+ * Services are auto-initialized on first request using environment variables:
8
+ * - DB_DIALECT: Database dialect ("postgresql" | "mysql" | "sqlite")
9
+ * - DATABASE_URL: Database connection string
10
+ *
11
+ * @example
12
+ * ```typescript
13
+ * // In your Next.js app: app/api/components/route.ts
14
+ * export { GET, POST } from 'nextly/api/components';
15
+ * ```
16
+ *
17
+ * @module api/components
18
+ */
19
+ /**
20
+ * GET handler for listing components with pagination and filters.
21
+ *
22
+ * This is a public endpoint - no authentication required.
23
+ * Used by Admin UI to load component list for navigation.
24
+ *
25
+ * Query Parameters:
26
+ * - source: Filter by source type ("code" | "ui")
27
+ * - search: Search query for slug and label
28
+ * - limit: Maximum results (default: 50)
29
+ * - offset: Number of results to skip (default: 0)
30
+ *
31
+ * Response Codes:
32
+ * - 200 OK: Components list retrieved successfully
33
+ * - 500 Internal Server Error: Failed to fetch components
34
+ *
35
+ * @param request - Next.js Request object
36
+ * @returns Response with JSON component list and pagination meta
37
+ *
38
+ * @example
39
+ * ```bash
40
+ * curl "http://localhost:3000/api/components?source=ui&limit=10"
41
+ * # => {"items":[...],"meta":{"total":5,"page":1,"limit":10,"totalPages":1,"hasNext":false,"hasPrev":false}}
42
+ * ```
43
+ */
44
+ declare const GET: (request: Request) => Promise<Response>;
45
+ /**
46
+ * POST handler for creating a new UI component.
47
+ *
48
+ * Requires authentication. Creates a new component with source="ui" and locked=false.
49
+ *
50
+ * Request Body:
51
+ * - slug: Unique identifier (lowercase, letters/numbers/hyphens)
52
+ * - label: Display name for the component
53
+ * - description: Optional description
54
+ * - fields: Array of field configurations
55
+ * - admin: Optional admin UI configuration (category, icon, hidden, description, imageURL)
56
+ *
57
+ * Response Codes:
58
+ * - 201 Created: Component created successfully
59
+ * - 400 Bad Request: Invalid input
60
+ * - 401 Unauthorized: Authentication required
61
+ * - 409 Conflict: Component with slug already exists
62
+ * - 500 Internal Server Error: Creation failed
63
+ *
64
+ * @param request - Next.js Request object with JSON body
65
+ * @returns Response with JSON created component
66
+ */
67
+ declare const POST: (request: Request) => Promise<Response>;
68
+
69
+ export { GET, POST };
@@ -0,0 +1,144 @@
1
+ import {
2
+ nextlyValidationFromZod
3
+ } from "../chunk-GJNSJU4S.mjs";
4
+ import "../chunk-VWF3JO32.mjs";
5
+ import {
6
+ withErrorHandler
7
+ } from "../chunk-TO5AFLVQ.mjs";
8
+ import {
9
+ getCachedNextly
10
+ } from "../chunk-P7NH2OSC.mjs";
11
+ import "../chunk-2OALJTK6.mjs";
12
+ import "../chunk-VJ66NCL4.mjs";
13
+ import "../chunk-R6JJQHFC.mjs";
14
+ import "../chunk-X23WKS3Z.mjs";
15
+ import {
16
+ getService
17
+ } from "../chunk-X7TXCYYN.mjs";
18
+ import "../chunk-YZNBLFIW.mjs";
19
+ import "../chunk-FQULBZ53.mjs";
20
+ import "../chunk-67GXH6PR.mjs";
21
+ import "../chunk-2TFX4ND3.mjs";
22
+ import "../chunk-W4MGXIRR.mjs";
23
+ import {
24
+ clampLimit2 as clampLimit
25
+ } from "../chunk-NSEFNNU4.mjs";
26
+ import "../chunk-3FA7FKAV.mjs";
27
+ import "../chunk-AGJ6F2T3.mjs";
28
+ import "../chunk-KIMNCZGV.mjs";
29
+ import "../chunk-AK6Z23OX.mjs";
30
+ import "../chunk-INV7QKLG.mjs";
31
+ import "../chunk-GZ6DCQKC.mjs";
32
+ import "../chunk-SBACDPNX.mjs";
33
+ import "../chunk-RJLLGGPG.mjs";
34
+ import "../chunk-V4EQTOA4.mjs";
35
+ import "../chunk-I4JMR3UR.mjs";
36
+ import "../chunk-XZKLBMN6.mjs";
37
+ import "../chunk-IZWPRDC3.mjs";
38
+ import "../chunk-DNNG377Z.mjs";
39
+ import {
40
+ calculateSchemaHash
41
+ } from "../chunk-5HMZ644B.mjs";
42
+ import "../chunk-W5KKPZT5.mjs";
43
+ import "../chunk-56WO4WX7.mjs";
44
+ import "../chunk-2W3DVD7S.mjs";
45
+ import "../chunk-TS7GHTG2.mjs";
46
+ import "../chunk-H26B4FYG.mjs";
47
+ import "../chunk-DP3G27G5.mjs";
48
+ import "../chunk-DV6WVX2Q.mjs";
49
+ import "../chunk-UJ2IMJ4W.mjs";
50
+ import "../chunk-EGXBZCGC.mjs";
51
+ import "../chunk-G2AA4QLC.mjs";
52
+ import "../chunk-4MJLT6PZ.mjs";
53
+ import {
54
+ respondList,
55
+ respondMutation
56
+ } from "../chunk-IUDOC7N7.mjs";
57
+ import "../chunk-LAZXX4HR.mjs";
58
+ import "../chunk-D5HQBNUB.mjs";
59
+ import {
60
+ NextlyError
61
+ } from "../chunk-NRUWQ5Z7.mjs";
62
+ import "../chunk-VTJADRO3.mjs";
63
+ import "../chunk-5APFUGAD.mjs";
64
+ import "../chunk-7P6ASYW6.mjs";
65
+
66
+ // src/api/components.ts
67
+ import { z } from "zod";
68
+ async function getComponentRegistry() {
69
+ await getCachedNextly();
70
+ return getService("componentRegistryService");
71
+ }
72
+ var createComponentSchema = z.object({
73
+ slug: z.string().min(1, "Slug is required").max(255, "Slug must be 255 characters or less").regex(
74
+ /^[a-z][a-z0-9-]*$/,
75
+ "Slug must start with a letter and contain only lowercase letters, numbers, and hyphens"
76
+ ),
77
+ label: z.string().min(1, "Label is required"),
78
+ description: z.string().optional(),
79
+ fields: z.array(z.any()),
80
+ // Field validation is complex, handled by service
81
+ admin: z.object({
82
+ category: z.string().optional(),
83
+ icon: z.string().optional(),
84
+ hidden: z.boolean().optional(),
85
+ description: z.string().optional(),
86
+ imageURL: z.string().optional()
87
+ }).optional()
88
+ });
89
+ var GET = withErrorHandler(async (request) => {
90
+ const registry = await getComponentRegistry();
91
+ const { searchParams } = new URL(request.url);
92
+ const source = searchParams.get("source");
93
+ const search = searchParams.get("search") || void 0;
94
+ const limit = clampLimit(searchParams.get("limit"), { defaultLimit: 50 });
95
+ const offset = searchParams.get("offset") ? parseInt(searchParams.get("offset"), 10) : 0;
96
+ const result = await registry.listComponents({
97
+ source: source || void 0,
98
+ search,
99
+ limit,
100
+ offset
101
+ });
102
+ const safeLimit = Math.max(1, limit);
103
+ const page = Math.floor(offset / safeLimit) + 1;
104
+ const totalPages = result.total > 0 ? Math.ceil(result.total / safeLimit) : 0;
105
+ return respondList(result.data, {
106
+ total: result.total,
107
+ page,
108
+ limit: safeLimit,
109
+ totalPages,
110
+ hasNext: page < totalPages,
111
+ hasPrev: page > 1
112
+ });
113
+ });
114
+ var POST = withErrorHandler(async (request) => {
115
+ const authHeader = request.headers.get("Authorization");
116
+ if (!authHeader) {
117
+ throw NextlyError.authRequired();
118
+ }
119
+ const registry = await getComponentRegistry();
120
+ const body = await request.json();
121
+ const parsed = createComponentSchema.safeParse(body);
122
+ if (!parsed.success) {
123
+ throw nextlyValidationFromZod(parsed.error);
124
+ }
125
+ const validated = parsed.data;
126
+ const tableName = validated.slug.toLowerCase().replace(/[^a-z0-9]+/g, "_").replace(/^_+|_+$/g, "");
127
+ const schemaHash = calculateSchemaHash(validated.fields);
128
+ const component = await registry.registerComponent({
129
+ slug: validated.slug,
130
+ label: validated.label,
131
+ tableName,
132
+ description: validated.description,
133
+ fields: validated.fields,
134
+ admin: validated.admin,
135
+ source: "ui",
136
+ locked: false,
137
+ schemaHash
138
+ });
139
+ return respondMutation("Component created.", component, { status: 201 });
140
+ });
141
+ export {
142
+ GET,
143
+ POST
144
+ };
@@ -0,0 +1,40 @@
1
+ /**
2
+ * Email Provider Default API Route Handler for Next.js
3
+ *
4
+ * Sets a specific email provider as the default. The previous default
5
+ * provider is unset atomically in a transaction.
6
+ * Re-export in your Next.js application at /api/email-providers/[id]/default.
7
+ *
8
+ * @example
9
+ * ```typescript
10
+ * // In your Next.js app: app/api/email-providers/[id]/default/route.ts
11
+ * export { PATCH } from 'nextly/api/email-providers-default';
12
+ * ```
13
+ *
14
+ * @module api/email-providers-default
15
+ */
16
+ interface RouteContext {
17
+ params: Promise<{
18
+ id: string;
19
+ }>;
20
+ }
21
+ /**
22
+ * PATCH handler for setting an email provider as the default.
23
+ *
24
+ * Requires authentication. Unsets the previous default provider and sets
25
+ * the specified provider as default in a single transaction.
26
+ *
27
+ * No request body required; the provider ID is in the URL path.
28
+ *
29
+ * Response Codes:
30
+ * - 200 OK: Provider set as default successfully
31
+ * - 401 Unauthorized: Authentication required
32
+ * - 404 Not Found: Provider with ID does not exist
33
+ * - 500 Internal Server Error: Operation failed
34
+ *
35
+ * Response: `{ "data": EmailProvider }`; updated provider with `isDefault:
36
+ * true` and masked configuration.
37
+ */
38
+ declare const PATCH: (request: Request, context: RouteContext) => Promise<Response>;
39
+
40
+ export { PATCH };
@@ -0,0 +1,75 @@
1
+ import {
2
+ requireAuthHeader
3
+ } from "../chunk-WZBYMYVW.mjs";
4
+ import "../chunk-VWF3JO32.mjs";
5
+ import {
6
+ withErrorHandler
7
+ } from "../chunk-TO5AFLVQ.mjs";
8
+ import {
9
+ getCachedNextly
10
+ } from "../chunk-P7NH2OSC.mjs";
11
+ import "../chunk-2OALJTK6.mjs";
12
+ import "../chunk-VJ66NCL4.mjs";
13
+ import "../chunk-R6JJQHFC.mjs";
14
+ import "../chunk-X23WKS3Z.mjs";
15
+ import "../chunk-X7TXCYYN.mjs";
16
+ import "../chunk-YZNBLFIW.mjs";
17
+ import "../chunk-FQULBZ53.mjs";
18
+ import "../chunk-67GXH6PR.mjs";
19
+ import "../chunk-2TFX4ND3.mjs";
20
+ import "../chunk-W4MGXIRR.mjs";
21
+ import "../chunk-NSEFNNU4.mjs";
22
+ import "../chunk-3FA7FKAV.mjs";
23
+ import "../chunk-AGJ6F2T3.mjs";
24
+ import "../chunk-KIMNCZGV.mjs";
25
+ import "../chunk-AK6Z23OX.mjs";
26
+ import "../chunk-INV7QKLG.mjs";
27
+ import "../chunk-GZ6DCQKC.mjs";
28
+ import "../chunk-SBACDPNX.mjs";
29
+ import "../chunk-RJLLGGPG.mjs";
30
+ import "../chunk-V4EQTOA4.mjs";
31
+ import "../chunk-I4JMR3UR.mjs";
32
+ import "../chunk-XZKLBMN6.mjs";
33
+ import "../chunk-IZWPRDC3.mjs";
34
+ import "../chunk-DNNG377Z.mjs";
35
+ import "../chunk-5HMZ644B.mjs";
36
+ import "../chunk-W5KKPZT5.mjs";
37
+ import "../chunk-56WO4WX7.mjs";
38
+ import "../chunk-2W3DVD7S.mjs";
39
+ import "../chunk-TS7GHTG2.mjs";
40
+ import "../chunk-H26B4FYG.mjs";
41
+ import "../chunk-DP3G27G5.mjs";
42
+ import "../chunk-DV6WVX2Q.mjs";
43
+ import "../chunk-UJ2IMJ4W.mjs";
44
+ import "../chunk-EGXBZCGC.mjs";
45
+ import "../chunk-G2AA4QLC.mjs";
46
+ import "../chunk-4MJLT6PZ.mjs";
47
+ import {
48
+ respondAction
49
+ } from "../chunk-IUDOC7N7.mjs";
50
+ import "../chunk-LAZXX4HR.mjs";
51
+ import {
52
+ container
53
+ } from "../chunk-D5HQBNUB.mjs";
54
+ import "../chunk-NRUWQ5Z7.mjs";
55
+ import "../chunk-VTJADRO3.mjs";
56
+ import "../chunk-5APFUGAD.mjs";
57
+ import "../chunk-7P6ASYW6.mjs";
58
+
59
+ // src/api/email-providers-default.ts
60
+ async function getEmailProviderService() {
61
+ await getCachedNextly();
62
+ return container.get("emailProviderService");
63
+ }
64
+ var PATCH = withErrorHandler(
65
+ async (request, context) => {
66
+ requireAuthHeader(request);
67
+ const { id } = await context.params;
68
+ const service = await getEmailProviderService();
69
+ const provider = await service.setDefault(id);
70
+ return respondAction("Default email provider updated.", { provider });
71
+ }
72
+ );
73
+ export {
74
+ PATCH
75
+ };
@@ -0,0 +1,81 @@
1
+ /**
2
+ * Email Providers Detail API Route Handlers for Next.js
3
+ *
4
+ * These route handlers can be re-exported in your Next.js application to provide
5
+ * individual email provider management endpoints at /api/email-providers/[id].
6
+ *
7
+ * Services are auto-initialized on first request using environment variables:
8
+ * - DB_DIALECT: Database dialect ("postgresql" | "mysql" | "sqlite")
9
+ * - DATABASE_URL: Database connection string
10
+ *
11
+ * @example
12
+ * ```typescript
13
+ * // In your Next.js app: app/api/email-providers/[id]/route.ts
14
+ * export { GET, PATCH, DELETE } from 'nextly/api/email-providers-detail';
15
+ * ```
16
+ *
17
+ * Auth is a header-only presence check; real verification lives downstream.
18
+ *
19
+ * @module api/email-providers-detail
20
+ */
21
+ interface RouteContext {
22
+ params: Promise<{
23
+ id: string;
24
+ }>;
25
+ }
26
+ /**
27
+ * GET handler for retrieving a single email provider by ID.
28
+ *
29
+ * Requires authentication. Returns provider with masked configuration.
30
+ *
31
+ * Response Codes:
32
+ * - 200 OK: Provider retrieved successfully
33
+ * - 401 Unauthorized: Authentication required
34
+ * - 404 Not Found: Provider with ID does not exist
35
+ * - 500 Internal Server Error: Failed to fetch provider
36
+ *
37
+ * Response: `{ "data": EmailProvider }`
38
+ */
39
+ declare const GET: (request: Request, context: RouteContext) => Promise<Response>;
40
+ /**
41
+ * PATCH handler for updating an email provider.
42
+ *
43
+ * Requires authentication. Provider `type` cannot be changed after creation.
44
+ * Configuration is re-encrypted before storage.
45
+ *
46
+ * Request Body (all fields optional):
47
+ * - name: Display name
48
+ * - fromEmail: From email address
49
+ * - fromName: From display name
50
+ * - configuration: Provider-specific config object
51
+ * - isActive: Enable/disable provider
52
+ *
53
+ * Response Codes:
54
+ * - 200 OK: Provider updated successfully
55
+ * - 400 Bad Request: Invalid JSON body
56
+ * - 401 Unauthorized: Authentication required
57
+ * - 404 Not Found: Provider with ID does not exist
58
+ * - 500 Internal Server Error: Update failed
59
+ *
60
+ * Response: `{ "data": EmailProvider }`; updated provider with masked
61
+ * configuration.
62
+ */
63
+ declare const PATCH: (request: Request, context: RouteContext) => Promise<Response>;
64
+ /**
65
+ * DELETE handler for removing an email provider.
66
+ *
67
+ * Requires authentication. Cannot delete the default provider; set another
68
+ * provider as default first.
69
+ *
70
+ * Response Codes:
71
+ * - 200 OK: Provider deleted successfully
72
+ * - 401 Unauthorized: Authentication required
73
+ * - 403 Forbidden: Cannot delete the default provider
74
+ * - 404 Not Found: Provider with ID does not exist
75
+ * - 500 Internal Server Error: Deletion failed
76
+ *
77
+ * Response: `{ "data": { "success": true } }`
78
+ */
79
+ declare const DELETE: (request: Request, context: RouteContext) => Promise<Response>;
80
+
81
+ export { DELETE, GET, PATCH };