Press n or j to go to the next uncovered block, b, p or k for the previous block.
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 | 6x 6x 1x 5x 5x 5x 2x 3x 12x 3x 6x 6x 6x 1x | import { plugins } from './registerPlugin'
import { unsealData } from './unsealData'
import { cloneFastlyResponse } from './cloneFastlyResponse'
import { getDecryptionKey, IntegrationEnv } from '../env'
type FingerprintSealedIngressResponseBody = {
sealedResult?: string | null
sealed_result?: string | null
}
export async function processOpenClientResponse(
parsedBody: Record<string, unknown>,
bodyBytes: ArrayBuffer,
response: Response,
env: IntegrationEnv
): Promise<void> {
const decryptionKey = getDecryptionKey(env)
if (!decryptionKey) {
throw new Error('Decryption key not found in secret store')
}
const typedBody = parsedBody as unknown as FingerprintSealedIngressResponseBody
const sealedResult = typedBody.sealedResult ?? typedBody.sealed_result
if (!sealedResult) {
throw new Error('Sealed result is not enabled for this subscription')
}
const event = unsealData(sealedResult, decryptionKey)
const filteredPlugins = plugins.filter((t) => t.type === 'processOpenClientResponse')
for (const filteredPlugin of filteredPlugins) {
try {
const clonedHttpResponse = cloneFastlyResponse(bodyBytes, response)
await filteredPlugin.callback({ event, httpResponse: clonedHttpResponse })
} catch (e: unknown) {
console.error(`Plugin[${filteredPlugin.name}]`, e)
}
}
}
|