| 56 | |
| 57 | /** Build a URL with serialized query params, omitting `undefined`/`null` values. */ |
| 58 | export function buildUrl(baseUrl: string, path: string, query?: object): string { |
| 59 | const url = `${baseUrl.replace(/\/$/, '')}${path}`; |
| 60 | if (!query) return url; |
| 61 | const params = new URLSearchParams(); |
| 62 | for (const [key, value] of Object.entries(query)) { |
| 63 | if (value === undefined || value === null) continue; |
| 64 | params.append(key, String(value)); |
| 65 | } |
| 66 | const qs = params.toString(); |
| 67 | return qs ? `${url}?${qs}` : url; |
| 68 | } |
| 69 | |
| 70 | /** |
| 71 | * Perform a single request against the OpenWA API and return the parsed JSON |