meta-cloud-api 3.11.2 → 3.12.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.
@@ -1,5 +1,11 @@
1
1
  function e(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 t(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 n=[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],r=new Set(n),i=[0,3,10,190],a=[4,80007,130429,131048,131056],o=[368,130497,131031],s=[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],c=[139e3,139001,139002,139003,139004],l=[139100,139101,139102,139103],u=[138e3,138001,138002,138003,138004,138005,138006,138007,138009,138012,138013,138018,138038,613],d=[131020,131041,131059,131201,131202,131203,131204,131207,131208,131209,131210,131211,131212,131213,131214,131215],f=new Set(i),p=new Set(a),m=new Set(o),ee=new Set(s),h=new Set(c),g=new Set(l),te=new Set(u),ne=new Set(d);function re(e){return _(e)?!0:r.has(e)}function _(e){return e>=200&&e<300}function ie(e){return _(e)||f.has(e)}function ae(e){return p.has(e)}function oe(e){return m.has(e)}function se(e){return ee.has(e)}function ce(e){return h.has(e)}function v(e){return g.has(e)}function y(e){return te.has(e)}function b(e){return ne.has(e)}var x=class extends Error{constructor(e){super(e),this.name=`WhatsAppError`}},S=class extends x{error;statusCode;rateLimit;constructor(e,t,n){super(e),this.name=`WhatsAppApiError`,this.error=t,this.statusCode=n}},C=class extends S{constructor(e,t,n){super(e,t,n),this.name=`WhatsAppAuthorizationError`}},w=class extends S{constructor(e,t,n){super(e,t,n),this.name=`WhatsAppThrottlingError`}},T=class extends S{constructor(e,t,n){super(e,t,n),this.name=`WhatsAppIntegrityError`}},E=class extends S{constructor(e,t,n){super(e,t,n),this.name=`WhatsAppSendMessageError`}},D=class extends S{constructor(e,t,n){super(e,t,n),this.name=`WhatsAppFlowError`}},O=class extends S{constructor(e,t,n){super(e,t,n),this.name=`WhatsAppBlockUserError`}},k=class extends S{constructor(e,t,n){super(e,t,n),this.name=`WhatsAppCallingError`}},A=class extends S{constructor(e,t,n){super(e,t,n),this.name=`WhatsAppGroupError`}};function le(e,t){let n=e.code;return ie(n)?new C(e.message,e,t):ae(n)?new w(e.message,e,t):oe(n)?new T(e.message,e,t):se(n)?new E(e.message,e,t):ce(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):new S(e.message,e,t)}var ue=class extends x{cause;constructor(e,t){super(e),this.name=`WhatsAppNetworkError`,this.cause=t}},de=class extends x{cause;constructor(e,t){super(e),this.name=`WhatsAppUnknownError`,this.cause=t}},j=class extends Error{constructor(e){super(e),this.name=`WhatsAppValidationError`}};function M(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 M(e)&&re(e.error.code)}function pe(e){return e instanceof C}function me(e){return e instanceof w}function he(e){return e instanceof T}function ge(e){return e instanceof E}function _e(e){return e instanceof D}function ve(e){return e instanceof O}function ye(e){return e instanceof k}function be(e){return e instanceof A}function xe(e,t){if(M(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 N=3600*1e3,P=24*N,F=72*N,Se=168*N,I=1e11;function L(e,t){let n;if(e instanceof Date)n=e.getTime();else if(typeof e==`number`)n=Math.abs(e)<I?e*1e3:e;else if(typeof e==`string`){let t=e.trim();if(/^\d+(\.\d+)?$/.test(t)){let e=Number(t);n=e<I?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 j(`${t} is not a valid timestamp: ${String(e)}`);return n}function R(e,t,n){if(e===void 0)return n;if(typeof e!=`number`||!Number.isFinite(e)||e<0)throw new j(`${t} must be a non-negative number of milliseconds`);return e}function z(e,t,n,r){if(!Number.isFinite(new Date(t).getTime()))throw new j(`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 B=Object.freeze({isOpen:!1,expiresAt:null,remainingMs:0});function V(e,t={}){let n=R(t.safetyMarginMs,`safetyMarginMs`,0),r=t.now===void 0?Date.now():L(t.now,`now`);if(e==null)return{...B};let i=L(e,`lastInboundAt`);return z(i,i+P,r,n)}function Ce(e,t={}){return V(e,t).isOpen}function we(e,t={}){let n=R(t.safetyMarginMs,`safetyMarginMs`,0),r=R(t.durationMs,`durationMs`,F),i=t.now===void 0?Date.now():L(t.now,`now`);if(e==null)return{...B};let a=L(e,`openedAt`);return z(a,t.expiresAt===void 0?a+r:L(t.expiresAt,`expiresAt`),i,n)}var H=class{name;debugEnabled;constructor(e,t=!1){this.name=e,this.debugEnabled=t}formatData(e){return e.map(e=>typeof e==`object`&&e?Te(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 Te(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 Ee={sent:1,failed:2,delivered:3,read:4};function De(e){return e&&Object.hasOwn(Ee,e)?Ee[e]:0}function U(e,t){return De(e)-De(t)}function Oe(e,t){return e==null||e===``?!0:U(t,e)>0}function ke(e,t){return e==null||e===``||U(t,e)>0?t:e}const Ae=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 je(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 Me(e){return typeof e==`string`?e:void 0}function Ne(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 Pe(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,...Ne(e)},i=Me(e.type),a=K(e.estimated_time_to_regain_access),o=Me(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 Fe(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 Ie(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=je(t);G(a)&&(i.appUsage=Ne(a)),i.businessUseCaseUsage=Pe(je(n));let o=Fe(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}function q(){let e=globalThis.process;return typeof e==`object`&&e?e:void 0}function Le(e){return q()?.env?.[e]}function Re(){return Le(`DEBUG`)===`true`}function J(){let e=q()?.getBuiltinModule;if(typeof e!=`function`)return q(),void 0;try{return e(`node:crypto`)}catch{return}}function ze(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 Be=new TextEncoder,Ve=new TextDecoder;function He(e){return Be.encode(e)}function Ue(e){return Ve.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 We(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 H(`FLOW_ENCRYPTION_UTILS`,Re());function Ge(){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 Ke(e){Z.info(`[generateEncryption] Starting key pair generation`);let t=Ge(),n=e||Le(`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 qe(e,t){Z.info(`[decryptFlowRequest] Starting Flow request decryption`);let n=ze(`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 n=[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],r=new Set(n),i=[0,3,10,190],a=[4,80007,130429,131048,131056],o=[368,130497,131031],s=[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],c=[139e3,139001,139002,139003,139004],l=[139100,139101,139102,139103],u=[138e3,138001,138002,138003,138004,138005,138006,138007,138009,138012,138013,138018,138038,613],d=[131020,131041,131059,131201,131202,131203,131204,131207,131208,131209,131210,131211,131212,131213,131214,131215],f=new Set(i),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);function ie(e){return g(e)?!0:r.has(e)}function g(e){return e>=200&&e<300}function ae(e){return g(e)||f.has(e)}function oe(e){return p.has(e)}function se(e){return m.has(e)}function ce(e){return ee.has(e)}function _(e){return h.has(e)}function le(e){return te.has(e)}function v(e){return ne.has(e)}function y(e){return re.has(e)}var b=class extends Error{constructor(e){super(e),this.name=`WhatsAppError`}},x=class extends b{error;statusCode;rateLimit;constructor(e,t,n){super(e),this.name=`WhatsAppApiError`,this.error=t,this.statusCode=n}},S=class extends x{constructor(e,t,n){super(e,t,n),this.name=`WhatsAppAuthorizationError`}},C=class extends x{constructor(e,t,n){super(e,t,n),this.name=`WhatsAppThrottlingError`}},w=class extends x{constructor(e,t,n){super(e,t,n),this.name=`WhatsAppIntegrityError`}},T=class extends x{constructor(e,t,n){super(e,t,n),this.name=`WhatsAppSendMessageError`}},E=class extends x{constructor(e,t,n){super(e,t,n),this.name=`WhatsAppFlowError`}},D=class extends x{constructor(e,t,n){super(e,t,n),this.name=`WhatsAppBlockUserError`}},O=class extends x{constructor(e,t,n){super(e,t,n),this.name=`WhatsAppCallingError`}},k=class extends x{constructor(e,t,n){super(e,t,n),this.name=`WhatsAppGroupError`}};function ue(e,t){let n=e.code;return ae(n)?new S(e.message,e,t):oe(n)?new C(e.message,e,t):se(n)?new w(e.message,e,t):ce(n)?new T(e.message,e,t):_(n)?new E(e.message,e,t):le(n)?new D(e.message,e,t):v(n)?new O(e.message,e,t):y(n)?new k(e.message,e,t):new x(e.message,e,t)}var de=class extends b{cause;constructor(e,t){super(e),this.name=`WhatsAppNetworkError`,this.cause=t}},fe=class extends b{cause;constructor(e,t){super(e),this.name=`WhatsAppUnknownError`,this.cause=t}},A=class extends Error{constructor(e){super(e),this.name=`WhatsAppValidationError`}};function j(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 pe(e){return j(e)&&ie(e.error.code)}function me(e){return e instanceof S}function he(e){return e instanceof C}function ge(e){return e instanceof w}function _e(e){return e instanceof T}function ve(e){return e instanceof E}function ye(e){return e instanceof D}function be(e){return e instanceof O}function xe(e){return e instanceof k}function Se(e,t){if(j(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 M=3600*1e3,N=24*M,P=72*M,Ce=168*M,F=1e11;function I(e,t){let n;if(e instanceof Date)n=e.getTime();else if(typeof e==`number`)n=Math.abs(e)<F?e*1e3:e;else if(typeof e==`string`){let t=e.trim();if(/^\d+(\.\d+)?$/.test(t)){let e=Number(t);n=e<F?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 A(`${t} is not a valid timestamp: ${String(e)}`);return n}function L(e,t,n){if(e===void 0)return n;if(typeof e!=`number`||!Number.isFinite(e)||e<0)throw new A(`${t} must be a non-negative number of milliseconds`);return e}function R(e,t,n,r){if(!Number.isFinite(new Date(t).getTime()))throw new A(`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 z=Object.freeze({isOpen:!1,expiresAt:null,remainingMs:0});function B(e,t={}){let n=L(t.safetyMarginMs,`safetyMarginMs`,0),r=t.now===void 0?Date.now():I(t.now,`now`);if(e==null)return{...z};let i=I(e,`lastInboundAt`);return R(i,i+N,r,n)}function we(e,t={}){return B(e,t).isOpen}function Te(e,t={}){let n=L(t.safetyMarginMs,`safetyMarginMs`,0),r=L(t.durationMs,`durationMs`,P),i=t.now===void 0?Date.now():I(t.now,`now`);if(e==null)return{...z};let a=I(e,`openedAt`);return R(a,t.expiresAt===void 0?a+r:I(t.expiresAt,`expiresAt`),i,n)}var V=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 H(e,t){return Oe(e)-Oe(t)}function ke(e,t){return e==null||e===``?!0:H(t,e)>0}function Ae(e,t){return e==null||e===``||H(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 U(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 W(e){return typeof e==`object`&&!!e&&!Array.isArray(e)}function G(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=G(e.call_count),r=G(e.total_cputime),i=G(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(!W(e))return[];let t=[];for(let[n,r]of Object.entries(e))if(Array.isArray(r))for(let e of r){if(!W(e))continue;let r={businessId:n,...Pe(e)},i=Ne(e.type),a=G(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=U(e,`x-app-usage`),n=U(e,`x-business-use-case-usage`),r=U(e,`retry-after`);if(t===void 0&&n===void 0&&r===void 0)return;let i={businessUseCaseUsage:[]},a=Me(t);W(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}function K(e,t){return e.split(`
3
+ `).map(e=>{let n=/^(\s*)(.*?)(\s*)$/s.exec(e);if(!n)return e;let[,r,i,a]=n;return i?`${r}${t}${i}${t}${a}`:e}).join(`
4
+ `)}function Re(e){return K(e,`*`)}function ze(e){return K(e,`_`)}function Be(e){return K(e,`~`)}function Ve(e){return K(e,"`")}function He(e){return e.trim()===``?e:`\`\`\`${e}\`\`\``}function Ue(e){return e.split(`
5
+ `).map(e=>`> ${e}`).join(`
6
+ `)}function We(e){return e.map(e=>`- ${e}`).join(`
7
+ `)}function Ge(e){return e.map((e,t)=>`${t+1}. ${e}`).join(`
8
+ `)}function q(){let e=globalThis.process;return typeof e==`object`&&e?e:void 0}function Ke(e){return q()?.env?.[e]}function qe(){return Ke(`DEBUG`)===`true`}function J(){let e=q()?.getBuiltinModule;if(typeof e!=`function`)return q(),void 0;try{return e(`node:crypto`)}catch{return}}function Je(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 Ye=new TextEncoder,Xe=new TextDecoder;function Ze(e){return Ye.encode(e)}function Qe(e){return Xe.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 $e(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 V(`FLOW_ENCRYPTION_UTILS`,qe());function et(){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 tt(e){Z.info(`[generateEncryption] Starting key pair generation`);let t=et(),n=e||Ke(`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 nt(e,t){Z.info(`[decryptFlowRequest] Starting Flow request decryption`);let n=Je(`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
9
  `));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
10
 
5
11
  Your key is in PKCS#1 format with unsupported encryption (DES-EDE3-CBC).`,n+=`
@@ -10,7 +16,7 @@ Your key is in PKCS#1 format (-----BEGIN RSA PRIVATE KEY-----).`,t+=`
10
16
  Please convert it to PKCS#8 format using:`,t+=`
11
17
  openssl pkcs8 -topk8 -inform PEM -outform PEM -in old_key.pem -out new_key.pem`):l||(t+=`
12
18
 
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 g=Buffer.concat([h.update(m),h.final()]).toString(`utf-8`);return Z.info(`[decryptFlowRequest] Flow request decrypted successfully`),{decryptedBody:JSON.parse(g),aesKeyBuffer:d,initialVectorBuffer:p}}function Je(e,t,n){Z.info(`[encryptFlowResponse] Starting Flow response encryption`);let r=ze(`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 Ye=/-----BEGIN ([A-Z ]+)-----([\s\S]*?)-----END \1-----/;let Q;function Xe(e,t){let n=Ye.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 Ze(e,t){if(Q&&Q.pem===e&&Q.passphrase===t)return Q.key;let n=(async()=>Y().importKey(`pkcs8`,Xe(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 Qe(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 Ze(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(Ue(new Uint8Array(d))),aesKeyBuffer:c,initialVectorBuffer:l}}async function $e(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,He(JSON.stringify(e||{})));return We(new Uint8Array(a))}catch(e){throw Z.error(`[encryptFlowResponseAsync] Response encryption failed:`,e),Error(`Failed to encrypt response. Internal server error.`)}}function et(e){return typeof e==`object`&&!!e}function $(e){return typeof e==`string`}const tt=[`data_exchange`,`INIT`,`BACK`],nt=[`data_exchange`,`INIT`];function rt(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=tt.includes(t),s=r===void 0||$(r)&&r!==`SUCCESS`,c=t===`data_exchange`||et(i);return a&&o&&s&&c}function it(e){if(!(`flow_token`in e&&$(e.flow_token)&&`action`in e))return!1;let{action:t,screen:n,data:r}=e,i=nt.includes(t),a=$(n),o=et(r)&&`error_key`in r&&$(r.error)&&`error_message`in r&&$(r.error_message);return i&&a&&o}function at(e){return`action`in e&&e.action===`ping`}export{i as AUTHORIZATION_ERROR_CODES,l as BLOCK_USER_ERROR_CODES,u as CALLING_ERROR_CODES,P as CUSTOMER_SERVICE_WINDOW_MS,c as FLOW_ERROR_CODES,F as FREE_ENTRY_POINT_WINDOW_MS,d as GROUP_ERROR_CODES,o as INTEGRITY_ERROR_CODES,H as Logger,Se as MAX_FREE_ENTRY_POINT_WINDOW_MS,s as SEND_MESSAGE_ERROR_CODES,a as THROTTLING_ERROR_CODES,n as WHATSAPP_ERROR_CODES,S as WhatsAppApiError,C as WhatsAppAuthorizationError,O as WhatsAppBlockUserError,k as WhatsAppCallingError,x as WhatsAppError,D as WhatsAppFlowError,A as WhatsAppGroupError,T as WhatsAppIntegrityError,ue as WhatsAppNetworkError,E as WhatsAppSendMessageError,w as WhatsAppThrottlingError,de as WhatsAppUnknownError,j as WhatsAppValidationError,e as buildFieldsQueryString,Ce as canSendFreeformMessage,U as compareMessageStatus,le as createWhatsAppApiError,qe as decryptFlowRequest,Qe as decryptFlowRequestAsync,Je as encryptFlowResponse,$e as encryptFlowResponseAsync,t as formatConfigTable,Ke as generateEncryption,V as getCustomerServiceWindow,we as getFreeEntryPointWindow,_ as isApiPermissionErrorCode,ie as isAuthorizationErrorCode,v as isBlockUserErrorCode,y as isCallingErrorCode,rt as isFlowDataExchangeRequest,ce as isFlowErrorCode,it as isFlowErrorRequest,at as isFlowPingRequest,b as isGroupErrorCode,oe as isIntegrityErrorCode,Oe as isMessageStatusAdvance,M as isMetaError,se as isSendMessageErrorCode,ae as isThrottlingErrorCode,fe as isWhatsAppApiErrorResponse,pe as isWhatsAppAuthorizationError,ve as isWhatsAppBlockUserError,ye as isWhatsAppCallingError,re as isWhatsAppErrorCode,_e as isWhatsAppFlowError,be as isWhatsAppGroupError,he as isWhatsAppIntegrityError,ge as isWhatsAppSendMessageError,me as isWhatsAppThrottlingError,xe as normalizeMetaError,Ae as objectToQueryString,Ie as parseRateLimitHeaders,Fe as parseRetryAfter,ke as resolveMessageStatus};
19
+ 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 rt(e,t,n){Z.info(`[encryptFlowResponse] Starting Flow response encryption`);let r=Je(`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 it=/-----BEGIN ([A-Z ]+)-----([\s\S]*?)-----END \1-----/;let Q;function at(e,t){let n=it.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:
20
+ 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 ot(e,t){if(Q&&Q.pem===e&&Q.passphrase===t)return Q.key;let n=(async()=>Y().importKey(`pkcs8`,at(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 st(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,`
21
+ `));let o=Y(),s=await ot(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(Qe(new Uint8Array(d))),aesKeyBuffer:c,initialVectorBuffer:l}}async function ct(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,Ze(JSON.stringify(e||{})));return $e(new Uint8Array(a))}catch(e){throw Z.error(`[encryptFlowResponseAsync] Response encryption failed:`,e),Error(`Failed to encrypt response. Internal server error.`)}}function lt(e){return typeof e==`object`&&!!e}function $(e){return typeof e==`string`}const ut=[`data_exchange`,`INIT`,`BACK`],dt=[`data_exchange`,`INIT`];function ft(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=ut.includes(t),s=r===void 0||$(r)&&r!==`SUCCESS`,c=t===`data_exchange`||lt(i);return a&&o&&s&&c}function pt(e){if(!(`flow_token`in e&&$(e.flow_token)&&`action`in e))return!1;let{action:t,screen:n,data:r}=e,i=dt.includes(t),a=$(n),o=lt(r)&&`error_key`in r&&$(r.error)&&`error_message`in r&&$(r.error_message);return i&&a&&o}function mt(e){return`action`in e&&e.action===`ping`}export{i as AUTHORIZATION_ERROR_CODES,l as BLOCK_USER_ERROR_CODES,u as CALLING_ERROR_CODES,N as CUSTOMER_SERVICE_WINDOW_MS,c as FLOW_ERROR_CODES,P as FREE_ENTRY_POINT_WINDOW_MS,d as GROUP_ERROR_CODES,o as INTEGRITY_ERROR_CODES,V as Logger,Ce as MAX_FREE_ENTRY_POINT_WINDOW_MS,s as SEND_MESSAGE_ERROR_CODES,a as THROTTLING_ERROR_CODES,n as WHATSAPP_ERROR_CODES,x as WhatsAppApiError,S as WhatsAppAuthorizationError,D as WhatsAppBlockUserError,O as WhatsAppCallingError,b as WhatsAppError,E as WhatsAppFlowError,k as WhatsAppGroupError,w as WhatsAppIntegrityError,de as WhatsAppNetworkError,T as WhatsAppSendMessageError,C as WhatsAppThrottlingError,fe as WhatsAppUnknownError,A as WhatsAppValidationError,Re as bold,e as buildFieldsQueryString,We as bulletList,we as canSendFreeformMessage,H as compareMessageStatus,ue as createWhatsAppApiError,nt as decryptFlowRequest,st as decryptFlowRequestAsync,rt as encryptFlowResponse,ct as encryptFlowResponseAsync,t as formatConfigTable,tt as generateEncryption,B as getCustomerServiceWindow,Te as getFreeEntryPointWindow,Ve as inlineCode,g as isApiPermissionErrorCode,ae as isAuthorizationErrorCode,le as isBlockUserErrorCode,v as isCallingErrorCode,ft as isFlowDataExchangeRequest,_ as isFlowErrorCode,pt as isFlowErrorRequest,mt as isFlowPingRequest,y as isGroupErrorCode,se as isIntegrityErrorCode,ke as isMessageStatusAdvance,j as isMetaError,ce as isSendMessageErrorCode,oe as isThrottlingErrorCode,pe as isWhatsAppApiErrorResponse,me as isWhatsAppAuthorizationError,ye as isWhatsAppBlockUserError,be as isWhatsAppCallingError,ie as isWhatsAppErrorCode,ve as isWhatsAppFlowError,xe as isWhatsAppGroupError,ge as isWhatsAppIntegrityError,_e as isWhatsAppSendMessageError,he as isWhatsAppThrottlingError,ze as italic,He as monospace,Se as normalizeMetaError,Ge as numberedList,je as objectToQueryString,Le as parseRateLimitHeaders,Ie as parseRetryAfter,Ue as quote,Ae as resolveMessageStatus,Be as strikethrough};
16
22
  //# sourceMappingURL=index.js.map