nativescript 9.1.0-alpha.5 → 9.1.0-alpha.7

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 (226) hide show
  1. package/lib/common/mobile/android/android-emulator-services.js +11 -3
  2. package/node_modules/debug/LICENSE +20 -0
  3. package/node_modules/debug/README.md +481 -0
  4. package/node_modules/debug/package.json +64 -0
  5. package/node_modules/debug/src/browser.js +272 -0
  6. package/node_modules/debug/src/common.js +292 -0
  7. package/node_modules/debug/src/index.js +10 -0
  8. package/node_modules/debug/src/node.js +263 -0
  9. package/node_modules/ms/index.js +162 -0
  10. package/node_modules/ms/license.md +21 -0
  11. package/node_modules/ms/package.json +38 -0
  12. package/node_modules/ms/readme.md +59 -0
  13. package/node_modules/universal-analytics/.travis.yml +11 -0
  14. package/node_modules/universal-analytics/AcceptableParams.md +757 -0
  15. package/node_modules/universal-analytics/HISTORY.md +170 -0
  16. package/node_modules/universal-analytics/Makefile +5 -0
  17. package/node_modules/universal-analytics/README.md +651 -0
  18. package/node_modules/universal-analytics/index.js +2 -0
  19. package/node_modules/universal-analytics/lib/config.js +171 -0
  20. package/node_modules/universal-analytics/lib/index.js +563 -0
  21. package/node_modules/universal-analytics/lib/request.js +73 -0
  22. package/node_modules/universal-analytics/lib/utils.js +29 -0
  23. package/node_modules/universal-analytics/package.json +33 -0
  24. package/node_modules/universal-analytics/test/_enqueue.js +144 -0
  25. package/node_modules/universal-analytics/test/event.js +346 -0
  26. package/node_modules/universal-analytics/test/exception.js +233 -0
  27. package/node_modules/universal-analytics/test/index.js +141 -0
  28. package/node_modules/universal-analytics/test/item.js +550 -0
  29. package/node_modules/universal-analytics/test/middleware.js +119 -0
  30. package/node_modules/universal-analytics/test/mocha.opts +3 -0
  31. package/node_modules/universal-analytics/test/pageview.js +286 -0
  32. package/node_modules/universal-analytics/test/send.js +232 -0
  33. package/node_modules/universal-analytics/test/set.js +68 -0
  34. package/node_modules/universal-analytics/test/timing.js +363 -0
  35. package/node_modules/universal-analytics/test/transaction.js +371 -0
  36. package/node_modules/uuid/LICENSE.md +9 -0
  37. package/node_modules/uuid/README.md +510 -0
  38. package/node_modules/uuid/dist/cjs/index.d.ts +15 -0
  39. package/node_modules/uuid/dist/cjs/index.js +31 -0
  40. package/node_modules/uuid/dist/cjs/max.d.ts +2 -0
  41. package/node_modules/uuid/dist/cjs/max.js +3 -0
  42. package/node_modules/uuid/dist/cjs/md5.d.ts +4 -0
  43. package/node_modules/uuid/dist/cjs/md5.js +13 -0
  44. package/node_modules/uuid/dist/cjs/native.d.ts +6 -0
  45. package/node_modules/uuid/dist/cjs/native.js +4 -0
  46. package/node_modules/uuid/dist/cjs/nil.d.ts +2 -0
  47. package/node_modules/uuid/dist/cjs/nil.js +3 -0
  48. package/node_modules/uuid/dist/cjs/package.json +1 -0
  49. package/node_modules/uuid/dist/cjs/parse.d.ts +2 -0
  50. package/node_modules/uuid/dist/cjs/parse.js +11 -0
  51. package/node_modules/uuid/dist/cjs/regex.d.ts +2 -0
  52. package/node_modules/uuid/dist/cjs/regex.js +3 -0
  53. package/node_modules/uuid/dist/cjs/rng.d.ts +1 -0
  54. package/node_modules/uuid/dist/cjs/rng.js +13 -0
  55. package/node_modules/uuid/dist/cjs/sha1.d.ts +4 -0
  56. package/node_modules/uuid/dist/cjs/sha1.js +13 -0
  57. package/node_modules/uuid/dist/cjs/stringify.d.ts +3 -0
  58. package/node_modules/uuid/dist/cjs/stringify.js +39 -0
  59. package/node_modules/uuid/dist/cjs/types.d.ts +21 -0
  60. package/node_modules/uuid/dist/cjs/types.js +2 -0
  61. package/node_modules/uuid/dist/cjs/uuid-bin.d.ts +1 -0
  62. package/node_modules/uuid/dist/cjs/uuid-bin.js +72 -0
  63. package/node_modules/uuid/dist/cjs/v1.d.ts +11 -0
  64. package/node_modules/uuid/dist/cjs/v1.js +87 -0
  65. package/node_modules/uuid/dist/cjs/v1ToV6.d.ts +2 -0
  66. package/node_modules/uuid/dist/cjs/v1ToV6.js +13 -0
  67. package/node_modules/uuid/dist/cjs/v3.d.ts +9 -0
  68. package/node_modules/uuid/dist/cjs/v3.js +14 -0
  69. package/node_modules/uuid/dist/cjs/v35.d.ts +7 -0
  70. package/node_modules/uuid/dist/cjs/v35.js +41 -0
  71. package/node_modules/uuid/dist/cjs/v4.d.ts +4 -0
  72. package/node_modules/uuid/dist/cjs/v4.js +29 -0
  73. package/node_modules/uuid/dist/cjs/v5.d.ts +9 -0
  74. package/node_modules/uuid/dist/cjs/v5.js +14 -0
  75. package/node_modules/uuid/dist/cjs/v6.d.ts +4 -0
  76. package/node_modules/uuid/dist/cjs/v6.js +19 -0
  77. package/node_modules/uuid/dist/cjs/v6ToV1.d.ts +2 -0
  78. package/node_modules/uuid/dist/cjs/v6ToV1.js +13 -0
  79. package/node_modules/uuid/dist/cjs/v7.d.ts +9 -0
  80. package/node_modules/uuid/dist/cjs/v7.js +69 -0
  81. package/node_modules/uuid/dist/cjs/validate.d.ts +2 -0
  82. package/node_modules/uuid/dist/cjs/validate.js +7 -0
  83. package/node_modules/uuid/dist/cjs/version.d.ts +2 -0
  84. package/node_modules/uuid/dist/cjs/version.js +10 -0
  85. package/node_modules/uuid/dist/cjs-browser/index.d.ts +15 -0
  86. package/node_modules/uuid/dist/cjs-browser/index.js +31 -0
  87. package/node_modules/uuid/dist/cjs-browser/max.d.ts +2 -0
  88. package/node_modules/uuid/dist/cjs-browser/max.js +3 -0
  89. package/node_modules/uuid/dist/cjs-browser/md5.d.ts +2 -0
  90. package/node_modules/uuid/dist/cjs-browser/md5.js +137 -0
  91. package/node_modules/uuid/dist/cjs-browser/native.d.ts +4 -0
  92. package/node_modules/uuid/dist/cjs-browser/native.js +4 -0
  93. package/node_modules/uuid/dist/cjs-browser/nil.d.ts +2 -0
  94. package/node_modules/uuid/dist/cjs-browser/nil.js +3 -0
  95. package/node_modules/uuid/dist/cjs-browser/package.json +1 -0
  96. package/node_modules/uuid/dist/cjs-browser/parse.d.ts +2 -0
  97. package/node_modules/uuid/dist/cjs-browser/parse.js +11 -0
  98. package/node_modules/uuid/dist/cjs-browser/regex.d.ts +2 -0
  99. package/node_modules/uuid/dist/cjs-browser/regex.js +3 -0
  100. package/node_modules/uuid/dist/cjs-browser/rng.d.ts +1 -0
  101. package/node_modules/uuid/dist/cjs-browser/rng.js +14 -0
  102. package/node_modules/uuid/dist/cjs-browser/sha1.d.ts +2 -0
  103. package/node_modules/uuid/dist/cjs-browser/sha1.js +72 -0
  104. package/node_modules/uuid/dist/cjs-browser/stringify.d.ts +3 -0
  105. package/node_modules/uuid/dist/cjs-browser/stringify.js +39 -0
  106. package/node_modules/uuid/dist/cjs-browser/types.d.ts +21 -0
  107. package/node_modules/uuid/dist/cjs-browser/types.js +2 -0
  108. package/node_modules/uuid/dist/cjs-browser/uuid-bin.d.ts +1 -0
  109. package/node_modules/uuid/dist/cjs-browser/uuid-bin.js +72 -0
  110. package/node_modules/uuid/dist/cjs-browser/v1.d.ts +11 -0
  111. package/node_modules/uuid/dist/cjs-browser/v1.js +87 -0
  112. package/node_modules/uuid/dist/cjs-browser/v1ToV6.d.ts +2 -0
  113. package/node_modules/uuid/dist/cjs-browser/v1ToV6.js +13 -0
  114. package/node_modules/uuid/dist/cjs-browser/v3.d.ts +9 -0
  115. package/node_modules/uuid/dist/cjs-browser/v3.js +14 -0
  116. package/node_modules/uuid/dist/cjs-browser/v35.d.ts +7 -0
  117. package/node_modules/uuid/dist/cjs-browser/v35.js +41 -0
  118. package/node_modules/uuid/dist/cjs-browser/v4.d.ts +4 -0
  119. package/node_modules/uuid/dist/cjs-browser/v4.js +29 -0
  120. package/node_modules/uuid/dist/cjs-browser/v5.d.ts +9 -0
  121. package/node_modules/uuid/dist/cjs-browser/v5.js +14 -0
  122. package/node_modules/uuid/dist/cjs-browser/v6.d.ts +4 -0
  123. package/node_modules/uuid/dist/cjs-browser/v6.js +19 -0
  124. package/node_modules/uuid/dist/cjs-browser/v6ToV1.d.ts +2 -0
  125. package/node_modules/uuid/dist/cjs-browser/v6ToV1.js +13 -0
  126. package/node_modules/uuid/dist/cjs-browser/v7.d.ts +9 -0
  127. package/node_modules/uuid/dist/cjs-browser/v7.js +69 -0
  128. package/node_modules/uuid/dist/cjs-browser/validate.d.ts +2 -0
  129. package/node_modules/uuid/dist/cjs-browser/validate.js +7 -0
  130. package/node_modules/uuid/dist/cjs-browser/version.d.ts +2 -0
  131. package/node_modules/uuid/dist/cjs-browser/version.js +10 -0
  132. package/node_modules/uuid/dist/esm/bin/uuid +2 -0
  133. package/node_modules/uuid/dist/esm/index.d.ts +15 -0
  134. package/node_modules/uuid/dist/esm/index.js +14 -0
  135. package/node_modules/uuid/dist/esm/max.d.ts +2 -0
  136. package/node_modules/uuid/dist/esm/max.js +1 -0
  137. package/node_modules/uuid/dist/esm/md5.d.ts +4 -0
  138. package/node_modules/uuid/dist/esm/md5.js +11 -0
  139. package/node_modules/uuid/dist/esm/native.d.ts +6 -0
  140. package/node_modules/uuid/dist/esm/native.js +2 -0
  141. package/node_modules/uuid/dist/esm/nil.d.ts +2 -0
  142. package/node_modules/uuid/dist/esm/nil.js +1 -0
  143. package/node_modules/uuid/dist/esm/parse.d.ts +2 -0
  144. package/node_modules/uuid/dist/esm/parse.js +9 -0
  145. package/node_modules/uuid/dist/esm/regex.d.ts +2 -0
  146. package/node_modules/uuid/dist/esm/regex.js +1 -0
  147. package/node_modules/uuid/dist/esm/rng.d.ts +1 -0
  148. package/node_modules/uuid/dist/esm/rng.js +10 -0
  149. package/node_modules/uuid/dist/esm/sha1.d.ts +4 -0
  150. package/node_modules/uuid/dist/esm/sha1.js +11 -0
  151. package/node_modules/uuid/dist/esm/stringify.d.ts +3 -0
  152. package/node_modules/uuid/dist/esm/stringify.js +35 -0
  153. package/node_modules/uuid/dist/esm/types.d.ts +21 -0
  154. package/node_modules/uuid/dist/esm/types.js +1 -0
  155. package/node_modules/uuid/dist/esm/uuid-bin.d.ts +1 -0
  156. package/node_modules/uuid/dist/esm/uuid-bin.js +70 -0
  157. package/node_modules/uuid/dist/esm/v1.d.ts +11 -0
  158. package/node_modules/uuid/dist/esm/v1.js +83 -0
  159. package/node_modules/uuid/dist/esm/v1ToV6.d.ts +2 -0
  160. package/node_modules/uuid/dist/esm/v1ToV6.js +10 -0
  161. package/node_modules/uuid/dist/esm/v3.d.ts +9 -0
  162. package/node_modules/uuid/dist/esm/v3.js +9 -0
  163. package/node_modules/uuid/dist/esm/v35.d.ts +7 -0
  164. package/node_modules/uuid/dist/esm/v35.js +36 -0
  165. package/node_modules/uuid/dist/esm/v4.d.ts +4 -0
  166. package/node_modules/uuid/dist/esm/v4.js +27 -0
  167. package/node_modules/uuid/dist/esm/v5.d.ts +9 -0
  168. package/node_modules/uuid/dist/esm/v5.js +9 -0
  169. package/node_modules/uuid/dist/esm/v6.d.ts +4 -0
  170. package/node_modules/uuid/dist/esm/v6.js +17 -0
  171. package/node_modules/uuid/dist/esm/v6ToV1.d.ts +2 -0
  172. package/node_modules/uuid/dist/esm/v6ToV1.js +10 -0
  173. package/node_modules/uuid/dist/esm/v7.d.ts +9 -0
  174. package/node_modules/uuid/dist/esm/v7.js +65 -0
  175. package/node_modules/uuid/dist/esm/validate.d.ts +2 -0
  176. package/node_modules/uuid/dist/esm/validate.js +5 -0
  177. package/node_modules/uuid/dist/esm/version.d.ts +2 -0
  178. package/node_modules/uuid/dist/esm/version.js +8 -0
  179. package/node_modules/uuid/dist/esm-browser/index.d.ts +15 -0
  180. package/node_modules/uuid/dist/esm-browser/index.js +14 -0
  181. package/node_modules/uuid/dist/esm-browser/max.d.ts +2 -0
  182. package/node_modules/uuid/dist/esm-browser/max.js +1 -0
  183. package/node_modules/uuid/dist/esm-browser/md5.d.ts +2 -0
  184. package/node_modules/uuid/dist/esm-browser/md5.js +135 -0
  185. package/node_modules/uuid/dist/esm-browser/native.d.ts +4 -0
  186. package/node_modules/uuid/dist/esm-browser/native.js +2 -0
  187. package/node_modules/uuid/dist/esm-browser/nil.d.ts +2 -0
  188. package/node_modules/uuid/dist/esm-browser/nil.js +1 -0
  189. package/node_modules/uuid/dist/esm-browser/parse.d.ts +2 -0
  190. package/node_modules/uuid/dist/esm-browser/parse.js +9 -0
  191. package/node_modules/uuid/dist/esm-browser/regex.d.ts +2 -0
  192. package/node_modules/uuid/dist/esm-browser/regex.js +1 -0
  193. package/node_modules/uuid/dist/esm-browser/rng.d.ts +1 -0
  194. package/node_modules/uuid/dist/esm-browser/rng.js +11 -0
  195. package/node_modules/uuid/dist/esm-browser/sha1.d.ts +2 -0
  196. package/node_modules/uuid/dist/esm-browser/sha1.js +70 -0
  197. package/node_modules/uuid/dist/esm-browser/stringify.d.ts +3 -0
  198. package/node_modules/uuid/dist/esm-browser/stringify.js +35 -0
  199. package/node_modules/uuid/dist/esm-browser/types.d.ts +21 -0
  200. package/node_modules/uuid/dist/esm-browser/types.js +1 -0
  201. package/node_modules/uuid/dist/esm-browser/uuid-bin.d.ts +1 -0
  202. package/node_modules/uuid/dist/esm-browser/uuid-bin.js +70 -0
  203. package/node_modules/uuid/dist/esm-browser/v1.d.ts +11 -0
  204. package/node_modules/uuid/dist/esm-browser/v1.js +83 -0
  205. package/node_modules/uuid/dist/esm-browser/v1ToV6.d.ts +2 -0
  206. package/node_modules/uuid/dist/esm-browser/v1ToV6.js +10 -0
  207. package/node_modules/uuid/dist/esm-browser/v3.d.ts +9 -0
  208. package/node_modules/uuid/dist/esm-browser/v3.js +9 -0
  209. package/node_modules/uuid/dist/esm-browser/v35.d.ts +7 -0
  210. package/node_modules/uuid/dist/esm-browser/v35.js +36 -0
  211. package/node_modules/uuid/dist/esm-browser/v4.d.ts +4 -0
  212. package/node_modules/uuid/dist/esm-browser/v4.js +27 -0
  213. package/node_modules/uuid/dist/esm-browser/v5.d.ts +9 -0
  214. package/node_modules/uuid/dist/esm-browser/v5.js +9 -0
  215. package/node_modules/uuid/dist/esm-browser/v6.d.ts +4 -0
  216. package/node_modules/uuid/dist/esm-browser/v6.js +17 -0
  217. package/node_modules/uuid/dist/esm-browser/v6ToV1.d.ts +2 -0
  218. package/node_modules/uuid/dist/esm-browser/v6ToV1.js +10 -0
  219. package/node_modules/uuid/dist/esm-browser/v7.d.ts +9 -0
  220. package/node_modules/uuid/dist/esm-browser/v7.js +65 -0
  221. package/node_modules/uuid/dist/esm-browser/validate.d.ts +2 -0
  222. package/node_modules/uuid/dist/esm-browser/validate.js +5 -0
  223. package/node_modules/uuid/dist/esm-browser/version.d.ts +2 -0
  224. package/node_modules/uuid/dist/esm-browser/version.js +8 -0
  225. package/node_modules/uuid/package.json +132 -0
  226. package/package.json +8 -4
@@ -0,0 +1,563 @@
1
+
2
+ var uuid = require("uuid");
3
+ var querystring = require("querystring");
4
+ var url = require("url");
5
+
6
+ var utils = require("./utils");
7
+ var config = require("./config");
8
+ var request = require('./request');
9
+
10
+ var debug = require("debug")("universal-analytics");
11
+
12
+
13
+ module.exports = init;
14
+
15
+
16
+ function init (tid, cid, options) {
17
+ return new Visitor(tid, cid, options);
18
+ }
19
+
20
+ var Visitor = module.exports.Visitor = function (tid, cid, options, context, persistentParams) {
21
+
22
+ if (typeof tid === 'object') {
23
+ options = tid;
24
+ tid = cid = null;
25
+ } else if (typeof cid === 'object') {
26
+ options = cid;
27
+ cid = null;
28
+ }
29
+
30
+ this._queue = [];
31
+
32
+ this.options = options || {};
33
+
34
+ if(this.options.hostname) {
35
+ config.hostname = this.options.hostname;
36
+ }
37
+ if(this.options.path) {
38
+ config.path = this.options.path;
39
+ }
40
+
41
+ if (this.options.http) {
42
+ var parsedHostname = url.parse(config.hostname);
43
+ config.hostname = 'http://' + parsedHostname.host;
44
+ }
45
+
46
+ if(this.options.enableBatching !== undefined) {
47
+ config.batching = options.enableBatching;
48
+ }
49
+
50
+ if(this.options.batchSize) {
51
+ config.batchSize = this.options.batchSize;
52
+ }
53
+
54
+ this._context = context || {};
55
+ this._persistentParams = persistentParams || {};
56
+
57
+ this.tid = tid || this.options.tid;
58
+ this.cid = this._determineCid(cid, this.options.cid, (this.options.strictCidFormat !== false));
59
+ if(this.options.uid) {
60
+ this.uid = this.options.uid;
61
+ }
62
+ }
63
+
64
+
65
+
66
+
67
+ module.exports.middleware = function (tid, options) {
68
+
69
+ this.tid = tid;
70
+ this.options = options || {};
71
+
72
+ var cookieName = this.options.cookieName || "_ga";
73
+ var instanceName = this.options.instanceName || "visitor";
74
+ delete this.options.instanceName;
75
+
76
+ return function (req, res, next) {
77
+
78
+ req[instanceName] = module.exports.createFromSession(req.session);
79
+
80
+ if (req[instanceName]) return next();
81
+
82
+ var cid;
83
+ if (req.cookies && req.cookies[cookieName]) {
84
+ var gaSplit = req.cookies[cookieName].split('.');
85
+ cid = gaSplit[2] + "." + gaSplit[3];
86
+ }
87
+
88
+ req[instanceName] = init(tid, cid, options);
89
+
90
+ if (req.session) {
91
+ req.session.cid = req[instanceName].cid;
92
+ }
93
+
94
+ next();
95
+ }
96
+ }
97
+
98
+
99
+
100
+ module.exports.createFromSession = function (session) {
101
+ if (session && session.cid) {
102
+ return init(this.tid, session.cid, this.options);
103
+ }
104
+ }
105
+
106
+
107
+
108
+ Visitor.prototype = {
109
+
110
+ debug: function (d) {
111
+ debug.enabled = arguments.length === 0 ? true : d;
112
+ debug("visitor.debug() is deprecated: set DEBUG=universal-analytics to enable logging")
113
+ return this;
114
+ },
115
+
116
+
117
+ reset: function () {
118
+ this._context = null;
119
+ return this;
120
+ },
121
+
122
+ set: function (key, value) {
123
+ this._persistentParams = this._persistentParams || {};
124
+ this._persistentParams[key] = value;
125
+ },
126
+
127
+ pageview: function (path, hostname, title, params, fn) {
128
+
129
+ if (typeof path === 'object' && path != null) {
130
+ params = path;
131
+ if (typeof hostname === 'function') {
132
+ fn = hostname
133
+ }
134
+ path = hostname = title = null;
135
+ } else if (typeof hostname === 'function') {
136
+ fn = hostname
137
+ hostname = title = null;
138
+ } else if (typeof title === 'function') {
139
+ fn = title;
140
+ title = null;
141
+ } else if (typeof params === 'function') {
142
+ fn = params;
143
+ params = null;
144
+ }
145
+
146
+ params = this._translateParams(params);
147
+
148
+ params = Object.assign({}, this._persistentParams || {}, params);
149
+
150
+ params.dp = path || params.dp || this._context.dp;
151
+ params.dh = hostname || params.dh || this._context.dh;
152
+ params.dt = title || params.dt || this._context.dt;
153
+
154
+ this._tidyParameters(params);
155
+
156
+ if (!params.dp && !params.dl) {
157
+ return this._handleError("Please provide either a page path (dp) or a document location (dl)", fn);
158
+ }
159
+
160
+ return this._withContext(params)._enqueue("pageview", params, fn);
161
+ },
162
+
163
+
164
+ screenview: function (screenName, appName, appVersion, appId, appInstallerId, params, fn) {
165
+
166
+ if (typeof screenName === 'object' && screenName != null) {
167
+ params = screenName;
168
+ if (typeof appName === 'function') {
169
+ fn = appName
170
+ }
171
+ screenName = appName = appVersion = appId = appInstallerId = null;
172
+ } else if (typeof appName === 'function') {
173
+ fn = appName
174
+ appName = appVersion = appId = appInstallerId = null;
175
+ } else if (typeof appVersion === 'function') {
176
+ fn = appVersion;
177
+ appVersion = appId = appInstallerId = null;
178
+ } else if (typeof appId === 'function') {
179
+ fn = appId;
180
+ appId = appInstallerId = null;
181
+ } else if (typeof appInstallerId === 'function') {
182
+ fn = appInstallerId;
183
+ appInstallerId = null;
184
+ } else if (typeof params === 'function') {
185
+ fn = params;
186
+ params = null;
187
+ }
188
+
189
+ params = this._translateParams(params);
190
+
191
+ params = Object.assign({}, this._persistentParams || {}, params);
192
+
193
+ params.cd = screenName || params.cd || this._context.cd;
194
+ params.an = appName || params.an || this._context.an;
195
+ params.av = appVersion || params.av || this._context.av;
196
+ params.aid = appId || params.aid || this._context.aid;
197
+ params.aiid = appInstallerId || params.aiid || this._context.aiid;
198
+
199
+ this._tidyParameters(params);
200
+
201
+ if (!params.cd || !params.an) {
202
+ return this._handleError("Please provide at least a screen name (cd) and an app name (an)", fn);
203
+ }
204
+
205
+ return this._withContext(params)._enqueue("screenview", params, fn);
206
+ },
207
+
208
+
209
+ event: function (category, action, label, value, params, fn) {
210
+
211
+ if (typeof category === 'object' && category != null) {
212
+ params = category;
213
+ if (typeof action === 'function') {
214
+ fn = action
215
+ }
216
+ category = action = label = value = null;
217
+ } else if (typeof label === 'function') {
218
+ fn = label;
219
+ label = value = null;
220
+ } else if (typeof value === 'function') {
221
+ fn = value;
222
+ value = null;
223
+ } else if (typeof params === 'function') {
224
+ fn = params;
225
+ params = null;
226
+ }
227
+
228
+ params = this._translateParams(params);
229
+
230
+ params = Object.assign({}, this._persistentParams || {}, params);
231
+
232
+ params.ec = category || params.ec || this._context.ec;
233
+ params.ea = action || params.ea || this._context.ea;
234
+ params.el = label || params.el || this._context.el;
235
+ params.ev = value || params.ev || this._context.ev;
236
+ params.p = params.p || params.dp || this._context.p || this._context.dp;
237
+
238
+ delete params.dp;
239
+ this._tidyParameters(params);
240
+
241
+ if (!params.ec || !params.ea) {
242
+ return this._handleError("Please provide at least an event category (ec) and an event action (ea)", fn);
243
+ }
244
+
245
+ return this._withContext(params)._enqueue("event", params, fn);
246
+ },
247
+
248
+
249
+ transaction: function (transaction, revenue, shipping, tax, affiliation, params, fn) {
250
+ if (typeof transaction === 'object') {
251
+ params = transaction;
252
+ if (typeof revenue === 'function') {
253
+ fn = revenue
254
+ }
255
+ transaction = revenue = shipping = tax = affiliation = null;
256
+ } else if (typeof revenue === 'function') {
257
+ fn = revenue;
258
+ revenue = shipping = tax = affiliation = null;
259
+ } else if (typeof shipping === 'function') {
260
+ fn = shipping;
261
+ shipping = tax = affiliation = null;
262
+ } else if (typeof tax === 'function') {
263
+ fn = tax;
264
+ tax = affiliation = null;
265
+ } else if (typeof affiliation === 'function') {
266
+ fn = affiliation;
267
+ affiliation = null;
268
+ } else if (typeof params === 'function') {
269
+ fn = params;
270
+ params = null;
271
+ }
272
+
273
+ params = this._translateParams(params);
274
+
275
+ params = Object.assign({}, this._persistentParams || {}, params);
276
+
277
+ params.ti = transaction || params.ti || this._context.ti;
278
+ params.tr = revenue || params.tr || this._context.tr;
279
+ params.ts = shipping || params.ts || this._context.ts;
280
+ params.tt = tax || params.tt || this._context.tt;
281
+ params.ta = affiliation || params.ta || this._context.ta;
282
+ params.p = params.p || this._context.p || this._context.dp;
283
+
284
+ this._tidyParameters(params);
285
+
286
+ if (!params.ti) {
287
+ return this._handleError("Please provide at least a transaction ID (ti)", fn);
288
+ }
289
+
290
+ return this._withContext(params)._enqueue("transaction", params, fn);
291
+ },
292
+
293
+
294
+ item: function (price, quantity, sku, name, variation, params, fn) {
295
+ if (typeof price === 'object') {
296
+ params = price;
297
+ if (typeof quantity === 'function') {
298
+ fn = quantity
299
+ }
300
+ price = quantity = sku = name = variation = null;
301
+ } else if (typeof quantity === 'function') {
302
+ fn = quantity;
303
+ quantity = sku = name = variation = null;
304
+ } else if (typeof sku === 'function') {
305
+ fn = sku;
306
+ sku = name = variation = null;
307
+ } else if (typeof name === 'function') {
308
+ fn = name;
309
+ name = variation = null;
310
+ } else if (typeof variation === 'function') {
311
+ fn = variation;
312
+ variation = null;
313
+ } else if (typeof params === 'function') {
314
+ fn = params;
315
+ params = null;
316
+ }
317
+
318
+ params = this._translateParams(params);
319
+
320
+ params = Object.assign({}, this._persistentParams || {}, params);
321
+
322
+ params.ip = price || params.ip || this._context.ip;
323
+ params.iq = quantity || params.iq || this._context.iq;
324
+ params.ic = sku || params.ic || this._context.ic;
325
+ params.in = name || params.in || this._context.in;
326
+ params.iv = variation || params.iv || this._context.iv;
327
+ params.p = params.p || this._context.p || this._context.dp;
328
+ params.ti = params.ti || this._context.ti;
329
+
330
+ this._tidyParameters(params);
331
+
332
+ if (!params.ti) {
333
+ return this._handleError("Please provide at least an item transaction ID (ti)", fn);
334
+ }
335
+
336
+ return this._withContext(params)._enqueue("item", params, fn);
337
+
338
+ },
339
+
340
+ exception: function (description, fatal, params, fn) {
341
+
342
+ if (typeof description === 'object') {
343
+ params = description;
344
+ if (typeof fatal === 'function') {
345
+ fn = fatal;
346
+ }
347
+ description = fatal = null;
348
+ } else if (typeof fatal === 'function') {
349
+ fn = fatal;
350
+ fatal = 0;
351
+ } else if (typeof params === 'function') {
352
+ fn = params;
353
+ params = null;
354
+ }
355
+
356
+ params = this._translateParams(params);
357
+
358
+ params = Object.assign({}, this._persistentParams || {}, params);
359
+
360
+ params.exd = description || params.exd || this._context.exd;
361
+ params.exf = +!!(fatal || params.exf || this._context.exf);
362
+
363
+ if (params.exf === 0) {
364
+ delete params.exf;
365
+ }
366
+
367
+ this._tidyParameters(params);
368
+
369
+ return this._withContext(params)._enqueue("exception", params, fn);
370
+ },
371
+
372
+ timing: function (category, variable, time, label, params, fn) {
373
+
374
+ if (typeof category === 'object') {
375
+ params = category;
376
+ if (typeof variable === 'function') {
377
+ fn = variable;
378
+ }
379
+ category = variable = time = label = null;
380
+ } else if (typeof variable === 'function') {
381
+ fn = variable;
382
+ variable = time = label = null;
383
+ } else if (typeof time === 'function') {
384
+ fn = time;
385
+ time = label = null;
386
+ } else if (typeof label === 'function') {
387
+ fn = label;
388
+ label = null;
389
+ } else if (typeof params === 'function') {
390
+ fn = params;
391
+ params = null;
392
+ }
393
+
394
+ params = this._translateParams(params);
395
+
396
+ params = Object.assign({}, this._persistentParams || {}, params);
397
+
398
+ params.utc = category || params.utc || this._context.utc;
399
+ params.utv = variable || params.utv || this._context.utv;
400
+ params.utt = time || params.utt || this._context.utt;
401
+ params.utl = label || params.utl || this._context.utl;
402
+
403
+ this._tidyParameters(params);
404
+
405
+ return this._withContext(params)._enqueue("timing", params, fn);
406
+ },
407
+
408
+
409
+ send: function (fn) {
410
+ var self = this;
411
+ var count = 1;
412
+ var fn = fn || function () {};
413
+ debug("Sending %d tracking call(s)", self._queue.length);
414
+
415
+ var getBody = function(params) {
416
+ return params.map(function(x) { return querystring.stringify(x); }).join("\n");
417
+ }
418
+
419
+ var onFinish = function (err) {
420
+ debug("Finished sending tracking calls")
421
+ fn.call(self, err || null, count - 1);
422
+ }
423
+
424
+ var iterator = function () {
425
+ if (!self._queue.length) {
426
+ return onFinish(null);
427
+ }
428
+ var params = [];
429
+
430
+ if(config.batching) {
431
+ params = self._queue.splice(0, Math.min(self._queue.length, config.batchSize));
432
+ } else {
433
+ params.push(self._queue.shift());
434
+ }
435
+
436
+ var useBatchPath = params.length > 1;
437
+
438
+ var path = config.hostname + (useBatchPath ? config.batchPath : config.path);
439
+
440
+ debug("%d: %o", count++, params);
441
+
442
+ var body = getBody(params);
443
+
444
+ request.post(path, body, self.options.headers, nextIteration);
445
+ }
446
+
447
+ function nextIteration(err) {
448
+ if (err) return onFinish(err);
449
+ iterator();
450
+ }
451
+
452
+ iterator();
453
+
454
+ },
455
+
456
+ _enqueue: function (type, params, fn) {
457
+
458
+ if (typeof params === 'function') {
459
+ fn = params;
460
+ params = {};
461
+ }
462
+
463
+ params = this._translateParams(params) || {};
464
+
465
+ Object.assign(params, {
466
+ v: config.protocolVersion,
467
+ tid: this.tid,
468
+ cid: this.cid,
469
+ t: type
470
+ });
471
+ if(this.uid) {
472
+ params.uid = this.uid;
473
+ }
474
+
475
+ this._queue.push(params);
476
+
477
+ if (debug.enabled) {
478
+ this._checkParameters(params);
479
+ }
480
+
481
+ debug("Enqueued %s (%o)", type, params);
482
+
483
+ if (fn) {
484
+ this.send(fn);
485
+ }
486
+
487
+ return this;
488
+ },
489
+
490
+
491
+ _handleError: function (message, fn) {
492
+ debug("Error: %s", message)
493
+ fn && fn.call(this, new Error(message))
494
+ return this;
495
+ },
496
+
497
+
498
+
499
+ _determineCid: function () {
500
+ var args = Array.prototype.splice.call(arguments, 0);
501
+ var id;
502
+ var lastItem = args.length-1;
503
+ var strict = args[lastItem];
504
+ if (strict) {
505
+ for (var i = 0; i < lastItem; i++) {
506
+ id = utils.ensureValidCid(args[i]);
507
+ if (id !== false) return id;
508
+ if (id != null) debug("Warning! Invalid UUID format '%s'", args[i]);
509
+ }
510
+ } else {
511
+ for (var i = 0; i < lastItem; i++) {
512
+ if (args[i]) return args[i];
513
+ }
514
+ }
515
+ return uuid.v4();
516
+ },
517
+
518
+
519
+ _checkParameters: function (params) {
520
+ for (var param in params) {
521
+ if (config.acceptedParameters.indexOf(param) !== -1 || config.acceptedParametersRegex.filter(function (r) {
522
+ return r.test(param);
523
+ }).length) {
524
+ continue;
525
+ }
526
+ debug("Warning! Unsupported tracking parameter %s (%s)", param, params[param]);
527
+ }
528
+ },
529
+
530
+ _translateParams: function (params) {
531
+ var translated = {};
532
+ for (var key in params) {
533
+ if (config.parametersMap.hasOwnProperty(key)) {
534
+ translated[config.parametersMap[key]] = params[key];
535
+ } else {
536
+ translated[key] = params[key];
537
+ }
538
+ }
539
+ return translated;
540
+ },
541
+
542
+ _tidyParameters: function (params) {
543
+ for (var param in params) {
544
+ if (params[param] === null || params[param] === undefined) {
545
+ delete params[param];
546
+ }
547
+ }
548
+ return params;
549
+ },
550
+
551
+ _withContext: function (context) {
552
+ var visitor = new Visitor(this.tid, this.cid, this.options, context, this._persistentParams);
553
+ visitor._queue = this._queue;
554
+ return visitor;
555
+ }
556
+
557
+
558
+ }
559
+
560
+ Visitor.prototype.pv = Visitor.prototype.pageview
561
+ Visitor.prototype.e = Visitor.prototype.event
562
+ Visitor.prototype.t = Visitor.prototype.transaction
563
+ Visitor.prototype.i = Visitor.prototype.item
@@ -0,0 +1,73 @@
1
+ `use strict`
2
+
3
+ const http = require('http');
4
+ const https = require('https');
5
+ const url = require('url');
6
+ const debug = require("debug")("universal-analytics");
7
+
8
+ function getProtocol(path) {
9
+ return url.parse(path).protocol === "http:" ? http : https;
10
+ }
11
+
12
+ /**
13
+ * Send a post request
14
+ * @param path is the url endpoint
15
+ * @param headers of the request
16
+ * @param callback contains (error, body, status, headers)
17
+ * @param data a JSON Object or a string
18
+ */
19
+ function post(path, data, headers, callback) {
20
+ request(path, "POST", data, headers, callback);
21
+ }
22
+
23
+ /**
24
+ * Send a custom request
25
+ * @param path is the url endpoint
26
+ * @param headers of the request
27
+ * @param callback contains (error, statusCode, data)
28
+ * @param data a JSON Object or a string
29
+ * @param method is the protocol used like POST GET DELETE PUT etc...
30
+ */
31
+ function request(path, method, body, headers = {}, callback) {
32
+ const { hostname, port, pathname } = url.parse(path);
33
+ const options = {
34
+ hostname,
35
+ port,
36
+ path: pathname,
37
+ method,
38
+ headers
39
+ };
40
+
41
+ const req = getProtocol(path).request(options, function (response) {
42
+ handleResponse(response, callback);
43
+ });
44
+
45
+ req.on('error', function (error) {
46
+ callback(error);
47
+ debug('Request error', error);
48
+ });
49
+
50
+ req.write(body);
51
+
52
+ req.end();
53
+ }
54
+
55
+ function handleResponse(response, callback) {
56
+ let body = '';
57
+ const { headers, statusCode } = response
58
+ const hasError = statusCode >= 300;
59
+
60
+ response.setEncoding('utf8');
61
+
62
+ response.on('data', function (data) {
63
+ body += data;
64
+ });
65
+
66
+ response.on('end', function () {
67
+ callback(hasError ? body : null, hasError ? null : body, statusCode, headers);
68
+ });
69
+ }
70
+
71
+ module.exports = {
72
+ post
73
+ };
@@ -0,0 +1,29 @@
1
+
2
+ module.exports.isUuid = function (uuid) {
3
+ if (!uuid) return false;
4
+ uuid = uuid.toString().toLowerCase();
5
+ return /[0-9a-f]{8}\-?[0-9a-f]{4}\-?4[0-9a-f]{3}\-?[89ab][0-9a-f]{3}\-?[0-9a-f]{12}/.test(uuid)
6
+ }
7
+
8
+
9
+ module.exports.isCookieCid = function (cid) {
10
+ return /^[0-9]+\.[0-9]+$/.test(cid)
11
+ }
12
+
13
+
14
+ module.exports.ensureValidCid = function (uuid) {
15
+ if (!this.isUuid(uuid)) {
16
+ if (!this.isCookieCid(uuid)) {
17
+ return false;
18
+ }
19
+ return uuid;
20
+ }
21
+
22
+ uuid = uuid.replace(/\-/g, "");
23
+ return "" +
24
+ uuid.substring(0, 8) + "-" +
25
+ uuid.substring(8, 12) + "-" +
26
+ uuid.substring(12, 16) + "-" +
27
+ uuid.substring(16, 20) + "-" +
28
+ uuid.substring(20);
29
+ }
@@ -0,0 +1,33 @@
1
+ {
2
+ "name": "universal-analytics",
3
+ "version": "0.5.3",
4
+ "description": "A node module for Google's Universal Analytics tracking",
5
+ "main": "index.js",
6
+ "scripts": {
7
+ "test": "make test"
8
+ },
9
+ "repository": {
10
+ "type": "git",
11
+ "url": "git@github.com:peaksandpies/universal-analytics.git"
12
+ },
13
+ "keywords": [
14
+ "google",
15
+ "analytics",
16
+ "universal",
17
+ "tracking"
18
+ ],
19
+ "dependencies": {
20
+ "debug": "^4.3.1",
21
+ "uuid": "^8.0.0"
22
+ },
23
+ "devDependencies": {
24
+ "mocha": "*",
25
+ "should": "*",
26
+ "sinon": "^1.17.7"
27
+ },
28
+ "author": "Jörg Tillmann <joerg@peaksandpies.com>",
29
+ "license": "MIT",
30
+ "engines": {
31
+ "node": ">=12.18.2"
32
+ }
33
+ }