|
| 1 | +const { |
| 2 | + getVerificationKeysData, |
| 3 | + prepareVerificationRequest, |
| 4 | + processVerificationResponse, |
| 5 | +} = require('@agnostack/verifyd') |
| 6 | + |
| 7 | +const { BASE_API_PATH, INTEGRATION_PUBLIC_KEY } = process.env |
| 8 | + |
| 9 | +const BASE_HEADERS = { |
| 10 | + 'Content-Type': 'application/json', |
| 11 | + 'Access-Control-Allow-Origin': '*', |
| 12 | + 'Access-Control-Allow-Credentials': true, |
| 13 | +} |
| 14 | + |
| 15 | +const proxy = async (event) => { |
| 16 | + let statusCode |
| 17 | + let body |
| 18 | + |
| 19 | + try { |
| 20 | + const keysData = await getVerificationKeysData(INTEGRATION_PUBLIC_KEY) |
| 21 | + const _prepareVerificationRequest = prepareVerificationRequest({ keysData }) |
| 22 | + const _processVerificationResponse = processVerificationResponse({ keysData }) |
| 23 | + |
| 24 | + const url = `${BASE_API_PATH}/${event?.pathParameters?.route}` |
| 25 | + const options = { |
| 26 | + method: 'POST', |
| 27 | + body: event?.body, |
| 28 | + headers: event?.headers, |
| 29 | + } |
| 30 | + |
| 31 | + const [ |
| 32 | + requestPath, |
| 33 | + requestOptions, |
| 34 | + derivedSecretKey |
| 35 | + ] = await _prepareVerificationRequest(url, options) ?? [] |
| 36 | + |
| 37 | + const encryptedResponse = await fetch(requestPath, requestOptions).then((_response) => ( |
| 38 | + _response.json() |
| 39 | + )) |
| 40 | + |
| 41 | + statusCode = 200 |
| 42 | + body = await _processVerificationResponse(encryptedResponse, derivedSecretKey) |
| 43 | + } catch (error) { |
| 44 | + const message = 'Error proxying API request' |
| 45 | + console.error(message, error) |
| 46 | + |
| 47 | + statusCode = 500 |
| 48 | + body = { error: message } |
| 49 | + } |
| 50 | + |
| 51 | + return { statusCode, body: JSON.stringify(body), headers: BASE_HEADERS } |
| 52 | +} |
| 53 | + |
| 54 | +module.exports = { proxy } |
0 commit comments