diff --git a/migrations/20260403231603_feeds.js b/migrations/20260403231603_feeds.js new file mode 100644 index 00000000..6fa607ed --- /dev/null +++ b/migrations/20260403231603_feeds.js @@ -0,0 +1,100 @@ +exports.up = async function(knex) { + await knex.schema.createTable('feeds', (table) => { + table.increments('id'); + + table.integer('user_id') + .notNullable() + .references('id') + .inTable('users') + .onDelete('cascade'); + + table.string('name') + .notNullable(); + + table.string('slug') + .notNullable(); + + table.boolean('public'); + table.boolean('primary'); + + table.text('comment'); + table.json('meta'); + + table.datetime('created_at') + .notNullable() + .defaultTo(knex.fn.now()); + }); + + await knex.schema.createTable('feeds_entities', (table) => { + table.increments('id'); + + table.integer('feed_id') + .notNullable() + .references('id') + .inTable('feeds') + .onDelete('cascade'); + + table.integer('entity_id') + .notNullable() + .references('id') + .inTable('entities') + .onDelete('cascade'); + + table.text('comment'); + + table.datetime('created_at') + .notNullable() + .defaultTo(knex.fn.now()); + }); + + await knex.schema.createTable('feeds_actors', (table) => { + table.increments('id'); + + table.integer('feed_id') + .notNullable() + .references('id') + .inTable('feeds') + .onDelete('cascade'); + + table.integer('actor_id') + .notNullable() + .references('id') + .inTable('actors') + .onDelete('cascade'); + + table.text('comment'); + + table.datetime('created_at') + .notNullable() + .defaultTo(knex.fn.now()); + }); + + await knex.schema.createTable('feeds_tags', (table) => { + table.increments('id'); + + table.integer('feed_id') + .notNullable() + .references('id') + .inTable('feeds') + .onDelete('cascade'); + + table.integer('tag_id') + .notNullable() + .references('id') + .inTable('tags') + .onDelete('cascade'); + + table.text('comment'); + + table.datetime('created_at') + .notNullable() + .defaultTo(knex.fn.now()); + }); +}; + +exports.down = async function(knex) { + await knex.schema.dropTable('feeds_tags'); + await knex.schema.dropTable('feeds_actors'); + await knex.schema.dropTable('feeds_entities'); + await knex.schema.dropTable('feeds'); +}; diff --git a/src/utils/http.js b/src/utils/http.js index c9a10df7..19d1a100 100755 --- a/src/utils/http.js +++ b/src/utils/http.js @@ -8,7 +8,6 @@ const fs = require('fs').promises; // const util = require('util'); // const stream = require('stream'); const { pipeline } = require('stream/promises'); -const tunnel = require('tunnel'); const Bottleneck = require('bottleneck'); const { JSDOM, toughCookie } = require('jsdom'); const puppeteer = require('puppeteer-extra'); @@ -328,11 +327,8 @@ const defaultAgent = new undici.Agent({ }, }); -const proxyAgent = tunnel.httpsOverHttp({ - proxy: { - host: config.proxy.host, - port: config.proxy.port, - }, +const proxyAgent = new undici.ProxyAgent({ + uri: `http://${config.proxy.host}:${config.proxy.port}`, }); async function request(method = 'get', url, body, requestOptions = {}, limiter, redirects = 0) {