Codex Security TypeScript SDK
TypeScript üzerinden 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 kontrol, maliyet sınırları, ilerleme geri çağrıları ve iptal desteği sunar.
SDK, ECMAScript modüllerini (ESM) kullanır ve sunucu tarafında Node.js 22
(22.13.0 veya sonrası), 24 ya da 26 ile çalışır. Tarama için ayrıca Python 3.10
veya sonrası gerekir. Python 3.10 için tomli paketi de gerekir.
SDK'yı kurma
SDK'yı yükleyin:
npm install @openai/codex-securityBir tarama başlatmadan önce OPENAI_API_KEY veya CODEX_API_KEY ayarlayın,
dosya tabanlı mevcut bir Codex oturum açma işlemini kullanın ya da başka bir
sağlayıcı yapılandırın. Amazon Bedrock, AWS
kimlik bilgilerini; OpenRouter ve Fireworks ise sağlayıcıya özgü API key'leri ve
yapılandırmayı kullanır.
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
Yalnızca güvendiğiniz ve değerlendirme izniniz olan depoları tarayın. SDK, yerel işletim sistemi izinlerinizle çalışır ve onay için hiçbir zaman duraklamaz. Tarama işlemleri ortamınızı devralabilir; bu nedenle başlamadan önce ilgisiz kimlik bilgilerini kaldırın. Yerel tarama izinleri bölümüne bakın.
Tek bir CodexSecurity istemcisi oluşturun, standart bir depo taraması çalıştırın
ve iş tamamlandığında istemciyi kapatın. Kapsayıcı Git çalışma ağacının 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 kontrolle denetleme
Bir taramayı başlatmadan önce depo, hedef, mod, bilgi tabanı belgeleri, çıktı
konumu ve Codex yapılandırmasını denetlemek için preflight kullanın:
const plan = await security.preflight("/path/to/repository", {
target: ["services/billing", "packages/auth"],
knowledgeBasePaths: ["/path/to/architecture.md"],
outputDir: "/path/outside/repository/results",
});
console.log(plan.repository);
console.log(plan.target.kind);
console.log(plan.mode);
console.log(plan.outputDir);Ön kontrol, Codex çalışma zamanına ve kimlik bilgilerine dokunmaz. Eklenti ve Python keşfini de taramanın kendisine bırakır. Bu sayede ön kontrol, uzun süren veya kimlik bilgisi kullanan bir işlemden önce kullanıcı girdisini denetlemek için kullanışlıdır.
Mevcut bir sonuç dizininin arşivlenmesini önizlemek için
archiveExisting: true değerini 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 nihai 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, kaydedilmiş fark ve çalışma ağacı hedeflerini destekler. Varsayılan hedef deponun tamamıdır.
Seçili yolları tarama
Depo içindeki yolları içeren bir dizi 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.
Kaydedilmiş değişiklikleri tarama
Yerel olarak kullanılabilen iki Git revizyonu arasındaki kaydedilmiş 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 çalışma ağacının kökü olmasını gerektirir.
Çalışma ağacını tarama
Hazırlanmış ve hazırlanmamış değişiklikleri bir base revizyonuna göre 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. Bir fark veya çalışma
ağacı taraması başlatmadan önce seçili revizyonları getirin.
Derin modu seçme
Daha kapsamlı inceleme gerektiren bir depo veya yol taraması için
mode: "deep" ayarlayın:
const result = await security.run("/path/to/repository", {
target: ["services/billing"],
mode: "deep",
workers: 2,
subagents: 0,
stopAfterNoNew: 3,
maxDiscoveryRuns: 10,
maxTimeHours: 1.5,
});Derin mod, depo ve yol hedeflerini destekler. Fark ve çalışma ağacı taramalarında
standart modu kullanın. İsteğe bağlı ayarlar; eşzamanlı ve bağımsız standart
tarama çalışanlarını, çalışan başına alt ajanları, yeni bulgu olmadan art arda
tamamlanan çalışan taramalarını ve çalışan çalıştırmalarının toplam sayısı ile
süresini denetler. Bunlar mode: "deep" gerektirir.
maxTimeHours varsayılan olarak 96 değerini alır ve kesirli saatler
dâhil 96 değerine kadar pozitif bir sayıyı kabul eder. Son tarihte
Codex Security tamamlanmamış çalışanları durdurur, tamamlanmış tarama sonuçlarını
korur ve bunları nihai raporda birleştirir. Süreyle sınırlandırılmış bir taramayı
tam kapsam kanıtı olarak kabul etmeden önce result.coverage.completeness değerini inceleyin.
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ı giriş 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 ve takip talimatları ekleme
Taramaya odak kazandırmak için scanPrompt, bir takip istemek için
postScanPrompt kullanın:
const result = await security.run("/path/to/repository", {
scanPrompt: "Focus on tenant isolation and authorization checks.",
postScanPrompt: "Write confirmed findings to post-scan-summary.md.",
});Takip başarısız olursa SDK tamamlanmış taramayı korur ve hatayı
onWarning üzerinden bildirir. Takibin değiştirdiği tamamlanmış tarama
yapıtlarını geri yükler.
Tarama bütçesi belirleme
Tahmini model maliyeti bir sınırı aştığında taramayı durdurmak için
maxCostUsd ayarlayın. Tarama sürerken 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, harcamayı tahmin eder ancak katı bir üst sınır değildir; bu nedenle devam
eden istekler sınırın biraz üzerinde tamamlanabilir. Codex Security tamamlanmış
çalışan sonuçlarını birleştirdikten sonra derin tarama sınıra ulaşırsa
run, coverage.completeness değeri "partial" olarak ayarlanmış
bir sonuç döndürür ve bütçe uyarısını onWarning üzerinden bildirir.
Tarama tamamlanmış bir kısmi sonuç üretemezse run,
ScanCostLimitExceededError oluşturur ve kullanılabilir tüm çıktı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ı dâhil mühürlenmiş tarama bildirimi. |
findings |
Mevcut taramanın bulguları. Bulgu nesnelerini findings.findings üzerinden okuyun. |
repositoryFindings |
Tarama geçmişi varsa depo taramalarındaki açık bulgular. |
coverage |
İncelenen yüzeyler, hariç tutmalar, ertelenen işler, açık sorular ve eksiksizlik. |
scanDir |
Tarama dizini. |
threadId |
Taramanın Codex iş parçacığı tanımlayıcısı. |
turnResult |
Tur durumu, yanıt ve kullanılabilir kullanım meta verileri. |
cost |
Tahmini model ve belirteç maliyeti veya kullanılamıyorsa null. |
reportPath |
report.md dosyasının yolu. |
manifestPath |
scan-manifest.json dosyasının yolu. |
findingsPath |
findings.json dosyasının yolu. |
coveragePath |
coverage.json dosyasının yolu. |
artifactsDir |
Destekleyici yapıtlar dizini. |
sarifPath |
Oluşturulan SARIF yolu veya SARIF yoksa null. |
pluginVersion |
Tarama üreticisi tarafından kaydedilen sürüm. |
Sonraki bir taramada aynı eklentiyi zorunlu kılmak için
expectedPluginVersion: result.pluginVersion iletin. Yüklü eklenti sürümü farklıysa SDK
taramayı reddeder.
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);
}Bulgular isteğe bağlı codeEvidence, rootCause, validation,
attackPath, remediationTests ve preventiveControls alanlarını içerebilir.
Depo genelindeki bulgular için confirmedInLatestScan, en son taramada görülen
bulguları açık kalmaya devam eden önceki bulgulardan ayırır:
for (const finding of result.repositoryFindings ?? []) {
console.log(finding.title, finding.confirmedInLatestScan);
}Kapsam eksiksizliği complete, partial veya unknown değeridir. Bir taramayı
güvenlik kararı için kanıt olarak kullanmadan önce ertelenmiş yüzeyleri, hariç
tutmaları ve açık soruları inceleyin.
result.toJSON(); bildirimi, depo ve mevcut tarama bulgularını, kapsamı, tarama
ve iş parçacığı tanımlayıcılarını, reportPath, artifactsDir,
sarifPath, maliyet ve tur meta verilerini JSON'a hazır tek bir nesnede döndürür.
Taramayı izleme veya iptal etme
Taramanın başlatılmasını, çalışan ilerlemesini ve bağlantı yeniden denemelerini
bildirmek için ScanOptions geri çağrılarını iletin:
const result = await security.run("/path/to/repository", {
outputDir: "/path/outside/repository/results",
onScanStarted() {
console.log("Scan started");
},
onProgress(progress) {
console.log(progress.phase, progress.filesCompleted, progress.filesTotal);
},
onWorkerStatus(status) {
console.log(status.kind, status);
},
onSessionEvent(session) {
console.log(session.threadId, session.worker, session.event["type"]);
},
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 kaynaklanıyorsa
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;
}
}Kesintiye uğrayan bir tarama scanDir içinde kısmi çıktı bırakabilir.
Sonucun incelenmesi gerekiyorsa bu dizini koruyun.
Tarama kurulum ilerlemesini gösteren uygulamalar, ScanOptions yaşam
döngüsü geri çağrılarını da kullanabilir:
| Geri çağrı | Çağrıldığı durum |
|---|---|
onAuthentication(authentication) |
Tarama, kimlik doğrulama yöntemini seçtiğinde. |
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. |
onTrustedAccessStatus(status) |
Trusted Access durumu kullanılabilir olduğunda. |
onReconnect(attempt, maxAttempts) |
SDK, bağlantısı kesilmiş tarama akışını yeniden denediğinde. |
onActivity(activity) |
Bir komut, araç, akıl yürütme adımı veya mesaj güncellendiğinde. |
onProgress(progress) |
Tarama aşaması veya incelenen dosya sayısı değiştiğinde. |
onWorkerStatus(status) |
Çalışan ön kontrolü veya gönderim durumu değiştiğinde. |
onSessionEvent(session) |
Bir tarama veya çalışan oturumu olay yaydığında. |
onCost(cost) |
Güncellenmiş tahmini tarama maliyeti kullanılabilir olduğunda. |
onWarning(warning) |
Tarama bir uyarı bildirdiğinde. |
onObserverError(observer, error) |
Başka bir tarama yaşam döngüsü geri çağrısı hata oluşturduğunda. |
Trusted Access durumu granted, not_granted veya unknown değeridir. Eksik veya
bilinmeyen erişim de onWarning tetikler.
onSessionEvent, sansürlenmemiş ve kaynak kodu veya kimlik bilgileri
içerebilen olayları alır. Bunları paylaşılan günlüklere veya diğer hizmetlere
göndermeden önce filtreleyin.
Çalışma zamanını ve kimlik bilgilerini yapılandırma
Belirli bir eklentiye, yorumlayıcıya veya Codex ayarına ihtiyacınız olduğunda ç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 dosyasını 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 ekstra yüksek 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.
codexOverrides, taramanın dosya sistemi erişimini kısıtlayamaz veya onay
politikasını değiştiremez. Yerel tarama
izinleri bölümüne bakın.
OpenRouter veya Fireworks için eşleşen API key'i ve eksiksiz bir sağlayıcı
yapılandırmasını codexOverrides içinde de sağlayın. Örneğin
OPENROUTER_API_KEY ayarlayın ve OpenRouter'ı yapılandırın:
const security = new CodexSecurity({
codexOverrides: {
model: "anthropic/claude-sonnet-4.5",
model_provider: "openrouter",
model_providers: {
openrouter: {
name: "OpenRouter",
base_url: "https://openrouter.ai/api/v1",
env_key: "OPENROUTER_API_KEY",
wire_api: "responses",
},
},
},
});Fireworks için her iki openrouter anahtarını fireworks olarak değiştirin,
name değerini Fireworks AI olarak, env_key değerini
FIREWORKS_API_KEY olarak ayarlayın, https://api.fireworks.ai/inference/v1 değerini base_url
olarak kullanın ve bir Fireworks modeli seçin.
İstemci, desteklenen kimlik doğrulama yöntemlerini de sunar:
| Yöntem | Amaç |
|---|---|
loginApiKey(apiKey) |
Yalıtılmış çalışma zamanında API key ile kimlik doğrulamak. |
loginChatGPT() |
Tarayıcıda 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ı; uygulamanın seçili oturum açma akışını sunup
tamamlayabilmesi için waitForInstructions, authUrl, verificationUrl,
userCode, wait ve cancel sağlar. SDK, dosya tabanlı bir Codex
oturum açma işlemini yeniden kullanabilir. API key'ler CI ve sunucu tarafı
otomasyonu için uygundur.
Hem bir API key hem de saklanan bir oturum açma işlemi varsa SDK varsayılan olarak API key'i kullanır. Bunun yerine ChatGPT oturumunuzu kullanmak için tarama kapsamında bunu seçin:
const result = await security.run("/path/to/repository", {
auth: "chatgpt",
});Bir ortam API key'ini zorunlu kılmak 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 eylemle eşleşen dışa aktarılmış hata sınıfını yakalayın:
| Hata | Anlamı |
|---|---|
AuthenticationRequiredError |
Tarama, desteklenen bir kimlik bilgisi gerektiriyor. |
ConfigurationError |
Codex yapılandırması veya 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 çalışma ağacının 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 |
Tamamlanmış 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.