{"id":"ff51b125-ee6e-455f-8e9c-65e97256e9ed","shortId":"BkVyKw","kind":"skill","title":"azure-storage-queue-ts","tagline":"Azure Queue Storage JavaScript/TypeScript SDK (@azure/storage-queue) for message queue operations. Use for sending, receiving, peeking, and deleting messages in queues.","description":"# @azure/storage-queue (TypeScript/JavaScript)\n\nSDK for Azure Queue Storage operations — send, receive, peek, and manage messages in queues.\n\n## Installation\n\n```bash\nnpm install @azure/storage-queue @azure/identity\n```\n\n**Current Version**: 12.x  \n**Node.js**: >= 18.0.0\n\n## Environment Variables\n\n```bash\nAZURE_STORAGE_ACCOUNT_NAME=<account-name>\nAZURE_STORAGE_ACCOUNT_KEY=<account-key>\n# OR connection string\nAZURE_STORAGE_CONNECTION_STRING=DefaultEndpointsProtocol=https;AccountName=...\n```\n\n## Authentication\n\n### DefaultAzureCredential (Recommended)\n\n```typescript\nimport { QueueServiceClient } from \"@azure/storage-queue\";\nimport { DefaultAzureCredential } from \"@azure/identity\";\n\nconst accountName = process.env.AZURE_STORAGE_ACCOUNT_NAME!;\nconst client = new QueueServiceClient(\n  `https://${accountName}.queue.core.windows.net`,\n  new DefaultAzureCredential()\n);\n```\n\n### Connection String\n\n```typescript\nimport { QueueServiceClient } from \"@azure/storage-queue\";\n\nconst client = QueueServiceClient.fromConnectionString(\n  process.env.AZURE_STORAGE_CONNECTION_STRING!\n);\n```\n\n### StorageSharedKeyCredential (Node.js only)\n\n```typescript\nimport { QueueServiceClient, StorageSharedKeyCredential } from \"@azure/storage-queue\";\n\nconst accountName = process.env.AZURE_STORAGE_ACCOUNT_NAME!;\nconst accountKey = process.env.AZURE_STORAGE_ACCOUNT_KEY!;\n\nconst sharedKeyCredential = new StorageSharedKeyCredential(accountName, accountKey);\nconst client = new QueueServiceClient(\n  `https://${accountName}.queue.core.windows.net`,\n  sharedKeyCredential\n);\n```\n\n### SAS Token\n\n```typescript\nimport { QueueServiceClient } from \"@azure/storage-queue\";\n\nconst accountName = process.env.AZURE_STORAGE_ACCOUNT_NAME!;\nconst sasToken = process.env.AZURE_STORAGE_SAS_TOKEN!;\n\nconst client = new QueueServiceClient(\n  `https://${accountName}.queue.core.windows.net${sasToken}`\n);\n```\n\n## Client Hierarchy\n\n```\nQueueServiceClient (account level)\n└── QueueClient (queue level)\n    └── Messages (send, receive, peek, delete)\n```\n\n## Queue Operations\n\n### Create Queue\n\n```typescript\nconst queueClient = client.getQueueClient(\"my-queue\");\nawait queueClient.create();\n\n// Or create if not exists\nawait queueClient.createIfNotExists();\n```\n\n### List Queues\n\n```typescript\nfor await (const queue of client.listQueues()) {\n  console.log(queue.name);\n}\n\n// With prefix filter\nfor await (const queue of client.listQueues({ prefix: \"task-\" })) {\n  console.log(queue.name);\n}\n```\n\n### Delete Queue\n\n```typescript\nawait queueClient.delete();\n\n// Or delete if exists\nawait queueClient.deleteIfExists();\n```\n\n### Get Queue Properties\n\n```typescript\nconst properties = await queueClient.getProperties();\nconsole.log(\"Approximate message count:\", properties.approximateMessagesCount);\nconsole.log(\"Metadata:\", properties.metadata);\n```\n\n### Set Queue Metadata\n\n```typescript\nawait queueClient.setMetadata({\n  department: \"engineering\",\n  priority: \"high\",\n});\n```\n\n## Message Operations\n\n### Send Message\n\n```typescript\nconst queueClient = client.getQueueClient(\"my-queue\");\n\n// Simple message\nawait queueClient.sendMessage(\"Hello, World!\");\n\n// With options\nawait queueClient.sendMessage(\"Delayed message\", {\n  visibilityTimeout: 60, // Hidden for 60 seconds\n  messageTimeToLive: 3600, // Expires in 1 hour\n});\n\n// JSON message (must be string)\nconst task = { type: \"process\", data: { id: 123 } };\nawait queueClient.sendMessage(JSON.stringify(task));\n```\n\n### Receive Messages\n\n```typescript\n// Receive up to 32 messages (default: 1)\nconst response = await queueClient.receiveMessages({\n  numberOfMessages: 10,\n  visibilityTimeout: 30, // 30 seconds to process\n});\n\nfor (const message of response.receivedMessageItems) {\n  console.log(\"Message ID:\", message.messageId);\n  console.log(\"Content:\", message.messageText);\n  console.log(\"Dequeue Count:\", message.dequeueCount);\n  console.log(\"Pop Receipt:\", message.popReceipt);\n  \n  // Process the message...\n  \n  // Delete after processing\n  await queueClient.deleteMessage(message.messageId, message.popReceipt);\n}\n```\n\n### Peek Messages\n\nPeek without removing from queue (no visibility timeout).\n\n```typescript\nconst response = await queueClient.peekMessages({\n  numberOfMessages: 5,\n});\n\nfor (const message of response.peekedMessageItems) {\n  console.log(\"Message ID:\", message.messageId);\n  console.log(\"Content:\", message.messageText);\n  // Note: No popReceipt - cannot delete peeked messages\n}\n```\n\n### Update Message\n\nExtend visibility timeout or update content.\n\n```typescript\n// Receive a message\nconst response = await queueClient.receiveMessages();\nconst message = response.receivedMessageItems[0];\n\nif (message) {\n  // Update content and extend visibility\n  const updateResponse = await queueClient.updateMessage(\n    message.messageId,\n    message.popReceipt,\n    \"Updated content\",\n    60 // New visibility timeout in seconds\n  );\n  \n  // Use new popReceipt for subsequent operations\n  console.log(\"New pop receipt:\", updateResponse.popReceipt);\n}\n```\n\n### Delete Message\n\n```typescript\n// After receiving\nconst response = await queueClient.receiveMessages();\nconst message = response.receivedMessageItems[0];\n\nif (message) {\n  await queueClient.deleteMessage(message.messageId, message.popReceipt);\n}\n```\n\n### Clear All Messages\n\n```typescript\nawait queueClient.clearMessages();\n```\n\n## Message Processing Patterns\n\n### Basic Worker Pattern\n\n```typescript\nasync function processQueue(queueClient: QueueClient): Promise<void> {\n  while (true) {\n    const response = await queueClient.receiveMessages({\n      numberOfMessages: 10,\n      visibilityTimeout: 30,\n    });\n\n    if (response.receivedMessageItems.length === 0) {\n      // No messages, wait before polling again\n      await sleep(5000);\n      continue;\n    }\n\n    for (const message of response.receivedMessageItems) {\n      try {\n        await processMessage(message.messageText);\n        await queueClient.deleteMessage(message.messageId, message.popReceipt);\n      } catch (error) {\n        console.error(`Failed to process message ${message.messageId}:`, error);\n        // Message will become visible again after timeout\n      }\n    }\n  }\n}\n\nasync function processMessage(content: string): Promise<void> {\n  const task = JSON.parse(content);\n  // Process task...\n}\n\nfunction sleep(ms: number): Promise<void> {\n  return new Promise((resolve) => setTimeout(resolve, ms));\n}\n```\n\n### Poison Message Handling\n\n```typescript\nconst MAX_DEQUEUE_COUNT = 5;\n\nasync function processWithPoisonHandling(\n  queueClient: QueueClient,\n  poisonQueueClient: QueueClient\n): Promise<void> {\n  const response = await queueClient.receiveMessages({\n    numberOfMessages: 10,\n    visibilityTimeout: 30,\n  });\n\n  for (const message of response.receivedMessageItems) {\n    if (message.dequeueCount > MAX_DEQUEUE_COUNT) {\n      // Move to poison queue\n      await poisonQueueClient.sendMessage(message.messageText);\n      await queueClient.deleteMessage(message.messageId, message.popReceipt);\n      console.log(`Moved message ${message.messageId} to poison queue`);\n      continue;\n    }\n\n    try {\n      await processMessage(message.messageText);\n      await queueClient.deleteMessage(message.messageId, message.popReceipt);\n    } catch (error) {\n      console.error(`Processing failed (attempt ${message.dequeueCount}):`, error);\n    }\n  }\n}\n```\n\n### Batch Processing with Visibility Extension\n\n```typescript\nasync function processBatchWithExtension(queueClient: QueueClient): Promise<void> {\n  const response = await queueClient.receiveMessages({\n    numberOfMessages: 1,\n    visibilityTimeout: 60,\n  });\n\n  const message = response.receivedMessageItems[0];\n  if (!message) return;\n\n  let popReceipt = message.popReceipt;\n\n  // Start visibility extension timer\n  const extensionInterval = setInterval(async () => {\n    try {\n      const updateResponse = await queueClient.updateMessage(\n        message.messageId,\n        popReceipt,\n        message.messageText,\n        60 // Extend by another 60 seconds\n      );\n      popReceipt = updateResponse.popReceipt;\n    } catch (error) {\n      console.error(\"Failed to extend visibility:\", error);\n    }\n  }, 45000); // Extend every 45 seconds\n\n  try {\n    await longRunningProcess(message.messageText);\n    await queueClient.deleteMessage(message.messageId, popReceipt);\n  } finally {\n    clearInterval(extensionInterval);\n  }\n}\n```\n\n## Message Encoding\n\nBy default, messages are Base64 encoded. You can customize this:\n\n```typescript\nimport { QueueClient } from \"@azure/storage-queue\";\n\n// Custom encoder/decoder for plain text\nconst queueClient = new QueueClient(\n  `https://${accountName}.queue.core.windows.net/my-queue`,\n  credential,\n  {\n    messageEncoding: \"text\", // \"base64\" (default) or \"text\"\n  }\n);\n\n// Or with custom encoder\nconst customQueueClient = new QueueClient(\n  `https://${accountName}.queue.core.windows.net/my-queue`,\n  credential,\n  {\n    messageEncoding: {\n      encode: (message: string) => Buffer.from(message).toString(\"base64\"),\n      decode: (message: string) => Buffer.from(message, \"base64\").toString(),\n    },\n  }\n);\n```\n\n## SAS Token Generation (Node.js only)\n\n### Generate Queue SAS\n\n```typescript\nimport {\n  QueueSASPermissions,\n  generateQueueSASQueryParameters,\n  StorageSharedKeyCredential,\n} from \"@azure/storage-queue\";\n\nconst sharedKeyCredential = new StorageSharedKeyCredential(accountName, accountKey);\n\nconst sasToken = generateQueueSASQueryParameters(\n  {\n    queueName: \"my-queue\",\n    permissions: QueueSASPermissions.parse(\"raup\"), // read, add, update, process\n    startsOn: new Date(),\n    expiresOn: new Date(Date.now() + 3600 * 1000), // 1 hour\n  },\n  sharedKeyCredential\n).toString();\n\nconst sasUrl = `https://${accountName}.queue.core.windows.net/my-queue?${sasToken}`;\n```\n\n### Generate Account SAS\n\n```typescript\nimport {\n  AccountSASPermissions,\n  AccountSASResourceTypes,\n  AccountSASServices,\n  generateAccountSASQueryParameters,\n} from \"@azure/storage-queue\";\n\nconst sasToken = generateAccountSASQueryParameters(\n  {\n    services: AccountSASServices.parse(\"q\").toString(), // queue\n    resourceTypes: AccountSASResourceTypes.parse(\"sco\").toString(),\n    permissions: AccountSASPermissions.parse(\"rwdlacupi\"),\n    expiresOn: new Date(Date.now() + 24 * 3600 * 1000),\n  },\n  sharedKeyCredential\n).toString();\n```\n\n## Error Handling\n\n```typescript\nimport { RestError } from \"@azure/storage-queue\";\n\ntry {\n  await queueClient.sendMessage(\"test\");\n} catch (error) {\n  if (error instanceof RestError) {\n    switch (error.statusCode) {\n      case 404:\n        console.log(\"Queue not found\");\n        break;\n      case 400:\n        console.log(\"Bad request - message too large or invalid\");\n        break;\n      case 403:\n        console.log(\"Access denied\");\n        break;\n      case 409:\n        console.log(\"Queue already exists or being deleted\");\n        break;\n      default:\n        console.error(`Storage error ${error.statusCode}: ${error.message}`);\n    }\n  }\n  throw error;\n}\n```\n\n## TypeScript Types Reference\n\n```typescript\nimport {\n  // Clients\n  QueueServiceClient,\n  QueueClient,\n\n  // Authentication\n  StorageSharedKeyCredential,\n  AnonymousCredential,\n\n  // SAS\n  QueueSASPermissions,\n  AccountSASPermissions,\n  AccountSASServices,\n  AccountSASResourceTypes,\n  generateQueueSASQueryParameters,\n  generateAccountSASQueryParameters,\n\n  // Messages\n  DequeuedMessageItem,\n  PeekedMessageItem,\n  QueueSendMessageResponse,\n  QueueReceiveMessageResponse,\n  QueueUpdateMessageResponse,\n\n  // Queue\n  QueueItem,\n  QueueGetPropertiesResponse,\n\n  // Errors\n  RestError,\n} from \"@azure/storage-queue\";\n```\n\n## Message Limits\n\n| Limit | Value |\n|-------|-------|\n| Max message size | 64 KB |\n| Max visibility timeout | 7 days |\n| Max time-to-live | 7 days (or -1 for infinite) |\n| Max messages per receive | 32 |\n| Default visibility timeout | 30 seconds |\n\n## Best Practices\n\n1. **Use DefaultAzureCredential** — Prefer AAD over connection strings/keys\n2. **Always delete after processing** — Prevent duplicate processing\n3. **Handle poison messages** — Move failed messages to a dead-letter queue\n4. **Use appropriate visibility timeout** — Set based on expected processing time\n5. **Extend visibility for long tasks** — Update message to prevent timeout\n6. **Use JSON for structured data** — Serialize objects to JSON strings\n7. **Check dequeueCount** — Detect repeatedly failing messages\n8. **Use batch receive** — Receive multiple messages for efficiency\n\n## Platform Differences\n\n| Feature | Node.js | Browser |\n|---------|---------|---------|\n| `StorageSharedKeyCredential` | ✅ | ❌ |\n| SAS generation | ✅ | ❌ |\n| DefaultAzureCredential | ✅ | ❌ |\n| Anonymous/SAS access | ✅ | ✅ |\n| All message operations | ✅ | ✅ |\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","storage","queue","antigravity","awesome","skills","sickn33","agent-skills","agentic-skills","ai-agent-skills","ai-agents","ai-coding"],"capabilities":["skill","source-sickn33","skill-azure-storage-queue-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-storage-queue-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 (13,124 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:34.729Z","embedding":null,"createdAt":"2026-04-18T21:33:16.491Z","updatedAt":"2026-04-24T18:50:34.729Z","lastSeenAt":"2026-04-24T18:50:34.729Z","tsv":"'-1':991 '/my-queue':751,770 '/my-queue?$':840 '0':427,472,510,667 '1':302,329,661,831,1006 '10':335,505,596 '1000':830,874 '12':50 '123':315 '18.0.0':53 '2':1014 '24':872 '3':1022 '30':337,338,507,598,1002 '32':326,998 '3600':299,829,873 '4':1035 '400':904 '403':915 '404':897 '409':921 '45':709 '45000':706 '5':388,582,1046 '5000':519 '6':1057 '60':293,296,443,663,690,694 '64':976 '7':981,988,1068 '8':1075 'aad':1010 'access':917,1094 'account':59,63,91,128,134,160,178,843 'accountkey':131,141,807 'accountnam':74,88,97,125,140,146,157,172,748,767,806,837 'accountsaspermiss':847,951 'accountsaspermissions.parse':866 'accountsasresourcetyp':848,953 'accountsasresourcetypes.parse':862 'accountsasservic':849,952 'accountsasservices.parse':857 'action':1110 'add':819 'alreadi':924 'alway':1015 'anonymous/sas':1093 'anonymouscredenti':948 'anoth':693 'applic':1104 'appropri':1037 'approxim':252 'ask':1148 'async':492,550,583,650,681 'attempt':641 'authent':75,946 'await':199,206,212,223,235,241,249,263,282,288,316,332,368,385,422,437,467,475,483,502,517,527,530,593,613,616,629,632,658,685,712,715,885 'azur':2,6,30,57,61,68 'azure-storage-queue-t':1 'azure/identity':47,86 'azure/storage-queue':11,26,46,82,107,123,155,738,801,852,883,968 'bad':906 'base':1041 'base64':728,755,779,785 'bash':43,56 'basic':488 'batch':644,1077 'becom':545 'best':1004 'boundari':1156 'break':902,913,919,929 'browser':1088 'buffer.from':776,783 'cannot':404 'case':896,903,914,920 'catch':534,636,698,888 'check':1069 'clarif':1150 'clear':479,1123 'clearinterv':720 'client':94,109,143,169,175,943 'client.getqueueclient':195,276 'client.listqueues':216,227 'connect':66,70,101,113,1012 'console.error':536,638,700,931 'console.log':217,230,251,256,347,351,354,358,394,398,455,620,898,905,916,922 'const':87,93,108,124,130,136,142,156,162,168,193,213,224,247,274,309,330,343,383,390,420,424,435,465,469,500,522,556,578,591,600,656,664,678,683,744,763,802,808,835,853 'content':352,399,415,431,442,553,559 'continu':520,627 'count':254,356,581,608 'creat':190,202 'credenti':752,771 'criteria':1159 'current':48 'custom':732,739,761 'customqueuecli':764 'data':313,1062 'date':824,827,870 'date.now':828,871 'day':982,989 'dead':1032 'dead-lett':1031 'decod':780 'default':328,725,756,930,999 'defaultazurecredenti':76,84,100,1008,1092 'defaultendpointsprotocol':72 'delay':290 'delet':22,187,232,238,365,405,460,928,1016 'deni':918 'depart':265 'dequeu':355,580,607 'dequeuecount':1070 'dequeuedmessageitem':957 'describ':1111,1127 'detect':1071 'differ':1085 'duplic':1020 'effici':1083 'encod':723,729,762,773 'encoder/decoder':740 'engin':266 'environ':54,1139 'environment-specif':1138 'error':535,542,637,643,699,705,877,889,891,933,937,965 'error.message':935 'error.statuscode':895,934 'everi':708 'execut':1106 'exist':205,240,925 'expect':1043 'expert':1144 'expir':300 'expireson':825,868 'extend':410,433,691,703,707,1047 'extens':648,676 'extensioninterv':679,721 'fail':537,640,701,1027,1073 'featur':1086 'filter':221 'final':719 'found':901 'function':493,551,562,584,651 'generat':789,792,842,1091 'generateaccountsasqueryparamet':850,855,955 'generatequeuesasqueryparamet':798,810,954 'get':243 'handl':576,878,1023 'hello':284 'hidden':294 'hierarchi':176 'high':268 'hour':303,832 'https':73 'id':314,349,396 'import':79,83,104,119,152,735,796,846,880,942 'infinit':993 'input':1153 'instal':42,45 'instanceof':892 'invalid':912 'javascript/typescript':9 'json':304,1059,1066 'json.parse':558 'json.stringify':318 'kb':977 'key':64,135 'larg':910 'let':671 'letter':1033 'level':179,182 'limit':970,971,1115 'list':208 'live':987 'long':1050 'longrunningprocess':713 'manag':38 'match':1124 'max':579,606,973,978,983,994 'messag':13,23,39,183,253,269,272,281,291,305,321,327,344,348,364,373,391,395,407,409,419,425,429,461,470,474,481,485,512,523,540,543,575,601,622,665,669,722,726,774,777,781,784,908,956,969,974,995,1025,1028,1053,1074,1081,1096 'message.dequeuecount':357,605,642 'message.messageid':350,370,397,439,477,532,541,618,623,634,687,717 'message.messagetext':353,400,529,615,631,689,714 'message.popreceipt':361,371,440,478,533,619,635,673 'messageencod':753,772 'messagetimetol':298 'metadata':257,261 'miss':1161 'move':609,621,1026 'ms':564,573 'multipl':1080 'must':306 'my-queu':196,277,812 'name':60,92,129,161 'new':95,99,138,144,170,444,450,456,568,746,765,804,823,826,869 'node.js':52,116,790,1087 'note':401 'npm':44 'number':565 'numberofmessag':334,387,504,595,660 'object':1064 'oper':15,33,189,270,454,1097 'option':287 'output':1133 'overview':1114 'pattern':487,490 'peek':20,36,186,372,374,406 'peekedmessageitem':958 'per':996 'permiss':815,865,1154 'plain':742 'platform':1084 'poison':574,611,625,1024 'poisonqueuecli':588 'poisonqueueclient.sendmessage':614 'poll':515 'pop':359,457 'popreceipt':403,451,672,688,696,718 'practic':1005 'prefer':1009 'prefix':220,228 'prevent':1019,1055 'prioriti':267 'process':312,341,362,367,486,539,560,639,645,821,1018,1021,1044 'process.env.azure':89,111,126,132,158,164 'processbatchwithextens':652 'processmessag':528,552,630 'processqueu':494 'processwithpoisonhandl':585 'promis':497,555,566,569,590,655 'properti':245,248 'properties.approximatemessagescount':255 'properties.metadata':258 'q':858 'queue':4,7,14,25,31,41,181,188,191,198,209,214,225,233,244,260,279,378,612,626,793,814,860,899,923,962,1034 'queue.core.windows.net':98,147,173,750,769,839 'queue.core.windows.net/my-queue':749,768 'queue.core.windows.net/my-queue?$':838 'queue.name':218,231 'queueclient':180,194,275,495,496,586,587,589,653,654,736,745,747,766,945 'queueclient.clearmessages':484 'queueclient.create':200 'queueclient.createifnotexists':207 'queueclient.delete':236 'queueclient.deleteifexists':242 'queueclient.deletemessage':369,476,531,617,633,716 'queueclient.getproperties':250 'queueclient.peekmessages':386 'queueclient.receivemessages':333,423,468,503,594,659 'queueclient.sendmessage':283,289,317,886 'queueclient.setmetadata':264 'queueclient.updatemessage':438,686 'queuegetpropertiesrespons':964 'queueitem':963 'queuenam':811 'queuereceivemessagerespons':960 'queuesaspermiss':797,950 'queuesaspermissions.parse':816 'queuesendmessagerespons':959 'queueservicecli':80,96,105,120,145,153,171,177,944 'queueserviceclient.fromconnectionstring':110 'queueupdatemessagerespons':961 'raup':817 'read':818 'receipt':360,458 'receiv':19,35,185,320,323,417,464,997,1078,1079 'recommend':77 'refer':940 'remov':376 'repeat':1072 'request':907 'requir':1152 'resolv':570,572 'resourcetyp':861 'respons':331,384,421,466,501,592,657 'response.peekedmessageitems':393 'response.receivedmessageitems':346,426,471,525,603,666 'response.receivedmessageitems.length':509 'resterror':881,893,966 'return':567,670 'review':1145 'rwdlacupi':867 'safeti':1155 'sas':149,166,787,794,844,949,1090 'sastoken':163,174,809,841,854 'sasurl':836 'sco':863 'scope':1126 'sdk':10,28 'second':297,339,448,695,710,1003 'send':18,34,184,271 'serial':1063 'servic':856 'set':259,1040 'setinterv':680 'settimeout':571 'sharedkeycredenti':137,148,803,833,875 'simpl':280 'size':975 'skill':1102,1118 'skill-azure-storage-queue-ts' 'sleep':518,563 'source-sickn33' 'specif':1140 'start':674 'startson':822 'stop':1146 'storag':3,8,32,58,62,69,90,112,127,133,159,165,932 'storagesharedkeycredenti':115,121,139,799,805,947,1089 'string':67,71,102,114,308,554,775,782,1067 'strings/keys':1013 'structur':1061 'subsequ':453 'substitut':1136 'success':1158 'switch':894 'task':229,310,319,557,561,1051,1122 'test':887,1142 'text':743,754,758 'throw':936 'time':985,1045 'time-to-l':984 'timeout':381,412,446,549,980,1001,1039,1056 'timer':677 'token':150,167,788 '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' 'tostr':778,786,834,859,864,876 'treat':1131 'tri':526,628,682,711,884 'true':499 'ts':5 'type':311,939 'typescript':78,103,118,151,192,210,234,246,262,273,322,382,416,462,482,491,577,649,734,795,845,879,938,941 'typescript/javascript':27 'updat':408,414,430,441,820,1052 'updaterespons':436,684 'updateresponse.popreceipt':459,697 'use':16,449,1007,1036,1058,1076,1100,1116 'valid':1141 'valu':972 'variabl':55 'version':49 'visibilitytimeout':292,336,506,597,662 'visibl':380,411,434,445,546,647,675,704,979,1000,1038,1048 'wait':513 'without':375 'worker':489 'workflow':1108 'world':285 'x':51","prices":[{"id":"d5f8e758-22b6-4dd0-9128-3459606b6586","listingId":"ff51b125-ee6e-455f-8e9c-65e97256e9ed","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:33:16.491Z"}],"sources":[{"listingId":"ff51b125-ee6e-455f-8e9c-65e97256e9ed","source":"github","sourceId":"sickn33/antigravity-awesome-skills/azure-storage-queue-ts","sourceUrl":"https://github.com/sickn33/antigravity-awesome-skills/tree/main/skills/azure-storage-queue-ts","isPrimary":false,"firstSeenAt":"2026-04-18T21:33:16.491Z","lastSeenAt":"2026-04-24T18:50:34.729Z"}],"details":{"listingId":"ff51b125-ee6e-455f-8e9c-65e97256e9ed","quickStartSnippet":null,"exampleRequest":null,"exampleResponse":null,"schema":null,"openapiUrl":null,"agentsTxtUrl":null,"citations":[],"useCases":[],"bestFor":[],"notFor":[],"kindDetails":{"org":"sickn33","slug":"azure-storage-queue-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":"719441af8a3608be9233b0ac6e53bcfcc2a5bd30","skill_md_path":"skills/azure-storage-queue-ts/SKILL.md","default_branch":"main","skill_tree_url":"https://github.com/sickn33/antigravity-awesome-skills/tree/main/skills/azure-storage-queue-ts"},"layout":"multi","source":"github","category":"antigravity-awesome-skills","frontmatter":{"name":"azure-storage-queue-ts","description":"Azure Queue Storage JavaScript/TypeScript SDK (@azure/storage-queue) for message queue operations. Use for sending, receiving, peeking, and deleting messages in queues."},"skills_sh_url":"https://skills.sh/sickn33/antigravity-awesome-skills/azure-storage-queue-ts"},"updatedAt":"2026-04-24T18:50:34.729Z"}}