orbitdb-relay-pinner 0.6.4 → 0.7.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -13,6 +13,7 @@ See `AGENTS.md` for an architecture and feature guide (entrypoints, data flow, e
13
13
 
14
14
  - Relay media pinning flow: `docs/relay-media-pinning.md`
15
15
  - HTTP API (`/health`, `/multiaddrs`, `/pinning/*`, `/ipfs/*`, `/metrics`): `docs/http-api.md`
16
+ - Libp2p service integration guide: `docs/libp2p-service.md`
16
17
 
17
18
  ## CLI
18
19
 
@@ -34,6 +35,50 @@ Test mode (deterministic peer id via `TEST_PRIVATE_KEY` or `RELAY_PRIV_KEY`):
34
35
  orbitdb-relay-pinner --test
35
36
  ```
36
37
 
38
+ ## Library
39
+
40
+ The package still exports `startRelay()` as the compatibility wrapper used by the CLI and the existing tests.
41
+
42
+ For a fuller install + integration walkthrough, see `docs/libp2p-service.md`.
43
+
44
+ It also exports `orbitdbReplicationService()` so the OrbitDB replication + Helia pinning logic can be mounted directly in any libp2p node:
45
+
46
+ ```ts
47
+ import { createLibp2p } from 'libp2p'
48
+ import { LevelDatastore } from 'datastore-level'
49
+ import { LevelBlockstore } from 'blockstore-level'
50
+ import { gossipsub } from '@chainsafe/libp2p-gossipsub'
51
+ import { identify } from '@libp2p/identify'
52
+ import { orbitdbReplicationService } from 'orbitdb-relay-pinner'
53
+
54
+ const datastore = new LevelDatastore('./tmp/ipfs/data')
55
+ const blockstore = new LevelBlockstore('./tmp/ipfs/blocks')
56
+
57
+ await datastore.open()
58
+ await blockstore.open()
59
+
60
+ const libp2p = await createLibp2p({
61
+ datastore,
62
+ services: {
63
+ identify: identify(),
64
+ pubsub: gossipsub(),
65
+ orbitdbReplication: orbitdbReplicationService({
66
+ datastore,
67
+ blockstore,
68
+ orbitdbDirectory: './tmp/orbitdb'
69
+ })
70
+ }
71
+ })
72
+
73
+ await libp2p.services.orbitdbReplication.syncAllOrbitDBRecords('/orbitdb/...')
74
+ ```
75
+
76
+ Notes:
77
+
78
+ - `orbitdbReplicationService()` expects caller-owned `datastore` and `blockstore`.
79
+ - Stopping the libp2p node stops the replication service, OrbitDB, and its Helia instance.
80
+ - The caller still closes `datastore` and `blockstore` after `libp2p.stop()`.
81
+
37
82
  ## Supported Access Controllers
38
83
 
39
84
  `orbitdb-relay-pinner` supports the following Access Controller types when opening OrbitDB databases:
@@ -1,4 +1,6 @@
1
1
  import type { PrivateKey } from '@libp2p/interface';
2
2
  import type { Datastore } from 'interface-datastore';
3
- export declare const createLibp2pConfig: (privateKey: PrivateKey, datastore: Datastore) => any;
3
+ type ExtraServiceFactories = Record<string, (components: any) => unknown>;
4
+ export declare const createLibp2pConfig: (privateKey: PrivateKey, datastore: Datastore, extraServices?: ExtraServiceFactories) => any;
5
+ export {};
4
6
  //# sourceMappingURL=libp2p.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"libp2p.d.ts","sourceRoot":"","sources":["../../src/config/libp2p.ts"],"names":[],"mappings":"AAiBA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAA;AACnD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAA;AA2DpD,eAAO,MAAM,kBAAkB,GAAI,YAAY,UAAU,EAAE,WAAW,SAAS,KAgFxE,GACN,CAAA"}
1
+ {"version":3,"file":"libp2p.d.ts","sourceRoot":"","sources":["../../src/config/libp2p.ts"],"names":[],"mappings":"AAiBA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAA;AACnD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAA;AA2DpD,KAAK,qBAAqB,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC,UAAU,EAAE,GAAG,KAAK,OAAO,CAAC,CAAA;AAEzE,eAAO,MAAM,kBAAkB,GAC7B,YAAY,UAAU,EACtB,WAAW,SAAS,EACpB,gBAAe,qBAA0B,KAkFpC,GACN,CAAA"}
@@ -54,7 +54,7 @@ function readRelayListenEnv() {
54
54
  pubsubTopics,
55
55
  };
56
56
  }
57
- export const createLibp2pConfig = (privateKey, datastore) => {
57
+ export const createLibp2pConfig = (privateKey, datastore, extraServices = {}) => {
58
58
  const e = readRelayListenEnv();
59
59
  return {
60
60
  privateKey,
@@ -129,6 +129,7 @@ export const createLibp2pConfig = (privateKey, datastore) => {
129
129
  }),
130
130
  }),
131
131
  keychain: keychain(),
132
+ ...extraServices,
132
133
  },
133
134
  connectionGater: {
134
135
  denyDialMultiaddr: async () => false,
@@ -1 +1 @@
1
- {"version":3,"file":"libp2p.js","sourceRoot":"","sources":["../../src/config/libp2p.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"libp2p.js","sourceRoot":"","sources":["../../src/config/libp2p.ts"],"names":[],"mappings":"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"}
@@ -1,2 +1,2 @@
1
- export declare function setupEventHandlers(libp2p: any, databaseService: any): () => Promise<void>;
1
+ export declare function setupEventHandlers(libp2p: any): () => Promise<void>;
2
2
  //# sourceMappingURL=handlers.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"handlers.d.ts","sourceRoot":"","sources":["../../src/events/handlers.ts"],"names":[],"mappings":"AAcA,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,GAAG,EAAE,eAAe,EAAE,GAAG,uBAsJnE"}
1
+ {"version":3,"file":"handlers.d.ts","sourceRoot":"","sources":["../../src/events/handlers.ts"],"names":[],"mappings":"AAYA,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,GAAG,uBAoF7C"}
@@ -1,7 +1,5 @@
1
- import PQueue from 'p-queue';
2
1
  import { WebSocketsSecure } from '@multiformats/multiaddr-matcher';
3
- import { inspect } from 'node:util';
4
- import { log, syncLog } from '../utils/logger.js';
2
+ import { log } from '../utils/logger.js';
5
3
  import { loggingConfig } from '../config/logging.js';
6
4
  import { isRelayRequireOrbitdbHeadsProtocolEnabled } from '../config/orbitdb-inbound-filter-env.js';
7
5
  import { incRelayInboundOrbitdbHeadsReject } from '../services/metrics.js';
@@ -10,7 +8,7 @@ function remoteHasOrbitdbHeadsProtocol(protocols) {
10
8
  return false;
11
9
  return protocols.some((p) => typeof p === 'string' && p.startsWith('/orbitdb/heads/'));
12
10
  }
13
- export function setupEventHandlers(libp2p, databaseService) {
11
+ export function setupEventHandlers(libp2p) {
14
12
  const cleanupFunctions = [];
15
13
  const certificateIntervals = new Set();
16
14
  let isShuttingDown = false;
@@ -75,42 +73,6 @@ export function setupEventHandlers(libp2p, databaseService) {
75
73
  };
76
74
  libp2p.addEventListener('peer:disconnect', peerDisconnectHandler);
77
75
  cleanupFunctions.push(() => libp2p.removeEventListener('peer:disconnect', peerDisconnectHandler));
78
- const syncQueue = new PQueue({ concurrency: 2 });
79
- const subscribedOrbitdbTopics = new Set();
80
- const pubsub = libp2p.services.pubsub;
81
- const ensureOrbitdbTopicSubscribed = async (topic) => {
82
- if (!topic?.startsWith('/orbitdb/'))
83
- return;
84
- if (subscribedOrbitdbTopics.has(topic))
85
- return;
86
- try {
87
- await pubsub.subscribe(topic);
88
- subscribedOrbitdbTopics.add(topic);
89
- await databaseService.prefetchManifestForLogging?.(topic);
90
- {
91
- const dbName = databaseService.getCachedDbName?.(topic);
92
- syncLog('Explicitly subscribed relay pubsub to OrbitDB topic:', inspect(dbName ? { topic, dbName } : { topic }, { depth: null, colors: false, compact: false }));
93
- }
94
- }
95
- catch (error) {
96
- syncLog('Failed to subscribe relay pubsub to OrbitDB topic:', topic, error?.message || String(error));
97
- }
98
- };
99
- const pubsubMessageHandler = (event) => {
100
- if (isShuttingDown)
101
- return;
102
- const msg = event.detail;
103
- if (typeof msg.topic === 'string' && msg.topic.startsWith('/orbitdb/')) {
104
- const dbName = databaseService.getCachedDbName?.(msg.topic);
105
- syncLog('Received pubsub message:', inspect(dbName ? { topic: msg.topic, dbName } : { topic: msg.topic }, { depth: null, colors: false, compact: false }));
106
- }
107
- if (msg.topic && msg.topic.startsWith('/orbitdb/')) {
108
- syncQueue.add(() => ensureOrbitdbTopicSubscribed(msg.topic));
109
- syncQueue.add(() => databaseService.syncAllOrbitDBRecords(msg.topic));
110
- }
111
- };
112
- libp2p.services.pubsub.addEventListener('message', pubsubMessageHandler);
113
- cleanupFunctions.push(() => libp2p.services.pubsub.removeEventListener('message', pubsubMessageHandler));
114
76
  const connectionOpenHandler = async (event) => {
115
77
  const connection = event.detail;
116
78
  if (loggingConfig.logLevels.connection)
@@ -118,26 +80,9 @@ export function setupEventHandlers(libp2p, databaseService) {
118
80
  };
119
81
  libp2p.addEventListener('connection:open', connectionOpenHandler);
120
82
  cleanupFunctions.push(() => libp2p.removeEventListener('connection:open', connectionOpenHandler));
121
- const subscriptionChangeHandler = (event) => {
122
- if (isShuttingDown)
123
- return;
124
- if (event.detail?.subscriptions) {
125
- for (const subscription of event.detail.subscriptions) {
126
- if (subscription.topic?.startsWith('/orbitdb/')) {
127
- syncQueue.add(() => ensureOrbitdbTopicSubscribed(subscription.topic));
128
- syncQueue.add(() => databaseService.syncAllOrbitDBRecords(subscription.topic));
129
- }
130
- }
131
- }
132
- };
133
- pubsub.addEventListener('subscription-change', subscriptionChangeHandler);
134
- cleanupFunctions.push(() => pubsub.removeEventListener('subscription-change', subscriptionChangeHandler));
135
83
  return async () => {
136
84
  isShuttingDown = true;
137
85
  cleanupFunctions.forEach((cleanup) => cleanup());
138
- syncQueue.pause();
139
- syncQueue.clear();
140
- await syncQueue.onIdle();
141
86
  for (const interval of certificateIntervals) {
142
87
  clearInterval(interval);
143
88
  }
@@ -1 +1 @@
1
- {"version":3,"file":"handlers.js","sourceRoot":"","sources":["../../src/events/handlers.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"handlers.js","sourceRoot":"","sources":["../../src/events/handlers.ts"],"names":[],"mappings":"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"}
package/dist/index.d.ts CHANGED
@@ -1,3 +1,5 @@
1
1
  export type { RelayOptions, RelayRuntime } from './relay.js';
2
2
  export { startRelay } from './relay.js';
3
+ export type { OrbitdbReplicationServiceApi, OrbitdbReplicationServiceInit } from './services/orbitdb-replication-service.js';
4
+ export { orbitdbReplicationService } from './services/orbitdb-replication-service.js';
3
5
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,YAAY,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,YAAY,CAAA;AAC5D,OAAO,EAAE,UAAU,EAAE,MAAM,YAAY,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,YAAY,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,YAAY,CAAA;AAC5D,OAAO,EAAE,UAAU,EAAE,MAAM,YAAY,CAAA;AACvC,YAAY,EAAE,4BAA4B,EAAE,6BAA6B,EAAE,MAAM,2CAA2C,CAAA;AAC5H,OAAO,EAAE,yBAAyB,EAAE,MAAM,2CAA2C,CAAA"}
package/dist/index.js CHANGED
@@ -1,2 +1,3 @@
1
1
  export { startRelay } from './relay.js';
2
+ export { orbitdbReplicationService } from './services/orbitdb-replication-service.js';
2
3
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,UAAU,EAAE,MAAM,YAAY,CAAA"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,UAAU,EAAE,MAAM,YAAY,CAAA;AAEvC,OAAO,EAAE,yBAAyB,EAAE,MAAM,2CAA2C,CAAA"}
@@ -1 +1 @@
1
- {"version":3,"file":"relay.d.ts","sourceRoot":"","sources":["../src/relay.ts"],"names":[],"mappings":"AAcA,MAAM,MAAM,YAAY,GAAG;IACzB,QAAQ,CAAC,EAAE,OAAO,CAAA;IAClB,UAAU,CAAC,EAAE,MAAM,CAAA;CACpB,CAAA;AAED,MAAM,MAAM,YAAY,GAAG;IACzB,IAAI,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAA;CAC1B,CAAA;AAwDD,wBAAsB,UAAU,CAAC,IAAI,GAAE,YAAiB,GAAG,OAAO,CAAC,YAAY,CAAC,CAoF/E"}
1
+ {"version":3,"file":"relay.d.ts","sourceRoot":"","sources":["../src/relay.ts"],"names":[],"mappings":"AAaA,MAAM,MAAM,YAAY,GAAG;IACzB,QAAQ,CAAC,EAAE,OAAO,CAAA;IAClB,UAAU,CAAC,EAAE,MAAM,CAAA;CACpB,CAAA;AAED,MAAM,MAAM,YAAY,GAAG;IACzB,IAAI,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAA;CAC1B,CAAA;AAwDD,wBAAsB,UAAU,CAAC,IAAI,GAAE,YAAiB,GAAG,OAAO,CAAC,YAAY,CAAC,CAsE/E"}
package/dist/relay.js CHANGED
@@ -1,12 +1,11 @@
1
1
  import { createLibp2p } from 'libp2p';
2
- import { createHelia } from 'helia';
3
2
  import { fromString as uint8ArrayFromString } from 'uint8arrays/from-string';
4
3
  import { privateKeyFromProtobuf } from '@libp2p/crypto/keys';
5
4
  import { join } from 'node:path';
6
5
  import { createLibp2pConfig } from './config/libp2p.js';
7
6
  import { initializeStorage } from './services/storage.js';
8
- import { DatabaseService } from './services/database.js';
9
7
  import { MetricsServer } from './services/metrics.js';
8
+ import { orbitdbReplicationService } from './services/orbitdb-replication-service.js';
10
9
  import { setupEventHandlers } from './events/handlers.js';
11
10
  import { loggingConfig } from './config/logging.js';
12
11
  import { headsStreamLog, log } from './utils/logger.js';
@@ -65,15 +64,19 @@ export async function startRelay(opts = {}) {
65
64
  privateKey = privateKeyFromProtobuf(uint8ArrayFromString(hex, 'hex'));
66
65
  }
67
66
  }
68
- const libp2p = await createLibp2p(createLibp2pConfig(privateKey, datastore));
67
+ const libp2p = await createLibp2p(createLibp2pConfig(privateKey, datastore, {
68
+ orbitdbReplication: orbitdbReplicationService({
69
+ datastore,
70
+ blockstore,
71
+ orbitdbDirectory: join(storageDir, 'orbitdb'),
72
+ }),
73
+ }));
69
74
  attachOrbitdbHeadsStreamLogging(libp2p);
70
- const ipfs = await createHelia({ libp2p, datastore, blockstore });
71
- const databaseService = new DatabaseService();
72
- await databaseService.initialize(ipfs, join(storageDir, 'orbitdb'));
73
- const cleanupEventHandlers = await setupEventHandlers(libp2p, databaseService);
75
+ const orbitdbReplication = libp2p.services.orbitdbReplication;
76
+ const cleanupEventHandlers = await setupEventHandlers(libp2p);
74
77
  const metricsServer = new MetricsServer({
75
78
  getLibp2p: () => libp2p,
76
- pinning: databaseService.createPinningHttpHandlers(),
79
+ pinning: orbitdbReplication.createPinningHttpHandlers(),
77
80
  });
78
81
  await metricsServer.start();
79
82
  metricsServer.attachAutoTlsFromLibp2p(libp2p);
@@ -83,19 +86,12 @@ export async function startRelay(opts = {}) {
83
86
  }
84
87
  return {
85
88
  stop: async () => {
86
- databaseService.beginShutdown();
87
89
  try {
88
90
  await cleanupEventHandlers?.();
89
91
  }
90
92
  catch {
91
93
  // ignore
92
94
  }
93
- try {
94
- await databaseService.stop();
95
- }
96
- catch {
97
- // ignore
98
- }
99
95
  try {
100
96
  await metricsServer.stop();
101
97
  }
@@ -103,15 +99,7 @@ export async function startRelay(opts = {}) {
103
99
  // ignore
104
100
  }
105
101
  try {
106
- // best effort; helia/libp2p will close underlying stores as well
107
- // @ts-expect-error helia internal store wrappers
108
- await ipfs.blockstore?.child?.child?.child?.close?.();
109
- }
110
- catch {
111
- // ignore
112
- }
113
- try {
114
- await ipfs.stop();
102
+ await libp2p.stop();
115
103
  }
116
104
  catch {
117
105
  // ignore
@@ -128,12 +116,6 @@ export async function startRelay(opts = {}) {
128
116
  catch {
129
117
  // ignore
130
118
  }
131
- try {
132
- await libp2p.stop();
133
- }
134
- catch {
135
- // ignore
136
- }
137
119
  },
138
120
  };
139
121
  }
package/dist/relay.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"relay.js","sourceRoot":"","sources":["../src/relay.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"relay.js","sourceRoot":"","sources":["../src/relay.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,19 @@
1
+ import type { Blockstore } from 'interface-blockstore';
2
+ import type { Datastore } from 'interface-datastore';
3
+ import type { PinningHttpHandlers } from './metrics.js';
4
+ export type OrbitdbReplicationServiceInit = {
5
+ datastore: Datastore;
6
+ blockstore: Blockstore;
7
+ orbitdbDirectory?: string;
8
+ };
9
+ export interface OrbitdbReplicationServiceApi {
10
+ createPinningHttpHandlers(): PinningHttpHandlers;
11
+ syncAllOrbitDBRecords(dbAddress: string): Promise<void>;
12
+ start(): Promise<void>;
13
+ stop(): Promise<void>;
14
+ afterStart?(): Promise<void>;
15
+ beforeStop?(): Promise<void>;
16
+ }
17
+ export declare function orbitdbReplicationService(init: OrbitdbReplicationServiceInit): (components: any) => OrbitdbReplicationServiceApi;
18
+ export type { PinningHttpHandlers };
19
+ //# sourceMappingURL=orbitdb-replication-service.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"orbitdb-replication-service.d.ts","sourceRoot":"","sources":["../../src/services/orbitdb-replication-service.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAA;AACtD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAA;AAEpD,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,cAAc,CAAA;AAIvD,MAAM,MAAM,6BAA6B,GAAG;IAC1C,SAAS,EAAE,SAAS,CAAA;IACpB,UAAU,EAAE,UAAU,CAAA;IACtB,gBAAgB,CAAC,EAAE,MAAM,CAAA;CAC1B,CAAA;AAED,MAAM,WAAW,4BAA4B;IAC3C,yBAAyB,IAAI,mBAAmB,CAAA;IAChD,qBAAqB,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;IACvD,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAAA;IACtB,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC,CAAA;IACrB,UAAU,CAAC,IAAI,OAAO,CAAC,IAAI,CAAC,CAAA;IAC5B,UAAU,CAAC,IAAI,OAAO,CAAC,IAAI,CAAC,CAAA;CAC7B;AAoRD,wBAAgB,yBAAyB,CAAC,IAAI,EAAE,6BAA6B,IACnE,YAAY,GAAG,KAAG,4BAA4B,CAGvD;AAED,YAAY,EAAE,mBAAmB,EAAE,CAAA"}
@@ -0,0 +1,232 @@
1
+ import { createHelia } from 'helia';
2
+ import { serviceDependencies } from '@libp2p/interface';
3
+ import PQueue from 'p-queue';
4
+ import { inspect } from 'node:util';
5
+ import { DatabaseService } from './database.js';
6
+ import { syncLog } from '../utils/logger.js';
7
+ function createLibp2pServiceFacade(components) {
8
+ const events = components.events;
9
+ const services = new Proxy({}, {
10
+ get: (_target, prop) => {
11
+ if (typeof prop !== 'string')
12
+ return undefined;
13
+ return components[prop];
14
+ },
15
+ });
16
+ const dial = async (peer, options = {}) => {
17
+ return await components.connectionManager.openConnection(peer, {
18
+ priority: 75,
19
+ ...options,
20
+ });
21
+ };
22
+ return {
23
+ peerId: components.peerId,
24
+ peerStore: components.peerStore,
25
+ contentRouting: components.contentRouting,
26
+ peerRouting: components.peerRouting,
27
+ metrics: components.metrics,
28
+ logger: components.logger,
29
+ services,
30
+ status: 'started',
31
+ isStarted: () => true,
32
+ addEventListener: events.addEventListener.bind(events),
33
+ removeEventListener: events.removeEventListener.bind(events),
34
+ dispatchEvent: events.dispatchEvent.bind(events),
35
+ safeDispatchEvent: events.safeDispatchEvent?.bind(events),
36
+ getConnections: (peerId) => components.connectionManager.getConnections(peerId),
37
+ getMultiaddrs: () => components.addressManager.getAddresses(),
38
+ getProtocols: () => components.registrar.getProtocols(),
39
+ dial,
40
+ dialProtocol: async (peer, protocols, options = {}) => {
41
+ const connection = await dial(peer, options);
42
+ const protocolList = Array.isArray(protocols) ? protocols : [protocols];
43
+ return await connection.newStream(protocolList, options);
44
+ },
45
+ hangUp: async (peer, options) => {
46
+ await components.connectionManager.closeConnections(peer, options);
47
+ },
48
+ handle: async (protocols, handler, options) => {
49
+ const protocolList = Array.isArray(protocols) ? protocols : [protocols];
50
+ await Promise.all(protocolList.map(async (protocol) => await components.registrar.handle(protocol, handler, options)));
51
+ },
52
+ unhandle: async (protocols, options) => {
53
+ const protocolList = Array.isArray(protocols) ? protocols : [protocols];
54
+ await Promise.all(protocolList.map(async (protocol) => await components.registrar.unhandle(protocol, options)));
55
+ },
56
+ register: async (protocol, topology, options) => {
57
+ return await components.registrar.register(protocol, topology, options);
58
+ },
59
+ unregister: (id) => {
60
+ components.registrar.unregister(id);
61
+ },
62
+ isDialable: async (multiaddr, options) => {
63
+ return await components.connectionManager.isDialable(multiaddr, options);
64
+ },
65
+ start: async () => { },
66
+ stop: async () => { },
67
+ };
68
+ }
69
+ function setupOrbitdbReplicationHandlers(libp2p, databaseService) {
70
+ const syncQueue = new PQueue({ concurrency: 2 });
71
+ const subscribedOrbitdbTopics = new Set();
72
+ const pubsub = libp2p.services.pubsub;
73
+ let isShuttingDown = false;
74
+ const ensureOrbitdbTopicSubscribed = async (topic) => {
75
+ if (!topic?.startsWith('/orbitdb/'))
76
+ return;
77
+ if (subscribedOrbitdbTopics.has(topic))
78
+ return;
79
+ try {
80
+ await pubsub.subscribe(topic);
81
+ subscribedOrbitdbTopics.add(topic);
82
+ await databaseService.prefetchManifestForLogging(topic);
83
+ const dbName = databaseService.getCachedDbName(topic);
84
+ syncLog('Explicitly subscribed relay pubsub to OrbitDB topic:', inspect(dbName ? { topic, dbName } : { topic }, { depth: null, colors: false, compact: false }));
85
+ }
86
+ catch (error) {
87
+ syncLog('Failed to subscribe relay pubsub to OrbitDB topic:', topic, error?.message || String(error));
88
+ }
89
+ };
90
+ const pubsubMessageHandler = (event) => {
91
+ if (isShuttingDown)
92
+ return;
93
+ const msg = event.detail;
94
+ if (typeof msg.topic === 'string' && msg.topic.startsWith('/orbitdb/')) {
95
+ const dbName = databaseService.getCachedDbName(msg.topic);
96
+ syncLog('Received pubsub message:', inspect(dbName ? { topic: msg.topic, dbName } : { topic: msg.topic }, { depth: null, colors: false, compact: false }));
97
+ }
98
+ if (msg.topic?.startsWith('/orbitdb/')) {
99
+ syncQueue.add(() => ensureOrbitdbTopicSubscribed(msg.topic));
100
+ syncQueue.add(() => databaseService.syncAllOrbitDBRecords(msg.topic));
101
+ }
102
+ };
103
+ const subscriptionChangeHandler = (event) => {
104
+ if (isShuttingDown)
105
+ return;
106
+ if (event.detail?.subscriptions) {
107
+ for (const subscription of event.detail.subscriptions) {
108
+ if (subscription.topic?.startsWith('/orbitdb/')) {
109
+ syncQueue.add(() => ensureOrbitdbTopicSubscribed(subscription.topic));
110
+ syncQueue.add(() => databaseService.syncAllOrbitDBRecords(subscription.topic));
111
+ }
112
+ }
113
+ }
114
+ };
115
+ pubsub.addEventListener('message', pubsubMessageHandler);
116
+ pubsub.addEventListener('subscription-change', subscriptionChangeHandler);
117
+ return async () => {
118
+ isShuttingDown = true;
119
+ pubsub.removeEventListener('message', pubsubMessageHandler);
120
+ pubsub.removeEventListener('subscription-change', subscriptionChangeHandler);
121
+ syncQueue.pause();
122
+ syncQueue.clear();
123
+ await syncQueue.onIdle();
124
+ };
125
+ }
126
+ class OrbitdbReplicationService {
127
+ [serviceDependencies] = ['@libp2p/pubsub'];
128
+ [Symbol.toStringTag] = '@le-space/orbitdb-replication-service';
129
+ components;
130
+ init;
131
+ libp2p;
132
+ ipfs;
133
+ databaseService;
134
+ cleanupSyncHandlers;
135
+ started;
136
+ constructor(components, init) {
137
+ this.components = components;
138
+ this.init = init;
139
+ this.libp2p = null;
140
+ this.ipfs = null;
141
+ this.databaseService = null;
142
+ this.cleanupSyncHandlers = null;
143
+ this.started = false;
144
+ }
145
+ async start() { }
146
+ async afterStart() {
147
+ if (this.started)
148
+ return;
149
+ const libp2p = createLibp2pServiceFacade(this.components);
150
+ const ipfs = await createHelia({
151
+ libp2p: libp2p,
152
+ datastore: this.init.datastore,
153
+ blockstore: this.init.blockstore,
154
+ });
155
+ const databaseService = new DatabaseService();
156
+ try {
157
+ await databaseService.initialize(ipfs, this.init.orbitdbDirectory);
158
+ const cleanupSyncHandlers = setupOrbitdbReplicationHandlers(libp2p, databaseService);
159
+ this.libp2p = libp2p;
160
+ this.ipfs = ipfs;
161
+ this.databaseService = databaseService;
162
+ this.cleanupSyncHandlers = cleanupSyncHandlers;
163
+ this.started = true;
164
+ }
165
+ catch (error) {
166
+ databaseService.beginShutdown();
167
+ try {
168
+ await databaseService.stop();
169
+ }
170
+ catch {
171
+ // ignore cleanup failures
172
+ }
173
+ try {
174
+ await ipfs.stop();
175
+ }
176
+ catch {
177
+ // ignore cleanup failures
178
+ }
179
+ throw error;
180
+ }
181
+ }
182
+ async beforeStop() {
183
+ if (!this.started && this.databaseService == null && this.ipfs == null)
184
+ return;
185
+ const cleanupSyncHandlers = this.cleanupSyncHandlers;
186
+ const databaseService = this.databaseService;
187
+ const ipfs = this.ipfs;
188
+ this.started = false;
189
+ this.cleanupSyncHandlers = null;
190
+ this.databaseService = null;
191
+ this.ipfs = null;
192
+ this.libp2p = null;
193
+ databaseService?.beginShutdown();
194
+ try {
195
+ await cleanupSyncHandlers?.();
196
+ }
197
+ catch {
198
+ // ignore cleanup failures
199
+ }
200
+ try {
201
+ await databaseService?.stop();
202
+ }
203
+ catch {
204
+ // ignore cleanup failures
205
+ }
206
+ try {
207
+ await ipfs?.stop();
208
+ }
209
+ catch {
210
+ // ignore cleanup failures
211
+ }
212
+ }
213
+ async stop() { }
214
+ createPinningHttpHandlers() {
215
+ return this.requireDatabaseService().createPinningHttpHandlers();
216
+ }
217
+ async syncAllOrbitDBRecords(dbAddress) {
218
+ await this.requireDatabaseService().syncAllOrbitDBRecords(dbAddress);
219
+ }
220
+ requireDatabaseService() {
221
+ if (this.databaseService == null) {
222
+ throw new Error('OrbitDB replication service is not started');
223
+ }
224
+ return this.databaseService;
225
+ }
226
+ }
227
+ export function orbitdbReplicationService(init) {
228
+ return (components) => {
229
+ return new OrbitdbReplicationService(components, init);
230
+ };
231
+ }
232
+ //# sourceMappingURL=orbitdb-replication-service.js.map