UNPKG

logggai

Version:

AI-powered CLI for transforming your development work into professional content

100 lines 4.55 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.sanitizeTinybirdPayload = sanitizeTinybirdPayload; exports.pushToTinybird = pushToTinybird; // Correction import getConfig pour compatibilité CommonJS/ESM const { getConfig } = require('./config'); const axios_1 = require("axios"); /** * Helper générique pour pousser des événements/contenu dans Tinybird (Event API) * Utilisable dans la CLI (Node.js) * * @param dataset - nom du datasource Tinybird (ex: 'posts', 'projects', ...) * @param payload - objet à envoyer (doit matcher le schéma du datasource) * @param options - options additionnelles (token, endpoint, logs, etc.) */ function sanitizeTinybirdPayload(dataset, payload) { // Champs par dataset if (dataset === 'posts') { return { ...payload, tags: Array.isArray(payload.tags) ? payload.tags : [], publishedPlatforms: Array.isArray(payload.publishedPlatforms) ? payload.publishedPlatforms : [], project_id: payload.project_id ? String(payload.project_id) : '', originalContent: payload.originalContent ?? '', promptId: payload.promptId ?? '', organizationId: payload.organizationId ?? '', archived: typeof payload.archived === 'boolean' ? (payload.archived ? 1 : 0) : (typeof payload.archived === 'number' ? payload.archived : 0), archivedAt: payload.archivedAt ?? null, isShared: typeof payload.isShared === 'boolean' ? (payload.isShared ? 1 : 0) : (typeof payload.isShared === 'number' ? payload.isShared : 0), sharedBy: payload.sharedBy ?? '', sharedAt: payload.sharedAt ?? null, isPublic: typeof payload.isPublic === 'boolean' ? (payload.isPublic ? 1 : 0) : (typeof payload.isPublic === 'number' ? payload.isPublic : 0), source: payload.source ?? '', }; } if (dataset === 'publish_logs') { return { ...payload, publishedUrl: payload.publishedUrl ?? '', error: payload.error ?? '', platformResponse: JSON.stringify(payload.platformResponse ?? {}), postId: payload.postId ?? '', userId: payload.userId ?? '', platform: payload.platform ?? '', success: payload.success ?? false, publishedAt: payload.publishedAt ?? '', id: payload.id ?? '', }; } if (dataset === 'usage_tracking') { return { ...payload, postsCreated: payload.postsCreated ?? 0, aiProcessed: payload.aiProcessed ?? 0, apiCalls: payload.apiCalls ?? 0, socialPosts: payload.socialPosts ?? 0, organizationId: payload.organizationId ?? '', userId: payload.userId ?? '', periodStart: payload.periodStart ?? '', periodEnd: payload.periodEnd ?? '', createdAt: payload.createdAt ?? '', updatedAt: payload.updatedAt ?? '', id: payload.id ?? '', }; } return payload; } async function pushToTinybird(dataset, payload, options) { const sanitized = sanitizeTinybirdPayload(dataset, payload); // Priorité à la config CLI, fallback sur process.env const TB_HOST = options?.endpoint || getConfig('tinybirdHost') || process.env.TINYBIRD_HOST || 'https://api.tinybird.co'; const TB_TOKEN = options?.token || getConfig('tinybirdToken') || process.env.TINYBIRD_TOKEN; if (!TB_TOKEN) throw new Error('Tinybird token is missing (set TINYBIRD_TOKEN env variable or CLI config)'); // Endpoint Event API (dataset = nom du datasource) const url = `${TB_HOST}/v0/events?name=${encodeURIComponent(dataset)}`; try { if (options?.log) { console.log(`[Tinybird] → POST ${url}`); console.log(`[Tinybird] Payload:`, sanitized); } const res = await axios_1.default.post(url, sanitized, { headers: { 'Authorization': `Bearer ${TB_TOKEN}`, 'Content-Type': 'application/json', }, timeout: 5000, }); if (options?.log) { console.log(`[Tinybird] Status: ${res.status}`); } } catch (err) { console.error('[Tinybird] Ingestion error:', err?.response?.data || err.message); throw err; } } // Exemple d'utilisation : // await pushToTinybird('posts', { ...postData, user_id, organization_id }) //# sourceMappingURL=tinybird.js.map