@pkcprotocol/pkc-js 0.0.29 → 0.0.31
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 +2 -2
- package/dist/browser/errors.d.ts +1 -0
- package/dist/browser/errors.js +1 -0
- package/dist/browser/errors.js.map +1 -1
- package/dist/browser/generated-version.d.ts +1 -1
- package/dist/browser/generated-version.js +1 -1
- package/dist/browser/helia/helia-for-pkc.js +86 -48
- package/dist/browser/helia/helia-for-pkc.js.map +1 -1
- package/dist/browser/helia/types.d.ts +5 -1
- package/dist/browser/helia/util.d.ts +6 -2
- package/dist/browser/helia/util.js +103 -56
- package/dist/browser/helia/util.js.map +1 -1
- package/dist/browser/pkc-error.d.ts +1 -1
- package/dist/node/errors.d.ts +1 -0
- package/dist/node/errors.js +1 -0
- package/dist/node/errors.js.map +1 -1
- package/dist/node/generated-version.d.ts +1 -1
- package/dist/node/generated-version.js +1 -1
- package/dist/node/helia/helia-for-pkc.js +86 -48
- package/dist/node/helia/helia-for-pkc.js.map +1 -1
- package/dist/node/helia/types.d.ts +5 -1
- package/dist/node/helia/util.d.ts +6 -2
- package/dist/node/helia/util.js +103 -56
- package/dist/node/helia/util.js.map +1 -1
- package/dist/node/pkc-error.d.ts +1 -1
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -18,7 +18,7 @@ Note: IPFS files are immutable, fetched by their CID, which is a hash of their c
|
|
|
18
18
|
### Schema:
|
|
19
19
|
|
|
20
20
|
```js
|
|
21
|
-
Address: string // a PKC author, community or multisub "address" can be a crypto domain like memes.bso, an IPNS name, an ethereum address, etc.
|
|
21
|
+
Address: string // a PKC author, community or multisub "address" can be a crypto domain like memes.bso, an IPNS name, an ethereum address, etc.
|
|
22
22
|
Publication {
|
|
23
23
|
author: Author
|
|
24
24
|
communityPublicKey: string // IPNS public key of the community this publication is directed to
|
|
@@ -143,7 +143,7 @@ Nft {
|
|
|
143
143
|
address: string // address of the NFT contract
|
|
144
144
|
id: string // tokenId or index of the specific NFT used, must be string type, not number
|
|
145
145
|
signature: Signature // proof that author.address owns the nft
|
|
146
|
-
// how to resolve and verify NFT signatures https://github.com/
|
|
146
|
+
// how to resolve and verify NFT signatures https://github.com/bitsocialnet/evm-contract-challenge/blob/master/docs/nft.md
|
|
147
147
|
}
|
|
148
148
|
Signature {
|
|
149
149
|
signature: string // data in base64
|
package/dist/browser/errors.d.ts
CHANGED
|
@@ -20,6 +20,7 @@ export declare enum messages {
|
|
|
20
20
|
ERR_FAILED_TO_DIAL_ANY_PEERS_PROVIDING_CID = "Failed to dial and connect to any peers providing a CID",
|
|
21
21
|
ERR_GET_COMMUNITY_TIMED_OUT = "pkc.getCommunity({address}) timed out",
|
|
22
22
|
ERR_TIMEOUT_WAITING_FOR_PUBSUB_TOPIC_PEERS = "Timeout waiting for propagation of pubsub topic peers",
|
|
23
|
+
ERR_PUBSUB_TOPIC_PEER_WAIT_ABORTED = "Aborted while waiting for a peer to subscribe to a pubsub topic",
|
|
23
24
|
ERR_TIMED_OUT_RM_MFS_FILE = "Timed out removing MFS paths. We may need to nuke the whole MFS directory and republish everything",
|
|
24
25
|
ERR_ABORTED_RESOLVING_TEXT_RECORD = "Aborted resolving text record on domain",
|
|
25
26
|
ERR_CALLED_COMMUNITY_STOP_WITHOUT_UPDATE = "community.stop() called without calling update() first",
|
package/dist/browser/errors.js
CHANGED
|
@@ -21,6 +21,7 @@ export var messages;
|
|
|
21
21
|
messages["ERR_FAILED_TO_DIAL_ANY_PEERS_PROVIDING_CID"] = "Failed to dial and connect to any peers providing a CID";
|
|
22
22
|
messages["ERR_GET_COMMUNITY_TIMED_OUT"] = "pkc.getCommunity({address}) timed out";
|
|
23
23
|
messages["ERR_TIMEOUT_WAITING_FOR_PUBSUB_TOPIC_PEERS"] = "Timeout waiting for propagation of pubsub topic peers";
|
|
24
|
+
messages["ERR_PUBSUB_TOPIC_PEER_WAIT_ABORTED"] = "Aborted while waiting for a peer to subscribe to a pubsub topic";
|
|
24
25
|
messages["ERR_TIMED_OUT_RM_MFS_FILE"] = "Timed out removing MFS paths. We may need to nuke the whole MFS directory and republish everything";
|
|
25
26
|
messages["ERR_ABORTED_RESOLVING_TEXT_RECORD"] = "Aborted resolving text record on domain";
|
|
26
27
|
// PKC errors
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"errors.js","sourceRoot":"","sources":["../../src/errors.ts"],"names":[],"mappings":"AAAA,MAAM,CAAN,IAAY,
|
|
1
|
+
{"version":3,"file":"errors.js","sourceRoot":"","sources":["../../src/errors.ts"],"names":[],"mappings":"AAAA,MAAM,CAAN,IAAY,QA+WX;AA/WD,WAAY,QAAQ;IAChB,gFAAoE,CAAA;IACpE,yHAA6G,CAAA;IAC7G,6EAAiE,CAAA;IACjE,4FAAgF,CAAA;IAChF,4HAAgH,CAAA;IAChH,8HAAkH,CAAA;IAClH,iDAAqC,CAAA;IACrC,0GAA8F,CAAA;IAC9F,2KAA+J,CAAA;IAC/J,oGAAwF,CAAA;IACxF,8DAAkD,CAAA;IAClD,6EAAiE,CAAA;IACjE,iFAAqE,CAAA;IACrE,8HAAkH,CAAA;IAClH,8HAAkH,CAAA;IAClH,sHAA0G,CAAA;IAC1G,0JAA8I,CAAA;IAC9I,mJAAuI,CAAA;IACvI,kHAAsG,CAAA;IACtG,iFAAqE,CAAA;IACrE,gHAAoG,CAAA;IACpG,kHAAsG,CAAA;IACtG,4IAAgI,CAAA;IAChI,yFAA6E,CAAA;IAC7E,aAAa;IACb,+GAAmG,CAAA;IACnG,uGAA2F,CAAA;IAC3F,4HAAgH,CAAA;IAChH,qFAAyE,CAAA;IACzE,uFAA2E,CAAA;IAC3E,uFAA2E,CAAA;IAC3E,6EAAiE,CAAA;IACjE,mHAAuG,CAAA;IACvG,wJAA4I,CAAA;IAC5I,oNAAwM,CAAA;IACxM,sOAA0N,CAAA;IAC1N,8PAAkP,CAAA;IAClP,wMAA4L,CAAA;IAC5L,8OAAkO,CAAA;IAClO,wFAA4E,CAAA;IAC5E,4FAAgF,CAAA;IAChF,eAAe;IACf,0FAA8E,CAAA;IAC9E,kGAAsF,CAAA;IACtF,yFAA6E,CAAA;IAC7E,kFAAsE,CAAA;IACtE,iHAAqG,CAAA;IACrG,2HAA+G,CAAA;IAC/G,8FAAkF,CAAA;IAClF,gHAAoG,CAAA;IACpG,yHAA6G,CAAA;IAC7G,0GAA8F,CAAA;IAC9F,yGAA6F,CAAA;IAC7F,mJAAuI,CAAA;IACvI,mJAAuI,CAAA;IACvI,8HAAkH,CAAA;IAClH,2DAA+C,CAAA;IAC/C,mFAAuE,CAAA;IACvE,wHAA4G,CAAA;IAC5G,uGAA2F,CAAA;IAC3F,mHAAuG,CAAA;IACvG,0IAA8H,CAAA;IAC9H,iGAAqF,CAAA;IACrF,wIAA4H,CAAA;IAC5H,2FAA+E,CAAA;IAC/E,qOAAyN,CAAA;IACzN,2LAA+K,CAAA;IAC/K,8LAAkL,CAAA;IAClL,4HAAgH,CAAA;IAChH,iJAAqI,CAAA;IACrI,qIAAyH,CAAA;IACzH,kGAAsF,CAAA;IACtF,yIAA6H,CAAA;IAC7H,8GAAkG,CAAA;IAClG,6EAAiE,CAAA;IACjE,2GAA+F,CAAA;IAC/F,qJAAyI,CAAA;IACzI,+JAAmJ,CAAA;IACnJ,iJAAqI,CAAA;IACrI,uIAA2H,CAAA;IAC3H,6MAAiM,CAAA;IACjM,qHAAyG,CAAA;IACzG,yLAA6K,CAAA;IAC7K,6HAAiH,CAAA;IAEjH,gBAAgB;IAChB,yEAA6D,CAAA;IAC7D,0FAA8E,CAAA;IAC9E,4GAAgG,CAAA;IAChG,0HAA8G,CAAA;IAC9G,oHAAwG,CAAA;IACxG,oGAAwF,CAAA;IACxF,iGAAqF,CAAA;IACrF,+FAAmF,CAAA;IACnF,mGAAuF,CAAA;IACvF,yFAA6E,CAAA;IAC7E,oFAAwE,CAAA;IACxE,uGAA2F,CAAA;IAC3F,6GAAiG,CAAA;IACjG,6HAAiH,CAAA;IACjH,sKAA0J,CAAA;IAC1J,sJAA0I,CAAA;IAC1I,oKAAwJ,CAAA;IACxJ,gLAAoK,CAAA;IACpK,4IAAgI,CAAA;IAChI,uHAA2G,CAAA;IAC3G,qHAAyG,CAAA;IACzG,kLAAsK,CAAA;IACtK,6GAAiG,CAAA;IACjG,oIAAwH,CAAA;IACxH,+GAAmG,CAAA;IACnG,uEAA2D,CAAA;IAC3D,2HAA+G,CAAA;IAC/G,uJAA2I,CAAA;IAC3I,iJAAqI,CAAA;IACrI,mIAAuH,CAAA;IACvH,+GAAmG,CAAA;IACnG,0HAA8G,CAAA;IAC9G,+HAAmH,CAAA;IACnH,gHAAoG,CAAA;IACpG,8IAAkI,CAAA;IAClI,yHAA6G,CAAA;IAC7G,gHAAoG,CAAA;IACpG,sHAA0G,CAAA;IAC1G,iGAAqF,CAAA;IACrF,0GAA8F,CAAA;IAC9F,2IAA+H,CAAA;IAC/H,qJAAyI,CAAA;IACzI,sIAA0H,CAAA;IAC1H,4IAAgI,CAAA;IAChI,iKAAqJ,CAAA;IACrJ,yJAA6I,CAAA;IAC7I,wGAA4F,CAAA;IAC5F,6FAAiF,CAAA;IACjF,8GAAkG,CAAA;IAClG,iIAAqH,CAAA;IACrH,0JAA8I,CAAA;IAC9I,oQAAwP,CAAA;IACxP,0IAA8H,CAAA;IAE9H,cAAc;IACd,2GAA+F,CAAA;IAC/F,+FAAmF,CAAA;IACnF,8FAAkF,CAAA;IAClF,sHAA0G,CAAA;IAE1G,0BAA0B;IAC1B,4EAAgE,CAAA;IAChE,0FAA8E,CAAA;IAC9E,qIAAyH,CAAA;IACzH,gOAAoN,CAAA;IACpN,8LAAkL,CAAA;IAClL,kHAAsG,CAAA;IACtG,uGAA2F,CAAA;IAC3F,kJAAsI,CAAA;IACtI,yHAA6G,CAAA;IAC7G,2GAA+F,CAAA;IAC/F,+GAAmG,CAAA;IACnG,oIAAwH,CAAA;IACxH,mNAAuM,CAAA;IACvM,qHAAyG,CAAA;IACzG,+IAAmI,CAAA;IACnI,gIAAoH,CAAA;IACpH,yGAA6F,CAAA;IAC7F,mIAAuH,CAAA;IACvH,2HAA+G,CAAA;IAC/G,gFAAoE,CAAA;IACpE,sFAA0E,CAAA;IAC1E,0FAA8E,CAAA;IAC9E,4GAAgG,CAAA;IAChG,4GAAgG,CAAA;IAChG,gHAAoG,CAAA;IACpG,oGAAwF,CAAA;IACxF,iFAAqE,CAAA;IACrE,+GAAmG,CAAA;IACnG,6HAAiH,CAAA;IACjH,uHAA2G,CAAA;IAC3G,oJAAwI,CAAA;IACxI,oKAAwJ,CAAA;IACxJ,qLAAyK,CAAA;IACzK,oMAAwL,CAAA;IACxL,yMAA6L,CAAA;IAC7L,2LAA+K,CAAA;IAC/K,gLAAoK,CAAA;IACpK,gLAAoK,CAAA;IACpK,kKAAsJ,CAAA;IACtJ,+KAAmK,CAAA;IACnK,2LAA+K,CAAA;IAC/K,iLAAqK,CAAA;IACrK,4KAAgK,CAAA;IAChK,mJAAuI,CAAA;IACvI,+JAAmJ,CAAA;IACnJ,2LAA+K,CAAA;IAC/K,0GAA8F,CAAA;IAC9F,wKAA4J,CAAA;IAC5J,wJAA4I,CAAA;IAC5I,yHAA6G,CAAA;IAC7G,wOAA4N,CAAA;IAC5N,6FAAiF,CAAA;IACjF,2HAA+G,CAAA;IAC/G,sEAA0D,CAAA;IAC1D,0EAA8D,CAAA;IAC9D,+MAAmM,CAAA;IACnM,mNAAuM,CAAA;IACvM,yNAA6M,CAAA;IAC7M,qMAAyL,CAAA;IACzL,yMAA6L,CAAA;IAC7L,+MAAmM,CAAA;IACnM,2JAA+I,CAAA;IAC/I,+KAA8J,CAAA;IAC9J,qGAAyF,CAAA;IACzF,qJAAyI,CAAA;IACzI,yGAA6F,CAAA;IAE7F,iBAAiB;IACjB,oHAAwG,CAAA;IACxG,iHAAqG,CAAA;IACrG,wGAA4F,CAAA;IAC5F,wFAA4E,CAAA;IAE5E,0CAA0C;IAC1C,4HAAgH,CAAA;IAChH,yFAA6E,CAAA;IAC7E,oGAAwF,CAAA;IAExF,uCAAuC;IAEvC,+IAAmI,CAAA;IACnI,8IAAkI,CAAA;IAClI,wHAA4G,CAAA;IAC5G,gIAAoH,CAAA;IACpH,uLAA2K,CAAA;IAC3K,+IAAmI,CAAA;IACnI,uKAA2J,CAAA;IAC3J,uJAA2I,CAAA;IAC3I,4KAAgK,CAAA;IAChK,0KAA8J,CAAA;IAC9J,gJAAoI,CAAA;IACpI,oIAAwH,CAAA;IACxH,qDAAyC,CAAA;IACzC,uFAA2E,CAAA;IAC3E,iHAAqG,CAAA;IACrG,iHAAqG,CAAA;IACrG,6GAAiG,CAAA;IACjG,6GAAiG,CAAA;IACjG,qGAAyF,CAAA;IACzF,yGAA6F,CAAA;IAC7F,sFAA0E,CAAA;IAC1E,uFAA2E,CAAA;IAC3E,qGAAyF,CAAA;IACzF,2DAA+C,CAAA;IAC/C,gFAAoE,CAAA;IACpE,oEAAwD,CAAA;IACxD,wEAA4D,CAAA;IAC5D,yGAA6F,CAAA;IAC7F,+FAAmF,CAAA;IACnF,gHAAoG,CAAA;IACpG,uFAA2E,CAAA;IAC3E,sEAA0D,CAAA;IAC1D,8GAAkG,CAAA;IAClG,6IAAiI,CAAA;IACjI,iGAAqF,CAAA;IACrF,0IAA8H,CAAA;IAC9H,8HAAkH,CAAA;IAClH,8HAAkH,CAAA;IAClH,0GAA8F,CAAA;IAC9F,0GAA8F,CAAA;IAC9F,kHAAsG,CAAA;IACtG,uGAA2F,CAAA;IAC3F,uGAA2F,CAAA;IAC3F,0GAA8F,CAAA;IAC9F,uGAA2F,CAAA;IAC3F,6HAAiH,CAAA;IACjH,+GAAmG,CAAA;IACnG,uGAA2F,CAAA;IAC3F,2FAA+E,CAAA;IAC/E,+JAAmJ,CAAA;IACnJ,yKAA6J,CAAA;IAC7J,4HAAgH,CAAA;IAChH,kIAAsH,CAAA;IACtH,+MAAmM,CAAA;IACnM,kMAAsL,CAAA;IACtL,uGAA2F,CAAA;IAC3F,4GAAgG,CAAA;IAChG,mGAAuF,CAAA;IACvF,6FAAiF,CAAA;IACjF,4GAAgG,CAAA;IAChG,yGAA6F,CAAA;IAC7F,4LAAgL,CAAA;IAChL,2JAA+I,CAAA;IAC/I,2IAA+H,CAAA;IAC/H,wHAA4G,CAAA;IAC5G,wJAA4I,CAAA;IAC5I,qJAAyI,CAAA;IACzI,yKAA6J,CAAA;IAC7J,0MAA8L,CAAA;IAC9L,4JAAgJ,CAAA;IAChJ,iJAAqI,CAAA;IACrI,uJAA2I,CAAA;IAC3I,uJAA2I,CAAA;IAC3I,iJAAqI,CAAA;IACrI,uKAA2J,CAAA;IAC3J,iKAAqJ,CAAA;IACrJ,4JAAgJ,CAAA;IAChJ,oHAAwG,CAAA;IACxG,mHAAuG,CAAA;IACvG,2HAA+G,CAAA;IAC/G,0HAA8G,CAAA;IAC9G,yHAA6G,CAAA;IAC7G,iIAAqH,CAAA;IAErH,sBAAsB;IACtB,2FAA+E,CAAA;IAC/E,iGAAqF,CAAA;IACrF,8GAAkG,CAAA;IAClG,2KAA+J,CAAA;IAE/J,kBAAkB;IAClB,+EAAmE,CAAA;IACnE,qGAAyF,CAAA;IACzF,iFAAqE,CAAA;IACrE,4FAAgF,CAAA;IAChF,2LAA+K,CAAA;IAC/K,gHAAoG,CAAA;IACpG,sHAA0G,CAAA;IAE1G,yBAAyB;IACzB,0HAA8G,CAAA;IAC9G,8FAAkF,CAAA;IAClF,0EAA8D,CAAA;IAC9D,uEAA2D,CAAA;IAC3D,iFAAqE,CAAA;IACrE,+JAAmJ,CAAA;IACnJ,oHAAwG,CAAA;IACxG,mHAAuG,CAAA;IACvG,mGAAuF,CAAA;IACvF,mFAAuE,CAAA;IACvE,qHAAyG,CAAA;IACzG,0JAA8I,CAAA;IAC9I,6NAAiN,CAAA;IACjN,iOAAqN,CAAA;IACrN,0IAA8H,CAAA;IAC9H,kGAAsF,CAAA;IACtF,2LAA+K,CAAA;IAC/K,2IAA+H,CAAA;IAC/H,gBAAgB;IAChB,4EAAgE,CAAA;IAChE,gFAAoE,CAAA;IACpE,wEAA4D,CAAA;IAC5D,0JAA8I,CAAA;IAC9I,4HAAgH,CAAA;IAChH,wKAA4J,CAAA;IAC5J,sHAA0G,CAAA;IAE1G,aAAa;IACb,+LAAmL,CAAA;IACnL,qFAAyE,CAAA;IACzE,wFAA4E,CAAA;IAC5E,uHAA2G,CAAA;IAC3G,kJAAsI,CAAA;IACtI,kHAAsG,CAAA;IACtG,gHAAoG,CAAA;IACpG,oHAAwG,CAAA;IACxG,yHAA6G,CAAA;IAC7G,2LAA+K,CAAA;IAC/K,mGAAuF,CAAA;AAC3F,CAAC,EA/WW,QAAQ,KAAR,QAAQ,QA+WnB"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
export declare const version = "0.0.
|
|
1
|
+
export declare const version = "0.0.31";
|
|
@@ -62,6 +62,12 @@ export async function createLibp2pJsClientOrUseExistingOne(pkcOptions) {
|
|
|
62
62
|
...pkcOptions.libp2pOptions,
|
|
63
63
|
// Configure connection manager to handle more concurrent streams
|
|
64
64
|
services: {
|
|
65
|
+
// Helia's libp2pDefaults.services include relay (circuitRelayServer), autoTLS,
|
|
66
|
+
// upnp, kadDHT, autoNAT, and a delegatedRouting client pointed at public-network
|
|
67
|
+
// defaults. Spreading all of those in is wrong for a client-side node — we'd be
|
|
68
|
+
// hosting a circuit relay, doing external TLS issuance, port-forwarding, and
|
|
69
|
+
// querying the public IPFS network in addition to the routers the user configured.
|
|
70
|
+
// Keep the service map narrow and explicit. (See review notes 2026-05-08.)
|
|
65
71
|
identify: identify(),
|
|
66
72
|
pubsub: gossipsub(),
|
|
67
73
|
// powers @helia/ipns pubsub fast-path: fetch latest record from new topic peers (PR ipfs/helia#906)
|
|
@@ -70,14 +76,21 @@ export async function createLibp2pJsClientOrUseExistingOne(pkcOptions) {
|
|
|
70
76
|
...pkcOptions.libp2pOptions?.services
|
|
71
77
|
}
|
|
72
78
|
},
|
|
73
|
-
|
|
79
|
+
// MemoryBlockstore: blocks lost on restart, every cold start re-fetches from network.
|
|
80
|
+
// Future optimization: blockstore-fs (Node) / blockstore-idb (browser). Not prioritized
|
|
81
|
+
// - pkc-js is browser-first and per-session usage dominates today.
|
|
82
|
+
blockstore: new MemoryBlockstore(),
|
|
74
83
|
blockBrokers: [bitswap()],
|
|
75
84
|
start: false,
|
|
76
85
|
...pkcOptions.heliaOptions
|
|
77
86
|
};
|
|
78
87
|
const helia = await createHelia(mergedHeliaInit);
|
|
79
|
-
|
|
80
|
-
|
|
88
|
+
// Helia's default content routers are [Libp2pRouter, HTTPGatewayRouter]. We use our own
|
|
89
|
+
// gateway-fan-out logic in base-client-manager, so the HTTP gateway router here is
|
|
90
|
+
// redundant and adds latency. Filter by class name (not index) so a future helia release
|
|
91
|
+
// that re-orders the array can't silently leave the gateway in or drop libp2p routing.
|
|
92
|
+
//@ts-expect-error — helia.routing.routers is internal
|
|
93
|
+
helia.routing.routers = helia.routing.routers.filter((r) => r.constructor.name !== "HTTPGatewayRouter");
|
|
81
94
|
log("Initialized libp2pjs helia with key", pkcOptions.key, "peer id", helia.libp2p.peerId.toString());
|
|
82
95
|
const pubsubEventHandler = new EventEmitter();
|
|
83
96
|
helia.libp2p.services.pubsub.addEventListener("message", (evt) => {
|
|
@@ -90,7 +103,40 @@ export async function createLibp2pJsClientOrUseExistingOne(pkcOptions) {
|
|
|
90
103
|
const ipnsNameResolver = ipns(helia, {
|
|
91
104
|
routers: [createIpnsPubusubRouter(helia)]
|
|
92
105
|
});
|
|
93
|
-
|
|
106
|
+
// @helia/ipns constructs routers as [LocalStoreRouting, HeliaRouting, ...userRouters].
|
|
107
|
+
// We drop LocalStoreRouting because pkc-js never publishes IPNS via @helia/ipns (kubo
|
|
108
|
+
// does that), so the local cache is always empty and just adds a wasted lookup. Keep
|
|
109
|
+
// HeliaRouting (HTTP delegated routing via helia.routing.routers) and our PubSubRouting.
|
|
110
|
+
// Filter by class name so a future @helia/ipns release that re-orders the array can't
|
|
111
|
+
// silently drop our pubsub router.
|
|
112
|
+
ipnsNameResolver.routers = ipnsNameResolver.routers.filter((r) => r?.constructor?.name !== "LocalStoreRouting");
|
|
113
|
+
// Side-channel awaitable warmup: gossipsub's pubsub.subscribe(topic) is sync and returns
|
|
114
|
+
// void, so we can't make it awaitable without breaking @helia/ipns and other internal
|
|
115
|
+
// callers that expect the sync contract. Instead, we expose `warmupForTopic(topic)` and
|
|
116
|
+
// dedupe in-flight warmups via a per-topic Map, so concurrent callers share a single
|
|
117
|
+
// findProviders/dial cycle.
|
|
118
|
+
const WARMUP_MAX_PEERS = 4;
|
|
119
|
+
const warmupPromisesByTopic = new Map();
|
|
120
|
+
const warmupForTopic = (topic, options) => {
|
|
121
|
+
if (helia.libp2p.services.pubsub.getSubscribers(topic).length > 0)
|
|
122
|
+
return Promise.resolve();
|
|
123
|
+
const existing = warmupPromisesByTopic.get(topic);
|
|
124
|
+
if (existing)
|
|
125
|
+
return existing;
|
|
126
|
+
const p = connectToPubsubPeers({
|
|
127
|
+
helia,
|
|
128
|
+
pubsubTopic: topic,
|
|
129
|
+
maxPeers: WARMUP_MAX_PEERS,
|
|
130
|
+
options,
|
|
131
|
+
log: Logger("pkc-js:helia:pubsub:warmup")
|
|
132
|
+
})
|
|
133
|
+
.then(() => undefined)
|
|
134
|
+
.finally(() => {
|
|
135
|
+
warmupPromisesByTopic.delete(topic);
|
|
136
|
+
});
|
|
137
|
+
warmupPromisesByTopic.set(topic, p);
|
|
138
|
+
return p;
|
|
139
|
+
};
|
|
94
140
|
const throwIfHeliaIsStoppingOrStopped = () => {
|
|
95
141
|
if (helia.libp2p.status === "stopped" || helia.libp2p.status === "stopping")
|
|
96
142
|
throw new PKCError("ERR_HELIAS_STOPPING_OR_STOPPED", {
|
|
@@ -109,24 +155,18 @@ export async function createLibp2pJsClientOrUseExistingOne(pkcOptions) {
|
|
|
109
155
|
log.trace("Resolving ipns name", ipnsName, "with options", options);
|
|
110
156
|
// @helia/ipns 9.2.x pubsub router throws NotFoundError if zero subscribers exist
|
|
111
157
|
// for the topic at .get() time. Await peer warmup so the resolver sees a populated
|
|
112
|
-
// subscriber list (the
|
|
113
|
-
// fire-and-forget — too late for the first .get()).
|
|
158
|
+
// subscriber list (the monkey-patched pubsub.subscribe also kicks off warmup,
|
|
159
|
+
// but fire-and-forget — too late for the first .get()).
|
|
114
160
|
const ipnsPubsubTopic = ipnsNameToIpnsOverPubsubTopic(ipnsNameAsPeerId.toString());
|
|
115
161
|
let warmupOutcome = { attempted: false };
|
|
116
162
|
if (helia.libp2p.services.pubsub.getSubscribers(ipnsPubsubTopic).length === 0) {
|
|
117
163
|
const warmupStart = Date.now();
|
|
118
164
|
try {
|
|
119
|
-
|
|
120
|
-
helia,
|
|
121
|
-
pubsubTopic: ipnsPubsubTopic,
|
|
122
|
-
maxPeers: 2,
|
|
123
|
-
options,
|
|
124
|
-
log: Logger("pkc-js:helia:ipns:name.resolve:warmup")
|
|
125
|
-
});
|
|
165
|
+
await warmupForTopic(ipnsPubsubTopic, options);
|
|
126
166
|
warmupOutcome = {
|
|
127
167
|
attempted: true,
|
|
128
168
|
durationMs: Date.now() - warmupStart,
|
|
129
|
-
|
|
169
|
+
subscribersAfterWarmup: helia.libp2p.services.pubsub.getSubscribers(ipnsPubsubTopic).length
|
|
130
170
|
};
|
|
131
171
|
}
|
|
132
172
|
catch (warmupErr) {
|
|
@@ -182,33 +222,23 @@ export async function createLibp2pJsClientOrUseExistingOne(pkcOptions) {
|
|
|
182
222
|
peers: async (topic, options) => helia.libp2p.services.pubsub.getSubscribers(topic),
|
|
183
223
|
publish: async (topic, data, options) => {
|
|
184
224
|
throwIfHeliaIsStoppingOrStopped();
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
log: Logger("pkc-js:helia:pubsub:publish:connectToPeersProvidingCid")
|
|
193
|
-
});
|
|
194
|
-
console.log("after", "pubsub publish", "connectToPeersProvidingCid", topic);
|
|
225
|
+
// Gossipsub publish only delivers to MESH peers (not all subscribers). Gate on
|
|
226
|
+
// mesh-peer count: a peer can be a subscriber but still in fanout / pending-graft.
|
|
227
|
+
const meshPeerCount = helia.libp2p.services.pubsub.getMeshPeers(topic).length;
|
|
228
|
+
if (meshPeerCount === 0) {
|
|
229
|
+
log.trace("pubsub publish: no mesh peers, warming up for topic", topic);
|
|
230
|
+
await warmupForTopic(topic, options);
|
|
231
|
+
log.trace("pubsub publish: warmup complete for topic", topic);
|
|
195
232
|
}
|
|
196
233
|
const res = await helia.libp2p.services.pubsub.publish(topic, data);
|
|
197
234
|
log("Published new data to pubsub topic (string, e.g. community address)", topic, "Direct gossipsub recipients (libp2p peer IDs, NOT signer/community addresses):", res.recipients.map((p) => p.toString()));
|
|
198
235
|
},
|
|
199
236
|
subscribe: async (topic, handler, options) => {
|
|
200
237
|
throwIfHeliaIsStoppingOrStopped();
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
pubsubTopic: topic,
|
|
206
|
-
maxPeers: 2,
|
|
207
|
-
options,
|
|
208
|
-
log: Logger("pkc-js:helia:pubsub:subscribe:connectToPeersProvidingCid")
|
|
209
|
-
});
|
|
210
|
-
console.log("after pubsub-subscribe", "connectToPeersProvidingCid", topic);
|
|
211
|
-
}
|
|
238
|
+
// Await warmup so the caller's first message arrives on a populated mesh.
|
|
239
|
+
// The monkey-patched native subscribe (below) also kicks off warmup, but
|
|
240
|
+
// fire-and-forget; this awaits the same in-flight promise via the dedup map.
|
|
241
|
+
await warmupForTopic(topic, options);
|
|
212
242
|
//@ts-expect-error
|
|
213
243
|
pubsubEventHandler.on(topic, handler);
|
|
214
244
|
helia.libp2p.services.pubsub.subscribe(topic);
|
|
@@ -233,6 +263,23 @@ export async function createLibp2pJsClientOrUseExistingOne(pkcOptions) {
|
|
|
233
263
|
return; // stop already in progress or over-released
|
|
234
264
|
clientFromMap.countOfUsesOfInstance--;
|
|
235
265
|
if (clientFromMap.countOfUsesOfInstance === 0) {
|
|
266
|
+
// Remove from the lookup map BEFORE awaiting helia.stop() so a concurrent
|
|
267
|
+
// createLibp2pJsClientOrUseExistingOne() can't grab a mid-stopping client.
|
|
268
|
+
delete libp2pJsClients[pkcOptions.key];
|
|
269
|
+
// Tear down the IPNS pubsub router's internal subscription state.
|
|
270
|
+
// PubSubRouting (from @helia/ipns/routing) implements Startable and tracks its
|
|
271
|
+
// own subscriptions list — without stop() those subscriptions leak past helia.
|
|
272
|
+
for (const router of ipnsNameResolver.routers) {
|
|
273
|
+
const lifecycle = router;
|
|
274
|
+
if (typeof lifecycle.stop === "function") {
|
|
275
|
+
try {
|
|
276
|
+
await lifecycle.stop();
|
|
277
|
+
}
|
|
278
|
+
catch (e) {
|
|
279
|
+
log.error("Error stopping IPNS router", router?.constructor?.name, e);
|
|
280
|
+
}
|
|
281
|
+
}
|
|
282
|
+
}
|
|
236
283
|
for (const topic of helia.libp2p.services.pubsub.getTopics())
|
|
237
284
|
helia.libp2p.services.pubsub.unsubscribe(topic);
|
|
238
285
|
try {
|
|
@@ -241,26 +288,17 @@ export async function createLibp2pJsClientOrUseExistingOne(pkcOptions) {
|
|
|
241
288
|
catch (e) {
|
|
242
289
|
log.error("Error stopping helia", e);
|
|
243
290
|
}
|
|
244
|
-
delete libp2pJsClients[pkcOptions.key];
|
|
245
291
|
log("Helia/libp2p-js stopped with key", pkcOptions.key, "and peer id", helia.libp2p.peerId.toString());
|
|
246
292
|
}
|
|
247
293
|
}
|
|
248
294
|
};
|
|
249
295
|
const originalSubscribe = helia.libp2p.services.pubsub.subscribe.bind(helia.libp2p.services.pubsub);
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
helia,
|
|
254
|
-
pubsubTopic: topic,
|
|
255
|
-
maxPeers: 2,
|
|
256
|
-
log: Logger("pkc-js:helia:pubsub:subscribe:connectToPeersProvidingTopic")
|
|
257
|
-
});
|
|
258
|
-
console.log("after", "native pubsub-subscribe", "connectToPeersProvidingTopic", topic, "done");
|
|
259
|
-
};
|
|
296
|
+
// Monkey-patch the native pubsub.subscribe so internal callers (notably @helia/ipns) also
|
|
297
|
+
// get peer warmup. Sync return preserves the gossipsub contract; warmup runs fire-and-forget
|
|
298
|
+
// here and shares its in-flight promise with awaitable callers via warmupForTopic's dedup map.
|
|
260
299
|
helia.libp2p.services.pubsub.subscribe = (topic) => {
|
|
261
300
|
throwIfHeliaIsStoppingOrStopped();
|
|
262
|
-
|
|
263
|
-
connectToPeersProvidingTopic(topic).catch((err) => log.error("Error connecting to peers providing topic", err));
|
|
301
|
+
warmupForTopic(topic).catch((err) => log.error("warmup failed for topic", topic, err));
|
|
264
302
|
originalSubscribe(topic);
|
|
265
303
|
};
|
|
266
304
|
const fullInstanceWithOptions = {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"helia-for-pkc.js","sourceRoot":"","sources":["../../../src/helia/helia-for-pkc.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"helia-for-pkc.js","sourceRoot":"","sources":["../../../src/helia/helia-for-pkc.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import type { createHelia } from "helia";
|
|
2
2
|
import type { KuboRpcClient } from "../types.js";
|
|
3
3
|
import type { PubsubRoutingComponents } from "@helia/ipns/routing";
|
|
4
|
+
import type { GossipSub } from "@libp2p/gossipsub";
|
|
4
5
|
export interface HeliaWithKuboRpcClientFunctions extends Pick<NonNullable<KuboRpcClient["_client"]>, "add" | "cat" | "pubsub" | "stop"> {
|
|
5
6
|
add: KuboRpcClient["_client"]["add"];
|
|
6
7
|
name: Pick<KuboRpcClient["_client"]["name"], "resolve">;
|
|
@@ -9,10 +10,13 @@ export interface HeliaWithKuboRpcClientFunctions extends Pick<NonNullable<KuboRp
|
|
|
9
10
|
stop: KuboRpcClient["_client"]["stop"];
|
|
10
11
|
}
|
|
11
12
|
type baseHelia = Awaited<ReturnType<typeof createHelia>>;
|
|
13
|
+
type GossipSubWithMeshPeers = GossipSub & {
|
|
14
|
+
getMeshPeers(topic: string): string[];
|
|
15
|
+
};
|
|
12
16
|
export interface HeliaWithLibp2pPubsub extends baseHelia {
|
|
13
17
|
libp2p: baseHelia["libp2p"] & {
|
|
14
18
|
services: baseHelia["libp2p"]["services"] & {
|
|
15
|
-
pubsub: PubsubRoutingComponents["libp2p"]["services"]["pubsub"];
|
|
19
|
+
pubsub: PubsubRoutingComponents["libp2p"]["services"]["pubsub"] & GossipSubWithMeshPeers;
|
|
16
20
|
};
|
|
17
21
|
};
|
|
18
22
|
}
|
|
@@ -1,5 +1,4 @@
|
|
|
1
1
|
import type { HeliaWithLibp2pPubsub } from "./types.js";
|
|
2
|
-
import type { PeerId } from "@libp2p/interface";
|
|
3
2
|
import Logger from "../logger.js";
|
|
4
3
|
export interface HeliaDebugContext {
|
|
5
4
|
heliaPeerId: string;
|
|
@@ -12,6 +11,12 @@ export interface HeliaDebugContext {
|
|
|
12
11
|
}[];
|
|
13
12
|
}
|
|
14
13
|
export declare function getHeliaDebugContext(helia: HeliaWithLibp2pPubsub): HeliaDebugContext;
|
|
14
|
+
export declare function waitForTopicSubscriber({ helia, topic, timeoutMs, abortSignal }: {
|
|
15
|
+
helia: HeliaWithLibp2pPubsub;
|
|
16
|
+
topic: string;
|
|
17
|
+
timeoutMs: number;
|
|
18
|
+
abortSignal?: AbortSignal;
|
|
19
|
+
}): Promise<void>;
|
|
15
20
|
export declare function connectToPubsubPeers({ helia, pubsubTopic, maxPeers, options, log }: {
|
|
16
21
|
helia: HeliaWithLibp2pPubsub;
|
|
17
22
|
pubsubTopic: string;
|
|
@@ -21,4 +26,3 @@ export declare function connectToPubsubPeers({ helia, pubsubTopic, maxPeers, opt
|
|
|
21
26
|
signal?: AbortSignal;
|
|
22
27
|
};
|
|
23
28
|
}): Promise<Awaited<ReturnType<typeof helia.libp2p.dial>>[]>;
|
|
24
|
-
export declare function waitForTopicPeers(helia: HeliaWithLibp2pPubsub, topic: string, minPeers?: number, timeoutMs?: number): Promise<PeerId[]>;
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { PKCError } from "../pkc-error.js";
|
|
2
2
|
import { pubsubTopicToDhtKeyCid } from "../util.js";
|
|
3
|
+
const TOPIC_SUBSCRIBER_WAIT_TIMEOUT_MS = 10_000;
|
|
3
4
|
export function getHeliaDebugContext(helia) {
|
|
4
5
|
const connections = helia.libp2p.getConnections();
|
|
5
6
|
return {
|
|
@@ -13,45 +14,99 @@ export function getHeliaDebugContext(helia) {
|
|
|
13
14
|
}))
|
|
14
15
|
};
|
|
15
16
|
}
|
|
17
|
+
// Event-based wait for a remote peer to subscribe to `topic` on our gossipsub.
|
|
18
|
+
// Resolves the moment gossipsub fires 'subscription-change' for the topic and the
|
|
19
|
+
// subscriber list has actually become non-empty, or rejects on timeout/abort.
|
|
20
|
+
// Used as both the in-loop abort trigger and the post-loop graft wait by
|
|
21
|
+
// connectToPubsubPeers below.
|
|
22
|
+
export function waitForTopicSubscriber({ helia, topic, timeoutMs, abortSignal }) {
|
|
23
|
+
const pubsub = helia.libp2p.services.pubsub;
|
|
24
|
+
if (pubsub.getSubscribers(topic).length > 0)
|
|
25
|
+
return Promise.resolve();
|
|
26
|
+
if (abortSignal?.aborted)
|
|
27
|
+
return Promise.reject(new PKCError("ERR_PUBSUB_TOPIC_PEER_WAIT_ABORTED", { topic }));
|
|
28
|
+
return new Promise((resolve, reject) => {
|
|
29
|
+
const cleanup = () => {
|
|
30
|
+
pubsub.removeEventListener("subscription-change", onChange);
|
|
31
|
+
clearInterval(safetyPoll);
|
|
32
|
+
clearTimeout(timer);
|
|
33
|
+
abortSignal?.removeEventListener("abort", onAbort);
|
|
34
|
+
};
|
|
35
|
+
const tryResolve = () => {
|
|
36
|
+
if (pubsub.getSubscribers(topic).length > 0) {
|
|
37
|
+
cleanup();
|
|
38
|
+
resolve();
|
|
39
|
+
return true;
|
|
40
|
+
}
|
|
41
|
+
return false;
|
|
42
|
+
};
|
|
43
|
+
const onChange = (e) => {
|
|
44
|
+
if (e.detail.subscriptions.some((s) => s.topic === topic && s.subscribe))
|
|
45
|
+
tryResolve();
|
|
46
|
+
};
|
|
47
|
+
const onAbort = () => {
|
|
48
|
+
cleanup();
|
|
49
|
+
reject(new PKCError("ERR_PUBSUB_TOPIC_PEER_WAIT_ABORTED", { topic }));
|
|
50
|
+
};
|
|
51
|
+
const timer = setTimeout(() => {
|
|
52
|
+
cleanup();
|
|
53
|
+
reject(new PKCError("ERR_TIMEOUT_WAITING_FOR_PUBSUB_TOPIC_PEERS", { topic, timeoutMs }));
|
|
54
|
+
}, timeoutMs);
|
|
55
|
+
// Defensive safety poll: 'subscription-change' is the primary fast-path trigger, but we
|
|
56
|
+
// also re-check periodically in case the event already fired before this listener attached
|
|
57
|
+
// or gossipsub state and event delivery diverge briefly.
|
|
58
|
+
const safetyPoll = setInterval(tryResolve, 1000);
|
|
59
|
+
pubsub.addEventListener("subscription-change", onChange);
|
|
60
|
+
abortSignal?.addEventListener("abort", onAbort, { once: true });
|
|
61
|
+
// Race-safe re-check: a subscriber may have appeared in the window between the initial
|
|
62
|
+
// check and addEventListener. Without this, we could miss the only event we'll ever get.
|
|
63
|
+
tryResolve();
|
|
64
|
+
});
|
|
65
|
+
}
|
|
66
|
+
// Ambient peer discovery for gossipsub. js-libp2p's pubsub intentionally does not discover
|
|
67
|
+
// topic peers itself; that is the application's responsibility (same pattern Helia and
|
|
68
|
+
// js-ipfs use): hash the topic to a CID, contentRouting.findProviders(), then dial.
|
|
69
|
+
// See https://github.com/libp2p/js-libp2p/blob/main/doc/CONFIGURATION.md ("ambient peer discovery").
|
|
16
70
|
export async function connectToPubsubPeers({ helia, pubsubTopic, maxPeers, options, log }) {
|
|
17
|
-
// TODO need to check if this hangs or not
|
|
18
71
|
const contentCid = pubsubTopicToDhtKeyCid(pubsubTopic);
|
|
19
72
|
const peersWithContent = [];
|
|
20
73
|
const connectedPeersWithContent = [];
|
|
21
74
|
const peerDialToError = {};
|
|
22
|
-
//
|
|
75
|
+
// Single abort signal feeds both findProviders and the topic-subscriber wait.
|
|
23
76
|
const abortController = new AbortController();
|
|
24
77
|
const combinedSignal = options?.signal ? AbortSignal.any([options.signal, abortController.signal]) : abortController.signal;
|
|
25
|
-
|
|
26
|
-
//
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
78
|
+
// Event-based watcher for a peer subscribing to our topic on gossipsub.
|
|
79
|
+
// Started immediately so we don't miss subscription-change events that fire during the dial loop.
|
|
80
|
+
// When it resolves, abort findProviders so the loop exits cleanly.
|
|
81
|
+
const subscriberAppearedPromise = waitForTopicSubscriber({
|
|
82
|
+
helia,
|
|
83
|
+
topic: pubsubTopic,
|
|
84
|
+
timeoutMs: TOPIC_SUBSCRIBER_WAIT_TIMEOUT_MS,
|
|
85
|
+
abortSignal: combinedSignal
|
|
86
|
+
});
|
|
87
|
+
subscriberAppearedPromise.then(() => {
|
|
88
|
+
if (!abortController.signal.aborted) {
|
|
89
|
+
log.trace("Aborting findProviders iterator - gossipsub subscription-change observed for topic", pubsubTopic);
|
|
30
90
|
abortController.abort();
|
|
31
|
-
shouldStop = true;
|
|
32
91
|
}
|
|
33
|
-
},
|
|
92
|
+
}, () => {
|
|
93
|
+
// swallow timeout/abort — handled in the post-loop await below
|
|
94
|
+
});
|
|
95
|
+
const findProvidersStart = Date.now();
|
|
34
96
|
try {
|
|
35
|
-
const findProvidersLabel = `findProviders:${pubsubTopic}`;
|
|
36
|
-
console.time(findProvidersLabel);
|
|
37
97
|
for await (const peer of helia.libp2p.contentRouting.findProviders(contentCid, { ...options, signal: combinedSignal })) {
|
|
38
|
-
if (shouldStop) {
|
|
39
|
-
log.trace("Breaking findProviders loop due to shouldStop flag (pubsub subscribers found)");
|
|
40
|
-
break;
|
|
41
|
-
}
|
|
42
98
|
peersWithContent.push(peer);
|
|
43
99
|
try {
|
|
44
|
-
|
|
45
|
-
//
|
|
46
|
-
|
|
47
|
-
if (
|
|
48
|
-
|
|
49
|
-
log.trace("Breaking findProviders loop after successful dial and finding pubsub subscribers");
|
|
50
|
-
break;
|
|
100
|
+
// Make sure dial-by-peerId can resolve addresses: not all content routers (notably
|
|
101
|
+
// delegated-routing-v1-http) auto-merge discovered multiaddrs into the peerstore,
|
|
102
|
+
// and dial(peerId) without addrs fails with "no addresses for peer".
|
|
103
|
+
if (peer.multiaddrs?.length) {
|
|
104
|
+
await helia.libp2p.peerStore.merge(peer.id, { multiaddrs: peer.multiaddrs });
|
|
51
105
|
}
|
|
106
|
+
const conn = await helia.libp2p.dial(peer.id, options); // no-op if already connected
|
|
107
|
+
connectedPeersWithContent.push(conn);
|
|
52
108
|
if (connectedPeersWithContent.length >= maxPeers) {
|
|
53
109
|
log.trace("Breaking findProviders loop after reaching maxPeers", maxPeers);
|
|
54
|
-
shouldStop = true;
|
|
55
110
|
break;
|
|
56
111
|
}
|
|
57
112
|
}
|
|
@@ -66,23 +121,23 @@ export async function connectToPubsubPeers({ helia, pubsubTopic, maxPeers, optio
|
|
|
66
121
|
log.trace("Failed to dial IPNS-Over-Pubsub peer", peer.id.toString(), "Due to error", e);
|
|
67
122
|
}
|
|
68
123
|
}
|
|
69
|
-
|
|
124
|
+
log.trace("findProviders for", pubsubTopic, "took", Date.now() - findProvidersStart, "ms");
|
|
70
125
|
}
|
|
71
126
|
catch (e) {
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
127
|
+
// findProviders may throw the abort error we caused ourselves — that's fine, fall through.
|
|
128
|
+
if (!abortController.signal.aborted) {
|
|
129
|
+
e.details = {
|
|
130
|
+
...e.details,
|
|
131
|
+
contentCid,
|
|
132
|
+
options,
|
|
133
|
+
maxPeersBeforeWeStopLookingForProviders: maxPeers,
|
|
134
|
+
connectedPeersWithContent,
|
|
135
|
+
peersWithContent,
|
|
136
|
+
peerDialToError,
|
|
137
|
+
...getHeliaDebugContext(helia)
|
|
138
|
+
};
|
|
139
|
+
throw e;
|
|
140
|
+
}
|
|
86
141
|
}
|
|
87
142
|
log.trace("Connected to", connectedPeersWithContent.length, "peers", "for content", contentCid);
|
|
88
143
|
if (connectedPeersWithContent.length === 0) {
|
|
@@ -96,24 +151,16 @@ export async function connectToPubsubPeers({ helia, pubsubTopic, maxPeers, optio
|
|
|
96
151
|
log.error(error);
|
|
97
152
|
throw error;
|
|
98
153
|
}
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
const startTime = Date.now();
|
|
105
|
-
while (Date.now() - startTime < timeoutMs) {
|
|
106
|
-
const subscribers = helia.libp2p.services.pubsub.getSubscribers(topic);
|
|
107
|
-
if (subscribers.length >= minPeers) {
|
|
108
|
-
return subscribers;
|
|
109
|
-
}
|
|
110
|
-
// Wait 100ms before checking again
|
|
111
|
-
await new Promise((resolve) => setTimeout(resolve, 100));
|
|
154
|
+
// Post-loop graft wait: if findProviders exhausted or maxPeers was reached before
|
|
155
|
+
// any subscription-change event arrived, wait now so the immediately-following IPNS
|
|
156
|
+
// resolve doesn't walk an empty subscriber list and throw RecordNotFoundError.
|
|
157
|
+
try {
|
|
158
|
+
await subscriberAppearedPromise;
|
|
112
159
|
}
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
160
|
+
catch (graftErr) {
|
|
161
|
+
log.trace("gossipsub subscription-change did not arrive within timeout after warmup; resolver may still fall back", graftErr);
|
|
162
|
+
// best-effort — don't surface as a warmup failure, let the resolver attempt anyway.
|
|
163
|
+
}
|
|
164
|
+
return connectedPeersWithContent;
|
|
118
165
|
}
|
|
119
166
|
//# sourceMappingURL=util.js.map
|