memeloop 0.2.1 → 0.2.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -21,9 +21,12 @@ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: tru
21
21
  var device_network_entry_exports = {};
22
22
  __export(device_network_entry_exports, {
23
23
  ChatSyncEngine: () => ChatSyncEngine,
24
+ DEVICE_BINDING_SIGNATURE_DOMAIN: () => DEVICE_BINDING_SIGNATURE_DOMAIN,
25
+ DEVICE_CONNECTION_GRANT_SIGNATURE_DOMAIN: () => DEVICE_CONNECTION_GRANT_SIGNATURE_DOMAIN,
24
26
  DEVICE_ORCHESTRATION_PROTOCOL: () => DEVICE_ORCHESTRATION_PROTOCOL,
25
27
  DEVICE_PAIRING_INVITE_PROTOCOL: () => DEVICE_PAIRING_INVITE_PROTOCOL,
26
28
  DEVICE_PAIRING_INVITE_TTL_MS: () => DEVICE_PAIRING_INVITE_TTL_MS,
29
+ DEVICE_RELAY_ADMISSION_SIGNATURE_DOMAIN: () => DEVICE_RELAY_ADMISSION_SIGNATURE_DOMAIN,
27
30
  DeviceCloudConnectionCoordinator: () => DeviceCloudConnectionCoordinator,
28
31
  JsonFrameError: () => JsonFrameError,
29
32
  LIBP2P_RPC_REQUEST_TYPE: () => LIBP2P_RPC_REQUEST_TYPE,
@@ -36,6 +39,9 @@ __export(device_network_entry_exports, {
36
39
  MemoryDeviceSyncStateStore: () => MemoryDeviceSyncStateStore,
37
40
  PeerNodeSyncAdapter: () => PeerNodeSyncAdapter,
38
41
  attachmentBlobFromWire: () => attachmentBlobFromWire,
42
+ buildDeviceBindingMessage: () => buildDeviceBindingMessage,
43
+ buildDeviceConnectionGrantMessage: () => buildDeviceConnectionGrantMessage,
44
+ buildDeviceRelayReservationTokenMessage: () => buildDeviceRelayReservationTokenMessage,
39
45
  canonicalDevicePairingInviteBytes: () => canonicalDevicePairingInviteBytes,
40
46
  computeMissingVersionRanges: () => computeMissingVersionRanges,
41
47
  createDeviceOrchestrationStreamHandler: () => createDeviceOrchestrationStreamHandler,
@@ -278,6 +284,43 @@ var DeviceCloudConnectionCoordinator = class {
278
284
  }
279
285
  };
280
286
 
287
+ // src/device-network/deviceGrantMessages.ts
288
+ var DEVICE_BINDING_SIGNATURE_DOMAIN = "memeloop-device-binding-v2";
289
+ var DEVICE_CONNECTION_GRANT_SIGNATURE_DOMAIN = "memeloop-device-connection-grant-v2";
290
+ var DEVICE_RELAY_ADMISSION_SIGNATURE_DOMAIN = "memeloop-device-relay-admission-v2";
291
+ function buildDeviceBindingMessage(input) {
292
+ return new TextEncoder().encode([
293
+ DEVICE_BINDING_SIGNATURE_DOMAIN,
294
+ `accountId=${input.accountId}`,
295
+ `peerId=${input.peerId}`,
296
+ `publicKey=${input.publicKeyMultibase}`,
297
+ `nonce=${input.nonce}`
298
+ ].join("\n"));
299
+ }
300
+ function buildDeviceConnectionGrantMessage(grant) {
301
+ return new TextEncoder().encode([
302
+ DEVICE_CONNECTION_GRANT_SIGNATURE_DOMAIN,
303
+ `issuer=${grant.issuer}`,
304
+ `accountId=${grant.accountId}`,
305
+ `subjectPeerId=${grant.subjectPeerId}`,
306
+ `allowedPeerIds=${grant.allowedPeerIds.join(",")}`,
307
+ `issuedAt=${grant.issuedAt}`,
308
+ `expiresAt=${grant.expiresAt}`
309
+ ].join("\n"));
310
+ }
311
+ function buildDeviceRelayReservationTokenMessage(token) {
312
+ return new TextEncoder().encode([
313
+ DEVICE_RELAY_ADMISSION_SIGNATURE_DOMAIN,
314
+ `issuer=${token.issuer}`,
315
+ `accountId=${token.accountId}`,
316
+ `peerId=${token.peerId}`,
317
+ `relayMultiaddrs=${token.relayMultiaddrs.join(",")}`,
318
+ `bootstrapMultiaddrs=${token.bootstrapMultiaddrs.join(",")}`,
319
+ `issuedAt=${token.issuedAt}`,
320
+ `expiresAt=${token.expiresAt}`
321
+ ].join("\n"));
322
+ }
323
+
281
324
  // src/orchestration/errors.ts
282
325
  var OrchestrationError = class extends Error {
283
326
  code;
@@ -907,6 +950,12 @@ var Libp2pDeviceSyncTransport = class {
907
950
  async request(peerId, method, parameters) {
908
951
  const grant = await this.grantProvider?.(peerId);
909
952
  const stream = await this.deviceNetwork.openStream(peerId, "/memeloop/sync/2.0.0", grant);
953
+ let aborted = false;
954
+ const abort = async (error) => {
955
+ if (aborted) return;
956
+ aborted = true;
957
+ await stream.abort(error);
958
+ };
910
959
  const request = {
911
960
  type: LIBP2P_SYNC_REQUEST_TYPE,
912
961
  id: crypto.randomUUID(),
@@ -921,7 +970,7 @@ var Libp2pDeviceSyncTransport = class {
921
970
  maxPayloadBytes: 16 * 1024 * 1024,
922
971
  idleTimeoutMs: 15e3,
923
972
  totalTimeoutMs: 12e4,
924
- abort: async (error) => stream.abort(error)
973
+ abort
925
974
  })) {
926
975
  if (response !== void 0) throw new Error("sync_response_multiple");
927
976
  response = value;
@@ -931,7 +980,7 @@ var Libp2pDeviceSyncTransport = class {
931
980
  if (!response.ok) throw new Error(response.error);
932
981
  return response.result;
933
982
  } catch (error) {
934
- if (error instanceof JsonFrameError) await stream.abort(error);
983
+ if (error instanceof JsonFrameError) await abort(error);
935
984
  throw error;
936
985
  } finally {
937
986
  await stream.close().catch(() => void 0);
@@ -1549,9 +1598,12 @@ function sameTrustedDevice(left, right) {
1549
1598
  // Annotate the CommonJS export names for ESM import in node:
1550
1599
  0 && (module.exports = {
1551
1600
  ChatSyncEngine,
1601
+ DEVICE_BINDING_SIGNATURE_DOMAIN,
1602
+ DEVICE_CONNECTION_GRANT_SIGNATURE_DOMAIN,
1552
1603
  DEVICE_ORCHESTRATION_PROTOCOL,
1553
1604
  DEVICE_PAIRING_INVITE_PROTOCOL,
1554
1605
  DEVICE_PAIRING_INVITE_TTL_MS,
1606
+ DEVICE_RELAY_ADMISSION_SIGNATURE_DOMAIN,
1555
1607
  DeviceCloudConnectionCoordinator,
1556
1608
  JsonFrameError,
1557
1609
  LIBP2P_RPC_REQUEST_TYPE,
@@ -1564,6 +1616,9 @@ function sameTrustedDevice(left, right) {
1564
1616
  MemoryDeviceSyncStateStore,
1565
1617
  PeerNodeSyncAdapter,
1566
1618
  attachmentBlobFromWire,
1619
+ buildDeviceBindingMessage,
1620
+ buildDeviceConnectionGrantMessage,
1621
+ buildDeviceRelayReservationTokenMessage,
1567
1622
  canonicalDevicePairingInviteBytes,
1568
1623
  computeMissingVersionRanges,
1569
1624
  createDeviceOrchestrationStreamHandler,