( path: string, stamp: string, params?: Record<string, string>, )
| 191 | } |
| 192 | |
| 193 | function buildAuthenticatedAssetUrl( |
| 194 | path: string, |
| 195 | stamp: string, |
| 196 | params?: Record<string, string>, |
| 197 | ): string { |
| 198 | const url = new URL(apiUrl(path), window.location.href); |
| 199 | url.searchParams.set("stamp", String(stamp)); |
| 200 | for (const [key, value] of Object.entries(params ?? {})) { |
| 201 | url.searchParams.set(key, value); |
| 202 | } |
| 203 | const token = accessTokenFromLocation(); |
| 204 | if (token) { |
| 205 | url.searchParams.set("simdeckToken", token); |
| 206 | } |
| 207 | return url.toString(); |
| 208 | } |
| 209 | |
| 210 | function chromeStampNumber(value: number | undefined): string { |
| 211 | return Number.isFinite(value) ? String(Math.round((value ?? 0) * 1000)) : "0"; |
no test coverage detected