{"_id":"@byigitt/wbackup","_rev":"3-c19a4b948e8da2e6552313820bae5c92","name":"@byigitt/wbackup","dist-tags":{"latest":"1.1.0"},"versions":{"1.0.0":{"name":"@byigitt/wbackup","version":"1.0.0","keywords":["backup","database","mongodb","postgresql","mysql","discord","telegram","webhook","dump","mongodump","pg_dump"],"author":{"name":"byigitt"},"license":"MIT","_id":"@byigitt/wbackup@1.0.0","maintainers":[{"name":"byigitt","email":"barisbayburtlu33@gmail.com"}],"homepage":"https://github.com/byigitt/wbackup#readme","bugs":{"url":"https://github.com/byigitt/wbackup/issues"},"dist":{"shasum":"67082c5a867290be0058b7a698fb4089a1a915d8","tarball":"https://registry.npmjs.org/@byigitt/wbackup/-/wbackup-1.0.0.tgz","fileCount":49,"integrity":"sha512-vAhXdWEfmtvnrVrNsinVM+UmFfdDgBG8Us32jTx2RVBbyopty3Z9kRL2nSyYY/uEl6Gl8TREr48X1n7GIcMaxA==","signatures":[{"sig":"MEUCIBzLuV6zaCANsP/uOlbBGbXdPHSgEiC1hjo9txw207VPAiEA/48I/7VbeXaKDOIxiOUhqsaWdDnnmwqBOx/HcBT1gbY=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":87641},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=18.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"}},"gitHead":"0e185f365dcbb52ac672ac9d8a2667bd24c40ec2","scripts":{"build":"tsc","typecheck":"tsc --noEmit","prepublishOnly":"pnpm run build"},"_npmUser":{"name":"byigitt","email":"barisbayburtlu33@gmail.com"},"repository":{"url":"git+https://github.com/byigitt/wbackup.git","type":"git"},"_npmVersion":"10.9.0","description":"Database backup package with webhook delivery support","directories":{},"_nodeVersion":"23.3.0","dependencies":{"zod":"^4.3.5"},"_hasShrinkwrap":false,"packageManager":"pnpm@10.11.0","devDependencies":{"typescript":"^5.9.3","@types/node":"^25.0.3"},"_npmOperationalInternal":{"tmp":"tmp/wbackup_1.0.0_1767940245201_0.32149047662318475","host":"s3://npm-registry-packages-npm-production"}},"1.0.1":{"name":"@byigitt/wbackup","version":"1.0.1","keywords":["backup","database","mongodb","postgresql","mysql","discord","telegram","webhook","dump","mongodump","pg_dump"],"author":{"name":"byigitt"},"license":"MIT","_id":"@byigitt/wbackup@1.0.1","maintainers":[{"name":"byigitt","email":"barisbayburtlu33@gmail.com"}],"homepage":"https://github.com/byigitt/wbackup#readme","bugs":{"url":"https://github.com/byigitt/wbackup/issues"},"dist":{"shasum":"219aa432d47eadee0e2deae5bd394cbf6a221c7d","tarball":"https://registry.npmjs.org/@byigitt/wbackup/-/wbackup-1.0.1.tgz","fileCount":50,"integrity":"sha512-fdBzJxk0IF13OmwmNlIzPd7LI/p1t+Sbm1JzdQUB/GmQT5ZQWIDY5wf8K1lDLRfqU+xM1RhKqRt2Rp3giJdsIg==","signatures":[{"sig":"MEUCIAqyj3mZ2w0g/bw7wsiH86OPufgfHE+gM4jQrbu6UBbCAiEAlGDRR4nh0Xhk00n01d1P+VuQvZbECBkkWTlw8E6IqAo=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":96163},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","engines":{"node":">=18.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"}},"gitHead":"9d6870d289a353b47d2b740dd8aa56e4f0b79403","scripts":{"build":"tsc","typecheck":"tsc --noEmit","prepublishOnly":"pnpm run build"},"_npmUser":{"name":"byigitt","email":"barisbayburtlu33@gmail.com"},"repository":{"url":"git+https://github.com/byigitt/wbackup.git","type":"git"},"_npmVersion":"10.9.0","description":"Database backup package with webhook delivery support","directories":{},"_nodeVersion":"23.3.0","dependencies":{"zod":"^4.3.5"},"_hasShrinkwrap":false,"packageManager":"pnpm@10.11.0","devDependencies":{"typescript":"^5.9.3","@types/node":"^25.0.3"},"_npmOperationalInternal":{"tmp":"tmp/wbackup_1.0.1_1767940406175_0.2903492137156307","host":"s3://npm-registry-packages-npm-production"}},"1.1.0":{"name":"@byigitt/wbackup","version":"1.1.0","description":"Database backup package with webhook delivery support","type":"module","main":"./dist/index.js","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"}},"scripts":{"build":"tsc","typecheck":"tsc --noEmit","test":"vitest run","test:watch":"vitest","test:coverage":"vitest run --coverage","prepublishOnly":"pnpm run build && pnpm run test"},"keywords":["backup","database","mongodb","postgresql","mysql","discord","telegram","webhook","dump","mongodump","pg_dump"],"author":{"name":"byigitt"},"license":"MIT","repository":{"type":"git","url":"git+https://github.com/byigitt/wbackup.git"},"homepage":"https://github.com/byigitt/wbackup#readme","bugs":{"url":"https://github.com/byigitt/wbackup/issues"},"packageManager":"pnpm@10.11.0","engines":{"node":">=18.0.0"},"devDependencies":{"@types/node":"^25.0.3","@vitest/coverage-v8":"^4.0.16","typescript":"^5.9.3","vitest":"^4.0.16"},"dependencies":{"zod":"^4.3.5"},"_id":"@byigitt/wbackup@1.1.0","gitHead":"bc6e810a817cdfcf1c646dabe20bdc14b6f80563","_nodeVersion":"23.3.0","_npmVersion":"10.9.0","dist":{"integrity":"sha512-8CS3HD8iBE9RtOkYHFr71Yzn8X+JuoaQRY+sdkuDQO4i9JGyU/nFM6yVCklXVXqAARVtqvIOme9jK0U2DXgoCA==","shasum":"5fbae8a613bd6a0ff505e33d9e39a6171909b712","tarball":"https://registry.npmjs.org/@byigitt/wbackup/-/wbackup-1.1.0.tgz","fileCount":50,"unpackedSize":96343,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCIDTOm2SLTGOBhdbRBLbBEbMjNWwT7YSD+QIsSCE15wgPAiEAtzmyiuA3eQ7rBrxCqgpaK6VTp5nOOeNeNo+Bx2XdrC4="}]},"_npmUser":{"name":"byigitt","email":"barisbayburtlu33@gmail.com"},"directories":{},"maintainers":[{"name":"byigitt","email":"barisbayburtlu33@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/wbackup_1.1.0_1767940989433_0.8282751700177411"},"_hasShrinkwrap":false}},"time":{"created":"2026-01-09T06:30:45.024Z","modified":"2026-01-09T06:43:09.872Z","1.0.0":"2026-01-09T06:30:45.393Z","1.0.1":"2026-01-09T06:33:26.323Z","1.1.0":"2026-01-09T06:43:09.639Z"},"bugs":{"url":"https://github.com/byigitt/wbackup/issues"},"author":{"name":"byigitt"},"license":"MIT","homepage":"https://github.com/byigitt/wbackup#readme","keywords":["backup","database","mongodb","postgresql","mysql","discord","telegram","webhook","dump","mongodump","pg_dump"],"repository":{"type":"git","url":"git+https://github.com/byigitt/wbackup.git"},"description":"Database backup package with webhook delivery support","maintainers":[{"name":"byigitt","email":"barisbayburtlu33@gmail.com"}],"readme":"# @byigitt/wbackup\n\nDatabase backup package with webhook delivery. Backup MongoDB and PostgreSQL databases, then send them to Discord, Telegram, or any custom webhook.\n\n## Installation\n\n```bash\nnpm install @byigitt/wbackup\n# or\npnpm add @byigitt/wbackup\n```\n\n**Requirements:**\n- Node.js 18+\n- `mongodump` for MongoDB backups (install [MongoDB Database Tools](https://www.mongodb.com/docs/database-tools/installation/))\n- `pg_dump` for PostgreSQL backups (install [PostgreSQL client](https://www.postgresql.org/download/))\n\n## Quick Start\n\n```typescript\nimport { backup } from '@byigitt/wbackup';\n\nawait backup({\n  database: 'mongodb',\n  connectionString: 'mongodb://localhost:27017/mydb',\n  webhook: {\n    type: 'discord',\n    url: 'https://discord.com/api/webhooks/YOUR_WEBHOOK_URL',\n  },\n});\n```\n\n## Usage\n\n### Simple API\n\n```typescript\nimport { backup } from '@byigitt/wbackup';\n\n// MongoDB to Discord\nawait backup({\n  database: 'mongodb',\n  connectionString: 'mongodb://localhost:27017/mydb',\n  webhook: {\n    type: 'discord',\n    url: 'https://discord.com/api/webhooks/...',\n    username: 'Backup Bot', // optional\n  },\n  compress: true,      // optional, default: true\n  retainBackup: false, // optional, keep local file after upload\n});\n\n// PostgreSQL to Discord\nawait backup({\n  database: 'postgresql',\n  connectionString: 'postgresql://user:pass@localhost:5432/mydb',\n  webhook: {\n    type: 'discord',\n    url: 'https://discord.com/api/webhooks/...',\n  },\n});\n```\n\n### Fluent API\n\nFor more control, use the `BackupManager` class:\n\n```typescript\nimport { BackupManager } from '@byigitt/wbackup';\n\nconst result = await new BackupManager()\n  .database('mongodb', {\n    connectionString: 'mongodb://localhost:27017/mydb',\n    database: 'mydb',           // optional: specific database\n    collection: 'users',        // optional: specific collection\n  })\n  .delivery('discord', {\n    webhookUrl: 'https://discord.com/api/webhooks/...',\n    username: 'DB Backup',\n    embedColor: 0x00ff00,       // green\n    includeMetadata: true,\n  })\n  .compress(true)\n  .retainBackup(false)\n  .onProgress((phase, message) => {\n    console.log(`[${phase}] ${message}`);\n  })\n  .onSuccess((result) => {\n    console.log(`Backup completed in ${result.totalDuration}ms`);\n  })\n  .onError((error, phase) => {\n    console.error(`Failed during ${phase}:`, error.message);\n  })\n  .run();\n```\n\n## Supported Databases\n\n### MongoDB\n\nUses `mongodump` under the hood.\n\n```typescript\n.database('mongodb', {\n  connectionString: 'mongodb://user:pass@localhost:27017/mydb',\n  database: 'mydb',                    // optional\n  collection: 'users',                 // optional\n  authenticationDatabase: 'admin',     // optional\n  additionalArgs: ['--gzip'],          // optional: extra mongodump args\n  compress: true,                      // gzip the archive\n})\n```\n\n### PostgreSQL\n\nUses `pg_dump` under the hood.\n\n```typescript\n.database('postgresql', {\n  connectionString: 'postgresql://user:pass@localhost:5432/mydb',\n  format: 'custom',        // 'plain' | 'custom' | 'directory' | 'tar'\n  schema: 'public',        // optional: specific schema\n  table: 'users',          // optional: specific table\n  dataOnly: false,         // optional: skip schema\n  schemaOnly: false,       // optional: skip data\n  clean: false,            // optional: add DROP statements\n  additionalArgs: [],      // optional: extra pg_dump args\n  compress: true,          // gzip (only for 'plain' format)\n})\n```\n\n## Supported Delivery Platforms\n\n### Discord\n\n```typescript\n.delivery('discord', {\n  webhookUrl: 'https://discord.com/api/webhooks/...',\n  username: 'Backup Bot',     // optional\n  avatarUrl: 'https://...',   // optional\n  threadId: '123456789',      // optional: post to thread\n  embedColor: 0x5865f2,       // optional: embed color\n  includeMetadata: true,      // optional: show size, duration, etc.\n})\n```\n\n### Telegram\n\nTelegram is included but not registered by default. Register it first:\n\n```typescript\nimport {\n  BackupManager,\n  registerDeliveryStrategy,\n  createTelegramDeliveryStrategy\n} from '@byigitt/wbackup';\n\n// Register Telegram\nregisterDeliveryStrategy('telegram', createTelegramDeliveryStrategy);\n\n// Use it\nawait new BackupManager()\n  .database('mongodb', { connectionString: '...' })\n  .delivery('telegram', {\n    botToken: 'YOUR_BOT_TOKEN',\n    chatId: 'YOUR_CHAT_ID',\n    parseMode: 'HTML',           // 'HTML' | 'Markdown' | 'MarkdownV2'\n    disableNotification: false,\n    protectContent: false,\n  })\n  .run();\n```\n\n## Adding Custom Strategies\n\n### Custom Database Strategy\n\n```typescript\nimport { BackupStrategy, registerBackupStrategy } from '@byigitt/wbackup';\nimport { z } from 'zod';\n\nconst MyConfigSchema = z.object({\n  connectionString: z.string(),\n  compress: z.boolean().default(true),\n});\n\nclass MyDatabaseStrategy implements BackupStrategy<z.infer<typeof MyConfigSchema>> {\n  readonly name = 'mydatabase';\n  readonly configSchema = MyConfigSchema;\n\n  async backup(config) {\n    // Your backup logic here\n    return {\n      filePath: '/path/to/backup.sql',\n      fileName: 'backup.sql',\n      sizeBytes: 1024,\n      database: 'mydb',\n      createdAt: new Date(),\n      compressed: config.compress,\n      metadata: { type: 'mydatabase' },\n    };\n  }\n\n  async cleanup(filePath) {\n    // Delete temp file\n  }\n}\n\n// Register it\nregisterBackupStrategy('mydatabase', () => new MyDatabaseStrategy());\n\n// Use it\nawait new BackupManager()\n  .database('mydatabase', { connectionString: '...' })\n  .delivery('discord', { webhookUrl: '...' })\n  .run();\n```\n\n### Custom Delivery Strategy\n\n```typescript\nimport { DeliveryStrategy, registerDeliveryStrategy } from '@byigitt/wbackup';\nimport { z } from 'zod';\n\nconst SlackConfigSchema = z.object({\n  webhookUrl: z.string().url(),\n  channel: z.string(),\n});\n\nclass SlackDeliveryStrategy implements DeliveryStrategy<z.infer<typeof SlackConfigSchema>> {\n  readonly name = 'slack';\n  readonly configSchema = SlackConfigSchema;\n  readonly maxFileSizeBytes = 1024 * 1024 * 1024; // 1GB\n\n  async deliver(config, backup) {\n    // Your delivery logic here\n    return {\n      success: true,\n      platform: 'slack',\n      deliveredAt: new Date(),\n    };\n  }\n}\n\n// Register and use\nregisterDeliveryStrategy('slack', () => new SlackDeliveryStrategy());\n```\n\n## API Reference\n\n### `backup(options)`\n\nSimple function for quick backups.\n\n| Option | Type | Required | Description |\n|--------|------|----------|-------------|\n| `database` | `string` | Yes | Database type: `'mongodb'` or `'postgresql'` |\n| `connectionString` | `string` | Yes | Database connection string |\n| `databaseName` | `string` | No | Specific database name |\n| `webhook.type` | `string` | Yes | Delivery type: `'discord'` |\n| `webhook.url` | `string` | Yes | Webhook URL |\n| `webhook.username` | `string` | No | Bot username |\n| `compress` | `boolean` | No | Compress backup (default: `true`) |\n| `retainBackup` | `boolean` | No | Keep local file (default: `false`) |\n\n### `BackupManager`\n\nFluent builder for advanced usage.\n\n| Method | Description |\n|--------|-------------|\n| `.database(type, config)` | Set database type and config |\n| `.delivery(type, config)` | Set delivery type and config |\n| `.compress(boolean)` | Enable/disable compression |\n| `.retainBackup(boolean)` | Keep local backup file |\n| `.onProgress(callback)` | Progress updates |\n| `.onSuccess(callback)` | Success handler |\n| `.onError(callback)` | Error handler |\n| `.run()` | Execute backup |\n\n### `BackupResult`\n\nReturned after successful backup.\n\n```typescript\n{\n  filePath: string;      // Path to backup file\n  fileName: string;      // Backup filename\n  sizeBytes: number;     // File size\n  database: string;      // Database name\n  createdAt: Date;       // Backup timestamp\n  compressed: boolean;   // Was compressed\n  metadata: {            // Extra info\n    type: string;\n    duration: number;\n    // ...\n  };\n}\n```\n\n## Error Handling\n\n```typescript\nimport { BackupManager, BackupError } from '@byigitt/wbackup';\n\ntry {\n  await new BackupManager()\n    .database('mongodb', { connectionString: '...' })\n    .delivery('discord', { webhookUrl: '...' })\n    .run();\n} catch (error) {\n  if (error instanceof BackupError) {\n    console.error(`Failed during ${error.phase}:`, error.message);\n    // error.phase is 'backup' | 'delivery' | 'cleanup'\n  }\n}\n```\n\n## File Size Limits\n\nLarge backups are automatically split into chunks:\n\n| Platform | Max File Size |\n|----------|---------------|\n| Discord | 25 MB |\n| Telegram | 50 MB |\n\n## License\n\nMIT\n","readmeFilename":"README.md"}