skills/azure-storage-file-share-ts/SKILL.md
--- name: azure-storage-file-share-ts description: "|" Azure File Share JavaScript/TypeScript SDK (@azure/storage-file-share) for SMB file share operations. Use for creating shares, managing directories, uploading/downloading files, and handling file metadata. Supports Azure Files SMB protocol scenarios. Triggers: "file share", "@azure/storage-file-share", "ShareServiceClient", "ShareClient", "SMB", "Azure Files". package: "@azure/storage-file-share" risk: unknown source: community --- # @azu
npx skillsauth add luismarinoc/antigravity-awesome-skills skills/azure-storage-file-share-tsInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
SDK for Azure File Share operations — SMB file shares, directories, and file operations.
npm install @azure/storage-file-share @azure/identity
Current Version: 12.x
Node.js: >= 18.0.0
AZURE_STORAGE_ACCOUNT_NAME=<account-name>
AZURE_STORAGE_ACCOUNT_KEY=<account-key>
# OR connection string
AZURE_STORAGE_CONNECTION_STRING=DefaultEndpointsProtocol=https;AccountName=...
import { ShareServiceClient } from "@azure/storage-file-share";
const client = ShareServiceClient.fromConnectionString(
process.env.AZURE_STORAGE_CONNECTION_STRING!
);
import { ShareServiceClient, StorageSharedKeyCredential } from "@azure/storage-file-share";
const accountName = process.env.AZURE_STORAGE_ACCOUNT_NAME!;
const accountKey = process.env.AZURE_STORAGE_ACCOUNT_KEY!;
const sharedKeyCredential = new StorageSharedKeyCredential(accountName, accountKey);
const client = new ShareServiceClient(
`https://${accountName}.file.core.windows.net`,
sharedKeyCredential
);
import { ShareServiceClient } from "@azure/storage-file-share";
import { DefaultAzureCredential } from "@azure/identity";
const accountName = process.env.AZURE_STORAGE_ACCOUNT_NAME!;
const client = new ShareServiceClient(
`https://${accountName}.file.core.windows.net`,
new DefaultAzureCredential()
);
import { ShareServiceClient } from "@azure/storage-file-share";
const accountName = process.env.AZURE_STORAGE_ACCOUNT_NAME!;
const sasToken = process.env.AZURE_STORAGE_SAS_TOKEN!;
const client = new ShareServiceClient(
`https://${accountName}.file.core.windows.net${sasToken}`
);
ShareServiceClient (account level)
└── ShareClient (share level)
└── ShareDirectoryClient (directory level)
└── ShareFileClient (file level)
const shareClient = client.getShareClient("my-share");
await shareClient.create();
// Create with quota (in GB)
await shareClient.create({ quota: 100 });
for await (const share of client.listShares()) {
console.log(share.name, share.properties.quota);
}
// With prefix filter
for await (const share of client.listShares({ prefix: "logs-" })) {
console.log(share.name);
}
await shareClient.delete();
// Delete if exists
await shareClient.deleteIfExists();
const properties = await shareClient.getProperties();
console.log("Quota:", properties.quota, "GB");
console.log("Last Modified:", properties.lastModified);
await shareClient.setQuota(200); // 200 GB
const directoryClient = shareClient.getDirectoryClient("my-directory");
await directoryClient.create();
// Create nested directory
const nestedDir = shareClient.getDirectoryClient("parent/child/grandchild");
await nestedDir.create();
const directoryClient = shareClient.getDirectoryClient("my-directory");
for await (const item of directoryClient.listFilesAndDirectories()) {
if (item.kind === "directory") {
console.log(`[DIR] ${item.name}`);
} else {
console.log(`[FILE] ${item.name} (${item.properties.contentLength} bytes)`);
}
}
await directoryClient.delete();
// Delete if exists
await directoryClient.deleteIfExists();
const exists = await directoryClient.exists();
if (!exists) {
await directoryClient.create();
}
const fileClient = shareClient
.getDirectoryClient("my-directory")
.getFileClient("my-file.txt");
// Upload string
const content = "Hello, World!";
await fileClient.create(content.length);
await fileClient.uploadRange(content, 0, content.length);
import * as fs from "fs";
import * as path from "path";
const fileClient = shareClient.rootDirectoryClient.getFileClient("uploaded.txt");
const localFilePath = "/path/to/local/file.txt";
const fileSize = fs.statSync(localFilePath).size;
await fileClient.create(fileSize);
await fileClient.uploadFile(localFilePath);
const buffer = Buffer.from("Hello, Azure Files!");
const fileClient = shareClient.rootDirectoryClient.getFileClient("buffer-file.txt");
await fileClient.create(buffer.length);
await fileClient.uploadRange(buffer, 0, buffer.length);
import * as fs from "fs";
const fileClient = shareClient.rootDirectoryClient.getFileClient("streamed.txt");
const readStream = fs.createReadStream("/path/to/local/file.txt");
const fileSize = fs.statSync("/path/to/local/file.txt").size;
await fileClient.create(fileSize);
await fileClient.uploadStream(readStream, fileSize, 4 * 1024 * 1024, 4); // 4MB buffer, 4 concurrency
const fileClient = shareClient
.getDirectoryClient("my-directory")
.getFileClient("my-file.txt");
const downloadResponse = await fileClient.download();
// Read as string
const chunks: Buffer[] = [];
for await (const chunk of downloadResponse.readableStreamBody!) {
chunks.push(Buffer.from(chunk));
}
const content = Buffer.concat(chunks).toString("utf-8");
const fileClient = shareClient.rootDirectoryClient.getFileClient("my-file.txt");
await fileClient.downloadToFile("/path/to/local/destination.txt");
const fileClient = shareClient.rootDirectoryClient.getFileClient("my-file.txt");
const buffer = await fileClient.downloadToBuffer();
console.log(buffer.toString());
const fileClient = shareClient.rootDirectoryClient.getFileClient("my-file.txt");
await fileClient.delete();
// Delete if exists
await fileClient.deleteIfExists();
const sourceUrl = "https://account.file.core.windows.net/share/source.txt";
const destFileClient = shareClient.rootDirectoryClient.getFileClient("destination.txt");
// Start copy operation
const copyPoller = await destFileClient.startCopyFromURL(sourceUrl);
await copyPoller.pollUntilDone();
const fileClient = shareClient.rootDirectoryClient.getFileClient("my-file.txt");
const properties = await fileClient.getProperties();
console.log("Content-Length:", properties.contentLength);
console.log("Content-Type:", properties.contentType);
console.log("Last Modified:", properties.lastModified);
console.log("ETag:", properties.etag);
await fileClient.setMetadata({
author: "John Doe",
category: "documents",
});
await fileClient.setHttpHeaders({
fileContentType: "text/plain",
fileCacheControl: "max-age=3600",
fileContentDisposition: "attachment; filename=download.txt",
});
const data = Buffer.from("partial content");
await fileClient.uploadRange(data, 100, data.length); // Write at offset 100
const downloadResponse = await fileClient.download(100, 50); // offset 100, length 50
await fileClient.clearRange(0, 100); // Clear first 100 bytes
const snapshotResponse = await shareClient.createSnapshot();
console.log("Snapshot:", snapshotResponse.snapshot);
const snapshotShareClient = shareClient.withSnapshot(snapshotResponse.snapshot!);
const snapshotFileClient = snapshotShareClient.rootDirectoryClient.getFileClient("file.txt");
const content = await snapshotFileClient.downloadToBuffer();
await shareClient.delete({ deleteSnapshots: "include" });
import {
generateFileSASQueryParameters,
FileSASPermissions,
StorageSharedKeyCredential,
} from "@azure/storage-file-share";
const sharedKeyCredential = new StorageSharedKeyCredential(accountName, accountKey);
const sasToken = generateFileSASQueryParameters(
{
shareName: "my-share",
filePath: "my-directory/my-file.txt",
permissions: FileSASPermissions.parse("r"), // read only
expiresOn: new Date(Date.now() + 3600 * 1000), // 1 hour
},
sharedKeyCredential
).toString();
const sasUrl = `https://${accountName}.file.core.windows.net/my-share/my-directory/my-file.txt?${sasToken}`;
import { ShareSASPermissions, generateFileSASQueryParameters } from "@azure/storage-file-share";
const sasToken = generateFileSASQueryParameters(
{
shareName: "my-share",
permissions: ShareSASPermissions.parse("rcwdl"), // read, create, write, delete, list
expiresOn: new Date(Date.now() + 24 * 3600 * 1000), // 24 hours
},
sharedKeyCredential
).toString();
import { RestError } from "@azure/storage-file-share";
try {
await shareClient.create();
} catch (error) {
if (error instanceof RestError) {
switch (error.statusCode) {
case 404:
console.log("Share not found");
break;
case 409:
console.log("Share already exists");
break;
case 403:
console.log("Access denied");
break;
default:
console.error(`Storage error ${error.statusCode}: ${error.message}`);
}
}
throw error;
}
import {
// Clients
ShareServiceClient,
ShareClient,
ShareDirectoryClient,
ShareFileClient,
// Authentication
StorageSharedKeyCredential,
AnonymousCredential,
// SAS
FileSASPermissions,
ShareSASPermissions,
AccountSASPermissions,
AccountSASServices,
AccountSASResourceTypes,
generateFileSASQueryParameters,
generateAccountSASQueryParameters,
// Options & Responses
ShareCreateResponse,
FileDownloadResponseModel,
DirectoryItem,
FileItem,
ShareProperties,
FileProperties,
// Errors
RestError,
} from "@azure/storage-file-share";
uploadStream/downloadToFile for files > 256MBRestError.statusCode for specific handling*IfExists methods — For idempotent operations| Feature | Node.js | Browser |
|---------|---------|---------|
| StorageSharedKeyCredential | ✅ | ❌ |
| uploadFile() | ✅ | ❌ |
| uploadStream() | ✅ | ❌ |
| downloadToFile() | ✅ | ❌ |
| downloadToBuffer() | ✅ | ❌ |
| SAS generation | ✅ | ❌ |
| DefaultAzureCredential | ✅ | ❌ |
| Anonymous/SAS access | ✅ | ✅ |
This skill is applicable to execute the workflow or actions described in the overview.
testing
This skill should be used when the user asks to "perform cloud penetration testing", "assess Azure or AWS or GCP security", "enumerate cloud resources", "exploit cloud misconfiguratio...
testing
--- name: cloud-architect description: "Expert cloud architect specializing in AWS/Azure/GCP multi-cloud" infrastructure design, advanced IaC (Terraform/OpenTofu/CDK), FinOps cost optimization, and modern architectural patterns. Masters serverless, microservices, security, compliance, and disaster recovery. Use PROACTIVELY for cloud architecture, cost optimization, migration planning, or multi-cloud strategies. metadata: model: opus risk: unknown source: community --- ## Use this sk
tools
Automate Close CRM tasks via Rube MCP (Composio): create leads, manage calls/SMS, handle tasks, and track notes. Always search tools first for current schemas.
tools
Automate ClickUp project management including tasks, spaces, folders, lists, comments, and team operations via Rube MCP (Composio). Always search tools first for current schemas.