mirror of
https://github.com/orbitdb/orbitdb.git
synced 2025-03-30 15:08:28 +00:00
82 lines
1.9 KiB
JavaScript
82 lines
1.9 KiB
JavaScript
/**
|
|
* @module Address
|
|
* @description OrbitDB database address verification.
|
|
*/
|
|
import { CID } from 'multiformats/cid'
|
|
import { base58btc } from 'multiformats/bases/base58'
|
|
import { posixJoin } from './utils/path-join.js'
|
|
|
|
/**
|
|
* Validates an OrbitDB database address.
|
|
* @function
|
|
* @param {OrbitDBAddress|string} address An OrbitDB database address.
|
|
* @return {boolean} True if the address is a valid OrbitDB database address,
|
|
* false otherwise.
|
|
* @static
|
|
*/
|
|
const isValidAddress = (address) => {
|
|
address = address.toString()
|
|
|
|
if (!address.startsWith('/orbitdb') && !address.startsWith('\\orbitdb')) {
|
|
return false
|
|
}
|
|
|
|
address = address.replaceAll('/orbitdb/', '')
|
|
address = address.replaceAll('\\orbitdb\\', '')
|
|
address = address.replaceAll('/', '')
|
|
address = address.replaceAll('\\', '')
|
|
|
|
let cid
|
|
try {
|
|
cid = CID.parse(address, base58btc)
|
|
} catch (e) {
|
|
return false
|
|
}
|
|
|
|
return cid !== undefined
|
|
}
|
|
|
|
/**
|
|
* Parses an OrbitDB database address.
|
|
* @function
|
|
* @param {OrbitDBAddress|string} address A valid OrbitDB database address.
|
|
* @return {OrbitDBAddress} An instance of OrbitDBAddress.
|
|
* @throws Not a valid OrbitDB address if no address if provided.
|
|
* @throws Not a valid OrbitDB address if address is invalid.
|
|
* @static
|
|
*/
|
|
const parseAddress = (address) => {
|
|
if (!address) {
|
|
throw new Error(`Not a valid OrbitDB address: ${address}`)
|
|
}
|
|
|
|
if (!isValidAddress(address)) {
|
|
throw new Error(`Not a valid OrbitDB address: ${address}`)
|
|
}
|
|
|
|
return OrbitDBAddress(address)
|
|
}
|
|
|
|
const OrbitDBAddress = (address) => {
|
|
if (address && address.protocol === 'orbitdb' && address.path) {
|
|
return address
|
|
}
|
|
|
|
const protocol = 'orbitdb'
|
|
|
|
const path = address.replace('/orbitdb/', '').replace('\\orbitdb\\', '')
|
|
|
|
const toString = () => {
|
|
return posixJoin('/', protocol, path)
|
|
}
|
|
|
|
return {
|
|
protocol,
|
|
path,
|
|
address,
|
|
toString
|
|
}
|
|
}
|
|
|
|
export { OrbitDBAddress as default, isValidAddress, parseAddress }
|