@mocobaas/server-sdk v2.23.2
MocoBaaS - Server-SDK
Important Updates
2.23.0
- Integration with Kastela
2.22.0
- Migration process for database migration from sqlite to text file is removed
2.21.20
- Fix:
utils.resolveAssetPath. - Fix: unwanted config mutation during redis cache initialization.
- Fix: database transaction on destroy record
2.21.12
- The timeout (in seconds) on Mutex locking attempt can be adjusted via
MUTEX_ATTEMPT_TIMEOUT
2.21.10
- RPC across node process is available via
ctx.moco.rpc. This would be helpful for communicating with any service that only available on master process only. - All database migrations are tracked on
migrations/data.txt. Please run the project once on your laptop to ensure data migration from olddb.sqlite. The migration between sqlite to plain will be removed on 2.22.0. - Distributed mutex (based on redlock) is currently available via
let myMutex = await ctx.moco.mutex(key,ttl). It is also possible to extend ttl viamyMutex = myMutex.extend(newTtl). Releasing mutex can be done viaawait myMutex.unlock(). - Typescript user is now able to add type on custom script context via Generic.
import SDK from "@mocobaas/server-sdk";
import moment from "moment";
interface IData {
id: string;
challenge: string;
expire: number;
digest: string;
}
async function handler(ctx: SDK.EventContext<IData>) {
const mutex = await ctx.moco.mutex(id, 3000);
const { id, expire, ...others } = ctx.data; // data shall follow IData interface
await ctx.moco.cache.set(id, { id, ...others }, expire);
await mutex.unlock();
}
module.exports = handler;2.20.12
- Auth:
DENY_CONCURRENT_LOGINSalso accepts a list of user roles, e.g.DENY_CONCURRENT_LOGINS="Content Creator,Publisher,Reader". If user has any of those roles, they won't be able to do concurrent logins.
2.20.8
- Auth: Use
DENY_CONCURRENT_LOGINS=1to deny concurrent logins of a user (like on multiple devices). ctx.moco.utils.revokeAllAccess()
2.20.5
- Google Sign-in: Auto-link existing account on Register.
2.20.1
- ⚠️ Breaking Change: When anti-tamper is enabled (
NODE_ENV = productionorFORCE_INTEGRITY_CHECK = 1), deploy your project with mbaas-signer-cli 1.7.0.
wget --header="DEPLOY-TOKEN: your-deploy-token" https://gitlab.com/api/v4/projects/24382748/packages/generic/mbaas-signer-cli/1.7.0/mbaas-signer_1.7.0_linux_amd64.tar.gz -O - | tar -xzvf -2.19.0
- You may run custom codes during boot process via
boot.jsfile. UsemasterEntryfunction to execute code once in the master process, and useworkerEntryfunction to execute code once in each worker.
2.18.0
- Automatic restart MBaaS after disconnected from database. You need to change in main code (server.js) from
require("@mocobaas/server-sdk")();torequire("@mocobaas/server-sdk/src/eternal")();
2.17.5
- Change default timeout for inter-service communication to 1 minute (60s). You can still customize it by setting
SERVICERPC_TIMEOUTorPUBSUBRPC_TIMEOUTvariable. - Better timeout error message, e.g. "rpc - fwdcall Connection timed out @ 1m0s while awaiting reply".
2.17.3
- Redis: Support using TLS (e.g.
config.cache.tls = true).
2.17.2
- Fix: Database SSL configuration.
2.17.0
⚠️ Security Fixes:
- GraphQL Introspection: (1) On
NODE_ENV = production, it is denied by default. UseALLOW_GRAPHQL_INTROSPECTION=1to allow it. (2) On any other NODE_ENV, it is allowed by default. UseALLOW_GRAPHQL_INTROSPECTION=0to deny it. - Rate Limit Logger: Logs every time the limit is reached, prefixed with "TMREQ". Please set
logging.leveltoinfoor above to enable this feature. - Encryption Failure Logger: Logs every 5 failure attempts within 10 seconds, prefixed with "E2EEFAIL". Please set
logging.leveltoinfoor above to enable this feature.
🚀 New Features:
- Auto Scaling based on Backpressure Metering.
2.16.1
- Configurable Check Email API rate limiter (
productiononly): (1) You can setALLOW_CHECK_EMAIL=trueto enable API with the default limiter, 1 req/min. (2) Or you can use any integer values to enable API with custom limiter, e.g.ALLOW_CHECK_EMAIL=5000means 5000 req/min.
2.16.0
- ⚠️ Breaking Change: On Linux, glibc >= 2.27 is needed (
ldd --versionto check version). We recommend to use this docker image:node:12-bullseyenode:12-bullseye-slimnode:14-bullseyenode:14-bullseye-slim
- Use
PWDCHANGE_AUTO_LOGOUT=1to logout user on password change. - If you want to run additional tasks when user change his/her password, use this event trigger:
{ "entity": "auth", "queue": "passwordChanged" }. - Fix:
ctx.moco.mqtttypings. - Fix: Some
ctx.mocomethods were unavailable on non-HTTP custom scripts.
2.15.13
- Fix: Payload character encoding.
2.15.0
⚠️ Security Fixes:
- These APIs will not inform whether the specified email is valid or not: Login (local), Resend Verification, Forgot Password.
- Check Email API is now unavailable by default. Use
ALLOW_CHECK_EMAIL=trueto allow accessing it. - On
NODE_ENV = production, Check Email API is guarded by a special rate limiter: 1 request per minute for each IP address.
🚀 New Features:
- OpenTelemetry is available for tracing custom scripts via
require("@mocobaas/server-sdk").tracing. - Use
initChildSpanto generatespanobject andnestedSpanClosurewrapper.
const { initChildSpan, otel } = require("@mocobaas/server-sdk").tracing;
//
const { span, nestedSpanClosure } = initChildSpan(`[func] function name`, {
attributes: {
attr1: "demo",
// attributes
},
});
await nestedSpanClosure(async () => {
try {
await doSomething();
span.setStatus({ code: otel.SpanStatusCode.OK });
} catch (error) {
span.setStatus({
code: otel.SpanStatusCode.ERROR,
message: error.message,
});
} finally {
span.end();
}
});2.14.1
- Redis: Support using custom dbid (
config.cache.db).
2.14.0
- ⚠️ Breaking Change: When anti-tamper is enabled (
NODE_ENV = productionorFORCE_INTEGRITY_CHECK = 1), deploy your project with mbaas-signer-cli 1.4.0.
wget --header="DEPLOY-TOKEN: your-deploy-token" https://gitlab.com/api/v4/projects/24382748/packages/generic/mbaas-signer-cli/1.4.0/mbaas-signer_1.4.0_linux_amd64.tar.gz -O - | tar -xzvf -2.13.6
- Fix: custom script RPC formatting.
2.13.5
- Fix: Swagger UI document URL.
- Fix: GraphiQL server URL.
- Fix: Swagger UI & GraphiQL payload encryption server-public-key refetcher.
2.13.2
- Fix:
ctx.moco.tables.knextypings.
2.13.0
- OpenTelemetry support for tracing custom scripts execution and database calls.
- Use
OTEL_EXPORTER=consoleto export OpenTelemetry via console. Replaceconsolewithjaeger:::<jaeger_url>for Jaeger exporter andzipkin:::<zipkin_url>for Zipkin exporter. - Remove ExpressJS and related codes.
- Memoized function on table & schema metadata check.
2.12.3
- Fix: Password verification on invalid stored passwords.
2.12.1
- Fix: Database connection error on certain configuration.
2.12.0
- Add payload encryption support to Swagger UI.
- Replace GraphQL Playground with GraphiQL, still using the same endpoint: /graphql/playground.
- Add payload encryption support to GraphiQL.
2.11.2
- Fix: Do not send verification email on
REGISTRATION_AUTO_VERIVIED = 1.
2.11.0
- Replace Redis Pub/Sub with Redis Stream for better deliverability between services.
2.10.14
- Auth: Use
REGISTRATION_AUTO_VERIVIED=1to set user's verified totrueon local registration.
2.10.12
- Fix: custom script responses.
- Log Viewer: (1) On
NODE_ENV = production, it is disabled by default. UseENABLE_LOG_VIEWER=1to enable it. (2) On any other NODE_ENV, it is enabled by default. UseENABLE_LOG_VIEWER=0to disable it.
2.10.7
- Fix: Set custom script response status based on
returnCtx.status. ctx.moco.utils.addAccess()
2.10.4
- Fix: Missing storage remove file endpoint.
2.10.1
- Fix: Integrity check for anti-tamper not working.
- More on anti-tamper: Use
FORCE_INTEGRITY_CHECK=1to perform integrity check on any NODE_ENV.
2.10.0
- Binary: Use tar.xz compression for smaller download size.
2.9.0
- Materialized View Index Management
- Resource Availablity API
- One to One Relationship
- Payload Encryption
["COMMON", "TABLE", "GRAPHQL", "CUSTOM"]
2.8.3
- "GET /api/isready" checks if the customscript module is ready to use. It is used internally by Moco BaaS Test Suite.
2.8.0
- Worker management & auto scaling
2.7.2
- Redis Pub/Sub "RPC_ERROR" message is now replaced with a detailed message. It uses a prefix: "redisrpc - fwdrequest".
- Some examples of Redis Pub/Sub errors: "SERVICE NOT FOUND: customscript", "CONNECTION TIMED OUT", "CONNECTION DROPPED".
- "GET /version" shows project version, server-sdk version and NODE_ENV.
- Fix:
env.varsfor setting environment variables, sourcing from single-file config (exported) or multi-file config (infrastructure).
2.6.41
- Custom Script Testing:
require("@mocobaas/server-sdk").testingincludes some testing tools, such as chai and pactum.
2.6.0
- Set the timeout for Redis Pub/Sub communication (as mentioned in v2.0.0) by setting
PUBSUBRPC_TIMEOUTvariable (in seconds). Defaults to 10 seconds.
2.5.0
- Execute graphql via custom script
2.3.0
- Load exported JSON configuration
- Move migrations to SQLite
2.2.0
- LogDNA support
- GraphQL api order by relation table
2.1.0
- MQTT support
- Sentry support
- Custom Script Caching
2.0.0
- Binary: As a part of transitioning into the compiled MBaaS codes, it downloads and runs some executable binaries for your current platform/operating system alongside with the Node.js process. And they all communicate each other via Redis Pub/Sub during Server operation.
- Anti-tamper: On
NODE_ENV = production, MBaaS will perform an integrity check on custom scripts at boot time. The server will run normally only if the check passed. - Auth: Uses Argon2 key derivation function when inserting/updating user's password, while still maintaining backward compatibility when verifying existing passwords.
- Auth: When Server starts, you will see a short Argon2 benchmark in your console. For the best balance between security and performance, it is recommended to have between 0.05 and 0.5 seconds hash timing (elapsed). Please set
authResources.argon2MemoryCostto a certain number until you get a good timing. The result depends on your hardware resources. - Auth: Implements refresh token protection, similar to that in IDFS (see v1.41.0).
- Auth: To better assist Client on the exact/unambiguous timing for refresh access and relogin user, Server provides these responses: (1) Invalid Access Token = HTTP Status 401 and error code
IVACC= it is time to refresh access. (2) Invalid Refresh Token = HTTP Status 401 and error codeIVREF= it is time to relogin user. - Auth Events: User registration and email verification now trigger auth events, which can be handled by your custom scripts.
- Sign-in with Apple ID (see MocoBaaS Manual for the detailed explanation).
- Keycloak support: Replaces IDFS as the identity provider.
- HTTP Logger: A new module for logging HTTP requests and responses. Please set
logging.leveltohttpor above to enable this module. - Custom Script: All methods in
ctx.moco.utilsnow return Promise.
1.51.0
- Materialized View
1.50.0
- Auto Increment option for integer and bigInteger column
1.49.0
- Use trigger for table event
1.48.0
- Typing support on custom scripts for both table and queue operation. This should improves developer productivity.
- Typing for table operations can be activated / updated via console menu.
- Developer will see typing for table name, select, include, data (insert & update), and operation result.
- Typing is only applicable on method with 2 arguments, which first one is the target table name.
1.47.0
- Writing Typescript (TS) code is now supported.
- Please follow the migration guide for more details on how to work with TS.
- Console will automaticaly generate new TS file if your project folder contains
tsconfig.json
1.43.3
- IDFS: bilingual support: "en" & "id".
1.41.6
- Another case-insensitive on checking email. Affected endpoints: "POST /services/auth/account".
1.41.0
- IDFS: It is possible that refresh tokens being stolen by malicious actors. To stop any misuse of access, when a refresh token is reused, it will revoke the whole token chain (grant). Meaning that the active refresh token will be invalid and the active access token(s) will also be invalid. The user will have to reauthorize.
1.40.0
- Case-insensitive on checking email. Affected endpoints: "POST /services/auth", "DELETE /services/auth", "GET /services/auth/account", "POST /services/emailverification".
1.35.0
- Support RS256 JWT algorithm, fallback to HS256 if not configured.
- JWT tokens are only valid to a single environment, i.e. development for development, production for production, etc.
1.32.7
- In case of randomly disconnected redis, please apply
REDIS_HEARTBEAT = truein environment variable
1.32.21
- Moco context is available from anywhere via
getContextmethod inrequire("@mocobaas/server-sdk").utils - All methods in
getContextare valid in exception foruser
const utils = require("@mocobaas/server-sdk").utils;
const mocoCtx = utils.getContext(); // return null if not configured yet1.22.0 - Table
- add GraphQL endpoint for table, endpoint is "/graphql"
- add "GraphQL Playground" for GraphQL IDE, endpoint is "/graphql/playground"
Environment Variables
| Variable | Values | Default | Purpose |
|---|---|---|---|
| NODE_ENV | development, production, etc. | development | Application environment, differentiating some configurations. |
| REDIS_HEARTBEAT | true, 1 | Enable Redis heartbeat. | |
| DISABLE_STORAGE_PREFIX | true, 1 | Use unprefixed storage bucket name. | |
| OVERRIDE_STORAGE_PREFIX | (any string values) | Define custom prefix for storage bucket name. | |
| SERVICERPC_TIMEOUT | 20, 7.5, etc. | 60 | Set timeout (in seconds) for Redis inter-service communication. |
| PUBSUBRPC_TIMEOUT | " | " | " |
| FORCE_INTEGRITY_CHECK | true, 1 | Perform integrity check on any NODE_ENV. | |
| ENABLE_LOG_VIEWER | true, false, 1, 0 | Enable/Disable Log Viewer (see v2.10.12). | |
| REGISTRATION_AUTO_VERIVIED | true, 1 | Set user's verified to true on local registration. | |
| ALLOW_CHECK_EMAIL | true, (any integer values) | Allow accessing Check Email API (see v2.16.1). | |
| DENY_CONCURRENT_LOGINS | true, 1, (list of user roles) | Deny concurrent logins of a user. | |
| PWDCHANGE_AUTO_LOGOUT | true, 1 | Logout user on password change. | |
| ALLOW_GRAPHQL_INTROSPECTION | true, false, 1, 0 | Allow/Deny GraphQL Introspection (see v2.17.0). | |
| MUTEX_ATTEMPT_TIMEOUT | number | 10 | Define the timeout (seconds) of mutex locking attempt (available from v2.21.12). |
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago