
thePR0M3TH3ANandClaude Opus 4.8
0e2f683b62
feat(nip71): Phase 0 — addressable 34235/36 mirror builder + magnet/i/ox imeta
First build step of the NIP-71 interop plan (no UX; FEATURE_PUBLISH_NIP71 stays
off). Pure mapping from a bitvid video (kind-30078 shape) to an opt-in addressable
NIP-71 mirror event.
- js/nostr/nip71.js (foundational):
- normalizeNip71Kind now recognizes the addressable kinds 34235/34236 (so the
parser preserves them), alongside 21/22.
- imeta builder + parser gained standard NIP-94 fields magnet, i (infohash), ox
— bitvid's WebTorrent now rides the standard, round-trippable.
- js/nostr/nip71Mirror.js (new): buildNip71MirrorEvent(video, options) →
{ ok:true, event } | { ok:false, reason }. Builds kind 34235 (normal) / 34236
(short, by dims or explicit flag), d=videoRootId, title/published_at(stable)/alt,
imeta (url/m/image/x/ox/magnet/i/dim/duration), content-warning (NSFW), t
hashtags, origin + a back-pointer to the canonical 30078, client=bitvid.
Hard rules enforced: private videos refused; non-HTTPS-url refused.
tests/nip71-mirror.test.mjs: spec-shape mapping, round-trip via
extractNip71MetadataFromTags (magnet/i/ox survive), private + url-less refusals,
portrait→34236 + content-warning, explicit short override, MIME derivation.
Mutation-verified (private refusal, magnet imeta, d-tag all load-bearing).
Co-Authored-By: Claude Opus 4.8 <[email protected]>
2026-06-21 23:05:12 -04:00
..
2026-06-19 08:04:54 -04:00
2026-01-19 12:51:34 -05:00
2026-02-08 00:33:13 +00:00
2026-02-05 20:31:23 +00:00
2025-10-15 14:37:25 -04:00
2026-06-21 14:10:21 -04:00
2026-06-21 23:05:12 -04:00
2026-06-21 22:11:46 -04:00
2026-01-24 20:28:53 +00:00
2026-06-21 21:21:54 -04:00
2026-02-11 03:27:26 +00:00
2026-06-20 14:55:41 -04:00
2026-06-21 21:21:54 -04:00
2026-06-17 06:13:38 -04:00
2026-02-05 17:00:13 +00:00
2026-06-12 14:31:38 -04:00
2026-06-12 09:44:36 -04:00
2026-06-21 21:52:52 -04:00
2025-10-03 21:10:22 -04:00
2026-02-08 03:44:38 +00:00
2026-01-07 17:30:22 +00:00
2026-02-17 10:55:28 +00:00
2026-02-11 04:05:36 +00:00
2026-06-16 20:36:27 -04:00
2026-01-24 20:28:53 +00:00
2026-06-14 09:52:41 -04:00
2026-02-07 21:52:51 +00:00
2026-06-16 15:40:06 -04:00
2026-06-13 18:48:09 -04:00
2026-02-16 21:47:01 +00:00
2026-02-08 03:44:38 +00:00
2026-01-24 22:29:18 +00:00
2026-01-22 19:27:40 -05:00
2026-01-21 17:48:01 +00:00
2026-06-19 22:10:55 -04:00
2026-02-08 00:22:16 +00:00
2026-02-07 21:59:37 +00:00
2026-01-23 04:19:40 +00:00
2026-06-20 18:27:42 -04:00
2026-06-16 15:40:06 -04:00
2026-01-23 02:09:08 -05:00
2026-01-24 20:28:53 +00:00
2026-01-30 17:04:15 -05:00
2026-06-19 08:52:11 -04:00
2026-01-26 21:49:18 -05:00
2026-01-28 23:49:33 +00:00
2026-02-09 21:32:29 +00:00
2026-02-20 21:14:39 +00:00
2026-06-20 12:19:09 -04:00
2026-02-09 02:24:53 +00:00
2025-10-22 22:17:30 -04:00
2025-10-22 22:17:30 -04:00
2026-02-07 21:52:51 +00:00
2025-09-24 15:23:24 -04:00
2026-06-16 16:56:12 -04:00
2026-01-19 20:46:47 +00:00
2026-02-22 15:56:05 -05:00
2026-02-12 16:56:06 +00:00
2026-01-19 02:13:59 +00:00
2025-10-01 13:42:50 -04:00
2026-06-19 16:22:08 -04:00
2026-06-19 16:22:08 -04:00
2026-06-16 09:17:47 -04:00
2026-01-30 16:51:01 -05:00
2026-01-19 20:46:47 +00:00
2026-06-19 11:33:35 -04:00
2026-06-19 11:33:35 -04:00
2026-01-19 20:46:47 +00:00
2026-06-14 15:49:50 -04:00
2026-02-10 01:10:19 -05:00
2026-06-19 11:33:35 -04:00
2026-06-20 18:16:10 -04:00
2026-06-21 10:55:27 -04:00
2025-10-15 12:49:46 -04:00
2026-06-19 22:10:55 -04:00
2026-02-17 07:01:18 +00:00
2025-02-05 16:54:40 -05:00
2026-06-19 16:39:38 -04:00