( env: Env, origin: string, packageName: string, version: string, filename: string | undefined, searchParams: URLSearchParams )
| 279 | } |
| 280 | |
| 281 | async function getBuildIntegrity( |
| 282 | env: Env, |
| 283 | origin: string, |
| 284 | packageName: string, |
| 285 | version: string, |
| 286 | filename: string | undefined, |
| 287 | searchParams: URLSearchParams |
| 288 | ): Promise<{ response: Response } | { value: string | null }> { |
| 289 | if (searchParams.has("raw")) { |
| 290 | return { value: null }; |
| 291 | } |
| 292 | |
| 293 | let buildSearchParams = new URLSearchParams(searchParams); |
| 294 | buildSearchParams.set("origin", origin); |
| 295 | let response: Response; |
| 296 | try { |
| 297 | response = await fetch( |
| 298 | new URL(`/build/${packageName}@${version}${filename ?? ""}${normalizeSearch(buildSearchParams)}`, env.FILES_ORIGIN) |
| 299 | ); |
| 300 | } catch { |
| 301 | return { value: null }; |
| 302 | } |
| 303 | |
| 304 | if (!response.ok) { |
| 305 | if (response.status === 404) { |
| 306 | return { |
| 307 | response: jsonError({ |
| 308 | code: "BUILD_NOT_FOUND", |
| 309 | message: await response.text(), |
| 310 | status: 404, |
| 311 | }), |
| 312 | }; |
| 313 | } |
| 314 | |
| 315 | return { value: null }; |
| 316 | } |
| 317 | |
| 318 | let bytes = await response.arrayBuffer(); |
| 319 | let digest = await crypto.subtle.digest("SHA-384", bytes); |
| 320 | return { value: `sha384-${base64Encode(new Uint8Array(digest))}` }; |
| 321 | } |
| 322 | |
| 323 | async function serveRawFile(env: Env, packageName: string, version: string, filename: string): Promise<Response> { |
| 324 | let rawResponse = await fetch(new URL(`/file/${packageName}@${version}${filename}`, env.FILES_ORIGIN)); |
no test coverage detected