@dxos/client-services 0.1.5 → 0.1.7

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.
Files changed (164) hide show
  1. package/LICENSE +5 -18
  2. package/README.md +14 -10
  3. package/README.yml +5 -0
  4. package/dist/src/packlets/deprecated/profile.d.ts +2 -5
  5. package/dist/src/packlets/deprecated/profile.d.ts.map +1 -1
  6. package/dist/src/packlets/deprecated/profile.js +1 -73
  7. package/dist/src/packlets/deprecated/profile.js.map +1 -1
  8. package/dist/src/packlets/deprecated/system.d.ts +4 -0
  9. package/dist/src/packlets/deprecated/system.d.ts.map +1 -1
  10. package/dist/src/packlets/deprecated/system.js +6 -0
  11. package/dist/src/packlets/deprecated/system.js.map +1 -1
  12. package/dist/src/packlets/deprecated/tracing.d.ts +1 -1
  13. package/dist/src/packlets/deprecated/tracing.js +1 -1
  14. package/dist/src/packlets/devtools/devtools.d.ts +3 -0
  15. package/dist/src/packlets/devtools/devtools.d.ts.map +1 -1
  16. package/dist/src/packlets/devtools/devtools.js +3 -1
  17. package/dist/src/packlets/devtools/devtools.js.map +1 -1
  18. package/dist/src/packlets/devtools/feeds.d.ts.map +1 -1
  19. package/dist/src/packlets/devtools/feeds.js +5 -3
  20. package/dist/src/packlets/devtools/feeds.js.map +1 -1
  21. package/dist/src/packlets/identity/devices-service-impl.d.ts.map +1 -1
  22. package/dist/src/packlets/identity/devices-service-impl.js.map +1 -1
  23. package/dist/src/packlets/identity/identity-manager.d.ts +2 -2
  24. package/dist/src/packlets/identity/identity-manager.d.ts.map +1 -1
  25. package/dist/src/packlets/identity/identity-manager.js +44 -43
  26. package/dist/src/packlets/identity/identity-manager.js.map +1 -1
  27. package/dist/src/packlets/identity/identity.d.ts +3 -0
  28. package/dist/src/packlets/identity/identity.d.ts.map +1 -1
  29. package/dist/src/packlets/identity/identity.js +51 -1
  30. package/dist/src/packlets/identity/identity.js.map +1 -1
  31. package/dist/src/packlets/invitations/halo-invitations-handler.d.ts +23 -0
  32. package/dist/src/packlets/invitations/halo-invitations-handler.d.ts.map +1 -0
  33. package/dist/src/packlets/invitations/halo-invitations-handler.js +231 -0
  34. package/dist/src/packlets/invitations/halo-invitations-handler.js.map +1 -0
  35. package/dist/src/packlets/invitations/halo-invitations-handler.test.d.ts +2 -0
  36. package/dist/src/packlets/invitations/halo-invitations-handler.test.d.ts.map +1 -0
  37. package/dist/src/packlets/invitations/halo-invitations-handler.test.js +69 -0
  38. package/dist/src/packlets/invitations/halo-invitations-handler.test.js.map +1 -0
  39. package/dist/src/packlets/invitations/halo-invitations-proxy.d.ts +8 -0
  40. package/dist/src/packlets/invitations/halo-invitations-proxy.d.ts.map +1 -0
  41. package/dist/src/packlets/invitations/halo-invitations-proxy.js +17 -0
  42. package/dist/src/packlets/invitations/halo-invitations-proxy.js.map +1 -0
  43. package/dist/src/packlets/invitations/halo-invitations-service.d.ts +13 -0
  44. package/dist/src/packlets/invitations/halo-invitations-service.d.ts.map +1 -0
  45. package/dist/src/packlets/invitations/halo-invitations-service.js +20 -0
  46. package/dist/src/packlets/invitations/halo-invitations-service.js.map +1 -0
  47. package/dist/src/packlets/invitations/halo-invitations-service.test.d.ts +2 -0
  48. package/dist/src/packlets/invitations/halo-invitations-service.test.d.ts.map +1 -0
  49. package/dist/src/packlets/invitations/halo-invitations-service.test.js +83 -0
  50. package/dist/src/packlets/invitations/halo-invitations-service.test.js.map +1 -0
  51. package/dist/src/packlets/invitations/index.d.ts +5 -1
  52. package/dist/src/packlets/invitations/index.d.ts.map +1 -1
  53. package/dist/src/packlets/invitations/index.js +5 -1
  54. package/dist/src/packlets/invitations/index.js.map +1 -1
  55. package/dist/src/packlets/invitations/invitations-handler.d.ts +48 -0
  56. package/dist/src/packlets/invitations/invitations-handler.d.ts.map +1 -0
  57. package/dist/src/packlets/invitations/invitations-handler.js +18 -0
  58. package/dist/src/packlets/invitations/invitations-handler.js.map +1 -0
  59. package/dist/src/packlets/invitations/invitations-proxy.d.ts +11 -7
  60. package/dist/src/packlets/invitations/invitations-proxy.d.ts.map +1 -1
  61. package/dist/src/packlets/invitations/invitations-proxy.js +5 -10
  62. package/dist/src/packlets/invitations/invitations-proxy.js.map +1 -1
  63. package/dist/src/packlets/invitations/invitations-service.d.ts +25 -0
  64. package/dist/src/packlets/invitations/invitations-service.d.ts.map +1 -0
  65. package/dist/src/packlets/invitations/invitations-service.js +174 -0
  66. package/dist/src/packlets/invitations/invitations-service.js.map +1 -0
  67. package/dist/src/packlets/invitations/invitations.d.ts +10 -42
  68. package/dist/src/packlets/invitations/invitations.d.ts.map +1 -1
  69. package/dist/src/packlets/invitations/invitations.js +5 -2
  70. package/dist/src/packlets/invitations/invitations.js.map +1 -1
  71. package/dist/src/packlets/invitations/space-invitations-handler.d.ts +6 -6
  72. package/dist/src/packlets/invitations/space-invitations-handler.d.ts.map +1 -1
  73. package/dist/src/packlets/invitations/space-invitations-handler.js +18 -19
  74. package/dist/src/packlets/invitations/space-invitations-handler.js.map +1 -1
  75. package/dist/src/packlets/invitations/space-invitations-handler.test.js +5 -5
  76. package/dist/src/packlets/invitations/space-invitations-handler.test.js.map +1 -1
  77. package/dist/src/packlets/invitations/space-invitations-proxy.d.ts +1 -1
  78. package/dist/src/packlets/invitations/space-invitations-proxy.d.ts.map +1 -1
  79. package/dist/src/packlets/invitations/space-invitations-proxy.js +2 -2
  80. package/dist/src/packlets/invitations/space-invitations-proxy.js.map +1 -1
  81. package/dist/src/packlets/invitations/space-invitations-service.d.ts +8 -14
  82. package/dist/src/packlets/invitations/space-invitations-service.d.ts.map +1 -1
  83. package/dist/src/packlets/invitations/space-invitations-service.js +11 -169
  84. package/dist/src/packlets/invitations/space-invitations-service.js.map +1 -1
  85. package/dist/src/packlets/invitations/space-invitations-service.test.js +4 -4
  86. package/dist/src/packlets/invitations/space-invitations-service.test.js.map +1 -1
  87. package/dist/src/packlets/services/service-context.d.ts +2 -2
  88. package/dist/src/packlets/services/service-context.d.ts.map +1 -1
  89. package/dist/src/packlets/services/service-context.js +8 -8
  90. package/dist/src/packlets/services/service-context.js.map +1 -1
  91. package/dist/src/packlets/services/service-definitions.d.ts +5 -4
  92. package/dist/src/packlets/services/service-definitions.d.ts.map +1 -1
  93. package/dist/src/packlets/services/service-definitions.js +6 -4
  94. package/dist/src/packlets/services/service-definitions.js.map +1 -1
  95. package/dist/src/packlets/services/service-host.d.ts.map +1 -1
  96. package/dist/src/packlets/services/service-host.js +10 -8
  97. package/dist/src/packlets/services/service-host.js.map +1 -1
  98. package/dist/src/packlets/services/service-proxy.js +1 -1
  99. package/dist/src/packlets/services/service-registry.test.js +2 -2
  100. package/dist/src/packlets/services/service-registry.test.js.map +1 -1
  101. package/dist/src/packlets/vault/iframe-runtime.d.ts +5 -4
  102. package/dist/src/packlets/vault/iframe-runtime.d.ts.map +1 -1
  103. package/dist/src/packlets/vault/iframe-runtime.js +4 -12
  104. package/dist/src/packlets/vault/iframe-runtime.js.map +1 -1
  105. package/dist/src/packlets/vault/worker-runtime.d.ts +4 -3
  106. package/dist/src/packlets/vault/worker-runtime.d.ts.map +1 -1
  107. package/dist/src/packlets/vault/worker-runtime.js +29 -24
  108. package/dist/src/packlets/vault/worker-runtime.js.map +1 -1
  109. package/dist/src/packlets/vault/worker-session.d.ts +5 -2
  110. package/dist/src/packlets/vault/worker-session.d.ts.map +1 -1
  111. package/dist/src/packlets/vault/worker-session.js +23 -10
  112. package/dist/src/packlets/vault/worker-session.js.map +1 -1
  113. package/package.json +26 -26
  114. package/src/packlets/deprecated/profile.ts +2 -84
  115. package/src/packlets/deprecated/system.ts +7 -0
  116. package/src/packlets/deprecated/tracing.ts +1 -1
  117. package/src/packlets/devtools/devtools.ts +3 -1
  118. package/src/packlets/devtools/feeds.ts +5 -3
  119. package/src/packlets/identity/devices-service-impl.ts +0 -1
  120. package/src/packlets/identity/identity-manager.ts +50 -49
  121. package/src/packlets/identity/identity.ts +58 -1
  122. package/src/packlets/invitations/halo-invitations-handler.test.ts +79 -0
  123. package/src/packlets/invitations/halo-invitations-handler.ts +255 -0
  124. package/src/packlets/invitations/halo-invitations-proxy.ts +14 -0
  125. package/src/packlets/invitations/halo-invitations-service.test.ts +96 -0
  126. package/src/packlets/invitations/halo-invitations-service.ts +24 -0
  127. package/src/packlets/invitations/index.ts +5 -1
  128. package/src/packlets/invitations/invitations-handler.ts +59 -0
  129. package/src/packlets/invitations/invitations-proxy.ts +15 -13
  130. package/src/packlets/invitations/invitations-service.ts +184 -0
  131. package/src/packlets/invitations/invitations.ts +14 -46
  132. package/src/packlets/invitations/space-invitations-handler.test.ts +6 -6
  133. package/src/packlets/invitations/space-invitations-handler.ts +16 -16
  134. package/src/packlets/invitations/space-invitations-proxy.ts +2 -2
  135. package/src/packlets/invitations/space-invitations-service.test.ts +13 -13
  136. package/src/packlets/invitations/space-invitations-service.ts +16 -177
  137. package/src/packlets/services/service-context.ts +6 -6
  138. package/src/packlets/services/service-definitions.ts +20 -10
  139. package/src/packlets/services/service-host.ts +15 -7
  140. package/src/packlets/services/service-proxy.ts +1 -1
  141. package/src/packlets/services/service-registry.test.ts +5 -5
  142. package/src/packlets/vault/iframe-runtime.ts +8 -15
  143. package/src/packlets/vault/worker-runtime.ts +36 -30
  144. package/src/packlets/vault/worker-session.ts +20 -6
  145. package/dist/src/packlets/invitations/halo-invitations.d.ts +0 -23
  146. package/dist/src/packlets/invitations/halo-invitations.d.ts.map +0 -1
  147. package/dist/src/packlets/invitations/halo-invitations.js +0 -154
  148. package/dist/src/packlets/invitations/halo-invitations.js.map +0 -1
  149. package/dist/src/packlets/invitations/halo-invitations.test.d.ts +0 -2
  150. package/dist/src/packlets/invitations/halo-invitations.test.d.ts.map +0 -1
  151. package/dist/src/packlets/invitations/halo-invitations.test.js +0 -34
  152. package/dist/src/packlets/invitations/halo-invitations.test.js.map +0 -1
  153. package/dist/src/packlets/services/iframe-service-proxy.d.ts +0 -23
  154. package/dist/src/packlets/services/iframe-service-proxy.d.ts.map +0 -1
  155. package/dist/src/packlets/services/iframe-service-proxy.js +0 -53
  156. package/dist/src/packlets/services/iframe-service-proxy.js.map +0 -1
  157. package/dist/src/packlets/services/service-host.test.d.ts +0 -2
  158. package/dist/src/packlets/services/service-host.test.d.ts.map +0 -1
  159. package/dist/src/packlets/services/service-host.test.js +0 -68
  160. package/dist/src/packlets/services/service-host.test.js.map +0 -1
  161. package/src/packlets/invitations/halo-invitations.test.ts +0 -40
  162. package/src/packlets/invitations/halo-invitations.ts +0 -164
  163. package/src/packlets/services/iframe-service-proxy.ts +0 -71
  164. package/src/packlets/services/service-host.test.ts +0 -76
@@ -11,6 +11,9 @@ const assert_1 = __importDefault(require("assert"));
11
11
  const async_1 = require("@dxos/async");
12
12
  const credentials_1 = require("@dxos/credentials");
13
13
  const debug_1 = require("@dxos/debug");
14
+ const feed_store_1 = require("@dxos/feed-store");
15
+ const log_1 = require("@dxos/log");
16
+ const credentials_2 = require("@dxos/protocols/proto/dxos/halo/credentials");
14
17
  /**
15
18
  * Agent identity manager, which includes the agent's Halo space.
16
19
  */
@@ -22,7 +25,7 @@ class Identity {
22
25
  this.identityKey = identityKey;
23
26
  this.deviceKey = deviceKey;
24
27
  this._deviceStateMachine = new credentials_1.DeviceStateMachine(this.identityKey, this.deviceKey);
25
- // Save device key chain credential when processed by the space state machine.
28
+ // Save device keychain credential when processed by the space state machine.
26
29
  this._space.onCredentialProcessed.set(async (credential) => {
27
30
  await this._deviceStateMachine.process(credential);
28
31
  this.stateUpdate.emit();
@@ -58,6 +61,13 @@ class Identity {
58
61
  var _a;
59
62
  return (_a = this._space.database) !== null && _a !== void 0 ? _a : (0, debug_1.failUndefined)();
60
63
  }
64
+ getAdmissionCredentials() {
65
+ return {
66
+ deviceKey: this.deviceKey,
67
+ controlFeedKey: this._space.controlFeedKey,
68
+ dataFeedKey: this._space.dataFeedKey
69
+ };
70
+ }
61
71
  /**
62
72
  * Issues credentials as identity.
63
73
  * Requires identity to be ready.
@@ -72,6 +82,46 @@ class Identity {
72
82
  getDeviceCredentialSigner() {
73
83
  return (0, credentials_1.createCredentialSignerWithKey)(this._signer, this.deviceKey);
74
84
  }
85
+ async admitDevice({ deviceKey, controlFeedKey, dataFeedKey }) {
86
+ (0, log_1.log)('Admitting device:', {
87
+ identityKey: this.identityKey,
88
+ hostDevice: this.deviceKey,
89
+ deviceKey,
90
+ controlFeedKey,
91
+ dataFeedKey
92
+ }, { file: "packages/sdk/client-services/src/packlets/identity/identity.ts", line: 128 });
93
+ const signer = this.getIdentityCredentialSigner();
94
+ await (0, feed_store_1.writeMessages)(this.controlPipeline.writer, [
95
+ await signer.createCredential({
96
+ subject: deviceKey,
97
+ assertion: {
98
+ '@type': 'dxos.halo.credentials.AuthorizedDevice',
99
+ identityKey: this.identityKey,
100
+ deviceKey
101
+ }
102
+ }),
103
+ await signer.createCredential({
104
+ subject: controlFeedKey,
105
+ assertion: {
106
+ '@type': 'dxos.halo.credentials.AdmittedFeed',
107
+ spaceKey: this.haloSpaceKey,
108
+ deviceKey,
109
+ identityKey: this.identityKey,
110
+ designation: credentials_2.AdmittedFeed.Designation.CONTROL
111
+ }
112
+ }),
113
+ await signer.createCredential({
114
+ subject: dataFeedKey,
115
+ assertion: {
116
+ '@type': 'dxos.halo.credentials.AdmittedFeed',
117
+ spaceKey: this.haloSpaceKey,
118
+ deviceKey,
119
+ identityKey: this.identityKey,
120
+ designation: credentials_2.AdmittedFeed.Designation.DATA
121
+ }
122
+ })
123
+ ].map((credential) => ({ '@type': 'dxos.echo.feed.CredentialsMessage', credential })));
124
+ }
75
125
  }
76
126
  exports.Identity = Identity;
77
127
  //# sourceMappingURL=identity.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"identity.js","sourceRoot":"","sources":["../../../../src/packlets/identity/identity.ts"],"names":[],"mappings":";AAAA,EAAE;AACF,0BAA0B;AAC1B,EAAE;;;;;;AAEF,oDAA4B;AAE5B,uCAAoC;AACpC,mDAK2B;AAE3B,uCAA4C;AAY5C;;GAEG;AACH,MAAa,QAAQ;IAUnB,YAAY,EAAE,KAAK,EAAE,MAAM,EAAE,WAAW,EAAE,SAAS,EAAkB;QAFrD,gBAAW,GAAG,IAAI,aAAK,EAAE,CAAC;QAGxC,IAAI,CAAC,MAAM,GAAG,KAAK,CAAC;QACpB,IAAI,CAAC,OAAO,GAAG,MAAM,CAAC;QAEtB,IAAI,CAAC,WAAW,GAAG,WAAW,CAAC;QAC/B,IAAI,CAAC,SAAS,GAAG,SAAS,CAAC;QAE3B,IAAI,CAAC,mBAAmB,GAAG,IAAI,gCAAkB,CAAC,IAAI,CAAC,WAAW,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC;QAEpF,8EAA8E;QAC9E,IAAI,CAAC,MAAM,CAAC,qBAAqB,CAAC,GAAG,CAAC,KAAK,EAAE,UAAU,EAAE,EAAE;YACzD,MAAM,IAAI,CAAC,mBAAmB,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;YACnD,IAAI,CAAC,WAAW,CAAC,IAAI,EAAE,CAAC;QAC1B,CAAC,CAAC,CAAC;IACL,CAAC;IAED,qCAAqC;IACrC,IAAI,oBAAoB;QACtB,OAAO,IAAI,CAAC,mBAAmB,CAAC,oBAAoB,CAAC;IACvD,CAAC;IAED,KAAK,CAAC,IAAI;QACR,MAAM,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC;IAC3B,CAAC;IAED,KAAK,CAAC,KAAK;QACT,MAAM,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC;IAC5B,CAAC;IAED,KAAK,CAAC,KAAK;QACT,MAAM,IAAI,CAAC,mBAAmB,CAAC,gBAAgB,CAAC,IAAI,EAAE,CAAC;QAEvD,sEAAsE;IACxE,CAAC;IAED;;OAEG;IACH,IAAI,eAAe;QACjB,OAAO,IAAI,CAAC,MAAM,CAAC,eAAe,CAAC;IACrC,CAAC;IAED,IAAI,YAAY;QACd,OAAO,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC;IACzB,CAAC;IAED,IAAI,kBAAkB;QACpB,OAAO,IAAI,CAAC,MAAM,CAAC,cAAc,CAAC;IACpC,CAAC;IAED,IAAI,YAAY;;QACd,OAAO,MAAA,IAAI,CAAC,MAAM,CAAC,QAAQ,mCAAI,IAAA,qBAAa,GAAE,CAAC;IACjD,CAAC;IAED;;;OAGG;IACH,2BAA2B;QACzB,IAAA,gBAAM,EAAC,IAAI,CAAC,mBAAmB,CAAC,qBAAqB,EAAE,uCAAuC,CAAC,CAAC;QAChG,OAAO,IAAA,6CAA+B,EACpC,IAAI,CAAC,OAAO,EACZ,IAAI,CAAC,mBAAmB,CAAC,qBAAqB,EAC9C,IAAI,CAAC,SAAS,CACf,CAAC;IACJ,CAAC;IAED;;OAEG;IACH,yBAAyB;QACvB,OAAO,IAAA,2CAA6B,EAAC,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC;IACrE,CAAC;CACF;AAnFD,4BAmFC"}
1
+ {"version":3,"file":"identity.js","sourceRoot":"","sources":["../../../../src/packlets/identity/identity.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,23 @@
1
+ import { NetworkManager } from '@dxos/network-manager';
2
+ import { Invitation } from '@dxos/protocols/proto/dxos/client/services';
3
+ import { IdentityManager } from '../identity';
4
+ import { AuthenticatingInvitationProvider, InvitationObservable } from './invitations';
5
+ import { AbstractInvitationsHandler, InvitationsOptions } from './invitations-handler';
6
+ /**
7
+ * Handles the life-cycle of Halo invitations between peers.
8
+ */
9
+ export declare class HaloInvitationsHandler extends AbstractInvitationsHandler {
10
+ private readonly _identityManager;
11
+ constructor(networkManager: NetworkManager, _identityManager: IdentityManager);
12
+ /**
13
+ * Creates an invitation and listens for a join request from the invited (guest) peer.
14
+ */
15
+ createInvitation(context: void, options?: InvitationsOptions): InvitationObservable;
16
+ /**
17
+ * Waits for the host peer (inviter) to accept our join request.
18
+ * The local guest peer (invitee) then sends the local halo invitation to the host,
19
+ * which then writes the guest's credentials to the halo.
20
+ */
21
+ acceptInvitation(invitation: Invitation, options?: InvitationsOptions): AuthenticatingInvitationProvider;
22
+ }
23
+ //# sourceMappingURL=halo-invitations-handler.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"halo-invitations-handler.d.ts","sourceRoot":"","sources":["../../../../src/packlets/invitations/halo-invitations-handler.ts"],"names":[],"mappings":"AAWA,OAAO,EAAyB,cAAc,EAAiC,MAAM,uBAAuB,CAAC;AAG7G,OAAO,EAAE,UAAU,EAAE,MAAM,4CAA4C,CAAC;AAGxE,OAAO,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAC9C,OAAO,EACL,gCAAgC,EAChC,oBAAoB,EAKrB,MAAM,eAAe,CAAC;AACvB,OAAO,EAAE,0BAA0B,EAAE,kBAAkB,EAAE,MAAM,uBAAuB,CAAC;AAEvF;;GAEG;AAEH,qBAAa,sBAAuB,SAAQ,0BAA0B;IAIlE,OAAO,CAAC,QAAQ,CAAC,gBAAgB;gBADjC,cAAc,EAAE,cAAc,EACb,gBAAgB,EAAE,eAAe;IAKpD;;OAEG;IACH,gBAAgB,CAAC,OAAO,EAAE,IAAI,EAAE,OAAO,CAAC,EAAE,kBAAkB,GAAG,oBAAoB;IA+GnF;;;;OAIG;IACH,gBAAgB,CAAC,UAAU,EAAE,UAAU,EAAE,OAAO,CAAC,EAAE,kBAAkB,GAAG,gCAAgC;CA8FzG"}
@@ -0,0 +1,231 @@
1
+ "use strict";
2
+ //
3
+ // Copyright 2022 DXOS.org
4
+ //
5
+ var __importDefault = (this && this.__importDefault) || function (mod) {
6
+ return (mod && mod.__esModule) ? mod : { "default": mod };
7
+ };
8
+ Object.defineProperty(exports, "__esModule", { value: true });
9
+ exports.HaloInvitationsHandler = void 0;
10
+ const assert_1 = __importDefault(require("assert"));
11
+ const async_1 = require("@dxos/async");
12
+ const credentials_1 = require("@dxos/credentials");
13
+ const debug_1 = require("@dxos/debug");
14
+ const keys_1 = require("@dxos/keys");
15
+ const log_1 = require("@dxos/log");
16
+ const network_manager_1 = require("@dxos/network-manager");
17
+ const protocol_plugin_rpc_1 = require("@dxos/protocol-plugin-rpc");
18
+ const protocols_1 = require("@dxos/protocols");
19
+ const services_1 = require("@dxos/protocols/proto/dxos/client/services");
20
+ const rpc_1 = require("@dxos/rpc");
21
+ const invitations_1 = require("./invitations");
22
+ const invitations_handler_1 = require("./invitations-handler");
23
+ /**
24
+ * Handles the life-cycle of Halo invitations between peers.
25
+ */
26
+ // TODO(dmaretskyi): Split into Host and Guest parts.
27
+ class HaloInvitationsHandler extends invitations_handler_1.AbstractInvitationsHandler {
28
+ // prettier-ignore
29
+ constructor(networkManager, _identityManager) {
30
+ super(networkManager);
31
+ this._identityManager = _identityManager;
32
+ }
33
+ /**
34
+ * Creates an invitation and listens for a join request from the invited (guest) peer.
35
+ */
36
+ createInvitation(context, options) {
37
+ var _a;
38
+ let swarmConnection;
39
+ const { type, timeout = invitations_1.INVITATION_TIMEOUT } = options !== null && options !== void 0 ? options : {};
40
+ (0, assert_1.default)(type !== services_1.Invitation.Type.OFFLINE);
41
+ const identity = (_a = this._identityManager.identity) !== null && _a !== void 0 ? _a : (0, debug_1.failUndefined)();
42
+ const invitation = {
43
+ type,
44
+ invitationId: keys_1.PublicKey.random().toHex(),
45
+ swarmKey: keys_1.PublicKey.random(),
46
+ authenticationCode: (0, credentials_1.generatePasscode)(invitations_1.AUTHENTICATION_CODE_LENGTH)
47
+ };
48
+ // TODO(burdon): Stop anything pending.
49
+ const observable = new invitations_1.InvitationObservableProvider(async () => {
50
+ await (swarmConnection === null || swarmConnection === void 0 ? void 0 : swarmConnection.close());
51
+ });
52
+ let authenticationCode;
53
+ const complete = new async_1.Trigger();
54
+ const plugin = new protocol_plugin_rpc_1.RpcPlugin(async (port) => {
55
+ var _a, _b;
56
+ const peer = (0, rpc_1.createProtoRpcPeer)({
57
+ exposed: {
58
+ HaloHostService: protocols_1.schema.getService('dxos.halo.invitations.HaloHostService')
59
+ },
60
+ handlers: {
61
+ HaloHostService: {
62
+ requestAdmission: async () => {
63
+ var _a, _b;
64
+ (0, log_1.log)('responding with admission offer', {
65
+ host: identity.deviceKey
66
+ }, { file: "packages/sdk/client-services/src/packlets/invitations/halo-invitations-handler.ts", line: 73 });
67
+ // TODO(burdon): Is this the right place to set this state?
68
+ (_b = (_a = observable.callback).onAuthenticating) === null || _b === void 0 ? void 0 : _b.call(_a, invitation);
69
+ return {
70
+ identityKey: identity.identityKey,
71
+ haloSpaceKey: identity.haloSpaceKey,
72
+ genesisFeedKey: identity.haloGenesisFeedKey
73
+ };
74
+ },
75
+ authenticate: async ({ authenticationCode: code }) => {
76
+ (0, log_1.log)('received authentication request', { authenticationCode: code }, { file: "packages/sdk/client-services/src/packlets/invitations/halo-invitations-handler.ts", line: 87 });
77
+ authenticationCode = code;
78
+ },
79
+ // TODO(burdon): Not used: controlFeedKey, dataFeedKey.
80
+ presentAdmissionCredentials: async (credentials) => {
81
+ try {
82
+ // Check authenticated.
83
+ if (invitation.type === undefined || invitation.type === services_1.Invitation.Type.INTERACTIVE) {
84
+ if (invitation.authenticationCode === undefined ||
85
+ authenticationCode !== invitation.authenticationCode) {
86
+ throw new Error('authentication code not set');
87
+ }
88
+ }
89
+ (0, log_1.log)('writing guest credentials', { host: identity.deviceKey, guest: credentials.deviceKey }, { file: "packages/sdk/client-services/src/packlets/invitations/halo-invitations-handler.ts", line: 104 });
90
+ // TODO(burdon): Check if already admitted.
91
+ await identity.admitDevice(credentials);
92
+ // Updating credentials complete.
93
+ complete.wake(credentials.deviceKey);
94
+ }
95
+ catch (err) {
96
+ // TODO(burdon): Generic RPC callback to report error to client.
97
+ observable.callback.onError(err);
98
+ throw err; // Propagate error to guest.
99
+ }
100
+ }
101
+ }
102
+ },
103
+ port
104
+ });
105
+ try {
106
+ await peer.open();
107
+ (0, log_1.log)('connected', { host: identity.deviceKey }, { file: "packages/sdk/client-services/src/packlets/invitations/halo-invitations-handler.ts", line: 123 });
108
+ (_b = (_a = observable.callback).onConnected) === null || _b === void 0 ? void 0 : _b.call(_a, invitation);
109
+ const deviceKey = await complete.wait({ timeout });
110
+ (0, log_1.log)('admitted guest', { host: identity.deviceKey, guest: deviceKey }, { file: "packages/sdk/client-services/src/packlets/invitations/halo-invitations-handler.ts", line: 126 });
111
+ observable.callback.onSuccess(invitation);
112
+ }
113
+ catch (err) {
114
+ if (!observable.cancelled) {
115
+ log_1.log.error('failed', err, { file: "packages/sdk/client-services/src/packlets/invitations/halo-invitations-handler.ts", line: 130 });
116
+ observable.callback.onError(err);
117
+ }
118
+ }
119
+ finally {
120
+ await (0, async_1.sleep)(invitations_1.ON_CLOSE_DELAY);
121
+ await peer.close();
122
+ await swarmConnection.close();
123
+ }
124
+ });
125
+ setTimeout(async () => {
126
+ var _a, _b;
127
+ const topic = invitation.swarmKey;
128
+ const peerId = keys_1.PublicKey.random(); // Use anonymous key.
129
+ swarmConnection = await this._networkManager.openSwarmConnection({
130
+ topic,
131
+ peerId: topic,
132
+ protocol: (0, network_manager_1.createProtocolFactory)(topic, peerId, [plugin]),
133
+ topology: new network_manager_1.StarTopology(topic)
134
+ });
135
+ (_b = (_a = observable.callback).onConnecting) === null || _b === void 0 ? void 0 : _b.call(_a, invitation);
136
+ });
137
+ return observable;
138
+ }
139
+ /**
140
+ * Waits for the host peer (inviter) to accept our join request.
141
+ * The local guest peer (invitee) then sends the local halo invitation to the host,
142
+ * which then writes the guest's credentials to the halo.
143
+ */
144
+ acceptInvitation(invitation, options) {
145
+ const { timeout = invitations_1.INVITATION_TIMEOUT } = options !== null && options !== void 0 ? options : {};
146
+ let swarmConnection;
147
+ const authenticated = new async_1.Trigger();
148
+ const observable = new invitations_1.AuthenticatingInvitationProvider({
149
+ onCancel: async () => {
150
+ await (swarmConnection === null || swarmConnection === void 0 ? void 0 : swarmConnection.close());
151
+ },
152
+ // TODO(burdon): Consider retry.
153
+ onAuthenticate: async (code) => {
154
+ authenticated.wake(code);
155
+ }
156
+ });
157
+ let connectionCount = 0;
158
+ const complete = new async_1.Trigger();
159
+ const plugin = (0, protocol_plugin_rpc_1.createRpcPlugin)(async (port) => {
160
+ var _a, _b, _c, _d;
161
+ const peer = (0, rpc_1.createProtoRpcPeer)({
162
+ requested: {
163
+ HaloHostService: protocols_1.schema.getService('dxos.halo.invitations.HaloHostService')
164
+ },
165
+ port
166
+ });
167
+ try {
168
+ await peer.open();
169
+ // TODO(burdon): Bug where guest may create multiple connections.
170
+ if (++connectionCount > 1) {
171
+ throw new Error(`multiple connections detected: ${connectionCount}`);
172
+ }
173
+ (0, log_1.log)('connected', {}, { file: "packages/sdk/client-services/src/packlets/invitations/halo-invitations-handler.ts", line: 194 });
174
+ (_b = (_a = observable.callback).onConnected) === null || _b === void 0 ? void 0 : _b.call(_a, invitation);
175
+ // 1. Send request.
176
+ (0, log_1.log)('sending admission request', {}, { file: "packages/sdk/client-services/src/packlets/invitations/halo-invitations-handler.ts", line: 198 });
177
+ const { identityKey, haloSpaceKey, genesisFeedKey } = await peer.rpc.HaloHostService.requestAdmission();
178
+ // 2. Get authentication code.
179
+ // TODO(burdon): Test timeout (options for timeouts at different steps).
180
+ if (invitation.type === undefined || invitation.type === services_1.Invitation.Type.INTERACTIVE) {
181
+ (0, log_1.log)('guest waiting for authentication code...', {}, { file: "packages/sdk/client-services/src/packlets/invitations/halo-invitations-handler.ts", line: 204 });
182
+ (_d = (_c = observable.callback).onAuthenticating) === null || _d === void 0 ? void 0 : _d.call(_c, invitation);
183
+ const authenticationCode = await authenticated.wait({ timeout });
184
+ (0, log_1.log)('sending authentication request', {}, { file: "packages/sdk/client-services/src/packlets/invitations/halo-invitations-handler.ts", line: 207 });
185
+ await peer.rpc.HaloHostService.authenticate({ authenticationCode });
186
+ }
187
+ // 3. Create local identity.
188
+ // TODO(burdon): Abandon if does not complete (otherwise retry will fail).
189
+ const identity = await this._identityManager.acceptIdentity({
190
+ identityKey,
191
+ haloSpaceKey,
192
+ haloGenesisFeedKey: genesisFeedKey
193
+ });
194
+ // 4. Send admission credentials to host (with local identity keys).
195
+ (0, log_1.log)('presenting admission credentials', { guest: identity.deviceKey, identityKey }, { file: "packages/sdk/client-services/src/packlets/invitations/halo-invitations-handler.ts", line: 220 });
196
+ await peer.rpc.HaloHostService.presentAdmissionCredentials(identity.getAdmissionCredentials());
197
+ // 5. Success.
198
+ (0, log_1.log)('admitted by host', { guest: identity.deviceKey, identityKey }, { file: "packages/sdk/client-services/src/packlets/invitations/halo-invitations-handler.ts", line: 224 });
199
+ complete.wake(identityKey);
200
+ }
201
+ catch (err) {
202
+ if (!observable.cancelled) {
203
+ log_1.log.warn('failed', err, { file: "packages/sdk/client-services/src/packlets/invitations/halo-invitations-handler.ts", line: 228 });
204
+ observable.callback.onError(err);
205
+ }
206
+ }
207
+ finally {
208
+ await peer.close();
209
+ }
210
+ });
211
+ setTimeout(async () => {
212
+ var _a, _b;
213
+ (0, assert_1.default)(invitation.swarmKey);
214
+ const topic = invitation.swarmKey;
215
+ const peerId = keys_1.PublicKey.random(); // Use anonymous key.
216
+ swarmConnection = await this._networkManager.openSwarmConnection({
217
+ topic,
218
+ peerId: keys_1.PublicKey.random(),
219
+ protocol: (0, network_manager_1.createProtocolFactory)(topic, peerId, [plugin]),
220
+ topology: new network_manager_1.StarTopology(topic)
221
+ });
222
+ (_b = (_a = observable.callback).onConnecting) === null || _b === void 0 ? void 0 : _b.call(_a, invitation);
223
+ invitation.identityKey = await complete.wait();
224
+ observable.callback.onSuccess(invitation);
225
+ await swarmConnection.close();
226
+ });
227
+ return observable;
228
+ }
229
+ }
230
+ exports.HaloInvitationsHandler = HaloInvitationsHandler;
231
+ //# sourceMappingURL=halo-invitations-handler.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"halo-invitations-handler.js","sourceRoot":"","sources":["../../../../src/packlets/invitations/halo-invitations-handler.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=halo-invitations-handler.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"halo-invitations-handler.test.d.ts","sourceRoot":"","sources":["../../../../src/packlets/invitations/halo-invitations-handler.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,69 @@
1
+ "use strict";
2
+ //
3
+ // Copyright 2022 DXOS.org
4
+ //
5
+ var __importDefault = (this && this.__importDefault) || function (mod) {
6
+ return (mod && mod.__esModule) ? mod : { "default": mod };
7
+ };
8
+ Object.defineProperty(exports, "__esModule", { value: true });
9
+ const assert_1 = __importDefault(require("assert"));
10
+ const chai_1 = require("chai");
11
+ const async_1 = require("@dxos/async");
12
+ const debug_1 = require("@dxos/debug");
13
+ const testutils_1 = require("@dxos/testutils");
14
+ const testing_1 = require("../testing");
15
+ const closeAfterTest = async (peer) => {
16
+ (0, testutils_1.afterTest)(() => peer.close());
17
+ return peer;
18
+ };
19
+ describe('services/halo', function () {
20
+ it('creates identity', async function () {
21
+ const peer = (0, testing_1.createServiceContext)();
22
+ await peer.open();
23
+ (0, testutils_1.afterTest)(() => peer.close());
24
+ const identity = await peer.createIdentity();
25
+ (0, chai_1.expect)(identity).not.to.be.undefined;
26
+ });
27
+ it('creates and accepts invitation', async function () {
28
+ const [host, guest] = await (0, async_1.asyncChain)([closeAfterTest])((0, testing_1.createPeers)(2));
29
+ const identity1 = await host.createIdentity();
30
+ (0, chai_1.expect)(host.identityManager.identity).to.eq(identity1);
31
+ const observable1 = await host.haloInvitations.createInvitation();
32
+ const complete1 = new async_1.Trigger();
33
+ const complete2 = new async_1.Trigger();
34
+ const authenticationCode = new async_1.Trigger();
35
+ observable1.subscribe({
36
+ onConnecting: async (invitation1) => {
37
+ const observable2 = guest.haloInvitations.acceptInvitation(invitation1);
38
+ observable2.subscribe({
39
+ onConnecting: async () => { },
40
+ onConnected: async (invitation2) => {
41
+ (0, chai_1.expect)(invitation1.swarmKey).to.eq(invitation2.swarmKey);
42
+ },
43
+ onAuthenticating: async () => {
44
+ await observable2.authenticate(await authenticationCode.wait());
45
+ },
46
+ onSuccess: (invitation) => {
47
+ complete2.wake(invitation.identityKey);
48
+ },
49
+ onCancelled: () => (0, debug_1.raise)(new Error()),
50
+ onTimeout: (err) => (0, debug_1.raise)(new Error(err.message)),
51
+ onError: (err) => (0, debug_1.raise)(new Error(err.message))
52
+ });
53
+ },
54
+ onConnected: (invitation) => {
55
+ (0, assert_1.default)(invitation.authenticationCode);
56
+ authenticationCode.wake(invitation.authenticationCode);
57
+ },
58
+ onSuccess: (invitation) => {
59
+ complete1.wake(host.identityManager.identity.identityKey);
60
+ },
61
+ onCancelled: () => (0, debug_1.raise)(new Error()),
62
+ onTimeout: (err) => (0, debug_1.raise)(new Error(err.message)),
63
+ onError: (err) => (0, debug_1.raise)(new Error(err.message))
64
+ });
65
+ const [identityKey1, identityKey2] = await Promise.all([complete1.wait(), complete2.wait()]);
66
+ (0, chai_1.expect)(identityKey1).to.deep.eq(identityKey2);
67
+ });
68
+ });
69
+ //# sourceMappingURL=halo-invitations-handler.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"halo-invitations-handler.test.js","sourceRoot":"","sources":["../../../../src/packlets/invitations/halo-invitations-handler.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,8 @@
1
+ import { AbstractInvitationsProxy } from './invitations-proxy';
2
+ /**
3
+ * Adapts invitation service observable to client/service stream.
4
+ */
5
+ export declare class HaloInvitationsProxy extends AbstractInvitationsProxy {
6
+ getInvitationOptions(): {};
7
+ }
8
+ //# sourceMappingURL=halo-invitations-proxy.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"halo-invitations-proxy.d.ts","sourceRoot":"","sources":["../../../../src/packlets/invitations/halo-invitations-proxy.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,wBAAwB,EAAE,MAAM,qBAAqB,CAAC;AAE/D;;GAEG;AACH,qBAAa,oBAAqB,SAAQ,wBAAwB;IAChE,oBAAoB;CAGrB"}
@@ -0,0 +1,17 @@
1
+ "use strict";
2
+ //
3
+ // Copyright 2022 DXOS.org
4
+ //
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.HaloInvitationsProxy = void 0;
7
+ const invitations_proxy_1 = require("./invitations-proxy");
8
+ /**
9
+ * Adapts invitation service observable to client/service stream.
10
+ */
11
+ class HaloInvitationsProxy extends invitations_proxy_1.AbstractInvitationsProxy {
12
+ getInvitationOptions() {
13
+ return {};
14
+ }
15
+ }
16
+ exports.HaloInvitationsProxy = HaloInvitationsProxy;
17
+ //# sourceMappingURL=halo-invitations-proxy.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"halo-invitations-proxy.js","sourceRoot":"","sources":["../../../../src/packlets/invitations/halo-invitations-proxy.ts"],"names":[],"mappings":";AAAA,EAAE;AACF,0BAA0B;AAC1B,EAAE;;;AAEF,2DAA+D;AAE/D;;GAEG;AACH,MAAa,oBAAqB,SAAQ,4CAAwB;IAChE,oBAAoB;QAClB,OAAO,EAAE,CAAC;IACZ,CAAC;CACF;AAJD,oDAIC"}
@@ -0,0 +1,13 @@
1
+ import { Invitation } from '@dxos/protocols/proto/dxos/client/services';
2
+ import { IdentityManager } from '../identity';
3
+ import { InvitationsHandler } from './invitations-handler';
4
+ import { AbstractInvitationsService } from './invitations-service';
5
+ /**
6
+ * Adapts invitation service observable to client/service stream.
7
+ */
8
+ export declare class HaloInvitationsServiceImpl extends AbstractInvitationsService {
9
+ private readonly invitationsHandler;
10
+ constructor(identityManager: IdentityManager, invitationsHandler: InvitationsHandler);
11
+ getContext(invitation: Invitation): void;
12
+ }
13
+ //# sourceMappingURL=halo-invitations-service.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"halo-invitations-service.d.ts","sourceRoot":"","sources":["../../../../src/packlets/invitations/halo-invitations-service.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,UAAU,EAAE,MAAM,4CAA4C,CAAC;AAExE,OAAO,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAC9C,OAAO,EAAE,kBAAkB,EAAE,MAAM,uBAAuB,CAAC;AAC3D,OAAO,EAAE,0BAA0B,EAAE,MAAM,uBAAuB,CAAC;AAEnE;;GAEG;AACH,qBAAa,0BAA2B,SAAQ,0BAA0B;IAItE,OAAO,CAAC,QAAQ,CAAC,kBAAkB;gBADnC,eAAe,EAAE,eAAe,EACf,kBAAkB,EAAE,kBAAkB;IAKhD,UAAU,CAAC,UAAU,EAAE,UAAU;CAC3C"}
@@ -0,0 +1,20 @@
1
+ "use strict";
2
+ //
3
+ // Copyright 2022 DXOS.org
4
+ //
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.HaloInvitationsServiceImpl = void 0;
7
+ const invitations_service_1 = require("./invitations-service");
8
+ /**
9
+ * Adapts invitation service observable to client/service stream.
10
+ */
11
+ class HaloInvitationsServiceImpl extends invitations_service_1.AbstractInvitationsService {
12
+ // prettier-ignore
13
+ constructor(identityManager, invitationsHandler) {
14
+ super(identityManager, () => invitationsHandler);
15
+ this.invitationsHandler = invitationsHandler;
16
+ }
17
+ getContext(invitation) { }
18
+ }
19
+ exports.HaloInvitationsServiceImpl = HaloInvitationsServiceImpl;
20
+ //# sourceMappingURL=halo-invitations-service.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"halo-invitations-service.js","sourceRoot":"","sources":["../../../../src/packlets/invitations/halo-invitations-service.ts"],"names":[],"mappings":";AAAA,EAAE;AACF,0BAA0B;AAC1B,EAAE;;;AAMF,+DAAmE;AAEnE;;GAEG;AACH,MAAa,0BAA2B,SAAQ,gDAA0B;IACxE,kBAAkB;IAClB,YACE,eAAgC,EACf,kBAAsC;QAEvD,KAAK,CAAC,eAAe,EAAE,GAAG,EAAE,CAAC,kBAAkB,CAAC,CAAC;QAFhC,uBAAkB,GAAlB,kBAAkB,CAAoB;IAGzD,CAAC;IAEQ,UAAU,CAAC,UAAsB,IAAG,CAAC;CAC/C;AAVD,gEAUC"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=halo-invitations-service.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"halo-invitations-service.test.d.ts","sourceRoot":"","sources":["../../../../src/packlets/invitations/halo-invitations-service.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,83 @@
1
+ "use strict";
2
+ //
3
+ // Copyright 2022 DXOS.org
4
+ //
5
+ var __importDefault = (this && this.__importDefault) || function (mod) {
6
+ return (mod && mod.__esModule) ? mod : { "default": mod };
7
+ };
8
+ Object.defineProperty(exports, "__esModule", { value: true });
9
+ const assert_1 = __importDefault(require("assert"));
10
+ const chai_1 = require("chai");
11
+ const wait_for_expect_1 = __importDefault(require("wait-for-expect"));
12
+ const async_1 = require("@dxos/async");
13
+ const debug_1 = require("@dxos/debug");
14
+ const services_1 = require("@dxos/protocols/proto/dxos/client/services");
15
+ const testutils_1 = require("@dxos/testutils");
16
+ const testing_1 = require("../testing");
17
+ const halo_invitations_proxy_1 = require("./halo-invitations-proxy");
18
+ const halo_invitations_service_1 = require("./halo-invitations-service");
19
+ const closeAfterTest = async (peer) => {
20
+ (0, testutils_1.afterTest)(() => peer.close());
21
+ return peer;
22
+ };
23
+ describe('services/halo-invitation-service', function () {
24
+ it('creates identity and invites peer', async function () {
25
+ const [host, guest] = await (0, async_1.asyncChain)([closeAfterTest])((0, testing_1.createPeers)(2));
26
+ await host.identityManager.createIdentity();
27
+ (0, chai_1.expect)(host.identityManager.identity.authorizedDeviceKeys.size).to.eq(1);
28
+ // prettier-ignore
29
+ const service1 = new halo_invitations_service_1.HaloInvitationsServiceImpl(host.identityManager, host.haloInvitations);
30
+ // prettier-ignore
31
+ const service2 = new halo_invitations_service_1.HaloInvitationsServiceImpl(guest.identityManager, guest.haloInvitations);
32
+ const success1 = new async_1.Trigger();
33
+ const success2 = new async_1.Trigger();
34
+ const authenticationCode = new async_1.Trigger();
35
+ {
36
+ const proxy1 = new halo_invitations_proxy_1.HaloInvitationsProxy(service1);
37
+ const observable1 = proxy1.createInvitation();
38
+ observable1.subscribe({
39
+ onConnecting: (invitation) => {
40
+ const proxy2 = new halo_invitations_proxy_1.HaloInvitationsProxy(service2);
41
+ const observable2 = proxy2.acceptInvitation(invitation);
42
+ observable2.subscribe({
43
+ onAuthenticating: async () => {
44
+ await observable2.authenticate(await authenticationCode.wait());
45
+ },
46
+ onSuccess: (invitation) => {
47
+ // TODO(burdon): No device.
48
+ // expect(guest.identityManager.identity!.authorizedDeviceKeys.size).to.eq(1);
49
+ success2.wake(invitation);
50
+ },
51
+ onError: (err) => (0, debug_1.raise)(new Error(err.message))
52
+ });
53
+ },
54
+ onConnected: (invitation) => {
55
+ (0, assert_1.default)(invitation.authenticationCode);
56
+ authenticationCode.wake(invitation.authenticationCode);
57
+ },
58
+ onSuccess: (invitation) => {
59
+ success1.wake(invitation);
60
+ },
61
+ onCancelled: () => (0, debug_1.raise)(new Error()),
62
+ onTimeout: (err) => (0, debug_1.raise)(new Error(err.message)),
63
+ onError: (err) => (0, debug_1.raise)(new Error(err.message))
64
+ });
65
+ }
66
+ // Check same identity.
67
+ const [invitation1, invitation2] = await Promise.all([success1.wait(), success2.wait()]);
68
+ (0, chai_1.expect)(invitation1.identityKey).not.to.exist;
69
+ (0, chai_1.expect)(invitation2.identityKey).to.deep.eq(host.identityManager.identity.identityKey);
70
+ (0, chai_1.expect)(invitation2.identityKey).to.deep.eq(guest.identityManager.identity.identityKey);
71
+ (0, chai_1.expect)(invitation1.state).to.eq(services_1.Invitation.State.SUCCESS);
72
+ (0, chai_1.expect)(invitation2.state).to.eq(services_1.Invitation.State.SUCCESS);
73
+ // Check devices.
74
+ // TODO(burdon): Incorrect number of devices.
75
+ await (0, wait_for_expect_1.default)(() => {
76
+ (0, chai_1.expect)(host.identityManager.identity.authorizedDeviceKeys.size).to.eq(2);
77
+ (0, chai_1.expect)(guest.identityManager.identity.authorizedDeviceKeys.size).to.eq(2);
78
+ });
79
+ // console.log(host.identityManager.identity!.authorizedDeviceKeys.size);
80
+ // console.log(guest.identityManager.identity!.authorizedDeviceKeys.size);
81
+ });
82
+ });
83
+ //# sourceMappingURL=halo-invitations-service.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"halo-invitations-service.test.js","sourceRoot":"","sources":["../../../../src/packlets/invitations/halo-invitations-service.test.ts"],"names":[],"mappings":"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"}