From 7e33e7b30e67fb432d6302aa5a202a4bd0e61a8d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Eduardo=20Bou=C3=A7as?= Date: Wed, 22 Sep 2021 18:36:32 +0100 Subject: [PATCH] feat: add custom lookup option --- src/function/event.d.ts | 4 ++++ src/lib/streamer.js | 17 +++++++++++------ 2 files changed, 15 insertions(+), 6 deletions(-) diff --git a/src/function/event.d.ts b/src/function/event.d.ts index 366ab06d..b174ca42 100644 --- a/src/function/event.d.ts +++ b/src/function/event.d.ts @@ -9,6 +9,10 @@ export interface Event { multiValueQueryStringParameters: EventMultiValueQueryStringParameters | null body: string | null isBase64Encoded: boolean + streaming: { + callback_url: string + target_ipv4: string + } } interface EventHeaders { diff --git a/src/lib/streamer.js b/src/lib/streamer.js index 78de73a3..668a05cb 100644 --- a/src/lib/streamer.js +++ b/src/lib/streamer.js @@ -13,12 +13,17 @@ class StreamingResponse extends PassThrough { outgoingMessage METADATA_BOUNDARY = `___x_nf-metadata_boundary-${Date.now()}` - constructor(url) { + constructor(url, ip) { super() // eslint-disable-next-line node/no-unsupported-features/node-builtins const parsedUrl = new URL(url) - this.outgoingMessage = - parsedUrl.protocol === 'https:' ? https.request(url, { method: 'POST' }) : http.request(url, { method: 'POST' }) + const options = { + lookup: (address, options, callback) => { + callback(null, ip) + }, + method: 'POST', + } + this.outgoingMessage = parsedUrl.protocol === 'https:' ? https.request(url, options) : http.request(url, options) this.outgoingMessage.setHeader('x-nf-metadata-boundary', this.METADATA_BOUNDARY) this.pipe(this.outgoingMessage) } @@ -62,9 +67,9 @@ const wrapHandler = */ (event, context, callback) => { console.log({ event }) - const callbackUrl = event.queryStringParameters.callbackURL + const { callback_url: callbackUrl, target_ipv4: callbackIP } = event.streaming - if (!callbackUrl) { + if (!callbackUrl || !callbackIP) { return { statusCode: 422, body: 'Missing callback URL', @@ -75,7 +80,7 @@ const wrapHandler = let res try { - res = new StreamingResponse(callbackUrl) + res = new StreamingResponse(callbackUrl, callbackIP) } catch (error) { console.error(error) return {