@atproto/ozone 0.2.5 → 0.2.7
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 +37 -0
- package/dist/api/index.d.ts.map +1 -1
- package/dist/api/index.js +2 -0
- package/dist/api/index.js.map +1 -1
- package/dist/api/report/queryActivities.d.ts +4 -0
- package/dist/api/report/queryActivities.d.ts.map +1 -0
- package/dist/api/report/queryActivities.js +36 -0
- package/dist/api/report/queryActivities.js.map +1 -0
- package/dist/background.d.ts +5 -3
- package/dist/background.d.ts.map +1 -1
- package/dist/background.js +13 -4
- package/dist/background.js.map +1 -1
- package/dist/context.js +1 -1
- package/dist/context.js.map +1 -1
- package/dist/daemon/context.js +1 -1
- package/dist/daemon/context.js.map +1 -1
- package/dist/daemon/verification-listener.d.ts +1 -1
- package/dist/daemon/verification-listener.d.ts.map +1 -1
- package/dist/daemon/verification-listener.js +10 -4
- package/dist/daemon/verification-listener.js.map +1 -1
- package/dist/db/migrations/20260602T120000000Z-add-report-activity-created-index.d.ts +4 -0
- package/dist/db/migrations/20260602T120000000Z-add-report-activity-created-index.d.ts.map +1 -0
- package/dist/db/migrations/20260602T120000000Z-add-report-activity-created-index.js +15 -0
- package/dist/db/migrations/20260602T120000000Z-add-report-activity-created-index.js.map +1 -0
- package/dist/db/migrations/index.d.ts +1 -0
- package/dist/db/migrations/index.d.ts.map +1 -1
- package/dist/db/migrations/index.js +1 -0
- package/dist/db/migrations/index.js.map +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +23 -13
- package/dist/index.js.map +1 -1
- package/dist/jetstream/service.d.ts +1 -1
- package/dist/jetstream/service.d.ts.map +1 -1
- package/dist/jetstream/service.js +3 -1
- package/dist/jetstream/service.js.map +1 -1
- package/dist/lexicon/index.d.ts +13 -0
- package/dist/lexicon/index.d.ts.map +1 -1
- package/dist/lexicon/index.js +22 -0
- package/dist/lexicon/index.js.map +1 -1
- package/dist/lexicon/lexicons.d.ts +940 -140
- package/dist/lexicon/lexicons.d.ts.map +1 -1
- package/dist/lexicon/lexicons.js +477 -69
- package/dist/lexicon/lexicons.js.map +1 -1
- package/dist/lexicon/types/app/bsky/feed/searchPostsV2.d.ts +87 -0
- package/dist/lexicon/types/app/bsky/feed/searchPostsV2.d.ts.map +1 -0
- package/dist/lexicon/types/app/bsky/feed/searchPostsV2.js +5 -0
- package/dist/lexicon/types/app/bsky/feed/searchPostsV2.js.map +1 -0
- package/dist/lexicon/types/app/bsky/notification/defs.d.ts +1 -0
- package/dist/lexicon/types/app/bsky/notification/defs.d.ts.map +1 -1
- package/dist/lexicon/types/app/bsky/notification/defs.js.map +1 -1
- package/dist/lexicon/types/chat/bsky/actor/declaration.d.ts +1 -1
- package/dist/lexicon/types/chat/bsky/actor/declaration.d.ts.map +1 -1
- package/dist/lexicon/types/chat/bsky/actor/declaration.js.map +1 -1
- package/dist/lexicon/types/chat/bsky/actor/defs.d.ts +2 -3
- package/dist/lexicon/types/chat/bsky/actor/defs.d.ts.map +1 -1
- package/dist/lexicon/types/chat/bsky/actor/defs.js.map +1 -1
- package/dist/lexicon/types/chat/bsky/convo/defs.d.ts +39 -36
- package/dist/lexicon/types/chat/bsky/convo/defs.d.ts.map +1 -1
- package/dist/lexicon/types/chat/bsky/convo/defs.js +7 -0
- package/dist/lexicon/types/chat/bsky/convo/defs.js.map +1 -1
- package/dist/lexicon/types/chat/bsky/convo/getUnreadCounts.d.ts +2 -2
- package/dist/lexicon/types/chat/bsky/convo/getUnreadCounts.d.ts.map +1 -1
- package/dist/lexicon/types/chat/bsky/convo/getUnreadCounts.js.map +1 -1
- package/dist/lexicon/types/chat/bsky/moderation/defs.d.ts +3 -3
- package/dist/lexicon/types/chat/bsky/moderation/defs.d.ts.map +1 -1
- package/dist/lexicon/types/chat/bsky/moderation/defs.js.map +1 -1
- package/dist/lexicon/types/chat/bsky/notification/defs.d.ts +19 -0
- package/dist/lexicon/types/chat/bsky/notification/defs.d.ts.map +1 -0
- package/dist/lexicon/types/chat/bsky/notification/defs.js +19 -0
- package/dist/lexicon/types/chat/bsky/notification/defs.js.map +1 -0
- package/dist/lexicon/types/chat/bsky/notification/getPreferences.d.ts +20 -0
- package/dist/lexicon/types/chat/bsky/notification/getPreferences.d.ts.map +1 -0
- package/dist/lexicon/types/chat/bsky/notification/getPreferences.js +5 -0
- package/dist/lexicon/types/chat/bsky/notification/getPreferences.js.map +1 -0
- package/dist/lexicon/types/chat/bsky/notification/putPreferences.d.ts +26 -0
- package/dist/lexicon/types/chat/bsky/notification/putPreferences.d.ts.map +1 -0
- package/dist/lexicon/types/chat/bsky/notification/putPreferences.js +5 -0
- package/dist/lexicon/types/chat/bsky/notification/putPreferences.js.map +1 -0
- package/dist/lexicon/types/tools/ozone/report/defs.d.ts +1 -0
- package/dist/lexicon/types/tools/ozone/report/defs.d.ts.map +1 -1
- package/dist/lexicon/types/tools/ozone/report/defs.js.map +1 -1
- package/dist/lexicon/types/tools/ozone/report/queryActivities.d.ts +32 -0
- package/dist/lexicon/types/tools/ozone/report/queryActivities.d.ts.map +1 -0
- package/dist/lexicon/types/tools/ozone/report/queryActivities.js +5 -0
- package/dist/lexicon/types/tools/ozone/report/queryActivities.js.map +1 -0
- package/dist/mod-service/report.d.ts +1 -0
- package/dist/mod-service/report.d.ts.map +1 -1
- package/dist/mod-service/report.js +16 -0
- package/dist/mod-service/report.js.map +1 -1
- package/dist/report/activity.d.ts +19 -1
- package/dist/report/activity.d.ts.map +1 -1
- package/dist/report/activity.js +27 -1
- package/dist/report/activity.js.map +1 -1
- package/package.json +15 -14
- package/src/api/index.ts +2 -0
- package/src/api/report/queryActivities.ts +64 -0
- package/src/background.ts +19 -4
- package/src/context.ts +1 -1
- package/src/daemon/context.ts +1 -1
- package/src/daemon/verification-listener.ts +9 -4
- package/src/db/migrations/20260602T120000000Z-add-report-activity-created-index.ts +17 -0
- package/src/db/migrations/index.ts +1 -0
- package/src/index.ts +25 -15
- package/src/jetstream/service.ts +3 -1
- package/src/mod-service/report.ts +19 -0
- package/src/report/activity.ts +47 -0
- package/tests/3p-labeler.test.ts +2 -2
- package/tests/_util.ts +8 -25
- package/tests/account-strikes.test.ts +1 -1
- package/tests/ack-all-subjects-of-account.test.ts +1 -1
- package/tests/age-assurance.test.ts +1 -1
- package/tests/blob-divert.test.ts +1 -1
- package/tests/communication-templates.test.ts +1 -1
- package/tests/content-tagger.test.ts +1 -1
- package/tests/db.test.ts +1 -1
- package/tests/expiring-label.test.ts +1 -1
- package/tests/expiring-tags.test.ts +1 -1
- package/tests/get-account-timeline.test.ts +1 -1
- package/tests/get-config.test.ts +1 -1
- package/tests/get-lists.test.ts +2 -1
- package/tests/get-profiles.test.ts +1 -1
- package/tests/get-record.test.ts +1 -1
- package/tests/get-records.test.ts +1 -1
- package/tests/get-repo.test.ts +1 -1
- package/tests/get-report.test.ts +1 -1
- package/tests/get-reporter-stats.test.ts +1 -1
- package/tests/get-repos.test.ts +1 -1
- package/tests/get-starter-pack.test.ts +1 -1
- package/tests/get-subjects.test.ts +1 -1
- package/tests/mod-tool.test.ts +1 -1
- package/tests/moderation-appeals.test.ts +1 -1
- package/tests/moderation-events.test.ts +1 -1
- package/tests/moderation-status-tags.test.ts +1 -1
- package/tests/moderation-statuses.test.ts +1 -1
- package/tests/moderation.test.ts +1 -1
- package/tests/protected-tags.test.ts +1 -1
- package/tests/query-labels.test.ts +1 -1
- package/tests/query-reports.test.ts +1 -1
- package/tests/queue-assignment.test.ts +1 -1
- package/tests/queue-router.test.ts +1 -1
- package/tests/queues.test.ts +1 -1
- package/tests/record-and-account-events.test.ts +1 -1
- package/tests/repo-search.test.ts +2 -2
- package/tests/report-action.test.ts +1 -1
- package/tests/report-activity.test.ts +145 -1
- package/tests/report-assignment.test.ts +1 -1
- package/tests/report-muting.test.ts +1 -1
- package/tests/report-reason.test.ts +1 -1
- package/tests/report-reassign-queue.test.ts +1 -1
- package/tests/report-routing.test.ts +1 -1
- package/tests/report-stats.test.ts +1 -1
- package/tests/revoke-account-credentials.test.ts +1 -1
- package/tests/safelink.test.ts +1 -1
- package/tests/scheduled-action-processor.test.ts +1 -1
- package/tests/scheduled-action.test.ts +1 -1
- package/tests/sequencer.test.ts +1 -1
- package/tests/server.test.ts +9 -12
- package/tests/sets.test.ts +1 -1
- package/tests/settings.test.ts +1 -1
- package/tests/strike-expiry-processor.test.ts +1 -1
- package/tests/subject-priority-score.test.ts +1 -1
- package/tests/takedown.test.ts +1 -1
- package/tests/team.test.ts +1 -1
- package/tests/verification-listener.test.ts +40 -13
- package/tests/verification.test.ts +1 -1
- package/tsconfig.build.tsbuildinfo +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,42 @@
|
|
|
1
1
|
# @atproto/ozone
|
|
2
2
|
|
|
3
|
+
## 0.2.7
|
|
4
|
+
|
|
5
|
+
### Patch Changes
|
|
6
|
+
|
|
7
|
+
- [#5151](https://github.com/bluesky-social/atproto/pull/5151) [`a51c45d`](https://github.com/bluesky-social/atproto/commit/a51c45d38f6bd7b8765f640e564cf921d52162e7) Thanks [@matthieusieben](https://github.com/matthieusieben)! - Update dependencies
|
|
8
|
+
|
|
9
|
+
- [#5149](https://github.com/bluesky-social/atproto/pull/5149) [`f2cf8f7`](https://github.com/bluesky-social/atproto/commit/f2cf8f7fc5f3a10847f2e6d785e5fa2244ee8cfb) Thanks [@matthieusieben](https://github.com/matthieusieben)! - Update `pino` logger to version 10
|
|
10
|
+
|
|
11
|
+
- Updated dependencies [[`f2cf8f7`](https://github.com/bluesky-social/atproto/commit/f2cf8f7fc5f3a10847f2e6d785e5fa2244ee8cfb), [`a51c45d`](https://github.com/bluesky-social/atproto/commit/a51c45d38f6bd7b8765f640e564cf921d52162e7), [`f2cf8f7`](https://github.com/bluesky-social/atproto/commit/f2cf8f7fc5f3a10847f2e6d785e5fa2244ee8cfb)]:
|
|
12
|
+
- @atproto/common@0.6.4
|
|
13
|
+
- @atproto/api@0.20.22
|
|
14
|
+
- @atproto/crypto@0.5.2
|
|
15
|
+
- @atproto/identity@0.5.2
|
|
16
|
+
- @atproto/lexicon@0.7.3
|
|
17
|
+
- @atproto/syntax@0.6.3
|
|
18
|
+
- @atproto/ws-client@0.1.3
|
|
19
|
+
- @atproto/xrpc@0.8.2
|
|
20
|
+
- @atproto/xrpc-server@0.11.3
|
|
21
|
+
|
|
22
|
+
## 0.2.6
|
|
23
|
+
|
|
24
|
+
### Patch Changes
|
|
25
|
+
|
|
26
|
+
- [#5116](https://github.com/bluesky-social/atproto/pull/5116) [`39f5c01`](https://github.com/bluesky-social/atproto/commit/39f5c018791ae70391fc86f44be283075dfa206b) Thanks [@matthieusieben](https://github.com/matthieusieben)! - Update undici dependency to v8.5.0
|
|
27
|
+
|
|
28
|
+
- [#5117](https://github.com/bluesky-social/atproto/pull/5117) [`8a4c88b`](https://github.com/bluesky-social/atproto/commit/8a4c88b0f63fb2d82b1391d64c54e0c760fac48b) Thanks [@matthieusieben](https://github.com/matthieusieben)! - Make BackgroundQueue implementation more resilient
|
|
29
|
+
|
|
30
|
+
- [#5117](https://github.com/bluesky-social/atproto/pull/5117) [`8a4c88b`](https://github.com/bluesky-social/atproto/commit/8a4c88b0f63fb2d82b1391d64c54e0c760fac48b) Thanks [@matthieusieben](https://github.com/matthieusieben)! - Make tests less flaky in CI
|
|
31
|
+
|
|
32
|
+
- [#5030](https://github.com/bluesky-social/atproto/pull/5030) [`7011bdb`](https://github.com/bluesky-social/atproto/commit/7011bdb1905cb81b10a3ca6ddbc0a6afffc23a70) Thanks [@foysalit](https://github.com/foysalit)! - Add tools.ozone.report.queryActivities endpoint to ozone
|
|
33
|
+
|
|
34
|
+
- [#5117](https://github.com/bluesky-social/atproto/pull/5117) [`8a4c88b`](https://github.com/bluesky-social/atproto/commit/8a4c88b0f63fb2d82b1391d64c54e0c760fac48b) Thanks [@matthieusieben](https://github.com/matthieusieben)! - Use http-terminator to close http server
|
|
35
|
+
|
|
36
|
+
- Updated dependencies [[`8a4c88b`](https://github.com/bluesky-social/atproto/commit/8a4c88b0f63fb2d82b1391d64c54e0c760fac48b), [`cab3ac3`](https://github.com/bluesky-social/atproto/commit/cab3ac321bf939a4c8ba29aed3f632d8a91790bf)]:
|
|
37
|
+
- @atproto/api@0.20.17
|
|
38
|
+
- @atproto/ws-client@0.1.2
|
|
39
|
+
|
|
3
40
|
## 0.2.5
|
|
4
41
|
|
|
5
42
|
### Patch Changes
|
package/dist/api/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/api/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,eAAe,CAAA;AAC1C,OAAO,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAA;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/api/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,eAAe,CAAA;AAC1C,OAAO,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAA;AAsE5C,OAAO,KAAK,MAAM,MAAM,aAAa,CAAA;AAErC,OAAO,KAAK,SAAS,MAAM,iBAAiB,CAAA;AAE5C,MAAM,CAAC,OAAO,WAAW,MAAM,EAAE,MAAM,EAAE,GAAG,EAAE,UAAU,UAsEvD"}
|
package/dist/api/index.js
CHANGED
|
@@ -39,6 +39,7 @@ import getLatestReport from './report/getLatestReport.js';
|
|
|
39
39
|
import getLiveStats from './report/getLiveStats.js';
|
|
40
40
|
import getReport from './report/getReport.js';
|
|
41
41
|
import listActivities from './report/listActivities.js';
|
|
42
|
+
import queryActivities from './report/queryActivities.js';
|
|
42
43
|
import queryReports from './report/queryReports.js';
|
|
43
44
|
import reassignQueue from './report/reassignQueue.js';
|
|
44
45
|
import refreshStats from './report/refreshStats.js';
|
|
@@ -134,6 +135,7 @@ export default function (server, ctx) {
|
|
|
134
135
|
getReportAssignments(server, ctx);
|
|
135
136
|
createActivity(server, ctx);
|
|
136
137
|
listActivities(server, ctx);
|
|
138
|
+
queryActivities(server, ctx);
|
|
137
139
|
reassignQueue(server, ctx);
|
|
138
140
|
return server;
|
|
139
141
|
}
|
package/dist/api/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/api/index.ts"],"names":[],"mappings":"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","sourcesContent":["import { AppContext } from '../context.js'\nimport { Server } from '../lexicon/index.js'\nimport chat from './chat/index.js'\nimport createTemplate from './communication/createTemplate.js'\nimport deleteTemplate from './communication/deleteTemplate.js'\nimport listTemplates from './communication/listTemplates.js'\nimport updateTemplate from './communication/updateTemplate.js'\nimport fetchLabels from './label/fetchLabels.js'\nimport queryLabels from './label/queryLabels.js'\nimport subscribeLabels from './label/subscribeLabels.js'\nimport cancelScheduledActions from './moderation/cancelScheduledActions.js'\nimport emitEvent from './moderation/emitEvent.js'\nimport getAccountTimeline from './moderation/getAccountTimeline.js'\nimport getEvent from './moderation/getEvent.js'\nimport adminGetRecord from './moderation/getRecord.js'\nimport adminGetRecords from './moderation/getRecords.js'\nimport getRepo from './moderation/getRepo.js'\nimport getReporterStats from './moderation/getReporterStats.js'\nimport getRepos from './moderation/getRepos.js'\nimport getSubjects from './moderation/getSubjects.js'\nimport listScheduledActions from './moderation/listScheduledActions.js'\nimport queryEvents from './moderation/queryEvents.js'\nimport queryStatuses from './moderation/queryStatuses.js'\nimport scheduleAction from './moderation/scheduleAction.js'\nimport searchRepos from './moderation/searchRepos.js'\nimport proxied from './proxied.js'\nimport assignQueueModerator from './queue/assignModerator.js'\nimport createQueue from './queue/createQueue.js'\nimport deleteQueue from './queue/deleteQueue.js'\nimport getQueueAssignments from './queue/getAssignments.js'\nimport listQueues from './queue/listQueues.js'\nimport routeReports from './queue/routeReports.js'\nimport unassignQueueModerator from './queue/unassignModerator.js'\nimport updateQueue from './queue/updateQueue.js'\nimport assignReportModerator from './report/assignModerator.js'\nimport createActivity from './report/createActivity.js'\nimport createReport from './report/createReport.js'\nimport getReportAssignments from './report/getAssignments.js'\nimport getHistoricalStats from './report/getHistoricalStats.js'\nimport getLatestReport from './report/getLatestReport.js'\nimport getLiveStats from './report/getLiveStats.js'\nimport getReport from './report/getReport.js'\nimport listActivities from './report/listActivities.js'\nimport queryReports from './report/queryReports.js'\nimport reassignQueue from './report/reassignQueue.js'\nimport refreshStats from './report/refreshStats.js'\nimport unassignReportModerator from './report/unassignModerator.js'\nimport addSafelinkRule from './safelink/addRule.js'\nimport querySafelinkEvents from './safelink/queryEvents.js'\nimport querySafelinkRules from './safelink/queryRules.js'\nimport removeSafelinkRule from './safelink/removeRule.js'\nimport updateSafelinkRule from './safelink/updateRule.js'\nimport getConfig from './server/getConfig.js'\nimport setAddValues from './set/addValues.js'\nimport deleteSet from './set/deleteSet.js'\nimport setDeleteValues from './set/deleteValues.js'\nimport setGetValues from './set/getValues.js'\nimport querySets from './set/querySets.js'\nimport upsertSet from './set/upsertSet.js'\nimport listOptions from './setting/listOptions.js'\nimport removeOptions from './setting/removeOptions.js'\nimport upsertOption from './setting/upsertOption.js'\nimport addMember from './team/addMember.js'\nimport deleteMember from './team/deleteMember.js'\nimport listMembers from './team/listMembers.js'\nimport updateMember from './team/updateMember.js'\nimport grantVerifications from './verification/grantVerifications.js'\nimport listVerifications from './verification/listVerifications.js'\nimport revokeVerifications from './verification/revokeVerifications.js'\n\nexport * as health from './health.js'\n\nexport * as wellKnown from './well-known.js'\n\nexport default function (server: Server, ctx: AppContext) {\n createReport(server, ctx)\n emitEvent(server, ctx)\n searchRepos(server, ctx)\n adminGetRecord(server, ctx)\n adminGetRecords(server, ctx)\n getRepo(server, ctx)\n getRepos(server, ctx)\n getEvent(server, ctx)\n queryEvents(server, ctx)\n getReport(server, ctx)\n queryReports(server, ctx)\n queryStatuses(server, ctx)\n queryLabels(server, ctx)\n subscribeLabels(server, ctx)\n fetchLabels(server, ctx)\n listTemplates(server, ctx)\n createTemplate(server, ctx)\n updateTemplate(server, ctx)\n deleteTemplate(server, ctx)\n listMembers(server, ctx)\n addMember(server, ctx)\n updateMember(server, ctx)\n deleteMember(server, ctx)\n chat(server, ctx)\n proxied(server, ctx)\n getConfig(server, ctx)\n createQueue(server, ctx)\n listQueues(server, ctx)\n updateQueue(server, ctx)\n deleteQueue(server, ctx)\n setAddValues(server, ctx)\n setGetValues(server, ctx)\n querySets(server, ctx)\n upsertSet(server, ctx)\n setDeleteValues(server, ctx)\n deleteSet(server, ctx)\n upsertOption(server, ctx)\n listOptions(server, ctx)\n removeOptions(server, ctx)\n getReporterStats(server, ctx)\n getSubjects(server, ctx)\n grantVerifications(server, ctx)\n revokeVerifications(server, ctx)\n listVerifications(server, ctx)\n addSafelinkRule(server, ctx)\n updateSafelinkRule(server, ctx)\n removeSafelinkRule(server, ctx)\n querySafelinkEvents(server, ctx)\n querySafelinkRules(server, ctx)\n getAccountTimeline(server, ctx)\n scheduleAction(server, ctx)\n listScheduledActions(server, ctx)\n cancelScheduledActions(server, ctx)\n routeReports(server, ctx)\n getLiveStats(server, ctx)\n getHistoricalStats(server, ctx)\n refreshStats(server, ctx)\n assignQueueModerator(server, ctx)\n unassignQueueModerator(server, ctx)\n getQueueAssignments(server, ctx)\n getLatestReport(server, ctx)\n assignReportModerator(server, ctx)\n unassignReportModerator(server, ctx)\n getReportAssignments(server, ctx)\n createActivity(server, ctx)\n listActivities(server, ctx)\n reassignQueue(server, ctx)\n return server\n}\n"]}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/api/index.ts"],"names":[],"mappings":"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","sourcesContent":["import { AppContext } from '../context.js'\nimport { Server } from '../lexicon/index.js'\nimport chat from './chat/index.js'\nimport createTemplate from './communication/createTemplate.js'\nimport deleteTemplate from './communication/deleteTemplate.js'\nimport listTemplates from './communication/listTemplates.js'\nimport updateTemplate from './communication/updateTemplate.js'\nimport fetchLabels from './label/fetchLabels.js'\nimport queryLabels from './label/queryLabels.js'\nimport subscribeLabels from './label/subscribeLabels.js'\nimport cancelScheduledActions from './moderation/cancelScheduledActions.js'\nimport emitEvent from './moderation/emitEvent.js'\nimport getAccountTimeline from './moderation/getAccountTimeline.js'\nimport getEvent from './moderation/getEvent.js'\nimport adminGetRecord from './moderation/getRecord.js'\nimport adminGetRecords from './moderation/getRecords.js'\nimport getRepo from './moderation/getRepo.js'\nimport getReporterStats from './moderation/getReporterStats.js'\nimport getRepos from './moderation/getRepos.js'\nimport getSubjects from './moderation/getSubjects.js'\nimport listScheduledActions from './moderation/listScheduledActions.js'\nimport queryEvents from './moderation/queryEvents.js'\nimport queryStatuses from './moderation/queryStatuses.js'\nimport scheduleAction from './moderation/scheduleAction.js'\nimport searchRepos from './moderation/searchRepos.js'\nimport proxied from './proxied.js'\nimport assignQueueModerator from './queue/assignModerator.js'\nimport createQueue from './queue/createQueue.js'\nimport deleteQueue from './queue/deleteQueue.js'\nimport getQueueAssignments from './queue/getAssignments.js'\nimport listQueues from './queue/listQueues.js'\nimport routeReports from './queue/routeReports.js'\nimport unassignQueueModerator from './queue/unassignModerator.js'\nimport updateQueue from './queue/updateQueue.js'\nimport assignReportModerator from './report/assignModerator.js'\nimport createActivity from './report/createActivity.js'\nimport createReport from './report/createReport.js'\nimport getReportAssignments from './report/getAssignments.js'\nimport getHistoricalStats from './report/getHistoricalStats.js'\nimport getLatestReport from './report/getLatestReport.js'\nimport getLiveStats from './report/getLiveStats.js'\nimport getReport from './report/getReport.js'\nimport listActivities from './report/listActivities.js'\nimport queryActivities from './report/queryActivities.js'\nimport queryReports from './report/queryReports.js'\nimport reassignQueue from './report/reassignQueue.js'\nimport refreshStats from './report/refreshStats.js'\nimport unassignReportModerator from './report/unassignModerator.js'\nimport addSafelinkRule from './safelink/addRule.js'\nimport querySafelinkEvents from './safelink/queryEvents.js'\nimport querySafelinkRules from './safelink/queryRules.js'\nimport removeSafelinkRule from './safelink/removeRule.js'\nimport updateSafelinkRule from './safelink/updateRule.js'\nimport getConfig from './server/getConfig.js'\nimport setAddValues from './set/addValues.js'\nimport deleteSet from './set/deleteSet.js'\nimport setDeleteValues from './set/deleteValues.js'\nimport setGetValues from './set/getValues.js'\nimport querySets from './set/querySets.js'\nimport upsertSet from './set/upsertSet.js'\nimport listOptions from './setting/listOptions.js'\nimport removeOptions from './setting/removeOptions.js'\nimport upsertOption from './setting/upsertOption.js'\nimport addMember from './team/addMember.js'\nimport deleteMember from './team/deleteMember.js'\nimport listMembers from './team/listMembers.js'\nimport updateMember from './team/updateMember.js'\nimport grantVerifications from './verification/grantVerifications.js'\nimport listVerifications from './verification/listVerifications.js'\nimport revokeVerifications from './verification/revokeVerifications.js'\n\nexport * as health from './health.js'\n\nexport * as wellKnown from './well-known.js'\n\nexport default function (server: Server, ctx: AppContext) {\n createReport(server, ctx)\n emitEvent(server, ctx)\n searchRepos(server, ctx)\n adminGetRecord(server, ctx)\n adminGetRecords(server, ctx)\n getRepo(server, ctx)\n getRepos(server, ctx)\n getEvent(server, ctx)\n queryEvents(server, ctx)\n getReport(server, ctx)\n queryReports(server, ctx)\n queryStatuses(server, ctx)\n queryLabels(server, ctx)\n subscribeLabels(server, ctx)\n fetchLabels(server, ctx)\n listTemplates(server, ctx)\n createTemplate(server, ctx)\n updateTemplate(server, ctx)\n deleteTemplate(server, ctx)\n listMembers(server, ctx)\n addMember(server, ctx)\n updateMember(server, ctx)\n deleteMember(server, ctx)\n chat(server, ctx)\n proxied(server, ctx)\n getConfig(server, ctx)\n createQueue(server, ctx)\n listQueues(server, ctx)\n updateQueue(server, ctx)\n deleteQueue(server, ctx)\n setAddValues(server, ctx)\n setGetValues(server, ctx)\n querySets(server, ctx)\n upsertSet(server, ctx)\n setDeleteValues(server, ctx)\n deleteSet(server, ctx)\n upsertOption(server, ctx)\n listOptions(server, ctx)\n removeOptions(server, ctx)\n getReporterStats(server, ctx)\n getSubjects(server, ctx)\n grantVerifications(server, ctx)\n revokeVerifications(server, ctx)\n listVerifications(server, ctx)\n addSafelinkRule(server, ctx)\n updateSafelinkRule(server, ctx)\n removeSafelinkRule(server, ctx)\n querySafelinkEvents(server, ctx)\n querySafelinkRules(server, ctx)\n getAccountTimeline(server, ctx)\n scheduleAction(server, ctx)\n listScheduledActions(server, ctx)\n cancelScheduledActions(server, ctx)\n routeReports(server, ctx)\n getLiveStats(server, ctx)\n getHistoricalStats(server, ctx)\n refreshStats(server, ctx)\n assignQueueModerator(server, ctx)\n unassignQueueModerator(server, ctx)\n getQueueAssignments(server, ctx)\n getLatestReport(server, ctx)\n assignReportModerator(server, ctx)\n unassignReportModerator(server, ctx)\n getReportAssignments(server, ctx)\n createActivity(server, ctx)\n listActivities(server, ctx)\n queryActivities(server, ctx)\n reassignQueue(server, ctx)\n return server\n}\n"]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"queryActivities.d.ts","sourceRoot":"","sources":["../../../src/api/report/queryActivities.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAA;AAC7C,OAAO,EAAE,MAAM,EAAE,MAAM,wBAAwB,CAAA;AAU/C,MAAM,CAAC,OAAO,WAAW,MAAM,EAAE,MAAM,EAAE,GAAG,EAAE,UAAU,QAoDvD"}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
import { getReportsByIds } from '../../mod-service/report.js';
|
|
2
|
+
import { formatActivityView, queryReportActivities, } from '../../report/activity.js';
|
|
3
|
+
import { buildReportView, hydrateReportInfo } from '../../report/views.js';
|
|
4
|
+
import { getPdsAccountInfos } from '../util.js';
|
|
5
|
+
export default function (server, ctx) {
|
|
6
|
+
server.tools.ozone.report.queryActivities({
|
|
7
|
+
auth: ctx.authVerifier.modOrAdminToken,
|
|
8
|
+
handler: async ({ params, auth, req }) => {
|
|
9
|
+
const db = ctx.db;
|
|
10
|
+
const modService = ctx.modService(db);
|
|
11
|
+
const labelers = ctx.reqLabelers(req);
|
|
12
|
+
const { activities, cursor: nextCursor } = await queryReportActivities(db, params);
|
|
13
|
+
// Dedupe report IDs across the page. Many activities can share the
|
|
14
|
+
// same report so we want one bulk fetch + hydrate rather than N.
|
|
15
|
+
const reportIds = Array.from(new Set(activities.map((a) => a.reportId)));
|
|
16
|
+
const queueService = ctx.queueService(db);
|
|
17
|
+
const teamService = ctx.teamService(db);
|
|
18
|
+
const reports = await getReportsByIds(db, reportIds);
|
|
19
|
+
const hydrated = await hydrateReportInfo(reports, modService.views, (dids) => getPdsAccountInfos(ctx, dids), (queueIds) => queueService.getViewsByIds(queueIds), (dids) => teamService.viewByDids(dids), labelers);
|
|
20
|
+
const reportViews = new Map();
|
|
21
|
+
for (const report of reports) {
|
|
22
|
+
reportViews.set(report.id, buildReportView(report, hydrated, auth.credentials.isModerator));
|
|
23
|
+
}
|
|
24
|
+
const createdByDids = Array.from(new Set(activities.map((a) => a.createdBy)));
|
|
25
|
+
const memberViews = await teamService.viewByDids(createdByDids);
|
|
26
|
+
return {
|
|
27
|
+
encoding: 'application/json',
|
|
28
|
+
body: {
|
|
29
|
+
activities: activities.map((activity) => formatActivityView(activity, memberViews, reportViews)),
|
|
30
|
+
cursor: nextCursor,
|
|
31
|
+
},
|
|
32
|
+
};
|
|
33
|
+
},
|
|
34
|
+
});
|
|
35
|
+
}
|
|
36
|
+
//# sourceMappingURL=queryActivities.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"queryActivities.js","sourceRoot":"","sources":["../../../src/api/report/queryActivities.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,eAAe,EAAE,MAAM,6BAA6B,CAAA;AAC7D,OAAO,EACL,kBAAkB,EAClB,qBAAqB,GACtB,MAAM,0BAA0B,CAAA;AACjC,OAAO,EAAE,eAAe,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAA;AAC1E,OAAO,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAA;AAE/C,MAAM,CAAC,OAAO,WAAW,MAAc,EAAE,GAAe;IACtD,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC,eAAe,CAAC;QACxC,IAAI,EAAE,GAAG,CAAC,YAAY,CAAC,eAAe;QACtC,OAAO,EAAE,KAAK,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,GAAG,EAAE,EAAE,EAAE;YACvC,MAAM,EAAE,GAAG,GAAG,CAAC,EAAE,CAAA;YACjB,MAAM,UAAU,GAAG,GAAG,CAAC,UAAU,CAAC,EAAE,CAAC,CAAA;YACrC,MAAM,QAAQ,GAAG,GAAG,CAAC,WAAW,CAAC,GAAG,CAAC,CAAA;YAErC,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,UAAU,EAAE,GAAG,MAAM,qBAAqB,CACpE,EAAE,EACF,MAAM,CACP,CAAA;YAED,mEAAmE;YACnE,iEAAiE;YACjE,MAAM,SAAS,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,GAAG,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAA;YAExE,MAAM,YAAY,GAAG,GAAG,CAAC,YAAY,CAAC,EAAE,CAAC,CAAA;YACzC,MAAM,WAAW,GAAG,GAAG,CAAC,WAAW,CAAC,EAAE,CAAC,CAAA;YACvC,MAAM,OAAO,GAAG,MAAM,eAAe,CAAC,EAAE,EAAE,SAAS,CAAC,CAAA;YACpD,MAAM,QAAQ,GAAG,MAAM,iBAAiB,CACtC,OAAO,EACP,UAAU,CAAC,KAAK,EAChB,CAAC,IAAI,EAAE,EAAE,CAAC,kBAAkB,CAAC,GAAG,EAAE,IAAI,CAAC,EACvC,CAAC,QAAQ,EAAE,EAAE,CAAC,YAAY,CAAC,aAAa,CAAC,QAAQ,CAAC,EAClD,CAAC,IAAI,EAAE,EAAE,CAAC,WAAW,CAAC,UAAU,CAAC,IAAI,CAAC,EACtC,QAAQ,CACT,CAAA;YACD,MAAM,WAAW,GAAG,IAAI,GAAG,EAAsB,CAAA;YACjD,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE,CAAC;gBAC7B,WAAW,CAAC,GAAG,CACb,MAAM,CAAC,EAAE,EACT,eAAe,CAAC,MAAM,EAAE,QAAQ,EAAE,IAAI,CAAC,WAAW,CAAC,WAAW,CAAC,CAChE,CAAA;YACH,CAAC;YAED,MAAM,aAAa,GAAG,KAAK,CAAC,IAAI,CAC9B,IAAI,GAAG,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAC5C,CAAA;YACD,MAAM,WAAW,GAAG,MAAM,WAAW,CAAC,UAAU,CAAC,aAAa,CAAC,CAAA;YAE/D,OAAO;gBACL,QAAQ,EAAE,kBAAkB;gBAC5B,IAAI,EAAE;oBACJ,UAAU,EAAE,UAAU,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE,EAAE,CACtC,kBAAkB,CAAC,QAAQ,EAAE,WAAW,EAAE,WAAW,CAAC,CACvD;oBACD,MAAM,EAAE,UAAU;iBACnB;aACF,CAAA;QACH,CAAC;KACF,CAAC,CAAA;AACJ,CAAC","sourcesContent":["import { AppContext } from '../../context.js'\nimport { Server } from '../../lexicon/index.js'\nimport { ReportView } from '../../lexicon/types/tools/ozone/report/defs.js'\nimport { getReportsByIds } from '../../mod-service/report.js'\nimport {\n formatActivityView,\n queryReportActivities,\n} from '../../report/activity.js'\nimport { buildReportView, hydrateReportInfo } from '../../report/views.js'\nimport { getPdsAccountInfos } from '../util.js'\n\nexport default function (server: Server, ctx: AppContext) {\n server.tools.ozone.report.queryActivities({\n auth: ctx.authVerifier.modOrAdminToken,\n handler: async ({ params, auth, req }) => {\n const db = ctx.db\n const modService = ctx.modService(db)\n const labelers = ctx.reqLabelers(req)\n\n const { activities, cursor: nextCursor } = await queryReportActivities(\n db,\n params,\n )\n\n // Dedupe report IDs across the page. Many activities can share the\n // same report so we want one bulk fetch + hydrate rather than N.\n const reportIds = Array.from(new Set(activities.map((a) => a.reportId)))\n\n const queueService = ctx.queueService(db)\n const teamService = ctx.teamService(db)\n const reports = await getReportsByIds(db, reportIds)\n const hydrated = await hydrateReportInfo(\n reports,\n modService.views,\n (dids) => getPdsAccountInfos(ctx, dids),\n (queueIds) => queueService.getViewsByIds(queueIds),\n (dids) => teamService.viewByDids(dids),\n labelers,\n )\n const reportViews = new Map<number, ReportView>()\n for (const report of reports) {\n reportViews.set(\n report.id,\n buildReportView(report, hydrated, auth.credentials.isModerator),\n )\n }\n\n const createdByDids = Array.from(\n new Set(activities.map((a) => a.createdBy)),\n )\n const memberViews = await teamService.viewByDids(createdByDids)\n\n return {\n encoding: 'application/json',\n body: {\n activities: activities.map((activity) =>\n formatActivityView(activity, memberViews, reportViews),\n ),\n cursor: nextCursor,\n },\n }\n },\n })\n}\n"]}
|
package/dist/background.d.ts
CHANGED
|
@@ -1,5 +1,9 @@
|
|
|
1
|
+
import PQueue from 'p-queue';
|
|
1
2
|
import { Database } from './db/index.js';
|
|
2
3
|
type Task = (db: Database, signal: AbortSignal) => Promise<void>;
|
|
4
|
+
export type BackgroundQueueOptions = NonNullable<ConstructorParameters<typeof PQueue>[0]> & {
|
|
5
|
+
concurrency: number;
|
|
6
|
+
};
|
|
3
7
|
/**
|
|
4
8
|
* A simple queue for in-process, out-of-band/backgrounded work
|
|
5
9
|
*/
|
|
@@ -9,9 +13,7 @@ export declare class BackgroundQueue {
|
|
|
9
13
|
private queue;
|
|
10
14
|
get signal(): AbortSignal;
|
|
11
15
|
get destroyed(): boolean;
|
|
12
|
-
constructor(db: Database,
|
|
13
|
-
concurrency?: number;
|
|
14
|
-
});
|
|
16
|
+
constructor(db: Database, options: BackgroundQueueOptions);
|
|
15
17
|
getStats(): {
|
|
16
18
|
runningCount: number;
|
|
17
19
|
waitingCount: number;
|
package/dist/background.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"background.d.ts","sourceRoot":"","sources":["../src/background.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"background.d.ts","sourceRoot":"","sources":["../src/background.ts"],"names":[],"mappings":"AAAA,OAAO,MAAM,MAAM,SAAS,CAAA;AAC5B,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAA;AAQxC,KAAK,IAAI,GAAG,CAAC,EAAE,EAAE,QAAQ,EAAE,MAAM,EAAE,WAAW,KAAK,OAAO,CAAC,IAAI,CAAC,CAAA;AAEhE,MAAM,MAAM,sBAAsB,GAAG,WAAW,CAC9C,qBAAqB,CAAC,OAAO,MAAM,CAAC,CAAC,CAAC,CAAC,CACxC,GAAG;IACF,WAAW,EAAE,MAAM,CAAA;CACpB,CAAA;AAED;;GAEG;AAKH,qBAAa,eAAe;IAaxB,SAAS,CAAC,EAAE,EAAE,QAAQ;IAZxB,OAAO,CAAC,eAAe,CAAwB;IAC/C,OAAO,CAAC,KAAK,CAAQ;IAErB,IAAW,MAAM,IAAI,WAAW,CAE/B;IAED,IAAW,SAAS,YAEnB;IAED,YACY,EAAE,EAAE,QAAQ,EACtB,OAAO,EAAE,sBAAsB,EAGhC;IAED,QAAQ;QAEJ,YAAY;QACZ,YAAY;MAEf;IAED;;;;;;;;OAQG;IACG,GAAG,CAAC,IAAI,EAAE,IAAI,EAAE,MAAM,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC,CA0BzD;IAEK,UAAU,kBAGf;IAED;;;;;OAKG;IACG,OAAO,kBAOZ;CACF;AAED;;;;;GAKG;AACH,qBAAa,sBAAsB;IAe/B,SAAS,CAAC,eAAe,EAAE,eAAe;IAC1C,SAAS,CAAC,QAAQ,EAAE,MAAM;IAC1B,SAAS,CAAC,IAAI,EAAE,IAAI;IAhBtB,OAAO,CAAC,eAAe,CAAiB;IAExC,OAAO,CAAC,eAAe,CAAC,CAAe;IACvC,OAAO,CAAC,cAAc,CAAC,CAAe;IAEtC,IAAW,MAAM,IAAI,WAAW,CAE/B;IAED,IAAW,SAAS,YAEnB;IAED,YACY,eAAe,EAAE,eAAe,EAChC,QAAQ,EAAE,MAAM,EAChB,IAAI,EAAE,IAAI,EASrB;IAEM,GAAG,CAAC,MAAM,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC,CAmB9C;IAEM,KAAK,SAQX;IAEY,OAAO,kBAQnB;CACF"}
|
package/dist/background.js
CHANGED
|
@@ -4,6 +4,10 @@ import { boundAbortController, isCausedBySignal, startInterval, } from './util.j
|
|
|
4
4
|
/**
|
|
5
5
|
* A simple queue for in-process, out-of-band/backgrounded work
|
|
6
6
|
*/
|
|
7
|
+
// @NOTE Keep this in sync with the BackgroundQueue in
|
|
8
|
+
// - packages/bsky/src/data-plane/server/background.ts
|
|
9
|
+
// - packages/ozone/src/background.ts
|
|
10
|
+
// - packages/pds/src/background.ts
|
|
7
11
|
export class BackgroundQueue {
|
|
8
12
|
get signal() {
|
|
9
13
|
return this.abortController.signal;
|
|
@@ -11,10 +15,10 @@ export class BackgroundQueue {
|
|
|
11
15
|
get destroyed() {
|
|
12
16
|
return this.signal.aborted;
|
|
13
17
|
}
|
|
14
|
-
constructor(db,
|
|
18
|
+
constructor(db, options) {
|
|
15
19
|
this.db = db;
|
|
16
20
|
this.abortController = new AbortController();
|
|
17
|
-
this.queue = new PQueue(
|
|
21
|
+
this.queue = new PQueue(options);
|
|
18
22
|
}
|
|
19
23
|
getStats() {
|
|
20
24
|
return {
|
|
@@ -59,7 +63,9 @@ export class BackgroundQueue {
|
|
|
59
63
|
});
|
|
60
64
|
}
|
|
61
65
|
async processAll() {
|
|
62
|
-
|
|
66
|
+
const { queue } = this;
|
|
67
|
+
while (queue.size || queue.pending)
|
|
68
|
+
await queue.onIdle();
|
|
63
69
|
}
|
|
64
70
|
/**
|
|
65
71
|
* On destroy we stop accepting new tasks, but complete all
|
|
@@ -68,8 +74,11 @@ export class BackgroundQueue {
|
|
|
68
74
|
* only once http connections have drained (tasks no longer being added).
|
|
69
75
|
*/
|
|
70
76
|
async destroy() {
|
|
77
|
+
if (this.destroyed) {
|
|
78
|
+
dbLogger.warn('BackgroundQueue.destroy() called multiple times');
|
|
79
|
+
}
|
|
71
80
|
this.abortController.abort();
|
|
72
|
-
|
|
81
|
+
return this.processAll();
|
|
73
82
|
}
|
|
74
83
|
}
|
|
75
84
|
/**
|
package/dist/background.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"background.js","sourceRoot":"","sources":["../src/background.ts"],"names":[],"mappings":"AAAA,OAAO,MAAM,MAAM,SAAS,CAAA;AAE5B,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAA;AACtC,OAAO,EACL,oBAAoB,EACpB,gBAAgB,EAChB,aAAa,GACd,MAAM,WAAW,CAAA;
|
|
1
|
+
{"version":3,"file":"background.js","sourceRoot":"","sources":["../src/background.ts"],"names":[],"mappings":"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","sourcesContent":["import PQueue from 'p-queue'\nimport { Database } from './db/index.js'\nimport { dbLogger } from './logger.js'\nimport {\n boundAbortController,\n isCausedBySignal,\n startInterval,\n} from './util.js'\n\ntype Task = (db: Database, signal: AbortSignal) => Promise<void>\n\nexport type BackgroundQueueOptions = NonNullable<\n ConstructorParameters<typeof PQueue>[0]\n> & {\n concurrency: number\n}\n\n/**\n * A simple queue for in-process, out-of-band/backgrounded work\n */\n// @NOTE Keep this in sync with the BackgroundQueue in\n// - packages/bsky/src/data-plane/server/background.ts\n// - packages/ozone/src/background.ts\n// - packages/pds/src/background.ts\nexport class BackgroundQueue {\n private abortController = new AbortController()\n private queue: PQueue\n\n public get signal(): AbortSignal {\n return this.abortController.signal\n }\n\n public get destroyed() {\n return this.signal.aborted\n }\n\n constructor(\n protected db: Database,\n options: BackgroundQueueOptions,\n ) {\n this.queue = new PQueue(options)\n }\n\n getStats() {\n return {\n runningCount: this.queue.pending,\n waitingCount: this.queue.size,\n }\n }\n\n /**\n * Add a task that will be executed at some point in the future.\n *\n * The task will be executed even if the backgroundQueue is destroyed, unless\n * the provided `signal` is aborted.\n *\n * The `signal` provided to the task will be aborted whenever either the\n * backgroundQueue is destroyed or the provided `signal` is aborted.\n */\n async add(task: Task, signal?: AbortSignal): Promise<void> {\n if (this.destroyed) {\n return\n }\n\n const abortController = boundAbortController(this.signal, signal)\n\n return this.queue.add<void>(async () => {\n try {\n // Do not run the task if the signal provided to the task has become\n // aborted. Do not use `abortController.signal` here since we do not\n // want to abort the task if the backgroundQueue is being destroyed.\n if (signal?.aborted) return\n\n // The task will receive a \"combined signal\" allowing it to abort if\n // either the backgroundQueue is destroyed or the provided signal is\n // aborted.\n await task(this.db, abortController.signal)\n } catch (err) {\n if (!isCausedBySignal(err, abortController.signal)) {\n dbLogger.error({ err }, 'background queue task failed')\n }\n } finally {\n abortController.abort()\n }\n })\n }\n\n async processAll() {\n const { queue } = this\n while (queue.size || queue.pending) await queue.onIdle()\n }\n\n /**\n * On destroy we stop accepting new tasks, but complete all\n * pending/in-progress tasks. Tasks can decide to abort their current\n * operation based on the signal they received. The application calls this\n * only once http connections have drained (tasks no longer being added).\n */\n async destroy() {\n if (this.destroyed) {\n dbLogger.warn('BackgroundQueue.destroy() called multiple times')\n }\n\n this.abortController.abort()\n return this.processAll()\n }\n}\n\n/**\n * A simple periodic background task runner. This class will schedule a task to\n * run through a provided {@link BackgroundQueue} at a fixed interval. The task\n * will never run more than once concurrently, and will wait at least `interval`\n * milliseconds between the end of one run and the start of the next.\n */\nexport class PeriodicBackgroundTask {\n private abortController: AbortController\n\n private intervalPromise?: Promise<void>\n private runningPromise?: Promise<void>\n\n public get signal(): AbortSignal {\n return this.abortController.signal\n }\n\n public get destroyed() {\n return this.signal.aborted\n }\n\n constructor(\n protected backgroundQueue: BackgroundQueue,\n protected interval: number,\n protected task: Task,\n ) {\n if (!Number.isFinite(interval) || interval <= 0) {\n throw new TypeError('interval must be a positive number')\n }\n\n // Bind this class's signal to the backgroundQueue's signal (destroying this\n // instance if the backgroundQueue is destroyed)\n this.abortController = boundAbortController(backgroundQueue.signal)\n }\n\n public run(signal?: AbortSignal): Promise<void> {\n // `startInterval` already ensures that only one run is in progress at a\n // time. However, we want to be able to expose a `run()` method that can be\n // used to force a run, which could cause concurrent executions. We prevent\n // this using the `runningPromise` property.\n\n if (this.runningPromise) return this.runningPromise\n\n // Combine the `this.signal` with the provided `signal`, if any.\n const abortController = boundAbortController(this.signal, signal)\n\n const promise = this.backgroundQueue.add(this.task, abortController.signal)\n\n return (this.runningPromise = promise).finally(() => {\n if (this.runningPromise === promise) this.runningPromise = undefined\n\n // Cleanup the listeners added by `boundAbortController`\n abortController.abort()\n })\n }\n\n public start() {\n // Noop if already started. Throws if this.signal is aborted (instance is\n // destroyed).\n this.intervalPromise ||= startInterval(\n async (signal) => this.run(signal),\n this.interval,\n this.signal,\n )\n }\n\n public async destroy() {\n // @NOTE This instance does not \"own\" the backgroundQueue, so we do not\n // destroy it here.\n\n this.abortController.abort()\n\n await this.intervalPromise\n this.intervalPromise = undefined\n }\n}\n"]}
|
package/dist/context.js
CHANGED
|
@@ -58,7 +58,7 @@ export class AppContext {
|
|
|
58
58
|
lxm,
|
|
59
59
|
keypair: signingKey,
|
|
60
60
|
});
|
|
61
|
-
const backgroundQueue = new BackgroundQueue(db);
|
|
61
|
+
const backgroundQueue = new BackgroundQueue(db, { concurrency: 20 });
|
|
62
62
|
const blobDiverter = cfg.blobDivert
|
|
63
63
|
? new BlobDiverter(db, {
|
|
64
64
|
idResolver,
|
package/dist/context.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"context.js","sourceRoot":"","sources":["../src/context.ts"],"names":[],"mappings":"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","sourcesContent":["import assert from 'node:assert'\nimport * as plc from '@did-plc/lib'\nimport express from 'express'\nimport { AtpAgent } from '@atproto/api'\nimport { Keypair, Secp256k1Keypair } from '@atproto/crypto'\nimport { DidCache, IdResolver, MemoryCache } from '@atproto/identity'\nimport { createServiceAuthHeaders } from '@atproto/xrpc-server'\nimport { AssignmentService } from './assignment/index.js'\nimport { AuthVerifier } from './auth-verifier.js'\nimport { BackgroundQueue } from './background.js'\nimport {\n CommunicationTemplateService,\n CommunicationTemplateServiceCreator,\n} from './communication-service/template.js'\nimport { OzoneConfig, OzoneSecrets } from './config/index.js'\nimport { BlobDiverter } from './daemon/blob-diverter.js'\nimport { EventPusher } from './daemon/index.js'\nimport { Database } from './db/index.js'\nimport { ImageInvalidator } from './image-invalidator.js'\nimport {\n ModerationService,\n ModerationServiceCreator,\n} from './mod-service/index.js'\nimport {\n ModerationServiceProfile,\n ModerationServiceProfileCreator,\n} from './mod-service/profile.js'\nimport { StrikeService, StrikeServiceCreator } from './mod-service/strike.js'\nimport { QueueService, QueueServiceCreator } from './queue/service.js'\nimport {\n ReportStatsService,\n ReportStatsServiceCreator,\n} from './report/stats.js'\nimport {\n SafelinkRuleService,\n SafelinkRuleServiceCreator,\n} from './safelink/service.js'\nimport {\n ScheduledActionService,\n ScheduledActionServiceCreator,\n} from './scheduled-action/service.js'\nimport { Sequencer } from './sequencer/sequencer.js'\nimport { SetService, SetServiceCreator } from './set/service.js'\nimport { SettingService, SettingServiceCreator } from './setting/service.js'\nimport { TeamService, TeamServiceCreator } from './team/index.js'\nimport {\n LABELER_HEADER_NAME,\n ParsedLabelers,\n defaultLabelerHeader,\n getSigningKeyId,\n parseLabelerHeader,\n} from './util.js'\nimport {\n VerificationIssuer,\n VerificationIssuerCreator,\n} from './verification/issuer.js'\nimport {\n VerificationService,\n VerificationServiceCreator,\n} from './verification/service.js'\n\nexport type AppContextOptions = {\n db: Database\n cfg: OzoneConfig\n modService: ModerationServiceCreator\n moderationServiceProfile: ModerationServiceProfileCreator\n communicationTemplateService: CommunicationTemplateServiceCreator\n safelinkRuleService: SafelinkRuleServiceCreator\n scheduledActionService: ScheduledActionServiceCreator\n queueService: QueueServiceCreator\n reportStatsService: ReportStatsServiceCreator\n setService: SetServiceCreator\n settingService: SettingServiceCreator\n strikeService: StrikeServiceCreator\n teamService: TeamServiceCreator\n appviewAgent: AtpAgent\n pdsAgent: AtpAgent | undefined\n chatAgent: AtpAgent | undefined\n blobDiverter?: BlobDiverter\n signingKey: Keypair\n signingKeyId: number\n didCache: DidCache\n idResolver: IdResolver\n imgInvalidator?: ImageInvalidator\n backgroundQueue: BackgroundQueue\n sequencer: Sequencer\n assignmentService: AssignmentService\n authVerifier: AuthVerifier\n verificationService: VerificationServiceCreator\n verificationIssuer: VerificationIssuerCreator\n}\n\nexport class AppContext {\n constructor(\n private opts: AppContextOptions,\n private secrets: OzoneSecrets,\n ) {}\n\n static async fromConfig(\n cfg: OzoneConfig,\n secrets: OzoneSecrets,\n overrides?: Partial<AppContextOptions>,\n ): Promise<AppContext> {\n const db = new Database({\n url: cfg.db.postgresUrl,\n schema: cfg.db.postgresSchema,\n poolSize: cfg.db.poolSize,\n poolMaxUses: cfg.db.poolMaxUses,\n poolIdleTimeoutMs: cfg.db.poolIdleTimeoutMs,\n })\n const signingKey = await Secp256k1Keypair.import(secrets.signingKeyHex)\n const signingKeyId = await getSigningKeyId(db, signingKey.did())\n const appviewAgent = new AtpAgent({ service: cfg.appview.url })\n const pdsAgent = cfg.pds\n ? new AtpAgent({ service: cfg.pds.url })\n : undefined\n const chatAgent = cfg.chat\n ? new AtpAgent({ service: cfg.chat.url })\n : undefined\n\n const didCache = new MemoryCache(\n cfg.identity.cacheStaleTTL,\n cfg.identity.cacheMaxTTL,\n )\n const idResolver = new IdResolver({\n plcUrl: cfg.identity.plcUrl,\n didCache,\n })\n\n const createAuthHeaders = (aud: string, lxm: string) =>\n createServiceAuthHeaders({\n iss: `${cfg.service.did}#atproto_labeler`,\n aud,\n lxm,\n keypair: signingKey,\n })\n\n const backgroundQueue = new BackgroundQueue(db)\n const blobDiverter = cfg.blobDivert\n ? new BlobDiverter(db, {\n idResolver,\n serviceConfig: cfg.blobDivert,\n })\n : undefined\n const eventPusher = new EventPusher(db, createAuthHeaders, {\n appview: cfg.appview.pushEvents ? cfg.appview : undefined,\n pds: cfg.pds ?? undefined,\n })\n\n const communicationTemplateService = CommunicationTemplateService.creator()\n const safelinkRuleService = SafelinkRuleService.creator()\n const scheduledActionService = ScheduledActionService.creator()\n const teamService = TeamService.creator(\n appviewAgent,\n cfg.appview.did,\n createAuthHeaders,\n )\n const queueService = QueueService.creator()\n const reportStatsService = ReportStatsService.creator()\n const setService = SetService.creator()\n const settingService = SettingService.creator()\n const strikeService = StrikeService.creator()\n const verificationService = VerificationService.creator()\n const verificationIssuer = VerificationIssuer.creator()\n const moderationServiceProfile = ModerationServiceProfile.creator(\n cfg,\n appviewAgent,\n )\n const modService = ModerationService.creator(\n signingKey,\n signingKeyId,\n cfg,\n backgroundQueue,\n idResolver,\n eventPusher,\n appviewAgent,\n createAuthHeaders,\n strikeService,\n overrides?.imgInvalidator,\n )\n const assignmentService = AssignmentService.creator(\n {\n queueDurationMs: cfg.assignments.queueDurationMs,\n reportDurationMs: cfg.assignments.reportDurationMs,\n },\n queueService,\n teamService,\n )(db)\n\n const sequencer = new Sequencer(modService(db))\n\n const authVerifier = new AuthVerifier(idResolver, {\n serviceDid: cfg.service.did,\n adminPassword: secrets.adminPassword,\n teamService: teamService(db),\n })\n\n return new AppContext(\n {\n db,\n cfg,\n modService,\n moderationServiceProfile,\n communicationTemplateService,\n safelinkRuleService,\n scheduledActionService,\n teamService,\n queueService,\n reportStatsService,\n setService,\n settingService,\n strikeService,\n appviewAgent,\n pdsAgent,\n chatAgent,\n signingKey,\n signingKeyId,\n didCache,\n idResolver,\n backgroundQueue,\n sequencer,\n assignmentService,\n authVerifier,\n blobDiverter,\n verificationService,\n verificationIssuer,\n ...(overrides ?? {}),\n },\n secrets,\n )\n }\n\n assignPort(port: number) {\n assert(\n !this.cfg.service.port || this.cfg.service.port === port,\n 'Conflicting port in config',\n )\n this.opts.cfg.service.port = port\n }\n\n get db(): Database {\n return this.opts.db\n }\n\n get cfg(): OzoneConfig {\n return this.opts.cfg\n }\n\n get modService(): ModerationServiceCreator {\n return this.opts.modService\n }\n\n get blobDiverter(): BlobDiverter | undefined {\n return this.opts.blobDiverter\n }\n\n get communicationTemplateService(): CommunicationTemplateServiceCreator {\n return this.opts.communicationTemplateService\n }\n\n get safelinkRuleService(): SafelinkRuleServiceCreator {\n return this.opts.safelinkRuleService\n }\n\n get scheduledActionService(): ScheduledActionServiceCreator {\n return this.opts.scheduledActionService\n }\n\n get teamService(): TeamServiceCreator {\n return this.opts.teamService\n }\n\n get queueService(): QueueServiceCreator {\n return this.opts.queueService\n }\n\n get reportStatsService(): ReportStatsServiceCreator {\n return this.opts.reportStatsService\n }\n\n get setService(): SetServiceCreator {\n return this.opts.setService\n }\n\n get settingService(): SettingServiceCreator {\n return this.opts.settingService\n }\n\n get strikeService(): StrikeServiceCreator {\n return this.opts.strikeService\n }\n\n get verificationService(): VerificationServiceCreator {\n return this.opts.verificationService\n }\n\n get verificationIssuer(): VerificationIssuerCreator {\n return this.opts.verificationIssuer\n }\n\n get moderationServiceProfile(): ModerationServiceProfileCreator {\n return this.opts.moderationServiceProfile\n }\n\n get appviewAgent(): AtpAgent {\n return this.opts.appviewAgent\n }\n\n get pdsAgent(): AtpAgent | undefined {\n return this.opts.pdsAgent\n }\n\n get chatAgent(): AtpAgent | undefined {\n return this.opts.chatAgent\n }\n\n get signingKey(): Keypair {\n return this.opts.signingKey\n }\n\n get signingKeyId(): number {\n return this.opts.signingKeyId\n }\n\n get plcClient(): plc.Client {\n return new plc.Client(this.cfg.identity.plcUrl)\n }\n\n get didCache(): DidCache {\n return this.opts.didCache\n }\n\n get idResolver(): IdResolver {\n return this.opts.idResolver\n }\n\n get backgroundQueue(): BackgroundQueue {\n return this.opts.backgroundQueue\n }\n\n get sequencer(): Sequencer {\n return this.opts.sequencer\n }\n\n get assignmentService(): AssignmentService {\n return this.opts.assignmentService\n }\n\n get authVerifier(): AuthVerifier {\n return this.opts.authVerifier\n }\n\n async serviceAuthHeaders(aud: string, lxm: string) {\n const iss = `${this.cfg.service.did}#atproto_labeler`\n return createServiceAuthHeaders({\n iss,\n aud,\n lxm,\n keypair: this.signingKey,\n })\n }\n\n async pdsAuth(lxm: string) {\n if (!this.cfg.pds) {\n return undefined\n }\n return this.serviceAuthHeaders(this.cfg.pds.did, lxm)\n }\n\n async appviewAuth(lxm: string) {\n return this.serviceAuthHeaders(this.cfg.appview.did, lxm)\n }\n\n async chatAuth(lxm: string) {\n if (!this.cfg.chat) {\n throw new Error('No chat service configured')\n }\n return this.serviceAuthHeaders(this.cfg.chat.did, lxm)\n }\n\n devOverride(overrides: Partial<AppContextOptions>) {\n this.opts = {\n ...this.opts,\n ...overrides,\n }\n }\n\n reqLabelers(req: express.Request): ParsedLabelers {\n const val = req.header(LABELER_HEADER_NAME)\n let parsed: ParsedLabelers | null\n try {\n parsed = parseLabelerHeader(val, this.cfg.service.did)\n } catch (err) {\n parsed = null\n }\n if (!parsed) return defaultLabelerHeader([])\n return parsed\n }\n}\n"]}
|
|
1
|
+
{"version":3,"file":"context.js","sourceRoot":"","sources":["../src/context.ts"],"names":[],"mappings":"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","sourcesContent":["import assert from 'node:assert'\nimport * as plc from '@did-plc/lib'\nimport express from 'express'\nimport { AtpAgent } from '@atproto/api'\nimport { Keypair, Secp256k1Keypair } from '@atproto/crypto'\nimport { DidCache, IdResolver, MemoryCache } from '@atproto/identity'\nimport { createServiceAuthHeaders } from '@atproto/xrpc-server'\nimport { AssignmentService } from './assignment/index.js'\nimport { AuthVerifier } from './auth-verifier.js'\nimport { BackgroundQueue } from './background.js'\nimport {\n CommunicationTemplateService,\n CommunicationTemplateServiceCreator,\n} from './communication-service/template.js'\nimport { OzoneConfig, OzoneSecrets } from './config/index.js'\nimport { BlobDiverter } from './daemon/blob-diverter.js'\nimport { EventPusher } from './daemon/index.js'\nimport { Database } from './db/index.js'\nimport { ImageInvalidator } from './image-invalidator.js'\nimport {\n ModerationService,\n ModerationServiceCreator,\n} from './mod-service/index.js'\nimport {\n ModerationServiceProfile,\n ModerationServiceProfileCreator,\n} from './mod-service/profile.js'\nimport { StrikeService, StrikeServiceCreator } from './mod-service/strike.js'\nimport { QueueService, QueueServiceCreator } from './queue/service.js'\nimport {\n ReportStatsService,\n ReportStatsServiceCreator,\n} from './report/stats.js'\nimport {\n SafelinkRuleService,\n SafelinkRuleServiceCreator,\n} from './safelink/service.js'\nimport {\n ScheduledActionService,\n ScheduledActionServiceCreator,\n} from './scheduled-action/service.js'\nimport { Sequencer } from './sequencer/sequencer.js'\nimport { SetService, SetServiceCreator } from './set/service.js'\nimport { SettingService, SettingServiceCreator } from './setting/service.js'\nimport { TeamService, TeamServiceCreator } from './team/index.js'\nimport {\n LABELER_HEADER_NAME,\n ParsedLabelers,\n defaultLabelerHeader,\n getSigningKeyId,\n parseLabelerHeader,\n} from './util.js'\nimport {\n VerificationIssuer,\n VerificationIssuerCreator,\n} from './verification/issuer.js'\nimport {\n VerificationService,\n VerificationServiceCreator,\n} from './verification/service.js'\n\nexport type AppContextOptions = {\n db: Database\n cfg: OzoneConfig\n modService: ModerationServiceCreator\n moderationServiceProfile: ModerationServiceProfileCreator\n communicationTemplateService: CommunicationTemplateServiceCreator\n safelinkRuleService: SafelinkRuleServiceCreator\n scheduledActionService: ScheduledActionServiceCreator\n queueService: QueueServiceCreator\n reportStatsService: ReportStatsServiceCreator\n setService: SetServiceCreator\n settingService: SettingServiceCreator\n strikeService: StrikeServiceCreator\n teamService: TeamServiceCreator\n appviewAgent: AtpAgent\n pdsAgent: AtpAgent | undefined\n chatAgent: AtpAgent | undefined\n blobDiverter?: BlobDiverter\n signingKey: Keypair\n signingKeyId: number\n didCache: DidCache\n idResolver: IdResolver\n imgInvalidator?: ImageInvalidator\n backgroundQueue: BackgroundQueue\n sequencer: Sequencer\n assignmentService: AssignmentService\n authVerifier: AuthVerifier\n verificationService: VerificationServiceCreator\n verificationIssuer: VerificationIssuerCreator\n}\n\nexport class AppContext {\n constructor(\n private opts: AppContextOptions,\n private secrets: OzoneSecrets,\n ) {}\n\n static async fromConfig(\n cfg: OzoneConfig,\n secrets: OzoneSecrets,\n overrides?: Partial<AppContextOptions>,\n ): Promise<AppContext> {\n const db = new Database({\n url: cfg.db.postgresUrl,\n schema: cfg.db.postgresSchema,\n poolSize: cfg.db.poolSize,\n poolMaxUses: cfg.db.poolMaxUses,\n poolIdleTimeoutMs: cfg.db.poolIdleTimeoutMs,\n })\n const signingKey = await Secp256k1Keypair.import(secrets.signingKeyHex)\n const signingKeyId = await getSigningKeyId(db, signingKey.did())\n const appviewAgent = new AtpAgent({ service: cfg.appview.url })\n const pdsAgent = cfg.pds\n ? new AtpAgent({ service: cfg.pds.url })\n : undefined\n const chatAgent = cfg.chat\n ? new AtpAgent({ service: cfg.chat.url })\n : undefined\n\n const didCache = new MemoryCache(\n cfg.identity.cacheStaleTTL,\n cfg.identity.cacheMaxTTL,\n )\n const idResolver = new IdResolver({\n plcUrl: cfg.identity.plcUrl,\n didCache,\n })\n\n const createAuthHeaders = (aud: string, lxm: string) =>\n createServiceAuthHeaders({\n iss: `${cfg.service.did}#atproto_labeler`,\n aud,\n lxm,\n keypair: signingKey,\n })\n\n const backgroundQueue = new BackgroundQueue(db, { concurrency: 20 })\n const blobDiverter = cfg.blobDivert\n ? new BlobDiverter(db, {\n idResolver,\n serviceConfig: cfg.blobDivert,\n })\n : undefined\n const eventPusher = new EventPusher(db, createAuthHeaders, {\n appview: cfg.appview.pushEvents ? cfg.appview : undefined,\n pds: cfg.pds ?? undefined,\n })\n\n const communicationTemplateService = CommunicationTemplateService.creator()\n const safelinkRuleService = SafelinkRuleService.creator()\n const scheduledActionService = ScheduledActionService.creator()\n const teamService = TeamService.creator(\n appviewAgent,\n cfg.appview.did,\n createAuthHeaders,\n )\n const queueService = QueueService.creator()\n const reportStatsService = ReportStatsService.creator()\n const setService = SetService.creator()\n const settingService = SettingService.creator()\n const strikeService = StrikeService.creator()\n const verificationService = VerificationService.creator()\n const verificationIssuer = VerificationIssuer.creator()\n const moderationServiceProfile = ModerationServiceProfile.creator(\n cfg,\n appviewAgent,\n )\n const modService = ModerationService.creator(\n signingKey,\n signingKeyId,\n cfg,\n backgroundQueue,\n idResolver,\n eventPusher,\n appviewAgent,\n createAuthHeaders,\n strikeService,\n overrides?.imgInvalidator,\n )\n const assignmentService = AssignmentService.creator(\n {\n queueDurationMs: cfg.assignments.queueDurationMs,\n reportDurationMs: cfg.assignments.reportDurationMs,\n },\n queueService,\n teamService,\n )(db)\n\n const sequencer = new Sequencer(modService(db))\n\n const authVerifier = new AuthVerifier(idResolver, {\n serviceDid: cfg.service.did,\n adminPassword: secrets.adminPassword,\n teamService: teamService(db),\n })\n\n return new AppContext(\n {\n db,\n cfg,\n modService,\n moderationServiceProfile,\n communicationTemplateService,\n safelinkRuleService,\n scheduledActionService,\n teamService,\n queueService,\n reportStatsService,\n setService,\n settingService,\n strikeService,\n appviewAgent,\n pdsAgent,\n chatAgent,\n signingKey,\n signingKeyId,\n didCache,\n idResolver,\n backgroundQueue,\n sequencer,\n assignmentService,\n authVerifier,\n blobDiverter,\n verificationService,\n verificationIssuer,\n ...(overrides ?? {}),\n },\n secrets,\n )\n }\n\n assignPort(port: number) {\n assert(\n !this.cfg.service.port || this.cfg.service.port === port,\n 'Conflicting port in config',\n )\n this.opts.cfg.service.port = port\n }\n\n get db(): Database {\n return this.opts.db\n }\n\n get cfg(): OzoneConfig {\n return this.opts.cfg\n }\n\n get modService(): ModerationServiceCreator {\n return this.opts.modService\n }\n\n get blobDiverter(): BlobDiverter | undefined {\n return this.opts.blobDiverter\n }\n\n get communicationTemplateService(): CommunicationTemplateServiceCreator {\n return this.opts.communicationTemplateService\n }\n\n get safelinkRuleService(): SafelinkRuleServiceCreator {\n return this.opts.safelinkRuleService\n }\n\n get scheduledActionService(): ScheduledActionServiceCreator {\n return this.opts.scheduledActionService\n }\n\n get teamService(): TeamServiceCreator {\n return this.opts.teamService\n }\n\n get queueService(): QueueServiceCreator {\n return this.opts.queueService\n }\n\n get reportStatsService(): ReportStatsServiceCreator {\n return this.opts.reportStatsService\n }\n\n get setService(): SetServiceCreator {\n return this.opts.setService\n }\n\n get settingService(): SettingServiceCreator {\n return this.opts.settingService\n }\n\n get strikeService(): StrikeServiceCreator {\n return this.opts.strikeService\n }\n\n get verificationService(): VerificationServiceCreator {\n return this.opts.verificationService\n }\n\n get verificationIssuer(): VerificationIssuerCreator {\n return this.opts.verificationIssuer\n }\n\n get moderationServiceProfile(): ModerationServiceProfileCreator {\n return this.opts.moderationServiceProfile\n }\n\n get appviewAgent(): AtpAgent {\n return this.opts.appviewAgent\n }\n\n get pdsAgent(): AtpAgent | undefined {\n return this.opts.pdsAgent\n }\n\n get chatAgent(): AtpAgent | undefined {\n return this.opts.chatAgent\n }\n\n get signingKey(): Keypair {\n return this.opts.signingKey\n }\n\n get signingKeyId(): number {\n return this.opts.signingKeyId\n }\n\n get plcClient(): plc.Client {\n return new plc.Client(this.cfg.identity.plcUrl)\n }\n\n get didCache(): DidCache {\n return this.opts.didCache\n }\n\n get idResolver(): IdResolver {\n return this.opts.idResolver\n }\n\n get backgroundQueue(): BackgroundQueue {\n return this.opts.backgroundQueue\n }\n\n get sequencer(): Sequencer {\n return this.opts.sequencer\n }\n\n get assignmentService(): AssignmentService {\n return this.opts.assignmentService\n }\n\n get authVerifier(): AuthVerifier {\n return this.opts.authVerifier\n }\n\n async serviceAuthHeaders(aud: string, lxm: string) {\n const iss = `${this.cfg.service.did}#atproto_labeler`\n return createServiceAuthHeaders({\n iss,\n aud,\n lxm,\n keypair: this.signingKey,\n })\n }\n\n async pdsAuth(lxm: string) {\n if (!this.cfg.pds) {\n return undefined\n }\n return this.serviceAuthHeaders(this.cfg.pds.did, lxm)\n }\n\n async appviewAuth(lxm: string) {\n return this.serviceAuthHeaders(this.cfg.appview.did, lxm)\n }\n\n async chatAuth(lxm: string) {\n if (!this.cfg.chat) {\n throw new Error('No chat service configured')\n }\n return this.serviceAuthHeaders(this.cfg.chat.did, lxm)\n }\n\n devOverride(overrides: Partial<AppContextOptions>) {\n this.opts = {\n ...this.opts,\n ...overrides,\n }\n }\n\n reqLabelers(req: express.Request): ParsedLabelers {\n const val = req.header(LABELER_HEADER_NAME)\n let parsed: ParsedLabelers | null\n try {\n parsed = parseLabelerHeader(val, this.cfg.service.did)\n } catch (err) {\n parsed = null\n }\n if (!parsed) return defaultLabelerHeader([])\n return parsed\n }\n}\n"]}
|
package/dist/daemon/context.js
CHANGED
|
@@ -47,7 +47,7 @@ export class DaemonContext {
|
|
|
47
47
|
appview: cfg.appview.pushEvents ? cfg.appview : undefined,
|
|
48
48
|
pds: cfg.pds ?? undefined,
|
|
49
49
|
});
|
|
50
|
-
const backgroundQueue = new BackgroundQueue(db);
|
|
50
|
+
const backgroundQueue = new BackgroundQueue(db, { concurrency: 20 });
|
|
51
51
|
const settingService = SettingService.creator();
|
|
52
52
|
const strikeService = StrikeService.creator();
|
|
53
53
|
const modService = ModerationService.creator(signingKey, signingKeyId, cfg, backgroundQueue, idResolver, eventPusher, appviewAgent, createAuthHeaders, strikeService);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"context.js","sourceRoot":"","sources":["../../src/daemon/context.ts"],"names":[],"mappings":"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","sourcesContent":["import { AtpAgent } from '@atproto/api'\nimport { allFulfilled } from '@atproto/common'\nimport { Keypair, Secp256k1Keypair } from '@atproto/crypto'\nimport { IdResolver } from '@atproto/identity'\nimport { createServiceAuthHeaders } from '@atproto/xrpc-server'\nimport { BackgroundQueue } from '../background.js'\nimport { OzoneConfig, OzoneSecrets } from '../config/index.js'\nimport { Database } from '../db/index.js'\nimport { ModerationService } from '../mod-service/index.js'\nimport { StrikeService } from '../mod-service/strike.js'\nimport { QueueService } from '../queue/service.js'\nimport { ReportStatsService } from '../report/stats.js'\nimport { ScheduledActionService } from '../scheduled-action/service.js'\nimport { SettingService } from '../setting/service.js'\nimport { TeamService } from '../team/index.js'\nimport { getSigningKeyId } from '../util.js'\nimport { EventPusher } from './event-pusher.js'\nimport { EventReverser } from './event-reverser.js'\nimport { MaterializedViewRefresher } from './materialized-view-refresher.js'\nimport { QueueRouter } from './queue-router.js'\nimport { ScheduledActionProcessor } from './scheduled-action-processor.js'\nimport { StatsComputer } from './stats-computer.js'\nimport { StrikeExpiryProcessor } from './strike-expiry-processor.js'\nimport { TeamProfileSynchronizer } from './team-profile-synchronizer.js'\nimport { VerificationListener } from './verification-listener.js'\n\nexport type DaemonContextOptions = {\n db: Database\n cfg: OzoneConfig\n backgroundQueue: BackgroundQueue\n signingKey: Keypair\n eventPusher: EventPusher\n eventReverser: EventReverser\n materializedViewRefresher: MaterializedViewRefresher\n teamProfileSynchronizer: TeamProfileSynchronizer\n scheduledActionProcessor: ScheduledActionProcessor\n strikeExpiryProcessor: StrikeExpiryProcessor\n queueRouter: QueueRouter\n verificationListener?: VerificationListener\n statsComputer?: StatsComputer\n}\n\nexport class DaemonContext {\n constructor(private opts: DaemonContextOptions) {}\n\n static async fromConfig(\n cfg: OzoneConfig,\n secrets: OzoneSecrets,\n overrides?: Partial<DaemonContextOptions>,\n ): Promise<DaemonContext> {\n const db = new Database({\n url: cfg.db.postgresUrl,\n schema: cfg.db.postgresSchema,\n })\n const signingKey = await Secp256k1Keypair.import(secrets.signingKeyHex)\n const signingKeyId = await getSigningKeyId(db, signingKey.did())\n\n const idResolver = new IdResolver({\n plcUrl: cfg.identity.plcUrl,\n })\n\n const appviewAgent = new AtpAgent({ service: cfg.appview.url })\n const createAuthHeaders = (aud: string, lxm: string) =>\n createServiceAuthHeaders({\n iss: `${cfg.service.did}#atproto_labeler`,\n aud,\n lxm,\n keypair: signingKey,\n })\n\n const eventPusher = new EventPusher(db, createAuthHeaders, {\n appview: cfg.appview.pushEvents ? cfg.appview : undefined,\n pds: cfg.pds ?? undefined,\n })\n\n const backgroundQueue = new BackgroundQueue(db)\n\n const settingService = SettingService.creator()\n const strikeService = StrikeService.creator()\n const modService = ModerationService.creator(\n signingKey,\n signingKeyId,\n cfg,\n backgroundQueue,\n idResolver,\n eventPusher,\n appviewAgent,\n createAuthHeaders,\n strikeService,\n )\n const scheduledActionService = ScheduledActionService.creator()\n const teamService = TeamService.creator(\n appviewAgent,\n cfg.appview.did,\n createAuthHeaders,\n )\n const teamProfileSynchronizer = new TeamProfileSynchronizer(\n backgroundQueue,\n teamService(db),\n cfg.db.teamProfileRefreshIntervalMs,\n )\n\n const eventReverser = new EventReverser(db, modService)\n\n const materializedViewRefresher = new MaterializedViewRefresher(\n backgroundQueue,\n cfg.db.materializedViewRefreshIntervalMs,\n )\n\n const scheduledActionProcessor = new ScheduledActionProcessor(\n db,\n cfg.service.did,\n settingService,\n modService,\n scheduledActionService,\n )\n\n const strikeExpiryProcessor = new StrikeExpiryProcessor(db, strikeService)\n\n const queueService = QueueService.creator()\n const queueRouter = new QueueRouter(db, queueService)\n\n const reportStatsService = ReportStatsService.creator()\n const statsComputer = new StatsComputer(\n db,\n reportStatsService,\n cfg.stats.computerIntervalMinutes,\n )\n\n // Only spawn the listener if verifier config exists and a jetstream URL is provided\n const verificationListener =\n cfg.verifier && cfg.jetstreamUrl\n ? new VerificationListener(\n db,\n cfg.jetstreamUrl,\n cfg.verifier?.issuersToIndex,\n )\n : undefined\n\n return new DaemonContext({\n db,\n cfg,\n backgroundQueue,\n signingKey,\n eventPusher,\n eventReverser,\n materializedViewRefresher,\n teamProfileSynchronizer,\n scheduledActionProcessor,\n strikeExpiryProcessor,\n queueRouter,\n verificationListener,\n statsComputer,\n ...(overrides ?? {}),\n })\n }\n\n get db(): Database {\n return this.opts.db\n }\n\n get cfg(): OzoneConfig {\n return this.opts.cfg\n }\n\n get backgroundQueue(): BackgroundQueue {\n return this.opts.backgroundQueue\n }\n\n get eventPusher(): EventPusher {\n return this.opts.eventPusher\n }\n\n get eventReverser(): EventReverser {\n return this.opts.eventReverser\n }\n\n get materializedViewRefresher(): MaterializedViewRefresher {\n return this.opts.materializedViewRefresher\n }\n\n get teamProfileSynchronizer(): TeamProfileSynchronizer {\n return this.opts.teamProfileSynchronizer\n }\n\n get scheduledActionProcessor(): ScheduledActionProcessor {\n return this.opts.scheduledActionProcessor\n }\n\n get strikeExpiryProcessor(): StrikeExpiryProcessor {\n return this.opts.strikeExpiryProcessor\n }\n\n get queueRouter(): QueueRouter {\n return this.opts.queueRouter\n }\n\n get verificationListener(): VerificationListener | undefined {\n return this.opts.verificationListener\n }\n\n get statsComputer(): StatsComputer | undefined {\n return this.opts.statsComputer\n }\n\n async start() {\n this.eventPusher.start()\n this.eventReverser.start()\n this.materializedViewRefresher.start()\n this.teamProfileSynchronizer.start()\n this.scheduledActionProcessor.start()\n this.strikeExpiryProcessor.start()\n this.queueRouter.start()\n this.verificationListener?.start()\n this.statsComputer?.start()\n }\n\n async processAll() {\n // Sequential because the materialized view values depend on the events.\n await this.eventPusher.processAll()\n // Drain pending modEventReport rows into the report table so test code\n // that calls processAll() after creating reports sees the report rows\n // immediately (in production this happens via the 1-min poll).\n await this.queueRouter.routeReports()\n await this.materializedViewRefresher.run()\n await this.teamProfileSynchronizer.run()\n }\n\n async destroy() {\n try {\n await allFulfilled([\n this.eventReverser.destroy(),\n this.eventPusher.destroy(),\n this.materializedViewRefresher.destroy(),\n this.teamProfileSynchronizer.destroy(),\n this.scheduledActionProcessor.destroy(),\n this.strikeExpiryProcessor.destroy(),\n this.queueRouter.destroy(),\n this.verificationListener?.stop(),\n this.statsComputer?.destroy(),\n ])\n } finally {\n await this.backgroundQueue.destroy()\n await this.db.close()\n }\n }\n}\n"]}
|
|
1
|
+
{"version":3,"file":"context.js","sourceRoot":"","sources":["../../src/daemon/context.ts"],"names":[],"mappings":"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","sourcesContent":["import { AtpAgent } from '@atproto/api'\nimport { allFulfilled } from '@atproto/common'\nimport { Keypair, Secp256k1Keypair } from '@atproto/crypto'\nimport { IdResolver } from '@atproto/identity'\nimport { createServiceAuthHeaders } from '@atproto/xrpc-server'\nimport { BackgroundQueue } from '../background.js'\nimport { OzoneConfig, OzoneSecrets } from '../config/index.js'\nimport { Database } from '../db/index.js'\nimport { ModerationService } from '../mod-service/index.js'\nimport { StrikeService } from '../mod-service/strike.js'\nimport { QueueService } from '../queue/service.js'\nimport { ReportStatsService } from '../report/stats.js'\nimport { ScheduledActionService } from '../scheduled-action/service.js'\nimport { SettingService } from '../setting/service.js'\nimport { TeamService } from '../team/index.js'\nimport { getSigningKeyId } from '../util.js'\nimport { EventPusher } from './event-pusher.js'\nimport { EventReverser } from './event-reverser.js'\nimport { MaterializedViewRefresher } from './materialized-view-refresher.js'\nimport { QueueRouter } from './queue-router.js'\nimport { ScheduledActionProcessor } from './scheduled-action-processor.js'\nimport { StatsComputer } from './stats-computer.js'\nimport { StrikeExpiryProcessor } from './strike-expiry-processor.js'\nimport { TeamProfileSynchronizer } from './team-profile-synchronizer.js'\nimport { VerificationListener } from './verification-listener.js'\n\nexport type DaemonContextOptions = {\n db: Database\n cfg: OzoneConfig\n backgroundQueue: BackgroundQueue\n signingKey: Keypair\n eventPusher: EventPusher\n eventReverser: EventReverser\n materializedViewRefresher: MaterializedViewRefresher\n teamProfileSynchronizer: TeamProfileSynchronizer\n scheduledActionProcessor: ScheduledActionProcessor\n strikeExpiryProcessor: StrikeExpiryProcessor\n queueRouter: QueueRouter\n verificationListener?: VerificationListener\n statsComputer?: StatsComputer\n}\n\nexport class DaemonContext {\n constructor(private opts: DaemonContextOptions) {}\n\n static async fromConfig(\n cfg: OzoneConfig,\n secrets: OzoneSecrets,\n overrides?: Partial<DaemonContextOptions>,\n ): Promise<DaemonContext> {\n const db = new Database({\n url: cfg.db.postgresUrl,\n schema: cfg.db.postgresSchema,\n })\n const signingKey = await Secp256k1Keypair.import(secrets.signingKeyHex)\n const signingKeyId = await getSigningKeyId(db, signingKey.did())\n\n const idResolver = new IdResolver({\n plcUrl: cfg.identity.plcUrl,\n })\n\n const appviewAgent = new AtpAgent({ service: cfg.appview.url })\n const createAuthHeaders = (aud: string, lxm: string) =>\n createServiceAuthHeaders({\n iss: `${cfg.service.did}#atproto_labeler`,\n aud,\n lxm,\n keypair: signingKey,\n })\n\n const eventPusher = new EventPusher(db, createAuthHeaders, {\n appview: cfg.appview.pushEvents ? cfg.appview : undefined,\n pds: cfg.pds ?? undefined,\n })\n\n const backgroundQueue = new BackgroundQueue(db, { concurrency: 20 })\n\n const settingService = SettingService.creator()\n const strikeService = StrikeService.creator()\n const modService = ModerationService.creator(\n signingKey,\n signingKeyId,\n cfg,\n backgroundQueue,\n idResolver,\n eventPusher,\n appviewAgent,\n createAuthHeaders,\n strikeService,\n )\n const scheduledActionService = ScheduledActionService.creator()\n const teamService = TeamService.creator(\n appviewAgent,\n cfg.appview.did,\n createAuthHeaders,\n )\n const teamProfileSynchronizer = new TeamProfileSynchronizer(\n backgroundQueue,\n teamService(db),\n cfg.db.teamProfileRefreshIntervalMs,\n )\n\n const eventReverser = new EventReverser(db, modService)\n\n const materializedViewRefresher = new MaterializedViewRefresher(\n backgroundQueue,\n cfg.db.materializedViewRefreshIntervalMs,\n )\n\n const scheduledActionProcessor = new ScheduledActionProcessor(\n db,\n cfg.service.did,\n settingService,\n modService,\n scheduledActionService,\n )\n\n const strikeExpiryProcessor = new StrikeExpiryProcessor(db, strikeService)\n\n const queueService = QueueService.creator()\n const queueRouter = new QueueRouter(db, queueService)\n\n const reportStatsService = ReportStatsService.creator()\n const statsComputer = new StatsComputer(\n db,\n reportStatsService,\n cfg.stats.computerIntervalMinutes,\n )\n\n // Only spawn the listener if verifier config exists and a jetstream URL is provided\n const verificationListener =\n cfg.verifier && cfg.jetstreamUrl\n ? new VerificationListener(\n db,\n cfg.jetstreamUrl,\n cfg.verifier?.issuersToIndex,\n )\n : undefined\n\n return new DaemonContext({\n db,\n cfg,\n backgroundQueue,\n signingKey,\n eventPusher,\n eventReverser,\n materializedViewRefresher,\n teamProfileSynchronizer,\n scheduledActionProcessor,\n strikeExpiryProcessor,\n queueRouter,\n verificationListener,\n statsComputer,\n ...(overrides ?? {}),\n })\n }\n\n get db(): Database {\n return this.opts.db\n }\n\n get cfg(): OzoneConfig {\n return this.opts.cfg\n }\n\n get backgroundQueue(): BackgroundQueue {\n return this.opts.backgroundQueue\n }\n\n get eventPusher(): EventPusher {\n return this.opts.eventPusher\n }\n\n get eventReverser(): EventReverser {\n return this.opts.eventReverser\n }\n\n get materializedViewRefresher(): MaterializedViewRefresher {\n return this.opts.materializedViewRefresher\n }\n\n get teamProfileSynchronizer(): TeamProfileSynchronizer {\n return this.opts.teamProfileSynchronizer\n }\n\n get scheduledActionProcessor(): ScheduledActionProcessor {\n return this.opts.scheduledActionProcessor\n }\n\n get strikeExpiryProcessor(): StrikeExpiryProcessor {\n return this.opts.strikeExpiryProcessor\n }\n\n get queueRouter(): QueueRouter {\n return this.opts.queueRouter\n }\n\n get verificationListener(): VerificationListener | undefined {\n return this.opts.verificationListener\n }\n\n get statsComputer(): StatsComputer | undefined {\n return this.opts.statsComputer\n }\n\n async start() {\n this.eventPusher.start()\n this.eventReverser.start()\n this.materializedViewRefresher.start()\n this.teamProfileSynchronizer.start()\n this.scheduledActionProcessor.start()\n this.strikeExpiryProcessor.start()\n this.queueRouter.start()\n this.verificationListener?.start()\n this.statsComputer?.start()\n }\n\n async processAll() {\n // Sequential because the materialized view values depend on the events.\n await this.eventPusher.processAll()\n // Drain pending modEventReport rows into the report table so test code\n // that calls processAll() after creating reports sees the report rows\n // immediately (in production this happens via the 1-min poll).\n await this.queueRouter.routeReports()\n await this.materializedViewRefresher.run()\n await this.teamProfileSynchronizer.run()\n }\n\n async destroy() {\n try {\n await allFulfilled([\n this.eventReverser.destroy(),\n this.eventPusher.destroy(),\n this.materializedViewRefresher.destroy(),\n this.teamProfileSynchronizer.destroy(),\n this.scheduledActionProcessor.destroy(),\n this.strikeExpiryProcessor.destroy(),\n this.queueRouter.destroy(),\n this.verificationListener?.stop(),\n this.statsComputer?.destroy(),\n ])\n } finally {\n await this.backgroundQueue.destroy()\n await this.db.close()\n }\n }\n}\n"]}
|
|
@@ -23,7 +23,7 @@ export declare class VerificationListener {
|
|
|
23
23
|
getCursor(): Promise<number | undefined>;
|
|
24
24
|
updateCursor(cursor: number): Promise<void>;
|
|
25
25
|
start(): Promise<void>;
|
|
26
|
-
stop(): void
|
|
26
|
+
stop(): Promise<void>;
|
|
27
27
|
}
|
|
28
28
|
export {};
|
|
29
29
|
//# sourceMappingURL=verification-listener.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"verification-listener.d.ts","sourceRoot":"","sources":["../../src/daemon/verification-listener.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAA;AAClD,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAA;AAKzC,KAAK,kBAAkB,GAAG;IACxB,OAAO,EAAE,MAAM,CAAA;IACf,MAAM,EAAE,MAAM,CAAA;IACd,WAAW,EAAE,MAAM,CAAA;IACnB,SAAS,EAAE,MAAM,CAAA;CAClB,CAAA;AAED,qBAAa,oBAAoB;IAS7B,OAAO,CAAC,EAAE;IACV,OAAO,CAAC,YAAY;IACpB,OAAO,CAAC,sBAAsB,CAAC;IAVjC,SAAS,UAAQ;IACjB,OAAO,CAAC,MAAM,CAAC,CAAQ;IACvB,OAAO,CAAC,SAAS,CAAyB;IAC1C,OAAO,CAAC,UAAU,CAAgC;IAC3C,eAAe,kBAAmD;IACzE,OAAO,CAAC,mBAAmB,CAAyC;IAEpE,YACU,EAAE,EAAE,QAAQ,EACZ,YAAY,EAAE,MAAM,EACpB,sBAAsB,CAAC,EAAE,MAAM,EAAE,YAAA,EACvC;IAME,cAAc,qBAUnB;IAED,qBAAqB,CACnB,MAAM,EAAE,MAAM,EACd,GAAG,EAAE,MAAM,EACX,GAAG,EAAE,MAAM,EACX,MAAM,EAAE,kBAAkB,EAC1B,MAAM,EAAE,MAAM,QAgBf;IAED,yBAAyB,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,QAcpD;IAEK,SAAS,gCAOd;IAEK,YAAY,CAAC,MAAM,EAAE,MAAM,iBAahC;IAEK,KAAK,kBAiDV;
|
|
1
|
+
{"version":3,"file":"verification-listener.d.ts","sourceRoot":"","sources":["../../src/daemon/verification-listener.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAA;AAClD,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAA;AAKzC,KAAK,kBAAkB,GAAG;IACxB,OAAO,EAAE,MAAM,CAAA;IACf,MAAM,EAAE,MAAM,CAAA;IACd,WAAW,EAAE,MAAM,CAAA;IACnB,SAAS,EAAE,MAAM,CAAA;CAClB,CAAA;AAED,qBAAa,oBAAoB;IAS7B,OAAO,CAAC,EAAE;IACV,OAAO,CAAC,YAAY;IACpB,OAAO,CAAC,sBAAsB,CAAC;IAVjC,SAAS,UAAQ;IACjB,OAAO,CAAC,MAAM,CAAC,CAAQ;IACvB,OAAO,CAAC,SAAS,CAAyB;IAC1C,OAAO,CAAC,UAAU,CAAgC;IAC3C,eAAe,kBAAmD;IACzE,OAAO,CAAC,mBAAmB,CAAyC;IAEpE,YACU,EAAE,EAAE,QAAQ,EACZ,YAAY,EAAE,MAAM,EACpB,sBAAsB,CAAC,EAAE,MAAM,EAAE,YAAA,EACvC;IAME,cAAc,qBAUnB;IAED,qBAAqB,CACnB,MAAM,EAAE,MAAM,EACd,GAAG,EAAE,MAAM,EACX,GAAG,EAAE,MAAM,EACX,MAAM,EAAE,kBAAkB,EAC1B,MAAM,EAAE,MAAM,QAgBf;IAED,yBAAyB,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,QAcpD;IAEK,SAAS,gCAOd;IAEK,YAAY,CAAC,MAAM,EAAE,MAAM,iBAahC;IAEK,KAAK,kBAiDV;IAEK,IAAI,kBAST;CACF"}
|
|
@@ -112,10 +112,16 @@ export class VerificationListener {
|
|
|
112
112
|
},
|
|
113
113
|
});
|
|
114
114
|
}
|
|
115
|
-
stop() {
|
|
116
|
-
this.
|
|
117
|
-
|
|
118
|
-
|
|
115
|
+
async stop() {
|
|
116
|
+
if (!this.destroyed) {
|
|
117
|
+
this.destroyed = true;
|
|
118
|
+
try {
|
|
119
|
+
await this.jetstream?.close();
|
|
120
|
+
}
|
|
121
|
+
finally {
|
|
122
|
+
await this.backgroundQueue.destroy();
|
|
123
|
+
}
|
|
124
|
+
}
|
|
119
125
|
}
|
|
120
126
|
}
|
|
121
127
|
//# sourceMappingURL=verification-listener.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"verification-listener.js","sourceRoot":"","sources":["../../src/daemon/verification-listener.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"verification-listener.js","sourceRoot":"","sources":["../../src/daemon/verification-listener.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,cAAc,CAAA;AACvC,OAAO,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAA;AAElD,OAAO,EAAqB,SAAS,EAAE,MAAM,yBAAyB,CAAA;AACtE,OAAO,EAAE,kBAAkB,EAAE,MAAM,cAAc,CAAA;AACjD,OAAO,EAAE,mBAAmB,EAAE,MAAM,4BAA4B,CAAA;AAShE,MAAM,OAAO,oBAAoB;IAQ/B,YACU,EAAY,EACZ,YAAoB,EACpB,sBAAiC;QAFjC,OAAE,GAAF,EAAE,CAAU;QACZ,iBAAY,GAAZ,YAAY,CAAQ;QACpB,2BAAsB,GAAtB,sBAAsB,CAAW;QAV3C,cAAS,GAAG,KAAK,CAAA;QAET,cAAS,GAAqB,IAAI,CAAA;QAClC,eAAU,GAAG,6BAA6B,CAAA;QAC3C,oBAAe,GAAG,IAAI,eAAe,CAAC,IAAI,CAAC,EAAE,EAAE,EAAE,WAAW,EAAE,CAAC,EAAE,CAAC,CAAA;QACjE,wBAAmB,GAAG,mBAAmB,CAAC,OAAO,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,CAAA;IAMjE,CAAC;IAEJ,qGAAqG;IACrG,gHAAgH;IAChH,+GAA+G;IAC/G,6GAA6G;IAC7G,KAAK,CAAC,cAAc;QAClB,MAAM,EAAE,YAAY,EAAE,YAAY,EAAE,GAAG,IAAI,CAAC,eAAe,CAAC,QAAQ,EAAE,CAAA;QACtE,IAAI,YAAY,GAAG,EAAE,IAAI,YAAY,GAAG,EAAE,EAAE,CAAC;YAC3C,kBAAkB,CAAC,IAAI,CAAC,4CAA4C,CAAC,CAAA;YACrE,IAAI,CAAC,SAAS,EAAE,KAAK,EAAE,CAAA;YACvB,MAAM,IAAI,CAAC,eAAe,CAAC,UAAU,EAAE,CAAA;YACvC,MAAM,IAAI,CAAC,KAAK,EAAE,CAAA;YAClB,OAAO,KAAK,CAAA;QACd,CAAC;QACD,OAAO,IAAI,CAAA;IACb,CAAC;IAED,qBAAqB,CACnB,MAAc,EACd,GAAW,EACX,GAAW,EACX,MAA0B,EAC1B,MAAc;QAEd,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,KAAK,IAAI,EAAE;YAClC,IAAI,CAAC;gBACH,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,WAAW,EAAE,SAAS,EAAE,GAAG,MAAM,CAAA;gBAC1D,MAAM,IAAI,CAAC,mBAAmB,CAAC,MAAM,CAAC;oBACpC,EAAE,GAAG,EAAE,GAAG,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,WAAW,EAAE,SAAS,EAAE;iBAC9D,CAAC,CAAA;gBACF,MAAM,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,CAAA;YACjC,CAAC;YAAC,OAAO,GAAG,EAAE,CAAC;gBACb,kBAAkB,CAAC,KAAK,CACtB,GAAG,EACH,0CAA0C,CAC3C,CAAA;YACH,CAAC;QACH,CAAC,CAAC,CAAA;IACJ,CAAC;IAED,yBAAyB,CAAC,GAAW,EAAE,MAAc;QACnD,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,KAAK,IAAI,EAAE;YAClC,IAAI,CAAC;gBACH,MAAM,IAAI,CAAC,mBAAmB,CAAC,WAAW,CAAC;oBACzC,IAAI,EAAE,CAAC,GAAG,CAAC;iBACZ,CAAC,CAAA;gBACF,MAAM,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,CAAA;YACjC,CAAC;YAAC,OAAO,GAAG,EAAE,CAAC;gBACb,kBAAkB,CAAC,KAAK,CACtB,GAAG,EACH,0CAA0C,CAC3C,CAAA;YACH,CAAC;QACH,CAAC,CAAC,CAAA;IACJ,CAAC;IAED,KAAK,CAAC,SAAS;QACb,MAAM,IAAI,CAAC,mBAAmB,CAAC,oBAAoB,EAAE,CAAA;QACrD,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,mBAAmB,CAAC,iBAAiB,EAAE,CAAA;QACjE,IAAI,MAAM,EAAE,CAAC;YACX,IAAI,CAAC,MAAM,GAAG,MAAM,CAAA;QACtB,CAAC;QACD,OAAO,IAAI,CAAC,MAAM,CAAA;IACpB,CAAC;IAED,KAAK,CAAC,YAAY,CAAC,MAAc;QAC/B,qIAAqI;QACrI,IAAI,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,MAAM,IAAI,MAAM,EAAE,CAAC;YACzC,OAAM;QACR,CAAC;QAED,2EAA2E;QAC3E,MAAM,aAAa,GACjB,MAAM,IAAI,CAAC,mBAAmB,CAAC,oBAAoB,CAAC,MAAM,CAAC,CAAA;QAE7D,IAAI,aAAa,EAAE,CAAC;YAClB,IAAI,CAAC,MAAM,GAAG,aAAa,CAAA;QAC7B,CAAC;IACH,CAAC;IAED,KAAK,CAAC,KAAK;QACT,MAAM,IAAI,CAAC,SAAS,EAAE,CAAA;QAEtB,IAAI,CAAC,SAAS,GAAG,IAAI,SAAS,CAAC;YAC7B,QAAQ,EAAE,IAAI,CAAC,YAAY;YAC3B,MAAM,EAAE,IAAI,CAAC,MAAM,IAAI,SAAS;YAChC,iBAAiB,EAAE,CAAC,IAAI,CAAC,UAAU,CAAC;YACpC,UAAU,EAAE,IAAI,CAAC,sBAAsB,EAAE,MAAM;gBAC7C,CAAC,CAAC,IAAI,CAAC,sBAAsB;gBAC7B,CAAC,CAAC,SAAS;SACd,CAAC,CAAA;QAEF,MAAM,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC;YACzB,QAAQ,EAAE;gBACR,CAAC,IAAI,CAAC,UAAU,CAAC,EAAE,KAAK,EAAE,CAAwC,EAAE,EAAE;oBACpE,MAAM,cAAc,GAAG,QAAQ,CAAC,QAAQ,CACtC,IAAI,CAAC,UAAU,EACf,CAAC,CAAC,MAAM,CAAC,MAAM,CAChB,CAAA;oBAED,IAAI,CAAC,cAAc,CAAC,OAAO,EAAE,CAAC;wBAC5B,kBAAkB,CAAC,KAAK,CACtB,cAAc,CAAC,KAAK,EACpB,6CAA6C,CAC9C,CAAA;wBACD,OAAM;oBACR,CAAC;oBAED,MAAM,WAAW,GAAG,MAAM,IAAI,CAAC,cAAc,EAAE,CAAA;oBAC/C,IAAI,WAAW,EAAE,CAAC;wBAChB,MAAM,MAAM,GAAG,CAAC,CAAC,GAAG,CAAA;wBACpB,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,UAAU,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC,MAAM,CAAA;wBAClD,MAAM,GAAG,GAAG,QAAQ,MAAM,IAAI,UAAU,IAAI,IAAI,EAAE,CAAA;wBAClD,IAAI,CAAC,qBAAqB,CAAC,MAAM,EAAE,GAAG,EAAE,GAAG,EAAE,MAAM,EAAE,CAAC,CAAC,OAAO,CAAC,CAAA;oBACjE,CAAC;gBACH,CAAC;aACF;YACD,QAAQ,EAAE;gBACR,CAAC,IAAI,CAAC,UAAU,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,EAAE;oBAC7B,MAAM,WAAW,GAAG,MAAM,IAAI,CAAC,cAAc,EAAE,CAAA;oBAC/C,IAAI,WAAW,EAAE,CAAC;wBAChB,IAAI,CAAC,yBAAyB,CAC5B,QAAQ,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,MAAM,CAAC,UAAU,IAAI,CAAC,CAAC,MAAM,CAAC,IAAI,EAAE,EACvD,CAAC,CAAC,OAAO,CACV,CAAA;oBACH,CAAC;gBACH,CAAC;aACF;SACF,CAAC,CAAA;IACJ,CAAC;IAED,KAAK,CAAC,IAAI;QACR,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC;YACpB,IAAI,CAAC,SAAS,GAAG,IAAI,CAAA;YACrB,IAAI,CAAC;gBACH,MAAM,IAAI,CAAC,SAAS,EAAE,KAAK,EAAE,CAAA;YAC/B,CAAC;oBAAS,CAAC;gBACT,MAAM,IAAI,CAAC,eAAe,CAAC,OAAO,EAAE,CAAA;YACtC,CAAC;QACH,CAAC;IACH,CAAC;CACF","sourcesContent":["import { lexicons } from '@atproto/api'\nimport { BackgroundQueue } from '../background.js'\nimport { Database } from '../db/index.js'\nimport { CommitCreateEvent, Jetstream } from '../jetstream/service.js'\nimport { verificationLogger } from '../logger.js'\nimport { VerificationService } from '../verification/service.js'\n\ntype VerificationRecord = {\n subject: string\n handle: string\n displayName: string\n createdAt: string\n}\n\nexport class VerificationListener {\n destroyed = false\n private cursor?: number\n private jetstream: Jetstream | null = null\n private collection = 'app.bsky.graph.verification'\n public backgroundQueue = new BackgroundQueue(this.db, { concurrency: 1 })\n private verificationService = VerificationService.creator()(this.db)\n\n constructor(\n private db: Database,\n private jetstreamUrl: string,\n private verifierIssuersToIndex?: string[],\n ) {}\n\n // When the queue has capacity, this method returns true which means we can continue to handle events\n // otherwise, it will close jetstream connection and wait for all previously queued events to be processed first\n // and then start jetstream listener again before returning false. At that point, the previous listeners should\n // have updates the cursor in db to the last processed event and the new listener will start from that cursor\n async ensureCoolDown() {\n const { waitingCount, runningCount } = this.backgroundQueue.getStats()\n if (waitingCount > 50 || runningCount > 50) {\n verificationLogger.warn(`Background queue is full, pausing listener`)\n this.jetstream?.close()\n await this.backgroundQueue.processAll()\n await this.start()\n return false\n }\n return true\n }\n\n handleNewVerification(\n issuer: string,\n uri: string,\n cid: string,\n record: VerificationRecord,\n cursor: number,\n ) {\n this.backgroundQueue.add(async () => {\n try {\n const { subject, handle, displayName, createdAt } = record\n await this.verificationService.create([\n { uri, cid, issuer, subject, handle, displayName, createdAt },\n ])\n await this.updateCursor(cursor)\n } catch (err) {\n verificationLogger.error(\n err,\n 'Error handling verification create event',\n )\n }\n })\n }\n\n handleDeletedVerification(uri: string, cursor: number) {\n this.backgroundQueue.add(async () => {\n try {\n await this.verificationService.markRevoked({\n uris: [uri],\n })\n await this.updateCursor(cursor)\n } catch (err) {\n verificationLogger.error(\n err,\n 'Error handling verification delete event',\n )\n }\n })\n }\n\n async getCursor() {\n await this.verificationService.createFirehoseCursor()\n const cursor = await this.verificationService.getFirehoseCursor()\n if (cursor) {\n this.cursor = cursor\n }\n return this.cursor\n }\n\n async updateCursor(cursor: number) {\n // Assuming cursors are always incremental, if we have processed an event with higher value cursor, let's not update to a lower value\n if (this.cursor && this.cursor >= cursor) {\n return\n }\n\n // This will only update if the cursor is higher than the current one in db\n const updatedCursor =\n await this.verificationService.updateFirehoseCursor(cursor)\n\n if (updatedCursor) {\n this.cursor = updatedCursor\n }\n }\n\n async start() {\n await this.getCursor()\n\n this.jetstream = new Jetstream({\n endpoint: this.jetstreamUrl,\n cursor: this.cursor || undefined,\n wantedCollections: [this.collection],\n wantedDids: this.verifierIssuersToIndex?.length\n ? this.verifierIssuersToIndex\n : undefined,\n })\n\n await this.jetstream.start({\n onCreate: {\n [this.collection]: async (e: CommitCreateEvent<VerificationRecord>) => {\n const recordValidity = lexicons.validate(\n this.collection,\n e.commit.record,\n )\n\n if (!recordValidity.success) {\n verificationLogger.error(\n recordValidity.error,\n 'Invalid verification record in the firehose',\n )\n return\n }\n\n const hasCapacity = await this.ensureCoolDown()\n if (hasCapacity) {\n const issuer = e.did\n const { record, rkey, collection, cid } = e.commit\n const uri = `at://${issuer}/${collection}/${rkey}`\n this.handleNewVerification(issuer, uri, cid, record, e.time_us)\n }\n },\n },\n onDelete: {\n [this.collection]: async (e) => {\n const hasCapacity = await this.ensureCoolDown()\n if (hasCapacity) {\n this.handleDeletedVerification(\n `at://${e.did}/${e.commit.collection}/${e.commit.rkey}`,\n e.time_us,\n )\n }\n },\n },\n })\n }\n\n async stop() {\n if (!this.destroyed) {\n this.destroyed = true\n try {\n await this.jetstream?.close()\n } finally {\n await this.backgroundQueue.destroy()\n }\n }\n }\n}\n"]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"20260602T120000000Z-add-report-activity-created-index.d.ts","sourceRoot":"","sources":["../../../src/db/migrations/20260602T120000000Z-add-report-activity-created-index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAA;AAE/B,wBAAsB,EAAE,CAAC,EAAE,EAAE,MAAM,CAAC,OAAO,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,CAU3D;AAED,wBAAsB,IAAI,CAAC,EAAE,EAAE,MAAM,CAAC,OAAO,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,CAE7D"}
|