@awiki/im-core-node 0.1.7 → 0.2.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.
@@ -0,0 +1,427 @@
1
+ import { ImCoreNodeError, } from './types.js';
2
+ const IDENTITY_PROVIDER_PROTOCOL = 'anp-identity-provider-ts/1';
3
+ const REQUIRED_CAPABILITIES = [
4
+ 'IDENTITY_READ',
5
+ 'IDENTITY_SIGN',
6
+ 'IDENTITY_ECDH_SEALED',
7
+ 'IDENTITY_HTTP_SIGNATURE',
8
+ 'IDENTITY_CREATE',
9
+ 'IDENTITY_DOCUMENT_UPDATE',
10
+ ];
11
+ /** @internal Host-only bridge; this file is not exported by the package. */
12
+ export function createIdentityProviderDispatch(provider) {
13
+ if (provider.protocol !== IDENTITY_PROVIDER_PROTOCOL)
14
+ throw incompatible();
15
+ const capabilities = new Set(provider.capabilities);
16
+ if (REQUIRED_CAPABILITIES.some(capability => !capabilities.has(capability)))
17
+ throw incompatible();
18
+ for (const method of [
19
+ 'info', 'recover', 'list', 'publicIdentity', 'hostStatus', 'create', 'delete', 'recoverIdentity',
20
+ 'sign', 'signOriginProof', 'prepareHttpSignature', 'ecdhSealed',
21
+ 'prepareDocumentChange', 'resumeDocumentChange', 'adoptVerifiedDocument',
22
+ 'beginDeviceEnrollment', 'beginRequestSigningEnrollment', 'resumeEnrollment',
23
+ ]) {
24
+ if (typeof provider[method] !== 'function')
25
+ throw incompatible();
26
+ }
27
+ const documentSessions = new Map();
28
+ const enrollmentSessions = new Map();
29
+ const rootImportSessions = new Map();
30
+ const identityImportSessions = new Map();
31
+ let nextDocumentSession = 1;
32
+ let nextEnrollmentSession = 1;
33
+ let nextRootImportSession = 1;
34
+ let nextIdentityImportSession = 1;
35
+ return async (calls) => {
36
+ try {
37
+ const [request] = calls;
38
+ const payload = object(JSON.parse(request.payloadJson));
39
+ switch (request.operation) {
40
+ case 'info': return success(await provider.info());
41
+ case 'recover':
42
+ await provider.recover();
43
+ return success(null);
44
+ case 'list': return success(await provider.list());
45
+ case 'publicIdentity':
46
+ return success(await provider.publicIdentity(reference(payload.identity)));
47
+ case 'hostStatus':
48
+ return success(await provider.hostStatus(reference(payload.identity)));
49
+ case 'create': return success(await provider.create(payload));
50
+ case 'delete':
51
+ await provider.delete(reference(payload.identity));
52
+ return success(null);
53
+ case 'recoverIdentity':
54
+ await provider.recoverIdentity(reference(payload.identity));
55
+ return success(null);
56
+ case 'sign': {
57
+ const signature = await provider.sign(reference(payload.identity), { ...signingPurpose(payload), payload: singleBuffer(request.buffers) });
58
+ return success({ kid: signature.kid, algorithm: signature.algorithm }, [signature.bytes]);
59
+ }
60
+ case 'signOriginProof':
61
+ return success(await provider.signOriginProof(reference(payload.identity), object(payload.request)));
62
+ case 'ecdhSealed': {
63
+ const [peerPublic, recipientPublicKey] = pairBuffers(request.buffers);
64
+ return success(await provider.ecdhSealed({
65
+ identity: reference(payload.identity),
66
+ kid: requiredString(payload.kid),
67
+ peerPublic,
68
+ recipientPublicKey,
69
+ requestId: requiredString(payload.requestId),
70
+ }));
71
+ }
72
+ case 'exportRootKeySealed': {
73
+ if (!capabilities.has('AWIKI_LEGACY_ROOT_TRANSFER_V1')
74
+ || typeof provider.exportRootKeySealed !== 'function')
75
+ throw unavailable();
76
+ return success(await provider.exportRootKeySealed({
77
+ identity: reference(payload.identity),
78
+ kid: requiredString(payload.kid),
79
+ recipientPublicKey: singleBuffer(request.buffers),
80
+ requestId: requiredString(payload.requestId),
81
+ userPresenceConfirmed: payload.userPresenceConfirmed === true,
82
+ }));
83
+ }
84
+ case 'prepareLegacyRootImport': {
85
+ if (!capabilities.has('AWIKI_LEGACY_ROOT_TRANSFER_V1')
86
+ || typeof provider.prepareLegacyRootImport !== 'function')
87
+ throw unavailable();
88
+ exactBuffers(request.buffers, 0);
89
+ const prepared = await provider.prepareLegacyRootImport({
90
+ identity: reference(payload.identity),
91
+ evidence: object(payload.evidence),
92
+ encoding: privateKeyEncoding(payload.encoding),
93
+ requestId: requiredString(payload.requestId),
94
+ });
95
+ const offer = prepared.offer();
96
+ if (!Buffer.isBuffer(offer.recipientPublicKey) || offer.recipientPublicKey.length !== 32) {
97
+ throw new TypeError('identity root import recipient key is invalid');
98
+ }
99
+ const sessionId = `root-import-${nextRootImportSession++}`;
100
+ rootImportSessions.set(sessionId, prepared);
101
+ return success({
102
+ sessionId,
103
+ offer: {
104
+ requestId: offer.requestId,
105
+ token: offer.token,
106
+ authorization: offer.authorization,
107
+ aad: offer.aad,
108
+ },
109
+ }, [offer.recipientPublicKey]);
110
+ }
111
+ case 'completeLegacyRootImport': {
112
+ exactBuffers(request.buffers, 0);
113
+ const sessionId = requiredString(payload.sessionId);
114
+ const prepared = rootImportSession(rootImportSessions, sessionId);
115
+ try {
116
+ return success(await prepared.complete(requiredString(payload.token), object(payload.envelope)));
117
+ }
118
+ finally {
119
+ rootImportSessions.delete(sessionId);
120
+ }
121
+ }
122
+ case 'importWrappedRoot': {
123
+ if (!capabilities.has('AWIKI_LEGACY_ROOT_TRANSFER_V1')
124
+ || typeof provider.importWrappedRoot !== 'function')
125
+ throw unavailable();
126
+ exactBuffers(request.buffers, 0);
127
+ return success(await provider.importWrappedRoot(reference(payload.identity), object(payload.envelope)));
128
+ }
129
+ case 'prepareIdentityMaterialImport': {
130
+ if (!capabilities.has('IDENTITY_IMPORT')
131
+ || typeof provider.prepareIdentityMaterialImport !== 'function')
132
+ throw unavailable();
133
+ exactBuffers(request.buffers, 0);
134
+ const prepared = await provider.prepareIdentityMaterialImport({
135
+ remote: object(payload.remote),
136
+ didWba: payload.didWba === true,
137
+ keys: identityMaterialKeySpecs(payload.keys),
138
+ requestId: requiredString(payload.requestId),
139
+ });
140
+ const offer = prepared.offer();
141
+ if (!Buffer.isBuffer(offer.recipientPublicKey) || offer.recipientPublicKey.length !== 32) {
142
+ throw new TypeError('identity material import recipient key is invalid');
143
+ }
144
+ const sessionId = `identity-import-${nextIdentityImportSession++}`;
145
+ identityImportSessions.set(sessionId, prepared);
146
+ return success({
147
+ sessionId,
148
+ offer: {
149
+ target: offer.target,
150
+ requestId: offer.requestId,
151
+ token: offer.token,
152
+ authorization: offer.authorization,
153
+ itemAad: offer.itemAad,
154
+ },
155
+ }, [offer.recipientPublicKey]);
156
+ }
157
+ case 'completeIdentityMaterialImport': {
158
+ exactBuffers(request.buffers, 0);
159
+ const sessionId = requiredString(payload.sessionId);
160
+ const prepared = identityImportSession(identityImportSessions, sessionId);
161
+ try {
162
+ return success(await prepared.complete(requiredString(payload.token), identityMaterialEnvelopes(payload.envelopes)));
163
+ }
164
+ finally {
165
+ identityImportSessions.delete(sessionId);
166
+ }
167
+ }
168
+ case 'prepareHttpSignature': {
169
+ const hasBody = payload.hasBody === true;
170
+ const body = hasBody ? singleBuffer(request.buffers) : undefined;
171
+ if (!hasBody)
172
+ exactBuffers(request.buffers, 0);
173
+ const { hasBody: _hasBody, ...wire } = payload;
174
+ return success(await provider.prepareHttpSignature({
175
+ ...wire,
176
+ identity: reference(payload.identity),
177
+ body,
178
+ }));
179
+ }
180
+ case 'prepareDocumentChange': {
181
+ const session = await provider.prepareDocumentChange(reference(payload.identity), object(payload.request));
182
+ const sessionId = `document-change-${nextDocumentSession++}`;
183
+ documentSessions.set(sessionId, session);
184
+ return success({ sessionId, candidate: await session.candidate() });
185
+ }
186
+ case 'resumeDocumentChange': {
187
+ const session = await provider.resumeDocumentChange(reference(payload.identity));
188
+ if (session === undefined)
189
+ return success(null);
190
+ const sessionId = `document-change-${nextDocumentSession++}`;
191
+ documentSessions.set(sessionId, session);
192
+ return success({ sessionId, candidate: await session.candidate() });
193
+ }
194
+ case 'adoptVerifiedDocument':
195
+ return success(await provider.adoptVerifiedDocument(reference(payload.identity), object(payload.remote)));
196
+ case 'beginDeviceEnrollment': {
197
+ const session = await provider.beginDeviceEnrollment(payload);
198
+ const sessionId = `enrollment-${nextEnrollmentSession++}`;
199
+ enrollmentSessions.set(sessionId, session);
200
+ return success({ sessionId, proposal: await session.proposal() });
201
+ }
202
+ case 'beginRequestSigningEnrollment': {
203
+ const session = await provider.beginRequestSigningEnrollment(payload);
204
+ const sessionId = `enrollment-${nextEnrollmentSession++}`;
205
+ enrollmentSessions.set(sessionId, session);
206
+ return success({ sessionId, proposal: await session.proposal() });
207
+ }
208
+ case 'resumeEnrollment': {
209
+ const session = await provider.resumeEnrollment(reference(payload.identity));
210
+ if (session === undefined)
211
+ return success(null);
212
+ const sessionId = `enrollment-${nextEnrollmentSession++}`;
213
+ enrollmentSessions.set(sessionId, session);
214
+ return success({ sessionId, proposal: await session.proposal() });
215
+ }
216
+ case 'confirmRootPromotion': {
217
+ if (!capabilities.has('AWIKI_LEGACY_ROOT_TRANSFER_V1')
218
+ || typeof provider.confirmRootPromotion !== 'function')
219
+ throw unavailable();
220
+ await provider.confirmRootPromotion(reference(payload.identity), object(payload.request));
221
+ return success(null);
222
+ }
223
+ case 'signPendingRootObjectProof': {
224
+ if (!capabilities.has('AWIKI_LEGACY_ROOT_TRANSFER_V1')
225
+ || typeof provider.signPendingRootObjectProof !== 'function')
226
+ throw unavailable();
227
+ return success(await provider.signPendingRootObjectProof(reference(payload.identity), object(payload.request)));
228
+ }
229
+ case 'documentChangeBeginPublication':
230
+ return success(await documentSession(documentSessions, payload.sessionId).beginPublication());
231
+ case 'documentChangeHostPhase':
232
+ return success(await documentSession(documentSessions, payload.sessionId).hostPhase());
233
+ case 'documentChangeComplete': {
234
+ const sessionId = requiredString(payload.sessionId);
235
+ const outcome = await documentSession(documentSessions, sessionId).complete(object(payload.attempt), object(payload.result));
236
+ if (isFinalDocumentOutcome(outcome))
237
+ documentSessions.delete(sessionId);
238
+ return success(outcome);
239
+ }
240
+ case 'documentChangeReconcile': {
241
+ const sessionId = requiredString(payload.sessionId);
242
+ const outcome = await documentSession(documentSessions, sessionId).reconcile(object(payload.observation));
243
+ if (isFinalDocumentOutcome(outcome))
244
+ documentSessions.delete(sessionId);
245
+ return success(outcome);
246
+ }
247
+ case 'enrollmentSignDeviceAssertion': {
248
+ const signature = await enrollmentSession(enrollmentSessions, payload.sessionId).signDeviceAssertion(singleBuffer(request.buffers));
249
+ return success(null, [Buffer.from(signature)]);
250
+ }
251
+ case 'enrollmentEcdhSealed': {
252
+ const [peerPublic, recipientPublicKey] = pairBuffers(request.buffers);
253
+ return success(await enrollmentSession(enrollmentSessions, payload.sessionId).deriveDeviceSharedSecretSealed({
254
+ peerPublic,
255
+ recipientPublicKey,
256
+ requestId: requiredString(payload.requestId),
257
+ }));
258
+ }
259
+ case 'enrollmentActivate': {
260
+ const sessionId = requiredString(payload.sessionId);
261
+ const outcome = await enrollmentSession(enrollmentSessions, sessionId)
262
+ .activate(object(payload.remote));
263
+ enrollmentSessions.delete(sessionId);
264
+ return success(outcome);
265
+ }
266
+ case 'enrollmentCancel': {
267
+ const sessionId = requiredString(payload.sessionId);
268
+ await enrollmentSession(enrollmentSessions, sessionId).cancel();
269
+ enrollmentSessions.delete(sessionId);
270
+ return success(null);
271
+ }
272
+ default: return failure('provider_incompatible', false);
273
+ }
274
+ }
275
+ catch (error) {
276
+ return failure(errorCode(error), errorRetryable(error));
277
+ }
278
+ };
279
+ }
280
+ function documentSession(sessions, value) {
281
+ const session = sessions.get(requiredString(value));
282
+ if (session === undefined)
283
+ throw new TypeError('identity provider document session is invalid');
284
+ return session;
285
+ }
286
+ function enrollmentSession(sessions, sessionId) {
287
+ const session = sessions.get(requiredString(sessionId));
288
+ if (session === undefined)
289
+ throw new TypeError('identity enrollment session is invalid');
290
+ return session;
291
+ }
292
+ function rootImportSession(sessions, sessionId) {
293
+ const session = sessions.get(requiredString(sessionId));
294
+ if (session === undefined)
295
+ throw new TypeError('identity root import session is invalid');
296
+ return session;
297
+ }
298
+ function identityImportSession(sessions, sessionId) {
299
+ const session = sessions.get(requiredString(sessionId));
300
+ if (session === undefined)
301
+ throw new TypeError('identity material import session is invalid');
302
+ return session;
303
+ }
304
+ function identityMaterialKeySpecs(value) {
305
+ if (!Array.isArray(value))
306
+ throw new TypeError('identity material key specs are invalid');
307
+ return value.map(item => {
308
+ const key = object(item);
309
+ const purpose = key.purpose;
310
+ if (purpose !== 'root_control'
311
+ && purpose !== 'authentication'
312
+ && purpose !== 'device_assertion'
313
+ && purpose !== 'application_assertion'
314
+ && purpose !== 'key_agreement') {
315
+ throw new TypeError('identity material key purpose is invalid');
316
+ }
317
+ return {
318
+ kid: requiredString(key.kid),
319
+ purpose,
320
+ encoding: privateKeyEncoding(key.encoding),
321
+ };
322
+ });
323
+ }
324
+ function identityMaterialEnvelopes(value) {
325
+ if (!Array.isArray(value))
326
+ throw new TypeError('identity material envelopes are invalid');
327
+ return value.map(item => {
328
+ const envelope = object(item);
329
+ if (envelope.protocol !== 'anp-sealed-secret/1'
330
+ || envelope.suite !== 'hpke-base-x25519-hkdf-sha256-chacha20poly1305-v1') {
331
+ throw new TypeError('identity material envelope is invalid');
332
+ }
333
+ return {
334
+ protocol: envelope.protocol,
335
+ suite: envelope.suite,
336
+ encappedKey: requiredString(envelope.encappedKey),
337
+ ciphertext: requiredString(envelope.ciphertext),
338
+ };
339
+ });
340
+ }
341
+ function privateKeyEncoding(value) {
342
+ if (value === 'raw32' || value === 'pkcs8_der')
343
+ return value;
344
+ throw new TypeError('identity private-key encoding is invalid');
345
+ }
346
+ function requiredString(value) {
347
+ if (typeof value !== 'string' || value.length === 0) {
348
+ throw new TypeError('identity provider string value is invalid');
349
+ }
350
+ return value;
351
+ }
352
+ function isFinalDocumentOutcome(value) {
353
+ const outcome = object(value).outcome;
354
+ return outcome === 'committed' || outcome === 'aborted';
355
+ }
356
+ function incompatible() {
357
+ return new ImCoreNodeError('provider_incompatible', 'The identity provider is incompatible.', false);
358
+ }
359
+ function unavailable() {
360
+ return new ImCoreNodeError('capability_unavailable', 'The identity provider capability is unavailable.', false);
361
+ }
362
+ function success(value, buffers = []) {
363
+ return { ok: true, payloadJson: JSON.stringify(value), buffers };
364
+ }
365
+ function failure(errorCode, retryable) {
366
+ return { ok: false, payloadJson: 'null', buffers: [], errorCode, retryable };
367
+ }
368
+ function object(value) {
369
+ if (typeof value !== 'object' || value === null || Array.isArray(value)) {
370
+ throw new TypeError('identity provider payload must be an object');
371
+ }
372
+ return value;
373
+ }
374
+ function reference(value) {
375
+ const input = object(value);
376
+ if (typeof input.storeId !== 'string'
377
+ || typeof input.identityId !== 'string'
378
+ || typeof input.did !== 'string')
379
+ throw new TypeError('identity provider reference is invalid');
380
+ return { storeId: input.storeId, identityId: input.identityId, did: input.did };
381
+ }
382
+ function signingPurpose(payload) {
383
+ const selected = typeof payload.kid === 'string' ? { kid: payload.kid } : {};
384
+ if (payload.purpose === 'authentication')
385
+ return { purpose: 'authentication', ...selected };
386
+ if (payload.purpose === 'device_assertion')
387
+ return { purpose: 'device_assertion', ...selected };
388
+ if (payload.purpose === 'application_assertion' && typeof payload.domain === 'string') {
389
+ return { purpose: 'application_assertion', domain: payload.domain, ...selected };
390
+ }
391
+ throw new TypeError('identity provider signing purpose is invalid');
392
+ }
393
+ function exactBuffers(buffers, count) {
394
+ if (buffers.length !== count || buffers.some(buffer => !Buffer.isBuffer(buffer))) {
395
+ throw new TypeError('identity provider binary payload is invalid');
396
+ }
397
+ }
398
+ function singleBuffer(buffers) {
399
+ exactBuffers(buffers, 1);
400
+ const buffer = buffers[0];
401
+ if (buffer === undefined)
402
+ throw new TypeError('identity provider binary payload is invalid');
403
+ return buffer;
404
+ }
405
+ function pairBuffers(buffers) {
406
+ exactBuffers(buffers, 2);
407
+ const [first, second] = buffers;
408
+ if (first === undefined || second === undefined) {
409
+ throw new TypeError('identity provider binary payload is invalid');
410
+ }
411
+ return [first, second];
412
+ }
413
+ function errorCode(error) {
414
+ if (error instanceof TypeError || error instanceof SyntaxError)
415
+ return 'invalid_request';
416
+ if (typeof error === 'object' && error !== null && 'code' in error && typeof error.code === 'string') {
417
+ return error.code;
418
+ }
419
+ return 'provider_unavailable';
420
+ }
421
+ function errorRetryable(error) {
422
+ if (typeof error === 'object' && error !== null && 'retryable' in error) {
423
+ return error.retryable === true;
424
+ }
425
+ return errorCode(error) === 'provider_unavailable';
426
+ }
427
+ //# sourceMappingURL=provider-bridge.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"provider-bridge.js","sourceRoot":"","sources":["../src/provider-bridge.ts"],"names":[],"mappings":"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"}