Skip to content

Code Examples - All Libraries

This page shows equivalent code examples across all Sharokey libraries. Choose your preferred language or tool and see how to accomplish the same tasks.

Basic Usage

Simple Secret

bash
sharokey create "Database password: admin123" --hours 24 --views 1
python
from sharokey import SharokeyClient
client = SharokeyClient(token='your-token')

secret = await client.create("Database password: admin123", 24, 1)
print(f"Share URL: {secret.share_url}")
javascript
import Sharokey from 'sharokey-js';
Sharokey.config({token: 'your-token'});

const secret = await Sharokey.create('Database password: admin123', 24, 1);
console.log(`Share URL: ${secret.share_url}`);
javascript
// Available globally after script include
Sharokey.config({token: 'your-token'});

const secret = await Sharokey.create('Database password: admin123', 24, 1);
console.log(`Share URL: ${secret.share_url}`);

With Description and Message

bash
sharokey create "API credentials" \
  --description "Production API access" \
  --message "Valid until project end" \
  --hours 48 --views 3
python
secret = await client.create(
    "API credentials",
    48,  # hours
    3,   # views
    description="Production API access",
    message="Valid until project end"
)
javascript
const secret = await Sharokey.create('API credentials', 48, 3, {
  description: 'Production API access',
  message: 'Valid until project end'
});
javascript
const secret = await Sharokey.create('API credentials', 48, 3, {
  description: 'Production API access',
  message: 'Valid until project end'
});

CAPTCHA Protection

bash
sharokey create "Server access" --captcha --hours 12 --views 1
python
secret = await client.create(
    "Server access",
    12,  # hours
    1,   # views
    captcha=True
)
javascript
const secret = await Sharokey.create('Server access', 12, 1, {
  captcha: true
});
javascript
const secret = await Sharokey.create('Server access', 12, 1, {
  captcha: true
});

Password Protection

bash
sharokey create "Sensitive data" --password "mySecretPass123" --hours 6 --views 2
python
secret = await client.create(
    "Sensitive data",
    6,   # hours
    2,   # views
    password="mySecretPass123"
)
javascript
const secret = await Sharokey.create('Sensitive data', 6, 2, {
  password: 'mySecretPass123'
});
javascript
const secret = await Sharokey.create('Sensitive data', 6, 2, {
  password: 'mySecretPass123'
});

OTP Email Protection (Higher Priority than Password)

bash
sharokey create "Bank details" \
  --password "backup" \
  --otp-email "[email protected]" \
  --hours 24 --views 1
python
secret = await client.create(
    "Bank details",
    24,  # hours
    1,   # views
    password="backup",
    otp_email="[email protected]"
)
javascript
const secret = await Sharokey.create('Bank details', 24, 1, {
  password: 'backup',
  otpEmail: '[email protected]'
});
javascript
const secret = await Sharokey.create('Bank details', 24, 1, {
  password: 'backup',
  otpEmail: '[email protected]'
});

OTP SMS Protection (Highest Priority - Will Override All Others)

bash
sharokey create "Critical access" \
  --password "backup" --captcha \
  --otp-email "[email protected]" \
  --otp-phone "+33674747474" \
  --hours 2 --views 1
python
secret = await client.create(
    "Critical access",
    2,   # hours
    1,   # views
    password="backup",
    captcha=True,
    otp_email="[email protected]",  # Will be ignored
    otp_phone="+33674747474"  # Highest priority
)
javascript
const secret = await Sharokey.create('Critical access', 2, 1, {
  password: 'backup',
  captcha: true,
  otpEmail: '[email protected]',  // Will be ignored
  otpPhone: '+33674747474'  // Highest priority
});
javascript
const secret = await Sharokey.create('Critical access', 2, 1, {
  password: 'backup',
  captcha: true,
  otpEmail: '[email protected]',  // Will be ignored
  otpPhone: '+33674747474'  // Highest priority
});

IP Restriction (Public IPs Only)

bash
sharokey create "External access" \
  --ip-whitelist "203.0.113.5,198.51.100.10" \
  --hours 48 --views 10
python
secret = await client.create(
    "External access",
    48,  # hours
    10,  # views
    ip_whitelist="203.0.113.5,198.51.100.10"
)
javascript
const secret = await Sharokey.create('External access', 48, 10, {
  ipWhitelist: '203.0.113.5,198.51.100.10'
});
javascript
const secret = await Sharokey.create('External access', 48, 10, {
  ipWhitelist: '203.0.113.5,198.51.100.10'
});

Geolocation Restriction

bash
sharokey create "EU only data" \
  --geolocation "FR,DE,BE,IT,ES" \
  --hours 72 --views 5
python
secret = await client.create(
    "EU only data",
    72,  # hours
    5,   # views
    geolocation="FR,DE,BE,IT,ES"
)
javascript
const secret = await Sharokey.create('EU only data', 72, 5, {
  geolocation: 'FR,DE,BE,IT,ES'
});
javascript
const secret = await Sharokey.create('EU only data', 72, 5, {
  geolocation: 'FR,DE,BE,IT,ES'
});

Combined Restrictions

bash
sharokey create "Restricted access" \
  --password "secure123" \
  --ip-whitelist "203.0.113.100" \
  --geolocation "FR,US" \
  --hours 24 --views 2
python
secret = await client.create(
    "Restricted access",
    24,  # hours
    2,   # views
    password="secure123",
    ip_whitelist="203.0.113.100",
    geolocation="FR,US"
)
javascript
const secret = await Sharokey.create('Restricted access', 24, 2, {
  password: 'secure123',
  ipWhitelist: '203.0.113.100',
  geolocation: 'FR,US'
});
javascript
const secret = await Sharokey.create('Restricted access', 24, 2, {
  password: 'secure123',
  ipWhitelist: '203.0.113.100',
  geolocation: 'FR,US'
});

With Attachments

bash
sharokey create "Contract files" \
  --attach contract.pdf --attach terms.pdf \
  --description "Client XYZ documents" \
  --hours 48 --views 5
python
secret = await client.create(
    "Contract files",
    48,  # hours
    5,   # views
    description="Client XYZ documents",
    attachments=["contract.pdf", "terms.pdf"]
)
javascript
const secret = await Sharokey.create('Contract files', 48, 5, {
  description: 'Client XYZ documents',
  attachments: [contractFile, termsFile]  // File objects
});
javascript
const secret = await Sharokey.create('Contract files', 48, 5, {
  description: 'Client XYZ documents',
  attachments: [contractFile, termsFile]  // File objects
});

Multiple Attachments with Security

bash
sharokey create "Confidential reports" \
  --attach report.pdf --attach data.xlsx --attach summary.docx \
  --password "reports2024" \
  --ip-whitelist "203.0.113.50,198.51.100.25" \
  --hours 168 --views 3
python
secret = await client.create(
    "Confidential reports",
    168,  # hours
    3,    # views
    password="reports2024",
    ip_whitelist="203.0.113.50,198.51.100.25",
    attachments=["report.pdf", "data.xlsx", "summary.docx"]
)
javascript
const secret = await Sharokey.create('Confidential reports', 168, 3, {
  password: 'reports2024',
  ipWhitelist: '203.0.113.50,198.51.100.25',
  attachments: [reportFile, dataFile, summaryFile]
});
javascript
const secret = await Sharokey.create('Confidential reports', 168, 3, {
  password: 'reports2024',
  ipWhitelist: '203.0.113.50,198.51.100.25',
  attachments: [reportFile, dataFile, summaryFile]
});

Read from stdin

bash
echo "Secret from command line" | sharokey create --hours 2 --views 1

cat credentials.txt | sharokey create --description "Server credentials" --password "access123" --hours 48 --views 1
python
# Read from file manually
with open('credentials.txt', 'r') as f:
    content = f.read().strip()
secret = await client.create(content, 48, 1, 
    description="Server credentials", 
    password="access123"
)
javascript
// Read from file in Node.js
import fs from 'fs';
const content = fs.readFileSync('credentials.txt', 'utf8').trim();
const secret = await Sharokey.create(content, 48, 1, {
  description: 'Server credentials',
  password: 'access123'
});
javascript
// Manual input in browser
const content = document.getElementById('secretInput').value;
const secret = await Sharokey.create(content, 48, 1, {
  description: 'Server credentials',
  password: 'access123'
});

Secret Requests

Create Request with Email Delivery

bash
sharokey create-request \
  --message "Please share VPN credentials" \
  --email-to [email protected] \
  --email-reply [email protected] \
  --request-hours 48 --secret-hours 24 \
  --max-views 3 --locale fr
python
request = await client.create_request(
    message="Please share VPN credentials",
    email_to="[email protected]",
    email_reply="[email protected]",
    request_expiration_hours=48,
    secret_expiration_hours=24,
    maximum_views=3
)
javascript
const request = await Sharokey.createRequest({
  message: 'Please share VPN credentials',
  emailTo: '[email protected]',
  emailReply: '[email protected]',
  requestExpirationHours: 48,
  secretExpirationHours: 24,
  maximumViews: 3,
  locale: 'fr'
});
javascript
const request = await Sharokey.createRequest({
  message: 'Please share VPN credentials',
  emailTo: '[email protected]',
  emailReply: '[email protected]',
  requestExpirationHours: 48,
  secretExpirationHours: 24,
  maximumViews: 3,
  locale: 'fr'
});

Create Request with Table Output

bash
sharokey create-request --message "Share credentials" --email-to [email protected] --request-hours 24 --secret-hours 12 --max-views 1 --locale en --table
python
# Python SDK returns structured objects, not tables
request = await client.create_request(
    message="Share credentials",
    email_to="[email protected]",
    request_expiration_hours=24,
    secret_expiration_hours=12,
    maximum_views=1
)
print(f"Token: {request.token}")
javascript
// JavaScript SDK returns structured objects, not tables
const request = await Sharokey.createRequest({
  message: 'Share credentials',
  emailTo: '[email protected]',
  requestExpirationHours: 24,
  secretExpirationHours: 12,
  maximumViews: 1,
  locale: 'en'
});
console.log(`Token: ${request.token}`);
javascript
// JavaScript CDN returns structured objects, not tables
const request = await Sharokey.createRequest({
  message: 'Share credentials',
  emailTo: '[email protected]',
  requestExpirationHours: 24,
  secretExpirationHours: 12,
  maximumViews: 1,
  locale: 'en'
});
console.log(`Token: ${request.token}`);

Get Request Details

bash
# JSON output (default - direct API response)
sharokey get-request abc123token456

# Table format
sharokey get-request abc123token456 --table
python
request_detail = await client.get_request('abc123token456')
print(f"Status: {request_detail.status}")
print(f"Message: {request_detail.message}")
javascript
const requestDetail = await Sharokey.getRequest('abc123token456');
console.log(`Status: ${requestDetail.status}`);
console.log(`Message: ${requestDetail.message}`);
javascript
const requestDetail = await Sharokey.getRequest('abc123token456');
console.log(`Status: ${requestDetail.status}`);
console.log(`Message: ${requestDetail.message}`);

List Requests with Filters

bash
# JSON output (default - direct API response, most recent first)
sharokey list-requests --status active --limit 20

# Table format (most recent first)
sharokey list-requests --status active --limit 20 --table
python
requests = await client.list_requests(
    status='active',
    limit=20
)
print(f"Found {len(requests.data)} requests")
javascript
const requests = await Sharokey.listRequests({
  status: 'active',
  limit: 20
});
console.log(`Found ${requests.data.length} requests`);
javascript
const requests = await Sharokey.listRequests({
  status: 'active',
  limit: 20
});
console.log(`Found ${requests.data.length} requests`);

Expire Request (Cancel)

bash
sharokey delete-request abc123token456
python
success = await client.delete_request('abc123token456')
if success:
    print("Request cancelled successfully")
javascript
const success = await Sharokey.deleteRequest('abc123token456');
if (success) {
    console.log('Request cancelled successfully');
}
javascript
const success = await Sharokey.deleteRequest('abc123token456');
if (success) {
    console.log('Request cancelled successfully');
}

Request Statistics

bash
sharokey request-stats
python
request_stats = await client.request_stats()
print(f"Total requests: {request_stats['total_requests']}")
print(f"Active requests: {request_stats['active_requests']}")
javascript
const requestStats = await Sharokey.requestStats();
console.log(`Total requests: ${requestStats.data.total_requests}`);
console.log(`Active requests: ${requestStats.data.active_requests}`);
javascript
const requestStats = await Sharokey.requestStats();
console.log(`Total requests: ${requestStats.data.total_requests}`);
console.log(`Active requests: ${requestStats.data.active_requests}`);

Management

List All Secrets

bash
sharokey list
python
secrets = await client.list()
for secret in secrets.data:
    print(f"{secret.slug}: {secret.description}")
javascript
const secrets = await Sharokey.list();
secrets.data.forEach(secret => {
  console.log(`${secret.slug}: ${secret.description}`);
});
javascript
const secrets = await Sharokey.list();
secrets.data.forEach(secret => {
  console.log(`${secret.slug}: ${secret.description}`);
});

List with Filters

bash
sharokey list --status active --creator [email protected] --limit 20
sharokey list --status expired --limit 10
python
# Active secrets by specific creator
active_secrets = await client.list(
    status='active',
    creator='[email protected]',
    limit=20
)

# Expired secrets
expired_secrets = await client.list(status='expired', limit=10)
javascript
// Active secrets by specific creator
const activeSecrets = await Sharokey.list({
  status: 'active',
  creator: '[email protected]',
  limit: 20
});

// Expired secrets
const expiredSecrets = await Sharokey.list({status: 'expired', limit: 10});
javascript
// Active secrets by specific creator
const activeSecrets = await Sharokey.list({
  status: 'active',
  creator: '[email protected]',
  limit: 20
});

// Expired secrets
const expiredSecrets = await Sharokey.list({status: 'expired', limit: 10});

JSON vs Table Output

bash
# JSON output (default)
sharokey list --limit 5
# Output: {"success": true, "count": 2, "secrets": [{"slug": "ABC123", "maximum_views": 1, ...}]}

# Table output (human-readable)
sharokey list --table --limit 5
# Output:
# slug     description                    creator    maximum_views current_views expiration
# -----------------------------------------------------------------------------------------
# ABC123   My test secret                 API        1             0             2025-08-08...
python
# Python SDK only returns structured objects
secrets = await client.list(limit=5)
print(f"Found {len(secrets.data)} secrets")
for secret in secrets.data:
    print(f"{secret.slug}: {secret.description} (Views: {secret.current_views}/{secret.maximum_views})")
javascript
// JavaScript SDK only returns structured objects
const secrets = await Sharokey.list({limit: 5});
console.log(`Found ${secrets.data.length} secrets`);
secrets.data.forEach(secret => {
  console.log(`${secret.slug}: ${secret.description} (Views: ${secret.current_views}/${secret.maximum_views})`);
});
javascript
// JavaScript CDN only returns structured objects
const secrets = await Sharokey.list({limit: 5});
console.log(`Found ${secrets.data.length} secrets`);
secrets.data.forEach(secret => {
  console.log(`${secret.slug}: ${secret.description} (Views: ${secret.current_views}/${secret.maximum_views})`);
});

List Secrets with Limit

bash
sharokey list --limit 3
python
secrets = await client.list(limit=3)
print(f"Retrieved {len(secrets.data)} secrets")
javascript
const secrets = await Sharokey.list({limit: 3});
console.log(`Retrieved ${secrets.data.length} secrets`);
javascript
const secrets = await Sharokey.list({limit: 3});
console.log(`Retrieved ${secrets.data.length} secrets`);

Get Secret Details

bash
sharokey get ABC123
python
secret = await client.get('ABC123')
print(f"Views: {secret.current_views}/{secret.maximum_views}")
print(f"Status: {secret.status}")
javascript
const secret = await Sharokey.get('ABC123');
console.log(`Views: ${secret.current_views}/${secret.maximum_views}`);
console.log(`Status: ${secret.status}`);
javascript
const secret = await Sharokey.get('ABC123');
console.log(`Views: ${secret.current_views}/${secret.maximum_views}`);
console.log(`Status: ${secret.status}`);

Expire Secret (Clear Content)

bash
sharokey delete ABC123
python
success = await client.delete('ABC123')
if success:
    print("Secret expired successfully")
javascript
const success = await Sharokey.delete('ABC123');
if (success) {
    console.log('Secret expired successfully');
}
javascript
const success = await Sharokey.delete('ABC123');
if (success) {
    console.log('Secret expired successfully');
}

Statistics

bash
sharokey stats
python
stats = await client.stats()
print(f"Total secrets: {stats.total_secrets}")
print(f"Active secrets: {stats.active_secrets}")
javascript
const stats = await Sharokey.stats();
console.log(`Total secrets: ${stats.data.total_secrets}`);
console.log(`Active secrets: ${stats.data.active_secrets}`);
javascript
const stats = await Sharokey.stats();
console.log(`Total secrets: ${stats.data.total_secrets}`);
console.log(`Active secrets: ${stats.data.active_secrets}`);

Configuration

Configure Settings

bash
sharokey config --token your_api_token_here
sharokey config --timeout 60
sharokey config --logs-enabled
sharokey config --log-level Debug
python
# Configuration is done during client initialization
client = SharokeyClient(
    token='your_api_token_here',
    timeout=60
)
javascript
// Configure client
import Sharokey from 'sharokey-js';
Sharokey.config({
  token: 'your_api_token_here',
  timeout: 60000  // milliseconds
});
javascript
// Configure client (available globally)
Sharokey.config({
  token: 'your_api_token_here',
  timeout: 60000  // milliseconds
});

Show Current Configuration

bash
sharokey config --show
python
config = client.get_config()
print(f"API URL: {config['api_url']}")
print(f"Has token: {config['has_token']}")
print(f"Timeout: {config['timeout']}s")
javascript
const config = Sharokey.getConfig();
console.log(`API URL: ${config.apiUrl}`);
console.log(`Has token: ${config.hasToken}`);
console.log(`Timeout: ${config.timeout}ms`);
javascript
const config = Sharokey.getConfig();
console.log(`API URL: ${config.apiUrl}`);
console.log(`Has token: ${config.hasToken}`);
console.log(`Timeout: ${config.timeout}ms`);

Test & Diagnostics

Test Connectivity

bash
# Full connectivity test (6 tests)
sharokey test

# Quick test (config + network only)
sharokey test --quick

# Verbose output with details
sharokey test --verbose
python
# Comprehensive test
results = await client.test()
print(f"Tests passed: {results['passed']}/{results['total']}")

# Simple connectivity test
connected = await client.test_connection()
print(f"Connected: {connected}")
javascript
// Comprehensive test
const results = await Sharokey.test();
console.log(`Tests passed: ${results.passed}/${results.total}`);

// Simple connectivity test
const connected = await Sharokey.testConnection();
console.log(`Connected: ${connected}`);
javascript
// Comprehensive test
const results = await Sharokey.test();
console.log(`Tests passed: ${results.passed}/${results.total}`);

// Simple connectivity test
const connected = await Sharokey.testConnection();
console.log(`Connected: ${connected}`);

Troubleshooting

Check Configuration

bash
sharokey config --show
python
config = client.get_config()
print(f"Configuration: {config}")
javascript
const config = Sharokey.getConfig();
console.log('Configuration:', config);
javascript
const config = Sharokey.getConfig();
console.log('Configuration:', config);

Test Connectivity

bash
sharokey test
python
results = await client.test()
if results['passed'] < results['total']:
    print("Some tests failed:", results['failed'])
javascript
const results = await Sharokey.test();
if (results.passed < results.total) {
    console.log('Some tests failed:', results.failed);
}
javascript
const results = await Sharokey.test();
if (results.passed < results.total) {
    console.log('Some tests failed:', results.failed);
}

Enable Debug Logging

bash
sharokey config --log-level Debug --logs-enabled
python
# Enable debug mode
client = SharokeyClient(token='your-token', debug=True)
javascript
// Enable debug mode
Sharokey.config({
  token: 'your-token',
  debug: true
});
javascript
// Enable debug mode
Sharokey.config({
  token: 'your-token',
  debug: true
});

All libraries provide identical Zero Knowledge security with AES-GCM-256 encryption and PBKDF2 key derivation. Choose based on your development environment and preferences!

Library-Specific Documentation

Released under the MIT License.