Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

feat: adds typescript types + type tests #110

Merged
merged 2 commits into from
Jan 27, 2020
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
9 changes: 7 additions & 2 deletions package.json
Original file line number Diff line number Diff line change
Expand Up @@ -4,13 +4,15 @@
"description": "IPFS Peer Id implementation in Node.js",
"leadMaintainer": "Vasco Santos <[email protected]>",
"main": "src/index.js",
"types": "src/index.d.ts",
"bin": "src/bin.js",
"scripts": {
"lint": "aegir lint",
"build": "aegir build",
"test": "aegir test",
"test:node": "aegir test -t node",
"test:browser": "aegir test -t browser -t webworker",
"test:types": "npx tsc",
"release": "aegir release",
"release-minor": "aegir release --type minor",
"release-major": "aegir release --type major",
Expand All @@ -34,15 +36,18 @@
},
"homepage": "https://github.com/libp2p/js-peer-id",
"devDependencies": {
"@types/chai": "^4.2.7",
"@types/dirty-chai": "^2.0.2",
"@types/mocha": "^5.2.7",
"aegir": "^20.0.0",
"bundlesize": "~0.18.0",
"chai": "^4.2.0",
"dirty-chai": "^2.0.1"
},
"dependencies": {
"cids": "~0.7.1",
"cids": "^0.7.3",
"class-is": "^1.1.0",
"libp2p-crypto": "~0.17.0",
"libp2p-crypto": "~0.17.2",
"multihashes": "~0.4.15",
"protons": "^1.0.1"
},
Expand Down
188 changes: 188 additions & 0 deletions src/index.d.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,188 @@
import crypto, { PrivateKey, PublicKey, KeyType } from "libp2p-crypto";
import CID from 'cids'

declare namespace PeerId {
/**
* Options for PeerId creation.
*/
type CreateOptions = {
/**
* The number of bits to use.
*/
bits?: number;
/**
* The type of key to use.
*/
keyType?: KeyType;
};

/**
* PeerId JSON format.
*/
type JSONPeerId = {
/**
* String representation of PeerId.
*/
id: string;
/**
* Public key.
*/
pubKey?: string;
/**
* Private key.
*/
privKey: string;
};

/**
* Checks if a value is an instance of PeerId.
* @param id The value to check.
*/
function isPeerId(id: any): boolean

/**
* Create a new PeerId.
* @param opts Options.
*/
function create(opts?: PeerId.CreateOptions): Promise<PeerId>;

/**
* Create PeerId from hex string.
* @param str The input hex string.
*/
function createFromHexString(str: string): PeerId;

/**
* Create PeerId from raw bytes.
* @param buf The raw bytes.
*/
function createFromBytes(buf: Buffer): PeerId;

/**
* Create PeerId from base58-encoded string.
* @param str The base58-encoded string.
*/
function createFromB58String(str: string): PeerId;

/**
* Create PeerId from CID.
* @param cid The CID.
*/
function createFromCID(cid: CID | Buffer | string | object): PeerId;

/**
* Create PeerId from public key.
* @param key Public key, as Buffer or base64-encoded string.
*/
function createFromPubKey(key: Buffer | string): Promise<PeerId>;

/**
* Create PeerId from private key.
* @param key Private key, as Buffer or base64-encoded string.
*/
function createFromPrivKey(key: Buffer | string): Promise<PeerId>;

/**
* Create PeerId from PeerId JSON formatted object.
* @see {@link PeerId#toJSON}
* @param json PeerId in JSON format.
*/
function createFromJSON(json: JSONPeerId): Promise<PeerId>;

/**
* Create PeerId from Protobuf bytes.
* @param buf Protobuf bytes, as Buffer or hex-encoded string.
*/
function createFromProtobuf(buf: Buffer | string): Promise<PeerId>;
}

/**
* PeerId is an object representation of a peer identifier.
*/
declare class PeerId {
constructor(id: Buffer | string, privKey?: PrivateKey, pubKey?: PublicKey);

/**
* Raw id.
*/
id: Buffer;

/**
* Private key.
*/
privKey: PrivateKey;

/**
* Public key.
*/
pubKey: PublicKey;

/**
* Return the protobuf version of the public key, matching go ipfs formatting.
*/
marshalPubKey(): Buffer;

/**
* Return the protobuf version of the private key, matching go ipfs formatting.
*/
marshalPrivKey(): Buffer;

/**
* Return the protobuf version of the peer-id.
* @param excludePriv Whether to exclude the private key information from the output.
*/
marshal(excludePriv?: boolean): Buffer;

/**
* String representation.
*/
toPrint(): string;

/**
* Return the jsonified version of the key.
* Matches the formatting of go-ipfs for its config file.
* @see {@link PeerId.createFromJSON}
*/
toJSON(): PeerId.JSONPeerId;

/**
* Encode to hex.
*/
toHexString(): string;

/**
* Return raw id bytes.
*/
toBytes(): Buffer;

/**
* Encode to base58 string.
*/
toB58String(): string;

/**
* Return self-describing string representation.
* Uses default format from RFC 0001: https://github.com/libp2p/specs/pull/209
*/
toString(): string;

/**
* Checks the equality of `this` peer against a given PeerId.
* @param id The other PeerId.
*/
equals(id: PeerId | Buffer): boolean;

/**
* Checks the equality of `this` peer against a given PeerId.
* @deprecated Use {.equals}
* @param id The other PeerId.
*/
isEqual(id: PeerId | Buffer): boolean;

/**
* Check if this PeerId instance is valid (privKey -> pubKey -> Id)
*/
isValid(): boolean;
}

export = PeerId;
4 changes: 4 additions & 0 deletions test/peer-id.spec.js
Original file line number Diff line number Diff line change
Expand Up @@ -271,24 +271,28 @@ describe('PeerId', () => {

it('set privKey (valid)', async () => {
const peerId = await PeerId.create(testOpts)
// @ts-ignore
peerId.privKey = peerId._privKey
expect(peerId.isValid()).to.equal(true)
})

it('set pubKey (valid)', async () => {
const peerId = await PeerId.create(testOpts)
// @ts-ignore
peerId.pubKey = peerId._pubKey
expect(peerId.isValid()).to.equal(true)
})

it('set privKey (invalid)', async () => {
const peerId = await PeerId.create(testOpts)
// @ts-ignore
peerId.privKey = Buffer.from('bufff')
expect(peerId.isValid()).to.equal(false)
})

it('set pubKey (invalid)', async () => {
const peerId = await PeerId.create(testOpts)
// @ts-ignore
peerId.pubKey = Buffer.from('bufff')
expect(peerId.isValid()).to.equal(false)
})
Expand Down
37 changes: 37 additions & 0 deletions tsconfig.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,37 @@
{
"compilerOptions": {
"module": "commonjs",
"lib": [
"es6"
],
"target": "ES5",
"noImplicitAny": false,
"noImplicitThis": true,
"strictFunctionTypes": true,
"strictNullChecks": true,
"esModuleInterop": true,
"resolveJsonModule": true,
"allowJs": true,
"checkJs": true,
"baseUrl": ".",
"paths": {
"peer-id": [
"./src",
"../src",
]
},
"types": [
"node",
"mocha",
"chai"
],
"noEmit": true,
"forceConsistentCasingInFileNames": true
},
"files": [
"./src/index.d.ts",
],
"include": [
"./test/**/*.spec.js"
]
}