@intranefr/superbackend 1.4.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (188) hide show
  1. package/.commiat +4 -0
  2. package/.env.example +47 -0
  3. package/README.md +110 -0
  4. package/index.js +94 -0
  5. package/package.json +67 -0
  6. package/public/css/styles.css +139 -0
  7. package/public/js/animations.js +41 -0
  8. package/sdk/error-tracking/browser/package.json +16 -0
  9. package/sdk/error-tracking/browser/src/core.js +270 -0
  10. package/sdk/error-tracking/browser/src/embed.js +18 -0
  11. package/sdk/error-tracking/browser/src/index.js +1 -0
  12. package/server.js +5 -0
  13. package/src/admin/endpointRegistry.js +300 -0
  14. package/src/controllers/admin.controller.js +321 -0
  15. package/src/controllers/adminAssets.controller.js +530 -0
  16. package/src/controllers/adminAssetsStorage.controller.js +260 -0
  17. package/src/controllers/adminEjsVirtual.controller.js +354 -0
  18. package/src/controllers/adminFeatureFlags.controller.js +155 -0
  19. package/src/controllers/adminHeadless.controller.js +1071 -0
  20. package/src/controllers/adminI18n.controller.js +604 -0
  21. package/src/controllers/adminJsonConfigs.controller.js +97 -0
  22. package/src/controllers/adminLlm.controller.js +273 -0
  23. package/src/controllers/adminMigration.controller.js +257 -0
  24. package/src/controllers/adminSeoConfig.controller.js +515 -0
  25. package/src/controllers/adminStats.controller.js +121 -0
  26. package/src/controllers/adminUploadNamespaces.controller.js +208 -0
  27. package/src/controllers/assets.controller.js +248 -0
  28. package/src/controllers/auth.controller.js +93 -0
  29. package/src/controllers/billing.controller.js +223 -0
  30. package/src/controllers/featureFlags.controller.js +35 -0
  31. package/src/controllers/forms.controller.js +217 -0
  32. package/src/controllers/globalSettings.controller.js +252 -0
  33. package/src/controllers/headlessCrud.controller.js +126 -0
  34. package/src/controllers/i18n.controller.js +12 -0
  35. package/src/controllers/invite.controller.js +249 -0
  36. package/src/controllers/jsonConfigs.controller.js +19 -0
  37. package/src/controllers/metrics.controller.js +149 -0
  38. package/src/controllers/notificationAdmin.controller.js +264 -0
  39. package/src/controllers/notifications.controller.js +131 -0
  40. package/src/controllers/org.controller.js +357 -0
  41. package/src/controllers/orgAdmin.controller.js +491 -0
  42. package/src/controllers/stripeAdmin.controller.js +410 -0
  43. package/src/controllers/user.controller.js +361 -0
  44. package/src/controllers/userAdmin.controller.js +277 -0
  45. package/src/controllers/waitingList.controller.js +167 -0
  46. package/src/controllers/webhook.controller.js +200 -0
  47. package/src/middleware/auth.js +66 -0
  48. package/src/middleware/errorCapture.js +170 -0
  49. package/src/middleware/headlessApiTokenAuth.js +57 -0
  50. package/src/middleware/org.js +108 -0
  51. package/src/middleware.js +901 -0
  52. package/src/models/ActionEvent.js +31 -0
  53. package/src/models/ActivityLog.js +41 -0
  54. package/src/models/Asset.js +84 -0
  55. package/src/models/AuditEvent.js +93 -0
  56. package/src/models/EmailLog.js +28 -0
  57. package/src/models/ErrorAggregate.js +72 -0
  58. package/src/models/FormSubmission.js +41 -0
  59. package/src/models/GlobalSetting.js +38 -0
  60. package/src/models/HeadlessApiToken.js +24 -0
  61. package/src/models/HeadlessModelDefinition.js +41 -0
  62. package/src/models/I18nEntry.js +77 -0
  63. package/src/models/I18nLocale.js +33 -0
  64. package/src/models/Invite.js +70 -0
  65. package/src/models/JsonConfig.js +46 -0
  66. package/src/models/Notification.js +60 -0
  67. package/src/models/Organization.js +57 -0
  68. package/src/models/OrganizationMember.js +43 -0
  69. package/src/models/StripeCatalogItem.js +77 -0
  70. package/src/models/StripeWebhookEvent.js +57 -0
  71. package/src/models/User.js +89 -0
  72. package/src/models/VirtualEjsFile.js +60 -0
  73. package/src/models/VirtualEjsFileVersion.js +43 -0
  74. package/src/models/VirtualEjsGroupChange.js +32 -0
  75. package/src/models/WaitingList.js +41 -0
  76. package/src/models/Webhook.js +63 -0
  77. package/src/models/Workflow.js +29 -0
  78. package/src/models/WorkflowExecution.js +12 -0
  79. package/src/routes/admin.routes.js +26 -0
  80. package/src/routes/adminAssets.routes.js +28 -0
  81. package/src/routes/adminAssetsStorage.routes.js +13 -0
  82. package/src/routes/adminAudit.routes.js +196 -0
  83. package/src/routes/adminEjsVirtual.routes.js +17 -0
  84. package/src/routes/adminErrors.routes.js +164 -0
  85. package/src/routes/adminFeatureFlags.routes.js +12 -0
  86. package/src/routes/adminHeadless.routes.js +38 -0
  87. package/src/routes/adminI18n.routes.js +22 -0
  88. package/src/routes/adminJsonConfigs.routes.js +15 -0
  89. package/src/routes/adminLlm.routes.js +12 -0
  90. package/src/routes/adminMigration.routes.js +81 -0
  91. package/src/routes/adminSeoConfig.routes.js +20 -0
  92. package/src/routes/adminUploadNamespaces.routes.js +13 -0
  93. package/src/routes/assets.routes.js +21 -0
  94. package/src/routes/auth.routes.js +12 -0
  95. package/src/routes/billing.routes.js +11 -0
  96. package/src/routes/errorTracking.routes.js +31 -0
  97. package/src/routes/featureFlags.routes.js +9 -0
  98. package/src/routes/forms.routes.js +9 -0
  99. package/src/routes/formsAdmin.routes.js +13 -0
  100. package/src/routes/globalSettings.routes.js +18 -0
  101. package/src/routes/headless.routes.js +15 -0
  102. package/src/routes/i18n.routes.js +8 -0
  103. package/src/routes/invite.routes.js +9 -0
  104. package/src/routes/jsonConfigs.routes.js +8 -0
  105. package/src/routes/log.routes.js +111 -0
  106. package/src/routes/metrics.routes.js +9 -0
  107. package/src/routes/notificationAdmin.routes.js +15 -0
  108. package/src/routes/notifications.routes.js +12 -0
  109. package/src/routes/org.routes.js +31 -0
  110. package/src/routes/orgAdmin.routes.js +20 -0
  111. package/src/routes/publicAssets.routes.js +7 -0
  112. package/src/routes/stripeAdmin.routes.js +20 -0
  113. package/src/routes/user.routes.js +22 -0
  114. package/src/routes/userAdmin.routes.js +15 -0
  115. package/src/routes/waitingList.routes.js +13 -0
  116. package/src/routes/waitingListAdmin.routes.js +9 -0
  117. package/src/routes/webhook.routes.js +32 -0
  118. package/src/routes/workflowWebhook.routes.js +54 -0
  119. package/src/routes/workflows.routes.js +110 -0
  120. package/src/services/assets.service.js +110 -0
  121. package/src/services/audit.service.js +62 -0
  122. package/src/services/auditLogger.js +165 -0
  123. package/src/services/ejsVirtual.service.js +614 -0
  124. package/src/services/email.service.js +351 -0
  125. package/src/services/errorLogger.js +221 -0
  126. package/src/services/featureFlags.service.js +202 -0
  127. package/src/services/forms.service.js +214 -0
  128. package/src/services/globalSettings.service.js +49 -0
  129. package/src/services/headlessApiTokens.service.js +158 -0
  130. package/src/services/headlessCrypto.service.js +31 -0
  131. package/src/services/headlessModels.service.js +356 -0
  132. package/src/services/i18n.service.js +314 -0
  133. package/src/services/i18nInferredKeys.service.js +337 -0
  134. package/src/services/jsonConfigs.service.js +392 -0
  135. package/src/services/llm.service.js +749 -0
  136. package/src/services/migration.service.js +581 -0
  137. package/src/services/migrationAssets/fsLocal.js +58 -0
  138. package/src/services/migrationAssets/index.js +134 -0
  139. package/src/services/migrationAssets/s3.js +75 -0
  140. package/src/services/migrationAssets/sftp.js +92 -0
  141. package/src/services/notification.service.js +212 -0
  142. package/src/services/objectStorage.service.js +514 -0
  143. package/src/services/seoConfig.service.js +402 -0
  144. package/src/services/storage.js +150 -0
  145. package/src/services/stripe.service.js +185 -0
  146. package/src/services/stripeHelper.service.js +264 -0
  147. package/src/services/uploadNamespaces.service.js +326 -0
  148. package/src/services/webhook.service.js +157 -0
  149. package/src/services/workflow.service.js +271 -0
  150. package/src/utils/asyncHandler.js +5 -0
  151. package/src/utils/encryption.js +80 -0
  152. package/src/utils/jwt.js +40 -0
  153. package/src/utils/orgRoles.js +156 -0
  154. package/src/utils/validation.js +26 -0
  155. package/src/utils/webhookRetry.js +93 -0
  156. package/views/admin-assets.ejs +444 -0
  157. package/views/admin-audit.ejs +283 -0
  158. package/views/admin-coolify-deploy.ejs +207 -0
  159. package/views/admin-dashboard-home.ejs +291 -0
  160. package/views/admin-dashboard.ejs +397 -0
  161. package/views/admin-ejs-virtual.ejs +280 -0
  162. package/views/admin-errors.ejs +368 -0
  163. package/views/admin-feature-flags.ejs +390 -0
  164. package/views/admin-forms.ejs +526 -0
  165. package/views/admin-global-settings.ejs +436 -0
  166. package/views/admin-headless.ejs +2020 -0
  167. package/views/admin-i18n-locales.ejs +221 -0
  168. package/views/admin-i18n.ejs +728 -0
  169. package/views/admin-json-configs.ejs +410 -0
  170. package/views/admin-llm.ejs +884 -0
  171. package/views/admin-metrics.ejs +274 -0
  172. package/views/admin-migration.ejs +814 -0
  173. package/views/admin-notifications.ejs +430 -0
  174. package/views/admin-organizations.ejs +984 -0
  175. package/views/admin-seo-config.ejs +673 -0
  176. package/views/admin-stripe-pricing.ejs +558 -0
  177. package/views/admin-test.ejs +342 -0
  178. package/views/admin-users.ejs +452 -0
  179. package/views/admin-waiting-list.ejs +547 -0
  180. package/views/admin-webhooks.ejs +329 -0
  181. package/views/admin-workflows.ejs +310 -0
  182. package/views/partials/admin-assets-script.ejs +2022 -0
  183. package/views/partials/admin-test-sidebar.ejs +14 -0
  184. package/views/partials/dashboard/nav-items.ejs +66 -0
  185. package/views/partials/dashboard/palette.ejs +63 -0
  186. package/views/partials/dashboard/sidebar.ejs +21 -0
  187. package/views/partials/dashboard/tab-bar.ejs +26 -0
  188. package/views/partials/footer.ejs +3 -0
package/.commiat ADDED
@@ -0,0 +1,4 @@
1
+ {
2
+ "format": "{type}: {msg}",
3
+ "variables": {}
4
+ }
package/.env.example ADDED
@@ -0,0 +1,47 @@
1
+ # Server
2
+ PORT=3000
3
+ NODE_ENV=development
4
+ PUBLIC_URL=http://localhost:3000
5
+ BILLING_RETURN_URL_RELATIVE=/billing/view
6
+
7
+ # CORS Configuration
8
+ # Use * for all origins (default) or specify comma-separated list
9
+ # Examples:
10
+ # CORS_ORIGIN=*
11
+ # CORS_ORIGIN=http://localhost:3000
12
+ # CORS_ORIGIN=http://localhost:3000,https://app.com
13
+ CORS_ORIGIN=*
14
+
15
+ # Database
16
+ MONGODB_URI=mongodb://localhost:27017/myappdb
17
+
18
+ # JWT Secrets (change these in production!)
19
+ JWT_ACCESS_SECRET=your-access-secret-change-me
20
+ JWT_REFRESH_SECRET=your-refresh-secret-change-me
21
+
22
+ # Stripe
23
+ STRIPE_SECRET_KEY=sk_test_...
24
+ STRIPE_WEBHOOK_SECRET=whsec_...
25
+
26
+ # Admin Basic Auth
27
+ ADMIN_USERNAME=admin
28
+ ADMIN_PASSWORD=change-me-in-production
29
+
30
+ # Emailing
31
+ RESEND_API_KEY=
32
+
33
+ # File Storage (filesystem fallback)
34
+ UPLOAD_DIR=uploads
35
+ MAX_FILE_SIZE=10485760
36
+ MAX_FILE_SIZE_HARD_CAP=10485760
37
+
38
+ # Multer file size limit in bytes (used by Express middleware) (multer ceiling)
39
+ #MULTER_FILE_SIZE_LIMIT=10485760
40
+
41
+ # S3 / MinIO (optional - enables S3 backend when all are set)
42
+ # S3_ENDPOINT=http://localhost:9000
43
+ # S3_REGION=us-east-1
44
+ # S3_ACCESS_KEY_ID=minioadmin
45
+ # S3_SECRET_ACCESS_KEY=minioadmin
46
+ # S3_BUCKET=saasbackend
47
+ # S3_FORCE_PATH_STYLE=true
package/README.md ADDED
@@ -0,0 +1,110 @@
1
+ # SuperBackend
2
+
3
+ Node.js middleware that gives your project backend superpowers. Handles authentication, billing, audit logs, file storage, error tracking, and more—all in one cohesive layer.
4
+
5
+ ---
6
+
7
+ ## Features
8
+
9
+ - **Authentication & Security**: JWT-based auth with refresh tokens, organization management, and granular RBAC system
10
+ - **Billing & Subscriptions**: Full Stripe integration with checkout sessions, billing portal, and webhook processing
11
+ - **File Storage**: Unified S3/filesystem API with multipart uploads, namespace support, and public/private visibility
12
+ - **Admin Panel**: Basic-auth protected UI for user management, settings, metrics, and operational tasks
13
+ - **Audit Logging**: Append-only audit trail for security and compliance with admin search interface
14
+ - **Error Tracking**: Frontend + backend error aggregation with fingerprinting and admin triage UI
15
+ - **Notifications**: Multi-channel system with in-app notifications and email alerts
16
+ - **Feature Flags**: Dynamic feature toggles with rollout percentages and allow lists
17
+ - **Global Settings**: Runtime configuration with encrypted storage support for secrets
18
+ - **Forms & Leads**: Custom form definitions, lead capture, webhooks, and multi-tenant support
19
+ - **Internationalization**: JSON-based localization with server-side and client-side integration
20
+ - **Organizations**: Multi-tenant support with role-based member management
21
+ - **Headless CMS**: JSON configs, SEO configuration, and content management
22
+ - **Email System**: SMTP integration with templates and delivery tracking
23
+ - **Webhooks**: Outgoing webhook system for event-driven integrations
24
+ - **Metrics & Activity**: Usage tracking and analytics for business insights
25
+ - **Middleware Mode**: Drop-in Express middleware that preserves your app structure
26
+
27
+ ---
28
+
29
+ ## Installation
30
+
31
+ ```bash
32
+ npm install superbackend
33
+ ```
34
+
35
+ or
36
+
37
+ ```bash
38
+ yarn add superbackend
39
+ ```
40
+
41
+ ---
42
+
43
+ ## Quick Start
44
+
45
+ ```javascript
46
+ require('dotenv').config();
47
+ const express = require('express');
48
+ const { middleware } = require('saasbackend');
49
+
50
+ const app = express();
51
+
52
+ // Mount under /saas prefix (recommended)
53
+ app.use('/saas', middleware({
54
+ mongodbUri: process.env.MONGODB_URI,
55
+ corsOrigin: process.env.CORS_ORIGIN || '*',
56
+ }));
57
+
58
+ app.listen(3000, () => {
59
+ console.log('Server running on http://localhost:3000');
60
+ });
61
+ ```
62
+
63
+ ---
64
+
65
+ ## Configuration
66
+
67
+ SuperBackend is fully configurable. Example options:
68
+
69
+ ```javascript
70
+ const backend = new SuperBackend({
71
+ rbac: { /* roles, permissions */ },
72
+ logging: { level: 'info', output: 'console' },
73
+ metrics: true,
74
+ queues: { redisUrl: 'redis://localhost:6379' },
75
+ audit: true,
76
+ });
77
+ ```
78
+
79
+ ---
80
+
81
+ ## Documentation
82
+
83
+ See the `docs/features/` directory for detailed guides:
84
+ - [Getting Started](docs/features/getting-started.md)
85
+ - [Core Configuration](docs/features/core-configuration.md)
86
+ - [Admin API Usage](docs/features/admin-api-usage.md)
87
+ - [Billing & Subscriptions](docs/features/billing-and-subscriptions.md)
88
+
89
+ ---
90
+
91
+ ## Contributing
92
+
93
+ SuperBackend is open-source and welcomes contributions!
94
+ Please read the [CONTRIBUTING.md](#) for guidelines.
95
+
96
+ ---
97
+
98
+ <!-- Made by Intrane block -->
99
+ <p><em>Part of the Intrane suite of practical developer tools</em></p>
100
+ <a href="https://intrane.fr" target="_blank">
101
+ <img src="https://img.shields.io/badge/Intrane-intranefr-blue?style=flat-square" alt="Intrane"/>
102
+ </a>
103
+ &nbsp;
104
+ <a href="https://www.npmjs.com/package/superbackend" target="_blank">
105
+ <img src="https://img.shields.io/npm/v/superbackend?style=flat-square" alt="npm"/>
106
+ </a>
107
+
108
+ ## License
109
+
110
+ MIT © 2026 Intrane
package/index.js ADDED
@@ -0,0 +1,94 @@
1
+ require("dotenv").config({ path: process.env.ENV_FILE || ".env" });
2
+ const express = require("express");
3
+
4
+ /**
5
+ * Creates the SaaS backend as Express middleware
6
+ * @param {Object} options - Configuration options
7
+ * @param {string} options.mongodbUri - MongoDB connection string
8
+ * @param {string} options.corsOrigin - CORS origin(s)
9
+ * @param {string} options.jwtSecret - JWT secret for authentication
10
+ * @param {Object} options.dbConnection - Existing Mongoose connection
11
+ * @returns {express.Router} Configured Express router
12
+ */
13
+ const middleware = require("./src/middleware");
14
+
15
+ /**
16
+ * Creates and starts a standalone SaaS backend server
17
+ * @param {Object} options - Configuration options
18
+ * @param {number} options.port - Port to listen on
19
+ * @param {string} options.mongodbUri - MongoDB connection string
20
+ * @param {string} options.corsOrigin - CORS origin(s)
21
+ * @returns {Object} Express app and server instance
22
+ */
23
+ function startServer(options = {}) {
24
+ const app = express();
25
+ const PORT = options.port || process.env.PORT || 3000;
26
+
27
+ app.use(module.exports.middleware(options));
28
+
29
+ // Start server
30
+ const server = app.listen(PORT, () => {
31
+ console.log(`🚀 SaaSBackend standalone server running on http://localhost:${PORT}`);
32
+ });
33
+
34
+ return { app, server };
35
+ }
36
+
37
+ const saasbackend = {
38
+ server: startServer,
39
+ middleware: (options = {}) => {
40
+ globalThis.saasbackend = saasbackend;
41
+ return middleware(options);
42
+ },
43
+ services: {
44
+ email: require("./src/services/email.service"),
45
+ storage: require("./src/services/storage"),
46
+ i18n: require("./src/services/i18n.service"),
47
+ audit: require("./src/services/audit.service"),
48
+ globalSettings: require("./src/services/globalSettings.service"),
49
+ jsonConfigs: require("./src/services/jsonConfigs.service"),
50
+ assets: require("./src/services/assets.service"),
51
+ uploadNamespaces: require("./src/services/uploadNamespaces.service"),
52
+ llm: require("./src/services/llm.service"),
53
+ migration: require("./src/services/migration.service"),
54
+ ejsVirtual: require("./src/services/ejsVirtual.service"),
55
+ forms: require("./src/services/forms.service"),
56
+ webhooks: require("./src/services/webhook.service"),
57
+ workflow: require("./src/services/workflow.service"),
58
+ },
59
+ models: {
60
+ ActionEvent: require("./src/models/ActionEvent"),
61
+ ActivityLog: require("./src/models/ActivityLog"),
62
+ Asset: require("./src/models/Asset"),
63
+ AuditEvent: require("./src/models/AuditEvent"),
64
+ EmailLog: require("./src/models/EmailLog"),
65
+ ErrorAggregate: require("./src/models/ErrorAggregate"),
66
+ FormSubmission: require("./src/models/FormSubmission"),
67
+ GlobalSetting: require("./src/models/GlobalSetting"),
68
+ I18nEntry: require("./src/models/I18nEntry"),
69
+ I18nLocale: require("./src/models/I18nLocale"),
70
+ Invite: require("./src/models/Invite"),
71
+ JsonConfig: require("./src/models/JsonConfig"),
72
+ Notification: require("./src/models/Notification"),
73
+ Organization: require("./src/models/Organization"),
74
+ OrganizationMember: require("./src/models/OrganizationMember"),
75
+ StripeCatalogItem: require("./src/models/StripeCatalogItem"),
76
+ StripeWebhookEvent: require("./src/models/StripeWebhookEvent"),
77
+ User: require("./src/models/User"),
78
+ WaitingList: require("./src/models/WaitingList"),
79
+ VirtualEjsFile: require("./src/models/VirtualEjsFile"),
80
+ VirtualEjsFileVersion: require("./src/models/VirtualEjsFileVersion"),
81
+ VirtualEjsGroupChange: require("./src/models/VirtualEjsGroupChange"),
82
+ Webhook: require("./src/models/Webhook"),
83
+ Workflow: require("./src/models/Workflow"),
84
+ WorkflowExecution: require("./src/models/WorkflowExecution"),
85
+ },
86
+ helpers: {
87
+ auth: require("./src/middleware/auth"),
88
+ org: require("./src/middleware/org"),
89
+ i18n: require("./src/services/i18n.service"),
90
+ jsonConfigs: require("./src/services/jsonConfigs.service"),
91
+ },
92
+ };
93
+
94
+ module.exports = saasbackend;
package/package.json ADDED
@@ -0,0 +1,67 @@
1
+ {
2
+ "name": "@intranefr/superbackend",
3
+ "version": "1.4.3",
4
+ "description": "Node.js middleware that gives your project backend superpowers",
5
+ "main": "index.js",
6
+ "scripts": {
7
+ "start": "node server.js",
8
+ "dev": "nodemon server.js",
9
+ "start:minio": "docker compose -f compose.standalone.yml --profile minio-only up -d minio",
10
+ "minio:envs": "node -e \"console.log(['S3_ENDPOINT=http://localhost:9000','S3_REGION=us-east-1','S3_ACCESS_KEY_ID=minioadmin','S3_SECRET_ACCESS_KEY=minioadmin','S3_BUCKET=saasbackend','S3_FORCE_PATH_STYLE=true'].join('\\n'))\"",
11
+ "build:sdk:error-tracking:browser": "esbuild sdk/error-tracking/browser/src/embed.js --bundle --format=iife --global-name=saasbackendErrorTrackingEmbed --outfile=sdk/error-tracking/browser/dist/embed.iife.js",
12
+ "test": "jest",
13
+ "test:watch": "jest --watch",
14
+ "test:coverage": "jest --coverage"
15
+ },
16
+ "keywords": [
17
+ "substack",
18
+ "notes",
19
+ "automation",
20
+ "ai"
21
+ ],
22
+ "author": "Javier Leandro Arancibia <arancibia.javier@gmail.com>",
23
+ "repository": {
24
+ "type": "git",
25
+ "url": "https://github.com/javimosch/superbackend"
26
+ },
27
+ "homepage": "https://javimosch.github.io/superbackend/",
28
+ "bugs": {
29
+ "url": "https://github.com/javimosch/superbackend/issues"
30
+ },
31
+ "license": "MIT",
32
+ "dependencies": {
33
+ "@aws-sdk/client-s3": "^3.0.0",
34
+ "axios": "^1.13.2",
35
+ "bcryptjs": "^2.4.3",
36
+ "cheerio": "^1.0.0-rc.12",
37
+ "cors": "^2.8.5",
38
+ "dotenv": "^16.3.1",
39
+ "ejs": "^3.1.9",
40
+ "express": "^4.18.2",
41
+ "jsonwebtoken": "^9.0.2",
42
+ "mongoose": "^8.0.0",
43
+ "multer": "^1.4.5-lts.1",
44
+ "openai": "^4.0.0",
45
+ "resend": "^6.4.0",
46
+ "ssh2-sftp-client": "^12.0.1",
47
+ "stripe": "^14.0.0",
48
+ "vm2": "^3.10.0"
49
+ },
50
+ "devDependencies": {
51
+ "esbuild": "^0.25.0",
52
+ "jest": "^29.7.0",
53
+ "nodemon": "^3.0.1",
54
+ "supertest": "^7.1.4"
55
+ },
56
+ "jest": {
57
+ "testEnvironment": "node",
58
+ "collectCoverageFrom": [
59
+ "src/**/*.js",
60
+ "!src/**/*.test.js"
61
+ ],
62
+ "testMatch": [
63
+ "**/__tests__/**/*.js",
64
+ "**/*.test.js"
65
+ ]
66
+ }
67
+ }
@@ -0,0 +1,139 @@
1
+ /* Custom Animations and Styles */
2
+
3
+ /* Fade in animations */
4
+ .fade-in {
5
+ animation: fadeIn 0.8s ease-in;
6
+ }
7
+
8
+ .fade-in-delayed {
9
+ animation: fadeIn 0.8s ease-in 0.3s both;
10
+ }
11
+
12
+ @keyframes fadeIn {
13
+ from {
14
+ opacity: 0;
15
+ transform: translateY(20px);
16
+ }
17
+ to {
18
+ opacity: 1;
19
+ transform: translateY(0);
20
+ }
21
+ }
22
+
23
+ /* Floating note icons animation */
24
+ .note-icon {
25
+ position: absolute;
26
+ animation: float 8s ease-in-out infinite;
27
+ }
28
+
29
+ @keyframes float {
30
+ 0%, 100% {
31
+ opacity: 0.1;
32
+ transform: translateY(0) translateX(0);
33
+ }
34
+ 25% {
35
+ opacity: 0.3;
36
+ transform: translateY(-100px) translateX(50px);
37
+ }
38
+ 50% {
39
+ opacity: 0.2;
40
+ transform: translateY(-200px) translateX(-30px);
41
+ }
42
+ 75% {
43
+ opacity: 0.3;
44
+ transform: translateY(-300px) translateX(70px);
45
+ }
46
+ }
47
+
48
+ /* Floating cards animation */
49
+ .float-card {
50
+ animation: floatCard 3s ease-in-out infinite;
51
+ }
52
+
53
+ @keyframes floatCard {
54
+ 0%, 100% {
55
+ transform: translateY(0);
56
+ }
57
+ 50% {
58
+ transform: translateY(-10px);
59
+ }
60
+ }
61
+
62
+ /* CTA Button pulse effect */
63
+ .cta-button {
64
+ animation: pulse 2s ease-in-out infinite;
65
+ }
66
+
67
+ @keyframes pulse {
68
+ 0%, 100% {
69
+ box-shadow: 0 10px 25px rgba(126, 211, 33, 0.3);
70
+ }
71
+ 50% {
72
+ box-shadow: 0 15px 35px rgba(126, 211, 33, 0.5);
73
+ }
74
+ }
75
+
76
+ /* Scroll reveal animation */
77
+ .scroll-reveal {
78
+ opacity: 0;
79
+ transform: translateY(30px);
80
+ transition: opacity 0.6s ease, transform 0.6s ease;
81
+ }
82
+
83
+ .scroll-reveal.revealed {
84
+ opacity: 1;
85
+ transform: translateY(0);
86
+ }
87
+
88
+ /* Feature card hover effects */
89
+ .feature-card {
90
+ transition: all 0.3s ease;
91
+ }
92
+
93
+ .feature-card:hover {
94
+ transform: translateY(-8px);
95
+ box-shadow: 0 20px 40px rgba(0, 0, 0, 0.1);
96
+ }
97
+
98
+ /* Testimonial card effects */
99
+ .testimonial-card {
100
+ transition: all 0.3s ease;
101
+ }
102
+
103
+ .testimonial-card:hover {
104
+ transform: translateY(-4px);
105
+ box-shadow: 0 10px 30px rgba(0, 0, 0, 0.08);
106
+ }
107
+
108
+ /* Pricing card effects */
109
+ .pricing-card {
110
+ transition: all 0.3s ease;
111
+ }
112
+
113
+ .pricing-card:hover {
114
+ transform: scale(1.02);
115
+ box-shadow: 0 25px 50px rgba(0, 0, 0, 0.15);
116
+ }
117
+
118
+ /* Smooth scrolling */
119
+ html {
120
+ scroll-behavior: smooth;
121
+ }
122
+
123
+ /* Custom scrollbar */
124
+ ::-webkit-scrollbar {
125
+ width: 10px;
126
+ }
127
+
128
+ ::-webkit-scrollbar-track {
129
+ background: #f1f1f1;
130
+ }
131
+
132
+ ::-webkit-scrollbar-thumb {
133
+ background: #4A90E2;
134
+ border-radius: 5px;
135
+ }
136
+
137
+ ::-webkit-scrollbar-thumb:hover {
138
+ background: #357ABD;
139
+ }
@@ -0,0 +1,41 @@
1
+ // Intersection Observer for scroll animations
2
+ const observerOptions = {
3
+ threshold: 0.1,
4
+ rootMargin: '0px 0px -100px 0px'
5
+ };
6
+
7
+ const observer = new IntersectionObserver((entries) => {
8
+ entries.forEach(entry => {
9
+ if (entry.isIntersecting) {
10
+ entry.target.classList.add('revealed');
11
+ }
12
+ });
13
+ }, observerOptions);
14
+
15
+ // Observe all scroll-reveal elements
16
+ document.addEventListener('DOMContentLoaded', () => {
17
+ const scrollElements = document.querySelectorAll('.scroll-reveal');
18
+ scrollElements.forEach(el => observer.observe(el));
19
+ });
20
+
21
+ // Smooth scroll for anchor links
22
+ document.querySelectorAll('a[href^="#"]').forEach(anchor => {
23
+ anchor.addEventListener('click', function (e) {
24
+ const href = this.getAttribute('href');
25
+ if (href !== '#' && href !== '#demo') {
26
+ e.preventDefault();
27
+ const target = document.querySelector(href);
28
+ if (target) {
29
+ target.scrollIntoView({
30
+ behavior: 'smooth',
31
+ block: 'start'
32
+ });
33
+ }
34
+ }
35
+ });
36
+ });
37
+
38
+ // Add loading animation class
39
+ window.addEventListener('load', () => {
40
+ document.body.classList.add('loaded');
41
+ });
@@ -0,0 +1,16 @@
1
+ {
2
+ "name": "@saasbackend/error-tracking-browser-sdk",
3
+ "version": "1.0.0",
4
+ "type": "module",
5
+ "exports": {
6
+ ".": {
7
+ "import": "./src/index.js"
8
+ }
9
+ },
10
+ "scripts": {
11
+ "build": "esbuild src/embed.js --bundle --format=iife --global-name=saasbackendErrorTrackingEmbed --outfile=dist/embed.iife.js --minify"
12
+ },
13
+ "devDependencies": {
14
+ "esbuild": "^0.27.2"
15
+ }
16
+ }