Codex Security TypeScript SDK
TypeScript'ten Codex Security taramaları çalıştırın, hedefleri ve sağlayıcıları seçin, sonuçları inceleyin ve tarama yaşam döngüsünü yönetin.
Uygulamanızdan veya geliştirici aracınızdan depolarda ve kod değişikliklerinde güvenlik taramaları çalıştırmak için Codex Security TypeScript SDK'yı kullanın. SDK, türü belirlenmiş bulgular, kapsam ayrıntıları ve tarama yapıtlarının yollarını döndürür. Daha uzun taramalar için ön denetimleri, maliyet sınırlarını, ilerleme geri çağırmalarını ve iptali destekler.
SDK, ECMAScript modüllerini (ESM) kullanır ve Node.js 22 veya üzeriyle sunucu tarafında çalışır. Tarama için ayrıca Python 3.10 veya üzeri gerekir.
SDK'yı ayarlama
SDK'yı yükleyin:
npm install @openai/codex-securityBir tarama başlatmadan önce OPENAI_API_KEY veya CODEX_API_KEY ayarlayın, dosya destekli mevcut bir Codex oturumu kullanın ya da AWS kimlik bilgileriyle ve açık model_provider ile model geçersiz kılmalarıyla Amazon Bedrock'ı yapılandırın.
En iyi sonuçlar için Trusted Access for Cyber kapsamında doğrulanmış bir hesap kullanın. Oturum açmak veya API key sağlamak Trusted Access vermez.
Tarama çalıştırma
Tek bir CodexSecurity istemcisi oluşturun, standart bir depo taraması çalıştırın ve iş tamamlandığında istemciyi kapatın. Kapsayan Git worktree'nin dışında özel bir sonuç dizini seçmek için outputDir iletin.
outputDir değerini belirtmezseniz Codex Security sonuçları kendi kalıcı durum dizinine kaydeder. Sonuçlar kaynak alıntıları ve güvenlik açığı ayrıntıları içerebilir; bu nedenle uygun izinleri ve saklama politikalarını seçin.
const security = new CodexSecurity();
try {
const result = await security.run("/path/to/repository", {
outputDir: "/path/outside/repository/results",
});
console.log(result.reportPath);
console.log(result.coverage.completeness);
console.log(result.findings.findings.length);
} finally {
await security.close();
}run taramayı başlatır, tamamlanmasını bekler, mühürlenmiş yapıtları doğrular ve bir ScanResult döndürür. close yalıtılmış çalışma zamanını serbest bırakır ve yinelenen çağrıları destekler.
Girdileri ön denetimle kontrol etme
Taramayı başlatmadan önce bir depoyu, hedefi, modu, çıktı konumunu ve Codex yapılandırmasını kontrol etmek için preflight kullanın:
const plan = await security.preflight("/path/to/repository", {
target: ["services/billing", "packages/auth"],
outputDir: "/path/outside/repository/results",
});
console.log(plan.repository);
console.log(plan.target.kind);
console.log(plan.mode);
console.log(plan.outputDir);Ön denetim, Codex çalışma zamanına ve kimlik bilgilerine dokunmaz. Eklenti ve Python keşfini de taramanın kendisine bırakır. Bu sayede ön denetim, uzun süren veya kimlik bilgisi gerektiren bir işlemden önce kullanıcı girdisini kontrol etmek için kullanışlıdır.
Mevcut bir sonuç dizininin arşivlenmesini önizlemek için archiveExisting: true ayarlayın:
const plan = await security.preflight("/path/to/repository", {
outputDir: "/path/outside/repository/results",
archiveExisting: true,
});
console.log(plan.archiveDir);Döndürülen archiveDir, arşiv adlandırmasını önizler. run kendi benzersiz hedefini oluşturduğundan son yol farklı olabilir. Gerçek arşiv yolunu onOutputArchived ile yakalayın:
await security.run("/path/to/repository", {
outputDir: "/path/outside/repository/results",
archiveExisting: true,
onOutputArchived(archiveDir) {
console.log("Archived results:", archiveDir);
},
});Tarama önceki sonuçları arşivler ve boş bir çıktı diziniyle başlar.
Tarama hedefi seçme
SDK; depo, yol, commit edilmiş fark ve çalışma ağacı hedeflerini destekler. Varsayılan hedef deponun tamamıdır.
Seçili yolları tarama
Depo içindeki yolları bir dizi olarak iletin:
const result = await security.run("/path/to/repository", {
target: ["services/billing", "packages/auth"],
});Yollar dosyaları veya dizinleri belirtebilir. SDK her yolu depo içinde çözümler ve yinelenenleri kaldırır.
Commit edilmiş değişiklikleri tarama
Yerel olarak kullanılabilen iki Git revizyonu arasındaki commit edilmiş değişiklikleri taramak için DiffTarget.refs kullanın:
const target = DiffTarget.refs({
base: "origin/main",
head: "HEAD",
});
const result = await security.run("/path/to/repository", { target });Head varsayılan olarak HEAD değerini alır. Fark hedefleri, depo bağımsız değişkeninin Git worktree kökü olmasını gerektirir.
Çalışma ağacını tarama
Bir base revizyona göre staged ve unstaged değişiklikleri taramak için DiffTarget.workingTree kullanın:
const target = DiffTarget.workingTree({ base: "HEAD" });
const result = await security.run("/path/to/repository", { target });Base varsayılan olarak HEAD değerini alır. Fark veya çalışma ağacı taraması başlatmadan önce seçili revizyonları fetch edin.
Derin modu seçme
Daha geniş bir inceleme gerektiren depo veya yol taraması için mode: "deep" ayarlayın:
const result = await security.run("/path/to/repository", {
target: ["services/billing"],
mode: "deep",
});Derin mod, depo ve yol hedeflerini destekler. Fark ve çalışma ağacı taramaları için standart modu kullanın.
Güvenlik bilgi tabanı ekleme
Mimari belgeleri, tehdit modellerini veya güvenlik politikalarını knowledgeBasePaths üzerinden iletin:
const result = await security.run("/path/to/repository", {
knowledgeBasePaths: [
"/path/to/architecture.md",
"/path/to/security-policies",
],
});SDK dosyaları veya dizinleri kabul eder ve dizinleri özyinelemeli olarak arar. Desteklenen belge biçimleri .md, .markdown, .txt, .pdf ve .docx biçimleridir. SDK bağlantılı girdi yollarını reddeder, bağlantılı dizin girdilerini atlar ve ayıklanan belge içeriğini kaydedilmiş tarama sonuçlarının dışında tutar.
Tarama bütçesi belirleme
Tahmini model maliyeti bir sınırı aştığında taramayı durdurmak için maxCostUsd ayarlayın. Tarama çalışırken maliyeti izlemek için onCost kullanın:
const result = await security.run("/path/to/repository", {
maxCostUsd: 5,
onCost(cost) {
console.log(cost.estimatedUsd);
},
});
console.log(result.cost?.estimatedUsd);Sınır bir tahmindir, kesin bir harcama üst sınırı değildir. Devam eden istekler sınırın üzerinde tamamlanabilir. Tarama sınırı aşarsa SDK ScanCostLimitExceededError fırlatır ve mevcut sonuçları korur.
Tarama sonuçlarıyla çalışma
ScanResult, yapılandırılmış belgeleri, tarama meta verilerini ve yapıt yollarını sunar:
| Özellik | İçerik |
|---|---|
manifest |
Hedef, kapsam, üretici ve yapıt kayıtlarını içeren mühürlenmiş tarama manifesti. |
findings |
Bulgular belgesi. Bulgu nesnelerini findings.findings içinden okuyun. |
coverage |
İncelenen yüzeyler, hariç tutmalar, ertelenen işler, açık sorular ve eksiksizlik. |
scanDir |
Tarama dizini. |
threadId |
Taramanın Codex ileti dizisi tanımlayıcısı. |
turnResult |
Tur durumu, yanıt ve kullanılabilir kullanım meta verileri. |
cost |
Tahmini model ve token maliyeti veya kullanılamıyorsa null. |
reportPath |
report.md yolu. |
manifestPath |
scan-manifest.json yolu. |
findingsPath |
findings.json yolu. |
coveragePath |
coverage.json yolu. |
artifactsDir |
Destekleyici yapıtlar dizini. |
sarifPath |
Oluşturulan SARIF yolu veya SARIF yoksa null. |
pluginVersion |
Tarama üreticisi tarafından kaydedilen sürüm. |
Yapılandırılmış bulguları ve kapsamı doğrudan kullanın:
for (const finding of result.findings.findings) {
const location = finding.locations[0];
if (location === undefined) continue;
console.log(
finding.severity.level,
`${location.path}:${location.startLine}`,
finding.title
);
}
for (const deferred of result.coverage.deferred) {
console.log(deferred.id, deferred.reason);
}Kapsam eksiksizliği complete, partial veya unknown değeridir. Bir taramayı güvenlik kararına kanıt olarak kullanmadan önce ertelenmiş yüzeyleri, hariç tutmaları ve açık soruları inceleyin.
result.toJSON(); manifesti, bulguları, kapsamı, tarama ve ileti dizisi tanımlayıcılarını, reportPath, artifactsDir, sarifPath ve tur meta verilerini JSON'a hazır tek bir nesnede döndürür.
Taramayı izleme veya iptal etme
Taramanın başlamasını, çalışan ilerlemesini ve bağlantı yeniden denemelerini bildirmek için ScanOptions geri çağırmalarını iletin:
const result = await security.run("/path/to/repository", {
outputDir: "/path/outside/repository/results",
onScanStarted() {
console.log("Scan started");
},
onWorkerStatus(status) {
console.log(status.kind, status);
},
onReconnect(attempt, maxAttempts) {
console.log(`Reconnect attempt ${attempt} of ${maxAttempts}`);
},
onObserverError(observer, error) {
console.error(`${observer} failed`, error);
},
});
console.log(result.reportPath);İptal bir istekten, iş denetleyicisinden veya zaman aşımından kaynaklandığında bir AbortSignal iletin:
const controller = new AbortController();
try {
const scan = security.run("/path/to/repository", {
outputDir: "/path/outside/repository/results",
signal: controller.signal,
});
controller.abort();
await scan;
} catch (error) {
if (error instanceof ScanInterruptedError) {
console.error(error.scanDir);
} else {
throw error;
}
}Yarıda kesilen bir tarama, scanDir içinde kısmi çıktı bırakabilir. Sonucun incelenmesi gerektiğinde bu dizini koruyun.
Tarama kurulum ilerlemesini gösteren uygulamalar, ScanOptions yaşam döngüsü geri çağırmalarını da kullanabilir:
| Geri çağırma | Çağrıldığı durum |
|---|---|
onOutputArchived(archiveDir) |
Mevcut sonuçlar arşiv dizinine taşındığında. |
onOutputDirReady(scanDir) |
Özel tarama dizini hazır olduğunda. |
onScanStarted() |
Tarama kurulumu tamamlanıp yürütme başladığında. |
onReconnect(attempt, maxAttempts) |
SDK bağlantısı kesilen tarama akışını yeniden denediğinde. |
onWorkerStatus(status) |
Çalışan ön denetimi veya gönderim durumu değiştiğinde. |
onCost(cost) |
Güncellenmiş tahmini tarama maliyeti kullanılabilir olduğunda. |
onObserverError(observer, error) |
Başka bir tarama yaşam döngüsü geri çağırması hata oluşturduğunda. |
Çalışma zamanını ve kimlik bilgilerini yapılandırma
Belirli bir eklentiye, yorumlayıcıya veya Codex ayarına ihtiyaç duyduğunuzda çalışma zamanı yapılandırmasını iletin:
const security = new CodexSecurity({
pluginPath: "/path/to/codex-security-plugin",
pythonPath: "/path/to/python",
codexOverrides: {
model: "gpt-5.6-terra",
model_reasoning_effort: "high",
},
});pluginPath bir eklenti dizinini veya ZIP'i kabul eder. pythonPath eklenti yorumlayıcısını seçer. codexOverrides desteklenen değerleri yalıtılmış Codex yapılandırmasıyla birleştirir. Taramalar varsayılan olarak extra-high akıl yürütme çabasıyla gpt-5.6-sol kullanır. Farklı bir model veya akıl yürütme çabası kullanmak için codexOverrides içinde model ve model_reasoning_effort ayarlayın. Amazon Bedrock kullanmak için codexOverrides içinde model_provider ve model ayarlayın.
İstemci, desteklenen kimlik doğrulama yöntemlerini de sunar:
| Yöntem | Amaç |
|---|---|
loginApiKey(apiKey) |
Yalıtılmış çalışma zamanının kimliğini bir API key ile doğrulamak. |
loginChatGPT() |
Tarayıcı oturum açma akışı başlatıp bir oturum açma tanıtıcısı döndürmek. |
loginChatGPTDeviceCode() |
Cihaz koduyla oturum açma akışı başlatıp bir oturum açma tanıtıcısı döndürmek. |
account() |
Geçerli kimlik doğrulama durumunu döndürmek. |
logout() |
Yalıtılmış kimlik doğrulamayı temizlemek. |
Bir oturum açma tanıtıcısı waitForInstructions, authUrl, verificationUrl, userCode, wait ve cancel sağlar; böylece uygulama seçili oturum açma akışını sunup tamamlayabilir. SDK, dosya destekli bir Codex oturumunu yeniden kullanabilir. API key'ler CI ve sunucu tarafı otomasyonu için uygundur.
Hem API key hem de saklanmış bir oturum mevcut olduğunda SDK varsayılan olarak API key'i kullanır. Bunun yerine ChatGPT oturumunuzu kullanmak için taramada onu seçin:
const result = await security.run("/path/to/repository", {
auth: "chatgpt",
});Ortam API key'i gerektirmek için auth: "api-key" ayarlayın. preflight aynı auth seçeneğini kabul eder.
Tarama hatalarını işleme
Uygulamanızın gerçekleştirebileceği eyleme karşılık gelen dışa aktarılmış hata sınıfını yakalayın:
| Hata | Anlamı |
|---|---|
AuthenticationRequiredError |
Tarama için desteklenen bir kimlik bilgisi gerekiyor. |
ConfigurationError |
Codex yapılandırması veya bir geçersiz kılma uygun değil. |
InvalidTargetError |
Depo, yol, mod veya Git hedefi uygun değil. |
OutputDirectoryError |
Çıktı konumu veya izinleri uygun değil. |
OutputInsideProtectedRootError |
Çıktı dizini taranan deponun veya worktree'nin içinde. |
PluginPythonUnavailableError |
Kullanılabilir bir Python yorumlayıcısı yok. |
PluginBootstrapError |
Eklenti çalışma zamanı başlatılamadı. |
ScanCostLimitExceededError |
Tarama tahmini maliyet sınırını aştı. |
IncompleteScanError |
Tarama gerekli sonucu üretmeden sona erdi. |
ContractValidationError |
Tamamlanan tarama yapılandırılmış sözleşme hatası döndürdü. |
ScanInterruptedError |
Bir kesinti taramayı durdurdu ve kısmi çıktı bırakmış olabilir. |
CLI hızlı başlangıç kılavuzu, CI kılavuzu veya CLI referansı ile devam edin.