create-nextblock 0.16.4 → 0.17.0
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/CLAUDE.md +22 -0
- 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/package.json +1 -1
- package/templates/nextblock-template/.browserslistrc +11 -11
- package/templates/nextblock-template/.swcrc +30 -30
- package/templates/nextblock-template/CLAUDE.md +26 -0
- 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/.well-known/ucp/route.ts +16 -16
- package/templates/nextblock-template/app/actions/consent.ts +57 -57
- 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/checkout/freemius/sync/route.ts +29 -29
- 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 +270 -205
- package/templates/nextblock-template/app/api/cron/reset-sandbox/sandboxResetSql.ts +8096 -7198
- 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/visual-editing/block-draft/route.ts +47 -47
- package/templates/nextblock-template/app/api/visual-editing/product-draft/route.ts +47 -47
- package/templates/nextblock-template/app/article/[slug]/PostClientContent.tsx +442 -441
- package/templates/nextblock-template/app/article/[slug]/page.utils.ts +4 -1
- package/templates/nextblock-template/app/checkout/UcpCartHydrator.tsx +20 -20
- package/templates/nextblock-template/app/cms/blocks/components/BlockEditorModal.tsx +241 -241
- package/templates/nextblock-template/app/cms/blocks/components/CustomBlockEditorPreview.tsx +160 -160
- package/templates/nextblock-template/app/cms/blocks/editors/DynamicCustomBlockEditor.tsx +167 -167
- package/templates/nextblock-template/app/cms/components/ConnectGitHubButton.tsx +122 -122
- package/templates/nextblock-template/app/cms/components/CortexAiActiveContext.tsx +23 -23
- package/templates/nextblock-template/app/cms/components/SeoScoreBadge.tsx +3 -3
- package/templates/nextblock-template/app/cms/components/SystemAlertsBanner.tsx +112 -112
- package/templates/nextblock-template/app/cms/components/TablePagination.tsx +136 -136
- 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/coupons/[id]/edit/page.tsx +16 -16
- package/templates/nextblock-template/app/cms/coupons/page.tsx +16 -16
- 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/components/DashboardComponents.tsx +200 -200
- 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/pages/page.tsx +273 -273
- package/templates/nextblock-template/app/cms/posts/page.tsx +251 -251
- package/templates/nextblock-template/app/cms/products/categories/page.tsx +12 -12
- package/templates/nextblock-template/app/cms/products/new/page.tsx +135 -135
- 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/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/email/page.tsx +28 -28
- package/templates/nextblock-template/app/cms/settings/extra-translations/actions.ts +276 -276
- package/templates/nextblock-template/app/cms/settings/google-analytics/page.tsx +26 -26
- package/templates/nextblock-template/app/cms/settings/logos/components/DeleteLogoButton.tsx +21 -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/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/page.tsx +33 -33
- package/templates/nextblock-template/app/lib/site-settings.ts +105 -105
- package/templates/nextblock-template/app/lib/ucp/protocol.ts +190 -190
- package/templates/nextblock-template/app/lib/ucp/server.test.ts +56 -56
- 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/ucp/v1/carts/[id]/cancel/route.ts +38 -38
- package/templates/nextblock-template/app/ucp/v1/carts/[id]/route.ts +68 -68
- package/templates/nextblock-template/app/ucp/v1/carts/route.ts +35 -35
- package/templates/nextblock-template/app/ucp/v1/catalog/lookup/route.ts +35 -35
- package/templates/nextblock-template/app/ucp/v1/catalog/product/route.ts +35 -35
- package/templates/nextblock-template/app/ucp/v1/catalog/search/route.ts +34 -34
- package/templates/nextblock-template/components/CartTranslator.tsx +210 -210
- package/templates/nextblock-template/components/DeferredCartTranslator.tsx +51 -51
- package/templates/nextblock-template/components/DeferredGlobalSearch.tsx +68 -68
- package/templates/nextblock-template/components/DeferredGoogleAnalytics.tsx +70 -70
- package/templates/nextblock-template/components/FeatureImageHero.tsx +47 -47
- package/templates/nextblock-template/components/GlobalSearch.tsx +557 -557
- package/templates/nextblock-template/components/Header.tsx +38 -38
- 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/PostsGridClient.tsx +48 -48
- package/templates/nextblock-template/components/blocks/TestimonialBlock.tsx +9 -9
- package/templates/nextblock-template/components/blocks/publicRendererLoaders.ts +25 -25
- package/templates/nextblock-template/components/blocks/renderers/ButtonBlockRenderer.tsx +92 -92
- package/templates/nextblock-template/components/blocks/renderers/ClientTextBlockRenderer.tsx +11 -0
- package/templates/nextblock-template/components/blocks/renderers/PostsGridBlockRenderer.tsx +24 -24
- package/templates/nextblock-template/components/blocks/renderers/TestimonialBlockRenderer.tsx +57 -57
- package/templates/nextblock-template/components/blocks/renderers/inline/AlertWidgetRenderer.tsx +2 -2
- package/templates/nextblock-template/components/blocks/renderers/inline/CtaWidgetRenderer.tsx +2 -2
- 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/visual-editing/DeferredVisualEditing.tsx +21 -21
- 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/02-ECOMMERCE-CAPABILITIES.md +364 -364
- package/templates/nextblock-template/docs/04-DATABASE-AND-AUTH.md +11 -0
- package/templates/nextblock-template/docs/07-BLOCK-SDK-AND-EXTENSIBILITY.md +146 -146
- package/templates/nextblock-template/docs/08-NEXTBLOCK-CORTEX-AI-ARCHITECTURE.md +19 -0
- package/templates/nextblock-template/docs/10-CUSTOM-BLOCKS.md +222 -222
- 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/blocks/README.md +13 -13
- package/templates/nextblock-template/lib/botProtection/verify.ts +134 -134
- package/templates/nextblock-template/lib/cms/payments-reminder.test.ts +135 -135
- package/templates/nextblock-template/lib/cms/payments-reminder.ts +105 -105
- 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/logos/active-logo.ts +53 -53
- package/templates/nextblock-template/lib/media/resolveMediaUrl.ts +56 -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/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/seo/page-document.ts +4 -4
- 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 +42 -12
- 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/storage/provider.ts +66 -66
- package/templates/nextblock-template/lib/storage/supabase-storage.ts +103 -103
- 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/lib/visual-editing/draft-content.test.ts +105 -105
- package/templates/nextblock-template/lib/visual-editing/draft-route.test.ts +42 -42
- package/templates/nextblock-template/lib/visual-editing/edit-info.test.ts +143 -143
- package/templates/nextblock-template/lib/visual-editing/edit-info.ts +94 -94
- package/templates/nextblock-template/lib/visual-editing/product-drafts.test.ts +81 -81
- package/templates/nextblock-template/lib/zod-config.ts +5 -5
- package/templates/nextblock-template/next-env.d.ts +1 -0
- package/templates/nextblock-template/package.json +1 -1
- package/templates/nextblock-template/public/images/cortex_post.webp +0 -0
- package/templates/nextblock-template/public/images/update_nextblock.webp +0 -0
- package/templates/nextblock-template/scripts/docker-setup.mjs +310 -310
- package/templates/nextblock-template/scripts/validate-editor-block-schema.ts +112 -112
- 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/tools/deploy-supabase.js +159 -159
- package/templates/nextblock-template/types/jsdom.d.ts +6 -6
|
@@ -1,21 +1,21 @@
|
|
|
1
|
-
'use client';
|
|
2
|
-
|
|
3
|
-
import dynamic from 'next/dynamic';
|
|
4
|
-
|
|
5
|
-
// Defer the visual-editing toolbar (and its heavy editor graph: BlockEditorModal,
|
|
6
|
-
// the per-block editors, and editor.css) out of the public bundle. The layout only
|
|
7
|
-
// renders this in draft/visual-editing mode, but a *static* import would still ship
|
|
8
|
-
// the entire editor graph to every public page. Loading it via next/dynamic with
|
|
9
|
-
// ssr:false keeps it out of the public homepage's render-blocking CSS and JS, and
|
|
10
|
-
// pulls it in client-side only when visual editing is actually active.
|
|
11
|
-
const NextblockVisualEditing = dynamic(
|
|
12
|
-
() =>
|
|
13
|
-
import('./NextblockVisualEditing').then(
|
|
14
|
-
(module) => module.NextblockVisualEditing
|
|
15
|
-
),
|
|
16
|
-
{ ssr: false }
|
|
17
|
-
);
|
|
18
|
-
|
|
19
|
-
export function DeferredVisualEditing() {
|
|
20
|
-
return <NextblockVisualEditing />;
|
|
21
|
-
}
|
|
1
|
+
'use client';
|
|
2
|
+
|
|
3
|
+
import dynamic from 'next/dynamic';
|
|
4
|
+
|
|
5
|
+
// Defer the visual-editing toolbar (and its heavy editor graph: BlockEditorModal,
|
|
6
|
+
// the per-block editors, and editor.css) out of the public bundle. The layout only
|
|
7
|
+
// renders this in draft/visual-editing mode, but a *static* import would still ship
|
|
8
|
+
// the entire editor graph to every public page. Loading it via next/dynamic with
|
|
9
|
+
// ssr:false keeps it out of the public homepage's render-blocking CSS and JS, and
|
|
10
|
+
// pulls it in client-side only when visual editing is actually active.
|
|
11
|
+
const NextblockVisualEditing = dynamic(
|
|
12
|
+
() =>
|
|
13
|
+
import('./NextblockVisualEditing').then(
|
|
14
|
+
(module) => module.NextblockVisualEditing
|
|
15
|
+
),
|
|
16
|
+
{ ssr: false }
|
|
17
|
+
);
|
|
18
|
+
|
|
19
|
+
export function DeferredVisualEditing() {
|
|
20
|
+
return <NextblockVisualEditing />;
|
|
21
|
+
}
|
|
@@ -1,32 +1,32 @@
|
|
|
1
|
-
import type { Database } from '@nextblock-cms/db';
|
|
2
|
-
import { resolveSupabaseAnonKey, resolveSupabaseUrl } from '../lib/setup/env-status';
|
|
3
|
-
|
|
4
|
-
type Language = Database['public']['Tables']['languages']['Row'];
|
|
5
|
-
|
|
6
|
-
export async function fetchActiveLanguagesFromRest(): Promise<Language[]> {
|
|
7
|
-
const supabaseUrl = resolveSupabaseUrl();
|
|
8
|
-
const supabaseAnonKey = resolveSupabaseAnonKey();
|
|
9
|
-
|
|
10
|
-
if (!supabaseUrl || !supabaseAnonKey) {
|
|
11
|
-
return [];
|
|
12
|
-
}
|
|
13
|
-
|
|
14
|
-
const url = new URL('/rest/v1/languages', supabaseUrl);
|
|
15
|
-
url.searchParams.set('select', 'id, code, name, is_default, is_active, created_at, updated_at');
|
|
16
|
-
url.searchParams.set('is_active', 'eq.true');
|
|
17
|
-
url.searchParams.set('order', 'name.asc');
|
|
18
|
-
|
|
19
|
-
const response = await fetch(url.toString(), {
|
|
20
|
-
headers: {
|
|
21
|
-
apikey: supabaseAnonKey,
|
|
22
|
-
Authorization: `Bearer ${supabaseAnonKey}`,
|
|
23
|
-
},
|
|
24
|
-
});
|
|
25
|
-
|
|
26
|
-
if (!response.ok) {
|
|
27
|
-
return [];
|
|
28
|
-
}
|
|
29
|
-
|
|
30
|
-
const data = await response.json();
|
|
31
|
-
return Array.isArray(data) ? data : [];
|
|
32
|
-
}
|
|
1
|
+
import type { Database } from '@nextblock-cms/db';
|
|
2
|
+
import { resolveSupabaseAnonKey, resolveSupabaseUrl } from '../lib/setup/env-status';
|
|
3
|
+
|
|
4
|
+
type Language = Database['public']['Tables']['languages']['Row'];
|
|
5
|
+
|
|
6
|
+
export async function fetchActiveLanguagesFromRest(): Promise<Language[]> {
|
|
7
|
+
const supabaseUrl = resolveSupabaseUrl();
|
|
8
|
+
const supabaseAnonKey = resolveSupabaseAnonKey();
|
|
9
|
+
|
|
10
|
+
if (!supabaseUrl || !supabaseAnonKey) {
|
|
11
|
+
return [];
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
const url = new URL('/rest/v1/languages', supabaseUrl);
|
|
15
|
+
url.searchParams.set('select', 'id, code, name, is_default, is_active, created_at, updated_at');
|
|
16
|
+
url.searchParams.set('is_active', 'eq.true');
|
|
17
|
+
url.searchParams.set('order', 'name.asc');
|
|
18
|
+
|
|
19
|
+
const response = await fetch(url.toString(), {
|
|
20
|
+
headers: {
|
|
21
|
+
apikey: supabaseAnonKey,
|
|
22
|
+
Authorization: `Bearer ${supabaseAnonKey}`,
|
|
23
|
+
},
|
|
24
|
+
});
|
|
25
|
+
|
|
26
|
+
if (!response.ok) {
|
|
27
|
+
return [];
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
const data = await response.json();
|
|
31
|
+
return Array.isArray(data) ? data : [];
|
|
32
|
+
}
|
|
@@ -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
|