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,50 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Components Detail API Route Handlers for Next.js
|
|
3
|
+
*
|
|
4
|
+
* These route handlers can be re-exported in your Next.js application to provide
|
|
5
|
+
* individual component management endpoints at /api/components/[slug].
|
|
6
|
+
*
|
|
7
|
+
* Services are auto-initialized on first request using environment variables:
|
|
8
|
+
* - DB_DIALECT: Database dialect ("postgresql" | "mysql" | "sqlite")
|
|
9
|
+
* - DATABASE_URL: Database connection string
|
|
10
|
+
*
|
|
11
|
+
* @example
|
|
12
|
+
* ```typescript
|
|
13
|
+
* // In your Next.js app: app/api/components/[slug]/route.ts
|
|
14
|
+
* export { GET, PATCH, DELETE } from 'nextly/api/components-detail';
|
|
15
|
+
* ```
|
|
16
|
+
*
|
|
17
|
+
* @module api/components-detail
|
|
18
|
+
*/
|
|
19
|
+
/**
|
|
20
|
+
* Context object for dynamic route handlers.
|
|
21
|
+
* Next.js 15+ requires params to be a Promise.
|
|
22
|
+
*/
|
|
23
|
+
interface RouteContext {
|
|
24
|
+
params: Promise<{
|
|
25
|
+
slug: string;
|
|
26
|
+
}>;
|
|
27
|
+
}
|
|
28
|
+
/**
|
|
29
|
+
* GET handler for retrieving a single component by slug.
|
|
30
|
+
*
|
|
31
|
+
* Requires authentication.
|
|
32
|
+
*/
|
|
33
|
+
declare const GET: (request: Request, context: RouteContext) => Promise<Response>;
|
|
34
|
+
/**
|
|
35
|
+
* PATCH handler for updating a component.
|
|
36
|
+
*
|
|
37
|
+
* Requires authentication. The registry returns 403 (mapped to LOCKED in
|
|
38
|
+
* `logContext`) if the component is locked (code-first components cannot be
|
|
39
|
+
* modified via API).
|
|
40
|
+
*/
|
|
41
|
+
declare const PATCH: (request: Request, context: RouteContext) => Promise<Response>;
|
|
42
|
+
/**
|
|
43
|
+
* DELETE handler for removing a component.
|
|
44
|
+
*
|
|
45
|
+
* Requires authentication. The registry returns 403 if the component is
|
|
46
|
+
* locked, or 409 if it is referenced by other entities.
|
|
47
|
+
*/
|
|
48
|
+
declare const DELETE: (request: Request, context: RouteContext) => Promise<Response>;
|
|
49
|
+
|
|
50
|
+
export { DELETE, GET, PATCH };
|
|
@@ -0,0 +1,132 @@
|
|
|
1
|
+
import {
|
|
2
|
+
requireAuthHeader
|
|
3
|
+
} from "../chunk-WZBYMYVW.mjs";
|
|
4
|
+
import "../chunk-VWF3JO32.mjs";
|
|
5
|
+
import {
|
|
6
|
+
withErrorHandler
|
|
7
|
+
} from "../chunk-TO5AFLVQ.mjs";
|
|
8
|
+
import {
|
|
9
|
+
getCachedNextly
|
|
10
|
+
} from "../chunk-P7NH2OSC.mjs";
|
|
11
|
+
import "../chunk-2OALJTK6.mjs";
|
|
12
|
+
import "../chunk-VJ66NCL4.mjs";
|
|
13
|
+
import "../chunk-R6JJQHFC.mjs";
|
|
14
|
+
import "../chunk-X23WKS3Z.mjs";
|
|
15
|
+
import {
|
|
16
|
+
getService
|
|
17
|
+
} from "../chunk-X7TXCYYN.mjs";
|
|
18
|
+
import "../chunk-YZNBLFIW.mjs";
|
|
19
|
+
import "../chunk-FQULBZ53.mjs";
|
|
20
|
+
import "../chunk-67GXH6PR.mjs";
|
|
21
|
+
import "../chunk-2TFX4ND3.mjs";
|
|
22
|
+
import "../chunk-W4MGXIRR.mjs";
|
|
23
|
+
import "../chunk-NSEFNNU4.mjs";
|
|
24
|
+
import "../chunk-3FA7FKAV.mjs";
|
|
25
|
+
import "../chunk-AGJ6F2T3.mjs";
|
|
26
|
+
import "../chunk-KIMNCZGV.mjs";
|
|
27
|
+
import "../chunk-AK6Z23OX.mjs";
|
|
28
|
+
import "../chunk-INV7QKLG.mjs";
|
|
29
|
+
import "../chunk-GZ6DCQKC.mjs";
|
|
30
|
+
import "../chunk-SBACDPNX.mjs";
|
|
31
|
+
import "../chunk-RJLLGGPG.mjs";
|
|
32
|
+
import "../chunk-V4EQTOA4.mjs";
|
|
33
|
+
import "../chunk-I4JMR3UR.mjs";
|
|
34
|
+
import "../chunk-XZKLBMN6.mjs";
|
|
35
|
+
import "../chunk-IZWPRDC3.mjs";
|
|
36
|
+
import "../chunk-DNNG377Z.mjs";
|
|
37
|
+
import {
|
|
38
|
+
calculateSchemaHash
|
|
39
|
+
} from "../chunk-5HMZ644B.mjs";
|
|
40
|
+
import "../chunk-W5KKPZT5.mjs";
|
|
41
|
+
import "../chunk-56WO4WX7.mjs";
|
|
42
|
+
import "../chunk-2W3DVD7S.mjs";
|
|
43
|
+
import "../chunk-TS7GHTG2.mjs";
|
|
44
|
+
import "../chunk-H26B4FYG.mjs";
|
|
45
|
+
import "../chunk-DP3G27G5.mjs";
|
|
46
|
+
import "../chunk-DV6WVX2Q.mjs";
|
|
47
|
+
import "../chunk-UJ2IMJ4W.mjs";
|
|
48
|
+
import "../chunk-EGXBZCGC.mjs";
|
|
49
|
+
import "../chunk-G2AA4QLC.mjs";
|
|
50
|
+
import "../chunk-4MJLT6PZ.mjs";
|
|
51
|
+
import {
|
|
52
|
+
respondDoc,
|
|
53
|
+
respondMutation
|
|
54
|
+
} from "../chunk-IUDOC7N7.mjs";
|
|
55
|
+
import "../chunk-LAZXX4HR.mjs";
|
|
56
|
+
import "../chunk-D5HQBNUB.mjs";
|
|
57
|
+
import {
|
|
58
|
+
NextlyError
|
|
59
|
+
} from "../chunk-NRUWQ5Z7.mjs";
|
|
60
|
+
import "../chunk-VTJADRO3.mjs";
|
|
61
|
+
import "../chunk-5APFUGAD.mjs";
|
|
62
|
+
import "../chunk-7P6ASYW6.mjs";
|
|
63
|
+
|
|
64
|
+
// src/api/components-detail.ts
|
|
65
|
+
async function getComponentRegistry() {
|
|
66
|
+
await getCachedNextly();
|
|
67
|
+
return getService("componentRegistryService");
|
|
68
|
+
}
|
|
69
|
+
var GET = withErrorHandler(
|
|
70
|
+
async (request, context) => {
|
|
71
|
+
requireAuthHeader(request);
|
|
72
|
+
const { slug } = await context.params;
|
|
73
|
+
const registry = await getComponentRegistry();
|
|
74
|
+
const component = await registry.getComponent(slug);
|
|
75
|
+
return respondDoc(component);
|
|
76
|
+
}
|
|
77
|
+
);
|
|
78
|
+
var PATCH = withErrorHandler(
|
|
79
|
+
async (request, context) => {
|
|
80
|
+
requireAuthHeader(request);
|
|
81
|
+
const { slug } = await context.params;
|
|
82
|
+
const registry = await getComponentRegistry();
|
|
83
|
+
let body;
|
|
84
|
+
try {
|
|
85
|
+
body = await request.json();
|
|
86
|
+
} catch {
|
|
87
|
+
throw NextlyError.validation({
|
|
88
|
+
errors: [
|
|
89
|
+
{
|
|
90
|
+
path: "",
|
|
91
|
+
code: "invalid_json",
|
|
92
|
+
message: "Request body is not valid JSON."
|
|
93
|
+
}
|
|
94
|
+
]
|
|
95
|
+
});
|
|
96
|
+
}
|
|
97
|
+
const updateData = {};
|
|
98
|
+
if (body.label !== void 0) {
|
|
99
|
+
updateData.label = body.label;
|
|
100
|
+
}
|
|
101
|
+
if (body.description !== void 0) {
|
|
102
|
+
updateData.description = body.description;
|
|
103
|
+
}
|
|
104
|
+
if (body.fields !== void 0) {
|
|
105
|
+
updateData.fields = body.fields;
|
|
106
|
+
updateData.schemaHash = calculateSchemaHash(
|
|
107
|
+
body.fields
|
|
108
|
+
);
|
|
109
|
+
}
|
|
110
|
+
if (body.admin !== void 0) {
|
|
111
|
+
updateData.admin = body.admin;
|
|
112
|
+
}
|
|
113
|
+
const updated = await registry.updateComponent(slug, updateData, {
|
|
114
|
+
source: "ui"
|
|
115
|
+
});
|
|
116
|
+
return respondMutation("Component updated.", updated);
|
|
117
|
+
}
|
|
118
|
+
);
|
|
119
|
+
var DELETE = withErrorHandler(
|
|
120
|
+
async (request, context) => {
|
|
121
|
+
requireAuthHeader(request);
|
|
122
|
+
const { slug } = await context.params;
|
|
123
|
+
const registry = await getComponentRegistry();
|
|
124
|
+
await registry.deleteComponent(slug);
|
|
125
|
+
return new Response(null, { status: 204 });
|
|
126
|
+
}
|
|
127
|
+
);
|
|
128
|
+
export {
|
|
129
|
+
DELETE,
|
|
130
|
+
GET,
|
|
131
|
+
PATCH
|
|
132
|
+
};
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Components API Route Handlers for Next.js
|
|
3
|
+
*
|
|
4
|
+
* These route handlers can be re-exported in your Next.js application to provide
|
|
5
|
+
* component definition management endpoints at /api/components.
|
|
6
|
+
*
|
|
7
|
+
* Services are auto-initialized on first request using environment variables:
|
|
8
|
+
* - DB_DIALECT: Database dialect ("postgresql" | "mysql" | "sqlite")
|
|
9
|
+
* - DATABASE_URL: Database connection string
|
|
10
|
+
*
|
|
11
|
+
* @example
|
|
12
|
+
* ```typescript
|
|
13
|
+
* // In your Next.js app: app/api/components/route.ts
|
|
14
|
+
* export { GET, POST } from 'nextly/api/components';
|
|
15
|
+
* ```
|
|
16
|
+
*
|
|
17
|
+
* @module api/components
|
|
18
|
+
*/
|
|
19
|
+
/**
|
|
20
|
+
* GET handler for listing components with pagination and filters.
|
|
21
|
+
*
|
|
22
|
+
* This is a public endpoint - no authentication required.
|
|
23
|
+
* Used by Admin UI to load component list for navigation.
|
|
24
|
+
*
|
|
25
|
+
* Query Parameters:
|
|
26
|
+
* - source: Filter by source type ("code" | "ui")
|
|
27
|
+
* - search: Search query for slug and label
|
|
28
|
+
* - limit: Maximum results (default: 50)
|
|
29
|
+
* - offset: Number of results to skip (default: 0)
|
|
30
|
+
*
|
|
31
|
+
* Response Codes:
|
|
32
|
+
* - 200 OK: Components list retrieved successfully
|
|
33
|
+
* - 500 Internal Server Error: Failed to fetch components
|
|
34
|
+
*
|
|
35
|
+
* @param request - Next.js Request object
|
|
36
|
+
* @returns Response with JSON component list and pagination meta
|
|
37
|
+
*
|
|
38
|
+
* @example
|
|
39
|
+
* ```bash
|
|
40
|
+
* curl "http://localhost:3000/api/components?source=ui&limit=10"
|
|
41
|
+
* # => {"items":[...],"meta":{"total":5,"page":1,"limit":10,"totalPages":1,"hasNext":false,"hasPrev":false}}
|
|
42
|
+
* ```
|
|
43
|
+
*/
|
|
44
|
+
declare const GET: (request: Request) => Promise<Response>;
|
|
45
|
+
/**
|
|
46
|
+
* POST handler for creating a new UI component.
|
|
47
|
+
*
|
|
48
|
+
* Requires authentication. Creates a new component with source="ui" and locked=false.
|
|
49
|
+
*
|
|
50
|
+
* Request Body:
|
|
51
|
+
* - slug: Unique identifier (lowercase, letters/numbers/hyphens)
|
|
52
|
+
* - label: Display name for the component
|
|
53
|
+
* - description: Optional description
|
|
54
|
+
* - fields: Array of field configurations
|
|
55
|
+
* - admin: Optional admin UI configuration (category, icon, hidden, description, imageURL)
|
|
56
|
+
*
|
|
57
|
+
* Response Codes:
|
|
58
|
+
* - 201 Created: Component created successfully
|
|
59
|
+
* - 400 Bad Request: Invalid input
|
|
60
|
+
* - 401 Unauthorized: Authentication required
|
|
61
|
+
* - 409 Conflict: Component with slug already exists
|
|
62
|
+
* - 500 Internal Server Error: Creation failed
|
|
63
|
+
*
|
|
64
|
+
* @param request - Next.js Request object with JSON body
|
|
65
|
+
* @returns Response with JSON created component
|
|
66
|
+
*/
|
|
67
|
+
declare const POST: (request: Request) => Promise<Response>;
|
|
68
|
+
|
|
69
|
+
export { GET, POST };
|
|
@@ -0,0 +1,144 @@
|
|
|
1
|
+
import {
|
|
2
|
+
nextlyValidationFromZod
|
|
3
|
+
} from "../chunk-GJNSJU4S.mjs";
|
|
4
|
+
import "../chunk-VWF3JO32.mjs";
|
|
5
|
+
import {
|
|
6
|
+
withErrorHandler
|
|
7
|
+
} from "../chunk-TO5AFLVQ.mjs";
|
|
8
|
+
import {
|
|
9
|
+
getCachedNextly
|
|
10
|
+
} from "../chunk-P7NH2OSC.mjs";
|
|
11
|
+
import "../chunk-2OALJTK6.mjs";
|
|
12
|
+
import "../chunk-VJ66NCL4.mjs";
|
|
13
|
+
import "../chunk-R6JJQHFC.mjs";
|
|
14
|
+
import "../chunk-X23WKS3Z.mjs";
|
|
15
|
+
import {
|
|
16
|
+
getService
|
|
17
|
+
} from "../chunk-X7TXCYYN.mjs";
|
|
18
|
+
import "../chunk-YZNBLFIW.mjs";
|
|
19
|
+
import "../chunk-FQULBZ53.mjs";
|
|
20
|
+
import "../chunk-67GXH6PR.mjs";
|
|
21
|
+
import "../chunk-2TFX4ND3.mjs";
|
|
22
|
+
import "../chunk-W4MGXIRR.mjs";
|
|
23
|
+
import {
|
|
24
|
+
clampLimit2 as clampLimit
|
|
25
|
+
} from "../chunk-NSEFNNU4.mjs";
|
|
26
|
+
import "../chunk-3FA7FKAV.mjs";
|
|
27
|
+
import "../chunk-AGJ6F2T3.mjs";
|
|
28
|
+
import "../chunk-KIMNCZGV.mjs";
|
|
29
|
+
import "../chunk-AK6Z23OX.mjs";
|
|
30
|
+
import "../chunk-INV7QKLG.mjs";
|
|
31
|
+
import "../chunk-GZ6DCQKC.mjs";
|
|
32
|
+
import "../chunk-SBACDPNX.mjs";
|
|
33
|
+
import "../chunk-RJLLGGPG.mjs";
|
|
34
|
+
import "../chunk-V4EQTOA4.mjs";
|
|
35
|
+
import "../chunk-I4JMR3UR.mjs";
|
|
36
|
+
import "../chunk-XZKLBMN6.mjs";
|
|
37
|
+
import "../chunk-IZWPRDC3.mjs";
|
|
38
|
+
import "../chunk-DNNG377Z.mjs";
|
|
39
|
+
import {
|
|
40
|
+
calculateSchemaHash
|
|
41
|
+
} from "../chunk-5HMZ644B.mjs";
|
|
42
|
+
import "../chunk-W5KKPZT5.mjs";
|
|
43
|
+
import "../chunk-56WO4WX7.mjs";
|
|
44
|
+
import "../chunk-2W3DVD7S.mjs";
|
|
45
|
+
import "../chunk-TS7GHTG2.mjs";
|
|
46
|
+
import "../chunk-H26B4FYG.mjs";
|
|
47
|
+
import "../chunk-DP3G27G5.mjs";
|
|
48
|
+
import "../chunk-DV6WVX2Q.mjs";
|
|
49
|
+
import "../chunk-UJ2IMJ4W.mjs";
|
|
50
|
+
import "../chunk-EGXBZCGC.mjs";
|
|
51
|
+
import "../chunk-G2AA4QLC.mjs";
|
|
52
|
+
import "../chunk-4MJLT6PZ.mjs";
|
|
53
|
+
import {
|
|
54
|
+
respondList,
|
|
55
|
+
respondMutation
|
|
56
|
+
} from "../chunk-IUDOC7N7.mjs";
|
|
57
|
+
import "../chunk-LAZXX4HR.mjs";
|
|
58
|
+
import "../chunk-D5HQBNUB.mjs";
|
|
59
|
+
import {
|
|
60
|
+
NextlyError
|
|
61
|
+
} from "../chunk-NRUWQ5Z7.mjs";
|
|
62
|
+
import "../chunk-VTJADRO3.mjs";
|
|
63
|
+
import "../chunk-5APFUGAD.mjs";
|
|
64
|
+
import "../chunk-7P6ASYW6.mjs";
|
|
65
|
+
|
|
66
|
+
// src/api/components.ts
|
|
67
|
+
import { z } from "zod";
|
|
68
|
+
async function getComponentRegistry() {
|
|
69
|
+
await getCachedNextly();
|
|
70
|
+
return getService("componentRegistryService");
|
|
71
|
+
}
|
|
72
|
+
var createComponentSchema = z.object({
|
|
73
|
+
slug: z.string().min(1, "Slug is required").max(255, "Slug must be 255 characters or less").regex(
|
|
74
|
+
/^[a-z][a-z0-9-]*$/,
|
|
75
|
+
"Slug must start with a letter and contain only lowercase letters, numbers, and hyphens"
|
|
76
|
+
),
|
|
77
|
+
label: z.string().min(1, "Label is required"),
|
|
78
|
+
description: z.string().optional(),
|
|
79
|
+
fields: z.array(z.any()),
|
|
80
|
+
// Field validation is complex, handled by service
|
|
81
|
+
admin: z.object({
|
|
82
|
+
category: z.string().optional(),
|
|
83
|
+
icon: z.string().optional(),
|
|
84
|
+
hidden: z.boolean().optional(),
|
|
85
|
+
description: z.string().optional(),
|
|
86
|
+
imageURL: z.string().optional()
|
|
87
|
+
}).optional()
|
|
88
|
+
});
|
|
89
|
+
var GET = withErrorHandler(async (request) => {
|
|
90
|
+
const registry = await getComponentRegistry();
|
|
91
|
+
const { searchParams } = new URL(request.url);
|
|
92
|
+
const source = searchParams.get("source");
|
|
93
|
+
const search = searchParams.get("search") || void 0;
|
|
94
|
+
const limit = clampLimit(searchParams.get("limit"), { defaultLimit: 50 });
|
|
95
|
+
const offset = searchParams.get("offset") ? parseInt(searchParams.get("offset"), 10) : 0;
|
|
96
|
+
const result = await registry.listComponents({
|
|
97
|
+
source: source || void 0,
|
|
98
|
+
search,
|
|
99
|
+
limit,
|
|
100
|
+
offset
|
|
101
|
+
});
|
|
102
|
+
const safeLimit = Math.max(1, limit);
|
|
103
|
+
const page = Math.floor(offset / safeLimit) + 1;
|
|
104
|
+
const totalPages = result.total > 0 ? Math.ceil(result.total / safeLimit) : 0;
|
|
105
|
+
return respondList(result.data, {
|
|
106
|
+
total: result.total,
|
|
107
|
+
page,
|
|
108
|
+
limit: safeLimit,
|
|
109
|
+
totalPages,
|
|
110
|
+
hasNext: page < totalPages,
|
|
111
|
+
hasPrev: page > 1
|
|
112
|
+
});
|
|
113
|
+
});
|
|
114
|
+
var POST = withErrorHandler(async (request) => {
|
|
115
|
+
const authHeader = request.headers.get("Authorization");
|
|
116
|
+
if (!authHeader) {
|
|
117
|
+
throw NextlyError.authRequired();
|
|
118
|
+
}
|
|
119
|
+
const registry = await getComponentRegistry();
|
|
120
|
+
const body = await request.json();
|
|
121
|
+
const parsed = createComponentSchema.safeParse(body);
|
|
122
|
+
if (!parsed.success) {
|
|
123
|
+
throw nextlyValidationFromZod(parsed.error);
|
|
124
|
+
}
|
|
125
|
+
const validated = parsed.data;
|
|
126
|
+
const tableName = validated.slug.toLowerCase().replace(/[^a-z0-9]+/g, "_").replace(/^_+|_+$/g, "");
|
|
127
|
+
const schemaHash = calculateSchemaHash(validated.fields);
|
|
128
|
+
const component = await registry.registerComponent({
|
|
129
|
+
slug: validated.slug,
|
|
130
|
+
label: validated.label,
|
|
131
|
+
tableName,
|
|
132
|
+
description: validated.description,
|
|
133
|
+
fields: validated.fields,
|
|
134
|
+
admin: validated.admin,
|
|
135
|
+
source: "ui",
|
|
136
|
+
locked: false,
|
|
137
|
+
schemaHash
|
|
138
|
+
});
|
|
139
|
+
return respondMutation("Component created.", component, { status: 201 });
|
|
140
|
+
});
|
|
141
|
+
export {
|
|
142
|
+
GET,
|
|
143
|
+
POST
|
|
144
|
+
};
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Email Provider Default API Route Handler for Next.js
|
|
3
|
+
*
|
|
4
|
+
* Sets a specific email provider as the default. The previous default
|
|
5
|
+
* provider is unset atomically in a transaction.
|
|
6
|
+
* Re-export in your Next.js application at /api/email-providers/[id]/default.
|
|
7
|
+
*
|
|
8
|
+
* @example
|
|
9
|
+
* ```typescript
|
|
10
|
+
* // In your Next.js app: app/api/email-providers/[id]/default/route.ts
|
|
11
|
+
* export { PATCH } from 'nextly/api/email-providers-default';
|
|
12
|
+
* ```
|
|
13
|
+
*
|
|
14
|
+
* @module api/email-providers-default
|
|
15
|
+
*/
|
|
16
|
+
interface RouteContext {
|
|
17
|
+
params: Promise<{
|
|
18
|
+
id: string;
|
|
19
|
+
}>;
|
|
20
|
+
}
|
|
21
|
+
/**
|
|
22
|
+
* PATCH handler for setting an email provider as the default.
|
|
23
|
+
*
|
|
24
|
+
* Requires authentication. Unsets the previous default provider and sets
|
|
25
|
+
* the specified provider as default in a single transaction.
|
|
26
|
+
*
|
|
27
|
+
* No request body required; the provider ID is in the URL path.
|
|
28
|
+
*
|
|
29
|
+
* Response Codes:
|
|
30
|
+
* - 200 OK: Provider set as default successfully
|
|
31
|
+
* - 401 Unauthorized: Authentication required
|
|
32
|
+
* - 404 Not Found: Provider with ID does not exist
|
|
33
|
+
* - 500 Internal Server Error: Operation failed
|
|
34
|
+
*
|
|
35
|
+
* Response: `{ "data": EmailProvider }`; updated provider with `isDefault:
|
|
36
|
+
* true` and masked configuration.
|
|
37
|
+
*/
|
|
38
|
+
declare const PATCH: (request: Request, context: RouteContext) => Promise<Response>;
|
|
39
|
+
|
|
40
|
+
export { PATCH };
|
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
import {
|
|
2
|
+
requireAuthHeader
|
|
3
|
+
} from "../chunk-WZBYMYVW.mjs";
|
|
4
|
+
import "../chunk-VWF3JO32.mjs";
|
|
5
|
+
import {
|
|
6
|
+
withErrorHandler
|
|
7
|
+
} from "../chunk-TO5AFLVQ.mjs";
|
|
8
|
+
import {
|
|
9
|
+
getCachedNextly
|
|
10
|
+
} from "../chunk-P7NH2OSC.mjs";
|
|
11
|
+
import "../chunk-2OALJTK6.mjs";
|
|
12
|
+
import "../chunk-VJ66NCL4.mjs";
|
|
13
|
+
import "../chunk-R6JJQHFC.mjs";
|
|
14
|
+
import "../chunk-X23WKS3Z.mjs";
|
|
15
|
+
import "../chunk-X7TXCYYN.mjs";
|
|
16
|
+
import "../chunk-YZNBLFIW.mjs";
|
|
17
|
+
import "../chunk-FQULBZ53.mjs";
|
|
18
|
+
import "../chunk-67GXH6PR.mjs";
|
|
19
|
+
import "../chunk-2TFX4ND3.mjs";
|
|
20
|
+
import "../chunk-W4MGXIRR.mjs";
|
|
21
|
+
import "../chunk-NSEFNNU4.mjs";
|
|
22
|
+
import "../chunk-3FA7FKAV.mjs";
|
|
23
|
+
import "../chunk-AGJ6F2T3.mjs";
|
|
24
|
+
import "../chunk-KIMNCZGV.mjs";
|
|
25
|
+
import "../chunk-AK6Z23OX.mjs";
|
|
26
|
+
import "../chunk-INV7QKLG.mjs";
|
|
27
|
+
import "../chunk-GZ6DCQKC.mjs";
|
|
28
|
+
import "../chunk-SBACDPNX.mjs";
|
|
29
|
+
import "../chunk-RJLLGGPG.mjs";
|
|
30
|
+
import "../chunk-V4EQTOA4.mjs";
|
|
31
|
+
import "../chunk-I4JMR3UR.mjs";
|
|
32
|
+
import "../chunk-XZKLBMN6.mjs";
|
|
33
|
+
import "../chunk-IZWPRDC3.mjs";
|
|
34
|
+
import "../chunk-DNNG377Z.mjs";
|
|
35
|
+
import "../chunk-5HMZ644B.mjs";
|
|
36
|
+
import "../chunk-W5KKPZT5.mjs";
|
|
37
|
+
import "../chunk-56WO4WX7.mjs";
|
|
38
|
+
import "../chunk-2W3DVD7S.mjs";
|
|
39
|
+
import "../chunk-TS7GHTG2.mjs";
|
|
40
|
+
import "../chunk-H26B4FYG.mjs";
|
|
41
|
+
import "../chunk-DP3G27G5.mjs";
|
|
42
|
+
import "../chunk-DV6WVX2Q.mjs";
|
|
43
|
+
import "../chunk-UJ2IMJ4W.mjs";
|
|
44
|
+
import "../chunk-EGXBZCGC.mjs";
|
|
45
|
+
import "../chunk-G2AA4QLC.mjs";
|
|
46
|
+
import "../chunk-4MJLT6PZ.mjs";
|
|
47
|
+
import {
|
|
48
|
+
respondAction
|
|
49
|
+
} from "../chunk-IUDOC7N7.mjs";
|
|
50
|
+
import "../chunk-LAZXX4HR.mjs";
|
|
51
|
+
import {
|
|
52
|
+
container
|
|
53
|
+
} from "../chunk-D5HQBNUB.mjs";
|
|
54
|
+
import "../chunk-NRUWQ5Z7.mjs";
|
|
55
|
+
import "../chunk-VTJADRO3.mjs";
|
|
56
|
+
import "../chunk-5APFUGAD.mjs";
|
|
57
|
+
import "../chunk-7P6ASYW6.mjs";
|
|
58
|
+
|
|
59
|
+
// src/api/email-providers-default.ts
|
|
60
|
+
async function getEmailProviderService() {
|
|
61
|
+
await getCachedNextly();
|
|
62
|
+
return container.get("emailProviderService");
|
|
63
|
+
}
|
|
64
|
+
var PATCH = withErrorHandler(
|
|
65
|
+
async (request, context) => {
|
|
66
|
+
requireAuthHeader(request);
|
|
67
|
+
const { id } = await context.params;
|
|
68
|
+
const service = await getEmailProviderService();
|
|
69
|
+
const provider = await service.setDefault(id);
|
|
70
|
+
return respondAction("Default email provider updated.", { provider });
|
|
71
|
+
}
|
|
72
|
+
);
|
|
73
|
+
export {
|
|
74
|
+
PATCH
|
|
75
|
+
};
|
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Email Providers Detail API Route Handlers for Next.js
|
|
3
|
+
*
|
|
4
|
+
* These route handlers can be re-exported in your Next.js application to provide
|
|
5
|
+
* individual email provider management endpoints at /api/email-providers/[id].
|
|
6
|
+
*
|
|
7
|
+
* Services are auto-initialized on first request using environment variables:
|
|
8
|
+
* - DB_DIALECT: Database dialect ("postgresql" | "mysql" | "sqlite")
|
|
9
|
+
* - DATABASE_URL: Database connection string
|
|
10
|
+
*
|
|
11
|
+
* @example
|
|
12
|
+
* ```typescript
|
|
13
|
+
* // In your Next.js app: app/api/email-providers/[id]/route.ts
|
|
14
|
+
* export { GET, PATCH, DELETE } from 'nextly/api/email-providers-detail';
|
|
15
|
+
* ```
|
|
16
|
+
*
|
|
17
|
+
* Auth is a header-only presence check; real verification lives downstream.
|
|
18
|
+
*
|
|
19
|
+
* @module api/email-providers-detail
|
|
20
|
+
*/
|
|
21
|
+
interface RouteContext {
|
|
22
|
+
params: Promise<{
|
|
23
|
+
id: string;
|
|
24
|
+
}>;
|
|
25
|
+
}
|
|
26
|
+
/**
|
|
27
|
+
* GET handler for retrieving a single email provider by ID.
|
|
28
|
+
*
|
|
29
|
+
* Requires authentication. Returns provider with masked configuration.
|
|
30
|
+
*
|
|
31
|
+
* Response Codes:
|
|
32
|
+
* - 200 OK: Provider retrieved successfully
|
|
33
|
+
* - 401 Unauthorized: Authentication required
|
|
34
|
+
* - 404 Not Found: Provider with ID does not exist
|
|
35
|
+
* - 500 Internal Server Error: Failed to fetch provider
|
|
36
|
+
*
|
|
37
|
+
* Response: `{ "data": EmailProvider }`
|
|
38
|
+
*/
|
|
39
|
+
declare const GET: (request: Request, context: RouteContext) => Promise<Response>;
|
|
40
|
+
/**
|
|
41
|
+
* PATCH handler for updating an email provider.
|
|
42
|
+
*
|
|
43
|
+
* Requires authentication. Provider `type` cannot be changed after creation.
|
|
44
|
+
* Configuration is re-encrypted before storage.
|
|
45
|
+
*
|
|
46
|
+
* Request Body (all fields optional):
|
|
47
|
+
* - name: Display name
|
|
48
|
+
* - fromEmail: From email address
|
|
49
|
+
* - fromName: From display name
|
|
50
|
+
* - configuration: Provider-specific config object
|
|
51
|
+
* - isActive: Enable/disable provider
|
|
52
|
+
*
|
|
53
|
+
* Response Codes:
|
|
54
|
+
* - 200 OK: Provider updated successfully
|
|
55
|
+
* - 400 Bad Request: Invalid JSON body
|
|
56
|
+
* - 401 Unauthorized: Authentication required
|
|
57
|
+
* - 404 Not Found: Provider with ID does not exist
|
|
58
|
+
* - 500 Internal Server Error: Update failed
|
|
59
|
+
*
|
|
60
|
+
* Response: `{ "data": EmailProvider }`; updated provider with masked
|
|
61
|
+
* configuration.
|
|
62
|
+
*/
|
|
63
|
+
declare const PATCH: (request: Request, context: RouteContext) => Promise<Response>;
|
|
64
|
+
/**
|
|
65
|
+
* DELETE handler for removing an email provider.
|
|
66
|
+
*
|
|
67
|
+
* Requires authentication. Cannot delete the default provider; set another
|
|
68
|
+
* provider as default first.
|
|
69
|
+
*
|
|
70
|
+
* Response Codes:
|
|
71
|
+
* - 200 OK: Provider deleted successfully
|
|
72
|
+
* - 401 Unauthorized: Authentication required
|
|
73
|
+
* - 403 Forbidden: Cannot delete the default provider
|
|
74
|
+
* - 404 Not Found: Provider with ID does not exist
|
|
75
|
+
* - 500 Internal Server Error: Deletion failed
|
|
76
|
+
*
|
|
77
|
+
* Response: `{ "data": { "success": true } }`
|
|
78
|
+
*/
|
|
79
|
+
declare const DELETE: (request: Request, context: RouteContext) => Promise<Response>;
|
|
80
|
+
|
|
81
|
+
export { DELETE, GET, PATCH };
|