Add createPeer

This commit is contained in:
Jacob Karlsson 2024-05-17 17:43:16 +02:00
parent 49918890bf
commit 0f77ff66d6
5 changed files with 125 additions and 2 deletions

4
declarations/pzp-caps.d.ts vendored Normal file
View File

@ -0,0 +1,4 @@
declare module 'pzp-caps' {
declare const caps: string
export = caps
}

12
declarations/secret-stack.d.ts vendored Normal file
View File

@ -0,0 +1,12 @@
declare module 'secret-stack/bare' {
interface Stack {
use(module: any): Stack
call(a: null, config: unknown)
}
function SecretStack(config?: unknown): Stack
export = SecretStack
}
declare module 'secret-stack/plugins/net' {
}

106
lib/index.js Normal file
View File

@ -0,0 +1,106 @@
const { join } = require('node:path')
const os = require('node:os')
const Keypair = require('pzp-keypair')
/**
* @typedef {ReturnType<import('pzp-db').init>} PZPDB
* @typedef {ReturnType<import('pzp-dict').init>} PZPDict
* @typedef {ReturnType<import('pzp-set').init>} PZPSet
* @typedef {ReturnType<import('pzp-goals').init>} PZPGoals
* @typedef {ReturnType<import('pzp-net').init>} PZPNet
* @typedef {ReturnType<import('pzp-sync').init>} PZPSync
* @typedef {ReturnType<import('pzp-gc').init>} PZPGc
* @typedef {ReturnType<import('pzp-conductor').init>} PZPConductor
* @typedef {ReturnType<import('pzp-hub-client/plugin').init>} PZPHubClient
* @typedef {ReturnType<import('pzp-promise').init>} PZPPromise
* @typedef {ReturnType<import('pzp-invite').init>} PZPInvite
* @typedef {import('node:events').EventEmitter} Emitter
* @typedef {{ pubkey: string }} SHSE
*/
/**
* @typedef {Emitter & {
* db: PZPDB,
* dict: PZPDict,
* set: PZPSet,
* goals: PZPGoals,
* net: PZPNet,
* sync: PZPSync,
* gc: PZPGc,
* conductor: PZPConductor,
* hubClient: PZPHubClient,
* promise: PZPPromise,
* invite: PZPInvite,
* shse: SHSE
* }} Peer
*/
/**
*
* @param {{ path: string }} opts
* @returns {Promise<Peer>}
*/
async function createPeer({ path }) {
if (!path) {
if (process.env.PZP_DIR) {
path = process.env.PZP_DIR
} else {
path = join(os.tmpdir(), `pzp-${Math.random()}`)
}
}
const keypairPath = join(path, 'keypair.json')
const keypair = Keypair.loadOrCreateSync(keypairPath)
/** @type {Peer} */
const peer = require('secret-stack/bare')()
.use(require('secret-stack/plugins/net'))
.use(require('secret-handshake-ext/secret-stack'))
.use(require('pzp-net'))
.use(require('pzp-db'))
.use(require('pzp-set'))
.use(require('pzp-dict'))
.use(require('pzp-goals'))
.use(require('pzp-sync'))
.use(require('pzp-gc'))
.use(require('pzp-conductor'))
.use(require('pzp-hub-client'))
.use(require('pzp-promise'))
.use(require('pzp-invite'))
.call(null, {
shse: {
caps: require('pzp-caps'),
},
global: {
keypair,
path,
timers: {
inactivity: 10 * 60e3,
},
connections: {
incoming: {
tunnel: [{ transform: 'shse', scope: 'public' }],
},
outgoing: {
net: [{ transform: 'shse' }],
tunnel: [{ transform: 'shse' }],
},
},
},
net: {
autostart: false,
},
})
await peer.db.loaded()
await peer.net.start()
return peer
}
exports = {
createPeer,
}

View File

@ -24,8 +24,8 @@
},
"dependencies": {
"pzp-caps": "^1.0.0",
"pzp-conductor": "^1.0.0",
"pzp-db": "^1.0.1",
"pzp-conductor": "^1.0.2",
"pzp-db": "^1.0.2",
"pzp-dict": "^1.0.0",
"pzp-gc": "^1.0.0",
"pzp-goals": "^1.0.0",

View File

@ -1,5 +1,6 @@
{
"include": [
"declarations",
"lib/**/*.js"
],
"exclude": [