{"_id":"@baharsah/trysail-sdk","_rev":"3-bbcc7ffb62bdc9cab473f16bc537a15b","name":"@baharsah/trysail-sdk","dist-tags":{"latest":"1.0.2"},"versions":{"1.0.0":{"name":"@baharsah/trysail-sdk","version":"1.0.0","keywords":["trysail","wireguard","vpn","control-plane","sdk","typescript"],"author":{"name":"Trysail Team"},"license":"MIT","_id":"@baharsah/trysail-sdk@1.0.0","maintainers":[{"name":"baharsah","email":"baharsah@outlook.co.id"}],"homepage":"https://github.com/trysail/sdk-typescript#readme","bugs":{"url":"https://github.com/trysail/sdk-typescript/issues"},"dist":{"shasum":"74380c31c69518ce913bc486729455831d847495","tarball":"https://registry.npmjs.org/@baharsah/trysail-sdk/-/trysail-sdk-1.0.0.tgz","fileCount":7,"integrity":"sha512-J+Mh0ZHQj21lazWnCR26DQ6YdTRSgSFI7V4kB0U2QLu1vdvv7gIHh5UbmBHbaoY57Oan3bD+oM0PkaBL3TW5Zg==","signatures":[{"sig":"MEQCIADVP1U6ut5nRuqX7dU3qL0FH+3UxAwsrQpSjnDTLz5eAiAHoAGiUUW1e1I0kpEW+GRoKPR0uYpZOW14XP4oYhaQIg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":43012},"main":"./dist/index.js","types":"./dist/index.d.ts","module":"./dist/index.mjs","engines":{"node":">=14.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.mjs","require":"./dist/index.js"}},"gitHead":"b765053d7a3da740aa31b6e9459fb4d45b0e8474","scripts":{"dev":"tsup src/index.ts --format cjs,esm --dts --watch","lint":"eslint src --ext .ts","test":"jest","build":"tsup src/index.ts --format cjs,esm --dts --clean","lint:fix":"eslint src --ext .ts --fix","test:watch":"jest --watch","type-check":"tsc --noEmit","test:coverage":"jest --coverage","prepublishOnly":"npm run build"},"_npmUser":{"name":"baharsah","email":"baharsah@outlook.co.id"},"repository":{"url":"git+https://github.com/trysail/sdk-typescript.git","type":"git"},"_npmVersion":"10.8.2","description":"Official TypeScript SDK for Trysail WireGuard Control Plane","directories":{},"_nodeVersion":"20.19.5","dependencies":{"axios":"^1.6.0"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^29.7.0","tsup":"^8.0.0","eslint":"^8.50.0","ts-jest":"^29.1.0","typescript":"^5.2.0","@types/jest":"^29.5.0","@types/node":"^20.0.0","@typescript-eslint/parser":"^6.0.0","@typescript-eslint/eslint-plugin":"^6.0.0"},"_npmOperationalInternal":{"tmp":"tmp/trysail-sdk_1.0.0_1760870676564_0.9340716073960402","host":"s3://npm-registry-packages-npm-production"}},"1.0.1":{"name":"@baharsah/trysail-sdk","version":"1.0.1","keywords":["trysail","wireguard","vpn","control-plane","sdk","typescript"],"author":{"name":"Trysail Team"},"license":"MIT","_id":"@baharsah/trysail-sdk@1.0.1","maintainers":[{"name":"baharsah","email":"baharsah@outlook.co.id"}],"homepage":"https://github.com/lumineworks/trysail-ts-sdk#readme","bugs":{"url":"https://github.com/lumineworks/trysail-ts-sdk/issues"},"dist":{"shasum":"67980c7136c6fef7bc88f4a38c3745eb47b61ee5","tarball":"https://registry.npmjs.org/@baharsah/trysail-sdk/-/trysail-sdk-1.0.1.tgz","fileCount":7,"integrity":"sha512-QCL8+ItsxX//u/I+Apnf+W3EgTbR2ZKu+T5xxLPkvcJ+arlUNhNefm3akXnVE0wvV/yXTDsXSBJkvRsUjl8UAg==","signatures":[{"sig":"MEUCIQCyxLsdqynSahyrVhOgRjQSvCX0a5tqpjk0hOMGbsRx7wIgKvCkHeBWEA1HxtcA/xE3aGUxNFwPtwfEw0caryVoqqg=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":43024},"main":"./dist/index.js","types":"./dist/index.d.ts","module":"./dist/index.mjs","engines":{"node":">=14.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.mjs","require":"./dist/index.js"}},"gitHead":"b765053d7a3da740aa31b6e9459fb4d45b0e8474","scripts":{"dev":"tsup src/index.ts --format cjs,esm --dts --watch","lint":"eslint src --ext .ts","test":"jest","build":"tsup src/index.ts --format cjs,esm --dts --clean","lint:fix":"eslint src --ext .ts --fix","test:watch":"jest --watch","type-check":"tsc --noEmit","test:coverage":"jest --coverage","prepublishOnly":"npm run build"},"_npmUser":{"name":"baharsah","email":"baharsah@outlook.co.id"},"repository":{"url":"git+https://github.com/lumineworks/trysail-ts-sdk.git","type":"git"},"_npmVersion":"10.8.2","description":"Official TypeScript SDK for Trysail WireGuard Control Plane","directories":{},"_nodeVersion":"20.19.5","dependencies":{"axios":"^1.6.0"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^29.7.0","tsup":"^8.0.0","eslint":"^8.50.0","ts-jest":"^29.1.0","typescript":"^5.2.0","@types/jest":"^29.5.0","@types/node":"^20.0.0","@typescript-eslint/parser":"^6.0.0","@typescript-eslint/eslint-plugin":"^6.0.0"},"_npmOperationalInternal":{"tmp":"tmp/trysail-sdk_1.0.1_1760870834195_0.4783151798421066","host":"s3://npm-registry-packages-npm-production"}},"1.0.2":{"name":"@baharsah/trysail-sdk","version":"1.0.2","description":"Official TypeScript SDK for Trysail WireGuard Control Plane","main":"./dist/index.js","module":"./dist/index.mjs","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","require":"./dist/index.js","import":"./dist/index.mjs"}},"scripts":{"build":"tsup src/index.ts --format cjs,esm --dts --clean","dev":"tsup src/index.ts --format cjs,esm --dts --watch","test":"jest","test:watch":"jest --watch","test:coverage":"jest --coverage","lint":"eslint src --ext .ts","lint:fix":"eslint src --ext .ts --fix","type-check":"tsc --noEmit","prepublishOnly":"npm run build"},"keywords":["trysail","wireguard","vpn","control-plane","sdk","typescript"],"author":{"name":"Trysail Team"},"license":"MIT","repository":{"type":"git","url":"git+https://github.com/lumineworks/trysail-ts-sdk.git"},"bugs":{"url":"https://github.com/lumineworks/trysail-ts-sdk/issues"},"homepage":"https://github.com/lumineworks/trysail-ts-sdk#readme","dependencies":{"axios":"^1.6.0"},"devDependencies":{"@types/jest":"^29.5.0","@types/node":"^20.0.0","@typescript-eslint/eslint-plugin":"^6.0.0","@typescript-eslint/parser":"^6.0.0","eslint":"^8.50.0","jest":"^29.7.0","ts-jest":"^29.1.0","tsup":"^8.0.0","typescript":"^5.2.0"},"engines":{"node":">=14.0.0"},"_id":"@baharsah/trysail-sdk@1.0.2","gitHead":"288b0fc65b1e07d6e1efacbc15ef06f8027f8975","_nodeVersion":"20.19.5","_npmVersion":"10.8.2","dist":{"integrity":"sha512-xait44+MEO4nlH7paZgkXHOdNXxRROespIGPSvAonud+iZFe8HhlsFD5b0el0dZLsw+HLIBtdyDOi7NsAkh23Q==","shasum":"dafd930fbcaec346d3b5e3188d73edaaf5ec621c","tarball":"https://registry.npmjs.org/@baharsah/trysail-sdk/-/trysail-sdk-1.0.2.tgz","fileCount":7,"unpackedSize":59526,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCIDRjtRqHCc/qAk1d6oGUHsfQyntNFj4DSAFAOLk+N8guAiEA0UWk4uxSbgZyJD9tx9mCfh+Dc4ZCzITxgBzHvqBxdI8="}]},"_npmUser":{"name":"baharsah","email":"baharsah@outlook.co.id"},"directories":{},"maintainers":[{"name":"baharsah","email":"baharsah@outlook.co.id"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/trysail-sdk_1.0.2_1760888270118_0.3208354264521036"},"_hasShrinkwrap":false}},"time":{"created":"2025-10-19T10:44:36.496Z","modified":"2025-10-19T15:37:50.474Z","1.0.0":"2025-10-19T10:44:36.793Z","1.0.1":"2025-10-19T10:47:14.423Z","1.0.2":"2025-10-19T15:37:50.296Z"},"bugs":{"url":"https://github.com/lumineworks/trysail-ts-sdk/issues"},"author":{"name":"Trysail Team"},"license":"MIT","homepage":"https://github.com/lumineworks/trysail-ts-sdk#readme","keywords":["trysail","wireguard","vpn","control-plane","sdk","typescript"],"repository":{"type":"git","url":"git+https://github.com/lumineworks/trysail-ts-sdk.git"},"description":"Official TypeScript SDK for Trysail WireGuard Control Plane","maintainers":[{"name":"baharsah","email":"baharsah@outlook.co.id"}],"readme":"# Trysail TypeScript SDK\n\nOfficial TypeScript/JavaScript SDK for Trysail WireGuard Control Plane API.\n\n## Features\n\n- 🚀 Full TypeScript support with type definitions\n- 🎯 Promise-based async/await API\n- 🔒 Type-safe API client\n- 🌐 Works in Node.js and browser environments\n- ⚡ Lightweight with minimal dependencies\n- 🛡️ Built-in error handling\n- 📦 Tree-shakeable ES modules\n\n## Installation\n\n```bash\nnpm install @trysail/sdk\n# or\nyarn add @trysail/sdk\n# or\npnpm add @trysail/sdk\n```\n\n## Quick Start\n\n```typescript\nimport { TrysailClient } from '@trysail/sdk';\n\n// Create client\nconst client = new TrysailClient({\n  baseUrl: 'http://localhost:8081',\n  timeout: 30000,\n});\n\n// List zones\nconst zones = await client.zones.list();\n\n// Get specific zone\nconst zone = await client.zones.get('zone-id');\n\n// Create zone\nconst newZone = await client.zones.create({\n  name: 'my-zone',\n  publicKey: 'public-key-here',\n  endpoint: '192.168.1.1:51820',\n  allowedIPs: ['10.0.0.0/24'],\n});\n\n// Update zone\nawait client.zones.update('zone-id', {\n  status: 'inactive',\n});\n\n// Delete zone\nawait client.zones.delete('zone-id');\n```\n\n## Configuration\n\n```typescript\nimport { TrysailClient, TrysailConfig } from '@trysail/sdk';\n\nconst config: TrysailConfig = {\n  baseUrl: 'http://localhost:8081',\n  timeout: 30000,\n  headers: {\n    'X-Custom-Header': 'value',\n  },\n};\n\nconst client = new TrysailClient(config);\n```\n\n## API Reference\n\n### Client\n\n#### `TrysailClient`\n\nMain client class for interacting with the API.\n\n```typescript\nconst client = new TrysailClient(config: TrysailConfig);\n```\n\n### Resources\n\n#### Zones\n\n```typescript\n// List all zones\nconst zones: Zone[] = await client.zones.list();\n\n// Get zone by ID\nconst zone: Zone = await client.zones.get(zoneId: string);\n\n// Create zone\nconst zone: Zone = await client.zones.create(data: CreateZoneRequest);\n\n// Update zone\nconst zone: Zone = await client.zones.update(zoneId: string, data: UpdateZoneRequest);\n\n// Delete zone\nawait client.zones.delete(zoneId: string): Promise<void>;\n\n// Get zone configuration\nconst config = await client.zones.getConfiguration(zoneId: string);\n```\n\n#### Control Plane\n\n```typescript\n// Get control plane status\nconst status = await client.controlPlane.getStatus();\n\n// Sync zones from license server\nconst result = await client.controlPlane.syncZones();\n\n// Get registered zones\nconst zones = await client.controlPlane.getRegisteredZones();\n\n// Register a zone\nconst result = await client.controlPlane.registerZone(data);\n\n// Get metrics\nconst metrics = await client.controlPlane.getMetrics();\n```\n\n## Types\n\n### Zone\n\n```typescript\ninterface Zone {\n  id: string;\n  name: string;\n  publicKey: string;\n  endpoint?: string;\n  allowedIPs: string[];\n  persistentKeepalive?: string;\n  status: 'active' | 'inactive';\n  lastSeen?: string;\n  metadata?: Record<string, any>;\n}\n```\n\n### CreateZoneRequest\n\n```typescript\ninterface CreateZoneRequest {\n  name: string;\n  publicKey: string;\n  endpoint?: string;\n  allowedIPs?: string[];\n  persistentKeepalive?: string;\n  metadata?: Record<string, any>;\n}\n```\n\n### UpdateZoneRequest\n\n```typescript\ninterface UpdateZoneRequest {\n  name?: string;\n  endpoint?: string;\n  allowedIPs?: string[];\n  status?: 'active' | 'inactive';\n  metadata?: Record<string, any>;\n}\n```\n\n## Error Handling\n\n```typescript\nimport { TrysailError } from '@trysail/sdk';\n\ntry {\n  const zone = await client.zones.get('zone-id');\n} catch (error) {\n  if (error instanceof TrysailError) {\n    console.error('Status:', error.statusCode);\n    console.error('Message:', error.message);\n    console.error('Response:', error.response);\n    \n    // Check error type\n    if (error.isNotFound()) {\n      console.log('Zone not found');\n    } else if (error.isUnauthorized()) {\n      console.log('Unauthorized');\n    } else if (error.isServerError()) {\n      console.log('Server error');\n    }\n  }\n}\n```\n\n## Advanced Usage\n\n### Custom HTTP Client\n\n```typescript\nimport axios from 'axios';\n\nconst customAxios = axios.create({\n  // Custom configuration\n});\n\nconst client = new TrysailClient({\n  baseUrl: 'http://localhost:8081',\n  httpClient: customAxios,\n});\n```\n\n### Request Interceptors\n\n```typescript\nimport { TrysailClient } from '@trysail/sdk';\n\nconst client = new TrysailClient({\n  baseUrl: 'http://localhost:8081',\n});\n\n// Add request interceptor\nclient.httpClient.interceptors.request.use((config) => {\n  config.headers['Authorization'] = 'Bearer token';\n  return config;\n});\n\n// Add response interceptor\nclient.httpClient.interceptors.response.use(\n  (response) => response,\n  (error) => {\n    console.error('API Error:', error);\n    return Promise.reject(error);\n  }\n);\n```\n\n## Browser Usage\n\n```html\n<!DOCTYPE html>\n<html>\n<head>\n  <script type=\"module\">\n    import { TrysailClient } from 'https://cdn.jsdelivr.net/npm/@trysail/sdk/dist/index.mjs';\n    \n    const client = new TrysailClient({\n      baseUrl: 'http://localhost:8081',\n    });\n    \n    const zones = await client.zones.list();\n    console.log(zones);\n  </script>\n</head>\n<body>\n</body>\n</html>\n```\n\n## Examples\n\nSee the [examples](./examples) directory for more usage examples:\n\n- [Basic Usage](./examples/basic-usage.ts)\n- [Error Handling](./examples/error-handling.ts)\n- [Node.js Server](./examples/node-server.ts)\n- [React Integration](./examples/react-example.tsx)\n\n## Development\n\n```bash\n# Install dependencies\nnpm install\n\n# Build\nnpm run build\n\n# Test\nnpm test\n\n# Lint\nnpm run lint\n\n# Type check\nnpm run type-check\n```\n\n## Requirements\n\n- Node.js >= 14.0.0\n- TypeScript >= 4.5 (for development)\n\n## License\n\nMIT\n\n## Support\n\nFor issues and questions, please visit [GitHub Issues](https://github.com/trysail/sdk/issues).","readmeFilename":"README.md"}