Skip to content

Commit

Permalink
feat: add support for list pagination in list capability invocations
Browse files Browse the repository at this point in the history
  • Loading branch information
vasco-santos committed Nov 18, 2022
1 parent 2923ace commit 6fa28b8
Show file tree
Hide file tree
Showing 3 changed files with 30 additions and 2 deletions.
12 changes: 12 additions & 0 deletions packages/access-client/src/capabilities/store.js
Original file line number Diff line number Diff line change
Expand Up @@ -130,6 +130,18 @@ export const list = base.derive({
* be stored.
*/
with: URI.match({ protocol: 'did:' }),
nb: {
/**
* CID of the item where a previous list operation stopped, inclusive of
* the previous result set. Use this value to start a new operation, in
* order to paginate list.
*/
cursor: Link.optional(),
/**
* Size of the page being requested to list.
*/
size: Schema.integer().optional(),
},
derives: (claimed, delegated) => {
if (claimed.with !== delegated.with) {
return new Failure(
Expand Down
16 changes: 14 additions & 2 deletions packages/access-client/src/capabilities/upload.js
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
import { capability, Link, URI } from '@ucanto/validator'
import { capability, Link, URI, Schema } from '@ucanto/validator'
import { codec as CAR } from '@ucanto/transport/car'
import { equalWith, fail, equal } from './utils.js'
import { any } from './any.js'
Expand Down Expand Up @@ -130,6 +130,18 @@ export const list = base.derive({
to: capability({
can: 'upload/list',
with: URI.match({ protocol: 'did:' }),
nb: {
/**
* CID of the item where a previous list operation stopped, inclusive of
* the previous result set. Use this value to start a new operation, in
* order to paginate list.
*/
cursor: Link.optional(),
/**
* Size of the page being requested to list.
*/
size: Schema.integer().optional(),
},
}),
/**
* `upload/list` can be derived from the `upload/*` & `*` capability
Expand All @@ -140,4 +152,4 @@ export const list = base.derive({

// ⚠️ We export imports here so they are not omited in generated typedefs
// @see https://github.com/microsoft/TypeScript/issues/51548
export { Link }
export { Link, Schema }
4 changes: 4 additions & 0 deletions packages/access-client/test/capabilities/upload.test.js
Original file line number Diff line number Diff line change
Expand Up @@ -328,6 +328,7 @@ describe('upload capabilities', function () {
audience: w3,
with: account.did(),
proofs: [await any],
nb: {},
})

const result = await access(await list.delegate(), {
Expand Down Expand Up @@ -357,6 +358,7 @@ describe('upload capabilities', function () {
issuer: bob,
with: account.did(),
proofs: [await upload.delegate()],
nb: {},
})

const result = await access(await list.delegate(), {
Expand All @@ -379,13 +381,15 @@ describe('upload capabilities', function () {
audience: bob,
with: account.did(),
proofs: [await any],
nb: {},
})

const list = Upload.list.invoke({
audience: w3,
issuer: bob,
with: account.did(),
proofs: [await delegation.delegate()],
nb: {},
})

const result = await access(await list.delegate(), {
Expand Down

0 comments on commit 6fa28b8

Please sign in to comment.