@moneypot/caas
v10.1.2
Published
(_caas_ = "controller as a server", a silly but hopefully memorable name.)
Downloads
929
Readme
@moneypot/caas
(caas = "controller as a server", a silly but hopefully memorable name.)
This library implements a controller server that manages users and balances across any number of Moneypot casinos.
You can use it to quickly create your own controller.
See https://github.com/moneypot/dice-controller/ for an example of how you can implement a dice game server by wrapping and extending @moneypot/caas
.
Install
$ npm install @moneypot/caas
Usage
import { defaultPlugins, ServerOptions, startAndListen } from "@moneypot/caas";
import path from "path";
const options: ServerOptions = {
// Name of the postgres schemas you're exposing to the GraphQL API (if any)
extraPgSchemas: ["app"],
plugins: [
...defaultPlugins,
// And any custom plugins you've written
],
// Where to save the GraphQL schema (derived from your database + plugins)
exportSchemaSDLPath: path.join(import.meta.dirname, "../schema.graphql"),
// Where your database migration files are located (if any)
userDatabaseMigrationsPath: path.join(import.meta.dirname, "../pg-versions"),
};
startAndListen(options, ({ port }) => {
console.log("Server is running on port", port);
});
Plugins
You can extend the GraphQL API with plugins.
@moneypot/caas
's comes with an array of defaultPlugins
that implements a few core GraphQL queries and mutations
that you probably want like caasAuthenticate()
. You'll notice that they're prefixed with caas
in the GraphQL API.
TODO: How to write a plugin
Migrations
To make it easier to keep your database in sync, @moneypot/caas
will autorun incremental migrations (.sql files) using
a simple library that expects consecutively numbered files in the given folder.
Example:
pg-versions
├── 001-schema.sql
├── 002-hashchain.sql
└── 003-dice.sql
TODO: How migrations work
Development
To work on the lib, there's a mini project in the ./demo
that uses @moneypot/caas
as a lib.
createdb caas_demo
Ensure this role exists:
CREATE ROLE app_postgraphile LOGIN PASSWORD 'pass';
Create .env
:
DATABASE_URL="postgres://app_postgraphile:pass@localhost/caas_demo"
SUPERUSER_DATABASE_URL="postgres://app_superuser:pass@localhost/caas_demo"
GRAPHILE_ENV=development
NODE_ENV=development
Run the demo:
cd demo
npm install
npm run dev
Change Log
v10.1.1
- Changes: You can now boot a caas server in non-development mode with the hashchain server unconfigured.
v10.1.0
- Bugfix: Adds automigration 004 which updates balance change alert trigger to also run on balance inserts.
- Fixes issue where balance change alert subscription didn't fire on user's initial deposit.
- Adds:
getCasinoCurrencyByKey(pgClient, currencyKey)
helper to@moneypot/caas/db
. - Adds:
@moenypot/caas/db/util
namespace formaybeOneRow
andexactlyOneRow
helpers.