@dwn-protocol/id-sdk
Version:
SDK for accessing the features and capabilities
96 lines • 3.5 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.Queue = void 0;
const libp2p_1 = require("libp2p");
const circuit_relay_1 = require("libp2p/circuit-relay");
const libp2p_gossipsub_1 = require("@chainsafe/libp2p-gossipsub");
const identify_1 = require("libp2p/identify");
const kad_dht_1 = require("@libp2p/kad-dht");
const mplex_1 = require("@libp2p/mplex");
const libp2p_noise_1 = require("@chainsafe/libp2p-noise");
const pubsub_js_1 = require("pubsub-js");
const webrtc_star_1 = require("@libp2p/webrtc-star");
const libp2p_yamux_1 = require("@chainsafe/libp2p-yamux");
class Queue {
constructor(options) {
this.agent = options.agent;
this.connectedDid = options.connectedDid;
this._star = (0, webrtc_star_1.webRTCStar)();
}
async createPeer() {
return await (0, libp2p_1.createLibp2p)({
addresses: {
listen: [
'/dns4/star.abaxx.id/tcp/443/wss/p2p-webrtc-star/',
],
},
transports: [
this._star.transport,
(0, circuit_relay_1.circuitRelayTransport)({
discoverRelays: 1,
}),
],
connectionEncryption: [
//@ts-ignore
new libp2p_noise_1.noise(), // elliptic curve Diffie-Hellman key exchange using Curve e25519
],
streamMuxers: [
//@ts-ignore
new libp2p_yamux_1.yamux(), new mplex_1.mplex(),
],
peerDiscovery: [
this._star.discovery,
],
services: {
//@ts-ignore
pubsub: new libp2p_gossipsub_1.gossipsub({
allowPublishToZeroPeers: true,
enabled: true,
emitSelf: true,
}),
identify: (0, identify_1.identifyService)(),
dht: (0, kad_dht_1.kadDHT)({
clientMode: true,
}),
},
});
}
async send(node, topic, message) {
var _a, _b;
(_b = (_a = node === null || node === void 0 ? void 0 : node.services) === null || _a === void 0 ? void 0 : _a.pubsub) === null || _b === void 0 ? void 0 : _b.publish(topic, new TextEncoder().encode(message)).catch((err) => {
return { ok: false, error: err.message, timestsamp: new Date().getTime() };
});
return { ok: true, timestsamp: new Date().getTime() };
}
async publish(topic, message, relayers = []) {
const response = await fetch(`${relayers[0]}/publish`, {
method: 'POST',
mode: 'cors',
cache: 'no-cache',
headers: {
'Accept': '*/*',
'Content-Type': 'application/json',
},
body: JSON.stringify({
topic,
message,
}),
});
pubsub_js_1.PubSub.publish(topic, message);
return await response.text();
}
async subscribe(topic, cb) {
const relaySubscriber = (msg, data) => {
if (msg === topic) {
cb(data);
}
};
const subscriber = pubsub_js_1.PubSub.subscribe(topic, relaySubscriber);
return subscriber;
}
async unsubscribe(topic) {
pubsub_js_1.PubSub.unsubscribe(topic);
}
}
exports.Queue = Queue;
//# sourceMappingURL=queue.js.map