{"id":"db27cc3e-0611-4232-8d09-c76221053abe","shortId":"ve4cFr","kind":"skill","title":"azure-keyvault-secrets-ts","tagline":"Manage secrets using Azure Key Vault Secrets SDK for JavaScript (@azure/keyvault-secrets). Use when storing and retrieving application secrets or configuration values.","description":"# Azure Key Vault Secrets SDK for TypeScript\n\nManage secrets with Azure Key Vault.\n\n## Installation\n\n```bash\n# Secrets SDK\nnpm install @azure/keyvault-secrets @azure/identity\n```\n\n## Environment Variables\n\n```bash\nKEY_VAULT_URL=https://<vault-name>.vault.azure.net\n# Or\nAZURE_KEYVAULT_NAME=<vault-name>\n```\n\n## Authentication\n\n```typescript\nimport { DefaultAzureCredential } from \"@azure/identity\";\nimport { SecretClient } from \"@azure/keyvault-secrets\";\n\nconst credential = new DefaultAzureCredential();\nconst vaultUrl = `https://${process.env.AZURE_KEYVAULT_NAME}.vault.azure.net`;\n\nconst keyClient = new KeyClient(vaultUrl, credential);\nconst secretClient = new SecretClient(vaultUrl, credential);\n```\n\n## Secrets Operations\n\n### Create/Set Secret\n\n```typescript\nconst secret = await secretClient.setSecret(\"MySecret\", \"secret-value\");\n\n// With attributes\nconst secretWithAttrs = await secretClient.setSecret(\"MySecret\", \"value\", {\n  enabled: true,\n  expiresOn: new Date(\"2025-12-31\"),\n  contentType: \"application/json\",\n  tags: { environment: \"production\" }\n});\n```\n\n### Get Secret\n\n```typescript\n// Get latest version\nconst secret = await secretClient.getSecret(\"MySecret\");\nconsole.log(secret.value);\n\n// Get specific version\nconst specificSecret = await secretClient.getSecret(\"MySecret\", {\n  version: secret.properties.version\n});\n```\n\n### List Secrets\n\n```typescript\nfor await (const secretProperties of secretClient.listPropertiesOfSecrets()) {\n  console.log(secretProperties.name);\n}\n\n// List versions\nfor await (const version of secretClient.listPropertiesOfSecretVersions(\"MySecret\")) {\n  console.log(version.version);\n}\n```\n\n### Delete Secret\n\n```typescript\n// Soft delete\nconst deletePoller = await secretClient.beginDeleteSecret(\"MySecret\");\nawait deletePoller.pollUntilDone();\n\n// Purge (permanent)\nawait secretClient.purgeDeletedSecret(\"MySecret\");\n\n// Recover\nconst recoverPoller = await secretClient.beginRecoverDeletedSecret(\"MySecret\");\nawait recoverPoller.pollUntilDone();\n```\n\n## Keys Operations\n\n### Create Keys\n\n```typescript\n// Generic key\nconst key = await keyClient.createKey(\"MyKey\", \"RSA\");\n\n// RSA key with size\nconst rsaKey = await keyClient.createRsaKey(\"MyRsaKey\", { keySize: 2048 });\n\n// Elliptic Curve key\nconst ecKey = await keyClient.createEcKey(\"MyEcKey\", { curve: \"P-256\" });\n\n// With attributes\nconst keyWithAttrs = await keyClient.createKey(\"MyKey\", \"RSA\", {\n  enabled: true,\n  expiresOn: new Date(\"2025-12-31\"),\n  tags: { purpose: \"encryption\" },\n  keyOps: [\"encrypt\", \"decrypt\", \"sign\", \"verify\"]\n});\n```\n\n### Get Key\n\n```typescript\nconst key = await keyClient.getKey(\"MyKey\");\nconsole.log(key.name, key.keyType);\n```\n\n### List Keys\n\n```typescript\nfor await (const keyProperties of keyClient.listPropertiesOfKeys()) {\n  console.log(keyProperties.name);\n}\n```\n\n### Rotate Key\n\n```typescript\n// Manual rotation\nconst rotatedKey = await keyClient.rotateKey(\"MyKey\");\n\n// Set rotation policy\nawait keyClient.updateKeyRotationPolicy(\"MyKey\", {\n  lifetimeActions: [{ action: \"Rotate\", timeBeforeExpiry: \"P30D\" }],\n  expiresIn: \"P90D\"\n});\n```\n\n### Delete Key\n\n```typescript\nconst deletePoller = await keyClient.beginDeleteKey(\"MyKey\");\nawait deletePoller.pollUntilDone();\n\n// Purge\nawait keyClient.purgeDeletedKey(\"MyKey\");\n```\n\n## Cryptographic Operations\n\n### Create CryptographyClient\n\n```typescript\nimport { CryptographyClient } from \"@azure/keyvault-keys\";\n\n// From key object\nconst cryptoClient = new CryptographyClient(key, credential);\n\n// From key ID\nconst cryptoClient = new CryptographyClient(key.id!, credential);\n```\n\n### Encrypt/Decrypt\n\n```typescript\n// Encrypt\nconst encryptResult = await cryptoClient.encrypt({\n  algorithm: \"RSA-OAEP\",\n  plaintext: Buffer.from(\"My secret message\")\n});\n\n// Decrypt\nconst decryptResult = await cryptoClient.decrypt({\n  algorithm: \"RSA-OAEP\",\n  ciphertext: encryptResult.result\n});\n\nconsole.log(decryptResult.result.toString());\n```\n\n### Sign/Verify\n\n```typescript\nimport { createHash } from \"node:crypto\";\n\n// Create digest\nconst hash = createHash(\"sha256\").update(\"My message\").digest();\n\n// Sign\nconst signResult = await cryptoClient.sign(\"RS256\", hash);\n\n// Verify\nconst verifyResult = await cryptoClient.verify(\"RS256\", hash, signResult.result);\nconsole.log(\"Valid:\", verifyResult.result);\n```\n\n### Wrap/Unwrap Keys\n\n```typescript\n// Wrap a key (encrypt it for storage)\nconst wrapResult = await cryptoClient.wrapKey(\"RSA-OAEP\", Buffer.from(\"key-material\"));\n\n// Unwrap\nconst unwrapResult = await cryptoClient.unwrapKey(\"RSA-OAEP\", wrapResult.result);\n```\n\n## Backup and Restore\n\n```typescript\n// Backup\nconst keyBackup = await keyClient.backupKey(\"MyKey\");\nconst secretBackup = await secretClient.backupSecret(\"MySecret\");\n\n// Restore (can restore to different vault)\nconst restoredKey = await keyClient.restoreKeyBackup(keyBackup!);\nconst restoredSecret = await secretClient.restoreSecretBackup(secretBackup!);\n```\n\n## Key Types\n\n```typescript\nimport {\n  KeyClient,\n  KeyVaultKey,\n  KeyProperties,\n  DeletedKey,\n  CryptographyClient,\n  KnownEncryptionAlgorithms,\n  KnownSignatureAlgorithms\n} from \"@azure/keyvault-keys\";\n\nimport {\n  SecretClient,\n  KeyVaultSecret,\n  SecretProperties,\n  DeletedSecret\n} from \"@azure/keyvault-secrets\";\n```\n\n## Error Handling\n\n```typescript\ntry {\n  const secret = await secretClient.getSecret(\"NonExistent\");\n} catch (error: any) {\n  if (error.code === \"SecretNotFound\") {\n    console.log(\"Secret does not exist\");\n  } else {\n    throw error;\n  }\n}\n```\n\n## Best Practices\n\n1. **Use DefaultAzureCredential** - Works across dev and production\n2. **Enable soft-delete** - Required for production vaults\n3. **Set expiration dates** - On both keys and secrets\n4. **Use key rotation policies** - Automate key rotation\n5. **Limit key operations** - Only grant needed operations (encrypt, sign, etc.)\n6. **Browser not supported** - These SDKs are Node.js only\n\n## When to Use\nThis skill is applicable to execute the workflow or actions described in the overview.\n\n## Limitations\n- Use this skill only when the task clearly matches the scope described above.\n- Do not treat the output as a substitute for environment-specific validation, testing, or expert review.\n- Stop and ask for clarification if required inputs, permissions, safety boundaries, or success criteria are missing.","tags":["azure","keyvault","secrets","antigravity","awesome","skills","sickn33","agent-skills","agentic-skills","ai-agent-skills","ai-agents","ai-coding"],"capabilities":["skill","source-sickn33","skill-azure-keyvault-secrets-ts","topic-agent-skills","topic-agentic-skills","topic-ai-agent-skills","topic-ai-agents","topic-ai-coding","topic-ai-workflows","topic-antigravity","topic-antigravity-skills","topic-claude-code","topic-claude-code-skills","topic-codex-cli","topic-codex-skills"],"categories":["antigravity-awesome-skills"],"synonyms":[],"warnings":[],"endpointUrl":"https://skills.sh/sickn33/antigravity-awesome-skills/azure-keyvault-secrets-ts","protocol":"skill","transport":"skills-sh","auth":{"type":"none","details":{"cli":"npx skills add sickn33/antigravity-awesome-skills","source_repo":"https://github.com/sickn33/antigravity-awesome-skills","install_from":"skills.sh"}},"qualityScore":"0.700","qualityRationale":"deterministic score 0.70 from registry signals: · indexed on github topic:agent-skills · 34928 github stars · SKILL.md body (6,297 chars)","verified":false,"liveness":"unknown","lastLivenessCheck":null,"agentReviews":{"count":0,"score_avg":null,"cost_usd_avg":null,"success_rate":null,"latency_p50_ms":null,"narrative_summary":null,"summary_updated_at":null},"enrichmentModel":"deterministic:skill-github:v1","enrichmentVersion":1,"enrichedAt":"2026-04-24T18:50:31.414Z","embedding":null,"createdAt":"2026-04-18T21:32:37.284Z","updatedAt":"2026-04-24T18:50:31.414Z","lastSeenAt":"2026-04-24T18:50:31.414Z","tsv":"'-12':118,244 '-256':229 '-31':119,245 '1':510 '2':518 '2025':117,243 '2048':218 '3':527 '4':536 '5':544 '6':555 'across':514 'action':293,576 'algorithm':347,361 'applic':22,570 'application/json':121 'ask':614 'attribut':105,231 'authent':59 'autom':541 'await':98,108,133,143,152,162,177,180,184,190,193,204,214,224,234,259,269,283,289,304,307,310,345,359,389,396,416,428,441,446,457,462,491 'azur':2,9,27,37,56 'azure-keyvault-secrets-t':1 'azure/identity':47,64 'azure/keyvault-keys':321,477 'azure/keyvault-secrets':16,46,68,484 'backup':434,438 'bash':41,50 'best':508 'boundari':622 'browser':556 'buffer.from':352,421 'catch':494 'ciphertext':365 'clarif':616 'clear':589 'configur':25 'console.log':136,157,168,262,274,367,401,500 'const':69,73,79,85,96,106,131,141,153,163,175,188,202,212,222,232,257,270,281,302,325,334,343,357,378,387,394,414,426,439,444,455,460,489 'contenttyp':120 'creat':197,315,376 'create/set':93 'createhash':372,380 'credenti':70,84,90,330,339 'criteria':625 'crypto':375 'cryptocli':326,335 'cryptoclient.decrypt':360 'cryptoclient.encrypt':346 'cryptoclient.sign':390 'cryptoclient.unwrapkey':429 'cryptoclient.verify':397 'cryptoclient.wrapkey':417 'cryptograph':313 'cryptographycli':316,319,328,337,473 'curv':220,227 'date':116,242,530 'decrypt':251,356 'decryptresult':358 'decryptresult.result.tostring':368 'defaultazurecredenti':62,72,512 'delet':170,174,299,522 'deletedkey':472 'deletedsecret':482 'deletepol':176,303 'deletepoller.polluntildone':181,308 'describ':577,593 'dev':515 'differ':453 'digest':377,385 'eckey':223 'ellipt':219 'els':505 'enabl':112,238,519 'encrypt':248,250,342,410,552 'encrypt/decrypt':340 'encryptresult':344 'encryptresult.result':366 'environ':48,123,605 'environment-specif':604 'error':485,495,507 'error.code':498 'etc':554 'execut':572 'exist':504 'expert':610 'expir':529 'expiresin':297 'expireson':114,240 'generic':200 'get':125,128,138,254 'grant':549 'handl':486 'hash':379,392,399 'id':333 'import':61,65,318,371,468,478 'input':619 'instal':40,45 'javascript':15 'key':10,28,38,51,195,198,201,203,209,221,255,258,266,277,300,323,329,332,405,409,423,465,533,538,542,546 'key-materi':422 'key.id':338 'key.keytype':264 'key.name':263 'keybackup':440,459 'keyclient':80,82,469 'keyclient.backupkey':442 'keyclient.begindeletekey':305 'keyclient.createeckey':225 'keyclient.createkey':205,235 'keyclient.creatersakey':215 'keyclient.getkey':260 'keyclient.listpropertiesofkeys':273 'keyclient.purgedeletedkey':311 'keyclient.restorekeybackup':458 'keyclient.rotatekey':284 'keyclient.updatekeyrotationpolicy':290 'keyop':249 'keyproperti':271,471 'keyproperties.name':275 'keysiz':217 'keyvault':3,57,76 'keyvaultkey':470 'keyvaultsecret':480 'keywithattr':233 'knownencryptionalgorithm':474 'knownsignaturealgorithm':475 'latest':129 'lifetimeact':292 'limit':545,581 'list':148,159,265 'manag':6,34 'manual':279 'match':590 'materi':424 'messag':355,384 'miss':627 'myeckey':226 'mykey':206,236,261,285,291,306,312,443 'myrsakey':216 'mysecret':100,110,135,145,167,179,186,192,448 'name':58,77 'need':550 'new':71,81,87,115,241,327,336 'node':374 'node.js':562 'nonexist':493 'npm':44 'oaep':350,364,420,432 'object':324 'oper':92,196,314,547,551 'output':599 'overview':580 'p':228 'p30d':296 'p90d':298 'perman':183 'permiss':620 'plaintext':351 'polici':288,540 'practic':509 'process.env.azure':75 'product':124,517,525 'purg':182,309 'purpos':247 'recov':187 'recoverpol':189 'recoverpoller.polluntildone':194 'requir':523,618 'restor':436,449,451 'restoredkey':456 'restoredsecret':461 'retriev':21 'review':611 'rotat':276,280,287,294,539,543 'rotatedkey':282 'rs256':391,398 'rsa':207,208,237,349,363,419,431 'rsa-oaep':348,362,418,430 'rsakey':213 'safeti':621 'scope':592 'sdk':13,31,43 'sdks':560 'secret':4,7,12,23,30,35,42,91,94,97,102,126,132,149,171,354,490,501,535 'secret-valu':101 'secret.properties.version':147 'secret.value':137 'secretbackup':445,464 'secretcli':66,86,88,479 'secretclient.backupsecret':447 'secretclient.begindeletesecret':178 'secretclient.beginrecoverdeletedsecret':191 'secretclient.getsecret':134,144,492 'secretclient.listpropertiesofsecrets':156 'secretclient.listpropertiesofsecretversions':166 'secretclient.purgedeletedsecret':185 'secretclient.restoresecretbackup':463 'secretclient.setsecret':99,109 'secretnotfound':499 'secretproperti':154,481 'secretproperties.name':158 'secretwithattr':107 'set':286,528 'sha256':381 'sign':252,386,553 'sign/verify':369 'signresult':388 'signresult.result':400 'size':211 'skill':568,584 'skill-azure-keyvault-secrets-ts' 'soft':173,521 'soft-delet':520 'source-sickn33' 'specif':139,606 'specificsecret':142 'stop':612 'storag':413 'store':19 'substitut':602 'success':624 'support':558 'tag':122,246 'task':588 'test':608 'throw':506 'timebeforeexpiri':295 'topic-agent-skills' 'topic-agentic-skills' 'topic-ai-agent-skills' 'topic-ai-agents' 'topic-ai-coding' 'topic-ai-workflows' 'topic-antigravity' 'topic-antigravity-skills' 'topic-claude-code' 'topic-claude-code-skills' 'topic-codex-cli' 'topic-codex-skills' 'treat':597 'tri':488 'true':113,239 'ts':5 'type':466 'typescript':33,60,95,127,150,172,199,256,267,278,301,317,341,370,406,437,467,487 'unwrap':425 'unwrapresult':427 'updat':382 'url':53 'use':8,17,511,537,566,582 'valid':402,607 'valu':26,103,111 'variabl':49 'vault':11,29,39,52,454,526 'vault.azure.net':54,78 'vaulturl':74,83,89 'verifi':253,393 'verifyresult':395 'verifyresult.result':403 'version':130,140,146,160,164 'version.version':169 'work':513 'workflow':574 'wrap':407 'wrap/unwrap':404 'wrapresult':415 'wrapresult.result':433","prices":[{"id":"90181d1c-c8a4-417d-8791-cc2be7eba786","listingId":"db27cc3e-0611-4232-8d09-c76221053abe","amountUsd":"0","unit":"free","nativeCurrency":null,"nativeAmount":null,"chain":null,"payTo":null,"paymentMethod":"skill-free","isPrimary":true,"details":{"org":"sickn33","category":"antigravity-awesome-skills","install_from":"skills.sh"},"createdAt":"2026-04-18T21:32:37.284Z"}],"sources":[{"listingId":"db27cc3e-0611-4232-8d09-c76221053abe","source":"github","sourceId":"sickn33/antigravity-awesome-skills/azure-keyvault-secrets-ts","sourceUrl":"https://github.com/sickn33/antigravity-awesome-skills/tree/main/skills/azure-keyvault-secrets-ts","isPrimary":false,"firstSeenAt":"2026-04-18T21:32:37.284Z","lastSeenAt":"2026-04-24T18:50:31.414Z"}],"details":{"listingId":"db27cc3e-0611-4232-8d09-c76221053abe","quickStartSnippet":null,"exampleRequest":null,"exampleResponse":null,"schema":null,"openapiUrl":null,"agentsTxtUrl":null,"citations":[],"useCases":[],"bestFor":[],"notFor":[],"kindDetails":{"org":"sickn33","slug":"azure-keyvault-secrets-ts","github":{"repo":"sickn33/antigravity-awesome-skills","stars":34928,"topics":["agent-skills","agentic-skills","ai-agent-skills","ai-agents","ai-coding","ai-workflows","antigravity","antigravity-skills","claude-code","claude-code-skills","codex-cli","codex-skills","cursor","cursor-skills","developer-tools","gemini-cli","gemini-skills","kiro","mcp","skill-library"],"license":"mit","html_url":"https://github.com/sickn33/antigravity-awesome-skills","pushed_at":"2026-04-24T06:41:17Z","description":"Installable GitHub library of 1,400+ agentic skills for Claude Code, Cursor, Codex CLI, Gemini CLI, Antigravity, and more. Includes installer CLI, bundles, workflows, and official/community skill collections.","skill_md_sha":"faa739d604bfe306a67cdd690899d4c7fb32ab51","skill_md_path":"skills/azure-keyvault-secrets-ts/SKILL.md","default_branch":"main","skill_tree_url":"https://github.com/sickn33/antigravity-awesome-skills/tree/main/skills/azure-keyvault-secrets-ts"},"layout":"multi","source":"github","category":"antigravity-awesome-skills","frontmatter":{"name":"azure-keyvault-secrets-ts","description":"Manage secrets using Azure Key Vault Secrets SDK for JavaScript (@azure/keyvault-secrets). Use when storing and retrieving application secrets or configuration values."},"skills_sh_url":"https://skills.sh/sickn33/antigravity-awesome-skills/azure-keyvault-secrets-ts"},"updatedAt":"2026-04-24T18:50:31.414Z"}}