@atlaskit/dependency-version-analytics 0.4.1 → 1.0.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 (45) hide show
  1. package/CHANGELOG.md +12 -0
  2. package/dist/cjs/cli.js +4 -18
  3. package/dist/cjs/commands/populate-historic-data/index.js +0 -3
  4. package/dist/cjs/commands/populate-historic-data/lib/dependency-store.js +24 -141
  5. package/dist/cjs/commands/populate-historic-data/package.js +3 -27
  6. package/dist/cjs/commands/populate-historic-data/product.js +15 -88
  7. package/dist/cjs/commands/populate-historic-data/util/generate-csv.js +4 -16
  8. package/dist/cjs/index.js +0 -2
  9. package/dist/cjs/util/analytics.js +0 -38
  10. package/dist/cjs/util/assert.js +0 -1
  11. package/dist/cjs/util/env-with-guard.js +0 -2
  12. package/dist/cjs/util/get-file-history-from-git.js +0 -5
  13. package/dist/cjs/util/get-package-version-history.js +0 -6
  14. package/dist/cjs/util/git.js +20 -58
  15. package/dist/cjs/util/statlas.js +0 -25
  16. package/dist/cjs/util/yarn.js +0 -32
  17. package/dist/cjs/version.json +1 -1
  18. package/dist/es2019/cli.js +4 -8
  19. package/dist/es2019/commands/populate-historic-data/lib/dependency-store.js +24 -73
  20. package/dist/es2019/commands/populate-historic-data/package.js +0 -8
  21. package/dist/es2019/commands/populate-historic-data/product.js +4 -22
  22. package/dist/es2019/commands/populate-historic-data/util/generate-csv.js +2 -9
  23. package/dist/es2019/util/analytics.js +4 -19
  24. package/dist/es2019/util/env-with-guard.js +0 -1
  25. package/dist/es2019/util/get-file-history-from-git.js +2 -3
  26. package/dist/es2019/util/get-package-version-history.js +0 -4
  27. package/dist/es2019/util/git.js +29 -24
  28. package/dist/es2019/util/statlas.js +0 -6
  29. package/dist/es2019/util/yarn.js +2 -11
  30. package/dist/es2019/version.json +1 -1
  31. package/dist/esm/cli.js +6 -12
  32. package/dist/esm/commands/populate-historic-data/lib/dependency-store.js +27 -131
  33. package/dist/esm/commands/populate-historic-data/package.js +3 -20
  34. package/dist/esm/commands/populate-historic-data/product.js +15 -72
  35. package/dist/esm/commands/populate-historic-data/util/generate-csv.js +4 -13
  36. package/dist/esm/util/analytics.js +2 -28
  37. package/dist/esm/util/env-with-guard.js +0 -1
  38. package/dist/esm/util/get-file-history-from-git.js +2 -3
  39. package/dist/esm/util/get-package-version-history.js +0 -4
  40. package/dist/esm/util/git.js +21 -50
  41. package/dist/esm/util/statlas.js +0 -19
  42. package/dist/esm/util/yarn.js +0 -19
  43. package/dist/esm/version.json +1 -1
  44. package/package.json +4 -4
  45. package/report.api.md +1 -1
@@ -2,18 +2,15 @@ import _defineProperty from "@babel/runtime/helpers/defineProperty";
2
2
  import _toConsumableArray from "@babel/runtime/helpers/toConsumableArray";
3
3
  import _asyncToGenerator from "@babel/runtime/helpers/asyncToGenerator";
4
4
  import _regeneratorRuntime from "@babel/runtime/regenerator";
5
-
6
5
  function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
7
-
8
6
  function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
9
-
10
7
  // @ts-ignore
8
+
11
9
  import git from 'simple-git';
12
10
  import { assert } from './assert';
13
11
  export function getChangesSince(_x) {
14
12
  return _getChangesSince.apply(this, arguments);
15
13
  }
16
-
17
14
  function _getChangesSince() {
18
15
  _getChangesSince = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee(since) {
19
16
  var revisionRange, listLogSummary;
@@ -23,14 +20,19 @@ function _getChangesSince() {
23
20
  case 0:
24
21
  revisionRange = since ? ["".concat(since, "..")] : [];
25
22
  _context.next = 3;
26
- return git().log([// Only commits on mainline master
27
- '--first-parent', // Show merge commit contents
28
- '-m', // Reverse the order
29
- '--reverse', // Show filename changes - simple-git parses --stat flag but not --name-only unfortunately
30
- '--stat=4096', // Make +- graph width as small as possible to maximise filename length
31
- '--stat-graph-width=1'].concat(revisionRange, [// Any commit that modifies a package.json
23
+ return git().log([
24
+ // Only commits on mainline master
25
+ '--first-parent',
26
+ // Show merge commit contents
27
+ '-m',
28
+ // Reverse the order
29
+ '--reverse',
30
+ // Show filename changes - simple-git parses --stat flag but not --name-only unfortunately
31
+ '--stat=4096',
32
+ // Make +- graph width as small as possible to maximise filename length
33
+ '--stat-graph-width=1'].concat(revisionRange, [
34
+ // Any commit that modifies a package.json
32
35
  ':(glob)**/package.json']));
33
-
34
36
  case 3:
35
37
  listLogSummary = _context.sent;
36
38
  return _context.abrupt("return", _objectSpread(_objectSpread({}, listLogSummary), {}, {
@@ -38,7 +40,6 @@ function _getChangesSince() {
38
40
  return parseLogLine(logLine);
39
41
  })
40
42
  }));
41
-
42
43
  case 5:
43
44
  case "end":
44
45
  return _context.stop();
@@ -48,22 +49,19 @@ function _getChangesSince() {
48
49
  }));
49
50
  return _getChangesSince.apply(this, arguments);
50
51
  }
51
-
52
52
  function parseLogLine(logLine) {
53
53
  if (!logLine.diff) {
54
54
  return logLine;
55
- } // Split files into separate entries when a rename has occurred so both old and new files are processed
56
-
55
+ }
57
56
 
57
+ // Split files into separate entries when a rename has occurred so both old and new files are processed
58
58
  var parsedDiffFiles = logLine.diff.files.reduce(function (acc, curr) {
59
59
  var renameArrowCount = curr.file.match(/ => /g);
60
-
61
60
  if (renameArrowCount == null) {
62
61
  return [].concat(_toConsumableArray(acc), [curr]);
63
- } // Multiple rename parts are not supported. They most likely don't exist in git but we check
62
+ }
63
+ // Multiple rename parts are not supported. They most likely don't exist in git but we check
64
64
  // for them anyway just in case
65
-
66
-
67
65
  assert(renameArrowCount.length === 1, "Multiple rename parts detected: ".concat(curr.file));
68
66
  /* Matches:
69
67
  * - '{new-frontend/src => src}/package.json'
@@ -71,10 +69,10 @@ function parseLogLine(logLine) {
71
69
  * - 'src/{ => platform}/analytics/package.json'
72
70
  * - 'src/packages/spa/{main => }/package.json'
73
71
  */
74
-
75
72
  var renameMatch = curr.file.match(/\{?([^{]+)? => ([^}]+)?\}?/);
76
73
  assert(renameMatch != null, "Invalid rename format ".concat(curr.file));
77
- var oldFile = curr.file.replace(renameMatch[0], renameMatch[1] || '') // If the previous name segment is empty, we will have a double slash
74
+ var oldFile = curr.file.replace(renameMatch[0], renameMatch[1] || '')
75
+ // If the previous name segment is empty, we will have a double slash
78
76
  .replace('//', '/');
79
77
  var newFile = curr.file.replace(renameMatch[0], renameMatch[2] || '').replace('//', '/');
80
78
  return [].concat(_toConsumableArray(acc), [_objectSpread(_objectSpread({}, curr), {}, {
@@ -89,11 +87,9 @@ function parseLogLine(logLine) {
89
87
  })
90
88
  });
91
89
  }
92
-
93
90
  export function tagCommit(_x2) {
94
91
  return _tagCommit.apply(this, arguments);
95
92
  }
96
-
97
93
  function _tagCommit() {
98
94
  _tagCommit = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee2(tag) {
99
95
  return _regeneratorRuntime.wrap(function _callee2$(_context2) {
@@ -101,7 +97,6 @@ function _tagCommit() {
101
97
  switch (_context2.prev = _context2.next) {
102
98
  case 0:
103
99
  return _context2.abrupt("return", git().tag(['-f', tag]));
104
-
105
100
  case 1:
106
101
  case "end":
107
102
  return _context2.stop();
@@ -111,11 +106,9 @@ function _tagCommit() {
111
106
  }));
112
107
  return _tagCommit.apply(this, arguments);
113
108
  }
114
-
115
109
  export function doesTagExist(_x3) {
116
110
  return _doesTagExist.apply(this, arguments);
117
111
  }
118
-
119
112
  function _doesTagExist() {
120
113
  _doesTagExist = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee3(tag) {
121
114
  var tags;
@@ -125,11 +118,9 @@ function _doesTagExist() {
125
118
  case 0:
126
119
  _context3.next = 2;
127
120
  return git().tags(_defineProperty({}, tag, null));
128
-
129
121
  case 2:
130
122
  tags = _context3.sent;
131
123
  return _context3.abrupt("return", tags.all.length > 0);
132
-
133
124
  case 4:
134
125
  case "end":
135
126
  return _context3.stop();
@@ -139,11 +130,9 @@ function _doesTagExist() {
139
130
  }));
140
131
  return _doesTagExist.apply(this, arguments);
141
132
  }
142
-
143
133
  export function refetchTag(_x4) {
144
134
  return _refetchTag.apply(this, arguments);
145
135
  }
146
-
147
136
  function _refetchTag() {
148
137
  _refetchTag = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee4(tag) {
149
138
  var fetchTagResult;
@@ -154,48 +143,37 @@ function _refetchTag() {
154
143
  _context4.prev = 0;
155
144
  _context4.next = 3;
156
145
  return git().tag(['-d', tag]);
157
-
158
146
  case 3:
159
147
  _context4.next = 9;
160
148
  break;
161
-
162
149
  case 5:
163
150
  _context4.prev = 5;
164
151
  _context4.t0 = _context4["catch"](0);
165
-
166
152
  if (/tag.*not found/.test(_context4.t0.message)) {
167
153
  _context4.next = 9;
168
154
  break;
169
155
  }
170
-
171
156
  throw _context4.t0;
172
-
173
157
  case 9:
174
158
  _context4.prev = 9;
175
159
  _context4.next = 12;
176
160
  return git().fetch(['origin', 'tag', tag]);
177
-
178
161
  case 12:
179
162
  fetchTagResult = _context4.sent;
180
163
  _context4.next = 19;
181
164
  break;
182
-
183
165
  case 15:
184
166
  _context4.prev = 15;
185
167
  _context4.t1 = _context4["catch"](9);
186
-
187
168
  if (/Couldn't find remote ref refs\/tags\//.test(_context4.t1.message)) {
188
169
  _context4.next = 19;
189
170
  break;
190
171
  }
191
-
192
172
  throw _context4.t1;
193
-
194
173
  case 19:
195
174
  return _context4.abrupt("return", {
196
175
  fetchTagResult: fetchTagResult
197
176
  });
198
-
199
177
  case 20:
200
178
  case "end":
201
179
  return _context4.stop();
@@ -205,11 +183,9 @@ function _refetchTag() {
205
183
  }));
206
184
  return _refetchTag.apply(this, arguments);
207
185
  }
208
-
209
186
  export function getHash(_x5) {
210
187
  return _getHash.apply(this, arguments);
211
188
  }
212
-
213
189
  function _getHash() {
214
190
  _getHash = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee5(ref) {
215
191
  return _regeneratorRuntime.wrap(function _callee5$(_context5) {
@@ -217,7 +193,6 @@ function _getHash() {
217
193
  switch (_context5.prev = _context5.next) {
218
194
  case 0:
219
195
  return _context5.abrupt("return", git().revparse([ref]));
220
-
221
196
  case 1:
222
197
  case "end":
223
198
  return _context5.stop();
@@ -227,7 +202,6 @@ function _getHash() {
227
202
  }));
228
203
  return _getHash.apply(this, arguments);
229
204
  }
230
-
231
205
  export function showFile(ref, filename) {
232
206
  var opts = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};
233
207
  return git(opts.cwd || process.cwd()).show(["".concat(ref, ":").concat(filename)]);
@@ -235,12 +209,11 @@ export function showFile(ref, filename) {
235
209
  export function getFiles(_x6, _x7) {
236
210
  return _getFiles.apply(this, arguments);
237
211
  }
238
-
239
212
  function _getFiles() {
240
213
  _getFiles = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee6(ref, glob) {
241
214
  var opts,
242
- result,
243
- _args6 = arguments;
215
+ result,
216
+ _args6 = arguments;
244
217
  return _regeneratorRuntime.wrap(function _callee6$(_context6) {
245
218
  while (1) {
246
219
  switch (_context6.prev = _context6.next) {
@@ -248,7 +221,6 @@ function _getFiles() {
248
221
  opts = _args6.length > 2 && _args6[2] !== undefined ? _args6[2] : {};
249
222
  _context6.next = 3;
250
223
  return git(opts.cwd || process.cwd()).raw(['grep', '--name-only', '', ref, '--', ":(glob)".concat(glob)]);
251
-
252
224
  case 3:
253
225
  result = _context6.sent;
254
226
  return _context6.abrupt("return", result.split('\n').filter(function (line) {
@@ -256,7 +228,6 @@ function _getFiles() {
256
228
  }).map(function (line) {
257
229
  return line.split(':')[1];
258
230
  }));
259
-
260
231
  case 5:
261
232
  case "end":
262
233
  return _context6.stop();
@@ -5,7 +5,6 @@ var STATLAS_BASE_URL = 'https://statlas.prod.atl-paas.net/af-product-analytics';
5
5
  export function getMeta(_x) {
6
6
  return _getMeta.apply(this, arguments);
7
7
  }
8
-
9
8
  function _getMeta() {
10
9
  _getMeta = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee(product) {
11
10
  var response;
@@ -15,11 +14,9 @@ function _getMeta() {
15
14
  case 0:
16
15
  _context.next = 2;
17
16
  return retrieveJSON(getProductMetaPath(product));
18
-
19
17
  case 2:
20
18
  response = _context.sent;
21
19
  return _context.abrupt("return", response.json);
22
-
23
20
  case 4:
24
21
  case "end":
25
22
  return _context.stop();
@@ -29,21 +26,17 @@ function _getMeta() {
29
26
  }));
30
27
  return _getMeta.apply(this, arguments);
31
28
  }
32
-
33
29
  export function uploadMeta(product, lastRunHash) {
34
30
  return uploadJSON(getProductMetaPath(product), {
35
31
  lastRunHash: lastRunHash
36
32
  });
37
33
  }
38
-
39
34
  function getProductMetaPath(product) {
40
35
  return "product/".concat(product, ".json");
41
36
  }
42
-
43
37
  function retrieveJSON(_x2) {
44
38
  return _retrieveJSON.apply(this, arguments);
45
39
  }
46
-
47
40
  function _retrieveJSON() {
48
41
  _retrieveJSON = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee2(filepath) {
49
42
  var response, json;
@@ -53,28 +46,22 @@ function _retrieveJSON() {
53
46
  case 0:
54
47
  _context2.next = 2;
55
48
  return fetch("".concat(STATLAS_BASE_URL, "/").concat(filepath, "?statlasredirect"));
56
-
57
49
  case 2:
58
50
  response = _context2.sent;
59
51
  json = null;
60
-
61
52
  if (!response.ok) {
62
53
  _context2.next = 8;
63
54
  break;
64
55
  }
65
-
66
56
  _context2.next = 7;
67
57
  return response.json();
68
-
69
58
  case 7:
70
59
  json = _context2.sent;
71
-
72
60
  case 8:
73
61
  return _context2.abrupt("return", {
74
62
  json: json,
75
63
  rawResponse: response
76
64
  });
77
-
78
65
  case 9:
79
66
  case "end":
80
67
  return _context2.stop();
@@ -84,11 +71,9 @@ function _retrieveJSON() {
84
71
  }));
85
72
  return _retrieveJSON.apply(this, arguments);
86
73
  }
87
-
88
74
  function uploadJSON(_x3, _x4) {
89
75
  return _uploadJSON.apply(this, arguments);
90
76
  }
91
-
92
77
  function _uploadJSON() {
93
78
  _uploadJSON = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee3(filepath, json) {
94
79
  var res;
@@ -104,17 +89,13 @@ function _uploadJSON() {
104
89
  Authorization: "Bearer ".concat(process.env.bamboo_JWT_TOKEN)
105
90
  }
106
91
  });
107
-
108
92
  case 2:
109
93
  res = _context3.sent;
110
-
111
94
  if (res.ok) {
112
95
  _context3.next = 5;
113
96
  break;
114
97
  }
115
-
116
98
  throw new Error("Statlas upload failed: ".concat(res.statusText));
117
-
118
99
  case 5:
119
100
  case "end":
120
101
  return _context3.stop();
@@ -10,7 +10,6 @@ var debug = debugModule('atlaskit:yarn');
10
10
  export function getWorkspaceGlobs(_x, _x2) {
11
11
  return _getWorkspaceGlobs.apply(this, arguments);
12
12
  }
13
-
14
13
  function _getWorkspaceGlobs() {
15
14
  _getWorkspaceGlobs = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee(ref, cwd) {
16
15
  var file, rootPackageJsonFile, workspaces, workspacePackages;
@@ -23,47 +22,38 @@ function _getWorkspaceGlobs() {
23
22
  return git.showFile(ref, rootPackageJsonPath, {
24
23
  cwd: cwd
25
24
  });
26
-
27
25
  case 3:
28
26
  file = _context.sent;
29
27
  _context.next = 10;
30
28
  break;
31
-
32
29
  case 6:
33
30
  _context.prev = 6;
34
31
  _context.t0 = _context["catch"](0);
35
32
  debug("".concat(rootPackageJsonPath, " does not exist"));
36
33
  return _context.abrupt("return", new Set([]));
37
-
38
34
  case 10:
39
35
  _context.prev = 10;
40
36
  rootPackageJsonFile = JSON.parse(file);
41
37
  _context.next = 18;
42
38
  break;
43
-
44
39
  case 14:
45
40
  _context.prev = 14;
46
41
  _context.t1 = _context["catch"](10);
47
42
  console.error("Error parsing ".concat(file, "@").concat(ref, ": ").concat(_context.t1));
48
43
  return _context.abrupt("return", null);
49
-
50
44
  case 18:
51
45
  workspaces = rootPackageJsonFile.workspaces;
52
-
53
46
  if (workspaces) {
54
47
  _context.next = 21;
55
48
  break;
56
49
  }
57
-
58
50
  return _context.abrupt("return", new Set([rootPackageJsonPath]));
59
-
60
51
  case 21:
61
52
  // There are actually two formats for workspaces and they are poorly documented
62
53
  workspacePackages = Array.isArray(workspaces) ? workspaces : workspaces.packages;
63
54
  return _context.abrupt("return", new Set([rootPackageJsonPath].concat(_toConsumableArray(workspacePackages.map(function (glob) {
64
55
  return path.join(glob, 'package.json');
65
56
  })))));
66
-
67
57
  case 23:
68
58
  case "end":
69
59
  return _context.stop();
@@ -73,11 +63,9 @@ function _getWorkspaceGlobs() {
73
63
  }));
74
64
  return _getWorkspaceGlobs.apply(this, arguments);
75
65
  }
76
-
77
66
  export function getWorkspacePaths(_x3, _x4, _x5) {
78
67
  return _getWorkspacePaths.apply(this, arguments);
79
68
  }
80
-
81
69
  function _getWorkspacePaths() {
82
70
  _getWorkspacePaths = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee2(ref, workspaceGlobs, cwd) {
83
71
  var workspacePackageJsons, matchedWorkspaces;
@@ -89,29 +77,22 @@ function _getWorkspacePaths() {
89
77
  _context2.next = 2;
90
78
  break;
91
79
  }
92
-
93
80
  return _context2.abrupt("return", []);
94
-
95
81
  case 2:
96
82
  _context2.next = 4;
97
83
  return git.getFiles(ref, '**/package.json', {
98
84
  cwd: cwd
99
85
  });
100
-
101
86
  case 4:
102
87
  workspacePackageJsons = _context2.sent;
103
88
  matchedWorkspaces = micromatch(workspacePackageJsons, _toConsumableArray(workspaceGlobs));
104
-
105
89
  if (!(matchedWorkspaces.length === 0)) {
106
90
  _context2.next = 8;
107
91
  break;
108
92
  }
109
-
110
93
  throw new Error("Could not find any workspace or package.json under ".concat(cwd));
111
-
112
94
  case 8:
113
95
  return _context2.abrupt("return", matchedWorkspaces);
114
-
115
96
  case 9:
116
97
  case "end":
117
98
  return _context2.stop();
@@ -1,5 +1,5 @@
1
1
  {
2
2
  "name": "@atlaskit/dependency-version-analytics",
3
- "version": "0.4.1",
3
+ "version": "1.0.0",
4
4
  "sideEffects": false
5
5
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@atlaskit/dependency-version-analytics",
3
- "version": "0.4.1",
3
+ "version": "1.0.0",
4
4
  "description": "Tool to pull atlaskit version history from a repo",
5
5
  "publishConfig": {
6
6
  "registry": "https://registry.npmjs.org/"
@@ -23,7 +23,7 @@
23
23
  "dependencies": {
24
24
  "@babel/runtime": "^7.0.0",
25
25
  "chalk": "^4.1.2",
26
- "debug": "^2.2.0",
26
+ "debug": "^4.3.4",
27
27
  "inquirer": "^8.2.0",
28
28
  "meow": "^8.1.1",
29
29
  "micromatch": "^4.0.2",
@@ -32,11 +32,11 @@
32
32
  "simple-git": "^3.16.0"
33
33
  },
34
34
  "peerDependencies": {
35
- "@atlassiansox/analytics-node-client": "^1.2.2"
35
+ "@atlassiansox/analytics-node-client": "^3.1.2"
36
36
  },
37
37
  "devDependencies": {
38
38
  "@atlassian/atlassian-frontend-prettier-config-1.0.0": "npm:@atlassian/atlassian-frontend-prettier-config@1.0.0",
39
- "@atlassiansox/analytics-node-client": "^2.2.1",
39
+ "@atlassiansox/analytics-node-client": "^3.1.2",
40
40
  "@types/jest": "^26.0.14",
41
41
  "@types/micromatch": "^4.0.1",
42
42
  "@types/node": "~16.11.27",
package/report.api.md CHANGED
@@ -105,7 +105,7 @@ export type UpgradeType = 'add' | 'downgrade' | 'remove' | 'upgrade';
105
105
 
106
106
  ```json
107
107
  {
108
- "@atlassiansox/analytics-node-client": "^1.2.2"
108
+ "@atlassiansox/analytics-node-client": "^3.1.2"
109
109
  }
110
110
  ```
111
111