Package detail

@substrate-system/magnet-uri

Parse a magnet URI and return an object of keys/values

bittorrent, cryptolinks, magnet, p2p

readme

magnet-uri

tests types module semantic versioning Common Changelog install size license

Parse a magnet URI, and return an object of keys/values.

Also works in the browser.

now, with types

<summary>

Contents

</summary> - install - Use - API decode encode - license

install

npm i -S @substrate-system/magnet-uri

Use

Import like normal

import { encode, decode } from '@substrate-system/magnet-uri'
import type { ParsedMagnet } from '@substrate-system/magnet-uri'

API

decode

Parse a magnet URI and return an object of keys/values.

import { decode } from '@substrate-system/magnet-uri'

// "Leaves of Grass" by Walt Whitman
const uri = 'magnet:?xt=urn:btih:d2474e86c95b19b8bcfdb92bc12c9d44667cfa36&dn=Leaves+of+Grass+by+Walt+Whitman.epub&tr=udp%3A%2F%2Ftracker.example4.com%3A80&tr=udp%3A%2F%2Ftracker.example5.com%3A80&tr=udp%3A%2F%2Ftracker.example3.com%3A6969&tr=udp%3A%2F%2Ftracker.example2.com%3A80&tr=udp%3A%2F%2Ftracker.example1.com%3A1337'

const parsed = decode(uri)
console.log(parsed.dn) // "Leaves of Grass by Walt Whitman.epub"
console.log(parsed.infoHash) // "d2474e86c95b19b8bcfdb92bc12c9d44667cfa36"

The parsed magnet link object looks like this:

  {
    "xt": "urn:btih:d2474e86c95b19b8bcfdb92bc12c9d44667cfa36",
    "dn": "Leaves of Grass by Walt Whitman.epub",
    "tr": [
      "udp://tracker.example1.com:1337",
      "udp://tracker.example2.com:80",
      "udp://tracker.example3.com:6969",
      "udp://tracker.example4.com:80",
      "udp://tracker.example5.com:80"
    ],

    // added for convenience:
    "infoHash": "d2474e86c95b19b8bcfdb92bc12c9d44667cfa36",
    "infoHashBuffer": ...,
    "name": "Leaves of Grass by Walt Whitman.epub",
    "announce": [
      "udp://tracker.example1.com:1337",
      "udp://tracker.example2.com:80",
      "udp://tracker.example3.com:6969",
      "udp://tracker.example4.com:80",
      "udp://tracker.example5.com:80"
    ]
  }

encode

Convert an object of key/values into a magnet URI string.

import { encode } from '@substrate-system/magnet-uri'

const uri = encode({
  xt: [
    'urn:ed2k:354B15E68FB8F36D7CD88FF94116CDC1',
    'urn:tree:tiger:7N5OAMRNGMSSEUE3ORHOKWN4WWIQ5X4EBOOTLJY',
    'urn:btih:QHQXPYWMACKDWKP47RRVIV7VOURXFE5Q'
  ],
  xl: '10826029',
  dn: 'mediawiki-1.15.1.tar.gz',
  tr: [
    'udp://tracker.openbittorrent.com:80/announce'
  ],
  as: 'http://download.wikimedia.org/mediawiki/1.15/mediawiki-1.15.1.tar.gz',
  xs: [
    'http://cache.example.org/XRX2PEFXOOEJFRVUCX6HMZMKS5TWG4K5',
    'dchub://example.org'
  ]
})

console.log(uri) // the magnet uri

The returned magnet uri will be:

magnet:?xt=urn:ed2k:354B15E68FB8F36D7CD88FF94116CDC1&xt=urn:tree:tiger:7N5OAMRNGMSSEUE3ORHOKWN4WWIQ5X4EBOOTLJY&xt=urn:btih:QHQXPYWMACKDWKP47RRVIV7VOURXFE5Q&xl=10826029&dn=mediawiki-1.15.1.tar.gz&tr=udp%3A%2F%2Ftracker.openbittorrent.com%3A80%2Fannounce&as=http%3A%2F%2Fdownload.wikimedia.org%2Fmediawiki%2F1.15%2Fmediawiki-1.15.1.tar.gz&xs=http%3A%2F%2Fcache.example.org%2FXRX2PEFXOOEJFRVUCX6HMZMKS5TWG4K5&xs=dchub%3A%2F%2Fexample.org

You can also use convenience key names like name (dn), infoHash (xt), infoHashBuffer (xt), publicKey (xs), publicKeyBuffer (xs), announce (tr), and keywords (kt).

license

MIT. Copyright (c) Feross Aboukhadijeh and WebTorrent, LLC.

changelog

Changelog

All notable changes to this project will be documented in this file.

The format is based on Keep a Changelog and this project adheres to Semantic Versioning.

Generated by auto-changelog.

v8.0.3

Commits

v8.0.2 - 2024-12-06

Commits

v8.0.1 - 2024-12-06

Commits

v8.0.0 - 2024-12-06

Commits

v7.0.8 - 2024-12-06

Commits

v7.0.7 - 2024-12-06

Commits

v7.0.6 - 2024-12-06

Merged

  • chore(deps): update actions/cache action to v4 #91
  • chore(deps): update actions/setup-node action to v4 #89
  • chore(deps): update actions/checkout action to v4 #83
  • chore(deps): update dependency semantic-release to v21 #70

Commits

v7.0.5 - 2023-05-30

Merged

  • fix: replace 32 with maintained version #73

Commits

v7.0.4 - 2023-05-27

Merged

  • fix: base32 in browser #72

Commits

  • chore(release): 7.0.4 005f1a6
  • chore(deps): update dependency @webtorrent/semantic-release-config to v1.0.9 1e08fca

v7.0.3 - 2023-04-02

Merged

  • fix(deps): update dependency uint8-util to ^2.1.9 #67

Commits

  • chore(release): 7.0.3 7d6e66e
  • chore(deps): update dependency semantic-release to v20.1.3 56b9a40
  • chore(deps): update dependency semantic-release to v20.1.1 66bcbe2

v7.0.2 - 2023-01-31

Merged

  • fix(deps): update dependency uint8-util to ^2.1.7 #66

Commits

v7.0.1 - 2023-01-26

Merged

  • perf: drop buffer #64

Commits

v7.0.0 - 2023-01-26

Merged

  • ci: add releaser action #65
  • fix(deps): update dependency bep53-range to v2 #61
  • chore(deps): update dependency tape to v5.6.1 #59
  • Breaking change: feat: esm #60
  • chore(deps): Bump actions/setup-node from 2 to 3 #55
  • Bump actions/checkout from 2 to 3 #56
  • fix(deps): update dependency bep53-range to ^1.1.1 #52
  • chore(deps): update dependency tape to v5.3.0 #51
  • chore(deps): pin dependency tape to 5.2.2 #48

Commits

  • chore(release): 7.0.0 8144424
  • chore: add renovate config 601ef3b
  • chore: remove npm updates from dependabot 943df02

v6.2.0 - 2021-05-11

Merged

  • Support SHA-256 hashes in xt #43
  • Update bep53-range requirement from ^1.0.0 to ^1.1.0 #45
  • Update tape requirement from ^5.0.1 to ^5.2.2 #44

Commits

v6.1.1 - 2021-04-14

Merged

  • Add .github/ to .npmignore #42

Commits

v6.1.0 - 2020-11-13

Commits

  • Merge pull request #35 from RangerMauve/bep46 c9aa55e
  • Lowercase public key hex, use colon in checking for btpk prefix 8654cfb
  • Merge pull request #41 from webtorrent/ci 0e76864

v6.0.0 - 2020-10-30

Merged

  • Cleanup for peerAddresses implementation #39
  • Implement Magnet peer-address BEP09 #38
  • Implement Magnet URI extension (BEP53) #37

Commits

v5.3.0 - 2020-07-16

Merged

  • Update tape to the latest version 🚀 #34
  • use native Set instead of uniq library #33

Commits

  • standard 498f168
  • refactor turning repeated parameters from uri into array 6af8db9
  • ignore order of trackers in tests c75d5f8

v5.2.4 - 2018-08-30

Merged

  • Remove xtend #31

Commits

v5.2.3 - 2018-07-26

Commits

v5.2.2 - 2018-07-26

Commits

v5.2.1 - 2018-07-26

Merged

  • chore(package): update airtap to version 0.1.0 #30

Fixed

  • chore(package): update airtap to version 0.1.0 #29

Commits

  • Use const instead of var in README c7010bb

v5.2.0 - 2018-07-26

Merged

  • chore(package): update airtap to version 0.0.7 #28

Fixed

  • chore(package): update airtap to version 0.0.7 #27

Commits

  • use let/const and arrow functions 48b6b7f

v5.1.8 - 2018-05-17

Merged

  • npmignore #26
  • Update airtap to the latest version 🚀 #25
  • Update airtap to the latest version 🚀 #23
  • Update airtap to the latest version 🚀 #22
  • Update airtap to the latest version 🚀 #21
  • Add Greenkeeper badge 🌴 #18

Commits

v5.1.7 - 2017-04-21

Commits

v5.1.6 - 2017-04-14

Merged

Commits

v5.1.5 - 2016-11-09

Commits

v5.1.4 - 2016-06-23

Merged

  • Update standard to version 7.0.0 🚀 #14

Commits

  • zuul: remove flaky ios tests 4c6bea2
  • comment 005aa93
  • chore(package): update standard to version 7.0.0 dfedc92

v5.1.3 - 2016-02-11

Merged

  • Update all dependencies 🌴 #10

Commits

v5.1.2 - 2016-01-09

Commits

v5.1.1 - 2015-12-17

Merged

  • Changed infohash to always be lowercase when it's a string #7

v5.1.0 - 2015-12-02

Commits

v5.0.0 - 2015-05-12

Fixed

  • De-duplicate tracker list #306

Commits

  • Unify "announce" and "announceList" keys 68f8104
  • travis: test on iojs cc03bf5

v4.2.3 - 2015-05-04

Commits

v4.2.2 - 2015-03-18

Commits

v4.2.1 - 2015-03-18

Commits

  • only test latest browsers 3848303
  • style: always use braces, except when single-line 9a6ccb0

v4.2.0 - 2015-02-09

Fixed

  • Support for webseeding property (ws=) #6

v4.1.1 - 2015-01-31

Commits

v4.1.0 - 2014-12-29

Merged

  • add encode function to convert an object into a magnet uri #5

Commits

  • add encode tests c41ca37
  • add encode function 587ab58
  • when encoding, ignore keys that are not length 2 d7a3f42

v4.0.0 - 2014-12-22

Merged

  • Support multiple 'xt' params; decode urls in 'xs' and 'as' params #4

Commits

  • add failing test for complicated magnet uri ab85238
  • support multiple xt params 4b34237
  • tests: remove unneeded t.doesNotThrow assertions 676c06e

v3.1.0 - 2014-12-17

Commits

v3.0.0 - 2014-08-17

Commits

  • always make announce property an array, for parity with parse-torrent-file eef4a14
  • readme 99fb826
  • license 179e1f5

v2.0.1 - 2014-04-23

Merged

  • readme: parsed.dn is uri-decoded #3

Commits

v2.0.0 - 2014-04-21

Merged

  • Add convenience properties to match parse-torrent #2

Commits

v1.1.0 - 2014-03-07

Commits

  • extract hex+base32 btih + tests 09400a7
  • rename 'btih' property name to 'infoHash' d11cd23
  • badges 88517d1

v1.0.0 - 2014-02-02

Commits

  • fixpack 49b21b4
  • instead of throwing exceptions, just ignore invalid keys 6d2059f
  • add tests: invalid magnet URIs return only valid keys (ignoring invalid ones) 5084208

v0.1.5 - 2014-01-29

Commits

v0.1.4 - 2014-01-15

Commits

v0.1.3 - 2013-12-06

Commits

v0.1.1 - 2013-10-27

Commits