Huge News!Announcing our $40M Series B led by Abstract Ventures.Learn More
Socket
Sign inDemoInstall
Socket

agreeable-host

Package Overview
Dependencies
Maintainers
1
Versions
5
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

agreeable-host

Create a simple p2p server in a few lines

  • 1.0.4
  • latest
  • Source
  • npm
  • Socket score

Version published
Maintainers
1
Created
Source

Create a simple p2p server in a few lines

npm i agreeable-host agreeable

agreement.mjs

import { z, params } from 'agreeable'

const api = { 
  role: 'testthisout', 
  version: '1.0.0',
  description: 'a simple example api',
  routes: {}
}
export default api 

api.routes.addTwo = params({a: z.number(), b: z.number()}).returns(z.number())
api.routes.randomName = params().returns(z.string().describe('a random name'))

index.mjs

import { loadAgreement, host }  from 'agreeable-host'
host(await loadAgreement('./agreement.mjs', import.meta.url), {
  addTwo: ({a, b}) => a + b,
  randomName: () => 'bob'
})

then just run

node index.mjs
listening on: a406ea1579687011e96943d7b9bcde9a3e17809dc3fdb07edc0cb7569329ee3a

the services key is output and then connect with the agreeable-ui to test it

pear run pear://qrxbzxyqup1egwjnrmp7fcikk31nekecn43xerq65iq3gjxiaury/a406ea1579687011e96943d7b9bcde9a3e17809dc3fdb07edc0cb7569329ee3a

To call this host from a client proxy , the current way is as follows (using the same agreement file)

client.mjs

import agreement from './agreement.mjs';
import { proxy } from 'agreeable'
import b4a from 'b4a'
import DHT from 'hyperdht'
import Protomux from 'protomux'
import Channel from 'jsonrpc-mux'

const peerKey = process.argv[2] // the service peer key from above

const node = new DHT()
const publicKey = b4a.from(peerKey, 'hex')
const conn = node.connect(publicKey)
const framed = new Channel(new Protomux(conn))


const setHeaders = () => ({  userId: 'bob', authToken: 'test'})
const client = proxy(framed, agreement, setHeaders)
const result = await client.addTwo({a: 3, b: 4})
console.log(result)

node.destroy()

then run

node client.mjs a406ea1579687011e96943d7b9bcde9a3e17809dc3fdb07edc0cb7569329ee3a

Keywords

FAQs

Package last updated on 06 Apr 2024

Did you know?

Socket

Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.

Install

Related posts

SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap
  • Changelog

Packages

npm

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc