diff --git a/CHANGELOG.md b/CHANGELOG.md index 94c8b3438..736127df0 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -4,6 +4,10 @@ Changes in 0.1.1 Breaking changes: * `Room.calculateRoomName` is now private. Use `Room.recalculate` instead, and access the calculated name via `Room.name`. + * `new MatrixClient(...)` no longer creates a `MatrixInMemoryStore` if + `opts.store` is not specified. Instead, the `createClient` global function + creates it and passes it to the constructor. This change will not affect + users who have always used `createClient` to create a `MatrixClient`. New properties: * `User.events` diff --git a/lib/client.js b/lib/client.js index 9ec66c886..2e9a22b11 100644 --- a/lib/client.js +++ b/lib/client.js @@ -10,23 +10,30 @@ var MatrixEvent = require("./models/event").MatrixEvent; var EventStatus = require("./models/event").EventStatus; var Room = require("./models/room"); var User = require("./models/user"); -var MatrixInMemoryStore = require("./store/memory").MatrixInMemoryStore; var utils = require("./utils"); // TODO: // Internal: rate limiting /** - * Construct a Matrix Client. + * Construct a Matrix Client. Only directly construct this if you want to use + * custom modules. Normally, {@link createClient} should be used + * as it specifies 'sensible' defaults for these modules. * @constructor * @extends {external:EventEmitter} * @param {Object} opts The configuration options for this client. - * @param {string} opts.baseUrl Required. The base URL to the client-server HTTP API. - * @param {Function} opts.request Required. The function to invoke for HTTP requests. + * @param {string} opts.baseUrl Required. The base URL to the client-server + * HTTP API. + * @param {Function} opts.request Required. The function to invoke for HTTP + * requests. The value of this property is typically require("request") + * as it returns a function which meets the required interface. See + * {@link requestFunction} for more information. * @param {string} opts.accessToken The access_token for this user. * @param {string} opts.userId The user ID for this user. - * @param {Object} opts.store Optional. The data store to use. Defaults to - * {@link module:store/memory.MatrixInMemoryStore}. + * @param {Object} opts.store Optional. The data store to use. If not specified, + * this client will not store any HTTP responses. + * @param {Object} opts.scheduler Optional. The scheduler to use. If not + * specified, this client will not retry requests on failure. */ function MatrixClient(opts) { utils.checkObjectHasKeys(opts, ["baseUrl", "request"]); @@ -34,7 +41,8 @@ function MatrixClient(opts) { ["baseUrl", "request", "accessToken", "userId", "store"] ); - this.store = opts.store || new MatrixInMemoryStore(); + this.store = opts.store; + this.scheduler = opts.scheduler; // track our position in the overall eventstream this.fromToken = undefined; this.clientRunning = false; diff --git a/lib/matrix.js b/lib/matrix.js index 1a307a6b8..b5d7bf589 100644 --- a/lib/matrix.js +++ b/lib/matrix.js @@ -35,15 +35,18 @@ module.exports.request = function(r) { }; /** - * Construct a Matrix Client. Identical to {@link module:client.MatrixClient} - * except the 'request' option is already specified. + * Construct a Matrix Client. Similar to {@link module:client~MatrixClient} + * except that the 'request', 'store' and 'scheduler' dependencies are satisfied. * @param {(Object|string)} opts The configuration options for this client. If - * this is a string, it is assumed to be the base URL. + * this is a string, it is assumed to be the base URL. These configuration + * options will be passed directly to {@link module:client~MatrixClient}. * @param {string} opts.baseUrl The base URL to the client-server HTTP API. * @param {string} opts.accessToken Optional. The access_token for this user. * @param {string} opts.userId Optional. The user ID for this user. * @param {Object} opts.store Optional. The data store to use. Defaults to * {@link module:store/memory.MatrixInMemoryStore}. + * @param {Object} opts.scheduler Optional. The scheduler to use. Defaults to + * {@link module:scheduler.BasicScheduler}. * @return {MatrixClient} A new matrix client. */ module.exports.createClient = function(opts) { @@ -53,6 +56,7 @@ module.exports.createClient = function(opts) { }; } opts.request = request; + opts.store = new module.exports.MatrixInMemoryStore(); return new module.exports.MatrixClient(opts); };