orbitdb-relay-pinner 0.6.3 → 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/.env.example +4 -0
- package/README.md +45 -0
- package/dist/config/libp2p.d.ts +3 -1
- package/dist/config/libp2p.d.ts.map +1 -1
- package/dist/config/libp2p.js +7 -2
- package/dist/config/libp2p.js.map +1 -1
- package/dist/config/logging.d.ts +1 -0
- package/dist/config/logging.d.ts.map +1 -1
- package/dist/config/logging.js +1 -0
- package/dist/config/logging.js.map +1 -1
- package/dist/config/orbitdb-inbound-filter-env.d.ts +3 -0
- package/dist/config/orbitdb-inbound-filter-env.d.ts.map +1 -0
- package/dist/config/orbitdb-inbound-filter-env.js +6 -0
- package/dist/config/orbitdb-inbound-filter-env.js.map +1 -0
- package/dist/events/handlers.d.ts +1 -1
- package/dist/events/handlers.d.ts.map +1 -1
- package/dist/events/handlers.js +43 -86
- package/dist/events/handlers.js.map +1 -1
- package/dist/index.d.ts +2 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -0
- package/dist/index.js.map +1 -1
- package/dist/relay.d.ts.map +1 -1
- package/dist/relay.js +12 -30
- package/dist/relay.js.map +1 -1
- package/dist/services/metrics.d.ts +2 -0
- package/dist/services/metrics.d.ts.map +1 -1
- package/dist/services/metrics.js +8 -0
- package/dist/services/metrics.js.map +1 -1
- package/dist/services/orbitdb-replication-service.d.ts +19 -0
- package/dist/services/orbitdb-replication-service.d.ts.map +1 -0
- package/dist/services/orbitdb-replication-service.js +232 -0
- package/dist/services/orbitdb-replication-service.js.map +1 -0
- package/docs/http-api.md +316 -0
- package/docs/libp2p-service.md +151 -0
- package/docs/nym-vpn-ports.md +44 -0
- package/docs/relay-media-pinning.md +104 -0
- package/docs/systemd-deployment.md +234 -0
- package/package.json +4 -3
package/.env.example
CHANGED
|
@@ -23,6 +23,10 @@
|
|
|
23
23
|
# Public IPFS/libp2p bootstrap peers (Helia/Kubo list) are enabled by default. Set true for isolated networks.
|
|
24
24
|
# RELAY_DISABLE_BOOTSTRAP=false
|
|
25
25
|
|
|
26
|
+
# When true, inbound peers must advertise at least one /orbitdb/heads/* protocol (Identify). Others are disconnected.
|
|
27
|
+
# Outbound dials (e.g. bootstrap) are not affected. Default: off.
|
|
28
|
+
# RELAY_REQUIRE_ORBITDB_HEADS_PROTOCOL=false
|
|
29
|
+
|
|
26
30
|
# --- Circuit relay v2 (10× prior v0.3 defaults unless overridden here) ---
|
|
27
31
|
# Incoming relay hop must finish within this time (ms). Default: 300000
|
|
28
32
|
# RELAY_CIRCUIT_HOP_TIMEOUT_MS=300000
|
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:
|
package/dist/config/libp2p.d.ts
CHANGED
|
@@ -1,4 +1,6 @@
|
|
|
1
1
|
import type { PrivateKey } from '@libp2p/interface';
|
|
2
2
|
import type { Datastore } from 'interface-datastore';
|
|
3
|
-
|
|
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;
|
|
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"}
|
package/dist/config/libp2p.js
CHANGED
|
@@ -33,6 +33,7 @@ function readRelayListenEnv() {
|
|
|
33
33
|
const disableIpv6 = process.env.RELAY_DISABLE_IPV6 === 'true' || process.env.RELAY_DISABLE_IPV6 === '1';
|
|
34
34
|
const disableWebRtc = process.env.RELAY_DISABLE_WEBRTC === 'true' || process.env.RELAY_DISABLE_WEBRTC === '1';
|
|
35
35
|
const disableBootstrap = process.env.RELAY_DISABLE_BOOTSTRAP === 'true' || process.env.RELAY_DISABLE_BOOTSTRAP === '1';
|
|
36
|
+
const disableAutoNAT = process.env.RELAY_DISABLE_AUTONAT === 'true' || process.env.RELAY_DISABLE_AUTONAT === '1';
|
|
36
37
|
const pubsubTopics = (process.env.PUBSUB_TOPICS ||
|
|
37
38
|
process.env.VITE_PUBSUB_TOPICS ||
|
|
38
39
|
'todo._peer-discovery._p2p._pubsub')
|
|
@@ -49,10 +50,11 @@ function readRelayListenEnv() {
|
|
|
49
50
|
disableIpv6,
|
|
50
51
|
disableWebRtc,
|
|
51
52
|
disableBootstrap,
|
|
53
|
+
disableAutoNAT,
|
|
52
54
|
pubsubTopics,
|
|
53
55
|
};
|
|
54
56
|
}
|
|
55
|
-
export const createLibp2pConfig = (privateKey, datastore) => {
|
|
57
|
+
export const createLibp2pConfig = (privateKey, datastore, extraServices = {}) => {
|
|
56
58
|
const e = readRelayListenEnv();
|
|
57
59
|
return {
|
|
58
60
|
privateKey,
|
|
@@ -98,7 +100,9 @@ export const createLibp2pConfig = (privateKey, datastore) => {
|
|
|
98
100
|
streamMuxers: [yamux()],
|
|
99
101
|
services: {
|
|
100
102
|
ping: ping(),
|
|
101
|
-
|
|
103
|
+
...(!e.disableAutoNAT && {
|
|
104
|
+
autonat: autoNAT(),
|
|
105
|
+
}),
|
|
102
106
|
dcutr: dcutr(),
|
|
103
107
|
aminoDHT: kadDHT({
|
|
104
108
|
protocol: '/ipfs/kad/1.0.0',
|
|
@@ -125,6 +129,7 @@ export const createLibp2pConfig = (privateKey, datastore) => {
|
|
|
125
129
|
}),
|
|
126
130
|
}),
|
|
127
131
|
keychain: keychain(),
|
|
132
|
+
...extraServices,
|
|
128
133
|
},
|
|
129
134
|
connectionGater: {
|
|
130
135
|
denyDialMultiaddr: async () => false,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"libp2p.js","sourceRoot":"","sources":["../../src/config/libp2p.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,yBAAyB,CAAA;AAC/C,OAAO,EAAE,KAAK,EAAE,MAAM,yBAAyB,CAAA;AAC/C,OAAO,EAAE,qBAAqB,EAAE,kBAAkB,EAAE,MAAM,0BAA0B,CAAA;AACpF,OAAO,EAAE,QAAQ,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAA;AACzD,OAAO,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAA;AACrD,OAAO,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAA;AAC/C,OAAO,EAAE,SAAS,EAAE,MAAM,6BAA6B,CAAA;AACvD,OAAO,EAAE,mBAAmB,EAAE,MAAM,+BAA+B,CAAA;AACnE,OAAO,EAAE,MAAM,EAAE,4BAA4B,EAAE,MAAM,iBAAiB,CAAA;AACtE,OAAO,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAA;AAC7C,OAAO,EAAE,GAAG,EAAE,MAAM,aAAa,CAAA;AACjC,OAAO,EAAE,IAAI,EAAE,MAAM,cAAc,CAAA;AACnC,OAAO,EAAE,OAAO,EAAE,MAAM,iBAAiB,CAAA;AACzC,OAAO,EAAE,KAAK,EAAE,MAAM,eAAe,CAAA;AACrC,OAAO,EAAE,OAAO,EAAE,MAAM,6BAA6B,CAAA;AACrD,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAA;AAC3C,OAAO,EAAE,iBAAiB,EAAE,MAAM,4BAA4B,CAAA;AAI9D,OAAO,EACL,oCAAoC,EACpC,qCAAqC,EACrC,2BAA2B,EAC3B,8BAA8B,EAC9B,+BAA+B,GAChC,MAAM,wBAAwB,CAAA;AAC/B,OAAO,EAAE,0BAA0B,EAAE,MAAM,2BAA2B,CAAA;AAEtE,8GAA8G;AAC9G,SAAS,kBAAkB;IACzB,MAAM,cAAc,GAClB,CAAC,OAAO,CAAC,GAAG,CAAC,QAAQ,KAAK,aAAa,CAAC,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,wBAAwB,CAAC,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,oBAAoB,CAAC;QAClH,EAAE,CAAA;IAEJ,MAAM,mBAAmB,GAAG,cAAc;SACvC,KAAK,CAAC,GAAG,CAAC;SACV,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;SAC1B,MAAM,CAAC,OAAO,CAAC,CAAA;IAElB,MAAM,OAAO,GAAG,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,cAAc,IAAI,IAAI,CAAC,CAAA;IAC1D,MAAM,MAAM,GAAG,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,aAAa,IAAI,IAAI,CAAC,CAAA;IACxD,MAAM,UAAU,GAAG,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,iBAAiB,IAAI,IAAI,CAAC,CAAA;IAChE,MAAM,UAAU,GAAG,OAAO,CAAC,GAAG,CAAC,iBAAiB,IAAI,SAAS,CAAA;IAC7D,MAAM,UAAU,GAAG,OAAO,CAAC,GAAG,CAAC,iBAAiB,IAAI,IAAI,CAAA;IACxD,MAAM,WAAW,GAAG,OAAO,CAAC,GAAG,CAAC,kBAAkB,KAAK,MAAM,IAAI,OAAO,CAAC,GAAG,CAAC,kBAAkB,KAAK,GAAG,CAAA;IACvG,MAAM,aAAa,GACjB,OAAO,CAAC,GAAG,CAAC,oBAAoB,KAAK,MAAM,IAAI,OAAO,CAAC,GAAG,CAAC,oBAAoB,KAAK,GAAG,CAAA;IACzF,MAAM,gBAAgB,GACpB,OAAO,CAAC,GAAG,CAAC,uBAAuB,KAAK,MAAM,IAAI,OAAO,CAAC,GAAG,CAAC,uBAAuB,KAAK,GAAG,CAAA;
|
|
1
|
+
{"version":3,"file":"libp2p.js","sourceRoot":"","sources":["../../src/config/libp2p.ts"],"names":[],"mappings":"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"}
|
package/dist/config/logging.d.ts
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"logging.d.ts","sourceRoot":"","sources":["../../src/config/logging.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,aAAa
|
|
1
|
+
{"version":3,"file":"logging.d.ts","sourceRoot":"","sources":["../../src/config/logging.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,aAAa;;;;;;;;;;;;CAYzB,CAAA"}
|
package/dist/config/logging.js
CHANGED
|
@@ -8,6 +8,7 @@ export const loggingConfig = {
|
|
|
8
8
|
peer: process.env.LOG_LEVEL_PEER === 'true',
|
|
9
9
|
database: process.env.LOG_LEVEL_DATABASE === 'true',
|
|
10
10
|
sync: process.env.LOG_LEVEL_SYNC === 'true',
|
|
11
|
+
blockFetch: process.env.LOG_LEVEL_BLOCK_FETCH === 'true',
|
|
11
12
|
},
|
|
12
13
|
};
|
|
13
14
|
//# sourceMappingURL=logging.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"logging.js","sourceRoot":"","sources":["../../src/config/logging.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,aAAa,GAAG;IAC3B,iBAAiB,EAAE,OAAO,CAAC,GAAG,CAAC,mBAAmB,KAAK,MAAM,IAAI,OAAO,CAAC,GAAG,CAAC,mBAAmB,KAAK,GAAG;IACxG,cAAc,EAAE,OAAO,CAAC,GAAG,CAAC,gBAAgB,KAAK,MAAM,IAAI,OAAO,CAAC,GAAG,CAAC,gBAAgB,KAAK,GAAG;IAC/F,eAAe,EAAE,OAAO,CAAC,GAAG,CAAC,iBAAiB,KAAK,MAAM,IAAI,OAAO,CAAC,GAAG,CAAC,iBAAiB,KAAK,GAAG;IAClG,qBAAqB,EAAE,OAAO,CAAC,GAAG,CAAC,wBAAwB,KAAK,OAAO,IAAI,OAAO,CAAC,GAAG,CAAC,wBAAwB,KAAK,GAAG;IACvH,SAAS,EAAE;QACT,UAAU,EAAE,OAAO,CAAC,GAAG,CAAC,oBAAoB,KAAK,MAAM;QACvD,IAAI,EAAE,OAAO,CAAC,GAAG,CAAC,cAAc,KAAK,MAAM;QAC3C,QAAQ,EAAE,OAAO,CAAC,GAAG,CAAC,kBAAkB,KAAK,MAAM;QACnD,IAAI,EAAE,OAAO,CAAC,GAAG,CAAC,cAAc,KAAK,MAAM;
|
|
1
|
+
{"version":3,"file":"logging.js","sourceRoot":"","sources":["../../src/config/logging.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,aAAa,GAAG;IAC3B,iBAAiB,EAAE,OAAO,CAAC,GAAG,CAAC,mBAAmB,KAAK,MAAM,IAAI,OAAO,CAAC,GAAG,CAAC,mBAAmB,KAAK,GAAG;IACxG,cAAc,EAAE,OAAO,CAAC,GAAG,CAAC,gBAAgB,KAAK,MAAM,IAAI,OAAO,CAAC,GAAG,CAAC,gBAAgB,KAAK,GAAG;IAC/F,eAAe,EAAE,OAAO,CAAC,GAAG,CAAC,iBAAiB,KAAK,MAAM,IAAI,OAAO,CAAC,GAAG,CAAC,iBAAiB,KAAK,GAAG;IAClG,qBAAqB,EAAE,OAAO,CAAC,GAAG,CAAC,wBAAwB,KAAK,OAAO,IAAI,OAAO,CAAC,GAAG,CAAC,wBAAwB,KAAK,GAAG;IACvH,SAAS,EAAE;QACT,UAAU,EAAE,OAAO,CAAC,GAAG,CAAC,oBAAoB,KAAK,MAAM;QACvD,IAAI,EAAE,OAAO,CAAC,GAAG,CAAC,cAAc,KAAK,MAAM;QAC3C,QAAQ,EAAE,OAAO,CAAC,GAAG,CAAC,kBAAkB,KAAK,MAAM;QACnD,IAAI,EAAE,OAAO,CAAC,GAAG,CAAC,cAAc,KAAK,MAAM;QAC3C,UAAU,EAAE,OAAO,CAAC,GAAG,CAAC,qBAAqB,KAAK,MAAM;KACzD;CACF,CAAA"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"orbitdb-inbound-filter-env.d.ts","sourceRoot":"","sources":["../../src/config/orbitdb-inbound-filter-env.ts"],"names":[],"mappings":"AAAA,+GAA+G;AAC/G,wBAAgB,yCAAyC,IAAI,OAAO,CAGnE"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
/** When true, inbound peers must advertise at least one `/orbitdb/heads/*` libp2p protocol (from Identify). */
|
|
2
|
+
export function isRelayRequireOrbitdbHeadsProtocolEnabled() {
|
|
3
|
+
const v = process.env.RELAY_REQUIRE_ORBITDB_HEADS_PROTOCOL?.trim().toLowerCase();
|
|
4
|
+
return v === '1' || v === 'true';
|
|
5
|
+
}
|
|
6
|
+
//# sourceMappingURL=orbitdb-inbound-filter-env.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"orbitdb-inbound-filter-env.js","sourceRoot":"","sources":["../../src/config/orbitdb-inbound-filter-env.ts"],"names":[],"mappings":"AAAA,+GAA+G;AAC/G,MAAM,UAAU,yCAAyC;IACvD,MAAM,CAAC,GAAG,OAAO,CAAC,GAAG,CAAC,oCAAoC,EAAE,IAAI,EAAE,CAAC,WAAW,EAAE,CAAA;IAChF,OAAO,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,MAAM,CAAA;AAClC,CAAC"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
export declare function setupEventHandlers(libp2p: any
|
|
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":"
|
|
1
|
+
{"version":3,"file":"handlers.d.ts","sourceRoot":"","sources":["../../src/events/handlers.ts"],"names":[],"mappings":"AAYA,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,GAAG,uBAoF7C"}
|
package/dist/events/handlers.js
CHANGED
|
@@ -1,48 +1,58 @@
|
|
|
1
|
-
import { identify } from '@libp2p/identify';
|
|
2
|
-
import PQueue from 'p-queue';
|
|
3
1
|
import { WebSocketsSecure } from '@multiformats/multiaddr-matcher';
|
|
4
|
-
import {
|
|
5
|
-
import { log, syncLog } from '../utils/logger.js';
|
|
2
|
+
import { log } from '../utils/logger.js';
|
|
6
3
|
import { loggingConfig } from '../config/logging.js';
|
|
7
|
-
|
|
4
|
+
import { isRelayRequireOrbitdbHeadsProtocolEnabled } from '../config/orbitdb-inbound-filter-env.js';
|
|
5
|
+
import { incRelayInboundOrbitdbHeadsReject } from '../services/metrics.js';
|
|
6
|
+
function remoteHasOrbitdbHeadsProtocol(protocols) {
|
|
7
|
+
if (!Array.isArray(protocols))
|
|
8
|
+
return false;
|
|
9
|
+
return protocols.some((p) => typeof p === 'string' && p.startsWith('/orbitdb/heads/'));
|
|
10
|
+
}
|
|
11
|
+
export function setupEventHandlers(libp2p) {
|
|
8
12
|
const cleanupFunctions = [];
|
|
9
13
|
const certificateIntervals = new Set();
|
|
10
14
|
let isShuttingDown = false;
|
|
11
15
|
const peerConnectHandler = async (event) => {
|
|
12
16
|
const peer = event.detail;
|
|
17
|
+
if (loggingConfig.logLevels.peer)
|
|
18
|
+
log('peer:connect', peer);
|
|
19
|
+
};
|
|
20
|
+
libp2p.addEventListener('peer:connect', peerConnectHandler);
|
|
21
|
+
cleanupFunctions.push(() => libp2p.removeEventListener('peer:connect', peerConnectHandler));
|
|
22
|
+
const peerIdentifyHandler = async (event) => {
|
|
23
|
+
if (isShuttingDown)
|
|
24
|
+
return;
|
|
25
|
+
const detail = event.detail;
|
|
26
|
+
const protocols = detail?.protocols ?? [];
|
|
27
|
+
const peerIdStr = detail?.peerId?.toString?.() ?? 'unknown';
|
|
28
|
+
const direction = detail?.connection?.direction;
|
|
29
|
+
if (loggingConfig.logLevels.peer) {
|
|
30
|
+
log('peer:protocols-after-identify', {
|
|
31
|
+
peerId: peerIdStr,
|
|
32
|
+
direction,
|
|
33
|
+
protocols: Array.isArray(protocols) ? protocols : Array.from(protocols || []),
|
|
34
|
+
});
|
|
35
|
+
}
|
|
36
|
+
if (!isRelayRequireOrbitdbHeadsProtocolEnabled())
|
|
37
|
+
return;
|
|
38
|
+
const connection = detail?.connection;
|
|
39
|
+
if (connection?.direction !== 'inbound')
|
|
40
|
+
return;
|
|
41
|
+
if (remoteHasOrbitdbHeadsProtocol(protocols))
|
|
42
|
+
return;
|
|
13
43
|
try {
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
try {
|
|
18
|
-
const peerId = peer?.toString?.() || peer?.id?.toString?.() || 'unknown';
|
|
19
|
-
let peerRecord = null;
|
|
20
|
-
try {
|
|
21
|
-
peerRecord = await libp2p.peerStore.get(peer?.id || peer);
|
|
22
|
-
}
|
|
23
|
-
catch (error) {
|
|
24
|
-
if (error?.code !== 'ERR_NOT_FOUND')
|
|
25
|
-
throw error;
|
|
26
|
-
}
|
|
27
|
-
const protocols = peerRecord?.protocols ?? [];
|
|
28
|
-
if (loggingConfig.logLevels.peer) {
|
|
29
|
-
log('peer:protocols-after-identify', {
|
|
30
|
-
peerId,
|
|
31
|
-
protocols: Array.isArray(protocols) ? protocols : Array.from(protocols || []),
|
|
32
|
-
});
|
|
33
|
-
}
|
|
44
|
+
incRelayInboundOrbitdbHeadsReject();
|
|
45
|
+
if (loggingConfig.logLevels.peer) {
|
|
46
|
+
log('peer:identify:rejected-missing-orbitdb-heads %s', peerIdStr);
|
|
34
47
|
}
|
|
35
|
-
|
|
48
|
+
await connection.close();
|
|
36
49
|
}
|
|
37
|
-
catch
|
|
38
|
-
|
|
39
|
-
// eslint-disable-next-line no-console
|
|
40
|
-
console.error('Failed to identify peer:', err);
|
|
41
|
-
}
|
|
50
|
+
catch {
|
|
51
|
+
// ignore close errors (peer may already be gone)
|
|
42
52
|
}
|
|
43
53
|
};
|
|
44
|
-
libp2p.addEventListener('peer:
|
|
45
|
-
cleanupFunctions.push(() => libp2p.removeEventListener('peer:
|
|
54
|
+
libp2p.addEventListener('peer:identify', peerIdentifyHandler);
|
|
55
|
+
cleanupFunctions.push(() => libp2p.removeEventListener('peer:identify', peerIdentifyHandler));
|
|
46
56
|
const certificateHandler = () => {
|
|
47
57
|
const interval = setInterval(() => {
|
|
48
58
|
const mas = libp2p
|
|
@@ -63,42 +73,6 @@ export function setupEventHandlers(libp2p, databaseService) {
|
|
|
63
73
|
};
|
|
64
74
|
libp2p.addEventListener('peer:disconnect', peerDisconnectHandler);
|
|
65
75
|
cleanupFunctions.push(() => libp2p.removeEventListener('peer:disconnect', peerDisconnectHandler));
|
|
66
|
-
const syncQueue = new PQueue({ concurrency: 2 });
|
|
67
|
-
const subscribedOrbitdbTopics = new Set();
|
|
68
|
-
const pubsub = libp2p.services.pubsub;
|
|
69
|
-
const ensureOrbitdbTopicSubscribed = async (topic) => {
|
|
70
|
-
if (!topic?.startsWith('/orbitdb/'))
|
|
71
|
-
return;
|
|
72
|
-
if (subscribedOrbitdbTopics.has(topic))
|
|
73
|
-
return;
|
|
74
|
-
try {
|
|
75
|
-
await pubsub.subscribe(topic);
|
|
76
|
-
subscribedOrbitdbTopics.add(topic);
|
|
77
|
-
await databaseService.prefetchManifestForLogging?.(topic);
|
|
78
|
-
{
|
|
79
|
-
const dbName = databaseService.getCachedDbName?.(topic);
|
|
80
|
-
syncLog('Explicitly subscribed relay pubsub to OrbitDB topic:', inspect(dbName ? { topic, dbName } : { topic }, { depth: null, colors: false, compact: false }));
|
|
81
|
-
}
|
|
82
|
-
}
|
|
83
|
-
catch (error) {
|
|
84
|
-
syncLog('Failed to subscribe relay pubsub to OrbitDB topic:', topic, error?.message || String(error));
|
|
85
|
-
}
|
|
86
|
-
};
|
|
87
|
-
const pubsubMessageHandler = (event) => {
|
|
88
|
-
if (isShuttingDown)
|
|
89
|
-
return;
|
|
90
|
-
const msg = event.detail;
|
|
91
|
-
if (typeof msg.topic === 'string' && msg.topic.startsWith('/orbitdb/')) {
|
|
92
|
-
const dbName = databaseService.getCachedDbName?.(msg.topic);
|
|
93
|
-
syncLog('Received pubsub message:', inspect(dbName ? { topic: msg.topic, dbName } : { topic: msg.topic }, { depth: null, colors: false, compact: false }));
|
|
94
|
-
}
|
|
95
|
-
if (msg.topic && msg.topic.startsWith('/orbitdb/')) {
|
|
96
|
-
syncQueue.add(() => ensureOrbitdbTopicSubscribed(msg.topic));
|
|
97
|
-
syncQueue.add(() => databaseService.syncAllOrbitDBRecords(msg.topic));
|
|
98
|
-
}
|
|
99
|
-
};
|
|
100
|
-
libp2p.services.pubsub.addEventListener('message', pubsubMessageHandler);
|
|
101
|
-
cleanupFunctions.push(() => libp2p.services.pubsub.removeEventListener('message', pubsubMessageHandler));
|
|
102
76
|
const connectionOpenHandler = async (event) => {
|
|
103
77
|
const connection = event.detail;
|
|
104
78
|
if (loggingConfig.logLevels.connection)
|
|
@@ -106,26 +80,9 @@ export function setupEventHandlers(libp2p, databaseService) {
|
|
|
106
80
|
};
|
|
107
81
|
libp2p.addEventListener('connection:open', connectionOpenHandler);
|
|
108
82
|
cleanupFunctions.push(() => libp2p.removeEventListener('connection:open', connectionOpenHandler));
|
|
109
|
-
const subscriptionChangeHandler = (event) => {
|
|
110
|
-
if (isShuttingDown)
|
|
111
|
-
return;
|
|
112
|
-
if (event.detail?.subscriptions) {
|
|
113
|
-
for (const subscription of event.detail.subscriptions) {
|
|
114
|
-
if (subscription.topic?.startsWith('/orbitdb/')) {
|
|
115
|
-
syncQueue.add(() => ensureOrbitdbTopicSubscribed(subscription.topic));
|
|
116
|
-
syncQueue.add(() => databaseService.syncAllOrbitDBRecords(subscription.topic));
|
|
117
|
-
}
|
|
118
|
-
}
|
|
119
|
-
}
|
|
120
|
-
};
|
|
121
|
-
pubsub.addEventListener('subscription-change', subscriptionChangeHandler);
|
|
122
|
-
cleanupFunctions.push(() => pubsub.removeEventListener('subscription-change', subscriptionChangeHandler));
|
|
123
83
|
return async () => {
|
|
124
84
|
isShuttingDown = true;
|
|
125
85
|
cleanupFunctions.forEach((cleanup) => cleanup());
|
|
126
|
-
syncQueue.pause();
|
|
127
|
-
syncQueue.clear();
|
|
128
|
-
await syncQueue.onIdle();
|
|
129
86
|
for (const interval of certificateIntervals) {
|
|
130
87
|
clearInterval(interval);
|
|
131
88
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"handlers.js","sourceRoot":"","sources":["../../src/events/handlers.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,
|
|
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
|
package/dist/index.d.ts.map
CHANGED
|
@@ -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
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"}
|
package/dist/relay.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"relay.d.ts","sourceRoot":"","sources":["../src/relay.ts"],"names":[],"mappings":"
|
|
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
|
|
71
|
-
const
|
|
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:
|
|
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
|
-
|
|
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":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,QAAQ,CAAA;AACrC,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"relay.js","sourceRoot":"","sources":["../src/relay.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,QAAQ,CAAA;AACrC,OAAO,EAAE,UAAU,IAAI,oBAAoB,EAAE,MAAM,yBAAyB,CAAA;AAC5E,OAAO,EAAE,sBAAsB,EAAE,MAAM,qBAAqB,CAAA;AAC5D,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAA;AAEhC,OAAO,EAAE,kBAAkB,EAAE,MAAM,oBAAoB,CAAA;AACvD,OAAO,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAA;AACzD,OAAO,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAA;AACrD,OAAO,EAAE,yBAAyB,EAAqC,MAAM,2CAA2C,CAAA;AACxH,OAAO,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAA;AACzD,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAA;AACnD,OAAO,EAAE,cAAc,EAAE,GAAG,EAAE,MAAM,mBAAmB,CAAA;AAWvD,SAAS,+BAA+B,CAAC,MAAW;IAClD,IAAI,CAAC,MAAM,IAAI,MAAM,CAAC,6BAA6B;QAAE,OAAM;IAE3D,MAAM,oBAAoB,GAAG,MAAM,CAAC,YAAY,EAAE,IAAI,CAAC,MAAM,CAAC,CAAA;IAC9D,MAAM,cAAc,GAAG,MAAM,CAAC,MAAM,EAAE,IAAI,CAAC,MAAM,CAAC,CAAA;IAElD,IAAI,OAAO,oBAAoB,KAAK,UAAU,EAAE,CAAC;QAC/C,MAAM,CAAC,YAAY,GAAG,KAAK,EAAE,IAAS,EAAE,QAAgB,EAAE,OAAY,EAAE,EAAE;YACxE,MAAM,eAAe,GAAG,OAAO,QAAQ,KAAK,QAAQ,IAAI,QAAQ,CAAC,UAAU,CAAC,iBAAiB,CAAC,CAAA;YAC9F,MAAM,MAAM,GAAG,IAAI,EAAE,QAAQ,EAAE,EAAE,IAAI,IAAI,EAAE,EAAE,EAAE,QAAQ,EAAE,EAAE,IAAI,SAAS,CAAA;YAExE,IAAI,eAAe,EAAE,CAAC;gBACpB,cAAc,CAAC,kBAAkB,EAAE,MAAM,EAAE,QAAQ,CAAC,CAAA;YACtD,CAAC;YAED,IAAI,CAAC;gBACH,MAAM,MAAM,GAAG,MAAM,oBAAoB,CAAC,IAAI,EAAE,QAAQ,EAAE,OAAO,CAAC,CAAA;gBAClE,IAAI,eAAe,EAAE,CAAC;oBACpB,cAAc,CAAC,sBAAsB,EAAE,MAAM,EAAE,QAAQ,CAAC,CAAA;gBAC1D,CAAC;gBACD,OAAO,MAAM,CAAA;YACf,CAAC;YAAC,OAAO,KAAU,EAAE,CAAC;gBACpB,IAAI,eAAe,EAAE,CAAC;oBACpB,cAAc,CAAC,qBAAqB,EAAE,MAAM,EAAE,QAAQ,EAAE,KAAK,EAAE,OAAO,IAAI,MAAM,CAAC,KAAK,CAAC,CAAC,CAAA;gBAC1F,CAAC;gBACD,MAAM,KAAK,CAAA;YACb,CAAC;QACH,CAAC,CAAA;IACH,CAAC;IAED,IAAI,OAAO,cAAc,KAAK,UAAU,EAAE,CAAC;QACzC,MAAM,CAAC,MAAM,GAAG,KAAK,EAAE,QAAgB,EAAE,OAAY,EAAE,OAAY,EAAE,EAAE;YACrE,MAAM,eAAe,GAAG,OAAO,QAAQ,KAAK,QAAQ,IAAI,QAAQ,CAAC,UAAU,CAAC,iBAAiB,CAAC,CAAA;YAC9F,IAAI,CAAC,eAAe,EAAE,CAAC;gBACrB,OAAO,MAAM,cAAc,CAAC,QAAQ,EAAE,OAAO,EAAE,OAAO,CAAC,CAAA;YACzD,CAAC;YAED,cAAc,CAAC,sBAAsB,EAAE,QAAQ,CAAC,CAAA;YAChD,MAAM,cAAc,GAAG,KAAK,EAAE,OAAY,EAAE,EAAE;gBAC5C,cAAc,CACZ,uBAAuB,EACvB,QAAQ,EACR,OAAO,EAAE,UAAU,EAAE,UAAU,EAAE,QAAQ,EAAE,EAAE,IAAI,SAAS,CAC3D,CAAA;gBACD,OAAO,MAAM,OAAO,CAAC,OAAO,CAAC,CAAA;YAC/B,CAAC,CAAA;YAED,OAAO,MAAM,cAAc,CAAC,QAAQ,EAAE,cAAc,EAAE,OAAO,CAAC,CAAA;QAChE,CAAC,CAAA;IACH,CAAC;IAED,MAAM,CAAC,6BAA6B,GAAG,IAAI,CAAA;AAC7C,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,UAAU,CAAC,OAAqB,EAAE;IACtD,MAAM,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAA;IACzC,MAAM,UAAU,GACd,IAAI,CAAC,UAAU,IAAI,OAAO,CAAC,GAAG,CAAC,cAAc,IAAI,OAAO,CAAC,GAAG,CAAC,oBAAoB,IAAI,2BAA2B,CAAA;IAElH,MAAM,OAAO,GAAG,MAAM,iBAAiB,CAAC,UAAU,CAAC,CAAA;IACnD,MAAM,EAAE,UAAU,EAAE,SAAS,EAAE,GAAG,OAAO,CAAA;IAEzC,IAAI,UAAU,GAAG,OAAO,CAAC,UAAU,CAAA;IACnC,IAAI,UAAU,EAAE,CAAC;QACf,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,CAAC,gBAAgB,IAAI,OAAO,CAAC,GAAG,CAAC,cAAc,CAAA;QACtE,IAAI,GAAG,EAAE,CAAC;YACR,UAAU,GAAG,sBAAsB,CAAC,oBAAoB,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC,CAAA;QACvE,CAAC;IACH,CAAC;IAED,MAAM,MAAM,GAAG,MAAM,YAAY,CAC/B,kBAAkB,CAAC,UAAU,EAAE,SAAS,EAAE;QACxC,kBAAkB,EAAE,yBAAyB,CAAC;YAC5C,SAAS;YACT,UAAU;YACV,gBAAgB,EAAE,IAAI,CAAC,UAAU,EAAE,SAAS,CAAC;SAC9C,CAAC;KACH,CAAC,CACH,CAAA;IACD,+BAA+B,CAAC,MAAa,CAAC,CAAA;IAC9C,MAAM,kBAAkB,GAAI,MAAc,CAAC,QAAQ,CAAC,kBAAkD,CAAA;IACtG,MAAM,oBAAoB,GAAG,MAAM,kBAAkB,CAAC,MAAa,CAAC,CAAA;IAEpE,MAAM,aAAa,GAAG,IAAI,aAAa,CAAC;QACtC,SAAS,EAAE,GAAG,EAAE,CAAC,MAAa;QAC9B,OAAO,EAAE,kBAAkB,CAAC,yBAAyB,EAAE;KACxD,CAAC,CAAA;IACF,MAAM,aAAa,CAAC,KAAK,EAAE,CAAA;IAC3B,aAAa,CAAC,uBAAuB,CAAC,MAAa,CAAC,CAAA;IAEpD,IAAI,aAAa,CAAC,iBAAiB,EAAE,CAAC;QACpC,GAAG,CAAC,kBAAkB,EAAE,MAAM,CAAC,MAAM,CAAC,QAAQ,EAAE,CAAC,CAAA;QACjD,GAAG,CAAC,cAAc,EAAE,MAAM,CAAC,aAAa,EAAE,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAA;IACxE,CAAC;IAED,OAAO;QACL,IAAI,EAAE,KAAK,IAAI,EAAE;YACf,IAAI,CAAC;gBACH,MAAM,oBAAoB,EAAE,EAAE,CAAA;YAChC,CAAC;YAAC,MAAM,CAAC;gBACP,SAAS;YACX,CAAC;YACD,IAAI,CAAC;gBACH,MAAM,aAAa,CAAC,IAAI,EAAE,CAAA;YAC5B,CAAC;YAAC,MAAM,CAAC;gBACP,SAAS;YACX,CAAC;YACD,IAAI,CAAC;gBACH,MAAM,MAAM,CAAC,IAAI,EAAE,CAAA;YACrB,CAAC;YAAC,MAAM,CAAC;gBACP,SAAS;YACX,CAAC;YACD,IAAI,CAAC;gBACH,MAAM,SAAS,CAAC,KAAK,EAAE,CAAA;YACzB,CAAC;YAAC,MAAM,CAAC;gBACP,SAAS;YACX,CAAC;YACD,IAAI,CAAC;gBACH,MAAM,UAAU,CAAC,KAAK,EAAE,CAAA;YAC1B,CAAC;YAAC,MAAM,CAAC;gBACP,SAAS;YACX,CAAC;QACH,CAAC;KACF,CAAA;AACH,CAAC"}
|
|
@@ -55,6 +55,8 @@ type MetricsServerOptions = {
|
|
|
55
55
|
getLibp2p?: () => Libp2pLike | null;
|
|
56
56
|
pinning?: PinningHttpHandlers;
|
|
57
57
|
};
|
|
58
|
+
/** Incremented when `RELAY_REQUIRE_ORBITDB_HEADS_PROTOCOL` closes an inbound peer after Identify. */
|
|
59
|
+
export declare function incRelayInboundOrbitdbHeadsReject(): void;
|
|
58
60
|
/** `*.${zone}` is the AutoTLS wildcard; e.g. `metrics.${zone}` is valid for HTTPS when cert is provisioned. */
|
|
59
61
|
export declare function autoTlsServingZoneFromPeerId(peerId: Libp2pLike['peerId']): string | null;
|
|
60
62
|
export declare class MetricsServer {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"metrics.d.ts","sourceRoot":"","sources":["../../src/services/metrics.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,MAAM,CAAA;AACvB,OAAO,KAAK,MAAM,OAAO,CAAA;AAUzB,KAAK,UAAU,GAAG;IAChB,MAAM,CAAC,EAAE;QAAE,QAAQ,EAAE,MAAM,MAAM,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM;YAAE,KAAK,EAAE,UAAU,CAAA;SAAE,CAAA;KAAE,CAAA;IACxE,aAAa,CAAC,EAAE,MAAM,KAAK,CAAC;QAAE,QAAQ,EAAE,MAAM,MAAM,CAAA;KAAE,CAAC,CAAA;IACvD,cAAc,CAAC,EAAE,MAAM,OAAO,EAAE,CAAA;CACjC,CAAA;AAED,wFAAwF;AACxF,MAAM,MAAM,iBAAiB,GAAG;IAC9B,EAAE,EAAE,OAAO,CAAA;IACX,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,+EAA+E;IAC/E,cAAc,CAAC,EAAE,OAAO,CAAA;IACxB,4FAA4F;IAC5F,gBAAgB,CAAC,EAAE,OAAO,CAAA;IAC1B,gHAAgH;IAChH,kBAAkB,CAAC,EAAE,MAAM,EAAE,CAAA;IAC7B,oFAAoF;IACpF,SAAS,CAAC,EAAE,OAAO,CAAA;CACpB,CAAA;AAED,iFAAiF;AACjF,MAAM,MAAM,qBAAqB,GAC7B;IAAE,EAAE,EAAE,IAAI,CAAC;IAAC,WAAW,CAAC,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,aAAa,CAAC,UAAU,CAAC,CAAA;CAAE,GACrE;IAAE,EAAE,EAAE,KAAK,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,CAAA;AAEhD,MAAM,MAAM,mBAAmB,GAAG;IAChC,QAAQ,EAAE,MAAM,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;IACvC,kFAAkF;IAClF,YAAY,EAAE,CAAC,IAAI,CAAC,EAAE;QAAE,OAAO,CAAC,EAAE,MAAM,CAAA;KAAE,KAAK;QAAE,SAAS,EAAE,KAAK,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAA;IAC3G,YAAY,EAAE,CAAC,SAAS,EAAE,MAAM,KAAK,OAAO,CAAC,iBAAiB,CAAC,CAAA;IAC/D;;;OAGG;IACH,eAAe,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE,MAAM,KAAK,OAAO,CAAC,qBAAqB,CAAC,CAAA;CAC1F,CAAA;AAED,KAAK,oBAAoB,GAAG;IAC1B,SAAS,CAAC,EAAE,MAAM,UAAU,GAAG,IAAI,CAAA;IACnC,OAAO,CAAC,EAAE,mBAAmB,CAAA;CAC9B,CAAA;
|
|
1
|
+
{"version":3,"file":"metrics.d.ts","sourceRoot":"","sources":["../../src/services/metrics.ts"],"names":[],"mappings":"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"}
|
package/dist/services/metrics.js
CHANGED
|
@@ -17,6 +17,14 @@ const syncDurationHistogram = new client.Histogram({
|
|
|
17
17
|
labelNames: ['type'],
|
|
18
18
|
buckets: [0.1, 0.5, 1, 2, 5, 10],
|
|
19
19
|
});
|
|
20
|
+
const relayInboundOrbitdbHeadsRejectCounter = new client.Counter({
|
|
21
|
+
name: 'relay_inbound_rejected_missing_orbitdb_heads_total',
|
|
22
|
+
help: 'Inbound connections closed after Identify because the remote advertised no /orbitdb/heads/* protocol',
|
|
23
|
+
});
|
|
24
|
+
/** Incremented when `RELAY_REQUIRE_ORBITDB_HEADS_PROTOCOL` closes an inbound peer after Identify. */
|
|
25
|
+
export function incRelayInboundOrbitdbHeadsReject() {
|
|
26
|
+
relayInboundOrbitdbHeadsRejectCounter.inc();
|
|
27
|
+
}
|
|
20
28
|
function isPublicAddress(addr) {
|
|
21
29
|
if (!addr)
|
|
22
30
|
return false;
|