UNPKG

pocketbase

Version:
1,466 lines (1,465 loc) 47.8 kB
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?: (url: RequestInfo | URL, config?: RequestInit) => Promise<Response>; /** * 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; }; /** * @deprecated use `query` instead * * for backward-compatibility `params` values are merged with `query`, * but this option may get removed in the final v1 release */ params?: { [key: string]: any; }; /** * The request identifier that can be used to cancel pending requests. */ requestKey?: string | null; /** * @deprecated use `requestKey:string` instead */ $cancelKey?: string; /** * @deprecated use `requestKey:null` instead */ $autoCancel?: boolean; } 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 RecordSubscribeOptions extends SendOptions { fields?: string; filter?: string; expand?: string; } 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): Promise<{ [key: string]: any; }>; /** * Bulk updates app settings. * * @throws {ClientResponseError} */ update(bodyParams?: { [key: string]: any; } | FormData, options?: CommonOptions): Promise<{ [key: string]: any; }>; /** * Performs a S3 filesystem connection test. * * The currently supported `filesystem` are "storage" and "backups". * * @throws {ClientResponseError} */ testS3(filesystem?: string, options?: CommonOptions): Promise<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): Promise<boolean>; /** * Generates a new Apple OAuth2 client secret. * * @throws {ClientResponseError} */ generateAppleClientSecret(clientId: string, teamId: string, keyId: string, privateKey: string, duration: number, options?: CommonOptions): Promise<appleClientSecret>; } type UnsubscribeFunc = () => Promise<void>; declare class RealtimeService extends BaseService { clientId: string; private eventSource; private subscriptions; private lastSentSubscriptions; private connectTimeoutId; private maxConnectTimeout; private reconnectTimeoutId; private reconnectAttempts; private maxReconnectAttempts; private predefinedReconnectIntervals; private pendingConnects; /** * Returns whether the realtime connection has been established. */ get isConnected(): boolean; /** * An optional hook that is invoked when the realtime client disconnects * either when unsubscribing from all subscriptions or when the * connection was interrupted or closed by the server. * * The received argument could be used to determine whether the disconnect * is a result from unsubscribing (`activeSubscriptions.length == 0`) * or because of network/server error (`activeSubscriptions.length > 0`). * * If you want to listen for the opposite, aka. when the client connection is established, * subscribe to the `PB_CONNECT` event. */ onDisconnect?: (activeSubscriptions: Array<string>) => void; /** * Register the subscription listener. * * You can subscribe multiple times to the same topic. * * If the SSE connection is not started yet, * this method will also initialize it. */ subscribe(topic: string, callback: (data: any) => void, options?: SendOptions): Promise<UnsubscribeFunc>; /** * Unsubscribe from all subscription listeners with the specified topic. * * If `topic` is not provided, then this method will unsubscribe * from all active subscriptions. * * This method is no-op if there are no active subscriptions. * * The related sse connection will be autoclosed if after the * unsubscribe operation there are no active subscriptions left. */ unsubscribe(topic?: string): Promise<void>; /** * Unsubscribe from all subscription listeners starting with the specified topic prefix. * * This method is no-op if there are no active subscriptions with the specified topic prefix. * * The related sse connection will be autoclosed if after the * unsubscribe operation there are no active subscriptions left. */ unsubscribeByPrefix(keyPrefix: string): Promise<void>; /** * Unsubscribe from all subscriptions matching the specified topic and listener function. * * This method is no-op if there are no active subscription with * the specified topic and listener. * * The related sse connection will be autoclosed if after the * unsubscribe operation there are no active subscriptions left. */ unsubscribeByTopicAndListener(topic: string, listener: EventListener): Promise<void>; private hasSubscriptionListeners; private submitSubscriptions; private getSubscriptionsCancelKey; private getSubscriptionsByTopic; private getNonEmptySubscriptionKeys; private addAllSubscriptionListeners; private removeAllSubscriptionListeners; private connect; private initConnect; private hasUnsentSubscriptions; private connectErrorHandler; private disconnect; } 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): Promise<Array<T>>; /** * Legacy version of getFullList with explicitly specified batch size. */ getFullList<T = M>(batch?: number, options?: ListOptions): Promise<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): Promise<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): Promise<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): Promise<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): Promise<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): Promise<T>; /** * Deletes an existing item by its id. * * @throws {ClientResponseError} */ delete(id: string, options?: CommonOptions): Promise<boolean>; /** * Returns a promise with all list items batch fetched at once. */ protected _getFullList<T = M>(batchSize?: number, options?: ListOptions): Promise<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 RecordSubscription<T = RecordModel> { action: string; // eg. create, update, delete record: T; } type OAuth2UrlCallback = (url: string) => void | Promise<void>; interface OAuth2AuthConfig extends SendOptions { // the name of the OAuth2 provider (eg. "google") provider: string; // custom scopes to overwrite the default ones scopes?: Array<string>; // optional record create data createData?: { [key: string]: any; }; // optional callback that is triggered after the OAuth2 sign-in/sign-up url generation urlCallback?: OAuth2UrlCallback; // optional query params to send with the PocketBase auth request (eg. fields, expand, etc.) query?: RecordOptions; } 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; // --------------------------------------------------------------- // Realtime handlers // --------------------------------------------------------------- /** * Subscribe to realtime changes to the specified topic ("*" or record id). * * If `topic` is the wildcard "*", then this method will subscribe to * any record changes in the collection. * * If `topic` is a record id, then this method will subscribe only * to changes of the specified record id. * * It's OK to subscribe multiple times to the same topic. * You can use the returned `UnsubscribeFunc` to remove only a single subscription. * Or use `unsubscribe(topic)` if you want to remove all subscriptions attached to the topic. */ subscribe<T = M>(topic: string, callback: (data: RecordSubscription<T>) => void, options?: RecordSubscribeOptions): Promise<UnsubscribeFunc>; /** * Unsubscribe from all subscriptions of the specified topic * ("*" or record id). * * If `topic` is not set, then this method will unsubscribe from * all subscriptions associated to the current collection. */ unsubscribe(topic?: string): Promise<void>; // --------------------------------------------------------------- // Crud handers // --------------------------------------------------------------- /** * @inheritdoc */ getFullList<T = M>(options?: RecordFullListOptions): Promise<Array<T>>; /** * @inheritdoc */ getFullList<T = M>(batch?: number, options?: RecordListOptions): Promise<Array<T>>; /** * @inheritdoc */ getList<T = M>(page?: number, perPage?: number, options?: RecordListOptions): Promise<ListResult<T>>; /** * @inheritdoc */ getFirstListItem<T = M>(filter: string, options?: RecordListOptions): Promise<T>; /** * @inheritdoc */ getOne<T = M>(id: string, options?: RecordOptions): Promise<T>; /** * @inheritdoc */ create<T = M>(bodyParams?: { [key: string]: any; } | FormData, options?: RecordOptions): Promise<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): Promise<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): Promise<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): Promise<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): Promise<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): Promise<RecordAuthResponse<T>>; /** * @deprecated * Consider using authWithOAuth2Code(provider, code, codeVerifier, redirectURL, createdData, options?). */ authWithOAuth2Code<T = M>(provider: string, code: string, codeVerifier: string, redirectURL: string, createData?: { [key: string]: any; }, body?: any, query?: any): Promise<RecordAuthResponse<T>>; /** * @deprecated This form of authWithOAuth2 is deprecated. * * Please use `authWithOAuth2Code()` OR its simplified realtime version * as shown in https://pocketbase.io/docs/authentication/#oauth2-integration. */ authWithOAuth2<T = M>(provider: string, code: string, codeVerifier: string, redirectURL: string, createData?: { [key: string]: any; }, bodyParams?: { [key: string]: any; }, queryParams?: RecordOptions): Promise<RecordAuthResponse<T>>; /** * Authenticate a single auth collection record with OAuth2 * **without custom redirects, deeplinks or even page reload**. * * This method initializes a one-off realtime subscription and will * open a popup window with the OAuth2 vendor page to authenticate. * Once the external OAuth2 sign-in/sign-up flow is completed, the popup * window will be automatically closed and the OAuth2 data sent back * to the user through the previously established realtime connection. * * You can specify an optional `urlCallback` prop to customize * the default url `window.open` behavior. * * 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.) * * Example: * * ```js * const authData = await pb.collection("users").authWithOAuth2({ * provider: "google", * }) * ``` * * Note1: When creating the OAuth2 app in the provider dashboard * you have to configure `https://yourdomain.com/api/oauth2-redirect` * as redirect URL. * * Note2: Safari may block the default `urlCallback` popup because * it doesn't allow `window.open` calls as part of an `async` click functions. * To workaround this you can either change your click handler to not be marked as `async` * OR manually call `window.open` before your `async` function and use the * window reference in your own custom `urlCallback` (see https://github.com/pocketbase/pocketbase/discussions/2429#discussioncomment-5943061). * For example: * ```js * <button id="btn">Login with Gitlab</button> * ... * document.getElementById("btn").addEventListener("click", () => { * pb.collection("users").authWithOAuth2({ * provider: "gitlab", * }).then((authData) => { * console.log(authData) * }).catch((err) => { * console.log(err, err.originalError); * }); * }) * ``` * * @throws {ClientResponseError} */ authWithOAuth2<T = M>(options: OAuth2AuthConfig): Promise<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): Promise<RecordAuthResponse<T>>; /** * @deprecated * Consider using authRefresh(options?). */ authRefresh<T = M>(body?: any, query?: any): Promise<RecordAuthResponse<T>>; /** * Sends auth record password reset request. * * @throws {ClientResponseError} */ requestPasswordReset(email: string, options?: CommonOptions): Promise<boolean>; /** * @deprecated * Consider using requestPasswordReset(email, options?). */ requestPasswordReset(email: string, body?: any, query?: any): Promise<boolean>; /** * Confirms auth record password reset request. * * @throws {ClientResponseError} */ confirmPasswordReset(passwordResetToken: string, password: string, passwordConfirm: string, options?: CommonOptions): Promise<boolean>; /** * @deprecated * Consider using confirmPasswordReset(passwordResetToken, password, passwordConfirm, options?). */ confirmPasswordReset(passwordResetToken: string, password: string, passwordConfirm: string, body?: any, query?: any): Promise<boolean>; /** * Sends auth record verification email request. * * @throws {ClientResponseError} */ requestVerification(email: string, options?: CommonOptions): Promise<boolean>; /** * @deprecated * Consider using requestVerification(email, options?). */ requestVerification(email: string, body?: any, query?: any): Promise<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): Promise<boolean>; /** * @deprecated * Consider using confirmVerification(verificationToken, options?). */ confirmVerification(verificationToken: string, body?: any, query?: any): Promise<boolean>; /** * Sends an email change request to the authenticated record model. * * @throws {ClientResponseError} */ requestEmailChange(newEmail: string, options?: CommonOptions): Promise<boolean>; /** * @deprecated * Consider using requestEmailChange(newEmail, options?). */ requestEmailChange(newEmail: string, body?: any, query?: any): Promise<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): Promise<boolean>; /** * @deprecated * Consider using confirmEmailChange(emailChangeToken, password, options?). */ confirmEmailChange(emailChangeToken: string, password: string, body?: any, query?: any): Promise<boolean>; /** * @deprecated use collection("_externalAuths").* * * Lists all linked external auth providers for the specified auth record. * * @throws {ClientResponseError} */ listExternalAuths(recordId: string, options?: CommonOptions): Promise<Array<RecordModel>>; /** * @deprecated use collection("_externalAuths").* * * Unlink a single external auth provider from the specified auth record. * * @throws {ClientResponseError} */ unlinkExternalAuth(recordId: string, provider: string, options?: CommonOptions): Promise<boolean>; /** * Sends auth record OTP to the provided email. * * @throws {ClientResponseError} */ requestOTP(email: string, options?: CommonOptions): Promise<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): Promise<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): Promise<Client>; // --------------------------------------------------------------- // very rudimentary url query params replacement because at the moment // URL (and URLSearchParams) doesn't seem to be fully supported in React Native // // note: for details behind some of the decode/encode parsing check https://unixpapa.com/js/querystring.html private _replaceQueryParams; } 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): Promise<true>; /** * Returns type indexed map with scaffolded collection models * populated with their default field values. * * @throws {ClientResponseError} */ getScaffolds(options?: CommonOptions): Promise<{ [key: string]: CollectionModel; }>; /** * Deletes all records associated with the specified collection. * * @throws {ClientResponseError} */ truncate(collectionIdOrName: string, options?: CommonOptions): Promise<true>; } interface HourlyStats { total: number; date: string; } declare class LogService extends BaseService { /** * Returns paginated logs list. * * @throws {ClientResponseError} */ getList(page?: number, perPage?: number, options?: ListOptions): Promise<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): Promise<LogModel>; /** * Returns logs statistics. * * @throws {ClientResponseError} */ getStats(options?: LogStatsOptions): Promise<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): Promise<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): Promise<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): Promise<Array<BackupFileInfo>>; /** * Initializes a new backup. * * @throws {ClientResponseError} */ create(basename: string, options?: CommonOptions): Promise<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): Promise<boolean>; /** * Deletes a single backup file. * * @throws {ClientResponseError} */ delete(key: string, options?: CommonOptions): Promise<boolean>; /** * Initializes an app data restore from an existing backup. * * @throws {ClientResponseError} */ restore(key: string, options?: CommonOptions): Promise<boolean>; /** * @deprecated Please use `getDownloadURL()`. */ getDownloadUrl(token: string, key: string): string; /** * 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): Promise<Array<CronJob>>; /** * Runs the specified cron job. * * @throws {ClientResponseError} */ run(jobId: string, options?: CommonOptions): Promise<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): Promise<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; } 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 * const pb = new PocketBase("https://example.com") * * pb.beforeSend = function (url, options) { * options.headers = Object.assign({}, options.headers, { * 'X-Custom-Header': 'example', * }) * * return { url, options } * } * * // use the created client as usual... * ``` */ beforeSend?: (url: string, options: SendOptions) => BeforeSendResult | Promise<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 * const pb = new PocketBase("https://example.com") * * pb.afterSend = function (response, data, options) { * if (response.status != 200) { * throw new ClientResponseError({ * url: response.url, * status: response.status, * response: { ... }, * }) * } * * return data; * } * * // use the created client as usual... * ``` */ 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**. */ readonly realtime: RealtimeService; /** * 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 cancelControllers; private recordServices; private enableAutoCancellation; 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>; /** * Globally enable or disable auto cancellation for pending duplicated requests. */ /** * Globally enable or disable auto cancellation for pending duplicated requests. */ autoCancellation(enable: boolean): Client; /** * Cancels single request by its cancellation key. */ /** * Cancels single request by its cancellation key. */ cancelRequest(requestKey: string): Client; /** * Cancels all pending requests. */ /** * Cancels all pending requests. */ cancelAllRequests(): Client; /** * 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): Promise<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} */ 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 };