@bsv/payment-express-middleware
Version:
BSV Blockchain service monetization express middleware
74 lines (73 loc) • 2.7 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.startServer = exports.app = void 0;
const express_1 = require("express");
const body_parser_1 = require("body-parser");
const sdk_1 = require("@bsv/sdk");
const MockWallet_1 = require("./MockWallet");
const auth_express_middleware_1 = require("@bsv/auth-express-middleware");
const index_1 = require("../index");
// Create Express app instance
exports.app = (0, express_1.default)();
// Middleware setup
exports.app.use(body_parser_1.default.json());
exports.app.use(express_1.default.urlencoded({ extended: true }));
exports.app.use(express_1.default.text());
exports.app.use(body_parser_1.default.raw({ type: 'application/octet-stream', limit: '500mb' }));
exports.app.use((req, res, next) => {
res.header('Access-Control-Allow-Origin', '*');
res.header('Access-Control-Allow-Headers', '*');
res.header('Access-Control-Allow-Methods', '*');
res.header('Access-Control-Expose-Headers', '*');
if (req.method === 'OPTIONS') {
res.sendStatus(200);
}
else {
next();
}
});
const privKey = new sdk_1.PrivateKey(1);
const mockWallet = new MockWallet_1.MockWallet(privKey);
// Define routes
exports.app.post('/no-auth', (req, res) => {
res.status(200).send({ message: 'Non auth endpoint!' });
});
const authMiddleware = (0, auth_express_middleware_1.createAuthMiddleware)({
allowUnauthenticated: false,
wallet: mockWallet,
onCertificatesReceived: (_senderPublicKey, certs, req, res, next) => {
console.log('Certificates received:', certs);
next();
}
});
// Add the mutual authentication middleware
exports.app.use(authMiddleware);
exports.app.use((0, index_1.createPaymentMiddleware)({
wallet: mockWallet,
calculateRequestPrice: async (req) => {
return 10;
}
}));
exports.app.get('/weather', async (req, res) => {
const response = await fetch('https://openweathermap.org/data/2.5/weather?id=5746545&appid=439d4b804bc8187953eb36d2a8c26a02', { method: 'GET' });
const weatherData = await response.json();
res.json(weatherData);
});
// Fallback for 404 errors
exports.app.use((req, res, next) => {
res.status(404).json({
status: 'error',
code: 'NOT_FOUND',
message: 'The requested resource was not found on this server.'
});
});
const port = 3000;
// Export a function to start the server programmatically
const startServer = (port = 3000) => {
return exports.app.listen(port, () => {
console.log(`Server is running on http://localhost:${port}`);
});
};
exports.startServer = startServer;
// For testing independently of integration tests:
// startServer()