⚠ This page is served via a proxy. Original site: https://github.com
This service does not collect credentials or authentication data.
Skip to content

Record and log all communication over sockets

Notifications You must be signed in to change notification settings

kellym/hellodog

Repository files navigation

Hello, Dog!

There are libraries out there that record HTTP transactions. There's yakbak and sepia, to name a couple.

This library is different. This library records and logs all communication over sockets, not just sockets used for HTTP transactions.

What happens over sockets, you ask? Let's name a few:

  • HTTP transactions
  • HTTPS transactions
  • FTP transactions
  • WebSockets
  • stdin, stdout, and stderr (this means you can track console.log!)
  • and many more!

Build Status

Quick Start

Patching Socket

When using HelloDog, net.Socket needs to be patched before anything else extends or creates a Socket in order for that to be recorded. Patching can be done by either calling patch() or by assigning track:

// automatically patches when retrieving the track method:
const { track } = require('hellodog');

// or more explicitly:
require('hellodog').patch();

// net Socket can also be unpatched:
require('hellodog').unpatch();

Basic usage

const { track } = require('hellodog');

// basic recording of process.stdout
track((done) => {
  console.log('Hello, dog!');
  console.log('Goodbye, dog!');
  done();
}, (err, log) => {
  // returns an array of sockets and their messages
});

// or use it as a Promise
track((resolve, reject) => {
  console.log('I promise!');
  resolve();
}).then((log) => {

});

const log = await track(fnCall);

Response from console.log:

[
  {
    events: [
      { type: 'write', data: 'Hello, dog!\n', created_at: 1489460314753.3242 },
      { type: 'write', data: 'Goodbye, dog!\n', created_at: 1489460314753.4758 }
    ],
    source: 'stdout'
  }
]

More advanced responses

const { track } = require('hellodog');
const express = require('express');

// recording of an HTTP transaction
const app = express();
app.get('/', (req, res) => {
  res.header('Content-length', 13);
  res.write('Hello, world!');
  res.end();
});
const server = app.listen(8888, () => {
  track((done) => {
    http.get('http://localhost:8888', done);
  }, (err, log) => {
    // returns an array of sockets and their messages,
    // both request and response
    server.close();
  });
});

Response from HTTP transaction:

[
  {
    events: [
      {
        type: 'connect',
        created_at: 1489460545610.2593
      },
      {
        type: 'write',
        data: 'GET / HTTP/1.1\r\nHost: localhost:8888\r\nConnection: close\r\n\r\n',
        created_at: 1489460545620.1575
      },
      {
        type: 'read',
        data: 'HTTP/1.1 200 OK\r\nX-Powered-By: Express\r\nContent-length: 13\r\nDate: Tue, 14 Mar 2017 03:02:25 GMT\r\nConnection: close\r\n\r\nHello, world!',
        created_at: 1489460545628.0654
      }
    ],
    connection: {
      host: 'localhost',
      port: '8888'
    },
    source: 'tcp'
  }
]

Why Dog?

Dogs have both an excellent memory and excellent hearing. We need both.

About

Record and log all communication over sockets

Resources

Stars

Watchers

Forks

Packages

No packages published