npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2024 – Pkg Stats / Ryan Hefner

@moneypot/caas

v12.0.1

Published

(_caas_ = "controller as a server", a silly but hopefully memorable name.)

Downloads

716

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

v12.0.0

  • Changes: Withdraw mutation amount from Float to Int to reflect changes in moneypot-server.
    • Non-integer amounts are are now graphql errors.
    • This generally means you should floor amounts when converting to base unit esp to avoid floating point error, Math.floor(amount * displayUnitScale). This will leave behind <1.0 base unit 'dust' in your system when users withdraw.

v11.2.0

  • Adds: Express types and CaasRequest for writing custom express routes.

    import { CaasRequest, Response, Express } from "@moneypot/caas/express";
    
    configureApp((app: Express) => {
      app.get("/test", (req: CaasRequest, res: Response) => {
        console.log("Logged in as...", req.identity);
        res.json({ uname: identity.uname });
      });
    });

v11.0.1

  • Adds: Pending transfer system.
    • Adds caas.transfer_status_kind enum
    • Adds caas.transfer_statuses table
    • caas.withdrawals now always has an mp_transfer_id but it starts in the pending state
    • process-transfers.ts now uses mp-server's new completeTransfer(mpTransferId) to make the idempotent transfer

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 for maybeOneRow and exactlyOneRow helpers.