@owlmeans/payment 0.1.18-rc.8 → 0.1.18

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 (364) hide show
  1. package/README.md +95 -57
  2. package/agent-meta/manifest.json +10 -3
  3. package/agent-meta/skills/entitlements/SKILL.md +159 -0
  4. package/agent-meta/skills/payment/SKILL.md +491 -28
  5. package/build/advertise.d.ts +2 -0
  6. package/build/advertise.d.ts.map +1 -0
  7. package/build/advertise.js +10 -0
  8. package/build/advertise.js.map +1 -0
  9. package/build/checkout/consts.d.ts +2 -0
  10. package/build/checkout/consts.d.ts.map +1 -0
  11. package/build/checkout/consts.js +2 -0
  12. package/build/checkout/consts.js.map +1 -0
  13. package/build/checkout/index.d.ts +6 -0
  14. package/build/checkout/index.d.ts.map +1 -0
  15. package/build/checkout/index.js +4 -0
  16. package/build/checkout/index.js.map +1 -0
  17. package/build/checkout/narrow/types.d.ts +25 -0
  18. package/build/checkout/narrow/types.d.ts.map +1 -0
  19. package/build/checkout/narrow/types.js +2 -0
  20. package/build/checkout/narrow/types.js.map +1 -0
  21. package/build/checkout/narrow.d.ts +8 -0
  22. package/build/checkout/narrow.d.ts.map +1 -0
  23. package/build/checkout/narrow.js +47 -0
  24. package/build/checkout/narrow.js.map +1 -0
  25. package/build/checkout/protocols.d.ts +8 -0
  26. package/build/checkout/protocols.d.ts.map +1 -0
  27. package/build/checkout/protocols.js +28 -0
  28. package/build/checkout/protocols.js.map +1 -0
  29. package/build/checkout/types.d.ts +29 -0
  30. package/build/checkout/types.d.ts.map +1 -0
  31. package/build/checkout/types.js +2 -0
  32. package/build/checkout/types.js.map +1 -0
  33. package/build/consts.d.ts +242 -25
  34. package/build/consts.d.ts.map +1 -1
  35. package/build/consts.js +377 -24
  36. package/build/consts.js.map +1 -1
  37. package/build/consts.local.d.ts +20 -0
  38. package/build/consts.local.d.ts.map +1 -0
  39. package/build/consts.local.js +23 -0
  40. package/build/consts.local.js.map +1 -0
  41. package/build/consumer/cancel.d.ts +11 -0
  42. package/build/consumer/cancel.d.ts.map +1 -0
  43. package/build/consumer/cancel.js +33 -0
  44. package/build/consumer/cancel.js.map +1 -0
  45. package/build/consumer/consts.d.ts +20 -0
  46. package/build/consumer/consts.d.ts.map +1 -0
  47. package/build/consumer/consts.js +39 -0
  48. package/build/consumer/consts.js.map +1 -0
  49. package/build/consumer/consts.local.d.ts +7 -0
  50. package/build/consumer/consts.local.d.ts.map +1 -0
  51. package/build/consumer/consts.local.js +13 -0
  52. package/build/consumer/consts.local.js.map +1 -0
  53. package/build/consumer/copy/types.d.ts +56 -0
  54. package/build/consumer/copy/types.d.ts.map +1 -0
  55. package/build/consumer/copy/types.js +2 -0
  56. package/build/consumer/copy/types.js.map +1 -0
  57. package/build/consumer/copy.d.ts +22 -0
  58. package/build/consumer/copy.d.ts.map +1 -0
  59. package/build/consumer/copy.js +87 -0
  60. package/build/consumer/copy.js.map +1 -0
  61. package/build/consumer/deadline/types.d.ts +30 -0
  62. package/build/consumer/deadline/types.d.ts.map +1 -0
  63. package/build/consumer/deadline/types.js +2 -0
  64. package/build/consumer/deadline/types.js.map +1 -0
  65. package/build/consumer/deadline.d.ts +12 -0
  66. package/build/consumer/deadline.d.ts.map +1 -0
  67. package/build/consumer/deadline.js +44 -0
  68. package/build/consumer/deadline.js.map +1 -0
  69. package/build/consumer/fifo/types.d.ts +17 -0
  70. package/build/consumer/fifo/types.d.ts.map +1 -0
  71. package/build/consumer/fifo/types.js +2 -0
  72. package/build/consumer/fifo/types.js.map +1 -0
  73. package/build/consumer/fifo.d.ts +4 -0
  74. package/build/consumer/fifo.d.ts.map +1 -0
  75. package/build/consumer/fifo.js +34 -0
  76. package/build/consumer/fifo.js.map +1 -0
  77. package/build/consumer/index.d.ts +18 -0
  78. package/build/consumer/index.d.ts.map +1 -0
  79. package/build/consumer/index.js +11 -0
  80. package/build/consumer/index.js.map +1 -0
  81. package/build/consumer/policy/types.d.ts +20 -0
  82. package/build/consumer/policy/types.d.ts.map +1 -0
  83. package/build/consumer/policy/types.js +2 -0
  84. package/build/consumer/policy/types.js.map +1 -0
  85. package/build/consumer/policy.d.ts +17 -0
  86. package/build/consumer/policy.d.ts.map +1 -0
  87. package/build/consumer/policy.js +91 -0
  88. package/build/consumer/policy.js.map +1 -0
  89. package/build/consumer/protocols.d.ts +20 -0
  90. package/build/consumer/protocols.d.ts.map +1 -0
  91. package/build/consumer/protocols.js +70 -0
  92. package/build/consumer/protocols.js.map +1 -0
  93. package/build/consumer/refund/types.d.ts +27 -0
  94. package/build/consumer/refund/types.d.ts.map +1 -0
  95. package/build/consumer/refund/types.js +2 -0
  96. package/build/consumer/refund/types.js.map +1 -0
  97. package/build/consumer/refund.d.ts +9 -0
  98. package/build/consumer/refund.d.ts.map +1 -0
  99. package/build/consumer/refund.js +112 -0
  100. package/build/consumer/refund.js.map +1 -0
  101. package/build/consumer/refusal.d.ts +10 -0
  102. package/build/consumer/refusal.d.ts.map +1 -0
  103. package/build/consumer/refusal.js +35 -0
  104. package/build/consumer/refusal.js.map +1 -0
  105. package/build/consumer/revive/types.d.ts +19 -0
  106. package/build/consumer/revive/types.d.ts.map +1 -0
  107. package/build/consumer/revive/types.js +2 -0
  108. package/build/consumer/revive/types.js.map +1 -0
  109. package/build/consumer/revive.d.ts +13 -0
  110. package/build/consumer/revive.d.ts.map +1 -0
  111. package/build/consumer/revive.js +43 -0
  112. package/build/consumer/revive.js.map +1 -0
  113. package/build/consumer/types.d.ts +196 -0
  114. package/build/consumer/types.d.ts.map +1 -0
  115. package/build/consumer/types.js +2 -0
  116. package/build/consumer/types.js.map +1 -0
  117. package/build/consumer/types.local.d.ts +11 -0
  118. package/build/consumer/types.local.d.ts.map +1 -0
  119. package/build/consumer/types.local.js +2 -0
  120. package/build/consumer/types.local.js.map +1 -0
  121. package/build/countries.d.ts +3 -0
  122. package/build/countries.d.ts.map +1 -0
  123. package/build/countries.js +4 -0
  124. package/build/countries.js.map +1 -0
  125. package/build/entitled.d.ts +14 -0
  126. package/build/entitled.d.ts.map +1 -0
  127. package/build/entitled.js +17 -0
  128. package/build/entitled.js.map +1 -0
  129. package/build/entitlement/types.d.ts +29 -0
  130. package/build/entitlement/types.d.ts.map +1 -0
  131. package/build/entitlement/types.js +2 -0
  132. package/build/entitlement/types.js.map +1 -0
  133. package/build/entitlement.d.ts +12 -0
  134. package/build/entitlement.d.ts.map +1 -0
  135. package/build/entitlement.js +64 -0
  136. package/build/entitlement.js.map +1 -0
  137. package/build/errors.d.ts +189 -0
  138. package/build/errors.d.ts.map +1 -1
  139. package/build/errors.js +361 -0
  140. package/build/errors.js.map +1 -1
  141. package/build/estimate/types.d.ts +34 -0
  142. package/build/estimate/types.d.ts.map +1 -0
  143. package/build/estimate/types.js +2 -0
  144. package/build/estimate/types.js.map +1 -0
  145. package/build/estimate.d.ts +11 -0
  146. package/build/estimate.d.ts.map +1 -0
  147. package/build/estimate.js +76 -0
  148. package/build/estimate.js.map +1 -0
  149. package/build/i18n/consumer-rights/be.json +131 -0
  150. package/build/i18n/consumer-rights/de.json +131 -0
  151. package/build/i18n/consumer-rights/en.json +131 -0
  152. package/build/i18n/consumer-rights/es.json +131 -0
  153. package/build/i18n/consumer-rights/fr.json +131 -0
  154. package/build/i18n/consumer-rights/pl.json +131 -0
  155. package/build/i18n/consumer-rights/ru.json +131 -0
  156. package/build/i18n/consumer-rights/uk.json +131 -0
  157. package/build/i18n/errors/be.json +30 -0
  158. package/build/i18n/errors/de.json +30 -0
  159. package/build/i18n/errors/en.json +30 -0
  160. package/build/i18n/errors/es.json +30 -0
  161. package/build/i18n/errors/fr.json +30 -0
  162. package/build/i18n/errors/pl.json +30 -0
  163. package/build/i18n/errors/ru.json +30 -0
  164. package/build/i18n/errors/uk.json +30 -0
  165. package/build/i18n/fr.json +39 -0
  166. package/build/i18n.js +53 -8
  167. package/build/i18n.js.map +1 -1
  168. package/build/index.d.ts +19 -1
  169. package/build/index.d.ts.map +1 -1
  170. package/build/index.js +12 -1
  171. package/build/index.js.map +1 -1
  172. package/build/limit/types.d.ts +44 -0
  173. package/build/limit/types.d.ts.map +1 -0
  174. package/build/limit/types.js +2 -0
  175. package/build/limit/types.js.map +1 -0
  176. package/build/limit.d.ts +23 -0
  177. package/build/limit.d.ts.map +1 -0
  178. package/build/limit.js +97 -0
  179. package/build/limit.js.map +1 -0
  180. package/build/model/checkout.d.ts +2 -3
  181. package/build/model/checkout.d.ts.map +1 -1
  182. package/build/model/checkout.js +12 -7
  183. package/build/model/checkout.js.map +1 -1
  184. package/build/model/consts.d.ts +15 -0
  185. package/build/model/consts.d.ts.map +1 -0
  186. package/build/model/consts.js +193 -0
  187. package/build/model/consts.js.map +1 -0
  188. package/build/model/consts.local.d.ts +35 -0
  189. package/build/model/consts.local.d.ts.map +1 -0
  190. package/build/model/consts.local.js +65 -0
  191. package/build/model/consts.local.js.map +1 -0
  192. package/build/model/consumer.d.ts +23 -0
  193. package/build/model/consumer.d.ts.map +1 -0
  194. package/build/model/consumer.js +272 -0
  195. package/build/model/consumer.js.map +1 -0
  196. package/build/model/estimate.d.ts +5 -0
  197. package/build/model/estimate.d.ts.map +1 -0
  198. package/build/model/estimate.js +69 -0
  199. package/build/model/estimate.js.map +1 -0
  200. package/build/model/index.d.ts +7 -2
  201. package/build/model/index.d.ts.map +1 -1
  202. package/build/model/index.js +7 -2
  203. package/build/model/index.js.map +1 -1
  204. package/build/model/limit.d.ts +7 -0
  205. package/build/model/limit.d.ts.map +1 -0
  206. package/build/model/limit.js +32 -0
  207. package/build/model/limit.js.map +1 -0
  208. package/build/model/plan.d.ts.map +1 -1
  209. package/build/model/plan.js +24 -11
  210. package/build/model/plan.js.map +1 -1
  211. package/build/model/portal.d.ts +4 -0
  212. package/build/model/portal.d.ts.map +1 -0
  213. package/build/model/portal.js +22 -0
  214. package/build/model/portal.js.map +1 -0
  215. package/build/model/pricing.d.ts +4 -0
  216. package/build/model/pricing.d.ts.map +1 -0
  217. package/build/model/pricing.js +31 -0
  218. package/build/model/pricing.js.map +1 -0
  219. package/build/model/view.d.ts +3 -0
  220. package/build/model/view.d.ts.map +1 -0
  221. package/build/model/view.js +15 -0
  222. package/build/model/view.js.map +1 -0
  223. package/build/pricing/types.d.ts +13 -0
  224. package/build/pricing/types.d.ts.map +1 -0
  225. package/build/pricing/types.js +2 -0
  226. package/build/pricing/types.js.map +1 -0
  227. package/build/pricing.d.ts +13 -0
  228. package/build/pricing.d.ts.map +1 -0
  229. package/build/pricing.js +74 -0
  230. package/build/pricing.js.map +1 -0
  231. package/build/promo/types.d.ts +14 -0
  232. package/build/promo/types.d.ts.map +1 -0
  233. package/build/promo/types.js +2 -0
  234. package/build/promo/types.js.map +1 -0
  235. package/build/promo.d.ts +7 -0
  236. package/build/promo.d.ts.map +1 -0
  237. package/build/promo.js +25 -0
  238. package/build/promo.js.map +1 -0
  239. package/build/regions/types.d.ts +32 -0
  240. package/build/regions/types.d.ts.map +1 -0
  241. package/build/regions/types.js +2 -0
  242. package/build/regions/types.js.map +1 -0
  243. package/build/regions.d.ts +15 -0
  244. package/build/regions.d.ts.map +1 -0
  245. package/build/regions.js +43 -0
  246. package/build/regions.js.map +1 -0
  247. package/build/service.d.ts.map +1 -1
  248. package/build/service.js +24 -9
  249. package/build/service.js.map +1 -1
  250. package/build/types.d.ts +619 -52
  251. package/build/types.d.ts.map +1 -1
  252. package/build/types.local.d.ts +4 -0
  253. package/build/types.local.d.ts.map +1 -0
  254. package/build/types.local.js +2 -0
  255. package/build/types.local.js.map +1 -0
  256. package/build/view/types.d.ts +33 -0
  257. package/build/view/types.d.ts.map +1 -0
  258. package/build/view/types.js +2 -0
  259. package/build/view/types.js.map +1 -0
  260. package/build/view.d.ts +13 -0
  261. package/build/view.d.ts.map +1 -0
  262. package/build/view.js +78 -0
  263. package/build/view.js.map +1 -0
  264. package/package.json +14 -12
  265. package/src/advertise.ts +13 -0
  266. package/src/checkout/consts.ts +1 -0
  267. package/src/checkout/index.ts +5 -0
  268. package/src/checkout/narrow/types.ts +27 -0
  269. package/src/checkout/narrow.ts +63 -0
  270. package/src/checkout/protocols.ts +39 -0
  271. package/src/checkout/types.ts +27 -0
  272. package/src/consts.local.ts +34 -0
  273. package/src/consts.ts +417 -24
  274. package/src/consumer/cancel.ts +40 -0
  275. package/src/consumer/consts.local.ts +16 -0
  276. package/src/consumer/consts.ts +46 -0
  277. package/src/consumer/copy/types.ts +54 -0
  278. package/src/consumer/copy.ts +121 -0
  279. package/src/consumer/deadline/types.ts +30 -0
  280. package/src/consumer/deadline.ts +61 -0
  281. package/src/consumer/fifo/types.ts +17 -0
  282. package/src/consumer/fifo.ts +42 -0
  283. package/src/consumer/index.ts +17 -0
  284. package/src/consumer/policy/types.ts +20 -0
  285. package/src/consumer/policy.ts +101 -0
  286. package/src/consumer/protocols.ts +116 -0
  287. package/src/consumer/refund/types.ts +27 -0
  288. package/src/consumer/refund.ts +136 -0
  289. package/src/consumer/refusal.ts +35 -0
  290. package/src/consumer/revive/types.ts +23 -0
  291. package/src/consumer/revive.ts +82 -0
  292. package/src/consumer/types.local.ts +10 -0
  293. package/src/consumer/types.ts +189 -0
  294. package/src/countries.ts +5 -0
  295. package/src/entitled.ts +20 -0
  296. package/src/entitlement/types.ts +29 -0
  297. package/src/entitlement.ts +86 -0
  298. package/src/errors.ts +445 -0
  299. package/src/estimate/types.ts +34 -0
  300. package/src/estimate.ts +90 -0
  301. package/src/i18n/consumer-rights/be.json +131 -0
  302. package/src/i18n/consumer-rights/de.json +131 -0
  303. package/src/i18n/consumer-rights/en.json +131 -0
  304. package/src/i18n/consumer-rights/es.json +131 -0
  305. package/src/i18n/consumer-rights/fr.json +131 -0
  306. package/src/i18n/consumer-rights/pl.json +131 -0
  307. package/src/i18n/consumer-rights/ru.json +131 -0
  308. package/src/i18n/consumer-rights/uk.json +131 -0
  309. package/src/i18n/errors/be.json +30 -0
  310. package/src/i18n/errors/de.json +30 -0
  311. package/src/i18n/errors/en.json +30 -0
  312. package/src/i18n/errors/es.json +30 -0
  313. package/src/i18n/errors/fr.json +30 -0
  314. package/src/i18n/errors/pl.json +30 -0
  315. package/src/i18n/errors/ru.json +30 -0
  316. package/src/i18n/errors/uk.json +30 -0
  317. package/src/i18n/fr.json +39 -0
  318. package/src/i18n.ts +58 -8
  319. package/src/index.ts +19 -2
  320. package/src/limit/types.ts +41 -0
  321. package/src/limit.ts +132 -0
  322. package/src/model/checkout.ts +12 -7
  323. package/src/model/consts.local.ts +83 -0
  324. package/src/model/consts.ts +206 -0
  325. package/src/model/consumer.ts +294 -0
  326. package/src/model/estimate.ts +73 -0
  327. package/src/model/index.ts +7 -2
  328. package/src/model/limit.ts +36 -0
  329. package/src/model/plan.ts +25 -12
  330. package/src/model/portal.ts +25 -0
  331. package/src/model/pricing.ts +34 -0
  332. package/src/model/view.ts +17 -0
  333. package/src/pricing/types.ts +13 -0
  334. package/src/pricing.ts +110 -0
  335. package/src/promo/types.ts +18 -0
  336. package/src/promo.ts +46 -0
  337. package/src/regions/types.ts +42 -0
  338. package/src/regions.ts +85 -0
  339. package/src/service.ts +32 -15
  340. package/src/types.local.ts +5 -0
  341. package/src/types.ts +669 -49
  342. package/src/view/types.ts +39 -0
  343. package/src/view.ts +119 -0
  344. package/tests/checkout-narrow.spec.ts +75 -0
  345. package/tests/consumer-copy.spec.ts +378 -0
  346. package/tests/consumer-deadline.spec.ts +85 -0
  347. package/tests/consumer-fifo.spec.ts +61 -0
  348. package/tests/consumer-protocols.spec.ts +103 -0
  349. package/tests/consumer-refund.spec.ts +134 -0
  350. package/tests/consumer-regions.spec.ts +140 -0
  351. package/tests/consumer-wire.spec.ts +170 -0
  352. package/tests/contract.spec.ts +183 -0
  353. package/tests/entitlement.spec.ts +103 -0
  354. package/tests/errors.spec.ts +168 -0
  355. package/tests/estimate.spec.ts +139 -0
  356. package/tests/limit.spec.ts +117 -0
  357. package/tests/pricing.spec.ts +30 -0
  358. package/tests/tsconfig.json +11 -0
  359. package/tests/view.spec.ts +130 -0
  360. package/tsconfig.json +6 -1
  361. package/build/.gitkeep +0 -0
  362. package/src/model/subscription.ts +0 -63
  363. package/src/model/utils.ts +0 -32
  364. package/src/modules.ts +0 -43
@@ -0,0 +1,31 @@
1
+ import { schema } from '@owlmeans/entrypoint';
2
+ export const AmountCheckoutPolicySchema = schema({
3
+ type: 'object',
4
+ properties: {
5
+ currency: { type: 'string', minLength: 3, maxLength: 3 },
6
+ minimumMinor: { type: 'number', minimum: 0, multipleOf: 1 },
7
+ maximumMinor: { type: 'number', minimum: 0, multipleOf: 1 },
8
+ defaultMinor: { type: 'number', minimum: 0, multipleOf: 1 },
9
+ presetsMinor: {
10
+ type: 'array', items: { type: 'number', minimum: 0, multipleOf: 1 }, uniqueItems: true,
11
+ },
12
+ fixedMinor: { type: 'number', minimum: 0, multipleOf: 1 },
13
+ rateBps: { type: 'number', minimum: 0, maximum: 9999, multipleOf: 1 },
14
+ },
15
+ required: [
16
+ 'currency', 'minimumMinor', 'maximumMinor', 'defaultMinor', 'presetsMinor',
17
+ 'fixedMinor', 'rateBps',
18
+ ],
19
+ additionalProperties: false,
20
+ });
21
+ export const QuantityCheckoutPolicySchema = schema({
22
+ type: 'object',
23
+ properties: {
24
+ minimum: { type: 'number', minimum: 1, multipleOf: 1 },
25
+ maximum: { type: 'number', minimum: 1, multipleOf: 1 },
26
+ default: { type: 'number', minimum: 1, multipleOf: 1 },
27
+ },
28
+ required: ['minimum', 'maximum', 'default'],
29
+ additionalProperties: false,
30
+ });
31
+ //# sourceMappingURL=pricing.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pricing.js","sourceRoot":"","sources":["../../src/model/pricing.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,MAAM,EAAE,MAAM,sBAAsB,CAAA;AAG7C,MAAM,CAAC,MAAM,0BAA0B,GAAG,MAAM,CAAuB;IACrE,IAAI,EAAE,QAAQ;IACd,UAAU,EAAE;QACV,QAAQ,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,SAAS,EAAE,CAAC,EAAE,SAAS,EAAE,CAAC,EAAE;QACxD,YAAY,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,CAAC,EAAE,UAAU,EAAE,CAAC,EAAE;QAC3D,YAAY,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,CAAC,EAAE,UAAU,EAAE,CAAC,EAAE;QAC3D,YAAY,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,CAAC,EAAE,UAAU,EAAE,CAAC,EAAE;QAC3D,YAAY,EAAE;YACZ,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,CAAC,EAAE,UAAU,EAAE,CAAC,EAAE,EAAE,WAAW,EAAE,IAAI;SACvF;QACD,UAAU,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,CAAC,EAAE,UAAU,EAAE,CAAC,EAAE;QACzD,OAAO,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,UAAU,EAAE,CAAC,EAAE;KACtE;IACD,QAAQ,EAAE;QACR,UAAU,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc;QAC1E,YAAY,EAAE,SAAS;KACxB;IACD,oBAAoB,EAAE,KAAK;CACY,CAAC,CAAA;AAE1C,MAAM,CAAC,MAAM,4BAA4B,GAAG,MAAM,CAAyB;IACzE,IAAI,EAAE,QAAQ;IACd,UAAU,EAAE;QACV,OAAO,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,CAAC,EAAE,UAAU,EAAE,CAAC,EAAE;QACtD,OAAO,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,CAAC,EAAE,UAAU,EAAE,CAAC,EAAE;QACtD,OAAO,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,CAAC,EAAE,UAAU,EAAE,CAAC,EAAE;KACvD;IACD,QAAQ,EAAE,CAAC,SAAS,EAAE,SAAS,EAAE,SAAS,CAAC;IAC3C,oBAAoB,EAAE,KAAK;CACc,CAAC,CAAA"}
@@ -0,0 +1,3 @@
1
+ import type { EntitlementView } from '../types.js';
2
+ export declare const EntitlementViewSchema: import("@owlmeans/entrypoint").EntrypointSchema<EntitlementView>;
3
+ //# sourceMappingURL=view.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"view.d.ts","sourceRoot":"","sources":["../../src/model/view.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,aAAa,CAAA;AAKlD,eAAO,MAAM,qBAAqB,kEAUG,CAAA"}
@@ -0,0 +1,15 @@
1
+ import { schema } from '@owlmeans/entrypoint';
2
+ import { IsoDateSchema } from './consts.local.js';
3
+ import { CapabilityViewSchema, EntitlementPlanViewSchema, LimitViewSchema } from './consts.js';
4
+ export const EntitlementViewSchema = schema({
5
+ type: 'object',
6
+ properties: {
7
+ plan: EntitlementPlanViewSchema,
8
+ capabilities: { type: 'array', items: CapabilityViewSchema },
9
+ limits: { type: 'array', items: LimitViewSchema },
10
+ at: IsoDateSchema,
11
+ },
12
+ required: ['plan', 'capabilities', 'limits', 'at'],
13
+ additionalProperties: false,
14
+ });
15
+ //# sourceMappingURL=view.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"view.js","sourceRoot":"","sources":["../../src/model/view.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,MAAM,EAAE,MAAM,sBAAsB,CAAA;AAC7C,OAAO,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAA;AACjD,OAAO,EAAE,oBAAoB,EAAE,yBAAyB,EAAE,eAAe,EAAE,MAAM,aAAa,CAAA;AAE9F,MAAM,CAAC,MAAM,qBAAqB,GAAG,MAAM,CAAkB;IAC3D,IAAI,EAAE,QAAQ;IACd,UAAU,EAAE;QACV,IAAI,EAAE,yBAAyB;QAC/B,YAAY,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,oBAAoB,EAAE;QAC5D,MAAM,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,eAAe,EAAE;QACjD,EAAE,EAAE,aAAa;KAClB;IACD,QAAQ,EAAE,CAAC,MAAM,EAAE,cAAc,EAAE,QAAQ,EAAE,IAAI,CAAC;IAClD,oBAAoB,EAAE,KAAK;CACO,CAAC,CAAA"}
@@ -0,0 +1,13 @@
1
+ import type { AmountCheckoutPolicy, QuantityCheckoutPolicy } from '../types.js';
2
+ /** The checkout policies' invariants and the charge an amount grosses up to. */
3
+ export interface CheckoutPricingHelper {
4
+ /** @throws PaymentError (`checkout-policy:amount`, `checkout-policy:presets`) for an invalid policy. */
5
+ assertAmountCheckoutPolicy: (policy: AmountCheckoutPolicy) => AmountCheckoutPolicy;
6
+ /** @throws PaymentError (`checkout-policy:quantity`) for an invalid policy. */
7
+ assertQuantityCheckoutPolicy: (policy: QuantityCheckoutPolicy) => QuantityCheckoutPolicy;
8
+ /** @throws PaymentError (`checkout-amount:*`) for an amount the policy does not allow. */
9
+ assertCheckoutAmount: (policy: AmountCheckoutPolicy, amountMinor: number) => number;
10
+ /** Gross up a net credit value so the configured adjustment remains outside the credit grant. */
11
+ chargeAmountMinor: (amountMinor: number, policy: Pick<AmountCheckoutPolicy, 'fixedMinor' | 'rateBps'>) => number;
12
+ }
13
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/pricing/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,oBAAoB,EAAE,sBAAsB,EAAE,MAAM,aAAa,CAAA;AAE/E,gFAAgF;AAChF,MAAM,WAAW,qBAAqB;IACpC,wGAAwG;IACxG,0BAA0B,EAAE,CAAC,MAAM,EAAE,oBAAoB,KAAK,oBAAoB,CAAA;IAClF,+EAA+E;IAC/E,4BAA4B,EAAE,CAAC,MAAM,EAAE,sBAAsB,KAAK,sBAAsB,CAAA;IACxF,0FAA0F;IAC1F,oBAAoB,EAAE,CAAC,MAAM,EAAE,oBAAoB,EAAE,WAAW,EAAE,MAAM,KAAK,MAAM,CAAA;IACnF,iGAAiG;IACjG,iBAAiB,EAAE,CAAC,WAAW,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,CAAC,oBAAoB,EAAE,YAAY,GAAG,SAAS,CAAC,KAAK,MAAM,CAAA;CACjH"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/pricing/types.ts"],"names":[],"mappings":""}
@@ -0,0 +1,13 @@
1
+ import type { AmountCheckoutPolicy, QuantityCheckoutPolicy } from './types.js';
2
+ import type { CheckoutPricingHelper } from './pricing/types.js';
3
+ export declare const createCheckoutPricingHelper: () => CheckoutPricingHelper;
4
+ export declare const checkoutPricingHelper: CheckoutPricingHelper;
5
+ /** @deprecated compat:factory-refactor — use `checkoutPricingHelper.assertAmountCheckoutPolicy(…)` */
6
+ export declare const assertAmountCheckoutPolicy: (policy: AmountCheckoutPolicy) => AmountCheckoutPolicy;
7
+ /** @deprecated compat:factory-refactor — use `checkoutPricingHelper.assertQuantityCheckoutPolicy(…)` */
8
+ export declare const assertQuantityCheckoutPolicy: (policy: QuantityCheckoutPolicy) => QuantityCheckoutPolicy;
9
+ /** @deprecated compat:factory-refactor — use `checkoutPricingHelper.assertCheckoutAmount(…)` */
10
+ export declare const assertCheckoutAmount: (policy: AmountCheckoutPolicy, amountMinor: number) => number;
11
+ /** @deprecated compat:factory-refactor — use `checkoutPricingHelper.chargeAmountMinor(…)` */
12
+ export declare const chargeAmountMinor: (amountMinor: number, policy: Pick<AmountCheckoutPolicy, 'fixedMinor' | 'rateBps'>) => number;
13
+ //# sourceMappingURL=pricing.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pricing.d.ts","sourceRoot":"","sources":["../src/pricing.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,oBAAoB,EAAE,sBAAsB,EAAE,MAAM,YAAY,CAAA;AAC9E,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,oBAAoB,CAAA;AAI/D,eAAO,MAAM,2BAA2B,QAAO,qBAoF9C,CAAA;AAED,eAAO,MAAM,qBAAqB,uBAAgC,CAAA;AAElE,sGAAsG;AACtG,eAAO,MAAM,0BAA0B,WAAY,oBAAoB,KAAG,oBAChB,CAAA;AAE1D,wGAAwG;AACxG,eAAO,MAAM,4BAA4B,WAAY,sBAAsB,KAAG,sBAClB,CAAA;AAE5D,gGAAgG;AAChG,eAAO,MAAM,oBAAoB,WAAY,oBAAoB,eAAe,MAAM,KAAG,MACxB,CAAA;AAEjE,6FAA6F;AAC7F,eAAO,MAAM,iBAAiB,gBACf,MAAM,UAAU,IAAI,CAAC,oBAAoB,EAAE,YAAY,GAAG,SAAS,CAAC,KAChF,MAAsE,CAAA"}
@@ -0,0 +1,74 @@
1
+ import { PaymentError } from './errors.js';
2
+ const integer = (value) => Number.isSafeInteger(value);
3
+ export const createCheckoutPricingHelper = () => {
4
+ const assertAmountCheckoutPolicy = (policy) => {
5
+ if (!integer(policy.minimumMinor)
6
+ || !integer(policy.maximumMinor)
7
+ || !integer(policy.defaultMinor)
8
+ || !integer(policy.fixedMinor)
9
+ || !integer(policy.rateBps)
10
+ || policy.minimumMinor < 0
11
+ || policy.minimumMinor > policy.defaultMinor
12
+ || policy.defaultMinor > policy.maximumMinor
13
+ || policy.fixedMinor < 0
14
+ || policy.rateBps < 0
15
+ || policy.rateBps >= 10_000
16
+ || policy.currency.trim().length !== 3) {
17
+ throw new PaymentError('checkout-policy:amount');
18
+ }
19
+ const presets = new Set(policy.presetsMinor);
20
+ if (presets.size !== policy.presetsMinor.length
21
+ || policy.presetsMinor.some(value => !integer(value) || value < policy.minimumMinor || value > policy.maximumMinor)) {
22
+ throw new PaymentError('checkout-policy:presets');
23
+ }
24
+ return policy;
25
+ };
26
+ const assertQuantityCheckoutPolicy = (policy) => {
27
+ if (!integer(policy.minimum)
28
+ || !integer(policy.maximum)
29
+ || !integer(policy.default)
30
+ || policy.minimum < 1
31
+ || policy.minimum > policy.default
32
+ || policy.default > policy.maximum) {
33
+ throw new PaymentError('checkout-policy:quantity');
34
+ }
35
+ return policy;
36
+ };
37
+ const assertCheckoutAmount = (policy, amountMinor) => {
38
+ assertAmountCheckoutPolicy(policy);
39
+ if (!integer(amountMinor)) {
40
+ throw new PaymentError('checkout-amount:integer');
41
+ }
42
+ if (amountMinor < policy.minimumMinor) {
43
+ throw new PaymentError('checkout-amount:minimum');
44
+ }
45
+ if (amountMinor > policy.maximumMinor) {
46
+ throw new PaymentError('checkout-amount:maximum');
47
+ }
48
+ return amountMinor;
49
+ };
50
+ const chargeAmountMinor = (amountMinor, policy) => {
51
+ const adjusted = amountMinor + policy.fixedMinor;
52
+ const numerator = adjusted * 10_000;
53
+ if (!integer(amountMinor) || !integer(policy.fixedMinor) || !integer(policy.rateBps)
54
+ || amountMinor < 0 || policy.fixedMinor < 0 || policy.rateBps < 0 || policy.rateBps >= 10_000
55
+ || !integer(adjusted) || !integer(numerator)) {
56
+ throw new PaymentError('checkout-charge');
57
+ }
58
+ const charge = Math.ceil(numerator / (10_000 - policy.rateBps));
59
+ if (!integer(charge))
60
+ throw new PaymentError('checkout-charge');
61
+ return charge;
62
+ };
63
+ return { assertAmountCheckoutPolicy, assertQuantityCheckoutPolicy, assertCheckoutAmount, chargeAmountMinor };
64
+ };
65
+ export const checkoutPricingHelper = createCheckoutPricingHelper();
66
+ /** @deprecated compat:factory-refactor — use `checkoutPricingHelper.assertAmountCheckoutPolicy(…)` */
67
+ export const assertAmountCheckoutPolicy = (policy) => checkoutPricingHelper.assertAmountCheckoutPolicy(policy);
68
+ /** @deprecated compat:factory-refactor — use `checkoutPricingHelper.assertQuantityCheckoutPolicy(…)` */
69
+ export const assertQuantityCheckoutPolicy = (policy) => checkoutPricingHelper.assertQuantityCheckoutPolicy(policy);
70
+ /** @deprecated compat:factory-refactor — use `checkoutPricingHelper.assertCheckoutAmount(…)` */
71
+ export const assertCheckoutAmount = (policy, amountMinor) => checkoutPricingHelper.assertCheckoutAmount(policy, amountMinor);
72
+ /** @deprecated compat:factory-refactor — use `checkoutPricingHelper.chargeAmountMinor(…)` */
73
+ export const chargeAmountMinor = (amountMinor, policy) => checkoutPricingHelper.chargeAmountMinor(amountMinor, policy);
74
+ //# sourceMappingURL=pricing.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pricing.js","sourceRoot":"","sources":["../src/pricing.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,14 @@
1
+ import type { PromoDeclaration, PromoView } from '../types.js';
2
+ /** Whether a promo is in force, and how a UI inscribes it. */
3
+ export interface PromoHelper {
4
+ /**
5
+ * Whether a grant behind a promo is in force.
6
+ *
7
+ * No promo ⇒ always. Otherwise while `at < until`, or — with `grandfather` — for a subscription
8
+ * created before `until`. `at === until` is already over.
9
+ */
10
+ promoActive: (promo: PromoDeclaration | null | undefined, subscribedAt: Date | null | undefined, at?: Date) => boolean;
11
+ /** What a UI needs to inscribe a promo: `undefined` when the grant has none. */
12
+ promoViewOf: (promo: PromoDeclaration | null | undefined, subscribedAt: Date | null | undefined, at?: Date) => PromoView | undefined;
13
+ }
14
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/promo/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,SAAS,EAAE,MAAM,aAAa,CAAA;AAE9D,8DAA8D;AAC9D,MAAM,WAAW,WAAW;IAC1B;;;;;OAKG;IACH,WAAW,EAAE,CACX,KAAK,EAAE,gBAAgB,GAAG,IAAI,GAAG,SAAS,EAAE,YAAY,EAAE,IAAI,GAAG,IAAI,GAAG,SAAS,EAAE,EAAE,CAAC,EAAE,IAAI,KACzF,OAAO,CAAA;IACZ,gFAAgF;IAChF,WAAW,EAAE,CACX,KAAK,EAAE,gBAAgB,GAAG,IAAI,GAAG,SAAS,EAAE,YAAY,EAAE,IAAI,GAAG,IAAI,GAAG,SAAS,EAAE,EAAE,CAAC,EAAE,IAAI,KACzF,SAAS,GAAG,SAAS,CAAA;CAC3B"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/promo/types.ts"],"names":[],"mappings":""}
@@ -0,0 +1,7 @@
1
+ import type { PromoDeclaration } from './types.js';
2
+ import type { PromoHelper } from './promo/types.js';
3
+ export declare const createPromoHelper: () => PromoHelper;
4
+ export declare const promoHelper: PromoHelper;
5
+ /** @deprecated compat:factory-refactor — use `promoHelper.promoActive(…)` */
6
+ export declare const promoActive: (promo: PromoDeclaration | null | undefined, subscribedAt: Date | null | undefined, at?: Date) => boolean;
7
+ //# sourceMappingURL=promo.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"promo.d.ts","sourceRoot":"","sources":["../src/promo.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAa,MAAM,YAAY,CAAA;AAC7D,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAA;AAUnD,eAAO,MAAM,iBAAiB,QAAO,WA2BpC,CAAA;AAED,eAAO,MAAM,WAAW,aAAsB,CAAA;AAE9C,6EAA6E;AAC7E,eAAO,MAAM,WAAW,UACf,gBAAgB,GAAG,IAAI,GAAG,SAAS,gBAAgB,IAAI,GAAG,IAAI,GAAG,SAAS,OAAO,IAAI,KAC3F,OAA2D,CAAA"}
package/build/promo.js ADDED
@@ -0,0 +1,25 @@
1
+ /**
2
+ * A date as epoch milliseconds. A declaration read back from JSON carries an ISO string where the
3
+ * type says `Date`; an unparseable value is `NaN`, which fails every comparison — so a broken
4
+ * promo is never in force.
5
+ */
6
+ const timeOf = (value) => value == null ? Number.NaN : value instanceof Date ? value.getTime() : new Date(value).getTime();
7
+ export const createPromoHelper = () => {
8
+ const grandfathers = (promo, subscribedAt) => promo.grandfather === true && timeOf(subscribedAt) < timeOf(promo.until);
9
+ const promoActive = (promo, subscribedAt, at = new Date()) => {
10
+ if (promo == null) {
11
+ return true;
12
+ }
13
+ return timeOf(at) < timeOf(promo.until) || grandfathers(promo, subscribedAt);
14
+ };
15
+ const promoViewOf = (promo, subscribedAt, at = new Date()) => promo == null ? undefined : {
16
+ until: new Date(timeOf(promo.until)),
17
+ grandfathered: grandfathers(promo, subscribedAt),
18
+ active: promoActive(promo, subscribedAt, at),
19
+ };
20
+ return { promoActive, promoViewOf };
21
+ };
22
+ export const promoHelper = createPromoHelper();
23
+ /** @deprecated compat:factory-refactor — use `promoHelper.promoActive(…)` */
24
+ export const promoActive = (promo, subscribedAt, at) => promoHelper.promoActive(promo, subscribedAt, at);
25
+ //# sourceMappingURL=promo.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"promo.js","sourceRoot":"","sources":["../src/promo.ts"],"names":[],"mappings":"AAGA;;;;GAIG;AACH,MAAM,MAAM,GAAG,CAAC,KAAgD,EAAU,EAAE,CAC1E,KAAK,IAAI,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,YAAY,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,KAAK,CAAC,CAAC,OAAO,EAAE,CAAA;AAElG,MAAM,CAAC,MAAM,iBAAiB,GAAG,GAAgB,EAAE;IACjD,MAAM,YAAY,GAAG,CAAC,KAAuB,EAAE,YAAqC,EAAW,EAAE,CAC/F,KAAK,CAAC,WAAW,KAAK,IAAI,IAAI,MAAM,CAAC,YAAY,CAAC,GAAG,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,CAAA;IAE1E,MAAM,WAAW,GAAG,CAClB,KAA0C,EAC1C,YAAqC,EACrC,EAAE,GAAS,IAAI,IAAI,EAAE,EACZ,EAAE;QACX,IAAI,KAAK,IAAI,IAAI,EAAE,CAAC;YAClB,OAAO,IAAI,CAAA;QACb,CAAC;QAED,OAAO,MAAM,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,YAAY,CAAC,KAAK,EAAE,YAAY,CAAC,CAAA;IAC9E,CAAC,CAAA;IAED,MAAM,WAAW,GAAG,CAClB,KAA0C,EAC1C,YAAqC,EACrC,EAAE,GAAS,IAAI,IAAI,EAAE,EACE,EAAE,CAAC,KAAK,IAAI,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC;QACtD,KAAK,EAAE,IAAI,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;QACpC,aAAa,EAAE,YAAY,CAAC,KAAK,EAAE,YAAY,CAAC;QAChD,MAAM,EAAE,WAAW,CAAC,KAAK,EAAE,YAAY,EAAE,EAAE,CAAC;KAC7C,CAAA;IAED,OAAO,EAAE,WAAW,EAAE,WAAW,EAAE,CAAA;AACrC,CAAC,CAAA;AAED,MAAM,CAAC,MAAM,WAAW,GAAG,iBAAiB,EAAE,CAAA;AAE9C,6EAA6E;AAC7E,MAAM,CAAC,MAAM,WAAW,GAAG,CACzB,KAA0C,EAAE,YAAqC,EAAE,EAAS,EACnF,EAAE,CAAC,WAAW,CAAC,WAAW,CAAC,KAAK,EAAE,YAAY,EAAE,EAAE,CAAC,CAAA"}
@@ -0,0 +1,32 @@
1
+ import type { ConsumerRegion } from '../consts.js';
2
+ import type { ConsumerRightsPolicy } from '../types.js';
3
+ import type { RegionPolicy } from '../types.local.js';
4
+ /** The consumer region of a billing country and what it decides: scope, currency and legal language. */
5
+ export interface ConsumerRegionHelper {
6
+ /** A member state of the EU (not a territory with its own code). */
7
+ isEuCountry: (country: string | null | undefined) => boolean;
8
+ /** A member state of the EEA: the EU's 27 plus Iceland, Liechtenstein and Norway. */
9
+ isEeaCountry: (country: string | null | undefined) => boolean;
10
+ /**
11
+ * The consumer region of a billing country: `Eu` inside the policy's territories (the default
12
+ * ones without a policy), `Other` outside, `null` when the country is unknown.
13
+ */
14
+ regionOf: (country: string | null | undefined, policy?: RegionPolicy) => ConsumerRegion | null;
15
+ /**
16
+ * Whether a buyer has the consumer rights: a known country decides by the policy's territories;
17
+ * without one, a known region decides; with neither, `unknownCountry: 'protect'` (the default) puts
18
+ * the buyer in scope — the safe side.
19
+ */
20
+ inScope: (region: ConsumerRegion | null | undefined, country: string | null | undefined, policy?: Pick<ConsumerRightsPolicy, 'countries' | 'unknownCountry'> | null) => boolean;
21
+ /**
22
+ * The currency a region is charged in (lowercase ISO 4217): the policy's currency for the region,
23
+ * an unknown region reading as `Eu`; `fallback` when the policy names none.
24
+ */
25
+ chargeCurrencyOf: (region: ConsumerRegion | null | undefined, policy: Pick<ConsumerRightsPolicy, 'currencies'> | null | undefined, fallback: string) => string;
26
+ /**
27
+ * The language of a billing country's legal copy: the policy's own map, then
28
+ * `COUNTRY_LANGUAGES`, then `fallback`, then the policy's default language, then `en`.
29
+ */
30
+ billingLanguageOf: (country: string | null | undefined, policy?: Pick<ConsumerRightsPolicy, 'languages' | 'defaultLanguage'> | null, fallback?: string) => string;
31
+ }
32
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/regions/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,cAAc,CAAA;AAClD,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,aAAa,CAAA;AACvD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAA;AAErD,wGAAwG;AACxG,MAAM,WAAW,oBAAoB;IACnC,oEAAoE;IACpE,WAAW,EAAE,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,KAAK,OAAO,CAAA;IAC5D,qFAAqF;IACrF,YAAY,EAAE,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,KAAK,OAAO,CAAA;IAC7D;;;OAGG;IACH,QAAQ,EAAE,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,EAAE,MAAM,CAAC,EAAE,YAAY,KAAK,cAAc,GAAG,IAAI,CAAA;IAC9F;;;;OAIG;IACH,OAAO,EAAE,CACP,MAAM,EAAE,cAAc,GAAG,IAAI,GAAG,SAAS,EAAE,OAAO,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,EAC7E,MAAM,CAAC,EAAE,IAAI,CAAC,oBAAoB,EAAE,WAAW,GAAG,gBAAgB,CAAC,GAAG,IAAI,KACvE,OAAO,CAAA;IACZ;;;OAGG;IACH,gBAAgB,EAAE,CAChB,MAAM,EAAE,cAAc,GAAG,IAAI,GAAG,SAAS,EAAE,MAAM,EAAE,IAAI,CAAC,oBAAoB,EAAE,YAAY,CAAC,GAAG,IAAI,GAAG,SAAS,EAC9G,QAAQ,EAAE,MAAM,KACb,MAAM,CAAA;IACX;;;OAGG;IACH,iBAAiB,EAAE,CACjB,OAAO,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,EAClC,MAAM,CAAC,EAAE,IAAI,CAAC,oBAAoB,EAAE,WAAW,GAAG,iBAAiB,CAAC,GAAG,IAAI,EAC3E,QAAQ,CAAC,EAAE,MAAM,KACd,MAAM,CAAA;CACZ"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/regions/types.ts"],"names":[],"mappings":""}
@@ -0,0 +1,15 @@
1
+ import { ConsumerRegion } from './consts.js';
2
+ import type { ConsumerRightsPolicy } from './types.js';
3
+ import type { RegionPolicy } from './types.local.js';
4
+ import type { ConsumerRegionHelper } from './regions/types.js';
5
+ export declare const createConsumerRegionHelper: () => ConsumerRegionHelper;
6
+ export declare const consumerRegionHelper: ConsumerRegionHelper;
7
+ /** @deprecated compat:factory-refactor — use `consumerRegionHelper.regionOf(…)` */
8
+ export declare const regionOf: (country: string | null | undefined, policy?: RegionPolicy) => ConsumerRegion | null;
9
+ /** @deprecated compat:factory-refactor — use `consumerRegionHelper.inScope(…)` */
10
+ export declare const inScope: (region: ConsumerRegion | null | undefined, country: string | null | undefined, policy?: Pick<ConsumerRightsPolicy, 'countries' | 'unknownCountry'> | null) => boolean;
11
+ /** @deprecated compat:factory-refactor — use `consumerRegionHelper.chargeCurrencyOf(…)` */
12
+ export declare const chargeCurrencyOf: (region: ConsumerRegion | null | undefined, policy: Pick<ConsumerRightsPolicy, 'currencies'> | null | undefined, fallback: string) => string;
13
+ /** @deprecated compat:factory-refactor — use `consumerRegionHelper.billingLanguageOf(…)` */
14
+ export declare const billingLanguageOf: (country: string | null | undefined, policy?: Pick<ConsumerRightsPolicy, 'languages' | 'defaultLanguage'> | null, fallback?: string) => string;
15
+ //# sourceMappingURL=regions.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"regions.d.ts","sourceRoot":"","sources":["../src/regions.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAA2E,MAAM,aAAa,CAAA;AACrH,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,YAAY,CAAA;AACtD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAA;AACpD,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,oBAAoB,CAAA;AAK9D,eAAO,MAAM,0BAA0B,QAAO,oBAmD7C,CAAA;AAED,eAAO,MAAM,oBAAoB,sBAA+B,CAAA;AAEhE,mFAAmF;AACnF,eAAO,MAAM,QAAQ,YAAa,MAAM,GAAG,IAAI,GAAG,SAAS,WAAW,YAAY,KAAG,cAAc,GAAG,IACtD,CAAA;AAEhD,kFAAkF;AAClF,eAAO,MAAM,OAAO,WACV,cAAc,GAAG,IAAI,GAAG,SAAS,WAAW,MAAM,GAAG,IAAI,GAAG,SAAS,WACpE,IAAI,CAAC,oBAAoB,EAAE,WAAW,GAAG,gBAAgB,CAAC,GAAG,IAAI,KACzE,OAAgE,CAAA;AAEnE,2FAA2F;AAC3F,eAAO,MAAM,gBAAgB,WACnB,cAAc,GAAG,IAAI,GAAG,SAAS,UAAU,IAAI,CAAC,oBAAoB,EAAE,YAAY,CAAC,GAAG,IAAI,GAAG,SAAS,YACpG,MAAM,KACf,MAAyE,CAAA;AAE5E,4FAA4F;AAC5F,eAAO,MAAM,iBAAiB,YACnB,MAAM,GAAG,IAAI,GAAG,SAAS,WACzB,IAAI,CAAC,oBAAoB,EAAE,WAAW,GAAG,iBAAiB,CAAC,GAAG,IAAI,aAChE,MAAM,KAChB,MAA2E,CAAA"}
@@ -0,0 +1,43 @@
1
+ import { ConsumerRegion, CONSUMER_RIGHTS_TERRITORIES, COUNTRY_LANGUAGES, EEA_EXTRA, EU_COUNTRIES } from './consts.js';
2
+ const codeOf = (country) => country == null || country.trim() === '' ? null : country.trim().toUpperCase();
3
+ export const createConsumerRegionHelper = () => {
4
+ const isEuCountry = (country) => EU_COUNTRIES.includes(codeOf(country) ?? '');
5
+ const isEeaCountry = (country) => {
6
+ const code = codeOf(country) ?? '';
7
+ return EU_COUNTRIES.includes(code) || EEA_EXTRA.includes(code);
8
+ };
9
+ const regionOf = (country, policy) => {
10
+ const code = codeOf(country);
11
+ if (code == null) {
12
+ return null;
13
+ }
14
+ return (policy?.countries ?? CONSUMER_RIGHTS_TERRITORIES).includes(code) ? ConsumerRegion.Eu : ConsumerRegion.Other;
15
+ };
16
+ const inScope = (region, country, policy) => {
17
+ const code = codeOf(country);
18
+ if (code != null) {
19
+ return (policy?.countries ?? CONSUMER_RIGHTS_TERRITORIES).includes(code);
20
+ }
21
+ if (region != null) {
22
+ return region === ConsumerRegion.Eu;
23
+ }
24
+ return (policy?.unknownCountry ?? 'protect') === 'protect';
25
+ };
26
+ const chargeCurrencyOf = (region, policy, fallback) => (policy?.currencies?.[region ?? ConsumerRegion.Eu] ?? fallback).toLowerCase();
27
+ const billingLanguageOf = (country, policy, fallback) => {
28
+ const code = codeOf(country);
29
+ const mapped = code == null ? undefined : policy?.languages?.[code] ?? COUNTRY_LANGUAGES[code];
30
+ return mapped ?? fallback ?? policy?.defaultLanguage ?? 'en';
31
+ };
32
+ return { isEuCountry, isEeaCountry, regionOf, inScope, chargeCurrencyOf, billingLanguageOf };
33
+ };
34
+ export const consumerRegionHelper = createConsumerRegionHelper();
35
+ /** @deprecated compat:factory-refactor — use `consumerRegionHelper.regionOf(…)` */
36
+ export const regionOf = (country, policy) => consumerRegionHelper.regionOf(country, policy);
37
+ /** @deprecated compat:factory-refactor — use `consumerRegionHelper.inScope(…)` */
38
+ export const inScope = (region, country, policy) => consumerRegionHelper.inScope(region, country, policy);
39
+ /** @deprecated compat:factory-refactor — use `consumerRegionHelper.chargeCurrencyOf(…)` */
40
+ export const chargeCurrencyOf = (region, policy, fallback) => consumerRegionHelper.chargeCurrencyOf(region, policy, fallback);
41
+ /** @deprecated compat:factory-refactor — use `consumerRegionHelper.billingLanguageOf(…)` */
42
+ export const billingLanguageOf = (country, policy, fallback) => consumerRegionHelper.billingLanguageOf(country, policy, fallback);
43
+ //# sourceMappingURL=regions.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"regions.js","sourceRoot":"","sources":["../src/regions.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"service.d.ts","sourceRoot":"","sources":["../src/service.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAgB,cAAc,EAAE,MAAM,YAAY,CAAA;AAC9D,OAAO,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,kBAAkB,CAAA;AAWvD,eAAO,MAAM,kBAAkB,WAAW,MAAM,KAAmB,cA+GlE,CAAA;AAED,eAAO,MAAM,oBAAoB,GAAI,CAAC,SAAS,MAAM,EAAE,CAAC,SAAS,OAAO,CAAC,CAAC,CAAC,WAChE,CAAC,UAAS,MAAM,KACxB,CAAuD,CAAA"}
1
+ {"version":3,"file":"service.d.ts","sourceRoot":"","sources":["../src/service.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAsC,cAAc,EAAuC,MAAM,YAAY,CAAA;AACzH,OAAO,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,kBAAkB,CAAA;AASvD,eAAO,MAAM,kBAAkB,WAAW,MAAM,KAAmB,cAmIlE,CAAA;AAED,eAAO,MAAM,oBAAoB,GAAI,CAAC,SAAS,MAAM,EAAE,CAAC,SAAS,OAAO,CAAC,CAAC,CAAC,WAChE,CAAC,UAAS,MAAM,KACxB,CAAuD,CAAA"}
package/build/service.js CHANGED
@@ -1,17 +1,16 @@
1
1
  import { createService } from '@owlmeans/context';
2
- import { DEFAULT_ALIAS, PaymentEntityType, PLAN_RECORD_PREFIX, PRODUCT_RECORD_TYPE } from './consts.js';
3
- import { PLAN_RECORD_TYPE, PRODUCT_RECORD_PREFIX } from './consts.js';
2
+ import { CONSUMER_RIGHTS_RECORD_ID, DEFAULT_ALIAS, PaymentEntityType, PLAN_RECORD_PREFIX, PRICING_POLICY_RECORD_ID, PRODUCT_RECORD_TYPE, PLAN_RECORD_TYPE, PRODUCT_RECORD_PREFIX, DEFAULT_PRICING_POLICY } from './consts.js';
4
3
  import { PaymentIdentificationError, UnknownPlan, UnknownProduct } from './errors.js';
5
- import { fromConfigRecord } from '@owlmeans/config';
6
4
  import { l10nToId } from './helper.js';
7
5
  import { DEFAULT_LNG } from '@owlmeans/i18n';
8
6
  import { EnvelopeKind, makeEnvelopeModel } from '@owlmeans/basic-envelope';
7
+ import { configHelper } from '@owlmeans/config';
9
8
  export const makePaymentService = (alias = DEFAULT_ALIAS) => {
10
9
  const service = createService(alias, {
11
10
  product: async (sku) => {
12
11
  const context = service.assertCtx();
13
12
  const configRes = context.getConfigResource();
14
- const result = fromConfigRecord(await configRes.get(`${PRODUCT_RECORD_PREFIX}:${sku}`));
13
+ const result = configHelper.fromConfigRecord(await configRes.get(`${PRODUCT_RECORD_PREFIX}:${sku}`));
15
14
  if (result == null) {
16
15
  throw new UnknownProduct(sku);
17
16
  }
@@ -21,7 +20,7 @@ export const makePaymentService = (alias = DEFAULT_ALIAS) => {
21
20
  const context = service.assertCtx();
22
21
  const configRes = context.getConfigResource();
23
22
  const { items } = await configRes.list({ recordType: PRODUCT_RECORD_TYPE });
24
- return items.map(i => fromConfigRecord(i));
23
+ return items.map(i => configHelper.fromConfigRecord(i));
25
24
  },
26
25
  plans: async (productSku, duration) => {
27
26
  const context = service.assertCtx();
@@ -29,7 +28,7 @@ export const makePaymentService = (alias = DEFAULT_ALIAS) => {
29
28
  const result = await configRes.list({
30
29
  productSku, duration, recordType: PLAN_RECORD_TYPE
31
30
  });
32
- return result.items.map(item => fromConfigRecord(item));
31
+ return result.items.map(item => configHelper.fromConfigRecord(item));
33
32
  },
34
33
  plan: async (planSku) => {
35
34
  const context = service.assertCtx();
@@ -38,7 +37,7 @@ export const makePaymentService = (alias = DEFAULT_ALIAS) => {
38
37
  if (result == null) {
39
38
  throw new UnknownPlan(planSku);
40
39
  }
41
- return fromConfigRecord(result);
40
+ return configHelper.fromConfigRecord(result);
42
41
  },
43
42
  allPlans: async (productSku) => {
44
43
  const context = service.assertCtx();
@@ -46,7 +45,7 @@ export const makePaymentService = (alias = DEFAULT_ALIAS) => {
46
45
  const { items } = await configRes.list({
47
46
  productSku, recordType: PLAN_RECORD_TYPE
48
47
  });
49
- return items.map(item => fromConfigRecord(item));
48
+ return items.map(item => configHelper.fromConfigRecord(item));
50
49
  },
51
50
  localize: async (lng, entity) => {
52
51
  const context = service.assertCtx();
@@ -69,7 +68,7 @@ export const makePaymentService = (alias = DEFAULT_ALIAS) => {
69
68
  for (let id of idsToCheck) {
70
69
  const l10n = await configRes.load(id);
71
70
  if (l10n != null) {
72
- return fromConfigRecord(l10n);
71
+ return configHelper.fromConfigRecord(l10n);
73
72
  }
74
73
  }
75
74
  return null;
@@ -84,6 +83,22 @@ export const makePaymentService = (alias = DEFAULT_ALIAS) => {
84
83
  throw new PaymentIdentificationError('profileId');
85
84
  }
86
85
  return auth.profileId;
86
+ },
87
+ pricingPolicy: async () => {
88
+ const context = service.assertCtx();
89
+ const configRes = context.getConfigResource();
90
+ const record = await configRes.load(PRICING_POLICY_RECORD_ID);
91
+ return record == null
92
+ ? DEFAULT_PRICING_POLICY
93
+ : configHelper.fromConfigRecord(record);
94
+ },
95
+ consumerRightsPolicy: async () => {
96
+ const context = service.assertCtx();
97
+ const configRes = context.getConfigResource();
98
+ const record = await configRes.load(CONSUMER_RIGHTS_RECORD_ID);
99
+ return record == null
100
+ ? null
101
+ : configHelper.fromConfigRecord(record);
87
102
  }
88
103
  }, service => async () => {
89
104
  service.initialized = true;
@@ -1 +1 @@
1
- {"version":3,"file":"service.js","sourceRoot":"","sources":["../src/service.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"service.js","sourceRoot":"","sources":["../src/service.ts"],"names":[],"mappings":"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"}