create-nextblock 0.12.9 → 0.12.12

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 (293) hide show
  1. package/docker-template/.dockerignore +23 -23
  2. package/docker-template/.env.docker.example +69 -69
  3. package/docker-template/docker/db/init/99-jwt.sql +6 -6
  4. package/docker-template/docker/db/init/99-roles.sql +25 -25
  5. package/docker-template/docker/kong/kong.yml +112 -112
  6. package/docker-template/scripts/docker-setup.mjs +310 -310
  7. package/libs/db/tsconfig.lib.json +3 -3
  8. package/libs/editor/tsconfig.lib.json +3 -3
  9. package/libs/ui/tsconfig.lib.json +3 -3
  10. package/libs/utils/tsconfig.json +3 -3
  11. package/package.json +1 -1
  12. package/project.json +19 -19
  13. package/templates/nextblock-template/.browserslistrc +11 -11
  14. package/templates/nextblock-template/.dockerignore +23 -23
  15. package/templates/nextblock-template/README.md +34 -34
  16. package/templates/nextblock-template/app/(auth-pages)/layout.tsx +9 -9
  17. package/templates/nextblock-template/app/(auth-pages)/post-sign-in/page.tsx +27 -27
  18. package/templates/nextblock-template/app/(auth-pages)/sign-up/SignUpForm.tsx +141 -141
  19. package/templates/nextblock-template/app/(auth-pages)/sign-up/page.tsx +46 -46
  20. package/templates/nextblock-template/app/(auth-pages)/two-factor/actions.ts +91 -91
  21. package/templates/nextblock-template/app/(auth-pages)/two-factor/components/TwoFactorForm.tsx +123 -123
  22. package/templates/nextblock-template/app/(auth-pages)/two-factor/page.tsx +51 -51
  23. package/templates/nextblock-template/app/ToasterProvider.tsx +17 -17
  24. package/templates/nextblock-template/app/[slug]/pageClientActions.ts +7 -7
  25. package/templates/nextblock-template/app/actions/consent.ts +57 -57
  26. package/templates/nextblock-template/app/actions/interactions.test.ts +301 -301
  27. package/templates/nextblock-template/app/actions/interactions.ts +373 -373
  28. package/templates/nextblock-template/app/actions/postActions.ts +146 -146
  29. package/templates/nextblock-template/app/actions/twoFactorEmail.ts +22 -22
  30. package/templates/nextblock-template/app/api/ai/cortex/build-widget/route.ts +153 -153
  31. package/templates/nextblock-template/app/api/ai/generate-blocks/route.ts +96 -96
  32. package/templates/nextblock-template/app/api/ai/global-agent/route.ts +964 -964
  33. package/templates/nextblock-template/app/api/brand/email-logo/route.ts +48 -48
  34. package/templates/nextblock-template/app/api/cms/check-updates/route.ts +44 -44
  35. package/templates/nextblock-template/app/api/cms/full-backup/export/route.ts +33 -33
  36. package/templates/nextblock-template/app/api/cms/full-backup/restore/route.ts +63 -63
  37. package/templates/nextblock-template/app/api/cron/reset-sandbox/route.ts +3490 -3490
  38. package/templates/nextblock-template/app/api/cron/reset-sandbox/sandboxResetSql.ts +5597 -5597
  39. package/templates/nextblock-template/app/api/cron/sync-currencies/route.ts +39 -39
  40. package/templates/nextblock-template/app/api/custom-blocks/db-relations/route.ts +92 -92
  41. package/templates/nextblock-template/app/api/custom-blocks/editor-definitions/route.ts +43 -43
  42. package/templates/nextblock-template/app/api/media/library/route.ts +69 -69
  43. package/templates/nextblock-template/app/api/media/r2-presigned/route.ts +53 -53
  44. package/templates/nextblock-template/app/api/media/record/route.ts +160 -160
  45. package/templates/nextblock-template/app/api/search/route.ts +43 -43
  46. package/templates/nextblock-template/app/article/[slug]/PostClientContent.tsx +441 -441
  47. package/templates/nextblock-template/app/auth/callback/route.ts +31 -31
  48. package/templates/nextblock-template/app/cart/page.tsx +7 -7
  49. package/templates/nextblock-template/app/cms/blocks/components/CustomBlockEditorPreview.tsx +160 -160
  50. package/templates/nextblock-template/app/cms/blocks/components/MediaLibraryModal.tsx +149 -149
  51. package/templates/nextblock-template/app/cms/blocks/editors/DynamicCustomBlockEditor.tsx +167 -167
  52. package/templates/nextblock-template/app/cms/blocks/editors/ImageBlockEditor.tsx +29 -29
  53. package/templates/nextblock-template/app/cms/blocks/editors/TextBlockEditor.tsx +90 -90
  54. package/templates/nextblock-template/app/cms/components/ConnectGitHubButton.tsx +122 -122
  55. package/templates/nextblock-template/app/cms/components/CortexAiPageContext.tsx +58 -58
  56. package/templates/nextblock-template/app/cms/components/FeatureImageField.tsx +244 -244
  57. package/templates/nextblock-template/app/cms/components/FeedbackModal.tsx +36 -36
  58. package/templates/nextblock-template/app/cms/components/SystemAlertsBanner.tsx +112 -112
  59. package/templates/nextblock-template/app/cms/components/TwoFactorReminderBanner.tsx +45 -45
  60. package/templates/nextblock-template/app/cms/components/github-connect-actions.ts +102 -102
  61. package/templates/nextblock-template/app/cms/components/system-alerts-actions.ts +31 -31
  62. package/templates/nextblock-template/app/cms/custom-blocks/[id]/edit/page.tsx +66 -66
  63. package/templates/nextblock-template/app/cms/custom-blocks/actions.ts +519 -519
  64. package/templates/nextblock-template/app/cms/custom-blocks/components/BlockComposer.tsx +1522 -1522
  65. package/templates/nextblock-template/app/cms/custom-blocks/components/BlocksLibraryTransferControls.tsx +256 -256
  66. package/templates/nextblock-template/app/cms/custom-blocks/components/DBRelationSelect.tsx +384 -384
  67. package/templates/nextblock-template/app/cms/custom-blocks/components/ImageR2Picker.tsx +221 -221
  68. package/templates/nextblock-template/app/cms/custom-blocks/new/page.tsx +12 -12
  69. package/templates/nextblock-template/app/cms/custom-blocks/page.tsx +438 -438
  70. package/templates/nextblock-template/app/cms/dashboard/actions.ts +228 -228
  71. package/templates/nextblock-template/app/cms/dashboard/components/DashboardOnboarding.tsx +130 -130
  72. package/templates/nextblock-template/app/cms/import-export/ContentTransferControls.tsx +431 -391
  73. package/templates/nextblock-template/app/cms/import-export/actions.ts +226 -226
  74. package/templates/nextblock-template/app/cms/interactions/InteractionsModerationClient.tsx +408 -408
  75. package/templates/nextblock-template/app/cms/interactions/page.tsx +51 -51
  76. package/templates/nextblock-template/app/cms/layout.tsx +73 -73
  77. package/templates/nextblock-template/app/cms/media/components/FolderNavigator.tsx +273 -273
  78. package/templates/nextblock-template/app/cms/media/components/FolderTree.tsx +122 -122
  79. package/templates/nextblock-template/app/cms/media/components/MediaEditForm.tsx +26 -26
  80. package/templates/nextblock-template/app/cms/media/components/MediaGridClient.tsx +69 -69
  81. package/templates/nextblock-template/app/cms/media/components/MediaPickerDialog.tsx +149 -158
  82. package/templates/nextblock-template/app/cms/media/components/MediaUploadForm.tsx +101 -101
  83. package/templates/nextblock-template/app/cms/navigation/components/NavigationMenuDnd.tsx +3 -3
  84. package/templates/nextblock-template/app/cms/pages/page.tsx +18 -17
  85. package/templates/nextblock-template/app/cms/posts/page.tsx +19 -18
  86. package/templates/nextblock-template/app/cms/products/[id]/edit/page.tsx +12 -0
  87. package/templates/nextblock-template/app/cms/products/attributes/page.tsx +12 -12
  88. package/templates/nextblock-template/app/cms/products/categories/page.tsx +12 -12
  89. package/templates/nextblock-template/app/cms/products/inventory/page.tsx +13 -13
  90. package/templates/nextblock-template/app/cms/products/new/page.tsx +135 -135
  91. package/templates/nextblock-template/app/cms/products/page.tsx +39 -27
  92. package/templates/nextblock-template/app/cms/products/productFormData.ts +133 -133
  93. package/templates/nextblock-template/app/cms/products/settings/page.tsx +5 -5
  94. package/templates/nextblock-template/app/cms/promotions/PromotionsWorkspace.tsx +456 -456
  95. package/templates/nextblock-template/app/cms/promotions/actions.ts +115 -115
  96. package/templates/nextblock-template/app/cms/promotions/page.tsx +31 -31
  97. package/templates/nextblock-template/app/cms/revisions/service.ts +19 -19
  98. package/templates/nextblock-template/app/cms/revisions/utils.ts +132 -132
  99. package/templates/nextblock-template/app/cms/settings/backup-restore/BackupRestoreWorkspace.tsx +1004 -1004
  100. package/templates/nextblock-template/app/cms/settings/backup-restore/page.tsx +29 -29
  101. package/templates/nextblock-template/app/cms/settings/bot-protection/actions.ts +93 -93
  102. package/templates/nextblock-template/app/cms/settings/bot-protection/components/BotProtectionForm.tsx +129 -129
  103. package/templates/nextblock-template/app/cms/settings/bot-protection/page.tsx +24 -24
  104. package/templates/nextblock-template/app/cms/settings/cortex-ai/SandboxCortexAiSettingsClient.tsx +497 -497
  105. package/templates/nextblock-template/app/cms/settings/cortex-ai/StoredCortexAiSettingsClient.tsx +410 -410
  106. package/templates/nextblock-template/app/cms/settings/cortex-ai/actions.ts +246 -246
  107. package/templates/nextblock-template/app/cms/settings/cortex-ai/page.tsx +80 -80
  108. package/templates/nextblock-template/app/cms/settings/currencies/actions.ts +331 -331
  109. package/templates/nextblock-template/app/cms/settings/currencies/page.tsx +494 -494
  110. package/templates/nextblock-template/app/cms/settings/email/actions.ts +64 -64
  111. package/templates/nextblock-template/app/cms/settings/email/components/EmailForm.tsx +181 -181
  112. package/templates/nextblock-template/app/cms/settings/email/page.tsx +28 -28
  113. package/templates/nextblock-template/app/cms/settings/extra-translations/ExtraTranslationsWorkspace.tsx +767 -767
  114. package/templates/nextblock-template/app/cms/settings/extra-translations/page.tsx +93 -93
  115. package/templates/nextblock-template/app/cms/settings/google-analytics/actions.ts +60 -60
  116. package/templates/nextblock-template/app/cms/settings/google-analytics/components/GoogleAnalyticsForm.tsx +129 -129
  117. package/templates/nextblock-template/app/cms/settings/google-analytics/page.tsx +26 -26
  118. package/templates/nextblock-template/app/cms/settings/languages/actions.ts +16 -16
  119. package/templates/nextblock-template/app/cms/settings/logos/[id]/edit/page.tsx +7 -7
  120. package/templates/nextblock-template/app/cms/settings/logos/components/BrandingSettingsForm.tsx +339 -339
  121. package/templates/nextblock-template/app/cms/settings/logos/components/DeleteLogoButton.tsx +21 -21
  122. package/templates/nextblock-template/app/cms/settings/logos/components/LogoForm.tsx +20 -20
  123. package/templates/nextblock-template/app/cms/settings/logos/components/SetActiveLogoButton.tsx +42 -42
  124. package/templates/nextblock-template/app/cms/settings/logos/components/SiteSeoSettingsForm.tsx +133 -133
  125. package/templates/nextblock-template/app/cms/settings/logos/new/page.tsx +8 -8
  126. package/templates/nextblock-template/app/cms/settings/packages/package-card.tsx +122 -122
  127. package/templates/nextblock-template/app/cms/settings/privacy/actions.ts +52 -52
  128. package/templates/nextblock-template/app/cms/settings/privacy/components/PrivacyForm.tsx +148 -148
  129. package/templates/nextblock-template/app/cms/settings/privacy/page.tsx +27 -27
  130. package/templates/nextblock-template/app/cms/settings/registration/actions.ts +44 -44
  131. package/templates/nextblock-template/app/cms/settings/registration/components/RegistrationForm.tsx +65 -65
  132. package/templates/nextblock-template/app/cms/settings/registration/page.tsx +27 -27
  133. package/templates/nextblock-template/app/cms/settings/security/actions.ts +284 -284
  134. package/templates/nextblock-template/app/cms/settings/security/components/SecurityPanel.tsx +522 -522
  135. package/templates/nextblock-template/app/cms/settings/security/page.tsx +33 -33
  136. package/templates/nextblock-template/app/cms/settings/taxes/page.tsx +21 -21
  137. package/templates/nextblock-template/app/cms/shipping/page.tsx +20 -20
  138. package/templates/nextblock-template/app/cms/users/actions.ts +222 -222
  139. package/templates/nextblock-template/app/cms/users/components/DeleteUserButton.tsx +12 -12
  140. package/templates/nextblock-template/app/cms/users/components/UserForm.tsx +44 -44
  141. package/templates/nextblock-template/app/lib/site-settings.ts +105 -105
  142. package/templates/nextblock-template/app/lib/sitemap-utils.ts +253 -253
  143. package/templates/nextblock-template/app/profile/ProfileAccountSidebar.tsx +73 -73
  144. package/templates/nextblock-template/app/profile/ProfilePageHeader.tsx +16 -16
  145. package/templates/nextblock-template/app/profile/ProfilePageMissingState.tsx +9 -9
  146. package/templates/nextblock-template/app/profile/account-data.ts +37 -37
  147. package/templates/nextblock-template/app/profile/account-links.ts +22 -22
  148. package/templates/nextblock-template/app/profile/account-types.ts +11 -11
  149. package/templates/nextblock-template/app/profile/orders/CustomerOrdersPageClient.tsx +124 -124
  150. package/templates/nextblock-template/app/profile/orders/[id]/CustomerOrderDetailPageClient.tsx +79 -79
  151. package/templates/nextblock-template/app/profile/orders/[id]/page.tsx +32 -32
  152. package/templates/nextblock-template/app/profile/orders/page.tsx +19 -19
  153. package/templates/nextblock-template/app/profile/page.tsx +42 -42
  154. package/templates/nextblock-template/app/profile/password/PasswordSettingsPageClient.tsx +128 -128
  155. package/templates/nextblock-template/app/profile/password/actions.ts +59 -59
  156. package/templates/nextblock-template/app/profile/password/page.tsx +27 -27
  157. package/templates/nextblock-template/app/setup/SetupWizard.tsx +678 -678
  158. package/templates/nextblock-template/app/setup/layout.tsx +13 -13
  159. package/templates/nextblock-template/app/setup/page.tsx +111 -111
  160. package/templates/nextblock-template/app/sitemap.ts +130 -130
  161. package/templates/nextblock-template/components/CartDrawerLoader.tsx +7 -7
  162. package/templates/nextblock-template/components/DeferredCartDrawer.tsx +23 -23
  163. package/templates/nextblock-template/components/DeferredGoogleAnalytics.tsx +70 -70
  164. package/templates/nextblock-template/components/DeferredGoogleTagManager.tsx +70 -70
  165. package/templates/nextblock-template/components/DeferredSpeedInsights.tsx +69 -69
  166. package/templates/nextblock-template/components/FeatureImageHero.tsx +47 -47
  167. package/templates/nextblock-template/components/FooterNavigation.tsx +32 -32
  168. package/templates/nextblock-template/components/GitHubLoginButton.tsx +15 -15
  169. package/templates/nextblock-template/components/HtmlScriptExecutor.tsx +47 -47
  170. package/templates/nextblock-template/components/LanguageSwitcher.tsx +2 -2
  171. package/templates/nextblock-template/components/PostCommentsSection.tsx +369 -369
  172. package/templates/nextblock-template/components/ProductReviewsSection.tsx +419 -419
  173. package/templates/nextblock-template/components/PublicEnvBootstrap.tsx +30 -30
  174. package/templates/nextblock-template/components/ResponsiveNav.tsx +14 -14
  175. package/templates/nextblock-template/components/auth/AuthBotProtection.tsx +182 -182
  176. package/templates/nextblock-template/components/blocks/PostCardSkeleton.tsx +12 -12
  177. package/templates/nextblock-template/components/blocks/PostsGridBlock.tsx +12 -12
  178. package/templates/nextblock-template/components/blocks/ecommerceRendererLoaders.ts +23 -23
  179. package/templates/nextblock-template/components/blocks/renderers/FormBlockRenderer.tsx +249 -249
  180. package/templates/nextblock-template/components/blocks/types.ts +7 -7
  181. package/templates/nextblock-template/components/env-var-warning.tsx +3 -3
  182. package/templates/nextblock-template/components/form-message.tsx +32 -32
  183. package/templates/nextblock-template/components/privacy/ConsentBanner.tsx +170 -170
  184. package/templates/nextblock-template/components/privacy/ConsentGatedAnalytics.tsx +70 -70
  185. package/templates/nextblock-template/components/renderers/CachedDynamicLayoutEngine.tsx +28 -28
  186. package/templates/nextblock-template/components/renderers/DynamicLayoutEngine.test.tsx +166 -166
  187. package/templates/nextblock-template/components/renderers/DynamicLayoutEngine.tsx +464 -464
  188. package/templates/nextblock-template/components/submit-button.tsx +23 -23
  189. package/templates/nextblock-template/components/theme-switcher.tsx +8 -8
  190. package/templates/nextblock-template/components/visual-editing/DeferredVisualEditing.tsx +21 -21
  191. package/templates/nextblock-template/context/AuthContext.tsx +23 -23
  192. package/templates/nextblock-template/context/LanguageContext.tsx +16 -16
  193. package/templates/nextblock-template/context/language-rest-client.ts +32 -32
  194. package/templates/nextblock-template/docker/db/init/99-jwt.sql +6 -6
  195. package/templates/nextblock-template/docker/db/init/99-roles.sql +25 -25
  196. package/templates/nextblock-template/docker/kong/kong.yml +112 -112
  197. package/templates/nextblock-template/docs/01-PROJECT-OVERVIEW.md +94 -94
  198. package/templates/nextblock-template/docs/02-ECOMMERCE-CAPABILITIES.md +364 -364
  199. package/templates/nextblock-template/docs/03-CMS-AND-EDITOR.md +202 -202
  200. package/templates/nextblock-template/docs/04-DATABASE-AND-AUTH.md +246 -246
  201. package/templates/nextblock-template/docs/06-CLI-AND-SCAFFOLDING.md +176 -176
  202. package/templates/nextblock-template/docs/07-BLOCK-SDK-AND-EXTENSIBILITY.md +146 -146
  203. package/templates/nextblock-template/docs/08-NEXTBLOCK-CORTEX-AI-ARCHITECTURE.md +1319 -1319
  204. package/templates/nextblock-template/docs/10-CUSTOM-BLOCKS.md +222 -222
  205. package/templates/nextblock-template/docs/11-SELF-HOSTED-DOCKER.md +173 -173
  206. package/templates/nextblock-template/docs/12-VERCEL-DEPLOYMENT.md +170 -170
  207. package/templates/nextblock-template/docs/13-STAYING-UP-TO-DATE.md +151 -151
  208. package/templates/nextblock-template/docs/README.md +39 -39
  209. package/templates/nextblock-template/docs/TECHNICAL_SPECIFICATION.md +12505 -12505
  210. package/templates/nextblock-template/hooks/use-hotkeys.ts +21 -21
  211. package/templates/nextblock-template/hooks/useGlobalSearch.ts +101 -101
  212. package/templates/nextblock-template/index.d.ts +7 -7
  213. package/templates/nextblock-template/lib/app-secrets.ts +39 -39
  214. package/templates/nextblock-template/lib/auth/cookies.ts +47 -47
  215. package/templates/nextblock-template/lib/auth/crypto.ts +45 -45
  216. package/templates/nextblock-template/lib/auth/trustedDevices.ts +92 -92
  217. package/templates/nextblock-template/lib/auth/twoFactor.ts +208 -208
  218. package/templates/nextblock-template/lib/auth-redirects.ts +46 -46
  219. package/templates/nextblock-template/lib/blocks/README.md +13 -13
  220. package/templates/nextblock-template/lib/blocks/blockRegistry.ts +6 -6
  221. package/templates/nextblock-template/lib/blocks/blockTypes.ts +18 -18
  222. package/templates/nextblock-template/lib/botProtection/verify.ts +134 -134
  223. package/templates/nextblock-template/lib/cms-transfer/csv.test.ts +100 -77
  224. package/templates/nextblock-template/lib/cms-transfer/csv.ts +403 -399
  225. package/templates/nextblock-template/lib/cms-transfer/server.ts +2243 -2243
  226. package/templates/nextblock-template/lib/cms-transfer/types.ts +145 -145
  227. package/templates/nextblock-template/lib/config/email-settings.ts +217 -217
  228. package/templates/nextblock-template/lib/custom-block-definitions.ts +87 -87
  229. package/templates/nextblock-template/lib/custom-block-r2-upload-shared.ts +178 -178
  230. package/templates/nextblock-template/lib/custom-block-r2-upload.test.ts +140 -140
  231. package/templates/nextblock-template/lib/custom-block-r2-upload.ts +88 -88
  232. package/templates/nextblock-template/lib/custom-block-relation-registry.ts +256 -256
  233. package/templates/nextblock-template/lib/custom-block-relations.test.ts +227 -227
  234. package/templates/nextblock-template/lib/custom-block-relations.ts +279 -279
  235. package/templates/nextblock-template/lib/custom-block-safelist.ts +14 -14
  236. package/templates/nextblock-template/lib/editor/dynamic-extension-core.test.ts +172 -172
  237. package/templates/nextblock-template/lib/editor/dynamic-extension-core.ts +213 -213
  238. package/templates/nextblock-template/lib/editor/dynamic-extension-loader.ts +22 -22
  239. package/templates/nextblock-template/lib/editor/dynamic-extensions.tsx +193 -193
  240. package/templates/nextblock-template/lib/email/branding-format.test.ts +133 -133
  241. package/templates/nextblock-template/lib/email/branding-format.ts +123 -123
  242. package/templates/nextblock-template/lib/email/branding.ts +76 -76
  243. package/templates/nextblock-template/lib/full-backup/manifest.test.ts +121 -121
  244. package/templates/nextblock-template/lib/full-backup/manifest.ts +206 -206
  245. package/templates/nextblock-template/lib/full-backup/server.ts +743 -743
  246. package/templates/nextblock-template/lib/logos/active-logo.ts +53 -53
  247. package/templates/nextblock-template/lib/media/resolveMediaUrl.ts +54 -54
  248. package/templates/nextblock-template/lib/onboarding/actions.ts +31 -31
  249. package/templates/nextblock-template/lib/onboarding/status.ts +222 -222
  250. package/templates/nextblock-template/lib/posts/readTime.ts +60 -60
  251. package/templates/nextblock-template/lib/privacy/consent-client.ts +57 -57
  252. package/templates/nextblock-template/lib/privacy/contact-emails.ts +64 -64
  253. package/templates/nextblock-template/lib/privacy/settings.ts +115 -115
  254. package/templates/nextblock-template/lib/privacy/types.ts +69 -69
  255. package/templates/nextblock-template/lib/promotions/server.test.ts +74 -74
  256. package/templates/nextblock-template/lib/promotions/server.ts +741 -741
  257. package/templates/nextblock-template/lib/resolve-block-relations.test.ts +142 -142
  258. package/templates/nextblock-template/lib/resolve-block-relations.ts +255 -255
  259. package/templates/nextblock-template/lib/search/server.ts +585 -585
  260. package/templates/nextblock-template/lib/search/types.ts +27 -27
  261. package/templates/nextblock-template/lib/setup/actions.ts +460 -460
  262. package/templates/nextblock-template/lib/setup/env-status.ts +125 -125
  263. package/templates/nextblock-template/lib/setup/env-write.ts +111 -111
  264. package/templates/nextblock-template/lib/setup/migrations-bundle.ts +37 -37
  265. package/templates/nextblock-template/lib/setup/provisioning.ts +59 -59
  266. package/templates/nextblock-template/lib/setup/schema-apply.ts +408 -408
  267. package/templates/nextblock-template/lib/setup/system-config.ts +105 -105
  268. package/templates/nextblock-template/lib/setup/types.ts +18 -18
  269. package/templates/nextblock-template/lib/site-url.ts +48 -48
  270. package/templates/nextblock-template/lib/storage/provider.ts +66 -66
  271. package/templates/nextblock-template/lib/storage/supabase-storage.ts +103 -103
  272. package/templates/nextblock-template/lib/updates/check-upstream.ts +441 -441
  273. package/templates/nextblock-template/lib/updates/github-device.ts +206 -206
  274. package/templates/nextblock-template/lib/updates/repo-identity.ts +56 -56
  275. package/templates/nextblock-template/package.json +1 -1
  276. package/templates/nextblock-template/postcss.config.js +6 -6
  277. package/templates/nextblock-template/scripts/backup.js +115 -115
  278. package/templates/nextblock-template/scripts/docker-setup.mjs +310 -310
  279. package/templates/nextblock-template/scripts/restore.js +385 -385
  280. package/templates/nextblock-template/scripts/verify-cortex-ai-build-widget.tsx +98 -98
  281. package/templates/nextblock-template/scripts/verify-cortex-ai-generate-blocks.ts +62 -62
  282. package/templates/nextblock-template/scripts/verify-cortex-ai-global-tools.ts +537 -537
  283. package/templates/nextblock-template/scripts/verify-cortex-ai-routing.ts +58 -58
  284. package/templates/nextblock-template/scripts/verify-custom-block-definitions.ts +188 -188
  285. package/templates/nextblock-template/scripts/verify-dynamic-custom-block-extensions.ts +123 -123
  286. package/templates/nextblock-template/scripts/verify-dynamic-layout-engine.tsx +133 -133
  287. package/templates/nextblock-template/scripts/verify-milestone-2-custom-blocks.ts +65 -65
  288. package/templates/nextblock-template/tailwind.config.js +25 -25
  289. package/templates/nextblock-template/tools/build-migrate.mjs +209 -209
  290. package/templates/nextblock-template/tools/configure-supabase-auth.js +282 -282
  291. package/templates/nextblock-template/types/jsdom.d.ts +6 -6
  292. package/tsconfig.base.json +3 -3
  293. package/templates/nextblock-template/tsconfig.tsbuildinfo +0 -1
@@ -1,246 +1,246 @@
1
- # 04 Database and Auth
2
-
3
- ## Source of Truth
4
-
5
- The database and auth implementation is spread across:
6
-
7
- - `libs/db/src/lib/supabase/*`
8
- - `libs/db/src/lib/package-validation.ts`
9
- - `libs/db/src/supabase/config.toml`
10
- - `libs/db/src/supabase/migrations/*`
11
- - `apps/nextblock/app/auth/callback/route.ts`
12
- - `apps/nextblock/app/cms/*`
13
-
14
- When documentation and a migration disagree, the migration folder is the final
15
- authority for schema, triggers, grants, and policies.
16
-
17
- ## Supabase Client Surfaces
18
-
19
- `libs/db/src/server.ts` currently exports:
20
-
21
- - `createClient()`: request-scoped server client using auth cookies
22
- - `getProfileWithRoleServerSide()`
23
- - `getActiveLanguagesServerSide()`
24
- - `getServiceRoleSupabaseClient()`
25
- - `getSsgSupabaseClient()`
26
- - package activation helpers such as `verifyPackageOnline()`
27
-
28
- Practical usage in the app is split by trust level:
29
-
30
- - normal server routes and components use `createClient()`
31
- - public static-ish reads often use `getSsgSupabaseClient()`
32
- - admin or system workflows use `getServiceRoleSupabaseClient()`
33
-
34
- ## Auth Flow
35
-
36
- ### Session exchange
37
-
38
- `app/auth/callback/route.ts` handles Supabase auth callback exchanges:
39
-
40
- 1. read the `code` query parameter
41
- 2. exchange it for a session with `supabase.auth.exchangeCodeForSession()`
42
- 3. load the user's profile and role
43
- 4. redirect through `resolvePostAuthRedirect()`
44
-
45
- ### Profile creation
46
-
47
- The first-user and profile bootstrap logic lives in the database, not in React
48
- code.
49
-
50
- `00000000000005_setup_functions_and_triggers.sql` defines:
51
-
52
- - `handle_new_user()`
53
- - `on_auth_user_created` trigger on `auth.users`
54
-
55
- That trigger:
56
-
57
- - creates the first local admin automatically
58
- - creates later users as `USER`
59
- - inserts or updates `profiles`
60
- - copies selected metadata such as `full_name`, avatar URL, and GitHub username
61
-
62
- ### CMS authorization
63
-
64
- The CMS shell in `app/cms/CmsClientLayout.tsx` currently expects:
65
-
66
- - an authenticated user
67
- - a resolved profile role of `ADMIN` or `WRITER`
68
-
69
- Writers and admins can enter the CMS. Admin-only navigation is used for
70
- settings such as payments, shipping, users, and some branding/config surfaces.
71
-
72
- ### No live app middleware file
73
-
74
- There is a generic Supabase middleware helper in `libs/db/src/lib/supabase`,
75
- but there is no live `apps/nextblock/middleware.ts` file in the current app.
76
- Document the callback, layout, and RLS model as the active auth path rather
77
- than assuming middleware-based route protection is in use.
78
-
79
- ## Schema Overview
80
-
81
- ### Core platform tables
82
-
83
- Defined primarily in `00000000000001_setup_cms_core.sql`:
84
-
85
- - `site_settings`
86
- - `profiles`
87
- - `user_addresses`
88
- - `languages`
89
- - `media`
90
- - `translations`
91
- - `logos`
92
-
93
- ### Content tables
94
-
95
- Defined primarily in `00000000000002_setup_content_tables.sql`:
96
-
97
- - `posts`
98
- - `pages`
99
- - `blocks`
100
- - `navigation_items`
101
- - `page_revisions`
102
- - `post_revisions`
103
-
104
- ### Commerce tables
105
-
106
- Defined across `00000000000003` and `00000000000004`:
107
-
108
- - `products`
109
- - `product_media`
110
- - `product_attributes`
111
- - `product_attribute_terms`
112
- - `product_variants`
113
- - `inventory_items`
114
- - `variant_attribute_mapping`
115
- - `package_activations`
116
- - `freemius_plans`
117
- - `freemius_pricing`
118
- - `orders`
119
- - `order_items`
120
- - `shipping_zones`
121
- - `shipping_zone_locations`
122
- - `shipping_zone_methods`
123
- - `tax_rates`
124
- - `currencies`
125
-
126
- ### Post-baseline tables
127
-
128
- Added after the squashed baseline by later migrations:
129
-
130
- - `categories` and `product_categories` — catalog organization
131
- (migration `00000000000019`; translated via `00000000000020`)
132
- - `custom_block_definitions` — data-driven custom block registry
133
- (migration `00000000000023`; see [10-CUSTOM-BLOCKS.md](./10-CUSTOM-BLOCKS.md))
134
- - `ucp_cart_sessions` — persisted cart sessions (migration `00000000000024`)
135
- - a `blocks` JSONB column plus `product_id` link for block-based product
136
- descriptions (migration `00000000000017`)
137
-
138
- ## Row Level Security Patterns
139
-
140
- `00000000000006_setup_rls_and_grants.sql` is the consolidated RLS file.
141
-
142
- The high-level access model is:
143
-
144
- - public read access for languages, media, translations, published content, and
145
- several storefront commerce tables
146
- - authenticated self-service access for user addresses and customer-owned
147
- orders
148
- - `ADMIN` or `WRITER` write access for most CMS authoring tables
149
- - `ADMIN`-only write access for higher-risk configuration surfaces
150
- - `service_role` full access where background jobs or system syncs need it
151
-
152
- Commerce-specific policy highlights include:
153
-
154
- - public read access for products, product media, product attributes, variants,
155
- shipping zones, shipping methods, tax rates, and active currencies
156
- - customer-scoped read access for `orders` and `order_items`
157
- - service-role management access for orders, order items, inventory, taxes, and
158
- currencies
159
-
160
- ## Migration Structure
161
-
162
- ### Current reality
163
-
164
- The folder was **re-baselined in 2026-07**: the previous 45 migrations
165
- (`00000000000000`–`00000000000044`) were squashed into a four-file idempotent
166
- baseline, generated from a fresh-apply `pg_dump` by
167
- `tools/scripts/rebaseline-transform.mjs` and verified byte-identical to the old
168
- tree. The current sequence is:
169
-
170
- - `00000000000000_baseline_schema.sql` — enums, functions, tables, sequences
171
- (all `IF NOT EXISTS` / `CREATE OR REPLACE`) plus the re-attached `auth.users`
172
- → `handle_new_user` trigger.
173
- - `00000000000001_baseline_constraints_and_indexes.sql` — primary/unique/check
174
- and foreign-key constraints (guarded) plus all indexes.
175
- - `00000000000002_baseline_security_and_grants.sql` — RLS enablement, policies
176
- (`DROP … IF EXISTS` first), triggers, and grants.
177
- - `00000000000003_baseline_seed.sql` — canonical demo content, `ON CONFLICT DO
178
- NOTHING` (no users, no secrets).
179
-
180
- Every file is fully idempotent. Existing databases already have versions
181
- `000`–`003` recorded, so both appliers skip the baseline — it only runs on a
182
- fresh/empty database. **The next new migration is `00000000000004`**, appended
183
- forward-only.
184
-
185
- ### Production migration policy
186
-
187
- NextBlock has live Supabase data. Treat migrations as append-only for any
188
- production or shared database change.
189
-
190
- - Do not edit, recycle, squash, reorder, or delete migration files that may
191
- already be recorded in a shared or production Supabase project.
192
- - Add a new forward-only `.sql` file under
193
- `libs/db/src/supabase/migrations` for each new schema/data change.
194
- - Keep migrations non-destructive by default. Avoid dropping or rewriting data
195
- that may include orders, users, payments, or customer records.
196
- - Run `npm run db:migrate:check` before `npm run db:migrate`.
197
- - If an existing database lists old baseline files such as
198
- `00000000000000_baseline_schema.sql` as pending, do not replay them. Use
199
- `npm run db:migrate:repair-history:check`, then
200
- `npm run db:migrate:repair-history --through=00000000000003` (the baseline's
201
- top file creates no tables, so auto-detection otherwise stops at `000`), then
202
- rerun `npm run db:migrate:check`.
203
- - Use `npm run db:migrate:fresh` only for a brand-new empty database.
204
-
205
- ### Category map
206
-
207
- | Migration file | Domain | What it covers |
208
- | :-- | :-- | :-- |
209
- | `00000000000000_baseline_schema.sql` | Core, CMS, Commerce | all enums, 40 functions, 49 tables + sequences (idempotent), and the `auth.users` → `handle_new_user` bootstrap trigger |
210
- | `00000000000001_baseline_constraints_and_indexes.sql` | Core, CMS, Commerce | all primary/unique/check + foreign-key constraints (guarded) and every index |
211
- | `00000000000002_baseline_security_and_grants.sql` | Security | RLS enablement on every table, all policies, timestamp/business triggers, grants |
212
- | `00000000000003_baseline_seed.sql` | Seeds | canonical demo content — languages, currencies, site settings, translations, media, pages/posts/blocks, navigation, shipping defaults — all `ON CONFLICT DO NOTHING` |
213
-
214
- The pre-2026-07 history (foundation/enums, cms_core, content_tables, catalog,
215
- fulfillment, functions_and_triggers, rls_and_grants, indexes, the seed files, and
216
- later additions like custom block definitions, product blocks, categories, cart
217
- sessions, drafts, privacy/MFA, system alerts, interactions) is all folded into the
218
- four files above; the earlier per-file boundaries survive only as comment headers
219
- inside the generated SQL.
220
-
221
- ### How to read the folder
222
-
223
- Read the migrations in lexical order from `00000000000000` upward.
224
-
225
- That sequence is the cleanest under-the-hood blueprint for:
226
-
227
- - which tables exist
228
- - what triggers and functions are available
229
- - what security rules are enforced
230
- - what default content and configuration are seeded
231
-
232
- If you need to understand whether the platform really supports something, check
233
- the migration file first, then trace the corresponding route or library code.
234
-
235
- ## Important Site Settings in Active Use
236
-
237
- These keys are actively referenced by the current codebase:
238
-
239
- - `enabled_payment_providers`
240
- - `ecommerce_inventory_settings`
241
- - `invoice_settings`
242
- - `footer_copyright`
243
- - `is_admin_created`
244
-
245
- There are many more seeded settings, but these are the most important ones for
246
- understanding current runtime behavior.
1
+ # 04 Database and Auth
2
+
3
+ ## Source of Truth
4
+
5
+ The database and auth implementation is spread across:
6
+
7
+ - `libs/db/src/lib/supabase/*`
8
+ - `libs/db/src/lib/package-validation.ts`
9
+ - `libs/db/src/supabase/config.toml`
10
+ - `libs/db/src/supabase/migrations/*`
11
+ - `apps/nextblock/app/auth/callback/route.ts`
12
+ - `apps/nextblock/app/cms/*`
13
+
14
+ When documentation and a migration disagree, the migration folder is the final
15
+ authority for schema, triggers, grants, and policies.
16
+
17
+ ## Supabase Client Surfaces
18
+
19
+ `libs/db/src/server.ts` currently exports:
20
+
21
+ - `createClient()`: request-scoped server client using auth cookies
22
+ - `getProfileWithRoleServerSide()`
23
+ - `getActiveLanguagesServerSide()`
24
+ - `getServiceRoleSupabaseClient()`
25
+ - `getSsgSupabaseClient()`
26
+ - package activation helpers such as `verifyPackageOnline()`
27
+
28
+ Practical usage in the app is split by trust level:
29
+
30
+ - normal server routes and components use `createClient()`
31
+ - public static-ish reads often use `getSsgSupabaseClient()`
32
+ - admin or system workflows use `getServiceRoleSupabaseClient()`
33
+
34
+ ## Auth Flow
35
+
36
+ ### Session exchange
37
+
38
+ `app/auth/callback/route.ts` handles Supabase auth callback exchanges:
39
+
40
+ 1. read the `code` query parameter
41
+ 2. exchange it for a session with `supabase.auth.exchangeCodeForSession()`
42
+ 3. load the user's profile and role
43
+ 4. redirect through `resolvePostAuthRedirect()`
44
+
45
+ ### Profile creation
46
+
47
+ The first-user and profile bootstrap logic lives in the database, not in React
48
+ code.
49
+
50
+ `00000000000005_setup_functions_and_triggers.sql` defines:
51
+
52
+ - `handle_new_user()`
53
+ - `on_auth_user_created` trigger on `auth.users`
54
+
55
+ That trigger:
56
+
57
+ - creates the first local admin automatically
58
+ - creates later users as `USER`
59
+ - inserts or updates `profiles`
60
+ - copies selected metadata such as `full_name`, avatar URL, and GitHub username
61
+
62
+ ### CMS authorization
63
+
64
+ The CMS shell in `app/cms/CmsClientLayout.tsx` currently expects:
65
+
66
+ - an authenticated user
67
+ - a resolved profile role of `ADMIN` or `WRITER`
68
+
69
+ Writers and admins can enter the CMS. Admin-only navigation is used for
70
+ settings such as payments, shipping, users, and some branding/config surfaces.
71
+
72
+ ### No live app middleware file
73
+
74
+ There is a generic Supabase middleware helper in `libs/db/src/lib/supabase`,
75
+ but there is no live `apps/nextblock/middleware.ts` file in the current app.
76
+ Document the callback, layout, and RLS model as the active auth path rather
77
+ than assuming middleware-based route protection is in use.
78
+
79
+ ## Schema Overview
80
+
81
+ ### Core platform tables
82
+
83
+ Defined primarily in `00000000000001_setup_cms_core.sql`:
84
+
85
+ - `site_settings`
86
+ - `profiles`
87
+ - `user_addresses`
88
+ - `languages`
89
+ - `media`
90
+ - `translations`
91
+ - `logos`
92
+
93
+ ### Content tables
94
+
95
+ Defined primarily in `00000000000002_setup_content_tables.sql`:
96
+
97
+ - `posts`
98
+ - `pages`
99
+ - `blocks`
100
+ - `navigation_items`
101
+ - `page_revisions`
102
+ - `post_revisions`
103
+
104
+ ### Commerce tables
105
+
106
+ Defined across `00000000000003` and `00000000000004`:
107
+
108
+ - `products`
109
+ - `product_media`
110
+ - `product_attributes`
111
+ - `product_attribute_terms`
112
+ - `product_variants`
113
+ - `inventory_items`
114
+ - `variant_attribute_mapping`
115
+ - `package_activations`
116
+ - `freemius_plans`
117
+ - `freemius_pricing`
118
+ - `orders`
119
+ - `order_items`
120
+ - `shipping_zones`
121
+ - `shipping_zone_locations`
122
+ - `shipping_zone_methods`
123
+ - `tax_rates`
124
+ - `currencies`
125
+
126
+ ### Post-baseline tables
127
+
128
+ Added after the squashed baseline by later migrations:
129
+
130
+ - `categories` and `product_categories` — catalog organization
131
+ (migration `00000000000019`; translated via `00000000000020`)
132
+ - `custom_block_definitions` — data-driven custom block registry
133
+ (migration `00000000000023`; see [10-CUSTOM-BLOCKS.md](./10-CUSTOM-BLOCKS.md))
134
+ - `ucp_cart_sessions` — persisted cart sessions (migration `00000000000024`)
135
+ - a `blocks` JSONB column plus `product_id` link for block-based product
136
+ descriptions (migration `00000000000017`)
137
+
138
+ ## Row Level Security Patterns
139
+
140
+ `00000000000006_setup_rls_and_grants.sql` is the consolidated RLS file.
141
+
142
+ The high-level access model is:
143
+
144
+ - public read access for languages, media, translations, published content, and
145
+ several storefront commerce tables
146
+ - authenticated self-service access for user addresses and customer-owned
147
+ orders
148
+ - `ADMIN` or `WRITER` write access for most CMS authoring tables
149
+ - `ADMIN`-only write access for higher-risk configuration surfaces
150
+ - `service_role` full access where background jobs or system syncs need it
151
+
152
+ Commerce-specific policy highlights include:
153
+
154
+ - public read access for products, product media, product attributes, variants,
155
+ shipping zones, shipping methods, tax rates, and active currencies
156
+ - customer-scoped read access for `orders` and `order_items`
157
+ - service-role management access for orders, order items, inventory, taxes, and
158
+ currencies
159
+
160
+ ## Migration Structure
161
+
162
+ ### Current reality
163
+
164
+ The folder was **re-baselined in 2026-07**: the previous 45 migrations
165
+ (`00000000000000`–`00000000000044`) were squashed into a four-file idempotent
166
+ baseline, generated from a fresh-apply `pg_dump` by
167
+ `tools/scripts/rebaseline-transform.mjs` and verified byte-identical to the old
168
+ tree. The current sequence is:
169
+
170
+ - `00000000000000_baseline_schema.sql` — enums, functions, tables, sequences
171
+ (all `IF NOT EXISTS` / `CREATE OR REPLACE`) plus the re-attached `auth.users`
172
+ → `handle_new_user` trigger.
173
+ - `00000000000001_baseline_constraints_and_indexes.sql` — primary/unique/check
174
+ and foreign-key constraints (guarded) plus all indexes.
175
+ - `00000000000002_baseline_security_and_grants.sql` — RLS enablement, policies
176
+ (`DROP … IF EXISTS` first), triggers, and grants.
177
+ - `00000000000003_baseline_seed.sql` — canonical demo content, `ON CONFLICT DO
178
+ NOTHING` (no users, no secrets).
179
+
180
+ Every file is fully idempotent. Existing databases already have versions
181
+ `000`–`003` recorded, so both appliers skip the baseline — it only runs on a
182
+ fresh/empty database. **The next new migration is `00000000000004`**, appended
183
+ forward-only.
184
+
185
+ ### Production migration policy
186
+
187
+ NextBlock has live Supabase data. Treat migrations as append-only for any
188
+ production or shared database change.
189
+
190
+ - Do not edit, recycle, squash, reorder, or delete migration files that may
191
+ already be recorded in a shared or production Supabase project.
192
+ - Add a new forward-only `.sql` file under
193
+ `libs/db/src/supabase/migrations` for each new schema/data change.
194
+ - Keep migrations non-destructive by default. Avoid dropping or rewriting data
195
+ that may include orders, users, payments, or customer records.
196
+ - Run `npm run db:migrate:check` before `npm run db:migrate`.
197
+ - If an existing database lists old baseline files such as
198
+ `00000000000000_baseline_schema.sql` as pending, do not replay them. Use
199
+ `npm run db:migrate:repair-history:check`, then
200
+ `npm run db:migrate:repair-history --through=00000000000003` (the baseline's
201
+ top file creates no tables, so auto-detection otherwise stops at `000`), then
202
+ rerun `npm run db:migrate:check`.
203
+ - Use `npm run db:migrate:fresh` only for a brand-new empty database.
204
+
205
+ ### Category map
206
+
207
+ | Migration file | Domain | What it covers |
208
+ | :-- | :-- | :-- |
209
+ | `00000000000000_baseline_schema.sql` | Core, CMS, Commerce | all enums, 40 functions, 49 tables + sequences (idempotent), and the `auth.users` → `handle_new_user` bootstrap trigger |
210
+ | `00000000000001_baseline_constraints_and_indexes.sql` | Core, CMS, Commerce | all primary/unique/check + foreign-key constraints (guarded) and every index |
211
+ | `00000000000002_baseline_security_and_grants.sql` | Security | RLS enablement on every table, all policies, timestamp/business triggers, grants |
212
+ | `00000000000003_baseline_seed.sql` | Seeds | canonical demo content — languages, currencies, site settings, translations, media, pages/posts/blocks, navigation, shipping defaults — all `ON CONFLICT DO NOTHING` |
213
+
214
+ The pre-2026-07 history (foundation/enums, cms_core, content_tables, catalog,
215
+ fulfillment, functions_and_triggers, rls_and_grants, indexes, the seed files, and
216
+ later additions like custom block definitions, product blocks, categories, cart
217
+ sessions, drafts, privacy/MFA, system alerts, interactions) is all folded into the
218
+ four files above; the earlier per-file boundaries survive only as comment headers
219
+ inside the generated SQL.
220
+
221
+ ### How to read the folder
222
+
223
+ Read the migrations in lexical order from `00000000000000` upward.
224
+
225
+ That sequence is the cleanest under-the-hood blueprint for:
226
+
227
+ - which tables exist
228
+ - what triggers and functions are available
229
+ - what security rules are enforced
230
+ - what default content and configuration are seeded
231
+
232
+ If you need to understand whether the platform really supports something, check
233
+ the migration file first, then trace the corresponding route or library code.
234
+
235
+ ## Important Site Settings in Active Use
236
+
237
+ These keys are actively referenced by the current codebase:
238
+
239
+ - `enabled_payment_providers`
240
+ - `ecommerce_inventory_settings`
241
+ - `invoice_settings`
242
+ - `footer_copyright`
243
+ - `is_admin_created`
244
+
245
+ There are many more seeded settings, but these are the most important ones for
246
+ understanding current runtime behavior.