Deux lignes suffisent pour le bundle minimum. Les fichiers sont disponibles via plusieurs origines :
<!-- Via IPFS gateway (résolution universel) --> <script src="https://ipfs.copylaradio.com/ipns/copylaradio.com/nostr.bundle.js"></script> <link rel="stylesheet" href="https://ipfs.copylaradio.com/ipns/copylaradio.com/uplanet-atomic.css"> <script src="https://ipfs.copylaradio.com/ipns/copylaradio.com/lib_0_foundation.js"></script> <script src="https://ipfs.copylaradio.com/ipns/copylaradio.com/lib_1_relay.js"></script> <script src="https://ipfs.copylaradio.com/ipns/copylaradio.com/lib_2_api_connect.js"></script> <script src="https://ipfs.copylaradio.com/ipns/copylaradio.com/uplanet-header.js"></script> <!-- Alternativement depuis l'API earth/ --> <!-- <script src="https://u.copylaradio.com/earth/uplanet-header.js"></script> -->
waitForConnection(async () => { const pk = window.userPubkey; // hex pubkey const meta = await fetchUserMetadata(pk); // kind 0 console.log(meta.name, meta.picture); });
await shareCurrentPage("Je recommande cet article !"); // → publie un kind 1 avec l'URL actuelle + message
const email = await fetchUserEmailWithFallback(window.userPubkey); const tx = await sendMultipassPayment(1, destG1pub, null, email); const ok = await verifyMultipassPayment(tx.id); alert(ok ? '✅ 1 ẐEN envoyé' : '⚠ Réessayez');
const phiA = Phi2X.computePhaseFromForm('1988-03-15', '12:00', 2.35); const phiB = Phi2X.computePhaseFromForm('1992-07-22', '08:30', 2.35); const k = Phi2X.computeResonanceK(phiA, phiB); // 0.0–1.0 const H = Phi2X.groupHarmonyScore([phiA, phiB]); // groupe
| Fichier | Poids | Expose | Déverrouille |
|---|---|---|---|
nostr.bundle.js | 196 KB | NostrTools.* | Signature sans extension, décodage npub/nsec |
uplanet-atomic.css | 11 KB | CSS vars | Thème KIN (rouge/blanc/bleu/jaune/vert) |
lib_0_foundation.js | 36 KB | safeNostrGetPublicKey | Wrapper NIP-07 robuste, proxy iframe |
lib_1_relay.js | 15 KB | RelayManager | Connexions WebSocket, NIP-42, queue |
lib_2_api_connect.js | 69 KB | getAPIUrl, connectNostr, waitForConnection | Auto-détection station 54321/12345/7777 |
uplanet-header.js | 48 KB | NostrState, uphRefresh | Bandeau UPH, login NIP-07, cache pubkey |
lib_3_content.js | 82 KB | publishNote, shareCurrentPage, createBookmark, fetchComments… | Social NOSTR complet : publication, commentaires, bookmarks |
lib_5_payments.js | 11 KB | sendMultipassPayment, getMultipassBalance… | Paiements ẐEN |
phi2x.js | 30 KB | Phi2X.* | KIN Tzolkin, phase orbitale, résonance groupe |
uplanet-atomic.js | 8 KB | _setKinTheme, _showA4lToast | Thème KIN dynamique, toasts |
<link href="https://ipfs.copylaradio.com/ipns/copylaradio.com/uplanet-atomic.css" rel="stylesheet"> <script src="https://ipfs.copylaradio.com/ipns/copylaradio.com/nostr.bundle.js"></script> <script src="https://ipfs.copylaradio.com/ipns/copylaradio.com/lib_0_foundation.js"></script> <script src="https://ipfs.copylaradio.com/ipns/copylaradio.com/lib_1_relay.js"></script> <script src="https://ipfs.copylaradio.com/ipns/copylaradio.com/lib_2_api_connect.js"></script> <script src="https://ipfs.copylaradio.com/ipns/copylaradio.com/uplanet-header.js"></script> <!-- Résultat : bandeau UPH · login 1-clic · window.NostrState · window.userPubkey -->
<!-- = Bundle A + --> <script src="https://ipfs.copylaradio.com/ipns/copylaradio.com/lib_3_content.js"></script> <!-- + shareCurrentPage(), createBookmark(), fetchComments(), createShareButton() -->
<!-- = Bundle A + --> <script src="https://ipfs.copylaradio.com/ipns/copylaradio.com/lib_5_payments.js"></script> <!-- + sendMultipassPayment(), getMultipassBalance(), verifyMultipassPayment() -->
<!-- = Bundle A + --> <script src="https://ipfs.copylaradio.com/ipns/copylaradio.com/phi2x.js"></script> <script src="https://ipfs.copylaradio.com/ipns/copylaradio.com/uplanet-atomic.js"></script> <!-- + Phi2X.calcKinFromDate(), computeResonanceK(), groupHarmonyScore() --> <!-- + _setKinTheme(), _showA4lToast() -->
<!-- Tous les bundles A+B+C+D. Ou bien : intégrer atomic.html en iframe --> <iframe src="https://ipfs.copylaradio.com/ipns/copylaradio.com/atomic.html" style="width:100%;height:900px;border:none;border-radius:12px" allow="camera;microphone"></iframe> <!-- lib_0 gère le proxy NIP-07 iframe → extension NOSTR fonctionne en cross-origin -->
https://ipfs.copylaradio.com/ipns/copylaradio.com/FICHIER.jshttps://u.copylaradio.com/earth/FICHIER.jshttp://localhost:54321/earth/FICHIER.jslib_2_api_connect.js auto-détecte la station locale (54321/12345) quelque soit l'origine de chargement.
Filtres writePolicy strfry actifs sur ce relay. Niveaux d'accès : uplanet MULTIPASS local · player constellation · amis amisOfAmis · tous public
| Kind | Nom | Rôle | Accès |
|---|---|---|---|
0 | Profil | Metadata utilisateur (nom, avatar, about) — NIP-01 | tous |
1 | Note | Note texte. Tags #BRO → queue IA · #rec → mémoire · #secret → chiffré · #plantnet → botanique | amis |
4 | DM | Messages chiffrés NIP-04/NIP-44. Si destinataire = NODE HEX → queue locale | tous |
7 | Réaction / ẐEN | content: "+N" → paiement N ẐEN automatique via G1. Vote ASSETS possible | player |
21 | Vidéo | Vidéo standard (NIP-71). Durées : ≤30s=Short · ≤300s=Medium · >300s=Long. Tags IPFS : imeta, thumbnail_ipfs, gifanim_ipfs | amis |
22 | Vidéo longue | Vidéo longue durée (NIP-71). Durées : ≤600s=Medium · ≤1800s=Long · >1800s=Extended. Types : live_stream, educational, presentation | amis |
1984 | Signalement | report-type=friction → queue Kind 30506 via ASTROBOT N1Mediation | player |
9735 | Zap receipt | Preuve de paiement Lightning (NIP-57) | tous |
22242 | Auth NIP-42 | Authentification relay twin-key (NIP-42). Utilisé par UPassport NIP-98 | tous |
30023 | Article | Article long format (NIP-23). Adressable par d-tag | amis |
30078 | ATOM4LOVE | Empreinte vibratoire KIN / app-specific data. Contient phase φ, KIN Dreamspell | player |
30303 | Custom | Événement paramétré générique UPlanet | player |
30500 | Oracle/Permit | Définitions de permis (système Oracle). Publié par G1HEX station | uplanet |
30503 | Credential WoTx² | Verifiable Credential W3C auto-signé après validation. Publié par emit_skill.sh. Tags : ["l", "PERMIT_ID", "permit_type"], ["t", "wotx2"] | player |
30504 | Formation WoTx² | Ressource pédagogique liée à un permis (vidéo/doc/lien). Tag #t=[skill] indexé dans Qdrant "knowledge" via /api/skill/media/{skill} | player |
30506 | Médiation WoTx² | Dossier de médiation. Seulement t=friction, pubkeys autorisées uniquement | uplanet |
30508 | Match vibratoire | Résultat match ATOM4LOVE (k ≥ 0.85 entre deux porteurs). Produit par cabine-33 | player |
30800 | Config/DID | d=cooperative-config (G1HEX exclusif) · d=did document identité MULTIPASS | player |
30904 | Crowdfunding | Campagnes de financement ẐEN. Valide structure, enregistre clés Bien | player |
| Fonction | Retour | Usage |
|---|---|---|
connectNostr(force?) | Promise<pubkeyHex> | Connecte l'extension NIP-07, publie NIP-42 auth |
waitForConnection(cb) | void | Exécute cb dès que pubkey disponible (idempotent) |
getAPIUrl() | string | URL UPassport (port 54321, auto-détecté) |
getStationUrl() | string | URL Astroport (port 12345, auto-détecté) |
getRelayUrl() | string | URL relay NOSTR (wss, auto-détecté) |
NostrState.userPubkey | hex string | Pubkey courante après connexion |
| Fonction | Retour | Usage |
|---|---|---|
publishNote(content, tags?, kind?) | Promise<{success, eventId}> | Publie kind 1 (ou autre) sur le relay |
shareCurrentPage(msg?) | Promise | Partage l'URL courante comme note kind 1 |
createBookmark(url, title) | Promise | Bookmark kind 30001 |
fetchComments(url) | Promise<Event[]> | Commentaires kind 1 pour cette URL |
postComment(url, text) | Promise | Publie un commentaire kind 1 taggé avec l'URL |
createShareButton(containerId) | void | Injecte un bouton Partager NOSTR dans le DOM |
createBookmarkButton(containerId) | void | Injecte un bouton Bookmark dans le DOM |
fetchUserMetadata(pubkey) | Promise<{name,picture,about…}> | Profil kind 0 |
fetchUserEmailWithFallback(pubkey) | Promise<email|null> | Email depuis DID / kind 0 tags / UPassport |
fetchUserUDriveInfo(pubkey) | Promise<{url,cid}> | URL uDRIVE de l'utilisateur |
hexToNpub(hex) | string | Convertit pubkey hex → npub1… |
npubToHex(npub) | string | Convertit npub1… → hex |
| Fonction | Retour | Usage |
|---|---|---|
sendMultipassPayment(amount, destG1, srcG1?, email) | Promise<{id,tx}> | Envoi ẐEN (passe par /zen_send UPassport) |
verifyMultipassPayment(txId) | Promise<boolean> | Vérifie une transaction |
getMultipassBalance(g1Addr) | Promise<number> | Solde ẐEN d'une adresse G1 |
initMultipassPayment(email, opts?) | Promise | Initialise le module paiement pour un utilisateur |
| Fonction | Retour | Usage |
|---|---|---|
Phi2X.calcKinFromDate(dateStr) | {kin, glyph, tone, color, colorFr…} | KIN Dreamspell depuis date (YYYY-MM-DD) |
Phi2X.computePhaseFromForm(date, time, lon) | float (radians) | Phase φ précise avec longitude |
Phi2X.computeResonanceK(phiA, phiB) | float 0.0–1.0 | Cohérence entre deux individus |
Phi2X.groupHarmonyScore(phases[]) | float 0.0–1.0 | Harmonie pour un groupe (vecteur Ψ) |
| Endpoint | Méthode | Usage |
|---|---|---|
/g1nostr | POST | Créer / récupérer MULTIPASS (email + photo) |
/check_balance | GET | Solde G1 d'une clé publique |
/check_oc_member | GET | Vérifier membership OpenCollective |
/constellation_register | POST | Publier event kind 30078 sur les relays constellation |
/api/upload/image | POST | Upload image → IPFS + publication NOSTR |
/mailjet | GET/POST | Préférences notifications KIN |