9.0.0 • Published 9 months ago

@moneypot/caas v9.0.0

Weekly downloads
-
License
ISC
Repository
-
Last release
9 months ago

@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
8.1.0

9 months ago

9.0.0

9 months ago

8.0.0

9 months ago

6.1.0

10 months ago

6.1.1

10 months ago

7.3.0

10 months ago

7.1.0

10 months ago

7.6.2

9 months ago

7.6.1

9 months ago

7.6.0

9 months ago

7.6.3

9 months ago

7.0.0

10 months ago

7.4.0

10 months ago

7.2.1

10 months ago

7.2.0

10 months ago

7.0.2

10 months ago

7.0.1

10 months ago

7.5.3

9 months ago

7.5.2

9 months ago

7.5.1

9 months ago

7.5.0

9 months ago

7.5.6

9 months ago

7.5.5

9 months ago

7.5.4

9 months ago

5.0.2

10 months ago

5.0.1

10 months ago

5.0.0

10 months ago

6.0.1

10 months ago

6.0.0

10 months ago

4.2.7

10 months ago

4.2.6

10 months ago

4.2.3

10 months ago

4.2.2

10 months ago

4.2.5

10 months ago

4.2.4

10 months ago

4.2.1

10 months ago

4.1.10

10 months ago

4.1.11

10 months ago

4.1.8

10 months ago

4.1.9

10 months ago

4.1.7

10 months ago

4.1.4

10 months ago

4.1.3

10 months ago

4.1.6

10 months ago

4.1.5

10 months ago

4.1.2

10 months ago

4.1.0

10 months ago

4.0.1

10 months ago

4.0.0

10 months ago

4.1.1

10 months ago

1.2.0

10 months ago

1.1.1

10 months ago

1.1.0

11 months ago

1.2.6

10 months ago

1.2.5

10 months ago

3.0.0

10 months ago

1.2.4

10 months ago

1.2.3

10 months ago

1.2.2

10 months ago

1.3.0

10 months ago

1.2.1

10 months ago

2.2.1

10 months ago

2.2.0

10 months ago

2.1.0

10 months ago

2.0.0

10 months ago

1.0.0

11 months ago