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

v7.4.0

Published

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

Downloads

3,163

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