cozy-harvest-lib 7.2.4 → 7.3.2

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 CHANGED
@@ -3,6 +3,41 @@
3
3
  All notable changes to this project will be documented in this file.
4
4
  See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
5
5
 
6
+ ## [7.3.2](https://github.com/cozy/cozy-libs/compare/cozy-harvest-lib@7.3.1...cozy-harvest-lib@7.3.2) (2022-03-01)
7
+
8
+ **Note:** Version bump only for package cozy-harvest-lib
9
+
10
+
11
+
12
+
13
+
14
+ ## [7.3.1](https://github.com/cozy/cozy-libs/compare/cozy-harvest-lib@7.3.0...cozy-harvest-lib@7.3.1) (2022-02-23)
15
+
16
+
17
+ ### Bug Fixes
18
+
19
+ * **Harvest:** Launch Banking Konnector in manual mode ([082b53d](https://github.com/cozy/cozy-libs/commit/082b53d5048cd5841977422ba298a472ca538a8f))
20
+
21
+
22
+
23
+
24
+
25
+ # [7.3.0](https://github.com/cozy/cozy-libs/compare/cozy-harvest-lib@7.2.4...cozy-harvest-lib@7.3.0) (2022-02-18)
26
+
27
+
28
+ ### Bug Fixes
29
+
30
+ * **deps:** pin dependencies ([e53d065](https://github.com/cozy/cozy-libs/commit/e53d065090224ea340b2c25c3afd14f223f4d119))
31
+
32
+
33
+ ### Features
34
+
35
+ * Do not allow multiple accounts with same BI connection ID ([55b5f23](https://github.com/cozy/cozy-libs/commit/55b5f23f0adbc308c3b70fa287c3938ee1b0a4cc))
36
+
37
+
38
+
39
+
40
+
6
41
  ## [7.2.4](https://github.com/cozy/cozy-libs/compare/cozy-harvest-lib@7.2.3...cozy-harvest-lib@7.2.4) (2022-02-15)
7
42
 
8
43
 
@@ -36,7 +36,8 @@ var TERMS_VERSION_MISMATCH = 'TERMS_VERSION_MISMATCH';
36
36
  var UNKNOWN_ERROR = 'UNKNOWN_ERROR';
37
37
  var USER_ACTION_NEEDED = 'USER_ACTION_NEEDED';
38
38
  var VENDOR_DOWN = 'VENDOR_DOWN';
39
- var KNOWN_ERRORS = [CHALLENGE_ASKED, DISK_QUOTA_EXCEEDED, LOGIN_FAILED, MAINTENANCE, NOT_EXISTING_DIRECTORY, TERMS_VERSION_MISMATCH, USER_ACTION_NEEDED, VENDOR_DOWN];
39
+ var ACCOUNT_WITH_SAME_IDENTIFIER_ALREADY_DEFINED = 'ACCOUNT_WITH_SAME_IDENTIFIER_ALREADY_DEFINED';
40
+ var KNOWN_ERRORS = [CHALLENGE_ASKED, DISK_QUOTA_EXCEEDED, LOGIN_FAILED, MAINTENANCE, NOT_EXISTING_DIRECTORY, TERMS_VERSION_MISMATCH, USER_ACTION_NEEDED, VENDOR_DOWN, ACCOUNT_WITH_SAME_IDENTIFIER_ALREADY_DEFINED];
40
41
  var USER_ERRORS = [CHALLENGE_ASKED, DISK_QUOTA_EXCEEDED, LOGIN_FAILED, NOT_EXISTING_DIRECTORY, USER_ACTION_NEEDED];
41
42
  var sanitizeAccountIdentifierRx = /\//g;
42
43
  /**
@@ -204,6 +204,10 @@
204
204
  "VENDOR_DOWN.LINXO_DOWN": {
205
205
  "title": "Unavailable service",
206
206
  "description": "It seems that we are experiencing overload with our bank konnectors at the moment. Please rerun the connector later."
207
+ },
208
+ "ACCOUNT_WITH_SAME_IDENTIFIER_ALREADY_DEFINED": {
209
+ "title": "This account already exists",
210
+ "description": "You already have configured an account with these identifiers."
207
211
  }
208
212
  }
209
213
  },
@@ -204,6 +204,10 @@
204
204
  "VENDOR_DOWN.LINXO_DOWN": {
205
205
  "title": "Service non disponible",
206
206
  "description": "Il semble que le service [%{name}](%{link}) ne nous ait pas répondu dans les temps. Vous pouvez tenter de le relancer manuellement maintenant ou ultérieurement."
207
+ },
208
+ "ACCOUNT_WITH_SAME_IDENTIFIER_ALREADY_DEFINED": {
209
+ "title": "Ce compte est déjà configuré",
210
+ "description": "Vous avez déjà configuré un compte avec ces identifiants."
207
211
  }
208
212
  }
209
213
  },
@@ -1,3 +1,4 @@
1
+ import _slicedToArray from "@babel/runtime/helpers/slicedToArray";
1
2
  import _defineProperty from "@babel/runtime/helpers/defineProperty";
2
3
  import _objectWithoutProperties from "@babel/runtime/helpers/objectWithoutProperties";
3
4
  import _asyncToGenerator from "@babel/runtime/helpers/asyncToGenerator";
@@ -23,7 +24,9 @@ import get from 'lodash/get';
23
24
  import omit from 'lodash/omit';
24
25
  import clone from 'lodash/clone';
25
26
  import set from 'lodash/set';
27
+ import keyBy from 'lodash/keyBy';
26
28
  import defaults from 'lodash/defaults';
29
+ import { Q } from 'cozy-client';
27
30
  import { waitForRealtimeEvent } from './jobUtils';
28
31
  import { getBIConnection, createBIConnection, updateBIConnection, getBIUserConfig, updateBIUserConfig, setBIConnectionSyncStatus } from './bi-http';
29
32
  import assert from '../assert';
@@ -51,7 +54,8 @@ var getBIIdFromContract = function getBIIdFromContract(bankAccount) {
51
54
 
52
55
 
53
56
  var extraBIErrorMap = {
54
- config: 'LOGIN_FAILED'
57
+ config: 'LOGIN_FAILED',
58
+ ACCOUNT_WITH_SAME_IDENTIFIER_ALREADY_DEFINED: 'ACCOUNT_WITH_SAME_IDENTIFIER_ALREADY_DEFINED'
55
59
  };
56
60
  /**
57
61
  * Converts and chains error
@@ -89,7 +93,7 @@ var createTemporaryToken = /*#__PURE__*/function () {
89
93
  mode: 'getTemporaryToken',
90
94
  konnector: konnector.slug,
91
95
  bankId: cozyBankId
92
- });
96
+ }, {}, true);
93
97
 
94
98
  case 6:
95
99
  jobResponse = _context.sent;
@@ -144,7 +148,7 @@ export var getBIConfig = function getBIConfig(flow) {
144
148
 
145
149
  export var createOrUpdateBIConnection = /*#__PURE__*/function () {
146
150
  var _ref4 = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee2(_ref3) {
147
- var account, client, konnector, flow, connId, biConfig, tempToken, config, credentials, credsToSend, biConnection, connection;
151
+ var account, client, konnector, flow, connId, biConfig, tempToken, config, credentials, credsToSend, biConnection, isUpdate, connection, sameAccount, err;
148
152
  return _regeneratorRuntime.wrap(function _callee2$(_context2) {
149
153
  while (1) {
150
154
  switch (_context2.prev = _context2.next) {
@@ -212,25 +216,52 @@ export var createOrUpdateBIConnection = /*#__PURE__*/function () {
212
216
 
213
217
  case 31:
214
218
  logger.info('Creating or updating connection...');
215
- _context2.next = 34;
216
- return connId ? updateBIConnection(config, connId, credsToSend, tempToken) : createBIConnection(config, credsToSend, tempToken);
219
+ isUpdate = Boolean(connId);
220
+ _context2.next = 35;
221
+ return isUpdate ? updateBIConnection(config, connId, credsToSend, tempToken) : createBIConnection(config, credsToSend, tempToken);
217
222
 
218
- case 34:
223
+ case 35:
219
224
  connection = _context2.sent;
225
+
226
+ if (isUpdate) {
227
+ _context2.next = 44;
228
+ break;
229
+ }
230
+
231
+ _context2.next = 39;
232
+ return findAccountWithBiConnection({
233
+ client: client,
234
+ konnector: konnector,
235
+ connectionId: connection.id
236
+ });
237
+
238
+ case 39:
239
+ sameAccount = _context2.sent;
240
+
241
+ if (!sameAccount) {
242
+ _context2.next = 44;
243
+ break;
244
+ }
245
+
246
+ err = new KonnectorJobError('ACCOUNT_WITH_SAME_IDENTIFIER_ALREADY_DEFINED');
247
+ err.accountId = sameAccount._id;
248
+ throw err;
249
+
250
+ case 44:
220
251
  logger.info("Created or updated connection ".concat(connection.id));
221
252
  return _context2.abrupt("return", connection);
222
253
 
223
- case 39:
224
- _context2.prev = 39;
254
+ case 48:
255
+ _context2.prev = 48;
225
256
  _context2.t1 = _context2["catch"](15);
226
257
  return _context2.abrupt("return", convertBIErrortoKonnectorJobError(_context2.t1));
227
258
 
228
- case 42:
259
+ case 51:
229
260
  case "end":
230
261
  return _context2.stop();
231
262
  }
232
263
  }
233
- }, _callee2, null, [[15, 39], [17, 27]]);
264
+ }, _callee2, null, [[15, 48], [17, 27]]);
234
265
  }));
235
266
 
236
267
  return function createOrUpdateBIConnection(_x2) {
@@ -761,7 +792,64 @@ export var fetchExtraOAuthUrlParams = /*#__PURE__*/function () {
761
792
  var shouldResumeConnection = function shouldResumeConnection(error) {
762
793
  return error === DECOUPLED_ERROR || error === ADDITIONAL_INFORMATION_NEEDED_ERROR;
763
794
  };
795
+ /**
796
+ * Tries to find an existing account, associated to an existing trigger
797
+ * with the given bi connection id
798
+ *
799
+ * @param {CozyClient} options.client - Cozy client
800
+ * @param {Object} options.konnector - Konnector manifest
801
+ * @param {Integer} options.connectionId - BI connection id
802
+ * @return {Account|null} An account with a trigger with the same identifier if any
803
+ */
804
+
805
+
806
+ export var findAccountWithBiConnection = /*#__PURE__*/function () {
807
+ var _ref22 = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee11(_ref21) {
808
+ var client, konnector, connectionId, _yield$Promise$all, _yield$Promise$all2, accountsResult, triggersResult, accountsIndex, trigger;
809
+
810
+ return _regeneratorRuntime.wrap(function _callee11$(_context11) {
811
+ while (1) {
812
+ switch (_context11.prev = _context11.next) {
813
+ case 0:
814
+ client = _ref21.client, konnector = _ref21.konnector, connectionId = _ref21.connectionId;
815
+ _context11.next = 3;
816
+ return Promise.all([client.query(Q('io.cozy.accounts').where({
817
+ data: {
818
+ auth: {
819
+ bi: {
820
+ connId: connectionId
821
+ }
822
+ }
823
+ }
824
+ }).indexFields(['data.auth.bi.connId'])), client.query(Q('io.cozy.triggers').where({
825
+ message: {
826
+ konnector: konnector.slug
827
+ }
828
+ }).indexFields(['message.konnector']))]);
829
+
830
+ case 3:
831
+ _yield$Promise$all = _context11.sent;
832
+ _yield$Promise$all2 = _slicedToArray(_yield$Promise$all, 2);
833
+ accountsResult = _yield$Promise$all2[0];
834
+ triggersResult = _yield$Promise$all2[1];
835
+ accountsIndex = keyBy(accountsResult.data, '_id');
836
+ trigger = triggersResult.data.find(function (t) {
837
+ return accountsIndex[get(t, 'message.account')];
838
+ });
839
+ return _context11.abrupt("return", trigger ? accountsIndex[trigger.message.account] : null);
764
840
 
841
+ case 10:
842
+ case "end":
843
+ return _context11.stop();
844
+ }
845
+ }
846
+ }, _callee11);
847
+ }));
848
+
849
+ return function findAccountWithBiConnection(_x12) {
850
+ return _ref22.apply(this, arguments);
851
+ };
852
+ }();
765
853
  export var konnectorPolicy = {
766
854
  name: 'budget-insight',
767
855
  match: isBudgetInsightConnector,
@@ -772,5 +860,6 @@ export var konnectorPolicy = {
772
860
  fetchExtraOAuthUrlParams: fetchExtraOAuthUrlParams,
773
861
  getAdditionalInformationNeeded: getAdditionalInformationNeeded,
774
862
  handleOAuthAccount: handleOAuthAccount,
775
- setSync: setSync
863
+ setSync: setSync,
864
+ findAccountWithBiConnection: findAccountWithBiConnection
776
865
  };