Skip to content

Commit

Permalink
feat: adds typescript types + type tests (#110)
Browse files Browse the repository at this point in the history
* feat: adds typescript types + type tests

Signed-off-by: Carson Farmer <carson.farmer@gmail.com>

* feat: updates to latest cids release

Signed-off-by: Carson Farmer <carson.farmer@gmail.com>
  • Loading branch information
carsonfarmer authored and jacobheun committed Jan 27, 2020
1 parent fc96984 commit a5070ae
Show file tree
Hide file tree
Showing 4 changed files with 236 additions and 2 deletions.
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 <santos.vasco10@gmail.com>",
"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"
]
}

0 comments on commit a5070ae

Please sign in to comment.