meta-cloud-api 1.1.4 → 1.1.5

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.
Files changed (152) hide show
  1. package/dist/base.d.ts +19 -0
  2. package/dist/base.d.ts.map +1 -0
  3. package/dist/chunk-PECeCxCb.js +15 -0
  4. package/dist/config.d.ts +80 -0
  5. package/dist/config.d.ts.map +1 -0
  6. package/dist/{base-CfDkvT1x.d.ts → enums.d.ts} +3 -142
  7. package/dist/enums.d.ts.map +1 -0
  8. package/dist/enums.js +681 -0
  9. package/dist/enums.js.map +1 -0
  10. package/dist/{index-DQkgkiB6.d.ts → httpsClient.d.ts} +3 -12
  11. package/dist/httpsClient.d.ts.map +1 -0
  12. package/dist/index.d.ts +4386 -21
  13. package/dist/index.d.ts.map +1 -0
  14. package/dist/index.js +3436 -1
  15. package/dist/index.js.map +1 -1
  16. package/dist/logger.d.ts +11 -0
  17. package/dist/logger.d.ts.map +1 -0
  18. package/dist/request.d.ts +52 -0
  19. package/dist/request.d.ts.map +1 -0
  20. package/package.json +13 -22
  21. package/dist/WebhookProcessor-BUZFeZD_.js +0 -3
  22. package/dist/WebhookProcessor-BUZFeZD_.js.map +0 -1
  23. package/dist/WebhookProcessor-Dq2Pa2cY.d.ts +0 -718
  24. package/dist/WebhookProcessor-Dq2Pa2cY.d.ts.map +0 -1
  25. package/dist/api/encryption/index.d.ts +0 -3
  26. package/dist/api/encryption/index.js +0 -1
  27. package/dist/api/flow/index.d.ts +0 -5
  28. package/dist/api/flow/index.js +0 -1
  29. package/dist/api/index.d.ts +0 -17
  30. package/dist/api/index.js +0 -1
  31. package/dist/api/media/index.d.ts +0 -3
  32. package/dist/api/media/index.js +0 -1
  33. package/dist/api/messages/builders/index.d.ts +0 -539
  34. package/dist/api/messages/builders/index.d.ts.map +0 -1
  35. package/dist/api/messages/builders/index.js +0 -2
  36. package/dist/api/messages/builders/index.js.map +0 -1
  37. package/dist/api/messages/index.d.ts +0 -4
  38. package/dist/api/messages/index.js +0 -1
  39. package/dist/api/phone/index.d.ts +0 -3
  40. package/dist/api/phone/index.js +0 -1
  41. package/dist/api/profile/index.d.ts +0 -3
  42. package/dist/api/profile/index.js +0 -1
  43. package/dist/api/qrCode/index.d.ts +0 -3
  44. package/dist/api/qrCode/index.js +0 -1
  45. package/dist/api/registration/index.d.ts +0 -3
  46. package/dist/api/registration/index.js +0 -1
  47. package/dist/api/template/index.d.ts +0 -3
  48. package/dist/api/template/index.js +0 -1
  49. package/dist/api/twoStepVerification/index.d.ts +0 -3
  50. package/dist/api/twoStepVerification/index.js +0 -1
  51. package/dist/api/waba/index.d.ts +0 -3
  52. package/dist/api/waba/index.js +0 -1
  53. package/dist/api-8hRAOyaL.js +0 -1
  54. package/dist/base-CfDkvT1x.d.ts.map +0 -1
  55. package/dist/base-D-cXu_lA.js +0 -2
  56. package/dist/base-D-cXu_lA.js.map +0 -1
  57. package/dist/buildFieldsQueryString-Cr-jz3p0.js +0 -2
  58. package/dist/buildFieldsQueryString-Cr-jz3p0.js.map +0 -1
  59. package/dist/chunk-CTAAG5j7.js +0 -1
  60. package/dist/common-C6FXBDm7.js +0 -2
  61. package/dist/common-C6FXBDm7.js.map +0 -1
  62. package/dist/common-CVbsmD26.d.ts +0 -426
  63. package/dist/common-CVbsmD26.d.ts.map +0 -1
  64. package/dist/common-CvPVD1o6.d.ts +0 -406
  65. package/dist/common-CvPVD1o6.d.ts.map +0 -1
  66. package/dist/core/webhook/frameworks/express.d.ts +0 -20
  67. package/dist/core/webhook/frameworks/express.js +0 -1
  68. package/dist/core/webhook/frameworks/nextjs-app.d.ts +0 -45
  69. package/dist/core/webhook/frameworks/nextjs-app.d.ts.map +0 -1
  70. package/dist/core/webhook/frameworks/nextjs-app.js +0 -2
  71. package/dist/core/webhook/frameworks/nextjs-app.js.map +0 -1
  72. package/dist/core/webhook/frameworks/nextjs.d.ts +0 -20
  73. package/dist/core/webhook/frameworks/nextjs.js +0 -1
  74. package/dist/core/webhook/index.d.ts +0 -20
  75. package/dist/core/webhook/index.js +0 -1
  76. package/dist/core/whatsapp/index.d.ts +0 -18
  77. package/dist/core/whatsapp/index.js +0 -1
  78. package/dist/encryption-Cwc0xcVL.js +0 -2
  79. package/dist/encryption-Cwc0xcVL.js.map +0 -1
  80. package/dist/enums-CSUpFXb8.js +0 -2
  81. package/dist/enums-CSUpFXb8.js.map +0 -1
  82. package/dist/express-B6fQdflY.d.ts +0 -78
  83. package/dist/express-B6fQdflY.d.ts.map +0 -1
  84. package/dist/express-CrfNLYMM.js +0 -2
  85. package/dist/express-CrfNLYMM.js.map +0 -1
  86. package/dist/flow-CVes0Qus.js +0 -2
  87. package/dist/flow-CVes0Qus.js.map +0 -1
  88. package/dist/flowTypeGuards-Gn3-slCW.js +0 -2
  89. package/dist/flowTypeGuards-Gn3-slCW.js.map +0 -1
  90. package/dist/handler-BGqjZ0xg.js +0 -2
  91. package/dist/handler-BGqjZ0xg.js.map +0 -1
  92. package/dist/index-3KglHVAg.d.ts +0 -354
  93. package/dist/index-3KglHVAg.d.ts.map +0 -1
  94. package/dist/index-BNeg6hHx.d.ts +0 -99
  95. package/dist/index-BNeg6hHx.d.ts.map +0 -1
  96. package/dist/index-BiTq23oi.d.ts +0 -34
  97. package/dist/index-BiTq23oi.d.ts.map +0 -1
  98. package/dist/index-BmfnREgM.d.ts +0 -47
  99. package/dist/index-BmfnREgM.d.ts.map +0 -1
  100. package/dist/index-CaGffSja.d.ts +0 -24
  101. package/dist/index-CaGffSja.d.ts.map +0 -1
  102. package/dist/index-CeTmbIXi.d.ts +0 -180
  103. package/dist/index-CeTmbIXi.d.ts.map +0 -1
  104. package/dist/index-CoyByMuM.d.ts +0 -137
  105. package/dist/index-CoyByMuM.d.ts.map +0 -1
  106. package/dist/index-CwujtcvH.d.ts +0 -370
  107. package/dist/index-CwujtcvH.d.ts.map +0 -1
  108. package/dist/index-DQ7z58xp.d.ts +0 -104
  109. package/dist/index-DQ7z58xp.d.ts.map +0 -1
  110. package/dist/index-DQkgkiB6.d.ts.map +0 -1
  111. package/dist/index-LKrIp3Oo.d.ts +0 -1
  112. package/dist/index-_-06JPan.d.ts +0 -143
  113. package/dist/index-_-06JPan.d.ts.map +0 -1
  114. package/dist/index-a_YS40Iv.d.ts +0 -91
  115. package/dist/index-a_YS40Iv.d.ts.map +0 -1
  116. package/dist/index-d7TLqtYh.d.ts +0 -171
  117. package/dist/index-d7TLqtYh.d.ts.map +0 -1
  118. package/dist/isMetaError-B3AglYeY.d.ts +0 -66
  119. package/dist/isMetaError-B3AglYeY.d.ts.map +0 -1
  120. package/dist/media-Dw5OGzDD.js +0 -2
  121. package/dist/media-Dw5OGzDD.js.map +0 -1
  122. package/dist/messages-h5-NW8QO.js +0 -2
  123. package/dist/messages-h5-NW8QO.js.map +0 -1
  124. package/dist/nextjs-DxRCL4t3.js +0 -2
  125. package/dist/nextjs-DxRCL4t3.js.map +0 -1
  126. package/dist/objectToQueryString-CAHI0qTs.js +0 -2
  127. package/dist/objectToQueryString-CAHI0qTs.js.map +0 -1
  128. package/dist/phone-CZyWLyWB.js +0 -2
  129. package/dist/phone-CZyWLyWB.js.map +0 -1
  130. package/dist/profile-Bb7GDP0n.js +0 -2
  131. package/dist/profile-Bb7GDP0n.js.map +0 -1
  132. package/dist/qrCode-CeZEtX9J.js +0 -2
  133. package/dist/qrCode-CeZEtX9J.js.map +0 -1
  134. package/dist/registration-BkjhC3xw.js +0 -2
  135. package/dist/registration-BkjhC3xw.js.map +0 -1
  136. package/dist/template-Bgy-BCXJ.js +0 -2
  137. package/dist/template-Bgy-BCXJ.js.map +0 -1
  138. package/dist/twoStepVerification-DYlYF_P5.js +0 -2
  139. package/dist/twoStepVerification-DYlYF_P5.js.map +0 -1
  140. package/dist/types/index.d.ts +0 -3
  141. package/dist/types/index.js +0 -1
  142. package/dist/utils/index.d.ts +0 -43
  143. package/dist/utils/index.d.ts.map +0 -1
  144. package/dist/utils/index.js +0 -1
  145. package/dist/version-BUuqrHc6.js +0 -3
  146. package/dist/version-BUuqrHc6.js.map +0 -1
  147. package/dist/waba-SF2W3z2U.js +0 -2
  148. package/dist/waba-SF2W3z2U.js.map +0 -1
  149. package/dist/webhook-D4DQ01Xq.js +0 -2
  150. package/dist/webhook-D4DQ01Xq.js.map +0 -1
  151. package/dist/whatsapp-B85mxH5f.js +0 -10
  152. package/dist/whatsapp-B85mxH5f.js.map +0 -1
@@ -1 +0,0 @@
1
- {"version":3,"file":"template-Bgy-BCXJ.js","names":["header: TemplateHeader","body: TemplateBody","buttons: TemplateButton[]","urlButton: any","flowButton: any","components: ComponentTypes[]","carouselComponents: ComponentTypes[]","carouselCards: MediaCarouselCard[]","cardComponents: (TemplateHeader | TemplateBody | TemplateButtons)[]","carouselCards: ProductCarouselCard[]"],"sources":["../src/api/template/TemplateApi.ts","../src/api/template/factories/index.ts"],"sourcesContent":["import { BaseAPI } from '../../types/base';\nimport type { WabaConfigType } from '../../types/config';\nimport { HttpMethodsEnum, WabaConfigEnum } from '../../types/enums';\nimport type { RequesterClass, ResponsePagination, ResponseSuccess } from '../../types/request';\nimport { objectToQueryString } from '../../utils/objectToQueryString';\nimport type {\n TemplateClass,\n TemplateDeleteParams,\n TemplateGetParams,\n TemplateRequestBody,\n TemplateResponse,\n} from './types';\n\nexport default class TemplateApi extends BaseAPI implements TemplateClass {\n private readonly endpoint = 'message_templates';\n\n constructor(config: WabaConfigType, client: RequesterClass) {\n super(config, client);\n }\n\n async getTemplate(templateId: string): Promise<TemplateResponse> {\n return this.sendJson(HttpMethodsEnum.Get, `${templateId}`, this.config[WabaConfigEnum.RequestTimeout], null);\n }\n\n async updateTemplate(templateId: string, template: Partial<TemplateRequestBody>): Promise<ResponseSuccess> {\n return this.sendJson(\n HttpMethodsEnum.Post,\n `${templateId}`,\n this.config[WabaConfigEnum.RequestTimeout],\n JSON.stringify(template),\n );\n }\n\n async getTemplates(params?: TemplateGetParams): Promise<ResponsePagination<TemplateResponse>> {\n return this.sendJson(\n HttpMethodsEnum.Get,\n `${this.config[WabaConfigEnum.BusinessAcctId]}/${this.endpoint}${objectToQueryString(params ?? {})}`,\n this.config[WabaConfigEnum.RequestTimeout],\n null,\n );\n }\n\n async createTemplate(template: TemplateRequestBody): Promise<TemplateResponse> {\n return this.sendJson(\n HttpMethodsEnum.Post,\n `${this.config[WabaConfigEnum.BusinessAcctId]}/${this.endpoint}`,\n this.config[WabaConfigEnum.RequestTimeout],\n JSON.stringify(template),\n );\n }\n\n async deleteTemplate(params: TemplateDeleteParams): Promise<ResponseSuccess> {\n return this.sendJson(\n HttpMethodsEnum.Delete,\n `${this.config[WabaConfigEnum.BusinessAcctId]}/${this.endpoint}${objectToQueryString(params)}`,\n this.config[WabaConfigEnum.RequestTimeout],\n null,\n );\n }\n}\n","import { CategoryEnum } from '../../../types/enums';\nimport type {\n ComponentTypes,\n MediaCarouselCard,\n ProductCarouselCard,\n TemplateBody,\n TemplateButton,\n TemplateButtons,\n TemplateFooter,\n TemplateHeader,\n TemplateRequestBody,\n} from '../types';\nimport type {\n AuthenticationTemplateOptions,\n BodyOptions,\n ButtonOptions,\n CatalogTemplateOptions,\n CouponTemplateOptions,\n FooterOptions,\n HeaderOptions,\n LimitedTimeOfferTemplateOptions,\n MediaCardCarouselTemplateOptions,\n MPMTemplateOptions,\n OTPTemplateOptions,\n ProductCardCarouselTemplateOptions,\n SPMTemplateOptions,\n TemplateOptions,\n TemplateParameter,\n} from '../types';\n\n// Helper function to create header component\nfunction createHeader(options: HeaderOptions): TemplateHeader {\n const header: TemplateHeader = {\n type: 'HEADER',\n format: options.format,\n };\n\n if (options.text) {\n header.text = options.text;\n }\n\n if (options.example) {\n header.example = options.example;\n }\n\n return header;\n}\n\n// Helper function to create body component\nfunction createBody(options: BodyOptions): TemplateBody {\n const body: TemplateBody = {\n type: 'BODY',\n text: options.text,\n };\n\n if (options.example) {\n body.example = options.example;\n }\n\n return body;\n}\n\n// Helper function to create footer component\nfunction createFooter(options: FooterOptions): TemplateFooter {\n return {\n type: 'FOOTER',\n text: options.text,\n };\n}\n\n// Helper function to create buttons\nfunction createButtons(options: ButtonOptions): ComponentTypes[] {\n const buttons: TemplateButton[] = [];\n\n if (options.phone_number) {\n buttons.push({\n type: 'PHONE_NUMBER',\n text: options.phone_number.text,\n phone_number: options.phone_number.phone_number,\n });\n }\n\n if (options.url) {\n const urlButton: any = {\n type: 'URL',\n text: options.url.text,\n url: options.url.url,\n };\n if (options.url.example) {\n urlButton.example = [options.url.example];\n }\n buttons.push(urlButton);\n }\n\n if (options.quick_reply) {\n options.quick_reply.forEach((qr) => {\n buttons.push({\n type: 'QUICK_REPLY',\n text: qr.text,\n });\n });\n }\n\n if (options.copy_code) {\n buttons.push({\n type: 'COPY_CODE',\n example: options.copy_code.example,\n });\n }\n\n if (options.flow) {\n const flowButton: any = {\n type: 'FLOW',\n text: options.flow.text,\n };\n if (options.flow.flow_id) flowButton.flow_id = options.flow.flow_id;\n if (options.flow.flow_name) flowButton.flow_name = options.flow.flow_name;\n if (options.flow.flow_json) flowButton.flow_json = options.flow.flow_json;\n if (options.flow.flow_action) flowButton.flow_action = options.flow.flow_action;\n if (options.flow.navigate_screen) flowButton.navigate_screen = options.flow.navigate_screen;\n buttons.push(flowButton);\n }\n\n if (options.mpm) {\n buttons.push({ type: 'MPM' });\n }\n\n if (options.otp) {\n buttons.push({ type: 'OTP' });\n }\n\n if (options.spm) {\n buttons.push({ type: 'SPM' });\n }\n\n return buttons.length > 0\n ? [\n {\n type: 'BUTTONS',\n buttons: buttons,\n },\n ]\n : [];\n}\n\n// Helper function to format parameter examples\nfunction formatParameterExamples(parameters: TemplateParameter[]): string[] {\n return parameters.map((param) => {\n switch (param.type) {\n case 'text':\n return param.value;\n case 'currency':\n return param.fallback_value;\n case 'date_time':\n return param.fallback_value;\n case 'image':\n case 'video':\n case 'document':\n return param.handle || param.link || '';\n case 'location':\n return param.name || '';\n case 'product':\n return param.product_retailer_id;\n default:\n return '';\n }\n });\n}\n\n// Generic template factory\nexport function createTemplate(options: TemplateOptions): TemplateRequestBody {\n const components: ComponentTypes[] = [];\n\n if (options.header) {\n components.push(createHeader(options.header));\n }\n\n if (options.body) {\n components.push(createBody(options.body));\n }\n\n if (options.footer) {\n components.push(createFooter(options.footer));\n }\n\n if (options.buttons) {\n components.push(...createButtons(options.buttons));\n }\n\n if (options.carousel) {\n // Handle carousel components\n const carouselComponents: ComponentTypes[] = [];\n options.carousel.cards.forEach((card, index) => {\n if (card.image || card.video || card.product) {\n const format = card.image ? 'IMAGE' : card.video ? 'VIDEO' : 'DOCUMENT';\n const handle = card.image || card.video || card.product || '';\n carouselComponents.push({\n type: 'HEADER',\n format: format,\n example: {\n header_handle: [handle],\n },\n });\n }\n if (card.body) {\n carouselComponents.push({\n type: 'BODY',\n text: card.body,\n example: card.bodyParameters\n ? {\n body_text: [formatParameterExamples(card.bodyParameters)],\n }\n : undefined,\n });\n }\n if (card.buttons) {\n carouselComponents.push(...createButtons(card.buttons));\n }\n });\n components.push(...carouselComponents);\n }\n\n if (options.limitedTimeOffer) {\n components.push({\n type: 'LIMITED_TIME_OFFER',\n limited_time_offer: {\n expiration_time_ms: options.limitedTimeOffer.expiration_time_ms,\n },\n });\n }\n\n return {\n name: options.name,\n language: options.language,\n category: options.category,\n components: components.length > 0 ? components : undefined,\n };\n}\n\n// OTP Template Factory\nexport function createOTPTemplate(options: OTPTemplateOptions): TemplateRequestBody {\n const components: ComponentTypes[] = [];\n\n // Add security recommendation if requested\n let bodyText = '*{{1}}* is your verification code.';\n if (options.add_security_recommendation) {\n bodyText += ' For your security, do not share this code.';\n }\n if (options.code_expiration_minutes) {\n bodyText += ` This code expires in ${options.code_expiration_minutes} minutes.`;\n }\n\n components.push({\n type: 'BODY',\n text: bodyText,\n example: {\n body_text: [['123456']], // Example OTP code\n },\n });\n\n // Add OTP button\n components.push({\n type: 'BUTTONS',\n buttons: [{ type: 'OTP' }],\n });\n\n return {\n name: options.name,\n language: options.language,\n category: CategoryEnum.Authentication,\n components,\n };\n}\n\n// Authentication Template Factory\nexport function createAuthenticationTemplate(options: AuthenticationTemplateOptions): TemplateRequestBody {\n const components: ComponentTypes[] = [];\n\n // Add security message\n let bodyText = 'Your security code is *{{1}}*.';\n if (options.add_security_recommendation) {\n bodyText += ' Do not share this code with anyone.';\n }\n if (options.code_expiration_minutes) {\n bodyText += ` This code expires in ${options.code_expiration_minutes} minutes.`;\n }\n\n components.push({\n type: 'BODY',\n text: bodyText,\n example: {\n body_text: [['ABCD1234']], // Example auth code\n },\n });\n\n // Add copy code button if requested\n if (options.copy_code_button) {\n components.push({\n type: 'BUTTONS',\n buttons: [\n {\n type: 'COPY_CODE',\n example: 'ABCD1234',\n },\n ],\n });\n }\n\n return {\n name: options.name,\n language: options.language,\n category: CategoryEnum.Authentication,\n components,\n };\n}\n\n// Catalog Template Factory\nexport function createCatalogTemplate(options: CatalogTemplateOptions): TemplateRequestBody {\n const components: ComponentTypes[] = [];\n\n if (options.header) {\n components.push(createHeader({ ...options.header, format: 'TEXT' }));\n }\n\n components.push(createBody(options.body));\n\n if (options.footer) {\n components.push(createFooter(options.footer));\n }\n\n // Add catalog button\n components.push({\n type: 'BUTTONS',\n buttons: [\n {\n type: 'CATALOG',\n action: {\n thumbnail_product_retailer_id: options.thumbnail_product_retailer_id,\n },\n },\n ],\n });\n\n return {\n name: options.name,\n language: options.language,\n category: CategoryEnum.Marketing,\n components,\n };\n}\n\n// Coupon Template Factory\nexport function createCouponTemplate(options: CouponTemplateOptions): TemplateRequestBody {\n const components: ComponentTypes[] = [];\n\n if (options.header) {\n components.push(createHeader({ ...options.header, format: 'TEXT' }));\n }\n\n components.push(createBody(options.body));\n\n if (options.footer) {\n components.push(createFooter(options.footer));\n }\n\n // Add copy code button\n components.push({\n type: 'BUTTONS',\n buttons: [\n {\n type: 'COPY_CODE',\n example: options.coupon_code,\n },\n ],\n });\n\n return {\n name: options.name,\n language: options.language,\n category: CategoryEnum.Marketing,\n components,\n };\n}\n\n// Limited Time Offer Template Factory\nexport function createLimitedTimeOfferTemplate(options: LimitedTimeOfferTemplateOptions): TemplateRequestBody {\n const components: ComponentTypes[] = [];\n\n // Add limited time offer component first\n components.push({\n type: 'LIMITED_TIME_OFFER',\n limited_time_offer: {\n expiration_time_ms: options.expiration_time_ms,\n },\n });\n\n if (options.header) {\n components.push(createHeader({ ...options.header, format: 'TEXT' }));\n }\n\n components.push(createBody(options.body));\n\n if (options.footer) {\n components.push(createFooter(options.footer));\n }\n\n return {\n name: options.name,\n language: options.language,\n category: CategoryEnum.Marketing,\n components,\n };\n}\n\n// Media Card Carousel Template Factory\nexport function createMediaCardCarouselTemplate(options: MediaCardCarouselTemplateOptions): TemplateRequestBody {\n const components: ComponentTypes[] = [];\n\n // Add carousel component\n const carouselCards: MediaCarouselCard[] = [];\n options.cards.forEach((card, index) => {\n const cardComponents: (TemplateHeader | TemplateBody | TemplateButtons)[] = [];\n\n // Add header (media)\n cardComponents.push({\n type: 'HEADER' as const,\n format: card.header.format,\n example: card.header.example,\n });\n\n // Add body\n cardComponents.push(createBody(card.body));\n\n // Add buttons if any\n if (card.buttons) {\n cardComponents.push(...(createButtons(card.buttons) as TemplateButtons[]));\n }\n\n carouselCards.push({\n card_index: index,\n components: cardComponents,\n });\n });\n\n components.push({\n type: 'CAROUSEL',\n cards: carouselCards,\n });\n\n return {\n name: options.name,\n language: options.language,\n category: CategoryEnum.Marketing,\n components,\n };\n}\n\n// MPM (Multi-Product Message) Template Factory\nexport function createMPMTemplate(options: MPMTemplateOptions): TemplateRequestBody {\n const components: ComponentTypes[] = [];\n\n if (options.header) {\n components.push(createHeader({ ...options.header, format: 'TEXT' }));\n }\n\n components.push(createBody(options.body));\n\n if (options.footer) {\n components.push(createFooter(options.footer));\n }\n\n // Add MPM button\n components.push({\n type: 'BUTTONS',\n buttons: [\n {\n type: 'MPM',\n action: {\n thumbnail_product_retailer_id: options.thumbnail_product_retailer_id,\n sections: options.sections,\n },\n },\n ],\n });\n\n return {\n name: options.name,\n language: options.language,\n category: CategoryEnum.Marketing,\n components,\n };\n}\n\n// Product Card Carousel Template Factory\nexport function createProductCardCarouselTemplate(options: ProductCardCarouselTemplateOptions): TemplateRequestBody {\n const components: ComponentTypes[] = [];\n\n if (options.header) {\n components.push(createHeader({ ...options.header, format: 'TEXT' }));\n }\n\n components.push(createBody(options.body));\n\n if (options.footer) {\n components.push(createFooter(options.footer));\n }\n\n // Add carousel with product cards\n const carouselCards: ProductCarouselCard[] = options.cards.map((card, index) => ({\n card_index: index,\n components: [\n {\n type: 'HEADER' as const,\n format: 'PRODUCT' as const,\n example: {\n header_handle: [card.product_retailer_id],\n },\n },\n ],\n }));\n\n components.push({\n type: 'CAROUSEL',\n cards: carouselCards,\n });\n\n return {\n name: options.name,\n language: options.language,\n category: CategoryEnum.Marketing,\n components,\n };\n}\n\n// SPM (Single-Product Message) Template Factory\nexport function createSPMTemplate(options: SPMTemplateOptions): TemplateRequestBody {\n const components: ComponentTypes[] = [];\n\n if (options.header) {\n components.push(createHeader({ ...options.header, format: 'TEXT' }));\n }\n\n components.push(createBody(options.body));\n\n if (options.footer) {\n components.push(createFooter(options.footer));\n }\n\n // Add SPM button\n components.push({\n type: 'BUTTONS',\n buttons: [\n {\n type: 'SPM',\n action: {\n product_retailer_id: options.product_retailer_id,\n },\n },\n ],\n });\n\n return {\n name: options.name,\n language: options.language,\n category: CategoryEnum.Marketing,\n components,\n };\n}\n"],"mappings":"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"}
@@ -1,2 +0,0 @@
1
- import{HttpMethodsEnum as e,WabaConfigEnum as t}from"./enums-CSUpFXb8.js";import{BaseAPI as n}from"./base-D-cXu_lA.js";var r=class extends n{constructor(e,t){super(e,t)}async setTwoStepVerificationCode(n){let r={pin:n};return this.sendJson(e.Post,`${this.config[t.PhoneNumberId]}`,this.config[t.RequestTimeout],JSON.stringify(r))}},i=r;export{r as TwoStepVerificationApi,i as twoStepVerification_default};
2
- //# sourceMappingURL=twoStepVerification-DYlYF_P5.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"twoStepVerification-DYlYF_P5.js","names":[],"sources":["../src/api/twoStepVerification/TwoStepVerificationApi.ts","../src/api/twoStepVerification/index.ts"],"sourcesContent":["import { BaseAPI } from '../../types/base';\nimport type { WabaConfigType } from '../../types/config';\nimport { HttpMethodsEnum, WabaConfigEnum } from '../../types/enums';\nimport type { RequesterClass, ResponseSuccess } from '../../types/request';\n\nimport type * as twoStepVerification from './types';\n\n/**\n * API for managing WhatsApp Two-Step Verification.\n *\n * This API allows you to:\n * - Set a two-step verification PIN code\n * - Manage two-step verification settings\n */\nexport default class TwoStepVerificationApi extends BaseAPI implements twoStepVerification.TwoStepVerificationClass {\n constructor(config: WabaConfigType, client: RequesterClass) {\n super(config, client);\n }\n\n /**\n * Set a two-step verification PIN code.\n *\n * @param pin The PIN code to set for two-step verification (6-digit numeric string)\n * @returns Response indicating success or failure\n *\n * @example\n * await whatsappClient.twoStepVerification.setTwoStepVerificationCode('123456');\n */\n async setTwoStepVerificationCode(pin: string): Promise<ResponseSuccess> {\n const body = {\n pin,\n };\n\n return this.sendJson(\n HttpMethodsEnum.Post,\n `${this.config[WabaConfigEnum.PhoneNumberId]}`,\n this.config[WabaConfigEnum.RequestTimeout],\n JSON.stringify(body),\n );\n }\n}\n","import TwoStepVerificationApi from './TwoStepVerificationApi';\n\nexport default TwoStepVerificationApi;\n\nexport { TwoStepVerificationApi };\n\nexport type { TwoStepVerificationClass, TwoStepVerificationRequest } from './types';\n"],"mappings":"uHAcA,IAAqB,EAArB,cAAoD,CAAgE,CAChH,YAAY,EAAwB,EAAwB,CACxD,MAAM,EAAQ,EAAO,CAYzB,MAAM,2BAA2B,EAAuC,CACpE,IAAM,EAAO,CACT,MACH,CAED,OAAO,KAAK,SACR,EAAgB,KAChB,GAAG,KAAK,OAAO,EAAe,iBAC9B,KAAK,OAAO,EAAe,gBAC3B,KAAK,UAAU,EAAK,CACvB,GCpCT,EAAe"}
@@ -1,3 +0,0 @@
1
- import { AudioMediaTypesEnum, BaseAPI, BaseClass, BusinessVerticalEnum, ButtonPositionEnum, CategoryEnum, ComponentTypesEnum, ConversationTypesEnum, CurrencyCodesEnum, DataLocalizationRegionEnum, DocumentMediaTypesEnum, GeneralHeaderInterface, GeneralRequestBody, HttpMethodsEnum, ImageMediaTypesEnum, InteractiveTypesEnum, LanguagesEnum, MessageTypesEnum, Paging, ParametersTypesEnum, ReferralSourceTypesEnum, RequestCodeMethodsEnum, RequesterClass, RequesterResponseInterface, ResponseData, ResponsePagination, ResponseSuccess, StatusEnum, StickerMediaTypesEnum, SubTypeEnum, SystemChangeTypesEnum, TemplateStatusEnum, VideoMediaTypesEnum, WabaConfigEnum, WabaConfigType, WebhookTypesEnum, WhatsAppConfig } from "../base-CfDkvT1x.js";
2
- import { HttpsClientClass, HttpsClientResponseClass, LoggerInterface, ResponseHeaderValue, ResponseHeaders, ResponseJSONBody } from "../index-DQkgkiB6.js";
3
- export { AudioMediaTypesEnum, BaseAPI, BaseClass, BusinessVerticalEnum, ButtonPositionEnum, CategoryEnum, ComponentTypesEnum, ConversationTypesEnum, CurrencyCodesEnum, DataLocalizationRegionEnum, DocumentMediaTypesEnum, GeneralHeaderInterface, GeneralRequestBody, HttpMethodsEnum, HttpsClientClass, HttpsClientResponseClass, ImageMediaTypesEnum, InteractiveTypesEnum, LanguagesEnum, LoggerInterface, MessageTypesEnum, Paging, ParametersTypesEnum, ReferralSourceTypesEnum, RequestCodeMethodsEnum, RequesterClass, RequesterResponseInterface, ResponseData, ResponseHeaderValue, ResponseHeaders, ResponseJSONBody, ResponsePagination, ResponseSuccess, StatusEnum, StickerMediaTypesEnum, SubTypeEnum, SystemChangeTypesEnum, TemplateStatusEnum, VideoMediaTypesEnum, WabaConfigEnum, WabaConfigType, WebhookTypesEnum, WhatsAppConfig };
@@ -1 +0,0 @@
1
- import{AudioMediaTypesEnum as e,BusinessVerticalEnum as t,ButtonPositionEnum as n,CategoryEnum as r,ComponentTypesEnum as i,ConversationTypesEnum as a,CurrencyCodesEnum as o,DataLocalizationRegionEnum as s,DocumentMediaTypesEnum as c,HttpMethodsEnum as l,ImageMediaTypesEnum as u,InteractiveTypesEnum as d,LanguagesEnum as f,MessageTypesEnum as p,ParametersTypesEnum as m,ReferralSourceTypesEnum as h,RequestCodeMethodsEnum as g,StatusEnum as _,StickerMediaTypesEnum as v,SubTypeEnum as y,SystemChangeTypesEnum as b,TemplateStatusEnum as x,VideoMediaTypesEnum as S,WabaConfigEnum as C,WebhookTypesEnum as w}from"../enums-CSUpFXb8.js";import{BaseAPI as T}from"../base-D-cXu_lA.js";export{e as AudioMediaTypesEnum,T as BaseAPI,BaseClass,t as BusinessVerticalEnum,n as ButtonPositionEnum,r as CategoryEnum,i as ComponentTypesEnum,a as ConversationTypesEnum,o as CurrencyCodesEnum,s as DataLocalizationRegionEnum,c as DocumentMediaTypesEnum,l as HttpMethodsEnum,u as ImageMediaTypesEnum,d as InteractiveTypesEnum,f as LanguagesEnum,p as MessageTypesEnum,m as ParametersTypesEnum,h as ReferralSourceTypesEnum,g as RequestCodeMethodsEnum,_ as StatusEnum,v as StickerMediaTypesEnum,y as SubTypeEnum,b as SystemChangeTypesEnum,x as TemplateStatusEnum,S as VideoMediaTypesEnum,C as WabaConfigEnum,w as WebhookTypesEnum};
@@ -1,43 +0,0 @@
1
- import { WabaConfigType } from "../base-CfDkvT1x.js";
2
- import { LoggerInterface } from "../index-DQkgkiB6.js";
3
- import "../common-CvPVD1o6.js";
4
- import { MetaError, isFlowDataExchangeRequest, isFlowErrorRequest, isFlowPingRequest, isMetaError } from "../isMetaError-B3AglYeY.js";
5
-
6
- //#region src/utils/buildFieldsQueryString.d.ts
7
- declare function buildFieldsQueryString(fields?: string[] | string): string;
8
- //#endregion
9
- //#region src/utils/configTable.d.ts
10
- /**
11
- * Formats configuration as a terminal table
12
- * @param config - The WABA configuration object
13
- * @param apiName - The name of the API being initialized
14
- * @returns Formatted table string
15
- */
16
- declare function formatConfigTable(config: WabaConfigType): string;
17
- //#endregion
18
- //#region src/utils/logger.d.ts
19
- declare class Logger implements LoggerInterface {
20
- private name;
21
- private debug;
22
- constructor(name: string, debug?: boolean);
23
- log(...data: any[]): void;
24
- error(...data: any[]): void;
25
- warn(...data: any[]): void;
26
- info(...data: any[]): void;
27
- }
28
- //#endregion
29
- //#region src/utils/objectToQueryString.d.ts
30
- declare const objectToQueryString: (params: Record<string, any>) => string;
31
- //#endregion
32
- //#region src/utils/version.d.ts
33
- /**
34
- * Get SDK version from package.json
35
- */
36
- declare function getVersion(): string;
37
- /**
38
- * Generate User-Agent string following official SDK pattern
39
- */
40
- declare function getUserAgent(): string;
41
- //#endregion
42
- export { Logger, type MetaError, buildFieldsQueryString, formatConfigTable, getUserAgent, getVersion, isFlowDataExchangeRequest, isFlowErrorRequest, isFlowPingRequest, isMetaError, objectToQueryString };
43
- //# sourceMappingURL=index.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.d.ts","names":[],"sources":["../../src/utils/buildFieldsQueryString.ts","../../src/utils/configTable.ts","../../src/utils/logger.ts","../../src/utils/objectToQueryString.ts","../../src/utils/version.ts"],"sourcesContent":[],"mappings":";;;;;;iBAAgB,sBAAA;;;;;;;;AAAhB;iBCSgB,iBAAA,SAA0B;;;cCNrB,MAAA,YAAkB;;;;;EFHvB,KAAA,CAAA,GAAA,IAAA,EAAA,GAAA,EAAA,CAAA,EAAA,IAAsB;;;;;;cGAzB,8BAA+B;;;;;;iBCM5B,UAAA,CAAA;;;AJNhB;iBImBgB,YAAA,CAAA"}
@@ -1 +0,0 @@
1
- import"../enums-CSUpFXb8.js";import{Logger as e,formatConfigTable as t,getUserAgent as n,getVersion as r,isMetaError as i}from"../version-BUuqrHc6.js";import"../common-C6FXBDm7.js";import{objectToQueryString as a}from"../objectToQueryString-CAHI0qTs.js";import{buildFieldsQueryString as o}from"../buildFieldsQueryString-Cr-jz3p0.js";import{isFlowDataExchangeRequest as s,isFlowErrorRequest as c,isFlowPingRequest as l}from"../flowTypeGuards-Gn3-slCW.js";export{e as Logger,o as buildFieldsQueryString,t as formatConfigTable,n as getUserAgent,r as getVersion,s as isFlowDataExchangeRequest,c as isFlowErrorRequest,l as isFlowPingRequest,i as isMetaError,a as objectToQueryString};
@@ -1,3 +0,0 @@
1
- import{WabaConfigEnum as e}from"./enums-CSUpFXb8.js";import{readFileSync as t}from"fs";import{join as n}from"path";var r=class{name;debug;constructor(e,t=!1){this.name=e,this.debug=t}log(...e){if(this.debug){let t=`[ ${Date.now()} ]`;this.name&&(t+=` - ${this.name}`),console.log.apply(console,[t,`: `,...e])}}error(...e){let t=`[ ${Date.now()} ] - ERROR`;this.name&&(t+=` - ${this.name}`),console.error.apply(console,[t,`: `,...e])}warn(...e){let t=`[ ${Date.now()} ] - WARN`;this.name&&(t+=` - ${this.name}`),console.warn.apply(console,[t,`: `,...e])}info(...e){let t=`[ ${Date.now()} ] - INFO`;this.name&&(t+=` - ${this.name}`),console.info.apply(console,[t,`: `,...e])}};function i(t){let n=[[`App ID`,t[e.AppId]||`Not Set`],[`Phone Number ID`,t[e.PhoneNumberId]?.toString()||`Not Set`],[`Business Account ID`,t[e.BusinessAcctId]||`Not Set`],[`API Version`,t[e.APIVersion]||`Not Set`],[`Access Token`,t[e.AccessToken]?`${t[e.AccessToken].substring(0,20)}...`:`Not Set`],[`Webhook Endpoint`,t[e.WebhookEndpoint]||`Not Set`],[`Webhook Verification Token`,t[e.WebhookVerificationToken]?`${t[e.WebhookVerificationToken].substring(0,10)}...`:`Not Set`],[`Listener Port`,t[e.ListenerPort]?.toString()||`Not Set`],[`Debug Mode`,t[e.Debug]?`Enabled`:`Disabled`],[`Max Retries`,t[e.MaxRetriesAfterWait]?.toString()||`Not Set`],[`Request Timeout`,t[e.RequestTimeout]?`${t[e.RequestTimeout]}ms`:`Not Set`],[`Private PEM`,t[e.PrivatePem]?`Configured`:`Not Set`],[`Passphrase`,t[e.Passphrase]?`Configured`:`Not Set`]],r=Math.max(...n.map(([e])=>e?.length||0)),i=Math.max(...n.map(([,e])=>e?.length||0)),a=Math.max(r,20),o=Math.max(i,30),s=`┌${`─`.repeat(a+2)}┬${`─`.repeat(o+2)}┐`,c=`├${`─`.repeat(a+2)}┼${`─`.repeat(o+2)}┤`,l=`└${`─`.repeat(a+2)}┴${`─`.repeat(o+2)}┘`,u=`│ ${`Configuration`.padEnd(a)} │ ${`Value`.padEnd(o)} │`,d=n.map(([e,t])=>`│ ${e?.padEnd(a)} │ ${t?.padEnd(o)} │`);return[s,u,c,...d,l].join(`
2
- `)}function a(e){return typeof e==`object`&&!!e&&`error`in e&&typeof e.error==`object`&&e.error!=null&&`message`in e.error&&typeof e.error.message==`string`&&`type`in e.error&&typeof e.error.type==`string`&&`code`in e.error&&typeof e.error.code==`number`&&`fbtrace_id`in e.error&&typeof e.error.fbtrace_id==`string`&&(!(`error_data`in e.error)||typeof e.error.error_data==`object`&&e.error.error_data!=null&&`messaging_product`in e.error.error_data&&e.error.error_data.messaging_product===`whatsapp`&&`details`in e.error.error_data&&typeof e.error.error_data.details==`string`)&&(!(`error_subcode`in e.error)||typeof e.error.error_subcode==`number`)}function o(){try{let e=n(__dirname,`../../package.json`);return JSON.parse(t(e,`utf-8`)).version}catch{return`unknown`}}function s(){let e=o(),t=process.version;return`WhatsApp-Nodejs-SDK/${e} (Node.js ${t})`}export{r as Logger,i as formatConfigTable,s as getUserAgent,o as getVersion,a as isMetaError};
3
- //# sourceMappingURL=version-BUuqrHc6.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"version-BUuqrHc6.js","names":[],"sources":["../src/utils/logger.ts","../src/utils/configTable.ts","../src/utils/isMetaError.ts","../src/utils/version.ts"],"sourcesContent":["// @ts-nocheck\nimport type { LoggerInterface } from '../types/logger';\n\nexport default class Logger implements LoggerInterface {\n private name: string;\n private debug: boolean;\n\n constructor(name: string, debug: boolean = false) {\n this.name = name;\n this.debug = debug;\n }\n\n log(...data: any[]) {\n if (this.debug) {\n let prefix = `[ ${Date.now()} ]`;\n if (this.name) {\n prefix += ` - ${this.name}`;\n }\n console.log.apply(console, [prefix, ': ', ...data]);\n }\n }\n\n error(...data: any[]) {\n let prefix = `[ ${Date.now()} ] - ERROR`;\n if (this.name) {\n prefix += ` - ${this.name}`;\n }\n console.error.apply(console, [prefix, ': ', ...data]);\n }\n\n warn(...data: any[]) {\n let prefix = `[ ${Date.now()} ] - WARN`;\n if (this.name) {\n prefix += ` - ${this.name}`;\n }\n console.warn.apply(console, [prefix, ': ', ...data]);\n }\n\n info(...data: any[]) {\n let prefix = `[ ${Date.now()} ] - INFO`;\n if (this.name) {\n prefix += ` - ${this.name}`;\n }\n console.info.apply(console, [prefix, ': ', ...data]);\n }\n}\n","import type { WabaConfigType } from '../types/config';\nimport { WabaConfigEnum } from '../types/enums';\n\n/**\n * Formats configuration as a terminal table\n * @param config - The WABA configuration object\n * @param apiName - The name of the API being initialized\n * @returns Formatted table string\n */\nexport function formatConfigTable(config: WabaConfigType): string {\n const configData = [\n ['App ID', config[WabaConfigEnum.AppId] || 'Not Set'],\n ['Phone Number ID', config[WabaConfigEnum.PhoneNumberId]?.toString() || 'Not Set'],\n ['Business Account ID', config[WabaConfigEnum.BusinessAcctId] || 'Not Set'],\n ['API Version', config[WabaConfigEnum.APIVersion] || 'Not Set'],\n [\n 'Access Token',\n config[WabaConfigEnum.AccessToken]\n ? `${config[WabaConfigEnum.AccessToken].substring(0, 20)}...`\n : 'Not Set',\n ],\n ['Webhook Endpoint', config[WabaConfigEnum.WebhookEndpoint] || 'Not Set'],\n [\n 'Webhook Verification Token',\n config[WabaConfigEnum.WebhookVerificationToken]\n ? `${config[WabaConfigEnum.WebhookVerificationToken].substring(0, 10)}...`\n : 'Not Set',\n ],\n ['Listener Port', config[WabaConfigEnum.ListenerPort]?.toString() || 'Not Set'],\n ['Debug Mode', config[WabaConfigEnum.Debug] ? 'Enabled' : 'Disabled'],\n ['Max Retries', config[WabaConfigEnum.MaxRetriesAfterWait]?.toString() || 'Not Set'],\n [\n 'Request Timeout',\n config[WabaConfigEnum.RequestTimeout] ? `${config[WabaConfigEnum.RequestTimeout]}ms` : 'Not Set',\n ],\n ['Private PEM', config[WabaConfigEnum.PrivatePem] ? 'Configured' : 'Not Set'],\n ['Passphrase', config[WabaConfigEnum.Passphrase] ? 'Configured' : 'Not Set'],\n ];\n\n // Calculate column widths\n const maxKeyLength = Math.max(...configData.map(([key]) => key?.length || 0));\n const maxValueLength = Math.max(...configData.map(([, value]) => value?.length || 0));\n\n const keyWidth = Math.max(maxKeyLength, 20);\n const valueWidth = Math.max(maxValueLength, 30);\n\n // Create table\n const horizontalLine = `┌${'─'.repeat(keyWidth + 2)}┬${'─'.repeat(valueWidth + 2)}┐`;\n const separator = `├${'─'.repeat(keyWidth + 2)}┼${'─'.repeat(valueWidth + 2)}┤`;\n const bottomLine = `└${'─'.repeat(keyWidth + 2)}┴${'─'.repeat(valueWidth + 2)}┘`;\n\n const header = `│ ${'Configuration'.padEnd(keyWidth)} │ ${'Value'.padEnd(valueWidth)} │`;\n\n const rows = configData.map(([key, value]) => `│ ${key?.padEnd(keyWidth)} │ ${value?.padEnd(valueWidth)} │`);\n\n return [horizontalLine, header, separator, ...rows, bottomLine].join('\\n');\n}\n","export interface MetaError extends Error {\n error: {\n message: string;\n type: string;\n code: number;\n error_data?: {\n messaging_product: 'whatsapp';\n details: string;\n };\n error_subcode?: number;\n fbtrace_id: string;\n };\n}\n\n/**\n * Determines if the error is a Meta API error response\n * @param error Any error object to check\n * @returns Type guard indicating if error is a Meta API error\n */\nexport function isMetaError(error: any): error is MetaError {\n return (\n error != null &&\n typeof error === 'object' &&\n 'error' in error &&\n typeof error.error === 'object' &&\n error.error != null &&\n 'message' in error.error &&\n typeof error.error.message === 'string' &&\n 'type' in error.error &&\n typeof error.error.type === 'string' &&\n 'code' in error.error &&\n typeof error.error.code === 'number' &&\n 'fbtrace_id' in error.error &&\n typeof error.error.fbtrace_id === 'string' &&\n (!('error_data' in error.error) ||\n (typeof error.error.error_data === 'object' &&\n error.error.error_data != null &&\n 'messaging_product' in error.error.error_data &&\n error.error.error_data.messaging_product === 'whatsapp' &&\n 'details' in error.error.error_data &&\n typeof error.error.error_data.details === 'string')) &&\n (!('error_subcode' in error.error) || typeof error.error.error_subcode === 'number')\n );\n}\n","import { readFileSync } from 'fs';\nimport { join } from 'path';\n\n/**\n * Get SDK version from package.json\n */\nexport function getVersion(): string {\n try {\n const packagePath = join(__dirname, '../../package.json');\n const packageJson = JSON.parse(readFileSync(packagePath, 'utf-8'));\n return packageJson.version;\n } catch (error) {\n return 'unknown';\n }\n}\n\n/**\n * Generate User-Agent string following official SDK pattern\n */\nexport function getUserAgent(): string {\n const version = getVersion();\n const nodeVersion = process.version;\n return `WhatsApp-Nodejs-SDK/${version} (Node.js ${nodeVersion})`;\n}\n"],"mappings":"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"}
@@ -1,2 +0,0 @@
1
- import{HttpMethodsEnum as e,WabaConfigEnum as t}from"./enums-CSUpFXb8.js";import{BaseAPI as n}from"./base-D-cXu_lA.js";import{buildFieldsQueryString as r}from"./buildFieldsQueryString-Cr-jz3p0.js";var i=class extends n{constructor(e,t){super(e,t)}async getWabaAccount(n){let i=r(n)?.replace(/,/g,`%2C`);return this.sendJson(e.Get,`${this.config[t.BusinessAcctId]}${i}`,this.config[t.RequestTimeout],null)}async getAllWabaSubscriptions(){return this.sendJson(e.Get,`${this.config[t.BusinessAcctId]}/subscribed_apps`,this.config[t.RequestTimeout],null)}async updateWabaSubscription({override_callback_uri:n,verify_token:r}){let i={override_callback_uri:n,verify_token:r};return this.sendJson(e.Post,`${this.config[t.BusinessAcctId]}/subscribed_apps`,this.config[t.RequestTimeout],JSON.stringify(i))}async unsubscribeFromWaba(){return this.sendJson(e.Delete,`${this.config[t.BusinessAcctId]}/subscribed_apps`,this.config[t.RequestTimeout],null)}},a=i;export{i as WabaApi,a as waba_default};
2
- //# sourceMappingURL=waba-SF2W3z2U.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"waba-SF2W3z2U.js","names":[],"sources":["../src/api/waba/WabaApi.ts","../src/api/waba/index.ts"],"sourcesContent":["import { BaseAPI } from '../../types/base';\nimport type { WabaConfigType } from '../../types/config';\nimport { HttpMethodsEnum, WabaConfigEnum } from '../../types/enums';\nimport type { RequesterClass, ResponseSuccess } from '../../types/request';\nimport { buildFieldsQueryString } from '../../utils/buildFieldsQueryString';\n\nimport type * as waba from './types';\n\n/**\n * API for managing WhatsApp Business Account (WABA).\n *\n * This API allows you to:\n * - Get WABA account information\n * - Manage WABA subscriptions\n * - Subscribe/unsubscribe from WABA webhooks\n * - Update subscription settings\n */\nexport default class WabaApi extends BaseAPI implements waba.WABAClass {\n constructor(config: WabaConfigType, client: RequesterClass) {\n super(config, client);\n }\n\n /**\n * Retrieve WhatsApp Business Account information.\n *\n * @param fields Optional array of specific fields to retrieve\n * @returns WABA account information including status, health, verification status, etc.\n *\n * @example\n * const account = await whatsappClient.waba.getWabaAccount(['id', 'name', 'status']);\n */\n async getWabaAccount(fields?: waba.WabaAccountFieldsParam): Promise<waba.WabaAccount> {\n const queryString = buildFieldsQueryString(fields)?.replace(/,/g, '%2C');\n\n return this.sendJson(\n HttpMethodsEnum.Get,\n `${this.config[WabaConfigEnum.BusinessAcctId]}${queryString}`,\n this.config[WabaConfigEnum.RequestTimeout],\n null,\n );\n }\n\n /**\n * Get all WABA subscriptions for the business account.\n *\n * @returns List of all subscribed apps and their configurations\n *\n * @example\n * const subscriptions = await whatsappClient.waba.getAllWabaSubscriptions();\n */\n async getAllWabaSubscriptions(): Promise<waba.WabaSubscriptions> {\n return this.sendJson(\n HttpMethodsEnum.Get,\n `${this.config[WabaConfigEnum.BusinessAcctId]}/subscribed_apps`,\n this.config[WabaConfigEnum.RequestTimeout],\n null,\n );\n }\n\n /**\n * Update WABA subscription configuration.\n *\n * @param params Configuration parameters including callback URI and verify token\n * @returns Response indicating success or failure\n *\n * @example\n * await whatsappClient.waba.updateWabaSubscription({\n * override_callback_uri: 'https://example.com/webhook',\n * verify_token: 'your_verify_token'\n * });\n */\n async updateWabaSubscription({\n override_callback_uri,\n verify_token,\n }: waba.UpdateWabaSubscription): Promise<ResponseSuccess> {\n const body = {\n override_callback_uri,\n verify_token,\n };\n return this.sendJson(\n HttpMethodsEnum.Post,\n `${this.config[WabaConfigEnum.BusinessAcctId]}/subscribed_apps`,\n this.config[WabaConfigEnum.RequestTimeout],\n JSON.stringify(body),\n );\n }\n\n /**\n * Unsubscribe from WABA webhooks.\n *\n * @returns Response indicating success or failure\n *\n * @example\n * await whatsappClient.waba.unsubscribeFromWaba();\n */\n async unsubscribeFromWaba(): Promise<ResponseSuccess> {\n return this.sendJson(\n HttpMethodsEnum.Delete,\n `${this.config[WabaConfigEnum.BusinessAcctId]}/subscribed_apps`,\n this.config[WabaConfigEnum.RequestTimeout],\n null,\n );\n }\n}\n","import WabaApi from './WabaApi';\n\nexport default WabaApi;\n\nexport { WabaApi };\n\nexport type { UpdateWabaSubscription, WABAClass, WabaAccount, WabaSubscriptions } from './types';\n"],"mappings":"qMAiBA,IAAqB,EAArB,cAAqC,CAAkC,CACnE,YAAY,EAAwB,EAAwB,CACxD,MAAM,EAAQ,EAAO,CAYzB,MAAM,eAAe,EAAiE,CAClF,IAAM,EAAc,EAAuB,EAAO,EAAE,QAAQ,KAAM,MAAM,CAExE,OAAO,KAAK,SACR,EAAgB,IAChB,GAAG,KAAK,OAAO,EAAe,kBAAkB,IAChD,KAAK,OAAO,EAAe,gBAC3B,KACH,CAWL,MAAM,yBAA2D,CAC7D,OAAO,KAAK,SACR,EAAgB,IAChB,GAAG,KAAK,OAAO,EAAe,gBAAgB,kBAC9C,KAAK,OAAO,EAAe,gBAC3B,KACH,CAeL,MAAM,uBAAuB,CACzB,wBACA,gBACsD,CACtD,IAAM,EAAO,CACT,wBACA,eACH,CACD,OAAO,KAAK,SACR,EAAgB,KAChB,GAAG,KAAK,OAAO,EAAe,gBAAgB,kBAC9C,KAAK,OAAO,EAAe,gBAC3B,KAAK,UAAU,EAAK,CACvB,CAWL,MAAM,qBAAgD,CAClD,OAAO,KAAK,SACR,EAAgB,OAChB,GAAG,KAAK,OAAO,EAAe,gBAAgB,kBAC9C,KAAK,OAAO,EAAe,gBAC3B,KACH,GCnGT,EAAe"}
@@ -1,2 +0,0 @@
1
- import*as e from"crypto";const t=(t,n)=>e.createHmac(`sha256`,n).update(t,`utf-8`).digest(`hex`);export{t as generateXHub256Sig};
2
- //# sourceMappingURL=webhook-D4DQ01Xq.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"webhook-D4DQ01Xq.js","names":["crypto"],"sources":["../src/core/webhook/utils/generateXHub256Sig.ts"],"sourcesContent":["import * as crypto from 'crypto';\n\nexport const generateXHub256Sig = (body: string, appSecret: string) => {\n return crypto.createHmac('sha256', appSecret).update(body, 'utf-8').digest('hex');\n};\n"],"mappings":"yBAEA,MAAa,GAAsB,EAAc,IACtCA,EAAO,WAAW,SAAU,EAAU,CAAC,OAAO,EAAM,QAAQ,CAAC,OAAO,MAAM"}
@@ -1,10 +0,0 @@
1
- import{WabaConfigEnum as e,enums_exports as t}from"./enums-CSUpFXb8.js";import{Logger as n,formatConfigTable as r,getUserAgent as i,getVersion as a,isMetaError as o}from"./version-BUuqrHc6.js";import{encryption_default as s}from"./encryption-Cwc0xcVL.js";import{flow_default as c}from"./flow-CVes0Qus.js";import{media_default as l}from"./media-Dw5OGzDD.js";import{messages_default as u}from"./messages-h5-NW8QO.js";import{phone_default as d}from"./phone-CZyWLyWB.js";import{profile_default as f}from"./profile-Bb7GDP0n.js";import{qrCode_default as p}from"./qrCode-CeZEtX9J.js";import{registration_default as m}from"./registration-BkjhC3xw.js";import{TemplateApi as h}from"./template-Bgy-BCXJ.js";import{twoStepVerification_default as g}from"./twoStepVerification-DYlYF_P5.js";import{waba_default as _}from"./waba-SF2W3z2U.js";import{Agent as v}from"https";const y=new n(`UTILS`,process.env.DEBUG===`true`||!1),b=t=>{if(!process.env[e.AccessToken]&&!t?.accessToken)throw y.log(`Environmental variable: CLOUD_API_ACCESS_TOKEN and/or access token argument is undefined.`),Error(`Missing WhatsApp access token.`)},x=t=>(b(t),{[e.AppId]:t?.appId||process.env.M4D_APP_ID||``,[e.AppSecret]:t?.appSecret||process.env.M4D_APP_SECRET||``,[e.PhoneNumberId]:t?.phoneNumberId||Number(process.env.WA_PHONE_NUMBER_ID),[e.BusinessAcctId]:t?.businessAcctId||process.env.WA_BUSINESS_ACCOUNT_ID||``,[e.APIVersion]:t?.apiVersion||process.env.CLOUD_API_VERSION||``,[e.AccessToken]:t?.accessToken||process.env.CLOUD_API_ACCESS_TOKEN||``,[e.WebhookEndpoint]:t?.webhookEndpoint||process.env.WEBHOOK_ENDPOINT||``,[e.WebhookVerificationToken]:t?.webhookVerificationToken||process.env.WEBHOOK_VERIFICATION_TOKEN||``,[e.ListenerPort]:t?.listenerPort||parseInt(process.env.LISTENER_PORT||``)||3e3,[e.MaxRetriesAfterWait]:t?.maxRetriesAfterWait||parseInt(process.env.MAX_RETRIES_AFTER_WAIT||``)||30,[e.RequestTimeout]:t?.requestTimeout||parseInt(process.env.REQUEST_TIMEOUT||``)||2e4,[e.Debug]:t?.debug||process.env.DEBUG===`true`,[e.PrivatePem]:t?.privatePem||process.env.FLOW_API_PRIVATE_PEM||``,[e.Passphrase]:t?.passphrase||process.env.FLOW_API_PASSPHRASE||``}),S=new n(`HttpsClient`,process.env.DEBUG===`true`||!1);var C=class{agent;constructor(){this.agent=new v({keepAlive:!0})}clearSockets(){return this.agent.destroy(),!0}async sendRequest(e,t,n,r,i,a){let o=`https://${e}/${t}`,s=new AbortController,c=setTimeout(()=>s.abort(),i);try{let e=await fetch(o,{method:n,headers:r,body:a,signal:s.signal});return S.log(`${n} : ${o} - ${JSON.stringify(e)}`),clearTimeout(c),new w(e)}catch(e){throw S.error(`${n} : ${o} - ${JSON.stringify(e)}`),e}}},w=class{res;respStatusCode;respHeaders;constructor(e){this.res=e,this.respStatusCode=e.status,this.respHeaders=Object.fromEntries(e.headers.entries())}statusCode(){return this.respStatusCode}headers(){return this.respHeaders}rawResponse(){return this.res}async json(){try{return await this.res.json()}catch(e){throw Error(`Failed to parse response body to JSON: `+e.message)}}};const T=new n(`REQUESTER`,process.env.DEBUG===`true`||!1);var E=class{client;accessToken;phoneNumberId;businessAcctId;apiVersion;userAgent;host;protocol=`https:`;constructor(e,t,n,r,i){this.client=new C,this.host=`graph.facebook.com`,this.apiVersion=e||`22`,this.phoneNumberId=t,this.accessToken=n,this.businessAcctId=r,this.userAgent=i}buildHeader(e,t){let n={Authorization:`Bearer ${this.accessToken}`,"User-Agent":this.userAgent};return e!==`multipart/form-data`&&(n[`Content-Type`]=e),t&&Object.assign(n,t),n}buildCAPIPath(e){return`v${this.apiVersion}.0/${e}`}async sendRequest(e,t,n,r,i=`application/json`,a){let s=i;r instanceof FormData?s=`multipart/form-data`:typeof r==`string`&&r.startsWith(`<?xml`)&&(s=`application/xml`);let c=`${this.protocol.toLowerCase()}//${this.host}/${this.buildCAPIPath(t)}`;T.log(`${e} : ${c} (${s})`);try{let i=await this.client.sendRequest(this.host,this.buildCAPIPath(t),e,this.buildHeader(s,a),n,e===`POST`||e===`PUT`?r:void 0);if(!i.rawResponse().ok){let e=await i.json();throw o(e)?e:{name:`MetaError`,message:`Unknown error occurred`,error:{message:e.message||`Unknown error occurred`,type:`UnknownError`,code:i.statusCode(),fbtrace_id:``}}}return i}catch(e){throw o(e)?e:{name:`MetaError`,message:e instanceof Error?e.message:`Network error occurred`,error:{message:e instanceof Error?e.message:`Network error occurred`,type:`NetworkError`,code:500,fbtrace_id:``}}}}async getJson(e,t,n,r,i){return await(await this.sendRequest(e,t,n,r,`application/json`,i)).json()}async sendFormData(e,t,n,r,i){return await(await this.sendRequest(e,t,n,r,`multipart/form-data`,i)).json()}async sendUrlEncodedForm(e,t,n,r,i){let a=new URLSearchParams(r).toString();return await(await this.sendRequest(e,t,n,a,`application/x-www-form-urlencoded`,i)).json()}};function D(){process.env.NODE_ENV===`test`||process.env.VITEST===`true`||typeof global<`u`&&global.__VITEST__||console.log(`\x1B[36m%s\x1B[0m`,`
2
- ██████╗ ██╗ ██████╗ ██╗ ██╗ ██████╗ █████╗ ██████╗ ██╗
3
- ██╔════╝ ██║ ██╔═══██╗ ██║ ██║ ██╔══██╗ ██╔══██╗ ██╔══██╗ ██║
4
- ██║ ██║ ██║ ██║ ██║ ██║ ██║ ██║ ███████║ ██████╔╝ ██║
5
- ██║ ██║ ██║ ██║ ██║ ██║ ██║ ██║ ██╔══██║ ██╔═══╝ ██║
6
- ╚██████╗ ███████╗ ╚██████╔╝ ╚██████╔╝ ██████╔╝ ██║ ██║ ██║ ██║
7
- ╚═════╝ ╚══════╝ ╚═════╝ ╚═════╝ ╚═════╝ ╚═╝ ╚═╝ ╚═╝ ╚═╝
8
- `)}const O=new n(`WHATSAPP`,process.env.DEBUG===`true`);var k=class{config;requester;messages;media;phoneNumbers;twoStepVerification;flows;businessProfile;templates;encryption;qrCode;registration;waba;constructor(t){D(),this.config=x(t),this.requester=new E(this.config[e.APIVersion],this.config[e.PhoneNumberId],this.config[e.AccessToken],this.config[e.BusinessAcctId],this.getUserAgent()),this.messages=new u(this.config,this.requester),this.media=new l(this.config,this.requester),this.phoneNumbers=new d(this.config,this.requester),this.twoStepVerification=new g(this.config,this.requester),this.flows=new c(this.config,this.requester),this.businessProfile=new f(this.config,this.requester),this.templates=new h(this.config,this.requester),this.encryption=new s(this.config,this.requester),this.qrCode=new p(this.config,this.requester),this.registration=new m(this.config,this.requester),this.waba=new _(this.config,this.requester),O.log(`
9
- `+r(this.config))}updateTimeout(t){this.config[e.RequestTimeout]=t,`updateTimeout`in this.requester&&this.requester.updateTimeout(t),O.log(`Timeout updated to ${t}ms`)}updateSenderNumberId(t){this.config[e.PhoneNumberId]=t,O.log(`Sender number ID updated to ${t}`)}updateAccessToken(t){this.config[e.AccessToken]=t,`updateAccessToken`in this.requester&&this.requester.updateAccessToken(t),O.log(`Access token updated`)}version(){return a()}static get Enums(){return t}getUserAgent(){return i()}};export{k as WhatsApp,x as importConfig};
10
- //# sourceMappingURL=whatsapp-B85mxH5f.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"whatsapp-B85mxH5f.js","names":["LOGGER","LOGGER","LOGGER","headers: HeadersInit","MessagesApi","MediaApi","PhoneNumberApi","TwoStepVerificationApi","FlowApi","BusinessProfileApi","EncryptionApi","QrCodeApi","RegistrationApi","WabaApi","SDKEnums"],"sources":["../src/config/importConfig.ts","../src/utils/http/httpsClient.ts","../src/utils/http/request.ts","../src/utils/logoConsole.ts","../src/core/whatsapp/WhatsApp.ts"],"sourcesContent":["import type { WabaConfigType, WhatsAppConfig } from '../types/config';\nimport { WabaConfigEnum } from '../types/enums';\nimport Logger from '../utils/logger';\n\nconst LIB_NAME = 'UTILS';\nconst LOG_LOCAL = false;\nconst LOGGER = new Logger(LIB_NAME, process.env.DEBUG === 'true' || LOG_LOCAL);\nconst DEFAULT_LISTENER_PORT = 3000;\nconst DEFAULT_MAX_RETRIES_AFTER_WAIT = 30;\nconst DEFAULT_REQUEST_TIMEOUT = 20000;\n\nconst emptyConfigChecker = (config: WhatsAppConfig | undefined) => {\n if (!process.env[WabaConfigEnum.AccessToken] && !config?.accessToken) {\n LOGGER.log(`Environmental variable: CLOUD_API_ACCESS_TOKEN and/or access token argument is undefined.`);\n throw new Error('Missing WhatsApp access token.');\n }\n};\n\nexport const importConfig = (inputConfig?: WhatsAppConfig) => {\n emptyConfigChecker(inputConfig);\n\n const wabaConfig: WabaConfigType = {\n [WabaConfigEnum.AppId]: inputConfig?.appId || process.env.M4D_APP_ID || '',\n [WabaConfigEnum.AppSecret]: inputConfig?.appSecret || process.env.M4D_APP_SECRET || '',\n [WabaConfigEnum.PhoneNumberId]: inputConfig?.phoneNumberId || Number(process.env.WA_PHONE_NUMBER_ID),\n [WabaConfigEnum.BusinessAcctId]: inputConfig?.businessAcctId || process.env.WA_BUSINESS_ACCOUNT_ID || '',\n [WabaConfigEnum.APIVersion]: inputConfig?.apiVersion || process.env.CLOUD_API_VERSION || '',\n [WabaConfigEnum.AccessToken]: inputConfig?.accessToken || process.env.CLOUD_API_ACCESS_TOKEN || '',\n [WabaConfigEnum.WebhookEndpoint]: inputConfig?.webhookEndpoint || process.env.WEBHOOK_ENDPOINT || '',\n [WabaConfigEnum.WebhookVerificationToken]:\n inputConfig?.webhookVerificationToken || process.env.WEBHOOK_VERIFICATION_TOKEN || '',\n [WabaConfigEnum.ListenerPort]:\n inputConfig?.listenerPort || parseInt(process.env.LISTENER_PORT || '') || DEFAULT_LISTENER_PORT,\n [WabaConfigEnum.MaxRetriesAfterWait]:\n inputConfig?.maxRetriesAfterWait ||\n parseInt(process.env.MAX_RETRIES_AFTER_WAIT || '') ||\n DEFAULT_MAX_RETRIES_AFTER_WAIT,\n [WabaConfigEnum.RequestTimeout]:\n inputConfig?.requestTimeout || parseInt(process.env.REQUEST_TIMEOUT || '') || DEFAULT_REQUEST_TIMEOUT,\n [WabaConfigEnum.Debug]: inputConfig?.debug || process.env.DEBUG === 'true',\n [WabaConfigEnum.PrivatePem]: inputConfig?.privatePem || process.env.FLOW_API_PRIVATE_PEM || '',\n [WabaConfigEnum.Passphrase]: inputConfig?.passphrase || process.env.FLOW_API_PASSPHRASE || '',\n };\n\n return wabaConfig;\n};\n","import { Agent } from 'https';\n\nimport { HttpMethodsEnum } from '../../types/enums';\nimport { HttpsClientClass, HttpsClientResponseClass, ResponseHeaders, ResponseJSONBody } from '../../types/httpsClient';\nimport Logger from '../logger';\n\nconst LIB_NAME = 'HttpsClient';\nconst LOG_LOCAL = false;\nconst LOGGER = new Logger(LIB_NAME, process.env.DEBUG === 'true' || LOG_LOCAL);\n\nexport default class HttpsClient implements HttpsClientClass {\n agent: Agent;\n\n constructor() {\n this.agent = new Agent({ keepAlive: true });\n }\n\n clearSockets(): boolean {\n this.agent.destroy();\n return true;\n }\n\n async sendRequest(\n hostname: string,\n path: string,\n method: HttpMethodsEnum,\n headers: HeadersInit,\n timeout: number,\n body?: BodyInit | null,\n ): Promise<HttpsClientResponseClass> {\n const url = `https://${hostname}/${path}`;\n const controller = new AbortController();\n const timeoutId = setTimeout(() => controller.abort(), timeout);\n\n try {\n const response = await fetch(url, {\n method,\n headers,\n body,\n signal: controller.signal,\n });\n LOGGER.log(`${method} : ${url} - ${JSON.stringify(response)}`);\n\n clearTimeout(timeoutId);\n return new HttpsClientResponse(response);\n } catch (error) {\n LOGGER.error(`${method} : ${url} - ${JSON.stringify(error)}`);\n throw error;\n }\n }\n}\n\nexport class HttpsClientResponse implements HttpsClientResponseClass {\n res: Response;\n respStatusCode: number;\n respHeaders: ResponseHeaders;\n\n constructor(resp: Response) {\n this.res = resp;\n this.respStatusCode = resp.status;\n this.respHeaders = Object.fromEntries(resp.headers.entries());\n }\n\n statusCode(): number {\n return this.respStatusCode;\n }\n\n headers(): ResponseHeaders {\n return this.respHeaders;\n }\n\n rawResponse(): Response {\n return this.res;\n }\n\n async json(): Promise<ResponseJSONBody> {\n try {\n return (await this.res.json()) as ResponseJSONBody;\n } catch (err) {\n // TODO Error Handling\n throw new Error('Failed to parse response body to JSON: ' + (err as Error).message);\n }\n }\n}\n","import type { HttpMethodsEnum } from '../../types/enums';\nimport type { RequesterClass } from '../../types/request';\nimport { isMetaError, MetaError } from '../isMetaError';\nimport Logger from '../logger';\nimport HttpsClient from './httpsClient';\n\nconst LIB_NAME = 'REQUESTER';\nconst LOG_LOCAL = false;\nconst LOGGER = new Logger(LIB_NAME, process.env.DEBUG === 'true' || LOG_LOCAL);\n\nexport default class Requester implements RequesterClass {\n client: Readonly<HttpsClient>;\n accessToken: Readonly<string>;\n phoneNumberId: Readonly<number>;\n businessAcctId: Readonly<string>;\n apiVersion: Readonly<string>;\n userAgent: Readonly<string>;\n host: Readonly<string>;\n protocol: Readonly<string> = 'https:';\n\n constructor(\n apiVersion: string,\n phoneNumberId: number,\n accessToken: string,\n businessAcctId: string,\n userAgent: string,\n ) {\n this.client = new HttpsClient();\n this.host = 'graph.facebook.com';\n this.apiVersion = apiVersion || '22';\n this.phoneNumberId = phoneNumberId;\n this.accessToken = accessToken;\n this.businessAcctId = businessAcctId;\n this.userAgent = userAgent;\n }\n\n buildHeader(contentType: string, additionalHeaders?: Record<string, string>): HeadersInit {\n const headers: HeadersInit = {\n Authorization: `Bearer ${this.accessToken}`,\n 'User-Agent': this.userAgent,\n };\n\n if (contentType !== 'multipart/form-data') {\n headers['Content-Type'] = contentType;\n }\n\n if (additionalHeaders) {\n Object.assign(headers, additionalHeaders);\n }\n\n return headers;\n }\n\n buildCAPIPath(endpoint: string): string {\n return `v${this.apiVersion}.0/${endpoint}`;\n }\n\n async sendRequest(\n method: HttpMethodsEnum,\n endpoint: string,\n timeout: number,\n body?: any,\n contentType: string = 'application/json',\n additionalHeaders?: Record<string, string>,\n ) {\n let effectiveContentType = contentType;\n\n if (body instanceof FormData) {\n effectiveContentType = 'multipart/form-data';\n } else if (typeof body === 'string' && body.startsWith('<?xml')) {\n effectiveContentType = 'application/xml';\n }\n\n const path = `${this.protocol.toLowerCase()}//${this.host}/${this.buildCAPIPath(endpoint)}`;\n\n LOGGER.log(`${method} : ${path} (${effectiveContentType})`);\n\n try {\n const response = await this.client.sendRequest(\n this.host,\n this.buildCAPIPath(endpoint),\n method,\n this.buildHeader(effectiveContentType, additionalHeaders),\n timeout,\n method === 'POST' || method === 'PUT' ? body : undefined,\n );\n\n if (!response.rawResponse().ok) {\n const errorData = await response.json();\n if (isMetaError(errorData)) {\n throw errorData;\n }\n // If the error doesn't match Meta's format, create a generic MetaError\n throw {\n name: 'MetaError',\n message: 'Unknown error occurred',\n error: {\n message: errorData.message || 'Unknown error occurred',\n type: 'UnknownError',\n code: response.statusCode(),\n fbtrace_id: '',\n },\n } as MetaError;\n }\n\n return response;\n } catch (error) {\n if (isMetaError(error)) {\n throw error;\n }\n // Handle network errors or other unexpected errors\n throw {\n name: 'MetaError',\n message: error instanceof Error ? error.message : 'Network error occurred',\n error: {\n message: error instanceof Error ? error.message : 'Network error occurred',\n type: 'NetworkError',\n code: 500,\n fbtrace_id: '',\n },\n } as MetaError;\n }\n }\n\n async getJson<T>(\n method: HttpMethodsEnum,\n endpoint: string,\n timeout: number,\n body?: any,\n additionalHeaders?: Record<string, string>,\n ): Promise<T> {\n const res = await this.sendRequest(method, endpoint, timeout, body, 'application/json', additionalHeaders);\n return (await res.json()) as T;\n }\n\n async sendFormData<T>(\n method: HttpMethodsEnum,\n endpoint: string,\n timeout: number,\n formData: FormData,\n additionalHeaders?: Record<string, string>,\n ): Promise<T> {\n const res = await this.sendRequest(\n method,\n endpoint,\n timeout,\n formData,\n 'multipart/form-data',\n additionalHeaders,\n );\n return (await res.json()) as T;\n }\n\n async sendUrlEncodedForm<T>(\n method: HttpMethodsEnum,\n endpoint: string,\n timeout: number,\n formData: Record<string, string>,\n additionalHeaders?: Record<string, string>,\n ): Promise<T> {\n const urlEncodedBody = new URLSearchParams(formData).toString();\n const res = await this.sendRequest(\n method,\n endpoint,\n timeout,\n urlEncodedBody,\n 'application/x-www-form-urlencoded',\n additionalHeaders,\n );\n return (await res.json()) as T;\n }\n}\n","export function printLogo() {\n // 테스트 환경에서는 로고를 출력하지 않음\n if (\n process.env.NODE_ENV === 'test' ||\n process.env.VITEST === 'true' ||\n (typeof global !== 'undefined' && (global as any).__VITEST__)\n ) {\n return;\n }\n\n console.log(\n '\\x1b[36m%s\\x1b[0m',\n `\n██████╗ ██╗ ██████╗ ██╗ ██╗ ██████╗ █████╗ ██████╗ ██╗\n██╔════╝ ██║ ██╔═══██╗ ██║ ██║ ██╔══██╗ ██╔══██╗ ██╔══██╗ ██║\n██║ ██║ ██║ ██║ ██║ ██║ ██║ ██║ ███████║ ██████╔╝ ██║\n██║ ██║ ██║ ██║ ██║ ██║ ██║ ██║ ██╔══██║ ██╔═══╝ ██║\n╚██████╗ ███████╗ ╚██████╔╝ ╚██████╔╝ ██████╔╝ ██║ ██║ ██║ ██║\n ╚═════╝ ╚══════╝ ╚═════╝ ╚═════╝ ╚═════╝ ╚═╝ ╚═╝ ╚═╝ ╚═╝\n`,\n );\n}\n","import { importConfig } from '../../config/importConfig';\nimport { WabaConfigType, WhatsAppConfig } from '../../types/config';\nimport * as SDKEnums from '../../types/enums';\nimport { formatConfigTable } from '../../utils/configTable';\nimport Requester from '../../utils/http/request';\nimport Logger from '../../utils/logger';\nimport { getUserAgent, getVersion } from '../../utils/version';\n\nimport {\n BusinessProfileApi,\n EncryptionApi,\n FlowApi,\n MediaApi,\n MessagesApi,\n PhoneNumberApi,\n QrCodeApi,\n RegistrationApi,\n TemplateApi,\n TwoStepVerificationApi,\n WabaApi,\n} from '../../api';\nimport { printLogo } from '../../utils/logoConsole';\n\nconst LIB_NAME = 'WHATSAPP';\nconst LOGGER = new Logger(LIB_NAME, process.env.DEBUG === 'true');\n\n/**\n * WhatsApp SDK Main Class following official patterns\n * Provides unified access to WhatsApp Cloud API and Flows API\n */\nexport default class WhatsApp {\n config: WabaConfigType;\n requester: Readonly<Requester>;\n messages: MessagesApi;\n media: MediaApi;\n phoneNumbers: PhoneNumberApi;\n twoStepVerification: TwoStepVerificationApi;\n flows: FlowApi;\n businessProfile: BusinessProfileApi;\n templates: TemplateApi;\n encryption: EncryptionApi;\n qrCode: QrCodeApi;\n registration: RegistrationApi;\n waba: WabaApi;\n\n constructor(config?: WhatsAppConfig) {\n printLogo();\n this.config = importConfig(config);\n\n this.requester = new Requester(\n this.config[SDKEnums.WabaConfigEnum.APIVersion],\n this.config[SDKEnums.WabaConfigEnum.PhoneNumberId],\n this.config[SDKEnums.WabaConfigEnum.AccessToken],\n this.config[SDKEnums.WabaConfigEnum.BusinessAcctId],\n this.getUserAgent(),\n );\n\n this.messages = new MessagesApi(this.config, this.requester);\n this.media = new MediaApi(this.config, this.requester);\n this.phoneNumbers = new PhoneNumberApi(this.config, this.requester);\n this.twoStepVerification = new TwoStepVerificationApi(this.config, this.requester);\n this.flows = new FlowApi(this.config, this.requester);\n this.businessProfile = new BusinessProfileApi(this.config, this.requester);\n this.templates = new TemplateApi(this.config, this.requester);\n this.encryption = new EncryptionApi(this.config, this.requester);\n this.qrCode = new QrCodeApi(this.config, this.requester);\n this.registration = new RegistrationApi(this.config, this.requester);\n this.waba = new WabaApi(this.config, this.requester);\n\n LOGGER.log('\\n' + formatConfigTable(this.config));\n }\n\n /**\n * Runtime configuration updates following official patterns\n */\n updateTimeout(timeout: number): void {\n this.config[SDKEnums.WabaConfigEnum.RequestTimeout] = timeout;\n if ('updateTimeout' in this.requester) {\n (this.requester as any).updateTimeout(timeout);\n }\n LOGGER.log(`Timeout updated to ${timeout}ms`);\n }\n\n updateSenderNumberId(phoneNumberId: number): void {\n this.config[SDKEnums.WabaConfigEnum.PhoneNumberId] = phoneNumberId;\n LOGGER.log(`Sender number ID updated to ${phoneNumberId}`);\n }\n\n updateAccessToken(accessToken: string): void {\n this.config[SDKEnums.WabaConfigEnum.AccessToken] = accessToken;\n if ('updateAccessToken' in this.requester) {\n (this.requester as any).updateAccessToken(accessToken);\n }\n LOGGER.log('Access token updated');\n }\n\n /**\n * Get SDK version\n */\n version(): string {\n return getVersion();\n }\n\n /**\n * Static enums access\n */\n static get Enums() {\n return SDKEnums;\n }\n\n /**\n * Get User-Agent string\n */\n getUserAgent(): string {\n return getUserAgent();\n }\n}\n"],"mappings":"w1BAMA,MAAME,EAAS,IAAI,EAFF,QAEmB,QAAQ,IAAI,QAAU,QADxC,GAC4D,CAKxE,EAAsB,GAAuC,CAC/D,GAAI,CAAC,QAAQ,IAAI,EAAe,cAAgB,CAAC,GAAQ,YAErD,MADA,EAAO,IAAI,4FAA4F,CAC7F,MAAM,iCAAiC,EAI5C,EAAgB,IACzB,EAAmB,EAAY,CAEI,EAC9B,EAAe,OAAQ,GAAa,OAAS,QAAQ,IAAI,YAAc,IACvE,EAAe,WAAY,GAAa,WAAa,QAAQ,IAAI,gBAAkB,IACnF,EAAe,eAAgB,GAAa,eAAiB,OAAO,QAAQ,IAAI,mBAAmB,EACnG,EAAe,gBAAiB,GAAa,gBAAkB,QAAQ,IAAI,wBAA0B,IACrG,EAAe,YAAa,GAAa,YAAc,QAAQ,IAAI,mBAAqB,IACxF,EAAe,aAAc,GAAa,aAAe,QAAQ,IAAI,wBAA0B,IAC/F,EAAe,iBAAkB,GAAa,iBAAmB,QAAQ,IAAI,kBAAoB,IACjG,EAAe,0BACZ,GAAa,0BAA4B,QAAQ,IAAI,4BAA8B,IACtF,EAAe,cACZ,GAAa,cAAgB,SAAS,QAAQ,IAAI,eAAiB,GAAG,EAAI,KAC7E,EAAe,qBACZ,GAAa,qBACb,SAAS,QAAQ,IAAI,wBAA0B,GAAG,EAClD,IACH,EAAe,gBACZ,GAAa,gBAAkB,SAAS,QAAQ,IAAI,iBAAmB,GAAG,EAAI,KACjF,EAAe,OAAQ,GAAa,OAAS,QAAQ,IAAI,QAAU,QACnE,EAAe,YAAa,GAAa,YAAc,QAAQ,IAAI,sBAAwB,IAC3F,EAAe,YAAa,GAAa,YAAc,QAAQ,IAAI,qBAAuB,GAC9F,EClCCA,EAAS,IAAI,EAFF,cAEmB,QAAQ,IAAI,QAAU,QADxC,GAC4D,CAE9E,IAAqB,EAArB,KAA6D,CACzD,MAEA,aAAc,CACV,KAAK,MAAQ,IAAI,EAAM,CAAE,UAAW,GAAM,CAAC,CAG/C,cAAwB,CAEpB,OADA,KAAK,MAAM,SAAS,CACb,GAGX,MAAM,YACF,EACA,EACA,EACA,EACA,EACA,EACiC,CACjC,IAAM,EAAM,WAAW,EAAS,GAAG,IAC7B,EAAa,IAAI,gBACjB,EAAY,eAAiB,EAAW,OAAO,CAAE,EAAQ,CAE/D,GAAI,CACA,IAAM,EAAW,MAAM,MAAM,EAAK,CAC9B,SACA,UACA,OACA,OAAQ,EAAW,OACtB,CAAC,CAIF,OAHA,EAAO,IAAI,GAAG,EAAO,KAAK,EAAI,KAAK,KAAK,UAAU,EAAS,GAAG,CAE9D,aAAa,EAAU,CAChB,IAAI,EAAoB,EAAS,OACnC,EAAO,CAEZ,MADA,EAAO,MAAM,GAAG,EAAO,KAAK,EAAI,KAAK,KAAK,UAAU,EAAM,GAAG,CACvD,KAKL,EAAb,KAAqE,CACjE,IACA,eACA,YAEA,YAAY,EAAgB,CACxB,KAAK,IAAM,EACX,KAAK,eAAiB,EAAK,OAC3B,KAAK,YAAc,OAAO,YAAY,EAAK,QAAQ,SAAS,CAAC,CAGjE,YAAqB,CACjB,OAAO,KAAK,eAGhB,SAA2B,CACvB,OAAO,KAAK,YAGhB,aAAwB,CACpB,OAAO,KAAK,IAGhB,MAAM,MAAkC,CACpC,GAAI,CACA,OAAQ,MAAM,KAAK,IAAI,MAAM,OACxB,EAAK,CAEV,MAAU,MAAM,0CAA6C,EAAc,QAAQ,ICxE/F,MAAMA,EAAS,IAAI,EAFF,YAEmB,QAAQ,IAAI,QAAU,QADxC,GAC4D,CAE9E,IAAqB,EAArB,KAAyD,CACrD,OACA,YACA,cACA,eACA,WACA,UACA,KACA,SAA6B,SAE7B,YACI,EACA,EACA,EACA,EACA,EACF,CACE,KAAK,OAAS,IAAI,EAClB,KAAK,KAAO,qBACZ,KAAK,WAAa,GAAc,KAChC,KAAK,cAAgB,EACrB,KAAK,YAAc,EACnB,KAAK,eAAiB,EACtB,KAAK,UAAY,EAGrB,YAAY,EAAqB,EAAyD,CACtF,IAAMC,EAAuB,CACzB,cAAe,UAAU,KAAK,cAC9B,aAAc,KAAK,UACtB,CAUD,OARI,IAAgB,wBAChB,EAAQ,gBAAkB,GAG1B,GACA,OAAO,OAAO,EAAS,EAAkB,CAGtC,EAGX,cAAc,EAA0B,CACpC,MAAO,IAAI,KAAK,WAAW,KAAK,IAGpC,MAAM,YACF,EACA,EACA,EACA,EACA,EAAsB,mBACtB,EACF,CACE,IAAI,EAAuB,EAEvB,aAAgB,SAChB,EAAuB,sBAChB,OAAO,GAAS,UAAY,EAAK,WAAW,QAAQ,GAC3D,EAAuB,mBAG3B,IAAM,EAAO,GAAG,KAAK,SAAS,aAAa,CAAC,IAAI,KAAK,KAAK,GAAG,KAAK,cAAc,EAAS,GAEzF,EAAO,IAAI,GAAG,EAAO,KAAK,EAAK,IAAI,EAAqB,GAAG,CAE3D,GAAI,CACA,IAAM,EAAW,MAAM,KAAK,OAAO,YAC/B,KAAK,KACL,KAAK,cAAc,EAAS,CAC5B,EACA,KAAK,YAAY,EAAsB,EAAkB,CACzD,EACA,IAAW,QAAU,IAAW,MAAQ,EAAO,IAAA,GAClD,CAED,GAAI,CAAC,EAAS,aAAa,CAAC,GAAI,CAC5B,IAAM,EAAY,MAAM,EAAS,MAAM,CAKvC,MAJI,EAAY,EAAU,CAChB,EAGJ,CACF,KAAM,YACN,QAAS,yBACT,MAAO,CACH,QAAS,EAAU,SAAW,yBAC9B,KAAM,eACN,KAAM,EAAS,YAAY,CAC3B,WAAY,GACf,CACJ,CAGL,OAAO,QACF,EAAO,CAKZ,MAJI,EAAY,EAAM,CACZ,EAGJ,CACF,KAAM,YACN,QAAS,aAAiB,MAAQ,EAAM,QAAU,yBAClD,MAAO,CACH,QAAS,aAAiB,MAAQ,EAAM,QAAU,yBAClD,KAAM,eACN,KAAM,IACN,WAAY,GACf,CACJ,EAIT,MAAM,QACF,EACA,EACA,EACA,EACA,EACU,CAEV,OAAQ,MADI,MAAM,KAAK,YAAY,EAAQ,EAAU,EAAS,EAAM,mBAAoB,EAAkB,EACxF,MAAM,CAG5B,MAAM,aACF,EACA,EACA,EACA,EACA,EACU,CASV,OAAQ,MARI,MAAM,KAAK,YACnB,EACA,EACA,EACA,EACA,sBACA,EACH,EACiB,MAAM,CAG5B,MAAM,mBACF,EACA,EACA,EACA,EACA,EACU,CACV,IAAM,EAAiB,IAAI,gBAAgB,EAAS,CAAC,UAAU,CAS/D,OAAQ,MARI,MAAM,KAAK,YACnB,EACA,EACA,EACA,EACA,oCACA,EACH,EACiB,MAAM,GCzKhC,SAAgB,GAAY,CAGpB,QAAQ,IAAI,WAAa,QACzB,QAAQ,IAAI,SAAW,QACtB,OAAO,OAAW,KAAgB,OAAe,YAKtD,QAAQ,IACJ,oBACA;;;;;;;EAQH,CCIL,MAAM,EAAS,IAAI,EADF,WACmB,QAAQ,IAAI,QAAU,OAAO,CAMjE,IAAqB,EAArB,KAA8B,CAC1B,OACA,UACA,SACA,MACA,aACA,oBACA,MACA,gBACA,UACA,WACA,OACA,aACA,KAEA,YAAY,EAAyB,CACjC,GAAW,CACX,KAAK,OAAS,EAAa,EAAO,CAElC,KAAK,UAAY,IAAI,EACjB,KAAK,OAAA,EAA+B,YACpC,KAAK,OAAA,EAA+B,eACpC,KAAK,OAAA,EAA+B,aACpC,KAAK,OAAA,EAA+B,gBACpC,KAAK,cAAc,CACtB,CAED,KAAK,SAAW,IAAIC,EAAY,KAAK,OAAQ,KAAK,UAAU,CAC5D,KAAK,MAAQ,IAAIC,EAAS,KAAK,OAAQ,KAAK,UAAU,CACtD,KAAK,aAAe,IAAIC,EAAe,KAAK,OAAQ,KAAK,UAAU,CACnE,KAAK,oBAAsB,IAAIC,EAAuB,KAAK,OAAQ,KAAK,UAAU,CAClF,KAAK,MAAQ,IAAIC,EAAQ,KAAK,OAAQ,KAAK,UAAU,CACrD,KAAK,gBAAkB,IAAIC,EAAmB,KAAK,OAAQ,KAAK,UAAU,CAC1E,KAAK,UAAY,IAAI,EAAY,KAAK,OAAQ,KAAK,UAAU,CAC7D,KAAK,WAAa,IAAIC,EAAc,KAAK,OAAQ,KAAK,UAAU,CAChE,KAAK,OAAS,IAAIC,EAAU,KAAK,OAAQ,KAAK,UAAU,CACxD,KAAK,aAAe,IAAIC,EAAgB,KAAK,OAAQ,KAAK,UAAU,CACpE,KAAK,KAAO,IAAIC,EAAQ,KAAK,OAAQ,KAAK,UAAU,CAEpD,EAAO,IAAI;EAAO,EAAkB,KAAK,OAAO,CAAC,CAMrD,cAAc,EAAuB,CACjC,KAAK,OAAA,EAA+B,gBAAkB,EAClD,kBAAmB,KAAK,WACvB,KAAK,UAAkB,cAAc,EAAQ,CAElD,EAAO,IAAI,sBAAsB,EAAQ,IAAI,CAGjD,qBAAqB,EAA6B,CAC9C,KAAK,OAAA,EAA+B,eAAiB,EACrD,EAAO,IAAI,+BAA+B,IAAgB,CAG9D,kBAAkB,EAA2B,CACzC,KAAK,OAAA,EAA+B,aAAe,EAC/C,sBAAuB,KAAK,WAC3B,KAAK,UAAkB,kBAAkB,EAAY,CAE1D,EAAO,IAAI,uBAAuB,CAMtC,SAAkB,CACd,OAAO,GAAY,CAMvB,WAAW,OAAQ,CACf,OAAOC,EAMX,cAAuB,CACnB,OAAO,GAAc"}