Skip to content

Commit b302472

Browse files
committed
wip: zen
1 parent 718df08 commit b302472

File tree

2 files changed

+165
-0
lines changed

2 files changed

+165
-0
lines changed
Lines changed: 91 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,91 @@
1+
#!/usr/bin/env bun
2+
import { $ } from "bun"
3+
4+
async function done() {
5+
await $`bun script/onboard-zen-black.ts wrk_01KBDW4XQQA03M9WRVG13WC4KV [email protected]`
6+
await $`bun script/onboard-zen-black.ts wrk_01KB09PA9KRGNWQC6SAPDK72FC [email protected]`
7+
await $`bun script/onboard-zen-black.ts wrk_01KD47Y1TV6H25TH4FE8J9Z96C [email protected]`
8+
await $`bun script/onboard-zen-black.ts wrk_01K5PBX9DTMVWYWSQN825PX5JD [email protected]`
9+
await $`bun script/onboard-zen-black.ts wrk_01KEAJ5W695YB7QXYBF17JGE3K [email protected]`
10+
await $`bun script/onboard-zen-black.ts wrk_01KDQ5A7D4E1XZ67NKTWX6PQQY [email protected]`
11+
await $`bun script/onboard-zen-black.ts wrk_01K6VZ9R6Q85G86KP99WJJFNCS [email protected]`
12+
await $`bun script/onboard-zen-black.ts wrk_01KD75TGR57YJPSFWDBZ4WVTMW [email protected]`
13+
await $`bun script/onboard-zen-black.ts wrk_01KDRG9HBMQCXPPV5TTMPKMKR2 [email protected]`
14+
await $`bun script/onboard-zen-black.ts wrk_01K6KZNC7FHJ3RF989Y22EFFK2 [email protected]`
15+
await $`bun script/onboard-zen-black.ts wrk_01K59FHPX0GR51YQG2CT9DAF5M [email protected]`
16+
await $`bun script/onboard-zen-black.ts wrk_01KEAJAFSJ3SA52EENSGGWY7K3 [email protected]`
17+
await $`bun script/onboard-zen-black.ts wrk_01K5M7F0S3G93MJNBG6DG8THAE [email protected]`
18+
await $`bun script/onboard-zen-black.ts wrk_01K4CPKRNP4CWK2D5BYKMMKTXQ [email protected]`
19+
await $`bun script/onboard-zen-black.ts wrk_01K5GYKMHJG6G172D944MCDJ70 [email protected]`
20+
await $`bun script/onboard-zen-black.ts wrk_01KD4Q2FAT1465AYQPY03R82JG [email protected]`
21+
await $`bun script/onboard-zen-black.ts wrk_01K5HFPPJ67MZSEE8AAMHECR1Q [email protected]`
22+
await $`bun script/onboard-zen-black.ts wrk_01KAE92ACV5AEQ2QJ173W26CTF [email protected]`
23+
await $`bun script/onboard-zen-black.ts wrk_01KEAJ4BZKCFKWDTJN95X8BBSN [email protected]`
24+
await $`bun script/onboard-zen-black.ts wrk_01KEAFNZA1T20QY91FZPBWM2ED [email protected]`
25+
await $`bun script/onboard-zen-black.ts wrk_01KD85CQXVH5G390J8Z69NQ01G [email protected]`
26+
await $`bun script/onboard-zen-black.ts wrk_01KE7XH09S7KJ5F6SW9QQ4YZQ3 [email protected]`
27+
await $`bun script/onboard-zen-black.ts wrk_01KDGJQSKFXMW9YWWB2SDW4D2C [email protected]`
28+
await $`bun script/onboard-zen-black.ts wrk_01KCCP5C49JZS4HSRBX7XJX25P [email protected]`
29+
await $`bun script/onboard-zen-black.ts wrk_01K4DHK0YHZ40B7QWA5T9QD5CM [email protected]`
30+
await $`bun script/onboard-zen-black.ts wrk_01K59KJHXBJYJ5D7NMKVEBQK12 [email protected]`
31+
await $`bun script/onboard-zen-black.ts wrk_01K58NJXNDYCMN6MZAH5GBA2V9 [email protected]`
32+
await $`bun script/onboard-zen-black.ts wrk_01K6AR1ZET89H8NB691FQ2C2VB [email protected]`
33+
await $`bun script/onboard-zen-black.ts wrk_01K6ZMFSTFYWPACV2QNFAVBBVC [email protected]`
34+
await $`bun script/onboard-zen-black.ts wrk_01K5HX50C744YRF5MFJVCQ5784 [email protected]`
35+
await $`bun script/onboard-zen-black.ts wrk_01K5AXKDXK6P705ZE1RGJ54DJG [email protected]`
36+
await $`bun script/onboard-zen-black.ts wrk_01KEAJ5PXJDMAW7VDB223J6VED [email protected]`
37+
await $`bun script/onboard-zen-black.ts wrk_01KC2QDEGSR07GZ18A5FHV68K4 [email protected]`
38+
await $`bun script/onboard-zen-black.ts wrk_01KEAE40B947397VKVY9JZPQZZ [email protected]`
39+
await $`bun script/onboard-zen-black.ts wrk_01KEAHWCP8710GEAVF8NGY2B8S [email protected]`
40+
await $`bun script/onboard-zen-black.ts wrk_01KEAHW437Q6SQZBVXS480SVAX [email protected]`
41+
await $`bun script/onboard-zen-black.ts wrk_01KEAE1HJ37GY9K8YTHHE0WBDS [email protected]`
42+
await $`bun script/onboard-zen-black.ts wrk_01K48XKJA60YH8YNSHR1TAV8JB [email protected]`
43+
await $`bun script/onboard-zen-black.ts wrk_01KDP0E4FG325PFK0HTC9BBPNK [email protected]`
44+
await $`bun script/onboard-zen-black.ts wrk_01K7ARJD3S9DS84RXKGK7RNJ1G [email protected]`
45+
await $`bun script/onboard-zen-black.ts wrk_01KEBZKFKGMXWDYHYQPE5HV2DK [email protected]`
46+
await $`bun script/onboard-zen-black.ts wrk_01K4PNZCG496059QVVN2W8BKH5 [email protected]`
47+
await $`bun script/onboard-zen-black.ts wrk_01K4CH29P0HKTRPNWFX6V3K4ZK [email protected]`
48+
await $`bun script/onboard-zen-black.ts wrk_01K971RFTA2H8A181F7GV0M2KG [email protected]`
49+
await $`bun script/onboard-zen-black.ts wrk_01KAWXVSWGT7M0FZKRK7J96C40 [email protected]`
50+
await $`bun script/onboard-zen-black.ts wrk_01KEBAHA1C5MD5W2N8RYEVH8B8 [email protected]`
51+
await $`bun script/onboard-zen-black.ts wrk_01K57NR05JNBV9FYWN8V4PE74X [email protected]`
52+
await $`bun script/onboard-zen-black.ts wrk_01KEAEDXMYF8FFDRJS3129BHXZ [email protected]`
53+
await $`bun script/onboard-zen-black.ts wrk_01KEAJN0Q972162MCAKN5MYXV0 [email protected]`
54+
await $`bun script/onboard-zen-black.ts wrk_01KDWKNN6JVH49CNQF7Y6T77TS [email protected]`
55+
await $`bun script/onboard-zen-black.ts wrk_01KEANMCW8H8MX7NXN9QRBC2JY [email protected]`
56+
await $`bun script/onboard-zen-black.ts wrk_01K9DJ10EJ1JQ8QE83G2BZTCAT [email protected]`
57+
await $`bun script/onboard-zen-black.ts wrk_01KEB67HYXGHSA19KKYQWANWYC [email protected]`
58+
await $`bun script/onboard-zen-black.ts wrk_01KBMQ66RB7RYY4MBE69MYQY0J [email protected]`
59+
await $`bun script/onboard-zen-black.ts wrk_01KECJH7FG2GHFK1J1MF73W63R [email protected]`
60+
await $`bun script/onboard-zen-black.ts wrk_01KAFPM94SV343J8SS8ESEHMYG [email protected]`
61+
await $`bun script/onboard-zen-black.ts wrk_01KBDKY5JHT84Y3K8G9Q4MGAX7 [email protected]`
62+
await $`bun script/onboard-zen-black.ts wrk_01KEAKBCAKKR33T3F0A33EP9W6 [email protected]`
63+
await $`bun script/onboard-zen-black.ts wrk_01KEANHV7AEMFP5RY6KWXCA1T6 [email protected]`
64+
await $`bun script/onboard-zen-black.ts wrk_01KEARQYY8JRY2HSYX7BR5ATMY [email protected]`
65+
await $`bun script/onboard-zen-black.ts wrk_01K9BT5FEF19STHX5HBQGDXAD4 [email protected]`
66+
await $`bun script/onboard-zen-black.ts wrk_01K5814NN9C8MCQ3W9269GQPX1 [email protected]`
67+
await $`bun script/onboard-zen-black.ts wrk_01KBR4P09M7524ME1Z250WM2XT [email protected]`
68+
await $`bun script/onboard-zen-black.ts wrk_01K6JVB4J0QG979YD790XPZSSX [email protected]`
69+
await $`bun script/onboard-zen-black.ts wrk_01KA94MDGKNTAKB6P0B3RRCVR0 [email protected]`
70+
await $`bun script/onboard-zen-black.ts wrk_01KEB55FEX2ZTK13PYK3YEJSBE [email protected]`
71+
await $`bun script/onboard-zen-black.ts wrk_01K58YHW99X2T2EDPM2ZNAWM97 [email protected]`
72+
await $`bun script/onboard-zen-black.ts wrk_01KEAJKB8BSAF3FQJH1MD6J1WV [email protected]`
73+
await $`bun script/onboard-zen-black.ts wrk_01KCS98AJ0SJG6SQY845D0A7XQ [email protected]`
74+
await $`bun script/onboard-zen-black.ts wrk_01KDC8ZCR2021GEMP4G0AA4D4M [email protected]`
75+
await $`bun script/onboard-zen-black.ts wrk_01K59G802MEFN7AWRPM2QMP4PC [email protected]`
76+
await $`bun script/onboard-zen-black.ts wrk_01K4EVHWGY50JXFEAM8FT12B17 [email protected]`
77+
await $`bun script/onboard-zen-black.ts wrk_01KEA9RZT7A5K55G8EQQ2V1EWF [email protected]`
78+
await $`bun script/onboard-zen-black.ts wrk_01K63V94DSDX76Y21PG98M0GV1 [email protected]`
79+
await $`bun script/onboard-zen-black.ts wrk_01KDNXT802CFWR10XSK35PWVG9 [email protected]`
80+
await $`bun script/onboard-zen-black.ts wrk_01K7M79KFFD63S177YPY7Z1QTF [email protected]`
81+
await $`bun script/onboard-zen-black.ts wrk_01KEC9ARJZ12X6CW23HKHNMTVP [email protected]`
82+
await $`bun script/onboard-zen-black.ts wrk_01K4M9Q5NXP6MT29W1186V0HPK [email protected]`
83+
await $`bun script/onboard-zen-black.ts wrk_01K6JKWYXB7KNKWFWXFAV0PD3S [email protected]`
84+
await $`bun script/onboard-zen-black.ts wrk_01K4GEQTAHZR28B76DG6F2QX2G [email protected]`
85+
await $`bun script/onboard-zen-black.ts wrk_01KEAK4F15VVPHQH8MSY0GR7XP [email protected]`
86+
await $`bun script/onboard-zen-black.ts wrk_01K6DSE6F44YNE7AFA4PTF8JA0 [email protected]`
87+
await $`bun script/onboard-zen-black.ts wrk_01KEAK10BVRFVN1WSXYMR3DQJM [email protected]`
88+
await $`bun script/onboard-zen-black.ts wrk_01KEAE0JEXTVCWEKKB7MAGP37W [email protected]`
89+
await $`bun script/onboard-zen-black.ts wrk_01K7Q7J930ZS4P8088NBW0QTRY [email protected]` // dylan.shade@hey.com
90+
await $`bun script/onboard-zen-black.ts wrk_01KC22GWVQXVJ15B2K88YNVGJJ [email protected]` // mail@maxstevens.nl
91+
}

packages/console/core/script/lookup-user.ts

Lines changed: 74 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -254,6 +254,80 @@ function getSubscriptionStatus(row: {
254254
}
255255
}
256256

257+
function formatMicroCents(value: number | null | undefined) {
258+
if (value === null || value === undefined) return null
259+
return `$${(value / 100000000).toFixed(2)}`
260+
}
261+
262+
function formatDate(value: Date | null | undefined) {
263+
if (!value) return null
264+
return value.toISOString().split("T")[0]
265+
}
266+
267+
function formatMonthlyUsage(usage: number | null | undefined, limit: number | null | undefined) {
268+
const usageText = formatMicroCents(usage) ?? "$0.00"
269+
if (limit === null || limit === undefined) return `${usageText} / no limit`
270+
return `${usageText} / $${limit.toFixed(2)}`
271+
}
272+
273+
function formatRetryTime(seconds: number) {
274+
const days = Math.floor(seconds / 86400)
275+
if (days >= 1) return `${days} day${days > 1 ? "s" : ""}`
276+
const hours = Math.floor(seconds / 3600)
277+
const minutes = Math.ceil((seconds % 3600) / 60)
278+
if (hours >= 1) return `${hours}hr ${minutes}min`
279+
return `${minutes}min`
280+
}
281+
282+
function getSubscriptionStatus(row: {
283+
timeSubscriptionCreated: Date | null
284+
fixedUsage: number | null
285+
rollingUsage: number | null
286+
timeFixedUpdated: Date | null
287+
timeRollingUpdated: Date | null
288+
}) {
289+
if (!row.timeSubscriptionCreated) {
290+
return { weekly: null, rolling: null, rateLimited: null, retryIn: null }
291+
}
292+
293+
const black = BlackData.get()
294+
const now = new Date()
295+
const week = getWeekBounds(now)
296+
297+
const fixedLimit = black.fixedLimit ? centsToMicroCents(black.fixedLimit * 100) : null
298+
const rollingLimit = black.rollingLimit ? centsToMicroCents(black.rollingLimit * 100) : null
299+
const rollingWindowMs = (black.rollingWindow ?? 5) * 3600 * 1000
300+
301+
// Calculate current weekly usage (reset if outside current week)
302+
const currentWeekly =
303+
row.fixedUsage && row.timeFixedUpdated && row.timeFixedUpdated >= week.start ? row.fixedUsage : 0
304+
305+
// Calculate current rolling usage
306+
const windowStart = new Date(now.getTime() - rollingWindowMs)
307+
const currentRolling =
308+
row.rollingUsage && row.timeRollingUpdated && row.timeRollingUpdated >= windowStart ? row.rollingUsage : 0
309+
310+
// Check rate limiting
311+
const isWeeklyLimited = fixedLimit !== null && currentWeekly >= fixedLimit
312+
const isRollingLimited = rollingLimit !== null && currentRolling >= rollingLimit
313+
314+
let retryIn: string | null = null
315+
if (isWeeklyLimited) {
316+
const retryAfter = Math.ceil((week.end.getTime() - now.getTime()) / 1000)
317+
retryIn = formatRetryTime(retryAfter)
318+
} else if (isRollingLimited && row.timeRollingUpdated) {
319+
const retryAfter = Math.ceil((row.timeRollingUpdated.getTime() + rollingWindowMs - now.getTime()) / 1000)
320+
retryIn = formatRetryTime(retryAfter)
321+
}
322+
323+
return {
324+
weekly: fixedLimit !== null ? `${formatMicroCents(currentWeekly)} / $${black.fixedLimit}` : null,
325+
rolling: rollingLimit !== null ? `${formatMicroCents(currentRolling)} / $${black.rollingLimit}` : null,
326+
rateLimited: isWeeklyLimited || isRollingLimited ? "yes" : "no",
327+
retryIn,
328+
}
329+
}
330+
257331
function printHeader(title: string) {
258332
console.log()
259333
console.log("─".repeat(title.length))

0 commit comments

Comments
 (0)