Skip to content

Client implementation of OCI Distribution

License

Notifications You must be signed in to change notification settings

lesomnus/oci-client

Repository files navigation

OCI Client

Test Codacy Badge Codacy Badge

Client implementation of OCI Distribution. It is designed to work in the browser but keeps Node.js in mind.

Install

npm i @lesomnus/oci-client

Usage

List Tags

import { ClientV2 } from '@lesomns/oci-client'

const client = new ClientV2('index.docker.io')
await client.ping()

const v = await client.repo('library/node').tags.list().unwrap()
console.log(v)
// {
//   "name": "library/node",
//   "tags": [
//     ...
//   ]
// }

Get Manifest

import { ClientV2 } from '@lesomns/oci-client'
import { vnd } from '@lesomnus/oci-client/media-types'

const client = new ClientV2('index.docker.io')
await client.ping()

const opaque = await client.repo('library/node').manifests.get('latest').unwrap()
const index = opaque.as(vnd.oci.image.indexV1)
console.log(index?.manifests[0].platform.os)
// "linux"

Implemented APIs

OCI

All APIs are implemented as described in Distribution spec v1.1.0.

ID Method API Endpoint
end-1 GET /v2/
end-2 GET / HEAD /v2/<name>/blobs/<digest>
end-3 GET / HEAD /v2/<name>/manifests/<reference>
end-4a POST /v2/<name>/blobs/uploads/
end-4b POST /v2/<name>/blobs/uploads/?digest=<digest>
end-5 PATCH /v2/<name>/blobs/uploads/<reference>
end-6 PUT /v2/<name>/blobs/uploads/<reference>?digest=<digest>
end-7 PUT /v2/<name>/manifests/<reference>
end-8a GET /v2/<name>/tags/list
end-8b GET /v2/<name>/tags/list?n=<integer>&last=<tagname>
end-9 DELETE /v2/<name>/manifests/<reference>
end-10 DELETE /v2/<name>/blobs/<digest>
end-11 POST /v2/<name>/blobs/uploads/?mount=<digest>&from=<other_name>
end-12a GET /v2/<name>/referrers/<digest>
end-12b GET /v2/<name>/referrers/<digest>?artifactType=<artifactType>
end-13 GET /v2/<name>/blobs/uploads/<reference>

Catalog

List image repositories.

Complies:

Method API Endpoint
GET `/v2/_catalog