@adatechnology/meta-whatsapp-module 0.2.0-rc.9 → 0.2.0

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.
@@ -2,7 +2,149 @@ var __defProp = Object.defineProperty;
2
2
  var __name = (target, value) => __defProp(target, "name", { value, configurable: true });
3
3
 
4
4
  // src/testing/index.ts
5
- import { buildInboundTextPayload, buildInboundInteractivePayload, buildInboundAudioPayload, serializeWebhookPayload as serializeWebhookPayload2, PREVIEW_PHONE_NUMBER_ID, PREVIEW_WABA_ID, PREVIEW_DISPLAY_PHONE_NUMBER, PREVIEW_AUDIO_MIME_TYPE } from "@adatechnology/meta-whatsapp-contracts/testing";
5
+ import { buildInboundTextPayload, buildInboundInteractivePayload, buildInboundAudioPayload, buildInboundMediaPayload, serializeWebhookPayload as serializeWebhookPayload2, PREVIEW_PHONE_NUMBER_ID, PREVIEW_WABA_ID, PREVIEW_DISPLAY_PHONE_NUMBER, PREVIEW_AUDIO_MIME_TYPE } from "@adatechnology/meta-whatsapp-contracts/testing";
6
+
7
+ // src/testing/mediaSamples.ts
8
+ var SAMPLE_PDF_BASE64 = "JVBERi0xLjQKMSAwIG9iajw8L1R5cGUvQ2F0YWxvZy9QYWdlcyAyIDAgUj4+ZW5kb2JqCjIgMCBvYmo8PC9UeXBlL1BhZ2VzL0tpZHNbMyAwIFJdL0NvdW50IDE+PmVuZG9iagozIDAgb2JqPDwvVHlwZS9QYWdlL1BhcmVudCAyIDAgUi9NZWRpYUJveFswIDAgMjYwIDExMF0vQ29udGVudHMgNCAwIFIvUmVzb3VyY2VzPDwvRm9udDw8L0YxIDUgMCBSPj4+Pj4+ZW5kb2JqCjQgMCBvYmo8PC9MZW5ndGggNjI+PnN0cmVhbQpCVCAvRjEgMTMgVGYgMTggNTUgVGQgKERvY3VtZW50byBkZSBleGVtcGxvIGRvIHByZXZpZXcpIFRqIEVUCmVuZHN0cmVhbWVuZG9iago1IDAgb2JqPDwvVHlwZS9Gb250L1N1YnR5cGUvVHlwZTEvQmFzZUZvbnQvSGVsdmV0aWNhPj5lbmRvYmoKeHJlZgowIDYKMDAwMDAwMDAwMCA2NTUzNSBmIAowMDAwMDAwMDA5IDAwMDAwIG4gCjAwMDAwMDAwNTIgMDAwMDAgbiAKMDAwMDAwMDEwMSAwMDAwMCBuIAowMDAwMDAwMjExIDAwMDAwIG4gCjAwMDAwMDAzMTcgMDAwMDAgbiAKdHJhaWxlcjw8L1NpemUgNi9Sb290IDEgMCBSPj4Kc3RhcnR4cmVmCjM3OAolJUVPRgo=";
9
+ var SAMPLE_DOCX_BASE64 = "UEsDBBQAAAAIANFO/Fx5bjPX6AAAAK0BAAATAAAAW0NvbnRlbnRfVHlwZXNdLnhtbH1QyU7DMBD9FWuuKHHggBCK0wPLETiUDxjZk8SqN3nc0v49Tlt6QIXjzFv1+tXeO7GjzDYGBbdtB4KCjsaGScHn+rV5AMEFg0EXAyk4EMNq6NeHRCyqNrCCuZT0KCXrmTxyGxOFiowxeyz1zJNMqDc4kbzrunupYygUSlMWDxj6Zxpx64p42df3qUcmxyCeTsQlSwGm5KzGUnG5C+ZXSnNOaKvyyOHZJr6pBJBXExbk74Cz7r0Ok60h8YG5vKGvLPkVs5Em6q2vyvZ/mys94zhaTRf94pZy1MRcF/euvSAebfjpL49zD99QSwMEFAAAAAgA0U78XJv9N+qtAAAAKQEAAAsAAABfcmVscy8ucmVsc43POw7CMAwG4KtE3mlaBoRQ0y4IqSsqB7ASN61oHkrCo7cnAwNFDIy2f3+W6/ZpZnanECdnBVRFCYysdGqyWsClP232wGJCq3B2lgQsFKFt6jPNmPJKHCcfWTZsFDCm5A+cRzmSwVg4TzZPBhcMplwGzT3KK2ri27Lc8fBpwNpknRIQOlUB6xdP/9huGCZJRydvhmz6ceIrkWUMmpKAhwuKq3e7yCzwpuarF5sXUEsDBBQAAAAIANFO/FyraIuoqgAAAOcAAAARAAAAd29yZC9kb2N1bWVudC54bWxFjksOwjAMBa8SZU9TWCBUNWWBxAngAKExbaTGjpzQz+1JyoLNPFt+Grm9rn4SM3B0hFoeq1oKwJ6sw0HL5+N+uEgRk0FrJkLQcoMor127NJb6jwdMIgswNouWY0qhUSr2I3gTKwqA+fYm9ibllQe1ENvA1EOM2e8ndarrs/LGoSzKF9mtZCjggtTdCBObRMKCgBV8mPJIIjDMDpZWlU4h7ww7fx71/7H7AlBLAQIUAxQAAAAIANFO/Fx5bjPX6AAAAK0BAAATAAAAAAAAAAAAAACAAQAAAABbQ29udGVudF9UeXBlc10ueG1sUEsBAhQDFAAAAAgA0U78XJv9N+qtAAAAKQEAAAsAAAAAAAAAAAAAAIABGQEAAF9yZWxzLy5yZWxzUEsBAhQDFAAAAAgA0U78XKtoi6iqAAAA5wAAABEAAAAAAAAAAAAAAIAB7wEAAHdvcmQvZG9jdW1lbnQueG1sUEsFBgAAAAADAAMAuQAAAMgCAAAAAA==";
10
+ var SAMPLE_XLSX_BASE64 = "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";
11
+ var SAMPLE_TXT_BASE64 = "TGlzdGEgZGUgY29tcHJhcwotIGFycm96IDJrZwotIG9sZW8gMXVuCg==";
12
+ var SAMPLE_CSV_BASE64 = "cHJvZHV0byxxdWFudGlkYWRlLHByZWNvCmFycm96LDIsMjQuOTAKb2xlbywxLDcuNTAK";
13
+ var SAMPLE_ZIP_BASE64 = "UEsDBBQAAAAIANFO/FwtmGOxGwAAABkAAAARAAAAY29tcHJvdmFudGUtMS50eHRLzs8tKMovS8wrSVVISVUoSExPzE3NK8nnAgBQSwMEFAAAAAgA0U78XCftV8YWAAAAFAAAABEAAABjb21wcm92YW50ZS0yLnR4dCtOTS/NS8lXSM7PLSjKL0vMK0nlAgBQSwECFAMUAAAACADRTvxcLZhjsRsAAAAZAAAAEQAAAAAAAAAAAAAAgAEAAAAAY29tcHJvdmFudGUtMS50eHRQSwECFAMUAAAACADRTvxcJ+1XxhYAAAAUAAAAEQAAAAAAAAAAAAAAgAFKAAAAY29tcHJvdmFudGUtMi50eHRQSwUGAAAAAAIAAgB+AAAAjwAAAAAA";
14
+ var SAMPLE_PNG_BASE64 = "iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAIAAADYYG7QAAAACXBIWXMAAAABAAAAAQBPJcTWAAAATElEQVR4nO3OMRHAIAAAMbhDWo2hCYPdu/xIh0RB5rPP+JN1O/AlVISKUBEqQkWoCBWhIlSEilARKkJFqAgVoSJUhIpQESpCRagIlRcgDwI25HmPQAAAAABJRU5ErkJggg==";
15
+ var SAMPLE_JPEG_BASE64 = "/9j/4AAQSkZJRgABAgAAAQABAAD//gAQTGF2YzYyLjExLjEwMAD/2wBDAAgEBAQEBAUFBQUFBQYGBgYGBgYGBgYGBgYHBwcICAgHBwcGBgcHCAgICAkJCQgICAgJCQoKCgwMCwsODg4RERT/xABMAAEBAAAAAAAAAAAAAAAAAAAABAEBAQAAAAAAAAAAAAAAAAAAAAYQAQAAAAAAAAAAAAAAAAAAAAARAQAAAAAAAAAAAAAAAAAAAAD/wAARCAAwADADASIAAhEAAxEA/9oADAMBAAIRAxEAPwCUBRpwAAAAAAAAAAAAAAAB/9k=";
16
+ var SAMPLE_WEBP_BASE64 = "UklGRhoAAABXRUJQVlA4TA0AAAAvAAAAEAcQERGIiP4HAA==";
17
+ var SAMPLE_MP4_BASE64 = "AAAAIGZ0eXBpc29tAAACAGlzb21pc28yYXZjMW1wNDEAAANdbW9vdgAAAGxtdmhkAAAAAAAAAAAAAAAAAAAD6AAAASwAAQAAAQAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAoh0cmFrAAAAXHRraGQAAAADAAAAAAAAAAAAAAABAAAAAAAAASwAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAABAAAAAAEAAAABAAAAAAAAkZWR0cwAAABxlbHN0AAAAAAAAAAEAAAEsAAAIAAABAAAAAAIAbWRpYQAAACBtZGhkAAAAAAAAAAAAAAAAAAAoAAAAEABVxAAAAAAALWhkbHIAAAAAAAAAAHZpZGUAAAAAAAAAAAAAAABWaWRlb0hhbmRsZXIAAAABq21pbmYAAAAUdm1oZAAAAAEAAAAAAAAAAAAAACRkaW5mAAAAHGRyZWYAAAAAAAAAAQAAAAx1cmwgAAAAAQAAAWtzdGJsAAAAv3N0c2QAAAAAAAAAAQAAAK9hdmMxAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAEAAQABIAAAASAAAAAAAAAABFUxhdmM2Mi4xMS4xMDAgbGlieDI2NAAAAAAAAAAAAAAAGP//AAAANWF2Y0MBZAAK/+EAGGdkAAqs2UQmwEQAAAMABAAAAwBQPEiWWAEABmjr48siwP34+AAAAAAQcGFzcAAAAAEAAAABAAAAFGJ0cnQAAAAAAABO2gAAAAAAAAAYc3R0cwAAAAAAAAABAAAAAwAABAAAAAAUc3RzcwAAAAAAAAABAAAAAQAAAChjdHRzAAAAAAAAAAMAAAABAAAIAAAAAAEAAAwAAAAAAQAABAAAAAAcc3RzYwAAAAAAAAABAAAAAQAAAAMAAAABAAAAIHN0c3oAAAAAAAAAAAAAAAMAAALbAAAADgAAAAwAAAAUc3RjbwAAAAAAAAABAAADjQAAAGF1ZHRhAAAAWW1ldGEAAAAAAAAAIWhkbHIAAAAAAAAAAG1kaXJhcHBsAAAAAAAAAAAAAAAALGlsc3QAAAAkqXRvbwAAABxkYXRhAAAAAQAAAABMYXZmNjIuMy4xMDAAAAAIZnJlZQAAAv1tZGF0AAACrgYF//+q3EXpvebZSLeWLNgg2SPu73gyNjQgLSBjb3JlIDE2NSByMzIyMiBiMzU2MDVhIC0gSC4yNjQvTVBFRy00IEFWQyBjb2RlYyAtIENvcHlsZWZ0IDIwMDMtMjAyNSAtIGh0dHA6Ly93d3cudmlkZW9sYW4ub3JnL3gyNjQuaHRtbCAtIG9wdGlvbnM6IGNhYmFjPTEgcmVmPTMgZGVibG9jaz0xOjA6MCBhbmFseXNlPTB4MzoweDExMyBtZT1oZXggc3VibWU9NyBwc3k9MSBwc3lfcmQ9MS4wMDowLjAwIG1peGVkX3JlZj0xIG1lX3JhbmdlPTE2IGNocm9tYV9tZT0xIHRyZWxsaXM9MSA4eDhkY3Q9MSBjcW09MCBkZWFkem9uZT0yMSwxMSBmYXN0X3Bza2lwPTEgY2hyb21hX3FwX29mZnNldD0tMiB0aHJlYWRzPTIgbG9va2FoZWFkX3RocmVhZHM9MSBzbGljZWRfdGhyZWFkcz0wIG5yPTAgZGVjaW1hdGU9MSBpbnRlcmxhY2VkPTAgYmx1cmF5X2NvbXBhdD0wIGNvbnN0cmFpbmVkX2ludHJhPTAgYmZyYW1lcz0zIGJfcHlyYW1pZD0yIGJfYWRhcHQ9MSBiX2JpYXM9MCBkaXJlY3Q9MSB3ZWlnaHRiPTEgb3Blbl9nb3A9MCB3ZWlnaHRwPTIga2V5aW50PTI1MCBrZXlpbnRfbWluPTEwIHNjZW5lY3V0PTQwIGludHJhX3JlZnJlc2g9MCByY19sb29rYWhlYWQ9NDAgcmM9Y3JmIG1idHJlZT0xIGNyZj0yMy4wIHFjb21wPTAuNjAgcXBtaW49MCBxcG1heD02OSBxcHN0ZXA9NCBpcF9yYXRpbz0xLjQwIGFxPTE6MS4wMACAAAAAJWWIhAA///7mdfgUoKykhh+DdK6xVynnAWznTQ4fVSgMZ1FwY28AAAAKQZoibEN//qePiAAAAAgBnkF5Df8HfQ==";
18
+ var SAMPLE_OGG_BASE64 = "T2dnUwACAAAAAAAAAABXDTmmAAAAAKMnDKEBE09wdXNIZWFkAQE4AYC7AAAAAABPZ2dTAAAAAAAAAAAAAFcNOaYBAAAAZlPuKwE9T3B1c1RhZ3MMAAAATGF2ZjYyLjMuMTAwAQAAAB0AAABlbmNvZGVyPUxhdmM2Mi4xMS4xMDAgbGlib3B1c09nZ1MABLgmAAAAAAAAVw05pgIAAAA3uL6lCw8REhISEhISEhISeAvkwTbsxY2MSUaZpCaweAfJcifhROpV8fDA1d3pUmB4B8l5yMlXwKISI/rvZ/NkwOB4B8l5yMlXwKISI/rvZ/NkwOB4B8l5yMlXwKISI/rvZ/NkwOB4B8l5yMlXwKISI/rvZ/NkwOB4B8l5yMlXwKISI/rvZ/NkwOB4B8l5yMlXwKISI/rvZ/NkwOB4B8l5yMlXwKISI/rvZ/NkwOB4B8l5yMlXwKISI/rvZ/NkwOB4B8l5yMlXwKISI/rvZ/NkwOA=";
19
+ var SAMPLE_M4A_BASE64 = "AAAAHGZ0eXBNNEEgAAACAE00QSBpc29taXNvMgAAAAhmcmVlAAAAQW1kYXTeAgBMYXZjNjIuMTEuMTAwAAIwQA4BGCAHARggBwEYIAcBGCAHARggBwEYIAcBGCAHARggBwEYIAcAAAMibW9vdgAAAGxtdmhkAAAAAAAAAAAAAAAAAAAD6AAAAMgAAQAAAQAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAk10cmFrAAAAXHRraGQAAAADAAAAAAAAAAAAAAABAAAAAAAAAMgAAAAAAAAAAAAAAAEBAAAAAAEAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAkZWR0cwAAABxlbHN0AAAAAAAAAAEAAADIAAAEAAABAAAAAAHFbWRpYQAAACBtZGhkAAAAAAAAAAAAAAAAAACsRAAAJnRVxAAAAAAALWhkbHIAAAAAAAAAAHNvdW4AAAAAAAAAAAAAAABTb3VuZEhhbmRsZXIAAAABcG1pbmYAAAAQc21oZAAAAAAAAAAAAAAAJGRpbmYAAAAcZHJlZgAAAAAAAAABAAAADHVybCAAAAABAAABNHN0YmwAAABqc3RzZAAAAAAAAAABAAAAWm1wNGEAAAAAAAAAAQAAAAAAAAAAAAEAEAAAAACsRAAAAAAANmVzZHMAAAAAA4CAgCUAAQAEgICAF0AVAAAAAAB9AAAAB/oFgICABRIIVuUABoCAgAECAAAAIHN0dHMAAAAAAAAAAgAAAAkAAAQAAAAAAQAAAnQAAAAcc3RzYwAAAAAAAAABAAAAAQAAAAoAAAABAAAAPHN0c3oAAAAAAAAAAAAAAAoAAAAVAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAAFHN0Y28AAAAAAAAAAQAAACwAAAAac2dwZAEAAAByb2xsAAAAAgAAAAH//wAAABxzYmdwAAAAAHJvbGwAAAABAAAACgAAAAEAAABhdWR0YQAAAFltZXRhAAAAAAAAACFoZGxyAAAAAAAAAABtZGlyYXBwbAAAAAAAAAAAAAAAACxpbHN0AAAAJKl0b28AAAAcZGF0YQAAAAEAAAAATGF2ZjYyLjMuMTAw";
20
+ var SAMPLE_AAC_BASE64 = "//FQQAOf/N4CAExhdmM2Mi4xMS4xMDAAAjBADv/xUEABf/wBGCAH//FQQAF//AEYIAf/8VBAAX/8ARggB//xUEABf/wBGCAH//FQQAF//AEYIAf/8VBAAX/8ARggB//xUEABf/wBGCAH//FQQAF//AEYIAf/8VBAAX/8ARggBw==";
21
+ var SAMPLE_MP3_BASE64 = "SUQzBAAAAAAAIlRTU0UAAAAOAAADTGF2ZjYyLjMuMTAwAAAAAAAAAAAAAAD/40jAAAAAAAAAAAAASW5mbwAAAA8AAAAFAAAGwABVVVVVVVVVVVVVVVVVVVVVVVVVgICAgICAgICAgICAgICAgICAgICqqqqqqqqqqqqqqqqqqqqqqqqqqtXV1dXV1dXV1dXV1dXV1dXV1dXV//////////////////////////8AAAAATGF2YzYyLjExAAAAAAAAAAAAAAAAJALAAAAAAAAABsDR4nNFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/40jEAAAAA0gAAAAATEFNRTMuMTAwVVVVVVVVVVVVVVVMQU1FMy4xMDBVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVX/40jEAAAAA0gAAAAATEFNRTMuMTAwVVVVVVVVVVVVVVVMQU1FMy4xMDBVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVX/40jEAAAAA0gAAAAATEFNRTMuMTAwVVVVVVVVVVVVVVVMQU1FMy4xMDBVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVX/40jEAAAAA0gAAAAATEFNRTMuMTAwVVVVVVVVVVVVVVVMQU1FMy4xMDBVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVX/40jEAAAAA0gAAAAATEFNRTMuMTAwVVVVVVVVVVVVVVVMQU1FMy4xMDBVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVU=";
22
+ var SAMPLE_BYTES = {
23
+ pdf: SAMPLE_PDF_BASE64,
24
+ docx: SAMPLE_DOCX_BASE64,
25
+ xlsx: SAMPLE_XLSX_BASE64,
26
+ txt: SAMPLE_TXT_BASE64,
27
+ csv: SAMPLE_CSV_BASE64,
28
+ zip: SAMPLE_ZIP_BASE64,
29
+ png: SAMPLE_PNG_BASE64,
30
+ jpeg: SAMPLE_JPEG_BASE64,
31
+ webp: SAMPLE_WEBP_BASE64,
32
+ mp4: SAMPLE_MP4_BASE64,
33
+ ogg: SAMPLE_OGG_BASE64,
34
+ m4a: SAMPLE_M4A_BASE64,
35
+ aac: SAMPLE_AAC_BASE64,
36
+ mp3: SAMPLE_MP3_BASE64
37
+ };
38
+ var MEDIA_SAMPLES = [
39
+ {
40
+ name: "pdf",
41
+ mimeType: "application/pdf",
42
+ extension: "pdf",
43
+ mediaType: "document",
44
+ sizeBytes: 557
45
+ },
46
+ {
47
+ name: "docx",
48
+ mimeType: "application/vnd.openxmlformats-officedocument.wordprocessingml.document",
49
+ extension: "docx",
50
+ mediaType: "document",
51
+ sizeBytes: 919
52
+ },
53
+ {
54
+ name: "xlsx",
55
+ mimeType: "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet",
56
+ extension: "xlsx",
57
+ mediaType: "document",
58
+ sizeBytes: 1567
59
+ },
60
+ {
61
+ name: "txt",
62
+ mimeType: "text/plain",
63
+ extension: "txt",
64
+ mediaType: "document",
65
+ sizeBytes: 40
66
+ },
67
+ {
68
+ name: "csv",
69
+ mimeType: "text/csv",
70
+ extension: "csv",
71
+ mediaType: "document",
72
+ sizeBytes: 51
73
+ },
74
+ {
75
+ name: "zip",
76
+ mimeType: "application/zip",
77
+ extension: "zip",
78
+ mediaType: "document",
79
+ sizeBytes: 291
80
+ },
81
+ {
82
+ name: "png",
83
+ mimeType: "image/png",
84
+ extension: "png",
85
+ mediaType: "image",
86
+ sizeBytes: 154
87
+ },
88
+ {
89
+ name: "jpeg",
90
+ mimeType: "image/jpeg",
91
+ extension: "jpg",
92
+ mediaType: "image",
93
+ sizeBytes: 236
94
+ },
95
+ {
96
+ name: "webp",
97
+ mimeType: "image/webp",
98
+ extension: "webp",
99
+ mediaType: "sticker",
100
+ sizeBytes: 34
101
+ },
102
+ {
103
+ name: "mp4",
104
+ mimeType: "video/mp4",
105
+ extension: "mp4",
106
+ mediaType: "video",
107
+ sizeBytes: 1666
108
+ },
109
+ {
110
+ name: "ogg",
111
+ mimeType: "audio/ogg; codecs=opus",
112
+ extension: "ogg",
113
+ mediaType: "audio",
114
+ sizeBytes: 368
115
+ },
116
+ {
117
+ name: "m4a",
118
+ mimeType: "audio/mp4",
119
+ extension: "m4a",
120
+ mediaType: "audio",
121
+ sizeBytes: 903
122
+ },
123
+ {
124
+ name: "aac",
125
+ mimeType: "audio/aac",
126
+ extension: "aac",
127
+ mediaType: "audio",
128
+ sizeBytes: 127
129
+ },
130
+ {
131
+ name: "mp3",
132
+ mimeType: "audio/mpeg",
133
+ extension: "mp3",
134
+ mediaType: "audio",
135
+ sizeBytes: 1772
136
+ }
137
+ ];
138
+ function readMediaSample(name) {
139
+ return Buffer.from(SAMPLE_BYTES[name], "base64");
140
+ }
141
+ __name(readMediaSample, "readMediaSample");
142
+ function findMediaSample(name) {
143
+ const sample = MEDIA_SAMPLES.find((candidate) => candidate.name === name);
144
+ if (!sample) throw new Error(`Amostra de m\xEDdia desconhecida: ${name}`);
145
+ return sample;
146
+ }
147
+ __name(findMediaSample, "findMediaSample");
6
148
 
7
149
  // src/testing/inboundPayloads.ts
8
150
  import { createHmac } from "crypto";
@@ -26,13 +168,17 @@ function toSignedWebhookRequest(params) {
26
168
  }
27
169
  __name(toSignedWebhookRequest, "toSignedWebhookRequest");
28
170
  export {
171
+ MEDIA_SAMPLES,
29
172
  PREVIEW_AUDIO_MIME_TYPE,
30
173
  PREVIEW_DISPLAY_PHONE_NUMBER,
31
174
  PREVIEW_PHONE_NUMBER_ID,
32
175
  PREVIEW_WABA_ID,
33
176
  buildInboundAudioPayload,
34
177
  buildInboundInteractivePayload,
178
+ buildInboundMediaPayload,
35
179
  buildInboundTextPayload,
180
+ findMediaSample,
181
+ readMediaSample,
36
182
  serializeWebhookPayload2 as serializeWebhookPayload,
37
183
  signWebhookPayload,
38
184
  toSignedWebhookRequest
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/testing/index.ts","../../src/testing/inboundPayloads.ts"],"sourcesContent":["/**\n * Export separado (`@adatechnology/meta-whatsapp-module/testing`) para que utilitário de\n * desenvolvimento não entre no grafo de import de quem só consome o módulo em produção.\n *\n * Os builders são reexportados dos contratos por conveniência de quem já depende do módulo\n * (scripts de CLI, `make test-msg`): quem monta payload no navegador deve importar direto de\n * `@adatechnology/meta-whatsapp-contracts/testing`, que não toca em `node:crypto`.\n */\n\nexport {\n buildInboundTextPayload,\n buildInboundInteractivePayload,\n buildInboundAudioPayload,\n serializeWebhookPayload,\n PREVIEW_PHONE_NUMBER_ID,\n PREVIEW_WABA_ID,\n PREVIEW_DISPLAY_PHONE_NUMBER,\n PREVIEW_AUDIO_MIME_TYPE,\n} from '@adatechnology/meta-whatsapp-contracts/testing'\n\nexport type {\n BuildInboundTextPayloadParams,\n BuildInboundInteractivePayloadParams,\n BuildInboundAudioPayloadParams,\n InteractiveReplyOption,\n} from '@adatechnology/meta-whatsapp-contracts/testing'\n\nexport { signWebhookPayload, toSignedWebhookRequest } from './inboundPayloads'\nexport type { SignWebhookPayloadParams, SignedWebhookRequest, ToSignedWebhookRequestParams } from './inboundPayloads'\n","/**\n * Assinatura de payload de preview no runtime do servidor. Os builders vivem em\n * `@adatechnology/meta-whatsapp-contracts/testing` porque precisam rodar também no navegador;\n * aqui fica só o que depende de `node:crypto`.\n *\n * Não existe bypass de assinatura em lugar nenhum: o preview bate na mesma rota, com a mesma\n * validação de HMAC de staging e produção. O que muda é apenas quem assina — a Meta lá, o app\n * secret local aqui.\n */\n\nimport { createHmac } from 'node:crypto'\nimport type { WhatsAppWebhookPayload } from '@adatechnology/meta-whatsapp-contracts'\nimport { serializeWebhookPayload } from '@adatechnology/meta-whatsapp-contracts/testing'\n\nexport type SignWebhookPayloadParams = {\n readonly rawBody: string\n readonly appSecret: string\n}\n\nexport function signWebhookPayload(params: SignWebhookPayloadParams): string {\n return `sha256=${createHmac('sha256', params.appSecret).update(params.rawBody).digest('hex')}`\n}\n\nexport type SignedWebhookRequest = {\n readonly rawBody: string\n readonly headers: Readonly<Record<string, string>>\n}\n\nexport type ToSignedWebhookRequestParams = {\n readonly payload: WhatsAppWebhookPayload\n readonly appSecret: string\n}\n\n/**\n * Devolve o corpo JÁ serializado junto da assinatura, porque a validação assina os bytes exatos:\n * quem serializar de novo antes de enviar (ou deixar o cliente HTTP serializar o objeto) muda\n * espaçamento/ordem e derruba a assinatura. Enviar `rawBody` como está é o contrato.\n */\nexport function toSignedWebhookRequest(params: ToSignedWebhookRequestParams): SignedWebhookRequest {\n const rawBody = serializeWebhookPayload(params.payload)\n\n return {\n rawBody,\n headers: {\n 'content-type': 'application/json',\n 'x-hub-signature-256': signWebhookPayload({ rawBody, appSecret: params.appSecret }),\n },\n }\n}\n"],"mappings":";;;;AASA,SACEA,yBACAC,gCACAC,0BACAC,2BAAAA,0BACAC,yBACAC,iBACAC,8BACAC,+BACK;;;ACRP,SAASC,kBAAkB;AAE3B,SAASC,+BAA+B;AAOjC,SAASC,mBAAmBC,QAAgC;AACjE,SAAO,UAAUC,WAAW,UAAUD,OAAOE,SAAS,EAAEC,OAAOH,OAAOI,OAAO,EAAEC,OAAO,KAAA,CAAA;AACxF;AAFgBN;AAmBT,SAASO,uBAAuBN,QAAoC;AACzE,QAAMI,UAAUG,wBAAwBP,OAAOQ,OAAO;AAEtD,SAAO;IACLJ;IACAK,SAAS;MACP,gBAAgB;MAChB,uBAAuBV,mBAAmB;QAAEK;QAASF,WAAWF,OAAOE;MAAU,CAAA;IACnF;EACF;AACF;AAVgBI;","names":["buildInboundTextPayload","buildInboundInteractivePayload","buildInboundAudioPayload","serializeWebhookPayload","PREVIEW_PHONE_NUMBER_ID","PREVIEW_WABA_ID","PREVIEW_DISPLAY_PHONE_NUMBER","PREVIEW_AUDIO_MIME_TYPE","createHmac","serializeWebhookPayload","signWebhookPayload","params","createHmac","appSecret","update","rawBody","digest","toSignedWebhookRequest","serializeWebhookPayload","payload","headers"]}
1
+ {"version":3,"sources":["../../src/testing/index.ts","../../src/testing/mediaSamples.ts","../../src/testing/inboundPayloads.ts"],"sourcesContent":["/**\n * Export separado (`@adatechnology/meta-whatsapp-module/testing`) para que utilitário de\n * desenvolvimento não entre no grafo de import de quem só consome o módulo em produção.\n *\n * Os builders são reexportados dos contratos por conveniência de quem já depende do módulo\n * (scripts de CLI, `make test-msg`): quem monta payload no navegador deve importar direto de\n * `@adatechnology/meta-whatsapp-contracts/testing`, que não toca em `node:crypto`.\n */\n\nexport {\n buildInboundTextPayload,\n buildInboundInteractivePayload,\n buildInboundAudioPayload,\n buildInboundMediaPayload,\n serializeWebhookPayload,\n PREVIEW_PHONE_NUMBER_ID,\n PREVIEW_WABA_ID,\n PREVIEW_DISPLAY_PHONE_NUMBER,\n PREVIEW_AUDIO_MIME_TYPE,\n} from '@adatechnology/meta-whatsapp-contracts/testing'\n\nexport type {\n BuildInboundTextPayloadParams,\n BuildInboundInteractivePayloadParams,\n BuildInboundAudioPayloadParams,\n BuildInboundMediaPayloadParams,\n InboundMediaType,\n InteractiveReplyOption,\n} from '@adatechnology/meta-whatsapp-contracts/testing'\n\nexport { MEDIA_SAMPLES, findMediaSample, readMediaSample } from './mediaSamples'\nexport type { MediaSample, MediaSampleName } from './mediaSamples'\n\nexport { signWebhookPayload, toSignedWebhookRequest } from './inboundPayloads'\nexport type { SignWebhookPayloadParams, SignedWebhookRequest, ToSignedWebhookRequestParams } from './inboundPayloads'\n","/**\n * Amostras binárias mínimas, uma por tipo de mídia que a Meta aceita.\n *\n * Existem porque payload de mídia sem bytes não exercita nada de verdade: quem semeia uma\n * biblioteca de documentos ou testa ingestão precisa de arquivo que o leitor do sistema\n * operacional consiga ABRIR. Um `.txt` rotulado `application/pdf` passa por toda a pilha e só\n * falha na frente do usuário, que é o único lugar onde não dá para corrigir.\n *\n * Por isso cada amostra é um arquivo legítimo do seu formato — mínimo, porém válido: o PDF abre\n * com uma página em branco, o XLSX abre com uma planilha vazia, o OGG toca silêncio.\n *\n * Vêm embutidas em base64, e não como arquivos no pacote, porque asset solto obrigaria o consumidor\n * a resolver caminho dentro de `node_modules` — que muda com bundler, com ESM/CJS e com pnpm. São\n * ~9 KB no total; o custo de embutir é menor que o de resolver caminho.\n */\n\nimport type { InboundMediaType } from '@adatechnology/meta-whatsapp-contracts/testing'\n\n/** Chave da amostra: o formato, não a extensão do arquivo. */\nexport type MediaSampleName =\n | 'pdf'\n | 'docx'\n | 'xlsx'\n | 'txt'\n | 'csv'\n | 'zip'\n | 'png'\n | 'jpeg'\n | 'webp'\n | 'mp4'\n | 'ogg'\n | 'm4a'\n | 'aac'\n | 'mp3'\n\nexport type MediaSample = {\n readonly name: MediaSampleName\n readonly mimeType: string\n /** Extensão sugerida para compor um nome de arquivo — sem o ponto. */\n readonly extension: string\n /**\n * Espécie com que a Meta entregaria essa mídia por padrão. É só o default: a mesma foto chega\n * como `image` quando enviada pela câmera e como `document` quando anexada pelo seletor de\n * arquivos, e o consumidor pode escolher a outra.\n */\n readonly mediaType: InboundMediaType\n readonly sizeBytes: number\n}\n\nconst SAMPLE_PDF_BASE64 =\n 'JVBERi0xLjQKMSAwIG9iajw8L1R5cGUvQ2F0YWxvZy9QYWdlcyAyIDAgUj4+ZW5kb2JqCjIgMCBvYmo8PC9UeXBlL1BhZ2Vz' +\n 'L0tpZHNbMyAwIFJdL0NvdW50IDE+PmVuZG9iagozIDAgb2JqPDwvVHlwZS9QYWdlL1BhcmVudCAyIDAgUi9NZWRpYUJveFsw' +\n 'IDAgMjYwIDExMF0vQ29udGVudHMgNCAwIFIvUmVzb3VyY2VzPDwvRm9udDw8L0YxIDUgMCBSPj4+Pj4+ZW5kb2JqCjQgMCBv' +\n 'Ymo8PC9MZW5ndGggNjI+PnN0cmVhbQpCVCAvRjEgMTMgVGYgMTggNTUgVGQgKERvY3VtZW50byBkZSBleGVtcGxvIGRvIHBy' +\n 'ZXZpZXcpIFRqIEVUCmVuZHN0cmVhbWVuZG9iago1IDAgb2JqPDwvVHlwZS9Gb250L1N1YnR5cGUvVHlwZTEvQmFzZUZvbnQv' +\n 'SGVsdmV0aWNhPj5lbmRvYmoKeHJlZgowIDYKMDAwMDAwMDAwMCA2NTUzNSBmIAowMDAwMDAwMDA5IDAwMDAwIG4gCjAwMDAw' +\n 'MDAwNTIgMDAwMDAgbiAKMDAwMDAwMDEwMSAwMDAwMCBuIAowMDAwMDAwMjExIDAwMDAwIG4gCjAwMDAwMDAzMTcgMDAwMDAg' +\n 'biAKdHJhaWxlcjw8L1NpemUgNi9Sb290IDEgMCBSPj4Kc3RhcnR4cmVmCjM3OAolJUVPRgo='\n\nconst SAMPLE_DOCX_BASE64 =\n 'UEsDBBQAAAAIANFO/Fx5bjPX6AAAAK0BAAATAAAAW0NvbnRlbnRfVHlwZXNdLnhtbH1QyU7DMBD9FWuuKHHggBCK0wPLETiU' +\n 'DxjZk8SqN3nc0v49Tlt6QIXjzFv1+tXeO7GjzDYGBbdtB4KCjsaGScHn+rV5AMEFg0EXAyk4EMNq6NeHRCyqNrCCuZT0KCXr' +\n 'mTxyGxOFiowxeyz1zJNMqDc4kbzrunupYygUSlMWDxj6Zxpx64p42df3qUcmxyCeTsQlSwGm5KzGUnG5C+ZXSnNOaKvyyOHZ' +\n 'Jr6pBJBXExbk74Cz7r0Ok60h8YG5vKGvLPkVs5Em6q2vyvZ/mys94zhaTRf94pZy1MRcF/euvSAebfjpL49zD99QSwMEFAAA' +\n 'AAgA0U78XJv9N+qtAAAAKQEAAAsAAABfcmVscy8ucmVsc43POw7CMAwG4KtE3mlaBoRQ0y4IqSsqB7ASN61oHkrCo7cnAwNF' +\n 'DIy2f3+W6/ZpZnanECdnBVRFCYysdGqyWsClP232wGJCq3B2lgQsFKFt6jPNmPJKHCcfWTZsFDCm5A+cRzmSwVg4TzZPBhcM' +\n 'plwGzT3KK2ri27Lc8fBpwNpknRIQOlUB6xdP/9huGCZJRydvhmz6ceIrkWUMmpKAhwuKq3e7yCzwpuarF5sXUEsDBBQAAAAI' +\n 'ANFO/FyraIuoqgAAAOcAAAARAAAAd29yZC9kb2N1bWVudC54bWxFjksOwjAMBa8SZU9TWCBUNWWBxAngAKExbaTGjpzQz+1J' +\n 'yoLNPFt+Grm9rn4SM3B0hFoeq1oKwJ6sw0HL5+N+uEgRk0FrJkLQcoMor127NJb6jwdMIgswNouWY0qhUSr2I3gTKwqA+fYm' +\n '9ibllQe1ENvA1EOM2e8ndarrs/LGoSzKF9mtZCjggtTdCBObRMKCgBV8mPJIIjDMDpZWlU4h7ww7fx71/7H7AlBLAQIUAxQA' +\n 'AAAIANFO/Fx5bjPX6AAAAK0BAAATAAAAAAAAAAAAAACAAQAAAABbQ29udGVudF9UeXBlc10ueG1sUEsBAhQDFAAAAAgA0U78' +\n 'XJv9N+qtAAAAKQEAAAsAAAAAAAAAAAAAAIABGQEAAF9yZWxzLy5yZWxzUEsBAhQDFAAAAAgA0U78XKtoi6iqAAAA5wAAABEA' +\n 'AAAAAAAAAAAAAIAB7wEAAHdvcmQvZG9jdW1lbnQueG1sUEsFBgAAAAADAAMAuQAAAMgCAAAAAA=='\n\nconst SAMPLE_XLSX_BASE64 =\n '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'\n\nconst SAMPLE_TXT_BASE64 = 'TGlzdGEgZGUgY29tcHJhcwotIGFycm96IDJrZwotIG9sZW8gMXVuCg=='\n\nconst SAMPLE_CSV_BASE64 = 'cHJvZHV0byxxdWFudGlkYWRlLHByZWNvCmFycm96LDIsMjQuOTAKb2xlbywxLDcuNTAK'\n\nconst SAMPLE_ZIP_BASE64 =\n 'UEsDBBQAAAAIANFO/FwtmGOxGwAAABkAAAARAAAAY29tcHJvdmFudGUtMS50eHRLzs8tKMovS8wrSVVISVUoSExPzE3NK8nn' +\n 'AgBQSwMEFAAAAAgA0U78XCftV8YWAAAAFAAAABEAAABjb21wcm92YW50ZS0yLnR4dCtOTS/NS8lXSM7PLSjKL0vMK0nlAgBQ' +\n 'SwECFAMUAAAACADRTvxcLZhjsRsAAAAZAAAAEQAAAAAAAAAAAAAAgAEAAAAAY29tcHJvdmFudGUtMS50eHRQSwECFAMUAAAA' +\n 'CADRTvxcJ+1XxhYAAAAUAAAAEQAAAAAAAAAAAAAAgAFKAAAAY29tcHJvdmFudGUtMi50eHRQSwUGAAAAAAIAAgB+AAAAjwAA' +\n 'AAAA'\n\nconst SAMPLE_PNG_BASE64 =\n 'iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAIAAADYYG7QAAAACXBIWXMAAAABAAAAAQBPJcTWAAAATElEQVR4nO3OMRHAIAAA' +\n 'MbhDWo2hCYPdu/xIh0RB5rPP+JN1O/AlVISKUBEqQkWoCBWhIlSEilARKkJFqAgVoSJUhIpQESpCRagIlRcgDwI25HmPQAAA' +\n 'AABJRU5ErkJggg=='\n\nconst SAMPLE_JPEG_BASE64 =\n '/9j/4AAQSkZJRgABAgAAAQABAAD//gAQTGF2YzYyLjExLjEwMAD/2wBDAAgEBAQEBAUFBQUFBQYGBgYGBgYGBgYGBgYHBwcI' +\n 'CAgHBwcGBgcHCAgICAkJCQgICAgJCQoKCgwMCwsODg4RERT/xABMAAEBAAAAAAAAAAAAAAAAAAAABAEBAQAAAAAAAAAAAAAA' +\n 'AAAAAAYQAQAAAAAAAAAAAAAAAAAAAAARAQAAAAAAAAAAAAAAAAAAAAD/wAARCAAwADADASIAAhEAAxEA/9oADAMBAAIRAxEA' +\n 'PwCUBRpwAAAAAAAAAAAAAAAB/9k='\n\nconst SAMPLE_WEBP_BASE64 = 'UklGRhoAAABXRUJQVlA4TA0AAAAvAAAAEAcQERGIiP4HAA=='\n\nconst SAMPLE_MP4_BASE64 =\n 'AAAAIGZ0eXBpc29tAAACAGlzb21pc28yYXZjMW1wNDEAAANdbW9vdgAAAGxtdmhkAAAAAAAAAAAAAAAAAAAD6AAAASwAAQAA' +\n 'AQAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA' +\n 'AAAAAgAAAoh0cmFrAAAAXHRraGQAAAADAAAAAAAAAAAAAAABAAAAAAAAASwAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAA' +\n 'AAAAAAABAAAAAAAAAAAAAAAAAABAAAAAAEAAAABAAAAAAAAkZWR0cwAAABxlbHN0AAAAAAAAAAEAAAEsAAAIAAABAAAAAAIA' +\n 'bWRpYQAAACBtZGhkAAAAAAAAAAAAAAAAAAAoAAAAEABVxAAAAAAALWhkbHIAAAAAAAAAAHZpZGUAAAAAAAAAAAAAAABWaWRl' +\n 'b0hhbmRsZXIAAAABq21pbmYAAAAUdm1oZAAAAAEAAAAAAAAAAAAAACRkaW5mAAAAHGRyZWYAAAAAAAAAAQAAAAx1cmwgAAAA' +\n 'AQAAAWtzdGJsAAAAv3N0c2QAAAAAAAAAAQAAAK9hdmMxAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAEAAQABIAAAASAAAAAAA' +\n 'AAABFUxhdmM2Mi4xMS4xMDAgbGlieDI2NAAAAAAAAAAAAAAAGP//AAAANWF2Y0MBZAAK/+EAGGdkAAqs2UQmwEQAAAMABAAA' +\n 'AwBQPEiWWAEABmjr48siwP34+AAAAAAQcGFzcAAAAAEAAAABAAAAFGJ0cnQAAAAAAABO2gAAAAAAAAAYc3R0cwAAAAAAAAAB' +\n 'AAAAAwAABAAAAAAUc3RzcwAAAAAAAAABAAAAAQAAAChjdHRzAAAAAAAAAAMAAAABAAAIAAAAAAEAAAwAAAAAAQAABAAAAAAc' +\n 'c3RzYwAAAAAAAAABAAAAAQAAAAMAAAABAAAAIHN0c3oAAAAAAAAAAAAAAAMAAALbAAAADgAAAAwAAAAUc3RjbwAAAAAAAAAB' +\n 'AAADjQAAAGF1ZHRhAAAAWW1ldGEAAAAAAAAAIWhkbHIAAAAAAAAAAG1kaXJhcHBsAAAAAAAAAAAAAAAALGlsc3QAAAAkqXRv' +\n 'bwAAABxkYXRhAAAAAQAAAABMYXZmNjIuMy4xMDAAAAAIZnJlZQAAAv1tZGF0AAACrgYF//+q3EXpvebZSLeWLNgg2SPu73gy' +\n 'NjQgLSBjb3JlIDE2NSByMzIyMiBiMzU2MDVhIC0gSC4yNjQvTVBFRy00IEFWQyBjb2RlYyAtIENvcHlsZWZ0IDIwMDMtMjAy' +\n 'NSAtIGh0dHA6Ly93d3cudmlkZW9sYW4ub3JnL3gyNjQuaHRtbCAtIG9wdGlvbnM6IGNhYmFjPTEgcmVmPTMgZGVibG9jaz0x' +\n 'OjA6MCBhbmFseXNlPTB4MzoweDExMyBtZT1oZXggc3VibWU9NyBwc3k9MSBwc3lfcmQ9MS4wMDowLjAwIG1peGVkX3JlZj0x' +\n 'IG1lX3JhbmdlPTE2IGNocm9tYV9tZT0xIHRyZWxsaXM9MSA4eDhkY3Q9MSBjcW09MCBkZWFkem9uZT0yMSwxMSBmYXN0X3Bz' +\n 'a2lwPTEgY2hyb21hX3FwX29mZnNldD0tMiB0aHJlYWRzPTIgbG9va2FoZWFkX3RocmVhZHM9MSBzbGljZWRfdGhyZWFkcz0w' +\n 'IG5yPTAgZGVjaW1hdGU9MSBpbnRlcmxhY2VkPTAgYmx1cmF5X2NvbXBhdD0wIGNvbnN0cmFpbmVkX2ludHJhPTAgYmZyYW1l' +\n 'cz0zIGJfcHlyYW1pZD0yIGJfYWRhcHQ9MSBiX2JpYXM9MCBkaXJlY3Q9MSB3ZWlnaHRiPTEgb3Blbl9nb3A9MCB3ZWlnaHRw' +\n 'PTIga2V5aW50PTI1MCBrZXlpbnRfbWluPTEwIHNjZW5lY3V0PTQwIGludHJhX3JlZnJlc2g9MCByY19sb29rYWhlYWQ9NDAg' +\n 'cmM9Y3JmIG1idHJlZT0xIGNyZj0yMy4wIHFjb21wPTAuNjAgcXBtaW49MCBxcG1heD02OSBxcHN0ZXA9NCBpcF9yYXRpbz0x' +\n 'LjQwIGFxPTE6MS4wMACAAAAAJWWIhAA///7mdfgUoKykhh+DdK6xVynnAWznTQ4fVSgMZ1FwY28AAAAKQZoibEN//qePiAAA' +\n 'AAgBnkF5Df8HfQ=='\n\nconst SAMPLE_OGG_BASE64 =\n 'T2dnUwACAAAAAAAAAABXDTmmAAAAAKMnDKEBE09wdXNIZWFkAQE4AYC7AAAAAABPZ2dTAAAAAAAAAAAAAFcNOaYBAAAAZlPu' +\n 'KwE9T3B1c1RhZ3MMAAAATGF2ZjYyLjMuMTAwAQAAAB0AAABlbmNvZGVyPUxhdmM2Mi4xMS4xMDAgbGlib3B1c09nZ1MABLgm' +\n 'AAAAAAAAVw05pgIAAAA3uL6lCw8REhISEhISEhISeAvkwTbsxY2MSUaZpCaweAfJcifhROpV8fDA1d3pUmB4B8l5yMlXwKIS' +\n 'I/rvZ/NkwOB4B8l5yMlXwKISI/rvZ/NkwOB4B8l5yMlXwKISI/rvZ/NkwOB4B8l5yMlXwKISI/rvZ/NkwOB4B8l5yMlXwKIS' +\n 'I/rvZ/NkwOB4B8l5yMlXwKISI/rvZ/NkwOB4B8l5yMlXwKISI/rvZ/NkwOB4B8l5yMlXwKISI/rvZ/NkwOB4B8l5yMlXwKIS' +\n 'I/rvZ/NkwOA='\n\nconst SAMPLE_M4A_BASE64 =\n 'AAAAHGZ0eXBNNEEgAAACAE00QSBpc29taXNvMgAAAAhmcmVlAAAAQW1kYXTeAgBMYXZjNjIuMTEuMTAwAAIwQA4BGCAHARgg' +\n 'BwEYIAcBGCAHARggBwEYIAcBGCAHARggBwEYIAcAAAMibW9vdgAAAGxtdmhkAAAAAAAAAAAAAAAAAAAD6AAAAMgAAQAAAQAA' +\n 'AAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA' +\n 'AgAAAk10cmFrAAAAXHRraGQAAAADAAAAAAAAAAAAAAABAAAAAAAAAMgAAAAAAAAAAAAAAAEBAAAAAAEAAAAAAAAAAAAAAAAA' +\n 'AAABAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAkZWR0cwAAABxlbHN0AAAAAAAAAAEAAADIAAAEAAABAAAAAAHFbWRp' +\n 'YQAAACBtZGhkAAAAAAAAAAAAAAAAAACsRAAAJnRVxAAAAAAALWhkbHIAAAAAAAAAAHNvdW4AAAAAAAAAAAAAAABTb3VuZEhh' +\n 'bmRsZXIAAAABcG1pbmYAAAAQc21oZAAAAAAAAAAAAAAAJGRpbmYAAAAcZHJlZgAAAAAAAAABAAAADHVybCAAAAABAAABNHN0' +\n 'YmwAAABqc3RzZAAAAAAAAAABAAAAWm1wNGEAAAAAAAAAAQAAAAAAAAAAAAEAEAAAAACsRAAAAAAANmVzZHMAAAAAA4CAgCUA' +\n 'AQAEgICAF0AVAAAAAAB9AAAAB/oFgICABRIIVuUABoCAgAECAAAAIHN0dHMAAAAAAAAAAgAAAAkAAAQAAAAAAQAAAnQAAAAc' +\n 'c3RzYwAAAAAAAAABAAAAAQAAAAoAAAABAAAAPHN0c3oAAAAAAAAAAAAAAAoAAAAVAAAABAAAAAQAAAAEAAAABAAAAAQAAAAE' +\n 'AAAABAAAAAQAAAAEAAAAFHN0Y28AAAAAAAAAAQAAACwAAAAac2dwZAEAAAByb2xsAAAAAgAAAAH//wAAABxzYmdwAAAAAHJv' +\n 'bGwAAAABAAAACgAAAAEAAABhdWR0YQAAAFltZXRhAAAAAAAAACFoZGxyAAAAAAAAAABtZGlyYXBwbAAAAAAAAAAAAAAAACxp' +\n 'bHN0AAAAJKl0b28AAAAcZGF0YQAAAAEAAAAATGF2ZjYyLjMuMTAw'\n\nconst SAMPLE_AAC_BASE64 =\n '//FQQAOf/N4CAExhdmM2Mi4xMS4xMDAAAjBADv/xUEABf/wBGCAH//FQQAF//AEYIAf/8VBAAX/8ARggB//xUEABf/wBGCAH' +\n '//FQQAF//AEYIAf/8VBAAX/8ARggB//xUEABf/wBGCAH//FQQAF//AEYIAf/8VBAAX/8ARggBw=='\n\nconst SAMPLE_MP3_BASE64 =\n 'SUQzBAAAAAAAIlRTU0UAAAAOAAADTGF2ZjYyLjMuMTAwAAAAAAAAAAAAAAD/40jAAAAAAAAAAAAASW5mbwAAAA8AAAAFAAAG' +\n 'wABVVVVVVVVVVVVVVVVVVVVVVVVVgICAgICAgICAgICAgICAgICAgICqqqqqqqqqqqqqqqqqqqqqqqqqqtXV1dXV1dXV1dXV' +\n '1dXV1dXV1dXV//////////////////////////8AAAAATGF2YzYyLjExAAAAAAAAAAAAAAAAJALAAAAAAAAABsDR4nNFAAAA' +\n 'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA' +\n 'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/40jEAAAAA0gAAAAATEFNRTMuMTAwVVVVVVVV' +\n 'VVVVVVVMQU1FMy4xMDBVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVV' +\n 'VVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVV' +\n 'VVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVV' +\n 'VVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVX/40jEAAAAA0gAAAAATEFNRTMuMTAwVVVVVVVV' +\n 'VVVVVVVMQU1FMy4xMDBVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVV' +\n 'VVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVV' +\n 'VVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVV' +\n 'VVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVX/40jEAAAAA0gAAAAATEFNRTMuMTAwVVVVVVVV' +\n 'VVVVVVVMQU1FMy4xMDBVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVV' +\n 'VVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVV' +\n 'VVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVV' +\n 'VVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVX/40jEAAAAA0gAAAAATEFNRTMuMTAwVVVVVVVV' +\n 'VVVVVVVMQU1FMy4xMDBVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVV' +\n 'VVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVV' +\n 'VVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVV' +\n 'VVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVX/40jEAAAAA0gAAAAATEFNRTMuMTAwVVVVVVVV' +\n 'VVVVVVVMQU1FMy4xMDBVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVV' +\n 'VVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVV' +\n 'VVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVV' +\n 'VVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVU='\n\nconst SAMPLE_BYTES: Readonly<Record<MediaSampleName, string>> = {\n pdf: SAMPLE_PDF_BASE64,\n docx: SAMPLE_DOCX_BASE64,\n xlsx: SAMPLE_XLSX_BASE64,\n txt: SAMPLE_TXT_BASE64,\n csv: SAMPLE_CSV_BASE64,\n zip: SAMPLE_ZIP_BASE64,\n png: SAMPLE_PNG_BASE64,\n jpeg: SAMPLE_JPEG_BASE64,\n webp: SAMPLE_WEBP_BASE64,\n mp4: SAMPLE_MP4_BASE64,\n ogg: SAMPLE_OGG_BASE64,\n m4a: SAMPLE_M4A_BASE64,\n aac: SAMPLE_AAC_BASE64,\n mp3: SAMPLE_MP3_BASE64,\n}\n\nexport const MEDIA_SAMPLES: readonly MediaSample[] = [\n { name: 'pdf', mimeType: 'application/pdf', extension: 'pdf', mediaType: 'document', sizeBytes: 557 },\n {\n name: 'docx',\n mimeType: 'application/vnd.openxmlformats-officedocument.wordprocessingml.document',\n extension: 'docx',\n mediaType: 'document',\n sizeBytes: 919,\n },\n {\n name: 'xlsx',\n mimeType: 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet',\n extension: 'xlsx',\n mediaType: 'document',\n sizeBytes: 1567,\n },\n { name: 'txt', mimeType: 'text/plain', extension: 'txt', mediaType: 'document', sizeBytes: 40 },\n { name: 'csv', mimeType: 'text/csv', extension: 'csv', mediaType: 'document', sizeBytes: 51 },\n { name: 'zip', mimeType: 'application/zip', extension: 'zip', mediaType: 'document', sizeBytes: 291 },\n { name: 'png', mimeType: 'image/png', extension: 'png', mediaType: 'image', sizeBytes: 154 },\n { name: 'jpeg', mimeType: 'image/jpeg', extension: 'jpg', mediaType: 'image', sizeBytes: 236 },\n { name: 'webp', mimeType: 'image/webp', extension: 'webp', mediaType: 'sticker', sizeBytes: 34 },\n { name: 'mp4', mimeType: 'video/mp4', extension: 'mp4', mediaType: 'video', sizeBytes: 1666 },\n { name: 'ogg', mimeType: 'audio/ogg; codecs=opus', extension: 'ogg', mediaType: 'audio', sizeBytes: 368 },\n { name: 'm4a', mimeType: 'audio/mp4', extension: 'm4a', mediaType: 'audio', sizeBytes: 903 },\n { name: 'aac', mimeType: 'audio/aac', extension: 'aac', mediaType: 'audio', sizeBytes: 127 },\n { name: 'mp3', mimeType: 'audio/mpeg', extension: 'mp3', mediaType: 'audio', sizeBytes: 1772 },\n]\n\n/**\n * Devolve uma cópia nova a cada chamada: quem recebe pode escrever no buffer sem contaminar a\n * próxima leitura da mesma amostra.\n */\nexport function readMediaSample(name: MediaSampleName): Buffer {\n return Buffer.from(SAMPLE_BYTES[name], 'base64')\n}\n\nexport function findMediaSample(name: MediaSampleName): MediaSample {\n const sample = MEDIA_SAMPLES.find((candidate) => candidate.name === name)\n if (!sample) throw new Error(`Amostra de mídia desconhecida: ${name}`)\n return sample\n}\n","/**\n * Assinatura de payload de preview no runtime do servidor. Os builders vivem em\n * `@adatechnology/meta-whatsapp-contracts/testing` porque precisam rodar também no navegador;\n * aqui fica só o que depende de `node:crypto`.\n *\n * Não existe bypass de assinatura em lugar nenhum: o preview bate na mesma rota, com a mesma\n * validação de HMAC de staging e produção. O que muda é apenas quem assina — a Meta lá, o app\n * secret local aqui.\n */\n\nimport { createHmac } from 'node:crypto'\nimport type { WhatsAppWebhookPayload } from '@adatechnology/meta-whatsapp-contracts'\nimport { serializeWebhookPayload } from '@adatechnology/meta-whatsapp-contracts/testing'\n\nexport type SignWebhookPayloadParams = {\n readonly rawBody: string\n readonly appSecret: string\n}\n\nexport function signWebhookPayload(params: SignWebhookPayloadParams): string {\n return `sha256=${createHmac('sha256', params.appSecret).update(params.rawBody).digest('hex')}`\n}\n\nexport type SignedWebhookRequest = {\n readonly rawBody: string\n readonly headers: Readonly<Record<string, string>>\n}\n\nexport type ToSignedWebhookRequestParams = {\n readonly payload: WhatsAppWebhookPayload\n readonly appSecret: string\n}\n\n/**\n * Devolve o corpo JÁ serializado junto da assinatura, porque a validação assina os bytes exatos:\n * quem serializar de novo antes de enviar (ou deixar o cliente HTTP serializar o objeto) muda\n * espaçamento/ordem e derruba a assinatura. Enviar `rawBody` como está é o contrato.\n */\nexport function toSignedWebhookRequest(params: ToSignedWebhookRequestParams): SignedWebhookRequest {\n const rawBody = serializeWebhookPayload(params.payload)\n\n return {\n rawBody,\n headers: {\n 'content-type': 'application/json',\n 'x-hub-signature-256': signWebhookPayload({ rawBody, appSecret: params.appSecret }),\n },\n }\n}\n"],"mappings":"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","names":["buildInboundTextPayload","buildInboundInteractivePayload","buildInboundAudioPayload","buildInboundMediaPayload","serializeWebhookPayload","PREVIEW_PHONE_NUMBER_ID","PREVIEW_WABA_ID","PREVIEW_DISPLAY_PHONE_NUMBER","PREVIEW_AUDIO_MIME_TYPE","SAMPLE_PDF_BASE64","SAMPLE_DOCX_BASE64","SAMPLE_XLSX_BASE64","SAMPLE_TXT_BASE64","SAMPLE_CSV_BASE64","SAMPLE_ZIP_BASE64","SAMPLE_PNG_BASE64","SAMPLE_JPEG_BASE64","SAMPLE_WEBP_BASE64","SAMPLE_MP4_BASE64","SAMPLE_OGG_BASE64","SAMPLE_M4A_BASE64","SAMPLE_AAC_BASE64","SAMPLE_MP3_BASE64","SAMPLE_BYTES","pdf","docx","xlsx","txt","csv","zip","png","jpeg","webp","mp4","ogg","m4a","aac","mp3","MEDIA_SAMPLES","name","mimeType","extension","mediaType","sizeBytes","readMediaSample","Buffer","from","findMediaSample","sample","find","candidate","Error","createHmac","serializeWebhookPayload","signWebhookPayload","params","createHmac","appSecret","update","rawBody","digest","toSignedWebhookRequest","serializeWebhookPayload","payload","headers"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@adatechnology/meta-whatsapp-module",
3
- "version": "0.2.0-rc.9",
3
+ "version": "0.2.0",
4
4
  "description": "Stateful conversation/flow module for WhatsApp — schema, migrations, repositories, and use-cases behind pluggable ports (Fase 3-5 of the meta-whatsapp trio)",
5
5
  "publishConfig": {
6
6
  "access": "public"
@@ -24,9 +24,9 @@
24
24
  "dist"
25
25
  ],
26
26
  "dependencies": {
27
- "@adatechnology/meta-graph-core": "0.2.0-rc.1",
28
- "@adatechnology/meta-whatsapp-contracts": "0.2.0-rc.3",
29
- "@adatechnology/meta-whatsapp-provider": "0.2.0-rc.2"
27
+ "@adatechnology/meta-graph-core": "0.2.0",
28
+ "@adatechnology/meta-whatsapp-provider": "0.2.0",
29
+ "@adatechnology/meta-whatsapp-contracts": "0.2.0"
30
30
  },
31
31
  "devDependencies": {
32
32
  "@types/bun": "1.3.14",