UNPKG

@bsv/payment-express-middleware

Version:

BSV Blockchain service monetization express middleware

74 lines (73 loc) 2.7 kB
"use strict"; 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()