logggai
Version:
AI-powered CLI for transforming your development work into professional content
100 lines • 4.55 kB
JavaScript
;
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