@docknetwork/wallet-sdk-relay-service 1.5.11 → 1.7.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/lib/index.js CHANGED
@@ -24,7 +24,6 @@ function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'defau
24
24
 
25
25
  var assert__default = /*#__PURE__*/_interopDefaultLegacy(assert);
26
26
  var axios__default = /*#__PURE__*/_interopDefaultLegacy(axios);
27
- var jwtDecode__default = /*#__PURE__*/_interopDefaultLegacy(jwtDecode);
28
27
 
29
28
  var serviceURL = process.env.RELAY_SERVICE_URL || 'https://relay.truvera.io';
30
29
  var didcomm = {
@@ -33,7 +32,8 @@ var didcomm = {
33
32
  };
34
33
  var sendMessage = /*#__PURE__*/function () {
35
34
  var _ref2 = _rollupPluginBabelHelpers._asyncToGenerator( /*#__PURE__*/_rollupPluginBabelHelpers._regeneratorRuntime().mark(function _callee(_ref) {
36
- var keyPairDoc, recipientDid, message, type, keyAgreementKey, jweMessage, _yield$generateSigned, payload, did, result;
35
+ var _didDocument$service;
36
+ var keyPairDoc, recipientDid, message, type, keyAgreementKey, jweMessage, didDocument, services, serviceEndpoints, _iterator, _step, endpoint, _result2, _yield$generateSigned, payload, did, result;
37
37
  return _rollupPluginBabelHelpers._regeneratorRuntime().wrap(function _callee$(_context) {
38
38
  while (1) switch (_context.prev = _context.next) {
39
39
  case 0:
@@ -56,32 +56,95 @@ var sendMessage = /*#__PURE__*/function () {
56
56
  case 9:
57
57
  jweMessage = _context.sent;
58
58
  _context.next = 12;
59
+ return service.blockchainService.resolveDID(recipientDid);
60
+ case 12:
61
+ didDocument = _context.sent;
62
+ services = (didDocument === null || didDocument === void 0 || (_didDocument$service = didDocument.service) === null || _didDocument$service === void 0 ? void 0 : _didDocument$service.filter(function (endpoint) {
63
+ return endpoint.type === 'DIDCommMessaging';
64
+ })) || [];
65
+ serviceEndpoints = services.flatMap(function (service) {
66
+ if (!service.serviceEndpoint) {
67
+ return [];
68
+ }
69
+ if (!Array.isArray(service.serviceEndpoint)) {
70
+ return [service.serviceEndpoint];
71
+ }
72
+ return service.serviceEndpoint;
73
+ }).filter(function (endpoint) {
74
+ var _endpoint$accept;
75
+ return (_endpoint$accept = endpoint.accept) === null || _endpoint$accept === void 0 ? void 0 : _endpoint$accept.includes('didcomm/v2');
76
+ }); // Try each endpoint until one is successful
77
+ _iterator = _rollupPluginBabelHelpers._createForOfIteratorHelper(serviceEndpoints);
78
+ _context.prev = 16;
79
+ _iterator.s();
80
+ case 18:
81
+ if ((_step = _iterator.n()).done) {
82
+ _context.next = 32;
83
+ break;
84
+ }
85
+ endpoint = _step.value;
86
+ _context.prev = 20;
87
+ _context.next = 23;
88
+ return axios__default["default"].post(endpoint.uri, jweMessage, {
89
+ headers: {
90
+ 'Content-Type': 'application/didcomm-encrypted+json',
91
+ Accept: 'application/didcomm-encrypted+json'
92
+ }
93
+ });
94
+ case 23:
95
+ _result2 = _context.sent;
96
+ return _context.abrupt("return", {
97
+ success: _result2.data.status === 'received',
98
+ endpoint: endpoint.uri
99
+ });
100
+ case 27:
101
+ _context.prev = 27;
102
+ _context.t0 = _context["catch"](20);
103
+ console.error("Failed to send message to ".concat(endpoint.uri, ":"), _context.t0.response || _context.t0.message);
104
+ case 30:
105
+ _context.next = 18;
106
+ break;
107
+ case 32:
108
+ _context.next = 37;
109
+ break;
110
+ case 34:
111
+ _context.prev = 34;
112
+ _context.t1 = _context["catch"](16);
113
+ _iterator.e(_context.t1);
114
+ case 37:
115
+ _context.prev = 37;
116
+ _iterator.f();
117
+ return _context.finish(37);
118
+ case 40:
119
+ _context.next = 42;
59
120
  return payloads.generateSignedPayload(keyPairDoc, {
60
121
  to: recipientDid,
61
122
  msg: payloads.toBase64(jweMessage)
62
123
  });
63
- case 12:
124
+ case 42:
64
125
  _yield$generateSigned = _context.sent;
65
126
  payload = _yield$generateSigned.payload;
66
127
  did = _yield$generateSigned.did;
67
- _context.prev = 15;
68
- _context.next = 18;
128
+ _context.prev = 45;
129
+ _context.next = 48;
69
130
  return axios__default["default"].post("".concat(serviceURL, "/messages/").concat(encodeURIComponent(did)), {
70
131
  payload: payloads.toBase64(payload)
71
132
  });
72
- case 18:
133
+ case 48:
73
134
  result = _context.sent;
74
- return _context.abrupt("return", result.data);
75
- case 22:
76
- _context.prev = 22;
77
- _context.t0 = _context["catch"](15);
78
- console.error(_context.t0.response);
79
- return _context.abrupt("return", _context.t0);
80
- case 26:
135
+ return _context.abrupt("return", {
136
+ success: result.data.success
137
+ });
138
+ case 52:
139
+ _context.prev = 52;
140
+ _context.t2 = _context["catch"](45);
141
+ console.error(_context.t2.response);
142
+ throw _context.t2;
143
+ case 56:
81
144
  case "end":
82
145
  return _context.stop();
83
146
  }
84
- }, _callee, null, [[15, 22]]);
147
+ }, _callee, null, [[16, 34, 37, 40], [20, 27], [45, 52]]);
85
148
  }));
86
149
  return function sendMessage(_x) {
87
150
  return _ref2.apply(this, arguments);
@@ -228,7 +291,7 @@ function _jwtHandler() {
228
291
  case 0:
229
292
  _context5.prev = 0;
230
293
  _context5.next = 3;
231
- return jwtDecode__default["default"](message);
294
+ return jwtDecode.jwtDecode(message);
232
295
  case 3:
233
296
  jwt = _context5.sent;
234
297
  return _context5.abrupt("return", jwt);
@@ -300,21 +363,21 @@ function resolveJweString(_x8) {
300
363
  }
301
364
  function _resolveJweString() {
302
365
  _resolveJweString = _rollupPluginBabelHelpers._asyncToGenerator( /*#__PURE__*/_rollupPluginBabelHelpers._regeneratorRuntime().mark(function _callee8(message) {
303
- var resolvedMessage, _iterator, _step, handler, _result;
366
+ var resolvedMessage, _iterator2, _step2, handler, _result;
304
367
  return _rollupPluginBabelHelpers._regeneratorRuntime().wrap(function _callee8$(_context8) {
305
368
  while (1) switch (_context8.prev = _context8.next) {
306
369
  case 0:
307
370
  resolvedMessage = message;
308
371
  _context8.prev = 1;
309
- _iterator = _rollupPluginBabelHelpers._createForOfIteratorHelper(messageHandlers);
372
+ _iterator2 = _rollupPluginBabelHelpers._createForOfIteratorHelper(messageHandlers);
310
373
  _context8.prev = 3;
311
- _iterator.s();
374
+ _iterator2.s();
312
375
  case 5:
313
- if ((_step = _iterator.n()).done) {
376
+ if ((_step2 = _iterator2.n()).done) {
314
377
  _context8.next = 13;
315
378
  break;
316
379
  }
317
- handler = _step.value;
380
+ handler = _step2.value;
318
381
  _context8.next = 9;
319
382
  return handler(resolvedMessage);
320
383
  case 9:
@@ -331,10 +394,10 @@ function _resolveJweString() {
331
394
  case 15:
332
395
  _context8.prev = 15;
333
396
  _context8.t0 = _context8["catch"](3);
334
- _iterator.e(_context8.t0);
397
+ _iterator2.e(_context8.t0);
335
398
  case 18:
336
399
  _context8.prev = 18;
337
- _iterator.f();
400
+ _iterator2.f();
338
401
  return _context8.finish(18);
339
402
  case 21:
340
403
  _context8.next = 28;
package/lib/index.mjs CHANGED
@@ -4,7 +4,7 @@ import axios from 'axios';
4
4
  import { Logger } from '@docknetwork/wallet-sdk-wasm/lib/core/logger';
5
5
  import { didcommCreateEncrypted, didcommDecrypt, getDerivedAgreementKey, didcommCreateSignedJWT, DIDCOMM_TYPE_ISSUE_DIRECT } from './didcomm.mjs';
6
6
  import { toBase64, generateSignedPayload, generateSignedPayloadFromList, fromBase64 } from './payloads.mjs';
7
- import jwtDecode from 'jwt-decode';
7
+ import { jwtDecode } from 'jwt-decode';
8
8
  import { blockchainService } from '@docknetwork/wallet-sdk-wasm/lib/services/blockchain/service';
9
9
  import { utilCryptoService } from '@docknetwork/wallet-sdk-wasm/lib/services/util-crypto/service';
10
10
  import '@digitalbazaar/x25519-key-agreement-key-2020';
@@ -23,7 +23,8 @@ var didcomm = {
23
23
  };
24
24
  var sendMessage = /*#__PURE__*/function () {
25
25
  var _ref2 = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee(_ref) {
26
- var keyPairDoc, recipientDid, message, type, keyAgreementKey, jweMessage, _yield$generateSigned, payload, did, result;
26
+ var _didDocument$service;
27
+ var keyPairDoc, recipientDid, message, type, keyAgreementKey, jweMessage, didDocument, services, serviceEndpoints, _iterator, _step, endpoint, _result2, _yield$generateSigned, payload, did, result;
27
28
  return _regeneratorRuntime().wrap(function _callee$(_context) {
28
29
  while (1) switch (_context.prev = _context.next) {
29
30
  case 0:
@@ -46,32 +47,95 @@ var sendMessage = /*#__PURE__*/function () {
46
47
  case 9:
47
48
  jweMessage = _context.sent;
48
49
  _context.next = 12;
50
+ return blockchainService.resolveDID(recipientDid);
51
+ case 12:
52
+ didDocument = _context.sent;
53
+ services = (didDocument === null || didDocument === void 0 || (_didDocument$service = didDocument.service) === null || _didDocument$service === void 0 ? void 0 : _didDocument$service.filter(function (endpoint) {
54
+ return endpoint.type === 'DIDCommMessaging';
55
+ })) || [];
56
+ serviceEndpoints = services.flatMap(function (service) {
57
+ if (!service.serviceEndpoint) {
58
+ return [];
59
+ }
60
+ if (!Array.isArray(service.serviceEndpoint)) {
61
+ return [service.serviceEndpoint];
62
+ }
63
+ return service.serviceEndpoint;
64
+ }).filter(function (endpoint) {
65
+ var _endpoint$accept;
66
+ return (_endpoint$accept = endpoint.accept) === null || _endpoint$accept === void 0 ? void 0 : _endpoint$accept.includes('didcomm/v2');
67
+ }); // Try each endpoint until one is successful
68
+ _iterator = _createForOfIteratorHelper(serviceEndpoints);
69
+ _context.prev = 16;
70
+ _iterator.s();
71
+ case 18:
72
+ if ((_step = _iterator.n()).done) {
73
+ _context.next = 32;
74
+ break;
75
+ }
76
+ endpoint = _step.value;
77
+ _context.prev = 20;
78
+ _context.next = 23;
79
+ return axios.post(endpoint.uri, jweMessage, {
80
+ headers: {
81
+ 'Content-Type': 'application/didcomm-encrypted+json',
82
+ Accept: 'application/didcomm-encrypted+json'
83
+ }
84
+ });
85
+ case 23:
86
+ _result2 = _context.sent;
87
+ return _context.abrupt("return", {
88
+ success: _result2.data.status === 'received',
89
+ endpoint: endpoint.uri
90
+ });
91
+ case 27:
92
+ _context.prev = 27;
93
+ _context.t0 = _context["catch"](20);
94
+ console.error("Failed to send message to ".concat(endpoint.uri, ":"), _context.t0.response || _context.t0.message);
95
+ case 30:
96
+ _context.next = 18;
97
+ break;
98
+ case 32:
99
+ _context.next = 37;
100
+ break;
101
+ case 34:
102
+ _context.prev = 34;
103
+ _context.t1 = _context["catch"](16);
104
+ _iterator.e(_context.t1);
105
+ case 37:
106
+ _context.prev = 37;
107
+ _iterator.f();
108
+ return _context.finish(37);
109
+ case 40:
110
+ _context.next = 42;
49
111
  return generateSignedPayload(keyPairDoc, {
50
112
  to: recipientDid,
51
113
  msg: toBase64(jweMessage)
52
114
  });
53
- case 12:
115
+ case 42:
54
116
  _yield$generateSigned = _context.sent;
55
117
  payload = _yield$generateSigned.payload;
56
118
  did = _yield$generateSigned.did;
57
- _context.prev = 15;
58
- _context.next = 18;
119
+ _context.prev = 45;
120
+ _context.next = 48;
59
121
  return axios.post("".concat(serviceURL, "/messages/").concat(encodeURIComponent(did)), {
60
122
  payload: toBase64(payload)
61
123
  });
62
- case 18:
124
+ case 48:
63
125
  result = _context.sent;
64
- return _context.abrupt("return", result.data);
65
- case 22:
66
- _context.prev = 22;
67
- _context.t0 = _context["catch"](15);
68
- console.error(_context.t0.response);
69
- return _context.abrupt("return", _context.t0);
70
- case 26:
126
+ return _context.abrupt("return", {
127
+ success: result.data.success
128
+ });
129
+ case 52:
130
+ _context.prev = 52;
131
+ _context.t2 = _context["catch"](45);
132
+ console.error(_context.t2.response);
133
+ throw _context.t2;
134
+ case 56:
71
135
  case "end":
72
136
  return _context.stop();
73
137
  }
74
- }, _callee, null, [[15, 22]]);
138
+ }, _callee, null, [[16, 34, 37, 40], [20, 27], [45, 52]]);
75
139
  }));
76
140
  return function sendMessage(_x) {
77
141
  return _ref2.apply(this, arguments);
@@ -290,21 +354,21 @@ function resolveJweString(_x8) {
290
354
  }
291
355
  function _resolveJweString() {
292
356
  _resolveJweString = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee8(message) {
293
- var resolvedMessage, _iterator, _step, handler, _result;
357
+ var resolvedMessage, _iterator2, _step2, handler, _result;
294
358
  return _regeneratorRuntime().wrap(function _callee8$(_context8) {
295
359
  while (1) switch (_context8.prev = _context8.next) {
296
360
  case 0:
297
361
  resolvedMessage = message;
298
362
  _context8.prev = 1;
299
- _iterator = _createForOfIteratorHelper(messageHandlers);
363
+ _iterator2 = _createForOfIteratorHelper(messageHandlers);
300
364
  _context8.prev = 3;
301
- _iterator.s();
365
+ _iterator2.s();
302
366
  case 5:
303
- if ((_step = _iterator.n()).done) {
367
+ if ((_step2 = _iterator2.n()).done) {
304
368
  _context8.next = 13;
305
369
  break;
306
370
  }
307
- handler = _step.value;
371
+ handler = _step2.value;
308
372
  _context8.next = 9;
309
373
  return handler(resolvedMessage);
310
374
  case 9:
@@ -321,10 +385,10 @@ function _resolveJweString() {
321
385
  case 15:
322
386
  _context8.prev = 15;
323
387
  _context8.t0 = _context8["catch"](3);
324
- _iterator.e(_context8.t0);
388
+ _iterator2.e(_context8.t0);
325
389
  case 18:
326
390
  _context8.prev = 18;
327
- _iterator.f();
391
+ _iterator2.f();
328
392
  return _context8.finish(18);
329
393
  case 21:
330
394
  _context8.next = 28;
package/package.json CHANGED
@@ -1,10 +1,10 @@
1
1
  {
2
2
  "name": "@docknetwork/wallet-sdk-relay-service",
3
- "version": "1.5.11",
4
- "license": "https://github.com/docknetwork/react-native-sdk/LICENSE",
3
+ "version": "1.7.0",
4
+ "license": "https://github.com/docknetwork/wallet-sdk/LICENSE",
5
5
  "repository": {
6
6
  "type": "git",
7
- "url": "git+https://github.com/docknetwork/react-native-sdk.git",
7
+ "url": "git+https://github.com/docknetwork/wallet-sdk.git",
8
8
  "directory": "packages/relay-service"
9
9
  },
10
10
  "scripts": {
@@ -13,7 +13,7 @@
13
13
  "dependencies": {
14
14
  "uuid": "^9.0.0",
15
15
  "@docknetwork/minimal-cipher": "^5.2.1",
16
- "@docknetwork/wallet-sdk-wasm": "^1.5.11"
16
+ "@docknetwork/wallet-sdk-wasm": "^1.7.0"
17
17
  },
18
18
  "devDependencies": {
19
19
  "jest": "29.1.0",
package/src/index.js CHANGED
@@ -14,7 +14,7 @@ import {
14
14
  generateSignedPayloadFromList,
15
15
  toBase64,
16
16
  } from './payloads';
17
- import jwtDecode from 'jwt-decode';
17
+ import {jwtDecode} from 'jwt-decode';
18
18
  import {blockchainService} from '@docknetwork/wallet-sdk-wasm/src/services/blockchain/service';
19
19
  import {utilCryptoService} from '@docknetwork/wallet-sdk-wasm/src/services/util-crypto/service';
20
20
 
@@ -39,6 +39,48 @@ const sendMessage = async ({keyPairDoc, recipientDid, message, type}) => {
39
39
  keyAgreementKey,
40
40
  });
41
41
 
42
+ const didDocument = await blockchainService.resolveDID(recipientDid);
43
+ const services =
44
+ didDocument?.service?.filter(
45
+ endpoint => endpoint.type === 'DIDCommMessaging',
46
+ ) || [];
47
+
48
+ const serviceEndpoints = services
49
+ .flatMap(service => {
50
+ if (!service.serviceEndpoint) {
51
+ return [];
52
+ }
53
+
54
+ if (!Array.isArray(service.serviceEndpoint)) {
55
+ return [service.serviceEndpoint];
56
+ }
57
+
58
+ return service.serviceEndpoint;
59
+ })
60
+ .filter(endpoint => endpoint.accept?.includes('didcomm/v2'));
61
+
62
+ // Try each endpoint until one is successful
63
+ for (const endpoint of serviceEndpoints) {
64
+ try {
65
+ const result = await axios.post(endpoint.uri, jweMessage, {
66
+ headers: {
67
+ 'Content-Type': 'application/didcomm-encrypted+json',
68
+ Accept: 'application/didcomm-encrypted+json',
69
+ },
70
+ });
71
+
72
+ return {
73
+ success: result.data.status === 'received',
74
+ endpoint: endpoint.uri,
75
+ };
76
+ } catch (err) {
77
+ console.error(
78
+ `Failed to send message to ${endpoint.uri}:`,
79
+ err.response || err.message,
80
+ );
81
+ }
82
+ }
83
+
42
84
  const {payload, did} = await generateSignedPayload(keyPairDoc, {
43
85
  to: recipientDid,
44
86
  msg: toBase64(jweMessage),
@@ -52,10 +94,12 @@ const sendMessage = async ({keyPairDoc, recipientDid, message, type}) => {
52
94
  },
53
95
  );
54
96
 
55
- return result.data;
97
+ return {
98
+ success: result.data.success,
99
+ };
56
100
  } catch (err) {
57
101
  console.error(err.response);
58
- return err;
102
+ throw err;
59
103
  }
60
104
  };
61
105
 
@@ -4,11 +4,15 @@ import {generateSignedPayload, toBase64} from '../src/payloads';
4
4
  import {ALICE_KEY_PAIR_DOC, BOB_KEY_PAIR_DOC} from './mock-data';
5
5
  import {didcommCreateEncrypted} from '../src/didcomm';
6
6
  import {getDerivedAgreementKey} from '../src/didcomm';
7
+ import {blockchainService} from '@docknetwork/wallet-sdk-wasm/src/services/blockchain';
7
8
 
8
9
  describe('Relay service', () => {
9
10
  beforeEach(() => {
10
11
  jest.spyOn(didcomm, 'encrypt').mockImplementationOnce(msg => msg);
11
12
  jest.spyOn(didcomm, 'decrypt').mockImplementationOnce(msg => msg);
13
+ jest
14
+ .spyOn(blockchainService, 'resolveDID')
15
+ .mockImplementationOnce(msg => msg);
12
16
  });
13
17
 
14
18
  describe('generateSignedPayload', () => {
@@ -172,13 +176,6 @@ describe('Relay service', () => {
172
176
  data: jwtMessage,
173
177
  });
174
178
 
175
- // Mock the JWT decode functionality to return an object with credentials
176
- jest.spyOn(require('jwt-decode'), 'default').mockImplementation(() => ({
177
- payload: {
178
- credentials: [{id: 'test-credential'}],
179
- },
180
- }));
181
-
182
179
  const result = await RelayService.resolveDidcommMessage({
183
180
  message: `didcomm://${messageURL}`,
184
181
  keyPairDocs: [BOB_KEY_PAIR_DOC],