@nextsparkjs/core 0.1.0-beta.82 → 0.1.0-beta.83

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 (374) hide show
  1. package/dist/components/entities/wrappers/EntityDetailWrapper.d.ts.map +1 -1
  2. package/dist/components/entities/wrappers/EntityDetailWrapper.js +11 -39
  3. package/dist/hooks/useEntityQuery.d.ts.map +1 -1
  4. package/dist/hooks/useEntityQuery.js +21 -3
  5. package/dist/lib/theme/get-default-theme-mode.d.ts +11 -0
  6. package/dist/lib/theme/get-default-theme-mode.d.ts.map +1 -1
  7. package/dist/lib/theme/get-default-theme-mode.js +42 -25
  8. package/dist/styles/classes.json +1 -1
  9. package/dist/types/theme.d.ts +2 -0
  10. package/dist/types/theme.d.ts.map +1 -1
  11. package/package.json +16 -16
  12. package/scripts/build/docs-registry.mjs +0 -0
  13. package/scripts/create-theme.mjs +0 -0
  14. package/scripts/deploy/release-version.mjs +0 -0
  15. package/scripts/deploy/vercel-deploy.mjs +0 -0
  16. package/scripts/dev/watch-plugins.mjs +0 -0
  17. package/scripts/maintenance/update-core.mjs +0 -0
  18. package/scripts/setup/npm-postinstall.mjs +0 -0
  19. package/scripts/setup/setup-claude.mjs +0 -0
  20. package/scripts/validation/check-imports.sh +0 -0
  21. package/dist/templates/app/(auth)/forgot-password/page.tsx +0 -216
  22. package/dist/templates/app/(auth)/layout.tsx +0 -51
  23. package/dist/templates/app/(auth)/login/page.tsx +0 -21
  24. package/dist/templates/app/(auth)/reset-password/page.tsx +0 -212
  25. package/dist/templates/app/(auth)/signup/page.tsx +0 -21
  26. package/dist/templates/app/(auth)/verify-email/page.tsx +0 -190
  27. package/dist/templates/app/(public)/[...slug]/page.tsx +0 -378
  28. package/dist/templates/app/(public)/docs/[section]/[page]/page.tsx +0 -90
  29. package/dist/templates/app/(public)/docs/layout.tsx +0 -25
  30. package/dist/templates/app/(public)/docs/page.tsx +0 -81
  31. package/dist/templates/app/(public)/layout.tsx +0 -41
  32. package/dist/templates/app/(public)/page.tsx +0 -19
  33. package/dist/templates/app/403/page.tsx +0 -89
  34. package/dist/templates/app/api/auth/[...all]/route.ts +0 -78
  35. package/dist/templates/app/api/cron/billing/lifecycle/route.ts +0 -98
  36. package/dist/templates/app/api/csp-report/route.ts +0 -175
  37. package/dist/templates/app/api/devtools/config/entities/route.ts +0 -108
  38. package/dist/templates/app/api/devtools/config/theme/route.ts +0 -66
  39. package/dist/templates/app/api/devtools/tests/[...path]/route.ts +0 -130
  40. package/dist/templates/app/api/devtools/tests/route.ts +0 -134
  41. package/dist/templates/app/api/health/route.ts +0 -29
  42. package/dist/templates/app/api/internal/user-metadata/route.ts +0 -36
  43. package/dist/templates/app/api/superadmin/subscriptions/route.ts +0 -310
  44. package/dist/templates/app/api/superadmin/teams/[teamId]/route.ts +0 -286
  45. package/dist/templates/app/api/superadmin/teams/route.ts +0 -188
  46. package/dist/templates/app/api/superadmin/users/[userId]/route.ts +0 -540
  47. package/dist/templates/app/api/superadmin/users/route.ts +0 -323
  48. package/dist/templates/app/api/user/delete-account/route.ts +0 -55
  49. package/dist/templates/app/api/user/plan-flags/route.ts +0 -283
  50. package/dist/templates/app/api/user/profile/route.ts +0 -133
  51. package/dist/templates/app/api/v1/[entity]/[id]/child/[childType]/[childId]/route.ts +0 -210
  52. package/dist/templates/app/api/v1/[entity]/[id]/child/[childType]/route.ts +0 -331
  53. package/dist/templates/app/api/v1/[entity]/[id]/route.ts +0 -35
  54. package/dist/templates/app/api/v1/[entity]/docs.md +0 -369
  55. package/dist/templates/app/api/v1/[entity]/presets.ts +0 -194
  56. package/dist/templates/app/api/v1/[entity]/route.ts +0 -31
  57. package/dist/templates/app/api/v1/api-keys/[id]/route.ts +0 -303
  58. package/dist/templates/app/api/v1/api-keys/docs.md +0 -101
  59. package/dist/templates/app/api/v1/api-keys/presets.ts +0 -31
  60. package/dist/templates/app/api/v1/api-keys/route.ts +0 -250
  61. package/dist/templates/app/api/v1/auth/docs.md +0 -184
  62. package/dist/templates/app/api/v1/auth/presets.ts +0 -44
  63. package/dist/templates/app/api/v1/auth/signup-with-invite/route.ts +0 -227
  64. package/dist/templates/app/api/v1/billing/cancel/route.ts +0 -206
  65. package/dist/templates/app/api/v1/billing/change-plan/route.ts +0 -97
  66. package/dist/templates/app/api/v1/billing/check-action/route.ts +0 -81
  67. package/dist/templates/app/api/v1/billing/checkout/route.ts +0 -124
  68. package/dist/templates/app/api/v1/billing/docs.md +0 -209
  69. package/dist/templates/app/api/v1/billing/plans/route.ts +0 -85
  70. package/dist/templates/app/api/v1/billing/portal/route.ts +0 -90
  71. package/dist/templates/app/api/v1/billing/presets.ts +0 -121
  72. package/dist/templates/app/api/v1/billing/webhooks/stripe/route.ts +0 -428
  73. package/dist/templates/app/api/v1/blocks/[slug]/route.ts +0 -29
  74. package/dist/templates/app/api/v1/blocks/docs.md +0 -173
  75. package/dist/templates/app/api/v1/blocks/presets.ts +0 -121
  76. package/dist/templates/app/api/v1/blocks/route.ts +0 -45
  77. package/dist/templates/app/api/v1/blocks/validate/route.ts +0 -45
  78. package/dist/templates/app/api/v1/cron/docs.md +0 -116
  79. package/dist/templates/app/api/v1/cron/presets.ts +0 -26
  80. package/dist/templates/app/api/v1/cron/process/route.ts +0 -108
  81. package/dist/templates/app/api/v1/devtools/blocks/route.ts +0 -82
  82. package/dist/templates/app/api/v1/devtools/docs/route.ts +0 -150
  83. package/dist/templates/app/api/v1/devtools/docs.md +0 -204
  84. package/dist/templates/app/api/v1/devtools/features/route.ts +0 -61
  85. package/dist/templates/app/api/v1/devtools/flows/route.ts +0 -61
  86. package/dist/templates/app/api/v1/devtools/presets.ts +0 -113
  87. package/dist/templates/app/api/v1/devtools/scheduled-actions/route.ts +0 -120
  88. package/dist/templates/app/api/v1/devtools/testing/route.ts +0 -82
  89. package/dist/templates/app/api/v1/media/docs.md +0 -117
  90. package/dist/templates/app/api/v1/media/presets.ts +0 -24
  91. package/dist/templates/app/api/v1/media/upload/route.ts +0 -150
  92. package/dist/templates/app/api/v1/patterns/[id]/usages/route.ts +0 -116
  93. package/dist/templates/app/api/v1/plugin/[...path]/route.ts +0 -373
  94. package/dist/templates/app/api/v1/plugin/docs.md +0 -79
  95. package/dist/templates/app/api/v1/plugin/presets.ts +0 -21
  96. package/dist/templates/app/api/v1/plugin/route.ts +0 -96
  97. package/dist/templates/app/api/v1/post-categories/[id]/route.ts +0 -255
  98. package/dist/templates/app/api/v1/post-categories/docs.md +0 -134
  99. package/dist/templates/app/api/v1/post-categories/presets.ts +0 -78
  100. package/dist/templates/app/api/v1/post-categories/route.ts +0 -119
  101. package/dist/templates/app/api/v1/team-invitations/[token]/accept/route.ts +0 -179
  102. package/dist/templates/app/api/v1/team-invitations/[token]/decline/route.ts +0 -120
  103. package/dist/templates/app/api/v1/team-invitations/[token]/route.ts +0 -89
  104. package/dist/templates/app/api/v1/team-invitations/docs.md +0 -88
  105. package/dist/templates/app/api/v1/team-invitations/presets.ts +0 -43
  106. package/dist/templates/app/api/v1/team-invitations/route.ts +0 -114
  107. package/dist/templates/app/api/v1/teams/[teamId]/invitations/route.ts +0 -171
  108. package/dist/templates/app/api/v1/teams/[teamId]/invoices/[invoiceNumber]/route.ts +0 -105
  109. package/dist/templates/app/api/v1/teams/[teamId]/invoices/route.ts +0 -125
  110. package/dist/templates/app/api/v1/teams/[teamId]/members/[memberId]/route.ts +0 -263
  111. package/dist/templates/app/api/v1/teams/[teamId]/members/route.ts +0 -358
  112. package/dist/templates/app/api/v1/teams/[teamId]/route.ts +0 -322
  113. package/dist/templates/app/api/v1/teams/[teamId]/subscription/route.ts +0 -50
  114. package/dist/templates/app/api/v1/teams/[teamId]/usage/[limitSlug]/route.ts +0 -91
  115. package/dist/templates/app/api/v1/teams/docs.md +0 -320
  116. package/dist/templates/app/api/v1/teams/presets.ts +0 -178
  117. package/dist/templates/app/api/v1/teams/route.ts +0 -293
  118. package/dist/templates/app/api/v1/teams/switch/route.ts +0 -88
  119. package/dist/templates/app/api/v1/theme/[...path]/route.ts +0 -361
  120. package/dist/templates/app/api/v1/theme/docs.md +0 -74
  121. package/dist/templates/app/api/v1/theme/presets.ts +0 -21
  122. package/dist/templates/app/api/v1/theme/route.ts +0 -96
  123. package/dist/templates/app/api/v1/users/[id]/meta/[key]/route.ts +0 -363
  124. package/dist/templates/app/api/v1/users/[id]/route.ts +0 -302
  125. package/dist/templates/app/api/v1/users/docs.md +0 -93
  126. package/dist/templates/app/api/v1/users/presets.ts +0 -59
  127. package/dist/templates/app/api/v1/users/route.ts +0 -197
  128. package/dist/templates/app/dashboard/(main)/[entity]/[id]/edit/page.tsx +0 -117
  129. package/dist/templates/app/dashboard/(main)/[entity]/[id]/page.tsx +0 -103
  130. package/dist/templates/app/dashboard/(main)/[entity]/create/page.tsx +0 -95
  131. package/dist/templates/app/dashboard/(main)/[entity]/error.tsx +0 -51
  132. package/dist/templates/app/dashboard/(main)/[entity]/layout.tsx +0 -113
  133. package/dist/templates/app/dashboard/(main)/[entity]/loading.tsx +0 -61
  134. package/dist/templates/app/dashboard/(main)/[entity]/page.tsx +0 -90
  135. package/dist/templates/app/dashboard/(main)/layout.tsx +0 -98
  136. package/dist/templates/app/dashboard/(main)/loading.tsx +0 -5
  137. package/dist/templates/app/dashboard/(main)/page.tsx +0 -201
  138. package/dist/templates/app/dashboard/(main)/patterns/[id]/edit/page.tsx +0 -114
  139. package/dist/templates/app/dashboard/(main)/patterns/[id]/page.tsx +0 -20
  140. package/dist/templates/app/dashboard/(main)/patterns/[id]/reports/page.tsx +0 -171
  141. package/dist/templates/app/dashboard/(main)/patterns/create/page.tsx +0 -86
  142. package/dist/templates/app/dashboard/(main)/patterns/page.tsx +0 -444
  143. package/dist/templates/app/dashboard/features/analytics/page.tsx +0 -35
  144. package/dist/templates/app/dashboard/features/automation/page.tsx +0 -35
  145. package/dist/templates/app/dashboard/features/layout.tsx +0 -13
  146. package/dist/templates/app/dashboard/features/loading.tsx +0 -5
  147. package/dist/templates/app/dashboard/features/webhooks/page.tsx +0 -35
  148. package/dist/templates/app/dashboard/layout.tsx +0 -86
  149. package/dist/templates/app/dashboard/permission-denied/page.tsx +0 -29
  150. package/dist/templates/app/dashboard/settings/api-keys/loading.tsx +0 -5
  151. package/dist/templates/app/dashboard/settings/api-keys/page.tsx +0 -513
  152. package/dist/templates/app/dashboard/settings/billing/loading.tsx +0 -5
  153. package/dist/templates/app/dashboard/settings/billing/page.tsx +0 -284
  154. package/dist/templates/app/dashboard/settings/invoices/[invoiceNumber]/page.tsx +0 -222
  155. package/dist/templates/app/dashboard/settings/invoices/loading.tsx +0 -5
  156. package/dist/templates/app/dashboard/settings/invoices/page.tsx +0 -82
  157. package/dist/templates/app/dashboard/settings/layout.tsx +0 -151
  158. package/dist/templates/app/dashboard/settings/loading.tsx +0 -5
  159. package/dist/templates/app/dashboard/settings/notifications/loading.tsx +0 -5
  160. package/dist/templates/app/dashboard/settings/notifications/page.tsx +0 -462
  161. package/dist/templates/app/dashboard/settings/page.tsx +0 -92
  162. package/dist/templates/app/dashboard/settings/password/loading.tsx +0 -5
  163. package/dist/templates/app/dashboard/settings/password/page.tsx +0 -306
  164. package/dist/templates/app/dashboard/settings/plans/loading.tsx +0 -5
  165. package/dist/templates/app/dashboard/settings/plans/page.tsx +0 -40
  166. package/dist/templates/app/dashboard/settings/profile/loading.tsx +0 -5
  167. package/dist/templates/app/dashboard/settings/profile/page.tsx +0 -686
  168. package/dist/templates/app/dashboard/settings/security/loading.tsx +0 -5
  169. package/dist/templates/app/dashboard/settings/security/page.tsx +0 -505
  170. package/dist/templates/app/dashboard/settings/teams/loading.tsx +0 -5
  171. package/dist/templates/app/dashboard/settings/teams/page.tsx +0 -272
  172. package/dist/templates/app/dashboard/settings/teams/permissions/page.tsx +0 -92
  173. package/dist/templates/app/devtools/blocks/[slug]/page.tsx +0 -39
  174. package/dist/templates/app/devtools/blocks/page.tsx +0 -31
  175. package/dist/templates/app/devtools/config/page.tsx +0 -31
  176. package/dist/templates/app/devtools/features/page.tsx +0 -31
  177. package/dist/templates/app/devtools/flows/page.tsx +0 -31
  178. package/dist/templates/app/devtools/layout.tsx +0 -58
  179. package/dist/templates/app/devtools/page.tsx +0 -121
  180. package/dist/templates/app/devtools/scheduled-actions/page.tsx +0 -157
  181. package/dist/templates/app/devtools/style/page.tsx +0 -330
  182. package/dist/templates/app/devtools/tags/page.tsx +0 -31
  183. package/dist/templates/app/devtools/tests/[[...path]]/page.tsx +0 -47
  184. package/dist/templates/app/favicon.ico +0 -0
  185. package/dist/templates/app/globals.css +0 -12
  186. package/dist/templates/app/layout.tsx +0 -96
  187. package/dist/templates/app/public/page.tsx +0 -30
  188. package/dist/templates/app/superadmin/docs/[section]/[page]/page.tsx +0 -92
  189. package/dist/templates/app/superadmin/docs/page.tsx +0 -75
  190. package/dist/templates/app/superadmin/layout.tsx +0 -67
  191. package/dist/templates/app/superadmin/page.tsx +0 -149
  192. package/dist/templates/app/superadmin/subscriptions/page.tsx +0 -655
  193. package/dist/templates/app/superadmin/team-roles/page.tsx +0 -493
  194. package/dist/templates/app/superadmin/teams/[teamId]/page.tsx +0 -687
  195. package/dist/templates/app/superadmin/teams/page.tsx +0 -302
  196. package/dist/templates/app/superadmin/users/[userId]/page.tsx +0 -548
  197. package/dist/templates/app/superadmin/users/page.tsx +0 -528
  198. package/templates/app/(auth)/forgot-password/page.tsx +0 -216
  199. package/templates/app/(auth)/layout.tsx +0 -51
  200. package/templates/app/(auth)/login/page.tsx +0 -21
  201. package/templates/app/(auth)/reset-password/page.tsx +0 -212
  202. package/templates/app/(auth)/signup/page.tsx +0 -21
  203. package/templates/app/(auth)/verify-email/page.tsx +0 -190
  204. package/templates/app/(public)/[...slug]/page.tsx +0 -378
  205. package/templates/app/(public)/docs/[section]/[page]/page.tsx +0 -90
  206. package/templates/app/(public)/docs/layout.tsx +0 -25
  207. package/templates/app/(public)/docs/page.tsx +0 -81
  208. package/templates/app/(public)/layout.tsx +0 -41
  209. package/templates/app/(public)/page.tsx +0 -19
  210. package/templates/app/403/page.tsx +0 -89
  211. package/templates/app/api/auth/[...all]/route.ts +0 -78
  212. package/templates/app/api/cron/billing/lifecycle/route.ts +0 -98
  213. package/templates/app/api/csp-report/route.ts +0 -175
  214. package/templates/app/api/devtools/config/entities/route.ts +0 -108
  215. package/templates/app/api/devtools/config/theme/route.ts +0 -66
  216. package/templates/app/api/devtools/tests/[...path]/route.ts +0 -130
  217. package/templates/app/api/devtools/tests/route.ts +0 -134
  218. package/templates/app/api/health/route.ts +0 -29
  219. package/templates/app/api/internal/user-metadata/route.ts +0 -36
  220. package/templates/app/api/superadmin/subscriptions/route.ts +0 -310
  221. package/templates/app/api/superadmin/teams/[teamId]/route.ts +0 -286
  222. package/templates/app/api/superadmin/teams/route.ts +0 -188
  223. package/templates/app/api/superadmin/users/[userId]/route.ts +0 -540
  224. package/templates/app/api/superadmin/users/route.ts +0 -323
  225. package/templates/app/api/user/delete-account/route.ts +0 -55
  226. package/templates/app/api/user/plan-flags/route.ts +0 -283
  227. package/templates/app/api/user/profile/route.ts +0 -133
  228. package/templates/app/api/v1/[entity]/[id]/child/[childType]/[childId]/route.ts +0 -210
  229. package/templates/app/api/v1/[entity]/[id]/child/[childType]/route.ts +0 -331
  230. package/templates/app/api/v1/[entity]/[id]/route.ts +0 -35
  231. package/templates/app/api/v1/[entity]/docs.md +0 -369
  232. package/templates/app/api/v1/[entity]/presets.ts +0 -194
  233. package/templates/app/api/v1/[entity]/route.ts +0 -31
  234. package/templates/app/api/v1/api-keys/[id]/route.ts +0 -303
  235. package/templates/app/api/v1/api-keys/docs.md +0 -101
  236. package/templates/app/api/v1/api-keys/presets.ts +0 -31
  237. package/templates/app/api/v1/api-keys/route.ts +0 -250
  238. package/templates/app/api/v1/auth/docs.md +0 -184
  239. package/templates/app/api/v1/auth/presets.ts +0 -44
  240. package/templates/app/api/v1/auth/signup-with-invite/route.ts +0 -227
  241. package/templates/app/api/v1/billing/cancel/route.ts +0 -206
  242. package/templates/app/api/v1/billing/change-plan/route.ts +0 -97
  243. package/templates/app/api/v1/billing/check-action/route.ts +0 -81
  244. package/templates/app/api/v1/billing/checkout/route.ts +0 -124
  245. package/templates/app/api/v1/billing/docs.md +0 -209
  246. package/templates/app/api/v1/billing/plans/route.ts +0 -85
  247. package/templates/app/api/v1/billing/portal/route.ts +0 -90
  248. package/templates/app/api/v1/billing/presets.ts +0 -121
  249. package/templates/app/api/v1/billing/webhooks/stripe/route.ts +0 -428
  250. package/templates/app/api/v1/blocks/[slug]/route.ts +0 -29
  251. package/templates/app/api/v1/blocks/docs.md +0 -173
  252. package/templates/app/api/v1/blocks/presets.ts +0 -121
  253. package/templates/app/api/v1/blocks/route.ts +0 -45
  254. package/templates/app/api/v1/blocks/validate/route.ts +0 -45
  255. package/templates/app/api/v1/cron/docs.md +0 -116
  256. package/templates/app/api/v1/cron/presets.ts +0 -26
  257. package/templates/app/api/v1/cron/process/route.ts +0 -108
  258. package/templates/app/api/v1/devtools/blocks/route.ts +0 -82
  259. package/templates/app/api/v1/devtools/docs/route.ts +0 -150
  260. package/templates/app/api/v1/devtools/docs.md +0 -204
  261. package/templates/app/api/v1/devtools/features/route.ts +0 -61
  262. package/templates/app/api/v1/devtools/flows/route.ts +0 -61
  263. package/templates/app/api/v1/devtools/presets.ts +0 -113
  264. package/templates/app/api/v1/devtools/scheduled-actions/route.ts +0 -120
  265. package/templates/app/api/v1/devtools/testing/route.ts +0 -82
  266. package/templates/app/api/v1/media/docs.md +0 -117
  267. package/templates/app/api/v1/media/presets.ts +0 -24
  268. package/templates/app/api/v1/media/upload/route.ts +0 -150
  269. package/templates/app/api/v1/patterns/[id]/usages/route.ts +0 -116
  270. package/templates/app/api/v1/plugin/[...path]/route.ts +0 -373
  271. package/templates/app/api/v1/plugin/docs.md +0 -79
  272. package/templates/app/api/v1/plugin/presets.ts +0 -21
  273. package/templates/app/api/v1/plugin/route.ts +0 -96
  274. package/templates/app/api/v1/post-categories/[id]/route.ts +0 -255
  275. package/templates/app/api/v1/post-categories/docs.md +0 -134
  276. package/templates/app/api/v1/post-categories/presets.ts +0 -78
  277. package/templates/app/api/v1/post-categories/route.ts +0 -119
  278. package/templates/app/api/v1/team-invitations/[token]/accept/route.ts +0 -179
  279. package/templates/app/api/v1/team-invitations/[token]/decline/route.ts +0 -120
  280. package/templates/app/api/v1/team-invitations/[token]/route.ts +0 -89
  281. package/templates/app/api/v1/team-invitations/docs.md +0 -88
  282. package/templates/app/api/v1/team-invitations/presets.ts +0 -43
  283. package/templates/app/api/v1/team-invitations/route.ts +0 -114
  284. package/templates/app/api/v1/teams/[teamId]/invitations/route.ts +0 -171
  285. package/templates/app/api/v1/teams/[teamId]/invoices/[invoiceNumber]/route.ts +0 -105
  286. package/templates/app/api/v1/teams/[teamId]/invoices/route.ts +0 -125
  287. package/templates/app/api/v1/teams/[teamId]/members/[memberId]/route.ts +0 -263
  288. package/templates/app/api/v1/teams/[teamId]/members/route.ts +0 -358
  289. package/templates/app/api/v1/teams/[teamId]/route.ts +0 -322
  290. package/templates/app/api/v1/teams/[teamId]/subscription/route.ts +0 -50
  291. package/templates/app/api/v1/teams/[teamId]/usage/[limitSlug]/route.ts +0 -91
  292. package/templates/app/api/v1/teams/docs.md +0 -320
  293. package/templates/app/api/v1/teams/presets.ts +0 -178
  294. package/templates/app/api/v1/teams/route.ts +0 -293
  295. package/templates/app/api/v1/teams/switch/route.ts +0 -88
  296. package/templates/app/api/v1/theme/[...path]/route.ts +0 -361
  297. package/templates/app/api/v1/theme/docs.md +0 -74
  298. package/templates/app/api/v1/theme/presets.ts +0 -21
  299. package/templates/app/api/v1/theme/route.ts +0 -96
  300. package/templates/app/api/v1/users/[id]/meta/[key]/route.ts +0 -363
  301. package/templates/app/api/v1/users/[id]/route.ts +0 -302
  302. package/templates/app/api/v1/users/docs.md +0 -93
  303. package/templates/app/api/v1/users/presets.ts +0 -59
  304. package/templates/app/api/v1/users/route.ts +0 -197
  305. package/templates/app/dashboard/(main)/[entity]/[id]/edit/page.tsx +0 -117
  306. package/templates/app/dashboard/(main)/[entity]/[id]/page.tsx +0 -103
  307. package/templates/app/dashboard/(main)/[entity]/create/page.tsx +0 -95
  308. package/templates/app/dashboard/(main)/[entity]/error.tsx +0 -51
  309. package/templates/app/dashboard/(main)/[entity]/layout.tsx +0 -113
  310. package/templates/app/dashboard/(main)/[entity]/loading.tsx +0 -61
  311. package/templates/app/dashboard/(main)/[entity]/page.tsx +0 -90
  312. package/templates/app/dashboard/(main)/layout.tsx +0 -98
  313. package/templates/app/dashboard/(main)/loading.tsx +0 -5
  314. package/templates/app/dashboard/(main)/page.tsx +0 -201
  315. package/templates/app/dashboard/(main)/patterns/[id]/edit/page.tsx +0 -114
  316. package/templates/app/dashboard/(main)/patterns/[id]/page.tsx +0 -20
  317. package/templates/app/dashboard/(main)/patterns/[id]/reports/page.tsx +0 -171
  318. package/templates/app/dashboard/(main)/patterns/create/page.tsx +0 -86
  319. package/templates/app/dashboard/(main)/patterns/page.tsx +0 -444
  320. package/templates/app/dashboard/features/analytics/page.tsx +0 -35
  321. package/templates/app/dashboard/features/automation/page.tsx +0 -35
  322. package/templates/app/dashboard/features/layout.tsx +0 -13
  323. package/templates/app/dashboard/features/loading.tsx +0 -5
  324. package/templates/app/dashboard/features/webhooks/page.tsx +0 -35
  325. package/templates/app/dashboard/layout.tsx +0 -86
  326. package/templates/app/dashboard/permission-denied/page.tsx +0 -29
  327. package/templates/app/dashboard/settings/api-keys/loading.tsx +0 -5
  328. package/templates/app/dashboard/settings/api-keys/page.tsx +0 -513
  329. package/templates/app/dashboard/settings/billing/loading.tsx +0 -5
  330. package/templates/app/dashboard/settings/billing/page.tsx +0 -284
  331. package/templates/app/dashboard/settings/invoices/[invoiceNumber]/page.tsx +0 -222
  332. package/templates/app/dashboard/settings/invoices/loading.tsx +0 -5
  333. package/templates/app/dashboard/settings/invoices/page.tsx +0 -82
  334. package/templates/app/dashboard/settings/layout.tsx +0 -151
  335. package/templates/app/dashboard/settings/loading.tsx +0 -5
  336. package/templates/app/dashboard/settings/notifications/loading.tsx +0 -5
  337. package/templates/app/dashboard/settings/notifications/page.tsx +0 -462
  338. package/templates/app/dashboard/settings/page.tsx +0 -92
  339. package/templates/app/dashboard/settings/password/loading.tsx +0 -5
  340. package/templates/app/dashboard/settings/password/page.tsx +0 -306
  341. package/templates/app/dashboard/settings/plans/loading.tsx +0 -5
  342. package/templates/app/dashboard/settings/plans/page.tsx +0 -40
  343. package/templates/app/dashboard/settings/profile/loading.tsx +0 -5
  344. package/templates/app/dashboard/settings/profile/page.tsx +0 -686
  345. package/templates/app/dashboard/settings/security/loading.tsx +0 -5
  346. package/templates/app/dashboard/settings/security/page.tsx +0 -505
  347. package/templates/app/dashboard/settings/teams/loading.tsx +0 -5
  348. package/templates/app/dashboard/settings/teams/page.tsx +0 -272
  349. package/templates/app/dashboard/settings/teams/permissions/page.tsx +0 -92
  350. package/templates/app/devtools/blocks/[slug]/page.tsx +0 -39
  351. package/templates/app/devtools/blocks/page.tsx +0 -31
  352. package/templates/app/devtools/config/page.tsx +0 -31
  353. package/templates/app/devtools/features/page.tsx +0 -31
  354. package/templates/app/devtools/flows/page.tsx +0 -31
  355. package/templates/app/devtools/layout.tsx +0 -58
  356. package/templates/app/devtools/page.tsx +0 -121
  357. package/templates/app/devtools/scheduled-actions/page.tsx +0 -157
  358. package/templates/app/devtools/style/page.tsx +0 -330
  359. package/templates/app/devtools/tags/page.tsx +0 -31
  360. package/templates/app/devtools/tests/[[...path]]/page.tsx +0 -47
  361. package/templates/app/favicon.ico +0 -0
  362. package/templates/app/globals.css +0 -12
  363. package/templates/app/layout.tsx +0 -96
  364. package/templates/app/public/page.tsx +0 -30
  365. package/templates/app/superadmin/docs/[section]/[page]/page.tsx +0 -92
  366. package/templates/app/superadmin/docs/page.tsx +0 -75
  367. package/templates/app/superadmin/layout.tsx +0 -67
  368. package/templates/app/superadmin/page.tsx +0 -149
  369. package/templates/app/superadmin/subscriptions/page.tsx +0 -655
  370. package/templates/app/superadmin/team-roles/page.tsx +0 -493
  371. package/templates/app/superadmin/teams/[teamId]/page.tsx +0 -687
  372. package/templates/app/superadmin/teams/page.tsx +0 -302
  373. package/templates/app/superadmin/users/[userId]/page.tsx +0 -548
  374. package/templates/app/superadmin/users/page.tsx +0 -528
@@ -1,373 +0,0 @@
1
- /**
2
- * Dynamic Plugin API Router with Catch-All Paths
3
- *
4
- * Handles API requests for any plugin with nested paths
5
- * Route: /api/v1/plugins/[...path]
6
- */
7
-
8
- import { NextRequest, NextResponse } from 'next/server'
9
- import { PluginService, type RouteFileEndpoint, type PluginRegistryEntry } from '@nextsparkjs/core/lib/services'
10
- import { PLUGIN_REGISTRY } from '@nextsparkjs/registries/plugin-registry'
11
-
12
- export async function GET(
13
- request: NextRequest,
14
- { params }: { params: Promise<{ path: string[] }> }
15
- ) {
16
- const { path } = await params
17
- return handlePluginRequest(request, path, 'GET')
18
- }
19
-
20
- export async function POST(
21
- request: NextRequest,
22
- { params }: { params: Promise<{ path: string[] }> }
23
- ) {
24
- const { path } = await params
25
- return handlePluginRequest(request, path, 'POST')
26
- }
27
-
28
- export async function PUT(
29
- request: NextRequest,
30
- { params }: { params: Promise<{ path: string[] }> }
31
- ) {
32
- const { path } = await params
33
- return handlePluginRequest(request, path, 'PUT')
34
- }
35
-
36
- export async function DELETE(
37
- request: NextRequest,
38
- { params }: { params: Promise<{ path: string[] }> }
39
- ) {
40
- const { path } = await params
41
- return handlePluginRequest(request, path, 'DELETE')
42
- }
43
-
44
- export async function PATCH(
45
- request: NextRequest,
46
- { params }: { params: Promise<{ path: string[] }> }
47
- ) {
48
- const { path } = await params
49
- return handlePluginRequest(request, path, 'PATCH')
50
- }
51
-
52
- /**
53
- * Handle plugin API requests with nested paths
54
- */
55
- async function handlePluginRequest(
56
- request: NextRequest,
57
- pathSegments: string[],
58
- method: string
59
- ): Promise<NextResponse> {
60
- console.log(`[Plugin API] Handling request: ${method} ${pathSegments.join('/')}`)
61
-
62
- try {
63
- // Extract plugin name from path segments
64
- if (!pathSegments || pathSegments.length === 0) {
65
- return NextResponse.json(
66
- {
67
- error: 'Plugin name is required',
68
- format: '/api/v1/plugins/{pluginName}/{endpoint}'
69
- },
70
- { status: 400 }
71
- )
72
- }
73
-
74
- const [pluginName, ...remainingPath] = pathSegments
75
-
76
- // Get registered plugins
77
- const plugins = PluginService.getAll()
78
- const plugin = plugins.find(p => p.name === pluginName)
79
-
80
- if (!plugin) {
81
- return NextResponse.json(
82
- {
83
- error: 'Plugin not found',
84
- requested: pluginName,
85
- available: plugins.map(p => p.name)
86
- },
87
- { status: 404 }
88
- )
89
- }
90
-
91
- if (!plugin.enabled) {
92
- return NextResponse.json(
93
- { error: 'Plugin is disabled' },
94
- { status: 403 }
95
- )
96
- }
97
-
98
- // Construct the endpoint path
99
- const endpointPath = remainingPath.length > 0 ? '/' + remainingPath.join('/') : '/'
100
-
101
- // Construct the full request path for registry lookup
102
- const requestPath = `/api/v1/plugin/${pathSegments.join('/')}`
103
-
104
- // Check if route exists in registry metadata
105
- if (PluginService.hasRoute(requestPath, method)) {
106
- console.log(`[Plugin API] Route found in registry: ${requestPath}`)
107
- // Note: Route exists but execution handled by fallback mechanisms below
108
- // This maintains zero-dynamic-imports policy
109
- } else {
110
- console.log(`[Plugin API] No route found for ${requestPath}, method: ${method}`)
111
-
112
- // Check if this plugin has route files but handler not found - possible configuration issue
113
- const pluginEntry = (PLUGIN_REGISTRY as Record<string, PluginRegistryEntry>)[pluginName]
114
- if (pluginEntry?.routeFiles && pluginEntry.routeFiles.length > 0) {
115
- console.warn(`[Plugin API] Plugin '${pluginName}' has route files but route '${requestPath}' not found in registry`)
116
- }
117
- }
118
-
119
- // Fallback: Try to load plugin's API handler from registry
120
- const pluginEntry2 = (PLUGIN_REGISTRY as Record<string, PluginRegistryEntry>)[pluginName]
121
- if (pluginEntry2?.hasAPI) {
122
- const response = await loadPluginAPIFromRegistry(pluginName, request, method, endpointPath)
123
- if (response) {
124
- return response
125
- }
126
- }
127
-
128
-
129
- // Fallback to plugin's built-in API handler
130
- if (plugin.api && typeof plugin.api.handler === 'function') {
131
- return plugin.api.handler(request, method, endpointPath)
132
- }
133
-
134
- // Default plugin info endpoint
135
- if (endpointPath === '/' && method === 'GET') {
136
- return NextResponse.json({
137
- plugin: {
138
- name: plugin.name,
139
- displayName: plugin.displayName,
140
- version: plugin.version,
141
- description: plugin.description,
142
- enabled: plugin.enabled,
143
- dependencies: plugin.dependencies,
144
- hasAPI: !!plugin.api || hasPluginAPIFiles(pluginName) || PluginService.getPluginRouteEndpoints().length > 0,
145
- components: plugin.components ? Object.keys(plugin.components) : [],
146
- services: plugin.services ? Object.keys(plugin.services) : []
147
- }
148
- })
149
- }
150
-
151
- // Plugin doesn't support this endpoint
152
- return NextResponse.json(
153
- {
154
- error: 'Endpoint not supported by plugin',
155
- plugin: plugin.name,
156
- path: endpointPath,
157
- method,
158
- availableEndpoints: getPluginEndpoints(pluginName)
159
- },
160
- { status: 404 }
161
- )
162
-
163
- } catch (error) {
164
- console.error('[Plugin API] Error handling nested request:', error)
165
-
166
- return NextResponse.json(
167
- {
168
- error: 'Internal server error',
169
- message: error instanceof Error ? error.message : 'Unknown error'
170
- },
171
- { status: 500 }
172
- )
173
- }
174
- }
175
-
176
- /**
177
- * Match route pattern with dynamic parameters
178
- * Example: 'orders/[orderId]/items' matches 'orders/123/items'
179
- */
180
- function matchRoutePattern(pattern: string, path: string): { matches: boolean; params: Record<string, string> } {
181
- const params: Record<string, string> = {}
182
-
183
- // Split both pattern and path into segments
184
- const patternSegments = pattern.split('/').filter(Boolean)
185
- const pathSegments = path.split('/').filter(Boolean)
186
-
187
- // Must have same number of segments
188
- if (patternSegments.length !== pathSegments.length) {
189
- return { matches: false, params }
190
- }
191
-
192
- // Check each segment
193
- for (let i = 0; i < patternSegments.length; i++) {
194
- const patternSeg = patternSegments[i]
195
- const pathSeg = pathSegments[i]
196
-
197
- // Check if this is a dynamic parameter [paramName]
198
- if (patternSeg.startsWith('[') && patternSeg.endsWith(']')) {
199
- // Extract parameter name
200
- const paramName = patternSeg.slice(1, -1)
201
- params[paramName] = pathSeg
202
- } else {
203
- // Static segment must match exactly
204
- if (patternSeg !== pathSeg) {
205
- return { matches: false, params: {} }
206
- }
207
- }
208
- }
209
-
210
- return { matches: true, params }
211
- }
212
-
213
- /**
214
- * Load plugin API handler from registry (dynamic plugin loading)
215
- */
216
- async function loadPluginAPIFromRegistry(
217
- pluginName: string,
218
- request: NextRequest,
219
- method: string,
220
- path: string
221
- ): Promise<NextResponse | null> {
222
- try {
223
- const pluginEntry = (PLUGIN_REGISTRY as Record<string, PluginRegistryEntry>)[pluginName]
224
-
225
- if (!pluginEntry) {
226
- return null
227
- }
228
-
229
- // First, check if the plugin has a config-based API handler
230
- const plugin = pluginEntry.config
231
- if (plugin.api && typeof plugin.api.handler === 'function') {
232
- console.log(`[Plugin API] Using ${pluginName} config handler for ${path}`)
233
-
234
- // Ensure endpoints are registered if the plugin has a registration function
235
- if (plugin.api.registerEndpoints && typeof plugin.api.registerEndpoints === 'function') {
236
- plugin.api.registerEndpoints()
237
- }
238
-
239
- return plugin.api.handler(request, method, path)
240
- }
241
-
242
- // Use the plugin config's API handler if available
243
- console.log(`[Plugin API] Checking plugin config for API handler`)
244
-
245
- // If no API handler in config, and the plugin has route files, show available routes
246
- if (pluginEntry.routeFiles && pluginEntry.routeFiles.length > 0) {
247
- // Find matching route with dynamic parameter support
248
- let matchedRoute: RouteFileEndpoint | undefined
249
- let extractedParams: Record<string, string> = {}
250
-
251
- const endpointPath = path.substring(1) // Remove leading slash
252
-
253
- for (const route of pluginEntry.routeFiles) {
254
- const { matches, params } = matchRoutePattern(route.relativePath, endpointPath)
255
-
256
- if (matches && route.methods.includes(method)) {
257
- matchedRoute = route
258
- extractedParams = params
259
- break
260
- }
261
- }
262
-
263
- if (matchedRoute) {
264
- console.log(`[Plugin API] Found route file for ${pluginName}: ${matchedRoute.relativePath}`)
265
- console.log(`[Plugin API] Extracted params:`, extractedParams)
266
-
267
- // Execute the plugin route using static imports (Next.js compatible)
268
- try {
269
- console.log(`[Plugin API] Executing ${method} for ${pluginName}:${matchedRoute.relativePath}`)
270
-
271
- // Use the pattern from registry for handler lookup (not the actual path)
272
- const routeKey = `${pluginName}/${matchedRoute.relativePath}`
273
- const pluginHandler = RouteHandlerService.getPluginHandler(routeKey, method)
274
-
275
- if (!pluginHandler) {
276
- console.error(`[Plugin API] Handler not found for ${routeKey}:${method}`)
277
- return NextResponse.json(
278
- {
279
- error: `Method ${method} not supported`,
280
- plugin: pluginName,
281
- route: matchedRoute.relativePath,
282
- availableMethods: matchedRoute.methods
283
- },
284
- { status: 405 }
285
- )
286
- }
287
-
288
- // Execute the plugin handler with extracted dynamic parameters
289
- return await pluginHandler(request, {
290
- params: Promise.resolve(extractedParams)
291
- })
292
-
293
- } catch (executionError) {
294
- console.error(`[Plugin API] Error executing plugin route:`, executionError)
295
-
296
- return NextResponse.json(
297
- {
298
- success: false,
299
- error: 'Plugin route execution failed',
300
- plugin: pluginName,
301
- route: matchedRoute.relativePath,
302
- message: executionError instanceof Error ? executionError.message : 'Unknown execution error',
303
- details: 'Failed to execute plugin route handler'
304
- },
305
- { status: 500 }
306
- )
307
- }
308
- }
309
- }
310
-
311
- return null
312
-
313
- } catch (error) {
314
- console.error(`[Plugin API] Error loading ${pluginName} API from registry:`, error)
315
-
316
- return NextResponse.json(
317
- {
318
- error: 'Plugin API error',
319
- plugin: pluginName,
320
- message: error instanceof Error ? error.message : 'Unknown error'
321
- },
322
- { status: 500 }
323
- )
324
- }
325
- }
326
-
327
- /**
328
- * Check if plugin has API files (using registry)
329
- */
330
- function hasPluginAPIFiles(pluginName: string): boolean {
331
- const pluginEntry = (PLUGIN_REGISTRY as Record<string, PluginRegistryEntry>)[pluginName]
332
- return pluginEntry?.hasAPI || false
333
- }
334
-
335
- interface PluginEndpoint {
336
- path: string
337
- methods: string[]
338
- description: string
339
- source: string
340
- }
341
-
342
- /**
343
- * Get available endpoints for a plugin (using registry)
344
- */
345
- function getPluginEndpoints(pluginName: string): PluginEndpoint[] {
346
- const endpoints = []
347
-
348
- // Get plugin's route file endpoints from registry
349
- const pluginEntry = (PLUGIN_REGISTRY as Record<string, PluginRegistryEntry>)[pluginName]
350
-
351
- if (pluginEntry?.routeFiles) {
352
- endpoints.push(...pluginEntry.routeFiles.map((endpoint: RouteFileEndpoint) => ({
353
- path: endpoint.relativePath === '/' ? '/' : '/' + endpoint.relativePath,
354
- methods: endpoint.methods,
355
- description: `Route file endpoint`,
356
- source: 'route-file'
357
- })))
358
- }
359
-
360
- // Add default endpoint if plugin has API but no specific routes
361
- if (pluginEntry?.hasAPI && endpoints.length === 0) {
362
- endpoints.push({ path: '/', methods: ['GET'], description: 'Basic API available', source: 'default' })
363
- }
364
-
365
- return endpoints.length > 0 ? endpoints : [{ path: '/', methods: ['GET'], description: 'Basic API available', source: 'default' }]
366
- }
367
-
368
- // ========== ROUTE HANDLER REGISTRY (Zero Runtime I/O) ==========
369
- // Import from auto-generated registry - NO direct imports from @/contents allowed
370
- // All route handlers are resolved at build time by scripts/build-registry.mjs
371
- // This provides ~17,255x performance improvement over dynamic imports
372
-
373
- import { RouteHandlerService } from '@nextsparkjs/core/lib/services/route-handler.service'
@@ -1,79 +0,0 @@
1
- # Plugin API
2
-
3
- Access plugin metadata and route plugin-specific endpoints.
4
-
5
- ## Overview
6
-
7
- The Plugin API provides endpoints to list installed plugins and their API capabilities. Plugin-specific endpoints are routed through `/api/v1/plugin/{pluginName}/...`.
8
-
9
- ## Authentication
10
-
11
- - **GET /api/v1/plugin** (list plugins) is public
12
- - Plugin-specific routes may have their own authentication requirements
13
-
14
- ## Endpoints
15
-
16
- ### List Plugins
17
- `GET /api/v1/plugin`
18
-
19
- Returns all registered plugins with their API status and endpoints.
20
-
21
- **Response:**
22
- ```json
23
- {
24
- "success": true,
25
- "plugins": [
26
- {
27
- "name": "email-notifications",
28
- "displayName": "Email Notifications",
29
- "version": "1.0.0",
30
- "description": "Send email notifications for various events",
31
- "enabled": true,
32
- "hasAPI": true,
33
- "apiEndpoints": [
34
- {
35
- "path": "/send",
36
- "methods": ["POST"],
37
- "description": "Route file endpoint"
38
- }
39
- ],
40
- "baseUrl": "/api/v1/plugins/email-notifications",
41
- "components": ["NotificationSettings", "EmailPreview"],
42
- "services": ["EmailService"]
43
- }
44
- ],
45
- "totalPlugins": 5,
46
- "enabledPlugins": 4,
47
- "pluginsWithAPI": 3
48
- }
49
- ```
50
-
51
- ### Plugin-Specific Routes
52
- `* /api/v1/plugin/{pluginName}/...`
53
-
54
- Each plugin can define its own API routes. These are handled by the catch-all route and forwarded to the plugin's route handlers.
55
-
56
- **Example:**
57
- - `POST /api/v1/plugin/email-notifications/send` - Send notification
58
- - `GET /api/v1/plugin/analytics/stats` - Get analytics data
59
-
60
- ## Plugin Structure
61
-
62
- Plugins can expose:
63
- - **API Routes**: Custom endpoints under `/api/v1/plugin/{name}/`
64
- - **Components**: React components for UI
65
- - **Services**: Business logic services
66
-
67
- ## Plugin Registry
68
-
69
- The plugin registry (`PLUGIN_REGISTRY`) contains metadata about each plugin:
70
- - `hasAPI`: Whether the plugin has API routes
71
- - `routeFiles`: List of available route endpoints
72
- - `enabled`: Whether the plugin is active
73
-
74
- ## Error Responses
75
-
76
- | Status | Description |
77
- |--------|-------------|
78
- | 404 | Plugin not found or route doesn't exist |
79
- | 500 | Server Error - Failed to list plugins |
@@ -1,21 +0,0 @@
1
- /**
2
- * API Presets for Plugin
3
- *
4
- * These presets appear in the DevTools API Explorer's "Presets" tab.
5
- */
6
-
7
- import { defineApiEndpoint } from '@nextsparkjs/core/types/api-presets'
8
-
9
- export default defineApiEndpoint({
10
- endpoint: '/api/v1/plugin',
11
- summary: 'Access plugin metadata and API routes',
12
- presets: [
13
- {
14
- id: 'list-plugins',
15
- title: 'List All Plugins',
16
- description: 'Get all registered plugins with API status',
17
- method: 'GET',
18
- tags: ['read', 'list']
19
- }
20
- ]
21
- })
@@ -1,96 +0,0 @@
1
- /**
2
- * Plugin API Base Route
3
- *
4
- * Lists all available plugins and their API status
5
- * Route: /api/v1/plugins
6
- */
7
-
8
- import { NextResponse } from 'next/server'
9
- import { PluginService, type PluginRegistryEntry } from '@nextsparkjs/core/lib/services'
10
- import { PLUGIN_REGISTRY } from '@nextsparkjs/registries/plugin-registry'
11
-
12
- export async function GET() {
13
- return listPluginsWithAPI()
14
- }
15
-
16
- /**
17
- * List all plugins with their API status
18
- */
19
- async function listPluginsWithAPI(): Promise<NextResponse> {
20
- try {
21
- const plugins = PluginService.getAll()
22
-
23
- const pluginsWithAPI = plugins.map((plugin) => {
24
- const hasAPIFiles = hasPluginAPIFiles(plugin.name)
25
- const endpoints = getPluginEndpoints(plugin.name)
26
-
27
- return {
28
- name: plugin.name,
29
- displayName: plugin.displayName,
30
- version: plugin.version,
31
- description: plugin.description,
32
- enabled: plugin.enabled,
33
- hasAPI: !!plugin.api || hasAPIFiles,
34
- apiEndpoints: endpoints,
35
- baseUrl: `/api/v1/plugins/${plugin.name}`,
36
- components: plugin.components ? Object.keys(plugin.components) : [],
37
- services: plugin.services ? Object.keys(plugin.services) : []
38
- }
39
- })
40
-
41
- return NextResponse.json({
42
- success: true,
43
- plugins: pluginsWithAPI,
44
- totalPlugins: plugins.length,
45
- enabledPlugins: plugins.filter(p => p.enabled).length,
46
- pluginsWithAPI: pluginsWithAPI.filter(p => p.hasAPI).length
47
- })
48
-
49
- } catch (error) {
50
- console.error('[Plugin API] Error listing plugins:', error)
51
-
52
- return NextResponse.json(
53
- {
54
- error: 'Failed to list plugins',
55
- message: error instanceof Error ? error.message : 'Unknown error'
56
- },
57
- { status: 500 }
58
- )
59
- }
60
- }
61
-
62
- /**
63
- * Check if plugin has API files (using registry)
64
- */
65
- function hasPluginAPIFiles(pluginName: string): boolean {
66
- const pluginEntry = (PLUGIN_REGISTRY as Record<string, PluginRegistryEntry>)[pluginName]
67
- return pluginEntry?.hasAPI || false
68
- }
69
-
70
- interface PluginEndpoint {
71
- path: string
72
- methods: string[]
73
- description: string
74
- }
75
-
76
- /**
77
- * Get available endpoints for a plugin (using registry)
78
- */
79
- function getPluginEndpoints(pluginName: string): PluginEndpoint[] {
80
- const pluginEntry = (PLUGIN_REGISTRY as Record<string, PluginRegistryEntry>)[pluginName]
81
-
82
- if (pluginEntry?.routeFiles) {
83
- return pluginEntry.routeFiles.map((endpoint) => ({
84
- path: endpoint.relativePath === '/' ? '/' : '/' + endpoint.relativePath,
85
- methods: endpoint.methods,
86
- description: 'Route file endpoint'
87
- }))
88
- }
89
-
90
- // Default endpoint if plugin has API but no specific routes
91
- if (pluginEntry?.hasAPI) {
92
- return [{ path: '/', methods: ['GET'], description: 'Basic plugin info' }]
93
- }
94
-
95
- return []
96
- }