@atproto/ozone 0.2.4 → 0.2.5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +6 -0
- package/dist/api/label/queryLabels.d.ts.map +1 -1
- package/dist/api/label/queryLabels.js +13 -21
- package/dist/api/label/queryLabels.js.map +1 -1
- package/dist/assignment/index.d.ts.map +1 -1
- package/dist/assignment/index.js +9 -12
- package/dist/assignment/index.js.map +1 -1
- package/dist/daemon/event-pusher.d.ts +7 -1
- package/dist/daemon/event-pusher.d.ts.map +1 -1
- package/dist/db/index.d.ts +4 -5
- package/dist/db/index.d.ts.map +1 -1
- package/dist/db/index.js +2 -1
- package/dist/db/index.js.map +1 -1
- package/dist/db/migrations/20241220T144630860Z-stats-materialized-views.d.ts +1 -2
- package/dist/db/migrations/20241220T144630860Z-stats-materialized-views.d.ts.map +1 -1
- package/dist/db/migrations/20241220T144630860Z-stats-materialized-views.js.map +1 -1
- package/dist/db/migrations/20250718T150931000Z-update-appeal-reason-stats.d.ts +1 -2
- package/dist/db/migrations/20250718T150931000Z-update-appeal-reason-stats.d.ts.map +1 -1
- package/dist/db/migrations/20250718T150931000Z-update-appeal-reason-stats.js.map +1 -1
- package/dist/db/migrations/provider.d.ts +2 -1
- package/dist/db/migrations/provider.d.ts.map +1 -1
- package/dist/db/migrations/provider.js.map +1 -1
- package/dist/db/pagination.d.ts +4 -3
- package/dist/db/pagination.d.ts.map +1 -1
- package/dist/db/pagination.js +4 -4
- package/dist/db/pagination.js.map +1 -1
- package/dist/db/types.d.ts +1 -1
- package/dist/db/types.d.ts.map +1 -1
- package/dist/db/types.js.map +1 -1
- package/dist/mod-service/index.d.ts.map +1 -1
- package/dist/mod-service/index.js +28 -52
- package/dist/mod-service/index.js.map +1 -1
- package/dist/mod-service/report.d.ts.map +1 -1
- package/dist/mod-service/report.js.map +1 -1
- package/dist/mod-service/status.d.ts +23 -128
- package/dist/mod-service/status.d.ts.map +1 -1
- package/dist/mod-service/views.js +7 -11
- package/dist/mod-service/views.js.map +1 -1
- package/dist/queue/service.js +1 -3
- package/dist/queue/service.js.map +1 -1
- package/dist/report/activity.d.ts +12 -1
- package/dist/report/activity.d.ts.map +1 -1
- package/dist/report/stats.d.ts.map +1 -1
- package/dist/report/stats.js.map +1 -1
- package/dist/scheduled-action/service.d.ts.map +1 -1
- package/dist/scheduled-action/service.js +16 -20
- package/dist/scheduled-action/service.js.map +1 -1
- package/dist/set/service.d.ts +10 -1
- package/dist/set/service.d.ts.map +1 -1
- package/dist/set/service.js +5 -2
- package/dist/set/service.js.map +1 -1
- package/dist/team/index.d.ts.map +1 -1
- package/dist/team/index.js +5 -4
- package/dist/team/index.js.map +1 -1
- package/dist/verification/issuer.d.ts +13 -3
- package/dist/verification/issuer.d.ts.map +1 -1
- package/dist/verification/service.d.ts +13 -1
- package/dist/verification/service.d.ts.map +1 -1
- package/dist/verification/service.js +1 -1
- package/dist/verification/service.js.map +1 -1
- package/package.json +7 -7
- package/src/api/label/queryLabels.ts +11 -14
- package/src/assignment/index.ts +15 -18
- package/src/db/index.ts +1 -1
- package/src/db/migrations/20241220T144630860Z-stats-materialized-views.ts +1 -2
- package/src/db/migrations/20250718T150931000Z-update-appeal-reason-stats.ts +1 -2
- package/src/db/migrations/provider.ts +2 -1
- package/src/db/pagination.ts +18 -18
- package/src/db/types.ts +3 -1
- package/src/mod-service/index.ts +78 -71
- package/src/mod-service/report.ts +5 -3
- package/src/mod-service/views.ts +16 -16
- package/src/queue/service.ts +5 -5
- package/src/report/stats.ts +5 -3
- package/src/scheduled-action/service.ts +22 -20
- package/src/set/service.ts +17 -14
- package/src/team/index.ts +6 -5
- package/src/verification/service.ts +2 -2
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"20250718T150931000Z-update-appeal-reason-stats.d.ts","sourceRoot":"","sources":["../../../src/db/migrations/20250718T150931000Z-update-appeal-reason-stats.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAO,MAAM,QAAQ,CAAA;
|
|
1
|
+
{"version":3,"file":"20250718T150931000Z-update-appeal-reason-stats.d.ts","sourceRoot":"","sources":["../../../src/db/migrations/20250718T150931000Z-update-appeal-reason-stats.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAO,MAAM,QAAQ,CAAA;AAMpC,wBAAsB,EAAE,CAAC,EAAE,EAAE,MAAM,CAAC,GAAG,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,CA0JvD;AAED,wBAAsB,IAAI,CAAC,EAAE,EAAE,MAAM,CAAC,GAAG,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,CAmJzD"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"20250718T150931000Z-update-appeal-reason-stats.js","sourceRoot":"","sources":["../../../src/db/migrations/20250718T150931000Z-update-appeal-reason-stats.ts"],"names":[],"mappings":"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","sourcesContent":["import { Kysely, sql } from 'kysely'\nimport { OZONE_APPEAL_REASON_TYPE } from '../../api/util.js'\nimport { REASONAPPEAL } from '../../lexicon/types/com/atproto/moderation/defs.js'\nimport { DatabaseSchemaType } from '../schema/index.js'\nimport * as modEvent from '../schema/moderation_event.js'\nimport * as recordEventsStats from '../schema/record_events_stats.js'\n\nexport async function up(db: Kysely<any>): Promise<void> {\n // Drop and recreate materialized views to update appeal reason counting\n // to include both REASONAPPEAL and OZONE_APPEAL_REASON_TYPE\n // The primary difference between the old and new query is that we were using = and != operators\n // to match against the meta->>'reportType' field and now we use IN and NOT IN\n\n // Drop existing materialized views in reverse dependency order\n await db.schema\n .dropView('account_record_events_stats')\n .materialized()\n .execute()\n await db.schema.dropView('record_events_stats').materialized().execute()\n await db.schema.dropView('account_events_stats').materialized().execute()\n\n // Recreate account_events_stats with updated appeal counting\n await db.schema\n .createView('account_events_stats')\n .materialized()\n .as(\n (db as Kysely<modEvent.PartialDB>)\n .selectFrom('moderation_event')\n .where('subjectType', '=', 'com.atproto.admin.defs#repoRef')\n .where('subjectUri', 'is', null)\n .select('subjectDid')\n .select([\n (eb) =>\n sql<number>`COUNT(*) FILTER(\n WHERE ${eb.ref('action')} = 'tools.ozone.moderation.defs#modEventTakedown'\n AND ${eb.ref('durationInHours')} IS NULL\n )`.as('takedownCount'),\n (eb) =>\n sql<number>`COUNT(*) FILTER(\n WHERE ${eb.ref('action')} = 'tools.ozone.moderation.defs#modEventTakedown'\n AND ${eb.ref('durationInHours')} IS NOT NULL\n )`.as('suspendCount'),\n (eb) =>\n sql<number>`COUNT(*) FILTER(\n WHERE ${eb.ref('action')} = 'tools.ozone.moderation.defs#modEventEscalate'\n )`.as('escalateCount'),\n (eb) =>\n sql<number>`COUNT(*) FILTER(\n WHERE ${eb.ref('action')} = 'tools.ozone.moderation.defs#modEventReport'\n AND ${eb.ref('meta')} ->> 'reportType' NOT IN (${REASONAPPEAL}, ${OZONE_APPEAL_REASON_TYPE})\n )`.as('reportCount'),\n (eb) =>\n sql<number>`COUNT(*) FILTER(\n WHERE ${eb.ref('action')} = 'tools.ozone.moderation.defs#modEventReport'\n AND ${eb.ref('meta')} ->> 'reportType' IN (${REASONAPPEAL}, ${OZONE_APPEAL_REASON_TYPE})\n )`.as('appealCount'),\n ])\n .groupBy('subjectDid'),\n )\n .execute()\n\n // Recreate record_events_stats with updated appeal counting\n await db.schema\n .createView('record_events_stats')\n .materialized()\n .as(\n (db as Kysely<modEvent.PartialDB>)\n .selectFrom('moderation_event')\n .select([\n 'subjectDid',\n 'subjectUri',\n (eb) =>\n sql<number>`COUNT(*) FILTER (WHERE ${eb.ref('action')} = 'tools.ozone.moderation.defs#modEventEscalate')`.as(\n 'escalateCount',\n ),\n (eb) =>\n sql<number>`COUNT(*) FILTER (WHERE ${eb.ref('action')} = 'tools.ozone.moderation.defs#modEventReport' AND ${eb.ref('meta')} ->> 'reportType' NOT IN (${REASONAPPEAL}, ${OZONE_APPEAL_REASON_TYPE}))`.as(\n 'reportCount',\n ),\n (eb) =>\n sql<number>`COUNT(*) FILTER (WHERE ${eb.ref('action')} = 'tools.ozone.moderation.defs#modEventReport' AND ${eb.ref('meta')} ->> 'reportType' IN (${REASONAPPEAL}, ${OZONE_APPEAL_REASON_TYPE}))`.as(\n 'appealCount',\n ),\n ])\n .where('subjectType', '=', 'com.atproto.repo.strongRef')\n .where('subjectUri', 'is not', null)\n .groupBy(['subjectDid', 'subjectUri']),\n )\n .execute()\n\n // Recreate account_record_events_stats (unchanged logic, but depends on record_events_stats)\n await db.schema\n .createView('account_record_events_stats')\n .materialized()\n .as(\n (db as Kysely<recordEventsStats.PartialDB>)\n .selectFrom('record_events_stats')\n .select([\n 'subjectDid',\n (eb) =>\n sql<number>`SUM(${eb.ref('reportCount')})::bigint`.as(\n 'totalReports',\n ),\n (eb) =>\n sql<number>`COUNT(*) FILTER (WHERE ${eb.ref('reportCount')} > 0)`.as(\n 'reportedCount',\n ),\n (eb) =>\n sql<number>`COUNT(*) FILTER (WHERE ${eb.ref('escalateCount')} > 0)`.as(\n 'escalatedCount',\n ),\n (eb) =>\n sql<number>`COUNT(*) FILTER (WHERE ${eb.ref('appealCount')} > 0)`.as(\n 'appealedCount',\n ),\n ])\n .groupBy('subjectDid'),\n )\n .execute()\n\n // Recreate all indexes for the materialized views\n await db.schema\n .createIndex('account_events_stats_did_idx')\n .unique()\n .on('account_events_stats')\n .column('subjectDid')\n .execute()\n\n await db.schema\n .createIndex('account_events_stats_suspend_count_idx')\n .on('account_events_stats')\n .expression(sql`\"suspendCount\" ASC NULLS FIRST`)\n .column('subjectDid')\n .execute()\n\n await db.schema\n .createIndex('record_events_stats_uri_idx')\n .unique()\n .on('record_events_stats')\n .column('subjectUri')\n .execute()\n\n await db.schema\n .createIndex('record_events_stats_did_idx')\n .on('record_events_stats')\n .column('subjectDid')\n .execute()\n\n await db.schema\n .createIndex('account_record_events_stats_did_idx')\n .unique()\n .on('account_record_events_stats')\n .column('subjectDid')\n .execute()\n\n await db.schema\n .createIndex('account_record_events_stats_reported_count_idx')\n .on('account_record_events_stats')\n .expression(sql`\"reportedCount\" ASC NULLS FIRST`)\n .column('subjectDid')\n .execute()\n}\n\nexport async function down(db: Kysely<DatabaseSchemaType>): Promise<void> {\n // Drop the updated materialized views\n await db.schema\n .dropView('account_record_events_stats')\n .materialized()\n .execute()\n await db.schema.dropView('record_events_stats').materialized().execute()\n await db.schema.dropView('account_events_stats').materialized().execute()\n\n // Recreate the original views with single appeal reason type\n await db.schema\n .createView('account_events_stats')\n .materialized()\n .as(\n (db as Kysely<modEvent.PartialDB>)\n .selectFrom('moderation_event')\n .where('subjectType', '=', 'com.atproto.admin.defs#repoRef')\n .where('subjectUri', 'is', null)\n .select('subjectDid')\n .select([\n (eb) =>\n sql<number>`COUNT(*) FILTER(\n WHERE ${eb.ref('action')} = 'tools.ozone.moderation.defs#modEventTakedown'\n AND ${eb.ref('durationInHours')} IS NULL\n )`.as('takedownCount'),\n (eb) =>\n sql<number>`COUNT(*) FILTER(\n WHERE ${eb.ref('action')} = 'tools.ozone.moderation.defs#modEventTakedown'\n AND ${eb.ref('durationInHours')} IS NOT NULL\n )`.as('suspendCount'),\n (eb) =>\n sql<number>`COUNT(*) FILTER(\n WHERE ${eb.ref('action')} = 'tools.ozone.moderation.defs#modEventEscalate'\n )`.as('escalateCount'),\n (eb) =>\n sql<number>`COUNT(*) FILTER(\n WHERE ${eb.ref('action')} = 'tools.ozone.moderation.defs#modEventReport'\n AND ${eb.ref('meta')} ->> 'reportType' != ${REASONAPPEAL}\n )`.as('reportCount'),\n (eb) =>\n sql<number>`COUNT(*) FILTER(\n WHERE ${eb.ref('action')} = 'tools.ozone.moderation.defs#modEventReport'\n AND ${eb.ref('meta')} ->> 'reportType' = ${REASONAPPEAL}\n )`.as('appealCount'),\n ])\n .groupBy('subjectDid'),\n )\n .execute()\n\n await db.schema\n .createView('record_events_stats')\n .materialized()\n .as(\n (db as Kysely<modEvent.PartialDB>)\n .selectFrom('moderation_event')\n .select([\n 'subjectDid',\n 'subjectUri',\n (eb) =>\n sql<number>`COUNT(*) FILTER (WHERE ${eb.ref('action')} = 'tools.ozone.moderation.defs#modEventEscalate')`.as(\n 'escalateCount',\n ),\n (eb) =>\n sql<number>`COUNT(*) FILTER (WHERE ${eb.ref('action')} = 'tools.ozone.moderation.defs#modEventReport' AND ${eb.ref('meta')} ->> 'reportType' != 'com.atproto.moderation.defs#reasonAppeal')`.as(\n 'reportCount',\n ),\n (eb) =>\n sql<number>`COUNT(*) FILTER (WHERE ${eb.ref('action')} = 'tools.ozone.moderation.defs#modEventReport' AND ${eb.ref('meta')} ->> 'reportType' = 'com.atproto.moderation.defs#reasonAppeal')`.as(\n 'appealCount',\n ),\n ])\n .where('subjectType', '=', 'com.atproto.repo.strongRef')\n .where('subjectUri', 'is not', null)\n .groupBy(['subjectDid', 'subjectUri']),\n )\n .execute()\n\n await db.schema\n .createView('account_record_events_stats')\n .materialized()\n .as(\n (db as Kysely<recordEventsStats.PartialDB>)\n .selectFrom('record_events_stats')\n .select([\n 'subjectDid',\n (eb) =>\n sql<number>`SUM(${eb.ref('reportCount')})::bigint`.as(\n 'totalReports',\n ),\n (eb) =>\n sql<number>`COUNT(*) FILTER (WHERE ${eb.ref('reportCount')} > 0)`.as(\n 'reportedCount',\n ),\n (eb) =>\n sql<number>`COUNT(*) FILTER (WHERE ${eb.ref('escalateCount')} > 0)`.as(\n 'escalatedCount',\n ),\n (eb) =>\n sql<number>`COUNT(*) FILTER (WHERE ${eb.ref('appealCount')} > 0)`.as(\n 'appealedCount',\n ),\n ])\n .groupBy('subjectDid'),\n )\n .execute()\n\n // Recreate indexes\n await db.schema\n .createIndex('account_events_stats_did_idx')\n .unique()\n .on('account_events_stats')\n .column('subjectDid')\n .execute()\n\n await db.schema\n .createIndex('account_events_stats_suspend_count_idx')\n .on('account_events_stats')\n .expression(sql`\"suspendCount\" ASC NULLS FIRST`)\n .column('subjectDid')\n .execute()\n\n await db.schema\n .createIndex('record_events_stats_uri_idx')\n .unique()\n .on('record_events_stats')\n .column('subjectUri')\n .execute()\n\n await db.schema\n .createIndex('record_events_stats_did_idx')\n .on('record_events_stats')\n .column('subjectDid')\n .execute()\n\n await db.schema\n .createIndex('account_record_events_stats_did_idx')\n .unique()\n .on('account_record_events_stats')\n .column('subjectDid')\n .execute()\n\n await db.schema\n .createIndex('account_record_events_stats_reported_count_idx')\n .on('account_record_events_stats')\n .expression(sql`\"reportedCount\" ASC NULLS FIRST`)\n .column('subjectDid')\n .execute()\n}\n"]}
|
|
1
|
+
{"version":3,"file":"20250718T150931000Z-update-appeal-reason-stats.js","sourceRoot":"","sources":["../../../src/db/migrations/20250718T150931000Z-update-appeal-reason-stats.ts"],"names":[],"mappings":"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","sourcesContent":["import { Kysely, sql } from 'kysely'\nimport { OZONE_APPEAL_REASON_TYPE } from '../../api/util.js'\nimport { REASONAPPEAL } from '../../lexicon/types/com/atproto/moderation/defs.js'\nimport * as modEvent from '../schema/moderation_event.js'\nimport * as recordEventsStats from '../schema/record_events_stats.js'\n\nexport async function up(db: Kysely<any>): Promise<void> {\n // Drop and recreate materialized views to update appeal reason counting\n // to include both REASONAPPEAL and OZONE_APPEAL_REASON_TYPE\n // The primary difference between the old and new query is that we were using = and != operators\n // to match against the meta->>'reportType' field and now we use IN and NOT IN\n\n // Drop existing materialized views in reverse dependency order\n await db.schema\n .dropView('account_record_events_stats')\n .materialized()\n .execute()\n await db.schema.dropView('record_events_stats').materialized().execute()\n await db.schema.dropView('account_events_stats').materialized().execute()\n\n // Recreate account_events_stats with updated appeal counting\n await db.schema\n .createView('account_events_stats')\n .materialized()\n .as(\n (db as Kysely<modEvent.PartialDB>)\n .selectFrom('moderation_event')\n .where('subjectType', '=', 'com.atproto.admin.defs#repoRef')\n .where('subjectUri', 'is', null)\n .select('subjectDid')\n .select([\n (eb) =>\n sql<number>`COUNT(*) FILTER(\n WHERE ${eb.ref('action')} = 'tools.ozone.moderation.defs#modEventTakedown'\n AND ${eb.ref('durationInHours')} IS NULL\n )`.as('takedownCount'),\n (eb) =>\n sql<number>`COUNT(*) FILTER(\n WHERE ${eb.ref('action')} = 'tools.ozone.moderation.defs#modEventTakedown'\n AND ${eb.ref('durationInHours')} IS NOT NULL\n )`.as('suspendCount'),\n (eb) =>\n sql<number>`COUNT(*) FILTER(\n WHERE ${eb.ref('action')} = 'tools.ozone.moderation.defs#modEventEscalate'\n )`.as('escalateCount'),\n (eb) =>\n sql<number>`COUNT(*) FILTER(\n WHERE ${eb.ref('action')} = 'tools.ozone.moderation.defs#modEventReport'\n AND ${eb.ref('meta')} ->> 'reportType' NOT IN (${REASONAPPEAL}, ${OZONE_APPEAL_REASON_TYPE})\n )`.as('reportCount'),\n (eb) =>\n sql<number>`COUNT(*) FILTER(\n WHERE ${eb.ref('action')} = 'tools.ozone.moderation.defs#modEventReport'\n AND ${eb.ref('meta')} ->> 'reportType' IN (${REASONAPPEAL}, ${OZONE_APPEAL_REASON_TYPE})\n )`.as('appealCount'),\n ])\n .groupBy('subjectDid'),\n )\n .execute()\n\n // Recreate record_events_stats with updated appeal counting\n await db.schema\n .createView('record_events_stats')\n .materialized()\n .as(\n (db as Kysely<modEvent.PartialDB>)\n .selectFrom('moderation_event')\n .select([\n 'subjectDid',\n 'subjectUri',\n (eb) =>\n sql<number>`COUNT(*) FILTER (WHERE ${eb.ref('action')} = 'tools.ozone.moderation.defs#modEventEscalate')`.as(\n 'escalateCount',\n ),\n (eb) =>\n sql<number>`COUNT(*) FILTER (WHERE ${eb.ref('action')} = 'tools.ozone.moderation.defs#modEventReport' AND ${eb.ref('meta')} ->> 'reportType' NOT IN (${REASONAPPEAL}, ${OZONE_APPEAL_REASON_TYPE}))`.as(\n 'reportCount',\n ),\n (eb) =>\n sql<number>`COUNT(*) FILTER (WHERE ${eb.ref('action')} = 'tools.ozone.moderation.defs#modEventReport' AND ${eb.ref('meta')} ->> 'reportType' IN (${REASONAPPEAL}, ${OZONE_APPEAL_REASON_TYPE}))`.as(\n 'appealCount',\n ),\n ])\n .where('subjectType', '=', 'com.atproto.repo.strongRef')\n .where('subjectUri', 'is not', null)\n .groupBy(['subjectDid', 'subjectUri']),\n )\n .execute()\n\n // Recreate account_record_events_stats (unchanged logic, but depends on record_events_stats)\n await db.schema\n .createView('account_record_events_stats')\n .materialized()\n .as(\n (db as Kysely<recordEventsStats.PartialDB>)\n .selectFrom('record_events_stats')\n .select([\n 'subjectDid',\n (eb) =>\n sql<number>`SUM(${eb.ref('reportCount')})::bigint`.as(\n 'totalReports',\n ),\n (eb) =>\n sql<number>`COUNT(*) FILTER (WHERE ${eb.ref('reportCount')} > 0)`.as(\n 'reportedCount',\n ),\n (eb) =>\n sql<number>`COUNT(*) FILTER (WHERE ${eb.ref('escalateCount')} > 0)`.as(\n 'escalatedCount',\n ),\n (eb) =>\n sql<number>`COUNT(*) FILTER (WHERE ${eb.ref('appealCount')} > 0)`.as(\n 'appealedCount',\n ),\n ])\n .groupBy('subjectDid'),\n )\n .execute()\n\n // Recreate all indexes for the materialized views\n await db.schema\n .createIndex('account_events_stats_did_idx')\n .unique()\n .on('account_events_stats')\n .column('subjectDid')\n .execute()\n\n await db.schema\n .createIndex('account_events_stats_suspend_count_idx')\n .on('account_events_stats')\n .expression(sql`\"suspendCount\" ASC NULLS FIRST`)\n .column('subjectDid')\n .execute()\n\n await db.schema\n .createIndex('record_events_stats_uri_idx')\n .unique()\n .on('record_events_stats')\n .column('subjectUri')\n .execute()\n\n await db.schema\n .createIndex('record_events_stats_did_idx')\n .on('record_events_stats')\n .column('subjectDid')\n .execute()\n\n await db.schema\n .createIndex('account_record_events_stats_did_idx')\n .unique()\n .on('account_record_events_stats')\n .column('subjectDid')\n .execute()\n\n await db.schema\n .createIndex('account_record_events_stats_reported_count_idx')\n .on('account_record_events_stats')\n .expression(sql`\"reportedCount\" ASC NULLS FIRST`)\n .column('subjectDid')\n .execute()\n}\n\nexport async function down(db: Kysely<any>): Promise<void> {\n // Drop the updated materialized views\n await db.schema\n .dropView('account_record_events_stats')\n .materialized()\n .execute()\n await db.schema.dropView('record_events_stats').materialized().execute()\n await db.schema.dropView('account_events_stats').materialized().execute()\n\n // Recreate the original views with single appeal reason type\n await db.schema\n .createView('account_events_stats')\n .materialized()\n .as(\n (db as Kysely<modEvent.PartialDB>)\n .selectFrom('moderation_event')\n .where('subjectType', '=', 'com.atproto.admin.defs#repoRef')\n .where('subjectUri', 'is', null)\n .select('subjectDid')\n .select([\n (eb) =>\n sql<number>`COUNT(*) FILTER(\n WHERE ${eb.ref('action')} = 'tools.ozone.moderation.defs#modEventTakedown'\n AND ${eb.ref('durationInHours')} IS NULL\n )`.as('takedownCount'),\n (eb) =>\n sql<number>`COUNT(*) FILTER(\n WHERE ${eb.ref('action')} = 'tools.ozone.moderation.defs#modEventTakedown'\n AND ${eb.ref('durationInHours')} IS NOT NULL\n )`.as('suspendCount'),\n (eb) =>\n sql<number>`COUNT(*) FILTER(\n WHERE ${eb.ref('action')} = 'tools.ozone.moderation.defs#modEventEscalate'\n )`.as('escalateCount'),\n (eb) =>\n sql<number>`COUNT(*) FILTER(\n WHERE ${eb.ref('action')} = 'tools.ozone.moderation.defs#modEventReport'\n AND ${eb.ref('meta')} ->> 'reportType' != ${REASONAPPEAL}\n )`.as('reportCount'),\n (eb) =>\n sql<number>`COUNT(*) FILTER(\n WHERE ${eb.ref('action')} = 'tools.ozone.moderation.defs#modEventReport'\n AND ${eb.ref('meta')} ->> 'reportType' = ${REASONAPPEAL}\n )`.as('appealCount'),\n ])\n .groupBy('subjectDid'),\n )\n .execute()\n\n await db.schema\n .createView('record_events_stats')\n .materialized()\n .as(\n (db as Kysely<modEvent.PartialDB>)\n .selectFrom('moderation_event')\n .select([\n 'subjectDid',\n 'subjectUri',\n (eb) =>\n sql<number>`COUNT(*) FILTER (WHERE ${eb.ref('action')} = 'tools.ozone.moderation.defs#modEventEscalate')`.as(\n 'escalateCount',\n ),\n (eb) =>\n sql<number>`COUNT(*) FILTER (WHERE ${eb.ref('action')} = 'tools.ozone.moderation.defs#modEventReport' AND ${eb.ref('meta')} ->> 'reportType' != 'com.atproto.moderation.defs#reasonAppeal')`.as(\n 'reportCount',\n ),\n (eb) =>\n sql<number>`COUNT(*) FILTER (WHERE ${eb.ref('action')} = 'tools.ozone.moderation.defs#modEventReport' AND ${eb.ref('meta')} ->> 'reportType' = 'com.atproto.moderation.defs#reasonAppeal')`.as(\n 'appealCount',\n ),\n ])\n .where('subjectType', '=', 'com.atproto.repo.strongRef')\n .where('subjectUri', 'is not', null)\n .groupBy(['subjectDid', 'subjectUri']),\n )\n .execute()\n\n await db.schema\n .createView('account_record_events_stats')\n .materialized()\n .as(\n (db as Kysely<recordEventsStats.PartialDB>)\n .selectFrom('record_events_stats')\n .select([\n 'subjectDid',\n (eb) =>\n sql<number>`SUM(${eb.ref('reportCount')})::bigint`.as(\n 'totalReports',\n ),\n (eb) =>\n sql<number>`COUNT(*) FILTER (WHERE ${eb.ref('reportCount')} > 0)`.as(\n 'reportedCount',\n ),\n (eb) =>\n sql<number>`COUNT(*) FILTER (WHERE ${eb.ref('escalateCount')} > 0)`.as(\n 'escalatedCount',\n ),\n (eb) =>\n sql<number>`COUNT(*) FILTER (WHERE ${eb.ref('appealCount')} > 0)`.as(\n 'appealedCount',\n ),\n ])\n .groupBy('subjectDid'),\n )\n .execute()\n\n // Recreate indexes\n await db.schema\n .createIndex('account_events_stats_did_idx')\n .unique()\n .on('account_events_stats')\n .column('subjectDid')\n .execute()\n\n await db.schema\n .createIndex('account_events_stats_suspend_count_idx')\n .on('account_events_stats')\n .expression(sql`\"suspendCount\" ASC NULLS FIRST`)\n .column('subjectDid')\n .execute()\n\n await db.schema\n .createIndex('record_events_stats_uri_idx')\n .unique()\n .on('record_events_stats')\n .column('subjectUri')\n .execute()\n\n await db.schema\n .createIndex('record_events_stats_did_idx')\n .on('record_events_stats')\n .column('subjectDid')\n .execute()\n\n await db.schema\n .createIndex('account_record_events_stats_did_idx')\n .unique()\n .on('account_record_events_stats')\n .column('subjectDid')\n .execute()\n\n await db.schema\n .createIndex('account_record_events_stats_reported_count_idx')\n .on('account_record_events_stats')\n .expression(sql`\"reportedCount\" ASC NULLS FIRST`)\n .column('subjectDid')\n .execute()\n}\n"]}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
|
-
import { Kysely
|
|
1
|
+
import { Kysely } from 'kysely';
|
|
2
|
+
import { Migration, MigrationProvider } from 'kysely/migration';
|
|
2
3
|
export declare class CtxMigrationProvider<T> implements MigrationProvider {
|
|
3
4
|
private migrations;
|
|
4
5
|
private ctx;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"provider.d.ts","sourceRoot":"","sources":["../../../src/db/migrations/provider.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,iBAAiB,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"provider.d.ts","sourceRoot":"","sources":["../../../src/db/migrations/provider.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAA;AAC/B,OAAO,EAAE,SAAS,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAA;AAI/D,qBAAa,oBAAoB,CAAC,CAAC,CAAE,YAAW,iBAAiB;IAE7D,OAAO,CAAC,UAAU;IAClB,OAAO,CAAC,GAAG;IAFb,YACU,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,YAAY,CAAC,CAAC,CAAC,CAAC,EAC3C,GAAG,EAAE,CAAC,EACZ;IACE,aAAa,IAAI,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC,CASxD;CACF;AAED,MAAM,WAAW,YAAY,CAAC,CAAC;IAC7B,EAAE,CAAC,EAAE,EAAE,MAAM,CAAC,OAAO,CAAC,EAAE,GAAG,EAAE,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;IAC9C,IAAI,CAAC,CAAC,EAAE,EAAE,MAAM,CAAC,OAAO,CAAC,EAAE,GAAG,EAAE,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;CAClD"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"provider.js","sourceRoot":"","sources":["../../../src/db/migrations/provider.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"provider.js","sourceRoot":"","sources":["../../../src/db/migrations/provider.ts"],"names":[],"mappings":"AAGA,6FAA6F;AAE7F,MAAM,OAAO,oBAAoB;IAC/B,YACU,UAA2C,EAC3C,GAAM;0BADN,UAAU;mBACV,GAAG;IACV,CAAC;IACJ,KAAK,CAAC,aAAa;QACjB,MAAM,aAAa,GAA8B,EAAE,CAAA;QACnD,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,EAAE,SAAS,CAAC,EAAE,EAAE;YAC5D,aAAa,CAAC,IAAI,CAAC,GAAG;gBACpB,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE,EAAE,CAAC,MAAM,SAAS,CAAC,EAAE,CAAC,EAAE,EAAE,IAAI,CAAC,GAAG,CAAC;gBAClD,IAAI,EAAE,KAAK,EAAE,EAAE,EAAE,EAAE,CAAC,MAAM,SAAS,CAAC,IAAI,EAAE,CAAC,EAAE,EAAE,IAAI,CAAC,GAAG,CAAC;aACzD,CAAA;QACH,CAAC,CAAC,CAAA;QACF,OAAO,aAAa,CAAA;IACtB,CAAC;CACF","sourcesContent":["import { Kysely } from 'kysely'\nimport { Migration, MigrationProvider } from 'kysely/migration'\n\n// Passes a context argument to migrations. We use this to thread the dialect into migrations\n\nexport class CtxMigrationProvider<T> implements MigrationProvider {\n constructor(\n private migrations: Record<string, CtxMigration<T>>,\n private ctx: T,\n ) {}\n async getMigrations(): Promise<Record<string, Migration>> {\n const ctxMigrations: Record<string, Migration> = {}\n Object.entries(this.migrations).forEach(([name, migration]) => {\n ctxMigrations[name] = {\n up: async (db) => await migration.up(db, this.ctx),\n down: async (db) => await migration.down?.(db, this.ctx),\n }\n })\n return ctxMigrations\n }\n}\n\nexport interface CtxMigration<T> {\n up(db: Kysely<unknown>, ctx: T): Promise<void>\n down?(db: Kysely<unknown>, ctx: T): Promise<void>\n}\n"]}
|
package/dist/db/pagination.d.ts
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { SqlBool } from 'kysely';
|
|
1
2
|
import { AnyQb, DbRef } from './types.js';
|
|
2
3
|
export type Cursor = {
|
|
3
4
|
primary: string;
|
|
@@ -33,7 +34,7 @@ export declare abstract class GenericKeyset<R, LR extends LabeledResult> {
|
|
|
33
34
|
unpack(cursorStr?: string): LR | undefined;
|
|
34
35
|
packCursor(cursor?: Cursor): string | undefined;
|
|
35
36
|
unpackCursor(cursorStr?: string): Cursor | undefined;
|
|
36
|
-
getSql(labeled?: LR, direction?: 'asc' | 'desc', tryIndex?: boolean): import("kysely").RawBuilder<
|
|
37
|
+
getSql(labeled?: LR, direction?: 'asc' | 'desc', tryIndex?: boolean): import("kysely").RawBuilder<SqlBool> | undefined;
|
|
37
38
|
}
|
|
38
39
|
type StatusKeysetParam = {
|
|
39
40
|
lastReviewedAt: string | null;
|
|
@@ -51,7 +52,7 @@ export declare class StatusKeyset extends GenericKeyset<StatusKeysetParam, Curso
|
|
|
51
52
|
secondary: string;
|
|
52
53
|
};
|
|
53
54
|
unpackCursor(cursorStr?: string): Cursor | undefined;
|
|
54
|
-
getSql(labeled?: Cursor, direction?: 'asc' | 'desc'): import("kysely").RawBuilder<
|
|
55
|
+
getSql(labeled?: Cursor, direction?: 'asc' | 'desc'): import("kysely").RawBuilder<SqlBool> | undefined;
|
|
55
56
|
}
|
|
56
57
|
type TimeIdKeysetParam = {
|
|
57
58
|
id: number;
|
|
@@ -98,7 +99,7 @@ export declare class EndAtIdKeyset extends GenericKeyset<EndAtIdKeysetParam, Cur
|
|
|
98
99
|
primary: string;
|
|
99
100
|
secondary: string;
|
|
100
101
|
};
|
|
101
|
-
getSql(labeled?: Cursor, direction?: 'asc' | 'desc', tryIndex?: boolean): import("kysely").RawBuilder<
|
|
102
|
+
getSql(labeled?: Cursor, direction?: 'asc' | 'desc', tryIndex?: boolean): import("kysely").RawBuilder<SqlBool> | undefined;
|
|
102
103
|
}
|
|
103
104
|
type ComputedAtIdKeysetParam = {
|
|
104
105
|
id: number;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pagination.d.ts","sourceRoot":"","sources":["../../src/db/pagination.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"pagination.d.ts","sourceRoot":"","sources":["../../src/db/pagination.ts"],"names":[],"mappings":"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"}
|
package/dist/db/pagination.js
CHANGED
|
@@ -250,15 +250,15 @@ export const paginate = (qb, opts) => {
|
|
|
250
250
|
const { limit, cursor, keyset, direction = 'desc', tryIndex, nullsLast, } = opts;
|
|
251
251
|
const keysetSql = keyset.getSql(keyset.unpack(cursor), direction, tryIndex);
|
|
252
252
|
return qb
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
|
|
253
|
+
.$if(!!limit, (q) => q.limit(limit))
|
|
254
|
+
.$if(!nullsLast, (q) => q.orderBy(keyset.primary, direction).orderBy(keyset.secondary, direction))
|
|
255
|
+
.$if(!!nullsLast, (q) => q
|
|
256
256
|
.orderBy(direction === 'asc'
|
|
257
257
|
? sql `${keyset.primary} asc nulls last`
|
|
258
258
|
: sql `${keyset.primary} desc nulls last`)
|
|
259
259
|
.orderBy(direction === 'asc'
|
|
260
260
|
? sql `${keyset.secondary} asc nulls last`
|
|
261
261
|
: sql `${keyset.secondary} desc nulls last`))
|
|
262
|
-
|
|
262
|
+
.$if(!!keysetSql, (qb) => (keysetSql ? qb.where(keysetSql) : qb));
|
|
263
263
|
};
|
|
264
264
|
//# sourceMappingURL=pagination.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pagination.js","sourceRoot":"","sources":["../../src/db/pagination.ts"],"names":[],"mappings":"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","sourcesContent":["import { DynamicModule, sql } from 'kysely'\nimport { InvalidRequestError } from '@atproto/xrpc-server'\nimport { AnyQb, DbRef } from './types.js'\n\nexport type Cursor = { primary: string; secondary: string }\nexport type LabeledResult = {\n primary: string | number\n secondary: string | number\n}\n\n/**\n * The GenericKeyset is an abstract class that sets-up the interface and partial implementation\n * of a keyset-paginated cursor with two parts. There are three types involved:\n * - Result: a raw result (i.e. a row from the db) containing data that will make-up a cursor.\n * - E.g. { createdAt: '2022-01-01T12:00:00Z', cid: 'bafyx' }\n * - LabeledResult: a Result processed such that the \"primary\" and \"secondary\" parts of the cursor are labeled.\n * - E.g. { primary: '2022-01-01T12:00:00Z', secondary: 'bafyx' }\n * - Cursor: the two string parts that make-up the packed/string cursor.\n * - E.g. packed cursor '1641038400000::bafyx' in parts { primary: '1641038400000', secondary: 'bafyx' }\n *\n * These types relate as such. Implementers define the relations marked with a *:\n * Result -*-> LabeledResult <-*-> Cursor <--> packed/string cursor\n * ↳ SQL Condition\n */\nexport abstract class GenericKeyset<R, LR extends LabeledResult> {\n constructor(\n public primary: DbRef,\n public secondary: DbRef,\n ) {}\n abstract labelResult(result: R): LR\n abstract labeledResultToCursor(labeled: LR): Cursor\n abstract cursorToLabeledResult(cursor: Cursor): LR\n packFromResult(results: R | R[]): string | undefined {\n const result = Array.isArray(results) ? results.at(-1) : results\n if (!result) return\n return this.pack(this.labelResult(result))\n }\n pack(labeled?: LR): string | undefined {\n if (!labeled) return\n const cursor = this.labeledResultToCursor(labeled)\n return this.packCursor(cursor)\n }\n unpack(cursorStr?: string): LR | undefined {\n const cursor = this.unpackCursor(cursorStr)\n if (!cursor) return\n return this.cursorToLabeledResult(cursor)\n }\n packCursor(cursor?: Cursor): string | undefined {\n if (!cursor) return\n return `${cursor.primary}::${cursor.secondary}`\n }\n unpackCursor(cursorStr?: string): Cursor | undefined {\n if (!cursorStr) return\n const result = cursorStr.split('::')\n const [primary, secondary, ...others] = result\n if (!primary || !secondary || others.length > 0) {\n throw new InvalidRequestError('Malformed cursor')\n }\n return {\n primary,\n secondary,\n }\n }\n getSql(labeled?: LR, direction?: 'asc' | 'desc', tryIndex?: boolean) {\n if (labeled === undefined) return\n if (tryIndex) {\n // The tryIndex param will likely disappear and become the default implementation: here for now for gradual rollout query-by-query.\n if (direction === 'asc') {\n return sql`((${this.primary}, ${this.secondary}) > (${labeled.primary}, ${labeled.secondary}))`\n } else {\n return sql`((${this.primary}, ${this.secondary}) < (${labeled.primary}, ${labeled.secondary}))`\n }\n } else {\n // @NOTE this implementation can struggle to use an index on (primary, secondary) for pagination due to the \"or\" usage.\n if (direction === 'asc') {\n return sql`((${this.primary} > ${labeled.primary}) or (${this.primary} = ${labeled.primary} and ${this.secondary} > ${labeled.secondary}))`\n } else {\n return sql`((${this.primary} < ${labeled.primary}) or (${this.primary} = ${labeled.primary} and ${this.secondary} < ${labeled.secondary}))`\n }\n }\n }\n}\n\ntype StatusKeysetParam = {\n lastReviewedAt: string | null\n lastReportedAt: string | null\n id: number\n}\n\nexport class StatusKeyset extends GenericKeyset<StatusKeysetParam, Cursor> {\n labelResult(result: StatusKeysetParam): Cursor\n labelResult(result: StatusKeysetParam) {\n const primaryField = (\n this.primary as ReturnType<DynamicModule['ref']>\n ).dynamicReference.includes('lastReviewedAt')\n ? 'lastReviewedAt'\n : 'lastReportedAt'\n\n return {\n primary: result[primaryField]\n ? new Date(`${result[primaryField]}`).getTime().toString()\n : '',\n secondary: result.id.toString(),\n }\n }\n labeledResultToCursor(labeled: Cursor) {\n return {\n primary: labeled.primary,\n secondary: labeled.secondary,\n }\n }\n cursorToLabeledResult(cursor: Cursor) {\n return {\n primary: cursor.primary\n ? new Date(parseInt(cursor.primary, 10)).toISOString()\n : '',\n secondary: cursor.secondary,\n }\n }\n unpackCursor(cursorStr?: string): Cursor | undefined {\n if (!cursorStr) return\n const result = cursorStr.split('::')\n const [primary, secondary, ...others] = result\n if (!secondary || others.length > 0) {\n throw new InvalidRequestError('Malformed cursor')\n }\n return {\n primary,\n secondary,\n }\n }\n // This is specifically built to handle nullable columns as primary sorting column\n getSql(labeled?: Cursor, direction?: 'asc' | 'desc') {\n if (labeled === undefined) return\n if (direction === 'asc') {\n return !labeled.primary\n ? sql`(${this.primary} IS NULL AND ${this.secondary} > ${labeled.secondary})`\n : sql`((${this.primary}, ${this.secondary}) > (${labeled.primary}, ${labeled.secondary}) OR (${this.primary} is null))`\n } else {\n return !labeled.primary\n ? sql`(${this.primary} IS NULL AND ${this.secondary} < ${labeled.secondary})`\n : sql`((${this.primary}, ${this.secondary}) < (${labeled.primary}, ${labeled.secondary}) OR (${this.primary} is null))`\n }\n }\n}\n\ntype TimeIdKeysetParam = {\n id: number\n createdAt: string | Date\n}\ntype TimeIdResult = TimeIdKeysetParam\n\nexport class TimeIdKeyset extends GenericKeyset<TimeIdKeysetParam, Cursor> {\n labelResult(result: TimeIdResult): Cursor\n labelResult(result: TimeIdResult) {\n return { primary: result.createdAt, secondary: result.id.toString() }\n }\n labeledResultToCursor(labeled: Cursor) {\n return {\n primary: new Date(labeled.primary).getTime().toString(),\n secondary: labeled.secondary,\n }\n }\n cursorToLabeledResult(cursor: Cursor) {\n const primaryDate = new Date(parseInt(cursor.primary, 10))\n if (isNaN(primaryDate.getTime())) {\n throw new InvalidRequestError('Malformed cursor')\n }\n return {\n primary: primaryDate.toISOString(),\n secondary: cursor.secondary,\n }\n }\n}\n\ntype CreatedAtUriKeysetParam = {\n createdAt: string\n uri: string\n}\n\nexport class CreatedAtUriKeyset extends GenericKeyset<\n CreatedAtUriKeysetParam,\n Cursor\n> {\n labelResult(result: CreatedAtUriKeysetParam): Cursor\n labelResult(result: CreatedAtUriKeysetParam) {\n return { primary: result.createdAt, secondary: result.uri }\n }\n labeledResultToCursor(labeled: Cursor) {\n return {\n primary: new Date(labeled.primary).getTime().toString(),\n secondary: labeled.secondary,\n }\n }\n cursorToLabeledResult(cursor: Cursor) {\n const primaryDate = new Date(parseInt(cursor.primary, 10))\n if (isNaN(primaryDate.getTime())) {\n throw new InvalidRequestError('Malformed cursor')\n }\n return {\n primary: primaryDate.toISOString(),\n secondary: cursor.secondary,\n }\n }\n}\n\ntype EndAtIdKeysetParam = {\n id: number\n endAt: string | null\n}\n\n// Special value used here to represent a \"permanent\" endAt (i.e. a record that should be sorted as if it has an endAt infinitely far in the future).\n// Chosen to sort before all real timestamps in DESC order.\nconst PERMANENT_ENDSAT = '9999-12-31T23:59:59.999Z'\n\nexport class EndAtIdKeyset extends GenericKeyset<EndAtIdKeysetParam, Cursor> {\n labelResult(result: EndAtIdKeysetParam): Cursor\n labelResult(result: EndAtIdKeysetParam) {\n return {\n primary: result.endAt ?? PERMANENT_ENDSAT,\n secondary: result.id.toString(),\n }\n }\n labeledResultToCursor(labeled: Cursor) {\n return {\n primary: new Date(labeled.primary).getTime().toString(),\n secondary: labeled.secondary,\n }\n }\n cursorToLabeledResult(cursor: Cursor) {\n const primaryDate = new Date(parseInt(cursor.primary, 10))\n if (isNaN(primaryDate.getTime())) {\n throw new InvalidRequestError('Malformed cursor')\n }\n return {\n primary: primaryDate.toISOString(),\n secondary: cursor.secondary,\n }\n }\n // Override to substitute the PERMANENT_ENDSAT sentinel for NULL endAt rows\n // so cursor pagination works across permanent (endAt IS NULL) assignments.\n getSql(labeled?: Cursor, direction?: 'asc' | 'desc', tryIndex?: boolean) {\n if (labeled === undefined) return\n const primaryRef = sql`COALESCE(${this.primary}, ${PERMANENT_ENDSAT})`\n if (tryIndex) {\n if (direction === 'asc') {\n return sql`((${primaryRef}, ${this.secondary}) > (${labeled.primary}, ${labeled.secondary}))`\n } else {\n return sql`((${primaryRef}, ${this.secondary}) < (${labeled.primary}, ${labeled.secondary}))`\n }\n } else {\n if (direction === 'asc') {\n return sql`((${primaryRef} > ${labeled.primary}) or (${primaryRef} = ${labeled.primary} and ${this.secondary} > ${labeled.secondary}))`\n } else {\n return sql`((${primaryRef} < ${labeled.primary}) or (${primaryRef} = ${labeled.primary} and ${this.secondary} < ${labeled.secondary}))`\n }\n }\n }\n}\n\ntype ComputedAtIdKeysetParam = {\n id: number\n computedAt: string | Date\n}\n\nexport class ComputedAtIdKeyset extends GenericKeyset<\n ComputedAtIdKeysetParam,\n Cursor\n> {\n labelResult(result: ComputedAtIdKeysetParam): Cursor\n labelResult(result: ComputedAtIdKeysetParam) {\n return { primary: result.computedAt, secondary: result.id.toString() }\n }\n labeledResultToCursor(labeled: Cursor) {\n return {\n primary: new Date(labeled.primary).getTime().toString(),\n secondary: labeled.secondary,\n }\n }\n cursorToLabeledResult(cursor: Cursor) {\n const primaryDate = new Date(parseInt(cursor.primary, 10))\n if (isNaN(primaryDate.getTime())) {\n throw new InvalidRequestError('Malformed cursor')\n }\n return {\n primary: primaryDate.toISOString(),\n secondary: cursor.secondary,\n }\n }\n}\n\nexport const paginate = <\n QB extends AnyQb,\n K extends GenericKeyset<unknown, any>,\n>(\n qb: QB,\n opts: {\n limit?: number\n cursor?: string\n direction?: 'asc' | 'desc'\n keyset: K\n tryIndex?: boolean\n // By default, pg does nullsFirst\n nullsLast?: boolean\n },\n): QB => {\n const {\n limit,\n cursor,\n keyset,\n direction = 'desc',\n tryIndex,\n nullsLast,\n } = opts\n const keysetSql = keyset.getSql(keyset.unpack(cursor), direction, tryIndex)\n return qb\n .if(!!limit, (q) => q.limit(limit as number))\n .if(!nullsLast, (q) =>\n q.orderBy(keyset.primary, direction).orderBy(keyset.secondary, direction),\n )\n .if(!!nullsLast, (q) =>\n q\n .orderBy(\n direction === 'asc'\n ? sql`${keyset.primary} asc nulls last`\n : sql`${keyset.primary} desc nulls last`,\n )\n .orderBy(\n direction === 'asc'\n ? sql`${keyset.secondary} asc nulls last`\n : sql`${keyset.secondary} desc nulls last`,\n ),\n )\n .if(!!keysetSql, (qb) => (keysetSql ? qb.where(keysetSql) : qb)) as QB\n}\n"]}
|
|
1
|
+
{"version":3,"file":"pagination.js","sourceRoot":"","sources":["../../src/db/pagination.ts"],"names":[],"mappings":"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","sourcesContent":["import { DynamicModule, SqlBool, sql } from 'kysely'\nimport { InvalidRequestError } from '@atproto/xrpc-server'\nimport { AnyQb, DbRef } from './types.js'\n\nexport type Cursor = { primary: string; secondary: string }\nexport type LabeledResult = {\n primary: string | number\n secondary: string | number\n}\n\n/**\n * The GenericKeyset is an abstract class that sets-up the interface and partial implementation\n * of a keyset-paginated cursor with two parts. There are three types involved:\n * - Result: a raw result (i.e. a row from the db) containing data that will make-up a cursor.\n * - E.g. { createdAt: '2022-01-01T12:00:00Z', cid: 'bafyx' }\n * - LabeledResult: a Result processed such that the \"primary\" and \"secondary\" parts of the cursor are labeled.\n * - E.g. { primary: '2022-01-01T12:00:00Z', secondary: 'bafyx' }\n * - Cursor: the two string parts that make-up the packed/string cursor.\n * - E.g. packed cursor '1641038400000::bafyx' in parts { primary: '1641038400000', secondary: 'bafyx' }\n *\n * These types relate as such. Implementers define the relations marked with a *:\n * Result -*-> LabeledResult <-*-> Cursor <--> packed/string cursor\n * ↳ SQL Condition\n */\nexport abstract class GenericKeyset<R, LR extends LabeledResult> {\n constructor(\n public primary: DbRef,\n public secondary: DbRef,\n ) {}\n abstract labelResult(result: R): LR\n abstract labeledResultToCursor(labeled: LR): Cursor\n abstract cursorToLabeledResult(cursor: Cursor): LR\n packFromResult(results: R | R[]): string | undefined {\n const result = Array.isArray(results) ? results.at(-1) : results\n if (!result) return\n return this.pack(this.labelResult(result))\n }\n pack(labeled?: LR): string | undefined {\n if (!labeled) return\n const cursor = this.labeledResultToCursor(labeled)\n return this.packCursor(cursor)\n }\n unpack(cursorStr?: string): LR | undefined {\n const cursor = this.unpackCursor(cursorStr)\n if (!cursor) return\n return this.cursorToLabeledResult(cursor)\n }\n packCursor(cursor?: Cursor): string | undefined {\n if (!cursor) return\n return `${cursor.primary}::${cursor.secondary}`\n }\n unpackCursor(cursorStr?: string): Cursor | undefined {\n if (!cursorStr) return\n const result = cursorStr.split('::')\n const [primary, secondary, ...others] = result\n if (!primary || !secondary || others.length > 0) {\n throw new InvalidRequestError('Malformed cursor')\n }\n return {\n primary,\n secondary,\n }\n }\n getSql(labeled?: LR, direction?: 'asc' | 'desc', tryIndex?: boolean) {\n if (labeled === undefined) return\n if (tryIndex) {\n // The tryIndex param will likely disappear and become the default implementation: here for now for gradual rollout query-by-query.\n if (direction === 'asc') {\n return sql<SqlBool>`((${this.primary}, ${this.secondary}) > (${labeled.primary}, ${labeled.secondary}))`\n } else {\n return sql<SqlBool>`((${this.primary}, ${this.secondary}) < (${labeled.primary}, ${labeled.secondary}))`\n }\n } else {\n // @NOTE this implementation can struggle to use an index on (primary, secondary) for pagination due to the \"or\" usage.\n if (direction === 'asc') {\n return sql<SqlBool>`((${this.primary} > ${labeled.primary}) or (${this.primary} = ${labeled.primary} and ${this.secondary} > ${labeled.secondary}))`\n } else {\n return sql<SqlBool>`((${this.primary} < ${labeled.primary}) or (${this.primary} = ${labeled.primary} and ${this.secondary} < ${labeled.secondary}))`\n }\n }\n }\n}\n\ntype StatusKeysetParam = {\n lastReviewedAt: string | null\n lastReportedAt: string | null\n id: number\n}\n\nexport class StatusKeyset extends GenericKeyset<StatusKeysetParam, Cursor> {\n labelResult(result: StatusKeysetParam): Cursor\n labelResult(result: StatusKeysetParam) {\n const primaryField = (\n this.primary as ReturnType<DynamicModule<unknown>['ref']>\n ).dynamicReference.includes('lastReviewedAt')\n ? 'lastReviewedAt'\n : 'lastReportedAt'\n\n return {\n primary: result[primaryField]\n ? new Date(`${result[primaryField]}`).getTime().toString()\n : '',\n secondary: result.id.toString(),\n }\n }\n labeledResultToCursor(labeled: Cursor) {\n return {\n primary: labeled.primary,\n secondary: labeled.secondary,\n }\n }\n cursorToLabeledResult(cursor: Cursor) {\n return {\n primary: cursor.primary\n ? new Date(parseInt(cursor.primary, 10)).toISOString()\n : '',\n secondary: cursor.secondary,\n }\n }\n unpackCursor(cursorStr?: string): Cursor | undefined {\n if (!cursorStr) return\n const result = cursorStr.split('::')\n const [primary, secondary, ...others] = result\n if (!secondary || others.length > 0) {\n throw new InvalidRequestError('Malformed cursor')\n }\n return {\n primary,\n secondary,\n }\n }\n // This is specifically built to handle nullable columns as primary sorting column\n getSql(labeled?: Cursor, direction?: 'asc' | 'desc') {\n if (labeled === undefined) return\n if (direction === 'asc') {\n return !labeled.primary\n ? sql<SqlBool>`(${this.primary} IS NULL AND ${this.secondary} > ${labeled.secondary})`\n : sql<SqlBool>`((${this.primary}, ${this.secondary}) > (${labeled.primary}, ${labeled.secondary}) OR (${this.primary} is null))`\n } else {\n return !labeled.primary\n ? sql<SqlBool>`(${this.primary} IS NULL AND ${this.secondary} < ${labeled.secondary})`\n : sql<SqlBool>`((${this.primary}, ${this.secondary}) < (${labeled.primary}, ${labeled.secondary}) OR (${this.primary} is null))`\n }\n }\n}\n\ntype TimeIdKeysetParam = {\n id: number\n createdAt: string | Date\n}\ntype TimeIdResult = TimeIdKeysetParam\n\nexport class TimeIdKeyset extends GenericKeyset<TimeIdKeysetParam, Cursor> {\n labelResult(result: TimeIdResult): Cursor\n labelResult(result: TimeIdResult) {\n return { primary: result.createdAt, secondary: result.id.toString() }\n }\n labeledResultToCursor(labeled: Cursor) {\n return {\n primary: new Date(labeled.primary).getTime().toString(),\n secondary: labeled.secondary,\n }\n }\n cursorToLabeledResult(cursor: Cursor) {\n const primaryDate = new Date(parseInt(cursor.primary, 10))\n if (isNaN(primaryDate.getTime())) {\n throw new InvalidRequestError('Malformed cursor')\n }\n return {\n primary: primaryDate.toISOString(),\n secondary: cursor.secondary,\n }\n }\n}\n\ntype CreatedAtUriKeysetParam = {\n createdAt: string\n uri: string\n}\n\nexport class CreatedAtUriKeyset extends GenericKeyset<\n CreatedAtUriKeysetParam,\n Cursor\n> {\n labelResult(result: CreatedAtUriKeysetParam): Cursor\n labelResult(result: CreatedAtUriKeysetParam) {\n return { primary: result.createdAt, secondary: result.uri }\n }\n labeledResultToCursor(labeled: Cursor) {\n return {\n primary: new Date(labeled.primary).getTime().toString(),\n secondary: labeled.secondary,\n }\n }\n cursorToLabeledResult(cursor: Cursor) {\n const primaryDate = new Date(parseInt(cursor.primary, 10))\n if (isNaN(primaryDate.getTime())) {\n throw new InvalidRequestError('Malformed cursor')\n }\n return {\n primary: primaryDate.toISOString(),\n secondary: cursor.secondary,\n }\n }\n}\n\ntype EndAtIdKeysetParam = {\n id: number\n endAt: string | null\n}\n\n// Special value used here to represent a \"permanent\" endAt (i.e. a record that should be sorted as if it has an endAt infinitely far in the future).\n// Chosen to sort before all real timestamps in DESC order.\nconst PERMANENT_ENDSAT = '9999-12-31T23:59:59.999Z'\n\nexport class EndAtIdKeyset extends GenericKeyset<EndAtIdKeysetParam, Cursor> {\n labelResult(result: EndAtIdKeysetParam): Cursor\n labelResult(result: EndAtIdKeysetParam) {\n return {\n primary: result.endAt ?? PERMANENT_ENDSAT,\n secondary: result.id.toString(),\n }\n }\n labeledResultToCursor(labeled: Cursor) {\n return {\n primary: new Date(labeled.primary).getTime().toString(),\n secondary: labeled.secondary,\n }\n }\n cursorToLabeledResult(cursor: Cursor) {\n const primaryDate = new Date(parseInt(cursor.primary, 10))\n if (isNaN(primaryDate.getTime())) {\n throw new InvalidRequestError('Malformed cursor')\n }\n return {\n primary: primaryDate.toISOString(),\n secondary: cursor.secondary,\n }\n }\n // Override to substitute the PERMANENT_ENDSAT sentinel for NULL endAt rows\n // so cursor pagination works across permanent (endAt IS NULL) assignments.\n getSql(labeled?: Cursor, direction?: 'asc' | 'desc', tryIndex?: boolean) {\n if (labeled === undefined) return\n const primaryRef = sql`COALESCE(${this.primary}, ${PERMANENT_ENDSAT})`\n if (tryIndex) {\n if (direction === 'asc') {\n return sql<SqlBool>`((${primaryRef}, ${this.secondary}) > (${labeled.primary}, ${labeled.secondary}))`\n } else {\n return sql<SqlBool>`((${primaryRef}, ${this.secondary}) < (${labeled.primary}, ${labeled.secondary}))`\n }\n } else {\n if (direction === 'asc') {\n return sql<SqlBool>`((${primaryRef} > ${labeled.primary}) or (${primaryRef} = ${labeled.primary} and ${this.secondary} > ${labeled.secondary}))`\n } else {\n return sql<SqlBool>`((${primaryRef} < ${labeled.primary}) or (${primaryRef} = ${labeled.primary} and ${this.secondary} < ${labeled.secondary}))`\n }\n }\n }\n}\n\ntype ComputedAtIdKeysetParam = {\n id: number\n computedAt: string | Date\n}\n\nexport class ComputedAtIdKeyset extends GenericKeyset<\n ComputedAtIdKeysetParam,\n Cursor\n> {\n labelResult(result: ComputedAtIdKeysetParam): Cursor\n labelResult(result: ComputedAtIdKeysetParam) {\n return { primary: result.computedAt, secondary: result.id.toString() }\n }\n labeledResultToCursor(labeled: Cursor) {\n return {\n primary: new Date(labeled.primary).getTime().toString(),\n secondary: labeled.secondary,\n }\n }\n cursorToLabeledResult(cursor: Cursor) {\n const primaryDate = new Date(parseInt(cursor.primary, 10))\n if (isNaN(primaryDate.getTime())) {\n throw new InvalidRequestError('Malformed cursor')\n }\n return {\n primary: primaryDate.toISOString(),\n secondary: cursor.secondary,\n }\n }\n}\n\nexport const paginate = <\n QB extends AnyQb,\n K extends GenericKeyset<unknown, any>,\n>(\n qb: QB,\n opts: {\n limit?: number\n cursor?: string\n direction?: 'asc' | 'desc'\n keyset: K\n tryIndex?: boolean\n // By default, pg does nullsFirst\n nullsLast?: boolean\n },\n): QB => {\n const {\n limit,\n cursor,\n keyset,\n direction = 'desc',\n tryIndex,\n nullsLast,\n } = opts\n const keysetSql = keyset.getSql(keyset.unpack(cursor), direction, tryIndex)\n return qb\n .$if(!!limit, (q) => q.limit(limit as number))\n .$if(!nullsLast, (q) =>\n q.orderBy(keyset.primary, direction).orderBy(keyset.secondary, direction),\n )\n .$if(!!nullsLast, (q) =>\n q\n .orderBy(\n direction === 'asc'\n ? sql`${keyset.primary} asc nulls last`\n : sql`${keyset.primary} desc nulls last`,\n )\n .orderBy(\n direction === 'asc'\n ? sql`${keyset.secondary} asc nulls last`\n : sql`${keyset.secondary} desc nulls last`,\n ),\n )\n .$if(!!keysetSql, (qb) => (keysetSql ? qb.where(keysetSql) : qb)) as QB\n}\n"]}
|
package/dist/db/types.d.ts
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { DynamicModule, RawBuilder, SelectQueryBuilder } from 'kysely';
|
|
2
2
|
import pg from 'pg';
|
|
3
3
|
type PgPool = pg.Pool;
|
|
4
|
-
export type DbRef = RawBuilder | ReturnType<DynamicModule['ref']>;
|
|
4
|
+
export type DbRef = RawBuilder<unknown> | ReturnType<DynamicModule<unknown>['ref']>;
|
|
5
5
|
export type AnyQb = SelectQueryBuilder<any, any, any>;
|
|
6
6
|
export type PgOptions = {
|
|
7
7
|
url: string;
|
package/dist/db/types.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/db/types.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,UAAU,EAAE,kBAAkB,EAAO,MAAM,QAAQ,CAAA;AAE3E,OAAO,EAAE,MAAM,IAAI,CAAA;AACnB,KAAK,MAAM,GAAG,EAAE,CAAC,IAAI,CAAA;AAErB,MAAM,MAAM,KAAK,
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/db/types.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,UAAU,EAAE,kBAAkB,EAAO,MAAM,QAAQ,CAAA;AAE3E,OAAO,EAAE,MAAM,IAAI,CAAA;AACnB,KAAK,MAAM,GAAG,EAAE,CAAC,IAAI,CAAA;AAErB,MAAM,MAAM,KAAK,GACb,UAAU,CAAC,OAAO,CAAC,GACnB,UAAU,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC,KAAK,CAAC,CAAC,CAAA;AAE7C,MAAM,MAAM,KAAK,GAAG,kBAAkB,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,CAAA;AAErD,MAAM,MAAM,SAAS,GAAG;IACtB,GAAG,EAAE,MAAM,CAAA;IACX,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,iBAAiB,CAAC,EAAE,MAAM,CAAA;CAC3B,CAAA;AAED,eAAO,MAAM,KAAK,GAAI,CAAC,OAAO,CAAC,kBAG9B,CAAA"}
|
package/dist/db/types.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/db/types.ts"],"names":[],"mappings":"AAAA,OAAO,EAAiD,GAAG,EAAE,MAAM,QAAQ,CAAA;
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/db/types.ts"],"names":[],"mappings":"AAAA,OAAO,EAAiD,GAAG,EAAE,MAAM,QAAQ,CAAA;AAoB3E,MAAM,CAAC,MAAM,KAAK,GAAG,CAAI,GAAM,EAAE,EAAE;IACjC,IAAI,GAAG,KAAK,IAAI;QAAE,OAAO,GAAG,CAAG,MAAM,CAAA;IACrC,OAAO,GAAG,CAAG,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,SAAS,CAAA;AAC9C,CAAC,CAAA","sourcesContent":["import { DynamicModule, RawBuilder, SelectQueryBuilder, sql } from 'kysely'\n// eslint-disable-next-line import/default\nimport pg from 'pg'\ntype PgPool = pg.Pool\n\nexport type DbRef =\n | RawBuilder<unknown>\n | ReturnType<DynamicModule<unknown>['ref']>\n\nexport type AnyQb = SelectQueryBuilder<any, any, any>\n\nexport type PgOptions = {\n url: string\n pool?: PgPool\n schema?: string\n poolSize?: number\n poolMaxUses?: number\n poolIdleTimeoutMs?: number\n}\n\nexport const jsonb = <T>(val: T) => {\n if (val === null) return sql<T>`null`\n return sql<T>`${JSON.stringify(val)}::jsonb`\n}\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/mod-service/index.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/mod-service/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -107,19 +107,16 @@ export class ModerationService {
|
|
|
107
107
|
}
|
|
108
108
|
// If subjectType is set to 'account' let that take priority and ignore collections filter
|
|
109
109
|
if (collections.length && subjectType !== 'account') {
|
|
110
|
-
builder = builder
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
});
|
|
114
|
-
return qb;
|
|
115
|
-
});
|
|
110
|
+
builder = builder
|
|
111
|
+
.where('subjectUri', 'is not', null)
|
|
112
|
+
.where((eb) => eb.or(collections.map((collection) => eb('subjectUri', 'like', `%/${collection}/%`))));
|
|
116
113
|
}
|
|
117
114
|
if (types.length) {
|
|
118
|
-
builder = builder.where((
|
|
115
|
+
builder = builder.where((eb) => {
|
|
119
116
|
if (types.length === 1) {
|
|
120
|
-
return
|
|
117
|
+
return eb('action', '=', types[0]);
|
|
121
118
|
}
|
|
122
|
-
return
|
|
119
|
+
return eb('action', 'in', types);
|
|
123
120
|
});
|
|
124
121
|
}
|
|
125
122
|
if (createdBy) {
|
|
@@ -135,12 +132,7 @@ export class ModerationService {
|
|
|
135
132
|
// the input may end in || in which case, there may be item in the array which is just '' and we want to ignore those
|
|
136
133
|
const keywords = comment.split('||').filter((keyword) => !!keyword.trim());
|
|
137
134
|
if (keywords.length > 1) {
|
|
138
|
-
builder = builder.where((
|
|
139
|
-
keywords.forEach((keyword) => {
|
|
140
|
-
qb = qb.orWhere('comment', 'ilike', `%${keyword}%`);
|
|
141
|
-
});
|
|
142
|
-
return qb;
|
|
143
|
-
});
|
|
135
|
+
builder = builder.where((eb) => eb.or(keywords.map((keyword) => eb('comment', 'ilike', `%${keyword}%`))));
|
|
144
136
|
}
|
|
145
137
|
else if (keywords.length === 1) {
|
|
146
138
|
builder = builder.where('comment', 'ilike', `%${keywords[0]}%`);
|
|
@@ -170,12 +162,7 @@ export class ModerationService {
|
|
|
170
162
|
builder = builder.where(sql `meta->>'reportType'`, 'in', reportTypes);
|
|
171
163
|
}
|
|
172
164
|
if (policies?.length) {
|
|
173
|
-
builder = builder.where((
|
|
174
|
-
policies.forEach((policy) => {
|
|
175
|
-
qb = qb.orWhere(sql `meta->>'policies'`, 'ilike', `%${policy}%`);
|
|
176
|
-
});
|
|
177
|
-
return qb;
|
|
178
|
-
});
|
|
165
|
+
builder = builder.where((eb) => eb.or(policies.map((policy) => eb(sql `meta->>'policies'`, 'ilike', `%${policy}%`))));
|
|
179
166
|
}
|
|
180
167
|
if (modTool?.length) {
|
|
181
168
|
builder = builder
|
|
@@ -261,7 +248,7 @@ export class ModerationService {
|
|
|
261
248
|
const subjectsToBeResolved = await this.db.db
|
|
262
249
|
.selectFrom('moderation_subject_status')
|
|
263
250
|
.where('did', '=', did)
|
|
264
|
-
.where((
|
|
251
|
+
.where((eb) => eb.or([eb('recordPath', '!=', ''), eb('convoId', '!=', '')]))
|
|
265
252
|
.where('reviewState', 'in', [REVIEWESCALATED, REVIEWOPEN])
|
|
266
253
|
.selectAll()
|
|
267
254
|
.execute();
|
|
@@ -555,8 +542,7 @@ export class ModerationService {
|
|
|
555
542
|
const now = new Date().toISOString();
|
|
556
543
|
const subjects = await this.db.db
|
|
557
544
|
.selectFrom('moderation_subject_status')
|
|
558
|
-
.where('suspendUntil', '<', now)
|
|
559
|
-
.orWhere('muteUntil', '<', now)
|
|
545
|
+
.where((eb) => eb.or([eb('suspendUntil', '<', now), eb('muteUntil', '<', now)]))
|
|
560
546
|
.selectAll()
|
|
561
547
|
.execute();
|
|
562
548
|
return subjects.map((row) => ({
|
|
@@ -794,12 +780,7 @@ export class ModerationService {
|
|
|
794
780
|
if (subjectType !== 'account' && collections?.length) {
|
|
795
781
|
builder = builder
|
|
796
782
|
.where('moderation_subject_status.recordPath', '!=', '')
|
|
797
|
-
.where((
|
|
798
|
-
for (const collection of collections) {
|
|
799
|
-
qb = qb.orWhere('moderation_subject_status.recordPath', 'like', `${collection}/%`);
|
|
800
|
-
}
|
|
801
|
-
return qb;
|
|
802
|
-
});
|
|
783
|
+
.where((eb) => eb.or(collections.map((collection) => eb('moderation_subject_status.recordPath', 'like', `${collection}/%`))));
|
|
803
784
|
}
|
|
804
785
|
if (ignoreSubjects?.length) {
|
|
805
786
|
builder = builder
|
|
@@ -850,37 +831,32 @@ export class ModerationService {
|
|
|
850
831
|
: builder.where('moderation_subject_status.appealed', '=', appealed);
|
|
851
832
|
}
|
|
852
833
|
if (!includeMuted) {
|
|
853
|
-
builder = builder.where((
|
|
854
|
-
|
|
855
|
-
|
|
834
|
+
builder = builder.where((eb) => eb.or([
|
|
835
|
+
eb('moderation_subject_status.muteUntil', '<', new Date().toISOString()),
|
|
836
|
+
eb('moderation_subject_status.muteUntil', 'is', null),
|
|
837
|
+
]));
|
|
856
838
|
}
|
|
857
839
|
if (onlyMuted) {
|
|
858
|
-
builder = builder.where((
|
|
859
|
-
|
|
860
|
-
|
|
840
|
+
builder = builder.where((eb) => eb.or([
|
|
841
|
+
eb('moderation_subject_status.muteUntil', '>', new Date().toISOString()),
|
|
842
|
+
eb('moderation_subject_status.muteReportingUntil', '>', new Date().toISOString()),
|
|
843
|
+
]));
|
|
861
844
|
}
|
|
862
845
|
// ["tag1", "tag2 && tag3", "tag4"] => [["tag1"], ["tag2", "tag3"], ["tag4"]]
|
|
863
846
|
const conditions = parseTags(tags);
|
|
864
847
|
if (conditions?.length) {
|
|
865
848
|
// [["tag1"], ["tag2", "tag3"], ["tag4"]] => (tags ? 'tag1') OR (tags ? 'tag2' AND tags ? 'tag3') OR (tags ? 'tag4')
|
|
866
|
-
builder = builder.where((
|
|
867
|
-
|
|
868
|
-
|
|
869
|
-
|
|
870
|
-
|
|
871
|
-
for (const subTag of subTags) {
|
|
872
|
-
qb = qb.where(sql `${ref('moderation_subject_status.tags')} ? ${subTag}`);
|
|
873
|
-
}
|
|
874
|
-
return qb;
|
|
875
|
-
});
|
|
876
|
-
}
|
|
877
|
-
return qb;
|
|
878
|
-
});
|
|
849
|
+
builder = builder.where((eb) =>
|
|
850
|
+
// OR between every conditions items (subTags)
|
|
851
|
+
eb.or(conditions.map((subTags) =>
|
|
852
|
+
// AND between every subTags items (subTag)
|
|
853
|
+
eb.and(subTags.map((subTag) => sql `${ref('moderation_subject_status.tags')} ? ${subTag}`)))));
|
|
879
854
|
}
|
|
880
855
|
if (excludeTags?.length) {
|
|
881
|
-
builder = builder.where((
|
|
882
|
-
|
|
883
|
-
|
|
856
|
+
builder = builder.where((eb) => eb.or([
|
|
857
|
+
sql `NOT(${ref('moderation_subject_status.tags')} ?| array[${sql.join(excludeTags)}]::TEXT[])`,
|
|
858
|
+
eb('tags', 'is', null),
|
|
859
|
+
]));
|
|
884
860
|
}
|
|
885
861
|
if (minAccountSuspendCount != null && minAccountSuspendCount > 0) {
|
|
886
862
|
builder = builder.where('account_events_stats.suspendCount', '>=', minAccountSuspendCount);
|