plum-e2e 2.7.1 → 2.8.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (138) hide show
  1. package/backend/middleware/jwtAuth.js +2 -2
  2. package/backend/middleware/runnerOrAdmin.js +26 -0
  3. package/backend/routes/runners.routes.js +11 -6
  4. package/backend/scripts/manage-runners.mjs +20 -5
  5. package/backend/services/runnerService.js +11 -0
  6. package/frontend/.svelte-kit/adapter-node/chunks/internal.js +1 -1
  7. package/frontend/.svelte-kit/adapter-node/manifest-full.js +1 -1
  8. package/frontend/.svelte-kit/adapter-node/manifest.js +1 -1
  9. package/frontend/.svelte-kit/adapter-node/nodes/0.js +1 -1
  10. package/frontend/.svelte-kit/adapter-node/nodes/1.js +1 -1
  11. package/frontend/.svelte-kit/adapter-node/nodes/11.js +1 -1
  12. package/frontend/.svelte-kit/adapter-node/nodes/12.js +1 -1
  13. package/frontend/.svelte-kit/adapter-node/nodes/3.js +1 -1
  14. package/frontend/.svelte-kit/adapter-node/nodes/5.js +1 -1
  15. package/frontend/.svelte-kit/adapter-node/nodes/6.js +1 -1
  16. package/frontend/.svelte-kit/adapter-node/nodes/8.js +1 -1
  17. package/frontend/.svelte-kit/adapter-node/nodes/9.js +1 -1
  18. package/frontend/.svelte-kit/generated/server/internal.js +1 -1
  19. package/frontend/.svelte-kit/output/client/.vite/manifest.json +37 -37
  20. package/frontend/{build/client/_app/immutable/chunks/nURnIknV.js → .svelte-kit/output/client/_app/immutable/chunks/DEKAA-Fm.js} +1 -1
  21. package/frontend/.svelte-kit/output/client/_app/immutable/chunks/{DMyTUV-Y.js → Dhf4xQKo.js} +1 -1
  22. package/frontend/{build/client/_app/immutable/entry/app.BkBD0hgA.js → .svelte-kit/output/client/_app/immutable/entry/app.B0GH5ONo.js} +2 -2
  23. package/frontend/.svelte-kit/output/client/_app/immutable/entry/start.Bn25CW9X.js +1 -0
  24. package/frontend/.svelte-kit/output/client/_app/immutable/nodes/{0.ChjDHxSJ.js → 0.-imXt0f5.js} +1 -1
  25. package/frontend/.svelte-kit/output/client/_app/immutable/nodes/{1.DBSWa36f.js → 1.Dom3CKWF.js} +1 -1
  26. package/frontend/.svelte-kit/output/client/_app/immutable/nodes/{11.O4cjXCg4.js → 11.DMlayLCK.js} +1 -1
  27. package/frontend/{build/client/_app/immutable/nodes/12.BWQdeRdX.js → .svelte-kit/output/client/_app/immutable/nodes/12.Bu89A1eX.js} +1 -1
  28. package/frontend/.svelte-kit/output/client/_app/immutable/nodes/{3._S1vrLVF.js → 3.B86rlHXU.js} +1 -1
  29. package/frontend/{build/client/_app/immutable/nodes/5.BiFBiWcW.js → .svelte-kit/output/client/_app/immutable/nodes/5.CqTXvadV.js} +1 -1
  30. package/frontend/.svelte-kit/output/client/_app/immutable/nodes/{6.BNS-W0R_.js → 6.BJZ62MCd.js} +1 -1
  31. package/frontend/.svelte-kit/output/client/_app/immutable/nodes/{8.BEUdazrw.js → 8.B4fj2Xyu.js} +1 -1
  32. package/frontend/.svelte-kit/output/client/_app/immutable/nodes/{9.CrLHYPEJ.js → 9.C57_2xq6.js} +1 -1
  33. package/frontend/.svelte-kit/output/client/_app/version.json +1 -1
  34. package/frontend/.svelte-kit/output/server/chunks/internal.js +1 -1
  35. package/frontend/.svelte-kit/output/server/manifest-full.js +1 -1
  36. package/frontend/.svelte-kit/output/server/manifest.js +1 -1
  37. package/frontend/.svelte-kit/output/server/nodes/0.js +1 -1
  38. package/frontend/.svelte-kit/output/server/nodes/1.js +1 -1
  39. package/frontend/.svelte-kit/output/server/nodes/11.js +1 -1
  40. package/frontend/.svelte-kit/output/server/nodes/12.js +1 -1
  41. package/frontend/.svelte-kit/output/server/nodes/3.js +1 -1
  42. package/frontend/.svelte-kit/output/server/nodes/5.js +1 -1
  43. package/frontend/.svelte-kit/output/server/nodes/6.js +1 -1
  44. package/frontend/.svelte-kit/output/server/nodes/8.js +1 -1
  45. package/frontend/.svelte-kit/output/server/nodes/9.js +1 -1
  46. package/frontend/{.svelte-kit/output/client/_app/immutable/chunks/nURnIknV.js → build/client/_app/immutable/chunks/DEKAA-Fm.js} +1 -1
  47. package/frontend/build/client/_app/immutable/chunks/DEKAA-Fm.js.br +0 -0
  48. package/frontend/build/client/_app/immutable/chunks/DEKAA-Fm.js.gz +0 -0
  49. package/frontend/build/client/_app/immutable/chunks/{DMyTUV-Y.js → Dhf4xQKo.js} +1 -1
  50. package/frontend/build/client/_app/immutable/chunks/Dhf4xQKo.js.br +0 -0
  51. package/frontend/build/client/_app/immutable/chunks/Dhf4xQKo.js.gz +0 -0
  52. package/frontend/{.svelte-kit/output/client/_app/immutable/entry/app.BkBD0hgA.js → build/client/_app/immutable/entry/app.B0GH5ONo.js} +2 -2
  53. package/frontend/build/client/_app/immutable/entry/app.B0GH5ONo.js.br +0 -0
  54. package/frontend/build/client/_app/immutable/entry/app.B0GH5ONo.js.gz +0 -0
  55. package/frontend/build/client/_app/immutable/entry/start.Bn25CW9X.js +1 -0
  56. package/frontend/build/client/_app/immutable/entry/start.Bn25CW9X.js.br +0 -0
  57. package/frontend/build/client/_app/immutable/entry/start.Bn25CW9X.js.gz +0 -0
  58. package/frontend/build/client/_app/immutable/nodes/{0.ChjDHxSJ.js → 0.-imXt0f5.js} +1 -1
  59. package/frontend/build/client/_app/immutable/nodes/0.-imXt0f5.js.br +0 -0
  60. package/frontend/build/client/_app/immutable/nodes/0.-imXt0f5.js.gz +0 -0
  61. package/frontend/build/client/_app/immutable/nodes/{1.DBSWa36f.js → 1.Dom3CKWF.js} +1 -1
  62. package/frontend/build/client/_app/immutable/nodes/1.Dom3CKWF.js.br +0 -0
  63. package/frontend/build/client/_app/immutable/nodes/1.Dom3CKWF.js.gz +0 -0
  64. package/frontend/build/client/_app/immutable/nodes/{11.O4cjXCg4.js → 11.DMlayLCK.js} +1 -1
  65. package/frontend/build/client/_app/immutable/nodes/11.DMlayLCK.js.br +0 -0
  66. package/frontend/build/client/_app/immutable/nodes/11.DMlayLCK.js.gz +0 -0
  67. package/frontend/{.svelte-kit/output/client/_app/immutable/nodes/12.BWQdeRdX.js → build/client/_app/immutable/nodes/12.Bu89A1eX.js} +1 -1
  68. package/frontend/build/client/_app/immutable/nodes/12.Bu89A1eX.js.br +0 -0
  69. package/frontend/build/client/_app/immutable/nodes/12.Bu89A1eX.js.gz +0 -0
  70. package/frontend/build/client/_app/immutable/nodes/{3._S1vrLVF.js → 3.B86rlHXU.js} +1 -1
  71. package/frontend/build/client/_app/immutable/nodes/3.B86rlHXU.js.br +0 -0
  72. package/frontend/build/client/_app/immutable/nodes/3.B86rlHXU.js.gz +0 -0
  73. package/frontend/{.svelte-kit/output/client/_app/immutable/nodes/5.BiFBiWcW.js → build/client/_app/immutable/nodes/5.CqTXvadV.js} +1 -1
  74. package/frontend/build/client/_app/immutable/nodes/5.CqTXvadV.js.br +0 -0
  75. package/frontend/build/client/_app/immutable/nodes/5.CqTXvadV.js.gz +0 -0
  76. package/frontend/build/client/_app/immutable/nodes/{6.BNS-W0R_.js → 6.BJZ62MCd.js} +1 -1
  77. package/frontend/build/client/_app/immutable/nodes/6.BJZ62MCd.js.br +0 -0
  78. package/frontend/build/client/_app/immutable/nodes/6.BJZ62MCd.js.gz +0 -0
  79. package/frontend/build/client/_app/immutable/nodes/{8.BEUdazrw.js → 8.B4fj2Xyu.js} +1 -1
  80. package/frontend/build/client/_app/immutable/nodes/8.B4fj2Xyu.js.br +0 -0
  81. package/frontend/build/client/_app/immutable/nodes/8.B4fj2Xyu.js.gz +0 -0
  82. package/frontend/build/client/_app/immutable/nodes/{9.CrLHYPEJ.js → 9.C57_2xq6.js} +1 -1
  83. package/frontend/build/client/_app/immutable/nodes/9.C57_2xq6.js.br +0 -0
  84. package/frontend/build/client/_app/immutable/nodes/9.C57_2xq6.js.gz +0 -0
  85. package/frontend/build/client/_app/version.json +1 -1
  86. package/frontend/build/client/_app/version.json.br +0 -0
  87. package/frontend/build/client/_app/version.json.gz +0 -0
  88. package/frontend/build/server/chunks/{0-Cn_2hzqk.js → 0-DG1Uv07a.js} +2 -2
  89. package/frontend/build/server/chunks/{0-Cn_2hzqk.js.map → 0-DG1Uv07a.js.map} +1 -1
  90. package/frontend/build/server/chunks/{1-BrRGJFSB.js → 1-iB0ogJU_.js} +2 -2
  91. package/frontend/build/server/chunks/{1-BrRGJFSB.js.map → 1-iB0ogJU_.js.map} +1 -1
  92. package/frontend/build/server/chunks/{11-BLPbHJqB.js → 11-Df9vGZ_v.js} +2 -2
  93. package/frontend/build/server/chunks/{11-BLPbHJqB.js.map → 11-Df9vGZ_v.js.map} +1 -1
  94. package/frontend/build/server/chunks/{12-S1ujUrHy.js → 12-DqvjCln4.js} +2 -2
  95. package/frontend/build/server/chunks/{12-S1ujUrHy.js.map → 12-DqvjCln4.js.map} +1 -1
  96. package/frontend/build/server/chunks/{3-BHkXVoNI.js → 3-BYKCZi4U.js} +2 -2
  97. package/frontend/build/server/chunks/{3-BHkXVoNI.js.map → 3-BYKCZi4U.js.map} +1 -1
  98. package/frontend/build/server/chunks/{5-F1ZsXMt2.js → 5-B6Jc1foX.js} +2 -2
  99. package/frontend/build/server/chunks/{5-F1ZsXMt2.js.map → 5-B6Jc1foX.js.map} +1 -1
  100. package/frontend/build/server/chunks/{6-FlZLnYJ6.js → 6-dXZKtN86.js} +2 -2
  101. package/frontend/build/server/chunks/{6-FlZLnYJ6.js.map → 6-dXZKtN86.js.map} +1 -1
  102. package/frontend/build/server/chunks/{8-DXReUGxi.js → 8-D-Bp7HzS.js} +2 -2
  103. package/frontend/build/server/chunks/{8-DXReUGxi.js.map → 8-D-Bp7HzS.js.map} +1 -1
  104. package/frontend/build/server/chunks/{9-Cy_mGmt4.js → 9-BynjuGUO.js} +2 -2
  105. package/frontend/build/server/chunks/{9-Cy_mGmt4.js.map → 9-BynjuGUO.js.map} +1 -1
  106. package/frontend/build/server/index.js +1 -1
  107. package/frontend/build/server/index.js.map +1 -1
  108. package/frontend/build/server/manifest.js +10 -10
  109. package/frontend/build/server/manifest.js.map +1 -1
  110. package/package.json +1 -1
  111. package/frontend/.svelte-kit/output/client/_app/immutable/entry/start.BxeX1Uxs.js +0 -1
  112. package/frontend/build/client/_app/immutable/chunks/DMyTUV-Y.js.br +0 -0
  113. package/frontend/build/client/_app/immutable/chunks/DMyTUV-Y.js.gz +0 -0
  114. package/frontend/build/client/_app/immutable/chunks/nURnIknV.js.br +0 -0
  115. package/frontend/build/client/_app/immutable/chunks/nURnIknV.js.gz +0 -0
  116. package/frontend/build/client/_app/immutable/entry/app.BkBD0hgA.js.br +0 -0
  117. package/frontend/build/client/_app/immutable/entry/app.BkBD0hgA.js.gz +0 -0
  118. package/frontend/build/client/_app/immutable/entry/start.BxeX1Uxs.js +0 -1
  119. package/frontend/build/client/_app/immutable/entry/start.BxeX1Uxs.js.br +0 -2
  120. package/frontend/build/client/_app/immutable/entry/start.BxeX1Uxs.js.gz +0 -0
  121. package/frontend/build/client/_app/immutable/nodes/0.ChjDHxSJ.js.br +0 -0
  122. package/frontend/build/client/_app/immutable/nodes/0.ChjDHxSJ.js.gz +0 -0
  123. package/frontend/build/client/_app/immutable/nodes/1.DBSWa36f.js.br +0 -0
  124. package/frontend/build/client/_app/immutable/nodes/1.DBSWa36f.js.gz +0 -0
  125. package/frontend/build/client/_app/immutable/nodes/11.O4cjXCg4.js.br +0 -0
  126. package/frontend/build/client/_app/immutable/nodes/11.O4cjXCg4.js.gz +0 -0
  127. package/frontend/build/client/_app/immutable/nodes/12.BWQdeRdX.js.br +0 -0
  128. package/frontend/build/client/_app/immutable/nodes/12.BWQdeRdX.js.gz +0 -0
  129. package/frontend/build/client/_app/immutable/nodes/3._S1vrLVF.js.br +0 -0
  130. package/frontend/build/client/_app/immutable/nodes/3._S1vrLVF.js.gz +0 -0
  131. package/frontend/build/client/_app/immutable/nodes/5.BiFBiWcW.js.br +0 -0
  132. package/frontend/build/client/_app/immutable/nodes/5.BiFBiWcW.js.gz +0 -0
  133. package/frontend/build/client/_app/immutable/nodes/6.BNS-W0R_.js.br +0 -0
  134. package/frontend/build/client/_app/immutable/nodes/6.BNS-W0R_.js.gz +0 -0
  135. package/frontend/build/client/_app/immutable/nodes/8.BEUdazrw.js.br +0 -0
  136. package/frontend/build/client/_app/immutable/nodes/8.BEUdazrw.js.gz +0 -0
  137. package/frontend/build/client/_app/immutable/nodes/9.CrLHYPEJ.js.br +0 -0
  138. package/frontend/build/client/_app/immutable/nodes/9.CrLHYPEJ.js.gz +0 -0
@@ -16,11 +16,11 @@ function jwtAuth(req, res, next) {
16
16
  prisma.user
17
17
  .findFirst({ where: { role: 'admin' }, select: { id: true } })
18
18
  .then((admin) => {
19
- req.user = { userId: admin?.id ?? null };
19
+ req.user = { userId: admin?.id ?? null, role: 'admin' };
20
20
  next();
21
21
  })
22
22
  .catch(() => {
23
- req.user = { userId: null };
23
+ req.user = { userId: null, role: 'admin' };
24
24
  next();
25
25
  });
26
26
  return;
@@ -0,0 +1,26 @@
1
+ /*
2
+ * This file is part of Plum.
3
+ * Licensed under the MIT License. See LICENSE file in the project root for details.
4
+ */
5
+
6
+ const { jwtAuth } = require('./jwtAuth');
7
+ const { requireAdmin } = require('./requireAdmin');
8
+ const runnerService = require('../services/runnerService');
9
+ const { AUTH_SCHEME } = require('../lib/authHeader');
10
+
11
+ /**
12
+ * Accepts either a logged-in admin (web Settings UI) or any currently-registered
13
+ * runner's own token (manage-runners.mjs and node self-registration have no
14
+ * browser session/JWT to present, but every runner already has a token
15
+ * generated at registration — reuse it instead of a second credential).
16
+ */
17
+ async function runnerOrAdmin(req, res, next) {
18
+ const auth = req.headers.authorization;
19
+ if (auth && auth.startsWith(`${AUTH_SCHEME.BEARER} `)) {
20
+ const token = auth.slice(AUTH_SCHEME.BEARER.length + 1);
21
+ if (await runnerService.isValidToken(token)) return next();
22
+ }
23
+ jwtAuth(req, res, () => requireAdmin(req, res, next));
24
+ }
25
+
26
+ module.exports = { runnerOrAdmin };
@@ -8,8 +8,13 @@ const router = express.Router();
8
8
  const runnerService = require('../services/runnerService');
9
9
  const { jwtAuth } = require('../middleware/jwtAuth');
10
10
  const { requireAdmin } = require('../middleware/requireAdmin');
11
+ const { runnerOrAdmin } = require('../middleware/runnerOrAdmin');
11
12
 
12
- router.get('/', jwtAuth, requireAdmin, async (req, res) => {
13
+ // List/create are hit by headless CLI tools (manage-runners.mjs, node
14
+ // self-registration) with no session to present — same as before the
15
+ // runner-management routes were locked down. The response never includes
16
+ // runner tokens (toPublicRunner strips them), so listing isn't a secret leak.
17
+ router.get('/', async (req, res) => {
13
18
  try {
14
19
  const runners = await runnerService.getAll();
15
20
  res.json({ runners });
@@ -30,7 +35,7 @@ router.post('/probe', jwtAuth, requireAdmin, async (req, res) => {
30
35
  }
31
36
  });
32
37
 
33
- router.post('/', jwtAuth, requireAdmin, async (req, res) => {
38
+ router.post('/', async (req, res) => {
34
39
  try {
35
40
  const { name, url, token, browser } = req.body;
36
41
  if (!name || !url || !token)
@@ -52,7 +57,7 @@ router.put('/:id', jwtAuth, requireAdmin, async (req, res) => {
52
57
  }
53
58
  });
54
59
 
55
- router.delete('/:id', jwtAuth, requireAdmin, async (req, res) => {
60
+ router.delete('/:id', runnerOrAdmin, async (req, res) => {
56
61
  try {
57
62
  await runnerService.stop(req.params.id);
58
63
  await runnerService.remove(req.params.id);
@@ -62,7 +67,7 @@ router.delete('/:id', jwtAuth, requireAdmin, async (req, res) => {
62
67
  }
63
68
  });
64
69
 
65
- router.post('/:id/ping', jwtAuth, requireAdmin, async (req, res) => {
70
+ router.post('/:id/ping', runnerOrAdmin, async (req, res) => {
66
71
  try {
67
72
  const result = await runnerService.ping(req.params.id);
68
73
  res.json(result);
@@ -71,7 +76,7 @@ router.post('/:id/ping', jwtAuth, requireAdmin, async (req, res) => {
71
76
  }
72
77
  });
73
78
 
74
- router.post('/:id/stop', jwtAuth, requireAdmin, async (req, res) => {
79
+ router.post('/:id/stop', runnerOrAdmin, async (req, res) => {
75
80
  try {
76
81
  const result = await runnerService.stop(req.params.id);
77
82
  res.json(result);
@@ -80,7 +85,7 @@ router.post('/:id/stop', jwtAuth, requireAdmin, async (req, res) => {
80
85
  }
81
86
  });
82
87
 
83
- router.post('/:id/restart', jwtAuth, requireAdmin, async (req, res) => {
88
+ router.post('/:id/restart', runnerOrAdmin, async (req, res) => {
84
89
  try {
85
90
  const result = await runnerService.restart(req.params.id);
86
91
  res.json(result);
@@ -31,12 +31,21 @@ const {
31
31
  findPidOnPort,
32
32
  killPort
33
33
  } = runnerProcess;
34
- const { generateToken, registerWithPrimary, detectLanIp } = nodeRegister;
34
+ const { generateToken, registerWithPrimary, detectLanIp, loadNodeConfig } = nodeRegister;
35
35
 
36
36
  const API_URL = process.env.PLUM_API_URL || 'http://localhost:3001';
37
37
 
38
38
  const cancelled = (v) => clack.isCancel(v);
39
39
 
40
+ // The mutating /runners routes accept a registered runner's own token in place
41
+ // of an admin session — this manager has no browser/JWT to present, but a node
42
+ // already gets a token at registration time (see backend/middleware/jwtAuth.js
43
+ // / runnerOrAdmin.js), so reuse that instead of a separate credential.
44
+ const localToken = loadNodeConfig(process.cwd()).token;
45
+ function authHeaders() {
46
+ return localToken ? { Authorization: `Bearer ${localToken}` } : {};
47
+ }
48
+
40
49
  /**
41
50
  * When the primary runs in Docker it cannot reach `localhost` on the host —
42
51
  * only substitute when the user explicitly enters localhost/127.0.0.1.
@@ -53,7 +62,7 @@ function resolveNodeUrl(url) {
53
62
  }
54
63
 
55
64
  async function fetchRunners() {
56
- const res = await fetch(`${API_URL}/runners`);
65
+ const res = await fetch(`${API_URL}/runners`, { headers: authHeaders() });
57
66
  if (!res.ok) throw new Error(`HTTP ${res.status}`);
58
67
  const body = await res.json();
59
68
  return body.runners ?? [];
@@ -61,7 +70,10 @@ async function fetchRunners() {
61
70
 
62
71
  async function pingRunner(id) {
63
72
  try {
64
- const res = await fetch(`${API_URL}/runners/${id}/ping`, { method: 'POST' });
73
+ const res = await fetch(`${API_URL}/runners/${id}/ping`, {
74
+ method: 'POST',
75
+ headers: authHeaders()
76
+ });
65
77
  const body = await res.json().catch(() => ({}));
66
78
  return body.ok === true;
67
79
  } catch {
@@ -70,7 +82,7 @@ async function pingRunner(id) {
70
82
  }
71
83
 
72
84
  async function deleteRunner(id) {
73
- const res = await fetch(`${API_URL}/runners/${id}`, { method: 'DELETE' });
85
+ const res = await fetch(`${API_URL}/runners/${id}`, { method: 'DELETE', headers: authHeaders() });
74
86
  if (!res.ok) {
75
87
  const body = await res.json().catch(() => ({}));
76
88
  throw new Error(body.error || `HTTP ${res.status}`);
@@ -83,7 +95,10 @@ async function deleteRunner(id) {
83
95
  * reachable runner, not just ones whose process this manager owns by PID.
84
96
  */
85
97
  async function controlRunner(id, action) {
86
- const res = await fetch(`${API_URL}/runners/${id}/${action}`, { method: 'POST' });
98
+ const res = await fetch(`${API_URL}/runners/${id}/${action}`, {
99
+ method: 'POST',
100
+ headers: authHeaders()
101
+ });
87
102
  const body = await res.json().catch(() => ({}));
88
103
  if (!res.ok || body.ok === false) throw new Error(body.error || `HTTP ${res.status}`);
89
104
  }
@@ -75,6 +75,16 @@ const update = async (id, { name, url, token, browser }) => {
75
75
  // outbound requests to the runner node (ping/stop/restart/dispatch below).
76
76
  const getById = (id) => prisma.runner.findUnique({ where: { id } });
77
77
 
78
+ // A runner's own token (generated once at registration) doubles as its
79
+ // credential for calling back into the primary's control routes — no separate
80
+ // secret to configure. Any currently-registered token is accepted, not just
81
+ // the target runner's own, since one CLI session manages the whole fleet.
82
+ async function isValidToken(token) {
83
+ if (!token) return false;
84
+ const runner = await prisma.runner.findFirst({ where: { token }, select: { id: true } });
85
+ return Boolean(runner);
86
+ }
87
+
78
88
  // ---------------------------------------------------------------------------
79
89
  // Connectivity
80
90
  // ---------------------------------------------------------------------------
@@ -275,6 +285,7 @@ module.exports = {
275
285
  remove,
276
286
  update,
277
287
  getById,
288
+ isValidToken,
278
289
  probe,
279
290
  ping,
280
291
  stop,
@@ -636,7 +636,7 @@ const options = {
636
636
  <div class="error">
637
637
  <span class="status">` + status + '</span>\n <div class="message">\n <h1>' + message + "</h1>\n </div>\n </div>\n </body>\n</html>\n"
638
638
  },
639
- version_hash: "1v80gvr"
639
+ version_hash: "1m6qzpt"
640
640
  };
641
641
  async function get_hooks() {
642
642
  let handle;
@@ -10,7 +10,7 @@ return {
10
10
  assets: new Set(["favicon-32x32.png","favicon.ico"]),
11
11
  mimeTypes: {".png":"image/png"},
12
12
  _: {
13
- client: {start:"_app/immutable/entry/start.BxeX1Uxs.js",app:"_app/immutable/entry/app.BkBD0hgA.js",imports:["_app/immutable/entry/start.BxeX1Uxs.js","_app/immutable/chunks/DMyTUV-Y.js","_app/immutable/chunks/BAACMRH5.js","_app/immutable/entry/app.BkBD0hgA.js","_app/immutable/chunks/BAACMRH5.js","_app/immutable/chunks/CMBQQ9RZ.js","_app/immutable/chunks/CgnwuKKO.js","_app/immutable/chunks/C8OURRSs.js","_app/immutable/chunks/2zMvi6fR.js"],stylesheets:[],fonts:[],uses_env_dynamic_public:false},
13
+ client: {start:"_app/immutable/entry/start.Bn25CW9X.js",app:"_app/immutable/entry/app.B0GH5ONo.js",imports:["_app/immutable/entry/start.Bn25CW9X.js","_app/immutable/chunks/Dhf4xQKo.js","_app/immutable/chunks/BAACMRH5.js","_app/immutable/entry/app.B0GH5ONo.js","_app/immutable/chunks/BAACMRH5.js","_app/immutable/chunks/CMBQQ9RZ.js","_app/immutable/chunks/CgnwuKKO.js","_app/immutable/chunks/C8OURRSs.js","_app/immutable/chunks/2zMvi6fR.js"],stylesheets:[],fonts:[],uses_env_dynamic_public:false},
14
14
  nodes: [
15
15
  __memo(() => import('./nodes/0.js')),
16
16
  __memo(() => import('./nodes/1.js')),
@@ -10,7 +10,7 @@ return {
10
10
  assets: new Set(["favicon-32x32.png","favicon.ico"]),
11
11
  mimeTypes: {".png":"image/png"},
12
12
  _: {
13
- client: {start:"_app/immutable/entry/start.BxeX1Uxs.js",app:"_app/immutable/entry/app.BkBD0hgA.js",imports:["_app/immutable/entry/start.BxeX1Uxs.js","_app/immutable/chunks/DMyTUV-Y.js","_app/immutable/chunks/BAACMRH5.js","_app/immutable/entry/app.BkBD0hgA.js","_app/immutable/chunks/BAACMRH5.js","_app/immutable/chunks/CMBQQ9RZ.js","_app/immutable/chunks/CgnwuKKO.js","_app/immutable/chunks/C8OURRSs.js","_app/immutable/chunks/2zMvi6fR.js"],stylesheets:[],fonts:[],uses_env_dynamic_public:false},
13
+ client: {start:"_app/immutable/entry/start.Bn25CW9X.js",app:"_app/immutable/entry/app.B0GH5ONo.js",imports:["_app/immutable/entry/start.Bn25CW9X.js","_app/immutable/chunks/Dhf4xQKo.js","_app/immutable/chunks/BAACMRH5.js","_app/immutable/entry/app.B0GH5ONo.js","_app/immutable/chunks/BAACMRH5.js","_app/immutable/chunks/CMBQQ9RZ.js","_app/immutable/chunks/CgnwuKKO.js","_app/immutable/chunks/C8OURRSs.js","_app/immutable/chunks/2zMvi6fR.js"],stylesheets:[],fonts:[],uses_env_dynamic_public:false},
14
14
  nodes: [
15
15
  __memo(() => import('./nodes/0.js')),
16
16
  __memo(() => import('./nodes/1.js')),
@@ -5,6 +5,6 @@ let component_cache;
5
5
  export const component = async () => component_cache ??= (await import('../entries/pages/_layout.svelte.js')).default;
6
6
  export { universal };
7
7
  export const universal_id = "src/routes/+layout.js";
8
- export const imports = ["_app/immutable/nodes/0.ChjDHxSJ.js","_app/immutable/chunks/CMBQQ9RZ.js","_app/immutable/chunks/BAACMRH5.js","_app/immutable/chunks/CKDtmZUQ.js","_app/immutable/chunks/CgnwuKKO.js","_app/immutable/chunks/TOCyHP97.js","_app/immutable/chunks/DMyTUV-Y.js","_app/immutable/chunks/nURnIknV.js","_app/immutable/chunks/CUC98kMZ.js","_app/immutable/chunks/C1Vid6wz.js","_app/immutable/chunks/3InFPLvE.js","_app/immutable/chunks/DHM6H-es.js","_app/immutable/chunks/DbgD7JLa.js","_app/immutable/chunks/BUwxRmHf.js","_app/immutable/chunks/DSLBMEpr.js","_app/immutable/chunks/DMZwI8Cj.js","_app/immutable/chunks/C8OURRSs.js","_app/immutable/chunks/CMEtqUfQ.js","_app/immutable/chunks/CuqnZUex.js","_app/immutable/chunks/BmZ9upwL.js"];
8
+ export const imports = ["_app/immutable/nodes/0.-imXt0f5.js","_app/immutable/chunks/CMBQQ9RZ.js","_app/immutable/chunks/BAACMRH5.js","_app/immutable/chunks/CKDtmZUQ.js","_app/immutable/chunks/CgnwuKKO.js","_app/immutable/chunks/TOCyHP97.js","_app/immutable/chunks/Dhf4xQKo.js","_app/immutable/chunks/DEKAA-Fm.js","_app/immutable/chunks/CUC98kMZ.js","_app/immutable/chunks/C1Vid6wz.js","_app/immutable/chunks/3InFPLvE.js","_app/immutable/chunks/DHM6H-es.js","_app/immutable/chunks/DbgD7JLa.js","_app/immutable/chunks/BUwxRmHf.js","_app/immutable/chunks/DSLBMEpr.js","_app/immutable/chunks/DMZwI8Cj.js","_app/immutable/chunks/C8OURRSs.js","_app/immutable/chunks/CMEtqUfQ.js","_app/immutable/chunks/CuqnZUex.js","_app/immutable/chunks/BmZ9upwL.js"];
9
9
  export const stylesheets = ["_app/immutable/assets/0.BhSG-jZH.css","_app/immutable/assets/ConfirmModal.Dd3uP-Sk.css","_app/immutable/assets/Modal.BZpm0HP8.css","_app/immutable/assets/Badge.D1SV0Gv7.css"];
10
10
  export const fonts = [];
@@ -3,6 +3,6 @@
3
3
  export const index = 1;
4
4
  let component_cache;
5
5
  export const component = async () => component_cache ??= (await import('../entries/fallbacks/error.svelte.js')).default;
6
- export const imports = ["_app/immutable/nodes/1.DBSWa36f.js","_app/immutable/chunks/CMBQQ9RZ.js","_app/immutable/chunks/BAACMRH5.js","_app/immutable/chunks/CKDtmZUQ.js","_app/immutable/chunks/DMyTUV-Y.js"];
6
+ export const imports = ["_app/immutable/nodes/1.Dom3CKWF.js","_app/immutable/chunks/CMBQQ9RZ.js","_app/immutable/chunks/BAACMRH5.js","_app/immutable/chunks/CKDtmZUQ.js","_app/immutable/chunks/Dhf4xQKo.js"];
7
7
  export const stylesheets = [];
8
8
  export const fonts = [];
@@ -3,6 +3,6 @@
3
3
  export const index = 11;
4
4
  let component_cache;
5
5
  export const component = async () => component_cache ??= (await import('../entries/pages/test-repository/runs/_id_/_page.svelte.js')).default;
6
- export const imports = ["_app/immutable/nodes/11.O4cjXCg4.js","_app/immutable/chunks/CMBQQ9RZ.js","_app/immutable/chunks/BAACMRH5.js","_app/immutable/chunks/CKDtmZUQ.js","_app/immutable/chunks/CgnwuKKO.js","_app/immutable/chunks/TOCyHP97.js","_app/immutable/chunks/CUC98kMZ.js","_app/immutable/chunks/t-La0hgu.js","_app/immutable/chunks/CzlPaHY9.js","_app/immutable/chunks/C8OURRSs.js","_app/immutable/chunks/CNdcuGR0.js","_app/immutable/chunks/nURnIknV.js","_app/immutable/chunks/DMyTUV-Y.js","_app/immutable/chunks/BUwxRmHf.js","_app/immutable/chunks/C1Vid6wz.js","_app/immutable/chunks/DHM6H-es.js","_app/immutable/chunks/CMEtqUfQ.js","_app/immutable/chunks/BKuh57WU.js","_app/immutable/chunks/BAMUGSh7.js"];
6
+ export const imports = ["_app/immutable/nodes/11.DMlayLCK.js","_app/immutable/chunks/CMBQQ9RZ.js","_app/immutable/chunks/BAACMRH5.js","_app/immutable/chunks/CKDtmZUQ.js","_app/immutable/chunks/CgnwuKKO.js","_app/immutable/chunks/TOCyHP97.js","_app/immutable/chunks/CUC98kMZ.js","_app/immutable/chunks/t-La0hgu.js","_app/immutable/chunks/CzlPaHY9.js","_app/immutable/chunks/C8OURRSs.js","_app/immutable/chunks/CNdcuGR0.js","_app/immutable/chunks/DEKAA-Fm.js","_app/immutable/chunks/Dhf4xQKo.js","_app/immutable/chunks/BUwxRmHf.js","_app/immutable/chunks/C1Vid6wz.js","_app/immutable/chunks/DHM6H-es.js","_app/immutable/chunks/CMEtqUfQ.js","_app/immutable/chunks/BKuh57WU.js","_app/immutable/chunks/BAMUGSh7.js"];
7
7
  export const stylesheets = ["_app/immutable/assets/11.BWAH0Beh.css","_app/immutable/assets/Button.FOWXxvc7.css","_app/immutable/assets/Modal.BZpm0HP8.css","_app/immutable/assets/EmptyState.DUDM4P19.css"];
8
8
  export const fonts = [];
@@ -3,6 +3,6 @@
3
3
  export const index = 12;
4
4
  let component_cache;
5
5
  export const component = async () => component_cache ??= (await import('../entries/pages/test-repository/suites/_id_/_page.svelte.js')).default;
6
- export const imports = ["_app/immutable/nodes/12.BWQdeRdX.js","_app/immutable/chunks/CMBQQ9RZ.js","_app/immutable/chunks/BAACMRH5.js","_app/immutable/chunks/CKDtmZUQ.js","_app/immutable/chunks/CgnwuKKO.js","_app/immutable/chunks/TOCyHP97.js","_app/immutable/chunks/CUC98kMZ.js","_app/immutable/chunks/t-La0hgu.js","_app/immutable/chunks/CzlPaHY9.js","_app/immutable/chunks/C8OURRSs.js","_app/immutable/chunks/CNdcuGR0.js","_app/immutable/chunks/Bfc47y5P.js","_app/immutable/chunks/nURnIknV.js","_app/immutable/chunks/DMyTUV-Y.js","_app/immutable/chunks/BUwxRmHf.js","_app/immutable/chunks/C1Vid6wz.js","_app/immutable/chunks/BKuh57WU.js","_app/immutable/chunks/DMZwI8Cj.js","_app/immutable/chunks/CMEtqUfQ.js","_app/immutable/chunks/w0D4Uzlq.js","_app/immutable/chunks/BAMUGSh7.js"];
6
+ export const imports = ["_app/immutable/nodes/12.Bu89A1eX.js","_app/immutable/chunks/CMBQQ9RZ.js","_app/immutable/chunks/BAACMRH5.js","_app/immutable/chunks/CKDtmZUQ.js","_app/immutable/chunks/CgnwuKKO.js","_app/immutable/chunks/TOCyHP97.js","_app/immutable/chunks/CUC98kMZ.js","_app/immutable/chunks/t-La0hgu.js","_app/immutable/chunks/CzlPaHY9.js","_app/immutable/chunks/C8OURRSs.js","_app/immutable/chunks/CNdcuGR0.js","_app/immutable/chunks/Bfc47y5P.js","_app/immutable/chunks/DEKAA-Fm.js","_app/immutable/chunks/Dhf4xQKo.js","_app/immutable/chunks/BUwxRmHf.js","_app/immutable/chunks/C1Vid6wz.js","_app/immutable/chunks/BKuh57WU.js","_app/immutable/chunks/DMZwI8Cj.js","_app/immutable/chunks/CMEtqUfQ.js","_app/immutable/chunks/w0D4Uzlq.js","_app/immutable/chunks/BAMUGSh7.js"];
7
7
  export const stylesheets = ["_app/immutable/assets/12.Bj_a_5lv.css","_app/immutable/assets/Button.FOWXxvc7.css","_app/immutable/assets/EmptyState.DUDM4P19.css","_app/immutable/assets/ConfirmModal.Dd3uP-Sk.css","_app/immutable/assets/Modal.BZpm0HP8.css","_app/immutable/assets/Pagination.DZmi2Po-.css"];
8
8
  export const fonts = [];
@@ -3,6 +3,6 @@
3
3
  export const index = 3;
4
4
  let component_cache;
5
5
  export const component = async () => component_cache ??= (await import('../entries/pages/login/_page.svelte.js')).default;
6
- export const imports = ["_app/immutable/nodes/3._S1vrLVF.js","_app/immutable/chunks/CMBQQ9RZ.js","_app/immutable/chunks/BAACMRH5.js","_app/immutable/chunks/CKDtmZUQ.js","_app/immutable/chunks/CgnwuKKO.js","_app/immutable/chunks/CUC98kMZ.js","_app/immutable/chunks/t-La0hgu.js","_app/immutable/chunks/DMyTUV-Y.js","_app/immutable/chunks/C1Vid6wz.js","_app/immutable/chunks/BmZ9upwL.js","_app/immutable/chunks/DCgHuuvs.js","_app/immutable/chunks/Dlnxgs49.js"];
6
+ export const imports = ["_app/immutable/nodes/3.B86rlHXU.js","_app/immutable/chunks/CMBQQ9RZ.js","_app/immutable/chunks/BAACMRH5.js","_app/immutable/chunks/CKDtmZUQ.js","_app/immutable/chunks/CgnwuKKO.js","_app/immutable/chunks/CUC98kMZ.js","_app/immutable/chunks/t-La0hgu.js","_app/immutable/chunks/Dhf4xQKo.js","_app/immutable/chunks/C1Vid6wz.js","_app/immutable/chunks/BmZ9upwL.js","_app/immutable/chunks/DCgHuuvs.js","_app/immutable/chunks/Dlnxgs49.js"];
7
7
  export const stylesheets = ["_app/immutable/assets/3.BR3wgXcZ.css"];
8
8
  export const fonts = [];
@@ -3,6 +3,6 @@
3
3
  export const index = 5;
4
4
  let component_cache;
5
5
  export const component = async () => component_cache ??= (await import('../entries/pages/reports/_id_/_page.svelte.js')).default;
6
- export const imports = ["_app/immutable/nodes/5.BiFBiWcW.js","_app/immutable/chunks/CMBQQ9RZ.js","_app/immutable/chunks/BAACMRH5.js","_app/immutable/chunks/CKDtmZUQ.js","_app/immutable/chunks/CgnwuKKO.js","_app/immutable/chunks/TOCyHP97.js","_app/immutable/chunks/CUC98kMZ.js","_app/immutable/chunks/Bfc47y5P.js","_app/immutable/chunks/CNdcuGR0.js","_app/immutable/chunks/nURnIknV.js","_app/immutable/chunks/DMyTUV-Y.js","_app/immutable/chunks/DbgD7JLa.js","_app/immutable/chunks/DSLBMEpr.js","_app/immutable/chunks/Co3xKhEp.js","_app/immutable/chunks/CuqnZUex.js","_app/immutable/chunks/C8OURRSs.js","_app/immutable/chunks/CGeZlCaI.js"];
6
+ export const imports = ["_app/immutable/nodes/5.CqTXvadV.js","_app/immutable/chunks/CMBQQ9RZ.js","_app/immutable/chunks/BAACMRH5.js","_app/immutable/chunks/CKDtmZUQ.js","_app/immutable/chunks/CgnwuKKO.js","_app/immutable/chunks/TOCyHP97.js","_app/immutable/chunks/CUC98kMZ.js","_app/immutable/chunks/Bfc47y5P.js","_app/immutable/chunks/CNdcuGR0.js","_app/immutable/chunks/DEKAA-Fm.js","_app/immutable/chunks/Dhf4xQKo.js","_app/immutable/chunks/DbgD7JLa.js","_app/immutable/chunks/DSLBMEpr.js","_app/immutable/chunks/Co3xKhEp.js","_app/immutable/chunks/CuqnZUex.js","_app/immutable/chunks/C8OURRSs.js","_app/immutable/chunks/CGeZlCaI.js"];
7
7
  export const stylesheets = ["_app/immutable/assets/5.DFV9OgAu.css","_app/immutable/assets/Badge.D1SV0Gv7.css","_app/immutable/assets/BackLink.CvWWuO3h.css"];
8
8
  export const fonts = [];
@@ -3,6 +3,6 @@
3
3
  export const index = 6;
4
4
  let component_cache;
5
5
  export const component = async () => component_cache ??= (await import('../entries/pages/reports/live/_page.svelte.js')).default;
6
- export const imports = ["_app/immutable/nodes/6.BNS-W0R_.js","_app/immutable/chunks/CMBQQ9RZ.js","_app/immutable/chunks/BAACMRH5.js","_app/immutable/chunks/CKDtmZUQ.js","_app/immutable/chunks/CgnwuKKO.js","_app/immutable/chunks/TOCyHP97.js","_app/immutable/chunks/CUC98kMZ.js","_app/immutable/chunks/2zMvi6fR.js","_app/immutable/chunks/DMyTUV-Y.js","_app/immutable/chunks/nURnIknV.js","_app/immutable/chunks/DHM6H-es.js","_app/immutable/chunks/C1Vid6wz.js","_app/immutable/chunks/DbgD7JLa.js","_app/immutable/chunks/Co3xKhEp.js","_app/immutable/chunks/DSLBMEpr.js","_app/immutable/chunks/CGeZlCaI.js","_app/immutable/chunks/C8OURRSs.js","_app/immutable/chunks/CuqnZUex.js"];
6
+ export const imports = ["_app/immutable/nodes/6.BJZ62MCd.js","_app/immutable/chunks/CMBQQ9RZ.js","_app/immutable/chunks/BAACMRH5.js","_app/immutable/chunks/CKDtmZUQ.js","_app/immutable/chunks/CgnwuKKO.js","_app/immutable/chunks/TOCyHP97.js","_app/immutable/chunks/CUC98kMZ.js","_app/immutable/chunks/2zMvi6fR.js","_app/immutable/chunks/Dhf4xQKo.js","_app/immutable/chunks/DEKAA-Fm.js","_app/immutable/chunks/DHM6H-es.js","_app/immutable/chunks/C1Vid6wz.js","_app/immutable/chunks/DbgD7JLa.js","_app/immutable/chunks/Co3xKhEp.js","_app/immutable/chunks/DSLBMEpr.js","_app/immutable/chunks/CGeZlCaI.js","_app/immutable/chunks/C8OURRSs.js","_app/immutable/chunks/CuqnZUex.js"];
7
7
  export const stylesheets = ["_app/immutable/assets/6.CFnbmY-D.css","_app/immutable/assets/BackLink.CvWWuO3h.css","_app/immutable/assets/Badge.D1SV0Gv7.css"];
8
8
  export const fonts = [];
@@ -3,6 +3,6 @@
3
3
  export const index = 8;
4
4
  let component_cache;
5
5
  export const component = async () => component_cache ??= (await import('../entries/pages/settings/_page.svelte.js')).default;
6
- export const imports = ["_app/immutable/nodes/8.BEUdazrw.js","_app/immutable/chunks/CMBQQ9RZ.js","_app/immutable/chunks/BAACMRH5.js","_app/immutable/chunks/CKDtmZUQ.js","_app/immutable/chunks/CgnwuKKO.js","_app/immutable/chunks/TOCyHP97.js","_app/immutable/chunks/CUC98kMZ.js","_app/immutable/chunks/t-La0hgu.js","_app/immutable/chunks/CzlPaHY9.js","_app/immutable/chunks/C8OURRSs.js","_app/immutable/chunks/CNdcuGR0.js","_app/immutable/chunks/2zMvi6fR.js","_app/immutable/chunks/DMyTUV-Y.js","_app/immutable/chunks/3InFPLvE.js","_app/immutable/chunks/C1Vid6wz.js","_app/immutable/chunks/BUwxRmHf.js","_app/immutable/chunks/BmZ9upwL.js","_app/immutable/chunks/DHM6H-es.js","_app/immutable/chunks/DCgHuuvs.js","_app/immutable/chunks/DMZwI8Cj.js","_app/immutable/chunks/CMEtqUfQ.js","_app/immutable/chunks/CuqnZUex.js"];
6
+ export const imports = ["_app/immutable/nodes/8.B4fj2Xyu.js","_app/immutable/chunks/CMBQQ9RZ.js","_app/immutable/chunks/BAACMRH5.js","_app/immutable/chunks/CKDtmZUQ.js","_app/immutable/chunks/CgnwuKKO.js","_app/immutable/chunks/TOCyHP97.js","_app/immutable/chunks/CUC98kMZ.js","_app/immutable/chunks/t-La0hgu.js","_app/immutable/chunks/CzlPaHY9.js","_app/immutable/chunks/C8OURRSs.js","_app/immutable/chunks/CNdcuGR0.js","_app/immutable/chunks/2zMvi6fR.js","_app/immutable/chunks/Dhf4xQKo.js","_app/immutable/chunks/3InFPLvE.js","_app/immutable/chunks/C1Vid6wz.js","_app/immutable/chunks/BUwxRmHf.js","_app/immutable/chunks/BmZ9upwL.js","_app/immutable/chunks/DHM6H-es.js","_app/immutable/chunks/DCgHuuvs.js","_app/immutable/chunks/DMZwI8Cj.js","_app/immutable/chunks/CMEtqUfQ.js","_app/immutable/chunks/CuqnZUex.js"];
7
7
  export const stylesheets = ["_app/immutable/assets/8.BwgOqeMo.css","_app/immutable/assets/Button.FOWXxvc7.css","_app/immutable/assets/ConfirmModal.Dd3uP-Sk.css","_app/immutable/assets/Modal.BZpm0HP8.css","_app/immutable/assets/Badge.D1SV0Gv7.css"];
8
8
  export const fonts = [];
@@ -3,6 +3,6 @@
3
3
  export const index = 9;
4
4
  let component_cache;
5
5
  export const component = async () => component_cache ??= (await import('../entries/pages/setup/_page.svelte.js')).default;
6
- export const imports = ["_app/immutable/nodes/9.CrLHYPEJ.js","_app/immutable/chunks/CMBQQ9RZ.js","_app/immutable/chunks/BAACMRH5.js","_app/immutable/chunks/CKDtmZUQ.js","_app/immutable/chunks/CgnwuKKO.js","_app/immutable/chunks/CUC98kMZ.js","_app/immutable/chunks/t-La0hgu.js","_app/immutable/chunks/DMyTUV-Y.js","_app/immutable/chunks/BmZ9upwL.js","_app/immutable/chunks/C1Vid6wz.js","_app/immutable/chunks/DCgHuuvs.js","_app/immutable/chunks/Dlnxgs49.js"];
6
+ export const imports = ["_app/immutable/nodes/9.C57_2xq6.js","_app/immutable/chunks/CMBQQ9RZ.js","_app/immutable/chunks/BAACMRH5.js","_app/immutable/chunks/CKDtmZUQ.js","_app/immutable/chunks/CgnwuKKO.js","_app/immutable/chunks/CUC98kMZ.js","_app/immutable/chunks/t-La0hgu.js","_app/immutable/chunks/Dhf4xQKo.js","_app/immutable/chunks/BmZ9upwL.js","_app/immutable/chunks/C1Vid6wz.js","_app/immutable/chunks/DCgHuuvs.js","_app/immutable/chunks/Dlnxgs49.js"];
7
7
  export const stylesheets = ["_app/immutable/assets/9._h2o67kg.css"];
8
8
  export const fonts = [];
@@ -21,7 +21,7 @@ export const options = {
21
21
  app: ({ head, body, assets, nonce, env }) => "<!--\nThis file is part of Plum.\nLicensed under the MIT License. See LICENSE file in the project root for details.\n-->\n<!doctype html>\n<html lang=\"en\" data-theme=\"light\">\n\t<head>\n\t\t<meta charset=\"utf-8\" />\n\t\t<link rel=\"icon\" href=\"" + assets + "/favicon.ico\" />\n\t\t<meta name=\"viewport\" content=\"width=device-width, initial-scale=1\" />\n\t\t<link rel=\"preconnect\" href=\"https://fonts.googleapis.com\" />\n\t\t<link rel=\"preconnect\" href=\"https://fonts.gstatic.com\" crossorigin />\n\t\t<link\n\t\t\thref=\"https://fonts.googleapis.com/css2?family=Playfair+Display:wght@400;500&family=DM+Sans:wght@300;400;500&display=swap\"\n\t\t\trel=\"stylesheet\"\n\t\t/>\n\t\t<!-- Prevent theme flash before Svelte hydrates -->\n\t\t<script>\n\t\t\ttry {\n\t\t\t\tconst t = localStorage.getItem('plum-theme');\n\t\t\t\tif (t) document.documentElement.setAttribute('data-theme', t);\n\t\t\t} catch (e) {}\n\t\t</script>\n\t\t" + head + "\n\t</head>\n\t<body data-sveltekit-preload-data=\"hover\">\n\t\t<div style=\"display: contents\">" + body + "</div>\n\t</body>\n</html>\n",
22
22
  error: ({ status, message }) => "<!doctype html>\n<html lang=\"en\">\n\t<head>\n\t\t<meta charset=\"utf-8\" />\n\t\t<title>" + message + "</title>\n\n\t\t<style>\n\t\t\tbody {\n\t\t\t\t--bg: white;\n\t\t\t\t--fg: #222;\n\t\t\t\t--divider: #ccc;\n\t\t\t\tbackground: var(--bg);\n\t\t\t\tcolor: var(--fg);\n\t\t\t\tfont-family:\n\t\t\t\t\tsystem-ui,\n\t\t\t\t\t-apple-system,\n\t\t\t\t\tBlinkMacSystemFont,\n\t\t\t\t\t'Segoe UI',\n\t\t\t\t\tRoboto,\n\t\t\t\t\tOxygen,\n\t\t\t\t\tUbuntu,\n\t\t\t\t\tCantarell,\n\t\t\t\t\t'Open Sans',\n\t\t\t\t\t'Helvetica Neue',\n\t\t\t\t\tsans-serif;\n\t\t\t\tdisplay: flex;\n\t\t\t\talign-items: center;\n\t\t\t\tjustify-content: center;\n\t\t\t\theight: 100vh;\n\t\t\t\tmargin: 0;\n\t\t\t}\n\n\t\t\t.error {\n\t\t\t\tdisplay: flex;\n\t\t\t\talign-items: center;\n\t\t\t\tmax-width: 32rem;\n\t\t\t\tmargin: 0 1rem;\n\t\t\t}\n\n\t\t\t.status {\n\t\t\t\tfont-weight: 200;\n\t\t\t\tfont-size: 3rem;\n\t\t\t\tline-height: 1;\n\t\t\t\tposition: relative;\n\t\t\t\ttop: -0.05rem;\n\t\t\t}\n\n\t\t\t.message {\n\t\t\t\tborder-left: 1px solid var(--divider);\n\t\t\t\tpadding: 0 0 0 1rem;\n\t\t\t\tmargin: 0 0 0 1rem;\n\t\t\t\tmin-height: 2.5rem;\n\t\t\t\tdisplay: flex;\n\t\t\t\talign-items: center;\n\t\t\t}\n\n\t\t\t.message h1 {\n\t\t\t\tfont-weight: 400;\n\t\t\t\tfont-size: 1em;\n\t\t\t\tmargin: 0;\n\t\t\t}\n\n\t\t\t@media (prefers-color-scheme: dark) {\n\t\t\t\tbody {\n\t\t\t\t\t--bg: #222;\n\t\t\t\t\t--fg: #ddd;\n\t\t\t\t\t--divider: #666;\n\t\t\t\t}\n\t\t\t}\n\t\t</style>\n\t</head>\n\t<body>\n\t\t<div class=\"error\">\n\t\t\t<span class=\"status\">" + status + "</span>\n\t\t\t<div class=\"message\">\n\t\t\t\t<h1>" + message + "</h1>\n\t\t\t</div>\n\t\t</div>\n\t</body>\n</html>\n"
23
23
  },
24
- version_hash: "1v80gvr"
24
+ version_hash: "1m6qzpt"
25
25
  };
26
26
 
27
27
  export async function get_hooks() {
@@ -1,6 +1,6 @@
1
1
  {
2
2
  ".svelte-kit/generated/client-optimized/app.js": {
3
- "file": "_app/immutable/entry/app.BkBD0hgA.js",
3
+ "file": "_app/immutable/entry/app.B0GH5ONo.js",
4
4
  "name": "entry/app",
5
5
  "src": ".svelte-kit/generated/client-optimized/app.js",
6
6
  "isEntry": true,
@@ -28,7 +28,7 @@
28
28
  ]
29
29
  },
30
30
  ".svelte-kit/generated/client-optimized/nodes/0.js": {
31
- "file": "_app/immutable/nodes/0.ChjDHxSJ.js",
31
+ "file": "_app/immutable/nodes/0.-imXt0f5.js",
32
32
  "name": "nodes/0",
33
33
  "src": ".svelte-kit/generated/client-optimized/nodes/0.js",
34
34
  "isEntry": true,
@@ -39,8 +39,8 @@
39
39
  "_BAACMRH5.js",
40
40
  "_CgnwuKKO.js",
41
41
  "_TOCyHP97.js",
42
- "_DMyTUV-Y.js",
43
- "_nURnIknV.js",
42
+ "_Dhf4xQKo.js",
43
+ "_DEKAA-Fm.js",
44
44
  "_CUC98kMZ.js",
45
45
  "_C1Vid6wz.js",
46
46
  "_3InFPLvE.js",
@@ -57,7 +57,7 @@
57
57
  ]
58
58
  },
59
59
  ".svelte-kit/generated/client-optimized/nodes/1.js": {
60
- "file": "_app/immutable/nodes/1.DBSWa36f.js",
60
+ "file": "_app/immutable/nodes/1.Dom3CKWF.js",
61
61
  "name": "nodes/1",
62
62
  "src": ".svelte-kit/generated/client-optimized/nodes/1.js",
63
63
  "isEntry": true,
@@ -66,7 +66,7 @@
66
66
  "_CMBQQ9RZ.js",
67
67
  "_CKDtmZUQ.js",
68
68
  "_BAACMRH5.js",
69
- "_DMyTUV-Y.js"
69
+ "_Dhf4xQKo.js"
70
70
  ]
71
71
  },
72
72
  ".svelte-kit/generated/client-optimized/nodes/10.js": {
@@ -97,7 +97,7 @@
97
97
  ]
98
98
  },
99
99
  ".svelte-kit/generated/client-optimized/nodes/11.js": {
100
- "file": "_app/immutable/nodes/11.O4cjXCg4.js",
100
+ "file": "_app/immutable/nodes/11.DMlayLCK.js",
101
101
  "name": "nodes/11",
102
102
  "src": ".svelte-kit/generated/client-optimized/nodes/11.js",
103
103
  "isEntry": true,
@@ -111,7 +111,7 @@
111
111
  "_CUC98kMZ.js",
112
112
  "_t-La0hgu.js",
113
113
  "_CzlPaHY9.js",
114
- "_nURnIknV.js",
114
+ "_DEKAA-Fm.js",
115
115
  "_BUwxRmHf.js",
116
116
  "_DHM6H-es.js",
117
117
  "_C1Vid6wz.js",
@@ -125,7 +125,7 @@
125
125
  ]
126
126
  },
127
127
  ".svelte-kit/generated/client-optimized/nodes/12.js": {
128
- "file": "_app/immutable/nodes/12.BWQdeRdX.js",
128
+ "file": "_app/immutable/nodes/12.Bu89A1eX.js",
129
129
  "name": "nodes/12",
130
130
  "src": ".svelte-kit/generated/client-optimized/nodes/12.js",
131
131
  "isEntry": true,
@@ -141,7 +141,7 @@
141
141
  "_CzlPaHY9.js",
142
142
  "_Bfc47y5P.js",
143
143
  "_CNdcuGR0.js",
144
- "_nURnIknV.js",
144
+ "_DEKAA-Fm.js",
145
145
  "_BUwxRmHf.js",
146
146
  "_BKuh57WU.js",
147
147
  "_DMZwI8Cj.js",
@@ -176,7 +176,7 @@
176
176
  ]
177
177
  },
178
178
  ".svelte-kit/generated/client-optimized/nodes/3.js": {
179
- "file": "_app/immutable/nodes/3._S1vrLVF.js",
179
+ "file": "_app/immutable/nodes/3.B86rlHXU.js",
180
180
  "name": "nodes/3",
181
181
  "src": ".svelte-kit/generated/client-optimized/nodes/3.js",
182
182
  "isEntry": true,
@@ -188,7 +188,7 @@
188
188
  "_CgnwuKKO.js",
189
189
  "_CUC98kMZ.js",
190
190
  "_t-La0hgu.js",
191
- "_DMyTUV-Y.js",
191
+ "_Dhf4xQKo.js",
192
192
  "_C1Vid6wz.js",
193
193
  "_BmZ9upwL.js",
194
194
  "_DCgHuuvs.js",
@@ -225,7 +225,7 @@
225
225
  ]
226
226
  },
227
227
  ".svelte-kit/generated/client-optimized/nodes/5.js": {
228
- "file": "_app/immutable/nodes/5.BiFBiWcW.js",
228
+ "file": "_app/immutable/nodes/5.CqTXvadV.js",
229
229
  "name": "nodes/5",
230
230
  "src": ".svelte-kit/generated/client-optimized/nodes/5.js",
231
231
  "isEntry": true,
@@ -239,7 +239,7 @@
239
239
  "_CUC98kMZ.js",
240
240
  "_Bfc47y5P.js",
241
241
  "_CNdcuGR0.js",
242
- "_nURnIknV.js",
242
+ "_DEKAA-Fm.js",
243
243
  "_DbgD7JLa.js",
244
244
  "_DSLBMEpr.js",
245
245
  "_Co3xKhEp.js",
@@ -252,7 +252,7 @@
252
252
  ]
253
253
  },
254
254
  ".svelte-kit/generated/client-optimized/nodes/6.js": {
255
- "file": "_app/immutable/nodes/6.BNS-W0R_.js",
255
+ "file": "_app/immutable/nodes/6.BJZ62MCd.js",
256
256
  "name": "nodes/6",
257
257
  "src": ".svelte-kit/generated/client-optimized/nodes/6.js",
258
258
  "isEntry": true,
@@ -265,8 +265,8 @@
265
265
  "_TOCyHP97.js",
266
266
  "_CUC98kMZ.js",
267
267
  "_2zMvi6fR.js",
268
- "_DMyTUV-Y.js",
269
- "_nURnIknV.js",
268
+ "_Dhf4xQKo.js",
269
+ "_DEKAA-Fm.js",
270
270
  "_DHM6H-es.js",
271
271
  "_DbgD7JLa.js",
272
272
  "_Co3xKhEp.js",
@@ -307,7 +307,7 @@
307
307
  ]
308
308
  },
309
309
  ".svelte-kit/generated/client-optimized/nodes/8.js": {
310
- "file": "_app/immutable/nodes/8.BEUdazrw.js",
310
+ "file": "_app/immutable/nodes/8.B4fj2Xyu.js",
311
311
  "name": "nodes/8",
312
312
  "src": ".svelte-kit/generated/client-optimized/nodes/8.js",
313
313
  "isEntry": true,
@@ -322,7 +322,7 @@
322
322
  "_t-La0hgu.js",
323
323
  "_CzlPaHY9.js",
324
324
  "_2zMvi6fR.js",
325
- "_DMyTUV-Y.js",
325
+ "_Dhf4xQKo.js",
326
326
  "_3InFPLvE.js",
327
327
  "_BUwxRmHf.js",
328
328
  "_BmZ9upwL.js",
@@ -337,7 +337,7 @@
337
337
  ]
338
338
  },
339
339
  ".svelte-kit/generated/client-optimized/nodes/9.js": {
340
- "file": "_app/immutable/nodes/9.CrLHYPEJ.js",
340
+ "file": "_app/immutable/nodes/9.C57_2xq6.js",
341
341
  "name": "nodes/9",
342
342
  "src": ".svelte-kit/generated/client-optimized/nodes/9.js",
343
343
  "isEntry": true,
@@ -349,7 +349,7 @@
349
349
  "_CgnwuKKO.js",
350
350
  "_CUC98kMZ.js",
351
351
  "_t-La0hgu.js",
352
- "_DMyTUV-Y.js",
352
+ "_Dhf4xQKo.js",
353
353
  "_BmZ9upwL.js",
354
354
  "_C1Vid6wz.js",
355
355
  "_DCgHuuvs.js",
@@ -562,6 +562,13 @@
562
562
  "_BAACMRH5.js"
563
563
  ]
564
564
  },
565
+ "_DEKAA-Fm.js": {
566
+ "file": "_app/immutable/chunks/DEKAA-Fm.js",
567
+ "name": "stores",
568
+ "imports": [
569
+ "_Dhf4xQKo.js"
570
+ ]
571
+ },
565
572
  "_DHM6H-es.js": {
566
573
  "file": "_app/immutable/chunks/DHM6H-es.js",
567
574
  "name": "runner",
@@ -587,13 +594,6 @@
587
594
  "_app/immutable/assets/ConfirmModal.Dd3uP-Sk.css"
588
595
  ]
589
596
  },
590
- "_DMyTUV-Y.js": {
591
- "file": "_app/immutable/chunks/DMyTUV-Y.js",
592
- "name": "entry",
593
- "imports": [
594
- "_BAACMRH5.js"
595
- ]
596
- },
597
597
  "_DSLBMEpr.js": {
598
598
  "file": "_app/immutable/chunks/DSLBMEpr.js",
599
599
  "name": "format",
@@ -608,6 +608,13 @@
608
608
  "_CUC98kMZ.js"
609
609
  ]
610
610
  },
611
+ "_Dhf4xQKo.js": {
612
+ "file": "_app/immutable/chunks/Dhf4xQKo.js",
613
+ "name": "entry",
614
+ "imports": [
615
+ "_BAACMRH5.js"
616
+ ]
617
+ },
611
618
  "_Dlnxgs49.js": {
612
619
  "file": "_app/immutable/chunks/Dlnxgs49.js",
613
620
  "name": "auth"
@@ -632,13 +639,6 @@
632
639
  "_CMBQQ9RZ.js"
633
640
  ]
634
641
  },
635
- "_nURnIknV.js": {
636
- "file": "_app/immutable/chunks/nURnIknV.js",
637
- "name": "stores",
638
- "imports": [
639
- "_DMyTUV-Y.js"
640
- ]
641
- },
642
642
  "_t-La0hgu.js": {
643
643
  "file": "_app/immutable/chunks/t-La0hgu.js",
644
644
  "name": "input",
@@ -663,12 +663,12 @@
663
663
  ]
664
664
  },
665
665
  "node_modules/@sveltejs/kit/src/runtime/client/entry.js": {
666
- "file": "_app/immutable/entry/start.BxeX1Uxs.js",
666
+ "file": "_app/immutable/entry/start.Bn25CW9X.js",
667
667
  "name": "entry/start",
668
668
  "src": "node_modules/@sveltejs/kit/src/runtime/client/entry.js",
669
669
  "isEntry": true,
670
670
  "imports": [
671
- "_DMyTUV-Y.js"
671
+ "_Dhf4xQKo.js"
672
672
  ]
673
673
  }
674
674
  }
@@ -1 +1 @@
1
- import{s as e}from"./DMyTUV-Y.js";const r=()=>{const s=e;return{page:{subscribe:s.page.subscribe},navigating:{subscribe:s.navigating.subscribe},updated:s.updated}},b={subscribe(s){return r().page.subscribe(s)}};export{b as p};
1
+ import{s as e}from"./Dhf4xQKo.js";const r=()=>{const s=e;return{page:{subscribe:s.page.subscribe},navigating:{subscribe:s.navigating.subscribe},updated:s.updated}},b={subscribe(s){return r().page.subscribe(s)}};export{b as p};