hacklab 0.22.3 → 26.921.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +23 -430
- package/dist/index.js +132 -23
- package/package.json +20 -42
- 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/session.js
DELETED
|
@@ -1,191 +0,0 @@
|
|
|
1
|
-
import { mkdir, readFile, rm, writeFile } from 'node:fs/promises';
|
|
2
|
-
import { homedir } from 'node:os';
|
|
3
|
-
import { dirname, join } from 'node:path';
|
|
4
|
-
const SESSION_PATH = join(homedir(), '.hacklab', 'session.json');
|
|
5
|
-
const LEGACY_SESSION_TTL_MS = 7 * 24 * 60 * 60 * 1000;
|
|
6
|
-
export function getSessionPath() {
|
|
7
|
-
return process.env.HACKLAB_SESSION_PATH ?? SESSION_PATH;
|
|
8
|
-
}
|
|
9
|
-
export async function saveSession(session) {
|
|
10
|
-
const path = getSessionPath();
|
|
11
|
-
await mkdir(dirname(path), { recursive: true });
|
|
12
|
-
await writeFile(path, `${JSON.stringify(session, null, 2)}\n`, 'utf8');
|
|
13
|
-
}
|
|
14
|
-
function parseDate(value) {
|
|
15
|
-
if (!value)
|
|
16
|
-
return null;
|
|
17
|
-
const date = new Date(value);
|
|
18
|
-
return Number.isNaN(date.getTime()) ? null : date;
|
|
19
|
-
}
|
|
20
|
-
export function getSessionExpiresAt(session) {
|
|
21
|
-
const explicit = parseDate(session.expiresAt);
|
|
22
|
-
if (explicit)
|
|
23
|
-
return explicit;
|
|
24
|
-
const savedAt = parseDate(session.savedAt);
|
|
25
|
-
if (!savedAt)
|
|
26
|
-
return null;
|
|
27
|
-
return new Date(savedAt.getTime() + LEGACY_SESSION_TTL_MS);
|
|
28
|
-
}
|
|
29
|
-
export function isSessionExpired(session, now = new Date()) {
|
|
30
|
-
const expiresAt = getSessionExpiresAt(session);
|
|
31
|
-
return expiresAt ? expiresAt.getTime() <= now.getTime() : false;
|
|
32
|
-
}
|
|
33
|
-
export async function loadSessionState() {
|
|
34
|
-
let raw;
|
|
35
|
-
try {
|
|
36
|
-
raw = await readFile(getSessionPath(), 'utf8');
|
|
37
|
-
}
|
|
38
|
-
catch {
|
|
39
|
-
return { status: 'missing', session: null };
|
|
40
|
-
}
|
|
41
|
-
let data;
|
|
42
|
-
try {
|
|
43
|
-
data = JSON.parse(raw);
|
|
44
|
-
}
|
|
45
|
-
catch {
|
|
46
|
-
return { status: 'invalid', session: null };
|
|
47
|
-
}
|
|
48
|
-
if (!data.token || !data.email || !data.appUrl) {
|
|
49
|
-
return { status: 'invalid', session: null };
|
|
50
|
-
}
|
|
51
|
-
const session = data;
|
|
52
|
-
if (isSessionExpired(session)) {
|
|
53
|
-
return { status: 'expired', session: null };
|
|
54
|
-
}
|
|
55
|
-
return { status: 'ok', session };
|
|
56
|
-
}
|
|
57
|
-
export async function loadSession() {
|
|
58
|
-
return (await loadSessionState()).session;
|
|
59
|
-
}
|
|
60
|
-
/**
|
|
61
|
-
* Delete the local session file. Returns true if a file was removed, false if
|
|
62
|
-
* there was nothing to clear (no session). Local-only — it doesn't revoke the
|
|
63
|
-
* token server-side, so the token stays valid until it expires.
|
|
64
|
-
*/
|
|
65
|
-
export async function clearSession() {
|
|
66
|
-
try {
|
|
67
|
-
await rm(getSessionPath());
|
|
68
|
-
return true;
|
|
69
|
-
}
|
|
70
|
-
catch {
|
|
71
|
-
return false;
|
|
72
|
-
}
|
|
73
|
-
}
|
|
74
|
-
/**
|
|
75
|
-
* Named backends the CLI can target via `--env`. Any other backend (e.g. an
|
|
76
|
-
* internal preview or self-hosted instance) can be targeted with
|
|
77
|
-
* `HACKLAB_APP_URL`.
|
|
78
|
-
*/
|
|
79
|
-
export const HACKLAB_ENVIRONMENTS = {
|
|
80
|
-
production: 'https://hacklab.so',
|
|
81
|
-
development: 'http://localhost:3000',
|
|
82
|
-
};
|
|
83
|
-
export function isHacklabEnv(value) {
|
|
84
|
-
return Object.hasOwn(HACKLAB_ENVIRONMENTS, value);
|
|
85
|
-
}
|
|
86
|
-
// Natural words that aren't a prefix of a canonical name but mean the same env.
|
|
87
|
-
const ENV_ALIASES = {
|
|
88
|
-
local: 'development',
|
|
89
|
-
localhost: 'development',
|
|
90
|
-
};
|
|
91
|
-
/**
|
|
92
|
-
* Resolve an `--env` value to a canonical backend name. Accepts the full name,
|
|
93
|
-
* any unambiguous prefix (`dev`/`prod`, mirroring how command names resolve so
|
|
94
|
-
* abbreviations work everywhere), and a couple of natural aliases
|
|
95
|
-
* (`local`/`localhost`). Returns null if it matches none — the env names start
|
|
96
|
-
* with distinct letters, so a prefix is never ambiguous.
|
|
97
|
-
*/
|
|
98
|
-
export function resolveHacklabEnv(value) {
|
|
99
|
-
if (isHacklabEnv(value))
|
|
100
|
-
return value;
|
|
101
|
-
if (Object.hasOwn(ENV_ALIASES, value))
|
|
102
|
-
return ENV_ALIASES[value];
|
|
103
|
-
const names = Object.keys(HACKLAB_ENVIRONMENTS);
|
|
104
|
-
const matches = names.filter((n) => n.startsWith(value));
|
|
105
|
-
return matches.length === 1 ? matches[0] : null;
|
|
106
|
-
}
|
|
107
|
-
/**
|
|
108
|
-
* Reverse of HACKLAB_ENVIRONMENTS: the canonical env name for a backend URL, or
|
|
109
|
-
* null when it isn't one of the three known backends (e.g. a custom
|
|
110
|
-
* HACKLAB_APP_URL). Used to suggest the right `hacklab login --env <name>` when
|
|
111
|
-
* a per-backend token is rejected.
|
|
112
|
-
*/
|
|
113
|
-
export function envNameForUrl(url) {
|
|
114
|
-
const normalized = url.replace(/\/$/, '');
|
|
115
|
-
for (const [name, backend] of Object.entries(HACKLAB_ENVIRONMENTS)) {
|
|
116
|
-
if (backend === normalized)
|
|
117
|
-
return name;
|
|
118
|
-
}
|
|
119
|
-
return null;
|
|
120
|
-
}
|
|
121
|
-
/**
|
|
122
|
-
* Which backend to talk to, by precedence:
|
|
123
|
-
* 1. an explicit `HACKLAB_APP_URL` (also how `--env` is applied — see
|
|
124
|
-
* index.ts) so `--env development` always switches backends;
|
|
125
|
-
* 2. the backend you logged into (`session.appUrl`), when a session is given;
|
|
126
|
-
* 3. the production default, so a freshly-installed `hacklab` hits hacklab.so
|
|
127
|
-
* rather than a localhost server that isn't running.
|
|
128
|
-
*
|
|
129
|
-
* The single source of this precedence: `getAppUrl()` is the no-session form,
|
|
130
|
-
* and the chat command's `baseUrl()` is the session-aware form. Note the token
|
|
131
|
-
* is per-backend, so pointing `--env` at an env you haven't logged into will
|
|
132
|
-
* 401 until you `hacklab login --env <that>`.
|
|
133
|
-
*/
|
|
134
|
-
export function resolveAppUrl(session) {
|
|
135
|
-
const url = process.env.HACKLAB_APP_URL ??
|
|
136
|
-
session?.appUrl ??
|
|
137
|
-
HACKLAB_ENVIRONMENTS.production;
|
|
138
|
-
// Normalize here so callers never re-strip the trailing slash themselves.
|
|
139
|
-
return url.replace(/\/$/, '');
|
|
140
|
-
}
|
|
141
|
-
// Turn a 401 from any authenticated endpoint into something the user can act
|
|
142
|
-
// on. A bare "Unauthorized" is almost always a per-backend token mismatch: the
|
|
143
|
-
// saved session only authenticates against the backend you logged into, but
|
|
144
|
-
// this command targets a different one (via --env / HACKLAB_APP_URL), so its
|
|
145
|
-
// token isn't valid there. Point at the exact re-login command for the *target*
|
|
146
|
-
// backend instead of dead-ending.
|
|
147
|
-
export function unauthorizedHint(session) {
|
|
148
|
-
const target = resolveAppUrl(session);
|
|
149
|
-
const env = envNameForUrl(target);
|
|
150
|
-
const loginCmd = env && env !== 'production' ? `hacklab login --env ${env}` : 'hacklab login';
|
|
151
|
-
const sessionUrl = session.appUrl.replace(/\/$/, '');
|
|
152
|
-
if (sessionUrl !== target) {
|
|
153
|
-
return `unauthorized — your session is for ${sessionUrl}, but this targets ${target}. run \`${loginCmd}\` to sign in there.`;
|
|
154
|
-
}
|
|
155
|
-
return `unauthorized — your session may have expired. run \`${loginCmd}\` to sign in again.`;
|
|
156
|
-
}
|
|
157
|
-
export function getAppUrl() {
|
|
158
|
-
return resolveAppUrl();
|
|
159
|
-
}
|
|
160
|
-
/**
|
|
161
|
-
* Ask the backend whether this session still works.
|
|
162
|
-
*
|
|
163
|
-
* `GET /api/hackers/me` is the cheapest authenticated read there is, and its
|
|
164
|
-
* answer is unambiguous: the route resolves the bearer token against the live
|
|
165
|
-
* session rows, so only a token with no unexpired session behind it comes back
|
|
166
|
-
* 401. That is the *one* status that means signed out, and the only one that
|
|
167
|
-
* may cost someone their local session. The route has no 403 on GET (the one
|
|
168
|
-
* 403 it can return belongs to PATCH, for a profile that hasn't been claimed),
|
|
169
|
-
* so 403 is not treated as a refusal here.
|
|
170
|
-
*
|
|
171
|
-
* Everything else is 'unverified' — a 429 from either of the route's rate
|
|
172
|
-
* limiters (the per-IP one fires before auth is even looked at), a 5xx, a DNS
|
|
173
|
-
* failure on a plane, the 10s timeout. A machine that can't reach the server is
|
|
174
|
-
* not a machine whose account is gone, and guessing otherwise would throw away
|
|
175
|
-
* a working session over a flaky network.
|
|
176
|
-
*/
|
|
177
|
-
export async function verifySession(session) {
|
|
178
|
-
try {
|
|
179
|
-
const res = await fetch(`${resolveAppUrl(session)}/api/hackers/me?src=cli`, {
|
|
180
|
-
headers: { Authorization: `Bearer ${session.token}` },
|
|
181
|
-
signal: AbortSignal.timeout(10_000),
|
|
182
|
-
});
|
|
183
|
-
if (res.ok)
|
|
184
|
-
return 'ok';
|
|
185
|
-
return res.status === 401 ? 'unauthorized' : 'unverified';
|
|
186
|
-
}
|
|
187
|
-
catch {
|
|
188
|
-
return 'unverified';
|
|
189
|
-
}
|
|
190
|
-
}
|
|
191
|
-
//# sourceMappingURL=session.js.map
|
package/dist/session.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"session.js","sourceRoot":"","sources":["../src/session.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,19 +0,0 @@
|
|
|
1
|
-
export declare const BELT_COLOR_HEX: Record<string, string>;
|
|
2
|
-
/** Unknown / missing belt falls back to the white-belt hex (matches the web). */
|
|
3
|
-
export declare const DEFAULT_ACCENT_HEX = "#E8E8E8";
|
|
4
|
-
export type Accent = {
|
|
5
|
-
solid: string;
|
|
6
|
-
alpha: (a: number) => string;
|
|
7
|
-
};
|
|
8
|
-
export declare function hexToRgb(hex: string): {
|
|
9
|
-
r: number;
|
|
10
|
-
g: number;
|
|
11
|
-
b: number;
|
|
12
|
-
};
|
|
13
|
-
/**
|
|
14
|
-
* The accent for a belt/rank colour: the solid hue plus an alpha() helper that
|
|
15
|
-
* reuses the original mint opacities (0.1 track, 0.18/0.38/0.62/1 heat tiers) in
|
|
16
|
-
* this hue, so only the colour changes, not the relative brightness.
|
|
17
|
-
*/
|
|
18
|
-
export declare function accentShades(beltColor: string): Accent;
|
|
19
|
-
//# sourceMappingURL=share-card-colors.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"share-card-colors.d.ts","sourceRoot":"","sources":["../src/share-card-colors.ts"],"names":[],"mappings":"AAKA,eAAO,MAAM,cAAc,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAYjD,CAAA;AAED,iFAAiF;AACjF,eAAO,MAAM,kBAAkB,YAAY,CAAA;AAE3C,MAAM,MAAM,MAAM,GAAG;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,CAAC,CAAC,EAAE,MAAM,KAAK,MAAM,CAAA;CAAE,CAAA;AAEpE,wBAAgB,QAAQ,CAAC,GAAG,EAAE,MAAM,GAAG;IAAE,CAAC,EAAE,MAAM,CAAC;IAAC,CAAC,EAAE,MAAM,CAAC;IAAC,CAAC,EAAE,MAAM,CAAA;CAAE,CAKzE;AAED;;;;GAIG;AACH,wBAAgB,YAAY,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,CAItD"}
|
|
@@ -1,36 +0,0 @@
|
|
|
1
|
-
// Accent palette for the share card. The accent is the user's belt/rank colour
|
|
2
|
-
// (same hex values as the web profile's BELT_COLOR_HEX), so the card reads
|
|
3
|
-
// identically to hacklab.so/<handle>. Kept separate from share-card.tsx so it's
|
|
4
|
-
// testable without loading the satori/resvg renderer.
|
|
5
|
-
export const BELT_COLOR_HEX = {
|
|
6
|
-
white: '#E8E8E8',
|
|
7
|
-
orange: '#FF8C00',
|
|
8
|
-
red: '#DC2626',
|
|
9
|
-
blue: '#2563EB',
|
|
10
|
-
cyan: '#06B6D4',
|
|
11
|
-
yellow: '#EAB308',
|
|
12
|
-
lime: '#84CC16',
|
|
13
|
-
green: '#22C55E',
|
|
14
|
-
pink: '#EC4899',
|
|
15
|
-
purple: '#A855F7',
|
|
16
|
-
black: '#FFFFFF',
|
|
17
|
-
};
|
|
18
|
-
/** Unknown / missing belt falls back to the white-belt hex (matches the web). */
|
|
19
|
-
export const DEFAULT_ACCENT_HEX = '#E8E8E8';
|
|
20
|
-
export function hexToRgb(hex) {
|
|
21
|
-
const h = hex.replace('#', '');
|
|
22
|
-
const full = h.length === 3 ? h.replace(/(.)/g, '$1$1') : h;
|
|
23
|
-
const n = Number.parseInt(full, 16);
|
|
24
|
-
return { r: (n >> 16) & 255, g: (n >> 8) & 255, b: n & 255 };
|
|
25
|
-
}
|
|
26
|
-
/**
|
|
27
|
-
* The accent for a belt/rank colour: the solid hue plus an alpha() helper that
|
|
28
|
-
* reuses the original mint opacities (0.1 track, 0.18/0.38/0.62/1 heat tiers) in
|
|
29
|
-
* this hue, so only the colour changes, not the relative brightness.
|
|
30
|
-
*/
|
|
31
|
-
export function accentShades(beltColor) {
|
|
32
|
-
const hex = BELT_COLOR_HEX[beltColor] ?? DEFAULT_ACCENT_HEX;
|
|
33
|
-
const { r, g, b } = hexToRgb(hex);
|
|
34
|
-
return { solid: hex, alpha: (a) => `rgba(${r}, ${g}, ${b}, ${a})` };
|
|
35
|
-
}
|
|
36
|
-
//# sourceMappingURL=share-card-colors.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"share-card-colors.js","sourceRoot":"","sources":["../src/share-card-colors.ts"],"names":[],"mappings":"AAAA,+EAA+E;AAC/E,2EAA2E;AAC3E,gFAAgF;AAChF,sDAAsD;AAEtD,MAAM,CAAC,MAAM,cAAc,GAA2B;IACpD,KAAK,EAAE,SAAS;IAChB,MAAM,EAAE,SAAS;IACjB,GAAG,EAAE,SAAS;IACd,IAAI,EAAE,SAAS;IACf,IAAI,EAAE,SAAS;IACf,MAAM,EAAE,SAAS;IACjB,IAAI,EAAE,SAAS;IACf,KAAK,EAAE,SAAS;IAChB,IAAI,EAAE,SAAS;IACf,MAAM,EAAE,SAAS;IACjB,KAAK,EAAE,SAAS;CACjB,CAAA;AAED,iFAAiF;AACjF,MAAM,CAAC,MAAM,kBAAkB,GAAG,SAAS,CAAA;AAI3C,MAAM,UAAU,QAAQ,CAAC,GAAW;IAClC,MAAM,CAAC,GAAG,GAAG,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,CAAC,CAAA;IAC9B,MAAM,IAAI,GAAG,CAAC,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAA;IAC3D,MAAM,CAAC,GAAG,MAAM,CAAC,QAAQ,CAAC,IAAI,EAAE,EAAE,CAAC,CAAA;IACnC,OAAO,EAAE,CAAC,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,GAAG,EAAE,CAAC,EAAE,CAAC,GAAG,GAAG,EAAE,CAAA;AAC9D,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,YAAY,CAAC,SAAiB;IAC5C,MAAM,GAAG,GAAG,cAAc,CAAC,SAAS,CAAC,IAAI,kBAAkB,CAAA;IAC3D,MAAM,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,GAAG,QAAQ,CAAC,GAAG,CAAC,CAAA;IACjC,OAAO,EAAE,KAAK,EAAE,GAAG,EAAE,KAAK,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,QAAQ,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,EAAE,CAAA;AACrE,CAAC"}
|
package/dist/share-card.d.ts
DELETED
|
@@ -1,31 +0,0 @@
|
|
|
1
|
-
export type ShareCardData = {
|
|
2
|
-
handle: string;
|
|
3
|
-
level: number;
|
|
4
|
-
title: string;
|
|
5
|
-
beltColor: string;
|
|
6
|
-
tokensTotal: number;
|
|
7
|
-
/** Absent when the caller has no rank to show — the pill is dropped, not zeroed. */
|
|
8
|
-
rank?: number;
|
|
9
|
-
streak: number;
|
|
10
|
-
longestStreak: number;
|
|
11
|
-
progressPercent: number;
|
|
12
|
-
estimatedCost: number;
|
|
13
|
-
followers?: number;
|
|
14
|
-
avatarUrl?: string;
|
|
15
|
-
toolBreakdown: {
|
|
16
|
-
claudeCode: number;
|
|
17
|
-
codex: number;
|
|
18
|
-
cursor: number;
|
|
19
|
-
};
|
|
20
|
-
models: Array<{
|
|
21
|
-
name: string;
|
|
22
|
-
tokens: number;
|
|
23
|
-
}>;
|
|
24
|
-
dailyActivity: Array<{
|
|
25
|
-
date: string;
|
|
26
|
-
tokens: number;
|
|
27
|
-
}>;
|
|
28
|
-
};
|
|
29
|
-
export declare function generateShareCard(data: ShareCardData): Promise<string>;
|
|
30
|
-
export declare function copyToClipboard(imagePath: string): Promise<boolean>;
|
|
31
|
-
//# sourceMappingURL=share-card.d.ts.map
|
package/dist/share-card.d.ts.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"share-card.d.ts","sourceRoot":"","sources":["../src/share-card.tsx"],"names":[],"mappings":"AAqCA,MAAM,MAAM,aAAa,GAAG;IAC1B,MAAM,EAAE,MAAM,CAAA;IACd,KAAK,EAAE,MAAM,CAAA;IACb,KAAK,EAAE,MAAM,CAAA;IACb,SAAS,EAAE,MAAM,CAAA;IACjB,WAAW,EAAE,MAAM,CAAA;IACnB,oFAAoF;IACpF,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,MAAM,EAAE,MAAM,CAAA;IACd,aAAa,EAAE,MAAM,CAAA;IACrB,eAAe,EAAE,MAAM,CAAA;IACvB,aAAa,EAAE,MAAM,CAAA;IACrB,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,aAAa,EAAE;QACb,UAAU,EAAE,MAAM,CAAA;QAClB,KAAK,EAAE,MAAM,CAAA;QACb,MAAM,EAAE,MAAM,CAAA;KACf,CAAA;IACD,MAAM,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,CAAC,CAAA;IAC/C,aAAa,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,CAAC,CAAA;CACvD,CAAA;AAweD,wBAAsB,iBAAiB,CAAC,IAAI,EAAE,aAAa,GAAG,OAAO,CAAC,MAAM,CAAC,CA4C5E;AAED,wBAAsB,eAAe,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CASzE"}
|