bunderstack 0.16.0 → 0.17.0-beta.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/README.md +25 -138
- package/package.json +21 -14
- package/src/access.ts +6 -1
- package/src/api/api-types.types.ts +106 -0
- package/src/api/builder.ts +52 -0
- package/src/api/context.ts +83 -0
- package/src/api/crud-router.ts +321 -0
- package/src/api/openapi.ts +184 -0
- package/src/api/realtime-router.ts +75 -0
- package/src/api/registry.ts +338 -0
- package/src/api/router.ts +34 -0
- package/src/api/storage-router.ts +224 -0
- package/src/api/types.ts +84 -0
- package/src/auth.ts +5 -0
- package/src/blueprint.ts +88 -105
- package/src/config.ts +57 -39
- package/src/crud-operations.ts +488 -0
- package/src/dialect.ts +1 -1
- package/src/env.ts +19 -13
- package/src/errors.ts +90 -23
- package/src/handler.ts +16 -44
- package/src/index.ts +235 -246
- package/src/jobs/define.ts +8 -10
- package/src/jobs/queue.ts +6 -2
- package/src/jobs/worker.ts +4 -1
- package/src/manifest.ts +84 -87
- package/src/realtime/facade.ts +16 -13
- package/src/realtime/filter.ts +77 -0
- package/src/realtime/heartbeat.ts +80 -0
- package/src/realtime/publisher.ts +46 -0
- package/src/standard-schema.ts +59 -0
- package/src/storage/index.ts +8 -0
- package/src/storage/operations.ts +398 -0
- package/src/crud.ts +0 -400
- package/src/realtime/index.ts +0 -242
- package/src/realtime/redis.ts +0 -219
- package/src/routes.ts +0 -137
- package/src/storage/router.ts +0 -531
- package/src/trpc.ts +0 -57
package/src/handler.ts
CHANGED
|
@@ -1,58 +1,30 @@
|
|
|
1
1
|
// src/handler.ts
|
|
2
|
-
import { Hono } from 'hono'
|
|
3
|
-
|
|
4
2
|
import { createRateLimiter, type RateLimitConfig } from './rate-limit'
|
|
5
3
|
|
|
6
4
|
interface HandlerParts {
|
|
7
|
-
customRouter?: Hono
|
|
8
|
-
crudRouter: Hono
|
|
9
5
|
authHandler?: (req: Request) => Promise<Response>
|
|
10
|
-
|
|
11
|
-
realtimeRouter?: Hono
|
|
12
|
-
trpcHandler?: (req: Request) => Promise<Response>
|
|
6
|
+
apiHandler?: (req: Request) => Promise<Response | null>
|
|
13
7
|
rateLimit?: boolean | RateLimitConfig
|
|
14
8
|
}
|
|
15
9
|
|
|
16
|
-
export function buildHandler(parts: HandlerParts): {
|
|
17
|
-
handler: (req: Request) => Promise<Response>
|
|
18
|
-
router: Hono
|
|
19
|
-
} {
|
|
20
|
-
const app = new Hono()
|
|
10
|
+
export function buildHandler(parts: HandlerParts): (req: Request) => Promise<Response> {
|
|
21
11
|
const checkRateLimit = createRateLimiter(parts.rateLimit)
|
|
22
12
|
|
|
23
|
-
|
|
24
|
-
// core app. Collisions are rejected at construction, not silently shadowed.
|
|
25
|
-
if (parts.customRouter) app.route('/', parts.customRouter)
|
|
26
|
-
|
|
27
|
-
const health = (c: { json: (data: unknown) => Response }) =>
|
|
28
|
-
c.json({ status: 'ok' })
|
|
29
|
-
app.get('/health', health)
|
|
30
|
-
app.get('/api/health', health)
|
|
31
|
-
app.route('/api', parts.crudRouter)
|
|
32
|
-
|
|
33
|
-
if (parts.authHandler) {
|
|
34
|
-
app.all('/api/auth/*', (c) => parts.authHandler!(c.req.raw))
|
|
35
|
-
}
|
|
36
|
-
|
|
37
|
-
if (parts.storageRouter) {
|
|
38
|
-
app.route('/api/files', parts.storageRouter)
|
|
39
|
-
app.route('/files', parts.storageRouter)
|
|
40
|
-
}
|
|
41
|
-
|
|
42
|
-
if (parts.realtimeRouter) {
|
|
43
|
-
app.route('/api', parts.realtimeRouter)
|
|
44
|
-
}
|
|
45
|
-
|
|
46
|
-
if (parts.trpcHandler) {
|
|
47
|
-
app.all('/api/trpc/*', (c) => parts.trpcHandler!(c.req.raw))
|
|
48
|
-
}
|
|
49
|
-
|
|
50
|
-
const inner = (req: Request): Promise<Response> =>
|
|
51
|
-
Promise.resolve(app.fetch(req))
|
|
52
|
-
const handler = async (req: Request): Promise<Response> => {
|
|
13
|
+
return async (req: Request): Promise<Response> => {
|
|
53
14
|
const limited = await checkRateLimit(req)
|
|
54
15
|
if (limited) return limited
|
|
55
|
-
|
|
16
|
+
|
|
17
|
+
const pathname = new URL(req.url).pathname
|
|
18
|
+
if (
|
|
19
|
+
parts.authHandler &&
|
|
20
|
+
(pathname === '/api/auth' || pathname.startsWith('/api/auth/'))
|
|
21
|
+
) {
|
|
22
|
+
return parts.authHandler(req)
|
|
23
|
+
}
|
|
24
|
+
if (parts.apiHandler) {
|
|
25
|
+
const apiRes = await parts.apiHandler(req)
|
|
26
|
+
if (apiRes) return apiRes
|
|
27
|
+
}
|
|
28
|
+
return new Response('Not Found', { status: 404 })
|
|
56
29
|
}
|
|
57
|
-
return { handler, router: app }
|
|
58
30
|
}
|