@adatechnology/meta-whatsapp-module 0.2.0-rc.25 → 0.2.0-rc.27

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.cjs CHANGED
@@ -59,7 +59,7 @@ __export(index_exports, {
59
59
  TRANSCRIPTION_STATUS: () => TRANSCRIPTION_STATUS,
60
60
  TakeoverConversationUseCase: () => TakeoverConversationUseCase,
61
61
  TranscribeAudioUseCase: () => TranscribeAudioUseCase,
62
- WEBHOOK_NONCE_TTL_SECONDS: () => WEBHOOK_NONCE_TTL_SECONDS,
62
+ WEBHOOK_NONCE_TTL_SECONDS: () => import_meta_graph_core2.WEBHOOK_NONCE_TTL_SECONDS,
63
63
  WhatsAppChannelAdapter: () => WhatsAppChannelAdapter,
64
64
  claimWebhookDelivery: () => claimWebhookDelivery,
65
65
  createMetaWhatsAppModule: () => createMetaWhatsAppModule,
@@ -2087,36 +2087,24 @@ var WhatsAppChannelAdapter = class {
2087
2087
  var import_meta_whatsapp_contracts12 = require("@adatechnology/meta-whatsapp-contracts");
2088
2088
 
2089
2089
  // src/channel/webhookSecurity.ts
2090
- var import_node_crypto = require("crypto");
2090
+ var import_meta_graph_core2 = require("@adatechnology/meta-graph-core");
2091
2091
  var import_meta_whatsapp_contracts10 = require("@adatechnology/meta-whatsapp-contracts");
2092
- var WEBHOOK_NONCE_TTL_SECONDS = 300;
2093
- function safeEqualStrings(left, right) {
2094
- const leftDigest = (0, import_node_crypto.createHmac)("sha256", "constant-time-compare").update(left).digest();
2095
- const rightDigest = (0, import_node_crypto.createHmac)("sha256", "constant-time-compare").update(right).digest();
2096
- return (0, import_node_crypto.timingSafeEqual)(leftDigest, rightDigest);
2097
- }
2098
- __name(safeEqualStrings, "safeEqualStrings");
2092
+ var WEBHOOK_NONCE_NAMESPACE = "meta-whatsapp";
2099
2093
  function verifyWebhookChallenge(params) {
2100
- if (params.mode !== "subscribe" || !params.token || !params.challenge) {
2101
- throw new import_meta_whatsapp_contracts10.InvalidWebhookSignatureError();
2102
- }
2103
- if (!safeEqualStrings(params.token, params.expectedToken)) {
2104
- throw new import_meta_whatsapp_contracts10.InvalidWebhookSignatureError();
2105
- }
2094
+ if (!(0, import_meta_graph_core2.isValidWebhookChallenge)(params)) throw new import_meta_whatsapp_contracts10.InvalidWebhookSignatureError();
2106
2095
  return params.challenge;
2107
2096
  }
2108
2097
  __name(verifyWebhookChallenge, "verifyWebhookChallenge");
2109
2098
  function verifyWebhookSignature(params) {
2110
- const { rawBody, signatureHeader, appSecret } = params;
2111
- if (!signatureHeader?.startsWith("sha256=")) throw new import_meta_whatsapp_contracts10.InvalidWebhookSignatureError();
2112
- const expected = (0, import_node_crypto.createHmac)("sha256", appSecret).update(rawBody).digest("hex");
2113
- const received = signatureHeader.slice("sha256=".length);
2114
- if (!safeEqualStrings(received, expected)) throw new import_meta_whatsapp_contracts10.InvalidWebhookSignatureError();
2099
+ if (!(0, import_meta_graph_core2.isValidWebhookSignature)(params)) throw new import_meta_whatsapp_contracts10.InvalidWebhookSignatureError();
2115
2100
  }
2116
2101
  __name(verifyWebhookSignature, "verifyWebhookSignature");
2117
2102
  async function claimWebhookDelivery(params) {
2118
- const key = `meta-whatsapp:webhook:${params.signatureHeader}`;
2119
- return params.nonceStore.setIfAbsent(key, params.ttlSeconds ?? WEBHOOK_NONCE_TTL_SECONDS);
2103
+ const key = (0, import_meta_graph_core2.buildWebhookDeliveryKey)({
2104
+ namespace: WEBHOOK_NONCE_NAMESPACE,
2105
+ signatureHeader: params.signatureHeader
2106
+ });
2107
+ return params.nonceStore.setIfAbsent(key, params.ttlSeconds ?? import_meta_graph_core2.WEBHOOK_NONCE_TTL_SECONDS);
2120
2108
  }
2121
2109
  __name(claimWebhookDelivery, "claimWebhookDelivery");
2122
2110
 
@@ -2813,7 +2801,7 @@ async function runMetaWhatsAppMigrations(params) {
2813
2801
  __name(runMetaWhatsAppMigrations, "runMetaWhatsAppMigrations");
2814
2802
 
2815
2803
  // src/realtime/SseHub.ts
2816
- var import_node_crypto2 = require("crypto");
2804
+ var import_node_crypto = require("crypto");
2817
2805
  var TICKET_TTL_SECONDS = 60;
2818
2806
  var SseHub = class {
2819
2807
  static {
@@ -2826,7 +2814,7 @@ var SseHub = class {
2826
2814
  relaySubscriptions = /* @__PURE__ */ new Map();
2827
2815
  // Identifica esta instância do processo para descartar o próprio eco (pub/sub entrega a
2828
2816
  // mensagem a todos os inscritos, inclusive quem publicou).
2829
- instanceId = (0, import_node_crypto2.randomUUID)();
2817
+ instanceId = (0, import_node_crypto.randomUUID)();
2830
2818
  constructor(relay) {
2831
2819
  this.relay = relay;
2832
2820
  }
@@ -2872,7 +2860,7 @@ var SseHub = class {
2872
2860
  }
2873
2861
  };
2874
2862
  async function issueSseTicket(store, companyId, whatsappNumber) {
2875
- const ticket = (0, import_node_crypto2.randomUUID)();
2863
+ const ticket = (0, import_node_crypto.randomUUID)();
2876
2864
  await store.set(`sse:ticket:${ticket}`, JSON.stringify({
2877
2865
  companyId,
2878
2866
  whatsappNumber