nextly 0.0.1 → 0.0.2-alpha.1
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/LICENSE +22 -0
- package/README.md +122 -0
- package/dist/_dts-chunks/collections-handler.d-DjgO74Wt.d.ts +20540 -0
- package/dist/_dts-chunks/config.d-DNwsDnjs.d.ts +2589 -0
- package/dist/_dts-chunks/define-component.d-BUgTHmt3.d.ts +1149 -0
- package/dist/_dts-chunks/image-processor.d-OO1PmMrv.d.ts +335 -0
- package/dist/_dts-chunks/index.d-axCAzZ7m.d.ts +17842 -0
- package/dist/_dts-chunks/media.d-DjDOZo4B.d.ts +117 -0
- package/dist/_dts-chunks/on-error.d-CHIKWNxd.d.ts +38 -0
- package/dist/_dts-chunks/storage.d-BUhQ2we_.d.ts +404 -0
- package/dist/actions/index.d.ts +239 -0
- package/dist/actions/index.mjs +281 -0
- package/dist/api/auth-state.d.ts +5 -0
- package/dist/api/auth-state.mjs +131 -0
- package/dist/api/collections-schema-detail.d.ts +56 -0
- package/dist/api/collections-schema-detail.mjs +244 -0
- package/dist/api/collections-schema-export.d.ts +56 -0
- package/dist/api/collections-schema-export.mjs +129 -0
- package/dist/api/collections-schema.d.ts +59 -0
- package/dist/api/collections-schema.mjs +207 -0
- package/dist/api/components-detail.d.ts +50 -0
- package/dist/api/components-detail.mjs +132 -0
- package/dist/api/components.d.ts +69 -0
- package/dist/api/components.mjs +144 -0
- package/dist/api/email-providers-default.d.ts +40 -0
- package/dist/api/email-providers-default.mjs +75 -0
- package/dist/api/email-providers-detail.d.ts +81 -0
- package/dist/api/email-providers-detail.mjs +109 -0
- package/dist/api/email-providers-test.d.ts +43 -0
- package/dist/api/email-providers-test.mjs +114 -0
- package/dist/api/email-providers.d.ts +69 -0
- package/dist/api/email-providers.mjs +110 -0
- package/dist/api/email-send-template.d.ts +41 -0
- package/dist/api/email-send-template.mjs +58 -0
- package/dist/api/email-send.d.ts +42 -0
- package/dist/api/email-send.mjs +58 -0
- package/dist/api/email-templates-detail.d.ts +74 -0
- package/dist/api/email-templates-detail.mjs +112 -0
- package/dist/api/email-templates-layout.d.ts +55 -0
- package/dist/api/email-templates-layout.mjs +92 -0
- package/dist/api/email-templates-preview.d.ts +48 -0
- package/dist/api/email-templates-preview.mjs +93 -0
- package/dist/api/email-templates.d.ts +61 -0
- package/dist/api/email-templates.mjs +118 -0
- package/dist/api/health.d.ts +68 -0
- package/dist/api/health.mjs +67 -0
- package/dist/api/index.d.ts +54 -0
- package/dist/api/index.mjs +16 -0
- package/dist/api/media-bulk.d.ts +74 -0
- package/dist/api/media-bulk.mjs +196 -0
- package/dist/api/media-folders.d.ts +112 -0
- package/dist/api/media-folders.mjs +187 -0
- package/dist/api/media-handlers.d.ts +102 -0
- package/dist/api/media-handlers.mjs +437 -0
- package/dist/api/media.d.ts +117 -0
- package/dist/api/media.mjs +242 -0
- package/dist/api/singles-detail.d.ts +87 -0
- package/dist/api/singles-detail.mjs +170 -0
- package/dist/api/singles-schema-detail.d.ts +54 -0
- package/dist/api/singles-schema-detail.mjs +182 -0
- package/dist/api/singles.d.ts +34 -0
- package/dist/api/singles.mjs +94 -0
- package/dist/api/storage-upload-url.d.ts +48 -0
- package/dist/api/storage-upload-url.mjs +202 -0
- package/dist/api/uploads.d.ts +109 -0
- package/dist/api/uploads.mjs +359 -0
- package/dist/auth/index.d.ts +425 -0
- package/dist/auth/index.mjs +199 -0
- package/dist/boot-apply-PQSYLDIN.mjs +7 -0
- package/dist/chunk-2OALJTK6.mjs +489 -0
- package/dist/chunk-2Q2SX2CS.mjs +365 -0
- package/dist/chunk-2TFX4ND3.mjs +13 -0
- package/dist/chunk-2TWPDSYD.mjs +87 -0
- package/dist/chunk-2W3DVD7S.mjs +647 -0
- package/dist/chunk-2ZFKXPQM.mjs +88 -0
- package/dist/chunk-3FA7FKAV.mjs +832 -0
- package/dist/chunk-3NZ2KMBL.mjs +58 -0
- package/dist/chunk-4MJLT6PZ.mjs +0 -0
- package/dist/chunk-56WO4WX7.mjs +0 -0
- package/dist/chunk-5APFUGAD.mjs +89 -0
- package/dist/chunk-5HMZ644B.mjs +108 -0
- package/dist/chunk-67GXH6PR.mjs +32 -0
- package/dist/chunk-6JNEPWRW.mjs +14368 -0
- package/dist/chunk-6NFHQIJD.mjs +45 -0
- package/dist/chunk-7P6ASYW6.mjs +9 -0
- package/dist/chunk-A3WPLSDT.mjs +1364 -0
- package/dist/chunk-AGJ6F2T3.mjs +144 -0
- package/dist/chunk-AK6Z23OX.mjs +1464 -0
- package/dist/chunk-APKKRD2G.mjs +102 -0
- package/dist/chunk-B2GV2BWH.mjs +73 -0
- package/dist/chunk-D5HQBNUB.mjs +74 -0
- package/dist/chunk-DNNG377Z.mjs +204 -0
- package/dist/chunk-DP3G27G5.mjs +135 -0
- package/dist/chunk-DV6WVX2Q.mjs +0 -0
- package/dist/chunk-DXGGXIUZ.mjs +57 -0
- package/dist/chunk-EGXBZCGC.mjs +943 -0
- package/dist/chunk-ERCNLX3V.mjs +176 -0
- package/dist/chunk-FQULBZ53.mjs +850 -0
- package/dist/chunk-G2AA4QLC.mjs +262 -0
- package/dist/chunk-GDBJ5JCU.mjs +488 -0
- package/dist/chunk-GJNSJU4S.mjs +19 -0
- package/dist/chunk-GZ6DCQKC.mjs +69 -0
- package/dist/chunk-H26B4FYG.mjs +167 -0
- package/dist/chunk-I4JMR3UR.mjs +21 -0
- package/dist/chunk-INV7QKLG.mjs +508 -0
- package/dist/chunk-IUDOC7N7.mjs +46 -0
- package/dist/chunk-IZWPRDC3.mjs +206 -0
- package/dist/chunk-KIMNCZGV.mjs +15 -0
- package/dist/chunk-L6HW2DA7.mjs +15 -0
- package/dist/chunk-LAZXX4HR.mjs +100 -0
- package/dist/chunk-LDKCUMHK.mjs +95 -0
- package/dist/chunk-LRXMECUA.mjs +0 -0
- package/dist/chunk-M52VMPGA.mjs +119 -0
- package/dist/chunk-MGUWEEI6.mjs +160 -0
- package/dist/chunk-NRUWQ5Z7.mjs +419 -0
- package/dist/chunk-NSEFNNU4.mjs +25360 -0
- package/dist/chunk-NTHVDFGO.mjs +138 -0
- package/dist/chunk-O3QHXMOX.mjs +3166 -0
- package/dist/chunk-P7NH2OSC.mjs +2605 -0
- package/dist/chunk-PKMABBB5.mjs +184 -0
- package/dist/chunk-PWS6XGJK.mjs +76 -0
- package/dist/chunk-R6JJQHFC.mjs +20 -0
- package/dist/chunk-RJLLGGPG.mjs +0 -0
- package/dist/chunk-SBACDPNX.mjs +689 -0
- package/dist/chunk-TO5AFLVQ.mjs +124 -0
- package/dist/chunk-TS7GHTG2.mjs +5436 -0
- package/dist/chunk-UJ2IMJ4W.mjs +133 -0
- package/dist/chunk-UOP63Q54.mjs +102 -0
- package/dist/chunk-UUOFWCM6.mjs +78 -0
- package/dist/chunk-V4EQTOA4.mjs +893 -0
- package/dist/chunk-VJ66NCL4.mjs +193 -0
- package/dist/chunk-VQJQHVEV.mjs +29 -0
- package/dist/chunk-VTJADRO3.mjs +141 -0
- package/dist/chunk-VWF3JO32.mjs +0 -0
- package/dist/chunk-W4MGXIRR.mjs +27 -0
- package/dist/chunk-W5KKPZT5.mjs +1204 -0
- package/dist/chunk-WD34YQ6T.mjs +381 -0
- package/dist/chunk-WZBYMYVW.mjs +14 -0
- package/dist/chunk-X23WKS3Z.mjs +50 -0
- package/dist/chunk-X7TXCYYN.mjs +6496 -0
- package/dist/chunk-XGI4EMS3.mjs +140 -0
- package/dist/chunk-XZKLBMN6.mjs +1153 -0
- package/dist/chunk-YB7INWPY.mjs +0 -0
- package/dist/chunk-YV4Y7SDL.mjs +83 -0
- package/dist/chunk-YZNBLFIW.mjs +1688 -0
- package/dist/chunk-YZZCTONM.mjs +263 -0
- package/dist/chunk-ZE6A3FYH.mjs +289 -0
- package/dist/cli/nextly.mjs +68 -0
- package/dist/cli/utils/index.d.ts +449 -0
- package/dist/cli/utils/index.mjs +49 -0
- package/dist/component-schema-service-5577KVW6.mjs +11 -0
- package/dist/config-loader-23YEMC3Z.mjs +23 -0
- package/dist/config.d.ts +44 -0
- package/dist/config.mjs +109 -0
- package/dist/container-ORGFGYSZ.mjs +9 -0
- package/dist/database/index.d.ts +12 -0
- package/dist/database/index.mjs +40 -0
- package/dist/database/seeders/index.d.ts +93 -0
- package/dist/database/seeders/index.mjs +47 -0
- package/dist/db-sync-demote-LJGKLB3S.mjs +117 -0
- package/dist/db-sync-promote-B26VSYQF.mjs +113 -0
- package/dist/dev-reload-broadcaster-B73IQ53V.mjs +25 -0
- package/dist/dist-M2NOU37V.mjs +19 -0
- package/dist/drizzle-kit-lazy-D2M2PXR2.mjs +13 -0
- package/dist/dynamic-collection-schema-service-IEXTPIZ7.mjs +8 -0
- package/dist/errors/index.d.ts +159 -0
- package/dist/errors/index.mjs +10 -0
- package/dist/factory-IWMBKUJM.mjs +15 -0
- package/dist/first-run-QIVKWJIF.mjs +63 -0
- package/dist/fresh-push-NR67DC3R.mjs +8 -0
- package/dist/index.d.ts +4175 -0
- package/dist/index.mjs +1336 -0
- package/dist/local-plugin-PTET4NAT.mjs +7 -0
- package/dist/logger-NU46DXNY.mjs +15 -0
- package/dist/logger-YE4TC7ZN.mjs +9 -0
- package/dist/migration-journal-EP532Y4L.mjs +139 -0
- package/dist/migrations/mysql/0000_eager_sentry.sql +174 -0
- package/dist/migrations/mysql/0001_soft_giant_girl.sql +27 -0
- package/dist/migrations/mysql/0002_media_table.sql +24 -0
- package/dist/migrations/mysql/0003_dynamic_singles.sql +37 -0
- package/dist/migrations/mysql/0004_dynamic_components.sql +35 -0
- package/dist/migrations/mysql/0005_user_management_tables.sql +92 -0
- package/dist/migrations/mysql/0006_api_keys.sql +36 -0
- package/dist/migrations/mysql/0007_general_settings.sql +20 -0
- package/dist/migrations/mysql/0008_site_settings_logo_url.sql +9 -0
- package/dist/migrations/mysql/0009_activity_log.sql +30 -0
- package/dist/migrations/mysql/0010_site_settings_sidebar.sql +13 -0
- package/dist/migrations/mysql/0011_missing_tables_and_columns.sql +54 -0
- package/dist/migrations/mysql/0012_image_sizes_and_focal_point.sql +30 -0
- package/dist/migrations/mysql/0012_media_folders.sql +43 -0
- package/dist/migrations/mysql/0013_user_brute_force_protection.sql +31 -0
- package/dist/migrations/mysql/0014_email_template_attachments.sql +12 -0
- package/dist/migrations/mysql/0015_media_uploaded_by_nullable.sql +15 -0
- package/dist/migrations/mysql/20260429_000000_000_initial_journal.sql +22 -0
- package/dist/migrations/mysql/20260501_000000_journal_batch.sql +17 -0
- package/dist/migrations/mysql/20260501_000001_audit_log.sql +24 -0
- package/dist/migrations/mysql/20260504_000000_nextly_meta.sql +21 -0
- package/dist/migrations/mysql/meta/0000_snapshot.json +1005 -0
- package/dist/migrations/mysql/meta/0001_snapshot.json +1099 -0
- package/dist/migrations/mysql/meta/_journal.json +41 -0
- package/dist/migrations/postgresql/0000_misty_king_bedlam.sql +169 -0
- package/dist/migrations/postgresql/0001_perpetual_captain_marvel.sql +8 -0
- package/dist/migrations/postgresql/0002_sad_spectrum.sql +16 -0
- package/dist/migrations/postgresql/0003_hesitant_ultron.sql +17 -0
- package/dist/migrations/postgresql/0004_media_table.sql +24 -0
- package/dist/migrations/postgresql/0005_media_folders.sql +36 -0
- package/dist/migrations/postgresql/0006_dynamic_collections_update.sql +50 -0
- package/dist/migrations/postgresql/0007_dynamic_singles.sql +38 -0
- package/dist/migrations/postgresql/0008_dynamic_components.sql +37 -0
- package/dist/migrations/postgresql/0009_user_management_tables.sql +95 -0
- package/dist/migrations/postgresql/0010_api_keys.sql +34 -0
- package/dist/migrations/postgresql/0011_general_settings.sql +20 -0
- package/dist/migrations/postgresql/0012_site_settings_logo_url.sql +9 -0
- package/dist/migrations/postgresql/0013_activity_log.sql +29 -0
- package/dist/migrations/postgresql/0014_image_sizes_and_focal_point.sql +33 -0
- package/dist/migrations/postgresql/0014_site_settings_sidebar.sql +13 -0
- package/dist/migrations/postgresql/0015_user_brute_force_protection.sql +29 -0
- package/dist/migrations/postgresql/0016_email_template_attachments.sql +12 -0
- package/dist/migrations/postgresql/0017_media_uploaded_by_nullable.sql +15 -0
- package/dist/migrations/postgresql/20260429_000000_000_initial_journal.sql +24 -0
- package/dist/migrations/postgresql/20260501_000000_journal_batch.sql +17 -0
- package/dist/migrations/postgresql/20260501_000001_audit_log.sql +24 -0
- package/dist/migrations/postgresql/20260504_000000_nextly_meta.sql +22 -0
- package/dist/migrations/postgresql/meta/0000_snapshot.json +1286 -0
- package/dist/migrations/postgresql/meta/0001_snapshot.json +1407 -0
- package/dist/migrations/postgresql/meta/0002_snapshot.json +1552 -0
- package/dist/migrations/postgresql/meta/0003_snapshot.json +1695 -0
- package/dist/migrations/postgresql/meta/0010_snapshot.json +2345 -0
- package/dist/migrations/postgresql/meta/_journal.json +90 -0
- package/dist/migrations/sqlite/0000_api_keys.sql +34 -0
- package/dist/migrations/sqlite/0001_general_settings.sql +20 -0
- package/dist/migrations/sqlite/0002_site_settings_logo_url.sql +9 -0
- package/dist/migrations/sqlite/0003_activity_log.sql +29 -0
- package/dist/migrations/sqlite/0004_image_sizes_and_focal_point.sql +29 -0
- package/dist/migrations/sqlite/0004_site_settings_sidebar.sql +11 -0
- package/dist/migrations/sqlite/0005_user_brute_force_protection.sql +29 -0
- package/dist/migrations/sqlite/0006_email_template_attachments.sql +12 -0
- package/dist/migrations/sqlite/0007_media_uploaded_by_nullable.sql +111 -0
- package/dist/migrations/sqlite/20260429_000000_000_initial_journal.sql +24 -0
- package/dist/migrations/sqlite/20260501_000000_journal_batch.sql +19 -0
- package/dist/migrations/sqlite/20260501_000001_audit_log.sql +24 -0
- package/dist/migrations/sqlite/20260504_000000_nextly_meta.sql +21 -0
- package/dist/migrations/sqlite/20260505_000000_user_management_tables.sql +77 -0
- package/dist/next.d.ts +57 -0
- package/dist/next.mjs +55 -0
- package/dist/observability/index.d.ts +87 -0
- package/dist/observability/index.mjs +57 -0
- package/dist/permissions-3DZZQZMI.mjs +39 -0
- package/dist/pipeline-YOML7SWF.mjs +29 -0
- package/dist/preview-ZZTR3QGS.mjs +9 -0
- package/dist/program-PW6UB2ZC.mjs +5934 -0
- package/dist/reconcile-single-tables-7ENVXJGB.mjs +7 -0
- package/dist/register-SF6E6FVU.mjs +49 -0
- package/dist/reload-config-HWQ4G5MM.mjs +23 -0
- package/dist/resolve-single-table-name-JSOMUB3R.mjs +7 -0
- package/dist/routeHandler-UNMMJIBM.mjs +77 -0
- package/dist/runtime-schema-generator-NRA6A6Z6.mjs +8 -0
- package/dist/runtime.d.ts +120 -0
- package/dist/runtime.mjs +73 -0
- package/dist/schema-hash-FMMG6VPJ.mjs +13 -0
- package/dist/schema-registry-EQ36FZDP.mjs +7 -0
- package/dist/scripts/load-env.mjs +42 -0
- package/dist/storage/index.d.ts +566 -0
- package/dist/storage/index.mjs +45 -0
- package/dist/super-admin-G5ZK5F4T.mjs +39 -0
- package/dist/system-table-service-WGSRVEGT.mjs +17 -0
- package/dist/users-7KELGRYJ.mjs +38 -0
- package/package.json +308 -9
|
@@ -0,0 +1,90 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": "7",
|
|
3
|
+
"dialect": "postgresql",
|
|
4
|
+
"entries": [
|
|
5
|
+
{
|
|
6
|
+
"idx": 0,
|
|
7
|
+
"version": "7",
|
|
8
|
+
"when": 1761054746880,
|
|
9
|
+
"tag": "0000_misty_king_bedlam",
|
|
10
|
+
"breakpoints": true
|
|
11
|
+
},
|
|
12
|
+
{
|
|
13
|
+
"idx": 1,
|
|
14
|
+
"version": "7",
|
|
15
|
+
"when": 1762593297791,
|
|
16
|
+
"tag": "0001_perpetual_captain_marvel",
|
|
17
|
+
"breakpoints": true
|
|
18
|
+
},
|
|
19
|
+
{
|
|
20
|
+
"idx": 2,
|
|
21
|
+
"version": "7",
|
|
22
|
+
"when": 1763190619818,
|
|
23
|
+
"tag": "0002_sad_spectrum",
|
|
24
|
+
"breakpoints": true
|
|
25
|
+
},
|
|
26
|
+
{
|
|
27
|
+
"idx": 3,
|
|
28
|
+
"version": "7",
|
|
29
|
+
"when": 1763206212898,
|
|
30
|
+
"tag": "0003_hesitant_ultron",
|
|
31
|
+
"breakpoints": true
|
|
32
|
+
},
|
|
33
|
+
{
|
|
34
|
+
"idx": 4,
|
|
35
|
+
"version": "7",
|
|
36
|
+
"when": 1763298000000,
|
|
37
|
+
"tag": "0004_media_table",
|
|
38
|
+
"breakpoints": true
|
|
39
|
+
},
|
|
40
|
+
{
|
|
41
|
+
"idx": 5,
|
|
42
|
+
"version": "7",
|
|
43
|
+
"when": 1764591695874,
|
|
44
|
+
"tag": "0005_media_folders",
|
|
45
|
+
"breakpoints": true
|
|
46
|
+
},
|
|
47
|
+
{
|
|
48
|
+
"idx": 6,
|
|
49
|
+
"version": "7",
|
|
50
|
+
"when": 1764600000000,
|
|
51
|
+
"tag": "0006_dynamic_collections_update",
|
|
52
|
+
"breakpoints": true
|
|
53
|
+
},
|
|
54
|
+
{
|
|
55
|
+
"idx": 7,
|
|
56
|
+
"version": "7",
|
|
57
|
+
"when": 1764700000000,
|
|
58
|
+
"tag": "0007_dynamic_singles",
|
|
59
|
+
"breakpoints": true
|
|
60
|
+
},
|
|
61
|
+
{
|
|
62
|
+
"idx": 8,
|
|
63
|
+
"version": "7",
|
|
64
|
+
"when": 1764800000000,
|
|
65
|
+
"tag": "0008_dynamic_components",
|
|
66
|
+
"breakpoints": true
|
|
67
|
+
},
|
|
68
|
+
{
|
|
69
|
+
"idx": 9,
|
|
70
|
+
"version": "7",
|
|
71
|
+
"when": 1764900000000,
|
|
72
|
+
"tag": "0009_user_management_tables",
|
|
73
|
+
"breakpoints": true
|
|
74
|
+
},
|
|
75
|
+
{
|
|
76
|
+
"idx": 10,
|
|
77
|
+
"version": "7",
|
|
78
|
+
"when": 1771408301715,
|
|
79
|
+
"tag": "0010_api_keys",
|
|
80
|
+
"breakpoints": true
|
|
81
|
+
},
|
|
82
|
+
{
|
|
83
|
+
"idx": 11,
|
|
84
|
+
"version": "7",
|
|
85
|
+
"when": 1741190400000,
|
|
86
|
+
"tag": "0013_activity_log",
|
|
87
|
+
"breakpoints": true
|
|
88
|
+
}
|
|
89
|
+
]
|
|
90
|
+
}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
-- Migration: Create api_keys table for API Key Authentication (Plan 14)
|
|
2
|
+
-- This migration creates the api_keys table required for programmatic API access
|
|
3
|
+
-- using long-lived secret keys with SHA-256 hashed storage.
|
|
4
|
+
|
|
5
|
+
-- UP
|
|
6
|
+
|
|
7
|
+
CREATE TABLE IF NOT EXISTS "api_keys" (
|
|
8
|
+
"id" text PRIMARY KEY NOT NULL,
|
|
9
|
+
"name" text NOT NULL,
|
|
10
|
+
"description" text,
|
|
11
|
+
"key_hash" text NOT NULL,
|
|
12
|
+
"key_prefix" text NOT NULL,
|
|
13
|
+
"token_type" text NOT NULL,
|
|
14
|
+
"role_id" text REFERENCES "roles"("id") ON DELETE SET NULL,
|
|
15
|
+
"user_id" text NOT NULL REFERENCES "users"("id") ON DELETE CASCADE,
|
|
16
|
+
"expires_at" integer,
|
|
17
|
+
"last_used_at" integer,
|
|
18
|
+
"is_active" integer NOT NULL DEFAULT 1,
|
|
19
|
+
"created_at" integer NOT NULL,
|
|
20
|
+
"updated_at" integer NOT NULL
|
|
21
|
+
);
|
|
22
|
+
|
|
23
|
+
CREATE UNIQUE INDEX IF NOT EXISTS "api_keys_key_hash_unique" ON "api_keys" ("key_hash");
|
|
24
|
+
CREATE INDEX IF NOT EXISTS "api_keys_user_id_idx" ON "api_keys" ("user_id");
|
|
25
|
+
CREATE INDEX IF NOT EXISTS "api_keys_role_id_idx" ON "api_keys" ("role_id");
|
|
26
|
+
CREATE INDEX IF NOT EXISTS "api_keys_is_active_expires_at_idx" ON "api_keys" ("is_active", "expires_at");
|
|
27
|
+
|
|
28
|
+
-- DOWN
|
|
29
|
+
|
|
30
|
+
DROP INDEX IF EXISTS "api_keys_is_active_expires_at_idx";
|
|
31
|
+
DROP INDEX IF EXISTS "api_keys_role_id_idx";
|
|
32
|
+
DROP INDEX IF EXISTS "api_keys_user_id_idx";
|
|
33
|
+
DROP INDEX IF EXISTS "api_keys_key_hash_unique";
|
|
34
|
+
DROP TABLE IF EXISTS "api_keys";
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
-- Migration: Create site_settings table for general application settings
|
|
2
|
+
-- This migration creates the site_settings singleton table.
|
|
3
|
+
-- Only one row ever exists with id = 'default'.
|
|
4
|
+
|
|
5
|
+
-- UP
|
|
6
|
+
|
|
7
|
+
CREATE TABLE IF NOT EXISTS "site_settings" (
|
|
8
|
+
"id" text PRIMARY KEY NOT NULL,
|
|
9
|
+
"application_name" text,
|
|
10
|
+
"site_url" text,
|
|
11
|
+
"admin_email" text,
|
|
12
|
+
"timezone" text,
|
|
13
|
+
"date_format" text,
|
|
14
|
+
"time_format" text,
|
|
15
|
+
"updated_at" integer NOT NULL
|
|
16
|
+
);
|
|
17
|
+
|
|
18
|
+
-- DOWN
|
|
19
|
+
|
|
20
|
+
DROP TABLE IF EXISTS "site_settings";
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
-- Migration: Create activity_log table for Dashboard Activity Feed (Plan 16)
|
|
2
|
+
-- This migration creates the activity_log table that records create/update/delete
|
|
3
|
+
-- actions across all collections for the dashboard activity feed.
|
|
4
|
+
|
|
5
|
+
-- UP
|
|
6
|
+
|
|
7
|
+
CREATE TABLE IF NOT EXISTS "activity_log" (
|
|
8
|
+
"id" text PRIMARY KEY NOT NULL,
|
|
9
|
+
"user_id" text NOT NULL REFERENCES "users"("id") ON DELETE CASCADE,
|
|
10
|
+
"user_name" text NOT NULL,
|
|
11
|
+
"user_email" text NOT NULL,
|
|
12
|
+
"action" text NOT NULL,
|
|
13
|
+
"collection" text NOT NULL,
|
|
14
|
+
"entry_id" text,
|
|
15
|
+
"entry_title" text,
|
|
16
|
+
"metadata" text,
|
|
17
|
+
"created_at" integer NOT NULL
|
|
18
|
+
);
|
|
19
|
+
|
|
20
|
+
CREATE INDEX IF NOT EXISTS "idx_activity_log_created_at" ON "activity_log" ("created_at");
|
|
21
|
+
CREATE INDEX IF NOT EXISTS "idx_activity_log_collection" ON "activity_log" ("collection", "created_at");
|
|
22
|
+
CREATE INDEX IF NOT EXISTS "idx_activity_log_user_id" ON "activity_log" ("user_id", "created_at");
|
|
23
|
+
|
|
24
|
+
-- DOWN
|
|
25
|
+
|
|
26
|
+
DROP INDEX IF EXISTS "idx_activity_log_user_id";
|
|
27
|
+
DROP INDEX IF EXISTS "idx_activity_log_collection";
|
|
28
|
+
DROP INDEX IF EXISTS "idx_activity_log_created_at";
|
|
29
|
+
DROP TABLE IF EXISTS "activity_log";
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
-- Migration: Add image_sizes table and focal point / sizes columns to media (SQLite)
|
|
2
|
+
|
|
3
|
+
-- UP
|
|
4
|
+
|
|
5
|
+
CREATE TABLE IF NOT EXISTS "image_sizes" (
|
|
6
|
+
"id" text PRIMARY KEY NOT NULL,
|
|
7
|
+
"name" text NOT NULL,
|
|
8
|
+
"width" integer,
|
|
9
|
+
"height" integer,
|
|
10
|
+
"fit" text NOT NULL DEFAULT 'inside',
|
|
11
|
+
"quality" integer NOT NULL DEFAULT 80,
|
|
12
|
+
"format" text NOT NULL DEFAULT 'auto',
|
|
13
|
+
"is_default" integer NOT NULL DEFAULT 1,
|
|
14
|
+
"sort_order" integer NOT NULL DEFAULT 0,
|
|
15
|
+
"created_at" integer NOT NULL,
|
|
16
|
+
"updated_at" integer NOT NULL
|
|
17
|
+
);
|
|
18
|
+
|
|
19
|
+
CREATE UNIQUE INDEX IF NOT EXISTS "image_sizes_name_unique" ON "image_sizes" ("name");
|
|
20
|
+
|
|
21
|
+
ALTER TABLE "media" ADD COLUMN "focal_x" integer;
|
|
22
|
+
ALTER TABLE "media" ADD COLUMN "focal_y" integer;
|
|
23
|
+
ALTER TABLE "media" ADD COLUMN "sizes" text;
|
|
24
|
+
|
|
25
|
+
-- DOWN
|
|
26
|
+
|
|
27
|
+
-- SQLite does not support DROP COLUMN before 3.35.0
|
|
28
|
+
-- For older versions, recreate the table without the columns
|
|
29
|
+
DROP TABLE IF EXISTS "image_sizes";
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
-- Migration: Add sidebar customization columns to site_settings
|
|
2
|
+
|
|
3
|
+
-- UP
|
|
4
|
+
|
|
5
|
+
ALTER TABLE "site_settings" ADD COLUMN "logo_url_dark" text;
|
|
6
|
+
ALTER TABLE "site_settings" ADD COLUMN "custom_sidebar_groups" text;
|
|
7
|
+
ALTER TABLE "site_settings" ADD COLUMN "plugin_placements" text;
|
|
8
|
+
|
|
9
|
+
-- DOWN
|
|
10
|
+
|
|
11
|
+
-- SQLite does not support DROP COLUMN in older versions; handled via table recreation if needed.
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
-- Migration: Custom auth schema additions
|
|
2
|
+
-- Adds brute-force protection columns to users and creates refresh_tokens table.
|
|
3
|
+
-- These were added to the Drizzle schema when custom JWT auth replaced Auth.js
|
|
4
|
+
-- but never got corresponding migration SQL.
|
|
5
|
+
|
|
6
|
+
-- UP
|
|
7
|
+
|
|
8
|
+
ALTER TABLE `users` ADD COLUMN `failed_login_attempts` integer NOT NULL DEFAULT 0;
|
|
9
|
+
ALTER TABLE `users` ADD COLUMN `locked_until` integer;
|
|
10
|
+
|
|
11
|
+
CREATE TABLE IF NOT EXISTS `refresh_tokens` (
|
|
12
|
+
`id` text PRIMARY KEY NOT NULL,
|
|
13
|
+
`user_id` text NOT NULL REFERENCES `users`(`id`) ON DELETE CASCADE,
|
|
14
|
+
`token_hash` text NOT NULL,
|
|
15
|
+
`user_agent` text,
|
|
16
|
+
`ip_address` text,
|
|
17
|
+
`expires_at` integer NOT NULL,
|
|
18
|
+
`created_at` integer NOT NULL
|
|
19
|
+
);
|
|
20
|
+
|
|
21
|
+
CREATE INDEX IF NOT EXISTS `refresh_tokens_token_hash_idx` ON `refresh_tokens` (`token_hash`);
|
|
22
|
+
CREATE INDEX IF NOT EXISTS `refresh_tokens_user_id_idx` ON `refresh_tokens` (`user_id`);
|
|
23
|
+
CREATE INDEX IF NOT EXISTS `refresh_tokens_expires_at_idx` ON `refresh_tokens` (`expires_at`);
|
|
24
|
+
|
|
25
|
+
-- DOWN
|
|
26
|
+
|
|
27
|
+
DROP TABLE IF EXISTS `refresh_tokens`;
|
|
28
|
+
ALTER TABLE `users` DROP COLUMN `locked_until`;
|
|
29
|
+
ALTER TABLE `users` DROP COLUMN `failed_login_attempts`;
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
-- Migration: Email template default attachments
|
|
2
|
+
-- Adds a nullable `attachments` TEXT column (JSON-serialized) to
|
|
3
|
+
-- email_templates so that templates can carry default media-library
|
|
4
|
+
-- attachments that are merged with per-send attachments at send time.
|
|
5
|
+
|
|
6
|
+
-- UP
|
|
7
|
+
|
|
8
|
+
ALTER TABLE `email_templates` ADD COLUMN `attachments` text;
|
|
9
|
+
|
|
10
|
+
-- DOWN
|
|
11
|
+
|
|
12
|
+
ALTER TABLE `email_templates` DROP COLUMN `attachments`;
|
|
@@ -0,0 +1,111 @@
|
|
|
1
|
+
-- Migration: Make media.uploaded_by nullable
|
|
2
|
+
-- CLI seeds, data imports, and other system-context uploads may not have a
|
|
3
|
+
-- user to attribute the upload to. Dropping NOT NULL lets these operations
|
|
4
|
+
-- record media without a synthetic "anonymous" user sentinel (which doesn't
|
|
5
|
+
-- exist as a row and broke the foreign-key constraint).
|
|
6
|
+
|
|
7
|
+
-- UP
|
|
8
|
+
-- SQLite doesn't support ALTER COLUMN to change nullability, so rebuild the
|
|
9
|
+
-- table. No FK targets media.id anywhere in core tables, so the rebuild
|
|
10
|
+
-- doesn't need foreign_keys PRAGMA toggling (the adapter enables FKs at
|
|
11
|
+
-- connect; the migration runner wraps this in a transaction and strips
|
|
12
|
+
-- PRAGMA statements anyway).
|
|
13
|
+
|
|
14
|
+
CREATE TABLE `media__new` (
|
|
15
|
+
`id` text PRIMARY KEY NOT NULL,
|
|
16
|
+
`filename` text NOT NULL,
|
|
17
|
+
`mime_type` text NOT NULL,
|
|
18
|
+
`size` integer NOT NULL,
|
|
19
|
+
`width` integer,
|
|
20
|
+
`height` integer,
|
|
21
|
+
`duration` integer,
|
|
22
|
+
`url` text NOT NULL,
|
|
23
|
+
`thumbnail_url` text,
|
|
24
|
+
`focal_x` integer,
|
|
25
|
+
`focal_y` integer,
|
|
26
|
+
`sizes` text,
|
|
27
|
+
`alt_text` text,
|
|
28
|
+
`caption` text,
|
|
29
|
+
`tags` text,
|
|
30
|
+
`folder_id` text REFERENCES `media_folders`(`id`) ON DELETE SET NULL,
|
|
31
|
+
`uploaded_by` text REFERENCES `users`(`id`) ON DELETE CASCADE,
|
|
32
|
+
`uploaded_at` integer NOT NULL DEFAULT (unixepoch()),
|
|
33
|
+
`updated_at` integer NOT NULL DEFAULT (unixepoch())
|
|
34
|
+
);
|
|
35
|
+
--> statement-breakpoint
|
|
36
|
+
|
|
37
|
+
INSERT INTO `media__new`
|
|
38
|
+
SELECT
|
|
39
|
+
`id`, `filename`, `mime_type`, `size`, `width`, `height`, `duration`,
|
|
40
|
+
`url`, `thumbnail_url`, `focal_x`, `focal_y`, `sizes`,
|
|
41
|
+
`alt_text`, `caption`, `tags`, `folder_id`, `uploaded_by`,
|
|
42
|
+
`uploaded_at`, `updated_at`
|
|
43
|
+
FROM `media`;
|
|
44
|
+
--> statement-breakpoint
|
|
45
|
+
|
|
46
|
+
DROP TABLE `media`;
|
|
47
|
+
--> statement-breakpoint
|
|
48
|
+
|
|
49
|
+
ALTER TABLE `media__new` RENAME TO `media`;
|
|
50
|
+
--> statement-breakpoint
|
|
51
|
+
|
|
52
|
+
CREATE INDEX `media_uploaded_by_idx` ON `media` (`uploaded_by`);
|
|
53
|
+
--> statement-breakpoint
|
|
54
|
+
CREATE INDEX `media_mime_type_idx` ON `media` (`mime_type`);
|
|
55
|
+
--> statement-breakpoint
|
|
56
|
+
CREATE INDEX `media_uploaded_at_idx` ON `media` (`uploaded_at`);
|
|
57
|
+
--> statement-breakpoint
|
|
58
|
+
CREATE INDEX `media_folder_id_idx` ON `media` (`folder_id`);
|
|
59
|
+
|
|
60
|
+
-- DOWN
|
|
61
|
+
-- Reverse: re-add NOT NULL by rebuilding the table again.
|
|
62
|
+
-- Rows with NULL uploaded_by are dropped (the WHERE filter) since a NOT NULL
|
|
63
|
+
-- column cannot accept them; backfill the DB before running DOWN if retention
|
|
64
|
+
-- matters.
|
|
65
|
+
|
|
66
|
+
CREATE TABLE `media__old` (
|
|
67
|
+
`id` text PRIMARY KEY NOT NULL,
|
|
68
|
+
`filename` text NOT NULL,
|
|
69
|
+
`mime_type` text NOT NULL,
|
|
70
|
+
`size` integer NOT NULL,
|
|
71
|
+
`width` integer,
|
|
72
|
+
`height` integer,
|
|
73
|
+
`duration` integer,
|
|
74
|
+
`url` text NOT NULL,
|
|
75
|
+
`thumbnail_url` text,
|
|
76
|
+
`focal_x` integer,
|
|
77
|
+
`focal_y` integer,
|
|
78
|
+
`sizes` text,
|
|
79
|
+
`alt_text` text,
|
|
80
|
+
`caption` text,
|
|
81
|
+
`tags` text,
|
|
82
|
+
`folder_id` text REFERENCES `media_folders`(`id`) ON DELETE SET NULL,
|
|
83
|
+
`uploaded_by` text NOT NULL REFERENCES `users`(`id`) ON DELETE CASCADE,
|
|
84
|
+
`uploaded_at` integer NOT NULL DEFAULT (unixepoch()),
|
|
85
|
+
`updated_at` integer NOT NULL DEFAULT (unixepoch())
|
|
86
|
+
);
|
|
87
|
+
--> statement-breakpoint
|
|
88
|
+
|
|
89
|
+
INSERT INTO `media__old`
|
|
90
|
+
SELECT
|
|
91
|
+
`id`, `filename`, `mime_type`, `size`, `width`, `height`, `duration`,
|
|
92
|
+
`url`, `thumbnail_url`, `focal_x`, `focal_y`, `sizes`,
|
|
93
|
+
`alt_text`, `caption`, `tags`, `folder_id`, `uploaded_by`,
|
|
94
|
+
`uploaded_at`, `updated_at`
|
|
95
|
+
FROM `media`
|
|
96
|
+
WHERE `uploaded_by` IS NOT NULL;
|
|
97
|
+
--> statement-breakpoint
|
|
98
|
+
|
|
99
|
+
DROP TABLE `media`;
|
|
100
|
+
--> statement-breakpoint
|
|
101
|
+
|
|
102
|
+
ALTER TABLE `media__old` RENAME TO `media`;
|
|
103
|
+
--> statement-breakpoint
|
|
104
|
+
|
|
105
|
+
CREATE INDEX `media_uploaded_by_idx` ON `media` (`uploaded_by`);
|
|
106
|
+
--> statement-breakpoint
|
|
107
|
+
CREATE INDEX `media_mime_type_idx` ON `media` (`mime_type`);
|
|
108
|
+
--> statement-breakpoint
|
|
109
|
+
CREATE INDEX `media_uploaded_at_idx` ON `media` (`uploaded_at`);
|
|
110
|
+
--> statement-breakpoint
|
|
111
|
+
CREATE INDEX `media_folder_id_idx` ON `media` (`folder_id`);
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
-- Migration: initial_journal
|
|
2
|
+
-- Generated at: 2026-04-29T00:00:00.000Z
|
|
3
|
+
-- Dialect: SQLite
|
|
4
|
+
-- Source: F11 (file-based migration ledger). Bundled with the nextly package
|
|
5
|
+
-- so fresh production databases get the table on first `nextly migrate`.
|
|
6
|
+
-- Synthetic 000000_000 time component so this bundled file sorts BEFORE
|
|
7
|
+
-- any user-generated migration created on the same date.
|
|
8
|
+
|
|
9
|
+
-- UP
|
|
10
|
+
|
|
11
|
+
CREATE TABLE IF NOT EXISTS "nextly_migrations" (
|
|
12
|
+
"id" TEXT PRIMARY KEY,
|
|
13
|
+
"filename" TEXT NOT NULL UNIQUE,
|
|
14
|
+
"sha256" TEXT NOT NULL,
|
|
15
|
+
"applied_at" INTEGER NOT NULL DEFAULT (CAST((julianday('now') - 2440587.5) * 86400000 AS INTEGER)),
|
|
16
|
+
"applied_by" TEXT,
|
|
17
|
+
"duration_ms" INTEGER,
|
|
18
|
+
"status" TEXT NOT NULL CHECK ("status" IN ('applied', 'failed')),
|
|
19
|
+
"error_json" TEXT,
|
|
20
|
+
"rollback_sql" TEXT
|
|
21
|
+
);
|
|
22
|
+
|
|
23
|
+
CREATE INDEX IF NOT EXISTS "nextly_migrations_applied_at_idx"
|
|
24
|
+
ON "nextly_migrations" ("applied_at");
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
-- Migration: journal_batch
|
|
2
|
+
-- Generated at: 2026-05-01T00:00:00.000Z
|
|
3
|
+
-- Dialect: SQLite
|
|
4
|
+
-- Source: Phase 5 (Task 24). Adds the `batch` sentinel column to
|
|
5
|
+
-- nextly_migration_journal so audit queries can distinguish HMR/dev
|
|
6
|
+
-- pushes (batch < 0) from production migrations (batch >= 0). The
|
|
7
|
+
-- pipeline sets -1 for source="code" and leaves the default 0 for
|
|
8
|
+
-- everything else. Synthetic 000000_000 time component sorts this
|
|
9
|
+
-- file before any user-generated migration on the same date.
|
|
10
|
+
|
|
11
|
+
-- UP
|
|
12
|
+
|
|
13
|
+
ALTER TABLE "nextly_migration_journal" ADD COLUMN "batch" INTEGER NOT NULL DEFAULT 0;
|
|
14
|
+
|
|
15
|
+
-- DOWN
|
|
16
|
+
|
|
17
|
+
-- Note: SQLite supports DROP COLUMN since 3.35.0 (Mar 2021). F17
|
|
18
|
+
-- minimum is 3.38, so this is safe.
|
|
19
|
+
ALTER TABLE "nextly_migration_journal" DROP COLUMN "batch";
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
-- Append-only event store for security-sensitive auth events.
|
|
2
|
+
-- See packages/nextly/src/domains/audit/ for the writer service.
|
|
3
|
+
|
|
4
|
+
-- UP
|
|
5
|
+
|
|
6
|
+
CREATE TABLE IF NOT EXISTS `audit_log` (
|
|
7
|
+
`id` text PRIMARY KEY NOT NULL,
|
|
8
|
+
`kind` text NOT NULL,
|
|
9
|
+
`actor_user_id` text,
|
|
10
|
+
`target_user_id` text,
|
|
11
|
+
`ip_address` text,
|
|
12
|
+
`user_agent` text,
|
|
13
|
+
`metadata` text,
|
|
14
|
+
`created_at` integer NOT NULL
|
|
15
|
+
);
|
|
16
|
+
|
|
17
|
+
CREATE INDEX IF NOT EXISTS `audit_log_kind_idx` ON `audit_log` (`kind`);
|
|
18
|
+
CREATE INDEX IF NOT EXISTS `audit_log_actor_user_id_idx` ON `audit_log` (`actor_user_id`);
|
|
19
|
+
CREATE INDEX IF NOT EXISTS `audit_log_target_user_id_idx` ON `audit_log` (`target_user_id`);
|
|
20
|
+
CREATE INDEX IF NOT EXISTS `audit_log_created_at_idx` ON `audit_log` (`created_at`);
|
|
21
|
+
|
|
22
|
+
-- DOWN
|
|
23
|
+
|
|
24
|
+
DROP TABLE IF EXISTS `audit_log`;
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
-- Migration: nextly_meta runtime flags table
|
|
2
|
+
-- Generated at: 2026-05-04T00:00:00.000Z
|
|
3
|
+
-- Dialect: SQLite
|
|
4
|
+
-- Source: Sub-task 2A — dashboard seeding card.
|
|
5
|
+
-- A small key/value/timestamp store for runtime state that doesn't belong
|
|
6
|
+
-- in collection schemas (first consumer: seed.completedAt / seed.skippedAt
|
|
7
|
+
-- flags read by the admin dashboard's SeedDemoContentCard).
|
|
8
|
+
|
|
9
|
+
-- UP
|
|
10
|
+
|
|
11
|
+
CREATE TABLE IF NOT EXISTS `nextly_meta` (
|
|
12
|
+
`key` text PRIMARY KEY NOT NULL,
|
|
13
|
+
`value` text,
|
|
14
|
+
`updated_at` integer NOT NULL
|
|
15
|
+
);
|
|
16
|
+
|
|
17
|
+
CREATE INDEX IF NOT EXISTS `nextly_meta_updated_at_idx` ON `nextly_meta` (`updated_at`);
|
|
18
|
+
|
|
19
|
+
-- DOWN
|
|
20
|
+
|
|
21
|
+
DROP TABLE IF EXISTS `nextly_meta`;
|
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
-- Migration: Plan 12 user management + email tables
|
|
2
|
+
-- Generated at: 2026-05-05T00:00:00.000Z
|
|
3
|
+
-- Dialect: SQLite
|
|
4
|
+
-- Source: SQLite was missing the equivalent of postgresql/0009 and
|
|
5
|
+
-- mysql/0005 — without these tables UserExtSchemaService.syncCodeFields
|
|
6
|
+
-- silently fails on first boot, hasMergedFields stays false, the
|
|
7
|
+
-- user_ext table never gets created, and `/authors/[slug]` resolves to
|
|
8
|
+
-- /authors/undefined for blog-template projects on SQLite. Adding the
|
|
9
|
+
-- three tables fixes the cascade.
|
|
10
|
+
|
|
11
|
+
-- UP
|
|
12
|
+
|
|
13
|
+
CREATE TABLE IF NOT EXISTS `user_field_definitions` (
|
|
14
|
+
`id` text PRIMARY KEY NOT NULL,
|
|
15
|
+
`name` text NOT NULL,
|
|
16
|
+
`label` text NOT NULL,
|
|
17
|
+
`type` text NOT NULL,
|
|
18
|
+
`required` integer NOT NULL DEFAULT 0,
|
|
19
|
+
`default_value` text,
|
|
20
|
+
`options` text,
|
|
21
|
+
`placeholder` text,
|
|
22
|
+
`description` text,
|
|
23
|
+
`sort_order` integer NOT NULL DEFAULT 0,
|
|
24
|
+
`source` text NOT NULL DEFAULT 'ui',
|
|
25
|
+
`is_active` integer NOT NULL DEFAULT 1,
|
|
26
|
+
`created_at` integer NOT NULL DEFAULT (strftime('%s', 'now') * 1000),
|
|
27
|
+
`updated_at` integer NOT NULL DEFAULT (strftime('%s', 'now') * 1000)
|
|
28
|
+
);
|
|
29
|
+
|
|
30
|
+
CREATE UNIQUE INDEX IF NOT EXISTS `user_field_defs_name_unique_idx` ON `user_field_definitions` (`name`);
|
|
31
|
+
CREATE INDEX IF NOT EXISTS `user_field_defs_source_idx` ON `user_field_definitions` (`source`);
|
|
32
|
+
CREATE INDEX IF NOT EXISTS `user_field_defs_is_active_idx` ON `user_field_definitions` (`is_active`);
|
|
33
|
+
CREATE INDEX IF NOT EXISTS `user_field_defs_sort_order_idx` ON `user_field_definitions` (`sort_order`);
|
|
34
|
+
CREATE INDEX IF NOT EXISTS `user_field_defs_created_at_idx` ON `user_field_definitions` (`created_at`);
|
|
35
|
+
|
|
36
|
+
CREATE TABLE IF NOT EXISTS `email_providers` (
|
|
37
|
+
`id` text PRIMARY KEY NOT NULL,
|
|
38
|
+
`name` text NOT NULL,
|
|
39
|
+
`type` text NOT NULL,
|
|
40
|
+
`from_email` text NOT NULL,
|
|
41
|
+
`from_name` text,
|
|
42
|
+
`configuration` text NOT NULL,
|
|
43
|
+
`is_default` integer NOT NULL DEFAULT 0,
|
|
44
|
+
`is_active` integer NOT NULL DEFAULT 1,
|
|
45
|
+
`created_at` integer NOT NULL DEFAULT (strftime('%s', 'now') * 1000),
|
|
46
|
+
`updated_at` integer NOT NULL DEFAULT (strftime('%s', 'now') * 1000)
|
|
47
|
+
);
|
|
48
|
+
|
|
49
|
+
CREATE INDEX IF NOT EXISTS `email_providers_type_idx` ON `email_providers` (`type`);
|
|
50
|
+
CREATE UNIQUE INDEX IF NOT EXISTS `email_providers_default_unique_idx` ON `email_providers` (`is_default`) WHERE `is_default` = 1;
|
|
51
|
+
CREATE INDEX IF NOT EXISTS `email_providers_is_active_idx` ON `email_providers` (`is_active`);
|
|
52
|
+
CREATE INDEX IF NOT EXISTS `email_providers_created_at_idx` ON `email_providers` (`created_at`);
|
|
53
|
+
|
|
54
|
+
CREATE TABLE IF NOT EXISTS `email_templates` (
|
|
55
|
+
`id` text PRIMARY KEY NOT NULL,
|
|
56
|
+
`name` text NOT NULL,
|
|
57
|
+
`slug` text NOT NULL UNIQUE,
|
|
58
|
+
`subject` text NOT NULL,
|
|
59
|
+
`html_content` text NOT NULL,
|
|
60
|
+
`plain_text_content` text,
|
|
61
|
+
`variables` text,
|
|
62
|
+
`use_layout` integer NOT NULL DEFAULT 1,
|
|
63
|
+
`is_active` integer NOT NULL DEFAULT 1,
|
|
64
|
+
`provider_id` text,
|
|
65
|
+
`created_at` integer NOT NULL DEFAULT (strftime('%s', 'now') * 1000),
|
|
66
|
+
`updated_at` integer NOT NULL DEFAULT (strftime('%s', 'now') * 1000)
|
|
67
|
+
);
|
|
68
|
+
|
|
69
|
+
CREATE INDEX IF NOT EXISTS `email_templates_is_active_idx` ON `email_templates` (`is_active`);
|
|
70
|
+
CREATE INDEX IF NOT EXISTS `email_templates_provider_id_idx` ON `email_templates` (`provider_id`);
|
|
71
|
+
CREATE INDEX IF NOT EXISTS `email_templates_created_at_idx` ON `email_templates` (`created_at`);
|
|
72
|
+
|
|
73
|
+
-- DOWN
|
|
74
|
+
|
|
75
|
+
DROP TABLE IF EXISTS `email_templates`;
|
|
76
|
+
DROP TABLE IF EXISTS `email_providers`;
|
|
77
|
+
DROP TABLE IF EXISTS `user_field_definitions`;
|
package/dist/next.d.ts
ADDED
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Next.js Config Wrapper
|
|
3
|
+
*
|
|
4
|
+
* Provides `withNextly()` to automatically configure Next.js for
|
|
5
|
+
* compatibility with Nextly's server-side packages. This prevents
|
|
6
|
+
* bundler errors (e.g., "Cannot find package 'pg'") on Vercel and
|
|
7
|
+
* other serverless platforms.
|
|
8
|
+
*
|
|
9
|
+
* @module nextly/next
|
|
10
|
+
* @since 1.0.0
|
|
11
|
+
*
|
|
12
|
+
* @example
|
|
13
|
+
* ```typescript
|
|
14
|
+
* // next.config.ts
|
|
15
|
+
* import { withNextly } from "nextly/next";
|
|
16
|
+
*
|
|
17
|
+
* export default withNextly({
|
|
18
|
+
* // your Next.js config
|
|
19
|
+
* });
|
|
20
|
+
* ```
|
|
21
|
+
*/
|
|
22
|
+
/**
|
|
23
|
+
* Wraps a Next.js config to add Nextly-required settings.
|
|
24
|
+
*
|
|
25
|
+
* Automatically adds server-external packages so database drivers
|
|
26
|
+
* and adapters are loaded from node_modules at runtime instead of
|
|
27
|
+
* being bundled (which fails on serverless platforms like Vercel).
|
|
28
|
+
*
|
|
29
|
+
* @param nextConfig - Your Next.js configuration
|
|
30
|
+
* @returns Enhanced Next.js configuration with Nextly compatibility
|
|
31
|
+
*
|
|
32
|
+
* @example
|
|
33
|
+
* ```typescript
|
|
34
|
+
* // next.config.ts
|
|
35
|
+
* import { withNextly } from "nextly/next";
|
|
36
|
+
*
|
|
37
|
+
* export default withNextly({
|
|
38
|
+
* images: {
|
|
39
|
+
* remotePatterns: [{ hostname: "example.com" }],
|
|
40
|
+
* },
|
|
41
|
+
* });
|
|
42
|
+
* ```
|
|
43
|
+
*
|
|
44
|
+
* @example With other plugins
|
|
45
|
+
* ```typescript
|
|
46
|
+
* import { withNextly } from "nextly/next";
|
|
47
|
+
*
|
|
48
|
+
* const nextConfig = {
|
|
49
|
+
* reactCompiler: true,
|
|
50
|
+
* };
|
|
51
|
+
*
|
|
52
|
+
* export default withNextly(nextConfig);
|
|
53
|
+
* ```
|
|
54
|
+
*/
|
|
55
|
+
declare function withNextly<T extends Record<string, unknown>>(nextConfig: T): T;
|
|
56
|
+
|
|
57
|
+
export { withNextly };
|
package/dist/next.mjs
ADDED
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
import "./chunk-7P6ASYW6.mjs";
|
|
2
|
+
|
|
3
|
+
// src/next.ts
|
|
4
|
+
var NEXTLY_SERVER_EXTERNAL_PACKAGES = [
|
|
5
|
+
// Nextly core and adapters
|
|
6
|
+
"nextly",
|
|
7
|
+
"@nextlyhq/adapter-drizzle",
|
|
8
|
+
"@nextlyhq/adapter-postgres",
|
|
9
|
+
"@nextlyhq/adapter-mysql",
|
|
10
|
+
"@nextlyhq/adapter-sqlite",
|
|
11
|
+
// Database drivers
|
|
12
|
+
"pg",
|
|
13
|
+
"mysql2",
|
|
14
|
+
"better-sqlite3",
|
|
15
|
+
// ORM
|
|
16
|
+
"drizzle-orm",
|
|
17
|
+
// Auth (jose is a pure ESM package, no native bindings)
|
|
18
|
+
"jose"
|
|
19
|
+
];
|
|
20
|
+
var NEXTLY_FILE_TRACING_INCLUDES = [
|
|
21
|
+
"./node_modules/pg/**/*",
|
|
22
|
+
"./node_modules/pg-*/**/*",
|
|
23
|
+
"./node_modules/mysql2/**/*",
|
|
24
|
+
"./node_modules/better-sqlite3/**/*",
|
|
25
|
+
"./node_modules/@nextlyhq/adapter-postgres/**/*",
|
|
26
|
+
"./node_modules/@nextlyhq/adapter-mysql/**/*",
|
|
27
|
+
"./node_modules/@nextlyhq/adapter-sqlite/**/*",
|
|
28
|
+
"./node_modules/@nextlyhq/adapter-drizzle/**/*",
|
|
29
|
+
"./node_modules/drizzle-orm/**/*"
|
|
30
|
+
];
|
|
31
|
+
function withNextly(nextConfig) {
|
|
32
|
+
const existing = nextConfig.serverExternalPackages ?? [];
|
|
33
|
+
const merged = [
|
|
34
|
+
.../* @__PURE__ */ new Set([...existing, ...NEXTLY_SERVER_EXTERNAL_PACKAGES])
|
|
35
|
+
];
|
|
36
|
+
const existingExperimental = nextConfig.experimental ?? {};
|
|
37
|
+
const existingIncludes = existingExperimental.outputFileTracingIncludes ?? {};
|
|
38
|
+
const existingCatchAll = existingIncludes["/**"] ?? [];
|
|
39
|
+
return {
|
|
40
|
+
...nextConfig,
|
|
41
|
+
serverExternalPackages: merged,
|
|
42
|
+
experimental: {
|
|
43
|
+
...existingExperimental,
|
|
44
|
+
outputFileTracingIncludes: {
|
|
45
|
+
...existingIncludes,
|
|
46
|
+
"/**": [
|
|
47
|
+
.../* @__PURE__ */ new Set([...existingCatchAll, ...NEXTLY_FILE_TRACING_INCLUDES])
|
|
48
|
+
]
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
};
|
|
52
|
+
}
|
|
53
|
+
export {
|
|
54
|
+
withNextly
|
|
55
|
+
};
|