Skip to content

Commit 5751ffd

Browse files
committed
first commit
0 parents  commit 5751ffd

File tree

2,615 files changed

+319795
-0
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

2,615 files changed

+319795
-0
lines changed

Dockerfile

+39
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,39 @@
1+
# syntax = docker/dockerfile:1
2+
3+
# Adjust NODE_VERSION as desired
4+
ARG NODE_VERSION=18.19.0
5+
FROM node:${NODE_VERSION}-slim as base
6+
7+
LABEL fly_launch_runtime="Node.js"
8+
9+
# Node.js app lives here
10+
WORKDIR /app
11+
12+
# Set production environment
13+
ENV NODE_ENV="production"
14+
15+
16+
# Throw-away build stage to reduce size of final image
17+
FROM base as build
18+
19+
# Install packages needed to build node modules
20+
RUN apt-get update -qq && \
21+
apt-get install --no-install-recommends -y build-essential node-gyp pkg-config python-is-python3
22+
23+
# Install node modules
24+
COPY --link package-lock.json package.json ./
25+
RUN npm ci
26+
27+
# Copy application code
28+
COPY --link . .
29+
30+
31+
# Final stage for app image
32+
FROM base
33+
34+
# Copy built application
35+
COPY --from=build /app /app
36+
37+
# Start the server by default, this can be overwritten at runtime
38+
EXPOSE 3000
39+
CMD [ "npm", "run", "start" ]

README.md

+9
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
# Example NodeJS Connector
2+
An example HTTP server for listening to [PagerTree outgoing webhooks](https://pagertree.com/docs/integration-guides/outgoing-webhook).
3+
4+
The server listens for webhooks and then does custom logic. It comes with a fly.toml to be deployed on [fly.io](https://fly.io) but can be run anywhere using the Dockerfile.
5+
6+
## Running the Server
7+
`DEBUG=example-client-connector:* npm start` then open your browswer to http://localhost:3000
8+
9+
The custom endpoints and logic can be found in [./routes/freshservice.js](./routes/freshservice.js), but this is only an example. It is up to you to write whatever custom logic you need for your app.

app.js

+43
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,43 @@
1+
require('dotenv').config();
2+
var createError = require('http-errors');
3+
var express = require('express');
4+
var path = require('path');
5+
var cookieParser = require('cookie-parser');
6+
var logger = require('morgan');
7+
8+
var indexRouter = require('./routes/index');
9+
var usersRouter = require('./routes/users');
10+
11+
var app = express();
12+
13+
// view engine setup
14+
app.set('views', path.join(__dirname, 'views'));
15+
app.set('view engine', 'jade');
16+
17+
app.use(logger('dev'));
18+
app.use(express.json());
19+
app.use(express.urlencoded({ extended: false }));
20+
app.use(cookieParser());
21+
app.use(express.static(path.join(__dirname, 'public')));
22+
23+
app.use('/', indexRouter);
24+
app.use('/users', usersRouter);
25+
app.use('/freshservice', require('./routes/freshservice'));
26+
27+
// catch 404 and forward to error handler
28+
app.use(function(req, res, next) {
29+
next(createError(404));
30+
});
31+
32+
// error handler
33+
app.use(function(err, req, res, next) {
34+
// set locals, only providing error in development
35+
res.locals.message = err.message;
36+
res.locals.error = req.app.get('env') === 'development' ? err : {};
37+
38+
// render the error page
39+
res.status(err.status || 500);
40+
res.render('error');
41+
});
42+
43+
module.exports = app;

bin/www

+90
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,90 @@
1+
#!/usr/bin/env node
2+
3+
/**
4+
* Module dependencies.
5+
*/
6+
7+
var app = require('../app');
8+
var debug = require('debug')('example-client-connector:server');
9+
var http = require('http');
10+
11+
/**
12+
* Get port from environment and store in Express.
13+
*/
14+
15+
var port = normalizePort(process.env.PORT || '3000');
16+
app.set('port', port);
17+
18+
/**
19+
* Create HTTP server.
20+
*/
21+
22+
var server = http.createServer(app);
23+
24+
/**
25+
* Listen on provided port, on all network interfaces.
26+
*/
27+
28+
server.listen(port);
29+
server.on('error', onError);
30+
server.on('listening', onListening);
31+
32+
/**
33+
* Normalize a port into a number, string, or false.
34+
*/
35+
36+
function normalizePort(val) {
37+
var port = parseInt(val, 10);
38+
39+
if (isNaN(port)) {
40+
// named pipe
41+
return val;
42+
}
43+
44+
if (port >= 0) {
45+
// port number
46+
return port;
47+
}
48+
49+
return false;
50+
}
51+
52+
/**
53+
* Event listener for HTTP server "error" event.
54+
*/
55+
56+
function onError(error) {
57+
if (error.syscall !== 'listen') {
58+
throw error;
59+
}
60+
61+
var bind = typeof port === 'string'
62+
? 'Pipe ' + port
63+
: 'Port ' + port;
64+
65+
// handle specific listen errors with friendly messages
66+
switch (error.code) {
67+
case 'EACCES':
68+
console.error(bind + ' requires elevated privileges');
69+
process.exit(1);
70+
break;
71+
case 'EADDRINUSE':
72+
console.error(bind + ' is already in use');
73+
process.exit(1);
74+
break;
75+
default:
76+
throw error;
77+
}
78+
}
79+
80+
/**
81+
* Event listener for HTTP server "listening" event.
82+
*/
83+
84+
function onListening() {
85+
var addr = server.address();
86+
var bind = typeof addr === 'string'
87+
? 'pipe ' + addr
88+
: 'port ' + addr.port;
89+
debug('Listening on ' + bind);
90+
}

fly.toml

+20
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
# fly.toml app configuration file generated for example-client-connector on 2024-09-11T11:01:56-07:00
2+
#
3+
# See https://fly.io/docs/reference/configuration/ for information about how to use this file.
4+
#
5+
6+
app = 'example-client-connector'
7+
primary_region = 'lax'
8+
9+
[build]
10+
11+
[http_service]
12+
internal_port = 3000
13+
force_https = true
14+
auto_stop_machines = 'stop'
15+
auto_start_machines = true
16+
min_machines_running = 0
17+
processes = ['app']
18+
19+
[[vm]]
20+
size = 'shared-cpu-1x'

node_modules/.bin/acorn

+1
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

node_modules/.bin/cleancss

+1
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

node_modules/.bin/dockerfile

+1
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

node_modules/.bin/ejs

+1
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

node_modules/.bin/jade

+1
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

node_modules/.bin/jake

+1
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

node_modules/.bin/mime

+1
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

node_modules/.bin/mkdirp

+1
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

node_modules/.bin/uglifyjs

+1
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

0 commit comments

Comments
 (0)