{"version":3,"file":"composable.cjs","names":["defaultConfigValues: RestConfig","getRequestUrl","fetchOptions: RequestInit","request"],"sources":["../../src/rest/composable.ts"],"sourcesContent":["import type { StaticTokenClient } from '../auth/types.js';\nimport type { DirectusClient } from '../types/client.js';\nimport { getRequestUrl } from '../utils/get-request-url.js';\nimport { request } from '../utils/request.js';\nimport type { RestClient, RestCommand, RestConfig } from './types.js';\n\nconst defaultConfigValues: RestConfig = {};\n\n/**\n * Creates a client to communicate with the Directus REST API.\n *\n * @returns A Directus REST client.\n */\nexport const rest = (config: Partial<RestConfig> = {}) => {\n\treturn <Schema>(client: DirectusClient<Schema>): RestClient<Schema> => {\n\t\tconst restConfig = { ...defaultConfigValues, ...config };\n\t\treturn {\n\t\t\tasync request<Output = any>(getOptions: RestCommand<Output, Schema>): Promise<Output> {\n\t\t\t\tconst options = getOptions();\n\n\t\t\t\t// all api requests require this content type\n\t\t\t\tif (!options.headers) {\n\t\t\t\t\toptions.headers = {};\n\t\t\t\t}\n\n\t\t\t\tif ('Content-Type' in options.headers === false) {\n\t\t\t\t\toptions.headers['Content-Type'] = 'application/json';\n\t\t\t\t} else if (options.headers['Content-Type'] === 'multipart/form-data') {\n\t\t\t\t\t// let the fetch function deal with multipart boundaries\n\t\t\t\t\tdelete options.headers['Content-Type'];\n\t\t\t\t}\n\n\t\t\t\t// we need to use THIS here instead of client to access overridden functions\n\t\t\t\tif ('getToken' in this && 'Authorization' in options.headers === false) {\n\t\t\t\t\tconst token = await (this.getToken as StaticTokenClient<Schema>['getToken'])();\n\n\t\t\t\t\tif (token) {\n\t\t\t\t\t\toptions.headers['Authorization'] = `Bearer ${token}`;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tconst requestUrl = getRequestUrl(client.url, options.path, options.params);\n\n\t\t\t\tlet fetchOptions: RequestInit = {\n\t\t\t\t\tmethod: options.method ?? 'GET',\n\t\t\t\t\theaders: options.headers ?? {},\n\t\t\t\t};\n\n\t\t\t\tif ('credentials' in restConfig) {\n\t\t\t\t\tfetchOptions.credentials = restConfig.credentials;\n\t\t\t\t}\n\n\t\t\t\tif (options.body) {\n\t\t\t\t\tfetchOptions['body'] = options.body;\n\t\t\t\t}\n\n\t\t\t\t// apply onRequest hook from command\n\t\t\t\tif (options.onRequest) {\n\t\t\t\t\tfetchOptions = await options.onRequest(fetchOptions);\n\t\t\t\t}\n\n\t\t\t\t// apply global onRequest hook\n\t\t\t\tif (restConfig.onRequest) {\n\t\t\t\t\tfetchOptions = await restConfig.onRequest(fetchOptions);\n\t\t\t\t}\n\n\t\t\t\tlet result = await request<Output>(requestUrl.toString(), fetchOptions, client.globals.fetch);\n\n\t\t\t\t// apply onResponse hook from command\n\t\t\t\tif ('onResponse' in options) {\n\t\t\t\t\tresult = await options.onResponse(result, fetchOptions);\n\t\t\t\t}\n\n\t\t\t\t// apply global onResponse hook\n\t\t\t\tif ('onResponse' in config) {\n\t\t\t\t\tresult = await config.onResponse(result, fetchOptions);\n\t\t\t\t}\n\n\t\t\t\treturn result as Output;\n\t\t\t},\n\t\t};\n\t};\n};\n"],"mappings":"kFAMMA,EAAkC,EAAE,CAO7B,GAAQ,EAA8B,EAAE,GACpC,GAAuD,CACtE,IAAM,EAAa,CAAE,GAAG,EAAqB,GAAG,EAAQ,CACxD,MAAO,CACN,MAAM,QAAsB,EAA0D,CACrF,IAAM,EAAU,GAAY,CAe5B,GAZA,AACC,EAAQ,UAAU,EAAE,CAGjB,iBAAkB,EAAQ,QAEnB,EAAQ,QAAQ,kBAAoB,uBAE9C,OAAO,EAAQ,QAAQ,gBAHvB,EAAQ,QAAQ,gBAAkB,mBAO/B,aAAc,MAAQ,oBAAmB,EAAQ,SAAmB,CACvE,IAAM,EAAQ,MAAO,KAAK,UAAoD,CAE1E,IACH,EAAQ,QAAQ,cAAmB,UAAU,KAI/C,IAAM,EAAaC,EAAAA,cAAc,EAAO,IAAK,EAAQ,KAAM,EAAQ,OAAO,CAEtEC,EAA4B,CAC/B,OAAQ,EAAQ,QAAU,MAC1B,QAAS,EAAQ,SAAW,EAAE,CAC9B,CAEG,gBAAiB,IACpB,EAAa,YAAc,EAAW,aAGnC,EAAQ,OACX,EAAa,KAAU,EAAQ,MAI5B,EAAQ,YACX,EAAe,MAAM,EAAQ,UAAU,EAAa,EAIjD,EAAW,YACd,EAAe,MAAM,EAAW,UAAU,EAAa,EAGxD,IAAI,EAAS,MAAMC,EAAAA,QAAgB,EAAW,UAAU,CAAE,EAAc,EAAO,QAAQ,MAAM,CAY7F,MATI,eAAgB,IACnB,EAAS,MAAM,EAAQ,WAAW,EAAQ,EAAa,EAIpD,eAAgB,IACnB,EAAS,MAAM,EAAO,WAAW,EAAQ,EAAa,EAGhD,GAER"}