@trendyvideo/billing 1.2.1 → 1.4.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.
@@ -178,4 +178,142 @@ const pricing_1 = require("../pricing");
178
178
  (0, vitest_1.expect)(billed).toBe(45_000);
179
179
  });
180
180
  });
181
+ (0, vitest_1.describe)('Trendy Voice SKU — trendy_voice_minute', () => {
182
+ (0, vitest_1.it)('SKU constant matches the MEDIA_RATE_PRICING key', () => {
183
+ (0, vitest_1.expect)(pricing_1.TRENDY_VOICE_SKU).toBe('trendy_voice_minute');
184
+ (0, vitest_1.expect)(pricing_1.MEDIA_RATE_PRICING[pricing_1.TRENDY_VOICE_SKU]).toBeDefined();
185
+ });
186
+ (0, vitest_1.it)('rate card stores the pre-markup raw rate', () => {
187
+ const rate = pricing_1.MEDIA_RATE_PRICING[pricing_1.TRENDY_VOICE_SKU];
188
+ (0, vitest_1.expect)(rate.unit).toBe('per_clip');
189
+ // Raw × COST_MARKUP must land exactly on the user-facing rate.
190
+ (0, vitest_1.expect)(Math.round(rate.microdollarsPerUnit * pricing_1.COST_MARKUP)).toBe(pricing_1.TRENDY_VOICE_MICRODOLLARS_PER_MINUTE);
191
+ });
192
+ (0, vitest_1.it)('1 minute = 12 credits = 120,000 microdollars', () => {
193
+ (0, vitest_1.expect)(pricing_1.TRENDY_VOICE_CREDITS_PER_MINUTE).toBe(12);
194
+ (0, vitest_1.expect)(pricing_1.TRENDY_VOICE_MICRODOLLARS_PER_MINUTE).toBe(120_000);
195
+ (0, vitest_1.expect)(pricing_1.TRENDY_VOICE_CREDITS_PER_MINUTE * pricing_1.MICRODOLLARS_PER_CREDIT).toBe(pricing_1.TRENDY_VOICE_MICRODOLLARS_PER_MINUTE);
196
+ });
197
+ (0, vitest_1.it)('estimateBilledMediaCostMicrodollars(trendy_voice_minute) lands on 120,000 µ$ per minute', () => {
198
+ const billed = (0, pricing_1.estimateBilledMediaCostMicrodollars)(pricing_1.TRENDY_VOICE_SKU, { units: 1 });
199
+ (0, vitest_1.expect)(billed).toBe(pricing_1.TRENDY_VOICE_MICRODOLLARS_PER_MINUTE);
200
+ (0, vitest_1.expect)(billed).toBe(120_000);
201
+ });
202
+ (0, vitest_1.it)('calculateCostMicrodollars (raw) passes an override through unchanged; the 1.5× lands on the credit side in recordUsage, so VoiceMeter passes the pre-markup 80,000', () => {
203
+ // The raw calculator never marks up. The VoiceMeter passes 80,000 µ$/min
204
+ // (120,000 / COST_MARKUP) to recordUsage, which stores 80,000 as the
205
+ // row's cost and bills calculateBilledCredits(80,000) = 12 credits.
206
+ const cost = (0, pricing_1.calculateCostMicrodollars)(pricing_1.TRENDY_VOICE_SKU, 0, 0, 0, 0, pricing_1.TRENDY_VOICE_MICRODOLLARS_PER_MINUTE);
207
+ (0, vitest_1.expect)(cost).toBe(pricing_1.TRENDY_VOICE_MICRODOLLARS_PER_MINUTE);
208
+ (0, vitest_1.expect)(cost).toBe(120_000);
209
+ });
210
+ (0, vitest_1.it)('calculateBilledCredits(rate card raw rate) is exactly 12 credits per minute', () => {
211
+ const rate = pricing_1.MEDIA_RATE_PRICING[pricing_1.TRENDY_VOICE_SKU];
212
+ (0, vitest_1.expect)((0, pricing_1.calculateBilledCredits)(rate.microdollarsPerUnit)).toBe(pricing_1.TRENDY_VOICE_CREDITS_PER_MINUTE);
213
+ (0, vitest_1.expect)((0, pricing_1.calculateBilledCredits)(rate.microdollarsPerUnit)).toBe(12);
214
+ });
215
+ });
216
+ (0, vitest_1.describe)('MEDIA_RATE_PRICING — Trendy Slides SKUs', () => {
217
+ (0, vitest_1.it)('slides-generate is defined flat per-deck at $0.50 raw', () => {
218
+ const rate = pricing_1.MEDIA_RATE_PRICING['slides-generate'];
219
+ (0, vitest_1.expect)(rate).toBeDefined();
220
+ (0, vitest_1.expect)(rate.unit).toBe('per_clip');
221
+ (0, vitest_1.expect)(rate.microdollarsPerUnit).toBe(500_000);
222
+ (0, vitest_1.expect)(rate.source).toContain('PROVISIONAL');
223
+ });
224
+ (0, vitest_1.it)('slides-export-doc is defined flat per-export at $0.02 raw', () => {
225
+ const rate = pricing_1.MEDIA_RATE_PRICING['slides-export-doc'];
226
+ (0, vitest_1.expect)(rate).toBeDefined();
227
+ (0, vitest_1.expect)(rate.unit).toBe('per_clip');
228
+ (0, vitest_1.expect)(rate.microdollarsPerUnit).toBe(20_000);
229
+ (0, vitest_1.expect)(rate.source).toContain('PROVISIONAL');
230
+ });
231
+ (0, vitest_1.it)('estimateBilledMediaCostMicrodollars(slides-generate) bills 75 credits per deck', () => {
232
+ // 500,000 µ$ raw × 1.5 = 750,000 µ$ = 75 credits
233
+ const billed = (0, pricing_1.estimateBilledMediaCostMicrodollars)('slides-generate', { units: 1 });
234
+ (0, vitest_1.expect)(billed).toBe(Math.round(500_000 * pricing_1.COST_MARKUP));
235
+ (0, vitest_1.expect)(billed).toBe(750_000);
236
+ (0, vitest_1.expect)(billed / pricing_1.MICRODOLLARS_PER_CREDIT).toBe(75);
237
+ });
238
+ (0, vitest_1.it)('estimateBilledMediaCostMicrodollars(slides-export-doc) bills 3 credits per export', () => {
239
+ // 20,000 µ$ raw × 1.5 = 30,000 µ$ = 3 credits
240
+ const billed = (0, pricing_1.estimateBilledMediaCostMicrodollars)('slides-export-doc', { units: 1 });
241
+ (0, vitest_1.expect)(billed).toBe(Math.round(20_000 * pricing_1.COST_MARKUP));
242
+ (0, vitest_1.expect)(billed).toBe(30_000);
243
+ (0, vitest_1.expect)(billed / pricing_1.MICRODOLLARS_PER_CREDIT).toBe(3);
244
+ });
245
+ });
246
+ // ---------------------------------------------------------------------------
247
+ // The rounding rule, in one place: calculateBilledCredits.
248
+ // credits = round2( (cost_microdollars / 10,000) × COST_MARKUP )
249
+ // Half up, to 0.01 credit, exactly once, after the markup.
250
+ // ---------------------------------------------------------------------------
251
+ (0, vitest_1.describe)('calculateBilledCredits: exact conversion, then COST_MARKUP, then one half-up rounding to 0.01 credit', () => {
252
+ /**
253
+ * Reference implementation in integer arithmetic (BigInt), independent of
254
+ * floating point: hundredths = round-half-up(cost × 3 / 200).
255
+ */
256
+ function referenceBilledCredits(costMicrodollars) {
257
+ const n = BigInt(costMicrodollars) * 3n;
258
+ const d = 200n;
259
+ const q = n / d;
260
+ const r = n % d;
261
+ return Number(r * 2n >= d ? q + 1n : q) / 100;
262
+ }
263
+ (0, vitest_1.it)('precision is 0.01 credit, matching usage_events.credits_consumed numeric(12,2)', () => {
264
+ (0, vitest_1.expect)(pricing_1.CREDIT_DECIMALS).toBe(2);
265
+ });
266
+ (0, vitest_1.it)('converts exactly, then marks up: 10,000 µ$ = 1 credit → 1.5; 80,000 µ$ = 8 → 12', () => {
267
+ (0, vitest_1.expect)((0, pricing_1.microdollarsToCredits)(10_000)).toBe(1);
268
+ (0, vitest_1.expect)((0, pricing_1.calculateBilledCredits)(10_000)).toBe(1.5);
269
+ (0, vitest_1.expect)((0, pricing_1.calculateBilledCredits)(80_000)).toBe(12);
270
+ (0, vitest_1.expect)((0, pricing_1.calculateBilledCredits)(0)).toBe(0);
271
+ });
272
+ (0, vitest_1.it)('rounds half up at the third decimal, once, after the markup', () => {
273
+ (0, vitest_1.expect)((0, pricing_1.calculateBilledCredits)(10_500)).toBe(1.58); // 1.05 × 1.5 = 1.575
274
+ (0, vitest_1.expect)((0, pricing_1.calculateBilledCredits)(100)).toBe(0.02); // 0.01 × 1.5 = 0.015
275
+ (0, vitest_1.expect)((0, pricing_1.calculateBilledCredits)(300)).toBe(0.05); // 0.03 × 1.5 = 0.045
276
+ (0, vitest_1.expect)((0, pricing_1.calculateBilledCredits)(1_500)).toBe(0.23); // 0.15 × 1.5 = 0.225 (0.224999… in naive float)
277
+ });
278
+ (0, vitest_1.it)('rounds down below the half', () => {
279
+ (0, vitest_1.expect)((0, pricing_1.calculateBilledCredits)(10_466)).toBe(1.57); // 1.5699
280
+ (0, vitest_1.expect)((0, pricing_1.calculateBilledCredits)(8_018)).toBe(1.2); // 1.2027
281
+ (0, vitest_1.expect)((0, pricing_1.calculateBilledCredits)(33)).toBe(0); // 0.00495
282
+ (0, vitest_1.expect)((0, pricing_1.calculateBilledCredits)(34)).toBe(0.01); // 0.0051
283
+ });
284
+ (0, vitest_1.it)('never rounds up to a whole credit (1.2.1 used Math.ceil)', () => {
285
+ (0, vitest_1.expect)((0, pricing_1.calculateBilledCredits)(8_018)).not.toBe(2);
286
+ (0, vitest_1.expect)((0, pricing_1.calculateBilledCredits)(8_018)).toBe(1.2);
287
+ (0, vitest_1.expect)((0, pricing_1.calculateBilledCredits)(19_268)).toBe(2.89);
288
+ (0, vitest_1.expect)((0, pricing_1.calculateBilledCredits)(49_268)).toBe(7.39);
289
+ });
290
+ (0, vitest_1.it)('does not round before the markup: 8,017.5 µ$ true cost is stored as 8,018 and the credits come from the stored figure', () => {
291
+ // cost side: one rounding to the microdollar
292
+ (0, vitest_1.expect)((0, pricing_1.calculateCostMicrodollars)('gemini-3.7-flash', 36_900, 500, 31_900, 0, undefined, new Date('2026-12-31T00:00:00Z'))).toBe(8_018);
293
+ // credit side: one rounding to 0.01, from 8,018
294
+ (0, vitest_1.expect)((0, pricing_1.calculateBilledCredits)(8_018)).toBe(1.2);
295
+ });
296
+ (0, vitest_1.it)('equals the integer reference implementation for every cost from 0 to 5,000,000 µ$ and for large values', () => {
297
+ for (let cost = 0; cost <= 5_000_000; cost++) {
298
+ const got = (0, pricing_1.calculateBilledCredits)(cost);
299
+ if (got !== referenceBilledCredits(cost)) {
300
+ throw new Error(`calculateBilledCredits(${cost}) = ${got}, reference = ${referenceBilledCredits(cost)}`);
301
+ }
302
+ }
303
+ for (const cost of [18_000_000, 27_000_000, 123_456_789, 999_999_999, 2 ** 40, 2 ** 45 - 1]) {
304
+ (0, vitest_1.expect)((0, pricing_1.calculateBilledCredits)(cost), String(cost)).toBe(referenceBilledCredits(cost));
305
+ }
306
+ });
307
+ (0, vitest_1.it)('agrees with the record_usage_atomic fallback whenever credits round to 0: ROUND(cost / 10000, 2) is 0 for every such cost', () => {
308
+ // The RPC uses p_credits_consumed when > 0, else ROUND(p_cost_microdollars / 10000, 2).
309
+ let zeroCredits = 0;
310
+ for (let cost = 0; cost <= 1_000; cost++) {
311
+ if ((0, pricing_1.calculateBilledCredits)(cost) === 0) {
312
+ zeroCredits++;
313
+ (0, vitest_1.expect)(Math.round(cost / 100) / 100, String(cost)).toBe(0);
314
+ }
315
+ }
316
+ (0, vitest_1.expect)(zeroCredits).toBe(34); // 0..33 µ$
317
+ });
318
+ });
181
319
  //# sourceMappingURL=pricing.test.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"pricing.test.js","sourceRoot":"","sources":["../../src/__tests__/pricing.test.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"pricing.test.js","sourceRoot":"","sources":["../../src/__tests__/pricing.test.ts"],"names":[],"mappings":"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"}
@@ -2,6 +2,7 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  const vitest_1 = require("vitest");
4
4
  const usage_tracker_1 = require("../usage-tracker");
5
+ const pricing_1 = require("../pricing");
5
6
  // ---------------------------------------------------------------------------
6
7
  // Helpers
7
8
  // ---------------------------------------------------------------------------
@@ -99,11 +100,12 @@ function makeSupabaseMock(options = {}) {
99
100
  (0, vitest_1.it)('passes creditsConsumed to the atomic RPC', async () => {
100
101
  const supabase = makeSupabaseMock();
101
102
  await (0, usage_tracker_1.recordUsage)(supabase, makeEvent(), silentLogger);
102
- // claude-sonnet-4-6: 1000*3 + 500*15 = 10500 microdollars
103
- // 10500 / 10000 = 1.05 credits
103
+ // claude-sonnet-4-6: 1000*3 + 500*15 = 10,500 µ$ true cost, stored as-is.
104
+ // Credits: 10,500 / 10,000 = 1.05 exact, × COST_MARKUP (1.5) = 1.575,
105
+ // rounded once (half up, 0.01 credit) = 1.58.
104
106
  (0, vitest_1.expect)(supabase.rpc).toHaveBeenCalledWith('record_usage_atomic', vitest_1.expect.objectContaining({
105
107
  p_cost_microdollars: 10500,
106
- p_credits_consumed: 1.05,
108
+ p_credits_consumed: 1.58,
107
109
  }));
108
110
  });
109
111
  (0, vitest_1.it)('passes conversationId to atomic RPC when provided', async () => {
@@ -131,8 +133,11 @@ function makeSupabaseMock(options = {}) {
131
133
  costMicrodollarsOverride: 30000,
132
134
  });
133
135
  await (0, usage_tracker_1.recordUsage)(supabase, event, silentLogger);
136
+ // Overrides are RAW provider cost, stored as passed; the markup lands on
137
+ // the credit side (30,000 / 10,000 = 3 × 1.5 = 4.5 credits).
134
138
  (0, vitest_1.expect)(supabase.rpc).toHaveBeenCalledWith('record_usage_atomic', vitest_1.expect.objectContaining({
135
139
  p_cost_microdollars: 30000,
140
+ p_credits_consumed: 4.5,
136
141
  }));
137
142
  });
138
143
  (0, vitest_1.it)('handles missing orgId without crashing', async () => {
@@ -207,4 +212,197 @@ function makeSupabaseMock(options = {}) {
207
212
  (0, vitest_1.expect)(silentLogger.error).toHaveBeenCalledWith('Unexpected error recording usage', vitest_1.expect.objectContaining({ error: 'Unexpected crash' }));
208
213
  });
209
214
  });
215
+ // ---------------------------------------------------------------------------
216
+ // COST_MARKUP on the write path. Order of computation (Sully, 2026-09-04):
217
+ // 1. cost_microdollars = true provider cost, exact, no markup
218
+ // 2. credits = cost_microdollars / 10,000, exact
219
+ // 3. credits × COST_MARKUP, rounded once to 0.01 credit
220
+ //
221
+ // Every published version (1.0.0 to 1.2.1) multiplied by COST_MARKUP inside
222
+ // calculateCostMicrodollars, baking the margin into the stored cost. #118
223
+ // made that function return raw cost and nothing on the recordUsage path
224
+ // picked the markup back up (zero margin, never published). These tests pin
225
+ // the markup to exactly one application, on the credit side, in recordUsage.
226
+ // ---------------------------------------------------------------------------
227
+ /** What the atomic RPC was asked to store for the last recordUsage call. */
228
+ function storedCost(supabase) {
229
+ const call = supabase.rpc.mock.calls.find((c) => c[0] === 'record_usage_atomic');
230
+ (0, vitest_1.expect)(call).toBeDefined();
231
+ return { cost: call[1].p_cost_microdollars, credits: call[1].p_credits_consumed };
232
+ }
233
+ /** Half-up rounding to 0.01 credit, written independently of the implementation. */
234
+ function round2(x) {
235
+ return Math.round(x * 100) / 100;
236
+ }
237
+ (0, vitest_1.describe)('recordUsage stores true provider cost and applies COST_MARKUP once, on the credit side', () => {
238
+ (0, vitest_1.beforeEach)(() => {
239
+ vitest_1.vi.restoreAllMocks();
240
+ vitest_1.vi.useRealTimers();
241
+ });
242
+ (0, vitest_1.it)('TRUE-COST guard: stored cost_microdollars equals the provider rate card exactly, with no markup component', async () => {
243
+ const supabase = makeSupabaseMock();
244
+ // claude-sonnet-4-6, disjoint Anthropic counts, straight from the rate card:
245
+ // 1000×$3 + 500×$15 + 200×$0.30 + 100×$3.75 per 1M = 10,935 µ$
246
+ const trueCost = 1000 * 3 + 500 * 15 + 200 * 0.3 + 100 * 3.75;
247
+ (0, vitest_1.expect)(trueCost).toBe(10_935);
248
+ await (0, usage_tracker_1.recordUsage)(supabase, makeEvent({ inputTokens: 1000, outputTokens: 500, cacheReadTokens: 200, cacheCreationTokens: 100 }), silentLogger);
249
+ const { cost } = storedCost(supabase);
250
+ (0, vitest_1.expect)(cost).toBe(trueCost);
251
+ (0, vitest_1.expect)(cost).toBe((0, pricing_1.calculateCostMicrodollars)('claude-sonnet-4-6', 1000, 500, 200, 100));
252
+ (0, vitest_1.expect)(cost).not.toBe(Math.round(trueCost * pricing_1.COST_MARKUP)); // 16,403: the #255 v1 / 1.2.1 figure
253
+ (0, vitest_1.expect)(cost / trueCost).toBe(1);
254
+ });
255
+ (0, vitest_1.it)('TRUE-COST guard (Gemini): 5k uncached + 31.9k cached + 500 out on gemini-3.7-flash stores 8,018 µ$ (8,017.5 rounded to the microdollar)', async () => {
256
+ vitest_1.vi.useFakeTimers();
257
+ vitest_1.vi.setSystemTime(new Date('2026-12-31T23:59:59Z'));
258
+ const supabase = makeSupabaseMock();
259
+ await (0, usage_tracker_1.recordUsage)(supabase, makeEvent({ model: 'gemini-3.7-flash', inputTokens: 36_900, outputTokens: 500, cacheReadTokens: 31_900 }), silentLogger);
260
+ const { cost } = storedCost(supabase);
261
+ vitest_1.vi.useRealTimers();
262
+ // Google's invoice for this call: 5,000×0.75 + 500×3.75 + 31,900×0.075
263
+ const trueCostExact = 5_000 * 0.75 + 500 * 3.75 + 31_900 * 0.075;
264
+ (0, vitest_1.expect)(trueCostExact).toBe(8_017.5);
265
+ (0, vitest_1.expect)(cost).toBe(Math.round(trueCostExact));
266
+ (0, vitest_1.expect)(cost).toBe(8_018);
267
+ (0, vitest_1.expect)(Math.abs(cost - trueCostExact)).toBeLessThanOrEqual(0.5); // the only rounding on the cost side
268
+ (0, vitest_1.expect)(cost).not.toBe(12_026); // what #255 v1 stored (8,017.5 × 1.5)
269
+ });
270
+ (0, vitest_1.it)('MARKUP-DROPPED guard: stored credits_consumed is (true cost / 10,000) × COST_MARKUP, never the un-marked-up conversion', async () => {
271
+ const supabase = makeSupabaseMock();
272
+ await (0, usage_tracker_1.recordUsage)(supabase, makeEvent({ inputTokens: 1000, outputTokens: 500, cacheReadTokens: 200, cacheCreationTokens: 100 }), silentLogger);
273
+ const { cost, credits } = storedCost(supabase);
274
+ (0, vitest_1.expect)(cost).toBe(10_935);
275
+ (0, vitest_1.expect)(pricing_1.COST_MARKUP).toBe(1.5);
276
+ const exactCredits = (0, pricing_1.microdollarsToCredits)(cost); // 1.0935, exact
277
+ (0, vitest_1.expect)(credits).toBe(round2(exactCredits * pricing_1.COST_MARKUP)); // 1.64025 → 1.64
278
+ (0, vitest_1.expect)(credits).toBe(1.64);
279
+ (0, vitest_1.expect)(credits).not.toBe(round2(exactCredits)); // 1.09: the zero-margin figure #118 left behind
280
+ });
281
+ (0, vitest_1.it)('MARKUP-DOUBLED guard: credits are exactly one × COST_MARKUP over the exact conversion, not COST_MARKUP² (2.25×)', async () => {
282
+ const supabase = makeSupabaseMock();
283
+ await (0, usage_tracker_1.recordUsage)(supabase, makeEvent({ inputTokens: 1000, outputTokens: 500 }), silentLogger);
284
+ const { cost, credits } = storedCost(supabase);
285
+ (0, vitest_1.expect)(cost).toBe(10_500);
286
+ // recordUsage stores calculateBilledCredits verbatim (no extra factor in recordUsage)...
287
+ (0, vitest_1.expect)(credits).toBe((0, pricing_1.calculateBilledCredits)(cost));
288
+ // ...and calculateBilledCredits is 1.05 × 1.5 = 1.575 → 1.58, not 1.05 × 2.25 = 2.3625 → 2.36.
289
+ (0, vitest_1.expect)(credits).toBe(1.58);
290
+ (0, vitest_1.expect)(credits).not.toBe(round2((0, pricing_1.microdollarsToCredits)(cost) * pricing_1.COST_MARKUP * pricing_1.COST_MARKUP));
291
+ // Ratio check on a value with no rounding at all: 10,000 µ$ = 1 credit exact → 1.5 billed.
292
+ const supabase2 = makeSupabaseMock();
293
+ await (0, usage_tracker_1.recordUsage)(supabase2, makeEvent({ model: 'chirp-tts', inputTokens: 0, outputTokens: 0, costMicrodollarsOverride: 10_000 }), silentLogger);
294
+ const second = storedCost(supabase2);
295
+ (0, vitest_1.expect)(second.cost).toBe(10_000);
296
+ (0, vitest_1.expect)(second.credits / (0, pricing_1.microdollarsToCredits)(second.cost)).toBe(pricing_1.COST_MARKUP);
297
+ });
298
+ (0, vitest_1.it)('ORDER guard: the markup is on the credit side only; cost_microdollars carries none of it', async () => {
299
+ const supabase = makeSupabaseMock();
300
+ await (0, usage_tracker_1.recordUsage)(supabase, makeEvent({ inputTokens: 1000, outputTokens: 500 }), silentLogger);
301
+ const { cost, credits } = storedCost(supabase);
302
+ const raw = (0, pricing_1.calculateCostMicrodollars)('claude-sonnet-4-6', 1000, 500);
303
+ (0, vitest_1.expect)(cost / raw).toBe(1); // no 1.5 here...
304
+ (0, vitest_1.expect)(credits / (0, pricing_1.microdollarsToCredits)(cost)).toBeCloseTo(pricing_1.COST_MARKUP, 2); // ...it is here
305
+ });
306
+ (0, vitest_1.it)('Gemini path (#253 formula): early point stores 8,018 µ$ true cost and bills 1.20 credits', async () => {
307
+ // Pin the clock inside the gemini-3.7-flash promotional window so the
308
+ // scheduledChange (2027-01-01) cannot flip this test.
309
+ vitest_1.vi.useFakeTimers();
310
+ vitest_1.vi.setSystemTime(new Date('2026-12-31T23:59:59Z'));
311
+ const supabase = makeSupabaseMock();
312
+ // #252 §6 "early" point: 31,900-token cached prefix + 5,000 uncached, 500 output.
313
+ await (0, usage_tracker_1.recordUsage)(supabase, makeEvent({ model: 'gemini-3.7-flash', inputTokens: 36_900, outputTokens: 500, cacheReadTokens: 31_900 }), silentLogger);
314
+ const { cost, credits } = storedCost(supabase);
315
+ vitest_1.vi.useRealTimers();
316
+ // true cost 8,017.5 → 8,018 µ$; credits = 0.8018 × 1.5 = 1.2027 → 1.20
317
+ // (#255 v1 stored 12,026 µ$ / 1.2026 credits, which numeric(12,2) also kept as 1.20).
318
+ (0, vitest_1.expect)(cost).toBe(8_018);
319
+ (0, vitest_1.expect)(credits).toBe(1.2);
320
+ // Legacy prod (DEFAULT_PRICING, double count, ×1.5) stored 191,655 µ$ and 20 credits for this call.
321
+ (0, vitest_1.expect)(cost).toBeLessThan(191_655 / 10);
322
+ (0, vitest_1.expect)(credits).toBeLessThan(20 / 10);
323
+ });
324
+ (0, vitest_1.it)('#253 prod row (2026-09-03T23:30): stores 29,535 µ$ true cost and bills 4.43 credits, not the 500,631 µ$ / 51 credits stored today', async () => {
325
+ vitest_1.vi.useFakeTimers();
326
+ vitest_1.vi.setSystemTime(new Date('2026-09-03T23:30:00Z'));
327
+ const supabase = makeSupabaseMock();
328
+ await (0, usage_tracker_1.recordUsage)(supabase, makeEvent({
329
+ model: 'gemini-3.7-flash',
330
+ inputTokens: 64_409,
331
+ outputTokens: 105,
332
+ cacheReadTokens: 63_886,
333
+ cacheCreationTokens: 31_943,
334
+ }), silentLogger);
335
+ const { cost, credits } = storedCost(supabase);
336
+ vitest_1.vi.useRealTimers();
337
+ // true provider cost 29,534.7 → 29,535 µ$ (matches pricing-gemini-billing.test.ts row 1).
338
+ // credits = 2.9535 × 1.5 = 4.43025 → 4.43 (#255 v1: 44,302 µ$ → 4.4302 → 4.43; unchanged).
339
+ (0, vitest_1.expect)(cost).toBe(29_535);
340
+ (0, vitest_1.expect)(credits).toBe(4.43);
341
+ (0, vitest_1.expect)(cost).toBeLessThan(500_631);
342
+ (0, vitest_1.expect)(credits).toBeLessThan(51); // 1.2.1: Math.ceil(50.0631)
343
+ });
344
+ });
345
+ (0, vitest_1.describe)('override path: overrides are stored as true cost and marked up on the credit side (same margin as 1.2.1)', () => {
346
+ (0, vitest_1.beforeEach)(() => {
347
+ vitest_1.vi.restoreAllMocks();
348
+ });
349
+ async function record(model, override) {
350
+ const supabase = makeSupabaseMock();
351
+ await (0, usage_tracker_1.recordUsage)(supabase, makeEvent({ service: 'video-agent', model, inputTokens: 0, outputTokens: 0, costMicrodollarsOverride: override }), silentLogger);
352
+ return storedCost(supabase);
353
+ }
354
+ (0, vitest_1.it)('trendy_voice_minute: the video agent passes 80,000 µ$ per minute and exactly 12 credits land', async () => {
355
+ // trendy-video-agent/src/agent/voice/voice-meter.ts: RAW_PER_MINUTE_OVERRIDE = 120,000 / COST_MARKUP
356
+ const perMinute = pricing_1.MEDIA_RATE_PRICING[pricing_1.TRENDY_VOICE_SKU].microdollarsPerUnit;
357
+ (0, vitest_1.expect)(perMinute).toBe(80_000);
358
+ const one = await record(pricing_1.TRENDY_VOICE_SKU, perMinute);
359
+ (0, vitest_1.expect)(one.cost).toBe(80_000);
360
+ (0, vitest_1.expect)(one.credits).toBe(12);
361
+ (0, vitest_1.expect)(one.credits).toBe(pricing_1.TRENDY_VOICE_CREDITS_PER_MINUTE);
362
+ // Exact for any whole number of minutes: no special case, no drift.
363
+ for (const minutes of [2, 7, 30, 61]) {
364
+ const r = await record(pricing_1.TRENDY_VOICE_SKU, minutes * perMinute);
365
+ (0, vitest_1.expect)(r.cost).toBe(minutes * 80_000);
366
+ (0, vitest_1.expect)(r.credits).toBe(minutes * 12);
367
+ }
368
+ });
369
+ (0, vitest_1.it)('Seedance (per-second, raw Atlas cost): 5s reference-to-video stores 2,150,000 µ$ and bills 322.5 credits', async () => {
370
+ const raw = (0, pricing_1.estimateMediaCostMicrodollars)('seedance-2.0-fast/reference-to-video', { durationSec: 5 });
371
+ (0, vitest_1.expect)(raw).toBe(2_150_000);
372
+ const { cost, credits } = await record('seedance-2.0-fast/reference-to-video', raw);
373
+ (0, vitest_1.expect)(cost).toBe(raw);
374
+ (0, vitest_1.expect)(credits).toBe(322.5); // 215 × 1.5
375
+ (0, vitest_1.expect)(credits).toBe((0, pricing_1.microdollarsToCredits)((0, pricing_1.estimateBilledMediaCostMicrodollars)('seedance-2.0-fast/reference-to-video', { durationSec: 5 })));
376
+ });
377
+ (0, vitest_1.it)('Seedance image-to-video: 4s transition stores 840,000 µ$ and bills 126 credits', async () => {
378
+ const { cost, credits } = await record('seedance-2.0/image-to-video', 4 * 210_000);
379
+ (0, vitest_1.expect)(cost).toBe(840_000);
380
+ (0, vitest_1.expect)(credits).toBe(126); // 84 × 1.5
381
+ });
382
+ (0, vitest_1.it)('image generation (gpt-image-2-edit): one image stores 170,000 µ$ and bills 25.5 credits', async () => {
383
+ const raw = (0, pricing_1.estimateMediaCostMicrodollars)('gpt-image-2-edit', { units: 1 });
384
+ (0, vitest_1.expect)(raw).toBe(170_000);
385
+ const { cost, credits } = await record('gpt-image-2-edit', raw);
386
+ (0, vitest_1.expect)(cost).toBe(170_000);
387
+ (0, vitest_1.expect)(credits).toBe(25.5); // 17 × 1.5
388
+ });
389
+ (0, vitest_1.it)('music (lyria-3-pro-preview): 60s stores 18,000,000 µ$ and bills 2,700 credits; the preview helper matches the write', async () => {
390
+ const raw = (0, pricing_1.estimateMediaCostMicrodollars)('lyria-3-pro-preview', { durationSec: 60 });
391
+ (0, vitest_1.expect)(raw).toBe(18_000_000);
392
+ const { cost, credits } = await record('lyria-3-pro-preview', raw);
393
+ (0, vitest_1.expect)(cost).toBe(18_000_000);
394
+ (0, vitest_1.expect)(credits).toBe(2_700); // 1,800 × 1.5
395
+ (0, vitest_1.expect)(credits).toBe((0, pricing_1.microdollarsToCredits)((0, pricing_1.estimateBilledMediaCostMicrodollars)('lyria-3-pro-preview', { durationSec: 60 })));
396
+ (0, vitest_1.expect)((0, pricing_1.estimateBilledMediaCostMicrodollars)('lyria-3-pro-preview', { durationSec: 60 })).toBe(27_000_000);
397
+ });
398
+ (0, vitest_1.it)('preview == write for every MEDIA_RATE_PRICING row (one unit / one second)', async () => {
399
+ for (const [model, rate] of Object.entries(pricing_1.MEDIA_RATE_PRICING)) {
400
+ const opts = rate.unit === 'per_second' ? { durationSec: 1 } : { units: 1 };
401
+ const raw = (0, pricing_1.estimateMediaCostMicrodollars)(model, opts);
402
+ const { cost, credits } = await record(model, raw);
403
+ (0, vitest_1.expect)(cost, model).toBe(raw);
404
+ (0, vitest_1.expect)(credits, model).toBe((0, pricing_1.microdollarsToCredits)((0, pricing_1.estimateBilledMediaCostMicrodollars)(model, opts)));
405
+ }
406
+ });
407
+ });
210
408
  //# sourceMappingURL=usage-tracker.test.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"usage-tracker.test.js","sourceRoot":"","sources":["../../src/__tests__/usage-tracker.test.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"usage-tracker.test.js","sourceRoot":"","sources":["../../src/__tests__/usage-tracker.test.ts"],"names":[],"mappings":"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"}
package/dist/index.d.ts CHANGED
@@ -1,7 +1,7 @@
1
1
  export type { ModelPricing, PlanName, PlanLimits, UsageEvent, UsageRecord, UsageCheckResult, RenderLimitResult, StorageQuotaResult, StreamLimitResult, ProjectLimitResult, SocialAccountLimitResult, ResolutionLimitResult, SeatLimitResult, UsageAlertResult, BillingLogger, } from './types';
2
2
  export type { WatchLimitResult } from './guards/watch-guard';
3
- export { MODEL_PRICING, DEFAULT_PRICING, getPricing, calculateCostMicrodollars, MEDIA_RATE_PRICING, estimateMediaCostMicrodollars, estimateBilledMediaCostMicrodollars, COST_MARKUP, MICRODOLLARS_PER_CREDIT, microdollarsToCredits, creditsToMicrodollars, } from './pricing';
4
- export type { MediaRate } from './pricing';
3
+ export { MODEL_PRICING, DEFAULT_PRICING, getPricing, findPricingRow, promptTokensIncludeCacheReads, calculateCostMicrodollars, calculateBilledCredits, MEDIA_RATE_PRICING, GEMINI_EMBEDDING_2_INPUT_PRICING, GEMINI_EMBEDDING_2_UNIT_RATES, geminiEmbedding2VideoFrames, calculateGeminiEmbedding2CostMicrodollars, estimateMediaCostMicrodollars, estimateBilledMediaCostMicrodollars, COST_MARKUP, MICRODOLLARS_PER_CREDIT, CREDIT_DECIMALS, microdollarsToCredits, creditsToMicrodollars, TRENDY_VOICE_SKU, TRENDY_VOICE_CREDITS_PER_MINUTE, TRENDY_VOICE_MICRODOLLARS_PER_MINUTE, } from './pricing';
4
+ export type { MediaRate, GeminiEmbedding2Modality, GeminiEmbedding2CostInput, GeminiEmbedding2Cost, } from './pricing';
5
5
  export { PLAN_LIMITS, getPlanLimits, normalizePlanName, formatBytes, isResolutionAllowed, formatCredits, } from './plan-limits';
6
6
  export { recordUsage, extractVertexUsageMetadata, } from './usage-tracker';
7
7
  export type { VertexUsageMetadata } from './usage-tracker';
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,YAAY,EACV,YAAY,EACZ,QAAQ,EACR,UAAU,EACV,UAAU,EACV,WAAW,EACX,gBAAgB,EAChB,iBAAiB,EACjB,kBAAkB,EAClB,iBAAiB,EACjB,kBAAkB,EAClB,wBAAwB,EACxB,qBAAqB,EACrB,eAAe,EACf,gBAAgB,EAChB,aAAa,GACd,MAAM,SAAS,CAAC;AACjB,YAAY,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AAG7D,OAAO,EACL,aAAa,EACb,eAAe,EACf,UAAU,EACV,yBAAyB,EACzB,kBAAkB,EAClB,6BAA6B,EAC7B,mCAAmC,EACnC,WAAW,EACX,uBAAuB,EACvB,qBAAqB,EACrB,qBAAqB,GACtB,MAAM,WAAW,CAAC;AACnB,YAAY,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AAG3C,OAAO,EACL,WAAW,EACX,aAAa,EACb,iBAAiB,EACjB,WAAW,EACX,mBAAmB,EACnB,aAAa,GACd,MAAM,eAAe,CAAC;AAGvB,OAAO,EACL,WAAW,EACX,0BAA0B,GAC3B,MAAM,iBAAiB,CAAC;AACzB,YAAY,EAAE,mBAAmB,EAAE,MAAM,iBAAiB,CAAC;AAG3D,OAAO,EACL,UAAU,EACV,gBAAgB,EAChB,gBAAgB,GACjB,MAAM,iBAAiB,CAAC;AAGzB,OAAO,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAC3D,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AACzD,OAAO,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAC3D,OAAO,EAAE,uBAAuB,EAAE,MAAM,uBAAuB,CAAC;AAChE,OAAO,EAAE,oBAAoB,EAAE,MAAM,2BAA2B,CAAC;AACjE,OAAO,EAAE,kBAAkB,EAAE,MAAM,qBAAqB,CAAC;AACzD,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAGvD,OAAO,EAAE,oBAAoB,EAAE,qBAAqB,EAAE,MAAM,UAAU,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,YAAY,EACV,YAAY,EACZ,QAAQ,EACR,UAAU,EACV,UAAU,EACV,WAAW,EACX,gBAAgB,EAChB,iBAAiB,EACjB,kBAAkB,EAClB,iBAAiB,EACjB,kBAAkB,EAClB,wBAAwB,EACxB,qBAAqB,EACrB,eAAe,EACf,gBAAgB,EAChB,aAAa,GACd,MAAM,SAAS,CAAC;AACjB,YAAY,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AAG7D,OAAO,EACL,aAAa,EACb,eAAe,EACf,UAAU,EACV,cAAc,EACd,6BAA6B,EAC7B,yBAAyB,EACzB,sBAAsB,EACtB,kBAAkB,EAClB,gCAAgC,EAChC,6BAA6B,EAC7B,2BAA2B,EAC3B,yCAAyC,EACzC,6BAA6B,EAC7B,mCAAmC,EACnC,WAAW,EACX,uBAAuB,EACvB,eAAe,EACf,qBAAqB,EACrB,qBAAqB,EACrB,gBAAgB,EAChB,+BAA+B,EAC/B,oCAAoC,GACrC,MAAM,WAAW,CAAC;AACnB,YAAY,EACV,SAAS,EACT,wBAAwB,EACxB,yBAAyB,EACzB,oBAAoB,GACrB,MAAM,WAAW,CAAC;AAGnB,OAAO,EACL,WAAW,EACX,aAAa,EACb,iBAAiB,EACjB,WAAW,EACX,mBAAmB,EACnB,aAAa,GACd,MAAM,eAAe,CAAC;AAGvB,OAAO,EACL,WAAW,EACX,0BAA0B,GAC3B,MAAM,iBAAiB,CAAC;AACzB,YAAY,EAAE,mBAAmB,EAAE,MAAM,iBAAiB,CAAC;AAG3D,OAAO,EACL,UAAU,EACV,gBAAgB,EAChB,gBAAgB,GACjB,MAAM,iBAAiB,CAAC;AAGzB,OAAO,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAC3D,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AACzD,OAAO,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAC3D,OAAO,EAAE,uBAAuB,EAAE,MAAM,uBAAuB,CAAC;AAChE,OAAO,EAAE,oBAAoB,EAAE,MAAM,2BAA2B,CAAC;AACjE,OAAO,EAAE,kBAAkB,EAAE,MAAM,qBAAqB,CAAC;AACzD,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAGvD,OAAO,EAAE,oBAAoB,EAAE,qBAAqB,EAAE,MAAM,UAAU,CAAC"}
package/dist/index.js CHANGED
@@ -1,19 +1,30 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.USAGE_ALERT_THRESHOLD = exports.shouldSendUsageAlert = exports.checkWatchLimit = exports.checkTeamSeatLimit = exports.checkResolutionLimit = exports.checkSocialAccountLimit = exports.checkProjectLimit = exports.checkStreamLimit = exports.checkStorageQuota = exports.incrementRenders = exports.checkRenderLimit = exports.checkUsage = exports.extractVertexUsageMetadata = exports.recordUsage = exports.formatCredits = exports.isResolutionAllowed = exports.formatBytes = exports.normalizePlanName = exports.getPlanLimits = exports.PLAN_LIMITS = exports.creditsToMicrodollars = exports.microdollarsToCredits = exports.MICRODOLLARS_PER_CREDIT = exports.COST_MARKUP = exports.estimateBilledMediaCostMicrodollars = exports.estimateMediaCostMicrodollars = exports.MEDIA_RATE_PRICING = exports.calculateCostMicrodollars = exports.getPricing = exports.DEFAULT_PRICING = exports.MODEL_PRICING = void 0;
3
+ exports.USAGE_ALERT_THRESHOLD = exports.shouldSendUsageAlert = exports.checkWatchLimit = exports.checkTeamSeatLimit = exports.checkResolutionLimit = exports.checkSocialAccountLimit = exports.checkProjectLimit = exports.checkStreamLimit = exports.checkStorageQuota = exports.incrementRenders = exports.checkRenderLimit = exports.checkUsage = exports.extractVertexUsageMetadata = exports.recordUsage = exports.formatCredits = exports.isResolutionAllowed = exports.formatBytes = exports.normalizePlanName = exports.getPlanLimits = exports.PLAN_LIMITS = exports.TRENDY_VOICE_MICRODOLLARS_PER_MINUTE = exports.TRENDY_VOICE_CREDITS_PER_MINUTE = exports.TRENDY_VOICE_SKU = exports.creditsToMicrodollars = exports.microdollarsToCredits = exports.CREDIT_DECIMALS = exports.MICRODOLLARS_PER_CREDIT = exports.COST_MARKUP = exports.estimateBilledMediaCostMicrodollars = exports.estimateMediaCostMicrodollars = exports.calculateGeminiEmbedding2CostMicrodollars = exports.geminiEmbedding2VideoFrames = exports.GEMINI_EMBEDDING_2_UNIT_RATES = exports.GEMINI_EMBEDDING_2_INPUT_PRICING = exports.MEDIA_RATE_PRICING = exports.calculateBilledCredits = exports.calculateCostMicrodollars = exports.promptTokensIncludeCacheReads = exports.findPricingRow = exports.getPricing = exports.DEFAULT_PRICING = exports.MODEL_PRICING = void 0;
4
4
  // Pricing
5
5
  var pricing_1 = require("./pricing");
6
6
  Object.defineProperty(exports, "MODEL_PRICING", { enumerable: true, get: function () { return pricing_1.MODEL_PRICING; } });
7
7
  Object.defineProperty(exports, "DEFAULT_PRICING", { enumerable: true, get: function () { return pricing_1.DEFAULT_PRICING; } });
8
8
  Object.defineProperty(exports, "getPricing", { enumerable: true, get: function () { return pricing_1.getPricing; } });
9
+ Object.defineProperty(exports, "findPricingRow", { enumerable: true, get: function () { return pricing_1.findPricingRow; } });
10
+ Object.defineProperty(exports, "promptTokensIncludeCacheReads", { enumerable: true, get: function () { return pricing_1.promptTokensIncludeCacheReads; } });
9
11
  Object.defineProperty(exports, "calculateCostMicrodollars", { enumerable: true, get: function () { return pricing_1.calculateCostMicrodollars; } });
12
+ Object.defineProperty(exports, "calculateBilledCredits", { enumerable: true, get: function () { return pricing_1.calculateBilledCredits; } });
10
13
  Object.defineProperty(exports, "MEDIA_RATE_PRICING", { enumerable: true, get: function () { return pricing_1.MEDIA_RATE_PRICING; } });
14
+ Object.defineProperty(exports, "GEMINI_EMBEDDING_2_INPUT_PRICING", { enumerable: true, get: function () { return pricing_1.GEMINI_EMBEDDING_2_INPUT_PRICING; } });
15
+ Object.defineProperty(exports, "GEMINI_EMBEDDING_2_UNIT_RATES", { enumerable: true, get: function () { return pricing_1.GEMINI_EMBEDDING_2_UNIT_RATES; } });
16
+ Object.defineProperty(exports, "geminiEmbedding2VideoFrames", { enumerable: true, get: function () { return pricing_1.geminiEmbedding2VideoFrames; } });
17
+ Object.defineProperty(exports, "calculateGeminiEmbedding2CostMicrodollars", { enumerable: true, get: function () { return pricing_1.calculateGeminiEmbedding2CostMicrodollars; } });
11
18
  Object.defineProperty(exports, "estimateMediaCostMicrodollars", { enumerable: true, get: function () { return pricing_1.estimateMediaCostMicrodollars; } });
12
19
  Object.defineProperty(exports, "estimateBilledMediaCostMicrodollars", { enumerable: true, get: function () { return pricing_1.estimateBilledMediaCostMicrodollars; } });
13
20
  Object.defineProperty(exports, "COST_MARKUP", { enumerable: true, get: function () { return pricing_1.COST_MARKUP; } });
14
21
  Object.defineProperty(exports, "MICRODOLLARS_PER_CREDIT", { enumerable: true, get: function () { return pricing_1.MICRODOLLARS_PER_CREDIT; } });
22
+ Object.defineProperty(exports, "CREDIT_DECIMALS", { enumerable: true, get: function () { return pricing_1.CREDIT_DECIMALS; } });
15
23
  Object.defineProperty(exports, "microdollarsToCredits", { enumerable: true, get: function () { return pricing_1.microdollarsToCredits; } });
16
24
  Object.defineProperty(exports, "creditsToMicrodollars", { enumerable: true, get: function () { return pricing_1.creditsToMicrodollars; } });
25
+ Object.defineProperty(exports, "TRENDY_VOICE_SKU", { enumerable: true, get: function () { return pricing_1.TRENDY_VOICE_SKU; } });
26
+ Object.defineProperty(exports, "TRENDY_VOICE_CREDITS_PER_MINUTE", { enumerable: true, get: function () { return pricing_1.TRENDY_VOICE_CREDITS_PER_MINUTE; } });
27
+ Object.defineProperty(exports, "TRENDY_VOICE_MICRODOLLARS_PER_MINUTE", { enumerable: true, get: function () { return pricing_1.TRENDY_VOICE_MICRODOLLARS_PER_MINUTE; } });
17
28
  // Plan limits
18
29
  var plan_limits_1 = require("./plan-limits");
19
30
  Object.defineProperty(exports, "PLAN_LIMITS", { enumerable: true, get: function () { return plan_limits_1.PLAN_LIMITS; } });
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;AAoBA,UAAU;AACV,qCAYmB;AAXjB,wGAAA,aAAa,OAAA;AACb,0GAAA,eAAe,OAAA;AACf,qGAAA,UAAU,OAAA;AACV,oHAAA,yBAAyB,OAAA;AACzB,6GAAA,kBAAkB,OAAA;AAClB,wHAAA,6BAA6B,OAAA;AAC7B,8HAAA,mCAAmC,OAAA;AACnC,sGAAA,WAAW,OAAA;AACX,kHAAA,uBAAuB,OAAA;AACvB,gHAAA,qBAAqB,OAAA;AACrB,gHAAA,qBAAqB,OAAA;AAIvB,cAAc;AACd,6CAOuB;AANrB,0GAAA,WAAW,OAAA;AACX,4GAAA,aAAa,OAAA;AACb,gHAAA,iBAAiB,OAAA;AACjB,0GAAA,WAAW,OAAA;AACX,kHAAA,mBAAmB,OAAA;AACnB,4GAAA,aAAa,OAAA;AAGf,iBAAiB;AACjB,iDAGyB;AAFvB,4GAAA,WAAW,OAAA;AACX,2HAAA,0BAA0B,OAAA;AAI5B,iBAAiB;AACjB,iDAIyB;AAHvB,2GAAA,UAAU,OAAA;AACV,iHAAA,gBAAgB,OAAA;AAChB,iHAAA,gBAAgB,OAAA;AAGlB,SAAS;AACT,wDAA2D;AAAlD,kHAAA,iBAAiB,OAAA;AAC1B,sDAAyD;AAAhD,gHAAA,gBAAgB,OAAA;AACzB,wDAA2D;AAAlD,kHAAA,iBAAiB,OAAA;AAC1B,sDAAgE;AAAvD,uHAAA,uBAAuB,OAAA;AAChC,8DAAiE;AAAxD,wHAAA,oBAAoB,OAAA;AAC7B,kDAAyD;AAAhD,gHAAA,kBAAkB,OAAA;AAC3B,oDAAuD;AAA9C,8GAAA,eAAe,OAAA;AAExB,SAAS;AACT,mCAAuE;AAA9D,8GAAA,oBAAoB,OAAA;AAAE,+GAAA,qBAAqB,OAAA"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;AAoBA,UAAU;AACV,qCAuBmB;AAtBjB,wGAAA,aAAa,OAAA;AACb,0GAAA,eAAe,OAAA;AACf,qGAAA,UAAU,OAAA;AACV,yGAAA,cAAc,OAAA;AACd,wHAAA,6BAA6B,OAAA;AAC7B,oHAAA,yBAAyB,OAAA;AACzB,iHAAA,sBAAsB,OAAA;AACtB,6GAAA,kBAAkB,OAAA;AAClB,2HAAA,gCAAgC,OAAA;AAChC,wHAAA,6BAA6B,OAAA;AAC7B,sHAAA,2BAA2B,OAAA;AAC3B,oIAAA,yCAAyC,OAAA;AACzC,wHAAA,6BAA6B,OAAA;AAC7B,8HAAA,mCAAmC,OAAA;AACnC,sGAAA,WAAW,OAAA;AACX,kHAAA,uBAAuB,OAAA;AACvB,0GAAA,eAAe,OAAA;AACf,gHAAA,qBAAqB,OAAA;AACrB,gHAAA,qBAAqB,OAAA;AACrB,2GAAA,gBAAgB,OAAA;AAChB,0HAAA,+BAA+B,OAAA;AAC/B,+HAAA,oCAAoC,OAAA;AAStC,cAAc;AACd,6CAOuB;AANrB,0GAAA,WAAW,OAAA;AACX,4GAAA,aAAa,OAAA;AACb,gHAAA,iBAAiB,OAAA;AACjB,0GAAA,WAAW,OAAA;AACX,kHAAA,mBAAmB,OAAA;AACnB,4GAAA,aAAa,OAAA;AAGf,iBAAiB;AACjB,iDAGyB;AAFvB,4GAAA,WAAW,OAAA;AACX,2HAAA,0BAA0B,OAAA;AAI5B,iBAAiB;AACjB,iDAIyB;AAHvB,2GAAA,UAAU,OAAA;AACV,iHAAA,gBAAgB,OAAA;AAChB,iHAAA,gBAAgB,OAAA;AAGlB,SAAS;AACT,wDAA2D;AAAlD,kHAAA,iBAAiB,OAAA;AAC1B,sDAAyD;AAAhD,gHAAA,gBAAgB,OAAA;AACzB,wDAA2D;AAAlD,kHAAA,iBAAiB,OAAA;AAC1B,sDAAgE;AAAvD,uHAAA,uBAAuB,OAAA;AAChC,8DAAiE;AAAxD,wHAAA,oBAAoB,OAAA;AAC7B,kDAAyD;AAAhD,gHAAA,kBAAkB,OAAA;AAC3B,oDAAuD;AAA9C,8GAAA,eAAe,OAAA;AAExB,SAAS;AACT,mCAAuE;AAA9D,8GAAA,oBAAoB,OAAA;AAAE,+GAAA,qBAAqB,OAAA"}