signalk-backup 0.4.0 → 0.5.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,148 @@
1
+ // Mirrors the Grafana exporter: pulls signalk-database's /api/full-export/{databases,<id>} over loopback and stages one db.sqlite per consumer-plugin into kopia's snapshot tree.
2
+ import { mkdir, rename, rm, unlink } from 'node:fs/promises';
3
+ import { createWriteStream } from 'node:fs';
4
+ import { Readable } from 'node:stream';
5
+ import { pipeline } from 'node:stream/promises';
6
+ import { join } from 'node:path';
7
+ const SIGNALK_DATABASE_PLUGIN_ID = 'signalk-database';
8
+ const DEFAULT_SIGNALK_BASE = 'http://127.0.0.1:3000';
9
+ const FETCH_TIMEOUT_MS = 600_000;
10
+ // Same id grammar the source plugin enforces — reject early so we never
11
+ // even try a fetch the server would 400 on.
12
+ const SAFE_ID = /^[A-Za-z0-9._-]+$/;
13
+ export class SignalKDatabaseExporter {
14
+ pluginId = SIGNALK_DATABASE_PLUGIN_ID;
15
+ baseUrl;
16
+ fetchImpl;
17
+ log;
18
+ constructor(opts = {}) {
19
+ this.baseUrl = (opts.signalkBaseUrl ?? DEFAULT_SIGNALK_BASE).replace(/\/$/, '');
20
+ this.fetchImpl = opts.fetch ?? fetch;
21
+ this.log = (msg) => opts.log?.(`[signalk-database-export] ${msg}`);
22
+ }
23
+ async detect() {
24
+ // Manifest is cheap — GET returning 200 with a `databases` array even
25
+ // when there are zero consumer DBs yet (empty plugin-config-data).
26
+ try {
27
+ const manifest = await this.fetchManifest(5_000);
28
+ return Array.isArray(manifest);
29
+ }
30
+ catch (err) {
31
+ this.log(`detect failed: ${errMsg(err)}`);
32
+ return false;
33
+ }
34
+ }
35
+ async exportAll(stagingDir) {
36
+ const startedAt = Date.now();
37
+ await mkdir(stagingDir, { recursive: true });
38
+ // Reset the staging tree so DBs removed from disk (because the
39
+ // consumer plugin was uninstalled) don't linger in kopia forever.
40
+ await this.resetStagingDir(stagingDir);
41
+ await mkdir(stagingDir, { recursive: true });
42
+ const manifest = await this.fetchManifest(10_000);
43
+ const exports = [];
44
+ let totalBytes = 0;
45
+ for (const entry of manifest) {
46
+ if (!SAFE_ID.test(entry.id) || entry.id === '.' || entry.id === '..') {
47
+ this.log(`skip suspicious id: ${entry.id}`);
48
+ continue;
49
+ }
50
+ try {
51
+ const bytes = await this.exportOne(entry, stagingDir);
52
+ exports.push({
53
+ // `table` is the per-row label in the result manifest. For us,
54
+ // each row is a whole consumer DB — use the id verbatim.
55
+ table: entry.id,
56
+ tableDir: join(stagingDir, entry.id),
57
+ shardsWritten: 1,
58
+ shardsSkipped: 0,
59
+ bytes
60
+ });
61
+ totalBytes += bytes;
62
+ }
63
+ catch (err) {
64
+ this.log(`export ${entry.id} failed: ${errMsg(err)}`);
65
+ }
66
+ }
67
+ return {
68
+ pluginId: this.pluginId,
69
+ tables: exports,
70
+ totalBytes,
71
+ durationMs: Date.now() - startedAt
72
+ };
73
+ }
74
+ // -------------------------------------------------------------------
75
+ // Internal
76
+ // -------------------------------------------------------------------
77
+ async fetchManifest(timeoutMs) {
78
+ const url = `${this.baseUrl}/plugins/${this.pluginId}/api/full-export/databases`;
79
+ const res = await this.fetchImpl(url, { signal: AbortSignal.timeout(timeoutMs) });
80
+ if (!res.ok) {
81
+ throw new Error(`manifest HTTP ${res.status}`);
82
+ }
83
+ const body = (await res.json());
84
+ if (!Array.isArray(body.databases)) {
85
+ throw new Error(`manifest missing 'databases' array`);
86
+ }
87
+ const out = [];
88
+ for (const raw of body.databases) {
89
+ const parsed = this.parseEntry(raw);
90
+ if (parsed)
91
+ out.push(parsed);
92
+ }
93
+ return out;
94
+ }
95
+ parseEntry(raw) {
96
+ if (!raw || typeof raw !== 'object')
97
+ return null;
98
+ const o = raw;
99
+ if (typeof o.id !== 'string' || typeof o.bytes !== 'number')
100
+ return null;
101
+ if (typeof o.modifiedAt !== 'string')
102
+ return null;
103
+ return { id: o.id, bytes: o.bytes, modifiedAt: o.modifiedAt };
104
+ }
105
+ async exportOne(entry, stagingDir) {
106
+ const dir = join(stagingDir, entry.id);
107
+ await mkdir(dir, { recursive: true });
108
+ const finalPath = join(dir, 'db.sqlite');
109
+ const url = `${this.baseUrl}/plugins/${this.pluginId}/api/full-export/${encodeURIComponent(entry.id)}`;
110
+ const res = await this.fetchImpl(url, { signal: AbortSignal.timeout(FETCH_TIMEOUT_MS) });
111
+ if (!res.ok) {
112
+ throw new Error(`HTTP ${res.status}: ${(await res.text()).slice(0, 200)}`);
113
+ }
114
+ if (!res.body) {
115
+ throw new Error('response body is empty');
116
+ }
117
+ const bytes = await atomicWrite(res.body, finalPath);
118
+ this.log(`wrote ${entry.id}/db.sqlite (${bytes} bytes)`);
119
+ return bytes;
120
+ }
121
+ // Errors propagate so a failed reset reports as failed-section instead of emitting a half-fresh half-stale tree.
122
+ async resetStagingDir(root) {
123
+ await rm(root, { recursive: true, force: true });
124
+ }
125
+ }
126
+ // Failed writes unlink the partial so half-written data can't slip into the next snapshot.
127
+ async function atomicWrite(body, finalPath) {
128
+ const partialPath = `${finalPath}.partial`;
129
+ const nodeStream = Readable.fromWeb(body);
130
+ const sink = createWriteStream(partialPath);
131
+ let bytes = 0;
132
+ nodeStream.on('data', (chunk) => {
133
+ bytes += chunk.length;
134
+ });
135
+ try {
136
+ await pipeline(nodeStream, sink);
137
+ await rename(partialPath, finalPath);
138
+ return bytes;
139
+ }
140
+ catch (err) {
141
+ await unlink(partialPath).catch(() => undefined);
142
+ throw err;
143
+ }
144
+ }
145
+ function errMsg(err) {
146
+ return err instanceof Error ? err.message : String(err);
147
+ }
148
+ //# sourceMappingURL=signalk-database.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"signalk-database.js","sourceRoot":"","sources":["../../src/database-export/signalk-database.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAA;AAK5C,OAAO,EACL,eAAe,EAKhB,MAAM,YAAY,CAAA;AAqGnB,MAAM,CAAC,OAAO,WAAW,GAAG,EAAE,eAAe,GAAG,MAAM,CA8hBrD"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAA;AAK5C,OAAO,EACL,eAAe,EAKhB,MAAM,YAAY,CAAA;AA2GnB,MAAM,CAAC,OAAO,WAAW,GAAG,EAAE,eAAe,GAAG,MAAM,CA+mBrD"}
package/plugin/index.js CHANGED
@@ -4,6 +4,7 @@ import { BackupClient } from './backup-client.js';
4
4
  import { registerProxy } from './proxy.js';
5
5
  import { discoverSmbHosts, shutdownSmbDiscovery } from './smb-discovery.js';
6
6
  import { ConfigSchema, SCHEMA_DEFAULTS } from './config/schema.js';
7
+ import { resolveImageTag } from './config/image-tag.js';
7
8
  import { runAllExports } from './database-export/index.js';
8
9
  const BACKUP_IMAGE = 'ghcr.io/dirkwa/signalk-backup-server';
9
10
  const CONTAINER_NAME = 'signalk-backup-server';
@@ -23,10 +24,15 @@ const SAFE_TAG = /^[a-zA-Z0-9._-]+$/;
23
24
  * container name `signalk-backup-server`. See:
24
25
  * signalk-container/doc/plugin-developer-guide.md §"Resource Limits"
25
26
  */
27
+ // Cloud sync to Google Drive / SMB runs rclone with 8 parallel transfers
28
+ // alongside kopia; observed RSS during a real sync climbs well past
29
+ // 256 MB and the container gets OOM-killed. 1 GB gives comfortable
30
+ // headroom for the worst-case rclone+kopia path while still being a
31
+ // modest ask on a Pi-class host.
26
32
  const DEFAULT_RESOURCES = {
27
33
  cpus: 1,
28
- memory: '256m',
29
- memorySwap: '256m',
34
+ memory: '1g',
35
+ memorySwap: '1g',
30
36
  pidsLimit: 100
31
37
  };
32
38
  function getContainerManager() {
@@ -102,7 +108,9 @@ export default function (app) {
102
108
  let currentSettings = null;
103
109
  let containerAddress = null;
104
110
  let dbExportTimer = null;
105
- let dbExportInFlight = false;
111
+ // In-flight tick handle so concurrent callers (scheduler + manual
112
+ // backup) coalesce onto the same export rather than racing.
113
+ let dbExportInFlight = null;
106
114
  const buildContainerConfig = (tag) => ({
107
115
  image: BACKUP_IMAGE,
108
116
  tag,
@@ -170,9 +178,18 @@ export default function (app) {
170
178
  app.debug('Starting signalk-backup');
171
179
  // CRITICAL: Signal K does not seed schema defaults into the runtime
172
180
  // config — when the plugin is auto-enabled (or enabled without
173
- // saving the form), `config` is `{}`. Merge defaults so callers can
174
- // rely on every field being present.
175
- const merged = { ...SCHEMA_DEFAULTS, ...config };
181
+ // saving the form), `config` is `{}`. Deep-merge defaults so callers
182
+ // can rely on every field being present, including nested fields
183
+ // added in later versions (e.g. databaseExport.grafana for users
184
+ // upgrading from a config saved before G2).
185
+ const merged = {
186
+ ...SCHEMA_DEFAULTS,
187
+ ...config,
188
+ databaseExport: {
189
+ ...SCHEMA_DEFAULTS.databaseExport,
190
+ ...(config.databaseExport ?? {})
191
+ }
192
+ };
176
193
  currentSettings = merged;
177
194
  void asyncStart(merged).catch((err) => {
178
195
  app.setPluginError(`Startup failed: ${errMsg(err)}`);
@@ -227,7 +244,7 @@ export default function (app) {
227
244
  }
228
245
  }
229
246
  if (!containerImage) {
230
- containerImage = `${BACKUP_IMAGE}:${currentSettings?.imageTag ?? 'latest'}`;
247
+ containerImage = `${BACKUP_IMAGE}:${resolveImageTag(currentSettings?.imageTag ?? 'auto')}`;
231
248
  }
232
249
  res.json({
233
250
  container: {
@@ -261,13 +278,18 @@ export default function (app) {
261
278
  return;
262
279
  }
263
280
  const body = (req.body ?? {});
264
- const tag = (typeof body.tag === 'string' ? body.tag : undefined) ??
281
+ if ('tag' in body && typeof body.tag !== 'string') {
282
+ res.status(400).json({ error: 'tag must be a string' });
283
+ return;
284
+ }
285
+ const requestedTag = (typeof body.tag === 'string' ? body.tag : undefined) ??
265
286
  currentSettings?.imageTag ??
266
- 'latest';
267
- if (!SAFE_TAG.test(tag)) {
287
+ 'auto';
288
+ if (!SAFE_TAG.test(requestedTag)) {
268
289
  res.status(400).json({ error: 'Invalid tag format' });
269
290
  return;
270
291
  }
292
+ const tag = resolveImageTag(requestedTag);
271
293
  try {
272
294
  app.setPluginStatus(`Pulling ${BACKUP_IMAGE}:${tag}...`);
273
295
  await containers.pullImage(`${BACKUP_IMAGE}:${tag}`);
@@ -284,8 +306,9 @@ export default function (app) {
284
306
  res.status(500).json({ error: msg });
285
307
  return;
286
308
  }
309
+ // Persist requestedTag not resolved tag: saving "auto" preserves auto-tracking across upgrades.
287
310
  if (currentSettings) {
288
- currentSettings.imageTag = tag;
311
+ currentSettings.imageTag = requestedTag;
289
312
  await new Promise((resolve) => {
290
313
  app.savePluginOptions({ ...currentSettings }, (err) => {
291
314
  if (err) {
@@ -312,15 +335,20 @@ export default function (app) {
312
335
  router.post('/api/db-export/config', async (req, res) => {
313
336
  const body = (req.body ?? {});
314
337
  const questdb = typeof body.questdb === 'boolean' ? body.questdb : undefined;
338
+ const grafana = typeof body.grafana === 'boolean' ? body.grafana : undefined;
339
+ const signalkDatabase = typeof body.signalkDatabase === 'boolean' ? body.signalkDatabase : undefined;
315
340
  const intervalMinutes = typeof body.intervalMinutes === 'number' && Number.isFinite(body.intervalMinutes)
316
341
  ? Math.round(body.intervalMinutes)
317
342
  : undefined;
318
- if (questdb === undefined && intervalMinutes === undefined) {
343
+ if (questdb === undefined &&
344
+ grafana === undefined &&
345
+ signalkDatabase === undefined &&
346
+ intervalMinutes === undefined) {
319
347
  res.status(400).json({
320
348
  success: false,
321
349
  error: {
322
350
  code: 'INVALID_INPUT',
323
- message: 'Provide questdb (boolean) and/or intervalMinutes (number).'
351
+ message: 'Provide questdb (boolean), grafana (boolean), signalkDatabase (boolean), and/or intervalMinutes (number).'
324
352
  },
325
353
  timestamp: new Date().toISOString()
326
354
  });
@@ -347,6 +375,8 @@ export default function (app) {
347
375
  }
348
376
  const next = {
349
377
  questdb: questdb ?? currentSettings.databaseExport.questdb,
378
+ grafana: grafana ?? currentSettings.databaseExport.grafana,
379
+ signalkDatabase: signalkDatabase ?? currentSettings.databaseExport.signalkDatabase,
350
380
  intervalMinutes: intervalMinutes ?? currentSettings.databaseExport.intervalMinutes
351
381
  };
352
382
  currentSettings.databaseExport = next;
@@ -397,6 +427,21 @@ export default function (app) {
397
427
  });
398
428
  }
399
429
  });
430
+ // Manual-backup interceptor — runs DB exports synchronously
431
+ // before forwarding to the backup-server's snapshot endpoint, so
432
+ // the resulting kopia snapshot captures fresh DB state. Without
433
+ // this, a manual backup would snapshot whatever stale (or empty)
434
+ // files the last scheduler tick left in the staging dir.
435
+ router.post('/api/backups', async (_req, _res, next) => {
436
+ const dbCfg = currentSettings?.databaseExport;
437
+ if (dbCfg?.questdb || dbCfg?.grafana || dbCfg?.signalkDatabase) {
438
+ // runDbExportTick logs and swallows failures internally — a
439
+ // backup with stale DB state is better than no backup, so we
440
+ // always continue to the proxy regardless of export outcome.
441
+ await runDbExportTick();
442
+ }
443
+ next();
444
+ });
400
445
  // Proxy /api/* to the backup-server. Registered LAST so the
401
446
  // explicit /api/update/{check,apply} and /api/cloud/smb/discover
402
447
  // above match first. containerAddress includes the scheme so
@@ -424,7 +469,9 @@ export default function (app) {
424
469
  await client.waitForReady(15_000);
425
470
  app.setPluginStatus(`Connected to external backup-server at ${url}`);
426
471
  await seedFirstRunSchedule(client);
427
- if (settings.databaseExport.questdb) {
472
+ if (settings.databaseExport.questdb ||
473
+ settings.databaseExport.grafana ||
474
+ settings.databaseExport.signalkDatabase) {
428
475
  app.setPluginStatus(`Connected to external backup-server. Note: database export ` +
429
476
  `requires managed-container mode and was skipped.`);
430
477
  }
@@ -452,9 +499,10 @@ export default function (app) {
452
499
  app.setPluginError(`Invalid imageTag "${settings.imageTag}"`);
453
500
  return;
454
501
  }
502
+ const resolvedTag = resolveImageTag(settings.imageTag);
455
503
  try {
456
- app.setPluginStatus(`Starting ${BACKUP_IMAGE}:${settings.imageTag}...`);
457
- await containers.ensureRunning(CONTAINER_NAME, buildContainerConfig(settings.imageTag), {
504
+ app.setPluginStatus(`Starting ${BACKUP_IMAGE}:${resolvedTag}...`);
505
+ await containers.ensureRunning(CONTAINER_NAME, buildContainerConfig(resolvedTag), {
458
506
  onVolumeIssue
459
507
  });
460
508
  // Register with the central update service so users see "update available"
@@ -465,7 +513,7 @@ export default function (app) {
465
513
  pluginId: PLUGIN_ID,
466
514
  containerName: CONTAINER_NAME,
467
515
  image: BACKUP_IMAGE,
468
- currentTag: () => currentSettings?.imageTag ?? settings.imageTag,
516
+ currentTag: () => resolveImageTag(currentSettings?.imageTag ?? settings.imageTag),
469
517
  versionSource: containers.updates.sources.githubReleases('dirkwa/signalk-backup-server')
470
518
  });
471
519
  }
@@ -501,8 +549,16 @@ export default function (app) {
501
549
  */
502
550
  function startDbExportTimer() {
503
551
  stopDbExportTimer();
552
+ // External backup-server mode doesn't run the export pipeline — the
553
+ // exporters write into our local plugin-config-data tree, which the
554
+ // external server has no access to. Don't arm an interval that
555
+ // would no-op on every tick.
556
+ if (currentSettings?.managedContainer === false) {
557
+ app.debug('Database export: external mode, scheduler idle');
558
+ return;
559
+ }
504
560
  const dbCfg = currentSettings?.databaseExport;
505
- if (!dbCfg?.questdb) {
561
+ if (!dbCfg?.questdb && !dbCfg?.grafana && !dbCfg?.signalkDatabase) {
506
562
  app.debug('Database export: no exporters enabled, scheduler idle');
507
563
  return;
508
564
  }
@@ -518,33 +574,50 @@ export default function (app) {
518
574
  dbExportTimer = null;
519
575
  }
520
576
  }
521
- async function runDbExportTick() {
522
- // Coalesce: if a previous tick is still running (e.g. a slow large
523
- // table on a Pi), skip this one entirely rather than queuing.
524
- if (dbExportInFlight) {
525
- app.debug('Database export: previous tick still running, skipping');
577
+ // Pure body — the coalescing/promise-tracking happens in
578
+ // runDbExportTick() so callers always get a single shared promise.
579
+ async function runDbExportOnce() {
580
+ // Belt-and-braces: the scheduler timer and the POST /api/backups
581
+ // interceptor both gate on managedContainer too, but this is the
582
+ // single chokepoint every caller flows through. In external mode
583
+ // there's nowhere local to stage exports for the external server
584
+ // to pick up, so the whole pipeline is a no-op.
585
+ if (currentSettings?.managedContainer === false) {
586
+ app.debug('Database export: skipped (external mode)');
526
587
  return;
527
588
  }
528
- dbExportInFlight = true;
529
- try {
530
- const results = await runAllExports({
531
- signalkConfigRoot: resolveSignalkConfigRoot(),
532
- signalkBaseUrl: resolveSignalkBaseUrl(),
533
- log: (msg) => {
534
- app.debug(msg);
535
- }
536
- });
537
- const totalTables = results.reduce((acc, r) => acc + r.tables.length, 0);
538
- const totalBytes = results.reduce((acc, r) => acc + r.totalBytes, 0);
539
- app.debug(`Database export tick: ${results.length} sources, ` +
540
- `${totalTables} tables, ${totalBytes} bytes`);
541
- }
542
- catch (err) {
589
+ const dbCfg = currentSettings?.databaseExport ?? SCHEMA_DEFAULTS.databaseExport;
590
+ const results = await runAllExports({
591
+ signalkConfigRoot: resolveSignalkConfigRoot(),
592
+ signalkBaseUrl: resolveSignalkBaseUrl(),
593
+ log: (msg) => {
594
+ app.debug(msg);
595
+ },
596
+ enabled: {
597
+ questdb: dbCfg.questdb,
598
+ grafana: dbCfg.grafana,
599
+ signalkDatabase: dbCfg.signalkDatabase
600
+ }
601
+ });
602
+ const totalTables = results.reduce((acc, r) => acc + r.tables.length, 0);
603
+ const totalBytes = results.reduce((acc, r) => acc + r.totalBytes, 0);
604
+ app.debug(`Database export tick: ${results.length} sources, ` +
605
+ `${totalTables} tables, ${totalBytes} bytes`);
606
+ }
607
+ // Coalesce concurrent callers — a manual backup hitting this while
608
+ // the scheduler tick is still in-flight should await the same export,
609
+ // not skip out and snapshot mid-write.
610
+ function runDbExportTick() {
611
+ if (dbExportInFlight)
612
+ return dbExportInFlight;
613
+ dbExportInFlight = runDbExportOnce()
614
+ .catch((err) => {
543
615
  app.error(`Database export tick failed: ${errMsg(err)}`);
544
- }
545
- finally {
546
- dbExportInFlight = false;
547
- }
616
+ })
617
+ .finally(() => {
618
+ dbExportInFlight = null;
619
+ });
620
+ return dbExportInFlight;
548
621
  }
549
622
  /**
550
623
  * Resolve the host-visible SignalK config root. Prefer the env var
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
@@ -1,2 +1,2 @@
1
- (function(){let e=document.createElement(`link`).relList;if(e&&e.supports&&e.supports(`modulepreload`))return;for(let e of document.querySelectorAll(`link[rel="modulepreload"]`))n(e);new MutationObserver(e=>{for(let t of e)if(t.type===`childList`)for(let e of t.addedNodes)e.tagName===`LINK`&&e.rel===`modulepreload`&&n(e)}).observe(document,{childList:!0,subtree:!0});function t(e){let t={};return e.integrity&&(t.integrity=e.integrity),e.referrerPolicy&&(t.referrerPolicy=e.referrerPolicy),e.crossOrigin===`use-credentials`?t.credentials=`include`:e.crossOrigin===`anonymous`?t.credentials=`omit`:t.credentials=`same-origin`,t}function n(e){if(e.ep)return;e.ep=!0;let n=t(e);fetch(e.href,n)}})();var e=`modulepreload`,t=function(e){return`/signalk-backup/`+e},n={},r=function(r,i,a){let o=Promise.resolve();if(i&&i.length>0){let r=document.getElementsByTagName(`link`),s=document.querySelector(`meta[property=csp-nonce]`),c=s?.nonce||s?.getAttribute(`nonce`);function l(e){return Promise.all(e.map(e=>Promise.resolve(e).then(e=>({status:`fulfilled`,value:e}),e=>({status:`rejected`,reason:e}))))}o=l(i.map(i=>{if(i=t(i,a),i in n)return;n[i]=!0;let o=i.endsWith(`.css`),s=o?`[rel="stylesheet"]`:``;if(a)for(let e=r.length-1;e>=0;e--){let t=r[e];if(t.href===i&&(!o||t.rel===`stylesheet`))return}else if(document.querySelector(`link[href="${i}"]${s}`))return;let l=document.createElement(`link`);if(l.rel=o?`stylesheet`:e,o||(l.as=`script`),l.crossOrigin=``,l.href=i,c&&l.setAttribute(`nonce`,c),document.head.appendChild(l),o)return new Promise((e,t)=>{l.addEventListener(`load`,e),l.addEventListener(`error`,()=>t(Error(`Unable to preload CSS for ${i}`)))})}))}function s(e){let t=new Event(`vite:preloadError`,{cancelable:!0});if(t.payload=e,window.dispatchEvent(t),!t.defaultPrevented)throw e}return o.then(e=>{for(let t of e||[])t.status===`rejected`&&s(t.reason);return r().catch(s)})};async function i(){let e=await fetch(`/admin/.vite/manifest.json`);if(!e.ok)return;let t=await e.json(),n=new Set;for(let e of Object.values(t))if(e){for(let t of e.css??[])n.add(t);typeof e.file==`string`&&e.file.endsWith(`.css`)&&n.add(e.file)}await Promise.all([...n].map(e=>new Promise(t=>{let n=document.createElement(`link`);n.rel=`stylesheet`,n.href=`/admin/`+e,n.onload=t,n.onerror=t,document.head.appendChild(n)})))}try{await i()}catch(e){console.warn(`signalk-backup: admin CSS not available`,e)}finally{await r(()=>import(`./main-BZ1xX0IR.js`),[])}
2
- //# sourceMappingURL=index-DMT6pdi_.js.map
1
+ (function(){let e=document.createElement(`link`).relList;if(e&&e.supports&&e.supports(`modulepreload`))return;for(let e of document.querySelectorAll(`link[rel="modulepreload"]`))n(e);new MutationObserver(e=>{for(let t of e)if(t.type===`childList`)for(let e of t.addedNodes)e.tagName===`LINK`&&e.rel===`modulepreload`&&n(e)}).observe(document,{childList:!0,subtree:!0});function t(e){let t={};return e.integrity&&(t.integrity=e.integrity),e.referrerPolicy&&(t.referrerPolicy=e.referrerPolicy),e.crossOrigin===`use-credentials`?t.credentials=`include`:e.crossOrigin===`anonymous`?t.credentials=`omit`:t.credentials=`same-origin`,t}function n(e){if(e.ep)return;e.ep=!0;let n=t(e);fetch(e.href,n)}})();var e=`modulepreload`,t=function(e){return`/signalk-backup/`+e},n={},r=function(r,i,a){let o=Promise.resolve();if(i&&i.length>0){let r=document.getElementsByTagName(`link`),s=document.querySelector(`meta[property=csp-nonce]`),c=s?.nonce||s?.getAttribute(`nonce`);function l(e){return Promise.all(e.map(e=>Promise.resolve(e).then(e=>({status:`fulfilled`,value:e}),e=>({status:`rejected`,reason:e}))))}o=l(i.map(i=>{if(i=t(i,a),i in n)return;n[i]=!0;let o=i.endsWith(`.css`),s=o?`[rel="stylesheet"]`:``;if(a)for(let e=r.length-1;e>=0;e--){let t=r[e];if(t.href===i&&(!o||t.rel===`stylesheet`))return}else if(document.querySelector(`link[href="${i}"]${s}`))return;let l=document.createElement(`link`);if(l.rel=o?`stylesheet`:e,o||(l.as=`script`),l.crossOrigin=``,l.href=i,c&&l.setAttribute(`nonce`,c),document.head.appendChild(l),o)return new Promise((e,t)=>{l.addEventListener(`load`,e),l.addEventListener(`error`,()=>t(Error(`Unable to preload CSS for ${i}`)))})}))}function s(e){let t=new Event(`vite:preloadError`,{cancelable:!0});if(t.payload=e,window.dispatchEvent(t),!t.defaultPrevented)throw e}return o.then(e=>{for(let t of e||[])t.status===`rejected`&&s(t.reason);return r().catch(s)})};async function i(){let e=await fetch(`/admin/.vite/manifest.json`);if(!e.ok)return;let t=await e.json(),n=new Set;for(let e of Object.values(t))if(e){for(let t of e.css??[])n.add(t);typeof e.file==`string`&&e.file.endsWith(`.css`)&&n.add(e.file)}await Promise.all([...n].map(e=>new Promise(t=>{let n=document.createElement(`link`);n.rel=`stylesheet`,n.href=`/admin/`+e,n.onload=t,n.onerror=t,document.head.appendChild(n)})))}try{await i()}catch(e){console.warn(`signalk-backup: admin CSS not available`,e)}finally{await r(()=>import(`./main-Bb6YhYnz.js`),[])}
2
+ //# sourceMappingURL=index-BbZnGesz.js.map
@@ -1 +1 @@
1
- {"version":3,"mappings":"m2DACM,eAAe,GAAiB,CAC9B,IAAM,EAAM,MAAM,MAAM,4BAA4B,EACpD,GAAI,CAAC,EAAI,GAAI,OACb,IAAM,EAAW,MAAM,EAAI,KAAK,EAC1B,EAAW,IAAI,IAMrB,IAAK,IAAM,KAAS,OAAO,OAAO,CAAQ,EACnC,KACL,KAAK,IAAM,KAAO,EAAM,KAAO,CAAC,EAAG,EAAS,IAAI,CAAG,EAC/C,OAAO,EAAM,MAAS,UAAY,EAAM,KAAK,SAAS,MAAM,GAC9D,EAAS,IAAI,EAAM,IAAI,CAF0B,CAKrD,MAAM,QAAQ,IACZ,CAAC,GAAG,CAAQ,EAAE,IACX,GACC,IAAI,QAAS,GAAY,CACvB,IAAM,EAAO,SAAS,cAAc,MAAM,EAC1C,EAAK,IAAM,aACX,EAAK,KAAO,UAAY,EACxB,EAAK,OAAS,EACd,EAAK,QAAU,EACf,SAAS,KAAK,YAAY,CAAI,CAChC,CAAC,CACL,CACF,CACF,CAEA,GAAI,CACF,MAAM,EAAe,CACvB,OAAS,EAAK,CACZ,QAAQ,KAAK,0CAA2C,CAAG,CAC7D,QAAU,CACR,YAAM,OAAO,yBACf","names":[],"ignoreList":[],"sources":["../../webapp/index.html?html-proxy&index=0.js"],"sourcesContent":["\n async function injectAdminCss() {\n const res = await fetch('/admin/.vite/manifest.json')\n if (!res.ok) return\n const manifest = await res.json()\n const cssFiles = new Set()\n // Two shapes are common: an entry whose `css` array lists its\n // stylesheet imports, OR a top-level entry whose `file` itself\n // ends in `.css` (when Vite extracts a global stylesheet). The\n // current SignalK admin uses the second shape; older builds and\n // the docs example use the first. Cover both.\n for (const entry of Object.values(manifest)) {\n if (!entry) continue\n for (const css of entry.css ?? []) cssFiles.add(css)\n if (typeof entry.file === 'string' && entry.file.endsWith('.css')) {\n cssFiles.add(entry.file)\n }\n }\n await Promise.all(\n [...cssFiles].map(\n (css) =>\n new Promise((resolve) => {\n const link = document.createElement('link')\n link.rel = 'stylesheet'\n link.href = '/admin/' + css\n link.onload = resolve\n link.onerror = resolve\n document.head.appendChild(link)\n })\n )\n )\n }\n\n try {\n await injectAdminCss()\n } catch (err) {\n console.warn('signalk-backup: admin CSS not available', err)\n } finally {\n await import('./src/main.tsx')\n }\n "],"file":"index-DMT6pdi_.js"}
1
+ {"version":3,"mappings":"m2DACM,eAAe,GAAiB,CAC9B,IAAM,EAAM,MAAM,MAAM,4BAA4B,EACpD,GAAI,CAAC,EAAI,GAAI,OACb,IAAM,EAAW,MAAM,EAAI,KAAK,EAC1B,EAAW,IAAI,IAMrB,IAAK,IAAM,KAAS,OAAO,OAAO,CAAQ,EACnC,KACL,KAAK,IAAM,KAAO,EAAM,KAAO,CAAC,EAAG,EAAS,IAAI,CAAG,EAC/C,OAAO,EAAM,MAAS,UAAY,EAAM,KAAK,SAAS,MAAM,GAC9D,EAAS,IAAI,EAAM,IAAI,CAF0B,CAKrD,MAAM,QAAQ,IACZ,CAAC,GAAG,CAAQ,EAAE,IACX,GACC,IAAI,QAAS,GAAY,CACvB,IAAM,EAAO,SAAS,cAAc,MAAM,EAC1C,EAAK,IAAM,aACX,EAAK,KAAO,UAAY,EACxB,EAAK,OAAS,EACd,EAAK,QAAU,EACf,SAAS,KAAK,YAAY,CAAI,CAChC,CAAC,CACL,CACF,CACF,CAEA,GAAI,CACF,MAAM,EAAe,CACvB,OAAS,EAAK,CACZ,QAAQ,KAAK,0CAA2C,CAAG,CAC7D,QAAU,CACR,YAAM,OAAO,yBACf","names":[],"ignoreList":[],"sources":["../../webapp/index.html?html-proxy&index=0.js"],"sourcesContent":["\n async function injectAdminCss() {\n const res = await fetch('/admin/.vite/manifest.json')\n if (!res.ok) return\n const manifest = await res.json()\n const cssFiles = new Set()\n // Two shapes are common: an entry whose `css` array lists its\n // stylesheet imports, OR a top-level entry whose `file` itself\n // ends in `.css` (when Vite extracts a global stylesheet). The\n // current SignalK admin uses the second shape; older builds and\n // the docs example use the first. Cover both.\n for (const entry of Object.values(manifest)) {\n if (!entry) continue\n for (const css of entry.css ?? []) cssFiles.add(css)\n if (typeof entry.file === 'string' && entry.file.endsWith('.css')) {\n cssFiles.add(entry.file)\n }\n }\n await Promise.all(\n [...cssFiles].map(\n (css) =>\n new Promise((resolve) => {\n const link = document.createElement('link')\n link.rel = 'stylesheet'\n link.href = '/admin/' + css\n link.onload = resolve\n link.onerror = resolve\n document.head.appendChild(link)\n })\n )\n )\n }\n\n try {\n await injectAdminCss()\n } catch (err) {\n console.warn('signalk-backup: admin CSS not available', err)\n } finally {\n await import('./src/main.tsx')\n }\n "],"file":"index-BbZnGesz.js"}