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 +35 -0
- package/dist/helpers/konnectors.js +2 -1
- package/dist/locales/en.json +4 -0
- package/dist/locales/fr.json +4 -0
- package/dist/services/budget-insight.js +100 -11
- package/dist/services/budget-insight.spec.js +317 -102
- package/package.json +18 -18
- package/src/helpers/konnectors.js +4 -1
- package/src/locales/en.json +4 -0
- package/src/locales/fr.json +4 -0
- package/src/services/budget-insight.js +72 -8
- package/src/services/budget-insight.spec.js +122 -0
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
|
|
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
|
/**
|
package/dist/locales/en.json
CHANGED
|
@@ -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
|
},
|
package/dist/locales/fr.json
CHANGED
|
@@ -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
|
-
|
|
216
|
-
|
|
219
|
+
isUpdate = Boolean(connId);
|
|
220
|
+
_context2.next = 35;
|
|
221
|
+
return isUpdate ? updateBIConnection(config, connId, credsToSend, tempToken) : createBIConnection(config, credsToSend, tempToken);
|
|
217
222
|
|
|
218
|
-
case
|
|
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
|
|
224
|
-
_context2.prev =
|
|
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
|
|
259
|
+
case 51:
|
|
229
260
|
case "end":
|
|
230
261
|
return _context2.stop();
|
|
231
262
|
}
|
|
232
263
|
}
|
|
233
|
-
}, _callee2, null, [[15,
|
|
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
|
};
|