UNPKG

gitlab-acebase

Version:

AceBase realtime database server (webserver endpoint to allow remote connections)

196 lines 6.78 kB
/// <reference types="node" /> /// <reference types="node" /> import { AceBaseStorageSettings } from 'acebase'; import { AceBaseServerEmailSettings } from './email'; import { Server } from 'http'; import type { AceBaseServer } from '../server'; export type AceBaseServerHttpsSettings = { enabled?: boolean; keyPath?: string; certPath?: string; pfxPath?: string; passphrase?: string; } & ({ keyPath: string; certPath: string; } | { pfxPath: string; passphrase: string; } | {}); export declare class AceBaseServerHttpsConfig { enabled: boolean; key?: Buffer; cert?: Buffer; pfx?: Buffer; passphrase?: string; constructor(settings: AceBaseServerHttpsSettings); } export type AuthAccessDefault = 'deny' | 'allow' | 'auth'; export declare const AUTH_ACCESS_DEFAULT: { [key: string]: AuthAccessDefault; }; export declare class AceBaseServerAuthenticationSettings { /** * Whether to enable authorization. Without authorization the entire db can be read and written to by anyone (not recommended 🤷🏼‍♂️) */ readonly enabled: boolean; /** * Whether new users creation is allowed for anyone, or just the admin */ readonly allowUserSignup: boolean; /** * How many new users can sign up per hour per IP address. not implemented yet */ readonly newUserRateLimit: number; /** * How many minutes before access tokens expire. 0 for no expiration. (not implemented yet) */ readonly tokensExpire: number; /** * When the server runs for the first time, what defaults to use to generate the rules.json file with. Options are: 'auth' (only authenticated access to db, default), 'deny' (deny access to anyone except admin user), 'allow' (allow access to anyone) */ readonly defaultAccessRule: AuthAccessDefault; /** * When the server runs for the first time, what password to use for the admin user. If not supplied, a generated password will be used and shown ONCE in the console output. */ readonly defaultAdminPassword?: string; /** * Whether to use a separate database for auth and logging. 'v2' will store data in auth.db, which is NOT TESTED YET! */ readonly separateDb: boolean | 'v2'; constructor(settings: Partial<AceBaseServerAuthenticationSettings>); } /** * TODO: Use AceBaseTransactionLogSettings from acebase */ export declare class AceBaseServerTransactionSettings { /** * Whether to enable transaction logging */ log: boolean; /** * Max age in days to keep transactions in the log file */ maxAge: number; /** * Whether database write operations should not wait until transaction has been logged */ noWait: boolean; constructor(settings: Partial<AceBaseServerTransactionSettings>); } export interface IPCClientSettings { /** * IPC Server host to connect to. Default is `"localhost"` */ host?: string; /** * IPC Server port number */ port: number; /** * Whether to use a secure connection to the server. Strongly recommended if `host` is not `"localhost"`. Default is `false` */ ssl?: boolean; /** * Token used in the IPC Server configuration (optional). The server will refuse connections using the wrong token. */ token?: string; /** * Determines the role of this IPC client. Only 1 process can be assigned the 'master' role, all other processes must use the role 'worker' */ role: 'master' | 'worker'; } export type AceBaseServerSettings = Partial<{ /** * Level of messages logged to console */ logLevel: 'verbose' | 'log' | 'warn' | 'error'; /** * ip or hostname to start the server on */ host: string; /** * port number the server will be listening */ port: number; /** * target directory path to store/open the database. Default is '.' */ path: string; /** * Whether to use secure sockets layer (ssl) */ https: AceBaseServerHttpsSettings; /** * Provide your own server for AceBase to use */ server: Server; /** * Root path for the AceBase routes */ rootPath: string; /** * settings that define if and how authentication is used */ authentication: Partial<AceBaseServerAuthenticationSettings>; /** * maximum size to allow for posted data, eg for updating nodes. Default is '10mb' */ maxPayloadSize: string; /** * Value to use for Access-Control-Allow-Origin CORS header. Default is '*' */ allowOrigin: string; /** * Email settings that enable AceBaseServer to send e-mails, eg for welcoming new users, to reset passwords, notify of new sign ins etc */ email: AceBaseServerEmailSettings; /** * Transaction logging settings. Warning: BETA stage, do NOT use in production yet */ transactions: Partial<AceBaseServerTransactionSettings>; /** * IPC settings for pm2 or cloud-based clusters. BETA stage, see https://github.com/appy-one/acebase-ipc-server */ ipc: IPCClientSettings | 'socket'; /** * Allows overriding of default storage settings used by the database. ALPHA stage */ storage: AceBaseStorageSettings; /** * You can turn this on if you are a sponsor. See https://github.com/appy-one/acebase/discussions/100 for more info */ sponsor: boolean; /** * Whether to use colors in the console logs output * @default true */ logColors: boolean; /** * Init callback that runs before the server adds 404 middleware and starts listening to incoming calls. * Use this callback to extend the server with custom routes, add data validation rules, wait for external events, etc. * @param server Instance of the `AceBaseServer` */ init?: (server: AceBaseServer) => Promise<void>; }>; export declare class AceBaseServerConfig { readonly logLevel: 'verbose' | 'log' | 'warn' | 'error'; readonly host: string; readonly port: number; readonly path: string; readonly maxPayloadSize: string; readonly allowOrigin: string; readonly https: AceBaseServerHttpsConfig; readonly server?: Server; readonly rootPath: string; readonly auth: AceBaseServerAuthenticationSettings; readonly email: AceBaseServerEmailSettings; readonly transactions: AceBaseServerTransactionSettings; readonly ipc: AceBaseServerSettings['ipc']; readonly storage?: AceBaseStorageSettings; readonly sponsor: boolean; readonly logColors: boolean; readonly init?: (server: AceBaseServer) => Promise<void>; constructor(settings: AceBaseServerSettings); } //# sourceMappingURL=index.d.ts.map