@shopify/shopify-app-remix 1.0.4 → 1.1.0

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 (355) hide show
  1. package/README.md +19 -23
  2. package/build/cjs/react/components/AppProvider/AppProvider.js +67 -0
  3. package/build/cjs/react/components/RemixPolarisLink.js +22 -0
  4. package/build/cjs/react/const.js +7 -0
  5. package/build/cjs/react/index.js +9 -0
  6. package/build/cjs/{adapters → server/adapters}/node/index.js +1 -3
  7. package/build/cjs/{auth → server/authenticate}/admin/authenticate.js +35 -86
  8. package/build/cjs/{billing → server/authenticate/admin/billing}/cancel.js +1 -2
  9. package/build/cjs/{billing → server/authenticate/admin/billing}/request.js +2 -3
  10. package/build/cjs/{billing → server/authenticate/admin/billing}/require.js +1 -2
  11. package/build/cjs/server/authenticate/admin/helpers/handle-client-error.js +39 -0
  12. package/build/cjs/{auth → server/authenticate/admin}/helpers/redirect-to-auth-page.js +6 -1
  13. package/build/cjs/{auth → server/authenticate/admin}/helpers/redirect-with-app-bridge-headers.js +2 -6
  14. package/build/cjs/server/authenticate/admin/helpers/redirect.js +67 -0
  15. package/build/cjs/server/authenticate/admin/helpers/render-app-bridge.js +30 -0
  16. package/build/cjs/{auth → server/authenticate}/helpers/ensure-cors-headers.js +3 -2
  17. package/build/cjs/{auth → server/authenticate}/helpers/respond-to-options-request.js +2 -2
  18. package/build/cjs/{auth → server/authenticate}/helpers/validate-session-token.js +6 -2
  19. package/build/cjs/{auth → server/authenticate}/public/authenticate.js +8 -6
  20. package/build/cjs/{boundary → server/boundary}/error.js +7 -1
  21. package/build/cjs/server/boundary/index.js +44 -0
  22. package/build/cjs/server/clients/admin/factory.js +27 -0
  23. package/build/cjs/{auth/admin/graphql-client.js → server/clients/admin/graphql.js} +10 -18
  24. package/build/cjs/{auth/admin/rest-client.js → server/clients/admin/rest.js} +54 -33
  25. package/build/cjs/server/index.js +39 -0
  26. package/build/cjs/{index.js → server/shopify-app.js} +10 -73
  27. package/build/cjs/server/unauthenticated/admin/factory.js +25 -0
  28. package/build/cjs/{version.js → server/version.js} +1 -1
  29. package/build/ts/react/components/AppProvider/AppProvider.d.ts +50 -0
  30. package/build/ts/react/components/AppProvider/AppProvider.d.ts.map +1 -0
  31. package/build/ts/react/components/AppProvider/AppProvider.js +44 -0
  32. package/build/ts/react/components/AppProvider/AppProvider.js.map +1 -0
  33. package/build/ts/react/components/AppProvider/index.d.ts +2 -0
  34. package/build/ts/react/components/AppProvider/index.d.ts.map +1 -0
  35. package/build/ts/react/components/AppProvider/index.js +5 -0
  36. package/build/ts/react/components/AppProvider/index.js.map +1 -0
  37. package/build/ts/react/components/RemixPolarisLink.d.ts +3 -0
  38. package/build/ts/react/components/RemixPolarisLink.d.ts.map +1 -0
  39. package/build/ts/react/components/RemixPolarisLink.js +12 -0
  40. package/build/ts/react/components/RemixPolarisLink.js.map +1 -0
  41. package/build/ts/react/components/index.d.ts +2 -0
  42. package/build/ts/react/components/index.d.ts.map +1 -0
  43. package/build/ts/react/components/index.js +5 -0
  44. package/build/ts/react/components/index.js.map +1 -0
  45. package/build/ts/react/const.d.ts +2 -0
  46. package/build/ts/react/const.d.ts.map +1 -0
  47. package/build/ts/react/const.js +5 -0
  48. package/build/ts/react/const.js.map +1 -0
  49. package/build/ts/react/index.d.ts +2 -0
  50. package/build/ts/react/index.d.ts.map +1 -0
  51. package/build/ts/react/index.js +5 -0
  52. package/build/ts/react/index.js.map +1 -0
  53. package/build/ts/server/adapters/node/index.d.ts.map +1 -0
  54. package/build/ts/{adapters → server/adapters}/node/index.js +1 -1
  55. package/build/ts/server/adapters/node/index.js.map +1 -0
  56. package/build/ts/{auth → server/authenticate}/admin/authenticate.d.ts +0 -2
  57. package/build/ts/server/authenticate/admin/authenticate.d.ts.map +1 -0
  58. package/build/ts/{auth → server/authenticate}/admin/authenticate.js +26 -70
  59. package/build/ts/server/authenticate/admin/authenticate.js.map +1 -0
  60. package/build/ts/{billing → server/authenticate/admin/billing}/cancel.d.ts +1 -1
  61. package/build/ts/server/authenticate/admin/billing/cancel.d.ts.map +1 -0
  62. package/build/ts/{billing → server/authenticate/admin/billing}/cancel.js +1 -1
  63. package/build/ts/server/authenticate/admin/billing/cancel.js.map +1 -0
  64. package/build/ts/server/authenticate/admin/billing/index.d.ts.map +1 -0
  65. package/build/ts/server/authenticate/admin/billing/index.js.map +1 -0
  66. package/build/ts/{billing → server/authenticate/admin/billing}/request.d.ts +2 -2
  67. package/build/ts/server/authenticate/admin/billing/request.d.ts.map +1 -0
  68. package/build/ts/{billing → server/authenticate/admin/billing}/request.js +2 -3
  69. package/build/ts/server/authenticate/admin/billing/request.js.map +1 -0
  70. package/build/ts/{billing → server/authenticate/admin/billing}/require.d.ts +2 -2
  71. package/build/ts/server/authenticate/admin/billing/require.d.ts.map +1 -0
  72. package/build/ts/{billing → server/authenticate/admin/billing}/require.js +1 -1
  73. package/build/ts/server/authenticate/admin/billing/require.js.map +1 -0
  74. package/build/ts/{billing → server/authenticate/admin/billing}/types.d.ts +1 -1
  75. package/build/ts/server/authenticate/admin/billing/types.d.ts.map +1 -0
  76. package/build/ts/server/authenticate/admin/billing/types.js.map +1 -0
  77. package/build/ts/{auth → server/authenticate/admin}/helpers/begin-auth.d.ts +1 -1
  78. package/build/ts/server/authenticate/admin/helpers/begin-auth.d.ts.map +1 -0
  79. package/build/ts/server/authenticate/admin/helpers/begin-auth.js.map +1 -0
  80. package/build/ts/server/authenticate/admin/helpers/handle-client-error.d.ts +7 -0
  81. package/build/ts/server/authenticate/admin/helpers/handle-client-error.d.ts.map +1 -0
  82. package/build/ts/server/authenticate/admin/helpers/handle-client-error.js +41 -0
  83. package/build/ts/server/authenticate/admin/helpers/handle-client-error.js.map +1 -0
  84. package/build/ts/server/authenticate/admin/helpers/index.d.ts +8 -0
  85. package/build/ts/server/authenticate/admin/helpers/index.d.ts.map +1 -0
  86. package/build/ts/server/authenticate/admin/helpers/index.js +11 -0
  87. package/build/ts/server/authenticate/admin/helpers/index.js.map +1 -0
  88. package/build/ts/{auth → server/authenticate/admin}/helpers/redirect-to-auth-page.d.ts +1 -1
  89. package/build/ts/server/authenticate/admin/helpers/redirect-to-auth-page.d.ts.map +1 -0
  90. package/build/ts/{auth → server/authenticate/admin}/helpers/redirect-to-auth-page.js +5 -2
  91. package/build/ts/server/authenticate/admin/helpers/redirect-to-auth-page.js.map +1 -0
  92. package/build/ts/server/authenticate/admin/helpers/redirect-with-app-bridge-headers.d.ts +3 -0
  93. package/build/ts/server/authenticate/admin/helpers/redirect-with-app-bridge-headers.d.ts.map +1 -0
  94. package/build/ts/{auth → server/authenticate/admin}/helpers/redirect-with-app-bridge-headers.js +2 -4
  95. package/build/ts/server/authenticate/admin/helpers/redirect-with-app-bridge-headers.js.map +1 -0
  96. package/build/ts/{auth → server/authenticate/admin}/helpers/redirect-with-exitiframe.d.ts +1 -1
  97. package/build/ts/server/authenticate/admin/helpers/redirect-with-exitiframe.d.ts.map +1 -0
  98. package/build/ts/server/authenticate/admin/helpers/redirect-with-exitiframe.js.map +1 -0
  99. package/build/ts/server/authenticate/admin/helpers/redirect.d.ts +9 -0
  100. package/build/ts/server/authenticate/admin/helpers/redirect.d.ts.map +1 -0
  101. package/build/ts/server/authenticate/admin/helpers/redirect.js +64 -0
  102. package/build/ts/server/authenticate/admin/helpers/redirect.js.map +1 -0
  103. package/build/ts/server/authenticate/admin/helpers/render-app-bridge.d.ts +8 -0
  104. package/build/ts/server/authenticate/admin/helpers/render-app-bridge.d.ts.map +1 -0
  105. package/build/ts/server/authenticate/admin/helpers/render-app-bridge.js +22 -0
  106. package/build/ts/server/authenticate/admin/helpers/render-app-bridge.js.map +1 -0
  107. package/build/ts/{auth → server/authenticate}/admin/types.d.ts +22 -2
  108. package/build/ts/server/authenticate/admin/types.d.ts.map +1 -0
  109. package/build/ts/server/authenticate/admin/types.js.map +1 -0
  110. package/build/ts/server/authenticate/const.d.ts.map +1 -0
  111. package/build/ts/server/authenticate/const.js.map +1 -0
  112. package/build/ts/server/authenticate/helpers/add-response-headers.d.ts.map +1 -0
  113. package/build/ts/server/authenticate/helpers/add-response-headers.js.map +1 -0
  114. package/build/ts/server/authenticate/helpers/app-bridge-url.d.ts.map +1 -0
  115. package/build/ts/server/authenticate/helpers/app-bridge-url.js.map +1 -0
  116. package/build/ts/{auth → server/authenticate}/helpers/ensure-cors-headers.d.ts +1 -1
  117. package/build/ts/server/authenticate/helpers/ensure-cors-headers.d.ts.map +1 -0
  118. package/build/ts/{auth → server/authenticate}/helpers/ensure-cors-headers.js +8 -2
  119. package/build/ts/server/authenticate/helpers/ensure-cors-headers.js.map +1 -0
  120. package/build/ts/server/authenticate/helpers/get-session-token-header.d.ts.map +1 -0
  121. package/build/ts/server/authenticate/helpers/get-session-token-header.js.map +1 -0
  122. package/build/ts/{auth → server/authenticate}/helpers/index.d.ts +0 -4
  123. package/build/ts/server/authenticate/helpers/index.d.ts.map +1 -0
  124. package/build/ts/{auth → server/authenticate}/helpers/index.js +0 -4
  125. package/build/ts/server/authenticate/helpers/index.js.map +1 -0
  126. package/build/ts/server/authenticate/helpers/reject-bot-request.d.ts.map +1 -0
  127. package/build/ts/server/authenticate/helpers/reject-bot-request.js.map +1 -0
  128. package/build/ts/server/authenticate/helpers/respond-to-options-request.d.ts +3 -0
  129. package/build/ts/server/authenticate/helpers/respond-to-options-request.d.ts.map +1 -0
  130. package/build/ts/{auth → server/authenticate}/helpers/respond-to-options-request.js +2 -2
  131. package/build/ts/server/authenticate/helpers/respond-to-options-request.js.map +1 -0
  132. package/build/ts/server/authenticate/helpers/validate-session-token.d.ts +8 -0
  133. package/build/ts/server/authenticate/helpers/validate-session-token.d.ts.map +1 -0
  134. package/build/ts/{auth → server/authenticate}/helpers/validate-session-token.js +11 -8
  135. package/build/ts/server/authenticate/helpers/validate-session-token.js.map +1 -0
  136. package/build/ts/server/authenticate/login/login.d.ts.map +1 -0
  137. package/build/ts/server/authenticate/login/login.js.map +1 -0
  138. package/build/ts/server/authenticate/public/authenticate.d.ts +4 -0
  139. package/build/ts/server/authenticate/public/authenticate.d.ts.map +1 -0
  140. package/build/ts/{auth → server/authenticate}/public/authenticate.js +16 -11
  141. package/build/ts/server/authenticate/public/authenticate.js.map +1 -0
  142. package/build/ts/{auth → server/authenticate}/public/types.d.ts +7 -2
  143. package/build/ts/server/authenticate/public/types.d.ts.map +1 -0
  144. package/build/ts/server/authenticate/public/types.js.map +1 -0
  145. package/build/ts/server/authenticate/webhooks/authenticate.d.ts.map +1 -0
  146. package/build/ts/server/authenticate/webhooks/authenticate.js.map +1 -0
  147. package/build/ts/server/authenticate/webhooks/index.d.ts.map +1 -0
  148. package/build/ts/server/authenticate/webhooks/index.js.map +1 -0
  149. package/build/ts/server/authenticate/webhooks/register.d.ts.map +1 -0
  150. package/build/ts/server/authenticate/webhooks/register.js.map +1 -0
  151. package/build/ts/server/authenticate/webhooks/types.d.ts.map +1 -0
  152. package/build/ts/server/authenticate/webhooks/types.js.map +1 -0
  153. package/build/ts/server/boundary/error.d.ts +2 -0
  154. package/build/ts/server/boundary/error.d.ts.map +1 -0
  155. package/build/ts/{boundary → server/boundary}/error.js +2 -1
  156. package/build/ts/server/boundary/error.js.map +1 -0
  157. package/build/ts/server/boundary/headers.d.ts.map +1 -0
  158. package/build/ts/server/boundary/headers.js.map +1 -0
  159. package/build/ts/server/boundary/index.d.ts +38 -0
  160. package/build/ts/server/boundary/index.d.ts.map +1 -0
  161. package/build/ts/server/boundary/index.js +41 -0
  162. package/build/ts/server/boundary/index.js.map +1 -0
  163. package/build/ts/server/boundary/types.d.ts.map +1 -0
  164. package/build/ts/{auth/admin → server/boundary}/types.js.map +1 -1
  165. package/build/ts/server/clients/admin/factory.d.ts +11 -0
  166. package/build/ts/server/clients/admin/factory.d.ts.map +1 -0
  167. package/build/ts/server/clients/admin/factory.js +18 -0
  168. package/build/ts/server/clients/admin/factory.js.map +1 -0
  169. package/build/ts/server/clients/admin/graphql.d.ts +17 -0
  170. package/build/ts/server/clients/admin/graphql.d.ts.map +1 -0
  171. package/build/ts/{auth/admin/graphql-client.js → server/clients/admin/graphql.js} +9 -14
  172. package/build/ts/server/clients/admin/graphql.js.map +1 -0
  173. package/build/ts/server/clients/admin/index.d.ts +2 -0
  174. package/build/ts/server/clients/admin/index.d.ts.map +1 -0
  175. package/build/ts/server/clients/admin/index.js +5 -0
  176. package/build/ts/server/clients/admin/index.js.map +1 -0
  177. package/build/ts/{auth/admin/rest-client.d.ts → server/clients/admin/rest.d.ts} +10 -13
  178. package/build/ts/server/clients/admin/rest.d.ts.map +1 -0
  179. package/build/ts/{auth/admin/rest-client.js → server/clients/admin/rest.js} +56 -25
  180. package/build/ts/server/clients/admin/rest.js.map +1 -0
  181. package/build/ts/server/clients/admin/types.d.ts +13 -0
  182. package/build/ts/server/clients/admin/types.d.ts.map +1 -0
  183. package/build/ts/server/clients/admin/types.js +3 -0
  184. package/build/ts/server/clients/admin/types.js.map +1 -0
  185. package/build/ts/{config-types.d.ts → server/config-types.d.ts} +3 -3
  186. package/build/ts/server/config-types.d.ts.map +1 -0
  187. package/build/ts/server/config-types.js.map +1 -0
  188. package/build/ts/server/index.d.ts +7 -0
  189. package/build/ts/server/index.d.ts.map +1 -0
  190. package/build/ts/server/index.js +22 -0
  191. package/build/ts/server/index.js.map +1 -0
  192. package/build/ts/server/override-logger.d.ts.map +1 -0
  193. package/build/ts/server/override-logger.js.map +1 -0
  194. package/build/ts/server/shopify-app.d.ts +27 -0
  195. package/build/ts/server/shopify-app.d.ts.map +1 -0
  196. package/build/ts/{index.js → server/shopify-app.js} +12 -58
  197. package/build/ts/server/shopify-app.js.map +1 -0
  198. package/build/ts/{types.d.ts → server/types.d.ts} +46 -13
  199. package/build/ts/server/types.d.ts.map +1 -0
  200. package/build/ts/server/types.js.map +1 -0
  201. package/build/ts/server/unauthenticated/admin/factory.d.ts +5 -0
  202. package/build/ts/server/unauthenticated/admin/factory.d.ts.map +1 -0
  203. package/build/ts/server/unauthenticated/admin/factory.js +30 -0
  204. package/build/ts/server/unauthenticated/admin/factory.js.map +1 -0
  205. package/build/ts/server/unauthenticated/admin/index.d.ts +2 -0
  206. package/build/ts/server/unauthenticated/admin/index.d.ts.map +1 -0
  207. package/build/ts/server/unauthenticated/admin/index.js +5 -0
  208. package/build/ts/server/unauthenticated/admin/index.js.map +1 -0
  209. package/build/ts/server/unauthenticated/admin/types.d.ts +32 -0
  210. package/build/ts/server/unauthenticated/admin/types.d.ts.map +1 -0
  211. package/build/ts/server/unauthenticated/admin/types.js +3 -0
  212. package/build/ts/server/unauthenticated/admin/types.js.map +1 -0
  213. package/build/ts/server/version.d.ts +2 -0
  214. package/build/ts/server/version.d.ts.map +1 -0
  215. package/build/ts/{version.js → server/version.js} +1 -1
  216. package/build/ts/server/version.js.map +1 -0
  217. package/build/tsconfig.tsbuildinfo +1 -1
  218. package/package.json +34 -10
  219. package/build/cjs/auth/helpers/handle-client-error.js +0 -37
  220. package/build/ts/adapters/node/index.d.ts.map +0 -1
  221. package/build/ts/adapters/node/index.js.map +0 -1
  222. package/build/ts/auth/admin/authenticate.d.ts.map +0 -1
  223. package/build/ts/auth/admin/authenticate.js.map +0 -1
  224. package/build/ts/auth/admin/graphql-client.d.ts +0 -22
  225. package/build/ts/auth/admin/graphql-client.d.ts.map +0 -1
  226. package/build/ts/auth/admin/graphql-client.js.map +0 -1
  227. package/build/ts/auth/admin/rest-client.d.ts.map +0 -1
  228. package/build/ts/auth/admin/rest-client.js.map +0 -1
  229. package/build/ts/auth/admin/types.d.ts.map +0 -1
  230. package/build/ts/auth/const.d.ts.map +0 -1
  231. package/build/ts/auth/const.js.map +0 -1
  232. package/build/ts/auth/helpers/add-response-headers.d.ts.map +0 -1
  233. package/build/ts/auth/helpers/add-response-headers.js.map +0 -1
  234. package/build/ts/auth/helpers/app-bridge-url.d.ts.map +0 -1
  235. package/build/ts/auth/helpers/app-bridge-url.js.map +0 -1
  236. package/build/ts/auth/helpers/begin-auth.d.ts.map +0 -1
  237. package/build/ts/auth/helpers/begin-auth.js.map +0 -1
  238. package/build/ts/auth/helpers/ensure-cors-headers.d.ts.map +0 -1
  239. package/build/ts/auth/helpers/ensure-cors-headers.js.map +0 -1
  240. package/build/ts/auth/helpers/get-session-token-header.d.ts.map +0 -1
  241. package/build/ts/auth/helpers/get-session-token-header.js.map +0 -1
  242. package/build/ts/auth/helpers/handle-client-error.d.ts +0 -11
  243. package/build/ts/auth/helpers/handle-client-error.d.ts.map +0 -1
  244. package/build/ts/auth/helpers/handle-client-error.js +0 -40
  245. package/build/ts/auth/helpers/handle-client-error.js.map +0 -1
  246. package/build/ts/auth/helpers/index.d.ts.map +0 -1
  247. package/build/ts/auth/helpers/index.js.map +0 -1
  248. package/build/ts/auth/helpers/redirect-to-auth-page.d.ts.map +0 -1
  249. package/build/ts/auth/helpers/redirect-to-auth-page.js.map +0 -1
  250. package/build/ts/auth/helpers/redirect-with-app-bridge-headers.d.ts +0 -4
  251. package/build/ts/auth/helpers/redirect-with-app-bridge-headers.d.ts.map +0 -1
  252. package/build/ts/auth/helpers/redirect-with-app-bridge-headers.js.map +0 -1
  253. package/build/ts/auth/helpers/redirect-with-exitiframe.d.ts.map +0 -1
  254. package/build/ts/auth/helpers/redirect-with-exitiframe.js.map +0 -1
  255. package/build/ts/auth/helpers/reject-bot-request.d.ts.map +0 -1
  256. package/build/ts/auth/helpers/reject-bot-request.js.map +0 -1
  257. package/build/ts/auth/helpers/respond-to-options-request.d.ts +0 -3
  258. package/build/ts/auth/helpers/respond-to-options-request.d.ts.map +0 -1
  259. package/build/ts/auth/helpers/respond-to-options-request.js.map +0 -1
  260. package/build/ts/auth/helpers/validate-session-token.d.ts +0 -4
  261. package/build/ts/auth/helpers/validate-session-token.d.ts.map +0 -1
  262. package/build/ts/auth/helpers/validate-session-token.js.map +0 -1
  263. package/build/ts/auth/login/login.d.ts.map +0 -1
  264. package/build/ts/auth/login/login.js.map +0 -1
  265. package/build/ts/auth/public/authenticate.d.ts +0 -4
  266. package/build/ts/auth/public/authenticate.d.ts.map +0 -1
  267. package/build/ts/auth/public/authenticate.js.map +0 -1
  268. package/build/ts/auth/public/types.d.ts.map +0 -1
  269. package/build/ts/auth/public/types.js.map +0 -1
  270. package/build/ts/auth/webhooks/authenticate.d.ts.map +0 -1
  271. package/build/ts/auth/webhooks/authenticate.js.map +0 -1
  272. package/build/ts/auth/webhooks/index.d.ts.map +0 -1
  273. package/build/ts/auth/webhooks/index.js.map +0 -1
  274. package/build/ts/auth/webhooks/register.d.ts.map +0 -1
  275. package/build/ts/auth/webhooks/register.js.map +0 -1
  276. package/build/ts/auth/webhooks/types.d.ts.map +0 -1
  277. package/build/ts/auth/webhooks/types.js.map +0 -1
  278. package/build/ts/billing/cancel.d.ts.map +0 -1
  279. package/build/ts/billing/cancel.js.map +0 -1
  280. package/build/ts/billing/index.d.ts.map +0 -1
  281. package/build/ts/billing/index.js.map +0 -1
  282. package/build/ts/billing/request.d.ts.map +0 -1
  283. package/build/ts/billing/request.js.map +0 -1
  284. package/build/ts/billing/require.d.ts.map +0 -1
  285. package/build/ts/billing/require.js.map +0 -1
  286. package/build/ts/billing/types.d.ts.map +0 -1
  287. package/build/ts/billing/types.js.map +0 -1
  288. package/build/ts/boundary/error.d.ts +0 -2
  289. package/build/ts/boundary/error.d.ts.map +0 -1
  290. package/build/ts/boundary/error.js.map +0 -1
  291. package/build/ts/boundary/headers.d.ts.map +0 -1
  292. package/build/ts/boundary/headers.js.map +0 -1
  293. package/build/ts/boundary/types.d.ts.map +0 -1
  294. package/build/ts/boundary/types.js.map +0 -1
  295. package/build/ts/config-types.d.ts.map +0 -1
  296. package/build/ts/config-types.js.map +0 -1
  297. package/build/ts/index.d.ts +0 -67
  298. package/build/ts/index.d.ts.map +0 -1
  299. package/build/ts/index.js.map +0 -1
  300. package/build/ts/override-logger.d.ts.map +0 -1
  301. package/build/ts/override-logger.js.map +0 -1
  302. package/build/ts/types.d.ts.map +0 -1
  303. package/build/ts/types.js.map +0 -1
  304. package/build/ts/version.d.ts +0 -2
  305. package/build/ts/version.d.ts.map +0 -1
  306. package/build/ts/version.js.map +0 -1
  307. /package/build/cjs/{auth → server/authenticate/admin}/helpers/begin-auth.js +0 -0
  308. /package/build/cjs/{auth → server/authenticate/admin}/helpers/redirect-with-exitiframe.js +0 -0
  309. /package/build/cjs/{auth → server/authenticate}/const.js +0 -0
  310. /package/build/cjs/{auth → server/authenticate}/helpers/add-response-headers.js +0 -0
  311. /package/build/cjs/{auth → server/authenticate}/helpers/app-bridge-url.js +0 -0
  312. /package/build/cjs/{auth → server/authenticate}/helpers/get-session-token-header.js +0 -0
  313. /package/build/cjs/{auth → server/authenticate}/helpers/reject-bot-request.js +0 -0
  314. /package/build/cjs/{auth → server/authenticate}/login/login.js +0 -0
  315. /package/build/cjs/{auth → server/authenticate}/webhooks/authenticate.js +0 -0
  316. /package/build/cjs/{auth → server/authenticate}/webhooks/register.js +0 -0
  317. /package/build/cjs/{boundary → server/boundary}/headers.js +0 -0
  318. /package/build/cjs/{override-logger.js → server/override-logger.js} +0 -0
  319. /package/build/cjs/{types.js → server/types.js} +0 -0
  320. /package/build/ts/{adapters → server/adapters}/node/index.d.ts +0 -0
  321. /package/build/ts/{billing → server/authenticate/admin/billing}/index.d.ts +0 -0
  322. /package/build/ts/{billing → server/authenticate/admin/billing}/index.js +0 -0
  323. /package/build/ts/{auth/admin → server/authenticate/admin/billing}/types.js +0 -0
  324. /package/build/ts/{auth → server/authenticate/admin}/helpers/begin-auth.js +0 -0
  325. /package/build/ts/{auth → server/authenticate/admin}/helpers/redirect-with-exitiframe.js +0 -0
  326. /package/build/ts/{auth/public → server/authenticate/admin}/types.js +0 -0
  327. /package/build/ts/{auth → server/authenticate}/const.d.ts +0 -0
  328. /package/build/ts/{auth → server/authenticate}/const.js +0 -0
  329. /package/build/ts/{auth → server/authenticate}/helpers/add-response-headers.d.ts +0 -0
  330. /package/build/ts/{auth → server/authenticate}/helpers/add-response-headers.js +0 -0
  331. /package/build/ts/{auth → server/authenticate}/helpers/app-bridge-url.d.ts +0 -0
  332. /package/build/ts/{auth → server/authenticate}/helpers/app-bridge-url.js +0 -0
  333. /package/build/ts/{auth → server/authenticate}/helpers/get-session-token-header.d.ts +0 -0
  334. /package/build/ts/{auth → server/authenticate}/helpers/get-session-token-header.js +0 -0
  335. /package/build/ts/{auth → server/authenticate}/helpers/reject-bot-request.d.ts +0 -0
  336. /package/build/ts/{auth → server/authenticate}/helpers/reject-bot-request.js +0 -0
  337. /package/build/ts/{auth → server/authenticate}/login/login.d.ts +0 -0
  338. /package/build/ts/{auth → server/authenticate}/login/login.js +0 -0
  339. /package/build/ts/{auth/webhooks → server/authenticate/public}/types.js +0 -0
  340. /package/build/ts/{auth → server/authenticate}/webhooks/authenticate.d.ts +0 -0
  341. /package/build/ts/{auth → server/authenticate}/webhooks/authenticate.js +0 -0
  342. /package/build/ts/{auth → server/authenticate}/webhooks/index.d.ts +0 -0
  343. /package/build/ts/{auth → server/authenticate}/webhooks/index.js +0 -0
  344. /package/build/ts/{auth → server/authenticate}/webhooks/register.d.ts +0 -0
  345. /package/build/ts/{auth → server/authenticate}/webhooks/register.js +0 -0
  346. /package/build/ts/{auth → server/authenticate}/webhooks/types.d.ts +0 -0
  347. /package/build/ts/{billing → server/authenticate/webhooks}/types.js +0 -0
  348. /package/build/ts/{boundary → server/boundary}/headers.d.ts +0 -0
  349. /package/build/ts/{boundary → server/boundary}/headers.js +0 -0
  350. /package/build/ts/{boundary → server/boundary}/types.d.ts +0 -0
  351. /package/build/ts/{boundary → server/boundary}/types.js +0 -0
  352. /package/build/ts/{config-types.js → server/config-types.js} +0 -0
  353. /package/build/ts/{override-logger.d.ts → server/override-logger.d.ts} +0 -0
  354. /package/build/ts/{override-logger.js → server/override-logger.js} +0 -0
  355. /package/build/ts/{types.js → server/types.js} +0 -0
package/README.md CHANGED
@@ -45,7 +45,7 @@ Create `app/shopify.server.js`. We will use this file to configure our Shopify a
45
45
 
46
46
  ```ts
47
47
  // app/shopify.server.js
48
- import '@shopify/shopify-app-remix/adapters/node';
48
+ import '@shopify/shopify-app-remix/server/adapters/node';
49
49
  import {LATEST_API_VERSION, shopifyApp} from '@shopify/shopify-app-remix';
50
50
 
51
51
  const shopify = shopifyApp({
@@ -95,7 +95,7 @@ Now let's create the [splat route](https://remix.run/docs/en/main/guides/routing
95
95
  // app/routes/auth/$.tsx
96
96
  import {LoaderArgs} from '@remix-run/node';
97
97
 
98
- import shopify from '../../shopify.server';
98
+ import shopify from '~/shopify.server';
99
99
 
100
100
  export async function loader({request}: LoaderArgs) {
101
101
  await shopify.authenticate.admin(request);
@@ -104,13 +104,20 @@ export async function loader({request}: LoaderArgs) {
104
104
  }
105
105
  ```
106
106
 
107
- Finally if your app is embedded (this is the default) we need to setup [App Bridge](https://shopify.dev/docs/apps/tools/app-bridge) in `root.tsx.`. To do this pass the `process.env.SHOPIFY_API_KEY` to the frontend via the loader and load App Bridge from the CDN in the document head.
107
+ Next, set up the `AppProvider` component in your app's routes. To do this pass the `process.env.SHOPIFY_API_KEY` to the frontend via the loader.
108
108
 
109
109
  Here is an example:
110
110
 
111
111
  ```ts
112
112
  // root.tsx
113
- export async function loader() {
113
+ import {LoaderArgs} from '@remix-run/node';
114
+ import {AppProvider} from '@shopify/shopify-app-remix/react';
115
+
116
+ import shopify from '~/shopify.server';
117
+
118
+ export async function loader({request}: LoaderArgs) {
119
+ await shopify.authenticate.admin(request);
120
+
114
121
  return json({
115
122
  apiKey: process.env.SHOPIFY_API_KEY,
116
123
  });
@@ -124,19 +131,18 @@ export default function App() {
124
131
  <head>
125
132
  <Meta />
126
133
  <Links />
127
- {/* App Bridge must be loaded from the CDN at the head */}
128
- <script
129
- src="https://cdn.shopify.com/shopifycloud/app-bridge.js"
130
- data-api-key={apiKey}
131
- />
132
134
  </head>
133
- <body>//</body>
135
+ <body>
136
+ <AppProvider apiKey={apiKey} isEmbeddedApp>
137
+ <Outlet />
138
+ </AppProvider>
139
+ </body>
134
140
  </html>
135
141
  );
136
142
  }
137
143
  ```
138
144
 
139
- > **Note**: This version of App Bridge must be loaded from the CDN, in the document head.
145
+ This component will set up [Polaris](https://polaris.shopify.com/components/utilities/app-provider) and [App Bridge](https://shopify.dev/tools/app-bridge). If your app is not embedded, set the `isEmbeddedApp` prop to `false`.
140
146
 
141
147
  Now that your app is ready to respond to requests, it will also need to add the required `Content-Security-Policy` header directives, as per [our documentation](https://shopify.dev/docs/apps/store/security/iframe-protection).
142
148
  To do that, this package provides the `shopify.addDocumentResponseHeaders` method.
@@ -154,22 +160,12 @@ export default function handleRequest(
154
160
  responseHeaders: Headers,
155
161
  remixContext: EntryContext,
156
162
  ) {
157
- const markup = renderToString(
158
- <RemixServer context={remixContext} url={request.url} />,
159
- );
160
-
161
- responseHeaders.set('Content-Type', 'text/html');
162
163
  shopify.addDocumentResponseHeaders(request, responseHeaders);
163
164
 
164
- return new Response('<!DOCTYPE html>' + markup, {
165
- status: responseStatusCode,
166
- headers: responseHeaders,
167
- });
165
+ /// ..etc
168
166
  }
169
167
  ```
170
168
 
171
- If you don't want to add this to every HTML request, you can call it in individual loaders, but you should only do this if you have a good reason not to include the headers in every HTML request.
172
-
173
169
  ## Setting up for your runtime
174
170
 
175
171
  By default, this package will work with the runtimes supported by [Remix adapters](https://remix.run/docs/en/1.17.1/other-api/adapter#official-adapters) because it relies on the same [Web Fetch API](https://developer.mozilla.org/en-US/docs/Web/API/Fetch_API).
@@ -179,7 +175,7 @@ Since Node.js doesn't fully implement that API, apps will need to import an extr
179
175
  In the [Getting Started](#getting-started) section above, you'll notice that the example runs
180
176
 
181
177
  ```ts
182
- import '@shopify/shopify-app-remix/adapters/node';
178
+ import '@shopify/shopify-app-remix/server/adapters/node';
183
179
  ```
184
180
 
185
181
  before calling `shopifyApp`.
@@ -0,0 +1,67 @@
1
+ 'use strict';
2
+
3
+ Object.defineProperty(exports, '__esModule', { value: true });
4
+
5
+ require('react');
6
+ var polaris = require('@shopify/polaris');
7
+ var englishI18n = require('@shopify/polaris/locales/en.json');
8
+ var _const = require('../../const.js');
9
+ var RemixPolarisLink = require('../RemixPolarisLink.js');
10
+ var jsxRuntime = require('react/jsx-runtime');
11
+
12
+ function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; }
13
+
14
+ var englishI18n__default = /*#__PURE__*/_interopDefaultLegacy(englishI18n);
15
+
16
+ /**
17
+ * Sets up the Polaris AppProvider and injects the App Bridge script.
18
+ *
19
+ * {@link https://polaris.shopify.com/components/utilities/app-provider}
20
+ * {@link https://shopify.dev/tools/app-bridge}
21
+ *
22
+ * @example
23
+ * Wrap your app in the `AppProvider` component and pass in your API key.
24
+ * ```ts
25
+ * import {authenticate} from '~/shopify.server';
26
+ * import {AppProvider} from '@shopify/shopify-app-remix/react';
27
+ *
28
+ * export async function loader({ request }) {
29
+ * await authenticate.admin(request);
30
+ *
31
+ * return json({ apiKey: process.env.SHOPIFY_API_KEY });
32
+ * }
33
+ *
34
+ * export default function App() {
35
+ * const { apiKey } = useLoaderData();
36
+ *
37
+ * return (
38
+ * <AppProvider apiKey={apiKey}>
39
+ * <Outlet />
40
+ * </AppProvider>
41
+ * );
42
+ * }
43
+ * ```
44
+ */
45
+ function AppProvider(props) {
46
+ const {
47
+ children,
48
+ apiKey,
49
+ i18n,
50
+ isEmbeddedApp = true,
51
+ __APP_BRIDGE_URL = _const.APP_BRIDGE_URL,
52
+ ...polarisProps
53
+ } = props;
54
+ return /*#__PURE__*/jsxRuntime.jsxs(jsxRuntime.Fragment, {
55
+ children: [isEmbeddedApp && /*#__PURE__*/jsxRuntime.jsx("script", {
56
+ src: __APP_BRIDGE_URL,
57
+ "data-api-key": apiKey
58
+ }), /*#__PURE__*/jsxRuntime.jsx(polaris.AppProvider, {
59
+ ...polarisProps,
60
+ linkComponent: RemixPolarisLink.RemixPolarisLink,
61
+ i18n: i18n || englishI18n__default["default"],
62
+ children: children
63
+ })]
64
+ });
65
+ }
66
+
67
+ exports.AppProvider = AppProvider;
@@ -0,0 +1,22 @@
1
+ 'use strict';
2
+
3
+ Object.defineProperty(exports, '__esModule', { value: true });
4
+
5
+ var React = require('react');
6
+ var react = require('@remix-run/react');
7
+ var jsxRuntime = require('react/jsx-runtime');
8
+
9
+ function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; }
10
+
11
+ var React__default = /*#__PURE__*/_interopDefaultLegacy(React);
12
+
13
+ const RemixPolarisLink = /*#__PURE__*/React__default["default"].forwardRef((props, ref) => {
14
+ var _props$url;
15
+ return /*#__PURE__*/jsxRuntime.jsx(react.Link, {
16
+ ...props,
17
+ to: (_props$url = props.url) !== null && _props$url !== void 0 ? _props$url : props.to,
18
+ ref: ref
19
+ });
20
+ });
21
+
22
+ exports.RemixPolarisLink = RemixPolarisLink;
@@ -0,0 +1,7 @@
1
+ 'use strict';
2
+
3
+ Object.defineProperty(exports, '__esModule', { value: true });
4
+
5
+ const APP_BRIDGE_URL = 'https://cdn.shopify.com/shopifycloud/app-bridge.js';
6
+
7
+ exports.APP_BRIDGE_URL = APP_BRIDGE_URL;
@@ -0,0 +1,9 @@
1
+ 'use strict';
2
+
3
+ Object.defineProperty(exports, '__esModule', { value: true });
4
+
5
+ var AppProvider = require('./components/AppProvider/AppProvider.js');
6
+
7
+
8
+
9
+ exports.AppProvider = AppProvider.AppProvider;
@@ -2,10 +2,8 @@
2
2
 
3
3
  var crypto = require('crypto');
4
4
  var runtime = require('@shopify/shopify-api/runtime');
5
- var appBridgeUrl = require('../../auth/helpers/app-bridge-url.js');
6
- require('@remix-run/server-runtime');
5
+ var appBridgeUrl = require('../../authenticate/helpers/app-bridge-url.js');
7
6
  require('isbot');
8
- require('@shopify/shopify-api');
9
7
 
10
8
  function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; }
11
9
 
@@ -4,21 +4,21 @@ Object.defineProperty(exports, '__esModule', { value: true });
4
4
 
5
5
  var serverRuntime = require('@remix-run/server-runtime');
6
6
  var shopifyApi = require('@shopify/shopify-api');
7
- var cancel = require('../../billing/cancel.js');
8
- var require$1 = require('../../billing/require.js');
9
- var request = require('../../billing/request.js');
10
- var appBridgeUrl = require('../helpers/app-bridge-url.js');
11
- var addResponseHeaders = require('../helpers/add-response-headers.js');
12
- var redirectToAuthPage = require('../helpers/redirect-to-auth-page.js');
13
- var redirectWithExitiframe = require('../helpers/redirect-with-exitiframe.js');
14
- var beginAuth = require('../helpers/begin-auth.js');
7
+ var factory = require('../../clients/admin/factory.js');
15
8
  var ensureCorsHeaders = require('../helpers/ensure-cors-headers.js');
16
9
  var validateSessionToken = require('../helpers/validate-session-token.js');
17
10
  var getSessionTokenHeader = require('../helpers/get-session-token-header.js');
18
11
  var rejectBotRequest = require('../helpers/reject-bot-request.js');
19
12
  var respondToOptionsRequest = require('../helpers/respond-to-options-request.js');
20
- var graphqlClient = require('./graphql-client.js');
21
- var restClient = require('./rest-client.js');
13
+ var cancel = require('./billing/cancel.js');
14
+ var require$1 = require('./billing/require.js');
15
+ var request = require('./billing/request.js');
16
+ var beginAuth = require('./helpers/begin-auth.js');
17
+ var handleClientError = require('./helpers/handle-client-error.js');
18
+ var redirectToAuthPage = require('./helpers/redirect-to-auth-page.js');
19
+ var redirectWithExitiframe = require('./helpers/redirect-with-exitiframe.js');
20
+ var redirect = require('./helpers/redirect.js');
21
+ var renderAppBridge = require('./helpers/render-app-bridge.js');
22
22
 
23
23
  const SESSION_TOKEN_PARAM = 'id_token';
24
24
  class AuthStrategy {
@@ -73,7 +73,12 @@ class AuthStrategy {
73
73
  if (config.isEmbeddedApp) {
74
74
  return {
75
75
  ...context,
76
- sessionToken: sessionContext.token
76
+ sessionToken: sessionContext.token,
77
+ redirect: redirect.redirectFactory({
78
+ api,
79
+ config,
80
+ logger
81
+ }, request)
77
82
  };
78
83
  } else {
79
84
  return context;
@@ -85,6 +90,11 @@ class AuthStrategy {
85
90
  logger,
86
91
  config
87
92
  } = this;
93
+ const params = {
94
+ api,
95
+ logger,
96
+ config
97
+ };
88
98
  const url = new URL(request.url);
89
99
  const isPatchSessionToken = url.pathname === config.auth.patchSessionTokenPath;
90
100
  const isExitIframe = url.pathname === config.auth.exitIframePath;
@@ -94,13 +104,15 @@ class AuthStrategy {
94
104
  logger.info('Authenticating admin request');
95
105
  if (isPatchSessionToken) {
96
106
  logger.debug('Rendering bounce page');
97
- throw this.renderAppBridge(request);
107
+ throw renderAppBridge.renderAppBridge(params, request);
98
108
  } else if (isExitIframe) {
99
109
  const destination = url.searchParams.get('exitIframe');
100
110
  logger.debug('Rendering exit iframe page', {
101
111
  destination
102
112
  });
103
- throw this.renderAppBridge(request, destination);
113
+ throw renderAppBridge.renderAppBridge(params, request, {
114
+ url: destination
115
+ });
104
116
  } else if (isAuthCallbackRequest) {
105
117
  throw await this.handleAuthCallbackRequest(request);
106
118
  } else if (isAuthRequest) {
@@ -501,63 +513,6 @@ class AuthStrategy {
501
513
  // https://github.com/orgs/Shopify/projects/6899/views/1?pane=issue&itemId=28376650
502
514
  throw serverRuntime.redirect(`${config.auth.patchSessionTokenPath}?${params.toString()}`);
503
515
  }
504
- renderAppBridge(request, redirectTo) {
505
- const {
506
- config
507
- } = this;
508
- let redirectToScript = '';
509
- if (redirectTo) {
510
- const redirectUrl = decodeURIComponent(redirectTo.startsWith('/') ? `${config.appUrl}${redirectTo}` : redirectTo);
511
- redirectToScript = `<script>window.open("${redirectUrl}", "_top")</script>`;
512
- }
513
- const responseHeaders = new Headers({
514
- 'content-type': 'text/html;charset=utf-8'
515
- });
516
- addResponseHeaders.addDocumentResponseHeaders(responseHeaders, config.isEmbeddedApp, new URL(request.url).searchParams.get('shop'));
517
- throw new Response(`
518
- <script data-api-key="${config.apiKey}" src="${appBridgeUrl.appBridgeUrl()}"></script>
519
- ${redirectToScript}
520
- `, {
521
- headers: responseHeaders
522
- });
523
- }
524
- overriddenRestClient(request, session) {
525
- const {
526
- api,
527
- config,
528
- logger
529
- } = this;
530
- const client = new restClient.RemixRestClient({
531
- params: {
532
- api,
533
- config,
534
- logger
535
- },
536
- request,
537
- session
538
- });
539
- if (api.rest) {
540
- client.resources = {};
541
- const RestResourceClient = restClient.restResourceClientFactory({
542
- params: {
543
- api,
544
- config,
545
- logger
546
- },
547
- request,
548
- session
549
- });
550
- Object.entries(api.rest).forEach(([name, resource]) => {
551
- class RemixResource extends resource {}
552
- RemixResource.Client = RestResourceClient;
553
- Reflect.defineProperty(RemixResource, 'name', {
554
- value: name
555
- });
556
- Reflect.set(client.resources, name, RemixResource);
557
- });
558
- }
559
- return client;
560
- }
561
516
  createBillingContext(request$1, session) {
562
517
  const {
563
518
  api,
@@ -583,23 +538,17 @@ class AuthStrategy {
583
538
  };
584
539
  }
585
540
  createAdminApiContext(request, session) {
586
- const {
587
- api,
588
- config,
589
- logger
590
- } = this;
591
- return {
592
- rest: this.overriddenRestClient(request, session),
593
- graphql: graphqlClient.graphqlClientFactory({
594
- params: {
595
- api,
596
- config,
597
- logger
598
- },
599
- request,
600
- session
541
+ return factory.adminClientFactory({
542
+ session,
543
+ params: {
544
+ api: this.api,
545
+ config: this.config,
546
+ logger: this.logger
547
+ },
548
+ handleClientError: handleClientError.handleClientErrorFactory({
549
+ request
601
550
  })
602
- };
551
+ });
603
552
  }
604
553
  }
605
554
 
@@ -3,9 +3,8 @@
3
3
  Object.defineProperty(exports, '__esModule', { value: true });
4
4
 
5
5
  var shopifyApi = require('@shopify/shopify-api');
6
- var redirectToAuthPage = require('../auth/helpers/redirect-to-auth-page.js');
6
+ var redirectToAuthPage = require('../helpers/redirect-to-auth-page.js');
7
7
  require('@remix-run/server-runtime');
8
- require('isbot');
9
8
 
10
9
  function cancelBillingFactory(params, request, session) {
11
10
  return async function cancelBilling(options) {
@@ -4,9 +4,8 @@ Object.defineProperty(exports, '__esModule', { value: true });
4
4
 
5
5
  var shopifyApi = require('@shopify/shopify-api');
6
6
  var serverRuntime = require('@remix-run/server-runtime');
7
- var redirectToAuthPage = require('../auth/helpers/redirect-to-auth-page.js');
8
- require('isbot');
9
- var redirectWithAppBridgeHeaders = require('../auth/helpers/redirect-with-app-bridge-headers.js');
7
+ var redirectToAuthPage = require('../helpers/redirect-to-auth-page.js');
8
+ var redirectWithAppBridgeHeaders = require('../helpers/redirect-with-app-bridge-headers.js');
10
9
 
11
10
  function requestBillingFactory(params, request, session) {
12
11
  return async function requestBilling({
@@ -3,9 +3,8 @@
3
3
  Object.defineProperty(exports, '__esModule', { value: true });
4
4
 
5
5
  var shopifyApi = require('@shopify/shopify-api');
6
- var redirectToAuthPage = require('../auth/helpers/redirect-to-auth-page.js');
6
+ var redirectToAuthPage = require('../helpers/redirect-to-auth-page.js');
7
7
  require('@remix-run/server-runtime');
8
- require('isbot');
9
8
 
10
9
  function requireBillingFactory(params, request, session) {
11
10
  const {
@@ -0,0 +1,39 @@
1
+ 'use strict';
2
+
3
+ Object.defineProperty(exports, '__esModule', { value: true });
4
+
5
+ var shopifyApi = require('@shopify/shopify-api');
6
+ var redirectToAuthPage = require('./redirect-to-auth-page.js');
7
+
8
+ function handleClientErrorFactory({
9
+ request
10
+ }) {
11
+ return async function handleClientError({
12
+ error,
13
+ params,
14
+ session
15
+ }) {
16
+ if (error instanceof shopifyApi.HttpResponseError !== true) {
17
+ params.logger.debug(`Got a response error from the API: ${error.message}`);
18
+ throw error;
19
+ }
20
+ params.logger.debug(`Got an HTTP response error from the API: ${error.message}`, {
21
+ code: error.response.code,
22
+ statusText: error.response.statusText,
23
+ body: JSON.stringify(error.response.body)
24
+ });
25
+ if (error.response.code === 401) {
26
+ throw await redirectToAuthPage.redirectToAuthPage(params, request, session.shop);
27
+ }
28
+
29
+ // forward a minimal copy of the upstream HTTP response instead of an Error:
30
+ throw new Response(JSON.stringify(error.response.body), {
31
+ status: error.response.code,
32
+ headers: {
33
+ 'Content-Type': error.response.headers['Content-Type']
34
+ }
35
+ });
36
+ };
37
+ }
38
+
39
+ exports.handleClientErrorFactory = handleClientErrorFactory;
@@ -7,11 +7,16 @@ var redirectWithExitiframe = require('./redirect-with-exitiframe.js');
7
7
  var redirectWithAppBridgeHeaders = require('./redirect-with-app-bridge-headers.js');
8
8
 
9
9
  async function redirectToAuthPage(params, request, shop, isOnline = false) {
10
+ const {
11
+ config
12
+ } = params;
10
13
  const url = new URL(request.url);
11
14
  const isEmbeddedRequest = url.searchParams.get('embedded') === '1';
12
15
  const isXhrRequest = request.headers.get('authorization');
13
16
  if (isXhrRequest) {
14
- redirectWithAppBridgeHeaders.redirectWithAppBridgeHeaders(params, shop);
17
+ const redirectUri = new URL(config.auth.path, config.appUrl);
18
+ redirectUri.searchParams.set('shop', shop);
19
+ redirectWithAppBridgeHeaders.redirectWithAppBridgeHeaders(redirectUri.toString());
15
20
  } else if (isEmbeddedRequest) {
16
21
  redirectWithExitiframe.redirectWithExitIframe(params, request, shop);
17
22
  } else {
@@ -2,13 +2,9 @@
2
2
 
3
3
  Object.defineProperty(exports, '__esModule', { value: true });
4
4
 
5
- var _const = require('../const.js');
5
+ var _const = require('../../const.js');
6
6
 
7
- function redirectWithAppBridgeHeaders(params, shop) {
8
- const {
9
- config
10
- } = params;
11
- const redirectUri = `${config.appUrl}${config.auth.path}?shop=${shop}`;
7
+ function redirectWithAppBridgeHeaders(redirectUri) {
12
8
  throw new Response(undefined, {
13
9
  status: 401,
14
10
  statusText: 'Unauthorized',
@@ -0,0 +1,67 @@
1
+ 'use strict';
2
+
3
+ Object.defineProperty(exports, '__esModule', { value: true });
4
+
5
+ var serverRuntime = require('@remix-run/server-runtime');
6
+ var getSessionTokenHeader = require('../../helpers/get-session-token-header.js');
7
+ var renderAppBridge = require('./render-app-bridge.js');
8
+ var redirectWithAppBridgeHeaders = require('./redirect-with-app-bridge-headers.js');
9
+
10
+ function redirectFactory(params, request) {
11
+ const {
12
+ config
13
+ } = params;
14
+ return function redirect(url, init) {
15
+ const {
16
+ searchParams
17
+ } = new URL(request.url);
18
+ const parsedUrl = new URL(url, config.appUrl);
19
+ const isSameOrigin = parsedUrl.origin === config.appUrl;
20
+ if (isSameOrigin || url.startsWith('/')) {
21
+ searchParams.forEach((value, key) => {
22
+ if (!parsedUrl.searchParams.has(key)) {
23
+ parsedUrl.searchParams.set(key, value);
24
+ }
25
+ });
26
+ }
27
+ const target = typeof init !== 'number' && (init === null || init === void 0 ? void 0 : init.target) || '_self';
28
+ if (target === '_self') {
29
+ if (isBounceRequest(request)) {
30
+ throw renderAppBridge.renderAppBridge(params, request, {
31
+ url: parsedUrl.toString(),
32
+ target
33
+ });
34
+ } else {
35
+ return serverRuntime.redirect(parsedUrl.toString(), init);
36
+ }
37
+ } else if (isDataRequest(request)) {
38
+ throw redirectWithAppBridgeHeaders.redirectWithAppBridgeHeaders(parsedUrl.toString());
39
+ } else if (isEmbeddedRequest(request)) {
40
+ throw renderAppBridge.renderAppBridge(params, request, {
41
+ url: parsedUrl.toString(),
42
+ target
43
+ });
44
+ }
45
+ return serverRuntime.redirect(url, init);
46
+ };
47
+ }
48
+ function isBounceRequest(request) {
49
+ return Boolean(getSessionTokenHeader.getSessionTokenHeader(request)) && request.headers.has('X-Shopify-Bounce');
50
+ }
51
+ function isDataRequest(request) {
52
+ const {
53
+ searchParams
54
+ } = new URL(request.url);
55
+ const isGet = request.method === 'GET';
56
+ const sessionTokenHeader = Boolean(getSessionTokenHeader.getSessionTokenHeader(request));
57
+ const sessionTokenSearchParam = searchParams.has('id_token');
58
+ return sessionTokenHeader && !sessionTokenSearchParam && !isBounceRequest(request) && (!isEmbeddedRequest(request) || !isGet);
59
+ }
60
+ function isEmbeddedRequest(request) {
61
+ const {
62
+ searchParams
63
+ } = new URL(request.url);
64
+ return searchParams.get('embedded') === '1';
65
+ }
66
+
67
+ exports.redirectFactory = redirectFactory;
@@ -0,0 +1,30 @@
1
+ 'use strict';
2
+
3
+ Object.defineProperty(exports, '__esModule', { value: true });
4
+
5
+ var appBridgeUrl = require('../../helpers/app-bridge-url.js');
6
+ var addResponseHeaders = require('../../helpers/add-response-headers.js');
7
+
8
+ function renderAppBridge({
9
+ config
10
+ }, request, redirectTo) {
11
+ let redirectToScript = '';
12
+ if (redirectTo) {
13
+ var _redirectTo$target;
14
+ const destination = new URL(redirectTo.url, config.appUrl);
15
+ const target = (_redirectTo$target = redirectTo.target) !== null && _redirectTo$target !== void 0 ? _redirectTo$target : '_top';
16
+ redirectToScript = `<script>window.open(${JSON.stringify(destination.toString())}, ${JSON.stringify(target)})</script>`;
17
+ }
18
+ const responseHeaders = new Headers({
19
+ 'content-type': 'text/html;charset=utf-8'
20
+ });
21
+ addResponseHeaders.addDocumentResponseHeaders(responseHeaders, config.isEmbeddedApp, new URL(request.url).searchParams.get('shop'));
22
+ throw new Response(`
23
+ <script data-api-key="${config.apiKey}" src="${appBridgeUrl.appBridgeUrl()}"></script>
24
+ ${redirectToScript}
25
+ `, {
26
+ headers: responseHeaders
27
+ });
28
+ }
29
+
30
+ exports.renderAppBridge = renderAppBridge;
@@ -4,7 +4,7 @@ Object.defineProperty(exports, '__esModule', { value: true });
4
4
 
5
5
  var _const = require('../const.js');
6
6
 
7
- function ensureCORSHeadersFactory(params, request) {
7
+ function ensureCORSHeadersFactory(params, request, corsHeaders = []) {
8
8
  const {
9
9
  logger,
10
10
  config
@@ -13,8 +13,9 @@ function ensureCORSHeadersFactory(params, request) {
13
13
  const origin = request.headers.get('Origin');
14
14
  if (origin && origin !== config.appUrl) {
15
15
  logger.debug('Request comes from a different origin, adding CORS headers');
16
+ const corsHeadersSet = new Set(['Authorization', 'Content-Type', ...corsHeaders]);
16
17
  response.headers.set('Access-Control-Allow-Origin', '*');
17
- response.headers.set('Access-Control-Allow-Headers', 'Authorization');
18
+ response.headers.set('Access-Control-Allow-Headers', [...corsHeadersSet].join(', '));
18
19
  response.headers.set('Access-Control-Expose-Headers', _const.REAUTH_URL_HEADER);
19
20
  }
20
21
  return response;
@@ -4,9 +4,9 @@ Object.defineProperty(exports, '__esModule', { value: true });
4
4
 
5
5
  var ensureCorsHeaders = require('./ensure-cors-headers.js');
6
6
 
7
- function respondToOptionsRequest(params, request) {
7
+ function respondToOptionsRequest(params, request, corsHeaders) {
8
8
  if (request.method === 'OPTIONS') {
9
- const ensureCORSHeaders = ensureCorsHeaders.ensureCORSHeadersFactory(params, request);
9
+ const ensureCORSHeaders = ensureCorsHeaders.ensureCORSHeadersFactory(params, request, corsHeaders);
10
10
  throw ensureCORSHeaders(new Response(null, {
11
11
  status: 204,
12
12
  headers: {
@@ -5,10 +5,14 @@ Object.defineProperty(exports, '__esModule', { value: true });
5
5
  async function validateSessionToken({
6
6
  api,
7
7
  logger
8
- }, token) {
8
+ }, token, {
9
+ checkAudience = true
10
+ } = {}) {
9
11
  logger.debug('Validating session token');
10
12
  try {
11
- const payload = await api.session.decodeSessionToken(token);
13
+ const payload = await api.session.decodeSessionToken(token, {
14
+ checkAudience
15
+ });
12
16
  logger.debug('Session token is valid', {
13
17
  payload: JSON.stringify(payload)
14
18
  });