Email Sorter Beta

Ich habe soweit automatisiert the Emails sortieren aber ich muss noch schauen was es fur bugs es gibt wenn die app online  ist deswegen wurde ich mit diesen Commit die website veroffentlichen obwohjl es sein konnte  das es noch nicht fertig ist und verkaufs bereit
This commit is contained in:
2026-01-22 19:32:12 +01:00
parent 95349af50b
commit abf761db07
596 changed files with 56405 additions and 51231 deletions

View File

@@ -1,29 +1,26 @@
# Appwrite Configuration
APPWRITE_ENDPOINT=https://appwrite.webklar.com/v1
APPWRITE_PROJECT_ID=696533bd0003952a02d4
APPWRITE_API_KEY=297b989f4f706df75aee7d768422021787228412c88d00d663a3dae462e09d74a8c18ae973f44c8693c1fc65c2cc0939e4887f44b08548234df464e9acaeee7392c1cf35711bc94b0aa33eec2d5dd3b0178acc3061a34dca13b23f5f94e0db4d0f80bc53fbb63f2ec3b2eb2372c1d5cfa17483e150cbfde8a7b82759334abb82
APPWRITE_DATABASE_ID=mail-sorter
# Database Configuration (for bootstrap script)
DB_ID=mail-sorter
DB_NAME=EmailSorter
TABLE_PRODUCTS=products
TABLE_QUESTIONS=questions
TABLE_SUBMISSIONS=submissions
TABLE_ANSWERS=answers
TABLE_ORDERS=orders
# Product Configuration (for bootstrap script)
PRODUCT_ID=email-sorter-product
PRODUCT_SLUG=email-sorter
PRODUCT_TITLE=Email Sorter Setup
PRODUCT_PRICE_CENTS=4900
PRODUCT_CURRENCY=eur
# Stripe Configuration
STRIPE_SECRET_KEY=sk_test_51SpYllRsB5VYNsBGAgYJmoyfdu1MnOyOxuUddGbmbolOTS0dGKi4GHuW20Z1Y9AUINCM7IJREIuxY9kgyQbJ9aeR00zlnRvjHs
STRIPE_WEBHOOK_SECRET=whsec_your_webhook_secret_here
# Server Configuration
# Server
PORT=3000
NODE_ENV=development
BASE_URL=http://localhost:3000
FRONTEND_URL=http://localhost:5173
# Appwrite (Self-Hosted)
APPWRITE_ENDPOINT=https://appwrite.webklar.com/v1
APPWRITE_PROJECT_ID=696d0949001c70d6c6da
APPWRITE_API_KEY=standard_03507d30aec465c79b21cb09603f03f6e2165c4054ba8b761f61850b41229ee68f967a7677bbf4dd80b54cf6fa2b1cfe101fddff5ba4166ec7d0f09e7dc6f5e6e4585fce24d0ee5d745202e2b52a3846e71e4672e3257a7f3c1e9a0bfac256c508c1d07903e887b84934fb9ee46776ff8c474ffdd00173348ddfd263e467c6a5
APPWRITE_DATABASE_ID=email_sorter_db
# Stripe
STRIPE_SECRET_KEY=sk_test_51SpYm0RvlKyip3LEUX2f29RDbf2GgQGbH7ht2jkoBT3T5icFTCKa9y0LsYfTDN5DW7rFg5MQvg5dFCvq40HwmzHE00CRwvYIm7
STRIPE_WEBHOOK_SECRET=whsec_placeholder
STRIPE_PRICE_BASIC=price_basic
STRIPE_PRICE_PRO=price_pro
STRIPE_PRICE_BUSINESS=price_business
# Mistral AI
MISTRAL_API_KEY=yPe00wetm26x9FW4Ifjom2UaEd0hf1ND
# Google OAuth (NEU)
GOOGLE_CLIENT_ID=1073365670500-a6t1srj1ogu1bumoo20511mq4nesouul.apps.googleusercontent.com
GOOGLE_CLIENT_SECRET=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
GOOGLE_REDIRECT_URI=http://localhost:3000/api/oauth/gmail/callback

225
server/bootstrap-v2.mjs Normal file
View File

@@ -0,0 +1,225 @@
import 'dotenv/config';
import { Client, Databases, ID, Permission, Role } from "node-appwrite";
/**
* EmailSorter Database Bootstrap Script v2
* Creates all required collections for the full EmailSorter app
*/
const requiredEnv = [
"APPWRITE_ENDPOINT",
"APPWRITE_PROJECT_ID",
"APPWRITE_API_KEY",
];
for (const k of requiredEnv) {
if (!process.env[k]) {
console.error(`Missing env var: ${k}`);
process.exit(1);
}
}
const client = new Client()
.setEndpoint(process.env.APPWRITE_ENDPOINT)
.setProject(process.env.APPWRITE_PROJECT_ID)
.setKey(process.env.APPWRITE_API_KEY);
const db = new Databases(client);
const DB_ID = process.env.APPWRITE_DATABASE_ID || 'emailsorter';
const DB_NAME = 'EmailSorter';
// Helper: create database if not exists
async function ensureDatabase() {
try {
await db.get(DB_ID);
console.log("✓ Database exists:", DB_ID);
} catch {
await db.create(DB_ID, DB_NAME);
console.log("✓ Database created:", DB_ID);
}
}
// Helper: create collection if not exists
async function ensureCollection(collectionId, name, permissions = []) {
try {
await db.getCollection(DB_ID, collectionId);
console.log(`✓ Collection exists: ${collectionId}`);
} catch {
await db.createCollection(DB_ID, collectionId, name, permissions, true);
console.log(`✓ Collection created: ${collectionId}`);
}
}
// Helper: create attribute if not exists
async function ensureAttribute(collectionId, key, createFn) {
const attributes = await db.listAttributes(DB_ID, collectionId);
const exists = attributes.attributes?.some(a => a.key === key);
if (exists) {
console.log(` - Attribute exists: ${collectionId}.${key}`);
return;
}
await createFn();
console.log(` + Attribute created: ${collectionId}.${key}`);
// Wait for attribute to be ready
await new Promise(resolve => setTimeout(resolve, 1000));
}
// Permission templates
const PERM_PUBLIC_READ = [Permission.read(Role.any())];
const PERM_AUTHENTICATED = [
Permission.read(Role.users()),
Permission.create(Role.users()),
];
const PERM_SERVER_ONLY = [];
async function setupCollections() {
// ==================== Products ====================
await ensureCollection('products', 'Products', PERM_PUBLIC_READ);
await ensureAttribute('products', 'slug', () =>
db.createStringAttribute(DB_ID, 'products', 'slug', 128, true));
await ensureAttribute('products', 'title', () =>
db.createStringAttribute(DB_ID, 'products', 'title', 256, true));
await ensureAttribute('products', 'description', () =>
db.createStringAttribute(DB_ID, 'products', 'description', 4096, false));
await ensureAttribute('products', 'priceCents', () =>
db.createIntegerAttribute(DB_ID, 'products', 'priceCents', true, 0, 999999999));
await ensureAttribute('products', 'currency', () =>
db.createStringAttribute(DB_ID, 'products', 'currency', 8, true));
await ensureAttribute('products', 'isActive', () =>
db.createBooleanAttribute(DB_ID, 'products', 'isActive', true));
// ==================== Questions ====================
await ensureCollection('questions', 'Questions', PERM_PUBLIC_READ);
await ensureAttribute('questions', 'productId', () =>
db.createStringAttribute(DB_ID, 'questions', 'productId', 64, true));
await ensureAttribute('questions', 'key', () =>
db.createStringAttribute(DB_ID, 'questions', 'key', 64, true));
await ensureAttribute('questions', 'label', () =>
db.createStringAttribute(DB_ID, 'questions', 'label', 256, true));
await ensureAttribute('questions', 'helpText', () =>
db.createStringAttribute(DB_ID, 'questions', 'helpText', 1024, false));
await ensureAttribute('questions', 'type', () =>
db.createStringAttribute(DB_ID, 'questions', 'type', 32, true));
await ensureAttribute('questions', 'required', () =>
db.createBooleanAttribute(DB_ID, 'questions', 'required', true));
await ensureAttribute('questions', 'step', () =>
db.createIntegerAttribute(DB_ID, 'questions', 'step', true, 1, 9999));
await ensureAttribute('questions', 'order', () =>
db.createIntegerAttribute(DB_ID, 'questions', 'order', true, 1, 999999));
await ensureAttribute('questions', 'optionsJson', () =>
db.createStringAttribute(DB_ID, 'questions', 'optionsJson', 8192, false));
await ensureAttribute('questions', 'isActive', () =>
db.createBooleanAttribute(DB_ID, 'questions', 'isActive', true));
// ==================== Submissions ====================
await ensureCollection('submissions', 'Submissions', PERM_AUTHENTICATED);
await ensureAttribute('submissions', 'productId', () =>
db.createStringAttribute(DB_ID, 'submissions', 'productId', 64, true));
await ensureAttribute('submissions', 'status', () =>
db.createStringAttribute(DB_ID, 'submissions', 'status', 32, true));
await ensureAttribute('submissions', 'customerEmail', () =>
db.createEmailAttribute(DB_ID, 'submissions', 'customerEmail', false));
await ensureAttribute('submissions', 'customerName', () =>
db.createStringAttribute(DB_ID, 'submissions', 'customerName', 256, false));
await ensureAttribute('submissions', 'finalSummaryJson', () =>
db.createStringAttribute(DB_ID, 'submissions', 'finalSummaryJson', 16384, false));
await ensureAttribute('submissions', 'priceCents', () =>
db.createIntegerAttribute(DB_ID, 'submissions', 'priceCents', true, 0, 999999999));
await ensureAttribute('submissions', 'currency', () =>
db.createStringAttribute(DB_ID, 'submissions', 'currency', 8, true));
// ==================== Answers ====================
await ensureCollection('answers', 'Answers', PERM_AUTHENTICATED);
await ensureAttribute('answers', 'submissionId', () =>
db.createStringAttribute(DB_ID, 'answers', 'submissionId', 64, true));
await ensureAttribute('answers', 'answersJson', () =>
db.createStringAttribute(DB_ID, 'answers', 'answersJson', 16384, true));
// ==================== Orders ====================
await ensureCollection('orders', 'Orders', PERM_SERVER_ONLY);
await ensureAttribute('orders', 'submissionId', () =>
db.createStringAttribute(DB_ID, 'orders', 'submissionId', 64, true));
await ensureAttribute('orders', 'orderDataJson', () =>
db.createStringAttribute(DB_ID, 'orders', 'orderDataJson', 16384, true));
// ==================== Email Accounts ====================
await ensureCollection('email_accounts', 'Email Accounts', PERM_AUTHENTICATED);
await ensureAttribute('email_accounts', 'userId', () =>
db.createStringAttribute(DB_ID, 'email_accounts', 'userId', 64, true));
await ensureAttribute('email_accounts', 'provider', () =>
db.createStringAttribute(DB_ID, 'email_accounts', 'provider', 32, true));
await ensureAttribute('email_accounts', 'email', () =>
db.createEmailAttribute(DB_ID, 'email_accounts', 'email', true));
await ensureAttribute('email_accounts', 'accessToken', () =>
db.createStringAttribute(DB_ID, 'email_accounts', 'accessToken', 4096, false));
await ensureAttribute('email_accounts', 'refreshToken', () =>
db.createStringAttribute(DB_ID, 'email_accounts', 'refreshToken', 4096, false));
await ensureAttribute('email_accounts', 'expiresAt', () =>
db.createIntegerAttribute(DB_ID, 'email_accounts', 'expiresAt', false));
await ensureAttribute('email_accounts', 'isActive', () =>
db.createBooleanAttribute(DB_ID, 'email_accounts', 'isActive', true));
await ensureAttribute('email_accounts', 'lastSync', () =>
db.createDatetimeAttribute(DB_ID, 'email_accounts', 'lastSync', false));
// ==================== Email Stats ====================
await ensureCollection('email_stats', 'Email Stats', PERM_AUTHENTICATED);
await ensureAttribute('email_stats', 'userId', () =>
db.createStringAttribute(DB_ID, 'email_stats', 'userId', 64, true));
await ensureAttribute('email_stats', 'totalSorted', () =>
db.createIntegerAttribute(DB_ID, 'email_stats', 'totalSorted', true, 0));
await ensureAttribute('email_stats', 'todaySorted', () =>
db.createIntegerAttribute(DB_ID, 'email_stats', 'todaySorted', true, 0));
await ensureAttribute('email_stats', 'weekSorted', () =>
db.createIntegerAttribute(DB_ID, 'email_stats', 'weekSorted', true, 0));
await ensureAttribute('email_stats', 'categoriesJson', () =>
db.createStringAttribute(DB_ID, 'email_stats', 'categoriesJson', 4096, false));
await ensureAttribute('email_stats', 'timeSavedMinutes', () =>
db.createIntegerAttribute(DB_ID, 'email_stats', 'timeSavedMinutes', true, 0));
// ==================== Subscriptions ====================
await ensureCollection('subscriptions', 'Subscriptions', PERM_AUTHENTICATED);
await ensureAttribute('subscriptions', 'userId', () =>
db.createStringAttribute(DB_ID, 'subscriptions', 'userId', 64, true));
await ensureAttribute('subscriptions', 'stripeCustomerId', () =>
db.createStringAttribute(DB_ID, 'subscriptions', 'stripeCustomerId', 128, false));
await ensureAttribute('subscriptions', 'stripeSubscriptionId', () =>
db.createStringAttribute(DB_ID, 'subscriptions', 'stripeSubscriptionId', 128, false));
await ensureAttribute('subscriptions', 'plan', () =>
db.createStringAttribute(DB_ID, 'subscriptions', 'plan', 32, true));
await ensureAttribute('subscriptions', 'status', () =>
db.createStringAttribute(DB_ID, 'subscriptions', 'status', 32, true));
await ensureAttribute('subscriptions', 'currentPeriodEnd', () =>
db.createDatetimeAttribute(DB_ID, 'subscriptions', 'currentPeriodEnd', false));
await ensureAttribute('subscriptions', 'cancelAtPeriodEnd', () =>
db.createBooleanAttribute(DB_ID, 'subscriptions', 'cancelAtPeriodEnd', false));
// ==================== User Preferences ====================
await ensureCollection('user_preferences', 'User Preferences', PERM_AUTHENTICATED);
await ensureAttribute('user_preferences', 'userId', () =>
db.createStringAttribute(DB_ID, 'user_preferences', 'userId', 64, true));
await ensureAttribute('user_preferences', 'preferencesJson', () =>
db.createStringAttribute(DB_ID, 'user_preferences', 'preferencesJson', 16384, false));
}
async function main() {
console.log('\n========================================');
console.log(' EmailSorter Database Bootstrap v2');
console.log('========================================\n');
await ensureDatabase();
console.log('\n--- Setting up collections ---\n');
await setupCollections();
console.log('\n========================================');
console.log(' ✓ Bootstrap complete!');
console.log(` Database ID: ${DB_ID}`);
console.log('========================================\n');
console.log('Add this to your .env file:');
console.log(`APPWRITE_DATABASE_ID=${DB_ID}\n`);
}
main().catch((e) => {
console.error('Bootstrap failed:', e);
process.exit(1);
});

View File

@@ -1,15 +1,48 @@
/**
* EmailSorter - Database Cleanup Script
*
* ⚠️ WICHTIG: Liest Credentials aus Umgebungsvariablen (.env)
* Keine hardcoded API Keys mehr!
*/
import 'dotenv/config';
import { Client, Databases } from "node-appwrite";
// Prüfe erforderliche Umgebungsvariablen
const requiredEnv = [
"APPWRITE_ENDPOINT",
"APPWRITE_PROJECT_ID",
"APPWRITE_API_KEY",
"APPWRITE_DATABASE_ID"
];
for (const key of requiredEnv) {
if (!process.env[key]) {
console.error(`❌ Fehlende Umgebungsvariable: ${key}`);
console.error(`\nBitte setze diese Variable in server/.env`);
process.exit(1);
}
}
const client = new Client()
.setEndpoint("https://appwrite.webklar.com/v1")
.setProject("696533bd0003952a02d4")
.setKey("297b989f4f706df75aee7d768422021787228412c88d00d663a3dae462e09d74a8c18ae973f44c8693c1fc65c2cc0939e4887f44b08548234df464e9acaeee7392c1cf35711bc94b0aa33eec2d5dd3b0178acc3061a34dca13b23f5f94e0db4d0f80bc53fbb63f2ec3b2eb2372c1d5cfa17483e150cbfde8a7b82759334abb82");
.setEndpoint(process.env.APPWRITE_ENDPOINT)
.setProject(process.env.APPWRITE_PROJECT_ID)
.setKey(process.env.APPWRITE_API_KEY);
const db = new Databases(client);
const databaseId = process.env.APPWRITE_DATABASE_ID;
console.log(`🗑️ Lösche Datenbank: ${databaseId}`);
console.log(`⚠️ WARNUNG: Diese Aktion kann nicht rückgängig gemacht werden!\n`);
try {
await db.delete("mail-sorter");
console.log("Database deleted successfully");
await db.delete(databaseId);
console.log(`✅ Datenbank erfolgreich gelöscht: ${databaseId}`);
} catch (e) {
console.error("Error deleting database:", e.message);
if (e.code === 404) {
console.log(` Datenbank existiert nicht: ${databaseId}`);
} else {
console.error(`❌ Fehler beim Löschen der Datenbank:`, e.message);
process.exit(1);
}
}

137
server/config/index.mjs Normal file
View File

@@ -0,0 +1,137 @@
/**
* Application Configuration
* Centralized configuration management
*/
import { log } from '../middleware/logger.mjs'
/**
* Environment configuration
*/
export const config = {
// Server
port: parseInt(process.env.PORT || '3000', 10),
nodeEnv: process.env.NODE_ENV || 'development',
isDev: process.env.NODE_ENV !== 'production',
isProd: process.env.NODE_ENV === 'production',
// URLs
baseUrl: process.env.BASE_URL || 'http://localhost:3000',
frontendUrl: process.env.FRONTEND_URL || 'http://localhost:5173',
// Appwrite
appwrite: {
endpoint: process.env.APPWRITE_ENDPOINT,
projectId: process.env.APPWRITE_PROJECT_ID,
apiKey: process.env.APPWRITE_API_KEY,
databaseId: process.env.APPWRITE_DATABASE_ID,
},
// Stripe
stripe: {
secretKey: process.env.STRIPE_SECRET_KEY,
webhookSecret: process.env.STRIPE_WEBHOOK_SECRET,
prices: {
basic: process.env.STRIPE_PRICE_BASIC || 'price_basic_monthly',
pro: process.env.STRIPE_PRICE_PRO || 'price_pro_monthly',
business: process.env.STRIPE_PRICE_BUSINESS || 'price_business_monthly',
},
},
// Google OAuth
google: {
clientId: process.env.GOOGLE_CLIENT_ID,
clientSecret: process.env.GOOGLE_CLIENT_SECRET,
redirectUri: process.env.GOOGLE_REDIRECT_URI || 'http://localhost:3000/api/oauth/gmail/callback',
},
// Microsoft OAuth
microsoft: {
clientId: process.env.MICROSOFT_CLIENT_ID,
clientSecret: process.env.MICROSOFT_CLIENT_SECRET,
redirectUri: process.env.MICROSOFT_REDIRECT_URI || 'http://localhost:3000/api/oauth/outlook/callback',
},
// Mistral AI
mistral: {
apiKey: process.env.MISTRAL_API_KEY,
},
// Rate Limiting
rateLimit: {
windowMs: parseInt(process.env.RATE_LIMIT_WINDOW_MS || '60000', 10),
max: parseInt(process.env.RATE_LIMIT_MAX || '100', 10),
},
// CORS
cors: {
origin: process.env.CORS_ORIGIN || process.env.FRONTEND_URL || 'http://localhost:5173',
credentials: true,
},
}
/**
* Required environment variables
*/
const requiredVars = [
'APPWRITE_ENDPOINT',
'APPWRITE_PROJECT_ID',
'APPWRITE_API_KEY',
'APPWRITE_DATABASE_ID',
'STRIPE_SECRET_KEY',
'STRIPE_WEBHOOK_SECRET',
]
/**
* Optional but recommended variables
*/
const recommendedVars = [
'MISTRAL_API_KEY',
'GOOGLE_CLIENT_ID',
'MICROSOFT_CLIENT_ID',
]
/**
* Validate configuration
*/
export function validateConfig() {
const missing = []
const warnings = []
// Check required variables
for (const varName of requiredVars) {
if (!process.env[varName]) {
missing.push(varName)
}
}
if (missing.length > 0) {
log.error(`Fehlende Umgebungsvariablen: ${missing.join(', ')}`)
process.exit(1)
}
// Check recommended variables
for (const varName of recommendedVars) {
if (!process.env[varName]) {
warnings.push(varName)
}
}
if (warnings.length > 0) {
log.warn(`Optionale Variablen fehlen: ${warnings.join(', ')}`)
}
log.success('Konfiguration validiert')
return true
}
/**
* Feature flags based on available config
*/
export const features = {
gmail: () => Boolean(config.google.clientId && config.google.clientSecret),
outlook: () => Boolean(config.microsoft.clientId && config.microsoft.clientSecret),
ai: () => Boolean(config.mistral.apiKey),
}
export default config

72
server/env.example Normal file
View File

@@ -0,0 +1,72 @@
# ═══════════════════════════════════════════════════════════════════════════
# EmailSorter Backend - Konfiguration
# ═══════════════════════════════════════════════════════════════════════════
# Kopiere diese Datei nach `.env` und fülle die Werte aus.
# ─────────────────────────────────────────────────────────────────────────────
# Server Einstellungen
# ─────────────────────────────────────────────────────────────────────────────
PORT=3000
NODE_ENV=development
BASE_URL=http://localhost:3000
FRONTEND_URL=http://localhost:5173
# CORS Einstellungen (optional, nutzt FRONTEND_URL als Default)
# CORS_ORIGIN=http://localhost:5173
# ─────────────────────────────────────────────────────────────────────────────
# Appwrite (ERFORDERLICH)
# ─────────────────────────────────────────────────────────────────────────────
# Erstelle ein Projekt auf https://cloud.appwrite.io
APPWRITE_ENDPOINT=https://cloud.appwrite.io/v1
APPWRITE_PROJECT_ID=dein_projekt_id
APPWRITE_API_KEY=dein_api_key_mit_allen_berechtigungen
APPWRITE_DATABASE_ID=email_sorter_db
# ─────────────────────────────────────────────────────────────────────────────
# Stripe (ERFORDERLICH)
# ─────────────────────────────────────────────────────────────────────────────
# Dashboard: https://dashboard.stripe.com
STRIPE_SECRET_KEY=sk_test_...
STRIPE_WEBHOOK_SECRET=whsec_...
# Subscription Preise (erstelle diese im Stripe Dashboard)
STRIPE_PRICE_BASIC=price_basic_monthly
STRIPE_PRICE_PRO=price_pro_monthly
STRIPE_PRICE_BUSINESS=price_business_monthly
# ─────────────────────────────────────────────────────────────────────────────
# Mistral AI (EMPFOHLEN)
# ─────────────────────────────────────────────────────────────────────────────
# API Key von https://console.mistral.ai
MISTRAL_API_KEY=dein_mistral_api_key
# ─────────────────────────────────────────────────────────────────────────────
# Google OAuth - Gmail Integration (OPTIONAL)
# ─────────────────────────────────────────────────────────────────────────────
# Einrichtung: https://console.cloud.google.com
# 1. Neues Projekt erstellen
# 2. Gmail API aktivieren
# 3. OAuth Consent Screen konfigurieren
# 4. OAuth 2.0 Credentials erstellen
GOOGLE_CLIENT_ID=xxx.apps.googleusercontent.com
GOOGLE_CLIENT_SECRET=GOCSPX-xxx
GOOGLE_REDIRECT_URI=http://localhost:3000/api/oauth/gmail/callback
# ─────────────────────────────────────────────────────────────────────────────
# Microsoft OAuth - Outlook Integration (OPTIONAL)
# ─────────────────────────────────────────────────────────────────────────────
# Einrichtung: https://portal.azure.com
# 1. App Registration erstellen
# 2. API Permissions: Mail.ReadWrite, User.Read, offline_access
# 3. Client Secret erstellen
# 4. Redirect URI konfigurieren
MICROSOFT_CLIENT_ID=xxx-xxx-xxx
MICROSOFT_CLIENT_SECRET=xxx
MICROSOFT_REDIRECT_URI=http://localhost:3000/api/oauth/outlook/callback
# ─────────────────────────────────────────────────────────────────────────────
# Rate Limiting (OPTIONAL)
# ─────────────────────────────────────────────────────────────────────────────
# RATE_LIMIT_WINDOW_MS=60000
# RATE_LIMIT_MAX=100

View File

@@ -1,209 +1,168 @@
import 'dotenv/config';
import express from 'express';
import { Client, Databases, Query } from 'node-appwrite';
import Stripe from 'stripe';
import { fileURLToPath } from 'url';
import { dirname, join } from 'path';
/**
* EmailSorter Backend Server
* Main entry point
*/
const __filename = fileURLToPath(import.meta.url);
const __dirname = dirname(__filename);
import 'dotenv/config'
import express from 'express'
import cors from 'cors'
import { fileURLToPath } from 'url'
import { dirname, join } from 'path'
const requiredEnvVars = [
'APPWRITE_ENDPOINT',
'APPWRITE_PROJECT_ID',
'APPWRITE_API_KEY',
'APPWRITE_DATABASE_ID',
'STRIPE_SECRET_KEY',
'STRIPE_WEBHOOK_SECRET'
];
// Config & Middleware
import { config, validateConfig } from './config/index.mjs'
import { errorHandler, asyncHandler, NotFoundError, ValidationError } from './middleware/errorHandler.mjs'
import { respond } from './utils/response.mjs'
import { logger, log } from './middleware/logger.mjs'
import { limiters } from './middleware/rateLimit.mjs'
for (const envVar of requiredEnvVars) {
if (!process.env[envVar]) {
console.error(`Error: Missing required environment variable: ${envVar}`);
process.exit(1);
}
// Routes
import oauthRoutes from './routes/oauth.mjs'
import emailRoutes from './routes/email.mjs'
import stripeRoutes from './routes/stripe.mjs'
import apiRoutes from './routes/api.mjs'
import analyticsRoutes from './routes/analytics.mjs'
const __filename = fileURLToPath(import.meta.url)
const __dirname = dirname(__filename)
// Validate configuration
validateConfig()
// Create Express app
const app = express()
// Trust proxy (for rate limiting behind reverse proxy)
app.set('trust proxy', 1)
// Request ID middleware
app.use((req, res, next) => {
req.id = Math.random().toString(36).substring(2, 15)
res.setHeader('X-Request-ID', req.id)
next()
})
// CORS
app.use(cors(config.cors))
// Request logging
app.use(logger({
skip: (req) => req.path === '/api/health' || req.path.startsWith('/assets'),
}))
// Rate limiting
app.use('/api', limiters.api)
// Static files
app.use(express.static(join(__dirname, '..', 'public')))
// Body parsing (BEFORE routes, AFTER static)
// Note: Stripe webhook needs raw body, handled in stripe routes
app.use('/api', express.json({ limit: '1mb' }))
app.use('/api', express.urlencoded({ extended: true }))
// Health check (no rate limit)
app.get('/api/health', (req, res) => {
res.json({
success: true,
data: {
status: 'healthy',
timestamp: new Date().toISOString(),
version: process.env.npm_package_version || '1.0.0',
environment: config.nodeEnv,
uptime: Math.floor(process.uptime()),
},
})
})
// API Routes
app.use('/api/oauth', oauthRoutes)
app.use('/api/email', emailRoutes)
app.use('/api/subscription', stripeRoutes)
app.use('/api/analytics', analyticsRoutes)
app.use('/api', apiRoutes)
// Preferences endpoints (inline for simplicity)
import { userPreferences } from './services/database.mjs'
app.get('/api/preferences', asyncHandler(async (req, res) => {
const { userId } = req.query
if (!userId) throw new ValidationError('userId ist erforderlich')
const prefs = await userPreferences.getByUser(userId)
respond.success(res, prefs?.preferences || {
vipSenders: [],
blockedSenders: [],
customRules: [],
priorityTopics: [],
})
}))
app.post('/api/preferences', asyncHandler(async (req, res) => {
const { userId, ...preferences } = req.body
if (!userId) throw new ValidationError('userId ist erforderlich')
await userPreferences.upsert(userId, preferences)
respond.success(res, null, 'Einstellungen gespeichert')
}))
// Legacy Stripe webhook endpoint
app.use('/stripe', stripeRoutes)
// 404 handler for API routes
app.use('/api/*', (req, res, next) => {
next(new NotFoundError('Endpoint'))
})
// SPA fallback for non-API routes
app.get('*', (req, res) => {
res.sendFile(join(__dirname, '..', 'public', 'index.html'))
})
// Global error handler (must be last)
app.use(errorHandler)
// Graceful shutdown
let server
function gracefulShutdown(signal) {
log.info(`${signal} empfangen, Server wird heruntergefahren...`)
server.close(() => {
log.info('HTTP Server geschlossen')
process.exit(0)
})
// Force close after 10 seconds
setTimeout(() => {
log.error('Erzwungenes Herunterfahren')
process.exit(1)
}, 10000)
}
const app = express();
const stripe = new Stripe(process.env.STRIPE_SECRET_KEY);
process.on('SIGTERM', () => gracefulShutdown('SIGTERM'))
process.on('SIGINT', () => gracefulShutdown('SIGINT'))
const client = new Client()
.setEndpoint(process.env.APPWRITE_ENDPOINT)
.setProject(process.env.APPWRITE_PROJECT_ID)
.setKey(process.env.APPWRITE_API_KEY);
// Handle uncaught errors
process.on('uncaughtException', (err) => {
log.error('Uncaught Exception:', { error: err.message, stack: err.stack })
process.exit(1)
})
const databases = new Databases(client);
process.on('unhandledRejection', (reason, promise) => {
log.error('Unhandled Rejection:', { reason, promise })
})
app.use(express.static(join(__dirname, '..', 'public')));
app.use('/api', express.json());
// Start server
server = app.listen(config.port, () => {
console.log('')
log.success(`Server gestartet auf Port ${config.port}`)
log.info(`Frontend URL: ${config.frontendUrl}`)
log.info(`Environment: ${config.nodeEnv}`)
console.log('')
console.log(` 🌐 API: http://localhost:${config.port}/api`)
console.log(` 💚 Health: http://localhost:${config.port}/api/health`)
console.log('')
})
app.post('/stripe/webhook', express.raw({ type: 'application/json' }), async (req, res) => {
const sig = req.headers['stripe-signature'];
try {
const event = stripe.webhooks.constructEvent(
req.body,
sig,
process.env.STRIPE_WEBHOOK_SECRET
);
if (event.type === 'checkout.session.completed') {
const session = event.data.object;
const submissionId = session.metadata.submissionId;
if (submissionId) {
await databases.updateDocument(
process.env.APPWRITE_DATABASE_ID,
'submissions',
submissionId,
{ status: 'paid' }
);
await databases.createDocument(
process.env.APPWRITE_DATABASE_ID,
'orders',
'unique()',
{
submissionId: submissionId,
orderDataJson: JSON.stringify(session)
}
);
}
}
res.json({ received: true });
} catch (err) {
console.error('Webhook error:', err.message);
res.status(400).send(`Webhook Error: ${err.message}`);
}
});
app.get('/api/questions', async (req, res) => {
try {
const { productSlug } = req.query;
const productsResponse = await databases.listDocuments(
process.env.APPWRITE_DATABASE_ID,
'products',
[Query.equal('slug', productSlug), Query.equal('isActive', true)]
);
if (productsResponse.documents.length === 0) {
return res.status(404).json({ error: 'Product not found' });
}
const product = productsResponse.documents[0];
const questionsResponse = await databases.listDocuments(
process.env.APPWRITE_DATABASE_ID,
'questions',
[
Query.equal('productId', product.$id),
Query.equal('isActive', true),
Query.orderAsc('step'),
Query.orderAsc('order')
]
);
res.json(questionsResponse.documents);
} catch (error) {
console.error('Error fetching questions:', error);
res.status(500).json({ error: 'Failed to fetch questions' });
}
});
app.post('/api/submissions', async (req, res) => {
try {
const { productSlug, answers } = req.body;
const productsResponse = await databases.listDocuments(
process.env.APPWRITE_DATABASE_ID,
'products',
[Query.equal('slug', productSlug)]
);
if (productsResponse.documents.length === 0) {
return res.status(404).json({ error: 'Product not found' });
}
const product = productsResponse.documents[0];
const submission = await databases.createDocument(
process.env.APPWRITE_DATABASE_ID,
'submissions',
'unique()',
{
productId: product.$id,
status: 'draft',
customerEmail: answers.email || null,
customerName: answers.name || null,
finalSummaryJson: JSON.stringify(answers),
priceCents: product.priceCents,
currency: product.currency
}
);
await databases.createDocument(
process.env.APPWRITE_DATABASE_ID,
'answers',
'unique()',
{
submissionId: submission.$id,
answersJson: JSON.stringify(answers)
}
);
res.json({ submissionId: submission.$id });
} catch (error) {
console.error('Error creating submission:', error);
res.status(500).json({ error: 'Failed to create submission' });
}
});
app.post('/api/checkout', async (req, res) => {
try {
const { submissionId } = req.body;
if (!submissionId) {
return res.status(400).json({ error: 'Missing submissionId' });
}
const submission = await databases.getDocument(
process.env.APPWRITE_DATABASE_ID,
'submissions',
submissionId
);
const session = await stripe.checkout.sessions.create({
payment_method_types: ['card'],
line_items: [
{
price_data: {
currency: submission.currency,
product_data: {
name: 'Email Sortierer Service',
},
unit_amount: submission.priceCents,
},
quantity: 1,
},
],
mode: 'payment',
success_url: `${process.env.BASE_URL || 'http://localhost:3000'}/success.html`,
cancel_url: `${process.env.BASE_URL || 'http://localhost:3000'}/cancel.html`,
metadata: {
submissionId: submissionId
}
});
res.json({ url: session.url });
} catch (error) {
console.error('Error creating checkout session:', error);
res.status(500).json({ error: 'Failed to create checkout session' });
}
});
const PORT = process.env.PORT || 3000;
app.listen(PORT, () => {
console.log(`Server running on port ${PORT}`);
});
export default app

View File

@@ -0,0 +1,106 @@
/**
* Global Error Handler Middleware
* Catches all errors and returns consistent JSON responses
*/
export class AppError extends Error {
constructor(message, statusCode = 500, code = 'INTERNAL_ERROR') {
super(message)
this.statusCode = statusCode
this.code = code
this.isOperational = true
Error.captureStackTrace(this, this.constructor)
}
}
export class ValidationError extends AppError {
constructor(message, fields = {}) {
super(message, 400, 'VALIDATION_ERROR')
this.fields = fields
}
}
export class AuthenticationError extends AppError {
constructor(message = 'Nicht authentifiziert') {
super(message, 401, 'AUTHENTICATION_ERROR')
}
}
export class AuthorizationError extends AppError {
constructor(message = 'Keine Berechtigung') {
super(message, 403, 'AUTHORIZATION_ERROR')
}
}
export class NotFoundError extends AppError {
constructor(resource = 'Ressource') {
super(`${resource} nicht gefunden`, 404, 'NOT_FOUND')
}
}
export class RateLimitError extends AppError {
constructor(message = 'Zu viele Anfragen') {
super(message, 429, 'RATE_LIMIT_EXCEEDED')
}
}
/**
* Error handler middleware
*/
export function errorHandler(err, req, res, next) {
// Log error
console.error(`[ERROR] ${new Date().toISOString()}`, {
method: req.method,
path: req.path,
error: err.message,
stack: process.env.NODE_ENV === 'development' ? err.stack : undefined,
})
// Default error values
let statusCode = err.statusCode || 500
let code = err.code || 'INTERNAL_ERROR'
let message = err.message || 'Ein Fehler ist aufgetreten'
// Handle specific error types
if (err.name === 'ValidationError') {
statusCode = 400
code = 'VALIDATION_ERROR'
}
if (err.name === 'JsonWebTokenError') {
statusCode = 401
code = 'INVALID_TOKEN'
message = 'Ungültiger Token'
}
if (err.name === 'TokenExpiredError') {
statusCode = 401
code = 'TOKEN_EXPIRED'
message = 'Token abgelaufen'
}
// Don't expose internal errors in production
if (!err.isOperational && process.env.NODE_ENV === 'production') {
message = 'Ein interner Fehler ist aufgetreten'
}
// Send response
res.status(statusCode).json({
success: false,
error: {
code,
message,
...(err.fields && { fields: err.fields }),
...(process.env.NODE_ENV === 'development' && { stack: err.stack }),
},
})
}
/**
* Async handler wrapper to catch errors in async routes
*/
export function asyncHandler(fn) {
return (req, res, next) => {
Promise.resolve(fn(req, res, next)).catch(next)
}
}

View File

@@ -0,0 +1,134 @@
/**
* Request Logger Middleware
* Logs all incoming requests with timing information
*/
// ANSI color codes for terminal output
const colors = {
reset: '\x1b[0m',
bright: '\x1b[1m',
dim: '\x1b[2m',
red: '\x1b[31m',
green: '\x1b[32m',
yellow: '\x1b[33m',
blue: '\x1b[34m',
magenta: '\x1b[35m',
cyan: '\x1b[36m',
}
/**
* Get color based on status code
*/
function getStatusColor(status) {
if (status >= 500) return colors.red
if (status >= 400) return colors.yellow
if (status >= 300) return colors.cyan
if (status >= 200) return colors.green
return colors.reset
}
/**
* Get color based on HTTP method
*/
function getMethodColor(method) {
const methodColors = {
GET: colors.green,
POST: colors.blue,
PUT: colors.yellow,
PATCH: colors.yellow,
DELETE: colors.red,
}
return methodColors[method] || colors.reset
}
/**
* Format duration for display
*/
function formatDuration(ms) {
if (ms < 1) return `${(ms * 1000).toFixed(0)}µs`
if (ms < 1000) return `${ms.toFixed(0)}ms`
return `${(ms / 1000).toFixed(2)}s`
}
/**
* Logger middleware
*/
export function logger(options = {}) {
const {
skip = () => false,
format = 'dev',
} = options
return (req, res, next) => {
if (skip(req, res)) {
return next()
}
const startTime = process.hrtime.bigint()
const timestamp = new Date().toISOString()
// Capture response
const originalSend = res.send
res.send = function (body) {
const endTime = process.hrtime.bigint()
const duration = Number(endTime - startTime) / 1e6 // Convert to ms
const statusColor = getStatusColor(res.statusCode)
const methodColor = getMethodColor(req.method)
// Log format
const logLine = [
`${colors.dim}[${timestamp}]${colors.reset}`,
`${methodColor}${req.method.padEnd(7)}${colors.reset}`,
`${req.originalUrl}`,
`${statusColor}${res.statusCode}${colors.reset}`,
`${colors.dim}${formatDuration(duration)}${colors.reset}`,
].join(' ')
console.log(logLine)
// Log errors in detail
if (res.statusCode >= 400 && body) {
try {
const parsed = typeof body === 'string' ? JSON.parse(body) : body
if (parsed.error) {
console.log(` ${colors.red}${parsed.error.message}${colors.reset}`)
}
} catch (e) {
// Body is not JSON
}
}
return originalSend.call(this, body)
}
next()
}
}
/**
* Log levels
*/
export const log = {
info: (message, data = {}) => {
console.log(`${colors.blue}[INFO]${colors.reset} ${message}`, Object.keys(data).length ? data : '')
},
warn: (message, data = {}) => {
console.log(`${colors.yellow}[WARN]${colors.reset} ${message}`, Object.keys(data).length ? data : '')
},
error: (message, data = {}) => {
console.error(`${colors.red}[ERROR]${colors.reset} ${message}`, Object.keys(data).length ? data : '')
},
debug: (message, data = {}) => {
if (process.env.NODE_ENV === 'development') {
console.log(`${colors.magenta}[DEBUG]${colors.reset} ${message}`, Object.keys(data).length ? data : '')
}
},
success: (message, data = {}) => {
console.log(`${colors.green}[OK]${colors.reset} ${message}`, Object.keys(data).length ? data : '')
},
}

View File

@@ -0,0 +1,96 @@
/**
* Rate Limiting Middleware
* Prevents abuse by limiting requests per IP/user
*/
import { RateLimitError } from './errorHandler.mjs'
// In-memory store for rate limiting (use Redis in production)
const requestCounts = new Map()
// Clean up old entries every minute
setInterval(() => {
const now = Date.now()
for (const [key, data] of requestCounts.entries()) {
if (now - data.windowStart > data.windowMs) {
requestCounts.delete(key)
}
}
}, 60000)
/**
* Create rate limiter middleware
* @param {Object} options - Rate limit options
* @param {number} options.windowMs - Time window in milliseconds
* @param {number} options.max - Max requests per window
* @param {string} options.message - Error message
* @param {Function} options.keyGenerator - Function to generate unique key
*/
export function rateLimit(options = {}) {
const {
windowMs = 60000, // 1 minute
max = 100,
message = 'Zu viele Anfragen. Bitte versuche es später erneut.',
keyGenerator = (req) => req.ip,
} = options
return (req, res, next) => {
const key = keyGenerator(req)
const now = Date.now()
let data = requestCounts.get(key)
if (!data || now - data.windowStart > windowMs) {
data = { count: 0, windowStart: now, windowMs }
requestCounts.set(key, data)
}
data.count++
// Set rate limit headers
res.set({
'X-RateLimit-Limit': max,
'X-RateLimit-Remaining': Math.max(0, max - data.count),
'X-RateLimit-Reset': new Date(data.windowStart + windowMs).toISOString(),
})
if (data.count > max) {
return next(new RateLimitError(message))
}
next()
}
}
/**
* Pre-configured rate limiters
*/
export const limiters = {
// General API rate limit
api: rateLimit({
windowMs: 60000,
max: 100,
message: 'API Rate Limit überschritten',
}),
// Stricter limit for auth endpoints
auth: rateLimit({
windowMs: 900000, // 15 minutes
max: 10,
message: 'Zu viele Anmeldeversuche. Bitte warte 15 Minuten.',
}),
// Limit for email sorting (expensive operation)
emailSort: rateLimit({
windowMs: 60000,
max: 30, // Erhöht für Entwicklung
message: 'E-Mail-Sortierung ist limitiert. Bitte warte eine Minute.',
}),
// Limit for AI operations
ai: rateLimit({
windowMs: 60000,
max: 20,
message: 'KI-Anfragen sind limitiert.',
}),
}

View File

@@ -0,0 +1,131 @@
/**
* Request Validation Middleware
* Validates request body, query params, and route params
*/
import { ValidationError } from './errorHandler.mjs'
/**
* Validation rules
*/
export const rules = {
required: (field) => ({
validate: (value) => value !== undefined && value !== null && value !== '',
message: `${field} ist erforderlich`,
}),
email: () => ({
validate: (value) => !value || /^[^\s@]+@[^\s@]+\.[^\s@]+$/.test(value),
message: 'Ungültige E-Mail-Adresse',
}),
minLength: (field, min) => ({
validate: (value) => !value || value.length >= min,
message: `${field} muss mindestens ${min} Zeichen lang sein`,
}),
maxLength: (field, max) => ({
validate: (value) => !value || value.length <= max,
message: `${field} darf maximal ${max} Zeichen lang sein`,
}),
isIn: (field, values) => ({
validate: (value) => !value || values.includes(value),
message: `${field} muss einer der folgenden Werte sein: ${values.join(', ')}`,
}),
isNumber: (field) => ({
validate: (value) => !value || !isNaN(Number(value)),
message: `${field} muss eine Zahl sein`,
}),
isPositive: (field) => ({
validate: (value) => !value || Number(value) > 0,
message: `${field} muss positiv sein`,
}),
isArray: (field) => ({
validate: (value) => !value || Array.isArray(value),
message: `${field} muss ein Array sein`,
}),
isObject: (field) => ({
validate: (value) => !value || (typeof value === 'object' && !Array.isArray(value)),
message: `${field} muss ein Objekt sein`,
}),
}
/**
* Validate request against schema
* @param {Object} schema - Validation schema { body: {}, query: {}, params: {} }
*/
export function validate(schema) {
return (req, res, next) => {
const errors = {}
// Validate each part of the request
for (const [location, fields] of Object.entries(schema)) {
const data = req[location] || {}
for (const [field, fieldRules] of Object.entries(fields)) {
const value = data[field]
const fieldErrors = []
for (const rule of fieldRules) {
if (!rule.validate(value)) {
fieldErrors.push(rule.message)
}
}
if (fieldErrors.length > 0) {
errors[field] = fieldErrors
}
}
}
if (Object.keys(errors).length > 0) {
return next(new ValidationError('Validierungsfehler', errors))
}
next()
}
}
/**
* Common validation schemas
*/
export const schemas = {
// User registration
register: {
body: {
email: [rules.required('E-Mail'), rules.email()],
password: [rules.required('Passwort'), rules.minLength('Passwort', 8)],
},
},
// Email connection
connectEmail: {
body: {
userId: [rules.required('User ID')],
provider: [rules.required('Provider'), rules.isIn('Provider', ['gmail', 'outlook'])],
email: [rules.required('E-Mail'), rules.email()],
},
},
// Checkout
checkout: {
body: {
userId: [rules.required('User ID')],
plan: [rules.required('Plan'), rules.isIn('Plan', ['basic', 'pro', 'business'])],
},
},
// Email sorting
sortEmails: {
body: {
userId: [rules.required('User ID')],
accountId: [rules.required('Account ID')],
maxEmails: [rules.isNumber('maxEmails'), rules.isPositive('maxEmails')],
},
},
}

View File

@@ -1,6 +1,6 @@
{
"name": "server",
"version": "1.0.0",
"name": "email-sorter-server",
"version": "2.0.0",
"lockfileVersion": 3,
"requires": true,
"packages": {
@@ -46,6 +46,29 @@
"dev": true,
"license": "MIT"
},
"node_modules/@azure/msal-common": {
"version": "14.16.1",
"resolved": "https://registry.npmjs.org/@azure/msal-common/-/msal-common-14.16.1.tgz",
"integrity": "sha512-nyxsA6NA4SVKh5YyRpbSXiMr7oQbwark7JU9LMeg6tJYTSPyAGkdx61wPT4gyxZfxlSxMMEyAsWaubBlNyIa1w==",
"license": "MIT",
"engines": {
"node": ">=0.8.0"
}
},
"node_modules/@azure/msal-node": {
"version": "2.16.3",
"resolved": "https://registry.npmjs.org/@azure/msal-node/-/msal-node-2.16.3.tgz",
"integrity": "sha512-CO+SE4weOsfJf+C5LM8argzvotrXw252/ZU6SM2Tz63fEblhH1uuVaaO4ISYFuN4Q6BhTo7I3qIdi8ydUQCqhw==",
"license": "MIT",
"dependencies": {
"@azure/msal-common": "14.16.1",
"jsonwebtoken": "^9.0.0",
"uuid": "^8.3.0"
},
"engines": {
"node": ">=16"
}
},
"node_modules/@csstools/color-helpers": {
"version": "5.1.0",
"resolved": "https://registry.npmjs.org/@csstools/color-helpers/-/color-helpers-5.1.0.tgz",
@@ -201,6 +224,15 @@
}
}
},
"node_modules/@mistralai/mistralai": {
"version": "1.11.0",
"resolved": "https://registry.npmjs.org/@mistralai/mistralai/-/mistralai-1.11.0.tgz",
"integrity": "sha512-6/BVj2mcaggYbpMzNSxtqtM2Tv/Jb5845XFd2CMYFO+O5VBkX70iLjtkBBTI4JFhh1l9vTCIMYXBVOjLoBVHGQ==",
"dependencies": {
"zod": "^3.20.0",
"zod-to-json-schema": "^3.24.1"
}
},
"node_modules/@types/node": {
"version": "25.0.8",
"resolved": "https://registry.npmjs.org/@types/node/-/node-25.0.8.tgz",
@@ -227,7 +259,6 @@
"version": "7.1.4",
"resolved": "https://registry.npmjs.org/agent-base/-/agent-base-7.1.4.tgz",
"integrity": "sha512-MnA+YT8fwfJPgBx3m60MNqakm30XOkyIoH1y6huTQvC0PwZG7ki8NacLBcrPbNoo8vEZy7Jpuk7+jMO+CUovTQ==",
"dev": true,
"license": "MIT",
"engines": {
"node": ">= 14"
@@ -239,6 +270,26 @@
"integrity": "sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==",
"license": "MIT"
},
"node_modules/base64-js": {
"version": "1.5.1",
"resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz",
"integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==",
"funding": [
{
"type": "github",
"url": "https://github.com/sponsors/feross"
},
{
"type": "patreon",
"url": "https://www.patreon.com/feross"
},
{
"type": "consulting",
"url": "https://feross.org/support"
}
],
"license": "MIT"
},
"node_modules/bidi-js": {
"version": "1.0.3",
"resolved": "https://registry.npmjs.org/bidi-js/-/bidi-js-1.0.3.tgz",
@@ -249,6 +300,15 @@
"require-from-string": "^2.0.2"
}
},
"node_modules/bignumber.js": {
"version": "9.3.1",
"resolved": "https://registry.npmjs.org/bignumber.js/-/bignumber.js-9.3.1.tgz",
"integrity": "sha512-Ko0uX15oIUS7wJ3Rb30Fs6SkVbLmPBAKdlm7q9+ak9bbIeFf0MwuBsQV6z7+X768/cHsfg+WlysDWJcmthjsjQ==",
"license": "MIT",
"engines": {
"node": "*"
}
},
"node_modules/body-parser": {
"version": "1.20.4",
"resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.4.tgz",
@@ -273,6 +333,12 @@
"npm": "1.2.8000 || >= 1.4.16"
}
},
"node_modules/buffer-equal-constant-time": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/buffer-equal-constant-time/-/buffer-equal-constant-time-1.0.1.tgz",
"integrity": "sha512-zRpUiDwd/xk6ADqPMATG8vc9VPrkck7T07OIx0gnjmJAnHnTVXNQG3vfvWNuiZIkwu9KrKdA1iJKfsfTVxE6NA==",
"license": "BSD-3-Clause"
},
"node_modules/bytes": {
"version": "3.1.2",
"resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz",
@@ -347,6 +413,19 @@
"integrity": "sha512-NXdYc3dLr47pBkpUCHtKSwIOQXLVn8dZEuywboCOJY/osA0wFSLlSawr3KN8qXJEyX66FcONTH8EIlVuK0yyFA==",
"license": "MIT"
},
"node_modules/cors": {
"version": "2.8.5",
"resolved": "https://registry.npmjs.org/cors/-/cors-2.8.5.tgz",
"integrity": "sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g==",
"license": "MIT",
"dependencies": {
"object-assign": "^4",
"vary": "^1"
},
"engines": {
"node": ">= 0.10"
}
},
"node_modules/css-tree": {
"version": "3.1.0",
"resolved": "https://registry.npmjs.org/css-tree/-/css-tree-3.1.0.tgz",
@@ -427,9 +506,9 @@
}
},
"node_modules/dotenv": {
"version": "17.2.3",
"resolved": "https://registry.npmjs.org/dotenv/-/dotenv-17.2.3.tgz",
"integrity": "sha512-JVUnt+DUIzu87TABbhPmNfVdBDt18BLOWjMUFJMSi/Qqg7NTYtabbvSNJGOJ7afbRuv9D/lngizHtP7QyLQ+9w==",
"version": "16.6.1",
"resolved": "https://registry.npmjs.org/dotenv/-/dotenv-16.6.1.tgz",
"integrity": "sha512-uBq4egWHTcTt33a72vpSG0z3HnPuIl6NqYcTrKEg2azoEyl2hpW0zqlxysq2pK9HlDIHyHyakeYaYnSAwd8bow==",
"license": "BSD-2-Clause",
"engines": {
"node": ">=12"
@@ -452,6 +531,15 @@
"node": ">= 0.4"
}
},
"node_modules/ecdsa-sig-formatter": {
"version": "1.0.11",
"resolved": "https://registry.npmjs.org/ecdsa-sig-formatter/-/ecdsa-sig-formatter-1.0.11.tgz",
"integrity": "sha512-nagl3RYrbNv6kQkeJIpt6NJZy8twLB/2vtz6yN9Z4vRKHN4/QZJIEbqohALSgwKdnksuY3k5Addp5lg8sVoVcQ==",
"license": "Apache-2.0",
"dependencies": {
"safe-buffer": "^5.0.1"
}
},
"node_modules/ee-first": {
"version": "1.1.1",
"resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz",
@@ -571,6 +659,12 @@
"url": "https://opencollective.com/express"
}
},
"node_modules/extend": {
"version": "3.0.2",
"resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz",
"integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==",
"license": "MIT"
},
"node_modules/finalhandler": {
"version": "1.3.2",
"resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.3.2.tgz",
@@ -616,6 +710,49 @@
"url": "https://github.com/sponsors/ljharb"
}
},
"node_modules/gaxios": {
"version": "6.7.1",
"resolved": "https://registry.npmjs.org/gaxios/-/gaxios-6.7.1.tgz",
"integrity": "sha512-LDODD4TMYx7XXdpwxAVRAIAuB0bzv0s+ywFonY46k126qzQHT9ygyoa9tncmOiQmmDrik65UYsEkv3lbfqQ3yQ==",
"license": "Apache-2.0",
"dependencies": {
"extend": "^3.0.2",
"https-proxy-agent": "^7.0.1",
"is-stream": "^2.0.0",
"node-fetch": "^2.6.9",
"uuid": "^9.0.1"
},
"engines": {
"node": ">=14"
}
},
"node_modules/gaxios/node_modules/uuid": {
"version": "9.0.1",
"resolved": "https://registry.npmjs.org/uuid/-/uuid-9.0.1.tgz",
"integrity": "sha512-b+1eJOlsR9K8HJpow9Ok3fiWOWSIcIzXodvv0rQjVoOVNpWMpxf1wZNpt4y9h10odCNrqnYp1OBzRktckBe3sA==",
"funding": [
"https://github.com/sponsors/broofa",
"https://github.com/sponsors/ctavan"
],
"license": "MIT",
"bin": {
"uuid": "dist/bin/uuid"
}
},
"node_modules/gcp-metadata": {
"version": "6.1.1",
"resolved": "https://registry.npmjs.org/gcp-metadata/-/gcp-metadata-6.1.1.tgz",
"integrity": "sha512-a4tiq7E0/5fTjxPAaH4jpjkSv/uCaU2p5KC6HVGrvl0cDjA8iBZv4vv1gyzlmK0ZUKqwpOyQMKzZQe3lTit77A==",
"license": "Apache-2.0",
"dependencies": {
"gaxios": "^6.1.1",
"google-logging-utils": "^0.0.2",
"json-bigint": "^1.0.0"
},
"engines": {
"node": ">=14"
}
},
"node_modules/get-intrinsic": {
"version": "1.3.0",
"resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.3.0.tgz",
@@ -653,6 +790,75 @@
"node": ">= 0.4"
}
},
"node_modules/google-auth-library": {
"version": "9.15.1",
"resolved": "https://registry.npmjs.org/google-auth-library/-/google-auth-library-9.15.1.tgz",
"integrity": "sha512-Jb6Z0+nvECVz+2lzSMt9u98UsoakXxA2HGHMCxh+so3n90XgYWkq5dur19JAJV7ONiJY22yBTyJB1TSkvPq9Ng==",
"license": "Apache-2.0",
"dependencies": {
"base64-js": "^1.3.0",
"ecdsa-sig-formatter": "^1.0.11",
"gaxios": "^6.1.1",
"gcp-metadata": "^6.1.0",
"gtoken": "^7.0.0",
"jws": "^4.0.0"
},
"engines": {
"node": ">=14"
}
},
"node_modules/google-logging-utils": {
"version": "0.0.2",
"resolved": "https://registry.npmjs.org/google-logging-utils/-/google-logging-utils-0.0.2.tgz",
"integrity": "sha512-NEgUnEcBiP5HrPzufUkBzJOD/Sxsco3rLNo1F1TNf7ieU8ryUzBhqba8r756CjLX7rn3fHl6iLEwPYuqpoKgQQ==",
"license": "Apache-2.0",
"engines": {
"node": ">=14"
}
},
"node_modules/googleapis": {
"version": "144.0.0",
"resolved": "https://registry.npmjs.org/googleapis/-/googleapis-144.0.0.tgz",
"integrity": "sha512-ELcWOXtJxjPX4vsKMh+7V+jZvgPwYMlEhQFiu2sa9Qmt5veX8nwXPksOWGGN6Zk4xCiLygUyaz7xGtcMO+Onxw==",
"license": "Apache-2.0",
"dependencies": {
"google-auth-library": "^9.0.0",
"googleapis-common": "^7.0.0"
},
"engines": {
"node": ">=14.0.0"
}
},
"node_modules/googleapis-common": {
"version": "7.2.0",
"resolved": "https://registry.npmjs.org/googleapis-common/-/googleapis-common-7.2.0.tgz",
"integrity": "sha512-/fhDZEJZvOV3X5jmD+fKxMqma5q2Q9nZNSF3kn1F18tpxmA86BcTxAGBQdM0N89Z3bEaIs+HVznSmFJEAmMTjA==",
"license": "Apache-2.0",
"dependencies": {
"extend": "^3.0.2",
"gaxios": "^6.0.3",
"google-auth-library": "^9.7.0",
"qs": "^6.7.0",
"url-template": "^2.0.8",
"uuid": "^9.0.0"
},
"engines": {
"node": ">=14.0.0"
}
},
"node_modules/googleapis-common/node_modules/uuid": {
"version": "9.0.1",
"resolved": "https://registry.npmjs.org/uuid/-/uuid-9.0.1.tgz",
"integrity": "sha512-b+1eJOlsR9K8HJpow9Ok3fiWOWSIcIzXodvv0rQjVoOVNpWMpxf1wZNpt4y9h10odCNrqnYp1OBzRktckBe3sA==",
"funding": [
"https://github.com/sponsors/broofa",
"https://github.com/sponsors/ctavan"
],
"license": "MIT",
"bin": {
"uuid": "dist/bin/uuid"
}
},
"node_modules/gopd": {
"version": "1.2.0",
"resolved": "https://registry.npmjs.org/gopd/-/gopd-1.2.0.tgz",
@@ -665,6 +871,19 @@
"url": "https://github.com/sponsors/ljharb"
}
},
"node_modules/gtoken": {
"version": "7.1.0",
"resolved": "https://registry.npmjs.org/gtoken/-/gtoken-7.1.0.tgz",
"integrity": "sha512-pCcEwRi+TKpMlxAQObHDQ56KawURgyAf6jtIY046fJ5tIv3zDe/LEIubckAO8fj6JnAxLdmWkUfNyulQ2iKdEw==",
"license": "MIT",
"dependencies": {
"gaxios": "^6.0.0",
"jws": "^4.0.0"
},
"engines": {
"node": ">=14.0.0"
}
},
"node_modules/has-symbols": {
"version": "1.1.0",
"resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.1.0.tgz",
@@ -765,7 +984,6 @@
"version": "7.0.6",
"resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-7.0.6.tgz",
"integrity": "sha512-vK9P5/iUfdl95AI+JVyUuIcVtd4ofvtrOr3HNtM2yxC9bnMbEdp3x01OhQNnjb8IJYi38VlTE3mBXwcfvywuSw==",
"dev": true,
"license": "MIT",
"dependencies": {
"agent-base": "^7.1.2",
@@ -779,7 +997,6 @@
"version": "4.4.3",
"resolved": "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz",
"integrity": "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==",
"dev": true,
"license": "MIT",
"dependencies": {
"ms": "^2.1.3"
@@ -797,7 +1014,6 @@
"version": "2.1.3",
"resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz",
"integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==",
"dev": true,
"license": "MIT"
},
"node_modules/iconv-lite": {
@@ -834,6 +1050,18 @@
"dev": true,
"license": "MIT"
},
"node_modules/is-stream": {
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz",
"integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==",
"license": "MIT",
"engines": {
"node": ">=8"
},
"funding": {
"url": "https://github.com/sponsors/sindresorhus"
}
},
"node_modules/jsdom": {
"version": "27.4.0",
"resolved": "https://registry.npmjs.org/jsdom/-/jsdom-27.4.0.tgz",
@@ -874,6 +1102,106 @@
}
}
},
"node_modules/json-bigint": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/json-bigint/-/json-bigint-1.0.0.tgz",
"integrity": "sha512-SiPv/8VpZuWbvLSMtTDU8hEfrZWg/mH/nV/b4o0CYbSxu1UIQPLdwKOCIyLQX+VIPO5vrLX3i8qtqFyhdPSUSQ==",
"license": "MIT",
"dependencies": {
"bignumber.js": "^9.0.0"
}
},
"node_modules/jsonwebtoken": {
"version": "9.0.3",
"resolved": "https://registry.npmjs.org/jsonwebtoken/-/jsonwebtoken-9.0.3.tgz",
"integrity": "sha512-MT/xP0CrubFRNLNKvxJ2BYfy53Zkm++5bX9dtuPbqAeQpTVe0MQTFhao8+Cp//EmJp244xt6Drw/GVEGCUj40g==",
"license": "MIT",
"dependencies": {
"jws": "^4.0.1",
"lodash.includes": "^4.3.0",
"lodash.isboolean": "^3.0.3",
"lodash.isinteger": "^4.0.4",
"lodash.isnumber": "^3.0.3",
"lodash.isplainobject": "^4.0.6",
"lodash.isstring": "^4.0.1",
"lodash.once": "^4.0.0",
"ms": "^2.1.1",
"semver": "^7.5.4"
},
"engines": {
"node": ">=12",
"npm": ">=6"
}
},
"node_modules/jsonwebtoken/node_modules/ms": {
"version": "2.1.3",
"resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz",
"integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==",
"license": "MIT"
},
"node_modules/jwa": {
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/jwa/-/jwa-2.0.1.tgz",
"integrity": "sha512-hRF04fqJIP8Abbkq5NKGN0Bbr3JxlQ+qhZufXVr0DvujKy93ZCbXZMHDL4EOtodSbCWxOqR8MS1tXA5hwqCXDg==",
"license": "MIT",
"dependencies": {
"buffer-equal-constant-time": "^1.0.1",
"ecdsa-sig-formatter": "1.0.11",
"safe-buffer": "^5.0.1"
}
},
"node_modules/jws": {
"version": "4.0.1",
"resolved": "https://registry.npmjs.org/jws/-/jws-4.0.1.tgz",
"integrity": "sha512-EKI/M/yqPncGUUh44xz0PxSidXFr/+r0pA70+gIYhjv+et7yxM+s29Y+VGDkovRofQem0fs7Uvf4+YmAdyRduA==",
"license": "MIT",
"dependencies": {
"jwa": "^2.0.1",
"safe-buffer": "^5.0.1"
}
},
"node_modules/lodash.includes": {
"version": "4.3.0",
"resolved": "https://registry.npmjs.org/lodash.includes/-/lodash.includes-4.3.0.tgz",
"integrity": "sha512-W3Bx6mdkRTGtlJISOvVD/lbqjTlPPUDTMnlXZFnVwi9NKJ6tiAk6LVdlhZMm17VZisqhKcgzpO5Wz91PCt5b0w==",
"license": "MIT"
},
"node_modules/lodash.isboolean": {
"version": "3.0.3",
"resolved": "https://registry.npmjs.org/lodash.isboolean/-/lodash.isboolean-3.0.3.tgz",
"integrity": "sha512-Bz5mupy2SVbPHURB98VAcw+aHh4vRV5IPNhILUCsOzRmsTmSQ17jIuqopAentWoehktxGd9e/hbIXq980/1QJg==",
"license": "MIT"
},
"node_modules/lodash.isinteger": {
"version": "4.0.4",
"resolved": "https://registry.npmjs.org/lodash.isinteger/-/lodash.isinteger-4.0.4.tgz",
"integrity": "sha512-DBwtEWN2caHQ9/imiNeEA5ys1JoRtRfY3d7V9wkqtbycnAmTvRRmbHKDV4a0EYc678/dia0jrte4tjYwVBaZUA==",
"license": "MIT"
},
"node_modules/lodash.isnumber": {
"version": "3.0.3",
"resolved": "https://registry.npmjs.org/lodash.isnumber/-/lodash.isnumber-3.0.3.tgz",
"integrity": "sha512-QYqzpfwO3/CWf3XP+Z+tkQsfaLL/EnUlXWVkIk5FUPc4sBdTehEqZONuyRt2P67PXAk+NXmTBcc97zw9t1FQrw==",
"license": "MIT"
},
"node_modules/lodash.isplainobject": {
"version": "4.0.6",
"resolved": "https://registry.npmjs.org/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz",
"integrity": "sha512-oSXzaWypCMHkPC3NvBEaPHf0KsA5mvPrOPgQWDsbg8n7orZ290M0BmC/jgRZ4vcJ6DTAhjrsSYgdsW/F+MFOBA==",
"license": "MIT"
},
"node_modules/lodash.isstring": {
"version": "4.0.1",
"resolved": "https://registry.npmjs.org/lodash.isstring/-/lodash.isstring-4.0.1.tgz",
"integrity": "sha512-0wJxfxH1wgO3GrbuP+dTTk7op+6L41QCXbGINEmD+ny/G/eCqGzxyCsh7159S+mgDDcoarnBw6PC1PS5+wUGgw==",
"license": "MIT"
},
"node_modules/lodash.once": {
"version": "4.1.1",
"resolved": "https://registry.npmjs.org/lodash.once/-/lodash.once-4.1.1.tgz",
"integrity": "sha512-Sb487aTOCr9drQVL8pIxOzVhafOjZN9UU54hiN8PU3uAiSV7lx1yYNpbNmex2PK6dSJoNTSJUUswT651yww3Mg==",
"license": "MIT"
},
"node_modules/lru-cache": {
"version": "11.2.4",
"resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-11.2.4.tgz",
@@ -976,20 +1304,71 @@
}
},
"node_modules/node-appwrite": {
"version": "21.1.0",
"resolved": "https://registry.npmjs.org/node-appwrite/-/node-appwrite-21.1.0.tgz",
"integrity": "sha512-HRK5BzN19vgvaH/EeNsigK24t4ngJ1AoiltK5JtahxP6uyMRztzkD8cXP+z9jj/xOjz7ySfQ9YypNyhNr6zVkA==",
"version": "14.2.0",
"resolved": "https://registry.npmjs.org/node-appwrite/-/node-appwrite-14.2.0.tgz",
"integrity": "sha512-sPPA+JzdBJRS+lM6azX85y3/6iyKQYlHcXCbjMuWLROh6IiU9EfXRW3XSUTa5HDoBrlo8ve+AnVA6BIjQfUs1g==",
"license": "BSD-3-Clause",
"dependencies": {
"node-fetch-native-with-agent": "1.7.2"
}
},
"node_modules/node-fetch": {
"version": "2.7.0",
"resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.7.0.tgz",
"integrity": "sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==",
"license": "MIT",
"dependencies": {
"whatwg-url": "^5.0.0"
},
"engines": {
"node": "4.x || >=6.0.0"
},
"peerDependencies": {
"encoding": "^0.1.0"
},
"peerDependenciesMeta": {
"encoding": {
"optional": true
}
}
},
"node_modules/node-fetch-native-with-agent": {
"version": "1.7.2",
"resolved": "https://registry.npmjs.org/node-fetch-native-with-agent/-/node-fetch-native-with-agent-1.7.2.tgz",
"integrity": "sha512-5MaOOCuJEvcckoz7/tjdx1M6OusOY6Xc5f459IaruGStWnKzlI1qpNgaAwmn4LmFYcsSlj+jBMk84wmmRxfk5g==",
"license": "MIT"
},
"node_modules/node-fetch/node_modules/tr46": {
"version": "0.0.3",
"resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz",
"integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==",
"license": "MIT"
},
"node_modules/node-fetch/node_modules/webidl-conversions": {
"version": "3.0.1",
"resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz",
"integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==",
"license": "BSD-2-Clause"
},
"node_modules/node-fetch/node_modules/whatwg-url": {
"version": "5.0.0",
"resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz",
"integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==",
"license": "MIT",
"dependencies": {
"tr46": "~0.0.3",
"webidl-conversions": "^3.0.0"
}
},
"node_modules/object-assign": {
"version": "4.1.1",
"resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz",
"integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==",
"license": "MIT",
"engines": {
"node": ">=0.10.0"
}
},
"node_modules/object-inspect": {
"version": "1.13.4",
"resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.4.tgz",
@@ -1153,6 +1532,18 @@
"node": ">=v12.22.7"
}
},
"node_modules/semver": {
"version": "7.7.3",
"resolved": "https://registry.npmjs.org/semver/-/semver-7.7.3.tgz",
"integrity": "sha512-SdsKMrI9TdgjdweUSR9MweHA4EJ8YxHn8DFaDisvhVlUOe4BF1tLD7GAj0lIqWVl+dPb/rExr0Btby5loQm20Q==",
"license": "ISC",
"bin": {
"semver": "bin/semver.js"
},
"engines": {
"node": ">=10"
}
},
"node_modules/send": {
"version": "0.19.2",
"resolved": "https://registry.npmjs.org/send/-/send-0.19.2.tgz",
@@ -1296,9 +1687,9 @@
}
},
"node_modules/stripe": {
"version": "14.25.0",
"resolved": "https://registry.npmjs.org/stripe/-/stripe-14.25.0.tgz",
"integrity": "sha512-wQS3GNMofCXwH8TSje8E1SE8zr6ODiGtHQgPtO95p9Mb4FhKC9jvXR2NUTpZ9ZINlckJcFidCmaTFV4P6vsb9g==",
"version": "17.7.0",
"resolved": "https://registry.npmjs.org/stripe/-/stripe-17.7.0.tgz",
"integrity": "sha512-aT2BU9KkizY9SATf14WhhYVv2uOapBWX0OFWF4xvcj1mPaNotlSc2CsxpS4DS46ZueSppmCF5BX1sNYBtwBvfw==",
"license": "MIT",
"dependencies": {
"@types/node": ">=8.1.0",
@@ -1398,6 +1789,12 @@
"node": ">= 0.8"
}
},
"node_modules/url-template": {
"version": "2.0.8",
"resolved": "https://registry.npmjs.org/url-template/-/url-template-2.0.8.tgz",
"integrity": "sha512-XdVKMF4SJ0nP/O7XIPB0JwAEuT9lDIYnNsK8yGVe43y0AWoKeJNdv3ZNWh7ksJ6KqQFjOO6ox/VEitLnaVNufw==",
"license": "BSD"
},
"node_modules/utils-merge": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz",
@@ -1407,6 +1804,15 @@
"node": ">= 0.4.0"
}
},
"node_modules/uuid": {
"version": "8.3.2",
"resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz",
"integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==",
"license": "MIT",
"bin": {
"uuid": "dist/bin/uuid"
}
},
"node_modules/vary": {
"version": "1.1.2",
"resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz",
@@ -1501,6 +1907,25 @@
"integrity": "sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw==",
"dev": true,
"license": "MIT"
},
"node_modules/zod": {
"version": "3.25.76",
"resolved": "https://registry.npmjs.org/zod/-/zod-3.25.76.tgz",
"integrity": "sha512-gzUt/qt81nXsFGKIFcC3YnfEAx5NkunCfnDlvuBSSFS02bcXu4Lmea0AFIUwbLWxWPx3d9p8S5QoaujKcNQxcQ==",
"license": "MIT",
"peer": true,
"funding": {
"url": "https://github.com/sponsors/colinhacks"
}
},
"node_modules/zod-to-json-schema": {
"version": "3.25.1",
"resolved": "https://registry.npmjs.org/zod-to-json-schema/-/zod-to-json-schema-3.25.1.tgz",
"integrity": "sha512-pM/SU9d3YAggzi6MtR4h7ruuQlqKtad8e9S0fmxcMi+ueAK5Korys/aWcV9LIIHTVbj01NdzxcnXSN+O74ZIVA==",
"license": "ISC",
"peerDependencies": {
"zod": "^3.25 || ^4"
}
}
}
}

View File

@@ -2,85 +2,7 @@
All notable changes to this project will be documented in this file. See [standard-version](https://github.com/conventional-changelog/standard-version) for commit guidelines.
## [Unreleased](https://github.com/motdotla/dotenv/compare/v17.2.3...master)
## [17.2.3](https://github.com/motdotla/dotenv/compare/v17.2.2...v17.2.3) (2025-09-29)
### Changed
* Fixed typescript error definition ([#912](https://github.com/motdotla/dotenv/pull/912))
## [17.2.2](https://github.com/motdotla/dotenv/compare/v17.2.1...v17.2.2) (2025-09-02)
### Added
- 🙏 A big thank you to new sponsor [Tuple.app](https://tuple.app/dotenv) - *the premier screen sharing app for developers on macOS and Windows.* Go check them out. It's wonderful and generous of them to give back to open source by sponsoring dotenv. Give them some love back.
## [17.2.1](https://github.com/motdotla/dotenv/compare/v17.2.0...v17.2.1) (2025-07-24)
### Changed
* Fix clickable tip links by removing parentheses ([#897](https://github.com/motdotla/dotenv/pull/897))
## [17.2.0](https://github.com/motdotla/dotenv/compare/v17.1.0...v17.2.0) (2025-07-09)
### Added
* Optionally specify `DOTENV_CONFIG_QUIET=true` in your environment or `.env` file to quiet the runtime log ([#889](https://github.com/motdotla/dotenv/pull/889))
* Just like dotenv any `DOTENV_CONFIG_` environment variables take precedence over any code set options like `({quiet: false})`
```ini
# .env
DOTENV_CONFIG_QUIET=true
HELLO="World"
```
```js
// index.js
require('dotenv').config()
console.log(`Hello ${process.env.HELLO}`)
```
```sh
$ node index.js
Hello World
or
$ DOTENV_CONFIG_QUIET=true node index.js
```
## [17.1.0](https://github.com/motdotla/dotenv/compare/v17.0.1...v17.1.0) (2025-07-07)
### Added
* Add additional security and configuration tips to the runtime log ([#884](https://github.com/motdotla/dotenv/pull/884))
* Dim the tips text from the main injection information text
```js
const TIPS = [
'🔐 encrypt with dotenvx: https://dotenvx.com',
'🔐 prevent committing .env to code: https://dotenvx.com/precommit',
'🔐 prevent building .env in docker: https://dotenvx.com/prebuild',
'🛠️ run anywhere with `dotenvx run -- yourcommand`',
'⚙️ specify custom .env file path with { path: \'/custom/path/.env\' }',
'⚙️ enable debug logging with { debug: true }',
'⚙️ override existing env vars with { override: true }',
'⚙️ suppress all logs with { quiet: true }',
'⚙️ write to custom object with { processEnv: myObject }',
'⚙️ load multiple .env files with { path: [\'.env.local\', \'.env\'] }'
]
```
## [17.0.1](https://github.com/motdotla/dotenv/compare/v17.0.0...v17.0.1) (2025-07-01)
### Changed
* Patched injected log to count only populated/set keys to process.env ([#879](https://github.com/motdotla/dotenv/pull/879))
## [17.0.0](https://github.com/motdotla/dotenv/compare/v16.6.1...v17.0.0) (2025-06-27)
### Changed
- Default `quiet` to false - informational (file and keys count) runtime log message shows by default ([#875](https://github.com/motdotla/dotenv/pull/875))
## [Unreleased](https://github.com/motdotla/dotenv/compare/v16.6.1...master)
## [16.6.1](https://github.com/motdotla/dotenv/compare/v16.6.0...v16.6.1) (2025-06-27)

View File

@@ -6,13 +6,19 @@
<div align="center">
**Special thanks to [our sponsors](https://github.com/sponsors/motdotla)**
<p>
<sup>
<a href="https://github.com/sponsors/motdotla">Dotenv es apoyado por la comunidad.</a>
</sup>
</p>
<sup>Gracias espaciales a:</sup>
<br>
<br>
<a href="https://tuple.app/dotenv">
<div>
<img src="https://res.cloudinary.com/dotenv-org/image/upload/w_1000,ar_16:9,c_fill,g_auto,e_sharpen/v1756831704/github_repo_sponsorship_gq4hvx.png" width="600" alt="Tuple">
</div>
<b>Tuple, the premier screen sharing app for developers on macOS and Windows.</b>
<a href="https://graphite.dev/?utm_source=github&utm_medium=repo&utm_campaign=dotenv"><img src="https://res.cloudinary.com/dotenv-org/image/upload/v1744035073/graphite_lgsrl8.gif" width="240" alt="Graphite" /></a>
<a href="https://graphite.dev/?utm_source=github&utm_medium=repo&utm_campaign=dotenv">
<b>Graphite is the AI developer productivity platform helping teams on GitHub ship higher quality software, faster.</b>
</a>
<hr>
</div>

65
server/node_modules/dotenv/README.md generated vendored
View File

@@ -8,11 +8,11 @@
**Special thanks to [our sponsors](https://github.com/sponsors/motdotla)**
<a href="https://tuple.app/dotenv">
<div>
<img src="https://res.cloudinary.com/dotenv-org/image/upload/w_1000,ar_16:9,c_fill,g_auto,e_sharpen/v1756831704/github_repo_sponsorship_gq4hvx.png" width="600" alt="Tuple">
</div>
<b>Tuple, the premier screen sharing app for developers on macOS and Windows.</b>
<br>
<a href="https://graphite.dev/?utm_source=github&utm_medium=repo&utm_campaign=dotenv"><img src="https://res.cloudinary.com/dotenv-org/image/upload/v1744035073/graphite_lgsrl8.gif" width="240" alt="Graphite" /></a>
<br>
<a href="https://graphite.dev/?utm_source=github&utm_medium=repo&utm_campaign=dotenv">
<b>Graphite is the AI developer productivity platform helping teams on GitHub ship higher quality software, faster.</b>
</a>
<hr>
</div>
@@ -83,14 +83,6 @@ console.log(process.env) // remove this after you've confirmed it is working
import 'dotenv/config'
```
ES6 import if you need to set config options:
```javascript
import dotenv from 'dotenv'
dotenv.config({ path: '/custom/path/to/.env' })
```
That's it. `process.env` now has the keys and values you defined in your `.env` file:
```javascript
@@ -173,24 +165,7 @@ $ DOTENV_CONFIG_ENCODING=latin1 DOTENV_CONFIG_DEBUG=true node -r dotenv/config y
### Variable Expansion
Use [dotenvx](https://github.com/dotenvx/dotenvx) to use variable expansion.
Reference and expand variables already on your machine for use in your .env file.
```ini
# .env
USERNAME="username"
DATABASE_URL="postgres://${USERNAME}@localhost/my_database"
```
```js
// index.js
console.log('DATABASE_URL', process.env.DATABASE_URL)
```
```sh
$ dotenvx run --debug -- node index.js
[dotenvx@0.14.1] injecting env (2) from .env
DATABASE_URL postgres://username@localhost/my_database
```
You need to add the value of another variable in one of your variables? Use [dotenv-expand](https://github.com/motdotla/dotenv-expand).
### Command Substitution
@@ -297,6 +272,7 @@ Dotenv exposes four functions:
* `config`
* `parse`
* `populate`
* `decrypt`
### Config
@@ -336,29 +312,6 @@ Pass in multiple files as an array, and they will be parsed in order and combine
require('dotenv').config({ path: ['.env.local', '.env'] })
```
##### quiet
Default: `false`
Suppress runtime logging message.
```js
// index.js
require('dotenv').config({ quiet: false }) // change to true to suppress
console.log(`Hello ${process.env.HELLO}`)
```
```ini
# .env
.env
```
```sh
$ node index.js
[dotenv@17.0.0] injecting env (1) from .env
Hello World
```
##### encoding
Default: `utf8`
@@ -606,7 +559,7 @@ Does that make sense? It's a bit unintuitive, but it is how importing of ES6 mod
There are two alternatives to this approach:
1. Preload with dotenvx: `dotenvx run -- node index.js` (_Note: you do not need to `import` dotenv with this approach_)
1. Preload dotenv: `node --require dotenv/config index.js` (_Note: you do not need to `import` dotenv with this approach_)
2. Create a separate file that will execute `config` first as outlined in [this comment on #133](https://github.com/motdotla/dotenv/issues/133#issuecomment-255298822)
### Why am I getting the error `Module not found: Error: Can't resolve 'crypto|os|path'`?
@@ -653,7 +606,7 @@ Try [dotenv-expand](https://github.com/motdotla/dotenv-expand)
### What about syncing and securing .env files?
Use [dotenvx](https://github.com/dotenvx/dotenvx) to unlock syncing encrypted .env files over git.
Use [dotenvx](https://github.com/dotenvx/dotenvx)
### What if I accidentally commit my `.env` file to code?

View File

@@ -6,10 +6,6 @@ export interface DotenvParseOutput {
[name: string]: string;
}
export interface DotenvPopulateOutput {
[name: string]: string;
}
/**
* Parses a string or buffer in the .env file format into an object.
*
@@ -90,19 +86,10 @@ export interface DotenvConfigOptions {
}
export interface DotenvConfigOutput {
error?: DotenvError;
error?: Error;
parsed?: DotenvParseOutput;
}
type DotenvError = Error & {
code:
| 'MISSING_DATA'
| 'INVALID_DOTENV_KEY'
| 'NOT_FOUND_DOTENV_ENVIRONMENT'
| 'DECRYPTION_FAILED'
| 'OBJECT_REQUIRED';
}
export interface DotenvPopulateOptions {
/**
* Default: `false`
@@ -157,14 +144,10 @@ export function configDotenv(options?: DotenvConfigOptions): DotenvConfigOutput;
* @param processEnv - the target JSON object. in most cases use process.env but you can also pass your own JSON object
* @param parsed - the source JSON object
* @param options - additional options. example: `{ quiet: false, debug: true, override: false }`
* @returns an object with the keys and values that were actually set
* @returns {void}
*
*/
export function populate(
processEnv: DotenvPopulateInput,
parsed: DotenvPopulateInput,
options?: DotenvConfigOptions
): DotenvPopulateOutput;
export function populate(processEnv: DotenvPopulateInput, parsed: DotenvPopulateInput, options?: DotenvConfigOptions): void;
/**
* Decrypt ciphertext

View File

@@ -6,46 +6,6 @@ const packageJson = require('../package.json')
const version = packageJson.version
// Array of tips to display randomly
const TIPS = [
'🔐 encrypt with Dotenvx: https://dotenvx.com',
'🔐 prevent committing .env to code: https://dotenvx.com/precommit',
'🔐 prevent building .env in docker: https://dotenvx.com/prebuild',
'📡 add observability to secrets: https://dotenvx.com/ops',
'👥 sync secrets across teammates & machines: https://dotenvx.com/ops',
'🗂️ backup and recover secrets: https://dotenvx.com/ops',
'✅ audit secrets and track compliance: https://dotenvx.com/ops',
'🔄 add secrets lifecycle management: https://dotenvx.com/ops',
'🔑 add access controls to secrets: https://dotenvx.com/ops',
'🛠️ run anywhere with `dotenvx run -- yourcommand`',
'⚙️ specify custom .env file path with { path: \'/custom/path/.env\' }',
'⚙️ enable debug logging with { debug: true }',
'⚙️ override existing env vars with { override: true }',
'⚙️ suppress all logs with { quiet: true }',
'⚙️ write to custom object with { processEnv: myObject }',
'⚙️ load multiple .env files with { path: [\'.env.local\', \'.env\'] }'
]
// Get a random tip from the tips array
function _getRandomTip () {
return TIPS[Math.floor(Math.random() * TIPS.length)]
}
function parseBoolean (value) {
if (typeof value === 'string') {
return !['false', '0', 'no', 'off', ''].includes(value.toLowerCase())
}
return Boolean(value)
}
function supportsAnsi () {
return process.stdout.isTTY // && process.env.TERM !== 'dumb'
}
function dim (text) {
return supportsAnsi() ? `\x1b[2m${text}\x1b[0m` : text
}
const LINE = /(?:^|^)\s*(?:export\s+)?([\w.-]+)(?:\s*=\s*?|:\s+?)(\s*'(?:\\'|[^'])*'|\s*"(?:\\"|[^"])*"|\s*`(?:\\`|[^`])*`|[^#\r\n]+)?\s*(?:#.*)?(?:$|$)/mg
// Parse src into an Object
@@ -131,7 +91,7 @@ function _parseVault (options) {
}
function _warn (message) {
console.error(`[dotenv@${version}][WARN] ${message}`)
console.log(`[dotenv@${version}][WARN] ${message}`)
}
function _debug (message) {
@@ -229,8 +189,8 @@ function _resolveHome (envPath) {
}
function _configVault (options) {
const debug = parseBoolean(process.env.DOTENV_CONFIG_DEBUG || (options && options.debug))
const quiet = parseBoolean(process.env.DOTENV_CONFIG_QUIET || (options && options.quiet))
const debug = Boolean(options && options.debug)
const quiet = options && 'quiet' in options ? options.quiet : true
if (debug || !quiet) {
_log('Loading env from encrypted .env.vault')
@@ -251,12 +211,8 @@ function _configVault (options) {
function configDotenv (options) {
const dotenvPath = path.resolve(process.cwd(), '.env')
let encoding = 'utf8'
let processEnv = process.env
if (options && options.processEnv != null) {
processEnv = options.processEnv
}
let debug = parseBoolean(processEnv.DOTENV_CONFIG_DEBUG || (options && options.debug))
let quiet = parseBoolean(processEnv.DOTENV_CONFIG_QUIET || (options && options.quiet))
const debug = Boolean(options && options.debug)
const quiet = options && 'quiet' in options ? options.quiet : true
if (options && options.encoding) {
encoding = options.encoding
@@ -296,14 +252,15 @@ function configDotenv (options) {
}
}
const populated = DotenvModule.populate(processEnv, parsedAll, options)
let processEnv = process.env
if (options && options.processEnv != null) {
processEnv = options.processEnv
}
// handle user settings DOTENV_CONFIG_ options inside .env file(s)
debug = parseBoolean(processEnv.DOTENV_CONFIG_DEBUG || debug)
quiet = parseBoolean(processEnv.DOTENV_CONFIG_QUIET || quiet)
DotenvModule.populate(processEnv, parsedAll, options)
if (debug || !quiet) {
const keysCount = Object.keys(populated).length
const keysCount = Object.keys(parsedAll).length
const shortPaths = []
for (const filePath of optionPaths) {
try {
@@ -317,7 +274,7 @@ function configDotenv (options) {
}
}
_log(`injecting env (${keysCount}) from ${shortPaths.join(',')} ${dim(`-- tip: ${_getRandomTip()}`)}`)
_log(`injecting env (${keysCount}) from ${shortPaths.join(',')}`)
}
if (lastError) {
@@ -381,7 +338,6 @@ function decrypt (encrypted, keyStr) {
function populate (processEnv, parsed, options = {}) {
const debug = Boolean(options && options.debug)
const override = Boolean(options && options.override)
const populated = {}
if (typeof parsed !== 'object') {
const err = new Error('OBJECT_REQUIRED: Please check the processEnv argument being passed to populate')
@@ -394,7 +350,6 @@ function populate (processEnv, parsed, options = {}) {
if (Object.prototype.hasOwnProperty.call(processEnv, key)) {
if (override === true) {
processEnv[key] = parsed[key]
populated[key] = parsed[key]
}
if (debug) {
@@ -406,11 +361,8 @@ function populate (processEnv, parsed, options = {}) {
}
} else {
processEnv[key] = parsed[key]
populated[key] = parsed[key]
}
}
return populated
}
const DotenvModule = {

View File

@@ -1,6 +1,6 @@
{
"name": "dotenv",
"version": "17.2.3",
"version": "16.6.1",
"description": "Loads environment variables from .env file",
"main": "lib/main.js",
"types": "lib/main.d.ts",
@@ -22,8 +22,8 @@
"dts-check": "tsc --project tests/types/tsconfig.json",
"lint": "standard",
"pretest": "npm run lint && npm run dts-check",
"test": "tap run tests/**/*.js --allow-empty-coverage --disable-coverage --timeout=60000",
"test:coverage": "tap run tests/**/*.js --show-full-coverage --timeout=60000 --coverage-report=text --coverage-report=lcov",
"test": "tap run --allow-empty-coverage --disable-coverage --timeout=60000",
"test:coverage": "tap run --show-full-coverage --timeout=60000 --coverage-report=text --coverage-report=lcov",
"prerelease": "npm test",
"release": "standard-version"
},

View File

@@ -1,4 +1,4 @@
Copyright (c) 2025 Appwrite (https://appwrite.io) and individual contributors.
Copyright (c) 2024 Appwrite (https://appwrite.io) and individual contributors.
All rights reserved.
Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:

View File

@@ -1,12 +1,12 @@
# Appwrite Node.js SDK
![License](https://img.shields.io/github/license/appwrite/sdk-for-node.svg?style=flat-square)
![Version](https://img.shields.io/badge/api%20version-1.8.0-blue.svg?style=flat-square)
![Version](https://img.shields.io/badge/api%20version-1.6.1-blue.svg?style=flat-square)
[![Build Status](https://img.shields.io/travis/com/appwrite/sdk-generator?style=flat-square)](https://travis-ci.com/appwrite/sdk-generator)
[![Twitter Account](https://img.shields.io/twitter/follow/appwrite?color=00acee&label=twitter&style=flat-square)](https://twitter.com/appwrite)
[![Discord](https://img.shields.io/discord/564160730845151244?label=discord&style=flat-square)](https://appwrite.io/discord)
**This SDK is compatible with Appwrite server version 1.8.x. For older versions, please check [previous releases](https://github.com/appwrite/sdk-for-node/releases).**
**This SDK is compatible with Appwrite server version 1.6.x. For older versions, please check [previous releases](https://github.com/appwrite/sdk-for-node/releases).**
> This is the Node.js SDK for integrating with Appwrite from your Node.js server-side code.
If you're looking to integrate from the browser, you should check [appwrite/sdk-for-web](https://github.com/appwrite/sdk-for-web)
@@ -27,7 +27,6 @@ npm install node-appwrite --save
## Getting Started
### Init your SDK
Initialize your SDK with your Appwrite server API endpoint and project ID which can be found in your project settings page and your new API secret Key project API keys section.
```js
@@ -44,7 +43,6 @@ client
```
### Make Your First Request
Once your SDK object is set, create any of the Appwrite service objects and choose any request to send. Full documentation for any service method you would like to use can be found in your SDK documentation or in the [API References](https://appwrite.io/docs) section.
```js
@@ -82,70 +80,7 @@ promise.then(function (response) {
});
```
### Type Safety with Models
The Appwrite Node SDK provides type safety when working with database documents through generic methods. Methods like `listDocuments`, `getDocument`, and others accept a generic type parameter that allows you to specify your custom model type for full type safety.
**TypeScript:**
```typescript
interface Book {
name: string;
author: string;
releaseYear?: string;
category?: string;
genre?: string[];
isCheckedOut: boolean;
}
const databases = new Databases(client);
try {
const documents = await databases.listDocuments<Book>(
'your-database-id',
'your-collection-id'
);
documents.documents.forEach(book => {
console.log(`Book: ${book.name} by ${book.author}`); // Now you have full type safety
});
} catch (error) {
console.error('Appwrite error:', error);
}
```
**JavaScript (with JSDoc for type hints):**
```javascript
/**
* @typedef {Object} Book
* @property {string} name
* @property {string} author
* @property {string} [releaseYear]
* @property {string} [category]
* @property {string[]} [genre]
* @property {boolean} isCheckedOut
*/
const databases = new Databases(client);
try {
/** @type {Models.DocumentList<Book>} */
const documents = await databases.listDocuments(
'your-database-id',
'your-collection-id'
);
documents.documents.forEach(book => {
console.log(`Book: ${book.name} by ${book.author}`); // Type hints available in IDE
});
} catch (error) {
console.error('Appwrite error:', error);
}
```
**Tip**: You can use the `appwrite types` command to automatically generate TypeScript interfaces based on your Appwrite database schema. Learn more about [type generation](https://appwrite.io/docs/products/databases/type-generation).
### Error Handling
The Appwrite Node SDK raises `AppwriteException` object with `message`, `code` and `response` properties. You can handle any errors by catching `AppwriteException` and present the `message` to the user or handle it yourself based on the provided error information. Below is an example.
```js

View File

@@ -1,15 +1,5 @@
export { Models } from './models.mjs';
export { Query, QueryTypes, QueryTypesList } from './query.mjs';
import './enums/database-type.mjs';
import './enums/attribute-status.mjs';
import './enums/column-status.mjs';
import './enums/index-status.mjs';
import './enums/deployment-status.mjs';
import './enums/execution-trigger.mjs';
import './enums/execution-status.mjs';
import './enums/health-antivirus-status.mjs';
import './enums/health-check-status.mjs';
import './enums/message-status.mjs';
type Payload = {
[key: string]: any;

View File

@@ -1,15 +1,5 @@
export { Models } from './models.js';
export { Query, QueryTypes, QueryTypesList } from './query.js';
import './enums/database-type.js';
import './enums/attribute-status.js';
import './enums/column-status.js';
import './enums/index-status.js';
import './enums/deployment-status.js';
import './enums/execution-trigger.js';
import './enums/execution-status.js';
import './enums/health-antivirus-status.js';
import './enums/health-check-status.js';
import './enums/message-status.js';
type Payload = {
[key: string]: any;

View File

@@ -15,7 +15,7 @@ class AppwriteException extends Error {
}
}
function getUserAgent() {
let ua = "AppwriteNodeJSSDK/21.1.0";
let ua = "AppwriteNodeJSSDK/14.2.0";
const platform = [];
if (typeof process !== "undefined") {
if (typeof process.platform === "string")
@@ -51,9 +51,9 @@ const _Client = class _Client {
"x-sdk-name": "Node.js",
"x-sdk-platform": "server",
"x-sdk-language": "nodejs",
"x-sdk-version": "21.1.0",
"x-sdk-version": "14.2.0",
"user-agent": getUserAgent(),
"X-Appwrite-Response-Format": "1.8.0"
"X-Appwrite-Response-Format": "1.6.0"
};
}
/**
@@ -66,9 +66,6 @@ const _Client = class _Client {
* @returns {this}
*/
setEndpoint(endpoint) {
if (!endpoint.startsWith("http://") && !endpoint.startsWith("https://")) {
throw new AppwriteException("Invalid endpoint URL: " + endpoint);
}
this.config.endpoint = endpoint;
return this;
}
@@ -218,10 +215,7 @@ const _Client = class _Client {
return { uri: url.toString(), options };
}
async chunkedUpload(method, url, headers = {}, originalPayload = {}, onProgress) {
const [fileParam, file] = Object.entries(originalPayload).find(([_, value]) => value instanceof nodeFetchNativeWithAgent.File) ?? [];
if (!file || !fileParam) {
throw new Error("File not found in payload");
}
const file = Object.values(originalPayload).find((value) => value instanceof nodeFetchNativeWithAgent.File);
if (file.size <= _Client.CHUNK_SIZE) {
return await this.call(method, url, headers, originalPayload);
}
@@ -234,8 +228,7 @@ const _Client = class _Client {
}
headers["content-range"] = `bytes ${start}-${end - 1}/${file.size}`;
const chunk = file.slice(start, end);
let payload = { ...originalPayload };
payload[fileParam] = new nodeFetchNativeWithAgent.File([chunk], file.name);
let payload = { ...originalPayload, file: new nodeFetchNativeWithAgent.File([chunk], file.name) };
response = await this.call(method, url, headers, payload);
if (onProgress && typeof onProgress === "function") {
onProgress({
@@ -268,7 +261,7 @@ const _Client = class _Client {
return response.headers.get("location") || "";
}
async call(method, url, headers = {}, params = {}, responseType = "json") {
var _a, _b;
var _a;
const { uri, options } = this.prepareRequest(method, url, headers, params);
let data = null;
const response = await nodeFetchNativeWithAgent.fetch(uri, options);
@@ -286,13 +279,7 @@ const _Client = class _Client {
};
}
if (400 <= response.status) {
let responseText = "";
if (((_b = response.headers.get("content-type")) == null ? void 0 : _b.includes("application/json")) || responseType === "arrayBuffer") {
responseText = JSON.stringify(data);
} else {
responseText = data == null ? void 0 : data.message;
}
throw new AppwriteException(data == null ? void 0 : data.message, response.status, data == null ? void 0 : data.type, responseText);
throw new AppwriteException(data == null ? void 0 : data.message, response.status, data == null ? void 0 : data.type, data);
}
return data;
}

File diff suppressed because one or more lines are too long

View File

@@ -14,7 +14,7 @@ var AppwriteException = class extends Error {
}
};
function getUserAgent() {
let ua = "AppwriteNodeJSSDK/21.1.0";
let ua = "AppwriteNodeJSSDK/14.2.0";
const platform = [];
if (typeof process !== "undefined") {
if (typeof process.platform === "string")
@@ -50,9 +50,9 @@ var _Client = class _Client {
"x-sdk-name": "Node.js",
"x-sdk-platform": "server",
"x-sdk-language": "nodejs",
"x-sdk-version": "21.1.0",
"x-sdk-version": "14.2.0",
"user-agent": getUserAgent(),
"X-Appwrite-Response-Format": "1.8.0"
"X-Appwrite-Response-Format": "1.6.0"
};
}
/**
@@ -65,9 +65,6 @@ var _Client = class _Client {
* @returns {this}
*/
setEndpoint(endpoint) {
if (!endpoint.startsWith("http://") && !endpoint.startsWith("https://")) {
throw new AppwriteException("Invalid endpoint URL: " + endpoint);
}
this.config.endpoint = endpoint;
return this;
}
@@ -217,10 +214,7 @@ var _Client = class _Client {
return { uri: url.toString(), options };
}
async chunkedUpload(method, url, headers = {}, originalPayload = {}, onProgress) {
const [fileParam, file] = Object.entries(originalPayload).find(([_, value]) => value instanceof File) ?? [];
if (!file || !fileParam) {
throw new Error("File not found in payload");
}
const file = Object.values(originalPayload).find((value) => value instanceof File);
if (file.size <= _Client.CHUNK_SIZE) {
return await this.call(method, url, headers, originalPayload);
}
@@ -233,8 +227,7 @@ var _Client = class _Client {
}
headers["content-range"] = `bytes ${start}-${end - 1}/${file.size}`;
const chunk = file.slice(start, end);
let payload = { ...originalPayload };
payload[fileParam] = new File([chunk], file.name);
let payload = { ...originalPayload, file: new File([chunk], file.name) };
response = await this.call(method, url, headers, payload);
if (onProgress && typeof onProgress === "function") {
onProgress({
@@ -267,7 +260,7 @@ var _Client = class _Client {
return response.headers.get("location") || "";
}
async call(method, url, headers = {}, params = {}, responseType = "json") {
var _a, _b;
var _a;
const { uri, options } = this.prepareRequest(method, url, headers, params);
let data = null;
const response = await fetch(uri, options);
@@ -285,13 +278,7 @@ var _Client = class _Client {
};
}
if (400 <= response.status) {
let responseText = "";
if (((_b = response.headers.get("content-type")) == null ? void 0 : _b.includes("application/json")) || responseType === "arrayBuffer") {
responseText = JSON.stringify(data);
} else {
responseText = data == null ? void 0 : data.message;
}
throw new AppwriteException(data == null ? void 0 : data.message, response.status, data == null ? void 0 : data.type, responseText);
throw new AppwriteException(data == null ? void 0 : data.message, response.status, data == null ? void 0 : data.type, data);
}
return data;
}

File diff suppressed because one or more lines are too long

View File

@@ -1,6 +0,0 @@
declare enum Adapter {
Static = "static",
Ssr = "ssr"
}
export { Adapter };

View File

@@ -1,6 +0,0 @@
declare enum Adapter {
Static = "static",
Ssr = "ssr"
}
export { Adapter };

View File

@@ -1,11 +0,0 @@
'use strict';
var Adapter = /* @__PURE__ */ ((Adapter2) => {
Adapter2["Static"] = "static";
Adapter2["Ssr"] = "ssr";
return Adapter2;
})(Adapter || {});
exports.Adapter = Adapter;
//# sourceMappingURL=out.js.map
//# sourceMappingURL=adapter.js.map

View File

@@ -1 +0,0 @@
{"version":3,"sources":["../../src/enums/adapter.ts"],"names":["Adapter"],"mappings":"AAAO,IAAK,UAAL,kBAAKA,aAAL;AACH,EAAAA,SAAA,YAAS;AACT,EAAAA,SAAA,SAAM;AAFE,SAAAA;AAAA,GAAA","sourcesContent":["export enum Adapter {\n Static = 'static',\n Ssr = 'ssr',\n}"]}

View File

@@ -1,10 +0,0 @@
// src/enums/adapter.ts
var Adapter = /* @__PURE__ */ ((Adapter2) => {
Adapter2["Static"] = "static";
Adapter2["Ssr"] = "ssr";
return Adapter2;
})(Adapter || {});
export { Adapter };
//# sourceMappingURL=out.js.map
//# sourceMappingURL=adapter.mjs.map

View File

@@ -1 +0,0 @@
{"version":3,"sources":["../../src/enums/adapter.ts"],"names":["Adapter"],"mappings":";AAAO,IAAK,UAAL,kBAAKA,aAAL;AACH,EAAAA,SAAA,YAAS;AACT,EAAAA,SAAA,SAAM;AAFE,SAAAA;AAAA,GAAA","sourcesContent":["export enum Adapter {\n Static = 'static',\n Ssr = 'ssr',\n}"]}

View File

@@ -1,9 +0,0 @@
declare enum AttributeStatus {
Available = "available",
Processing = "processing",
Deleting = "deleting",
Stuck = "stuck",
Failed = "failed"
}
export { AttributeStatus };

View File

@@ -1,9 +0,0 @@
declare enum AttributeStatus {
Available = "available",
Processing = "processing",
Deleting = "deleting",
Stuck = "stuck",
Failed = "failed"
}
export { AttributeStatus };

View File

@@ -1,14 +0,0 @@
'use strict';
var AttributeStatus = /* @__PURE__ */ ((AttributeStatus2) => {
AttributeStatus2["Available"] = "available";
AttributeStatus2["Processing"] = "processing";
AttributeStatus2["Deleting"] = "deleting";
AttributeStatus2["Stuck"] = "stuck";
AttributeStatus2["Failed"] = "failed";
return AttributeStatus2;
})(AttributeStatus || {});
exports.AttributeStatus = AttributeStatus;
//# sourceMappingURL=out.js.map
//# sourceMappingURL=attribute-status.js.map

View File

@@ -1 +0,0 @@
{"version":3,"sources":["../../src/enums/attribute-status.ts"],"names":["AttributeStatus"],"mappings":"AAAO,IAAK,kBAAL,kBAAKA,qBAAL;AACH,EAAAA,iBAAA,eAAY;AACZ,EAAAA,iBAAA,gBAAa;AACb,EAAAA,iBAAA,cAAW;AACX,EAAAA,iBAAA,WAAQ;AACR,EAAAA,iBAAA,YAAS;AALD,SAAAA;AAAA,GAAA","sourcesContent":["export enum AttributeStatus {\n Available = 'available',\n Processing = 'processing',\n Deleting = 'deleting',\n Stuck = 'stuck',\n Failed = 'failed',\n}"]}

View File

@@ -1,13 +0,0 @@
// src/enums/attribute-status.ts
var AttributeStatus = /* @__PURE__ */ ((AttributeStatus2) => {
AttributeStatus2["Available"] = "available";
AttributeStatus2["Processing"] = "processing";
AttributeStatus2["Deleting"] = "deleting";
AttributeStatus2["Stuck"] = "stuck";
AttributeStatus2["Failed"] = "failed";
return AttributeStatus2;
})(AttributeStatus || {});
export { AttributeStatus };
//# sourceMappingURL=out.js.map
//# sourceMappingURL=attribute-status.mjs.map

View File

@@ -1 +0,0 @@
{"version":3,"sources":["../../src/enums/attribute-status.ts"],"names":["AttributeStatus"],"mappings":";AAAO,IAAK,kBAAL,kBAAKA,qBAAL;AACH,EAAAA,iBAAA,eAAY;AACZ,EAAAA,iBAAA,gBAAa;AACb,EAAAA,iBAAA,cAAW;AACX,EAAAA,iBAAA,WAAQ;AACR,EAAAA,iBAAA,YAAS;AALD,SAAAA;AAAA,GAAA","sourcesContent":["export enum AttributeStatus {\n Available = 'available',\n Processing = 'processing',\n Deleting = 'deleting',\n Stuck = 'stuck',\n Failed = 'failed',\n}"]}

View File

@@ -1,71 +0,0 @@
declare enum BuildRuntime {
Node145 = "node-14.5",
Node160 = "node-16.0",
Node180 = "node-18.0",
Node190 = "node-19.0",
Node200 = "node-20.0",
Node210 = "node-21.0",
Node22 = "node-22",
Php80 = "php-8.0",
Php81 = "php-8.1",
Php82 = "php-8.2",
Php83 = "php-8.3",
Ruby30 = "ruby-3.0",
Ruby31 = "ruby-3.1",
Ruby32 = "ruby-3.2",
Ruby33 = "ruby-3.3",
Python38 = "python-3.8",
Python39 = "python-3.9",
Python310 = "python-3.10",
Python311 = "python-3.11",
Python312 = "python-3.12",
Pythonml311 = "python-ml-3.11",
Pythonml312 = "python-ml-3.12",
Deno121 = "deno-1.21",
Deno124 = "deno-1.24",
Deno135 = "deno-1.35",
Deno140 = "deno-1.40",
Deno146 = "deno-1.46",
Deno20 = "deno-2.0",
Dart215 = "dart-2.15",
Dart216 = "dart-2.16",
Dart217 = "dart-2.17",
Dart218 = "dart-2.18",
Dart219 = "dart-2.19",
Dart30 = "dart-3.0",
Dart31 = "dart-3.1",
Dart33 = "dart-3.3",
Dart35 = "dart-3.5",
Dart38 = "dart-3.8",
Dart39 = "dart-3.9",
Dotnet60 = "dotnet-6.0",
Dotnet70 = "dotnet-7.0",
Dotnet80 = "dotnet-8.0",
Java80 = "java-8.0",
Java110 = "java-11.0",
Java170 = "java-17.0",
Java180 = "java-18.0",
Java210 = "java-21.0",
Java22 = "java-22",
Swift55 = "swift-5.5",
Swift58 = "swift-5.8",
Swift59 = "swift-5.9",
Swift510 = "swift-5.10",
Kotlin16 = "kotlin-1.6",
Kotlin18 = "kotlin-1.8",
Kotlin19 = "kotlin-1.9",
Kotlin20 = "kotlin-2.0",
Cpp17 = "cpp-17",
Cpp20 = "cpp-20",
Bun10 = "bun-1.0",
Bun11 = "bun-1.1",
Go123 = "go-1.23",
Static1 = "static-1",
Flutter324 = "flutter-3.24",
Flutter327 = "flutter-3.27",
Flutter329 = "flutter-3.29",
Flutter332 = "flutter-3.32",
Flutter335 = "flutter-3.35"
}
export { BuildRuntime };

View File

@@ -1,71 +0,0 @@
declare enum BuildRuntime {
Node145 = "node-14.5",
Node160 = "node-16.0",
Node180 = "node-18.0",
Node190 = "node-19.0",
Node200 = "node-20.0",
Node210 = "node-21.0",
Node22 = "node-22",
Php80 = "php-8.0",
Php81 = "php-8.1",
Php82 = "php-8.2",
Php83 = "php-8.3",
Ruby30 = "ruby-3.0",
Ruby31 = "ruby-3.1",
Ruby32 = "ruby-3.2",
Ruby33 = "ruby-3.3",
Python38 = "python-3.8",
Python39 = "python-3.9",
Python310 = "python-3.10",
Python311 = "python-3.11",
Python312 = "python-3.12",
Pythonml311 = "python-ml-3.11",
Pythonml312 = "python-ml-3.12",
Deno121 = "deno-1.21",
Deno124 = "deno-1.24",
Deno135 = "deno-1.35",
Deno140 = "deno-1.40",
Deno146 = "deno-1.46",
Deno20 = "deno-2.0",
Dart215 = "dart-2.15",
Dart216 = "dart-2.16",
Dart217 = "dart-2.17",
Dart218 = "dart-2.18",
Dart219 = "dart-2.19",
Dart30 = "dart-3.0",
Dart31 = "dart-3.1",
Dart33 = "dart-3.3",
Dart35 = "dart-3.5",
Dart38 = "dart-3.8",
Dart39 = "dart-3.9",
Dotnet60 = "dotnet-6.0",
Dotnet70 = "dotnet-7.0",
Dotnet80 = "dotnet-8.0",
Java80 = "java-8.0",
Java110 = "java-11.0",
Java170 = "java-17.0",
Java180 = "java-18.0",
Java210 = "java-21.0",
Java22 = "java-22",
Swift55 = "swift-5.5",
Swift58 = "swift-5.8",
Swift59 = "swift-5.9",
Swift510 = "swift-5.10",
Kotlin16 = "kotlin-1.6",
Kotlin18 = "kotlin-1.8",
Kotlin19 = "kotlin-1.9",
Kotlin20 = "kotlin-2.0",
Cpp17 = "cpp-17",
Cpp20 = "cpp-20",
Bun10 = "bun-1.0",
Bun11 = "bun-1.1",
Go123 = "go-1.23",
Static1 = "static-1",
Flutter324 = "flutter-3.24",
Flutter327 = "flutter-3.27",
Flutter329 = "flutter-3.29",
Flutter332 = "flutter-3.32",
Flutter335 = "flutter-3.35"
}
export { BuildRuntime };

View File

@@ -1,76 +0,0 @@
'use strict';
var BuildRuntime = /* @__PURE__ */ ((BuildRuntime2) => {
BuildRuntime2["Node145"] = "node-14.5";
BuildRuntime2["Node160"] = "node-16.0";
BuildRuntime2["Node180"] = "node-18.0";
BuildRuntime2["Node190"] = "node-19.0";
BuildRuntime2["Node200"] = "node-20.0";
BuildRuntime2["Node210"] = "node-21.0";
BuildRuntime2["Node22"] = "node-22";
BuildRuntime2["Php80"] = "php-8.0";
BuildRuntime2["Php81"] = "php-8.1";
BuildRuntime2["Php82"] = "php-8.2";
BuildRuntime2["Php83"] = "php-8.3";
BuildRuntime2["Ruby30"] = "ruby-3.0";
BuildRuntime2["Ruby31"] = "ruby-3.1";
BuildRuntime2["Ruby32"] = "ruby-3.2";
BuildRuntime2["Ruby33"] = "ruby-3.3";
BuildRuntime2["Python38"] = "python-3.8";
BuildRuntime2["Python39"] = "python-3.9";
BuildRuntime2["Python310"] = "python-3.10";
BuildRuntime2["Python311"] = "python-3.11";
BuildRuntime2["Python312"] = "python-3.12";
BuildRuntime2["Pythonml311"] = "python-ml-3.11";
BuildRuntime2["Pythonml312"] = "python-ml-3.12";
BuildRuntime2["Deno121"] = "deno-1.21";
BuildRuntime2["Deno124"] = "deno-1.24";
BuildRuntime2["Deno135"] = "deno-1.35";
BuildRuntime2["Deno140"] = "deno-1.40";
BuildRuntime2["Deno146"] = "deno-1.46";
BuildRuntime2["Deno20"] = "deno-2.0";
BuildRuntime2["Dart215"] = "dart-2.15";
BuildRuntime2["Dart216"] = "dart-2.16";
BuildRuntime2["Dart217"] = "dart-2.17";
BuildRuntime2["Dart218"] = "dart-2.18";
BuildRuntime2["Dart219"] = "dart-2.19";
BuildRuntime2["Dart30"] = "dart-3.0";
BuildRuntime2["Dart31"] = "dart-3.1";
BuildRuntime2["Dart33"] = "dart-3.3";
BuildRuntime2["Dart35"] = "dart-3.5";
BuildRuntime2["Dart38"] = "dart-3.8";
BuildRuntime2["Dart39"] = "dart-3.9";
BuildRuntime2["Dotnet60"] = "dotnet-6.0";
BuildRuntime2["Dotnet70"] = "dotnet-7.0";
BuildRuntime2["Dotnet80"] = "dotnet-8.0";
BuildRuntime2["Java80"] = "java-8.0";
BuildRuntime2["Java110"] = "java-11.0";
BuildRuntime2["Java170"] = "java-17.0";
BuildRuntime2["Java180"] = "java-18.0";
BuildRuntime2["Java210"] = "java-21.0";
BuildRuntime2["Java22"] = "java-22";
BuildRuntime2["Swift55"] = "swift-5.5";
BuildRuntime2["Swift58"] = "swift-5.8";
BuildRuntime2["Swift59"] = "swift-5.9";
BuildRuntime2["Swift510"] = "swift-5.10";
BuildRuntime2["Kotlin16"] = "kotlin-1.6";
BuildRuntime2["Kotlin18"] = "kotlin-1.8";
BuildRuntime2["Kotlin19"] = "kotlin-1.9";
BuildRuntime2["Kotlin20"] = "kotlin-2.0";
BuildRuntime2["Cpp17"] = "cpp-17";
BuildRuntime2["Cpp20"] = "cpp-20";
BuildRuntime2["Bun10"] = "bun-1.0";
BuildRuntime2["Bun11"] = "bun-1.1";
BuildRuntime2["Go123"] = "go-1.23";
BuildRuntime2["Static1"] = "static-1";
BuildRuntime2["Flutter324"] = "flutter-3.24";
BuildRuntime2["Flutter327"] = "flutter-3.27";
BuildRuntime2["Flutter329"] = "flutter-3.29";
BuildRuntime2["Flutter332"] = "flutter-3.32";
BuildRuntime2["Flutter335"] = "flutter-3.35";
return BuildRuntime2;
})(BuildRuntime || {});
exports.BuildRuntime = BuildRuntime;
//# sourceMappingURL=out.js.map
//# sourceMappingURL=build-runtime.js.map

View File

@@ -1 +0,0 @@
{"version":3,"sources":["../../src/enums/build-runtime.ts"],"names":["BuildRuntime"],"mappings":"AAAO,IAAK,eAAL,kBAAKA,kBAAL;AACH,EAAAA,cAAA,aAAU;AACV,EAAAA,cAAA,aAAU;AACV,EAAAA,cAAA,aAAU;AACV,EAAAA,cAAA,aAAU;AACV,EAAAA,cAAA,aAAU;AACV,EAAAA,cAAA,aAAU;AACV,EAAAA,cAAA,YAAS;AACT,EAAAA,cAAA,WAAQ;AACR,EAAAA,cAAA,WAAQ;AACR,EAAAA,cAAA,WAAQ;AACR,EAAAA,cAAA,WAAQ;AACR,EAAAA,cAAA,YAAS;AACT,EAAAA,cAAA,YAAS;AACT,EAAAA,cAAA,YAAS;AACT,EAAAA,cAAA,YAAS;AACT,EAAAA,cAAA,cAAW;AACX,EAAAA,cAAA,cAAW;AACX,EAAAA,cAAA,eAAY;AACZ,EAAAA,cAAA,eAAY;AACZ,EAAAA,cAAA,eAAY;AACZ,EAAAA,cAAA,iBAAc;AACd,EAAAA,cAAA,iBAAc;AACd,EAAAA,cAAA,aAAU;AACV,EAAAA,cAAA,aAAU;AACV,EAAAA,cAAA,aAAU;AACV,EAAAA,cAAA,aAAU;AACV,EAAAA,cAAA,aAAU;AACV,EAAAA,cAAA,YAAS;AACT,EAAAA,cAAA,aAAU;AACV,EAAAA,cAAA,aAAU;AACV,EAAAA,cAAA,aAAU;AACV,EAAAA,cAAA,aAAU;AACV,EAAAA,cAAA,aAAU;AACV,EAAAA,cAAA,YAAS;AACT,EAAAA,cAAA,YAAS;AACT,EAAAA,cAAA,YAAS;AACT,EAAAA,cAAA,YAAS;AACT,EAAAA,cAAA,YAAS;AACT,EAAAA,cAAA,YAAS;AACT,EAAAA,cAAA,cAAW;AACX,EAAAA,cAAA,cAAW;AACX,EAAAA,cAAA,cAAW;AACX,EAAAA,cAAA,YAAS;AACT,EAAAA,cAAA,aAAU;AACV,EAAAA,cAAA,aAAU;AACV,EAAAA,cAAA,aAAU;AACV,EAAAA,cAAA,aAAU;AACV,EAAAA,cAAA,YAAS;AACT,EAAAA,cAAA,aAAU;AACV,EAAAA,cAAA,aAAU;AACV,EAAAA,cAAA,aAAU;AACV,EAAAA,cAAA,cAAW;AACX,EAAAA,cAAA,cAAW;AACX,EAAAA,cAAA,cAAW;AACX,EAAAA,cAAA,cAAW;AACX,EAAAA,cAAA,cAAW;AACX,EAAAA,cAAA,WAAQ;AACR,EAAAA,cAAA,WAAQ;AACR,EAAAA,cAAA,WAAQ;AACR,EAAAA,cAAA,WAAQ;AACR,EAAAA,cAAA,WAAQ;AACR,EAAAA,cAAA,aAAU;AACV,EAAAA,cAAA,gBAAa;AACb,EAAAA,cAAA,gBAAa;AACb,EAAAA,cAAA,gBAAa;AACb,EAAAA,cAAA,gBAAa;AACb,EAAAA,cAAA,gBAAa;AAnEL,SAAAA;AAAA,GAAA","sourcesContent":["export enum BuildRuntime {\n Node145 = 'node-14.5',\n Node160 = 'node-16.0',\n Node180 = 'node-18.0',\n Node190 = 'node-19.0',\n Node200 = 'node-20.0',\n Node210 = 'node-21.0',\n Node22 = 'node-22',\n Php80 = 'php-8.0',\n Php81 = 'php-8.1',\n Php82 = 'php-8.2',\n Php83 = 'php-8.3',\n Ruby30 = 'ruby-3.0',\n Ruby31 = 'ruby-3.1',\n Ruby32 = 'ruby-3.2',\n Ruby33 = 'ruby-3.3',\n Python38 = 'python-3.8',\n Python39 = 'python-3.9',\n Python310 = 'python-3.10',\n Python311 = 'python-3.11',\n Python312 = 'python-3.12',\n Pythonml311 = 'python-ml-3.11',\n Pythonml312 = 'python-ml-3.12',\n Deno121 = 'deno-1.21',\n Deno124 = 'deno-1.24',\n Deno135 = 'deno-1.35',\n Deno140 = 'deno-1.40',\n Deno146 = 'deno-1.46',\n Deno20 = 'deno-2.0',\n Dart215 = 'dart-2.15',\n Dart216 = 'dart-2.16',\n Dart217 = 'dart-2.17',\n Dart218 = 'dart-2.18',\n Dart219 = 'dart-2.19',\n Dart30 = 'dart-3.0',\n Dart31 = 'dart-3.1',\n Dart33 = 'dart-3.3',\n Dart35 = 'dart-3.5',\n Dart38 = 'dart-3.8',\n Dart39 = 'dart-3.9',\n Dotnet60 = 'dotnet-6.0',\n Dotnet70 = 'dotnet-7.0',\n Dotnet80 = 'dotnet-8.0',\n Java80 = 'java-8.0',\n Java110 = 'java-11.0',\n Java170 = 'java-17.0',\n Java180 = 'java-18.0',\n Java210 = 'java-21.0',\n Java22 = 'java-22',\n Swift55 = 'swift-5.5',\n Swift58 = 'swift-5.8',\n Swift59 = 'swift-5.9',\n Swift510 = 'swift-5.10',\n Kotlin16 = 'kotlin-1.6',\n Kotlin18 = 'kotlin-1.8',\n Kotlin19 = 'kotlin-1.9',\n Kotlin20 = 'kotlin-2.0',\n Cpp17 = 'cpp-17',\n Cpp20 = 'cpp-20',\n Bun10 = 'bun-1.0',\n Bun11 = 'bun-1.1',\n Go123 = 'go-1.23',\n Static1 = 'static-1',\n Flutter324 = 'flutter-3.24',\n Flutter327 = 'flutter-3.27',\n Flutter329 = 'flutter-3.29',\n Flutter332 = 'flutter-3.32',\n Flutter335 = 'flutter-3.35',\n}"]}

View File

@@ -1,75 +0,0 @@
// src/enums/build-runtime.ts
var BuildRuntime = /* @__PURE__ */ ((BuildRuntime2) => {
BuildRuntime2["Node145"] = "node-14.5";
BuildRuntime2["Node160"] = "node-16.0";
BuildRuntime2["Node180"] = "node-18.0";
BuildRuntime2["Node190"] = "node-19.0";
BuildRuntime2["Node200"] = "node-20.0";
BuildRuntime2["Node210"] = "node-21.0";
BuildRuntime2["Node22"] = "node-22";
BuildRuntime2["Php80"] = "php-8.0";
BuildRuntime2["Php81"] = "php-8.1";
BuildRuntime2["Php82"] = "php-8.2";
BuildRuntime2["Php83"] = "php-8.3";
BuildRuntime2["Ruby30"] = "ruby-3.0";
BuildRuntime2["Ruby31"] = "ruby-3.1";
BuildRuntime2["Ruby32"] = "ruby-3.2";
BuildRuntime2["Ruby33"] = "ruby-3.3";
BuildRuntime2["Python38"] = "python-3.8";
BuildRuntime2["Python39"] = "python-3.9";
BuildRuntime2["Python310"] = "python-3.10";
BuildRuntime2["Python311"] = "python-3.11";
BuildRuntime2["Python312"] = "python-3.12";
BuildRuntime2["Pythonml311"] = "python-ml-3.11";
BuildRuntime2["Pythonml312"] = "python-ml-3.12";
BuildRuntime2["Deno121"] = "deno-1.21";
BuildRuntime2["Deno124"] = "deno-1.24";
BuildRuntime2["Deno135"] = "deno-1.35";
BuildRuntime2["Deno140"] = "deno-1.40";
BuildRuntime2["Deno146"] = "deno-1.46";
BuildRuntime2["Deno20"] = "deno-2.0";
BuildRuntime2["Dart215"] = "dart-2.15";
BuildRuntime2["Dart216"] = "dart-2.16";
BuildRuntime2["Dart217"] = "dart-2.17";
BuildRuntime2["Dart218"] = "dart-2.18";
BuildRuntime2["Dart219"] = "dart-2.19";
BuildRuntime2["Dart30"] = "dart-3.0";
BuildRuntime2["Dart31"] = "dart-3.1";
BuildRuntime2["Dart33"] = "dart-3.3";
BuildRuntime2["Dart35"] = "dart-3.5";
BuildRuntime2["Dart38"] = "dart-3.8";
BuildRuntime2["Dart39"] = "dart-3.9";
BuildRuntime2["Dotnet60"] = "dotnet-6.0";
BuildRuntime2["Dotnet70"] = "dotnet-7.0";
BuildRuntime2["Dotnet80"] = "dotnet-8.0";
BuildRuntime2["Java80"] = "java-8.0";
BuildRuntime2["Java110"] = "java-11.0";
BuildRuntime2["Java170"] = "java-17.0";
BuildRuntime2["Java180"] = "java-18.0";
BuildRuntime2["Java210"] = "java-21.0";
BuildRuntime2["Java22"] = "java-22";
BuildRuntime2["Swift55"] = "swift-5.5";
BuildRuntime2["Swift58"] = "swift-5.8";
BuildRuntime2["Swift59"] = "swift-5.9";
BuildRuntime2["Swift510"] = "swift-5.10";
BuildRuntime2["Kotlin16"] = "kotlin-1.6";
BuildRuntime2["Kotlin18"] = "kotlin-1.8";
BuildRuntime2["Kotlin19"] = "kotlin-1.9";
BuildRuntime2["Kotlin20"] = "kotlin-2.0";
BuildRuntime2["Cpp17"] = "cpp-17";
BuildRuntime2["Cpp20"] = "cpp-20";
BuildRuntime2["Bun10"] = "bun-1.0";
BuildRuntime2["Bun11"] = "bun-1.1";
BuildRuntime2["Go123"] = "go-1.23";
BuildRuntime2["Static1"] = "static-1";
BuildRuntime2["Flutter324"] = "flutter-3.24";
BuildRuntime2["Flutter327"] = "flutter-3.27";
BuildRuntime2["Flutter329"] = "flutter-3.29";
BuildRuntime2["Flutter332"] = "flutter-3.32";
BuildRuntime2["Flutter335"] = "flutter-3.35";
return BuildRuntime2;
})(BuildRuntime || {});
export { BuildRuntime };
//# sourceMappingURL=out.js.map
//# sourceMappingURL=build-runtime.mjs.map

View File

@@ -1 +0,0 @@
{"version":3,"sources":["../../src/enums/build-runtime.ts"],"names":["BuildRuntime"],"mappings":";AAAO,IAAK,eAAL,kBAAKA,kBAAL;AACH,EAAAA,cAAA,aAAU;AACV,EAAAA,cAAA,aAAU;AACV,EAAAA,cAAA,aAAU;AACV,EAAAA,cAAA,aAAU;AACV,EAAAA,cAAA,aAAU;AACV,EAAAA,cAAA,aAAU;AACV,EAAAA,cAAA,YAAS;AACT,EAAAA,cAAA,WAAQ;AACR,EAAAA,cAAA,WAAQ;AACR,EAAAA,cAAA,WAAQ;AACR,EAAAA,cAAA,WAAQ;AACR,EAAAA,cAAA,YAAS;AACT,EAAAA,cAAA,YAAS;AACT,EAAAA,cAAA,YAAS;AACT,EAAAA,cAAA,YAAS;AACT,EAAAA,cAAA,cAAW;AACX,EAAAA,cAAA,cAAW;AACX,EAAAA,cAAA,eAAY;AACZ,EAAAA,cAAA,eAAY;AACZ,EAAAA,cAAA,eAAY;AACZ,EAAAA,cAAA,iBAAc;AACd,EAAAA,cAAA,iBAAc;AACd,EAAAA,cAAA,aAAU;AACV,EAAAA,cAAA,aAAU;AACV,EAAAA,cAAA,aAAU;AACV,EAAAA,cAAA,aAAU;AACV,EAAAA,cAAA,aAAU;AACV,EAAAA,cAAA,YAAS;AACT,EAAAA,cAAA,aAAU;AACV,EAAAA,cAAA,aAAU;AACV,EAAAA,cAAA,aAAU;AACV,EAAAA,cAAA,aAAU;AACV,EAAAA,cAAA,aAAU;AACV,EAAAA,cAAA,YAAS;AACT,EAAAA,cAAA,YAAS;AACT,EAAAA,cAAA,YAAS;AACT,EAAAA,cAAA,YAAS;AACT,EAAAA,cAAA,YAAS;AACT,EAAAA,cAAA,YAAS;AACT,EAAAA,cAAA,cAAW;AACX,EAAAA,cAAA,cAAW;AACX,EAAAA,cAAA,cAAW;AACX,EAAAA,cAAA,YAAS;AACT,EAAAA,cAAA,aAAU;AACV,EAAAA,cAAA,aAAU;AACV,EAAAA,cAAA,aAAU;AACV,EAAAA,cAAA,aAAU;AACV,EAAAA,cAAA,YAAS;AACT,EAAAA,cAAA,aAAU;AACV,EAAAA,cAAA,aAAU;AACV,EAAAA,cAAA,aAAU;AACV,EAAAA,cAAA,cAAW;AACX,EAAAA,cAAA,cAAW;AACX,EAAAA,cAAA,cAAW;AACX,EAAAA,cAAA,cAAW;AACX,EAAAA,cAAA,cAAW;AACX,EAAAA,cAAA,WAAQ;AACR,EAAAA,cAAA,WAAQ;AACR,EAAAA,cAAA,WAAQ;AACR,EAAAA,cAAA,WAAQ;AACR,EAAAA,cAAA,WAAQ;AACR,EAAAA,cAAA,aAAU;AACV,EAAAA,cAAA,gBAAa;AACb,EAAAA,cAAA,gBAAa;AACb,EAAAA,cAAA,gBAAa;AACb,EAAAA,cAAA,gBAAa;AACb,EAAAA,cAAA,gBAAa;AAnEL,SAAAA;AAAA,GAAA","sourcesContent":["export enum BuildRuntime {\n Node145 = 'node-14.5',\n Node160 = 'node-16.0',\n Node180 = 'node-18.0',\n Node190 = 'node-19.0',\n Node200 = 'node-20.0',\n Node210 = 'node-21.0',\n Node22 = 'node-22',\n Php80 = 'php-8.0',\n Php81 = 'php-8.1',\n Php82 = 'php-8.2',\n Php83 = 'php-8.3',\n Ruby30 = 'ruby-3.0',\n Ruby31 = 'ruby-3.1',\n Ruby32 = 'ruby-3.2',\n Ruby33 = 'ruby-3.3',\n Python38 = 'python-3.8',\n Python39 = 'python-3.9',\n Python310 = 'python-3.10',\n Python311 = 'python-3.11',\n Python312 = 'python-3.12',\n Pythonml311 = 'python-ml-3.11',\n Pythonml312 = 'python-ml-3.12',\n Deno121 = 'deno-1.21',\n Deno124 = 'deno-1.24',\n Deno135 = 'deno-1.35',\n Deno140 = 'deno-1.40',\n Deno146 = 'deno-1.46',\n Deno20 = 'deno-2.0',\n Dart215 = 'dart-2.15',\n Dart216 = 'dart-2.16',\n Dart217 = 'dart-2.17',\n Dart218 = 'dart-2.18',\n Dart219 = 'dart-2.19',\n Dart30 = 'dart-3.0',\n Dart31 = 'dart-3.1',\n Dart33 = 'dart-3.3',\n Dart35 = 'dart-3.5',\n Dart38 = 'dart-3.8',\n Dart39 = 'dart-3.9',\n Dotnet60 = 'dotnet-6.0',\n Dotnet70 = 'dotnet-7.0',\n Dotnet80 = 'dotnet-8.0',\n Java80 = 'java-8.0',\n Java110 = 'java-11.0',\n Java170 = 'java-17.0',\n Java180 = 'java-18.0',\n Java210 = 'java-21.0',\n Java22 = 'java-22',\n Swift55 = 'swift-5.5',\n Swift58 = 'swift-5.8',\n Swift59 = 'swift-5.9',\n Swift510 = 'swift-5.10',\n Kotlin16 = 'kotlin-1.6',\n Kotlin18 = 'kotlin-1.8',\n Kotlin19 = 'kotlin-1.9',\n Kotlin20 = 'kotlin-2.0',\n Cpp17 = 'cpp-17',\n Cpp20 = 'cpp-20',\n Bun10 = 'bun-1.0',\n Bun11 = 'bun-1.1',\n Go123 = 'go-1.23',\n Static1 = 'static-1',\n Flutter324 = 'flutter-3.24',\n Flutter327 = 'flutter-3.27',\n Flutter329 = 'flutter-3.29',\n Flutter332 = 'flutter-3.32',\n Flutter335 = 'flutter-3.35',\n}"]}

View File

@@ -1,9 +0,0 @@
declare enum ColumnStatus {
Available = "available",
Processing = "processing",
Deleting = "deleting",
Stuck = "stuck",
Failed = "failed"
}
export { ColumnStatus };

View File

@@ -1,9 +0,0 @@
declare enum ColumnStatus {
Available = "available",
Processing = "processing",
Deleting = "deleting",
Stuck = "stuck",
Failed = "failed"
}
export { ColumnStatus };

View File

@@ -1,14 +0,0 @@
'use strict';
var ColumnStatus = /* @__PURE__ */ ((ColumnStatus2) => {
ColumnStatus2["Available"] = "available";
ColumnStatus2["Processing"] = "processing";
ColumnStatus2["Deleting"] = "deleting";
ColumnStatus2["Stuck"] = "stuck";
ColumnStatus2["Failed"] = "failed";
return ColumnStatus2;
})(ColumnStatus || {});
exports.ColumnStatus = ColumnStatus;
//# sourceMappingURL=out.js.map
//# sourceMappingURL=column-status.js.map

View File

@@ -1 +0,0 @@
{"version":3,"sources":["../../src/enums/column-status.ts"],"names":["ColumnStatus"],"mappings":"AAAO,IAAK,eAAL,kBAAKA,kBAAL;AACH,EAAAA,cAAA,eAAY;AACZ,EAAAA,cAAA,gBAAa;AACb,EAAAA,cAAA,cAAW;AACX,EAAAA,cAAA,WAAQ;AACR,EAAAA,cAAA,YAAS;AALD,SAAAA;AAAA,GAAA","sourcesContent":["export enum ColumnStatus {\n Available = 'available',\n Processing = 'processing',\n Deleting = 'deleting',\n Stuck = 'stuck',\n Failed = 'failed',\n}"]}

View File

@@ -1,13 +0,0 @@
// src/enums/column-status.ts
var ColumnStatus = /* @__PURE__ */ ((ColumnStatus2) => {
ColumnStatus2["Available"] = "available";
ColumnStatus2["Processing"] = "processing";
ColumnStatus2["Deleting"] = "deleting";
ColumnStatus2["Stuck"] = "stuck";
ColumnStatus2["Failed"] = "failed";
return ColumnStatus2;
})(ColumnStatus || {});
export { ColumnStatus };
//# sourceMappingURL=out.js.map
//# sourceMappingURL=column-status.mjs.map

View File

@@ -1 +0,0 @@
{"version":3,"sources":["../../src/enums/column-status.ts"],"names":["ColumnStatus"],"mappings":";AAAO,IAAK,eAAL,kBAAKA,kBAAL;AACH,EAAAA,cAAA,eAAY;AACZ,EAAAA,cAAA,gBAAa;AACb,EAAAA,cAAA,cAAW;AACX,EAAAA,cAAA,WAAQ;AACR,EAAAA,cAAA,YAAS;AALD,SAAAA;AAAA,GAAA","sourcesContent":["export enum ColumnStatus {\n Available = 'available',\n Processing = 'processing',\n Deleting = 'deleting',\n Stuck = 'stuck',\n Failed = 'failed',\n}"]}

View File

@@ -11,11 +11,10 @@ declare enum CreditCard {
Mastercard = "mastercard",
Naranja = "naranja",
TarjetaShopping = "targeta-shopping",
UnionPay = "unionpay",
UnionChinaPay = "union-china-pay",
Visa = "visa",
MIR = "mir",
Maestro = "maestro",
Rupay = "rupay"
Maestro = "maestro"
}
export { CreditCard };

View File

@@ -11,11 +11,10 @@ declare enum CreditCard {
Mastercard = "mastercard",
Naranja = "naranja",
TarjetaShopping = "targeta-shopping",
UnionPay = "unionpay",
UnionChinaPay = "union-china-pay",
Visa = "visa",
MIR = "mir",
Maestro = "maestro",
Rupay = "rupay"
Maestro = "maestro"
}
export { CreditCard };

View File

@@ -13,11 +13,10 @@ var CreditCard = /* @__PURE__ */ ((CreditCard2) => {
CreditCard2["Mastercard"] = "mastercard";
CreditCard2["Naranja"] = "naranja";
CreditCard2["TarjetaShopping"] = "targeta-shopping";
CreditCard2["UnionPay"] = "unionpay";
CreditCard2["UnionChinaPay"] = "union-china-pay";
CreditCard2["Visa"] = "visa";
CreditCard2["MIR"] = "mir";
CreditCard2["Maestro"] = "maestro";
CreditCard2["Rupay"] = "rupay";
return CreditCard2;
})(CreditCard || {});

View File

@@ -1 +1 @@
{"version":3,"sources":["../../src/enums/credit-card.ts"],"names":["CreditCard"],"mappings":"AAAO,IAAK,aAAL,kBAAKA,gBAAL;AACH,EAAAA,YAAA,qBAAkB;AAClB,EAAAA,YAAA,eAAY;AACZ,EAAAA,YAAA,WAAQ;AACR,EAAAA,YAAA,cAAW;AACX,EAAAA,YAAA,gBAAa;AACb,EAAAA,YAAA,cAAW;AACX,EAAAA,YAAA,SAAM;AACN,EAAAA,YAAA,eAAY;AACZ,EAAAA,YAAA,SAAM;AACN,EAAAA,YAAA,gBAAa;AACb,EAAAA,YAAA,aAAU;AACV,EAAAA,YAAA,qBAAkB;AAClB,EAAAA,YAAA,cAAW;AACX,EAAAA,YAAA,UAAO;AACP,EAAAA,YAAA,SAAM;AACN,EAAAA,YAAA,aAAU;AACV,EAAAA,YAAA,WAAQ;AAjBA,SAAAA;AAAA,GAAA","sourcesContent":["export enum CreditCard {\n AmericanExpress = 'amex',\n Argencard = 'argencard',\n Cabal = 'cabal',\n Cencosud = 'cencosud',\n DinersClub = 'diners',\n Discover = 'discover',\n Elo = 'elo',\n Hipercard = 'hipercard',\n JCB = 'jcb',\n Mastercard = 'mastercard',\n Naranja = 'naranja',\n TarjetaShopping = 'targeta-shopping',\n UnionPay = 'unionpay',\n Visa = 'visa',\n MIR = 'mir',\n Maestro = 'maestro',\n Rupay = 'rupay',\n}"]}
{"version":3,"sources":["../../src/enums/credit-card.ts"],"names":["CreditCard"],"mappings":"AAAO,IAAK,aAAL,kBAAKA,gBAAL;AACH,EAAAA,YAAA,qBAAkB;AAClB,EAAAA,YAAA,eAAY;AACZ,EAAAA,YAAA,WAAQ;AACR,EAAAA,YAAA,cAAW;AACX,EAAAA,YAAA,gBAAa;AACb,EAAAA,YAAA,cAAW;AACX,EAAAA,YAAA,SAAM;AACN,EAAAA,YAAA,eAAY;AACZ,EAAAA,YAAA,SAAM;AACN,EAAAA,YAAA,gBAAa;AACb,EAAAA,YAAA,aAAU;AACV,EAAAA,YAAA,qBAAkB;AAClB,EAAAA,YAAA,mBAAgB;AAChB,EAAAA,YAAA,UAAO;AACP,EAAAA,YAAA,SAAM;AACN,EAAAA,YAAA,aAAU;AAhBF,SAAAA;AAAA,GAAA","sourcesContent":["export enum CreditCard {\n AmericanExpress = 'amex',\n Argencard = 'argencard',\n Cabal = 'cabal',\n Cencosud = 'cencosud',\n DinersClub = 'diners',\n Discover = 'discover',\n Elo = 'elo',\n Hipercard = 'hipercard',\n JCB = 'jcb',\n Mastercard = 'mastercard',\n Naranja = 'naranja',\n TarjetaShopping = 'targeta-shopping',\n UnionChinaPay = 'union-china-pay',\n Visa = 'visa',\n MIR = 'mir',\n Maestro = 'maestro',\n}"]}

View File

@@ -12,11 +12,10 @@ var CreditCard = /* @__PURE__ */ ((CreditCard2) => {
CreditCard2["Mastercard"] = "mastercard";
CreditCard2["Naranja"] = "naranja";
CreditCard2["TarjetaShopping"] = "targeta-shopping";
CreditCard2["UnionPay"] = "unionpay";
CreditCard2["UnionChinaPay"] = "union-china-pay";
CreditCard2["Visa"] = "visa";
CreditCard2["MIR"] = "mir";
CreditCard2["Maestro"] = "maestro";
CreditCard2["Rupay"] = "rupay";
return CreditCard2;
})(CreditCard || {});

View File

@@ -1 +1 @@
{"version":3,"sources":["../../src/enums/credit-card.ts"],"names":["CreditCard"],"mappings":";AAAO,IAAK,aAAL,kBAAKA,gBAAL;AACH,EAAAA,YAAA,qBAAkB;AAClB,EAAAA,YAAA,eAAY;AACZ,EAAAA,YAAA,WAAQ;AACR,EAAAA,YAAA,cAAW;AACX,EAAAA,YAAA,gBAAa;AACb,EAAAA,YAAA,cAAW;AACX,EAAAA,YAAA,SAAM;AACN,EAAAA,YAAA,eAAY;AACZ,EAAAA,YAAA,SAAM;AACN,EAAAA,YAAA,gBAAa;AACb,EAAAA,YAAA,aAAU;AACV,EAAAA,YAAA,qBAAkB;AAClB,EAAAA,YAAA,cAAW;AACX,EAAAA,YAAA,UAAO;AACP,EAAAA,YAAA,SAAM;AACN,EAAAA,YAAA,aAAU;AACV,EAAAA,YAAA,WAAQ;AAjBA,SAAAA;AAAA,GAAA","sourcesContent":["export enum CreditCard {\n AmericanExpress = 'amex',\n Argencard = 'argencard',\n Cabal = 'cabal',\n Cencosud = 'cencosud',\n DinersClub = 'diners',\n Discover = 'discover',\n Elo = 'elo',\n Hipercard = 'hipercard',\n JCB = 'jcb',\n Mastercard = 'mastercard',\n Naranja = 'naranja',\n TarjetaShopping = 'targeta-shopping',\n UnionPay = 'unionpay',\n Visa = 'visa',\n MIR = 'mir',\n Maestro = 'maestro',\n Rupay = 'rupay',\n}"]}
{"version":3,"sources":["../../src/enums/credit-card.ts"],"names":["CreditCard"],"mappings":";AAAO,IAAK,aAAL,kBAAKA,gBAAL;AACH,EAAAA,YAAA,qBAAkB;AAClB,EAAAA,YAAA,eAAY;AACZ,EAAAA,YAAA,WAAQ;AACR,EAAAA,YAAA,cAAW;AACX,EAAAA,YAAA,gBAAa;AACb,EAAAA,YAAA,cAAW;AACX,EAAAA,YAAA,SAAM;AACN,EAAAA,YAAA,eAAY;AACZ,EAAAA,YAAA,SAAM;AACN,EAAAA,YAAA,gBAAa;AACb,EAAAA,YAAA,aAAU;AACV,EAAAA,YAAA,qBAAkB;AAClB,EAAAA,YAAA,mBAAgB;AAChB,EAAAA,YAAA,UAAO;AACP,EAAAA,YAAA,SAAM;AACN,EAAAA,YAAA,aAAU;AAhBF,SAAAA;AAAA,GAAA","sourcesContent":["export enum CreditCard {\n AmericanExpress = 'amex',\n Argencard = 'argencard',\n Cabal = 'cabal',\n Cencosud = 'cencosud',\n DinersClub = 'diners',\n Discover = 'discover',\n Elo = 'elo',\n Hipercard = 'hipercard',\n JCB = 'jcb',\n Mastercard = 'mastercard',\n Naranja = 'naranja',\n TarjetaShopping = 'targeta-shopping',\n UnionChinaPay = 'union-china-pay',\n Visa = 'visa',\n MIR = 'mir',\n Maestro = 'maestro',\n}"]}

View File

@@ -1,6 +0,0 @@
declare enum DatabaseType {
Legacy = "legacy",
Tablesdb = "tablesdb"
}
export { DatabaseType };

View File

@@ -1,6 +0,0 @@
declare enum DatabaseType {
Legacy = "legacy",
Tablesdb = "tablesdb"
}
export { DatabaseType };

View File

@@ -1,11 +0,0 @@
'use strict';
var DatabaseType = /* @__PURE__ */ ((DatabaseType2) => {
DatabaseType2["Legacy"] = "legacy";
DatabaseType2["Tablesdb"] = "tablesdb";
return DatabaseType2;
})(DatabaseType || {});
exports.DatabaseType = DatabaseType;
//# sourceMappingURL=out.js.map
//# sourceMappingURL=database-type.js.map

View File

@@ -1 +0,0 @@
{"version":3,"sources":["../../src/enums/database-type.ts"],"names":["DatabaseType"],"mappings":"AAAO,IAAK,eAAL,kBAAKA,kBAAL;AACH,EAAAA,cAAA,YAAS;AACT,EAAAA,cAAA,cAAW;AAFH,SAAAA;AAAA,GAAA","sourcesContent":["export enum DatabaseType {\n Legacy = 'legacy',\n Tablesdb = 'tablesdb',\n}"]}

View File

@@ -1,10 +0,0 @@
// src/enums/database-type.ts
var DatabaseType = /* @__PURE__ */ ((DatabaseType2) => {
DatabaseType2["Legacy"] = "legacy";
DatabaseType2["Tablesdb"] = "tablesdb";
return DatabaseType2;
})(DatabaseType || {});
export { DatabaseType };
//# sourceMappingURL=out.js.map
//# sourceMappingURL=database-type.mjs.map

View File

@@ -1 +0,0 @@
{"version":3,"sources":["../../src/enums/database-type.ts"],"names":["DatabaseType"],"mappings":";AAAO,IAAK,eAAL,kBAAKA,kBAAL;AACH,EAAAA,cAAA,YAAS;AACT,EAAAA,cAAA,cAAW;AAFH,SAAAA;AAAA,GAAA","sourcesContent":["export enum DatabaseType {\n Legacy = 'legacy',\n Tablesdb = 'tablesdb',\n}"]}

View File

@@ -1,6 +0,0 @@
declare enum DeploymentDownloadType {
Source = "source",
Output = "output"
}
export { DeploymentDownloadType };

View File

@@ -1,6 +0,0 @@
declare enum DeploymentDownloadType {
Source = "source",
Output = "output"
}
export { DeploymentDownloadType };

View File

@@ -1,11 +0,0 @@
'use strict';
var DeploymentDownloadType = /* @__PURE__ */ ((DeploymentDownloadType2) => {
DeploymentDownloadType2["Source"] = "source";
DeploymentDownloadType2["Output"] = "output";
return DeploymentDownloadType2;
})(DeploymentDownloadType || {});
exports.DeploymentDownloadType = DeploymentDownloadType;
//# sourceMappingURL=out.js.map
//# sourceMappingURL=deployment-download-type.js.map

View File

@@ -1 +0,0 @@
{"version":3,"sources":["../../src/enums/deployment-download-type.ts"],"names":["DeploymentDownloadType"],"mappings":"AAAO,IAAK,yBAAL,kBAAKA,4BAAL;AACH,EAAAA,wBAAA,YAAS;AACT,EAAAA,wBAAA,YAAS;AAFD,SAAAA;AAAA,GAAA","sourcesContent":["export enum DeploymentDownloadType {\n Source = 'source',\n Output = 'output',\n}"]}

View File

@@ -1,10 +0,0 @@
// src/enums/deployment-download-type.ts
var DeploymentDownloadType = /* @__PURE__ */ ((DeploymentDownloadType2) => {
DeploymentDownloadType2["Source"] = "source";
DeploymentDownloadType2["Output"] = "output";
return DeploymentDownloadType2;
})(DeploymentDownloadType || {});
export { DeploymentDownloadType };
//# sourceMappingURL=out.js.map
//# sourceMappingURL=deployment-download-type.mjs.map

View File

@@ -1 +0,0 @@
{"version":3,"sources":["../../src/enums/deployment-download-type.ts"],"names":["DeploymentDownloadType"],"mappings":";AAAO,IAAK,yBAAL,kBAAKA,4BAAL;AACH,EAAAA,wBAAA,YAAS;AACT,EAAAA,wBAAA,YAAS;AAFD,SAAAA;AAAA,GAAA","sourcesContent":["export enum DeploymentDownloadType {\n Source = 'source',\n Output = 'output',\n}"]}

View File

@@ -1,9 +0,0 @@
declare enum DeploymentStatus {
Waiting = "waiting",
Processing = "processing",
Building = "building",
Ready = "ready",
Failed = "failed"
}
export { DeploymentStatus };

View File

@@ -1,9 +0,0 @@
declare enum DeploymentStatus {
Waiting = "waiting",
Processing = "processing",
Building = "building",
Ready = "ready",
Failed = "failed"
}
export { DeploymentStatus };

View File

@@ -1,14 +0,0 @@
'use strict';
var DeploymentStatus = /* @__PURE__ */ ((DeploymentStatus2) => {
DeploymentStatus2["Waiting"] = "waiting";
DeploymentStatus2["Processing"] = "processing";
DeploymentStatus2["Building"] = "building";
DeploymentStatus2["Ready"] = "ready";
DeploymentStatus2["Failed"] = "failed";
return DeploymentStatus2;
})(DeploymentStatus || {});
exports.DeploymentStatus = DeploymentStatus;
//# sourceMappingURL=out.js.map
//# sourceMappingURL=deployment-status.js.map

View File

@@ -1 +0,0 @@
{"version":3,"sources":["../../src/enums/deployment-status.ts"],"names":["DeploymentStatus"],"mappings":"AAAO,IAAK,mBAAL,kBAAKA,sBAAL;AACH,EAAAA,kBAAA,aAAU;AACV,EAAAA,kBAAA,gBAAa;AACb,EAAAA,kBAAA,cAAW;AACX,EAAAA,kBAAA,WAAQ;AACR,EAAAA,kBAAA,YAAS;AALD,SAAAA;AAAA,GAAA","sourcesContent":["export enum DeploymentStatus {\n Waiting = 'waiting',\n Processing = 'processing',\n Building = 'building',\n Ready = 'ready',\n Failed = 'failed',\n}"]}

View File

@@ -1,13 +0,0 @@
// src/enums/deployment-status.ts
var DeploymentStatus = /* @__PURE__ */ ((DeploymentStatus2) => {
DeploymentStatus2["Waiting"] = "waiting";
DeploymentStatus2["Processing"] = "processing";
DeploymentStatus2["Building"] = "building";
DeploymentStatus2["Ready"] = "ready";
DeploymentStatus2["Failed"] = "failed";
return DeploymentStatus2;
})(DeploymentStatus || {});
export { DeploymentStatus };
//# sourceMappingURL=out.js.map
//# sourceMappingURL=deployment-status.mjs.map

View File

@@ -1 +0,0 @@
{"version":3,"sources":["../../src/enums/deployment-status.ts"],"names":["DeploymentStatus"],"mappings":";AAAO,IAAK,mBAAL,kBAAKA,sBAAL;AACH,EAAAA,kBAAA,aAAU;AACV,EAAAA,kBAAA,gBAAa;AACb,EAAAA,kBAAA,cAAW;AACX,EAAAA,kBAAA,WAAQ;AACR,EAAAA,kBAAA,YAAS;AALD,SAAAA;AAAA,GAAA","sourcesContent":["export enum DeploymentStatus {\n Waiting = 'waiting',\n Processing = 'processing',\n Building = 'building',\n Ready = 'ready',\n Failed = 'failed',\n}"]}

View File

@@ -4,8 +4,7 @@ declare enum ExecutionMethod {
PUT = "PUT",
PATCH = "PATCH",
DELETE = "DELETE",
OPTIONS = "OPTIONS",
HEAD = "HEAD"
OPTIONS = "OPTIONS"
}
export { ExecutionMethod };

View File

@@ -4,8 +4,7 @@ declare enum ExecutionMethod {
PUT = "PUT",
PATCH = "PATCH",
DELETE = "DELETE",
OPTIONS = "OPTIONS",
HEAD = "HEAD"
OPTIONS = "OPTIONS"
}
export { ExecutionMethod };

View File

@@ -7,7 +7,6 @@ var ExecutionMethod = /* @__PURE__ */ ((ExecutionMethod2) => {
ExecutionMethod2["PATCH"] = "PATCH";
ExecutionMethod2["DELETE"] = "DELETE";
ExecutionMethod2["OPTIONS"] = "OPTIONS";
ExecutionMethod2["HEAD"] = "HEAD";
return ExecutionMethod2;
})(ExecutionMethod || {});

View File

@@ -1 +1 @@
{"version":3,"sources":["../../src/enums/execution-method.ts"],"names":["ExecutionMethod"],"mappings":"AAAO,IAAK,kBAAL,kBAAKA,qBAAL;AACH,EAAAA,iBAAA,SAAM;AACN,EAAAA,iBAAA,UAAO;AACP,EAAAA,iBAAA,SAAM;AACN,EAAAA,iBAAA,WAAQ;AACR,EAAAA,iBAAA,YAAS;AACT,EAAAA,iBAAA,aAAU;AACV,EAAAA,iBAAA,UAAO;AAPC,SAAAA;AAAA,GAAA","sourcesContent":["export enum ExecutionMethod {\n GET = 'GET',\n POST = 'POST',\n PUT = 'PUT',\n PATCH = 'PATCH',\n DELETE = 'DELETE',\n OPTIONS = 'OPTIONS',\n HEAD = 'HEAD',\n}"]}
{"version":3,"sources":["../../src/enums/execution-method.ts"],"names":["ExecutionMethod"],"mappings":"AAAO,IAAK,kBAAL,kBAAKA,qBAAL;AACH,EAAAA,iBAAA,SAAM;AACN,EAAAA,iBAAA,UAAO;AACP,EAAAA,iBAAA,SAAM;AACN,EAAAA,iBAAA,WAAQ;AACR,EAAAA,iBAAA,YAAS;AACT,EAAAA,iBAAA,aAAU;AANF,SAAAA;AAAA,GAAA","sourcesContent":["export enum ExecutionMethod {\n GET = 'GET',\n POST = 'POST',\n PUT = 'PUT',\n PATCH = 'PATCH',\n DELETE = 'DELETE',\n OPTIONS = 'OPTIONS',\n}"]}

View File

@@ -6,7 +6,6 @@ var ExecutionMethod = /* @__PURE__ */ ((ExecutionMethod2) => {
ExecutionMethod2["PATCH"] = "PATCH";
ExecutionMethod2["DELETE"] = "DELETE";
ExecutionMethod2["OPTIONS"] = "OPTIONS";
ExecutionMethod2["HEAD"] = "HEAD";
return ExecutionMethod2;
})(ExecutionMethod || {});

View File

@@ -1 +1 @@
{"version":3,"sources":["../../src/enums/execution-method.ts"],"names":["ExecutionMethod"],"mappings":";AAAO,IAAK,kBAAL,kBAAKA,qBAAL;AACH,EAAAA,iBAAA,SAAM;AACN,EAAAA,iBAAA,UAAO;AACP,EAAAA,iBAAA,SAAM;AACN,EAAAA,iBAAA,WAAQ;AACR,EAAAA,iBAAA,YAAS;AACT,EAAAA,iBAAA,aAAU;AACV,EAAAA,iBAAA,UAAO;AAPC,SAAAA;AAAA,GAAA","sourcesContent":["export enum ExecutionMethod {\n GET = 'GET',\n POST = 'POST',\n PUT = 'PUT',\n PATCH = 'PATCH',\n DELETE = 'DELETE',\n OPTIONS = 'OPTIONS',\n HEAD = 'HEAD',\n}"]}
{"version":3,"sources":["../../src/enums/execution-method.ts"],"names":["ExecutionMethod"],"mappings":";AAAO,IAAK,kBAAL,kBAAKA,qBAAL;AACH,EAAAA,iBAAA,SAAM;AACN,EAAAA,iBAAA,UAAO;AACP,EAAAA,iBAAA,SAAM;AACN,EAAAA,iBAAA,WAAQ;AACR,EAAAA,iBAAA,YAAS;AACT,EAAAA,iBAAA,aAAU;AANF,SAAAA;AAAA,GAAA","sourcesContent":["export enum ExecutionMethod {\n GET = 'GET',\n POST = 'POST',\n PUT = 'PUT',\n PATCH = 'PATCH',\n DELETE = 'DELETE',\n OPTIONS = 'OPTIONS',\n}"]}

View File

@@ -1,9 +0,0 @@
declare enum ExecutionStatus {
Waiting = "waiting",
Processing = "processing",
Completed = "completed",
Failed = "failed",
Scheduled = "scheduled"
}
export { ExecutionStatus };

View File

@@ -1,9 +0,0 @@
declare enum ExecutionStatus {
Waiting = "waiting",
Processing = "processing",
Completed = "completed",
Failed = "failed",
Scheduled = "scheduled"
}
export { ExecutionStatus };

View File

@@ -1,14 +0,0 @@
'use strict';
var ExecutionStatus = /* @__PURE__ */ ((ExecutionStatus2) => {
ExecutionStatus2["Waiting"] = "waiting";
ExecutionStatus2["Processing"] = "processing";
ExecutionStatus2["Completed"] = "completed";
ExecutionStatus2["Failed"] = "failed";
ExecutionStatus2["Scheduled"] = "scheduled";
return ExecutionStatus2;
})(ExecutionStatus || {});
exports.ExecutionStatus = ExecutionStatus;
//# sourceMappingURL=out.js.map
//# sourceMappingURL=execution-status.js.map

View File

@@ -1 +0,0 @@
{"version":3,"sources":["../../src/enums/execution-status.ts"],"names":["ExecutionStatus"],"mappings":"AAAO,IAAK,kBAAL,kBAAKA,qBAAL;AACH,EAAAA,iBAAA,aAAU;AACV,EAAAA,iBAAA,gBAAa;AACb,EAAAA,iBAAA,eAAY;AACZ,EAAAA,iBAAA,YAAS;AACT,EAAAA,iBAAA,eAAY;AALJ,SAAAA;AAAA,GAAA","sourcesContent":["export enum ExecutionStatus {\n Waiting = 'waiting',\n Processing = 'processing',\n Completed = 'completed',\n Failed = 'failed',\n Scheduled = 'scheduled',\n}"]}

View File

@@ -1,13 +0,0 @@
// src/enums/execution-status.ts
var ExecutionStatus = /* @__PURE__ */ ((ExecutionStatus2) => {
ExecutionStatus2["Waiting"] = "waiting";
ExecutionStatus2["Processing"] = "processing";
ExecutionStatus2["Completed"] = "completed";
ExecutionStatus2["Failed"] = "failed";
ExecutionStatus2["Scheduled"] = "scheduled";
return ExecutionStatus2;
})(ExecutionStatus || {});
export { ExecutionStatus };
//# sourceMappingURL=out.js.map
//# sourceMappingURL=execution-status.mjs.map

View File

@@ -1 +0,0 @@
{"version":3,"sources":["../../src/enums/execution-status.ts"],"names":["ExecutionStatus"],"mappings":";AAAO,IAAK,kBAAL,kBAAKA,qBAAL;AACH,EAAAA,iBAAA,aAAU;AACV,EAAAA,iBAAA,gBAAa;AACb,EAAAA,iBAAA,eAAY;AACZ,EAAAA,iBAAA,YAAS;AACT,EAAAA,iBAAA,eAAY;AALJ,SAAAA;AAAA,GAAA","sourcesContent":["export enum ExecutionStatus {\n Waiting = 'waiting',\n Processing = 'processing',\n Completed = 'completed',\n Failed = 'failed',\n Scheduled = 'scheduled',\n}"]}

View File

@@ -1,7 +0,0 @@
declare enum ExecutionTrigger {
Http = "http",
Schedule = "schedule",
Event = "event"
}
export { ExecutionTrigger };

View File

@@ -1,7 +0,0 @@
declare enum ExecutionTrigger {
Http = "http",
Schedule = "schedule",
Event = "event"
}
export { ExecutionTrigger };

View File

@@ -1,12 +0,0 @@
'use strict';
var ExecutionTrigger = /* @__PURE__ */ ((ExecutionTrigger2) => {
ExecutionTrigger2["Http"] = "http";
ExecutionTrigger2["Schedule"] = "schedule";
ExecutionTrigger2["Event"] = "event";
return ExecutionTrigger2;
})(ExecutionTrigger || {});
exports.ExecutionTrigger = ExecutionTrigger;
//# sourceMappingURL=out.js.map
//# sourceMappingURL=execution-trigger.js.map

View File

@@ -1 +0,0 @@
{"version":3,"sources":["../../src/enums/execution-trigger.ts"],"names":["ExecutionTrigger"],"mappings":"AAAO,IAAK,mBAAL,kBAAKA,sBAAL;AACH,EAAAA,kBAAA,UAAO;AACP,EAAAA,kBAAA,cAAW;AACX,EAAAA,kBAAA,WAAQ;AAHA,SAAAA;AAAA,GAAA","sourcesContent":["export enum ExecutionTrigger {\n Http = 'http',\n Schedule = 'schedule',\n Event = 'event',\n}"]}

View File

@@ -1,11 +0,0 @@
// src/enums/execution-trigger.ts
var ExecutionTrigger = /* @__PURE__ */ ((ExecutionTrigger2) => {
ExecutionTrigger2["Http"] = "http";
ExecutionTrigger2["Schedule"] = "schedule";
ExecutionTrigger2["Event"] = "event";
return ExecutionTrigger2;
})(ExecutionTrigger || {});
export { ExecutionTrigger };
//# sourceMappingURL=out.js.map
//# sourceMappingURL=execution-trigger.mjs.map

View File

@@ -1 +0,0 @@
{"version":3,"sources":["../../src/enums/execution-trigger.ts"],"names":["ExecutionTrigger"],"mappings":";AAAO,IAAK,mBAAL,kBAAKA,sBAAL;AACH,EAAAA,kBAAA,UAAO;AACP,EAAAA,kBAAA,cAAW;AACX,EAAAA,kBAAA,WAAQ;AAHA,SAAAA;AAAA,GAAA","sourcesContent":["export enum ExecutionTrigger {\n Http = 'http',\n Schedule = 'schedule',\n Event = 'event',\n}"]}

View File

@@ -1,19 +0,0 @@
declare enum Framework {
Analog = "analog",
Angular = "angular",
Nextjs = "nextjs",
React = "react",
Nuxt = "nuxt",
Vue = "vue",
Sveltekit = "sveltekit",
Astro = "astro",
Tanstackstart = "tanstack-start",
Remix = "remix",
Lynx = "lynx",
Flutter = "flutter",
Reactnative = "react-native",
Vite = "vite",
Other = "other"
}
export { Framework };

View File

@@ -1,19 +0,0 @@
declare enum Framework {
Analog = "analog",
Angular = "angular",
Nextjs = "nextjs",
React = "react",
Nuxt = "nuxt",
Vue = "vue",
Sveltekit = "sveltekit",
Astro = "astro",
Tanstackstart = "tanstack-start",
Remix = "remix",
Lynx = "lynx",
Flutter = "flutter",
Reactnative = "react-native",
Vite = "vite",
Other = "other"
}
export { Framework };

View File

@@ -1,24 +0,0 @@
'use strict';
var Framework = /* @__PURE__ */ ((Framework2) => {
Framework2["Analog"] = "analog";
Framework2["Angular"] = "angular";
Framework2["Nextjs"] = "nextjs";
Framework2["React"] = "react";
Framework2["Nuxt"] = "nuxt";
Framework2["Vue"] = "vue";
Framework2["Sveltekit"] = "sveltekit";
Framework2["Astro"] = "astro";
Framework2["Tanstackstart"] = "tanstack-start";
Framework2["Remix"] = "remix";
Framework2["Lynx"] = "lynx";
Framework2["Flutter"] = "flutter";
Framework2["Reactnative"] = "react-native";
Framework2["Vite"] = "vite";
Framework2["Other"] = "other";
return Framework2;
})(Framework || {});
exports.Framework = Framework;
//# sourceMappingURL=out.js.map
//# sourceMappingURL=framework.js.map

View File

@@ -1 +0,0 @@
{"version":3,"sources":["../../src/enums/framework.ts"],"names":["Framework"],"mappings":"AAAO,IAAK,YAAL,kBAAKA,eAAL;AACH,EAAAA,WAAA,YAAS;AACT,EAAAA,WAAA,aAAU;AACV,EAAAA,WAAA,YAAS;AACT,EAAAA,WAAA,WAAQ;AACR,EAAAA,WAAA,UAAO;AACP,EAAAA,WAAA,SAAM;AACN,EAAAA,WAAA,eAAY;AACZ,EAAAA,WAAA,WAAQ;AACR,EAAAA,WAAA,mBAAgB;AAChB,EAAAA,WAAA,WAAQ;AACR,EAAAA,WAAA,UAAO;AACP,EAAAA,WAAA,aAAU;AACV,EAAAA,WAAA,iBAAc;AACd,EAAAA,WAAA,UAAO;AACP,EAAAA,WAAA,WAAQ;AAfA,SAAAA;AAAA,GAAA","sourcesContent":["export enum Framework {\n Analog = 'analog',\n Angular = 'angular',\n Nextjs = 'nextjs',\n React = 'react',\n Nuxt = 'nuxt',\n Vue = 'vue',\n Sveltekit = 'sveltekit',\n Astro = 'astro',\n Tanstackstart = 'tanstack-start',\n Remix = 'remix',\n Lynx = 'lynx',\n Flutter = 'flutter',\n Reactnative = 'react-native',\n Vite = 'vite',\n Other = 'other',\n}"]}

View File

@@ -1,23 +0,0 @@
// src/enums/framework.ts
var Framework = /* @__PURE__ */ ((Framework2) => {
Framework2["Analog"] = "analog";
Framework2["Angular"] = "angular";
Framework2["Nextjs"] = "nextjs";
Framework2["React"] = "react";
Framework2["Nuxt"] = "nuxt";
Framework2["Vue"] = "vue";
Framework2["Sveltekit"] = "sveltekit";
Framework2["Astro"] = "astro";
Framework2["Tanstackstart"] = "tanstack-start";
Framework2["Remix"] = "remix";
Framework2["Lynx"] = "lynx";
Framework2["Flutter"] = "flutter";
Framework2["Reactnative"] = "react-native";
Framework2["Vite"] = "vite";
Framework2["Other"] = "other";
return Framework2;
})(Framework || {});
export { Framework };
//# sourceMappingURL=out.js.map
//# sourceMappingURL=framework.mjs.map

View File

@@ -1 +0,0 @@
{"version":3,"sources":["../../src/enums/framework.ts"],"names":["Framework"],"mappings":";AAAO,IAAK,YAAL,kBAAKA,eAAL;AACH,EAAAA,WAAA,YAAS;AACT,EAAAA,WAAA,aAAU;AACV,EAAAA,WAAA,YAAS;AACT,EAAAA,WAAA,WAAQ;AACR,EAAAA,WAAA,UAAO;AACP,EAAAA,WAAA,SAAM;AACN,EAAAA,WAAA,eAAY;AACZ,EAAAA,WAAA,WAAQ;AACR,EAAAA,WAAA,mBAAgB;AAChB,EAAAA,WAAA,WAAQ;AACR,EAAAA,WAAA,UAAO;AACP,EAAAA,WAAA,aAAU;AACV,EAAAA,WAAA,iBAAc;AACd,EAAAA,WAAA,UAAO;AACP,EAAAA,WAAA,WAAQ;AAfA,SAAAA;AAAA,GAAA","sourcesContent":["export enum Framework {\n Analog = 'analog',\n Angular = 'angular',\n Nextjs = 'nextjs',\n React = 'react',\n Nuxt = 'nuxt',\n Vue = 'vue',\n Sveltekit = 'sveltekit',\n Astro = 'astro',\n Tanstackstart = 'tanstack-start',\n Remix = 'remix',\n Lynx = 'lynx',\n Flutter = 'flutter',\n Reactnative = 'react-native',\n Vite = 'vite',\n Other = 'other',\n}"]}

View File

@@ -1,7 +0,0 @@
declare enum HealthAntivirusStatus {
Disabled = "disabled",
Offline = "offline",
Online = "online"
}
export { HealthAntivirusStatus };

View File

@@ -1,7 +0,0 @@
declare enum HealthAntivirusStatus {
Disabled = "disabled",
Offline = "offline",
Online = "online"
}
export { HealthAntivirusStatus };

View File

@@ -1,12 +0,0 @@
'use strict';
var HealthAntivirusStatus = /* @__PURE__ */ ((HealthAntivirusStatus2) => {
HealthAntivirusStatus2["Disabled"] = "disabled";
HealthAntivirusStatus2["Offline"] = "offline";
HealthAntivirusStatus2["Online"] = "online";
return HealthAntivirusStatus2;
})(HealthAntivirusStatus || {});
exports.HealthAntivirusStatus = HealthAntivirusStatus;
//# sourceMappingURL=out.js.map
//# sourceMappingURL=health-antivirus-status.js.map

Some files were not shown because too many files have changed in this diff Show More