@adatechnology/meta-whatsapp-module 0.2.0-rc.8 → 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.
- package/dist/index.cjs +1762 -160
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +1759 -134
- package/dist/index.d.ts +1759 -134
- package/dist/index.js +1724 -155
- package/dist/index.js.map +1 -1
- package/dist/migrations/0005_message_moderation.sql +3 -0
- package/dist/migrations/0006_conversation_documents.sql +19 -0
- package/dist/migrations/0007_flow_media.sql +18 -0
- package/dist/migrations/0008_message_transcription.sql +5 -0
- package/dist/migrations/0009_settings_transcription_policy.sql +2 -0
- package/dist/migrations/0010_flow_media_meta_ids.sql +10 -0
- package/dist/migrations/meta/_journal.json +36 -1
- package/dist/testing/index.cjs +222 -0
- package/dist/testing/index.cjs.map +1 -0
- package/dist/testing/index.d.cts +74 -0
- package/dist/testing/index.d.ts +74 -0
- package/dist/testing/index.js +186 -0
- package/dist/testing/index.js.map +1 -0
- package/package.json +16 -4
|
@@ -0,0 +1,186 @@
|
|
|
1
|
+
var __defProp = Object.defineProperty;
|
|
2
|
+
var __name = (target, value) => __defProp(target, "name", { value, configurable: true });
|
|
3
|
+
|
|
4
|
+
// src/testing/index.ts
|
|
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");
|
|
148
|
+
|
|
149
|
+
// src/testing/inboundPayloads.ts
|
|
150
|
+
import { createHmac } from "crypto";
|
|
151
|
+
import { serializeWebhookPayload } from "@adatechnology/meta-whatsapp-contracts/testing";
|
|
152
|
+
function signWebhookPayload(params) {
|
|
153
|
+
return `sha256=${createHmac("sha256", params.appSecret).update(params.rawBody).digest("hex")}`;
|
|
154
|
+
}
|
|
155
|
+
__name(signWebhookPayload, "signWebhookPayload");
|
|
156
|
+
function toSignedWebhookRequest(params) {
|
|
157
|
+
const rawBody = serializeWebhookPayload(params.payload);
|
|
158
|
+
return {
|
|
159
|
+
rawBody,
|
|
160
|
+
headers: {
|
|
161
|
+
"content-type": "application/json",
|
|
162
|
+
"x-hub-signature-256": signWebhookPayload({
|
|
163
|
+
rawBody,
|
|
164
|
+
appSecret: params.appSecret
|
|
165
|
+
})
|
|
166
|
+
}
|
|
167
|
+
};
|
|
168
|
+
}
|
|
169
|
+
__name(toSignedWebhookRequest, "toSignedWebhookRequest");
|
|
170
|
+
export {
|
|
171
|
+
MEDIA_SAMPLES,
|
|
172
|
+
PREVIEW_AUDIO_MIME_TYPE,
|
|
173
|
+
PREVIEW_DISPLAY_PHONE_NUMBER,
|
|
174
|
+
PREVIEW_PHONE_NUMBER_ID,
|
|
175
|
+
PREVIEW_WABA_ID,
|
|
176
|
+
buildInboundAudioPayload,
|
|
177
|
+
buildInboundInteractivePayload,
|
|
178
|
+
buildInboundMediaPayload,
|
|
179
|
+
buildInboundTextPayload,
|
|
180
|
+
findMediaSample,
|
|
181
|
+
readMediaSample,
|
|
182
|
+
serializeWebhookPayload2 as serializeWebhookPayload,
|
|
183
|
+
signWebhookPayload,
|
|
184
|
+
toSignedWebhookRequest
|
|
185
|
+
};
|
|
186
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
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
|
|
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"
|
|
@@ -8,13 +8,25 @@
|
|
|
8
8
|
"type": "module",
|
|
9
9
|
"main": "dist/index.js",
|
|
10
10
|
"types": "dist/index.d.ts",
|
|
11
|
+
"exports": {
|
|
12
|
+
".": {
|
|
13
|
+
"types": "./dist/index.d.ts",
|
|
14
|
+
"import": "./dist/index.js",
|
|
15
|
+
"require": "./dist/index.cjs"
|
|
16
|
+
},
|
|
17
|
+
"./testing": {
|
|
18
|
+
"types": "./dist/testing/index.d.ts",
|
|
19
|
+
"import": "./dist/testing/index.js",
|
|
20
|
+
"require": "./dist/testing/index.cjs"
|
|
21
|
+
}
|
|
22
|
+
},
|
|
11
23
|
"files": [
|
|
12
24
|
"dist"
|
|
13
25
|
],
|
|
14
26
|
"dependencies": {
|
|
15
|
-
"@adatechnology/meta-graph-core": "0.2.0
|
|
16
|
-
"@adatechnology/meta-whatsapp-
|
|
17
|
-
"@adatechnology/meta-whatsapp-
|
|
27
|
+
"@adatechnology/meta-graph-core": "0.2.0",
|
|
28
|
+
"@adatechnology/meta-whatsapp-provider": "0.2.0",
|
|
29
|
+
"@adatechnology/meta-whatsapp-contracts": "0.2.0"
|
|
18
30
|
},
|
|
19
31
|
"devDependencies": {
|
|
20
32
|
"@types/bun": "1.3.14",
|