RemoteStorage¶
Constructor¶
Create a remoteStorage
instance like so:
var remoteStorage = new RemoteStorage();
The constructor can optionally be called with a configuration object. This example shows all default values:
var remoteStorage = new RemoteStorage({
cache: true,
changeEvents: {
local: true,
window: false,
remote: true,
conflict: true
},
cordovaRedirectUri: undefined,
logging: false,
modules: []
});
Note
In the current version, it is only possible to use a single
RemoteStorage
instance. You cannot connect to two different remotes yet.
We intend to support this soon (see issue #991)
Warning
For the change events configuration, you currently have to set all events explicitly. Otherwise it would disable the unspecified ones. (see issue #1025)
Events¶
You can handle events from your remoteStorage
instance by using the
.on()
function. For example:
remoteStorage.on('connected', function() {
// Storage account has been connected, let’s roll!
});
List of events¶
ready
¶
Emitted when all features are loaded and the RS instance is ready
not-connected
¶
Emitted when ready, but no storage connected (“anonymous mode”)
connected
¶
Emitted when a remote storage has been connected
disconnected
¶
Emitted after disconnect
error
¶
Emitted when an error occurs; receives an error object as argument
There are a handful of known errors, which are identified by the
name
property of the error object:
Name
Description
Unauthorized
Emitted when a network request resulted in a 401 or 403 response. You can use this event to handle invalid OAuth tokens in custom UI (i.e. when a stored token has been revoked or expired by the RS server).
DiscoveryError
A variety of storage discovery errors, e.g. from user address input validation, or user address lookup issues
Example:
remoteStorage.on('error', err => console.log(err)); // { // name: "Unauthorized", // message: "App authorization expired or revoked.", // stack: "Error↵ at new a.Unauthorized (vendor.js:65710:41870)" // }
features-loaded
¶
Emitted when all features are loaded
connecting
¶
Emitted before webfinger lookup
authing
¶
Emitted before redirecting to the authing server
wire-busy
¶
Emitted when a network request starts
wire-done
¶
Emitted when a network request completes
sync-req-done
¶
Emitted when a single sync request has finished
sync-done
¶
Emitted when all tasks of a sync have been completed and a new sync is scheduled
network-offline
¶
Emitted once when a wire request fails for the first time, and
remote.online
is set to false
network-online
¶
Emitted once when a wire request succeeds for the first time after a failed one, and
remote.online
is set back to true
sync-interval-change
¶
Emitted when the sync interval changes
Prototype functions¶
The following functions can be called on your remoteStorage
instance:
Initiate the OAuth authorization flow.
This function is called by custom storage backend implementations (e.g. Dropbox or Google Drive).
- Arguments
options (object) –
options.authURL (string) – URL of the authorization endpoint
options.scope (string) – access scope
options.clientId (string) – client identifier (defaults to the origin of the redirectUri)
-
connect
(userAddress[, token])¶ Connect to a remoteStorage server.
Discovers the WebFinger profile of the given user address and initiates the OAuth dance.
This method must be called after all required access has been claimed. When using the connect widget, it will call this method itself.
Special cases:
If a bearer token is supplied as second argument, the OAuth dance will be skipped and the supplied token be used instead. This is useful outside of browser environments, where the token has been acquired in a different way.
If the Webfinger profile for the given user address doesn’t contain an auth URL, the library will assume that client and server have established authorization among themselves, which will omit bearer tokens in all requests later on. This is useful for example when using Kerberos and similar protocols.
- Arguments
userAddress (string) – The user address (user@host) to connect to.
token (string) – (optional) A bearer token acquired beforehand
Example:
remoteStorage.connect('user@example.com');
-
disconnect
()¶ “Disconnect” from remote server to terminate current session.
This method clears all stored settings and deletes the entire local cache.
Example:
remoteStorage.disconnect();
-
enableLog
()¶ TODO: do we still need this, now that we always instantiate the prototype?
Enable remoteStorage logging.
Example:
remoteStorage.enableLog();
-
disableLog
()¶ TODO: do we still need this, now that we always instantiate the prototype?
Disable remoteStorage logging
Example:
remoteStorage.disableLog();
-
getSyncInterval
()¶ Get the value of the sync interval when application is in the foreground
- Returns
number – A number of milliseconds
Example:
remoteStorage.getSyncInterval(); // 10000
-
setSyncInterval
(interval)¶ Set the value of the sync interval when application is in the foreground
- Arguments
interval (number) – Sync interval in milliseconds (between 1000 and 3600000)
Example:
remoteStorage.setSyncInterval(10000);
-
getBackgroundSyncInterval
()¶ Get the value of the sync interval when application is in the background
- Returns
number – A number of milliseconds
Example:
remoteStorage.getBackgroundSyncInterval(); // 60000
-
setBackgroundSyncInterval
(interval)¶ Set the value of the sync interval when the application is in the background
- Arguments
interval – Sync interval in milliseconds (between 1000 and 3600000)
Example:
remoteStorage.setBackgroundSyncInterval(60000);
-
getCurrentSyncInterval
()¶ Get the value of the current sync interval. Can be background or foreground, custom or default.
- Returns
number – A number of milliseconds
Example:
remoteStorage.getCurrentSyncInterval(); // 15000
-
getRequestTimeout
()¶ Get the value of the current network request timeout
- Returns
number – A number of milliseconds
Example:
remoteStorage.getRequestTimeout(); // 30000
-
setRequestTimeout
(timeout)¶ Set the timeout for network requests.
- Arguments
timeout – Timeout in milliseconds
Example:
remoteStorage.setRequestTimeout(30000);
-
scope
(path)¶ This method enables you to quickly instantiate a BaseClient, which you can use to directly read and manipulate data in the connected storage account.
Please use this method only for debugging and development, and choose or create a data module for your app to use.
- Arguments
path (string) – The base directory of the BaseClient that will be returned (with a leading and a trailing slash)
- Returns
BaseClient – A client with the specified scope (category/base directory)
Example:
remoteStorage.scope('/pictures/').getListing(''); remoteStorage.scope('/public/pictures/').getListing('');
-
setApiKeys
(apiKeys)¶ Set the OAuth key/ID for either GoogleDrive or Dropbox backend support.
- Arguments
apiKeys (Object) – A config object with these properties:
apiKeys.type (string) – Backend type: ‘googledrive’ or ‘dropbox’
apiKeys.key (string) – Client ID for GoogleDrive, or app key for Dropbox
Example:
remoteStorage.setApiKeys({ dropbox: 'your-app-key', googledrive: 'your-client-id' });
-
setCordovaRedirectUri
(uri)¶ Set redirect URI to be used for the OAuth redirect within the in-app-browser window in Cordova apps.
- Arguments
uri (string) – A valid HTTP(S) URI
Example:
remoteStorage.setCordovaRedirectUri('https://app.wow-much-app.com');
-
startSync
()¶ Start synchronization with remote storage, downloading and uploading any changes within the cached paths.
Please consider: local changes will attempt sync immediately, and remote changes should also be synced timely when using library defaults. So this is mostly useful for letting users sync manually, when pressing a sync button for example. This might feel safer to them sometimes, esp. when shifting between offline and online a lot.
- Returns
Promise – A Promise which resolves when the sync has finished
Example:
remoteStorage.startSync();
-
stopSync
()¶ Stop the periodic synchronization.
Example:
remoteStorage.stopSync();
-
on
(eventName, handler)¶ Register an event handler. See List of events for available event names.
- Arguments
eventName (string) – Name of the event
handler (function) – Event handler
Example:
remoteStorage.on('connected', function() { console.log('user connected their storage'); });
-
onChange
(path, handler)¶ Add a “change” event handler to the given path. Whenever a “change” happens (as determined by the backend, such as e.g. <RemoteStorage.IndexedDB>) and the affected path is equal to or below the given ‘path’, the given handler is called.
You should usually not use this method directly, but instead use the “change” events provided by BaseClient
- Arguments
path (string) – Absolute path to attach handler to
handler (function) – Handler function
Example:
remoteStorage.onChange('/bookmarks/', function() { // your code here })