@atlaskit/smart-card 15.5.0 → 16.2.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 (117) hide show
  1. package/CHANGELOG.md +78 -0
  2. package/dist/cjs/client/index.js +30 -30
  3. package/dist/cjs/client/utils/environments.js +1 -1
  4. package/dist/cjs/extractors/block/index.js +4 -4
  5. package/dist/cjs/extractors/common/actions/extractPreviewAction.js +4 -3
  6. package/dist/cjs/in-product.js +43 -0
  7. package/dist/cjs/index.js +66 -4
  8. package/dist/cjs/providers/editor/index.js +113 -78
  9. package/dist/cjs/providers/editor/transformer.js +1 -1
  10. package/dist/cjs/state/actions/constants.js +1 -5
  11. package/dist/cjs/state/actions/helpers.js +1 -3
  12. package/dist/cjs/state/actions/index.js +16 -13
  13. package/dist/cjs/state/analytics/index.js +32 -84
  14. package/dist/cjs/state/analytics/ufoExperiences.js +60 -0
  15. package/dist/cjs/state/analytics/useSmartLinkAnalytics.js +106 -0
  16. package/dist/cjs/state/context/provider.js +3 -16
  17. package/dist/cjs/state/helpers.js +1 -2
  18. package/dist/cjs/state/hooks/useSmartLink.js +6 -6
  19. package/dist/cjs/state/reducers/index.js +3 -8
  20. package/dist/cjs/utils/analytics/analytics.js +31 -1
  21. package/dist/cjs/version.json +1 -1
  22. package/dist/cjs/view/BlockCard/index.js +3 -2
  23. package/dist/cjs/view/CardWithUrl/component-lazy/LazyFallback.js +6 -2
  24. package/dist/cjs/view/CardWithUrl/component-lazy/index.js +1 -1
  25. package/dist/cjs/view/CardWithUrl/component.js +10 -4
  26. package/dist/cjs/view/CardWithUrl/loader.js +110 -133
  27. package/dist/cjs/view/EmbedCard/{IframelyResizeMessageListener.js → EmbedResizeMessageListener.js} +11 -19
  28. package/dist/cjs/view/SmartLinkEvents/useSmartLinkEvents.js +21 -0
  29. package/dist/es2019/client/index.js +47 -43
  30. package/dist/es2019/client/utils/environments.js +1 -1
  31. package/dist/es2019/extractors/block/index.js +4 -4
  32. package/dist/es2019/extractors/common/actions/extractPreviewAction.js +4 -4
  33. package/dist/es2019/in-product.js +1 -0
  34. package/dist/es2019/index.js +7 -2
  35. package/dist/es2019/providers/editor/index.js +18 -6
  36. package/dist/es2019/providers/editor/transformer.js +1 -1
  37. package/dist/es2019/state/actions/constants.js +0 -2
  38. package/dist/es2019/state/actions/helpers.js +1 -3
  39. package/dist/es2019/state/actions/index.js +12 -11
  40. package/dist/es2019/state/analytics/index.js +2 -40
  41. package/dist/es2019/state/analytics/ufoExperiences.js +40 -0
  42. package/dist/es2019/state/analytics/useSmartLinkAnalytics.js +62 -0
  43. package/dist/es2019/state/context/provider.js +2 -8
  44. package/dist/es2019/state/helpers.js +1 -2
  45. package/dist/es2019/state/hooks/useSmartLink.js +4 -5
  46. package/dist/es2019/state/reducers/index.js +3 -8
  47. package/dist/es2019/utils/analytics/analytics.js +16 -0
  48. package/dist/es2019/version.json +1 -1
  49. package/dist/es2019/view/BlockCard/index.js +3 -2
  50. package/dist/es2019/view/CardWithUrl/component-lazy/LazyFallback.js +3 -1
  51. package/dist/es2019/view/CardWithUrl/component-lazy/index.js +1 -1
  52. package/dist/es2019/view/CardWithUrl/component.js +10 -4
  53. package/dist/es2019/view/CardWithUrl/loader.js +87 -89
  54. package/dist/es2019/view/EmbedCard/{IframelyResizeMessageListener.js → EmbedResizeMessageListener.js} +3 -10
  55. package/dist/es2019/view/SmartLinkEvents/useSmartLinkEvents.js +10 -0
  56. package/dist/esm/client/index.js +30 -31
  57. package/dist/esm/client/utils/environments.js +1 -1
  58. package/dist/esm/extractors/block/index.js +4 -4
  59. package/dist/esm/extractors/common/actions/extractPreviewAction.js +4 -3
  60. package/dist/esm/in-product.js +1 -0
  61. package/dist/esm/index.js +7 -2
  62. package/dist/esm/providers/editor/index.js +110 -78
  63. package/dist/esm/providers/editor/transformer.js +1 -1
  64. package/dist/esm/state/actions/constants.js +0 -2
  65. package/dist/esm/state/actions/helpers.js +1 -3
  66. package/dist/esm/state/actions/index.js +15 -13
  67. package/dist/esm/state/analytics/index.js +2 -80
  68. package/dist/esm/state/analytics/ufoExperiences.js +40 -0
  69. package/dist/esm/state/analytics/useSmartLinkAnalytics.js +94 -0
  70. package/dist/esm/state/context/provider.js +3 -15
  71. package/dist/esm/state/helpers.js +1 -2
  72. package/dist/esm/state/hooks/useSmartLink.js +6 -6
  73. package/dist/esm/state/reducers/index.js +3 -8
  74. package/dist/esm/utils/analytics/analytics.js +26 -0
  75. package/dist/esm/version.json +1 -1
  76. package/dist/esm/view/BlockCard/index.js +3 -2
  77. package/dist/esm/view/CardWithUrl/component-lazy/LazyFallback.js +3 -1
  78. package/dist/esm/view/CardWithUrl/component-lazy/index.js +1 -1
  79. package/dist/esm/view/CardWithUrl/component.js +10 -4
  80. package/dist/esm/view/CardWithUrl/loader.js +103 -127
  81. package/dist/esm/view/EmbedCard/{IframelyResizeMessageListener.js → EmbedResizeMessageListener.js} +9 -16
  82. package/dist/esm/view/SmartLinkEvents/useSmartLinkEvents.js +12 -0
  83. package/dist/types/__tests_external__/index.d.ts +6 -0
  84. package/dist/types/__tests_external__/page-objects/BaseCard.d.ts +18 -0
  85. package/dist/types/__tests_external__/page-objects/BlockCard.d.ts +6 -0
  86. package/dist/types/__tests_external__/page-objects/EmbedCard.d.ts +6 -0
  87. package/dist/types/__tests_external__/page-objects/InlineCard.d.ts +6 -0
  88. package/dist/types/__tests_external__/test-cases/card.d.ts +3 -0
  89. package/dist/types/__tests_external__/test-cases/embed.d.ts +3 -0
  90. package/dist/types/__tests_external__/test-cases/inline.d.ts +3 -0
  91. package/dist/types/__tests_external__/test-cases/types.d.ts +5 -0
  92. package/dist/types/client/index.d.ts +1 -0
  93. package/dist/types/extractors/block/index.d.ts +2 -2
  94. package/dist/types/extractors/common/__mocks__/jsonld.d.ts +61 -0
  95. package/dist/types/extractors/common/actions/extractPreviewAction.d.ts +1 -1
  96. package/dist/types/in-product.d.ts +1 -0
  97. package/dist/types/index.d.ts +5 -1
  98. package/dist/types/providers/editor/index.d.ts +3 -0
  99. package/dist/types/state/actions/constants.d.ts +0 -2
  100. package/dist/types/state/actions/types.d.ts +0 -2
  101. package/dist/types/state/analytics/index.d.ts +3 -32
  102. package/dist/types/state/analytics/ufoExperiences.d.ts +7 -0
  103. package/dist/types/state/analytics/useSmartLinkAnalytics.d.ts +30 -0
  104. package/dist/types/state/context/provider.d.ts +1 -1
  105. package/dist/types/state/context/types.d.ts +4 -2
  106. package/dist/types/state/hooks/useSmartLink.d.ts +4 -5
  107. package/dist/types/state/store/types.d.ts +2 -1
  108. package/dist/types/utils/analytics/analytics.d.ts +3 -0
  109. package/dist/types/utils/types.d.ts +1 -1
  110. package/dist/types/view/BlockCard/types.d.ts +2 -1
  111. package/dist/types/view/CardWithUrl/component-lazy/LazyFallback.d.ts +1 -0
  112. package/dist/types/view/CardWithUrl/component-lazy/index.d.ts +1 -1
  113. package/dist/types/view/CardWithUrl/loader.d.ts +1 -15
  114. package/dist/types/view/EmbedCard/{IframelyResizeMessageListener.d.ts → EmbedResizeMessageListener.d.ts} +1 -1
  115. package/dist/types/view/SmartLinkEvents/useSmartLinkEvents.d.ts +2 -0
  116. package/in-product/package.json +7 -0
  117. package/package.json +25 -20
@@ -17,6 +17,10 @@ var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime/helpers/cl
17
17
 
18
18
  var _createClass2 = _interopRequireDefault(require("@babel/runtime/helpers/createClass"));
19
19
 
20
+ require("setimmediate");
21
+
22
+ var _dataloader = _interopRequireDefault(require("dataloader"));
23
+
20
24
  var _transformer = require("./transformer");
21
25
 
22
26
  var _environments = require("../../client/utils/environments");
@@ -27,8 +31,14 @@ function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "functio
27
31
 
28
32
  function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || _typeof(obj) !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
29
33
 
34
+ // import setimmediate to temporary fix dataloader 2.0.0 bug
35
+ // @see https://github.com/graphql/dataloader/issues/249
36
+ var BATCH_WAIT_TIME = 50;
37
+
30
38
  var EditorCardProvider = /*#__PURE__*/function () {
31
39
  function EditorCardProvider(envKey) {
40
+ var _this = this;
41
+
32
42
  (0, _classCallCheck2.default)(this, EditorCardProvider);
33
43
  this.baseUrl = (0, _environments.getBaseUrl)(envKey);
34
44
  this.resolverUrl = (0, _environments.getResolverUrl)(envKey);
@@ -36,44 +46,83 @@ var EditorCardProvider = /*#__PURE__*/function () {
36
46
  this.requestHeaders = {
37
47
  Origin: this.baseUrl
38
48
  };
49
+ this.patternLoader = new _dataloader.default(function (keys) {
50
+ return _this.batchPatterns(keys);
51
+ }, {
52
+ batchScheduleFn: function batchScheduleFn(callback) {
53
+ return setTimeout(callback, BATCH_WAIT_TIME);
54
+ }
55
+ });
39
56
  }
40
57
 
41
58
  (0, _createClass2.default)(EditorCardProvider, [{
42
- key: "check",
59
+ key: "batchPatterns",
43
60
  value: function () {
44
- var _check = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee(resourceUrl) {
45
- var endpoint, response;
61
+ var _batchPatterns = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee(keys) {
62
+ var patterns;
46
63
  return _regenerator.default.wrap(function _callee$(_context) {
47
64
  while (1) {
48
65
  switch (_context.prev = _context.next) {
49
66
  case 0:
50
- _context.prev = 0;
67
+ _context.next = 2;
68
+ return this.fetchPatterns();
69
+
70
+ case 2:
71
+ patterns = _context.sent;
72
+ return _context.abrupt("return", keys.map(function () {
73
+ return patterns;
74
+ }));
75
+
76
+ case 4:
77
+ case "end":
78
+ return _context.stop();
79
+ }
80
+ }
81
+ }, _callee, this);
82
+ }));
83
+
84
+ function batchPatterns(_x) {
85
+ return _batchPatterns.apply(this, arguments);
86
+ }
87
+
88
+ return batchPatterns;
89
+ }()
90
+ }, {
91
+ key: "check",
92
+ value: function () {
93
+ var _check = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee2(resourceUrl) {
94
+ var endpoint, response;
95
+ return _regenerator.default.wrap(function _callee2$(_context2) {
96
+ while (1) {
97
+ switch (_context2.prev = _context2.next) {
98
+ case 0:
99
+ _context2.prev = 0;
51
100
  endpoint = "".concat(this.resolverUrl, "/check");
52
- _context.next = 4;
101
+ _context2.next = 4;
53
102
  return api.request('post', endpoint, {
54
103
  resourceUrl: resourceUrl
55
104
  }, this.requestHeaders);
56
105
 
57
106
  case 4:
58
- response = _context.sent;
59
- return _context.abrupt("return", response.isSupported);
107
+ response = _context2.sent;
108
+ return _context2.abrupt("return", response.isSupported);
60
109
 
61
110
  case 8:
62
- _context.prev = 8;
63
- _context.t0 = _context["catch"](0);
111
+ _context2.prev = 8;
112
+ _context2.t0 = _context2["catch"](0);
64
113
  // eslint-disable-next-line
65
- console.error('failed to fetch /check', _context.t0);
66
- return _context.abrupt("return", undefined);
114
+ console.error('failed to fetch /check', _context2.t0);
115
+ return _context2.abrupt("return", undefined);
67
116
 
68
117
  case 12:
69
118
  case "end":
70
- return _context.stop();
119
+ return _context2.stop();
71
120
  }
72
121
  }
73
- }, _callee, this, [[0, 8]]);
122
+ }, _callee2, this, [[0, 8]]);
74
123
  }));
75
124
 
76
- function check(_x) {
125
+ function check(_x2) {
77
126
  return _check.apply(this, arguments);
78
127
  }
79
128
 
@@ -82,20 +131,20 @@ var EditorCardProvider = /*#__PURE__*/function () {
82
131
  }, {
83
132
  key: "fetchPatterns",
84
133
  value: function () {
85
- var _fetchPatterns = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee2() {
134
+ var _fetchPatterns = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee3() {
86
135
  var endpoint, response;
87
- return _regenerator.default.wrap(function _callee2$(_context2) {
136
+ return _regenerator.default.wrap(function _callee3$(_context3) {
88
137
  while (1) {
89
- switch (_context2.prev = _context2.next) {
138
+ switch (_context3.prev = _context3.next) {
90
139
  case 0:
91
- _context2.prev = 0;
140
+ _context3.prev = 0;
92
141
  endpoint = "".concat(this.resolverUrl, "/providers");
93
- _context2.next = 4;
142
+ _context3.next = 4;
94
143
  return api.request('post', endpoint, undefined, this.requestHeaders);
95
144
 
96
145
  case 4:
97
- response = _context2.sent;
98
- return _context2.abrupt("return", response.providers.reduce(function (allSources, provider) {
146
+ response = _context3.sent;
147
+ return _context3.abrupt("return", response.providers.reduce(function (allSources, provider) {
99
148
  var providerSources = provider.patterns.map(function (pattern) {
100
149
  return pattern.source;
101
150
  });
@@ -103,18 +152,18 @@ var EditorCardProvider = /*#__PURE__*/function () {
103
152
  }, []));
104
153
 
105
154
  case 8:
106
- _context2.prev = 8;
107
- _context2.t0 = _context2["catch"](0);
155
+ _context3.prev = 8;
156
+ _context3.t0 = _context3["catch"](0);
108
157
  // eslint-disable-next-line
109
- console.error('failed to fetch /providers', _context2.t0);
110
- return _context2.abrupt("return", undefined);
158
+ console.error('failed to fetch /providers', _context3.t0);
159
+ return _context3.abrupt("return", undefined);
111
160
 
112
161
  case 12:
113
162
  case "end":
114
- return _context2.stop();
163
+ return _context3.stop();
115
164
  }
116
165
  }
117
- }, _callee2, this, [[0, 8]]);
166
+ }, _callee3, this, [[0, 8]]);
118
167
  }));
119
168
 
120
169
  function fetchPatterns() {
@@ -126,50 +175,36 @@ var EditorCardProvider = /*#__PURE__*/function () {
126
175
  }, {
127
176
  key: "findPattern",
128
177
  value: function () {
129
- var _findPattern = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee3(url) {
130
- var patterns;
131
- return _regenerator.default.wrap(function _callee3$(_context3) {
178
+ var _findPattern = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee4(url) {
179
+ return _regenerator.default.wrap(function _callee4$(_context4) {
132
180
  while (1) {
133
- switch (_context3.prev = _context3.next) {
181
+ switch (_context4.prev = _context4.next) {
134
182
  case 0:
135
- _context3.t0 = this.patterns;
136
-
137
- if (_context3.t0) {
138
- _context3.next = 5;
183
+ if (this.patterns) {
184
+ _context4.next = 4;
139
185
  break;
140
186
  }
141
187
 
142
- _context3.next = 4;
143
- return this.fetchPatterns();
144
-
145
- case 4:
146
- _context3.t0 = _context3.sent;
147
-
148
- case 5:
149
- patterns = _context3.t0;
188
+ _context4.next = 3;
189
+ return this.patternLoader.load('providers');
150
190
 
151
- if (!patterns) {
152
- _context3.next = 9;
153
- break;
154
- }
191
+ case 3:
192
+ this.patterns = _context4.sent;
155
193
 
156
- this.patterns = patterns;
157
- return _context3.abrupt("return", patterns.some(function (pattern) {
194
+ case 4:
195
+ return _context4.abrupt("return", this.patterns ? this.patterns.some(function (pattern) {
158
196
  return url.match(pattern);
159
- }));
160
-
161
- case 9:
162
- return _context3.abrupt("return", false);
197
+ }) : false);
163
198
 
164
- case 10:
199
+ case 5:
165
200
  case "end":
166
- return _context3.stop();
201
+ return _context4.stop();
167
202
  }
168
203
  }
169
- }, _callee3, this);
204
+ }, _callee4, this);
170
205
  }));
171
206
 
172
- function findPattern(_x2) {
207
+ function findPattern(_x3) {
173
208
  return _findPattern.apply(this, arguments);
174
209
  }
175
210
 
@@ -178,62 +213,62 @@ var EditorCardProvider = /*#__PURE__*/function () {
178
213
  }, {
179
214
  key: "resolve",
180
215
  value: function () {
181
- var _resolve = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee4(url, appearance) {
216
+ var _resolve = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee5(url, appearance) {
182
217
  var isSupported;
183
- return _regenerator.default.wrap(function _callee4$(_context4) {
218
+ return _regenerator.default.wrap(function _callee5$(_context5) {
184
219
  while (1) {
185
- switch (_context4.prev = _context4.next) {
220
+ switch (_context5.prev = _context5.next) {
186
221
  case 0:
187
- _context4.prev = 0;
188
- _context4.next = 3;
222
+ _context5.prev = 0;
223
+ _context5.next = 3;
189
224
  return this.findPattern(url);
190
225
 
191
226
  case 3:
192
- _context4.t0 = _context4.sent;
227
+ _context5.t0 = _context5.sent;
193
228
 
194
- if (_context4.t0) {
195
- _context4.next = 8;
229
+ if (_context5.t0) {
230
+ _context5.next = 8;
196
231
  break;
197
232
  }
198
233
 
199
- _context4.next = 7;
234
+ _context5.next = 7;
200
235
  return this.check(url);
201
236
 
202
237
  case 7:
203
- _context4.t0 = _context4.sent;
238
+ _context5.t0 = _context5.sent;
204
239
 
205
240
  case 8:
206
- isSupported = _context4.t0;
241
+ isSupported = _context5.t0;
207
242
 
208
243
  if (!isSupported) {
209
- _context4.next = 11;
244
+ _context5.next = 11;
210
245
  break;
211
246
  }
212
247
 
213
- return _context4.abrupt("return", this.transformer.toAdf(url, appearance));
248
+ return _context5.abrupt("return", this.transformer.toAdf(url, appearance));
214
249
 
215
250
  case 11:
216
- _context4.next = 16;
251
+ _context5.next = 16;
217
252
  break;
218
253
 
219
254
  case 13:
220
- _context4.prev = 13;
221
- _context4.t1 = _context4["catch"](0);
255
+ _context5.prev = 13;
256
+ _context5.t1 = _context5["catch"](0);
222
257
  // eslint-disable-next-line
223
- console.warn("Error when trying to check Smart Card url \"".concat(url, " - ").concat(_context4.t1.prototype.name, " ").concat(_context4.t1.message), _context4.t1);
258
+ console.warn("Error when trying to check Smart Card url \"".concat(url, " - ").concat(_context5.t1.prototype.name, " ").concat(_context5.t1.message), _context5.t1);
224
259
 
225
260
  case 16:
226
- return _context4.abrupt("return", Promise.reject(undefined));
261
+ return _context5.abrupt("return", Promise.reject(undefined));
227
262
 
228
263
  case 17:
229
264
  case "end":
230
- return _context4.stop();
265
+ return _context5.stop();
231
266
  }
232
267
  }
233
- }, _callee4, this, [[0, 13]]);
268
+ }, _callee5, this, [[0, 13]]);
234
269
  }));
235
270
 
236
- function resolve(_x3, _x4) {
271
+ function resolve(_x4, _x5) {
237
272
  return _resolve.apply(this, arguments);
238
273
  }
239
274
 
@@ -16,7 +16,7 @@ var isJiraRoadMap = function isJiraRoadMap(url) {
16
16
  };
17
17
 
18
18
  var isPolarisView = function isPolarisView(url) {
19
- return url.match(/^https:\/\/.*?\/jira\/polaris\/projects\/[^\/]+?\/ideas\/view\/\d+/);
19
+ return url.match(/^https:\/\/.*?\/jira\/polaris\/projects\/[^\/]+?\/ideas\/view\/\d+$|^https:\/\/.*?\/secure\/JiraProductDiscoveryAnonymous\.jspa\?hash=\w+|^https:\/\/.*?\/jira\/polaris\/share\/\w+/);
20
20
  };
21
21
 
22
22
  var isSlackMessage = function isSlackMessage(url) {
@@ -3,7 +3,7 @@
3
3
  Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
- exports.ERROR_MESSAGE_FATAL = exports.ERROR_MESSAGE_OAUTH = exports.MAX_RELOAD_DELAY = exports.MAX_LOADING_DELAY = exports.ANALYTICS_FALLBACK = exports.ANALYTICS_ERROR = exports.ANALYTICS_RESOLVING = exports.ACTION_PRELOAD = exports.ACTION_ERROR_FALLBACK = exports.ACTION_ERROR = exports.ACTION_RESOLVED = exports.ACTION_RESOLVING = exports.ACTION_PENDING = void 0;
6
+ exports.ERROR_MESSAGE_FATAL = exports.ERROR_MESSAGE_OAUTH = exports.ANALYTICS_FALLBACK = exports.ANALYTICS_ERROR = exports.ANALYTICS_RESOLVING = exports.ACTION_PRELOAD = exports.ACTION_ERROR_FALLBACK = exports.ACTION_ERROR = exports.ACTION_RESOLVED = exports.ACTION_RESOLVING = exports.ACTION_PENDING = void 0;
7
7
  var ACTION_PENDING = 'pending';
8
8
  exports.ACTION_PENDING = ACTION_PENDING;
9
9
  var ACTION_RESOLVING = 'resolving';
@@ -22,10 +22,6 @@ var ANALYTICS_ERROR = 'errored';
22
22
  exports.ANALYTICS_ERROR = ANALYTICS_ERROR;
23
23
  var ANALYTICS_FALLBACK = 'fallback';
24
24
  exports.ANALYTICS_FALLBACK = ANALYTICS_FALLBACK;
25
- var MAX_LOADING_DELAY = 1200;
26
- exports.MAX_LOADING_DELAY = MAX_LOADING_DELAY;
27
- var MAX_RELOAD_DELAY = 60 * 1000;
28
- exports.MAX_RELOAD_DELAY = MAX_RELOAD_DELAY;
29
25
  var ERROR_MESSAGE_OAUTH = 'Provider.authFlow is not set to OAuth2.';
30
26
  exports.ERROR_MESSAGE_OAUTH = ERROR_MESSAGE_OAUTH;
31
27
  var ERROR_MESSAGE_FATAL = 'Fatal error resolving URL';
@@ -6,12 +6,10 @@ Object.defineProperty(exports, "__esModule", {
6
6
  exports.cardAction = void 0;
7
7
 
8
8
  var cardAction = function cardAction(type, _ref, payload, error) {
9
- var url = _ref.url,
10
- hasExpired = _ref.hasExpired;
9
+ var url = _ref.url;
11
10
  return {
12
11
  type: type,
13
12
  url: url,
14
- hasExpired: hasExpired,
15
13
  payload: payload,
16
14
  error: error
17
15
  };
@@ -31,6 +31,8 @@ var _errors = require("../../client/errors");
31
31
 
32
32
  var _jsonld = require("../../utils/jsonld");
33
33
 
34
+ var _analytics = require("../analytics");
35
+
34
36
  function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
35
37
 
36
38
  function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || _typeof(obj) !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
@@ -46,16 +48,13 @@ var useSmartCardActions = function useSmartCardActions(id, url, analytics) {
46
48
 
47
49
  var _ref = getState()[url] || {
48
50
  status: 'pending',
49
- lastUpdatedAt: Date.now(),
50
51
  details: undefined
51
52
  },
52
53
  details = _ref.details,
53
- lastUpdatedAt = _ref.lastUpdatedAt,
54
54
  status = _ref.status;
55
55
 
56
56
  var hasAuthFlowSupported = config.authFlow !== 'disabled';
57
57
  var hasData = !!(details && details.data);
58
- var hasExpired = Date.now() - lastUpdatedAt >= config.maxAge;
59
58
  var handleResolvedLinkError = (0, _react.useCallback)(function (url, error) {
60
59
  if (error.kind === 'fatal') {
61
60
  // If there's no previous data in the store for this URL, then bail
@@ -112,10 +111,9 @@ var useSmartCardActions = function useSmartCardActions(id, url, analytics) {
112
111
 
113
112
 
114
113
  dispatch((0, _helpers.cardAction)(_constants.ACTION_RESOLVED, {
115
- url: resourceUrl,
116
- hasExpired: hasExpired && !hasData
114
+ url: resourceUrl
117
115
  }, response));
118
- }, [dispatch, handleResolvedLinkError, hasData, hasExpired, hasAuthFlowSupported]);
116
+ }, [dispatch, handleResolvedLinkError, hasAuthFlowSupported]);
119
117
  var resolve = (0, _react.useCallback)( /*#__PURE__*/(0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee() {
120
118
  var resourceUrl,
121
119
  isReloading,
@@ -127,8 +125,8 @@ var useSmartCardActions = function useSmartCardActions(id, url, analytics) {
127
125
  resourceUrl = _args.length > 0 && _args[0] !== undefined ? _args[0] : url;
128
126
  isReloading = _args.length > 1 && _args[1] !== undefined ? _args[1] : false;
129
127
 
130
- if (!(isReloading || hasExpired || !hasData)) {
131
- _context.next = 4;
128
+ if (!(isReloading || !hasData)) {
129
+ _context.next = 6;
132
130
  break;
133
131
  }
134
132
 
@@ -138,13 +136,18 @@ var useSmartCardActions = function useSmartCardActions(id, url, analytics) {
138
136
  return handleResolvedLinkError(resourceUrl, error);
139
137
  }));
140
138
 
141
- case 4:
139
+ case 6:
140
+ (0, _analytics.addMetadataToExperience)('smart-link-rendered', id, {
141
+ cached: true
142
+ });
143
+
144
+ case 7:
142
145
  case "end":
143
146
  return _context.stop();
144
147
  }
145
148
  }
146
149
  }, _callee);
147
- })), [url, hasData, hasExpired, connections.client, handleResolvedLinkResponse, handleResolvedLinkError]);
150
+ })), [url, hasData, connections.client, handleResolvedLinkResponse, handleResolvedLinkError, id]);
148
151
  var register = (0, _react.useCallback)(function () {
149
152
  if (!details) {
150
153
  dispatch((0, _helpers.cardAction)(_constants.ACTION_PENDING, {
@@ -182,10 +185,10 @@ var useSmartCardActions = function useSmartCardActions(id, url, analytics) {
182
185
  analytics.screen.authPopupEvent(definitionId, extensionKey);
183
186
  (0, _outboundAuthFlowClient.auth)(services[0].url).then(function () {
184
187
  analytics.track.appAccountConnected(definitionId, extensionKey);
185
- analytics.operational.connectSucceededEvent(definitionId, extensionKey);
188
+ analytics.operational.connectSucceededEvent(id, definitionId, extensionKey);
186
189
  reload();
187
190
  }, function (err) {
188
- analytics.operational.connectFailedEvent(definitionId, extensionKey, err.type);
191
+ analytics.operational.connectFailedEvent(id, definitionId, extensionKey, err.type);
189
192
 
190
193
  if (err.type === 'auth_window_closed') {
191
194
  analytics.ui.closedAuthEvent(appearance, definitionId, extensionKey);
@@ -194,7 +197,7 @@ var useSmartCardActions = function useSmartCardActions(id, url, analytics) {
194
197
  reload();
195
198
  });
196
199
  }
197
- }, [analytics.ui, analytics.screen, analytics.track, analytics.operational, reload, details, status]);
200
+ }, [analytics.ui, analytics.screen, analytics.track, analytics.operational, id, reload, details, status]);
198
201
  var invoke = (0, _react.useCallback)( /*#__PURE__*/function () {
199
202
  var _ref3 = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee2(opts, appearance) {
200
203
  var key, action, source, markName, response;
@@ -3,89 +3,37 @@
3
3
  Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
- exports.useSmartLinkAnalytics = void 0;
7
-
8
- var _analytics = require("../../utils/analytics");
9
-
10
- var _react = require("react");
11
-
12
- var useSmartLinkAnalytics = function useSmartLinkAnalytics(dispatchAnalytics) {
13
- var ui = (0, _react.useMemo)(function () {
14
- return {
15
- authEvent: function authEvent(display, definitionId, extensionKey) {
16
- return dispatchAnalytics((0, _analytics.uiAuthEvent)(display, definitionId, extensionKey));
17
- },
18
- authAlternateAccountEvent: function authAlternateAccountEvent(display, definitionId, extensionKey) {
19
- return dispatchAnalytics((0, _analytics.uiAuthAlternateAccountEvent)(display, definitionId, extensionKey));
20
- },
21
- cardClickedEvent: function cardClickedEvent(display, definitionId, extensionKey) {
22
- return dispatchAnalytics((0, _analytics.uiCardClickedEvent)(display, definitionId, extensionKey));
23
- },
24
- actionClickedEvent: function actionClickedEvent(providerKey, actionType, display) {
25
- return dispatchAnalytics((0, _analytics.uiActionClickedEvent)(providerKey, actionType, display));
26
- },
27
- closedAuthEvent: function closedAuthEvent(display, definitionId, extensionKey) {
28
- return dispatchAnalytics((0, _analytics.uiClosedAuthEvent)(display, definitionId, extensionKey));
29
- },
30
- renderSuccessEvent: function renderSuccessEvent(display, definitionId, extensionKey) {
31
- return dispatchAnalytics((0, _analytics.uiRenderSuccessEvent)(display, definitionId, extensionKey));
32
- },
33
- renderFailedEvent: function renderFailedEvent(display, error, errorInfo) {
34
- return dispatchAnalytics((0, _analytics.uiRenderFailedEvent)(display, error, errorInfo));
35
- }
36
- };
37
- }, [dispatchAnalytics]);
38
- var operational = (0, _react.useMemo)(function () {
39
- return {
40
- resolvedEvent: function resolvedEvent(id, definitionId, extensionKey, resourceType) {
41
- return dispatchAnalytics((0, _analytics.resolvedEvent)(id, definitionId, extensionKey, resourceType));
42
- },
43
- unresolvedEvent: function unresolvedEvent(id, status, definitionId, extensionKey, resourceType) {
44
- return dispatchAnalytics((0, _analytics.unresolvedEvent)(id, status, definitionId, extensionKey, resourceType));
45
- },
46
- invokeSucceededEvent: function invokeSucceededEvent(id, providerKey, actionType, display) {
47
- return dispatchAnalytics((0, _analytics.invokeSucceededEvent)(id, providerKey, actionType, display));
48
- },
49
- invokeFailedEvent: function invokeFailedEvent(id, providerKey, actionType, display, reason) {
50
- return dispatchAnalytics((0, _analytics.invokeFailedEvent)(id, providerKey, actionType, display, reason));
51
- },
52
- connectSucceededEvent: function connectSucceededEvent(definitionId, extensionKey) {
53
- return dispatchAnalytics((0, _analytics.connectSucceededEvent)(definitionId, extensionKey));
54
- },
55
- connectFailedEvent: function connectFailedEvent(definitionId, extensionKey, reason) {
56
- return dispatchAnalytics((0, _analytics.connectFailedEvent)(definitionId, extensionKey, reason));
57
- },
58
- instrument: function instrument(id, status, definitionId, extensionKey, resourceType, error) {
59
- var event = (0, _analytics.instrumentEvent)(id, status, definitionId, extensionKey, resourceType, error);
6
+ Object.defineProperty(exports, "startUfoExperience", {
7
+ enumerable: true,
8
+ get: function get() {
9
+ return _ufoExperiences.startUfoExperience;
10
+ }
11
+ });
12
+ Object.defineProperty(exports, "succeedUfoExperience", {
13
+ enumerable: true,
14
+ get: function get() {
15
+ return _ufoExperiences.succeedUfoExperience;
16
+ }
17
+ });
18
+ Object.defineProperty(exports, "failUfoExperience", {
19
+ enumerable: true,
20
+ get: function get() {
21
+ return _ufoExperiences.failUfoExperience;
22
+ }
23
+ });
24
+ Object.defineProperty(exports, "addMetadataToExperience", {
25
+ enumerable: true,
26
+ get: function get() {
27
+ return _ufoExperiences.addMetadataToExperience;
28
+ }
29
+ });
30
+ Object.defineProperty(exports, "useSmartLinkAnalytics", {
31
+ enumerable: true,
32
+ get: function get() {
33
+ return _useSmartLinkAnalytics.useSmartLinkAnalytics;
34
+ }
35
+ });
60
36
 
61
- if (event) {
62
- dispatchAnalytics(event);
63
- }
64
- }
65
- };
66
- }, [dispatchAnalytics]);
67
- var track = (0, _react.useMemo)(function () {
68
- return {
69
- appAccountConnected: function appAccountConnected(definitionId, extensionKey) {
70
- return dispatchAnalytics((0, _analytics.trackAppAccountConnected)(definitionId, extensionKey));
71
- }
72
- };
73
- }, [dispatchAnalytics]);
74
- var screen = (0, _react.useMemo)(function () {
75
- return {
76
- authPopupEvent: function authPopupEvent(definitionId, extensionKey) {
77
- return dispatchAnalytics((0, _analytics.screenAuthPopupEvent)(definitionId, extensionKey));
78
- }
79
- };
80
- }, [dispatchAnalytics]);
81
- return (0, _react.useMemo)(function () {
82
- return {
83
- ui: ui,
84
- operational: operational,
85
- track: track,
86
- screen: screen
87
- };
88
- }, [ui, operational, track, screen]);
89
- };
37
+ var _ufoExperiences = require("./ufoExperiences");
90
38
 
91
- exports.useSmartLinkAnalytics = useSmartLinkAnalytics;
39
+ var _useSmartLinkAnalytics = require("./useSmartLinkAnalytics");
@@ -0,0 +1,60 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.addMetadataToExperience = exports.failUfoExperience = exports.succeedUfoExperience = exports.startUfoExperience = void 0;
7
+
8
+ var _ufo = require("@atlaskit/ufo");
9
+
10
+ var ufoExperiences = {
11
+ 'smart-link-rendered': new _ufo.ConcurrentExperience('smart-link-rendered', {
12
+ type: _ufo.ExperienceTypes.Load,
13
+ performanceType: _ufo.ExperiencePerformanceTypes.PageSegmentLoad,
14
+ platform: {
15
+ component: 'smart-links'
16
+ }
17
+ }),
18
+ 'smart-link-authenticated': new _ufo.ConcurrentExperience('smart-link-authenticated', {
19
+ type: _ufo.ExperienceTypes.Load,
20
+ performanceType: _ufo.ExperiencePerformanceTypes.PageSegmentLoad,
21
+ platform: {
22
+ component: 'smart-links'
23
+ }
24
+ })
25
+ };
26
+
27
+ var startUfoExperience = function startUfoExperience(experienceName, id, properties) {
28
+ var experience = ufoExperiences[experienceName].getInstance(id);
29
+ experience.start();
30
+
31
+ if (properties) {
32
+ experience.addMetadata(properties);
33
+ }
34
+ };
35
+
36
+ exports.startUfoExperience = startUfoExperience;
37
+
38
+ var succeedUfoExperience = function succeedUfoExperience(experienceName, id, properties) {
39
+ var experience = ufoExperiences[experienceName].getInstance(id);
40
+ experience.success({
41
+ metadata: properties
42
+ });
43
+ };
44
+
45
+ exports.succeedUfoExperience = succeedUfoExperience;
46
+
47
+ var failUfoExperience = function failUfoExperience(experienceName, id, properties) {
48
+ var experience = ufoExperiences[experienceName].getInstance(id);
49
+ experience.failure({
50
+ metadata: properties
51
+ });
52
+ };
53
+
54
+ exports.failUfoExperience = failUfoExperience;
55
+
56
+ var addMetadataToExperience = function addMetadataToExperience(experienceName, id, properties) {
57
+ ufoExperiences[experienceName].getInstance(id).addMetadata(properties);
58
+ };
59
+
60
+ exports.addMetadataToExperience = addMetadataToExperience;