/** * @typedef {object} PodiumClientHttpOutgoingOptions * @property {string} name * @property {string} uri To the podlet's `manifest.json` * @property {number} timeout In milliseconds * @property {number} maxAge * @property {number} [retries=4] * @property {boolean} [throwable=false] * @property {boolean} [redirectable=false] * @property {boolean} [rejectUnauthorized=true] * @property {import('http').Agent} [httpAgent] * @property {import('https').Agent} [httpsAgent] */ /** * @typedef {object} PodiumClientResourceOptions * @property {string} [pathname] * @property {import('http').IncomingHttpHeaders} [headers] * @property {object} [query] */ /** * @typedef {object} PodiumRedirect * @property {number} statusCode; * @property {string} location; */ /** * @typedef {object} PodletProxySchema * @property {string} target * @property {string} name */ /** * @typedef {object} PodletManifest Similar to the schema's manifest, but with instances of AssetCss and AssetJs from `@podium/utils` and default values. * @property {string} name * @property {string} version * @property {string} content * @property {string} fallback * @property {Array} js * @property {Array} css * @property {Record | Array} proxy * @property {string} team */ export default class PodletClientHttpOutgoing extends PassThrough { /** * @constructor * @param {PodiumClientHttpOutgoingOptions} options * @param {PodiumClientResourceOptions} [reqOptions] * @param {import('@podium/utils').HttpIncoming} [incoming] */ constructor(options?: PodiumClientHttpOutgoingOptions, reqOptions?: PodiumClientResourceOptions, incoming?: import("@podium/utils").HttpIncoming); set js(value: any); get js(): any; set css(value: any); get css(): any; get rejectUnauthorized(): boolean; get reqOptions(): { pathname: string; headers: import("http").IncomingHttpHeaders; query: object; }; get throwable(): boolean; set manifest(obj: PodletManifest); get manifest(): PodletManifest; set fallback(value: any); get fallback(): any; get timeout(): number; set success(value: boolean); get success(): boolean; get context(): Record; set headers(value: {}); get headers(): {}; set maxAge(value: number); get maxAge(): number; set status(value: "empty" | "fresh" | "cached" | "stale"); /** * What status the manifest is in. This is used to tell what actions need to * be performed throughout the resolving process to complete a request. * * The different statuses can be: * - `"empty"` - there is no manifest available - we are in process of fetching it * - `"fresh"` - the manifest has been fetched but is not stored in cache yet * - `"cached"` - the manifest was retrieved from cache * - `"stale"` - the manifest is outdated, a new manifest needs to be fetched */ get status(): "empty" | "fresh" | "cached" | "stale"; get name(): string; get manifestUri(): string; get fallbackUri(): string; get contentUri(): string; /** * Kill switch for breaking the recursive promise chain in case it is never able to completely resolve. * This is true if the number of recursions matches the threshold. */ get kill(): boolean; /** * Set the number of recursions before the request should be {@link kill}ed */ set recursions(value: number); /** * The number of recursions before the request should be {@link kill}ed */ get recursions(): number; set redirect(value: PodiumRedirect); /** * When {@link redirectable} is `true` this is populated with redirect information so you can send a redirect response to the browser from your layout. * * @see https://podium-lib.io/docs/layout/handling_redirects */ get redirect(): PodiumRedirect; set redirectable(value: boolean); /** * Whether the podlet can signal redirects to the layout. * * @see https://podium-lib.io/docs/layout/handling_redirects */ get redirectable(): boolean; /** * True if the client has returned the podlet's fallback. * * @example * * ```js * if (outgoing.isFallback) console.log("Fallback!"); * ``` * * @see https://podium-lib.io/docs/podlet/fallbacks */ get isFallback(): boolean; pushFallback(): void; hintsReceived: boolean; writeEarlyHints(cb?: () => void): void; get [Symbol.toStringTag](): string; #private; } export type PodiumClientHttpOutgoingOptions = { name: string; /** * To the podlet's `manifest.json` */ uri: string; /** * In milliseconds */ timeout: number; maxAge: number; retries?: number; throwable?: boolean; redirectable?: boolean; rejectUnauthorized?: boolean; httpAgent?: import("http").Agent; httpsAgent?: import("https").Agent; }; export type PodiumClientResourceOptions = { pathname?: string; headers?: import("http").IncomingHttpHeaders; query?: object; }; export type PodiumRedirect = { /** * ; */ statusCode: number; /** * ; */ location: string; }; export type PodletProxySchema = { target: string; name: string; }; /** * Similar to the schema's manifest, but with instances of AssetCss and AssetJs from `@podium/utils` and default values. */ export type PodletManifest = { name: string; version: string; content: string; fallback: string; js: Array; css: Array; proxy: Record | Array; team: string; }; import { PassThrough } from 'stream';