@edge-base/server 0.2.9 → 0.3.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/admin-build/_app/immutable/chunks/{BfhqI0W8.js → BSIzoJ5I.js} +1 -1
- package/admin-build/_app/immutable/chunks/{CI1lKBjB.js → BeYswbvA.js} +1 -1
- package/admin-build/_app/immutable/chunks/{DncT8xH5.js → BkrC_6Ss.js} +1 -1
- package/admin-build/_app/immutable/chunks/{DBniE7GN.js → BunyH6GE.js} +1 -1
- package/admin-build/_app/immutable/chunks/{C5nMidnK.js → C-zXt-cq.js} +1 -1
- package/admin-build/_app/immutable/chunks/{CPLcjNR9.js → C1Mycuvd.js} +1 -1
- package/admin-build/_app/immutable/chunks/{0M5txo3l.js → Cek51lkE.js} +3 -3
- package/admin-build/_app/immutable/chunks/{_xa30BOD.js → D0mNYcxN.js} +1 -1
- package/admin-build/_app/immutable/chunks/D3hdqsfp.js +1 -0
- package/admin-build/_app/immutable/chunks/{39YMyjjq.js → DF40xjpj.js} +1 -1
- package/admin-build/_app/immutable/chunks/{YGUb3X-Q.js → DOOhHO-v.js} +1 -1
- package/admin-build/_app/immutable/chunks/DdjFeYwG.js +1 -0
- package/admin-build/_app/immutable/chunks/{DllVADtt.js → Dvlxm2Iq.js} +1 -1
- package/admin-build/_app/immutable/chunks/{BN-pHKcH.js → Xm1dHMTE.js} +1 -1
- package/admin-build/_app/immutable/chunks/{DUhE3Ynq.js → aPulNooa.js} +1 -1
- package/admin-build/_app/immutable/chunks/{DBkor_jM.js → dZsKGnWZ.js} +1 -1
- package/admin-build/_app/immutable/entry/{app.BW-Ac3jY.js → app.j1WHBlZX.js} +2 -2
- package/admin-build/_app/immutable/entry/start.BgMeGq-q.js +1 -0
- package/admin-build/_app/immutable/nodes/{0.CRSQPtos.js → 0.Oo7ZpbR-.js} +1 -1
- package/admin-build/_app/immutable/nodes/{1.HmStNbZP.js → 1.zgMnKHns.js} +1 -1
- package/admin-build/_app/immutable/nodes/{10.BVlz13nr.js → 10.u5mkRiUe.js} +1 -1
- package/admin-build/_app/immutable/nodes/{11.VwQdbWwH.js → 11.9ynAgaxV.js} +1 -1
- package/admin-build/_app/immutable/nodes/{12.BFAAgi1f.js → 12.M_EqzJ6s.js} +1 -1
- package/admin-build/_app/immutable/nodes/{13.DDdauC84.js → 13.D_NQ9q60.js} +1 -1
- package/admin-build/_app/immutable/nodes/{14.D_rXaafJ.js → 14.-vENIJ2w.js} +1 -1
- package/admin-build/_app/immutable/nodes/{15.rfFjjiZc.js → 15.DoMCZhGv.js} +1 -1
- package/admin-build/_app/immutable/nodes/{16.DDEpGJ4Z.js → 16.6BmnzScq.js} +1 -1
- package/admin-build/_app/immutable/nodes/{17.ChQWNtRN.js → 17.q6QQ9N_J.js} +1 -1
- package/admin-build/_app/immutable/nodes/{18.Rir_JwlF.js → 18.DUhJ6dKj.js} +1 -1
- package/admin-build/_app/immutable/nodes/{19.CF76nxk1.js → 19.CvkvPlGP.js} +1 -1
- package/admin-build/_app/immutable/nodes/{20.JQer3KPM.js → 20.cACSbRIl.js} +1 -1
- package/admin-build/_app/immutable/nodes/21.DZ7G8rMF.js +1 -0
- package/admin-build/_app/immutable/nodes/{22.DUw7X6z_.js → 22.BsQ6xeKr.js} +1 -1
- package/admin-build/_app/immutable/nodes/{23.DS3svA-a.js → 23.CNW3mLz5.js} +1 -1
- package/admin-build/_app/immutable/nodes/{24.BYOsQM6B.js → 24.CReqtEOy.js} +1 -1
- package/admin-build/_app/immutable/nodes/{25.n0pyDBRv.js → 25.BuxVhqlb.js} +1 -1
- package/admin-build/_app/immutable/nodes/{26.C-Oo8sYK.js → 26.C-LzPf62.js} +1 -1
- package/admin-build/_app/immutable/nodes/{27.BfxbFNkk.js → 27.Dl5RL_tB.js} +1 -1
- package/admin-build/_app/immutable/nodes/{28.DyHSN1q7.js → 28.CWfSQgjH.js} +1 -1
- package/admin-build/_app/immutable/nodes/{29.CUAmZbCc.js → 29.wUSfh2eQ.js} +1 -1
- package/admin-build/_app/immutable/nodes/{3.KQm4VJJg.js → 3.D_laBXeK.js} +1 -1
- package/admin-build/_app/immutable/nodes/{30.CQdPre5F.js → 30.DcMhZyQ0.js} +1 -1
- package/admin-build/_app/immutable/nodes/{31.BP6raetq.js → 31.CSwhNsNi.js} +1 -1
- package/admin-build/_app/immutable/nodes/{4.Glf2jJHB.js → 4.Cq28vPI2.js} +1 -1
- package/admin-build/_app/immutable/nodes/{5.BdFtj_-X.js → 5.BTT9B3oI.js} +1 -1
- package/admin-build/_app/immutable/nodes/{6.JfnwWq8s.js → 6.iCmmzXZp.js} +1 -1
- package/admin-build/_app/immutable/nodes/{7.C-rw9qDh.js → 7.qY5v7qqJ.js} +1 -1
- package/admin-build/_app/immutable/nodes/{8.CA7r1Sjs.js → 8.C6p4RvgK.js} +1 -1
- package/admin-build/_app/immutable/nodes/{9.B2jgJDkH.js → 9.f548N7zh.js} +1 -1
- package/admin-build/_app/version.json +1 -1
- package/admin-build/index.html +7 -7
- package/openapi.json +305 -3
- package/package.json +3 -3
- package/src/__tests__/auth-token.test.ts +142 -0
- package/src/__tests__/email-provider.test.ts +82 -0
- package/src/__tests__/functions-context.test.ts +87 -0
- package/src/__tests__/functions-d1-proxy.test.ts +70 -0
- package/src/__tests__/functions-route.test.ts +15 -0
- package/src/__tests__/room-access-policy.test.ts +26 -0
- package/src/__tests__/room-handler-context.test.ts +2 -0
- package/src/__tests__/smoke-skip-report.test.ts +1 -1
- package/src/durable-objects/room-runtime-base.ts +16 -5
- package/src/durable-objects/rooms-do.ts +4 -1
- package/src/lib/auth-d1-service.ts +37 -7
- package/src/lib/auth-token.ts +66 -0
- package/src/lib/email-provider.ts +115 -5
- package/src/lib/functions.ts +91 -1
- package/src/lib/internal-transport.ts +15 -1
- package/src/lib/jwt.ts +2 -0
- package/src/routes/admin.ts +8 -1
- package/src/routes/auth.ts +111 -19
- package/src/routes/room.ts +36 -2
- package/src/routes/storage.ts +446 -62
- package/src/types.ts +10 -0
- package/admin-build/_app/immutable/chunks/B0zJ5_Wk.js +0 -1
- package/admin-build/_app/immutable/chunks/DZo4s3wn.js +0 -1
- package/admin-build/_app/immutable/entry/start.Bcf0SjPV.js +0 -1
- package/admin-build/_app/immutable/nodes/21.CzGYxjpu.js +0 -1
package/src/routes/room.ts
CHANGED
|
@@ -12,11 +12,13 @@
|
|
|
12
12
|
* - KV counter with expirationTtl: 60s
|
|
13
13
|
*/
|
|
14
14
|
import { OpenAPIHono, createRoute, z, type HonoEnv } from '../lib/hono.js';
|
|
15
|
-
import type { RoomNamespaceConfig } from '@edge-base/shared';
|
|
15
|
+
import type { EdgeBaseConfig, RoomHandlerContext, RoomNamespaceConfig } from '@edge-base/shared';
|
|
16
16
|
import type { Context } from 'hono';
|
|
17
17
|
import { parseConfig } from '../lib/do-router.js';
|
|
18
|
+
import { buildFunctionContext } from '../lib/functions.js';
|
|
18
19
|
import { resolveRoomRuntime } from '../lib/room-runtime.js';
|
|
19
20
|
import { zodDefaultHook, jsonResponseSchema, errorResponseSchema } from '../lib/schemas.js';
|
|
21
|
+
import { resolveRootServiceKey } from '../lib/service-key.js';
|
|
20
22
|
import {
|
|
21
23
|
acquirePendingWebSocketSlot,
|
|
22
24
|
getPendingWebSocketCount,
|
|
@@ -111,6 +113,33 @@ function getRoomAuthContext(
|
|
|
111
113
|
};
|
|
112
114
|
}
|
|
113
115
|
|
|
116
|
+
function buildRoomRouteAccessContext(
|
|
117
|
+
c: Context<HonoEnv>,
|
|
118
|
+
config: EdgeBaseConfig,
|
|
119
|
+
): RoomHandlerContext {
|
|
120
|
+
let executionCtx: ExecutionContext | undefined;
|
|
121
|
+
try {
|
|
122
|
+
executionCtx = c.executionCtx;
|
|
123
|
+
} catch {
|
|
124
|
+
executionCtx = undefined;
|
|
125
|
+
}
|
|
126
|
+
const ctx = buildFunctionContext({
|
|
127
|
+
request: c.req.raw,
|
|
128
|
+
auth: getRoomAuthContext(c.get('auth') as never),
|
|
129
|
+
databaseNamespace: c.env.DATABASE,
|
|
130
|
+
authNamespace: c.env.AUTH,
|
|
131
|
+
d1Database: c.env.AUTH_DB,
|
|
132
|
+
kvNamespace: c.env.KV,
|
|
133
|
+
config,
|
|
134
|
+
env: c.env,
|
|
135
|
+
executionCtx,
|
|
136
|
+
serviceKey: resolveRootServiceKey(config, c.env),
|
|
137
|
+
});
|
|
138
|
+
return {
|
|
139
|
+
admin: ctx.admin as never,
|
|
140
|
+
};
|
|
141
|
+
}
|
|
142
|
+
|
|
114
143
|
export async function proxyRoomDoRequest(
|
|
115
144
|
c: Context<HonoEnv>,
|
|
116
145
|
path: string,
|
|
@@ -433,9 +462,11 @@ roomRoute.openapi(getRoomMetadata, async (c) => {
|
|
|
433
462
|
}
|
|
434
463
|
if (metadataAccess) {
|
|
435
464
|
const auth = (c.get('auth') as { id?: string; role?: string; email?: string | null; custom?: Record<string, unknown> | null; isAnonymous?: boolean; meta?: Record<string, unknown> } | null | undefined) ?? null;
|
|
465
|
+
const accessCtx = buildRoomRouteAccessContext(c, config);
|
|
436
466
|
const allowed = await Promise.resolve(metadataAccess(
|
|
437
467
|
getRoomAuthContext(auth),
|
|
438
468
|
roomId,
|
|
469
|
+
accessCtx,
|
|
439
470
|
)).catch(() => false);
|
|
440
471
|
if (!allowed) {
|
|
441
472
|
return c.json({ code: 403, message: 'Denied by room metadata access rule' }, 403);
|
|
@@ -493,9 +524,11 @@ roomRoute.openapi(getRoomSummary, async (c) => {
|
|
|
493
524
|
}
|
|
494
525
|
if (metadataAccess) {
|
|
495
526
|
const auth = (c.get('auth') as { id?: string; role?: string; email?: string | null; custom?: Record<string, unknown> | null; isAnonymous?: boolean; meta?: Record<string, unknown> } | null | undefined) ?? null;
|
|
527
|
+
const accessCtx = buildRoomRouteAccessContext(c, config);
|
|
496
528
|
const allowed = await Promise.resolve(metadataAccess(
|
|
497
529
|
getRoomAuthContext(auth),
|
|
498
530
|
roomId,
|
|
531
|
+
accessCtx,
|
|
499
532
|
)).catch(() => false);
|
|
500
533
|
if (!allowed) {
|
|
501
534
|
return c.json({ code: 403, message: 'Denied by room metadata access rule' }, 403);
|
|
@@ -557,8 +590,9 @@ roomRoute.openapi(getRoomSummaries, async (c) => {
|
|
|
557
590
|
const deniedIds: string[] = [];
|
|
558
591
|
|
|
559
592
|
if (metadataAccess) {
|
|
593
|
+
const accessCtx = buildRoomRouteAccessContext(c, config);
|
|
560
594
|
for (const roomId of roomIds) {
|
|
561
|
-
const allowed = await Promise.resolve(metadataAccess(authContext, roomId)).catch(() => false);
|
|
595
|
+
const allowed = await Promise.resolve(metadataAccess(authContext, roomId, accessCtx)).catch(() => false);
|
|
562
596
|
if (allowed) {
|
|
563
597
|
allowedRoomIds.push(roomId);
|
|
564
598
|
} else {
|