*`getAppFolder()`: Get the filesystem path to the PostalPoint installation folder.
*`getPluginFolder(pluginName)`: Get the filesystem path to a plugin's folder.
If used without arguments, gets the root plugin storage folder.
*`f7`: The Framework7 app instance for PostalPoint's entire UI, created by `new Framework7()`. See https://framework7.io/docs/app for details. Be very careful.
*`eventbus`: A [Framework7 event bus](https://framework7.io/docs/events#events-bus) that parts of PostalPoint broadcast on. See docs/Events.md for details.
*`inject(barcodeData)`: Pass data to the internal barcode event subsystem. The data is handled as if it were just received from a physical barcode scanner.
PostalPoint supports multiple SQL databases, currently SQLite and MariaDB.
`global.apis.database.`:
*`async getConnection()`: Returns a database driver. See docs/Database.md for details.
#### Graphics
PostalPoint uses the Jimp library version 1.6 for creating and manipulating images and shipping labels.
`global.apis.graphics.`:
*`Jimp()`: The [JavaScript Image Manipulation Program](https://jimp-dev.github.io/jimp/). Access like so: `const {Jimp} = global.apis.graphics.Jimp();`.
*`async loadFont(filename)`: Replacement for [Jimp's loadFont](https://jimp-dev.github.io/jimp/api/jimp/functions/loadfont/), which gets very confused about our JS environment and ends up crashing everything.
#### Kiosk
`global.apis.kiosk.`:
*`isKiosk()`: Returns a boolean to indicate if PostalPoint is running in kiosk mode.
#### Point of Sale
`global.apis.pos.`:
*`addReceiptItem(item)`: Add a `ReceiptItem` to the current transaction.
*`addReceiptPayment(item)`: Add a `ReceiptPayment` to the current transaction.
*`addOnscreenPaymentLog(string)`: Append a line of text to the onscreen log displayed during credit card processing. Not shown in kiosk mode.
*`onReceiptChange(function (receipt) {})`: Add a function to be called whenever the transaction data/receipt is changed.
*`onTransactionFinished(function (receipt) {})`: Same as `onReceiptChange` except run when a transaction is completed.
*`addToolsPage(page, title, id = "", description = "", cardTitle = "", icon = "", type = "page")`: Add a page to the Tools screen. See examples/basic-demo for example usage. If `type` is set to "function", the `page` argument will be run as a function and will not be expected to return a page component.
*`getCustomerDisplayInfo()`: Describes if the customer-facing display is currently enabled, and if it supports customer touch interaction: `{"enabled": true, "touch": true}`.
*`clearCustomerScreen()`: Clear any custom content on the customer-facing display, defaulting back to blank/receipt/shipping rates, as applicable.
*`setCustomerScreen(content, type = "html")`: Encodes `content` as a data URI (example: `` `data:text/html;charset=utf-8,${content}` ``) and renders on the customer-facing display. If `type` is `html`, renders the string as HTML. If `type` is `pdf`, displays a PDF viewer. If `type` is `raw`, functions like setting an iframe's src to `content`. All other `type` values are rendered as `text/plain`. Warning: Do not load third-party websites, this is a security risk. Wrap it in a `<webviewsrc="..."></webview>` tag if you need to display one.
*`collectSignatureFromCustomerScreen()`: Show a signature pad on the customer-facing display. When the customer indicates the signature is finished, the `customerSignatureCollected` event is emitted with the data `{"svg": "data:image/svg+xml;base64,...", "png": "data:image/png;base64,..."}`
*`cancelSignatureCollection()`: Cancels customer signature collection and returns the customer-facing display to normal operation.
*`clearSignaturePad()`: Erase the signature on the customer-facing display. Note that the customer is also provided a button to do this.
*`barcode.getBuffer(data, type = "code128", height = 10, scale = 2, includetext = false)`: Get a PNG image buffer of a barcode. Uses library "bwip-js".
*`clipboard.copy(text, showNotification = false)`: Copy a string to the system clipboard, optionally showing a "copied" notification to the user.
*`async delay(ms = 1000)`: Pause execution for some amount of time in an async function, i.e., returns a Promise that resolves in some number of milliseconds.
*`async http.fetch(url, responseType = "text", timeout = 15)`: Fetch a URL. `responseType` can be "text", "blob", "buffer", or "json". Timeout is in seconds.
*`async http.post(url, data, responseType = "text", headers = {"Content-Type": "application/json"}, method = "POST", continueOnBadStatusCode = false)`: POST to a URL. `data` is sent as a JSON body.
*`objectEquals(a, b)`: Compare two objects for equality.
*`string.chunk(str, chunksize)`: Split a string into an array of strings of length `chunksize`.
*`string.split(input, separator, limit)`: Split a string with a RegExp separator an optionally limited number of times.
*`time.diff(compareto)`: Get the number of seconds between now and the given UNIX timestamp.
*`time.format(format, timestamp = time.now())`: Take a UNIX timestamp in seconds and format it to a string. (Mostly) compatible with PHP's date() function.
*`time.now()`: Get the current UNIX timestamp in seconds.
*`time.strtotime(str)`: Parse a string date and return a UNIX timestamp.
*`time.toDateString(timestamp)`: Get a localized date string for a UNIX timestamp.
*`time.toTimeString(timestamp)`: Get a time string for a UNIX timestamp, for example, "2:01 PM".
*`uuid.v4()`: Generate a version 4 UUID string, for example, "fcca5b12-6a11-46eb-96e4-5ed6365de977".
*`uuid.short()`: Generate a 16-character random alphanumeric string, for example, "4210cd8f584e6f6c".