# @transmute/vc-jwt-status-list

> An implementation of https://w3c.github.io/vc-status-list-2021

Latest version **0.0.2** (published 2023-04-22) · Apache-2.0 license · 0 weekly downloads

## Install

```sh
npm install @transmute/vc-jwt-status-list
pnpm add @transmute/vc-jwt-status-list
yarn add @transmute/vc-jwt-status-list
bun add @transmute/vc-jwt-status-list
```

## Health

**Score 25/100 (F)** — status: abandoned.

Positive: has types; no vulnerabilities; high quality score.

Warnings: low downloads; no esm support; pre 1.0.

Negative: abandoned; low maintenance score.

## Facts

| | |
|---|---|
| Version | 0.0.2 |
| Published | 2023-04-22 |
| First published | 2023-04-21 |
| Weekly downloads | 0 |
| License | Apache-2.0 |
| TypeScript types | bundled |
| Module format | CommonJS |
| Dependencies | 3 |
| Unpacked size | 55.5 KB |
| Known vulnerabilities | 0 |
| Install scripts | no |
| GitHub stars | 0 |
| Author | Orie Steele |
| Maintainers | ipbyrne, or13, transmute-ci |

## Links

- npm: https://www.npmjs.com/package/@transmute/vc-jwt-status-list
- Repository: https://github.com/transmute-industries/vc-jwt-status-list
- Homepage: https://github.com/transmute-industries/vc-jwt-status-list#readme
- Issues: https://github.com/transmute-industries/vc-jwt-status-list/issues
- npm.io page: https://npm.io/package/@transmute/vc-jwt-status-list

## Dependencies (3)

- [jose](https://npm.io/package/jose.md) ^4.11.1
- [pako](https://npm.io/package/pako.md) ^2.0.4
- [moment](https://npm.io/package/moment.md) ^2.29.4

## Recent versions

- 0.0.2 (latest) — 2023-04-22
- 0.0.1 — 2023-04-22
- 0.0.0 — 2023-04-21

## README

# vc status list

[![CI](https://github.com/transmute-industries/vc-jwt-status-list/actions/workflows/ci.yml/badge.svg)](https://github.com/transmute-industries/vc-jwt-status-list/actions/workflows/ci.yml)
![Branches](./badges/coverage-branches.svg)
![Functions](./badges/coverage-functions.svg)
![Lines](./badges/coverage-lines.svg)
![Statements](./badges/coverage-statements.svg)
![Jest coverage](./badges/coverage-jest%20coverage.svg)

<!-- [![NPM](https://nodei.co/npm/@transmute/vc-jwt-status-list.png?mini=true)](https://npmjs.org/package/@transmute/vc-jwt-status-list) -->

<img src="./transmute-banner.png" />

#### [Questions? Contact Transmute](https://transmute.typeform.com/to/RshfIw?typeform-source=vc-jwt-status-list)

## Usage

```bash
npm install '@transmute/vc-jwt-status-list'
```

```ts
import status from '@transmute/vc-jwt-status-list';
```

```js
const status = require('@transmute/vc-jwt-status-list');
```


### Creating a StatusList

```ts
import moment from 'moment'
import * as jose from 'jose'
import { StatusList, SignParameters } from '@transmute/vc-jwt-status-list'

const signer = {
  sign: async ({ header, claimset }: SignParameters) => {
    const jwt = await new jose.CompactSign(
      Buffer.from(JSON.stringify(claimset)),
    )
      .setProtectedHeader(header)
      .sign(await jose.importJWK(privateKeyJwk))
    return jwt
  },
}

const statusList = await StatusList.create({
  id: 'https://vendor.example/credentials/status/3',
  alg: 'ES256',
  iss: 'did:example:123',
  kid: '#0',
  iat: moment('2021-04-05T14:27:40Z').unix(),
  length: 8,
  purpose: 'suspension',
  signer,
})
```


### Creating a Verifiable Credential With Status

```ts
import moment from 'moment'
import { VerifiableCredential } from '@transmute/vc-jwt-status-list'

const verifiableCredential = await VerifiableCredential.create({
    header: {
      alg: 'ES256',
      iss: 'did:example:123',
      kid: '#0',
      typ: 'vc+ld+jwt',
      cty: 'vc+ld+json',
    },
    claimset: {
      '@context': [
        'https://www.w3.org/ns/credentials/v2',
        'https://w3id.org/vc/status-list/2021/v1',
      ],
      id: 'http://example.com/credentials/1872',
      type: ['VerifiableCredential', 'NewCredentialType'],
      issuer: {
        id: 'did:example:123',
        type: ['Organization', 'OrganizationType'],
      },
      validFrom: '2010-01-01T19:23:24Z',
      credentialStatus: {
        id: 'https://example.com/credentials/status/3#4',
        type: 'StatusList2021Entry',
        statusPurpose: 'suspension',
        statusListIndex: '4',
        statusListCredential: 'https://example.com/credentials/status/3',
      },
      credentialSubject: {
        id: 'did:example:456',
        type: ['Person', 'JobType'],
        claimName: 'claimValue',
      },
    },
    signer,
  })
```

### Verifying & Suspending a Verifiable Credential With Status

```ts
import { VerifiableCredential } from '@transmute/vc-jwt-status-list'

const resolver = {
  resolve: async (id: string) => {
    if (id === 'https://example.com/credentials/status/3') {
      return statusList
    }
    throw new Error('unsupported status list.')
  },
}
const beforeSuspension = await VerifiableCredential.verify({
  jwt: verifiableCredential,
  verifier,
  resolver,
})
// beforeSuspension.suspension is false
const updatedStatusList = await VerifiableCredential.updateStatus({
  jwt: verifiableCredential,
  purpose: 'suspension',
  status: true,
  resolver,
  verifier,
  signer,
})
const afterSuspension = await VerifiableCredential.verify({
  jwt: verifiableCredential,
  verifier,
  resolver: {
    resolve: async (id: string) => {
      if (id === 'https://example.com/credentials/status/3') {
        return updatedStatusList
      }
      throw new Error('unsupported status list.')
    },
  },
})
// afterSuspension.suspension is true
```

## Develop

```bash
npm i
npm t
npm run lint
npm run build
```

---
_Source: https://npm.io/package/@transmute/vc-jwt-status-list · Machine-readable twin of the npm.io package page. Health data is recomputed on every publish._
