asteroid
A javascript client (node) for a Meteor backend.2.x.x
is out, find out what changed in the CHANGELOG
Why
Meteor is an awesome framework for building real-time APIs. Its canonical front-end framework however is not very flexible. Adopting other front-ends comes with the cost of having to work around the limitations of meteor's build tool, which makes it very difficult, for instance, to use other tools like webpack, or to manage dependencies vianpm
.Asteroid is an isomorphic/universal javascript library which allows to connect to a Meteor backend from almost any JS environment.
With Asteroid you can:
- hook any existing application to a real-time meteor API
- use any front-end framework you want with a Meteor backend
- develop browser extensions backed by Meteor
- use Meteor as a backend for a react-native app
Advantages over the canonical Meteor front-end
- Small footprint
- Framework agnostic. Use the tools you already know and love to build your app
- Allows to use Meteor as a full-blown backend or just as a real-time platform
- Easily connect to multiple Meteor servers at the same time, perfect for
Install
npm install --save asteroid
Usage
import {createClass} from "asteroid";
const Asteroid = createClass();
// Connect to a Meteor backend
const asteroid = new Asteroid({
endpoint: "ws://localhost:3000/websocket"
});
// Use real-time collections
asteroid.subscribe("tasksPublication");
asteroid.ddp.on("added", ({collection, id, fields}) => {
console.log(`Element added to collection ${collection}`);
console.log(id);
console.log(fields);
});
// Login
asteroid.loginWithPassword({username, email, password});
// Call method and use promises
asteroid.call("newUser")
.then(result => {
console.log("Success");
console.log(result);
})
.catch(error => {
console.log("Error");
console.error(error);
});
Mixins
Mixins are used to extend Asteroid's functionalities. You add mixins by passing them to thecreateClass
function.A mixin is an object with a set of enumerable function properties. Those functions will all be mixed into
Asteroid.prototype
. The special function
init
won't end up the in prototype
. Instead it will be called on
instantiation with the arguments passed to the constructor.Included mixins
ddp
: establishes the ddp connectionmethods
: adds methods for invoking ddp remote methodssubscriptions
: adds methods for subscribing to ddp publicationslogin
: adds methods for logging inpassword-login
: adds methods for password logins / user creation
Third-party mixins
collections published by the server into an immutable map- asteroid-oauth-mixin: allows logging in via oauth
Development environment setup
After cloning the repository, installnpm
dependencies with npm install
.
Run npm test
to run unit tests, or npm run dev
to have mocha
re-run your
tests when source or test files change.Contribute
Contributions are as always very welcome. If you have written a mixin for asteroid, feel free to make a PR to add it to this README.API
module.createClass(mixins)
Create theAsteroid
class. Any passed-in mixins will be added to the default
mixins.Arguments
mixins
Array< object > optional: mixins you want to use
Returns
TheAsteroid
class.new Asteroid(options)
Creates a new Asteroid instance (which is also anEventEmitter
).On instantiation:
- the
ddp
mixin will automatically connect to the Meteor backend - the
login
mixin will try to resume a previous session
Arguments
options
object required:
endpoint
string required: the DDP endpoint to connect to, e.g.`ws://example.com/websocket`
SocketConstructor
function optional default: WebSocket
: theclass to be used to create the websocket connection to the server. In node,
use `faye-websocket-node`'s `Client`. In older browsers which do not support
`WebSocket`, use `sockjs-client`'s `SockJS`
autoConnect
boolean optional default: true
: whether toauto-connect to the server on instantiation. Otherwise the `connect` method
can be used to establish the connection
autoReconnect
boolean optional default: true
: wheter toauto-reconnect when the connection drops for whatever reason. This option
will be ignored - and the connection won't be re-established - if the
connection is terminated by calling the `disconnect` method
reconnectInterval
number optional default: 10000: the interval inms between reconnection attempts
Returns
An Asteroid instance.connect()
Provided by theddp
mixin.Establishes a connection to the ddp server. No-op if a connection is already established.
Arguments
None.Returns
Nothing.disconnect()
Provided by theddp
mixin.Terminates the connection to the ddp server. No-op if there's no active connection.
Arguments
None.Returns
Nothing.call(method, param1, param2, ...)
Provided by themethods
mixin.Calls a server-side method with the specified arguments.
Arguments
method
string required: the name of the method to callparam1, param2, ...
...any optional: parameters passed to the server
Returns
A promise to the method return value (the promise is rejected if the method throws).apply(method, params)
Provided by themethods
mixin.Same as
call
, but using as array of parameters instead of a list.Arguments
method
string required: the name of the method to callparams
Array< any > optional: an array of parameters passed to the
Returns
Same ascall
, see above.subscribe(name, param1, param2, ...)
Provided by thesubscriptions
mixin.Subscribes to the specified publication. If an identical subscription (name and parameters) has already been made, Asteroid will not re-subscribe and return that subscription instead (subscriptions are idempotent, so it does not make sense to re-subscribe).
Arguments
name
string required: the name of the publication
param1, param2, ...
...any optional: a list of parameters that are
Returns
A subscription object. Subscription objects have anid
, which you can
later use to unsubscribe, and are EventEmitter
-s. You can listen for the
following events:ready
: emitted without parameters when the subscription is marked asready
error
: emitted with the error as first and only parameter when the server
- TODO
stopped
: emitted when the subscription stops
unsubscribe(id)
Provided by thesubscriptions
mixin.Unsubscribes from a publication.
Arguments
id
string required: theid
of the subscription
Returns
Nothing.createUser(options)
Provided by thepassword-login
mixin.Creates a user and logs him in. Does not hash the password before sending it to the server. This should not be a problem, since you'll probably be using SSL anyway.
Arguments
options
object required:
username
string optional
email
string optional
password
string requiredNote: you must specify either
options.username
or options.email
.Returns
A promise which resolves to theuserId
of the created user when the creation
succeeds, or rejects when it fails.loginWithPassword(options)
Provided by thepassword-login
mixin.Logs the user in using username/email and password. Does not hash the password before sending it to the server. This should not be a problem, since you'll probably be using SSL anyway.
Arguments
options
object required:
username
string optional
email
string optional
password
string requiredNote: you must specify either
options.username
or options.email
.Returns
A promise which resolves to theuserId
of the logged in user when the login
succeeds, or rejects when it fails.login(params)
Provided by thelogin
mixin.Log in the user.
Arguments
params
object required: params to pass for login with a custom
Returns
A promise which resolves to theuserId
of the logged in user when the login
succeeds, or rejects when it fails.logout()
Provided by thelogin
mixin.Logs out the user.
Arguments
NoneReturns
A promise which resolves to null when the logout succeeds, or rejects when it fails.Public Asteroid
events
connected
(emitted by theddp
mixin)disconnected
(emitted by theddp
mixin)loggedIn
(emitted by thelogin
mixin)loggedOut
(emitted by thelogin
mixin)