@aglyn/plugins-commerce 1.0.0-beta.143

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 (417) hide show
  1. package/LICENSE +201 -0
  2. package/README.md +10 -0
  3. package/package.json +57 -0
  4. package/src/index.d.ts +38 -0
  5. package/src/index.js +38 -0
  6. package/src/index.js.map +1 -0
  7. package/src/lib/components/account.d.ts +31 -0
  8. package/src/lib/components/account.js +645 -0
  9. package/src/lib/components/account.js.map +1 -0
  10. package/src/lib/components/cart.d.ts +38 -0
  11. package/src/lib/components/cart.js +851 -0
  12. package/src/lib/components/cart.js.map +1 -0
  13. package/src/lib/components/commerce-console-page.d.ts +32 -0
  14. package/src/lib/components/commerce-console-page.js +296 -0
  15. package/src/lib/components/commerce-console-page.js.map +1 -0
  16. package/src/lib/components/commerce-console-sections.d.ts +34 -0
  17. package/src/lib/components/commerce-console-sections.js +62 -0
  18. package/src/lib/components/commerce-console-sections.js.map +1 -0
  19. package/src/lib/components/console/catalog-organization-card.component.d.ts +14 -0
  20. package/src/lib/components/console/catalog-organization-card.component.js +1087 -0
  21. package/src/lib/components/console/catalog-organization-card.component.js.map +1 -0
  22. package/src/lib/components/console/commerce-analytics-card.component.d.ts +27 -0
  23. package/src/lib/components/console/commerce-analytics-card.component.js +310 -0
  24. package/src/lib/components/console/commerce-analytics-card.component.js.map +1 -0
  25. package/src/lib/components/console/commerce-glance-card.component.d.ts +20 -0
  26. package/src/lib/components/console/commerce-glance-card.component.js +340 -0
  27. package/src/lib/components/console/commerce-glance-card.component.js.map +1 -0
  28. package/src/lib/components/console/commerce-stat-tile.component.d.ts +37 -0
  29. package/src/lib/components/console/commerce-stat-tile.component.js +72 -0
  30. package/src/lib/components/console/commerce-stat-tile.component.js.map +1 -0
  31. package/src/lib/components/console/discounts-card.component.d.ts +14 -0
  32. package/src/lib/components/console/discounts-card.component.js +443 -0
  33. package/src/lib/components/console/discounts-card.component.js.map +1 -0
  34. package/src/lib/components/console/entitlement-gate.component.d.ts +76 -0
  35. package/src/lib/components/console/entitlement-gate.component.js +115 -0
  36. package/src/lib/components/console/entitlement-gate.component.js.map +1 -0
  37. package/src/lib/components/console/gift-cards-card.component.d.ts +29 -0
  38. package/src/lib/components/console/gift-cards-card.component.js +379 -0
  39. package/src/lib/components/console/gift-cards-card.component.js.map +1 -0
  40. package/src/lib/components/console/host-coupons-card.component.d.ts +14 -0
  41. package/src/lib/components/console/host-coupons-card.component.js +252 -0
  42. package/src/lib/components/console/host-coupons-card.component.js.map +1 -0
  43. package/src/lib/components/console/host-orders-card.component.d.ts +13 -0
  44. package/src/lib/components/console/host-orders-card.component.js +861 -0
  45. package/src/lib/components/console/host-orders-card.component.js.map +1 -0
  46. package/src/lib/components/console/locations-card.component.d.ts +14 -0
  47. package/src/lib/components/console/locations-card.component.js +256 -0
  48. package/src/lib/components/console/locations-card.component.js.map +1 -0
  49. package/src/lib/components/console/member-posts-card.component.d.ts +8 -0
  50. package/src/lib/components/console/member-posts-card.component.js +283 -0
  51. package/src/lib/components/console/member-posts-card.component.js.map +1 -0
  52. package/src/lib/components/console/newest-site-users-card.component.d.ts +36 -0
  53. package/src/lib/components/console/newest-site-users-card.component.js +126 -0
  54. package/src/lib/components/console/newest-site-users-card.component.js.map +1 -0
  55. package/src/lib/components/console/order-detail-dialog.component.d.ts +28 -0
  56. package/src/lib/components/console/order-detail-dialog.component.js +976 -0
  57. package/src/lib/components/console/order-detail-dialog.component.js.map +1 -0
  58. package/src/lib/components/console/paid-media.d.ts +127 -0
  59. package/src/lib/components/console/paid-media.js +397 -0
  60. package/src/lib/components/console/paid-media.js.map +1 -0
  61. package/src/lib/components/console/payments-settings-card.component.d.ts +13 -0
  62. package/src/lib/components/console/payments-settings-card.component.js +295 -0
  63. package/src/lib/components/console/payments-settings-card.component.js.map +1 -0
  64. package/src/lib/components/console/pos-page.component.d.ts +13 -0
  65. package/src/lib/components/console/pos-page.component.js +916 -0
  66. package/src/lib/components/console/pos-page.component.js.map +1 -0
  67. package/src/lib/components/console/product-editor-dialog.component.d.ts +32 -0
  68. package/src/lib/components/console/product-editor-dialog.component.js +1374 -0
  69. package/src/lib/components/console/product-editor-dialog.component.js.map +1 -0
  70. package/src/lib/components/console/products-hub-card.component.d.ts +16 -0
  71. package/src/lib/components/console/products-hub-card.component.js +1280 -0
  72. package/src/lib/components/console/products-hub-card.component.js.map +1 -0
  73. package/src/lib/components/console/products-hub-zone.component.d.ts +50 -0
  74. package/src/lib/components/console/products-hub-zone.component.js +200 -0
  75. package/src/lib/components/console/products-hub-zone.component.js.map +1 -0
  76. package/src/lib/components/console/recovery-queue-card.component.d.ts +39 -0
  77. package/src/lib/components/console/recovery-queue-card.component.js +262 -0
  78. package/src/lib/components/console/recovery-queue-card.component.js.map +1 -0
  79. package/src/lib/components/console/registers-card.component.d.ts +21 -0
  80. package/src/lib/components/console/registers-card.component.js +296 -0
  81. package/src/lib/components/console/registers-card.component.js.map +1 -0
  82. package/src/lib/components/console/reservations-card.component.d.ts +14 -0
  83. package/src/lib/components/console/reservations-card.component.js +650 -0
  84. package/src/lib/components/console/reservations-card.component.js.map +1 -0
  85. package/src/lib/components/console/reviews-moderation-card.component.d.ts +8 -0
  86. package/src/lib/components/console/reviews-moderation-card.component.js +235 -0
  87. package/src/lib/components/console/reviews-moderation-card.component.js.map +1 -0
  88. package/src/lib/components/console/shipping-settings-card.component.d.ts +38 -0
  89. package/src/lib/components/console/shipping-settings-card.component.js +560 -0
  90. package/src/lib/components/console/shipping-settings-card.component.js.map +1 -0
  91. package/src/lib/components/console/stock-movements-card.component.d.ts +31 -0
  92. package/src/lib/components/console/stock-movements-card.component.js +333 -0
  93. package/src/lib/components/console/stock-movements-card.component.js.map +1 -0
  94. package/src/lib/components/console/store-settings-card.component.d.ts +14 -0
  95. package/src/lib/components/console/store-settings-card.component.js +300 -0
  96. package/src/lib/components/console/store-settings-card.component.js.map +1 -0
  97. package/src/lib/components/console/storefront-tax-summary-card.component.d.ts +73 -0
  98. package/src/lib/components/console/storefront-tax-summary-card.component.js +408 -0
  99. package/src/lib/components/console/storefront-tax-summary-card.component.js.map +1 -0
  100. package/src/lib/components/console/suppliers-card.component.d.ts +8 -0
  101. package/src/lib/components/console/suppliers-card.component.js +328 -0
  102. package/src/lib/components/console/suppliers-card.component.js.map +1 -0
  103. package/src/lib/components/console/tax-settings-card.component.d.ts +14 -0
  104. package/src/lib/components/console/tax-settings-card.component.js +473 -0
  105. package/src/lib/components/console/tax-settings-card.component.js.map +1 -0
  106. package/src/lib/components/gate.d.ts +39 -0
  107. package/src/lib/components/gate.js +202 -0
  108. package/src/lib/components/gate.js.map +1 -0
  109. package/src/lib/components/gated-video.d.ts +40 -0
  110. package/src/lib/components/gated-video.js +366 -0
  111. package/src/lib/components/gated-video.js.map +1 -0
  112. package/src/lib/components/member-feed.d.ts +32 -0
  113. package/src/lib/components/member-feed.js +198 -0
  114. package/src/lib/components/member-feed.js.map +1 -0
  115. package/src/lib/components/member-recovery.d.ts +35 -0
  116. package/src/lib/components/member-recovery.js +313 -0
  117. package/src/lib/components/member-recovery.js.map +1 -0
  118. package/src/lib/components/member-signin.d.ts +35 -0
  119. package/src/lib/components/member-signin.js +257 -0
  120. package/src/lib/components/member-signin.js.map +1 -0
  121. package/src/lib/components/member-signup.d.ts +34 -0
  122. package/src/lib/components/member-signup.js +287 -0
  123. package/src/lib/components/member-signup.js.map +1 -0
  124. package/src/lib/components/newsletter-signup.d.ts +39 -0
  125. package/src/lib/components/newsletter-signup.js +229 -0
  126. package/src/lib/components/newsletter-signup.js.map +1 -0
  127. package/src/lib/components/product-detail.d.ts +38 -0
  128. package/src/lib/components/product-detail.js +1022 -0
  129. package/src/lib/components/product-detail.js.map +1 -0
  130. package/src/lib/components/product-grid.d.ts +67 -0
  131. package/src/lib/components/product-grid.js +909 -0
  132. package/src/lib/components/product-grid.js.map +1 -0
  133. package/src/lib/components/product-reviews.d.ts +32 -0
  134. package/src/lib/components/product-reviews.js +349 -0
  135. package/src/lib/components/product-reviews.js.map +1 -0
  136. package/src/lib/components/related-products.d.ts +33 -0
  137. package/src/lib/components/related-products.js +232 -0
  138. package/src/lib/components/related-products.js.map +1 -0
  139. package/src/lib/components/reservation-widget.d.ts +33 -0
  140. package/src/lib/components/reservation-widget.js +418 -0
  141. package/src/lib/components/reservation-widget.js.map +1 -0
  142. package/src/lib/components/storefront-payment-element-fallback.d.ts +18 -0
  143. package/src/lib/components/storefront-payment-element-fallback.js +51 -0
  144. package/src/lib/components/storefront-payment-element-fallback.js.map +1 -0
  145. package/src/lib/components/storefront-payment-element.d.ts +78 -0
  146. package/src/lib/components/storefront-payment-element.js +156 -0
  147. package/src/lib/components/storefront-payment-element.js.map +1 -0
  148. package/src/lib/components/wishlist.d.ts +46 -0
  149. package/src/lib/components/wishlist.js +304 -0
  150. package/src/lib/components/wishlist.js.map +1 -0
  151. package/src/lib/constants/bundle-common.d.ts +18 -0
  152. package/src/lib/constants/bundle-common.js +18 -0
  153. package/src/lib/constants/bundle-common.js.map +1 -0
  154. package/src/lib/constants/product-filters.d.ts +35 -0
  155. package/src/lib/constants/product-filters.js +109 -0
  156. package/src/lib/constants/product-filters.js.map +1 -0
  157. package/src/lib/model/commerce-cart.d.ts +52 -0
  158. package/src/lib/model/commerce-cart.js +102 -0
  159. package/src/lib/model/commerce-cart.js.map +1 -0
  160. package/src/lib/model/commerce-connect-transfer.d.ts +243 -0
  161. package/src/lib/model/commerce-connect-transfer.js +231 -0
  162. package/src/lib/model/commerce-connect-transfer.js.map +1 -0
  163. package/src/lib/model/commerce-discounts.d.ts +164 -0
  164. package/src/lib/model/commerce-discounts.js +231 -0
  165. package/src/lib/model/commerce-discounts.js.map +1 -0
  166. package/src/lib/model/commerce-dispute.d.ts +124 -0
  167. package/src/lib/model/commerce-dispute.js +225 -0
  168. package/src/lib/model/commerce-dispute.js.map +1 -0
  169. package/src/lib/model/commerce-gift-cards.d.ts +107 -0
  170. package/src/lib/model/commerce-gift-cards.js +121 -0
  171. package/src/lib/model/commerce-gift-cards.js.map +1 -0
  172. package/src/lib/model/commerce-io.d.ts +36 -0
  173. package/src/lib/model/commerce-io.js +245 -0
  174. package/src/lib/model/commerce-io.js.map +1 -0
  175. package/src/lib/model/commerce-orders.d.ts +1040 -0
  176. package/src/lib/model/commerce-orders.js +1022 -0
  177. package/src/lib/model/commerce-orders.js.map +1 -0
  178. package/src/lib/model/commerce-promotions.d.ts +188 -0
  179. package/src/lib/model/commerce-promotions.js +199 -0
  180. package/src/lib/model/commerce-promotions.js.map +1 -0
  181. package/src/lib/model/commerce-reservations.d.ts +175 -0
  182. package/src/lib/model/commerce-reservations.js +157 -0
  183. package/src/lib/model/commerce-reservations.js.map +1 -0
  184. package/src/lib/model/commerce-shipping.d.ts +316 -0
  185. package/src/lib/model/commerce-shipping.js +484 -0
  186. package/src/lib/model/commerce-shipping.js.map +1 -0
  187. package/src/lib/model/commerce-stock-holds.d.ts +199 -0
  188. package/src/lib/model/commerce-stock-holds.js +190 -0
  189. package/src/lib/model/commerce-stock-holds.js.map +1 -0
  190. package/src/lib/model/commerce-subscription-status.d.ts +67 -0
  191. package/src/lib/model/commerce-subscription-status.js +76 -0
  192. package/src/lib/model/commerce-subscription-status.js.map +1 -0
  193. package/src/lib/model/commerce-tax-decision.d.ts +222 -0
  194. package/src/lib/model/commerce-tax-decision.js +165 -0
  195. package/src/lib/model/commerce-tax-decision.js.map +1 -0
  196. package/src/lib/model/commerce-tax.d.ts +176 -0
  197. package/src/lib/model/commerce-tax.js +92 -0
  198. package/src/lib/model/commerce-tax.js.map +1 -0
  199. package/src/lib/model/commerce.d.ts +551 -0
  200. package/src/lib/model/commerce.js +739 -0
  201. package/src/lib/model/commerce.js.map +1 -0
  202. package/src/lib/model/index.d.ts +40 -0
  203. package/src/lib/model/index.js +40 -0
  204. package/src/lib/model/index.js.map +1 -0
  205. package/src/lib/model/order-figures.d.ts +48 -0
  206. package/src/lib/model/order-figures.js +74 -0
  207. package/src/lib/model/order-figures.js.map +1 -0
  208. package/src/lib/model/plugin-permissions.d.ts +23 -0
  209. package/src/lib/model/plugin-permissions.js +34 -0
  210. package/src/lib/model/plugin-permissions.js.map +1 -0
  211. package/src/lib/model/purchase-analytics.d.ts +186 -0
  212. package/src/lib/model/purchase-analytics.js +216 -0
  213. package/src/lib/model/purchase-analytics.js.map +1 -0
  214. package/src/lib/plugin-config.d.ts +62 -0
  215. package/src/lib/plugin-config.js +78 -0
  216. package/src/lib/plugin-config.js.map +1 -0
  217. package/src/lib/plugin.d.ts +28 -0
  218. package/src/lib/plugin.js +147 -0
  219. package/src/lib/plugin.js.map +1 -0
  220. package/src/lib/server/billing-webhook.d.ts +26 -0
  221. package/src/lib/server/billing-webhook.js +4011 -0
  222. package/src/lib/server/billing-webhook.js.map +1 -0
  223. package/src/lib/server/cancel-order.d.ts +87 -0
  224. package/src/lib/server/cancel-order.js +368 -0
  225. package/src/lib/server/cancel-order.js.map +1 -0
  226. package/src/lib/server/cart-checkout.d.ts +25 -0
  227. package/src/lib/server/cart-checkout.js +976 -0
  228. package/src/lib/server/cart-checkout.js.map +1 -0
  229. package/src/lib/server/cart-cookie.d.ts +32 -0
  230. package/src/lib/server/cart-cookie.js +77 -0
  231. package/src/lib/server/cart-cookie.js.map +1 -0
  232. package/src/lib/server/cart.d.ts +34 -0
  233. package/src/lib/server/cart.js +181 -0
  234. package/src/lib/server/cart.js.map +1 -0
  235. package/src/lib/server/catalog.d.ts +127 -0
  236. package/src/lib/server/catalog.js +277 -0
  237. package/src/lib/server/catalog.js.map +1 -0
  238. package/src/lib/server/checkout.d.ts +36 -0
  239. package/src/lib/server/checkout.js +915 -0
  240. package/src/lib/server/checkout.js.map +1 -0
  241. package/src/lib/server/connect.d.ts +26 -0
  242. package/src/lib/server/connect.js +238 -0
  243. package/src/lib/server/connect.js.map +1 -0
  244. package/src/lib/server/contact-refund.d.ts +117 -0
  245. package/src/lib/server/contact-refund.js +196 -0
  246. package/src/lib/server/contact-refund.js.map +1 -0
  247. package/src/lib/server/download.d.ts +39 -0
  248. package/src/lib/server/download.js +206 -0
  249. package/src/lib/server/download.js.map +1 -0
  250. package/src/lib/server/draft-order.d.ts +26 -0
  251. package/src/lib/server/draft-order.js +706 -0
  252. package/src/lib/server/draft-order.js.map +1 -0
  253. package/src/lib/server/feed.d.ts +24 -0
  254. package/src/lib/server/feed.js +59 -0
  255. package/src/lib/server/feed.js.map +1 -0
  256. package/src/lib/server/fulfill-order.d.ts +97 -0
  257. package/src/lib/server/fulfill-order.js +235 -0
  258. package/src/lib/server/fulfill-order.js.map +1 -0
  259. package/src/lib/server/gate.d.ts +36 -0
  260. package/src/lib/server/gate.js +112 -0
  261. package/src/lib/server/gate.js.map +1 -0
  262. package/src/lib/server/gift-cards.d.ts +42 -0
  263. package/src/lib/server/gift-cards.js +219 -0
  264. package/src/lib/server/gift-cards.js.map +1 -0
  265. package/src/lib/server/low-stock.d.ts +49 -0
  266. package/src/lib/server/low-stock.js +60 -0
  267. package/src/lib/server/low-stock.js.map +1 -0
  268. package/src/lib/server/manual-tax-rate.d.ts +82 -0
  269. package/src/lib/server/manual-tax-rate.js +113 -0
  270. package/src/lib/server/manual-tax-rate.js.map +1 -0
  271. package/src/lib/server/member-feed.d.ts +24 -0
  272. package/src/lib/server/member-feed.js +72 -0
  273. package/src/lib/server/member-feed.js.map +1 -0
  274. package/src/lib/server/member-name-search.d.ts +37 -0
  275. package/src/lib/server/member-name-search.js +42 -0
  276. package/src/lib/server/member-name-search.js.map +1 -0
  277. package/src/lib/server/member-post.d.ts +23 -0
  278. package/src/lib/server/member-post.js +166 -0
  279. package/src/lib/server/member-post.js.map +1 -0
  280. package/src/lib/server/membership-account.d.ts +37 -0
  281. package/src/lib/server/membership-account.js +148 -0
  282. package/src/lib/server/membership-account.js.map +1 -0
  283. package/src/lib/server/membership-admin-password.d.ts +33 -0
  284. package/src/lib/server/membership-admin-password.js +202 -0
  285. package/src/lib/server/membership-admin-password.js.map +1 -0
  286. package/src/lib/server/membership-content.d.ts +23 -0
  287. package/src/lib/server/membership-content.js +105 -0
  288. package/src/lib/server/membership-content.js.map +1 -0
  289. package/src/lib/server/membership-login.d.ts +19 -0
  290. package/src/lib/server/membership-login.js +137 -0
  291. package/src/lib/server/membership-login.js.map +1 -0
  292. package/src/lib/server/membership-logout.d.ts +19 -0
  293. package/src/lib/server/membership-logout.js +35 -0
  294. package/src/lib/server/membership-logout.js.map +1 -0
  295. package/src/lib/server/membership-recover.d.ts +60 -0
  296. package/src/lib/server/membership-recover.js +244 -0
  297. package/src/lib/server/membership-recover.js.map +1 -0
  298. package/src/lib/server/membership-register.d.ts +22 -0
  299. package/src/lib/server/membership-register.js +241 -0
  300. package/src/lib/server/membership-register.js.map +1 -0
  301. package/src/lib/server/membership-reset.d.ts +26 -0
  302. package/src/lib/server/membership-reset.js +88 -0
  303. package/src/lib/server/membership-reset.js.map +1 -0
  304. package/src/lib/server/membership-wishlist.d.ts +23 -0
  305. package/src/lib/server/membership-wishlist.js +89 -0
  306. package/src/lib/server/membership-wishlist.js.map +1 -0
  307. package/src/lib/server/membership.d.ts +96 -0
  308. package/src/lib/server/membership.js +222 -0
  309. package/src/lib/server/membership.js.map +1 -0
  310. package/src/lib/server/native-checkout.d.ts +170 -0
  311. package/src/lib/server/native-checkout.js +193 -0
  312. package/src/lib/server/native-checkout.js.map +1 -0
  313. package/src/lib/server/newsletter.d.ts +23 -0
  314. package/src/lib/server/newsletter.js +323 -0
  315. package/src/lib/server/newsletter.js.map +1 -0
  316. package/src/lib/server/notify-restock.d.ts +22 -0
  317. package/src/lib/server/notify-restock.js +84 -0
  318. package/src/lib/server/notify-restock.js.map +1 -0
  319. package/src/lib/server/order-analytics.d.ts +134 -0
  320. package/src/lib/server/order-analytics.js +263 -0
  321. package/src/lib/server/order-analytics.js.map +1 -0
  322. package/src/lib/server/order-figures.d.ts +33 -0
  323. package/src/lib/server/order-figures.js +220 -0
  324. package/src/lib/server/order-figures.js.map +1 -0
  325. package/src/lib/server/paid-media-delivery.d.ts +173 -0
  326. package/src/lib/server/paid-media-delivery.js +212 -0
  327. package/src/lib/server/paid-media-delivery.js.map +1 -0
  328. package/src/lib/server/pos-order.d.ts +54 -0
  329. package/src/lib/server/pos-order.js +1137 -0
  330. package/src/lib/server/pos-order.js.map +1 -0
  331. package/src/lib/server/process-abandoned.d.ts +54 -0
  332. package/src/lib/server/process-abandoned.js +222 -0
  333. package/src/lib/server/process-abandoned.js.map +1 -0
  334. package/src/lib/server/process-restock.d.ts +42 -0
  335. package/src/lib/server/process-restock.js +219 -0
  336. package/src/lib/server/process-restock.js.map +1 -0
  337. package/src/lib/server/product-card.d.ts +29 -0
  338. package/src/lib/server/product-card.js +54 -0
  339. package/src/lib/server/product-card.js.map +1 -0
  340. package/src/lib/server/product.d.ts +70 -0
  341. package/src/lib/server/product.js +105 -0
  342. package/src/lib/server/product.js.map +1 -0
  343. package/src/lib/server/promotion-hold.d.ts +144 -0
  344. package/src/lib/server/promotion-hold.js +174 -0
  345. package/src/lib/server/promotion-hold.js.map +1 -0
  346. package/src/lib/server/reconcile-stock.d.ts +106 -0
  347. package/src/lib/server/reconcile-stock.js +349 -0
  348. package/src/lib/server/reconcile-stock.js.map +1 -0
  349. package/src/lib/server/refund.d.ts +45 -0
  350. package/src/lib/server/refund.js +607 -0
  351. package/src/lib/server/refund.js.map +1 -0
  352. package/src/lib/server/related.d.ts +24 -0
  353. package/src/lib/server/related.js +104 -0
  354. package/src/lib/server/related.js.map +1 -0
  355. package/src/lib/server/reservation-availability.d.ts +23 -0
  356. package/src/lib/server/reservation-availability.js +111 -0
  357. package/src/lib/server/reservation-availability.js.map +1 -0
  358. package/src/lib/server/reserve-stock.d.ts +156 -0
  359. package/src/lib/server/reserve-stock.js +146 -0
  360. package/src/lib/server/reserve-stock.js.map +1 -0
  361. package/src/lib/server/reserve.d.ts +25 -0
  362. package/src/lib/server/reserve.js +426 -0
  363. package/src/lib/server/reserve.js.map +1 -0
  364. package/src/lib/server/restock-flag.d.ts +202 -0
  365. package/src/lib/server/restock-flag.js +449 -0
  366. package/src/lib/server/restock-flag.js.map +1 -0
  367. package/src/lib/server/reviews.d.ts +51 -0
  368. package/src/lib/server/reviews.js +132 -0
  369. package/src/lib/server/reviews.js.map +1 -0
  370. package/src/lib/server/site-page-enricher.d.ts +42 -0
  371. package/src/lib/server/site-page-enricher.js +149 -0
  372. package/src/lib/server/site-page-enricher.js.map +1 -0
  373. package/src/lib/server/site-page-resolver.d.ts +26 -0
  374. package/src/lib/server/site-page-resolver.js +223 -0
  375. package/src/lib/server/site-page-resolver.js.map +1 -0
  376. package/src/lib/server/stock-hold.d.ts +127 -0
  377. package/src/lib/server/stock-hold.js +258 -0
  378. package/src/lib/server/stock-hold.js.map +1 -0
  379. package/src/lib/server/storefront-tax-record.d.ts +22 -0
  380. package/src/lib/server/storefront-tax-record.js +218 -0
  381. package/src/lib/server/storefront-tax-record.js.map +1 -0
  382. package/src/lib/server/storefront-tax.d.ts +197 -0
  383. package/src/lib/server/storefront-tax.js +245 -0
  384. package/src/lib/server/storefront-tax.js.map +1 -0
  385. package/src/lib/server/stream.d.ts +25 -0
  386. package/src/lib/server/stream.js +191 -0
  387. package/src/lib/server/stream.js.map +1 -0
  388. package/src/lib/server/subscription-portal.d.ts +24 -0
  389. package/src/lib/server/subscription-portal.js +91 -0
  390. package/src/lib/server/subscription-portal.js.map +1 -0
  391. package/src/lib/server/supplier-outbox.d.ts +190 -0
  392. package/src/lib/server/supplier-outbox.js +342 -0
  393. package/src/lib/server/supplier-outbox.js.map +1 -0
  394. package/src/lib/server/supplier-update.d.ts +23 -0
  395. package/src/lib/server/supplier-update.js +289 -0
  396. package/src/lib/server/supplier-update.js.map +1 -0
  397. package/src/lib/server/tax-profile.d.ts +29 -0
  398. package/src/lib/server/tax-profile.js +40 -0
  399. package/src/lib/server/tax-profile.js.map +1 -0
  400. package/src/lib/server.d.ts +32 -0
  401. package/src/lib/server.js +311 -0
  402. package/src/lib/server.js.map +1 -0
  403. package/src/lib/site.d.ts +27 -0
  404. package/src/lib/site.js +134 -0
  405. package/src/lib/site.js.map +1 -0
  406. package/src/lib/utils/escape-html.d.ts +41 -0
  407. package/src/lib/utils/escape-html.js +41 -0
  408. package/src/lib/utils/escape-html.js.map +1 -0
  409. package/src/lib/utils/generate-preset-id.d.ts +19 -0
  410. package/src/lib/utils/generate-preset-id.js +25 -0
  411. package/src/lib/utils/generate-preset-id.js.map +1 -0
  412. package/src/lib/utils/member-continue.d.ts +45 -0
  413. package/src/lib/utils/member-continue.js +49 -0
  414. package/src/lib/utils/member-continue.js.map +1 -0
  415. package/src/lib/utils/use-storefront-purchase-event.d.ts +60 -0
  416. package/src/lib/utils/use-storefront-purchase-event.js +142 -0
  417. package/src/lib/utils/use-storefront-purchase-event.js.map +1 -0
@@ -0,0 +1,202 @@
1
+ import { _ as _extends } from "@swc/helpers/_/_extends";
2
+ import { _ as _object_without_properties_loose } from "@swc/helpers/_/_object_without_properties_loose";
3
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
4
+ /**
5
+ * @license
6
+ * Copyright 2026 Aglyn LLC
7
+ *
8
+ * Licensed under the Apache License, Version 2.0 (the "License");
9
+ * you may not use this file except in compliance with the License.
10
+ * You may obtain a copy of the License at
11
+ *
12
+ * http://www.apache.org/licenses/LICENSE-2.0
13
+ *
14
+ * Unless required by applicable law or agreed to in writing, software
15
+ * distributed under the License is distributed on an "AS IS" BASIS,
16
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
17
+ * See the License for the specific language governing permissions and
18
+ * limitations under the License.
19
+ */ import * as Aglyn from "@aglyn/aglyn";
20
+ import { mdiLockOutline } from "@aglyn/shared-data-mdi";
21
+ import Box from "@mui/material/Box";
22
+ import Button from "@mui/material/Button";
23
+ import Typography from "@mui/material/Typography";
24
+ import { forwardRef, useEffect, useState } from "react";
25
+ import { BUNDLE_ID } from "../constants/bundle-common.js";
26
+ import { generatePresetId } from "../utils/generate-preset-id.js";
27
+ // Component ids are persisted in screen documents; never rename.
28
+ export const ID = 'gate';
29
+ /**
30
+ * Content gate (AGL-309): renders children only for entitled members
31
+ * (purchase or live subscription, checked by the server-enforced gate
32
+ * API). Non-members see the teaser + CTA. Layout gating only — media
33
+ * that must stay secret should use the gated video block (AGL-315) or
34
+ * download links (AGL-302), which enforce on the server end-to-end.
35
+ */ const Gate = /*#__PURE__*/ forwardRef((props, ref)=>{
36
+ const { productId, teaserText, ctaLabel, ctaHref, children } = props, rest = _object_without_properties_loose(props, [
37
+ "productId",
38
+ "teaserText",
39
+ "ctaLabel",
40
+ "ctaHref",
41
+ "children"
42
+ ]);
43
+ // Node styles ride the renderer-merged sx; recompose (stack.ts pattern).
44
+ const nodeSx = Array.isArray(props['sx']) ? props['sx'] : [
45
+ props['sx']
46
+ ];
47
+ const { hostId } = Aglyn.useSite();
48
+ const [state, setState] = useState('checking');
49
+ useEffect(()=>{
50
+ if (!hostId) return;
51
+ let active = true;
52
+ void fetch(`/api/commerce/gate?hostId=${encodeURIComponent(hostId)}` + `&productId=${encodeURIComponent(productId || 'any')}`).then((response)=>response.json()).then((payload)=>{
53
+ if (!active) return;
54
+ setState((payload == null ? void 0 : payload.entitled) ? 'entitled' : (payload == null ? void 0 : payload.signedIn) ? 'blocked' : 'anonymous');
55
+ }).catch(()=>{
56
+ if (active) setState('blocked');
57
+ });
58
+ return ()=>{
59
+ active = false;
60
+ };
61
+ }, [
62
+ hostId,
63
+ productId
64
+ ]);
65
+ // Besigner canvas: children render with a members-only frame so the
66
+ // designer sees what they are building (the preview-as-member state).
67
+ if (!hostId) {
68
+ return /*#__PURE__*/ _jsxs(Box, _extends({
69
+ ref: ref
70
+ }, rest, {
71
+ sx: [
72
+ {
73
+ border: '1px dashed',
74
+ borderColor: 'primary.main',
75
+ borderRadius: 1,
76
+ p: 1
77
+ },
78
+ ...nodeSx
79
+ ],
80
+ children: [
81
+ /*#__PURE__*/ _jsx(Typography, {
82
+ variant: "caption",
83
+ color: "primary",
84
+ children: '🔒 Members only — visitors see the teaser'
85
+ }),
86
+ /*#__PURE__*/ _jsx(Box, {
87
+ children: children
88
+ })
89
+ ]
90
+ }));
91
+ }
92
+ if (state === 'checking') return /*#__PURE__*/ _jsx(Box, _extends({
93
+ ref: ref
94
+ }, rest));
95
+ if (state === 'entitled') {
96
+ return /*#__PURE__*/ _jsx(Box, _extends({
97
+ ref: ref
98
+ }, rest, {
99
+ children: children
100
+ }));
101
+ }
102
+ return /*#__PURE__*/ _jsxs(Box, _extends({
103
+ ref: ref
104
+ }, rest, {
105
+ sx: [
106
+ {
107
+ p: 4,
108
+ textAlign: 'center',
109
+ border: 1,
110
+ borderColor: 'divider',
111
+ borderRadius: 1
112
+ },
113
+ ...nodeSx
114
+ ],
115
+ children: [
116
+ /*#__PURE__*/ _jsx(Typography, {
117
+ variant: "h6",
118
+ gutterBottom: true,
119
+ children: '🔒 Members only'
120
+ }),
121
+ /*#__PURE__*/ _jsx(Typography, {
122
+ variant: "body2",
123
+ color: "text.secondary",
124
+ sx: {
125
+ mb: 2
126
+ },
127
+ children: teaserText || (state === 'anonymous' ? 'Sign in or subscribe to unlock this content.' : 'Subscribe to unlock this content.')
128
+ }),
129
+ /*#__PURE__*/ _jsx(Button, {
130
+ variant: "contained",
131
+ color: "primary",
132
+ href: ctaHref || (state === 'anonymous' ? '/account' : '/shop'),
133
+ children: ctaLabel || (state === 'anonymous' ? 'Sign in' : 'Get access')
134
+ })
135
+ ]
136
+ }));
137
+ });
138
+ Gate.displayName = 'AglynGate';
139
+ export const schema = {
140
+ $id: ID,
141
+ pluginId: BUNDLE_ID,
142
+ displayName: 'Members gate',
143
+ description: 'Shows its children only to entitled members. Everyone else sees the teaser.',
144
+ category: Aglyn.ComponentCategory.COMMERCE,
145
+ attributes: [
146
+ {
147
+ name: 'productId',
148
+ label: 'Required product id',
149
+ description: 'Members who bought or subscribe to this product get in; blank ' + 'accepts any live subscription.',
150
+ component: Aglyn.FieldComponentType.PRODUCT_SELECT
151
+ },
152
+ {
153
+ name: 'teaserText',
154
+ label: 'Teaser text',
155
+ description: 'What a signed-out or non-member visitor sees in place of the ' + 'gated content. A line that says what is behind the gate converts ' + 'better than one that only says access is denied.',
156
+ component: Aglyn.FieldComponentType.TEXT_FIELD
157
+ },
158
+ {
159
+ name: 'ctaLabel',
160
+ label: 'CTA label',
161
+ description: 'Button text for non-members.',
162
+ component: Aglyn.FieldComponentType.TEXT_FIELD
163
+ },
164
+ {
165
+ name: 'ctaHref',
166
+ label: 'CTA link',
167
+ description: 'Where the button sends non-members.',
168
+ component: Aglyn.FieldComponentType.TEXT_FIELD
169
+ }
170
+ ],
171
+ icon: {
172
+ path: mdiLockOutline.path,
173
+ sx: {
174
+ color: '#2e7d32'
175
+ }
176
+ }
177
+ };
178
+ export const presets = [
179
+ {
180
+ $id: generatePresetId(ID),
181
+ type: Aglyn.NodeType.PRESET,
182
+ displayName: 'Members gate',
183
+ pluginId: BUNDLE_ID,
184
+ description: 'Wraps content only entitled members can see',
185
+ category: Aglyn.ComponentCategory.COMMERCE,
186
+ icon: {
187
+ path: mdiLockOutline.path,
188
+ sx: {
189
+ color: '#2e7d32'
190
+ }
191
+ },
192
+ data: {
193
+ $id: null,
194
+ componentId: ID,
195
+ pluginId: BUNDLE_ID,
196
+ props: {}
197
+ }
198
+ }
199
+ ];
200
+ export default Gate;
201
+
202
+ //# sourceMappingURL=gate.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../../../../../libs/plugins/commerce/src/lib/components/gate.tsx"],"sourcesContent":["/**\n * @license\n * Copyright 2026 Aglyn LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport * as Aglyn from '@aglyn/aglyn'\nimport { mdiLockOutline } from '@aglyn/shared-data-mdi'\nimport Box from '@mui/material/Box'\nimport Button from '@mui/material/Button'\nimport Typography from '@mui/material/Typography'\nimport { forwardRef, useEffect, useState, type ReactNode } from 'react'\nimport { BUNDLE_ID } from '../constants/bundle-common'\nimport { generatePresetId } from '../utils/generate-preset-id'\n\n// Component ids are persisted in screen documents; never rename.\nexport const ID: Aglyn.ComponentId = 'gate'\n\nexport interface GateProps {\n /** Product id granting access; blank = any live subscription. */\n productId?: string\n teaserText?: string\n ctaLabel?: string\n /** Where the CTA sends non-members (product or sign-in page). */\n ctaHref?: string\n children?: ReactNode\n}\n\n/**\n * Content gate (AGL-309): renders children only for entitled members\n * (purchase or live subscription, checked by the server-enforced gate\n * API). Non-members see the teaser + CTA. Layout gating only — media\n * that must stay secret should use the gated video block (AGL-315) or\n * download links (AGL-302), which enforce on the server end-to-end.\n */\nconst Gate = forwardRef<HTMLDivElement, GateProps>((props, ref) => {\n const { productId, teaserText, ctaLabel, ctaHref, children, ...rest } = props\n // Node styles ride the renderer-merged sx; recompose (stack.ts pattern).\n const nodeSx = Array.isArray(props['sx']) ? props['sx'] : [props['sx']]\n const { hostId } = Aglyn.useSite()\n const [state, setState] = useState<\n 'checking' | 'entitled' | 'blocked' | 'anonymous'\n >('checking')\n\n useEffect(() => {\n if (!hostId) return\n let active = true\n void fetch(\n `/api/commerce/gate?hostId=${encodeURIComponent(hostId)}` +\n `&productId=${encodeURIComponent(productId || 'any')}`,\n )\n .then((response) => response.json())\n .then((payload) => {\n if (!active) return\n setState(\n payload?.entitled\n ? 'entitled'\n : payload?.signedIn\n ? 'blocked'\n : 'anonymous',\n )\n })\n .catch(() => {\n if (active) setState('blocked')\n })\n return () => {\n active = false\n }\n }, [hostId, productId])\n\n // Besigner canvas: children render with a members-only frame so the\n // designer sees what they are building (the preview-as-member state).\n if (!hostId) {\n return (\n <Box\n ref={ref}\n {...rest}\n sx={[\n {\n border: '1px dashed',\n borderColor: 'primary.main',\n borderRadius: 1,\n p: 1,\n },\n ...nodeSx,\n ]}\n >\n <Typography variant=\"caption\" color=\"primary\">\n {'🔒 Members only — visitors see the teaser'}\n </Typography>\n <Box>{children}</Box>\n </Box>\n )\n }\n if (state === 'checking') return <Box ref={ref} {...rest} />\n if (state === 'entitled') {\n return (\n <Box ref={ref} {...rest}>\n {children}\n </Box>\n )\n }\n return (\n <Box\n ref={ref}\n {...rest}\n sx={[\n {\n p: 4,\n textAlign: 'center',\n border: 1,\n borderColor: 'divider',\n borderRadius: 1,\n },\n ...nodeSx,\n ]}\n >\n <Typography variant=\"h6\" gutterBottom>\n {'🔒 Members only'}\n </Typography>\n <Typography variant=\"body2\" color=\"text.secondary\" sx={{ mb: 2 }}>\n {teaserText ||\n (state === 'anonymous'\n ? 'Sign in or subscribe to unlock this content.'\n : 'Subscribe to unlock this content.')}\n </Typography>\n <Button\n variant=\"contained\"\n color=\"primary\"\n href={ctaHref || (state === 'anonymous' ? '/account' : '/shop')}\n >\n {ctaLabel || (state === 'anonymous' ? 'Sign in' : 'Get access')}\n </Button>\n </Box>\n )\n})\nGate.displayName = 'AglynGate'\n\nexport const schema: Aglyn.ComponentSchema<GateProps> = {\n $id: ID,\n pluginId: BUNDLE_ID,\n displayName: 'Members gate',\n description:\n 'Shows its children only to entitled members. Everyone else sees the teaser.',\n category: Aglyn.ComponentCategory.COMMERCE,\n attributes: [\n {\n name: 'productId',\n label: 'Required product id',\n description:\n 'Members who bought or subscribe to this product get in; blank ' +\n 'accepts any live subscription.',\n component: Aglyn.FieldComponentType.PRODUCT_SELECT,\n },\n {\n name: 'teaserText',\n label: 'Teaser text',\n description:\n 'What a signed-out or non-member visitor sees in place of the ' +\n 'gated content. A line that says what is behind the gate converts ' +\n 'better than one that only says access is denied.',\n component: Aglyn.FieldComponentType.TEXT_FIELD,\n },\n {\n name: 'ctaLabel',\n label: 'CTA label',\n description: 'Button text for non-members.',\n component: Aglyn.FieldComponentType.TEXT_FIELD,\n },\n {\n name: 'ctaHref',\n label: 'CTA link',\n description: 'Where the button sends non-members.',\n component: Aglyn.FieldComponentType.TEXT_FIELD,\n },\n ],\n icon: { path: mdiLockOutline.path, sx: { color: '#2e7d32' } },\n}\n\nexport const presets: Aglyn.PresetSchema[] = [\n {\n $id: generatePresetId(ID),\n type: Aglyn.NodeType.PRESET,\n displayName: 'Members gate',\n pluginId: BUNDLE_ID,\n description: 'Wraps content only entitled members can see',\n category: Aglyn.ComponentCategory.COMMERCE,\n icon: { path: mdiLockOutline.path, sx: { color: '#2e7d32' } },\n data: {\n $id: null,\n componentId: ID,\n pluginId: BUNDLE_ID,\n props: {},\n },\n },\n]\n\nexport default Gate\n"],"names":["Aglyn","mdiLockOutline","Box","Button","Typography","forwardRef","useEffect","useState","BUNDLE_ID","generatePresetId","ID","Gate","props","ref","productId","teaserText","ctaLabel","ctaHref","children","rest","nodeSx","Array","isArray","hostId","useSite","state","setState","active","fetch","encodeURIComponent","then","response","json","payload","entitled","signedIn","catch","sx","border","borderColor","borderRadius","p","variant","color","textAlign","gutterBottom","mb","href","displayName","schema","$id","pluginId","description","category","ComponentCategory","COMMERCE","attributes","name","label","component","FieldComponentType","PRODUCT_SELECT","TEXT_FIELD","icon","path","presets","type","NodeType","PRESET","data","componentId"],"mappings":"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"}
@@ -0,0 +1,40 @@
1
+ /**
2
+ * @license
3
+ * Copyright 2026 Aglyn LLC
4
+ *
5
+ * Licensed under the Apache License, Version 2.0 (the "License");
6
+ * you may not use this file except in compliance with the License.
7
+ * You may obtain a copy of the License at
8
+ *
9
+ * http://www.apache.org/licenses/LICENSE-2.0
10
+ *
11
+ * Unless required by applicable law or agreed to in writing, software
12
+ * distributed under the License is distributed on an "AS IS" BASIS,
13
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14
+ * See the License for the specific language governing permissions and
15
+ * limitations under the License.
16
+ */
17
+ import * as Aglyn from '@aglyn/aglyn';
18
+ export declare const ID: Aglyn.ComponentId;
19
+ export interface GatedVideoProps {
20
+ /** Product whose gatedVideos list this plays from. */
21
+ productId?: string;
22
+ /** Index into the product's gatedVideos (default 0). */
23
+ videoIndex?: number;
24
+ lockedText?: string;
25
+ }
26
+ /**
27
+ * Gated video block (AGL-315): entitled members get a short-TTL signed
28
+ * stream URL from the server (the gate is the mint step); playback
29
+ * resumes from the last position. SiteC's training-program player.
30
+ *
31
+ * Every link behind the player expires (AGL-2814), so a long sitting outlives
32
+ * the one it started with. When a request under an expired link fails, the
33
+ * player asks the stream endpoint for a new one, which re-checks the member's
34
+ * entitlement, and resumes at the second it stopped. A member who has lost
35
+ * the entitlement gets the locked state instead.
36
+ */
37
+ declare const GatedVideo: import("react").ForwardRefExoticComponent<GatedVideoProps & import("react").RefAttributes<HTMLDivElement>>;
38
+ export declare const schema: Aglyn.ComponentSchema<GatedVideoProps>;
39
+ export declare const presets: Aglyn.PresetSchema[];
40
+ export default GatedVideo;
@@ -0,0 +1,366 @@
1
+ import { _ as _extends } from "@swc/helpers/_/_extends";
2
+ import { _ as _object_without_properties_loose } from "@swc/helpers/_/_object_without_properties_loose";
3
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
4
+ /**
5
+ * @license
6
+ * Copyright 2026 Aglyn LLC
7
+ *
8
+ * Licensed under the Apache License, Version 2.0 (the "License");
9
+ * you may not use this file except in compliance with the License.
10
+ * You may obtain a copy of the License at
11
+ *
12
+ * http://www.apache.org/licenses/LICENSE-2.0
13
+ *
14
+ * Unless required by applicable law or agreed to in writing, software
15
+ * distributed under the License is distributed on an "AS IS" BASIS,
16
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
17
+ * See the License for the specific language governing permissions and
18
+ * limitations under the License.
19
+ */ import * as Aglyn from "@aglyn/aglyn";
20
+ import { mdiPlayCircleOutline } from "@aglyn/shared-data-mdi";
21
+ import Box from "@mui/material/Box";
22
+ import Button from "@mui/material/Button";
23
+ import Typography from "@mui/material/Typography";
24
+ import { forwardRef, useCallback, useEffect, useRef, useState } from "react";
25
+ import { BUNDLE_ID } from "../constants/bundle-common.js";
26
+ import { generatePresetId } from "../utils/generate-preset-id.js";
27
+ // Component ids are persisted in screen documents; never rename.
28
+ export const ID = 'gated-video';
29
+ /**
30
+ * How many fresh links the player asks for in a row, with no playback in
31
+ * between, before it stops and asks the viewer to reload (AGL-2814).
32
+ *
33
+ * Two covers the two links that can expire under a playing video: the stream
34
+ * link itself, for a browser that re-requests the element's own `src`, and the
35
+ * signed media session behind it. A third failure with nothing played means
36
+ * the problem is not an expiry, and asking again would only loop.
37
+ */ const MAX_SILENT_RECOVERIES = 2;
38
+ /**
39
+ * Seconds of playback on a fresh link that prove it works. Past this the
40
+ * budget above resets, so an expiry hours later recovers as quietly as the
41
+ * first one did.
42
+ */ const RECOVERED_AFTER_SECONDS = 5;
43
+ /**
44
+ * The `MediaError` codes a fresh link can cure: `MEDIA_ERR_NETWORK` (2), which
45
+ * a refused byte-range request raises mid-play, and
46
+ * `MEDIA_ERR_SRC_NOT_SUPPORTED` (4), which a refused first request raises.
47
+ * An abort (1) is the page or the viewer stopping the load, and a decode error (3) is
48
+ * a broken file that no new link can fix.
49
+ */ const RECOVERABLE_MEDIA_ERRORS = new Set([
50
+ 2,
51
+ 4
52
+ ]);
53
+ /**
54
+ * Gated video block (AGL-315): entitled members get a short-TTL signed
55
+ * stream URL from the server (the gate is the mint step); playback
56
+ * resumes from the last position. SiteC's training-program player.
57
+ *
58
+ * Every link behind the player expires (AGL-2814), so a long sitting outlives
59
+ * the one it started with. When a request under an expired link fails, the
60
+ * player asks the stream endpoint for a new one, which re-checks the member's
61
+ * entitlement, and resumes at the second it stopped. A member who has lost
62
+ * the entitlement gets the locked state instead.
63
+ */ const GatedVideo = /*#__PURE__*/ forwardRef((props, ref)=>{
64
+ const { productId, videoIndex, lockedText } = props, rest = _object_without_properties_loose(props, [
65
+ "productId",
66
+ "videoIndex",
67
+ "lockedText"
68
+ ]);
69
+ // Node styles ride the renderer-merged sx; recompose (stack.ts pattern).
70
+ const nodeSx = Array.isArray(props['sx']) ? props['sx'] : [
71
+ props['sx']
72
+ ];
73
+ const { hostId } = Aglyn.useSite();
74
+ const siteFetch = Aglyn.useSiteFetch();
75
+ const [src, setSrc] = useState(null);
76
+ const [state, setState] = useState('loading');
77
+ const videoRef = useRef(null);
78
+ /**
79
+ * Where a recovery stands. A ref, not state: the media events that read
80
+ * and write it fire many times a second, and none of it is rendered.
81
+ */ const recovery = useRef({
82
+ attempts: 0,
83
+ resumeAt: 0,
84
+ resume: false,
85
+ playing: false,
86
+ playedFrom: 0
87
+ });
88
+ const resumeKey = `aglyn_video_${hostId}_${productId}_${videoIndex != null ? videoIndex : 0}`;
89
+ /** One POST to the stream endpoint: a link, or why there is none. */ const requestLink = useCallback(async ()=>{
90
+ try {
91
+ const response = await siteFetch('/api/commerce/stream', {
92
+ method: 'POST',
93
+ headers: {
94
+ 'Content-Type': 'application/json'
95
+ },
96
+ body: JSON.stringify({
97
+ hostId,
98
+ productId,
99
+ video: videoIndex != null ? videoIndex : 0
100
+ })
101
+ });
102
+ if (response.status === 401 || response.status === 403) return 'locked';
103
+ if (!response.ok) return 'failed';
104
+ const payload = await response.json();
105
+ return typeof (payload == null ? void 0 : payload.url) === 'string' && payload.url ? payload.url : 'failed';
106
+ } catch (unused) {
107
+ return 'failed';
108
+ }
109
+ }, [
110
+ hostId,
111
+ productId,
112
+ videoIndex,
113
+ siteFetch
114
+ ]);
115
+ useEffect(()=>{
116
+ if (!hostId || !productId) return;
117
+ let active = true;
118
+ recovery.current = {
119
+ attempts: 0,
120
+ resumeAt: 0,
121
+ resume: false,
122
+ playing: false,
123
+ playedFrom: 0
124
+ };
125
+ void requestLink().then((link)=>{
126
+ if (!active) return;
127
+ // Before anything has played, every refusal reads as the lock: the
128
+ // viewer's next step is to sign in or to buy.
129
+ if (link === 'locked' || link === 'failed') return setState('locked');
130
+ setSrc(link);
131
+ setState('ready');
132
+ });
133
+ return ()=>{
134
+ active = false;
135
+ };
136
+ }, [
137
+ hostId,
138
+ productId,
139
+ requestLink
140
+ ]);
141
+ const handleError = ()=>{
142
+ var _element_error;
143
+ const element = videoRef.current;
144
+ if (!element || !RECOVERABLE_MEDIA_ERRORS.has(Number((_element_error = element.error) == null ? void 0 : _element_error.code))) {
145
+ return;
146
+ }
147
+ const progress = recovery.current;
148
+ if (progress.attempts >= MAX_SILENT_RECOVERIES) {
149
+ setState('stalled');
150
+ return;
151
+ }
152
+ progress.attempts += 1;
153
+ progress.resumeAt = element.currentTime || progress.resumeAt;
154
+ progress.resume = progress.playing || !element.paused;
155
+ void requestLink().then((link)=>{
156
+ if (link === 'locked') return setState('locked');
157
+ if (link === 'failed') return setState('stalled');
158
+ setSrc(link);
159
+ });
160
+ };
161
+ const handleLoadedMetadata = ()=>{
162
+ var _window_localStorage_getItem;
163
+ const element = videoRef.current;
164
+ if (!element) return;
165
+ const progress = recovery.current;
166
+ const saved = Number((_window_localStorage_getItem = window.localStorage.getItem(resumeKey)) != null ? _window_localStorage_getItem : 0);
167
+ const target = progress.resumeAt > 0 ? progress.resumeAt : saved > 5 ? saved : 0;
168
+ if (target > 0) element.currentTime = target;
169
+ progress.playedFrom = target;
170
+ if (progress.resume) {
171
+ progress.resume = false;
172
+ try {
173
+ void Promise.resolve(element.play()).catch(()=>undefined);
174
+ } catch (unused) {
175
+ // A refused autoplay leaves the video paused at the right second,
176
+ // which is the useful half of a resume.
177
+ }
178
+ }
179
+ };
180
+ const handleTimeUpdate = ()=>{
181
+ const element = videoRef.current;
182
+ if (!element) return;
183
+ window.localStorage.setItem(resumeKey, String(Math.floor(element.currentTime)));
184
+ const progress = recovery.current;
185
+ if (progress.attempts && element.currentTime - progress.playedFrom >= RECOVERED_AFTER_SECONDS) {
186
+ progress.attempts = 0;
187
+ progress.resumeAt = 0;
188
+ }
189
+ };
190
+ if (!hostId) {
191
+ return /*#__PURE__*/ _jsx(Box, _extends({
192
+ ref: ref
193
+ }, rest, {
194
+ sx: [
195
+ {
196
+ aspectRatio: '16 / 9',
197
+ bgcolor: 'action.hover',
198
+ borderRadius: 1,
199
+ display: 'flex',
200
+ alignItems: 'center',
201
+ justifyContent: 'center',
202
+ color: 'text.secondary',
203
+ fontSize: 13,
204
+ fontFamily: 'system-ui, sans-serif'
205
+ },
206
+ ...nodeSx
207
+ ],
208
+ children: 'â–¶ Members-only video'
209
+ }));
210
+ }
211
+ if (state === 'loading') return /*#__PURE__*/ _jsx(Box, _extends({
212
+ ref: ref
213
+ }, rest));
214
+ if (state === 'stalled') {
215
+ return /*#__PURE__*/ _jsxs(Box, _extends({
216
+ ref: ref
217
+ }, rest, {
218
+ sx: [
219
+ {
220
+ aspectRatio: '16 / 9',
221
+ bgcolor: 'action.hover',
222
+ borderRadius: 1,
223
+ display: 'flex',
224
+ flexDirection: 'column',
225
+ gap: 1,
226
+ alignItems: 'center',
227
+ justifyContent: 'center',
228
+ px: 2,
229
+ textAlign: 'center'
230
+ },
231
+ ...nodeSx
232
+ ],
233
+ children: [
234
+ /*#__PURE__*/ _jsx(Typography, {
235
+ variant: "body2",
236
+ color: "text.secondary",
237
+ children: 'Playback stopped. Reload the page to keep watching.'
238
+ }),
239
+ /*#__PURE__*/ _jsx(Button, {
240
+ size: "small",
241
+ variant: "contained",
242
+ onClick: ()=>window.location.reload(),
243
+ children: 'Reload'
244
+ })
245
+ ]
246
+ }));
247
+ }
248
+ if (state === 'locked' || !src) {
249
+ return /*#__PURE__*/ _jsxs(Box, _extends({
250
+ ref: ref
251
+ }, rest, {
252
+ sx: [
253
+ {
254
+ aspectRatio: '16 / 9',
255
+ bgcolor: 'action.hover',
256
+ borderRadius: 1,
257
+ display: 'flex',
258
+ flexDirection: 'column',
259
+ gap: 1,
260
+ alignItems: 'center',
261
+ justifyContent: 'center'
262
+ },
263
+ ...nodeSx
264
+ ],
265
+ children: [
266
+ /*#__PURE__*/ _jsx(Typography, {
267
+ variant: "body2",
268
+ color: "text.secondary",
269
+ children: lockedText || '🔒 Sign in with an active subscription to watch'
270
+ }),
271
+ /*#__PURE__*/ _jsx(Button, {
272
+ size: "small",
273
+ variant: "contained",
274
+ href: "/account",
275
+ children: 'Sign in'
276
+ })
277
+ ]
278
+ }));
279
+ }
280
+ return /*#__PURE__*/ _jsx(Box, _extends({
281
+ ref: ref
282
+ }, rest, {
283
+ children: /*#__PURE__*/ _jsx("video", {
284
+ ref: videoRef,
285
+ src: src,
286
+ controls: true,
287
+ controlsList: "nodownload",
288
+ style: {
289
+ width: '100%',
290
+ borderRadius: 8
291
+ },
292
+ onLoadedMetadata: handleLoadedMetadata,
293
+ onTimeUpdate: handleTimeUpdate,
294
+ onPlay: ()=>{
295
+ recovery.current.playing = true;
296
+ },
297
+ onPause: ()=>{
298
+ recovery.current.playing = false;
299
+ },
300
+ onError: handleError
301
+ })
302
+ }));
303
+ });
304
+ GatedVideo.displayName = 'AglynGatedVideo';
305
+ export const schema = {
306
+ $id: ID,
307
+ pluginId: BUNDLE_ID,
308
+ displayName: 'Members video',
309
+ description: 'A video only entitled members can play, resuming where they left off.',
310
+ category: Aglyn.ComponentCategory.COMMERCE,
311
+ icon: {
312
+ path: mdiPlayCircleOutline.path,
313
+ sx: {
314
+ color: '#2e7d32'
315
+ }
316
+ },
317
+ flags: {
318
+ selfClosing: Aglyn.FEATURE_FLAG.ENABLED
319
+ },
320
+ attributes: [
321
+ {
322
+ name: 'productId',
323
+ label: 'Product id',
324
+ description: 'Members entitled to this product can watch its gated videos.',
325
+ component: Aglyn.FieldComponentType.PRODUCT_SELECT
326
+ },
327
+ {
328
+ name: 'videoIndex',
329
+ label: 'Video number',
330
+ description: 'Which of the product’s videos to play (1st = 0).',
331
+ component: Aglyn.FieldComponentType.TEXT_FIELD,
332
+ type: 'number'
333
+ },
334
+ {
335
+ name: 'lockedText',
336
+ label: 'Locked text',
337
+ description: 'The message over the poster frame when the viewer cannot play ' + 'this video. The poster image still shows, so this only has to ' + 'explain the lock.',
338
+ component: Aglyn.FieldComponentType.TEXT_FIELD
339
+ }
340
+ ]
341
+ };
342
+ export const presets = [
343
+ {
344
+ $id: generatePresetId(ID),
345
+ type: Aglyn.NodeType.PRESET,
346
+ displayName: 'Members video',
347
+ pluginId: BUNDLE_ID,
348
+ description: 'Subscription-gated video with resume',
349
+ category: Aglyn.ComponentCategory.COMMERCE,
350
+ icon: {
351
+ path: mdiPlayCircleOutline.path,
352
+ sx: {
353
+ color: '#2e7d32'
354
+ }
355
+ },
356
+ data: {
357
+ $id: null,
358
+ componentId: ID,
359
+ pluginId: BUNDLE_ID,
360
+ props: {}
361
+ }
362
+ }
363
+ ];
364
+ export default GatedVideo;
365
+
366
+ //# sourceMappingURL=gated-video.js.map