@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.
- package/README.md +357 -0
- package/bin/doswiftly.js +2 -0
- package/dist/commands/auth-github.d.ts +6 -0
- package/dist/commands/auth-github.d.ts.map +1 -0
- package/dist/commands/auth-github.js +89 -0
- package/dist/commands/auth-github.js.map +1 -0
- package/dist/commands/auth-token.d.ts +12 -0
- package/dist/commands/auth-token.d.ts.map +1 -0
- package/dist/commands/auth-token.js +43 -0
- package/dist/commands/auth-token.js.map +1 -0
- package/dist/commands/auth.d.ts +22 -0
- package/dist/commands/auth.d.ts.map +1 -0
- package/dist/commands/auth.js +348 -0
- package/dist/commands/auth.js.map +1 -0
- package/dist/commands/check.d.ts +5 -0
- package/dist/commands/check.d.ts.map +1 -0
- package/dist/commands/check.js +234 -0
- package/dist/commands/check.js.map +1 -0
- package/dist/commands/config.d.ts +3 -0
- package/dist/commands/config.d.ts.map +1 -0
- package/dist/commands/config.js +104 -0
- package/dist/commands/config.js.map +1 -0
- package/dist/commands/deploy.d.ts +37 -0
- package/dist/commands/deploy.d.ts.map +1 -0
- package/dist/commands/deploy.js +580 -0
- package/dist/commands/deploy.js.map +1 -0
- package/dist/commands/dev.d.ts +8 -0
- package/dist/commands/dev.d.ts.map +1 -0
- package/dist/commands/dev.js +83 -0
- package/dist/commands/dev.js.map +1 -0
- package/dist/commands/doctor.d.ts +5 -0
- package/dist/commands/doctor.d.ts.map +1 -0
- package/dist/commands/doctor.js +363 -0
- package/dist/commands/doctor.js.map +1 -0
- package/dist/commands/domain.d.ts +13 -0
- package/dist/commands/domain.d.ts.map +1 -0
- package/dist/commands/domain.js +128 -0
- package/dist/commands/domain.js.map +1 -0
- package/dist/commands/env.d.ts +25 -0
- package/dist/commands/env.d.ts.map +1 -0
- package/dist/commands/env.js +228 -0
- package/dist/commands/env.js.map +1 -0
- package/dist/commands/init.d.ts +11 -0
- package/dist/commands/init.d.ts.map +1 -0
- package/dist/commands/init.js +1028 -0
- package/dist/commands/init.js.map +1 -0
- package/dist/commands/inspect.d.ts +12 -0
- package/dist/commands/inspect.d.ts.map +1 -0
- package/dist/commands/inspect.js +162 -0
- package/dist/commands/inspect.js.map +1 -0
- package/dist/commands/migrate.d.ts +18 -0
- package/dist/commands/migrate.d.ts.map +1 -0
- package/dist/commands/migrate.js +355 -0
- package/dist/commands/migrate.js.map +1 -0
- package/dist/commands/preview.d.ts +29 -0
- package/dist/commands/preview.d.ts.map +1 -0
- package/dist/commands/preview.js +199 -0
- package/dist/commands/preview.js.map +1 -0
- package/dist/commands/proxy.d.ts +9 -0
- package/dist/commands/proxy.d.ts.map +1 -0
- package/dist/commands/proxy.js +37 -0
- package/dist/commands/proxy.js.map +1 -0
- package/dist/commands/sdk.d.ts +5 -0
- package/dist/commands/sdk.d.ts.map +1 -0
- package/dist/commands/sdk.js +82 -0
- package/dist/commands/sdk.js.map +1 -0
- package/dist/commands/template.d.ts +107 -0
- package/dist/commands/template.d.ts.map +1 -0
- package/dist/commands/template.js +1309 -0
- package/dist/commands/template.js.map +1 -0
- package/dist/commands/types.d.ts +5 -0
- package/dist/commands/types.d.ts.map +1 -0
- package/dist/commands/types.js +82 -0
- package/dist/commands/types.js.map +1 -0
- package/dist/commands/update.d.ts +2 -0
- package/dist/commands/update.d.ts.map +1 -0
- package/dist/commands/update.js +103 -0
- package/dist/commands/update.js.map +1 -0
- package/dist/commands/upgrade.d.ts +18 -0
- package/dist/commands/upgrade.d.ts.map +1 -0
- package/dist/commands/upgrade.js +55 -0
- package/dist/commands/upgrade.js.map +1 -0
- package/dist/commands/verify.d.ts +5 -0
- package/dist/commands/verify.d.ts.map +1 -0
- package/dist/commands/verify.js +232 -0
- package/dist/commands/verify.js.map +1 -0
- package/dist/commands/whoami.d.ts +5 -0
- package/dist/commands/whoami.d.ts.map +1 -0
- package/dist/commands/whoami.js +60 -0
- package/dist/commands/whoami.js.map +1 -0
- package/dist/config/types.d.ts +173 -0
- package/dist/config/types.d.ts.map +1 -0
- package/dist/config/types.js +48 -0
- package/dist/config/types.js.map +1 -0
- package/dist/index.d.ts +3 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +416 -0
- package/dist/index.js.map +1 -0
- package/dist/lib/api-url.d.ts +14 -0
- package/dist/lib/api-url.d.ts.map +1 -0
- package/dist/lib/api-url.js +24 -0
- package/dist/lib/api-url.js.map +1 -0
- package/dist/lib/api.d.ts +67 -0
- package/dist/lib/api.d.ts.map +1 -0
- package/dist/lib/api.js +36 -0
- package/dist/lib/api.js.map +1 -0
- package/dist/lib/config.d.ts +39 -0
- package/dist/lib/config.d.ts.map +1 -0
- package/dist/lib/config.js +195 -0
- package/dist/lib/config.js.map +1 -0
- package/dist/lib/env-storage.d.ts +140 -0
- package/dist/lib/env-storage.d.ts.map +1 -0
- package/dist/lib/env-storage.js +464 -0
- package/dist/lib/env-storage.js.map +1 -0
- package/dist/lib/errors.d.ts +61 -0
- package/dist/lib/errors.d.ts.map +1 -0
- package/dist/lib/errors.js +204 -0
- package/dist/lib/errors.js.map +1 -0
- package/dist/lib/i18n.d.ts +99 -0
- package/dist/lib/i18n.d.ts.map +1 -0
- package/dist/lib/i18n.js +184 -0
- package/dist/lib/i18n.js.map +1 -0
- package/dist/lib/logger.d.ts +95 -0
- package/dist/lib/logger.d.ts.map +1 -0
- package/dist/lib/logger.js +168 -0
- package/dist/lib/logger.js.map +1 -0
- package/dist/lib/package-manager.d.ts +91 -0
- package/dist/lib/package-manager.d.ts.map +1 -0
- package/dist/lib/package-manager.js +205 -0
- package/dist/lib/package-manager.js.map +1 -0
- package/dist/lib/proxy-server.d.ts +24 -0
- package/dist/lib/proxy-server.d.ts.map +1 -0
- package/dist/lib/proxy-server.js +173 -0
- package/dist/lib/proxy-server.js.map +1 -0
- package/dist/lib/select-with-back.d.ts +34 -0
- package/dist/lib/select-with-back.d.ts.map +1 -0
- package/dist/lib/select-with-back.js +94 -0
- package/dist/lib/select-with-back.js.map +1 -0
- package/dist/lib/shared-api-client.d.ts +40 -0
- package/dist/lib/shared-api-client.d.ts.map +1 -0
- package/dist/lib/shared-api-client.js +92 -0
- package/dist/lib/shared-api-client.js.map +1 -0
- package/dist/lib/wizard-engine.d.ts +128 -0
- package/dist/lib/wizard-engine.d.ts.map +1 -0
- package/dist/lib/wizard-engine.js +168 -0
- package/dist/lib/wizard-engine.js.map +1 -0
- package/package.json +85 -0
- package/templates/storefront-minimal/.env.example +10 -0
- package/templates/storefront-minimal/.github/workflows/build-template.yml +109 -0
- package/templates/storefront-minimal/app/globals.css +18 -0
- package/templates/storefront-minimal/app/layout.tsx +26 -0
- package/templates/storefront-minimal/app/page.tsx +93 -0
- package/templates/storefront-minimal/lib/graphql-client.ts +23 -0
- package/templates/storefront-minimal/next.config.ts +15 -0
- package/templates/storefront-minimal/open-next.config.ts +3 -0
- package/templates/storefront-minimal/package.json +30 -0
- package/templates/storefront-minimal/postcss.config.mjs +5 -0
- package/templates/storefront-minimal/tailwind.config.ts +14 -0
- package/templates/storefront-minimal/tsconfig.json +27 -0
- package/templates/storefront-minimal/wrangler.toml +9 -0
- package/templates/storefront-nextjs/.env.example +68 -0
- package/templates/storefront-nextjs/.github/workflows/build-template.yml +109 -0
- package/templates/storefront-nextjs/.github/workflows/deploy.yml +25 -0
- package/templates/storefront-nextjs/.github/workflows/preview.yml +22 -0
- package/templates/storefront-nextjs/README.md +520 -0
- package/templates/storefront-nextjs/app/account/orders/page.tsx +216 -0
- package/templates/storefront-nextjs/app/account/page.tsx +167 -0
- package/templates/storefront-nextjs/app/auth/login/page.tsx +135 -0
- package/templates/storefront-nextjs/app/auth/register/page.tsx +228 -0
- package/templates/storefront-nextjs/app/cart/page.tsx +263 -0
- package/templates/storefront-nextjs/app/categories/[slug]/page.tsx +200 -0
- package/templates/storefront-nextjs/app/categories/page.tsx +58 -0
- package/templates/storefront-nextjs/app/checkout/page.tsx +351 -0
- package/templates/storefront-nextjs/app/collections/[slug]/page.tsx +158 -0
- package/templates/storefront-nextjs/app/collections/page.tsx +61 -0
- package/templates/storefront-nextjs/app/globals.css +98 -0
- package/templates/storefront-nextjs/app/layout.tsx +39 -0
- package/templates/storefront-nextjs/app/page.tsx +136 -0
- package/templates/storefront-nextjs/app/products/[slug]/page.tsx +119 -0
- package/templates/storefront-nextjs/app/products/page.tsx +107 -0
- package/templates/storefront-nextjs/app/search/page.tsx +127 -0
- package/templates/storefront-nextjs/components/auth/auth-guard.tsx +94 -0
- package/templates/storefront-nextjs/components/commerce/add-to-cart-button.tsx +77 -0
- package/templates/storefront-nextjs/components/commerce/cart-icon.tsx +29 -0
- package/templates/storefront-nextjs/components/commerce/currency-selector.tsx +217 -0
- package/templates/storefront-nextjs/components/commerce/pagination.tsx +62 -0
- package/templates/storefront-nextjs/components/commerce/product-actions.tsx +135 -0
- package/templates/storefront-nextjs/components/commerce/product-filters.tsx +109 -0
- package/templates/storefront-nextjs/components/commerce/product-price.tsx +375 -0
- package/templates/storefront-nextjs/components/commerce/search-input.tsx +178 -0
- package/templates/storefront-nextjs/components/commerce/sort-select.tsx +64 -0
- package/templates/storefront-nextjs/components/commerce/variant-selector.tsx +210 -0
- package/templates/storefront-nextjs/components/layout/footer.tsx +107 -0
- package/templates/storefront-nextjs/components/layout/header.tsx +104 -0
- package/templates/storefront-nextjs/components/providers.tsx +62 -0
- package/templates/storefront-nextjs/lib/auth/routes.ts +52 -0
- package/templates/storefront-nextjs/lib/currency.tsx +140 -0
- package/templates/storefront-nextjs/lib/format.ts +159 -0
- package/templates/storefront-nextjs/lib/graphql-queries.ts +629 -0
- package/templates/storefront-nextjs/lib/hooks.ts +30 -0
- package/templates/storefront-nextjs/middleware.ts +80 -0
- package/templates/storefront-nextjs/next.config.ts +37 -0
- package/templates/storefront-nextjs/open-next.config.ts +3 -0
- package/templates/storefront-nextjs/package.dev.json +30 -0
- package/templates/storefront-nextjs/package.json +32 -0
- package/templates/storefront-nextjs/package.json.template +32 -0
- package/templates/storefront-nextjs/postcss.config.mjs +8 -0
- package/templates/storefront-nextjs/tailwind.config.ts +111 -0
- package/templates/storefront-nextjs/tsconfig.json +27 -0
- package/templates/storefront-nextjs/wrangler.toml +9 -0
- package/templates/storefront-nextjs-shadcn/.env.example +68 -0
- package/templates/storefront-nextjs-shadcn/.github/workflows/build-template.yml +109 -0
- package/templates/storefront-nextjs-shadcn/.github/workflows/deploy.yml +25 -0
- package/templates/storefront-nextjs-shadcn/.github/workflows/preview.yml +22 -0
- package/templates/storefront-nextjs-shadcn/CART_INTEGRATION.md +282 -0
- package/templates/storefront-nextjs-shadcn/CLAUDE.md +96 -0
- package/templates/storefront-nextjs-shadcn/GRAPHQL_DOCUMENT_NAMES.md +190 -0
- package/templates/storefront-nextjs-shadcn/GRAPHQL_ERROR_HANDLING.md +263 -0
- package/templates/storefront-nextjs-shadcn/GRAPHQL_FIXES_SUMMARY.md +135 -0
- package/templates/storefront-nextjs-shadcn/GRAPHQL_INTEGRATION_COMPLETE.md +142 -0
- package/templates/storefront-nextjs-shadcn/INTEGRATION_CHECKLIST.md +448 -0
- package/templates/storefront-nextjs-shadcn/PRODUCT_DETAIL_PAGE_IMPLEMENTATION.md +307 -0
- package/templates/storefront-nextjs-shadcn/README.md +195 -0
- package/templates/storefront-nextjs-shadcn/THEME_CUSTOMIZATION.md +245 -0
- package/templates/storefront-nextjs-shadcn/app/about/page.tsx +34 -0
- package/templates/storefront-nextjs-shadcn/app/account/addresses/page.tsx +215 -0
- package/templates/storefront-nextjs-shadcn/app/account/loyalty/page.tsx +484 -0
- package/templates/storefront-nextjs-shadcn/app/account/orders/[id]/page.tsx +128 -0
- package/templates/storefront-nextjs-shadcn/app/account/orders/[id]/tracking/page.tsx +206 -0
- package/templates/storefront-nextjs-shadcn/app/account/orders/page.tsx +80 -0
- package/templates/storefront-nextjs-shadcn/app/account/page.tsx +107 -0
- package/templates/storefront-nextjs-shadcn/app/account/settings/page.tsx +195 -0
- package/templates/storefront-nextjs-shadcn/app/api/auth/clear-token/route.ts +87 -0
- package/templates/storefront-nextjs-shadcn/app/api/auth/set-token/route.ts +125 -0
- package/templates/storefront-nextjs-shadcn/app/auth/forgot-password/page.tsx +131 -0
- package/templates/storefront-nextjs-shadcn/app/auth/login/page.tsx +24 -0
- package/templates/storefront-nextjs-shadcn/app/auth/register/page.tsx +20 -0
- package/templates/storefront-nextjs-shadcn/app/blog/[slug]/page.tsx +323 -0
- package/templates/storefront-nextjs-shadcn/app/blog/page.tsx +159 -0
- package/templates/storefront-nextjs-shadcn/app/brands/[slug]/page.tsx +170 -0
- package/templates/storefront-nextjs-shadcn/app/brands/page.tsx +73 -0
- package/templates/storefront-nextjs-shadcn/app/cart/page.tsx +165 -0
- package/templates/storefront-nextjs-shadcn/app/categories/[slug]/page.tsx +78 -0
- package/templates/storefront-nextjs-shadcn/app/categories/page.tsx +75 -0
- package/templates/storefront-nextjs-shadcn/app/checkout/page.tsx +1752 -0
- package/templates/storefront-nextjs-shadcn/app/checkout/success/[orderId]/page.tsx +256 -0
- package/templates/storefront-nextjs-shadcn/app/collections/[handle]/page.tsx +74 -0
- package/templates/storefront-nextjs-shadcn/app/collections/page.tsx +75 -0
- package/templates/storefront-nextjs-shadcn/app/contact/page.tsx +114 -0
- package/templates/storefront-nextjs-shadcn/app/error.tsx +90 -0
- package/templates/storefront-nextjs-shadcn/app/globals.css +125 -0
- package/templates/storefront-nextjs-shadcn/app/layout.tsx +57 -0
- package/templates/storefront-nextjs-shadcn/app/not-found.tsx +68 -0
- package/templates/storefront-nextjs-shadcn/app/page.tsx +21 -0
- package/templates/storefront-nextjs-shadcn/app/products/[slug]/page.tsx +246 -0
- package/templates/storefront-nextjs-shadcn/app/products/[slug]/product-client.tsx +343 -0
- package/templates/storefront-nextjs-shadcn/app/products/page.tsx +25 -0
- package/templates/storefront-nextjs-shadcn/app/products/products-client.tsx +192 -0
- package/templates/storefront-nextjs-shadcn/app/returns/page.tsx +77 -0
- package/templates/storefront-nextjs-shadcn/app/robots.ts +53 -0
- package/templates/storefront-nextjs-shadcn/app/search/page.tsx +16 -0
- package/templates/storefront-nextjs-shadcn/app/search/search-client.tsx +47 -0
- package/templates/storefront-nextjs-shadcn/app/shipping/page.tsx +62 -0
- package/templates/storefront-nextjs-shadcn/app/sitemap.ts +144 -0
- package/templates/storefront-nextjs-shadcn/app/wishlist/page.tsx +179 -0
- package/templates/storefront-nextjs-shadcn/codegen.ts +51 -0
- package/templates/storefront-nextjs-shadcn/components/account/address-form.tsx +348 -0
- package/templates/storefront-nextjs-shadcn/components/account/address-list.tsx +144 -0
- package/templates/storefront-nextjs-shadcn/components/account/order-details.tsx +258 -0
- package/templates/storefront-nextjs-shadcn/components/account/order-history.tsx +107 -0
- package/templates/storefront-nextjs-shadcn/components/auth/account-menu.tsx +132 -0
- package/templates/storefront-nextjs-shadcn/components/auth/login-form.tsx +188 -0
- package/templates/storefront-nextjs-shadcn/components/auth/register-form.tsx +305 -0
- package/templates/storefront-nextjs-shadcn/components/blog/blog-card.tsx +240 -0
- package/templates/storefront-nextjs-shadcn/components/blog/blog-sidebar.tsx +177 -0
- package/templates/storefront-nextjs-shadcn/components/blog/index.ts +8 -0
- package/templates/storefront-nextjs-shadcn/components/brand/brand-card.tsx +119 -0
- package/templates/storefront-nextjs-shadcn/components/brand/brand-grid.tsx +64 -0
- package/templates/storefront-nextjs-shadcn/components/cart/cart-drawer.tsx +140 -0
- package/templates/storefront-nextjs-shadcn/components/cart/cart-icon.tsx +48 -0
- package/templates/storefront-nextjs-shadcn/components/cart/cart-item.tsx +112 -0
- package/templates/storefront-nextjs-shadcn/components/cart/cart-summary.tsx +84 -0
- package/templates/storefront-nextjs-shadcn/components/cart/index.ts +17 -0
- package/templates/storefront-nextjs-shadcn/components/cart/promo-code-input.tsx +121 -0
- package/templates/storefront-nextjs-shadcn/components/cart/shipping-estimator.tsx +162 -0
- package/templates/storefront-nextjs-shadcn/components/checkout/index.ts +25 -0
- package/templates/storefront-nextjs-shadcn/components/checkout/payment-method-card.tsx +187 -0
- package/templates/storefront-nextjs-shadcn/components/checkout/payment-step.tsx +160 -0
- package/templates/storefront-nextjs-shadcn/components/checkout/tax-breakdown.tsx +154 -0
- package/templates/storefront-nextjs-shadcn/components/commerce/currency-selector.tsx +225 -0
- package/templates/storefront-nextjs-shadcn/components/commerce/pagination.tsx +62 -0
- package/templates/storefront-nextjs-shadcn/components/commerce/product-actions.tsx +158 -0
- package/templates/storefront-nextjs-shadcn/components/commerce/search-input.tsx +174 -0
- package/templates/storefront-nextjs-shadcn/components/commerce/variant-selector.tsx +210 -0
- package/templates/storefront-nextjs-shadcn/components/common/category-card.tsx +97 -0
- package/templates/storefront-nextjs-shadcn/components/common/collection-card.tsx +187 -0
- package/templates/storefront-nextjs-shadcn/components/common/price-display.tsx +151 -0
- package/templates/storefront-nextjs-shadcn/components/common/social-share.tsx +166 -0
- package/templates/storefront-nextjs-shadcn/components/discount/discount-breakdown.tsx +245 -0
- package/templates/storefront-nextjs-shadcn/components/discount/discount-code-input.tsx +246 -0
- package/templates/storefront-nextjs-shadcn/components/discount/index.ts +19 -0
- package/templates/storefront-nextjs-shadcn/components/error/error-boundary.tsx +113 -0
- package/templates/storefront-nextjs-shadcn/components/error/index.ts +7 -0
- package/templates/storefront-nextjs-shadcn/components/filters/attribute-filter.tsx +153 -0
- package/templates/storefront-nextjs-shadcn/components/filters/checkbox-group-filter.tsx +167 -0
- package/templates/storefront-nextjs-shadcn/components/filters/color-swatch-filter.tsx +176 -0
- package/templates/storefront-nextjs-shadcn/components/filters/dynamic-attribute-filters.tsx +220 -0
- package/templates/storefront-nextjs-shadcn/components/filters/index.ts +36 -0
- package/templates/storefront-nextjs-shadcn/components/filters/range-slider-filter.tsx +193 -0
- package/templates/storefront-nextjs-shadcn/components/filters/toggle-filter.tsx +132 -0
- package/templates/storefront-nextjs-shadcn/components/gift-card/gift-card-balance.tsx +321 -0
- package/templates/storefront-nextjs-shadcn/components/gift-card/gift-card-input.tsx +309 -0
- package/templates/storefront-nextjs-shadcn/components/gift-card/index.ts +24 -0
- package/templates/storefront-nextjs-shadcn/components/home/category-grid.tsx +72 -0
- package/templates/storefront-nextjs-shadcn/components/home/featured-collections.tsx +107 -0
- package/templates/storefront-nextjs-shadcn/components/home/featured-products.tsx +85 -0
- package/templates/storefront-nextjs-shadcn/components/home/hero-section.tsx +34 -0
- package/templates/storefront-nextjs-shadcn/components/home/index.ts +8 -0
- package/templates/storefront-nextjs-shadcn/components/home/newsletter-signup.tsx +108 -0
- package/templates/storefront-nextjs-shadcn/components/layout/breadcrumbs.tsx +133 -0
- package/templates/storefront-nextjs-shadcn/components/layout/currency-selector.tsx +341 -0
- package/templates/storefront-nextjs-shadcn/components/layout/footer.tsx +128 -0
- package/templates/storefront-nextjs-shadcn/components/layout/header.tsx +147 -0
- package/templates/storefront-nextjs-shadcn/components/layout/index.ts +9 -0
- package/templates/storefront-nextjs-shadcn/components/layout/mobile-menu.tsx +211 -0
- package/templates/storefront-nextjs-shadcn/components/layout/navigation.tsx +95 -0
- package/templates/storefront-nextjs-shadcn/components/layout/theme-switcher.tsx +192 -0
- package/templates/storefront-nextjs-shadcn/components/loyalty/index.ts +11 -0
- package/templates/storefront-nextjs-shadcn/components/loyalty/points-balance.tsx +93 -0
- package/templates/storefront-nextjs-shadcn/components/loyalty/points-history.tsx +177 -0
- package/templates/storefront-nextjs-shadcn/components/loyalty/referral-section.tsx +250 -0
- package/templates/storefront-nextjs-shadcn/components/loyalty/rewards-catalog.tsx +217 -0
- package/templates/storefront-nextjs-shadcn/components/loyalty/tier-badge.tsx +106 -0
- package/templates/storefront-nextjs-shadcn/components/loyalty/tier-progress.tsx +131 -0
- package/templates/storefront-nextjs-shadcn/components/order/delivery-estimate.tsx +196 -0
- package/templates/storefront-nextjs-shadcn/components/order/index.ts +11 -0
- package/templates/storefront-nextjs-shadcn/components/order/order-tracking.tsx +200 -0
- package/templates/storefront-nextjs-shadcn/components/order/shipment-card.tsx +407 -0
- package/templates/storefront-nextjs-shadcn/components/order/tracking-status.tsx +222 -0
- package/templates/storefront-nextjs-shadcn/components/order/tracking-timeline.tsx +205 -0
- package/templates/storefront-nextjs-shadcn/components/product/add-to-cart-button.tsx +161 -0
- package/templates/storefront-nextjs-shadcn/components/product/b2b-price-display.tsx +250 -0
- package/templates/storefront-nextjs-shadcn/components/product/discount-badge.tsx +196 -0
- package/templates/storefront-nextjs-shadcn/components/product/index.ts +41 -0
- package/templates/storefront-nextjs-shadcn/components/product/product-card.tsx +147 -0
- package/templates/storefront-nextjs-shadcn/components/product/product-filters.tsx +217 -0
- package/templates/storefront-nextjs-shadcn/components/product/product-gallery.tsx +143 -0
- package/templates/storefront-nextjs-shadcn/components/product/product-grid.tsx +83 -0
- package/templates/storefront-nextjs-shadcn/components/product/product-image.tsx +155 -0
- package/templates/storefront-nextjs-shadcn/components/product/product-price.tsx +158 -0
- package/templates/storefront-nextjs-shadcn/components/product/product-quantity-selector.tsx +111 -0
- package/templates/storefront-nextjs-shadcn/components/product/product-reviews.tsx +238 -0
- package/templates/storefront-nextjs-shadcn/components/product/product-sort.tsx +58 -0
- package/templates/storefront-nextjs-shadcn/components/product/product-variant-selector.tsx +169 -0
- package/templates/storefront-nextjs-shadcn/components/product/review-card.tsx +220 -0
- package/templates/storefront-nextjs-shadcn/components/product/review-form.tsx +338 -0
- package/templates/storefront-nextjs-shadcn/components/product/review-summary.tsx +143 -0
- package/templates/storefront-nextjs-shadcn/components/product/sale-countdown.tsx +166 -0
- package/templates/storefront-nextjs-shadcn/components/product/savings-display.tsx +213 -0
- package/templates/storefront-nextjs-shadcn/components/product/similar-products.tsx +57 -0
- package/templates/storefront-nextjs-shadcn/components/product/stock-indicator.tsx +91 -0
- package/templates/storefront-nextjs-shadcn/components/providers/currency-provider.tsx +103 -0
- package/templates/storefront-nextjs-shadcn/components/providers/index.ts +8 -0
- package/templates/storefront-nextjs-shadcn/components/providers/query-provider.tsx +260 -0
- package/templates/storefront-nextjs-shadcn/components/providers/theme-provider.tsx +13 -0
- package/templates/storefront-nextjs-shadcn/components/returns/index.ts +26 -0
- package/templates/storefront-nextjs-shadcn/components/returns/return-request-form.tsx +608 -0
- package/templates/storefront-nextjs-shadcn/components/returns/return-status-card.tsx +554 -0
- package/templates/storefront-nextjs-shadcn/components/search/index.ts +8 -0
- package/templates/storefront-nextjs-shadcn/components/search/search-bar.tsx +140 -0
- package/templates/storefront-nextjs-shadcn/components/search/search-results.tsx +58 -0
- package/templates/storefront-nextjs-shadcn/components/search/search-suggestions.tsx +43 -0
- package/templates/storefront-nextjs-shadcn/components/seo/index.ts +12 -0
- package/templates/storefront-nextjs-shadcn/components/seo/json-ld.tsx +56 -0
- package/templates/storefront-nextjs-shadcn/components/seo/product-json-ld.ts +167 -0
- package/templates/storefront-nextjs-shadcn/components/shipping/index.ts +16 -0
- package/templates/storefront-nextjs-shadcn/components/shipping/shipping-method-selector.tsx +337 -0
- package/templates/storefront-nextjs-shadcn/components/ui/accordion.tsx +153 -0
- package/templates/storefront-nextjs-shadcn/components/ui/alert.tsx +59 -0
- package/templates/storefront-nextjs-shadcn/components/ui/badge.tsx +34 -0
- package/templates/storefront-nextjs-shadcn/components/ui/button.tsx +51 -0
- package/templates/storefront-nextjs-shadcn/components/ui/card.tsx +77 -0
- package/templates/storefront-nextjs-shadcn/components/ui/checkbox.tsx +30 -0
- package/templates/storefront-nextjs-shadcn/components/ui/dialog.tsx +137 -0
- package/templates/storefront-nextjs-shadcn/components/ui/empty-state.tsx +207 -0
- package/templates/storefront-nextjs-shadcn/components/ui/index.ts +67 -0
- package/templates/storefront-nextjs-shadcn/components/ui/input.tsx +65 -0
- package/templates/storefront-nextjs-shadcn/components/ui/label.tsx +26 -0
- package/templates/storefront-nextjs-shadcn/components/ui/pagination.tsx +205 -0
- package/templates/storefront-nextjs-shadcn/components/ui/radio-group.tsx +44 -0
- package/templates/storefront-nextjs-shadcn/components/ui/select.tsx +160 -0
- package/templates/storefront-nextjs-shadcn/components/ui/separator.tsx +28 -0
- package/templates/storefront-nextjs-shadcn/components/ui/skeleton.tsx +20 -0
- package/templates/storefront-nextjs-shadcn/components/ui/spinner.tsx +82 -0
- package/templates/storefront-nextjs-shadcn/components/ui/tabs.tsx +119 -0
- package/templates/storefront-nextjs-shadcn/components/ui/toast.tsx +96 -0
- package/templates/storefront-nextjs-shadcn/components/wishlist/index.ts +9 -0
- package/templates/storefront-nextjs-shadcn/components/wishlist/wishlist-button.tsx +148 -0
- package/templates/storefront-nextjs-shadcn/components/wishlist/wishlist-icon.tsx +47 -0
- package/templates/storefront-nextjs-shadcn/components/wishlist/wishlist-item.tsx +165 -0
- package/templates/storefront-nextjs-shadcn/components.json +19 -0
- package/templates/storefront-nextjs-shadcn/generated/.gitkeep +2 -0
- package/templates/storefront-nextjs-shadcn/graphql/.gitkeep +31 -0
- package/templates/storefront-nextjs-shadcn/graphql/collections.example.ts +168 -0
- package/templates/storefront-nextjs-shadcn/graphql/products.example.ts +160 -0
- package/templates/storefront-nextjs-shadcn/hooks/index.ts +9 -0
- package/templates/storefront-nextjs-shadcn/hooks/use-auth.ts +310 -0
- package/templates/storefront-nextjs-shadcn/hooks/use-cart-actions.ts +286 -0
- package/templates/storefront-nextjs-shadcn/hooks/use-cart-sync.ts +110 -0
- package/templates/storefront-nextjs-shadcn/hooks/use-filter-params.test.ts +173 -0
- package/templates/storefront-nextjs-shadcn/hooks/use-filter-params.ts +298 -0
- package/templates/storefront-nextjs-shadcn/lib/auth/cookies.ts +220 -0
- package/templates/storefront-nextjs-shadcn/lib/auth/routes.ts +57 -0
- package/templates/storefront-nextjs-shadcn/lib/config.ts +46 -0
- package/templates/storefront-nextjs-shadcn/lib/currency/IMPLEMENTATION_SUMMARY.md +254 -0
- package/templates/storefront-nextjs-shadcn/lib/currency/README.md +464 -0
- package/templates/storefront-nextjs-shadcn/lib/currency/cookie-manager.test.ts +328 -0
- package/templates/storefront-nextjs-shadcn/lib/currency/cookie-manager.ts +295 -0
- package/templates/storefront-nextjs-shadcn/lib/currency/index.ts +27 -0
- package/templates/storefront-nextjs-shadcn/lib/format.test.ts +397 -0
- package/templates/storefront-nextjs-shadcn/lib/format.ts +226 -0
- package/templates/storefront-nextjs-shadcn/lib/graphql/client.ts +109 -0
- package/templates/storefront-nextjs-shadcn/lib/graphql/hooks.ts +1183 -0
- package/templates/storefront-nextjs-shadcn/lib/graphql/server.ts +267 -0
- package/templates/storefront-nextjs-shadcn/lib/hooks.ts +30 -0
- package/templates/storefront-nextjs-shadcn/lib/theme/theme-config.ts +89 -0
- package/templates/storefront-nextjs-shadcn/lib/utils.ts +6 -0
- package/templates/storefront-nextjs-shadcn/next.config.ts +47 -0
- package/templates/storefront-nextjs-shadcn/open-next.config.ts +3 -0
- package/templates/storefront-nextjs-shadcn/package.dev.json +30 -0
- package/templates/storefront-nextjs-shadcn/package.json +60 -0
- package/templates/storefront-nextjs-shadcn/package.json.template +46 -0
- package/templates/storefront-nextjs-shadcn/postcss.config.mjs +8 -0
- package/templates/storefront-nextjs-shadcn/proxy.ts +80 -0
- package/templates/storefront-nextjs-shadcn/public/icons/payment/apple-pay.svg +8 -0
- package/templates/storefront-nextjs-shadcn/public/icons/payment/bank-transfer.svg +10 -0
- package/templates/storefront-nextjs-shadcn/public/icons/payment/blik.svg +6 -0
- package/templates/storefront-nextjs-shadcn/public/icons/payment/cash-on-delivery.svg +11 -0
- package/templates/storefront-nextjs-shadcn/public/icons/payment/google-pay.svg +11 -0
- package/templates/storefront-nextjs-shadcn/public/icons/payment/mastercard.svg +7 -0
- package/templates/storefront-nextjs-shadcn/public/icons/payment/paypal.svg +7 -0
- package/templates/storefront-nextjs-shadcn/public/icons/payment/payu.svg +7 -0
- package/templates/storefront-nextjs-shadcn/public/icons/payment/przelewy24.svg +7 -0
- package/templates/storefront-nextjs-shadcn/public/icons/payment/stripe.svg +4 -0
- package/templates/storefront-nextjs-shadcn/public/icons/payment/visa.svg +5 -0
- package/templates/storefront-nextjs-shadcn/stores/auth-store.ts +66 -0
- package/templates/storefront-nextjs-shadcn/stores/cart-store.ts +56 -0
- package/templates/storefront-nextjs-shadcn/stores/checkout-store.ts +184 -0
- package/templates/storefront-nextjs-shadcn/stores/currency-store.ts +103 -0
- package/templates/storefront-nextjs-shadcn/stores/wishlist-store.ts +291 -0
- package/templates/storefront-nextjs-shadcn/tailwind.config.ts +111 -0
- package/templates/storefront-nextjs-shadcn/tsconfig.json +27 -0
- 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
|
package/bin/doswiftly.js
ADDED
|
@@ -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":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,GAAG,MAAM,KAAK,CAAC;AACtB,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,gBAAgB,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AAC9E,OAAO,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAC;AAE1C,MAAM,gBAAgB,GAAG,OAAO,CAAC,GAAG,CAAC,oBAAoB,IAAI,EAAE,CAAC;AAChE,MAAM,eAAe,GAAG,sCAAsC,CAAC;AAC/D,MAAM,gBAAgB,GAAG,6CAA6C,CAAC;AAgBvE;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,iBAAiB;IACrC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,2CAA2C,CAAC,CAAC,CAAC;IAE1E,IAAI,CAAC,gBAAgB,EAAE,CAAC;QACtB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,+CAA+C,CAAC,CAAC,CAAC;QACxE,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,oDAAoD,CAAC,CAAC,CAAC;QAC9E,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,MAAM,OAAO,GAAG,gBAAgB,EAAE,CAAC;IACnC,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,uDAAuD,CAAC,CAAC,CAAC;QAChF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,MAAM,OAAO,GAAG,GAAG,CAAC,uCAAuC,CAAC,CAAC,KAAK,EAAE,CAAC;IAErE,IAAI,CAAC;QACH,8BAA8B;QAC9B,MAAM,cAAc,GAAG,MAAM,KAAK,CAAC,IAAI,CACrC,eAAe,EACf,EAAE,SAAS,EAAE,gBAAgB,EAAE,KAAK,EAAE,MAAM,EAAE,EAC9C,EAAE,OAAO,EAAE,EAAE,MAAM,EAAE,kBAAkB,EAAE,EAAE,CAC5C,CAAC;QAEF,MAAM,EAAE,WAAW,EAAE,SAAS,EAAE,gBAAgB,EAAE,QAAQ,EAAE,GAAG,cAAc,CAAC,IAAI,CAAC;QAEnF,OAAO,CAAC,IAAI,EAAE,CAAC;QAEf,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,sCAAsC,CAAC,CAAC,CAAC;QAChE,OAAO,CAAC,GAAG,CAAC,OAAO,KAAK,CAAC,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,CAAC;QACrD,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,sBAAsB,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC;QAE/E,gCAAgC;QAChC,OAAO,CAAC,KAAK,CAAC,8BAA8B,CAAC,CAAC;QAE9C,MAAM,KAAK,GAAG,MAAM,YAAY,CAAC,WAAW,EAAE,QAAQ,CAAC,CAAC;QAExD,IAAI,CAAC,KAAK,EAAE,CAAC;YACX,OAAO,CAAC,IAAI,CAAC,qCAAqC,CAAC,CAAC;YACpD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;QAED,uDAAuD;QACvD,mBAAmB,CAAC,EAAE,WAAW,EAAE,KAAK,EAAE,CAAC,CAAC;QAE5C,OAAO,CAAC,OAAO,CAAC,+BAA+B,CAAC,CAAC;QACjD,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,mDAAmD,CAAC,CAAC,CAAC;QAC9E,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,uDAAuD,CAAC,CAAC,CAAC;IACnF,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,CAAC,IAAI,CAAC,8BAA8B,CAAC,CAAC;QAC7C,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;AAED,KAAK,UAAU,YAAY,CAAC,UAAkB,EAAE,QAAgB;IAC9D,MAAM,WAAW,GAAG,EAAE,CAAC,CAAC,6BAA6B;IACrD,IAAI,QAAQ,GAAG,CAAC,CAAC;IAEjB,OAAO,QAAQ,GAAG,WAAW,EAAE,CAAC;QAC9B,MAAM,IAAI,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,CAAC,QAAQ,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC;QAE1E,IAAI,CAAC;YACH,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,IAAI,CAC/B,gBAAgB,EAChB;gBACE,SAAS,EAAE,gBAAgB;gBAC3B,WAAW,EAAE,UAAU;gBACvB,UAAU,EAAE,8CAA8C;aAC3D,EACD,EAAE,OAAO,EAAE,EAAE,MAAM,EAAE,kBAAkB,EAAE,EAAE,CAC5C,CAAC;YAEF,IAAI,QAAQ,CAAC,IAAI,CAAC,YAAY,EAAE,CAAC;gBAC/B,OAAO,QAAQ,CAAC,IAAI,CAAC,YAAY,CAAC;YACpC,CAAC;YAED,IAAI,QAAQ,CAAC,IAAI,CAAC,KAAK,KAAK,uBAAuB,EAAE,CAAC;gBACpD,QAAQ,EAAE,CAAC;gBACX,SAAS;YACX,CAAC;YAED,IAAI,QAAQ,CAAC,IAAI,CAAC,KAAK,KAAK,WAAW,EAAE,CAAC;gBACxC,4BAA4B;gBAC5B,MAAM,IAAI,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC,CAAC;gBACxD,QAAQ,EAAE,CAAC;gBACX,SAAS;YACX,CAAC;YAED,IAAI,QAAQ,CAAC,IAAI,CAAC,KAAK,KAAK,eAAe,IAAI,QAAQ,CAAC,IAAI,CAAC,KAAK,KAAK,eAAe,EAAE,CAAC;gBACvF,OAAO,IAAI,CAAC;YACd,CAAC;YAED,MAAM,CAAC,KAAK,CAAC,sBAAsB,QAAQ,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC;QAC5D,CAAC;QAAC,MAAM,CAAC;YACP,yBAAyB;QAC3B,CAAC;QAED,QAAQ,EAAE,CAAC;IACb,CAAC;IAED,OAAO,IAAI,CAAC;AACd,CAAC"}
|
|
@@ -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"}
|