-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathipc-cli.ts
More file actions
85 lines (72 loc) · 2.82 KB
/
ipc-cli.ts
File metadata and controls
85 lines (72 loc) · 2.82 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
/**
* @fileoverview Socket CLI child-process IPC object getter.
* Lazily builds an `IpcObject` from `SOCKET_CLI_*` environment variables so
* child processes can read flags and tokens forwarded by the parent Socket
* CLI without re-parsing `process.env` each call. Complements the filesystem
* stub IPC in `@socketsecurity/lib/ipc` (`getIpcStubPath`, `writeIpcStub`)
* for cases where data exceeds env-var size limits.
*/
export interface IpcObject {
SOCKET_CLI_FIX?: string | undefined
SOCKET_CLI_OPTIMIZE?: boolean | undefined
SOCKET_CLI_SHADOW_ACCEPT_RISKS?: boolean | undefined
SOCKET_CLI_SHADOW_API_TOKEN?: string | undefined
SOCKET_CLI_SHADOW_BIN?: string | undefined
SOCKET_CLI_SHADOW_PROGRESS?: boolean | undefined
SOCKET_CLI_SHADOW_SILENT?: boolean | undefined
}
let _ipcObject: IpcObject | undefined
/**
* Get IPC data forwarded by a parent Socket CLI via `SOCKET_CLI_*` env vars.
* Call without arguments to receive the full frozen `IpcObject`, or pass a
* key to read a single field. The object is lazily built and cached; keys
* that weren't set in the environment are returned as `undefined`.
*
* @param key - Optional `IpcObject` field name to read
* @returns The full `IpcObject` or the value at `key` (possibly `undefined`).
*/
export async function getIpc(): Promise<IpcObject>
export async function getIpc<K extends keyof IpcObject>(
key: K,
): Promise<IpcObject[K]>
export async function getIpc(
key?: keyof IpcObject,
): Promise<IpcObject | IpcObject[keyof IpcObject]> {
if (_ipcObject === undefined) {
_ipcObject = {}
// Check for IPC environment variables.
const { env } = process
if (env['SOCKET_CLI_FIX']) {
_ipcObject.SOCKET_CLI_FIX = env['SOCKET_CLI_FIX']
}
if (env['SOCKET_CLI_OPTIMIZE']) {
_ipcObject.SOCKET_CLI_OPTIMIZE =
env['SOCKET_CLI_OPTIMIZE'] === 'true' ||
env['SOCKET_CLI_OPTIMIZE'] === '1'
}
if (env['SOCKET_CLI_SHADOW_ACCEPT_RISKS']) {
_ipcObject.SOCKET_CLI_SHADOW_ACCEPT_RISKS =
env['SOCKET_CLI_SHADOW_ACCEPT_RISKS'] === 'true' ||
env['SOCKET_CLI_SHADOW_ACCEPT_RISKS'] === '1'
}
if (env['SOCKET_CLI_SHADOW_API_TOKEN']) {
_ipcObject.SOCKET_CLI_SHADOW_API_TOKEN =
env['SOCKET_CLI_SHADOW_API_TOKEN']
}
if (env['SOCKET_CLI_SHADOW_BIN']) {
_ipcObject.SOCKET_CLI_SHADOW_BIN = env['SOCKET_CLI_SHADOW_BIN']
}
if (env['SOCKET_CLI_SHADOW_PROGRESS']) {
_ipcObject.SOCKET_CLI_SHADOW_PROGRESS =
env['SOCKET_CLI_SHADOW_PROGRESS'] === 'true' ||
env['SOCKET_CLI_SHADOW_PROGRESS'] === '1'
}
if (env['SOCKET_CLI_SHADOW_SILENT']) {
_ipcObject.SOCKET_CLI_SHADOW_SILENT =
env['SOCKET_CLI_SHADOW_SILENT'] === 'true' ||
env['SOCKET_CLI_SHADOW_SILENT'] === '1'
}
Object.freeze(_ipcObject)
}
return key ? _ipcObject[key] : _ipcObject
}