import { Client, Databases, Storage, Query, Account } from 'appwrite'; if (typeof console !== 'undefined' && !(console.warn as any).__agyPatched) { const baseWarn = console.warn.bind(console); const patchedWarn = (...warnArgs: any[]) => { if (warnArgs[0] && typeof warnArgs[0] === 'string' && warnArgs[0].includes('built for Appwrite')) return; baseWarn(...warnArgs); }; (patchedWarn as any).__agyPatched = true; console.warn = patchedWarn; } // Robust instance-level patch for Appwrite Client (supports both Appwrite 1.x Databases and 2.x TablesDB) function patchClientInstance(clientInstance: any) { if (clientInstance._isPatched || ((Client.prototype as any)._isPatched && clientInstance !== Client.prototype)) return clientInstance; const originalCall = clientInstance.call; clientInstance.call = async function (method: string, url: any, headers: any = {}, params: any = {}, responseType: string = 'json') { let urlStr = url instanceof URL ? url.toString() : String(url); if (/\/databases\/([^/]+)\/collections/.test(urlStr)) { urlStr = urlStr .replace(/\/databases\/([^/]+)\/collections\/([^/]+)\/documents/g, '/tablesdb/$1/tables/$2/rows') .replace(/\/databases\/([^/]+)\/collections/g, '/tablesdb/$1/tables'); url = url instanceof URL ? new URL(urlStr) : urlStr; if (params && typeof params === 'object') { params = { ...params }; if ('documentId' in params) { params.rowId = params.documentId; delete params.documentId; } if ('collectionId' in params) { params.tableId = params.collectionId; delete params.collectionId; } if ('documentSecurity' in params) { params.rowSecurity = params.documentSecurity; delete params.documentSecurity; } } } const res = await originalCall.call(this, method, url, headers, params, responseType); if (res && typeof res === 'object') { const plain = JSON.parse(JSON.stringify(res)); if (Array.isArray(plain.rows) && !plain.documents) plain.documents = plain.rows; if (Array.isArray(plain.tables) && !plain.collections) plain.collections = plain.tables; if (Array.isArray(plain.columns) && !plain.attributes) plain.attributes = plain.columns; return plain; } return res; }; clientInstance._isPatched = true; return clientInstance; } patchClientInstance(Client.prototype); const client = new Client(); export const endpoint = process.env.NEXT_PUBLIC_APPWRITE_ENDPOINT || 'https://nyc.cloud.appwrite.io/v1'; export const projectId = process.env.NEXT_PUBLIC_APPWRITE_PROJECT_ID || '6aef63d9002c07371b40'; export const databaseId = process.env.APPWRITE_DATABASE_ID || 'almeira'; client .setEndpoint(endpoint) .setProject(projectId); patchClientInstance(client); export const databases = new Databases(client); export const storage = new Storage(client); export const account = new Account(client); export { Query }; export const APPWRITE_ALMEIRA_CONFIG = { endpoint, projectId, databaseId, mediaBucketId: process.env.NEXT_PUBLIC_APPWRITE_MEDIA_BUCKET_ID || 'media_bucket', collections: { // Existentes posts: 'posts', clients: 'clients', metrics: 'metrics', settings: 'settings', // Nuevas publicationTypes: 'publication_types', categories: 'categories', postsCategories: 'posts_categories', clientTypes: 'client_types', countries: 'countries', departments: 'departments', cities: 'cities', paymentMethods: 'payment_methods', contracts: 'contracts', contractDetails: 'contract_details', whatsappMessages: 'whatsapp_messages', } }; export default client;