feat: add simulated webhook server

This commit is contained in:
David Germain
2024-05-28 23:19:04 +02:00
committed by benfurber
parent ee413bfc6b
commit 090cfa719d
9 changed files with 130 additions and 28 deletions

View File

@@ -3,6 +3,7 @@ version: "2.1"
services:
emulator:
container_name: backend
build:
context: ./
dockerfile: ./functions/emulator/Dockerfile
@@ -11,4 +12,10 @@ services:
volumes:
- ./functions:/app/functions
- ./functions/data/emulator:/seed
- ./functions/logs:/app/logs
- ./functions/logs:/app/logs
simulated-webhook-receiver:
container_name: simulated-webhook-receiver
build:
context: ./packages/simulated-webhook-receiver/
dockerfile: Dockerfile

View File

@@ -54,6 +54,7 @@ RUN \
# https://firebase.google.com/docs/emulator-suite/install_and_configure
apt-get -y install openjdk-11-jre-headless && \
# For debugging
apt-get -y install curl && \
apt-get -y install nano && \
apt-get clean

View File

@@ -7,7 +7,17 @@ import { config } from 'firebase-functions'
let c = config() as configVars
// If running emulated or without firebase login provide dummy data instead
if (Object.keys(c).length === 0) {
c = { analytics: {}, deployment: {}, integrations: {}, service: null } as any
c = {
analytics: {},
deployment: {
site_url: 'http://localhost:4000',
},
integrations: {
discord_webhook: 'http://simulated-webhook-receiver:30102',
slack_webhook: 'http://simulated-webhook-receiver:30102',
},
service: null,
} as any
}
// strip additional character escapes (\\n -> \n)
if (c.service?.private_key) {

View File

@@ -22,7 +22,7 @@
"start:platform:for-emulated-backend": "yarn build:shared && vite --port 4000",
"start:platform-ci": "yarn build:shared && vite --port 3456",
"frontend:for-emulated-backend:watch": "concurrently --kill-others --names themes,components,platform --prefix-colors yellow,cyan,blue,magenta \"yarn start:themes\" \"yarn start:components\" \"yarn start:platform:for-emulated-backend\"",
"backend:emulator:watch": "concurrently --kill-others \"yarn workspace functions watch\" \"docker-compose up --force-recreate --build emulator\"",
"backend:emulator:watch": "concurrently --kill-others --names functions-watcher,docker-compose \"yarn workspace functions watch\" \"docker-compose up --force-recreate --build\"",
"backend:emulator:stop": "docker stop $(docker ps -a -q)",
"build:themes": "yarn workspace oa-themes build",
"build:components": "yarn workspace oa-components build",

View File

@@ -0,0 +1,31 @@
####################################################################
#
# COMMANDS:
# This commands are ran from `packages/simulated-webhook-reciever/`.
#
# BUILD
# docker build -t simulated-webook-receiver .
#
# RUN
# docker run -it simulated-webook-receiver
#
####################################################################
FROM node:20.9.0-bullseye-slim
WORKDIR /app
RUN \
apt-get update && \
# For debugging
apt-get -y install nano && \
apt-get clean
COPY ./package.json ./package.json
RUN yarn install
COPY ./server.js ./server.js
EXPOSE 30102
ENTRYPOINT [ "node", "./server.js" ]

View File

@@ -0,0 +1 @@
# simulated-webhook-receiver

View File

@@ -0,0 +1,7 @@
{
"name": "simulated-webook-receiver",
"packageManager": "yarn@3.6.4",
"dependencies": {
"express": "^4.19.2"
}
}

View File

@@ -0,0 +1,60 @@
/*global require, process, console*/
const express = require('express')
const app = express()
console.log('Starting server...')
app.use(express.json())
app.get('/health', (_, response) => {
response.status(200).json({ status: 'success' })
})
const requests = []
app.get('/requests', (_, response) => {
console.log('Returning requests...')
response.status(200).json({ requests: requests })
})
app.get('*', (request, response) => handleRequest(request, response, 'GET'))
app.put('*', (request, response) => handleRequest(request, response, 'PUT'))
app.post('*', (request, response) => handleRequest(request, response, 'POST'))
app.delete('*', (request, response) =>
handleRequest(request, response, 'DELETE'),
)
function handleRequest(request, response, method) {
requests.push({
method: method,
url: request.url,
body: request.body,
})
console.log('=============================')
console.log('Request received!')
console.log('Details:')
console.log('URL: ' + request.originalUrl)
console.log('method: ' + method)
console.log('params: ' + JSON.stringify(request.params))
console.log('body: ' + JSON.stringify(request.body))
console.log('=============================')
response.status(200).json({ status: 'success' })
}
const port = 30102
app.listen(port, () => {
console.log('Server running on port: ' + port)
})
process.on('SIGINT', () => {
console.log('Received termination signal...')
process.exit()
})
process.on('exit', () => {
console.log('Exiting... bye-bye!')
})

View File

@@ -5464,13 +5464,6 @@ __metadata:
languageName: node
linkType: hard
"@polka/url@npm:^1.0.0-next.24":
version: 1.0.0-next.25
resolution: "@polka/url@npm:1.0.0-next.25"
checksum: 4ab1d7a37163139c0e7bfc9d1e3f6a2a0db91a78b9f0a21f571d6aec2cdaeaacced744d47886c117aa7579aa5694b303fe3e0bd1922bb9cb3ce6bf7c2dc09801
languageName: node
linkType: hard
"@popperjs/core@npm:^2.11.8":
version: 2.11.8
resolution: "@popperjs/core@npm:2.11.8"
@@ -16152,7 +16145,7 @@ __metadata:
languageName: node
linkType: hard
"express@npm:^4.16.4, express@npm:^4.17.1, express@npm:^4.17.3":
"express@npm:^4.16.4, express@npm:^4.17.1, express@npm:^4.17.3, express@npm:^4.19.2":
version: 4.19.2
resolution: "express@npm:4.19.2"
dependencies:
@@ -23193,13 +23186,6 @@ __metadata:
languageName: node
linkType: hard
"mrmime@npm:^2.0.0":
version: 2.0.0
resolution: "mrmime@npm:2.0.0"
checksum: f6fe11ec667c3d96f1ce5fd41184ed491d5f0a5f4045e82446a471ccda5f84c7f7610dff61d378b73d964f73a320bd7f89788f9e6b9403e32cc4be28ba99f569
languageName: node
linkType: hard
"ms@npm:2.0.0":
version: 2.0.0
resolution: "ms@npm:2.0.0"
@@ -28023,13 +28009,19 @@ __metadata:
languageName: node
linkType: hard
"simulated-webook-receiver@workspace:packages/simulated-webhook-receiver":
version: 0.0.0-use.local
resolution: "simulated-webook-receiver@workspace:packages/simulated-webhook-receiver"
dependencies:
express: ^4.19.2
languageName: unknown
linkType: soft
"sirv@npm:^2.0.3":
version: 2.0.4
resolution: "sirv@npm:2.0.4"
dependencies:
"@polka/url": ^1.0.0-next.24
mrmime: ^2.0.0
totalist: ^3.0.0
semver: ^7.5.3
checksum: 6853384a51d6ee9377dd657e2b257e0e98b29abbfbfa6333e105197f0f100c8c56a4520b47028b04ab1833cf2312526206f38fcd4f891c6df453f40da1a15a57
languageName: node
linkType: hard
@@ -29520,13 +29512,6 @@ __metadata:
languageName: node
linkType: hard
"totalist@npm:^3.0.0":
version: 3.0.1
resolution: "totalist@npm:3.0.1"
checksum: 5132d562cf88ff93fd710770a92f31dbe67cc19b5c6ccae2efc0da327f0954d211bbfd9456389655d726c624f284b4a23112f56d1da931ca7cfabbe1f45e778a
languageName: node
linkType: hard
"tough-cookie@npm:^4.1.2, tough-cookie@npm:^4.1.3":
version: 4.1.4
resolution: "tough-cookie@npm:4.1.4"