Secure your code as it's written. Use Snyk Code to scan source code in minutes - no build needed - and fix issues immediately.
/* eslint-env mocha */
'use strict'
const chai = require('chai')
chai.use(require('dirty-chai'))
const expect = chai.expect
const path = require('path')
const promisify = require('util').promisify
const noop = () => {}
const mkdirp = require('mkdirp')
const rimraf = promisify(require('rimraf'))
const fs = require('fs')
const fsReadFile = promisify(require('fs').readFile || noop)
const Key = require('interface-datastore').Key
const utils = require('interface-datastore').utils
const ShardingStore = require('datastore-core').ShardingDatastore
const sh = require('datastore-core').shard
const isNode = require('detect-node')
const FsStore = require('../src')
describe('FsDatastore', () => {
if (!isNode) {
it('only supports node.js', () => {
})
return
}
describe('construction', () => {
describe('enabled', () => {
let nodeA
const datastore = new MemoryStore()
before(function (done) {
createNode('/ip4/0.0.0.0/tcp/0', {
datastore
}, (err, node) => {
expect(err).to.not.exist()
nodeA = node
// Rewrite validators
nodeA._dht.validators.v = {
func (key, publicKey, callback) {
setImmediate(callback)
},
sign: false
}
const getIdKeys = (pid) => {
const pkBuffer = Buffer.from('/pk/')
const ipnsBuffer = Buffer.from('/ipns/')
return {
routingPubKey: new Key(Buffer.concat([pkBuffer, pid])), // Added on https://github.com/ipfs/js-ipns/pull/8#issue-213857876 (pkKey will be deprecated in a future release)
pkKey: new Key(rawStdEncoding(Buffer.concat([pkBuffer, pid]))),
routingKey: new Key(Buffer.concat([ipnsBuffer, pid])), // Added on https://github.com/ipfs/js-ipns/pull/6#issue-213631461 (ipnsKey will be deprecated in a future release)
ipnsKey: new Key(rawStdEncoding(Buffer.concat([ipnsBuffer, pid])))
}
}
return new Promise((resolve, reject) => {
const ds = ipfs._repo.datastore
if (!ds) {
return ipfs.once('start', () => {
datastore(ipfs, collaboration).then(resolve).catch(reject)
})
}
// resolve(ds)
resolve(new NamespaceStore(ds, new Key(`peer-base-collab-${collaboration.fqn()}`)))
})
}
const getIdKeys = (pid) => {
const pkBuffer = Buffer.from('/pk/')
const ipnsBuffer = Buffer.from('/ipns/')
return {
routingPubKey: new Key(Buffer.concat([pkBuffer, pid])), // Added on https://github.com/ipfs/js-ipns/pull/8#issue-213857876 (pkKey will be deprecated in a future release)
pkKey: new Key(rawStdEncoding(Buffer.concat([pkBuffer, pid]))),
routingKey: new Key(Buffer.concat([ipnsBuffer, pid])), // Added on https://github.com/ipfs/js-ipns/pull/6#issue-213631461 (ipnsKey will be deprecated in a future release)
ipnsKey: new Key(rawStdEncoding(Buffer.concat([ipnsBuffer, pid])))
}
}
async _getLocal (key) {
// encode key - base32(/ipns/{cid})
const routingKey = new Key('/' + encodeBase32(key), false)
let dsVal
try {
dsVal = await this._datastore.get(routingKey)
} catch (err) {
if (err.code !== 'ERR_NOT_FOUND') {
const errMsg = `unexpected error getting the ipns record for ${routingKey.toString()}`
log.error(errMsg)
throw errcode(new Error(errMsg), 'ERR_UNEXPECTED_ERROR_GETTING_RECORD')
}
const errMsg = `local record requested was not found for ${routingKey.toString()}`
log.error(errMsg)
throw errcode(new Error(errMsg), 'ERR_NOT_FOUND')
}
async _publishPublicKey (key, publicKey) {
if ((!Key.isKey(key))) {
const errMsg = 'datastore key does not have a valid format'
log.error(errMsg)
throw errcode(new Error(errMsg), 'ERR_INVALID_DATASTORE_KEY')
}
if (!publicKey || !publicKey.bytes) {
const errMsg = 'one or more of the provided parameters are not defined'
log.error(errMsg)
throw errcode(new Error(errMsg), 'ERR_UNDEFINED_PARAMETER')
}
// Add public key to routing (buffer key)
try {
const res = await this._routing.put(key.toBuffer(), publicKey.bytes)
async _publishEntry (key, entry) {
if (!(Key.isKey(key))) {
const errMsg = 'datastore key does not have a valid format'
log.error(errMsg)
throw errcode(new Error(errMsg), 'ERR_INVALID_DATASTORE_KEY')
}
let entryData
try {
// Marshal record
entryData = ipns.marshal(entry)
} catch (err) {
log.error(err)
throw err
}
'use strict'
const isIpfs = require('is-ipfs')
const CID = require('cids')
const { DAGNode } = require('ipld-dag-pb')
const { normalizeCidPath } = require('../../utils')
const { Errors } = require('interface-datastore')
const ERR_NOT_FOUND = Errors.notFoundError().code
const { withTimeoutOption } = require('../../utils')
const Format = {
default: '',
edges: ' -> '
}
module.exports = function ({ ipld, resolve, preload }) {
return withTimeoutOption(async function * refs (ipfsPath, options) { // eslint-disable-line require-await
options = options || {}
if (options.maxDepth === 0) {
return
}
if (options.edges && options.format && options.format !== Format.default) {
'use strict'
const PeerId = require('peer-id')
const { Key, Errors } = require('interface-datastore')
const errcode = require('err-code')
const promisify = require('promisify-es6')
const debug = require('debug')
const log = debug('ipfs:ipns:publisher')
log.error = debug('ipfs:ipns:publisher:error')
const ipns = require('ipns')
const ERR_NOT_FOUND = Errors.notFoundError().code
const defaultRecordLifetime = 60 * 60 * 1000
// IpnsPublisher is capable of publishing and resolving names to the IPFS routing system.
class IpnsPublisher {
constructor (routing, datastore) {
this._routing = routing
this._datastore = datastore
}
// publish record with a eol
async publishWithEOL (privKey, value, lifetime) {
if (!privKey || !privKey.bytes) {
throw errcode(new Error('invalid private key'), 'ERR_INVALID_PRIVATE_KEY')
}
const peerId = await promisify(PeerId.createFromPrivKey)(privKey.bytes)