100 lines
3.7 KiB
TypeScript
100 lines
3.7 KiB
TypeScript
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;
|