@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.
@@ -0,0 +1,19 @@
1
+ CREATE TABLE "meta_whatsapp"."documents" (
2
+ "id" uuid PRIMARY KEY DEFAULT gen_random_uuid() NOT NULL,
3
+ "company_id" uuid NOT NULL,
4
+ "session_id" uuid NOT NULL,
5
+ "message_id" uuid,
6
+ "upload_id" varchar(256) NOT NULL,
7
+ "filename" varchar(512) NOT NULL,
8
+ "mime_type" varchar(128) NOT NULL,
9
+ "size_bytes" integer NOT NULL,
10
+ "sha256" varchar(64),
11
+ "source" varchar(12) NOT NULL,
12
+ "linked_at" timestamp with time zone DEFAULT now() NOT NULL
13
+ );
14
+ --> statement-breakpoint
15
+ ALTER TABLE "meta_whatsapp"."documents" ADD CONSTRAINT "documents_session_id_sessions_id_fk" FOREIGN KEY ("session_id") REFERENCES "meta_whatsapp"."sessions"("id") ON DELETE cascade ON UPDATE no action;--> statement-breakpoint
16
+ ALTER TABLE "meta_whatsapp"."documents" ADD CONSTRAINT "documents_message_id_messages_id_fk" FOREIGN KEY ("message_id") REFERENCES "meta_whatsapp"."messages"("id") ON DELETE set null ON UPDATE no action;--> statement-breakpoint
17
+ CREATE INDEX "idx_documents_session_linked" ON "meta_whatsapp"."documents" ("session_id","linked_at");--> statement-breakpoint
18
+ CREATE INDEX "idx_documents_company_linked" ON "meta_whatsapp"."documents" ("company_id","linked_at");--> statement-breakpoint
19
+ CREATE UNIQUE INDEX "idx_documents_company_upload" ON "meta_whatsapp"."documents" ("company_id","upload_id");
@@ -0,0 +1,18 @@
1
+ CREATE TABLE "meta_whatsapp"."flow_media" (
2
+ "id" uuid PRIMARY KEY DEFAULT gen_random_uuid() NOT NULL,
3
+ "company_id" uuid NOT NULL,
4
+ "flow_key" varchar(64) NOT NULL,
5
+ "node_id" varchar(64) NOT NULL,
6
+ "upload_id" varchar(256) NOT NULL,
7
+ "filename" varchar(512) NOT NULL,
8
+ "mime_type" varchar(128) NOT NULL,
9
+ "size_bytes" integer NOT NULL,
10
+ "caption" text,
11
+ "sort_order" integer DEFAULT 0 NOT NULL,
12
+ "active" boolean DEFAULT true NOT NULL,
13
+ "created_at" timestamp with time zone DEFAULT now() NOT NULL,
14
+ "updated_at" timestamp with time zone DEFAULT now() NOT NULL
15
+ );
16
+ --> statement-breakpoint
17
+ CREATE INDEX "idx_flow_media_node" ON "meta_whatsapp"."flow_media" ("company_id","flow_key","node_id","sort_order");--> statement-breakpoint
18
+ CREATE UNIQUE INDEX "idx_flow_media_node_upload" ON "meta_whatsapp"."flow_media" ("company_id","flow_key","node_id","upload_id");
@@ -0,0 +1,5 @@
1
+ ALTER TABLE "meta_whatsapp"."messages" ADD COLUMN "transcription_status" varchar(16);--> statement-breakpoint
2
+ ALTER TABLE "meta_whatsapp"."messages" ADD COLUMN "transcription_text" text;--> statement-breakpoint
3
+ ALTER TABLE "meta_whatsapp"."messages" ADD COLUMN "transcription_language" varchar(32);--> statement-breakpoint
4
+ ALTER TABLE "meta_whatsapp"."messages" ADD COLUMN "transcription_engine" varchar(32);--> statement-breakpoint
5
+ CREATE INDEX "idx_messages_transcription_pending" ON "meta_whatsapp"."messages" ("company_id","created_at") WHERE "transcription_status" = 'pending';
@@ -0,0 +1,2 @@
1
+ ALTER TABLE "meta_whatsapp"."settings" ADD COLUMN "transcription_enabled" boolean;--> statement-breakpoint
2
+ ALTER TABLE "meta_whatsapp"."settings" ADD COLUMN "transcription_mode" varchar(16);
@@ -0,0 +1,10 @@
1
+ -- Reaproveitamento do arquivo já subido para a Meta.
2
+ --
3
+ -- Sem isto o mesmo binário subia de novo para cada cliente que passava por um nó `send_media`. A
4
+ -- Meta aceita reusar o `media_id` por 30 dias; o mapa é por `phone_number_id` porque o id é
5
+ -- escopado ao número remetente, e uma instalação com dois números mandaria o id de um pelo outro.
6
+ --
7
+ -- Aditiva com default: linha existente passa a ter mapa vazio e cai no caminho de subir o binário,
8
+ -- que é exatamente o comportamento anterior.
9
+ ALTER TABLE meta_whatsapp.flow_media
10
+ ADD COLUMN IF NOT EXISTS meta_media_ids JSONB NOT NULL DEFAULT '{}'::jsonb;
@@ -43,6 +43,34 @@
43
43
  "when": 1785176501657,
44
44
  "tag": "0005_message_moderation",
45
45
  "breakpoints": true
46
+ },
47
+ {
48
+ "idx": 6,
49
+ "version": "7",
50
+ "when": 1785189349276,
51
+ "tag": "0006_conversation_documents",
52
+ "breakpoints": true
53
+ },
54
+ {
55
+ "idx": 7,
56
+ "version": "7",
57
+ "when": 1785276000000,
58
+ "tag": "0007_flow_media",
59
+ "breakpoints": true
60
+ },
61
+ {
62
+ "idx": 8,
63
+ "version": "7",
64
+ "when": 1785471336000,
65
+ "tag": "0008_message_transcription",
66
+ "breakpoints": true
67
+ },
68
+ {
69
+ "idx": 9,
70
+ "version": "7",
71
+ "when": 1785471337000,
72
+ "tag": "0009_settings_transcription_policy",
73
+ "breakpoints": true
46
74
  }
47
75
  ]
48
76
  }
@@ -21,13 +21,17 @@ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: tru
21
21
  // src/testing/index.ts
22
22
  var testing_exports = {};
23
23
  __export(testing_exports, {
24
+ MEDIA_SAMPLES: () => MEDIA_SAMPLES,
24
25
  PREVIEW_AUDIO_MIME_TYPE: () => import_testing2.PREVIEW_AUDIO_MIME_TYPE,
25
26
  PREVIEW_DISPLAY_PHONE_NUMBER: () => import_testing2.PREVIEW_DISPLAY_PHONE_NUMBER,
26
27
  PREVIEW_PHONE_NUMBER_ID: () => import_testing2.PREVIEW_PHONE_NUMBER_ID,
27
28
  PREVIEW_WABA_ID: () => import_testing2.PREVIEW_WABA_ID,
28
29
  buildInboundAudioPayload: () => import_testing2.buildInboundAudioPayload,
29
30
  buildInboundInteractivePayload: () => import_testing2.buildInboundInteractivePayload,
31
+ buildInboundMediaPayload: () => import_testing2.buildInboundMediaPayload,
30
32
  buildInboundTextPayload: () => import_testing2.buildInboundTextPayload,
33
+ findMediaSample: () => findMediaSample,
34
+ readMediaSample: () => readMediaSample,
31
35
  serializeWebhookPayload: () => import_testing2.serializeWebhookPayload,
32
36
  signWebhookPayload: () => signWebhookPayload,
33
37
  toSignedWebhookRequest: () => toSignedWebhookRequest
@@ -35,6 +39,148 @@ __export(testing_exports, {
35
39
  module.exports = __toCommonJS(testing_exports);
36
40
  var import_testing2 = require("@adatechnology/meta-whatsapp-contracts/testing");
37
41
 
42
+ // src/testing/mediaSamples.ts
43
+ var SAMPLE_PDF_BASE64 = "JVBERi0xLjQKMSAwIG9iajw8L1R5cGUvQ2F0YWxvZy9QYWdlcyAyIDAgUj4+ZW5kb2JqCjIgMCBvYmo8PC9UeXBlL1BhZ2VzL0tpZHNbMyAwIFJdL0NvdW50IDE+PmVuZG9iagozIDAgb2JqPDwvVHlwZS9QYWdlL1BhcmVudCAyIDAgUi9NZWRpYUJveFswIDAgMjYwIDExMF0vQ29udGVudHMgNCAwIFIvUmVzb3VyY2VzPDwvRm9udDw8L0YxIDUgMCBSPj4+Pj4+ZW5kb2JqCjQgMCBvYmo8PC9MZW5ndGggNjI+PnN0cmVhbQpCVCAvRjEgMTMgVGYgMTggNTUgVGQgKERvY3VtZW50byBkZSBleGVtcGxvIGRvIHByZXZpZXcpIFRqIEVUCmVuZHN0cmVhbWVuZG9iago1IDAgb2JqPDwvVHlwZS9Gb250L1N1YnR5cGUvVHlwZTEvQmFzZUZvbnQvSGVsdmV0aWNhPj5lbmRvYmoKeHJlZgowIDYKMDAwMDAwMDAwMCA2NTUzNSBmIAowMDAwMDAwMDA5IDAwMDAwIG4gCjAwMDAwMDAwNTIgMDAwMDAgbiAKMDAwMDAwMDEwMSAwMDAwMCBuIAowMDAwMDAwMjExIDAwMDAwIG4gCjAwMDAwMDAzMTcgMDAwMDAgbiAKdHJhaWxlcjw8L1NpemUgNi9Sb290IDEgMCBSPj4Kc3RhcnR4cmVmCjM3OAolJUVPRgo=";
44
+ 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==";
45
+ var SAMPLE_XLSX_BASE64 = "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";
46
+ var SAMPLE_TXT_BASE64 = "TGlzdGEgZGUgY29tcHJhcwotIGFycm96IDJrZwotIG9sZW8gMXVuCg==";
47
+ var SAMPLE_CSV_BASE64 = "cHJvZHV0byxxdWFudGlkYWRlLHByZWNvCmFycm96LDIsMjQuOTAKb2xlbywxLDcuNTAK";
48
+ var SAMPLE_ZIP_BASE64 = "UEsDBBQAAAAIANFO/FwtmGOxGwAAABkAAAARAAAAY29tcHJvdmFudGUtMS50eHRLzs8tKMovS8wrSVVISVUoSExPzE3NK8nnAgBQSwMEFAAAAAgA0U78XCftV8YWAAAAFAAAABEAAABjb21wcm92YW50ZS0yLnR4dCtOTS/NS8lXSM7PLSjKL0vMK0nlAgBQSwECFAMUAAAACADRTvxcLZhjsRsAAAAZAAAAEQAAAAAAAAAAAAAAgAEAAAAAY29tcHJvdmFudGUtMS50eHRQSwECFAMUAAAACADRTvxcJ+1XxhYAAAAUAAAAEQAAAAAAAAAAAAAAgAFKAAAAY29tcHJvdmFudGUtMi50eHRQSwUGAAAAAAIAAgB+AAAAjwAAAAAA";
49
+ var SAMPLE_PNG_BASE64 = "iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAIAAADYYG7QAAAACXBIWXMAAAABAAAAAQBPJcTWAAAATElEQVR4nO3OMRHAIAAAMbhDWo2hCYPdu/xIh0RB5rPP+JN1O/AlVISKUBEqQkWoCBWhIlSEilARKkJFqAgVoSJUhIpQESpCRagIlRcgDwI25HmPQAAAAABJRU5ErkJggg==";
50
+ var SAMPLE_JPEG_BASE64 = "/9j/4AAQSkZJRgABAgAAAQABAAD//gAQTGF2YzYyLjExLjEwMAD/2wBDAAgEBAQEBAUFBQUFBQYGBgYGBgYGBgYGBgYHBwcICAgHBwcGBgcHCAgICAkJCQgICAgJCQoKCgwMCwsODg4RERT/xABMAAEBAAAAAAAAAAAAAAAAAAAABAEBAQAAAAAAAAAAAAAAAAAAAAYQAQAAAAAAAAAAAAAAAAAAAAARAQAAAAAAAAAAAAAAAAAAAAD/wAARCAAwADADASIAAhEAAxEA/9oADAMBAAIRAxEAPwCUBRpwAAAAAAAAAAAAAAAB/9k=";
51
+ var SAMPLE_WEBP_BASE64 = "UklGRhoAAABXRUJQVlA4TA0AAAAvAAAAEAcQERGIiP4HAA==";
52
+ var SAMPLE_MP4_BASE64 = "AAAAIGZ0eXBpc29tAAACAGlzb21pc28yYXZjMW1wNDEAAANdbW9vdgAAAGxtdmhkAAAAAAAAAAAAAAAAAAAD6AAAASwAAQAAAQAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAoh0cmFrAAAAXHRraGQAAAADAAAAAAAAAAAAAAABAAAAAAAAASwAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAABAAAAAAEAAAABAAAAAAAAkZWR0cwAAABxlbHN0AAAAAAAAAAEAAAEsAAAIAAABAAAAAAIAbWRpYQAAACBtZGhkAAAAAAAAAAAAAAAAAAAoAAAAEABVxAAAAAAALWhkbHIAAAAAAAAAAHZpZGUAAAAAAAAAAAAAAABWaWRlb0hhbmRsZXIAAAABq21pbmYAAAAUdm1oZAAAAAEAAAAAAAAAAAAAACRkaW5mAAAAHGRyZWYAAAAAAAAAAQAAAAx1cmwgAAAAAQAAAWtzdGJsAAAAv3N0c2QAAAAAAAAAAQAAAK9hdmMxAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAEAAQABIAAAASAAAAAAAAAABFUxhdmM2Mi4xMS4xMDAgbGlieDI2NAAAAAAAAAAAAAAAGP//AAAANWF2Y0MBZAAK/+EAGGdkAAqs2UQmwEQAAAMABAAAAwBQPEiWWAEABmjr48siwP34+AAAAAAQcGFzcAAAAAEAAAABAAAAFGJ0cnQAAAAAAABO2gAAAAAAAAAYc3R0cwAAAAAAAAABAAAAAwAABAAAAAAUc3RzcwAAAAAAAAABAAAAAQAAAChjdHRzAAAAAAAAAAMAAAABAAAIAAAAAAEAAAwAAAAAAQAABAAAAAAcc3RzYwAAAAAAAAABAAAAAQAAAAMAAAABAAAAIHN0c3oAAAAAAAAAAAAAAAMAAALbAAAADgAAAAwAAAAUc3RjbwAAAAAAAAABAAADjQAAAGF1ZHRhAAAAWW1ldGEAAAAAAAAAIWhkbHIAAAAAAAAAAG1kaXJhcHBsAAAAAAAAAAAAAAAALGlsc3QAAAAkqXRvbwAAABxkYXRhAAAAAQAAAABMYXZmNjIuMy4xMDAAAAAIZnJlZQAAAv1tZGF0AAACrgYF//+q3EXpvebZSLeWLNgg2SPu73gyNjQgLSBjb3JlIDE2NSByMzIyMiBiMzU2MDVhIC0gSC4yNjQvTVBFRy00IEFWQyBjb2RlYyAtIENvcHlsZWZ0IDIwMDMtMjAyNSAtIGh0dHA6Ly93d3cudmlkZW9sYW4ub3JnL3gyNjQuaHRtbCAtIG9wdGlvbnM6IGNhYmFjPTEgcmVmPTMgZGVibG9jaz0xOjA6MCBhbmFseXNlPTB4MzoweDExMyBtZT1oZXggc3VibWU9NyBwc3k9MSBwc3lfcmQ9MS4wMDowLjAwIG1peGVkX3JlZj0xIG1lX3JhbmdlPTE2IGNocm9tYV9tZT0xIHRyZWxsaXM9MSA4eDhkY3Q9MSBjcW09MCBkZWFkem9uZT0yMSwxMSBmYXN0X3Bza2lwPTEgY2hyb21hX3FwX29mZnNldD0tMiB0aHJlYWRzPTIgbG9va2FoZWFkX3RocmVhZHM9MSBzbGljZWRfdGhyZWFkcz0wIG5yPTAgZGVjaW1hdGU9MSBpbnRlcmxhY2VkPTAgYmx1cmF5X2NvbXBhdD0wIGNvbnN0cmFpbmVkX2ludHJhPTAgYmZyYW1lcz0zIGJfcHlyYW1pZD0yIGJfYWRhcHQ9MSBiX2JpYXM9MCBkaXJlY3Q9MSB3ZWlnaHRiPTEgb3Blbl9nb3A9MCB3ZWlnaHRwPTIga2V5aW50PTI1MCBrZXlpbnRfbWluPTEwIHNjZW5lY3V0PTQwIGludHJhX3JlZnJlc2g9MCByY19sb29rYWhlYWQ9NDAgcmM9Y3JmIG1idHJlZT0xIGNyZj0yMy4wIHFjb21wPTAuNjAgcXBtaW49MCBxcG1heD02OSBxcHN0ZXA9NCBpcF9yYXRpbz0xLjQwIGFxPTE6MS4wMACAAAAAJWWIhAA///7mdfgUoKykhh+DdK6xVynnAWznTQ4fVSgMZ1FwY28AAAAKQZoibEN//qePiAAAAAgBnkF5Df8HfQ==";
53
+ var SAMPLE_OGG_BASE64 = "T2dnUwACAAAAAAAAAABXDTmmAAAAAKMnDKEBE09wdXNIZWFkAQE4AYC7AAAAAABPZ2dTAAAAAAAAAAAAAFcNOaYBAAAAZlPuKwE9T3B1c1RhZ3MMAAAATGF2ZjYyLjMuMTAwAQAAAB0AAABlbmNvZGVyPUxhdmM2Mi4xMS4xMDAgbGlib3B1c09nZ1MABLgmAAAAAAAAVw05pgIAAAA3uL6lCw8REhISEhISEhISeAvkwTbsxY2MSUaZpCaweAfJcifhROpV8fDA1d3pUmB4B8l5yMlXwKISI/rvZ/NkwOB4B8l5yMlXwKISI/rvZ/NkwOB4B8l5yMlXwKISI/rvZ/NkwOB4B8l5yMlXwKISI/rvZ/NkwOB4B8l5yMlXwKISI/rvZ/NkwOB4B8l5yMlXwKISI/rvZ/NkwOB4B8l5yMlXwKISI/rvZ/NkwOB4B8l5yMlXwKISI/rvZ/NkwOB4B8l5yMlXwKISI/rvZ/NkwOA=";
54
+ var SAMPLE_M4A_BASE64 = "AAAAHGZ0eXBNNEEgAAACAE00QSBpc29taXNvMgAAAAhmcmVlAAAAQW1kYXTeAgBMYXZjNjIuMTEuMTAwAAIwQA4BGCAHARggBwEYIAcBGCAHARggBwEYIAcBGCAHARggBwEYIAcAAAMibW9vdgAAAGxtdmhkAAAAAAAAAAAAAAAAAAAD6AAAAMgAAQAAAQAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAk10cmFrAAAAXHRraGQAAAADAAAAAAAAAAAAAAABAAAAAAAAAMgAAAAAAAAAAAAAAAEBAAAAAAEAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAkZWR0cwAAABxlbHN0AAAAAAAAAAEAAADIAAAEAAABAAAAAAHFbWRpYQAAACBtZGhkAAAAAAAAAAAAAAAAAACsRAAAJnRVxAAAAAAALWhkbHIAAAAAAAAAAHNvdW4AAAAAAAAAAAAAAABTb3VuZEhhbmRsZXIAAAABcG1pbmYAAAAQc21oZAAAAAAAAAAAAAAAJGRpbmYAAAAcZHJlZgAAAAAAAAABAAAADHVybCAAAAABAAABNHN0YmwAAABqc3RzZAAAAAAAAAABAAAAWm1wNGEAAAAAAAAAAQAAAAAAAAAAAAEAEAAAAACsRAAAAAAANmVzZHMAAAAAA4CAgCUAAQAEgICAF0AVAAAAAAB9AAAAB/oFgICABRIIVuUABoCAgAECAAAAIHN0dHMAAAAAAAAAAgAAAAkAAAQAAAAAAQAAAnQAAAAcc3RzYwAAAAAAAAABAAAAAQAAAAoAAAABAAAAPHN0c3oAAAAAAAAAAAAAAAoAAAAVAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAAFHN0Y28AAAAAAAAAAQAAACwAAAAac2dwZAEAAAByb2xsAAAAAgAAAAH//wAAABxzYmdwAAAAAHJvbGwAAAABAAAACgAAAAEAAABhdWR0YQAAAFltZXRhAAAAAAAAACFoZGxyAAAAAAAAAABtZGlyYXBwbAAAAAAAAAAAAAAAACxpbHN0AAAAJKl0b28AAAAcZGF0YQAAAAEAAAAATGF2ZjYyLjMuMTAw";
55
+ var SAMPLE_AAC_BASE64 = "//FQQAOf/N4CAExhdmM2Mi4xMS4xMDAAAjBADv/xUEABf/wBGCAH//FQQAF//AEYIAf/8VBAAX/8ARggB//xUEABf/wBGCAH//FQQAF//AEYIAf/8VBAAX/8ARggB//xUEABf/wBGCAH//FQQAF//AEYIAf/8VBAAX/8ARggBw==";
56
+ var SAMPLE_MP3_BASE64 = "SUQzBAAAAAAAIlRTU0UAAAAOAAADTGF2ZjYyLjMuMTAwAAAAAAAAAAAAAAD/40jAAAAAAAAAAAAASW5mbwAAAA8AAAAFAAAGwABVVVVVVVVVVVVVVVVVVVVVVVVVgICAgICAgICAgICAgICAgICAgICqqqqqqqqqqqqqqqqqqqqqqqqqqtXV1dXV1dXV1dXV1dXV1dXV1dXV//////////////////////////8AAAAATGF2YzYyLjExAAAAAAAAAAAAAAAAJALAAAAAAAAABsDR4nNFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/40jEAAAAA0gAAAAATEFNRTMuMTAwVVVVVVVVVVVVVVVMQU1FMy4xMDBVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVX/40jEAAAAA0gAAAAATEFNRTMuMTAwVVVVVVVVVVVVVVVMQU1FMy4xMDBVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVX/40jEAAAAA0gAAAAATEFNRTMuMTAwVVVVVVVVVVVVVVVMQU1FMy4xMDBVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVX/40jEAAAAA0gAAAAATEFNRTMuMTAwVVVVVVVVVVVVVVVMQU1FMy4xMDBVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVX/40jEAAAAA0gAAAAATEFNRTMuMTAwVVVVVVVVVVVVVVVMQU1FMy4xMDBVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVU=";
57
+ var SAMPLE_BYTES = {
58
+ pdf: SAMPLE_PDF_BASE64,
59
+ docx: SAMPLE_DOCX_BASE64,
60
+ xlsx: SAMPLE_XLSX_BASE64,
61
+ txt: SAMPLE_TXT_BASE64,
62
+ csv: SAMPLE_CSV_BASE64,
63
+ zip: SAMPLE_ZIP_BASE64,
64
+ png: SAMPLE_PNG_BASE64,
65
+ jpeg: SAMPLE_JPEG_BASE64,
66
+ webp: SAMPLE_WEBP_BASE64,
67
+ mp4: SAMPLE_MP4_BASE64,
68
+ ogg: SAMPLE_OGG_BASE64,
69
+ m4a: SAMPLE_M4A_BASE64,
70
+ aac: SAMPLE_AAC_BASE64,
71
+ mp3: SAMPLE_MP3_BASE64
72
+ };
73
+ var MEDIA_SAMPLES = [
74
+ {
75
+ name: "pdf",
76
+ mimeType: "application/pdf",
77
+ extension: "pdf",
78
+ mediaType: "document",
79
+ sizeBytes: 557
80
+ },
81
+ {
82
+ name: "docx",
83
+ mimeType: "application/vnd.openxmlformats-officedocument.wordprocessingml.document",
84
+ extension: "docx",
85
+ mediaType: "document",
86
+ sizeBytes: 919
87
+ },
88
+ {
89
+ name: "xlsx",
90
+ mimeType: "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet",
91
+ extension: "xlsx",
92
+ mediaType: "document",
93
+ sizeBytes: 1567
94
+ },
95
+ {
96
+ name: "txt",
97
+ mimeType: "text/plain",
98
+ extension: "txt",
99
+ mediaType: "document",
100
+ sizeBytes: 40
101
+ },
102
+ {
103
+ name: "csv",
104
+ mimeType: "text/csv",
105
+ extension: "csv",
106
+ mediaType: "document",
107
+ sizeBytes: 51
108
+ },
109
+ {
110
+ name: "zip",
111
+ mimeType: "application/zip",
112
+ extension: "zip",
113
+ mediaType: "document",
114
+ sizeBytes: 291
115
+ },
116
+ {
117
+ name: "png",
118
+ mimeType: "image/png",
119
+ extension: "png",
120
+ mediaType: "image",
121
+ sizeBytes: 154
122
+ },
123
+ {
124
+ name: "jpeg",
125
+ mimeType: "image/jpeg",
126
+ extension: "jpg",
127
+ mediaType: "image",
128
+ sizeBytes: 236
129
+ },
130
+ {
131
+ name: "webp",
132
+ mimeType: "image/webp",
133
+ extension: "webp",
134
+ mediaType: "sticker",
135
+ sizeBytes: 34
136
+ },
137
+ {
138
+ name: "mp4",
139
+ mimeType: "video/mp4",
140
+ extension: "mp4",
141
+ mediaType: "video",
142
+ sizeBytes: 1666
143
+ },
144
+ {
145
+ name: "ogg",
146
+ mimeType: "audio/ogg; codecs=opus",
147
+ extension: "ogg",
148
+ mediaType: "audio",
149
+ sizeBytes: 368
150
+ },
151
+ {
152
+ name: "m4a",
153
+ mimeType: "audio/mp4",
154
+ extension: "m4a",
155
+ mediaType: "audio",
156
+ sizeBytes: 903
157
+ },
158
+ {
159
+ name: "aac",
160
+ mimeType: "audio/aac",
161
+ extension: "aac",
162
+ mediaType: "audio",
163
+ sizeBytes: 127
164
+ },
165
+ {
166
+ name: "mp3",
167
+ mimeType: "audio/mpeg",
168
+ extension: "mp3",
169
+ mediaType: "audio",
170
+ sizeBytes: 1772
171
+ }
172
+ ];
173
+ function readMediaSample(name) {
174
+ return Buffer.from(SAMPLE_BYTES[name], "base64");
175
+ }
176
+ __name(readMediaSample, "readMediaSample");
177
+ function findMediaSample(name) {
178
+ const sample = MEDIA_SAMPLES.find((candidate) => candidate.name === name);
179
+ if (!sample) throw new Error(`Amostra de m\xEDdia desconhecida: ${name}`);
180
+ return sample;
181
+ }
182
+ __name(findMediaSample, "findMediaSample");
183
+
38
184
  // src/testing/inboundPayloads.ts
39
185
  var import_node_crypto = require("crypto");
40
186
  var import_testing = require("@adatechnology/meta-whatsapp-contracts/testing");
@@ -58,13 +204,17 @@ function toSignedWebhookRequest(params) {
58
204
  __name(toSignedWebhookRequest, "toSignedWebhookRequest");
59
205
  // Annotate the CommonJS export names for ESM import in node:
60
206
  0 && (module.exports = {
207
+ MEDIA_SAMPLES,
61
208
  PREVIEW_AUDIO_MIME_TYPE,
62
209
  PREVIEW_DISPLAY_PHONE_NUMBER,
63
210
  PREVIEW_PHONE_NUMBER_ID,
64
211
  PREVIEW_WABA_ID,
65
212
  buildInboundAudioPayload,
66
213
  buildInboundInteractivePayload,
214
+ buildInboundMediaPayload,
67
215
  buildInboundTextPayload,
216
+ findMediaSample,
217
+ readMediaSample,
68
218
  serializeWebhookPayload,
69
219
  signWebhookPayload,
70
220
  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":";;;;;;;;;;;;;;;;;;;;;AAAA;;;;;;;;;;;;;;AASA,IAAAA,kBASO;;;ACRP,yBAA2B;AAE3B,qBAAwC;AAOjC,SAASC,mBAAmBC,QAAgC;AACjE,SAAO,cAAUC,+BAAW,UAAUD,OAAOE,SAAS,EAAEC,OAAOH,OAAOI,OAAO,EAAEC,OAAO,KAAA,CAAA;AACxF;AAFgBN;AAmBT,SAASO,uBAAuBN,QAAoC;AACzE,QAAMI,cAAUG,wCAAwBP,OAAOQ,OAAO;AAEtD,SAAO;IACLJ;IACAK,SAAS;MACP,gBAAgB;MAChB,uBAAuBV,mBAAmB;QAAEK;QAASF,WAAWF,OAAOE;MAAU,CAAA;IACnF;EACF;AACF;AAVgBI;","names":["import_testing","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":";;;;;;;;;;;;;;;;;;;;;AAAA;;;;;;;;;;;;;;;;;;AASA,IAAAA,kBAUO;;;AC8BP,IAAMC,oBACJ;AASF,IAAMC,qBACJ;AAcF,IAAMC,qBACJ;AAuBF,IAAMC,oBAAoB;AAE1B,IAAMC,oBAAoB;AAE1B,IAAMC,oBACJ;AAMF,IAAMC,oBACJ;AAIF,IAAMC,qBACJ;AAKF,IAAMC,qBAAqB;AAE3B,IAAMC,oBACJ;AAyBF,IAAMC,oBACJ;AAOF,IAAMC,oBACJ;AAcF,IAAMC,oBACJ;AAGF,IAAMC,oBACJ;AA0BF,IAAMC,eAA0D;EAC9DC,KAAKf;EACLgB,MAAMf;EACNgB,MAAMf;EACNgB,KAAKf;EACLgB,KAAKf;EACLgB,KAAKf;EACLgB,KAAKf;EACLgB,MAAMf;EACNgB,MAAMf;EACNgB,KAAKf;EACLgB,KAAKf;EACLgB,KAAKf;EACLgB,KAAKf;EACLgB,KAAKf;AACP;AAEO,IAAMgB,gBAAwC;EACnD;IAAEC,MAAM;IAAOC,UAAU;IAAmBC,WAAW;IAAOC,WAAW;IAAYC,WAAW;EAAI;EACpG;IACEJ,MAAM;IACNC,UAAU;IACVC,WAAW;IACXC,WAAW;IACXC,WAAW;EACb;EACA;IACEJ,MAAM;IACNC,UAAU;IACVC,WAAW;IACXC,WAAW;IACXC,WAAW;EACb;EACA;IAAEJ,MAAM;IAAOC,UAAU;IAAcC,WAAW;IAAOC,WAAW;IAAYC,WAAW;EAAG;EAC9F;IAAEJ,MAAM;IAAOC,UAAU;IAAYC,WAAW;IAAOC,WAAW;IAAYC,WAAW;EAAG;EAC5F;IAAEJ,MAAM;IAAOC,UAAU;IAAmBC,WAAW;IAAOC,WAAW;IAAYC,WAAW;EAAI;EACpG;IAAEJ,MAAM;IAAOC,UAAU;IAAaC,WAAW;IAAOC,WAAW;IAASC,WAAW;EAAI;EAC3F;IAAEJ,MAAM;IAAQC,UAAU;IAAcC,WAAW;IAAOC,WAAW;IAASC,WAAW;EAAI;EAC7F;IAAEJ,MAAM;IAAQC,UAAU;IAAcC,WAAW;IAAQC,WAAW;IAAWC,WAAW;EAAG;EAC/F;IAAEJ,MAAM;IAAOC,UAAU;IAAaC,WAAW;IAAOC,WAAW;IAASC,WAAW;EAAK;EAC5F;IAAEJ,MAAM;IAAOC,UAAU;IAA0BC,WAAW;IAAOC,WAAW;IAASC,WAAW;EAAI;EACxG;IAAEJ,MAAM;IAAOC,UAAU;IAAaC,WAAW;IAAOC,WAAW;IAASC,WAAW;EAAI;EAC3F;IAAEJ,MAAM;IAAOC,UAAU;IAAaC,WAAW;IAAOC,WAAW;IAASC,WAAW;EAAI;EAC3F;IAAEJ,MAAM;IAAOC,UAAU;IAAcC,WAAW;IAAOC,WAAW;IAASC,WAAW;EAAK;;AAOxF,SAASC,gBAAgBL,MAAqB;AACnD,SAAOM,OAAOC,KAAKvB,aAAagB,IAAAA,GAAO,QAAA;AACzC;AAFgBK;AAIT,SAASG,gBAAgBR,MAAqB;AACnD,QAAMS,SAASV,cAAcW,KAAK,CAACC,cAAcA,UAAUX,SAASA,IAAAA;AACpE,MAAI,CAACS,OAAQ,OAAM,IAAIG,MAAM,qCAAkCZ,IAAAA,EAAM;AACrE,SAAOS;AACT;AAJgBD;;;ACtPhB,yBAA2B;AAE3B,qBAAwC;AAOjC,SAASK,mBAAmBC,QAAgC;AACjE,SAAO,cAAUC,+BAAW,UAAUD,OAAOE,SAAS,EAAEC,OAAOH,OAAOI,OAAO,EAAEC,OAAO,KAAA,CAAA;AACxF;AAFgBN;AAmBT,SAASO,uBAAuBN,QAAoC;AACzE,QAAMI,cAAUG,wCAAwBP,OAAOQ,OAAO;AAEtD,SAAO;IACLJ;IACAK,SAAS;MACP,gBAAgB;MAChB,uBAAuBV,mBAAmB;QAAEK;QAASF,WAAWF,OAAOE;MAAU,CAAA;IACnF;EACF;AACF;AAVgBI;","names":["import_testing","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","signWebhookPayload","params","createHmac","appSecret","update","rawBody","digest","toSignedWebhookRequest","serializeWebhookPayload","payload","headers"]}
@@ -1,6 +1,46 @@
1
- export { BuildInboundAudioPayloadParams, BuildInboundInteractivePayloadParams, BuildInboundTextPayloadParams, InteractiveReplyOption, PREVIEW_AUDIO_MIME_TYPE, PREVIEW_DISPLAY_PHONE_NUMBER, PREVIEW_PHONE_NUMBER_ID, PREVIEW_WABA_ID, buildInboundAudioPayload, buildInboundInteractivePayload, buildInboundTextPayload, serializeWebhookPayload } from '@adatechnology/meta-whatsapp-contracts/testing';
1
+ import { InboundMediaType } from '@adatechnology/meta-whatsapp-contracts/testing';
2
+ export { BuildInboundAudioPayloadParams, BuildInboundInteractivePayloadParams, BuildInboundMediaPayloadParams, BuildInboundTextPayloadParams, InboundMediaType, InteractiveReplyOption, PREVIEW_AUDIO_MIME_TYPE, PREVIEW_DISPLAY_PHONE_NUMBER, PREVIEW_PHONE_NUMBER_ID, PREVIEW_WABA_ID, buildInboundAudioPayload, buildInboundInteractivePayload, buildInboundMediaPayload, buildInboundTextPayload, serializeWebhookPayload } from '@adatechnology/meta-whatsapp-contracts/testing';
2
3
  import { WhatsAppWebhookPayload } from '@adatechnology/meta-whatsapp-contracts';
3
4
 
5
+ /**
6
+ * Amostras binárias mínimas, uma por tipo de mídia que a Meta aceita.
7
+ *
8
+ * Existem porque payload de mídia sem bytes não exercita nada de verdade: quem semeia uma
9
+ * biblioteca de documentos ou testa ingestão precisa de arquivo que o leitor do sistema
10
+ * operacional consiga ABRIR. Um `.txt` rotulado `application/pdf` passa por toda a pilha e só
11
+ * falha na frente do usuário, que é o único lugar onde não dá para corrigir.
12
+ *
13
+ * Por isso cada amostra é um arquivo legítimo do seu formato — mínimo, porém válido: o PDF abre
14
+ * com uma página em branco, o XLSX abre com uma planilha vazia, o OGG toca silêncio.
15
+ *
16
+ * Vêm embutidas em base64, e não como arquivos no pacote, porque asset solto obrigaria o consumidor
17
+ * a resolver caminho dentro de `node_modules` — que muda com bundler, com ESM/CJS e com pnpm. São
18
+ * ~9 KB no total; o custo de embutir é menor que o de resolver caminho.
19
+ */
20
+
21
+ /** Chave da amostra: o formato, não a extensão do arquivo. */
22
+ type MediaSampleName = 'pdf' | 'docx' | 'xlsx' | 'txt' | 'csv' | 'zip' | 'png' | 'jpeg' | 'webp' | 'mp4' | 'ogg' | 'm4a' | 'aac' | 'mp3';
23
+ type MediaSample = {
24
+ readonly name: MediaSampleName;
25
+ readonly mimeType: string;
26
+ /** Extensão sugerida para compor um nome de arquivo — sem o ponto. */
27
+ readonly extension: string;
28
+ /**
29
+ * Espécie com que a Meta entregaria essa mídia por padrão. É só o default: a mesma foto chega
30
+ * como `image` quando enviada pela câmera e como `document` quando anexada pelo seletor de
31
+ * arquivos, e o consumidor pode escolher a outra.
32
+ */
33
+ readonly mediaType: InboundMediaType;
34
+ readonly sizeBytes: number;
35
+ };
36
+ declare const MEDIA_SAMPLES: readonly MediaSample[];
37
+ /**
38
+ * Devolve uma cópia nova a cada chamada: quem recebe pode escrever no buffer sem contaminar a
39
+ * próxima leitura da mesma amostra.
40
+ */
41
+ declare function readMediaSample(name: MediaSampleName): Buffer;
42
+ declare function findMediaSample(name: MediaSampleName): MediaSample;
43
+
4
44
  /**
5
45
  * Assinatura de payload de preview no runtime do servidor. Os builders vivem em
6
46
  * `@adatechnology/meta-whatsapp-contracts/testing` porque precisam rodar também no navegador;
@@ -31,4 +71,4 @@ type ToSignedWebhookRequestParams = {
31
71
  */
32
72
  declare function toSignedWebhookRequest(params: ToSignedWebhookRequestParams): SignedWebhookRequest;
33
73
 
34
- export { type SignWebhookPayloadParams, type SignedWebhookRequest, type ToSignedWebhookRequestParams, signWebhookPayload, toSignedWebhookRequest };
74
+ export { MEDIA_SAMPLES, type MediaSample, type MediaSampleName, type SignWebhookPayloadParams, type SignedWebhookRequest, type ToSignedWebhookRequestParams, findMediaSample, readMediaSample, signWebhookPayload, toSignedWebhookRequest };
@@ -1,6 +1,46 @@
1
- export { BuildInboundAudioPayloadParams, BuildInboundInteractivePayloadParams, BuildInboundTextPayloadParams, InteractiveReplyOption, PREVIEW_AUDIO_MIME_TYPE, PREVIEW_DISPLAY_PHONE_NUMBER, PREVIEW_PHONE_NUMBER_ID, PREVIEW_WABA_ID, buildInboundAudioPayload, buildInboundInteractivePayload, buildInboundTextPayload, serializeWebhookPayload } from '@adatechnology/meta-whatsapp-contracts/testing';
1
+ import { InboundMediaType } from '@adatechnology/meta-whatsapp-contracts/testing';
2
+ export { BuildInboundAudioPayloadParams, BuildInboundInteractivePayloadParams, BuildInboundMediaPayloadParams, BuildInboundTextPayloadParams, InboundMediaType, InteractiveReplyOption, PREVIEW_AUDIO_MIME_TYPE, PREVIEW_DISPLAY_PHONE_NUMBER, PREVIEW_PHONE_NUMBER_ID, PREVIEW_WABA_ID, buildInboundAudioPayload, buildInboundInteractivePayload, buildInboundMediaPayload, buildInboundTextPayload, serializeWebhookPayload } from '@adatechnology/meta-whatsapp-contracts/testing';
2
3
  import { WhatsAppWebhookPayload } from '@adatechnology/meta-whatsapp-contracts';
3
4
 
5
+ /**
6
+ * Amostras binárias mínimas, uma por tipo de mídia que a Meta aceita.
7
+ *
8
+ * Existem porque payload de mídia sem bytes não exercita nada de verdade: quem semeia uma
9
+ * biblioteca de documentos ou testa ingestão precisa de arquivo que o leitor do sistema
10
+ * operacional consiga ABRIR. Um `.txt` rotulado `application/pdf` passa por toda a pilha e só
11
+ * falha na frente do usuário, que é o único lugar onde não dá para corrigir.
12
+ *
13
+ * Por isso cada amostra é um arquivo legítimo do seu formato — mínimo, porém válido: o PDF abre
14
+ * com uma página em branco, o XLSX abre com uma planilha vazia, o OGG toca silêncio.
15
+ *
16
+ * Vêm embutidas em base64, e não como arquivos no pacote, porque asset solto obrigaria o consumidor
17
+ * a resolver caminho dentro de `node_modules` — que muda com bundler, com ESM/CJS e com pnpm. São
18
+ * ~9 KB no total; o custo de embutir é menor que o de resolver caminho.
19
+ */
20
+
21
+ /** Chave da amostra: o formato, não a extensão do arquivo. */
22
+ type MediaSampleName = 'pdf' | 'docx' | 'xlsx' | 'txt' | 'csv' | 'zip' | 'png' | 'jpeg' | 'webp' | 'mp4' | 'ogg' | 'm4a' | 'aac' | 'mp3';
23
+ type MediaSample = {
24
+ readonly name: MediaSampleName;
25
+ readonly mimeType: string;
26
+ /** Extensão sugerida para compor um nome de arquivo — sem o ponto. */
27
+ readonly extension: string;
28
+ /**
29
+ * Espécie com que a Meta entregaria essa mídia por padrão. É só o default: a mesma foto chega
30
+ * como `image` quando enviada pela câmera e como `document` quando anexada pelo seletor de
31
+ * arquivos, e o consumidor pode escolher a outra.
32
+ */
33
+ readonly mediaType: InboundMediaType;
34
+ readonly sizeBytes: number;
35
+ };
36
+ declare const MEDIA_SAMPLES: readonly MediaSample[];
37
+ /**
38
+ * Devolve uma cópia nova a cada chamada: quem recebe pode escrever no buffer sem contaminar a
39
+ * próxima leitura da mesma amostra.
40
+ */
41
+ declare function readMediaSample(name: MediaSampleName): Buffer;
42
+ declare function findMediaSample(name: MediaSampleName): MediaSample;
43
+
4
44
  /**
5
45
  * Assinatura de payload de preview no runtime do servidor. Os builders vivem em
6
46
  * `@adatechnology/meta-whatsapp-contracts/testing` porque precisam rodar também no navegador;
@@ -31,4 +71,4 @@ type ToSignedWebhookRequestParams = {
31
71
  */
32
72
  declare function toSignedWebhookRequest(params: ToSignedWebhookRequestParams): SignedWebhookRequest;
33
73
 
34
- export { type SignWebhookPayloadParams, type SignedWebhookRequest, type ToSignedWebhookRequestParams, signWebhookPayload, toSignedWebhookRequest };
74
+ export { MEDIA_SAMPLES, type MediaSample, type MediaSampleName, type SignWebhookPayloadParams, type SignedWebhookRequest, type ToSignedWebhookRequestParams, findMediaSample, readMediaSample, signWebhookPayload, toSignedWebhookRequest };