{"library":"readmeio","title":"ReadMe Metrics SDK for Node.js","description":"The `readmeio` package provides a Node.js SDK for integrating server-side API metrics with ReadMe.com's API Metrics Dashboard. This library, currently at version 6.2.1, allows developers to track API usage, troubleshoot issues, and gain deep insights into API performance. It supports both generic Node.js integrations and specific middleware for frameworks like Express.js, enabling the capture of incoming request and outgoing response details. Key differentiators include its tight integration with the ReadMe.com platform for centralized API documentation and metrics visualization, and robust features for redacting sensitive parameters or headers before logs are sent. The SDK helps teams monitor aggregate usage data and analyze specific API calls within the ReadMe ecosystem. While no explicit release cadence is published, the project is actively maintained, receiving regular updates to support new features and address issues.","language":"javascript","status":"active","last_verified":"Wed Apr 22","install":{"commands":["npm install readmeio"],"cli":null},"imports":["import { Metrics } from 'readmeio';","import { expressMiddleware } from 'readmeio';","import type { MetricsOptions } from 'readmeio';"],"auth":{"required":false,"env_vars":[]},"quickstart":{"code":"import { Metrics } from 'readmeio';\nimport http from 'http';\n\n// Initialize the ReadMe Metrics SDK\n// In a real application, retrieve process.env.README_API_KEY and process.env.NODE_ENV securely\nconst metrics = new Metrics({\n  apiKey: process.env.README_API_KEY ?? 'your_readme_api_key_here',\n  development: process.env.NODE_ENV !== 'production',\n});\n\n// Create a simple HTTP server to simulate API calls\nconst server = http.createServer(async (req, res) => {\n  // Simulate an incoming request\n  const requestBody = { user: 'testuser', data: 'some data', sensitive_id: '12345' };\n  const requestHeaders = {\n    'content-type': 'application/json',\n    'x-api-key': 'super-secret-internal-key', // Example of a header that might be redacted\n    'user-agent': 'node-http-client',\n  };\n\n  // Simulate an outgoing response\n  const responseBody = { status: 'success', message: 'Hello from API', internal_ref: 'xyz' };\n  const responseHeaders = {\n    'content-type': 'application/json',\n    'x-response-id': 'uuid-12345',\n  };\n\n  // Log the request and response to ReadMe\n  try {\n    await metrics.log({\n      // Full URL is important for ReadMe metrics to categorize endpoints\n      url: new URL(`http://localhost:3000${req.url}`),\n      method: req.method ?? 'GET',\n      api: {\n        key: 'user-id-123', // Identifier for the user making the API call\n        // label: 'Optional label for this user/API key'\n      },\n      // Redaction example: prevent 'x-api-key' header from being sent to ReadMe\n      // and prevent 'user' field in request body\n      redact: {\n        headers: ['x-api-key'],\n        body: ['user', 'sensitive_id'],\n      },\n      request: {\n        headers: requestHeaders,\n        body: JSON.stringify(requestBody),\n      },\n      response: {\n        status: 200,\n        headers: responseHeaders,\n        body: JSON.stringify(responseBody),\n      },\n    });\n  } catch (error) {\n    console.error('Failed to log metrics:', error);\n  }\n\n  res.writeHead(200, { 'Content-Type': 'application/json' });\n  res.end(JSON.stringify(responseBody));\n});\n\nserver.listen(3000, () => {\n  console.log('Server running on http://localhost:3000');\n  console.log('Send a request, e.g., curl http://localhost:3000/api/test');\n  console.log('Check your ReadMe.com dashboard for metrics.');\n});\n\n// Example of how to shut down cleanly\nprocess.on('SIGINT', () => {\n  console.log('Shutting down server...');\n  server.close(async () => {\n    // Ensure any buffered logs are sent before exiting\n    try {\n      await metrics.sendQueue();\n      console.log('Buffered logs sent.');\n    } catch (error) {\n      console.error('Failed to send remaining logs:', error);\n    }\n    console.log('Server gracefully shut down.');\n    process.exit(0);\n  });\n});","lang":"typescript","description":"Demonstrates how to initialize the ReadMe Metrics SDK, create a basic HTTP server, and log simulated API requests and responses, including data redaction for sensitive fields, to the ReadMe.com dashboard. Includes graceful shutdown.","tag":null,"tag_description":null,"last_tested":null,"results":[]},"compatibility":null}