@doswiftly/cli 0.1.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 (453) hide show
  1. package/README.md +357 -0
  2. package/bin/doswiftly.js +2 -0
  3. package/dist/commands/auth-github.d.ts +6 -0
  4. package/dist/commands/auth-github.d.ts.map +1 -0
  5. package/dist/commands/auth-github.js +89 -0
  6. package/dist/commands/auth-github.js.map +1 -0
  7. package/dist/commands/auth-token.d.ts +12 -0
  8. package/dist/commands/auth-token.d.ts.map +1 -0
  9. package/dist/commands/auth-token.js +43 -0
  10. package/dist/commands/auth-token.js.map +1 -0
  11. package/dist/commands/auth.d.ts +22 -0
  12. package/dist/commands/auth.d.ts.map +1 -0
  13. package/dist/commands/auth.js +348 -0
  14. package/dist/commands/auth.js.map +1 -0
  15. package/dist/commands/check.d.ts +5 -0
  16. package/dist/commands/check.d.ts.map +1 -0
  17. package/dist/commands/check.js +234 -0
  18. package/dist/commands/check.js.map +1 -0
  19. package/dist/commands/config.d.ts +3 -0
  20. package/dist/commands/config.d.ts.map +1 -0
  21. package/dist/commands/config.js +104 -0
  22. package/dist/commands/config.js.map +1 -0
  23. package/dist/commands/deploy.d.ts +37 -0
  24. package/dist/commands/deploy.d.ts.map +1 -0
  25. package/dist/commands/deploy.js +580 -0
  26. package/dist/commands/deploy.js.map +1 -0
  27. package/dist/commands/dev.d.ts +8 -0
  28. package/dist/commands/dev.d.ts.map +1 -0
  29. package/dist/commands/dev.js +83 -0
  30. package/dist/commands/dev.js.map +1 -0
  31. package/dist/commands/doctor.d.ts +5 -0
  32. package/dist/commands/doctor.d.ts.map +1 -0
  33. package/dist/commands/doctor.js +363 -0
  34. package/dist/commands/doctor.js.map +1 -0
  35. package/dist/commands/domain.d.ts +13 -0
  36. package/dist/commands/domain.d.ts.map +1 -0
  37. package/dist/commands/domain.js +128 -0
  38. package/dist/commands/domain.js.map +1 -0
  39. package/dist/commands/env.d.ts +25 -0
  40. package/dist/commands/env.d.ts.map +1 -0
  41. package/dist/commands/env.js +228 -0
  42. package/dist/commands/env.js.map +1 -0
  43. package/dist/commands/init.d.ts +11 -0
  44. package/dist/commands/init.d.ts.map +1 -0
  45. package/dist/commands/init.js +1028 -0
  46. package/dist/commands/init.js.map +1 -0
  47. package/dist/commands/inspect.d.ts +12 -0
  48. package/dist/commands/inspect.d.ts.map +1 -0
  49. package/dist/commands/inspect.js +162 -0
  50. package/dist/commands/inspect.js.map +1 -0
  51. package/dist/commands/migrate.d.ts +18 -0
  52. package/dist/commands/migrate.d.ts.map +1 -0
  53. package/dist/commands/migrate.js +355 -0
  54. package/dist/commands/migrate.js.map +1 -0
  55. package/dist/commands/preview.d.ts +29 -0
  56. package/dist/commands/preview.d.ts.map +1 -0
  57. package/dist/commands/preview.js +199 -0
  58. package/dist/commands/preview.js.map +1 -0
  59. package/dist/commands/proxy.d.ts +9 -0
  60. package/dist/commands/proxy.d.ts.map +1 -0
  61. package/dist/commands/proxy.js +37 -0
  62. package/dist/commands/proxy.js.map +1 -0
  63. package/dist/commands/sdk.d.ts +5 -0
  64. package/dist/commands/sdk.d.ts.map +1 -0
  65. package/dist/commands/sdk.js +82 -0
  66. package/dist/commands/sdk.js.map +1 -0
  67. package/dist/commands/template.d.ts +107 -0
  68. package/dist/commands/template.d.ts.map +1 -0
  69. package/dist/commands/template.js +1309 -0
  70. package/dist/commands/template.js.map +1 -0
  71. package/dist/commands/types.d.ts +5 -0
  72. package/dist/commands/types.d.ts.map +1 -0
  73. package/dist/commands/types.js +82 -0
  74. package/dist/commands/types.js.map +1 -0
  75. package/dist/commands/update.d.ts +2 -0
  76. package/dist/commands/update.d.ts.map +1 -0
  77. package/dist/commands/update.js +103 -0
  78. package/dist/commands/update.js.map +1 -0
  79. package/dist/commands/upgrade.d.ts +18 -0
  80. package/dist/commands/upgrade.d.ts.map +1 -0
  81. package/dist/commands/upgrade.js +55 -0
  82. package/dist/commands/upgrade.js.map +1 -0
  83. package/dist/commands/verify.d.ts +5 -0
  84. package/dist/commands/verify.d.ts.map +1 -0
  85. package/dist/commands/verify.js +232 -0
  86. package/dist/commands/verify.js.map +1 -0
  87. package/dist/commands/whoami.d.ts +5 -0
  88. package/dist/commands/whoami.d.ts.map +1 -0
  89. package/dist/commands/whoami.js +60 -0
  90. package/dist/commands/whoami.js.map +1 -0
  91. package/dist/config/types.d.ts +173 -0
  92. package/dist/config/types.d.ts.map +1 -0
  93. package/dist/config/types.js +48 -0
  94. package/dist/config/types.js.map +1 -0
  95. package/dist/index.d.ts +3 -0
  96. package/dist/index.d.ts.map +1 -0
  97. package/dist/index.js +416 -0
  98. package/dist/index.js.map +1 -0
  99. package/dist/lib/api-url.d.ts +14 -0
  100. package/dist/lib/api-url.d.ts.map +1 -0
  101. package/dist/lib/api-url.js +24 -0
  102. package/dist/lib/api-url.js.map +1 -0
  103. package/dist/lib/api.d.ts +67 -0
  104. package/dist/lib/api.d.ts.map +1 -0
  105. package/dist/lib/api.js +36 -0
  106. package/dist/lib/api.js.map +1 -0
  107. package/dist/lib/config.d.ts +39 -0
  108. package/dist/lib/config.d.ts.map +1 -0
  109. package/dist/lib/config.js +195 -0
  110. package/dist/lib/config.js.map +1 -0
  111. package/dist/lib/env-storage.d.ts +140 -0
  112. package/dist/lib/env-storage.d.ts.map +1 -0
  113. package/dist/lib/env-storage.js +464 -0
  114. package/dist/lib/env-storage.js.map +1 -0
  115. package/dist/lib/errors.d.ts +61 -0
  116. package/dist/lib/errors.d.ts.map +1 -0
  117. package/dist/lib/errors.js +204 -0
  118. package/dist/lib/errors.js.map +1 -0
  119. package/dist/lib/i18n.d.ts +99 -0
  120. package/dist/lib/i18n.d.ts.map +1 -0
  121. package/dist/lib/i18n.js +184 -0
  122. package/dist/lib/i18n.js.map +1 -0
  123. package/dist/lib/logger.d.ts +95 -0
  124. package/dist/lib/logger.d.ts.map +1 -0
  125. package/dist/lib/logger.js +168 -0
  126. package/dist/lib/logger.js.map +1 -0
  127. package/dist/lib/package-manager.d.ts +91 -0
  128. package/dist/lib/package-manager.d.ts.map +1 -0
  129. package/dist/lib/package-manager.js +205 -0
  130. package/dist/lib/package-manager.js.map +1 -0
  131. package/dist/lib/proxy-server.d.ts +24 -0
  132. package/dist/lib/proxy-server.d.ts.map +1 -0
  133. package/dist/lib/proxy-server.js +173 -0
  134. package/dist/lib/proxy-server.js.map +1 -0
  135. package/dist/lib/select-with-back.d.ts +34 -0
  136. package/dist/lib/select-with-back.d.ts.map +1 -0
  137. package/dist/lib/select-with-back.js +94 -0
  138. package/dist/lib/select-with-back.js.map +1 -0
  139. package/dist/lib/shared-api-client.d.ts +40 -0
  140. package/dist/lib/shared-api-client.d.ts.map +1 -0
  141. package/dist/lib/shared-api-client.js +92 -0
  142. package/dist/lib/shared-api-client.js.map +1 -0
  143. package/dist/lib/wizard-engine.d.ts +128 -0
  144. package/dist/lib/wizard-engine.d.ts.map +1 -0
  145. package/dist/lib/wizard-engine.js +168 -0
  146. package/dist/lib/wizard-engine.js.map +1 -0
  147. package/package.json +85 -0
  148. package/templates/storefront-minimal/.env.example +10 -0
  149. package/templates/storefront-minimal/.github/workflows/build-template.yml +109 -0
  150. package/templates/storefront-minimal/app/globals.css +18 -0
  151. package/templates/storefront-minimal/app/layout.tsx +26 -0
  152. package/templates/storefront-minimal/app/page.tsx +93 -0
  153. package/templates/storefront-minimal/lib/graphql-client.ts +23 -0
  154. package/templates/storefront-minimal/next.config.ts +15 -0
  155. package/templates/storefront-minimal/open-next.config.ts +3 -0
  156. package/templates/storefront-minimal/package.json +30 -0
  157. package/templates/storefront-minimal/postcss.config.mjs +5 -0
  158. package/templates/storefront-minimal/tailwind.config.ts +14 -0
  159. package/templates/storefront-minimal/tsconfig.json +27 -0
  160. package/templates/storefront-minimal/wrangler.toml +9 -0
  161. package/templates/storefront-nextjs/.env.example +68 -0
  162. package/templates/storefront-nextjs/.github/workflows/build-template.yml +109 -0
  163. package/templates/storefront-nextjs/.github/workflows/deploy.yml +25 -0
  164. package/templates/storefront-nextjs/.github/workflows/preview.yml +22 -0
  165. package/templates/storefront-nextjs/README.md +520 -0
  166. package/templates/storefront-nextjs/app/account/orders/page.tsx +216 -0
  167. package/templates/storefront-nextjs/app/account/page.tsx +167 -0
  168. package/templates/storefront-nextjs/app/auth/login/page.tsx +135 -0
  169. package/templates/storefront-nextjs/app/auth/register/page.tsx +228 -0
  170. package/templates/storefront-nextjs/app/cart/page.tsx +263 -0
  171. package/templates/storefront-nextjs/app/categories/[slug]/page.tsx +200 -0
  172. package/templates/storefront-nextjs/app/categories/page.tsx +58 -0
  173. package/templates/storefront-nextjs/app/checkout/page.tsx +351 -0
  174. package/templates/storefront-nextjs/app/collections/[slug]/page.tsx +158 -0
  175. package/templates/storefront-nextjs/app/collections/page.tsx +61 -0
  176. package/templates/storefront-nextjs/app/globals.css +98 -0
  177. package/templates/storefront-nextjs/app/layout.tsx +39 -0
  178. package/templates/storefront-nextjs/app/page.tsx +136 -0
  179. package/templates/storefront-nextjs/app/products/[slug]/page.tsx +119 -0
  180. package/templates/storefront-nextjs/app/products/page.tsx +107 -0
  181. package/templates/storefront-nextjs/app/search/page.tsx +127 -0
  182. package/templates/storefront-nextjs/components/auth/auth-guard.tsx +94 -0
  183. package/templates/storefront-nextjs/components/commerce/add-to-cart-button.tsx +77 -0
  184. package/templates/storefront-nextjs/components/commerce/cart-icon.tsx +29 -0
  185. package/templates/storefront-nextjs/components/commerce/currency-selector.tsx +217 -0
  186. package/templates/storefront-nextjs/components/commerce/pagination.tsx +62 -0
  187. package/templates/storefront-nextjs/components/commerce/product-actions.tsx +135 -0
  188. package/templates/storefront-nextjs/components/commerce/product-filters.tsx +109 -0
  189. package/templates/storefront-nextjs/components/commerce/product-price.tsx +375 -0
  190. package/templates/storefront-nextjs/components/commerce/search-input.tsx +178 -0
  191. package/templates/storefront-nextjs/components/commerce/sort-select.tsx +64 -0
  192. package/templates/storefront-nextjs/components/commerce/variant-selector.tsx +210 -0
  193. package/templates/storefront-nextjs/components/layout/footer.tsx +107 -0
  194. package/templates/storefront-nextjs/components/layout/header.tsx +104 -0
  195. package/templates/storefront-nextjs/components/providers.tsx +62 -0
  196. package/templates/storefront-nextjs/lib/auth/routes.ts +52 -0
  197. package/templates/storefront-nextjs/lib/currency.tsx +140 -0
  198. package/templates/storefront-nextjs/lib/format.ts +159 -0
  199. package/templates/storefront-nextjs/lib/graphql-queries.ts +629 -0
  200. package/templates/storefront-nextjs/lib/hooks.ts +30 -0
  201. package/templates/storefront-nextjs/middleware.ts +80 -0
  202. package/templates/storefront-nextjs/next.config.ts +37 -0
  203. package/templates/storefront-nextjs/open-next.config.ts +3 -0
  204. package/templates/storefront-nextjs/package.dev.json +30 -0
  205. package/templates/storefront-nextjs/package.json +32 -0
  206. package/templates/storefront-nextjs/package.json.template +32 -0
  207. package/templates/storefront-nextjs/postcss.config.mjs +8 -0
  208. package/templates/storefront-nextjs/tailwind.config.ts +111 -0
  209. package/templates/storefront-nextjs/tsconfig.json +27 -0
  210. package/templates/storefront-nextjs/wrangler.toml +9 -0
  211. package/templates/storefront-nextjs-shadcn/.env.example +68 -0
  212. package/templates/storefront-nextjs-shadcn/.github/workflows/build-template.yml +109 -0
  213. package/templates/storefront-nextjs-shadcn/.github/workflows/deploy.yml +25 -0
  214. package/templates/storefront-nextjs-shadcn/.github/workflows/preview.yml +22 -0
  215. package/templates/storefront-nextjs-shadcn/CART_INTEGRATION.md +282 -0
  216. package/templates/storefront-nextjs-shadcn/CLAUDE.md +96 -0
  217. package/templates/storefront-nextjs-shadcn/GRAPHQL_DOCUMENT_NAMES.md +190 -0
  218. package/templates/storefront-nextjs-shadcn/GRAPHQL_ERROR_HANDLING.md +263 -0
  219. package/templates/storefront-nextjs-shadcn/GRAPHQL_FIXES_SUMMARY.md +135 -0
  220. package/templates/storefront-nextjs-shadcn/GRAPHQL_INTEGRATION_COMPLETE.md +142 -0
  221. package/templates/storefront-nextjs-shadcn/INTEGRATION_CHECKLIST.md +448 -0
  222. package/templates/storefront-nextjs-shadcn/PRODUCT_DETAIL_PAGE_IMPLEMENTATION.md +307 -0
  223. package/templates/storefront-nextjs-shadcn/README.md +195 -0
  224. package/templates/storefront-nextjs-shadcn/THEME_CUSTOMIZATION.md +245 -0
  225. package/templates/storefront-nextjs-shadcn/app/about/page.tsx +34 -0
  226. package/templates/storefront-nextjs-shadcn/app/account/addresses/page.tsx +215 -0
  227. package/templates/storefront-nextjs-shadcn/app/account/loyalty/page.tsx +484 -0
  228. package/templates/storefront-nextjs-shadcn/app/account/orders/[id]/page.tsx +128 -0
  229. package/templates/storefront-nextjs-shadcn/app/account/orders/[id]/tracking/page.tsx +206 -0
  230. package/templates/storefront-nextjs-shadcn/app/account/orders/page.tsx +80 -0
  231. package/templates/storefront-nextjs-shadcn/app/account/page.tsx +107 -0
  232. package/templates/storefront-nextjs-shadcn/app/account/settings/page.tsx +195 -0
  233. package/templates/storefront-nextjs-shadcn/app/api/auth/clear-token/route.ts +87 -0
  234. package/templates/storefront-nextjs-shadcn/app/api/auth/set-token/route.ts +125 -0
  235. package/templates/storefront-nextjs-shadcn/app/auth/forgot-password/page.tsx +131 -0
  236. package/templates/storefront-nextjs-shadcn/app/auth/login/page.tsx +24 -0
  237. package/templates/storefront-nextjs-shadcn/app/auth/register/page.tsx +20 -0
  238. package/templates/storefront-nextjs-shadcn/app/blog/[slug]/page.tsx +323 -0
  239. package/templates/storefront-nextjs-shadcn/app/blog/page.tsx +159 -0
  240. package/templates/storefront-nextjs-shadcn/app/brands/[slug]/page.tsx +170 -0
  241. package/templates/storefront-nextjs-shadcn/app/brands/page.tsx +73 -0
  242. package/templates/storefront-nextjs-shadcn/app/cart/page.tsx +165 -0
  243. package/templates/storefront-nextjs-shadcn/app/categories/[slug]/page.tsx +78 -0
  244. package/templates/storefront-nextjs-shadcn/app/categories/page.tsx +75 -0
  245. package/templates/storefront-nextjs-shadcn/app/checkout/page.tsx +1752 -0
  246. package/templates/storefront-nextjs-shadcn/app/checkout/success/[orderId]/page.tsx +256 -0
  247. package/templates/storefront-nextjs-shadcn/app/collections/[handle]/page.tsx +74 -0
  248. package/templates/storefront-nextjs-shadcn/app/collections/page.tsx +75 -0
  249. package/templates/storefront-nextjs-shadcn/app/contact/page.tsx +114 -0
  250. package/templates/storefront-nextjs-shadcn/app/error.tsx +90 -0
  251. package/templates/storefront-nextjs-shadcn/app/globals.css +125 -0
  252. package/templates/storefront-nextjs-shadcn/app/layout.tsx +57 -0
  253. package/templates/storefront-nextjs-shadcn/app/not-found.tsx +68 -0
  254. package/templates/storefront-nextjs-shadcn/app/page.tsx +21 -0
  255. package/templates/storefront-nextjs-shadcn/app/products/[slug]/page.tsx +246 -0
  256. package/templates/storefront-nextjs-shadcn/app/products/[slug]/product-client.tsx +343 -0
  257. package/templates/storefront-nextjs-shadcn/app/products/page.tsx +25 -0
  258. package/templates/storefront-nextjs-shadcn/app/products/products-client.tsx +192 -0
  259. package/templates/storefront-nextjs-shadcn/app/returns/page.tsx +77 -0
  260. package/templates/storefront-nextjs-shadcn/app/robots.ts +53 -0
  261. package/templates/storefront-nextjs-shadcn/app/search/page.tsx +16 -0
  262. package/templates/storefront-nextjs-shadcn/app/search/search-client.tsx +47 -0
  263. package/templates/storefront-nextjs-shadcn/app/shipping/page.tsx +62 -0
  264. package/templates/storefront-nextjs-shadcn/app/sitemap.ts +144 -0
  265. package/templates/storefront-nextjs-shadcn/app/wishlist/page.tsx +179 -0
  266. package/templates/storefront-nextjs-shadcn/codegen.ts +51 -0
  267. package/templates/storefront-nextjs-shadcn/components/account/address-form.tsx +348 -0
  268. package/templates/storefront-nextjs-shadcn/components/account/address-list.tsx +144 -0
  269. package/templates/storefront-nextjs-shadcn/components/account/order-details.tsx +258 -0
  270. package/templates/storefront-nextjs-shadcn/components/account/order-history.tsx +107 -0
  271. package/templates/storefront-nextjs-shadcn/components/auth/account-menu.tsx +132 -0
  272. package/templates/storefront-nextjs-shadcn/components/auth/login-form.tsx +188 -0
  273. package/templates/storefront-nextjs-shadcn/components/auth/register-form.tsx +305 -0
  274. package/templates/storefront-nextjs-shadcn/components/blog/blog-card.tsx +240 -0
  275. package/templates/storefront-nextjs-shadcn/components/blog/blog-sidebar.tsx +177 -0
  276. package/templates/storefront-nextjs-shadcn/components/blog/index.ts +8 -0
  277. package/templates/storefront-nextjs-shadcn/components/brand/brand-card.tsx +119 -0
  278. package/templates/storefront-nextjs-shadcn/components/brand/brand-grid.tsx +64 -0
  279. package/templates/storefront-nextjs-shadcn/components/cart/cart-drawer.tsx +140 -0
  280. package/templates/storefront-nextjs-shadcn/components/cart/cart-icon.tsx +48 -0
  281. package/templates/storefront-nextjs-shadcn/components/cart/cart-item.tsx +112 -0
  282. package/templates/storefront-nextjs-shadcn/components/cart/cart-summary.tsx +84 -0
  283. package/templates/storefront-nextjs-shadcn/components/cart/index.ts +17 -0
  284. package/templates/storefront-nextjs-shadcn/components/cart/promo-code-input.tsx +121 -0
  285. package/templates/storefront-nextjs-shadcn/components/cart/shipping-estimator.tsx +162 -0
  286. package/templates/storefront-nextjs-shadcn/components/checkout/index.ts +25 -0
  287. package/templates/storefront-nextjs-shadcn/components/checkout/payment-method-card.tsx +187 -0
  288. package/templates/storefront-nextjs-shadcn/components/checkout/payment-step.tsx +160 -0
  289. package/templates/storefront-nextjs-shadcn/components/checkout/tax-breakdown.tsx +154 -0
  290. package/templates/storefront-nextjs-shadcn/components/commerce/currency-selector.tsx +225 -0
  291. package/templates/storefront-nextjs-shadcn/components/commerce/pagination.tsx +62 -0
  292. package/templates/storefront-nextjs-shadcn/components/commerce/product-actions.tsx +158 -0
  293. package/templates/storefront-nextjs-shadcn/components/commerce/search-input.tsx +174 -0
  294. package/templates/storefront-nextjs-shadcn/components/commerce/variant-selector.tsx +210 -0
  295. package/templates/storefront-nextjs-shadcn/components/common/category-card.tsx +97 -0
  296. package/templates/storefront-nextjs-shadcn/components/common/collection-card.tsx +187 -0
  297. package/templates/storefront-nextjs-shadcn/components/common/price-display.tsx +151 -0
  298. package/templates/storefront-nextjs-shadcn/components/common/social-share.tsx +166 -0
  299. package/templates/storefront-nextjs-shadcn/components/discount/discount-breakdown.tsx +245 -0
  300. package/templates/storefront-nextjs-shadcn/components/discount/discount-code-input.tsx +246 -0
  301. package/templates/storefront-nextjs-shadcn/components/discount/index.ts +19 -0
  302. package/templates/storefront-nextjs-shadcn/components/error/error-boundary.tsx +113 -0
  303. package/templates/storefront-nextjs-shadcn/components/error/index.ts +7 -0
  304. package/templates/storefront-nextjs-shadcn/components/filters/attribute-filter.tsx +153 -0
  305. package/templates/storefront-nextjs-shadcn/components/filters/checkbox-group-filter.tsx +167 -0
  306. package/templates/storefront-nextjs-shadcn/components/filters/color-swatch-filter.tsx +176 -0
  307. package/templates/storefront-nextjs-shadcn/components/filters/dynamic-attribute-filters.tsx +220 -0
  308. package/templates/storefront-nextjs-shadcn/components/filters/index.ts +36 -0
  309. package/templates/storefront-nextjs-shadcn/components/filters/range-slider-filter.tsx +193 -0
  310. package/templates/storefront-nextjs-shadcn/components/filters/toggle-filter.tsx +132 -0
  311. package/templates/storefront-nextjs-shadcn/components/gift-card/gift-card-balance.tsx +321 -0
  312. package/templates/storefront-nextjs-shadcn/components/gift-card/gift-card-input.tsx +309 -0
  313. package/templates/storefront-nextjs-shadcn/components/gift-card/index.ts +24 -0
  314. package/templates/storefront-nextjs-shadcn/components/home/category-grid.tsx +72 -0
  315. package/templates/storefront-nextjs-shadcn/components/home/featured-collections.tsx +107 -0
  316. package/templates/storefront-nextjs-shadcn/components/home/featured-products.tsx +85 -0
  317. package/templates/storefront-nextjs-shadcn/components/home/hero-section.tsx +34 -0
  318. package/templates/storefront-nextjs-shadcn/components/home/index.ts +8 -0
  319. package/templates/storefront-nextjs-shadcn/components/home/newsletter-signup.tsx +108 -0
  320. package/templates/storefront-nextjs-shadcn/components/layout/breadcrumbs.tsx +133 -0
  321. package/templates/storefront-nextjs-shadcn/components/layout/currency-selector.tsx +341 -0
  322. package/templates/storefront-nextjs-shadcn/components/layout/footer.tsx +128 -0
  323. package/templates/storefront-nextjs-shadcn/components/layout/header.tsx +147 -0
  324. package/templates/storefront-nextjs-shadcn/components/layout/index.ts +9 -0
  325. package/templates/storefront-nextjs-shadcn/components/layout/mobile-menu.tsx +211 -0
  326. package/templates/storefront-nextjs-shadcn/components/layout/navigation.tsx +95 -0
  327. package/templates/storefront-nextjs-shadcn/components/layout/theme-switcher.tsx +192 -0
  328. package/templates/storefront-nextjs-shadcn/components/loyalty/index.ts +11 -0
  329. package/templates/storefront-nextjs-shadcn/components/loyalty/points-balance.tsx +93 -0
  330. package/templates/storefront-nextjs-shadcn/components/loyalty/points-history.tsx +177 -0
  331. package/templates/storefront-nextjs-shadcn/components/loyalty/referral-section.tsx +250 -0
  332. package/templates/storefront-nextjs-shadcn/components/loyalty/rewards-catalog.tsx +217 -0
  333. package/templates/storefront-nextjs-shadcn/components/loyalty/tier-badge.tsx +106 -0
  334. package/templates/storefront-nextjs-shadcn/components/loyalty/tier-progress.tsx +131 -0
  335. package/templates/storefront-nextjs-shadcn/components/order/delivery-estimate.tsx +196 -0
  336. package/templates/storefront-nextjs-shadcn/components/order/index.ts +11 -0
  337. package/templates/storefront-nextjs-shadcn/components/order/order-tracking.tsx +200 -0
  338. package/templates/storefront-nextjs-shadcn/components/order/shipment-card.tsx +407 -0
  339. package/templates/storefront-nextjs-shadcn/components/order/tracking-status.tsx +222 -0
  340. package/templates/storefront-nextjs-shadcn/components/order/tracking-timeline.tsx +205 -0
  341. package/templates/storefront-nextjs-shadcn/components/product/add-to-cart-button.tsx +161 -0
  342. package/templates/storefront-nextjs-shadcn/components/product/b2b-price-display.tsx +250 -0
  343. package/templates/storefront-nextjs-shadcn/components/product/discount-badge.tsx +196 -0
  344. package/templates/storefront-nextjs-shadcn/components/product/index.ts +41 -0
  345. package/templates/storefront-nextjs-shadcn/components/product/product-card.tsx +147 -0
  346. package/templates/storefront-nextjs-shadcn/components/product/product-filters.tsx +217 -0
  347. package/templates/storefront-nextjs-shadcn/components/product/product-gallery.tsx +143 -0
  348. package/templates/storefront-nextjs-shadcn/components/product/product-grid.tsx +83 -0
  349. package/templates/storefront-nextjs-shadcn/components/product/product-image.tsx +155 -0
  350. package/templates/storefront-nextjs-shadcn/components/product/product-price.tsx +158 -0
  351. package/templates/storefront-nextjs-shadcn/components/product/product-quantity-selector.tsx +111 -0
  352. package/templates/storefront-nextjs-shadcn/components/product/product-reviews.tsx +238 -0
  353. package/templates/storefront-nextjs-shadcn/components/product/product-sort.tsx +58 -0
  354. package/templates/storefront-nextjs-shadcn/components/product/product-variant-selector.tsx +169 -0
  355. package/templates/storefront-nextjs-shadcn/components/product/review-card.tsx +220 -0
  356. package/templates/storefront-nextjs-shadcn/components/product/review-form.tsx +338 -0
  357. package/templates/storefront-nextjs-shadcn/components/product/review-summary.tsx +143 -0
  358. package/templates/storefront-nextjs-shadcn/components/product/sale-countdown.tsx +166 -0
  359. package/templates/storefront-nextjs-shadcn/components/product/savings-display.tsx +213 -0
  360. package/templates/storefront-nextjs-shadcn/components/product/similar-products.tsx +57 -0
  361. package/templates/storefront-nextjs-shadcn/components/product/stock-indicator.tsx +91 -0
  362. package/templates/storefront-nextjs-shadcn/components/providers/currency-provider.tsx +103 -0
  363. package/templates/storefront-nextjs-shadcn/components/providers/index.ts +8 -0
  364. package/templates/storefront-nextjs-shadcn/components/providers/query-provider.tsx +260 -0
  365. package/templates/storefront-nextjs-shadcn/components/providers/theme-provider.tsx +13 -0
  366. package/templates/storefront-nextjs-shadcn/components/returns/index.ts +26 -0
  367. package/templates/storefront-nextjs-shadcn/components/returns/return-request-form.tsx +608 -0
  368. package/templates/storefront-nextjs-shadcn/components/returns/return-status-card.tsx +554 -0
  369. package/templates/storefront-nextjs-shadcn/components/search/index.ts +8 -0
  370. package/templates/storefront-nextjs-shadcn/components/search/search-bar.tsx +140 -0
  371. package/templates/storefront-nextjs-shadcn/components/search/search-results.tsx +58 -0
  372. package/templates/storefront-nextjs-shadcn/components/search/search-suggestions.tsx +43 -0
  373. package/templates/storefront-nextjs-shadcn/components/seo/index.ts +12 -0
  374. package/templates/storefront-nextjs-shadcn/components/seo/json-ld.tsx +56 -0
  375. package/templates/storefront-nextjs-shadcn/components/seo/product-json-ld.ts +167 -0
  376. package/templates/storefront-nextjs-shadcn/components/shipping/index.ts +16 -0
  377. package/templates/storefront-nextjs-shadcn/components/shipping/shipping-method-selector.tsx +337 -0
  378. package/templates/storefront-nextjs-shadcn/components/ui/accordion.tsx +153 -0
  379. package/templates/storefront-nextjs-shadcn/components/ui/alert.tsx +59 -0
  380. package/templates/storefront-nextjs-shadcn/components/ui/badge.tsx +34 -0
  381. package/templates/storefront-nextjs-shadcn/components/ui/button.tsx +51 -0
  382. package/templates/storefront-nextjs-shadcn/components/ui/card.tsx +77 -0
  383. package/templates/storefront-nextjs-shadcn/components/ui/checkbox.tsx +30 -0
  384. package/templates/storefront-nextjs-shadcn/components/ui/dialog.tsx +137 -0
  385. package/templates/storefront-nextjs-shadcn/components/ui/empty-state.tsx +207 -0
  386. package/templates/storefront-nextjs-shadcn/components/ui/index.ts +67 -0
  387. package/templates/storefront-nextjs-shadcn/components/ui/input.tsx +65 -0
  388. package/templates/storefront-nextjs-shadcn/components/ui/label.tsx +26 -0
  389. package/templates/storefront-nextjs-shadcn/components/ui/pagination.tsx +205 -0
  390. package/templates/storefront-nextjs-shadcn/components/ui/radio-group.tsx +44 -0
  391. package/templates/storefront-nextjs-shadcn/components/ui/select.tsx +160 -0
  392. package/templates/storefront-nextjs-shadcn/components/ui/separator.tsx +28 -0
  393. package/templates/storefront-nextjs-shadcn/components/ui/skeleton.tsx +20 -0
  394. package/templates/storefront-nextjs-shadcn/components/ui/spinner.tsx +82 -0
  395. package/templates/storefront-nextjs-shadcn/components/ui/tabs.tsx +119 -0
  396. package/templates/storefront-nextjs-shadcn/components/ui/toast.tsx +96 -0
  397. package/templates/storefront-nextjs-shadcn/components/wishlist/index.ts +9 -0
  398. package/templates/storefront-nextjs-shadcn/components/wishlist/wishlist-button.tsx +148 -0
  399. package/templates/storefront-nextjs-shadcn/components/wishlist/wishlist-icon.tsx +47 -0
  400. package/templates/storefront-nextjs-shadcn/components/wishlist/wishlist-item.tsx +165 -0
  401. package/templates/storefront-nextjs-shadcn/components.json +19 -0
  402. package/templates/storefront-nextjs-shadcn/generated/.gitkeep +2 -0
  403. package/templates/storefront-nextjs-shadcn/graphql/.gitkeep +31 -0
  404. package/templates/storefront-nextjs-shadcn/graphql/collections.example.ts +168 -0
  405. package/templates/storefront-nextjs-shadcn/graphql/products.example.ts +160 -0
  406. package/templates/storefront-nextjs-shadcn/hooks/index.ts +9 -0
  407. package/templates/storefront-nextjs-shadcn/hooks/use-auth.ts +310 -0
  408. package/templates/storefront-nextjs-shadcn/hooks/use-cart-actions.ts +286 -0
  409. package/templates/storefront-nextjs-shadcn/hooks/use-cart-sync.ts +110 -0
  410. package/templates/storefront-nextjs-shadcn/hooks/use-filter-params.test.ts +173 -0
  411. package/templates/storefront-nextjs-shadcn/hooks/use-filter-params.ts +298 -0
  412. package/templates/storefront-nextjs-shadcn/lib/auth/cookies.ts +220 -0
  413. package/templates/storefront-nextjs-shadcn/lib/auth/routes.ts +57 -0
  414. package/templates/storefront-nextjs-shadcn/lib/config.ts +46 -0
  415. package/templates/storefront-nextjs-shadcn/lib/currency/IMPLEMENTATION_SUMMARY.md +254 -0
  416. package/templates/storefront-nextjs-shadcn/lib/currency/README.md +464 -0
  417. package/templates/storefront-nextjs-shadcn/lib/currency/cookie-manager.test.ts +328 -0
  418. package/templates/storefront-nextjs-shadcn/lib/currency/cookie-manager.ts +295 -0
  419. package/templates/storefront-nextjs-shadcn/lib/currency/index.ts +27 -0
  420. package/templates/storefront-nextjs-shadcn/lib/format.test.ts +397 -0
  421. package/templates/storefront-nextjs-shadcn/lib/format.ts +226 -0
  422. package/templates/storefront-nextjs-shadcn/lib/graphql/client.ts +109 -0
  423. package/templates/storefront-nextjs-shadcn/lib/graphql/hooks.ts +1183 -0
  424. package/templates/storefront-nextjs-shadcn/lib/graphql/server.ts +267 -0
  425. package/templates/storefront-nextjs-shadcn/lib/hooks.ts +30 -0
  426. package/templates/storefront-nextjs-shadcn/lib/theme/theme-config.ts +89 -0
  427. package/templates/storefront-nextjs-shadcn/lib/utils.ts +6 -0
  428. package/templates/storefront-nextjs-shadcn/next.config.ts +47 -0
  429. package/templates/storefront-nextjs-shadcn/open-next.config.ts +3 -0
  430. package/templates/storefront-nextjs-shadcn/package.dev.json +30 -0
  431. package/templates/storefront-nextjs-shadcn/package.json +60 -0
  432. package/templates/storefront-nextjs-shadcn/package.json.template +46 -0
  433. package/templates/storefront-nextjs-shadcn/postcss.config.mjs +8 -0
  434. package/templates/storefront-nextjs-shadcn/proxy.ts +80 -0
  435. package/templates/storefront-nextjs-shadcn/public/icons/payment/apple-pay.svg +8 -0
  436. package/templates/storefront-nextjs-shadcn/public/icons/payment/bank-transfer.svg +10 -0
  437. package/templates/storefront-nextjs-shadcn/public/icons/payment/blik.svg +6 -0
  438. package/templates/storefront-nextjs-shadcn/public/icons/payment/cash-on-delivery.svg +11 -0
  439. package/templates/storefront-nextjs-shadcn/public/icons/payment/google-pay.svg +11 -0
  440. package/templates/storefront-nextjs-shadcn/public/icons/payment/mastercard.svg +7 -0
  441. package/templates/storefront-nextjs-shadcn/public/icons/payment/paypal.svg +7 -0
  442. package/templates/storefront-nextjs-shadcn/public/icons/payment/payu.svg +7 -0
  443. package/templates/storefront-nextjs-shadcn/public/icons/payment/przelewy24.svg +7 -0
  444. package/templates/storefront-nextjs-shadcn/public/icons/payment/stripe.svg +4 -0
  445. package/templates/storefront-nextjs-shadcn/public/icons/payment/visa.svg +5 -0
  446. package/templates/storefront-nextjs-shadcn/stores/auth-store.ts +66 -0
  447. package/templates/storefront-nextjs-shadcn/stores/cart-store.ts +56 -0
  448. package/templates/storefront-nextjs-shadcn/stores/checkout-store.ts +184 -0
  449. package/templates/storefront-nextjs-shadcn/stores/currency-store.ts +103 -0
  450. package/templates/storefront-nextjs-shadcn/stores/wishlist-store.ts +291 -0
  451. package/templates/storefront-nextjs-shadcn/tailwind.config.ts +111 -0
  452. package/templates/storefront-nextjs-shadcn/tsconfig.json +27 -0
  453. package/templates/storefront-nextjs-shadcn/wrangler.toml +9 -0
package/README.md ADDED
@@ -0,0 +1,357 @@
1
+ # @doswiftly/cli
2
+
3
+ Official CLI for building e-commerce storefronts powered by DoSwiftly Commerce API.
4
+
5
+ ## Who is this for?
6
+
7
+ This CLI is designed for **storefront developers** - developers building custom Next.js e-commerce applications using the DoSwiftly Commerce platform. If you're a merchant or business owner, you'll work with a developer who uses this tool.
8
+
9
+ ## Installation
10
+
11
+ ```bash
12
+ # Install globally
13
+ npm install -g @doswiftly/cli
14
+
15
+ # Or use with npx (no installation needed)
16
+ npx @doswiftly/cli init my-shop
17
+ ```
18
+
19
+ ## Quick Start
20
+
21
+ ```bash
22
+ # 1. Create a new storefront project
23
+ doswiftly init my-shop
24
+
25
+ # 2. Navigate to project
26
+ cd my-shop
27
+
28
+ # 3. Configure environment (API URL, Shop credentials)
29
+ doswiftly env add
30
+
31
+ # 4. Login to DoSwiftly
32
+ doswiftly auth login
33
+
34
+ # 5. Verify connection to DoSwiftly Commerce API
35
+ doswiftly verify
36
+
37
+ # 6. Start development server
38
+ doswiftly dev
39
+ ```
40
+
41
+ Your storefront will be running at `http://localhost:3000` and connected to DoSwiftly Commerce API.
42
+
43
+ ## Commands
44
+
45
+ ### Essential Commands
46
+
47
+ | Command | Description |
48
+ | ----------------------- | -------------------------------------- |
49
+ | `doswiftly init [name]` | Create a new storefront project |
50
+ | `doswiftly dev` | Start development server |
51
+ | `doswiftly whoami` | Show current user, project, and env |
52
+ | `doswiftly doctor` | Check project health and configuration |
53
+ | `doswiftly check` | Run linting and type checking |
54
+ | `doswiftly update` | Check for CLI updates |
55
+
56
+ ### Authentication
57
+
58
+ | Command | Description |
59
+ | ----------------------- | ---------------------------------------- |
60
+ | `doswiftly auth login` | Login to DoSwiftly (OAuth in browser) |
61
+ | `doswiftly auth logout` | Logout from DoSwiftly |
62
+ | `doswiftly auth github` | Connect GitHub account via device flow |
63
+ | `doswiftly auth token` | Generate a deploy token for CI/CD |
64
+
65
+ ### Environment Management
66
+
67
+ | Command | Description |
68
+ | -------------------------------- | ---------------------------------------------- |
69
+ | `doswiftly env list` | List all environment profiles |
70
+ | `doswiftly env add [name]` | Add new environment profile (dev/staging/prod) |
71
+ | `doswiftly env use [name]` | Switch active environment profile |
72
+ | `doswiftly env generate` | Generate .env.local from active profile |
73
+ | `doswiftly env set <key> <value>`| Set a custom variable on active profile |
74
+ | `doswiftly env delete [name]` | Delete environment profile |
75
+ | `doswiftly verify` | Verify API connectivity and credentials |
76
+
77
+ ### Configuration
78
+
79
+ | Command | Description |
80
+ | ------------------------------------- | ---------------------------------- |
81
+ | `doswiftly config pull` | Refresh configuration from API |
82
+ | `doswiftly config show` | Display current configuration |
83
+ | `doswiftly config domain add <host>` | Add a custom domain to the shop |
84
+ | `doswiftly config domain remove <host>`| Remove a custom domain |
85
+ | `doswiftly config domain list` | List all custom domains |
86
+
87
+ ### Commerce SDK
88
+
89
+ | Command | Description |
90
+ | ----------------------- | -------------------------------------- |
91
+ | `doswiftly sdk version` | Check Commerce SDK version and updates |
92
+
93
+ The `@doswiftly/commerce-sdk` package is published on npm with all types included:
94
+
95
+ ```bash
96
+ # Install SDK
97
+ pnpm add @doswiftly/commerce-sdk
98
+
99
+ # Update to latest
100
+ pnpm update @doswiftly/commerce-sdk@latest
101
+ ```
102
+
103
+ ### Deployment
104
+
105
+ | Command | Description |
106
+ | -------------------------------- | ----------------------------- |
107
+ | `doswiftly deploy run` | Deploy storefront (default) |
108
+ | `doswiftly deploy status [id]` | Check deployment status |
109
+ | `doswiftly deploy rollback [id]` | Rollback to previous version |
110
+ | `doswiftly deploy logs <id>` | View deployment logs |
111
+
112
+ Deploy flags:
113
+
114
+ ```bash
115
+ # Deploy to production (default)
116
+ doswiftly deploy run
117
+
118
+ # Deploy as staging
119
+ doswiftly deploy run --type STAGING
120
+
121
+ # Deploy specific branch
122
+ doswiftly deploy run --branch feature/new-checkout
123
+
124
+ # Deploy with message
125
+ doswiftly deploy run --message "Release v2.0"
126
+ ```
127
+
128
+ ### Preview Environments
129
+
130
+ | Command | Description |
131
+ | ----------------------------- | ----------------------------------- |
132
+ | `doswiftly preview create` | Create preview deployment (default) |
133
+ | `doswiftly preview list` | List all preview deployments |
134
+ | `doswiftly preview stop <id>` | Stop preview deployment |
135
+ | `doswiftly preview logs <id>` | View preview build logs |
136
+ | `doswiftly preview open <id>` | Open preview URL in browser |
137
+
138
+ Preview flags:
139
+
140
+ ```bash
141
+ # Create preview from current branch
142
+ doswiftly preview create
143
+
144
+ # Specific branch with custom TTL (default: 168h / 7 days)
145
+ doswiftly preview create --branch feature/checkout --ttl 48
146
+ ```
147
+
148
+ ### Debugging & Development
149
+
150
+ | Command | Description |
151
+ | ------------------------------ | ----------------------------------------------- |
152
+ | `doswiftly inspect <endpoint>` | Test API endpoint (like curl for DoSwiftly API) |
153
+ | `doswiftly proxy` | Start local proxy with request/response logging |
154
+
155
+ ### Template Updates
156
+
157
+ | Command | Description |
158
+ | ------------------------- | ------------------------------------------- |
159
+ | `doswiftly upgrade` | Check for and apply template updates |
160
+ | `doswiftly migrate check` | Check for template updates |
161
+ | `doswiftly migrate apply` | Apply pending template migrations |
162
+ | `doswiftly migrate diff` | Show differences between local and template |
163
+
164
+ ## Global Options
165
+
166
+ ```bash
167
+ --verbose # Detailed logging
168
+ --quiet # Errors only
169
+ --version # Show CLI version
170
+ --help # Show help
171
+ ```
172
+
173
+ ## Usage Examples
174
+
175
+ ### Creating a New Storefront
176
+
177
+ ```bash
178
+ # Basic usage
179
+ doswiftly init my-shop
180
+
181
+ # With specific package manager
182
+ doswiftly init my-shop --pm yarn
183
+
184
+ # With UI library selection
185
+ doswiftly init my-shop --ui-library shadcn
186
+
187
+ # Dry run (preview without changes)
188
+ doswiftly init my-shop --dry-run
189
+ ```
190
+
191
+ ### Working with Commerce SDK
192
+
193
+ The Commerce SDK provides a **GraphQL-based** storefront API and admin REST API:
194
+
195
+ ```typescript
196
+ // Storefront API (GraphQL) — for public-facing storefronts
197
+ import { createStorefrontClient } from "@doswiftly/commerce-sdk";
198
+
199
+ const client = createStorefrontClient({
200
+ storefrontUrl: `${process.env.NEXT_PUBLIC_API_URL}/storefront/graphql`,
201
+ storefrontAccessToken: "public-token",
202
+ });
203
+
204
+ // Use auto-generated GraphQL documents
205
+ import { GetProductByHandleDocument } from "@doswiftly/commerce-sdk/graphql";
206
+
207
+ const { data } = await client.query(GetProductByHandleDocument, {
208
+ variables: { handle: "awesome-product" },
209
+ });
210
+ ```
211
+
212
+ ### Testing API Endpoints
213
+
214
+ ```bash
215
+ # GET request
216
+ doswiftly inspect /v1/commerce/products
217
+
218
+ # POST with body
219
+ doswiftly inspect /v1/commerce/cart -X POST -d '{"productId":"123"}'
220
+
221
+ # With custom headers
222
+ doswiftly inspect /v1/commerce/orders -H "Authorization:Bearer token"
223
+
224
+ # Verbose mode (full request/response)
225
+ doswiftly inspect /v1/commerce/products -v
226
+ ```
227
+
228
+ ### Local Development with Proxy
229
+
230
+ ```bash
231
+ # Start proxy on default port 3001
232
+ doswiftly proxy
233
+
234
+ # Custom port
235
+ doswiftly proxy -p 4000
236
+ ```
237
+
238
+ The proxy logs all requests/responses, useful for debugging API interactions.
239
+
240
+ ---
241
+
242
+ ## Requirements
243
+
244
+ - Node.js >= 18
245
+ - Package manager: pnpm, npm, yarn, or bun
246
+ - DoSwiftly Commerce account
247
+
248
+ ---
249
+
250
+ ## Project Configuration
251
+
252
+ ### doswiftly.config.ts
253
+
254
+ ```typescript
255
+ import { defineConfig } from "@doswiftly/cli";
256
+
257
+ export default defineConfig({
258
+ shop: {
259
+ slug: "my-shop",
260
+ },
261
+ project: {
262
+ name: "My Storefront",
263
+ },
264
+ api: {
265
+ url: "https://api.doswiftly.pl",
266
+ },
267
+ dev: {
268
+ port: 3000,
269
+ openBrowser: true,
270
+ },
271
+ });
272
+ ```
273
+
274
+ ### Environment Variables (.env.local)
275
+
276
+ ```env
277
+ # Required (auto-generated by `doswiftly env generate`)
278
+ NEXT_PUBLIC_API_URL=https://api.doswiftly.pl
279
+ NEXT_PUBLIC_SHOP_SLUG=my-shop
280
+ ```
281
+
282
+ ---
283
+
284
+ ## How It Works
285
+
286
+ 1. **DoSwiftly Commerce API** - Backend SaaS platform hosting your product catalog, orders, customers, etc.
287
+ 2. **@doswiftly/commerce-sdk** - TypeScript SDK with GraphQL storefront API and full type safety
288
+ 3. **Your Storefront** - Next.js app you build, using the Commerce SDK to fetch data
289
+ 4. **This CLI** - Tools to scaffold, develop, and deploy your storefront
290
+
291
+ ```
292
+ ┌─────────────────────┐
293
+ │ Your Storefront │
294
+ │ (Next.js + SDK) │ ← You build this
295
+ └──────────┬──────────┘
296
+ │ uses @doswiftly/commerce-sdk (GraphQL)
297
+
298
+ ┌─────────────────────┐
299
+ │ DoSwiftly Commerce │
300
+ │ API │ ← Managed by DoSwiftly
301
+ └─────────────────────┘
302
+ ```
303
+
304
+ ---
305
+
306
+ ## Troubleshooting
307
+
308
+ ### "No active environment profile"
309
+
310
+ You need to configure an environment first:
311
+
312
+ ```bash
313
+ doswiftly env add
314
+ ```
315
+
316
+ ### "Not in a DoSwiftly project directory"
317
+
318
+ Make sure you're in a directory with `doswiftly.config.ts`:
319
+
320
+ ```bash
321
+ # Create new project first
322
+ doswiftly init my-shop
323
+ cd my-shop
324
+ ```
325
+
326
+ ### "API error: 401 Unauthorized"
327
+
328
+ Check your credentials:
329
+
330
+ ```bash
331
+ doswiftly auth login # Re-authenticate
332
+ doswiftly verify # Test connection
333
+ ```
334
+
335
+ ### Build or type errors
336
+
337
+ Run diagnostics:
338
+
339
+ ```bash
340
+ doswiftly doctor # Full health check
341
+ doswiftly check # Linting + type checking
342
+ ```
343
+
344
+ ### Commerce SDK version mismatch
345
+
346
+ Update to latest SDK:
347
+
348
+ ```bash
349
+ doswiftly sdk version # Check version
350
+ pnpm update @doswiftly/commerce-sdk@latest
351
+ ```
352
+
353
+ ---
354
+
355
+ ## License
356
+
357
+ MIT
@@ -0,0 +1,2 @@
1
+ #!/usr/bin/env node
2
+ import "../dist/index.js";
@@ -0,0 +1,6 @@
1
+ /**
2
+ * GitHub device flow authentication.
3
+ * Requests a device code, displays the user code, and polls for the access token.
4
+ */
5
+ export declare function authGithubCommand(): Promise<void>;
6
+ //# sourceMappingURL=auth-github.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"auth-github.d.ts","sourceRoot":"","sources":["../../src/commands/auth-github.ts"],"names":[],"mappings":"AAwBA;;;GAGG;AACH,wBAAsB,iBAAiB,kBAsDtC"}
@@ -0,0 +1,89 @@
1
+ import chalk from 'chalk';
2
+ import ora from 'ora';
3
+ import axios from 'axios';
4
+ import { getActiveProfile, updateActiveProfile } from '../lib/env-storage.js';
5
+ import { logger } from '../lib/logger.js';
6
+ const GITHUB_CLIENT_ID = process.env.GITHUB_CLI_CLIENT_ID || '';
7
+ const DEVICE_CODE_URL = 'https://github.com/login/device/code';
8
+ const ACCESS_TOKEN_URL = 'https://github.com/login/oauth/access_token';
9
+ /**
10
+ * GitHub device flow authentication.
11
+ * Requests a device code, displays the user code, and polls for the access token.
12
+ */
13
+ export async function authGithubCommand() {
14
+ console.log(chalk.bold.blue('\nDoSwiftly CLI - GitHub Authentication\n'));
15
+ if (!GITHUB_CLIENT_ID) {
16
+ console.log(chalk.red(' GitHub CLI integration is not configured.\n'));
17
+ console.log(chalk.gray(' Set GITHUB_CLI_CLIENT_ID environment variable.\n'));
18
+ process.exit(1);
19
+ }
20
+ const profile = getActiveProfile();
21
+ if (!profile) {
22
+ console.log(chalk.red(' No active profile. Run "doswiftly env add" first.\n'));
23
+ process.exit(1);
24
+ }
25
+ const spinner = ora('Requesting device code from GitHub...').start();
26
+ try {
27
+ // Step 1: Request device code
28
+ const deviceResponse = await axios.post(DEVICE_CODE_URL, { client_id: GITHUB_CLIENT_ID, scope: 'repo' }, { headers: { Accept: 'application/json' } });
29
+ const { device_code, user_code, verification_uri, interval } = deviceResponse.data;
30
+ spinner.stop();
31
+ console.log(chalk.bold('\n Open this URL in your browser:\n'));
32
+ console.log(` ${chalk.cyan(verification_uri)}\n`);
33
+ console.log(chalk.bold(` Enter this code: ${chalk.green.bold(user_code)}\n`));
34
+ // Step 2: Poll for access token
35
+ spinner.start('Waiting for authorization...');
36
+ const token = await pollForToken(device_code, interval);
37
+ if (!token) {
38
+ spinner.fail('Authorization expired or was denied');
39
+ process.exit(1);
40
+ }
41
+ // Step 3: Store the GitHub token in the active profile
42
+ updateActiveProfile({ githubToken: token });
43
+ spinner.succeed('GitHub connected successfully');
44
+ console.log(chalk.green('\n GitHub token stored in your active profile.\n'));
45
+ console.log(chalk.gray(' You can now use GitHub features in DoSwiftly CLI.\n'));
46
+ }
47
+ catch (error) {
48
+ spinner.fail('GitHub authentication failed');
49
+ console.log(chalk.red(`\n${error.message}\n`));
50
+ process.exit(1);
51
+ }
52
+ }
53
+ async function pollForToken(deviceCode, interval) {
54
+ const maxAttempts = 60; // ~5 minutes at 5s intervals
55
+ let attempts = 0;
56
+ while (attempts < maxAttempts) {
57
+ await new Promise(resolve => setTimeout(resolve, (interval || 5) * 1000));
58
+ try {
59
+ const response = await axios.post(ACCESS_TOKEN_URL, {
60
+ client_id: GITHUB_CLIENT_ID,
61
+ device_code: deviceCode,
62
+ grant_type: 'urn:ietf:params:oauth:grant-type:device_code',
63
+ }, { headers: { Accept: 'application/json' } });
64
+ if (response.data.access_token) {
65
+ return response.data.access_token;
66
+ }
67
+ if (response.data.error === 'authorization_pending') {
68
+ attempts++;
69
+ continue;
70
+ }
71
+ if (response.data.error === 'slow_down') {
72
+ // Increase polling interval
73
+ await new Promise(resolve => setTimeout(resolve, 5000));
74
+ attempts++;
75
+ continue;
76
+ }
77
+ if (response.data.error === 'expired_token' || response.data.error === 'access_denied') {
78
+ return null;
79
+ }
80
+ logger.debug(`GitHub poll error: ${response.data.error}`);
81
+ }
82
+ catch {
83
+ // Network errors — retry
84
+ }
85
+ attempts++;
86
+ }
87
+ return null;
88
+ }
89
+ //# sourceMappingURL=auth-github.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"auth-github.js","sourceRoot":"","sources":["../../src/commands/auth-github.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,12 @@
1
+ /**
2
+ * Generate a deploy token for CI/CD usage.
3
+ * Deploy tokens have a 1-year TTL and deploy-only scope.
4
+ *
5
+ * Usage in CI:
6
+ * export DOSWIFTLY_DEPLOY_TOKEN=<token>
7
+ * doswiftly deploy
8
+ */
9
+ export declare function authTokenCommand(options?: {
10
+ deploy?: boolean;
11
+ }): Promise<void>;
12
+ //# sourceMappingURL=auth-token.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"auth-token.d.ts","sourceRoot":"","sources":["../../src/commands/auth-token.ts"],"names":[],"mappings":"AAWA;;;;;;;GAOG;AACH,wBAAsB,gBAAgB,CAAC,OAAO,GAAE;IAAE,MAAM,CAAC,EAAE,OAAO,CAAA;CAAO,iBAkCxE"}
@@ -0,0 +1,43 @@
1
+ import chalk from 'chalk';
2
+ import ora from 'ora';
3
+ import { createSharedApiClient } from '../lib/shared-api-client.js';
4
+ /**
5
+ * Generate a deploy token for CI/CD usage.
6
+ * Deploy tokens have a 1-year TTL and deploy-only scope.
7
+ *
8
+ * Usage in CI:
9
+ * export DOSWIFTLY_DEPLOY_TOKEN=<token>
10
+ * doswiftly deploy
11
+ */
12
+ export async function authTokenCommand(options = {}) {
13
+ console.log(chalk.bold.blue('\nDoSwiftly CLI - Generate Token\n'));
14
+ if (!options.deploy) {
15
+ console.log(chalk.yellow(' Use --deploy to generate a deploy token for CI/CD.\n'));
16
+ console.log(chalk.gray(' Example: doswiftly auth token --deploy\n'));
17
+ return;
18
+ }
19
+ const spinner = ora('Generating deploy token...').start();
20
+ try {
21
+ // Deploy token is platform-level, doesn't require shop config
22
+ const client = createSharedApiClient({ requireShopSlug: false });
23
+ const response = await client.post('/cli/auth/deploy-token', {
24
+ scope: 'deploy',
25
+ ttlDays: 365,
26
+ });
27
+ spinner.succeed('Deploy token generated');
28
+ console.log(chalk.bold('\n Your deploy token (shown only once):\n'));
29
+ console.log(` ${chalk.green(response.data.token)}\n`);
30
+ console.log(chalk.bold(' Usage in CI/CD:\n'));
31
+ console.log(chalk.gray(' export DOSWIFTLY_DEPLOY_TOKEN=<token above>'));
32
+ console.log(chalk.gray(' doswiftly deploy\n'));
33
+ console.log(chalk.gray(` Expires: ${new Date(response.data.expiresAt).toLocaleDateString()}`));
34
+ console.log(chalk.gray(` Scope: ${response.data.scope}\n`));
35
+ console.log(chalk.yellow(' Store this token securely — it will not be shown again.\n'));
36
+ }
37
+ catch (error) {
38
+ spinner.fail('Failed to generate deploy token');
39
+ console.log(chalk.red(`\n${error.message}\n`));
40
+ process.exit(1);
41
+ }
42
+ }
43
+ //# sourceMappingURL=auth-token.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"auth-token.js","sourceRoot":"","sources":["../../src/commands/auth-token.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,GAAG,MAAM,KAAK,CAAC;AACtB,OAAO,EAAE,qBAAqB,EAAE,MAAM,6BAA6B,CAAC;AASpE;;;;;;;GAOG;AACH,MAAM,CAAC,KAAK,UAAU,gBAAgB,CAAC,UAAgC,EAAE;IACvE,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,oCAAoC,CAAC,CAAC,CAAC;IAEnE,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC;QACpB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,wDAAwD,CAAC,CAAC,CAAC;QACpF,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,4CAA4C,CAAC,CAAC,CAAC;QACtE,OAAO;IACT,CAAC;IAED,MAAM,OAAO,GAAG,GAAG,CAAC,4BAA4B,CAAC,CAAC,KAAK,EAAE,CAAC;IAE1D,IAAI,CAAC;QACH,8DAA8D;QAC9D,MAAM,MAAM,GAAG,qBAAqB,CAAC,EAAE,eAAe,EAAE,KAAK,EAAE,CAAC,CAAC;QACjE,MAAM,QAAQ,GAAG,MAAM,MAAM,CAAC,IAAI,CAAsB,wBAAwB,EAAE;YAChF,KAAK,EAAE,QAAQ;YACf,OAAO,EAAE,GAAG;SACb,CAAC,CAAC;QAEH,OAAO,CAAC,OAAO,CAAC,wBAAwB,CAAC,CAAC;QAE1C,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,4CAA4C,CAAC,CAAC,CAAC;QACtE,OAAO,CAAC,GAAG,CAAC,OAAO,KAAK,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QACzD,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,qBAAqB,CAAC,CAAC,CAAC;QAC/C,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,iDAAiD,CAAC,CAAC,CAAC;QAC3E,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,wBAAwB,CAAC,CAAC,CAAC;QAClD,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,cAAc,IAAI,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,kBAAkB,EAAE,EAAE,CAAC,CAAC,CAAC;QAChG,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,cAAc,QAAQ,CAAC,IAAI,CAAC,KAAK,IAAI,CAAC,CAAC,CAAC;QAC/D,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,6DAA6D,CAAC,CAAC,CAAC;IAC3F,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,CAAC,IAAI,CAAC,iCAAiC,CAAC,CAAC;QAChD,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,KAAM,KAAe,CAAC,OAAO,IAAI,CAAC,CAAC,CAAC;QAC1D,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;AACH,CAAC"}
@@ -0,0 +1,22 @@
1
+ export declare function authLoginCommand(profileName?: string): Promise<void>;
2
+ export declare function authLogoutCommand(profileName?: string): Promise<void>;
3
+ /**
4
+ * Get the stored token from the active profile.
5
+ * Returns null if not logged in or token expired.
6
+ * Shows warning if token is expired.
7
+ */
8
+ export declare function getStoredToken(): string | null;
9
+ /**
10
+ * Get the stored user role from the active profile.
11
+ * Returns null if not logged in or role is not stored.
12
+ */
13
+ export declare function getStoredRole(): string | null;
14
+ /**
15
+ * Check auth state without side effects (no warnings printed).
16
+ * Used for command visibility decisions (e.g. hiding SaaS-dev commands).
17
+ */
18
+ export declare function getAuthStateSilent(): {
19
+ isLoggedIn: boolean;
20
+ isSaasDeveloper: boolean;
21
+ };
22
+ //# sourceMappingURL=auth.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"auth.d.ts","sourceRoot":"","sources":["../../src/commands/auth.ts"],"names":[],"mappings":"AAkCA,wBAAsB,gBAAgB,CAAC,WAAW,CAAC,EAAE,MAAM,iBA4R1D;AAED,wBAAsB,iBAAiB,CAAC,WAAW,CAAC,EAAE,MAAM,iBA2C3D;AAED;;;;GAIG;AACH,wBAAgB,cAAc,IAAI,MAAM,GAAG,IAAI,CAgB9C;AAED;;;GAGG;AACH,wBAAgB,aAAa,IAAI,MAAM,GAAG,IAAI,CAM7C;AAED;;;GAGG;AACH,wBAAgB,kBAAkB,IAAI;IAAE,UAAU,EAAE,OAAO,CAAC;IAAC,eAAe,EAAE,OAAO,CAAA;CAAE,CAEtF"}