index.js

  1. /**
  2. * https://github.com/ecomclub/transactional-mails
  3. * @author E-Com Club <ti@e-com.club>
  4. * @license MIT
  5. */
  6. 'use strict'
  7. // Node.js i18n support
  8. require('./intl')
  9. // template render function
  10. const render = require('./lib/render')
  11. /**
  12. * Default transactional email templates for E-Com Plus stores.
  13. * @module @ecomplus/transactional-mails
  14. * @exports {@link templates}
  15. * @example
  16. * const transactionalMails = require('@ecomplus/transactional-mails')
  17. */
  18. module.exports = {
  19. /**
  20. * @method
  21. * @memberof transactionalMails
  22. * @description Returns HTML markup for customer welcome email.
  23. * @param {object} store - Store body object
  24. * @param {object} customer - Customer body object
  25. * @param {string} [lang='en_us'] - Snake case language code, eg.: 'en_us', 'pt_br'
  26. * @param {string} [customMessage] - Custom text for the main template phrase
  27. * @returns {Promise}
  28. *
  29. * @example
  30. transactionalMails.welcome(store, customer, 'pt_br', 'Hello {name}, welcome to our Shop!')
  31. .then(html => sendEmail(html, options))
  32. .catch(err => console.error(err))
  33. */
  34. welcome (store, customer, lang, customMessage) {
  35. return render('welcome', {
  36. store,
  37. customer,
  38. custom_message: customMessage
  39. }, store, lang)
  40. },
  41. /**
  42. * @method
  43. * @memberof transactionalMails
  44. * @description Returns HTML markup for abandoned cart email.
  45. * @param {object} store - Store body object
  46. * @param {object} customer - Customer body object
  47. * @param {object} cart - Cart body object
  48. * @param {string} [lang='en_us'] - Snake case language code, eg.: 'en_us', 'pt_br'
  49. * @param {string} [customMessage] - Custom text for the main template phrase
  50. * @returns {Promise}
  51. *
  52. * @example
  53. transactionalMails.abandonedCart(store, customer, cart, 'pt_br')
  54. .then(html => sendEmail(html, options))
  55. .catch(err => console.error(err))
  56. */
  57. abandonedCart (store, customer, cart, lang, customMessage) {
  58. return render('abandoned-cart', {
  59. store,
  60. customer,
  61. cart,
  62. custom_message: customMessage
  63. }, store, lang)
  64. },
  65. /**
  66. * @method
  67. * @memberof transactionalMails
  68. * @description Returns HTML markup for pending payment email.
  69. * @param {object} store - Store body object
  70. * @param {object} customer - Customer body object
  71. * @param {object} order - Order body object
  72. * @param {string} [lang='en_us'] - Snake case language code, eg.: 'en_us', 'pt_br'
  73. * @param {string} [customMessage] - Custom text for the main template phrase
  74. * @returns {Promise}
  75. *
  76. * @example
  77. transactionalMails.pending(store, customer, order, 'pt_br')
  78. .then(html => sendEmail(html, options))
  79. .catch(err => console.error(err))
  80. */
  81. pending (store, customer, order, lang, customMessage) {
  82. return render('pending', {
  83. store,
  84. customer,
  85. order,
  86. custom_message: customMessage
  87. }, store, lang)
  88. },
  89. /**
  90. * @method
  91. * @memberof transactionalMails
  92. * @description Returns HTML markup for delivered order email.
  93. * @param {object} store - Store body object
  94. * @param {object} customer - Customer body object
  95. * @param {object} order - Order body object
  96. * @param {string} [lang='en_us'] - Snake case language code, eg.: 'en_us', 'pt_br'
  97. * @param {string} [customMessage] - Custom text for the main template phrase
  98. * @returns {Promise}
  99. *
  100. * @example
  101. transactionalMails.delivered(store, customer, order, 'pt_br')
  102. .then(html => sendEmail(html, options))
  103. .catch(err => console.error(err))
  104. */
  105. delivered (store, customer, order, lang, customMessage) {
  106. return render('delivered', {
  107. store,
  108. customer,
  109. order,
  110. custom_message: customMessage
  111. }, store, lang)
  112. },
  113. /**
  114. * @method
  115. * @memberof transactionalMails
  116. * @description Returns HTML markup for order shipped email.
  117. * @param {object} store - Store body object
  118. * @param {object} customer - Customer body object
  119. * @param {object} order - Order body object
  120. * @param {string} [lang='en_us'] - Snake case language code, eg.: 'en_us', 'pt_br'
  121. * @param {string} [customMessage] - Custom text for the main template phrase
  122. * @returns {Promise}
  123. *
  124. * @example
  125. transactionalMails.shipped(store, customer, order, 'pt_br')
  126. .then(html => sendEmail(html, options))
  127. .catch(err => console.error(err))
  128. */
  129. shipped (store, customer, order, lang, customMessage) {
  130. return render('shipped', {
  131. store,
  132. customer,
  133. order,
  134. custom_message: customMessage
  135. }, store, lang)
  136. },
  137. /**
  138. * @method
  139. * @memberof transactionalMails
  140. * @description Returns HTML markup for payment unauthorized email.
  141. * @param {object} store - Store body object
  142. * @param {object} customer - Customer body object
  143. * @param {object} order - Order body object
  144. * @param {string} [lang='en_us'] - Snake case language code, eg.: 'en_us', 'pt_br'
  145. * @param {string} [customMessage] - Custom text for the main template phrase
  146. * @returns {Promise}
  147. *
  148. * @example
  149. transactionalMails.unauthorized(store, customer, order, 'pt_br')
  150. .then(html => sendEmail(html, options))
  151. .catch(err => console.error(err))
  152. */
  153. unauthorized (store, customer, order, lang, customMessage) {
  154. return render('unauthorized', {
  155. store,
  156. customer,
  157. order,
  158. custom_message: customMessage
  159. }, store, lang)
  160. },
  161. /**
  162. * @method
  163. * @memberof transactionalMails
  164. * @description Returns HTML markup for order voided email.
  165. * @param {object} store - Store body object
  166. * @param {object} customer - Customer body object
  167. * @param {object} order - Order body object
  168. * @param {string} [lang='en_us'] - Snake case language code, eg.: 'en_us', 'pt_br'
  169. * @param {string} [customMessage] - Custom text for the main template phrase
  170. * @returns {Promise}
  171. *
  172. * @example
  173. transactionalMails.voided(store, customer, order, 'pt_br')
  174. .then(html => sendEmail(html, options))
  175. .catch(err => console.error(err))
  176. */
  177. voided (store, customer, order, lang, customMessage) {
  178. return render('voided', {
  179. store,
  180. customer,
  181. order,
  182. custom_message: customMessage
  183. }, store, lang)
  184. },
  185. /**
  186. * @method
  187. * @memberof transactionalMails
  188. * @description Returns HTML markup for new order email.
  189. * @param {object} store - Store body object
  190. * @param {object} customer - Customer body object
  191. * @param {object} order - Order body object
  192. * @param {string} [lang='en_us'] - Snake case language code, eg.: 'en_us', 'pt_br'
  193. * @param {string} [customMessage] - Custom text for the main template phrase
  194. * @returns {Promise}
  195. *
  196. * @example
  197. transactionalMails.underAnalysis(store, customer, order, 'pt_br')
  198. .then(html => sendEmail(html, options))
  199. .catch(err => console.error(err))
  200. */
  201. underAnalysis (store, customer, order, lang, customMessage) {
  202. return render('under_analysis', {
  203. store,
  204. customer,
  205. order,
  206. custom_message: customMessage
  207. }, store, lang)
  208. },
  209. /**
  210. * @method
  211. * @memberof transactionalMails
  212. * @description Returns HTML markup for partially paid order email.
  213. * @param {object} store - Store body object
  214. * @param {object} customer - Customer body object
  215. * @param {object} order - Order body object
  216. * @param {string} [lang='en_us'] - Snake case language code, eg.: 'en_us', 'pt_br'
  217. * @param {string} [customMessage] - Custom text for the main template phrase
  218. * @returns {Promise}
  219. *
  220. * @example
  221. transactionalMails.partiallyPaid(store, customer, order, 'pt_br')
  222. .then(html => sendEmail(html, options))
  223. .catch(err => console.error(err))
  224. */
  225. partiallyPaid (store, customer, order, lang, customMessage) {
  226. return render('partially_paid', {
  227. store,
  228. customer,
  229. order,
  230. custom_message: customMessage
  231. }, store, lang)
  232. },
  233. /**
  234. * @method
  235. * @memberof transactionalMails
  236. * @description Returns HTML markup for paid order email.
  237. * @param {object} store - Store body object
  238. * @param {object} customer - Customer body object
  239. * @param {object} order - Order body object
  240. * @param {string} [lang='en_us'] - Snake case language code, eg.: 'en_us', 'pt_br'
  241. * @param {string} [customMessage] - Custom text for the main template phrase
  242. * @returns {Promise}
  243. *
  244. * @example
  245. transactionalMails.paid(store, customer, order, 'pt_br')
  246. .then(html => sendEmail(html, options))
  247. .catch(err => console.error(err))
  248. */
  249. paid (store, customer, order, lang, customMessage) {
  250. return render('paid', {
  251. store,
  252. customer,
  253. order,
  254. custom_message: customMessage
  255. }, store, lang)
  256. },
  257. /**
  258. * @method
  259. * @memberof transactionalMails
  260. * @description Returns HTML markup for order in dispute email.
  261. * @param {object} store - Store body object
  262. * @param {object} customer - Customer body object
  263. * @param {object} order - Order body object
  264. * @param {string} [lang='en_us'] - Snake case language code, eg.: 'en_us', 'pt_br'
  265. * @param {string} [customMessage] - Custom text for the main template phrase
  266. * @returns {Promise}
  267. *
  268. * @example
  269. transactionalMails.inDispute(store, customer, order, 'pt_br')
  270. .then(html => sendEmail(html, options))
  271. .catch(err => console.error(err))
  272. */
  273. inDispute (store, customer, order, lang, customMessage) {
  274. return render('in_dispute', {
  275. store,
  276. customer,
  277. order,
  278. custom_message: customMessage
  279. }, store, lang)
  280. },
  281. /**
  282. * @method
  283. * @memberof transactionalMails
  284. * @description Returns HTML markup for partially refunded email.
  285. * @param {object} store - Store body object
  286. * @param {object} customer - Customer body object
  287. * @param {object} order - Order body object
  288. * @param {string} [lang='en_us'] - Snake case language code, eg.: 'en_us', 'pt_br'
  289. * @param {string} [customMessage] - Custom text for the main template phrase
  290. * @returns {Promise}
  291. *
  292. * @example
  293. transactionalMails.partiallyRefunded(store, customer, order, 'pt_br')
  294. .then(html => sendEmail(html, options))
  295. .catch(err => console.error(err))
  296. */
  297. partiallyRefunded (store, customer, order, lang, customMessage) {
  298. return render('partially_refunded', {
  299. store,
  300. customer,
  301. order,
  302. custom_message: customMessage
  303. }, store, lang)
  304. },
  305. /**
  306. * @method
  307. * @memberof transactionalMails
  308. * @description Returns HTML markup for refunded order email.
  309. * @param {object} store - Store body object
  310. * @param {object} customer - Customer body object
  311. * @param {object} order - Order body object
  312. * @param {string} [lang='en_us'] - Snake case language code, eg.: 'en_us', 'pt_br'
  313. * @param {string} [customMessage] - Custom text for the main template phrase
  314. * @returns {Promise}
  315. *
  316. * @example
  317. transactionalMails.refunded(store, customer, order, 'pt_br')
  318. .then(html => sendEmail(html, options))
  319. .catch(err => console.error(err))
  320. */
  321. refunded (store, customer, order, lang, customMessage) {
  322. return render('refunded', {
  323. store,
  324. customer,
  325. order,
  326. custom_message: customMessage
  327. }, store, lang)
  328. },
  329. /**
  330. * @method
  331. * @memberof transactionalMails
  332. * @description Returns HTML markup for order invoice issued email.
  333. * @param {object} store - Store body object
  334. * @param {object} customer - Customer body object
  335. * @param {object} order - Order body object
  336. * @param {string} [lang='en_us'] - Snake case language code, eg.: 'en_us', 'pt_br'
  337. * @param {string} [customMessage] - Custom text for the main template phrase
  338. * @returns {Promise}
  339. *
  340. * @example
  341. transactionalMails.invoiceIssued(store, customer, order, 'pt_br')
  342. .then(html => sendEmail(html, options))
  343. .catch(err => console.error(err))
  344. */
  345. invoiceIssued (store, customer, order, lang, customMessage) {
  346. return render('invoice_issued', {
  347. store,
  348. customer,
  349. order,
  350. custom_message: customMessage
  351. }, store, lang)
  352. },
  353. /**
  354. * @method
  355. * @memberof transactionalMails
  356. * @description Returns HTML markup for order in production email.
  357. * @param {object} store - Store body object
  358. * @param {object} customer - Customer body object
  359. * @param {object} order - Order body object
  360. * @param {string} [lang='en_us'] - Snake case language code, eg.: 'en_us', 'pt_br'
  361. * @param {string} [customMessage] - Custom text for the main template phrase
  362. * @returns {Promise}
  363. *
  364. * @example
  365. transactionalMails.inProduction(store, customer, order, 'pt_br')
  366. .then(html => sendEmail(html, options))
  367. .catch(err => console.error(err))
  368. */
  369. inProduction (store, customer, order, lang, customMessage) {
  370. return render('in_production', {
  371. store,
  372. customer,
  373. order,
  374. custom_message: customMessage
  375. }, store, lang)
  376. },
  377. /**
  378. * @method
  379. * @memberof transactionalMails
  380. * @description Returns HTML markup for order in separation email.
  381. * @param {object} store - Store body object
  382. * @param {object} customer - Customer body object
  383. * @param {object} order - Order body object
  384. * @param {string} [lang='en_us'] - Snake case language code, eg.: 'en_us', 'pt_br'
  385. * @param {string} [customMessage] - Custom text for the main template phrase
  386. * @returns {Promise}
  387. *
  388. * @example
  389. transactionalMails.inSeparation(store, customer, order, 'pt_br')
  390. .then(html => sendEmail(html, options))
  391. .catch(err => console.error(err))
  392. */
  393. inSeparation (store, customer, order, lang, customMessage) {
  394. return render('in_separation', {
  395. store,
  396. customer,
  397. order,
  398. custom_message: customMessage
  399. }, store, lang)
  400. },
  401. /**
  402. * @method
  403. * @memberof transactionalMails
  404. * @description Returns HTML markup for order ready for shipping email.
  405. * @param {object} store - Store body object
  406. * @param {object} customer - Customer body object
  407. * @param {object} order - Order body object
  408. * @param {string} [lang='en_us'] - Snake case language code, eg.: 'en_us', 'pt_br'
  409. * @param {string} [customMessage] - Custom text for the main template phrase
  410. * @returns {Promise}
  411. *
  412. * @example
  413. transactionalMails.readyForShipping(store, customer, order, 'pt_br')
  414. .then(html => sendEmail(html, options))
  415. .catch(err => console.error(err))
  416. */
  417. readyForShipping (store, customer, order, lang, customMessage) {
  418. return render('ready_for_shipping', {
  419. store,
  420. customer,
  421. order,
  422. custom_message: customMessage
  423. }, store, lang)
  424. },
  425. /**
  426. * @method
  427. * @memberof transactionalMails
  428. * @description Returns HTML markup for partially shipped order email.
  429. * @param {object} store - Store body object
  430. * @param {object} customer - Customer body object
  431. * @param {object} order - Order body object
  432. * @param {string} [lang='en_us'] - Snake case language code, eg.: 'en_us', 'pt_br'
  433. * @param {string} [customMessage] - Custom text for the main template phrase
  434. * @returns {Promise}
  435. *
  436. * @example
  437. transactionalMails.partiallyShipped(store, customer, order, 'pt_br')
  438. .then(html => sendEmail(html, options))
  439. .catch(err => console.error(err))
  440. */
  441. partiallyShipped (store, customer, order, lang, customMessage) {
  442. return render('partially_shipped', {
  443. store,
  444. customer,
  445. order,
  446. custom_message: customMessage
  447. }, store, lang)
  448. },
  449. /**
  450. * @method
  451. * @memberof transactionalMails
  452. * @description Returns HTML markup for partially delivered order email.
  453. * @param {object} store - Store body object
  454. * @param {object} customer - Customer body object
  455. * @param {object} order - Order body object
  456. * @param {string} [lang='en_us'] - Snake case language code, eg.: 'en_us', 'pt_br'
  457. * @param {string} [customMessage] - Custom text for the main template phrase
  458. * @returns {Promise}
  459. *
  460. * @example
  461. transactionalMails.partiallyDelivered(store, customer, order, 'pt_br')
  462. .then(html => sendEmail(html, options))
  463. .catch(err => console.error(err))
  464. */
  465. partiallyDelivered (store, customer, order, lang, customMessage) {
  466. return render('partially_delivered', {
  467. store,
  468. customer,
  469. order,
  470. custom_message: customMessage
  471. }, store, lang)
  472. },
  473. /**
  474. * @method
  475. * @memberof transactionalMails
  476. * @description Returns HTML markup for order returned for exchange email.
  477. * @param {object} store - Store body object
  478. * @param {object} customer - Customer body object
  479. * @param {object} order - Order body object
  480. * @param {string} [lang='en_us'] - Snake case language code, eg.: 'en_us', 'pt_br'
  481. * @param {string} [customMessage] - Custom text for the main template phrase
  482. * @returns {Promise}
  483. *
  484. * @example
  485. transactionalMails.returnedForExchange(store, customer, order, 'pt_br')
  486. .then(html => sendEmail(html, options))
  487. .catch(err => console.error(err))
  488. */
  489. returnedForExchange (store, customer, order, lang, customMessage) {
  490. return render('returned_for_exchange', {
  491. store,
  492. customer,
  493. order,
  494. custom_message: customMessage
  495. }, store, lang)
  496. },
  497. /**
  498. * @method
  499. * @memberof transactionalMails
  500. * @description Returns HTML markup for order received for exchange email.
  501. * @param {object} store - Store body object
  502. * @param {object} customer - Customer body object
  503. * @param {object} order - Order body object
  504. * @param {string} [lang='en_us'] - Snake case language code, eg.: 'en_us', 'pt_br'
  505. * @param {string} [customMessage] - Custom text for the main template phrase
  506. * @returns {Promise}
  507. *
  508. * @example
  509. transactionalMails.receivedForExchange(store, customer, order, 'pt_br')
  510. .then(html => sendEmail(html, options))
  511. .catch(err => console.error(err))
  512. */
  513. receivedForExchange (store, customer, order, lang, customMessage) {
  514. return render('received_for_exchange', {
  515. store,
  516. customer,
  517. order,
  518. custom_message: customMessage
  519. }, store, lang)
  520. },
  521. /**
  522. * @method
  523. * @memberof transactionalMails
  524. * @description Returns HTML markup for returned order email.
  525. * @param {object} store - Store body object
  526. * @param {object} customer - Customer body object
  527. * @param {object} order - Order body object
  528. * @param {string} [lang='en_us'] - Snake case language code, eg.: 'en_us', 'pt_br'
  529. * @param {string} [customMessage] - Custom text for the main template phrase
  530. * @returns {Promise}
  531. *
  532. * @example
  533. transactionalMails.returned(store, customer, order, 'pt_br')
  534. .then(html => sendEmail(html, options))
  535. .catch(err => console.error(err))
  536. */
  537. returned (store, customer, order, lang, customMessage) {
  538. return render('returned', {
  539. store,
  540. customer,
  541. order,
  542. custom_message: customMessage
  543. }, store, lang)
  544. },
  545. /**
  546. * @method
  547. * @memberof transactionalMails
  548. * @description Returns HTML markup for authorized payment email.
  549. * @param {object} store - Store body object
  550. * @param {object} customer - Customer body object
  551. * @param {object} order - Order body object
  552. * @param {string} [lang='en_us'] - Snake case language code, eg.: 'en_us', 'pt_br'
  553. * @param {string} [customMessage] - Custom text for the main template phrase
  554. * @returns {Promise}
  555. *
  556. * @example
  557. transactionalMails.authorized(store, customer, order, 'pt_br')
  558. .then(html => sendEmail(html, options))
  559. .catch(err => console.error(err))
  560. */
  561. authorized (store, customer, order, lang, customMessage) {
  562. return render('authorized', {
  563. store,
  564. customer,
  565. order,
  566. custom_message: customMessage
  567. }, store, lang)
  568. },
  569. /**
  570. * @method
  571. * @memberof transactionalMails
  572. * @description Returns HTML markup for new order email.
  573. * @param {object} store - Store body object
  574. * @param {object} customer - Customer body object
  575. * @param {object} order - Order body object
  576. * @param {string} [lang='en_us'] - Snake case language code, eg.: 'en_us', 'pt_br'
  577. * @param {string} [customMessage] - Custom text for the main template phrase
  578. * @returns {Promise}
  579. *
  580. * @example
  581. transactionalMails.authorized(store, customer, order, 'pt_br')
  582. .then(html => sendEmail(html, options))
  583. .catch(err => console.error(err))
  584. */
  585. new_order (store, customer, order, lang, customMessage) {
  586. return render('new_order', {
  587. store,
  588. customer,
  589. order,
  590. custom_message: customMessage
  591. }, store, lang)
  592. }
  593. }
  594. /**
  595. * @namespace transactionalMails
  596. */