libp2p-record
Advanced tools
Comparing version 0.6.3 to 0.7.0
@@ -0,1 +1,16 @@ | ||
<a name="0.7.0"></a> | ||
# [0.7.0](https://github.com/libp2p/js-libp2p-record/compare/v0.6.3...v0.7.0) (2019-08-16) | ||
### Code Refactoring | ||
* convert from callbacks to async ([#13](https://github.com/libp2p/js-libp2p-record/issues/13)) ([42eab95](https://github.com/libp2p/js-libp2p-record/commit/42eab95)) | ||
### BREAKING CHANGES | ||
* All places in the API that used callbacks are now replaced with async/await | ||
<a name="0.6.3"></a> | ||
@@ -2,0 +17,0 @@ ## [0.6.3](https://github.com/libp2p/js-libp2p-record/compare/v0.6.2...v0.6.3) (2019-05-23) |
{ | ||
"name": "libp2p-record", | ||
"version": "0.6.3", | ||
"version": "0.7.0", | ||
"description": "libp2p record implementation", | ||
@@ -30,5 +30,4 @@ "leadMaintainer": "Vasco Santos <vasco.santos@moxy.studio>", | ||
}, | ||
"pre-commit": [ | ||
"lint", | ||
"test" | ||
"pre-push": [ | ||
"lint" | ||
], | ||
@@ -42,15 +41,13 @@ "author": "Friedel Ziegelmayer <dignifiedquire@gmail.com>", | ||
"devDependencies": { | ||
"aegir": "^18.2.2", | ||
"aegir": "^20.0.0", | ||
"chai": "^4.2.0", | ||
"dirty-chai": "^2.0.1", | ||
"libp2p-crypto": "~0.16.1", | ||
"peer-id": "~0.12.2", | ||
"pre-commit": "^1.2.2" | ||
"libp2p-crypto": "~0.17.0", | ||
"peer-id": "~0.13.2" | ||
}, | ||
"dependencies": { | ||
"async": "^2.6.2", | ||
"buffer-split": "^1.0.0", | ||
"err-code": "^1.1.2", | ||
"multihashes": "~0.4.14", | ||
"multihashing-async": "~0.6.0", | ||
"multihashes": "~0.4.15", | ||
"multihashing-async": "~0.7.0", | ||
"protons": "^1.0.1" | ||
@@ -63,6 +60,7 @@ }, | ||
"Matt Joiner <anacrolix@gmail.com>", | ||
"Vasco Santos <vasco.santos@moxy.studio>", | ||
"Vasco Santos <vasco.santos@ua.pt>", | ||
"Vasco Santos <vasco.santos@moxy.studio>", | ||
"dirkmc <dirkmdev@gmail.com>", | ||
"ᴠɪᴄᴛᴏʀ ʙᴊᴇʟᴋʜᴏʟᴍ <victorbjelkholm@gmail.com>" | ||
] | ||
} |
@@ -18,3 +18,3 @@ 'use strict' | ||
throw errcode(new Error(errMsg), 'ERR_NO_RECORDS_RECEIVED') | ||
throw errcode(errMsg, 'ERR_NO_RECORDS_RECEIVED') | ||
} | ||
@@ -27,3 +27,3 @@ | ||
throw errcode(new Error(errMsg), 'ERR_NO_SELECTOR_FUNCTION_FOR_RECORD_KEY') | ||
throw errcode(errMsg, 'ERR_NO_SELECTOR_FUNCTION_FOR_RECORD_KEY') | ||
} | ||
@@ -36,3 +36,3 @@ | ||
throw errcode(new Error(errMsg), 'ERR_UNRECOGNIZED_KEY_PREFIX') | ||
throw errcode(errMsg, 'ERR_UNRECOGNIZED_KEY_PREFIX') | ||
} | ||
@@ -39,0 +39,0 @@ |
@@ -9,9 +9,9 @@ 'use strict' | ||
* It runs the needed validators. | ||
* If verification fails the returned Promise will reject with the error. | ||
* | ||
* @param {Object} validators | ||
* @param {Record} record | ||
* @param {function(Error)} callback | ||
* @returns {undefined} | ||
* @returns {Promise} | ||
*/ | ||
const verifyRecord = (validators, record, callback) => { | ||
const verifyRecord = (validators, record) => { | ||
const key = record.key | ||
@@ -22,3 +22,3 @@ const parts = bsplit(key, Buffer.from('/')) | ||
// No validator available | ||
return callback() | ||
return | ||
} | ||
@@ -31,6 +31,6 @@ | ||
return callback(errcode(new Error(errMsg), 'ERR_INVALID_RECORD_KEY_TYPE')) | ||
throw errcode(errMsg, 'ERR_INVALID_RECORD_KEY_TYPE') | ||
} | ||
validator.func(key, record.value, callback) | ||
return validator.func(key, record.value) | ||
} | ||
@@ -37,0 +37,0 @@ |
'use strict' | ||
const setImmediate = require('async/setImmediate') | ||
const multihashing = require('multihashing-async') | ||
const errcode = require('err-code') | ||
@@ -10,17 +10,15 @@ /** | ||
* that matches the passed in key. | ||
* If validation fails the returned Promise will reject with the error. | ||
* | ||
* @param {Buffer} key - A valid key is of the form `'/pk/<keymultihash>'` | ||
* @param {Buffer} publicKey - The public key to validate against (protobuf encoded). | ||
* @param {function(Error)} callback | ||
* @returns {undefined} | ||
* @returns {Promise} | ||
*/ | ||
const validatePublicKeyRecord = (key, publicKey, callback) => { | ||
const done = (err) => setImmediate(() => callback(err)) | ||
const validatePublicKeyRecord = async (key, publicKey) => { | ||
if (!Buffer.isBuffer(key)) { | ||
return done(new Error('"key" must be a Buffer')) | ||
throw errcode('"key" must be a Buffer', 'ERR_INVALID_RECORD_KEY_NOT_BUFFER') | ||
} | ||
if (key.length < 3) { | ||
return done(new Error('invalid public key record')) | ||
if (key.length < 5) { | ||
throw errcode('invalid public key record', 'ERR_INVALID_RECORD_KEY_TOO_SHORT') | ||
} | ||
@@ -31,3 +29,3 @@ | ||
if (prefix !== '/pk/') { | ||
return done(new Error('key was not prefixed with /pk/')) | ||
throw errcode('key was not prefixed with /pk/', 'ERR_INVALID_RECORD_KEY_BAD_PREFIX') | ||
} | ||
@@ -37,13 +35,7 @@ | ||
multihashing(publicKey, 'sha2-256', (err, publicKeyHash) => { | ||
if (err) { | ||
return done(err) | ||
} | ||
const publicKeyHash = await multihashing(publicKey, 'sha2-256') | ||
if (!keyhash.equals(publicKeyHash)) { | ||
return done(new Error('public key does not match passed in key')) | ||
} | ||
done() | ||
}) | ||
if (!keyhash.equals(publicKeyHash)) { | ||
throw errcode('public key does not match passed in key', 'ERR_INVALID_RECORD_HASH_MISMATCH') | ||
} | ||
} | ||
@@ -50,0 +42,0 @@ |
@@ -8,4 +8,2 @@ /* eslint max-nested-callbacks: ["error", 8] */ | ||
const expect = chai.expect | ||
const waterfall = require('async/waterfall') | ||
const each = require('async/each') | ||
const crypto = require('libp2p-crypto') | ||
@@ -33,10 +31,12 @@ const PeerId = require('peer-id') | ||
// missing hashkey | ||
Buffer.from('/pk/'), | ||
[Buffer.from('/pk/'), 'ERR_INVALID_RECORD_KEY_TOO_SHORT'], | ||
// not the hash of a key | ||
Buffer.concat([ | ||
[Buffer.concat([ | ||
Buffer.from('/pk/'), | ||
Buffer.from('random') | ||
]), | ||
]), 'ERR_INVALID_RECORD_HASH_MISMATCH'], | ||
// missing prefix | ||
hash | ||
[hash, 'ERR_INVALID_RECORD_KEY_BAD_PREFIX'], | ||
// not a buffer | ||
['not a buffer', 'ERR_INVALID_RECORD_KEY_NOT_BUFFER'] | ||
] | ||
@@ -52,19 +52,10 @@ } | ||
before((done) => { | ||
waterfall([ | ||
(cb) => crypto.keys.generateKeyPair('rsa', 1024, cb), | ||
(pair, cb) => { | ||
key = pair | ||
pair.public.hash(cb) | ||
}, | ||
(_hash, cb) => { | ||
hash = _hash | ||
cases = generateCases(hash) | ||
cb() | ||
} | ||
], done) | ||
before(async () => { | ||
key = await crypto.keys.generateKeyPair('rsa', 1024) | ||
hash = await key.public.hash() | ||
cases = generateCases(hash) | ||
}) | ||
describe('verifyRecord', () => { | ||
it('calls matching validator', (done) => { | ||
it('calls matching validator', () => { | ||
const k = Buffer.from('/hello/you') | ||
@@ -75,6 +66,5 @@ const rec = new Record(k, Buffer.from('world'), new PeerId(hash)) | ||
hello: { | ||
func (key, value, cb) { | ||
func (key, value) { | ||
expect(key).to.eql(k) | ||
expect(value).to.eql(Buffer.from('world')) | ||
cb() | ||
}, | ||
@@ -84,6 +74,6 @@ sign: false | ||
} | ||
validator.verifyRecord(validators, rec, done) | ||
return validator.verifyRecord(validators, rec) | ||
}) | ||
it('calls not matching any validator', (done) => { | ||
it('calls not matching any validator', () => { | ||
const k = Buffer.from('/hallo/you') | ||
@@ -94,6 +84,5 @@ const rec = new Record(k, Buffer.from('world'), new PeerId(hash)) | ||
hello: { | ||
func (key, value, cb) { | ||
func (key, value) { | ||
expect(key).to.eql(k) | ||
expect(value).to.eql(Buffer.from('world')) | ||
cb() | ||
}, | ||
@@ -103,6 +92,7 @@ sign: false | ||
} | ||
validator.verifyRecord(validators, rec, (err) => { | ||
expect(err).to.exist() | ||
done() | ||
}) | ||
return expect( | ||
() => validator.verifyRecord(validators, rec) | ||
).to.throw( | ||
/Invalid record keytype/ | ||
) | ||
}) | ||
@@ -117,3 +107,3 @@ }) | ||
describe('public key', () => { | ||
it('exports func and sing', () => { | ||
it('exports func and sign', () => { | ||
const pk = validator.validators.pk | ||
@@ -125,15 +115,18 @@ | ||
it('does not error on valid record', (done) => { | ||
each(cases.valid.publicKey, (k, cb) => { | ||
validator.validators.pk.func(k, key.public.bytes, cb) | ||
}, done) | ||
it('does not error on valid record', () => { | ||
return Promise.all(cases.valid.publicKey.map((k) => { | ||
return validator.validators.pk.func(k, key.public.bytes) | ||
})) | ||
}) | ||
it('throws on invalid records', (done) => { | ||
each(cases.invalid.publicKey, (k, cb) => { | ||
validator.validators.pk.func(k, key.public.bytes, (err) => { | ||
expect(err).to.exist() | ||
cb() | ||
}) | ||
}, done) | ||
it('throws on invalid records', () => { | ||
return Promise.all(cases.invalid.publicKey.map(async ([k, errCode]) => { | ||
try { | ||
await validator.validators.pk.func(k, key.public.bytes) | ||
} catch (err) { | ||
expect(err.code).to.eql(errCode) | ||
return | ||
} | ||
expect.fail('did not throw an error with code ' + errCode) | ||
})) | ||
}) | ||
@@ -144,13 +137,10 @@ }) | ||
describe('go interop', () => { | ||
it('record with key from from go', (done) => { | ||
it('record with key from from go', async () => { | ||
const pubKey = crypto.keys.unmarshalPublicKey(fixture.publicKey) | ||
pubKey.hash((err, hash) => { | ||
expect(err).to.not.exist() | ||
const k = Buffer.concat([Buffer.from('/pk/'), hash]) | ||
validator.validators.pk.func(k, pubKey.bytes, done) | ||
}) | ||
const hash = await pubKey.hash() | ||
const k = Buffer.concat([Buffer.from('/pk/'), hash]) | ||
return validator.validators.pk.func(k, pubKey.bytes) | ||
}) | ||
}) | ||
}) |
Sorry, the diff of this file is not supported yet
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
23804
5
5
542
+ Addedmultihashing-async@0.7.0(transitive)
+ Addedmurmurhash3js-revisited@3.0.0(transitive)
- Removedasync@^2.6.2
- Removedasync@2.6.4(transitive)
- Removedis-promise@1.0.1(transitive)
- Removedlodash@4.17.21(transitive)
- Removedmultihashing-async@0.6.0(transitive)
- Removedmurmurhash3js@3.0.1(transitive)
- Removednodeify@1.0.1(transitive)
- Removedpromise@1.3.0(transitive)
Updatedmultihashes@~0.4.15
Updatedmultihashing-async@~0.7.0