{"id":"a8cbc7d9-6aba-44fa-a244-fb6228732d24","shortId":"e6k6Ch","kind":"skill","title":"azure-keyvault-keys-ts","tagline":"Manage cryptographic keys using Azure Key Vault Keys SDK for JavaScript (@azure/keyvault-keys). Use when creating, encrypting/decrypting, signing, or rotating keys.","description":"# Azure Key Vault Keys SDK for TypeScript\n\nManage cryptographic keys with Azure Key Vault.\n\n## Installation\n\n```bash\n# Keys SDK\nnpm install @azure/keyvault-keys @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 { KeyClient, CryptographyClient } from \"@azure/keyvault-keys\";\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","keys","antigravity","awesome","skills","sickn33","agent-skills","agentic-skills","ai-agent-skills","ai-agents","ai-coding"],"capabilities":["skill","source-sickn33","skill-azure-keyvault-keys-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-keys-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,313 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.189Z","embedding":null,"createdAt":"2026-04-18T21:32:35.001Z","updatedAt":"2026-04-24T18:50:31.189Z","lastSeenAt":"2026-04-24T18:50:31.189Z","tsv":"'-12':119,245 '-256':230 '-31':120,246 '1':511 '2':519 '2025':118,244 '2048':219 '3':528 '4':537 '5':545 '6':556 'across':515 'action':294,577 'algorithm':348,362 'applic':571 'application/json':122 'ask':615 'attribut':106,232 'authent':59 'autom':542 'await':99,109,134,144,153,163,178,181,185,191,194,205,215,225,235,260,270,284,290,305,308,311,346,360,390,397,417,429,442,447,458,463,492 'azur':2,10,26,37,56 'azure-keyvault-keys-t':1 'azure/identity':47,64 'azure/keyvault-keys':17,46,69,322,478 'azure/keyvault-secrets':485 'backup':435,439 'bash':41,50 'best':509 'boundari':623 'browser':557 'buffer.from':353,422 'catch':495 'ciphertext':366 'clarif':617 'clear':590 'console.log':137,158,169,263,275,368,402,501 'const':70,74,80,86,97,107,132,142,154,164,176,189,203,213,223,233,258,271,282,303,326,335,344,358,379,388,395,415,427,440,445,456,461,490 'contenttyp':121 'creat':20,198,316,377 'create/set':94 'createhash':373,381 'credenti':71,85,91,331,340 'criteria':626 'crypto':376 'cryptocli':327,336 'cryptoclient.decrypt':361 'cryptoclient.encrypt':347 'cryptoclient.sign':391 'cryptoclient.unwrapkey':430 'cryptoclient.verify':398 'cryptoclient.wrapkey':418 'cryptograph':7,34,314 'cryptographycli':67,317,320,329,338,474 'curv':221,228 'date':117,243,531 'decrypt':252,357 'decryptresult':359 'decryptresult.result.tostring':369 'defaultazurecredenti':62,73,513 'delet':171,175,300,523 'deletedkey':473 'deletedsecret':483 'deletepol':177,304 'deletepoller.polluntildone':182,309 'describ':578,594 'dev':516 'differ':454 'digest':378,386 'eckey':224 'ellipt':220 'els':506 'enabl':113,239,520 'encrypt':249,251,343,411,553 'encrypt/decrypt':341 'encrypting/decrypting':21 'encryptresult':345 'encryptresult.result':367 'environ':48,124,606 'environment-specif':605 'error':486,496,508 'error.code':499 'etc':555 'execut':573 'exist':505 'expert':611 'expir':530 'expiresin':298 'expireson':115,241 'generic':201 'get':126,129,139,255 'grant':550 'handl':487 'hash':380,393,400 'id':334 'import':61,65,319,372,469,479 'input':620 'instal':40,45 'javascript':16 'key':4,8,11,13,25,27,29,35,38,42,51,196,199,202,204,210,222,256,259,267,278,301,324,330,333,406,410,424,466,534,539,543,547 'key-materi':423 'key.id':339 'key.keytype':265 'key.name':264 'keybackup':441,460 'keyclient':66,81,83,470 'keyclient.backupkey':443 'keyclient.begindeletekey':306 'keyclient.createeckey':226 'keyclient.createkey':206,236 'keyclient.creatersakey':216 'keyclient.getkey':261 'keyclient.listpropertiesofkeys':274 'keyclient.purgedeletedkey':312 'keyclient.restorekeybackup':459 'keyclient.rotatekey':285 'keyclient.updatekeyrotationpolicy':291 'keyop':250 'keyproperti':272,472 'keyproperties.name':276 'keysiz':218 'keyvault':3,57,77 'keyvaultkey':471 'keyvaultsecret':481 'keywithattr':234 'knownencryptionalgorithm':475 'knownsignaturealgorithm':476 'latest':130 'lifetimeact':293 'limit':546,582 'list':149,160,266 'manag':6,33 'manual':280 'match':591 'materi':425 'messag':356,385 'miss':628 'myeckey':227 'mykey':207,237,262,286,292,307,313,444 'myrsakey':217 'mysecret':101,111,136,146,168,180,187,193,449 'name':58,78 'need':551 'new':72,82,88,116,242,328,337 'node':375 'node.js':563 'nonexist':494 'npm':44 'oaep':351,365,421,433 'object':325 'oper':93,197,315,548,552 'output':600 'overview':581 'p':229 'p30d':297 'p90d':299 'perman':184 'permiss':621 'plaintext':352 'polici':289,541 'practic':510 'process.env.azure':76 'product':125,518,526 'purg':183,310 'purpos':248 'recov':188 'recoverpol':190 'recoverpoller.polluntildone':195 'requir':524,619 'restor':437,450,452 'restoredkey':457 'restoredsecret':462 'review':612 'rotat':24,277,281,288,295,540,544 'rotatedkey':283 'rs256':392,399 'rsa':208,209,238,350,364,420,432 'rsa-oaep':349,363,419,431 'rsakey':214 'safeti':622 'scope':593 'sdk':14,30,43 'sdks':561 'secret':92,95,98,103,127,133,150,172,355,491,502,536 'secret-valu':102 'secret.properties.version':148 'secret.value':138 'secretbackup':446,465 'secretcli':87,89,480 'secretclient.backupsecret':448 'secretclient.begindeletesecret':179 'secretclient.beginrecoverdeletedsecret':192 'secretclient.getsecret':135,145,493 'secretclient.listpropertiesofsecrets':157 'secretclient.listpropertiesofsecretversions':167 'secretclient.purgedeletedsecret':186 'secretclient.restoresecretbackup':464 'secretclient.setsecret':100,110 'secretnotfound':500 'secretproperti':155,482 'secretproperties.name':159 'secretwithattr':108 'set':287,529 'sha256':382 'sign':22,253,387,554 'sign/verify':370 'signresult':389 'signresult.result':401 'size':212 'skill':569,585 'skill-azure-keyvault-keys-ts' 'soft':174,522 'soft-delet':521 'source-sickn33' 'specif':140,607 'specificsecret':143 'stop':613 'storag':414 'substitut':603 'success':625 'support':559 'tag':123,247 'task':589 'test':609 'throw':507 'timebeforeexpiri':296 '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':598 'tri':489 'true':114,240 'ts':5 'type':467 'typescript':32,60,96,128,151,173,200,257,268,279,302,318,342,371,407,438,468,488 'unwrap':426 'unwrapresult':428 'updat':383 'url':53 'use':9,18,512,538,567,583 'valid':403,608 'valu':104,112 'variabl':49 'vault':12,28,39,52,455,527 'vault.azure.net':54,79 'vaulturl':75,84,90 'verifi':254,394 'verifyresult':396 'verifyresult.result':404 'version':131,141,147,161,165 'version.version':170 'work':514 'workflow':575 'wrap':408 'wrap/unwrap':405 'wrapresult':416 'wrapresult.result':434","prices":[{"id":"653f0d24-4585-465b-bd71-0fa711640003","listingId":"a8cbc7d9-6aba-44fa-a244-fb6228732d24","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:35.001Z"}],"sources":[{"listingId":"a8cbc7d9-6aba-44fa-a244-fb6228732d24","source":"github","sourceId":"sickn33/antigravity-awesome-skills/azure-keyvault-keys-ts","sourceUrl":"https://github.com/sickn33/antigravity-awesome-skills/tree/main/skills/azure-keyvault-keys-ts","isPrimary":false,"firstSeenAt":"2026-04-18T21:32:35.001Z","lastSeenAt":"2026-04-24T18:50:31.189Z"}],"details":{"listingId":"a8cbc7d9-6aba-44fa-a244-fb6228732d24","quickStartSnippet":null,"exampleRequest":null,"exampleResponse":null,"schema":null,"openapiUrl":null,"agentsTxtUrl":null,"citations":[],"useCases":[],"bestFor":[],"notFor":[],"kindDetails":{"org":"sickn33","slug":"azure-keyvault-keys-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":"f8bafa38625a39341f66741499b3634d4a8130f6","skill_md_path":"skills/azure-keyvault-keys-ts/SKILL.md","default_branch":"main","skill_tree_url":"https://github.com/sickn33/antigravity-awesome-skills/tree/main/skills/azure-keyvault-keys-ts"},"layout":"multi","source":"github","category":"antigravity-awesome-skills","frontmatter":{"name":"azure-keyvault-keys-ts","description":"Manage cryptographic keys using Azure Key Vault Keys SDK for JavaScript (@azure/keyvault-keys). Use when creating, encrypting/decrypting, signing, or rotating keys."},"skills_sh_url":"https://skills.sh/sickn33/antigravity-awesome-skills/azure-keyvault-keys-ts"},"updatedAt":"2026-04-24T18:50:31.189Z"}}