44 lines
1.6 KiB
TypeScript
44 lines
1.6 KiB
TypeScript
/**
|
|
* Simulacion de que clientes estan subscritos a que eventos
|
|
* */
|
|
|
|
import { Request, Response } from 'express';
|
|
import { config, webhooksConfig } from "#config/index.js";
|
|
import { SubscriptionData, Topic, SubscriptorData, ShopifyEvent } from "./subscriptions.types"
|
|
import { SubscriptionManager } from './subscription_manager';
|
|
|
|
/** Mapa topic -> subscriber */
|
|
export const subscribers = new Map<Topic, SubscriptionData>()
|
|
|
|
export function subscriptonHandlerBuilder(subscriptionManager: SubscriptionManager) {
|
|
const subsManager = subscriptionManager
|
|
return function (req: Request, res: Response) {
|
|
try {
|
|
const event = req.body;
|
|
const secretkey = req.body.secretkey || webhooksConfig.apiSecret || 1234
|
|
|
|
const subscriptorData: SubscriptorData = {
|
|
host: event.host,
|
|
endpoint: event.endpoint,
|
|
method: event.method,
|
|
open: new Date(),
|
|
port: event.port,
|
|
secretkey: secretkey // Es solo para mock no usar en prod
|
|
}
|
|
const topic = event.topic
|
|
|
|
subsManager.addSubscriber({
|
|
topic: topic,
|
|
subscriber: subscriptorData
|
|
})
|
|
|
|
console.log('Received webhook subscriber:',
|
|
JSON.stringify(event, null, 2));
|
|
res.status(200).json({ received: true, key: secretkey });
|
|
} catch (error) {
|
|
console.error('Error processing webhook:', error);
|
|
res.status(500).json({ error: 'Internal Server Error' });
|
|
}
|
|
}
|
|
}
|