Interface DataAccessor

A DataAccessor is the building block closest to the actual data storage. It should not worry about most Solid logic, most of that will be handled before it is called. There are a few things it still needs to do, and it is very important every implementation does this:

  • If the input identifier ends with a slash, it should be assumed the identifier is targeting a container.
  • Similarly, if there is no trailing slash it should assume a document.
  • It should always throw a NotFoundHttpError if it does not have data matching the input identifier.
  • DataAccessors should not generate containment triples. This will be done externally using getChildren.

Hierarchy

Implemented by

Properties

canHandle: ((representation) => Promise<void>)

Type declaration

    • (representation): Promise<void>
    • Should throw a NotImplementedHttpError if the DataAccessor does not support storing the given Representation.

      Throws

      BadRequestHttpError If it does not support the incoming data.

      Parameters

      Returns Promise<void>

deleteResource: ((identifier) => Promise<void>)

Type declaration

    • (identifier): Promise<void>
    • Deletes the resource and its corresponding metadata.

      Solid, ยง5.4: "When a contained resource is deleted, the server MUST also remove the corresponding containment triple, which has the effect of removing the deleted resource from the containing container." https://solid.github.io/specification/protocol#deleting-resources

      Parameters

      Returns Promise<void>

getChildren: ((identifier) => AsyncIterableIterator<RepresentationMetadata>)

Type declaration

    • (identifier): AsyncIterableIterator<RepresentationMetadata>
    • Returns metadata for all resources in the requested container. This should not be all metadata of those resources (but it can be), but instead the main metadata you want to show in situations where all these resources are presented simultaneously. Generally this would be metadata that is present for all of these resources, such as resource type or last modified date.

      It can be safely assumed that the incoming identifier will always correspond to a container.

      Parameters

      Returns AsyncIterableIterator<RepresentationMetadata>

getData: ((identifier) => Promise<Guarded<Readable>>)

Type declaration

    • (identifier): Promise<Guarded<Readable>>
    • Returns a data stream stored for the given identifier. It can be assumed that the incoming identifier will always correspond to a document.

      Parameters

      Returns Promise<Guarded<Readable>>

getMetadata: ((identifier) => Promise<RepresentationMetadata>)

Type declaration

    • (identifier): Promise<RepresentationMetadata>
    • Returns the metadata corresponding to the identifier. If possible, it is suggested to add a posix:size triple to the metadata indicating the binary size. This is necessary for range requests.

      Parameters

      Returns Promise<RepresentationMetadata>

writeContainer: ((identifier, metadata) => Promise<void>)

Type declaration

    • (identifier, metadata): Promise<void>
    • Writes metadata for a container. If the container does not exist yet it should be created, if it does its metadata should be overwritten, except for the containment triples.

      Parameters

      Returns Promise<void>

writeDocument: ((identifier, data, metadata) => Promise<void>)

Type declaration

    • (identifier, data, metadata): Promise<void>
    • Writes data and metadata for a document. If any data and/or metadata exist for the given identifier, it should be overwritten.

      Parameters

      Returns Promise<void>

writeMetadata: ((identifier, metadata) => Promise<void>)

Type declaration

    • (identifier, metadata): Promise<void>
    • Writes metadata for a resource. It can safely be assumed that the subject resource already exists.

      Parameters

      Returns Promise<void>