@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.
- package/CHANGELOG.md +78 -0
- package/dist/cjs/client/index.js +30 -30
- package/dist/cjs/client/utils/environments.js +1 -1
- package/dist/cjs/extractors/block/index.js +4 -4
- package/dist/cjs/extractors/common/actions/extractPreviewAction.js +4 -3
- package/dist/cjs/in-product.js +43 -0
- package/dist/cjs/index.js +66 -4
- package/dist/cjs/providers/editor/index.js +113 -78
- package/dist/cjs/providers/editor/transformer.js +1 -1
- package/dist/cjs/state/actions/constants.js +1 -5
- package/dist/cjs/state/actions/helpers.js +1 -3
- package/dist/cjs/state/actions/index.js +16 -13
- package/dist/cjs/state/analytics/index.js +32 -84
- package/dist/cjs/state/analytics/ufoExperiences.js +60 -0
- package/dist/cjs/state/analytics/useSmartLinkAnalytics.js +106 -0
- package/dist/cjs/state/context/provider.js +3 -16
- package/dist/cjs/state/helpers.js +1 -2
- package/dist/cjs/state/hooks/useSmartLink.js +6 -6
- package/dist/cjs/state/reducers/index.js +3 -8
- package/dist/cjs/utils/analytics/analytics.js +31 -1
- package/dist/cjs/version.json +1 -1
- package/dist/cjs/view/BlockCard/index.js +3 -2
- package/dist/cjs/view/CardWithUrl/component-lazy/LazyFallback.js +6 -2
- package/dist/cjs/view/CardWithUrl/component-lazy/index.js +1 -1
- package/dist/cjs/view/CardWithUrl/component.js +10 -4
- package/dist/cjs/view/CardWithUrl/loader.js +110 -133
- package/dist/cjs/view/EmbedCard/{IframelyResizeMessageListener.js → EmbedResizeMessageListener.js} +11 -19
- package/dist/cjs/view/SmartLinkEvents/useSmartLinkEvents.js +21 -0
- package/dist/es2019/client/index.js +47 -43
- package/dist/es2019/client/utils/environments.js +1 -1
- package/dist/es2019/extractors/block/index.js +4 -4
- package/dist/es2019/extractors/common/actions/extractPreviewAction.js +4 -4
- package/dist/es2019/in-product.js +1 -0
- package/dist/es2019/index.js +7 -2
- package/dist/es2019/providers/editor/index.js +18 -6
- package/dist/es2019/providers/editor/transformer.js +1 -1
- package/dist/es2019/state/actions/constants.js +0 -2
- package/dist/es2019/state/actions/helpers.js +1 -3
- package/dist/es2019/state/actions/index.js +12 -11
- package/dist/es2019/state/analytics/index.js +2 -40
- package/dist/es2019/state/analytics/ufoExperiences.js +40 -0
- package/dist/es2019/state/analytics/useSmartLinkAnalytics.js +62 -0
- package/dist/es2019/state/context/provider.js +2 -8
- package/dist/es2019/state/helpers.js +1 -2
- package/dist/es2019/state/hooks/useSmartLink.js +4 -5
- package/dist/es2019/state/reducers/index.js +3 -8
- package/dist/es2019/utils/analytics/analytics.js +16 -0
- package/dist/es2019/version.json +1 -1
- package/dist/es2019/view/BlockCard/index.js +3 -2
- package/dist/es2019/view/CardWithUrl/component-lazy/LazyFallback.js +3 -1
- package/dist/es2019/view/CardWithUrl/component-lazy/index.js +1 -1
- package/dist/es2019/view/CardWithUrl/component.js +10 -4
- package/dist/es2019/view/CardWithUrl/loader.js +87 -89
- package/dist/es2019/view/EmbedCard/{IframelyResizeMessageListener.js → EmbedResizeMessageListener.js} +3 -10
- package/dist/es2019/view/SmartLinkEvents/useSmartLinkEvents.js +10 -0
- package/dist/esm/client/index.js +30 -31
- package/dist/esm/client/utils/environments.js +1 -1
- package/dist/esm/extractors/block/index.js +4 -4
- package/dist/esm/extractors/common/actions/extractPreviewAction.js +4 -3
- package/dist/esm/in-product.js +1 -0
- package/dist/esm/index.js +7 -2
- package/dist/esm/providers/editor/index.js +110 -78
- package/dist/esm/providers/editor/transformer.js +1 -1
- package/dist/esm/state/actions/constants.js +0 -2
- package/dist/esm/state/actions/helpers.js +1 -3
- package/dist/esm/state/actions/index.js +15 -13
- package/dist/esm/state/analytics/index.js +2 -80
- package/dist/esm/state/analytics/ufoExperiences.js +40 -0
- package/dist/esm/state/analytics/useSmartLinkAnalytics.js +94 -0
- package/dist/esm/state/context/provider.js +3 -15
- package/dist/esm/state/helpers.js +1 -2
- package/dist/esm/state/hooks/useSmartLink.js +6 -6
- package/dist/esm/state/reducers/index.js +3 -8
- package/dist/esm/utils/analytics/analytics.js +26 -0
- package/dist/esm/version.json +1 -1
- package/dist/esm/view/BlockCard/index.js +3 -2
- package/dist/esm/view/CardWithUrl/component-lazy/LazyFallback.js +3 -1
- package/dist/esm/view/CardWithUrl/component-lazy/index.js +1 -1
- package/dist/esm/view/CardWithUrl/component.js +10 -4
- package/dist/esm/view/CardWithUrl/loader.js +103 -127
- package/dist/esm/view/EmbedCard/{IframelyResizeMessageListener.js → EmbedResizeMessageListener.js} +9 -16
- package/dist/esm/view/SmartLinkEvents/useSmartLinkEvents.js +12 -0
- package/dist/types/__tests_external__/index.d.ts +6 -0
- package/dist/types/__tests_external__/page-objects/BaseCard.d.ts +18 -0
- package/dist/types/__tests_external__/page-objects/BlockCard.d.ts +6 -0
- package/dist/types/__tests_external__/page-objects/EmbedCard.d.ts +6 -0
- package/dist/types/__tests_external__/page-objects/InlineCard.d.ts +6 -0
- package/dist/types/__tests_external__/test-cases/card.d.ts +3 -0
- package/dist/types/__tests_external__/test-cases/embed.d.ts +3 -0
- package/dist/types/__tests_external__/test-cases/inline.d.ts +3 -0
- package/dist/types/__tests_external__/test-cases/types.d.ts +5 -0
- package/dist/types/client/index.d.ts +1 -0
- package/dist/types/extractors/block/index.d.ts +2 -2
- package/dist/types/extractors/common/__mocks__/jsonld.d.ts +61 -0
- package/dist/types/extractors/common/actions/extractPreviewAction.d.ts +1 -1
- package/dist/types/in-product.d.ts +1 -0
- package/dist/types/index.d.ts +5 -1
- package/dist/types/providers/editor/index.d.ts +3 -0
- package/dist/types/state/actions/constants.d.ts +0 -2
- package/dist/types/state/actions/types.d.ts +0 -2
- package/dist/types/state/analytics/index.d.ts +3 -32
- package/dist/types/state/analytics/ufoExperiences.d.ts +7 -0
- package/dist/types/state/analytics/useSmartLinkAnalytics.d.ts +30 -0
- package/dist/types/state/context/provider.d.ts +1 -1
- package/dist/types/state/context/types.d.ts +4 -2
- package/dist/types/state/hooks/useSmartLink.d.ts +4 -5
- package/dist/types/state/store/types.d.ts +2 -1
- package/dist/types/utils/analytics/analytics.d.ts +3 -0
- package/dist/types/utils/types.d.ts +1 -1
- package/dist/types/view/BlockCard/types.d.ts +2 -1
- package/dist/types/view/CardWithUrl/component-lazy/LazyFallback.d.ts +1 -0
- package/dist/types/view/CardWithUrl/component-lazy/index.d.ts +1 -1
- package/dist/types/view/CardWithUrl/loader.d.ts +1 -15
- package/dist/types/view/EmbedCard/{IframelyResizeMessageListener.d.ts → EmbedResizeMessageListener.d.ts} +1 -1
- package/dist/types/view/SmartLinkEvents/useSmartLinkEvents.d.ts +2 -0
- package/in-product/package.json +7 -0
- 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
|
-
|
|
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;
|
|
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 (
|
|
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
|
+
}
|
package/dist/esm/client/index.js
CHANGED
|
@@ -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';
|
|
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
|
-
|
|
22
|
+
var _this = this;
|
|
21
23
|
|
|
22
|
-
this
|
|
23
|
-
this.loadersByDomain = {};
|
|
24
|
-
this.retryConfig = {
|
|
25
|
-
retries: 2
|
|
26
|
-
};
|
|
27
|
-
this.resolvedCache = {};
|
|
28
|
-
}
|
|
24
|
+
_classCallCheck(this, CardClient);
|
|
29
25
|
|
|
30
|
-
|
|
31
|
-
|
|
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(
|
|
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,
|
|
83
|
+
}, _callee, null, [[2, 8]]);
|
|
90
84
|
}));
|
|
91
85
|
|
|
92
|
-
function
|
|
93
|
-
return
|
|
94
|
-
}
|
|
86
|
+
return function (_x) {
|
|
87
|
+
return _ref.apply(this, arguments);
|
|
88
|
+
};
|
|
89
|
+
}());
|
|
95
90
|
|
|
96
|
-
|
|
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
|
|
102
|
-
|
|
103
|
-
|
|
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
|
|
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://
|
|
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 {
|
|
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: "
|
|
35
|
+
key: "batchPatterns",
|
|
22
36
|
value: function () {
|
|
23
|
-
var
|
|
24
|
-
var
|
|
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.
|
|
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
|
-
|
|
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 =
|
|
38
|
-
return
|
|
83
|
+
response = _context2.sent;
|
|
84
|
+
return _context2.abrupt("return", response.isSupported);
|
|
39
85
|
|
|
40
86
|
case 8:
|
|
41
|
-
|
|
42
|
-
|
|
87
|
+
_context2.prev = 8;
|
|
88
|
+
_context2.t0 = _context2["catch"](0);
|
|
43
89
|
// eslint-disable-next-line
|
|
44
|
-
console.error('failed to fetch /check',
|
|
45
|
-
return
|
|
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
|
|
95
|
+
return _context2.stop();
|
|
50
96
|
}
|
|
51
97
|
}
|
|
52
|
-
},
|
|
98
|
+
}, _callee2, this, [[0, 8]]);
|
|
53
99
|
}));
|
|
54
100
|
|
|
55
|
-
function check(
|
|
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
|
|
110
|
+
var _fetchPatterns = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee3() {
|
|
65
111
|
var endpoint, response;
|
|
66
|
-
return _regeneratorRuntime.wrap(function
|
|
112
|
+
return _regeneratorRuntime.wrap(function _callee3$(_context3) {
|
|
67
113
|
while (1) {
|
|
68
|
-
switch (
|
|
114
|
+
switch (_context3.prev = _context3.next) {
|
|
69
115
|
case 0:
|
|
70
|
-
|
|
116
|
+
_context3.prev = 0;
|
|
71
117
|
endpoint = "".concat(this.resolverUrl, "/providers");
|
|
72
|
-
|
|
118
|
+
_context3.next = 4;
|
|
73
119
|
return api.request('post', endpoint, undefined, this.requestHeaders);
|
|
74
120
|
|
|
75
121
|
case 4:
|
|
76
|
-
response =
|
|
77
|
-
return
|
|
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
|
-
|
|
86
|
-
|
|
131
|
+
_context3.prev = 8;
|
|
132
|
+
_context3.t0 = _context3["catch"](0);
|
|
87
133
|
// eslint-disable-next-line
|
|
88
|
-
console.error('failed to fetch /providers',
|
|
89
|
-
return
|
|
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
|
|
139
|
+
return _context3.stop();
|
|
94
140
|
}
|
|
95
141
|
}
|
|
96
|
-
},
|
|
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
|
|
109
|
-
|
|
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 (
|
|
157
|
+
switch (_context4.prev = _context4.next) {
|
|
113
158
|
case 0:
|
|
114
|
-
|
|
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
|
-
|
|
122
|
-
return this.
|
|
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
|
-
|
|
131
|
-
|
|
132
|
-
break;
|
|
133
|
-
}
|
|
167
|
+
case 3:
|
|
168
|
+
this.patterns = _context4.sent;
|
|
134
169
|
|
|
135
|
-
|
|
136
|
-
return
|
|
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
|
|
175
|
+
case 5:
|
|
144
176
|
case "end":
|
|
145
|
-
return
|
|
177
|
+
return _context4.stop();
|
|
146
178
|
}
|
|
147
179
|
}
|
|
148
|
-
},
|
|
180
|
+
}, _callee4, this);
|
|
149
181
|
}));
|
|
150
182
|
|
|
151
|
-
function findPattern(
|
|
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
|
|
192
|
+
var _resolve = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee5(url, appearance) {
|
|
161
193
|
var isSupported;
|
|
162
|
-
return _regeneratorRuntime.wrap(function
|
|
194
|
+
return _regeneratorRuntime.wrap(function _callee5$(_context5) {
|
|
163
195
|
while (1) {
|
|
164
|
-
switch (
|
|
196
|
+
switch (_context5.prev = _context5.next) {
|
|
165
197
|
case 0:
|
|
166
|
-
|
|
167
|
-
|
|
198
|
+
_context5.prev = 0;
|
|
199
|
+
_context5.next = 3;
|
|
168
200
|
return this.findPattern(url);
|
|
169
201
|
|
|
170
202
|
case 3:
|
|
171
|
-
|
|
203
|
+
_context5.t0 = _context5.sent;
|
|
172
204
|
|
|
173
|
-
if (
|
|
174
|
-
|
|
205
|
+
if (_context5.t0) {
|
|
206
|
+
_context5.next = 8;
|
|
175
207
|
break;
|
|
176
208
|
}
|
|
177
209
|
|
|
178
|
-
|
|
210
|
+
_context5.next = 7;
|
|
179
211
|
return this.check(url);
|
|
180
212
|
|
|
181
213
|
case 7:
|
|
182
|
-
|
|
214
|
+
_context5.t0 = _context5.sent;
|
|
183
215
|
|
|
184
216
|
case 8:
|
|
185
|
-
isSupported =
|
|
217
|
+
isSupported = _context5.t0;
|
|
186
218
|
|
|
187
219
|
if (!isSupported) {
|
|
188
|
-
|
|
220
|
+
_context5.next = 11;
|
|
189
221
|
break;
|
|
190
222
|
}
|
|
191
223
|
|
|
192
|
-
return
|
|
224
|
+
return _context5.abrupt("return", this.transformer.toAdf(url, appearance));
|
|
193
225
|
|
|
194
226
|
case 11:
|
|
195
|
-
|
|
227
|
+
_context5.next = 16;
|
|
196
228
|
break;
|
|
197
229
|
|
|
198
230
|
case 13:
|
|
199
|
-
|
|
200
|
-
|
|
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(
|
|
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
|
|
237
|
+
return _context5.abrupt("return", Promise.reject(undefined));
|
|
206
238
|
|
|
207
239
|
case 17:
|
|
208
240
|
case "end":
|
|
209
|
-
return
|
|
241
|
+
return _context5.stop();
|
|
210
242
|
}
|
|
211
243
|
}
|
|
212
|
-
},
|
|
244
|
+
}, _callee5, this, [[0, 13]]);
|
|
213
245
|
}));
|
|
214
246
|
|
|
215
|
-
function resolve(
|
|
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';
|