import { InputMessage, OutputMessage, Policy } from './types.js';
/** A policy function with opts to run it with. Used by the pipeline. */
type PolicyTuple
= [policy: P, opts?: InferPolicyOpts
];
/** Infer opts from the policy. */
type InferPolicyOpts
= P extends Policy ? Opts : never;
/** Helper type for proper type inference of PolicyTuples. */
type Policies = {
[K in keyof T]: PolicyTuple | Policy;
};
/**
* Processes messages through multiple policies.
*
* If any policy returns a `reject` or `shadowReject` action, the pipeline will stop and return the rejected message.
*
* @example
* ```ts
* const result = await pipeline(msg, [
* noopPolicy,
* [filterPolicy, { kinds: [0, 1, 3, 5, 7, 1984, 9734, 9735, 10002] }],
* [keywordPolicy, ['https://t.me/']],
* [regexPolicy, /(🟠|🔥|😳)ChtaGPT/i],
* [pubkeyBanPolicy, ['e810fafa1e89cdf80cced8e013938e87e21b699b24c8570537be92aec4b12c18']],
* [hellthreadPolicy, { limit: 100 }],
* [rateLimitPolicy, { whitelist: ['127.0.0.1'] }],
* [antiDuplicationPolicy, { ttl: 60000, minLength: 50 }],
* ]);
* ```
*/
declare function pipeline(msg: InputMessage, policies: [...Policies]): Promise;
export default pipeline;
export type { PolicyTuple };