Skip to content

Commit

Permalink
feat: add connect event to webhook extension
Browse files Browse the repository at this point in the history
  • Loading branch information
kriskbx committed Apr 7, 2021
1 parent ee5052d commit d907354
Show file tree
Hide file tree
Showing 3 changed files with 46 additions and 10 deletions.
6 changes: 5 additions & 1 deletion demos/client/src/App.vue
Original file line number Diff line number Diff line change
Expand Up @@ -34,7 +34,11 @@ export default {
mounted() {
const ydoc = new Y.Doc()
this.provider = new WebsocketProvider('ws://127.0.0.1:1234', 'tiptap-collaboration-example', ydoc)
this.provider = new WebsocketProvider('ws://127.0.0.1:1234', 'tiptap-collaboration-example', ydoc, {
params: {
token: '123456',
},
})
this.provider.on('status', event => {
this.status = event.status
Expand Down
28 changes: 23 additions & 5 deletions demos/server/src/webhook.ts
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,7 @@ const server = Server.configure({
secret: '1234',
url: 'http://localhost:12345',
events: [
Events.Create, Events.Change,
Events.Create, Events.Change, Events.Connect,
],
}),
],
Expand Down Expand Up @@ -51,14 +51,32 @@ const receiver = createServer((request, response) => {
})

request.on('end', () => {
if (verifySignature(data, request.headers['x-hocuspocus-signature-256'] as string)) {
// handle data
console.log(`[${new Date().toISOString()}] Received "${request.url}":`, JSON.parse(data))
} else {
if (!verifySignature(data, request.headers['x-hocuspocus-signature-256'] as string)) {
response.writeHead(403, 'signature not valid')
}

data = JSON.parse(data)

if (request.url === '/change') {
// @ts-ignore
console.log(`[${new Date().toISOString()}] RECEIVER - document ${data.documentName} was changed: ${JSON.stringify(data.document)}`)
}

if (request.url === '/connect') {
// @ts-ignore
console.log(`[${new Date().toISOString()}] RECEIVER - user connected to ${data.documentName}: ${JSON.stringify({ requestHeaders: data.requestHeaders, requestParameters: data.requestParameters })}`)

// @ts-ignore
if (data.requestParameters?.token !== '123456') {
response.writeHead(403, 'unathorized')
return response.end()
}
}

if (request.url === '/create') {
// @ts-ignore
console.log(`[${new Date().toISOString()}] RECEIVER - document ${data.documentName} created`)

response.writeHead(200, { 'Content-Type': 'application/json' })
return response.end(JSON.stringify({
default:
Expand Down
22 changes: 18 additions & 4 deletions packages/webhook/src/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -121,9 +121,7 @@ export class Webhook implements Extension {
async sendRequest(url: string, data: any) {
const json = JSON.stringify(data)

return axios
.post(url, json, { headers: { 'X-Hocuspocus-Signature-256': this.createSignature(json) } })
.catch(e => console.log(`[${new Date().toISOString()}] Request to ${url} failed:`, e.message))
return axios.post(url, json, { headers: { 'X-Hocuspocus-Signature-256': this.createSignature(json) } })
}

/**
Expand Down Expand Up @@ -177,8 +175,24 @@ export class Webhook implements Extension {
}
}

// eslint-disable-next-line @typescript-eslint/no-empty-function,no-empty-function
/**
* onConnect hook
*/
async onConnect(data: onConnectPayload) {
if (!this.configuration.events.includes(Events.Connect)) {
return
}

try {
await this.sendRequest(this.getRequestUrl(Events.Connect), {
documentName: data.documentName,
requestHeaders: data.requestHeaders,
requestParameters: Object.fromEntries(data.requestParameters.entries()),
})
} catch (e) {
// eslint-disable-next-line no-throw-literal
throw null
}
}

// eslint-disable-next-line @typescript-eslint/no-empty-function,no-empty-function
Expand Down

0 comments on commit d907354

Please sign in to comment.