@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
@@ -1,25 +1,18 @@
1
1
  import _defineProperty from "@babel/runtime/helpers/defineProperty";
2
2
  import React from 'react';
3
3
  import { embedHeaderHeight } from '@atlaskit/media-ui/embeds';
4
- const EMBED_ALLOWED_DOMAINS = ['http://cdn.iframe.ly', 'https://cdn.iframe.ly', // Our CDN domain names
5
- 'https://iframely.staging.atl-paas.net', 'https://iframely.prod.atl-paas.net'];
6
- export class IframelyResizeMessageListener extends React.Component {
4
+ export class EmbedResizeMessageListener extends React.Component {
7
5
  constructor(...args) {
8
6
  super(...args);
9
7
 
10
8
  _defineProperty(this, "messageCallback", event => {
11
9
  const {
12
10
  embedIframeRef
13
- } = this.props; // Security: we should only listen to messages from specific domains.
14
- // See https://developer.mozilla.org/en-US/docs/Web/API/Window/postMessage.
15
-
16
- const isFromAllowedDomain = EMBED_ALLOWED_DOMAINS.includes(event.origin); // This is needed for WD/VR tests to work properly, where we load example as iframe src
17
-
18
- const isFromSameDomain = event.origin === window.origin;
11
+ } = this.props;
19
12
  const isFromExpectedIframe = embedIframeRef.current && event.source === embedIframeRef.current.contentWindow;
20
13
  const isStringData = typeof event.data === 'string';
21
14
 
22
- if ((isFromAllowedDomain || isFromSameDomain) && isFromExpectedIframe && isStringData) {
15
+ if (isFromExpectedIframe && isStringData) {
23
16
  try {
24
17
  const data = JSON.parse(event.data);
25
18
 
@@ -0,0 +1,10 @@
1
+ import { useMemo } from 'react';
2
+ import { SmartLinkEvents } from '../../utils/analytics/analytics';
3
+ export function useSmartLinkEvents() {
4
+ /**
5
+ * this utility maybe extended in the future to include
6
+ * more contextual info about SLs
7
+ */
8
+ const events = useMemo(() => new SmartLinkEvents(), []);
9
+ return events;
10
+ }
@@ -3,34 +3,28 @@ import _toConsumableArray from "@babel/runtime/helpers/toConsumableArray";
3
3
  import _asyncToGenerator from "@babel/runtime/helpers/asyncToGenerator";
4
4
  import _classCallCheck from "@babel/runtime/helpers/classCallCheck";
5
5
  import _createClass from "@babel/runtime/helpers/createClass";
6
+ import _defineProperty from "@babel/runtime/helpers/defineProperty";
7
+ // import setimmediate to temporary fix dataloader 2.0.0 bug
8
+ // @see https://github.com/graphql/dataloader/issues/249
9
+ import 'setimmediate';
6
10
  import DataLoader from 'dataloader';
7
11
  import retry from 'async-retry';
8
12
  import * as api from './api';
9
13
  import { APIError } from './errors';
10
- import { getResolverUrl } from './utils/environments'; // @ts-ignore
11
-
12
- import BottleneckLight from 'bottleneck/light';
13
- var Bottleneck = BottleneckLight;
14
+ import { getResolverUrl } from './utils/environments';
15
+ import pThrottle from 'p-throttle';
14
16
  import { isSuccessfulResponse, isErrorResponse } from './types/responses';
15
17
  var MAX_BATCH_SIZE = 50;
16
18
  var MIN_TIME_BETWEEN_BATCHES = 250;
17
19
 
18
20
  var CardClient = /*#__PURE__*/function () {
19
21
  function CardClient(envKey) {
20
- _classCallCheck(this, CardClient);
22
+ var _this = this;
21
23
 
22
- this.resolverUrl = getResolverUrl(envKey);
23
- this.loadersByDomain = {};
24
- this.retryConfig = {
25
- retries: 2
26
- };
27
- this.resolvedCache = {};
28
- }
24
+ _classCallCheck(this, CardClient);
29
25
 
30
- _createClass(CardClient, [{
31
- key: "batchResolve",
32
- value: function () {
33
- var _batchResolve = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee(urls) {
26
+ _defineProperty(this, "batchResolve", /*#__PURE__*/function () {
27
+ var _ref = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee(urls) {
34
28
  var deDuplicatedUrls, resolvedUrls, map, i, url, data;
35
29
  return _regeneratorRuntime.wrap(function _callee$(_context) {
36
30
  while (1) {
@@ -41,7 +35,7 @@ var CardClient = /*#__PURE__*/function () {
41
35
  resolvedUrls = [];
42
36
  _context.prev = 2;
43
37
  _context.next = 5;
44
- return api.request('post', "".concat(this.resolverUrl, "/resolve/batch"), deDuplicatedUrls.map(function (resourceUrl) {
38
+ return api.request('post', "".concat(_this.resolverUrl, "/resolve/batch"), deDuplicatedUrls.map(function (resourceUrl) {
45
39
  return {
46
40
  resourceUrl: resourceUrl
47
41
  };
@@ -86,31 +80,36 @@ var CardClient = /*#__PURE__*/function () {
86
80
  return _context.stop();
87
81
  }
88
82
  }
89
- }, _callee, this, [[2, 8]]);
83
+ }, _callee, null, [[2, 8]]);
90
84
  }));
91
85
 
92
- function batchResolve(_x) {
93
- return _batchResolve.apply(this, arguments);
94
- }
86
+ return function (_x) {
87
+ return _ref.apply(this, arguments);
88
+ };
89
+ }());
95
90
 
96
- return batchResolve;
97
- }()
98
- }, {
91
+ this.resolverUrl = getResolverUrl(envKey);
92
+ this.loadersByDomain = {};
93
+ this.retryConfig = {
94
+ retries: 2
95
+ };
96
+ this.resolvedCache = {};
97
+ }
98
+
99
+ _createClass(CardClient, [{
99
100
  key: "createLoader",
100
101
  value: function createLoader() {
101
- var _this = this;
102
-
103
- var limiter = new Bottleneck({
104
- minTime: MIN_TIME_BETWEEN_BATCHES
102
+ var batchResolveThrottler = pThrottle({
103
+ limit: 1,
104
+ interval: MIN_TIME_BETWEEN_BATCHES
105
105
  });
106
+ var throttledBatchResolve = batchResolveThrottler(this.batchResolve);
106
107
  return new DataLoader( // We place all calls to `batchResolve` in a limiter so we don't send off several simultaneous batch requests.
107
108
  // This is for two reasons:
108
109
  // 1: we want to avoid getting rate limited upstream (eg: forge and other APIs)
109
110
  // 2: we want to avoid sending out heaps of requests from the client at once
110
111
  function (urls) {
111
- return limiter.schedule(function () {
112
- return _this.batchResolve(urls);
113
- });
112
+ return throttledBatchResolve(urls);
114
113
  }, {
115
114
  maxBatchSize: MAX_BATCH_SIZE,
116
115
  // NOTE: we turn off DataLoader's cache because it doesn't work for our use-case. Consider the following:
@@ -1,5 +1,5 @@
1
1
  var devBaseUrl = 'https://api-private.dev.atlassian.com';
2
- var stgBaseUrl = 'https://api-private.stg.atlassian.com';
2
+ var stgBaseUrl = 'https://commerce-components-preview.dev.atlassian.com/gateway/api';
3
3
  var prodBaseUrl = 'https://api-private.atlassian.com';
4
4
  export var BaseUrls = {
5
5
  dev: devBaseUrl,
@@ -40,14 +40,14 @@ var extractBlockDetails = function extractBlockDetails(jsonLd) {
40
40
  });
41
41
  };
42
42
 
43
- export var extractBlockActions = function extractBlockActions(props, jsonLd, opts) {
43
+ export var extractBlockActions = function extractBlockActions(props, jsonLd, opts, platform) {
44
44
  if (opts) {
45
45
  var handleInvoke = opts.handleInvoke,
46
46
  handleAnalytics = opts.handleAnalytics,
47
47
  definitionId = opts.definitionId,
48
48
  testId = opts.testId;
49
49
  var actions = extractActions(jsonLd, handleInvoke);
50
- var previewAction = extractPreviewAction(definitionId, props, jsonLd, handleInvoke, handleAnalytics, testId); // The previewAction should always be the last action
50
+ var previewAction = extractPreviewAction(definitionId, props, jsonLd, handleInvoke, handleAnalytics, testId, platform); // The previewAction should always be the last action
51
51
 
52
52
  if (previewAction) {
53
53
  actions.push(previewAction);
@@ -79,7 +79,7 @@ export var extractBlockUsers = function extractBlockUsers(jsonLd) {
79
79
  return updatedByMembers || createdByMembers;
80
80
  }
81
81
  };
82
- export var extractBlockProps = function extractBlockProps(jsonLd, meta, opts, renderers) {
82
+ export var extractBlockProps = function extractBlockProps(jsonLd, meta, opts, renderers, platform) {
83
83
  var props = {
84
84
  link: extractLink(jsonLd),
85
85
  title: extractTitle(jsonLd),
@@ -95,6 +95,6 @@ export var extractBlockProps = function extractBlockProps(jsonLd, meta, opts, re
95
95
  isTrusted: extractIsTrusted(meta)
96
96
  };
97
97
  return _objectSpread(_objectSpread({}, props), {}, {
98
- actions: extractBlockActions(props, jsonLd, opts)
98
+ actions: extractBlockActions(props, jsonLd, opts, platform)
99
99
  });
100
100
  };
@@ -10,10 +10,10 @@ import { extractDownloadUrl } from '../detail';
10
10
  import { extractProvider } from '../context';
11
11
  import { extractPreview } from '../preview';
12
12
 
13
- var getMetadataFromJsonLd = function getMetadataFromJsonLd(jsonLd) {
13
+ var getMetadataFromJsonLd = function getMetadataFromJsonLd(jsonLd, platform) {
14
14
  var download = extractDownloadUrl(jsonLd);
15
15
  var provider = extractProvider(jsonLd);
16
- var preview = extractPreview(jsonLd);
16
+ var preview = extractPreview(jsonLd, platform);
17
17
  return {
18
18
  download: download,
19
19
  providerName: provider && provider.text,
@@ -59,8 +59,9 @@ export var extractPreviewAction = function extractPreviewAction() {
59
59
  var handleInvoke = arguments.length > 3 ? arguments[3] : undefined;
60
60
  var handleAnalytics = arguments.length > 4 ? arguments[4] : undefined;
61
61
  var testId = arguments.length > 5 ? arguments[5] : undefined;
62
+ var platform = arguments.length > 6 ? arguments[6] : undefined;
62
63
  // Extract metadata from view props & raw JSON-LD.
63
- var metadataFromJsonLd = getMetadataFromJsonLd(jsonLd);
64
+ var metadataFromJsonLd = getMetadataFromJsonLd(jsonLd, platform);
64
65
  var metadataFromViewProps = getMetadataFromResolvedProps(viewProps);
65
66
 
66
67
  var metadata = _objectSpread(_objectSpread({}, metadataFromJsonLd), metadataFromViewProps); // Extract preview action only if we have an iframe src.
@@ -0,0 +1 @@
1
+ export { InlineCardPageObject, BlockCardPageObject, EmbedCardPageObject, inlineSmartLinkRendersTestCase, blockSmartLinkRendersTestCase, embedSmartLinkRendersTestCase } from './__tests_external__';
package/dist/esm/index.js CHANGED
@@ -4,5 +4,10 @@ export { default as Client } from './client';
4
4
  export { APIError } from './client/errors';
5
5
  export { Card } from './view/Card';
6
6
  export { default as Context } from './state/context';
7
- export { IframelyResizeMessageListener } from './view/EmbedCard/IframelyResizeMessageListener';
8
- export { embedHeaderHeight } from '@atlaskit/media-ui/embeds';
7
+ export { EmbedResizeMessageListener } from './view/EmbedCard/EmbedResizeMessageListener';
8
+ export { embedHeaderHeight } from '@atlaskit/media-ui/embeds';
9
+ export { SmartLinkEvents } from './utils/analytics/analytics';
10
+ export { useSmartLinkEvents } from './view/SmartLinkEvents/useSmartLinkEvents'; // Classnames for integrators
11
+
12
+ export { contentFooterClassName, metadataListClassName, blockCardResolvingViewClassName, blockCardResolvedViewClassName, blockCardForbiddenViewClassName, blockCardIconImageClassName } from '@atlaskit/media-ui/classNames';
13
+ export { loadingPlaceholderClassName } from './view/CardWithUrl/component-lazy/LazyFallback';
@@ -2,11 +2,18 @@ import _regeneratorRuntime from "@babel/runtime/regenerator";
2
2
  import _asyncToGenerator from "@babel/runtime/helpers/asyncToGenerator";
3
3
  import _classCallCheck from "@babel/runtime/helpers/classCallCheck";
4
4
  import _createClass from "@babel/runtime/helpers/createClass";
5
+ // import setimmediate to temporary fix dataloader 2.0.0 bug
6
+ // @see https://github.com/graphql/dataloader/issues/249
7
+ import 'setimmediate';
8
+ import DataLoader from 'dataloader';
5
9
  import { Transformer } from './transformer';
6
10
  import { getResolverUrl, getBaseUrl } from '../../client/utils/environments';
7
11
  import * as api from '../../client/api';
12
+ var BATCH_WAIT_TIME = 50;
8
13
  export var EditorCardProvider = /*#__PURE__*/function () {
9
14
  function EditorCardProvider(envKey) {
15
+ var _this = this;
16
+
10
17
  _classCallCheck(this, EditorCardProvider);
11
18
 
12
19
  this.baseUrl = getBaseUrl(envKey);
@@ -15,44 +22,83 @@ export var EditorCardProvider = /*#__PURE__*/function () {
15
22
  this.requestHeaders = {
16
23
  Origin: this.baseUrl
17
24
  };
25
+ this.patternLoader = new DataLoader(function (keys) {
26
+ return _this.batchPatterns(keys);
27
+ }, {
28
+ batchScheduleFn: function batchScheduleFn(callback) {
29
+ return setTimeout(callback, BATCH_WAIT_TIME);
30
+ }
31
+ });
18
32
  }
19
33
 
20
34
  _createClass(EditorCardProvider, [{
21
- key: "check",
35
+ key: "batchPatterns",
22
36
  value: function () {
23
- var _check = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee(resourceUrl) {
24
- var endpoint, response;
37
+ var _batchPatterns = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee(keys) {
38
+ var patterns;
25
39
  return _regeneratorRuntime.wrap(function _callee$(_context) {
26
40
  while (1) {
27
41
  switch (_context.prev = _context.next) {
28
42
  case 0:
29
- _context.prev = 0;
43
+ _context.next = 2;
44
+ return this.fetchPatterns();
45
+
46
+ case 2:
47
+ patterns = _context.sent;
48
+ return _context.abrupt("return", keys.map(function () {
49
+ return patterns;
50
+ }));
51
+
52
+ case 4:
53
+ case "end":
54
+ return _context.stop();
55
+ }
56
+ }
57
+ }, _callee, this);
58
+ }));
59
+
60
+ function batchPatterns(_x) {
61
+ return _batchPatterns.apply(this, arguments);
62
+ }
63
+
64
+ return batchPatterns;
65
+ }()
66
+ }, {
67
+ key: "check",
68
+ value: function () {
69
+ var _check = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee2(resourceUrl) {
70
+ var endpoint, response;
71
+ return _regeneratorRuntime.wrap(function _callee2$(_context2) {
72
+ while (1) {
73
+ switch (_context2.prev = _context2.next) {
74
+ case 0:
75
+ _context2.prev = 0;
30
76
  endpoint = "".concat(this.resolverUrl, "/check");
31
- _context.next = 4;
77
+ _context2.next = 4;
32
78
  return api.request('post', endpoint, {
33
79
  resourceUrl: resourceUrl
34
80
  }, this.requestHeaders);
35
81
 
36
82
  case 4:
37
- response = _context.sent;
38
- return _context.abrupt("return", response.isSupported);
83
+ response = _context2.sent;
84
+ return _context2.abrupt("return", response.isSupported);
39
85
 
40
86
  case 8:
41
- _context.prev = 8;
42
- _context.t0 = _context["catch"](0);
87
+ _context2.prev = 8;
88
+ _context2.t0 = _context2["catch"](0);
43
89
  // eslint-disable-next-line
44
- console.error('failed to fetch /check', _context.t0);
45
- return _context.abrupt("return", undefined);
90
+ console.error('failed to fetch /check', _context2.t0);
91
+ return _context2.abrupt("return", undefined);
46
92
 
47
93
  case 12:
48
94
  case "end":
49
- return _context.stop();
95
+ return _context2.stop();
50
96
  }
51
97
  }
52
- }, _callee, this, [[0, 8]]);
98
+ }, _callee2, this, [[0, 8]]);
53
99
  }));
54
100
 
55
- function check(_x) {
101
+ function check(_x2) {
56
102
  return _check.apply(this, arguments);
57
103
  }
58
104
 
@@ -61,20 +107,20 @@ export var EditorCardProvider = /*#__PURE__*/function () {
61
107
  }, {
62
108
  key: "fetchPatterns",
63
109
  value: function () {
64
- var _fetchPatterns = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee2() {
110
+ var _fetchPatterns = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee3() {
65
111
  var endpoint, response;
66
- return _regeneratorRuntime.wrap(function _callee2$(_context2) {
112
+ return _regeneratorRuntime.wrap(function _callee3$(_context3) {
67
113
  while (1) {
68
- switch (_context2.prev = _context2.next) {
114
+ switch (_context3.prev = _context3.next) {
69
115
  case 0:
70
- _context2.prev = 0;
116
+ _context3.prev = 0;
71
117
  endpoint = "".concat(this.resolverUrl, "/providers");
72
- _context2.next = 4;
118
+ _context3.next = 4;
73
119
  return api.request('post', endpoint, undefined, this.requestHeaders);
74
120
 
75
121
  case 4:
76
- response = _context2.sent;
77
- return _context2.abrupt("return", response.providers.reduce(function (allSources, provider) {
122
+ response = _context3.sent;
123
+ return _context3.abrupt("return", response.providers.reduce(function (allSources, provider) {
78
124
  var providerSources = provider.patterns.map(function (pattern) {
79
125
  return pattern.source;
80
126
  });
@@ -82,18 +128,18 @@ export var EditorCardProvider = /*#__PURE__*/function () {
82
128
  }, []));
83
129
 
84
130
  case 8:
85
- _context2.prev = 8;
86
- _context2.t0 = _context2["catch"](0);
131
+ _context3.prev = 8;
132
+ _context3.t0 = _context3["catch"](0);
87
133
  // eslint-disable-next-line
88
- console.error('failed to fetch /providers', _context2.t0);
89
- return _context2.abrupt("return", undefined);
134
+ console.error('failed to fetch /providers', _context3.t0);
135
+ return _context3.abrupt("return", undefined);
90
136
 
91
137
  case 12:
92
138
  case "end":
93
- return _context2.stop();
139
+ return _context3.stop();
94
140
  }
95
141
  }
96
- }, _callee2, this, [[0, 8]]);
142
+ }, _callee3, this, [[0, 8]]);
97
143
  }));
98
144
 
99
145
  function fetchPatterns() {
@@ -105,50 +151,36 @@ export var EditorCardProvider = /*#__PURE__*/function () {
105
151
  }, {
106
152
  key: "findPattern",
107
153
  value: function () {
108
- var _findPattern = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee3(url) {
109
- var patterns;
110
- return _regeneratorRuntime.wrap(function _callee3$(_context3) {
154
+ var _findPattern = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee4(url) {
155
+ return _regeneratorRuntime.wrap(function _callee4$(_context4) {
111
156
  while (1) {
112
- switch (_context3.prev = _context3.next) {
157
+ switch (_context4.prev = _context4.next) {
113
158
  case 0:
114
- _context3.t0 = this.patterns;
115
-
116
- if (_context3.t0) {
117
- _context3.next = 5;
159
+ if (this.patterns) {
160
+ _context4.next = 4;
118
161
  break;
119
162
  }
120
163
 
121
- _context3.next = 4;
122
- return this.fetchPatterns();
123
-
124
- case 4:
125
- _context3.t0 = _context3.sent;
126
-
127
- case 5:
128
- patterns = _context3.t0;
164
+ _context4.next = 3;
165
+ return this.patternLoader.load('providers');
129
166
 
130
- if (!patterns) {
131
- _context3.next = 9;
132
- break;
133
- }
167
+ case 3:
168
+ this.patterns = _context4.sent;
134
169
 
135
- this.patterns = patterns;
136
- return _context3.abrupt("return", patterns.some(function (pattern) {
170
+ case 4:
171
+ return _context4.abrupt("return", this.patterns ? this.patterns.some(function (pattern) {
137
172
  return url.match(pattern);
138
- }));
139
-
140
- case 9:
141
- return _context3.abrupt("return", false);
173
+ }) : false);
142
174
 
143
- case 10:
175
+ case 5:
144
176
  case "end":
145
- return _context3.stop();
177
+ return _context4.stop();
146
178
  }
147
179
  }
148
- }, _callee3, this);
180
+ }, _callee4, this);
149
181
  }));
150
182
 
151
- function findPattern(_x2) {
183
+ function findPattern(_x3) {
152
184
  return _findPattern.apply(this, arguments);
153
185
  }
154
186
 
@@ -157,62 +189,62 @@ export var EditorCardProvider = /*#__PURE__*/function () {
157
189
  }, {
158
190
  key: "resolve",
159
191
  value: function () {
160
- var _resolve = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee4(url, appearance) {
192
+ var _resolve = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee5(url, appearance) {
161
193
  var isSupported;
162
- return _regeneratorRuntime.wrap(function _callee4$(_context4) {
194
+ return _regeneratorRuntime.wrap(function _callee5$(_context5) {
163
195
  while (1) {
164
- switch (_context4.prev = _context4.next) {
196
+ switch (_context5.prev = _context5.next) {
165
197
  case 0:
166
- _context4.prev = 0;
167
- _context4.next = 3;
198
+ _context5.prev = 0;
199
+ _context5.next = 3;
168
200
  return this.findPattern(url);
169
201
 
170
202
  case 3:
171
- _context4.t0 = _context4.sent;
203
+ _context5.t0 = _context5.sent;
172
204
 
173
- if (_context4.t0) {
174
- _context4.next = 8;
205
+ if (_context5.t0) {
206
+ _context5.next = 8;
175
207
  break;
176
208
  }
177
209
 
178
- _context4.next = 7;
210
+ _context5.next = 7;
179
211
  return this.check(url);
180
212
 
181
213
  case 7:
182
- _context4.t0 = _context4.sent;
214
+ _context5.t0 = _context5.sent;
183
215
 
184
216
  case 8:
185
- isSupported = _context4.t0;
217
+ isSupported = _context5.t0;
186
218
 
187
219
  if (!isSupported) {
188
- _context4.next = 11;
220
+ _context5.next = 11;
189
221
  break;
190
222
  }
191
223
 
192
- return _context4.abrupt("return", this.transformer.toAdf(url, appearance));
224
+ return _context5.abrupt("return", this.transformer.toAdf(url, appearance));
193
225
 
194
226
  case 11:
195
- _context4.next = 16;
227
+ _context5.next = 16;
196
228
  break;
197
229
 
198
230
  case 13:
199
- _context4.prev = 13;
200
- _context4.t1 = _context4["catch"](0);
231
+ _context5.prev = 13;
232
+ _context5.t1 = _context5["catch"](0);
201
233
  // eslint-disable-next-line
202
- console.warn("Error when trying to check Smart Card url \"".concat(url, " - ").concat(_context4.t1.prototype.name, " ").concat(_context4.t1.message), _context4.t1);
234
+ console.warn("Error when trying to check Smart Card url \"".concat(url, " - ").concat(_context5.t1.prototype.name, " ").concat(_context5.t1.message), _context5.t1);
203
235
 
204
236
  case 16:
205
- return _context4.abrupt("return", Promise.reject(undefined));
237
+ return _context5.abrupt("return", Promise.reject(undefined));
206
238
 
207
239
  case 17:
208
240
  case "end":
209
- return _context4.stop();
241
+ return _context5.stop();
210
242
  }
211
243
  }
212
- }, _callee4, this, [[0, 13]]);
244
+ }, _callee5, this, [[0, 13]]);
213
245
  }));
214
246
 
215
- function resolve(_x3, _x4) {
247
+ function resolve(_x4, _x5) {
216
248
  return _resolve.apply(this, arguments);
217
249
  }
218
250
 
@@ -6,7 +6,7 @@ var isJiraRoadMap = function isJiraRoadMap(url) {
6
6
  };
7
7
 
8
8
  var isPolarisView = function isPolarisView(url) {
9
- return url.match(/^https:\/\/.*?\/jira\/polaris\/projects\/[^\/]+?\/ideas\/view\/\d+/);
9
+ return url.match(/^https:\/\/.*?\/jira\/polaris\/projects\/[^\/]+?\/ideas\/view\/\d+$|^https:\/\/.*?\/secure\/JiraProductDiscoveryAnonymous\.jspa\?hash=\w+|^https:\/\/.*?\/jira\/polaris\/share\/\w+/);
10
10
  };
11
11
 
12
12
  var isSlackMessage = function isSlackMessage(url) {
@@ -7,7 +7,5 @@ export var ACTION_PRELOAD = 'preload';
7
7
  export var ANALYTICS_RESOLVING = 'resolving';
8
8
  export var ANALYTICS_ERROR = 'errored';
9
9
  export var ANALYTICS_FALLBACK = 'fallback';
10
- export var MAX_LOADING_DELAY = 1200;
11
- export var MAX_RELOAD_DELAY = 60 * 1000;
12
10
  export var ERROR_MESSAGE_OAUTH = 'Provider.authFlow is not set to OAuth2.';
13
11
  export var ERROR_MESSAGE_FATAL = 'Fatal error resolving URL';
@@ -1,10 +1,8 @@
1
1
  export var cardAction = function cardAction(type, _ref, payload, error) {
2
- var url = _ref.url,
3
- hasExpired = _ref.hasExpired;
2
+ var url = _ref.url;
4
3
  return {
5
4
  type: type,
6
5
  url: url,
7
- hasExpired: hasExpired,
8
6
  payload: payload,
9
7
  error: error
10
8
  };