@creem_io/cli 0.2.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (98) hide show
  1. package/README.md +155 -0
  2. package/dist/commands/checkouts.d.ts +3 -0
  3. package/dist/commands/checkouts.d.ts.map +1 -0
  4. package/dist/commands/checkouts.js +175 -0
  5. package/dist/commands/checkouts.js.map +1 -0
  6. package/dist/commands/config.d.ts +3 -0
  7. package/dist/commands/config.d.ts.map +1 -0
  8. package/dist/commands/config.js +184 -0
  9. package/dist/commands/config.js.map +1 -0
  10. package/dist/commands/customers.d.ts +3 -0
  11. package/dist/commands/customers.d.ts.map +1 -0
  12. package/dist/commands/customers.js +246 -0
  13. package/dist/commands/customers.js.map +1 -0
  14. package/dist/commands/discounts.d.ts +3 -0
  15. package/dist/commands/discounts.d.ts.map +1 -0
  16. package/dist/commands/discounts.js +419 -0
  17. package/dist/commands/discounts.js.map +1 -0
  18. package/dist/commands/index.d.ts +12 -0
  19. package/dist/commands/index.d.ts.map +1 -0
  20. package/dist/commands/index.js +26 -0
  21. package/dist/commands/index.js.map +1 -0
  22. package/dist/commands/login.d.ts +3 -0
  23. package/dist/commands/login.d.ts.map +1 -0
  24. package/dist/commands/login.js +115 -0
  25. package/dist/commands/login.js.map +1 -0
  26. package/dist/commands/logout.d.ts +3 -0
  27. package/dist/commands/logout.d.ts.map +1 -0
  28. package/dist/commands/logout.js +61 -0
  29. package/dist/commands/logout.js.map +1 -0
  30. package/dist/commands/migrate.d.ts +3 -0
  31. package/dist/commands/migrate.d.ts.map +1 -0
  32. package/dist/commands/migrate.js +1073 -0
  33. package/dist/commands/migrate.js.map +1 -0
  34. package/dist/commands/products.d.ts +3 -0
  35. package/dist/commands/products.d.ts.map +1 -0
  36. package/dist/commands/products.js +400 -0
  37. package/dist/commands/products.js.map +1 -0
  38. package/dist/commands/subscriptions.d.ts +3 -0
  39. package/dist/commands/subscriptions.d.ts.map +1 -0
  40. package/dist/commands/subscriptions.js +476 -0
  41. package/dist/commands/subscriptions.js.map +1 -0
  42. package/dist/commands/transactions.d.ts +3 -0
  43. package/dist/commands/transactions.d.ts.map +1 -0
  44. package/dist/commands/transactions.js +326 -0
  45. package/dist/commands/transactions.js.map +1 -0
  46. package/dist/commands/whoami.d.ts +3 -0
  47. package/dist/commands/whoami.d.ts.map +1 -0
  48. package/dist/commands/whoami.js +76 -0
  49. package/dist/commands/whoami.js.map +1 -0
  50. package/dist/index.d.ts +3 -0
  51. package/dist/index.d.ts.map +1 -0
  52. package/dist/index.js +109 -0
  53. package/dist/index.js.map +1 -0
  54. package/dist/lib/api.d.ts +25 -0
  55. package/dist/lib/api.d.ts.map +1 -0
  56. package/dist/lib/api.js +77 -0
  57. package/dist/lib/api.js.map +1 -0
  58. package/dist/lib/auth.d.ts +28 -0
  59. package/dist/lib/auth.d.ts.map +1 -0
  60. package/dist/lib/auth.js +113 -0
  61. package/dist/lib/auth.js.map +1 -0
  62. package/dist/lib/config.d.ts +34 -0
  63. package/dist/lib/config.d.ts.map +1 -0
  64. package/dist/lib/config.js +144 -0
  65. package/dist/lib/config.js.map +1 -0
  66. package/dist/lib/env-cache.d.ts +10 -0
  67. package/dist/lib/env-cache.d.ts.map +1 -0
  68. package/dist/lib/env-cache.js +27 -0
  69. package/dist/lib/env-cache.js.map +1 -0
  70. package/dist/tui/command-bar.d.ts +10 -0
  71. package/dist/tui/command-bar.d.ts.map +1 -0
  72. package/dist/tui/command-bar.js +35 -0
  73. package/dist/tui/command-bar.js.map +1 -0
  74. package/dist/tui/engine.d.ts +3 -0
  75. package/dist/tui/engine.d.ts.map +1 -0
  76. package/dist/tui/engine.js +454 -0
  77. package/dist/tui/engine.js.map +1 -0
  78. package/dist/tui/index.d.ts +3 -0
  79. package/dist/tui/index.d.ts.map +1 -0
  80. package/dist/tui/index.js +6 -0
  81. package/dist/tui/index.js.map +1 -0
  82. package/dist/tui/keymap.d.ts +29 -0
  83. package/dist/tui/keymap.d.ts.map +1 -0
  84. package/dist/tui/keymap.js +143 -0
  85. package/dist/tui/keymap.js.map +1 -0
  86. package/dist/tui/renderer.d.ts +12 -0
  87. package/dist/tui/renderer.d.ts.map +1 -0
  88. package/dist/tui/renderer.js +379 -0
  89. package/dist/tui/renderer.js.map +1 -0
  90. package/dist/tui/types.d.ts +53 -0
  91. package/dist/tui/types.d.ts.map +1 -0
  92. package/dist/tui/types.js +24 -0
  93. package/dist/tui/types.js.map +1 -0
  94. package/dist/utils/output.d.ts +67 -0
  95. package/dist/utils/output.d.ts.map +1 -0
  96. package/dist/utils/output.js +245 -0
  97. package/dist/utils/output.js.map +1 -0
  98. package/package.json +56 -0
@@ -0,0 +1,419 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ var __importDefault = (this && this.__importDefault) || function (mod) {
36
+ return (mod && mod.__esModule) ? mod : { "default": mod };
37
+ };
38
+ Object.defineProperty(exports, "__esModule", { value: true });
39
+ exports.createDiscountsCommand = createDiscountsCommand;
40
+ const commander_1 = require("commander");
41
+ const ora_1 = __importDefault(require("ora"));
42
+ const chalk_1 = __importDefault(require("chalk"));
43
+ const api_1 = require("../lib/api");
44
+ const config_1 = require("../lib/config");
45
+ const output = __importStar(require("../utils/output"));
46
+ /**
47
+ * Formats discount type with amount for display
48
+ */
49
+ function formatDiscountValue(discount) {
50
+ if (discount.type === "percentage") {
51
+ return `${discount.percentage || discount.amount}%`;
52
+ }
53
+ else {
54
+ const amount = discount.amount || 0;
55
+ const currency = discount.currency || "USD";
56
+ return output.formatCurrency(amount, currency);
57
+ }
58
+ }
59
+ /**
60
+ * Formats discount status with color
61
+ */
62
+ function formatStatus(status) {
63
+ switch (status?.toLowerCase()) {
64
+ case "active":
65
+ return chalk_1.default.green(status);
66
+ case "expired":
67
+ return chalk_1.default.red(status);
68
+ case "draft":
69
+ return chalk_1.default.dim(status);
70
+ case "scheduled":
71
+ return chalk_1.default.yellow(status);
72
+ default:
73
+ return status || "-";
74
+ }
75
+ }
76
+ /**
77
+ * Formats duration for display
78
+ */
79
+ function formatDuration(discount) {
80
+ if (!discount.duration)
81
+ return "-";
82
+ switch (discount.duration) {
83
+ case "forever":
84
+ return "Forever";
85
+ case "once":
86
+ return "Once";
87
+ case "repeating":
88
+ return `${discount.durationInMonths || 0} months`;
89
+ default:
90
+ return discount.duration;
91
+ }
92
+ }
93
+ function createDiscountsCommand() {
94
+ const command = new commander_1.Command("discounts").description("Manage discounts").action(() => {
95
+ command.help();
96
+ });
97
+ // List discounts
98
+ command
99
+ .command("list")
100
+ .description("List all discounts")
101
+ .option("--json", "Output as JSON")
102
+ .option("--page <number>", "Page number", "1")
103
+ .option("--limit <number>", "Number of results per page", "20")
104
+ .action(async (options) => {
105
+ const spinner = (0, ora_1.default)("Fetching discounts...").start();
106
+ try {
107
+ // Note: The SDK doesn't have a list method for discounts yet,
108
+ // so we make a direct API call to the internal endpoint
109
+ const apiKey = (0, config_1.getConfigValue)("api_key");
110
+ if (!apiKey) {
111
+ spinner.stop();
112
+ output.error("Not authenticated. Run `creem login` first.");
113
+ process.exit(1);
114
+ }
115
+ const baseUrl = (0, api_1.getBaseUrl)();
116
+ const url = new URL(`${baseUrl}/v1/discounts/list`);
117
+ url.searchParams.set("page", options.page);
118
+ url.searchParams.set("limit", options.limit);
119
+ const response = await fetch(url.toString(), {
120
+ method: "GET",
121
+ headers: {
122
+ "x-api-key": apiKey,
123
+ "Content-Type": "application/json",
124
+ },
125
+ });
126
+ if (!response.ok) {
127
+ // If endpoint doesn't exist, show helpful message
128
+ if (response.status === 404) {
129
+ spinner.stop();
130
+ output.newline();
131
+ output.info("Discount list endpoint is not available via API.");
132
+ output.dim("View your discounts at: https://creem.io/dashboard/discounts");
133
+ output.newline();
134
+ output.dim("You can retrieve a specific discount using:");
135
+ console.log(chalk_1.default.cyan(" creem discounts get <discount-id>"));
136
+ console.log(chalk_1.default.cyan(" creem discounts get --code <discount-code>"));
137
+ return;
138
+ }
139
+ throw new Error(`API error: ${response.status} ${response.statusText}`);
140
+ }
141
+ const data = (await response.json());
142
+ spinner.stop();
143
+ const { items, pagination } = data;
144
+ if ((0, config_1.shouldOutputJson)(options.json)) {
145
+ output.outputJson(data);
146
+ return;
147
+ }
148
+ output.newline();
149
+ if (items.length === 0) {
150
+ output.info("No discounts found.");
151
+ output.dim("Create a discount with: creem discounts create");
152
+ return;
153
+ }
154
+ output.outputTable(["ID", "Code", "Value", "Duration", "Status"], items.map((d) => [
155
+ d.id,
156
+ d.code,
157
+ formatDiscountValue(d),
158
+ formatDuration(d),
159
+ formatStatus(d.status),
160
+ ]));
161
+ output.newline();
162
+ output.dim(`Page ${pagination.currentPage} of ${pagination.totalPages} (${pagination.totalRecords} total)`);
163
+ output.newline();
164
+ }
165
+ catch (error) {
166
+ spinner.stop();
167
+ // Check if it's a network/API error that suggests the endpoint doesn't exist
168
+ const errorMsg = error instanceof Error ? error.message : "Unknown error";
169
+ if (errorMsg.includes("404") || errorMsg.includes("Not Found")) {
170
+ output.newline();
171
+ output.info("Discount list endpoint is not available via API.");
172
+ output.dim("View your discounts at: https://creem.io/dashboard/discounts");
173
+ output.newline();
174
+ output.dim("You can retrieve a specific discount using:");
175
+ console.log(chalk_1.default.cyan(" creem discounts get <discount-id>"));
176
+ console.log(chalk_1.default.cyan(" creem discounts get --code <discount-code>"));
177
+ return;
178
+ }
179
+ output.error(errorMsg);
180
+ process.exit(1);
181
+ }
182
+ });
183
+ // Get discount by ID or code
184
+ command
185
+ .command("get [discount-id]")
186
+ .description("Get discount details by ID or code")
187
+ .option("--code <code>", "Get discount by code instead of ID")
188
+ .option("--json", "Output as JSON")
189
+ .action(async (discountId, options) => {
190
+ if (!discountId && !options.code) {
191
+ output.error("Please provide a discount ID or use --code <code>");
192
+ process.exit(1);
193
+ }
194
+ if (discountId && options.code) {
195
+ output.error("Please provide either a discount ID or --code, not both");
196
+ process.exit(1);
197
+ }
198
+ const spinner = (0, ora_1.default)("Fetching discount...").start();
199
+ try {
200
+ const client = (0, api_1.getClient)();
201
+ const discount = (await client.discounts.get(discountId || undefined, options.code || undefined));
202
+ spinner.stop();
203
+ if ((0, config_1.shouldOutputJson)(options.json)) {
204
+ output.outputJson(discount);
205
+ return;
206
+ }
207
+ output.newline();
208
+ output.header(discount.name);
209
+ output.newline();
210
+ output.outputKeyValue({
211
+ ID: discount.id,
212
+ Code: discount.code,
213
+ Status: formatStatus(discount.status),
214
+ Type: discount.type,
215
+ Value: formatDiscountValue(discount),
216
+ Duration: formatDuration(discount),
217
+ Mode: discount.mode,
218
+ "Max Redemptions": discount.maxRedemptions?.toString() || "Unlimited",
219
+ "Times Redeemed": discount.redeemCount?.toString() || "0",
220
+ "Expiry Date": discount.expiryDate ? output.formatDate(discount.expiryDate) : "Never",
221
+ });
222
+ if (discount.appliesToProducts && discount.appliesToProducts.length > 0) {
223
+ output.newline();
224
+ output.dim("Applies to Products:");
225
+ discount.appliesToProducts.forEach((productId) => {
226
+ console.log(` • ${productId}`);
227
+ });
228
+ }
229
+ output.newline();
230
+ }
231
+ catch (error) {
232
+ spinner.stop();
233
+ output.error(error instanceof Error ? error.message : "Failed to fetch discount");
234
+ process.exit(1);
235
+ }
236
+ });
237
+ // Create discount
238
+ command
239
+ .command("create")
240
+ .description("Create a new discount")
241
+ .requiredOption("--name <name>", "Discount name")
242
+ .option("--code <code>", "Discount code (auto-generated if not provided)")
243
+ .requiredOption("--type <type>", 'Discount type: "percentage" or "fixed"')
244
+ .option("--amount <cents>", "Discount amount in cents (required for fixed type)")
245
+ .option("--percentage <number>", "Discount percentage 1-100 (required for percentage type)")
246
+ .option("--currency <code>", "Currency code for fixed discounts (default: USD)")
247
+ .option("--expires <date>", "Expiry date (ISO format, e.g., 2025-12-31)")
248
+ .option("--max-redemptions <number>", "Maximum number of times the discount can be used")
249
+ .requiredOption("--duration <type>", 'Duration type: "once", "forever", or "repeating"')
250
+ .option("--duration-months <number>", "Number of months for repeating duration")
251
+ .requiredOption("--products <ids>", "Comma-separated list of product IDs this discount applies to")
252
+ .option("--json", "Output as JSON")
253
+ .addHelpText("after", `
254
+ ${chalk_1.default.dim("Required fields:")}
255
+ --name Discount name
256
+ --type "percentage" or "fixed"
257
+ --duration "once", "forever", or "repeating"
258
+ --products Comma-separated product IDs
259
+
260
+ ${chalk_1.default.dim("For percentage discounts:")}
261
+ --percentage Discount percentage (1-100)
262
+
263
+ ${chalk_1.default.dim("For fixed discounts:")}
264
+ --amount Discount amount in cents
265
+ --currency Currency code (default: USD)
266
+
267
+ ${chalk_1.default.dim("Duration types:")}
268
+ once Discount applies to the first payment only
269
+ forever Discount applies to all payments
270
+ repeating Discount applies for a set number of months
271
+
272
+ ${chalk_1.default.dim("Examples:")}
273
+ ${chalk_1.default.cyan('creem discounts create --name "Summer Sale" --type percentage --percentage 20 --duration once --products prod_abc123')}
274
+ ${chalk_1.default.cyan('creem discounts create --name "Launch Discount" --code LAUNCH50 --type percentage --percentage 50 --duration forever --products prod_abc123,prod_def456')}
275
+ ${chalk_1.default.cyan('creem discounts create --name "$10 Off" --type fixed --amount 1000 --currency USD --duration once --products prod_abc123')}
276
+ `)
277
+ .action(async (options) => {
278
+ // Validate type
279
+ if (!["percentage", "fixed"].includes(options.type)) {
280
+ output.error('Type must be "percentage" or "fixed"');
281
+ process.exit(1);
282
+ }
283
+ // Validate duration
284
+ if (!["once", "forever", "repeating"].includes(options.duration)) {
285
+ output.error('Duration must be "once", "forever", or "repeating"');
286
+ process.exit(1);
287
+ }
288
+ // Validate percentage type requirements
289
+ if (options.type === "percentage") {
290
+ if (!options.percentage) {
291
+ output.error('--percentage is required when type is "percentage"');
292
+ process.exit(1);
293
+ }
294
+ const pct = parseInt(options.percentage, 10);
295
+ if (isNaN(pct) || pct < 1 || pct > 100) {
296
+ output.error("Percentage must be between 1 and 100");
297
+ process.exit(1);
298
+ }
299
+ if (options.amount) {
300
+ output.error("--amount should not be used with percentage type");
301
+ process.exit(1);
302
+ }
303
+ }
304
+ // Validate fixed type requirements
305
+ if (options.type === "fixed") {
306
+ if (!options.amount) {
307
+ output.error('--amount is required when type is "fixed"');
308
+ process.exit(1);
309
+ }
310
+ const amt = parseInt(options.amount, 10);
311
+ if (isNaN(amt) || amt <= 0) {
312
+ output.error("Amount must be a positive number");
313
+ process.exit(1);
314
+ }
315
+ if (options.percentage) {
316
+ output.error("--percentage should not be used with fixed type");
317
+ process.exit(1);
318
+ }
319
+ }
320
+ // Validate repeating duration requires months
321
+ if (options.duration === "repeating" && !options.durationMonths) {
322
+ output.error('--duration-months is required when duration is "repeating"');
323
+ process.exit(1);
324
+ }
325
+ // Parse products
326
+ const productIds = options.products
327
+ .split(",")
328
+ .map((id) => id.trim())
329
+ .filter(Boolean);
330
+ if (productIds.length === 0) {
331
+ output.error("At least one product ID is required");
332
+ process.exit(1);
333
+ }
334
+ const spinner = (0, ora_1.default)("Creating discount...").start();
335
+ try {
336
+ const client = (0, api_1.getClient)();
337
+ const params = {
338
+ name: options.name,
339
+ type: options.type,
340
+ duration: options.duration,
341
+ appliesToProducts: productIds,
342
+ };
343
+ if (options.code) {
344
+ params.code = options.code;
345
+ }
346
+ if (options.type === "percentage" && options.percentage) {
347
+ params.percentage = parseInt(options.percentage, 10);
348
+ }
349
+ if (options.type === "fixed" && options.amount) {
350
+ params.amount = parseInt(options.amount, 10);
351
+ params.currency = (options.currency || "USD").toUpperCase();
352
+ }
353
+ if (options.expires) {
354
+ params.expiryDate = new Date(options.expires);
355
+ }
356
+ if (options.maxRedemptions) {
357
+ params.maxRedemptions = parseInt(options.maxRedemptions, 10);
358
+ }
359
+ if (options.durationMonths) {
360
+ params.durationInMonths = parseInt(options.durationMonths, 10);
361
+ }
362
+ const discount = (await client.discounts.create(params));
363
+ spinner.stop();
364
+ if ((0, config_1.shouldOutputJson)(options.json)) {
365
+ output.outputJson(discount);
366
+ return;
367
+ }
368
+ output.newline();
369
+ output.success("Discount created!");
370
+ output.newline();
371
+ output.outputKeyValue({
372
+ ID: discount.id,
373
+ Name: discount.name,
374
+ Code: discount.code,
375
+ Status: formatStatus(discount.status),
376
+ Type: discount.type,
377
+ Value: formatDiscountValue(discount),
378
+ Duration: formatDuration(discount),
379
+ Mode: discount.mode,
380
+ });
381
+ output.newline();
382
+ output.dim("Share this discount code with customers:");
383
+ console.log(chalk_1.default.cyan.bold(` ${discount.code}`));
384
+ output.newline();
385
+ }
386
+ catch (error) {
387
+ spinner.fail("Failed to create discount");
388
+ output.error(error instanceof Error ? error.message : "Unknown error");
389
+ process.exit(1);
390
+ }
391
+ });
392
+ // Delete discount
393
+ command
394
+ .command("delete <discount-id>")
395
+ .description("Delete a discount")
396
+ .option("--json", "Output as JSON")
397
+ .action(async (discountId, options) => {
398
+ const spinner = (0, ora_1.default)("Deleting discount...").start();
399
+ try {
400
+ const client = (0, api_1.getClient)();
401
+ const discount = (await client.discounts.delete(discountId));
402
+ spinner.stop();
403
+ if ((0, config_1.shouldOutputJson)(options.json)) {
404
+ output.outputJson(discount);
405
+ return;
406
+ }
407
+ output.newline();
408
+ output.success(`Discount "${discount.name}" (${discount.code}) deleted`);
409
+ output.newline();
410
+ }
411
+ catch (error) {
412
+ spinner.stop();
413
+ output.error(error instanceof Error ? error.message : "Failed to delete discount");
414
+ process.exit(1);
415
+ }
416
+ });
417
+ return command;
418
+ }
419
+ //# sourceMappingURL=discounts.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"discounts.js","sourceRoot":"","sources":["../../src/commands/discounts.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAqFA,wDA8ZC;AAnfD,yCAAoC;AACpC,8CAAsB;AACtB,kDAA0B;AAC1B,oCAAmD;AACnD,0CAAiE;AACjE,wDAA0C;AA+B1C;;GAEG;AACH,SAAS,mBAAmB,CAAC,QAAkB;IAC7C,IAAI,QAAQ,CAAC,IAAI,KAAK,YAAY,EAAE,CAAC;QACnC,OAAO,GAAG,QAAQ,CAAC,UAAU,IAAI,QAAQ,CAAC,MAAM,GAAG,CAAC;IACtD,CAAC;SAAM,CAAC;QACN,MAAM,MAAM,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,CAAC;QACpC,MAAM,QAAQ,GAAG,QAAQ,CAAC,QAAQ,IAAI,KAAK,CAAC;QAC5C,OAAO,MAAM,CAAC,cAAc,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;IACjD,CAAC;AACH,CAAC;AAED;;GAEG;AACH,SAAS,YAAY,CAAC,MAAc;IAClC,QAAQ,MAAM,EAAE,WAAW,EAAE,EAAE,CAAC;QAC9B,KAAK,QAAQ;YACX,OAAO,eAAK,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;QAC7B,KAAK,SAAS;YACZ,OAAO,eAAK,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;QAC3B,KAAK,OAAO;YACV,OAAO,eAAK,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;QAC3B,KAAK,WAAW;YACd,OAAO,eAAK,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;QAC9B;YACE,OAAO,MAAM,IAAI,GAAG,CAAC;IACzB,CAAC;AACH,CAAC;AAED;;GAEG;AACH,SAAS,cAAc,CAAC,QAAkB;IACxC,IAAI,CAAC,QAAQ,CAAC,QAAQ;QAAE,OAAO,GAAG,CAAC;IAEnC,QAAQ,QAAQ,CAAC,QAAQ,EAAE,CAAC;QAC1B,KAAK,SAAS;YACZ,OAAO,SAAS,CAAC;QACnB,KAAK,MAAM;YACT,OAAO,MAAM,CAAC;QAChB,KAAK,WAAW;YACd,OAAO,GAAG,QAAQ,CAAC,gBAAgB,IAAI,CAAC,SAAS,CAAC;QACpD;YACE,OAAO,QAAQ,CAAC,QAAQ,CAAC;IAC7B,CAAC;AACH,CAAC;AAED,SAAgB,sBAAsB;IACpC,MAAM,OAAO,GAAG,IAAI,mBAAO,CAAC,WAAW,CAAC,CAAC,WAAW,CAAC,kBAAkB,CAAC,CAAC,MAAM,CAAC,GAAG,EAAE;QACnF,OAAO,CAAC,IAAI,EAAE,CAAC;IACjB,CAAC,CAAC,CAAC;IAEH,iBAAiB;IACjB,OAAO;SACJ,OAAO,CAAC,MAAM,CAAC;SACf,WAAW,CAAC,oBAAoB,CAAC;SACjC,MAAM,CAAC,QAAQ,EAAE,gBAAgB,CAAC;SAClC,MAAM,CAAC,iBAAiB,EAAE,aAAa,EAAE,GAAG,CAAC;SAC7C,MAAM,CAAC,kBAAkB,EAAE,4BAA4B,EAAE,IAAI,CAAC;SAC9D,MAAM,CAAC,KAAK,EAAE,OAAwD,EAAE,EAAE;QACzE,MAAM,OAAO,GAAG,IAAA,aAAG,EAAC,uBAAuB,CAAC,CAAC,KAAK,EAAE,CAAC;QAErD,IAAI,CAAC;YACH,8DAA8D;YAC9D,wDAAwD;YACxD,MAAM,MAAM,GAAG,IAAA,uBAAc,EAAC,SAAS,CAAC,CAAC;YACzC,IAAI,CAAC,MAAM,EAAE,CAAC;gBACZ,OAAO,CAAC,IAAI,EAAE,CAAC;gBACf,MAAM,CAAC,KAAK,CAAC,6CAA6C,CAAC,CAAC;gBAC5D,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YAClB,CAAC;YAED,MAAM,OAAO,GAAG,IAAA,gBAAU,GAAE,CAAC;YAE7B,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,GAAG,OAAO,oBAAoB,CAAC,CAAC;YACpD,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,MAAM,EAAE,OAAO,CAAC,IAAI,CAAC,CAAC;YAC3C,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,OAAO,EAAE,OAAO,CAAC,KAAK,CAAC,CAAC;YAE7C,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,GAAG,CAAC,QAAQ,EAAE,EAAE;gBAC3C,MAAM,EAAE,KAAK;gBACb,OAAO,EAAE;oBACP,WAAW,EAAE,MAAM;oBACnB,cAAc,EAAE,kBAAkB;iBACnC;aACF,CAAC,CAAC;YAEH,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;gBACjB,kDAAkD;gBAClD,IAAI,QAAQ,CAAC,MAAM,KAAK,GAAG,EAAE,CAAC;oBAC5B,OAAO,CAAC,IAAI,EAAE,CAAC;oBACf,MAAM,CAAC,OAAO,EAAE,CAAC;oBACjB,MAAM,CAAC,IAAI,CAAC,kDAAkD,CAAC,CAAC;oBAChE,MAAM,CAAC,GAAG,CAAC,8DAA8D,CAAC,CAAC;oBAC3E,MAAM,CAAC,OAAO,EAAE,CAAC;oBACjB,MAAM,CAAC,GAAG,CAAC,6CAA6C,CAAC,CAAC;oBAC1D,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,IAAI,CAAC,qCAAqC,CAAC,CAAC,CAAC;oBAC/D,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,IAAI,CAAC,8CAA8C,CAAC,CAAC,CAAC;oBACxE,OAAO;gBACT,CAAC;gBACD,MAAM,IAAI,KAAK,CAAC,cAAc,QAAQ,CAAC,MAAM,IAAI,QAAQ,CAAC,UAAU,EAAE,CAAC,CAAC;YAC1E,CAAC;YAED,MAAM,IAAI,GAAG,CAAC,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAyB,CAAC;YAC7D,OAAO,CAAC,IAAI,EAAE,CAAC;YAEf,MAAM,EAAE,KAAK,EAAE,UAAU,EAAE,GAAG,IAAI,CAAC;YAEnC,IAAI,IAAA,yBAAgB,EAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC;gBACnC,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;gBACxB,OAAO;YACT,CAAC;YAED,MAAM,CAAC,OAAO,EAAE,CAAC;YAEjB,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBACvB,MAAM,CAAC,IAAI,CAAC,qBAAqB,CAAC,CAAC;gBACnC,MAAM,CAAC,GAAG,CAAC,gDAAgD,CAAC,CAAC;gBAC7D,OAAO;YACT,CAAC;YAED,MAAM,CAAC,WAAW,CAChB,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,UAAU,EAAE,QAAQ,CAAC,EAC7C,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC;gBACf,CAAC,CAAC,EAAE;gBACJ,CAAC,CAAC,IAAI;gBACN,mBAAmB,CAAC,CAAC,CAAC;gBACtB,cAAc,CAAC,CAAC,CAAC;gBACjB,YAAY,CAAC,CAAC,CAAC,MAAM,CAAC;aACvB,CAAC,CACH,CAAC;YAEF,MAAM,CAAC,OAAO,EAAE,CAAC;YACjB,MAAM,CAAC,GAAG,CACR,QAAQ,UAAU,CAAC,WAAW,OAAO,UAAU,CAAC,UAAU,KAAK,UAAU,CAAC,YAAY,SAAS,CAChG,CAAC;YACF,MAAM,CAAC,OAAO,EAAE,CAAC;QACnB,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,CAAC,IAAI,EAAE,CAAC;YAEf,6EAA6E;YAC7E,MAAM,QAAQ,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,eAAe,CAAC;YAC1E,IAAI,QAAQ,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,QAAQ,CAAC,QAAQ,CAAC,WAAW,CAAC,EAAE,CAAC;gBAC/D,MAAM,CAAC,OAAO,EAAE,CAAC;gBACjB,MAAM,CAAC,IAAI,CAAC,kDAAkD,CAAC,CAAC;gBAChE,MAAM,CAAC,GAAG,CAAC,8DAA8D,CAAC,CAAC;gBAC3E,MAAM,CAAC,OAAO,EAAE,CAAC;gBACjB,MAAM,CAAC,GAAG,CAAC,6CAA6C,CAAC,CAAC;gBAC1D,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,IAAI,CAAC,qCAAqC,CAAC,CAAC,CAAC;gBAC/D,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,IAAI,CAAC,8CAA8C,CAAC,CAAC,CAAC;gBACxE,OAAO;YACT,CAAC;YAED,MAAM,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;YACvB,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;IACH,CAAC,CAAC,CAAC;IAEL,6BAA6B;IAC7B,OAAO;SACJ,OAAO,CAAC,mBAAmB,CAAC;SAC5B,WAAW,CAAC,oCAAoC,CAAC;SACjD,MAAM,CAAC,eAAe,EAAE,oCAAoC,CAAC;SAC7D,MAAM,CAAC,QAAQ,EAAE,gBAAgB,CAAC;SAClC,MAAM,CAAC,KAAK,EAAE,UAA8B,EAAE,OAA0C,EAAE,EAAE;QAC3F,IAAI,CAAC,UAAU,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC;YACjC,MAAM,CAAC,KAAK,CAAC,mDAAmD,CAAC,CAAC;YAClE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;QAED,IAAI,UAAU,IAAI,OAAO,CAAC,IAAI,EAAE,CAAC;YAC/B,MAAM,CAAC,KAAK,CAAC,yDAAyD,CAAC,CAAC;YACxE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;QAED,MAAM,OAAO,GAAG,IAAA,aAAG,EAAC,sBAAsB,CAAC,CAAC,KAAK,EAAE,CAAC;QAEpD,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,IAAA,eAAS,GAAE,CAAC;YAC3B,MAAM,QAAQ,GAAG,CAAC,MAAM,MAAM,CAAC,SAAS,CAAC,GAAG,CAC1C,UAAU,IAAI,SAAS,EACvB,OAAO,CAAC,IAAI,IAAI,SAAS,CAC1B,CAAwB,CAAC;YAE1B,OAAO,CAAC,IAAI,EAAE,CAAC;YAEf,IAAI,IAAA,yBAAgB,EAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC;gBACnC,MAAM,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC;gBAC5B,OAAO;YACT,CAAC;YAED,MAAM,CAAC,OAAO,EAAE,CAAC;YACjB,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;YAC7B,MAAM,CAAC,OAAO,EAAE,CAAC;YAEjB,MAAM,CAAC,cAAc,CAAC;gBACpB,EAAE,EAAE,QAAQ,CAAC,EAAE;gBACf,IAAI,EAAE,QAAQ,CAAC,IAAI;gBACnB,MAAM,EAAE,YAAY,CAAC,QAAQ,CAAC,MAAM,CAAC;gBACrC,IAAI,EAAE,QAAQ,CAAC,IAAI;gBACnB,KAAK,EAAE,mBAAmB,CAAC,QAAQ,CAAC;gBACpC,QAAQ,EAAE,cAAc,CAAC,QAAQ,CAAC;gBAClC,IAAI,EAAE,QAAQ,CAAC,IAAI;gBACnB,iBAAiB,EAAE,QAAQ,CAAC,cAAc,EAAE,QAAQ,EAAE,IAAI,WAAW;gBACrE,gBAAgB,EAAE,QAAQ,CAAC,WAAW,EAAE,QAAQ,EAAE,IAAI,GAAG;gBACzD,aAAa,EAAE,QAAQ,CAAC,UAAU,CAAC,CAAC,CAAC,MAAM,CAAC,UAAU,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,OAAO;aACtF,CAAC,CAAC;YAEH,IAAI,QAAQ,CAAC,iBAAiB,IAAI,QAAQ,CAAC,iBAAiB,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBACxE,MAAM,CAAC,OAAO,EAAE,CAAC;gBACjB,MAAM,CAAC,GAAG,CAAC,sBAAsB,CAAC,CAAC;gBACnC,QAAQ,CAAC,iBAAiB,CAAC,OAAO,CAAC,CAAC,SAAS,EAAE,EAAE;oBAC/C,OAAO,CAAC,GAAG,CAAC,OAAO,SAAS,EAAE,CAAC,CAAC;gBAClC,CAAC,CAAC,CAAC;YACL,CAAC;YAED,MAAM,CAAC,OAAO,EAAE,CAAC;QACnB,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,CAAC,IAAI,EAAE,CAAC;YACf,MAAM,CAAC,KAAK,CAAC,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,0BAA0B,CAAC,CAAC;YAClF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;IACH,CAAC,CAAC,CAAC;IAEL,kBAAkB;IAClB,OAAO;SACJ,OAAO,CAAC,QAAQ,CAAC;SACjB,WAAW,CAAC,uBAAuB,CAAC;SACpC,cAAc,CAAC,eAAe,EAAE,eAAe,CAAC;SAChD,MAAM,CAAC,eAAe,EAAE,gDAAgD,CAAC;SACzE,cAAc,CAAC,eAAe,EAAE,wCAAwC,CAAC;SACzE,MAAM,CAAC,kBAAkB,EAAE,oDAAoD,CAAC;SAChF,MAAM,CAAC,uBAAuB,EAAE,0DAA0D,CAAC;SAC3F,MAAM,CAAC,mBAAmB,EAAE,kDAAkD,CAAC;SAC/E,MAAM,CAAC,kBAAkB,EAAE,4CAA4C,CAAC;SACxE,MAAM,CAAC,4BAA4B,EAAE,kDAAkD,CAAC;SACxF,cAAc,CAAC,mBAAmB,EAAE,kDAAkD,CAAC;SACvF,MAAM,CAAC,4BAA4B,EAAE,yCAAyC,CAAC;SAC/E,cAAc,CACb,kBAAkB,EAClB,8DAA8D,CAC/D;SACA,MAAM,CAAC,QAAQ,EAAE,gBAAgB,CAAC;SAClC,WAAW,CACV,OAAO,EACP;EACJ,eAAK,CAAC,GAAG,CAAC,kBAAkB,CAAC;;;;;;EAM7B,eAAK,CAAC,GAAG,CAAC,2BAA2B,CAAC;;;EAGtC,eAAK,CAAC,GAAG,CAAC,sBAAsB,CAAC;;;;EAIjC,eAAK,CAAC,GAAG,CAAC,iBAAiB,CAAC;;;;;EAK5B,eAAK,CAAC,GAAG,CAAC,WAAW,CAAC;IACpB,eAAK,CAAC,IAAI,CAAC,sHAAsH,CAAC;IAClI,eAAK,CAAC,IAAI,CAAC,yJAAyJ,CAAC;IACrK,eAAK,CAAC,IAAI,CAAC,0HAA0H,CAAC;CACzI,CACI;SACA,MAAM,CACL,KAAK,EAAE,OAaN,EAAE,EAAE;QACH,gBAAgB;QAChB,IAAI,CAAC,CAAC,YAAY,EAAE,OAAO,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC;YACpD,MAAM,CAAC,KAAK,CAAC,sCAAsC,CAAC,CAAC;YACrD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;QAED,oBAAoB;QACpB,IAAI,CAAC,CAAC,MAAM,EAAE,SAAS,EAAE,WAAW,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAC;YACjE,MAAM,CAAC,KAAK,CAAC,oDAAoD,CAAC,CAAC;YACnE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;QAED,wCAAwC;QACxC,IAAI,OAAO,CAAC,IAAI,KAAK,YAAY,EAAE,CAAC;YAClC,IAAI,CAAC,OAAO,CAAC,UAAU,EAAE,CAAC;gBACxB,MAAM,CAAC,KAAK,CAAC,oDAAoD,CAAC,CAAC;gBACnE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YAClB,CAAC;YACD,MAAM,GAAG,GAAG,QAAQ,CAAC,OAAO,CAAC,UAAU,EAAE,EAAE,CAAC,CAAC;YAC7C,IAAI,KAAK,CAAC,GAAG,CAAC,IAAI,GAAG,GAAG,CAAC,IAAI,GAAG,GAAG,GAAG,EAAE,CAAC;gBACvC,MAAM,CAAC,KAAK,CAAC,sCAAsC,CAAC,CAAC;gBACrD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YAClB,CAAC;YACD,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;gBACnB,MAAM,CAAC,KAAK,CAAC,kDAAkD,CAAC,CAAC;gBACjE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YAClB,CAAC;QACH,CAAC;QAED,mCAAmC;QACnC,IAAI,OAAO,CAAC,IAAI,KAAK,OAAO,EAAE,CAAC;YAC7B,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC;gBACpB,MAAM,CAAC,KAAK,CAAC,2CAA2C,CAAC,CAAC;gBAC1D,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YAClB,CAAC;YACD,MAAM,GAAG,GAAG,QAAQ,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;YACzC,IAAI,KAAK,CAAC,GAAG,CAAC,IAAI,GAAG,IAAI,CAAC,EAAE,CAAC;gBAC3B,MAAM,CAAC,KAAK,CAAC,kCAAkC,CAAC,CAAC;gBACjD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YAClB,CAAC;YACD,IAAI,OAAO,CAAC,UAAU,EAAE,CAAC;gBACvB,MAAM,CAAC,KAAK,CAAC,iDAAiD,CAAC,CAAC;gBAChE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YAClB,CAAC;QACH,CAAC;QAED,8CAA8C;QAC9C,IAAI,OAAO,CAAC,QAAQ,KAAK,WAAW,IAAI,CAAC,OAAO,CAAC,cAAc,EAAE,CAAC;YAChE,MAAM,CAAC,KAAK,CAAC,4DAA4D,CAAC,CAAC;YAC3E,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;QAED,iBAAiB;QACjB,MAAM,UAAU,GAAG,OAAO,CAAC,QAAQ;aAChC,KAAK,CAAC,GAAG,CAAC;aACV,GAAG,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,IAAI,EAAE,CAAC;aACtB,MAAM,CAAC,OAAO,CAAC,CAAC;QACnB,IAAI,UAAU,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC5B,MAAM,CAAC,KAAK,CAAC,qCAAqC,CAAC,CAAC;YACpD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;QAED,MAAM,OAAO,GAAG,IAAA,aAAG,EAAC,sBAAsB,CAAC,CAAC,KAAK,EAAE,CAAC;QAEpD,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,IAAA,eAAS,GAAE,CAAC;YAE3B,MAAM,MAAM,GAYR;gBACF,IAAI,EAAE,OAAO,CAAC,IAAI;gBAClB,IAAI,EAAE,OAAO,CAAC,IAA8B;gBAC5C,QAAQ,EAAE,OAAO,CAAC,QAA4C;gBAC9D,iBAAiB,EAAE,UAAU;aAC9B,CAAC;YAEF,IAAI,OAAO,CAAC,IAAI,EAAE,CAAC;gBACjB,MAAM,CAAC,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC;YAC7B,CAAC;YAED,IAAI,OAAO,CAAC,IAAI,KAAK,YAAY,IAAI,OAAO,CAAC,UAAU,EAAE,CAAC;gBACxD,MAAM,CAAC,UAAU,GAAG,QAAQ,CAAC,OAAO,CAAC,UAAU,EAAE,EAAE,CAAC,CAAC;YACvD,CAAC;YAED,IAAI,OAAO,CAAC,IAAI,KAAK,OAAO,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;gBAC/C,MAAM,CAAC,MAAM,GAAG,QAAQ,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;gBAC7C,MAAM,CAAC,QAAQ,GAAG,CAAC,OAAO,CAAC,QAAQ,IAAI,KAAK,CAAC,CAAC,WAAW,EAAE,CAAC;YAC9D,CAAC;YAED,IAAI,OAAO,CAAC,OAAO,EAAE,CAAC;gBACpB,MAAM,CAAC,UAAU,GAAG,IAAI,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;YAChD,CAAC;YAED,IAAI,OAAO,CAAC,cAAc,EAAE,CAAC;gBAC3B,MAAM,CAAC,cAAc,GAAG,QAAQ,CAAC,OAAO,CAAC,cAAc,EAAE,EAAE,CAAC,CAAC;YAC/D,CAAC;YAED,IAAI,OAAO,CAAC,cAAc,EAAE,CAAC;gBAC3B,MAAM,CAAC,gBAAgB,GAAG,QAAQ,CAAC,OAAO,CAAC,cAAc,EAAE,EAAE,CAAC,CAAC;YACjE,CAAC;YAED,MAAM,QAAQ,GAAG,CAAC,MAAM,MAAM,CAAC,SAAS,CAAC,MAAM,CAAC,MAAM,CAAC,CAAwB,CAAC;YAEhF,OAAO,CAAC,IAAI,EAAE,CAAC;YAEf,IAAI,IAAA,yBAAgB,EAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC;gBACnC,MAAM,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC;gBAC5B,OAAO;YACT,CAAC;YAED,MAAM,CAAC,OAAO,EAAE,CAAC;YACjB,MAAM,CAAC,OAAO,CAAC,mBAAmB,CAAC,CAAC;YACpC,MAAM,CAAC,OAAO,EAAE,CAAC;YAEjB,MAAM,CAAC,cAAc,CAAC;gBACpB,EAAE,EAAE,QAAQ,CAAC,EAAE;gBACf,IAAI,EAAE,QAAQ,CAAC,IAAI;gBACnB,IAAI,EAAE,QAAQ,CAAC,IAAI;gBACnB,MAAM,EAAE,YAAY,CAAC,QAAQ,CAAC,MAAM,CAAC;gBACrC,IAAI,EAAE,QAAQ,CAAC,IAAI;gBACnB,KAAK,EAAE,mBAAmB,CAAC,QAAQ,CAAC;gBACpC,QAAQ,EAAE,cAAc,CAAC,QAAQ,CAAC;gBAClC,IAAI,EAAE,QAAQ,CAAC,IAAI;aACpB,CAAC,CAAC;YAEH,MAAM,CAAC,OAAO,EAAE,CAAC;YACjB,MAAM,CAAC,GAAG,CAAC,0CAA0C,CAAC,CAAC;YACvD,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,QAAQ,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;YACnD,MAAM,CAAC,OAAO,EAAE,CAAC;QACnB,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,CAAC,IAAI,CAAC,2BAA2B,CAAC,CAAC;YAC1C,MAAM,CAAC,KAAK,CAAC,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,eAAe,CAAC,CAAC;YACvE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;IACH,CAAC,CACF,CAAC;IAEJ,kBAAkB;IAClB,OAAO;SACJ,OAAO,CAAC,sBAAsB,CAAC;SAC/B,WAAW,CAAC,mBAAmB,CAAC;SAChC,MAAM,CAAC,QAAQ,EAAE,gBAAgB,CAAC;SAClC,MAAM,CAAC,KAAK,EAAE,UAAkB,EAAE,OAA2B,EAAE,EAAE;QAChE,MAAM,OAAO,GAAG,IAAA,aAAG,EAAC,sBAAsB,CAAC,CAAC,KAAK,EAAE,CAAC;QAEpD,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,IAAA,eAAS,GAAE,CAAC;YAC3B,MAAM,QAAQ,GAAG,CAAC,MAAM,MAAM,CAAC,SAAS,CAAC,MAAM,CAAC,UAAU,CAAC,CAAwB,CAAC;YAEpF,OAAO,CAAC,IAAI,EAAE,CAAC;YAEf,IAAI,IAAA,yBAAgB,EAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC;gBACnC,MAAM,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC;gBAC5B,OAAO;YACT,CAAC;YAED,MAAM,CAAC,OAAO,EAAE,CAAC;YACjB,MAAM,CAAC,OAAO,CAAC,aAAa,QAAQ,CAAC,IAAI,MAAM,QAAQ,CAAC,IAAI,WAAW,CAAC,CAAC;YACzE,MAAM,CAAC,OAAO,EAAE,CAAC;QACnB,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,CAAC,IAAI,EAAE,CAAC;YACf,MAAM,CAAC,KAAK,CAAC,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,2BAA2B,CAAC,CAAC;YACnF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;IACH,CAAC,CAAC,CAAC;IAEL,OAAO,OAAO,CAAC;AACjB,CAAC"}
@@ -0,0 +1,12 @@
1
+ export { createLoginCommand } from "./login";
2
+ export { createLogoutCommand } from "./logout";
3
+ export { createWhoamiCommand } from "./whoami";
4
+ export { createConfigCommand } from "./config";
5
+ export { createProductsCommand } from "./products";
6
+ export { createCheckoutsCommand } from "./checkouts";
7
+ export { createSubscriptionsCommand } from "./subscriptions";
8
+ export { createCustomersCommand } from "./customers";
9
+ export { createTransactionsCommand } from "./transactions";
10
+ export { createDiscountsCommand } from "./discounts";
11
+ export { createMigrateCommand } from "./migrate";
12
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/commands/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,MAAM,SAAS,CAAC;AAC7C,OAAO,EAAE,mBAAmB,EAAE,MAAM,UAAU,CAAC;AAC/C,OAAO,EAAE,mBAAmB,EAAE,MAAM,UAAU,CAAC;AAC/C,OAAO,EAAE,mBAAmB,EAAE,MAAM,UAAU,CAAC;AAC/C,OAAO,EAAE,qBAAqB,EAAE,MAAM,YAAY,CAAC;AACnD,OAAO,EAAE,sBAAsB,EAAE,MAAM,aAAa,CAAC;AACrD,OAAO,EAAE,0BAA0B,EAAE,MAAM,iBAAiB,CAAC;AAC7D,OAAO,EAAE,sBAAsB,EAAE,MAAM,aAAa,CAAC;AACrD,OAAO,EAAE,yBAAyB,EAAE,MAAM,gBAAgB,CAAC;AAC3D,OAAO,EAAE,sBAAsB,EAAE,MAAM,aAAa,CAAC;AACrD,OAAO,EAAE,oBAAoB,EAAE,MAAM,WAAW,CAAC"}
@@ -0,0 +1,26 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.createMigrateCommand = exports.createDiscountsCommand = exports.createTransactionsCommand = exports.createCustomersCommand = exports.createSubscriptionsCommand = exports.createCheckoutsCommand = exports.createProductsCommand = exports.createConfigCommand = exports.createWhoamiCommand = exports.createLogoutCommand = exports.createLoginCommand = void 0;
4
+ var login_1 = require("./login");
5
+ Object.defineProperty(exports, "createLoginCommand", { enumerable: true, get: function () { return login_1.createLoginCommand; } });
6
+ var logout_1 = require("./logout");
7
+ Object.defineProperty(exports, "createLogoutCommand", { enumerable: true, get: function () { return logout_1.createLogoutCommand; } });
8
+ var whoami_1 = require("./whoami");
9
+ Object.defineProperty(exports, "createWhoamiCommand", { enumerable: true, get: function () { return whoami_1.createWhoamiCommand; } });
10
+ var config_1 = require("./config");
11
+ Object.defineProperty(exports, "createConfigCommand", { enumerable: true, get: function () { return config_1.createConfigCommand; } });
12
+ var products_1 = require("./products");
13
+ Object.defineProperty(exports, "createProductsCommand", { enumerable: true, get: function () { return products_1.createProductsCommand; } });
14
+ var checkouts_1 = require("./checkouts");
15
+ Object.defineProperty(exports, "createCheckoutsCommand", { enumerable: true, get: function () { return checkouts_1.createCheckoutsCommand; } });
16
+ var subscriptions_1 = require("./subscriptions");
17
+ Object.defineProperty(exports, "createSubscriptionsCommand", { enumerable: true, get: function () { return subscriptions_1.createSubscriptionsCommand; } });
18
+ var customers_1 = require("./customers");
19
+ Object.defineProperty(exports, "createCustomersCommand", { enumerable: true, get: function () { return customers_1.createCustomersCommand; } });
20
+ var transactions_1 = require("./transactions");
21
+ Object.defineProperty(exports, "createTransactionsCommand", { enumerable: true, get: function () { return transactions_1.createTransactionsCommand; } });
22
+ var discounts_1 = require("./discounts");
23
+ Object.defineProperty(exports, "createDiscountsCommand", { enumerable: true, get: function () { return discounts_1.createDiscountsCommand; } });
24
+ var migrate_1 = require("./migrate");
25
+ Object.defineProperty(exports, "createMigrateCommand", { enumerable: true, get: function () { return migrate_1.createMigrateCommand; } });
26
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/commands/index.ts"],"names":[],"mappings":";;;AAAA,iCAA6C;AAApC,2GAAA,kBAAkB,OAAA;AAC3B,mCAA+C;AAAtC,6GAAA,mBAAmB,OAAA;AAC5B,mCAA+C;AAAtC,6GAAA,mBAAmB,OAAA;AAC5B,mCAA+C;AAAtC,6GAAA,mBAAmB,OAAA;AAC5B,uCAAmD;AAA1C,iHAAA,qBAAqB,OAAA;AAC9B,yCAAqD;AAA5C,mHAAA,sBAAsB,OAAA;AAC/B,iDAA6D;AAApD,2HAAA,0BAA0B,OAAA;AACnC,yCAAqD;AAA5C,mHAAA,sBAAsB,OAAA;AAC/B,+CAA2D;AAAlD,yHAAA,yBAAyB,OAAA;AAClC,yCAAqD;AAA5C,mHAAA,sBAAsB,OAAA;AAC/B,qCAAiD;AAAxC,+GAAA,oBAAoB,OAAA"}
@@ -0,0 +1,3 @@
1
+ import { Command } from "commander";
2
+ export declare function createLoginCommand(): Command;
3
+ //# sourceMappingURL=login.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"login.d.ts","sourceRoot":"","sources":["../../src/commands/login.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAOpC,wBAAgB,kBAAkB,IAAI,OAAO,CA4E5C"}
@@ -0,0 +1,115 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ var __importDefault = (this && this.__importDefault) || function (mod) {
36
+ return (mod && mod.__esModule) ? mod : { "default": mod };
37
+ };
38
+ Object.defineProperty(exports, "__esModule", { value: true });
39
+ exports.createLoginCommand = createLoginCommand;
40
+ const commander_1 = require("commander");
41
+ const prompts_1 = require("@inquirer/prompts");
42
+ const ora_1 = __importDefault(require("ora"));
43
+ const auth_1 = require("../lib/auth");
44
+ const config_1 = require("../lib/config");
45
+ const output = __importStar(require("../utils/output"));
46
+ function createLoginCommand() {
47
+ const command = new commander_1.Command("login")
48
+ .description("Authenticate with Creem using your API key")
49
+ .option("--api-key <key>", "API key (or enter interactively)")
50
+ .option("-f, --force", "Force login even if already authenticated")
51
+ .action(async (options) => {
52
+ let spinner = null;
53
+ try {
54
+ // Check if already authenticated
55
+ if ((0, config_1.isAuthenticated)() && !options.force) {
56
+ const env = (0, config_1.getConfigValue)("environment");
57
+ output.warning(`Already logged in (${env} mode).`);
58
+ output.info("Use --force to re-authenticate, or run `creem logout` first.");
59
+ return;
60
+ }
61
+ let apiKey = options.apiKey;
62
+ // Validate that API key is not an empty string
63
+ if (apiKey !== undefined && apiKey.trim() === "") {
64
+ output.error("API key cannot be empty");
65
+ process.exit(1);
66
+ }
67
+ // If no API key provided, prompt for it
68
+ if (!apiKey) {
69
+ output.newline();
70
+ output.info("Enter your API key from the Creem dashboard.");
71
+ output.dim("Get your API key at: https://creem.io/dashboard/developers");
72
+ output.newline();
73
+ apiKey = await (0, prompts_1.password)({
74
+ message: "API Key:",
75
+ mask: "*",
76
+ validate: (input) => {
77
+ if (!input || input.trim().length === 0) {
78
+ return "API key is required";
79
+ }
80
+ return true;
81
+ },
82
+ });
83
+ }
84
+ // Validate and save
85
+ spinner = (0, ora_1.default)("Validating API key...").start();
86
+ const result = await (0, auth_1.loginWithApiKey)(apiKey);
87
+ if (result.success) {
88
+ spinner.succeed("API key validated");
89
+ output.newline();
90
+ output.success("Successfully logged in to Creem!");
91
+ output.newline();
92
+ const env = (0, config_1.getConfigValue)("environment");
93
+ output.info(`Environment: ${env}`);
94
+ if (env !== "live") {
95
+ output.dim("Use `creem config set environment live` to switch to live mode.");
96
+ }
97
+ }
98
+ else {
99
+ spinner.fail("Authentication failed");
100
+ output.newline();
101
+ output.error(result.message);
102
+ process.exit(1);
103
+ }
104
+ }
105
+ catch (error) {
106
+ if (spinner) {
107
+ spinner.fail("Authentication failed");
108
+ }
109
+ output.error(error instanceof Error ? error.message : "Unknown error");
110
+ process.exit(1);
111
+ }
112
+ });
113
+ return command;
114
+ }
115
+ //# sourceMappingURL=login.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"login.js","sourceRoot":"","sources":["../../src/commands/login.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import { Command } from "commander";
2
+ export declare function createLogoutCommand(): Command;
3
+ //# sourceMappingURL=logout.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"logout.d.ts","sourceRoot":"","sources":["../../src/commands/logout.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAKpC,wBAAgB,mBAAmB,IAAI,OAAO,CAqB7C"}