@unchainedshop/plugins 3.0.0-rc9 → 3.0.1

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 (292) hide show
  1. package/lib/files/gridfs/{gridfs-adapter.d.ts → adapter.d.ts} +2 -4
  2. package/lib/files/gridfs/adapter.d.ts.map +1 -0
  3. package/lib/files/gridfs/{gridfs-adapter.js → adapter.js} +1 -1
  4. package/lib/files/gridfs/adapter.js.map +1 -0
  5. package/lib/files/gridfs/handler-express.d.ts +10 -0
  6. package/lib/files/gridfs/handler-express.d.ts.map +1 -0
  7. package/lib/files/gridfs/{gridfs-webhook.js → handler-express.js} +3 -2
  8. package/lib/files/gridfs/handler-express.js.map +1 -0
  9. package/lib/files/gridfs/handler-fastify.d.ts +4 -0
  10. package/lib/files/gridfs/handler-fastify.d.ts.map +1 -0
  11. package/lib/files/gridfs/handler-fastify.js +91 -0
  12. package/lib/files/gridfs/handler-fastify.js.map +1 -0
  13. package/lib/files/gridfs/index.d.ts +4 -10
  14. package/lib/files/gridfs/index.d.ts.map +1 -1
  15. package/lib/files/gridfs/index.js +3 -27
  16. package/lib/files/gridfs/index.js.map +1 -1
  17. package/lib/files/gridfs/module.d.ts +26 -0
  18. package/lib/files/gridfs/module.d.ts.map +1 -0
  19. package/lib/files/gridfs/module.js +33 -0
  20. package/lib/files/gridfs/module.js.map +1 -0
  21. package/lib/files/minio/handler-express.d.ts +3 -0
  22. package/lib/files/minio/handler-express.d.ts.map +1 -0
  23. package/lib/files/minio/{minio-webhook.js → handler-express.js} +3 -2
  24. package/lib/files/minio/handler-express.js.map +1 -0
  25. package/lib/files/minio/handler-fastify.d.ts +4 -0
  26. package/lib/files/minio/handler-fastify.d.ts.map +1 -0
  27. package/lib/files/minio/handler-fastify.js +34 -0
  28. package/lib/files/minio/handler-fastify.js.map +1 -0
  29. package/lib/files/minio/{minio-adapter.d.ts → index.d.ts} +1 -1
  30. package/lib/files/minio/index.d.ts.map +1 -0
  31. package/lib/files/minio/{minio-adapter.js → index.js} +1 -1
  32. package/lib/files/minio/index.js.map +1 -0
  33. package/lib/filters/local-search.d.ts.map +1 -1
  34. package/lib/filters/local-search.js +3 -23
  35. package/lib/filters/local-search.js.map +1 -1
  36. package/lib/payment/apple-iap/adapter.d.ts +1 -1
  37. package/lib/payment/apple-iap/adapter.d.ts.map +1 -1
  38. package/lib/payment/apple-iap/adapter.js +5 -155
  39. package/lib/payment/apple-iap/adapter.js.map +1 -1
  40. package/lib/payment/apple-iap/fix-periods.d.ts +8 -0
  41. package/lib/payment/apple-iap/fix-periods.d.ts.map +1 -0
  42. package/lib/payment/apple-iap/fix-periods.js +22 -0
  43. package/lib/payment/apple-iap/fix-periods.js.map +1 -0
  44. package/lib/payment/apple-iap/handler-express.d.ts +3 -0
  45. package/lib/payment/apple-iap/handler-express.d.ts.map +1 -0
  46. package/lib/payment/apple-iap/handler-express.js +110 -0
  47. package/lib/payment/apple-iap/handler-express.js.map +1 -0
  48. package/lib/payment/apple-iap/handler-fastify.d.ts +4 -0
  49. package/lib/payment/apple-iap/handler-fastify.d.ts.map +1 -0
  50. package/lib/payment/apple-iap/handler-fastify.js +104 -0
  51. package/lib/payment/apple-iap/handler-fastify.js.map +1 -0
  52. package/lib/payment/apple-iap/index.d.ts +3 -1
  53. package/lib/payment/apple-iap/index.d.ts.map +1 -1
  54. package/lib/payment/apple-iap/index.js +2 -1
  55. package/lib/payment/apple-iap/index.js.map +1 -1
  56. package/lib/payment/apple-iap/module.d.ts +22 -0
  57. package/lib/payment/apple-iap/module.d.ts.map +1 -0
  58. package/lib/payment/apple-iap/{module/configureAppleTransactionsModule.js → module.js} +7 -2
  59. package/lib/payment/apple-iap/module.js.map +1 -0
  60. package/lib/payment/apple-iap/verify-receipt.d.ts +5 -0
  61. package/lib/payment/apple-iap/verify-receipt.d.ts.map +1 -0
  62. package/lib/payment/apple-iap/verify-receipt.js +26 -0
  63. package/lib/payment/apple-iap/verify-receipt.js.map +1 -0
  64. package/lib/payment/cryptopay/handler-express.d.ts +3 -0
  65. package/lib/payment/cryptopay/handler-express.d.ts.map +1 -0
  66. package/lib/payment/cryptopay/{middleware.js → handler-express.js} +3 -2
  67. package/lib/payment/cryptopay/{middleware.js.map → handler-express.js.map} +1 -1
  68. package/lib/payment/cryptopay/handler-fastify.d.ts +4 -0
  69. package/lib/payment/cryptopay/handler-fastify.d.ts.map +1 -0
  70. package/lib/payment/cryptopay/handler-fastify.js +69 -0
  71. package/lib/payment/cryptopay/handler-fastify.js.map +1 -0
  72. package/lib/payment/cryptopay/index.d.ts +4 -4
  73. package/lib/payment/cryptopay/index.d.ts.map +1 -1
  74. package/lib/payment/cryptopay/index.js +3 -4
  75. package/lib/payment/cryptopay/index.js.map +1 -1
  76. package/lib/payment/cryptopay/module.d.ts +54 -0
  77. package/lib/payment/cryptopay/module.d.ts.map +1 -0
  78. package/lib/payment/cryptopay/{module/configureCryptopayModule.js → module.js} +8 -3
  79. package/lib/payment/cryptopay/module.js.map +1 -0
  80. package/lib/payment/cryptopay/plugin.js +1 -1
  81. package/lib/payment/cryptopay/plugin.js.map +1 -1
  82. package/lib/payment/datatrans-v2/{middleware.d.ts → handler-express.d.ts} +1 -1
  83. package/lib/payment/datatrans-v2/handler-express.d.ts.map +1 -0
  84. package/lib/payment/datatrans-v2/{middleware.js → handler-express.js} +2 -2
  85. package/lib/payment/datatrans-v2/handler-express.js.map +1 -0
  86. package/lib/payment/datatrans-v2/handler-fastify.d.ts +3 -0
  87. package/lib/payment/datatrans-v2/handler-fastify.d.ts.map +1 -0
  88. package/lib/payment/datatrans-v2/handler-fastify.js +66 -0
  89. package/lib/payment/datatrans-v2/handler-fastify.js.map +1 -0
  90. package/lib/payment/datatrans-v2/index.d.ts +1 -1
  91. package/lib/payment/datatrans-v2/index.d.ts.map +1 -1
  92. package/lib/payment/datatrans-v2/index.js +0 -1
  93. package/lib/payment/datatrans-v2/index.js.map +1 -1
  94. package/lib/payment/paypal-checkout.js +2 -2
  95. package/lib/payment/paypal-checkout.js.map +1 -1
  96. package/lib/payment/payrexx/{middleware.d.ts → handler-express.d.ts} +1 -1
  97. package/lib/payment/payrexx/handler-express.d.ts.map +1 -0
  98. package/lib/payment/payrexx/{middleware.js → handler-express.js} +2 -2
  99. package/lib/payment/payrexx/handler-express.js.map +1 -0
  100. package/lib/payment/payrexx/handler-fastify.d.ts +3 -0
  101. package/lib/payment/payrexx/handler-fastify.d.ts.map +1 -0
  102. package/lib/payment/payrexx/handler-fastify.js +87 -0
  103. package/lib/payment/payrexx/handler-fastify.js.map +1 -0
  104. package/lib/payment/payrexx/index.d.ts +1 -1
  105. package/lib/payment/payrexx/index.d.ts.map +1 -1
  106. package/lib/payment/payrexx/index.js +0 -1
  107. package/lib/payment/payrexx/index.js.map +1 -1
  108. package/lib/payment/postfinance-checkout/{middleware.d.ts → handler-express.d.ts} +1 -1
  109. package/lib/payment/postfinance-checkout/handler-express.d.ts.map +1 -0
  110. package/lib/payment/postfinance-checkout/{middleware.js → handler-express.js} +1 -1
  111. package/lib/payment/postfinance-checkout/handler-express.js.map +1 -0
  112. package/lib/payment/postfinance-checkout/handler-fastify.d.ts +3 -0
  113. package/lib/payment/postfinance-checkout/handler-fastify.d.ts.map +1 -0
  114. package/lib/payment/postfinance-checkout/handler-fastify.js +39 -0
  115. package/lib/payment/postfinance-checkout/handler-fastify.js.map +1 -0
  116. package/lib/payment/postfinance-checkout/index.d.ts +1 -1
  117. package/lib/payment/postfinance-checkout/index.d.ts.map +1 -1
  118. package/lib/payment/postfinance-checkout/index.js +0 -1
  119. package/lib/payment/postfinance-checkout/index.js.map +1 -1
  120. package/lib/payment/saferpay/adapter.d.ts +0 -1
  121. package/lib/payment/saferpay/adapter.d.ts.map +1 -1
  122. package/lib/payment/saferpay/adapter.js +0 -1
  123. package/lib/payment/saferpay/adapter.js.map +1 -1
  124. package/lib/payment/saferpay/{middleware.d.ts → handler-express.d.ts} +1 -1
  125. package/lib/payment/saferpay/handler-express.d.ts.map +1 -0
  126. package/lib/payment/saferpay/{middleware.js → handler-express.js} +2 -2
  127. package/lib/payment/saferpay/handler-express.js.map +1 -0
  128. package/lib/payment/saferpay/handler-fastify.d.ts +3 -0
  129. package/lib/payment/saferpay/handler-fastify.d.ts.map +1 -0
  130. package/lib/payment/saferpay/handler-fastify.js +56 -0
  131. package/lib/payment/saferpay/handler-fastify.js.map +1 -0
  132. package/lib/payment/saferpay/index.d.ts +3 -2
  133. package/lib/payment/saferpay/index.d.ts.map +1 -1
  134. package/lib/payment/saferpay/index.js +2 -2
  135. package/lib/payment/saferpay/index.js.map +1 -1
  136. package/lib/payment/saferpay/module.d.ts +24 -0
  137. package/lib/payment/saferpay/module.d.ts.map +1 -0
  138. package/lib/payment/saferpay/{module/configureSaferpayTransactionsModule.js → module.js} +8 -3
  139. package/lib/payment/saferpay/module.js.map +1 -0
  140. package/lib/payment/stripe/{middleware.d.ts → handler-express.d.ts} +1 -1
  141. package/lib/payment/stripe/handler-express.d.ts.map +1 -0
  142. package/lib/payment/stripe/{middleware.js → handler-express.js} +2 -2
  143. package/lib/payment/stripe/handler-express.js.map +1 -0
  144. package/lib/payment/stripe/handler-fastify.d.ts +7 -0
  145. package/lib/payment/stripe/handler-fastify.d.ts.map +1 -0
  146. package/lib/payment/stripe/handler-fastify.js +112 -0
  147. package/lib/payment/stripe/handler-fastify.js.map +1 -0
  148. package/lib/payment/stripe/index.d.ts +1 -1
  149. package/lib/payment/stripe/index.d.ts.map +1 -1
  150. package/lib/payment/stripe/index.js +0 -1
  151. package/lib/payment/stripe/index.js.map +1 -1
  152. package/lib/presets/all-express.d.ts +7 -0
  153. package/lib/presets/all-express.d.ts.map +1 -0
  154. package/lib/presets/all-express.js +27 -0
  155. package/lib/presets/all-express.js.map +1 -0
  156. package/lib/presets/all-fastify.d.ts +7 -0
  157. package/lib/presets/all-fastify.d.ts.map +1 -0
  158. package/lib/presets/all-fastify.js +64 -0
  159. package/lib/presets/all-fastify.js.map +1 -0
  160. package/lib/presets/all.d.ts +69 -0
  161. package/lib/presets/all.d.ts.map +1 -0
  162. package/lib/presets/all.js +30 -0
  163. package/lib/presets/all.js.map +1 -0
  164. package/lib/presets/base-express.js +2 -2
  165. package/lib/presets/base-express.js.map +1 -1
  166. package/lib/presets/base-fastify.d.ts +4 -0
  167. package/lib/presets/base-fastify.d.ts.map +1 -0
  168. package/lib/presets/base-fastify.js +18 -0
  169. package/lib/presets/base-fastify.js.map +1 -0
  170. package/lib/presets/{base-modules.d.ts → base.d.ts} +3 -7
  171. package/lib/presets/base.d.ts.map +1 -0
  172. package/lib/presets/{base-modules.js → base.js} +3 -9
  173. package/lib/presets/base.js.map +1 -0
  174. package/lib/presets/crypto-express.js +2 -2
  175. package/lib/presets/crypto-express.js.map +1 -1
  176. package/lib/presets/crypto-fastify.d.ts +4 -0
  177. package/lib/presets/crypto-fastify.d.ts.map +1 -0
  178. package/lib/presets/crypto-fastify.js +12 -0
  179. package/lib/presets/crypto-fastify.js.map +1 -0
  180. package/lib/presets/crypto.d.ts +8 -0
  181. package/lib/presets/crypto.d.ts.map +1 -0
  182. package/lib/presets/crypto.js +9 -0
  183. package/lib/presets/crypto.js.map +1 -0
  184. package/lib/pricing/product-discount.js +2 -0
  185. package/lib/pricing/product-discount.js.map +1 -1
  186. package/lib/warehousing/eth-minter.js +2 -2
  187. package/lib/warehousing/eth-minter.js.map +1 -1
  188. package/lib/worker/BaseWorker.d.ts.map +1 -1
  189. package/lib/worker/BaseWorker.js +1 -3
  190. package/lib/worker/BaseWorker.js.map +1 -1
  191. package/lib/worker/error-notifications.js +1 -1
  192. package/lib/worker/error-notifications.js.map +1 -1
  193. package/lib/worker/zombie-killer.js +4 -1
  194. package/lib/worker/zombie-killer.js.map +1 -1
  195. package/package.json +41 -37
  196. package/src/files/gridfs/{gridfs-adapter.ts → adapter.ts} +1 -3
  197. package/src/files/gridfs/{gridfs-webhook.ts → handler-express.ts} +5 -3
  198. package/src/files/gridfs/handler-fastify.ts +122 -0
  199. package/src/files/gridfs/index.ts +4 -29
  200. package/src/files/gridfs/module.ts +39 -0
  201. package/src/files/minio/{minio-webhook.ts → handler-express.ts} +3 -1
  202. package/src/files/minio/handler-fastify.ts +44 -0
  203. package/src/filters/local-search.ts +3 -25
  204. package/src/payment/apple-iap/adapter.ts +6 -193
  205. package/src/payment/apple-iap/fix-periods.ts +34 -0
  206. package/src/payment/apple-iap/handler-express.ts +134 -0
  207. package/src/payment/apple-iap/handler-fastify.ts +137 -0
  208. package/src/payment/apple-iap/index.ts +5 -1
  209. package/src/payment/apple-iap/module.ts +29 -0
  210. package/src/payment/apple-iap/verify-receipt.ts +27 -0
  211. package/src/payment/cryptopay/{middleware.ts → handler-express.ts} +5 -5
  212. package/src/payment/cryptopay/handler-fastify.ts +89 -0
  213. package/src/payment/cryptopay/index.ts +5 -4
  214. package/src/payment/cryptopay/{module/configureCryptopayModule.ts → module.ts} +38 -39
  215. package/src/payment/cryptopay/plugin.ts +3 -3
  216. package/src/payment/datatrans-v2/{middleware.ts → handler-express.ts} +1 -1
  217. package/src/payment/datatrans-v2/handler-fastify.ts +88 -0
  218. package/src/payment/datatrans-v2/index.ts +0 -2
  219. package/src/payment/paypal-checkout.ts +2 -2
  220. package/src/payment/payrexx/{middleware.ts → handler-express.ts} +1 -1
  221. package/src/payment/payrexx/handler-fastify.ts +105 -0
  222. package/src/payment/payrexx/index.ts +0 -2
  223. package/src/payment/postfinance-checkout/handler-fastify.ts +52 -0
  224. package/src/payment/postfinance-checkout/index.ts +0 -2
  225. package/src/payment/saferpay/adapter.ts +2 -4
  226. package/src/payment/saferpay/{middleware.ts → handler-express.ts} +3 -3
  227. package/src/payment/saferpay/handler-fastify.ts +75 -0
  228. package/src/payment/saferpay/index.ts +5 -2
  229. package/src/payment/saferpay/{module/configureSaferpayTransactionsModule.ts → module.ts} +11 -3
  230. package/src/payment/stripe/{middleware.ts → handler-express.ts} +1 -1
  231. package/src/payment/stripe/handler-fastify.ts +139 -0
  232. package/src/payment/stripe/index.ts +0 -2
  233. package/src/presets/all-express.ts +51 -0
  234. package/src/presets/all-fastify.ts +87 -0
  235. package/src/presets/all.ts +35 -0
  236. package/src/presets/base-express.ts +2 -2
  237. package/src/presets/base-fastify.ts +20 -0
  238. package/src/presets/{base-modules.ts → base.ts} +3 -17
  239. package/src/presets/crypto-express.ts +2 -2
  240. package/src/presets/crypto-fastify.ts +15 -0
  241. package/src/presets/crypto.ts +11 -0
  242. package/src/pricing/product-discount.ts +2 -0
  243. package/src/warehousing/eth-minter.ts +2 -2
  244. package/src/worker/BaseWorker.ts +1 -4
  245. package/src/worker/error-notifications.ts +1 -1
  246. package/src/worker/zombie-killer.ts +4 -4
  247. package/lib/files/gridfs/gridfs-adapter.d.ts.map +0 -1
  248. package/lib/files/gridfs/gridfs-adapter.js.map +0 -1
  249. package/lib/files/gridfs/gridfs-webhook.d.ts +0 -11
  250. package/lib/files/gridfs/gridfs-webhook.d.ts.map +0 -1
  251. package/lib/files/gridfs/gridfs-webhook.js.map +0 -1
  252. package/lib/files/minio/minio-adapter.d.ts.map +0 -1
  253. package/lib/files/minio/minio-adapter.js.map +0 -1
  254. package/lib/files/minio/minio-webhook.d.ts +0 -2
  255. package/lib/files/minio/minio-webhook.d.ts.map +0 -1
  256. package/lib/files/minio/minio-webhook.js.map +0 -1
  257. package/lib/payment/apple-iap/module/configureAppleTransactionsModule.d.ts +0 -9
  258. package/lib/payment/apple-iap/module/configureAppleTransactionsModule.d.ts.map +0 -1
  259. package/lib/payment/apple-iap/module/configureAppleTransactionsModule.js.map +0 -1
  260. package/lib/payment/cryptopay/middleware.d.ts +0 -2
  261. package/lib/payment/cryptopay/middleware.d.ts.map +0 -1
  262. package/lib/payment/cryptopay/module/configureCryptopayModule.d.ts +0 -25
  263. package/lib/payment/cryptopay/module/configureCryptopayModule.d.ts.map +0 -1
  264. package/lib/payment/cryptopay/module/configureCryptopayModule.js.map +0 -1
  265. package/lib/payment/datatrans-v2/middleware.d.ts.map +0 -1
  266. package/lib/payment/datatrans-v2/middleware.js.map +0 -1
  267. package/lib/payment/payrexx/middleware.d.ts.map +0 -1
  268. package/lib/payment/payrexx/middleware.js.map +0 -1
  269. package/lib/payment/postfinance-checkout/middleware.d.ts.map +0 -1
  270. package/lib/payment/postfinance-checkout/middleware.js.map +0 -1
  271. package/lib/payment/saferpay/middleware.d.ts.map +0 -1
  272. package/lib/payment/saferpay/middleware.js.map +0 -1
  273. package/lib/payment/saferpay/module/configureSaferpayTransactionsModule.d.ts +0 -10
  274. package/lib/payment/saferpay/module/configureSaferpayTransactionsModule.d.ts.map +0 -1
  275. package/lib/payment/saferpay/module/configureSaferpayTransactionsModule.js.map +0 -1
  276. package/lib/payment/stripe/middleware.d.ts.map +0 -1
  277. package/lib/payment/stripe/middleware.js.map +0 -1
  278. package/lib/plugins-index.d.ts +0 -18
  279. package/lib/plugins-index.d.ts.map +0 -1
  280. package/lib/plugins-index.js +0 -52
  281. package/lib/plugins-index.js.map +0 -1
  282. package/lib/presets/base-modules.d.ts.map +0 -1
  283. package/lib/presets/base-modules.js.map +0 -1
  284. package/lib/presets/crypto-modules.d.ts +0 -11
  285. package/lib/presets/crypto-modules.d.ts.map +0 -1
  286. package/lib/presets/crypto-modules.js +0 -14
  287. package/lib/presets/crypto-modules.js.map +0 -1
  288. package/src/payment/apple-iap/module/configureAppleTransactionsModule.ts +0 -25
  289. package/src/plugins-index.ts +0 -90
  290. package/src/presets/crypto-modules.ts +0 -23
  291. /package/src/files/minio/{minio-adapter.ts → index.ts} +0 -0
  292. /package/src/payment/postfinance-checkout/{middleware.ts → handler-express.ts} +0 -0
@@ -1,156 +1,8 @@
1
- import { EnrollmentStatus } from '@unchainedshop/core-enrollments';
2
1
  import { PaymentAdapter, PaymentDirector, PaymentError } from '@unchainedshop/core';
3
2
  import { createLogger } from '@unchainedshop/logger';
3
+ import { verifyReceipt } from './verify-receipt.js';
4
4
  const logger = createLogger('unchained:core-payment:iap');
5
- const { APPLE_IAP_SHARED_SECRET, APPLE_IAP_ENVIRONMENT = 'sandbox' } = process.env;
6
- // https://developer.apple.com/documentation/storekit/in-app_purchase/validating_receipts_with_the_app_store
7
- const environments = {
8
- sandbox: 'https://sandbox.itunes.apple.com/verifyReceipt',
9
- production: 'https://buy.itunes.apple.com/verifyReceipt',
10
- };
11
- const verifyReceipt = async ({ receiptData, password }) => {
12
- const payload = {
13
- 'receipt-data': receiptData,
14
- };
15
- if (password) {
16
- payload.password = password;
17
- }
18
- const result = await fetch(environments[APPLE_IAP_ENVIRONMENT], {
19
- body: JSON.stringify(payload),
20
- method: 'POST',
21
- // eslint-disable-next-line
22
- // @ts-ignore
23
- duplex: 'half',
24
- headers: {
25
- 'Content-Type': 'application/json',
26
- },
27
- });
28
- return result.json();
29
- };
30
- const AppleNotificationTypes = {
31
- INITIAL_BUY: 'INITIAL_BUY',
32
- DID_RECOVER: 'DID_RECOVER',
33
- DID_CHANGE_RENEWAL_STATUS: 'DID_CHANGE_RENEWAL_STATUS',
34
- DID_FAIL_TO_RENEW: 'DID_FAIL_TO_RENEW',
35
- DID_CHANGE_RENEWAL_PREF: 'DID_CHANGE_RENEWAL_PREF',
36
- };
37
- const fixPeriods = async ({ transactionId, enrollmentId, orderId, transactions }, unchainedAPI) => {
38
- const relevantTransactions = transactions.filter(
39
- // eslint-disable-next-line
40
- ({ original_transaction_id }) => {
41
- return original_transaction_id === transactionId; // eslint-disable-line
42
- });
43
- const adjustedEnrollmentPeriods = relevantTransactions
44
- .map((transaction) => {
45
- return {
46
- isTrial: transaction.is_trial_period === 'true', // eslint-disable-line
47
- start: new Date(parseInt(transaction.purchase_date_ms, 10)),
48
- end: new Date(parseInt(transaction.expires_date_ms, 10)),
49
- orderId: transaction.transaction_id === transactionId ? orderId : null,
50
- };
51
- })
52
- .toSorted((left, right) => {
53
- return left.end.getTime() - right.end.getTime();
54
- });
55
- await unchainedAPI.modules.enrollments.removeEnrollmentPeriodByOrderId(enrollmentId, orderId);
56
- return Promise.all(adjustedEnrollmentPeriods.map((period) => unchainedAPI.modules.enrollments.addEnrollmentPeriod(enrollmentId, period)));
57
- };
58
- export const appleIAPHandler = async (req, res) => {
59
- if (req.method === 'POST') {
60
- try {
61
- const resolvedContext = req.unchainedContext;
62
- const { modules, services } = resolvedContext;
63
- const responseBody = req.body || {};
64
- if (responseBody.password !== APPLE_IAP_SHARED_SECRET) {
65
- throw new Error('shared secret not valid');
66
- }
67
- const transactions = responseBody?.unified_receipt?.latest_receipt_info; // eslint-disable-line
68
- const latestTransaction = transactions[0];
69
- if (responseBody.notification_type === AppleNotificationTypes.INITIAL_BUY) {
70
- // Find the cart to checkout
71
- const orderPayment = await modules.orders.payments.findOrderPaymentByContextData({
72
- context: {
73
- 'meta.transactionIdentifier': latestTransaction.transaction_id,
74
- },
75
- });
76
- if (!orderPayment)
77
- throw new Error('Could not find any matching order payment');
78
- const order = await services.orders.checkoutOrder(orderPayment.orderId, {
79
- paymentContext: {
80
- receiptData: responseBody?.unified_receipt?.latest_receipt, // eslint-disable-line
81
- },
82
- });
83
- const orderId = order._id;
84
- const enrollment = await modules.enrollments.findEnrollment({
85
- orderId,
86
- });
87
- await fixPeriods({
88
- transactionId: latestTransaction.original_transaction_id,
89
- transactions,
90
- enrollmentId: enrollment._id,
91
- orderId,
92
- }, resolvedContext);
93
- logger.info(`Apple IAP Webhook: Confirmed checkout for order ${order.orderNumber}`, {
94
- orderId: order._id,
95
- });
96
- }
97
- else {
98
- // Just store payment credentials, use the enrollments paymentProvider reference and
99
- // let the job do the rest
100
- const originalOrderPayment = await modules.orders.payments.findOrderPaymentByContextData({
101
- context: {
102
- 'meta.transactionIdentifier': latestTransaction.original_transaction_id,
103
- },
104
- });
105
- if (!originalOrderPayment)
106
- throw new Error('Could not find any matching order payment');
107
- const originalOrder = await modules.orders.findOrder({
108
- orderId: originalOrderPayment.orderId,
109
- });
110
- const enrollment = await modules.enrollments.findEnrollment({
111
- orderId: originalOrder._id,
112
- });
113
- await services.orders.registerPaymentCredentials(enrollment.payment.paymentProviderId, {
114
- transactionContext: {
115
- receiptData: responseBody?.unified_receipt?.latest_receipt, // eslint-disable-line
116
- },
117
- userId: enrollment.userId,
118
- });
119
- await fixPeriods({
120
- transactionId: latestTransaction.original_transaction_id,
121
- transactions,
122
- enrollmentId: enrollment._id,
123
- orderId: originalOrder._id,
124
- }, resolvedContext);
125
- logger.info(`Apple IAP Webhook: Processed notification for ${latestTransaction.original_transaction_id} and type ${responseBody.notification_type}`);
126
- if (responseBody.notification_type === AppleNotificationTypes.DID_RECOVER) {
127
- if (enrollment.status !== EnrollmentStatus.TERMINATED &&
128
- responseBody.auto_renew_status === 'false') {
129
- await services.enrollments.terminateEnrollment(enrollment);
130
- }
131
- }
132
- if (responseBody.notification_type === AppleNotificationTypes.DID_CHANGE_RENEWAL_STATUS) {
133
- if (enrollment.status !== EnrollmentStatus.TERMINATED &&
134
- responseBody.auto_renew_status === 'false') {
135
- await services.enrollments.terminateEnrollment(enrollment);
136
- }
137
- }
138
- logger.info(`Apple IAP Webhook: Updated enrollment from Apple`);
139
- }
140
- res.writeHead(200);
141
- res.end();
142
- return;
143
- }
144
- catch (e) {
145
- logger.warn(`Apple IAP Webhook: ${e.message}`, e);
146
- res.writeHead(503);
147
- res.end(JSON.stringify({ name: e.name, code: e.code, message: e.message }));
148
- return;
149
- }
150
- }
151
- res.writeHead(404);
152
- res.end();
153
- };
5
+ const { APPLE_IAP_SHARED_SECRET } = process.env;
154
6
  const AppleIAP = {
155
7
  ...PaymentAdapter,
156
8
  key: 'shop.unchained.apple-iap',
@@ -161,7 +13,7 @@ const AppleIAP = {
161
13
  return type === 'GENERIC';
162
14
  },
163
15
  actions: (params, context) => {
164
- const { modules } = context;
16
+ const { order, modules } = context;
165
17
  const adapterActions = {
166
18
  ...PaymentAdapter.actions(params, context),
167
19
  configurationError() {
@@ -212,10 +64,8 @@ const AppleIAP = {
212
64
  },
213
65
  // eslint-disable-next-line
214
66
  async charge(transactionContext) {
215
- const { order } = context;
216
67
  const { meta, paymentCredentials, receiptData } = transactionContext || {};
217
68
  const { transactionIdentifier } = meta || {};
218
- const appleTransactions = context.modules.appleTransactions;
219
69
  if (!transactionIdentifier) {
220
70
  throw new Error('Apple IAP Plugin: You have to set the transaction id on the order payment');
221
71
  }
@@ -250,11 +100,11 @@ const AppleIAP = {
250
100
  matchedTransaction.product_id === productId; // eslint-disable-line
251
101
  if (!isMatchesTransaction)
252
102
  throw new Error('Apple IAP Plugin: Product in order does not match transaction');
253
- const alreadyProcessedTransaction = await appleTransactions.findTransactionById(transactionIdentifier);
103
+ const alreadyProcessedTransaction = await modules.appleTransactions.findTransactionById(transactionIdentifier);
254
104
  if (alreadyProcessedTransaction)
255
105
  throw new Error('Apple IAP Plugin: Transaction already processed');
256
106
  // All good
257
- await appleTransactions.createTransaction({
107
+ await modules.appleTransactions.createTransaction({
258
108
  _id: transactionIdentifier,
259
109
  matchedTransaction,
260
110
  orderId: order._id,
@@ -1 +1 @@
1
- {"version":3,"file":"adapter.js","sourceRoot":"","sources":["../../../src/payment/apple-iap/adapter.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"adapter.js","sourceRoot":"","sources":["../../../src/payment/apple-iap/adapter.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,8 @@
1
+ import { UnchainedCore } from '@unchainedshop/core';
2
+ export declare const fixPeriods: ({ transactionId, enrollmentId, orderId, transactions }: {
3
+ transactionId: any;
4
+ enrollmentId: any;
5
+ orderId: any;
6
+ transactions: any;
7
+ }, unchainedAPI: UnchainedCore) => Promise<any[]>;
8
+ //# sourceMappingURL=fix-periods.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fix-periods.d.ts","sourceRoot":"","sources":["../../../src/payment/apple-iap/fix-periods.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAEpD,eAAO,MAAM,UAAU;;;;;iBAEP,aAAa,mBA6B5B,CAAC"}
@@ -0,0 +1,22 @@
1
+ export const fixPeriods = async ({ transactionId, enrollmentId, orderId, transactions }, unchainedAPI) => {
2
+ const relevantTransactions = transactions.filter(
3
+ // eslint-disable-next-line
4
+ ({ original_transaction_id }) => {
5
+ return original_transaction_id === transactionId; // eslint-disable-line
6
+ });
7
+ const adjustedEnrollmentPeriods = relevantTransactions
8
+ .map((transaction) => {
9
+ return {
10
+ isTrial: transaction.is_trial_period === 'true', // eslint-disable-line
11
+ start: new Date(parseInt(transaction.purchase_date_ms, 10)),
12
+ end: new Date(parseInt(transaction.expires_date_ms, 10)),
13
+ orderId: transaction.transaction_id === transactionId ? orderId : null,
14
+ };
15
+ })
16
+ .toSorted((left, right) => {
17
+ return left.end.getTime() - right.end.getTime();
18
+ });
19
+ await unchainedAPI.modules.enrollments.removeEnrollmentPeriodByOrderId(enrollmentId, orderId);
20
+ return Promise.all(adjustedEnrollmentPeriods.map((period) => unchainedAPI.modules.enrollments.addEnrollmentPeriod(enrollmentId, period)));
21
+ };
22
+ //# sourceMappingURL=fix-periods.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fix-periods.js","sourceRoot":"","sources":["../../../src/payment/apple-iap/fix-periods.ts"],"names":[],"mappings":"AAEA,MAAM,CAAC,MAAM,UAAU,GAAG,KAAK,EAC7B,EAAE,aAAa,EAAE,YAAY,EAAE,OAAO,EAAE,YAAY,EAAE,EACtD,YAA2B,EAC3B,EAAE;IACF,MAAM,oBAAoB,GAAG,YAAY,CAAC,MAAM;IAC9C,2BAA2B;IAC3B,CAAC,EAAE,uBAAuB,EAAE,EAAE,EAAE;QAC9B,OAAO,uBAAuB,KAAK,aAAa,CAAC,CAAC,sBAAsB;IAC1E,CAAC,CACF,CAAC;IAEF,MAAM,yBAAyB,GAAG,oBAAoB;SACnD,GAAG,CAAC,CAAC,WAAW,EAAE,EAAE;QACnB,OAAO;YACL,OAAO,EAAE,WAAW,CAAC,eAAe,KAAK,MAAM,EAAE,sBAAsB;YACvE,KAAK,EAAE,IAAI,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,gBAAgB,EAAE,EAAE,CAAC,CAAC;YAC3D,GAAG,EAAE,IAAI,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,eAAe,EAAE,EAAE,CAAC,CAAC;YACxD,OAAO,EAAE,WAAW,CAAC,cAAc,KAAK,aAAa,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI;SACvE,CAAC;IACJ,CAAC,CAAC;SACD,QAAQ,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE;QACxB,OAAO,IAAI,CAAC,GAAG,CAAC,OAAO,EAAE,GAAG,KAAK,CAAC,GAAG,CAAC,OAAO,EAAE,CAAC;IAClD,CAAC,CAAC,CAAC;IAEL,MAAM,YAAY,CAAC,OAAO,CAAC,WAAW,CAAC,+BAA+B,CAAC,YAAY,EAAE,OAAO,CAAC,CAAC;IAE9F,OAAO,OAAO,CAAC,GAAG,CAChB,yBAAyB,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CACvC,YAAY,CAAC,OAAO,CAAC,WAAW,CAAC,mBAAmB,CAAC,YAAY,EAAE,MAAM,CAAC,CAC3E,CACF,CAAC;AACJ,CAAC,CAAC"}
@@ -0,0 +1,3 @@
1
+ export declare const appleIAPHandler: (req: any, res: any) => Promise<void>;
2
+ export default appleIAPHandler;
3
+ //# sourceMappingURL=handler-express.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"handler-express.d.ts","sourceRoot":"","sources":["../../../src/payment/apple-iap/handler-express.ts"],"names":[],"mappings":"AAiBA,eAAO,MAAM,eAAe,uCAkH3B,CAAC;AAEF,eAAe,eAAe,CAAC"}
@@ -0,0 +1,110 @@
1
+ import { EnrollmentStatus } from '@unchainedshop/core-enrollments';
2
+ import { createLogger } from '@unchainedshop/logger';
3
+ import { fixPeriods } from './fix-periods.js';
4
+ const logger = createLogger('unchained:core-payment:iap');
5
+ const { APPLE_IAP_SHARED_SECRET } = process.env;
6
+ const AppleNotificationTypes = {
7
+ INITIAL_BUY: 'INITIAL_BUY',
8
+ DID_RECOVER: 'DID_RECOVER',
9
+ DID_CHANGE_RENEWAL_STATUS: 'DID_CHANGE_RENEWAL_STATUS',
10
+ DID_FAIL_TO_RENEW: 'DID_FAIL_TO_RENEW',
11
+ DID_CHANGE_RENEWAL_PREF: 'DID_CHANGE_RENEWAL_PREF',
12
+ };
13
+ export const appleIAPHandler = async (req, res) => {
14
+ if (req.method === 'POST') {
15
+ try {
16
+ const resolvedContext = req.unchainedContext;
17
+ const { modules, services } = resolvedContext;
18
+ const responseBody = req.body || {};
19
+ if (responseBody.password !== APPLE_IAP_SHARED_SECRET) {
20
+ throw new Error('shared secret not valid');
21
+ }
22
+ const transactions = responseBody?.unified_receipt?.latest_receipt_info; // eslint-disable-line
23
+ const latestTransaction = transactions[0];
24
+ if (responseBody.notification_type === AppleNotificationTypes.INITIAL_BUY) {
25
+ // Find the cart to checkout
26
+ const orderPayment = await modules.orders.payments.findOrderPaymentByContextData({
27
+ context: {
28
+ 'meta.transactionIdentifier': latestTransaction.transaction_id,
29
+ },
30
+ });
31
+ if (!orderPayment)
32
+ throw new Error('Could not find any matching order payment');
33
+ const order = await services.orders.checkoutOrder(orderPayment.orderId, {
34
+ paymentContext: {
35
+ receiptData: responseBody?.unified_receipt?.latest_receipt, // eslint-disable-line
36
+ },
37
+ });
38
+ const orderId = order._id;
39
+ const enrollment = await modules.enrollments.findEnrollment({
40
+ orderId,
41
+ });
42
+ await fixPeriods({
43
+ transactionId: latestTransaction.original_transaction_id,
44
+ transactions,
45
+ enrollmentId: enrollment._id,
46
+ orderId,
47
+ }, resolvedContext);
48
+ logger.info(`Apple IAP Webhook: Confirmed checkout for order ${order.orderNumber}`, {
49
+ orderId: order._id,
50
+ });
51
+ }
52
+ else {
53
+ // Just store payment credentials, use the enrollments paymentProvider reference and
54
+ // let the job do the rest
55
+ const originalOrderPayment = await modules.orders.payments.findOrderPaymentByContextData({
56
+ context: {
57
+ 'meta.transactionIdentifier': latestTransaction.original_transaction_id,
58
+ },
59
+ });
60
+ if (!originalOrderPayment)
61
+ throw new Error('Could not find any matching order payment');
62
+ const originalOrder = await modules.orders.findOrder({
63
+ orderId: originalOrderPayment.orderId,
64
+ });
65
+ const enrollment = await modules.enrollments.findEnrollment({
66
+ orderId: originalOrder._id,
67
+ });
68
+ await services.orders.registerPaymentCredentials(enrollment.payment.paymentProviderId, {
69
+ transactionContext: {
70
+ receiptData: responseBody?.unified_receipt?.latest_receipt, // eslint-disable-line
71
+ },
72
+ userId: enrollment.userId,
73
+ });
74
+ await fixPeriods({
75
+ transactionId: latestTransaction.original_transaction_id,
76
+ transactions,
77
+ enrollmentId: enrollment._id,
78
+ orderId: originalOrder._id,
79
+ }, resolvedContext);
80
+ logger.info(`Apple IAP Webhook: Processed notification for ${latestTransaction.original_transaction_id} and type ${responseBody.notification_type}`);
81
+ if (responseBody.notification_type === AppleNotificationTypes.DID_RECOVER) {
82
+ if (enrollment.status !== EnrollmentStatus.TERMINATED &&
83
+ responseBody.auto_renew_status === 'false') {
84
+ await services.enrollments.terminateEnrollment(enrollment);
85
+ }
86
+ }
87
+ if (responseBody.notification_type === AppleNotificationTypes.DID_CHANGE_RENEWAL_STATUS) {
88
+ if (enrollment.status !== EnrollmentStatus.TERMINATED &&
89
+ responseBody.auto_renew_status === 'false') {
90
+ await services.enrollments.terminateEnrollment(enrollment);
91
+ }
92
+ }
93
+ logger.info(`Apple IAP Webhook: Updated enrollment from Apple`);
94
+ }
95
+ res.writeHead(200);
96
+ res.end();
97
+ return;
98
+ }
99
+ catch (e) {
100
+ logger.warn(`Apple IAP Webhook: ${e.message}`, e);
101
+ res.writeHead(503);
102
+ res.end(JSON.stringify({ name: e.name, code: e.code, message: e.message }));
103
+ return;
104
+ }
105
+ }
106
+ res.writeHead(404);
107
+ res.end();
108
+ };
109
+ export default appleIAPHandler;
110
+ //# sourceMappingURL=handler-express.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"handler-express.js","sourceRoot":"","sources":["../../../src/payment/apple-iap/handler-express.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ import { RouteHandlerMethod } from 'fastify';
2
+ export declare const appleIAPHandler: RouteHandlerMethod;
3
+ export default appleIAPHandler;
4
+ //# sourceMappingURL=handler-fastify.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"handler-fastify.d.ts","sourceRoot":"","sources":["../../../src/payment/apple-iap/handler-fastify.ts"],"names":[],"mappings":"AAIA,OAAO,EAAkB,kBAAkB,EAAE,MAAM,SAAS,CAAC;AAe7D,eAAO,MAAM,eAAe,EAAE,kBAmH7B,CAAC;AAEF,eAAe,eAAe,CAAC"}
@@ -0,0 +1,104 @@
1
+ import { EnrollmentStatus } from '@unchainedshop/core-enrollments';
2
+ import { createLogger } from '@unchainedshop/logger';
3
+ import { fixPeriods } from './fix-periods.js';
4
+ const logger = createLogger('unchained:core-payment:iap');
5
+ const { APPLE_IAP_SHARED_SECRET } = process.env;
6
+ const AppleNotificationTypes = {
7
+ INITIAL_BUY: 'INITIAL_BUY',
8
+ DID_RECOVER: 'DID_RECOVER',
9
+ DID_CHANGE_RENEWAL_STATUS: 'DID_CHANGE_RENEWAL_STATUS',
10
+ DID_FAIL_TO_RENEW: 'DID_FAIL_TO_RENEW',
11
+ DID_CHANGE_RENEWAL_PREF: 'DID_CHANGE_RENEWAL_PREF',
12
+ };
13
+ export const appleIAPHandler = async (req, reply) => {
14
+ try {
15
+ const resolvedContext = req.unchainedContext;
16
+ const { modules, services } = resolvedContext;
17
+ const responseBody = req.body || {};
18
+ if (responseBody.password !== APPLE_IAP_SHARED_SECRET) {
19
+ throw new Error('shared secret not valid');
20
+ }
21
+ const transactions = responseBody?.unified_receipt?.latest_receipt_info; // eslint-disable-line
22
+ const latestTransaction = transactions[0];
23
+ if (responseBody.notification_type === AppleNotificationTypes.INITIAL_BUY) {
24
+ // Find the cart to checkout
25
+ const orderPayment = await modules.orders.payments.findOrderPaymentByContextData({
26
+ context: {
27
+ 'meta.transactionIdentifier': latestTransaction.transaction_id,
28
+ },
29
+ });
30
+ if (!orderPayment)
31
+ throw new Error('Could not find any matching order payment');
32
+ const order = await services.orders.checkoutOrder(orderPayment.orderId, {
33
+ paymentContext: {
34
+ receiptData: responseBody?.unified_receipt?.latest_receipt, // eslint-disable-line
35
+ },
36
+ });
37
+ const orderId = order._id;
38
+ const enrollment = await modules.enrollments.findEnrollment({
39
+ orderId,
40
+ });
41
+ await fixPeriods({
42
+ transactionId: latestTransaction.original_transaction_id,
43
+ transactions,
44
+ enrollmentId: enrollment._id,
45
+ orderId,
46
+ }, resolvedContext);
47
+ logger.info(`Apple IAP Webhook: Confirmed checkout for order ${order.orderNumber}`, {
48
+ orderId: order._id,
49
+ });
50
+ }
51
+ else {
52
+ // Just store payment credentials, use the enrollments paymentProvider reference and
53
+ // let the job do the rest
54
+ const originalOrderPayment = await modules.orders.payments.findOrderPaymentByContextData({
55
+ context: {
56
+ 'meta.transactionIdentifier': latestTransaction.original_transaction_id,
57
+ },
58
+ });
59
+ if (!originalOrderPayment)
60
+ throw new Error('Could not find any matching order payment');
61
+ const originalOrder = await modules.orders.findOrder({
62
+ orderId: originalOrderPayment.orderId,
63
+ });
64
+ const enrollment = await modules.enrollments.findEnrollment({
65
+ orderId: originalOrder._id,
66
+ });
67
+ await services.orders.registerPaymentCredentials(enrollment.payment.paymentProviderId, {
68
+ transactionContext: {
69
+ receiptData: responseBody?.unified_receipt?.latest_receipt, // eslint-disable-line
70
+ },
71
+ userId: enrollment.userId,
72
+ });
73
+ await fixPeriods({
74
+ transactionId: latestTransaction.original_transaction_id,
75
+ transactions,
76
+ enrollmentId: enrollment._id,
77
+ orderId: originalOrder._id,
78
+ }, resolvedContext);
79
+ logger.info(`Apple IAP Webhook: Processed notification for ${latestTransaction.original_transaction_id} and type ${responseBody.notification_type}`);
80
+ if (responseBody.notification_type === AppleNotificationTypes.DID_RECOVER) {
81
+ if (enrollment.status !== EnrollmentStatus.TERMINATED &&
82
+ responseBody.auto_renew_status === 'false') {
83
+ await services.enrollments.terminateEnrollment(enrollment);
84
+ }
85
+ }
86
+ if (responseBody.notification_type === AppleNotificationTypes.DID_CHANGE_RENEWAL_STATUS) {
87
+ if (enrollment.status !== EnrollmentStatus.TERMINATED &&
88
+ responseBody.auto_renew_status === 'false') {
89
+ await services.enrollments.terminateEnrollment(enrollment);
90
+ }
91
+ }
92
+ logger.info(`Apple IAP Webhook: Updated enrollment from Apple`);
93
+ }
94
+ reply.status(200);
95
+ return reply.send();
96
+ }
97
+ catch (e) {
98
+ logger.warn(`Apple IAP Webhook: ${e.message}`, e);
99
+ reply.status(503);
100
+ return reply.send({ name: e.name, code: e.code, message: e.message });
101
+ }
102
+ };
103
+ export default appleIAPHandler;
104
+ //# sourceMappingURL=handler-fastify.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"handler-fastify.js","sourceRoot":"","sources":["../../../src/payment/apple-iap/handler-fastify.ts"],"names":[],"mappings":"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"}
@@ -1,3 +1,5 @@
1
1
  export * from './adapter.js';
2
- export * from './module/configureAppleTransactionsModule.js';
2
+ import appleTransactionsModule, { type AppleTransactionsModule } from './module.js';
3
+ export type { AppleTransactionsModule };
4
+ export default appleTransactionsModule;
3
5
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/payment/apple-iap/index.ts"],"names":[],"mappings":"AAAA,cAAc,cAAc,CAAC;AAC7B,cAAc,8CAA8C,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/payment/apple-iap/index.ts"],"names":[],"mappings":"AAAA,cAAc,cAAc,CAAC;AAE7B,OAAO,uBAAuB,EAAE,EAAE,KAAK,uBAAuB,EAAE,MAAM,aAAa,CAAC;AAEpF,YAAY,EAAE,uBAAuB,EAAE,CAAC;AACxC,eAAe,uBAAuB,CAAC"}
@@ -1,3 +1,4 @@
1
1
  export * from './adapter.js';
2
- export * from './module/configureAppleTransactionsModule.js';
2
+ import appleTransactionsModule from './module.js';
3
+ export default appleTransactionsModule;
3
4
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/payment/apple-iap/index.ts"],"names":[],"mappings":"AAAA,cAAc,cAAc,CAAC;AAC7B,cAAc,8CAA8C,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/payment/apple-iap/index.ts"],"names":[],"mappings":"AAAA,cAAc,cAAc,CAAC;AAE7B,OAAO,uBAAyD,MAAM,aAAa,CAAC;AAGpF,eAAe,uBAAuB,CAAC"}
@@ -0,0 +1,22 @@
1
+ import { AppleTransaction } from './db/AppleTransactionsCollection.js';
2
+ export declare const configureAppleTransactionsModule: ({ db }: {
3
+ db: any;
4
+ }) => Promise<{
5
+ findTransactionById: (transactionIdentifier: string) => Promise<AppleTransaction>;
6
+ createTransaction: (doc: AppleTransaction) => Promise<string>;
7
+ }>;
8
+ declare const _default: {
9
+ appleTransactions: {
10
+ configure: ({ db }: {
11
+ db: any;
12
+ }) => Promise<{
13
+ findTransactionById: (transactionIdentifier: string) => Promise<AppleTransaction>;
14
+ createTransaction: (doc: AppleTransaction) => Promise<string>;
15
+ }>;
16
+ };
17
+ };
18
+ export default _default;
19
+ export type AppleTransactionsModule = {
20
+ appleTransactions: Awaited<ReturnType<typeof configureAppleTransactionsModule>>;
21
+ };
22
+ //# sourceMappingURL=module.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"module.d.ts","sourceRoot":"","sources":["../../../src/payment/apple-iap/module.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAA+B,MAAM,qCAAqC,CAAC;AAEpG,eAAO,MAAM,gCAAgC;;;iDAIU,MAAM,KAAG,OAAO,CAAC,gBAAgB,CAAC;6BAItD,gBAAgB;EAQlD,CAAC;;;;;;yDAZqD,MAAM,KAAG,OAAO,CAAC,gBAAgB,CAAC;qCAItD,gBAAgB;;;;AAUnD,wBAIE;AAEF,MAAM,MAAM,uBAAuB,GAAG;IACpC,iBAAiB,EAAE,OAAO,CAAC,UAAU,CAAC,OAAO,gCAAgC,CAAC,CAAC,CAAC;CACjF,CAAC"}
@@ -1,4 +1,4 @@
1
- import { AppleTransactionsCollection } from '../db/AppleTransactionsCollection.js';
1
+ import { AppleTransactionsCollection } from './db/AppleTransactionsCollection.js';
2
2
  export const configureAppleTransactionsModule = async ({ db }) => {
3
3
  const AppleTransactions = await AppleTransactionsCollection(db);
4
4
  return {
@@ -14,4 +14,9 @@ export const configureAppleTransactionsModule = async ({ db }) => {
14
14
  },
15
15
  };
16
16
  };
17
- //# sourceMappingURL=configureAppleTransactionsModule.js.map
17
+ export default {
18
+ appleTransactions: {
19
+ configure: configureAppleTransactionsModule,
20
+ },
21
+ };
22
+ //# sourceMappingURL=module.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"module.js","sourceRoot":"","sources":["../../../src/payment/apple-iap/module.ts"],"names":[],"mappings":"AAAA,OAAO,EAAoB,2BAA2B,EAAE,MAAM,qCAAqC,CAAC;AAEpG,MAAM,CAAC,MAAM,gCAAgC,GAAG,KAAK,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE;IAC/D,MAAM,iBAAiB,GAAG,MAAM,2BAA2B,CAAC,EAAE,CAAC,CAAC;IAEhE,OAAO;QACL,mBAAmB,EAAE,KAAK,EAAE,qBAA6B,EAA6B,EAAE;YACtF,OAAO,iBAAiB,CAAC,OAAO,CAAC,EAAE,GAAG,EAAE,qBAAqB,EAAE,CAAC,CAAC;QACnE,CAAC;QAED,iBAAiB,EAAE,KAAK,EAAE,GAAqB,EAAE,EAAE;YACjD,MAAM,iBAAiB,CAAC,SAAS,CAAC;gBAChC,GAAG,GAAG;gBACN,OAAO,EAAE,IAAI,IAAI,EAAE;aACpB,CAAC,CAAC;YACH,OAAO,GAAG,CAAC,GAAG,CAAC;QACjB,CAAC;KACF,CAAC;AACJ,CAAC,CAAC;AAEF,eAAe;IACb,iBAAiB,EAAE;QACjB,SAAS,EAAE,gCAAgC;KAC5C;CACF,CAAC"}
@@ -0,0 +1,5 @@
1
+ export declare const verifyReceipt: ({ receiptData, password }: {
2
+ receiptData: any;
3
+ password: any;
4
+ }) => Promise<any>;
5
+ //# sourceMappingURL=verify-receipt.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"verify-receipt.d.ts","sourceRoot":"","sources":["../../../src/payment/apple-iap/verify-receipt.ts"],"names":[],"mappings":"AAQA,eAAO,MAAM,aAAa;;;MAAsC,OAAO,CAAC,GAAG,CAkB1E,CAAC"}
@@ -0,0 +1,26 @@
1
+ const { APPLE_IAP_ENVIRONMENT = 'sandbox' } = process.env;
2
+ // https://developer.apple.com/documentation/storekit/in-app_purchase/validating_receipts_with_the_app_store
3
+ const environments = {
4
+ sandbox: 'https://sandbox.itunes.apple.com/verifyReceipt',
5
+ production: 'https://buy.itunes.apple.com/verifyReceipt',
6
+ };
7
+ export const verifyReceipt = async ({ receiptData, password }) => {
8
+ const payload = {
9
+ 'receipt-data': receiptData,
10
+ };
11
+ if (password) {
12
+ payload.password = password;
13
+ }
14
+ const result = await fetch(environments[APPLE_IAP_ENVIRONMENT], {
15
+ body: JSON.stringify(payload),
16
+ method: 'POST',
17
+ // eslint-disable-next-line
18
+ // @ts-ignore
19
+ duplex: 'half',
20
+ headers: {
21
+ 'Content-Type': 'application/json',
22
+ },
23
+ });
24
+ return result.json();
25
+ };
26
+ //# sourceMappingURL=verify-receipt.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"verify-receipt.js","sourceRoot":"","sources":["../../../src/payment/apple-iap/verify-receipt.ts"],"names":[],"mappings":"AAAA,MAAM,EAAE,qBAAqB,GAAG,SAAS,EAAE,GAAG,OAAO,CAAC,GAAG,CAAC;AAE1D,4GAA4G;AAC5G,MAAM,YAAY,GAAG;IACnB,OAAO,EAAE,gDAAgD;IACzD,UAAU,EAAE,4CAA4C;CACzD,CAAC;AAEF,MAAM,CAAC,MAAM,aAAa,GAAG,KAAK,EAAE,EAAE,WAAW,EAAE,QAAQ,EAAE,EAAgB,EAAE;IAC7E,MAAM,OAAO,GAAQ;QACnB,cAAc,EAAE,WAAW;KAC5B,CAAC;IACF,IAAI,QAAQ,EAAE,CAAC;QACb,OAAO,CAAC,QAAQ,GAAG,QAAQ,CAAC;IAC9B,CAAC;IACD,MAAM,MAAM,GAAG,MAAM,KAAK,CAAC,YAAY,CAAC,qBAAqB,CAAC,EAAE;QAC9D,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC;QAC7B,MAAM,EAAE,MAAM;QACd,2BAA2B;QAC3B,aAAa;QACb,MAAM,EAAE,MAAM;QACd,OAAO,EAAE;YACP,cAAc,EAAE,kBAAkB;SACnC;KACF,CAAC,CAAC;IACH,OAAO,MAAM,CAAC,IAAI,EAAE,CAAC;AACvB,CAAC,CAAC"}