{"version":3,"sources":["../src/http/RequestOptions.ts"],"sourcesContent":["import { HttpHeader } from './HttpHeader';\nimport { ContentType } from './ContentType';\nimport { PageOptions } from '../types/PageList';\nimport { Optional } from '../types/Types';\nimport { asString, Text } from '../types/Text';\nimport { Enum } from '../types/Enum';\nimport { CacheAge } from '../types/CacheAge';\nimport { ctx } from '../types/Context';\nimport { toUuid } from '../types/Uuid';\nimport { Id } from '../types/Id';\nimport { on } from '../types/Constructor';\nimport { isDefined, isNotEmpty } from '../types/Is';\n\nexport const toPageOptions = (options?: RequestOptions | PageOptions): Optional<PageOptions> =>\n  options instanceof RequestOptions ? options.pageOptions : options;\n\nexport class RequestOptions extends Enum {\n  public requestOptions: { maxRedirects?: number; validateStatus?: (status: number) => boolean; timeout?: CacheAge } = {};\n\n  constructor(\n    readonly type: ContentType = ContentType.Json,\n    readonly headers: { [key: string]: any } = {},\n    public pageOptions?: PageOptions\n  ) {\n    super(type.name);\n    this.headers['Content-Type'] = type.id;\n    this.headers[HttpHeader.Correlation] = ctx.request.correlationId ?? toUuid();\n  }\n\n  static get Form(): RequestOptions {\n    return new RequestOptions(ContentType.Form);\n  }\n\n  static get Json(): RequestOptions {\n    return new RequestOptions(ContentType.Json);\n  }\n\n  static get Stream(): RequestOptions {\n    return new RequestOptions(ContentType.Stream);\n  }\n\n  static get Text(): RequestOptions {\n    return new RequestOptions(ContentType.Text);\n  }\n\n  static get Xml(): RequestOptions {\n    return new RequestOptions(ContentType.Xml);\n  }\n\n  page = (options: PageOptions): this => {\n    this.pageOptions = options;\n    return this;\n  };\n\n  authorization = (auth: string): this => this.setHeader('Authorization', auth);\n\n  apiKey = (apiKey: string): this => this.setHeader('apiKey', apiKey);\n\n  setHeader = (key: Text, value: Id | boolean): this => on(this, t => (t.headers[asString(key)] = value));\n\n  setHeaderUnlessPresent = (key: string, value?: Id | boolean): this => (value ? this.setHeader(key, this.headers[key] ?? value) : this);\n\n  accept = (type: ContentType): this => this.setHeader('Accept', type.id);\n\n  bearer = (jwt: Text): this => {\n    return isNotEmpty(jwt) ? this.authorization(`Bearer ${jwt}`) : this;\n  };\n\n  basic = (username: Text, password: Text): this => {\n    const basicAuth = Buffer.from(`${username}:${password}`, 'utf8').toString('base64');\n    return this.authorization(`Basic ${basicAuth}`);\n  };\n\n  maxRedirects = (max?: number): this => {\n    this.requestOptions.maxRedirects = max;\n    return this;\n  };\n\n  validateStatus = (validate?: (status: number) => boolean): this => {\n    this.requestOptions.validateStatus = validate;\n    return this;\n  };\n\n  timeout = (t?: CacheAge): this => {\n    this.requestOptions.timeout = t;\n    return this;\n  };\n}\n\nexport const isRequestOptions = (o?: unknown): o is RequestOptions => isDefined(o) && o instanceof RequestOptions;\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;AAaO,IAAM,gBAAgB,CAAC,YAC5B,mBAAmB,iBAAiB,QAAQ,cAAc;AAErD,IAAM,iBAAN,MAAM,wBAAuB,KAAK;AAAA,EAGvC,YACW,OAAoB,YAAY,MAChC,UAAkC,CAAC,GACrC,aACP;AACA,UAAM,KAAK,IAAI;AAJN;AACA;AACF;AAGP,SAAK,QAAQ,cAAc,IAAI,KAAK;AACpC,SAAK,QAAQ,WAAW,WAAW,IAAI,IAAI,QAAQ,iBAAiB,OAAO;AAAA,EAC7E;AAAA,EAVO,iBAA8G,CAAC;AAAA,EAYtH,WAAW,OAAuB;AAChC,WAAO,IAAI,gBAAe,YAAY,IAAI;AAAA,EAC5C;AAAA,EAEA,WAAW,OAAuB;AAChC,WAAO,IAAI,gBAAe,YAAY,IAAI;AAAA,EAC5C;AAAA,EAEA,WAAW,SAAyB;AAClC,WAAO,IAAI,gBAAe,YAAY,MAAM;AAAA,EAC9C;AAAA,EAEA,WAAW,OAAuB;AAChC,WAAO,IAAI,gBAAe,YAAY,IAAI;AAAA,EAC5C;AAAA,EAEA,WAAW,MAAsB;AAC/B,WAAO,IAAI,gBAAe,YAAY,GAAG;AAAA,EAC3C;AAAA,EAEA,OAAO,CAAC,YAA+B;AACrC,SAAK,cAAc;AACnB,WAAO;AAAA,EACT;AAAA,EAEA,gBAAgB,CAAC,SAAuB,KAAK,UAAU,iBAAiB,IAAI;AAAA,EAE5E,SAAS,CAAC,WAAyB,KAAK,UAAU,UAAU,MAAM;AAAA,EAElE,YAAY,CAAC,KAAW,UAA8B,GAAG,MAAM,OAAM,EAAE,QAAQ,SAAS,GAAG,CAAC,IAAI,KAAM;AAAA,EAEtG,yBAAyB,CAAC,KAAa,UAAgC,QAAQ,KAAK,UAAU,KAAK,KAAK,QAAQ,GAAG,KAAK,KAAK,IAAI;AAAA,EAEjI,SAAS,CAAC,SAA4B,KAAK,UAAU,UAAU,KAAK,EAAE;AAAA,EAEtE,SAAS,CAAC,QAAoB;AAC5B,WAAO,WAAW,GAAG,IAAI,KAAK,cAAc,UAAU,GAAG,EAAE,IAAI;AAAA,EACjE;AAAA,EAEA,QAAQ,CAAC,UAAgB,aAAyB;AAChD,UAAM,YAAY,OAAO,KAAK,GAAG,QAAQ,IAAI,QAAQ,IAAI,MAAM,EAAE,SAAS,QAAQ;AAClF,WAAO,KAAK,cAAc,SAAS,SAAS,EAAE;AAAA,EAChD;AAAA,EAEA,eAAe,CAAC,QAAuB;AACrC,SAAK,eAAe,eAAe;AACnC,WAAO;AAAA,EACT;AAAA,EAEA,iBAAiB,CAAC,aAAiD;AACjE,SAAK,eAAe,iBAAiB;AACrC,WAAO;AAAA,EACT;AAAA,EAEA,UAAU,CAAC,MAAuB;AAChC,SAAK,eAAe,UAAU;AAC9B,WAAO;AAAA,EACT;AACF;AAEO,IAAM,mBAAmB,CAAC,MAAqC,UAAU,CAAC,KAAK,aAAa;","names":[]}