diff --git a/demo/draft/alice/connect.ts b/demo/draft/alice/connect.ts new file mode 100644 index 00000000..6f82a844 --- /dev/null +++ b/demo/draft/alice/connect.ts @@ -0,0 +1,36 @@ +import { DraftSession } from '@scrow/core' +import { signer } from './config.js' + +import { address, secret_id } from '../terms.js' + +/** ========== [ Draft Session ] ========== **/ + +// Create a draft session +const session = new DraftSession(signer, { + debug : false, + verbose : true +}) + +session.on('error', console.log) +session.on('reject', console.log) + +// When the session is ready: +session.on('ready', () => { + console.log('session ready') + console.dir(session.data, { depth : null }) +}) + +session.on('update', () => { + console.log('session update') + //console.dir(session.data, { depth : null }) +}) + +session.on('join', (mship) => { + console.log('member joined:', mship.pub) +}) + +session.on('leave', (mship) => { + console.log('member left:', mship.pub) +}) + +await session.connect(address, secret_id) diff --git a/demo/draft/alice/init.ts b/demo/draft/alice/init.ts index 682ee572..4e76e864 100644 --- a/demo/draft/alice/init.ts +++ b/demo/draft/alice/init.ts @@ -2,6 +2,7 @@ import { DraftSession } from '@scrow/core' import { signer } from './config.js' import { + address, agent_draft, secret_id } from '../terms.js' @@ -22,7 +23,4 @@ session.on('ready', () => { console.log('alice ready') }) -await session.init('wss://relay.damus.io', secret_id, agent_draft) - -console.log('session id :', session.id) -console.log('session sec :', session.secret) +await session.init(address, secret_id, agent_draft) diff --git a/demo/draft/alice/join.ts b/demo/draft/alice/join.ts index 7ba0f54e..74608475 100644 --- a/demo/draft/alice/join.ts +++ b/demo/draft/alice/join.ts @@ -1,6 +1,7 @@ import { DraftSession } from '@scrow/core' import { signer } from './config.js' -import { secret_id } from '../terms.js' + +import { address, secret_id } from '../terms.js' const role = 'buyer' @@ -18,27 +19,12 @@ session.on('ready', () => { const pol = session.get_role(role) session.join(pol.id) } - } else if (session.is_member) { - console.log('member leaving session:', session.mship.pub) - session.leave() - } -}) - -session.on('update', () => { - console.log('session updated') - if (session.is_member) { - console.log('member leaving session:', session.mship.pub) - session.leave() } }) session.on('join', (mship) => { console.log('member joined:', mship.pub) -}) - -session.on('leave', (mship) => { - console.log('member left:', mship.pub) session.close() }) -await session.connect('wss://relay.damus.io', secret_id) +await session.connect(address, secret_id) diff --git a/demo/draft/alice/leave.ts b/demo/draft/alice/leave.ts new file mode 100644 index 00000000..4599a9c0 --- /dev/null +++ b/demo/draft/alice/leave.ts @@ -0,0 +1,25 @@ +import { DraftSession } from '@scrow/core' +import { signer } from './config.js' + +import { address, secret_id } from '../terms.js' + +const session = new DraftSession(signer, { + debug : false, + verbose : false +}) + +session.on('ready', () => { + console.log('session ready') + console.log('session:', session.data) + if (session.is_member) { + console.log('member leaving session:', session.mship.pub) + session.leave() + } +}) + +session.on('leave', (mship) => { + console.log('member left:', mship.pub) + session.close() +}) + +await session.connect(address, secret_id) diff --git a/demo/draft/alice/list.ts b/demo/draft/alice/list.ts index 59f13aa3..a3986c21 100644 --- a/demo/draft/alice/list.ts +++ b/demo/draft/alice/list.ts @@ -1,9 +1,9 @@ import { DraftSession } from '@scrow/core' import { signer } from './config.js' +import { address } from '../terms.js' console.log(signer.pubkey) -const addr = 'wss://relay.damus.io' -const drafts = await DraftSession.list(addr, signer) +const drafts = await DraftSession.list(address, signer) console.dir(drafts, { depth : null }) diff --git a/demo/draft/bob/join.ts b/demo/draft/bob/join.ts new file mode 100644 index 00000000..efbddb4e --- /dev/null +++ b/demo/draft/bob/join.ts @@ -0,0 +1,35 @@ +import { DraftSession } from '@scrow/core' +import { signer } from './config.js' + +import { address, secret_id } from '../terms.js' + +const role = 'buyer' + +const session = new DraftSession(signer, { + debug : false, + verbose : true +}) + +session.on('error', console.log) +session.on('reject', console.log) + +session.on('ready', () => { + console.log('session ready') + console.log('session:', session.data) + if (!session.is_member) { + if (session.has_role(role)) { + console.log('joining session as:', role) + const pol = session.get_role(role) + session.join(pol.id) + } + } else { + console.log('you are already a member') + } +}) + +session.on('join', (mship) => { + console.log('member joined:', mship.pub) + // session.close() +}) + +await session.connect(address, secret_id) diff --git a/demo/draft/bob/leave.ts b/demo/draft/bob/leave.ts new file mode 100644 index 00000000..df956794 --- /dev/null +++ b/demo/draft/bob/leave.ts @@ -0,0 +1,28 @@ +import { DraftSession } from '@scrow/core' +import { signer } from './config.js' + +import { address, secret_id } from '../terms.js' + +const session = new DraftSession(signer, { + debug : false, + verbose : true +}) + +session.on('error', console.log) +session.on('reject', console.log) + +session.on('ready', () => { + console.log('session ready') + if (session.is_member) { + console.log('member leaving session:', session.mship.pub) + session.leave() + } else { + console.log('you are not a member') + } +}) + +session.on('leave', (mship) => { + console.log('member left:', mship.pub) +}) + +await session.connect(address, secret_id) diff --git a/demo/draft/terms.ts b/demo/draft/terms.ts index 34894d12..895f7af2 100644 --- a/demo/draft/terms.ts +++ b/demo/draft/terms.ts @@ -12,6 +12,7 @@ import { const AGENT_ALIAS : string = 'carol' const SECRET_PASS : string = 'test_draft4' +const RELAY_ADDR : string = 'wss://nos.lol' const PROP_TEMPLATE : ProposalTemplate = { title : 'Basic two-party contract with third-party arbitration.', @@ -51,6 +52,9 @@ const PROP_ROLES : RoleTemplate[] = [ } ] +// +export const address = RELAY_ADDR +// export const alias = AGENT_ALIAS // Compute draft id for nostr store. export const secret_id = Buff.str(SECRET_PASS).digest.hex diff --git a/src/client/class/draft.ts b/src/client/class/draft.ts index 103da6ee..3db0ce7b 100644 --- a/src/client/class/draft.ts +++ b/src/client/class/draft.ts @@ -105,9 +105,10 @@ export class DraftSession extends EventEmitter <{ this._full = false this._init = false - - this._room.on('close', () => { void this.emit('close', this) }) - this._room.on('fetch', () => { void this.emit('fetch', this) }) + this._room.on('close', () => { void this.emit('close', this) }) + this._room.on('fetch', () => { void this.emit('fetch', this) }) + this._room.on('error', (err) => { void this.emit('error', err) }) + this._room.on('reject', (err) => { void this.emit('error', err) }) this._room.once('ready', () => { this._init = true @@ -402,7 +403,7 @@ export class DraftSession extends EventEmitter <{ async _update (data : DraftData, cat ?: number) { validate_draft(data) verify_draft(data) - this._room.update(data, [], cat) + this._room.update(data, cat) if (this.is_full && !this._full) { this.emit('full', this) } @@ -533,7 +534,7 @@ export class DraftSession extends EventEmitter <{ ) { validate_draft(session) verify_draft(session) - return this._room.init(address, session, secret) + return this._room.init(address, secret, session) } join (policy_id : string, index ?: number) { diff --git a/yarn.lock b/yarn.lock index f0c54b46..0ff332a7 100644 --- a/yarn.lock +++ b/yarn.lock @@ -37,10 +37,10 @@ "@cmdcode/buff" "^2.2.5" "@cmdcode/crypto-tools" "^2.7.6" -"@cmdcode/nostr-sdk@^0.1.2": - version "0.1.2" - resolved "https://registry.yarnpkg.com/@cmdcode/nostr-sdk/-/nostr-sdk-0.1.2.tgz#b762d1663e0da279dc33ac3b7ee92457b187170f" - integrity sha512-/G8FYtpEAJiDHhxl1gKZpVmwyySEsok/bkud2z6Sb/CrZnBFK7uZ51CcJYiAOKLOKwtWrdJhlL0c4XGOXSPm7A== +"@cmdcode/nostr-sdk@^0.1.6": + version "0.1.6" + resolved "https://registry.yarnpkg.com/@cmdcode/nostr-sdk/-/nostr-sdk-0.1.6.tgz#328d09c763a9a26893dbc193c1444f451cb3efb0" + integrity sha512-6n+giRdT4zLJ1OD8f5B/WIHkdFOB7v4CsG/QDSIqSuZ/cjGblQMXzVihqTbPqZu+5DzUO0ZOfJy7SPpIt9/3SA== dependencies: "@cmdcode/buff" "2.2.5" "@cmdcode/crypto-tools" "2.7.6"