Download src/utils/secureStorage/plainTextStorage.ts from chenbhao/codev: direct link, hf CLI and curl.
- Browser
- Download file 2.43 kB
-
https://huggingface.co/chenbhao/codev/resolve/1ef6a2fc518bfb19ebd317a47d69a6778bcd49fa/src/utils/secureStorage/plainTextStorage.ts
- Command line
-
hf download hf://chenbhao/codev@1ef6a2fc518bfb19ebd317a47d69a6778bcd49fa/src/utils/secureStorage/plainTextStorage.ts
-
curl -L -o plainTextStorage.ts https://huggingface.co/chenbhao/codev/resolve/1ef6a2fc518bfb19ebd317a47d69a6778bcd49fa/src/utils/secureStorage/plainTextStorage.ts
2.43 kB
| import { chmodSync } from 'fs' | |
| import { join } from 'path' | |
| import { getClaudeConfigHomeDir } from '../envUtils.js' | |
| import { getErrnoCode } from '../errors.js' | |
| import { getFsImplementation } from '../fsOperations.js' | |
| import { | |
| jsonParse, | |
| jsonStringify, | |
| writeFileSync_DEPRECATED, | |
| } from '../slowOperations.js' | |
| import type { SecureStorage, SecureStorageData } from './types.js' | |
| function getStoragePath(): { storageDir: string; storagePath: string } { | |
| const storageDir = getClaudeConfigHomeDir() | |
| const storageFileName = '.credentials.json' | |
| return { storageDir, storagePath: join(storageDir, storageFileName) } | |
| } | |
| export const plainTextStorage = { | |
| name: 'plaintext', | |
| read(): SecureStorageData | null { | |
| // sync IO: called from sync context (SecureStorage interface) | |
| const { storagePath } = getStoragePath() | |
| try { | |
| const data = getFsImplementation().readFileSync(storagePath, { | |
| encoding: 'utf8', | |
| }) | |
| return jsonParse(data) | |
| } catch { | |
| return null | |
| } | |
| }, | |
| async readAsync(): Promise<SecureStorageData | null> { | |
| const { storagePath } = getStoragePath() | |
| try { | |
| const data = await getFsImplementation().readFile(storagePath, { | |
| encoding: 'utf8', | |
| }) | |
| return jsonParse(data) | |
| } catch { | |
| return null | |
| } | |
| }, | |
| update(data: SecureStorageData): { success: boolean; warning?: string } { | |
| // sync IO: called from sync context (SecureStorage interface) | |
| try { | |
| const { storageDir, storagePath } = getStoragePath() | |
| try { | |
| getFsImplementation().mkdirSync(storageDir) | |
| } catch (e: unknown) { | |
| const code = getErrnoCode(e) | |
| if (code !== 'EEXIST') { | |
| throw e | |
| } | |
| } | |
| writeFileSync_DEPRECATED(storagePath, jsonStringify(data), { | |
| encoding: 'utf8', | |
| flush: false, | |
| }) | |
| chmodSync(storagePath, 0o600) | |
| return { | |
| success: true, | |
| warning: 'Warning: Storing credentials in plaintext.', | |
| } | |
| } catch { | |
| return { success: false } | |
| } | |
| }, | |
| delete(): boolean { | |
| // sync IO: called from sync context (SecureStorage interface) | |
| const { storagePath } = getStoragePath() | |
| try { | |
| getFsImplementation().unlinkSync(storagePath) | |
| return true | |
| } catch (e: unknown) { | |
| const code = getErrnoCode(e) | |
| if (code === 'ENOENT') { | |
| return true | |
| } | |
| return false | |
| } | |
| }, | |
| } satisfies SecureStorage | |