pocketbase-js-sdk-jsvm
Version:
PocketBase JavaScript SDK for JSVM
1,160 lines (1,159 loc) • 35 kB
TypeScript
interface SerializeOptions {
encode?: (val: string | number | boolean) => string;
maxAge?: number;
domain?: string;
path?: string;
expires?: Date;
httpOnly?: boolean;
secure?: boolean;
priority?: string;
sameSite?: boolean | string;
}
interface ListResult<T> {
page: number;
perPage: number;
totalItems: number;
totalPages: number;
items: Array<T>;
}
interface BaseModel {
[key: string]: any;
id: string;
}
interface LogModel extends BaseModel {
level: string;
message: string;
created: string;
updated: string;
data: {
[key: string]: any;
};
}
interface RecordModel extends BaseModel {
collectionId: string;
collectionName: string;
expand?: {
[key: string]: any;
};
}
// -------------------------------------------------------------------
// Collection types
// -------------------------------------------------------------------
interface CollectionField {
[key: string]: any;
id: string;
name: string;
type: string;
system: boolean;
hidden: boolean;
presentable: boolean;
}
interface TokenConfig {
duration: number;
secret?: string;
}
interface AuthAlertConfig {
enabled: boolean;
emailTemplate: EmailTemplate;
}
interface OTPConfig {
enabled: boolean;
duration: number;
length: number;
emailTemplate: EmailTemplate;
}
interface MFAConfig {
enabled: boolean;
duration: number;
rule: string;
}
interface PasswordAuthConfig {
enabled: boolean;
identityFields: Array<string>;
}
interface OAuth2Provider {
pkce?: boolean;
clientId: string;
name: string;
clientSecret: string;
authUrl: string;
tokenUrl: string;
userApiUrl: string;
displayName: string;
}
interface OAuth2Config {
enabled: boolean;
mappedFields: {
[key: string]: string;
};
providers: Array<OAuth2Provider>;
}
interface EmailTemplate {
subject: string;
body: string;
}
interface collection extends BaseModel {
name: string;
fields: Array<CollectionField>;
indexes: Array<string>;
system: boolean;
listRule?: string;
viewRule?: string;
createRule?: string;
updateRule?: string;
deleteRule?: string;
}
interface BaseCollectionModel extends collection {
type: "base";
}
interface ViewCollectionModel extends collection {
type: "view";
viewQuery: string;
}
interface AuthCollectionModel extends collection {
type: "auth";
authRule?: string;
manageRule?: string;
authAlert: AuthAlertConfig;
oauth2: OAuth2Config;
passwordAuth: PasswordAuthConfig;
mfa: MFAConfig;
otp: OTPConfig;
authToken: TokenConfig;
passwordResetToken: TokenConfig;
emailChangeToken: TokenConfig;
verificationToken: TokenConfig;
fileToken: TokenConfig;
verificationTemplate: EmailTemplate;
resetPasswordTemplate: EmailTemplate;
confirmEmailChangeTemplate: EmailTemplate;
}
type CollectionModel = BaseCollectionModel | ViewCollectionModel | AuthCollectionModel;
type AuthRecord = RecordModel | null;
// for backward compatibility
type OnStoreChangeFunc = (token: string, record: AuthRecord) => void;
/**
* Base AuthStore class that stores the auth state in runtime memory (aka. only for the duration of the store instane).
*
* Usually you wouldn't use it directly and instead use the builtin LocalAuthStore, AsyncAuthStore
* or extend it with your own custom implementation.
*/
declare class BaseAuthStore {
protected baseToken: string;
protected baseModel: AuthRecord;
private _onChangeCallbacks;
/**
* Retrieves the stored token (if any).
*/
get token(): string;
/**
* Retrieves the stored model data (if any).
*/
get record(): AuthRecord;
/**
* @deprecated use `record` instead.
*/
get model(): AuthRecord;
/**
* Loosely checks if the store has valid token (aka. existing and unexpired exp claim).
*/
get isValid(): boolean;
/**
* Loosely checks whether the currently loaded store state is for superuser.
*
* Alternatively you can also compare directly `pb.authStore.record?.collectionName`.
*/
get isSuperuser(): boolean;
/**
* @deprecated use `isSuperuser` instead or simply check the record.collectionName property.
*/
get isAdmin(): boolean;
/**
* @deprecated use `!isSuperuser` instead or simply check the record.collectionName property.
*/
get isAuthRecord(): boolean;
/**
* Saves the provided new token and model data in the auth store.
*/
save(token: string, record?: AuthRecord): void;
/**
* Removes the stored token and model data form the auth store.
*/
clear(): void;
/**
* Parses the provided cookie string and updates the store state
* with the cookie's token and model data.
*
* NB! This function doesn't validate the token or its data.
* Usually this isn't a concern if you are interacting only with the
* PocketBase API because it has the proper server-side security checks in place,
* but if you are using the store `isValid` state for permission controls
* in a node server (eg. SSR), then it is recommended to call `authRefresh()`
* after loading the cookie to ensure an up-to-date token and model state.
* For example:
*
* ```js
* pb.authStore.loadFromCookie("cookie string...");
*
* try {
* // get an up-to-date auth store state by veryfing and refreshing the loaded auth model (if any)
* pb.authStore.isValid && await pb.collection('users').authRefresh();
* } catch (_) {
* // clear the auth store on failed refresh
* pb.authStore.clear();
* }
* ```
*/
loadFromCookie(cookie: string, key?: string): void;
/**
* Exports the current store state as cookie string.
*
* By default the following optional attributes are added:
* - Secure
* - HttpOnly
* - SameSite=Strict
* - Path=/
* - Expires={the token expiration date}
*
* NB! If the generated cookie exceeds 4096 bytes, this method will
* strip the model data to the bare minimum to try to fit within the
* recommended size in https://www.rfc-editor.org/rfc/rfc6265#section-6.1.
*/
exportToCookie(options?: SerializeOptions, key?: string): string;
/**
* Register a callback function that will be called on store change.
*
* You can set the `fireImmediately` argument to true in order to invoke
* the provided callback right after registration.
*
* Returns a removal function that you could call to "unsubscribe" from the changes.
*/
onChange(callback: OnStoreChangeFunc, fireImmediately?: boolean): () => void;
protected triggerChange(): void;
}
/**
* BaseService class that should be inherited from all API services.
*/
declare abstract class BaseService {
readonly client: Client;
constructor(client: Client);
}
interface SendOptions extends RequestInit {
// for backward compatibility and to minimize the verbosity,
// any top-level field that doesn't exist in RequestInit or the
// fields below will be treated as query parameter.
[key: string]: any;
/**
* Optional custom fetch function to use for sending the request.
*/
fetch?: typeof $http.send;
/**
* Custom headers to send with the requests.
*/
headers?: {
[key: string]: string;
};
/**
* The body of the request (serialized automatically for json requests).
*/
body?: any;
/**
* Query parameters that will be appended to the request url.
*/
query?: {
[key: string]: any;
};
}
interface CommonOptions extends SendOptions {
fields?: string;
}
interface ListOptions extends CommonOptions {
page?: number;
perPage?: number;
sort?: string;
filter?: string;
skipTotal?: boolean;
}
interface FullListOptions extends ListOptions {
batch?: number;
}
interface RecordOptions extends CommonOptions {
expand?: string;
}
interface RecordListOptions extends ListOptions, RecordOptions {
}
interface RecordFullListOptions extends FullListOptions, RecordOptions {
}
interface LogStatsOptions extends CommonOptions {
filter?: string;
}
interface FileOptions extends CommonOptions {
thumb?: string;
download?: boolean;
}
interface appleClientSecret {
secret: string;
}
declare class SettingsService extends BaseService {
/**
* Fetch all available app settings.
*
* @throws {ClientResponseError}
*/
getAll(options?: CommonOptions): {
[key: string]: any;
};
/**
* Bulk updates app settings.
*
* @throws {ClientResponseError}
*/
update(bodyParams?: {
[key: string]: any;
} | FormData, options?: CommonOptions): {
[key: string]: any;
};
/**
* Performs a S3 filesystem connection test.
*
* The currently supported `filesystem` are "storage" and "backups".
*
* @throws {ClientResponseError}
*/
testS3(filesystem?: string, options?: CommonOptions): boolean;
/**
* Sends a test email.
*
* The possible `emailTemplate` values are:
* - verification
* - password-reset
* - email-change
*
* @throws {ClientResponseError}
*/
testEmail(collectionIdOrName: string, toEmail: string, emailTemplate: string, options?: CommonOptions): boolean;
/**
* Generates a new Apple OAuth2 client secret.
*
* @throws {ClientResponseError}
*/
generateAppleClientSecret(clientId: string, teamId: string, keyId: string, privateKey: string, duration: number, options?: CommonOptions): appleClientSecret;
}
declare abstract class CrudService<M> extends BaseService {
/**
* Base path for the crud actions (without trailing slash, eg. '/admins').
*/
abstract get baseCrudPath(): string;
/**
* Response data decoder.
*/
decode<T = M>(data: {
[key: string]: any;
}): T;
/**
* Returns a promise with all list items batch fetched at once
* (by default 500 items per request; to change it set the `batch` query param).
*
* You can use the generic T to supply a wrapper type of the crud model.
*
* @throws {ClientResponseError}
*/
getFullList<T = M>(options?: FullListOptions): Array<T>;
/**
* Legacy version of getFullList with explicitly specified batch size.
*/
getFullList<T = M>(batch?: number, options?: ListOptions): Array<T>;
/**
* Returns paginated items list.
*
* You can use the generic T to supply a wrapper type of the crud model.
*
* @throws {ClientResponseError}
*/
getList<T = M>(page?: number, perPage?: number, options?: ListOptions): ListResult<T>;
/**
* Returns the first found item by the specified filter.
*
* Internally it calls `getList(1, 1, { filter, skipTotal })` and
* returns the first found item.
*
* You can use the generic T to supply a wrapper type of the crud model.
*
* For consistency with `getOne`, this method will throw a 404
* ClientResponseError if no item was found.
*
* @throws {ClientResponseError}
*/
getFirstListItem<T = M>(filter: string, options?: CommonOptions): T;
/**
* Returns single item by its id.
*
* You can use the generic T to supply a wrapper type of the crud model.
*
* If `id` is empty it will throw a 404 error.
*
* @throws {ClientResponseError}
*/
getOne<T = M>(id: string, options?: CommonOptions): T;
/**
* Creates a new item.
*
* You can use the generic T to supply a wrapper type of the crud model.
*
* @throws {ClientResponseError}
*/
create<T = M>(bodyParams?: {
[key: string]: any;
} | FormData, options?: CommonOptions): T;
/**
* Updates an existing item by its id.
*
* You can use the generic T to supply a wrapper type of the crud model.
*
* @throws {ClientResponseError}
*/
update<T = M>(id: string, bodyParams?: {
[key: string]: any;
} | FormData, options?: CommonOptions): T;
/**
* Deletes an existing item by its id.
*
* @throws {ClientResponseError}
*/
delete(id: string, options?: CommonOptions): boolean;
/**
* Returns a promise with all list items batch fetched at once.
*/
protected _getFullList<T = M>(batchSize?: number, options?: ListOptions): Array<T>;
}
interface RecordAuthResponse<T = RecordModel> {
/**
* The signed PocketBase auth record.
*/
record: T;
/**
* The PocketBase record auth token.
*
* If you are looking for the OAuth2 access and refresh tokens
* they are available under the `meta.accessToken` and `meta.refreshToken` props.
*/
token: string;
/**
* Auth meta data usually filled when OAuth2 is used.
*/
meta?: {
[key: string]: any;
};
}
interface AuthProviderInfo {
name: string;
displayName: string;
state: string;
authURL: string;
codeVerifier: string;
codeChallenge: string;
codeChallengeMethod: string;
}
interface AuthMethodsList {
mfa: {
enabled: boolean;
duration: number;
};
otp: {
enabled: boolean;
duration: number;
};
password: {
enabled: boolean;
identityFields: Array<string>;
};
oauth2: {
enabled: boolean;
providers: Array<AuthProviderInfo>;
};
}
interface OTPResponse {
otpId: string;
}
declare class RecordService<M = RecordModel> extends CrudService<M> {
readonly collectionIdOrName: string;
constructor(client: Client, collectionIdOrName: string);
/**
* @inheritdoc
*/
get baseCrudPath(): string;
/**
* Returns the current collection service base path.
*/
get baseCollectionPath(): string;
/**
* Returns whether the current service collection is superusers.
*/
get isSuperusers(): boolean;
// ---------------------------------------------------------------
// Crud handlers
// ---------------------------------------------------------------
/**
* @inheritdoc
*/
getFullList<T = M>(options?: RecordFullListOptions): Array<T>;
/**
* @inheritdoc
*/
getFullList<T = M>(batch?: number, options?: RecordListOptions): Array<T>;
/**
* @inheritdoc
*/
getList<T = M>(page?: number, perPage?: number, options?: RecordListOptions): ListResult<T>;
/**
* @inheritdoc
*/
getFirstListItem<T = M>(filter: string, options?: RecordListOptions): T;
/**
* @inheritdoc
*/
getOne<T = M>(id: string, options?: RecordOptions): T;
/**
* @inheritdoc
*/
create<T = M>(bodyParams?: {
[key: string]: any;
} | FormData, options?: RecordOptions): T;
/**
* @inheritdoc
*
* If the current `client.authStore.record` matches with the updated id, then
* on success the `client.authStore.record` will be updated with the new response record fields.
*/
update<T = M>(id: string, bodyParams?: {
[key: string]: any;
} | FormData, options?: RecordOptions): T;
/**
* @inheritdoc
*
* If the current `client.authStore.record` matches with the deleted id,
* then on success the `client.authStore` will be cleared.
*/
delete(id: string, options?: CommonOptions): boolean;
// ---------------------------------------------------------------
// Auth handlers
// ---------------------------------------------------------------
/**
* Prepare successful collection authorization response.
*/
protected authResponse<T = M>(responseData: any): RecordAuthResponse<T>;
/**
* Returns all available collection auth methods.
*
* @throws {ClientResponseError}
*/
listAuthMethods(options?: CommonOptions): AuthMethodsList;
/**
* Authenticate a single auth collection record via its username/email and password.
*
* On success, this method also automatically updates
* the client's AuthStore data and returns:
* - the authentication token
* - the authenticated record model
*
* @throws {ClientResponseError}
*/
authWithPassword<T = M>(usernameOrEmail: string, password: string, options?: RecordOptions): RecordAuthResponse<T>;
/**
* Authenticate a single auth collection record with OAuth2 code.
*
* If you don't have an OAuth2 code you may also want to check `authWithOAuth2` method.
*
* On success, this method also automatically updates
* the client's AuthStore data and returns:
* - the authentication token
* - the authenticated record model
* - the OAuth2 account data (eg. name, email, avatar, etc.)
*
* @throws {ClientResponseError}
*/
authWithOAuth2Code<T = M>(provider: string, code: string, codeVerifier: string, redirectURL: string, createData?: {
[key: string]: any;
}, options?: RecordOptions): RecordAuthResponse<T>;
/**
* Refreshes the current authenticated record instance and
* returns a new token and record data.
*
* On success this method also automatically updates the client's AuthStore.
*
* @throws {ClientResponseError}
*/
authRefresh<T = M>(options?: RecordOptions): RecordAuthResponse<T>;
/**
* Sends auth record password reset request.
*
* @throws {ClientResponseError}
*/
requestPasswordReset(email: string, options?: CommonOptions): boolean;
/**
* Confirms auth record password reset request.
*
* @throws {ClientResponseError}
*/
confirmPasswordReset(passwordResetToken: string, password: string, passwordConfirm: string, options?: CommonOptions): boolean;
/**
* Sends auth record verification email request.
*
* @throws {ClientResponseError}
*/
requestVerification(email: string, options?: CommonOptions): boolean;
/**
* Confirms auth record email verification request.
*
* If the current `client.authStore.record` matches with the auth record from the token,
* then on success the `client.authStore.record.verified` will be updated to `true`.
*
* @throws {ClientResponseError}
*/
confirmVerification(verificationToken: string, options?: CommonOptions): boolean;
/**
* Sends an email change request to the authenticated record model.
*
* @throws {ClientResponseError}
*/
requestEmailChange(newEmail: string, options?: CommonOptions): boolean;
/**
* Confirms auth record's new email address.
*
* If the current `client.authStore.record` matches with the auth record from the token,
* then on success the `client.authStore` will be cleared.
*
* @throws {ClientResponseError}
*/
confirmEmailChange(emailChangeToken: string, password: string, options?: CommonOptions): boolean;
/**
* Sends auth record OTP to the provided email.
*
* @throws {ClientResponseError}
*/
requestOTP(email: string, options?: CommonOptions): OTPResponse;
/**
* Authenticate a single auth collection record via OTP.
*
* On success, this method also automatically updates
* the client's AuthStore data and returns:
* - the authentication token
* - the authenticated record model
*
* @throws {ClientResponseError}
*/
authWithOTP<T = M>(otpId: string, password: string, options?: CommonOptions): RecordAuthResponse<T>;
/**
* Impersonate authenticates with the specified recordId and
* returns a new client with the received auth token in a memory store.
*
* If `duration` is 0 the generated auth token will fallback
* to the default collection auth token duration.
*
* This action currently requires superusers privileges.
*
* @throws {ClientResponseError}
*/
impersonate(recordId: string, duration: number, options?: CommonOptions): Client;
}
declare class CollectionService extends CrudService<CollectionModel> {
/**
* @inheritdoc
*/
get baseCrudPath(): string;
/**
* Imports the provided collections.
*
* If `deleteMissing` is `true`, all local collections and their fields,
* that are not present in the imported configuration, WILL BE DELETED
* (including their related records data)!
*
* @throws {ClientResponseError}
*/
import(collections: Array<CollectionModel>, deleteMissing?: boolean, options?: CommonOptions): boolean;
/**
* Returns type indexed map with scaffolded collection models
* populated with their default field values.
*
* @throws {ClientResponseError}
*/
getScaffolds(options?: CommonOptions): {
[key: string]: CollectionModel;
};
/**
* Deletes all records associated with the specified collection.
*
* @throws {ClientResponseError}
*/
truncate(collectionIdOrName: string, options?: CommonOptions): boolean;
}
interface HourlyStats {
total: number;
date: string;
}
declare class LogService extends BaseService {
/**
* Returns paginated logs list.
*
* @throws {ClientResponseError}
*/
getList(page?: number, perPage?: number, options?: ListOptions): ListResult<LogModel>;
/**
* Returns a single log by its id.
*
* If `id` is empty it will throw a 404 error.
*
* @throws {ClientResponseError}
*/
getOne(id: string, options?: CommonOptions): LogModel;
/**
* Returns logs statistics.
*
* @throws {ClientResponseError}
*/
getStats(options?: LogStatsOptions): Array<HourlyStats>;
}
interface HealthCheckResponse {
code: number;
message: string;
data: {
[key: string]: any;
};
}
declare class HealthService extends BaseService {
/**
* Checks the health status of the api.
*
* @throws {ClientResponseError}
*/
check(options?: CommonOptions): HealthCheckResponse;
}
declare class FileService extends BaseService {
/**
* @deprecated Please replace with `pb.files.getURL()`.
*/
getUrl(record: {
[key: string]: any;
}, filename: string, queryParams?: FileOptions): string;
/**
* Builds and returns an absolute record file url for the provided filename.
*/
getURL(record: {
[key: string]: any;
}, filename: string, queryParams?: FileOptions): string;
/**
* Requests a new private file access token for the current auth model.
*
* @throws {ClientResponseError}
*/
getToken(options?: CommonOptions): string;
}
interface BackupFileInfo {
key: string;
size: number;
modified: string;
}
declare class BackupService extends BaseService {
/**
* Returns list with all available backup files.
*
* @throws {ClientResponseError}
*/
getFullList(options?: CommonOptions): Array<BackupFileInfo>;
/**
* Initializes a new backup.
*
* @throws {ClientResponseError}
*/
create(basename: string, options?: CommonOptions): boolean;
/**
* Uploads an existing backup file.
*
* Example:
*
* ```js
* await pb.backups.upload({
* file: new Blob([...]),
* });
* ```
*
* @throws {ClientResponseError}
*/
upload(bodyParams: {
[key: string]: any;
} | FormData, options?: CommonOptions): boolean;
/**
* Deletes a single backup file.
*
* @throws {ClientResponseError}
*/
delete(key: string, options?: CommonOptions): boolean;
/**
* Initializes an app data restore from an existing backup.
*
* @throws {ClientResponseError}
*/
restore(key: string, options?: CommonOptions): boolean;
/**
* Builds a download url for a single existing backup using a
* superuser file token and the backup file key.
*
* The file token can be generated via `pb.files.getToken()`.
*/
getDownloadURL(token: string, key: string): string;
}
interface CronJob {
id: string;
expression: string;
}
declare class CronService extends BaseService {
/**
* Returns list with all registered cron jobs.
*
* @throws {ClientResponseError}
*/
getFullList(options?: CommonOptions): Array<CronJob>;
/**
* Runs the specified cron job.
*
* @throws {ClientResponseError}
*/
run(jobId: string, options?: CommonOptions): boolean;
}
interface BatchRequest {
method: string;
url: string;
json?: {
[key: string]: any;
};
files?: {
[key: string]: Array<any>;
};
headers?: {
[key: string]: string;
};
}
interface BatchRequestResult {
status: number;
body: any;
}
declare class BatchService extends BaseService {
private requests;
private subs;
/**
* Starts constructing a batch request entry for the specified collection.
*/
collection(collectionIdOrName: string): SubBatchService;
/**
* Sends the batch requests.
*
* @throws {ClientResponseError}
*/
send(options?: SendOptions): Array<BatchRequestResult>;
}
declare class SubBatchService {
private requests;
private readonly collectionIdOrName;
constructor(requests: Array<BatchRequest>, collectionIdOrName: string);
/**
* Registers a record upsert request into the current batch queue.
*
* The request will be executed as update if `bodyParams` have a valid existing record `id` value, otherwise - create.
*/
upsert(bodyParams?: {
[key: string]: any;
} | FormData, options?: RecordOptions): void;
/**
* Registers a record create request into the current batch queue.
*/
create(bodyParams?: {
[key: string]: any;
} | FormData, options?: RecordOptions): void;
/**
* Registers a record update request into the current batch queue.
*/
update(id: string, bodyParams?: {
[key: string]: any;
} | FormData, options?: RecordOptions): void;
/**
* Registers a record delete request into the current batch queue.
*/
delete(id: string, options?: SendOptions): void;
private prepareRequest;
}
type Response = {
statusCode: number;
headers: {
[key: string]: Array<string>;
};
cookies: {
[key: string]: http.Cookie;
};
raw: string;
json: any;
};
interface BeforeSendResult {
[key: string]: any;
url?: string;
options?: {
[key: string]: any;
};
}
/**
* PocketBase JS Client.
*/
declare class Client {
/**
* The base PocketBase backend url address (eg. 'http://127.0.0.1.8090').
*/
baseURL: string;
/**
* Legacy getter alias for baseURL.
* @deprecated Please replace with baseURL.
*/
get baseUrl(): string;
/**
* Legacy setter alias for baseURL.
* @deprecated Please replace with baseURL.
*/
set baseUrl(v: string);
/**
* Hook that get triggered right before sending the fetch request,
* allowing you to inspect and modify the url and request options.
*
* For list of the possible options check https://developer.mozilla.org/en-US/docs/Web/API/fetch#options
*
* You can return a non-empty result object `{ url, options }` to replace the url and request options entirely.
*
* Example:
* ```js
* client.beforeSend = function (url, options) {
* options.headers = Object.assign({}, options.headers, {
* 'X-Custom-Header': 'example',
* });
*
* return { url, options }
* };
* ```
*/
beforeSend?: (url: string, options: SendOptions) => BeforeSendResult;
/**
* Hook that get triggered after successfully sending the fetch request,
* allowing you to inspect/modify the response object and its parsed data.
*
* Returns the new Promise resolved `data` that will be returned to the client.
*
* Example:
* ```js
* client.afterSend = function (response, data, options) {
* if (response.status != 200) {
* throw new ClientResponseError({
* url: response.url,
* status: response.status,
* response: { ... },
* });
* }
*
* return data;
* };
* ```
*/
afterSend?: ((response: Response, data: any) => any) & ((response: Response, data: any, options: SendOptions) => any);
/**
* Optional language code (default to `en-US`) that will be sent
* with the requests to the server as `Accept-Language` header.
*/
lang: string;
/**
* A replaceable instance of the local auth store service.
*/
authStore: BaseAuthStore;
/**
* An instance of the service that handles the **Settings APIs**.
*/
readonly settings: SettingsService;
/**
* An instance of the service that handles the **Collection APIs**.
*/
readonly collections: CollectionService;
/**
* An instance of the service that handles the **File APIs**.
*/
readonly files: FileService;
/**
* An instance of the service that handles the **Log APIs**.
*/
readonly logs: LogService;
/**
* An instance of the service that handles the **Realtime APIs**.
*/
/**
* An instance of the service that handles the **Health APIs**.
*/
readonly health: HealthService;
/**
* An instance of the service that handles the **Backup APIs**.
*/
readonly backups: BackupService;
/**
* An instance of the service that handles the **Cron APIs**.
*/
readonly crons: CronService;
private recordServices;
constructor(baseURL?: string, authStore?: BaseAuthStore | null, lang?: string);
/**
* @deprecated
* With PocketBase v0.23.0 admins are converted to a regular auth
* collection named "_superusers", aka. you can use directly collection("_superusers").
*/
get admins(): RecordService;
/**
* Creates a new batch handler for sending multiple transactional
* create/update/upsert/delete collection requests in one network call.
*
* Example:
* ```js
* const batch = pb.createBatch();
*
* batch.collection("example1").create({ ... })
* batch.collection("example2").update("RECORD_ID", { ... })
* batch.collection("example3").delete("RECORD_ID")
* batch.collection("example4").upsert({ ... })
*
* await batch.send()
* ```
*/
/**
* Creates a new batch handler for sending multiple transactional
* create/update/upsert/delete collection requests in one network call.
*
* Example:
* ```js
* const batch = pb.createBatch();
*
* batch.collection("example1").create({ ... })
* batch.collection("example2").update("RECORD_ID", { ... })
* batch.collection("example3").delete("RECORD_ID")
* batch.collection("example4").upsert({ ... })
*
* await batch.send()
* ```
*/
createBatch(): BatchService;
/**
* Returns the RecordService associated to the specified collection.
*/
/**
* Returns the RecordService associated to the specified collection.
*/
collection<M = RecordModel>(idOrName: string): RecordService<M>;
/**
* Constructs a filter expression with placeholders populated from a parameters object.
*
* Placeholder parameters are defined with the `{:paramName}` notation.
*
* The following parameter values are supported:
*
* - `string` (_single quotes are autoescaped_)
* - `number`
* - `boolean`
* - `Date` object (_stringified into the PocketBase datetime format_)
* - `null`
* - everything else is converted to a string using `JSON.stringify()`
*
* Example:
*
* ```js
* pb.collection("example").getFirstListItem(pb.filter(
* 'title ~ {:title} && created >= {:created}',
* { title: "example", created: new Date()}
* ))
* ```
*/
/**
* Constructs a filter expression with placeholders populated from a parameters object.
*
* Placeholder parameters are defined with the `{:paramName}` notation.
*
* The following parameter values are supported:
*
* - `string` (_single quotes are autoescaped_)
* - `number`
* - `boolean`
* - `Date` object (_stringified into the PocketBase datetime format_)
* - `null`
* - everything else is converted to a string using `JSON.stringify()`
*
* Example:
*
* ```js
* pb.collection("example").getFirstListItem(pb.filter(
* 'title ~ {:title} && created >= {:created}',
* { title: "example", created: new Date()}
* ))
* ```
*/
filter(raw: string, params?: {
[key: string]: any;
}): string;
/**
* @deprecated Please use `pb.files.getURL()`.
*/
/**
* @deprecated Please use `pb.files.getURL()`.
*/
getFileUrl(record: {
[key: string]: any;
}, filename: string, queryParams?: FileOptions): string;
/**
* @deprecated Please use `pb.buildURL()`.
*/
/**
* @deprecated Please use `pb.buildURL()`.
*/
buildUrl(path: string): string;
/**
* Builds a full client url by safely concatenating the provided path.
*/
/**
* Builds a full client url by safely concatenating the provided path.
*/
buildURL(path: string): string;
/**
* Sends an api http request.
*
* @throws {ClientResponseError}
*/
/**
* Sends an api http request.
*
* @throws {ClientResponseError}
*/
send<T = any>(path: string, options: SendOptions): T;
/**
* Shallow copy the provided object and takes care to initialize
* any options required to preserve the backward compatability.
*
* @param {SendOptions} options
* @return {SendOptions}
*/
/**
* Shallow copy the provided object and takes care to initialize
* any options required to preserve the backward compatability.
*
* @param {SendOptions} options
* @return {SendOptions}
*/
// @ts-ignore
private initSendOptions;
/**
* Extracts the header with the provided name in case-insensitive manner.
* Returns `null` if no header matching the name is found.
*/
/**
* Extracts the header with the provided name in case-insensitive manner.
* Returns `null` if no header matching the name is found.
*/
private getHeader;
}
export { BeforeSendResult, Client as default };