@makeco/stripe-kit 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE.md +21 -0
- package/README.md +201 -0
- package/dist/cli-prompts/action.d.ts +5 -0
- package/dist/cli-prompts/action.d.ts.map +1 -0
- package/dist/cli-prompts/action.js +36 -0
- package/dist/cli-prompts/action.js.map +1 -0
- package/dist/cli-prompts/adapter.d.ts +9 -0
- package/dist/cli-prompts/adapter.d.ts.map +1 -0
- package/dist/cli-prompts/adapter.js +53 -0
- package/dist/cli-prompts/adapter.js.map +1 -0
- package/dist/cli-prompts/confirmation.d.ts +6 -0
- package/dist/cli-prompts/confirmation.d.ts.map +1 -0
- package/dist/cli-prompts/confirmation.js +27 -0
- package/dist/cli-prompts/confirmation.js.map +1 -0
- package/dist/cli-prompts/environment.d.ts +5 -0
- package/dist/cli-prompts/environment.d.ts.map +1 -0
- package/dist/cli-prompts/environment.js +43 -0
- package/dist/cli-prompts/environment.js.map +1 -0
- package/dist/cli-prompts/index.d.ts +5 -0
- package/dist/cli-prompts/index.d.ts.map +1 -0
- package/dist/cli-prompts/index.js +5 -0
- package/dist/cli-prompts/index.js.map +1 -0
- package/dist/cli.d.ts +3 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +33 -0
- package/dist/cli.js.map +1 -0
- package/dist/commands/archive/archive.action.d.ts +5 -0
- package/dist/commands/archive/archive.action.d.ts.map +1 -0
- package/dist/commands/archive/archive.action.js +73 -0
- package/dist/commands/archive/archive.action.js.map +1 -0
- package/dist/commands/archive/archive.command.d.ts +3 -0
- package/dist/commands/archive/archive.command.d.ts.map +1 -0
- package/dist/commands/archive/archive.command.js +23 -0
- package/dist/commands/archive/archive.command.js.map +1 -0
- package/dist/commands/archive/archive.preflight.d.ts +13 -0
- package/dist/commands/archive/archive.preflight.d.ts.map +1 -0
- package/dist/commands/archive/archive.preflight.js +27 -0
- package/dist/commands/archive/archive.preflight.js.map +1 -0
- package/dist/commands/archive/index.d.ts +2 -0
- package/dist/commands/archive/index.d.ts.map +1 -0
- package/dist/commands/archive/index.js +2 -0
- package/dist/commands/archive/index.js.map +1 -0
- package/dist/commands/config/config.command.d.ts +3 -0
- package/dist/commands/config/config.command.d.ts.map +1 -0
- package/dist/commands/config/config.command.js +33 -0
- package/dist/commands/config/config.command.js.map +1 -0
- package/dist/commands/config/index.d.ts +2 -0
- package/dist/commands/config/index.d.ts.map +1 -0
- package/dist/commands/config/index.js +2 -0
- package/dist/commands/config/index.js.map +1 -0
- package/dist/commands/create/create.action.d.ts +5 -0
- package/dist/commands/create/create.action.d.ts.map +1 -0
- package/dist/commands/create/create.action.js +53 -0
- package/dist/commands/create/create.action.js.map +1 -0
- package/dist/commands/create/create.command.d.ts +3 -0
- package/dist/commands/create/create.command.d.ts.map +1 -0
- package/dist/commands/create/create.command.js +21 -0
- package/dist/commands/create/create.command.js.map +1 -0
- package/dist/commands/create/create.preflight.d.ts +13 -0
- package/dist/commands/create/create.preflight.d.ts.map +1 -0
- package/dist/commands/create/create.preflight.js +24 -0
- package/dist/commands/create/create.preflight.js.map +1 -0
- package/dist/commands/create/index.d.ts +2 -0
- package/dist/commands/create/index.d.ts.map +1 -0
- package/dist/commands/create/index.js +2 -0
- package/dist/commands/create/index.js.map +1 -0
- package/dist/commands/db/db.command.d.ts +3 -0
- package/dist/commands/db/db.command.d.ts.map +1 -0
- package/dist/commands/db/db.command.js +13 -0
- package/dist/commands/db/db.command.js.map +1 -0
- package/dist/commands/db/index.d.ts +4 -0
- package/dist/commands/db/index.d.ts.map +1 -0
- package/dist/commands/db/index.js +4 -0
- package/dist/commands/db/index.js.map +1 -0
- package/dist/commands/db/purge/index.d.ts +2 -0
- package/dist/commands/db/purge/index.d.ts.map +1 -0
- package/dist/commands/db/purge/index.js +2 -0
- package/dist/commands/db/purge/index.js.map +1 -0
- package/dist/commands/db/purge/purge.action.d.ts +3 -0
- package/dist/commands/db/purge/purge.action.d.ts.map +1 -0
- package/dist/commands/db/purge/purge.action.js +17 -0
- package/dist/commands/db/purge/purge.action.js.map +1 -0
- package/dist/commands/db/purge/purge.command.d.ts +3 -0
- package/dist/commands/db/purge/purge.command.d.ts.map +1 -0
- package/dist/commands/db/purge/purge.command.js +22 -0
- package/dist/commands/db/purge/purge.command.js.map +1 -0
- package/dist/commands/db/purge/purge.preflight.d.ts +12 -0
- package/dist/commands/db/purge/purge.preflight.d.ts.map +1 -0
- package/dist/commands/db/purge/purge.preflight.js +27 -0
- package/dist/commands/db/purge/purge.preflight.js.map +1 -0
- package/dist/commands/db/sync/index.d.ts +2 -0
- package/dist/commands/db/sync/index.d.ts.map +1 -0
- package/dist/commands/db/sync/index.js +2 -0
- package/dist/commands/db/sync/index.js.map +1 -0
- package/dist/commands/db/sync/sync.action.d.ts +3 -0
- package/dist/commands/db/sync/sync.action.d.ts.map +1 -0
- package/dist/commands/db/sync/sync.action.js +24 -0
- package/dist/commands/db/sync/sync.action.js.map +1 -0
- package/dist/commands/db/sync/sync.command.d.ts +3 -0
- package/dist/commands/db/sync/sync.command.d.ts.map +1 -0
- package/dist/commands/db/sync/sync.command.js +22 -0
- package/dist/commands/db/sync/sync.command.js.map +1 -0
- package/dist/commands/db/sync/sync.preflight.d.ts +12 -0
- package/dist/commands/db/sync/sync.preflight.d.ts.map +1 -0
- package/dist/commands/db/sync/sync.preflight.js +33 -0
- package/dist/commands/db/sync/sync.preflight.js.map +1 -0
- package/dist/commands/index.d.ts +8 -0
- package/dist/commands/index.d.ts.map +1 -0
- package/dist/commands/index.js +8 -0
- package/dist/commands/index.js.map +1 -0
- package/dist/commands/list/index.d.ts +4 -0
- package/dist/commands/list/index.d.ts.map +1 -0
- package/dist/commands/list/index.js +4 -0
- package/dist/commands/list/index.js.map +1 -0
- package/dist/commands/list/list.command.d.ts +3 -0
- package/dist/commands/list/list.command.d.ts.map +1 -0
- package/dist/commands/list/list.command.js +13 -0
- package/dist/commands/list/list.command.js.map +1 -0
- package/dist/commands/list/prices/index.d.ts +2 -0
- package/dist/commands/list/prices/index.d.ts.map +1 -0
- package/dist/commands/list/prices/index.js +2 -0
- package/dist/commands/list/prices/index.js.map +1 -0
- package/dist/commands/list/prices/prices.action.d.ts +5 -0
- package/dist/commands/list/prices/prices.action.d.ts.map +1 -0
- package/dist/commands/list/prices/prices.action.js +40 -0
- package/dist/commands/list/prices/prices.action.js.map +1 -0
- package/dist/commands/list/prices/prices.command.d.ts +3 -0
- package/dist/commands/list/prices/prices.command.d.ts.map +1 -0
- package/dist/commands/list/prices/prices.command.js +21 -0
- package/dist/commands/list/prices/prices.command.js.map +1 -0
- package/dist/commands/list/prices/prices.preflight.d.ts +13 -0
- package/dist/commands/list/prices/prices.preflight.d.ts.map +1 -0
- package/dist/commands/list/prices/prices.preflight.js +19 -0
- package/dist/commands/list/prices/prices.preflight.js.map +1 -0
- package/dist/commands/list/products/index.d.ts +2 -0
- package/dist/commands/list/products/index.d.ts.map +1 -0
- package/dist/commands/list/products/index.js +2 -0
- package/dist/commands/list/products/index.js.map +1 -0
- package/dist/commands/list/products/products.action.d.ts +5 -0
- package/dist/commands/list/products/products.action.d.ts.map +1 -0
- package/dist/commands/list/products/products.action.js +32 -0
- package/dist/commands/list/products/products.action.js.map +1 -0
- package/dist/commands/list/products/products.command.d.ts +3 -0
- package/dist/commands/list/products/products.command.d.ts.map +1 -0
- package/dist/commands/list/products/products.command.js +21 -0
- package/dist/commands/list/products/products.command.js.map +1 -0
- package/dist/commands/list/products/products.preflight.d.ts +13 -0
- package/dist/commands/list/products/products.preflight.d.ts.map +1 -0
- package/dist/commands/list/products/products.preflight.js +19 -0
- package/dist/commands/list/products/products.preflight.js.map +1 -0
- package/dist/commands/update/index.d.ts +2 -0
- package/dist/commands/update/index.d.ts.map +1 -0
- package/dist/commands/update/index.js +2 -0
- package/dist/commands/update/index.js.map +1 -0
- package/dist/commands/update/update.action.d.ts +3 -0
- package/dist/commands/update/update.action.d.ts.map +1 -0
- package/dist/commands/update/update.action.js +84 -0
- package/dist/commands/update/update.action.js.map +1 -0
- package/dist/commands/update/update.command.d.ts +3 -0
- package/dist/commands/update/update.command.d.ts.map +1 -0
- package/dist/commands/update/update.command.js +21 -0
- package/dist/commands/update/update.command.js.map +1 -0
- package/dist/commands/update/update.preflight.d.ts +12 -0
- package/dist/commands/update/update.preflight.d.ts.map +1 -0
- package/dist/commands/update/update.preflight.js +36 -0
- package/dist/commands/update/update.preflight.js.map +1 -0
- package/dist/commands/urls/index.d.ts +2 -0
- package/dist/commands/urls/index.d.ts.map +1 -0
- package/dist/commands/urls/index.js +2 -0
- package/dist/commands/urls/index.js.map +1 -0
- package/dist/commands/urls/urls.action.d.ts +4 -0
- package/dist/commands/urls/urls.action.d.ts.map +1 -0
- package/dist/commands/urls/urls.action.js +65 -0
- package/dist/commands/urls/urls.action.js.map +1 -0
- package/dist/commands/urls/urls.command.d.ts +6 -0
- package/dist/commands/urls/urls.command.d.ts.map +1 -0
- package/dist/commands/urls/urls.command.js +19 -0
- package/dist/commands/urls/urls.command.js.map +1 -0
- package/dist/definitions/action.constants.d.ts +14 -0
- package/dist/definitions/action.constants.d.ts.map +1 -0
- package/dist/definitions/action.constants.js +22 -0
- package/dist/definitions/action.constants.js.map +1 -0
- package/dist/definitions/config.schemas.d.ts +278 -0
- package/dist/definitions/config.schemas.d.ts.map +1 -0
- package/dist/definitions/config.schemas.js +30 -0
- package/dist/definitions/config.schemas.js.map +1 -0
- package/dist/definitions/context.types.d.ts +18 -0
- package/dist/definitions/context.types.d.ts.map +1 -0
- package/dist/definitions/context.types.js +2 -0
- package/dist/definitions/context.types.js.map +1 -0
- package/dist/definitions/database-adapter.schemas.d.ts +20 -0
- package/dist/definitions/database-adapter.schemas.d.ts.map +1 -0
- package/dist/definitions/database-adapter.schemas.js +18 -0
- package/dist/definitions/database-adapter.schemas.js.map +1 -0
- package/dist/definitions/env.constants.d.ts +9 -0
- package/dist/definitions/env.constants.d.ts.map +1 -0
- package/dist/definitions/env.constants.js +8 -0
- package/dist/definitions/env.constants.js.map +1 -0
- package/dist/definitions/index.d.ts +9 -0
- package/dist/definitions/index.d.ts.map +1 -0
- package/dist/definitions/index.js +9 -0
- package/dist/definitions/index.js.map +1 -0
- package/dist/definitions/stripe-price.schemas.d.ts +132 -0
- package/dist/definitions/stripe-price.schemas.d.ts.map +1 -0
- package/dist/definitions/stripe-price.schemas.js +50 -0
- package/dist/definitions/stripe-price.schemas.js.map +1 -0
- package/dist/definitions/stripe-product.schemas.d.ts +87 -0
- package/dist/definitions/stripe-product.schemas.d.ts.map +1 -0
- package/dist/definitions/stripe-product.schemas.js +42 -0
- package/dist/definitions/stripe-product.schemas.js.map +1 -0
- package/dist/definitions/utility.types.d.ts +4 -0
- package/dist/definitions/utility.types.d.ts.map +1 -0
- package/dist/definitions/utility.types.js +2 -0
- package/dist/definitions/utility.types.js.map +1 -0
- package/dist/index.d.ts +3 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +3 -0
- package/dist/index.js.map +1 -0
- package/dist/utils/create-context.d.ts +6 -0
- package/dist/utils/create-context.d.ts.map +1 -0
- package/dist/utils/create-context.js +21 -0
- package/dist/utils/create-context.js.map +1 -0
- package/dist/utils/create-logger.d.ts +3 -0
- package/dist/utils/create-logger.d.ts.map +1 -0
- package/dist/utils/create-logger.js +38 -0
- package/dist/utils/create-logger.js.map +1 -0
- package/dist/utils/create-mappers.d.ts +3 -0
- package/dist/utils/create-mappers.d.ts.map +1 -0
- package/dist/utils/create-mappers.js +98 -0
- package/dist/utils/create-mappers.js.map +1 -0
- package/dist/utils/define-config.d.ts +3 -0
- package/dist/utils/define-config.d.ts.map +1 -0
- package/dist/utils/define-config.js +6 -0
- package/dist/utils/define-config.js.map +1 -0
- package/dist/utils/find-env-directories.d.ts +2 -0
- package/dist/utils/find-env-directories.d.ts.map +1 -0
- package/dist/utils/find-env-directories.js +84 -0
- package/dist/utils/find-env-directories.js.map +1 -0
- package/dist/utils/index.d.ts +12 -0
- package/dist/utils/index.d.ts.map +1 -0
- package/dist/utils/index.js +12 -0
- package/dist/utils/index.js.map +1 -0
- package/dist/utils/load-config.d.ts +6 -0
- package/dist/utils/load-config.d.ts.map +1 -0
- package/dist/utils/load-config.js +84 -0
- package/dist/utils/load-config.js.map +1 -0
- package/dist/utils/load-env.d.ts +3 -0
- package/dist/utils/load-env.d.ts.map +1 -0
- package/dist/utils/load-env.js +54 -0
- package/dist/utils/load-env.js.map +1 -0
- package/dist/utils/stripe-client.d.ts +3 -0
- package/dist/utils/stripe-client.d.ts.map +1 -0
- package/dist/utils/stripe-client.js +10 -0
- package/dist/utils/stripe-client.js.map +1 -0
- package/dist/utils/stripe-repository.d.ts +16 -0
- package/dist/utils/stripe-repository.d.ts.map +1 -0
- package/dist/utils/stripe-repository.js +73 -0
- package/dist/utils/stripe-repository.js.map +1 -0
- package/dist/utils/user-preferences.d.ts +10 -0
- package/dist/utils/user-preferences.d.ts.map +1 -0
- package/dist/utils/user-preferences.js +40 -0
- package/dist/utils/user-preferences.js.map +1 -0
- package/package.json +84 -0
package/LICENSE.md
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2025 makeco-labs
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
package/README.md
ADDED
|
@@ -0,0 +1,201 @@
|
|
|
1
|
+
# stripe-kit
|
|
2
|
+
|
|
3
|
+
[](https://badge.fury.io/js/%40makeco%2Fstripe-kit)
|
|
4
|
+
[](https://opensource.org/licenses/MIT)
|
|
5
|
+
[](https://github.com/makeco/stripe-kit/issues)
|
|
6
|
+
[](https://github.com/makeco/stripe-kit/stargazers)
|
|
7
|
+
|
|
8
|
+
An unofficial CLI tool for creating, archiving, updating Stripe products and prices and syncing them to your database.
|
|
9
|
+
|
|
10
|
+
## Installation
|
|
11
|
+
|
|
12
|
+
```bash
|
|
13
|
+
npm install @makeco/stripe-kit
|
|
14
|
+
```
|
|
15
|
+
|
|
16
|
+
## CLI Usage
|
|
17
|
+
|
|
18
|
+
### Core Commands
|
|
19
|
+
|
|
20
|
+
```bash
|
|
21
|
+
# Create subscription plans in Stripe
|
|
22
|
+
stripe-kit create -e dev -a postgres
|
|
23
|
+
|
|
24
|
+
# Archive subscription plans in Stripe
|
|
25
|
+
stripe-kit archive -e prod -a postgres
|
|
26
|
+
|
|
27
|
+
# Sync Stripe plans to database
|
|
28
|
+
stripe-kit db sync -e staging -a postgres
|
|
29
|
+
|
|
30
|
+
# Update existing Stripe plans
|
|
31
|
+
stripe-kit update -e prod -a postgres
|
|
32
|
+
|
|
33
|
+
# Database operations
|
|
34
|
+
stripe-kit db purge -e dev -a postgres
|
|
35
|
+
```
|
|
36
|
+
|
|
37
|
+
### Utility Commands
|
|
38
|
+
|
|
39
|
+
```bash
|
|
40
|
+
# Show Stripe dashboard URLs
|
|
41
|
+
stripe-kit urls # Interactive selection (shows both live & test URLs)
|
|
42
|
+
stripe-kit urls -a # Show all URLs with labels
|
|
43
|
+
|
|
44
|
+
# List Stripe products
|
|
45
|
+
stripe-kit list products -e dev --all
|
|
46
|
+
|
|
47
|
+
# List Stripe prices
|
|
48
|
+
stripe-kit list prices -e dev --all
|
|
49
|
+
|
|
50
|
+
# View current user preferences
|
|
51
|
+
stripe-kit config
|
|
52
|
+
```
|
|
53
|
+
|
|
54
|
+
### Global Options
|
|
55
|
+
|
|
56
|
+
- `-c, --config <path>` - Path to stripe.config.ts file (defaults to ./stripe.config.ts)
|
|
57
|
+
- `-e, --env <environment>` - Target environment (test, dev, staging, prod)
|
|
58
|
+
- `-a, --adapter <name>` - Database adapter name
|
|
59
|
+
|
|
60
|
+
## User Preferences
|
|
61
|
+
|
|
62
|
+
The CLI remembers your last used environment and adapter selections for faster workflow:
|
|
63
|
+
|
|
64
|
+
```bash
|
|
65
|
+
# First time - you'll be prompted to select
|
|
66
|
+
stripe-kit create
|
|
67
|
+
|
|
68
|
+
# Subsequent runs - your last selection is pre-selected
|
|
69
|
+
stripe-kit archive # Uses your last environment/adapter as initial choice
|
|
70
|
+
|
|
71
|
+
# View current preferences
|
|
72
|
+
stripe-kit config
|
|
73
|
+
```
|
|
74
|
+
|
|
75
|
+
Preferences are stored in `~/.config/@makeco/stripe-kit/config.json`
|
|
76
|
+
|
|
77
|
+
## Subcommands
|
|
78
|
+
|
|
79
|
+
### Database Operations
|
|
80
|
+
|
|
81
|
+
```bash
|
|
82
|
+
# Show available database operations
|
|
83
|
+
stripe-kit db
|
|
84
|
+
|
|
85
|
+
# Purge database plans
|
|
86
|
+
stripe-kit db purge -e dev -a postgres
|
|
87
|
+
|
|
88
|
+
# Sync Stripe plans to database
|
|
89
|
+
stripe-kit db sync -e dev -a postgres
|
|
90
|
+
```
|
|
91
|
+
|
|
92
|
+
### List Operations
|
|
93
|
+
|
|
94
|
+
```bash
|
|
95
|
+
# Show available list operations
|
|
96
|
+
stripe-kit list
|
|
97
|
+
|
|
98
|
+
# List products
|
|
99
|
+
stripe-kit list products -e dev --all
|
|
100
|
+
|
|
101
|
+
# List prices
|
|
102
|
+
stripe-kit list prices -e dev --all
|
|
103
|
+
```
|
|
104
|
+
|
|
105
|
+
## API Usage
|
|
106
|
+
|
|
107
|
+
```typescript
|
|
108
|
+
import { defineConfig } from 'stripe-kit';
|
|
109
|
+
|
|
110
|
+
// Use the configuration helper
|
|
111
|
+
export default defineConfig({
|
|
112
|
+
plans: [
|
|
113
|
+
{
|
|
114
|
+
product: {
|
|
115
|
+
id: 'basic-plan',
|
|
116
|
+
name: 'Basic Plan',
|
|
117
|
+
description: 'Our basic subscription plan'
|
|
118
|
+
},
|
|
119
|
+
prices: [
|
|
120
|
+
{
|
|
121
|
+
id: 'basic-monthly',
|
|
122
|
+
nickname: 'Basic Monthly',
|
|
123
|
+
unitAmount: 999,
|
|
124
|
+
currency: 'usd',
|
|
125
|
+
recurring: { interval: 'month' }
|
|
126
|
+
}
|
|
127
|
+
]
|
|
128
|
+
}
|
|
129
|
+
],
|
|
130
|
+
adapters: {
|
|
131
|
+
postgres: {
|
|
132
|
+
// Your database adapter configuration
|
|
133
|
+
connectionString: process.env.DATABASE_URL
|
|
134
|
+
}
|
|
135
|
+
}
|
|
136
|
+
});
|
|
137
|
+
```
|
|
138
|
+
|
|
139
|
+
## Configuration
|
|
140
|
+
|
|
141
|
+
Create a `stripe.config.ts` file in your project root:
|
|
142
|
+
|
|
143
|
+
```typescript
|
|
144
|
+
import { defineConfig } from 'stripe-kit';
|
|
145
|
+
|
|
146
|
+
export default defineConfig({
|
|
147
|
+
plans: [
|
|
148
|
+
{
|
|
149
|
+
product: {
|
|
150
|
+
id: 'pro-plan',
|
|
151
|
+
name: 'Pro Plan',
|
|
152
|
+
description: 'Professional features for growing teams'
|
|
153
|
+
},
|
|
154
|
+
prices: [
|
|
155
|
+
{
|
|
156
|
+
id: 'pro-monthly',
|
|
157
|
+
nickname: 'Pro Monthly',
|
|
158
|
+
unitAmount: 2999,
|
|
159
|
+
currency: 'usd',
|
|
160
|
+
recurring: { interval: 'month' }
|
|
161
|
+
},
|
|
162
|
+
{
|
|
163
|
+
id: 'pro-yearly',
|
|
164
|
+
nickname: 'Pro Yearly',
|
|
165
|
+
unitAmount: 29999,
|
|
166
|
+
currency: 'usd',
|
|
167
|
+
recurring: { interval: 'year' }
|
|
168
|
+
}
|
|
169
|
+
]
|
|
170
|
+
}
|
|
171
|
+
],
|
|
172
|
+
adapters: {
|
|
173
|
+
postgres: {
|
|
174
|
+
// Your PostgreSQL adapter configuration
|
|
175
|
+
connectionString: process.env.DATABASE_URL
|
|
176
|
+
}
|
|
177
|
+
},
|
|
178
|
+
// Optional: Custom mappers for your database schema
|
|
179
|
+
mappers: {
|
|
180
|
+
// Define how to map Stripe objects to your database schema
|
|
181
|
+
}
|
|
182
|
+
});
|
|
183
|
+
```
|
|
184
|
+
|
|
185
|
+
## Environment Variables
|
|
186
|
+
|
|
187
|
+
Create environment files for different stages:
|
|
188
|
+
|
|
189
|
+
```bash
|
|
190
|
+
# .env.development
|
|
191
|
+
STRIPE_SECRET_KEY=sk_test_...
|
|
192
|
+
DATABASE_URL=postgresql://...
|
|
193
|
+
|
|
194
|
+
# .env.production
|
|
195
|
+
STRIPE_SECRET_KEY=sk_live_...
|
|
196
|
+
DATABASE_URL=postgresql://...
|
|
197
|
+
```
|
|
198
|
+
|
|
199
|
+
## Database Support
|
|
200
|
+
|
|
201
|
+
Supports PostgreSQL, MySQL, and SQLite via custom database adapters. The CLI automatically detects and uses your configured adapters.
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"action.d.ts","sourceRoot":"","sources":["../../src/cli-prompts/action.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAMhD,wBAAsB,eAAe,CAAC,KAAK,EAAE;IAC3C,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB,GAAG,OAAO,CAAC,SAAS,CAAC,CAyCrB"}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
import chalk from 'chalk';
|
|
2
|
+
import prompts from 'prompts';
|
|
3
|
+
import { ACTION_DESCRIPTIONS, VALID_ACTIONS } from '../definitions/index.js';
|
|
4
|
+
export async function determineAction(input) {
|
|
5
|
+
const { actionInput } = input;
|
|
6
|
+
if (actionInput && VALID_ACTIONS.includes(actionInput)) {
|
|
7
|
+
const action = actionInput;
|
|
8
|
+
console.log(chalk.green(`Action specified via argument: ${chalk.bold(action)}`));
|
|
9
|
+
return action;
|
|
10
|
+
}
|
|
11
|
+
if (actionInput) {
|
|
12
|
+
console.log(chalk.yellow(`Invalid action specified: "${actionInput}". Prompting...`));
|
|
13
|
+
}
|
|
14
|
+
try {
|
|
15
|
+
const response = await prompts({
|
|
16
|
+
type: 'select',
|
|
17
|
+
name: 'value',
|
|
18
|
+
message: chalk.blue('Select the action to perform:'),
|
|
19
|
+
choices: VALID_ACTIONS.map((action) => ({
|
|
20
|
+
title: ACTION_DESCRIPTIONS[action],
|
|
21
|
+
value: action,
|
|
22
|
+
})),
|
|
23
|
+
initial: 0,
|
|
24
|
+
});
|
|
25
|
+
if (!response.value) {
|
|
26
|
+
process.exit(0);
|
|
27
|
+
}
|
|
28
|
+
console.log(chalk.green(`Action selected via prompt: ${chalk.bold(response.value)}`));
|
|
29
|
+
return response.value;
|
|
30
|
+
}
|
|
31
|
+
catch (error) {
|
|
32
|
+
console.error(chalk.red('Error during action prompt:'), error);
|
|
33
|
+
process.exit(1);
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
//# sourceMappingURL=action.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"action.js","sourceRoot":"","sources":["../../src/cli-prompts/action.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,OAAO,MAAM,SAAS,CAAC;AAE9B,OAAO,EAAE,mBAAmB,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAKpE,MAAM,CAAC,KAAK,UAAU,eAAe,CAAC,KAErC;IACC,MAAM,EAAE,WAAW,EAAE,GAAG,KAAK,CAAC;IAE9B,IAAI,WAAW,IAAI,aAAa,CAAC,QAAQ,CAAC,WAAwB,CAAC,EAAE,CAAC;QACpE,MAAM,MAAM,GAAG,WAAwB,CAAC;QACxC,OAAO,CAAC,GAAG,CACT,KAAK,CAAC,KAAK,CAAC,kCAAkC,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,CACpE,CAAC;QACF,OAAO,MAAM,CAAC;IAChB,CAAC;IAED,IAAI,WAAW,EAAE,CAAC;QAChB,OAAO,CAAC,GAAG,CACT,KAAK,CAAC,MAAM,CAAC,8BAA8B,WAAW,iBAAiB,CAAC,CACzE,CAAC;IACJ,CAAC;IAED,IAAI,CAAC;QACH,MAAM,QAAQ,GAAG,MAAM,OAAO,CAAC;YAC7B,IAAI,EAAE,QAAQ;YACd,IAAI,EAAE,OAAO;YACb,OAAO,EAAE,KAAK,CAAC,IAAI,CAAC,+BAA+B,CAAC;YACpD,OAAO,EAAE,aAAa,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;gBACtC,KAAK,EAAE,mBAAmB,CAAC,MAAM,CAAC;gBAClC,KAAK,EAAE,MAAM;aACd,CAAC,CAAC;YACH,OAAO,EAAE,CAAC;SACX,CAAC,CAAC;QAEH,IAAI,CAAC,QAAQ,CAAC,KAAK,EAAE,CAAC;YACpB,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;QAED,OAAO,CAAC,GAAG,CACT,KAAK,CAAC,KAAK,CAAC,+BAA+B,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC,CACzE,CAAC;QACF,OAAO,QAAQ,CAAC,KAAK,CAAC;IACxB,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,6BAA6B,CAAC,EAAE,KAAK,CAAC,CAAC;QAC/D,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import type { DatabaseAdapter } from '../definitions/index.js';
|
|
2
|
+
export declare function determineAdapter(input: {
|
|
3
|
+
adapterInput: string | undefined;
|
|
4
|
+
availableAdapters: Record<string, DatabaseAdapter>;
|
|
5
|
+
}): Promise<{
|
|
6
|
+
name: string;
|
|
7
|
+
adapter: DatabaseAdapter;
|
|
8
|
+
}>;
|
|
9
|
+
//# sourceMappingURL=adapter.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"adapter.d.ts","sourceRoot":"","sources":["../../src/cli-prompts/adapter.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAUrD,wBAAsB,gBAAgB,CAAC,KAAK,EAAE;IAC5C,YAAY,EAAE,MAAM,GAAG,SAAS,CAAC;IACjC,iBAAiB,EAAE,MAAM,CAAC,MAAM,EAAE,eAAe,CAAC,CAAC;CACpD,GAAG,OAAO,CAAC;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,eAAe,CAAA;CAAE,CAAC,CA4EtD"}
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
import chalk from 'chalk';
|
|
2
|
+
import prompts from 'prompts';
|
|
3
|
+
import { getLastUsedAdapter, saveUserPreference } from '../utils/index.js';
|
|
4
|
+
export async function determineAdapter(input) {
|
|
5
|
+
const { adapterInput, availableAdapters } = input;
|
|
6
|
+
const adapterNames = Object.keys(availableAdapters);
|
|
7
|
+
if (adapterNames.length === 0) {
|
|
8
|
+
console.error(chalk.red('No adapters found in configuration'));
|
|
9
|
+
process.exit(1);
|
|
10
|
+
}
|
|
11
|
+
if (adapterNames.length === 1) {
|
|
12
|
+
const adapterName = adapterNames[0];
|
|
13
|
+
console.log(chalk.green(`Auto-selected adapter: ${chalk.bold(adapterName)}`));
|
|
14
|
+
return { name: adapterName, adapter: availableAdapters[adapterName] };
|
|
15
|
+
}
|
|
16
|
+
if (adapterInput) {
|
|
17
|
+
if (availableAdapters[adapterInput]) {
|
|
18
|
+
console.log(chalk.green(`Adapter specified via flag: ${chalk.bold(adapterInput)}`));
|
|
19
|
+
saveUserPreference('defaultAdapter', adapterInput);
|
|
20
|
+
return { name: adapterInput, adapter: availableAdapters[adapterInput] };
|
|
21
|
+
}
|
|
22
|
+
console.log(chalk.yellow(`Invalid adapter specified: "${adapterInput}". Available: ${adapterNames.join(', ')}`));
|
|
23
|
+
}
|
|
24
|
+
const lastUsedAdapter = getLastUsedAdapter();
|
|
25
|
+
const initialIndex = lastUsedAdapter && adapterNames.includes(lastUsedAdapter)
|
|
26
|
+
? adapterNames.indexOf(lastUsedAdapter)
|
|
27
|
+
: 0;
|
|
28
|
+
try {
|
|
29
|
+
const response = await prompts({
|
|
30
|
+
type: 'select',
|
|
31
|
+
name: 'value',
|
|
32
|
+
message: chalk.blue(lastUsedAdapter && adapterNames.includes(lastUsedAdapter)
|
|
33
|
+
? `Select the database adapter (last used: ${chalk.bold(lastUsedAdapter)}):`
|
|
34
|
+
: 'Select the database adapter:'),
|
|
35
|
+
choices: adapterNames.map((name) => ({
|
|
36
|
+
title: name.charAt(0).toUpperCase() + name.slice(1),
|
|
37
|
+
value: name,
|
|
38
|
+
})),
|
|
39
|
+
initial: initialIndex,
|
|
40
|
+
});
|
|
41
|
+
if (!response.value) {
|
|
42
|
+
process.exit(0);
|
|
43
|
+
}
|
|
44
|
+
console.log(chalk.green(`Adapter selected via prompt: ${chalk.bold(response.value)}`));
|
|
45
|
+
saveUserPreference('defaultAdapter', response.value);
|
|
46
|
+
return { name: response.value, adapter: availableAdapters[response.value] };
|
|
47
|
+
}
|
|
48
|
+
catch (error) {
|
|
49
|
+
console.error(chalk.red('Error during adapter prompt:'), error);
|
|
50
|
+
process.exit(1);
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
//# sourceMappingURL=adapter.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"adapter.js","sourceRoot":"","sources":["../../src/cli-prompts/adapter.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,OAAO,MAAM,SAAS,CAAC;AAE9B,OAAO,EAAE,kBAAkB,EAAE,kBAAkB,EAAE,MAAM,SAAS,CAAC;AASjE,MAAM,CAAC,KAAK,UAAU,gBAAgB,CAAC,KAGtC;IACC,MAAM,EAAE,YAAY,EAAE,iBAAiB,EAAE,GAAG,KAAK,CAAC;IAClD,MAAM,YAAY,GAAG,MAAM,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC;IAGpD,IAAI,YAAY,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC9B,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,oCAAoC,CAAC,CAAC,CAAC;QAC/D,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,IAAI,YAAY,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAE9B,MAAM,WAAW,GAAG,YAAY,CAAC,CAAC,CAAC,CAAC;QACpC,OAAO,CAAC,GAAG,CACT,KAAK,CAAC,KAAK,CAAC,0BAA0B,KAAK,CAAC,IAAI,CAAC,WAAW,CAAC,EAAE,CAAC,CACjE,CAAC;QACF,OAAO,EAAE,IAAI,EAAE,WAAW,EAAE,OAAO,EAAE,iBAAiB,CAAC,WAAW,CAAC,EAAE,CAAC;IACxE,CAAC;IAGD,IAAI,YAAY,EAAE,CAAC;QACjB,IAAI,iBAAiB,CAAC,YAAY,CAAC,EAAE,CAAC;YACpC,OAAO,CAAC,GAAG,CACT,KAAK,CAAC,KAAK,CAAC,+BAA+B,KAAK,CAAC,IAAI,CAAC,YAAY,CAAC,EAAE,CAAC,CACvE,CAAC;YAEF,kBAAkB,CAAC,gBAAgB,EAAE,YAAY,CAAC,CAAC;YACnD,OAAO,EAAE,IAAI,EAAE,YAAY,EAAE,OAAO,EAAE,iBAAiB,CAAC,YAAY,CAAC,EAAE,CAAC;QAC1E,CAAC;QACD,OAAO,CAAC,GAAG,CACT,KAAK,CAAC,MAAM,CACV,+BAA+B,YAAY,iBAAiB,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CACtF,CACF,CAAC;IACJ,CAAC;IAGD,MAAM,eAAe,GAAG,kBAAkB,EAAE,CAAC;IAC7C,MAAM,YAAY,GAChB,eAAe,IAAI,YAAY,CAAC,QAAQ,CAAC,eAAe,CAAC;QACvD,CAAC,CAAC,YAAY,CAAC,OAAO,CAAC,eAAe,CAAC;QACvC,CAAC,CAAC,CAAC,CAAC;IAGR,IAAI,CAAC;QACH,MAAM,QAAQ,GAAG,MAAM,OAAO,CAAC;YAC7B,IAAI,EAAE,QAAQ;YACd,IAAI,EAAE,OAAO;YACb,OAAO,EAAE,KAAK,CAAC,IAAI,CACjB,eAAe,IAAI,YAAY,CAAC,QAAQ,CAAC,eAAe,CAAC;gBACvD,CAAC,CAAC,2CAA2C,KAAK,CAAC,IAAI,CAAC,eAAe,CAAC,IAAI;gBAC5E,CAAC,CAAC,8BAA8B,CACnC;YACD,OAAO,EAAE,YAAY,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;gBACnC,KAAK,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;gBACnD,KAAK,EAAE,IAAI;aACZ,CAAC,CAAC;YACH,OAAO,EAAE,YAAY;SACtB,CAAC,CAAC;QAEH,IAAI,CAAC,QAAQ,CAAC,KAAK,EAAE,CAAC;YACpB,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;QAED,OAAO,CAAC,GAAG,CACT,KAAK,CAAC,KAAK,CAAC,gCAAgC,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC,CAC1E,CAAC;QAGF,kBAAkB,CAAC,gBAAgB,EAAE,QAAQ,CAAC,KAAK,CAAC,CAAC;QAErD,OAAO,EAAE,IAAI,EAAE,QAAQ,CAAC,KAAK,EAAE,OAAO,EAAE,iBAAiB,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;IAC9E,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,8BAA8B,CAAC,EAAE,KAAK,CAAC,CAAC;QAChE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"confirmation.d.ts","sourceRoot":"","sources":["../../src/cli-prompts/confirmation.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AAOrD,wBAAsB,6BAA6B,CAAC,KAAK,EAAE;IACzD,MAAM,EAAE,MAAM,CAAC;IACf,GAAG,EAAE,cAAc,CAAC;CACrB,GAAG,OAAO,CAAC,IAAI,CAAC,CAmChB"}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import chalk from 'chalk';
|
|
2
|
+
import prompts from 'prompts';
|
|
3
|
+
import { ENVIRONMENTS } from '../definitions/index.js';
|
|
4
|
+
export async function requireProductionConfirmation(input) {
|
|
5
|
+
const { action, env } = input;
|
|
6
|
+
if (env !== ENVIRONMENTS.PROD) {
|
|
7
|
+
return;
|
|
8
|
+
}
|
|
9
|
+
console.log(chalk.red.bold(`\nWARNING: You are about to perform a ${action.toUpperCase()} operation on PRODUCTION Stripe!`));
|
|
10
|
+
console.log(chalk.yellow('This operation may affect the production Stripe configuration.'));
|
|
11
|
+
try {
|
|
12
|
+
const response = await prompts({
|
|
13
|
+
type: 'confirm',
|
|
14
|
+
name: 'value',
|
|
15
|
+
message: chalk.red(`Are you absolutely sure you want to ${action} in PRODUCTION Stripe?`),
|
|
16
|
+
initial: false,
|
|
17
|
+
});
|
|
18
|
+
if (!response.value) {
|
|
19
|
+
process.exit(0);
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
catch (error) {
|
|
23
|
+
console.error(chalk.red('Error during confirmation prompt:'), error);
|
|
24
|
+
process.exit(1);
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
//# sourceMappingURL=confirmation.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"confirmation.js","sourceRoot":"","sources":["../../src/cli-prompts/confirmation.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,OAAO,MAAM,SAAS,CAAC;AAE9B,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAM9C,MAAM,CAAC,KAAK,UAAU,6BAA6B,CAAC,KAGnD;IACC,MAAM,EAAE,MAAM,EAAE,GAAG,EAAE,GAAG,KAAK,CAAC;IAE9B,IAAI,GAAG,KAAK,YAAY,CAAC,IAAI,EAAE,CAAC;QAC9B,OAAO;IACT,CAAC;IAED,OAAO,CAAC,GAAG,CACT,KAAK,CAAC,GAAG,CAAC,IAAI,CACZ,yCAAyC,MAAM,CAAC,WAAW,EAAE,kCAAkC,CAChG,CACF,CAAC;IACF,OAAO,CAAC,GAAG,CACT,KAAK,CAAC,MAAM,CACV,gEAAgE,CACjE,CACF,CAAC;IAEF,IAAI,CAAC;QACH,MAAM,QAAQ,GAAG,MAAM,OAAO,CAAC;YAC7B,IAAI,EAAE,SAAS;YACf,IAAI,EAAE,OAAO;YACb,OAAO,EAAE,KAAK,CAAC,GAAG,CAChB,uCAAuC,MAAM,wBAAwB,CACtE;YACD,OAAO,EAAE,KAAK;SACf,CAAC,CAAC;QAEH,IAAI,CAAC,QAAQ,CAAC,KAAK,EAAE,CAAC;YACpB,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;IACH,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,mCAAmC,CAAC,EAAE,KAAK,CAAC,CAAC;QACrE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"environment.d.ts","sourceRoot":"","sources":["../../src/cli-prompts/environment.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAOpD,wBAAsB,oBAAoB,CAAC,KAAK,EAAE;IAChD,QAAQ,CAAC,EAAE,cAAc,CAAC;CAC3B,GAAG,OAAO,CAAC,cAAc,CAAC,CAuD1B"}
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
import chalk from 'chalk';
|
|
2
|
+
import prompts from 'prompts';
|
|
3
|
+
import { VALID_ENVIRONMENTS } from '../definitions/index.js';
|
|
4
|
+
import { getLastUsedEnvironment, saveUserPreference } from '../utils/index.js';
|
|
5
|
+
export async function determineEnvironment(input) {
|
|
6
|
+
const { envInput } = input;
|
|
7
|
+
if (envInput && VALID_ENVIRONMENTS.includes(envInput)) {
|
|
8
|
+
console.log(chalk.green(`Environment specified via flag: ${chalk.bold(envInput)}`));
|
|
9
|
+
saveUserPreference('defaultEnvironment', envInput);
|
|
10
|
+
return envInput;
|
|
11
|
+
}
|
|
12
|
+
const lastUsedEnv = getLastUsedEnvironment();
|
|
13
|
+
const initialIndex = lastUsedEnv
|
|
14
|
+
? VALID_ENVIRONMENTS.indexOf(lastUsedEnv)
|
|
15
|
+
: 0;
|
|
16
|
+
try {
|
|
17
|
+
const response = await prompts({
|
|
18
|
+
type: 'select',
|
|
19
|
+
name: 'value',
|
|
20
|
+
message: chalk.blue(lastUsedEnv
|
|
21
|
+
? `Select the target environment (last used: ${chalk.bold(lastUsedEnv)}):`
|
|
22
|
+
: 'Select the target environment:'),
|
|
23
|
+
choices: [
|
|
24
|
+
{ title: 'Test', value: 'test' },
|
|
25
|
+
{ title: 'Development', value: 'dev' },
|
|
26
|
+
{ title: 'Staging', value: 'staging' },
|
|
27
|
+
{ title: 'Production', value: 'prod' },
|
|
28
|
+
],
|
|
29
|
+
initial: initialIndex >= 0 ? initialIndex : 0,
|
|
30
|
+
});
|
|
31
|
+
if (!response.value) {
|
|
32
|
+
process.exit(0);
|
|
33
|
+
}
|
|
34
|
+
console.log(chalk.green(`Environment selected via prompt: ${chalk.bold(response.value)}`));
|
|
35
|
+
saveUserPreference('defaultEnvironment', response.value);
|
|
36
|
+
return response.value;
|
|
37
|
+
}
|
|
38
|
+
catch (error) {
|
|
39
|
+
console.error(chalk.red('Error during environment prompt:'), error);
|
|
40
|
+
process.exit(1);
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
//# sourceMappingURL=environment.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"environment.js","sourceRoot":"","sources":["../../src/cli-prompts/environment.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,OAAO,MAAM,SAAS,CAAC;AAE9B,OAAO,EAAE,kBAAkB,EAAE,MAAM,eAAe,CAAC;AACnD,OAAO,EAAE,sBAAsB,EAAE,kBAAkB,EAAE,MAAM,SAAS,CAAC;AAKrE,MAAM,CAAC,KAAK,UAAU,oBAAoB,CAAC,KAE1C;IACC,MAAM,EAAE,QAAQ,EAAE,GAAG,KAAK,CAAC;IAG3B,IAAI,QAAQ,IAAI,kBAAkB,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE,CAAC;QACtD,OAAO,CAAC,GAAG,CACT,KAAK,CAAC,KAAK,CAAC,mCAAmC,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC,CACvE,CAAC;QAEF,kBAAkB,CAAC,oBAAoB,EAAE,QAAQ,CAAC,CAAC;QACnD,OAAO,QAAQ,CAAC;IAClB,CAAC;IAGD,MAAM,WAAW,GAAG,sBAAsB,EAAE,CAAC;IAC7C,MAAM,YAAY,GAAG,WAAW;QAC9B,CAAC,CAAC,kBAAkB,CAAC,OAAO,CAAC,WAAW,CAAC;QACzC,CAAC,CAAC,CAAC,CAAC;IAEN,IAAI,CAAC;QACH,MAAM,QAAQ,GAAG,MAAM,OAAO,CAAC;YAC7B,IAAI,EAAE,QAAQ;YACd,IAAI,EAAE,OAAO;YACb,OAAO,EAAE,KAAK,CAAC,IAAI,CACjB,WAAW;gBACT,CAAC,CAAC,6CAA6C,KAAK,CAAC,IAAI,CAAC,WAAW,CAAC,IAAI;gBAC1E,CAAC,CAAC,gCAAgC,CACrC;YACD,OAAO,EAAE;gBACP,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE;gBAChC,EAAE,KAAK,EAAE,aAAa,EAAE,KAAK,EAAE,KAAK,EAAE;gBACtC,EAAE,KAAK,EAAE,SAAS,EAAE,KAAK,EAAE,SAAS,EAAE;gBACtC,EAAE,KAAK,EAAE,YAAY,EAAE,KAAK,EAAE,MAAM,EAAE;aACvC;YACD,OAAO,EAAE,YAAY,IAAI,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;SAC9C,CAAC,CAAC;QAEH,IAAI,CAAC,QAAQ,CAAC,KAAK,EAAE,CAAC;YACpB,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;QAED,OAAO,CAAC,GAAG,CACT,KAAK,CAAC,KAAK,CACT,oCAAoC,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CACjE,CACF,CAAC;QAGF,kBAAkB,CAAC,oBAAoB,EAAE,QAAQ,CAAC,KAAK,CAAC,CAAC;QAEzD,OAAO,QAAQ,CAAC,KAAK,CAAC;IACxB,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,kCAAkC,CAAC,EAAE,KAAK,CAAC,CAAC;QACpE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/cli-prompts/index.ts"],"names":[],"mappings":"AAAA,cAAc,UAAU,CAAC;AACzB,cAAc,WAAW,CAAC;AAC1B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,eAAe,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/cli-prompts/index.ts"],"names":[],"mappings":"AAAA,cAAc,UAAU,CAAC;AACzB,cAAc,WAAW,CAAC;AAC1B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,eAAe,CAAC"}
|
package/dist/cli.d.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":""}
|
package/dist/cli.js
ADDED
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
import { Command } from 'commander';
|
|
3
|
+
import { archive, config, create, db, list, sync, update, urls, } from './commands/index.js';
|
|
4
|
+
process.on('SIGINT', () => process.exit(0));
|
|
5
|
+
process.on('SIGTERM', () => process.exit(0));
|
|
6
|
+
process.on('uncaughtException', (error) => {
|
|
7
|
+
console.error('❌ Uncaught exception:', error.message);
|
|
8
|
+
process.exit(1);
|
|
9
|
+
});
|
|
10
|
+
process.on('unhandledRejection', (reason) => {
|
|
11
|
+
console.error('❌ Unhandled rejection:', reason);
|
|
12
|
+
process.exit(1);
|
|
13
|
+
});
|
|
14
|
+
const packageVersion = '0.1.0';
|
|
15
|
+
function main() {
|
|
16
|
+
const program = new Command()
|
|
17
|
+
.name('stripe-kit')
|
|
18
|
+
.description('CLI to manage Stripe subscription plans')
|
|
19
|
+
.version(packageVersion, '-v, --version', 'display the version number')
|
|
20
|
+
.option('-c, --config <path>', 'Path to stripe.config.ts file (defaults to ./stripe.config.ts)');
|
|
21
|
+
program
|
|
22
|
+
.addCommand(create)
|
|
23
|
+
.addCommand(archive)
|
|
24
|
+
.addCommand(config)
|
|
25
|
+
.addCommand(sync)
|
|
26
|
+
.addCommand(update)
|
|
27
|
+
.addCommand(db)
|
|
28
|
+
.addCommand(list)
|
|
29
|
+
.addCommand(urls);
|
|
30
|
+
program.parse();
|
|
31
|
+
}
|
|
32
|
+
main();
|
|
33
|
+
//# sourceMappingURL=cli.js.map
|
package/dist/cli.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":";AAEA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAGpC,OAAO,EACL,OAAO,EACP,MAAM,EACN,MAAM,EACN,EAAE,EACF,IAAI,EACJ,IAAI,EACJ,MAAM,EACN,IAAI,GACL,MAAM,YAAY,CAAC;AAGpB,OAAO,CAAC,EAAE,CAAC,QAAQ,EAAE,GAAG,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;AAC5C,OAAO,CAAC,EAAE,CAAC,SAAS,EAAE,GAAG,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;AAG7C,OAAO,CAAC,EAAE,CAAC,mBAAmB,EAAE,CAAC,KAAK,EAAE,EAAE;IACxC,OAAO,CAAC,KAAK,CAAC,uBAAuB,EAAE,KAAK,CAAC,OAAO,CAAC,CAAC;IACtD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC,CAAC,CAAC;AAEH,OAAO,CAAC,EAAE,CAAC,oBAAoB,EAAE,CAAC,MAAM,EAAE,EAAE;IAC1C,OAAO,CAAC,KAAK,CAAC,wBAAwB,EAAE,MAAM,CAAC,CAAC;IAChD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC,CAAC,CAAC;AAEH,MAAM,cAAc,GAAG,OAAO,CAAC;AAE/B,SAAS,IAAI;IACX,MAAM,OAAO,GAAG,IAAI,OAAO,EAAE;SAC1B,IAAI,CAAC,YAAY,CAAC;SAClB,WAAW,CAAC,yCAAyC,CAAC;SACtD,OAAO,CAAC,cAAc,EAAE,eAAe,EAAE,4BAA4B,CAAC;SACtE,MAAM,CACL,qBAAqB,EACrB,gEAAgE,CACjE,CAAC;IAGJ,OAAO;SACJ,UAAU,CAAC,MAAM,CAAC;SAClB,UAAU,CAAC,OAAO,CAAC;SACnB,UAAU,CAAC,MAAM,CAAC;SAClB,UAAU,CAAC,IAAI,CAAC;SAChB,UAAU,CAAC,MAAM,CAAC;SAClB,UAAU,CAAC,EAAE,CAAC;SACd,UAAU,CAAC,IAAI,CAAC;SAChB,UAAU,CAAC,IAAI,CAAC,CAAC;IAEpB,OAAO,CAAC,KAAK,EAAE,CAAC;AAClB,CAAC;AAED,IAAI,EAAE,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"archive.action.d.ts","sourceRoot":"","sources":["../../../src/commands/archive/archive.action.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AA4F7C,wBAAsB,8BAA8B,CAClD,GAAG,EAAE,OAAO,EACZ,KAAK,EAAE;IACL,kBAAkB,EAAE,MAAM,EAAE,CAAC;CAC9B,GACA,OAAO,CAAC,IAAI,CAAC,CAkBf"}
|
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
import { findStripeProduct, listStripePrices } from '../../utils/index.js';
|
|
2
|
+
async function archiveStripeProducts(ctx, input) {
|
|
3
|
+
const { internalProductIds } = input;
|
|
4
|
+
if (!internalProductIds.length) {
|
|
5
|
+
ctx.logger.info('No product IDs provided for archiving');
|
|
6
|
+
return;
|
|
7
|
+
}
|
|
8
|
+
let archivedCount = 0;
|
|
9
|
+
for (const internalProductId of internalProductIds) {
|
|
10
|
+
try {
|
|
11
|
+
const product = await findStripeProduct(ctx, { internalProductId });
|
|
12
|
+
if (!product) {
|
|
13
|
+
ctx.logger.info(`Product not found in Stripe: ${internalProductId}`);
|
|
14
|
+
continue;
|
|
15
|
+
}
|
|
16
|
+
await ctx.stripeClient.products.update(product.id, {
|
|
17
|
+
active: false,
|
|
18
|
+
});
|
|
19
|
+
ctx.logger.info(`Archived product in Stripe: ${product.id} (Internal ID: ${internalProductId})`);
|
|
20
|
+
archivedCount++;
|
|
21
|
+
}
|
|
22
|
+
catch (error) {
|
|
23
|
+
ctx.logger.error({
|
|
24
|
+
message: 'Error archiving product in Stripe',
|
|
25
|
+
error,
|
|
26
|
+
internalProductId,
|
|
27
|
+
});
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
if (archivedCount === 0) {
|
|
31
|
+
ctx.logger.info('No products were archived in Stripe');
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
async function archiveStripePrices(ctx, input) {
|
|
35
|
+
const { internalProductIds } = input;
|
|
36
|
+
if (!internalProductIds.length) {
|
|
37
|
+
ctx.logger.info('No product IDs provided for archiving');
|
|
38
|
+
return;
|
|
39
|
+
}
|
|
40
|
+
const prices = await listStripePrices(ctx, { showAll: false });
|
|
41
|
+
const pricesToArchive = prices.filter((price) => internalProductIds.includes(price.metadata?.[ctx.config.metadata.productIdField] ?? ''));
|
|
42
|
+
if (pricesToArchive.length === 0) {
|
|
43
|
+
ctx.logger.info('No prices to archive in Stripe');
|
|
44
|
+
return;
|
|
45
|
+
}
|
|
46
|
+
for (const price of pricesToArchive) {
|
|
47
|
+
try {
|
|
48
|
+
await ctx.stripeClient.prices.update(price.id, {
|
|
49
|
+
active: false,
|
|
50
|
+
});
|
|
51
|
+
ctx.logger.info(`Archived price in Stripe: ${price.id}`);
|
|
52
|
+
}
|
|
53
|
+
catch (error) {
|
|
54
|
+
ctx.logger.error({
|
|
55
|
+
message: 'Error archiving price in Stripe',
|
|
56
|
+
error,
|
|
57
|
+
priceId: price.id,
|
|
58
|
+
});
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
export async function archiveStripeSubscriptionPlans(ctx, input) {
|
|
63
|
+
const { internalProductIds } = input;
|
|
64
|
+
if (internalProductIds.length === 0) {
|
|
65
|
+
ctx.logger.info('No product IDs provided for archiving');
|
|
66
|
+
return;
|
|
67
|
+
}
|
|
68
|
+
ctx.logger.info(`Archiving ${internalProductIds.length} subscription plans in Stripe...`);
|
|
69
|
+
await archiveStripeProducts(ctx, { internalProductIds });
|
|
70
|
+
await archiveStripePrices(ctx, { internalProductIds });
|
|
71
|
+
ctx.logger.info(`Successfully archived ${internalProductIds.length} subscription plans in Stripe`);
|
|
72
|
+
}
|
|
73
|
+
//# sourceMappingURL=archive.action.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"archive.action.js","sourceRoot":"","sources":["../../../src/commands/archive/archive.action.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"archive.command.d.ts","sourceRoot":"","sources":["../../../src/commands/archive/archive.command.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAKpC,eAAO,MAAM,OAAO,SA0BhB,CAAC"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import chalk from 'chalk';
|
|
2
|
+
import { Command } from 'commander';
|
|
3
|
+
import { archiveStripeSubscriptionPlans } from './archive.action.js';
|
|
4
|
+
import { runArchivePreflight } from './archive.preflight.js';
|
|
5
|
+
export const archive = new Command()
|
|
6
|
+
.name('archive')
|
|
7
|
+
.description('Archive Stripe subscription plans')
|
|
8
|
+
.option('-e, --env <environment>', 'Target environment (test, dev, staging, prod)')
|
|
9
|
+
.option('-a, --adapter <name>', 'Database adapter name')
|
|
10
|
+
.action(async (options, command) => {
|
|
11
|
+
try {
|
|
12
|
+
const { ctx, productIdsToArchive } = await runArchivePreflight(options, command);
|
|
13
|
+
await archiveStripeSubscriptionPlans(ctx, {
|
|
14
|
+
internalProductIds: productIdsToArchive,
|
|
15
|
+
});
|
|
16
|
+
console.log(chalk.green('\nOperation completed successfully.'));
|
|
17
|
+
}
|
|
18
|
+
catch (error) {
|
|
19
|
+
console.error(chalk.red(`\nOperation failed: ${error}`));
|
|
20
|
+
process.exit(1);
|
|
21
|
+
}
|
|
22
|
+
});
|
|
23
|
+
//# sourceMappingURL=archive.command.js.map
|