npm package: @siriusid-next/siriusid-wallet
Description: @siriusid-next/siriusid-wallet
Author: Thomas Tran
Latest version: 0.1.0-unstable.2

@siriusid-next/siriusid-wallet

# Getting Started

## Installation
```npm
npm i @siriusid-next/siriusid-wallet --save
```

## Usage

Use the wallet

```ts
import { wallet } from '@siriusid-next/siriusid-wallet';

```

Generate mnemonic

```ts
const mnemonic = await wallet.generateMnemonic();
```

Create an individual identity and submit it to the trusted identity registry.
The identity DID Document and its metadata is anchored by batching using the Sirius trusted registry network, due to the lag incurred in registering the DID Document, which may take between 5-10 minutes, the registrationStatus will remain as PROCESSING until the DID Document can be retrieved from the public nodes.

```ts
const trustedIdentityRegistry = TrustedRegistry.SiriusIdTestNet;

const identity = await wallet.createIdentity(
    {
        name: 'My individual identity',
        type:IdentityTypes.Individual,
        trustedRegistryUrl: trustedIdentityRegistry,
    }
)

console.log(JSON.stringify(identity));
```
Create an individual identity using mnemonic phrase

```ts
const mnemonic = await wallet.generateMnemonic();

const trustedIdentityRegistry = TrustedRegistry.SiriusIdTestNet;

const identity = await wallet.createIdentity(
    {
        name: 'My individual identity',
        type:IdentityTypes.Individual,
        trustedRegistryUrl: trustedIdentityRegistry,
        fromMnemonic: mnemonic
    }
)

console.log(JSON.stringify(identity));
```

Resolve or retrieve the identity

```ts
const mnemonic = await wallet.generateMnemonic();

const trustedIdentityRegistry = TrustedRegistry.SiriusIdTestNet;

const identity = await wallet.getIdentity(
    {
        did: 'did:sirius:test:EiBTn3k2BNPaTFCL7BzVoz3Pbq4r-EiK9g01zIOcgJDtTQ',
        trustedRegistryUrl: trustedIdentityRegistry,
    }
)

console.log(JSON.stringify(identity));

```

Issue a new credential.

```ts
import {
  JsonWebKey,
  JsonWebSignature,
  JsonWebKey2020
} from "@transmute/json-web-signature";

// create the json web key based on ED25519 alg
const key = {
    id: "did:key:z6MkokrsVo8DbGDsnMAjnoHhJotMbDZiHfvxM4j65d8prXUr#z6MkokrsVo8DbGDsnMAjnoHhJotMbDZiHfvxM4j65d8prXUr",
    type: "JsonWebKey2020",
    controller: "did:key:z6MkokrsVo8DbGDsnMAjnoHhJotMbDZiHfvxM4j65d8prXUr",
    publicKeyJwk: {
        kty: "OKP",
        crv: "Ed25519",
        x: "ijtvFnowiumYMcYVbaz6p64Oz6bXwe2V_9IlCgDR_38",
    },
    privateKeyJwk: {
        kty: "OKP",
        crv: "Ed25519",
        x: "ijtvFnowiumYMcYVbaz6p64Oz6bXwe2V_9IlCgDR_38",
        d: "ZrHpIW1JBb-sK2-wzKV0mQjbxpnxjUCu151QZ9_F_Vs",
    },
};

// construct the credential
const credential = {
    "@context": [
        "https://www.w3.org/2018/credentials/v1",
        "https://w3id.org/security/suites/jws-2020/v1",
    ],
    id: "http://example.edu/credentials/3732",
    type: ["VerifiableCredential"],
    issuer: {
        id: "did:key:z6MkokrsVo8DbGDsnMAjnoHhJotMbDZiHfvxM4j65d8prXUr",
    },
    issuanceDate: "2010-01-01T19:23:24Z",
    credentialSubject: {
      id: "did:example:ebfeb1f712ebc6f1c276e12ec21",
    },
};

// construct the options
const options = {
    format: ['vc', 'vc-jwt'], // results as the verifiable credential and its jwt format
    documentLoader: documentLoader,
    suite: new JsonWebSignature({
      key: await JsonWebKey.from(key as JsonWebKey2020),
    }),
};

// issue the credential
const issuedCredential = await wallet.createCredential({
    credential: credential,
    options: options,
});

console.log(JSON.stringify(issuedCredential));
```

Verify the issued credentials
```ts
const issuedCredential =   {
    "@context": [
    "https://www.w3.org/2018/credentials/v1",
    "https://w3id.org/security/suites/jws-2020/v1"
    ],
    "id": "http://example.edu/credentials/3732",
    "type": ["VerifiableCredential"],
    "issuer": {
    "id": "did:key:z6MkokrsVo8DbGDsnMAjnoHhJotMbDZiHfvxM4j65d8prXUr"
    },
    "issuanceDate": "2010-01-01T19:23:24Z",
    "credentialSubject": { "id": "did:example:ebfeb1f712ebc6f1c276e12ec21" },
    "proof": {
    "type": "JsonWebSignature2020",
    "created": "2010-01-01T19:23:24Z",
    "verificationMethod": "did:key:z6MkokrsVo8DbGDsnMAjnoHhJotMbDZiHfvxM4j65d8prXUr#z6MkokrsVo8DbGDsnMAjnoHhJotMbDZiHfvxM4j65d8prXUr",
    "proofPurpose": "assertionMethod",
    "jws": "eyJhbGciOiJFZERTQSIsImI2NCI6ZmFsc2UsImNyaXQiOlsiYjY0Il19..k_7t6h5IGSWFAqIlqru3zyZ0FDPQGo88p9jDeKC1yw8oxd7xj6B70tZNSaspWkMyWbXFmZ5yCO8dlZZ9_kKbAQ"
    }
};


const options = {
    format: ['vc', 'vc-jwt'],
    documentLoader: documentLoader,
    suite: [new JsonWebSignature()],
};

const result = await wallet.verifyCredential({
    credential: issuedCredential,
    options: options,
});

console.log(JSON.stringify(result));
```