mirror of
https://github.com/ksyasuda/dotfiles.git
synced 2026-03-20 18:11:27 -07:00
update skills
This commit is contained in:
193
.agents/skills/cloudflare-deploy/references/tunnel/api.md
Normal file
193
.agents/skills/cloudflare-deploy/references/tunnel/api.md
Normal file
@@ -0,0 +1,193 @@
|
||||
# Tunnel API
|
||||
|
||||
## Cloudflare API Access
|
||||
|
||||
**Base URL**: `https://api.cloudflare.com/client/v4`
|
||||
|
||||
**Authentication**:
|
||||
```bash
|
||||
Authorization: Bearer ${CF_API_TOKEN}
|
||||
```
|
||||
|
||||
## TypeScript SDK
|
||||
|
||||
Install: `npm install cloudflare`
|
||||
|
||||
```typescript
|
||||
import Cloudflare from 'cloudflare';
|
||||
|
||||
const cf = new Cloudflare({
|
||||
apiToken: process.env.CF_API_TOKEN,
|
||||
});
|
||||
|
||||
const accountId = process.env.CF_ACCOUNT_ID;
|
||||
```
|
||||
|
||||
## Create Tunnel
|
||||
|
||||
### cURL
|
||||
```bash
|
||||
curl -X POST "https://api.cloudflare.com/client/v4/accounts/{account_id}/tunnels" \
|
||||
-H "Authorization: Bearer ${CF_API_TOKEN}" \
|
||||
-H "Content-Type: application/json" \
|
||||
--data '{
|
||||
"name": "my-tunnel",
|
||||
"tunnel_secret": "<base64-secret>"
|
||||
}'
|
||||
```
|
||||
|
||||
### TypeScript
|
||||
```typescript
|
||||
const tunnel = await cf.zeroTrust.tunnels.create({
|
||||
account_id: accountId,
|
||||
name: 'my-tunnel',
|
||||
tunnel_secret: Buffer.from(crypto.randomBytes(32)).toString('base64'),
|
||||
});
|
||||
|
||||
console.log(`Tunnel ID: ${tunnel.id}`);
|
||||
```
|
||||
|
||||
## List Tunnels
|
||||
|
||||
### cURL
|
||||
```bash
|
||||
curl -X GET "https://api.cloudflare.com/client/v4/accounts/{account_id}/tunnels" \
|
||||
-H "Authorization: Bearer ${CF_API_TOKEN}"
|
||||
```
|
||||
|
||||
### TypeScript
|
||||
```typescript
|
||||
const tunnels = await cf.zeroTrust.tunnels.list({
|
||||
account_id: accountId,
|
||||
});
|
||||
|
||||
for (const tunnel of tunnels.result) {
|
||||
console.log(`${tunnel.name}: ${tunnel.id}`);
|
||||
}
|
||||
```
|
||||
|
||||
## Get Tunnel Info
|
||||
|
||||
### cURL
|
||||
```bash
|
||||
curl -X GET "https://api.cloudflare.com/client/v4/accounts/{account_id}/tunnels/{tunnel_id}" \
|
||||
-H "Authorization: Bearer ${CF_API_TOKEN}"
|
||||
```
|
||||
|
||||
### TypeScript
|
||||
```typescript
|
||||
const tunnel = await cf.zeroTrust.tunnels.get(tunnelId, {
|
||||
account_id: accountId,
|
||||
});
|
||||
|
||||
console.log(`Status: ${tunnel.status}`);
|
||||
console.log(`Connections: ${tunnel.connections?.length || 0}`);
|
||||
```
|
||||
|
||||
## Update Tunnel Config
|
||||
|
||||
### cURL
|
||||
```bash
|
||||
curl -X PUT "https://api.cloudflare.com/client/v4/accounts/{account_id}/tunnels/{tunnel_id}/configurations" \
|
||||
-H "Authorization: Bearer ${CF_API_TOKEN}" \
|
||||
-H "Content-Type: application/json" \
|
||||
--data '{
|
||||
"config": {
|
||||
"ingress": [
|
||||
{"hostname": "app.example.com", "service": "http://localhost:8000"},
|
||||
{"service": "http_status:404"}
|
||||
]
|
||||
}
|
||||
}'
|
||||
```
|
||||
|
||||
### TypeScript
|
||||
```typescript
|
||||
const config = await cf.zeroTrust.tunnels.configurations.update(
|
||||
tunnelId,
|
||||
{
|
||||
account_id: accountId,
|
||||
config: {
|
||||
ingress: [
|
||||
{ hostname: 'app.example.com', service: 'http://localhost:8000' },
|
||||
{ service: 'http_status:404' },
|
||||
],
|
||||
},
|
||||
}
|
||||
);
|
||||
```
|
||||
|
||||
## Delete Tunnel
|
||||
|
||||
### cURL
|
||||
```bash
|
||||
curl -X DELETE "https://api.cloudflare.com/client/v4/accounts/{account_id}/tunnels/{tunnel_id}" \
|
||||
-H "Authorization: Bearer ${CF_API_TOKEN}"
|
||||
```
|
||||
|
||||
### TypeScript
|
||||
```typescript
|
||||
await cf.zeroTrust.tunnels.delete(tunnelId, {
|
||||
account_id: accountId,
|
||||
});
|
||||
```
|
||||
|
||||
## Token-Based Tunnels (Config Source: Cloudflare)
|
||||
|
||||
Token-based tunnels store config in Cloudflare dashboard instead of local files.
|
||||
|
||||
### Via Dashboard
|
||||
1. **Zero Trust** > **Networks** > **Tunnels**
|
||||
2. **Create a tunnel** > **Cloudflared**
|
||||
3. Configure routes in dashboard
|
||||
4. Copy token
|
||||
5. Run on origin:
|
||||
```bash
|
||||
cloudflared service install <TOKEN>
|
||||
```
|
||||
|
||||
### Via Token
|
||||
```bash
|
||||
# Run with token (no config file needed)
|
||||
cloudflared tunnel --no-autoupdate run --token ${TUNNEL_TOKEN}
|
||||
|
||||
# Docker
|
||||
docker run cloudflare/cloudflared:latest tunnel --no-autoupdate run --token ${TUNNEL_TOKEN}
|
||||
```
|
||||
|
||||
### Get Tunnel Token (TypeScript)
|
||||
```typescript
|
||||
// Get tunnel to retrieve token
|
||||
const tunnel = await cf.zeroTrust.tunnels.get(tunnelId, {
|
||||
account_id: accountId,
|
||||
});
|
||||
|
||||
// Token available in tunnel.token (only for config source: cloudflare)
|
||||
const token = tunnel.token;
|
||||
```
|
||||
|
||||
## DNS Routes API
|
||||
|
||||
```bash
|
||||
# Create DNS route
|
||||
curl -X POST "https://api.cloudflare.com/client/v4/accounts/{account_id}/tunnels/{tunnel_id}/connections" \
|
||||
-H "Authorization: Bearer ${CF_API_TOKEN}" \
|
||||
--data '{"hostname": "app.example.com"}'
|
||||
|
||||
# Delete route
|
||||
curl -X DELETE "https://api.cloudflare.com/client/v4/accounts/{account_id}/tunnels/{tunnel_id}/connections/{route_id}" \
|
||||
-H "Authorization: Bearer ${CF_API_TOKEN}"
|
||||
```
|
||||
|
||||
## Private Network Routes API
|
||||
|
||||
```bash
|
||||
# Add IP route
|
||||
curl -X POST "https://api.cloudflare.com/client/v4/accounts/{account_id}/tunnels/{tunnel_id}/routes" \
|
||||
-H "Authorization: Bearer ${CF_API_TOKEN}" \
|
||||
--data '{"ip_network": "10.0.0.0/8"}'
|
||||
|
||||
# List IP routes
|
||||
curl -X GET "https://api.cloudflare.com/client/v4/accounts/{account_id}/tunnels/{tunnel_id}/routes" \
|
||||
-H "Authorization: Bearer ${CF_API_TOKEN}"
|
||||
```
|
||||
Reference in New Issue
Block a user