@edge-base/server 0.2.5 → 0.2.6
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/{DILS_-VJ.js → B3CvhH3c.js} +1 -1
- package/admin-build/_app/immutable/chunks/BN_-k-Ck.js +1 -0
- package/admin-build/_app/immutable/chunks/{Dt4vL4Df.js → BYL_uBga.js} +1 -1
- package/admin-build/_app/immutable/chunks/{C72lTcG0.js → Bcs4KYNp.js} +1 -1
- package/admin-build/_app/immutable/chunks/{B8s_s9QY.js → BkZCgsc3.js} +1 -1
- package/admin-build/_app/immutable/chunks/{D2j3I1VQ.js → BvoGcDFV.js} +1 -1
- package/admin-build/_app/immutable/chunks/{B2TnDKF7.js → CCUxCptE.js} +1 -1
- package/admin-build/_app/immutable/chunks/CLHN9MVr.js +1 -0
- package/admin-build/_app/immutable/chunks/{J2Gw0SMu.js → CR37B8DX.js} +1 -1
- package/admin-build/_app/immutable/chunks/CbfX3ELZ.js +1 -0
- package/admin-build/_app/immutable/chunks/CjcrXziO.js +2 -0
- package/admin-build/_app/immutable/chunks/CrwlCAM0.js +1 -0
- package/admin-build/_app/immutable/chunks/{B0HRJ657.js → DOOPbWwG.js} +1 -1
- package/admin-build/_app/immutable/chunks/DQVP4KC-.js +1 -0
- package/admin-build/_app/immutable/chunks/{B6MschND.js → DdvsFblq.js} +1 -1
- package/admin-build/_app/immutable/chunks/DemDWbs-.js +128 -0
- package/admin-build/_app/immutable/chunks/{CaVKAiCe.js → DmDTovpg.js} +1 -1
- package/admin-build/_app/immutable/chunks/{B94PilAN.js → Ff90owjx.js} +1 -1
- package/admin-build/_app/immutable/chunks/{BqTb6Mxk.js → LL3ulaxa.js} +1 -1
- package/admin-build/_app/immutable/chunks/Q3vAxeY-.js +1 -0
- package/admin-build/_app/immutable/chunks/SQVAC3Cv.js +1 -0
- package/admin-build/_app/immutable/chunks/{Z41NK6i6.js → bguI1TeA.js} +1 -1
- package/admin-build/_app/immutable/chunks/{_teD5ji5.js → nlAMTi52.js} +1 -1
- package/admin-build/_app/immutable/chunks/{Cdm5zBRA.js → qBm6xof8.js} +1 -1
- package/admin-build/_app/immutable/entry/{app.D3flihMw.js → app.CP83Ni80.js} +2 -2
- package/admin-build/_app/immutable/entry/start.DY6YakU0.js +1 -0
- package/admin-build/_app/immutable/nodes/{0.CdczqZLK.js → 0.DiRq7puO.js} +1 -1
- package/admin-build/_app/immutable/nodes/1.BFeyKLGT.js +1 -0
- package/admin-build/_app/immutable/nodes/10.zcee7hJx.js +1 -0
- package/admin-build/_app/immutable/nodes/11.BW7wLs2Y.js +1 -0
- package/admin-build/_app/immutable/nodes/12.CxJRlYSd.js +1 -0
- package/admin-build/_app/immutable/nodes/13.pp0F_5hn.js +110 -0
- package/admin-build/_app/immutable/nodes/14.t3AfGiGo.js +3 -0
- package/admin-build/_app/immutable/nodes/15.B3agc7NX.js +1 -0
- package/admin-build/_app/immutable/nodes/{16.BR7WwQrS.js → 16.C4uG2-i8.js} +1 -1
- package/admin-build/_app/immutable/nodes/{17.Cm57KKXV.js → 17.CwGxi1Bn.js} +1 -1
- package/admin-build/_app/immutable/nodes/18.CrQyN_gU.js +1 -0
- package/admin-build/_app/immutable/nodes/19.NEPUOXl7.js +2 -0
- package/admin-build/_app/immutable/nodes/{20.DnHeFlTv.js → 20.DGHO8ipr.js} +1 -1
- package/admin-build/_app/immutable/nodes/21.UVKBDvp4.js +1 -0
- package/admin-build/_app/immutable/nodes/22.Dri5It7a.js +1 -0
- package/admin-build/_app/immutable/nodes/{23.CWSGMcKJ.js → 23.BPQP_Zte.js} +2 -2
- package/admin-build/_app/immutable/nodes/24.D580FdSS.js +2 -0
- package/admin-build/_app/immutable/nodes/25.BMNPOZwF.js +2 -0
- package/admin-build/_app/immutable/nodes/26.XcpEcbiz.js +1 -0
- package/admin-build/_app/immutable/nodes/27.C1zHHcYv.js +1 -0
- package/admin-build/_app/immutable/nodes/28.CuKzzrY8.js +1 -0
- package/admin-build/_app/immutable/nodes/29.nLpBMXnM.js +1 -0
- package/admin-build/_app/immutable/nodes/{3.B6q-7qr8.js → 3.5G_aseoL.js} +1 -1
- package/admin-build/_app/immutable/nodes/30.CQC4nLoU.js +1 -0
- package/admin-build/_app/immutable/nodes/31.Bet8kxOK.js +1 -0
- package/admin-build/_app/immutable/nodes/4.nmJDYJpC.js +1 -0
- package/admin-build/_app/immutable/nodes/5.CnbYLG4E.js +1 -0
- package/admin-build/_app/immutable/nodes/6.KA01b-3y.js +1 -0
- package/admin-build/_app/immutable/nodes/7.CP9fkn1L.js +1 -0
- package/admin-build/_app/immutable/nodes/8.BTzDb---.js +1 -0
- package/admin-build/_app/immutable/nodes/9.DkNJg_J6.js +1 -0
- package/admin-build/_app/version.json +1 -1
- package/admin-build/index.html +7 -7
- package/package.json +3 -3
- package/src/__tests__/push-handlers.test.ts +1 -1
- package/src/__tests__/room-runtime-routing.test.ts +23 -0
- package/src/__tests__/route-parser.test.ts +6 -0
- package/src/__tests__/schema.test.ts +15 -6
- package/src/durable-objects/database-do.ts +7 -1
- package/src/durable-objects/room-runtime-base.ts +49 -40
- package/src/durable-objects/rooms-do.ts +32 -1
- package/src/index.ts +23 -9
- package/src/lib/d1-handler.ts +32 -17
- package/src/lib/postgres-handler.ts +24 -12
- package/src/lib/route-parser.ts +3 -0
- package/src/lib/schemas.ts +12 -2
- package/src/middleware/captcha-verify.ts +16 -3
- package/src/middleware/error-handler.ts +1 -1
- package/src/middleware/rules.ts +28 -9
- package/src/routes/admin-auth.ts +3 -3
- package/src/routes/admin.ts +13 -8
- package/src/routes/analytics-api.ts +3 -3
- package/src/routes/auth.ts +1 -1
- package/src/routes/backup.ts +1 -1
- package/src/routes/d1.ts +14 -7
- package/src/routes/database-live.ts +13 -6
- package/src/routes/kv.ts +21 -10
- package/src/routes/oauth.ts +1 -1
- package/src/routes/push.ts +119 -77
- package/src/routes/room.ts +215 -7
- package/src/routes/schema-endpoint.ts +2 -2
- package/src/routes/sql.ts +10 -6
- package/src/routes/storage.ts +4 -2
- package/src/routes/vectorize.ts +16 -4
- package/admin-build/_app/immutable/chunks/6oMK_164.js +0 -1
- package/admin-build/_app/immutable/chunks/BEW7Ez_g.js +0 -1
- package/admin-build/_app/immutable/chunks/BoOooyH6.js +0 -1
- package/admin-build/_app/immutable/chunks/BvHnF5tV.js +0 -1
- package/admin-build/_app/immutable/chunks/CoI6jjbg.js +0 -2
- package/admin-build/_app/immutable/chunks/CrOZMmdF.js +0 -1
- package/admin-build/_app/immutable/chunks/Cw6OYcq-.js +0 -1
- package/admin-build/_app/immutable/chunks/DPdQ7z0T.js +0 -128
- package/admin-build/_app/immutable/chunks/pUxw8jfq.js +0 -1
- package/admin-build/_app/immutable/entry/start.Cl6sLxnz.js +0 -1
- package/admin-build/_app/immutable/nodes/1.DxcSsEqS.js +0 -1
- package/admin-build/_app/immutable/nodes/10.DuAd4aIm.js +0 -1
- package/admin-build/_app/immutable/nodes/11.0jgHQL92.js +0 -1
- package/admin-build/_app/immutable/nodes/12.CKNPqmyy.js +0 -1
- package/admin-build/_app/immutable/nodes/13.B1p2POXS.js +0 -110
- package/admin-build/_app/immutable/nodes/14.Bb-REBND.js +0 -3
- package/admin-build/_app/immutable/nodes/15.1uBFCX0X.js +0 -1
- package/admin-build/_app/immutable/nodes/18.CoiwfAuQ.js +0 -1
- package/admin-build/_app/immutable/nodes/19.B8ZdLlXj.js +0 -2
- package/admin-build/_app/immutable/nodes/21.CJFaf0Ia.js +0 -1
- package/admin-build/_app/immutable/nodes/22.CItETFzy.js +0 -1
- package/admin-build/_app/immutable/nodes/24.CWbEqNMB.js +0 -2
- package/admin-build/_app/immutable/nodes/25.DRkLEhKi.js +0 -2
- package/admin-build/_app/immutable/nodes/26.BRxO8AYH.js +0 -1
- package/admin-build/_app/immutable/nodes/27.BLs-nVHz.js +0 -1
- package/admin-build/_app/immutable/nodes/28.G79qkdBK.js +0 -1
- package/admin-build/_app/immutable/nodes/29.BOcI6g0N.js +0 -1
- package/admin-build/_app/immutable/nodes/30.DAIC7dKd.js +0 -1
- package/admin-build/_app/immutable/nodes/31.pl0XXjXF.js +0 -1
- package/admin-build/_app/immutable/nodes/4.DOdvVlZj.js +0 -1
- package/admin-build/_app/immutable/nodes/5.BW_zlgye.js +0 -1
- package/admin-build/_app/immutable/nodes/6.Dxy1CAI2.js +0 -1
- package/admin-build/_app/immutable/nodes/7.BG98w_o7.js +0 -1
- package/admin-build/_app/immutable/nodes/8.DoG5R2rG.js +0 -1
- package/admin-build/_app/immutable/nodes/9.Dmxf6zAC.js +0 -1
package/src/routes/room.ts
CHANGED
|
@@ -45,6 +45,26 @@ const roomConnectDiagnosticSchema = z.object({
|
|
|
45
45
|
pendingCount: z.number().optional(),
|
|
46
46
|
maxPending: z.number().optional(),
|
|
47
47
|
});
|
|
48
|
+
const roomSummarySchema = z.object({
|
|
49
|
+
namespace: z.string(),
|
|
50
|
+
roomId: z.string(),
|
|
51
|
+
metadata: z.record(z.string(), z.unknown()),
|
|
52
|
+
occupancy: z.object({
|
|
53
|
+
activeMembers: z.number(),
|
|
54
|
+
activeConnections: z.number(),
|
|
55
|
+
}),
|
|
56
|
+
updatedAt: z.string(),
|
|
57
|
+
});
|
|
58
|
+
const roomSummaryBatchBodySchema = z.object({
|
|
59
|
+
namespace: z.string().openapi({ description: 'Room namespace shared by the requested room IDs' }),
|
|
60
|
+
ids: z.array(z.string()).min(1).max(100).openapi({ description: 'Room IDs to summarize' }),
|
|
61
|
+
});
|
|
62
|
+
const roomSummaryCollectionSchema = z.object({
|
|
63
|
+
namespace: z.string(),
|
|
64
|
+
items: z.array(roomSummarySchema),
|
|
65
|
+
deniedIds: z.array(z.string()),
|
|
66
|
+
updatedAt: z.string(),
|
|
67
|
+
});
|
|
48
68
|
const roomRealtimeSessionDescriptionSchema = z.object({
|
|
49
69
|
sdp: z.string().openapi({ description: 'WebRTC session description payload' }),
|
|
50
70
|
type: z.enum(['offer', 'answer']).openapi({ description: 'Session description type' }),
|
|
@@ -157,6 +177,22 @@ function isRoomOperationPublic(
|
|
|
157
177
|
return !!namespaceConfig.public[operation];
|
|
158
178
|
}
|
|
159
179
|
|
|
180
|
+
function warnRoomDevelopmentFallback(
|
|
181
|
+
namespace: string,
|
|
182
|
+
operation: 'metadata' | 'join' | 'action',
|
|
183
|
+
): void {
|
|
184
|
+
const warningKey = `${namespace}:${operation}`;
|
|
185
|
+
if (roomFallbackWarnings.has(warningKey)) {
|
|
186
|
+
return;
|
|
187
|
+
}
|
|
188
|
+
roomFallbackWarnings.add(warningKey);
|
|
189
|
+
console.warn(
|
|
190
|
+
`[Room] ${warningKey} is allowed because release=false and no explicit room rule was found. `
|
|
191
|
+
+ `This fallback is local-dev only. Add rooms.${namespace}.access.${operation} or set `
|
|
192
|
+
+ `rooms.${namespace}.public.${operation}=true to make the behavior explicit.`,
|
|
193
|
+
);
|
|
194
|
+
}
|
|
195
|
+
|
|
160
196
|
function getRoomAuthContext(
|
|
161
197
|
auth: {
|
|
162
198
|
id?: string;
|
|
@@ -188,11 +224,11 @@ export async function proxyRoomDoRequest(
|
|
|
188
224
|
const roomId = c.req.query('id');
|
|
189
225
|
|
|
190
226
|
if (!namespace || !roomId) {
|
|
191
|
-
return c.json({ code: 400, message: 'namespace and id
|
|
227
|
+
return c.json({ code: 400, message: "Missing required query parameters 'namespace' and 'id' for room requests." }, 400);
|
|
192
228
|
}
|
|
193
229
|
|
|
194
230
|
if (options?.requireAuth && !c.get('auth')) {
|
|
195
|
-
return c.json({ code: 401, message: 'Authentication required' }, 401);
|
|
231
|
+
return c.json({ code: 401, message: 'Authentication required. Sign in before trying to access this room.' }, 401);
|
|
196
232
|
}
|
|
197
233
|
|
|
198
234
|
const config = parseConfig(c.env);
|
|
@@ -433,6 +469,42 @@ const getRoomMetadata = createRoute({
|
|
|
433
469
|
},
|
|
434
470
|
});
|
|
435
471
|
|
|
472
|
+
const getRoomSummary = createRoute({
|
|
473
|
+
operationId: 'getRoomSummary',
|
|
474
|
+
method: 'get',
|
|
475
|
+
path: '/summary',
|
|
476
|
+
tags: ['client'],
|
|
477
|
+
summary: 'Get room summary',
|
|
478
|
+
description: 'Returns lobby-safe room metadata plus current occupancy without joining the room.',
|
|
479
|
+
request: {
|
|
480
|
+
query: roomQuerySchema,
|
|
481
|
+
},
|
|
482
|
+
responses: {
|
|
483
|
+
200: { description: 'Room summary', content: { 'application/json': { schema: roomSummarySchema } } },
|
|
484
|
+
400: { description: 'Bad request', content: { 'application/json': { schema: errorResponseSchema } } },
|
|
485
|
+
403: { description: 'Forbidden', content: { 'application/json': { schema: errorResponseSchema } } },
|
|
486
|
+
404: { description: 'Not found', content: { 'application/json': { schema: errorResponseSchema } } },
|
|
487
|
+
},
|
|
488
|
+
});
|
|
489
|
+
|
|
490
|
+
const getRoomSummaries = createRoute({
|
|
491
|
+
operationId: 'getRoomSummaries',
|
|
492
|
+
method: 'post',
|
|
493
|
+
path: '/summaries',
|
|
494
|
+
tags: ['client'],
|
|
495
|
+
summary: 'Get summaries for multiple rooms',
|
|
496
|
+
description: 'Returns lobby-safe room metadata plus current occupancy for multiple room IDs in the same namespace.',
|
|
497
|
+
request: {
|
|
498
|
+
body: { content: { 'application/json': { schema: roomSummaryBatchBodySchema } }, required: true },
|
|
499
|
+
},
|
|
500
|
+
responses: {
|
|
501
|
+
200: { description: 'Room summaries', content: { 'application/json': { schema: roomSummaryCollectionSchema } } },
|
|
502
|
+
400: { description: 'Bad request', content: { 'application/json': { schema: errorResponseSchema } } },
|
|
503
|
+
403: { description: 'Forbidden', content: { 'application/json': { schema: errorResponseSchema } } },
|
|
504
|
+
404: { description: 'Room feature not configured', content: { 'application/json': { schema: errorResponseSchema } } },
|
|
505
|
+
},
|
|
506
|
+
});
|
|
507
|
+
|
|
436
508
|
roomRoute.openapi(getRoomMetadata, async (c) => {
|
|
437
509
|
const namespace = c.req.query('namespace');
|
|
438
510
|
const roomId = c.req.query('id');
|
|
@@ -459,11 +531,7 @@ roomRoute.openapi(getRoomMetadata, async (c) => {
|
|
|
459
531
|
return c.json({ code: 403, message: 'Room metadata requires access.metadata or public.metadata in release mode' }, 403);
|
|
460
532
|
}
|
|
461
533
|
if (!config.release) {
|
|
462
|
-
|
|
463
|
-
if (!roomFallbackWarnings.has(warningKey)) {
|
|
464
|
-
roomFallbackWarnings.add(warningKey);
|
|
465
|
-
console.warn(`[Room] ${warningKey} is using development-mode allow-by-default. Add rooms.${namespace}.access.metadata or public.metadata to make this explicit.`);
|
|
466
|
-
}
|
|
534
|
+
warnRoomDevelopmentFallback(namespace, 'metadata');
|
|
467
535
|
}
|
|
468
536
|
}
|
|
469
537
|
if (metadataAccess) {
|
|
@@ -498,6 +566,146 @@ roomRoute.openapi(getRoomMetadata, async (c) => {
|
|
|
498
566
|
return doStub.fetch(doRequest);
|
|
499
567
|
});
|
|
500
568
|
|
|
569
|
+
roomRoute.openapi(getRoomSummary, async (c) => {
|
|
570
|
+
const namespace = c.req.query('namespace');
|
|
571
|
+
const roomId = c.req.query('id');
|
|
572
|
+
|
|
573
|
+
if (!namespace || !roomId) {
|
|
574
|
+
return c.json({ code: 400, message: 'namespace and id query parameters required' }, 400);
|
|
575
|
+
}
|
|
576
|
+
|
|
577
|
+
const config = parseConfig(c.env);
|
|
578
|
+
const namespaceConfig = config.rooms?.[namespace];
|
|
579
|
+
if (config.release) {
|
|
580
|
+
if (!config.rooms?.[namespace]) {
|
|
581
|
+
return c.json({
|
|
582
|
+
code: 403,
|
|
583
|
+
message: `Room namespace '${namespace}' not configured`,
|
|
584
|
+
}, 403);
|
|
585
|
+
}
|
|
586
|
+
}
|
|
587
|
+
|
|
588
|
+
const metadataAccess = namespaceConfig?.access?.metadata;
|
|
589
|
+
if (!metadataAccess) {
|
|
590
|
+
if (config.release && !isRoomOperationPublic(namespaceConfig, 'metadata')) {
|
|
591
|
+
return c.json({ code: 403, message: 'Room summary requires access.metadata or public.metadata in release mode' }, 403);
|
|
592
|
+
}
|
|
593
|
+
if (!config.release) {
|
|
594
|
+
warnRoomDevelopmentFallback(namespace, 'metadata');
|
|
595
|
+
}
|
|
596
|
+
}
|
|
597
|
+
if (metadataAccess) {
|
|
598
|
+
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;
|
|
599
|
+
const allowed = await Promise.resolve(metadataAccess(
|
|
600
|
+
getRoomAuthContext(auth),
|
|
601
|
+
roomId,
|
|
602
|
+
)).catch(() => false);
|
|
603
|
+
if (!allowed) {
|
|
604
|
+
return c.json({ code: 403, message: 'Denied by room metadata access rule' }, 403);
|
|
605
|
+
}
|
|
606
|
+
}
|
|
607
|
+
|
|
608
|
+
const runtime = resolveRoomRuntime(c.env);
|
|
609
|
+
if (!runtime.binding) {
|
|
610
|
+
return c.json({ code: 404, message: `Room runtime '${runtime.target}' not configured` }, 404);
|
|
611
|
+
}
|
|
612
|
+
|
|
613
|
+
const doName = `${namespace}::${roomId}`;
|
|
614
|
+
const doId = runtime.binding.idFromName(doName);
|
|
615
|
+
const doStub = runtime.binding.get(doId);
|
|
616
|
+
|
|
617
|
+
const url = new URL(c.req.url);
|
|
618
|
+
url.pathname = '/summary';
|
|
619
|
+
url.searchParams.set('room', doName);
|
|
620
|
+
const doRequest = new Request(url.toString(), {
|
|
621
|
+
method: 'GET',
|
|
622
|
+
headers: c.req.raw.headers,
|
|
623
|
+
});
|
|
624
|
+
|
|
625
|
+
return doStub.fetch(doRequest);
|
|
626
|
+
});
|
|
627
|
+
|
|
628
|
+
roomRoute.openapi(getRoomSummaries, async (c) => {
|
|
629
|
+
const body = c.req.valid('json') as z.infer<typeof roomSummaryBatchBodySchema>;
|
|
630
|
+
const namespace = body.namespace;
|
|
631
|
+
const roomIds = [...new Set(body.ids)];
|
|
632
|
+
|
|
633
|
+
const config = parseConfig(c.env);
|
|
634
|
+
const namespaceConfig = config.rooms?.[namespace];
|
|
635
|
+
if (config.release && !namespaceConfig) {
|
|
636
|
+
return c.json({
|
|
637
|
+
code: 403,
|
|
638
|
+
message: `Room namespace '${namespace}' not configured`,
|
|
639
|
+
}, 403);
|
|
640
|
+
}
|
|
641
|
+
|
|
642
|
+
const metadataAccess = namespaceConfig?.access?.metadata;
|
|
643
|
+
if (!metadataAccess) {
|
|
644
|
+
if (config.release && !isRoomOperationPublic(namespaceConfig, 'metadata')) {
|
|
645
|
+
return c.json({ code: 403, message: 'Room summaries require access.metadata or public.metadata in release mode' }, 403);
|
|
646
|
+
}
|
|
647
|
+
if (!config.release) {
|
|
648
|
+
warnRoomDevelopmentFallback(namespace, 'metadata');
|
|
649
|
+
}
|
|
650
|
+
}
|
|
651
|
+
|
|
652
|
+
const runtime = resolveRoomRuntime(c.env);
|
|
653
|
+
if (!runtime.binding) {
|
|
654
|
+
return c.json({ code: 404, message: `Room runtime '${runtime.target}' not configured` }, 404);
|
|
655
|
+
}
|
|
656
|
+
|
|
657
|
+
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;
|
|
658
|
+
const authContext = getRoomAuthContext(auth);
|
|
659
|
+
const allowedRoomIds: string[] = [];
|
|
660
|
+
const deniedIds: string[] = [];
|
|
661
|
+
|
|
662
|
+
if (metadataAccess) {
|
|
663
|
+
for (const roomId of roomIds) {
|
|
664
|
+
const allowed = await Promise.resolve(metadataAccess(authContext, roomId)).catch(() => false);
|
|
665
|
+
if (allowed) {
|
|
666
|
+
allowedRoomIds.push(roomId);
|
|
667
|
+
} else {
|
|
668
|
+
deniedIds.push(roomId);
|
|
669
|
+
}
|
|
670
|
+
}
|
|
671
|
+
} else {
|
|
672
|
+
allowedRoomIds.push(...roomIds);
|
|
673
|
+
}
|
|
674
|
+
|
|
675
|
+
const items = await Promise.all(
|
|
676
|
+
allowedRoomIds.map(async (roomId) => {
|
|
677
|
+
const doName = `${namespace}::${roomId}`;
|
|
678
|
+
const doId = runtime.binding!.idFromName(doName);
|
|
679
|
+
const doStub = runtime.binding!.get(doId);
|
|
680
|
+
|
|
681
|
+
const url = new URL(c.req.url);
|
|
682
|
+
url.pathname = '/summary';
|
|
683
|
+
url.searchParams.set('room', doName);
|
|
684
|
+
const doResponse = await doStub.fetch(new Request(url.toString(), {
|
|
685
|
+
method: 'GET',
|
|
686
|
+
headers: c.req.raw.headers,
|
|
687
|
+
}));
|
|
688
|
+
|
|
689
|
+
if (!doResponse.ok) {
|
|
690
|
+
const errorPayload = await doResponse.json().catch(() => null) as { message?: string } | null;
|
|
691
|
+
throw new Error(
|
|
692
|
+
errorPayload?.message
|
|
693
|
+
?? `Failed to load room summary for '${roomId}' in namespace '${namespace}'.`,
|
|
694
|
+
);
|
|
695
|
+
}
|
|
696
|
+
|
|
697
|
+
return doResponse.json() as Promise<z.infer<typeof roomSummarySchema>>;
|
|
698
|
+
}),
|
|
699
|
+
);
|
|
700
|
+
|
|
701
|
+
return c.json({
|
|
702
|
+
namespace,
|
|
703
|
+
items,
|
|
704
|
+
deniedIds,
|
|
705
|
+
updatedAt: new Date().toISOString(),
|
|
706
|
+
});
|
|
707
|
+
});
|
|
708
|
+
|
|
501
709
|
const getRoomRealtimeSession = createRoute({
|
|
502
710
|
operationId: 'getRoomRealtimeSession',
|
|
503
711
|
method: 'get',
|
|
@@ -45,14 +45,14 @@ schemaRoute.openapi(getSchema, async (c) => {
|
|
|
45
45
|
buildConstraintCtx(c.env, c.req),
|
|
46
46
|
);
|
|
47
47
|
if (skResult === 'invalid') {
|
|
48
|
-
throw new EdgeBaseError(401, '
|
|
48
|
+
throw new EdgeBaseError(401, 'Invalid X-EdgeBase-Service-Key for schema reads.');
|
|
49
49
|
}
|
|
50
50
|
const serviceKeyBypass = skResult === 'valid';
|
|
51
51
|
|
|
52
52
|
if (!serviceKeyBypass) {
|
|
53
53
|
const auth = c.get('auth');
|
|
54
54
|
if (!auth) {
|
|
55
|
-
throw new EdgeBaseError(401, 'Authentication required.');
|
|
55
|
+
throw new EdgeBaseError(401, 'Authentication required to read the schema endpoint.');
|
|
56
56
|
}
|
|
57
57
|
}
|
|
58
58
|
}
|
package/src/routes/sql.ts
CHANGED
|
@@ -39,6 +39,10 @@ import { executeProviderAwareSql } from '../lib/provider-aware-sql.js';
|
|
|
39
39
|
|
|
40
40
|
export const sqlRoute = new OpenAPIHono<HonoEnv>({ defaultHook: zodDefaultHook });
|
|
41
41
|
|
|
42
|
+
function invalidSqlJsonMessage(): string {
|
|
43
|
+
return 'Invalid JSON body for SQL execution. Send application/json with { namespace, sql, params? }.';
|
|
44
|
+
}
|
|
45
|
+
|
|
42
46
|
/**
|
|
43
47
|
* POST /api/sql
|
|
44
48
|
* Body: { namespace: string, id?: string, sql: string, params?: unknown[] }
|
|
@@ -81,19 +85,19 @@ sqlRoute.openapi(executeSql, async (c) => {
|
|
|
81
85
|
try {
|
|
82
86
|
body = await c.req.json();
|
|
83
87
|
} catch {
|
|
84
|
-
return c.json({ code: 400, message:
|
|
88
|
+
return c.json({ code: 400, message: invalidSqlJsonMessage() }, 400);
|
|
85
89
|
}
|
|
86
90
|
|
|
87
91
|
const { namespace, id, sql, params } = body;
|
|
88
92
|
|
|
89
93
|
if (!namespace || typeof namespace !== 'string') {
|
|
90
|
-
return c.json({ code: 400, message: 'namespace
|
|
94
|
+
return c.json({ code: 400, message: "Missing required field 'namespace' for SQL execution." }, 400);
|
|
91
95
|
}
|
|
92
96
|
if (id !== undefined && id !== null && typeof id !== 'string') {
|
|
93
|
-
return c.json({ code: 400, message: 'id must be a string
|
|
97
|
+
return c.json({ code: 400, message: "Field 'id' must be a string when provided for SQL execution." }, 400);
|
|
94
98
|
}
|
|
95
99
|
if (!sql || typeof sql !== 'string') {
|
|
96
|
-
return c.json({ code: 400, message: 'sql
|
|
100
|
+
return c.json({ code: 400, message: "Missing required field 'sql' for SQL execution." }, 400);
|
|
97
101
|
}
|
|
98
102
|
|
|
99
103
|
// Validate namespace is declared in databases config (§1)
|
|
@@ -124,10 +128,10 @@ sqlRoute.openapi(executeSql, async (c) => {
|
|
|
124
128
|
buildConstraintCtx(c.env, c.req),
|
|
125
129
|
);
|
|
126
130
|
if (skResult === 'missing') {
|
|
127
|
-
return c.json({ code: 403, message:
|
|
131
|
+
return c.json({ code: 403, message: `X-EdgeBase-Service-Key is required to execute SQL for database namespace '${namespace}'.` }, 403);
|
|
128
132
|
}
|
|
129
133
|
if (skResult === 'invalid') {
|
|
130
|
-
return c.json({ code: 401, message:
|
|
134
|
+
return c.json({ code: 401, message: `Invalid X-EdgeBase-Service-Key for SQL execution in database namespace '${namespace}'.` }, 401);
|
|
131
135
|
}
|
|
132
136
|
|
|
133
137
|
try {
|
package/src/routes/storage.ts
CHANGED
|
@@ -297,7 +297,7 @@ function checkServiceKey(env: Env, header: string | undefined, scope: string, re
|
|
|
297
297
|
const { result } = validateKey(header, scope, config, env, undefined, constraintCtx);
|
|
298
298
|
if (result === 'valid') return true;
|
|
299
299
|
if (result === 'invalid') {
|
|
300
|
-
throw new EdgeBaseError(401,
|
|
300
|
+
throw new EdgeBaseError(401, `Invalid X-EdgeBase-Service-Key for storage scope '${scope}'.`, undefined, 'unauthenticated');
|
|
301
301
|
}
|
|
302
302
|
return false; // 'missing' → continue to normal rules
|
|
303
303
|
}
|
|
@@ -1236,7 +1236,9 @@ storage.openapi(deleteBatch, async (c) => {
|
|
|
1236
1236
|
// afterDelete — plugin-registered storage hooks (per-file, non-blocking)
|
|
1237
1237
|
executeStorageHooks('afterDelete', { ...fileMeta, bucket: bucketName }, auth, c.executionCtx, c.env, getWorkerUrl(c.req.url, c.env));
|
|
1238
1238
|
} catch (e) {
|
|
1239
|
-
const msg = e instanceof EdgeBaseError
|
|
1239
|
+
const msg = e instanceof EdgeBaseError
|
|
1240
|
+
? e.message
|
|
1241
|
+
: 'Delete failed with an unexpected storage error. Check worker logs for details.';
|
|
1240
1242
|
failed.push({ key, error: msg });
|
|
1241
1243
|
}
|
|
1242
1244
|
}
|
package/src/routes/vectorize.ts
CHANGED
|
@@ -35,9 +35,14 @@ const READ_ACTIONS: Action[] = ['search', 'getByIds', 'queryById', 'describe'];
|
|
|
35
35
|
|
|
36
36
|
const STUB_WARNING = 'Vectorize not available in this environment';
|
|
37
37
|
const VECTOR_BATCH_LIMIT = 20;
|
|
38
|
+
const vectorizeStubWarnings = new Set<string>();
|
|
38
39
|
|
|
39
40
|
export const vectorizeRoute = new OpenAPIHono<HonoEnv>({ defaultHook: zodDefaultHook });
|
|
40
41
|
|
|
42
|
+
function invalidVectorizeJsonMessage(): string {
|
|
43
|
+
return 'Invalid JSON body for Vectorize. Send application/json with { action, ...payload }.';
|
|
44
|
+
}
|
|
45
|
+
|
|
41
46
|
/**
|
|
42
47
|
* POST /api/vectorize/:index
|
|
43
48
|
* Body: { action, vectors?, vector?, vectorId?, topK?, filter?, ids?, namespace?, returnValues?, returnMetadata? }
|
|
@@ -78,7 +83,7 @@ vectorizeRoute.openapi(vectorizeOperation, async (c) => {
|
|
|
78
83
|
try {
|
|
79
84
|
body = await c.req.json();
|
|
80
85
|
} catch {
|
|
81
|
-
return c.json({ code: 400, message:
|
|
86
|
+
return c.json({ code: 400, message: invalidVectorizeJsonMessage() }, 400);
|
|
82
87
|
}
|
|
83
88
|
|
|
84
89
|
const { action } = body;
|
|
@@ -108,10 +113,10 @@ vectorizeRoute.openapi(vectorizeOperation, async (c) => {
|
|
|
108
113
|
buildConstraintCtx(c.env, c.req),
|
|
109
114
|
);
|
|
110
115
|
if (skResult === 'missing') {
|
|
111
|
-
return c.json({ code: 403, message:
|
|
116
|
+
return c.json({ code: 403, message: `X-EdgeBase-Service-Key is required to access Vectorize index '${nameParam}'.` }, 403);
|
|
112
117
|
}
|
|
113
118
|
if (skResult === 'invalid') {
|
|
114
|
-
return c.json({ code: 401, message:
|
|
119
|
+
return c.json({ code: 401, message: `Invalid X-EdgeBase-Service-Key for Vectorize index '${nameParam}'.` }, 401);
|
|
115
120
|
}
|
|
116
121
|
|
|
117
122
|
// ─── Input validation ─────────────────────────────────────────────────
|
|
@@ -165,7 +170,14 @@ vectorizeRoute.openapi(vectorizeOperation, async (c) => {
|
|
|
165
170
|
const bindingName = vectorConfig.binding ?? `VECTORIZE_${nameParam.toUpperCase()}`;
|
|
166
171
|
const binding = (c.env as unknown as Record<string, unknown>)[bindingName] as VectorizeIndex | undefined;
|
|
167
172
|
if (!binding) {
|
|
168
|
-
|
|
173
|
+
const warningKey = `${nameParam}:${bindingName}`;
|
|
174
|
+
if (!vectorizeStubWarnings.has(warningKey)) {
|
|
175
|
+
vectorizeStubWarnings.add(warningKey);
|
|
176
|
+
console.warn(
|
|
177
|
+
`[Vectorize] '${nameParam}' is running with a local stub because binding '${bindingName}' is unavailable. `
|
|
178
|
+
+ 'Search and mutation calls will return no-op stub data until the binding is configured in Cloudflare.',
|
|
179
|
+
);
|
|
180
|
+
}
|
|
169
181
|
// Return stub responses for local development
|
|
170
182
|
// Include both v1 (count) and v2 (mutationId) fields so code for either version works.
|
|
171
183
|
switch (action) {
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import"./CWj6FrbW.js";import{p as _t,d as T,M as dt,w as K,b as v,g as t,t as y,a as mt,u as j,s as _,c as n,r as o,ae as U,f as bt}from"./BdTBlfLy.js";import{s as h,d as ft,a as W}from"./DtZk82gG.js";import{a as d,t as ht,f as m}from"./DEELgv7K.js";import{i as D}from"./Y22E1hJM.js";import{a as pt,t as gt,e as yt}from"./BEW7Ez_g.js";import{s as qt,a as jt}from"./CoI6jjbg.js";import{a as wt,s as xt}from"./Cp8V0Xy2.js";import{B as St}from"./C72lTcG0.js";import{D as Ct}from"./DPdQ7z0T.js";import Et from"./lSpxLU5p.js";import{s as X}from"./BvHnF5tV.js";var Tt=m('<div class="table-sql__target svelte-1syrthj"><span class="table-sql__target-label svelte-1syrthj"> </span> <code class="svelte-1syrthj"> </code></div>'),Dt=m('<div><button type="button" class="table-sql__result-open svelte-1syrthj"><span> </span></button> <button type="button" class="table-sql__result-close svelte-1syrthj">×</button></div>'),Mt=m('<span class="table-sql__result-error svelte-1syrthj"> </span>'),kt=m("<span> </span>"),Bt=m('<pre class="table-sql__error-block svelte-1syrthj"> </pre>'),It=m('<div class="table-sql__empty svelte-1syrthj">Query returned no rows.</div>'),Lt=m('<div class="table-sql__result-panel svelte-1syrthj"><div class="table-sql__result-meta svelte-1syrthj"><!></div> <!></div>'),Ot=m('<div class="table-sql__result-tabs svelte-1syrthj"></div> <!>',1),Nt=m('<div class="table-sql__empty svelte-1syrthj">Run a query against <code> </code> to inspect rows, joins, or aggregates for this target.</div>'),Rt=m('<div class="table-sql svelte-1syrthj"><div class="table-sql__toolbar svelte-1syrthj"><div class="table-sql__target svelte-1syrthj"><span class="table-sql__target-label svelte-1syrthj">Database</span> <code class="svelte-1syrthj"> </code></div> <!> <!> <span class="table-sql__shortcut svelte-1syrthj"></span></div> <!> <!></div>');function Xt(Y,p){var J;_t(p,!0);const L=()=>wt(X,"$schemaStore",Z),[Z,$]=xt();let g=T(""),C=T(!1),s=T(dt([])),r=T(0),w=T(0),O=j(()=>L().schema[p.tableName]),tt=j(()=>(()=>{const e={},a=L().schema;for(const[l,u]of Object.entries(a)){const q=u.fields;e[l]=q?Object.keys(q):[]}return e})()),et=j(()=>{var e;return(e=t(O))!=null&&e.dynamic?"Per-tenant DB":"Single DB"}),at=j(()=>{var e,a,l;return((l=(a=(e=t(O))==null?void 0:e.instanceDiscovery)==null?void 0:a.targetLabel)==null?void 0:l.trim())||"Target"}),st=j(()=>p.instanceId||"Not selected");function rt(e){return`SELECT * FROM "${e}" LIMIT 100;`}K(()=>{v(g,rt(p.tableName),!0)}),K(()=>{Object.keys(L().schema).length===0&&X.loadSchema({silent:!0})});async function V(){if(t(g).trim()){v(C,!0);try{const e=await pt.fetch("data/sql",{method:"POST",body:{namespace:p.namespace,id:p.instanceId||void 0,sql:t(g).trim()}}),a=(e.columns??[]).map(l=>({key:l,label:l,type:"text",editable:!1}));v(w,t(w)+1),v(s,[...t(s),{id:t(w),sql:t(g).trim(),columns:a,rows:e.rows??[],rowCount:e.rowCount??0,time:e.time??0}],!0),v(r,t(s).length-1)}catch(e){const a=e instanceof Error?e.message:"Query failed";gt(a),v(w,t(w)+1),v(s,[...t(s),{id:t(w),sql:t(g).trim(),columns:[],rows:[],rowCount:0,time:0,error:a}],!0),v(r,t(s).length-1)}finally{v(C,!1)}}}function lt(e){const a=t(s).filter((l,u)=>u!==e);t(r)>e?v(r,t(r)-1):t(r)===e&&v(r,Math.min(e,Math.max(0,a.length-1)),!0),v(s,a,!0)}var N=Rt(),R=n(N),P=n(R),z=_(n(P),2),ot=n(z,!0);o(z),o(P);var G=_(P,2);{var nt=e=>{var a=Tt(),l=n(a),u=n(l,!0);o(l);var q=_(l,2),b=n(q,!0);o(q),o(a),y(()=>{h(u,t(at)),h(b,t(st))}),d(e,a)};D(G,e=>{var a;(a=t(O))!=null&&a.dynamic&&e(nt)})}var A=_(G,2);{let e=j(()=>t(C)||!t(g).trim());St(A,{variant:"primary",size:"sm",onclick:V,get loading(){return t(C)},get disabled(){return t(e)},children:(a,l)=>{U();var u=ht();y(()=>h(u,t(C)?"Executing...":"Execute")),d(a,u)},$$slots:{default:!0}})}var it=_(A,2);it.textContent=`${(J=navigator.platform)!=null&&J.includes("Mac")?"⌘":"Ctrl"}+Enter`,o(R);var H=_(R,2);{let e=j(()=>`SELECT * FROM "${p.tableName}" LIMIT 100;`);Et(H,{get value(){return t(g)},onchange:a=>v(g,a,!0),onExecute:V,get placeholder(){return t(e)},get schema(){return t(tt)}})}var vt=_(H,2);{var ct=e=>{var a=Ot(),l=bt(a);yt(l,23,()=>t(s),b=>b.id,(b,M,f)=>{var x=Dt();let k;var S=n(x),B=n(S),F=n(B);o(B),o(S);var I=_(S,2);o(x),y(()=>{k=qt(x,1,"table-sql__result-tab svelte-1syrthj",null,k,{"table-sql__result-tab--active":t(f)===t(r)}),h(F,`Result ${t(f)+1}`),jt(I,"aria-label",`Close result ${t(f)+1}`)}),W("click",S,()=>v(r,t(f),!0)),W("click",I,Q=>{Q.stopPropagation(),lt(t(f))}),d(b,x)}),o(l);var u=_(l,2);{var q=b=>{var M=Lt(),f=n(M),x=n(f);{var k=i=>{var c=Mt(),E=n(c,!0);o(c),y(()=>h(E,t(s)[t(r)].error)),d(i,c)},S=i=>{var c=kt(),E=n(c);o(c),y(()=>h(E,`${t(s)[t(r)].rowCount??""} row${t(s)[t(r)].rowCount===1?"":"s"} · ${t(s)[t(r)].time??""}ms`)),d(i,c)};D(x,i=>{t(s)[t(r)].error?i(k):i(S,!1)})}o(f);var B=_(f,2);{var F=i=>{var c=Bt(),E=n(c,!0);o(c),y(()=>h(E,t(s)[t(r)].sql)),d(i,c)},I=i=>{var c=It();d(i,c)},Q=i=>{Ct(i,{get columns(){return t(s)[t(r)].columns},get rows(){return t(s)[t(r)].rows},readonly:!0})};D(B,i=>{t(s)[t(r)].error?i(F):t(s)[t(r)].rows.length===0?i(I,1):i(Q,!1)})}o(M),d(b,M)};D(u,b=>{t(s)[t(r)]&&b(q)})}d(e,a)},ut=e=>{var a=Nt(),l=_(n(a)),u=n(l,!0);o(l),U(),o(a),y(()=>h(u,p.tableName)),d(e,a)};D(vt,e=>{t(s).length>0?e(ct):e(ut,!1)})}o(N),y(()=>h(ot,t(et))),d(Y,N),mt(),$()}ft(["click"]);export{Xt as default};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
var ge=Object.defineProperty;var _e=(e,n,r)=>n in e?ge(e,n,{enumerable:!0,configurable:!0,writable:!0,value:r}):e[n]=r;var F=(e,n,r)=>_e(e,typeof n!="symbol"?n+"":n,r);import{a2 as q,x as me,au as he,h as k,n as L,v as Ee,e as we,g as oe,y as Te,A as Ae,B as ie,D as V,k as U,C as ye,av as Ie,aw as fe,_ as Ne,ax as w,a3 as G,ay as xe,a5 as Se,X as Ce,az as Re,aA as J,aB as ke,aC as De,a7 as Oe,aD as ue,aE as He,$ as ve,a1 as pe,aF as X,I as Me,aG as be,aH as Fe,aI as Ue,a0 as ze,l as $e,M as Z}from"./BdTBlfLy.js";import{g as K}from"./Bn2NtlTj.js";import{g as Be,a as Y}from"./BoOooyH6.js";import{l as qe,d as ce}from"./CaVKAiCe.js";function an(e,n){return n}function Le(e,n,r){for(var f=[],u=n.length,i,c=n.length,v=0;v<u;v++){let m=n[v];pe(m,()=>{if(i){if(i.pending.delete(m),i.done.add(m),i.pending.size===0){var l=e.outrogroups;P(J(i.done)),l.delete(i),l.size===0&&(e.outrogroups=null)}}else c-=1},!1)}if(c===0){var o=f.length===0&&r!==null;if(o){var d=r,t=d.parentNode;Ue(t),t.append(d),e.items.clear()}P(n,!o)}else i={pending:new Set(n),done:new Set},(e.outrogroups??(e.outrogroups=new Set)).add(i)}function P(e,n=!0){for(var r=0;r<e.length;r++)ze(e[r],n)}var le;function tn(e,n,r,f,u,i=null){var c=e,v=new Map,o=(n&he)!==0;if(o){var d=e;c=k?L(Ee(d)):d.appendChild(q())}k&&we();var t=null,m=Ce(()=>{var s=r();return Re(s)?s:s==null?[]:J(s)}),l,h=!0;function A(){a.fallback=t,Ve(a,l,c,n,f),t!==null&&(l.length===0?(t.f&w)===0?ve(t):(t.f^=w,H(t,null,c)):pe(t,()=>{t=null}))}var N=me(()=>{l=oe(m);var s=l.length;let x=!1;if(k){var S=Te(c)===Ae;S!==(s===0)&&(c=ie(),L(c),V(!1),x=!0)}for(var g=new Set,y=Ne,C=Se(),p=0;p<s;p+=1){k&&U.nodeType===ye&&U.data===Ie&&(c=U,x=!0,V(!1));var I=l[p],R=f(I,p),_=h?null:v.get(R);_?(_.v&&fe(_.v,I),_.i&&fe(_.i,p),C&&y.unskip_effect(_.e)):(_=Xe(v,h?c:le??(le=q()),I,R,p,u,n,r),h||(_.e.f|=w),v.set(R,_)),g.add(R)}if(s===0&&i&&!t&&(h?t=G(()=>i(c)):(t=G(()=>i(le??(le=q()))),t.f|=w)),s>g.size&&xe(),k&&s>0&&L(ie()),!h)if(C){for(const[M,b]of v)g.has(M)||y.skip_effect(b.e);y.oncommit(A),y.ondiscard(()=>{})}else A();x&&V(!0),oe(m)}),a={effect:N,items:v,outrogroups:null,fallback:t};h=!1,k&&(c=U)}function O(e){for(;e!==null&&(e.f&be)===0;)e=e.next;return e}function Ve(e,n,r,f,u){var _,M,b,j,ee,ne,re,ae,te;var i=(f&Fe)!==0,c=n.length,v=e.items,o=O(e.effect.first),d,t=null,m,l=[],h=[],A,N,a,s;if(i)for(s=0;s<c;s+=1)A=n[s],N=u(A,s),a=v.get(N).e,(a.f&w)===0&&((M=(_=a.nodes)==null?void 0:_.a)==null||M.measure(),(m??(m=new Set)).add(a));for(s=0;s<c;s+=1){if(A=n[s],N=u(A,s),a=v.get(N).e,e.outrogroups!==null)for(const E of e.outrogroups)E.pending.delete(a),E.done.delete(a);if((a.f&w)!==0)if(a.f^=w,a===o)H(a,null,r);else{var x=t?t.next:o;a===e.effect.last&&(e.effect.last=a.prev),a.prev&&(a.prev.next=a.next),a.next&&(a.next.prev=a.prev),T(e,t,a),T(e,a,x),H(a,x,r),t=a,l=[],h=[],o=O(t.next);continue}if((a.f&X)!==0&&(ve(a),i&&((j=(b=a.nodes)==null?void 0:b.a)==null||j.unfix(),(m??(m=new Set)).delete(a))),a!==o){if(d!==void 0&&d.has(a)){if(l.length<h.length){var S=h[0],g;t=S.prev;var y=l[0],C=l[l.length-1];for(g=0;g<l.length;g+=1)H(l[g],S,r);for(g=0;g<h.length;g+=1)d.delete(h[g]);T(e,y.prev,C.next),T(e,t,y),T(e,C,S),o=S,t=C,s-=1,l=[],h=[]}else d.delete(a),H(a,o,r),T(e,a.prev,a.next),T(e,a,t===null?e.effect.first:t.next),T(e,t,a),t=a;continue}for(l=[],h=[];o!==null&&o!==a;)(d??(d=new Set)).add(o),h.push(o),o=O(o.next);if(o===null)continue}(a.f&w)===0&&l.push(a),t=a,o=O(a.next)}if(e.outrogroups!==null){for(const E of e.outrogroups)E.pending.size===0&&(P(J(E.done)),(ee=e.outrogroups)==null||ee.delete(E));e.outrogroups.size===0&&(e.outrogroups=null)}if(o!==null||d!==void 0){var p=[];if(d!==void 0)for(a of d)(a.f&X)===0&&p.push(a);for(;o!==null;)(o.f&X)===0&&o!==e.fallback&&p.push(o),o=O(o.next);var I=p.length;if(I>0){var R=(f&he)!==0&&c===0?r:null;if(i){for(s=0;s<I;s+=1)(re=(ne=p[s].nodes)==null?void 0:ne.a)==null||re.measure();for(s=0;s<I;s+=1)(te=(ae=p[s].nodes)==null?void 0:ae.a)==null||te.fix()}Le(e,p,R)}}i&&Me(()=>{var E,se;if(m!==void 0)for(a of m)(se=(E=a.nodes)==null?void 0:E.a)==null||se.apply()})}function Xe(e,n,r,f,u,i,c,v){var o=(c&ke)!==0?(c&De)===0?Oe(r,!1,!1):ue(r):null,d=(c&He)!==0?ue(u):null;return{v:o,i:d,e:G(()=>(i(n,o??r,d??u,v),()=>{e.delete(f)}))}}function H(e,n,r){if(e.nodes)for(var f=e.nodes.start,u=e.nodes.end,i=n&&(n.f&w)===0?n.nodes.start:r;f!==null;){var c=$e(f);if(i.before(f),f===u)return;f=c}}function T(e,n,r){n===null?e.effect.first=r:n.next=r,r===null?e.effect.last=n:r.prev=n}const Ye={success:3e3,error:5e3,info:4e3,warning:4e3},de=50;let Ge=1,W=Z([]),z=Z([]);const $=Z({count:0});function sn(){return $.count}function B(e){const n=Ge++,r={id:n,...e};W.push(r),z.unshift({...r,timestamp:Date.now()}),z.length>de&&(z.length=de),$.count++;const f=Ye[e.type];return setTimeout(()=>{Ke(n)},f),n}function Ke(e){const n=W.findIndex(r=>r.id===e);n!==-1&&W.splice(n,1)}function on(){$.count=0}function fn(){z.length=0,$.count=0}function un(e){return B({type:"success",message:e})}function cn(e){return B({type:"error",message:e})}function ln(e){return B({type:"info",message:e})}class D extends Error{constructor(r,f,u,i){super(u);F(this,"code");F(this,"status");F(this,"data");this.name="ApiError",this.status=r,this.code=f,this.data=i}}async function Pe(e){try{const n=await e.json();return{code:n.code??"UNKNOWN",message:n.message??e.statusText,data:n.data}}catch{return{code:"UNKNOWN",message:e.statusText}}}async function Q(e,n={}){const r=K(Y),f={"Content-Type":"application/json",...n.headers};r.accessToken&&(f.Authorization=`Bearer ${r.accessToken}`);const u=await fetch(e,{method:n.method??"GET",headers:f,body:n.body!==void 0?JSON.stringify(n.body):void 0});if(u.status===401&&!n._skipRefresh){if(await Y.refresh())return Q(e,{...n,_skipRefresh:!0});throw Y.logout(),new D(401,"UNAUTHORIZED","Session expired")}if(!u.ok){const i=await Pe(u);throw new D(u.status,i.code,i.message,i.data)}if(u.status!==204)return u.json()}async function We(e,n={}){const r=Be(e);return Q(r,n)}async function Je(e,n={}){let r=K(ce);if(r.loaded||(await qe(),r=K(ce)),!r.devMode||r.sidecarPort===null)throw new D(0,"NOT_DEV_MODE","Schema mutations require dev mode with sidecar");const f=`http://localhost:${r.sidecarPort}/${e}`;try{return await Q(f,n)}catch(u){throw u instanceof D&&u.status===404?new D(404,u.code,"This dashboard action is not available on the current dev sidecar yet. Restart `pnpm dev` and try again."):u}}async function Ze(e,n){try{return await e()}catch(r){const f=r instanceof D||r instanceof Error?r.message:"Unknown error";return B({type:"error",message:n?`${n}: ${f}`:f}),null}}const dn={fetch:We,schemaMutation:Je,safeFetch:Ze};export{D as A,dn as a,un as b,B as c,ln as d,tn as e,z as f,sn as g,fn as h,an as i,W as j,on as m,Ke as r,cn as t};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{w as h,g as m}from"./Bn2NtlTj.js";import{b as g}from"./Cw6OYcq-.js";function c(e){return e.replace(/\/+$/,"")}function T(e){return!e||e==="/"?"":(e.startsWith("/")?e:`/${e}`).replace(/\/+$/,"")}function u(e,n){const t=c(e),a=n.startsWith("/")?n:`/${n}`;return`${t}${a}`}const l=c(""),d=c(""),j=T(g);function k(){return d||window.location.origin}function f(){return l||k()}function i(e=""){const n=e.replace(/^\/+/,"");return u(f(),n?`/admin/api/${n}`:"/admin/api")}function N(e=""){return u(f(),e||"/")}const p="edgebase_admin_auth",r=p;function y(){try{const e=localStorage.getItem(r);if(e){const n=JSON.parse(e);return{accessToken:n.accessToken??null,refreshToken:n.refreshToken??null,admin:n.admin??null}}}catch{try{localStorage.removeItem(r)}catch{}}return{accessToken:null,refreshToken:null,admin:null}}function S(e){try{localStorage.setItem(r,JSON.stringify(e))}catch{console.warn("[EdgeBase] Failed to save auth state to localStorage")}}function w(){try{localStorage.removeItem(r)}catch{console.warn("[EdgeBase] Failed to clear auth state from localStorage")}}const A=y(),o=h(A);o.subscribe(e=>{e.accessToken?S(e):w()});async function O(e,n){const t=await fetch(i("auth/login"),{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({email:e,password:n})});if(!t.ok){const s=await t.json().catch(()=>({}));throw new Error(s.message??"Login failed. Please check your email and password.")}const a=await t.json();o.set({accessToken:a.accessToken,refreshToken:a.refreshToken,admin:a.admin})}async function b(e,n){const t=await fetch(i("setup"),{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({email:e,password:n})});if(!t.ok){const s=await t.json().catch(()=>({}));throw new Error(s.message??"Failed to create admin account. Please check your details and try again.")}const a=await t.json();o.set({accessToken:a.accessToken,refreshToken:a.refreshToken,admin:a.admin})}async function P(){const e=m(o);if(!e.refreshToken)return!1;try{const n=await fetch(i("auth/refresh"),{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({refreshToken:e.refreshToken})});if(!n.ok)return!1;const t=await n.json();return o.set({accessToken:t.accessToken,refreshToken:t.refreshToken,admin:t.admin}),!0}catch{return!1}}function E(){o.set({accessToken:null,refreshToken:null,admin:null})}const R={subscribe:o.subscribe,set:o.set,update:o.update,login:O,setup:b,refresh:P,logout:E};export{p as A,R as a,f as b,N as c,j as d,i as g};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{d,w as g,g as l}from"./Bn2NtlTj.js";import{a as p}from"./BEW7Ez_g.js";function b(a){const e=a==null?void 0:a.trim();return e||void 0}function v(a,e={}){const t=`data/tables/${encodeURIComponent(a)}/records`,s=new URLSearchParams,n=b(e.instanceId);if(n&&s.set("instanceId",n),e.params instanceof URLSearchParams)for(const[i,o]of e.params.entries())s.set(i,o);else if(e.params)for(const[i,o]of Object.entries(e.params))o!=null&&`${o}`.length>0&&s.set(i,`${o}`);const c=s.toString();return c?`${t}?${c}`:t}function S(a,e,t={}){var o,r;const s=new URL(`${a}/database/tables/${encodeURIComponent(e)}`,"http://edgebase.local"),n=b(t.instanceId),c=(o=t.search)==null?void 0:o.trim(),i=(r=t.tab)==null?void 0:r.trim();return n&&s.searchParams.set("instance",n),c&&s.searchParams.set("search",c),i&&i!=="records"&&s.searchParams.set("tab",i),`${s.pathname}${s.search}`}const m=g({schema:{},namespaces:{},loading:!1,error:null});function u(a){const e={};for(const t of Object.values(a))t.namespace&&(e[t.namespace]={provider:t.provider,dynamic:t.dynamic,instanceDiscovery:t.instanceDiscovery});return e}async function f(a={}){a.silent||m.update(e=>({...e,loading:!0,error:null}));try{const e=await p.fetch("data/schema");return m.set({schema:e.schema,namespaces:e.namespaces??u(e.schema),loading:!1,error:null}),e.schema}catch(e){const t=e instanceof Error?e.message:"Failed to load schema";return m.update(s=>({...s,loading:!1,error:t})),null}}function h(a){return new Promise(e=>setTimeout(e,a))}async function y(a,e={}){const{timeoutMs:t=5e3,intervalMs:s=250,timeoutMessage:n="Schema update did not propagate in time."}=e,c=l(m).schema;if(a(c))return c;const i=Date.now()+t;let o=null;for(;Date.now()<i;){const r=await f({silent:!0});if(r&&a(r))return r;r||(o=new Error(l(m).error||n)),await h(s)}throw o??new Error(n)}async function D(a,e={}){const{namespace:t,timeoutMs:s=5e3,intervalMs:n=250,timeoutMessage:c=`Table "${a}" did not become ready in time.`}=e;await y(r=>{const w=r[a];return!!(w&&(!t||w.namespace===t))},{timeoutMs:s,intervalMs:n,timeoutMessage:c});const i=Date.now()+s;let o=null;for(;Date.now()<i;){try{const r=l(m).schema[a];if(r!=null&&r.dynamic)return;await p.fetch(v(a,{params:{limit:1}}));return}catch(r){o=r instanceof Error?r:new Error(`Table "${a}" is not ready yet.`)}await h(n)}throw o??new Error(c)}async function E(a,e={}){const{timeoutMs:t=5e3,intervalMs:s=250,timeoutMessage:n=`Database block "${a}" did not become ready in time.`}=e,c=()=>{const r=l(m);return!!(r.namespaces[a]||u(r.schema)[a])};if(c())return;const i=Date.now()+t;let o=null;for(;Date.now()<i;){const r=await f({silent:!0});if(r&&c())return;r||(o=new Error(l(m).error||n)),await h(s)}throw o??new Error(n)}const P=d(m,a=>{const e={};for(const[t,s]of Object.entries(a.schema)){const n=s.namespace||"default";e[n]||(e[n]=[]),e[n].push({name:t,def:s})}for(const t of Object.values(e))t.sort((s,n)=>s.name.localeCompare(n.name));return e}),$=d(m,a=>{const e={...a.namespaces};for(const[t,s]of Object.entries(u(a.schema)))e[t]??(e[t]=s);return e}),R=d($,a=>Object.keys(a).sort());d(m,a=>Object.keys(a.schema).sort());const j={subscribe:m.subscribe,loadSchema:f,waitForSchema:y,waitForNamespaceReady:E,waitForTableReady:D};export{$ as a,S as b,v as c,b as d,R as n,j as s,P as t};
|
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
import{b5 as z,a0 as R,a3 as B,F as q,h as T,aa as x,_ as M,a8 as rr,az as ir,b6 as fr,ad as ar,ac as tr,b7 as er,b8 as ur,b9 as sr,ba as or,g as cr,bb as lr,bc as nr,bd as C,D as V,be as vr,bf as dr,I as br,bg as gr}from"./BdTBlfLy.js";import{i as hr,a as _r,d as Ar,c as Sr,n as Tr,b as Nr}from"./DtZk82gG.js";function pr(r,f){var i=void 0,a;z(()=>{i!==(i=f())&&(a&&(R(a),a=null),i&&(a=B(()=>{q(()=>i(r))})))})}function F(r){var f,i,a="";if(typeof r=="string"||typeof r=="number")a+=r;else if(typeof r=="object")if(Array.isArray(r)){var t=r.length;for(f=0;f<t;f++)r[f]&&(i=F(r[f]))&&(a&&(a+=" "),a+=i)}else for(i in r)r[i]&&(a&&(a+=" "),a+=i);return a}function Or(){for(var r,f,i=0,a="",t=arguments.length;i<t;i++)(r=arguments[i])&&(f=F(r))&&(a&&(a+=" "),a+=f);return a}function Er(r){return typeof r=="object"?Or(r):r??""}const D=[...`
|
|
2
|
-
\r\f \v\uFEFF`];function Ir(r,f,i){var a=r==null?"":""+r;if(f&&(a=a?a+" "+f:f),i){for(var t of Object.keys(i))if(i[t])a=a?a+" "+t:t;else if(a.length)for(var e=t.length,u=0;(u=a.indexOf(t,u))>=0;){var o=u+e;(u===0||D.includes(a[u-1]))&&(o===a.length||D.includes(a[o]))?a=(u===0?"":a.substring(0,u))+a.substring(o+1):u=o}}return a===""?null:a}function K(r,f=!1){var i=f?" !important;":";",a="";for(var t of Object.keys(r)){var e=r[t];e!=null&&e!==""&&(a+=" "+t+": "+e+i)}return a}function j(r){return r[0]!=="-"||r[1]!=="-"?r.toLowerCase():r}function Lr(r,f){if(f){var i="",a,t;if(Array.isArray(f)?(a=f[0],t=f[1]):a=f,r){r=String(r).replaceAll(/\s*\/\*.*?\*\/\s*/g,"").trim();var e=!1,u=0,o=!1,n=[];a&&n.push(...Object.keys(a).map(j)),t&&n.push(...Object.keys(t).map(j));var v=0,h=-1;const p=r.length;for(var d=0;d<p;d++){var s=r[d];if(o?s==="/"&&r[d-1]==="*"&&(o=!1):e?e===s&&(e=!1):s==="/"&&r[d+1]==="*"?o=!0:s==='"'||s==="'"?e=s:s==="("?u++:s===")"&&u--,!o&&e===!1&&u===0){if(s===":"&&h===-1)h=d;else if(s===";"||d===p-1){if(h!==-1){var N=j(r.substring(v,h).trim());if(!n.includes(N)){s!==";"&&d++;var S=r.substring(v,d).trim();i+=" "+S+";"}}v=d+1,h=-1}}}}return a&&(i+=K(a)),t&&(i+=K(t,!0)),i=i.trim(),i===""?null:i}return r==null?null:String(r)}function kr(r,f,i,a,t,e){var u=r.__className;if(T||u!==i||u===void 0){var o=Ir(i,a,e);(!T||o!==r.getAttribute("class"))&&(o==null?r.removeAttribute("class"):f?r.className=o:r.setAttribute("class",o)),r.__className=i}else if(e&&t!==e)for(var n in e){var v=!!e[n];(t==null||v!==!!t[n])&&r.classList.toggle(n,v)}return e}function G(r,f={},i,a){for(var t in i){var e=i[t];f[t]!==e&&(i[t]==null?r.style.removeProperty(t):r.style.setProperty(t,e,a))}}function Cr(r,f,i,a){var t=r.__style;if(T||t!==f){var e=Lr(f,a);(!T||e!==r.getAttribute("style"))&&(e==null?r.removeAttribute("style"):r.style.cssText=e),r.__style=f}else a&&(Array.isArray(a)?(G(r,i==null?void 0:i[0],a[0]),G(r,i==null?void 0:i[1],a[1],"important")):G(r,i,a));return a}function P(r,f,i=!1){if(r.multiple){if(f==null)return;if(!ir(f))return fr();for(var a of r.options)a.selected=f.includes(k(a));return}for(a of r.options){var t=k(a);if(ar(t,f)){a.selected=!0;return}}(!i||f!==void 0)&&(r.selectedIndex=-1)}function W(r){var f=new MutationObserver(()=>{P(r,r.__value)});f.observe(r,{childList:!0,subtree:!0,attributes:!0,attributeFilter:["value"]}),rr(()=>{f.disconnect()})}function Hr(r,f,i=f){var a=new WeakSet,t=!0;x(r,"change",e=>{var u=e?"[selected]":":checked",o;if(r.multiple)o=[].map.call(r.querySelectorAll(u),k);else{var n=r.querySelector(u)??r.querySelector("option:not([disabled])");o=n&&k(n)}i(o),M!==null&&a.add(M)}),q(()=>{var e=f();if(r===document.activeElement){var u=tr??M;if(a.has(u))return}if(P(r,e,t),t&&e===void 0){var o=r.querySelector(":checked");o!==null&&(e=k(o),i(e))}r.__value=e,t=!1}),W(r)}function k(r){return"__value"in r?r.__value:r.value}const I=Symbol("class"),L=Symbol("style"),X=Symbol("is custom element"),Z=Symbol("is html"),Pr=C?"link":"LINK",wr=C?"input":"INPUT",yr=C?"option":"OPTION",Mr=C?"select":"SELECT",jr=C?"progress":"PROGRESS";function Gr(r){if(T){var f=!1,i=()=>{if(!f){if(f=!0,r.hasAttribute("value")){var a=r.value;w(r,"value",null),r.value=a}if(r.hasAttribute("checked")){var t=r.checked;w(r,"checked",null),r.checked=t}}};r.__on_r=i,br(i),gr()}}function Vr(r,f){var i=y(r);i.value===(i.value=f??void 0)||r.value===f&&(f!==0||r.nodeName!==jr)||(r.value=f??"")}function Dr(r,f){var i=y(r);i.checked!==(i.checked=f??void 0)&&(r.checked=f)}function Rr(r,f){f?r.hasAttribute("selected")||r.setAttribute("selected",""):r.removeAttribute("selected")}function w(r,f,i,a){var t=y(r);T&&(t[f]=r.getAttribute(f),f==="src"||f==="srcset"||f==="href"&&r.nodeName===Pr)||t[f]!==(t[f]=i)&&(f==="loading"&&(r[ur]=i),i==null?r.removeAttribute(f):typeof i!="string"&&J(r).includes(f)?r[f]=i:r.setAttribute(f,i))}function qr(r,f,i,a,t=!1,e=!1){if(T&&t&&r.nodeName===wr){var u=r,o=u.type==="checkbox"?"defaultChecked":"defaultValue";o in i||Gr(u)}var n=y(r),v=n[X],h=!n[Z];let d=T&&v;d&&V(!1);var s=f||{},N=r.nodeName===yr;for(var S in f)S in i||(i[S]=null);i.class?i.class=Er(i.class):(a||i[I])&&(i.class=null),i[L]&&(i.style??(i.style=null));var p=J(r);for(const c in i){let l=i[c];if(N&&c==="value"&&l==null){r.value=r.__value="",s[c]=l;continue}if(c==="class"){var E=r.namespaceURI==="http://www.w3.org/1999/xhtml";kr(r,E,l,a,f==null?void 0:f[I],i[I]),s[c]=l,s[I]=i[I];continue}if(c==="style"){Cr(r,l,f==null?void 0:f[L],i[L]),s[c]=l,s[L]=i[L];continue}var _=s[c];if(!(l===_&&!(l===void 0&&r.hasAttribute(c)))){s[c]=l;var U=c[0]+c[1];if(U!=="$$")if(U==="on"){const A={},O="$$"+c;let g=c.slice(2);var $=Nr(g);if(hr(g)&&(g=g.slice(0,-7),A.capture=!0),!$&&_){if(l!=null)continue;r.removeEventListener(g,s[O],A),s[O]=null}if($)_r(g,r,l),Ar([g]);else if(l!=null){let Q=function(m){s[c].call(this,m)};s[O]=Sr(g,r,Q,A)}}else if(c==="style")w(r,c,l);else if(c==="autofocus")vr(r,!!l);else if(!v&&(c==="__value"||c==="value"&&l!=null))r.value=r.__value=l;else if(c==="selected"&&N)Rr(r,l);else{var b=c;h||(b=Tr(b));var H=b==="defaultValue"||b==="defaultChecked";if(l==null&&!v&&!H)if(n[c]=null,b==="value"||b==="checked"){let A=r;const O=f===void 0;if(b==="value"){let g=A.defaultValue;A.removeAttribute(b),A.defaultValue=g,A.value=A.__value=O?g:null}else{let g=A.defaultChecked;A.removeAttribute(b),A.defaultChecked=g,A.checked=O?g:!1}}else r.removeAttribute(c);else H||p.includes(b)&&(v||typeof l!="string")?(r[b]=l,b in n&&(n[b]=dr)):typeof l!="function"&&w(r,b,l)}}}return d&&V(!0),s}function Kr(r,f,i=[],a=[],t=[],e,u=!1,o=!1){er(t,i,a,n=>{var v=void 0,h={},d=r.nodeName===Mr,s=!1;if(z(()=>{var S=f(...n.map(cr)),p=qr(r,v,S,e,u,o);s&&d&&"value"in S&&P(r,S.value);for(let _ of Object.getOwnPropertySymbols(h))S[_]||R(h[_]);for(let _ of Object.getOwnPropertySymbols(S)){var E=S[_];_.description===lr&&(!v||E!==v[_])&&(h[_]&&R(h[_]),h[_]=B(()=>pr(r,()=>E))),p[_]=E}v=p}),d){var N=r;q(()=>{P(N,v.value,!0),W(N)})}s=!0})}function y(r){return r.__attributes??(r.__attributes={[X]:r.nodeName.includes("-"),[Z]:r.namespaceURI===sr})}var Y=new Map;function J(r){var f=r.getAttribute("is")||r.nodeName,i=Y.get(f);if(i)return i;Y.set(f,i=[]);for(var a,t=r,e=Element.prototype;e!==t;){a=nr(t);for(var u in a)a[u].set&&i.push(u);t=or(t)}return i}export{I as C,w as a,Hr as b,Cr as c,Kr as d,Dr as e,Er as f,Vr as g,P as h,W as i,Gr as r,kr as s};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{ab as J,bm as ee}from"./BdTBlfLy.js";import{w as ae}from"./Bn2NtlTj.js";import{H as N,N as M,r as gt,o as $t,i as _t,b as L,s as j,p as x,n as ft,f as Nt,g as ut,a as X,c as it,S as Dt,P as ne,d as re,e as oe,h as se,j as Pt,k as q,l as ie,m as qt,q as ce,t as le,u as Kt,v as fe}from"./Cw6OYcq-.js";class wt{constructor(a,e){this.status=a,typeof e=="string"?this.body={message:e}:e?this.body=e:this.body={message:`Error: ${a}`}}toString(){return JSON.stringify(this.body)}}class vt{constructor(a,e){this.status=a,this.location=e}}class yt extends Error{constructor(a,e,r){super(r),this.status=a,this.text=e}}const ue=/^(\[)?(\.\.\.)?(\w+)(?:=(\w+))?(\])?$/;function he(t){const a=[];return{pattern:t==="/"?/^\/$/:new RegExp(`^${pe(t).map(r=>{const n=/^\[\.\.\.(\w+)(?:=(\w+))?\]$/.exec(r);if(n)return a.push({name:n[1],matcher:n[2],optional:!1,rest:!0,chained:!0}),"(?:/([^]*))?";const o=/^\[\[(\w+)(?:=(\w+))?\]\]$/.exec(r);if(o)return a.push({name:o[1],matcher:o[2],optional:!0,rest:!1,chained:!0}),"(?:/([^/]+))?";if(!r)return;const s=r.split(/\[(.+?)\](?!\])/);return"/"+s.map((c,l)=>{if(l%2){if(c.startsWith("x+"))return ct(String.fromCharCode(parseInt(c.slice(2),16)));if(c.startsWith("u+"))return ct(String.fromCharCode(...c.slice(2).split("-").map(_=>parseInt(_,16))));const h=ue.exec(c),[,u,w,f,d]=h;return a.push({name:f,matcher:d,optional:!!u,rest:!!w,chained:w?l===1&&s[0]==="":!1}),w?"([^]*?)":u?"([^/]*)?":"([^/]+?)"}return ct(c)}).join("")}).join("")}/?$`),params:a}}function de(t){return t!==""&&!/^\([^)]+\)$/.test(t)}function pe(t){return t.slice(1).split("/").filter(de)}function me(t,a,e){const r={},n=t.slice(1),o=n.filter(i=>i!==void 0);let s=0;for(let i=0;i<a.length;i+=1){const c=a[i];let l=n[i-s];if(c.chained&&c.rest&&s&&(l=n.slice(i-s,i+1).filter(h=>h).join("/"),s=0),l===void 0)if(c.rest)l="";else continue;if(!c.matcher||e[c.matcher](l)){r[c.name]=l;const h=a[i+1],u=n[i+1];h&&!h.rest&&h.optional&&u&&c.chained&&(s=0),!h&&!u&&Object.keys(r).length===o.length&&(s=0);continue}if(c.optional&&c.chained){s++;continue}return}if(!s)return r}function ct(t){return t.normalize().replace(/[[\]]/g,"\\$&").replace(/%/g,"%25").replace(/\//g,"%2[Ff]").replace(/\?/g,"%3[Ff]").replace(/#/g,"%23").replace(/[.*+?^${}()|\\]/g,"\\$&")}function ge({nodes:t,server_loads:a,dictionary:e,matchers:r}){const n=new Set(a);return Object.entries(e).map(([i,[c,l,h]])=>{const{pattern:u,params:w}=he(i),f={id:i,exec:d=>{const _=u.exec(d);if(_)return me(_,w,r)},errors:[1,...h||[]].map(d=>t[d]),layouts:[0,...l||[]].map(s),leaf:o(c)};return f.errors.length=f.layouts.length=Math.max(f.errors.length,f.layouts.length),f});function o(i){const c=i<0;return c&&(i=~i),[c,t[i]]}function s(i){return i===void 0?i:[n.has(i),t[i]]}}function Ft(t,a=JSON.parse){try{return a(sessionStorage[t])}catch{}}function It(t,a,e=JSON.stringify){const r=e(a);try{sessionStorage[t]=r}catch{}}function _e(t){return t.filter(a=>a!=null)}function bt(t){return t instanceof wt||t instanceof yt?t.status:500}function we(t){return t instanceof yt?t.text:"Internal Error"}const ve=new Set(["icon","shortcut icon","apple-touch-icon"]),I=Ft(Kt)??{},V=Ft(qt)??{},P={url:Pt({}),page:Pt({}),navigating:ae(null),updated:se()};function Et(t){I[t]=j()}function ye(t,a){let e=t+1;for(;I[e];)delete I[e],e+=1;for(e=a+1;V[e];)delete V[e],e+=1}function B(t,a=!1){return a?location.replace(t.href):location.href=t.href,new Promise(()=>{})}async function Mt(){if("serviceWorker"in navigator){const t=await navigator.serviceWorker.getRegistration(L||"/");t&&await t.update()}}function Tt(){}let kt,ht,Q,U,dt,E;const Z=[],tt=[];let v=null;function pt(){var t;(t=v==null?void 0:v.fork)==null||t.then(a=>a==null?void 0:a.discard()),v=null}const G=new Map,Vt=new Set,be=new Set,F=new Set;let g={branch:[],error:null,url:null},Bt=!1,et=!1,Ot=!0,H=!1,K=!1,Ht=!1,St=!1,Yt,b,R,O;const at=new Set,jt=new Map;async function Fe(t,a,e){var o,s,i,c,l;(o=globalThis.__sveltekit_1k0lbsj)!=null&&o.data&&globalThis.__sveltekit_1k0lbsj.data,document.URL!==location.href&&(location.href=location.href),E=t,await((i=(s=t.hooks).init)==null?void 0:i.call(s)),kt=ge(t),U=document.documentElement,dt=a,ht=t.nodes[0],Q=t.nodes[1],ht(),Q(),b=(c=history.state)==null?void 0:c[N],R=(l=history.state)==null?void 0:l[M],b||(b=R=Date.now(),history.replaceState({...history.state,[N]:b,[M]:R},""));const r=I[b];function n(){r&&(history.scrollRestoration="manual",scrollTo(r.x,r.y))}e?(n(),await je(dt,e)):(await D({type:"enter",url:gt(E.hash?Ne(new URL(location.href)):location.href),replace_state:!0}),n()),Oe()}function Ee(){Z.length=0,St=!1}function zt(t){tt.some(a=>a==null?void 0:a.snapshot)&&(V[t]=tt.map(a=>{var e;return(e=a==null?void 0:a.snapshot)==null?void 0:e.capture()}))}function Wt(t){var a;(a=V[t])==null||a.forEach((e,r)=>{var n,o;(o=(n=tt[r])==null?void 0:n.snapshot)==null||o.restore(e)})}function Ct(){Et(b),It(Kt,I),zt(R),It(qt,V)}async function Gt(t,a,e,r){let n;a.invalidateAll&&pt(),await D({type:"goto",url:gt(t),keepfocus:a.keepFocus,noscroll:a.noScroll,replace_state:a.replaceState,state:a.state,redirect_count:e,nav_token:r,accept:()=>{a.invalidateAll&&(St=!0,n=[...jt.keys()]),a.invalidate&&a.invalidate.forEach(Te)}}),a.invalidateAll&&J().then(J).then(()=>{jt.forEach(({resource:o},s)=>{var i;n!=null&&n.includes(s)&&((i=o.refresh)==null||i.call(o))})})}async function ke(t){if(t.id!==(v==null?void 0:v.id)){pt();const a={};at.add(a),v={id:t.id,token:a,promise:Xt({...t,preload:a}).then(e=>(at.delete(a),e.type==="loaded"&&e.state.error&&pt(),e)),fork:null}}return v.promise}async function lt(t){var e;const a=(e=await ot(t,!1))==null?void 0:e.route;a&&await Promise.all([...a.layouts,a.leaf].map(r=>r==null?void 0:r[1]()))}async function Jt(t,a,e){var n;g=t.state;const r=document.querySelector("style[data-sveltekit]");if(r&&r.remove(),Object.assign(x,t.props.page),Yt=new E.root({target:a,props:{...t.props,stores:P,components:tt},hydrate:e,sync:!1}),await Promise.resolve(),Wt(R),e){const o={from:null,to:{params:g.params,route:{id:((n=g.route)==null?void 0:n.id)??null},url:new URL(location.href),scroll:I[b]??j()},willUnload:!1,type:"enter",complete:Promise.resolve()};F.forEach(s=>s(o))}et=!0}function nt({url:t,params:a,branch:e,status:r,error:n,route:o,form:s}){let i="never";if(L&&(t.pathname===L||t.pathname===L+"/"))i="always";else for(const f of e)(f==null?void 0:f.slash)!==void 0&&(i=f.slash);t.pathname=oe(t.pathname,i),t.search=t.search;const c={type:"loaded",state:{url:t,params:a,branch:e,error:n,route:o},props:{constructors:_e(e).map(f=>f.node.component),page:At(x)}};s!==void 0&&(c.props.form=s);let l={},h=!x,u=0;for(let f=0;f<Math.max(e.length,g.branch.length);f+=1){const d=e[f],_=g.branch[f];(d==null?void 0:d.data)!==(_==null?void 0:_.data)&&(h=!0),d&&(l={...l,...d.data},h&&(c.props[`data_${u}`]=l),u+=1)}return(!g.url||t.href!==g.url.href||g.error!==n||s!==void 0&&s!==x.form||h)&&(c.props.page={error:n,params:a,route:{id:(o==null?void 0:o.id)??null},state:{},status:r,url:new URL(t),form:s??null,data:h?l:x.data}),c}async function Rt({loader:t,parent:a,url:e,params:r,route:n,server_data_node:o}){var l,h;let s=null;const i={dependencies:new Set,params:new Set,parent:!1,route:!1,url:!1,search_params:new Set},c=await t();return{node:c,loader:t,server:o,universal:(l=c.universal)!=null&&l.load?{type:"data",data:s,uses:i}:null,data:s??(o==null?void 0:o.data)??null,slash:((h=c.universal)==null?void 0:h.trailingSlash)??(o==null?void 0:o.slash)}}function Se(t,a,e){let r=t instanceof Request?t.url:t;const n=new URL(r,e);n.origin===e.origin&&(r=n.href.slice(e.origin.length));const o=et?ce(r,n.href,a):le(r,a);return{resolved:n,promise:o}}function Re(t,a,e,r,n,o){if(St)return!0;if(!n)return!1;if(n.parent&&t||n.route&&a||n.url&&e)return!0;for(const s of n.search_params)if(r.has(s))return!0;for(const s of n.params)if(o[s]!==g.params[s])return!0;for(const s of n.dependencies)if(Z.some(i=>i(new URL(s))))return!0;return!1}function xt(t,a){return(t==null?void 0:t.type)==="data"?t:(t==null?void 0:t.type)==="skip"?a??null:null}function xe(t,a){if(!t)return new Set(a.searchParams.keys());const e=new Set([...t.searchParams.keys(),...a.searchParams.keys()]);for(const r of e){const n=t.searchParams.getAll(r),o=a.searchParams.getAll(r);n.every(s=>o.includes(s))&&o.every(s=>n.includes(s))&&e.delete(r)}return e}function Le({error:t,url:a,route:e,params:r}){return{type:"loaded",state:{error:t,url:a,route:e,params:r,branch:[]},props:{page:At(x),constructors:[]}}}async function Xt({id:t,invalidating:a,url:e,params:r,route:n,preload:o}){if((v==null?void 0:v.id)===t)return at.delete(v.token),v.promise;const{errors:s,layouts:i,leaf:c}=n,l=[...i,c];s.forEach(m=>m==null?void 0:m().catch(()=>{})),l.forEach(m=>m==null?void 0:m[1]().catch(()=>{}));const h=g.url?t!==rt(g.url):!1,u=g.route?n.id!==g.route.id:!1,w=xe(g.url,e);let f=!1;const d=l.map(async(m,p)=>{var A;if(!m)return;const y=g.branch[p];return m[1]===(y==null?void 0:y.loader)&&!Re(f,u,h,w,(A=y.universal)==null?void 0:A.uses,r)?y:(f=!0,Rt({loader:m[1],url:e,params:r,route:n,parent:async()=>{var z;const T={};for(let C=0;C<p;C+=1)Object.assign(T,(z=await d[C])==null?void 0:z.data);return T},server_data_node:xt(m[0]?{type:"skip"}:null,m[0]?y==null?void 0:y.server:void 0)}))});for(const m of d)m.catch(()=>{});const _=[];for(let m=0;m<l.length;m+=1)if(l[m])try{_.push(await d[m])}catch(p){if(p instanceof vt)return{type:"redirect",location:p.location};if(at.has(o))return Le({error:await Y(p,{params:r,url:e,route:{id:n.id}}),url:e,params:r,route:n});let y=bt(p),S;if(p instanceof wt)S=p.body;else{if(await P.updated.check())return await Mt(),await B(e);S=await Y(p,{params:r,url:e,route:{id:n.id}})}const A=await Ue(m,_,s);return A?nt({url:e,params:r,branch:_.slice(0,A.idx).concat(A.node),status:y,error:S,route:n}):await Zt(e,{id:n.id},S,y)}else _.push(void 0);return nt({url:e,params:r,branch:_,status:200,error:null,route:n,form:a?void 0:null})}async function Ue(t,a,e){for(;t--;)if(e[t]){let r=t;for(;!a[r];)r-=1;try{return{idx:r+1,node:{node:await e[t](),loader:e[t],data:{},server:null,universal:null}}}catch{continue}}}async function Lt({status:t,error:a,url:e,route:r}){const n={};let o=null;try{const s=await Rt({loader:ht,url:e,params:n,route:r,parent:()=>Promise.resolve({}),server_data_node:xt(o)}),i={node:await Q(),loader:Q,universal:null,server:null,data:null};return nt({url:e,params:n,branch:[s,i],status:t,error:a,route:null})}catch(s){if(s instanceof vt)return Gt(new URL(s.location,location.href),{},0);throw s}}async function Ae(t){const a=t.href;if(G.has(a))return G.get(a);let e;try{const r=(async()=>{let n=await E.hooks.reroute({url:new URL(t),fetch:async(o,s)=>Se(o,s,t).promise})??t;if(typeof n=="string"){const o=new URL(t);E.hash?o.hash=n:o.pathname=n,n=o}return n})();G.set(a,r),e=await r}catch{G.delete(a);return}return e}async function ot(t,a){if(t&&!_t(t,L,E.hash)){const e=await Ae(t);if(!e)return;const r=Pe(e);for(const n of kt){const o=n.exec(r);if(o)return{id:rt(t),invalidating:a,route:n,params:re(o),url:t}}}}function Pe(t){return ie(E.hash?t.hash.replace(/^#/,"").replace(/[?#].+/,""):t.pathname.slice(L.length))||"/"}function rt(t){return(E.hash?t.hash.replace(/^#/,""):t.pathname)+t.search}function Qt({url:t,type:a,intent:e,delta:r,event:n,scroll:o}){let s=!1;const i=Ut(g,e,t,a,o??null);r!==void 0&&(i.navigation.delta=r),n!==void 0&&(i.navigation.event=n);const c={...i.navigation,cancel:()=>{s=!0,i.reject(new Error("navigation cancelled"))}};return H||Vt.forEach(l=>l(c)),s?null:i}async function D({type:t,url:a,popped:e,keepfocus:r,noscroll:n,replace_state:o,state:s={},redirect_count:i=0,nav_token:c={},accept:l=Tt,block:h=Tt,event:u}){var C;const w=O;O=c;const f=await ot(a,!1),d=t==="enter"?Ut(g,f,a,t):Qt({url:a,type:t,delta:e==null?void 0:e.delta,intent:f,scroll:e==null?void 0:e.scroll,event:u});if(!d){h(),O===c&&(O=w);return}const _=b,m=R;l(),H=!0,et&&d.navigation.type!=="enter"&&P.navigating.set(ft.current=d.navigation);let p=f&&await Xt(f);if(!p){if(_t(a,L,E.hash))return await B(a,o);p=await Zt(a,{id:null},await Y(new yt(404,"Not Found",`Not found: ${a.pathname}`),{url:a,params:{},route:{id:null}}),404,o)}if(a=(f==null?void 0:f.url)||a,O!==c)return d.reject(new Error("navigation aborted")),!1;if(p.type==="redirect"){if(i<20){await D({type:t,url:new URL(p.location,a),popped:e,keepfocus:r,noscroll:n,replace_state:o,state:s,redirect_count:i+1,nav_token:c}),d.fulfil(void 0);return}p=await Lt({status:500,error:await Y(new Error("Redirect loop"),{url:a,params:{},route:{id:null}}),url:a,route:{id:null}})}else p.props.page.status>=400&&await P.updated.check()&&(await Mt(),await B(a,o));if(Ee(),Et(_),zt(m),p.props.page.url.pathname!==a.pathname&&(a.pathname=p.props.page.url.pathname),s=e?e.state:s,!e){const k=o?0:1,W={[N]:b+=k,[M]:R+=k,[Dt]:s};(o?history.replaceState:history.pushState).call(history,W,"",a),o||ye(b,R)}const y=f&&(v==null?void 0:v.id)===f.id?v.fork:null;v=null,p.props.page.state=s;let S;if(et){const k=(await Promise.all(Array.from(be,$=>$(d.navigation)))).filter($=>typeof $=="function");if(k.length>0){let $=function(){k.forEach(st=>{F.delete(st)})};k.push($),k.forEach(st=>{F.add(st)})}g=p.state,p.props.page&&(p.props.page.url=a);const W=y&&await y;W?S=W.commit():(Yt.$set(p.props),fe(p.props.page),S=(C=ee)==null?void 0:C()),Ht=!0}else await Jt(p,dt,!1);const{activeElement:A}=document;await S,await J(),await J();let T=null;if(Ot){const k=e?e.scroll:n?j():null;k?scrollTo(k.x,k.y):(T=a.hash&&document.getElementById(te(a)))?T.scrollIntoView():scrollTo(0,0)}const z=document.activeElement!==A&&document.activeElement!==document.body;!r&&!z&&$e(a,!T),Ot=!0,p.props.page&&Object.assign(x,p.props.page),H=!1,t==="popstate"&&Wt(R),d.fulfil(void 0),d.navigation.to&&(d.navigation.to.scroll=j()),F.forEach(k=>k(d.navigation)),P.navigating.set(ft.current=null)}async function Zt(t,a,e,r,n){return t.origin===$t&&t.pathname===location.pathname&&!Bt?await Lt({status:r,error:e,url:t,route:a}):await B(t,n)}function Ie(){let t,a={element:void 0,href:void 0},e;U.addEventListener("mousemove",i=>{const c=i.target;clearTimeout(t),t=setTimeout(()=>{o(c,q.hover)},20)});function r(i){i.defaultPrevented||o(i.composedPath()[0],q.tap)}U.addEventListener("mousedown",r),U.addEventListener("touchstart",r,{passive:!0});const n=new IntersectionObserver(i=>{for(const c of i)c.isIntersecting&&(lt(new URL(c.target.href)),n.unobserve(c.target))},{threshold:0});async function o(i,c){const l=Nt(i,U),h=l===a.element&&(l==null?void 0:l.href)===a.href&&c>=e;if(!l||h)return;const{url:u,external:w,download:f}=ut(l,L,E.hash);if(w||f)return;const d=X(l),_=u&&rt(g.url)===rt(u);if(!(d.reload||_))if(c<=d.preload_data){a={element:l,href:l.href},e=q.tap;const m=await ot(u,!1);if(!m)return;ke(m)}else c<=d.preload_code&&(a={element:l,href:l.href},e=c,lt(u))}function s(){n.disconnect();for(const i of U.querySelectorAll("a")){const{url:c,external:l,download:h}=ut(i,L,E.hash);if(l||h)continue;const u=X(i);u.reload||(u.preload_code===q.viewport&&n.observe(i),u.preload_code===q.eager&<(c))}}F.add(s),s()}function Y(t,a){if(t instanceof wt)return t.body;const e=bt(t),r=we(t);return E.hooks.handleError({error:t,event:a,status:e,message:r})??{message:r}}function Me(t,a={}){return t=new URL(gt(t)),t.origin!==$t?Promise.reject(new Error("goto: invalid URL")):Gt(t,a,0)}function Te(t){if(typeof t=="function")Z.push(t);else{const{href:a}=new URL(t,location.href);Z.push(e=>e.href===a)}}function Oe(){var a;history.scrollRestoration="manual",addEventListener("beforeunload",e=>{let r=!1;if(Ct(),!H){const n=Ut(g,void 0,null,"leave"),o={...n.navigation,cancel:()=>{r=!0,n.reject(new Error("navigation cancelled"))}};Vt.forEach(s=>s(o))}r?(e.preventDefault(),e.returnValue=""):history.scrollRestoration="auto"}),addEventListener("visibilitychange",()=>{document.visibilityState==="hidden"&&Ct()}),(a=navigator.connection)!=null&&a.saveData||Ie(),U.addEventListener("click",async e=>{if(e.button||e.which!==1||e.metaKey||e.ctrlKey||e.shiftKey||e.altKey||e.defaultPrevented)return;const r=Nt(e.composedPath()[0],U);if(!r)return;const{url:n,external:o,target:s,download:i}=ut(r,L,E.hash);if(!n)return;if(s==="_parent"||s==="_top"){if(window.parent!==window)return}else if(s&&s!=="_self")return;const c=X(r);if(!(r instanceof SVGAElement)&&n.protocol!==location.protocol&&!(n.protocol==="https:"||n.protocol==="http:")||i)return;const[h,u]=(E.hash?n.hash.replace(/^#/,""):n.href).split("#"),w=h===it(location);if(o||c.reload&&(!w||!u)){Qt({url:n,type:"link",event:e})?H=!0:e.preventDefault();return}if(u!==void 0&&w){const[,f]=g.url.href.split("#");if(f===u){if(e.preventDefault(),u===""||u==="top"&&r.ownerDocument.getElementById("top")===null)scrollTo({top:0});else{const d=r.ownerDocument.getElementById(decodeURIComponent(u));d&&(d.scrollIntoView(),d.focus())}return}if(K=!0,Et(b),t(n),!c.replace_state)return;K=!1}e.preventDefault(),await new Promise(f=>{requestAnimationFrame(()=>{setTimeout(f,0)}),setTimeout(f,100)}),await D({type:"link",url:n,keepfocus:c.keepfocus,noscroll:c.noscroll,replace_state:c.replace_state??n.href===location.href,event:e})}),U.addEventListener("submit",e=>{if(e.defaultPrevented)return;const r=HTMLFormElement.prototype.cloneNode.call(e.target),n=e.submitter;if(((n==null?void 0:n.formTarget)||r.target)==="_blank"||((n==null?void 0:n.formMethod)||r.method)!=="get")return;const i=new URL((n==null?void 0:n.hasAttribute("formaction"))&&(n==null?void 0:n.formAction)||r.action);if(_t(i,L,!1))return;const c=e.target,l=X(c);if(l.reload)return;e.preventDefault(),e.stopPropagation();const h=new FormData(c,n);i.search=new URLSearchParams(h).toString(),D({type:"form",url:i,keepfocus:l.keepfocus,noscroll:l.noscroll,replace_state:l.replace_state??i.href===location.href,event:e})}),addEventListener("popstate",async e=>{var r;if(!mt){if((r=e.state)!=null&&r[N]){const n=e.state[N];if(O={},n===b)return;const o=I[n],s=e.state[Dt]??{},i=new URL(e.state[ne]??location.href),c=e.state[M],l=g.url?it(location)===it(g.url):!1;if(c===R&&(Ht||l)){s!==x.state&&(x.state=s),t(i),I[b]=j(),o&&scrollTo(o.x,o.y),b=n;return}const u=n-b;await D({type:"popstate",url:i,popped:{state:s,scroll:o,delta:u},accept:()=>{b=n,R=c},block:()=>{history.go(-u)},nav_token:O,event:e})}else if(!K){const n=new URL(location.href);t(n),E.hash&&location.reload()}}}),addEventListener("hashchange",()=>{K&&(K=!1,history.replaceState({...history.state,[N]:++b,[M]:R},"",location.href))});for(const e of document.querySelectorAll("link"))ve.has(e.rel)&&(e.href=e.href);addEventListener("pageshow",e=>{e.persisted&&P.navigating.set(ft.current=null)});function t(e){g.url=x.url=e,P.page.set(At(x)),P.page.notify()}}async function je(t,{status:a=200,error:e,node_ids:r,params:n,route:o,server_route:s,data:i,form:c}){Bt=!0;const l=new URL(location.href);let h;({params:n={},route:o={id:null}}=await ot(l,!1)||{}),h=kt.find(({id:f})=>f===o.id);let u,w=!0;try{const f=r.map(async(_,m)=>{const p=i[m];return p!=null&&p.uses&&(p.uses=Ce(p.uses)),Rt({loader:E.nodes[_],url:l,params:n,route:o,parent:async()=>{const y={};for(let S=0;S<m;S+=1)Object.assign(y,(await f[S]).data);return y},server_data_node:xt(p)})}),d=await Promise.all(f);if(h){const _=h.layouts;for(let m=0;m<_.length;m++)_[m]||d.splice(m,0,void 0)}u=nt({url:l,params:n,branch:d,status:a,error:e,form:c,route:h??null})}catch(f){if(f instanceof vt){await B(new URL(f.location,location.href));return}u=await Lt({status:bt(f),error:await Y(f,{url:l,params:n,route:o}),url:l,route:o}),t.textContent="",w=!1}u.props.page&&(u.props.page.state={}),await Jt(u,t,w)}function Ce(t){return{dependencies:new Set((t==null?void 0:t.dependencies)??[]),params:new Set((t==null?void 0:t.params)??[]),parent:!!(t!=null&&t.parent),route:!!(t!=null&&t.route),url:!!(t!=null&&t.url),search_params:new Set((t==null?void 0:t.search_params)??[])}}let mt=!1;function $e(t,a=!0){const e=document.querySelector("[autofocus]");if(e)e.focus();else{const r=te(t);if(r&&document.getElementById(r)){const{x:o,y:s}=j();setTimeout(()=>{const i=history.state;mt=!0,location.replace(new URL(`#${r}`,location.href)),history.replaceState(i,"",t),a&&scrollTo(o,s),mt=!1})}else{const o=document.body,s=o.getAttribute("tabindex");o.tabIndex=-1,o.focus({preventScroll:!0,focusVisible:!1}),s!==null?o.setAttribute("tabindex",s):o.removeAttribute("tabindex")}const n=getSelection();if(n&&n.type!=="None"){const o=[];for(let s=0;s<n.rangeCount;s+=1)o.push(n.getRangeAt(s));setTimeout(()=>{if(n.rangeCount===o.length){for(let s=0;s<n.rangeCount;s+=1){const i=o[s],c=n.getRangeAt(s);if(i.commonAncestorContainer!==c.commonAncestorContainer||i.startContainer!==c.startContainer||i.endContainer!==c.endContainer||i.startOffset!==c.startOffset||i.endOffset!==c.endOffset)return}n.removeAllRanges()}})}}}function Ut(t,a,e,r,n=null){var l,h;let o,s;const i=new Promise((u,w)=>{o=u,s=w});return i.catch(()=>{}),{navigation:{from:{params:t.params,route:{id:((l=t.route)==null?void 0:l.id)??null},url:t.url,scroll:j()},to:e&&{params:(a==null?void 0:a.params)??null,route:{id:((h=a==null?void 0:a.route)==null?void 0:h.id)??null},url:e,scroll:n},willUnload:!a,type:r,complete:i},fulfil:o,reject:s}}function At(t){return{data:t.data,error:t.error,form:t.form,params:t.params,route:t.route,state:t.state,status:t.status,url:t.url}}function Ne(t){const a=new URL(t);return a.hash=decodeURIComponent(t.hash),a}function te(t){let a;if(E.hash){const[,,e]=t.hash.split("#",3);a=e??""}else a=t.hash.slice(1);return decodeURIComponent(a)}export{Fe as a,Me as g,P as s};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
var x=t=>{throw TypeError(t)};var B=(t,e,n)=>e.has(t)||x("Cannot "+n);var a=(t,e,n)=>(B(t,e,"read from private field"),n?n.call(t):e.get(t)),c=(t,e,n)=>e.has(t)?x("Cannot add the same private member more than once"):e instanceof WeakSet?e.add(t):e.set(t,n);import{w as G,o as I}from"./Bn2NtlTj.js";import{d as u,g as f,b as d}from"./BdTBlfLy.js";new URL("sveltekit-internal://");function se(t,e){return t==="/"||e==="ignore"?t:e==="never"?t.endsWith("/")?t.slice(0,-1):t:e==="always"&&!t.endsWith("/")?t+"/":t}function ae(t){return t.split("%25").map(decodeURI).join("%25")}function oe(t){for(const e in t)t[e]=decodeURIComponent(t[e]);return t}function ie({href:t}){return t.split("#")[0]}function W(...t){let e=5381;for(const n of t)if(typeof n=="string"){let r=n.length;for(;r;)e=e*33^n.charCodeAt(--r)}else if(ArrayBuffer.isView(n)){const r=new Uint8Array(n.buffer,n.byteOffset,n.byteLength);let s=r.length;for(;s;)e=e*33^r[--s]}else throw new TypeError("value must be a string or TypedArray");return(e>>>0).toString(36)}new TextEncoder;new TextDecoder;function X(t){const e=atob(t),n=new Uint8Array(e.length);for(let r=0;r<e.length;r++)n[r]=e.charCodeAt(r);return n}const z=window.fetch;window.fetch=(t,e)=>((t instanceof Request?t.method:(e==null?void 0:e.method)||"GET")!=="GET"&&b.delete(U(t)),z(t,e));const b=new Map;function le(t,e){const n=U(t,e),r=document.querySelector(n);if(r!=null&&r.textContent){r.remove();let{body:s,...l}=JSON.parse(r.textContent);const o=r.getAttribute("data-ttl");return o&&b.set(n,{body:s,init:l,ttl:1e3*Number(o)}),r.getAttribute("data-b64")!==null&&(s=X(s)),Promise.resolve(new Response(s,l))}return window.fetch(t,e)}function ce(t,e,n){if(b.size>0){const r=U(t,n),s=b.get(r);if(s){if(performance.now()<s.ttl&&["default","force-cache","only-if-cached",void 0].includes(n==null?void 0:n.cache))return new Response(s.body,s.init);b.delete(r)}}return window.fetch(e,n)}function U(t,e){let r=`script[data-sveltekit-fetched][data-url=${JSON.stringify(t instanceof Request?t.url:t)}]`;if(e!=null&&e.headers||e!=null&&e.body){const s=[];e.headers&&s.push([...new Headers(e.headers)].join(",")),e.body&&(typeof e.body=="string"||ArrayBuffer.isView(e.body))&&s.push(e.body),r+=`[data-hash="${W(...s)}"]`}return r}var $;const J=(($=globalThis.__sveltekit_1k0lbsj)==null?void 0:$.base)??"/admin";var j;const M=((j=globalThis.__sveltekit_1k0lbsj)==null?void 0:j.assets)??J??"",F="1774526372532",ue="sveltekit:snapshot",fe="sveltekit:scroll",de="sveltekit:states",he="sveltekit:pageurl",ge="sveltekit:history",be="sveltekit:navigation",N={tap:1,hover:2,viewport:3,eager:4,off:-1,false:-1},Y=location.origin;function _e(t){if(t instanceof URL)return t;let e=document.baseURI;if(!e){const n=document.getElementsByTagName("base");e=n.length?n[0].href:document.URL}return new URL(t,e)}function we(){return{x:pageXOffset,y:pageYOffset}}function g(t,e){return t.getAttribute(`data-sveltekit-${e}`)}const L={...N,"":N.hover};function q(t){let e=t.assignedSlot??t.parentNode;return(e==null?void 0:e.nodeType)===11&&(e=e.host),e}function me(t,e){for(;t&&t!==e;){if(t.nodeName.toUpperCase()==="A"&&t.hasAttribute("href"))return t;t=q(t)}}function pe(t,e,n){let r;try{if(r=new URL(t instanceof SVGAElement?t.href.baseVal:t.href,document.baseURI),n&&r.hash.match(/^#[^/]/)){const i=location.hash.split("#")[1]||"/";r.hash=`#${i}${r.hash}`}}catch{}const s=t instanceof SVGAElement?t.target.baseVal:t.target,l=!r||!!s||Q(r,e,n)||(t.getAttribute("rel")||"").split(/\s+/).includes("external"),o=(r==null?void 0:r.origin)===Y&&t.hasAttribute("download");return{url:r,external:l,target:s,download:o}}function ve(t){let e=null,n=null,r=null,s=null,l=null,o=null,i=t;for(;i&&i!==document.documentElement;)r===null&&(r=g(i,"preload-code")),s===null&&(s=g(i,"preload-data")),e===null&&(e=g(i,"keepfocus")),n===null&&(n=g(i,"noscroll")),l===null&&(l=g(i,"reload")),o===null&&(o=g(i,"replacestate")),i=q(i);function h(K){switch(K){case"":case"true":return!0;case"off":case"false":return!1;default:return}}return{preload_code:L[r??"off"],preload_data:L[s??"off"],keepfocus:h(e),noscroll:h(n),reload:h(l),replace_state:h(o)}}function ye(t){const e=G(t);let n=!0;function r(){n=!0,e.update(o=>o)}function s(o){n=!1,e.set(o)}function l(o){let i;return e.subscribe(h=>{(i===void 0||n&&h!==i)&&o(i=h)})}return{notify:r,set:s,subscribe:l}}const D={v:()=>{}};function ke(){const{set:t,subscribe:e}=G(!1);let n;async function r(){clearTimeout(n);try{const s=await fetch(`${M}/_app/version.json`,{headers:{pragma:"no-cache","cache-control":"no-cache"}});if(!s.ok)return!1;const o=(await s.json()).version!==F;return o&&(t(!0),D.v(),clearTimeout(n)),o}catch{return!1}}return{subscribe:e,check:r}}function Q(t,e,n){return t.origin!==Y||!t.pathname.startsWith(e)?!0:n?t.pathname!==location.pathname:!1}function Ae(t){}const H=new Set(["load","prerender","csr","ssr","trailingSlash","config"]);[...H];const Z=new Set([...H]);[...Z];let E,O,T;const ee=I.toString().includes("$$")||/function \w+\(\) \{\}/.test(I.toString());var _,w,m,p,v,y,k,A,C,R,P,S,V;ee?(E={data:{},form:null,error:null,params:{},route:{id:null},state:{},status:-1,url:new URL("https://example.com")},O={current:null},T={current:!1}):(E=new(C=class{constructor(){c(this,_,u({}));c(this,w,u(null));c(this,m,u(null));c(this,p,u({}));c(this,v,u({id:null}));c(this,y,u({}));c(this,k,u(-1));c(this,A,u(new URL("https://example.com")))}get data(){return f(a(this,_))}set data(e){d(a(this,_),e)}get form(){return f(a(this,w))}set form(e){d(a(this,w),e)}get error(){return f(a(this,m))}set error(e){d(a(this,m),e)}get params(){return f(a(this,p))}set params(e){d(a(this,p),e)}get route(){return f(a(this,v))}set route(e){d(a(this,v),e)}get state(){return f(a(this,y))}set state(e){d(a(this,y),e)}get status(){return f(a(this,k))}set status(e){d(a(this,k),e)}get url(){return f(a(this,A))}set url(e){d(a(this,A),e)}},_=new WeakMap,w=new WeakMap,m=new WeakMap,p=new WeakMap,v=new WeakMap,y=new WeakMap,k=new WeakMap,A=new WeakMap,C),O=new(P=class{constructor(){c(this,R,u(null))}get current(){return f(a(this,R))}set current(e){d(a(this,R),e)}},R=new WeakMap,P),T=new(V=class{constructor(){c(this,S,u(!1))}get current(){return f(a(this,S))}set current(e){d(a(this,S),e)}},S=new WeakMap,V),D.v=()=>T.current=!0);function Ee(t){Object.assign(E,t)}export{ge as H,be as N,he as P,de as S,ve as a,J as b,ie as c,oe as d,se as e,me as f,pe as g,ke as h,Q as i,ye as j,N as k,ae as l,ue as m,O as n,Y as o,E as p,ce as q,_e as r,we as s,le as t,fe as u,Ee as v,Ae as w};
|