@contrast/agent 4.5.0 → 4.7.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (157) hide show
  1. package/bin/VERSION +1 -1
  2. package/bin/linux/contrast-service +0 -0
  3. package/bin/mac/contrast-service +0 -0
  4. package/bin/windows/contrast-service.exe +0 -0
  5. package/lib/assess/membrane/source-membrane.js +4 -18
  6. package/lib/assess/policy/propagators.json +11 -21
  7. package/lib/assess/policy/rules.json +5 -0
  8. package/lib/assess/policy/signatures.json +15 -0
  9. package/lib/assess/propagators/dustjs/escape-html.js +22 -0
  10. package/lib/assess/propagators/dustjs/escape-js.js +22 -0
  11. package/lib/assess/propagators/encode-uri/encode-uri-component.js +22 -0
  12. package/lib/assess/propagators/encode-uri/encode-uri.js +22 -0
  13. package/lib/assess/propagators/index.js +0 -2
  14. package/lib/assess/propagators/joi/values.js +26 -11
  15. package/lib/assess/propagators/mustache/escape.js +22 -0
  16. package/lib/assess/propagators/path/common.js +155 -46
  17. package/lib/assess/propagators/path/join.js +5 -1
  18. package/lib/assess/propagators/path/normalize.js +1 -2
  19. package/lib/assess/propagators/path/resolve.js +11 -2
  20. package/lib/assess/propagators/template-escape.js +84 -0
  21. package/lib/assess/propagators/templates.js +2 -3
  22. package/lib/assess/sinks/dustjs-linkedin-xss.js +131 -0
  23. package/lib/core/arch-components/dynamodb.js +1 -2
  24. package/lib/core/arch-components/dynamodbv3.js +44 -0
  25. package/lib/core/arch-components/index.js +1 -0
  26. package/lib/core/arch-components/rethinkdb.js +53 -0
  27. package/lib/core/async-storage/hooks/bluebird.js +20 -0
  28. package/lib/core/config/options.js +2 -1
  29. package/lib/core/stacktrace.js +3 -4
  30. package/lib/feature-set.js +2 -1
  31. package/lib/hooks/frameworks/base.js +8 -2
  32. package/lib/hooks/frameworks/http.js +23 -16
  33. package/lib/hooks/frameworks/http2.js +73 -0
  34. package/lib/hooks/frameworks/index.js +8 -3
  35. package/lib/hooks/http.js +112 -128
  36. package/lib/hooks/patcher.js +69 -48
  37. package/lib/hooks/require.js +16 -22
  38. package/lib/instrumentation.js +0 -3
  39. package/lib/protect/rules/cmd-injection-command-backdoors/backdoor-detector.js +3 -3
  40. package/lib/protect/rules/signatures/reflected-xss/helpers/function-call.js +1 -1
  41. package/lib/protect/rules/xss/helpers/function-call.js +1 -1
  42. package/lib/util/clean-stack.js +1 -1
  43. package/lib/util/clean-string/brackets.js +3 -3
  44. package/lib/util/ip-analyzer.js +1 -1
  45. package/lib/util/some.js +27 -0
  46. package/lib/util/source-map.js +1 -1
  47. package/lib/util/xml-analyzer/external-entity-finder.js +1 -1
  48. package/package.json +14 -16
  49. package/lib/hooks/frameworks/https.js +0 -42
  50. package/node_modules/bindings/LICENSE.md +0 -22
  51. package/node_modules/bindings/README.md +0 -98
  52. package/node_modules/bindings/bindings.js +0 -221
  53. package/node_modules/bindings/package.json +0 -32
  54. package/node_modules/file-uri-to-path/.npmignore +0 -1
  55. package/node_modules/file-uri-to-path/.travis.yml +0 -30
  56. package/node_modules/file-uri-to-path/History.md +0 -21
  57. package/node_modules/file-uri-to-path/LICENSE +0 -20
  58. package/node_modules/file-uri-to-path/README.md +0 -74
  59. package/node_modules/file-uri-to-path/index.d.ts +0 -2
  60. package/node_modules/file-uri-to-path/index.js +0 -66
  61. package/node_modules/file-uri-to-path/package.json +0 -36
  62. package/node_modules/file-uri-to-path/test/test.js +0 -24
  63. package/node_modules/file-uri-to-path/test/tests.json +0 -13
  64. package/node_modules/glossy/LICENSE +0 -19
  65. package/node_modules/glossy/README.md +0 -129
  66. package/node_modules/glossy/index.js +0 -12
  67. package/node_modules/glossy/lib/glossy/parse.js +0 -520
  68. package/node_modules/glossy/lib/glossy/produce.js +0 -459
  69. package/node_modules/glossy/package.json +0 -47
  70. package/node_modules/glossy/test/decide.js +0 -7
  71. package/node_modules/glossy/test/decode_pri.js +0 -24
  72. package/node_modules/glossy/test/parse_3164.js +0 -104
  73. package/node_modules/glossy/test/parse_5424.js +0 -106
  74. package/node_modules/glossy/test/parse_5848.js +0 -40
  75. package/node_modules/glossy/test/parse_8601.js +0 -14
  76. package/node_modules/glossy/test/parse_rfc3339.js +0 -9
  77. package/node_modules/glossy/test/produce.js +0 -162
  78. package/node_modules/glossy/test/runner.js +0 -40
  79. package/node_modules/glossy/test/structure_data.js +0 -24
  80. package/node_modules/nan/CHANGELOG.md +0 -537
  81. package/node_modules/nan/LICENSE.md +0 -13
  82. package/node_modules/nan/README.md +0 -455
  83. package/node_modules/nan/doc/asyncworker.md +0 -146
  84. package/node_modules/nan/doc/buffers.md +0 -54
  85. package/node_modules/nan/doc/callback.md +0 -76
  86. package/node_modules/nan/doc/converters.md +0 -41
  87. package/node_modules/nan/doc/errors.md +0 -226
  88. package/node_modules/nan/doc/json.md +0 -62
  89. package/node_modules/nan/doc/maybe_types.md +0 -583
  90. package/node_modules/nan/doc/methods.md +0 -664
  91. package/node_modules/nan/doc/new.md +0 -147
  92. package/node_modules/nan/doc/node_misc.md +0 -123
  93. package/node_modules/nan/doc/object_wrappers.md +0 -263
  94. package/node_modules/nan/doc/persistent.md +0 -296
  95. package/node_modules/nan/doc/scopes.md +0 -73
  96. package/node_modules/nan/doc/script.md +0 -38
  97. package/node_modules/nan/doc/string_bytes.md +0 -62
  98. package/node_modules/nan/doc/v8_internals.md +0 -199
  99. package/node_modules/nan/doc/v8_misc.md +0 -85
  100. package/node_modules/nan/include_dirs.js +0 -1
  101. package/node_modules/nan/nan.h +0 -2898
  102. package/node_modules/nan/nan_callbacks.h +0 -88
  103. package/node_modules/nan/nan_callbacks_12_inl.h +0 -514
  104. package/node_modules/nan/nan_callbacks_pre_12_inl.h +0 -520
  105. package/node_modules/nan/nan_converters.h +0 -72
  106. package/node_modules/nan/nan_converters_43_inl.h +0 -68
  107. package/node_modules/nan/nan_converters_pre_43_inl.h +0 -42
  108. package/node_modules/nan/nan_define_own_property_helper.h +0 -29
  109. package/node_modules/nan/nan_implementation_12_inl.h +0 -430
  110. package/node_modules/nan/nan_implementation_pre_12_inl.h +0 -263
  111. package/node_modules/nan/nan_json.h +0 -166
  112. package/node_modules/nan/nan_maybe_43_inl.h +0 -356
  113. package/node_modules/nan/nan_maybe_pre_43_inl.h +0 -268
  114. package/node_modules/nan/nan_new.h +0 -340
  115. package/node_modules/nan/nan_object_wrap.h +0 -156
  116. package/node_modules/nan/nan_persistent_12_inl.h +0 -132
  117. package/node_modules/nan/nan_persistent_pre_12_inl.h +0 -242
  118. package/node_modules/nan/nan_private.h +0 -73
  119. package/node_modules/nan/nan_string_bytes.h +0 -305
  120. package/node_modules/nan/nan_typedarray_contents.h +0 -96
  121. package/node_modules/nan/nan_weak.h +0 -437
  122. package/node_modules/nan/package.json +0 -41
  123. package/node_modules/nan/tools/1to2.js +0 -412
  124. package/node_modules/nan/tools/README.md +0 -14
  125. package/node_modules/nan/tools/package.json +0 -19
  126. package/node_modules/unix-dgram/LICENSE +0 -13
  127. package/node_modules/unix-dgram/README.md +0 -107
  128. package/node_modules/unix-dgram/binding.gyp +0 -20
  129. package/node_modules/unix-dgram/build/Makefile +0 -324
  130. package/node_modules/unix-dgram/build/Release/.deps/Release/obj.target/unix_dgram/src/unix_dgram.o.d +0 -58
  131. package/node_modules/unix-dgram/build/Release/.deps/Release/obj.target/unix_dgram.node.d +0 -1
  132. package/node_modules/unix-dgram/build/Release/.deps/Release/unix_dgram.node.d +0 -1
  133. package/node_modules/unix-dgram/build/Release/obj.target/unix_dgram/src/unix_dgram.o +0 -0
  134. package/node_modules/unix-dgram/build/Release/obj.target/unix_dgram.node +0 -0
  135. package/node_modules/unix-dgram/build/Release/unix_dgram.node +0 -0
  136. package/node_modules/unix-dgram/build/binding.Makefile +0 -6
  137. package/node_modules/unix-dgram/build/config.gypi +0 -213
  138. package/node_modules/unix-dgram/build/unix_dgram.target.mk +0 -159
  139. package/node_modules/unix-dgram/lib/unix_dgram.js +0 -168
  140. package/node_modules/unix-dgram/package.json +0 -36
  141. package/node_modules/unix-dgram/src/unix_dgram.cc +0 -404
  142. package/node_modules/unix-dgram/src/win_dummy.cc +0 -7
  143. package/node_modules/unix-dgram/test/test-connect-callback.js +0 -68
  144. package/node_modules/unix-dgram/test/test-connect.js +0 -53
  145. package/node_modules/unix-dgram/test/test-dgram-unix.js +0 -58
  146. package/node_modules/unix-dgram/test/test-send-error.js +0 -26
  147. package/node_modules/winston-syslog/.eslintrc +0 -7
  148. package/node_modules/winston-syslog/.travis.yml +0 -14
  149. package/node_modules/winston-syslog/CHANGELOG.md +0 -9
  150. package/node_modules/winston-syslog/LICENSE +0 -20
  151. package/node_modules/winston-syslog/README.md +0 -135
  152. package/node_modules/winston-syslog/lib/utils.js +0 -26
  153. package/node_modules/winston-syslog/lib/winston-syslog.js +0 -385
  154. package/node_modules/winston-syslog/package.json +0 -56
  155. package/node_modules/winston-syslog/test/format-test.js +0 -122
  156. package/node_modules/winston-syslog/test/syslog-test.js +0 -95
  157. package/node_modules/winston-syslog/test/unix-connect-test.js +0 -133
@@ -1,135 +0,0 @@
1
- # winston-syslog
2
-
3
- A Syslog transport for [winston][0].
4
-
5
- [![Version npm](https://img.shields.io/npm/v/winston-syslog.svg?style=flat-square)](https://www.npmjs.com/package/winston-syslog)[![npm
6
- Downloads](https://img.shields.io/npm/dm/winston-syslog.svg?style=flat-square)](https://npmcharts.com/compare/winston-syslog?minimal=true)[![Build
7
- Status](https://img.shields.io/travis/winstonjs/winston-syslog/master.svg?style=flat-square)](https://travis-ci.org/winstonjs/winston-syslog)[![Dependencies](https://img.shields.io/david/winstonjs/winston-syslog.svg?style=flat-square)](https://david-dm.org/winstonjs/winston-syslog)
8
-
9
- [![NPM](https://nodei.co/npm/winston-syslog.png?downloads=true&downloadRank=true)](https://nodei.co/npm/winston-syslog/)
10
-
11
- ## Requirements
12
-
13
- * winston >= 3.0.0
14
-
15
- ## Installation
16
-
17
- ### Installing npm (node package manager)
18
-
19
- ``` bash
20
- $ curl http://npmjs.org/install.sh | sh
21
- ```
22
-
23
- ### Installing winston-syslog
24
-
25
- ``` bash
26
- $ npm install winston
27
- $ npm install winston-syslog
28
- ```
29
-
30
- ## Motivation
31
- `tldr;?`: To break the [winston][0] codebase into small modules that work together.
32
-
33
- The [winston][0] codebase has been growing significantly with contributions and other logging transports. This is **awesome**. However, taking a ton of additional dependencies just to do something simple like logging to the Console and a File is overkill.
34
-
35
- ## Usage
36
- To use the Syslog transport in [winston][0], you simply need to require it and then either add it to an existing [winston][0] logger or pass an instance to a new [winston][0] logger:
37
-
38
- ``` js
39
- const winston = require('winston');
40
-
41
- //
42
- // Requiring `winston-syslog` will expose
43
- // `winston.transports.Syslog`
44
- //
45
- require('winston-syslog').Syslog;
46
-
47
- winston.add(new winston.transports.Syslog(options));
48
- ```
49
-
50
- In addition to the options accepted by the syslog (compliant with [RFC 3164][1] and [RFC 5424][2]), the Riak transport also accepts the following options. It is worth noting that the riak-js debug option is set to *false* by default:
51
-
52
- * __host:__ The host running syslogd, defaults to localhost.
53
- * __port:__ The port on the host that syslog is running on, defaults to syslogd's default port.
54
- * __protocol:__ The network protocol to log over (e.g. `tcp4`, `udp4`, `unix`, `unix-connect`, etc).
55
- * __path:__ The path to the syslog dgram socket (i.e. `/dev/log` or `/var/run/syslog` for OS X).
56
- * __pid:__ PID of the process that log messages are coming from (Default `process.pid`).
57
- * __facility:__ Syslog facility to use (Default: `local0`).
58
- * __localhost:__ Host to indicate that log messages are coming from (Default: `localhost`).
59
- * __type:__ The type of the syslog protocol to use (Default: `BSD`, also valid: `5424`).
60
- * __app_name:__ The name of the application (Default: `process.title`).
61
- * __eol:__ The end of line character to be added to the end of the message (Default: Message without modifications).
62
-
63
- *Metadata:* Logged as string compiled by [glossy][3].
64
-
65
- ## Log Levels
66
- Because syslog only allows a subset of the levels available in [winston][0], levels that do not match will be ignored. Therefore, in order to use `winston-syslog` effectively, you should indicate to [winston][0] that you want to use the syslog levels:
67
-
68
- ``` js
69
- const winston = require('winston');
70
- const logger = winston.createLogger({
71
- levels: winston.config.syslog.levels,
72
- transports: [
73
- new winston.transports.Syslog()
74
- ]
75
- });
76
- ```
77
-
78
- The `Syslog` transport will only log to the level that are available in the syslog protocol. These are (in increasing order of severity):
79
-
80
- * debug
81
- * info
82
- * notice
83
- * warning
84
- * error
85
- * crit
86
- * alert
87
- * emerg
88
-
89
- ## Syslog Configuration
90
-
91
- You will have to configure your syslog server to accept TCP connections.
92
- This is usually done in `/etc/syslog-ng.conf`. Let's say you have an app called `fnord`,
93
- the configuration would look something like this:
94
-
95
- ```
96
- source tcp_s {
97
- tcp(ip(0.0.0.0) port(514) max-connections(256));
98
- };
99
- destination fnord_d {
100
- file("/var/log/fnord.log");
101
- };
102
- log { source(tcp_s); destination(fnord_d); };
103
- ```
104
-
105
- If you have multiple apps which need to log via TCP, you can specify filters, as such:
106
-
107
- ```
108
- filter fnord_f { program("fnord"); };
109
- ```
110
-
111
- Then modify the log statement to read:
112
-
113
- ```
114
- log { source(tcp_s); filter(fnord_f); destination(fnord_d); };
115
- ```
116
-
117
- Now if you have another app, called `bnord`, create similar `destination` and `filter` configurations for it, and specify a new log statement, with the same `source`:
118
-
119
- ```
120
- log { source(tcp_s); filter(bnord_f); destination(bnord_d); };
121
- ```
122
-
123
- For this to work, you have to make sure you set the `process.title` variable in your node app.
124
-
125
- ``` js
126
- process.title = 'fnord';
127
- ```
128
-
129
- #### Author: [Charlie Robbins](http://blog.nodejitsu.com)
130
- #### Contributors: [Squeeks](https://github.com/squeeks)
131
-
132
- [0]: https://github.com/indexzero/winston
133
- [1]: http://www.ietf.org/rfc/rfc3164.txt
134
- [2]: http://tools.ietf.org/html/rfc5424
135
- [3]: https://github.com/squeeks/glossy
@@ -1,26 +0,0 @@
1
- 'use strict';
2
-
3
- exports.parseProtocol = function parseProtocol(protocol) {
4
- switch (protocol) {
5
- case 'unix':
6
- case 'unix-connect':
7
- return { type: 'unix', family: null, isDgram: true };
8
-
9
- case 'udp':
10
- case 'udp4':
11
- return { type: 'udp', family: 4, isDgram: true };
12
-
13
- case 'udp6':
14
- return { type: 'udp', family: 6, isDgram: true };
15
-
16
- case 'tcp':
17
- case 'tcp4':
18
- return { type: 'tcp', family: 4 };
19
-
20
- case 'tcp6':
21
- return { type: 'tcp', family: 6 };
22
-
23
- default:
24
- throw new Error('Invalid syslog protocol: ' + protocol);
25
- }
26
- };
@@ -1,385 +0,0 @@
1
- /*
2
- * syslog.js: Transport for logging to a remote syslog consumer
3
- *
4
- * (C) 2011 Squeeks and Charlie Robbins
5
- * MIT LICENCE
6
- *
7
- */
8
-
9
- const dgram = require('dgram');
10
- const net = require('net');
11
- const utils = require('./utils');
12
- const glossy = require('glossy');
13
- const winston = require('winston');
14
- const Transport = require('winston-transport');
15
- const { MESSAGE, LEVEL } = require('triple-beam');
16
-
17
- // Ensure we have the correct winston here.
18
- if (Number(winston.version.split('.')[0]) < 3) {
19
- throw new Error('Winston-syslog requires winston >= 3.0.0');
20
- }
21
-
22
- const levels = Object.keys({
23
- debug: 0,
24
- info: 1,
25
- notice: 2,
26
- warning: 3,
27
- error: 4,
28
- crit: 5,
29
- alert: 6,
30
- emerg: 7
31
- });
32
-
33
- //
34
- // ### function Syslog (options)
35
- // #### @options {Object} Options for this instance.
36
- // Constructor function for the Syslog Transport capable of sending
37
- // RFC 3164 and RFC 5424 compliant messages.
38
- //
39
- class Syslog extends Transport {
40
- //
41
- // Expose the name of this Transport on the prototype
42
- //
43
- get name() {
44
- return 'syslog';
45
- }
46
-
47
- constructor(options = {}) {
48
- //
49
- // Inherit from `winston-transport`.
50
- //
51
- super(options);
52
-
53
- //
54
- // Setup connection state
55
- //
56
- this.connected = false;
57
- this.congested = false;
58
- this.retries = 0;
59
- this.queue = [];
60
- this.inFlight = 0;
61
-
62
- //
63
- // Merge the options for the target Syslog server.
64
- //
65
- this.setOptions(options);
66
-
67
- //
68
- // Setup our Syslog and network members for later use.
69
- //
70
- this.socket = null;
71
- this.producer = new glossy.Produce({
72
- type: this.type,
73
- appName: this.appName,
74
- pid: this.pid,
75
- facility: this.facility
76
- });
77
- }
78
-
79
- setOptions(options) {
80
- this.host = options.host || 'localhost';
81
- this.port = options.port || 514;
82
- this.path = options.path || null;
83
- this.protocol = options.protocol || 'udp4';
84
- this.endOfLine = options.eol;
85
-
86
- this.parseProtocol(this.protocol);
87
-
88
- //
89
- // Merge the default message options.
90
- //
91
- this.localhost = typeof options.localhost !== 'undefined' ? options.localhost : 'localhost';
92
- this.type = options.type || 'BSD';
93
- this.facility = options.facility || 'local0';
94
- this.pid = options.pid || process.pid;
95
- this.appName = options.appName || options.app_name || process.title;
96
- }
97
-
98
- parseProtocol(protocol = this.protocol) {
99
- const parsedProtocol = utils.parseProtocol(protocol);
100
-
101
- this.protocolType = parsedProtocol.type;
102
- this.protocolFamily = parsedProtocol.family;
103
- this.isDgram = parsedProtocol.isDgram;
104
-
105
- if (this.protocolType === 'unix' && !this.path) {
106
- throw new Error('`options.path` is required on unix dgram sockets.');
107
- }
108
- }
109
-
110
- //
111
- // ### function log (info, callback)
112
- // #### @info {object} All relevant log information
113
- // #### @callback {function} Continuation to respond to when complete.
114
- // Core logging method exposed to Winston. Logs the `msg` and optional
115
- // metadata, `meta`, to the specified `level`.
116
- //
117
- log(info, callback) {
118
- if (!~levels.indexOf(info[LEVEL])) {
119
- return callback(new Error('Cannot log unknown syslog level: ' + info[LEVEL]));
120
- }
121
-
122
- const output = info[MESSAGE];
123
-
124
- const syslogMsg = this.producer.produce({
125
- severity: info[LEVEL],
126
- host: this.localhost,
127
- date: new Date(),
128
- message: this.endOfLine ? output + this.endOfLine : output
129
- });
130
-
131
- //
132
- // Attempt to connect to the socket
133
- //
134
- this.connect((err) => {
135
- if (err) {
136
- //
137
- // If there was an error enqueue the message
138
- //
139
- this.queue.push(syslogMsg);
140
-
141
- return callback(err);
142
- }
143
-
144
- //
145
- // On any error writing to the socket, enqueue the message
146
- //
147
- const onError = (logErr) => {
148
- if (logErr) {
149
- this.queue.push(syslogMsg);
150
- this.emit('error', logErr);
151
- }
152
- this.emit('logged', info);
153
- this.inFlight--;
154
- };
155
-
156
- const onCongestion = () => {
157
- onError(new Error('Congestion Error'));
158
- };
159
-
160
- const sendDgram = () => {
161
- const buffer = new Buffer(syslogMsg);
162
-
163
- if (this.protocolType === 'udp') {
164
- this.inFlight++;
165
- this.socket.send(buffer, 0, buffer.length, this.port, this.host, onError);
166
- } else if (this.protocol === 'unix') {
167
- this.inFlight++;
168
- this.socket.send(buffer, 0, buffer.length, this.path, onError);
169
- } else if (this.congested) {
170
- this.queue.push(syslogMsg);
171
- } else {
172
- this.socket.once('congestion', onCongestion);
173
- this.inFlight++;
174
- this.socket.send(buffer, (e) => {
175
- this.socket.removeListener('congestion', onCongestion);
176
- onError(e);
177
- });
178
- }
179
- };
180
-
181
- //
182
- // Write to the `tcp*`, `udp*`, or `unix` socket.
183
- //
184
- if (this.isDgram) {
185
- sendDgram();
186
- } else {
187
- this.socket.write(syslogMsg, 'utf8', onError);
188
- }
189
-
190
- callback(null, true);
191
- });
192
- }
193
-
194
- //
195
- // ### function close ()
196
- // Closes the socket used by this transport freeing the resource.
197
- //
198
- close() {
199
- const max = 6;
200
- let attempt = 0;
201
-
202
- const _close = () => {
203
- if (attempt >= max || (this.queue.length === 0 && this.inFlight <= 0)) {
204
- if (this.socket) {
205
- this.socket.close();
206
- }
207
-
208
- this.emit('closed', this.socket);
209
- } else {
210
- attempt++;
211
- setTimeout(_close, 200 * attempt);
212
- }
213
- };
214
- _close();
215
- }
216
-
217
- connectDgram(callback) {
218
- if (this.protocol === 'unix-connect') {
219
- return this._unixDgramConnect(callback);
220
- } else if (this.protocol === 'unix') {
221
- this.socket = require('unix-dgram').createSocket('unix_dgram');
222
- } else {
223
- // UDP protocol
224
- this.socket = new dgram.Socket(this.protocol);
225
- }
226
-
227
- return callback(null);
228
- }
229
- //
230
- // ### function connect (callback)
231
- // #### @callback {function} Continuation to respond to when complete.
232
- // Connects to the remote syslog server using `dgram` or `net` depending
233
- // on the `protocol` for this instance.
234
- //
235
- connect(callback) {
236
- //
237
- // If the socket already exists then respond
238
- //
239
- if (this.socket) {
240
- return ((!this.socket.readyState) || (this.socket.readyState === 'open')) || this.socket.connected
241
- ? callback(null)
242
- : callback(true);
243
- }
244
-
245
- //
246
- // Create the appropriate socket type.
247
- //
248
- if (this.isDgram) {
249
- return this.connectDgram(callback);
250
- }
251
-
252
- this.socket = new net.Socket();
253
- this.socket.setKeepAlive(true);
254
- this.socket.setNoDelay();
255
-
256
- this.setupEvents();
257
-
258
- const connectConfig = {
259
- host: this.host,
260
- port: this.port
261
- };
262
-
263
- if (this.protocolFamily) {
264
- connectConfig.family = this.protocolFamily;
265
- }
266
-
267
- this.socket.connect(connectConfig);
268
-
269
- //
270
- // Indicate to the callee that the socket is not ready. This
271
- // will enqueue the current message for later.
272
- //
273
- callback(true);
274
- }
275
-
276
- setupEvents() {
277
- const readyEvent = 'connect';
278
- //
279
- // On any error writing to the socket, emit the `logged` event
280
- // and the `error` event.
281
- //
282
- const onError = (logErr) => {
283
- if (logErr) { this.emit('error', logErr); }
284
- this.emit('logged');
285
- this.inFlight--;
286
- };
287
-
288
- //
289
- // Listen to the appropriate events on the socket that
290
- // was just created.
291
- //
292
- this.socket.on(readyEvent, () => {
293
- //
294
- // When the socket is ready, write the current queue
295
- // to it.
296
- //
297
- this.socket.write(this.queue.join(''), 'utf8', onError);
298
-
299
- this.emit('logged');
300
- this.queue = [];
301
- this.retries = 0;
302
- this.connected = true;
303
- }).on('error', function () {
304
- //
305
- // TODO: Pass this error back up
306
- //
307
- }).on('close', () => {
308
- //
309
- // Attempt to reconnect on lost connection(s), progressively
310
- // increasing the amount of time between each try.
311
- //
312
- const interval = Math.pow(2, this.retries);
313
- this.connected = false;
314
-
315
- setTimeout(() => {
316
- this.retries++;
317
- this.socket.connect(this.port, this.host);
318
- }, interval * 1000);
319
- }).on('timeout', () => {
320
- if (this.socket.readyState !== 'open') {
321
- this.socket.destroy();
322
- }
323
- });
324
- }
325
-
326
- _unixDgramConnect(callback) {
327
- const self = this;
328
-
329
- const flushQueue = () => {
330
- let sentMsgs = 0;
331
- this.queue.forEach((msg) => {
332
- const buffer = new Buffer(msg);
333
-
334
- if (!this.congested) {
335
- this.socket.send(buffer, function () {
336
- ++sentMsgs;
337
- });
338
- }
339
- });
340
-
341
- this.queue.splice(0, sentMsgs);
342
- };
343
-
344
- this.socket = require('unix-dgram').createSocket('unix_dgram');
345
- this.socket.on('error', (err) => {
346
- this.emit('error', err);
347
-
348
- if (err.syscall === 'connect') {
349
- this.socket.close();
350
- this.socket = null;
351
- return callback(err);
352
- }
353
- if (err.syscall === 'send') {
354
- this.socket.close();
355
- this.socket = null;
356
- }
357
- });
358
-
359
- this.socket.on('connect', function () {
360
- this.on('congestion', () => {
361
- self.congested = true;
362
- });
363
-
364
- this.on('writable', () => {
365
- self.congested = false;
366
- flushQueue();
367
- });
368
-
369
- flushQueue();
370
- callback();
371
- });
372
-
373
- this.socket.connect(this.path);
374
- }
375
- }
376
-
377
- //
378
- // Define a getter so that `winston.transports.Syslog`
379
- // is available and thus backwards compatible.
380
- //
381
- winston.transports.Syslog = Syslog;
382
-
383
- module.exports = {
384
- Syslog
385
- };
@@ -1,56 +0,0 @@
1
- {
2
- "name": "winston-syslog",
3
- "description": "A syslog transport for winston",
4
- "version": "2.1.0",
5
- "author": "Charlie Robbins <charlie.robbins@gmail.com>",
6
- "contributors": [
7
- {
8
- "name": "Squeeks",
9
- "email": "privacymyass@gmail.com"
10
- },
11
- {
12
- "name": "Mempf",
13
- "email": "mempf.com@gmail.com"
14
- }
15
- ],
16
- "repository": {
17
- "type": "git",
18
- "url": "http://github.com/indexzero/winston-syslog.git"
19
- },
20
- "keywords": [
21
- "logging",
22
- "sysadmin",
23
- "tools",
24
- "winston",
25
- "syslog"
26
- ],
27
- "dependencies": {
28
- "cycle": "^1.0.3",
29
- "glossy": "^0.1.7"
30
- },
31
- "optionalDependencies": {
32
- "unix-dgram": "^2.0.2"
33
- },
34
- "peerDependencies": {
35
- "winston": "^3.0.0"
36
- },
37
- "devDependencies": {
38
- "eslint-config-populist": "^4.1.0",
39
- "vows": "^0.8.2",
40
- "winston": "^3.0.0"
41
- },
42
- "main": "./lib/winston-syslog",
43
- "scripts": {
44
- "lint": "populist **/*.js",
45
- "pretest": "npm run lint",
46
- "test": "vows test/*-test.js --spec"
47
- },
48
- "engines": {
49
- "node": ">= 4.2.2"
50
- },
51
- "license": "MIT"
52
-
53
- ,"_resolved": "https://registry.npmjs.org/winston-syslog/-/winston-syslog-2.1.0.tgz"
54
- ,"_integrity": "sha512-y6wHm7vd99tcpIar6fNM5Widx7Kemf2iguGLC9wty351wqQU9LewRaMraj3FvO2xPJF6P4a4BuSN3jGx/tnIqg=="
55
- ,"_from": "winston-syslog@2.1.0"
56
- }