service worker
This commit is contained in:
parent
010a48c7f0
commit
5fc58bd901
|
@ -549,11 +549,11 @@ export class SlashClient {
|
|||
async verifyServerRequest(req: {
|
||||
headers: Headers
|
||||
method: string
|
||||
body: Deno.Reader
|
||||
body: Deno.Reader | Uint8Array,
|
||||
respond: (options: {
|
||||
status?: number
|
||||
headers?: Headers
|
||||
body?: string | Uint8Array
|
||||
body?: string | Uint8Array | FormData
|
||||
}) => Promise<void>
|
||||
}): Promise<false | Interaction> {
|
||||
if (req.method.toLowerCase() !== 'post') return false
|
||||
|
@ -562,7 +562,7 @@ export class SlashClient {
|
|||
const timestamp = req.headers.get('x-signature-timestamp')
|
||||
if (signature === null || timestamp === null) return false
|
||||
|
||||
const rawbody = await Deno.readAll(req.body)
|
||||
const rawbody = req.body instanceof Uint8Array ? req.body : await Deno.readAll(req.body)
|
||||
const verify = await this.verifyKey(rawbody, signature, timestamp)
|
||||
if (!verify) return false
|
||||
|
||||
|
@ -584,13 +584,13 @@ export class SlashClient {
|
|||
channels: {}
|
||||
}
|
||||
})
|
||||
res._httpRespond = async (d: InteractionResponsePayload) =>
|
||||
res._httpRespond = async (d: InteractionResponsePayload | FormData) =>
|
||||
await req.respond({
|
||||
status: 200,
|
||||
headers: new Headers({
|
||||
'content-type': 'application/json'
|
||||
'content-type': d instanceof FormData ? 'multipart/form-data' : 'application/json'
|
||||
}),
|
||||
body: JSON.stringify(d)
|
||||
body: d instanceof FormData ? d : JSON.stringify(d)
|
||||
})
|
||||
|
||||
return res
|
||||
|
@ -599,6 +599,26 @@ export class SlashClient {
|
|||
}
|
||||
}
|
||||
|
||||
/** Verify FetchEvent (for Service Worker usage) and return Interaction if valid */
|
||||
async verifyFetchEvent({ request: req, respondWith }: { respondWith: CallableFunction, request: Request }): Promise<false | Interaction> {
|
||||
if (req.bodyUsed === true) throw new Error('Request Body already used')
|
||||
if (req.body === null) return false
|
||||
const body = (await req.body.getReader().read()).value
|
||||
if (body === undefined) return false
|
||||
|
||||
return await this.verifyServerRequest({
|
||||
headers: req.headers,
|
||||
body,
|
||||
method: req.method,
|
||||
respond: async (options) => {
|
||||
await respondWith(new Response(options.body, {
|
||||
headers: options.headers,
|
||||
status: options.status,
|
||||
}))
|
||||
},
|
||||
})
|
||||
}
|
||||
|
||||
async verifyOpineRequest(req: any): Promise<boolean> {
|
||||
const signature = req.headers.get('x-signature-ed25519')
|
||||
const timestamp = req.headers.get('x-signature-timestamp')
|
||||
|
|
Loading…
Reference in New Issue