Skip to content

Commit

Permalink
Merge branch 'main' of github.com:digidem/comapeo-core into fix/pushDocs
Browse files Browse the repository at this point in the history
  • Loading branch information
Tomás Ciccola committed Sep 10, 2024
2 parents f503208 + 6045f1b commit 0aee579
Show file tree
Hide file tree
Showing 7 changed files with 101 additions and 30 deletions.
8 changes: 8 additions & 0 deletions package-lock.json

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

1 change: 1 addition & 0 deletions package.json
Original file line number Diff line number Diff line change
Expand Up @@ -111,6 +111,7 @@
"@sinonjs/fake-timers": "^10.0.2",
"@types/b4a": "^1.6.0",
"@types/bogon": "^1.0.2",
"@types/compact-encoding": "^2.15.0",
"@types/debug": "^4.1.8",
"@types/json-schema": "^7.0.11",
"@types/json-stable-stringify": "^1.0.36",
Expand Down
8 changes: 0 additions & 8 deletions src/discovery/local-discovery.js
Original file line number Diff line number Diff line change
Expand Up @@ -66,10 +66,6 @@ export class LocalDiscovery extends TypedEmitter {
})
}

get publicKey() {
return this.#identityKeypair.publicKey
}

/** @returns {Promise<{ name: string, port: number }>} */
async start() {
await this.#sm.start()
Expand Down Expand Up @@ -256,10 +252,6 @@ export class LocalDiscovery extends TypedEmitter {
this.emit('connection', conn)
}

get connections() {
return this.#noiseConnections.values()
}

/**
* Close all servers and stop multicast advertising and browsing. Will wait
* for open sockets to close unless opts.force=true in which case open sockets
Expand Down
88 changes: 88 additions & 0 deletions test-e2e/manager-invite.js
Original file line number Diff line number Diff line change
Expand Up @@ -282,6 +282,94 @@ test('canceling nothing', async (t) => {
})
})

test('canceling, then re-inviting', async (t) => {
const [creator, joiner] = await createManagers(2, t)
const disconnectPeers = connectPeers([creator, joiner])
t.after(disconnectPeers)
await waitForPeers([creator, joiner])

const createdProjectId = await creator.createProject({ name: 'Mapeo' })
const creatorProject = await creator.getProject(createdProjectId)

const invite1ReceivedPromise = once(joiner.invite, 'invite-received')
const invite1Promise = creatorProject.$member.invite(joiner.deviceId, {
roleId: MEMBER_ROLE_ID,
})
const invite1AbortedPromise = assert.rejects(invite1Promise)
await invite1ReceivedPromise
creatorProject.$member.requestCancelInvite(joiner.deviceId)
await invite1AbortedPromise

assert.deepEqual(
await joiner.listProjects(),
[],
"joiner doesn't have project yet"
)

const invite2Promise = creatorProject.$member.invite(joiner.deviceId, {
roleId: MEMBER_ROLE_ID,
})
const [invite2] = await once(joiner.invite, 'invite-received')
await joiner.invite.accept(invite2)

assert.equal(
await invite2Promise,
InviteResponse_Decision.ACCEPT,
'correct invite response'
)
assert.deepEqual(
await joiner.listProjects(),
await creator.listProjects(),
'project info recorded in joiner successfully'
)
})

test('rejecting, then accepting', async (t) => {
const [creator, joiner] = await createManagers(2, t)
const disconnectPeers = connectPeers([creator, joiner])
t.after(disconnectPeers)
await waitForPeers([creator, joiner])

const createdProjectId = await creator.createProject({ name: 'Mapeo' })
const creatorProject = await creator.getProject(createdProjectId)

const invite1ReceivedPromise = once(joiner.invite, 'invite-received')
const invite1Promise = creatorProject.$member.invite(joiner.deviceId, {
roleId: MEMBER_ROLE_ID,
})
const [invite1] = await invite1ReceivedPromise
await joiner.invite.reject(invite1)
assert.equal(
await invite1Promise,
InviteResponse_Decision.REJECT,
'correct response for invite 1'
)

assert.deepEqual(
await joiner.listProjects(),
[],
"joiner doesn't have project yet"
)

const invite2ReceivedPromise = once(joiner.invite, 'invite-received')
const invite2Promise = creatorProject.$member.invite(joiner.deviceId, {
roleId: MEMBER_ROLE_ID,
})
const [invite2] = await invite2ReceivedPromise
await joiner.invite.accept(invite2)

assert.equal(
await invite2Promise,
InviteResponse_Decision.ACCEPT,
'correct invite response'
)
assert.deepEqual(
await joiner.listProjects(),
await creator.listProjects(),
'project info recorded in joiner successfully'
)
})

/**
* @param {import('../src/member-api.js').MemberInfo} a
* @param {import('../src/member-api.js').MemberInfo} b
Expand Down
2 changes: 1 addition & 1 deletion tests/discovery/local-discovery.js
Original file line number Diff line number Diff line change
Expand Up @@ -135,7 +135,7 @@ async function testMultiple(t, { period, nPeers = 20 }) {
for (let i = 0; i < nPeers; i++) {
const identityKeypair = new KeyManager(randomBytes(16)).getIdentityKeypair()
const discovery = new LocalDiscovery({ identityKeypair })
const peerId = keyToPublicId(discovery.publicKey)
const peerId = keyToPublicId(identityKeypair.publicKey)
peersById.set(peerId, discovery)
/** @type {OpenedNoiseStream[]} */
const conns = []
Expand Down
1 change: 0 additions & 1 deletion types/compact-encoding.d.ts

This file was deleted.

23 changes: 3 additions & 20 deletions types/protomux.d.ts
Original file line number Diff line number Diff line change
@@ -1,30 +1,13 @@
declare module 'protomux' {
import { Duplex } from 'streamx'
import { Duplex as NodeDuplex } from 'stream'

interface PreEncodingState {
buffer: null
start: number
end: number
}

interface EncodingState {
buffer: null | Buffer
start: number
end: number
}

interface Encoding {
preencode(state: PreEncodingState, value: any): void
encode(state: EncodingState, value: any): void
decode(state: EncodingState): any
}
import type cenc from 'compact-encoding'

interface Message {
type: number
send(msg: any): void
onmessage: (message: any) => void
encoding: Encoding
encoding: cenc.Encoder
}

type MessageOptions = Partial<Pick<Message, 'onmessage' | 'encoding'>>
Expand Down Expand Up @@ -65,7 +48,7 @@ declare module 'protomux' {
aliases?: string[]
id?: null | Buffer
unique?: boolean
handshake?: Encoding
handshake?: cenc.Encoder
messages: MessageOptions[]
onopen?(handshake?: any): Promise<void> | void
onclose?(): Promise<void> | void
Expand Down

0 comments on commit 0aee579

Please sign in to comment.