Code Monkey home page Code Monkey logo

js-did-ipid's Introduction

did-ipid

NPM version Downloads Build Status Coverage Status Dependency status Dev Dependency status

The IPID DID method implementation in JavaScript.

Installation

$ npm install did-ipid

This library is written in modern JavaScript and is published in both CommonJS and ES module transpiled variants. If you target older browsers please make sure to transpile accordingly.

Usage

import createIpid, { getDid } from 'did-ipid';

const did = await getDid(pem);
//=> Returns the DID associated to a private key in PEM format.

const ipid = await createIpid(ipfs);

const didDocument = await ipid.resolve('did:ipid:QmUTE4cxTxihntPEFqTprgbqyyS9YRaRcC8FXp6PACEjFG');
//=> Resolves a DID and returns the respective DID Document.

const didDocument = await ipid.create(pem, (document) => {
    const publicKey = document.addPublicKey({
    	type: 'RsaVerificationKey2018',
        publicKeyHex: '02b97c30de767f084ce3080168ee293053ba33b235d7116a3263d29f1450936b71',
    });

    const authentication = document.addAuthentication(publicKey.id);

    const service = document.addService({
    	id: 'hub',
    	type: 'HubService',
    	serviceEndpoint: 'https://hub.example.com/',
    });
});
//=> Creates a new DID and the corresponding DID Document based on the provided private key pem.
//=> The DID Document is published with the added publicKey, authentication and service.

const didDocument = await ipid.update(pem, (document) => {
    document.removeService('hub');

    document.addService({
    	id: 'messages',
    	type: 'MessagingService',
    	serviceEndpoint: 'https://example.com/messages/8377464',
    });
});
//=> Updates a DID Document based on the DID associated to the provided private key pem.
//=> The DID Document is published without the `hub` service and with a new one called `messages`. 

API

getDid(pem)

Returns the DID associated to a private key in PEM format.

pem

Type: string

A private key in PEM format.

Supported formats: pkcs1-pem or pkcs8-pem.

Example:

-----BEGIN RSA PRIVATE KEY-----
MIICXQIBAAKBgQDCQZyRCPMcBPL2J2SuI2TduR7sy28wmcRzfj8fXQTbj1zJURku
...
-----END RSA PRIVATE KEY-----

IPID

An IPFS node is required to create an IPID instance. Please be sure to check js-ipfs, the JavaScript implementation of the IPFS protocol, to learn how to create one.

There is currently only one option available during the creation of an IPID instance. The lifetime option defines the duration of the DID document availability.

Example:

import createIpid from 'did-ipid';

const ipid = await createIpid(ipfs, { lifetime: '24h' });

Notes:

  • Please make sure that the IPFS node is ready to use.
  • This package uses the Key Management provided by IPFS. So during the creation of the node a password must be defined, as an option, to encrypt/decrypt your keys.

resolve(did)

Resolves a DID and provides the respective DID Document.

Returns a Promise that resolves to the DID Document.

did

Type: string

The DID to resolve.

Example:

did:ipid:QmUTE4cxTxihntPEFqTprgbqyyS9YRaRcC8FXp6PACEjFG

create(privateKeyPem, operations)

Creates a new DID and respective DID Document by applying all the specified operations.

Returns a Promise that resolves to the DID Document.

privateKeyPem

Type: string

A private key in PEM format.

Example:

-----BEGIN RSA PRIVATE KEY-----
MIICXQIBAAKBgQDCQZyRCPMcBPL2J2SuI2TduR7sy28wmcRzfj8fXQTbj1zJURku
...
-----END RSA PRIVATE KEY-----
operations

Type: Function

A function that receives a Document instance that provides methods to modify its content.

update(privateKeyPem, operations)

Updates an existing DID Document by applying all the specified operations.

Returns a Promise that resolves to the DID Document.

privateKeyPem

Type: string

A private key in PEM format.

Example:

-----BEGIN RSA PRIVATE KEY-----
MIICXQIBAAKBgQDCQZyRCPMcBPL2J2SuI2TduR7sy28wmcRzfj8fXQTbj1zJURku
...
-----END RSA PRIVATE KEY-----
operations

Type: Function

A function that receives a Document instance that provides methods to modify its content.

Document

getContent()

Returns the current state of the documents content.

addPublicKey(publicKey, [options])

Adds a new Public Key to the document.

Returns the added public key.

publicKey

Type: Object

An object with all the Public Key required properties as defined in the DID Public Keys spec.

  • id should be provided without a prefixed did.
  • If no id is provided, one will be generated.
  • If no controller is provided, it is assumed that it is its own DID.
options

Type: Object

Options to be used while adding a public key.

idPrefix

Type: string

A prefix to be added to the public key id.

revokePublicKey(id)

Revokes a Public Key from the document.

Also revokes an authentication that references this public key.

id

Type: string

The id of the public key.

addAuthentication(authentication)

Adds a new Authentication to the document.

Returns the added authentication.

authentication

Type: string

The id of the public key that is being referenced.

removeAuthentication(id)

Revokes an Authentication from the document.

id

Type: string

The id authentication.

addService(service, [options])

Adds a new Service Endpoint to the document.

Returns the added service.

service

Type: Object

An object with all the Service Endpoint required properties as defined in the DID Service Endpoints spec.

  • id should be provided without a prefixed did.
  • If no id is provided, one will be generated.
options

Type: Object

Options to be used while adding a service.

idPrefix

Type: string

A prefix to be added to the service id.

removeService(id)

Revokes a Service Endpoint from the document.

id

Type: string

The id of the service endpoint.

Tests

$ npm test
$ npm test -- --watch # during development

License

Released under the MIT License.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.