Platformatic v0.14.0 - buildServer API, fastify-user, and more

Platformatic v0.14.0 - buildServer API, fastify-user, and more

Hi Folks, Happy new year! Platformatic v0.14.0 is out with many bug fixes and improvements. Thanks to all of you that checked us out, testing Platformatic Cloud and are reporting bugs! Hopefully, we fixed some of them in this release!

You can find the full changelog at: github.com/platformatic/platformatic/releas..

Thanks to everybody that contributed!

Start Platformatic Service & DB programmatically

In many cases, it's helpful to start Platformatic DB using an API instead of command line, e.g. in tests, we want to start and stop our server.

The buildServer function allows that:

import { buildServer } from '@platformatic/db'
const db = await buildServer('path/to/platformatic.db.json')

// // Or use a custom configuration
//
// const db = await buildServer({
//   server: {
//     hostname: '127.0.0.1',
//     port: 0
//   },
//   core: {
//     // Use an in-memory database for testing purposes
//     connectionString: 'sqlite://./db.sqlite'
//   },
//   dashboard: true,
//   authorization: {
//     adminSecret: 'secret'
//   }
// })

await db.listen()
const res = await fetch(server.url)
console.log(await res.json())
// do something
await db.stop()

This was implemented in github.com/platformatic/platformatic/pull/630

Allow custom schema to be configured

It's now possible to add a custom GraphQL schema during the startup:

  {
    "core": {
      ...
      "graphql": {
        "schemaPath": "path/to/schema.graphql"
        }
      }
    }
  }

This was implemented in github.com/platformatic/platformatic/pull/632.

fastify-user module

In this release, we extracted the fastify-user module from @platformatic/db-authorization. fastify-user provides a Fastify plugin to populate the request.user property from a JWT token (custom claims) or a webhook (response body).

To use it, invoke the extractUser method on the request object, or add this hook:

const app = fastify()
app.register(fastifyUser, {
  jwt: {
    secret: <my-shared-secret>
  }
  // // or
  //   webhook: {
  //     url: `http://my-webhook-url/authorize`
  //  }
})

app.addHook('preHandler', async (request, reply) => {
  await request.extractUser()
})

This module was developed by @marcopiraccini and extracted in github.com/platformatic/platformatic/pull/612.

Command Line Interface

We did plenty of improvements to our command line interface, check them out: