did-ipid
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);
const ipid = await createIpid(ipfs);
const didDocument = await ipid.resolve('did:ipid:QmUTE4cxTxihntPEFqTprgbqyyS9YRaRcC8FXp6PACEjFG');
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/',
});
});
const didDocument = await ipid.update(pem, (document) => {
document.removeService('hub');
document.addService({
id: 'messages',
type: 'MessagingService',
serviceEndpoint: 'https://example.com/messages/8377464',
});
});
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
License
Released under the MIT License.