fix: event type handling and update file paths
Signed-off-by: Innei <i@innei.in>
This commit is contained in:
@@ -21,16 +21,31 @@ function generateGenericEventType(fileName) {
|
|||||||
if (ts.isPropertySignature(member) && member.type) {
|
if (ts.isPropertySignature(member) && member.type) {
|
||||||
const key = member.name
|
const key = member.name
|
||||||
let eventType = ''
|
let eventType = ''
|
||||||
|
let isLiteralType = false
|
||||||
if (
|
if (
|
||||||
ts.isComputedPropertyName(key) &&
|
ts.isComputedPropertyName(key) &&
|
||||||
ts.isPropertyAccessExpression(key.expression)
|
ts.isPropertyAccessExpression(key.expression)
|
||||||
) {
|
) {
|
||||||
eventType = key.expression.name.text
|
eventType = key.expression.name.text
|
||||||
|
} else if (ts.isStringLiteral(key)) {
|
||||||
|
// Handle string literal types like 'health-check'
|
||||||
|
eventType = key.text
|
||||||
|
isLiteralType = true
|
||||||
}
|
}
|
||||||
|
|
||||||
if (eventType && eventType !== '*') {
|
// if (eventType && eventType !== '*') {
|
||||||
|
// const payloadType = member.type.getText(sourceFile)
|
||||||
|
// genericEventType += ` | { type: BusinessEvents.${eventType}; payload: ${payloadType} }\n`
|
||||||
|
// }
|
||||||
|
if (eventType) {
|
||||||
const payloadType = member.type.getText(sourceFile)
|
const payloadType = member.type.getText(sourceFile)
|
||||||
genericEventType += ` | { type: BusinessEvents.${eventType}; payload: ${payloadType} }\n`
|
if (isLiteralType) {
|
||||||
|
// For string literals, use the literal value directly
|
||||||
|
genericEventType += ` | { type: '${eventType}'; payload: ${payloadType} }\n`
|
||||||
|
} else {
|
||||||
|
// For regular event types
|
||||||
|
genericEventType += ` | { type: BusinessEvents.${eventType}; payload: ${payloadType} }\n`
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
|
|||||||
@@ -20,7 +20,7 @@ function replaceContent(filePath, searchValue, replaceValue) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// File paths
|
// File paths
|
||||||
const files = ['dist/index.d.ts', 'dist/index.d.mts']
|
const files = ['dist/index.d.ts', 'dist/index.d.cts']
|
||||||
|
|
||||||
// The string to be replaced and its replacement
|
// The string to be replaced and its replacement
|
||||||
const searchValue = "import { Ref } from '@typegoose/typegoose';"
|
const searchValue = "import { Ref } from '@typegoose/typegoose';"
|
||||||
|
|||||||
@@ -1,6 +1,7 @@
|
|||||||
import assert from 'assert'
|
import assert from 'assert'
|
||||||
import { createHmac, timingSafeEqual } from 'crypto'
|
import { createHmac, timingSafeEqual } from 'crypto'
|
||||||
import { EventEmitter } from 'events'
|
import { EventEmitter } from 'events'
|
||||||
|
import type { GenericEvent } from 'dist'
|
||||||
import type { IncomingMessage, ServerResponse } from 'http'
|
import type { IncomingMessage, ServerResponse } from 'http'
|
||||||
import type { BusinessEvents } from './event.enum'
|
import type { BusinessEvents } from './event.enum'
|
||||||
import type { ExtendedEventEmitter } from './types'
|
import type { ExtendedEventEmitter } from './types'
|
||||||
@@ -9,7 +10,7 @@ import { InvalidSignatureError } from './error'
|
|||||||
|
|
||||||
interface CreateHandlerOptions {
|
interface CreateHandlerOptions {
|
||||||
secret: string
|
secret: string
|
||||||
events?: 'all' | BusinessEvents[]
|
// events?: 'all' | BusinessEvents[]
|
||||||
}
|
}
|
||||||
export type RequestWithJSONBody = IncomingMessage & Request & { body: object }
|
export type RequestWithJSONBody = IncomingMessage & Request & { body: object }
|
||||||
type Handler = {
|
type Handler = {
|
||||||
@@ -25,14 +26,7 @@ export const createHandler = (options: CreateHandlerOptions): Handler => {
|
|||||||
try {
|
try {
|
||||||
const data = await readDataFromRequest({ req, secret })
|
const data = await readDataFromRequest({ req, secret })
|
||||||
|
|
||||||
const { event, payload } = data
|
const { type: event, payload } = data
|
||||||
|
|
||||||
if (event === 'health_check') {
|
|
||||||
res.statusCode = 200
|
|
||||||
res.setHeader('Content-Type', 'application/json')
|
|
||||||
res.end(JSON.stringify({ ok: 1 }))
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
handler.emitter.emit(event as BusinessEvents, payload)
|
handler.emitter.emit(event as BusinessEvents, payload)
|
||||||
handler.emitter.emit('*', {
|
handler.emitter.emit('*', {
|
||||||
@@ -84,9 +78,9 @@ export const readDataFromRequest = async ({
|
|||||||
|
|
||||||
if (isValid) {
|
if (isValid) {
|
||||||
return {
|
return {
|
||||||
event: event as BusinessEvents | 'health_check',
|
type: event as BusinessEvents,
|
||||||
payload: obj,
|
payload: obj as any,
|
||||||
}
|
} as GenericEvent
|
||||||
} else {
|
} else {
|
||||||
console.error('revice a invalidate webhook payload', req.headers)
|
console.error('revice a invalidate webhook payload', req.headers)
|
||||||
throw new InvalidSignatureError()
|
throw new InvalidSignatureError()
|
||||||
|
|||||||
@@ -45,6 +45,7 @@ export interface EventPayloadMapping {
|
|||||||
[BusinessEvents.COMMENT_CREATE]: Omit<CommentModel, 'ref'> & {
|
[BusinessEvents.COMMENT_CREATE]: Omit<CommentModel, 'ref'> & {
|
||||||
ref: Id | PostModel | PageModel | NoteModel | RecentlyModel
|
ref: Id | PostModel | PageModel | NoteModel | RecentlyModel
|
||||||
}
|
}
|
||||||
|
'health-check': {}
|
||||||
}
|
}
|
||||||
|
|
||||||
export interface IActivityLike {
|
export interface IActivityLike {
|
||||||
@@ -77,3 +78,4 @@ export type GenericEvent =
|
|||||||
ref: Id | PostModel | PageModel | NoteModel | RecentlyModel
|
ref: Id | PostModel | PageModel | NoteModel | RecentlyModel
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
| { type: 'health-check'; payload: {} }
|
||||||
|
|||||||
Reference in New Issue
Block a user