hacklab 0.22.3 → 26.921.2
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.
- package/README.md +39 -415
- package/dist/index.js +317 -23
- package/package.json +22 -40
- package/LICENSE +0 -21
- package/dist/agent-handoff.d.ts +0 -51
- package/dist/agent-handoff.d.ts.map +0 -1
- package/dist/agent-handoff.js +0 -91
- package/dist/agent-handoff.js.map +0 -1
- package/dist/api-client.d.ts +0 -18
- package/dist/api-client.d.ts.map +0 -1
- package/dist/api-client.js +0 -40
- package/dist/api-client.js.map +0 -1
- package/dist/belt.d.ts +0 -25
- package/dist/belt.d.ts.map +0 -1
- package/dist/belt.js +0 -113
- package/dist/belt.js.map +0 -1
- package/dist/card.d.ts +0 -66
- package/dist/card.d.ts.map +0 -1
- package/dist/card.js +0 -151
- package/dist/card.js.map +0 -1
- package/dist/cli.d.ts +0 -2
- package/dist/cli.d.ts.map +0 -1
- package/dist/cli.js +0 -238
- package/dist/cli.js.map +0 -1
- package/dist/commands/book.d.ts +0 -14
- package/dist/commands/book.d.ts.map +0 -1
- package/dist/commands/book.js +0 -90
- package/dist/commands/book.js.map +0 -1
- package/dist/commands/chat.d.ts +0 -36
- package/dist/commands/chat.d.ts.map +0 -1
- package/dist/commands/chat.js +0 -642
- package/dist/commands/chat.js.map +0 -1
- package/dist/commands/config.d.ts +0 -2
- package/dist/commands/config.d.ts.map +0 -1
- package/dist/commands/config.js +0 -84
- package/dist/commands/config.js.map +0 -1
- package/dist/commands/daemon.d.ts +0 -19
- package/dist/commands/daemon.d.ts.map +0 -1
- package/dist/commands/daemon.js +0 -72
- package/dist/commands/daemon.js.map +0 -1
- package/dist/commands/drop.d.ts +0 -12
- package/dist/commands/drop.d.ts.map +0 -1
- package/dist/commands/drop.js +0 -103
- package/dist/commands/drop.js.map +0 -1
- package/dist/commands/drops.d.ts +0 -9
- package/dist/commands/drops.d.ts.map +0 -1
- package/dist/commands/drops.js +0 -96
- package/dist/commands/drops.js.map +0 -1
- package/dist/commands/essay.d.ts +0 -40
- package/dist/commands/essay.d.ts.map +0 -1
- package/dist/commands/essay.js +0 -651
- package/dist/commands/essay.js.map +0 -1
- package/dist/commands/hackathon.d.ts +0 -2
- package/dist/commands/hackathon.d.ts.map +0 -1
- package/dist/commands/hackathon.js +0 -893
- package/dist/commands/hackathon.js.map +0 -1
- package/dist/commands/hacker.d.ts +0 -2
- package/dist/commands/hacker.d.ts.map +0 -1
- package/dist/commands/hacker.js +0 -87
- package/dist/commands/hacker.js.map +0 -1
- package/dist/commands/jobs.d.ts +0 -18
- package/dist/commands/jobs.d.ts.map +0 -1
- package/dist/commands/jobs.js +0 -138
- package/dist/commands/jobs.js.map +0 -1
- package/dist/commands/keys.d.ts +0 -2
- package/dist/commands/keys.d.ts.map +0 -1
- package/dist/commands/keys.js +0 -138
- package/dist/commands/keys.js.map +0 -1
- package/dist/commands/login.d.ts +0 -83
- package/dist/commands/login.d.ts.map +0 -1
- package/dist/commands/login.js +0 -236
- package/dist/commands/login.js.map +0 -1
- package/dist/commands/logout.d.ts +0 -2
- package/dist/commands/logout.d.ts.map +0 -1
- package/dist/commands/logout.js +0 -22
- package/dist/commands/logout.js.map +0 -1
- package/dist/commands/org-jobs.d.ts +0 -50
- package/dist/commands/org-jobs.d.ts.map +0 -1
- package/dist/commands/org-jobs.js +0 -383
- package/dist/commands/org-jobs.js.map +0 -1
- package/dist/commands/org.d.ts +0 -67
- package/dist/commands/org.d.ts.map +0 -1
- package/dist/commands/org.js +0 -1244
- package/dist/commands/org.js.map +0 -1
- package/dist/commands/ping.d.ts +0 -2
- package/dist/commands/ping.d.ts.map +0 -1
- package/dist/commands/ping.js +0 -50
- package/dist/commands/ping.js.map +0 -1
- package/dist/commands/profile.d.ts +0 -72
- package/dist/commands/profile.d.ts.map +0 -1
- package/dist/commands/profile.js +0 -672
- package/dist/commands/profile.js.map +0 -1
- package/dist/commands/project.d.ts +0 -2
- package/dist/commands/project.d.ts.map +0 -1
- package/dist/commands/project.js +0 -583
- package/dist/commands/project.js.map +0 -1
- package/dist/commands/referral.d.ts +0 -6
- package/dist/commands/referral.d.ts.map +0 -1
- package/dist/commands/referral.js +0 -93
- package/dist/commands/referral.js.map +0 -1
- package/dist/commands/rtfm.d.ts +0 -9
- package/dist/commands/rtfm.d.ts.map +0 -1
- package/dist/commands/rtfm.js +0 -114
- package/dist/commands/rtfm.js.map +0 -1
- package/dist/commands/scan.d.ts +0 -13
- package/dist/commands/scan.d.ts.map +0 -1
- package/dist/commands/scan.js +0 -286
- package/dist/commands/scan.js.map +0 -1
- package/dist/commands/scout.d.ts +0 -18
- package/dist/commands/scout.d.ts.map +0 -1
- package/dist/commands/scout.js +0 -232
- package/dist/commands/scout.js.map +0 -1
- package/dist/commands/setup-rail.d.ts +0 -58
- package/dist/commands/setup-rail.d.ts.map +0 -1
- package/dist/commands/setup-rail.js +0 -135
- package/dist/commands/setup-rail.js.map +0 -1
- package/dist/commands/setup.d.ts +0 -29
- package/dist/commands/setup.d.ts.map +0 -1
- package/dist/commands/setup.js +0 -442
- package/dist/commands/setup.js.map +0 -1
- package/dist/commands/sync.d.ts +0 -9
- package/dist/commands/sync.d.ts.map +0 -1
- package/dist/commands/sync.js +0 -345
- package/dist/commands/sync.js.map +0 -1
- package/dist/commands/update.d.ts +0 -2
- package/dist/commands/update.d.ts.map +0 -1
- package/dist/commands/update.js +0 -92
- package/dist/commands/update.js.map +0 -1
- package/dist/commands/whoami.d.ts +0 -2
- package/dist/commands/whoami.d.ts.map +0 -1
- package/dist/commands/whoami.js +0 -41
- package/dist/commands/whoami.js.map +0 -1
- package/dist/config.d.ts +0 -78
- package/dist/config.d.ts.map +0 -1
- package/dist/config.js +0 -93
- package/dist/config.js.map +0 -1
- package/dist/daily-sync.d.ts +0 -150
- package/dist/daily-sync.d.ts.map +0 -1
- package/dist/daily-sync.js +0 -665
- package/dist/daily-sync.js.map +0 -1
- package/dist/dossier.d.ts +0 -73
- package/dist/dossier.d.ts.map +0 -1
- package/dist/dossier.js +0 -141
- package/dist/dossier.js.map +0 -1
- package/dist/field-normalize.d.ts +0 -4
- package/dist/field-normalize.d.ts.map +0 -1
- package/dist/field-normalize.js +0 -8
- package/dist/field-normalize.js.map +0 -1
- package/dist/index.d.ts +0 -3
- package/dist/index.d.ts.map +0 -1
- package/dist/index.js.map +0 -1
- package/dist/job-fields.d.ts +0 -47
- package/dist/job-fields.d.ts.map +0 -1
- package/dist/job-fields.js +0 -148
- package/dist/job-fields.js.map +0 -1
- package/dist/machine.d.ts +0 -15
- package/dist/machine.d.ts.map +0 -1
- package/dist/machine.js +0 -64
- package/dist/machine.js.map +0 -1
- package/dist/org-fields.d.ts +0 -57
- package/dist/org-fields.d.ts.map +0 -1
- package/dist/org-fields.js +0 -167
- package/dist/org-fields.js.map +0 -1
- package/dist/posthog.d.ts +0 -38
- package/dist/posthog.d.ts.map +0 -1
- package/dist/posthog.js +0 -224
- package/dist/posthog.js.map +0 -1
- package/dist/project-fields.d.ts +0 -40
- package/dist/project-fields.d.ts.map +0 -1
- package/dist/project-fields.js +0 -79
- package/dist/project-fields.js.map +0 -1
- package/dist/prompt-consent.d.ts +0 -73
- package/dist/prompt-consent.d.ts.map +0 -1
- package/dist/prompt-consent.js +0 -191
- package/dist/prompt-consent.js.map +0 -1
- package/dist/prompt-stats.d.ts +0 -226
- package/dist/prompt-stats.d.ts.map +0 -1
- package/dist/prompt-stats.js +0 -561
- package/dist/prompt-stats.js.map +0 -1
- package/dist/referral.d.ts +0 -14
- package/dist/referral.d.ts.map +0 -1
- package/dist/referral.js +0 -28
- package/dist/referral.js.map +0 -1
- package/dist/registry.d.ts +0 -15
- package/dist/registry.d.ts.map +0 -1
- package/dist/registry.js +0 -180
- package/dist/registry.js.map +0 -1
- package/dist/resolve-command.d.ts +0 -20
- package/dist/resolve-command.d.ts.map +0 -1
- package/dist/resolve-command.js +0 -21
- package/dist/resolve-command.js.map +0 -1
- package/dist/scanners/antigravity.d.ts +0 -41
- package/dist/scanners/antigravity.d.ts.map +0 -1
- package/dist/scanners/antigravity.js +0 -210
- package/dist/scanners/antigravity.js.map +0 -1
- package/dist/scanners/github-copilot-telemetry.d.ts +0 -23
- package/dist/scanners/github-copilot-telemetry.d.ts.map +0 -1
- package/dist/scanners/github-copilot-telemetry.js +0 -220
- package/dist/scanners/github-copilot-telemetry.js.map +0 -1
- package/dist/scanners/github-copilot.d.ts +0 -68
- package/dist/scanners/github-copilot.d.ts.map +0 -1
- package/dist/scanners/github-copilot.js +0 -262
- package/dist/scanners/github-copilot.js.map +0 -1
- package/dist/scanners/incremental.d.ts +0 -282
- package/dist/scanners/incremental.d.ts.map +0 -1
- package/dist/scanners/incremental.js +0 -788
- package/dist/scanners/incremental.js.map +0 -1
- package/dist/scanners/index.d.ts +0 -116
- package/dist/scanners/index.d.ts.map +0 -1
- package/dist/scanners/index.js +0 -726
- package/dist/scanners/index.js.map +0 -1
- package/dist/scanners/sqlite.d.ts +0 -18
- package/dist/scanners/sqlite.d.ts.map +0 -1
- package/dist/scanners/sqlite.js +0 -63
- package/dist/scanners/sqlite.js.map +0 -1
- package/dist/scanners/util.d.ts +0 -112
- package/dist/scanners/util.d.ts.map +0 -1
- package/dist/scanners/util.js +0 -167
- package/dist/scanners/util.js.map +0 -1
- package/dist/session.d.ts +0 -106
- package/dist/session.d.ts.map +0 -1
- package/dist/session.js +0 -191
- package/dist/session.js.map +0 -1
- package/dist/share-card-colors.d.ts +0 -19
- package/dist/share-card-colors.d.ts.map +0 -1
- package/dist/share-card-colors.js +0 -36
- package/dist/share-card-colors.js.map +0 -1
- package/dist/share-card.d.ts +0 -31
- package/dist/share-card.d.ts.map +0 -1
- package/dist/share-card.js +0 -380
- package/dist/share-card.js.map +0 -1
- package/dist/share.d.ts +0 -17
- package/dist/share.d.ts.map +0 -1
- package/dist/share.js +0 -75
- package/dist/share.js.map +0 -1
- package/dist/sync.d.ts +0 -100
- package/dist/sync.d.ts.map +0 -1
- package/dist/sync.js +0 -304
- package/dist/sync.js.map +0 -1
- package/dist/ui.d.ts +0 -33
- package/dist/ui.d.ts.map +0 -1
- package/dist/ui.js +0 -127
- package/dist/ui.js.map +0 -1
- package/dist/utils/npmGlobal.d.ts +0 -30
- package/dist/utils/npmGlobal.d.ts.map +0 -1
- package/dist/utils/npmGlobal.js +0 -69
- package/dist/utils/npmGlobal.js.map +0 -1
- package/dist/utils/openBrowser.d.ts +0 -14
- package/dist/utils/openBrowser.d.ts.map +0 -1
- package/dist/utils/openBrowser.js +0 -47
- package/dist/utils/openBrowser.js.map +0 -1
- package/dist/utils/updateCheck.d.ts +0 -16
- package/dist/utils/updateCheck.d.ts.map +0 -1
- package/dist/utils/updateCheck.js +0 -111
- package/dist/utils/updateCheck.js.map +0 -1
- package/dist/utils/waitForEnter.d.ts +0 -12
- package/dist/utils/waitForEnter.d.ts.map +0 -1
- package/dist/utils/waitForEnter.js +0 -43
- package/dist/utils/waitForEnter.js.map +0 -1
package/dist/share-card.js
DELETED
|
@@ -1,380 +0,0 @@
|
|
|
1
|
-
import { jsx as _jsx, jsxs as _jsxs } from "satori/jsx/jsx-runtime";
|
|
2
|
-
import { execSync } from 'node:child_process';
|
|
3
|
-
import { mkdir, readFile, writeFile } from 'node:fs/promises';
|
|
4
|
-
import { homedir } from 'node:os';
|
|
5
|
-
import { join } from 'node:path';
|
|
6
|
-
import { Resvg } from '@resvg/resvg-js';
|
|
7
|
-
import satori from 'satori';
|
|
8
|
-
import { shortModelName } from './scanners/util.js';
|
|
9
|
-
import { accentShades } from './share-card-colors.js';
|
|
10
|
-
// ── Design tokens (DESIGN.md) ──────────────────────────────────────────────
|
|
11
|
-
// The accent is the user's belt/rank colour (same palette as the web profile),
|
|
12
|
-
// so the card reads identically to hacklab.so/<handle>. It's the one signal
|
|
13
|
-
// colour: corner brackets, the belt + proficiency bars, and the lit heatmap
|
|
14
|
-
// cells. Everything else is neutral graphite + grey. Numbers + the nametag are
|
|
15
|
-
// Orbitron; every other glyph is JetBrains Mono.
|
|
16
|
-
const PAGE_BG = '#0B0D0C';
|
|
17
|
-
const CARD_BG = '#101513';
|
|
18
|
-
const BORDER = '#1D221F';
|
|
19
|
-
const WHITE = '#FFFFFF';
|
|
20
|
-
const LABEL = '#B4B4B4';
|
|
21
|
-
const LABEL_DIM = '#9A9A9A';
|
|
22
|
-
const FOOTER_FG = '#8A8A8A';
|
|
23
|
-
// Activity heatmap: 26 weeks × 7 days, matching the web profile (column = week,
|
|
24
|
-
// row = day-of-week), so the CLI card and the site read identically.
|
|
25
|
-
const HEAT_COLS = 26;
|
|
26
|
-
const HEAT_ROWS = 7;
|
|
27
|
-
const HEAT_CELL = 14;
|
|
28
|
-
const HEAT_GAP = 3;
|
|
29
|
-
function formatTokens(n) {
|
|
30
|
-
if (n >= 1_000_000_000)
|
|
31
|
-
return `${(n / 1_000_000_000).toFixed(1)}B`;
|
|
32
|
-
if (n >= 1_000_000)
|
|
33
|
-
return `${(n / 1_000_000).toFixed(1)}M`;
|
|
34
|
-
if (n >= 1_000)
|
|
35
|
-
return `${(n / 1_000).toFixed(0)}K`;
|
|
36
|
-
return String(n);
|
|
37
|
-
}
|
|
38
|
-
// ── Heatmap ─────────────────────────────────────────────────────────────────
|
|
39
|
-
// Opacity per intensity tier (0 = empty), matching the web's 18/38/62/100% mix.
|
|
40
|
-
const TIER_OPACITY = [0, 0.18, 0.38, 0.62, 1];
|
|
41
|
-
// Build the HEAT_ROWS × HEAT_COLS grid from real daily usage. Mirrors the web
|
|
42
|
-
// profile's buildRecentWeeks: columns are the latest 26 weeks ending on the
|
|
43
|
-
// Saturday on/after today, rows are Sun→Sat, intensity bucketed vs the window
|
|
44
|
-
// max. matrix[day][week] holds the tier for that date.
|
|
45
|
-
function buildMatrix(daily) {
|
|
46
|
-
const perDay = new Map();
|
|
47
|
-
for (const e of daily) {
|
|
48
|
-
perDay.set(e.date, (perDay.get(e.date) ?? 0) + e.tokens);
|
|
49
|
-
}
|
|
50
|
-
const today = new Date();
|
|
51
|
-
const gridEnd = new Date(today);
|
|
52
|
-
gridEnd.setUTCDate(today.getUTCDate() + (6 - today.getUTCDay()));
|
|
53
|
-
const gridStart = new Date(gridEnd);
|
|
54
|
-
gridStart.setUTCDate(gridEnd.getUTCDate() - HEAT_COLS * 7 + 1);
|
|
55
|
-
const values = [];
|
|
56
|
-
let max = 0;
|
|
57
|
-
for (let d = 0; d < HEAT_ROWS; d++) {
|
|
58
|
-
const row = [];
|
|
59
|
-
for (let w = 0; w < HEAT_COLS; w++) {
|
|
60
|
-
const date = new Date(gridStart);
|
|
61
|
-
date.setUTCDate(gridStart.getUTCDate() + w * 7 + d);
|
|
62
|
-
const v = perDay.get(date.toISOString().slice(0, 10)) ?? 0;
|
|
63
|
-
row.push(v);
|
|
64
|
-
if (v > max)
|
|
65
|
-
max = v;
|
|
66
|
-
}
|
|
67
|
-
values.push(row);
|
|
68
|
-
}
|
|
69
|
-
return values.map((row) => row.map((v) => {
|
|
70
|
-
if (v <= 0 || max === 0)
|
|
71
|
-
return 0;
|
|
72
|
-
const r = v / max;
|
|
73
|
-
return r > 0.75 ? 4 : r > 0.5 ? 3 : r > 0.25 ? 2 : 1;
|
|
74
|
-
}));
|
|
75
|
-
}
|
|
76
|
-
function Heatmap({ matrix, accent }) {
|
|
77
|
-
return (_jsx("div", { style: { display: 'flex', flexDirection: 'column', gap: HEAT_GAP }, children: matrix.map((row) => (
|
|
78
|
-
// biome-ignore lint/correctness/useJsxKeyInIterable: satori has no keys
|
|
79
|
-
_jsx("div", { style: { display: 'flex', gap: HEAT_GAP }, children: row.map((tier) => tier === 0 ? (
|
|
80
|
-
// Empty slot: a tiny centred dot, not a full cell.
|
|
81
|
-
// biome-ignore lint/correctness/useJsxKeyInIterable: satori has no keys
|
|
82
|
-
_jsx("div", { style: {
|
|
83
|
-
display: 'flex',
|
|
84
|
-
width: HEAT_CELL,
|
|
85
|
-
height: HEAT_CELL,
|
|
86
|
-
alignItems: 'center',
|
|
87
|
-
justifyContent: 'center',
|
|
88
|
-
}, children: _jsx("div", { style: {
|
|
89
|
-
display: 'flex',
|
|
90
|
-
width: 3,
|
|
91
|
-
height: 3,
|
|
92
|
-
backgroundColor: accent.alpha(0.35),
|
|
93
|
-
} }) })) : (
|
|
94
|
-
// biome-ignore lint/correctness/useJsxKeyInIterable: satori has no keys
|
|
95
|
-
_jsx("div", { style: {
|
|
96
|
-
display: 'flex',
|
|
97
|
-
width: HEAT_CELL,
|
|
98
|
-
height: HEAT_CELL,
|
|
99
|
-
backgroundColor: accent.alpha(TIER_OPACITY[tier] ?? 0),
|
|
100
|
-
} }))) }))) }));
|
|
101
|
-
}
|
|
102
|
-
// ── Proficiency bar: solid mint fill over a 10%-mint track. ──────────────────
|
|
103
|
-
function Bar({ pct, accent }) {
|
|
104
|
-
const fill = Math.max(0, Math.min(100, pct));
|
|
105
|
-
return (_jsx("div", { style: {
|
|
106
|
-
display: 'flex',
|
|
107
|
-
width: 64,
|
|
108
|
-
height: 6,
|
|
109
|
-
backgroundColor: accent.alpha(0.1),
|
|
110
|
-
}, children: _jsx("div", { style: {
|
|
111
|
-
display: 'flex',
|
|
112
|
-
height: 6,
|
|
113
|
-
width: `${fill}%`,
|
|
114
|
-
backgroundColor: accent.solid,
|
|
115
|
-
} }) }));
|
|
116
|
-
}
|
|
117
|
-
function StatCard({ value, label }) {
|
|
118
|
-
return (_jsxs("div", { style: {
|
|
119
|
-
display: 'flex',
|
|
120
|
-
flexDirection: 'column',
|
|
121
|
-
flex: 1,
|
|
122
|
-
justifyContent: 'center',
|
|
123
|
-
backgroundColor: CARD_BG,
|
|
124
|
-
border: `1px solid ${BORDER}`,
|
|
125
|
-
paddingLeft: 16,
|
|
126
|
-
gap: 20,
|
|
127
|
-
}, children: [_jsx("div", { style: {
|
|
128
|
-
display: 'flex',
|
|
129
|
-
fontFamily: 'Orbitron',
|
|
130
|
-
fontWeight: 700,
|
|
131
|
-
fontSize: 33,
|
|
132
|
-
lineHeight: 1,
|
|
133
|
-
letterSpacing: 0.5,
|
|
134
|
-
color: WHITE,
|
|
135
|
-
}, children: value }), _jsx("div", { style: {
|
|
136
|
-
display: 'flex',
|
|
137
|
-
fontSize: 16,
|
|
138
|
-
letterSpacing: 2,
|
|
139
|
-
color: LABEL,
|
|
140
|
-
}, children: label })] }));
|
|
141
|
-
}
|
|
142
|
-
function PillStat({ value, label }) {
|
|
143
|
-
return (_jsxs("div", { style: {
|
|
144
|
-
display: 'flex',
|
|
145
|
-
flex: 1,
|
|
146
|
-
alignItems: 'center',
|
|
147
|
-
justifyContent: 'space-between',
|
|
148
|
-
backgroundColor: CARD_BG,
|
|
149
|
-
border: `1px solid ${BORDER}`,
|
|
150
|
-
paddingLeft: 17,
|
|
151
|
-
paddingRight: 17,
|
|
152
|
-
}, children: [_jsx("div", { style: {
|
|
153
|
-
display: 'flex',
|
|
154
|
-
fontFamily: 'Orbitron',
|
|
155
|
-
fontWeight: 700,
|
|
156
|
-
fontSize: 20,
|
|
157
|
-
letterSpacing: 0.5,
|
|
158
|
-
color: WHITE,
|
|
159
|
-
}, children: value }), _jsx("div", { style: {
|
|
160
|
-
display: 'flex',
|
|
161
|
-
fontSize: 16,
|
|
162
|
-
letterSpacing: 2,
|
|
163
|
-
color: LABEL,
|
|
164
|
-
}, children: label })] }));
|
|
165
|
-
}
|
|
166
|
-
function CornerBracket({ pos, accent, }) {
|
|
167
|
-
const arm = 11;
|
|
168
|
-
const thick = 2;
|
|
169
|
-
const inset = 0;
|
|
170
|
-
const vert = pos[0] === 't' ? 'top' : 'bottom';
|
|
171
|
-
const horiz = pos[1] === 'l' ? 'left' : 'right';
|
|
172
|
-
return (_jsx("div", { style: {
|
|
173
|
-
display: 'flex',
|
|
174
|
-
position: 'absolute',
|
|
175
|
-
width: arm,
|
|
176
|
-
height: arm,
|
|
177
|
-
[vert]: inset,
|
|
178
|
-
[horiz]: inset,
|
|
179
|
-
[`border${vert === 'top' ? 'Top' : 'Bottom'}`]: `${thick}px solid ${accent.solid}`,
|
|
180
|
-
[`border${horiz === 'left' ? 'Left' : 'Right'}`]: `${thick}px solid ${accent.solid}`,
|
|
181
|
-
} }));
|
|
182
|
-
}
|
|
183
|
-
function ShareCard({ data, matrix, avatar, }) {
|
|
184
|
-
const models = data.models.slice(0, 4);
|
|
185
|
-
const modelMax = models.length > 0 ? (models[0]?.tokens ?? 1) : 1;
|
|
186
|
-
const cost = Math.round(data.estimatedCost).toLocaleString('en-US');
|
|
187
|
-
const progress = Math.max(0, Math.min(100, data.progressPercent));
|
|
188
|
-
const initial = (data.handle[0] ?? '?').toUpperCase();
|
|
189
|
-
const accent = accentShades(data.beltColor);
|
|
190
|
-
const pills = [
|
|
191
|
-
{ value: `${data.longestStreak}D`, label: 'BEST STREAK' },
|
|
192
|
-
...(data.rank ? [{ value: `#${data.rank}`, label: 'RANK' }] : []),
|
|
193
|
-
{ value: String(data.followers ?? 0), label: 'FOLLOWERS' },
|
|
194
|
-
];
|
|
195
|
-
return (_jsxs("div", { style: {
|
|
196
|
-
position: 'relative',
|
|
197
|
-
width: 800,
|
|
198
|
-
height: 500,
|
|
199
|
-
display: 'flex',
|
|
200
|
-
flexDirection: 'column',
|
|
201
|
-
backgroundColor: PAGE_BG,
|
|
202
|
-
padding: 16,
|
|
203
|
-
fontFamily: 'JetBrains Mono',
|
|
204
|
-
color: WHITE,
|
|
205
|
-
}, children: [_jsx(CornerBracket, { pos: 'tl', accent: accent }), _jsx(CornerBracket, { pos: 'tr', accent: accent }), _jsx(CornerBracket, { pos: 'bl', accent: accent }), _jsx(CornerBracket, { pos: 'br', accent: accent }), _jsxs("div", { style: {
|
|
206
|
-
display: 'flex',
|
|
207
|
-
height: 70,
|
|
208
|
-
alignItems: 'center',
|
|
209
|
-
justifyContent: 'space-between',
|
|
210
|
-
backgroundColor: CARD_BG,
|
|
211
|
-
border: `1px solid ${BORDER}`,
|
|
212
|
-
paddingLeft: 12,
|
|
213
|
-
paddingRight: 16,
|
|
214
|
-
}, children: [_jsxs("div", { style: { display: 'flex', alignItems: 'center', gap: 18 }, children: [_jsx("div", { style: {
|
|
215
|
-
display: 'flex',
|
|
216
|
-
width: 46,
|
|
217
|
-
height: 46,
|
|
218
|
-
border: `1px solid ${BORDER}`,
|
|
219
|
-
backgroundColor: '#0C100E',
|
|
220
|
-
alignItems: 'center',
|
|
221
|
-
justifyContent: 'center',
|
|
222
|
-
overflow: 'hidden',
|
|
223
|
-
}, children: avatar ? (
|
|
224
|
-
// biome-ignore lint/performance/noImgElement: satori rasterises to SVG, not a DOM img
|
|
225
|
-
_jsx("img", { src: avatar, width: 46, height: 46, alt: '' })) : (_jsx("div", { style: {
|
|
226
|
-
display: 'flex',
|
|
227
|
-
fontFamily: 'Orbitron',
|
|
228
|
-
fontWeight: 700,
|
|
229
|
-
fontSize: 22,
|
|
230
|
-
color: accent.solid,
|
|
231
|
-
}, children: initial })) }), _jsxs("div", { style: {
|
|
232
|
-
display: 'flex',
|
|
233
|
-
fontFamily: 'Orbitron',
|
|
234
|
-
fontWeight: 700,
|
|
235
|
-
fontSize: 20,
|
|
236
|
-
letterSpacing: 0.5,
|
|
237
|
-
color: WHITE,
|
|
238
|
-
}, children: ["@", data.handle.toUpperCase()] })] }), _jsxs("div", { style: { display: 'flex', alignItems: 'center', gap: 14 }, children: [_jsxs("div", { style: {
|
|
239
|
-
display: 'flex',
|
|
240
|
-
fontFamily: 'Orbitron',
|
|
241
|
-
fontWeight: 700,
|
|
242
|
-
fontSize: 17,
|
|
243
|
-
letterSpacing: 1,
|
|
244
|
-
color: WHITE,
|
|
245
|
-
}, children: ["L", data.level] }), _jsx("div", { style: {
|
|
246
|
-
display: 'flex',
|
|
247
|
-
width: 104,
|
|
248
|
-
height: 8,
|
|
249
|
-
backgroundColor: accent.alpha(0.1),
|
|
250
|
-
}, children: _jsx("div", { style: {
|
|
251
|
-
display: 'flex',
|
|
252
|
-
width: `${progress}%`,
|
|
253
|
-
height: 8,
|
|
254
|
-
backgroundColor: accent.solid,
|
|
255
|
-
} }) })] })] }), _jsxs("div", { style: { display: 'flex', height: 114, gap: 26, marginTop: 18 }, children: [_jsx(StatCard, { value: formatTokens(data.tokensTotal), label: 'TOKENS BURNED' }), _jsx(StatCard, { value: `${data.streak}D`, label: 'STREAK' }), _jsx(StatCard, { value: `$${cost}`, label: 'EST. COST' })] }), _jsxs("div", { style: { display: 'flex', height: 142, gap: 18, marginTop: 18 }, children: [_jsx("div", { style: {
|
|
256
|
-
display: 'flex',
|
|
257
|
-
width: 284,
|
|
258
|
-
flexDirection: 'column',
|
|
259
|
-
justifyContent: 'center',
|
|
260
|
-
backgroundColor: CARD_BG,
|
|
261
|
-
border: `1px solid ${BORDER}`,
|
|
262
|
-
paddingLeft: 17,
|
|
263
|
-
paddingRight: 17,
|
|
264
|
-
gap: 14,
|
|
265
|
-
}, children: models.map((m) => (
|
|
266
|
-
// biome-ignore lint/correctness/useJsxKeyInIterable: satori has no keys
|
|
267
|
-
_jsxs("div", { style: {
|
|
268
|
-
display: 'flex',
|
|
269
|
-
alignItems: 'center',
|
|
270
|
-
justifyContent: 'space-between',
|
|
271
|
-
}, children: [_jsx("div", { style: {
|
|
272
|
-
display: 'flex',
|
|
273
|
-
fontSize: 15,
|
|
274
|
-
letterSpacing: 0.4,
|
|
275
|
-
color: LABEL_DIM,
|
|
276
|
-
}, children: shortModelName(m.name) }), _jsx(Bar, { pct: (m.tokens / modelMax) * 100, accent: accent })] }))) }), _jsx("div", { style: {
|
|
277
|
-
display: 'flex',
|
|
278
|
-
flex: 1,
|
|
279
|
-
alignItems: 'center',
|
|
280
|
-
justifyContent: 'center',
|
|
281
|
-
backgroundColor: CARD_BG,
|
|
282
|
-
border: `1px solid ${BORDER}`,
|
|
283
|
-
}, children: _jsx(Heatmap, { matrix: matrix, accent: accent }) })] }), _jsx("div", { style: { display: 'flex', height: 42, gap: 17, marginTop: 18 }, children: pills.map((pill) => (
|
|
284
|
-
// biome-ignore lint/correctness/useJsxKeyInIterable: satori has no keys
|
|
285
|
-
_jsx(PillStat, { value: pill.value, label: pill.label }))) }), _jsxs("div", { style: {
|
|
286
|
-
display: 'flex',
|
|
287
|
-
justifyContent: 'space-between',
|
|
288
|
-
marginTop: 'auto',
|
|
289
|
-
paddingLeft: 2,
|
|
290
|
-
paddingRight: 2,
|
|
291
|
-
}, children: [_jsxs("div", { style: { display: 'flex', fontSize: 15, color: FOOTER_FG }, children: ["hacklab.so/", data.handle] }), _jsx("div", { style: { display: 'flex', fontSize: 15, color: FOOTER_FG }, children: "#joinhacklab" })] })] }));
|
|
292
|
-
}
|
|
293
|
-
// ── Font loading (disk-cached so repeat renders are offline + fast) ──────────
|
|
294
|
-
const FONT_SOURCES = {
|
|
295
|
-
'orbitron-700.woff': 'https://cdn.jsdelivr.net/fontsource/fonts/orbitron@latest/latin-700-normal.woff',
|
|
296
|
-
'jetbrains-400.woff': 'https://cdn.jsdelivr.net/fontsource/fonts/jetbrains-mono@latest/latin-400-normal.woff',
|
|
297
|
-
'jetbrains-500.woff': 'https://cdn.jsdelivr.net/fontsource/fonts/jetbrains-mono@latest/latin-500-normal.woff',
|
|
298
|
-
};
|
|
299
|
-
async function loadFont(name) {
|
|
300
|
-
const dir = join(homedir(), '.hacklab', 'fonts');
|
|
301
|
-
const file = join(dir, name);
|
|
302
|
-
try {
|
|
303
|
-
const cached = await readFile(file);
|
|
304
|
-
return cached.buffer.slice(cached.byteOffset, cached.byteOffset + cached.byteLength);
|
|
305
|
-
}
|
|
306
|
-
catch {
|
|
307
|
-
const url = FONT_SOURCES[name];
|
|
308
|
-
if (!url)
|
|
309
|
-
throw new Error(`unknown font: ${name}`);
|
|
310
|
-
const buf = await fetch(url).then((r) => r.arrayBuffer());
|
|
311
|
-
await mkdir(dir, { recursive: true });
|
|
312
|
-
await writeFile(file, Buffer.from(buf));
|
|
313
|
-
return buf;
|
|
314
|
-
}
|
|
315
|
-
}
|
|
316
|
-
async function loadAvatar(url) {
|
|
317
|
-
if (!url)
|
|
318
|
-
return null;
|
|
319
|
-
try {
|
|
320
|
-
const res = await fetch(url);
|
|
321
|
-
if (!res.ok)
|
|
322
|
-
return null;
|
|
323
|
-
const type = res.headers.get('content-type') ?? 'image/png';
|
|
324
|
-
const buf = Buffer.from(await res.arrayBuffer());
|
|
325
|
-
return `data:${type};base64,${buf.toString('base64')}`;
|
|
326
|
-
}
|
|
327
|
-
catch {
|
|
328
|
-
return null;
|
|
329
|
-
}
|
|
330
|
-
}
|
|
331
|
-
export async function generateShareCard(data) {
|
|
332
|
-
const [orbitron700, jetbrains400, jetbrains500, avatar] = await Promise.all([
|
|
333
|
-
loadFont('orbitron-700.woff'),
|
|
334
|
-
loadFont('jetbrains-400.woff'),
|
|
335
|
-
loadFont('jetbrains-500.woff'),
|
|
336
|
-
loadAvatar(data.avatarUrl),
|
|
337
|
-
]);
|
|
338
|
-
const matrix = buildMatrix(data.dailyActivity);
|
|
339
|
-
const svg = await satori(_jsx(ShareCard, { data: data, matrix: matrix, avatar: avatar }), {
|
|
340
|
-
width: 800,
|
|
341
|
-
height: 500,
|
|
342
|
-
fonts: [
|
|
343
|
-
{ name: 'Orbitron', data: orbitron700, weight: 700, style: 'normal' },
|
|
344
|
-
{
|
|
345
|
-
name: 'JetBrains Mono',
|
|
346
|
-
data: jetbrains400,
|
|
347
|
-
weight: 400,
|
|
348
|
-
style: 'normal',
|
|
349
|
-
},
|
|
350
|
-
{
|
|
351
|
-
name: 'JetBrains Mono',
|
|
352
|
-
data: jetbrains500,
|
|
353
|
-
weight: 500,
|
|
354
|
-
style: 'normal',
|
|
355
|
-
},
|
|
356
|
-
],
|
|
357
|
-
});
|
|
358
|
-
const resvg = new Resvg(svg, {
|
|
359
|
-
fitTo: { mode: 'width', value: 1600 },
|
|
360
|
-
});
|
|
361
|
-
const png = Buffer.from(resvg.render().asPng());
|
|
362
|
-
const dir = join(homedir(), '.hacklab');
|
|
363
|
-
await mkdir(dir, { recursive: true });
|
|
364
|
-
const filePath = join(dir, 'share-card.png');
|
|
365
|
-
await writeFile(filePath, png);
|
|
366
|
-
return filePath;
|
|
367
|
-
}
|
|
368
|
-
export async function copyToClipboard(imagePath) {
|
|
369
|
-
if (process.platform !== 'darwin')
|
|
370
|
-
return false;
|
|
371
|
-
try {
|
|
372
|
-
const script = `set the clipboard to (read POSIX file "${imagePath}" as «class PNGf»)`;
|
|
373
|
-
execSync(`osascript -e '${script}'`, { timeout: 5000 });
|
|
374
|
-
return true;
|
|
375
|
-
}
|
|
376
|
-
catch {
|
|
377
|
-
return false;
|
|
378
|
-
}
|
|
379
|
-
}
|
|
380
|
-
//# sourceMappingURL=share-card.js.map
|
package/dist/share-card.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"share-card.js","sourceRoot":"","sources":["../src/share-card.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAA;AAC7C,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAA;AAC7D,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAA;AACjC,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAA;AAChC,OAAO,EAAE,KAAK,EAAE,MAAM,iBAAiB,CAAA;AACvC,OAAO,MAAM,MAAM,QAAQ,CAAA;AAC3B,OAAO,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAA;AACnD,OAAO,EAAe,YAAY,EAAE,MAAM,wBAAwB,CAAA;AAElE,8EAA8E;AAC9E,+EAA+E;AAC/E,4EAA4E;AAC5E,4EAA4E;AAC5E,+EAA+E;AAC/E,iDAAiD;AACjD,MAAM,OAAO,GAAG,SAAS,CAAA;AACzB,MAAM,OAAO,GAAG,SAAS,CAAA;AACzB,MAAM,MAAM,GAAG,SAAS,CAAA;AACxB,MAAM,KAAK,GAAG,SAAS,CAAA;AACvB,MAAM,KAAK,GAAG,SAAS,CAAA;AACvB,MAAM,SAAS,GAAG,SAAS,CAAA;AAC3B,MAAM,SAAS,GAAG,SAAS,CAAA;AAE3B,gFAAgF;AAChF,qEAAqE;AACrE,MAAM,SAAS,GAAG,EAAE,CAAA;AACpB,MAAM,SAAS,GAAG,CAAC,CAAA;AACnB,MAAM,SAAS,GAAG,EAAE,CAAA;AACpB,MAAM,QAAQ,GAAG,CAAC,CAAA;AAElB,SAAS,YAAY,CAAC,CAAS;IAC7B,IAAI,CAAC,IAAI,aAAa;QAAE,OAAO,GAAG,CAAC,CAAC,GAAG,aAAa,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,CAAA;IACnE,IAAI,CAAC,IAAI,SAAS;QAAE,OAAO,GAAG,CAAC,CAAC,GAAG,SAAS,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,CAAA;IAC3D,IAAI,CAAC,IAAI,KAAK;QAAE,OAAO,GAAG,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,CAAA;IACnD,OAAO,MAAM,CAAC,CAAC,CAAC,CAAA;AAClB,CAAC;AAyBD,+EAA+E;AAC/E,gFAAgF;AAChF,MAAM,YAAY,GAAG,CAAC,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAU,CAAA;AAEtD,8EAA8E;AAC9E,4EAA4E;AAC5E,8EAA8E;AAC9E,uDAAuD;AACvD,SAAS,WAAW,CAClB,KAA8C;IAE9C,MAAM,MAAM,GAAG,IAAI,GAAG,EAAkB,CAAA;IACxC,KAAK,MAAM,CAAC,IAAI,KAAK,EAAE,CAAC;QACtB,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,CAAA;IAC1D,CAAC;IAED,MAAM,KAAK,GAAG,IAAI,IAAI,EAAE,CAAA;IACxB,MAAM,OAAO,GAAG,IAAI,IAAI,CAAC,KAAK,CAAC,CAAA;IAC/B,OAAO,CAAC,UAAU,CAAC,KAAK,CAAC,UAAU,EAAE,GAAG,CAAC,CAAC,GAAG,KAAK,CAAC,SAAS,EAAE,CAAC,CAAC,CAAA;IAChE,MAAM,SAAS,GAAG,IAAI,IAAI,CAAC,OAAO,CAAC,CAAA;IACnC,SAAS,CAAC,UAAU,CAAC,OAAO,CAAC,UAAU,EAAE,GAAG,SAAS,GAAG,CAAC,GAAG,CAAC,CAAC,CAAA;IAE9D,MAAM,MAAM,GAAe,EAAE,CAAA;IAC7B,IAAI,GAAG,GAAG,CAAC,CAAA;IACX,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,SAAS,EAAE,CAAC,EAAE,EAAE,CAAC;QACnC,MAAM,GAAG,GAAa,EAAE,CAAA;QACxB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,SAAS,EAAE,CAAC,EAAE,EAAE,CAAC;YACnC,MAAM,IAAI,GAAG,IAAI,IAAI,CAAC,SAAS,CAAC,CAAA;YAChC,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,UAAU,EAAE,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAA;YACnD,MAAM,CAAC,GAAG,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,CAAA;YAC1D,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;YACX,IAAI,CAAC,GAAG,GAAG;gBAAE,GAAG,GAAG,CAAC,CAAA;QACtB,CAAC;QACD,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;IAClB,CAAC;IAED,OAAO,MAAM,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CACxB,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE;QACZ,IAAI,CAAC,IAAI,CAAC,IAAI,GAAG,KAAK,CAAC;YAAE,OAAO,CAAC,CAAA;QACjC,MAAM,CAAC,GAAG,CAAC,GAAG,GAAG,CAAA;QACjB,OAAO,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAA;IACtD,CAAC,CAAC,CACH,CAAA;AACH,CAAC;AAED,SAAS,OAAO,CAAC,EAAE,MAAM,EAAE,MAAM,EAA0C;IACzE,OAAO,CACL,cAAK,KAAK,EAAE,EAAE,OAAO,EAAE,MAAM,EAAE,aAAa,EAAE,QAAQ,EAAE,GAAG,EAAE,QAAQ,EAAE,YACpE,MAAM,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC;QACnB,wEAAwE;QACxE,cAAK,KAAK,EAAE,EAAE,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE,QAAQ,EAAE,YAC3C,GAAG,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAChB,IAAI,KAAK,CAAC,CAAC,CAAC,CAAC;YACX,mDAAmD;YACnD,wEAAwE;YACxE,cACE,KAAK,EAAE;oBACL,OAAO,EAAE,MAAM;oBACf,KAAK,EAAE,SAAS;oBAChB,MAAM,EAAE,SAAS;oBACjB,UAAU,EAAE,QAAQ;oBACpB,cAAc,EAAE,QAAQ;iBACzB,YAED,cACE,KAAK,EAAE;wBACL,OAAO,EAAE,MAAM;wBACf,KAAK,EAAE,CAAC;wBACR,MAAM,EAAE,CAAC;wBACT,eAAe,EAAE,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC;qBACpC,GACD,GACE,CACP,CAAC,CAAC,CAAC;YACF,wEAAwE;YACxE,cACE,KAAK,EAAE;oBACL,OAAO,EAAE,MAAM;oBACf,KAAK,EAAE,SAAS;oBAChB,MAAM,EAAE,SAAS;oBACjB,eAAe,EAAE,MAAM,CAAC,KAAK,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;iBACvD,GACD,CACH,CACF,GACG,CACP,CAAC,GACE,CACP,CAAA;AACH,CAAC;AAED,gFAAgF;AAChF,SAAS,GAAG,CAAC,EAAE,GAAG,EAAE,MAAM,EAAmC;IAC3D,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,CAAA;IAC5C,OAAO,CACL,cACE,KAAK,EAAE;YACL,OAAO,EAAE,MAAM;YACf,KAAK,EAAE,EAAE;YACT,MAAM,EAAE,CAAC;YACT,eAAe,EAAE,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC;SACnC,YAED,cACE,KAAK,EAAE;gBACL,OAAO,EAAE,MAAM;gBACf,MAAM,EAAE,CAAC;gBACT,KAAK,EAAE,GAAG,IAAI,GAAG;gBACjB,eAAe,EAAE,MAAM,CAAC,KAAK;aAC9B,GACD,GACE,CACP,CAAA;AACH,CAAC;AAED,SAAS,QAAQ,CAAC,EAAE,KAAK,EAAE,KAAK,EAAoC;IAClE,OAAO,CACL,eACE,KAAK,EAAE;YACL,OAAO,EAAE,MAAM;YACf,aAAa,EAAE,QAAQ;YACvB,IAAI,EAAE,CAAC;YACP,cAAc,EAAE,QAAQ;YACxB,eAAe,EAAE,OAAO;YACxB,MAAM,EAAE,aAAa,MAAM,EAAE;YAC7B,WAAW,EAAE,EAAE;YACf,GAAG,EAAE,EAAE;SACR,aAED,cACE,KAAK,EAAE;oBACL,OAAO,EAAE,MAAM;oBACf,UAAU,EAAE,UAAU;oBACtB,UAAU,EAAE,GAAG;oBACf,QAAQ,EAAE,EAAE;oBACZ,UAAU,EAAE,CAAC;oBACb,aAAa,EAAE,GAAG;oBAClB,KAAK,EAAE,KAAK;iBACb,YAEA,KAAK,GACF,EACN,cACE,KAAK,EAAE;oBACL,OAAO,EAAE,MAAM;oBACf,QAAQ,EAAE,EAAE;oBACZ,aAAa,EAAE,CAAC;oBAChB,KAAK,EAAE,KAAK;iBACb,YAEA,KAAK,GACF,IACF,CACP,CAAA;AACH,CAAC;AAED,SAAS,QAAQ,CAAC,EAAE,KAAK,EAAE,KAAK,EAAoC;IAClE,OAAO,CACL,eACE,KAAK,EAAE;YACL,OAAO,EAAE,MAAM;YACf,IAAI,EAAE,CAAC;YACP,UAAU,EAAE,QAAQ;YACpB,cAAc,EAAE,eAAe;YAC/B,eAAe,EAAE,OAAO;YACxB,MAAM,EAAE,aAAa,MAAM,EAAE;YAC7B,WAAW,EAAE,EAAE;YACf,YAAY,EAAE,EAAE;SACjB,aAED,cACE,KAAK,EAAE;oBACL,OAAO,EAAE,MAAM;oBACf,UAAU,EAAE,UAAU;oBACtB,UAAU,EAAE,GAAG;oBACf,QAAQ,EAAE,EAAE;oBACZ,aAAa,EAAE,GAAG;oBAClB,KAAK,EAAE,KAAK;iBACb,YAEA,KAAK,GACF,EACN,cACE,KAAK,EAAE;oBACL,OAAO,EAAE,MAAM;oBACf,QAAQ,EAAE,EAAE;oBACZ,aAAa,EAAE,CAAC;oBAChB,KAAK,EAAE,KAAK;iBACb,YAEA,KAAK,GACF,IACF,CACP,CAAA;AACH,CAAC;AAED,SAAS,aAAa,CAAC,EACrB,GAAG,EACH,MAAM,GAIP;IACC,MAAM,GAAG,GAAG,EAAE,CAAA;IACd,MAAM,KAAK,GAAG,CAAC,CAAA;IACf,MAAM,KAAK,GAAG,CAAC,CAAA;IACf,MAAM,IAAI,GAAG,GAAG,CAAC,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,QAAQ,CAAA;IAC9C,MAAM,KAAK,GAAG,GAAG,CAAC,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,CAAA;IAC/C,OAAO,CACL,cACE,KAAK,EAAE;YACL,OAAO,EAAE,MAAM;YACf,QAAQ,EAAE,UAAU;YACpB,KAAK,EAAE,GAAG;YACV,MAAM,EAAE,GAAG;YACX,CAAC,IAAI,CAAC,EAAE,KAAK;YACb,CAAC,KAAK,CAAC,EAAE,KAAK;YACd,CAAC,SAAS,IAAI,KAAK,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC,EAAE,GAAG,KAAK,YAAY,MAAM,CAAC,KAAK,EAAE;YAClF,CAAC,SAAS,KAAK,KAAK,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC,EAAE,GAAG,KAAK,YAAY,MAAM,CAAC,KAAK,EAAE;SACrF,GACD,CACH,CAAA;AACH,CAAC;AAED,SAAS,SAAS,CAAC,EACjB,IAAI,EACJ,MAAM,EACN,MAAM,GAKP;IACC,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAA;IACtC,MAAM,QAAQ,GAAG,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,MAAM,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAA;IACjE,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,cAAc,CAAC,OAAO,CAAC,CAAA;IACnE,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,IAAI,CAAC,eAAe,CAAC,CAAC,CAAA;IACjE,MAAM,OAAO,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC,WAAW,EAAE,CAAA;IACrD,MAAM,MAAM,GAAG,YAAY,CAAC,IAAI,CAAC,SAAS,CAAC,CAAA;IAC3C,MAAM,KAAK,GAAG;QACZ,EAAE,KAAK,EAAE,GAAG,IAAI,CAAC,aAAa,GAAG,EAAE,KAAK,EAAE,aAAa,EAAE;QACzD,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,IAAI,IAAI,CAAC,IAAI,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;QACjE,EAAE,KAAK,EAAE,MAAM,CAAC,IAAI,CAAC,SAAS,IAAI,CAAC,CAAC,EAAE,KAAK,EAAE,WAAW,EAAE;KAC3D,CAAA;IAED,OAAO,CACL,eACE,KAAK,EAAE;YACL,QAAQ,EAAE,UAAU;YACpB,KAAK,EAAE,GAAG;YACV,MAAM,EAAE,GAAG;YACX,OAAO,EAAE,MAAM;YACf,aAAa,EAAE,QAAQ;YACvB,eAAe,EAAE,OAAO;YACxB,OAAO,EAAE,EAAE;YACX,UAAU,EAAE,gBAAgB;YAC5B,KAAK,EAAE,KAAK;SACb,aAED,KAAC,aAAa,IAAC,GAAG,EAAC,IAAI,EAAC,MAAM,EAAE,MAAM,GAAI,EAC1C,KAAC,aAAa,IAAC,GAAG,EAAC,IAAI,EAAC,MAAM,EAAE,MAAM,GAAI,EAC1C,KAAC,aAAa,IAAC,GAAG,EAAC,IAAI,EAAC,MAAM,EAAE,MAAM,GAAI,EAC1C,KAAC,aAAa,IAAC,GAAG,EAAC,IAAI,EAAC,MAAM,EAAE,MAAM,GAAI,EAG1C,eACE,KAAK,EAAE;oBACL,OAAO,EAAE,MAAM;oBACf,MAAM,EAAE,EAAE;oBACV,UAAU,EAAE,QAAQ;oBACpB,cAAc,EAAE,eAAe;oBAC/B,eAAe,EAAE,OAAO;oBACxB,MAAM,EAAE,aAAa,MAAM,EAAE;oBAC7B,WAAW,EAAE,EAAE;oBACf,YAAY,EAAE,EAAE;iBACjB,aAED,eAAK,KAAK,EAAE,EAAE,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,QAAQ,EAAE,GAAG,EAAE,EAAE,EAAE,aAC5D,cACE,KAAK,EAAE;oCACL,OAAO,EAAE,MAAM;oCACf,KAAK,EAAE,EAAE;oCACT,MAAM,EAAE,EAAE;oCACV,MAAM,EAAE,aAAa,MAAM,EAAE;oCAC7B,eAAe,EAAE,SAAS;oCAC1B,UAAU,EAAE,QAAQ;oCACpB,cAAc,EAAE,QAAQ;oCACxB,QAAQ,EAAE,QAAQ;iCACnB,YAEA,MAAM,CAAC,CAAC,CAAC;gCACR,sFAAsF;gCACtF,cAAK,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,GAAG,EAAC,EAAE,GAAG,CACnD,CAAC,CAAC,CAAC,CACF,cACE,KAAK,EAAE;wCACL,OAAO,EAAE,MAAM;wCACf,UAAU,EAAE,UAAU;wCACtB,UAAU,EAAE,GAAG;wCACf,QAAQ,EAAE,EAAE;wCACZ,KAAK,EAAE,MAAM,CAAC,KAAK;qCACpB,YAEA,OAAO,GACJ,CACP,GACG,EACN,eACE,KAAK,EAAE;oCACL,OAAO,EAAE,MAAM;oCACf,UAAU,EAAE,UAAU;oCACtB,UAAU,EAAE,GAAG;oCACf,QAAQ,EAAE,EAAE;oCACZ,aAAa,EAAE,GAAG;oCAClB,KAAK,EAAE,KAAK;iCACb,kBAEC,IAAI,CAAC,MAAM,CAAC,WAAW,EAAE,IACvB,IACF,EACN,eAAK,KAAK,EAAE,EAAE,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,QAAQ,EAAE,GAAG,EAAE,EAAE,EAAE,aAC5D,eACE,KAAK,EAAE;oCACL,OAAO,EAAE,MAAM;oCACf,UAAU,EAAE,UAAU;oCACtB,UAAU,EAAE,GAAG;oCACf,QAAQ,EAAE,EAAE;oCACZ,aAAa,EAAE,CAAC;oCAChB,KAAK,EAAE,KAAK;iCACb,kBAEC,IAAI,CAAC,KAAK,IACR,EACN,cACE,KAAK,EAAE;oCACL,OAAO,EAAE,MAAM;oCACf,KAAK,EAAE,GAAG;oCACV,MAAM,EAAE,CAAC;oCACT,eAAe,EAAE,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC;iCACnC,YAED,cACE,KAAK,EAAE;wCACL,OAAO,EAAE,MAAM;wCACf,KAAK,EAAE,GAAG,QAAQ,GAAG;wCACrB,MAAM,EAAE,CAAC;wCACT,eAAe,EAAE,MAAM,CAAC,KAAK;qCAC9B,GACD,GACE,IACF,IACF,EAGN,eAAK,KAAK,EAAE,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,SAAS,EAAE,EAAE,EAAE,aAClE,KAAC,QAAQ,IACP,KAAK,EAAE,YAAY,CAAC,IAAI,CAAC,WAAW,CAAC,EACrC,KAAK,EAAC,eAAe,GACrB,EACF,KAAC,QAAQ,IAAC,KAAK,EAAE,GAAG,IAAI,CAAC,MAAM,GAAG,EAAE,KAAK,EAAC,QAAQ,GAAG,EACrD,KAAC,QAAQ,IAAC,KAAK,EAAE,IAAI,IAAI,EAAE,EAAE,KAAK,EAAC,WAAW,GAAG,IAC7C,EAGN,eAAK,KAAK,EAAE,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,SAAS,EAAE,EAAE,EAAE,aAClE,cACE,KAAK,EAAE;4BACL,OAAO,EAAE,MAAM;4BACf,KAAK,EAAE,GAAG;4BACV,aAAa,EAAE,QAAQ;4BACvB,cAAc,EAAE,QAAQ;4BACxB,eAAe,EAAE,OAAO;4BACxB,MAAM,EAAE,aAAa,MAAM,EAAE;4BAC7B,WAAW,EAAE,EAAE;4BACf,YAAY,EAAE,EAAE;4BAChB,GAAG,EAAE,EAAE;yBACR,YAEA,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC;wBACjB,wEAAwE;wBACxE,eACE,KAAK,EAAE;gCACL,OAAO,EAAE,MAAM;gCACf,UAAU,EAAE,QAAQ;gCACpB,cAAc,EAAE,eAAe;6BAChC,aAED,cACE,KAAK,EAAE;wCACL,OAAO,EAAE,MAAM;wCACf,QAAQ,EAAE,EAAE;wCACZ,aAAa,EAAE,GAAG;wCAClB,KAAK,EAAE,SAAS;qCACjB,YAEA,cAAc,CAAC,CAAC,CAAC,IAAI,CAAC,GACnB,EACN,KAAC,GAAG,IAAC,GAAG,EAAE,CAAC,CAAC,CAAC,MAAM,GAAG,QAAQ,CAAC,GAAG,GAAG,EAAE,MAAM,EAAE,MAAM,GAAI,IACrD,CACP,CAAC,GACE,EACN,cACE,KAAK,EAAE;4BACL,OAAO,EAAE,MAAM;4BACf,IAAI,EAAE,CAAC;4BACP,UAAU,EAAE,QAAQ;4BACpB,cAAc,EAAE,QAAQ;4BACxB,eAAe,EAAE,OAAO;4BACxB,MAAM,EAAE,aAAa,MAAM,EAAE;yBAC9B,YAED,KAAC,OAAO,IAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAI,GACvC,IACF,EAGN,cAAK,KAAK,EAAE,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,SAAS,EAAE,EAAE,EAAE,YAChE,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC;gBACnB,wEAAwE;gBACxE,KAAC,QAAQ,IAAC,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,GAAI,CACnD,CAAC,GACE,EAGN,eACE,KAAK,EAAE;oBACL,OAAO,EAAE,MAAM;oBACf,cAAc,EAAE,eAAe;oBAC/B,SAAS,EAAE,MAAM;oBACjB,WAAW,EAAE,CAAC;oBACd,YAAY,EAAE,CAAC;iBAChB,aAED,eAAK,KAAK,EAAE,EAAE,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,EAAE,EAAE,KAAK,EAAE,SAAS,EAAE,4BACjD,IAAI,CAAC,MAAM,IACnB,EACN,cAAK,KAAK,EAAE,EAAE,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,EAAE,EAAE,KAAK,EAAE,SAAS,EAAE,6BAEzD,IACF,IACF,CACP,CAAA;AACH,CAAC;AAED,gFAAgF;AAChF,MAAM,YAAY,GAA2B;IAC3C,mBAAmB,EACjB,iFAAiF;IACnF,oBAAoB,EAClB,uFAAuF;IACzF,oBAAoB,EAClB,uFAAuF;CAC1F,CAAA;AAED,KAAK,UAAU,QAAQ,CAAC,IAAY;IAClC,MAAM,GAAG,GAAG,IAAI,CAAC,OAAO,EAAE,EAAE,UAAU,EAAE,OAAO,CAAC,CAAA;IAChD,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,CAAA;IAC5B,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,MAAM,QAAQ,CAAC,IAAI,CAAC,CAAA;QACnC,OAAO,MAAM,CAAC,MAAM,CAAC,KAAK,CACxB,MAAM,CAAC,UAAU,EACjB,MAAM,CAAC,UAAU,GAAG,MAAM,CAAC,UAAU,CACvB,CAAA;IAClB,CAAC;IAAC,MAAM,CAAC;QACP,MAAM,GAAG,GAAG,YAAY,CAAC,IAAI,CAAC,CAAA;QAC9B,IAAI,CAAC,GAAG;YAAE,MAAM,IAAI,KAAK,CAAC,iBAAiB,IAAI,EAAE,CAAC,CAAA;QAClD,MAAM,GAAG,GAAG,MAAM,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC,CAAA;QACzD,MAAM,KAAK,CAAC,GAAG,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAA;QACrC,MAAM,SAAS,CAAC,IAAI,EAAE,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAA;QACvC,OAAO,GAAG,CAAA;IACZ,CAAC;AACH,CAAC;AAED,KAAK,UAAU,UAAU,CAAC,GAAuB;IAC/C,IAAI,CAAC,GAAG;QAAE,OAAO,IAAI,CAAA;IACrB,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,MAAM,KAAK,CAAC,GAAG,CAAC,CAAA;QAC5B,IAAI,CAAC,GAAG,CAAC,EAAE;YAAE,OAAO,IAAI,CAAA;QACxB,MAAM,IAAI,GAAG,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,cAAc,CAAC,IAAI,WAAW,CAAA;QAC3D,MAAM,GAAG,GAAG,MAAM,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,WAAW,EAAE,CAAC,CAAA;QAChD,OAAO,QAAQ,IAAI,WAAW,GAAG,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE,CAAA;IACxD,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAA;IACb,CAAC;AACH,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,iBAAiB,CAAC,IAAmB;IACzD,MAAM,CAAC,WAAW,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,CAAC,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC;QAC1E,QAAQ,CAAC,mBAAmB,CAAC;QAC7B,QAAQ,CAAC,oBAAoB,CAAC;QAC9B,QAAQ,CAAC,oBAAoB,CAAC;QAC9B,UAAU,CAAC,IAAI,CAAC,SAAS,CAAC;KAC3B,CAAC,CAAA;IAEF,MAAM,MAAM,GAAG,WAAW,CAAC,IAAI,CAAC,aAAa,CAAC,CAAA;IAE9C,MAAM,GAAG,GAAG,MAAM,MAAM,CACtB,KAAC,SAAS,IAAC,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAI,EACzD;QACE,KAAK,EAAE,GAAG;QACV,MAAM,EAAE,GAAG;QACX,KAAK,EAAE;YACL,EAAE,IAAI,EAAE,UAAU,EAAE,IAAI,EAAE,WAAW,EAAE,MAAM,EAAE,GAAG,EAAE,KAAK,EAAE,QAAQ,EAAE;YACrE;gBACE,IAAI,EAAE,gBAAgB;gBACtB,IAAI,EAAE,YAAY;gBAClB,MAAM,EAAE,GAAG;gBACX,KAAK,EAAE,QAAQ;aAChB;YACD;gBACE,IAAI,EAAE,gBAAgB;gBACtB,IAAI,EAAE,YAAY;gBAClB,MAAM,EAAE,GAAG;gBACX,KAAK,EAAE,QAAQ;aAChB;SACF;KACF,CACF,CAAA;IAED,MAAM,KAAK,GAAG,IAAI,KAAK,CAAC,GAAG,EAAE;QAC3B,KAAK,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE;KACtC,CAAC,CAAA;IACF,MAAM,GAAG,GAAG,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC,KAAK,EAAE,CAAC,CAAA;IAE/C,MAAM,GAAG,GAAG,IAAI,CAAC,OAAO,EAAE,EAAE,UAAU,CAAC,CAAA;IACvC,MAAM,KAAK,CAAC,GAAG,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAA;IACrC,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,EAAE,gBAAgB,CAAC,CAAA;IAC5C,MAAM,SAAS,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAA;IAE9B,OAAO,QAAQ,CAAA;AACjB,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,eAAe,CAAC,SAAiB;IACrD,IAAI,OAAO,CAAC,QAAQ,KAAK,QAAQ;QAAE,OAAO,KAAK,CAAA;IAC/C,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,0CAA0C,SAAS,oBAAoB,CAAA;QACtF,QAAQ,CAAC,iBAAiB,MAAM,GAAG,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAA;QACvD,OAAO,IAAI,CAAA;IACb,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,KAAK,CAAA;IACd,CAAC;AACH,CAAC"}
|
package/dist/share.d.ts
DELETED
|
@@ -1,17 +0,0 @@
|
|
|
1
|
-
import type { ShareCardData } from './share-card.js';
|
|
2
|
-
export type { ShareCardData } from './share-card.js';
|
|
3
|
-
/**
|
|
4
|
-
* Prefill for the X compose window. The paste line is only true when the png
|
|
5
|
-
* really made it onto the clipboard — which only happens on macOS, so cmd is
|
|
6
|
-
* the right modifier whenever it is printed at all.
|
|
7
|
-
*/
|
|
8
|
-
export declare function shareTweetText(card: Pick<ShareCardData, 'handle' | 'tokensTotal'>, clipboardReady?: boolean): string;
|
|
9
|
-
/** Generate the stats card for sharing without displaying it in the terminal. */
|
|
10
|
-
export declare function renderShareCard(card: ShareCardData): Promise<string | null>;
|
|
11
|
-
/**
|
|
12
|
-
* A bare Enter opens X with the card; typing anything first, or a non-TTY,
|
|
13
|
-
* declines. That one opt-in gates every sharing side effect — the Desktop copy
|
|
14
|
-
* included, so declining leaves the user's Desktop untouched.
|
|
15
|
-
*/
|
|
16
|
-
export declare function promptShareOnX(card: ShareCardData, cardPath: string | null): Promise<void>;
|
|
17
|
-
//# sourceMappingURL=share.d.ts.map
|
package/dist/share.d.ts.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"share.d.ts","sourceRoot":"","sources":["../src/share.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAA;AAKpD,YAAY,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAA;AAIpD;;;;GAIG;AACH,wBAAgB,cAAc,CAC5B,IAAI,EAAE,IAAI,CAAC,aAAa,EAAE,QAAQ,GAAG,aAAa,CAAC,EACnD,cAAc,UAAQ,GACrB,MAAM,CAUR;AAMD,iFAAiF;AACjF,wBAAsB,eAAe,CACnC,IAAI,EAAE,aAAa,GAClB,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAQxB;AAED;;;;GAIG;AACH,wBAAsB,cAAc,CAClC,IAAI,EAAE,aAAa,EACnB,QAAQ,EAAE,MAAM,GAAG,IAAI,GACtB,OAAO,CAAC,IAAI,CAAC,CA+Bf"}
|
package/dist/share.js
DELETED
|
@@ -1,75 +0,0 @@
|
|
|
1
|
-
import { copyFile } from 'node:fs/promises';
|
|
2
|
-
import { homedir } from 'node:os';
|
|
3
|
-
import { join } from 'node:path';
|
|
4
|
-
import { formatTokens } from './scanners/util.js';
|
|
5
|
-
import { dim, info, success } from './ui.js';
|
|
6
|
-
import { openBrowser } from './utils/openBrowser.js';
|
|
7
|
-
import { waitForBareEnter } from './utils/waitForEnter.js';
|
|
8
|
-
const SHARE_ORIGIN = 'https://hacklab.so';
|
|
9
|
-
/**
|
|
10
|
-
* Prefill for the X compose window. The paste line is only true when the png
|
|
11
|
-
* really made it onto the clipboard — which only happens on macOS, so cmd is
|
|
12
|
-
* the right modifier whenever it is printed at all.
|
|
13
|
-
*/
|
|
14
|
-
export function shareTweetText(card, clipboardReady = false) {
|
|
15
|
-
return [
|
|
16
|
-
`I burned ${formatTokens(card.tokensTotal)} tokens 🔥`,
|
|
17
|
-
...(clipboardReady ? ['', '(press cmd+v)'] : []),
|
|
18
|
-
'',
|
|
19
|
-
`${SHARE_ORIGIN}/${card.handle}`,
|
|
20
|
-
'',
|
|
21
|
-
'',
|
|
22
|
-
'#joinhacklab #riplinkedin',
|
|
23
|
-
].join('\n');
|
|
24
|
-
}
|
|
25
|
-
function desktopCardPath() {
|
|
26
|
-
return join(homedir(), 'Desktop', 'hacklab-card.png');
|
|
27
|
-
}
|
|
28
|
-
/** Generate the stats card for sharing without displaying it in the terminal. */
|
|
29
|
-
export async function renderShareCard(card) {
|
|
30
|
-
try {
|
|
31
|
-
// Keep the platform-specific native renderer optional when its binary is unavailable.
|
|
32
|
-
const { generateShareCard } = await import('./share-card.js');
|
|
33
|
-
return await generateShareCard(card);
|
|
34
|
-
}
|
|
35
|
-
catch {
|
|
36
|
-
return null;
|
|
37
|
-
}
|
|
38
|
-
}
|
|
39
|
-
/**
|
|
40
|
-
* A bare Enter opens X with the card; typing anything first, or a non-TTY,
|
|
41
|
-
* declines. That one opt-in gates every sharing side effect — the Desktop copy
|
|
42
|
-
* included, so declining leaves the user's Desktop untouched.
|
|
43
|
-
*/
|
|
44
|
-
export async function promptShareOnX(card, cardPath) {
|
|
45
|
-
console.log('');
|
|
46
|
-
const shareOnX = await waitForBareEnter(`(press enter to share) ${dim('· anything else skips')} `);
|
|
47
|
-
if (!shareOnX)
|
|
48
|
-
return;
|
|
49
|
-
let clipboardReady = false;
|
|
50
|
-
if (cardPath) {
|
|
51
|
-
const dest = desktopCardPath();
|
|
52
|
-
try {
|
|
53
|
-
await copyFile(cardPath, dest);
|
|
54
|
-
success(`saved to ${dest}`);
|
|
55
|
-
}
|
|
56
|
-
catch {
|
|
57
|
-
// Desktop missing (headless/CI) — the working copy still lives in ~/.hacklab
|
|
58
|
-
info(dim(`could not save ${dest}`));
|
|
59
|
-
}
|
|
60
|
-
try {
|
|
61
|
-
const { copyToClipboard } = await import('./share-card.js');
|
|
62
|
-
clipboardReady = await copyToClipboard(cardPath);
|
|
63
|
-
if (clipboardReady)
|
|
64
|
-
success('image copied to clipboard');
|
|
65
|
-
}
|
|
66
|
-
catch {
|
|
67
|
-
info(dim('could not copy the image to the clipboard'));
|
|
68
|
-
}
|
|
69
|
-
}
|
|
70
|
-
else {
|
|
71
|
-
info(dim('image unavailable — opening X with the post text only.'));
|
|
72
|
-
}
|
|
73
|
-
await openBrowser(`https://x.com/intent/tweet?text=${encodeURIComponent(shareTweetText(card, clipboardReady))}`);
|
|
74
|
-
}
|
|
75
|
-
//# sourceMappingURL=share.js.map
|
package/dist/share.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"share.js","sourceRoot":"","sources":["../src/share.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAA;AAC3C,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAA;AACjC,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAA;AAEhC,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAA;AAEjD,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,SAAS,CAAA;AAC5C,OAAO,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAA;AACpD,OAAO,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAA;AAI1D,MAAM,YAAY,GAAG,oBAAoB,CAAA;AAEzC;;;;GAIG;AACH,MAAM,UAAU,cAAc,CAC5B,IAAmD,EACnD,cAAc,GAAG,KAAK;IAEtB,OAAO;QACL,YAAY,YAAY,CAAC,IAAI,CAAC,WAAW,CAAC,YAAY;QACtD,GAAG,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,eAAe,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;QAChD,EAAE;QACF,GAAG,YAAY,IAAI,IAAI,CAAC,MAAM,EAAE;QAChC,EAAE;QACF,EAAE;QACF,2BAA2B;KAC5B,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;AACd,CAAC;AAED,SAAS,eAAe;IACtB,OAAO,IAAI,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,kBAAkB,CAAC,CAAA;AACvD,CAAC;AAED,iFAAiF;AACjF,MAAM,CAAC,KAAK,UAAU,eAAe,CACnC,IAAmB;IAEnB,IAAI,CAAC;QACH,sFAAsF;QACtF,MAAM,EAAE,iBAAiB,EAAE,GAAG,MAAM,MAAM,CAAC,iBAAiB,CAAC,CAAA;QAC7D,OAAO,MAAM,iBAAiB,CAAC,IAAI,CAAC,CAAA;IACtC,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAA;IACb,CAAC;AACH,CAAC;AAED;;;;GAIG;AACH,MAAM,CAAC,KAAK,UAAU,cAAc,CAClC,IAAmB,EACnB,QAAuB;IAEvB,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAA;IACf,MAAM,QAAQ,GAAG,MAAM,gBAAgB,CACrC,0BAA0B,GAAG,CAAC,uBAAuB,CAAC,GAAG,CAC1D,CAAA;IACD,IAAI,CAAC,QAAQ;QAAE,OAAM;IAErB,IAAI,cAAc,GAAG,KAAK,CAAA;IAC1B,IAAI,QAAQ,EAAE,CAAC;QACb,MAAM,IAAI,GAAG,eAAe,EAAE,CAAA;QAC9B,IAAI,CAAC;YACH,MAAM,QAAQ,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAA;YAC9B,OAAO,CAAC,YAAY,IAAI,EAAE,CAAC,CAAA;QAC7B,CAAC;QAAC,MAAM,CAAC;YACP,6EAA6E;YAC7E,IAAI,CAAC,GAAG,CAAC,kBAAkB,IAAI,EAAE,CAAC,CAAC,CAAA;QACrC,CAAC;QACD,IAAI,CAAC;YACH,MAAM,EAAE,eAAe,EAAE,GAAG,MAAM,MAAM,CAAC,iBAAiB,CAAC,CAAA;YAC3D,cAAc,GAAG,MAAM,eAAe,CAAC,QAAQ,CAAC,CAAA;YAChD,IAAI,cAAc;gBAAE,OAAO,CAAC,2BAA2B,CAAC,CAAA;QAC1D,CAAC;QAAC,MAAM,CAAC;YACP,IAAI,CAAC,GAAG,CAAC,2CAA2C,CAAC,CAAC,CAAA;QACxD,CAAC;IACH,CAAC;SAAM,CAAC;QACN,IAAI,CAAC,GAAG,CAAC,wDAAwD,CAAC,CAAC,CAAA;IACrE,CAAC;IAED,MAAM,WAAW,CACf,mCAAmC,kBAAkB,CAAC,cAAc,CAAC,IAAI,EAAE,cAAc,CAAC,CAAC,EAAE,CAC9F,CAAA;AACH,CAAC"}
|
package/dist/sync.d.ts
DELETED
|
@@ -1,100 +0,0 @@
|
|
|
1
|
-
import type { PromptSyncTier } from './prompt-consent.js';
|
|
2
|
-
import { type PromptStats } from './prompt-stats.js';
|
|
3
|
-
import { type AggregateScan, type CursorScanStatus, type CursorStats, type DailyToolEntry, formatBytes, formatTokens } from './scanners/index.js';
|
|
4
|
-
import { type Session } from './session.js';
|
|
5
|
-
export type { CursorScanStatus, CursorStats, DailyToolEntry };
|
|
6
|
-
export { formatBytes, formatTokens };
|
|
7
|
-
export type SyncResult = {
|
|
8
|
-
claudeTotal: number;
|
|
9
|
-
codexTotal: number;
|
|
10
|
-
cursorTotal: number;
|
|
11
|
-
openclawTotal: number;
|
|
12
|
-
hermesTotal: number;
|
|
13
|
-
opencodeTotal: number;
|
|
14
|
-
grokTotal: number;
|
|
15
|
-
copilotTotal: number;
|
|
16
|
-
antigravityTotal: number;
|
|
17
|
-
messagesTotal: number;
|
|
18
|
-
allEntries: DailyToolEntry[];
|
|
19
|
-
cursorStats: CursorStats | null;
|
|
20
|
-
result: Record<string, unknown>;
|
|
21
|
-
models: Array<{
|
|
22
|
-
name: string;
|
|
23
|
-
tokens: number;
|
|
24
|
-
}>;
|
|
25
|
-
cursorScanStatus: CursorScanStatus;
|
|
26
|
-
/** What was uploaded under the consent tier, or null when opted out. */
|
|
27
|
-
promptStats: PromptStats | null;
|
|
28
|
-
};
|
|
29
|
-
export declare const LOGIN_EXPIRED_MESSAGE = "login expired. run hacklab login again";
|
|
30
|
-
/**
|
|
31
|
-
* A rejected upload, carrying the HTTP status and Retry-After. The minutely
|
|
32
|
-
* tick needs to tell a 429 (back off, the server said so) from a 500 (retry
|
|
33
|
-
* next minute); every other caller only ever reads `.message`, which is
|
|
34
|
-
* unchanged from the plain Error this replaced.
|
|
35
|
-
*/
|
|
36
|
-
export declare class SyncUploadError extends Error {
|
|
37
|
-
readonly status: number;
|
|
38
|
-
readonly retryAfter: string | null;
|
|
39
|
-
constructor(message: string, status: number, retryAfter?: string | null);
|
|
40
|
-
}
|
|
41
|
-
type SessionCheck = {
|
|
42
|
-
status: 'ok';
|
|
43
|
-
} | {
|
|
44
|
-
status: 'unauthorized';
|
|
45
|
-
} | {
|
|
46
|
-
status: 'failed';
|
|
47
|
-
message: string;
|
|
48
|
-
};
|
|
49
|
-
export declare function fetchApi(session: Session, path: string, init?: RequestInit): Promise<Response>;
|
|
50
|
-
export declare function checkSession(session: Session): Promise<SessionCheck>;
|
|
51
|
-
/**
|
|
52
|
-
* Ask the server to mirror the user's pinned GitHub repos into their projects
|
|
53
|
-
* (and drop ones that are no longer pinned/public). Best-effort and non-fatal —
|
|
54
|
-
* returns null on any failure so a GitHub hiccup never fails `sync`.
|
|
55
|
-
*/
|
|
56
|
-
export declare function syncGithubRepos(session: Session): Promise<{
|
|
57
|
-
synced: number;
|
|
58
|
-
removed: number;
|
|
59
|
-
} | null>;
|
|
60
|
-
/**
|
|
61
|
-
* Upload a scan's token totals to the backend (the `/api/claim/sync` capsule).
|
|
62
|
-
* The single place the upload payload is built and the response is checked, so
|
|
63
|
-
* the `sync` command and the daily background job all push the exact same
|
|
64
|
-
* shape. Throws LOGIN_EXPIRED_MESSAGE on 401 so callers can tell an expired
|
|
65
|
-
* session apart from a transient failure. Pass `timeoutMs` to hard-cap a slow
|
|
66
|
-
* upload; omit it for an unbounded one-shot.
|
|
67
|
-
*
|
|
68
|
-
* Tags the upload with this machine's stable id so the backend can sum usage
|
|
69
|
-
* across the user's machines while keeping each machine's re-sync idempotent.
|
|
70
|
-
*/
|
|
71
|
-
export declare function uploadTokenScan(session: Session, scan: AggregateScan, opts?: {
|
|
72
|
-
timeoutMs?: number;
|
|
73
|
-
interactive?: boolean;
|
|
74
|
-
/** Consented prompt statistics. Omitted entirely unless the user opted in. */
|
|
75
|
-
promptStats?: PromptStats | null;
|
|
76
|
-
}): Promise<Record<string, unknown>>;
|
|
77
|
-
/**
|
|
78
|
-
* Ask the backend to slide this session's expiry forward (token unchanged) and
|
|
79
|
-
* persist the result. Returns the updated session, or null if the refresh failed
|
|
80
|
-
* (e.g. the session already expired — that needs a fresh `hacklab login`).
|
|
81
|
-
*/
|
|
82
|
-
export declare function refreshSession(session: Session): Promise<Session | null>;
|
|
83
|
-
/**
|
|
84
|
-
* Proactively refresh the session when it's nearing expiry, so a long-running
|
|
85
|
-
* daily background sync never lapses. A no-op (returns the session unchanged)
|
|
86
|
-
* when there's plenty of time left or the refresh fails.
|
|
87
|
-
*/
|
|
88
|
-
export declare function ensureFreshSession(session: Session): Promise<Session>;
|
|
89
|
-
export declare function runSync(session: Session, opts?: {
|
|
90
|
-
interactive?: boolean;
|
|
91
|
-
promptSync?: PromptSyncTier;
|
|
92
|
-
}): Promise<SyncResult>;
|
|
93
|
-
/**
|
|
94
|
-
* Scan the local transcripts for the given consent tier, or return null when
|
|
95
|
-
* there's no consent (or nothing to find). Never throws: prompt stats are an
|
|
96
|
-
* extra on top of the token sync, so a scan failure must not cost the user
|
|
97
|
-
* their token upload.
|
|
98
|
-
*/
|
|
99
|
-
export declare function scanConsentedPromptStats(tier: PromptSyncTier | undefined): Promise<PromptStats | null>;
|
|
100
|
-
//# sourceMappingURL=sync.d.ts.map
|
package/dist/sync.d.ts.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"sync.d.ts","sourceRoot":"","sources":["../src/sync.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAA;AACzD,OAAO,EAEL,KAAK,WAAW,EAGjB,MAAM,mBAAmB,CAAA;AAE1B,OAAO,EACL,KAAK,aAAa,EAClB,KAAK,gBAAgB,EACrB,KAAK,WAAW,EAEhB,KAAK,cAAc,EACnB,WAAW,EACX,YAAY,EAEb,MAAM,qBAAqB,CAAA;AAC5B,OAAO,EAGL,KAAK,OAAO,EAEb,MAAM,cAAc,CAAA;AAGrB,YAAY,EAAE,gBAAgB,EAAE,WAAW,EAAE,cAAc,EAAE,CAAA;AAK7D,OAAO,EAAE,WAAW,EAAE,YAAY,EAAE,CAAA;AAEpC,MAAM,MAAM,UAAU,GAAG;IACvB,WAAW,EAAE,MAAM,CAAA;IACnB,UAAU,EAAE,MAAM,CAAA;IAClB,WAAW,EAAE,MAAM,CAAA;IACnB,aAAa,EAAE,MAAM,CAAA;IACrB,WAAW,EAAE,MAAM,CAAA;IACnB,aAAa,EAAE,MAAM,CAAA;IACrB,SAAS,EAAE,MAAM,CAAA;IACjB,YAAY,EAAE,MAAM,CAAA;IACpB,gBAAgB,EAAE,MAAM,CAAA;IACxB,aAAa,EAAE,MAAM,CAAA;IACrB,UAAU,EAAE,cAAc,EAAE,CAAA;IAC5B,WAAW,EAAE,WAAW,GAAG,IAAI,CAAA;IAC/B,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;IAC/B,MAAM,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,CAAC,CAAA;IAC/C,gBAAgB,EAAE,gBAAgB,CAAA;IAClC,wEAAwE;IACxE,WAAW,EAAE,WAAW,GAAG,IAAI,CAAA;CAChC,CAAA;AAED,eAAO,MAAM,qBAAqB,2CAA2C,CAAA;AAE7E;;;;;GAKG;AACH,qBAAa,eAAgB,SAAQ,KAAK;IAGtC,QAAQ,CAAC,MAAM,EAAE,MAAM;IACvB,QAAQ,CAAC,UAAU,EAAE,MAAM,GAAG,IAAI;gBAFlC,OAAO,EAAE,MAAM,EACN,MAAM,EAAE,MAAM,EACd,UAAU,GAAE,MAAM,GAAG,IAAW;CAK5C;AAED,KAAK,YAAY,GACb;IAAE,MAAM,EAAE,IAAI,CAAA;CAAE,GAChB;IAAE,MAAM,EAAE,cAAc,CAAA;CAAE,GAC1B;IAAE,MAAM,EAAE,QAAQ,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,CAAA;AAwCzC,wBAAsB,QAAQ,CAC5B,OAAO,EAAE,OAAO,EAChB,IAAI,EAAE,MAAM,EACZ,IAAI,CAAC,EAAE,WAAW,GACjB,OAAO,CAAC,QAAQ,CAAC,CAMnB;AAED,wBAAsB,YAAY,CAAC,OAAO,EAAE,OAAO,GAAG,OAAO,CAAC,YAAY,CAAC,CAgC1E;AAED;;;;GAIG;AACH,wBAAsB,eAAe,CACnC,OAAO,EAAE,OAAO,GACf,OAAO,CAAC;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,GAAG,IAAI,CAAC,CAWrD;AAkBD;;;;;;;;;;GAUG;AACH,wBAAsB,eAAe,CACnC,OAAO,EAAE,OAAO,EAChB,IAAI,EAAE,aAAa,EACnB,IAAI,GAAE;IACJ,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,WAAW,CAAC,EAAE,OAAO,CAAA;IACrB,8EAA8E;IAC9E,WAAW,CAAC,EAAE,WAAW,GAAG,IAAI,CAAA;CAC5B,GACL,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAmDlC;AAMD;;;;GAIG;AACH,wBAAsB,cAAc,CAClC,OAAO,EAAE,OAAO,GACf,OAAO,CAAC,OAAO,GAAG,IAAI,CAAC,CAyBzB;AAED;;;;GAIG;AACH,wBAAsB,kBAAkB,CAAC,OAAO,EAAE,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,CAK3E;AAED,wBAAsB,OAAO,CAC3B,OAAO,EAAE,OAAO,EAChB,IAAI,GAAE;IAAE,WAAW,CAAC,EAAE,OAAO,CAAC;IAAC,UAAU,CAAC,EAAE,cAAc,CAAA;CAAO,GAChE,OAAO,CAAC,UAAU,CAAC,CAoDrB;AAED;;;;;GAKG;AACH,wBAAsB,wBAAwB,CAC5C,IAAI,EAAE,cAAc,GAAG,SAAS,GAC/B,OAAO,CAAC,WAAW,GAAG,IAAI,CAAC,CAO7B"}
|