Skip to content

Commit c9d5dcc

Browse files
committed
patch for new settings endpoint
1 parent 716ab63 commit c9d5dcc

File tree

3 files changed

+54
-30
lines changed

3 files changed

+54
-30
lines changed

lib/commands/login/index.js

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -57,22 +57,22 @@ export const login = {
5757

5858
const spinner = ora('Verifying API key...').start()
5959

60-
/** @type {import('@socketsecurity/sdk').SocketSdkReturnType<'getSettings'>['data']} */
61-
let settings
60+
/** @type {import('@socketsecurity/sdk').SocketSdkReturnType<'getOrganizations'>['data']} */
61+
let orgs
6262

6363
try {
6464
const sdk = await setupSdk(apiKey)
65-
const result = await sdk.getSettings()
65+
const result = await sdk.getOrganizations()
6666
if (!result.success) throw new AuthError()
67-
settings = result.data
67+
orgs = result.data
6868
spinner.succeed('API key verified\n')
6969
} catch (e) {
7070
spinner.fail('Invalid API key')
7171
return
7272
}
7373

7474
/** @type {prompts.Choice[]} */
75-
const enforcedChoices = Object.values(settings.organizations)
75+
const enforcedChoices = Object.values(orgs.organizations)
7676
.filter(org => org.plan.tier === 'enterprise')
7777
.map(org => ({
7878
title: org.name,

lib/shadow/npm-injection.cjs

Lines changed: 48 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -37,15 +37,21 @@ try {
3737
const pubTokenPromise = sdkPromise.then(({ getDefaultKey, FREE_API_KEY }) => getDefaultKey() || FREE_API_KEY)
3838
const apiKeySettingsPromise = sdkPromise.then(async ({ setupSdk }) => {
3939
const sdk = await setupSdk()
40-
const result = await sdk.getSettings()
40+
const orgResult = await sdk.getOrganizations()
41+
if (!orgResult.success) throw new Error('failed to fetch organizations info')
42+
const orgs = Object.values(orgResult.data.organizations)
43+
const result = await sdk.postSettings(orgs.map(id => ({ organization: id })))
4144
if (!result.success) throw new Error('failed to fetch API key settings')
42-
return result.data
45+
return {
46+
orgs,
47+
settings: result.data
48+
}
4349
})
4450

4551
/** @type {Promise<{ defaultRules: import('../utils/settings.js').IssueRules, orgRules: { id: string, issueRules: import('../utils/settings.js').IssueRules }[] }>} */
46-
const orgSettingsPromise = settingsPromise.then(async ({ getSetting, updateSetting }) => {
52+
const orgSettingsPromise = settingsPromise.then(async ({ getSetting }) => {
4753
const enforcedOrgs = getSetting('enforcedOrgs')
48-
const settings = await apiKeySettingsPromise
54+
const { orgs, settings } = await apiKeySettingsPromise
4955

5056
/**
5157
* @param {import('../utils/settings.js').IssueRules[string]} rule
@@ -80,32 +86,50 @@ const orgSettingsPromise = settingsPromise.then(async ({ getSetting, updateSetti
8086
return merged
8187
}
8288

83-
const mergeDefaults = (rules) => {
84-
const out = { ...rules }
85-
for (const rule in settings.defaultIssueRules) {
86-
const defaultedRule = out[rule]
87-
if (
88-
!(rule in out) || (
89-
typeof defaultedRule === 'object' &&
90-
defaultedRule.action === 'defer'
91-
)) {
92-
out[rule] = settings.defaultIssueRules[rule]
93-
}
89+
const mergeDefaults = (a, b) => {
90+
const merged = { ...a }
91+
for (const rule in b) {
92+
const defaultedRule = merged[rule]
93+
if (
94+
!(rule in merged) || (
95+
typeof defaultedRule === 'object' &&
96+
defaultedRule.action === 'defer'
97+
)) {
98+
merged[rule] = b[rule]
99+
}
100+
}
101+
return merged
102+
}
103+
104+
/** @type {Record<string, import('../utils/settings.js').IssueRules>} */
105+
const baseOrgRules = {}
106+
for (let i = 0; i < orgs.length; ++i) {
107+
const orgID = orgs[i].id
108+
const entry = settings.entries[i]
109+
/** @type {import('../utils/settings.js').IssueRules} */
110+
let issueRules = {}
111+
let target = entry.start
112+
while (target !== null) {
113+
issueRules = mergeDefaults(issueRules, entry.settings[target].issueRules)
114+
target = entry.settings[target].deferTo
94115
}
95-
return out
116+
baseOrgRules[orgID] = issueRules
96117
}
97118

119+
const defaults = settings.defaults.issueRules
120+
98121
const enforcedRules = enforcedOrgs
99-
.map(org => settings.organizations[org])
122+
.map(org => baseOrgRules[org])
123+
.filter(rules => rules)
100124
.reduce((a, b) => mergeRules(a, b))
101125

102126
return {
103-
defaultRules: mergeDefaults(enforcedRules),
104-
orgRules: Object.values(settings.organizations).map(({ id, name, issueRules }) => {
127+
defaultRules: mergeDefaults(enforcedRules, defaults),
128+
orgRules: orgs.map(({ id, name }) => {
105129
return {
106130
id,
107131
name,
108-
issueRules: mergeDefaults(mergeRules(issueRules, enforcedRules))
132+
issueRules: mergeDefaults(mergeRules(baseOrgRules[id], enforcedRules), defaults)
109133
}
110134
})
111135
}
@@ -450,13 +474,13 @@ async function packagesHaveRiskyIssues (registry, pkgs, ora = null, input, outpu
450474
const pkgDatas = []
451475
try {
452476
const orgSettings = await orgSettingsPromise
453-
if (orgSettings.length > 1) {
477+
if (orgSettings.orgRules.length > 1) {
454478
throw new Error('multi-organization API keys not supported')
455479
}
456480
// TODO: determine org based on cwd
457-
const rules = orgSettings.length
458-
? orgSettings[0].issueRules
459-
: (await apiKeySettingsPromise).defaultIssueRules
481+
const rules = orgSettings.orgRules.length
482+
? orgSettings.orgRules[0].issueRules
483+
: orgSettings.defaultRules
460484

461485
for await (const pkgData of batchScan(pkgs.map(pkg => pkg.pkgid))) {
462486
let failures = []

lib/utils/settings.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@ if (!dataHome) {
2020
const settingsPath = path.join(dataHome, 'socket', 'settings')
2121

2222
/**
23-
* @typedef {import('@socketsecurity/sdk').SocketSdkReturnType<'getSettings'>['data']['organizations'][string]['issueRules']} IssueRules
23+
* @typedef {Record<string, boolean | {action: 'error' | 'warn' | 'ignore' | 'defer'}>} IssueRules
2424
*/
2525

2626
/** @type {{apiKey?: string | null, enforcedOrgs?: string[] | null}} */

0 commit comments

Comments
 (0)