@bigbinary/neeto-webhooks-frontend 1.6.8 → 1.6.10
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/README.md +2 -0
- package/app/javascript/src/translations/en.json +3 -1
- package/dist/index.cjs.js +128 -8
- package/dist/index.cjs.js.map +1 -1
- package/dist/index.js +130 -10
- package/dist/index.js.map +1 -1
- package/package.json +10 -9
package/dist/index.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import React, { useState, useRef, useCallback } from 'react';
|
|
1
|
+
import React, { useState, useRef, useEffect, useCallback } from 'react';
|
|
2
2
|
import { useParams, useRouteMatch, Switch as Switch$1, Route } from 'react-router-dom';
|
|
3
3
|
import { isPresent, removeBy, isNotEmpty, removeById, findBy } from '@bigbinary/neeto-cist';
|
|
4
4
|
import { DEFAULT_STALE_TIME, SINGULAR, DEFAULT_PAGE_SIZE, PLURAL } from '@bigbinary/neeto-commons-frontend/constants';
|
|
@@ -14,10 +14,10 @@ import axios from 'axios';
|
|
|
14
14
|
import DateFormat from '@bigbinary/neeto-molecules/DateFormat';
|
|
15
15
|
import { t as t$1 } from 'i18next';
|
|
16
16
|
import { prop, pluck, assoc } from 'ramda';
|
|
17
|
-
import { Info } from '@bigbinary/neeto-icons';
|
|
17
|
+
import { Info, Plus } from '@bigbinary/neeto-icons';
|
|
18
|
+
import MoreDropdown from '@bigbinary/neeto-molecules/MoreDropdown';
|
|
18
19
|
import { Form, Textarea, Select, Input, Switch, ActionBlock } from '@bigbinary/neetoui/formik';
|
|
19
20
|
import { buildUrl } from '@bigbinary/neeto-commons-frontend/utils';
|
|
20
|
-
import MoreDropdown from '@bigbinary/neeto-molecules/MoreDropdown';
|
|
21
21
|
import * as yup from 'yup';
|
|
22
22
|
|
|
23
23
|
var getDeliveriesPath = function getDeliveriesPath(webhooksPath) {
|
|
@@ -980,7 +980,73 @@ var useFetchEvents = function useFetchEvents() {
|
|
|
980
980
|
});
|
|
981
981
|
};
|
|
982
982
|
|
|
983
|
-
var WEBHOOK_HELP_URL = "https://
|
|
983
|
+
var WEBHOOK_HELP_URL = "https://neetocalhelp.neetokb.com/p/a-4bb6c2a2";
|
|
984
|
+
var WEBHOOK_SECRETS_HELP_URL = "https://neetocalhelp.neetokb.com/p/a-80de90bd";
|
|
985
|
+
|
|
986
|
+
// Unique ID creation requires a high quality random # generator. In the browser we therefore
|
|
987
|
+
// require the crypto API and do not support built-in fallback to lower quality random number
|
|
988
|
+
// generators (like Math.random()).
|
|
989
|
+
let getRandomValues;
|
|
990
|
+
const rnds8 = new Uint8Array(16);
|
|
991
|
+
function rng() {
|
|
992
|
+
// lazy load so that environments that need to polyfill have a chance to do so
|
|
993
|
+
if (!getRandomValues) {
|
|
994
|
+
// getRandomValues needs to be invoked in a context where "this" is a Crypto implementation.
|
|
995
|
+
getRandomValues = typeof crypto !== 'undefined' && crypto.getRandomValues && crypto.getRandomValues.bind(crypto);
|
|
996
|
+
|
|
997
|
+
if (!getRandomValues) {
|
|
998
|
+
throw new Error('crypto.getRandomValues() not supported. See https://github.com/uuidjs/uuid#getrandomvalues-not-supported');
|
|
999
|
+
}
|
|
1000
|
+
}
|
|
1001
|
+
|
|
1002
|
+
return getRandomValues(rnds8);
|
|
1003
|
+
}
|
|
1004
|
+
|
|
1005
|
+
/**
|
|
1006
|
+
* Convert array of 16 byte values to UUID string format of the form:
|
|
1007
|
+
* XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX
|
|
1008
|
+
*/
|
|
1009
|
+
|
|
1010
|
+
const byteToHex = [];
|
|
1011
|
+
|
|
1012
|
+
for (let i = 0; i < 256; ++i) {
|
|
1013
|
+
byteToHex.push((i + 0x100).toString(16).slice(1));
|
|
1014
|
+
}
|
|
1015
|
+
|
|
1016
|
+
function unsafeStringify(arr, offset = 0) {
|
|
1017
|
+
// Note: Be careful editing this code! It's been tuned for performance
|
|
1018
|
+
// and works in ways you may not expect. See https://github.com/uuidjs/uuid/pull/434
|
|
1019
|
+
return byteToHex[arr[offset + 0]] + byteToHex[arr[offset + 1]] + byteToHex[arr[offset + 2]] + byteToHex[arr[offset + 3]] + '-' + byteToHex[arr[offset + 4]] + byteToHex[arr[offset + 5]] + '-' + byteToHex[arr[offset + 6]] + byteToHex[arr[offset + 7]] + '-' + byteToHex[arr[offset + 8]] + byteToHex[arr[offset + 9]] + '-' + byteToHex[arr[offset + 10]] + byteToHex[arr[offset + 11]] + byteToHex[arr[offset + 12]] + byteToHex[arr[offset + 13]] + byteToHex[arr[offset + 14]] + byteToHex[arr[offset + 15]];
|
|
1020
|
+
}
|
|
1021
|
+
|
|
1022
|
+
const randomUUID = typeof crypto !== 'undefined' && crypto.randomUUID && crypto.randomUUID.bind(crypto);
|
|
1023
|
+
var native = {
|
|
1024
|
+
randomUUID
|
|
1025
|
+
};
|
|
1026
|
+
|
|
1027
|
+
function v4(options, buf, offset) {
|
|
1028
|
+
if (native.randomUUID && !buf && !options) {
|
|
1029
|
+
return native.randomUUID();
|
|
1030
|
+
}
|
|
1031
|
+
|
|
1032
|
+
options = options || {};
|
|
1033
|
+
const rnds = options.random || (options.rng || rng)(); // Per 4.4, set bits for version and `clock_seq_hi_and_reserved`
|
|
1034
|
+
|
|
1035
|
+
rnds[6] = rnds[6] & 0x0f | 0x40;
|
|
1036
|
+
rnds[8] = rnds[8] & 0x3f | 0x80; // Copy bytes to buffer, if provided
|
|
1037
|
+
|
|
1038
|
+
if (buf) {
|
|
1039
|
+
offset = offset || 0;
|
|
1040
|
+
|
|
1041
|
+
for (let i = 0; i < 16; ++i) {
|
|
1042
|
+
buf[offset + i] = rnds[i];
|
|
1043
|
+
}
|
|
1044
|
+
|
|
1045
|
+
return buf;
|
|
1046
|
+
}
|
|
1047
|
+
|
|
1048
|
+
return unsafeStringify(rnds);
|
|
1049
|
+
}
|
|
984
1050
|
|
|
985
1051
|
var MENU_ITEMS = {
|
|
986
1052
|
EDIT: "edit",
|
|
@@ -1090,6 +1156,9 @@ var buildColumns = function buildColumns(_ref6) {
|
|
|
1090
1156
|
width: 400
|
|
1091
1157
|
}];
|
|
1092
1158
|
};
|
|
1159
|
+
var generateRandomSecret = function generateRandomSecret() {
|
|
1160
|
+
return v4().replace(/-/g, "");
|
|
1161
|
+
};
|
|
1093
1162
|
|
|
1094
1163
|
function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
|
|
1095
1164
|
function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
|
|
@@ -1103,6 +1172,10 @@ var AddWebhookPane = function AddWebhookPane(_ref) {
|
|
|
1103
1172
|
webhooks = _ref.webhooks;
|
|
1104
1173
|
var _useTranslation = useTranslation(),
|
|
1105
1174
|
t = _useTranslation.t;
|
|
1175
|
+
var _useState = useState(false),
|
|
1176
|
+
_useState2 = _slicedToArray(_useState, 2),
|
|
1177
|
+
isSecretInputFieldVisible = _useState2[0],
|
|
1178
|
+
setIsSecretInputFieldVisible = _useState2[1];
|
|
1106
1179
|
var _useCreateWebhook = useCreateWebhook({
|
|
1107
1180
|
onSuccess: function onSuccess() {
|
|
1108
1181
|
onClose();
|
|
@@ -1143,6 +1216,24 @@ var AddWebhookPane = function AddWebhookPane(_ref) {
|
|
|
1143
1216
|
entityType: entityType
|
|
1144
1217
|
}));
|
|
1145
1218
|
};
|
|
1219
|
+
var handleClick = function handleClick(setFieldValue) {
|
|
1220
|
+
var randomWebhookSecret = generateRandomSecret();
|
|
1221
|
+
setFieldValue("secret", randomWebhookSecret);
|
|
1222
|
+
setIsSecretInputFieldVisible(true);
|
|
1223
|
+
};
|
|
1224
|
+
var handleRegenerate = function handleRegenerate(setFieldValue) {
|
|
1225
|
+
var randomWebhookSecret = generateRandomSecret();
|
|
1226
|
+
setFieldValue("secret", randomWebhookSecret);
|
|
1227
|
+
};
|
|
1228
|
+
var handleDelete = function handleDelete(setFieldValue) {
|
|
1229
|
+
setFieldValue("secret", null);
|
|
1230
|
+
setIsSecretInputFieldVisible(false);
|
|
1231
|
+
};
|
|
1232
|
+
useEffect(function () {
|
|
1233
|
+
if (webhook !== null && webhook !== void 0 && webhook.secret) {
|
|
1234
|
+
setIsSecretInputFieldVisible(true);
|
|
1235
|
+
}
|
|
1236
|
+
}, [webhook]);
|
|
1146
1237
|
return /*#__PURE__*/React.createElement(Pane, {
|
|
1147
1238
|
isOpen: isOpen,
|
|
1148
1239
|
onClose: onClose,
|
|
@@ -1172,7 +1263,8 @@ var AddWebhookPane = function AddWebhookPane(_ref) {
|
|
|
1172
1263
|
}, function (_ref2) {
|
|
1173
1264
|
var dirty = _ref2.dirty,
|
|
1174
1265
|
isSubmitting = _ref2.isSubmitting,
|
|
1175
|
-
isValid = _ref2.isValid
|
|
1266
|
+
isValid = _ref2.isValid,
|
|
1267
|
+
setFieldValue = _ref2.setFieldValue;
|
|
1176
1268
|
return isLoading ? /*#__PURE__*/React.createElement("div", {
|
|
1177
1269
|
className: "flex items-center justify-center"
|
|
1178
1270
|
}, /*#__PURE__*/React.createElement(Spinner, null)) : /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement(Pane.Body, null, /*#__PURE__*/React.createElement("div", {
|
|
@@ -1194,15 +1286,16 @@ var AddWebhookPane = function AddWebhookPane(_ref) {
|
|
|
1194
1286
|
name: "events",
|
|
1195
1287
|
options: events,
|
|
1196
1288
|
placeholder: t("neetoWebhooks.webhook.eventPlaceholder")
|
|
1197
|
-
}), /*#__PURE__*/React.createElement(
|
|
1289
|
+
}), isSecretInputFieldVisible && /*#__PURE__*/React.createElement("div", {
|
|
1290
|
+
className: "flex items-center justify-between space-x-3"
|
|
1291
|
+
}, /*#__PURE__*/React.createElement(Input, {
|
|
1198
1292
|
"data-cy": "secret-key-input-field",
|
|
1199
1293
|
name: "secret",
|
|
1200
|
-
placeholder: t("neetoWebhooks.webhook.secretPlaceholder"),
|
|
1201
1294
|
label: /*#__PURE__*/React.createElement(Trans, {
|
|
1202
1295
|
i18nKey: "neetoWebhooks.webhook.secret",
|
|
1203
1296
|
components: {
|
|
1204
1297
|
helpLink: /*#__PURE__*/React.createElement("a", {
|
|
1205
|
-
href:
|
|
1298
|
+
href: WEBHOOK_SECRETS_HELP_URL,
|
|
1206
1299
|
rel: "noreferrer",
|
|
1207
1300
|
target: "_blank"
|
|
1208
1301
|
}),
|
|
@@ -1211,10 +1304,37 @@ var AddWebhookPane = function AddWebhookPane(_ref) {
|
|
|
1211
1304
|
size: 20
|
|
1212
1305
|
})
|
|
1213
1306
|
}
|
|
1214
|
-
})
|
|
1215
|
-
|
|
1307
|
+
}),
|
|
1308
|
+
placeholder: t("neetoWebhooks.webhook.secretPlaceholder")
|
|
1309
|
+
}), /*#__PURE__*/React.createElement("div", {
|
|
1310
|
+
className: "mt-6"
|
|
1311
|
+
}, /*#__PURE__*/React.createElement(MoreDropdown, {
|
|
1312
|
+
menuItems: [{
|
|
1313
|
+
key: "regenerate-secret",
|
|
1314
|
+
label: t("neetoWebhooks.buttons.regenerate"),
|
|
1315
|
+
"data-cy": "regenerate-secret",
|
|
1316
|
+
onClick: function onClick() {
|
|
1317
|
+
return handleRegenerate(setFieldValue);
|
|
1318
|
+
}
|
|
1319
|
+
}, {
|
|
1320
|
+
key: "delete-secret",
|
|
1321
|
+
label: t("neetoWebhooks.buttons.delete"),
|
|
1322
|
+
"data-cy": "delete-secret",
|
|
1323
|
+
onClick: function onClick() {
|
|
1324
|
+
return handleDelete(setFieldValue);
|
|
1325
|
+
}
|
|
1326
|
+
}]
|
|
1327
|
+
}))), /*#__PURE__*/React.createElement(Switch, {
|
|
1216
1328
|
label: t("neetoWebhooks.webhook.active"),
|
|
1217
1329
|
name: "isActive"
|
|
1330
|
+
}), !isSecretInputFieldVisible && /*#__PURE__*/React.createElement(Button, {
|
|
1331
|
+
"data-cy": "add-secret-key",
|
|
1332
|
+
icon: Plus,
|
|
1333
|
+
label: t("neetoWebhooks.buttons.addSecretKey"),
|
|
1334
|
+
style: "text",
|
|
1335
|
+
onClick: function onClick() {
|
|
1336
|
+
return handleClick(setFieldValue);
|
|
1337
|
+
}
|
|
1218
1338
|
}))), /*#__PURE__*/React.createElement(Pane.Footer, {
|
|
1219
1339
|
className: "flex gap-2"
|
|
1220
1340
|
}, /*#__PURE__*/React.createElement(ActionBlock, {
|