import { ServerResponse } from 'http'; import { StoreApi, State, GetState, SetState, Subscribe, Destroy, PartialState } from 'zustand/vanilla'; import { DrupalJsonApiParams } from 'drupal-jsonapi-params'; import { TJsonApiBody } from 'jsona/lib/JsonaTypes'; import { fetchAdapter, DrupalStateConfig, GenericIndex, GetObjectByPathParams, GetObjectParams } from './types/types.js'; declare class DrupalState { apiBase: string; apiPrefix: string; defaultLocale?: string; apiRoot: string; private clientId; private clientSecret; fetchAdapter?: fetchAdapter; auth: boolean; private token; debug: boolean; store: StoreApi; getState: GetState; setState: SetState; subscribe: Subscribe; destroy: Destroy; private dataFormatter; onError: (err: Error) => void; noStore: boolean; constructor({ apiBase, apiPrefix, defaultLocale, clientId, clientSecret, fetchAdapter, debug, onError, noStore, }: DrupalStateConfig); /** * Format apiBase, apiPrefix, and combine into apiRoot. * @returns a fully qualified JSON:API root endpoint URL */ assembleApiRoot(): string; /** * Assembles a correctly formatted JSON:API endpoint URL. * @param indexHref a JSON:API resource endpoint * @param id id of an individual resource * @param params user provided JSON:API parameter string or DrupalJsonApiParams object * @returns a full endpoint URL */ assembleEndpoint(indexHref: string, id?: string, params?: string | DrupalJsonApiParams): string; /** * Assembles an authorization header using an existing token if valid, or by * fetching a new token if necessary. * @returns a string containing an authorization header value */ getAuthHeader(): Promise; /** * Wraps {@link fetch/fetchApiIndex} function so it can be overridden. */ fetchApiIndex(apiRoot: string): Promise; /** * * Wraps {@link fetch/fetchJsonapiEndpoint} function so it can be overridden. */ fetchJsonapiEndpoint(endpoint: string, requestInit: {} | undefined, onError: (err: Error) => void, res: ServerResponse | boolean): Promise; /** * Fetches data using our fetch method. * @param endpoint the assembled JSON:API endpoint * @param res response object * @param anon make the request anonymously if true * @returns data fetched from JSON:API endpoint */ fetchData(endpoint: string, res?: ServerResponse | boolean, anon?: boolean): Promise; /** * Get the contents of the root API from local state if it exists, or fetch * it from Drupal if it doesn't exist in local state. * @returns a promise containing an index of api links */ private getApiIndex; /** * Get an object by path alias from local state if it exists, or fetch it from Drupal * if it doesn't exist in local state. * @remarks The query option was experimental and is now deprecated * @param options.objectName - Name of object to retrieve. * @param options.path - Alias of a specific resource * @param options.res - response object * @param options.params - user provided JSON:API parameter string or DrupalJsonApiParams object * @param options.refresh - a boolean value. If true, ignore local state. * @param options.anon - a boolean value. If true, send the request without the authentication header if valid credentials exist. * @returns a promise containing deserialized JSON:API data for the requested * object * * @example * ``` * await store.getObjectByPath({ * objectName: 'node--article', * path: '/articles/my-article', * res: ServerResponse, * params: 'include=field_media_image', * refresh: true, * )} * ``` */ getObjectByPath({ objectName, path, res, params, refresh, anon, query, }: GetObjectByPathParams): Promise | void>; /** * Get an object from local state if it exists, or fetch it from Drupal if * it doesn't exist in local state. * @remarks The query option was experimental and is now deprecated * @param options.objectName - Name of object to fetch * @param options.id - id of a specific resource * @param options.res - response object * @param options.params - user provided JSON:API parameter string or DrupalJsonApiParams object * @param options.all - a boolean value. If true, fetch all objects in a collection. * @param options.refresh - a boolean value. If true, ignore local state. * @param options.anon - a boolean value. If true, send the request without the authentication header if valid credentials exist. * @returns a promise containing deserialized JSON:API data for the requested * object * * @example * * @example * ``` * await store.getObject({ * objectName: 'node--article', * id: 'some-article-uuid-here', * res: ServerResponse, * params: 'include=field_media_image', * refresh: true, * )} * ``` */ getObject({ objectName, id, res, params, all, refresh, anon, query, }: GetObjectParams): Promise | void>; } export { DrupalState as default };