diff --git a/versioned_docs/version-0.45.0/getting-started/architecture.md b/versioned_docs/version-0.45.0/getting-started/architecture.md deleted file mode 100644 index 6974c22547..0000000000 --- a/versioned_docs/version-0.45.0/getting-started/architecture.md +++ /dev/null @@ -1,28 +0,0 @@ -# Architecture - -Platformatic is a collection of Open Source tools designed to eliminate friction -in backend development. The first of those tools is Platformatic DB, which is developed -as `@platformatic/db`. - -## Platformatic DB - -Platformatic DB can expose a SQL database by dynamically mapping it to REST/OpenAPI -and GraphQL endpoints. It supports a limited subset of the SQL query language, but -also allows developers to add their own custom routes and resolvers. - -![Platformatic DB Architecture](./platformatic-architecture.png) - -Platformatic DB is composed of a few key libraries: - -1. `@platformatic/sql-mapper` - follows the [Data Mapper pattern](https://en.wikipedia.org/wiki/Data_mapper_pattern) to build an API on top of a SQL database. - Internally it uses the [`@database` project](https://www.atdatabases.org/). -1. `@platformatic/sql-openapi` - uses `sql-mapper` to create a series of REST routes and matching OpenAPI definitions. - Internally it uses [`@fastify/swagger`](https://github.com/fastify/fastify-swagger). -1. `@platformatic/sql-graphql` - uses `sql-mapper` to create a GraphQL endpoint and schema. `sql-graphql` also support Federation. - Internally it uses [`mercurius`](https://github.com/mercuriusjs/mercurius). - -Platformatic DB allows you to load a [Fastify plugin](https://www.fastify.io/docs/latest/Reference/Plugins/) during server startup that contains your own application-specific code. -The plugin can add more routes or resolvers — these will automatically be shown in the OpenAPI and GraphQL schemas. - -SQL database migrations are also supported. They're implemented internally with the [`postgrator`](https://www.npmjs.com/package/postgrator) library. - diff --git a/versioned_docs/version-0.45.0/reference/composer/configuration.md b/versioned_docs/version-0.45.0/reference/composer/configuration.md deleted file mode 100644 index ae3ab073ed..0000000000 --- a/versioned_docs/version-0.45.0/reference/composer/configuration.md +++ /dev/null @@ -1,362 +0,0 @@ -# Configuration - -Platformatic Composer configured with a configuration file. It supports the use -of environment variables as setting values with [configuration placeholders](#configuration-placeholders). - -## Configuration file - -If the Platformatic CLI finds a file in the current working directory matching -one of these filenames, it will automatically load it: - -- `platformatic.composer.json` -- `platformatic.composer.json5` -- `platformatic.composer.yml` or `platformatic.composer.yaml` -- `platformatic.composer.tml` or `platformatic.composer.toml` - -Alternatively, a [`--config` option](/reference/cli.md#composer) with a configuration -filepath can be passed to most `platformatic composer` CLI commands. - -The configuration examples in this reference use JSON. - -### Supported formats - -| Format | Extensions | -| :-- | :-- | -| JSON | `.json` | -| JSON5 | `.json5` | -| YAML | `.yml`, `.yaml` | -| TOML | `.tml` | - -Comments are supported by the JSON5, YAML and TOML file formats. - -## Settings - -Configuration settings are organised into the following groups: - -- [`server`](#server) **(required)** -- [`composer`](#composer) -- [`metrics`](#metrics) -- [`plugins`](#plugins) -- [`telemetry`](#telemetry) - -Sensitive configuration settings containing sensitive data should be set using [configuration placeholders](#configuration-placeholders). - -### `server` - -A **required** object with the following settings: - -- **`hostname`** (**required**, `string`) — Hostname where Platformatic Composer server will listen for connections. -- **`port`** (**required**, `number`) — Port where Platformatic Composer server will listen for connections. -- **`healthCheck`** (`boolean` or `object`) — Enables the health check endpoint. - - Powered by [`@fastify/under-pressure`](https://github.com/fastify/under-pressure). - - The value can be an object, used to specify the interval between checks in milliseconds (default: `5000`) - - _Example_ - - ```json - { - "server": { - ... - "healthCheck": { - "interval": 2000 - } - } - } - ``` -- **`cors`** (`object`) — Configuration for Cross-Origin Resource Sharing (CORS) headers. - - All options will be passed to the [`@fastify/cors`](https://github.com/fastify/fastify-cors) plugin. In order to specify a `RegExp` object, you can pass `{ regexp: 'yourregexp' }`, - it will be automatically converted. -- **`logger`** (`object`) -- the [logger configuration](https://www.fastify.io/docs/latest/Reference/Server/#logger). -- **`pluginTimeout`** (`integer`) -- the number of milliseconds to wait for a Fastify plugin to load, see the [fastify docs](https://www.fastify.io/docs/latest/Reference/Server/#plugintimeout) for more details. -- **`https`** (`object`) - Configuration for HTTPS supporting the following options. - - `key` (**required**, `string`, `object`, or `array`) - If `key` is a string, it specifies the private key to be used. If `key` is an object, it must have a `path` property specifying the private key file. Multiple keys are supported by passing an array of keys. - - `cert` (**required**, `string`, `object`, or `array`) - If `cert` is a string, it specifies the certificate to be used. If `cert` is an object, it must have a `path` property specifying the certificate file. Multiple certificates are supported by passing an array of keys. - -### `metrics` - -Configuration for a [Prometheus](https://prometheus.io/) server that will export monitoring metrics -for the current server instance. It uses [`fastify-metrics`](https://github.com/SkeLLLa/fastify-metrics) -under the hood. - -This setting can be a `boolean` or an `object`. If set to `true` the Prometheus server will listen on `http://0.0.0.0:9090`. - -Supported object properties: - -- **`hostname`** (`string`) — The hostname where Prometheus server will listen for connections. -- **`port`** (`number`) — The port where Prometheus server will listen for connections. -- **`auth`** (`object`) — Basic Auth configuration. **`username`** and **`password`** are required here - (use [environment variables](#environment-variables)). - -### `plugins` - -An optional object that defines the plugins loaded by Platformatic Composer. -- **`paths`** (**required**, `array`): an array of paths (`string`) - or an array of objects composed as follows, - - `path` (`string`): Relative path to plugin's entry point. - - `options` (`object`): Optional plugin options. - - `encapsulate` (`boolean`): if the path is a folder, it instruct Platformatic to not encapsulate those plugins. - - `maxDepth` (`integer`): if the path is a folder, it limits the depth to load the content from. -- **`typescript`** (`boolean`): enable typescript compilation. A `tsconfig.json` file is required in the same folder. - - _Example_ - - ```json - { - "plugins": { - "paths": [{ - "path": "./my-plugin.js", - "options": { - "foo": "bar" - } - }] - } - } - ``` - -### `watch` - -Disable watching for file changes if set to `false`. It can also be customized with the following options: - -- **`ignore`** (`string[]`, default: `null`): List of glob patterns to ignore when watching for changes. If `null` or not specified, ignore rule is not applied. Ignore option doesn't work for typescript files. -- **`allow`** (`string[]`, default: `['*.js', '**/*.js']`): List of glob patterns to allow when watching for changes. If `null` or not specified, allow rule is not applied. Allow option doesn't work for typescript files. - - _Example_ - - ```json - { - "watch": { - "ignore": ["*.mjs", "**/*.mjs"], - "allow": ["my-plugin.js", "plugins/*.js"] - } - } - ``` - -### `composer` - -Configure `@platformatic/composer` specific settings such as `services` or `refreshTimeout`: - -- **`services`** (`array`, default: `[]`) — is an array of objects that defines -the services managed by the composer. Each service object supports the following settings: - - - **`id`** (**required**, `string`) - A unique identifier for the service. - - **`origin`** (`string`) - A service origin. Skip this option if the service is executing inside of Platformatic Runtime. In this case, service id will be used instead of origin. - - **`openapi`** (**required**, `object`) - The configuration file used to compose OpenAPI specification. See the [openapi](#openapi) for details. - - **`proxy`** (`object` or `false`) - Service proxy configuration. If `false`, the service proxy is disabled. - - `prefix` (**required**, `string`) - Service proxy prefix. All service routes will be prefixed with this value. - - **`refreshTimeout`** (`number`) - The number of milliseconds to wait for check for changes in the service OpenAPI specification. If not specified, the default value is `1000`. - -#### `openapi` - -- **`url`** (`string`) - A path of the route that exposes the OpenAPI specification. If a service is a Platformatic Service or Platformatic DB, use `/documentation/json` as a value. Use this or `file` option to specify the OpenAPI specification. -- **`file`** (`string`) - A path to the OpenAPI specification file. Use this or `url` option to specify the OpenAPI specification. -- **`prefix`** (`string`) - A prefix for the OpenAPI specification. All service routes will be prefixed with this value. -- **`config`** (`string`) - A path to the OpenAPI configuration file. This file is used to customize the OpenAPI specification. See the [openapi-configuration](#openapi-configuration) for details. - -##### `openapi-configuration` - -The OpenAPI configuration file is a JSON file that is used to customize the OpenAPI specification. It supports the following options: - -- **`ignore`** (`boolean`) - If `true`, the route will be ignored by the composer. -If you want to ignore a specific method, use the `ignore` option in the nested method object. - - _Example_ - - ```json - { - "paths": { - "/users": { - "ignore": true - }, - "/users/{id}": { - "get": { "ignore": true }, - "put": { "ignore": true } - } - } - } - ``` - -- **alias** (`string`) - Use it create an alias for the route path. Original route path will be ignored. - - _Example_ - - ```json - { - "paths": { - "/users": { - "alias": "/customers" - } - } - } - ``` - -- **`rename`** (`string`) - Use it to rename composed route response fields. -Use json schema format to describe the response structure. For now it works only for `200` response. - - _Example_ - - ```json - { - "paths": { - "/users": { - "responses": { - "200": { - "type": "array", - "items": { - "type": "object", - "properties": { - "id": { "rename": "user_id" }, - "name": { "rename": "first_name" } - } - } - } - } - } - } - } - ``` - -_Examples_ - - Composition of two remote services: - - ```json - { - "composer": { - "services": [ - { - "id": "auth-service", - "origin": "https://auth-service.com", - "openapi": { - "url": "/documentation/json", - "prefix": "auth" - } - }, - { - "id": "payment-service", - "origin": "https://payment-service.com", - "openapi": { - "file": "./schemas/payment-service.json" - } - } - ], - "refreshTimeout": 1000 - } - } - ``` - - Composition of two local services inside of Platformatic Runtime: - - ```json - { - "composer": { - "services": [ - { - "id": "auth-service", - "openapi": { - "url": "/documentation/json", - "prefix": "auth" - } - }, - { - "id": "payment-service", - "openapi": { - "file": "./schemas/payment-service.json" - } - } - ], - "refreshTimeout": 1000 - } - } - ``` -### `telemetry` -[Open Telemetry](https://opentelemetry.io/) is optionally supported with these settings: - -- **`serviceName`** (**required**, `string`) — Name of the service as will be reported in open telemetry. -- **`version`** (`string`) — Optional version (free form) -- **`skip`** (`array`). Optional list of operations to skip when exporting telemetry defined `object` with properties: - - `method`: GET, POST, PUT, DELETE, PATCH, HEAD, OPTIONS, TRACE - - `path`. e.g.: `/documentation/json` -- **`exporter`** (`object` or `array`) — Exporter configuration. If not defined, the exporter defaults to `console`. If an array of objects is configured, every object must be a valid exporter object. The exporter object has the following properties: - - **`type`** (`string`) — Exporter type. Supported values are `console`, `otlp`, `zipkin` and `memory` (default: `console`). `memory` is only supported for testing purposes. - - **`options`** (`object`) — These options are supported: - - **`url`** (`string`) — The URL to send the telemetry to. Required for `otlp` exporter. This has no effect on `console` and `memory` exporters. - - **`headers`** (`object`) — Optional headers to send with the telemetry. This has no effect on `console` and `memory` exporters. - -Note that OTLP traces can be consumed by different solutions, like [Jaeger](https://www.jaegertracing.io/). [Here](https://opentelemetry.io/ecosystem/vendors/) the full list. - - _Example_ - - ```json - { - "telemetry": { - "serviceName": "test-service", - "exporter": { - "type": "otlp", - "options": { - "url": "http://localhost:4318/v1/traces" - } - } - } - } - ``` - -## Environment variable placeholders - -The value for any configuration setting can be replaced with an environment variable -by adding a placeholder in the configuration file, for example `{PLT_SERVER_LOGGER_LEVEL}`. - -All placeholders in a configuration must be available as an environment variable -and must meet the [allowed placeholder name](#allowed-placeholder-names) rules. - -### Example - -```json title="platformatic.service.json" -{ - "server": { - "port": "{PORT}" - } -} -``` - -Platformatic will replace the placeholders in this example with the environment -variables of the same name. - -### Setting environment variables - -If a `.env` file exists it will automatically be loaded by Platformatic using -[`dotenv`](https://github.com/motdotla/dotenv). For example: - -```plaintext title=".env" -PLT_SERVER_LOGGER_LEVEL=info -PORT=8080 -``` - -The `.env` file must be located in the same folder as the Platformatic configuration -file or in the current working directory. - -Environment variables can also be set directly on the commmand line, for example: - -```bash -PLT_SERVER_LOGGER_LEVEL=debug npx platformatic composer -``` - -### Allowed placeholder names - -Only placeholder names prefixed with `PLT_`, or that are in this allow list, will be -dynamically replaced in the configuration file: - -- `PORT` - -This restriction is to avoid accidentally exposing system environment variables. -An error will be raised by Platformatic if it finds a configuration placeholder -that isn't allowed. - -The default allow list can be extended by passing a `--allow-env` CLI option with a -comma separated list of strings, for example: - -```bash -npx platformatic composer --allow-env=HOST,SERVER_LOGGER_LEVEL -``` - -If `--allow-env` is passed as an option to the CLI, it will be merged with the -default allow list. diff --git a/versioned_docs/version-0.45.0/reference/db/configuration.md b/versioned_docs/version-0.45.0/reference/db/configuration.md deleted file mode 100644 index 477e3bd015..0000000000 --- a/versioned_docs/version-0.45.0/reference/db/configuration.md +++ /dev/null @@ -1,625 +0,0 @@ -# Configuration - -Platformatic DB is configured with a configuration file. It supports the use -of environment variables as setting values with [configuration placeholders](#configuration-placeholders). - -## Configuration file - -If the Platformatic CLI finds a file in the current working directory matching -one of these filenames, it will automatically load it: - -- `platformatic.db.json` -- `platformatic.db.json5` -- `platformatic.db.yml` or `platformatic.db.yaml` -- `platformatic.db.tml` or `platformatic.db.toml` - -Alternatively, a [`--config` option](/reference/cli.md#db) with a configuration -filepath can be passed to most `platformatic db` CLI commands. - -The configuration examples in this reference use JSON. - -### Supported formats - -| Format | Extensions | -| :-- | :-- | -| JSON | `.json` | -| JSON5 | `.json5` | -| YAML | `.yml`, `.yaml` | -| TOML | `.tml` | - -Comments are supported by the JSON5, YAML and TOML file formats. - -## Settings - -Configuration settings are organised into the following groups: - -- [`db`](#db) **(required)** -- [`metrics`](#metrics) -- [`migrations`](#migrations) -- [`plugins`](#plugins) -- [`server`](#server) **(required)** -- [`authorization`](#authorization) -- [`telemetry`](#telemetry) - -Sensitive configuration settings, such as a database connection URL that contains -a password, should be set using [configuration placeholders](#configuration-placeholders). - -### `db` - -A **required** object with the following settings: - -- **`connectionString`** (**required**, `string`) — Database connection URL. - - Example: `postgres://user:password@my-database:5432/db-name` - -- ** `schema`** (array of `string`) - Currently supported only for postgres, schemas used tolook for entities. If not provided, the default `public` schema is used. - - _Examples_ - -```json - "db": { - "connectionString": "(...)", - "schema": [ - "schema1", "schema2" - ], - ... - - }, - -``` - - - Platformatic DB supports MySQL, MariaDB, PostgreSQL and SQLite. -- **`graphql`** (`boolean` or `object`, default: `true`) — Controls the GraphQL API interface, with optional GraphiQL UI. - - _Examples_ - - Enables GraphQL support - - ```json - { - "db": { - ... - "graphql": true - } - } - ``` - - Enables GraphQL support with GraphiQL - - ```json - { - "db": { - ... - "graphql": { - "graphiql": true - } - } - } - ``` - - It's possible to selectively ignore entites: - - ```json - { - "db": { - ... - "graphql": { - "ignore": { - "categories": true - } - } - } - } - ``` - - It's possible to selectively ignore fields: - - ```json - { - "db": { - ... - "graphql": { - "ignore": { - "categories": { - "name": true - } - } - } - } - } - ``` - - It's possible to add a custom GraphQL schema during the startup: - - ```json - { - "db": { - ... - "graphql": { - "schemaPath": "path/to/schema.graphql" - } - } - } - } - ``` - -- **`openapi`** (`boolean` or `object`, default: `true`) — Enables OpenAPI REST support. - - If value is an object, all [OpenAPI v3](https://swagger.io/specification/) allowed properties can be passed. Also a `prefix` property can be passed to set the OpenAPI prefix. - - Platformatic DB uses [`@fastify/swagger`](https://github.com/fastify/fastify-swagger) under the hood to manage this configuration. - - _Examples_ - - Enables OpenAPI - - ```json - { - "db": { - ... - "openapi": true - } - } - ``` - - Enables OpenAPI with prefix - - ```json - { - "db": { - ... - "openapi": { - "prefix": "/api" - } - } - } - ``` - - Enables OpenAPI with options - - ```json - { - "db": { - ... - "openapi": { - "info": { - "title": "Platformatic DB", - "description": "Exposing a SQL database as REST" - } - } - } - } - ``` - - You can for example add the `security` section, so that Swagger will allow you to add the authentication header to your requests. - In the following code snippet, we're adding a Bearer token in the form of a [JWT](/reference/db/authorization/strategies.md#json-web-token-jwt): - ```json - { - "db": { - ... - "openapi": { - ... - "security": [{ "bearerAuth": [] }], - "components": { - "securitySchemes": { - "bearerAuth": { - "type": "http", - "scheme": "bearer", - "bearerFormat": "JWT" - } - } - } - } - } - } - ``` - - It's possible to selectively ignore entites: - - ```json - { - "db": { - ... - "openapi": { - "ignore": { - "categories": true - } - } - } - } - ``` - - It's possible to selectively ignore fields: - - ```json - { - "db": { - ... - "openapi": { - "ignore": { - "categories": { - "name": true - } - } - } - } - } - ``` - -- **`ignore`** (`object`) — Key/value object that defines which database tables should not be mapped as API entities. - - _Examples_ - - ```json - { - "db": { - ... - "ignore": { - "versions": true // "versions" table will be not mapped with GraphQL/REST APIs - } - } - } - ``` - -- **`events`** (`boolean` or `object`, default: `true`) — Controls the support for events published by the SQL mapping layer. - If enabled, this option add support for GraphQL Subscription over WebSocket. By default it uses an in-process message broker. - It's possible to configure it to use Redis instead. - - _Examples_ - - ```json - { - "db": { - ... - "events": { - "connectionString": "redis://:password@redishost.com:6380/" - } - } - } - ``` - -- **`schemalock`** (`boolean` or `object`, default: `false`) — Controls the caching of the database schema on disk. - If set to `true` the database schema metadata is stored inside a `schema.lock` file. - It's also possible to configure the location of that file by specifying a path, like so: - - _Examples_ - - ```json - { - "db": { - ... - "schemalock": { - "path": "./dbmetadata" - } - } - } - ``` - - Starting Platformatic DB or running a migration will automatically create the schemalock file. - - -### `metrics` - -Configuration for a [Prometheus](https://prometheus.io/) server that will export monitoring metrics -for the current server instance. It uses [`fastify-metrics`](https://github.com/SkeLLLa/fastify-metrics) -under the hood. - -This setting can be a `boolean` or an `object`. If set to `true` the Prometheus server will listen on `http://0.0.0.0:9090`. - -Supported object properties: - -- **`hostname`** (`string`) — The hostname where Prometheus server will listen for connections. -- **`port`** (`number`) — The port where Prometheus server will listen for connections. -- **`auth`** (`object`) — Basic Auth configuration. **`username`** and **`password`** are required here - (use [environment variables](#environment-variables)). - -### `migrations` - -Configures [Postgrator](https://github.com/rickbergfalk/postgrator) to run migrations against the database. - -An optional object with the following settings: - -- **`dir`** (**required**, `string`): Relative path to the migrations directory. -- **`autoApply`** (`boolean`, default: `false`): Automatically apply migrations when Platformatic DB server starts. - -### `plugins` - -An optional object that defines the plugins loaded by Platformatic DB. -- **`paths`** (**required**, `array`): an array of paths (`string`) - or an array of objects composed as follows, - - `path` (`string`): Relative path to plugin's entry point. - - `options` (`object`): Optional plugin options. - - `encapsulate` (`boolean`): if the path is a folder, it instruct Platformatic to not - [encapsulate](https://www.fastify.io/docs/latest/Reference/Encapsulation/) those plugins, - allowing decorators and hooks to be shared across all routes. - - `maxDepth` (`integer`): if the path is a folder, it limits the depth to load the content from. -- **`typescript`** (`boolean` or `object`): enable TypeScript compilation. A `tsconfig.json` file is required in the same folder. - -```json -{ - "plugins": { - "paths": [{ - "path": "./my-plugin.js", - "options": { - "foo": "bar" - } - }] - } -} -``` - -#### `typescript` compilation options - -The `typescript` option can also be an object to customize the compilation. Here are the supported options: - -* `enabled` (`boolean`): enables compilation -* `tsConfig` (`string`): path to the `tsconfig.json` file relative to the configuration -* `outDir` (`string`): the output directory of `tsconfig.json`, in case `tsconfig.json` is not available -and and `enabled` is set to `false` (procution build) -* `flags` (array of `string`): flags to be passed to `tsc`. Overrides `tsConfig`. - - -Example: - -```json -{ - "plugins": { - "paths": [{ - "path": "./my-plugin.js", - "options": { - "foo": "bar" - } - }], - "typescript": { - "enabled": false, - "tsConfig": "./path/to/tsconfig.json", - "outDir": "dist" - } - } -} -``` - - -### `watch` - -Disable watching for file changes if set to `false`. It can also be customized with the following options: - -- **`ignore`** (`string[]`, default: `null`): List of glob patterns to ignore when watching for changes. If `null` or not specified, ignore rule is not applied. Ignore option doesn't work for typescript files. -- **`allow`** (`string[]`, default: `['*.js', '**/*.js']`): List of glob patterns to allow when watching for changes. If `null` or not specified, allow rule is not applied. Allow option doesn't work for typescript files. - - _Example_ - - ```json - { - "watch": { - "ignore": ["*.mjs", "**/*.mjs"], - "allow": ["my-plugin.js", "plugins/*.js"] - } - } - ``` - -### `server` - -A **required** object with the following settings: - -- **`hostname`** (**required**, `string`) — Hostname where Platformatic DB server will listen for connections. -- **`port`** (**required**, `number`) — Port where Platformatic DB server will listen for connections. -- **`healthCheck`** (`boolean` or `object`) — Enables the health check endpoint. - - Powered by [`@fastify/under-pressure`](https://github.com/fastify/under-pressure). - - The value can be an object, used to specify the interval between checks in milliseconds (default: `5000`) - - _Example_ - - ```json - { - "server": { - ... - "healthCheck": { - "interval": 2000 - } - } - } - ``` -- **`cors`** (`object`) — Configuration for Cross-Origin Resource Sharing (CORS) headers. - - All options will be passed to the [`@fastify/cors`](https://github.com/fastify/fastify-cors) plugin. In order to specify a `RegExp` object, you can pass `{ regexp: 'yourregexp' }`, - it will be automatically converted -- **`https`** (`object`) - Configuration for HTTPS supporting the following options. - - `key` (**required**, `string`, `object`, or `array`) - If `key` is a string, it specifies the private key to be used. If `key` is an object, it must have a `path` property specifying the private key file. Multiple keys are supported by passing an array of keys. - - `cert` (**required**, `string`, `object`, or `array`) - If `cert` is a string, it specifies the certificate to be used. If `cert` is an object, it must have a `path` property specifying the certificate file. Multiple certificates are supported by passing an array of keys. - -- **`logger`** (`object`) -- the [logger configuration](https://www.fastify.io/docs/latest/Reference/Server/#logger). -- **`pluginTimeout`** (`integer`) -- the number of milliseconds to wait for a Fastify plugin to load -- **`bodyLimit`** (`integer`) -- the maximum request body size in bytes -- **`maxParamLength`** (`integer`) -- the maximum length of a request parameter -- **`caseSensitive`** (`boolean`) -- if `true`, the router will be case sensitive -- **`ignoreTrailingSlash`** (`boolean`) -- if `true`, the router will ignore the trailing slash -- **`ignoreTrailingSlash`** (`boolean`) -- if `true`, the router will ignore the trailing slash -- **`connectionTimeout`** (`integer`) -- the milliseconds to wait for a new HTTP request -- **`keepAliveTimeout`** (`integer`) -- the milliseconds to wait for a keep-alive HTTP request -- **`maxRequestsPerSocket`** (`integer`) -- the maximum number of requests per socket -- **`forceCloseConnections`** (`boolean` or `"idle"`) -- if `true`, the server will close all connections when it is closed -- **`requestTimeout`** (`integer`) -- the milliseconds to wait for a request to be completed -- **`disableRequestLogging`** (`boolean`) -- if `true`, the request logger will be disabled -- **`exposeHeadRoutes`** (`boolean`) -- if `true`, the router will expose HEAD routes -- **`serializerOpts`** (`object`) -- the [serializer options](https://www.fastify.io/docs/latest/Reference/Server/#serializeropts) -- **`requestIdHeader`** (`string` or `false`) -- the name of the header that will contain the request id -- **`requestIdLogLabel`** (`string`) -- Defines the label used for the request identifier when logging the request. default: `'reqId'` -- **`jsonShorthand`** (`boolean`) -- default: `true` -- visit [fastify docs](https://www.fastify.io/docs/latest/Reference/Server/#jsonshorthand) for more details -- **`trustProxy`** (`boolean` or `integer` or `string` or `String[]`) -- default: `false` -- visit [fastify docs](https://www.fastify.io/docs/latest/Reference/Server/#trustproxy) for more details - -:::tip - -See the [fastify docs](https://www.fastify.io/docs/latest/Reference/Server) for more details. - -::: - -### `authorization` - -An optional object with the following settings: - -- `adminSecret` (`string`): A secret that should be sent in an -`x-platformatic-admin-secret` HTTP header when performing GraphQL/REST API -calls. Use an [environment variable placeholder](#environment-variable-placeholders) -to securely provide the value for this setting. -- `roleKey` (`string`, default: `X-PLATFORMATIC-ROLE`): The name of the key in user - metadata that is used to store the user's roles. See [Role configuration](/docs/reference/db/authorization/user-roles-metadata#role-configuration). -- `anonymousRole` (`string`, default: `anonymous`): The name of the anonymous role. See [Role configuration](/docs/reference/db/authorization/user-roles-metadata#role-configuration). -- `jwt` (`object`): Configuration for the [JWT authorization strategy](/docs/reference/db/authorization/strategies#json-web-token-jwt). - Any option accepted by [`@fastify/jwt`](https://github.com/fastify/fastify-jwt) - can be passed in this object. - - `secret` (required, `string` or `object`): The secret key that the JWT was signed with. - See the [`@fastify/jwt` documentation](https://github.com/fastify/fastify-jwt#secret-required) - for accepted string and object values. Use an [environment variable placeholder](#environment-variable-placeholders) - to securely provide the value for this setting. - - `jwks` (`boolean` or `object`): Configure authorization with JSON Web Key Sets (JWKS). See the [JWKS documentation](/docs/reference/db/authorization/strategies#json-web-key-sets-jwks). - - `namespace` (`string`): Configure a [JWT Custom Claim Namespace](/docs/reference/db/authorization/strategies#jwt-custom-claim-namespace) - to avoid name collisions. -- `webhook` (`object`): Configuration for the [Webhook authorization strategy](/docs/reference/db/authorization/strategies#webhook). - - `url` (required, `string`): Webhook URL that Platformatic DB will make a - POST request to. -- `rules` (`array`): Authorization rules that describe the CRUD actions that - users are allowed to perform against entities. See [Rules](/docs/reference/db/authorization/rules) - documentation. - -:::note -If an `authorization` object is present, but no rules are specified, no CRUD -operations are allowed unless `adminSecret` is passed. -::: - -#### Example - -```json title="platformatic.db.json" -{ - "authorization": { - "jwt": { - "secret": "{PLT_AUTHORIZATION_JWT_SECRET}" - }, - "rules": [ - ... - ] - } -} -``` - -### `telemetry` -[Open Telemetry](https://opentelemetry.io/) is optionally supported with these settings: - -- **`serviceName`** (**required**, `string`) — Name of the service as will be reported in open telemetry. -- **`version`** (`string`) — Optional version (free form) -- **`skip`** (`array`). Optional list of operations to skip when exporting telemetry defined `object` with properties: - - `method`: GET, POST, PUT, DELETE, PATCH, HEAD, OPTIONS, TRACE - - `path`. e.g.: `/documentation/json` -- **`exporter`** (`object` or `array`) — Exporter configuration. If not defined, the exporter defaults to `console`. If an array of objects is configured, every object must be a valid exporter object. The exporter object has the following properties: - - **`type`** (`string`) — Exporter type. Supported values are `console`, `otlp`, `zipkin` and `memory` (default: `console`). `memory` is only supported for testing purposes. - - **`options`** (`object`) — These options are supported: - - **`url`** (`string`) — The URL to send the telemetry to. Required for `otlp` exporter. This has no effect on `console` and `memory` exporters. - - **`headers`** (`object`) — Optional headers to send with the telemetry. This has no effect on `console` and `memory` exporters. - -Note that OTLP traces can be consumed by different solutions, like [Jaeger](https://www.jaegertracing.io/). [Here](https://opentelemetry.io/ecosystem/vendors/) the full list. - - _Example_ - - ```json - { - "telemetry": { - "serviceName": "test-service", - "exporter": { - "type": "otlp", - "options": { - "url": "http://localhost:4318/v1/traces" - } - } - } - } - ``` - -## Environment variable placeholders - -The value for any configuration setting can be replaced with an environment variable -by adding a placeholder in the configuration file, for example `{PLT_SERVER_LOGGER_LEVEL}`. - -All placeholders in a configuration must be available as an environment variable -and must meet the [allowed placeholder name](#allowed-placeholder-names) rules. - -### Example - -```json title="platformatic.db.json" -{ - "db": { - "connectionString": "{DATABASE_URL}" - }, - "server": { - "logger": { - "level": "{PLT_SERVER_LOGGER_LEVEL}" - }, - "port": "{PORT}" - } -} -``` - -Platformatic will replace the placeholders in this example with the environment -variables of the same name. - -### Setting environment variables - -If a `.env` file exists it will automatically be loaded by Platformatic using -[`dotenv`](https://github.com/motdotla/dotenv). For example: - -```plaintext title=".env" -PLT_SERVER_LOGGER_LEVEL=info -PORT=8080 -``` - -The `.env` file must be located in the same folder as the Platformatic configuration -file or in the current working directory. - -Environment variables can also be set directly on the commmand line, for example: - -```bash -PLT_SERVER_LOGGER_LEVEL=debug npx platformatic db -``` - -### Allowed placeholder names - -Only placeholder names prefixed with `PLT_`, or that are in this allow list, will be -dynamically replaced in the configuration file: - -- `PORT` -- `DATABASE_URL` - -This restriction is to avoid accidentally exposing system environment variables. -An error will be raised by Platformatic if it finds a configuration placeholder -that isn't allowed. - -The default allow list can be extended by passing a `--allow-env` CLI option with a -comma separated list of strings, for example: - -```bash -npx platformatic db start --allow-env=HOST,SERVER_LOGGER_LEVEL -# OR -npx platformatic start --allow-env=HOST,SERVER_LOGGER_LEVEL -``` - -If `--allow-env` is passed as an option to the CLI, it will be merged with the -default allow list. - -## Sample Configuration - -This is a bare minimum configuration for Platformatic DB. Uses a local `./db.sqlite` SQLite database, with OpenAPI and GraphQL support. - -Server will listen to `http://127.0.0.1:3042` - -```json -{ - "server": { - "hostname": "127.0.0.1", - "port": "3042" - }, - "db": { - "connectionString": "sqlite://./db.sqlite", - "graphiql": true, - "openapi": true, - "graphql": true - } -} -``` - - - diff --git a/versioned_docs/version-0.45.0/reference/errors.md b/versioned_docs/version-0.45.0/reference/errors.md deleted file mode 100644 index 02efcfffbc..0000000000 --- a/versioned_docs/version-0.45.0/reference/errors.md +++ /dev/null @@ -1,95 +0,0 @@ -# Platformatic Errors - -## @platformatic/service - -**No errors defined** - -## @platformatic/sql-mapper - -### PLT_SQL_MAPPER_CANNOT_FIND_ENTITY -**Message:** Cannot find entity %s - -### PLT_SQL_MAPPER_SPECIFY_PROTOCOLS -**Message:** You must specify either postgres, mysql or sqlite as protocols - -### PLT_SQL_MAPPER_CONNECTION_STRING_REQUIRED -**Message:** connectionString is required - -### PLT_SQL_MAPPER_TABLE_MUST_BE_A_STRING -**Message:** Table must be a string, got %s - -### PLT_SQL_MAPPER_UNKNOWN_FIELD -**Message:** Unknown field %s - -### PLT_SQL_MAPPER_INPUT_NOT_PROVIDED -**Message:** Input not provided. - -### PLT_SQL_MAPPER_UNSUPPORTED_WHERE_CLAUSE -**Message:** Unsupported where clause %s - -### PLT_SQL_MAPPER_UNSUPPORTED_OPERATOR -**Message:** Unsupported operator for Array field - -### PLT_SQL_MAPPER_UNSUPPORTED_OPERATOR_FOR_NON_ARRAY -**Message:** Unsupported operator for non Array field - -### PLT_SQL_MAPPER_PARAM_NOT_ALLOWED -**Message:** Param offset=%s not allowed. It must be not negative value. - -### PLT_SQL_MAPPER_INVALID_PRIMARY_KEY_TYPE -**Message:** Invalid Primary Key type: "%s". We support the following: %s - -### PLT_SQL_MAPPER_PARAM_LIMIT_NOT_ALLOWED -**Message:** Param limit=%s not allowed. Max accepted value %s. - -### PLT_SQL_MAPPER_PARAM_LIMIT_MUST_BE_NOT_NEGATIVE -**Message:** Param limit=%s not allowed. It must be a not negative value. - -### PLT_SQL_MAPPER_MISSING_VALUE_FOR_PRIMARY_KEY -**Message:** Missing value for primary key %s - -### PLT_SQL_MAPPER_SQLITE_ONLY_SUPPORTS_AUTO_INCREMENT_ON_ONE_COLUMN -**Message:** SQLite only supports autoIncrement on one column - -## @platformatic/sql-openapi - -### PLT_SQL_OPENAPI_UNABLE_CREATE_ROUTE_FOR_REVERSE_RELATIONSHIP -**Message:** Unable to create the route for the reverse relationship - -### PLT_SQL_OPENAPI_UNABLE_CREATE_ROUTE_FOR_PK_COL_RELATIONSHIP -**Message:** Unable to create the route for the PK col relationship - -## @platformatic/sql-graphql - -### PLT_SQL_GRAPHQL_UNABLE_GENERATE_GRAPHQL_ENUM_TYPE -**Message:** Unable to generate GraphQLEnumType - -### PLT_SQL_GRAPHQL_UNSUPPORTED_KIND -**Message:** Unsupported kind: %s - -### PLT_SQL_GRAPHQL_ERROR_PRINTING_GRAPHQL_SCHEMA -**Message:** Error printing the GraphQL schema - -## @platformatic/sql-events - -### PLT_SQL_EVENTS_OBJECT_IS_REQUIRED_UNDER_THE_DATA_PROPERTY -**Message:** The object that will be published is required under the data property - -### PLT_SQL_EVENTS_PRIMARY_KEY_IS_NECESSARY_INSIDE_DATA -**Message:** The primaryKey is necessary inside data - -### PLT_SQL_EVENTS_NO_SUCH_ACTION -**Message:** No such action %s - -## @platformatic/sql-json-schema-mapper - -**No errors defined** - -## @platformatic/telemetry - -**No errors defined** - -## @platformatic/utils - -### PLT_SQL_UTILS_PATH_OPTION_REQUIRED -**Message:** path option is required diff --git a/versioned_docs/version-0.45.0/contributing/contributing.md b/versioned_docs/version-0.47.2/contributing/contributing.md similarity index 100% rename from versioned_docs/version-0.45.0/contributing/contributing.md rename to versioned_docs/version-0.47.2/contributing/contributing.md diff --git a/versioned_docs/version-0.45.0/contributing/documentation-style-guide.md b/versioned_docs/version-0.47.2/contributing/documentation-style-guide.md similarity index 100% rename from versioned_docs/version-0.45.0/contributing/documentation-style-guide.md rename to versioned_docs/version-0.47.2/contributing/documentation-style-guide.md diff --git a/versioned_docs/version-0.47.2/getting-started/architecture.md b/versioned_docs/version-0.47.2/getting-started/architecture.md new file mode 100644 index 0000000000..7c9afec534 --- /dev/null +++ b/versioned_docs/version-0.47.2/getting-started/architecture.md @@ -0,0 +1,79 @@ +# Architecture + +Platformatic is a collection of Open Source tools designed to eliminate friction +in backend development. +The base services are: +- [Platformatic DB](#platformatic-db) +- [Platformatic Service](#platformatic-service) + + +These micro-services can be developed and deployed independently or aggregated into a single API using [Platformatic Composer](#platformatic-composer) or deployed as a single unit using [Platformatic Runtime](#platformatic-runtime). + +Finally, platformatic components can be reused with [stackables](#platformatic-stackbles) + +## Platformatic Service + +A Platformatic Service is an HTTP server based on [Fastify](https://www.fastify.io/) that allows developers to build robust APIs with Node.js. +With Platformatic Service you can: +- Add custom functionality in a [Fastify plugin](https://www.fastify.io/docs/latest/Plugins/) +- Write plugins in JavaScript or [TypeScript](https://www.typescriptlang.org/) +- Optionally user TypeScript to write your application code + +A Platformatic Service is the basic building block of a Platformatic application. + + +## Platformatic DB + +Platformatic DB can expose a SQL database by dynamically mapping it to REST/OpenAPI +and GraphQL endpoints. It supports a limited subset of the SQL query language, but +also allows developers to add their own custom routes and resolvers. + +![Platformatic DB Architecture](./platformatic-db-architecture.png) + +Platformatic DB is composed of a few key libraries: + +1. `@platformatic/sql-mapper` - follows the [Data Mapper pattern](https://en.wikipedia.org/wiki/Data_mapper_pattern) to build an API on top of a SQL database. + Internally it uses the [`@database` project](https://www.atdatabases.org/). +1. `@platformatic/sql-openapi` - uses `sql-mapper` to create a series of REST routes and matching OpenAPI definitions. + Internally it uses [`@fastify/swagger`](https://github.com/fastify/fastify-swagger). +1. `@platformatic/sql-graphql` - uses `sql-mapper` to create a GraphQL endpoint and schema. `sql-graphql` also support Federation. + Internally it uses [`mercurius`](https://github.com/mercuriusjs/mercurius). + +Platformatic DB allows you to load a [Fastify plugin](https://www.fastify.io/docs/latest/Reference/Plugins/) during server startup that contains your own application-specific code. +The plugin can add more routes or resolvers — these will automatically be shown in the OpenAPI and GraphQL schemas. + +SQL database migrations are also supported. They're implemented internally with the [`postgrator`](https://www.npmjs.com/package/postgrator) library. + + +## Platformatic Composer + +Platformatic Composer is an HTTP server that automatically aggregates multiple services APIs into a single API. + +![Platformatic Composer Architecture](./platformatic-composer-architecture.png) + +The composer acts as a proxy for the underlying services, and automatically generates an OpenAPI definition that combines all the services' routes, acting as reverse proxy for the composed services. + +## Platformatic Runtime + +Platformatic Runtime is an environment for running multiple Platformatic microservices as a single monolithic deployment unit. + +![Platformatic Runtime Architecture](./platformatic-runtime-architecture.png) + +In a Platformatic Runtime, each service is a separate process that communicates with Interservice communication using private message passing. +The Runtime exposes an "entrypoint" API for the whole runtime. Only the entrypoint binds to an operating system port and can be reached from outside of the runtime. + +## Platformatic Stackables + +Platformatic Stackables are reusable components that can be used to build Platformatic Services. Services can extends these modules and add custom functionalities. + +![Platformatic Stackables](./platformatic-stackables-architecture.png) + +This is useful to publish the application on the public npm registry (or a private one!), including building your own CLI, or to create a specialized template for your organization to allow for centralized bugfixes and updates. + + + + + + + + diff --git a/versioned_docs/version-0.45.0/getting-started/movie-quotes-app-tutorial.md b/versioned_docs/version-0.47.2/getting-started/movie-quotes-app-tutorial.md similarity index 100% rename from versioned_docs/version-0.45.0/getting-started/movie-quotes-app-tutorial.md rename to versioned_docs/version-0.47.2/getting-started/movie-quotes-app-tutorial.md diff --git a/versioned_docs/version-0.45.0/getting-started/new-api-project-instructions.md b/versioned_docs/version-0.47.2/getting-started/new-api-project-instructions.md similarity index 100% rename from versioned_docs/version-0.45.0/getting-started/new-api-project-instructions.md rename to versioned_docs/version-0.47.2/getting-started/new-api-project-instructions.md diff --git a/versioned_docs/version-0.45.0/getting-started/platformatic-architecture.png b/versioned_docs/version-0.47.2/getting-started/platformatic-architecture.png similarity index 100% rename from versioned_docs/version-0.45.0/getting-started/platformatic-architecture.png rename to versioned_docs/version-0.47.2/getting-started/platformatic-architecture.png diff --git a/versioned_docs/version-0.47.2/getting-started/platformatic-composer-architecture.png b/versioned_docs/version-0.47.2/getting-started/platformatic-composer-architecture.png new file mode 100644 index 0000000000..e196f1c299 Binary files /dev/null and b/versioned_docs/version-0.47.2/getting-started/platformatic-composer-architecture.png differ diff --git a/versioned_docs/version-0.47.2/getting-started/platformatic-db-architecture.png b/versioned_docs/version-0.47.2/getting-started/platformatic-db-architecture.png new file mode 100644 index 0000000000..49a65e16d6 Binary files /dev/null and b/versioned_docs/version-0.47.2/getting-started/platformatic-db-architecture.png differ diff --git a/versioned_docs/version-0.47.2/getting-started/platformatic-runtime-architecture.png b/versioned_docs/version-0.47.2/getting-started/platformatic-runtime-architecture.png new file mode 100644 index 0000000000..2c1f6362f5 Binary files /dev/null and b/versioned_docs/version-0.47.2/getting-started/platformatic-runtime-architecture.png differ diff --git a/versioned_docs/version-0.47.2/getting-started/platformatic-stackables-architecture.png b/versioned_docs/version-0.47.2/getting-started/platformatic-stackables-architecture.png new file mode 100644 index 0000000000..431adb77c5 Binary files /dev/null and b/versioned_docs/version-0.47.2/getting-started/platformatic-stackables-architecture.png differ diff --git a/versioned_docs/version-0.47.2/getting-started/platformatid-composer-architecture.excalidraw b/versioned_docs/version-0.47.2/getting-started/platformatid-composer-architecture.excalidraw new file mode 100644 index 0000000000..298f99b5f0 --- /dev/null +++ b/versioned_docs/version-0.47.2/getting-started/platformatid-composer-architecture.excalidraw @@ -0,0 +1,656 @@ +{ + "type": "excalidraw", + "version": 2, + "source": "https://excalidraw.com", + "elements": [ + { + "type": "rectangle", + "version": 669, + "versionNonce": 63944432, + "isDeleted": false, + "id": "1zlVmmd_Y9S9Oz0S_fTUH", + "fillStyle": "hachure", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "angle": 0, + "x": 437.666015625, + "y": 347.265625, + "strokeColor": "#000000", + "backgroundColor": "#fab005", + "width": 522.21875, + "height": 73.2265625, + "seed": 418516020, + "groupIds": [], + "frameId": null, + "roundness": null, + "boundElements": [ + { + "id": "zfmfD9pZLlP_G075cvUTv", + "type": "arrow" + } + ], + "updated": 1695656912691, + "link": null, + "locked": false + }, + { + "type": "text", + "version": 300, + "versionNonce": 900101872, + "isDeleted": false, + "id": "R_U11fvrIlgCS1IlhmWIQ", + "fillStyle": "hachure", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "angle": 0, + "x": 614.58984375, + "y": 380.25390625, + "strokeColor": "#000000", + "backgroundColor": "transparent", + "width": 136, + "height": 25, + "seed": 553319692, + "groupIds": [], + "frameId": null, + "roundness": null, + "boundElements": [], + "updated": 1695656810585, + "link": null, + "locked": false, + "fontSize": 20, + "fontFamily": 1, + "text": "Your Frontend", + "textAlign": "left", + "verticalAlign": "top", + "containerId": null, + "originalText": "Your Frontend", + "lineHeight": 1.25, + "baseline": 18 + }, + { + "type": "rectangle", + "version": 1451, + "versionNonce": 429529328, + "isDeleted": false, + "id": "W06kzPlnPRgvKtfyagn_y", + "fillStyle": "hachure", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "angle": 0, + "x": 440.49609375, + "y": 475.2578125, + "strokeColor": "#000000", + "backgroundColor": "#a5d8ff", + "width": 519.26171875, + "height": 71.80078125000003, + "seed": 1222202124, + "groupIds": [], + "frameId": null, + "roundness": null, + "boundElements": [ + { + "id": "zfmfD9pZLlP_G075cvUTv", + "type": "arrow" + }, + { + "id": "eKer-JCOH34vHPKFa6wGw", + "type": "arrow" + }, + { + "id": "aoyFR92g-JRKVbd3-Q2V2", + "type": "arrow" + }, + { + "id": "6ScM-v7nEHbdZWXX_6ruU", + "type": "arrow" + } + ], + "updated": 1695656810585, + "link": null, + "locked": false + }, + { + "type": "text", + "version": 1797, + "versionNonce": 259818224, + "isDeleted": false, + "id": "b8p9mgZWBw2sgu28jjLm-", + "fillStyle": "hachure", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "angle": 0, + "x": 641.9140625, + "y": 493.640625, + "strokeColor": "#000000", + "backgroundColor": "#40c057", + "width": 87.95989990234375, + "height": 25, + "seed": 759852684, + "groupIds": [], + "frameId": null, + "roundness": null, + "boundElements": [], + "updated": 1695656810585, + "link": null, + "locked": false, + "fontSize": 20, + "fontFamily": 1, + "text": "Composer", + "textAlign": "left", + "verticalAlign": "top", + "containerId": null, + "originalText": "Composer", + "lineHeight": 1.25, + "baseline": 18 + }, + { + "type": "arrow", + "version": 2354, + "versionNonce": 1086353424, + "isDeleted": false, + "id": "zfmfD9pZLlP_G075cvUTv", + "fillStyle": "hachure", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "angle": 0, + "x": 692.1845642332777, + "y": 427.2265625, + "strokeColor": "#000000", + "backgroundColor": "#40c057", + "width": 0.33965781124118166, + "height": 43.35937499999994, + "seed": 740245132, + "groupIds": [], + "frameId": null, + "roundness": { + "type": 2 + }, + "boundElements": [], + "updated": 1695656810703, + "link": null, + "locked": false, + "startBinding": { + "elementId": "1zlVmmd_Y9S9Oz0S_fTUH", + "focus": 0.02651298201543199, + "gap": 6.734375 + }, + "endBinding": { + "elementId": "W06kzPlnPRgvKtfyagn_y", + "focus": -0.028028347263413456, + "gap": 4.671875000000057 + }, + "lastCommittedPoint": null, + "startArrowhead": null, + "endArrowhead": "arrow", + "points": [ + [ + 0, + 0 + ], + [ + 0.33965781124118166, + 43.35937499999994 + ] + ] + }, + { + "type": "rectangle", + "version": 1701, + "versionNonce": 2130116848, + "isDeleted": false, + "id": "KdE0UbbyBYKbHc2cSI--n", + "fillStyle": "hachure", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "angle": 0, + "x": 436.67526520544186, + "y": 628.9110151988705, + "strokeColor": "#2f9e44", + "backgroundColor": "#b2f2bb", + "width": 139, + "height": 55, + "seed": 1167708912, + "groupIds": [], + "frameId": null, + "roundness": null, + "boundElements": [ + { + "type": "text", + "id": "1vfeZipGktYps97zQ2ZHs" + }, + { + "id": "6ScM-v7nEHbdZWXX_6ruU", + "type": "arrow" + } + ], + "updated": 1695656900988, + "link": null, + "locked": false + }, + { + "type": "text", + "version": 412, + "versionNonce": 1976068848, + "isDeleted": false, + "id": "1vfeZipGktYps97zQ2ZHs", + "fillStyle": "hachure", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "angle": 0, + "x": 452.47914398962155, + "y": 636.4110151988705, + "strokeColor": "#1e1e1e", + "backgroundColor": "#ffc9c9", + "width": 107.39224243164062, + "height": 40, + "seed": 1868188176, + "groupIds": [], + "frameId": null, + "roundness": null, + "boundElements": [], + "updated": 1695656900989, + "link": null, + "locked": false, + "fontSize": 16, + "fontFamily": 1, + "text": "Platformatic \nDB", + "textAlign": "center", + "verticalAlign": "middle", + "containerId": "KdE0UbbyBYKbHc2cSI--n", + "originalText": "Platformatic DB", + "lineHeight": 1.25, + "baseline": 34 + }, + { + "type": "rectangle", + "version": 1667, + "versionNonce": 1750922992, + "isDeleted": false, + "id": "CB7NVRbf3dXgBTg75oVV9", + "fillStyle": "hachure", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "angle": 0, + "x": 618.3061245804419, + "y": 630.3114058238705, + "strokeColor": "#000000", + "backgroundColor": "#ffc9c9", + "width": 141, + "height": 53, + "seed": 53312752, + "groupIds": [], + "frameId": null, + "roundness": null, + "boundElements": [ + { + "type": "text", + "id": "K5jKFuMd_7-HgR-yqxJgF" + }, + { + "id": "eKer-JCOH34vHPKFa6wGw", + "type": "arrow" + } + ], + "updated": 1695656862357, + "link": null, + "locked": false + }, + { + "type": "text", + "version": 420, + "versionNonce": 830511344, + "isDeleted": false, + "id": "K5jKFuMd_7-HgR-yqxJgF", + "fillStyle": "hachure", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "angle": 0, + "x": 635.1100033646215, + "y": 636.8114058238705, + "strokeColor": "#1e1e1e", + "backgroundColor": "#ffc9c9", + "width": 107.39224243164062, + "height": 40, + "seed": 1817206512, + "groupIds": [], + "frameId": null, + "roundness": null, + "boundElements": [], + "updated": 1695656862357, + "link": null, + "locked": false, + "fontSize": 16, + "fontFamily": 1, + "text": "Platformatic \nService", + "textAlign": "center", + "verticalAlign": "middle", + "containerId": "CB7NVRbf3dXgBTg75oVV9", + "originalText": "Platformatic Service", + "lineHeight": 1.25, + "baseline": 34 + }, + { + "type": "arrow", + "version": 615, + "versionNonce": 620725488, + "isDeleted": false, + "id": "6ScM-v7nEHbdZWXX_6ruU", + "fillStyle": "hachure", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "angle": 0, + "x": 626.3919116130373, + "y": 548.05859375, + "strokeColor": "#1e1e1e", + "backgroundColor": "#ffc9c9", + "width": 110.38569085431277, + "height": 68.75281207387047, + "seed": 943160560, + "groupIds": [], + "frameId": null, + "roundness": { + "type": 2 + }, + "boundElements": [], + "updated": 1695656900989, + "link": null, + "locked": false, + "startBinding": { + "elementId": "W06kzPlnPRgvKtfyagn_y", + "gap": 1, + "focus": 0.04472239667835766 + }, + "endBinding": { + "elementId": "KdE0UbbyBYKbHc2cSI--n", + "gap": 12.099609375, + "focus": -0.47291514602782014 + }, + "lastCommittedPoint": null, + "startArrowhead": null, + "endArrowhead": "arrow", + "points": [ + [ + 0, + 0 + ], + [ + -110.38569085431277, + 68.75281207387047 + ] + ] + }, + { + "type": "arrow", + "version": 451, + "versionNonce": 1141054704, + "isDeleted": false, + "id": "eKer-JCOH34vHPKFa6wGw", + "fillStyle": "hachure", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "angle": 0, + "x": 686.8754635434832, + "y": 548.8114058238705, + "strokeColor": "#1e1e1e", + "backgroundColor": "#ffc9c9", + "width": 1.510014305890877, + "height": 72, + "seed": 516423184, + "groupIds": [], + "frameId": null, + "roundness": { + "type": 2 + }, + "boundElements": [], + "updated": 1695656862357, + "link": null, + "locked": false, + "startBinding": { + "elementId": "W06kzPlnPRgvKtfyagn_y", + "gap": 1.7528120738704729, + "focus": 0.055195379401988084 + }, + "endBinding": { + "elementId": "CB7NVRbf3dXgBTg75oVV9", + "gap": 9.5, + "focus": 0.004705605552614552 + }, + "lastCommittedPoint": null, + "startArrowhead": null, + "endArrowhead": "arrow", + "points": [ + [ + 0, + 0 + ], + [ + 1.510014305890877, + 72 + ] + ] + }, + { + "type": "arrow", + "version": 406, + "versionNonce": 2137154288, + "isDeleted": false, + "id": "aoyFR92g-JRKVbd3-Q2V2", + "fillStyle": "hachure", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "angle": 0, + "x": 801.1537339743433, + "y": 548.8114058238705, + "strokeColor": "#1e1e1e", + "backgroundColor": "#ffc9c9", + "width": 66.50623336398132, + "height": 71, + "seed": 1952299248, + "groupIds": [], + "frameId": null, + "roundness": { + "type": 2 + }, + "boundElements": [], + "updated": 1695656882599, + "link": null, + "locked": false, + "startBinding": { + "elementId": "W06kzPlnPRgvKtfyagn_y", + "focus": -0.22442321443587057, + "gap": 1.7528120738704729 + }, + "endBinding": { + "elementId": "wxGmWoc24CHjYtu54mR2u", + "focus": 0.1993071525129831, + "gap": 9.766694552909712 + }, + "lastCommittedPoint": null, + "startArrowhead": null, + "endArrowhead": "arrow", + "points": [ + [ + 0, + 0 + ], + [ + 66.50623336398132, + 71 + ] + ] + }, + { + "type": "text", + "version": 85, + "versionNonce": 1873256176, + "isDeleted": false, + "id": "Yq3ABWGZ7TwZVd1bH5XjD", + "fillStyle": "hachure", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "angle": 0, + "x": 715.202036750852, + "y": 440.8114058238705, + "strokeColor": "#1e1e1e", + "backgroundColor": "#ffc9c9", + "width": 86.20817565917969, + "height": 20, + "seed": 454846192, + "groupIds": [], + "frameId": null, + "roundness": null, + "boundElements": [], + "updated": 1695656810585, + "link": null, + "locked": false, + "fontSize": 16, + "fontFamily": 1, + "text": "GET /hello", + "textAlign": "center", + "verticalAlign": "top", + "containerId": null, + "originalText": "GET /hello", + "lineHeight": 1.25, + "baseline": 14 + }, + { + "type": "text", + "version": 161, + "versionNonce": 618697456, + "isDeleted": false, + "id": "R-wlfsEXdsy6KrGkfqqQR", + "fillStyle": "hachure", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "angle": 0, + "x": 872.2020367508522, + "y": 570.8114058238705, + "strokeColor": "#1e1e1e", + "backgroundColor": "#ffc9c9", + "width": 86.20817565917969, + "height": 20, + "seed": 1250471152, + "groupIds": [], + "frameId": null, + "roundness": null, + "boundElements": [], + "updated": 1695656884580, + "link": null, + "locked": false, + "fontSize": 16, + "fontFamily": 1, + "text": "GET /hello", + "textAlign": "center", + "verticalAlign": "top", + "containerId": null, + "originalText": "GET /hello", + "lineHeight": 1.25, + "baseline": 14 + }, + { + "type": "rectangle", + "version": 1723, + "versionNonce": 279705840, + "isDeleted": false, + "id": "wxGmWoc24CHjYtu54mR2u", + "fillStyle": "hachure", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "angle": 0, + "x": 812.1327468802207, + "y": 629.5781003767802, + "strokeColor": "#000000", + "backgroundColor": "#ffc9c9", + "width": 141, + "height": 53, + "seed": 1733493488, + "groupIds": [], + "frameId": null, + "roundness": null, + "boundElements": [ + { + "type": "text", + "id": "Y9O3c2895N4OE-kHj4T50" + }, + { + "id": "aoyFR92g-JRKVbd3-Q2V2", + "type": "arrow" + } + ], + "updated": 1695656882064, + "link": null, + "locked": false + }, + { + "type": "text", + "version": 475, + "versionNonce": 1017076464, + "isDeleted": false, + "id": "Y9O3c2895N4OE-kHj4T50", + "fillStyle": "hachure", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "angle": 0, + "x": 828.9366256644004, + "y": 636.0781003767802, + "strokeColor": "#1e1e1e", + "backgroundColor": "#ffc9c9", + "width": 107.39224243164062, + "height": 40, + "seed": 2111120624, + "groupIds": [], + "frameId": null, + "roundness": null, + "boundElements": [], + "updated": 1695656882064, + "link": null, + "locked": false, + "fontSize": 16, + "fontFamily": 1, + "text": "Platformatic \nService", + "textAlign": "center", + "verticalAlign": "middle", + "containerId": "wxGmWoc24CHjYtu54mR2u", + "originalText": "Platformatic Service", + "lineHeight": 1.25, + "baseline": 34 + } + ], + "appState": { + "gridSize": null, + "viewBackgroundColor": "#ffffff" + }, + "files": {} +} \ No newline at end of file diff --git a/versioned_docs/version-0.45.0/getting-started/platformatid-db-architecture.excalidraw b/versioned_docs/version-0.47.2/getting-started/platformatid-db-architecture.excalidraw similarity index 54% rename from versioned_docs/version-0.45.0/getting-started/platformatid-db-architecture.excalidraw rename to versioned_docs/version-0.47.2/getting-started/platformatid-db-architecture.excalidraw index 04d7f461f5..ec2d827dc0 100644 --- a/versioned_docs/version-0.45.0/getting-started/platformatid-db-architecture.excalidraw +++ b/versioned_docs/version-0.47.2/getting-started/platformatid-db-architecture.excalidraw @@ -5,8 +5,8 @@ "elements": [ { "type": "rectangle", - "version": 551, - "versionNonce": 253868331, + "version": 707, + "versionNonce": 513135120, "isDeleted": false, "id": "1zlVmmd_Y9S9Oz0S_fTUH", "fillStyle": "hachure", @@ -23,18 +23,15 @@ "height": 73.2265625, "seed": 418516020, "groupIds": [], - "strokeSharpness": "sharp", + "frameId": null, + "roundness": null, "boundElements": [ { "id": "zfmfD9pZLlP_G075cvUTv", "type": "arrow" - }, - { - "id": "mzCbJHPkBmRZyt8z7yCAe", - "type": "arrow" } ], - "updated": 1662501577385, + "updated": 1695659010522, "link": null, "locked": false }, @@ -58,7 +55,8 @@ "height": 74.8515625, "seed": 906185780, "groupIds": [], - "strokeSharpness": "sharp", + "frameId": null, + "roundness": null, "boundElements": [ { "id": "zfmfD9pZLlP_G075cvUTv", @@ -75,8 +73,8 @@ }, { "type": "text", - "version": 184, - "versionNonce": 668075276, + "version": 307, + "versionNonce": 1251684368, "isDeleted": false, "id": "R_U11fvrIlgCS1IlhmWIQ", "fillStyle": "hachure", @@ -93,24 +91,26 @@ "height": 25, "seed": 553319692, "groupIds": [], - "strokeSharpness": "sharp", + "frameId": null, + "roundness": null, "boundElements": [], - "updated": 1662412597026, + "updated": 1695659004880, "link": null, "locked": false, "fontSize": 20, "fontFamily": 1, "text": "Your Frontend", - "baseline": 18, "textAlign": "left", "verticalAlign": "top", "containerId": null, - "originalText": "Your Frontend" + "originalText": "Your Frontend", + "lineHeight": 1.25, + "baseline": 18 }, { "type": "rectangle", - "version": 1250, - "versionNonce": 2047189428, + "version": 1976, + "versionNonce": 603691248, "isDeleted": false, "id": "W06kzPlnPRgvKtfyagn_y", "fillStyle": "hachure", @@ -127,7 +127,8 @@ "height": 180.80078124999997, "seed": 1222202124, "groupIds": [], - "strokeSharpness": "sharp", + "frameId": null, + "roundness": null, "boundElements": [ { "id": "7lr5UwO6mqEbEA4WdbjS3", @@ -142,14 +143,14 @@ "type": "arrow" } ], - "updated": 1662412597026, + "updated": 1695659004880, "link": null, "locked": false }, { "type": "text", - "version": 1593, - "versionNonce": 1162225739, + "version": 1874, + "versionNonce": 1574612496, "isDeleted": false, "id": "b8p9mgZWBw2sgu28jjLm-", "fillStyle": "hachure", @@ -166,19 +167,21 @@ "height": 25, "seed": 759852684, "groupIds": [], - "strokeSharpness": "sharp", + "frameId": null, + "roundness": null, "boundElements": [], - "updated": 1662501578885, + "updated": 1695659004881, "link": null, "locked": false, "fontSize": 20, "fontFamily": 1, "text": "Platformatic DB", - "baseline": 18, "textAlign": "left", "verticalAlign": "top", "containerId": null, - "originalText": "Platformatic DB" + "originalText": "Platformatic DB", + "lineHeight": 1.25, + "baseline": 18 }, { "type": "line", @@ -203,7 +206,10 @@ "6bLMR27dyecCy-nls2xaX", "u14TNEkdqVuYB_Aj5ykEw" ], - "strokeSharpness": "round", + "frameId": null, + "roundness": { + "type": 2 + }, "boundElements": [], "updated": 1662412597026, "link": null, @@ -315,7 +321,10 @@ "6bLMR27dyecCy-nls2xaX", "u14TNEkdqVuYB_Aj5ykEw" ], - "strokeSharpness": "round", + "frameId": null, + "roundness": { + "type": 2 + }, "boundElements": [], "updated": 1662412597026, "link": null, @@ -383,7 +392,10 @@ "6bLMR27dyecCy-nls2xaX", "u14TNEkdqVuYB_Aj5ykEw" ], - "strokeSharpness": "round", + "frameId": null, + "roundness": { + "type": 2 + }, "boundElements": [], "updated": 1662412597026, "link": null, @@ -451,12 +463,9 @@ "6bLMR27dyecCy-nls2xaX", "u14TNEkdqVuYB_Aj5ykEw" ], - "strokeSharpness": "sharp", + "frameId": null, + "roundness": null, "boundElements": [ - { - "type": "arrow", - "id": "bxuMGTzXLn7H-uBCptINx" - }, { "id": "7lr5UwO6mqEbEA4WdbjS3", "type": "arrow" @@ -489,7 +498,8 @@ "6bLMR27dyecCy-nls2xaX", "u14TNEkdqVuYB_Aj5ykEw" ], - "strokeSharpness": "sharp", + "frameId": null, + "roundness": null, "boundElements": [], "updated": 1662412597026, "link": null, @@ -518,7 +528,8 @@ "6bLMR27dyecCy-nls2xaX", "u14TNEkdqVuYB_Aj5ykEw" ], - "strokeSharpness": "sharp", + "frameId": null, + "roundness": null, "boundElements": [], "updated": 1662412597026, "link": null, @@ -547,7 +558,8 @@ "6bLMR27dyecCy-nls2xaX", "u14TNEkdqVuYB_Aj5ykEw" ], - "strokeSharpness": "sharp", + "frameId": null, + "roundness": null, "boundElements": [], "updated": 1662412597026, "link": null, @@ -575,7 +587,8 @@ "groupIds": [ "u14TNEkdqVuYB_Aj5ykEw" ], - "strokeSharpness": "sharp", + "frameId": null, + "roundness": null, "boundElements": [], "updated": 1662412597026, "link": null, @@ -583,11 +596,12 @@ "fontSize": 20, "fontFamily": 1, "text": "MySQL\nPostgreSQL\nSQLite", - "baseline": 68, "textAlign": "left", "verticalAlign": "top", "containerId": null, - "originalText": "MySQL\nPostgreSQL\nSQLite" + "originalText": "MySQL\nPostgreSQL\nSQLite", + "lineHeight": 1.25, + "baseline": 68 }, { "type": "rectangle", @@ -609,7 +623,8 @@ "height": 49, "seed": 1003500172, "groupIds": [], - "strokeSharpness": "sharp", + "frameId": null, + "roundness": null, "boundElements": [ { "type": "text", @@ -644,7 +659,8 @@ "height": 25, "seed": 785206068, "groupIds": [], - "strokeSharpness": "sharp", + "frameId": null, + "roundness": null, "boundElements": [], "updated": 1662412597026, "link": null, @@ -652,11 +668,12 @@ "fontSize": 20, "fontFamily": 1, "text": "REST", - "baseline": 18, "textAlign": "center", "verticalAlign": "middle", "containerId": "PvIWYwKCctyqauI5pTaz2", - "originalText": "REST" + "originalText": "REST", + "lineHeight": 1.25, + "baseline": 18 }, { "type": "rectangle", @@ -678,15 +695,12 @@ "height": 49, "seed": 994139020, "groupIds": [], - "strokeSharpness": "sharp", + "frameId": null, + "roundness": null, "boundElements": [ { "id": "NCCySoN90b0h8dl252sC8", "type": "text" - }, - { - "type": "text", - "id": "NCCySoN90b0h8dl252sC8" } ], "updated": 1662501577385, @@ -713,7 +727,8 @@ "height": 25, "seed": 415036212, "groupIds": [], - "strokeSharpness": "sharp", + "frameId": null, + "roundness": null, "boundElements": [], "updated": 1662412597026, "link": null, @@ -721,11 +736,12 @@ "fontSize": 20, "fontFamily": 1, "text": "GraphQL", - "baseline": 18, "textAlign": "center", "verticalAlign": "middle", "containerId": "p8xcTPjfpNzqdS2Bi6oAZ", - "originalText": "GraphQL" + "originalText": "GraphQL", + "lineHeight": 1.25, + "baseline": 18 }, { "type": "arrow", @@ -747,7 +763,10 @@ "height": 50.53939662172979, "seed": 646336524, "groupIds": [], - "strokeSharpness": "round", + "frameId": null, + "roundness": { + "type": 2 + }, "boundElements": [], "updated": 1662412597026, "link": null, @@ -778,8 +797,8 @@ }, { "type": "arrow", - "version": 1800, - "versionNonce": 1766871115, + "version": 3155, + "versionNonce": 83557104, "isDeleted": false, "id": "zfmfD9pZLlP_G075cvUTv", "fillStyle": "hachure", @@ -796,9 +815,12 @@ "height": 42.35937499999994, "seed": 740245132, "groupIds": [], - "strokeSharpness": "round", + "frameId": null, + "roundness": { + "type": 2 + }, "boundElements": [], - "updated": 1662501582196, + "updated": 1695659004881, "link": null, "locked": false, "startBinding": { @@ -845,7 +867,8 @@ "height": 39, "seed": 1128027188, "groupIds": [], - "strokeSharpness": "sharp", + "frameId": null, + "roundness": null, "boundElements": [ { "type": "text", @@ -876,7 +899,8 @@ "height": 25, "seed": 1515850252, "groupIds": [], - "strokeSharpness": "sharp", + "frameId": null, + "roundness": null, "boundElements": [], "updated": 1662412597026, "link": null, @@ -884,11 +908,12 @@ "fontSize": 20, "fontFamily": 1, "text": "Your Code", - "baseline": 18, "textAlign": "center", "verticalAlign": "middle", "containerId": "9WfekBK46yxJpRloc_OZg", - "originalText": "Your Code" + "originalText": "Your Code", + "lineHeight": 1.25, + "baseline": 18 }, { "type": "rectangle", @@ -910,15 +935,12 @@ "height": 39, "seed": 644178100, "groupIds": [], - "strokeSharpness": "sharp", + "frameId": null, + "roundness": null, "boundElements": [ { "id": "QbZUz4LyUXI8NfqStLibW", "type": "text" - }, - { - "type": "text", - "id": "QbZUz4LyUXI8NfqStLibW" } ], "updated": 1662501565241, @@ -945,7 +967,8 @@ "height": 25, "seed": 1705325708, "groupIds": [], - "strokeSharpness": "sharp", + "frameId": null, + "roundness": null, "boundElements": [], "updated": 1662412597026, "link": null, @@ -953,11 +976,12 @@ "fontSize": 20, "fontFamily": 1, "text": "sql-mapper", - "baseline": 18, "textAlign": "center", "verticalAlign": "middle", "containerId": "jti7SjH-dppIs0Sfz7P-6", - "originalText": "sql-mapper" + "originalText": "sql-mapper", + "lineHeight": 1.25, + "baseline": 18 }, { "type": "text", @@ -979,7 +1003,8 @@ "height": 25, "seed": 1646758924, "groupIds": [], - "strokeSharpness": "sharp", + "frameId": null, + "roundness": null, "boundElements": [], "updated": 1662412597026, "link": null, @@ -987,11 +1012,12 @@ "fontSize": 20, "fontFamily": 1, "text": "Migrations", - "baseline": 18, "textAlign": "left", "verticalAlign": "top", "containerId": null, - "originalText": "Migrations" + "originalText": "Migrations", + "lineHeight": 1.25, + "baseline": 18 }, { "type": "arrow", @@ -1013,7 +1039,10 @@ "height": 66.19140625, "seed": 578856588, "groupIds": [], - "strokeSharpness": "round", + "frameId": null, + "roundness": { + "type": 2 + }, "boundElements": [], "updated": 1662412597026, "link": null, @@ -1041,732 +1070,6 @@ 66.19140625 ] ] - }, - { - "type": "ellipse", - "version": 1690, - "versionNonce": 361510412, - "isDeleted": false, - "id": "lFQ5wDy-KUnUz3oDzkI25", - "fillStyle": "solid", - "strokeWidth": 2, - "strokeStyle": "solid", - "roughness": 1, - "opacity": 100, - "angle": 0, - "x": 239.69356547871712, - "y": 67.47880783610327, - "strokeColor": "#000000", - "backgroundColor": "transparent", - "width": 21.49669286347574, - "height": 23.588242019607666, - "seed": 1348447412, - "groupIds": [ - "BigUhShJehOiqWIjcDoW9" - ], - "strokeSharpness": "sharp", - "boundElements": [], - "updated": 1662412601919, - "link": null, - "locked": false - }, - { - "type": "line", - "version": 1660, - "versionNonce": 16974004, - "isDeleted": false, - "id": "JMyz9WWOhsSP478-dH8kL", - "fillStyle": "solid", - "strokeWidth": 2, - "strokeStyle": "solid", - "roughness": 1, - "opacity": 100, - "angle": 0, - "x": 249.34114010330978, - "y": 91.1380667584855, - "strokeColor": "#000000", - "backgroundColor": "#ced4da", - "width": 1.2113207534300774, - "height": 27.54598873639832, - "seed": 675653772, - "groupIds": [ - "BigUhShJehOiqWIjcDoW9" - ], - "strokeSharpness": "round", - "boundElements": [], - "updated": 1662412601919, - "link": null, - "locked": false, - "lastCommittedPoint": null, - "startArrowhead": null, - "endArrowhead": null, - "points": [ - [ - 0, - 0 - ], - [ - -1.2113207534300774, - 27.54598873639832 - ] - ] - }, - { - "type": "line", - "version": 1613, - "versionNonce": 1160877196, - "isDeleted": false, - "id": "-f4M1kqgJJ1DqIHSarxxq", - "fillStyle": "solid", - "strokeWidth": 2, - "strokeStyle": "solid", - "roughness": 1, - "opacity": 100, - "angle": 0, - "x": 248.18103511512425, - "y": 119.44818324746751, - "strokeColor": "#000000", - "backgroundColor": "#ced4da", - "width": 10.904198461697792, - "height": 16.79898457094717, - "seed": 649066036, - "groupIds": [ - "BigUhShJehOiqWIjcDoW9" - ], - "strokeSharpness": "round", - "boundElements": [], - "updated": 1662412601919, - "link": null, - "locked": false, - "lastCommittedPoint": null, - "startArrowhead": null, - "endArrowhead": null, - "points": [ - [ - 0, - 0 - ], - [ - 10.904198461697792, - 16.79898457094717 - ] - ] - }, - { - "type": "line", - "version": 1589, - "versionNonce": 264817204, - "isDeleted": false, - "id": "wTdHoAnzcbiBjRED9_-VP", - "fillStyle": "solid", - "strokeWidth": 2, - "strokeStyle": "solid", - "roughness": 1, - "opacity": 100, - "angle": 0, - "x": 246.67659186550435, - "y": 118.31986521987952, - "strokeColor": "#000000", - "backgroundColor": "#ced4da", - "width": 9.329943818404125, - "height": 15.60615726413436, - "seed": 1427683084, - "groupIds": [ - "BigUhShJehOiqWIjcDoW9" - ], - "strokeSharpness": "round", - "boundElements": [], - "updated": 1662412601919, - "link": null, - "locked": false, - "lastCommittedPoint": null, - "startArrowhead": null, - "endArrowhead": null, - "points": [ - [ - 0, - 0 - ], - [ - -9.329943818404125, - 15.60615726413436 - ] - ] - }, - { - "type": "line", - "version": 1566, - "versionNonce": 1168581388, - "isDeleted": false, - "id": "lWzkvf-pHYnTTwDCCoYUU", - "fillStyle": "solid", - "strokeWidth": 2, - "strokeStyle": "solid", - "roughness": 1, - "opacity": 100, - "angle": 0, - "x": 238.90401457661704, - "y": 96.50986296364448, - "strokeColor": "#000000", - "backgroundColor": "#ced4da", - "width": 10.592121550031646, - "height": 10.166772277834836, - "seed": 792399796, - "groupIds": [ - "BigUhShJehOiqWIjcDoW9" - ], - "strokeSharpness": "round", - "boundElements": [], - "updated": 1662412601919, - "link": null, - "locked": false, - "lastCommittedPoint": null, - "startArrowhead": null, - "endArrowhead": null, - "points": [ - [ - 0, - 0 - ], - [ - 10.592121550031646, - 10.166772277834836 - ] - ] - }, - { - "type": "line", - "version": 1586, - "versionNonce": 639198132, - "isDeleted": false, - "id": "eZyQeLBRJefnO4eEmCIOm", - "fillStyle": "solid", - "strokeWidth": 2, - "strokeStyle": "solid", - "roughness": 1, - "opacity": 100, - "angle": 0, - "x": 250.16954159533526, - "y": 106.46768276298613, - "strokeColor": "#000000", - "backgroundColor": "#ced4da", - "width": 15.26402850171518, - "height": 8.608699400331258, - "seed": 1099298188, - "groupIds": [ - "BigUhShJehOiqWIjcDoW9" - ], - "strokeSharpness": "round", - "boundElements": [], - "updated": 1662412601919, - "link": null, - "locked": false, - "lastCommittedPoint": null, - "startArrowhead": null, - "endArrowhead": null, - "points": [ - [ - 0, - 0 - ], - [ - 15.26402850171518, - -8.608699400331258 - ] - ] - }, - { - "type": "line", - "version": 1817, - "versionNonce": 1835458956, - "isDeleted": false, - "id": "nRSmHuDmrd58aq7nRjD9v", - "fillStyle": "solid", - "strokeWidth": 2, - "strokeStyle": "solid", - "roughness": 1, - "opacity": 100, - "angle": 0, - "x": 259.25536801028943, - "y": 73.70638903822018, - "strokeColor": "#000000", - "backgroundColor": "transparent", - "width": 18.012785949061733, - "height": 8.792983231273032, - "seed": 2049374516, - "groupIds": [ - "BigUhShJehOiqWIjcDoW9" - ], - "strokeSharpness": "round", - "boundElements": [], - "updated": 1662412601919, - "link": null, - "locked": false, - "lastCommittedPoint": null, - "startArrowhead": null, - "endArrowhead": null, - "points": [ - [ - 0, - 0 - ], - [ - -5.551156049147498, - 4.156441847180949 - ], - [ - -14.767067932950507, - 1.7161569081851142 - ], - [ - -18.012785949061733, - 8.792983231273032 - ] - ] - }, - { - "type": "line", - "version": 2089, - "versionNonce": 706399540, - "isDeleted": false, - "id": "aXuUF4qv85paleGvjq1Vf", - "fillStyle": "solid", - "strokeWidth": 2, - "strokeStyle": "solid", - "roughness": 1, - "opacity": 100, - "angle": 0, - "x": 241.12989079109474, - "y": 73.78023080944443, - "strokeColor": "#000000", - "backgroundColor": "transparent", - "width": 7.256241079962556, - "height": 20.702676936887435, - "seed": 1523016716, - "groupIds": [ - "BigUhShJehOiqWIjcDoW9" - ], - "strokeSharpness": "round", - "boundElements": [], - "updated": 1662412601919, - "link": null, - "locked": false, - "lastCommittedPoint": null, - "startArrowhead": null, - "endArrowhead": null, - "points": [ - [ - 0, - 0 - ], - [ - -0.7145030549373154, - -3.2217494351862745 - ], - [ - -3.6837258052759845, - -3.9328337752254474 - ], - [ - -7.256241079962556, - 1.6608630719016904 - ], - [ - -5.283976448978563, - 16.76984316166199 - ], - [ - -2.813724840310993, - 9.33657487598008 - ], - [ - 0, - 0 - ] - ] - }, - { - "type": "rectangle", - "version": 1055, - "versionNonce": 866832396, - "isDeleted": false, - "id": "vPmumowJzhJh6C166dtT6", - "fillStyle": "solid", - "strokeWidth": 1, - "strokeStyle": "solid", - "roughness": 1, - "opacity": 100, - "angle": 0.32340402082123276, - "x": 234.39442736485796, - "y": 90.43231788867585, - "strokeColor": "#000000", - "backgroundColor": "transparent", - "width": 6.043745042549293, - "height": 12.566983256668966, - "seed": 584692404, - "groupIds": [ - "BigUhShJehOiqWIjcDoW9" - ], - "strokeSharpness": "sharp", - "boundElements": [], - "updated": 1662412601919, - "link": null, - "locked": false - }, - { - "type": "ellipse", - "version": 2205, - "versionNonce": 1295189684, - "isDeleted": false, - "id": "xApIn7h3gZf3eY10bjrUb", - "fillStyle": "solid", - "strokeWidth": 2, - "strokeStyle": "solid", - "roughness": 1, - "opacity": 100, - "angle": 0, - "x": 299.3665088217107, - "y": 71.88057076815883, - "strokeColor": "#000000", - "backgroundColor": "transparent", - "width": 24.744967041785156, - "height": 22.77537981587287, - "seed": 1744387124, - "groupIds": [ - "-ijW-sGctTCBEecgCTOPZ" - ], - "strokeSharpness": "sharp", - "boundElements": [], - "updated": 1662412601919, - "link": null, - "locked": false - }, - { - "type": "line", - "version": 2267, - "versionNonce": 409792140, - "isDeleted": false, - "id": "RED9kg0RWDjfRC331frur", - "fillStyle": "solid", - "strokeWidth": 2, - "strokeStyle": "solid", - "roughness": 1, - "opacity": 100, - "angle": 0, - "x": 310.36246414441894, - "y": 94.66231306364153, - "strokeColor": "#000000", - "backgroundColor": "#ced4da", - "width": 1.2141925957388797, - "height": 27.611295745848107, - "seed": 477024524, - "groupIds": [ - "-ijW-sGctTCBEecgCTOPZ" - ], - "strokeSharpness": "round", - "boundElements": [], - "updated": 1662412601919, - "link": null, - "locked": false, - "lastCommittedPoint": null, - "startArrowhead": null, - "endArrowhead": null, - "points": [ - [ - 0, - 0 - ], - [ - -1.2141925957388797, - 27.611295745848107 - ] - ] - }, - { - "type": "line", - "version": 2220, - "versionNonce": 604508212, - "isDeleted": false, - "id": "4tmwbSvpDvV5L9eOL3w5W", - "fillStyle": "solid", - "strokeWidth": 2, - "strokeStyle": "solid", - "roughness": 1, - "opacity": 100, - "angle": 0, - "x": 309.318726188599, - "y": 122.87810392550332, - "strokeColor": "#000000", - "backgroundColor": "#ced4da", - "width": 10.93005052309211, - "height": 16.83881220082897, - "seed": 1131124148, - "groupIds": [ - "-ijW-sGctTCBEecgCTOPZ" - ], - "strokeSharpness": "round", - "boundElements": [], - "updated": 1662412601919, - "link": null, - "locked": false, - "lastCommittedPoint": null, - "startArrowhead": null, - "endArrowhead": null, - "points": [ - [ - 0, - 0 - ], - [ - 10.93005052309211, - 16.83881220082897 - ] - ] - }, - { - "type": "line", - "version": 2234, - "versionNonce": 208092428, - "isDeleted": false, - "id": "BhFX6QUNp6ZRAaC14lRsq", - "fillStyle": "solid", - "strokeWidth": 2, - "strokeStyle": "solid", - "roughness": 1, - "opacity": 100, - "angle": 0, - "x": 309.2530763831227, - "y": 122.12933640276594, - "strokeColor": "#000000", - "backgroundColor": "#ced4da", - "width": 10.893068867789728, - "height": 15.119678146262912, - "seed": 721997708, - "groupIds": [ - "-ijW-sGctTCBEecgCTOPZ" - ], - "strokeSharpness": "round", - "boundElements": [], - "updated": 1662412601919, - "link": null, - "locked": false, - "lastCommittedPoint": null, - "startArrowhead": null, - "endArrowhead": null, - "points": [ - [ - 0, - 0 - ], - [ - -10.893068867789728, - 15.119678146262912 - ] - ] - }, - { - "type": "line", - "version": 2207, - "versionNonce": 1048570292, - "isDeleted": false, - "id": "T5q_miW2zK8Z6_GHMzHuy", - "fillStyle": "solid", - "strokeWidth": 2, - "strokeStyle": "solid", - "roughness": 1, - "opacity": 100, - "angle": 0, - "x": 299.79149008152416, - "y": 99.89494714462973, - "strokeColor": "#000000", - "backgroundColor": "#ced4da", - "width": 9.29401757679057, - "height": 9.667397272649206, - "seed": 39239476, - "groupIds": [ - "-ijW-sGctTCBEecgCTOPZ" - ], - "strokeSharpness": "round", - "boundElements": [], - "updated": 1662412601919, - "link": null, - "locked": false, - "lastCommittedPoint": null, - "startArrowhead": null, - "endArrowhead": null, - "points": [ - [ - 0, - 0 - ], - [ - 9.29401757679057, - 9.667397272649206 - ] - ] - }, - { - "type": "line", - "version": 2274, - "versionNonce": 1494465420, - "isDeleted": false, - "id": "7eDKh8D3tRxN9AnkQNJCH", - "fillStyle": "solid", - "strokeWidth": 2, - "strokeStyle": "solid", - "roughness": 1, - "opacity": 100, - "angle": 0, - "x": 309.9030355081573, - "y": 109.63564914257302, - "strokeColor": "#000000", - "backgroundColor": "#ced4da", - "width": 16.61048353051358, - "height": 8.347356780081856, - "seed": 48168460, - "groupIds": [ - "-ijW-sGctTCBEecgCTOPZ" - ], - "strokeSharpness": "round", - "boundElements": [], - "updated": 1662412601919, - "link": null, - "locked": false, - "lastCommittedPoint": null, - "startArrowhead": null, - "endArrowhead": null, - "points": [ - [ - 0, - 0 - ], - [ - 16.61048353051358, - -8.347356780081856 - ] - ] - }, - { - "type": "line", - "version": 2214, - "versionNonce": 1069585204, - "isDeleted": false, - "id": "-MsR8pFblQ_RWCQ50tTvg", - "fillStyle": "solid", - "strokeWidth": 2, - "strokeStyle": "solid", - "roughness": 1, - "opacity": 100, - "angle": 0, - "x": 295.3274989522442, - "y": 73.87763473934886, - "strokeColor": "#000000", - "backgroundColor": "transparent", - "width": 35.55274923479633, - "height": 7.233182720600468, - "seed": 1562425524, - "groupIds": [ - "-ijW-sGctTCBEecgCTOPZ" - ], - "strokeSharpness": "round", - "boundElements": [], - "updated": 1662412601919, - "link": null, - "locked": false, - "lastCommittedPoint": null, - "startArrowhead": null, - "endArrowhead": null, - "points": [ - [ - 0, - 0 - ], - [ - 35.55274923479633, - 7.233182720600468 - ] - ] - }, - { - "type": "rectangle", - "version": 2521, - "versionNonce": 145517068, - "isDeleted": false, - "id": "mxV4CeWFqORnIifYgQTpP", - "fillStyle": "solid", - "strokeWidth": 2, - "strokeStyle": "solid", - "roughness": 1, - "opacity": 100, - "angle": 0.1875122815022081, - "x": 303.27728681036575, - "y": 69.14462472277884, - "strokeColor": "#000000", - "backgroundColor": "#fff", - "width": 21.279164889176773, - "height": 7.3403547293505, - "seed": 216751244, - "groupIds": [ - "-ijW-sGctTCBEecgCTOPZ" - ], - "strokeSharpness": "sharp", - "boundElements": [], - "updated": 1662412601919, - "link": null, - "locked": false - }, - { - "type": "arrow", - "version": 1412, - "versionNonce": 647641268, - "isDeleted": false, - "id": "mzCbJHPkBmRZyt8z7yCAe", - "fillStyle": "solid", - "strokeWidth": 1, - "strokeStyle": "solid", - "roughness": 1, - "opacity": 100, - "angle": 0, - "x": 282.90625, - "y": 142.60546875, - "strokeColor": "#000000", - "backgroundColor": "#fa5252", - "width": 378.79296875, - "height": 102.58203125, - "seed": 1011840012, - "groupIds": [], - "strokeSharpness": "round", - "boundElements": [], - "updated": 1662412613395, - "link": null, - "locked": false, - "startBinding": null, - "endBinding": { - "elementId": "1zlVmmd_Y9S9Oz0S_fTUH", - "focus": 0.056278788827343405, - "gap": 9.078125 - }, - "lastCommittedPoint": null, - "startArrowhead": null, - "endArrowhead": "arrow", - "points": [ - [ - 0, - 0 - ], - [ - 151.6953125, - 69.025390625 - ], - [ - 333.46484375, - 15.73046875 - ], - [ - 378.79296875, - 102.58203125 - ] - ] } ], "appState": { diff --git a/versioned_docs/version-0.47.2/getting-started/platformatid-runtime-architecture.excalidraw b/versioned_docs/version-0.47.2/getting-started/platformatid-runtime-architecture.excalidraw new file mode 100644 index 0000000000..5bb3352047 --- /dev/null +++ b/versioned_docs/version-0.47.2/getting-started/platformatid-runtime-architecture.excalidraw @@ -0,0 +1,812 @@ +{ + "type": "excalidraw", + "version": 2, + "source": "https://excalidraw.com", + "elements": [ + { + "type": "rectangle", + "version": 703, + "versionNonce": 1521383664, + "isDeleted": false, + "id": "1zlVmmd_Y9S9Oz0S_fTUH", + "fillStyle": "hachure", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "angle": 0, + "x": 440.666015625, + "y": 354.265625, + "strokeColor": "#000000", + "backgroundColor": "#fab005", + "width": 512.21875, + "height": 73.2265625, + "seed": 418516020, + "groupIds": [], + "frameId": null, + "roundness": null, + "boundElements": [ + { + "id": "zfmfD9pZLlP_G075cvUTv", + "type": "arrow" + } + ], + "updated": 1695657392735, + "link": null, + "locked": false + }, + { + "type": "text", + "version": 304, + "versionNonce": 634082320, + "isDeleted": false, + "id": "R_U11fvrIlgCS1IlhmWIQ", + "fillStyle": "hachure", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "angle": 0, + "x": 614.58984375, + "y": 380.25390625, + "strokeColor": "#000000", + "backgroundColor": "transparent", + "width": 136, + "height": 25, + "seed": 553319692, + "groupIds": [], + "frameId": null, + "roundness": null, + "boundElements": [], + "updated": 1695657328702, + "link": null, + "locked": false, + "fontSize": 20, + "fontFamily": 1, + "text": "Your Frontend", + "textAlign": "left", + "verticalAlign": "top", + "containerId": null, + "originalText": "Your Frontend", + "lineHeight": 1.25, + "baseline": 18 + }, + { + "type": "rectangle", + "version": 1917, + "versionNonce": 41733872, + "isDeleted": false, + "id": "W06kzPlnPRgvKtfyagn_y", + "fillStyle": "hachure", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "angle": 0, + "x": 419.49609375, + "y": 480.2578125, + "strokeColor": "#000000", + "backgroundColor": "#a5d8ff", + "width": 553.26171875, + "height": 263.80078125000006, + "seed": 1222202124, + "groupIds": [], + "frameId": null, + "roundness": null, + "boundElements": [ + { + "id": "zfmfD9pZLlP_G075cvUTv", + "type": "arrow" + } + ], + "updated": 1695657371188, + "link": null, + "locked": false + }, + { + "type": "text", + "version": 1871, + "versionNonce": 661017104, + "isDeleted": false, + "id": "b8p9mgZWBw2sgu28jjLm-", + "fillStyle": "hachure", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "angle": 0, + "x": 450.9140625, + "y": 493.640625, + "strokeColor": "#000000", + "backgroundColor": "#40c057", + "width": 73.5399169921875, + "height": 25, + "seed": 759852684, + "groupIds": [], + "frameId": null, + "roundness": null, + "boundElements": [], + "updated": 1695657328702, + "link": null, + "locked": false, + "fontSize": 20, + "fontFamily": 1, + "text": "Runtime", + "textAlign": "left", + "verticalAlign": "top", + "containerId": null, + "originalText": "Runtime", + "lineHeight": 1.25, + "baseline": 18 + }, + { + "type": "arrow", + "version": 2782, + "versionNonce": 590937328, + "isDeleted": false, + "id": "zfmfD9pZLlP_G075cvUTv", + "fillStyle": "hachure", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "angle": 0, + "x": 691.3053158193559, + "y": 434.2265625, + "strokeColor": "#000000", + "backgroundColor": "#40c057", + "width": 1.8721843840042993, + "height": 36.35937499999994, + "seed": 740245132, + "groupIds": [], + "frameId": null, + "roundness": { + "type": 2 + }, + "boundElements": [], + "updated": 1695657392735, + "link": null, + "locked": false, + "startBinding": { + "elementId": "1zlVmmd_Y9S9Oz0S_fTUH", + "gap": 6.734375, + "focus": 0.030521771241079867 + }, + "endBinding": { + "elementId": "CB7NVRbf3dXgBTg75oVV9", + "gap": 9.725468323870587, + "focus": 0.05895350503727607 + }, + "lastCommittedPoint": null, + "startArrowhead": null, + "endArrowhead": "arrow", + "points": [ + [ + 0, + 0 + ], + [ + 1.8721843840042993, + 36.35937499999994 + ] + ] + }, + { + "type": "rectangle", + "version": 1804, + "versionNonce": 1577779728, + "isDeleted": false, + "id": "KdE0UbbyBYKbHc2cSI--n", + "fillStyle": "hachure", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "angle": 0, + "x": 457.67526520544186, + "y": 587.9110151988705, + "strokeColor": "#2f9e44", + "backgroundColor": "#b2f2bb", + "width": 139, + "height": 55, + "seed": 1167708912, + "groupIds": [], + "frameId": null, + "roundness": null, + "boundElements": [ + { + "type": "text", + "id": "1vfeZipGktYps97zQ2ZHs" + }, + { + "id": "hHcS1gSPDnJC_dqLxSwW1", + "type": "arrow" + } + ], + "updated": 1695657336909, + "link": null, + "locked": false + }, + { + "type": "text", + "version": 513, + "versionNonce": 1958426864, + "isDeleted": false, + "id": "1vfeZipGktYps97zQ2ZHs", + "fillStyle": "hachure", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "angle": 0, + "x": 473.47914398962155, + "y": 595.4110151988705, + "strokeColor": "#1e1e1e", + "backgroundColor": "#ffc9c9", + "width": 107.39224243164062, + "height": 40, + "seed": 1868188176, + "groupIds": [], + "frameId": null, + "roundness": null, + "boundElements": [], + "updated": 1695657328702, + "link": null, + "locked": false, + "fontSize": 16, + "fontFamily": 1, + "text": "Platformatic \nDB", + "textAlign": "center", + "verticalAlign": "middle", + "containerId": "KdE0UbbyBYKbHc2cSI--n", + "originalText": "Platformatic DB", + "lineHeight": 1.25, + "baseline": 34 + }, + { + "type": "rectangle", + "version": 1811, + "versionNonce": 990260464, + "isDeleted": false, + "id": "CB7NVRbf3dXgBTg75oVV9", + "fillStyle": "hachure", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "angle": 0, + "x": 620.3061245804419, + "y": 480.3114058238705, + "strokeColor": "#000000", + "backgroundColor": "#ffc9c9", + "width": 141, + "height": 53, + "seed": 53312752, + "groupIds": [], + "frameId": null, + "roundness": null, + "boundElements": [ + { + "type": "text", + "id": "K5jKFuMd_7-HgR-yqxJgF" + }, + { + "id": "zfmfD9pZLlP_G075cvUTv", + "type": "arrow" + }, + { + "id": "NeovVt5c-iw0t5pOXrKgK", + "type": "arrow" + } + ], + "updated": 1695657341151, + "link": null, + "locked": false + }, + { + "type": "text", + "version": 561, + "versionNonce": 1556519664, + "isDeleted": false, + "id": "K5jKFuMd_7-HgR-yqxJgF", + "fillStyle": "hachure", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "angle": 0, + "x": 637.1100033646215, + "y": 486.8114058238705, + "strokeColor": "#1e1e1e", + "backgroundColor": "#ffc9c9", + "width": 107.39224243164062, + "height": 40, + "seed": 1817206512, + "groupIds": [], + "frameId": null, + "roundness": null, + "boundElements": [], + "updated": 1695657328702, + "link": null, + "locked": false, + "fontSize": 16, + "fontFamily": 1, + "text": "Platformatic \nService", + "textAlign": "center", + "verticalAlign": "middle", + "containerId": "CB7NVRbf3dXgBTg75oVV9", + "originalText": "Platformatic Service", + "lineHeight": 1.25, + "baseline": 34 + }, + { + "type": "text", + "version": 87, + "versionNonce": 858824432, + "isDeleted": false, + "id": "Yq3ABWGZ7TwZVd1bH5XjD", + "fillStyle": "hachure", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "angle": 0, + "x": 715.202036750852, + "y": 440.8114058238705, + "strokeColor": "#1e1e1e", + "backgroundColor": "#ffc9c9", + "width": 86.20817565917969, + "height": 20, + "seed": 454846192, + "groupIds": [], + "frameId": null, + "roundness": null, + "boundElements": [], + "updated": 1695657328702, + "link": null, + "locked": false, + "fontSize": 16, + "fontFamily": 1, + "text": "GET /hello", + "textAlign": "center", + "verticalAlign": "top", + "containerId": null, + "originalText": "GET /hello", + "lineHeight": 1.25, + "baseline": 14 + }, + { + "type": "rectangle", + "version": 1900, + "versionNonce": 2056731664, + "isDeleted": false, + "id": "wxGmWoc24CHjYtu54mR2u", + "fillStyle": "hachure", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "angle": 0, + "x": 629.1327468802207, + "y": 587.5781003767802, + "strokeColor": "#000000", + "backgroundColor": "#ffc9c9", + "width": 141, + "height": 53, + "seed": 1733493488, + "groupIds": [], + "frameId": null, + "roundness": null, + "boundElements": [ + { + "type": "text", + "id": "Y9O3c2895N4OE-kHj4T50" + }, + { + "id": "NeovVt5c-iw0t5pOXrKgK", + "type": "arrow" + }, + { + "id": "l9dgrSTghFQfl_Hi2vJfg", + "type": "arrow" + } + ], + "updated": 1695657345767, + "link": null, + "locked": false + }, + { + "type": "text", + "version": 649, + "versionNonce": 1235584528, + "isDeleted": false, + "id": "Y9O3c2895N4OE-kHj4T50", + "fillStyle": "hachure", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "angle": 0, + "x": 645.9366256644004, + "y": 594.0781003767802, + "strokeColor": "#1e1e1e", + "backgroundColor": "#ffc9c9", + "width": 107.39224243164062, + "height": 40, + "seed": 2111120624, + "groupIds": [], + "frameId": null, + "roundness": null, + "boundElements": [], + "updated": 1695657328702, + "link": null, + "locked": false, + "fontSize": 16, + "fontFamily": 1, + "text": "Platformatic \nService", + "textAlign": "center", + "verticalAlign": "middle", + "containerId": "wxGmWoc24CHjYtu54mR2u", + "originalText": "Platformatic Service", + "lineHeight": 1.25, + "baseline": 34 + }, + { + "type": "rectangle", + "version": 1960, + "versionNonce": 613512432, + "isDeleted": false, + "id": "PKmFqCqd9TFoz1AEvwjGU", + "fillStyle": "hachure", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "angle": 0, + "x": 804.7800154152209, + "y": 588.0883200994354, + "strokeColor": "#000000", + "backgroundColor": "#ffc9c9", + "width": 141, + "height": 53, + "seed": 76399856, + "groupIds": [], + "frameId": null, + "roundness": null, + "boundElements": [ + { + "type": "text", + "id": "MuIrivM_qqake1vkshWj5" + }, + { + "id": "l9dgrSTghFQfl_Hi2vJfg", + "type": "arrow" + }, + { + "id": "_oc8oUZ0njyC1sunTKbfX", + "type": "arrow" + } + ], + "updated": 1695657359139, + "link": null, + "locked": false + }, + { + "type": "text", + "version": 709, + "versionNonce": 1965704208, + "isDeleted": false, + "id": "MuIrivM_qqake1vkshWj5", + "fillStyle": "hachure", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "angle": 0, + "x": 821.5838941994006, + "y": 594.5883200994354, + "strokeColor": "#1e1e1e", + "backgroundColor": "#ffc9c9", + "width": 107.39224243164062, + "height": 40, + "seed": 1785177840, + "groupIds": [], + "frameId": null, + "roundness": null, + "boundElements": [], + "updated": 1695657328702, + "link": null, + "locked": false, + "fontSize": 16, + "fontFamily": 1, + "text": "Platformatic \nService", + "textAlign": "center", + "verticalAlign": "middle", + "containerId": "PKmFqCqd9TFoz1AEvwjGU", + "originalText": "Platformatic Service", + "lineHeight": 1.25, + "baseline": 34 + }, + { + "id": "hHcS1gSPDnJC_dqLxSwW1", + "type": "arrow", + "x": 658.280015415221, + "y": 532.5883200994352, + "width": 107, + "height": 47, + "angle": 0, + "strokeColor": "#1e1e1e", + "backgroundColor": "#a5d8ff", + "fillStyle": "hachure", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "groupIds": [], + "frameId": null, + "roundness": { + "type": 2 + }, + "seed": 1362208496, + "version": 32, + "versionNonce": 2135294992, + "isDeleted": false, + "boundElements": null, + "updated": 1695657336909, + "link": null, + "locked": false, + "points": [ + [ + 0, + 0 + ], + [ + -107, + 47 + ] + ], + "lastCommittedPoint": null, + "startBinding": null, + "endBinding": { + "elementId": "KdE0UbbyBYKbHc2cSI--n", + "focus": -0.434869562857135, + "gap": 8.322695099435236 + }, + "startArrowhead": null, + "endArrowhead": "arrow" + }, + { + "id": "NeovVt5c-iw0t5pOXrKgK", + "type": "arrow", + "x": 694.280015415221, + "y": 535.5883200994352, + "width": 1, + "height": 46, + "angle": 0, + "strokeColor": "#1e1e1e", + "backgroundColor": "#a5d8ff", + "fillStyle": "hachure", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "groupIds": [], + "frameId": null, + "roundness": { + "type": 2 + }, + "seed": 1468022800, + "version": 28, + "versionNonce": 2085336592, + "isDeleted": false, + "boundElements": null, + "updated": 1695657384646, + "link": null, + "locked": false, + "points": [ + [ + 0, + 0 + ], + [ + 1, + 46 + ] + ], + "lastCommittedPoint": null, + "startBinding": { + "elementId": "CB7NVRbf3dXgBTg75oVV9", + "focus": -0.040074037046727344, + "gap": 2.2769142755647636 + }, + "endBinding": { + "elementId": "wxGmWoc24CHjYtu54mR2u", + "focus": -0.05130321673425322, + "gap": 5.9897802773449484 + }, + "startArrowhead": null, + "endArrowhead": "arrow" + }, + { + "id": "l9dgrSTghFQfl_Hi2vJfg", + "type": "arrow", + "x": 774.280015415221, + "y": 615.5883200994352, + "width": 26, + "height": 0, + "angle": 0, + "strokeColor": "#1e1e1e", + "backgroundColor": "#a5d8ff", + "fillStyle": "hachure", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "groupIds": [], + "frameId": null, + "roundness": { + "type": 2 + }, + "seed": 1114641136, + "version": 14, + "versionNonce": 1249196560, + "isDeleted": false, + "boundElements": null, + "updated": 1695657345767, + "link": null, + "locked": false, + "points": [ + [ + 0, + 0 + ], + [ + 26, + 0 + ] + ], + "lastCommittedPoint": null, + "startBinding": { + "elementId": "wxGmWoc24CHjYtu54mR2u", + "focus": 0.05698942349641702, + "gap": 4.147268535000308 + }, + "endBinding": { + "elementId": "PKmFqCqd9TFoz1AEvwjGU", + "focus": -0.037735849056599484, + "gap": 4.499999999999886 + }, + "startArrowhead": null, + "endArrowhead": "arrow" + }, + { + "type": "rectangle", + "version": 1845, + "versionNonce": 1435302128, + "isDeleted": false, + "id": "FlUx8pw--tNcksfaSfVqW", + "fillStyle": "hachure", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "angle": 0, + "x": 806.7800154152211, + "y": 675.0883200994351, + "strokeColor": "#2f9e44", + "backgroundColor": "#b2f2bb", + "width": 139, + "height": 55, + "seed": 1934669040, + "groupIds": [], + "frameId": null, + "roundness": null, + "boundElements": [ + { + "type": "text", + "id": "BjziG5IQyXByepY_7T_mB" + }, + { + "id": "_oc8oUZ0njyC1sunTKbfX", + "type": "arrow" + } + ], + "updated": 1695657359139, + "link": null, + "locked": false + }, + { + "type": "text", + "version": 553, + "versionNonce": 1769787632, + "isDeleted": false, + "id": "BjziG5IQyXByepY_7T_mB", + "fillStyle": "hachure", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "angle": 0, + "x": 822.5838941994008, + "y": 682.5883200994351, + "strokeColor": "#1e1e1e", + "backgroundColor": "#ffc9c9", + "width": 107.39224243164062, + "height": 40, + "seed": 1665963760, + "groupIds": [], + "frameId": null, + "roundness": null, + "boundElements": [], + "updated": 1695657354421, + "link": null, + "locked": false, + "fontSize": 16, + "fontFamily": 1, + "text": "Platformatic \nDB", + "textAlign": "center", + "verticalAlign": "middle", + "containerId": "FlUx8pw--tNcksfaSfVqW", + "originalText": "Platformatic DB", + "lineHeight": 1.25, + "baseline": 34 + }, + { + "id": "_oc8oUZ0njyC1sunTKbfX", + "type": "arrow", + "x": 874.280015415221, + "y": 643.5883200994352, + "width": 0, + "height": 29, + "angle": 0, + "strokeColor": "#1e1e1e", + "backgroundColor": "#a5d8ff", + "fillStyle": "hachure", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "groupIds": [], + "frameId": null, + "roundness": { + "type": 2 + }, + "seed": 1069528080, + "version": 18, + "versionNonce": 779441904, + "isDeleted": false, + "boundElements": null, + "updated": 1695657359139, + "link": null, + "locked": false, + "points": [ + [ + 0, + 0 + ], + [ + 0, + 29 + ] + ], + "lastCommittedPoint": null, + "startBinding": { + "elementId": "PKmFqCqd9TFoz1AEvwjGU", + "focus": 0.014184397163118955, + "gap": 2.4999999999998863 + }, + "endBinding": { + "elementId": "FlUx8pw--tNcksfaSfVqW", + "focus": -0.028776978417267823, + "gap": 2.4999999999998863 + }, + "startArrowhead": null, + "endArrowhead": "arrow" + } + ], + "appState": { + "gridSize": null, + "viewBackgroundColor": "#ffffff" + }, + "files": {} +} \ No newline at end of file diff --git a/versioned_docs/version-0.47.2/getting-started/platformatid-stackables-architecture.excalidraw b/versioned_docs/version-0.47.2/getting-started/platformatid-stackables-architecture.excalidraw new file mode 100644 index 0000000000..bde60b0610 --- /dev/null +++ b/versioned_docs/version-0.47.2/getting-started/platformatid-stackables-architecture.excalidraw @@ -0,0 +1,812 @@ +{ + "type": "excalidraw", + "version": 2, + "source": "https://excalidraw.com", + "elements": [ + { + "type": "rectangle", + "version": 703, + "versionNonce": 1521383664, + "isDeleted": false, + "id": "1zlVmmd_Y9S9Oz0S_fTUH", + "fillStyle": "hachure", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "angle": 0, + "x": 440.666015625, + "y": 354.265625, + "strokeColor": "#000000", + "backgroundColor": "#fab005", + "width": 512.21875, + "height": 73.2265625, + "seed": 418516020, + "groupIds": [], + "frameId": null, + "roundness": null, + "boundElements": [ + { + "id": "zfmfD9pZLlP_G075cvUTv", + "type": "arrow" + } + ], + "updated": 1695657392735, + "link": null, + "locked": false + }, + { + "type": "text", + "version": 304, + "versionNonce": 634082320, + "isDeleted": false, + "id": "R_U11fvrIlgCS1IlhmWIQ", + "fillStyle": "hachure", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "angle": 0, + "x": 614.58984375, + "y": 380.25390625, + "strokeColor": "#000000", + "backgroundColor": "transparent", + "width": 136, + "height": 25, + "seed": 553319692, + "groupIds": [], + "frameId": null, + "roundness": null, + "boundElements": [], + "updated": 1695657328702, + "link": null, + "locked": false, + "fontSize": 20, + "fontFamily": 1, + "text": "Your Frontend", + "textAlign": "left", + "verticalAlign": "top", + "containerId": null, + "originalText": "Your Frontend", + "lineHeight": 1.25, + "baseline": 18 + }, + { + "type": "rectangle", + "version": 1973, + "versionNonce": 739560976, + "isDeleted": false, + "id": "W06kzPlnPRgvKtfyagn_y", + "fillStyle": "hachure", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "angle": 0, + "x": 420.49609375, + "y": 480.2578125, + "strokeColor": "#000000", + "backgroundColor": "#a5d8ff", + "width": 553.26171875, + "height": 260.80078125000006, + "seed": 1222202124, + "groupIds": [], + "frameId": null, + "roundness": null, + "boundElements": [ + { + "id": "zfmfD9pZLlP_G075cvUTv", + "type": "arrow" + } + ], + "updated": 1695657901892, + "link": null, + "locked": false + }, + { + "type": "text", + "version": 1871, + "versionNonce": 661017104, + "isDeleted": false, + "id": "b8p9mgZWBw2sgu28jjLm-", + "fillStyle": "hachure", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "angle": 0, + "x": 450.9140625, + "y": 493.640625, + "strokeColor": "#000000", + "backgroundColor": "#40c057", + "width": 73.5399169921875, + "height": 25, + "seed": 759852684, + "groupIds": [], + "frameId": null, + "roundness": null, + "boundElements": [], + "updated": 1695657328702, + "link": null, + "locked": false, + "fontSize": 20, + "fontFamily": 1, + "text": "Runtime", + "textAlign": "left", + "verticalAlign": "top", + "containerId": null, + "originalText": "Runtime", + "lineHeight": 1.25, + "baseline": 18 + }, + { + "type": "arrow", + "version": 2786, + "versionNonce": 332870384, + "isDeleted": false, + "id": "zfmfD9pZLlP_G075cvUTv", + "fillStyle": "hachure", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "angle": 0, + "x": 691.3053158193559, + "y": 434.2265625, + "strokeColor": "#000000", + "backgroundColor": "#40c057", + "width": 1.8721843840042993, + "height": 36.35937499999994, + "seed": 740245132, + "groupIds": [], + "frameId": null, + "roundness": { + "type": 2 + }, + "boundElements": [], + "updated": 1695657879413, + "link": null, + "locked": false, + "startBinding": { + "elementId": "1zlVmmd_Y9S9Oz0S_fTUH", + "focus": 0.029853696615881286, + "gap": 6.734375 + }, + "endBinding": { + "elementId": "CB7NVRbf3dXgBTg75oVV9", + "focus": 0.05895350503727777, + "gap": 9.72546832387053 + }, + "lastCommittedPoint": null, + "startArrowhead": null, + "endArrowhead": "arrow", + "points": [ + [ + 0, + 0 + ], + [ + 1.8721843840042993, + 36.35937499999994 + ] + ] + }, + { + "type": "rectangle", + "version": 1804, + "versionNonce": 1577779728, + "isDeleted": false, + "id": "KdE0UbbyBYKbHc2cSI--n", + "fillStyle": "hachure", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "angle": 0, + "x": 457.67526520544186, + "y": 587.9110151988705, + "strokeColor": "#2f9e44", + "backgroundColor": "#b2f2bb", + "width": 139, + "height": 55, + "seed": 1167708912, + "groupIds": [], + "frameId": null, + "roundness": null, + "boundElements": [ + { + "type": "text", + "id": "1vfeZipGktYps97zQ2ZHs" + }, + { + "id": "hHcS1gSPDnJC_dqLxSwW1", + "type": "arrow" + } + ], + "updated": 1695657336909, + "link": null, + "locked": false + }, + { + "type": "text", + "version": 513, + "versionNonce": 1958426864, + "isDeleted": false, + "id": "1vfeZipGktYps97zQ2ZHs", + "fillStyle": "hachure", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "angle": 0, + "x": 473.47914398962155, + "y": 595.4110151988705, + "strokeColor": "#1e1e1e", + "backgroundColor": "#ffc9c9", + "width": 107.39224243164062, + "height": 40, + "seed": 1868188176, + "groupIds": [], + "frameId": null, + "roundness": null, + "boundElements": [], + "updated": 1695657328702, + "link": null, + "locked": false, + "fontSize": 16, + "fontFamily": 1, + "text": "Platformatic \nDB", + "textAlign": "center", + "verticalAlign": "middle", + "containerId": "KdE0UbbyBYKbHc2cSI--n", + "originalText": "Platformatic DB", + "lineHeight": 1.25, + "baseline": 34 + }, + { + "type": "rectangle", + "version": 1811, + "versionNonce": 990260464, + "isDeleted": false, + "id": "CB7NVRbf3dXgBTg75oVV9", + "fillStyle": "hachure", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "angle": 0, + "x": 620.3061245804419, + "y": 480.3114058238705, + "strokeColor": "#000000", + "backgroundColor": "#ffc9c9", + "width": 141, + "height": 53, + "seed": 53312752, + "groupIds": [], + "frameId": null, + "roundness": null, + "boundElements": [ + { + "type": "text", + "id": "K5jKFuMd_7-HgR-yqxJgF" + }, + { + "id": "zfmfD9pZLlP_G075cvUTv", + "type": "arrow" + }, + { + "id": "NeovVt5c-iw0t5pOXrKgK", + "type": "arrow" + } + ], + "updated": 1695657341151, + "link": null, + "locked": false + }, + { + "type": "text", + "version": 572, + "versionNonce": 1666362384, + "isDeleted": false, + "id": "K5jKFuMd_7-HgR-yqxJgF", + "fillStyle": "hachure", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "angle": 0, + "x": 651.58203400427, + "y": 496.8114058238705, + "strokeColor": "#1e1e1e", + "backgroundColor": "#ffc9c9", + "width": 78.44818115234375, + "height": 20, + "seed": 1817206512, + "groupIds": [], + "frameId": null, + "roundness": null, + "boundElements": [], + "updated": 1695657891140, + "link": null, + "locked": false, + "fontSize": 16, + "fontFamily": 1, + "text": "Entrypoint", + "textAlign": "center", + "verticalAlign": "middle", + "containerId": "CB7NVRbf3dXgBTg75oVV9", + "originalText": "Entrypoint", + "lineHeight": 1.25, + "baseline": 14 + }, + { + "type": "text", + "version": 87, + "versionNonce": 858824432, + "isDeleted": false, + "id": "Yq3ABWGZ7TwZVd1bH5XjD", + "fillStyle": "hachure", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "angle": 0, + "x": 715.202036750852, + "y": 440.8114058238705, + "strokeColor": "#1e1e1e", + "backgroundColor": "#ffc9c9", + "width": 86.20817565917969, + "height": 20, + "seed": 454846192, + "groupIds": [], + "frameId": null, + "roundness": null, + "boundElements": [], + "updated": 1695657328702, + "link": null, + "locked": false, + "fontSize": 16, + "fontFamily": 1, + "text": "GET /hello", + "textAlign": "center", + "verticalAlign": "top", + "containerId": null, + "originalText": "GET /hello", + "lineHeight": 1.25, + "baseline": 14 + }, + { + "type": "rectangle", + "version": 1900, + "versionNonce": 2056731664, + "isDeleted": false, + "id": "wxGmWoc24CHjYtu54mR2u", + "fillStyle": "hachure", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "angle": 0, + "x": 629.1327468802207, + "y": 587.5781003767802, + "strokeColor": "#000000", + "backgroundColor": "#ffc9c9", + "width": 141, + "height": 53, + "seed": 1733493488, + "groupIds": [], + "frameId": null, + "roundness": null, + "boundElements": [ + { + "type": "text", + "id": "Y9O3c2895N4OE-kHj4T50" + }, + { + "id": "NeovVt5c-iw0t5pOXrKgK", + "type": "arrow" + }, + { + "id": "l9dgrSTghFQfl_Hi2vJfg", + "type": "arrow" + } + ], + "updated": 1695657345767, + "link": null, + "locked": false + }, + { + "type": "text", + "version": 649, + "versionNonce": 1235584528, + "isDeleted": false, + "id": "Y9O3c2895N4OE-kHj4T50", + "fillStyle": "hachure", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "angle": 0, + "x": 645.9366256644004, + "y": 594.0781003767802, + "strokeColor": "#1e1e1e", + "backgroundColor": "#ffc9c9", + "width": 107.39224243164062, + "height": 40, + "seed": 2111120624, + "groupIds": [], + "frameId": null, + "roundness": null, + "boundElements": [], + "updated": 1695657328702, + "link": null, + "locked": false, + "fontSize": 16, + "fontFamily": 1, + "text": "Platformatic \nService", + "textAlign": "center", + "verticalAlign": "middle", + "containerId": "wxGmWoc24CHjYtu54mR2u", + "originalText": "Platformatic Service", + "lineHeight": 1.25, + "baseline": 34 + }, + { + "type": "rectangle", + "version": 1960, + "versionNonce": 613512432, + "isDeleted": false, + "id": "PKmFqCqd9TFoz1AEvwjGU", + "fillStyle": "hachure", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "angle": 0, + "x": 804.7800154152209, + "y": 588.0883200994354, + "strokeColor": "#000000", + "backgroundColor": "#ffc9c9", + "width": 141, + "height": 53, + "seed": 76399856, + "groupIds": [], + "frameId": null, + "roundness": null, + "boundElements": [ + { + "type": "text", + "id": "MuIrivM_qqake1vkshWj5" + }, + { + "id": "l9dgrSTghFQfl_Hi2vJfg", + "type": "arrow" + }, + { + "id": "_oc8oUZ0njyC1sunTKbfX", + "type": "arrow" + } + ], + "updated": 1695657359139, + "link": null, + "locked": false + }, + { + "type": "text", + "version": 709, + "versionNonce": 1965704208, + "isDeleted": false, + "id": "MuIrivM_qqake1vkshWj5", + "fillStyle": "hachure", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "angle": 0, + "x": 821.5838941994006, + "y": 594.5883200994354, + "strokeColor": "#1e1e1e", + "backgroundColor": "#ffc9c9", + "width": 107.39224243164062, + "height": 40, + "seed": 1785177840, + "groupIds": [], + "frameId": null, + "roundness": null, + "boundElements": [], + "updated": 1695657328702, + "link": null, + "locked": false, + "fontSize": 16, + "fontFamily": 1, + "text": "Platformatic \nService", + "textAlign": "center", + "verticalAlign": "middle", + "containerId": "PKmFqCqd9TFoz1AEvwjGU", + "originalText": "Platformatic Service", + "lineHeight": 1.25, + "baseline": 34 + }, + { + "id": "hHcS1gSPDnJC_dqLxSwW1", + "type": "arrow", + "x": 658.280015415221, + "y": 532.5883200994352, + "width": 107, + "height": 47, + "angle": 0, + "strokeColor": "#1e1e1e", + "backgroundColor": "#a5d8ff", + "fillStyle": "hachure", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "groupIds": [], + "frameId": null, + "roundness": { + "type": 2 + }, + "seed": 1362208496, + "version": 34, + "versionNonce": 1783846128, + "isDeleted": false, + "boundElements": null, + "updated": 1695657879413, + "link": null, + "locked": false, + "points": [ + [ + 0, + 0 + ], + [ + -107, + 47 + ] + ], + "lastCommittedPoint": null, + "startBinding": null, + "endBinding": { + "elementId": "KdE0UbbyBYKbHc2cSI--n", + "focus": -0.434869562857135, + "gap": 8.322695099435236 + }, + "startArrowhead": null, + "endArrowhead": "arrow" + }, + { + "id": "NeovVt5c-iw0t5pOXrKgK", + "type": "arrow", + "x": 694.280015415221, + "y": 535.5883200994352, + "width": 1, + "height": 46, + "angle": 0, + "strokeColor": "#1e1e1e", + "backgroundColor": "#a5d8ff", + "fillStyle": "hachure", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "groupIds": [], + "frameId": null, + "roundness": { + "type": 2 + }, + "seed": 1468022800, + "version": 32, + "versionNonce": 1012324592, + "isDeleted": false, + "boundElements": null, + "updated": 1695657879413, + "link": null, + "locked": false, + "points": [ + [ + 0, + 0 + ], + [ + 1, + 46 + ] + ], + "lastCommittedPoint": null, + "startBinding": { + "elementId": "CB7NVRbf3dXgBTg75oVV9", + "focus": -0.040074037046727344, + "gap": 2.2769142755647636 + }, + "endBinding": { + "elementId": "wxGmWoc24CHjYtu54mR2u", + "focus": -0.05130321673425322, + "gap": 5.9897802773449484 + }, + "startArrowhead": null, + "endArrowhead": "arrow" + }, + { + "id": "l9dgrSTghFQfl_Hi2vJfg", + "type": "arrow", + "x": 774.280015415221, + "y": 615.5883200994352, + "width": 26, + "height": 0, + "angle": 0, + "strokeColor": "#1e1e1e", + "backgroundColor": "#a5d8ff", + "fillStyle": "hachure", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "groupIds": [], + "frameId": null, + "roundness": { + "type": 2 + }, + "seed": 1114641136, + "version": 18, + "versionNonce": 1044995312, + "isDeleted": false, + "boundElements": null, + "updated": 1695657879413, + "link": null, + "locked": false, + "points": [ + [ + 0, + 0 + ], + [ + 26, + 0 + ] + ], + "lastCommittedPoint": null, + "startBinding": { + "elementId": "wxGmWoc24CHjYtu54mR2u", + "focus": 0.05698942349641702, + "gap": 4.147268535000308 + }, + "endBinding": { + "elementId": "PKmFqCqd9TFoz1AEvwjGU", + "focus": -0.037735849056599484, + "gap": 4.499999999999886 + }, + "startArrowhead": null, + "endArrowhead": "arrow" + }, + { + "type": "rectangle", + "version": 1845, + "versionNonce": 1435302128, + "isDeleted": false, + "id": "FlUx8pw--tNcksfaSfVqW", + "fillStyle": "hachure", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "angle": 0, + "x": 806.7800154152211, + "y": 675.0883200994351, + "strokeColor": "#2f9e44", + "backgroundColor": "#b2f2bb", + "width": 139, + "height": 55, + "seed": 1934669040, + "groupIds": [], + "frameId": null, + "roundness": null, + "boundElements": [ + { + "type": "text", + "id": "BjziG5IQyXByepY_7T_mB" + }, + { + "id": "_oc8oUZ0njyC1sunTKbfX", + "type": "arrow" + } + ], + "updated": 1695657359139, + "link": null, + "locked": false + }, + { + "type": "text", + "version": 553, + "versionNonce": 1769787632, + "isDeleted": false, + "id": "BjziG5IQyXByepY_7T_mB", + "fillStyle": "hachure", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "angle": 0, + "x": 822.5838941994008, + "y": 682.5883200994351, + "strokeColor": "#1e1e1e", + "backgroundColor": "#ffc9c9", + "width": 107.39224243164062, + "height": 40, + "seed": 1665963760, + "groupIds": [], + "frameId": null, + "roundness": null, + "boundElements": [], + "updated": 1695657354421, + "link": null, + "locked": false, + "fontSize": 16, + "fontFamily": 1, + "text": "Platformatic \nDB", + "textAlign": "center", + "verticalAlign": "middle", + "containerId": "FlUx8pw--tNcksfaSfVqW", + "originalText": "Platformatic DB", + "lineHeight": 1.25, + "baseline": 34 + }, + { + "id": "_oc8oUZ0njyC1sunTKbfX", + "type": "arrow", + "x": 874.280015415221, + "y": 643.5883200994352, + "width": 0, + "height": 29, + "angle": 0, + "strokeColor": "#1e1e1e", + "backgroundColor": "#a5d8ff", + "fillStyle": "hachure", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 0, + "opacity": 100, + "groupIds": [], + "frameId": null, + "roundness": { + "type": 2 + }, + "seed": 1069528080, + "version": 22, + "versionNonce": 7004400, + "isDeleted": false, + "boundElements": null, + "updated": 1695657879413, + "link": null, + "locked": false, + "points": [ + [ + 0, + 0 + ], + [ + 0, + 29 + ] + ], + "lastCommittedPoint": null, + "startBinding": { + "elementId": "PKmFqCqd9TFoz1AEvwjGU", + "focus": 0.014184397163118955, + "gap": 2.4999999999998863 + }, + "endBinding": { + "elementId": "FlUx8pw--tNcksfaSfVqW", + "focus": -0.028776978417267823, + "gap": 2.4999999999998863 + }, + "startArrowhead": null, + "endArrowhead": "arrow" + } + ], + "appState": { + "gridSize": null, + "viewBackgroundColor": "#ffffff" + }, + "files": {} +} \ No newline at end of file diff --git a/versioned_docs/version-0.45.0/getting-started/quick-start-guide.md b/versioned_docs/version-0.47.2/getting-started/quick-start-guide.md similarity index 100% rename from versioned_docs/version-0.45.0/getting-started/quick-start-guide.md rename to versioned_docs/version-0.47.2/getting-started/quick-start-guide.md diff --git a/versioned_docs/version-0.45.0/guides/add-custom-functionality/extend-graphql.md b/versioned_docs/version-0.47.2/guides/add-custom-functionality/extend-graphql.md similarity index 100% rename from versioned_docs/version-0.45.0/guides/add-custom-functionality/extend-graphql.md rename to versioned_docs/version-0.47.2/guides/add-custom-functionality/extend-graphql.md diff --git a/versioned_docs/version-0.45.0/guides/add-custom-functionality/extend-rest.md b/versioned_docs/version-0.47.2/guides/add-custom-functionality/extend-rest.md similarity index 100% rename from versioned_docs/version-0.45.0/guides/add-custom-functionality/extend-rest.md rename to versioned_docs/version-0.47.2/guides/add-custom-functionality/extend-rest.md diff --git a/versioned_docs/version-0.45.0/guides/add-custom-functionality/introduction.md b/versioned_docs/version-0.47.2/guides/add-custom-functionality/introduction.md similarity index 100% rename from versioned_docs/version-0.45.0/guides/add-custom-functionality/introduction.md rename to versioned_docs/version-0.47.2/guides/add-custom-functionality/introduction.md diff --git a/versioned_docs/version-0.45.0/guides/add-custom-functionality/prerequisites.md b/versioned_docs/version-0.47.2/guides/add-custom-functionality/prerequisites.md similarity index 100% rename from versioned_docs/version-0.45.0/guides/add-custom-functionality/prerequisites.md rename to versioned_docs/version-0.47.2/guides/add-custom-functionality/prerequisites.md diff --git a/versioned_docs/version-0.45.0/guides/add-custom-functionality/raw-sql.md b/versioned_docs/version-0.47.2/guides/add-custom-functionality/raw-sql.md similarity index 100% rename from versioned_docs/version-0.45.0/guides/add-custom-functionality/raw-sql.md rename to versioned_docs/version-0.47.2/guides/add-custom-functionality/raw-sql.md diff --git a/versioned_docs/version-0.45.0/guides/packaging-an-application-as-a-module.md b/versioned_docs/version-0.47.2/guides/applications-with-stackables.md similarity index 82% rename from versioned_docs/version-0.45.0/guides/packaging-an-application-as-a-module.md rename to versioned_docs/version-0.47.2/guides/applications-with-stackables.md index 51314a6006..e434c12713 100644 --- a/versioned_docs/version-0.45.0/guides/packaging-an-application-as-a-module.md +++ b/versioned_docs/version-0.47.2/guides/applications-with-stackables.md @@ -1,8 +1,10 @@ -# Packaging a Platformatic Application as a module +# Use Stackables to build Platformatic applications [Platformatic Service](/docs/reference/db/introduction.md) and [Platformatic DB](/docs/reference/db/introduction.md) offer a good starting point to create new applications. However, most developers or organizations might want to create reusable services or applications built on top of Platformatic. +We call these reusable services "Stackables" because you can create an application by stacking services on top of them. + This is useful to publish the application on the public npm registry (or a private one!), including building your own CLI, or to create a specialized template for your organization to allow for centralized bugfixes and updates. @@ -114,16 +116,21 @@ Consuming `foo.js` is simple. We can create a `platformatic.json` file as follow Note that we __must__ specify both the `$schema` property and `module`. Module can also be any modules published on npm and installed via your package manager. -## Building your own CLI +:::note +The `module` is the name of the module we are actually "stacking" on top of. +::: -It is possible to build your own CLI with the following `cli.mjs` file: +## Building your own CLI +If you want to create your own CLI for your service on top of a Stackable you can just importing the base module and then start it, e.g.: -``` -import foo from './foo.js' +```js +import base from 'mybasemodule' // Import here your base module import { start } from '@platformatic/service' import { printAndExitLoadConfigError } from '@platformatic/config' -await start(foo, process.argv.splice(2)).catch(printConfigValidationErrors) +await start(base, process.argv.splice(2)).catch(printAndExitLoadConfigError) ``` -This will also load `platformatic.foo.json` files. +This is the same as running with platformatic CLI, the `platformatic.json` file will be loaded from the current directory. + + diff --git a/versioned_docs/version-0.45.0/guides/compiling-typescript-for-deployment.md b/versioned_docs/version-0.47.2/guides/compiling-typescript-for-deployment.md similarity index 100% rename from versioned_docs/version-0.45.0/guides/compiling-typescript-for-deployment.md rename to versioned_docs/version-0.47.2/guides/compiling-typescript-for-deployment.md diff --git a/versioned_docs/version-0.45.0/guides/debug-platformatic-db.md b/versioned_docs/version-0.47.2/guides/debug-platformatic-db.md similarity index 100% rename from versioned_docs/version-0.45.0/guides/debug-platformatic-db.md rename to versioned_docs/version-0.47.2/guides/debug-platformatic-db.md diff --git a/versioned_docs/version-0.45.0/guides/deploying-on-lambda.md b/versioned_docs/version-0.47.2/guides/deploying-on-lambda.md similarity index 100% rename from versioned_docs/version-0.45.0/guides/deploying-on-lambda.md rename to versioned_docs/version-0.47.2/guides/deploying-on-lambda.md diff --git a/versioned_docs/version-0.45.0/guides/deployment/advanced-fly-io-deployment.md b/versioned_docs/version-0.47.2/guides/deployment/advanced-fly-io-deployment.md similarity index 100% rename from versioned_docs/version-0.45.0/guides/deployment/advanced-fly-io-deployment.md rename to versioned_docs/version-0.47.2/guides/deployment/advanced-fly-io-deployment.md diff --git a/versioned_docs/version-0.45.0/guides/deployment/deploy-to-fly-io-with-sqlite.md b/versioned_docs/version-0.47.2/guides/deployment/deploy-to-fly-io-with-sqlite.md similarity index 100% rename from versioned_docs/version-0.45.0/guides/deployment/deploy-to-fly-io-with-sqlite.md rename to versioned_docs/version-0.47.2/guides/deployment/deploy-to-fly-io-with-sqlite.md diff --git a/versioned_docs/version-0.45.0/guides/deployment/deployment.md b/versioned_docs/version-0.47.2/guides/deployment/deployment.md similarity index 100% rename from versioned_docs/version-0.45.0/guides/deployment/deployment.md rename to versioned_docs/version-0.47.2/guides/deployment/deployment.md diff --git a/versioned_docs/version-0.45.0/guides/dockerize-platformatic-app.md b/versioned_docs/version-0.47.2/guides/dockerize-platformatic-app.md similarity index 100% rename from versioned_docs/version-0.45.0/guides/dockerize-platformatic-app.md rename to versioned_docs/version-0.47.2/guides/dockerize-platformatic-app.md diff --git a/versioned_docs/version-0.45.0/guides/generate-frontend-code-to-consume-platformatic-rest-api.md b/versioned_docs/version-0.47.2/guides/generate-frontend-code-to-consume-platformatic-rest-api.md similarity index 98% rename from versioned_docs/version-0.45.0/guides/generate-frontend-code-to-consume-platformatic-rest-api.md rename to versioned_docs/version-0.47.2/guides/generate-frontend-code-to-consume-platformatic-rest-api.md index d1d9418773..1e36556eba 100644 --- a/versioned_docs/version-0.45.0/guides/generate-frontend-code-to-consume-platformatic-rest-api.md +++ b/versioned_docs/version-0.47.2/guides/generate-frontend-code-to-consume-platformatic-rest-api.md @@ -109,7 +109,7 @@ Now that either the Platformatic app and the front-end app are running, go to th ```bash cd rest-api-frontend/src -npx platformatic frontend http://127.0.0.1:3042 ts +npx platformatic client http://127.0.0.1:3042 --frontend --language ts ``` Refer to the [Platformatic CLI frontend command](https://docs.platformatic.dev/docs/reference/cli#frontend) @@ -176,7 +176,7 @@ You can add a `--name` option to the command line to provide a custom name for t ```bash cd rest-api-frontend/src -npx platformatic frontend --name foobar http://127.0.0.1:3042 ts +npx platformatic client http://127.0.0.1:3042 --frontend --name foobar --language ts ``` will generated `foobar.ts` and `foobar-types.d.ts` diff --git a/versioned_docs/version-0.45.0/guides/images/frontend-screenshot-1.jpg b/versioned_docs/version-0.47.2/guides/images/frontend-screenshot-1.jpg similarity index 100% rename from versioned_docs/version-0.45.0/guides/images/frontend-screenshot-1.jpg rename to versioned_docs/version-0.47.2/guides/images/frontend-screenshot-1.jpg diff --git a/versioned_docs/version-0.45.0/guides/images/frontend-screenshot-2.jpg b/versioned_docs/version-0.47.2/guides/images/frontend-screenshot-2.jpg similarity index 100% rename from versioned_docs/version-0.45.0/guides/images/frontend-screenshot-2.jpg rename to versioned_docs/version-0.47.2/guides/images/frontend-screenshot-2.jpg diff --git a/versioned_docs/version-0.45.0/guides/images/frontend-screenshot-3.jpg b/versioned_docs/version-0.47.2/guides/images/frontend-screenshot-3.jpg similarity index 100% rename from versioned_docs/version-0.45.0/guides/images/frontend-screenshot-3.jpg rename to versioned_docs/version-0.47.2/guides/images/frontend-screenshot-3.jpg diff --git a/versioned_docs/version-0.45.0/guides/images/frontend-screenshot-4.jpg b/versioned_docs/version-0.47.2/guides/images/frontend-screenshot-4.jpg similarity index 100% rename from versioned_docs/version-0.45.0/guides/images/frontend-screenshot-4.jpg rename to versioned_docs/version-0.47.2/guides/images/frontend-screenshot-4.jpg diff --git a/versioned_docs/version-0.45.0/guides/jwt-auth0.md b/versioned_docs/version-0.47.2/guides/jwt-auth0.md similarity index 100% rename from versioned_docs/version-0.45.0/guides/jwt-auth0.md rename to versioned_docs/version-0.47.2/guides/jwt-auth0.md diff --git a/versioned_docs/version-0.45.0/guides/migrating-express-app-to-platformatic-service.md b/versioned_docs/version-0.47.2/guides/migrating-express-app-to-platformatic-service.md similarity index 100% rename from versioned_docs/version-0.45.0/guides/migrating-express-app-to-platformatic-service.md rename to versioned_docs/version-0.47.2/guides/migrating-express-app-to-platformatic-service.md diff --git a/versioned_docs/version-0.45.0/guides/migrating-fastify-app-to-platformatic-service.md b/versioned_docs/version-0.47.2/guides/migrating-fastify-app-to-platformatic-service.md similarity index 100% rename from versioned_docs/version-0.45.0/guides/migrating-fastify-app-to-platformatic-service.md rename to versioned_docs/version-0.47.2/guides/migrating-fastify-app-to-platformatic-service.md diff --git a/versioned_docs/version-0.45.0/guides/monitoring.md b/versioned_docs/version-0.47.2/guides/monitoring.md similarity index 100% rename from versioned_docs/version-0.45.0/guides/monitoring.md rename to versioned_docs/version-0.47.2/guides/monitoring.md diff --git a/versioned_docs/version-0.45.0/guides/prisma.md b/versioned_docs/version-0.47.2/guides/prisma.md similarity index 100% rename from versioned_docs/version-0.45.0/guides/prisma.md rename to versioned_docs/version-0.47.2/guides/prisma.md diff --git a/versioned_docs/version-0.45.0/guides/securing-platformatic-db.md b/versioned_docs/version-0.47.2/guides/securing-platformatic-db.md similarity index 100% rename from versioned_docs/version-0.45.0/guides/securing-platformatic-db.md rename to versioned_docs/version-0.47.2/guides/securing-platformatic-db.md diff --git a/versioned_docs/version-0.45.0/guides/seed-a-database.md b/versioned_docs/version-0.47.2/guides/seed-a-database.md similarity index 100% rename from versioned_docs/version-0.45.0/guides/seed-a-database.md rename to versioned_docs/version-0.47.2/guides/seed-a-database.md diff --git a/versioned_docs/version-0.45.0/guides/telemetry-images/compose-openapi.png b/versioned_docs/version-0.47.2/guides/telemetry-images/compose-openapi.png similarity index 100% rename from versioned_docs/version-0.45.0/guides/telemetry-images/compose-openapi.png rename to versioned_docs/version-0.47.2/guides/telemetry-images/compose-openapi.png diff --git a/versioned_docs/version-0.45.0/guides/telemetry-images/jaeger-1.png b/versioned_docs/version-0.47.2/guides/telemetry-images/jaeger-1.png similarity index 100% rename from versioned_docs/version-0.45.0/guides/telemetry-images/jaeger-1.png rename to versioned_docs/version-0.47.2/guides/telemetry-images/jaeger-1.png diff --git a/versioned_docs/version-0.45.0/guides/telemetry-images/jaeger-2.png b/versioned_docs/version-0.47.2/guides/telemetry-images/jaeger-2.png similarity index 100% rename from versioned_docs/version-0.45.0/guides/telemetry-images/jaeger-2.png rename to versioned_docs/version-0.47.2/guides/telemetry-images/jaeger-2.png diff --git a/versioned_docs/version-0.45.0/guides/telemetry-images/jaeger-3.png b/versioned_docs/version-0.47.2/guides/telemetry-images/jaeger-3.png similarity index 100% rename from versioned_docs/version-0.45.0/guides/telemetry-images/jaeger-3.png rename to versioned_docs/version-0.47.2/guides/telemetry-images/jaeger-3.png diff --git a/versioned_docs/version-0.45.0/guides/telemetry.md b/versioned_docs/version-0.47.2/guides/telemetry.md similarity index 100% rename from versioned_docs/version-0.45.0/guides/telemetry.md rename to versioned_docs/version-0.47.2/guides/telemetry.md diff --git a/versioned_docs/version-0.45.0/platformatic-cloud/deploy-database-neon.md b/versioned_docs/version-0.47.2/platformatic-cloud/deploy-database-neon.md similarity index 100% rename from versioned_docs/version-0.45.0/platformatic-cloud/deploy-database-neon.md rename to versioned_docs/version-0.47.2/platformatic-cloud/deploy-database-neon.md diff --git a/versioned_docs/version-0.45.0/platformatic-cloud/images/quick-start-guide/app-workspace-static-deployed.png b/versioned_docs/version-0.47.2/platformatic-cloud/images/quick-start-guide/app-workspace-static-deployed.png similarity index 100% rename from versioned_docs/version-0.45.0/platformatic-cloud/images/quick-start-guide/app-workspace-static-deployed.png rename to versioned_docs/version-0.47.2/platformatic-cloud/images/quick-start-guide/app-workspace-static-deployed.png diff --git a/versioned_docs/version-0.45.0/platformatic-cloud/images/quick-start-guide/button-continue-with-github.png b/versioned_docs/version-0.47.2/platformatic-cloud/images/quick-start-guide/button-continue-with-github.png similarity index 100% rename from versioned_docs/version-0.45.0/platformatic-cloud/images/quick-start-guide/button-continue-with-github.png rename to versioned_docs/version-0.47.2/platformatic-cloud/images/quick-start-guide/button-continue-with-github.png diff --git a/versioned_docs/version-0.45.0/platformatic-cloud/images/quick-start-guide/cloud-apps-empty.png b/versioned_docs/version-0.47.2/platformatic-cloud/images/quick-start-guide/cloud-apps-empty.png similarity index 100% rename from versioned_docs/version-0.45.0/platformatic-cloud/images/quick-start-guide/cloud-apps-empty.png rename to versioned_docs/version-0.47.2/platformatic-cloud/images/quick-start-guide/cloud-apps-empty.png diff --git a/versioned_docs/version-0.45.0/platformatic-cloud/images/quick-start-guide/github-pr-deploy-comment.png b/versioned_docs/version-0.47.2/platformatic-cloud/images/quick-start-guide/github-pr-deploy-comment.png similarity index 100% rename from versioned_docs/version-0.45.0/platformatic-cloud/images/quick-start-guide/github-pr-deploy-comment.png rename to versioned_docs/version-0.47.2/platformatic-cloud/images/quick-start-guide/github-pr-deploy-comment.png diff --git a/versioned_docs/version-0.45.0/platformatic-cloud/images/quick-start-guide/github-pr-deploy-in-progress.png b/versioned_docs/version-0.47.2/platformatic-cloud/images/quick-start-guide/github-pr-deploy-in-progress.png similarity index 100% rename from versioned_docs/version-0.45.0/platformatic-cloud/images/quick-start-guide/github-pr-deploy-in-progress.png rename to versioned_docs/version-0.47.2/platformatic-cloud/images/quick-start-guide/github-pr-deploy-in-progress.png diff --git a/versioned_docs/version-0.47.2/platformatic-cloud/images/quick-start-guide/github-pr-risk-calculation-comment.png b/versioned_docs/version-0.47.2/platformatic-cloud/images/quick-start-guide/github-pr-risk-calculation-comment.png new file mode 100644 index 0000000000..2cea58f527 Binary files /dev/null and b/versioned_docs/version-0.47.2/platformatic-cloud/images/quick-start-guide/github-pr-risk-calculation-comment.png differ diff --git a/versioned_docs/version-0.45.0/platformatic-cloud/images/quick-start-guide/hello-json-response.png b/versioned_docs/version-0.47.2/platformatic-cloud/images/quick-start-guide/hello-json-response.png similarity index 100% rename from versioned_docs/version-0.45.0/platformatic-cloud/images/quick-start-guide/hello-json-response.png rename to versioned_docs/version-0.47.2/platformatic-cloud/images/quick-start-guide/hello-json-response.png diff --git a/versioned_docs/version-0.45.0/platformatic-cloud/images/quick-start-guide/platformatic-db-swagger-ui.png b/versioned_docs/version-0.47.2/platformatic-cloud/images/quick-start-guide/platformatic-db-swagger-ui.png similarity index 100% rename from versioned_docs/version-0.45.0/platformatic-cloud/images/quick-start-guide/platformatic-db-swagger-ui.png rename to versioned_docs/version-0.47.2/platformatic-cloud/images/quick-start-guide/platformatic-db-swagger-ui.png diff --git a/versioned_docs/version-0.45.0/platformatic-cloud/images/quick-start-guide/workspace-create-dynamic.png b/versioned_docs/version-0.47.2/platformatic-cloud/images/quick-start-guide/workspace-create-dynamic.png similarity index 100% rename from versioned_docs/version-0.45.0/platformatic-cloud/images/quick-start-guide/workspace-create-dynamic.png rename to versioned_docs/version-0.47.2/platformatic-cloud/images/quick-start-guide/workspace-create-dynamic.png diff --git a/versioned_docs/version-0.45.0/platformatic-cloud/pricing.md b/versioned_docs/version-0.47.2/platformatic-cloud/pricing.md similarity index 100% rename from versioned_docs/version-0.45.0/platformatic-cloud/pricing.md rename to versioned_docs/version-0.47.2/platformatic-cloud/pricing.md diff --git a/versioned_docs/version-0.45.0/platformatic-cloud/quick-start-guide.md b/versioned_docs/version-0.47.2/platformatic-cloud/quick-start-guide.md similarity index 84% rename from versioned_docs/version-0.45.0/platformatic-cloud/quick-start-guide.md rename to versioned_docs/version-0.47.2/platformatic-cloud/quick-start-guide.md index 7dddbe035b..0ebedfda57 100644 --- a/versioned_docs/version-0.45.0/platformatic-cloud/quick-start-guide.md +++ b/versioned_docs/version-0.47.2/platformatic-cloud/quick-start-guide.md @@ -242,3 +242,26 @@ you should receive a response from the endpoint that you just added to your application. ![Screenshot of a JSON response from an API endpoint](./images/quick-start-guide/hello-json-response.png) + +## Calculate the risk of a pull request + +You can use the Platformatic Cloud API to calculate the risk of a pull request +being merged into your production environment. The risk score is calculated +based on the potential breaking changes in the application API. For example, if a +pull request adds a new endpoint, it will not be considered a breaking change +and will not increase the risk score. However, if a pull request changes the +open API specification for an existing endpoint, it will be considered a +breaking change and will increase the risk score. + +To calculate the risk score for a pull request, you can use the Platformatic Risk +Calculation GitHub Action. If you are using the latest version of the Platformatic +app creator, this action will already be set up for you. If not, here is an [example](https://github.com/platformatic/onestep#deploy-app-to-the-dynamic-workspace-and-calculate-the-risk) +of how to set it up. + +When a Platformatic Deploy Action is finished, the Platformatic Risk Calculation +Action will be triggered. The risk score will be calculated for each production +workspace that exists for your app. Besides the risk score, the action will also +return a list of breaking changes that were detected in the pull request and show +the graph of services that are affected by the changes. + +![Screenshot of a risk calculation comment on a GitHub pull request](./images/quick-start-guide/github-pr-risk-calculation-comment.png) diff --git a/versioned_docs/version-0.45.0/reference/cli.md b/versioned_docs/version-0.47.2/reference/cli.md similarity index 98% rename from versioned_docs/version-0.45.0/reference/cli.md rename to versioned_docs/version-0.47.2/reference/cli.md index 167ef234ab..fd799355e6 100644 --- a/versioned_docs/version-0.45.0/reference/cli.md +++ b/versioned_docs/version-0.47.2/reference/cli.md @@ -93,7 +93,6 @@ Welcome to Platformatic. Available commands are: * `deploy` - deploy a Platformatic application to the cloud. * `runtime` - start Platformatic Runtime; type `platformatic runtime help` to know more. * `start` - start a Platformatic application. -* `frontend`- create frontend code to consume the REST APIs. #### compile @@ -273,11 +272,13 @@ Options: * `-n, --name ` - Name of the client. * `-f, --folder ` - Name of the plugin folder, defaults to --name value. * `-t, --typescript` - Generate the client plugin in TypeScript. +* `--frontend` - Generated a browser-compatible client that uses `fetch` * `--full-response` - Client will return full response object rather than just the body. -* `--full-request` - Client will be called with all parameters wrapped in `body`, `headers` and `query` properties. +* `--full-request` - Client will be called with all parameters wrapped in `body`, `headers` and `query` properties. Ignored if `--frontend` * `--full` - Enables both `--full-request` and `--full-response` overriding them. -* `--optional-headers ` - Comma separated string of headers that will be marked as optional in the type file -* `--validate-response` - If set, will validate the response body against the schema. +* `--optional-headers ` - Comma separated string of headers that will be marked as optional in the type file. Ignored if `--frontend` +* `--validate-response` - If set, will validate the response body against the schema. Ignored if `--frontend` +* `--language js|ts` - Generate a Javascript or Typescript frontend client. Only works if `--frontend` @@ -743,7 +744,7 @@ save the following as `platformatic.service.json`: ### frontend ```bash -platformatic frontend +platformatic client --frontend --language ``` diff --git a/versioned_docs/version-0.45.0/reference/client/frontend.md b/versioned_docs/version-0.47.2/reference/client/frontend.md similarity index 96% rename from versioned_docs/version-0.45.0/reference/client/frontend.md rename to versioned_docs/version-0.47.2/reference/client/frontend.md index 5273d3ff23..6721486a1e 100644 --- a/versioned_docs/version-0.45.0/reference/client/frontend.md +++ b/versioned_docs/version-0.47.2/reference/client/frontend.md @@ -5,7 +5,7 @@ Create implementation and type files that exposes a client for a remote OpenAPI To create a client for a remote OpenAPI API, you can use the following command: ```bash -$ platformatic frontend http://exmaple.com/to/schema/file --name +$ platformatic client http://exmaple.com/to/schema/file --frontend --language --name ``` where `` can be either `js` or `ts`. diff --git a/versioned_docs/version-0.45.0/reference/client/introduction.md b/versioned_docs/version-0.47.2/reference/client/introduction.md similarity index 99% rename from versioned_docs/version-0.45.0/reference/client/introduction.md rename to versioned_docs/version-0.47.2/reference/client/introduction.md index 53d47b9904..263cce4a84 100644 --- a/versioned_docs/version-0.45.0/reference/client/introduction.md +++ b/versioned_docs/version-0.47.2/reference/client/introduction.md @@ -16,7 +16,7 @@ $ platformatic client http://exmaple.com/grapqhl --name myclient ## Usage with Platformatic Service or Platformatic DB -If you run the generator in in a Platformatic application, and it will +If you run the generator in a Platformatic application, and it will automatically extend it to load your client by editing the configuration file and adding a `clients` section. Then, in any part of your Platformatic application you can use the client. diff --git a/versioned_docs/version-0.45.0/reference/client/programmatic.md b/versioned_docs/version-0.47.2/reference/client/programmatic.md similarity index 100% rename from versioned_docs/version-0.45.0/reference/client/programmatic.md rename to versioned_docs/version-0.47.2/reference/client/programmatic.md diff --git a/versioned_docs/version-0.45.0/reference/composer/api-modification.md b/versioned_docs/version-0.47.2/reference/composer/api-modification.md similarity index 100% rename from versioned_docs/version-0.45.0/reference/composer/api-modification.md rename to versioned_docs/version-0.47.2/reference/composer/api-modification.md diff --git a/versioned_docs/version-0.47.2/reference/composer/configuration.md b/versioned_docs/version-0.47.2/reference/composer/configuration.md new file mode 100644 index 0000000000..fb85bbe98b --- /dev/null +++ b/versioned_docs/version-0.47.2/reference/composer/configuration.md @@ -0,0 +1,220 @@ +# Configuration + +Platformatic Composer configured with a configuration file. It supports the use +of environment variables as setting values with [configuration placeholders](#configuration-placeholders). + +## Configuration file + +If the Platformatic CLI finds a file in the current working directory matching +one of these filenames, it will automatically load it: + +- `platformatic.composer.json` +- `platformatic.composer.json5` +- `platformatic.composer.yml` or `platformatic.composer.yaml` +- `platformatic.composer.tml` or `platformatic.composer.toml` + +Alternatively, a [`--config` option](/reference/cli.md#composer) with a configuration +filepath can be passed to most `platformatic composer` CLI commands. + +The configuration examples in this reference use JSON. + +### Supported formats + +| Format | Extensions | +| :-- | :-- | +| JSON | `.json` | +| JSON5 | `.json5` | +| YAML | `.yml`, `.yaml` | +| TOML | `.tml` | + +Comments are supported by the JSON5, YAML and TOML file formats. + +## Settings + +Configuration settings are organised into the following groups: + +- [`server`](#server) **(required)** +- [`composer`](#composer) +- [`metrics`](#metrics) +- [`plugins`](#plugins) +- [`telemetry`](#telemetry) +- [`watch`](#watch) +- [`clients`](#clients) + +Sensitive configuration settings containing sensitive data should be set using [configuration placeholders](#configuration-placeholders). + +### `server` + +See [Platformatic Service server](/docs/reference/service/configuration.md#server) for more details. + +### `metrics` + +See [Platformatic Service metrics](/docs/reference/service/configuration.md#metrics) for more details. + +### `plugins` + +See [Platformatic Service plugins](/docs/reference/service/configuration.md#plugins) for more details. + +### `composer` + +Configure `@platformatic/composer` specific settings such as `services` or `refreshTimeout`: + +- **`services`** (`array`, default: `[]`) — is an array of objects that defines +the services managed by the composer. Each service object supports the following settings: + + - **`id`** (**required**, `string`) - A unique identifier for the service. Use a Platformatic Runtime service id if the service is executing inside of [Platformatic Runtime context](/docs/reference/runtime/introduction.md#platformatic-runtime-context). + - **`origin`** (`string`) - A service origin. Skip this option if the service is executing inside of [Platformatic Runtime context](/docs/reference/runtime/introduction.md#platformatic-runtime-context). In this case, service id will be used instead of origin. + - **`openapi`** (**required**, `object`) - The configuration file used to compose OpenAPI specification. See the [openapi](#openapi) for details. + - **`proxy`** (`object` or `false`) - Service proxy configuration. If `false`, the service proxy is disabled. + - `prefix` (**required**, `string`) - Service proxy prefix. All service routes will be prefixed with this value. + +- **`openapi`** (`object`) - See the Platformatic Service [service](/docs/reference/service/configuration.md#service) openapi option for details. + +- **`refreshTimeout`** (`number`) - The number of milliseconds to wait for check for changes in the service OpenAPI specification. If not specified, the default value is `1000`. + +#### `openapi` + +- **`url`** (`string`) - A path of the route that exposes the OpenAPI specification. If a service is a Platformatic Service or Platformatic DB, use `/documentation/json` as a value. Use this or `file` option to specify the OpenAPI specification. +- **`file`** (`string`) - A path to the OpenAPI specification file. Use this or `url` option to specify the OpenAPI specification. +- **`prefix`** (`string`) - A prefix for the OpenAPI specification. All service routes will be prefixed with this value. +- **`config`** (`string`) - A path to the OpenAPI configuration file. This file is used to customize the OpenAPI specification. See the [openapi-configuration](#openapi-configuration) for details. + +##### `openapi-configuration` + +The OpenAPI configuration file is a JSON file that is used to customize the OpenAPI specification. It supports the following options: + +- **`ignore`** (`boolean`) - If `true`, the route will be ignored by the composer. +If you want to ignore a specific method, use the `ignore` option in the nested method object. + + _Example_ + + ```json + { + "paths": { + "/users": { + "ignore": true + }, + "/users/{id}": { + "get": { "ignore": true }, + "put": { "ignore": true } + } + } + } + ``` + +- **alias** (`string`) - Use it create an alias for the route path. Original route path will be ignored. + + _Example_ + + ```json + { + "paths": { + "/users": { + "alias": "/customers" + } + } + } + ``` + +- **`rename`** (`string`) - Use it to rename composed route response fields. +Use json schema format to describe the response structure. For now it works only for `200` response. + + _Example_ + + ```json + { + "paths": { + "/users": { + "responses": { + "200": { + "type": "array", + "items": { + "type": "object", + "properties": { + "id": { "rename": "user_id" }, + "name": { "rename": "first_name" } + } + } + } + } + } + } + } + ``` + +_Examples_ + + Composition of two remote services: + + ```json + { + "composer": { + "services": [ + { + "id": "auth-service", + "origin": "https://auth-service.com", + "openapi": { + "url": "/documentation/json", + "prefix": "auth" + } + }, + { + "id": "payment-service", + "origin": "https://payment-service.com", + "openapi": { + "file": "./schemas/payment-service.json" + } + } + ], + "refreshTimeout": 1000 + } + } + ``` + + Composition of two local services inside of Platformatic Runtime: + + ```json + { + "composer": { + "services": [ + { + "id": "auth-service", + "openapi": { + "url": "/documentation/json", + "prefix": "auth" + } + }, + { + "id": "payment-service", + "openapi": { + "file": "./schemas/payment-service.json" + } + } + ], + "refreshTimeout": 1000 + } + } + ``` +### `telemetry` + +See [Platformatic Service telemetry](/docs/reference/service/configuration.md#telemetry) for more details. + +### `watch` + +See [Platformatic Service watch](/docs/reference/service/configuration.md#watch) for more details. + +### `clients` + +See [Platformatic Service clients](/docs/reference/service/configuration.md#clients) for more details. + +## Environment variable placeholders + +See [Environment variable placeholders](/docs/reference/service/configuration.md#environment-variable-placeholders) for more details. + +### Setting environment variables + +See [Setting environment variables](/docs/reference/service/configuration.md#setting-environment-variables) for more details. + +### Allowed placeholder names + +See [Allowed placeholder names](/docs/reference/service/configuration.md#allowed-placeholder-names) for more details. diff --git a/versioned_docs/version-0.45.0/reference/composer/introduction.md b/versioned_docs/version-0.47.2/reference/composer/introduction.md similarity index 88% rename from versioned_docs/version-0.45.0/reference/composer/introduction.md rename to versioned_docs/version-0.47.2/reference/composer/introduction.md index 3765627466..d924cc02be 100644 --- a/versioned_docs/version-0.45.0/reference/composer/introduction.md +++ b/versioned_docs/version-0.47.2/reference/composer/introduction.md @@ -3,10 +3,6 @@ Platformatic Composer is an HTTP server that automatically aggregates multiple services APIs into a single API. -:::info -Platformatic Composer is currently in [public beta](#public-beta). -::: - ## Features - Command-line interface: [`platformatic composer`](/reference/cli.md#composer) @@ -15,10 +11,7 @@ Platformatic Composer is currently in [public beta](#public-beta). - Add custom functionality in a [Fastify plugin](/reference/composer/plugin.md) - Write plugins in JavaScript or [TypeScript](/reference/cli.md#compile) -## Public beta - -Platformatic Composer is in public beta. You can use it in production, but it's quite -likely that you'll encounter significant bugs. +## Issues If you run into a bug or have a suggestion for improvement, please [raise an issue on GitHub](https://github.com/platformatic/platformatic/issues/new). diff --git a/versioned_docs/version-0.45.0/reference/composer/plugin.md b/versioned_docs/version-0.47.2/reference/composer/plugin.md similarity index 100% rename from versioned_docs/version-0.45.0/reference/composer/plugin.md rename to versioned_docs/version-0.47.2/reference/composer/plugin.md diff --git a/versioned_docs/version-0.45.0/reference/composer/programmatic.md b/versioned_docs/version-0.47.2/reference/composer/programmatic.md similarity index 100% rename from versioned_docs/version-0.45.0/reference/composer/programmatic.md rename to versioned_docs/version-0.47.2/reference/composer/programmatic.md diff --git a/versioned_docs/version-0.45.0/reference/db/authorization/images/http.png b/versioned_docs/version-0.47.2/reference/db/authorization/images/http.png similarity index 100% rename from versioned_docs/version-0.45.0/reference/db/authorization/images/http.png rename to versioned_docs/version-0.47.2/reference/db/authorization/images/http.png diff --git a/versioned_docs/version-0.45.0/reference/db/authorization/images/jwt.png b/versioned_docs/version-0.47.2/reference/db/authorization/images/jwt.png similarity index 100% rename from versioned_docs/version-0.45.0/reference/db/authorization/images/jwt.png rename to versioned_docs/version-0.47.2/reference/db/authorization/images/jwt.png diff --git a/versioned_docs/version-0.45.0/reference/db/authorization/images/sources/http.excalidraw b/versioned_docs/version-0.47.2/reference/db/authorization/images/sources/http.excalidraw similarity index 100% rename from versioned_docs/version-0.45.0/reference/db/authorization/images/sources/http.excalidraw rename to versioned_docs/version-0.47.2/reference/db/authorization/images/sources/http.excalidraw diff --git a/versioned_docs/version-0.45.0/reference/db/authorization/images/sources/jwt.excalidraw b/versioned_docs/version-0.47.2/reference/db/authorization/images/sources/jwt.excalidraw similarity index 100% rename from versioned_docs/version-0.45.0/reference/db/authorization/images/sources/jwt.excalidraw rename to versioned_docs/version-0.47.2/reference/db/authorization/images/sources/jwt.excalidraw diff --git a/versioned_docs/version-0.45.0/reference/db/authorization/images/sources/webhook.excalidraw b/versioned_docs/version-0.47.2/reference/db/authorization/images/sources/webhook.excalidraw similarity index 100% rename from versioned_docs/version-0.45.0/reference/db/authorization/images/sources/webhook.excalidraw rename to versioned_docs/version-0.47.2/reference/db/authorization/images/sources/webhook.excalidraw diff --git a/versioned_docs/version-0.45.0/reference/db/authorization/images/webhook.png b/versioned_docs/version-0.47.2/reference/db/authorization/images/webhook.png similarity index 100% rename from versioned_docs/version-0.45.0/reference/db/authorization/images/webhook.png rename to versioned_docs/version-0.47.2/reference/db/authorization/images/webhook.png diff --git a/versioned_docs/version-0.45.0/reference/db/authorization/introduction.md b/versioned_docs/version-0.47.2/reference/db/authorization/introduction.md similarity index 100% rename from versioned_docs/version-0.45.0/reference/db/authorization/introduction.md rename to versioned_docs/version-0.47.2/reference/db/authorization/introduction.md diff --git a/versioned_docs/version-0.45.0/reference/db/authorization/rules.md b/versioned_docs/version-0.47.2/reference/db/authorization/rules.md similarity index 100% rename from versioned_docs/version-0.45.0/reference/db/authorization/rules.md rename to versioned_docs/version-0.47.2/reference/db/authorization/rules.md diff --git a/versioned_docs/version-0.45.0/reference/db/authorization/strategies.md b/versioned_docs/version-0.47.2/reference/db/authorization/strategies.md similarity index 100% rename from versioned_docs/version-0.45.0/reference/db/authorization/strategies.md rename to versioned_docs/version-0.47.2/reference/db/authorization/strategies.md diff --git a/versioned_docs/version-0.45.0/reference/db/authorization/user-roles-metadata.md b/versioned_docs/version-0.47.2/reference/db/authorization/user-roles-metadata.md similarity index 100% rename from versioned_docs/version-0.45.0/reference/db/authorization/user-roles-metadata.md rename to versioned_docs/version-0.47.2/reference/db/authorization/user-roles-metadata.md diff --git a/versioned_docs/version-0.47.2/reference/db/configuration.md b/versioned_docs/version-0.47.2/reference/db/configuration.md new file mode 100644 index 0000000000..5840f7ea97 --- /dev/null +++ b/versioned_docs/version-0.47.2/reference/db/configuration.md @@ -0,0 +1,438 @@ +# Configuration + +Platformatic DB is configured with a configuration file. It supports the use +of environment variables as setting values with [configuration placeholders](#configuration-placeholders). + +## Configuration file + +If the Platformatic CLI finds a file in the current working directory matching +one of these filenames, it will automatically load it: + +- `platformatic.db.json` +- `platformatic.db.json5` +- `platformatic.db.yml` or `platformatic.db.yaml` +- `platformatic.db.tml` or `platformatic.db.toml` + +Alternatively, a [`--config` option](/reference/cli.md#db) with a configuration +filepath can be passed to most `platformatic db` CLI commands. + +The configuration examples in this reference use JSON. + +### Supported formats + +| Format | Extensions | +| :-- | :-- | +| JSON | `.json` | +| JSON5 | `.json5` | +| YAML | `.yml`, `.yaml` | +| TOML | `.tml` | + +Comments are supported by the JSON5, YAML and TOML file formats. + +## Settings + +Configuration settings are organised into the following groups: + +- [`server`](#server) **(required)** +- [`db`](#db) **(required)** +- [`metrics`](#metrics) +- [`migrations`](#migrations) +- [`plugins`](#plugins) +- [`authorization`](#authorization) +- [`telemetry`](#telemetry) +- [`watch`](#watch) +- [`clients`](#clients) + +Sensitive configuration settings, such as a database connection URL that contains +a password, should be set using [configuration placeholders](#configuration-placeholders). + +### `server` + +See [Platformatic Service server](/docs/reference/service/configuration.md#server) for more details. + +### `db` + +A **required** object with the following settings: + +- **`connectionString`** (**required**, `string`) — Database connection URL. + - Example: `postgres://user:password@my-database:5432/db-name` + +- ** `schema`** (array of `string`) - Currently supported only for postgres, schemas used tolook for entities. If not provided, the default `public` schema is used. + + _Examples_ + +```json + "db": { + "connectionString": "(...)", + "schema": [ + "schema1", "schema2" + ], + ... + + }, + +``` + + - Platformatic DB supports MySQL, MariaDB, PostgreSQL and SQLite. +- **`graphql`** (`boolean` or `object`, default: `true`) — Controls the GraphQL API interface, with optional GraphiQL UI. + + _Examples_ + + Enables GraphQL support + + ```json + { + "db": { + ... + "graphql": true + } + } + ``` + + Enables GraphQL support with GraphiQL + + ```json + { + "db": { + ... + "graphql": { + "graphiql": true + } + } + } + ``` + + It's possible to selectively ignore entites: + + ```json + { + "db": { + ... + "graphql": { + "ignore": { + "categories": true + } + } + } + } + ``` + + It's possible to selectively ignore fields: + + ```json + { + "db": { + ... + "graphql": { + "ignore": { + "categories": { + "name": true + } + } + } + } + } + ``` + + It's possible to add a custom GraphQL schema during the startup: + + ```json + { + "db": { + ... + "graphql": { + "schemaPath": "path/to/schema.graphql" + } + } + } + } + ``` + +- **`openapi`** (`boolean` or `object`, default: `true`) — Enables OpenAPI REST support. + - If value is an object, all [OpenAPI v3](https://swagger.io/specification/) allowed properties can be passed. Also a `prefix` property can be passed to set the OpenAPI prefix. + - Platformatic DB uses [`@fastify/swagger`](https://github.com/fastify/fastify-swagger) under the hood to manage this configuration. + + _Examples_ + + Enables OpenAPI + + ```json + { + "db": { + ... + "openapi": true + } + } + ``` + + Enables OpenAPI with prefix + + ```json + { + "db": { + ... + "openapi": { + "prefix": "/api" + } + } + } + ``` + + Enables OpenAPI with options + + ```json + { + "db": { + ... + "openapi": { + "info": { + "title": "Platformatic DB", + "description": "Exposing a SQL database as REST" + } + } + } + } + ``` + + You can for example add the `security` section, so that Swagger will allow you to add the authentication header to your requests. + In the following code snippet, we're adding a Bearer token in the form of a [JWT](/reference/db/authorization/strategies.md#json-web-token-jwt): + ```json + { + "db": { + ... + "openapi": { + ... + "security": [{ "bearerAuth": [] }], + "components": { + "securitySchemes": { + "bearerAuth": { + "type": "http", + "scheme": "bearer", + "bearerFormat": "JWT" + } + } + } + } + } + } + ``` + + It's possible to selectively ignore entites: + + ```json + { + "db": { + ... + "openapi": { + "ignore": { + "categories": true + } + } + } + } + ``` + + It's possible to selectively ignore fields: + + ```json + { + "db": { + ... + "openapi": { + "ignore": { + "categories": { + "name": true + } + } + } + } + } + ``` +- **`autoTimestamp`** (`boolean` or `object`) - Generate timestamp automatically when inserting/updating records. + +- **`poolSize`** (`number`, default: `10`) — Maximum number of connections in the connection pool. + +- **`limit`** (`object`) - Set the default and max limit for pagination. Default is 10, max is 1000. + + _Examples_ + + ```json + { + "db": { + ... + "limit": { + "default": 10, + "max": 1000 + } + } + } + ``` + +- **`ignore`** (`object`) — Key/value object that defines which database tables should not be mapped as API entities. + + _Examples_ + + ```json + { + "db": { + ... + "ignore": { + "versions": true // "versions" table will be not mapped with GraphQL/REST APIs + } + } + } + ``` + +- **`events`** (`boolean` or `object`, default: `true`) — Controls the support for events published by the SQL mapping layer. + If enabled, this option add support for GraphQL Subscription over WebSocket. By default it uses an in-process message broker. + It's possible to configure it to use Redis instead. + + _Examples_ + + ```json + { + "db": { + ... + "events": { + "connectionString": "redis://:password@redishost.com:6380/" + } + } + } + ``` + +- **`schemalock`** (`boolean` or `object`, default: `false`) — Controls the caching of the database schema on disk. + If set to `true` the database schema metadata is stored inside a `schema.lock` file. + It's also possible to configure the location of that file by specifying a path, like so: + + _Examples_ + + ```json + { + "db": { + ... + "schemalock": { + "path": "./dbmetadata" + } + } + } + ``` + + Starting Platformatic DB or running a migration will automatically create the schemalock file. + + +### `metrics` + +See [Platformatic Service metrics](/docs/reference/service/configuration.md#metrics) for more details. + +### `migrations` + +Configures [Postgrator](https://github.com/rickbergfalk/postgrator) to run migrations against the database. + +An optional object with the following settings: + +- **`dir`** (**required**, `string`): Relative path to the migrations directory. +- **`autoApply`** (`boolean`, default: `false`): Automatically apply migrations when Platformatic DB server starts. + +### `plugins` + +See [Platformatic Service plugins](/docs/reference/service/configuration.md#plugins) for more details. + +### `watch` + +See [Platformatic Service watch](/docs/reference/service/configuration.md#watch) for more details. + +### `authorization` + +An optional object with the following settings: + +- `adminSecret` (`string`): A secret that should be sent in an +`x-platformatic-admin-secret` HTTP header when performing GraphQL/REST API +calls. Use an [environment variable placeholder](#environment-variable-placeholders) +to securely provide the value for this setting. +- `roleKey` (`string`, default: `X-PLATFORMATIC-ROLE`): The name of the key in user + metadata that is used to store the user's roles. See [Role configuration](/docs/reference/db/authorization/user-roles-metadata#role-configuration). +- `anonymousRole` (`string`, default: `anonymous`): The name of the anonymous role. See [Role configuration](/docs/reference/db/authorization/user-roles-metadata#role-configuration). +- `jwt` (`object`): Configuration for the [JWT authorization strategy](/docs/reference/db/authorization/strategies#json-web-token-jwt). + Any option accepted by [`@fastify/jwt`](https://github.com/fastify/fastify-jwt) + can be passed in this object. + - `secret` (required, `string` or `object`): The secret key that the JWT was signed with. + See the [`@fastify/jwt` documentation](https://github.com/fastify/fastify-jwt#secret-required) + for accepted string and object values. Use an [environment variable placeholder](#environment-variable-placeholders) + to securely provide the value for this setting. + - `jwks` (`boolean` or `object`): Configure authorization with JSON Web Key Sets (JWKS). See the [JWKS documentation](/docs/reference/db/authorization/strategies#json-web-key-sets-jwks). + - `namespace` (`string`): Configure a [JWT Custom Claim Namespace](/docs/reference/db/authorization/strategies#jwt-custom-claim-namespace) + to avoid name collisions. +- `webhook` (`object`): Configuration for the [Webhook authorization strategy](/docs/reference/db/authorization/strategies#webhook). + - `url` (required, `string`): Webhook URL that Platformatic DB will make a + POST request to. +- `rules` (`array`): Authorization rules that describe the CRUD actions that + users are allowed to perform against entities. See [Rules](/docs/reference/db/authorization/rules) + documentation. + +:::note +If an `authorization` object is present, but no rules are specified, no CRUD +operations are allowed unless `adminSecret` is passed. +::: + +#### Example + +```json title="platformatic.db.json" +{ + "authorization": { + "jwt": { + "secret": "{PLT_AUTHORIZATION_JWT_SECRET}" + }, + "rules": [ + ... + ] + } +} +``` + +### `telemetry` + +See [Platformatic Service telemetry](/docs/reference/service/configuration.md#telemetry) for more details. + +### `watch` + +See [Platformatic Service watch](/docs/reference/service/configuration.md#watch) for more details. + +### `clients` + +See [Platformatic Service clients](/docs/reference/service/configuration.md#clients) for more details. + +## Environment variable placeholders + +See [Environment variable placeholders](/docs/reference/service/configuration.md#environment-variable-placeholders) for more details. + +### Setting environment variables + +See [Setting environment variables](/docs/reference/service/configuration.md#setting-environment-variables) for more details. + +### Allowed placeholder names + +See [Allowed placeholder names](/docs/reference/service/configuration.md#allowed-placeholder-names) for more details. + +## Sample Configuration + +This is a bare minimum configuration for Platformatic DB. Uses a local `./db.sqlite` SQLite database, with OpenAPI and GraphQL support. + +Server will listen to `http://127.0.0.1:3042` + +```json +{ + "server": { + "hostname": "127.0.0.1", + "port": "3042" + }, + "db": { + "connectionString": "sqlite://./db.sqlite", + "graphiql": true, + "openapi": true, + "graphql": true + } +} +``` + + + diff --git a/versioned_docs/version-0.45.0/reference/db/introduction.md b/versioned_docs/version-0.47.2/reference/db/introduction.md similarity index 92% rename from versioned_docs/version-0.45.0/reference/db/introduction.md rename to versioned_docs/version-0.47.2/reference/db/introduction.md index efcb7843e1..b5fe55ed8d 100644 --- a/versioned_docs/version-0.45.0/reference/db/introduction.md +++ b/versioned_docs/version-0.47.2/reference/db/introduction.md @@ -6,10 +6,6 @@ building robust APIs with Node.js. For a high level overview of how Platformatic DB works, please reference the [Architecture](/getting-started/architecture.md) guide. -:::info -Platformatic DB is currently in [public beta](#public-beta). -::: - ## Features - Command-line interface: [`platformatic db`](/reference/cli.md#db) @@ -55,10 +51,7 @@ The required database driver is automatically inferred and loaded based on the value of the [`connectionString`](/reference/db/configuration.md#core) configuration setting. -## Public beta - -Platformatic DB is in public beta. You can use it in production, but it's quite -likely that you'll encounter significant bugs. +## Issues If you run into a bug or have a suggestion for improvement, please [raise an issue on GitHub](https://github.com/platformatic/platformatic/issues/new). diff --git a/versioned_docs/version-0.45.0/reference/db/logging.md b/versioned_docs/version-0.47.2/reference/db/logging.md similarity index 100% rename from versioned_docs/version-0.45.0/reference/db/logging.md rename to versioned_docs/version-0.47.2/reference/db/logging.md diff --git a/versioned_docs/version-0.45.0/reference/db/migrations.md b/versioned_docs/version-0.47.2/reference/db/migrations.md similarity index 100% rename from versioned_docs/version-0.45.0/reference/db/migrations.md rename to versioned_docs/version-0.47.2/reference/db/migrations.md diff --git a/versioned_docs/version-0.45.0/reference/db/plugin.md b/versioned_docs/version-0.47.2/reference/db/plugin.md similarity index 100% rename from versioned_docs/version-0.45.0/reference/db/plugin.md rename to versioned_docs/version-0.47.2/reference/db/plugin.md diff --git a/versioned_docs/version-0.45.0/reference/db/programmatic.md b/versioned_docs/version-0.47.2/reference/db/programmatic.md similarity index 100% rename from versioned_docs/version-0.45.0/reference/db/programmatic.md rename to versioned_docs/version-0.47.2/reference/db/programmatic.md diff --git a/versioned_docs/version-0.45.0/reference/db/schema-support.md b/versioned_docs/version-0.47.2/reference/db/schema-support.md similarity index 100% rename from versioned_docs/version-0.45.0/reference/db/schema-support.md rename to versioned_docs/version-0.47.2/reference/db/schema-support.md diff --git a/versioned_docs/version-0.47.2/reference/errors.md b/versioned_docs/version-0.47.2/reference/errors.md new file mode 100644 index 0000000000..f607c0674c --- /dev/null +++ b/versioned_docs/version-0.47.2/reference/errors.md @@ -0,0 +1,309 @@ +# Platformatic Errors + +## @platformatic/authenticate + +### PLT_AUTHENTICATE_UNABLE_TO_CONTACT_LOGIN_SERVICE +**Message:** Unable to contact login service + +### PLT_AUTHENTICATE_UNABLE_TO_RETRIEVE_TOKENS +**Message:** Unable to retrieve tokens + +### PLT_AUTHENTICATE_USER_DID_NOT_AUTHENTICATE_BEFORE_EXPIRY +**Message:** User did not authenticate before expiry + +### PLT_AUTHENTICATE_CONFIG_OPTION_REQUIRES_PATH_TO_FILE +**Message:** --config option requires path to a file + +### PLT_AUTHENTICATE_UNABLE_TO_GET_USER_DATA +**Message:** Unable to get user data + +### PLT_AUTHENTICATE_UNABLE_TO_CLAIM_INVITE +**Message:** Unable to claim invite + +### PLT_AUTHENTICATE_MISSING_INVITE +**Message:** Missing invite + +## @platformatic/client + +### PLT_CLIENT_OPTIONS_URL_REQUIRED +**Message:** options.url is required + +## @platformatic/client-cli + +### PLT_CLIENT_CLI_UNKNOWN_TYPE +**Message:** Unknown type %s + +### PLT_CLIENT_CLI_TYPE_NOT_SUPPORTED +**Message:** Type %s not supported + +## @platformatic/composer + +### PLT_COMPOSER_FASTIFY_INSTANCE_IS_ALREADY_LISTENING +**Message:** Fastify instance is already listening. Cannot call "addComposerOnRouteHook"! + +### PLT_COMPOSER_FAILED_TO_FETCH_OPENAPI_SCHEMA +**Message:** Failed to fetch OpenAPI schema from %s + +### PLT_COMPOSER_VALIDATION_ERRORS +**Message:** Validation errors: %s + +### PLT_COMPOSER_PATH_ALREADY_EXISTS +**Message:** Path "%s" already exists + +### PLT_COMPOSER_COULD_NOT_READ_OPENAPI_CONFIG +**Message:** Could not read openapi config for "%s" service + +## @platformatic/config + +### PLT_CONFIG_CONFIGURATION_DOES_NOT_VALIDATE_AGAINST_SCHEMA +**Message:** The configuration does not validate against the configuration schema + +### PLT_CONFIG_SOURCE_MISSING +**Message:** Source missing. + +### PLT_CONFIG_INVALID_PLACEHOLDER +**Message:** %s is an invalid placeholder. All placeholders must be prefixed with PLT_. +Did you mean PLT_%s? + +### PLT_CONFIG_ENV_VAR_MISSING +**Message:** %s env variable is missing. + +### PLT_CONFIG_CANNOT_PARSE_CONFIG_FILE +**Message:** Cannot parse config file. %s + +### PLT_CONFIG_VALIDATION_ERRORS +**Message:** Validation errors: %s + +### PLT_CONFIG_APP_MUST_BE_A_FUNCTION +**Message:** app must be a function + +### PLT_CONFIG_SCHEMA_MUST_BE_DEFINED +**Message:** schema must be defined + +### PLT_CONFIG_SCHEMA_ID_MUST_BE_A_STRING +**Message:** schema.$id must be a string with length > 0 + +### PLT_CONFIG_CONFIG_TYPE_MUST_BE_A_STRING +**Message:** configType must be a string + +### PLT_CONFIG_ADD_A_MODULE_PROPERTY_TO_THE_CONFIG_OR_ADD_A_KNOWN_SCHEMA +**Message:** Add a module property to the config or add a known $schema. + +### PLT_CONFIG_VERSION_MISMATCH +**Message:** Version mismatch. You are running Platformatic %s but your app requires %s + +### PLT_CONFIG_NO_CONFIG_FILE_FOUND +**Message:** no config file found + +## @platformatic/db + +### PLT_DB_MIGRATE_ERROR +**Message:** Missing "migrations" section in config file + +### PLT_DB_UNKNOWN_DATABASE_ERROR +**Message:** Unknown database + +### PLT_DB_MIGRATE_ERROR +**Message:** Migrations directory %s does not exist + +### PLT_DB_MISSING_SEED_FILE_ERROR +**Message:** Missing seed file + +### PLT_DB_MIGRATIONS_TO_APPLY_ERROR +**Message:** You have migrations to apply. Please run `platformatic db migrations apply` first. + +## @platformatic/db-authorization + +### PLT_DB_AUTH_UNAUTHORIZED +**Message:** operation not allowed + +### PLT_DB_AUTH_FIELD_UNAUTHORIZED +**Message:** field not allowed: %s + +### PLT_DB_AUTH_NOT_NULLABLE_MISSING +**Message:** missing not nullable field: "%s" in save rule for entity "%s" + +## @platformatic/db-core + +**No errors defined** + +## @platformatic/deploy-client + +### PLT_SQL_DEPLOY_CLIENT_REQUEST_FAILED +**Message:** Request failed with status code: %s %s + +### PLT_SQL_DEPLOY_CLIENT_COULD_NOT_MAKE_PREWARM_CALL +**Message:** Could not make a prewarm call: %s + +### PLT_SQL_DEPLOY_CLIENT_INVALID_PLATFORMATIC_WORKSPACE_KEY +**Message:** Invalid platformatic_workspace_key provided + +### PLT_SQL_DEPLOY_CLIENT_COULD_NOT_CREATE_BUNDLE +**Message:** Could not create a bundle: %s + +### PLT_SQL_DEPLOY_CLIENT_FAILED_TO_UPLOAD_CODE_ARCHIVE +**Message:** Failed to upload code archive: %s + +### PLT_SQL_DEPLOY_CLIENT_COULD_NOT_CREATE_DEPLOYMENT +**Message:** Could not create a deployment: %s + +### PLT_SQL_DEPLOY_CLIENT_MISSING_CONFIG_FILE +**Message:** Missing config file! + +## @platformatic/metaconfig + +### PLT_SQL_METACONFIG_MISSING_FILE_OR_CONFIG +**Message:** missing file or config to analyze + +### PLT_SQL_METACONFIG_MISSING_SCHEMA +**Message:** missing $schema, unable to determine the version + +### PLT_SQL_METACONFIG_UNABLE_TO_DETERMINE_VERSION +**Message:** unable to determine the version + +### PLT_SQL_METACONFIG_INVALID_CONFIG_FILE_EXTENSION +**Message:** Invalid config file extension. Only yml, yaml, json, json5, toml, tml are supported. + +## @platformatic/runtime + +### PLT_SQL_RUNTIME_RUNTIME_EXIT +**Message:** The runtime exited before the operation completed + +### PLT_SQL_RUNTIME_UNKNOWN_RUNTIME_API_COMMAND +**Message:** Unknown Runtime API command "%s" + +### PLT_SQL_RUNTIME_SERVICE_NOT_FOUND +**Message:** Service with id '%s' not found + +### PLT_SQL_RUNTIME_SERVICE_NOT_STARTED +**Message:** Service with id '%s' is not started + +### PLT_SQL_RUNTIME_FAILED_TO_RETRIEVE_OPENAPI_SCHEMA +**Message:** Failed to retrieve OpenAPI schema for service with id "%s": %s + +### PLT_SQL_RUNTIME_APPLICATION_ALREADY_STARTED +**Message:** Application is already started + +### PLT_SQL_RUNTIME_APPLICATION_NOT_STARTED +**Message:** Application has not been started + +### PLT_SQL_RUNTIME_CONFIG_PATH_MUST_BE_STRING +**Message:** Config path must be a string + +### PLT_SQL_RUNTIME_NO_CONFIG_FILE_FOUND +**Message:** No config file found for service '%s' + +### PLT_SQL_RUNTIME_INVALID_ENTRYPOINT +**Message:** Invalid entrypoint: '%s' does not exist + +### PLT_SQL_RUNTIME_MISSING_DEPENDENCY +**Message:** Missing dependency: "%s" + +### PLT_SQL_RUNTIME_INSPECT_AND_INSPECT_BRK +**Message:** --inspect and --inspect-brk cannot be used together + +### PLT_SQL_RUNTIME_INSPECTOR_PORT +**Message:** Inspector port must be 0 or in range 1024 to 65535 + +### PLT_SQL_RUNTIME_INSPECTOR_HOST +**Message:** Inspector host cannot be empty + +### PLT_SQL_RUNTIME_CANNOT_MAP_SPECIFIER_TO_ABSOLUTE_PATH +**Message:** Cannot map "%s" to an absolute path + +### PLT_SQL_RUNTIME_NODE_INSPECTOR_FLAGS_NOT_SUPPORTED +**Message:** The Node.js inspector flags are not supported. Please use 'platformatic start --inspect' instead. + +## @platformatic/service + +**No errors defined** + +## @platformatic/sql-mapper + +### PLT_SQL_MAPPER_CANNOT_FIND_ENTITY +**Message:** Cannot find entity %s + +### PLT_SQL_MAPPER_SPECIFY_PROTOCOLS +**Message:** You must specify either postgres, mysql or sqlite as protocols + +### PLT_SQL_MAPPER_CONNECTION_STRING_REQUIRED +**Message:** connectionString is required + +### PLT_SQL_MAPPER_TABLE_MUST_BE_A_STRING +**Message:** Table must be a string, got %s + +### PLT_SQL_MAPPER_UNKNOWN_FIELD +**Message:** Unknown field %s + +### PLT_SQL_MAPPER_INPUT_NOT_PROVIDED +**Message:** Input not provided. + +### PLT_SQL_MAPPER_UNSUPPORTED_WHERE_CLAUSE +**Message:** Unsupported where clause %s + +### PLT_SQL_MAPPER_UNSUPPORTED_OPERATOR +**Message:** Unsupported operator for Array field + +### PLT_SQL_MAPPER_UNSUPPORTED_OPERATOR_FOR_NON_ARRAY +**Message:** Unsupported operator for non Array field + +### PLT_SQL_MAPPER_PARAM_NOT_ALLOWED +**Message:** Param offset=%s not allowed. It must be not negative value. + +### PLT_SQL_MAPPER_INVALID_PRIMARY_KEY_TYPE +**Message:** Invalid Primary Key type: "%s". We support the following: %s + +### PLT_SQL_MAPPER_PARAM_LIMIT_NOT_ALLOWED +**Message:** Param limit=%s not allowed. Max accepted value %s. + +### PLT_SQL_MAPPER_PARAM_LIMIT_MUST_BE_NOT_NEGATIVE +**Message:** Param limit=%s not allowed. It must be a not negative value. + +### PLT_SQL_MAPPER_MISSING_VALUE_FOR_PRIMARY_KEY +**Message:** Missing value for primary key %s + +### PLT_SQL_MAPPER_SQLITE_ONLY_SUPPORTS_AUTO_INCREMENT_ON_ONE_COLUMN +**Message:** SQLite only supports autoIncrement on one column + +## @platformatic/sql-openapi + +### PLT_SQL_OPENAPI_UNABLE_CREATE_ROUTE_FOR_REVERSE_RELATIONSHIP +**Message:** Unable to create the route for the reverse relationship + +### PLT_SQL_OPENAPI_UNABLE_CREATE_ROUTE_FOR_PK_COL_RELATIONSHIP +**Message:** Unable to create the route for the PK col relationship + +## @platformatic/sql-graphql + +### PLT_SQL_GRAPHQL_UNABLE_GENERATE_GRAPHQL_ENUM_TYPE +**Message:** Unable to generate GraphQLEnumType + +### PLT_SQL_GRAPHQL_UNSUPPORTED_KIND +**Message:** Unsupported kind: %s + +### PLT_SQL_GRAPHQL_ERROR_PRINTING_GRAPHQL_SCHEMA +**Message:** Error printing the GraphQL schema + +## @platformatic/sql-events + +### PLT_SQL_EVENTS_OBJECT_IS_REQUIRED_UNDER_THE_DATA_PROPERTY +**Message:** The object that will be published is required under the data property + +### PLT_SQL_EVENTS_PRIMARY_KEY_IS_NECESSARY_INSIDE_DATA +**Message:** The primaryKey is necessary inside data + +### PLT_SQL_EVENTS_NO_SUCH_ACTION +**Message:** No such action %s + +## @platformatic/sql-json-schema-mapper + +**No errors defined** + +## @platformatic/telemetry + +**No errors defined** + +## @platformatic/utils + +### PLT_SQL_UTILS_PATH_OPTION_REQUIRED +**Message:** path option is required diff --git a/versioned_docs/version-0.45.0/reference/runtime/configuration.md b/versioned_docs/version-0.47.2/reference/runtime/configuration.md similarity index 100% rename from versioned_docs/version-0.45.0/reference/runtime/configuration.md rename to versioned_docs/version-0.47.2/reference/runtime/configuration.md diff --git a/versioned_docs/version-0.45.0/reference/runtime/introduction.md b/versioned_docs/version-0.47.2/reference/runtime/introduction.md similarity index 83% rename from versioned_docs/version-0.45.0/reference/runtime/introduction.md rename to versioned_docs/version-0.47.2/reference/runtime/introduction.md index 75cd8f5e94..15cf0667d8 100644 --- a/versioned_docs/version-0.45.0/reference/runtime/introduction.md +++ b/versioned_docs/version-0.47.2/reference/runtime/introduction.md @@ -3,10 +3,6 @@ Platformatic Runtime is an environment for running multiple Platformatic microservices as a single monolithic deployment unit. -:::info -Platformatic Runtime is currently in [public beta](#public-beta). -::: - ## Features - Command-line interface: [`platformatic runtime`](/reference/cli.md#runtime) @@ -14,10 +10,7 @@ Platformatic Runtime is currently in [public beta](#public-beta). - Support for monorepo-based applications. - [Interservice communication](#interservice-communication) using private message passing. -## Public beta - -Platformatic Runtime is in public beta. You can use it in production, but it's quite -likely that you'll encounter significant bugs. +## Issues If you run into a bug or have a suggestion for improvement, please [raise an issue on GitHub](https://github.com/platformatic/platformatic/issues/new). @@ -48,6 +41,15 @@ Runtime project. For more details on the configuration file, see the Platformatic Runtime streamlines the compilation of all services built on TypeScript with the command `plt runtime compile`. The TypeScript compiler (`tsc`) is required to be installed separately. +## Platformatic Runtime context + +Every Platformatic Runtime application can be run as a standalone application +or as a Platformatic Runtime service. In a second case, you can use Platformatic +Runtime features to archive some compile and runtime optimizations. For example, +see [Interservice communication](#interservice-communication). Looking through the +Platformatic documentation, you can find some features that are available only +if you run your application as a Platformatic Runtime service. + ## Interservice communication The Platformatic Runtime allows multiple microservice applications to run diff --git a/versioned_docs/version-0.45.0/reference/runtime/programmatic.md b/versioned_docs/version-0.47.2/reference/runtime/programmatic.md similarity index 100% rename from versioned_docs/version-0.45.0/reference/runtime/programmatic.md rename to versioned_docs/version-0.47.2/reference/runtime/programmatic.md diff --git a/versioned_docs/version-0.45.0/reference/service/configuration.md b/versioned_docs/version-0.47.2/reference/service/configuration.md similarity index 76% rename from versioned_docs/version-0.45.0/reference/service/configuration.md rename to versioned_docs/version-0.47.2/reference/service/configuration.md index 6f5357f466..baef2ca963 100644 --- a/versioned_docs/version-0.45.0/reference/service/configuration.md +++ b/versioned_docs/version-0.47.2/reference/service/configuration.md @@ -38,6 +38,8 @@ Configuration settings are organised into the following groups: - [`metrics`](#metrics) - [`plugins`](#plugins) - [`telemetry`](#telemetry) +- [`watch`](#watch) +- [`clients`](#clients) Sensitive configuration settings, such as a database connection URL that contains a password, should be set using [configuration placeholders](#configuration-placeholders). @@ -47,7 +49,7 @@ a password, should be set using [configuration placeholders](#configuration-plac A **required** object with the following settings: - **`hostname`** (**required**, `string`) — Hostname where Platformatic Service server will listen for connections. -- **`port`** (**required**, `number`) — Port where Platformatic Service server will listen for connections. +- **`port`** (**required**, `number` or `string`) — Port where Platformatic Service server will listen for connections. - **`healthCheck`** (`boolean` or `object`) — Enables the health check endpoint. - Powered by [`@fastify/under-pressure`](https://github.com/fastify/under-pressure). - The value can be an object, used to specify the interval between checks in milliseconds (default: `5000`) @@ -66,13 +68,37 @@ A **required** object with the following settings: ``` - **`cors`** (`object`) — Configuration for Cross-Origin Resource Sharing (CORS) headers. - All options will be passed to the [`@fastify/cors`](https://github.com/fastify/fastify-cors) plugin. In order to specify a `RegExp` object, you can pass `{ regexp: 'yourregexp' }`, - it will be automatically converted. -- **`logger`** (`object`) -- the [logger configuration](https://www.fastify.io/docs/latest/Reference/Server/#logger). -- **`pluginTimeout`** (`integer`) -- the number of milliseconds to wait for a Fastify plugin to load, see the [fastify docs](https://www.fastify.io/docs/latest/Reference/Server/#plugintimeout) for more details. + it will be automatically converted - **`https`** (`object`) - Configuration for HTTPS supporting the following options. - `key` (**required**, `string`, `object`, or `array`) - If `key` is a string, it specifies the private key to be used. If `key` is an object, it must have a `path` property specifying the private key file. Multiple keys are supported by passing an array of keys. - `cert` (**required**, `string`, `object`, or `array`) - If `cert` is a string, it specifies the certificate to be used. If `cert` is an object, it must have a `path` property specifying the certificate file. Multiple certificates are supported by passing an array of keys. +- **`logger`** (`object`) -- the [logger configuration](https://www.fastify.io/docs/latest/Reference/Server/#logger). +- **`pluginTimeout`** (`integer`) -- the number of milliseconds to wait for a Fastify plugin to load +- **`bodyLimit`** (`integer`) -- the maximum request body size in bytes +- **`maxParamLength`** (`integer`) -- the maximum length of a request parameter +- **`caseSensitive`** (`boolean`) -- if `true`, the router will be case sensitive +- **`ignoreTrailingSlash`** (`boolean`) -- if `true`, the router will ignore the trailing slash +- **`ignoreTrailingSlash`** (`boolean`) -- if `true`, the router will ignore the trailing slash +- **`connectionTimeout`** (`integer`) -- the milliseconds to wait for a new HTTP request +- **`keepAliveTimeout`** (`integer`) -- the milliseconds to wait for a keep-alive HTTP request +- **`maxRequestsPerSocket`** (`integer`) -- the maximum number of requests per socket +- **`forceCloseConnections`** (`boolean` or `"idle"`) -- if `true`, the server will close all connections when it is closed +- **`requestTimeout`** (`integer`) -- the milliseconds to wait for a request to be completed +- **`disableRequestLogging`** (`boolean`) -- if `true`, the request logger will be disabled +- **`exposeHeadRoutes`** (`boolean`) -- if `true`, the router will expose HEAD routes +- **`serializerOpts`** (`object`) -- the [serializer options](https://www.fastify.io/docs/latest/Reference/Server/#serializeropts) +- **`requestIdHeader`** (`string` or `false`) -- the name of the header that will contain the request id +- **`requestIdLogLabel`** (`string`) -- Defines the label used for the request identifier when logging the request. default: `'reqId'` +- **`jsonShorthand`** (`boolean`) -- default: `true` -- visit [fastify docs](https://www.fastify.io/docs/latest/Reference/Server/#jsonshorthand) for more details +- **`trustProxy`** (`boolean` or `integer` or `string` or `String[]`) -- default: `false` -- visit [fastify docs](https://www.fastify.io/docs/latest/Reference/Server/#trustproxy) for more details + +:::tip + +See the [fastify docs](https://www.fastify.io/docs/latest/Reference/Server) for more details. + +::: + ### `metrics` Configuration for a [Prometheus](https://prometheus.io/) server that will export monitoring metrics @@ -84,7 +110,7 @@ This setting can be a `boolean` or an `object`. If set to `true` the Prometheus Supported object properties: - **`hostname`** (`string`) — The hostname where Prometheus server will listen for connections. -- **`port`** (`number`) — The port where Prometheus server will listen for connections. +- **`port`** (`number` or `string`) — The port where Prometheus server will listen for connections. - **`auth`** (`object`) — Basic Auth configuration. **`username`** and **`password`** are required here (use [environment variables](#environment-variables)). @@ -97,8 +123,7 @@ An optional object that defines the plugins loaded by Platformatic Service. - `options` (`object`): Optional plugin options. - `encapsulate` (`boolean`): if the path is a folder, it instruct Platformatic to not encapsulate those plugins. - `maxDepth` (`integer`): if the path is a folder, it limits the depth to load the content from. -- **`typescript`** (`boolean` or `object`): enable TypeScript compilation. A `tsconfig.json` file is required in the same folder. - +- **`typescript`** (`boolean` or `object`): enable TypeScript compilation. A `tsconfig.json` file is required in the same folder. See [TypeScript compilation options](#typescript-compilation-options) for more details. _Example_ @@ -124,7 +149,7 @@ The `typescript` can also be an object to customize the compilation. Here are th * `outDir` (`string`): the output directory of `tsconfig.json`, in case `tsconfig.json` is not available and and `enabled` is set to `false` (procution build) * `flags` (array of `string`): flags to be passed to `tsc`. Overrides `tsConfig`. - + Example: @@ -269,6 +294,18 @@ Note that OTLP traces can be consumed by different solutions, like [Jaeger](http } ``` + +### `clients` + +An array of [Platformatic Client](/reference/client/introduction.md) configurations that will be loaded by Platformatic Service. + +- **`serviceId`** (`string`) - The ID of Platformatic Service inside the Platformatic Runtime. Used only in [Platformatic Runtime context](/docs/reference/runtime/introduction.md#platformatic-runtime-context). +- **`name`** (`string`) - The name of the client. +- **`type`** (`string`) - The type of the client. Supported values are `graphql` and `openapi`. +- **`schema`** (`string`) - Path to the generated client schema file. +- **`path`** (`string`) - Path to the generated client folder. +- **`url`** (`string`) - The URL of the service that the client will connect to. + ## Environment variable placeholders The value for any configuration setting can be replaced with an environment variable @@ -303,7 +340,7 @@ PORT=8080 The `.env` file must be located in the same folder as the Platformatic configuration file or in the current working directory. -Environment variables can also be set directly on the commmand line, for example: +Environment variables can also be set directly on the command line, for example: ```bash PLT_SERVER_LOGGER_LEVEL=debug npx platformatic service @@ -325,7 +362,9 @@ The default allow list can be extended by passing a `--allow-env` CLI option wit comma separated list of strings, for example: ```bash -npx platformatic service --allow-env=HOST,SERVER_LOGGER_LEVEL +npx platformatic service start --allow-env=HOST,SERVER_LOGGER_LEVEL +# OR +npx platformatic start --allow-env=HOST,SERVER_LOGGER_LEVEL ``` If `--allow-env` is passed as an option to the CLI, it will be merged with the diff --git a/versioned_docs/version-0.45.0/reference/service/introduction.md b/versioned_docs/version-0.47.2/reference/service/introduction.md similarity index 77% rename from versioned_docs/version-0.45.0/reference/service/introduction.md rename to versioned_docs/version-0.47.2/reference/service/introduction.md index 17ae1908d7..2b412c3c1d 100644 --- a/versioned_docs/version-0.45.0/reference/service/introduction.md +++ b/versioned_docs/version-0.47.2/reference/service/introduction.md @@ -3,13 +3,9 @@ Platformatic Service is an HTTP server that provides a developer tools for building robust APIs with Node.js. -For a high level overview of how Platformatic DB works, please reference the +For a high level overview of how Platformatic Service works, please reference the [Architecture](/getting-started/architecture.md) guide. -:::info -Platformatic Service is currently in [public beta](#public-beta). -::: - ## Features - Command-line interface: [`platformatic service`](/reference/cli.md#service) @@ -18,13 +14,10 @@ Platformatic Service is currently in [public beta](#public-beta). - Start Platformatic Service [programmatically](/reference/service/programmatic.md) in tests or other applications - Fully typed -## Public beta - -Platformatic Service is in public beta. You can use it in production, but it's quite -likely that you'll encounter significant bugs. +## Issues If you run into a bug or have a suggestion for improvement, please -[raise an issue on GitHub](https://github.com/platformatic/platformatic/issues/new). +[raise an issue on GitHub](https://github.com/platformatic/platformatic/issues/new). ## Standalone usage diff --git a/versioned_docs/version-0.45.0/reference/service/plugin.md b/versioned_docs/version-0.47.2/reference/service/plugin.md similarity index 100% rename from versioned_docs/version-0.45.0/reference/service/plugin.md rename to versioned_docs/version-0.47.2/reference/service/plugin.md diff --git a/versioned_docs/version-0.45.0/reference/service/programmatic.md b/versioned_docs/version-0.47.2/reference/service/programmatic.md similarity index 53% rename from versioned_docs/version-0.45.0/reference/service/programmatic.md rename to versioned_docs/version-0.47.2/reference/service/programmatic.md index 8119745801..e808177005 100644 --- a/versioned_docs/version-0.45.0/reference/service/programmatic.md +++ b/versioned_docs/version-0.47.2/reference/service/programmatic.md @@ -151,3 +151,122 @@ declare module 'fastify' { ``` Note that you can construct `platformatic` like any other union types, adding other definitions. + +## Writing a custom Stackable with TypeScript + +Creating a reusable application with TypeScript requires a bit of setup. +First, create a `schema.ts` file that generates the JSON Schema for your your application. Like so: + +```ts +import { schema as serviceSchema } from '@platformatic/service' +import esMain from 'es-main' + +const baseSchema = serviceSchema.schema + +export const schema = structuredClone(baseSchema) + +schema.$id = 'https://raw.githubusercontent.com/platformatic/acme-base/main/schemas/1.json' +schema.title = 'Acme Base' + +// Needed to allow module loading +schema.properties.module = { + type: 'string' +} + +schema.properties.dynamite = { + anyOf: [{ + type: 'boolean' + }, { + type: 'string' + }], + description: 'Enable /dynamite route' +} + +delete schema.properties.plugins + +if (esMain(import.meta)) { + console.log(JSON.stringify(schema, null, 2)) +} +``` + +Then generates the matching types with [json-schema-to-typescript](http://npm.im/json-schema-to-typescript): + +1. `tsc && node dist/lib/schema.js > schemas/acme.json` +2. `json2ts < schemas/acme.json > src/lib/config.d.ts` + +Finally, you can write the actual reusable application: + +```ts +import fp from 'fastify-plugin' +import { platformaticService, buildServer as buildServiceServer, Stackable, PlatformaticServiceConfig } from '@platformatic/service' +import { schema } from './schema.js' +import { FastifyInstance } from 'fastify' +import type { ConfigManager } from '@platformatic/config' +import type { AcmeBase as AcmeBaseConfig } from './config.js' + +export interface AcmeBaseMixin { + platformatic: { + configManager: ConfigManager, + config: AcmeBaseConfig + } +} + +async function isDirectory (path: string) { + try { + return (await lstat(path)).isDirectory() + } catch { + return false + } +} + +function buildStackable () : Stackable { + async function acmeBase (_app: FastifyInstance, opts: object) { + // Needed to avoid declaration mergin and be compatibile with the + // Fastify types + const app = _app as FastifyInstance & AcmeBaseMixin + + await platformaticService(app, opts) + } + + // break Fastify encapsulation + fp(acmeBase) + + acmeBase.configType = 'acmeBase' + + // This is the schema for this reusable application configuration file, + // customize at will but retain the base properties of the schema from + // @platformatic/service + acmeBase.schema = schema + + // The configuration of the ConfigManager + acmeBase.configManagerConfig = { + schema, + envWhitelist: ['PORT', 'HOSTNAME', 'WATCH'], + allowToWatch: ['.env'], + schemaOptions: { + useDefaults: true, + coerceTypes: true, + allErrors: true, + strict: false + }, + async transformConfig (this: ConfigManager) { + // Call the transformConfig method from the base stackable + platformaticService.configManagerConfig.transformConfig.call(this) + + // In this method you can alter the configuration before the application + // is started. It's useful to apply some defaults that cannot be derived + // inside the schema, such as resolving paths. + } + } + + return acmeBase +} + +export const acmeBase = buildStackable() + +export default acmeBase + +export async function buildServer (opts: object) { + return buildServiceServer(opts, acmeBase) +} +``` diff --git a/versioned_docs/version-0.45.0/reference/sql-events/fastify-plugin.md b/versioned_docs/version-0.47.2/reference/sql-events/fastify-plugin.md similarity index 100% rename from versioned_docs/version-0.45.0/reference/sql-events/fastify-plugin.md rename to versioned_docs/version-0.47.2/reference/sql-events/fastify-plugin.md diff --git a/versioned_docs/version-0.45.0/reference/sql-events/introduction.md b/versioned_docs/version-0.47.2/reference/sql-events/introduction.md similarity index 100% rename from versioned_docs/version-0.45.0/reference/sql-events/introduction.md rename to versioned_docs/version-0.47.2/reference/sql-events/introduction.md diff --git a/versioned_docs/version-0.45.0/reference/sql-graphql/examples/deleteEntity.js b/versioned_docs/version-0.47.2/reference/sql-graphql/examples/deleteEntity.js similarity index 100% rename from versioned_docs/version-0.45.0/reference/sql-graphql/examples/deleteEntity.js rename to versioned_docs/version-0.47.2/reference/sql-graphql/examples/deleteEntity.js diff --git a/versioned_docs/version-0.45.0/reference/sql-graphql/examples/insertEntity.js b/versioned_docs/version-0.47.2/reference/sql-graphql/examples/insertEntity.js similarity index 100% rename from versioned_docs/version-0.45.0/reference/sql-graphql/examples/insertEntity.js rename to versioned_docs/version-0.47.2/reference/sql-graphql/examples/insertEntity.js diff --git a/versioned_docs/version-0.45.0/reference/sql-graphql/examples/query.js b/versioned_docs/version-0.47.2/reference/sql-graphql/examples/query.js similarity index 100% rename from versioned_docs/version-0.45.0/reference/sql-graphql/examples/query.js rename to versioned_docs/version-0.47.2/reference/sql-graphql/examples/query.js diff --git a/versioned_docs/version-0.45.0/reference/sql-graphql/examples/saveEntity.js b/versioned_docs/version-0.47.2/reference/sql-graphql/examples/saveEntity.js similarity index 100% rename from versioned_docs/version-0.45.0/reference/sql-graphql/examples/saveEntity.js rename to versioned_docs/version-0.47.2/reference/sql-graphql/examples/saveEntity.js diff --git a/versioned_docs/version-0.45.0/reference/sql-graphql/ignore.md b/versioned_docs/version-0.47.2/reference/sql-graphql/ignore.md similarity index 90% rename from versioned_docs/version-0.45.0/reference/sql-graphql/ignore.md rename to versioned_docs/version-0.47.2/reference/sql-graphql/ignore.md index 66d59e16fd..090e7a63f8 100644 --- a/versioned_docs/version-0.45.0/reference/sql-graphql/ignore.md +++ b/versioned_docs/version-0.47.2/reference/sql-graphql/ignore.md @@ -7,7 +7,7 @@ To ignore types: ```javascript app.register(require('@platformatic/sql-graphql'), { ignore: { - categories: true + category: true } }) ``` @@ -17,7 +17,7 @@ To ignore individual fields: ```javascript app.register(require('@platformatic/sql-graphql'), { ignore: { - categories: { + category: { name: true } } diff --git a/versioned_docs/version-0.45.0/reference/sql-graphql/introduction.md b/versioned_docs/version-0.47.2/reference/sql-graphql/introduction.md similarity index 100% rename from versioned_docs/version-0.45.0/reference/sql-graphql/introduction.md rename to versioned_docs/version-0.47.2/reference/sql-graphql/introduction.md diff --git a/versioned_docs/version-0.45.0/reference/sql-graphql/many-to-many.md b/versioned_docs/version-0.47.2/reference/sql-graphql/many-to-many.md similarity index 100% rename from versioned_docs/version-0.45.0/reference/sql-graphql/many-to-many.md rename to versioned_docs/version-0.47.2/reference/sql-graphql/many-to-many.md diff --git a/versioned_docs/version-0.45.0/reference/sql-graphql/mutations.md b/versioned_docs/version-0.47.2/reference/sql-graphql/mutations.md similarity index 100% rename from versioned_docs/version-0.45.0/reference/sql-graphql/mutations.md rename to versioned_docs/version-0.47.2/reference/sql-graphql/mutations.md diff --git a/versioned_docs/version-0.45.0/reference/sql-graphql/queries.md b/versioned_docs/version-0.47.2/reference/sql-graphql/queries.md similarity index 100% rename from versioned_docs/version-0.45.0/reference/sql-graphql/queries.md rename to versioned_docs/version-0.47.2/reference/sql-graphql/queries.md diff --git a/versioned_docs/version-0.45.0/reference/sql-graphql/subscriptions.md b/versioned_docs/version-0.47.2/reference/sql-graphql/subscriptions.md similarity index 100% rename from versioned_docs/version-0.45.0/reference/sql-graphql/subscriptions.md rename to versioned_docs/version-0.47.2/reference/sql-graphql/subscriptions.md diff --git a/versioned_docs/version-0.45.0/reference/sql-mapper/entities/api.md b/versioned_docs/version-0.47.2/reference/sql-mapper/entities/api.md similarity index 100% rename from versioned_docs/version-0.45.0/reference/sql-mapper/entities/api.md rename to versioned_docs/version-0.47.2/reference/sql-mapper/entities/api.md diff --git a/versioned_docs/version-0.45.0/reference/sql-mapper/entities/example.md b/versioned_docs/version-0.47.2/reference/sql-mapper/entities/example.md similarity index 100% rename from versioned_docs/version-0.45.0/reference/sql-mapper/entities/example.md rename to versioned_docs/version-0.47.2/reference/sql-mapper/entities/example.md diff --git a/versioned_docs/version-0.45.0/reference/sql-mapper/entities/fields.md b/versioned_docs/version-0.47.2/reference/sql-mapper/entities/fields.md similarity index 100% rename from versioned_docs/version-0.45.0/reference/sql-mapper/entities/fields.md rename to versioned_docs/version-0.47.2/reference/sql-mapper/entities/fields.md diff --git a/versioned_docs/version-0.45.0/reference/sql-mapper/entities/hooks.md b/versioned_docs/version-0.47.2/reference/sql-mapper/entities/hooks.md similarity index 100% rename from versioned_docs/version-0.45.0/reference/sql-mapper/entities/hooks.md rename to versioned_docs/version-0.47.2/reference/sql-mapper/entities/hooks.md diff --git a/versioned_docs/version-0.45.0/reference/sql-mapper/entities/introduction.md b/versioned_docs/version-0.47.2/reference/sql-mapper/entities/introduction.md similarity index 100% rename from versioned_docs/version-0.45.0/reference/sql-mapper/entities/introduction.md rename to versioned_docs/version-0.47.2/reference/sql-mapper/entities/introduction.md diff --git a/versioned_docs/version-0.45.0/reference/sql-mapper/entities/relations.md b/versioned_docs/version-0.47.2/reference/sql-mapper/entities/relations.md similarity index 100% rename from versioned_docs/version-0.45.0/reference/sql-mapper/entities/relations.md rename to versioned_docs/version-0.47.2/reference/sql-mapper/entities/relations.md diff --git a/versioned_docs/version-0.45.0/reference/sql-mapper/entities/timestamps.md b/versioned_docs/version-0.47.2/reference/sql-mapper/entities/timestamps.md similarity index 100% rename from versioned_docs/version-0.45.0/reference/sql-mapper/entities/timestamps.md rename to versioned_docs/version-0.47.2/reference/sql-mapper/entities/timestamps.md diff --git a/versioned_docs/version-0.45.0/reference/sql-mapper/entities/transactions.md b/versioned_docs/version-0.47.2/reference/sql-mapper/entities/transactions.md similarity index 100% rename from versioned_docs/version-0.45.0/reference/sql-mapper/entities/transactions.md rename to versioned_docs/version-0.47.2/reference/sql-mapper/entities/transactions.md diff --git a/versioned_docs/version-0.45.0/reference/sql-mapper/examples/count.js b/versioned_docs/version-0.47.2/reference/sql-mapper/examples/count.js similarity index 100% rename from versioned_docs/version-0.45.0/reference/sql-mapper/examples/count.js rename to versioned_docs/version-0.47.2/reference/sql-mapper/examples/count.js diff --git a/versioned_docs/version-0.45.0/reference/sql-mapper/examples/delete.js b/versioned_docs/version-0.47.2/reference/sql-mapper/examples/delete.js similarity index 100% rename from versioned_docs/version-0.45.0/reference/sql-mapper/examples/delete.js rename to versioned_docs/version-0.47.2/reference/sql-mapper/examples/delete.js diff --git a/versioned_docs/version-0.45.0/reference/sql-mapper/examples/fastify-plugin.js b/versioned_docs/version-0.47.2/reference/sql-mapper/examples/fastify-plugin.js similarity index 100% rename from versioned_docs/version-0.45.0/reference/sql-mapper/examples/fastify-plugin.js rename to versioned_docs/version-0.47.2/reference/sql-mapper/examples/fastify-plugin.js diff --git a/versioned_docs/version-0.45.0/reference/sql-mapper/examples/fields.js b/versioned_docs/version-0.47.2/reference/sql-mapper/examples/fields.js similarity index 100% rename from versioned_docs/version-0.45.0/reference/sql-mapper/examples/fields.js rename to versioned_docs/version-0.47.2/reference/sql-mapper/examples/fields.js diff --git a/versioned_docs/version-0.45.0/reference/sql-mapper/examples/find.js b/versioned_docs/version-0.47.2/reference/sql-mapper/examples/find.js similarity index 100% rename from versioned_docs/version-0.45.0/reference/sql-mapper/examples/find.js rename to versioned_docs/version-0.47.2/reference/sql-mapper/examples/find.js diff --git a/versioned_docs/version-0.45.0/reference/sql-mapper/examples/hooks.js b/versioned_docs/version-0.47.2/reference/sql-mapper/examples/hooks.js similarity index 100% rename from versioned_docs/version-0.45.0/reference/sql-mapper/examples/hooks.js rename to versioned_docs/version-0.47.2/reference/sql-mapper/examples/hooks.js diff --git a/versioned_docs/version-0.45.0/reference/sql-mapper/examples/insert.js b/versioned_docs/version-0.47.2/reference/sql-mapper/examples/insert.js similarity index 100% rename from versioned_docs/version-0.45.0/reference/sql-mapper/examples/insert.js rename to versioned_docs/version-0.47.2/reference/sql-mapper/examples/insert.js diff --git a/versioned_docs/version-0.45.0/reference/sql-mapper/examples/relations.js b/versioned_docs/version-0.47.2/reference/sql-mapper/examples/relations.js similarity index 100% rename from versioned_docs/version-0.45.0/reference/sql-mapper/examples/relations.js rename to versioned_docs/version-0.47.2/reference/sql-mapper/examples/relations.js diff --git a/versioned_docs/version-0.45.0/reference/sql-mapper/examples/save.js b/versioned_docs/version-0.47.2/reference/sql-mapper/examples/save.js similarity index 100% rename from versioned_docs/version-0.45.0/reference/sql-mapper/examples/save.js rename to versioned_docs/version-0.47.2/reference/sql-mapper/examples/save.js diff --git a/versioned_docs/version-0.45.0/reference/sql-mapper/fastify-plugin.md b/versioned_docs/version-0.47.2/reference/sql-mapper/fastify-plugin.md similarity index 100% rename from versioned_docs/version-0.45.0/reference/sql-mapper/fastify-plugin.md rename to versioned_docs/version-0.47.2/reference/sql-mapper/fastify-plugin.md diff --git a/versioned_docs/version-0.45.0/reference/sql-mapper/images/plt-db-hooks.svg b/versioned_docs/version-0.47.2/reference/sql-mapper/images/plt-db-hooks.svg similarity index 100% rename from versioned_docs/version-0.45.0/reference/sql-mapper/images/plt-db-hooks.svg rename to versioned_docs/version-0.47.2/reference/sql-mapper/images/plt-db-hooks.svg diff --git a/versioned_docs/version-0.45.0/reference/sql-mapper/introduction.md b/versioned_docs/version-0.47.2/reference/sql-mapper/introduction.md similarity index 100% rename from versioned_docs/version-0.45.0/reference/sql-mapper/introduction.md rename to versioned_docs/version-0.47.2/reference/sql-mapper/introduction.md diff --git a/versioned_docs/version-0.45.0/reference/sql-openapi/api.md b/versioned_docs/version-0.47.2/reference/sql-openapi/api.md similarity index 100% rename from versioned_docs/version-0.45.0/reference/sql-openapi/api.md rename to versioned_docs/version-0.47.2/reference/sql-openapi/api.md diff --git a/versioned_docs/version-0.45.0/reference/sql-openapi/ignore.md b/versioned_docs/version-0.47.2/reference/sql-openapi/ignore.md similarity index 90% rename from versioned_docs/version-0.45.0/reference/sql-openapi/ignore.md rename to versioned_docs/version-0.47.2/reference/sql-openapi/ignore.md index 9f17db2694..9f32e0344c 100644 --- a/versioned_docs/version-0.45.0/reference/sql-openapi/ignore.md +++ b/versioned_docs/version-0.47.2/reference/sql-openapi/ignore.md @@ -7,7 +7,7 @@ To ignore entites: ```javascript app.register(require('@platformatic/sql-openapi'), { ignore: { - categories: true + category: true } }) ``` @@ -17,7 +17,7 @@ To ignore individual fields: ```javascript app.register(require('@platformatic/sql-openapi'), { ignore: { - categories: { + category: { name: true } } diff --git a/versioned_docs/version-0.45.0/reference/sql-openapi/introduction.md b/versioned_docs/version-0.47.2/reference/sql-openapi/introduction.md similarity index 100% rename from versioned_docs/version-0.45.0/reference/sql-openapi/introduction.md rename to versioned_docs/version-0.47.2/reference/sql-openapi/introduction.md diff --git a/versioned_sidebars/version-0.45.0-sidebars.json b/versioned_sidebars/version-0.47.2-sidebars.json similarity index 99% rename from versioned_sidebars/version-0.45.0-sidebars.json rename to versioned_sidebars/version-0.47.2-sidebars.json index 0436695ca3..fd57dc51ad 100644 --- a/versioned_sidebars/version-0.45.0-sidebars.json +++ b/versioned_sidebars/version-0.47.2-sidebars.json @@ -57,7 +57,7 @@ "guides/generate-frontend-code-to-consume-platformatic-rest-api", "guides/migrating-fastify-app-to-platformatic-service", "guides/migrating-express-app-to-platformatic-service", - "guides/packaging-an-application-as-a-module", + "guides/applications-with-stackables", "guides/telemetry", "guides/dockerize-platformatic-app" ] diff --git a/versions.json b/versions.json index 2396fb237b..ed4abae1e0 100644 --- a/versions.json +++ b/versions.json @@ -1,7 +1,7 @@ [ + "0.47.2", "0.47.0", "0.46.2", "0.46.1", - "0.45.1", - "0.45.0" + "0.45.1" ] \ No newline at end of file