@fade_networker/vono 0.1.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/LICENSE +21 -0
- package/README.md +47 -0
- package/dist/client/composables/navigateTo.d.ts +37 -0
- package/dist/client/composables/navigateTo.d.ts.map +1 -0
- package/dist/client/composables/navigateTo.js +56 -0
- package/dist/client/composables/navigateTo.js.map +1 -0
- package/dist/client/composables/useAsyncData.d.ts +35 -0
- package/dist/client/composables/useAsyncData.d.ts.map +1 -0
- package/dist/client/composables/useAsyncData.js +55 -0
- package/dist/client/composables/useAsyncData.js.map +1 -0
- package/dist/client/composables/useCookie.d.ts +33 -0
- package/dist/client/composables/useCookie.d.ts.map +1 -0
- package/dist/client/composables/useCookie.js +61 -0
- package/dist/client/composables/useCookie.js.map +1 -0
- package/dist/client/composables/useFormErrors.d.ts +34 -0
- package/dist/client/composables/useFormErrors.d.ts.map +1 -0
- package/dist/client/composables/useFormErrors.js +59 -0
- package/dist/client/composables/useFormErrors.js.map +1 -0
- package/dist/client/composables/useRouteRules.d.ts +26 -0
- package/dist/client/composables/useRouteRules.d.ts.map +1 -0
- package/dist/client/composables/useRouteRules.js +44 -0
- package/dist/client/composables/useRouteRules.js.map +1 -0
- package/dist/client/composables/useSeo.d.ts +35 -0
- package/dist/client/composables/useSeo.d.ts.map +1 -0
- package/dist/client/composables/useSeo.js +62 -0
- package/dist/client/composables/useSeo.js.map +1 -0
- package/dist/client/composables/useState.d.ts +35 -0
- package/dist/client/composables/useState.d.ts.map +1 -0
- package/dist/client/composables/useState.js +73 -0
- package/dist/client/composables/useState.js.map +1 -0
- package/dist/client/composables/useVonoFetch.d.ts +24 -0
- package/dist/client/composables/useVonoFetch.d.ts.map +1 -0
- package/dist/client/composables/useVonoFetch.js +49 -0
- package/dist/client/composables/useVonoFetch.js.map +1 -0
- package/dist/client/index.d.ts +19 -0
- package/dist/client/index.d.ts.map +1 -0
- package/dist/client/index.js +20 -0
- package/dist/client/index.js.map +1 -0
- package/dist/client/layouts/index.d.ts +12 -0
- package/dist/client/layouts/index.d.ts.map +1 -0
- package/dist/client/layouts/index.js +11 -0
- package/dist/client/layouts/index.js.map +1 -0
- package/dist/client/layouts/resolve-layout.d.ts +23 -0
- package/dist/client/layouts/resolve-layout.d.ts.map +1 -0
- package/dist/client/layouts/resolve-layout.js +31 -0
- package/dist/client/layouts/resolve-layout.js.map +1 -0
- package/dist/client/nuxt-ui/index.d.ts +11 -0
- package/dist/client/nuxt-ui/index.d.ts.map +1 -0
- package/dist/client/nuxt-ui/index.js +11 -0
- package/dist/client/nuxt-ui/index.js.map +1 -0
- package/dist/client/nuxt-ui/setup.d.ts +27 -0
- package/dist/client/nuxt-ui/setup.d.ts.map +1 -0
- package/dist/client/nuxt-ui/setup.js +40 -0
- package/dist/client/nuxt-ui/setup.js.map +1 -0
- package/dist/client/pinia-hydration.d.ts +35 -0
- package/dist/client/pinia-hydration.d.ts.map +1 -0
- package/dist/client/pinia-hydration.js +48 -0
- package/dist/client/pinia-hydration.js.map +1 -0
- package/dist/config/define-config.d.ts +25 -0
- package/dist/config/define-config.d.ts.map +1 -0
- package/dist/config/define-config.js +63 -0
- package/dist/config/define-config.js.map +1 -0
- package/dist/config/env-helpers.d.ts +30 -0
- package/dist/config/env-helpers.d.ts.map +1 -0
- package/dist/config/env-helpers.js +50 -0
- package/dist/config/env-helpers.js.map +1 -0
- package/dist/config/use-config.d.ts +31 -0
- package/dist/config/use-config.d.ts.map +1 -0
- package/dist/config/use-config.js +49 -0
- package/dist/config/use-config.js.map +1 -0
- package/dist/index.d.ts +16 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +15 -0
- package/dist/index.js.map +1 -0
- package/dist/module-system/define-module.d.ts +82 -0
- package/dist/module-system/define-module.d.ts.map +1 -0
- package/dist/module-system/define-module.js +37 -0
- package/dist/module-system/define-module.js.map +1 -0
- package/dist/module-system/index.d.ts +14 -0
- package/dist/module-system/index.d.ts.map +1 -0
- package/dist/module-system/index.js +13 -0
- package/dist/module-system/index.js.map +1 -0
- package/dist/module-system/module-registry.d.ts +37 -0
- package/dist/module-system/module-registry.d.ts.map +1 -0
- package/dist/module-system/module-registry.js +68 -0
- package/dist/module-system/module-registry.js.map +1 -0
- package/dist/module-system/vite-integration.d.ts +23 -0
- package/dist/module-system/vite-integration.d.ts.map +1 -0
- package/dist/module-system/vite-integration.js +67 -0
- package/dist/module-system/vite-integration.js.map +1 -0
- package/dist/server/app-template.d.ts +47 -0
- package/dist/server/app-template.d.ts.map +1 -0
- package/dist/server/app-template.js +224 -0
- package/dist/server/app-template.js.map +1 -0
- package/dist/server/auth/gates.d.ts +79 -0
- package/dist/server/auth/gates.d.ts.map +1 -0
- package/dist/server/auth/gates.js +125 -0
- package/dist/server/auth/gates.js.map +1 -0
- package/dist/server/auth/index.d.ts +12 -0
- package/dist/server/auth/index.d.ts.map +1 -0
- package/dist/server/auth/index.js +12 -0
- package/dist/server/auth/index.js.map +1 -0
- package/dist/server/dto/query.dto.d.ts +44 -0
- package/dist/server/dto/query.dto.d.ts.map +1 -0
- package/dist/server/dto/query.dto.js +86 -0
- package/dist/server/dto/query.dto.js.map +1 -0
- package/dist/server/email/define-email.d.ts +41 -0
- package/dist/server/email/define-email.d.ts.map +1 -0
- package/dist/server/email/define-email.js +50 -0
- package/dist/server/email/define-email.js.map +1 -0
- package/dist/server/email/drivers/console.d.ts +16 -0
- package/dist/server/email/drivers/console.d.ts.map +1 -0
- package/dist/server/email/drivers/console.js +22 -0
- package/dist/server/email/drivers/console.js.map +1 -0
- package/dist/server/email/drivers/postmark.d.ts +19 -0
- package/dist/server/email/drivers/postmark.d.ts.map +1 -0
- package/dist/server/email/drivers/postmark.js +39 -0
- package/dist/server/email/drivers/postmark.js.map +1 -0
- package/dist/server/email/drivers/resend.d.ts +19 -0
- package/dist/server/email/drivers/resend.d.ts.map +1 -0
- package/dist/server/email/drivers/resend.js +37 -0
- package/dist/server/email/drivers/resend.js.map +1 -0
- package/dist/server/email/drivers/smtp.d.ts +26 -0
- package/dist/server/email/drivers/smtp.d.ts.map +1 -0
- package/dist/server/email/drivers/smtp.js +37 -0
- package/dist/server/email/drivers/smtp.js.map +1 -0
- package/dist/server/email/send-email.d.ts +42 -0
- package/dist/server/email/send-email.d.ts.map +1 -0
- package/dist/server/email/send-email.js +69 -0
- package/dist/server/email/send-email.js.map +1 -0
- package/dist/server/env-validation/define-env.d.ts +45 -0
- package/dist/server/env-validation/define-env.d.ts.map +1 -0
- package/dist/server/env-validation/define-env.js +41 -0
- package/dist/server/env-validation/define-env.js.map +1 -0
- package/dist/server/env-validation/index.d.ts +13 -0
- package/dist/server/env-validation/index.d.ts.map +1 -0
- package/dist/server/env-validation/index.js +12 -0
- package/dist/server/env-validation/index.js.map +1 -0
- package/dist/server/env-validation/validate-at-startup.d.ts +29 -0
- package/dist/server/env-validation/validate-at-startup.d.ts.map +1 -0
- package/dist/server/env-validation/validate-at-startup.js +61 -0
- package/dist/server/env-validation/validate-at-startup.js.map +1 -0
- package/dist/server/i18n/composables/useI18n.d.ts +39 -0
- package/dist/server/i18n/composables/useI18n.d.ts.map +1 -0
- package/dist/server/i18n/composables/useI18n.js +93 -0
- package/dist/server/i18n/composables/useI18n.js.map +1 -0
- package/dist/server/i18n/detect-locale.d.ts +22 -0
- package/dist/server/i18n/detect-locale.d.ts.map +1 -0
- package/dist/server/i18n/detect-locale.js +42 -0
- package/dist/server/i18n/detect-locale.js.map +1 -0
- package/dist/server/i18n/index.d.ts +14 -0
- package/dist/server/i18n/index.d.ts.map +1 -0
- package/dist/server/i18n/index.js +13 -0
- package/dist/server/i18n/index.js.map +1 -0
- package/dist/server/i18n/translate.d.ts +38 -0
- package/dist/server/i18n/translate.d.ts.map +1 -0
- package/dist/server/i18n/translate.js +83 -0
- package/dist/server/i18n/translate.js.map +1 -0
- package/dist/server/index.d.ts +40 -0
- package/dist/server/index.d.ts.map +1 -0
- package/dist/server/index.js +36 -0
- package/dist/server/index.js.map +1 -0
- package/dist/server/jobs/define-job.d.ts +50 -0
- package/dist/server/jobs/define-job.d.ts.map +1 -0
- package/dist/server/jobs/define-job.js +32 -0
- package/dist/server/jobs/define-job.js.map +1 -0
- package/dist/server/jobs/index.d.ts +13 -0
- package/dist/server/jobs/index.d.ts.map +1 -0
- package/dist/server/jobs/index.js +12 -0
- package/dist/server/jobs/index.js.map +1 -0
- package/dist/server/jobs/runner.d.ts +37 -0
- package/dist/server/jobs/runner.d.ts.map +1 -0
- package/dist/server/jobs/runner.js +75 -0
- package/dist/server/jobs/runner.js.map +1 -0
- package/dist/server/middleware/configProvider.d.ts +26 -0
- package/dist/server/middleware/configProvider.d.ts.map +1 -0
- package/dist/server/middleware/configProvider.js +78 -0
- package/dist/server/middleware/configProvider.js.map +1 -0
- package/dist/server/middleware/dbProvider.d.ts +27 -0
- package/dist/server/middleware/dbProvider.d.ts.map +1 -0
- package/dist/server/middleware/dbProvider.js +66 -0
- package/dist/server/middleware/dbProvider.js.map +1 -0
- package/dist/server/middleware/rateLimiter.d.ts +74 -0
- package/dist/server/middleware/rateLimiter.d.ts.map +1 -0
- package/dist/server/middleware/rateLimiter.js +164 -0
- package/dist/server/middleware/rateLimiter.js.map +1 -0
- package/dist/server/middleware/validator.d.ts +57 -0
- package/dist/server/middleware/validator.d.ts.map +1 -0
- package/dist/server/middleware/validator.js +128 -0
- package/dist/server/middleware/validator.js.map +1 -0
- package/dist/server/openapi/append-tag.d.ts +21 -0
- package/dist/server/openapi/append-tag.d.ts.map +1 -0
- package/dist/server/openapi/append-tag.js +54 -0
- package/dist/server/openapi/append-tag.js.map +1 -0
- package/dist/server/openapi/index.d.ts +13 -0
- package/dist/server/openapi/index.d.ts.map +1 -0
- package/dist/server/openapi/index.js +12 -0
- package/dist/server/openapi/index.js.map +1 -0
- package/dist/server/openapi/spec-template.d.ts +45 -0
- package/dist/server/openapi/spec-template.d.ts.map +1 -0
- package/dist/server/openapi/spec-template.js +132 -0
- package/dist/server/openapi/spec-template.js.map +1 -0
- package/dist/server/renderer.d.ts +62 -0
- package/dist/server/renderer.d.ts.map +1 -0
- package/dist/server/renderer.js +115 -0
- package/dist/server/renderer.js.map +1 -0
- package/dist/server/resolvers/cache-driver.d.ts +22 -0
- package/dist/server/resolvers/cache-driver.d.ts.map +1 -0
- package/dist/server/resolvers/cache-driver.js +29 -0
- package/dist/server/resolvers/cache-driver.js.map +1 -0
- package/dist/server/resolvers/index.d.ts +17 -0
- package/dist/server/resolvers/index.d.ts.map +1 -0
- package/dist/server/resolvers/index.js +14 -0
- package/dist/server/resolvers/index.js.map +1 -0
- package/dist/server/resolvers/queue-driver.d.ts +25 -0
- package/dist/server/resolvers/queue-driver.d.ts.map +1 -0
- package/dist/server/resolvers/queue-driver.js +44 -0
- package/dist/server/resolvers/queue-driver.js.map +1 -0
- package/dist/server/resolvers/storage-driver.d.ts +24 -0
- package/dist/server/resolvers/storage-driver.d.ts.map +1 -0
- package/dist/server/resolvers/storage-driver.js +38 -0
- package/dist/server/resolvers/storage-driver.js.map +1 -0
- package/dist/server/resolvers/validate-compatibility.d.ts +22 -0
- package/dist/server/resolvers/validate-compatibility.d.ts.map +1 -0
- package/dist/server/resolvers/validate-compatibility.js +83 -0
- package/dist/server/resolvers/validate-compatibility.js.map +1 -0
- package/dist/server/resources/base-resource.d.ts +57 -0
- package/dist/server/resources/base-resource.d.ts.map +1 -0
- package/dist/server/resources/base-resource.js +74 -0
- package/dist/server/resources/base-resource.js.map +1 -0
- package/dist/server/route-rules.d.ts +45 -0
- package/dist/server/route-rules.d.ts.map +1 -0
- package/dist/server/route-rules.js +66 -0
- package/dist/server/route-rules.js.map +1 -0
- package/dist/server/seo.d.ts +58 -0
- package/dist/server/seo.d.ts.map +1 -0
- package/dist/server/seo.js +85 -0
- package/dist/server/seo.js.map +1 -0
- package/dist/server/storage/drivers/bunny.d.ts +33 -0
- package/dist/server/storage/drivers/bunny.d.ts.map +1 -0
- package/dist/server/storage/drivers/bunny.js +70 -0
- package/dist/server/storage/drivers/bunny.js.map +1 -0
- package/dist/server/storage/drivers/cloudinary.d.ts +30 -0
- package/dist/server/storage/drivers/cloudinary.d.ts.map +1 -0
- package/dist/server/storage/drivers/cloudinary.js +86 -0
- package/dist/server/storage/drivers/cloudinary.js.map +1 -0
- package/dist/server/storage/drivers/local.d.ts +28 -0
- package/dist/server/storage/drivers/local.d.ts.map +1 -0
- package/dist/server/storage/drivers/local.js +57 -0
- package/dist/server/storage/drivers/local.js.map +1 -0
- package/dist/server/storage/drivers/r2.d.ts +32 -0
- package/dist/server/storage/drivers/r2.d.ts.map +1 -0
- package/dist/server/storage/drivers/r2.js +70 -0
- package/dist/server/storage/drivers/r2.js.map +1 -0
- package/dist/server/storage/drivers/s3.d.ts +29 -0
- package/dist/server/storage/drivers/s3.d.ts.map +1 -0
- package/dist/server/storage/drivers/s3.js +68 -0
- package/dist/server/storage/drivers/s3.js.map +1 -0
- package/dist/server/storage/index.d.ts +17 -0
- package/dist/server/storage/index.d.ts.map +1 -0
- package/dist/server/storage/index.js +16 -0
- package/dist/server/storage/index.js.map +1 -0
- package/dist/server/storage/types.d.ts +70 -0
- package/dist/server/storage/types.d.ts.map +1 -0
- package/dist/server/storage/types.js +11 -0
- package/dist/server/storage/types.js.map +1 -0
- package/dist/server/storage/use-storage.d.ts +54 -0
- package/dist/server/storage/use-storage.d.ts.map +1 -0
- package/dist/server/storage/use-storage.js +150 -0
- package/dist/server/storage/use-storage.js.map +1 -0
- package/dist/server/stream-renderer.d.ts +49 -0
- package/dist/server/stream-renderer.d.ts.map +1 -0
- package/dist/server/stream-renderer.js +89 -0
- package/dist/server/stream-renderer.js.map +1 -0
- package/dist/server/templates/health.routes.d.ts +22 -0
- package/dist/server/templates/health.routes.d.ts.map +1 -0
- package/dist/server/templates/health.routes.js +28 -0
- package/dist/server/templates/health.routes.js.map +1 -0
- package/dist/server/utils/storage-url.d.ts +36 -0
- package/dist/server/utils/storage-url.d.ts.map +1 -0
- package/dist/server/utils/storage-url.js +53 -0
- package/dist/server/utils/storage-url.js.map +1 -0
- package/dist/shared/utils/autoRoutes.d.ts +22 -0
- package/dist/shared/utils/autoRoutes.d.ts.map +1 -0
- package/dist/shared/utils/autoRoutes.js +29 -0
- package/dist/shared/utils/autoRoutes.js.map +1 -0
- package/dist/shared/utils/id.d.ts +25 -0
- package/dist/shared/utils/id.d.ts.map +1 -0
- package/dist/shared/utils/id.js +29 -0
- package/dist/shared/utils/id.js.map +1 -0
- package/dist/shared/utils/logger.d.ts +33 -0
- package/dist/shared/utils/logger.d.ts.map +1 -0
- package/dist/shared/utils/logger.js +65 -0
- package/dist/shared/utils/logger.js.map +1 -0
- package/dist/shared/utils/mappers.d.ts +23 -0
- package/dist/shared/utils/mappers.d.ts.map +1 -0
- package/dist/shared/utils/mappers.js +37 -0
- package/dist/shared/utils/mappers.js.map +1 -0
- package/dist/shared/utils/pagination.d.ts +26 -0
- package/dist/shared/utils/pagination.d.ts.map +1 -0
- package/dist/shared/utils/pagination.js +28 -0
- package/dist/shared/utils/pagination.js.map +1 -0
- package/dist/shared/utils/response.d.ts +38 -0
- package/dist/shared/utils/response.d.ts.map +1 -0
- package/dist/shared/utils/response.js +46 -0
- package/dist/shared/utils/response.js.map +1 -0
- package/dist/shared/utils/softDeletes.d.ts +90 -0
- package/dist/shared/utils/softDeletes.d.ts.map +1 -0
- package/dist/shared/utils/softDeletes.js +72 -0
- package/dist/shared/utils/softDeletes.js.map +1 -0
- package/dist/types/index.d.ts +191 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/types/index.js +12 -0
- package/dist/types/index.js.map +1 -0
- package/dist/vite/index.d.ts +30 -0
- package/dist/vite/index.d.ts.map +1 -0
- package/dist/vite/index.js +218 -0
- package/dist/vite/index.js.map +1 -0
- package/package.json +77 -0
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* ──────────────────────────────────────────────────────────────────
|
|
3
|
+
* 🏢 Company Name: Bonifade Technologies
|
|
4
|
+
* 👨💻 Developer: Bowofade Oyerinde
|
|
5
|
+
* 🐙 GitHub: oyenet1
|
|
6
|
+
* 📅 Created Date: 2026-04-05
|
|
7
|
+
* 🔄 Updated Date: 2026-04-05
|
|
8
|
+
* ──────────────────────────────────────────────────────────────────
|
|
9
|
+
*/
|
|
10
|
+
import { Logger } from '../shared/utils/logger.js';
|
|
11
|
+
// ─── applyModulesToViteConfig ────────────────────────────────────────
|
|
12
|
+
/**
|
|
13
|
+
* applyModulesToViteConfig — merges module schemas, routes,
|
|
14
|
+
* auto-imports, and pages into the Vite config at build time.
|
|
15
|
+
*
|
|
16
|
+
* Called by the Vono Vite plugin when building the project.
|
|
17
|
+
*
|
|
18
|
+
* @param modules — registered VonoModuleDefinition array
|
|
19
|
+
* @param config — existing Vite UserConfig to merge into
|
|
20
|
+
* @returns merged Vite config
|
|
21
|
+
*/
|
|
22
|
+
export function applyModulesToViteConfig(modules, config) {
|
|
23
|
+
const merged = { ...config };
|
|
24
|
+
// Collect all server-side auto-imports from modules
|
|
25
|
+
const serverImports = [];
|
|
26
|
+
const clientImports = [];
|
|
27
|
+
for (const module of modules) {
|
|
28
|
+
if (module.serverImports?.length) {
|
|
29
|
+
serverImports.push(...module.serverImports);
|
|
30
|
+
Logger.info(`[vono] Merging server imports from module: ${module.name}`);
|
|
31
|
+
}
|
|
32
|
+
if (module.clientImports?.length) {
|
|
33
|
+
clientImports.push(...module.clientImports);
|
|
34
|
+
Logger.info(`[vono] Merging client imports from module: ${module.name}`);
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
// Merge into Vite config via the resolve.alias or plugin options
|
|
38
|
+
// The actual unplugin-auto-import config is handled by the Vono Vite plugin;
|
|
39
|
+
// here we attach the collected imports as metadata for the plugin to consume.
|
|
40
|
+
if (serverImports.length > 0 || clientImports.length > 0) {
|
|
41
|
+
merged.define = {
|
|
42
|
+
...merged.define,
|
|
43
|
+
'__VONO_MODULE_SERVER_IMPORTS__': JSON.stringify(serverImports),
|
|
44
|
+
'__VONO_MODULE_CLIENT_IMPORTS__': JSON.stringify(clientImports),
|
|
45
|
+
};
|
|
46
|
+
}
|
|
47
|
+
// Collect page routes from modules
|
|
48
|
+
const modulePages = modules.flatMap((m) => m.pages ?? []);
|
|
49
|
+
if (modulePages.length > 0) {
|
|
50
|
+
merged.define = {
|
|
51
|
+
...merged.define,
|
|
52
|
+
'__VONO_MODULE_PAGES__': JSON.stringify(modulePages),
|
|
53
|
+
};
|
|
54
|
+
Logger.info(`[vono] Registered ${modulePages.length} page(s) from modules`);
|
|
55
|
+
}
|
|
56
|
+
// Collect API routes from modules
|
|
57
|
+
const moduleRoutes = modules.flatMap((m) => m.routes ?? []);
|
|
58
|
+
if (moduleRoutes.length > 0) {
|
|
59
|
+
merged.define = {
|
|
60
|
+
...merged.define,
|
|
61
|
+
'__VONO_MODULE_ROUTES__': JSON.stringify(moduleRoutes),
|
|
62
|
+
};
|
|
63
|
+
Logger.info(`[vono] Registered ${moduleRoutes.length} route(s) from modules`);
|
|
64
|
+
}
|
|
65
|
+
return merged;
|
|
66
|
+
}
|
|
67
|
+
//# sourceMappingURL=vite-integration.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"vite-integration.js","sourceRoot":"","sources":["../../src/module-system/vite-integration.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAIH,OAAO,EAAE,MAAM,EAAE,MAAM,2BAA2B,CAAA;AAElD,wEAAwE;AAExE;;;;;;;;;GASG;AACH,MAAM,UAAU,wBAAwB,CACtC,OAA+B,EAC/B,MAAkB;IAElB,MAAM,MAAM,GAAe,EAAE,GAAG,MAAM,EAAE,CAAA;IAExC,oDAAoD;IACpD,MAAM,aAAa,GAA+C,EAAE,CAAA;IACpE,MAAM,aAAa,GAA+C,EAAE,CAAA;IAEpE,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE,CAAC;QAC7B,IAAI,MAAM,CAAC,aAAa,EAAE,MAAM,EAAE,CAAC;YACjC,aAAa,CAAC,IAAI,CAAC,GAAG,MAAM,CAAC,aAAa,CAAC,CAAA;YAC3C,MAAM,CAAC,IAAI,CAAC,8CAA8C,MAAM,CAAC,IAAI,EAAE,CAAC,CAAA;QAC1E,CAAC;QAED,IAAI,MAAM,CAAC,aAAa,EAAE,MAAM,EAAE,CAAC;YACjC,aAAa,CAAC,IAAI,CAAC,GAAG,MAAM,CAAC,aAAa,CAAC,CAAA;YAC3C,MAAM,CAAC,IAAI,CAAC,8CAA8C,MAAM,CAAC,IAAI,EAAE,CAAC,CAAA;QAC1E,CAAC;IACH,CAAC;IAED,iEAAiE;IACjE,6EAA6E;IAC7E,8EAA8E;IAC9E,IAAI,aAAa,CAAC,MAAM,GAAG,CAAC,IAAI,aAAa,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACzD,MAAM,CAAC,MAAM,GAAG;YACd,GAAG,MAAM,CAAC,MAAM;YAChB,gCAAgC,EAAE,IAAI,CAAC,SAAS,CAAC,aAAa,CAAC;YAC/D,gCAAgC,EAAE,IAAI,CAAC,SAAS,CAAC,aAAa,CAAC;SAChE,CAAA;IACH,CAAC;IAED,mCAAmC;IACnC,MAAM,WAAW,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,IAAI,EAAE,CAAC,CAAA;IACzD,IAAI,WAAW,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC3B,MAAM,CAAC,MAAM,GAAG;YACd,GAAG,MAAM,CAAC,MAAM;YAChB,uBAAuB,EAAE,IAAI,CAAC,SAAS,CAAC,WAAW,CAAC;SACrD,CAAA;QACD,MAAM,CAAC,IAAI,CAAC,qBAAqB,WAAW,CAAC,MAAM,uBAAuB,CAAC,CAAA;IAC7E,CAAC;IAED,kCAAkC;IAClC,MAAM,YAAY,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,IAAI,EAAE,CAAC,CAAA;IAC3D,IAAI,YAAY,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC5B,MAAM,CAAC,MAAM,GAAG;YACd,GAAG,MAAM,CAAC,MAAM;YAChB,wBAAwB,EAAE,IAAI,CAAC,SAAS,CAAC,YAAY,CAAC;SACvD,CAAA;QACD,MAAM,CAAC,IAAI,CAAC,qBAAqB,YAAY,CAAC,MAAM,wBAAwB,CAAC,CAAA;IAC/E,CAAC;IAED,OAAO,MAAM,CAAA;AACf,CAAC"}
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* ──────────────────────────────────────────────────────────────────
|
|
3
|
+
* 🏢 Company Name: Bonifade Technologies
|
|
4
|
+
* 👨💻 Developer: Bowofade Oyerinde
|
|
5
|
+
* 🐙 GitHub: oyenet1
|
|
6
|
+
* 📅 Created Date: 2026-04-05
|
|
7
|
+
* 🔄 Updated Date: 2026-04-05
|
|
8
|
+
* ──────────────────────────────────────────────────────────────────
|
|
9
|
+
*/
|
|
10
|
+
import { Hono } from 'hono';
|
|
11
|
+
import type { VonoConfig, AppVariables, Env } from '../types/index.js';
|
|
12
|
+
export interface VonoAppOptions {
|
|
13
|
+
/**
|
|
14
|
+
* The resolved vono.config.ts object.
|
|
15
|
+
* Pass the result of defineVonoConfig() here.
|
|
16
|
+
*/
|
|
17
|
+
config: VonoConfig;
|
|
18
|
+
/**
|
|
19
|
+
* Optional OpenAPI spec object.
|
|
20
|
+
* If provided, GET /openapi.json will serve it.
|
|
21
|
+
*/
|
|
22
|
+
openApiSpec?: Record<string, unknown>;
|
|
23
|
+
}
|
|
24
|
+
/**
|
|
25
|
+
* createVonoApp — two-layer Hono app factory.
|
|
26
|
+
*
|
|
27
|
+
* Layer 1 (outer): global middleware (logger, prettyJSON, CORS),
|
|
28
|
+
* health check, robots.txt, sitemap.xml, API docs endpoints.
|
|
29
|
+
*
|
|
30
|
+
* Layer 2 (inner): versioned API router at /api/v1 with
|
|
31
|
+
* configProvider, dbProvider, and auto-registered module routes.
|
|
32
|
+
*
|
|
33
|
+
* Usage in your project's src/index.ts:
|
|
34
|
+
* ```ts
|
|
35
|
+
* import { createVonoApp } from 'vono/server'
|
|
36
|
+
* import config from '../vono.config.js'
|
|
37
|
+
* import openApiSpec from './openapi.js'
|
|
38
|
+
*
|
|
39
|
+
* const app = createVonoApp({ config, openApiSpec })
|
|
40
|
+
* export default app
|
|
41
|
+
* ```
|
|
42
|
+
*/
|
|
43
|
+
export declare function createVonoApp(options: VonoAppOptions): Hono<{
|
|
44
|
+
Variables: AppVariables;
|
|
45
|
+
Bindings: Env;
|
|
46
|
+
}>;
|
|
47
|
+
//# sourceMappingURL=app-template.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"app-template.d.ts","sourceRoot":"","sources":["../../src/server/app-template.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAA;AAQ3B,OAAO,KAAK,EAAE,UAAU,EAAE,YAAY,EAAE,GAAG,EAAE,MAAM,mBAAmB,CAAA;AAItE,MAAM,WAAW,cAAc;IAC7B;;;OAGG;IACH,MAAM,EAAE,UAAU,CAAA;IAElB;;;OAGG;IACH,WAAW,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;CACtC;AAID;;;;;;;;;;;;;;;;;;GAkBG;AACH,wBAAgB,aAAa,CAAC,OAAO,EAAE,cAAc,GAAG,IAAI,CAAC;IAAE,SAAS,EAAE,YAAY,CAAC;IAAC,QAAQ,EAAE,GAAG,CAAA;CAAE,CAAC,CAkFvG"}
|
|
@@ -0,0 +1,224 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* ──────────────────────────────────────────────────────────────────
|
|
3
|
+
* 🏢 Company Name: Bonifade Technologies
|
|
4
|
+
* 👨💻 Developer: Bowofade Oyerinde
|
|
5
|
+
* 🐙 GitHub: oyenet1
|
|
6
|
+
* 📅 Created Date: 2026-04-05
|
|
7
|
+
* 🔄 Updated Date: 2026-04-05
|
|
8
|
+
* ──────────────────────────────────────────────────────────────────
|
|
9
|
+
*/
|
|
10
|
+
import { Hono } from 'hono';
|
|
11
|
+
import { logger as honoLogger } from 'hono/logger';
|
|
12
|
+
import { prettyJSON } from 'hono/pretty-json';
|
|
13
|
+
import { cors } from 'hono/cors';
|
|
14
|
+
import { configProvider } from './middleware/configProvider.js';
|
|
15
|
+
import { dbProvider } from './middleware/dbProvider.js';
|
|
16
|
+
import { autoRegisterRoutes } from '../shared/utils/autoRoutes.js';
|
|
17
|
+
import { Logger } from '../shared/utils/logger.js';
|
|
18
|
+
// ─── Factory ────────────────────────────────────────────────────────
|
|
19
|
+
/**
|
|
20
|
+
* createVonoApp — two-layer Hono app factory.
|
|
21
|
+
*
|
|
22
|
+
* Layer 1 (outer): global middleware (logger, prettyJSON, CORS),
|
|
23
|
+
* health check, robots.txt, sitemap.xml, API docs endpoints.
|
|
24
|
+
*
|
|
25
|
+
* Layer 2 (inner): versioned API router at /api/v1 with
|
|
26
|
+
* configProvider, dbProvider, and auto-registered module routes.
|
|
27
|
+
*
|
|
28
|
+
* Usage in your project's src/index.ts:
|
|
29
|
+
* ```ts
|
|
30
|
+
* import { createVonoApp } from 'vono/server'
|
|
31
|
+
* import config from '../vono.config.js'
|
|
32
|
+
* import openApiSpec from './openapi.js'
|
|
33
|
+
*
|
|
34
|
+
* const app = createVonoApp({ config, openApiSpec })
|
|
35
|
+
* export default app
|
|
36
|
+
* ```
|
|
37
|
+
*/
|
|
38
|
+
export function createVonoApp(options) {
|
|
39
|
+
const { config, openApiSpec } = options;
|
|
40
|
+
// ── Outer app ────────────────────────────────────────────────────
|
|
41
|
+
const app = new Hono();
|
|
42
|
+
// ── Global middleware ────────────────────────────────────────────
|
|
43
|
+
// Structured request logging via Hono's built-in logger
|
|
44
|
+
app.use('*', honoLogger((message) => {
|
|
45
|
+
Logger.info(message);
|
|
46
|
+
}));
|
|
47
|
+
// Pretty-print JSON in development
|
|
48
|
+
if (config.app.env !== 'production') {
|
|
49
|
+
app.use('*', prettyJSON());
|
|
50
|
+
}
|
|
51
|
+
// ── CORS ─────────────────────────────────────────────────────────
|
|
52
|
+
app.use('*', buildCorsMiddleware(config));
|
|
53
|
+
// ── Outer health check (GET /) ───────────────────────────────────
|
|
54
|
+
app.get('/', (c) => {
|
|
55
|
+
return c.json({
|
|
56
|
+
success: true,
|
|
57
|
+
message: `${config.app.name} API is running`,
|
|
58
|
+
timestamp: new Date().toISOString(),
|
|
59
|
+
});
|
|
60
|
+
});
|
|
61
|
+
// ── robots.txt ───────────────────────────────────────────────────
|
|
62
|
+
app.get('/robots.txt', (c) => {
|
|
63
|
+
const appUrl = config.app.url ?? '';
|
|
64
|
+
const body = [
|
|
65
|
+
'User-agent: *',
|
|
66
|
+
'Disallow: /dashboard',
|
|
67
|
+
'Disallow: /admin',
|
|
68
|
+
'Disallow: /settings',
|
|
69
|
+
'Disallow: /api',
|
|
70
|
+
'',
|
|
71
|
+
`Sitemap: ${appUrl}/sitemap.xml`,
|
|
72
|
+
].join('\n');
|
|
73
|
+
return c.text(body, 200, { 'Content-Type': 'text/plain' });
|
|
74
|
+
});
|
|
75
|
+
// ── sitemap.xml ──────────────────────────────────────────────────
|
|
76
|
+
app.get('/sitemap.xml', (c) => {
|
|
77
|
+
const appUrl = config.app.url ?? '';
|
|
78
|
+
const xml = [
|
|
79
|
+
'<?xml version="1.0" encoding="UTF-8"?>',
|
|
80
|
+
'<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">',
|
|
81
|
+
` <url><loc>${appUrl}/</loc></url>`,
|
|
82
|
+
'</urlset>',
|
|
83
|
+
].join('\n');
|
|
84
|
+
return c.text(xml, 200, { 'Content-Type': 'application/xml' });
|
|
85
|
+
});
|
|
86
|
+
// ── API docs endpoints ───────────────────────────────────────────
|
|
87
|
+
if (config.docs) {
|
|
88
|
+
mountDocEndpoints(app, config, openApiSpec);
|
|
89
|
+
}
|
|
90
|
+
// ── Inner API router (Layer 2) ───────────────────────────────────
|
|
91
|
+
const api = new Hono();
|
|
92
|
+
// Apply per-request middleware on the inner router
|
|
93
|
+
api.use('*', configProvider);
|
|
94
|
+
api.use('*', dbProvider);
|
|
95
|
+
// Auto-discover and mount all *.routes.ts files from src/modules/
|
|
96
|
+
autoRegisterRoutes(api).catch((err) => {
|
|
97
|
+
Logger.error('[vono] autoRegisterRoutes failed', { error: String(err) });
|
|
98
|
+
});
|
|
99
|
+
// Mount inner router at /api/v1
|
|
100
|
+
app.route('/api/v1', api);
|
|
101
|
+
Logger.info(`[vono] App created — ${config.app.name} (${config.app.env})`);
|
|
102
|
+
return app;
|
|
103
|
+
}
|
|
104
|
+
// ─── CORS helper ────────────────────────────────────────────────────
|
|
105
|
+
/**
|
|
106
|
+
* Build CORS middleware from vono.config.ts + ALLOWED_ORIGINS env var.
|
|
107
|
+
*
|
|
108
|
+
* Priority:
|
|
109
|
+
* 1. config.cors.origins (explicit list in vono.config.ts)
|
|
110
|
+
* 2. ALLOWED_ORIGINS env var (comma-separated)
|
|
111
|
+
* 3. Dev auto-allow: localhost:4000 and localhost:5173
|
|
112
|
+
*/
|
|
113
|
+
function buildCorsMiddleware(config) {
|
|
114
|
+
const isDev = config.app.env !== 'production';
|
|
115
|
+
// Collect allowed origins
|
|
116
|
+
const configOrigins = config.cors?.origins ?? [];
|
|
117
|
+
const envOrigins = (() => {
|
|
118
|
+
const raw = (typeof process !== 'undefined' ? process.env['ALLOWED_ORIGINS'] : undefined) ?? '';
|
|
119
|
+
return raw
|
|
120
|
+
.split(',')
|
|
121
|
+
.map((o) => o.trim())
|
|
122
|
+
.filter(Boolean);
|
|
123
|
+
})();
|
|
124
|
+
const devOrigins = isDev ? ['http://localhost:4000', 'http://localhost:5173'] : [];
|
|
125
|
+
const allOrigins = [...new Set([...configOrigins, ...envOrigins, ...devOrigins])];
|
|
126
|
+
return cors({
|
|
127
|
+
origin: allOrigins.length > 0 ? allOrigins : '*',
|
|
128
|
+
allowHeaders: config.cors?.allowHeaders ?? ['Content-Type', 'Authorization'],
|
|
129
|
+
allowMethods: config.cors?.allowMethods ?? ['GET', 'POST', 'PUT', 'PATCH', 'DELETE', 'OPTIONS'],
|
|
130
|
+
credentials: config.cors?.credentials ?? true,
|
|
131
|
+
});
|
|
132
|
+
}
|
|
133
|
+
// ─── API docs helper ─────────────────────────────────────────────────
|
|
134
|
+
/**
|
|
135
|
+
* Mount API documentation endpoints:
|
|
136
|
+
* GET /openapi.json — raw OpenAPI 3.1 spec
|
|
137
|
+
* GET /docs — Swagger UI
|
|
138
|
+
* GET /reference — Scalar API reference
|
|
139
|
+
* GET /fp/* — Fiberplane dev tools
|
|
140
|
+
*/
|
|
141
|
+
function mountDocEndpoints(app, config, openApiSpec) {
|
|
142
|
+
const docsConfig = config.docs;
|
|
143
|
+
// ── GET /openapi.json ────────────────────────────────────────────
|
|
144
|
+
app.get('/openapi.json', (c) => {
|
|
145
|
+
if (openApiSpec) {
|
|
146
|
+
return c.json(openApiSpec);
|
|
147
|
+
}
|
|
148
|
+
// Fallback: minimal spec
|
|
149
|
+
return c.json({
|
|
150
|
+
openapi: '3.1.0',
|
|
151
|
+
info: { title: config.app.name, version: '1.0.0' },
|
|
152
|
+
paths: {},
|
|
153
|
+
});
|
|
154
|
+
});
|
|
155
|
+
// ── GET /docs (Swagger UI) ───────────────────────────────────────
|
|
156
|
+
if (docsConfig.swagger) {
|
|
157
|
+
app.get('/docs', (c) => {
|
|
158
|
+
const html = buildSwaggerHtml(docsConfig.openapi ?? '/openapi.json');
|
|
159
|
+
return c.html(html);
|
|
160
|
+
});
|
|
161
|
+
}
|
|
162
|
+
// ── GET /reference (Scalar) ──────────────────────────────────────
|
|
163
|
+
if (docsConfig.scalar) {
|
|
164
|
+
app.get('/reference', (c) => {
|
|
165
|
+
const html = buildScalarHtml(docsConfig.openapi ?? '/openapi.json', config.app.name);
|
|
166
|
+
return c.html(html);
|
|
167
|
+
});
|
|
168
|
+
}
|
|
169
|
+
// ── GET /fp/* (Fiberplane) ───────────────────────────────────────
|
|
170
|
+
if (docsConfig.fiberplane) {
|
|
171
|
+
app.get('/fp/*', (c) => {
|
|
172
|
+
return c.json({
|
|
173
|
+
message: 'Fiberplane integration — mount @fiberplane/hono in your project',
|
|
174
|
+
docs: 'https://fiberplane.com/docs',
|
|
175
|
+
});
|
|
176
|
+
});
|
|
177
|
+
}
|
|
178
|
+
}
|
|
179
|
+
// ─── HTML builders ───────────────────────────────────────────────────
|
|
180
|
+
function buildSwaggerHtml(specUrl) {
|
|
181
|
+
// Use pinned CDN versions with SRI for security
|
|
182
|
+
return `<!DOCTYPE html>
|
|
183
|
+
<html lang="en">
|
|
184
|
+
<head>
|
|
185
|
+
<meta charset="UTF-8" />
|
|
186
|
+
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
|
187
|
+
<meta http-equiv="Content-Security-Policy" content="default-src 'self'; script-src 'self' https://unpkg.com 'unsafe-inline'; style-src 'self' https://unpkg.com 'unsafe-inline'; img-src 'self' data: https:; connect-src 'self'">
|
|
188
|
+
<title>API Docs — Swagger UI</title>
|
|
189
|
+
<link rel="stylesheet" href="https://unpkg.com/swagger-ui-dist@5/swagger-ui.css" />
|
|
190
|
+
</head>
|
|
191
|
+
<body>
|
|
192
|
+
<div id="swagger-ui"></div>
|
|
193
|
+
<script src="https://unpkg.com/swagger-ui-dist@5/swagger-ui-bundle.js"></script>
|
|
194
|
+
<script>
|
|
195
|
+
SwaggerUIBundle({
|
|
196
|
+
url: ${JSON.stringify(specUrl)},
|
|
197
|
+
dom_id: '#swagger-ui',
|
|
198
|
+
presets: [SwaggerUIBundle.presets.apis, SwaggerUIBundle.SwaggerUIStandalonePreset],
|
|
199
|
+
layout: 'BaseLayout',
|
|
200
|
+
})
|
|
201
|
+
</script>
|
|
202
|
+
</body>
|
|
203
|
+
</html>`;
|
|
204
|
+
}
|
|
205
|
+
function buildScalarHtml(specUrl, title) {
|
|
206
|
+
// Escape title to prevent XSS
|
|
207
|
+
const safeTitle = title.replace(/[<>&"']/g, (c) => ({ '<': '<', '>': '>', '&': '&', '"': '"', "'": ''' }[c] ?? c));
|
|
208
|
+
return `<!DOCTYPE html>
|
|
209
|
+
<html lang="en">
|
|
210
|
+
<head>
|
|
211
|
+
<meta charset="UTF-8" />
|
|
212
|
+
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
|
213
|
+
<meta http-equiv="Content-Security-Policy" content="default-src 'self'; script-src 'self' https://cdn.jsdelivr.net 'unsafe-inline'; style-src 'self' 'unsafe-inline'; connect-src 'self'">
|
|
214
|
+
<title>${safeTitle} — API Reference</title>
|
|
215
|
+
</head>
|
|
216
|
+
<body>
|
|
217
|
+
<script
|
|
218
|
+
id="api-reference"
|
|
219
|
+
data-url="${specUrl}"
|
|
220
|
+
src="https://cdn.jsdelivr.net/npm/@scalar/api-reference@latest/dist/browser/standalone.min.js"></script>
|
|
221
|
+
</body>
|
|
222
|
+
</html>`;
|
|
223
|
+
}
|
|
224
|
+
//# sourceMappingURL=app-template.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"app-template.js","sourceRoot":"","sources":["../../src/server/app-template.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* ──────────────────────────────────────────────────────────────────
|
|
3
|
+
* 🏢 Company Name: Bonifade Technologies
|
|
4
|
+
* 👨💻 Developer: Bowofade Oyerinde
|
|
5
|
+
* 🐙 GitHub: oyenet1
|
|
6
|
+
* 📅 Created Date: 2026-04-05
|
|
7
|
+
* 🔄 Updated Date: 2026-04-05
|
|
8
|
+
* ──────────────────────────────────────────────────────────────────
|
|
9
|
+
*/
|
|
10
|
+
import type { AuthAccount, AppVariables } from '../../types/index.js';
|
|
11
|
+
/** A gate handler receives the user and returns true if permitted */
|
|
12
|
+
export type GateHandler = (user: AuthAccount) => boolean | Promise<boolean>;
|
|
13
|
+
/** A policy handler receives the user and the resource */
|
|
14
|
+
export type PolicyHandler<T = unknown> = (user: AuthAccount, resource: T) => boolean | Promise<boolean>;
|
|
15
|
+
/**
|
|
16
|
+
* Register a gate for a named ability.
|
|
17
|
+
*
|
|
18
|
+
* @example
|
|
19
|
+
* registerGate('publish-post', (user) => user.currentRole === 'admin')
|
|
20
|
+
*/
|
|
21
|
+
export declare function registerGate(ability: string, handler: GateHandler): void;
|
|
22
|
+
/**
|
|
23
|
+
* Register a policy for a resource type and ability.
|
|
24
|
+
* The key is `resourceType:ability`.
|
|
25
|
+
*
|
|
26
|
+
* @example
|
|
27
|
+
* registerPolicy('post:update', (user, post) => post.authorId === user.id)
|
|
28
|
+
*/
|
|
29
|
+
export declare function registerPolicy<T = unknown>(resourceType: string, handler: PolicyHandler<T>): void;
|
|
30
|
+
/**
|
|
31
|
+
* Check a gate — returns true/false without throwing.
|
|
32
|
+
*/
|
|
33
|
+
export declare function checkGate(user: AuthAccount, ability: string): Promise<boolean>;
|
|
34
|
+
/**
|
|
35
|
+
* Check a policy — returns true/false without throwing.
|
|
36
|
+
*/
|
|
37
|
+
export declare function checkPolicy(user: AuthAccount, ability: string, resource: unknown): Promise<boolean>;
|
|
38
|
+
/**
|
|
39
|
+
* `can(user, ability, resource?)` — returns boolean, never throws.
|
|
40
|
+
*
|
|
41
|
+
* When a resource is provided, checks the policy registry.
|
|
42
|
+
* Otherwise checks the gate registry.
|
|
43
|
+
*/
|
|
44
|
+
export declare function can(user: AuthAccount, ability: string, resource?: unknown): Promise<boolean>;
|
|
45
|
+
/**
|
|
46
|
+
* `authorize(user, ability, resource?)` — throws HTTP 403 if not permitted.
|
|
47
|
+
*
|
|
48
|
+
* @throws HTTPException 403
|
|
49
|
+
*/
|
|
50
|
+
export declare function authorize(user: AuthAccount, ability: string, resource?: unknown): Promise<void>;
|
|
51
|
+
/**
|
|
52
|
+
* `gate(ability)` — Hono middleware that calls `authorize(user, ability)`.
|
|
53
|
+
*
|
|
54
|
+
* Requires `authMiddleware` to have run first (sets c.var.account).
|
|
55
|
+
*
|
|
56
|
+
* @example
|
|
57
|
+
* router.delete('/posts/:id', gate('delete-post'), deletePostController)
|
|
58
|
+
*/
|
|
59
|
+
export declare function gate(ability: string): import("hono").MiddlewareHandler<{
|
|
60
|
+
Variables: AppVariables;
|
|
61
|
+
}, string, {}>;
|
|
62
|
+
/**
|
|
63
|
+
* `policy(ability)` — Hono middleware that calls `authorize(user, ability, resource)`.
|
|
64
|
+
*
|
|
65
|
+
* Reads the resource from `c.var.resource`. Set it in a preceding middleware:
|
|
66
|
+
* ```ts
|
|
67
|
+
* router.put('/posts/:id',
|
|
68
|
+
* loadResource('post', (c) => db.query.posts.findFirst({ where: eq(posts.id, c.req.param('id')) })),
|
|
69
|
+
* policy('post:update'),
|
|
70
|
+
* updatePostController,
|
|
71
|
+
* )
|
|
72
|
+
* ```
|
|
73
|
+
*/
|
|
74
|
+
export declare function policy(ability: string): import("hono").MiddlewareHandler<{
|
|
75
|
+
Variables: AppVariables & {
|
|
76
|
+
resource: unknown;
|
|
77
|
+
};
|
|
78
|
+
}, string, {}>;
|
|
79
|
+
//# sourceMappingURL=gates.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"gates.d.ts","sourceRoot":"","sources":["../../../src/server/auth/gates.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAIH,OAAO,KAAK,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAA;AAKrE,qEAAqE;AACrE,MAAM,MAAM,WAAW,GAAG,CAAC,IAAI,EAAE,WAAW,KAAK,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,CAAA;AAE3E,0DAA0D;AAC1D,MAAM,MAAM,aAAa,CAAC,CAAC,GAAG,OAAO,IAAI,CACvC,IAAI,EAAE,WAAW,EACjB,QAAQ,EAAE,CAAC,KACR,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,CAAA;AAO/B;;;;;GAKG;AACH,wBAAgB,YAAY,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,WAAW,GAAG,IAAI,CAExE;AAED;;;;;;GAMG;AACH,wBAAgB,cAAc,CAAC,CAAC,GAAG,OAAO,EACxC,YAAY,EAAE,MAAM,EACpB,OAAO,EAAE,aAAa,CAAC,CAAC,CAAC,GACxB,IAAI,CAEN;AAID;;GAEG;AACH,wBAAsB,SAAS,CAAC,IAAI,EAAE,WAAW,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAOpF;AAED;;GAEG;AACH,wBAAsB,WAAW,CAC/B,IAAI,EAAE,WAAW,EACjB,OAAO,EAAE,MAAM,EACf,QAAQ,EAAE,OAAO,GAChB,OAAO,CAAC,OAAO,CAAC,CAOlB;AAID;;;;;GAKG;AACH,wBAAsB,GAAG,CACvB,IAAI,EAAE,WAAW,EACjB,OAAO,EAAE,MAAM,EACf,QAAQ,CAAC,EAAE,OAAO,GACjB,OAAO,CAAC,OAAO,CAAC,CAKlB;AAED;;;;GAIG;AACH,wBAAsB,SAAS,CAC7B,IAAI,EAAE,WAAW,EACjB,OAAO,EAAE,MAAM,EACf,QAAQ,CAAC,EAAE,OAAO,GACjB,OAAO,CAAC,IAAI,CAAC,CAMf;AAID;;;;;;;GAOG;AACH,wBAAgB,IAAI,CAAC,OAAO,EAAE,MAAM;eACG,YAAY;eAQlD;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,MAAM,CAAC,OAAO,EAAE,MAAM;eACC,YAAY,GAAG;QAAE,QAAQ,EAAE,OAAO,CAAA;KAAE;eAW1E"}
|
|
@@ -0,0 +1,125 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* ──────────────────────────────────────────────────────────────────
|
|
3
|
+
* 🏢 Company Name: Bonifade Technologies
|
|
4
|
+
* 👨💻 Developer: Bowofade Oyerinde
|
|
5
|
+
* 🐙 GitHub: oyenet1
|
|
6
|
+
* 📅 Created Date: 2026-04-05
|
|
7
|
+
* 🔄 Updated Date: 2026-04-05
|
|
8
|
+
* ──────────────────────────────────────────────────────────────────
|
|
9
|
+
*/
|
|
10
|
+
import { HTTPException } from 'hono/http-exception';
|
|
11
|
+
import { createMiddleware } from 'hono/factory';
|
|
12
|
+
import { Logger } from '../../shared/utils/logger.js';
|
|
13
|
+
// ─── Registries ──────────────────────────────────────────────────────────────
|
|
14
|
+
const gateRegistry = new Map();
|
|
15
|
+
const policyRegistry = new Map();
|
|
16
|
+
/**
|
|
17
|
+
* Register a gate for a named ability.
|
|
18
|
+
*
|
|
19
|
+
* @example
|
|
20
|
+
* registerGate('publish-post', (user) => user.currentRole === 'admin')
|
|
21
|
+
*/
|
|
22
|
+
export function registerGate(ability, handler) {
|
|
23
|
+
gateRegistry.set(ability, handler);
|
|
24
|
+
}
|
|
25
|
+
/**
|
|
26
|
+
* Register a policy for a resource type and ability.
|
|
27
|
+
* The key is `resourceType:ability`.
|
|
28
|
+
*
|
|
29
|
+
* @example
|
|
30
|
+
* registerPolicy('post:update', (user, post) => post.authorId === user.id)
|
|
31
|
+
*/
|
|
32
|
+
export function registerPolicy(resourceType, handler) {
|
|
33
|
+
policyRegistry.set(resourceType, handler);
|
|
34
|
+
}
|
|
35
|
+
// ─── Core checks ─────────────────────────────────────────────────────────────
|
|
36
|
+
/**
|
|
37
|
+
* Check a gate — returns true/false without throwing.
|
|
38
|
+
*/
|
|
39
|
+
export async function checkGate(user, ability) {
|
|
40
|
+
const handler = gateRegistry.get(ability);
|
|
41
|
+
if (!handler) {
|
|
42
|
+
Logger.warn('[gates] No gate registered for ability', { ability });
|
|
43
|
+
return false;
|
|
44
|
+
}
|
|
45
|
+
return handler(user);
|
|
46
|
+
}
|
|
47
|
+
/**
|
|
48
|
+
* Check a policy — returns true/false without throwing.
|
|
49
|
+
*/
|
|
50
|
+
export async function checkPolicy(user, ability, resource) {
|
|
51
|
+
const handler = policyRegistry.get(ability);
|
|
52
|
+
if (!handler) {
|
|
53
|
+
Logger.warn('[gates] No policy registered for ability', { ability });
|
|
54
|
+
return false;
|
|
55
|
+
}
|
|
56
|
+
return handler(user, resource);
|
|
57
|
+
}
|
|
58
|
+
// ─── Public API ───────────────────────────────────────────────────────────────
|
|
59
|
+
/**
|
|
60
|
+
* `can(user, ability, resource?)` — returns boolean, never throws.
|
|
61
|
+
*
|
|
62
|
+
* When a resource is provided, checks the policy registry.
|
|
63
|
+
* Otherwise checks the gate registry.
|
|
64
|
+
*/
|
|
65
|
+
export async function can(user, ability, resource) {
|
|
66
|
+
if (resource !== undefined) {
|
|
67
|
+
return checkPolicy(user, ability, resource);
|
|
68
|
+
}
|
|
69
|
+
return checkGate(user, ability);
|
|
70
|
+
}
|
|
71
|
+
/**
|
|
72
|
+
* `authorize(user, ability, resource?)` — throws HTTP 403 if not permitted.
|
|
73
|
+
*
|
|
74
|
+
* @throws HTTPException 403
|
|
75
|
+
*/
|
|
76
|
+
export async function authorize(user, ability, resource) {
|
|
77
|
+
const permitted = await can(user, ability, resource);
|
|
78
|
+
if (!permitted) {
|
|
79
|
+
Logger.warn('[gates] Authorization denied', { userId: user.id, ability });
|
|
80
|
+
throw new HTTPException(403, { message: 'Forbidden: insufficient permissions' });
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
// ─── Middleware factories ─────────────────────────────────────────────────────
|
|
84
|
+
/**
|
|
85
|
+
* `gate(ability)` — Hono middleware that calls `authorize(user, ability)`.
|
|
86
|
+
*
|
|
87
|
+
* Requires `authMiddleware` to have run first (sets c.var.account).
|
|
88
|
+
*
|
|
89
|
+
* @example
|
|
90
|
+
* router.delete('/posts/:id', gate('delete-post'), deletePostController)
|
|
91
|
+
*/
|
|
92
|
+
export function gate(ability) {
|
|
93
|
+
return createMiddleware(async (c, next) => {
|
|
94
|
+
const user = c.var.account;
|
|
95
|
+
if (!user) {
|
|
96
|
+
throw new HTTPException(401, { message: 'Unauthorized: not authenticated' });
|
|
97
|
+
}
|
|
98
|
+
await authorize(user, ability);
|
|
99
|
+
await next();
|
|
100
|
+
});
|
|
101
|
+
}
|
|
102
|
+
/**
|
|
103
|
+
* `policy(ability)` — Hono middleware that calls `authorize(user, ability, resource)`.
|
|
104
|
+
*
|
|
105
|
+
* Reads the resource from `c.var.resource`. Set it in a preceding middleware:
|
|
106
|
+
* ```ts
|
|
107
|
+
* router.put('/posts/:id',
|
|
108
|
+
* loadResource('post', (c) => db.query.posts.findFirst({ where: eq(posts.id, c.req.param('id')) })),
|
|
109
|
+
* policy('post:update'),
|
|
110
|
+
* updatePostController,
|
|
111
|
+
* )
|
|
112
|
+
* ```
|
|
113
|
+
*/
|
|
114
|
+
export function policy(ability) {
|
|
115
|
+
return createMiddleware(async (c, next) => {
|
|
116
|
+
const user = c.var.account;
|
|
117
|
+
if (!user) {
|
|
118
|
+
throw new HTTPException(401, { message: 'Unauthorized: not authenticated' });
|
|
119
|
+
}
|
|
120
|
+
const resource = c.var.resource;
|
|
121
|
+
await authorize(user, ability, resource);
|
|
122
|
+
await next();
|
|
123
|
+
});
|
|
124
|
+
}
|
|
125
|
+
//# sourceMappingURL=gates.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"gates.js","sourceRoot":"","sources":["../../../src/server/auth/gates.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* ──────────────────────────────────────────────────────────────────
|
|
3
|
+
* 🏢 Company Name: Bonifade Technologies
|
|
4
|
+
* 👨💻 Developer: Bowofade Oyerinde
|
|
5
|
+
* 🐙 GitHub: oyenet1
|
|
6
|
+
* 📅 Created Date: 2026-04-05
|
|
7
|
+
* 🔄 Updated Date: 2026-04-05
|
|
8
|
+
* ──────────────────────────────────────────────────────────────────
|
|
9
|
+
*/
|
|
10
|
+
export { registerGate, registerPolicy, checkGate, checkPolicy, can, authorize, gate, policy, } from './gates.js';
|
|
11
|
+
export type { GateHandler, PolicyHandler } from './gates.js';
|
|
12
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/server/auth/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAGH,OAAO,EACL,YAAY,EACZ,cAAc,EACd,SAAS,EACT,WAAW,EACX,GAAG,EACH,SAAS,EACT,IAAI,EACJ,MAAM,GACP,MAAM,YAAY,CAAA;AACnB,YAAY,EAAE,WAAW,EAAE,aAAa,EAAE,MAAM,YAAY,CAAA"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* ──────────────────────────────────────────────────────────────────
|
|
3
|
+
* 🏢 Company Name: Bonifade Technologies
|
|
4
|
+
* 👨💻 Developer: Bowofade Oyerinde
|
|
5
|
+
* 🐙 GitHub: oyenet1
|
|
6
|
+
* 📅 Created Date: 2026-04-05
|
|
7
|
+
* 🔄 Updated Date: 2026-04-05
|
|
8
|
+
* ──────────────────────────────────────────────────────────────────
|
|
9
|
+
*/
|
|
10
|
+
// Authorization — Gates & Policies
|
|
11
|
+
export { registerGate, registerPolicy, checkGate, checkPolicy, can, authorize, gate, policy, } from './gates.js';
|
|
12
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/server/auth/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,mCAAmC;AACnC,OAAO,EACL,YAAY,EACZ,cAAc,EACd,SAAS,EACT,WAAW,EACX,GAAG,EACH,SAAS,EACT,IAAI,EACJ,MAAM,GACP,MAAM,YAAY,CAAA"}
|