@nextsparkjs/core 0.1.0-beta.81 → 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 (376) 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/templates/next.config.mjs +5 -2
  10. package/dist/types/theme.d.ts +2 -0
  11. package/dist/types/theme.d.ts.map +1 -1
  12. package/package.json +16 -16
  13. package/scripts/build/docs-registry.mjs +0 -0
  14. package/scripts/create-theme.mjs +0 -0
  15. package/scripts/deploy/release-version.mjs +0 -0
  16. package/scripts/deploy/vercel-deploy.mjs +0 -0
  17. package/scripts/dev/watch-plugins.mjs +0 -0
  18. package/scripts/maintenance/update-core.mjs +0 -0
  19. package/scripts/setup/npm-postinstall.mjs +0 -0
  20. package/scripts/setup/setup-claude.mjs +0 -0
  21. package/scripts/validation/check-imports.sh +0 -0
  22. package/templates/next.config.mjs +5 -2
  23. package/dist/templates/app/(auth)/forgot-password/page.tsx +0 -216
  24. package/dist/templates/app/(auth)/layout.tsx +0 -51
  25. package/dist/templates/app/(auth)/login/page.tsx +0 -21
  26. package/dist/templates/app/(auth)/reset-password/page.tsx +0 -212
  27. package/dist/templates/app/(auth)/signup/page.tsx +0 -21
  28. package/dist/templates/app/(auth)/verify-email/page.tsx +0 -190
  29. package/dist/templates/app/(public)/[...slug]/page.tsx +0 -378
  30. package/dist/templates/app/(public)/docs/[section]/[page]/page.tsx +0 -90
  31. package/dist/templates/app/(public)/docs/layout.tsx +0 -25
  32. package/dist/templates/app/(public)/docs/page.tsx +0 -81
  33. package/dist/templates/app/(public)/layout.tsx +0 -41
  34. package/dist/templates/app/(public)/page.tsx +0 -19
  35. package/dist/templates/app/403/page.tsx +0 -89
  36. package/dist/templates/app/api/auth/[...all]/route.ts +0 -78
  37. package/dist/templates/app/api/cron/billing/lifecycle/route.ts +0 -98
  38. package/dist/templates/app/api/csp-report/route.ts +0 -175
  39. package/dist/templates/app/api/devtools/config/entities/route.ts +0 -108
  40. package/dist/templates/app/api/devtools/config/theme/route.ts +0 -66
  41. package/dist/templates/app/api/devtools/tests/[...path]/route.ts +0 -130
  42. package/dist/templates/app/api/devtools/tests/route.ts +0 -134
  43. package/dist/templates/app/api/health/route.ts +0 -29
  44. package/dist/templates/app/api/internal/user-metadata/route.ts +0 -36
  45. package/dist/templates/app/api/superadmin/subscriptions/route.ts +0 -310
  46. package/dist/templates/app/api/superadmin/teams/[teamId]/route.ts +0 -286
  47. package/dist/templates/app/api/superadmin/teams/route.ts +0 -188
  48. package/dist/templates/app/api/superadmin/users/[userId]/route.ts +0 -540
  49. package/dist/templates/app/api/superadmin/users/route.ts +0 -323
  50. package/dist/templates/app/api/user/delete-account/route.ts +0 -55
  51. package/dist/templates/app/api/user/plan-flags/route.ts +0 -283
  52. package/dist/templates/app/api/user/profile/route.ts +0 -133
  53. package/dist/templates/app/api/v1/[entity]/[id]/child/[childType]/[childId]/route.ts +0 -210
  54. package/dist/templates/app/api/v1/[entity]/[id]/child/[childType]/route.ts +0 -331
  55. package/dist/templates/app/api/v1/[entity]/[id]/route.ts +0 -35
  56. package/dist/templates/app/api/v1/[entity]/docs.md +0 -369
  57. package/dist/templates/app/api/v1/[entity]/presets.ts +0 -194
  58. package/dist/templates/app/api/v1/[entity]/route.ts +0 -31
  59. package/dist/templates/app/api/v1/api-keys/[id]/route.ts +0 -303
  60. package/dist/templates/app/api/v1/api-keys/docs.md +0 -101
  61. package/dist/templates/app/api/v1/api-keys/presets.ts +0 -31
  62. package/dist/templates/app/api/v1/api-keys/route.ts +0 -250
  63. package/dist/templates/app/api/v1/auth/docs.md +0 -184
  64. package/dist/templates/app/api/v1/auth/presets.ts +0 -44
  65. package/dist/templates/app/api/v1/auth/signup-with-invite/route.ts +0 -227
  66. package/dist/templates/app/api/v1/billing/cancel/route.ts +0 -206
  67. package/dist/templates/app/api/v1/billing/change-plan/route.ts +0 -97
  68. package/dist/templates/app/api/v1/billing/check-action/route.ts +0 -81
  69. package/dist/templates/app/api/v1/billing/checkout/route.ts +0 -124
  70. package/dist/templates/app/api/v1/billing/docs.md +0 -209
  71. package/dist/templates/app/api/v1/billing/plans/route.ts +0 -85
  72. package/dist/templates/app/api/v1/billing/portal/route.ts +0 -90
  73. package/dist/templates/app/api/v1/billing/presets.ts +0 -121
  74. package/dist/templates/app/api/v1/billing/webhooks/stripe/route.ts +0 -428
  75. package/dist/templates/app/api/v1/blocks/[slug]/route.ts +0 -29
  76. package/dist/templates/app/api/v1/blocks/docs.md +0 -173
  77. package/dist/templates/app/api/v1/blocks/presets.ts +0 -121
  78. package/dist/templates/app/api/v1/blocks/route.ts +0 -45
  79. package/dist/templates/app/api/v1/blocks/validate/route.ts +0 -45
  80. package/dist/templates/app/api/v1/cron/docs.md +0 -116
  81. package/dist/templates/app/api/v1/cron/presets.ts +0 -26
  82. package/dist/templates/app/api/v1/cron/process/route.ts +0 -108
  83. package/dist/templates/app/api/v1/devtools/blocks/route.ts +0 -82
  84. package/dist/templates/app/api/v1/devtools/docs/route.ts +0 -150
  85. package/dist/templates/app/api/v1/devtools/docs.md +0 -204
  86. package/dist/templates/app/api/v1/devtools/features/route.ts +0 -61
  87. package/dist/templates/app/api/v1/devtools/flows/route.ts +0 -61
  88. package/dist/templates/app/api/v1/devtools/presets.ts +0 -113
  89. package/dist/templates/app/api/v1/devtools/scheduled-actions/route.ts +0 -120
  90. package/dist/templates/app/api/v1/devtools/testing/route.ts +0 -82
  91. package/dist/templates/app/api/v1/media/docs.md +0 -117
  92. package/dist/templates/app/api/v1/media/presets.ts +0 -24
  93. package/dist/templates/app/api/v1/media/upload/route.ts +0 -150
  94. package/dist/templates/app/api/v1/patterns/[id]/usages/route.ts +0 -116
  95. package/dist/templates/app/api/v1/plugin/[...path]/route.ts +0 -373
  96. package/dist/templates/app/api/v1/plugin/docs.md +0 -79
  97. package/dist/templates/app/api/v1/plugin/presets.ts +0 -21
  98. package/dist/templates/app/api/v1/plugin/route.ts +0 -96
  99. package/dist/templates/app/api/v1/post-categories/[id]/route.ts +0 -255
  100. package/dist/templates/app/api/v1/post-categories/docs.md +0 -134
  101. package/dist/templates/app/api/v1/post-categories/presets.ts +0 -78
  102. package/dist/templates/app/api/v1/post-categories/route.ts +0 -119
  103. package/dist/templates/app/api/v1/team-invitations/[token]/accept/route.ts +0 -179
  104. package/dist/templates/app/api/v1/team-invitations/[token]/decline/route.ts +0 -120
  105. package/dist/templates/app/api/v1/team-invitations/[token]/route.ts +0 -89
  106. package/dist/templates/app/api/v1/team-invitations/docs.md +0 -88
  107. package/dist/templates/app/api/v1/team-invitations/presets.ts +0 -43
  108. package/dist/templates/app/api/v1/team-invitations/route.ts +0 -114
  109. package/dist/templates/app/api/v1/teams/[teamId]/invitations/route.ts +0 -171
  110. package/dist/templates/app/api/v1/teams/[teamId]/invoices/[invoiceNumber]/route.ts +0 -105
  111. package/dist/templates/app/api/v1/teams/[teamId]/invoices/route.ts +0 -125
  112. package/dist/templates/app/api/v1/teams/[teamId]/members/[memberId]/route.ts +0 -263
  113. package/dist/templates/app/api/v1/teams/[teamId]/members/route.ts +0 -358
  114. package/dist/templates/app/api/v1/teams/[teamId]/route.ts +0 -322
  115. package/dist/templates/app/api/v1/teams/[teamId]/subscription/route.ts +0 -50
  116. package/dist/templates/app/api/v1/teams/[teamId]/usage/[limitSlug]/route.ts +0 -91
  117. package/dist/templates/app/api/v1/teams/docs.md +0 -320
  118. package/dist/templates/app/api/v1/teams/presets.ts +0 -178
  119. package/dist/templates/app/api/v1/teams/route.ts +0 -293
  120. package/dist/templates/app/api/v1/teams/switch/route.ts +0 -88
  121. package/dist/templates/app/api/v1/theme/[...path]/route.ts +0 -361
  122. package/dist/templates/app/api/v1/theme/docs.md +0 -74
  123. package/dist/templates/app/api/v1/theme/presets.ts +0 -21
  124. package/dist/templates/app/api/v1/theme/route.ts +0 -96
  125. package/dist/templates/app/api/v1/users/[id]/meta/[key]/route.ts +0 -363
  126. package/dist/templates/app/api/v1/users/[id]/route.ts +0 -302
  127. package/dist/templates/app/api/v1/users/docs.md +0 -93
  128. package/dist/templates/app/api/v1/users/presets.ts +0 -59
  129. package/dist/templates/app/api/v1/users/route.ts +0 -197
  130. package/dist/templates/app/dashboard/(main)/[entity]/[id]/edit/page.tsx +0 -117
  131. package/dist/templates/app/dashboard/(main)/[entity]/[id]/page.tsx +0 -103
  132. package/dist/templates/app/dashboard/(main)/[entity]/create/page.tsx +0 -95
  133. package/dist/templates/app/dashboard/(main)/[entity]/error.tsx +0 -51
  134. package/dist/templates/app/dashboard/(main)/[entity]/layout.tsx +0 -113
  135. package/dist/templates/app/dashboard/(main)/[entity]/loading.tsx +0 -61
  136. package/dist/templates/app/dashboard/(main)/[entity]/page.tsx +0 -90
  137. package/dist/templates/app/dashboard/(main)/layout.tsx +0 -98
  138. package/dist/templates/app/dashboard/(main)/loading.tsx +0 -5
  139. package/dist/templates/app/dashboard/(main)/page.tsx +0 -201
  140. package/dist/templates/app/dashboard/(main)/patterns/[id]/edit/page.tsx +0 -114
  141. package/dist/templates/app/dashboard/(main)/patterns/[id]/page.tsx +0 -20
  142. package/dist/templates/app/dashboard/(main)/patterns/[id]/reports/page.tsx +0 -171
  143. package/dist/templates/app/dashboard/(main)/patterns/create/page.tsx +0 -86
  144. package/dist/templates/app/dashboard/(main)/patterns/page.tsx +0 -444
  145. package/dist/templates/app/dashboard/features/analytics/page.tsx +0 -35
  146. package/dist/templates/app/dashboard/features/automation/page.tsx +0 -35
  147. package/dist/templates/app/dashboard/features/layout.tsx +0 -13
  148. package/dist/templates/app/dashboard/features/loading.tsx +0 -5
  149. package/dist/templates/app/dashboard/features/webhooks/page.tsx +0 -35
  150. package/dist/templates/app/dashboard/layout.tsx +0 -86
  151. package/dist/templates/app/dashboard/permission-denied/page.tsx +0 -29
  152. package/dist/templates/app/dashboard/settings/api-keys/loading.tsx +0 -5
  153. package/dist/templates/app/dashboard/settings/api-keys/page.tsx +0 -513
  154. package/dist/templates/app/dashboard/settings/billing/loading.tsx +0 -5
  155. package/dist/templates/app/dashboard/settings/billing/page.tsx +0 -284
  156. package/dist/templates/app/dashboard/settings/invoices/[invoiceNumber]/page.tsx +0 -222
  157. package/dist/templates/app/dashboard/settings/invoices/loading.tsx +0 -5
  158. package/dist/templates/app/dashboard/settings/invoices/page.tsx +0 -82
  159. package/dist/templates/app/dashboard/settings/layout.tsx +0 -151
  160. package/dist/templates/app/dashboard/settings/loading.tsx +0 -5
  161. package/dist/templates/app/dashboard/settings/notifications/loading.tsx +0 -5
  162. package/dist/templates/app/dashboard/settings/notifications/page.tsx +0 -462
  163. package/dist/templates/app/dashboard/settings/page.tsx +0 -92
  164. package/dist/templates/app/dashboard/settings/password/loading.tsx +0 -5
  165. package/dist/templates/app/dashboard/settings/password/page.tsx +0 -306
  166. package/dist/templates/app/dashboard/settings/plans/loading.tsx +0 -5
  167. package/dist/templates/app/dashboard/settings/plans/page.tsx +0 -40
  168. package/dist/templates/app/dashboard/settings/profile/loading.tsx +0 -5
  169. package/dist/templates/app/dashboard/settings/profile/page.tsx +0 -686
  170. package/dist/templates/app/dashboard/settings/security/loading.tsx +0 -5
  171. package/dist/templates/app/dashboard/settings/security/page.tsx +0 -505
  172. package/dist/templates/app/dashboard/settings/teams/loading.tsx +0 -5
  173. package/dist/templates/app/dashboard/settings/teams/page.tsx +0 -272
  174. package/dist/templates/app/dashboard/settings/teams/permissions/page.tsx +0 -92
  175. package/dist/templates/app/devtools/blocks/[slug]/page.tsx +0 -39
  176. package/dist/templates/app/devtools/blocks/page.tsx +0 -31
  177. package/dist/templates/app/devtools/config/page.tsx +0 -31
  178. package/dist/templates/app/devtools/features/page.tsx +0 -31
  179. package/dist/templates/app/devtools/flows/page.tsx +0 -31
  180. package/dist/templates/app/devtools/layout.tsx +0 -58
  181. package/dist/templates/app/devtools/page.tsx +0 -121
  182. package/dist/templates/app/devtools/scheduled-actions/page.tsx +0 -157
  183. package/dist/templates/app/devtools/style/page.tsx +0 -330
  184. package/dist/templates/app/devtools/tags/page.tsx +0 -31
  185. package/dist/templates/app/devtools/tests/[[...path]]/page.tsx +0 -47
  186. package/dist/templates/app/favicon.ico +0 -0
  187. package/dist/templates/app/globals.css +0 -12
  188. package/dist/templates/app/layout.tsx +0 -96
  189. package/dist/templates/app/public/page.tsx +0 -30
  190. package/dist/templates/app/superadmin/docs/[section]/[page]/page.tsx +0 -92
  191. package/dist/templates/app/superadmin/docs/page.tsx +0 -75
  192. package/dist/templates/app/superadmin/layout.tsx +0 -67
  193. package/dist/templates/app/superadmin/page.tsx +0 -149
  194. package/dist/templates/app/superadmin/subscriptions/page.tsx +0 -655
  195. package/dist/templates/app/superadmin/team-roles/page.tsx +0 -493
  196. package/dist/templates/app/superadmin/teams/[teamId]/page.tsx +0 -687
  197. package/dist/templates/app/superadmin/teams/page.tsx +0 -302
  198. package/dist/templates/app/superadmin/users/[userId]/page.tsx +0 -548
  199. package/dist/templates/app/superadmin/users/page.tsx +0 -528
  200. package/templates/app/(auth)/forgot-password/page.tsx +0 -216
  201. package/templates/app/(auth)/layout.tsx +0 -51
  202. package/templates/app/(auth)/login/page.tsx +0 -21
  203. package/templates/app/(auth)/reset-password/page.tsx +0 -212
  204. package/templates/app/(auth)/signup/page.tsx +0 -21
  205. package/templates/app/(auth)/verify-email/page.tsx +0 -190
  206. package/templates/app/(public)/[...slug]/page.tsx +0 -378
  207. package/templates/app/(public)/docs/[section]/[page]/page.tsx +0 -90
  208. package/templates/app/(public)/docs/layout.tsx +0 -25
  209. package/templates/app/(public)/docs/page.tsx +0 -81
  210. package/templates/app/(public)/layout.tsx +0 -41
  211. package/templates/app/(public)/page.tsx +0 -19
  212. package/templates/app/403/page.tsx +0 -89
  213. package/templates/app/api/auth/[...all]/route.ts +0 -78
  214. package/templates/app/api/cron/billing/lifecycle/route.ts +0 -98
  215. package/templates/app/api/csp-report/route.ts +0 -175
  216. package/templates/app/api/devtools/config/entities/route.ts +0 -108
  217. package/templates/app/api/devtools/config/theme/route.ts +0 -66
  218. package/templates/app/api/devtools/tests/[...path]/route.ts +0 -130
  219. package/templates/app/api/devtools/tests/route.ts +0 -134
  220. package/templates/app/api/health/route.ts +0 -29
  221. package/templates/app/api/internal/user-metadata/route.ts +0 -36
  222. package/templates/app/api/superadmin/subscriptions/route.ts +0 -310
  223. package/templates/app/api/superadmin/teams/[teamId]/route.ts +0 -286
  224. package/templates/app/api/superadmin/teams/route.ts +0 -188
  225. package/templates/app/api/superadmin/users/[userId]/route.ts +0 -540
  226. package/templates/app/api/superadmin/users/route.ts +0 -323
  227. package/templates/app/api/user/delete-account/route.ts +0 -55
  228. package/templates/app/api/user/plan-flags/route.ts +0 -283
  229. package/templates/app/api/user/profile/route.ts +0 -133
  230. package/templates/app/api/v1/[entity]/[id]/child/[childType]/[childId]/route.ts +0 -210
  231. package/templates/app/api/v1/[entity]/[id]/child/[childType]/route.ts +0 -331
  232. package/templates/app/api/v1/[entity]/[id]/route.ts +0 -35
  233. package/templates/app/api/v1/[entity]/docs.md +0 -369
  234. package/templates/app/api/v1/[entity]/presets.ts +0 -194
  235. package/templates/app/api/v1/[entity]/route.ts +0 -31
  236. package/templates/app/api/v1/api-keys/[id]/route.ts +0 -303
  237. package/templates/app/api/v1/api-keys/docs.md +0 -101
  238. package/templates/app/api/v1/api-keys/presets.ts +0 -31
  239. package/templates/app/api/v1/api-keys/route.ts +0 -250
  240. package/templates/app/api/v1/auth/docs.md +0 -184
  241. package/templates/app/api/v1/auth/presets.ts +0 -44
  242. package/templates/app/api/v1/auth/signup-with-invite/route.ts +0 -227
  243. package/templates/app/api/v1/billing/cancel/route.ts +0 -206
  244. package/templates/app/api/v1/billing/change-plan/route.ts +0 -97
  245. package/templates/app/api/v1/billing/check-action/route.ts +0 -81
  246. package/templates/app/api/v1/billing/checkout/route.ts +0 -124
  247. package/templates/app/api/v1/billing/docs.md +0 -209
  248. package/templates/app/api/v1/billing/plans/route.ts +0 -85
  249. package/templates/app/api/v1/billing/portal/route.ts +0 -90
  250. package/templates/app/api/v1/billing/presets.ts +0 -121
  251. package/templates/app/api/v1/billing/webhooks/stripe/route.ts +0 -428
  252. package/templates/app/api/v1/blocks/[slug]/route.ts +0 -29
  253. package/templates/app/api/v1/blocks/docs.md +0 -173
  254. package/templates/app/api/v1/blocks/presets.ts +0 -121
  255. package/templates/app/api/v1/blocks/route.ts +0 -45
  256. package/templates/app/api/v1/blocks/validate/route.ts +0 -45
  257. package/templates/app/api/v1/cron/docs.md +0 -116
  258. package/templates/app/api/v1/cron/presets.ts +0 -26
  259. package/templates/app/api/v1/cron/process/route.ts +0 -108
  260. package/templates/app/api/v1/devtools/blocks/route.ts +0 -82
  261. package/templates/app/api/v1/devtools/docs/route.ts +0 -150
  262. package/templates/app/api/v1/devtools/docs.md +0 -204
  263. package/templates/app/api/v1/devtools/features/route.ts +0 -61
  264. package/templates/app/api/v1/devtools/flows/route.ts +0 -61
  265. package/templates/app/api/v1/devtools/presets.ts +0 -113
  266. package/templates/app/api/v1/devtools/scheduled-actions/route.ts +0 -120
  267. package/templates/app/api/v1/devtools/testing/route.ts +0 -82
  268. package/templates/app/api/v1/media/docs.md +0 -117
  269. package/templates/app/api/v1/media/presets.ts +0 -24
  270. package/templates/app/api/v1/media/upload/route.ts +0 -150
  271. package/templates/app/api/v1/patterns/[id]/usages/route.ts +0 -116
  272. package/templates/app/api/v1/plugin/[...path]/route.ts +0 -373
  273. package/templates/app/api/v1/plugin/docs.md +0 -79
  274. package/templates/app/api/v1/plugin/presets.ts +0 -21
  275. package/templates/app/api/v1/plugin/route.ts +0 -96
  276. package/templates/app/api/v1/post-categories/[id]/route.ts +0 -255
  277. package/templates/app/api/v1/post-categories/docs.md +0 -134
  278. package/templates/app/api/v1/post-categories/presets.ts +0 -78
  279. package/templates/app/api/v1/post-categories/route.ts +0 -119
  280. package/templates/app/api/v1/team-invitations/[token]/accept/route.ts +0 -179
  281. package/templates/app/api/v1/team-invitations/[token]/decline/route.ts +0 -120
  282. package/templates/app/api/v1/team-invitations/[token]/route.ts +0 -89
  283. package/templates/app/api/v1/team-invitations/docs.md +0 -88
  284. package/templates/app/api/v1/team-invitations/presets.ts +0 -43
  285. package/templates/app/api/v1/team-invitations/route.ts +0 -114
  286. package/templates/app/api/v1/teams/[teamId]/invitations/route.ts +0 -171
  287. package/templates/app/api/v1/teams/[teamId]/invoices/[invoiceNumber]/route.ts +0 -105
  288. package/templates/app/api/v1/teams/[teamId]/invoices/route.ts +0 -125
  289. package/templates/app/api/v1/teams/[teamId]/members/[memberId]/route.ts +0 -263
  290. package/templates/app/api/v1/teams/[teamId]/members/route.ts +0 -358
  291. package/templates/app/api/v1/teams/[teamId]/route.ts +0 -322
  292. package/templates/app/api/v1/teams/[teamId]/subscription/route.ts +0 -50
  293. package/templates/app/api/v1/teams/[teamId]/usage/[limitSlug]/route.ts +0 -91
  294. package/templates/app/api/v1/teams/docs.md +0 -320
  295. package/templates/app/api/v1/teams/presets.ts +0 -178
  296. package/templates/app/api/v1/teams/route.ts +0 -293
  297. package/templates/app/api/v1/teams/switch/route.ts +0 -88
  298. package/templates/app/api/v1/theme/[...path]/route.ts +0 -361
  299. package/templates/app/api/v1/theme/docs.md +0 -74
  300. package/templates/app/api/v1/theme/presets.ts +0 -21
  301. package/templates/app/api/v1/theme/route.ts +0 -96
  302. package/templates/app/api/v1/users/[id]/meta/[key]/route.ts +0 -363
  303. package/templates/app/api/v1/users/[id]/route.ts +0 -302
  304. package/templates/app/api/v1/users/docs.md +0 -93
  305. package/templates/app/api/v1/users/presets.ts +0 -59
  306. package/templates/app/api/v1/users/route.ts +0 -197
  307. package/templates/app/dashboard/(main)/[entity]/[id]/edit/page.tsx +0 -117
  308. package/templates/app/dashboard/(main)/[entity]/[id]/page.tsx +0 -103
  309. package/templates/app/dashboard/(main)/[entity]/create/page.tsx +0 -95
  310. package/templates/app/dashboard/(main)/[entity]/error.tsx +0 -51
  311. package/templates/app/dashboard/(main)/[entity]/layout.tsx +0 -113
  312. package/templates/app/dashboard/(main)/[entity]/loading.tsx +0 -61
  313. package/templates/app/dashboard/(main)/[entity]/page.tsx +0 -90
  314. package/templates/app/dashboard/(main)/layout.tsx +0 -98
  315. package/templates/app/dashboard/(main)/loading.tsx +0 -5
  316. package/templates/app/dashboard/(main)/page.tsx +0 -201
  317. package/templates/app/dashboard/(main)/patterns/[id]/edit/page.tsx +0 -114
  318. package/templates/app/dashboard/(main)/patterns/[id]/page.tsx +0 -20
  319. package/templates/app/dashboard/(main)/patterns/[id]/reports/page.tsx +0 -171
  320. package/templates/app/dashboard/(main)/patterns/create/page.tsx +0 -86
  321. package/templates/app/dashboard/(main)/patterns/page.tsx +0 -444
  322. package/templates/app/dashboard/features/analytics/page.tsx +0 -35
  323. package/templates/app/dashboard/features/automation/page.tsx +0 -35
  324. package/templates/app/dashboard/features/layout.tsx +0 -13
  325. package/templates/app/dashboard/features/loading.tsx +0 -5
  326. package/templates/app/dashboard/features/webhooks/page.tsx +0 -35
  327. package/templates/app/dashboard/layout.tsx +0 -86
  328. package/templates/app/dashboard/permission-denied/page.tsx +0 -29
  329. package/templates/app/dashboard/settings/api-keys/loading.tsx +0 -5
  330. package/templates/app/dashboard/settings/api-keys/page.tsx +0 -513
  331. package/templates/app/dashboard/settings/billing/loading.tsx +0 -5
  332. package/templates/app/dashboard/settings/billing/page.tsx +0 -284
  333. package/templates/app/dashboard/settings/invoices/[invoiceNumber]/page.tsx +0 -222
  334. package/templates/app/dashboard/settings/invoices/loading.tsx +0 -5
  335. package/templates/app/dashboard/settings/invoices/page.tsx +0 -82
  336. package/templates/app/dashboard/settings/layout.tsx +0 -151
  337. package/templates/app/dashboard/settings/loading.tsx +0 -5
  338. package/templates/app/dashboard/settings/notifications/loading.tsx +0 -5
  339. package/templates/app/dashboard/settings/notifications/page.tsx +0 -462
  340. package/templates/app/dashboard/settings/page.tsx +0 -92
  341. package/templates/app/dashboard/settings/password/loading.tsx +0 -5
  342. package/templates/app/dashboard/settings/password/page.tsx +0 -306
  343. package/templates/app/dashboard/settings/plans/loading.tsx +0 -5
  344. package/templates/app/dashboard/settings/plans/page.tsx +0 -40
  345. package/templates/app/dashboard/settings/profile/loading.tsx +0 -5
  346. package/templates/app/dashboard/settings/profile/page.tsx +0 -686
  347. package/templates/app/dashboard/settings/security/loading.tsx +0 -5
  348. package/templates/app/dashboard/settings/security/page.tsx +0 -505
  349. package/templates/app/dashboard/settings/teams/loading.tsx +0 -5
  350. package/templates/app/dashboard/settings/teams/page.tsx +0 -272
  351. package/templates/app/dashboard/settings/teams/permissions/page.tsx +0 -92
  352. package/templates/app/devtools/blocks/[slug]/page.tsx +0 -39
  353. package/templates/app/devtools/blocks/page.tsx +0 -31
  354. package/templates/app/devtools/config/page.tsx +0 -31
  355. package/templates/app/devtools/features/page.tsx +0 -31
  356. package/templates/app/devtools/flows/page.tsx +0 -31
  357. package/templates/app/devtools/layout.tsx +0 -58
  358. package/templates/app/devtools/page.tsx +0 -121
  359. package/templates/app/devtools/scheduled-actions/page.tsx +0 -157
  360. package/templates/app/devtools/style/page.tsx +0 -330
  361. package/templates/app/devtools/tags/page.tsx +0 -31
  362. package/templates/app/devtools/tests/[[...path]]/page.tsx +0 -47
  363. package/templates/app/favicon.ico +0 -0
  364. package/templates/app/globals.css +0 -12
  365. package/templates/app/layout.tsx +0 -96
  366. package/templates/app/public/page.tsx +0 -30
  367. package/templates/app/superadmin/docs/[section]/[page]/page.tsx +0 -92
  368. package/templates/app/superadmin/docs/page.tsx +0 -75
  369. package/templates/app/superadmin/layout.tsx +0 -67
  370. package/templates/app/superadmin/page.tsx +0 -149
  371. package/templates/app/superadmin/subscriptions/page.tsx +0 -655
  372. package/templates/app/superadmin/team-roles/page.tsx +0 -493
  373. package/templates/app/superadmin/teams/[teamId]/page.tsx +0 -687
  374. package/templates/app/superadmin/teams/page.tsx +0 -302
  375. package/templates/app/superadmin/users/[userId]/page.tsx +0 -548
  376. 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
- }