aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAdam Soltys <[email protected]>2026-10-08 23:08:48 -0700
committerAdam Soltys <[email protected]>2026-10-08 23:08:48 -0700
commit6b0dd0d8e908ef147eda4413a2d0f4c412c05243 (patch)
tree85f74a788f1ea7e70e13a8e68fd9147f8989bd99
parentf3545a79caf0f76eeaa0b99a65bbcab1b52506d0 (diff)
downloadcoinosv3-6b0dd0d8e908ef147eda4413a2d0f4c412c05243.tar.gz
coinosv3-6b0dd0d8e908ef147eda4413a2d0f4c412c05243.zip
Asset paths are site-absolute: relative ones resolved against a deep page (/feed/…, /nevent1…) and fetched the app's HTML, which broke the coinos community's logo (and would have broken the QR decoder, signer module and language packs there). Dev server serves the app icons. The live Concord delivery test is gone: it posted "delivery test" messages into the real coinos #general
Co-Authored-By: Claude Opus 5.5 <[email protected]>
-rw-r--r--dev.js4
-rw-r--r--src/asset-url.js6
-rw-r--r--tools/concord-live-delivery-test.js34
3 files changed, 8 insertions, 36 deletions
diff --git a/dev.js b/dev.js
index 4f9ab0c..fb46a72 100644
--- a/dev.js
+++ b/dev.js
@@ -63,6 +63,10 @@ Bun.serve({
? new Response(file, { headers: { 'content-type': 'image/webp', 'cache-control': NO_STORE } })
: new Response('Not found', { status: 404 });
}
+ if (/^\/icon(-maskable)?(-\d+)?\.(png|svg)$/.test(path)) {
+ const file = Bun.file('static' + path);
+ if (await file.exists()) return new Response(file, { headers: { 'cache-control': NO_STORE } });
+ }
const loc = path.match(/^\/locales\/([a-z]{2})\.json$/);
if (loc) {
const f = Bun.file('src/locales/' + loc[1] + '.json');
diff --git a/src/asset-url.js b/src/asset-url.js
index bd80240..89ad1ea 100644
--- a/src/asset-url.js
+++ b/src/asset-url.js
@@ -1,6 +1,8 @@
// The standalone wallet (standalone.html opened from a disk) has no files
// beside it: punks, the lazy modules and the language packs come from the
-// site instead. Served from anywhere else, paths stay relative.
+// site instead. Served from anywhere else, paths are from the site root:
+// relative ones resolved against a deep page (/feed/…, /nevent1…, /chat)
+// and fetched the app's HTML instead (the coinos community's logo broke).
export const SITE = 'https://v3.coinos.io/';
const fromDisk = () => typeof location !== 'undefined' && location.protocol === 'file:';
-export const assetUrl = (path) => fromDisk() ? SITE + path.replace(/^\//, '') : path;
+export const assetUrl = (path) => (fromDisk() ? SITE : '/') + path.replace(/^\//, '');
diff --git a/tools/concord-live-delivery-test.js b/tools/concord-live-delivery-test.js
deleted file mode 100644
index 5f4733d..0000000
--- a/tools/concord-live-delivery-test.js
+++ /dev/null
@@ -1,34 +0,0 @@
-// Publish one labeled test message to coinos #general via the Concord
-// protocol, exactly as hal would, from a throwaway key — used to test
-// live delivery into an already-open client.
-import { channelKey, wrapRumor, msTags } from '../src/concord.js';
-import { getPublicKey, finalizeEvent, generateSecretKey } from 'nostr-tools/pure';
-import { getEventHash } from 'nostr-tools/pure';
-import { SimplePool } from 'nostr-tools/pool';
-
-const hexToBytes = (s) => Uint8Array.from(s.match(/../g).map((b) => parseInt(b, 16)));
-const root = hexToBytes('58b2ce26eba30fbd19d9a57bce4c61e65838686998f10bba1d3e822fb72b372e');
-const CH = '56bf8b96c1a3768c85444873df507cdbc3275fcbc21996af09e60003f850f85c';
-const stream = channelKey(root, CH, 0);
-
-const sk = generateSecretKey();
-const pubkey = getPublicKey(sk);
-const signer = {
- pubkey,
- signEvent: async (e) => finalizeEvent(e, sk),
-};
-
-const { created_at, ms } = msTags(Date.now());
-const rumor = {
- kind: 9, pubkey, content: '🤖 delivery test (claude, debugging) — ignore',
- tags: [['channel', CH], ['epoch', '0'], ms], created_at,
-};
-rumor.id = getEventHash({ ...rumor });
-
-const wrap = await wrapRumor(rumor, signer, stream);
-const pool = new SimplePool();
-const relays = ['wss://relay.coinos.io', 'wss://nos.lol'];
-const res = await Promise.allSettled(pool.publish(relays, wrap));
-console.log('published wrap', wrap.id.slice(0, 12), res.map((r) => r.status));
-pool.close(relays);
-process.exit(0);