Skip to content

Cozy Stack Client API

Classes

AppCollection

Extends DocumentCollection API along with specific methods for io.cozy.apps.

Collection

Utility class to abstract an regroup identical methods and logics for specific collections.

CozyStackClient

Main API against the cozy-stack server.

DocumentCollection

Abstracts a collection of documents of the same doctype, providing CRUD methods and other helpers.

FileCollection

Implements DocumentCollection API along with specific methods for io.cozy.files.

Files are a special type of documents and are handled differently by the stack: special routes are to be used, and there is a notion of referenced files, aka files associated to a specific document

OAuthClient

Specialized CozyStackClient for mobile, implementing stack registration through OAuth.

PermissionCollection

Implements DocumentCollection API along with specific methods for io.cozy.permissions.

SettingsCollection

Implements DocumentCollection API to interact with the /settings endpoint of the stack

SharingCollection

Implements the DocumentCollection API along with specific methods for io.cozy.sharings.

TriggerCollection

Implements DocumentCollection API along with specific methods for io.cozy.triggers.

Constants

dontThrowNotFoundErrorobject

Handler for error response which return a empty value for "not found" error

Functions

getAccessToken()string

Get the access token string

getAccessToken()string

Get the app token string

garbageCollect()

Delete outdated results from cache

memoize()

Memoize with maxDuration and custom key

getCozyURL()

Get a uniform formatted URL and SSL information according to a provided URL

AppCollection

Extends DocumentCollection API along with specific methods for io.cozy.apps.

Kind: global class

appCollection.all() ⇒ Object

Lists all apps, without filters.

The returned documents are not paginated by the stack.

Kind: instance method of AppCollection
Returns: Object - The JSON API conformant response.
Throws:

  • FetchError

Collection

Utility class to abstract an regroup identical methods and logics for specific collections.

Kind: global class

Collection.get(stackClient, endpoint, options) ⇒ object

Utility method aimed to return only one document.

Kind: static method of Collection
Returns: object - JsonAPI response containing normalized document as data attribute

Param Type Description
stackClient object
endpoint string Stack endpoint
options object
options.normalize Func Callback to normalize response data (default data => data)
options.method string HTTP method (default GET)

CozyStackClient

Main API against the cozy-stack server.

Kind: global class

cozyStackClient.collection(doctype) ⇒ DocumentCollection

Creates a DocumentCollection instance.

Kind: instance method of CozyStackClient

Param Type Description
doctype string The collection doctype.

cozyStackClient.fetch(method, path, body, options) ⇒ object

Fetches an endpoint in an authorized way.

Kind: instance method of CozyStackClient
Throws:

  • FetchError
Param Type Description
method string The HTTP method.
path string The URI.
body object The payload.
options object

cozyStackClient.refreshToken() ⇒ Promise

Retrieves a new app token by refreshing the currently used token.

Kind: instance method of CozyStackClient
Returns: Promise - A promise that resolves with a new AccessToken object
Throws:

  • Error The client should already have an access token to use this function
  • Error The client couldn’t fetch a new token

cozyStackClient.fetchJSON(method, path, body, options) ⇒ object

Fetches JSON in an authorized way.

Kind: instance method of CozyStackClient
Throws:

  • FetchError
Param Type Description
method string The HTTP method.
path string The URI.
body object The payload.
options object

cozyStackClient.getAccessToken() ⇒ string

Get the access token string, being an oauth token or an app token

Kind: instance method of CozyStackClient
Returns: string - token

DocumentCollection

Abstracts a collection of documents of the same doctype, providing CRUD methods and other helpers.

Kind: global class

documentCollection.all(options) ⇒ Object

Lists all documents of the collection, without filters.

The returned documents are paginated by the stack.

Kind: instance method of DocumentCollection
Returns: Object - The JSON API conformant response.
Throws:

  • FetchError
Param Type Description
options Object The fetch options: pagination & fetch of specific docs.

documentCollection.find(selector, options) ⇒ Object

Returns a filtered list of documents using a Mango selector.

The returned documents are paginated by the stack.

Kind: instance method of DocumentCollection
Returns: Object - The JSON API conformant response.
Throws:

  • FetchError
Param Type Description
selector object The Mango selector.
options Object The query options.

documentCollection.get()

Get a document by id

Kind: instance method of DocumentCollection

documentCollection.getAll()

Get many documents by id

Kind: instance method of DocumentCollection

documentCollection.update()

Updates a document

Kind: instance method of DocumentCollection

documentCollection.destroy()

Destroys a document

Kind: instance method of DocumentCollection

documentCollection.updateAll(docs)

Updates several documents in one batch

Kind: instance method of DocumentCollection

Param Type
docs Array.<Document>

documentCollection.destroyAll(docs)

Deletes several documents in one batch

Kind: instance method of DocumentCollection

Param Type Description
docs Array.<Document> Documents to delete

documentCollection.fetchChanges(couchOptions, options)

Use Couch _changes API

Kind: instance method of DocumentCollection

Param Type Description
couchOptions object Couch options for changes https://kutt.it/5r7MNQ
options object

FileCollection

Implements DocumentCollection API along with specific methods for io.cozy.files.

Files are a special type of documents and are handled differently by the stack: special routes are to be used, and there is a notion of referenced files, aka files associated to a specific document

Kind: global class

fileCollection.find(selector, options) ⇒ Object

Returns a filtered list of documents using a Mango selector.

The returned documents are paginated by the stack.

Kind: instance method of FileCollection
Returns: Object - The JSON API conformant response.
Throws:

  • FetchError
Param Type Description
selector object The Mango selector.
options Object The query options.

fileCollection.findReferencedBy(document, options) ⇒ object

async findReferencedBy - Returns the list of files referenced by a document — see https://docs.cozy.io/en/cozy-stack/references-docs-in-vfs/

Kind: instance method of FileCollection
Returns: object - The JSON API conformant response.

Param Type Description
document object A JSON representing a document, with at least a _type and _id field.
options object Additional options
options.skip number For skip-based pagination, the number of referenced files to skip.
options.limit number For pagination, the number of results to return.
options.cursor object For cursor-based pagination, the index cursor.

fileCollection.addReferencedBy(document, documents) ⇒ object

Add referenced_by documents to a file — see https://docs.cozy.io/en/cozy-stack/references-docs-in-vfs/#post-filesfile-idrelationshipsreferenced_by

For example, to have an album referenced by a file:

addReferencedBy({_id: 123, _type: "io.cozy.files", name: "cozy.jpg"}, [{_id: 456, _type: "io.cozy.photos.albums", name: "Happy Cloud"}])

Kind: instance method of FileCollection
Returns: object - The JSON API conformant response.

Param Type Description
document object A JSON representing the file
documents Array An array of JSON documents having a _type and _id field.

fileCollection.removeReferencedBy(document, documents) ⇒ object

Remove referenced_by documents from a file — see https://docs.cozy.io/en/cozy-stack/references-docs-in-vfs/#delete-filesfile-idrelationshipsreferenced_by

For example, to remove an album reference from a file:

 removeReferencedBy({_id: 123, _type: "io.cozy.files", name: "cozy.jpg"}, [{_id: 456, _type: "io.cozy.photos.albums", name: "Happy Cloud"}])

Kind: instance method of FileCollection
Returns: object - The JSON API conformant response.

Param Type Description
document object A JSON representing the file
documents Array An array of JSON documents having a _type and _id field.

fileCollection.addReferencesTo(document, documents) ⇒ object

Add files references to a document — see https://docs.cozy.io/en/cozy-stack/references-docs-in-vfs/#post-datatypedoc-idrelationshipsreferences

For example, to add a photo to an album:

 addReferencesTo({_id: 456, _type: "io.cozy.photos.albums", name: "Happy Cloud"}, [{_id: 123, _type: "io.cozy.files", name: "cozy.jpg"}])

Kind: instance method of FileCollection
Returns: object - The JSON API conformant response.

Param Type Description
document object A JSON representing a document, with at least a _type and _id field.
documents Array An array of JSON files having an _id field.

fileCollection.removeReferencesTo(document, documents) ⇒ object

Remove files references to a document — see https://docs.cozy.io/en/cozy-stack/references-docs-in-vfs/#delete-datatypedoc-idrelationshipsreferences

For example, to remove a photo from an album:

 removeReferencesTo({_id: 456, _type: "io.cozy.photos.albums", name: "Happy Cloud"}, [{_id: 123, _type: "io.cozy.files", name: "cozy.jpg"}])

Kind: instance method of FileCollection
Returns: object - The JSON API conformant response.

Param Type Description
document object A JSON representing a document, with at least a _type and _id field.
documents Array An array of JSON files having an _id field.

fileCollection.restore(id) ⇒ Promise

Restores a trashed file.

Kind: instance method of FileCollection
Returns: Promise - - A promise that returns the restored file if resolved.
Throws:

  • FetchError
Param Type Description
id string The file’s id

fileCollection.deleteFilePermanently(id) ⇒ object

async deleteFilePermanently - Definitely delete a file

Kind: instance method of FileCollection
Returns: object - The deleted file object

Param Type Description
id string The id of the file to delete

fileCollection.upload(data, dirPath) ⇒ object

Kind: instance method of FileCollection
Returns: object - Created io.cozy.files

Param Type Description
data File | Blob | Stream | string | ArrayBuffer file to be uploaded
dirPath string Path to upload the file to. ie : /Administative/XXX/

fileCollection.createFile(data, params)

Kind: instance method of FileCollection

Param Type Description
data File | Blob | Stream | string | ArrayBuffer file to be uploaded
params object Additionnal parameters
params.name string Name of the file
params.dirId string Id of the directory you want to upload the file to
params.executable boolean If the file is an executable or not
params.metadata object io.cozy.files.metadata to attach to the file
params.options object Options to pass to doUpload method (additional headers)

fileCollection.updateFile(data, params) ⇒ object

updateFile - Updates a file’s data

Kind: instance method of FileCollection
Returns: object - Updated document

Param Type Description
data object Javascript File object
params object Additional parameters
params.fileId string The id of the file to update (required)
params.executable boolean Whether the file is executable or not
params.metadata object Metadata to be attached to the File io.cozy.file
params.options object Options to pass to doUpload method (additional headers)

fileCollection.isChildOf(child, parent) ⇒ boolean

Checks if the file belongs to the parent’s hierarchy.

Kind: instance method of FileCollection
Returns: boolean - Whether the file is a parent’s child

Param Type Description
child string | object The file which can either be an id or an object
parent string | object The parent target which can either be an id or an object

fileCollection.createDirectoryByPath(path) ⇒ object

async createDirectoryByPath - Creates one or more folders until the given path exists

Kind: instance method of FileCollection
Returns: object - The document corresponding to the last segment of the path

Param Type
path string

fileCollection.updateAttributes(id, attributes) ⇒ object

async updateAttributes - Updates a file / folder’s attributes except the metadata attribute. If you want to update its metadata attribute, then use updateFileMetadataAttribute since metadata is a specific doctype.

For instance, if you want to update the name of a file, you can pass attributes = { name: ‘newName’}

You can see the attributes for both Folder and File (as they share the same doctype they have a few in common) here : https://docs.cozy.io/en/cozy-doctypes/docs/io.cozy.files/#iocozyfiles

Kind: instance method of FileCollection
Returns: object - Updated document

Param Type Description
id string File id
attributes object New file attributes

fileCollection.createFileMetadata(attributes) ⇒ object

Send a metadata object that can be associated to a file uploaded after that, via the MetadataID query parameter. See https://github.com/cozy/cozy-stack/blob/master/docs/files.md#post-filesuploadmetadata

Kind: instance method of FileCollection
Returns: object - The Metadata object

Param Type Description
attributes object The file’s metadata

fileCollection.updateMetadataAttribute(id, metadata) ⇒ object

Updates the metadata attribute of a io.cozy.files Creates a new version of the file without having to upload again the file’s content

To see available content of the metadata attribute see : https://docs.cozy.io/en/cozy-doctypes/docs/io.cozy.files_metadata/

Kind: instance method of FileCollection
Returns: object - io.cozy.files updated

Param Type Description
id string File id
metadata object io.cozy.files.metadata attributes

fileCollection.doUpload(data, path, options, method)

This method should not be called directly to upload a file. You should use createFile

Kind: instance method of FileCollection

Param Type Default Description
data File | Blob | Stream | string | ArrayBuffer file to be uploaded
path string Uri to call the stack from. Something like /files/${dirId}?Name=${name}&Type=file&Executable=${executable}&MetadataID=${metadataId}
options object Additional headers
method string "POST" POST / PUT / PATCH

OAuthClient

Specialized CozyStackClient for mobile, implementing stack registration through OAuth.

Kind: global class

oAuthClient.register() ⇒ promise

Registers the currenly configured client with the OAuth server.

Kind: instance method of OAuthClient
Returns: promise - A promise that resolves with a complete list of client information, including client ID and client secret.
Throws:

  • Error When the client is already registered

oAuthClient.unregister() ⇒ promise

Unregisters the currenly configured client with the OAuth server.

Kind: instance method of OAuthClient
Throws:

  • NotRegisteredException When the client doesn’t have it’s registration information

oAuthClient.fetchInformation() ⇒ promise

Fetches the complete set of client information from the server after it has been registered.

Kind: instance method of OAuthClient
Throws:

  • NotRegisteredException When the client doesn’t have it’s registration information

oAuthClient.updateInformation(information, resetSecret) ⇒ promise

Overwrites the client own information. This method will update both the local information and the remote information on the OAuth server.

Kind: instance method of OAuthClient
Returns: promise - A promise that resolves to a complete, updated list of client information
Throws:

  • NotRegisteredException When the client doesn’t have it’s registration information
Param Type Default Description
information object Set of information to update. Note that some fields such as clientID can’t be updated.
resetSecret boolean false = false Optionnal, whether to reset the client secret or not

oAuthClient.generateStateCode() ⇒ string

Generates a random state code to be used during the OAuth process

Kind: instance method of OAuthClient

oAuthClient.getAuthCodeURL(stateCode, scopes) ⇒ string

Generates the URL that the user should be sent to in order to accept the app’s permissions.

Kind: instance method of OAuthClient
Returns: string - The URL
Throws:

  • NotRegisteredException When the client doesn’t have it’s registration information
Param Type Description
stateCode string A random code to be included in the URl for security. Can be generated with client.generateStateCode()
scopes Array = [] An array of permission scopes for the token.

oAuthClient.getAccessCodeFromURL(pageURL, stateCode) ⇒ string

Retrieves the access code contained in the URL to which the user is redirected after accepting the app’s permissions (the redirectURI).

Kind: instance method of OAuthClient
Returns: string - The access code
Throws:

  • Error The URL should contain the same state code as the one generated with client.getAuthCodeURL(). If not, it will throw an error
Param Type Description
pageURL string The redirected page URL, containing the state code and the access code
stateCode string The state code that was contained in the original URL the user was sent to (see client.getAuthCodeURL())

oAuthClient.fetchAccessToken(accessCode, oauthOptions, uri) ⇒ Promise

Exchanges an access code for an access token. This function does not update the client’s token.

Kind: instance method of OAuthClient
Returns: Promise - A promise that resolves with an AccessToken object.
Throws:

  • NotRegisteredException When the client doesn’t have it’s registration information
Param Type Description
accessCode string The access code contained in the redirection URL — see client.getAccessCodeFromURL()
oauthOptions object — To use when OAuthClient is not yet registered (during login process)
uri string — To use when OAuthClient is not yet registered (during login process)

oAuthClient.refreshToken() ⇒ Promise

Retrieves a new access token by refreshing the currently used token.

Kind: instance method of OAuthClient
Returns: Promise - A promise that resolves with a new AccessToken object
Throws:

  • NotRegisteredException When the client doesn’t have it’s registration information
  • Error The client should already have an access token to use this function

oAuthClient.setToken(token)

Updates the client’s stored token

Kind: instance method of OAuthClient

Param Type Description
token string = null The new token to use — can be a string, a json object or an AccessToken instance.

oAuthClient.setOAuthOptions(options)

Updates the OAuth informations

Kind: instance method of OAuthClient

Param Type Description
options object Map of OAuth options

oAuthClient.resetClient()

Reset the current OAuth client

Kind: instance method of OAuthClient

PermissionCollection

Implements DocumentCollection API along with specific methods for io.cozy.permissions.

Kind: global class

permissionCollection.add(document, permission) ⇒ Promise

Adds a permission to the given document. Document type must be io.cozy.apps, io.cozy.konnectors or io.cozy.permissions

Kind: instance method of PermissionCollection

Param Type
document object
permission object

Example

const permissions = await client
  .collection('io.cozy.permissions')
  .add(konnector, {
    folder: {
      type: 'io.cozy.files',
      verbs: ['GET', 'PUT'],
      values: [`io.cozy.files.bc57b60eb2954537b0dcdc6ebd8e9d23`]
    }
 })

permissionCollection.getOwnPermissions() ⇒ object

async getOwnPermissions - Gets the permission for the current token

Kind: instance method of PermissionCollection

SettingsCollection

Implements DocumentCollection API to interact with the /settings endpoint of the stack

Kind: global class

settingsCollection.get(path) ⇒ object

async get - Calls a route on the /settings API

Kind: instance method of SettingsCollection
Returns: object - The response from the route

Param Type Description
path string The setting route to call, eg instance or context

SharingCollection

Implements the DocumentCollection API along with specific methods for io.cozy.sharings.

Kind: global class

sharingCollection.share(document, recipients, sharingType, description, [previewPath])

share - Creates a new sharing. See https://docs.cozy.io/en/cozy-stack/sharing/#post-sharings

Kind: instance method of SharingCollection

Param Type Default Description
document object The document to share. Should have and _id and a name.
recipients Array A list of io.cozy.contacts
sharingType string
description string
[previewPath] string null Relative URL of the sharings preview page

sharingCollection.getDiscoveryLink(sharingId, sharecode) ⇒ string

getDiscoveryLink - Returns the URL of the page that can be used to accept a sharing. See https://docs.cozy.io/en/cozy-stack/sharing/#get-sharingssharing-iddiscovery

Kind: instance method of SharingCollection

Param Type
sharingId string
sharecode string

TriggerCollection

Implements DocumentCollection API along with specific methods for io.cozy.triggers.

Kind: global class

triggerCollection.all(options) ⇒ Object

Get the list of triggers.

Kind: instance method of TriggerCollection
Returns: Object - The JSON API conformant response.
Throws:

  • FetchError

See: https://docs.cozy.io/en/cozy-stack/jobs/#get-jobstriggers

Param Type Description
options Object The fetch options: Worker allow to filter only triggers associated with a specific worker.

triggerCollection.create(attributes) ⇒ object

Creates a Trigger document

Kind: instance method of TriggerCollection
Returns: object - Stack response, containing trigger document under data attribute.
See: https://docs.cozy.io/en/cozy-stack/jobs/#post-jobstriggers

Param Type Description
attributes object Trigger’s attributes

triggerCollection.destroy(document) ⇒ object

Deletes a trigger

Kind: instance method of TriggerCollection
Returns: object - The deleted document
See: https://docs.cozy.io/en/cozy-stack/jobs/#delete-jobstriggerstrigger-id

Param Type Description
document object The trigger to delete — must have an _id field

triggerCollection.find(selector, options) ⇒ Object

Be warned, ATM /jobs/triggers does not return the same informations than /data/io.cozy.triggers (used by the super.find method).

See https://github.com/cozy/cozy-stack/pull/2010

Kind: instance method of TriggerCollection
Returns: Object - The JSON API conformant response.
Throws:

  • FetchError
Param Type
selector object
options object

triggerCollection.launch(Trigger) ⇒ object

Force given trigger execution.

Kind: instance method of TriggerCollection
Returns: object - Stack response, containing job launched by trigger, under data attribute.
See: https://docs.cozy.io/en/cozy-stack/jobs/#post-jobstriggerstrigger-idlaunch

Param Type Description
Trigger object to launch

dontThrowNotFoundError ⇒ object

Handler for error response which return a empty value for “not found” error

Kind: global constant
Returns: object - JsonAPI response with empty data in case of “not found” error.

Param Type Description
error Error
data Array | object Data to return in case of “not found” error

getAccessToken() ⇒ string

Get the access token string

Kind: global function
Returns: string - token
See: CozyStackClient.getAccessToken

getAccessToken() ⇒ string

Get the app token string

Kind: global function
Returns: string - token
See: CozyStackClient.getAccessToken

garbageCollect()

Delete outdated results from cache

Kind: global function

memoize()

Memoize with maxDuration and custom key

Kind: global function

getCozyURL()

Get a uniform formatted URL and SSL information according to a provided URL

Kind: global function