@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.
Files changed (125) hide show
  1. package/admin-build/_app/immutable/chunks/{DILS_-VJ.js → B3CvhH3c.js} +1 -1
  2. package/admin-build/_app/immutable/chunks/BN_-k-Ck.js +1 -0
  3. package/admin-build/_app/immutable/chunks/{Dt4vL4Df.js → BYL_uBga.js} +1 -1
  4. package/admin-build/_app/immutable/chunks/{C72lTcG0.js → Bcs4KYNp.js} +1 -1
  5. package/admin-build/_app/immutable/chunks/{B8s_s9QY.js → BkZCgsc3.js} +1 -1
  6. package/admin-build/_app/immutable/chunks/{D2j3I1VQ.js → BvoGcDFV.js} +1 -1
  7. package/admin-build/_app/immutable/chunks/{B2TnDKF7.js → CCUxCptE.js} +1 -1
  8. package/admin-build/_app/immutable/chunks/CLHN9MVr.js +1 -0
  9. package/admin-build/_app/immutable/chunks/{J2Gw0SMu.js → CR37B8DX.js} +1 -1
  10. package/admin-build/_app/immutable/chunks/CbfX3ELZ.js +1 -0
  11. package/admin-build/_app/immutable/chunks/CjcrXziO.js +2 -0
  12. package/admin-build/_app/immutable/chunks/CrwlCAM0.js +1 -0
  13. package/admin-build/_app/immutable/chunks/{B0HRJ657.js → DOOPbWwG.js} +1 -1
  14. package/admin-build/_app/immutable/chunks/DQVP4KC-.js +1 -0
  15. package/admin-build/_app/immutable/chunks/{B6MschND.js → DdvsFblq.js} +1 -1
  16. package/admin-build/_app/immutable/chunks/DemDWbs-.js +128 -0
  17. package/admin-build/_app/immutable/chunks/{CaVKAiCe.js → DmDTovpg.js} +1 -1
  18. package/admin-build/_app/immutable/chunks/{B94PilAN.js → Ff90owjx.js} +1 -1
  19. package/admin-build/_app/immutable/chunks/{BqTb6Mxk.js → LL3ulaxa.js} +1 -1
  20. package/admin-build/_app/immutable/chunks/Q3vAxeY-.js +1 -0
  21. package/admin-build/_app/immutable/chunks/SQVAC3Cv.js +1 -0
  22. package/admin-build/_app/immutable/chunks/{Z41NK6i6.js → bguI1TeA.js} +1 -1
  23. package/admin-build/_app/immutable/chunks/{_teD5ji5.js → nlAMTi52.js} +1 -1
  24. package/admin-build/_app/immutable/chunks/{Cdm5zBRA.js → qBm6xof8.js} +1 -1
  25. package/admin-build/_app/immutable/entry/{app.D3flihMw.js → app.CP83Ni80.js} +2 -2
  26. package/admin-build/_app/immutable/entry/start.DY6YakU0.js +1 -0
  27. package/admin-build/_app/immutable/nodes/{0.CdczqZLK.js → 0.DiRq7puO.js} +1 -1
  28. package/admin-build/_app/immutable/nodes/1.BFeyKLGT.js +1 -0
  29. package/admin-build/_app/immutable/nodes/10.zcee7hJx.js +1 -0
  30. package/admin-build/_app/immutable/nodes/11.BW7wLs2Y.js +1 -0
  31. package/admin-build/_app/immutable/nodes/12.CxJRlYSd.js +1 -0
  32. package/admin-build/_app/immutable/nodes/13.pp0F_5hn.js +110 -0
  33. package/admin-build/_app/immutable/nodes/14.t3AfGiGo.js +3 -0
  34. package/admin-build/_app/immutable/nodes/15.B3agc7NX.js +1 -0
  35. package/admin-build/_app/immutable/nodes/{16.BR7WwQrS.js → 16.C4uG2-i8.js} +1 -1
  36. package/admin-build/_app/immutable/nodes/{17.Cm57KKXV.js → 17.CwGxi1Bn.js} +1 -1
  37. package/admin-build/_app/immutable/nodes/18.CrQyN_gU.js +1 -0
  38. package/admin-build/_app/immutable/nodes/19.NEPUOXl7.js +2 -0
  39. package/admin-build/_app/immutable/nodes/{20.DnHeFlTv.js → 20.DGHO8ipr.js} +1 -1
  40. package/admin-build/_app/immutable/nodes/21.UVKBDvp4.js +1 -0
  41. package/admin-build/_app/immutable/nodes/22.Dri5It7a.js +1 -0
  42. package/admin-build/_app/immutable/nodes/{23.CWSGMcKJ.js → 23.BPQP_Zte.js} +2 -2
  43. package/admin-build/_app/immutable/nodes/24.D580FdSS.js +2 -0
  44. package/admin-build/_app/immutable/nodes/25.BMNPOZwF.js +2 -0
  45. package/admin-build/_app/immutable/nodes/26.XcpEcbiz.js +1 -0
  46. package/admin-build/_app/immutable/nodes/27.C1zHHcYv.js +1 -0
  47. package/admin-build/_app/immutable/nodes/28.CuKzzrY8.js +1 -0
  48. package/admin-build/_app/immutable/nodes/29.nLpBMXnM.js +1 -0
  49. package/admin-build/_app/immutable/nodes/{3.B6q-7qr8.js → 3.5G_aseoL.js} +1 -1
  50. package/admin-build/_app/immutable/nodes/30.CQC4nLoU.js +1 -0
  51. package/admin-build/_app/immutable/nodes/31.Bet8kxOK.js +1 -0
  52. package/admin-build/_app/immutable/nodes/4.nmJDYJpC.js +1 -0
  53. package/admin-build/_app/immutable/nodes/5.CnbYLG4E.js +1 -0
  54. package/admin-build/_app/immutable/nodes/6.KA01b-3y.js +1 -0
  55. package/admin-build/_app/immutable/nodes/7.CP9fkn1L.js +1 -0
  56. package/admin-build/_app/immutable/nodes/8.BTzDb---.js +1 -0
  57. package/admin-build/_app/immutable/nodes/9.DkNJg_J6.js +1 -0
  58. package/admin-build/_app/version.json +1 -1
  59. package/admin-build/index.html +7 -7
  60. package/package.json +3 -3
  61. package/src/__tests__/push-handlers.test.ts +1 -1
  62. package/src/__tests__/room-runtime-routing.test.ts +23 -0
  63. package/src/__tests__/route-parser.test.ts +6 -0
  64. package/src/__tests__/schema.test.ts +15 -6
  65. package/src/durable-objects/database-do.ts +7 -1
  66. package/src/durable-objects/room-runtime-base.ts +49 -40
  67. package/src/durable-objects/rooms-do.ts +32 -1
  68. package/src/index.ts +23 -9
  69. package/src/lib/d1-handler.ts +32 -17
  70. package/src/lib/postgres-handler.ts +24 -12
  71. package/src/lib/route-parser.ts +3 -0
  72. package/src/lib/schemas.ts +12 -2
  73. package/src/middleware/captcha-verify.ts +16 -3
  74. package/src/middleware/error-handler.ts +1 -1
  75. package/src/middleware/rules.ts +28 -9
  76. package/src/routes/admin-auth.ts +3 -3
  77. package/src/routes/admin.ts +13 -8
  78. package/src/routes/analytics-api.ts +3 -3
  79. package/src/routes/auth.ts +1 -1
  80. package/src/routes/backup.ts +1 -1
  81. package/src/routes/d1.ts +14 -7
  82. package/src/routes/database-live.ts +13 -6
  83. package/src/routes/kv.ts +21 -10
  84. package/src/routes/oauth.ts +1 -1
  85. package/src/routes/push.ts +119 -77
  86. package/src/routes/room.ts +215 -7
  87. package/src/routes/schema-endpoint.ts +2 -2
  88. package/src/routes/sql.ts +10 -6
  89. package/src/routes/storage.ts +4 -2
  90. package/src/routes/vectorize.ts +16 -4
  91. package/admin-build/_app/immutable/chunks/6oMK_164.js +0 -1
  92. package/admin-build/_app/immutable/chunks/BEW7Ez_g.js +0 -1
  93. package/admin-build/_app/immutable/chunks/BoOooyH6.js +0 -1
  94. package/admin-build/_app/immutable/chunks/BvHnF5tV.js +0 -1
  95. package/admin-build/_app/immutable/chunks/CoI6jjbg.js +0 -2
  96. package/admin-build/_app/immutable/chunks/CrOZMmdF.js +0 -1
  97. package/admin-build/_app/immutable/chunks/Cw6OYcq-.js +0 -1
  98. package/admin-build/_app/immutable/chunks/DPdQ7z0T.js +0 -128
  99. package/admin-build/_app/immutable/chunks/pUxw8jfq.js +0 -1
  100. package/admin-build/_app/immutable/entry/start.Cl6sLxnz.js +0 -1
  101. package/admin-build/_app/immutable/nodes/1.DxcSsEqS.js +0 -1
  102. package/admin-build/_app/immutable/nodes/10.DuAd4aIm.js +0 -1
  103. package/admin-build/_app/immutable/nodes/11.0jgHQL92.js +0 -1
  104. package/admin-build/_app/immutable/nodes/12.CKNPqmyy.js +0 -1
  105. package/admin-build/_app/immutable/nodes/13.B1p2POXS.js +0 -110
  106. package/admin-build/_app/immutable/nodes/14.Bb-REBND.js +0 -3
  107. package/admin-build/_app/immutable/nodes/15.1uBFCX0X.js +0 -1
  108. package/admin-build/_app/immutable/nodes/18.CoiwfAuQ.js +0 -1
  109. package/admin-build/_app/immutable/nodes/19.B8ZdLlXj.js +0 -2
  110. package/admin-build/_app/immutable/nodes/21.CJFaf0Ia.js +0 -1
  111. package/admin-build/_app/immutable/nodes/22.CItETFzy.js +0 -1
  112. package/admin-build/_app/immutable/nodes/24.CWbEqNMB.js +0 -2
  113. package/admin-build/_app/immutable/nodes/25.DRkLEhKi.js +0 -2
  114. package/admin-build/_app/immutable/nodes/26.BRxO8AYH.js +0 -1
  115. package/admin-build/_app/immutable/nodes/27.BLs-nVHz.js +0 -1
  116. package/admin-build/_app/immutable/nodes/28.G79qkdBK.js +0 -1
  117. package/admin-build/_app/immutable/nodes/29.BOcI6g0N.js +0 -1
  118. package/admin-build/_app/immutable/nodes/30.DAIC7dKd.js +0 -1
  119. package/admin-build/_app/immutable/nodes/31.pl0XXjXF.js +0 -1
  120. package/admin-build/_app/immutable/nodes/4.DOdvVlZj.js +0 -1
  121. package/admin-build/_app/immutable/nodes/5.BW_zlgye.js +0 -1
  122. package/admin-build/_app/immutable/nodes/6.Dxy1CAI2.js +0 -1
  123. package/admin-build/_app/immutable/nodes/7.BG98w_o7.js +0 -1
  124. package/admin-build/_app/immutable/nodes/8.DoG5R2rG.js +0 -1
  125. package/admin-build/_app/immutable/nodes/9.Dmxf6zAC.js +0 -1
@@ -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 query parameters required' }, 400);
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
- const warningKey = `${namespace}:metadata`;
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, 'Unauthorized. Invalid Service Key.');
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: 'Invalid JSON body' }, 400);
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 is required' }, 400);
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' }, 400);
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 is required' }, 400);
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: 'Service Key required to execute SQL' }, 403);
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: 'Unauthorized. Invalid Service Key.' }, 401);
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 {
@@ -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, 'Unauthorized. Invalid Service Key.', undefined, 'unauthenticated');
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 ? e.message : 'Unknown error.';
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
  }
@@ -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: 'Invalid JSON body' }, 400);
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: 'Service Key required to access Vectorize' }, 403);
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: 'Unauthorized. Invalid Service Key.' }, 401);
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
- console.warn(`⚠️ Vectorize binding '${bindingName}' for '${nameParam}' not available. Running locally or binding not configured.`);
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">&times;</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&&lt(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};