create-nextblock 0.14.1 → 0.14.2
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.
- package/docker-template/.dockerignore +23 -23
- package/docker-template/.env.docker.example +69 -69
- package/docker-template/docker/db/init/99-jwt.sql +6 -6
- package/docker-template/docker/db/init/99-roles.sql +25 -25
- package/docker-template/docker/kong/kong.yml +112 -112
- package/docker-template/scripts/docker-setup.mjs +310 -310
- package/libs/db/tsconfig.lib.json +3 -3
- package/libs/editor/tsconfig.lib.json +3 -3
- package/libs/ui/tsconfig.lib.json +3 -3
- package/libs/utils/tsconfig.json +3 -3
- package/package.json +1 -1
- package/project.json +19 -19
- package/templates/nextblock-template/.browserslistrc +11 -11
- package/templates/nextblock-template/.dockerignore +23 -23
- package/templates/nextblock-template/README.md +34 -34
- package/templates/nextblock-template/app/(auth-pages)/layout.tsx +9 -9
- package/templates/nextblock-template/app/(auth-pages)/post-sign-in/page.tsx +27 -27
- package/templates/nextblock-template/app/(auth-pages)/sign-up/page.tsx +46 -46
- package/templates/nextblock-template/app/(auth-pages)/two-factor/page.tsx +51 -51
- package/templates/nextblock-template/app/ToasterProvider.tsx +17 -17
- package/templates/nextblock-template/app/[slug]/pageClientActions.ts +7 -7
- package/templates/nextblock-template/app/actions/consent.ts +57 -57
- package/templates/nextblock-template/app/actions/postActions.ts +146 -146
- package/templates/nextblock-template/app/actions/twoFactorEmail.ts +22 -22
- package/templates/nextblock-template/app/api/ai/cortex/build-widget/route.ts +153 -153
- package/templates/nextblock-template/app/api/ai/generate-blocks/route.ts +96 -96
- package/templates/nextblock-template/app/api/brand/email-logo/route.ts +48 -48
- package/templates/nextblock-template/app/api/cms/check-updates/route.ts +44 -44
- package/templates/nextblock-template/app/api/cms/full-backup/export/route.ts +33 -33
- package/templates/nextblock-template/app/api/cms/full-backup/restore/route.ts +63 -63
- package/templates/nextblock-template/app/api/cron/reset-sandbox/route.ts +3490 -3490
- package/templates/nextblock-template/app/api/cron/reset-sandbox/sandboxResetSql.ts +5749 -5749
- package/templates/nextblock-template/app/api/cron/sync-currencies/route.ts +39 -39
- package/templates/nextblock-template/app/api/custom-blocks/db-relations/route.ts +92 -92
- package/templates/nextblock-template/app/api/custom-blocks/editor-definitions/route.ts +43 -43
- package/templates/nextblock-template/app/api/media/library/route.ts +69 -69
- package/templates/nextblock-template/app/api/media/r2-presigned/route.ts +53 -53
- package/templates/nextblock-template/app/api/media/record/route.ts +160 -160
- package/templates/nextblock-template/app/api/search/route.ts +43 -43
- package/templates/nextblock-template/app/article/[slug]/PostClientContent.tsx +441 -441
- package/templates/nextblock-template/app/auth/callback/route.ts +31 -31
- package/templates/nextblock-template/app/cart/page.tsx +7 -7
- package/templates/nextblock-template/app/cms/blocks/components/CustomBlockEditorPreview.tsx +160 -160
- package/templates/nextblock-template/app/cms/blocks/components/MediaLibraryModal.tsx +149 -149
- package/templates/nextblock-template/app/cms/blocks/editors/DynamicCustomBlockEditor.tsx +167 -167
- package/templates/nextblock-template/app/cms/blocks/editors/ImageBlockEditor.tsx +4 -2
- package/templates/nextblock-template/app/cms/blocks/editors/TextBlockEditor.tsx +90 -90
- package/templates/nextblock-template/app/cms/components/ConnectGitHubButton.tsx +122 -122
- package/templates/nextblock-template/app/cms/components/CortexAiPageContext.tsx +58 -58
- package/templates/nextblock-template/app/cms/components/FeedbackModal.tsx +36 -36
- package/templates/nextblock-template/app/cms/components/SystemAlertsBanner.tsx +112 -112
- package/templates/nextblock-template/app/cms/components/TwoFactorReminderBanner.tsx +45 -45
- package/templates/nextblock-template/app/cms/components/github-connect-actions.ts +102 -102
- package/templates/nextblock-template/app/cms/components/system-alerts-actions.ts +31 -31
- package/templates/nextblock-template/app/cms/custom-blocks/[id]/edit/page.tsx +66 -66
- package/templates/nextblock-template/app/cms/custom-blocks/actions.ts +519 -519
- package/templates/nextblock-template/app/cms/custom-blocks/components/BlocksLibraryTransferControls.tsx +256 -256
- package/templates/nextblock-template/app/cms/custom-blocks/components/DBRelationSelect.tsx +384 -384
- package/templates/nextblock-template/app/cms/custom-blocks/components/ImageR2Picker.tsx +221 -221
- package/templates/nextblock-template/app/cms/custom-blocks/new/page.tsx +12 -12
- package/templates/nextblock-template/app/cms/custom-blocks/page.tsx +438 -438
- package/templates/nextblock-template/app/cms/dashboard/actions.ts +228 -228
- package/templates/nextblock-template/app/cms/dashboard/components/DashboardOnboarding.tsx +130 -130
- package/templates/nextblock-template/app/cms/import-export/actions.ts +226 -226
- package/templates/nextblock-template/app/cms/layout.tsx +73 -73
- package/templates/nextblock-template/app/cms/media/components/FolderNavigator.tsx +273 -273
- package/templates/nextblock-template/app/cms/media/components/FolderTree.tsx +122 -122
- package/templates/nextblock-template/app/cms/media/components/MediaEditForm.tsx +26 -26
- package/templates/nextblock-template/app/cms/media/components/MediaGridClient.tsx +69 -69
- package/templates/nextblock-template/app/cms/navigation/components/NavigationMenuDnd.tsx +3 -3
- package/templates/nextblock-template/app/cms/products/attributes/page.tsx +12 -12
- package/templates/nextblock-template/app/cms/products/categories/page.tsx +12 -12
- package/templates/nextblock-template/app/cms/products/inventory/page.tsx +13 -13
- package/templates/nextblock-template/app/cms/products/new/page.tsx +135 -135
- package/templates/nextblock-template/app/cms/products/productFormData.ts +133 -133
- package/templates/nextblock-template/app/cms/products/settings/page.tsx +5 -5
- package/templates/nextblock-template/app/cms/promotions/PromotionsWorkspace.tsx +456 -456
- package/templates/nextblock-template/app/cms/promotions/actions.ts +115 -115
- package/templates/nextblock-template/app/cms/promotions/page.tsx +31 -31
- package/templates/nextblock-template/app/cms/revisions/service.ts +19 -19
- package/templates/nextblock-template/app/cms/revisions/utils.ts +132 -132
- package/templates/nextblock-template/app/cms/settings/backup-restore/BackupRestoreWorkspace.tsx +1004 -1004
- package/templates/nextblock-template/app/cms/settings/backup-restore/page.tsx +29 -29
- package/templates/nextblock-template/app/cms/settings/bot-protection/page.tsx +24 -24
- package/templates/nextblock-template/app/cms/settings/cortex-ai/SandboxCortexAiSettingsClient.tsx +688 -688
- package/templates/nextblock-template/app/cms/settings/currencies/actions.ts +331 -331
- package/templates/nextblock-template/app/cms/settings/currencies/page.tsx +494 -494
- package/templates/nextblock-template/app/cms/settings/email/page.tsx +28 -28
- package/templates/nextblock-template/app/cms/settings/extra-translations/ExtraTranslationsWorkspace.tsx +767 -767
- package/templates/nextblock-template/app/cms/settings/extra-translations/page.tsx +93 -93
- package/templates/nextblock-template/app/cms/settings/google-analytics/page.tsx +26 -26
- package/templates/nextblock-template/app/cms/settings/logos/[id]/edit/page.tsx +7 -7
- package/templates/nextblock-template/app/cms/settings/logos/components/BrandingSettingsForm.tsx +339 -339
- package/templates/nextblock-template/app/cms/settings/logos/components/DeleteLogoButton.tsx +21 -21
- package/templates/nextblock-template/app/cms/settings/logos/components/LogoForm.tsx +23 -21
- package/templates/nextblock-template/app/cms/settings/logos/components/SetActiveLogoButton.tsx +42 -42
- package/templates/nextblock-template/app/cms/settings/logos/components/SiteSeoSettingsForm.tsx +133 -133
- package/templates/nextblock-template/app/cms/settings/logos/new/page.tsx +8 -8
- package/templates/nextblock-template/app/cms/settings/packages/package-card.tsx +122 -122
- package/templates/nextblock-template/app/cms/settings/privacy/page.tsx +27 -27
- package/templates/nextblock-template/app/cms/settings/registration/page.tsx +27 -27
- package/templates/nextblock-template/app/cms/settings/security/components/SecurityPanel.tsx +9 -7
- package/templates/nextblock-template/app/cms/settings/security/page.tsx +33 -33
- package/templates/nextblock-template/app/cms/settings/taxes/page.tsx +21 -21
- package/templates/nextblock-template/app/cms/shipping/page.tsx +20 -20
- package/templates/nextblock-template/app/cms/users/components/DeleteUserButton.tsx +12 -12
- package/templates/nextblock-template/app/lib/site-settings.ts +105 -105
- package/templates/nextblock-template/app/profile/ProfilePageHeader.tsx +16 -16
- package/templates/nextblock-template/app/profile/ProfilePageMissingState.tsx +9 -9
- package/templates/nextblock-template/app/profile/account-links.ts +22 -22
- package/templates/nextblock-template/app/profile/orders/CustomerOrdersPageClient.tsx +124 -124
- package/templates/nextblock-template/app/profile/orders/page.tsx +19 -19
- package/templates/nextblock-template/app/profile/password/PasswordSettingsPageClient.tsx +128 -128
- package/templates/nextblock-template/app/profile/password/actions.ts +59 -59
- package/templates/nextblock-template/app/profile/password/page.tsx +27 -27
- package/templates/nextblock-template/app/setup/SetupWizard.tsx +678 -678
- package/templates/nextblock-template/app/setup/layout.tsx +13 -13
- package/templates/nextblock-template/app/setup/page.tsx +111 -111
- package/templates/nextblock-template/app/sitemap.ts +130 -130
- package/templates/nextblock-template/components/CartDrawerLoader.tsx +7 -7
- package/templates/nextblock-template/components/DeferredCartDrawer.tsx +23 -23
- package/templates/nextblock-template/components/DeferredGoogleAnalytics.tsx +70 -70
- package/templates/nextblock-template/components/DeferredGoogleTagManager.tsx +70 -70
- package/templates/nextblock-template/components/DeferredSpeedInsights.tsx +69 -69
- package/templates/nextblock-template/components/FeatureImageHero.tsx +47 -47
- package/templates/nextblock-template/components/FooterNavigation.tsx +32 -32
- package/templates/nextblock-template/components/HtmlScriptExecutor.tsx +47 -47
- package/templates/nextblock-template/components/LanguageSwitcher.tsx +2 -2
- package/templates/nextblock-template/components/PublicEnvBootstrap.tsx +30 -30
- package/templates/nextblock-template/components/ResponsiveNav.tsx +14 -14
- package/templates/nextblock-template/components/auth/AuthBotProtection.tsx +182 -182
- package/templates/nextblock-template/components/blocks/PostCardSkeleton.tsx +12 -12
- package/templates/nextblock-template/components/blocks/PostsGridBlock.tsx +12 -12
- package/templates/nextblock-template/components/blocks/ecommerceRendererLoaders.ts +23 -23
- package/templates/nextblock-template/components/blocks/renderers/FormBlockRenderer.tsx +249 -249
- package/templates/nextblock-template/components/blocks/types.ts +7 -7
- package/templates/nextblock-template/components/env-var-warning.tsx +3 -3
- package/templates/nextblock-template/components/form-message.tsx +32 -32
- package/templates/nextblock-template/components/media/YouTubeFacade.tsx +105 -105
- package/templates/nextblock-template/components/media/youtube-embed-replace.tsx +32 -32
- package/templates/nextblock-template/components/privacy/ConsentBanner.tsx +170 -170
- package/templates/nextblock-template/components/privacy/ConsentGatedAnalytics.tsx +70 -70
- package/templates/nextblock-template/components/renderers/CachedDynamicLayoutEngine.tsx +28 -28
- package/templates/nextblock-template/components/renderers/DynamicLayoutEngine.test.tsx +166 -166
- package/templates/nextblock-template/components/renderers/DynamicLayoutEngine.tsx +471 -471
- package/templates/nextblock-template/components/submit-button.tsx +23 -23
- package/templates/nextblock-template/components/theme-switcher.tsx +8 -8
- package/templates/nextblock-template/components/visual-editing/DeferredVisualEditing.tsx +21 -21
- package/templates/nextblock-template/context/AuthContext.tsx +23 -23
- package/templates/nextblock-template/context/language-rest-client.ts +32 -32
- package/templates/nextblock-template/docker/db/init/99-jwt.sql +6 -6
- package/templates/nextblock-template/docker/db/init/99-roles.sql +25 -25
- package/templates/nextblock-template/docker/kong/kong.yml +112 -112
- package/templates/nextblock-template/docs/01-PROJECT-OVERVIEW.md +94 -94
- package/templates/nextblock-template/docs/02-ECOMMERCE-CAPABILITIES.md +364 -364
- package/templates/nextblock-template/docs/03-CMS-AND-EDITOR.md +202 -202
- package/templates/nextblock-template/docs/04-DATABASE-AND-AUTH.md +246 -246
- package/templates/nextblock-template/docs/06-CLI-AND-SCAFFOLDING.md +176 -176
- package/templates/nextblock-template/docs/07-BLOCK-SDK-AND-EXTENSIBILITY.md +146 -146
- package/templates/nextblock-template/docs/10-CUSTOM-BLOCKS.md +222 -222
- package/templates/nextblock-template/docs/11-SELF-HOSTED-DOCKER.md +173 -173
- package/templates/nextblock-template/docs/12-VERCEL-DEPLOYMENT.md +170 -170
- package/templates/nextblock-template/docs/13-STAYING-UP-TO-DATE.md +151 -151
- package/templates/nextblock-template/docs/README.md +39 -39
- package/templates/nextblock-template/hooks/use-hotkeys.ts +21 -21
- package/templates/nextblock-template/hooks/useGlobalSearch.ts +101 -101
- package/templates/nextblock-template/index.d.ts +7 -7
- package/templates/nextblock-template/lib/app-secrets.ts +39 -39
- package/templates/nextblock-template/lib/auth/cookies.ts +47 -47
- package/templates/nextblock-template/lib/auth/crypto.ts +45 -45
- package/templates/nextblock-template/lib/auth/trustedDevices.ts +92 -92
- package/templates/nextblock-template/lib/auth-redirects.ts +46 -46
- package/templates/nextblock-template/lib/blocks/README.md +13 -13
- package/templates/nextblock-template/lib/botProtection/verify.ts +134 -134
- package/templates/nextblock-template/lib/cms-transfer/server.ts +2243 -2243
- package/templates/nextblock-template/lib/cms-transfer/types.ts +145 -145
- package/templates/nextblock-template/lib/custom-block-definitions.ts +87 -87
- package/templates/nextblock-template/lib/custom-block-r2-upload-shared.ts +178 -178
- package/templates/nextblock-template/lib/custom-block-r2-upload.test.ts +140 -140
- package/templates/nextblock-template/lib/custom-block-r2-upload.ts +88 -88
- package/templates/nextblock-template/lib/custom-block-relations.test.ts +227 -227
- package/templates/nextblock-template/lib/custom-block-relations.ts +279 -279
- package/templates/nextblock-template/lib/custom-block-safelist.ts +14 -14
- package/templates/nextblock-template/lib/editor/dynamic-extension-core.test.ts +172 -172
- package/templates/nextblock-template/lib/editor/dynamic-extension-core.ts +213 -213
- package/templates/nextblock-template/lib/editor/dynamic-extension-loader.ts +22 -22
- package/templates/nextblock-template/lib/editor/dynamic-extensions.tsx +193 -193
- package/templates/nextblock-template/lib/email/branding-format.test.ts +133 -133
- package/templates/nextblock-template/lib/email/branding-format.ts +123 -123
- package/templates/nextblock-template/lib/email/branding.ts +76 -76
- package/templates/nextblock-template/lib/full-backup/manifest.test.ts +121 -121
- package/templates/nextblock-template/lib/full-backup/manifest.ts +206 -206
- package/templates/nextblock-template/lib/full-backup/server.ts +743 -743
- package/templates/nextblock-template/lib/logos/active-logo.ts +53 -53
- package/templates/nextblock-template/lib/media/resolveMediaUrl.ts +54 -54
- package/templates/nextblock-template/lib/media/youtube.ts +99 -99
- package/templates/nextblock-template/lib/onboarding/actions.ts +31 -31
- package/templates/nextblock-template/lib/onboarding/status.ts +222 -222
- package/templates/nextblock-template/lib/posts/readTime.ts +60 -60
- package/templates/nextblock-template/lib/privacy/consent-client.ts +57 -57
- package/templates/nextblock-template/lib/privacy/contact-emails.ts +64 -64
- package/templates/nextblock-template/lib/privacy/settings.ts +115 -115
- package/templates/nextblock-template/lib/privacy/types.ts +69 -69
- package/templates/nextblock-template/lib/promotions/server.test.ts +74 -74
- package/templates/nextblock-template/lib/promotions/server.ts +741 -741
- package/templates/nextblock-template/lib/resolve-block-relations.test.ts +142 -142
- package/templates/nextblock-template/lib/resolve-block-relations.ts +255 -255
- package/templates/nextblock-template/lib/search/types.ts +27 -27
- package/templates/nextblock-template/lib/setup/actions.ts +460 -460
- package/templates/nextblock-template/lib/setup/env-status.ts +125 -125
- package/templates/nextblock-template/lib/setup/env-write.ts +111 -111
- package/templates/nextblock-template/lib/setup/migrations-bundle.ts +87 -87
- package/templates/nextblock-template/lib/setup/provisioning.ts +59 -59
- package/templates/nextblock-template/lib/setup/schema-apply.ts +408 -408
- package/templates/nextblock-template/lib/setup/system-config.ts +105 -105
- package/templates/nextblock-template/lib/setup/types.ts +18 -18
- package/templates/nextblock-template/lib/site-url.ts +48 -48
- package/templates/nextblock-template/lib/storage/provider.ts +66 -66
- package/templates/nextblock-template/lib/storage/supabase-storage.ts +103 -103
- package/templates/nextblock-template/lib/updates/check-upstream.ts +441 -441
- package/templates/nextblock-template/lib/updates/github-device.ts +206 -206
- package/templates/nextblock-template/lib/updates/repo-identity.ts +56 -56
- package/templates/nextblock-template/package.json +1 -1
- package/templates/nextblock-template/postcss.config.js +6 -6
- package/templates/nextblock-template/scripts/backup.js +115 -115
- package/templates/nextblock-template/scripts/docker-setup.mjs +310 -310
- package/templates/nextblock-template/scripts/restore.js +385 -385
- package/templates/nextblock-template/scripts/verify-cortex-ai-build-widget.tsx +98 -98
- package/templates/nextblock-template/scripts/verify-cortex-ai-generate-blocks.ts +62 -62
- package/templates/nextblock-template/scripts/verify-cortex-ai-global-tools.ts +537 -537
- package/templates/nextblock-template/scripts/verify-cortex-ai-routing.ts +58 -58
- package/templates/nextblock-template/scripts/verify-custom-block-definitions.ts +188 -188
- package/templates/nextblock-template/scripts/verify-dynamic-custom-block-extensions.ts +123 -123
- package/templates/nextblock-template/scripts/verify-dynamic-layout-engine.tsx +133 -133
- package/templates/nextblock-template/scripts/verify-milestone-2-custom-blocks.ts +65 -65
- package/templates/nextblock-template/tailwind.config.js +25 -25
- package/templates/nextblock-template/tools/build-migrate.mjs +209 -209
- package/templates/nextblock-template/tools/configure-supabase-auth.js +282 -282
- package/templates/nextblock-template/tsconfig.tsbuildinfo +1 -1
- package/templates/nextblock-template/types/jsdom.d.ts +6 -6
- package/tsconfig.base.json +3 -3
|
@@ -1,23 +1,23 @@
|
|
|
1
|
-
# Keep the build context lean; deps are reinstalled in the image and secrets stay out.
|
|
2
|
-
node_modules
|
|
3
|
-
.git
|
|
4
|
-
.github
|
|
5
|
-
.next
|
|
6
|
-
out
|
|
7
|
-
dist
|
|
8
|
-
coverage
|
|
9
|
-
tmp
|
|
10
|
-
backup
|
|
11
|
-
backups
|
|
12
|
-
*.log
|
|
13
|
-
npm-debug.log*
|
|
14
|
-
|
|
15
|
-
# Secrets never enter the image (NEXT_PUBLIC_* arrive as build args).
|
|
16
|
-
.env
|
|
17
|
-
.env.*
|
|
18
|
-
!.env.docker.example
|
|
19
|
-
|
|
20
|
-
# Not needed inside the app image (mounted/used by other compose services instead).
|
|
21
|
-
docker
|
|
22
|
-
supabase/.branches
|
|
23
|
-
supabase/.temp
|
|
1
|
+
# Keep the build context lean; deps are reinstalled in the image and secrets stay out.
|
|
2
|
+
node_modules
|
|
3
|
+
.git
|
|
4
|
+
.github
|
|
5
|
+
.next
|
|
6
|
+
out
|
|
7
|
+
dist
|
|
8
|
+
coverage
|
|
9
|
+
tmp
|
|
10
|
+
backup
|
|
11
|
+
backups
|
|
12
|
+
*.log
|
|
13
|
+
npm-debug.log*
|
|
14
|
+
|
|
15
|
+
# Secrets never enter the image (NEXT_PUBLIC_* arrive as build args).
|
|
16
|
+
.env
|
|
17
|
+
.env.*
|
|
18
|
+
!.env.docker.example
|
|
19
|
+
|
|
20
|
+
# Not needed inside the app image (mounted/used by other compose services instead).
|
|
21
|
+
docker
|
|
22
|
+
supabase/.branches
|
|
23
|
+
supabase/.temp
|
|
@@ -1,69 +1,69 @@
|
|
|
1
|
-
# ──────────────────────────────────────────────────────────────────────────────
|
|
2
|
-
# Reference for the Docker (self-hosted) .env that `npm run docker:setup` generates.
|
|
3
|
-
# You normally do NOT edit this by hand — run `npm run docker:setup` and it writes a
|
|
4
|
-
# `.env` with secure random secrets. This file documents every key the stack reads.
|
|
5
|
-
# ──────────────────────────────────────────────────────────────────────────────
|
|
6
|
-
|
|
7
|
-
# --- Auto-generated secrets (crypto-random) --------------------------------------------------
|
|
8
|
-
POSTGRES_PASSWORD=replace-me-generated
|
|
9
|
-
JWT_SECRET=replace-me-at-least-32-chars
|
|
10
|
-
JWT_EXP=3600
|
|
11
|
-
# anon + service_role keys are HS256 JWTs SIGNED with JWT_SECRET (generated for you):
|
|
12
|
-
ANON_KEY=replace-me-anon-jwt
|
|
13
|
-
SERVICE_ROLE_KEY=replace-me-service-role-jwt
|
|
14
|
-
CRON_SECRET=replace-me-generated
|
|
15
|
-
DRAFT_MODE_SECRET=replace-me-generated
|
|
16
|
-
REVALIDATE_SECRET_TOKEN=replace-me-generated
|
|
17
|
-
|
|
18
|
-
# --- Host port mappings ----------------------------------------------------------------------
|
|
19
|
-
# The published host ports for each service. docker:setup auto-picks a FREE port when a default
|
|
20
|
-
# is taken or reserved by the OS (common on Windows, e.g. Postgres 54322), then keeps the URLs
|
|
21
|
-
# below and LOOPBACK_PROXIES in lockstep. Change a port here only if you also update its URL.
|
|
22
|
-
APP_PORT=3000
|
|
23
|
-
KONG_HTTP_PORT=8000
|
|
24
|
-
MINIO_S3_PORT=9000
|
|
25
|
-
MINIO_CONSOLE_PORT=9001
|
|
26
|
-
POSTGRES_PORT_EXTERNAL=54322
|
|
27
|
-
# In-container loopback (socat): maps the localhost:<port> server code derives from the public
|
|
28
|
-
# URLs to the real service. Left-hand ports MUST match NEXT_PUBLIC_SUPABASE_URL / R2_S3_PUBLIC_ENDPOINT.
|
|
29
|
-
LOOPBACK_PROXIES=8000:kong:8000 9000:minio:9000
|
|
30
|
-
|
|
31
|
-
# --- Supabase wiring (internal container network vs browser) ---------------------------------
|
|
32
|
-
NEXT_PUBLIC_SUPABASE_URL=http://localhost:8000
|
|
33
|
-
NEXT_PUBLIC_SUPABASE_ANON_KEY=${ANON_KEY}
|
|
34
|
-
SUPABASE_SERVICE_ROLE_KEY=${SERVICE_ROLE_KEY}
|
|
35
|
-
API_EXTERNAL_URL=http://localhost:8000
|
|
36
|
-
SITE_URL=http://localhost:3000
|
|
37
|
-
POSTGRES_DB=postgres
|
|
38
|
-
|
|
39
|
-
# --- App ------------------------------------------------------------------------------------
|
|
40
|
-
NEXT_PUBLIC_URL=http://localhost:3000
|
|
41
|
-
NEXT_PUBLIC_IS_SANDBOX=true
|
|
42
|
-
CORTEX_AI_ENCRYPTION_KEY=
|
|
43
|
-
|
|
44
|
-
# --- MinIO object storage (S3-compatible) ----------------------------------------------------
|
|
45
|
-
MINIO_ROOT_USER=nextblock
|
|
46
|
-
MINIO_ROOT_PASSWORD=replace-me-generated
|
|
47
|
-
STORAGE_BUCKET=nextblock
|
|
48
|
-
R2_ACCOUNT_ID=minio
|
|
49
|
-
R2_REGION=us-east-1
|
|
50
|
-
R2_S3_ENDPOINT=http://minio:9000
|
|
51
|
-
# 127.0.0.1 (not localhost) so the browser never sends the app's localhost cookies to MinIO,
|
|
52
|
-
# which would otherwise 400 (MetadataTooLarge) once the Supabase auth cookies grow.
|
|
53
|
-
R2_S3_PUBLIC_ENDPOINT=http://127.0.0.1:9000
|
|
54
|
-
R2_FORCE_PATH_STYLE=true
|
|
55
|
-
NEXT_PUBLIC_R2_BASE_URL=http://127.0.0.1:9000/nextblock
|
|
56
|
-
NEXT_PUBLIC_R2_PUBLIC_URL=http://127.0.0.1:9000/nextblock
|
|
57
|
-
|
|
58
|
-
# --- Cloudflare Turnstile (optional). Press Enter at setup to skip and use the dev sandbox. ---
|
|
59
|
-
NEXT_PUBLIC_TURNSTILE_SITE_KEY=
|
|
60
|
-
TURNSTILE_SECRET_KEY=
|
|
61
|
-
|
|
62
|
-
# --- SMTP (optional). Blank => GoTrue auto-confirms sign-ups (loopback mode). -----------------
|
|
63
|
-
GOTRUE_MAILER_AUTOCONFIRM=true
|
|
64
|
-
SMTP_HOST=
|
|
65
|
-
SMTP_PORT=
|
|
66
|
-
SMTP_USER=
|
|
67
|
-
SMTP_PASS=
|
|
68
|
-
SMTP_FROM_EMAIL=
|
|
69
|
-
SMTP_FROM_NAME=
|
|
1
|
+
# ──────────────────────────────────────────────────────────────────────────────
|
|
2
|
+
# Reference for the Docker (self-hosted) .env that `npm run docker:setup` generates.
|
|
3
|
+
# You normally do NOT edit this by hand — run `npm run docker:setup` and it writes a
|
|
4
|
+
# `.env` with secure random secrets. This file documents every key the stack reads.
|
|
5
|
+
# ──────────────────────────────────────────────────────────────────────────────
|
|
6
|
+
|
|
7
|
+
# --- Auto-generated secrets (crypto-random) --------------------------------------------------
|
|
8
|
+
POSTGRES_PASSWORD=replace-me-generated
|
|
9
|
+
JWT_SECRET=replace-me-at-least-32-chars
|
|
10
|
+
JWT_EXP=3600
|
|
11
|
+
# anon + service_role keys are HS256 JWTs SIGNED with JWT_SECRET (generated for you):
|
|
12
|
+
ANON_KEY=replace-me-anon-jwt
|
|
13
|
+
SERVICE_ROLE_KEY=replace-me-service-role-jwt
|
|
14
|
+
CRON_SECRET=replace-me-generated
|
|
15
|
+
DRAFT_MODE_SECRET=replace-me-generated
|
|
16
|
+
REVALIDATE_SECRET_TOKEN=replace-me-generated
|
|
17
|
+
|
|
18
|
+
# --- Host port mappings ----------------------------------------------------------------------
|
|
19
|
+
# The published host ports for each service. docker:setup auto-picks a FREE port when a default
|
|
20
|
+
# is taken or reserved by the OS (common on Windows, e.g. Postgres 54322), then keeps the URLs
|
|
21
|
+
# below and LOOPBACK_PROXIES in lockstep. Change a port here only if you also update its URL.
|
|
22
|
+
APP_PORT=3000
|
|
23
|
+
KONG_HTTP_PORT=8000
|
|
24
|
+
MINIO_S3_PORT=9000
|
|
25
|
+
MINIO_CONSOLE_PORT=9001
|
|
26
|
+
POSTGRES_PORT_EXTERNAL=54322
|
|
27
|
+
# In-container loopback (socat): maps the localhost:<port> server code derives from the public
|
|
28
|
+
# URLs to the real service. Left-hand ports MUST match NEXT_PUBLIC_SUPABASE_URL / R2_S3_PUBLIC_ENDPOINT.
|
|
29
|
+
LOOPBACK_PROXIES=8000:kong:8000 9000:minio:9000
|
|
30
|
+
|
|
31
|
+
# --- Supabase wiring (internal container network vs browser) ---------------------------------
|
|
32
|
+
NEXT_PUBLIC_SUPABASE_URL=http://localhost:8000
|
|
33
|
+
NEXT_PUBLIC_SUPABASE_ANON_KEY=${ANON_KEY}
|
|
34
|
+
SUPABASE_SERVICE_ROLE_KEY=${SERVICE_ROLE_KEY}
|
|
35
|
+
API_EXTERNAL_URL=http://localhost:8000
|
|
36
|
+
SITE_URL=http://localhost:3000
|
|
37
|
+
POSTGRES_DB=postgres
|
|
38
|
+
|
|
39
|
+
# --- App ------------------------------------------------------------------------------------
|
|
40
|
+
NEXT_PUBLIC_URL=http://localhost:3000
|
|
41
|
+
NEXT_PUBLIC_IS_SANDBOX=true
|
|
42
|
+
CORTEX_AI_ENCRYPTION_KEY=
|
|
43
|
+
|
|
44
|
+
# --- MinIO object storage (S3-compatible) ----------------------------------------------------
|
|
45
|
+
MINIO_ROOT_USER=nextblock
|
|
46
|
+
MINIO_ROOT_PASSWORD=replace-me-generated
|
|
47
|
+
STORAGE_BUCKET=nextblock
|
|
48
|
+
R2_ACCOUNT_ID=minio
|
|
49
|
+
R2_REGION=us-east-1
|
|
50
|
+
R2_S3_ENDPOINT=http://minio:9000
|
|
51
|
+
# 127.0.0.1 (not localhost) so the browser never sends the app's localhost cookies to MinIO,
|
|
52
|
+
# which would otherwise 400 (MetadataTooLarge) once the Supabase auth cookies grow.
|
|
53
|
+
R2_S3_PUBLIC_ENDPOINT=http://127.0.0.1:9000
|
|
54
|
+
R2_FORCE_PATH_STYLE=true
|
|
55
|
+
NEXT_PUBLIC_R2_BASE_URL=http://127.0.0.1:9000/nextblock
|
|
56
|
+
NEXT_PUBLIC_R2_PUBLIC_URL=http://127.0.0.1:9000/nextblock
|
|
57
|
+
|
|
58
|
+
# --- Cloudflare Turnstile (optional). Press Enter at setup to skip and use the dev sandbox. ---
|
|
59
|
+
NEXT_PUBLIC_TURNSTILE_SITE_KEY=
|
|
60
|
+
TURNSTILE_SECRET_KEY=
|
|
61
|
+
|
|
62
|
+
# --- SMTP (optional). Blank => GoTrue auto-confirms sign-ups (loopback mode). -----------------
|
|
63
|
+
GOTRUE_MAILER_AUTOCONFIRM=true
|
|
64
|
+
SMTP_HOST=
|
|
65
|
+
SMTP_PORT=
|
|
66
|
+
SMTP_USER=
|
|
67
|
+
SMTP_PASS=
|
|
68
|
+
SMTP_FROM_EMAIL=
|
|
69
|
+
SMTP_FROM_NAME=
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
-- Expose the JWT secret to Postgres as a database GUC, matching Supabase's setup. Runs once.
|
|
2
|
-
\set jwt_secret `echo "$JWT_SECRET"`
|
|
3
|
-
\set jwt_exp `echo "$JWT_EXP"`
|
|
4
|
-
|
|
5
|
-
alter database postgres set "app.settings.jwt_secret" to :'jwt_secret';
|
|
6
|
-
alter database postgres set "app.settings.jwt_exp" to :'jwt_exp';
|
|
1
|
+
-- Expose the JWT secret to Postgres as a database GUC, matching Supabase's setup. Runs once.
|
|
2
|
+
\set jwt_secret `echo "$JWT_SECRET"`
|
|
3
|
+
\set jwt_exp `echo "$JWT_EXP"`
|
|
4
|
+
|
|
5
|
+
alter database postgres set "app.settings.jwt_secret" to :'jwt_secret';
|
|
6
|
+
alter database postgres set "app.settings.jwt_exp" to :'jwt_exp';
|
|
@@ -1,25 +1,25 @@
|
|
|
1
|
-
-- Self-hosted Supabase role passwords. The supabase/postgres image creates the platform roles;
|
|
2
|
-
-- GoTrue logs in as supabase_auth_admin and PostgREST as authenticator. Give the roles that exist
|
|
3
|
-
-- the generated POSTGRES_PASSWORD (the set varies by image tag, so each is guarded; the password
|
|
4
|
-
-- is passed via a session GUC because psql variables aren't interpolated inside a dollar block).
|
|
5
|
-
-- Runs once on first init.
|
|
6
|
-
\set pgpass `echo "$POSTGRES_PASSWORD"`
|
|
7
|
-
select set_config('nextblock.pgpass', :'pgpass', false);
|
|
8
|
-
|
|
9
|
-
do $$
|
|
10
|
-
declare
|
|
11
|
-
role_name text;
|
|
12
|
-
begin
|
|
13
|
-
foreach role_name in array array[
|
|
14
|
-
'authenticator',
|
|
15
|
-
'pgbouncer',
|
|
16
|
-
'supabase_auth_admin',
|
|
17
|
-
'supabase_storage_admin',
|
|
18
|
-
'supabase_functions_admin',
|
|
19
|
-
'supabase_read_only_user'
|
|
20
|
-
] loop
|
|
21
|
-
if exists (select 1 from pg_roles where rolname = role_name) then
|
|
22
|
-
execute format('alter role %I with password %L', role_name, current_setting('nextblock.pgpass'));
|
|
23
|
-
end if;
|
|
24
|
-
end loop;
|
|
25
|
-
end $$;
|
|
1
|
+
-- Self-hosted Supabase role passwords. The supabase/postgres image creates the platform roles;
|
|
2
|
+
-- GoTrue logs in as supabase_auth_admin and PostgREST as authenticator. Give the roles that exist
|
|
3
|
+
-- the generated POSTGRES_PASSWORD (the set varies by image tag, so each is guarded; the password
|
|
4
|
+
-- is passed via a session GUC because psql variables aren't interpolated inside a dollar block).
|
|
5
|
+
-- Runs once on first init.
|
|
6
|
+
\set pgpass `echo "$POSTGRES_PASSWORD"`
|
|
7
|
+
select set_config('nextblock.pgpass', :'pgpass', false);
|
|
8
|
+
|
|
9
|
+
do $$
|
|
10
|
+
declare
|
|
11
|
+
role_name text;
|
|
12
|
+
begin
|
|
13
|
+
foreach role_name in array array[
|
|
14
|
+
'authenticator',
|
|
15
|
+
'pgbouncer',
|
|
16
|
+
'supabase_auth_admin',
|
|
17
|
+
'supabase_storage_admin',
|
|
18
|
+
'supabase_functions_admin',
|
|
19
|
+
'supabase_read_only_user'
|
|
20
|
+
] loop
|
|
21
|
+
if exists (select 1 from pg_roles where rolname = role_name) then
|
|
22
|
+
execute format('alter role %I with password %L', role_name, current_setting('nextblock.pgpass'));
|
|
23
|
+
end if;
|
|
24
|
+
end loop;
|
|
25
|
+
end $$;
|
|
@@ -1,112 +1,112 @@
|
|
|
1
|
-
# Kong declarative (DB-less) gateway config for the NextBlock self-hosted stack.
|
|
2
|
-
#
|
|
3
|
-
# $SUPABASE_ANON_KEY and $SUPABASE_SERVICE_KEY are substituted at container start by the kong
|
|
4
|
-
# service entrypoint (docker-compose.yml) from the generated ANON_KEY / SERVICE_ROLE_KEY env.
|
|
5
|
-
# Trimmed to just the Auth (GoTrue) and PostgREST routes the app uses.
|
|
6
|
-
_format_version: '2.1'
|
|
7
|
-
_transform: true
|
|
8
|
-
|
|
9
|
-
consumers:
|
|
10
|
-
- username: anon
|
|
11
|
-
keyauth_credentials:
|
|
12
|
-
- key: $SUPABASE_ANON_KEY
|
|
13
|
-
- username: service_role
|
|
14
|
-
keyauth_credentials:
|
|
15
|
-
- key: $SUPABASE_SERVICE_KEY
|
|
16
|
-
|
|
17
|
-
acls:
|
|
18
|
-
- consumer: anon
|
|
19
|
-
group: anon
|
|
20
|
-
- consumer: service_role
|
|
21
|
-
group: admin
|
|
22
|
-
|
|
23
|
-
services:
|
|
24
|
-
- name: auth-v1-open
|
|
25
|
-
url: http://auth:9999/verify
|
|
26
|
-
routes:
|
|
27
|
-
- name: auth-v1-open
|
|
28
|
-
strip_path: true
|
|
29
|
-
paths:
|
|
30
|
-
- /auth/v1/verify
|
|
31
|
-
plugins:
|
|
32
|
-
- name: cors
|
|
33
|
-
- name: auth-v1-open-callback
|
|
34
|
-
url: http://auth:9999/callback
|
|
35
|
-
routes:
|
|
36
|
-
- name: auth-v1-open-callback
|
|
37
|
-
strip_path: true
|
|
38
|
-
paths:
|
|
39
|
-
- /auth/v1/callback
|
|
40
|
-
plugins:
|
|
41
|
-
- name: cors
|
|
42
|
-
- name: auth-v1-open-authorize
|
|
43
|
-
url: http://auth:9999/authorize
|
|
44
|
-
routes:
|
|
45
|
-
- name: auth-v1-open-authorize
|
|
46
|
-
strip_path: true
|
|
47
|
-
paths:
|
|
48
|
-
- /auth/v1/authorize
|
|
49
|
-
plugins:
|
|
50
|
-
- name: cors
|
|
51
|
-
|
|
52
|
-
- name: auth-v1
|
|
53
|
-
url: http://auth:9999/
|
|
54
|
-
routes:
|
|
55
|
-
- name: auth-v1-all
|
|
56
|
-
strip_path: true
|
|
57
|
-
paths:
|
|
58
|
-
- /auth/v1/
|
|
59
|
-
plugins:
|
|
60
|
-
- name: cors
|
|
61
|
-
- name: key-auth
|
|
62
|
-
config:
|
|
63
|
-
hide_credentials: false
|
|
64
|
-
- name: acl
|
|
65
|
-
config:
|
|
66
|
-
hide_groups_header: true
|
|
67
|
-
allow:
|
|
68
|
-
- admin
|
|
69
|
-
- anon
|
|
70
|
-
|
|
71
|
-
- name: rest-v1
|
|
72
|
-
url: http://rest:3000/
|
|
73
|
-
routes:
|
|
74
|
-
- name: rest-v1-all
|
|
75
|
-
strip_path: true
|
|
76
|
-
paths:
|
|
77
|
-
- /rest/v1/
|
|
78
|
-
plugins:
|
|
79
|
-
- name: cors
|
|
80
|
-
- name: key-auth
|
|
81
|
-
config:
|
|
82
|
-
hide_credentials: true
|
|
83
|
-
- name: acl
|
|
84
|
-
config:
|
|
85
|
-
hide_groups_header: true
|
|
86
|
-
allow:
|
|
87
|
-
- admin
|
|
88
|
-
- anon
|
|
89
|
-
|
|
90
|
-
- name: graphql-v1
|
|
91
|
-
url: http://rest:3000/rpc/graphql
|
|
92
|
-
routes:
|
|
93
|
-
- name: graphql-v1-all
|
|
94
|
-
strip_path: true
|
|
95
|
-
paths:
|
|
96
|
-
- /graphql/v1
|
|
97
|
-
plugins:
|
|
98
|
-
- name: cors
|
|
99
|
-
- name: key-auth
|
|
100
|
-
config:
|
|
101
|
-
hide_credentials: false
|
|
102
|
-
- name: request-transformer
|
|
103
|
-
config:
|
|
104
|
-
add:
|
|
105
|
-
headers:
|
|
106
|
-
- 'Content-Profile: graphql_public'
|
|
107
|
-
- name: acl
|
|
108
|
-
config:
|
|
109
|
-
hide_groups_header: true
|
|
110
|
-
allow:
|
|
111
|
-
- admin
|
|
112
|
-
- anon
|
|
1
|
+
# Kong declarative (DB-less) gateway config for the NextBlock self-hosted stack.
|
|
2
|
+
#
|
|
3
|
+
# $SUPABASE_ANON_KEY and $SUPABASE_SERVICE_KEY are substituted at container start by the kong
|
|
4
|
+
# service entrypoint (docker-compose.yml) from the generated ANON_KEY / SERVICE_ROLE_KEY env.
|
|
5
|
+
# Trimmed to just the Auth (GoTrue) and PostgREST routes the app uses.
|
|
6
|
+
_format_version: '2.1'
|
|
7
|
+
_transform: true
|
|
8
|
+
|
|
9
|
+
consumers:
|
|
10
|
+
- username: anon
|
|
11
|
+
keyauth_credentials:
|
|
12
|
+
- key: $SUPABASE_ANON_KEY
|
|
13
|
+
- username: service_role
|
|
14
|
+
keyauth_credentials:
|
|
15
|
+
- key: $SUPABASE_SERVICE_KEY
|
|
16
|
+
|
|
17
|
+
acls:
|
|
18
|
+
- consumer: anon
|
|
19
|
+
group: anon
|
|
20
|
+
- consumer: service_role
|
|
21
|
+
group: admin
|
|
22
|
+
|
|
23
|
+
services:
|
|
24
|
+
- name: auth-v1-open
|
|
25
|
+
url: http://auth:9999/verify
|
|
26
|
+
routes:
|
|
27
|
+
- name: auth-v1-open
|
|
28
|
+
strip_path: true
|
|
29
|
+
paths:
|
|
30
|
+
- /auth/v1/verify
|
|
31
|
+
plugins:
|
|
32
|
+
- name: cors
|
|
33
|
+
- name: auth-v1-open-callback
|
|
34
|
+
url: http://auth:9999/callback
|
|
35
|
+
routes:
|
|
36
|
+
- name: auth-v1-open-callback
|
|
37
|
+
strip_path: true
|
|
38
|
+
paths:
|
|
39
|
+
- /auth/v1/callback
|
|
40
|
+
plugins:
|
|
41
|
+
- name: cors
|
|
42
|
+
- name: auth-v1-open-authorize
|
|
43
|
+
url: http://auth:9999/authorize
|
|
44
|
+
routes:
|
|
45
|
+
- name: auth-v1-open-authorize
|
|
46
|
+
strip_path: true
|
|
47
|
+
paths:
|
|
48
|
+
- /auth/v1/authorize
|
|
49
|
+
plugins:
|
|
50
|
+
- name: cors
|
|
51
|
+
|
|
52
|
+
- name: auth-v1
|
|
53
|
+
url: http://auth:9999/
|
|
54
|
+
routes:
|
|
55
|
+
- name: auth-v1-all
|
|
56
|
+
strip_path: true
|
|
57
|
+
paths:
|
|
58
|
+
- /auth/v1/
|
|
59
|
+
plugins:
|
|
60
|
+
- name: cors
|
|
61
|
+
- name: key-auth
|
|
62
|
+
config:
|
|
63
|
+
hide_credentials: false
|
|
64
|
+
- name: acl
|
|
65
|
+
config:
|
|
66
|
+
hide_groups_header: true
|
|
67
|
+
allow:
|
|
68
|
+
- admin
|
|
69
|
+
- anon
|
|
70
|
+
|
|
71
|
+
- name: rest-v1
|
|
72
|
+
url: http://rest:3000/
|
|
73
|
+
routes:
|
|
74
|
+
- name: rest-v1-all
|
|
75
|
+
strip_path: true
|
|
76
|
+
paths:
|
|
77
|
+
- /rest/v1/
|
|
78
|
+
plugins:
|
|
79
|
+
- name: cors
|
|
80
|
+
- name: key-auth
|
|
81
|
+
config:
|
|
82
|
+
hide_credentials: true
|
|
83
|
+
- name: acl
|
|
84
|
+
config:
|
|
85
|
+
hide_groups_header: true
|
|
86
|
+
allow:
|
|
87
|
+
- admin
|
|
88
|
+
- anon
|
|
89
|
+
|
|
90
|
+
- name: graphql-v1
|
|
91
|
+
url: http://rest:3000/rpc/graphql
|
|
92
|
+
routes:
|
|
93
|
+
- name: graphql-v1-all
|
|
94
|
+
strip_path: true
|
|
95
|
+
paths:
|
|
96
|
+
- /graphql/v1
|
|
97
|
+
plugins:
|
|
98
|
+
- name: cors
|
|
99
|
+
- name: key-auth
|
|
100
|
+
config:
|
|
101
|
+
hide_credentials: false
|
|
102
|
+
- name: request-transformer
|
|
103
|
+
config:
|
|
104
|
+
add:
|
|
105
|
+
headers:
|
|
106
|
+
- 'Content-Profile: graphql_public'
|
|
107
|
+
- name: acl
|
|
108
|
+
config:
|
|
109
|
+
hide_groups_header: true
|
|
110
|
+
allow:
|
|
111
|
+
- admin
|
|
112
|
+
- anon
|