@docknetwork/wallet-sdk-relay-service 0.4.22 → 1.4.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/_rollupPluginBabelHelpers-4923c894.js +464 -0
- package/lib/_rollupPluginBabelHelpers-78739aa5.js +458 -0
- package/lib/did/dids.js +45 -0
- package/lib/did/dids.mjs +41 -0
- package/lib/didcomm.js +639 -0
- package/lib/didcomm.mjs +588 -0
- package/lib/index.js +492 -0
- package/lib/index.mjs +480 -0
- package/lib/payloads.js +146 -0
- package/lib/payloads.mjs +132 -0
- package/package.json +2 -2
- package/src/didcomm.js +43 -17
- package/tests/relay-service.e2e.test.js +2 -2
- package/src/did/did-resolver.js +0 -35
package/lib/index.mjs
ADDED
|
@@ -0,0 +1,480 @@
|
|
|
1
|
+
import { _ as _asyncToGenerator, a as _regeneratorRuntime, d as _createForOfIteratorHelper, c as _objectSpread2 } from './_rollupPluginBabelHelpers-78739aa5.js';
|
|
2
|
+
import { isBase64 } from '@polkadot/util-crypto';
|
|
3
|
+
import assert from 'assert';
|
|
4
|
+
import axios from 'axios';
|
|
5
|
+
import { Logger } from '@docknetwork/wallet-sdk-wasm/lib/core/logger';
|
|
6
|
+
import { didcommCreateEncrypted, didcommDecrypt, getDerivedAgreementKey, didcommCreateSignedJWT, DIDCOMM_TYPE_ISSUE_DIRECT } from './didcomm.mjs';
|
|
7
|
+
import { toBase64, generateSignedPayload, generateSignedPayloadFromList, fromBase64 } from './payloads.mjs';
|
|
8
|
+
import jwtDecode from 'jwt-decode';
|
|
9
|
+
import { dockService } from '@docknetwork/wallet-sdk-wasm/lib/services/dock/service';
|
|
10
|
+
import '@digitalbazaar/x25519-key-agreement-key-2020';
|
|
11
|
+
import '@digitalbazaar/ed25519-verification-key-2020';
|
|
12
|
+
import '@docknetwork/minimal-cipher';
|
|
13
|
+
import 'uuid';
|
|
14
|
+
import 'base64url';
|
|
15
|
+
import 'base58-universal';
|
|
16
|
+
import './did/dids.mjs';
|
|
17
|
+
import '@docknetwork/sdk/utils/did';
|
|
18
|
+
import '@docknetwork/sdk/verifiable-credential';
|
|
19
|
+
import '@docknetwork/sdk/utils/vc/helpers';
|
|
20
|
+
import '@docknetwork/universal-wallet/methods/keypairs';
|
|
21
|
+
|
|
22
|
+
var serviceURL = process.env.RELAY_SERVICE_URL || 'https://relay.dock.io';
|
|
23
|
+
var didcomm = {
|
|
24
|
+
encrypt: didcommCreateEncrypted,
|
|
25
|
+
decrypt: didcommDecrypt
|
|
26
|
+
};
|
|
27
|
+
var sendMessage = /*#__PURE__*/function () {
|
|
28
|
+
var _ref2 = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee(_ref) {
|
|
29
|
+
var keyPairDoc, recipientDid, message, type, keyAgreementKey, jweMessage, _yield$generateSigned, payload, did, result;
|
|
30
|
+
return _regeneratorRuntime().wrap(function _callee$(_context) {
|
|
31
|
+
while (1) switch (_context.prev = _context.next) {
|
|
32
|
+
case 0:
|
|
33
|
+
keyPairDoc = _ref.keyPairDoc, recipientDid = _ref.recipientDid, message = _ref.message, type = _ref.type;
|
|
34
|
+
assert(!!keyPairDoc, 'keyPairDoc is required');
|
|
35
|
+
assert(!!recipientDid, 'recipientDid is required');
|
|
36
|
+
assert(!!message, 'message is required');
|
|
37
|
+
_context.next = 6;
|
|
38
|
+
return getDerivedAgreementKey(keyPairDoc);
|
|
39
|
+
case 6:
|
|
40
|
+
keyAgreementKey = _context.sent;
|
|
41
|
+
_context.next = 9;
|
|
42
|
+
return didcomm.encrypt({
|
|
43
|
+
recipientDids: [recipientDid],
|
|
44
|
+
type: type || DIDCOMM_TYPE_ISSUE_DIRECT,
|
|
45
|
+
senderDid: keyPairDoc.controller,
|
|
46
|
+
payload: message,
|
|
47
|
+
keyAgreementKey: keyAgreementKey
|
|
48
|
+
});
|
|
49
|
+
case 9:
|
|
50
|
+
jweMessage = _context.sent;
|
|
51
|
+
_context.next = 12;
|
|
52
|
+
return generateSignedPayload(keyPairDoc, {
|
|
53
|
+
to: recipientDid,
|
|
54
|
+
msg: toBase64(jweMessage)
|
|
55
|
+
});
|
|
56
|
+
case 12:
|
|
57
|
+
_yield$generateSigned = _context.sent;
|
|
58
|
+
payload = _yield$generateSigned.payload;
|
|
59
|
+
did = _yield$generateSigned.did;
|
|
60
|
+
_context.prev = 15;
|
|
61
|
+
_context.next = 18;
|
|
62
|
+
return axios.post("".concat(serviceURL, "/messages/").concat(encodeURIComponent(did)), {
|
|
63
|
+
payload: toBase64(payload)
|
|
64
|
+
});
|
|
65
|
+
case 18:
|
|
66
|
+
result = _context.sent;
|
|
67
|
+
return _context.abrupt("return", result.data);
|
|
68
|
+
case 22:
|
|
69
|
+
_context.prev = 22;
|
|
70
|
+
_context.t0 = _context["catch"](15);
|
|
71
|
+
console.error(_context.t0.response);
|
|
72
|
+
return _context.abrupt("return", _context.t0);
|
|
73
|
+
case 26:
|
|
74
|
+
case "end":
|
|
75
|
+
return _context.stop();
|
|
76
|
+
}
|
|
77
|
+
}, _callee, null, [[15, 22]]);
|
|
78
|
+
}));
|
|
79
|
+
return function sendMessage(_x) {
|
|
80
|
+
return _ref2.apply(this, arguments);
|
|
81
|
+
};
|
|
82
|
+
}();
|
|
83
|
+
var getMessages = /*#__PURE__*/function () {
|
|
84
|
+
var _ref4 = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee3(_ref3) {
|
|
85
|
+
var keyPairDocs, _ref3$limit, limit, _ref3$skipMessageReso, skipMessageResolution, _yield$generateSigned2, payload, dids, result, data, messages;
|
|
86
|
+
return _regeneratorRuntime().wrap(function _callee3$(_context3) {
|
|
87
|
+
while (1) switch (_context3.prev = _context3.next) {
|
|
88
|
+
case 0:
|
|
89
|
+
keyPairDocs = _ref3.keyPairDocs, _ref3$limit = _ref3.limit, limit = _ref3$limit === void 0 ? 20 : _ref3$limit, _ref3$skipMessageReso = _ref3.skipMessageResolution, skipMessageResolution = _ref3$skipMessageReso === void 0 ? false : _ref3$skipMessageReso;
|
|
90
|
+
assert(!!keyPairDocs, 'keyPairDoc is required');
|
|
91
|
+
assert(Array.isArray(keyPairDocs), 'keyPairDocs must be an array');
|
|
92
|
+
assert(!!keyPairDocs.length, 'keyPairDocs must not be empty');
|
|
93
|
+
_context3.next = 6;
|
|
94
|
+
return dockService.waitDockReady();
|
|
95
|
+
case 6:
|
|
96
|
+
_context3.next = 8;
|
|
97
|
+
return generateSignedPayloadFromList(keyPairDocs, {
|
|
98
|
+
limit: limit
|
|
99
|
+
});
|
|
100
|
+
case 8:
|
|
101
|
+
_yield$generateSigned2 = _context3.sent;
|
|
102
|
+
payload = _yield$generateSigned2.payload;
|
|
103
|
+
dids = _yield$generateSigned2.dids;
|
|
104
|
+
_context3.prev = 11;
|
|
105
|
+
_context3.next = 14;
|
|
106
|
+
return axios.get("".concat(serviceURL, "/messages/batch-dids?dids=").concat(encodeURIComponent(JSON.stringify(dids)), "&payload=").concat(toBase64(payload), "&keepMessages=true"));
|
|
107
|
+
case 14:
|
|
108
|
+
result = _context3.sent;
|
|
109
|
+
data = result.data;
|
|
110
|
+
if (!skipMessageResolution) {
|
|
111
|
+
_context3.next = 18;
|
|
112
|
+
break;
|
|
113
|
+
}
|
|
114
|
+
return _context3.abrupt("return", data);
|
|
115
|
+
case 18:
|
|
116
|
+
_context3.next = 20;
|
|
117
|
+
return Promise.all(data.map( /*#__PURE__*/function () {
|
|
118
|
+
var _ref5 = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee2(message) {
|
|
119
|
+
var didCommMessage;
|
|
120
|
+
return _regeneratorRuntime().wrap(function _callee2$(_context2) {
|
|
121
|
+
while (1) switch (_context2.prev = _context2.next) {
|
|
122
|
+
case 0:
|
|
123
|
+
_context2.next = 2;
|
|
124
|
+
return resolveDidcommMessage({
|
|
125
|
+
message: message,
|
|
126
|
+
keyPairDocs: keyPairDocs
|
|
127
|
+
});
|
|
128
|
+
case 2:
|
|
129
|
+
didCommMessage = _context2.sent;
|
|
130
|
+
return _context2.abrupt("return", _objectSpread2(_objectSpread2(_objectSpread2({}, message), didCommMessage), {}, {
|
|
131
|
+
msg: didCommMessage.body
|
|
132
|
+
}));
|
|
133
|
+
case 4:
|
|
134
|
+
case "end":
|
|
135
|
+
return _context2.stop();
|
|
136
|
+
}
|
|
137
|
+
}, _callee2);
|
|
138
|
+
}));
|
|
139
|
+
return function (_x3) {
|
|
140
|
+
return _ref5.apply(this, arguments);
|
|
141
|
+
};
|
|
142
|
+
}()));
|
|
143
|
+
case 20:
|
|
144
|
+
messages = _context3.sent;
|
|
145
|
+
return _context3.abrupt("return", messages.filter(function (item) {
|
|
146
|
+
return !!item;
|
|
147
|
+
}));
|
|
148
|
+
case 24:
|
|
149
|
+
_context3.prev = 24;
|
|
150
|
+
_context3.t0 = _context3["catch"](11);
|
|
151
|
+
console.error(_context3.t0.response);
|
|
152
|
+
return _context3.abrupt("return", _context3.t0);
|
|
153
|
+
case 28:
|
|
154
|
+
case "end":
|
|
155
|
+
return _context3.stop();
|
|
156
|
+
}
|
|
157
|
+
}, _callee3, null, [[11, 24]]);
|
|
158
|
+
}));
|
|
159
|
+
return function getMessages(_x2) {
|
|
160
|
+
return _ref4.apply(this, arguments);
|
|
161
|
+
};
|
|
162
|
+
}();
|
|
163
|
+
var ackMessages = function ackMessages(_ref6) {
|
|
164
|
+
var did = _ref6.did,
|
|
165
|
+
messageIds = _ref6.messageIds;
|
|
166
|
+
assert(!!did, 'did is required');
|
|
167
|
+
assert(!!messageIds, 'messageIds is required');
|
|
168
|
+
return axios.post("".concat(serviceURL, "/messages/ack"), {
|
|
169
|
+
ack: messageIds,
|
|
170
|
+
did: did
|
|
171
|
+
});
|
|
172
|
+
};
|
|
173
|
+
var registerDIDPushNotification = /*#__PURE__*/function () {
|
|
174
|
+
var _ref8 = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee4(_ref7) {
|
|
175
|
+
var keyPairDocs, token, _yield$generateSigned3, payload, dids, result;
|
|
176
|
+
return _regeneratorRuntime().wrap(function _callee4$(_context4) {
|
|
177
|
+
while (1) switch (_context4.prev = _context4.next) {
|
|
178
|
+
case 0:
|
|
179
|
+
keyPairDocs = _ref7.keyPairDocs, token = _ref7.token;
|
|
180
|
+
assert(!!keyPairDocs, 'keyPairDoc is required');
|
|
181
|
+
assert(Array.isArray(keyPairDocs), 'keyPairDocs must be an array');
|
|
182
|
+
assert(!!keyPairDocs.length, 'keyPairDocs must not be empty');
|
|
183
|
+
assert(!!token, 'token is required');
|
|
184
|
+
_context4.next = 7;
|
|
185
|
+
return generateSignedPayloadFromList(keyPairDocs, {
|
|
186
|
+
token: token
|
|
187
|
+
});
|
|
188
|
+
case 7:
|
|
189
|
+
_yield$generateSigned3 = _context4.sent;
|
|
190
|
+
payload = _yield$generateSigned3.payload;
|
|
191
|
+
dids = _yield$generateSigned3.dids;
|
|
192
|
+
_context4.prev = 10;
|
|
193
|
+
_context4.next = 13;
|
|
194
|
+
return axios.post("".concat(serviceURL, "/register/batch-dids?dids=").concat(encodeURIComponent(JSON.stringify(dids)), "&payload=").concat(toBase64(payload)));
|
|
195
|
+
case 13:
|
|
196
|
+
result = _context4.sent;
|
|
197
|
+
return _context4.abrupt("return", result.data);
|
|
198
|
+
case 17:
|
|
199
|
+
_context4.prev = 17;
|
|
200
|
+
_context4.t0 = _context4["catch"](10);
|
|
201
|
+
console.error(_context4.t0.response);
|
|
202
|
+
return _context4.abrupt("return", _context4.t0);
|
|
203
|
+
case 21:
|
|
204
|
+
case "end":
|
|
205
|
+
return _context4.stop();
|
|
206
|
+
}
|
|
207
|
+
}, _callee4, null, [[10, 17]]);
|
|
208
|
+
}));
|
|
209
|
+
return function registerDIDPushNotification(_x4) {
|
|
210
|
+
return _ref8.apply(this, arguments);
|
|
211
|
+
};
|
|
212
|
+
}();
|
|
213
|
+
function jwtHandler(_x5) {
|
|
214
|
+
return _jwtHandler.apply(this, arguments);
|
|
215
|
+
}
|
|
216
|
+
function _jwtHandler() {
|
|
217
|
+
_jwtHandler = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee5(message) {
|
|
218
|
+
var jwt;
|
|
219
|
+
return _regeneratorRuntime().wrap(function _callee5$(_context5) {
|
|
220
|
+
while (1) switch (_context5.prev = _context5.next) {
|
|
221
|
+
case 0:
|
|
222
|
+
_context5.prev = 0;
|
|
223
|
+
_context5.next = 3;
|
|
224
|
+
return jwtDecode(message);
|
|
225
|
+
case 3:
|
|
226
|
+
jwt = _context5.sent;
|
|
227
|
+
return _context5.abrupt("return", jwt);
|
|
228
|
+
case 7:
|
|
229
|
+
_context5.prev = 7;
|
|
230
|
+
_context5.t0 = _context5["catch"](0);
|
|
231
|
+
return _context5.abrupt("return", false);
|
|
232
|
+
case 10:
|
|
233
|
+
case "end":
|
|
234
|
+
return _context5.stop();
|
|
235
|
+
}
|
|
236
|
+
}, _callee5, null, [[0, 7]]);
|
|
237
|
+
}));
|
|
238
|
+
return _jwtHandler.apply(this, arguments);
|
|
239
|
+
}
|
|
240
|
+
function base64Handler(_x6) {
|
|
241
|
+
return _base64Handler.apply(this, arguments);
|
|
242
|
+
}
|
|
243
|
+
function _base64Handler() {
|
|
244
|
+
_base64Handler = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee6(message) {
|
|
245
|
+
return _regeneratorRuntime().wrap(function _callee6$(_context6) {
|
|
246
|
+
while (1) switch (_context6.prev = _context6.next) {
|
|
247
|
+
case 0:
|
|
248
|
+
if (isBase64(message)) {
|
|
249
|
+
_context6.next = 2;
|
|
250
|
+
break;
|
|
251
|
+
}
|
|
252
|
+
return _context6.abrupt("return", false);
|
|
253
|
+
case 2:
|
|
254
|
+
return _context6.abrupt("return", fromBase64(message));
|
|
255
|
+
case 3:
|
|
256
|
+
case "end":
|
|
257
|
+
return _context6.stop();
|
|
258
|
+
}
|
|
259
|
+
}, _callee6);
|
|
260
|
+
}));
|
|
261
|
+
return _base64Handler.apply(this, arguments);
|
|
262
|
+
}
|
|
263
|
+
function jsonHandler(_x7) {
|
|
264
|
+
return _jsonHandler.apply(this, arguments);
|
|
265
|
+
}
|
|
266
|
+
function _jsonHandler() {
|
|
267
|
+
_jsonHandler = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee7(message) {
|
|
268
|
+
var json;
|
|
269
|
+
return _regeneratorRuntime().wrap(function _callee7$(_context7) {
|
|
270
|
+
while (1) switch (_context7.prev = _context7.next) {
|
|
271
|
+
case 0:
|
|
272
|
+
_context7.prev = 0;
|
|
273
|
+
json = JSON.parse(message);
|
|
274
|
+
return _context7.abrupt("return", json);
|
|
275
|
+
case 5:
|
|
276
|
+
_context7.prev = 5;
|
|
277
|
+
_context7.t0 = _context7["catch"](0);
|
|
278
|
+
return _context7.abrupt("return", false);
|
|
279
|
+
case 8:
|
|
280
|
+
case "end":
|
|
281
|
+
return _context7.stop();
|
|
282
|
+
}
|
|
283
|
+
}, _callee7, null, [[0, 5]]);
|
|
284
|
+
}));
|
|
285
|
+
return _jsonHandler.apply(this, arguments);
|
|
286
|
+
}
|
|
287
|
+
var messageHandlers = [base64Handler, jwtHandler, jsonHandler];
|
|
288
|
+
function resolveJweString(_x8) {
|
|
289
|
+
return _resolveJweString.apply(this, arguments);
|
|
290
|
+
}
|
|
291
|
+
function _resolveJweString() {
|
|
292
|
+
_resolveJweString = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee8(message) {
|
|
293
|
+
var resolvedMessage, _iterator, _step, handler, _result;
|
|
294
|
+
return _regeneratorRuntime().wrap(function _callee8$(_context8) {
|
|
295
|
+
while (1) switch (_context8.prev = _context8.next) {
|
|
296
|
+
case 0:
|
|
297
|
+
resolvedMessage = message;
|
|
298
|
+
_context8.prev = 1;
|
|
299
|
+
_iterator = _createForOfIteratorHelper(messageHandlers);
|
|
300
|
+
_context8.prev = 3;
|
|
301
|
+
_iterator.s();
|
|
302
|
+
case 5:
|
|
303
|
+
if ((_step = _iterator.n()).done) {
|
|
304
|
+
_context8.next = 13;
|
|
305
|
+
break;
|
|
306
|
+
}
|
|
307
|
+
handler = _step.value;
|
|
308
|
+
_context8.next = 9;
|
|
309
|
+
return handler(resolvedMessage);
|
|
310
|
+
case 9:
|
|
311
|
+
_result = _context8.sent;
|
|
312
|
+
if (_result) {
|
|
313
|
+
resolvedMessage = _result;
|
|
314
|
+
}
|
|
315
|
+
case 11:
|
|
316
|
+
_context8.next = 5;
|
|
317
|
+
break;
|
|
318
|
+
case 13:
|
|
319
|
+
_context8.next = 18;
|
|
320
|
+
break;
|
|
321
|
+
case 15:
|
|
322
|
+
_context8.prev = 15;
|
|
323
|
+
_context8.t0 = _context8["catch"](3);
|
|
324
|
+
_iterator.e(_context8.t0);
|
|
325
|
+
case 18:
|
|
326
|
+
_context8.prev = 18;
|
|
327
|
+
_iterator.f();
|
|
328
|
+
return _context8.finish(18);
|
|
329
|
+
case 21:
|
|
330
|
+
_context8.next = 28;
|
|
331
|
+
break;
|
|
332
|
+
case 23:
|
|
333
|
+
_context8.prev = 23;
|
|
334
|
+
_context8.t1 = _context8["catch"](1);
|
|
335
|
+
Logger.debug("Invalid JWE message received: ".concat(message));
|
|
336
|
+
console.error(_context8.t1);
|
|
337
|
+
return _context8.abrupt("return", null);
|
|
338
|
+
case 28:
|
|
339
|
+
return _context8.abrupt("return", resolvedMessage);
|
|
340
|
+
case 29:
|
|
341
|
+
case "end":
|
|
342
|
+
return _context8.stop();
|
|
343
|
+
}
|
|
344
|
+
}, _callee8, null, [[1, 23], [3, 15, 18, 21]]);
|
|
345
|
+
}));
|
|
346
|
+
return _resolveJweString.apply(this, arguments);
|
|
347
|
+
}
|
|
348
|
+
function isURL(str) {
|
|
349
|
+
try {
|
|
350
|
+
// eslint-disable-next-line no-new
|
|
351
|
+
new URL(str);
|
|
352
|
+
return true;
|
|
353
|
+
} catch (err) {
|
|
354
|
+
return false;
|
|
355
|
+
}
|
|
356
|
+
}
|
|
357
|
+
function resolveDidcommMessage(_x9) {
|
|
358
|
+
return _resolveDidcommMessage.apply(this, arguments);
|
|
359
|
+
}
|
|
360
|
+
function _resolveDidcommMessage() {
|
|
361
|
+
_resolveDidcommMessage = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee9(_ref9) {
|
|
362
|
+
var _jwe;
|
|
363
|
+
var keyPairDocs, message, jwe, _yield$axios$get, data, result, didCommRecipients, keyPairDoc, keyAgreementKey;
|
|
364
|
+
return _regeneratorRuntime().wrap(function _callee9$(_context9) {
|
|
365
|
+
while (1) switch (_context9.prev = _context9.next) {
|
|
366
|
+
case 0:
|
|
367
|
+
keyPairDocs = _ref9.keyPairDocs, message = _ref9.message;
|
|
368
|
+
assert(!!keyPairDocs, 'keyPairDoc is required');
|
|
369
|
+
assert(Array.isArray(keyPairDocs), 'keyPairDocs must be an array');
|
|
370
|
+
assert(!!keyPairDocs.length, 'keyPairDocs must not be empty');
|
|
371
|
+
jwe = message.msg || message;
|
|
372
|
+
if (jwe && jwe.indexOf('didcomm://') > -1) {
|
|
373
|
+
jwe = jwe.replace('didcomm://', '');
|
|
374
|
+
}
|
|
375
|
+
if (!isURL(jwe)) {
|
|
376
|
+
_context9.next = 19;
|
|
377
|
+
break;
|
|
378
|
+
}
|
|
379
|
+
_context9.prev = 7;
|
|
380
|
+
_context9.next = 10;
|
|
381
|
+
return axios.get(jwe);
|
|
382
|
+
case 10:
|
|
383
|
+
_yield$axios$get = _context9.sent;
|
|
384
|
+
data = _yield$axios$get.data;
|
|
385
|
+
jwe = data;
|
|
386
|
+
_context9.next = 19;
|
|
387
|
+
break;
|
|
388
|
+
case 15:
|
|
389
|
+
_context9.prev = 15;
|
|
390
|
+
_context9.t0 = _context9["catch"](7);
|
|
391
|
+
console.error(_context9.t0);
|
|
392
|
+
return _context9.abrupt("return", null);
|
|
393
|
+
case 19:
|
|
394
|
+
try {
|
|
395
|
+
// Parse JSON strings
|
|
396
|
+
jwe = JSON.parse(jwe);
|
|
397
|
+
} catch (_err) {}
|
|
398
|
+
if (!(typeof jwe === 'string')) {
|
|
399
|
+
_context9.next = 24;
|
|
400
|
+
break;
|
|
401
|
+
}
|
|
402
|
+
_context9.next = 23;
|
|
403
|
+
return resolveJweString(jwe);
|
|
404
|
+
case 23:
|
|
405
|
+
jwe = _context9.sent;
|
|
406
|
+
case 24:
|
|
407
|
+
result = jwe;
|
|
408
|
+
didCommRecipients = (_jwe = jwe) === null || _jwe === void 0 || (_jwe = _jwe.recipients) === null || _jwe === void 0 ? void 0 : _jwe.map(function (recipient) {
|
|
409
|
+
return recipient.header.kid;
|
|
410
|
+
}); // if no recipients, the message is not encrypted
|
|
411
|
+
if (!didCommRecipients) {
|
|
412
|
+
_context9.next = 35;
|
|
413
|
+
break;
|
|
414
|
+
}
|
|
415
|
+
keyPairDoc = keyPairDocs.find(function (doc) {
|
|
416
|
+
return didCommRecipients.find(function (did) {
|
|
417
|
+
return did.indexOf(doc.controller) > -1;
|
|
418
|
+
});
|
|
419
|
+
});
|
|
420
|
+
assert(!!keyPairDoc, "keyPairDoc not found for recipients ".concat(JSON.stringify(didCommRecipients)));
|
|
421
|
+
_context9.next = 31;
|
|
422
|
+
return getDerivedAgreementKey(keyPairDoc);
|
|
423
|
+
case 31:
|
|
424
|
+
keyAgreementKey = _context9.sent;
|
|
425
|
+
_context9.next = 34;
|
|
426
|
+
return didcommDecrypt(jwe, keyAgreementKey);
|
|
427
|
+
case 34:
|
|
428
|
+
result = _context9.sent;
|
|
429
|
+
case 35:
|
|
430
|
+
if (!result.body && result.payload) {
|
|
431
|
+
result.body = result.payload;
|
|
432
|
+
}
|
|
433
|
+
return _context9.abrupt("return", result);
|
|
434
|
+
case 37:
|
|
435
|
+
case "end":
|
|
436
|
+
return _context9.stop();
|
|
437
|
+
}
|
|
438
|
+
}, _callee9, null, [[7, 15]]);
|
|
439
|
+
}));
|
|
440
|
+
return _resolveDidcommMessage.apply(this, arguments);
|
|
441
|
+
}
|
|
442
|
+
function signJwt(_x10) {
|
|
443
|
+
return _signJwt.apply(this, arguments);
|
|
444
|
+
}
|
|
445
|
+
function _signJwt() {
|
|
446
|
+
_signJwt = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee10(_ref10) {
|
|
447
|
+
var keyPairDocs, message;
|
|
448
|
+
return _regeneratorRuntime().wrap(function _callee10$(_context10) {
|
|
449
|
+
while (1) switch (_context10.prev = _context10.next) {
|
|
450
|
+
case 0:
|
|
451
|
+
keyPairDocs = _ref10.keyPairDocs, message = _ref10.message;
|
|
452
|
+
_context10.next = 3;
|
|
453
|
+
return didcommCreateSignedJWT(message, keyPairDocs, true);
|
|
454
|
+
case 3:
|
|
455
|
+
return _context10.abrupt("return", _context10.sent);
|
|
456
|
+
case 4:
|
|
457
|
+
case "end":
|
|
458
|
+
return _context10.stop();
|
|
459
|
+
}
|
|
460
|
+
}, _callee10);
|
|
461
|
+
}));
|
|
462
|
+
return _signJwt.apply(this, arguments);
|
|
463
|
+
}
|
|
464
|
+
var setServiceURL = function setServiceURL(_ref11) {
|
|
465
|
+
var url = _ref11.url;
|
|
466
|
+
assert(!!url, 'url is required');
|
|
467
|
+
serviceURL = url;
|
|
468
|
+
};
|
|
469
|
+
var RelayService = {
|
|
470
|
+
sendMessage: sendMessage,
|
|
471
|
+
getMessages: getMessages,
|
|
472
|
+
resolveDidcommMessage: resolveDidcommMessage,
|
|
473
|
+
registerDIDPushNotification: registerDIDPushNotification,
|
|
474
|
+
setServiceURL: setServiceURL,
|
|
475
|
+
ackMessages: ackMessages,
|
|
476
|
+
serviceURL: serviceURL,
|
|
477
|
+
signJwt: signJwt
|
|
478
|
+
};
|
|
479
|
+
|
|
480
|
+
export { RelayService, didcomm, resolveDidcommMessage };
|
package/lib/payloads.js
ADDED
|
@@ -0,0 +1,146 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, '__esModule', { value: true });
|
|
4
|
+
|
|
5
|
+
var _rollupPluginBabelHelpers = require('./_rollupPluginBabelHelpers-4923c894.js');
|
|
6
|
+
var VerifiableCredential = require('@docknetwork/sdk/verifiable-credential');
|
|
7
|
+
var utilCrypto = require('@polkadot/util-crypto');
|
|
8
|
+
var helpers = require('@docknetwork/sdk/utils/vc/helpers');
|
|
9
|
+
var keypairs = require('@docknetwork/universal-wallet/methods/keypairs');
|
|
10
|
+
var assert = require('assert');
|
|
11
|
+
var base64url = require('base64url');
|
|
12
|
+
|
|
13
|
+
function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; }
|
|
14
|
+
|
|
15
|
+
var VerifiableCredential__default = /*#__PURE__*/_interopDefaultLegacy(VerifiableCredential);
|
|
16
|
+
var assert__default = /*#__PURE__*/_interopDefaultLegacy(assert);
|
|
17
|
+
var base64url__default = /*#__PURE__*/_interopDefaultLegacy(base64url);
|
|
18
|
+
|
|
19
|
+
// 1 year
|
|
20
|
+
var DEFAULT_EXPIRATION = 86400 * 1000 * 365;
|
|
21
|
+
var isDIDDockRegex = /did:dock/gi;
|
|
22
|
+
function ensureDIDDockFragment(keyDoc) {
|
|
23
|
+
if (!isDIDDockRegex.test(keyDoc.id)) {
|
|
24
|
+
return keyDoc;
|
|
25
|
+
}
|
|
26
|
+
keyDoc.id = keyDoc.id.replace(/#.+/, '');
|
|
27
|
+
keyDoc.id = "".concat(keyDoc.id, "#keys-1");
|
|
28
|
+
return keyDoc;
|
|
29
|
+
}
|
|
30
|
+
function generateSignedPayload(_x, _x2) {
|
|
31
|
+
return _generateSignedPayload.apply(this, arguments);
|
|
32
|
+
}
|
|
33
|
+
function _generateSignedPayload() {
|
|
34
|
+
_generateSignedPayload = _rollupPluginBabelHelpers._asyncToGenerator( /*#__PURE__*/_rollupPluginBabelHelpers._regeneratorRuntime().mark(function _callee(keyPairDoc, subject) {
|
|
35
|
+
var cred, keyPair, suite;
|
|
36
|
+
return _rollupPluginBabelHelpers._regeneratorRuntime().wrap(function _callee$(_context) {
|
|
37
|
+
while (1) switch (_context.prev = _context.next) {
|
|
38
|
+
case 0:
|
|
39
|
+
assert__default["default"](!!keyPairDoc, 'keyPairDoc is required');
|
|
40
|
+
assert__default["default"](!!subject, 'subject is required');
|
|
41
|
+
_context.next = 4;
|
|
42
|
+
return utilCrypto.cryptoWaitReady();
|
|
43
|
+
case 4:
|
|
44
|
+
keyPairDoc = ensureDIDDockFragment(keyPairDoc);
|
|
45
|
+
cred = new VerifiableCredential__default["default"]('dock:relay');
|
|
46
|
+
cred.setContext(['https://www.w3.org/2018/credentials/v1', {
|
|
47
|
+
dk: 'https://ld.dock.io/credentials#',
|
|
48
|
+
RelayAuthCredential: 'dk:RelayAuthCredential',
|
|
49
|
+
token: 'dk:token',
|
|
50
|
+
limit: 'dk:limit',
|
|
51
|
+
to: 'dk:to',
|
|
52
|
+
msg: 'dk:msg'
|
|
53
|
+
}]);
|
|
54
|
+
cred.setIssuanceDate(new Date().toISOString());
|
|
55
|
+
cred.setExpirationDate(new Date(Date.now() + DEFAULT_EXPIRATION).toISOString());
|
|
56
|
+
cred.setSubject(subject);
|
|
57
|
+
cred.setIssuer(keyPairDoc.controller);
|
|
58
|
+
cred.addType('RelayAuthCredential');
|
|
59
|
+
keyPair = keypairs.getKeypairFromDoc(keyPairDoc);
|
|
60
|
+
keyPair.signer = keyPair.signer();
|
|
61
|
+
_context.next = 16;
|
|
62
|
+
return helpers.getSuiteFromKeyDoc(keyPair);
|
|
63
|
+
case 16:
|
|
64
|
+
suite = _context.sent;
|
|
65
|
+
_context.next = 19;
|
|
66
|
+
return cred.sign(suite);
|
|
67
|
+
case 19:
|
|
68
|
+
return _context.abrupt("return", {
|
|
69
|
+
payload: [subject, cred.issuanceDate, cred.expirationDate, cred.toJSON().proof],
|
|
70
|
+
did: keyPairDoc.controller
|
|
71
|
+
});
|
|
72
|
+
case 20:
|
|
73
|
+
case "end":
|
|
74
|
+
return _context.stop();
|
|
75
|
+
}
|
|
76
|
+
}, _callee);
|
|
77
|
+
}));
|
|
78
|
+
return _generateSignedPayload.apply(this, arguments);
|
|
79
|
+
}
|
|
80
|
+
function generateSignedPayloadFromList(_x3, _x4) {
|
|
81
|
+
return _generateSignedPayloadFromList.apply(this, arguments);
|
|
82
|
+
}
|
|
83
|
+
function _generateSignedPayloadFromList() {
|
|
84
|
+
_generateSignedPayloadFromList = _rollupPluginBabelHelpers._asyncToGenerator( /*#__PURE__*/_rollupPluginBabelHelpers._regeneratorRuntime().mark(function _callee2(keyPairDocs, subject) {
|
|
85
|
+
var payload, dids, _iterator, _step, keyPairDoc, _yield$generateSigned, signedPayload, did;
|
|
86
|
+
return _rollupPluginBabelHelpers._regeneratorRuntime().wrap(function _callee2$(_context2) {
|
|
87
|
+
while (1) switch (_context2.prev = _context2.next) {
|
|
88
|
+
case 0:
|
|
89
|
+
payload = [];
|
|
90
|
+
dids = [];
|
|
91
|
+
_iterator = _rollupPluginBabelHelpers._createForOfIteratorHelper(keyPairDocs);
|
|
92
|
+
_context2.prev = 3;
|
|
93
|
+
_iterator.s();
|
|
94
|
+
case 5:
|
|
95
|
+
if ((_step = _iterator.n()).done) {
|
|
96
|
+
_context2.next = 16;
|
|
97
|
+
break;
|
|
98
|
+
}
|
|
99
|
+
keyPairDoc = _step.value;
|
|
100
|
+
_context2.next = 9;
|
|
101
|
+
return generateSignedPayload(keyPairDoc, subject);
|
|
102
|
+
case 9:
|
|
103
|
+
_yield$generateSigned = _context2.sent;
|
|
104
|
+
signedPayload = _yield$generateSigned.payload;
|
|
105
|
+
did = _yield$generateSigned.did;
|
|
106
|
+
payload.push(signedPayload);
|
|
107
|
+
dids.push(did);
|
|
108
|
+
case 14:
|
|
109
|
+
_context2.next = 5;
|
|
110
|
+
break;
|
|
111
|
+
case 16:
|
|
112
|
+
_context2.next = 21;
|
|
113
|
+
break;
|
|
114
|
+
case 18:
|
|
115
|
+
_context2.prev = 18;
|
|
116
|
+
_context2.t0 = _context2["catch"](3);
|
|
117
|
+
_iterator.e(_context2.t0);
|
|
118
|
+
case 21:
|
|
119
|
+
_context2.prev = 21;
|
|
120
|
+
_iterator.f();
|
|
121
|
+
return _context2.finish(21);
|
|
122
|
+
case 24:
|
|
123
|
+
return _context2.abrupt("return", {
|
|
124
|
+
payload: payload,
|
|
125
|
+
dids: dids
|
|
126
|
+
});
|
|
127
|
+
case 25:
|
|
128
|
+
case "end":
|
|
129
|
+
return _context2.stop();
|
|
130
|
+
}
|
|
131
|
+
}, _callee2, null, [[3, 18, 21, 24]]);
|
|
132
|
+
}));
|
|
133
|
+
return _generateSignedPayloadFromList.apply(this, arguments);
|
|
134
|
+
}
|
|
135
|
+
function toBase64(payload) {
|
|
136
|
+
return base64url__default["default"].encode(JSON.stringify(payload));
|
|
137
|
+
}
|
|
138
|
+
function fromBase64(payload) {
|
|
139
|
+
return JSON.parse(base64url__default["default"].decode(payload));
|
|
140
|
+
}
|
|
141
|
+
|
|
142
|
+
exports.ensureDIDDockFragment = ensureDIDDockFragment;
|
|
143
|
+
exports.fromBase64 = fromBase64;
|
|
144
|
+
exports.generateSignedPayload = generateSignedPayload;
|
|
145
|
+
exports.generateSignedPayloadFromList = generateSignedPayloadFromList;
|
|
146
|
+
exports.toBase64 = toBase64;
|