{"_id":"@absentialslab/firebase-email-collector","name":"@absentialslab/firebase-email-collector","dist-tags":{"latest":"1.0.0"},"versions":{"1.0.0":{"name":"@absentialslab/firebase-email-collector","version":"1.0.0","description":"Simple Firebase email collection for landing pages and waitlists","main":"dist/index.js","module":"dist/index.esm.js","type":"module","exports":{".":{"import":"./dist/index.esm.js","require":"./dist/index.js"}},"scripts":{"build":"node build.js","test":"jest","test:watch":"jest --watch","prepublishOnly":"npm run build"},"keywords":["firebase","email","landing-page","waitlist","firestore","email-collection"],"author":{"name":"N-Back Pro"},"license":"MIT","peerDependencies":{"firebase":"^10.0.0 || ^11.0.0"},"devDependencies":{"@babel/preset-env":"^7.23.0","babel-jest":"^29.7.0","firebase":"^11.0.0","jest":"^29.7.0","jest-environment-jsdom":"^29.7.0"},"repository":{"type":"git","url":"git+https://github.com/yourusername/firebase-email-collector.git"},"_id":"@absentialslab/firebase-email-collector@1.0.0","gitHead":"7744c58fed6b882e5808a28b7c85c548956aefcd","bugs":{"url":"https://github.com/yourusername/firebase-email-collector/issues"},"homepage":"https://github.com/yourusername/firebase-email-collector#readme","_nodeVersion":"24.10.0","_npmVersion":"11.6.0","dist":{"integrity":"sha512-qVSvxvSWkkjs5Zm4tAi+RV61a3kj7zPGg2rwNIPltJSImH0SdBPyTBcOIY3FF2l27iE2hLS4Y/fWsoo7/ZYIMA==","shasum":"0bd8dfc5960614a5ba31fe097406bff0fed190de","tarball":"https://registry.npmjs.org/@absentialslab/firebase-email-collector/-/firebase-email-collector-1.0.0.tgz","fileCount":4,"unpackedSize":11648,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCIQDdsFJvpntJGyhXjA7W3POneaG5ouAMA/TdwUFtNwb+cgIgUCXCgQzgh5lwqb/7f/n9z4+G7UfbhSD5qpoeO9dQ9HA="}]},"_npmUser":{"name":"absentialslab","email":"absentials.lab@gmail.com"},"directories":{},"maintainers":[{"name":"absentialslab","email":"absentials.lab@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/firebase-email-collector_1.0.0_1763294580596_0.0062734020880788055"},"_hasShrinkwrap":false}},"time":{"created":"2025-11-16T12:03:00.515Z","1.0.0":"2025-11-16T12:03:00.812Z","modified":"2025-11-16T12:03:01.101Z"},"maintainers":[{"name":"absentialslab","email":"absentials.lab@gmail.com"}],"description":"Simple Firebase email collection for landing pages and waitlists","homepage":"https://github.com/yourusername/firebase-email-collector#readme","keywords":["firebase","email","landing-page","waitlist","firestore","email-collection"],"repository":{"type":"git","url":"git+https://github.com/yourusername/firebase-email-collector.git"},"author":{"name":"N-Back Pro"},"bugs":{"url":"https://github.com/yourusername/firebase-email-collector/issues"},"license":"MIT","readme":"# Firebase Email Collector\n\nA simple, reusable package for collecting emails via Firebase Firestore. Perfect for landing pages, waitlists, and newsletter signups.\n\n## Installation\n\n```bash\nnpm install @nback/firebase-email-collector firebase\n```\n\n## Quick Start\n\n```javascript\nimport { EmailCollector } from \"@nback/firebase-email-collector\";\n\nconst collector = new EmailCollector(\n  {\n    apiKey: \"YOUR_API_KEY\",\n    authDomain: \"your-app.firebaseapp.com\",\n    projectId: \"your-project-id\",\n    storageBucket: \"your-app.appspot.com\",\n    messagingSenderId: \"123456789\",\n    appId: \"1:123456789:web:abcdef\",\n  },\n  {\n    collectionPath: \"waitlist\",\n  }\n);\n\n// Submit an email\ntry {\n  const result = await collector.submitEmail(\"user@example.com\");\n  console.log(\"Success!\", result.id);\n} catch (error) {\n  console.error(\"Failed:\", error);\n}\n```\n\n## Usage in HTML (CDN)\n\n```html\n<script type=\"module\">\n  import { EmailCollector } from \"https://unpkg.com/@nback/firebase-email-collector\";\n  import { initializeApp } from \"https://www.gstatic.com/firebasejs/11.6.1/firebase-app.js\";\n\n  const collector = new EmailCollector(firebaseConfig, {\n    collectionPath: \"my-emails\",\n  });\n\n  document.getElementById(\"email-form\").addEventListener(\"submit\", async (e) => {\n    e.preventDefault();\n    const email = document.getElementById(\"email-input\").value;\n\n    try {\n      await collector.submitEmail(email);\n      alert(\"Thank you!\");\n    } catch (error) {\n      alert(\"Something went wrong\");\n    }\n  });\n</script>\n```\n\n## API\n\n### `new EmailCollector(firebaseConfig, options)`\n\nCreates a new email collector instance.\n\n**Parameters:**\n\n- `firebaseConfig` (Object) - Your Firebase configuration\n- `options` (Object) - Optional configuration\n  - `collectionPath` (string) - Firestore collection path (default: 'emails')\n  - `appName` (string) - Firebase app name (default: 'email-collector')\n  - `additionalFields` (Object) - Fields to include in every submission\n  - `beforeSubmit` (Function) - Hook called before submission\n  - `onSuccess` (Function) - Hook called after successful submission\n  - `onError` (Function) - Hook called on error\n\n### `submitEmail(email, customData)`\n\nSubmits an email to Firestore.\n\n**Parameters:**\n\n- `email` (string) - Email address to submit\n- `customData` (Object) - Additional data to include (optional)\n\n**Returns:** Promise<{ success: boolean, id: string }>\n\n### `isValidEmail(email)`\n\nValidates email format.\n\n**Parameters:**\n\n- `email` (string) - Email to validate\n\n**Returns:** boolean\n\n## Advanced Usage\n\n### With Additional Fields\n\n```javascript\nconst collector = new EmailCollector(firebaseConfig, {\n  collectionPath: \"waitlist\",\n  additionalFields: {\n    source: \"landing-page\",\n    campaign: \"launch-2024\",\n  },\n});\n\nawait collector.submitEmail(\"user@example.com\", {\n  referrer: document.referrer,\n  userAgent: navigator.userAgent,\n});\n```\n\n### With Hooks\n\n```javascript\nconst collector = new EmailCollector(firebaseConfig, {\n  collectionPath: \"emails\",\n  beforeSubmit: async (data) => {\n    // Enrich data before submission\n    return {\n      ...data,\n      timestamp: Date.now(),\n      country: await getCountryFromIP(),\n    };\n  },\n  onSuccess: (result) => {\n    console.log(\"Email saved with ID:\", result.id);\n    gtag(\"event\", \"email_submitted\");\n  },\n  onError: (error) => {\n    console.error(\"Submission failed:\", error);\n    Sentry.captureException(error);\n  },\n});\n```\n\n### Convenience Function\n\nFor simple use cases:\n\n```javascript\nimport { createEmailCollector } from \"@nback/firebase-email-collector\";\n\nconst collector = createEmailCollector(firebaseConfig, \"my-collection\");\nawait collector.submitEmail(\"user@example.com\");\n```\n\n## Firestore Data Structure\n\nEach submitted email creates a document with this structure:\n\n```javascript\n{\n  email: \"user@example.com\",\n  createdAt: Timestamp,\n  // ... any additional fields you specified\n}\n```\n\n## Firebase Setup\n\n1. Create a Firebase project at https://console.firebase.google.com\n2. Enable Firestore Database\n3. Set up security rules (example):\n\n```\nrules_version = '2';\nservice cloud.firestore {\n  match /databases/{database}/documents {\n    match /emails/{document} {\n      allow create: if request.auth == null; // Allow anonymous writes\n      allow read, update, delete: if false; // Deny all other operations\n    }\n  }\n}\n```\n\n## License\n\nMIT\n","readmeFilename":"README.md","_rev":"1-bec55c9d93118e56be596796a52aba26"}