meta-cloud-api 3.10.2 → 3.11.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.d.mts +76 -9
- package/dist/index.d.mts.map +1 -1
- package/dist/index.mjs +2 -2
- package/dist/index.mjs.map +1 -1
- package/dist/node/index.d.mts +76 -9
- package/dist/node/index.d.mts.map +1 -1
- package/dist/node/index.mjs +2 -2
- package/dist/node/index.mjs.map +1 -1
- package/dist/testing/index.js +1 -1
- package/dist/testing/index.js.map +1 -1
- package/dist/testing/node/index.js +1 -1
- package/dist/types/index.d.ts +16 -3
- package/dist/types/index.d.ts.map +1 -1
- package/dist/utils/index.d.ts +152 -1
- package/dist/utils/index.d.ts.map +1 -1
- package/dist/utils/index.js +4 -4
- package/dist/utils/index.js.map +1 -1
- package/dist/utils/node/index.d.ts +152 -1
- package/dist/utils/node/index.d.ts.map +1 -1
- package/dist/utils/node/index.js +4 -4
- package/dist/utils/node/index.js.map +1 -1
- package/package.json +2 -2
|
@@ -485,6 +485,157 @@ declare class Logger implements LoggerInterface {
|
|
|
485
485
|
debug(...data: any[]): void;
|
|
486
486
|
}
|
|
487
487
|
//#endregion
|
|
488
|
+
//#region src/core/webhook/types/common.d.ts
|
|
489
|
+
/**
|
|
490
|
+
* Error object structure
|
|
491
|
+
*/
|
|
492
|
+
interface WebhookError {
|
|
493
|
+
code: number;
|
|
494
|
+
title: string;
|
|
495
|
+
message: string;
|
|
496
|
+
error_data?: {
|
|
497
|
+
details: string;
|
|
498
|
+
};
|
|
499
|
+
href?: string;
|
|
500
|
+
}
|
|
501
|
+
//#endregion
|
|
502
|
+
//#region src/core/webhook/types/status.d.ts
|
|
503
|
+
interface StatusWebhook {
|
|
504
|
+
id: string;
|
|
505
|
+
status: 'sent' | 'delivered' | 'read' | 'failed';
|
|
506
|
+
timestamp: string;
|
|
507
|
+
recipient_id: string;
|
|
508
|
+
recipient_type?: 'group';
|
|
509
|
+
recipient_participant_id?: string;
|
|
510
|
+
recipient_identity_key_hash?: string;
|
|
511
|
+
biz_opaque_callback_data?: string;
|
|
512
|
+
/**
|
|
513
|
+
* ID of the template used to send a Direct Send message.
|
|
514
|
+
* Present only on statuses for messages sent with a `category` field.
|
|
515
|
+
*
|
|
516
|
+
* @see {@link https://developers.facebook.com/documentation/business-messaging/whatsapp/direct-send/supported-message-types | Direct Send}
|
|
517
|
+
*/
|
|
518
|
+
template_id?: string;
|
|
519
|
+
conversation?: {
|
|
520
|
+
id: string;
|
|
521
|
+
expiration_timestamp?: string;
|
|
522
|
+
origin: {
|
|
523
|
+
type: 'authentication' | 'authentication_international' | 'marketing' | 'marketing_lite' | 'referral_conversion' | 'service' | 'utility';
|
|
524
|
+
};
|
|
525
|
+
};
|
|
526
|
+
pricing?: {
|
|
527
|
+
/**
|
|
528
|
+
* Whether the message is billable.
|
|
529
|
+
*
|
|
530
|
+
* Meta will deprecate this property in a future versioned release; use
|
|
531
|
+
* `type` and `category` together to decide whether a message is billable
|
|
532
|
+
* and, if so, at which rate.
|
|
533
|
+
*/
|
|
534
|
+
billable: boolean; /** `CBP` only appears on webhooks sent before July 1, 2025. */
|
|
535
|
+
pricing_model: 'CBP' | 'PMP';
|
|
536
|
+
/**
|
|
537
|
+
* Pricing type. Semantics change with the October 1, 2026 service and
|
|
538
|
+
* utility pricing update (documented September 10, 2026):
|
|
539
|
+
* - `regular` — billable. From October 1, 2026 this also covers 1:1
|
|
540
|
+
* utility messages sent inside an open customer service window, group
|
|
541
|
+
* utility messages inside an open group customer service window, and
|
|
542
|
+
* 1:1 and group service messages sent after the business phone
|
|
543
|
+
* number's free tier is used up.
|
|
544
|
+
* - `free_customer_service` — through September 30, 2026, a utility
|
|
545
|
+
* template or non-template message sent inside a customer service
|
|
546
|
+
* window; from October 1, 2026, a 1:1 service delivery inside the
|
|
547
|
+
* business phone number's free tier.
|
|
548
|
+
* - `free_entry_point` — message sent inside an open free entry point
|
|
549
|
+
* window. Since September 28, 2026 the window may stay open for up to
|
|
550
|
+
* 7 days (previously 72 hours).
|
|
551
|
+
* - `free_group_customer_service` — through September 30, 2026, a group
|
|
552
|
+
* utility or non-template message delivered inside an open group
|
|
553
|
+
* customer service window; from October 1, 2026, a group service
|
|
554
|
+
* delivery inside the business phone number's free tier.
|
|
555
|
+
*
|
|
556
|
+
* From October 1, 2026 reaction messages are the only service message
|
|
557
|
+
* type that is never charged and do not count toward the free tier, and
|
|
558
|
+
* eligible governments and non-profits keep service messages free beyond
|
|
559
|
+
* the tier through December 31, 2027. Those exempt deliveries keep
|
|
560
|
+
* `free_customer_service` / `free_group_customer_service` here and are
|
|
561
|
+
* identified by `subtype: 'paid_exempt'`, not by this value.
|
|
562
|
+
*/
|
|
563
|
+
type: 'regular' | 'free_customer_service' | 'free_entry_point' | 'free_group_customer_service';
|
|
564
|
+
/**
|
|
565
|
+
* Pricing subtype (added October 12, 2026). Only included for service
|
|
566
|
+
* messages that are free because the organization is eligible for the
|
|
567
|
+
* pricing policy for eligible governments and non-profits:
|
|
568
|
+
* - `paid_exempt` — the service message is free under that policy.
|
|
569
|
+
*
|
|
570
|
+
* Absent on every other status, including ordinary free-tier service
|
|
571
|
+
* deliveries.
|
|
572
|
+
*
|
|
573
|
+
* @see {@link https://developers.facebook.com/documentation/business-messaging/whatsapp/pricing#service-pricing-policy-for-eligible-governments-and-non-profits | Pricing policy for eligible governments and non-profits}
|
|
574
|
+
*/
|
|
575
|
+
subtype?: 'paid_exempt';
|
|
576
|
+
/**
|
|
577
|
+
* Pricing category (rate) applied if billable.
|
|
578
|
+
*
|
|
579
|
+
* Note the hyphen in `authentication-international`: Meta documents the
|
|
580
|
+
* pricing category with a hyphen, unlike the `conversation.origin.type`
|
|
581
|
+
* value `authentication_international`. The underscored spelling is kept
|
|
582
|
+
* for payloads that still use it.
|
|
583
|
+
*/
|
|
584
|
+
category: 'authentication' | 'authentication-international' | 'authentication_international' | 'group_marketing' | 'group_service' | 'group_utility' | 'marketing' | 'marketing_lite' | 'referral_conversion' | 'service' | 'utility';
|
|
585
|
+
};
|
|
586
|
+
errors?: Array<WebhookError>;
|
|
587
|
+
}
|
|
588
|
+
//#endregion
|
|
589
|
+
//#region src/utils/messageStatus.d.ts
|
|
590
|
+
/** Status reported by a message status webhook (`statuses[].status`). */
|
|
591
|
+
type MessageDeliveryStatus = StatusWebhook['status'];
|
|
592
|
+
/**
|
|
593
|
+
* Orders two message statuses by delivery progress: `sent` < `failed` < `delivered` < `read`.
|
|
594
|
+
* Statuses the SDK does not know rank below `sent`.
|
|
595
|
+
*
|
|
596
|
+
* Returns a negative number when `a` is earlier than `b`, a positive number when it is later, and
|
|
597
|
+
* `0` when they are at the same stage. Usable as an `Array.prototype.sort` comparator.
|
|
598
|
+
*
|
|
599
|
+
* @example
|
|
600
|
+
* ```ts
|
|
601
|
+
* compareMessageStatus('delivered', 'read'); // < 0
|
|
602
|
+
* ```
|
|
603
|
+
*/
|
|
604
|
+
declare function compareMessageStatus(a: MessageDeliveryStatus | (string & {}), b: MessageDeliveryStatus | (string & {})): number;
|
|
605
|
+
/**
|
|
606
|
+
* Whether storing `incoming` over `current` moves the message forward. True when nothing is stored
|
|
607
|
+
* yet; false for a repeat of the same status or a late, earlier one.
|
|
608
|
+
*
|
|
609
|
+
* Use it to skip the database write for a stale webhook.
|
|
610
|
+
*/
|
|
611
|
+
declare function isMessageStatusAdvance(current: MessageDeliveryStatus | (string & {}) | null | undefined, incoming: MessageDeliveryStatus | (string & {})): boolean;
|
|
612
|
+
/**
|
|
613
|
+
* Returns the status to store when a status webhook arrives for a message whose stored status is
|
|
614
|
+
* `current`. The result never moves backwards.
|
|
615
|
+
*
|
|
616
|
+
* Meta does not guarantee the order of status webhooks. `sent`, `delivered` and `read` for the same
|
|
617
|
+
* message often arrive within a second of each other, and `read` can arrive before `delivered`.
|
|
618
|
+
* Writing every webhook as it comes turns a read message back into a delivered one (grey ticks
|
|
619
|
+
* instead of blue). Resolve each update through this function instead:
|
|
620
|
+
*
|
|
621
|
+
* - `sent` → `read` → `delivered` resolves to `read`
|
|
622
|
+
* - `sent` → `failed` resolves to `failed`; `read` → `failed` stays `read`
|
|
623
|
+
* - with no stored status (`null`/`undefined`), the incoming status is taken as-is
|
|
624
|
+
* - an unknown incoming status never replaces a known one
|
|
625
|
+
*
|
|
626
|
+
* @example
|
|
627
|
+
* ```ts
|
|
628
|
+
* handler.processor.onStatus(async (_whatsapp, { status }) => {
|
|
629
|
+
* const row = await db.messages.find(status.id);
|
|
630
|
+
* const next = resolveMessageStatus(row?.status, status.status);
|
|
631
|
+
* if (next !== row?.status) await db.messages.update(status.id, { status: next });
|
|
632
|
+
* });
|
|
633
|
+
* ```
|
|
634
|
+
*
|
|
635
|
+
* @see {@link https://developers.facebook.com/documentation/business-messaging/whatsapp/webhooks/reference/messages/status/ | Status messages webhook reference}
|
|
636
|
+
*/
|
|
637
|
+
declare function resolveMessageStatus<T extends MessageDeliveryStatus | (string & {})>(current: T | null | undefined, incoming: T): T;
|
|
638
|
+
//#endregion
|
|
488
639
|
//#region src/utils/objectToQueryString.d.ts
|
|
489
640
|
declare const objectToQueryString: (params: Record<string, any>) => string;
|
|
490
641
|
//#endregion
|
|
@@ -678,5 +829,5 @@ declare function isFlowErrorRequest(request: FlowEndpointRequest): request is Fl
|
|
|
678
829
|
*/
|
|
679
830
|
declare function isFlowPingRequest(request: FlowEndpointRequest): request is FlowHealthCheckRequest;
|
|
680
831
|
//#endregion
|
|
681
|
-
export { AUTHORIZATION_ERROR_CODES, type ApiPermissionErrorCode, BLOCK_USER_ERROR_CODES, type BusinessUseCaseUsage, CALLING_ERROR_CODES, CUSTOMER_SERVICE_WINDOW_MS, type CustomerServiceWindowOptions, type DecryptedFlowRequest, type EncryptionKeyPair, FLOW_ERROR_CODES, FREE_ENTRY_POINT_WINDOW_MS, type FreeEntryPointWindowOptions, GROUP_ERROR_CODES, INTEGRITY_ERROR_CODES, Logger, MAX_FREE_ENTRY_POINT_WINDOW_MS, type MessagingWindow, type MetaError, type MetaErrorData, type RateLimitHeadersInput, type RateLimitInfo, type RateLimitUsage, SEND_MESSAGE_ERROR_CODES, THROTTLING_ERROR_CODES, WHATSAPP_ERROR_CODES, WhatsAppApiError, WhatsAppAuthorizationError, WhatsAppBlockUserError, WhatsAppCallingError, WhatsAppError, type WhatsAppErrorCode, WhatsAppFlowError, WhatsAppGroupError, WhatsAppIntegrityError, WhatsAppNetworkError, WhatsAppSendMessageError, WhatsAppThrottlingError, WhatsAppUnknownError, WhatsAppValidationError, type WindowTimestamp, buildFieldsQueryString, canSendFreeformMessage, createWhatsAppApiError, decryptFlowRequest, decryptFlowRequestAsync, encryptFlowResponse, encryptFlowResponseAsync, formatConfigTable, generateEncryption, getCustomerServiceWindow, getFreeEntryPointWindow, isApiPermissionErrorCode, isAuthorizationErrorCode, isBlockUserErrorCode, isCallingErrorCode, isFlowDataExchangeRequest, isFlowErrorCode, isFlowErrorRequest, isFlowPingRequest, isGroupErrorCode, isIntegrityErrorCode, isMetaError, isSendMessageErrorCode, isThrottlingErrorCode, isWhatsAppApiErrorResponse, isWhatsAppAuthorizationError, isWhatsAppBlockUserError, isWhatsAppCallingError, isWhatsAppErrorCode, isWhatsAppFlowError, isWhatsAppGroupError, isWhatsAppIntegrityError, isWhatsAppSendMessageError, isWhatsAppThrottlingError, normalizeMetaError, objectToQueryString, parseRateLimitHeaders, parseRetryAfter };
|
|
832
|
+
export { AUTHORIZATION_ERROR_CODES, type ApiPermissionErrorCode, BLOCK_USER_ERROR_CODES, type BusinessUseCaseUsage, CALLING_ERROR_CODES, CUSTOMER_SERVICE_WINDOW_MS, type CustomerServiceWindowOptions, type DecryptedFlowRequest, type EncryptionKeyPair, FLOW_ERROR_CODES, FREE_ENTRY_POINT_WINDOW_MS, type FreeEntryPointWindowOptions, GROUP_ERROR_CODES, INTEGRITY_ERROR_CODES, Logger, MAX_FREE_ENTRY_POINT_WINDOW_MS, type MessageDeliveryStatus, type MessagingWindow, type MetaError, type MetaErrorData, type RateLimitHeadersInput, type RateLimitInfo, type RateLimitUsage, SEND_MESSAGE_ERROR_CODES, THROTTLING_ERROR_CODES, WHATSAPP_ERROR_CODES, WhatsAppApiError, WhatsAppAuthorizationError, WhatsAppBlockUserError, WhatsAppCallingError, WhatsAppError, type WhatsAppErrorCode, WhatsAppFlowError, WhatsAppGroupError, WhatsAppIntegrityError, WhatsAppNetworkError, WhatsAppSendMessageError, WhatsAppThrottlingError, WhatsAppUnknownError, WhatsAppValidationError, type WindowTimestamp, buildFieldsQueryString, canSendFreeformMessage, compareMessageStatus, createWhatsAppApiError, decryptFlowRequest, decryptFlowRequestAsync, encryptFlowResponse, encryptFlowResponseAsync, formatConfigTable, generateEncryption, getCustomerServiceWindow, getFreeEntryPointWindow, isApiPermissionErrorCode, isAuthorizationErrorCode, isBlockUserErrorCode, isCallingErrorCode, isFlowDataExchangeRequest, isFlowErrorCode, isFlowErrorRequest, isFlowPingRequest, isGroupErrorCode, isIntegrityErrorCode, isMessageStatusAdvance, isMetaError, isSendMessageErrorCode, isThrottlingErrorCode, isWhatsAppApiErrorResponse, isWhatsAppAuthorizationError, isWhatsAppBlockUserError, isWhatsAppCallingError, isWhatsAppErrorCode, isWhatsAppFlowError, isWhatsAppGroupError, isWhatsAppIntegrityError, isWhatsAppSendMessageError, isWhatsAppThrottlingError, normalizeMetaError, objectToQueryString, parseRateLimitHeaders, parseRetryAfter, resolveMessageStatus };
|
|
682
833
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","names":[],"sources":["../../../src/utils/buildFieldsQueryString.ts","../../../src/utils/rateLimit.ts","../../../src/types/enums.ts","../../../src/types/config.ts","../../../src/utils/configTable.ts","../../../src/utils/customerServiceWindow.ts","../../../src/utils/isMetaError.ts","../../../src/types/logger.ts","../../../src/utils/logger.ts","../../../src/utils/objectToQueryString.ts","../../../src/api/flow/types/common.ts","../../../src/utils/flowEncryptionUtils.ts","../../../src/utils/flowTypeGuards.ts"],"mappings":"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
|
|
1
|
+
{"version":3,"file":"index.d.ts","names":[],"sources":["../../../src/utils/buildFieldsQueryString.ts","../../../src/utils/rateLimit.ts","../../../src/types/enums.ts","../../../src/types/config.ts","../../../src/utils/configTable.ts","../../../src/utils/customerServiceWindow.ts","../../../src/utils/isMetaError.ts","../../../src/types/logger.ts","../../../src/utils/logger.ts","../../../src/core/webhook/types/common.ts","../../../src/core/webhook/types/status.ts","../../../src/utils/messageStatus.ts","../../../src/utils/objectToQueryString.ts","../../../src/api/flow/types/common.ts","../../../src/utils/flowEncryptionUtils.ts","../../../src/utils/flowTypeGuards.ts"],"mappings":";iBAAgB,sBAAA,CAAuB,MAA0B;;;;AAAjE;;;UCMiB,cAAA;EDNgD;ECQ7D,SAAA;;EAEA,YAAA;EAJa;EAMb,SAAA;AAAA;;UAIa,oBAAA,SAA6B,cAAc;EANxD;EAQA,UAAA;EANS;EAQT,IAAA;EAJa;;;;EASb,kCAAA;EAPA;EASA,gBAAA;AAAA;;;AAAgB;AAUpB;;;;UAAiB,aAAA;EAEF;EAAX,QAAA,GAAW,cAAA;EAEW;EAAtB,oBAAA,EAAsB,oBAAoB;EAO1C;EALA,YAAA;EAUY;AAAA;AAIhB;;EATI,eAAA;EAWQ;;;;EANR,YAAA;AAAA;AAOoB;AAAA,KAHZ,qBAAA,GACN,OAAA,GACA,MAAM;EACJ,GAAA,CAAI,IAAA;AAAA;;AAwE8E;AA0B1F;;iBA1BgB,eAAA,CAAgB,KAAA,6BAAkC,GAAwB;;;;;;AA0Ba;;;;AClCvG;;;;;iBDkCgB,qBAAA,CAAsB,OAAA,EAAS,qBAAA,sBAA2C,aAAa;;;aClC3F,cAAA;EACR,KAAA;EACA,IAAA;EACA,SAAA;EACA,aAAA;EACA,cAAA;EACA,UAAA;EACA,WAAA;EACA,eAAA;EACA,wBAAA;EACA,YAAA;EACA,mBAAA;EACA,cAAA;EACA,KAAA;EACA,UAAA;EACA,UAAA;AAAA;;;;;;AF3I6D;;;;ACMjE;;;;;;;;UEYiB,WAAA;EFFA;;;;EEOb,WAAA;EFLA;;;;;AASgB;EEGhB,OAAA;EFO0B;;;;EEF1B,cAAA;EFMA;;;;;;AAYY;EEVZ,kBAAA;EFc6B;;;;;EER7B,gBAAA;AAAA;;UAIa,oBAAA;EF+ED;EE7EZ,MAAA;;EAEA,QAAA;EF2EsF;EEzEtF,UAAA;AAAA;;KAIQ,qBAAA,IAAyB,IAAA,EAAM,aAAA,EAAe,OAAA,EAAS,oBAAA,YAAgC,OAAA;AAAA,KAyFvF,cAAA;EA+E+B;;;EAAA,CA3EtC,cAAA,CAAe,KAAA;EAAf;;;EAAA,CAKA,cAAA,CAAe,SAAA;EAKf;;;EAAA,CAAA,cAAA,CAAe,aAAA;EAKA;;;EAAA,CAAf,cAAA,CAAe,cAAA;EAIf;;;EAAA,CAAA,cAAA,CAAe,UAAA;EAUf;;;EAAA,CALA,cAAA,CAAe,WAAA;EAUA;;;EAAA,CALf,cAAA,CAAe,eAAA;EAUf;;;EAAA,CALA,cAAA,CAAe,wBAAA;EAef;;;EAAA,CAVA,cAAA,CAAe,YAAA;EAeA;;;EAAA,CAVf,cAAA,CAAe,KAAA;EAef;;;EAAA,CAVA,cAAA,CAAe,mBAAA;EAqBhB;;;EAAA,CAhBC,cAAA,CAAe,cAAA;EAqBuB;AAAA;;EAAA,CAhBtC,cAAA,CAAe,UAAA;;AC9MpB;;GDmNK,cAAA,CAAe,UAAA;ECnNsB;AAAc;;;EDyNpD,KAAA,GAAQ,WAAA;EEnNC;;;EFwNT,eAAA,GAAkB,qBAAA;AAAA;;;AHvOtB;;;;AAAiE;;AAAjE,iBISgB,iBAAA,CAAkB,MAAsB,EAAd,cAAc;;;;AJTxD;;;;AAAiE;;;;cKepD,0BAAA;;;;;;;cAQA,0BAAA;AJXA;AAIb;;;;;AAJa,cImBA,8BAAA;;;;;AJJO;AAUpB;;;KIIY,eAAA,GAAkB,IAAI;;UAGjB,eAAA;EJHb;EIKA,MAAA;EJHA;EIKA,SAAA,EAAW,IAAI;EJKf;EIHA,WAAA;AAAA;AAAA,UAGa,4BAAA;EJIgB;EIF7B,GAAA,GAAM,eAAe;EJIb;;;;EICR,cAAA;AAAA;AAAA,UAGa,2BAAA,SAAoC,4BAA4B;EJqEjE;;;;AAA0E;EI/DtF,UAAA;EJyFiC;;;;EIpFjC,SAAA,GAAY,eAAA;AAAA;;AJoFuF;;;;AClCvG;;;;;;;;;;;;;;;;;;;;AAec;;iBGiBE,wBAAA,CACZ,aAAA,EAAe,eAAA,qBACf,OAAA,GAAS,4BAAA,GACV,eAAA;;AF7IH;;;;;iBE4JgB,sBAAA,CACZ,aAAA,EAAe,eAAA,qBACf,OAAA,GAAS,4BAAiC;;;;;AF/H1B;AAIpB;;;;;;;;AAMc;AAId;;;iBEuIgB,uBAAA,CACZ,QAAA,EAAU,eAAA,qBACV,OAAA,GAAS,2BAAA,GACV,eAAA;;;KCvMS,aAAA;EACR,OAAA;EACA,IAAA;EACA,IAAA;EACA,UAAA;IACI,iBAAA;IACA,OAAA;EAAA;EAEJ,aAAA;EACA,UAAA;AAAA;AAAA,UAGa,SAAA,SAAkB,KAAK;EACpC,KAAA,EAAO,aAAA;AAAA;AAAA,cAGE,oBAAA;AAAA,KAcD,sBAAA;AAAA,KACA,iBAAA,WAA4B,oBAAA,YAAgC,sBAAsB;AAAA,cAEjF,yBAAA;AAAA,cACA,sBAAA;AAAA,cACA,qBAAA;AAAA,cACA,wBAAA;AAAA,cAKA,gBAAA;AAAA,cACA,sBAAA;AAAA,cACA,mBAAA;AAAA,cAGA,iBAAA;AAAA,iBAcG,mBAAA,CAAoB,IAAA,WAAe,IAAA,IAAQ,iBAAiB;AAAA,iBAK5D,wBAAA,CAAyB,IAAA,WAAe,IAAA,IAAQ,sBAAsB;AAAA,iBAItE,wBAAA,CACZ,IAAA,WACD,IAAA,IAAQ,sBAAA,WAAiC,yBAAyB;AAAA,iBAIrD,qBAAA,CAAsB,IAAA,WAAe,IAAA,YAAgB,sBAAsB;AAAA,iBAI3E,oBAAA,CAAqB,IAAA,WAAe,IAAA,YAAgB,qBAAqB;AAAA,iBAIzE,sBAAA,CAAuB,IAAA,WAAe,IAAA,YAAgB,wBAAwB;AAAA,iBAI9E,eAAA,CAAgB,IAAA,WAAe,IAAA,YAAgB,gBAAgB;AAAA,iBAI/D,oBAAA,CAAqB,IAAA,WAAe,IAAA,YAAgB,sBAAsB;AAAA,iBAI1E,kBAAA,CAAmB,IAAA,WAAe,IAAA,YAAgB,mBAAmB;AAAA,iBAIrE,gBAAA,CAAiB,IAAA,WAAe,IAAA,YAAgB,iBAAiB;AAAA,cAIpE,aAAA,SAAsB,KAAK;cACxB,OAAA;AAAA;AAAA,cAMH,gBAAA,SAAyB,aAAA;EAAA,SACzB,KAAA,EAAO,aAAA;EAAA,SACP,UAAA;ELzDD;;;;EK8DR,SAAA,GAAY,aAAA;cAEA,OAAA,UAAiB,KAAA,EAAO,aAAA,EAAe,UAAA;AAAA;AAAA,cAQ1C,0BAAA,SAAmC,gBAAgB;cAChD,OAAA,UAAiB,KAAA,EAAO,aAAA,EAAe,UAAA;AAAA;AAAA,cAM1C,uBAAA,SAAgC,gBAAgB;cAC7C,OAAA,UAAiB,KAAA,EAAO,aAAA,EAAe,UAAA;AAAA;AAAA,cAM1C,sBAAA,SAA+B,gBAAgB;cAC5C,OAAA,UAAiB,KAAA,EAAO,aAAA,EAAe,UAAA;AAAA;AAAA,cAM1C,wBAAA,SAAiC,gBAAgB;cAC9C,OAAA,UAAiB,KAAA,EAAO,aAAA,EAAe,UAAA;AAAA;AAAA,cAM1C,iBAAA,SAA0B,gBAAgB;cACvC,OAAA,UAAiB,KAAA,EAAO,aAAA,EAAe,UAAA;AAAA;AAAA,cAM1C,sBAAA,SAA+B,gBAAgB;cAC5C,OAAA,UAAiB,KAAA,EAAO,aAAA,EAAe,UAAA;AAAA;AAAA,cAM1C,oBAAA,SAA6B,gBAAgB;cAC1C,OAAA,UAAiB,KAAA,EAAO,aAAA,EAAe,UAAA;AAAA;AAAA,cAM1C,kBAAA,SAA2B,gBAAgB;cACxC,OAAA,UAAiB,KAAA,EAAO,aAAA,EAAe,UAAA;AAAA;AAAA,iBAMvC,sBAAA,CAAuB,KAAA,EAAO,aAAA,EAAe,UAAA,YAAsB,gBAAgB;AAAA,cA+BtF,oBAAA,SAA6B,aAAa;EAAA,SAC1C,KAAA;cAEG,OAAA,UAAiB,KAAA;AAAA;AAAA,cAOpB,oBAAA,SAA6B,aAAa;EAAA,SAC1C,KAAA;cAEG,OAAA,UAAiB,KAAA;AAAA;;;;;cAWpB,uBAAA,SAAgC,KAAK;cAClC,OAAA;AAAA;AJtGF;;;;ACzHd;ADyHc,iBIiHE,WAAA,CAAY,KAAA,QAAa,KAAA,IAAS,SAAS;AAAA,iBAuB3C,0BAAA,CAA2B,KAAA,QAAa,KAAA,IAAS,SAAA;EAAc,KAAA;IAAS,IAAA,EAAM,iBAAiB;EAAA;AAAA;AAAA,iBAI/F,4BAAA,CAA6B,KAAA,YAAiB,KAAA,IAAS,0BAA0B;AAAA,iBAIjF,yBAAA,CAA0B,KAAA,YAAiB,KAAA,IAAS,uBAAuB;AAAA,iBAI3E,wBAAA,CAAyB,KAAA,YAAiB,KAAA,IAAS,sBAAsB;AAAA,iBAIzE,0BAAA,CAA2B,KAAA,YAAiB,KAAA,IAAS,wBAAwB;AAAA,iBAI7E,mBAAA,CAAoB,KAAA,YAAiB,KAAA,IAAS,iBAAiB;AAAA,iBAI/D,wBAAA,CAAyB,KAAA,YAAiB,KAAA,IAAS,sBAAsB;AAAA,iBAIzE,sBAAA,CAAuB,KAAA,YAAiB,KAAA,IAAS,oBAAoB;AAAA,iBAIrE,oBAAA,CAAqB,KAAA,YAAiB,KAAA,IAAS,kBAAkB;AAAA,iBAIjE,kBAAA,CAAmB,SAAA,WAAoB,UAAA,YAAsB,SAAS;;;UCvTrE,eAAA;EACb,GAAA,IAAO,IAAA;EACP,KAAA,IAAS,IAAA;EACT,IAAA,IAAQ,IAAA;EACR,IAAA,IAAQ,IAAA;EACR,KAAA,IAAS,IAAA;AAAA;;;cCHQ,MAAA,YAAkB,eAAe;EAAA,QAC1C,IAAA;EAAA,QACA,YAAA;cAEI,IAAA,UAAc,KAAA;EAAA,QAKlB,UAAA;EAIR,GAAA,IAAO,IAAA;EAUP,KAAA,IAAS,IAAA;EAQT,IAAA,IAAQ,IAAA;EAUR,IAAA,IAAQ,IAAA;EAUR,KAAA,IAAS,IAAA;AAAA;;;;;;UCzBI,YAAA;EACb,IAAA;EACA,KAAA;EACA,OAAA;EACA,UAAA;IACI,OAAA;EAAA;EAEJ,IAAA;AAAA;;;UC7Ba,aAAA;EACb,EAAA;EACA,MAAA;EACA,SAAA;EACA,YAAA;EACA,cAAA;EACA,wBAAA;EACA,2BAAA;EACA,wBAAA;ETR2B;;;;;;ESe3B,WAAA;EACA,YAAA;IACI,EAAA;IACA,oBAAA;IACA,MAAA;MACI,IAAA;IAAA;EAAA;EAUR,OAAA;ITXA;;;AAEgB;AAUpB;;;ISOQ,QAAA,WTLJ;ISOI,aAAA;ITLJ;;;;;;AAYY;AAIhB;;;;;;;;;AAGwB;AAwExB;;;;AAA0F;AA0B1F;;;;;ISpFQ,IAAA;IToFkF;;AAAa;;;;AClCvG;;;;;IQtCQ,OAAA;IRyCJ;;;;;;;;IQhCI,QAAA;EAAA;EAaJ,MAAA,GAAS,KAAK,CAAC,YAAA;AAAA;;;AV5GnB;AAAA,KWKY,qBAAA,GAAwB,aAAa;;;AXLgB;;;;ACMjE;;;;;;iBU6BgB,oBAAA,CACZ,CAAA,EAAG,qBAAA,kBACH,CAAA,EAAG,qBAAqB;;AVzBf;AAIb;;;;iBUgCgB,sBAAA,CACZ,OAAA,EAAS,qBAAA,qCACT,QAAA,EAAU,qBAAqB;;;;;;AVvBf;AAUpB;;;;;;;;;;;;AAgBgB;AAIhB;;;;;;iBUwBgB,oBAAA,WAA+B,qBAAA,kBAC3C,OAAA,EAAS,CAAA,qBACT,QAAA,EAAU,CAAA,GACX,CAAA;;;cCpFU,mBAAA,GAAuB,MAA2B,EAAnB,MAAM;;;aC8BtC,cAAA;EACR,IAAA;EACA,IAAA;EACA,aAAA;AAAA;;ATxBJ;;;US6NiB,sBAAA;EACb,MAAA;EACA,OAAO;AAAA;;ARjN2C;AAQtD;;UQ0NiB,uBAAA;EACb,OAAA;EACA,MAAA,EAAQ,cAAA;EACR,MAAA;EACA,UAAA;EACA,IAAA,GAAO,MAAM;IAAkB,aAAA;EAAA;AAAA;;;ARpLJ;AAkF/B;UQkIiB,4BAAA;EACb,OAAA;EACA,MAAA,EAAQ,OAAA,CAAQ,cAAA,EAAgB,cAAA,CAAe,IAAA;EAC/C,MAAA;EACA,UAAA;EACA,IAAA;IACI,KAAA;IACA,aAAA;EAAA;AAAA;;;;;;UAiBS,mBAAA;EAEb,OAAA;EACA,MAAA,YAAkB,cAAA;EAElB,MAAA;EACA,UAAA;EAEA,IAAA,GAAO,MAAM;IACT,SAAA;IACA,aAAA;EAAA;AAAA;;;;;AZ1TR;KauBY,iBAAA;EACR,UAAA;EACA,UAAA;EACA,SAAA;AAAA;;;AbpBS;AAIb;;;;;;;;;;AAWoB;AAUpB;;;;;;;;;;;;AAgBgB;AAIhB;;;;iBauDgB,kBAAA,CAAmB,UAAA,YAAsB,iBAAiB;;;;;AbpDlD;AAwExB;;iBa6CgB,kBAAA,CACZ,IAAA,OACA,MAAA,EAAQ,cAAA;EAER,aAAA,EAAe,mBAAA;EACf,YAAA,EAAc,MAAA;EACd,mBAAA,EAAqB,MAAA;AAAA;;;;;;;AbzB8E;;iBa4MvF,mBAAA,CAAoB,QAAA,OAAe,YAAA,EAAc,MAAA,EAAQ,mBAAA,EAAqB,MAAM;;AZ9OpG;;;KY8QY,oBAAA;EACR,aAAA,EAAe,mBAAA;EACf,YAAA,EAAc,UAAA,CAAW,WAAA;EACzB,mBAAA,EAAqB,UAAA,CAAW,WAAA;AAAA;;;;;;;;;;;;iBA2Ed,uBAAA,CAAwB,IAAA,OAAW,MAAA,EAAQ,cAAA,GAAiB,OAAA,CAAQ,oBAAA;AZ7U5E;;;;ACzHd;;;ADyHc,iBYkYQ,wBAAA,CAClB,QAAA,OACA,YAAA,EAAc,UAAA,EACd,mBAAA,EAAqB,UAAA,GACtB,OAAA;;;cCtfG,qBAAA,YAAqB,cAAA,CAAA,aAAA,EAAA,cAAA,CAAA,IAAA,EAAA,cAAA,CAAA,IAAA;AAAA,cAGrB,aAAA,YAAa,cAAA,CAAA,aAAA,EAAA,cAAA,CAAA,IAAA;;;Af9B8C;;;;ACMjE;iBciCgB,yBAAA,CAA0B,OAAA,EAAS,mBAAA,GAAsB,OAAA,IAAW,uBAAA;EAChF,MAAA,UAAgB,qBAAA;EAChB,MAAA;EACA,UAAA;EACA,IAAA,GAAO,MAAA;AAAA;;Ad/BE;AAIb;;;;;iBc2DgB,kBAAA,CAAmB,OAAA,EAAS,mBAAA,GAAsB,OAAA,IAAW,4BAAA;EACzE,MAAA,UAAgB,aAAA;EAChB,MAAA;EACA,UAAA;EACA,IAAA;IACI,KAAA;IACA,aAAA;EAAA;AAAA;;;;;;;;iBAmCQ,iBAAA,CAAkB,OAAA,EAAS,mBAAA,GAAsB,OAAA,IAAW,sBAAsB"}
|
package/dist/utils/node/index.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import*as e from"node:crypto";function t(e){if(!e)return``;let t=``;return t=Array.isArray(e)?e.join(`,`):typeof e==`string`?e:Object.entries(e).filter(([e,t])=>t).map(([e])=>e).join(`,`),t?`?fields=${t}`:``}function n(e){let t=[[`App ID`,e.M4D_APP_ID||`Not Set`],[`Phone Number ID`,e.WA_PHONE_NUMBER_ID?.toString()||`Not Set`],[`Business Account ID`,e.WA_BUSINESS_ACCOUNT_ID||`Not Set`],[`API Version`,e.CLOUD_API_VERSION||`Not Set`],[`Access Token`,e.CLOUD_API_ACCESS_TOKEN?`${e.CLOUD_API_ACCESS_TOKEN.substring(0,20)}...`:`Not Set`],[`Webhook Endpoint`,e.WEBHOOK_ENDPOINT||`Not Set`],[`Webhook Verification Token`,e.WEBHOOK_VERIFICATION_TOKEN?`${e.WEBHOOK_VERIFICATION_TOKEN.substring(0,10)}...`:`Not Set`],[`Listener Port`,e.LISTENER_PORT?.toString()||`Not Set`],[`Debug Mode`,e.DEBUG?`Enabled`:`Disabled`],[`Max Retries`,e.MAX_RETRIES_AFTER_WAIT?.toString()||`Not Set`],[`Request Timeout`,e.REQUEST_TIMEOUT?`${e.REQUEST_TIMEOUT}ms`:`Not Set`],[`Private PEM`,e.FLOW_API_PRIVATE_PEM?`Configured`:`Not Set`],[`Passphrase`,e.FLOW_API_PASSPHRASE?`Configured`:`Not Set`]],n=Math.max(...t.map(([e])=>e?.length||0)),r=Math.max(...t.map(([,e])=>e?.length||0)),i=Math.max(n,20),a=Math.max(r,30),o=`┌${`─`.repeat(i+2)}┬${`─`.repeat(a+2)}┐`,s=`├${`─`.repeat(i+2)}┼${`─`.repeat(a+2)}┤`,c=`└${`─`.repeat(i+2)}┴${`─`.repeat(a+2)}┘`;return[o,`│ ${`Configuration`.padEnd(i)} │ ${`Value`.padEnd(a)} │`,s,...t.map(([e,t])=>`│ ${e?.padEnd(i)} │ ${t?.padEnd(a)} │`),c].join(`
|
|
2
|
-
`)}const r=[0,1,2,3,4,10,33,100,190,200,299,368,613,80007,130429,130472,130497,131e3,131005,131008,131009,131016,131020,131021,131026,131030,131031,131037,131041,131042,131044,131045,131047,131048,131049,131050,131051,131052,131053,131055,131056,131057,131059,131061,131062,131063,131065,131070,131201,131202,131203,131204,131207,131208,131209,131210,131211,131212,131213,131214,131215,132e3,132001,132005,132007,132008,132012,132015,132016,132068,132069,133e3,133004,133005,133006,133008,133009,133010,133015,133016,134011,134100,134101,134102,135e3,137e3,138e3,138001,138002,138003,138004,138005,138006,138007,138009,138012,138013,138018,138038,139e3,139001,139002,139003,139004,139100,139101,139102,139103,147005,200005,200006,200007,1752041,2388001,2388012,2388019,2388040,2388047,2388072,2388073,2388091,2388093,2388103,2388293,2388299,2494100,2494191,2593079,2593085,2593107,2593108],i=new Set(r),a=[0,3,10,190],o=[4,80007,130429,131048,131056],s=[368,130497,131031],c=[130472,131e3,131005,131008,131009,131016,131021,131026,131030,131042,131044,131045,131047,131050,131051,131052,131053,131056,131057,131048,131061,131062,131063,131065,131070,132e3,132001,132005,132007,132008,132012,132015,132016,132068,132069,135e3,137e3],l=[139e3,139001,139002,139003,139004],u=[139100,139101,139102,139103],d=[138e3,138001,138002,138003,138004,138005,138006,138007,138009,138012,138013,138018,138038,613],f=[131020,131041,131059,131201,131202,131203,131204,131207,131208,131209,131210,131211,131212,131213,131214,131215],p=new Set(a),m=new Set(o),h=new Set(s),g=new Set(c),_=new Set(l),ee=new Set(u),te=new Set(d),ne=new Set(f);function v(e){return y(e)?!0:i.has(e)}function y(e){return e>=200&&e<300}function re(e){return y(e)||p.has(e)}function ie(e){return m.has(e)}function ae(e){return h.has(e)}function oe(e){return g.has(e)}function se(e){return _.has(e)}function ce(e){return ee.has(e)}function b(e){return te.has(e)}function x(e){return ne.has(e)}var S=class extends Error{constructor(e){super(e),this.name=`WhatsAppError`}},C=class extends S{error;statusCode;rateLimit;constructor(e,t,n){super(e),this.name=`WhatsAppApiError`,this.error=t,this.statusCode=n}},w=class extends C{constructor(e,t,n){super(e,t,n),this.name=`WhatsAppAuthorizationError`}},T=class extends C{constructor(e,t,n){super(e,t,n),this.name=`WhatsAppThrottlingError`}},E=class extends C{constructor(e,t,n){super(e,t,n),this.name=`WhatsAppIntegrityError`}},D=class extends C{constructor(e,t,n){super(e,t,n),this.name=`WhatsAppSendMessageError`}},O=class extends C{constructor(e,t,n){super(e,t,n),this.name=`WhatsAppFlowError`}},k=class extends C{constructor(e,t,n){super(e,t,n),this.name=`WhatsAppBlockUserError`}},A=class extends C{constructor(e,t,n){super(e,t,n),this.name=`WhatsAppCallingError`}},j=class extends C{constructor(e,t,n){super(e,t,n),this.name=`WhatsAppGroupError`}};function le(e,t){let n=e.code;return re(n)?new w(e.message,e,t):ie(n)?new T(e.message,e,t):ae(n)?new E(e.message,e,t):oe(n)?new D(e.message,e,t):se(n)?new O(e.message,e,t):ce(n)?new k(e.message,e,t):b(n)?new A(e.message,e,t):x(n)?new j(e.message,e,t):new C(e.message,e,t)}var ue=class extends S{cause;constructor(e,t){super(e),this.name=`WhatsAppNetworkError`,this.cause=t}},de=class extends S{cause;constructor(e,t){super(e),this.name=`WhatsAppUnknownError`,this.cause=t}},M=class extends Error{constructor(e){super(e),this.name=`WhatsAppValidationError`}};function N(e){if(typeof e!=`object`||!e||!(`error`in e)||typeof e.error!=`object`||e.error==null)return!1;let t=e.error;if(typeof t.message!=`string`||typeof t.type!=`string`||typeof t.code!=`number`||typeof t.fbtrace_id!=`string`)return!1;if(`error_data`in t&&t.error_data!=null){if(typeof t.error_data!=`object`)return!1;let e=t.error_data;if(`messaging_product`in e&&e.messaging_product!==`whatsapp`||`details`in e&&typeof e.details!=`string`)return!1}return!(`error_subcode`in t&&typeof t.error_subcode!=`number`)}function fe(e){return N(e)&&v(e.error.code)}function pe(e){return e instanceof w}function me(e){return e instanceof T}function he(e){return e instanceof E}function ge(e){return e instanceof D}function _e(e){return e instanceof O}function ve(e){return e instanceof k}function ye(e){return e instanceof A}function be(e){return e instanceof j}function xe(e,t){if(N(e))return e;let n=`Unknown error occurred`;if(e&&typeof e==`object`&&`message`in e){let t=e.message;typeof t==`string`&&(n=t)}return{name:`MetaError`,message:n,error:{message:n,type:`UnknownError`,code:typeof t==`number`?t:500,fbtrace_id:``}}}const P=3600*1e3,Se=24*P,Ce=72*P,we=168*P,Te=1e11;function F(e,t){let n;if(e instanceof Date)n=e.getTime();else if(typeof e==`number`)n=Math.abs(e)<Te?e*1e3:e;else if(typeof e==`string`){let t=e.trim();if(/^\d+(\.\d+)?$/.test(t)){let e=Number(t);n=e<Te?e*1e3:e}else n=t===``?NaN:Date.parse(t)}else n=NaN;if(!Number.isFinite(n)||!Number.isFinite(new Date(n).getTime()))throw new M(`${t} is not a valid timestamp: ${String(e)}`);return n}function I(e,t,n){if(e===void 0)return n;if(typeof e!=`number`||!Number.isFinite(e)||e<0)throw new M(`${t} must be a non-negative number of milliseconds`);return e}function L(e,t,n,r){if(!Number.isFinite(new Date(t).getTime()))throw new M(`Window expiry is outside the supported timestamp range`);let i=Math.max(0,t-e),a=t-r,o=Math.min(Math.max(0,a-n),i);return{isOpen:o>0,expiresAt:new Date(t),remainingMs:o}}const R=Object.freeze({isOpen:!1,expiresAt:null,remainingMs:0});function z(e,t={}){let n=I(t.safetyMarginMs,`safetyMarginMs`,0),r=t.now===void 0?Date.now():F(t.now,`now`);if(e==null)return{...R};let i=F(e,`lastInboundAt`);return L(i,i+Se,r,n)}function Ee(e,t={}){return z(e,t).isOpen}function De(e,t={}){let n=I(t.safetyMarginMs,`safetyMarginMs`,0),r=I(t.durationMs,`durationMs`,Ce),i=t.now===void 0?Date.now():F(t.now,`now`);if(e==null)return{...R};let a=F(e,`openedAt`);return L(a,t.expiresAt===void 0?a+r:F(t.expiresAt,`expiresAt`),i,n)}var B=class{name;debugEnabled;constructor(e,t=!1){this.name=e,this.debugEnabled=t}formatData(e){return e.map(e=>typeof e==`object`&&e?Oe(e):e).join(` `)}log(...e){if(this.debugEnabled){let t=`[ ${Date.now()} ]`;this.name&&(t+=` - ${this.name}`),console.log(t,`: `,this.formatData(e))}}error(...e){let t=`[ ${Date.now()} ] - ERROR`;this.name&&(t+=` - ${this.name}`),console.error(t,`: `,this.formatData(e))}warn(...e){if(this.debugEnabled){let t=`[ ${Date.now()} ] - WARN`;this.name&&(t+=` - ${this.name}`),console.warn(t,`: `,this.formatData(e))}}info(...e){if(this.debugEnabled){let t=`[ ${Date.now()} ] - INFO`;this.name&&(t+=` - ${this.name}`),console.info(t,`: `,this.formatData(e))}}debug(...e){if(this.debugEnabled){let t=`[ ${Date.now()} ] - DEBUG`;this.name&&(t+=` - ${this.name}`),console.debug(t,`: `,this.formatData(e))}}};function Oe(e){if(e instanceof Error)return e.stack||`${e.name}: ${e.message}`;let t=new WeakSet;try{return JSON.stringify(e,(e,n)=>{if(n instanceof Error)return{name:n.name,message:n.message,stack:n.stack};if(typeof n==`bigint`)return n.toString();if(typeof n==`object`&&n){if(t.has(n))return`[Circular]`;t.add(n)}return n},2)}catch{return String(e)}}const ke=e=>{if(!e||Object.keys(e).length===0)return``;let t=[];for(let[n,r]of Object.entries(e))if(r!==void 0){let e=encodeURIComponent(n),i=encodeURIComponent(String(r));t.push(`${e}=${i}`)}return t.length>0?`?${t.join(`&`)}`:``};function V(e,t){if(typeof e.get==`function`)return e.get(t)??void 0;let n=e,r=Object.keys(n).find(e=>e.toLowerCase()===t);if(r===void 0)return;let i=n[r];return Array.isArray(i)?i[0]:i}function H(e){if(!(e===void 0||e.trim()===``))try{return JSON.parse(e)}catch{return}}function U(e){return typeof e==`object`&&!!e&&!Array.isArray(e)}function W(e){if(typeof e==`number`&&Number.isFinite(e))return e;if(typeof e==`string`&&e.trim()!==``&&Number.isFinite(Number(e)))return Number(e)}function G(e){return typeof e==`string`?e:void 0}function Ae(e){let t={},n=W(e.call_count),r=W(e.total_cputime),i=W(e.total_time);return n!==void 0&&(t.callCount=n),r!==void 0&&(t.totalCputime=r),i!==void 0&&(t.totalTime=i),t}function je(e){if(!U(e))return[];let t=[];for(let[n,r]of Object.entries(e))if(Array.isArray(r))for(let e of r){if(!U(e))continue;let r={businessId:n,...Ae(e)},i=G(e.type),a=W(e.estimated_time_to_regain_access),o=G(e.ads_api_access_tier);i!==void 0&&(r.type=i),a!==void 0&&(r.estimatedTimeToRegainAccessMinutes=a),o!==void 0&&(r.adsApiAccessTier=o),t.push(r)}return t}function Me(e,t=Date.now()){if(e==null)return;let n=e.trim();if(n===``)return;if(/^\d+(\.\d+)?$/.test(n))return Math.round(Number(n)*1e3);if(!/[a-z]/i.test(n))return;let r=Date.parse(n);if(Number.isFinite(r))return Math.max(0,r-t)}function Ne(e){if(!e)return;let t=V(e,`x-app-usage`),n=V(e,`x-business-use-case-usage`),r=V(e,`retry-after`);if(t===void 0&&n===void 0&&r===void 0)return;let i={businessUseCaseUsage:[]},a=H(t);U(a)&&(i.appUsage=Ae(a)),i.businessUseCaseUsage=je(H(n));let o=Me(r);o!==void 0&&(i.retryAfterMs=o);let s=[...i.appUsage?[i.appUsage]:[],...i.businessUseCaseUsage].flatMap(e=>[e.callCount,e.totalCputime,e.totalTime].filter(e=>e!==void 0));s.length>0&&(i.maxUsagePercent=Math.max(...s));let c=[...o===void 0?[]:[o],...i.businessUseCaseUsage.map(e=>e.estimatedTimeToRegainAccessMinutes).filter(e=>e!==void 0&&e>0).map(e=>e*6e4)];return c.length>0&&(i.retryDelayMs=Math.max(...c)),i}const Pe=e;function K(){let e=globalThis.process;return typeof e==`object`&&e?e:void 0}function Fe(e){return K()?.env?.[e]}function Ie(){return Fe(`DEBUG`)===`true`}function q(){let e=K()?.getBuiltinModule;if(typeof e!=`function`)return K()?Pe:void 0;try{return e(`node:crypto`)}catch{return}}function J(e){let t=q();if(!t)throw Error(`${e} needs the node:crypto module, which is not available in this runtime. Use the async Web Crypto variant instead, or run on Node.js >= 20.12, Bun or Deno.`);return t}function Y(){let e=globalThis.crypto?.subtle;if(!e)throw Error(`Web Crypto (globalThis.crypto.subtle) is not available in this runtime.`);return e}const Le=new TextEncoder,Re=new TextDecoder;function ze(e){return Le.encode(e)}function Be(e){return Re.decode(e)}function X(e){let t=atob(e),n=new Uint8Array(t.length);for(let e=0;e<t.length;e++)n[e]=t.charCodeAt(e);return n}function Ve(e){let t=``,n=32768;for(let r=0;r<e.length;r+=n)t+=String.fromCharCode(...e.subarray(r,r+n));return btoa(t)}const Z=new B(`FLOW_ENCRYPTION_UTILS`,Ie());function He(){let e=q();if(!e||typeof e.generateKeyPairSync!=`function`){let e=Error(`This utility requires Node.js environment with crypto module. It cannot be used in browser or edge runtime environments.`);throw Z.error(`Environment validation failed:`,e),e}if(typeof window<`u`){let e=Error(`This utility cannot run in a browser environment. Please use it in a Node.js server environment only.`);throw Z.error(`Browser environment detected:`,e),e}let t=globalThis.process?.versions?.node;if(t){let e=t.split(`.`).map(Number),n=e[0]??0,r=e[1]??0;if(n<10||n===10&&r<12){let e=Error(`Node.js version ${t} is not supported. Please upgrade to Node.js 10.12.0 or higher.`);throw Z.error(`Node.js version check failed:`,e),e}}return e}function Ue(e){Z.info(`[generateEncryption] Starting key pair generation`);let t=He(),n=e||Fe(`FLOW_API_PASSPHRASE`);if(!n||n.trim().length===0){let e=Error(`Passphrase is empty. Please provide a passphrase as parameter or set FLOW_API_PASSPHRASE environment variable.`);throw Z.error(`[generateEncryption] Passphrase validation failed:`,e),e}n.length<8&&Z.warn(`[generateEncryption] Passphrase is shorter than 8 characters. Consider using a longer passphrase for better security.`);try{Z.info(`[generateEncryption] Generating 2048-bit RSA key pair`);let e=t.generateKeyPairSync(`rsa`,{modulusLength:2048,publicKeyEncoding:{type:`spki`,format:`pem`},privateKeyEncoding:{type:`pkcs8`,format:`pem`,cipher:`aes-256-cbc`,passphrase:n}});return Z.info(`[generateEncryption] Key pair generated successfully`),{passphrase:n,privateKey:e.privateKey,publicKey:e.publicKey}}catch(e){let t=e instanceof Error?e.message:String(e),n=Error(`Failed to generate key pair: ${t}`);throw Z.error(`[generateEncryption] Key generation failed:`,n),n}}function We(e,t){Z.info(`[decryptFlowRequest] Starting Flow request decryption`);let n=J(`decryptFlowRequest`);if(!t.FLOW_API_PRIVATE_PEM||t.FLOW_API_PRIVATE_PEM.trim()===``){let e=Error(`Missing FLOW_API_PRIVATE_PEM. Please set the FLOW_API_PRIVATE_PEM environment variable or pass privatePem via config.`);throw Z.error(`[decryptFlowRequest] Configuration error:`,e),e}if(!t.FLOW_API_PASSPHRASE||t.FLOW_API_PASSPHRASE.trim()===``){let e=Error(`Missing FLOW_API_PASSPHRASE. Please set the FLOW_API_PASSPHRASE environment variable or pass passphrase via config.`);throw Z.error(`[decryptFlowRequest] Configuration error:`,e),e}Z.info(`[decryptFlowRequest] Configuration validated`);let{encrypted_aes_key:r,encrypted_flow_data:i,initial_vector:a}=e;if(!r||!i||!a)throw Z.error(`[decryptFlowRequest] Missing required encryption properties in request body`),Error(`Missing required encryption properties`);Z.info(`[decryptFlowRequest] Request body validated`);let o=t.FLOW_API_PRIVATE_PEM;o.includes(`\\n`)&&(o=o.replace(/\\n/g,`
|
|
2
|
+
`)}const r=[0,1,2,3,4,10,33,100,190,200,299,368,613,80007,130429,130472,130497,131e3,131005,131008,131009,131016,131020,131021,131026,131030,131031,131037,131041,131042,131044,131045,131047,131048,131049,131050,131051,131052,131053,131055,131056,131057,131059,131061,131062,131063,131065,131070,131201,131202,131203,131204,131207,131208,131209,131210,131211,131212,131213,131214,131215,132e3,132001,132005,132007,132008,132012,132015,132016,132068,132069,133e3,133004,133005,133006,133008,133009,133010,133015,133016,134011,134100,134101,134102,135e3,137e3,138e3,138001,138002,138003,138004,138005,138006,138007,138009,138012,138013,138018,138038,139e3,139001,139002,139003,139004,139100,139101,139102,139103,147005,200005,200006,200007,1752041,2388001,2388012,2388019,2388040,2388047,2388072,2388073,2388091,2388093,2388103,2388293,2388299,2494100,2494191,2593079,2593085,2593107,2593108],i=new Set(r),a=[0,3,10,190],o=[4,80007,130429,131048,131056],s=[368,130497,131031],c=[130472,131e3,131005,131008,131009,131016,131021,131026,131030,131042,131044,131045,131047,131050,131051,131052,131053,131056,131057,131048,131061,131062,131063,131065,131070,132e3,132001,132005,132007,132008,132012,132015,132016,132068,132069,135e3,137e3],l=[139e3,139001,139002,139003,139004],u=[139100,139101,139102,139103],d=[138e3,138001,138002,138003,138004,138005,138006,138007,138009,138012,138013,138018,138038,613],f=[131020,131041,131059,131201,131202,131203,131204,131207,131208,131209,131210,131211,131212,131213,131214,131215],p=new Set(a),m=new Set(o),ee=new Set(s),h=new Set(c),te=new Set(l),ne=new Set(u),re=new Set(d),ie=new Set(f);function ae(e){return g(e)?!0:i.has(e)}function g(e){return e>=200&&e<300}function oe(e){return g(e)||p.has(e)}function se(e){return m.has(e)}function ce(e){return ee.has(e)}function _(e){return h.has(e)}function v(e){return te.has(e)}function y(e){return ne.has(e)}function b(e){return re.has(e)}function x(e){return ie.has(e)}var S=class extends Error{constructor(e){super(e),this.name=`WhatsAppError`}},C=class extends S{error;statusCode;rateLimit;constructor(e,t,n){super(e),this.name=`WhatsAppApiError`,this.error=t,this.statusCode=n}},w=class extends C{constructor(e,t,n){super(e,t,n),this.name=`WhatsAppAuthorizationError`}},T=class extends C{constructor(e,t,n){super(e,t,n),this.name=`WhatsAppThrottlingError`}},E=class extends C{constructor(e,t,n){super(e,t,n),this.name=`WhatsAppIntegrityError`}},D=class extends C{constructor(e,t,n){super(e,t,n),this.name=`WhatsAppSendMessageError`}},O=class extends C{constructor(e,t,n){super(e,t,n),this.name=`WhatsAppFlowError`}},k=class extends C{constructor(e,t,n){super(e,t,n),this.name=`WhatsAppBlockUserError`}},A=class extends C{constructor(e,t,n){super(e,t,n),this.name=`WhatsAppCallingError`}},j=class extends C{constructor(e,t,n){super(e,t,n),this.name=`WhatsAppGroupError`}};function le(e,t){let n=e.code;return oe(n)?new w(e.message,e,t):se(n)?new T(e.message,e,t):ce(n)?new E(e.message,e,t):_(n)?new D(e.message,e,t):v(n)?new O(e.message,e,t):y(n)?new k(e.message,e,t):b(n)?new A(e.message,e,t):x(n)?new j(e.message,e,t):new C(e.message,e,t)}var ue=class extends S{cause;constructor(e,t){super(e),this.name=`WhatsAppNetworkError`,this.cause=t}},de=class extends S{cause;constructor(e,t){super(e),this.name=`WhatsAppUnknownError`,this.cause=t}},M=class extends Error{constructor(e){super(e),this.name=`WhatsAppValidationError`}};function N(e){if(typeof e!=`object`||!e||!(`error`in e)||typeof e.error!=`object`||e.error==null)return!1;let t=e.error;if(typeof t.message!=`string`||typeof t.type!=`string`||typeof t.code!=`number`||typeof t.fbtrace_id!=`string`)return!1;if(`error_data`in t&&t.error_data!=null){if(typeof t.error_data!=`object`)return!1;let e=t.error_data;if(`messaging_product`in e&&e.messaging_product!==`whatsapp`||`details`in e&&typeof e.details!=`string`)return!1}return!(`error_subcode`in t&&typeof t.error_subcode!=`number`)}function fe(e){return N(e)&&ae(e.error.code)}function pe(e){return e instanceof w}function me(e){return e instanceof T}function he(e){return e instanceof E}function ge(e){return e instanceof D}function _e(e){return e instanceof O}function ve(e){return e instanceof k}function ye(e){return e instanceof A}function be(e){return e instanceof j}function xe(e,t){if(N(e))return e;let n=`Unknown error occurred`;if(e&&typeof e==`object`&&`message`in e){let t=e.message;typeof t==`string`&&(n=t)}return{name:`MetaError`,message:n,error:{message:n,type:`UnknownError`,code:typeof t==`number`?t:500,fbtrace_id:``}}}const P=3600*1e3,F=24*P,I=72*P,Se=168*P,L=1e11;function R(e,t){let n;if(e instanceof Date)n=e.getTime();else if(typeof e==`number`)n=Math.abs(e)<L?e*1e3:e;else if(typeof e==`string`){let t=e.trim();if(/^\d+(\.\d+)?$/.test(t)){let e=Number(t);n=e<L?e*1e3:e}else n=t===``?NaN:Date.parse(t)}else n=NaN;if(!Number.isFinite(n)||!Number.isFinite(new Date(n).getTime()))throw new M(`${t} is not a valid timestamp: ${String(e)}`);return n}function z(e,t,n){if(e===void 0)return n;if(typeof e!=`number`||!Number.isFinite(e)||e<0)throw new M(`${t} must be a non-negative number of milliseconds`);return e}function B(e,t,n,r){if(!Number.isFinite(new Date(t).getTime()))throw new M(`Window expiry is outside the supported timestamp range`);let i=Math.max(0,t-e),a=t-r,o=Math.min(Math.max(0,a-n),i);return{isOpen:o>0,expiresAt:new Date(t),remainingMs:o}}const V=Object.freeze({isOpen:!1,expiresAt:null,remainingMs:0});function H(e,t={}){let n=z(t.safetyMarginMs,`safetyMarginMs`,0),r=t.now===void 0?Date.now():R(t.now,`now`);if(e==null)return{...V};let i=R(e,`lastInboundAt`);return B(i,i+F,r,n)}function Ce(e,t={}){return H(e,t).isOpen}function we(e,t={}){let n=z(t.safetyMarginMs,`safetyMarginMs`,0),r=z(t.durationMs,`durationMs`,I),i=t.now===void 0?Date.now():R(t.now,`now`);if(e==null)return{...V};let a=R(e,`openedAt`);return B(a,t.expiresAt===void 0?a+r:R(t.expiresAt,`expiresAt`),i,n)}var Te=class{name;debugEnabled;constructor(e,t=!1){this.name=e,this.debugEnabled=t}formatData(e){return e.map(e=>typeof e==`object`&&e?Ee(e):e).join(` `)}log(...e){if(this.debugEnabled){let t=`[ ${Date.now()} ]`;this.name&&(t+=` - ${this.name}`),console.log(t,`: `,this.formatData(e))}}error(...e){let t=`[ ${Date.now()} ] - ERROR`;this.name&&(t+=` - ${this.name}`),console.error(t,`: `,this.formatData(e))}warn(...e){if(this.debugEnabled){let t=`[ ${Date.now()} ] - WARN`;this.name&&(t+=` - ${this.name}`),console.warn(t,`: `,this.formatData(e))}}info(...e){if(this.debugEnabled){let t=`[ ${Date.now()} ] - INFO`;this.name&&(t+=` - ${this.name}`),console.info(t,`: `,this.formatData(e))}}debug(...e){if(this.debugEnabled){let t=`[ ${Date.now()} ] - DEBUG`;this.name&&(t+=` - ${this.name}`),console.debug(t,`: `,this.formatData(e))}}};function Ee(e){if(e instanceof Error)return e.stack||`${e.name}: ${e.message}`;let t=new WeakSet;try{return JSON.stringify(e,(e,n)=>{if(n instanceof Error)return{name:n.name,message:n.message,stack:n.stack};if(typeof n==`bigint`)return n.toString();if(typeof n==`object`&&n){if(t.has(n))return`[Circular]`;t.add(n)}return n},2)}catch{return String(e)}}const De={sent:1,failed:2,delivered:3,read:4};function Oe(e){return e&&Object.hasOwn(De,e)?De[e]:0}function U(e,t){return Oe(e)-Oe(t)}function ke(e,t){return e==null||e===``?!0:U(t,e)>0}function Ae(e,t){return e==null||e===``||U(t,e)>0?t:e}const je=e=>{if(!e||Object.keys(e).length===0)return``;let t=[];for(let[n,r]of Object.entries(e))if(r!==void 0){let e=encodeURIComponent(n),i=encodeURIComponent(String(r));t.push(`${e}=${i}`)}return t.length>0?`?${t.join(`&`)}`:``};function W(e,t){if(typeof e.get==`function`)return e.get(t)??void 0;let n=e,r=Object.keys(n).find(e=>e.toLowerCase()===t);if(r===void 0)return;let i=n[r];return Array.isArray(i)?i[0]:i}function Me(e){if(!(e===void 0||e.trim()===``))try{return JSON.parse(e)}catch{return}}function G(e){return typeof e==`object`&&!!e&&!Array.isArray(e)}function K(e){if(typeof e==`number`&&Number.isFinite(e))return e;if(typeof e==`string`&&e.trim()!==``&&Number.isFinite(Number(e)))return Number(e)}function Ne(e){return typeof e==`string`?e:void 0}function Pe(e){let t={},n=K(e.call_count),r=K(e.total_cputime),i=K(e.total_time);return n!==void 0&&(t.callCount=n),r!==void 0&&(t.totalCputime=r),i!==void 0&&(t.totalTime=i),t}function Fe(e){if(!G(e))return[];let t=[];for(let[n,r]of Object.entries(e))if(Array.isArray(r))for(let e of r){if(!G(e))continue;let r={businessId:n,...Pe(e)},i=Ne(e.type),a=K(e.estimated_time_to_regain_access),o=Ne(e.ads_api_access_tier);i!==void 0&&(r.type=i),a!==void 0&&(r.estimatedTimeToRegainAccessMinutes=a),o!==void 0&&(r.adsApiAccessTier=o),t.push(r)}return t}function Ie(e,t=Date.now()){if(e==null)return;let n=e.trim();if(n===``)return;if(/^\d+(\.\d+)?$/.test(n))return Math.round(Number(n)*1e3);if(!/[a-z]/i.test(n))return;let r=Date.parse(n);if(Number.isFinite(r))return Math.max(0,r-t)}function Le(e){if(!e)return;let t=W(e,`x-app-usage`),n=W(e,`x-business-use-case-usage`),r=W(e,`retry-after`);if(t===void 0&&n===void 0&&r===void 0)return;let i={businessUseCaseUsage:[]},a=Me(t);G(a)&&(i.appUsage=Pe(a)),i.businessUseCaseUsage=Fe(Me(n));let o=Ie(r);o!==void 0&&(i.retryAfterMs=o);let s=[...i.appUsage?[i.appUsage]:[],...i.businessUseCaseUsage].flatMap(e=>[e.callCount,e.totalCputime,e.totalTime].filter(e=>e!==void 0));s.length>0&&(i.maxUsagePercent=Math.max(...s));let c=[...o===void 0?[]:[o],...i.businessUseCaseUsage.map(e=>e.estimatedTimeToRegainAccessMinutes).filter(e=>e!==void 0&&e>0).map(e=>e*6e4)];return c.length>0&&(i.retryDelayMs=Math.max(...c)),i}const Re=e;function q(){let e=globalThis.process;return typeof e==`object`&&e?e:void 0}function ze(e){return q()?.env?.[e]}function Be(){return ze(`DEBUG`)===`true`}function J(){let e=q()?.getBuiltinModule;if(typeof e!=`function`)return q()?Re:void 0;try{return e(`node:crypto`)}catch{return}}function Ve(e){let t=J();if(!t)throw Error(`${e} needs the node:crypto module, which is not available in this runtime. Use the async Web Crypto variant instead, or run on Node.js >= 20.12, Bun or Deno.`);return t}function Y(){let e=globalThis.crypto?.subtle;if(!e)throw Error(`Web Crypto (globalThis.crypto.subtle) is not available in this runtime.`);return e}const He=new TextEncoder,Ue=new TextDecoder;function We(e){return He.encode(e)}function Ge(e){return Ue.decode(e)}function X(e){let t=atob(e),n=new Uint8Array(t.length);for(let e=0;e<t.length;e++)n[e]=t.charCodeAt(e);return n}function Ke(e){let t=``,n=32768;for(let r=0;r<e.length;r+=n)t+=String.fromCharCode(...e.subarray(r,r+n));return btoa(t)}const Z=new Te(`FLOW_ENCRYPTION_UTILS`,Be());function qe(){let e=J();if(!e||typeof e.generateKeyPairSync!=`function`){let e=Error(`This utility requires Node.js environment with crypto module. It cannot be used in browser or edge runtime environments.`);throw Z.error(`Environment validation failed:`,e),e}if(typeof window<`u`){let e=Error(`This utility cannot run in a browser environment. Please use it in a Node.js server environment only.`);throw Z.error(`Browser environment detected:`,e),e}let t=globalThis.process?.versions?.node;if(t){let e=t.split(`.`).map(Number),n=e[0]??0,r=e[1]??0;if(n<10||n===10&&r<12){let e=Error(`Node.js version ${t} is not supported. Please upgrade to Node.js 10.12.0 or higher.`);throw Z.error(`Node.js version check failed:`,e),e}}return e}function Je(e){Z.info(`[generateEncryption] Starting key pair generation`);let t=qe(),n=e||ze(`FLOW_API_PASSPHRASE`);if(!n||n.trim().length===0){let e=Error(`Passphrase is empty. Please provide a passphrase as parameter or set FLOW_API_PASSPHRASE environment variable.`);throw Z.error(`[generateEncryption] Passphrase validation failed:`,e),e}n.length<8&&Z.warn(`[generateEncryption] Passphrase is shorter than 8 characters. Consider using a longer passphrase for better security.`);try{Z.info(`[generateEncryption] Generating 2048-bit RSA key pair`);let e=t.generateKeyPairSync(`rsa`,{modulusLength:2048,publicKeyEncoding:{type:`spki`,format:`pem`},privateKeyEncoding:{type:`pkcs8`,format:`pem`,cipher:`aes-256-cbc`,passphrase:n}});return Z.info(`[generateEncryption] Key pair generated successfully`),{passphrase:n,privateKey:e.privateKey,publicKey:e.publicKey}}catch(e){let t=e instanceof Error?e.message:String(e),n=Error(`Failed to generate key pair: ${t}`);throw Z.error(`[generateEncryption] Key generation failed:`,n),n}}function Ye(e,t){Z.info(`[decryptFlowRequest] Starting Flow request decryption`);let n=Ve(`decryptFlowRequest`);if(!t.FLOW_API_PRIVATE_PEM||t.FLOW_API_PRIVATE_PEM.trim()===``){let e=Error(`Missing FLOW_API_PRIVATE_PEM. Please set the FLOW_API_PRIVATE_PEM environment variable or pass privatePem via config.`);throw Z.error(`[decryptFlowRequest] Configuration error:`,e),e}if(!t.FLOW_API_PASSPHRASE||t.FLOW_API_PASSPHRASE.trim()===``){let e=Error(`Missing FLOW_API_PASSPHRASE. Please set the FLOW_API_PASSPHRASE environment variable or pass passphrase via config.`);throw Z.error(`[decryptFlowRequest] Configuration error:`,e),e}Z.info(`[decryptFlowRequest] Configuration validated`);let{encrypted_aes_key:r,encrypted_flow_data:i,initial_vector:a}=e;if(!r||!i||!a)throw Z.error(`[decryptFlowRequest] Missing required encryption properties in request body`),Error(`Missing required encryption properties`);Z.info(`[decryptFlowRequest] Request body validated`);let o=t.FLOW_API_PRIVATE_PEM;o.includes(`\\n`)&&(o=o.replace(/\\n/g,`
|
|
3
3
|
`));let s=t.FLOW_API_PASSPHRASE,c=o.includes(`-----BEGIN RSA PRIVATE KEY-----`),l=o.includes(`-----BEGIN PRIVATE KEY-----`)||o.includes(`-----BEGIN ENCRYPTED PRIVATE KEY-----`);Z.info(`[decryptFlowRequest] Loading private key`,{format:l?`PKCS#8`:c?`PKCS#1`:`Unknown`});let u;try{u=s?n.createPrivateKey({key:o,format:`pem`,passphrase:s}):n.createPrivateKey(o),Z.info(`[decryptFlowRequest] Private key loaded successfully`)}catch(e){if(Z.error(`[decryptFlowRequest] Failed to load private key (first attempt):`,{error:e instanceof Error?e.message:e,hasPassphrase:!!s,format:l?`PKCS#8`:c?`PKCS#1`:`Unknown`}),c&&s)try{Z.info(`[decryptFlowRequest] Attempting to convert PKCS#1 to PKCS#8 format`);let e=n.createPrivateKey({key:o,format:`pem`,passphrase:s}).export({type:`pkcs8`,format:`pem`,cipher:`aes-256-cbc`,passphrase:s});u=n.createPrivateKey({key:e,format:`pem`,passphrase:s}),Z.info(`[decryptFlowRequest] Successfully converted PKCS#1 to PKCS#8 and loaded private key`)}catch(t){Z.error(`[decryptFlowRequest] Failed to convert PKCS#1 to PKCS#8:`,{error:t instanceof Error?t.message:t});let n=`Failed to parse private key. Error: ${e instanceof Error?e.message:e}`;throw n+=`
|
|
4
4
|
|
|
5
5
|
Your key is in PKCS#1 format with unsupported encryption (DES-EDE3-CBC).`,n+=`
|
|
@@ -10,7 +10,7 @@ Your key is in PKCS#1 format (-----BEGIN RSA PRIVATE KEY-----).`,t+=`
|
|
|
10
10
|
Please convert it to PKCS#8 format using:`,t+=`
|
|
11
11
|
openssl pkcs8 -topk8 -inform PEM -outform PEM -in old_key.pem -out new_key.pem`):l||(t+=`
|
|
12
12
|
|
|
13
|
-
Your key format is not recognized. Please ensure it is in PKCS#8 format.`),Error(t)}}let d;try{Z.info(`[decryptFlowRequest] Decrypting AES key with RSA private key`),d=n.privateDecrypt({key:u,padding:n.constants.RSA_PKCS1_OAEP_PADDING,oaepHash:`sha256`},Buffer.from(r,`base64`)),Z.info(`[decryptFlowRequest] AES key decrypted successfully`)}catch(e){throw Z.error(`[decryptFlowRequest] Failed to decrypt AES key:`,e),Error(`Failed to decrypt the request. Please verify your private key.`)}let f=Buffer.from(i,`base64`),p=Buffer.from(a,`base64`),m=f.subarray(0,-16),
|
|
14
|
-
openssl pkcs8 -topk8 -nocrypt -in private.pem -out private-pkcs8.pem`);try{let n=i.createPrivateKey({key:e,format:`pem`,passphrase:t||void 0}).export({type:`pkcs8`,format:`der`});return new Uint8Array(n)}catch(e){throw Error(`Failed to parse private key. Error: ${e instanceof Error?e.message:e}`)}}function
|
|
15
|
-
`));let o=Y(),s=await
|
|
13
|
+
Your key format is not recognized. Please ensure it is in PKCS#8 format.`),Error(t)}}let d;try{Z.info(`[decryptFlowRequest] Decrypting AES key with RSA private key`),d=n.privateDecrypt({key:u,padding:n.constants.RSA_PKCS1_OAEP_PADDING,oaepHash:`sha256`},Buffer.from(r,`base64`)),Z.info(`[decryptFlowRequest] AES key decrypted successfully`)}catch(e){throw Z.error(`[decryptFlowRequest] Failed to decrypt AES key:`,e),Error(`Failed to decrypt the request. Please verify your private key.`)}let f=Buffer.from(i,`base64`),p=Buffer.from(a,`base64`),m=f.subarray(0,-16),ee=f.subarray(-16);Z.info(`[decryptFlowRequest] Decrypting flow data with AES-128-GCM`);let h=n.createDecipheriv(`aes-128-gcm`,d,p);h.setAuthTag(ee);let te=Buffer.concat([h.update(m),h.final()]).toString(`utf-8`);return Z.info(`[decryptFlowRequest] Flow request decrypted successfully`),{decryptedBody:JSON.parse(te),aesKeyBuffer:d,initialVectorBuffer:p}}function Xe(e,t,n){Z.info(`[encryptFlowResponse] Starting Flow response encryption`);let r=Ve(`encryptFlowResponse`),i=[];for(let e of Array.from(n.entries()))i.push(~e[1]);try{Z.info(`[encryptFlowResponse] Encrypting response with AES-128-GCM`);let n=r.createCipheriv(`aes-128-gcm`,t,Buffer.from(i)),a=Buffer.concat([n.update(JSON.stringify(e||{}),`utf-8`),n.final(),n.getAuthTag()]).toString(`base64`);return Z.info(`[encryptFlowResponse] Flow response encrypted successfully`),a}catch(e){throw Z.error(`[encryptFlowResponse] Response encryption failed:`,e),Error(`Failed to encrypt response. Internal server error.`)}}const Ze=/-----BEGIN ([A-Z ]+)-----([\s\S]*?)-----END \1-----/;let Q;function Qe(e,t){let n=Ze.exec(e);if(!n)throw Error(`Failed to parse private key. Expected a PEM encoded PKCS#8 private key.`);let r=n[1];if(r===`PRIVATE KEY`)return X((n[2]??``).replace(/\s+/g,``));let i=J();if(!i)throw Error(`Failed to parse private key. "${r}" keys need node:crypto, which this runtime lacks. Convert the key to an unencrypted PKCS#8 key and keep it in a secret store:
|
|
14
|
+
openssl pkcs8 -topk8 -nocrypt -in private.pem -out private-pkcs8.pem`);try{let n=i.createPrivateKey({key:e,format:`pem`,passphrase:t||void 0}).export({type:`pkcs8`,format:`der`});return new Uint8Array(n)}catch(e){throw Error(`Failed to parse private key. Error: ${e instanceof Error?e.message:e}`)}}function $e(e,t){if(Q&&Q.pem===e&&Q.passphrase===t)return Q.key;let n=(async()=>Y().importKey(`pkcs8`,Qe(e,t),{name:`RSA-OAEP`,hash:`SHA-256`},!1,[`decrypt`]))();return Q={pem:e,passphrase:t,key:n},n.catch(()=>{Q?.key===n&&(Q=void 0)}),n}async function et(e,t){if(!t.FLOW_API_PRIVATE_PEM||t.FLOW_API_PRIVATE_PEM.trim()===``)throw Error(`Missing FLOW_API_PRIVATE_PEM. Please set the FLOW_API_PRIVATE_PEM environment variable or pass privatePem via config.`);let{encrypted_aes_key:n,encrypted_flow_data:r,initial_vector:i}=e??{};if(!n||!r||!i)throw Error(`Missing required encryption properties`);let a=t.FLOW_API_PRIVATE_PEM;a.includes(`\\n`)&&(a=a.replace(/\\n/g,`
|
|
15
|
+
`));let o=Y(),s=await $e(a,t.FLOW_API_PASSPHRASE||``),c;try{c=new Uint8Array(await o.decrypt({name:`RSA-OAEP`},s,X(n)))}catch(e){throw Z.error(`[decryptFlowRequestAsync] Failed to decrypt AES key:`,e),Error(`Failed to decrypt the request. Please verify your private key.`)}let l=X(i),u=await o.importKey(`raw`,c,{name:`AES-GCM`},!1,[`decrypt`]),d=await o.decrypt({name:`AES-GCM`,iv:l,tagLength:128},u,X(r));return{decryptedBody:JSON.parse(Ge(new Uint8Array(d))),aesKeyBuffer:c,initialVectorBuffer:l}}async function tt(e,t,n){let r=new Uint8Array(n.length);for(let e=0;e<n.length;e++)r[e]=~(n[e]??0)&255;try{let n=Y(),i=await n.importKey(`raw`,new Uint8Array(t),{name:`AES-GCM`},!1,[`encrypt`]),a=await n.encrypt({name:`AES-GCM`,iv:r,tagLength:128},i,We(JSON.stringify(e||{})));return Ke(new Uint8Array(a))}catch(e){throw Z.error(`[encryptFlowResponseAsync] Response encryption failed:`,e),Error(`Failed to encrypt response. Internal server error.`)}}function nt(e){return typeof e==`object`&&!!e}function $(e){return typeof e==`string`}const rt=[`data_exchange`,`INIT`,`BACK`],it=[`data_exchange`,`INIT`];function at(e){if(!(`flow_token`in e&&$(e.flow_token)&&`action`in e))return!1;let{action:t,version:n,screen:r,data:i}=e,a=n===`3.0`,o=rt.includes(t),s=r===void 0||$(r)&&r!==`SUCCESS`,c=t===`data_exchange`||nt(i);return a&&o&&s&&c}function ot(e){if(!(`flow_token`in e&&$(e.flow_token)&&`action`in e))return!1;let{action:t,screen:n,data:r}=e,i=it.includes(t),a=$(n),o=nt(r)&&`error_key`in r&&$(r.error)&&`error_message`in r&&$(r.error_message);return i&&a&&o}function st(e){return`action`in e&&e.action===`ping`}export{a as AUTHORIZATION_ERROR_CODES,u as BLOCK_USER_ERROR_CODES,d as CALLING_ERROR_CODES,F as CUSTOMER_SERVICE_WINDOW_MS,l as FLOW_ERROR_CODES,I as FREE_ENTRY_POINT_WINDOW_MS,f as GROUP_ERROR_CODES,s as INTEGRITY_ERROR_CODES,Te as Logger,Se as MAX_FREE_ENTRY_POINT_WINDOW_MS,c as SEND_MESSAGE_ERROR_CODES,o as THROTTLING_ERROR_CODES,r as WHATSAPP_ERROR_CODES,C as WhatsAppApiError,w as WhatsAppAuthorizationError,k as WhatsAppBlockUserError,A as WhatsAppCallingError,S as WhatsAppError,O as WhatsAppFlowError,j as WhatsAppGroupError,E as WhatsAppIntegrityError,ue as WhatsAppNetworkError,D as WhatsAppSendMessageError,T as WhatsAppThrottlingError,de as WhatsAppUnknownError,M as WhatsAppValidationError,t as buildFieldsQueryString,Ce as canSendFreeformMessage,U as compareMessageStatus,le as createWhatsAppApiError,Ye as decryptFlowRequest,et as decryptFlowRequestAsync,Xe as encryptFlowResponse,tt as encryptFlowResponseAsync,n as formatConfigTable,Je as generateEncryption,H as getCustomerServiceWindow,we as getFreeEntryPointWindow,g as isApiPermissionErrorCode,oe as isAuthorizationErrorCode,y as isBlockUserErrorCode,b as isCallingErrorCode,at as isFlowDataExchangeRequest,v as isFlowErrorCode,ot as isFlowErrorRequest,st as isFlowPingRequest,x as isGroupErrorCode,ce as isIntegrityErrorCode,ke as isMessageStatusAdvance,N as isMetaError,_ as isSendMessageErrorCode,se as isThrottlingErrorCode,fe as isWhatsAppApiErrorResponse,pe as isWhatsAppAuthorizationError,ve as isWhatsAppBlockUserError,ye as isWhatsAppCallingError,ae as isWhatsAppErrorCode,_e as isWhatsAppFlowError,be as isWhatsAppGroupError,he as isWhatsAppIntegrityError,ge as isWhatsAppSendMessageError,me as isWhatsAppThrottlingError,xe as normalizeMetaError,je as objectToQueryString,Le as parseRateLimitHeaders,Ie as parseRetryAfter,Ae as resolveMessageStatus};
|
|
16
16
|
//# sourceMappingURL=index.js.map
|