Files
duckdb-ui/ts/pkgs/duckdb-ui-client/src/http/functions/makeDuckDBUIHttpRequestHeaders.ts
2025-06-25 12:09:40 -07:00

74 lines
2.1 KiB
TypeScript

import { DuckDBUIRunOptions } from '../../client/types/DuckDBUIRunOptions.js';
import { toBase64 } from '../../util/functions/toBase64.js';
export interface DuckDBUIHttpRequestHeaderOptions extends DuckDBUIRunOptions {
connectionName?: string;
}
export function makeDuckDBUIHttpRequestHeaders({
description,
connectionName,
databaseName,
schemaName,
errorsAsJson,
parameters,
resultChunkLimit,
resultDatabaseName,
resultSchemaName,
resultTableName,
resultTableChunkLimit,
}: DuckDBUIHttpRequestHeaderOptions): Headers {
const headers = new Headers();
// We base64 encode some values because they can contain characters invalid in an HTTP header.
if (description) {
headers.append('X-DuckDB-UI-Request-Description', description);
}
if (connectionName) {
headers.append('X-DuckDB-UI-Connection-Name', connectionName);
}
if (databaseName) {
headers.append('X-DuckDB-UI-Database-Name', toBase64(databaseName));
}
if (schemaName) {
headers.append('X-DuckDB-UI-Schema-Name', toBase64(schemaName));
}
if (parameters) {
headers.append('X-DuckDB-UI-Parameter-Count', String(parameters.length));
for (let i = 0; i < parameters.length; i++) {
// TODO: support non-string parameters?
headers.append(
`X-DuckDB-UI-Parameter-Value-${i}`,
toBase64(String(parameters[i])),
);
}
}
if (resultChunkLimit !== undefined) {
headers.append('X-DuckDB-UI-Result-Chunk-Limit', String(resultChunkLimit));
}
if (resultDatabaseName) {
headers.append(
'X-DuckDB-UI-Result-Database-Name',
toBase64(resultDatabaseName),
);
}
if (resultSchemaName) {
headers.append(
'X-DuckDB-UI-Result-Schema-Name',
toBase64(resultSchemaName),
);
}
if (resultTableName) {
headers.append('X-DuckDB-UI-Result-Table-Name', toBase64(resultTableName));
}
if (resultTableChunkLimit !== undefined) {
headers.append(
'X-DuckDB-UI-Result-Table-Chunk-Limit',
String(resultTableChunkLimit),
);
}
if (errorsAsJson) {
headers.append('X-DuckDB-UI-Errors-As-JSON', 'true');
}
return headers;
}