Skip to content

Commit 39ae293

Browse files
committed
Add paths utilities and update dependencies
1 parent 010b1cc commit 39ae293

File tree

8 files changed

+489
-17
lines changed

8 files changed

+489
-17
lines changed

package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -130,7 +130,7 @@
130130
"@socketregistry/is-interactive": "1.0.6",
131131
"@socketregistry/packageurl-js": "1.1.4",
132132
"@socketsecurity/config": "3.0.1",
133-
"@socketsecurity/registry": "1.3.7",
133+
"@socketsecurity/registry": "file:/Users/jdalton/projects/socket-registry/registry/socketsecurity-registry-1.3.7.tgz",
134134
"@socketsecurity/sdk": "1.8.5",
135135
"@types/cmd-shim": "5.0.2",
136136
"@types/js-yaml": "4.0.9",

pnpm-lock.yaml

Lines changed: 8 additions & 7 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

src/constants.mts

Lines changed: 52 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,10 @@ const BUN = regConsts.BUN
2626
const CHANGELOG_MD = regConsts.CHANGELOG_MD
2727
const CI = regConsts.CI
2828
const COLUMN_LIMIT = regConsts.COLUMN_LIMIT
29+
const CACHE_DIR = regConsts.CACHE_DIR
30+
const CACHE_GITHUB_DIR = regConsts.CACHE_GITHUB_DIR
31+
const CACHE_SOCKET_API_DIR = regConsts.CACHE_SOCKET_API_DIR
32+
const CACHE_TTL_DIR = regConsts.CACHE_TTL_DIR
2933
const DOT_GIT_DIR = regConsts.DOT_GIT_DIR
3034
const DOT_PACKAGE_LOCK_JSON = regConsts.DOT_PACKAGE_LOCK_JSON
3135
const DOT_SOCKET_DIR = regConsts.DOT_SOCKET_DIR
@@ -82,6 +86,7 @@ const REGISTRY = regConsts.REGISTRY
8286
const REGISTRY_SCOPE_DELIMITER = regConsts.REGISTRY_SCOPE_DELIMITER
8387
const RESOLUTIONS = regConsts.RESOLUTIONS
8488
const SOCKET_GITHUB_ORG = regConsts.SOCKET_GITHUB_ORG
89+
const SOCKET_CLI_APP_NAME = regConsts.SOCKET_CLI_APP_NAME
8590
const SOCKET_IPC_HANDSHAKE = regConsts.SOCKET_IPC_HANDSHAKE
8691
const SOCKET_OVERRIDE_SCOPE = regConsts.SOCKET_OVERRIDE_SCOPE
8792
const SOCKET_PUBLIC_API_TOKEN = regConsts.SOCKET_PUBLIC_API_TOKEN
@@ -216,6 +221,7 @@ const ALERT_TYPE_CVE = 'cve'
216221
const ALERT_TYPE_MEDIUM_CVE = 'mediumCVE'
217222
const ALERT_TYPE_MILD_CVE = 'mildCVE'
218223
const API_V0_URL = 'https://api.socket.dev/v0/'
224+
const CLI_DIR = 'cli'
219225
const CONFIG_KEY_API_BASE_URL = 'apiBaseUrl'
220226
const CONFIG_KEY_API_PROXY = 'apiProxy'
221227
const CONFIG_KEY_API_TOKEN = 'apiToken'
@@ -279,6 +285,7 @@ const REPORT_LEVEL_IGNORE = 'ignore'
279285
const REPORT_LEVEL_MONITOR = 'monitor'
280286
const REPORT_LEVEL_WARN = 'warn'
281287
const REQUIREMENTS_TXT = 'requirements.txt'
288+
const SEA_DIR = 'sea'
282289
const SEA_UPDATE_COMMAND = 'self-update'
283290
const SOCKET_CLI_ACCEPT_RISKS = 'SOCKET_CLI_ACCEPT_RISKS'
284291
const SOCKET_CLI_BIN_NAME = 'socket'
@@ -296,12 +303,18 @@ const SOCKET_JSON = 'socket.json'
296303
const SOCKET_WEBSITE_URL = 'https://socket.dev'
297304
const SOCKET_YAML = 'socket.yaml'
298305
const SOCKET_YML = 'socket.yml'
306+
const TMP_DIR = 'tmp'
299307
const TOKEN_PREFIX = 'sktsec_'
300308
const TOKEN_PREFIX_LENGTH = TOKEN_PREFIX.length
301309
const UPDATE_CHECK_TTL = 24 * 60 * 60 * 1_000
302310
const UPDATE_NOTIFIER_TIMEOUT = 10_000
303311
const UPDATE_STORE_DIR = '.socket/_socket'
304312
const UPDATE_STORE_FILE_NAME = 'update-store.json'
313+
const UPDATER_BACKUPS_DIR = 'backups'
314+
const UPDATER_DIR = 'updater'
315+
const UPDATER_DOWNLOADS_DIR = 'downloads'
316+
const UPDATER_STAGING_DIR = 'staging'
317+
const UPDATER_STATE_JSON = 'state.json'
305318
const V1_MIGRATION_GUIDE_URL = 'https://docs.socket.dev/docs/v1-migration-guide'
306319

307320
export type Constants = Remap<
@@ -315,10 +328,15 @@ export type Constants = Remap<
315328
readonly ALERT_TYPE_MEDIUM_CVE: typeof ALERT_TYPE_MEDIUM_CVE
316329
readonly ALERT_TYPE_MILD_CVE: typeof ALERT_TYPE_MILD_CVE
317330
readonly API_V0_URL: typeof API_V0_URL
331+
readonly CLI_DIR: typeof CLI_DIR
318332
readonly BUN: typeof BUN
319333
readonly BUN_LOCK: typeof BUN_LOCK
320334
readonly BUN_LOCKB: typeof BUN_LOCKB
321335
readonly CHANGELOG_MD: typeof CHANGELOG_MD
336+
readonly CACHE_DIR: typeof CACHE_DIR
337+
readonly CACHE_GITHUB_DIR: typeof CACHE_GITHUB_DIR
338+
readonly CACHE_SOCKET_API_DIR: typeof CACHE_SOCKET_API_DIR
339+
readonly CACHE_TTL_DIR: typeof CACHE_TTL_DIR
322340
readonly CONFIG_KEY_API_BASE_URL: typeof CONFIG_KEY_API_BASE_URL
323341
readonly CONFIG_KEY_API_PROXY: typeof CONFIG_KEY_API_PROXY
324342
readonly CONFIG_KEY_API_TOKEN: typeof CONFIG_KEY_API_TOKEN
@@ -337,6 +355,11 @@ export type Constants = Remap<
337355
readonly UPDATE_NOTIFIER_TIMEOUT: typeof UPDATE_NOTIFIER_TIMEOUT
338356
readonly UPDATE_STORE_DIR: typeof UPDATE_STORE_DIR
339357
readonly UPDATE_STORE_FILE_NAME: typeof UPDATE_STORE_FILE_NAME
358+
readonly UPDATER_BACKUPS_DIR: typeof UPDATER_BACKUPS_DIR
359+
readonly UPDATER_DIR: typeof UPDATER_DIR
360+
readonly UPDATER_DOWNLOADS_DIR: typeof UPDATER_DOWNLOADS_DIR
361+
readonly UPDATER_STAGING_DIR: typeof UPDATER_STAGING_DIR
362+
readonly UPDATER_STATE_JSON: typeof UPDATER_STATE_JSON
340363
readonly DRY_RUN_NOT_SAVING: typeof DRY_RUN_NOT_SAVING
341364
readonly EMPTY_VALUE: typeof EMPTY_VALUE
342365
readonly ENV: ENV
@@ -406,7 +429,9 @@ export type Constants = Remap<
406429
readonly REPORT_LEVEL_MONITOR: typeof REPORT_LEVEL_MONITOR
407430
readonly REPORT_LEVEL_WARN: typeof REPORT_LEVEL_WARN
408431
readonly REQUIREMENTS_TXT: typeof REQUIREMENTS_TXT
432+
readonly SEA_DIR: typeof SEA_DIR
409433
readonly RESOLUTIONS: typeof RESOLUTIONS
434+
readonly SOCKET_CLI_APP_NAME: typeof SOCKET_CLI_APP_NAME
410435
readonly SOCKET_CLI_ACCEPT_RISKS: typeof SOCKET_CLI_ACCEPT_RISKS
411436
readonly SOCKET_CLI_BIN_NAME: typeof SOCKET_CLI_BIN_NAME
412437
readonly SOCKET_CLI_GITHUB_REPO: typeof SOCKET_CLI_GITHUB_REPO
@@ -426,6 +451,7 @@ export type Constants = Remap<
426451
readonly SOCKET_WEBSITE_URL: typeof SOCKET_WEBSITE_URL
427452
readonly SOCKET_YAML: typeof SOCKET_YAML
428453
readonly SOCKET_YML: typeof SOCKET_YML
454+
readonly TMP_DIR: typeof TMP_DIR
429455
readonly TOKEN_PREFIX: typeof TOKEN_PREFIX
430456
readonly TOKEN_PREFIX_LENGTH: typeof TOKEN_PREFIX_LENGTH
431457
readonly TSCONFIG_JSON: typeof TSCONFIG_JSON
@@ -956,7 +982,12 @@ const constants: Constants = createConstantsObject(
956982
ALERT_TYPE_MEDIUM_CVE,
957983
ALERT_TYPE_MILD_CVE,
958984
API_V0_URL,
985+
CLI_DIR,
959986
BUN,
987+
CACHE_DIR,
988+
CACHE_GITHUB_DIR,
989+
CACHE_SOCKET_API_DIR,
990+
CACHE_TTL_DIR,
960991
CONFIG_KEY_API_BASE_URL,
961992
CONFIG_KEY_API_PROXY,
962993
CONFIG_KEY_API_TOKEN,
@@ -1028,6 +1059,8 @@ const constants: Constants = createConstantsObject(
10281059
REPORT_LEVEL_MONITOR,
10291060
REPORT_LEVEL_WARN,
10301061
REQUIREMENTS_TXT,
1062+
SEA_DIR,
1063+
SOCKET_CLI_APP_NAME,
10311064
SOCKET_CLI_ACCEPT_RISKS,
10321065
SOCKET_CLI_BIN_NAME,
10331066
SOCKET_CLI_GITHUB_REPO,
@@ -1044,11 +1077,17 @@ const constants: Constants = createConstantsObject(
10441077
SOCKET_WEBSITE_URL,
10451078
SOCKET_YAML,
10461079
SOCKET_YML,
1080+
TMP_DIR,
10471081
TOKEN_PREFIX,
10481082
TOKEN_PREFIX_LENGTH,
10491083
TSCONFIG_JSON,
10501084
UNKNOWN_ERROR,
10511085
UNKNOWN_VALUE,
1086+
UPDATER_BACKUPS_DIR,
1087+
UPDATER_DIR,
1088+
UPDATER_DOWNLOADS_DIR,
1089+
UPDATER_STAGING_DIR,
1090+
UPDATER_STATE_JSON,
10521091
V1_MIGRATION_GUIDE_URL,
10531092
VLT,
10541093
YARN,
@@ -1226,6 +1265,10 @@ export {
12261265
ALERT_TYPE_MEDIUM_CVE,
12271266
ALERT_TYPE_MILD_CVE,
12281267
API_V0_URL,
1268+
CACHE_DIR,
1269+
CACHE_GITHUB_DIR,
1270+
CACHE_SOCKET_API_DIR,
1271+
CACHE_TTL_DIR,
12291272
CONFIG_KEY_API_BASE_URL,
12301273
CONFIG_KEY_API_PROXY,
12311274
CONFIG_KEY_API_TOKEN,
@@ -1292,6 +1335,15 @@ export {
12921335
REPORT_LEVEL_MONITOR,
12931336
REPORT_LEVEL_WARN,
12941337
REQUIREMENTS_TXT,
1338+
CLI_DIR,
1339+
SEA_DIR,
1340+
TMP_DIR,
1341+
UPDATER_BACKUPS_DIR,
1342+
UPDATER_DIR,
1343+
UPDATER_DOWNLOADS_DIR,
1344+
UPDATER_STAGING_DIR,
1345+
UPDATER_STATE_JSON,
1346+
SOCKET_CLI_APP_NAME,
12951347
SOCKET_CLI_ACCEPT_RISKS,
12961348
SOCKET_CLI_BIN_NAME,
12971349
SOCKET_CLI_GITHUB_REPO,

src/utils/github.mts

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -43,6 +43,7 @@ import { parseUrl } from '@socketsecurity/registry/lib/url'
4343

4444
import { debugDir, debugFn, isDebug } from './debug.mts'
4545
import { formatErrorWithDetail } from './errors.mts'
46+
import { getSocketCliGithubCacheDir } from './paths.mts'
4647
import constants from '../constants.mts'
4748

4849
import type { components } from '@octokit/openapi-types'
@@ -56,7 +57,8 @@ async function readCache(
5657
// 5 minute in milliseconds time to live (TTL).
5758
ttlMs = 5 * 60 * 1000,
5859
): Promise<JsonContent | undefined> {
59-
const cacheJsonPath = path.join(constants.githubCachePath, `${key}.json`)
60+
const githubCachePath = getSocketCliGithubCacheDir()
61+
const cacheJsonPath = path.join(githubCachePath, `${key}.json`)
6062
const stat = safeStatsSync(cacheJsonPath)
6163
if (stat) {
6264
const isExpired = Date.now() - Number(stat.mtimeMs) > ttlMs
@@ -71,7 +73,7 @@ export async function writeCache(
7173
key: string,
7274
data: JsonContent,
7375
): Promise<void> {
74-
const { githubCachePath } = constants
76+
const githubCachePath = getSocketCliGithubCacheDir()
7577
const cacheJsonPath = path.join(githubCachePath, `${key}.json`)
7678
if (!existsSync(githubCachePath)) {
7779
await fs.mkdir(githubCachePath, { recursive: true })

src/utils/github.test.mts

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -16,11 +16,14 @@ vi.mock('@socketsecurity/registry/lib/fs', () => ({
1616
writeJson: vi.fn(),
1717
}))
1818

19+
vi.mock('./paths.mts', () => ({
20+
getSocketCliGithubCacheDir: vi.fn(() => '/cache/github'),
21+
}))
22+
1923
vi.mock('../constants.mts', () => {
2024
const kInternalsSymbol = Symbol.for('kInternalsSymbol')
2125
return {
2226
default: {
23-
githubCachePath: '/cache/github',
2427
ENV: {
2528
DISABLE_GITHUB_CACHE: false,
2629
},
@@ -144,7 +147,6 @@ describe('github utilities', () => {
144147
const kInternalsSymbol = Symbol.for('kInternalsSymbol')
145148
vi.doMock('../constants.mts', () => ({
146149
default: {
147-
githubCachePath: '/cache/github',
148150
ENV: {
149151
DISABLE_GITHUB_CACHE: true,
150152
},

src/utils/paths.mts

Lines changed: 119 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,119 @@
1+
/**
2+
* Path utilities for Socket CLI directories.
3+
* Provides platform-aware path resolution for Socket CLI's directory structure.
4+
*
5+
* Directory Structure:
6+
* ~/.socket/_socket/
7+
* ├── cache/ttl/
8+
* │ ├── github/ # GitHub API cache
9+
* │ └── socket-api/ # Socket API cache
10+
* ├── cli/ # CLI-specific files
11+
* ├── sea/ # Single Executable Application build artifacts
12+
* ├── tmp/ # Temporary files
13+
* └── updater/ # CLI updater files
14+
* ├── backups/ # Backup files
15+
* ├── downloads/ # Downloaded updates
16+
* ├── staging/ # Staged updates
17+
* └── state.json # Updater state
18+
*/
19+
20+
import path from 'node:path'
21+
22+
import {
23+
getSocketAppCacheDir,
24+
getSocketAppCacheTtlDir,
25+
getSocketCliDir,
26+
} from '@socketsecurity/registry/lib/paths'
27+
28+
import constants from '../constants.mts'
29+
30+
/**
31+
* Get the Socket CLI base directory (~/.socket/_socket).
32+
*/
33+
export function getSocketCliBaseDir(): string {
34+
return getSocketCliDir()
35+
}
36+
37+
/**
38+
* Get the Socket CLI cache directory (~/.socket/_socket/cache).
39+
*/
40+
export function getSocketCliCacheDir(): string {
41+
return getSocketAppCacheDir(constants.SOCKET_CLI_APP_NAME)
42+
}
43+
44+
/**
45+
* Get the Socket CLI TTL cache directory (~/.socket/_socket/cache/ttl).
46+
*/
47+
export function getSocketCliCacheTtlDir(): string {
48+
return getSocketAppCacheTtlDir(constants.SOCKET_CLI_APP_NAME)
49+
}
50+
51+
/**
52+
* Get the Socket CLI GitHub cache directory (~/.socket/_socket/cache/ttl/github).
53+
*/
54+
export function getSocketCliGithubCacheDir(): string {
55+
return path.join(getSocketCliCacheTtlDir(), constants.CACHE_GITHUB_DIR)
56+
}
57+
58+
/**
59+
* Get the Socket CLI Socket API cache directory (~/.socket/_socket/cache/ttl/socket-api).
60+
*/
61+
export function getSocketCliSocketApiCacheDir(): string {
62+
return path.join(getSocketCliCacheTtlDir(), constants.CACHE_SOCKET_API_DIR)
63+
}
64+
65+
/**
66+
* Get the Socket CLI directory (~/.socket/_socket/cli).
67+
*/
68+
export function getSocketCliCliDir(): string {
69+
return path.join(getSocketCliBaseDir(), constants.CLI_DIR)
70+
}
71+
72+
/**
73+
* Get the Socket CLI SEA directory (~/.socket/_socket/sea).
74+
*/
75+
export function getSocketCliSeaDir(): string {
76+
return path.join(getSocketCliBaseDir(), constants.SEA_DIR)
77+
}
78+
79+
/**
80+
* Get the Socket CLI temporary directory (~/.socket/_socket/tmp).
81+
*/
82+
export function getSocketCliTmpDir(): string {
83+
return path.join(getSocketCliBaseDir(), constants.TMP_DIR)
84+
}
85+
86+
/**
87+
* Get the Socket CLI updater directory (~/.socket/_socket/updater).
88+
*/
89+
export function getSocketCliUpdaterDir(): string {
90+
return path.join(getSocketCliBaseDir(), constants.UPDATER_DIR)
91+
}
92+
93+
/**
94+
* Get the Socket CLI updater downloads directory (~/.socket/_socket/updater/downloads).
95+
*/
96+
export function getSocketCliUpdaterDownloadsDir(): string {
97+
return path.join(getSocketCliUpdaterDir(), constants.UPDATER_DOWNLOADS_DIR)
98+
}
99+
100+
/**
101+
* Get the Socket CLI updater backups directory (~/.socket/_socket/updater/backups).
102+
*/
103+
export function getSocketCliUpdaterBackupsDir(): string {
104+
return path.join(getSocketCliUpdaterDir(), constants.UPDATER_BACKUPS_DIR)
105+
}
106+
107+
/**
108+
* Get the Socket CLI updater staging directory (~/.socket/_socket/updater/staging).
109+
*/
110+
export function getSocketCliUpdaterStagingDir(): string {
111+
return path.join(getSocketCliUpdaterDir(), constants.UPDATER_STAGING_DIR)
112+
}
113+
114+
/**
115+
* Get the Socket CLI updater state file path (~/.socket/_socket/updater/state.json).
116+
*/
117+
export function getSocketCliUpdaterStateJsonPath(): string {
118+
return path.join(getSocketCliUpdaterDir(), constants.UPDATER_STATE_JSON)
119+
}

0 commit comments

Comments
 (0)