Storage providers in the w3 family of protocols need to be able to get information about the customers, subscriptions and "consumers" (i.e., spaces)
they work with. The capabilities described in this document all act on the "service" resource (i.e., did:web:web3.storage
) and can be delegated
to administrative users by creating delegations signed with the service signer's private key.
The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", "SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in this document are to be interpreted as described in RFC2119.
Get information about a consumer (i.e., a space).
consumer: SpaceDID
{
did: SpaceDID
allocated: number
limit: number
subscription: string
}
ConsumerNotFound
export const get = capability({
can: 'consumer/get',
with: ProviderDID,
nb: struct({
consumer: SpaceDID,
}),
derives: (child, parent) => {
return (
and(equalWith(child, parent)) ||
and(equal(child.nb.consumer, parent.nb.consumer, 'consumer')) ||
ok({})
)
},
})
- @web3-storage/capabilities: capability in consumer.js
- @web3-storage/upload-api: invocation handler in consumer/get.js
Get information about a customer.
customer: DID<mailto>
{
did: AccountDID
subscriptions: string[]
}
CustomerNotFound
export const get = capability({
can: 'customer/get',
with: ProviderDID,
nb: struct({
customer: AccountDID,
}),
derives: (child, parent) => {
return (
and(equalWith(child, parent)) ||
and(equal(child.nb.customer, parent.nb.customer, 'customer')) ||
ok({})
)
},
})
- @web3-storage/capabilities: capability in customer.js
- @web3-storage/upload-api: invocation handler in customer/get.js
Get information about a subscription.
subscription: string
{
customer: DID<mailto>
consumer?: SpaceDID
}
SubscriptionNotFound
export const get = capability({
can: 'subscription/get',
with: ProviderDID,
nb: struct({
subscription: Schema.string(),
}),
derives: (child, parent) => {
return (
and(equalWith(child, parent)) ||
and(equal(child.nb.subscription, parent.nb.subscription, 'consumer')) ||
ok({})
)
},
})
- @web3-storage/capabilities: capability in subscription.js
- @web3-storage/upload-api: invocation handler in subscription/get.js
Get information about a content CID. This does not return the actual data identified by the CID, just metadata our system tracks, e.g. the spaces the content identified by a given CID has been uploaded to and the dates the uploads happened.
root: CID
The uploads
property will be a list of spaces the given root CID's content has been uploaded to, along
with the date it was uploaded.
{
uploads: Array<{space: SpaceDID, insertedAt: Date}>
}
- @web3-storage/capabilities: capability in admin.js
- @web3-storage/upload-api: invocation handler in admin/upload/inspect.js
Get information about a shard (i.e., a CAR that contains part of an upload) CID. This does not return the actual data identified by the CID, just metadata our system tracks, e.g. the spaces the CAR identified by a given CID has been stored in and the date it was stored.
link: CID
The stores
property will be a list of spaces the specified shard was stored in, along with the date on
which it was stored.
{
stores: Array<{space: SpaceDID, insertedAt: Date}>
}
- @web3-storage/capabilities: capability in admin.js
- @web3-storage/upload-api: invocation handler in admin/store/inspect.js