Write it once
Price rules, formatting, API clients and validation helpers live in one place instead of being copied into every API.
API Maker
The framework for AI era
Your code
Write shared code once and import it everywhere. Run setup code as soon as a sandbox starts.
A utility class is TypeScript that your custom APIs, hooks, events, schedulers and tests import by its path. A process initializer is code that runs when a sandbox starts, before any request, to prepare what your code needs, like a subscription to Redis or MQTT.
Step through it, slow it down, or open the full canvas.
Shared code in a utility class. Give it a folder and a name, write TypeScript and export an instance. Price rules, formatting and API clients live in one place.
Give it a folder and a name, write TypeScript and export an instance. Price rules, formatting and API clients live in one place.
Custom APIs, hooks, event listeners, schedulers and test cases import it like a module, with autocompletion in the editor.
Save a new version and activate it: every importer uses it at once, on every server. Go back by activating the old one.
When a sandbox starts, the active process initializers run one after another, in your order, before it takes any request.
Ten seconds after API Maker starts it creates the sandboxes of accounts with initializers. A restarted sandbox runs them again: make them safe to run twice.
Price rules, formatting, API clients and validation helpers live in one place instead of being copied into every API.
Interfaces exported by a utility class can be used by every importer, and the editor suggests its functions.
Save or activate a version and the sandboxes load the new code, on every server of the cluster.
An initializer can connect to a message broker or a Redis channel and react to its messages, for as long as the sandbox lives.
Shortly after API Maker starts it warms up the sandboxes, so initializers do not wait for the first request.
The checkout API, the invoice scheduler and the order hooks all need the same tax calculation. It lives in a utility class, and when the rate changes you save one new version.
class Calculator { add(x: number, y: number) { return x + y; } multiply(x: number, y: number) { return x * y; }}let temp = new Calculator();export = temp;import * as T from 'types';import * as calc from 'utils/Calculator';async function main(g: T.IAMGlobal) { return { sum: calc.add(3, 6), product: calc.multiply(3, 6) };}module.exports = main;A scheduler runs on its intervals, once in the cluster. An initializer runs once in every new sandbox, without any trigger, to set that sandbox up.
Yes, when the importer passes it: call your functions with g from the custom API, hook or scheduler that uses them.
Documentation