codebuff 1.0.143 → 1.0.144

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 (66) hide show
  1. package/dist/chat-storage.js +17 -7
  2. package/dist/chat-storage.js.map +1 -1
  3. package/dist/cli.js +20 -9
  4. package/dist/cli.js.map +1 -1
  5. package/dist/client.js +17 -7
  6. package/dist/client.js.map +1 -1
  7. package/dist/code-map/languages.js +17 -7
  8. package/dist/code-map/languages.js.map +1 -1
  9. package/dist/code-map/parse.js +17 -7
  10. package/dist/code-map/parse.js.map +1 -1
  11. package/dist/code-map/tsconfig.tsbuildinfo +1 -1
  12. package/dist/common/constants.d.ts +2 -0
  13. package/dist/common/constants.js +1 -0
  14. package/dist/common/constants.js.map +1 -1
  15. package/dist/common/logger.d.ts +1 -0
  16. package/dist/common/logger.js +7 -0
  17. package/dist/common/logger.js.map +1 -0
  18. package/dist/common/types/usage.d.ts +2 -2
  19. package/dist/common/util/constants.d.ts +1 -0
  20. package/dist/common/util/constants.js +7 -0
  21. package/dist/common/util/constants.js.map +1 -0
  22. package/dist/common/util/credentials.d.ts +2 -2
  23. package/dist/common/util/messages.d.ts +1 -0
  24. package/dist/common/util/messages.js +7 -0
  25. package/dist/common/util/messages.js.map +1 -0
  26. package/dist/index.js +1 -1
  27. package/dist/menu.js +17 -7
  28. package/dist/menu.js.map +1 -1
  29. package/dist/project-files.js +17 -7
  30. package/dist/project-files.js.map +1 -1
  31. package/dist/utils/terminal.js +17 -10
  32. package/dist/utils/terminal.js.map +1 -1
  33. package/package.json +1 -1
  34. package/dist/common/billing/payment-guards.d.ts +0 -11
  35. package/dist/common/billing/payment-guards.js +0 -136
  36. package/dist/common/billing/payment-guards.js.map +0 -1
  37. package/dist/common/billing/subscription-state.d.ts +0 -13
  38. package/dist/common/billing/subscription-state.js +0 -117
  39. package/dist/common/billing/subscription-state.js.map +0 -1
  40. package/dist/common/billing/webhook-processor.d.ts +0 -21
  41. package/dist/common/billing/webhook-processor.js +0 -315
  42. package/dist/common/billing/webhook-processor.js.map +0 -1
  43. package/dist/common/scripts/get-invoices.d.ts +0 -1
  44. package/dist/common/scripts/get-invoices.js +0 -5
  45. package/dist/common/scripts/get-invoices.js.map +0 -1
  46. package/dist/common/scripts/get-month-overage.d.ts +0 -1
  47. package/dist/common/scripts/get-month-overage.js +0 -5
  48. package/dist/common/scripts/get-month-overage.js.map +0 -1
  49. package/dist/common/scripts/get-upcoming-invoices.d.ts +0 -1
  50. package/dist/common/scripts/get-upcoming-invoices.js +0 -5
  51. package/dist/common/scripts/get-upcoming-invoices.js.map +0 -1
  52. package/dist/common/scripts/update-subscriptions.d.ts +0 -1
  53. package/dist/common/scripts/update-subscriptions.js +0 -92
  54. package/dist/common/scripts/update-subscriptions.js.map +0 -1
  55. package/dist/common/util/get-customer-invoices.d.ts +0 -11
  56. package/dist/common/util/get-customer-invoices.js +0 -117
  57. package/dist/common/util/get-customer-invoices.js.map +0 -1
  58. package/dist/common/util/get-month-overage.d.ts +0 -11
  59. package/dist/common/util/get-month-overage.js +0 -143
  60. package/dist/common/util/get-month-overage.js.map +0 -1
  61. package/dist/common/util/get-upcoming-invoices.d.ts +0 -11
  62. package/dist/common/util/get-upcoming-invoices.js +0 -141
  63. package/dist/common/util/get-upcoming-invoices.js.map +0 -1
  64. package/dist/common/websockets/logger-interface.d.ts +0 -6
  65. package/dist/common/websockets/logger-interface.js +0 -9
  66. package/dist/common/websockets/logger-interface.js.map +0 -1
@@ -1,117 +0,0 @@
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 (mod) {
19
- if (mod && mod.__esModule) return mod;
20
- var result = {};
21
- if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
22
- __setModuleDefault(result, mod);
23
- return result;
24
- };
25
- var __importDefault = (this && this.__importDefault) || function (mod) {
26
- return (mod && mod.__esModule) ? mod : { "default": mod };
27
- };
28
- Object.defineProperty(exports, "__esModule", { value: true });
29
- exports.SubscriptionStateManager = exports.subscriptionStateSchema = void 0;
30
- const zod_1 = require("zod");
31
- const drizzle_orm_1 = require("drizzle-orm");
32
- const db_1 = __importDefault(require("../db"));
33
- const schema = __importStar(require("../db/schema"));
34
- const stripe_1 = require("../util/stripe");
35
- exports.subscriptionStateSchema = zod_1.z.enum([
36
- 'active',
37
- 'past_due',
38
- 'incomplete',
39
- 'canceled',
40
- 'trialing',
41
- 'paused',
42
- 'transitioning',
43
- ]);
44
- class SubscriptionStateManager {
45
- subscriptionId;
46
- transitionLock = null;
47
- constructor(subscriptionId) {
48
- this.subscriptionId = subscriptionId;
49
- }
50
- async getCurrentState() {
51
- const subscription = await stripe_1.stripeServer.subscriptions.retrieve(this.subscriptionId);
52
- return this.mapStripeState(subscription.status);
53
- }
54
- async beginStateTransition() {
55
- // Generate a new lock UUID
56
- const newLock = crypto.randomUUID();
57
- // Try to acquire lock
58
- const result = await db_1.default
59
- .update(schema.user)
60
- .set({
61
- transition_lock: newLock,
62
- })
63
- .where((0, drizzle_orm_1.and)((0, drizzle_orm_1.eq)(schema.user.stripe_price_id, this.subscriptionId), (0, drizzle_orm_1.sql) `transition_lock IS NULL`))
64
- .returning({ transitionLock: schema.user.transition_lock });
65
- if (result.length === 0) {
66
- return false; // Lock acquisition failed
67
- }
68
- this.transitionLock = newLock;
69
- return true;
70
- }
71
- async endStateTransition() {
72
- if (!this.transitionLock) {
73
- throw new Error('No active transition');
74
- }
75
- await db_1.default
76
- .update(schema.user)
77
- .set({
78
- transition_lock: null,
79
- })
80
- .where((0, drizzle_orm_1.and)((0, drizzle_orm_1.eq)(schema.user.stripe_price_id, this.subscriptionId), (0, drizzle_orm_1.eq)(schema.user.transition_lock, this.transitionLock)));
81
- this.transitionLock = null;
82
- }
83
- async addStateHistoryEntry(fromState, toState, reason) {
84
- const entry = {
85
- fromState,
86
- toState,
87
- reason,
88
- timestamp: new Date().toISOString(),
89
- };
90
- await db_1.default
91
- .update(schema.user)
92
- .set({
93
- state_history: (0, drizzle_orm_1.sql) `COALESCE(state_history, '[]'::jsonb) || ${JSON.stringify(entry)}::jsonb`,
94
- })
95
- .where((0, drizzle_orm_1.eq)(schema.user.stripe_price_id, this.subscriptionId));
96
- }
97
- mapStripeState(stripeStatus) {
98
- switch (stripeStatus) {
99
- case 'active':
100
- return 'active';
101
- case 'past_due':
102
- return 'past_due';
103
- case 'incomplete':
104
- return 'incomplete';
105
- case 'canceled':
106
- return 'canceled';
107
- case 'trialing':
108
- return 'trialing';
109
- case 'paused':
110
- return 'paused';
111
- default:
112
- throw new Error(`Unknown Stripe status: ${stripeStatus}`);
113
- }
114
- }
115
- }
116
- exports.SubscriptionStateManager = SubscriptionStateManager;
117
- //# sourceMappingURL=subscription-state.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"subscription-state.js","sourceRoot":"","sources":["../../src/billing/subscription-state.ts"],"names":[],"mappings":"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"}
@@ -1,21 +0,0 @@
1
- import type Stripe from 'stripe';
2
- export declare class WebhookProcessor {
3
- private stripeSignature;
4
- private rawBody;
5
- constructor(stripeSignature: string, rawBody: string);
6
- validateWebhook(): Promise<{
7
- valid: boolean;
8
- event?: Stripe.Event;
9
- error?: string;
10
- }>;
11
- private checkDuplicateEvent;
12
- processEvent(event: Stripe.Event): Promise<void>;
13
- private handleEvent;
14
- private handleSubscriptionChange;
15
- private handleSubscriptionDeletion;
16
- private handleInvoiceCreation;
17
- private handleInvoicePayment;
18
- private handlePaymentFailure;
19
- private getTotalReferralCredits;
20
- private mapStripeStatus;
21
- }
@@ -1,315 +0,0 @@
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 (mod) {
19
- if (mod && mod.__esModule) return mod;
20
- var result = {};
21
- if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
22
- __setModuleDefault(result, mod);
23
- return result;
24
- };
25
- var __importDefault = (this && this.__importDefault) || function (mod) {
26
- return (mod && mod.__esModule) ? mod : { "default": mod };
27
- };
28
- Object.defineProperty(exports, "__esModule", { value: true });
29
- exports.WebhookProcessor = void 0;
30
- const stripe_1 = require("../util/stripe");
31
- const db_1 = __importDefault(require("../db"));
32
- const schema = __importStar(require("../db/schema"));
33
- const drizzle_orm_1 = require("drizzle-orm");
34
- const zod_1 = require("zod");
35
- const subscription_state_1 = require("./subscription-state");
36
- const quota_manager_1 = require("./quota-manager");
37
- const payment_guards_1 = require("./payment-guards");
38
- const webhookEventSchema = zod_1.z.object({
39
- id: zod_1.z.string(),
40
- type: zod_1.z.string(),
41
- created: zod_1.z.number(),
42
- data: zod_1.z.object({
43
- object: zod_1.z.record(zod_1.z.any()),
44
- }),
45
- });
46
- class WebhookProcessor {
47
- stripeSignature;
48
- rawBody;
49
- constructor(stripeSignature, rawBody) {
50
- this.stripeSignature = stripeSignature;
51
- this.rawBody = rawBody;
52
- }
53
- async validateWebhook() {
54
- try {
55
- const event = stripe_1.stripeServer.webhooks.constructEvent(this.rawBody, this.stripeSignature, process.env.STRIPE_WEBHOOK_SECRET_KEY);
56
- // Validate event structure
57
- const result = webhookEventSchema.safeParse(event);
58
- if (!result.success) {
59
- return {
60
- valid: false,
61
- error: 'Invalid event structure',
62
- };
63
- }
64
- // Check for duplicate events
65
- const isDuplicate = await this.checkDuplicateEvent(event.id);
66
- if (isDuplicate) {
67
- return {
68
- valid: false,
69
- error: 'Duplicate event',
70
- };
71
- }
72
- return {
73
- valid: true,
74
- event,
75
- };
76
- }
77
- catch (error) {
78
- return {
79
- valid: false,
80
- error: error instanceof Error ? error.message : 'Unknown error',
81
- };
82
- }
83
- }
84
- async checkDuplicateEvent(eventId) {
85
- // First try to insert the event
86
- try {
87
- await db_1.default.insert(schema.webhook_events).values({
88
- id: eventId,
89
- processed_at: new Date(),
90
- });
91
- return false; // Not a duplicate
92
- }
93
- catch (error) {
94
- // If insert fails due to unique constraint, it's a duplicate
95
- return true;
96
- }
97
- }
98
- async processEvent(event) {
99
- // Start transaction to ensure atomic processing
100
- await db_1.default.transaction(async (tx) => {
101
- // Lock the subscription record if this is a subscription-related event
102
- if (event.type.startsWith('customer.subscription.')) {
103
- const subscription = event.data.object;
104
- await tx
105
- .select()
106
- .from(schema.user)
107
- .where((0, drizzle_orm_1.eq)(schema.user.stripe_price_id, subscription.id))
108
- .for('update');
109
- }
110
- // Record event processing start
111
- await tx.insert(schema.webhook_processing).values({
112
- id: crypto.randomUUID(),
113
- event_id: event.id,
114
- started_at: new Date(),
115
- status: 'processing',
116
- });
117
- try {
118
- // Process the event based on type
119
- await this.handleEvent(event);
120
- // Record successful processing
121
- await tx
122
- .update(schema.webhook_processing)
123
- .set({
124
- status: 'completed',
125
- completed_at: new Date(),
126
- })
127
- .where((0, drizzle_orm_1.eq)(schema.webhook_processing.event_id, event.id));
128
- }
129
- catch (error) {
130
- // Record failed processing
131
- await tx
132
- .update(schema.webhook_processing)
133
- .set({
134
- status: 'failed',
135
- error_message: error instanceof Error ? error.message : 'Unknown error',
136
- completed_at: new Date(),
137
- })
138
- .where((0, drizzle_orm_1.eq)(schema.webhook_processing.event_id, event.id));
139
- throw error; // Re-throw to rollback transaction
140
- }
141
- });
142
- }
143
- async handleEvent(event) {
144
- // Check for older unprocessed events
145
- const pendingEvents = await db_1.default
146
- .select({
147
- id: schema.webhook_events.id,
148
- created: schema.webhook_events.created_at,
149
- })
150
- .from(schema.webhook_events)
151
- .where((0, drizzle_orm_1.and)((0, drizzle_orm_1.sql) `created_at < ${new Date(event.created * 1000)}`, (0, drizzle_orm_1.eq)(schema.webhook_events.processed, false)))
152
- .orderBy(schema.webhook_events.created_at);
153
- // If there are older unprocessed events, delay processing this one
154
- if (pendingEvents.length > 0) {
155
- throw new Error(`Unprocessed events exist before ${event.id}. Process those first.`);
156
- }
157
- // Process based on event type
158
- switch (event.type) {
159
- case 'customer.subscription.created':
160
- case 'customer.subscription.updated':
161
- await this.handleSubscriptionChange(event);
162
- break;
163
- case 'customer.subscription.deleted':
164
- await this.handleSubscriptionDeletion(event);
165
- break;
166
- case 'invoice.created':
167
- await this.handleInvoiceCreation(event);
168
- break;
169
- case 'invoice.paid':
170
- await this.handleInvoicePayment(event);
171
- break;
172
- case 'invoice.payment_failed':
173
- await this.handlePaymentFailure(event);
174
- break;
175
- default:
176
- console.log(`Unhandled event type ${event.type}`);
177
- }
178
- // Mark event as processed
179
- await db_1.default
180
- .update(schema.webhook_events)
181
- .set({
182
- processed: true,
183
- processed_at: new Date(),
184
- })
185
- .where((0, drizzle_orm_1.eq)(schema.webhook_events.id, event.id));
186
- }
187
- async handleSubscriptionChange(event) {
188
- const subscription = event.data.object;
189
- const stateManager = new subscription_state_1.SubscriptionStateManager(subscription.id);
190
- const quotaManager = new quota_manager_1.QuotaManager(subscription.id);
191
- // Get the current state and update it
192
- const currentState = await stateManager.getCurrentState();
193
- const newState = this.mapStripeStatus(subscription.status);
194
- if (currentState !== newState) {
195
- // Acquire lock for state transition
196
- const lockAcquired = await stateManager.beginStateTransition();
197
- if (!lockAcquired) {
198
- throw new Error('Failed to acquire transition lock');
199
- }
200
- try {
201
- // Record state change
202
- await stateManager.addStateHistoryEntry(currentState, newState, `Webhook event: ${event.type}`);
203
- // Handle quota updates if needed
204
- if (newState === 'active' && currentState !== 'active') {
205
- await quotaManager.resetQuota();
206
- }
207
- }
208
- finally {
209
- await stateManager.endStateTransition();
210
- }
211
- }
212
- }
213
- async handleSubscriptionDeletion(event) {
214
- const subscription = event.data.object;
215
- const stateManager = new subscription_state_1.SubscriptionStateManager(subscription.id);
216
- const lockAcquired = await stateManager.beginStateTransition();
217
- if (!lockAcquired) {
218
- throw new Error('Failed to acquire transition lock');
219
- }
220
- try {
221
- await stateManager.addStateHistoryEntry('active', 'canceled', 'Subscription deleted');
222
- }
223
- finally {
224
- await stateManager.endStateTransition();
225
- }
226
- }
227
- async handleInvoiceCreation(event) {
228
- const invoice = event.data.object;
229
- if (!invoice.subscription)
230
- return;
231
- // Handle referral credits if applicable
232
- if (invoice.customer) {
233
- const referralCredits = await this.getTotalReferralCredits(invoice.customer.toString());
234
- if (referralCredits > 0) {
235
- // Apply referral credits as credit on the invoice
236
- await stripe_1.stripeServer.invoices.update(invoice.id, {
237
- description: `Including referral credits: ${referralCredits}`,
238
- });
239
- }
240
- }
241
- }
242
- async handleInvoicePayment(event) {
243
- const invoice = event.data.object;
244
- if (!invoice.subscription)
245
- return;
246
- const stateManager = new subscription_state_1.SubscriptionStateManager(invoice.subscription.toString());
247
- const quotaManager = new quota_manager_1.QuotaManager(invoice.subscription.toString());
248
- // Reset quota for new billing period
249
- await quotaManager.resetQuota();
250
- // Update subscription state if needed
251
- const currentState = await stateManager.getCurrentState();
252
- if (currentState !== 'active') {
253
- const lockAcquired = await stateManager.beginStateTransition();
254
- if (!lockAcquired) {
255
- throw new Error('Failed to acquire transition lock');
256
- }
257
- try {
258
- await stateManager.addStateHistoryEntry(currentState, 'active', 'Invoice payment successful');
259
- }
260
- finally {
261
- await stateManager.endStateTransition();
262
- }
263
- }
264
- }
265
- async handlePaymentFailure(event) {
266
- const invoice = event.data.object;
267
- if (!invoice.subscription)
268
- return;
269
- const paymentGuards = new payment_guards_1.PaymentGuards(invoice.subscription.toString());
270
- await paymentGuards.handleFailedPayment();
271
- // Update subscription state
272
- const stateManager = new subscription_state_1.SubscriptionStateManager(invoice.subscription.toString());
273
- const lockAcquired = await stateManager.beginStateTransition();
274
- if (!lockAcquired) {
275
- throw new Error('Failed to acquire transition lock');
276
- }
277
- try {
278
- await stateManager.addStateHistoryEntry('active', 'past_due', 'Payment failed');
279
- }
280
- finally {
281
- await stateManager.endStateTransition();
282
- }
283
- }
284
- async getTotalReferralCredits(customerId) {
285
- const result = await db_1.default
286
- .select({
287
- total: (0, drizzle_orm_1.sql) `COALESCE(SUM(${schema.referral.credits}), 0)::int`,
288
- })
289
- .from(schema.user)
290
- .leftJoin(schema.referral, (0, drizzle_orm_1.or)((0, drizzle_orm_1.eq)(schema.referral.referrer_id, schema.user.id), (0, drizzle_orm_1.eq)(schema.referral.referred_id, schema.user.id)))
291
- .where((0, drizzle_orm_1.eq)(schema.user.stripe_customer_id, customerId))
292
- .groupBy(schema.user.id);
293
- return result[0]?.total || 0;
294
- }
295
- mapStripeStatus(status) {
296
- switch (status) {
297
- case 'active':
298
- return 'active';
299
- case 'past_due':
300
- return 'past_due';
301
- case 'incomplete':
302
- return 'incomplete';
303
- case 'canceled':
304
- return 'canceled';
305
- case 'trialing':
306
- return 'trialing';
307
- case 'paused':
308
- return 'paused';
309
- default:
310
- throw new Error(`Unknown Stripe status: ${status}`);
311
- }
312
- }
313
- }
314
- exports.WebhookProcessor = WebhookProcessor;
315
- //# sourceMappingURL=webhook-processor.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"webhook-processor.js","sourceRoot":"","sources":["../../src/billing/webhook-processor.ts"],"names":[],"mappings":"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"}
@@ -1 +0,0 @@
1
- export {};
@@ -1,5 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- const get_customer_invoices_1 = require("../util/get-customer-invoices");
4
- (0, get_customer_invoices_1.main)().catch(console.error);
5
- //# sourceMappingURL=get-invoices.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"get-invoices.js","sourceRoot":"","sources":["../../src/scripts/get-invoices.ts"],"names":[],"mappings":";;AAAA,yEAAoD;AAEpD,IAAA,4BAAI,GAAE,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAA"}
@@ -1 +0,0 @@
1
- export {};
@@ -1,5 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- const get_month_overage_1 = require("../util/get-month-overage");
4
- (0, get_month_overage_1.main)().catch(console.error);
5
- //# sourceMappingURL=get-month-overage.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"get-month-overage.js","sourceRoot":"","sources":["../../src/scripts/get-month-overage.ts"],"names":[],"mappings":";;AAAA,iEAAgD;AAEhD,IAAA,wBAAI,GAAE,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAA"}
@@ -1 +0,0 @@
1
- export {};
@@ -1,5 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- const get_upcoming_invoices_1 = require("../util/get-upcoming-invoices");
4
- (0, get_upcoming_invoices_1.main)().catch(console.error);
5
- //# sourceMappingURL=get-upcoming-invoices.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"get-upcoming-invoices.js","sourceRoot":"","sources":["../../src/scripts/get-upcoming-invoices.ts"],"names":[],"mappings":";;AAAA,yEAAoD;AAEpD,IAAA,4BAAI,GAAE,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAA"}
@@ -1 +0,0 @@
1
- export {};
@@ -1,92 +0,0 @@
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 (mod) {
19
- if (mod && mod.__esModule) return mod;
20
- var result = {};
21
- if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
22
- __setModuleDefault(result, mod);
23
- return result;
24
- };
25
- var __importDefault = (this && this.__importDefault) || function (mod) {
26
- return (mod && mod.__esModule) ? mod : { "default": mod };
27
- };
28
- Object.defineProperty(exports, "__esModule", { value: true });
29
- const drizzle_orm_1 = require("drizzle-orm");
30
- const stripe_1 = require("../util/stripe");
31
- const db_1 = __importDefault(require("../db"));
32
- const schema = __importStar(require("../db/schema"));
33
- async function main() {
34
- const email = process.argv[2];
35
- if (!email) {
36
- console.error('Please provide an email address');
37
- process.exit(1);
38
- }
39
- console.log(`Processing user ${email}...`);
40
- // Find user and verify subscription
41
- const user = await db_1.default.query.user.findFirst({
42
- where: (0, drizzle_orm_1.eq)(schema.user.email, email),
43
- });
44
- if (!user?.stripe_customer_id) {
45
- console.error('User not found or has no Stripe customer ID');
46
- process.exit(1);
47
- }
48
- console.log('Found user:', user.id);
49
- // Get subscriptions for customer
50
- const subscriptions = await stripe_1.stripeServer.subscriptions.list({
51
- customer: user.stripe_customer_id,
52
- status: 'active',
53
- });
54
- if (subscriptions.data.length === 0) {
55
- console.error('No active subscription found');
56
- process.exit(1);
57
- }
58
- const subscription = subscriptions.data[0];
59
- console.log('Found subscription:', subscription.id);
60
- // Update subscription items
61
- console.log('Updating subscription items...');
62
- await stripe_1.stripeServer.subscriptions.update(subscription.id, {
63
- items: [
64
- { price: 'price_1QLxwxKrNS6SjmqWeKhJIlAD', quantity: 1 },
65
- { price: 'price_1QMlqaKrNS6SjmqWQEeaTcqk' },
66
- ],
67
- });
68
- // Calculate usage since Oct 30, 2024
69
- const startDate = new Date('2024-10-30');
70
- const creditsUsed = await db_1.default
71
- .select({
72
- total: (0, drizzle_orm_1.sql) `SUM(${schema.message.credits})`,
73
- })
74
- .from(schema.message)
75
- .where((0, drizzle_orm_1.and)((0, drizzle_orm_1.eq)(schema.message.user_id, user.id), (0, drizzle_orm_1.gte)(schema.message.finished_at, startDate)))
76
- .then((result) => parseInt(result[0]?.total ?? '0'));
77
- console.log('Credits used since Oct 30, 2024:', creditsUsed);
78
- // Report usage
79
- const timestamp = Math.floor(startDate.getTime() / 1000);
80
- await stripe_1.stripeServer.subscriptionItems.createUsageRecord(subscription.items.data[1].id, // Get the metered price item
81
- {
82
- quantity: creditsUsed,
83
- timestamp,
84
- action: 'set',
85
- });
86
- console.log('Successfully updated subscription and usage');
87
- }
88
- main().catch((error) => {
89
- console.error('Error:', error);
90
- process.exit(1);
91
- });
92
- //# sourceMappingURL=update-subscriptions.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"update-subscriptions.js","sourceRoot":"","sources":["../../src/scripts/update-subscriptions.ts"],"names":[],"mappings":"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"}
@@ -1,11 +0,0 @@
1
- declare function getAllCustomersWithInvoices(): Promise<{
2
- customerId: string;
3
- email: string | null;
4
- name: string | null;
5
- lastInvoice: {
6
- amount: number;
7
- date: Date;
8
- };
9
- }[]>;
10
- declare function main(): Promise<void>;
11
- export { getAllCustomersWithInvoices, main };