@agnostack/next-shopify 1.14.1 → 1.15.0-alpha.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 (346) hide show
  1. package/CHANGELOG.md +252 -0
  2. package/README.md +9 -8
  3. package/dist/lib/handlers/api/billing.d.ts.map +1 -1
  4. package/dist/lib/handlers/api/billing.js +2 -1
  5. package/dist/lib/handlers/api/billing.js.map +1 -1
  6. package/dist/lib/handlers/api/uninstall.d.ts.map +1 -1
  7. package/dist/lib/handlers/api/uninstall.js +2 -1
  8. package/dist/lib/handlers/api/uninstall.js.map +1 -1
  9. package/dist/lib/handlers/api/verifiable/graph.d.ts.map +1 -1
  10. package/dist/lib/handlers/api/verifiable/graph.js +3 -2
  11. package/dist/lib/handlers/api/verifiable/graph.js.map +1 -1
  12. package/dist/lib/handlers/api/verifiable/proxy.d.ts.map +1 -1
  13. package/dist/lib/handlers/api/verifiable/proxy.js +3 -2
  14. package/dist/lib/handlers/api/verifiable/proxy.js.map +1 -1
  15. package/dist/lib/handlers/api/verifiable/rest.d.ts.map +1 -1
  16. package/dist/lib/handlers/api/verifiable/rest.js +3 -2
  17. package/dist/lib/handlers/api/verifiable/rest.js.map +1 -1
  18. package/dist/lib/handlers/api/verifiable/token.js +3 -2
  19. package/dist/lib/handlers/api/verifiable/token.js.map +1 -1
  20. package/dist/lib/handlers/api/webhook.d.ts.map +1 -1
  21. package/dist/lib/handlers/api/webhook.js +2 -1
  22. package/dist/lib/handlers/api/webhook.js.map +1 -1
  23. package/dist/lib/index.d.ts +2 -2
  24. package/dist/lib/index.d.ts.map +1 -1
  25. package/dist/lib/index.js +2 -4
  26. package/dist/lib/index.js.map +1 -1
  27. package/dist/lib/utils/crypto.d.ts +1 -1
  28. package/dist/lib/utils/crypto.d.ts.map +1 -1
  29. package/dist/lib/utils/index.d.ts +0 -2
  30. package/dist/lib/utils/index.js +0 -2
  31. package/dist/lib/utils/index.js.map +1 -1
  32. package/dist/lib/utils/token.d.ts +1 -1
  33. package/dist/plugins/index.d.ts +3 -0
  34. package/dist/plugins/index.d.ts.map +1 -0
  35. package/dist/plugins/index.js +19 -0
  36. package/dist/plugins/index.js.map +1 -0
  37. package/dist/plugins/types.d.ts +1 -0
  38. package/dist/plugins/types.d.ts.map +1 -0
  39. package/dist/plugins/types.js +1 -0
  40. package/dist/plugins/types.js.map +1 -0
  41. package/dist/plugins/withShopify.d.ts.map +1 -0
  42. package/dist/{lib → plugins}/withShopify.js +71 -69
  43. package/dist/plugins/withShopify.js.map +1 -0
  44. package/dist/react/hooks/useVerification.d.ts +1 -1
  45. package/dist/react/hooks/useVerification.js +17 -5
  46. package/dist/react/hooks/useVerification.js.map +1 -1
  47. package/dist/react/index.d.ts +1 -0
  48. package/dist/react/index.d.ts.map +1 -1
  49. package/dist/react/index.js +1 -0
  50. package/dist/react/index.js.map +1 -1
  51. package/dist/shared/WebCrypto.d.ts +55 -0
  52. package/dist/shared/WebCrypto.d.ts.map +1 -0
  53. package/dist/shared/WebCrypto.js +342 -0
  54. package/dist/shared/WebCrypto.js.map +1 -0
  55. package/dist/shared/display.d.ts +0 -2
  56. package/dist/shared/display.d.ts.map +1 -1
  57. package/dist/shared/display.js +2 -8
  58. package/dist/shared/display.js.map +1 -1
  59. package/dist/shared/errors.d.ts +0 -5
  60. package/dist/shared/errors.d.ts.map +1 -1
  61. package/dist/shared/errors.js +1 -23
  62. package/dist/shared/errors.js.map +1 -1
  63. package/dist/shared/index.d.ts +2 -1
  64. package/dist/shared/index.d.ts.map +1 -1
  65. package/dist/shared/index.js +7 -1
  66. package/dist/shared/index.js.map +1 -1
  67. package/dist/shared/request.d.ts +5 -0
  68. package/dist/shared/request.d.ts.map +1 -1
  69. package/dist/shared/request.js +24 -1
  70. package/dist/shared/request.js.map +1 -1
  71. package/dist/shared/shopify.d.ts +1 -6
  72. package/dist/shared/shopify.d.ts.map +1 -1
  73. package/dist/shared/shopify.js +1 -24
  74. package/dist/shared/shopify.js.map +1 -1
  75. package/dist/shared/uuid.d.ts +3 -0
  76. package/dist/shared/uuid.d.ts.map +1 -0
  77. package/dist/shared/uuid.js +10 -0
  78. package/dist/shared/uuid.js.map +1 -0
  79. package/dist/shared/verification.d.ts +12 -5
  80. package/dist/shared/verification.d.ts.map +1 -1
  81. package/dist/shared/verification.js +17 -12
  82. package/dist/shared/verification.js.map +1 -1
  83. package/dist/umd/verification/index.js +1234 -0
  84. package/dist/umd/verification/index.js.map +1 -0
  85. package/dist/umd/verification/lib/handlers/api/auth.d.ts +2 -0
  86. package/dist/umd/verification/lib/handlers/api/auth.d.ts.map +1 -0
  87. package/dist/umd/verification/lib/handlers/api/billing.d.ts +2 -0
  88. package/dist/umd/verification/lib/handlers/api/billing.d.ts.map +1 -0
  89. package/dist/umd/verification/lib/handlers/api/callback.d.ts +2 -0
  90. package/dist/umd/verification/lib/handlers/api/callback.d.ts.map +1 -0
  91. package/dist/umd/verification/lib/handlers/api/index.d.ts +10 -0
  92. package/dist/umd/verification/lib/handlers/api/index.d.ts.map +1 -0
  93. package/dist/umd/verification/lib/handlers/api/types.d.ts +1 -0
  94. package/dist/umd/verification/lib/handlers/api/types.d.ts.map +1 -0
  95. package/dist/umd/verification/lib/handlers/api/uninstall.d.ts +2 -0
  96. package/dist/umd/verification/lib/handlers/api/uninstall.d.ts.map +1 -0
  97. package/dist/umd/verification/lib/handlers/api/verifiable/appInstallation.d.ts +2 -0
  98. package/dist/umd/verification/lib/handlers/api/verifiable/appInstallation.d.ts.map +1 -0
  99. package/dist/umd/verification/lib/handlers/api/verifiable/graph.d.ts +2 -0
  100. package/dist/umd/verification/lib/handlers/api/verifiable/graph.d.ts.map +1 -0
  101. package/dist/umd/verification/lib/handlers/api/verifiable/index.d.ts +6 -0
  102. package/dist/umd/verification/lib/handlers/api/verifiable/index.d.ts.map +1 -0
  103. package/dist/umd/verification/lib/handlers/api/verifiable/proxy.d.ts +2 -0
  104. package/dist/umd/verification/lib/handlers/api/verifiable/proxy.d.ts.map +1 -0
  105. package/dist/umd/verification/lib/handlers/api/verifiable/rest.d.ts +2 -0
  106. package/dist/umd/verification/lib/handlers/api/verifiable/rest.d.ts.map +1 -0
  107. package/dist/umd/verification/lib/handlers/api/verifiable/token.d.ts +4 -0
  108. package/dist/umd/verification/lib/handlers/api/verifiable/token.d.ts.map +1 -0
  109. package/dist/umd/verification/lib/handlers/api/webhook.d.ts +2 -0
  110. package/dist/umd/verification/lib/handlers/api/webhook.d.ts.map +1 -0
  111. package/dist/umd/verification/lib/handlers/index.d.ts +3 -0
  112. package/dist/umd/verification/lib/handlers/index.d.ts.map +1 -0
  113. package/dist/umd/verification/lib/handlers/ssr/index.d.ts +3 -0
  114. package/dist/umd/verification/lib/handlers/ssr/index.d.ts.map +1 -0
  115. package/dist/umd/verification/lib/handlers/ssr/protect.d.ts +16 -0
  116. package/dist/umd/verification/lib/handlers/ssr/protect.d.ts.map +1 -0
  117. package/dist/umd/verification/lib/handlers/ssr/types.d.ts +1 -0
  118. package/dist/umd/verification/lib/handlers/ssr/types.d.ts.map +1 -0
  119. package/dist/umd/verification/lib/handlers/ssr/wrap.d.ts +9 -0
  120. package/dist/umd/verification/lib/handlers/ssr/wrap.d.ts.map +1 -0
  121. package/dist/umd/verification/lib/handlers/types.d.ts +1 -0
  122. package/dist/umd/verification/lib/handlers/types.d.ts.map +1 -0
  123. package/dist/umd/verification/lib/index.d.ts +5 -0
  124. package/dist/umd/verification/lib/index.d.ts.map +1 -0
  125. package/dist/umd/verification/lib/types.d.ts +1 -0
  126. package/dist/umd/verification/lib/types.d.ts.map +1 -0
  127. package/dist/umd/verification/lib/utils/billing.d.ts +24 -0
  128. package/dist/umd/verification/lib/utils/billing.d.ts.map +1 -0
  129. package/dist/umd/verification/lib/utils/crypto.d.ts +22 -0
  130. package/dist/umd/verification/lib/utils/crypto.d.ts.map +1 -0
  131. package/dist/umd/verification/lib/utils/firebase.d.ts +25 -0
  132. package/dist/umd/verification/lib/utils/firebase.d.ts.map +1 -0
  133. package/dist/umd/verification/lib/utils/headers.d.ts +5 -0
  134. package/dist/umd/verification/lib/utils/headers.d.ts.map +1 -0
  135. package/dist/umd/verification/lib/utils/index.d.ts +9 -0
  136. package/dist/umd/verification/lib/utils/index.d.ts.map +1 -0
  137. package/dist/umd/verification/lib/utils/session.d.ts +41 -0
  138. package/dist/umd/verification/lib/utils/session.d.ts.map +1 -0
  139. package/dist/umd/verification/lib/utils/shopify-api-js/oauth.d.ts +9 -0
  140. package/dist/umd/verification/lib/utils/shopify-api-js/oauth.d.ts.map +1 -0
  141. package/dist/umd/verification/lib/utils/shopify.d.ts +26 -0
  142. package/dist/umd/verification/lib/utils/shopify.d.ts.map +1 -0
  143. package/dist/umd/verification/lib/utils/token.d.ts +19 -0
  144. package/dist/umd/verification/lib/utils/token.d.ts.map +1 -0
  145. package/dist/umd/verification/lib/utils/types.d.ts +1 -0
  146. package/dist/umd/verification/lib/utils/types.d.ts.map +1 -0
  147. package/dist/umd/verification/plugins/index.d.ts +3 -0
  148. package/dist/umd/verification/plugins/index.d.ts.map +1 -0
  149. package/dist/umd/verification/plugins/types.d.ts +1 -0
  150. package/dist/umd/verification/plugins/types.d.ts.map +1 -0
  151. package/dist/umd/verification/plugins/withShopify.d.ts +6 -0
  152. package/dist/umd/verification/plugins/withShopify.d.ts.map +1 -0
  153. package/dist/umd/verification/react/hooks/index.d.ts +2 -0
  154. package/dist/umd/verification/react/hooks/index.d.ts.map +1 -0
  155. package/dist/umd/verification/react/hooks/useVerification.d.ts +8 -0
  156. package/dist/umd/verification/react/hooks/useVerification.d.ts.map +1 -0
  157. package/dist/umd/verification/react/index.d.ts +3 -0
  158. package/dist/umd/verification/react/index.d.ts.map +1 -0
  159. package/dist/umd/verification/react/types.d.ts +1 -0
  160. package/dist/umd/verification/react/types.d.ts.map +1 -0
  161. package/dist/umd/verification/runtime/index.d.ts +2 -0
  162. package/dist/umd/verification/runtime/index.d.ts.map +1 -0
  163. package/dist/umd/verification/runtime/types.d.ts +1 -0
  164. package/dist/umd/verification/runtime/types.d.ts.map +1 -0
  165. package/dist/umd/verification/shared/WebCrypto.d.ts +55 -0
  166. package/dist/umd/verification/shared/WebCrypto.d.ts.map +1 -0
  167. package/dist/umd/verification/shared/constants.d.ts +211 -0
  168. package/dist/umd/verification/shared/constants.d.ts.map +1 -0
  169. package/dist/umd/verification/shared/datetime.d.ts +96 -0
  170. package/dist/umd/verification/shared/datetime.d.ts.map +1 -0
  171. package/dist/umd/verification/shared/display.d.ts +100 -0
  172. package/dist/umd/verification/shared/display.d.ts.map +1 -0
  173. package/dist/umd/verification/shared/errors.d.ts +19 -0
  174. package/dist/umd/verification/shared/errors.d.ts.map +1 -0
  175. package/dist/umd/verification/shared/graph.d.ts +24 -0
  176. package/dist/umd/verification/shared/graph.d.ts.map +1 -0
  177. package/dist/umd/verification/shared/index.d.ts +12 -0
  178. package/dist/umd/verification/shared/index.d.ts.map +1 -0
  179. package/dist/umd/verification/shared/match.d.ts +6 -0
  180. package/dist/umd/verification/shared/match.d.ts.map +1 -0
  181. package/dist/umd/verification/shared/request.d.ts +16 -0
  182. package/dist/umd/verification/shared/request.d.ts.map +1 -0
  183. package/dist/umd/verification/shared/shopify.d.ts +31 -0
  184. package/dist/umd/verification/shared/shopify.d.ts.map +1 -0
  185. package/dist/umd/verification/shared/types.d.ts +1 -0
  186. package/dist/umd/verification/shared/types.d.ts.map +1 -0
  187. package/dist/umd/verification/shared/uuid.d.ts +3 -0
  188. package/dist/umd/verification/shared/uuid.d.ts.map +1 -0
  189. package/dist/umd/verification/shared/verification.d.ts +31 -0
  190. package/dist/umd/verification/shared/verification.d.ts.map +1 -0
  191. package/dist/umd/verification/verification/index.d.ts +4 -0
  192. package/dist/umd/verification/verification/index.d.ts.map +1 -0
  193. package/dist/umd/verification/verification/types.d.ts +1 -0
  194. package/dist/umd/verification/verification/types.d.ts.map +1 -0
  195. package/dist/umd/verification/verification/utils/errors.d.ts +6 -0
  196. package/dist/umd/verification/verification/utils/errors.d.ts.map +1 -0
  197. package/dist/umd/verification/verification/utils/index.d.ts +3 -0
  198. package/dist/umd/verification/verification/utils/index.d.ts.map +1 -0
  199. package/dist/umd/verification/verification/utils/rawbody.d.ts.map +1 -0
  200. package/dist/umd/verification/verification/verification.d.ts +10 -0
  201. package/dist/umd/verification/verification/verification.d.ts.map +1 -0
  202. package/dist/verification/index.d.ts +4 -0
  203. package/dist/verification/index.d.ts.map +1 -0
  204. package/dist/verification/index.js +20 -0
  205. package/dist/verification/index.js.map +1 -0
  206. package/dist/verification/types.d.ts +1 -0
  207. package/dist/verification/types.d.ts.map +1 -0
  208. package/dist/verification/types.js +1 -0
  209. package/dist/verification/types.js.map +1 -0
  210. package/dist/verification/utils/errors.d.ts +6 -0
  211. package/dist/verification/utils/errors.d.ts.map +1 -0
  212. package/dist/verification/utils/errors.js +26 -0
  213. package/dist/verification/utils/errors.js.map +1 -0
  214. package/dist/verification/utils/index.d.ts +3 -0
  215. package/dist/verification/utils/index.d.ts.map +1 -0
  216. package/dist/verification/utils/index.js +19 -0
  217. package/dist/verification/utils/index.js.map +1 -0
  218. package/dist/verification/utils/rawbody.d.ts +2 -0
  219. package/dist/verification/utils/rawbody.d.ts.map +1 -0
  220. package/dist/verification/utils/rawbody.js +60 -0
  221. package/dist/verification/utils/rawbody.js.map +1 -0
  222. package/dist/verification/verification.d.ts +10 -0
  223. package/dist/verification/verification.d.ts.map +1 -0
  224. package/dist/verification/verification.js +84 -0
  225. package/dist/verification/verification.js.map +1 -0
  226. package/node_modules/browser-monads-ts/LICENSE +21 -0
  227. package/node_modules/browser-monads-ts/README.md +46 -0
  228. package/node_modules/browser-monads-ts/dist/browser-monads-ts.cjs.js +2 -0
  229. package/node_modules/browser-monads-ts/dist/browser-monads-ts.cjs.js.map +1 -0
  230. package/node_modules/browser-monads-ts/dist/browser-monads-ts.es.js +12 -0
  231. package/node_modules/browser-monads-ts/dist/browser-monads-ts.es.js.map +1 -0
  232. package/node_modules/browser-monads-ts/dist/index.d.ts +5 -0
  233. package/node_modules/browser-monads-ts/dist/index.d.ts.map +1 -0
  234. package/node_modules/browser-monads-ts/package.json +79 -0
  235. package/node_modules/bytes/History.md +97 -0
  236. package/node_modules/bytes/LICENSE +23 -0
  237. package/node_modules/bytes/Readme.md +152 -0
  238. package/node_modules/bytes/index.js +170 -0
  239. package/node_modules/bytes/package.json +42 -0
  240. package/node_modules/depd/History.md +103 -0
  241. package/node_modules/depd/LICENSE +22 -0
  242. package/node_modules/depd/Readme.md +280 -0
  243. package/node_modules/depd/index.js +538 -0
  244. package/node_modules/depd/lib/browser/index.js +77 -0
  245. package/node_modules/depd/package.json +45 -0
  246. package/node_modules/http-errors/HISTORY.md +180 -0
  247. package/node_modules/http-errors/LICENSE +23 -0
  248. package/node_modules/http-errors/README.md +169 -0
  249. package/node_modules/http-errors/index.js +289 -0
  250. package/node_modules/http-errors/package.json +50 -0
  251. package/node_modules/iconv-lite/Changelog.md +162 -0
  252. package/node_modules/iconv-lite/LICENSE +21 -0
  253. package/node_modules/iconv-lite/README.md +156 -0
  254. package/node_modules/iconv-lite/encodings/dbcs-codec.js +555 -0
  255. package/node_modules/iconv-lite/encodings/dbcs-data.js +176 -0
  256. package/node_modules/iconv-lite/encodings/index.js +22 -0
  257. package/node_modules/iconv-lite/encodings/internal.js +188 -0
  258. package/node_modules/iconv-lite/encodings/sbcs-codec.js +72 -0
  259. package/node_modules/iconv-lite/encodings/sbcs-data-generated.js +451 -0
  260. package/node_modules/iconv-lite/encodings/sbcs-data.js +174 -0
  261. package/node_modules/iconv-lite/encodings/tables/big5-added.json +122 -0
  262. package/node_modules/iconv-lite/encodings/tables/cp936.json +264 -0
  263. package/node_modules/iconv-lite/encodings/tables/cp949.json +273 -0
  264. package/node_modules/iconv-lite/encodings/tables/cp950.json +177 -0
  265. package/node_modules/iconv-lite/encodings/tables/eucjp.json +182 -0
  266. package/node_modules/iconv-lite/encodings/tables/gb18030-ranges.json +1 -0
  267. package/node_modules/iconv-lite/encodings/tables/gbk-added.json +55 -0
  268. package/node_modules/iconv-lite/encodings/tables/shiftjis.json +125 -0
  269. package/node_modules/iconv-lite/encodings/utf16.js +177 -0
  270. package/node_modules/iconv-lite/encodings/utf7.js +290 -0
  271. package/node_modules/iconv-lite/lib/bom-handling.js +52 -0
  272. package/node_modules/iconv-lite/lib/extend-node.js +217 -0
  273. package/node_modules/iconv-lite/lib/index.d.ts +24 -0
  274. package/node_modules/iconv-lite/lib/index.js +153 -0
  275. package/node_modules/iconv-lite/lib/streams.js +121 -0
  276. package/node_modules/iconv-lite/package.json +46 -0
  277. package/node_modules/inherits/LICENSE +16 -0
  278. package/node_modules/inherits/README.md +42 -0
  279. package/node_modules/inherits/inherits.js +9 -0
  280. package/node_modules/inherits/inherits_browser.js +27 -0
  281. package/node_modules/inherits/package.json +29 -0
  282. package/node_modules/nothing-mock/LICENSE +21 -0
  283. package/node_modules/nothing-mock/README.md +266 -0
  284. package/node_modules/nothing-mock/dist/nothing-mock.es.js +2 -0
  285. package/node_modules/nothing-mock/dist/nothing-mock.es.js.map +1 -0
  286. package/node_modules/nothing-mock/dist/nothing-mock.js +2 -0
  287. package/node_modules/nothing-mock/dist/nothing-mock.js.map +1 -0
  288. package/node_modules/nothing-mock/dist/nothing-mock.modern.js +2 -0
  289. package/node_modules/nothing-mock/dist/nothing-mock.modern.js.map +1 -0
  290. package/node_modules/nothing-mock/dist/nothing-mock.umd.js +2 -0
  291. package/node_modules/nothing-mock/dist/nothing-mock.umd.js.map +1 -0
  292. package/node_modules/nothing-mock/index.d.ts +6 -0
  293. package/node_modules/nothing-mock/package.json +29 -0
  294. package/node_modules/nothing-mock/src/index.js +15 -0
  295. package/node_modules/raw-body/HISTORY.md +308 -0
  296. package/node_modules/raw-body/LICENSE +22 -0
  297. package/node_modules/raw-body/README.md +223 -0
  298. package/node_modules/raw-body/SECURITY.md +24 -0
  299. package/node_modules/raw-body/index.d.ts +87 -0
  300. package/node_modules/raw-body/index.js +336 -0
  301. package/node_modules/raw-body/package.json +49 -0
  302. package/node_modules/safer-buffer/LICENSE +21 -0
  303. package/node_modules/safer-buffer/Porting-Buffer.md +268 -0
  304. package/node_modules/safer-buffer/Readme.md +156 -0
  305. package/node_modules/safer-buffer/dangerous.js +58 -0
  306. package/node_modules/safer-buffer/package.json +34 -0
  307. package/node_modules/safer-buffer/safer.js +77 -0
  308. package/node_modules/safer-buffer/tests.js +406 -0
  309. package/node_modules/setprototypeof/LICENSE +13 -0
  310. package/node_modules/setprototypeof/README.md +31 -0
  311. package/node_modules/setprototypeof/index.d.ts +2 -0
  312. package/node_modules/setprototypeof/index.js +17 -0
  313. package/node_modules/setprototypeof/package.json +38 -0
  314. package/node_modules/setprototypeof/test/index.js +24 -0
  315. package/node_modules/statuses/HISTORY.md +82 -0
  316. package/node_modules/statuses/LICENSE +23 -0
  317. package/node_modules/statuses/README.md +136 -0
  318. package/node_modules/statuses/codes.json +65 -0
  319. package/node_modules/statuses/index.js +146 -0
  320. package/node_modules/statuses/package.json +49 -0
  321. package/node_modules/toidentifier/HISTORY.md +9 -0
  322. package/node_modules/toidentifier/LICENSE +21 -0
  323. package/node_modules/toidentifier/README.md +61 -0
  324. package/node_modules/toidentifier/index.js +32 -0
  325. package/node_modules/toidentifier/package.json +38 -0
  326. package/node_modules/unpipe/HISTORY.md +4 -0
  327. package/node_modules/unpipe/LICENSE +22 -0
  328. package/node_modules/unpipe/README.md +43 -0
  329. package/node_modules/unpipe/index.js +69 -0
  330. package/node_modules/unpipe/package.json +27 -0
  331. package/package.json +28 -9
  332. package/dist/lib/utils/rawbody.d.ts.map +0 -1
  333. package/dist/lib/utils/rawbody.js +0 -37
  334. package/dist/lib/utils/rawbody.js.map +0 -1
  335. package/dist/lib/utils/verification.d.ts +0 -8
  336. package/dist/lib/utils/verification.d.ts.map +0 -1
  337. package/dist/lib/utils/verification.js +0 -76
  338. package/dist/lib/utils/verification.js.map +0 -1
  339. package/dist/lib/withShopify.d.ts.map +0 -1
  340. package/dist/lib/withShopify.js.map +0 -1
  341. package/dist/shared/subtlecrypto.d.ts +0 -41
  342. package/dist/shared/subtlecrypto.d.ts.map +0 -1
  343. package/dist/shared/subtlecrypto.js +0 -282
  344. package/dist/shared/subtlecrypto.js.map +0 -1
  345. /package/dist/{lib → plugins}/withShopify.d.ts +0 -0
  346. /package/dist/{lib → umd/verification/verification}/utils/rawbody.d.ts +0 -0
@@ -0,0 +1,1234 @@
1
+ (function (global, factory) {
2
+ typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports) :
3
+ typeof define === 'function' && define.amd ? define(['exports'], factory) :
4
+ (global = typeof globalThis !== 'undefined' ? globalThis : global || self, factory(global["@agnostack/next-shopify/verification"] = {}));
5
+ })(this, (function (exports) { 'use strict';
6
+
7
+ const COLLECTION_ROOT = 'oauth-data';
8
+
9
+ const PAGE_ROUTE_NAMES = {
10
+ EXIT: 'pageRouteExit',
11
+ ERROR: 'pageRouteError',
12
+ SUCCESS: 'pageRouteSuccess',
13
+ };
14
+
15
+ const API_WEBHOOK_TOPICS = {
16
+ APP_UNINSTALLED: 'APP_UNINSTALLED',
17
+ APP_PURCHASES_ONE_TIME_UPDATE: 'APP_PURCHASES_ONE_TIME_UPDATE',
18
+ APP_SUBSCRIPTIONS_APPROACHING_CAPPED_AMOUNT: 'APP_SUBSCRIPTIONS_APPROACHING_CAPPED_AMOUNT',
19
+ APP_SUBSCRIPTIONS_UPDATE: 'APP_SUBSCRIPTIONS_UPDATE',
20
+ ATTRIBUTED_SESSIONS_FIRST: 'ATTRIBUTED_SESSIONS_FIRST',
21
+ ATTRIBUTED_SESSIONS_LAST: 'ATTRIBUTED_SESSIONS_LAST',
22
+ AUDIT_EVENTS_ADMIN_API_ACTIVITY: 'AUDIT_EVENTS_ADMIN_API_ACTIVITY',
23
+ BULK_OPERATIONS_FINISH: 'BULK_OPERATIONS_FINISH',
24
+ CARTS_CREATE: 'CARTS_CREATE',
25
+ CARTS_UPDATE: 'CARTS_UPDATE',
26
+ CHANNELS_DELETE: 'CHANNELS_DELETE',
27
+ CHECKOUTS_CREATE: 'CHECKOUTS_CREATE',
28
+ CHECKOUTS_DELETE: 'CHECKOUTS_DELETE',
29
+ CHECKOUTS_UPDATE: 'CHECKOUTS_UPDATE',
30
+ COLLECTIONS_CREATE: 'COLLECTIONS_CREATE',
31
+ COLLECTIONS_DELETE: 'COLLECTIONS_DELETE',
32
+ COLLECTIONS_UPDATE: 'COLLECTIONS_UPDATE',
33
+ COLLECTION_LISTINGS_ADD: 'COLLECTION_LISTINGS_ADD',
34
+ COLLECTION_LISTINGS_REMOVE: 'COLLECTION_LISTINGS_REMOVE',
35
+ COLLECTION_LISTINGS_UPDATE: 'COLLECTION_LISTINGS_UPDATE',
36
+ COLLECTION_PUBLICATIONS_CREATE: 'COLLECTION_PUBLICATIONS_CREATE',
37
+ COLLECTION_PUBLICATIONS_DELETE: 'COLLECTION_PUBLICATIONS_DELETE',
38
+ COLLECTION_PUBLICATIONS_UPDATE: 'COLLECTION_PUBLICATIONS_UPDATE',
39
+ COMPANIES_CREATE: 'COMPANIES_CREATE',
40
+ COMPANIES_DELETE: 'COMPANIES_DELETE',
41
+ COMPANIES_UPDATE: 'COMPANIES_UPDATE',
42
+ COMPANY_CONTACTS_CREATE: 'COMPANY_CONTACTS_CREATE',
43
+ COMPANY_CONTACTS_DELETE: 'COMPANY_CONTACTS_DELETE',
44
+ COMPANY_CONTACTS_UPDATE: 'COMPANY_CONTACTS_UPDATE',
45
+ COMPANY_LOCATIONS_CREATE: 'COMPANY_LOCATIONS_CREATE',
46
+ COMPANY_LOCATIONS_DELETE: 'COMPANY_LOCATIONS_DELETE',
47
+ COMPANY_LOCATIONS_UPDATE: 'COMPANY_LOCATIONS_UPDATE',
48
+ CUSTOMERS_CREATE: 'CUSTOMERS_CREATE',
49
+ CUSTOMERS_DELETE: 'CUSTOMERS_DELETE',
50
+ CUSTOMERS_DISABLE: 'CUSTOMERS_DISABLE',
51
+ CUSTOMERS_ENABLE: 'CUSTOMERS_ENABLE',
52
+ CUSTOMERS_MARKETING_CONSENT_UPDATE: 'CUSTOMERS_MARKETING_CONSENT_UPDATE',
53
+ CUSTOMERS_MERGE: 'CUSTOMERS_MERGE',
54
+ CUSTOMERS_UPDATE: 'CUSTOMERS_UPDATE',
55
+ CUSTOMER_GROUPS_CREATE: 'CUSTOMER_GROUPS_CREATE',
56
+ CUSTOMER_GROUPS_DELETE: 'CUSTOMER_GROUPS_DELETE',
57
+ CUSTOMER_GROUPS_UPDATE: 'CUSTOMER_GROUPS_UPDATE',
58
+ CUSTOMER_PAYMENT_METHODS_CREATE: 'CUSTOMER_PAYMENT_METHODS_CREATE',
59
+ CUSTOMER_PAYMENT_METHODS_REVOKE: 'CUSTOMER_PAYMENT_METHODS_REVOKE',
60
+ CUSTOMER_PAYMENT_METHODS_UPDATE: 'CUSTOMER_PAYMENT_METHODS_UPDATE',
61
+ DISPUTES_CREATE: 'DISPUTES_CREATE',
62
+ DISPUTES_UPDATE: 'DISPUTES_UPDATE',
63
+ DOMAINS_CREATE: 'DOMAINS_CREATE',
64
+ DOMAINS_DESTROY: 'DOMAINS_DESTROY',
65
+ DOMAINS_UPDATE: 'DOMAINS_UPDATE',
66
+ DRAFT_ORDERS_CREATE: 'DRAFT_ORDERS_CREATE',
67
+ DRAFT_ORDERS_DELETE: 'DRAFT_ORDERS_DELETE',
68
+ DRAFT_ORDERS_UPDATE: 'DRAFT_ORDERS_UPDATE',
69
+ FULFILLMENTS_CREATE: 'FULFILLMENTS_CREATE',
70
+ FULFILLMENTS_UPDATE: 'FULFILLMENTS_UPDATE',
71
+ FULFILLMENT_EVENTS_CREATE: 'FULFILLMENT_EVENTS_CREATE',
72
+ FULFILLMENT_EVENTS_DELETE: 'FULFILLMENT_EVENTS_DELETE',
73
+ FULFILLMENT_ORDERS_CANCELLATION_REQUEST_ACCEPTED: 'FULFILLMENT_ORDERS_CANCELLATION_REQUEST_ACCEPTED',
74
+ FULFILLMENT_ORDERS_CANCELLATION_REQUEST_REJECTED: 'FULFILLMENT_ORDERS_CANCELLATION_REQUEST_REJECTED',
75
+ FULFILLMENT_ORDERS_CANCELLATION_REQUEST_SUBMITTED: 'FULFILLMENT_ORDERS_CANCELLATION_REQUEST_SUBMITTED',
76
+ FULFILLMENT_ORDERS_CANCELLED: 'FULFILLMENT_ORDERS_CANCELLED',
77
+ FULFILLMENT_ORDERS_FULFILLMENT_REQUEST_ACCEPTED: 'FULFILLMENT_ORDERS_FULFILLMENT_REQUEST_ACCEPTED',
78
+ FULFILLMENT_ORDERS_FULFILLMENT_REQUEST_REJECTED: 'FULFILLMENT_ORDERS_FULFILLMENT_REQUEST_REJECTED',
79
+ FULFILLMENT_ORDERS_FULFILLMENT_REQUEST_SUBMITTED: 'FULFILLMENT_ORDERS_FULFILLMENT_REQUEST_SUBMITTED',
80
+ FULFILLMENT_ORDERS_FULFILLMENT_SERVICE_FAILED_TO_COMPLETE: 'FULFILLMENT_ORDERS_FULFILLMENT_SERVICE_FAILED_TO_COMPLETE',
81
+ FULFILLMENT_ORDERS_HOLD_RELEASED: 'FULFILLMENT_ORDERS_HOLD_RELEASED',
82
+ FULFILLMENT_ORDERS_LINE_ITEMS_PREPARED_FOR_LOCAL_DELIVERY: 'FULFILLMENT_ORDERS_LINE_ITEMS_PREPARED_FOR_LOCAL_DELIVERY',
83
+ FULFILLMENT_ORDERS_LINE_ITEMS_PREPARED_FOR_PICKUP: 'FULFILLMENT_ORDERS_LINE_ITEMS_PREPARED_FOR_PICKUP',
84
+ FULFILLMENT_ORDERS_MOVED: 'FULFILLMENT_ORDERS_MOVED',
85
+ FULFILLMENT_ORDERS_ORDER_ROUTING_COMPLETE: 'FULFILLMENT_ORDERS_ORDER_ROUTING_COMPLETE',
86
+ FULFILLMENT_ORDERS_PLACED_ON_HOLD: 'FULFILLMENT_ORDERS_PLACED_ON_HOLD',
87
+ FULFILLMENT_ORDERS_RESCHEDULED: 'FULFILLMENT_ORDERS_RESCHEDULED',
88
+ FULFILLMENT_ORDERS_SCHEDULED_FULFILLMENT_ORDER_READY: 'FULFILLMENT_ORDERS_SCHEDULED_FULFILLMENT_ORDER_READY',
89
+ INVENTORY_ITEMS_CREATE: 'INVENTORY_ITEMS_CREATE',
90
+ INVENTORY_ITEMS_DELETE: 'INVENTORY_ITEMS_DELETE',
91
+ INVENTORY_ITEMS_UPDATE: 'INVENTORY_ITEMS_UPDATE',
92
+ INVENTORY_LEVELS_CONNECT: 'INVENTORY_LEVELS_CONNECT',
93
+ INVENTORY_LEVELS_DISCONNECT: 'INVENTORY_LEVELS_DISCONNECT',
94
+ INVENTORY_LEVELS_UPDATE: 'INVENTORY_LEVELS_UPDATE',
95
+ LOCALES_CREATE: 'LOCALES_CREATE',
96
+ LOCALES_UPDATE: 'LOCALES_UPDATE',
97
+ LOCATIONS_ACTIVATE: 'LOCATIONS_ACTIVATE',
98
+ LOCATIONS_CREATE: 'LOCATIONS_CREATE',
99
+ LOCATIONS_DEACTIVATE: 'LOCATIONS_DEACTIVATE',
100
+ LOCATIONS_DELETE: 'LOCATIONS_DELETE',
101
+ LOCATIONS_UPDATE: 'LOCATIONS_UPDATE',
102
+ MARKETS_CREATE: 'MARKETS_CREATE',
103
+ MARKETS_DELETE: 'MARKETS_DELETE',
104
+ MARKETS_UPDATE: 'MARKETS_UPDATE',
105
+ ORDERS_CANCELLED: 'ORDERS_CANCELLED',
106
+ ORDERS_CREATE: 'ORDERS_CREATE',
107
+ ORDERS_DELETE: 'ORDERS_DELETE',
108
+ ORDERS_EDITED: 'ORDERS_EDITED',
109
+ ORDERS_FULFILLED: 'ORDERS_FULFILLED',
110
+ ORDERS_PAID: 'ORDERS_PAID',
111
+ ORDERS_PARTIALLY_FULFILLED: 'ORDERS_PARTIALLY_FULFILLED',
112
+ ORDERS_UPDATED: 'ORDERS_UPDATED',
113
+ ORDER_TRANSACTIONS_CREATE: 'ORDER_TRANSACTIONS_CREATE',
114
+ PAYMENT_SCHEDULES_DUE: 'PAYMENT_SCHEDULES_DUE',
115
+ PAYMENT_TERMS_CREATE: 'PAYMENT_TERMS_CREATE',
116
+ PAYMENT_TERMS_DELETE: 'PAYMENT_TERMS_DELETE',
117
+ PAYMENT_TERMS_UPDATE: 'PAYMENT_TERMS_UPDATE',
118
+ PRODUCTS_CREATE: 'PRODUCTS_CREATE',
119
+ PRODUCTS_DELETE: 'PRODUCTS_DELETE',
120
+ PRODUCTS_UPDATE: 'PRODUCTS_UPDATE',
121
+ PRODUCT_LISTINGS_ADD: 'PRODUCT_LISTINGS_ADD',
122
+ PRODUCT_LISTINGS_REMOVE: 'PRODUCT_LISTINGS_REMOVE',
123
+ PRODUCT_LISTINGS_UPDATE: 'PRODUCT_LISTINGS_UPDATE',
124
+ PRODUCT_PUBLICATIONS_CREATE: 'PRODUCT_PUBLICATIONS_CREATE',
125
+ PRODUCT_PUBLICATIONS_DELETE: 'PRODUCT_PUBLICATIONS_DELETE',
126
+ PRODUCT_PUBLICATIONS_UPDATE: 'PRODUCT_PUBLICATIONS_UPDATE',
127
+ PROFILES_CREATE: 'PROFILES_CREATE',
128
+ PROFILES_DELETE: 'PROFILES_DELETE',
129
+ PROFILES_UPDATE: 'PROFILES_UPDATE',
130
+ REFUNDS_CREATE: 'REFUNDS_CREATE',
131
+ RETURNS_APPROVE: 'RETURNS_APPROVE',
132
+ RETURNS_CANCEL: 'RETURNS_CANCEL',
133
+ RETURNS_CLOSE: 'RETURNS_CLOSE',
134
+ RETURNS_DECLINE: 'RETURNS_DECLINE',
135
+ RETURNS_REOPEN: 'RETURNS_REOPEN',
136
+ RETURNS_REQUEST: 'RETURNS_REQUEST',
137
+ REVERSE_DELIVERIES_ATTACH_DELIVERABLE: 'REVERSE_DELIVERIES_ATTACH_DELIVERABLE',
138
+ REVERSE_FULFILLMENT_ORDERS_DISPOSE: 'REVERSE_FULFILLMENT_ORDERS_DISPOSE',
139
+ SCHEDULED_PRODUCT_LISTINGS_ADD: 'SCHEDULED_PRODUCT_LISTINGS_ADD',
140
+ SCHEDULED_PRODUCT_LISTINGS_REMOVE: 'SCHEDULED_PRODUCT_LISTINGS_REMOVE',
141
+ SCHEDULED_PRODUCT_LISTINGS_UPDATE: 'SCHEDULED_PRODUCT_LISTINGS_UPDATE',
142
+ SEGMENTS_CREATE: 'SEGMENTS_CREATE',
143
+ SEGMENTS_DELETE: 'SEGMENTS_DELETE',
144
+ SEGMENTS_UPDATE: 'SEGMENTS_UPDATE',
145
+ SELLING_PLAN_GROUPS_CREATE: 'SELLING_PLAN_GROUPS_CREATE',
146
+ SELLING_PLAN_GROUPS_DELETE: 'SELLING_PLAN_GROUPS_DELETE',
147
+ SELLING_PLAN_GROUPS_UPDATE: 'SELLING_PLAN_GROUPS_UPDATE',
148
+ SHIPPING_ADDRESSES_CREATE: 'SHIPPING_ADDRESSES_CREATE',
149
+ SHIPPING_ADDRESSES_UPDATE: 'SHIPPING_ADDRESSES_UPDATE',
150
+ SHOP_UPDATE: 'SHOP_UPDATE',
151
+ SUBSCRIPTION_BILLING_ATTEMPTS_CHALLENGED: 'SUBSCRIPTION_BILLING_ATTEMPTS_CHALLENGED',
152
+ SUBSCRIPTION_BILLING_ATTEMPTS_FAILURE: 'SUBSCRIPTION_BILLING_ATTEMPTS_FAILURE',
153
+ SUBSCRIPTION_BILLING_ATTEMPTS_SUCCESS: 'SUBSCRIPTION_BILLING_ATTEMPTS_SUCCESS',
154
+ SUBSCRIPTION_BILLING_CYCLE_EDITS_CREATE: 'SUBSCRIPTION_BILLING_CYCLE_EDITS_CREATE',
155
+ SUBSCRIPTION_BILLING_CYCLE_EDITS_DELETE: 'SUBSCRIPTION_BILLING_CYCLE_EDITS_DELETE',
156
+ SUBSCRIPTION_BILLING_CYCLE_EDITS_UPDATE: 'SUBSCRIPTION_BILLING_CYCLE_EDITS_UPDATE',
157
+ SUBSCRIPTION_CONTRACTS_CREATE: 'SUBSCRIPTION_CONTRACTS_CREATE',
158
+ SUBSCRIPTION_CONTRACTS_UPDATE: 'SUBSCRIPTION_CONTRACTS_UPDATE',
159
+ TAX_SERVICES_CREATE: 'TAX_SERVICES_CREATE',
160
+ TAX_SERVICES_UPDATE: 'TAX_SERVICES_UPDATE',
161
+ TENDER_TRANSACTIONS_CREATE: 'TENDER_TRANSACTIONS_CREATE',
162
+ THEMES_CREATE: 'THEMES_CREATE',
163
+ THEMES_DELETE: 'THEMES_DELETE',
164
+ THEMES_PUBLISH: 'THEMES_PUBLISH',
165
+ THEMES_UPDATE: 'THEMES_UPDATE',
166
+ VARIANTS_IN_STOCK: 'VARIANTS_IN_STOCK',
167
+ VARIANTS_OUT_OF_STOCK: 'VARIANTS_OUT_OF_STOCK',
168
+ // NOTE: latest webhooks as of 6/3/23 UNSTABLE below (https://shopify.dev/docs/api/admin-graphql/unstable/enums/WebhookSubscriptionTopic)
169
+ CHECKOUTS_PAID: 'CHECKOUTS_PAID',
170
+ COMPANY_CONTACT_ROLES_ASSIGN: 'COMPANY_CONTACT_ROLES_ASSIGN',
171
+ COMPANY_CONTACT_ROLES_REVOKE: 'COMPANY_CONTACT_ROLES_REVOKE',
172
+ CUSTOMERS_EMAIL_MARKETING_CONSENT_UPDATE: 'CUSTOMERS_EMAIL_MARKETING_CONSENT_UPDATE',
173
+ FINANCE_KYC_INFORMATION_UPDATE: 'FINANCE_KYC_INFORMATION_UPDATE',
174
+ FULFILLMENT_ORDERS_HOLD_FULFILLMENT: 'FULFILLMENT_ORDERS_HOLD_FULFILLMENT',
175
+ FULFILLMENT_ORDERS_READY_FOR_PICKUP: 'FULFILLMENT_ORDERS_READY_FOR_PICKUP',
176
+ FULFILLMENT_ORDERS_READY_TO_FULFILL: 'FULFILLMENT_ORDERS_READY_TO_FULFILL',
177
+ INVENTORY_QUANTITIES_CHANGED: 'INVENTORY_QUANTITIES_CHANGED',
178
+ MARKETPLACE_PAYMENTS_CONFIGURATIONS_UPDATE: 'MARKETPLACE_PAYMENTS_CONFIGURATIONS_UPDATE',
179
+ PRODUCT_FEEDS_CREATE: 'PRODUCT_FEEDS_CREATE',
180
+ PRODUCT_FEEDS_FULL_SYNC: 'PRODUCT_FEEDS_FULL_SYNC',
181
+ PRODUCT_FEEDS_INCREMENTAL_SYNC: 'PRODUCT_FEEDS_INCREMENTAL_SYNC',
182
+ PRODUCT_FEEDS_UPDATE: 'PRODUCT_FEEDS_UPDATE',
183
+ PUBLICATIONS_DELETE: 'PUBLICATIONS_DELETE',
184
+ PURCHASE_ORDERS_CREATE: 'PURCHASE_ORDERS_CREATE',
185
+ PURCHASE_ORDERS_DELETE: 'PURCHASE_ORDERS_DELETE',
186
+ PURCHASE_ORDERS_MARK_AS_ORDERED: 'PURCHASE_ORDERS_MARK_AS_ORDERED',
187
+ PURCHASE_ORDERS_RECEIVE: 'PURCHASE_ORDERS_RECEIVE',
188
+ PURCHASE_ORDERS_UPDATE: 'PURCHASE_ORDERS_UPDATE',
189
+ SUPPLIERS_CREATE: 'SUPPLIERS_CREATE',
190
+ SUPPLIERS_DELETE: 'SUPPLIERS_DELETE',
191
+ SUPPLIERS_UPDATE: 'SUPPLIERS_UPDATE',
192
+ };
193
+
194
+ // NOTE: this is a duplicate of shopify-api-js/registry.topicForStorage
195
+ const convertEventTopic = (topic) => (
196
+ API_WEBHOOK_TOPICS[topic?.toUpperCase().replace(/\/|\./g, '_')]
197
+ );
198
+
199
+ const API_ROUTE_NAMES = {
200
+ APP_INSTALLATION: 'apiRouteAppInstallation',
201
+ SESSION_TOKEN: 'apiRouteSessionToken',
202
+ WEBHOOK_EVENT: 'apiRouteWebhook',
203
+ AUTH_ONLINE: 'apiRouteAuthOnline',
204
+ AUTH_OFFLINE: 'apiRouteAuthOffline',
205
+ AUTH_ONLINE_CALLBACK: 'apiRouteAuthOnlineCallback',
206
+ AUTH_OFFLINE_CALLBACK: 'apiRouteAuthOfflineCallback',
207
+ AUTH_ONLINE_CALLBACK_REAUTH: 'apiRouteAuthOnlineCallbackReauth',
208
+ AUTH_OFFLINE_CALLBACK_REAUTH: 'apiRouteAuthOfflineCallbackReauth',
209
+ [API_WEBHOOK_TOPICS.APP_UNINSTALLED]: 'apiRouteAppUninstalled',
210
+ [API_WEBHOOK_TOPICS.APP_PURCHASES_ONE_TIME_UPDATE]: 'apiRouteAppOneTimeBilling',
211
+ [API_WEBHOOK_TOPICS.APP_SUBSCRIPTIONS_UPDATE]: 'apiRouteAppSubscriptionBilling',
212
+ };
213
+
214
+ const BILLING_INTERVALS = {
215
+ ONE_TIME: 'ONE_TIME',
216
+ MONTHLY: 'EVERY_30_DAYS',
217
+ ANNUAL: 'ANNUAL',
218
+ };
219
+
220
+ const BILLING_EVENT_TYPES = {
221
+ ONE_TIME: 'app_purchase_one_time',
222
+ SUBSCRIPTION: 'app_subscription',
223
+ };
224
+
225
+ const AUTH_TYPES = {
226
+ OFFLINE: 'offline',
227
+ ONLINE: 'online',
228
+ };
229
+
230
+ class VerificationError extends Error {
231
+ constructor(message, _data) {
232
+ super(message);
233
+ const { code = 500, ...data } = _data ?? {};
234
+ this.code = code;
235
+ this.data = data;
236
+ this.name = 'VerificationError';
237
+ Object.setPrototypeOf(this, VerificationError.prototype);
238
+ }
239
+ }
240
+
241
+ const getChunkedRawBody = async (readable) => {
242
+ if (readable?.rawBody) {
243
+ return readable.rawBody
244
+ }
245
+
246
+ // TODO: move to req.text() after next 13.5: https://github.com/vercel/next.js/discussions/13405
247
+ try {
248
+ const getRawBody = (await Promise.resolve().then(function () { return index; })).default;
249
+ return getRawBody(readable)
250
+ } catch (error) {
251
+ console.error(`Failed to import 'raw-body', please ensure the dependency is installed`);
252
+ throw error
253
+ }
254
+ };
255
+
256
+ // TODO: explore returning mutated request object adding on req.rawBody??
257
+ const ensureRawBody = async (req) => (
258
+ getChunkedRawBody(req)
259
+ .then((_rawBody) => _rawBody.toString())
260
+ .catch((error) => {
261
+ console.error(`Error getting raw body for '${req?.url}'`, error);
262
+ throw error
263
+ })
264
+ );
265
+
266
+ /* eslint-disable no-use-before-define */
267
+
268
+ const isType = (value, type) => (
269
+ // eslint-disable-next-line eqeqeq, valid-typeof
270
+ (value != undefined) && (typeof value === type)
271
+ );
272
+
273
+ const safeTrim = (value) => {
274
+ if (isType(value, 'string')) {
275
+ // eslint-disable-next-line no-param-reassign
276
+ value = value.trim();
277
+ }
278
+
279
+ return value
280
+ };
281
+
282
+ const safeParse = (value, trim) => {
283
+ if (isType(value, 'string')) {
284
+ if (trim) {
285
+ // eslint-disable-next-line no-param-reassign
286
+ value = safeTrim(value);
287
+ }
288
+
289
+ if (value.startsWith('{') || value.startsWith('[') || value.startsWith('"')) {
290
+ // eslint-disable-next-line no-param-reassign
291
+ value = JSON.parse(value);
292
+ }
293
+ }
294
+
295
+ // TODO: should this be value ?? {}
296
+ return value
297
+ };
298
+
299
+ const ensureString = (string) => (
300
+ string ? `${string}` : ''
301
+ );
302
+
303
+ const ensureArray = (array = []) => (
304
+ // eslint-disable-next-line no-nested-ternary
305
+ !array ? [] : Array.isArray(array) ? array : [array]
306
+ );
307
+
308
+ const ensureObject = (object) => (
309
+ object ?? {}
310
+ );
311
+
312
+ // NOTE: this does not ensure !isType(string)
313
+ const objectEmpty = (object) => (
314
+ !object || !Object.keys(object).length
315
+ );
316
+
317
+ const stringNotEmpty = (stringable) => {
318
+ const string = ensureString(stringable);
319
+ return ((string.length > 0) && !['null', 'undefined'].includes(string))
320
+ };
321
+
322
+ const stringEmpty = (stringable) => (
323
+ !stringNotEmpty(stringable)
324
+ );
325
+
326
+ const compareString = (string1, string2) => {
327
+ if (stringEmpty(string1)) {
328
+ return 1
329
+ }
330
+
331
+ if (stringEmpty(string2)) {
332
+ return -1
333
+ }
334
+
335
+ return ensureString(string1).localeCompare(string2)
336
+ };
337
+
338
+ const compareEntryKeys = ([string1], [string2]) => (
339
+ compareString(string1, string2)
340
+ );
341
+
342
+ const objectToSortedString = (object, separator = '') => (
343
+ Object.entries(ensureObject(object))
344
+ .sort(compareEntryKeys)
345
+ .map(([key, value]) => `${key}=${value}`)
346
+ .join(separator)
347
+ );
348
+
349
+ const uppercase = (string) => (
350
+ ensureString(string).toUpperCase()
351
+ );
352
+
353
+ const removeLeadingSlash = (string) => (
354
+ ensureString(string).replace(/^\//, '')
355
+ );
356
+
357
+ const ensureLeadingSlash = (string) => (
358
+ `/${removeLeadingSlash(string)}`
359
+ );
360
+
361
+ const isTrue = (value, falsy) => {
362
+ const string = ensureString(value);
363
+ return ![...ensureArray(falsy), '', 'false'].includes(string)
364
+ };
365
+
366
+ const TEMP_HOSTNAME = 'xyz.com';
367
+ const REMOVABLE_KEYS = ['shop', 'host'];
368
+
369
+ const getRequestMethod = (body, _method) => {
370
+ const method = _method ?? (body ? 'POST' : 'GET');
371
+
372
+ return uppercase(method)
373
+ };
374
+
375
+ const convertToURL = (uri) => {
376
+ if (stringEmpty(uri)) {
377
+ return undefined
378
+ }
379
+
380
+ const protocolRegex = /^(https?:\/\/).+/i;
381
+
382
+ if (!protocolRegex.test(uri)) {
383
+ return new URL(`https://${TEMP_HOSTNAME}${ensureLeadingSlash(uri)}`)
384
+ }
385
+
386
+ return new URL(uri)
387
+ };
388
+
389
+ const normalizeURIParts = (uri) => {
390
+ const urlObject = convertToURL(uri);
391
+ if (!urlObject) {
392
+ return undefined
393
+ }
394
+
395
+ REMOVABLE_KEYS.forEach((key) => urlObject.searchParams.delete(key));
396
+
397
+ return {
398
+ ...(urlObject.hostname !== TEMP_HOSTNAME) && {
399
+ origin: urlObject.origin,
400
+ },
401
+ pathname: urlObject.pathname,
402
+ search: urlObject.search,
403
+ }
404
+ };
405
+
406
+ var n,r=((n=function(){return r}).toString=n.toLocaleString=n[Symbol.toPrimitive]=function(){return ""},n.valueOf=function(){return !1},new Proxy(Object.freeze(n),{get:function(n,t){return n.hasOwnProperty(t)?n[t]:r}})),u=function(n){return n===r};
407
+
408
+ let win = global.window;
409
+ let exists = (variable) => !u(variable);
410
+ let window = typeof win !== "undefined" ? win : r;
411
+
412
+ class WebCrypto {
413
+ constructor({ crypto: _crypto, util: _util } = {}) {
414
+ this._crypto = _crypto ?? {};
415
+ this._util = _util ?? {};
416
+ }
417
+
418
+ get subtle() {
419
+ return this._crypto?.subtle
420
+ }
421
+
422
+ async getWebCrypto() {
423
+ if (!this._crypto?.subtle) {
424
+ try {
425
+ this._crypto = (await import('isomorphic-webcrypto')).default;
426
+ } catch (_ignore) {
427
+ console.info('Failed to import isomorphic-webcrypto, retrying w/ node crypto');
428
+ try {
429
+ this._crypto = (await import('crypto')).default;
430
+ } catch (error) {
431
+ // eslint-disable-next-line max-len
432
+ console.error(`Failed to import node crypto, ensure 'isomorphic-webcrypto' (or node 'crypto') is installed and/or pass in implementation via 'new WebCrypto({ crypto })'`);
433
+ throw error
434
+ }
435
+ }
436
+ }
437
+
438
+ if (!this._crypto?.subtle) {
439
+ throw new Error('Invalid crypto, missing subtle')
440
+ }
441
+
442
+ return this._crypto
443
+ }
444
+
445
+ async getTextDecoder() {
446
+ if (this._util?.TextDecoder) {
447
+ return this._util.TextDecoder
448
+ }
449
+
450
+ if (exists(window) && typeof window?.TextDecoder === 'function') {
451
+ return window.TextDecoder
452
+ }
453
+
454
+ try {
455
+ const TextDecoder = (await import('util')).TextDecoder;
456
+ this._util.TextDecoder = TextDecoder;
457
+
458
+ return TextDecoder
459
+ } catch (error) {
460
+ console.error(`Failed to import 'utils.TextDecoder', ensure 'util' is available and/or pass in implementation via 'new WebCrypto({ util })'`);
461
+ throw error
462
+ }
463
+ }
464
+
465
+ async getTextEncoder() {
466
+ if (this._util?.TextEncoder) {
467
+ return this._util.TextEncoder
468
+ }
469
+
470
+ if (exists(window) && typeof window?.TextEncoder === 'function') {
471
+ return window.TextEncoder
472
+ }
473
+
474
+ try {
475
+ const TextEncoder = (await import('util')).TextEncoder;
476
+ this._util.TextEncoder = TextEncoder;
477
+
478
+ return TextEncoder
479
+ } catch (error) {
480
+ console.error(`Failed to import 'utils.TextEncoder', ensure 'util' is available and/or pass in implementation via 'new WebCrypto({ util })'`);
481
+ throw error
482
+ }
483
+ }
484
+
485
+ timingSafeEqual(value1, value2) {
486
+ if (
487
+ (value1 == undefined) ||
488
+ (value2 == undefined) ||
489
+ (value1.length !== value2.length)
490
+ ) {
491
+ return false
492
+ }
493
+
494
+ let result = 0;
495
+ // eslint-disable-next-line no-plusplus
496
+ for (let i = 0; i < value1.length; i++) {
497
+ // eslint-disable-next-line no-bitwise
498
+ result |= value1[i] ^ value2[i];
499
+ }
500
+
501
+ return (result === 0)
502
+ }
503
+
504
+ stringToHex(stringValue) {
505
+ return (
506
+ Array.from(ensureString(stringValue), (char) => (
507
+ char.charCodeAt(0).toString(16).padStart(2, '0')
508
+ )).join('')
509
+ )
510
+ }
511
+
512
+ hexToString(hexValue) {
513
+ return (
514
+ ensureArray(
515
+ ensureString(hexValue).match(/.{1,2}/g)
516
+ )
517
+ .map((byte) => String.fromCharCode(parseInt(byte, 16)))
518
+ .join('')
519
+ )
520
+ }
521
+
522
+ async arrayBufferToString(arrayBuffer) {
523
+ const uint8Array = new Uint8Array(arrayBuffer);
524
+ const Decoder = await this.getTextDecoder();
525
+ return new Decoder().decode(uint8Array)
526
+ }
527
+
528
+ arrayToArrayBuffer(array) {
529
+ return (
530
+ (ArrayBuffer.from != undefined)
531
+ ? ArrayBuffer.from(array)
532
+ : new Uint8Array(array).buffer
533
+ )
534
+ }
535
+
536
+ ensureArrayBuffer(arrayOrArrayBuffer) {
537
+ return (
538
+ (arrayOrArrayBuffer instanceof ArrayBuffer)
539
+ ? arrayOrArrayBuffer
540
+ : this.arrayToArrayBuffer(arrayOrArrayBuffer)
541
+ )
542
+ }
543
+
544
+ async generateKeyPair() {
545
+ const crypto = await this.getWebCrypto();
546
+ const keyPair = await crypto.subtle.generateKey(
547
+ {
548
+ name: 'ECDH',
549
+ namedCurve: 'P-256',
550
+ },
551
+ true,
552
+ ['deriveKey']
553
+ );
554
+
555
+ return keyPair
556
+ }
557
+
558
+ getKeyOperations(keyType) {
559
+ switch (keyType) {
560
+ case 'private':
561
+ case 'privateKey': {
562
+ return ['deriveKey']
563
+ }
564
+
565
+ case 'secret':
566
+ case 'secretKey':
567
+ case 'sharedSecret': {
568
+ return ['encrypt', 'decrypt']
569
+ }
570
+
571
+ default: {
572
+ return []
573
+ }
574
+ }
575
+ }
576
+
577
+ getKeyAlgorythm(keyType) {
578
+ switch (keyType) {
579
+ case 'derivedKey':
580
+ case 'derived':
581
+ case 'secret':
582
+ case 'secretKey':
583
+ case 'sharedSecret': {
584
+ return {
585
+ name: 'AES-GCM',
586
+ }
587
+ }
588
+
589
+ default: {
590
+ return {
591
+ name: 'ECDH',
592
+ namedCurve: 'P-256',
593
+ }
594
+ }
595
+ }
596
+ }
597
+
598
+ async generateHMAC(message, derivedKey) {
599
+ if (!message || !derivedKey) {
600
+ return undefined
601
+ }
602
+
603
+ const crypto = await this.getWebCrypto();
604
+ const Encoder = await this.getTextEncoder();
605
+
606
+ const signature = await crypto.subtle.sign(
607
+ 'HMAC',
608
+ derivedKey,
609
+ new Encoder().encode(message)
610
+ );
611
+
612
+ return this.stringToHex(
613
+ this.arrayBufferToString(signature)
614
+ )
615
+ }
616
+
617
+ async verifyHMAC(message, derivedKey, verifiableHMAC) {
618
+ const calculatedHMAC = await this.generateHMAC(message, derivedKey);
619
+
620
+ return this.timingSafeEqual(calculatedHMAC, verifiableHMAC)
621
+ }
622
+
623
+ async getStorableKey(key) {
624
+ const crypto = await this.getWebCrypto();
625
+
626
+ const exportedJWK = await crypto.subtle.exportKey('jwk', key);
627
+ return this.stringToHex(JSON.stringify(exportedJWK))
628
+ }
629
+
630
+ async restoreStorableKey(keyType, storableHex) {
631
+ if (!storableHex) {
632
+ return undefined
633
+ }
634
+ const crypto = await this.getWebCrypto();
635
+
636
+ const exportedJWK = JSON.parse(this.hexToString(storableHex) || '{}');
637
+ if (objectEmpty(exportedJWK)) {
638
+ return undefined
639
+ }
640
+
641
+ return crypto.subtle.importKey(
642
+ 'jwk',
643
+ exportedJWK,
644
+ this.getKeyAlgorythm(keyType),
645
+ true,
646
+ this.getKeyOperations(keyType)
647
+ )
648
+ }
649
+
650
+ async getStorableKeyPair(keyPair) {
651
+ const storableKeys = {};
652
+
653
+ // eslint-disable-next-line no-restricted-syntax
654
+ for (const [keyType, key] of Object.entries(keyPair)) {
655
+ // eslint-disable-next-line no-await-in-loop
656
+ storableKeys[keyType] = await this.getStorableKey(key);
657
+ }
658
+
659
+ return storableKeys
660
+ }
661
+
662
+ async restoreStorableKeyPair(keyPair) {
663
+ const restoredKeys = {};
664
+
665
+ // eslint-disable-next-line no-restricted-syntax
666
+ for (const [keyType, key] of Object.entries(keyPair)) {
667
+ // eslint-disable-next-line no-await-in-loop
668
+ restoredKeys[keyType] = await this.restoreStorableKey(keyType, key);
669
+ }
670
+
671
+ return restoredKeys
672
+ }
673
+
674
+ async deriveSharedKey({ publicKey, privateKey }) {
675
+ if (!publicKey || !privateKey) {
676
+ return undefined
677
+ }
678
+
679
+ const crypto = await this.getWebCrypto();
680
+ const derivedKey = await crypto.subtle.deriveKey(
681
+ {
682
+ name: 'ECDH',
683
+ public: publicKey,
684
+ },
685
+ privateKey,
686
+ {
687
+ name: 'AES-GCM',
688
+ length: 256,
689
+ },
690
+ true,
691
+ ['encrypt', 'decrypt']
692
+ );
693
+ return derivedKey
694
+ }
695
+
696
+ async deriveHMACKey({ publicKey, privateKey }) {
697
+ if (!publicKey || !privateKey) {
698
+ return undefined
699
+ }
700
+
701
+ const crypto = await this.getWebCrypto();
702
+ const derivedKey = await crypto.subtle.deriveKey(
703
+ {
704
+ name: 'ECDH',
705
+ public: publicKey,
706
+ },
707
+ privateKey,
708
+ {
709
+ name: 'HMAC',
710
+ hash: { name: 'SHA-256' },
711
+ length: 256, // Adjusted key length, e.g., 128 bits
712
+ },
713
+ true,
714
+ ['sign', 'verify']
715
+ );
716
+ return derivedKey
717
+ }
718
+
719
+ async getVerificationKeys({ publicKey, privateKey }) {
720
+ if (!publicKey || !privateKey) {
721
+ return {}
722
+ }
723
+
724
+ const sharedKeyPair = await this.restoreStorableKeyPair({ publicKey, privateKey });
725
+ const derivedHMACKey = await this.deriveHMACKey(sharedKeyPair);
726
+ const derivedSecretKey = await this.deriveSharedKey(sharedKeyPair);
727
+
728
+ return {
729
+ derivedSecretKey,
730
+ derivedHMACKey,
731
+ }
732
+ }
733
+
734
+ async encryptMessage(decryptedMessage, derivedKey) {
735
+ if (!decryptedMessage || !derivedKey) {
736
+ return undefined
737
+ }
738
+
739
+ const crypto = await this.getWebCrypto();
740
+ const iv = crypto.getRandomValues(new Uint8Array(12));
741
+ const Encoder = await this.getTextEncoder();
742
+ const encodedMessage = new Encoder().encode(decryptedMessage);
743
+ const ciphertext = await crypto.subtle.encrypt(
744
+ {
745
+ name: 'AES-GCM',
746
+ iv,
747
+ },
748
+ derivedKey,
749
+ encodedMessage
750
+ );
751
+
752
+ const encryptedMessage = new Uint8Array([
753
+ ...iv,
754
+ ...new Uint8Array(ciphertext)
755
+ ]);
756
+ return Array.from(encryptedMessage)
757
+ }
758
+
759
+ async decryptMessage(encryptedMessage, derivedKey) {
760
+ if (!encryptedMessage || !derivedKey) {
761
+ return undefined
762
+ }
763
+
764
+ const crypto = await this.getWebCrypto();
765
+ // NOTE: this presumed an array or arrayBuffer coming in as encryptedMessage (will fail w/ IV error if its a string)
766
+ const encryptedArrayBuffer = this.ensureArrayBuffer(encryptedMessage);
767
+ const iv = encryptedArrayBuffer.slice(0, 12);
768
+ const ciphertext = encryptedArrayBuffer.slice(12);
769
+
770
+ const decryptedArrayBuffer = await crypto.subtle.decrypt(
771
+ {
772
+ name: 'AES-GCM',
773
+ iv,
774
+ },
775
+ derivedKey,
776
+ ciphertext
777
+ );
778
+
779
+ const Decoder = await this.getTextDecoder();
780
+ const decryptedMessage = new Decoder().decode(decryptedArrayBuffer);
781
+ return decryptedMessage
782
+ }
783
+ }
784
+
785
+ const getVerificationHelpers = ({ keyPairs, crypto: _crypto, util: _util } = {}) => {
786
+ const webCrypto = new WebCrypto({ crypto: _crypto, util: _util });
787
+
788
+ return async (req, params) => {
789
+ const {
790
+ 'x-public-key': apiKey,
791
+ 'x-ephemeral-key': ephemeralPublicKey,
792
+ 'x-authorization-timestamp': customAuthTimestamp,
793
+ 'x-authorization': customAuth,
794
+ } = req.headers ?? {};
795
+
796
+ const { uri: _uri, disableRecryption: _disableRecryption } = params ?? {};
797
+ const uri = _uri ?? req.url;
798
+ const disableRecryption = isTrue(_disableRecryption);
799
+
800
+ let isVerifiable;
801
+ try {
802
+ const [authProtocol, authSignature] = ensureString(customAuth).split(' ');
803
+ isVerifiable = isTrue(
804
+ apiKey &&
805
+ ephemeralPublicKey &&
806
+ keyPairs?.shared &&
807
+ customAuthTimestamp &&
808
+ authSignature &&
809
+ (authProtocol === 'HMAC-SHA256')
810
+ );
811
+
812
+ let verificationKeys;
813
+ const rawBody = await ensureRawBody(req);
814
+
815
+ // NOTE: requestBody should be wind up decrypted when isVerifiable (unless disableRecryption, then will pass through)
816
+ let requestBody = safeParse(rawBody);
817
+
818
+ // TEMP!!! remove isVerifiable check once webwidget moved to react
819
+ if (isVerifiable) {
820
+ if (
821
+ !apiKey ||
822
+ !ephemeralPublicKey ||
823
+ !customAuthTimestamp ||
824
+ !authSignature ||
825
+ !keyPairs?.shared ||
826
+ (apiKey !== keyPairs.shared.publicKey) ||
827
+ (authProtocol !== 'HMAC-SHA256')
828
+ ) {
829
+ throw new VerificationError('Invalid or missing authorization', { code: 401 })
830
+ }
831
+
832
+ verificationKeys = await webCrypto.getVerificationKeys({
833
+ publicKey: ephemeralPublicKey,
834
+ privateKey: keyPairs.shared.privateKey,
835
+ });
836
+
837
+ if (!verificationKeys) {
838
+ throw new VerificationError('Invalid or missing verification', { code: 412 })
839
+ }
840
+
841
+ const verificationPayload = objectToSortedString({
842
+ method: getRequestMethod(rawBody, req.method),
843
+ timestamp: customAuthTimestamp,
844
+ body: requestBody, // NOTE: requestBody should be encrypted when isVerifiable
845
+ ...normalizeURIParts(uri),
846
+ });
847
+
848
+ const isValid = await webCrypto.verifyHMAC(
849
+ verificationPayload,
850
+ verificationKeys.derivedHMACKey,
851
+ authSignature
852
+ );
853
+
854
+ if (!isValid) {
855
+ throw new VerificationError('Invalid or missing verification', { code: 412 })
856
+ }
857
+
858
+ if (!disableRecryption && requestBody) {
859
+ const decryptedMessage = await webCrypto.decryptMessage(requestBody, verificationKeys.derivedSecretKey);
860
+ requestBody = safeParse(decryptedMessage);
861
+ }
862
+ }
863
+
864
+ const processResponse = async (response) => {
865
+ if (!response || disableRecryption || !isVerifiable || !verificationKeys?.derivedSecretKey) {
866
+ return response
867
+ }
868
+
869
+ return webCrypto.encryptMessage(JSON.stringify(response), verificationKeys.derivedSecretKey)
870
+ };
871
+
872
+ return { rawBody, requestBody, processResponse }
873
+ } catch (error) {
874
+ console.error(`Error handling request verification for '${uri}'`, { error, isVerifiable, disableRecryption });
875
+ throw error
876
+ }
877
+ }
878
+ };
879
+
880
+ /*!
881
+ * raw-body
882
+ * Copyright(c) 2013-2014 Jonathan Ong
883
+ * Copyright(c) 2014-2022 Douglas Christopher Wilson
884
+ * MIT Licensed
885
+ */
886
+
887
+ /**
888
+ * Module dependencies.
889
+ * @private
890
+ */
891
+
892
+ var asyncHooks = tryRequireAsyncHooks();
893
+ var bytes = require('bytes');
894
+ var createError = require('http-errors');
895
+ var iconv = require('iconv-lite');
896
+ var unpipe = require('unpipe');
897
+
898
+ /**
899
+ * Module exports.
900
+ * @public
901
+ */
902
+
903
+ module.exports = getRawBody;
904
+
905
+ /**
906
+ * Module variables.
907
+ * @private
908
+ */
909
+
910
+ var ICONV_ENCODING_MESSAGE_REGEXP = /^Encoding not recognized: /;
911
+
912
+ /**
913
+ * Get the decoder for a given encoding.
914
+ *
915
+ * @param {string} encoding
916
+ * @private
917
+ */
918
+
919
+ function getDecoder (encoding) {
920
+ if (!encoding) return null
921
+
922
+ try {
923
+ return iconv.getDecoder(encoding)
924
+ } catch (e) {
925
+ // error getting decoder
926
+ if (!ICONV_ENCODING_MESSAGE_REGEXP.test(e.message)) throw e
927
+
928
+ // the encoding was not found
929
+ throw createError(415, 'specified encoding unsupported', {
930
+ encoding: encoding,
931
+ type: 'encoding.unsupported'
932
+ })
933
+ }
934
+ }
935
+
936
+ /**
937
+ * Get the raw body of a stream (typically HTTP).
938
+ *
939
+ * @param {object} stream
940
+ * @param {object|string|function} [options]
941
+ * @param {function} [callback]
942
+ * @public
943
+ */
944
+
945
+ function getRawBody (stream, options, callback) {
946
+ var done = callback;
947
+ var opts = options || {};
948
+
949
+ // light validation
950
+ if (stream === undefined) {
951
+ throw new TypeError('argument stream is required')
952
+ } else if (typeof stream !== 'object' || stream === null || typeof stream.on !== 'function') {
953
+ throw new TypeError('argument stream must be a stream')
954
+ }
955
+
956
+ if (options === true || typeof options === 'string') {
957
+ // short cut for encoding
958
+ opts = {
959
+ encoding: options
960
+ };
961
+ }
962
+
963
+ if (typeof options === 'function') {
964
+ done = options;
965
+ opts = {};
966
+ }
967
+
968
+ // validate callback is a function, if provided
969
+ if (done !== undefined && typeof done !== 'function') {
970
+ throw new TypeError('argument callback must be a function')
971
+ }
972
+
973
+ // require the callback without promises
974
+ if (!done && !global.Promise) {
975
+ throw new TypeError('argument callback is required')
976
+ }
977
+
978
+ // get encoding
979
+ var encoding = opts.encoding !== true
980
+ ? opts.encoding
981
+ : 'utf-8';
982
+
983
+ // convert the limit to an integer
984
+ var limit = bytes.parse(opts.limit);
985
+
986
+ // convert the expected length to an integer
987
+ var length = opts.length != null && !isNaN(opts.length)
988
+ ? parseInt(opts.length, 10)
989
+ : null;
990
+
991
+ if (done) {
992
+ // classic callback style
993
+ return readStream(stream, encoding, length, limit, wrap(done))
994
+ }
995
+
996
+ return new Promise(function executor (resolve, reject) {
997
+ readStream(stream, encoding, length, limit, function onRead (err, buf) {
998
+ if (err) return reject(err)
999
+ resolve(buf);
1000
+ });
1001
+ })
1002
+ }
1003
+
1004
+ /**
1005
+ * Halt a stream.
1006
+ *
1007
+ * @param {Object} stream
1008
+ * @private
1009
+ */
1010
+
1011
+ function halt (stream) {
1012
+ // unpipe everything from the stream
1013
+ unpipe(stream);
1014
+
1015
+ // pause stream
1016
+ if (typeof stream.pause === 'function') {
1017
+ stream.pause();
1018
+ }
1019
+ }
1020
+
1021
+ /**
1022
+ * Read the data from the stream.
1023
+ *
1024
+ * @param {object} stream
1025
+ * @param {string} encoding
1026
+ * @param {number} length
1027
+ * @param {number} limit
1028
+ * @param {function} callback
1029
+ * @public
1030
+ */
1031
+
1032
+ function readStream (stream, encoding, length, limit, callback) {
1033
+ var complete = false;
1034
+ var sync = true;
1035
+
1036
+ // check the length and limit options.
1037
+ // note: we intentionally leave the stream paused,
1038
+ // so users should handle the stream themselves.
1039
+ if (limit !== null && length !== null && length > limit) {
1040
+ return done(createError(413, 'request entity too large', {
1041
+ expected: length,
1042
+ length: length,
1043
+ limit: limit,
1044
+ type: 'entity.too.large'
1045
+ }))
1046
+ }
1047
+
1048
+ // streams1: assert request encoding is buffer.
1049
+ // streams2+: assert the stream encoding is buffer.
1050
+ // stream._decoder: streams1
1051
+ // state.encoding: streams2
1052
+ // state.decoder: streams2, specifically < 0.10.6
1053
+ var state = stream._readableState;
1054
+ if (stream._decoder || (state && (state.encoding || state.decoder))) {
1055
+ // developer error
1056
+ return done(createError(500, 'stream encoding should not be set', {
1057
+ type: 'stream.encoding.set'
1058
+ }))
1059
+ }
1060
+
1061
+ if (typeof stream.readable !== 'undefined' && !stream.readable) {
1062
+ return done(createError(500, 'stream is not readable', {
1063
+ type: 'stream.not.readable'
1064
+ }))
1065
+ }
1066
+
1067
+ var received = 0;
1068
+ var decoder;
1069
+
1070
+ try {
1071
+ decoder = getDecoder(encoding);
1072
+ } catch (err) {
1073
+ return done(err)
1074
+ }
1075
+
1076
+ var buffer = decoder
1077
+ ? ''
1078
+ : [];
1079
+
1080
+ // attach listeners
1081
+ stream.on('aborted', onAborted);
1082
+ stream.on('close', cleanup);
1083
+ stream.on('data', onData);
1084
+ stream.on('end', onEnd);
1085
+ stream.on('error', onEnd);
1086
+
1087
+ // mark sync section complete
1088
+ sync = false;
1089
+
1090
+ function done () {
1091
+ var args = new Array(arguments.length);
1092
+
1093
+ // copy arguments
1094
+ for (var i = 0; i < args.length; i++) {
1095
+ args[i] = arguments[i];
1096
+ }
1097
+
1098
+ // mark complete
1099
+ complete = true;
1100
+
1101
+ if (sync) {
1102
+ process.nextTick(invokeCallback);
1103
+ } else {
1104
+ invokeCallback();
1105
+ }
1106
+
1107
+ function invokeCallback () {
1108
+ cleanup();
1109
+
1110
+ if (args[0]) {
1111
+ // halt the stream on error
1112
+ halt(stream);
1113
+ }
1114
+
1115
+ callback.apply(null, args);
1116
+ }
1117
+ }
1118
+
1119
+ function onAborted () {
1120
+ if (complete) return
1121
+
1122
+ done(createError(400, 'request aborted', {
1123
+ code: 'ECONNABORTED',
1124
+ expected: length,
1125
+ length: length,
1126
+ received: received,
1127
+ type: 'request.aborted'
1128
+ }));
1129
+ }
1130
+
1131
+ function onData (chunk) {
1132
+ if (complete) return
1133
+
1134
+ received += chunk.length;
1135
+
1136
+ if (limit !== null && received > limit) {
1137
+ done(createError(413, 'request entity too large', {
1138
+ limit: limit,
1139
+ received: received,
1140
+ type: 'entity.too.large'
1141
+ }));
1142
+ } else if (decoder) {
1143
+ buffer += decoder.write(chunk);
1144
+ } else {
1145
+ buffer.push(chunk);
1146
+ }
1147
+ }
1148
+
1149
+ function onEnd (err) {
1150
+ if (complete) return
1151
+ if (err) return done(err)
1152
+
1153
+ if (length !== null && received !== length) {
1154
+ done(createError(400, 'request size did not match content length', {
1155
+ expected: length,
1156
+ length: length,
1157
+ received: received,
1158
+ type: 'request.size.invalid'
1159
+ }));
1160
+ } else {
1161
+ var string = decoder
1162
+ ? buffer + (decoder.end() || '')
1163
+ : Buffer.concat(buffer);
1164
+ done(null, string);
1165
+ }
1166
+ }
1167
+
1168
+ function cleanup () {
1169
+ buffer = null;
1170
+
1171
+ stream.removeListener('aborted', onAborted);
1172
+ stream.removeListener('data', onData);
1173
+ stream.removeListener('end', onEnd);
1174
+ stream.removeListener('error', onEnd);
1175
+ stream.removeListener('close', cleanup);
1176
+ }
1177
+ }
1178
+
1179
+ /**
1180
+ * Try to require async_hooks
1181
+ * @private
1182
+ */
1183
+
1184
+ function tryRequireAsyncHooks () {
1185
+ try {
1186
+ return require('async_hooks')
1187
+ } catch (e) {
1188
+ return {}
1189
+ }
1190
+ }
1191
+
1192
+ /**
1193
+ * Wrap function with async resource, if possible.
1194
+ * AsyncResource.bind static method backported.
1195
+ * @private
1196
+ */
1197
+
1198
+ function wrap (fn) {
1199
+ var res;
1200
+
1201
+ // create anonymous resource
1202
+ if (asyncHooks.AsyncResource) {
1203
+ res = new asyncHooks.AsyncResource(fn.name || 'bound-anonymous-fn');
1204
+ }
1205
+
1206
+ // incompatible node.js
1207
+ if (!res || !res.runInAsyncScope) {
1208
+ return fn
1209
+ }
1210
+
1211
+ // return bound function
1212
+ return res.runInAsyncScope.bind(res, fn, null)
1213
+ }
1214
+
1215
+ var index = /*#__PURE__*/Object.freeze({
1216
+ __proto__: null
1217
+ });
1218
+
1219
+ exports.API_ROUTE_NAMES = API_ROUTE_NAMES;
1220
+ exports.API_WEBHOOK_TOPICS = API_WEBHOOK_TOPICS;
1221
+ exports.AUTH_TYPES = AUTH_TYPES;
1222
+ exports.BILLING_EVENT_TYPES = BILLING_EVENT_TYPES;
1223
+ exports.BILLING_INTERVALS = BILLING_INTERVALS;
1224
+ exports.COLLECTION_ROOT = COLLECTION_ROOT;
1225
+ exports.PAGE_ROUTE_NAMES = PAGE_ROUTE_NAMES;
1226
+ exports.VerificationError = VerificationError;
1227
+ exports.convertEventTopic = convertEventTopic;
1228
+ exports.ensureRawBody = ensureRawBody;
1229
+ exports.getVerificationHelpers = getVerificationHelpers;
1230
+
1231
+ Object.defineProperty(exports, '__esModule', { value: true });
1232
+
1233
+ }));
1234
+ //# sourceMappingURL=index.js.map