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
- CLI C# Documentation - Complete command-line reference
- Python SDK Documentation - Python async/await library
- JavaScript SDK Documentation - NPM package with TypeScript
- JavaScript CDN Documentation - Browser-ready library