@profullstack/stripe-config 1.0.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.
@@ -0,0 +1,307 @@
1
+ import inquirer from 'inquirer';
2
+ import chalk from 'chalk';
3
+ import ora from 'ora';
4
+ import { ConfigManager } from '../../core/config-manager.js';
5
+ import { StripeClient } from '../../core/stripe-client.js';
6
+ /**
7
+ * Products command - Manage Stripe products
8
+ */
9
+ export async function productsCommand() {
10
+ console.log(chalk.bold.blue('\n📦 Stripe Products Management\n'));
11
+ const configManager = new ConfigManager();
12
+ const config = await configManager.loadConfig();
13
+ if (config.projects.length === 0) {
14
+ console.log(chalk.yellow('No projects configured. Run "stripeconf setup" first.'));
15
+ return;
16
+ }
17
+ // Select project
18
+ let project;
19
+ if (config.projects.length === 1) {
20
+ project = config.projects[0];
21
+ console.log(chalk.gray(`Using project: ${project.name}\n`));
22
+ }
23
+ else {
24
+ const { selectedProject } = await inquirer.prompt([
25
+ {
26
+ type: 'list',
27
+ name: 'selectedProject',
28
+ message: 'Select a project:',
29
+ choices: config.projects.map((p) => ({
30
+ name: `${p.name} (${p.environment})`,
31
+ value: p.name,
32
+ })),
33
+ },
34
+ ]);
35
+ project = await configManager.getProject(selectedProject);
36
+ }
37
+ const stripeClient = new StripeClient(project);
38
+ // Select operation
39
+ const { operation } = await inquirer.prompt([
40
+ {
41
+ type: 'list',
42
+ name: 'operation',
43
+ message: 'What would you like to do?',
44
+ choices: [
45
+ { name: 'List all products', value: 'list' },
46
+ { name: 'View product details', value: 'get' },
47
+ { name: 'Create new product', value: 'create' },
48
+ { name: 'Update product', value: 'update' },
49
+ { name: 'Delete product', value: 'delete' },
50
+ ],
51
+ },
52
+ ]);
53
+ switch (operation) {
54
+ case 'list':
55
+ await listProducts(stripeClient);
56
+ break;
57
+ case 'get':
58
+ await getProduct(stripeClient);
59
+ break;
60
+ case 'create':
61
+ await createProduct(stripeClient);
62
+ break;
63
+ case 'update':
64
+ await updateProduct(stripeClient);
65
+ break;
66
+ case 'delete':
67
+ await deleteProduct(stripeClient);
68
+ break;
69
+ }
70
+ }
71
+ async function listProducts(stripeClient) {
72
+ const spinner = ora('Fetching products...').start();
73
+ try {
74
+ const products = await stripeClient.listProducts({ limit: 100 });
75
+ spinner.stop();
76
+ if (products.length === 0) {
77
+ console.log(chalk.yellow('\nNo products found.'));
78
+ return;
79
+ }
80
+ console.log(chalk.bold(`\nFound ${products.length} product(s):\n`));
81
+ products.forEach((product) => {
82
+ console.log(chalk.bold(` ${product.name}`) + chalk.gray(` (${product.id})`));
83
+ if (product.description) {
84
+ console.log(chalk.gray(` ${product.description}`));
85
+ }
86
+ console.log(chalk.gray(` Active: ${product.active ? 'Yes' : 'No'}`));
87
+ console.log();
88
+ });
89
+ }
90
+ catch (error) {
91
+ spinner.fail('Failed to fetch products');
92
+ throw error;
93
+ }
94
+ }
95
+ async function getProduct(stripeClient) {
96
+ const { productId } = await inquirer.prompt([
97
+ {
98
+ type: 'input',
99
+ name: 'productId',
100
+ message: 'Product ID:',
101
+ validate: (input) => input.trim() ? true : 'Product ID is required',
102
+ },
103
+ ]);
104
+ const spinner = ora('Fetching product...').start();
105
+ try {
106
+ const product = await stripeClient.getProduct(productId);
107
+ spinner.stop();
108
+ console.log(chalk.bold('\nProduct Details:\n'));
109
+ console.log(chalk.bold(' Name:'), product.name);
110
+ console.log(chalk.bold(' ID:'), product.id);
111
+ console.log(chalk.bold(' Active:'), product.active ? 'Yes' : 'No');
112
+ if (product.description) {
113
+ console.log(chalk.bold(' Description:'), product.description);
114
+ }
115
+ if (product.images && product.images.length > 0) {
116
+ console.log(chalk.bold(' Images:'), product.images.length);
117
+ }
118
+ if (product.metadata && Object.keys(product.metadata).length > 0) {
119
+ console.log(chalk.bold(' Metadata:'), JSON.stringify(product.metadata, null, 2));
120
+ }
121
+ console.log();
122
+ }
123
+ catch (error) {
124
+ spinner.fail('Failed to fetch product');
125
+ throw error;
126
+ }
127
+ }
128
+ async function createProduct(stripeClient) {
129
+ console.log(chalk.bold('\nCreate New Product\n'));
130
+ const answers = await inquirer.prompt([
131
+ {
132
+ type: 'input',
133
+ name: 'name',
134
+ message: 'Product name:',
135
+ validate: (input) => input.trim() ? true : 'Name is required',
136
+ },
137
+ {
138
+ type: 'input',
139
+ name: 'description',
140
+ message: 'Description (optional):',
141
+ },
142
+ {
143
+ type: 'confirm',
144
+ name: 'active',
145
+ message: 'Active?',
146
+ default: true,
147
+ },
148
+ {
149
+ type: 'input',
150
+ name: 'images',
151
+ message: 'Image URLs (comma-separated, optional):',
152
+ },
153
+ {
154
+ type: 'input',
155
+ name: 'metadata',
156
+ message: 'Metadata (JSON format, optional):',
157
+ },
158
+ ]);
159
+ const spinner = ora('Creating product...').start();
160
+ try {
161
+ const productData = {
162
+ name: answers.name,
163
+ active: answers.active,
164
+ };
165
+ if (answers.description) {
166
+ productData.description = answers.description;
167
+ }
168
+ if (answers.images) {
169
+ productData.images = answers.images.split(',').map((url) => url.trim());
170
+ }
171
+ if (answers.metadata) {
172
+ try {
173
+ productData.metadata = JSON.parse(answers.metadata);
174
+ }
175
+ catch {
176
+ spinner.fail('Invalid metadata JSON format');
177
+ return;
178
+ }
179
+ }
180
+ const product = await stripeClient.createProduct(productData);
181
+ spinner.succeed('Product created successfully');
182
+ console.log(chalk.green('\n✓ Product created!'));
183
+ console.log(chalk.gray(` ID: ${product.id}`));
184
+ console.log(chalk.gray(` Name: ${product.name}\n`));
185
+ }
186
+ catch (error) {
187
+ spinner.fail('Failed to create product');
188
+ throw error;
189
+ }
190
+ }
191
+ async function updateProduct(stripeClient) {
192
+ const { productId } = await inquirer.prompt([
193
+ {
194
+ type: 'input',
195
+ name: 'productId',
196
+ message: 'Product ID to update:',
197
+ validate: (input) => input.trim() ? true : 'Product ID is required',
198
+ },
199
+ ]);
200
+ // Fetch current product
201
+ const spinner = ora('Fetching product...').start();
202
+ let currentProduct;
203
+ try {
204
+ currentProduct = await stripeClient.getProduct(productId);
205
+ spinner.stop();
206
+ }
207
+ catch (error) {
208
+ spinner.fail('Failed to fetch product');
209
+ throw error;
210
+ }
211
+ console.log(chalk.bold('\nCurrent values:\n'));
212
+ console.log(chalk.gray(` Name: ${currentProduct.name}`));
213
+ console.log(chalk.gray(` Description: ${currentProduct.description || 'None'}`));
214
+ console.log(chalk.gray(` Active: ${currentProduct.active}\n`));
215
+ const answers = await inquirer.prompt([
216
+ {
217
+ type: 'input',
218
+ name: 'name',
219
+ message: 'New name (leave empty to keep current):',
220
+ },
221
+ {
222
+ type: 'input',
223
+ name: 'description',
224
+ message: 'New description (leave empty to keep current):',
225
+ },
226
+ {
227
+ type: 'list',
228
+ name: 'active',
229
+ message: 'Active status:',
230
+ choices: [
231
+ { name: 'Keep current', value: null },
232
+ { name: 'Active', value: true },
233
+ { name: 'Inactive', value: false },
234
+ ],
235
+ },
236
+ ]);
237
+ const updates = {};
238
+ if (answers.name)
239
+ updates.name = answers.name;
240
+ if (answers.description)
241
+ updates.description = answers.description;
242
+ if (answers.active !== null)
243
+ updates.active = answers.active;
244
+ if (Object.keys(updates).length === 0) {
245
+ console.log(chalk.yellow('\nNo changes made.'));
246
+ return;
247
+ }
248
+ const updateSpinner = ora('Updating product...').start();
249
+ try {
250
+ const product = await stripeClient.updateProduct(productId, updates);
251
+ updateSpinner.succeed('Product updated successfully');
252
+ console.log(chalk.green('\n✓ Product updated!'));
253
+ console.log(chalk.gray(` ID: ${product.id}`));
254
+ console.log(chalk.gray(` Name: ${product.name}\n`));
255
+ }
256
+ catch (error) {
257
+ updateSpinner.fail('Failed to update product');
258
+ throw error;
259
+ }
260
+ }
261
+ async function deleteProduct(stripeClient) {
262
+ const { productId } = await inquirer.prompt([
263
+ {
264
+ type: 'input',
265
+ name: 'productId',
266
+ message: 'Product ID to delete:',
267
+ validate: (input) => input.trim() ? true : 'Product ID is required',
268
+ },
269
+ ]);
270
+ // Fetch product to show details
271
+ const spinner = ora('Fetching product...').start();
272
+ let product;
273
+ try {
274
+ product = await stripeClient.getProduct(productId);
275
+ spinner.stop();
276
+ }
277
+ catch (error) {
278
+ spinner.fail('Failed to fetch product');
279
+ throw error;
280
+ }
281
+ console.log(chalk.bold('\nProduct to delete:\n'));
282
+ console.log(chalk.gray(` Name: ${product.name}`));
283
+ console.log(chalk.gray(` ID: ${product.id}\n`));
284
+ const { confirm } = await inquirer.prompt([
285
+ {
286
+ type: 'confirm',
287
+ name: 'confirm',
288
+ message: chalk.red('Are you sure you want to delete this product?'),
289
+ default: false,
290
+ },
291
+ ]);
292
+ if (!confirm) {
293
+ console.log(chalk.yellow('\nDeletion cancelled.'));
294
+ return;
295
+ }
296
+ const deleteSpinner = ora('Deleting product...').start();
297
+ try {
298
+ await stripeClient.deleteProduct(productId);
299
+ deleteSpinner.succeed('Product deleted successfully');
300
+ console.log(chalk.green('\n✓ Product deleted!\n'));
301
+ }
302
+ catch (error) {
303
+ deleteSpinner.fail('Failed to delete product');
304
+ throw error;
305
+ }
306
+ }
307
+ //# sourceMappingURL=products.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"products.js","sourceRoot":"","sources":["../../../src/cli/commands/products.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,5 @@
1
+ /**
2
+ * Setup command - Configure a new Stripe project
3
+ */
4
+ export declare function setupCommand(): Promise<void>;
5
+ //# sourceMappingURL=setup.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"setup.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/setup.ts"],"names":[],"mappings":"AAOA;;GAEG;AACH,wBAAsB,YAAY,IAAI,OAAO,CAAC,IAAI,CAAC,CAyHlD"}
@@ -0,0 +1,120 @@
1
+ import inquirer from 'inquirer';
2
+ import chalk from 'chalk';
3
+ import ora from 'ora';
4
+ import { ConfigManager } from '../../core/config-manager.js';
5
+ import { StripeClient } from '../../core/stripe-client.js';
6
+ /**
7
+ * Setup command - Configure a new Stripe project
8
+ */
9
+ export async function setupCommand() {
10
+ console.log(chalk.bold.blue('\n🔧 Stripe Project Setup\n'));
11
+ const configManager = new ConfigManager();
12
+ // Prompt for project details
13
+ const answers = await inquirer.prompt([
14
+ {
15
+ type: 'input',
16
+ name: 'name',
17
+ message: 'Project name:',
18
+ validate: (input) => {
19
+ if (!input.trim()) {
20
+ return 'Project name is required';
21
+ }
22
+ return true;
23
+ },
24
+ },
25
+ {
26
+ type: 'list',
27
+ name: 'environment',
28
+ message: 'Environment:',
29
+ choices: [
30
+ { name: 'Test', value: 'test' },
31
+ { name: 'Live', value: 'live' },
32
+ ],
33
+ default: 'test',
34
+ },
35
+ {
36
+ type: 'password',
37
+ name: 'publishableKey',
38
+ message: 'Publishable key:',
39
+ validate: (input) => {
40
+ if (!input.trim()) {
41
+ return 'Publishable key is required';
42
+ }
43
+ if (!input.startsWith('pk_')) {
44
+ return 'Invalid publishable key format (should start with pk_)';
45
+ }
46
+ return true;
47
+ },
48
+ },
49
+ {
50
+ type: 'password',
51
+ name: 'secretKey',
52
+ message: 'Secret key:',
53
+ validate: (input) => {
54
+ if (!input.trim()) {
55
+ return 'Secret key is required';
56
+ }
57
+ if (!input.startsWith('sk_')) {
58
+ return 'Invalid secret key format (should start with sk_)';
59
+ }
60
+ return true;
61
+ },
62
+ },
63
+ {
64
+ type: 'password',
65
+ name: 'webhookSecret',
66
+ message: 'Webhook secret (optional):',
67
+ validate: (input) => {
68
+ if (input && !input.startsWith('whsec_')) {
69
+ return 'Invalid webhook secret format (should start with whsec_)';
70
+ }
71
+ return true;
72
+ },
73
+ },
74
+ {
75
+ type: 'input',
76
+ name: 'defaultCurrency',
77
+ message: 'Default currency:',
78
+ default: 'usd',
79
+ validate: (input) => {
80
+ if (!input.trim()) {
81
+ return 'Currency is required';
82
+ }
83
+ if (input.length !== 3) {
84
+ return 'Currency must be a 3-letter ISO code (e.g., usd, eur)';
85
+ }
86
+ return true;
87
+ },
88
+ },
89
+ ]);
90
+ // Validate API keys by making a test request
91
+ const spinner = ora('Validating API keys...').start();
92
+ try {
93
+ const testProject = {
94
+ name: answers.name,
95
+ environment: answers.environment,
96
+ publishableKey: answers.publishableKey,
97
+ secretKey: answers.secretKey,
98
+ webhookSecret: answers.webhookSecret || undefined,
99
+ defaultCurrency: answers.defaultCurrency.toLowerCase(),
100
+ };
101
+ // Test the API key by listing products (limit 1)
102
+ const stripeClient = new StripeClient(testProject);
103
+ await stripeClient.listProducts({ limit: 1 });
104
+ spinner.succeed('API keys validated successfully');
105
+ // Save the project configuration
106
+ const saveSpinner = ora('Saving configuration...').start();
107
+ const project = await configManager.addProject(testProject);
108
+ saveSpinner.succeed('Configuration saved');
109
+ console.log(chalk.green('\n✓ Project configured successfully!'));
110
+ console.log(chalk.gray(` Project: ${project.name}`));
111
+ console.log(chalk.gray(` Environment: ${project.environment}`));
112
+ console.log(chalk.gray(` Currency: ${project.defaultCurrency}`));
113
+ console.log(chalk.gray(` Config: ${configManager.getConfigPath()}\n`));
114
+ }
115
+ catch (error) {
116
+ spinner.fail('Failed to validate API keys');
117
+ throw new Error(`Invalid API keys or network error: ${error.message}`);
118
+ }
119
+ }
120
+ //# sourceMappingURL=setup.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"setup.js","sourceRoot":"","sources":["../../../src/cli/commands/setup.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ #!/usr/bin/env node
2
+ export {};
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/cli/index.ts"],"names":[],"mappings":""}
@@ -0,0 +1,52 @@
1
+ #!/usr/bin/env node
2
+ import { Command } from 'commander';
3
+ import chalk from 'chalk';
4
+ import { setupCommand } from './commands/setup.js';
5
+ import { productsCommand } from './commands/products.js';
6
+ import { pricesCommand } from './commands/prices.js';
7
+ const program = new Command();
8
+ program
9
+ .name('stripeconf')
10
+ .description('CLI tool for managing Stripe products and prices')
11
+ .version('1.0.0');
12
+ // Setup command
13
+ program
14
+ .command('setup')
15
+ .description('Configure a new Stripe project')
16
+ .action(async () => {
17
+ try {
18
+ await setupCommand();
19
+ }
20
+ catch (error) {
21
+ console.error(chalk.red('Error:'), error.message);
22
+ process.exit(1);
23
+ }
24
+ });
25
+ // Products command
26
+ program
27
+ .command('products')
28
+ .description('Manage Stripe products')
29
+ .action(async () => {
30
+ try {
31
+ await productsCommand();
32
+ }
33
+ catch (error) {
34
+ console.error(chalk.red('Error:'), error.message);
35
+ process.exit(1);
36
+ }
37
+ });
38
+ // Prices command
39
+ program
40
+ .command('prices')
41
+ .description('Manage Stripe prices')
42
+ .action(async () => {
43
+ try {
44
+ await pricesCommand();
45
+ }
46
+ catch (error) {
47
+ console.error(chalk.red('Error:'), error.message);
48
+ process.exit(1);
49
+ }
50
+ });
51
+ program.parse();
52
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/cli/index.ts"],"names":[],"mappings":";AAEA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACnD,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AACzD,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAErD,MAAM,OAAO,GAAG,IAAI,OAAO,EAAE,CAAC;AAE9B,OAAO;KACJ,IAAI,CAAC,YAAY,CAAC;KAClB,WAAW,CAAC,kDAAkD,CAAC;KAC/D,OAAO,CAAC,OAAO,CAAC,CAAC;AAEpB,gBAAgB;AAChB,OAAO;KACJ,OAAO,CAAC,OAAO,CAAC;KAChB,WAAW,CAAC,gCAAgC,CAAC;KAC7C,MAAM,CAAC,KAAK,IAAI,EAAE;IACjB,IAAI,CAAC;QACH,MAAM,YAAY,EAAE,CAAC;IACvB,CAAC;IAAC,OAAO,KAAU,EAAE,CAAC;QACpB,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,KAAK,CAAC,OAAO,CAAC,CAAC;QAClD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;AACH,CAAC,CAAC,CAAC;AAEL,mBAAmB;AACnB,OAAO;KACJ,OAAO,CAAC,UAAU,CAAC;KACnB,WAAW,CAAC,wBAAwB,CAAC;KACrC,MAAM,CAAC,KAAK,IAAI,EAAE;IACjB,IAAI,CAAC;QACH,MAAM,eAAe,EAAE,CAAC;IAC1B,CAAC;IAAC,OAAO,KAAU,EAAE,CAAC;QACpB,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,KAAK,CAAC,OAAO,CAAC,CAAC;QAClD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;AACH,CAAC,CAAC,CAAC;AAEL,iBAAiB;AACjB,OAAO;KACJ,OAAO,CAAC,QAAQ,CAAC;KACjB,WAAW,CAAC,sBAAsB,CAAC;KACnC,MAAM,CAAC,KAAK,IAAI,EAAE;IACjB,IAAI,CAAC;QACH,MAAM,aAAa,EAAE,CAAC;IACxB,CAAC;IAAC,OAAO,KAAU,EAAE,CAAC;QACpB,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,KAAK,CAAC,OAAO,CAAC,CAAC;QAClD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;AACH,CAAC,CAAC,CAAC;AAEL,OAAO,CAAC,KAAK,EAAE,CAAC"}
@@ -0,0 +1,60 @@
1
+ import type { Config, ProjectConfig } from './types.js';
2
+ /**
3
+ * Manages configuration file operations for Stripe projects
4
+ * Stores configuration in ~/.config/stripeconf/config.json
5
+ */
6
+ export declare class ConfigManager {
7
+ private configPath;
8
+ private readonly CONFIG_VERSION;
9
+ /**
10
+ * Create a new ConfigManager instance
11
+ * @param configPath Optional custom path for config file
12
+ */
13
+ constructor(configPath?: string);
14
+ /**
15
+ * Get the current config file path
16
+ */
17
+ getConfigPath(): string;
18
+ /**
19
+ * Ensure the config directory exists with proper permissions
20
+ */
21
+ ensureConfigDirectory(): Promise<void>;
22
+ /**
23
+ * Load configuration from file
24
+ * Returns empty config if file doesn't exist
25
+ */
26
+ loadConfig(): Promise<Config>;
27
+ /**
28
+ * Save configuration to file with proper permissions
29
+ */
30
+ saveConfig(config: Config): Promise<void>;
31
+ /**
32
+ * Add a new project to the configuration
33
+ */
34
+ addProject(projectInput: Omit<ProjectConfig, 'id' | 'createdAt' | 'updatedAt'>): Promise<ProjectConfig>;
35
+ /**
36
+ * Get a project by name
37
+ */
38
+ getProject(name: string): Promise<ProjectConfig>;
39
+ /**
40
+ * List all projects
41
+ */
42
+ listProjects(): Promise<ProjectConfig[]>;
43
+ /**
44
+ * Update an existing project
45
+ */
46
+ updateProject(name: string, updates: Partial<Omit<ProjectConfig, 'id' | 'name' | 'createdAt'>>): Promise<ProjectConfig>;
47
+ /**
48
+ * Delete a project by name
49
+ */
50
+ deleteProject(name: string): Promise<void>;
51
+ /**
52
+ * Set the default project
53
+ */
54
+ setDefaultProject(name: string): Promise<void>;
55
+ /**
56
+ * Get the default project
57
+ */
58
+ getDefaultProject(): Promise<ProjectConfig>;
59
+ }
60
+ //# sourceMappingURL=config-manager.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config-manager.d.ts","sourceRoot":"","sources":["../../src/core/config-manager.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAGxD;;;GAGG;AACH,qBAAa,aAAa;IACxB,OAAO,CAAC,UAAU,CAAS;IAC3B,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAW;IAE1C;;;OAGG;gBACS,UAAU,CAAC,EAAE,MAAM;IAK/B;;OAEG;IACH,aAAa,IAAI,MAAM;IAIvB;;OAEG;IACG,qBAAqB,IAAI,OAAO,CAAC,IAAI,CAAC;IAa5C;;;OAGG;IACG,UAAU,IAAI,OAAO,CAAC,MAAM,CAAC;IA0BnC;;OAEG;IACG,UAAU,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAgB/C;;OAEG;IACG,UAAU,CACd,YAAY,EAAE,IAAI,CAAC,aAAa,EAAE,IAAI,GAAG,WAAW,GAAG,WAAW,CAAC,GAClE,OAAO,CAAC,aAAa,CAAC;IA+BzB;;OAEG;IACG,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,aAAa,CAAC;IAWtD;;OAEG;IACG,YAAY,IAAI,OAAO,CAAC,aAAa,EAAE,CAAC;IAK9C;;OAEG;IACG,aAAa,CACjB,IAAI,EAAE,MAAM,EACZ,OAAO,EAAE,OAAO,CAAC,IAAI,CAAC,aAAa,EAAE,IAAI,GAAG,MAAM,GAAG,WAAW,CAAC,CAAC,GACjE,OAAO,CAAC,aAAa,CAAC;IAqBzB;;OAEG;IACG,aAAa,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAmBhD;;OAEG;IACG,iBAAiB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAapD;;OAEG;IACG,iBAAiB,IAAI,OAAO,CAAC,aAAa,CAAC;CAWlD"}