@automattic/data-stores 3.2.0 → 3.2.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 (516) hide show
  1. package/CHANGELOG.md +4 -0
  2. package/dist/cjs/agents-manager/actions.js +116 -0
  3. package/dist/cjs/agents-manager/actions.js.map +1 -0
  4. package/dist/cjs/agents-manager/constants.js +5 -0
  5. package/dist/cjs/agents-manager/constants.js.map +1 -0
  6. package/dist/cjs/agents-manager/index.js +37 -0
  7. package/dist/cjs/agents-manager/index.js.map +1 -0
  8. package/dist/cjs/agents-manager/persist-state.js +58 -0
  9. package/dist/cjs/agents-manager/persist-state.js.map +1 -0
  10. package/dist/cjs/agents-manager/reducer.js +87 -0
  11. package/dist/cjs/agents-manager/reducer.js.map +1 -0
  12. package/dist/cjs/agents-manager/resolvers.js +60 -0
  13. package/dist/cjs/agents-manager/resolvers.js.map +1 -0
  14. package/dist/cjs/agents-manager/selectors.js +44 -0
  15. package/dist/cjs/agents-manager/selectors.js.map +1 -0
  16. package/dist/cjs/agents-manager/types.js +3 -0
  17. package/dist/cjs/agents-manager/types.js.map +1 -0
  18. package/dist/cjs/contextual-help/admin-sections.js +1 -1
  19. package/dist/cjs/contextual-help/admin-sections.js.map +1 -1
  20. package/dist/cjs/help-center/actions.js +67 -63
  21. package/dist/cjs/help-center/actions.js.map +1 -1
  22. package/dist/cjs/help-center/constants.js +2 -1
  23. package/dist/cjs/help-center/constants.js.map +1 -1
  24. package/dist/cjs/help-center/index.js +14 -27
  25. package/dist/cjs/help-center/index.js.map +1 -1
  26. package/dist/cjs/help-center/reducer.js +17 -2
  27. package/dist/cjs/help-center/reducer.js.map +1 -1
  28. package/dist/cjs/help-center/resolvers.js +45 -25
  29. package/dist/cjs/help-center/resolvers.js.map +1 -1
  30. package/dist/cjs/help-center/selectors.js +7 -1
  31. package/dist/cjs/help-center/selectors.js.map +1 -1
  32. package/dist/cjs/help-center/utils.js +136 -0
  33. package/dist/cjs/help-center/utils.js.map +1 -0
  34. package/dist/cjs/index.js +8 -3
  35. package/dist/cjs/index.js.map +1 -1
  36. package/dist/cjs/mutations/use-domains-bulk-actions-mutation.js +3 -3
  37. package/dist/cjs/mutations/use-domains-bulk-actions-mutation.js.map +1 -1
  38. package/dist/cjs/newsletter-categories/index.js +2 -2
  39. package/dist/cjs/newsletter-categories/index.js.map +1 -1
  40. package/dist/cjs/onboard/actions.js +6 -1
  41. package/dist/cjs/onboard/actions.js.map +1 -1
  42. package/dist/cjs/onboard/reducer.js +12 -1
  43. package/dist/cjs/onboard/reducer.js.map +1 -1
  44. package/dist/cjs/onboard/selectors.js +3 -1
  45. package/dist/cjs/onboard/selectors.js.map +1 -1
  46. package/dist/cjs/plans/constants.js +3 -1
  47. package/dist/cjs/plans/constants.js.map +1 -1
  48. package/dist/cjs/plans/hooks/use-pricing-meta-for-grid-plans.js +35 -18
  49. package/dist/cjs/plans/hooks/use-pricing-meta-for-grid-plans.js.map +1 -1
  50. package/dist/cjs/plans/index.js +2 -1
  51. package/dist/cjs/plans/index.js.map +1 -1
  52. package/dist/cjs/plans/queries/use-plans.js +2 -2
  53. package/dist/cjs/plans/queries/use-plans.js.map +1 -1
  54. package/dist/cjs/plans/queries/use-site-plans.js +2 -2
  55. package/dist/cjs/plans/queries/use-site-plans.js.map +1 -1
  56. package/dist/cjs/plans/resolvers.js +0 -1
  57. package/dist/cjs/plans/resolvers.js.map +1 -1
  58. package/dist/cjs/plans/selectors.js.map +1 -1
  59. package/dist/cjs/products-list/queries/use-products.js +2 -2
  60. package/dist/cjs/products-list/queries/use-products.js.map +1 -1
  61. package/dist/cjs/products-list/resolvers.js +2 -2
  62. package/dist/cjs/products-list/resolvers.js.map +1 -1
  63. package/dist/cjs/purchases/lib/assembler.js +9 -4
  64. package/dist/cjs/purchases/lib/assembler.js.map +1 -1
  65. package/dist/cjs/purchases/queries/use-get-jetpack-transferred-license-purchases.js +2 -2
  66. package/dist/cjs/purchases/queries/use-get-jetpack-transferred-license-purchases.js.map +1 -1
  67. package/dist/cjs/purchases/queries/use-site-purchases.js +3 -3
  68. package/dist/cjs/purchases/queries/use-site-purchases.js.map +1 -1
  69. package/dist/cjs/queries/use-all-domains-query.js +2 -2
  70. package/dist/cjs/queries/use-all-domains-query.js.map +1 -1
  71. package/dist/cjs/queries/use-bulk-domain-update-status-query.js +3 -57
  72. package/dist/cjs/queries/use-bulk-domain-update-status-query.js.map +1 -1
  73. package/dist/cjs/queries/use-happiness-engineers-query.js +2 -2
  74. package/dist/cjs/queries/use-happiness-engineers-query.js.map +1 -1
  75. package/dist/cjs/queries/use-launchpad.js +5 -5
  76. package/dist/cjs/queries/use-launchpad.js.map +1 -1
  77. package/dist/cjs/queries/use-site-domains-query.js +2 -2
  78. package/dist/cjs/queries/use-site-domains-query.js.map +1 -1
  79. package/dist/cjs/queries/use-site-intent.js +2 -2
  80. package/dist/cjs/queries/use-site-intent.js.map +1 -1
  81. package/dist/cjs/queries/use-site-query.js +2 -2
  82. package/dist/cjs/queries/use-site-query.js.map +1 -1
  83. package/dist/cjs/reader/contexts/index.js +1 -4
  84. package/dist/cjs/reader/contexts/index.js.map +1 -1
  85. package/dist/cjs/reader/helpers/index.js +4 -3
  86. package/dist/cjs/reader/helpers/index.js.map +1 -1
  87. package/dist/cjs/reader/helpers/optimistic-update.js +2 -1
  88. package/dist/cjs/reader/helpers/optimistic-update.js.map +1 -1
  89. package/dist/cjs/reader/index.js +2 -8
  90. package/dist/cjs/reader/index.js.map +1 -1
  91. package/dist/cjs/reader/mutations/use-pending-site-confirm-mutation.js +2 -2
  92. package/dist/cjs/reader/mutations/use-pending-site-confirm-mutation.js.map +1 -1
  93. package/dist/cjs/reader/mutations/use-site-delivery-frequency-mutation.js +26 -20
  94. package/dist/cjs/reader/mutations/use-site-delivery-frequency-mutation.js.map +1 -1
  95. package/dist/cjs/reader/mutations/use-site-email-me-new-comments-mutation.js +4 -3
  96. package/dist/cjs/reader/mutations/use-site-email-me-new-comments-mutation.js.map +1 -1
  97. package/dist/cjs/reader/mutations/use-site-email-me-new-posts-mutation.js +4 -3
  98. package/dist/cjs/reader/mutations/use-site-email-me-new-posts-mutation.js.map +1 -1
  99. package/dist/cjs/reader/mutations/use-site-notify-me-of-new-posts-mutation.js +4 -3
  100. package/dist/cjs/reader/mutations/use-site-notify-me-of-new-posts-mutation.js.map +1 -1
  101. package/dist/cjs/reader/mutations/use-site-subscribe-mutation.js +10 -4
  102. package/dist/cjs/reader/mutations/use-site-subscribe-mutation.js.map +1 -1
  103. package/dist/cjs/reader/mutations/use-site-unsubscribe-mutation.js +11 -4
  104. package/dist/cjs/reader/mutations/use-site-unsubscribe-mutation.js.map +1 -1
  105. package/dist/cjs/reader/queries/index.js +2 -8
  106. package/dist/cjs/reader/queries/index.js.map +1 -1
  107. package/dist/cjs/reader/queries/use-site-subscriptions-query.js +27 -26
  108. package/dist/cjs/reader/queries/use-site-subscriptions-query.js.map +1 -1
  109. package/dist/cjs/site/queries/use-site-features.js +2 -2
  110. package/dist/cjs/site/queries/use-site-features.js.map +1 -1
  111. package/dist/cjs/site/queries/use-site-media-storage.js +2 -2
  112. package/dist/cjs/site/queries/use-site-media-storage.js.map +1 -1
  113. package/dist/cjs/site/queries/use-site-user-query.js +2 -2
  114. package/dist/cjs/site/queries/use-site-user-query.js.map +1 -1
  115. package/dist/cjs/site/queries/use-site.js +2 -2
  116. package/dist/cjs/site/queries/use-site.js.map +1 -1
  117. package/dist/cjs/site/resolvers.js +5 -5
  118. package/dist/cjs/site/resolvers.js.map +1 -1
  119. package/dist/cjs/site/selectors.js +5 -3
  120. package/dist/cjs/site/selectors.js.map +1 -1
  121. package/dist/cjs/site/types.js.map +1 -1
  122. package/dist/cjs/site-reset/use-site-reset-content-summary-query.js +2 -2
  123. package/dist/cjs/site-reset/use-site-reset-content-summary-query.js.map +1 -1
  124. package/dist/cjs/site-reset/use-site-reset-mutation.js +2 -2
  125. package/dist/cjs/site-reset/use-site-reset-mutation.js.map +1 -1
  126. package/dist/cjs/site-reset/use-site-reset-status-query.js +2 -2
  127. package/dist/cjs/site-reset/use-site-reset-status-query.js.map +1 -1
  128. package/dist/cjs/starter-designs-queries/use-starter-design-by-slug.js +2 -2
  129. package/dist/cjs/starter-designs-queries/use-starter-design-by-slug.js.map +1 -1
  130. package/dist/cjs/starter-designs-queries/use-starter-designs-query.js +2 -2
  131. package/dist/cjs/starter-designs-queries/use-starter-designs-query.js.map +1 -1
  132. package/dist/cjs/subscriber/actions.js +5 -5
  133. package/dist/cjs/subscriber/actions.js.map +1 -1
  134. package/dist/cjs/templates/use-template.js +2 -2
  135. package/dist/cjs/templates/use-template.js.map +1 -1
  136. package/dist/cjs/users/use-send-invites.js +2 -2
  137. package/dist/cjs/users/use-send-invites.js.map +1 -1
  138. package/dist/cjs/utils.js +26 -0
  139. package/dist/cjs/utils.js.map +1 -0
  140. package/dist/cjs/wpcom-request-controls/index.js +3 -2
  141. package/dist/cjs/wpcom-request-controls/index.js.map +1 -1
  142. package/dist/cjs/wpcom-request.js +24 -0
  143. package/dist/cjs/wpcom-request.js.map +1 -0
  144. package/dist/esm/agents-manager/actions.js +104 -0
  145. package/dist/esm/agents-manager/actions.js.map +1 -0
  146. package/dist/esm/agents-manager/constants.js +2 -0
  147. package/dist/esm/agents-manager/constants.js.map +1 -0
  148. package/dist/esm/agents-manager/index.js +31 -0
  149. package/dist/esm/agents-manager/index.js.map +1 -0
  150. package/dist/esm/agents-manager/persist-state.js +54 -0
  151. package/dist/esm/agents-manager/persist-state.js.map +1 -0
  152. package/dist/esm/agents-manager/reducer.js +82 -0
  153. package/dist/esm/agents-manager/reducer.js.map +1 -0
  154. package/dist/esm/agents-manager/resolvers.js +57 -0
  155. package/dist/esm/agents-manager/resolvers.js.map +1 -0
  156. package/dist/esm/agents-manager/selectors.js +31 -0
  157. package/dist/esm/agents-manager/selectors.js.map +1 -0
  158. package/dist/esm/agents-manager/types.js +2 -0
  159. package/dist/esm/agents-manager/types.js.map +1 -0
  160. package/dist/esm/contextual-help/admin-sections.js +1 -1
  161. package/dist/esm/contextual-help/admin-sections.js.map +1 -1
  162. package/dist/esm/help-center/actions.js +63 -61
  163. package/dist/esm/help-center/actions.js.map +1 -1
  164. package/dist/esm/help-center/constants.js +1 -0
  165. package/dist/esm/help-center/constants.js.map +1 -1
  166. package/dist/esm/help-center/index.js +11 -23
  167. package/dist/esm/help-center/index.js.map +1 -1
  168. package/dist/esm/help-center/reducer.js +17 -2
  169. package/dist/esm/help-center/reducer.js.map +1 -1
  170. package/dist/esm/help-center/resolvers.js +43 -25
  171. package/dist/esm/help-center/resolvers.js.map +1 -1
  172. package/dist/esm/help-center/selectors.js +3 -0
  173. package/dist/esm/help-center/selectors.js.map +1 -1
  174. package/dist/esm/help-center/utils.js +127 -0
  175. package/dist/esm/help-center/utils.js.map +1 -0
  176. package/dist/esm/index.js +4 -2
  177. package/dist/esm/index.js.map +1 -1
  178. package/dist/esm/mutations/use-domains-bulk-actions-mutation.js +1 -1
  179. package/dist/esm/mutations/use-domains-bulk-actions-mutation.js.map +1 -1
  180. package/dist/esm/newsletter-categories/index.js +1 -1
  181. package/dist/esm/newsletter-categories/index.js.map +1 -1
  182. package/dist/esm/onboard/actions.js +4 -0
  183. package/dist/esm/onboard/actions.js.map +1 -1
  184. package/dist/esm/onboard/reducer.js +10 -0
  185. package/dist/esm/onboard/reducer.js.map +1 -1
  186. package/dist/esm/onboard/selectors.js +1 -0
  187. package/dist/esm/onboard/selectors.js.map +1 -1
  188. package/dist/esm/plans/constants.js +2 -0
  189. package/dist/esm/plans/constants.js.map +1 -1
  190. package/dist/esm/plans/hooks/use-pricing-meta-for-grid-plans.js +35 -18
  191. package/dist/esm/plans/hooks/use-pricing-meta-for-grid-plans.js.map +1 -1
  192. package/dist/esm/plans/index.js +1 -1
  193. package/dist/esm/plans/index.js.map +1 -1
  194. package/dist/esm/plans/queries/use-plans.js +1 -1
  195. package/dist/esm/plans/queries/use-site-plans.js +1 -1
  196. package/dist/esm/plans/resolvers.js +0 -1
  197. package/dist/esm/plans/resolvers.js.map +1 -1
  198. package/dist/esm/plans/selectors.js.map +1 -1
  199. package/dist/esm/products-list/queries/use-products.js +1 -1
  200. package/dist/esm/products-list/queries/use-products.js.map +1 -1
  201. package/dist/esm/products-list/resolvers.js +1 -1
  202. package/dist/esm/products-list/resolvers.js.map +1 -1
  203. package/dist/esm/purchases/lib/assembler.js +9 -4
  204. package/dist/esm/purchases/lib/assembler.js.map +1 -1
  205. package/dist/esm/purchases/queries/use-get-jetpack-transferred-license-purchases.js +1 -1
  206. package/dist/esm/purchases/queries/use-site-purchases.js +2 -2
  207. package/dist/esm/queries/use-all-domains-query.js +1 -1
  208. package/dist/esm/queries/use-all-domains-query.js.map +1 -1
  209. package/dist/esm/queries/use-bulk-domain-update-status-query.js +3 -56
  210. package/dist/esm/queries/use-bulk-domain-update-status-query.js.map +1 -1
  211. package/dist/esm/queries/use-happiness-engineers-query.js +1 -1
  212. package/dist/esm/queries/use-happiness-engineers-query.js.map +1 -1
  213. package/dist/esm/queries/use-launchpad.js +1 -1
  214. package/dist/esm/queries/use-launchpad.js.map +1 -1
  215. package/dist/esm/queries/use-site-domains-query.js +1 -1
  216. package/dist/esm/queries/use-site-domains-query.js.map +1 -1
  217. package/dist/esm/queries/use-site-intent.js +1 -1
  218. package/dist/esm/queries/use-site-intent.js.map +1 -1
  219. package/dist/esm/queries/use-site-query.js +1 -1
  220. package/dist/esm/queries/use-site-query.js.map +1 -1
  221. package/dist/esm/reader/contexts/index.js +0 -1
  222. package/dist/esm/reader/contexts/index.js.map +1 -1
  223. package/dist/esm/reader/helpers/index.js +3 -2
  224. package/dist/esm/reader/helpers/index.js.map +1 -1
  225. package/dist/esm/reader/helpers/optimistic-update.js +2 -1
  226. package/dist/esm/reader/helpers/optimistic-update.js.map +1 -1
  227. package/dist/esm/reader/index.js +2 -3
  228. package/dist/esm/reader/index.js.map +1 -1
  229. package/dist/esm/reader/mutations/use-pending-site-confirm-mutation.js +2 -2
  230. package/dist/esm/reader/mutations/use-pending-site-confirm-mutation.js.map +1 -1
  231. package/dist/esm/reader/mutations/use-site-delivery-frequency-mutation.js +27 -21
  232. package/dist/esm/reader/mutations/use-site-delivery-frequency-mutation.js.map +1 -1
  233. package/dist/esm/reader/mutations/use-site-email-me-new-comments-mutation.js +5 -4
  234. package/dist/esm/reader/mutations/use-site-email-me-new-comments-mutation.js.map +1 -1
  235. package/dist/esm/reader/mutations/use-site-email-me-new-posts-mutation.js +5 -4
  236. package/dist/esm/reader/mutations/use-site-email-me-new-posts-mutation.js.map +1 -1
  237. package/dist/esm/reader/mutations/use-site-notify-me-of-new-posts-mutation.js +5 -4
  238. package/dist/esm/reader/mutations/use-site-notify-me-of-new-posts-mutation.js.map +1 -1
  239. package/dist/esm/reader/mutations/use-site-subscribe-mutation.js +10 -4
  240. package/dist/esm/reader/mutations/use-site-subscribe-mutation.js.map +1 -1
  241. package/dist/esm/reader/mutations/use-site-unsubscribe-mutation.js +11 -4
  242. package/dist/esm/reader/mutations/use-site-unsubscribe-mutation.js.map +1 -1
  243. package/dist/esm/reader/queries/index.js +1 -4
  244. package/dist/esm/reader/queries/index.js.map +1 -1
  245. package/dist/esm/reader/queries/use-site-subscriptions-query.js +28 -27
  246. package/dist/esm/reader/queries/use-site-subscriptions-query.js.map +1 -1
  247. package/dist/esm/site/queries/use-site-features.js +1 -1
  248. package/dist/esm/site/queries/use-site-media-storage.js +1 -1
  249. package/dist/esm/site/queries/use-site-user-query.js +1 -1
  250. package/dist/esm/site/queries/use-site-user-query.js.map +1 -1
  251. package/dist/esm/site/queries/use-site.js +1 -1
  252. package/dist/esm/site/resolvers.js +1 -1
  253. package/dist/esm/site/resolvers.js.map +1 -1
  254. package/dist/esm/site/selectors.js +5 -3
  255. package/dist/esm/site/selectors.js.map +1 -1
  256. package/dist/esm/site/types.js.map +1 -1
  257. package/dist/esm/site-reset/use-site-reset-content-summary-query.js +1 -1
  258. package/dist/esm/site-reset/use-site-reset-content-summary-query.js.map +1 -1
  259. package/dist/esm/site-reset/use-site-reset-mutation.js +1 -1
  260. package/dist/esm/site-reset/use-site-reset-mutation.js.map +1 -1
  261. package/dist/esm/site-reset/use-site-reset-status-query.js +1 -1
  262. package/dist/esm/site-reset/use-site-reset-status-query.js.map +1 -1
  263. package/dist/esm/starter-designs-queries/use-starter-design-by-slug.js +1 -1
  264. package/dist/esm/starter-designs-queries/use-starter-design-by-slug.js.map +1 -1
  265. package/dist/esm/starter-designs-queries/use-starter-designs-query.js +1 -1
  266. package/dist/esm/starter-designs-queries/use-starter-designs-query.js.map +1 -1
  267. package/dist/esm/subscriber/actions.js +1 -1
  268. package/dist/esm/subscriber/actions.js.map +1 -1
  269. package/dist/esm/templates/use-template.js +1 -1
  270. package/dist/esm/templates/use-template.js.map +1 -1
  271. package/dist/esm/users/use-send-invites.js +1 -1
  272. package/dist/esm/users/use-send-invites.js.map +1 -1
  273. package/dist/esm/utils.js +21 -0
  274. package/dist/esm/utils.js.map +1 -0
  275. package/dist/esm/wpcom-request-controls/index.js +2 -1
  276. package/dist/esm/wpcom-request-controls/index.js.map +1 -1
  277. package/dist/esm/wpcom-request.js +18 -0
  278. package/dist/esm/wpcom-request.js.map +1 -0
  279. package/dist/tsconfig-cjs.tsbuildinfo +1 -1
  280. package/dist/tsconfig.tsbuildinfo +1 -1
  281. package/dist/types/add-ons/types.d.ts +1 -0
  282. package/dist/types/add-ons/types.d.ts.map +1 -1
  283. package/dist/types/agents-manager/actions.d.ts +77 -0
  284. package/dist/types/agents-manager/actions.d.ts.map +1 -0
  285. package/dist/types/agents-manager/constants.d.ts +2 -0
  286. package/dist/types/agents-manager/constants.d.ts.map +1 -0
  287. package/dist/types/agents-manager/index.d.ts +6 -0
  288. package/dist/types/agents-manager/index.d.ts.map +1 -0
  289. package/dist/types/agents-manager/persist-state.d.ts +6 -0
  290. package/dist/types/agents-manager/persist-state.d.ts.map +1 -0
  291. package/dist/types/agents-manager/reducer.d.ts +29 -0
  292. package/dist/types/agents-manager/reducer.d.ts.map +1 -0
  293. package/dist/types/agents-manager/resolvers.d.ts +54 -0
  294. package/dist/types/agents-manager/resolvers.d.ts.map +1 -0
  295. package/dist/types/agents-manager/selectors.d.ts +22 -0
  296. package/dist/types/agents-manager/selectors.d.ts.map +1 -0
  297. package/dist/types/agents-manager/types.d.ts +20 -0
  298. package/dist/types/agents-manager/types.d.ts.map +1 -0
  299. package/dist/types/contextual-help/admin-sections.d.ts +330 -6
  300. package/dist/types/contextual-help/admin-sections.d.ts.map +1 -1
  301. package/dist/types/contextual-help/contextual-help.d.ts +410 -30
  302. package/dist/types/contextual-help/contextual-help.d.ts.map +1 -1
  303. package/dist/types/help-center/actions.d.ts +235 -30
  304. package/dist/types/help-center/actions.d.ts.map +1 -1
  305. package/dist/types/help-center/constants.d.ts +1 -0
  306. package/dist/types/help-center/constants.d.ts.map +1 -1
  307. package/dist/types/help-center/index.d.ts +1 -2
  308. package/dist/types/help-center/index.d.ts.map +1 -1
  309. package/dist/types/help-center/reducer.d.ts +13 -2
  310. package/dist/types/help-center/reducer.d.ts.map +1 -1
  311. package/dist/types/help-center/resolvers.d.ts +4 -31
  312. package/dist/types/help-center/resolvers.d.ts.map +1 -1
  313. package/dist/types/help-center/selectors.d.ts +11 -1
  314. package/dist/types/help-center/selectors.d.ts.map +1 -1
  315. package/dist/types/help-center/types.d.ts +20 -12
  316. package/dist/types/help-center/types.d.ts.map +1 -1
  317. package/dist/types/help-center/utils.d.ts +13 -0
  318. package/dist/types/help-center/utils.d.ts.map +1 -0
  319. package/dist/types/index.d.ts +18 -298
  320. package/dist/types/index.d.ts.map +1 -1
  321. package/dist/types/onboard/actions.d.ts +19 -3
  322. package/dist/types/onboard/actions.d.ts.map +1 -1
  323. package/dist/types/onboard/reducer.d.ts +4 -1
  324. package/dist/types/onboard/reducer.d.ts.map +1 -1
  325. package/dist/types/onboard/selectors.d.ts +8 -6
  326. package/dist/types/onboard/selectors.d.ts.map +1 -1
  327. package/dist/types/plans/constants.d.ts +3 -2
  328. package/dist/types/plans/constants.d.ts.map +1 -1
  329. package/dist/types/plans/hooks/use-pricing-meta-for-grid-plans.d.ts +6 -1
  330. package/dist/types/plans/hooks/use-pricing-meta-for-grid-plans.d.ts.map +1 -1
  331. package/dist/types/plans/index.d.ts +1 -1
  332. package/dist/types/plans/index.d.ts.map +1 -1
  333. package/dist/types/plans/resolvers.d.ts.map +1 -1
  334. package/dist/types/plans/types.d.ts +6 -0
  335. package/dist/types/plans/types.d.ts.map +1 -1
  336. package/dist/types/products-list/index.d.ts +1 -1
  337. package/dist/types/products-list/index.d.ts.map +1 -1
  338. package/dist/types/products-list/queries/use-products.d.ts.map +1 -1
  339. package/dist/types/purchases/lib/assembler.d.ts.map +1 -1
  340. package/dist/types/purchases/types.d.ts +37 -0
  341. package/dist/types/purchases/types.d.ts.map +1 -1
  342. package/dist/types/queries/use-all-domains-query.d.ts +2 -2
  343. package/dist/types/queries/use-all-domains-query.d.ts.map +1 -1
  344. package/dist/types/queries/use-bulk-domain-update-status-query.d.ts +5 -48
  345. package/dist/types/queries/use-bulk-domain-update-status-query.d.ts.map +1 -1
  346. package/dist/types/queries/use-site-intent.d.ts.map +1 -1
  347. package/dist/types/reader/contexts/index.d.ts +0 -1
  348. package/dist/types/reader/contexts/index.d.ts.map +1 -1
  349. package/dist/types/reader/helpers/index.d.ts.map +1 -1
  350. package/dist/types/reader/helpers/optimistic-update.d.ts.map +1 -1
  351. package/dist/types/reader/index.d.ts +13 -299
  352. package/dist/types/reader/index.d.ts.map +1 -1
  353. package/dist/types/reader/mutations/use-site-delivery-frequency-mutation.d.ts +3 -2
  354. package/dist/types/reader/mutations/use-site-delivery-frequency-mutation.d.ts.map +1 -1
  355. package/dist/types/reader/mutations/use-site-email-me-new-comments-mutation.d.ts +3 -2
  356. package/dist/types/reader/mutations/use-site-email-me-new-comments-mutation.d.ts.map +1 -1
  357. package/dist/types/reader/mutations/use-site-email-me-new-posts-mutation.d.ts +3 -2
  358. package/dist/types/reader/mutations/use-site-email-me-new-posts-mutation.d.ts.map +1 -1
  359. package/dist/types/reader/mutations/use-site-notify-me-of-new-posts-mutation.d.ts +3 -2
  360. package/dist/types/reader/mutations/use-site-notify-me-of-new-posts-mutation.d.ts.map +1 -1
  361. package/dist/types/reader/mutations/use-site-subscribe-mutation.d.ts +3 -2
  362. package/dist/types/reader/mutations/use-site-subscribe-mutation.d.ts.map +1 -1
  363. package/dist/types/reader/mutations/use-site-unsubscribe-mutation.d.ts +3 -2
  364. package/dist/types/reader/mutations/use-site-unsubscribe-mutation.d.ts.map +1 -1
  365. package/dist/types/reader/queries/index.d.ts +1 -5
  366. package/dist/types/reader/queries/index.d.ts.map +1 -1
  367. package/dist/types/reader/queries/use-site-subscriptions-query.d.ts +6 -225
  368. package/dist/types/reader/queries/use-site-subscriptions-query.d.ts.map +1 -1
  369. package/dist/types/reader/types/index.d.ts +32 -44
  370. package/dist/types/reader/types/index.d.ts.map +1 -1
  371. package/dist/types/shared-types.d.ts +11 -0
  372. package/dist/types/shared-types.d.ts.map +1 -1
  373. package/dist/types/site/actions.d.ts +1 -1
  374. package/dist/types/site/actions.d.ts.map +1 -1
  375. package/dist/types/site/queries/use-site-user-query.d.ts.map +1 -1
  376. package/dist/types/site/selectors.d.ts.map +1 -1
  377. package/dist/types/site/types.d.ts +4 -1
  378. package/dist/types/site/types.d.ts.map +1 -1
  379. package/dist/types/starter-designs-queries/types.d.ts +1 -1
  380. package/dist/types/starter-designs-queries/types.d.ts.map +1 -1
  381. package/dist/types/starter-designs-queries/use-starter-design-by-slug.d.ts +1 -1
  382. package/dist/types/starter-designs-queries/use-starter-design-by-slug.d.ts.map +1 -1
  383. package/dist/types/starter-designs-queries/use-starter-designs-query.d.ts +1 -1
  384. package/dist/types/starter-designs-queries/use-starter-designs-query.d.ts.map +1 -1
  385. package/dist/types/subscriber/index.d.ts +1 -1
  386. package/dist/types/subscriber/index.d.ts.map +1 -1
  387. package/dist/types/utils.d.ts +3 -0
  388. package/dist/types/utils.d.ts.map +1 -0
  389. package/dist/types/wpcom-plans-ui/actions.d.ts +1 -1
  390. package/dist/types/wpcom-plans-ui/index.d.ts +1 -1
  391. package/dist/types/wpcom-plans-ui/index.d.ts.map +1 -1
  392. package/dist/types/wpcom-request-controls/index.d.ts +1 -1
  393. package/dist/types/wpcom-request-controls/index.d.ts.map +1 -1
  394. package/dist/types/wpcom-request.d.ts +7 -0
  395. package/dist/types/wpcom-request.d.ts.map +1 -0
  396. package/package.json +23 -22
  397. package/src/add-ons/types.ts +1 -0
  398. package/src/agents-manager/actions.ts +151 -0
  399. package/src/agents-manager/constants.ts +1 -0
  400. package/src/agents-manager/index.ts +38 -0
  401. package/src/agents-manager/persist-state.ts +60 -0
  402. package/src/agents-manager/reducer.ts +106 -0
  403. package/src/agents-manager/resolvers.ts +87 -0
  404. package/src/agents-manager/selectors.ts +32 -0
  405. package/src/agents-manager/test/persist-state.test.ts +81 -0
  406. package/src/agents-manager/test/reducer.test.ts +69 -0
  407. package/src/agents-manager/types.ts +24 -0
  408. package/src/contextual-help/admin-sections.ts +1 -1
  409. package/src/help-center/actions.ts +101 -76
  410. package/src/help-center/constants.ts +1 -0
  411. package/src/help-center/index.ts +11 -32
  412. package/src/help-center/reducer.ts +29 -5
  413. package/src/help-center/resolvers.ts +46 -38
  414. package/src/help-center/selectors.ts +3 -0
  415. package/src/help-center/test/utils.ts +99 -0
  416. package/src/help-center/types.ts +22 -13
  417. package/src/help-center/utils.ts +156 -0
  418. package/src/index.ts +11 -1
  419. package/src/mutations/use-domains-bulk-actions-mutation.ts +1 -1
  420. package/src/newsletter-categories/index.ts +1 -1
  421. package/src/newsletter-categories/test/index.tsx +5 -2
  422. package/src/onboard/actions.ts +7 -2
  423. package/src/onboard/reducer.ts +12 -2
  424. package/src/onboard/selectors.ts +1 -0
  425. package/src/plans/constants.ts +2 -0
  426. package/src/plans/hooks/test/use-pricing-meta-for-grid-plans.ts +120 -0
  427. package/src/plans/hooks/use-pricing-meta-for-grid-plans.ts +48 -18
  428. package/src/plans/index.ts +1 -0
  429. package/src/plans/queries/use-plans.ts +1 -1
  430. package/src/plans/queries/use-site-plans.ts +1 -1
  431. package/src/plans/resolvers.ts +0 -1
  432. package/src/plans/selectors.ts +9 -9
  433. package/src/plans/types.ts +6 -0
  434. package/src/products-list/queries/use-products.ts +1 -1
  435. package/src/products-list/resolvers.ts +1 -1
  436. package/src/products-list/selectors.ts +1 -1
  437. package/src/products-list/test/selectors.ts +2 -2
  438. package/src/purchases/lib/assembler.ts +10 -4
  439. package/src/purchases/queries/use-get-jetpack-transferred-license-purchases.tsx +1 -1
  440. package/src/purchases/queries/use-site-purchases.ts +2 -2
  441. package/src/purchases/types.ts +43 -0
  442. package/src/queries/use-all-domains-query.ts +3 -3
  443. package/src/queries/use-bulk-domain-update-status-query.ts +14 -115
  444. package/src/queries/use-happiness-engineers-query.ts +1 -1
  445. package/src/queries/use-launchpad.ts +1 -1
  446. package/src/queries/use-site-domains-query.ts +1 -1
  447. package/src/queries/use-site-intent.ts +1 -1
  448. package/src/queries/use-site-query.ts +1 -1
  449. package/src/reader/contexts/index.ts +0 -4
  450. package/src/reader/helpers/index.ts +3 -2
  451. package/src/reader/helpers/optimistic-update.ts +2 -1
  452. package/src/reader/index.ts +2 -4
  453. package/src/reader/mutations/test/use-site-subscription-mutations.test.tsx +208 -0
  454. package/src/reader/mutations/use-pending-site-confirm-mutation.ts +2 -2
  455. package/src/reader/mutations/use-site-delivery-frequency-mutation.ts +32 -36
  456. package/src/reader/mutations/use-site-email-me-new-comments-mutation.ts +10 -10
  457. package/src/reader/mutations/use-site-email-me-new-posts-mutation.ts +10 -10
  458. package/src/reader/mutations/use-site-notify-me-of-new-posts-mutation.ts +10 -10
  459. package/src/reader/mutations/use-site-subscribe-mutation.ts +21 -10
  460. package/src/reader/mutations/use-site-unsubscribe-mutation.ts +20 -10
  461. package/src/reader/queries/index.ts +4 -6
  462. package/src/reader/queries/test/use-site-subscriptions-query.tsx +158 -52
  463. package/src/reader/queries/use-site-subscriptions-query.ts +53 -55
  464. package/src/reader/types/index.ts +34 -48
  465. package/src/shared-types.ts +13 -0
  466. package/src/site/actions.ts +1 -1
  467. package/src/site/queries/use-site-features.ts +1 -1
  468. package/src/site/queries/use-site-media-storage.ts +1 -1
  469. package/src/site/queries/use-site-user-query.ts +1 -1
  470. package/src/site/queries/use-site.ts +1 -1
  471. package/src/site/resolvers.ts +1 -1
  472. package/src/site/selectors.ts +18 -10
  473. package/src/site/test/selectors.ts +3 -3
  474. package/src/site/types.ts +4 -1
  475. package/src/site-reset/test/use-site-reset-mutation.tsx +3 -4
  476. package/src/site-reset/use-site-reset-content-summary-query.ts +1 -1
  477. package/src/site-reset/use-site-reset-mutation.ts +1 -1
  478. package/src/site-reset/use-site-reset-status-query.ts +1 -1
  479. package/src/starter-designs-queries/types.ts +1 -1
  480. package/src/starter-designs-queries/use-starter-design-by-slug.ts +2 -2
  481. package/src/starter-designs-queries/use-starter-designs-query.ts +2 -2
  482. package/src/subscriber/actions.ts +1 -1
  483. package/src/templates/use-template.ts +1 -1
  484. package/src/users/use-send-invites.ts +1 -1
  485. package/src/utils.ts +33 -0
  486. package/src/wpcom-request-controls/index.ts +2 -1
  487. package/src/wpcom-request.ts +26 -0
  488. package/dist/cjs/reader/contexts/unsubscribed-feeds-search.js +0 -26
  489. package/dist/cjs/reader/contexts/unsubscribed-feeds-search.js.map +0 -1
  490. package/dist/cjs/reader/queries/use-read-feed-query.js +0 -21
  491. package/dist/cjs/reader/queries/use-read-feed-query.js.map +0 -1
  492. package/dist/cjs/reader/queries/use-read-feed-search-query.js +0 -39
  493. package/dist/cjs/reader/queries/use-read-feed-search-query.js.map +0 -1
  494. package/dist/cjs/reader/queries/use-read-feed-site-query.js +0 -26
  495. package/dist/cjs/reader/queries/use-read-feed-site-query.js.map +0 -1
  496. package/dist/esm/reader/contexts/unsubscribed-feeds-search.js +0 -20
  497. package/dist/esm/reader/contexts/unsubscribed-feeds-search.js.map +0 -1
  498. package/dist/esm/reader/queries/use-read-feed-query.js +0 -18
  499. package/dist/esm/reader/queries/use-read-feed-query.js.map +0 -1
  500. package/dist/esm/reader/queries/use-read-feed-search-query.js +0 -35
  501. package/dist/esm/reader/queries/use-read-feed-search-query.js.map +0 -1
  502. package/dist/esm/reader/queries/use-read-feed-site-query.js +0 -23
  503. package/dist/esm/reader/queries/use-read-feed-site-query.js.map +0 -1
  504. package/dist/types/reader/contexts/unsubscribed-feeds-search.d.ts +0 -12
  505. package/dist/types/reader/contexts/unsubscribed-feeds-search.d.ts.map +0 -1
  506. package/dist/types/reader/queries/use-read-feed-query.d.ts +0 -28
  507. package/dist/types/reader/queries/use-read-feed-query.d.ts.map +0 -1
  508. package/dist/types/reader/queries/use-read-feed-search-query.d.ts +0 -34
  509. package/dist/types/reader/queries/use-read-feed-search-query.d.ts.map +0 -1
  510. package/dist/types/reader/queries/use-read-feed-site-query.d.ts +0 -15
  511. package/dist/types/reader/queries/use-read-feed-site-query.d.ts.map +0 -1
  512. package/src/reader/contexts/unsubscribed-feeds-search.tsx +0 -35
  513. package/src/reader/queries/test/use-read-feed-search-query.tsx +0 -55
  514. package/src/reader/queries/use-read-feed-query.ts +0 -45
  515. package/src/reader/queries/use-read-feed-search-query.ts +0 -72
  516. package/src/reader/queries/use-read-feed-site-query.ts +0 -35
@@ -147,6 +147,87 @@ describe( 'usePricingMetaForGridPlans', () => {
147
147
  expect( pricingMeta ).toEqual( expectedPricingMeta );
148
148
  } );
149
149
 
150
+ describe( 'current plan with an active introductory offer', () => {
151
+ beforeEach( () => {
152
+ Plans.useCurrentPlan.mockImplementation( () => ( {
153
+ productSlug: PLAN_BUSINESS,
154
+ planSlug: PLAN_BUSINESS,
155
+ purchaseId: 1234,
156
+ } ) );
157
+ // Yearly purchase: renewal 600/yr, active intro 120/yr.
158
+ Purchases.useSitePurchaseById.mockImplementation( () => ( {
159
+ priceInteger: 600,
160
+ currencyCode: 'USD',
161
+ billPeriodDays: 365,
162
+ introductoryOffer: {
163
+ isWithinPeriod: true,
164
+ costPerIntervalInteger: 120,
165
+ },
166
+ } ) );
167
+ } );
168
+
169
+ it( 'should return the intro price as the headline plus a renewal price for the experiment treatment', () => {
170
+ const pricingMeta = usePricingMetaForGridPlans( {
171
+ planSlugs: [ PLAN_BUSINESS ],
172
+ siteId,
173
+ coupon: undefined,
174
+ useCheckPlanAvailabilityForPurchase,
175
+ showBillingDescriptionForIncreasedRenewalPrice: 'crossed_price',
176
+ } );
177
+
178
+ const expectedPricingMeta = {
179
+ [ PLAN_BUSINESS ]: {
180
+ originalPrice: {
181
+ full: 120,
182
+ monthly: 10,
183
+ },
184
+ discountedPrice: {
185
+ full: null,
186
+ monthly: null,
187
+ },
188
+ billingPeriod: 365,
189
+ currencyCode: 'USD',
190
+ expiry: null,
191
+ introOffer: undefined,
192
+ renewalPrice: {
193
+ full: 600,
194
+ monthly: 50,
195
+ },
196
+ },
197
+ };
198
+
199
+ expect( pricingMeta ).toEqual( expectedPricingMeta );
200
+ } );
201
+
202
+ it( 'should return the renewal price as the headline for non-treatment users', () => {
203
+ const pricingMeta = usePricingMetaForGridPlans( {
204
+ planSlugs: [ PLAN_BUSINESS ],
205
+ siteId,
206
+ coupon: undefined,
207
+ useCheckPlanAvailabilityForPurchase,
208
+ } );
209
+
210
+ const expectedPricingMeta = {
211
+ [ PLAN_BUSINESS ]: {
212
+ originalPrice: {
213
+ full: 600,
214
+ monthly: 50,
215
+ },
216
+ discountedPrice: {
217
+ full: null,
218
+ monthly: null,
219
+ },
220
+ billingPeriod: 365,
221
+ currencyCode: 'USD',
222
+ expiry: null,
223
+ introOffer: undefined,
224
+ },
225
+ };
226
+
227
+ expect( pricingMeta ).toEqual( expectedPricingMeta );
228
+ } );
229
+ } );
230
+
150
231
  it( 'should return the original price as the site plan price and discounted price as Null for plans not available for purchase', () => {
151
232
  Plans.useCurrentPlan.mockImplementation( () => ( {
152
233
  productSlug: PLAN_BUSINESS,
@@ -301,6 +382,45 @@ describe( 'usePricingMetaForGridPlans', () => {
301
382
  }
302
383
  );
303
384
 
385
+ it.each( [
386
+ COST_OVERRIDE_REASONS.RECENT_PLAN_PRORATION,
387
+ COST_OVERRIDE_REASONS.RECENT_DOMAIN_PRORATION,
388
+ ] )(
389
+ "should suppress discounted price when proration override '%s' is not the first cost override entry",
390
+ ( overrideCode ) => {
391
+ Plans.useCurrentPlan.mockImplementation( () => ( {
392
+ productSlug: PLAN_PERSONAL,
393
+ planSlug: PLAN_PERSONAL,
394
+ } ) );
395
+
396
+ Plans.useSitePlans.mockImplementation( () => ( {
397
+ isLoading: false,
398
+ data: {
399
+ [ PLAN_BUSINESS ]: {
400
+ ...SITE_PLANS[ PLAN_BUSINESS ],
401
+ pricing: {
402
+ ...SITE_PLANS[ PLAN_BUSINESS ].pricing,
403
+ costOverrides: [ { overrideCode: 'multiterm-upgrade' }, { overrideCode } ],
404
+ },
405
+ },
406
+ },
407
+ } ) );
408
+
409
+ const pricingMeta = usePricingMetaForGridPlans( {
410
+ planSlugs: [ PLAN_BUSINESS ],
411
+ siteId,
412
+ coupon: undefined,
413
+ useCheckPlanAvailabilityForPurchase,
414
+ withProratedDiscounts: false,
415
+ } );
416
+
417
+ expect( pricingMeta?.[ PLAN_BUSINESS ]?.discountedPrice ).toEqual( {
418
+ full: null,
419
+ monthly: null,
420
+ } );
421
+ }
422
+ );
423
+
304
424
  it( 'should return intro offer when available', () => {
305
425
  Plans.useIntroOffers.mockImplementation( () => ( {
306
426
  [ PLAN_BUSINESS ]: introOffer,
@@ -58,6 +58,12 @@ interface Props {
58
58
  * from the final price.
59
59
  */
60
60
  reflectStorageSelectionInPlanPrices?: boolean;
61
+
62
+ /**
63
+ * Renewal-pricing experiment flag. When falsy (non-treatment), the current plan's
64
+ * headline uses the renewal price, not an active intro price.
65
+ */
66
+ showBillingDescriptionForIncreasedRenewalPrice?: string | null;
61
67
  }
62
68
 
63
69
  function getTotalPrice( planPrice: number | null | undefined, addOnPrice = 0 ): number | null {
@@ -81,6 +87,7 @@ const usePricingMetaForGridPlans = ( {
81
87
  useCheckPlanAvailabilityForPurchase,
82
88
  withProratedDiscounts,
83
89
  reflectStorageSelectionInPlanPrices = false,
90
+ showBillingDescriptionForIncreasedRenewalPrice,
84
91
  }: Props ): { [ planSlug: string ]: Plans.PricingMetaForGridPlan } | null => {
85
92
  // plans - should have a definition for all plans, being the main source of API data
86
93
  const plans = Plans.usePlans( { coupon } );
@@ -117,6 +124,7 @@ const usePricingMetaForGridPlans = ( {
117
124
  discountedPrice: Plans.PlanPricing[ 'discountedPrice' ];
118
125
  currencyCode: Plans.PlanPricing[ 'currencyCode' ];
119
126
  introOffer: Plans.PlanPricing[ 'introOffer' ];
127
+ renewalPrice?: Plans.PlanPricing[ 'originalPrice' ];
120
128
  };
121
129
  }
122
130
  | null = null;
@@ -185,18 +193,38 @@ const usePricingMetaForGridPlans = ( {
185
193
  let fullPrice = sitePlan?.pricing.originalPrice.full;
186
194
 
187
195
  /**
188
- * Ensure the spotlight (current) plan shows the price with which the plan was purchased.
196
+ * Spotlight (current) plan headline. Only the renewal-pricing experiment treatment shows
197
+ * the active intro price (with a separate "renews at" line); everyone else sees the renewal
198
+ * price, so the headline is never lower than what they'll actually pay.
189
199
  */
200
+ let renewalPrice: Plans.PlanPricing[ 'originalPrice' ] | undefined;
201
+
190
202
  if ( purchasedPlan ) {
203
+ const showIntroOfferHeadline =
204
+ !! showBillingDescriptionForIncreasedRenewalPrice &&
205
+ purchasedPlan.introductoryOffer?.isWithinPeriod;
206
+ const currentTermPrice = showIntroOfferHeadline
207
+ ? purchasedPlan.introductoryOffer!.costPerIntervalInteger
208
+ : purchasedPlan.priceInteger;
191
209
  const isMonthly = purchasedPlan.billPeriodDays === PLAN_MONTHLY_PERIOD;
192
210
 
193
- if ( isMonthly && monthlyPrice !== purchasedPlan.priceInteger ) {
194
- monthlyPrice = purchasedPlan.priceInteger;
195
- fullPrice = parseFloat( ( purchasedPlan.priceInteger * 12 ).toFixed( 2 ) );
196
- } else if ( fullPrice !== purchasedPlan.priceInteger ) {
211
+ if ( isMonthly && monthlyPrice !== currentTermPrice ) {
212
+ monthlyPrice = currentTermPrice;
213
+ fullPrice = parseFloat( ( currentTermPrice * 12 ).toFixed( 2 ) );
214
+ } else if ( fullPrice !== currentTermPrice ) {
197
215
  const term = getTermFromDuration( purchasedPlan.billPeriodDays ) || '';
198
- monthlyPrice = calculateMonthlyPrice( term, purchasedPlan.priceInteger );
199
- fullPrice = purchasedPlan.priceInteger;
216
+ monthlyPrice = calculateMonthlyPrice( term, currentTermPrice );
217
+ fullPrice = currentTermPrice;
218
+ }
219
+
220
+ if ( showIntroOfferHeadline ) {
221
+ const renewalTerm = getTermFromDuration( purchasedPlan.billPeriodDays ) || '';
222
+ renewalPrice = {
223
+ monthly: isMonthly
224
+ ? purchasedPlan.priceInteger
225
+ : calculateMonthlyPrice( renewalTerm, purchasedPlan.priceInteger ),
226
+ full: purchasedPlan.priceInteger,
227
+ };
200
228
  }
201
229
  }
202
230
 
@@ -214,6 +242,7 @@ const usePricingMetaForGridPlans = ( {
214
242
  currencyCode: purchasedPlan
215
243
  ? purchasedPlan?.currencyCode
216
244
  : plan?.pricing?.currencyCode,
245
+ ...( renewalPrice && { renewalPrice } ),
217
246
  },
218
247
  ];
219
248
  }
@@ -234,13 +263,13 @@ const usePricingMetaForGridPlans = ( {
234
263
  // If there is, however, a sale coupon, show the discounted price
235
264
  // without proration. This isn't ideal, but is intentional. Because of
236
265
  // this, the price will differ between the plans grid and checkout screen.
237
- const costOverrideCode = sitePlan?.pricing?.costOverrides?.[ 0 ]?.overrideCode;
238
- const hasProratedCostOverride =
239
- costOverrideCode &&
240
- [
241
- COST_OVERRIDE_REASONS.RECENT_PLAN_PRORATION,
242
- COST_OVERRIDE_REASONS.RECENT_DOMAIN_PRORATION,
243
- ].includes( costOverrideCode );
266
+ const hasProratedCostOverride = sitePlan?.pricing?.costOverrides?.some(
267
+ ( { overrideCode } ) =>
268
+ [
269
+ COST_OVERRIDE_REASONS.RECENT_PLAN_PRORATION,
270
+ COST_OVERRIDE_REASONS.RECENT_DOMAIN_PRORATION,
271
+ ].includes( overrideCode )
272
+ );
244
273
  if (
245
274
  ! sitePlan?.pricing?.hasSaleCoupon &&
246
275
  ! withProratedDiscounts &&
@@ -258,7 +287,7 @@ const usePricingMetaForGridPlans = ( {
258
287
  ...( sitePlan?.pricing.introOffer && {
259
288
  introOffer: {
260
289
  ...sitePlan?.pricing.introOffer,
261
- rawPrice: introOfferPrice,
290
+ ...( introOfferPrice && { rawPrice: introOfferPrice } ),
262
291
  },
263
292
  } ),
264
293
  },
@@ -282,7 +311,7 @@ const usePricingMetaForGridPlans = ( {
282
311
  ...( sitePlan?.pricing.introOffer && {
283
312
  introOffer: {
284
313
  ...sitePlan?.pricing.introOffer,
285
- rawPrice: introOfferPrice,
314
+ ...( introOfferPrice && { rawPrice: introOfferPrice } ),
286
315
  },
287
316
  } ),
288
317
  },
@@ -314,7 +343,7 @@ const usePricingMetaForGridPlans = ( {
314
343
  ...( plan?.pricing.introOffer && {
315
344
  introOffer: {
316
345
  ...plan?.pricing.introOffer,
317
- rawPrice: introOfferPrice,
346
+ ...( introOfferPrice && { rawPrice: introOfferPrice } ),
318
347
  },
319
348
  } ),
320
349
  },
@@ -342,7 +371,7 @@ const usePricingMetaForGridPlans = ( {
342
371
  ...( plan?.pricing.introOffer && {
343
372
  introOffer: {
344
373
  ...plan?.pricing.introOffer,
345
- rawPrice: introOfferPrice,
374
+ ...( introOfferPrice && { rawPrice: introOfferPrice } ),
346
375
  },
347
376
  } ),
348
377
  },
@@ -366,6 +395,7 @@ const usePricingMetaForGridPlans = ( {
366
395
  currencyCode: planPrices?.[ planSlug ]?.currencyCode,
367
396
  expiry: sitePlans.data?.[ planSlug ]?.expiry,
368
397
  introOffer: planPrices?.[ planSlug ]?.introOffer,
398
+ renewalPrice: planPrices?.[ planSlug ]?.renewalPrice,
369
399
  },
370
400
  } ),
371
401
  {} as { [ planSlug in PlanSlug ]?: Plans.PricingMetaForGridPlan }
@@ -47,6 +47,7 @@ export {
47
47
  TIMELESS_PLAN_BUSINESS,
48
48
  TIMELESS_PLAN_ECOMMERCE,
49
49
  FREE_PLAN_PRODUCT_ID,
50
+ COST_OVERRIDE_REASONS,
50
51
  } from './constants';
51
52
 
52
53
  let isRegistered = false;
@@ -2,7 +2,7 @@ import { isEnabled } from '@automattic/calypso-config';
2
2
  import { calculateMonthlyPriceForPlan } from '@automattic/calypso-products';
3
3
  import { useLocale } from '@automattic/i18n-utils';
4
4
  import { useQuery, type UseQueryResult } from '@tanstack/react-query';
5
- import wpcomRequest from 'wpcom-proxy-request';
5
+ import wpcomRequest from '../../wpcom-request';
6
6
  import unpackIntroOffer from './lib/unpack-intro-offer';
7
7
  import useQueryKeysFactory from './lib/use-query-keys-factory';
8
8
  import type { PricedAPIPlan, PlanNext } from '../types';
@@ -1,6 +1,6 @@
1
1
  import { calculateMonthlyPriceForPlan } from '@automattic/calypso-products';
2
2
  import { useQuery, type UseQueryResult } from '@tanstack/react-query';
3
- import wpcomRequest from 'wpcom-proxy-request';
3
+ import wpcomRequest from '../../wpcom-request';
4
4
  import unpackCostOverrides from './lib/unpack-cost-overrides';
5
5
  import unpackIntroOffer from './lib/unpack-intro-offer';
6
6
  import useQueryKeysFactory from './lib/use-query-keys-factory';
@@ -142,7 +142,6 @@ function normalizePlanProducts(
142
142
  periodAgnosticSlug: periodAgnosticPlan.periodAgnosticSlug,
143
143
  storeSlug: planProduct.product_slug,
144
144
  rawPrice: planProduct.raw_price,
145
- // Not all plans returned from /plans have a `path_slug` (e.g. monthly plans don't have)
146
145
  pathSlug: planProduct.path_slug,
147
146
  price:
148
147
  planProduct?.bill_period === MONTHLY_PLAN_BILLING_PERIOD || planProduct.raw_price === 0
@@ -38,7 +38,7 @@ export const getPlanByProductId = (
38
38
  return undefined;
39
39
  }
40
40
 
41
- return ( select( STORE_KEY ) as PlansSelect )
41
+ return ( select( STORE_KEY ) as unknown as PlansSelect )
42
42
  .getSupportedPlans( locale )
43
43
  .find( ( plan: Plan ) => plan.productIds.indexOf( productId ) > -1 );
44
44
  };
@@ -51,7 +51,7 @@ export const getPlanProductById = (
51
51
  return undefined;
52
52
  }
53
53
 
54
- return ( select( STORE_KEY ) as PlansSelect )
54
+ return ( select( STORE_KEY ) as unknown as PlansSelect )
55
55
  .getPlansProducts()
56
56
  .find( ( product: PlanProduct ) => product.productId === productId );
57
57
  };
@@ -64,19 +64,19 @@ export const getPlanByPeriodAgnosticSlug = (
64
64
  if ( ! slug ) {
65
65
  return undefined;
66
66
  }
67
- return ( select( STORE_KEY ) as PlansSelect )
67
+ return ( select( STORE_KEY ) as unknown as PlansSelect )
68
68
  .getSupportedPlans( locale )
69
69
  .find( ( plan: Plan ) => plan.periodAgnosticSlug === slug );
70
70
  };
71
71
 
72
72
  export const getDefaultPaidPlan = ( _: State, locale: string ): Plan | undefined => {
73
- return ( select( STORE_KEY ) as PlansSelect )
73
+ return ( select( STORE_KEY ) as unknown as PlansSelect )
74
74
  .getSupportedPlans( locale )
75
75
  .find( ( plan: Plan ) => plan.periodAgnosticSlug === DEFAULT_PAID_PLAN );
76
76
  };
77
77
 
78
78
  export const getDefaultFreePlan = ( _: State, locale: string ): Plan | undefined => {
79
- return ( select( STORE_KEY ) as PlansSelect )
79
+ return ( select( STORE_KEY ) as unknown as PlansSelect )
80
80
  .getSupportedPlans( locale )
81
81
  .find( ( plan: Plan ) => plan.periodAgnosticSlug === TIMELESS_PLAN_FREE );
82
82
  };
@@ -98,7 +98,7 @@ export const getPrices = ( _state: State, _locale: string ): Record< StorePlanSl
98
98
  deprecate( 'getPrices', {
99
99
  alternative: 'getPlanProduct().price',
100
100
  } );
101
- return ( select( STORE_KEY ) as PlansSelect ).getPlansProducts().reduce(
101
+ return ( select( STORE_KEY ) as unknown as PlansSelect ).getPlansProducts().reduce(
102
102
  ( prices: Record< StorePlanSlug, string >, plan: PlanProduct ) => {
103
103
  prices[ plan.storeSlug ] = plan.price;
104
104
  return prices;
@@ -116,7 +116,7 @@ export const getPlanByPath = (
116
116
  return undefined;
117
117
  }
118
118
 
119
- const planProduct = ( select( STORE_KEY ) as PlansSelect )
119
+ const planProduct = ( select( STORE_KEY ) as unknown as PlansSelect )
120
120
  .getPlansProducts()
121
121
  .find( ( product: PlanProduct ) => product.pathSlug === path );
122
122
 
@@ -124,7 +124,7 @@ export const getPlanByPath = (
124
124
  return undefined;
125
125
  }
126
126
 
127
- return ( select( STORE_KEY ) as PlansSelect )
127
+ return ( select( STORE_KEY ) as unknown as PlansSelect )
128
128
  .getSupportedPlans( locale )
129
129
  .find( ( plan: Plan ) => plan.periodAgnosticSlug === planProduct.periodAgnosticSlug );
130
130
  };
@@ -138,7 +138,7 @@ export const getPlanProduct = (
138
138
  return undefined;
139
139
  }
140
140
 
141
- return ( select( STORE_KEY ) as PlansSelect )
141
+ return ( select( STORE_KEY ) as unknown as PlansSelect )
142
142
  .getPlansProducts()
143
143
  .find( ( product: PlanProduct ) => {
144
144
  const matchesSlug = product.periodAgnosticSlug === periodAgnosticSlug;
@@ -146,6 +146,12 @@ export interface PricingMetaForGridPlan {
146
146
  */
147
147
  introOffer?: PlanPricing[ 'introOffer' ];
148
148
  expiry?: SitePlan[ 'expiry' ];
149
+ /**
150
+ * The renewal price for the current plan when it differs from originalPrice
151
+ * (e.g. when the current billing term has an active intro offer).
152
+ * Used by renewal pricing text to show what the plan will cost after the offer ends.
153
+ */
154
+ renewalPrice?: PlanPricing[ 'originalPrice' ];
149
155
  }
150
156
 
151
157
  export interface SitePlan {
@@ -1,7 +1,7 @@
1
1
  import { useLocale } from '@automattic/i18n-utils';
2
2
  import { useQuery, type UseQueryResult } from '@tanstack/react-query';
3
- import wpcomRequest from 'wpcom-proxy-request';
4
3
  import * as ProductsList from '../../products-list';
4
+ import wpcomRequest from '../../wpcom-request';
5
5
  import useQueryKeysFactory from './lib/use-query-keys-factory';
6
6
  import type { StoreProductSlug, Product, RawAPIProductsList } from '../types';
7
7
 
@@ -1,4 +1,4 @@
1
- import wpcomRequest from 'wpcom-proxy-request';
1
+ import wpcomRequest from '../wpcom-request';
2
2
  import { RawAPIProductsList, ProductsListFailure, Dispatch } from './types';
3
3
 
4
4
  /**
@@ -14,7 +14,7 @@ export const getProductBySlug = ( _state: State, slug: string ) => {
14
14
  return undefined;
15
15
  }
16
16
  const products = (
17
- select( STORE_KEY ) as { getProductsList: () => RawAPIProductsList | undefined }
17
+ select( STORE_KEY ) as unknown as { getProductsList: () => RawAPIProductsList | undefined }
18
18
  ).getProductsList();
19
19
 
20
20
  if ( ! products ) {
@@ -6,10 +6,10 @@
6
6
  * @jest-environment jsdom
7
7
  */
8
8
  import { select, subscribe } from '@wordpress/data';
9
- import wpcomRequest from 'wpcom-proxy-request';
10
9
  import { store } from '../';
10
+ import wpcomRequest from '../../wpcom-request';
11
11
 
12
- jest.mock( 'wpcom-proxy-request', () => ( {
12
+ jest.mock( '../../wpcom-request', () => ( {
13
13
  __esModule: true,
14
14
  default: jest.fn(),
15
15
  } ) );
@@ -5,6 +5,10 @@ export function createPurchaseObject( purchase: RawPurchase ): Purchase {
5
5
  const object: Purchase = {
6
6
  id: Number( purchase.ID ),
7
7
  amount: Number( purchase.amount ),
8
+ advertisedTotalUploadSpaceInGb:
9
+ purchase.advertised_total_upload_space_in_gb == null
10
+ ? null
11
+ : Number( purchase.advertised_total_upload_space_in_gb ),
8
12
  attachedToPurchaseId: Number( purchase.attached_to_purchase_id ),
9
13
  autoRenewCouponCode: purchase.auto_renew_coupon_code,
10
14
  autoRenewCouponDiscountPercentage: Number( purchase.auto_renew_coupon_discount_percentage ),
@@ -15,9 +19,7 @@ export function createPurchaseObject( purchase: RawPurchase ): Purchase {
15
19
  canDisableAutoRenew: Boolean( purchase.can_disable_auto_renew ),
16
20
  canReenableAutoRenewal: Boolean( purchase.can_reenable_auto_renewal ),
17
21
  canExplicitRenew: Boolean( purchase.can_explicit_renew ),
18
- costToUnbundleText: purchase.cost_to_unbundle_display
19
- ? purchase.cost_to_unbundle_display
20
- : purchase.price_text,
22
+ costToUnbundleText: purchase.cost_to_unbundle_display ?? '',
21
23
  currencyCode: purchase.currency_code,
22
24
  currencySymbol: purchase.currency_symbol,
23
25
  description: purchase.description,
@@ -25,6 +27,7 @@ export function createPurchaseObject( purchase: RawPurchase ): Purchase {
25
27
  domainRegistrationAgreementUrl: purchase.domain_registration_agreement_url || null,
26
28
  blogCreatedDate: purchase.blog_created_date,
27
29
  expiryDate: purchase.expiry_date,
30
+ paymentExpiryDate: purchase.payment_expiry_date,
28
31
  expiryStatus: snakeToCamelCase( purchase.expiry_status ),
29
32
  iapPurchaseManagementLink: purchase.iap_purchase_management_link,
30
33
  includedDomain: purchase.included_domain,
@@ -32,6 +35,7 @@ export function createPurchaseObject( purchase: RawPurchase ): Purchase {
32
35
  introductoryOffer: purchase.introductory_offer
33
36
  ? {
34
37
  costPerInterval: Number( purchase.introductory_offer.cost_per_interval ),
38
+ costPerIntervalInteger: Number( purchase.introductory_offer.cost_per_interval_integer ),
35
39
  endDate: String( purchase.introductory_offer.end_date ),
36
40
  intervalCount: Number( purchase.introductory_offer.interval_count ),
37
41
  intervalUnit: String( purchase.introductory_offer.interval_unit ),
@@ -57,8 +61,9 @@ export function createPurchaseObject( purchase: RawPurchase ): Purchase {
57
61
  isHundredYearDomain: Boolean( purchase.is_hundred_year_domain ),
58
62
  isLocked: Boolean( purchase.is_locked ),
59
63
  isInAppPurchase: Boolean( purchase.is_iap_purchase ),
60
- isRechargeable: Boolean( purchase.is_rechargable ),
64
+ isRechargeable: Boolean( purchase.is_rechargeable ),
61
65
  isRefundable: Boolean( purchase.is_refundable ),
66
+ isWithinInitialRefundWindow: Boolean( purchase.is_within_initial_refund_window ),
62
67
  isRenewable: Boolean( purchase.is_renewable ),
63
68
  isRenewal: Boolean( purchase.is_renewal ),
64
69
  isWooExpressTrial: Boolean( purchase.is_woo_express_trial ),
@@ -116,6 +121,7 @@ export function createPurchaseObject( purchase: RawPurchase ): Purchase {
116
121
  userId: Number( purchase.user_id ),
117
122
  isAutoRenewEnabled: purchase.is_auto_renew_enabled,
118
123
  isJetpackPlanOrProduct: purchase.is_jetpack_plan_or_product,
124
+ isAttachedToHoldingSite: Boolean( purchase.is_attached_to_holding_site ),
119
125
  };
120
126
 
121
127
  if ( isCreditCardPurchase( purchase ) ) {
@@ -1,5 +1,5 @@
1
1
  import { useQuery } from '@tanstack/react-query';
2
- import wpcomRequest from 'wpcom-proxy-request';
2
+ import wpcomRequest from '../../wpcom-request';
3
3
  import { createPurchaseObject } from '../lib/assembler';
4
4
  import useQueryKeysFactory from './lib/use-query-keys-factory';
5
5
  import type { RawPurchase, Purchase } from '../types';
@@ -1,5 +1,5 @@
1
1
  import { useQuery } from '@tanstack/react-query';
2
- import wpcomRequest from 'wpcom-proxy-request';
2
+ import wpcomRequest from '../../wpcom-request';
3
3
  import { createPurchaseObject } from '../lib/assembler';
4
4
  import useQueryKeysFactory from './lib/use-query-keys-factory';
5
5
  import type { RawPurchase, Purchase } from '../types';
@@ -21,7 +21,7 @@ export function getUseSitePurchasesOptions(
21
21
  queryFn: async (): Promise< PurchasesIndex > => {
22
22
  const purchases: RawPurchase[] = await wpcomRequest( {
23
23
  path: `/sites/${ encodeURIComponent( siteId as string ) }/purchases`,
24
- apiVersion: '1.1',
24
+ apiVersion: '1.2',
25
25
  } );
26
26
 
27
27
  return Object.fromEntries(
@@ -2,6 +2,7 @@ import { PriceTierEntry } from '@automattic/calypso-products';
2
2
 
3
3
  export interface Purchase {
4
4
  amount: number;
5
+ advertisedTotalUploadSpaceInGb?: number | null;
5
6
  attachedToPurchaseId: number;
6
7
  billPeriodDays: number;
7
8
  billPeriodLabel: string;
@@ -10,7 +11,17 @@ export interface Purchase {
10
11
  asyncPendingPaymentBlockIsSet: boolean;
11
12
  canExplicitRenew: boolean;
12
13
  canReenableAutoRenewal: boolean;
14
+
15
+ /**
16
+ * If this upgrade is a domain and a domain credit was used to purchase it,
17
+ * and the plan is within its refund period, then `cost_to_unbundle_display`
18
+ * will be the formatted amount of the amount that would be withheld to keep
19
+ * the domain if the plan is cancelled.
20
+ *
21
+ * If there is nothing that would be withheld, this will be null.
22
+ */
13
23
  costToUnbundleText: string;
24
+
14
25
  currencyCode: string;
15
26
  currencySymbol: string;
16
27
  description: string;
@@ -28,10 +39,23 @@ export interface Purchase {
28
39
 
29
40
  domainRegistrationAgreementUrl: string | null;
30
41
  expiryDate: string;
42
+
43
+ /**
44
+ * The expiry date in ISO 8601 (YYYY-MM-DD) if the payment method has one.
45
+ */
46
+ paymentExpiryDate: string | undefined;
47
+
31
48
  expiryStatus: string;
32
49
  iapPurchaseManagementLink: string | null;
33
50
  id: number;
51
+
52
+ /**
53
+ * If this subscription is for a plan with a bundled domain, this will
54
+ * contain the domain name for that domain subscription. Otherwise this will
55
+ * be an empty string.
56
+ */
34
57
  includedDomain: string;
58
+
35
59
  includedDomainPurchaseAmount: number;
36
60
  introductoryOffer: PurchaseIntroductoryOffer | null;
37
61
  isAutoRenewEnabled: boolean;
@@ -43,6 +67,7 @@ export interface Purchase {
43
67
  isLocked: boolean;
44
68
  isRechargeable: boolean;
45
69
  isRefundable: boolean;
70
+ isWithinInitialRefundWindow: boolean;
46
71
  isRenewable: boolean;
47
72
  isRenewal: boolean;
48
73
  isWooExpressTrial: boolean;
@@ -170,6 +195,7 @@ export interface Purchase {
170
195
  autoRenewCouponDiscountPercentage: number | null;
171
196
 
172
197
  isJetpackPlanOrProduct: boolean;
198
+ isAttachedToHoldingSite: boolean;
173
199
  }
174
200
 
175
201
  export interface PurchasePriceTier {
@@ -196,6 +222,7 @@ export interface RefundOptions {
196
222
 
197
223
  export interface RawPurchaseIntroductoryOffer {
198
224
  cost_per_interval: number;
225
+ cost_per_interval_integer: number;
199
226
  end_date: string;
200
227
  interval_count: number;
201
228
  interval_unit: string;
@@ -209,6 +236,7 @@ export interface RawPurchaseIntroductoryOffer {
209
236
 
210
237
  export interface PurchaseIntroductoryOffer {
211
238
  costPerInterval: number;
239
+ costPerIntervalInteger: number;
212
240
  endDate: string;
213
241
  intervalCount: number;
214
242
  intervalUnit: string;
@@ -226,6 +254,11 @@ export interface PurchasePayment {
226
254
  countryCode: string | undefined | null;
227
255
  countryName: string | undefined;
228
256
  storedDetailsId: string | number | undefined | null;
257
+ /**
258
+ * The expiry date in MM/YY if the payment method has one.
259
+ *
260
+ * Use `paymentExpiryDate` on the Purchase if possible as it will be more accurate.
261
+ */
229
262
  expiryDate?: string;
230
263
  creditCard?: PurchasePaymentCreditCard;
231
264
  paymentPartner?: string;
@@ -240,6 +273,11 @@ export type PurchasePaymentWithPayPal = PurchasePayment & {
240
273
  countryName: string | undefined;
241
274
  storedDetailsId: string | number;
242
275
  type: string;
276
+ /**
277
+ * The expiry date in MM/YY if the payment method has one.
278
+ *
279
+ * Use `paymentExpiryDate` on the Purchase if possible as it will be more accurate.
280
+ */
243
281
  expiryDate: string;
244
282
  };
245
283
 
@@ -262,5 +300,10 @@ export interface PurchasePaymentCreditCard {
262
300
  displayBrand: string | null;
263
301
  processor: string;
264
302
  number: string;
303
+ /**
304
+ * The expiry date in MM/YY if the payment method has one.
305
+ *
306
+ * Use `paymentExpiryDate` on the Purchase if possible as it will be more accurate.
307
+ */
265
308
  expiryDate: string;
266
309
  }
@@ -1,6 +1,6 @@
1
1
  import { UseQueryOptions, useQuery } from '@tanstack/react-query';
2
2
  import { addQueryArgs } from '@wordpress/url';
3
- import wpcomRequest from 'wpcom-proxy-request';
3
+ import wpcomRequest from '../wpcom-request';
4
4
  import type { DomainData } from './use-site-domains-query';
5
5
 
6
6
  // The data returned by the /all-domains endpoint only includes the basic data
@@ -30,10 +30,10 @@ export interface AllDomainsQueryFnData {
30
30
  domains: PartialDomainData[];
31
31
  }
32
32
 
33
- export interface AllDomainsQueryArgs {
33
+ export type AllDomainsQueryArgs = {
34
34
  no_wpcom?: boolean;
35
35
  resolve_status?: boolean;
36
- }
36
+ };
37
37
 
38
38
  export const getAllDomainsQueryKey = ( queryArgs: AllDomainsQueryArgs = {} ) => [
39
39
  'all-domains',