@atproto/ozone 0.2.5 → 0.2.6

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.
Files changed (146) hide show
  1. package/CHANGELOG.md +18 -0
  2. package/dist/api/index.d.ts.map +1 -1
  3. package/dist/api/index.js +2 -0
  4. package/dist/api/index.js.map +1 -1
  5. package/dist/api/report/queryActivities.d.ts +4 -0
  6. package/dist/api/report/queryActivities.d.ts.map +1 -0
  7. package/dist/api/report/queryActivities.js +36 -0
  8. package/dist/api/report/queryActivities.js.map +1 -0
  9. package/dist/background.d.ts +5 -3
  10. package/dist/background.d.ts.map +1 -1
  11. package/dist/background.js +13 -4
  12. package/dist/background.js.map +1 -1
  13. package/dist/context.js +1 -1
  14. package/dist/context.js.map +1 -1
  15. package/dist/daemon/context.js +1 -1
  16. package/dist/daemon/context.js.map +1 -1
  17. package/dist/daemon/verification-listener.d.ts +1 -1
  18. package/dist/daemon/verification-listener.d.ts.map +1 -1
  19. package/dist/daemon/verification-listener.js +10 -4
  20. package/dist/daemon/verification-listener.js.map +1 -1
  21. package/dist/db/migrations/20260602T120000000Z-add-report-activity-created-index.d.ts +4 -0
  22. package/dist/db/migrations/20260602T120000000Z-add-report-activity-created-index.d.ts.map +1 -0
  23. package/dist/db/migrations/20260602T120000000Z-add-report-activity-created-index.js +15 -0
  24. package/dist/db/migrations/20260602T120000000Z-add-report-activity-created-index.js.map +1 -0
  25. package/dist/db/migrations/index.d.ts +1 -0
  26. package/dist/db/migrations/index.d.ts.map +1 -1
  27. package/dist/db/migrations/index.js +1 -0
  28. package/dist/db/migrations/index.js.map +1 -1
  29. package/dist/index.d.ts.map +1 -1
  30. package/dist/index.js +23 -13
  31. package/dist/index.js.map +1 -1
  32. package/dist/jetstream/service.d.ts +1 -1
  33. package/dist/jetstream/service.d.ts.map +1 -1
  34. package/dist/jetstream/service.js +3 -1
  35. package/dist/jetstream/service.js.map +1 -1
  36. package/dist/lexicon/index.d.ts +11 -0
  37. package/dist/lexicon/index.d.ts.map +1 -1
  38. package/dist/lexicon/index.js +18 -0
  39. package/dist/lexicon/index.js.map +1 -1
  40. package/dist/lexicon/lexicons.d.ts +338 -0
  41. package/dist/lexicon/lexicons.d.ts.map +1 -1
  42. package/dist/lexicon/lexicons.js +173 -0
  43. package/dist/lexicon/lexicons.js.map +1 -1
  44. package/dist/lexicon/types/app/bsky/notification/defs.d.ts +1 -0
  45. package/dist/lexicon/types/app/bsky/notification/defs.d.ts.map +1 -1
  46. package/dist/lexicon/types/app/bsky/notification/defs.js.map +1 -1
  47. package/dist/lexicon/types/chat/bsky/notification/defs.d.ts +19 -0
  48. package/dist/lexicon/types/chat/bsky/notification/defs.d.ts.map +1 -0
  49. package/dist/lexicon/types/chat/bsky/notification/defs.js +19 -0
  50. package/dist/lexicon/types/chat/bsky/notification/defs.js.map +1 -0
  51. package/dist/lexicon/types/chat/bsky/notification/getPreferences.d.ts +20 -0
  52. package/dist/lexicon/types/chat/bsky/notification/getPreferences.d.ts.map +1 -0
  53. package/dist/lexicon/types/chat/bsky/notification/getPreferences.js +5 -0
  54. package/dist/lexicon/types/chat/bsky/notification/getPreferences.js.map +1 -0
  55. package/dist/lexicon/types/chat/bsky/notification/putPreferences.d.ts +26 -0
  56. package/dist/lexicon/types/chat/bsky/notification/putPreferences.d.ts.map +1 -0
  57. package/dist/lexicon/types/chat/bsky/notification/putPreferences.js +5 -0
  58. package/dist/lexicon/types/chat/bsky/notification/putPreferences.js.map +1 -0
  59. package/dist/lexicon/types/tools/ozone/report/defs.d.ts +1 -0
  60. package/dist/lexicon/types/tools/ozone/report/defs.d.ts.map +1 -1
  61. package/dist/lexicon/types/tools/ozone/report/defs.js.map +1 -1
  62. package/dist/lexicon/types/tools/ozone/report/queryActivities.d.ts +32 -0
  63. package/dist/lexicon/types/tools/ozone/report/queryActivities.d.ts.map +1 -0
  64. package/dist/lexicon/types/tools/ozone/report/queryActivities.js +5 -0
  65. package/dist/lexicon/types/tools/ozone/report/queryActivities.js.map +1 -0
  66. package/dist/mod-service/report.d.ts +1 -0
  67. package/dist/mod-service/report.d.ts.map +1 -1
  68. package/dist/mod-service/report.js +16 -0
  69. package/dist/mod-service/report.js.map +1 -1
  70. package/dist/report/activity.d.ts +19 -1
  71. package/dist/report/activity.d.ts.map +1 -1
  72. package/dist/report/activity.js +27 -1
  73. package/dist/report/activity.js.map +1 -1
  74. package/package.json +9 -8
  75. package/src/api/index.ts +2 -0
  76. package/src/api/report/queryActivities.ts +64 -0
  77. package/src/background.ts +19 -4
  78. package/src/context.ts +1 -1
  79. package/src/daemon/context.ts +1 -1
  80. package/src/daemon/verification-listener.ts +9 -4
  81. package/src/db/migrations/20260602T120000000Z-add-report-activity-created-index.ts +17 -0
  82. package/src/db/migrations/index.ts +1 -0
  83. package/src/index.ts +25 -15
  84. package/src/jetstream/service.ts +3 -1
  85. package/src/mod-service/report.ts +19 -0
  86. package/src/report/activity.ts +47 -0
  87. package/tests/3p-labeler.test.ts +2 -2
  88. package/tests/_util.ts +8 -25
  89. package/tests/account-strikes.test.ts +1 -1
  90. package/tests/ack-all-subjects-of-account.test.ts +1 -1
  91. package/tests/age-assurance.test.ts +1 -1
  92. package/tests/blob-divert.test.ts +1 -1
  93. package/tests/communication-templates.test.ts +1 -1
  94. package/tests/content-tagger.test.ts +1 -1
  95. package/tests/db.test.ts +1 -1
  96. package/tests/expiring-label.test.ts +1 -1
  97. package/tests/expiring-tags.test.ts +1 -1
  98. package/tests/get-account-timeline.test.ts +1 -1
  99. package/tests/get-config.test.ts +1 -1
  100. package/tests/get-lists.test.ts +2 -1
  101. package/tests/get-profiles.test.ts +1 -1
  102. package/tests/get-record.test.ts +1 -1
  103. package/tests/get-records.test.ts +1 -1
  104. package/tests/get-repo.test.ts +1 -1
  105. package/tests/get-report.test.ts +1 -1
  106. package/tests/get-reporter-stats.test.ts +1 -1
  107. package/tests/get-repos.test.ts +1 -1
  108. package/tests/get-starter-pack.test.ts +1 -1
  109. package/tests/get-subjects.test.ts +1 -1
  110. package/tests/mod-tool.test.ts +1 -1
  111. package/tests/moderation-appeals.test.ts +1 -1
  112. package/tests/moderation-events.test.ts +1 -1
  113. package/tests/moderation-status-tags.test.ts +1 -1
  114. package/tests/moderation-statuses.test.ts +1 -1
  115. package/tests/moderation.test.ts +1 -1
  116. package/tests/protected-tags.test.ts +1 -1
  117. package/tests/query-labels.test.ts +1 -1
  118. package/tests/query-reports.test.ts +1 -1
  119. package/tests/queue-assignment.test.ts +1 -1
  120. package/tests/queue-router.test.ts +1 -1
  121. package/tests/queues.test.ts +1 -1
  122. package/tests/record-and-account-events.test.ts +1 -1
  123. package/tests/repo-search.test.ts +2 -2
  124. package/tests/report-action.test.ts +1 -1
  125. package/tests/report-activity.test.ts +145 -1
  126. package/tests/report-assignment.test.ts +1 -1
  127. package/tests/report-muting.test.ts +1 -1
  128. package/tests/report-reason.test.ts +1 -1
  129. package/tests/report-reassign-queue.test.ts +1 -1
  130. package/tests/report-routing.test.ts +1 -1
  131. package/tests/report-stats.test.ts +1 -1
  132. package/tests/revoke-account-credentials.test.ts +1 -1
  133. package/tests/safelink.test.ts +1 -1
  134. package/tests/scheduled-action-processor.test.ts +1 -1
  135. package/tests/scheduled-action.test.ts +1 -1
  136. package/tests/sequencer.test.ts +1 -1
  137. package/tests/server.test.ts +9 -12
  138. package/tests/sets.test.ts +1 -1
  139. package/tests/settings.test.ts +1 -1
  140. package/tests/strike-expiry-processor.test.ts +1 -1
  141. package/tests/subject-priority-score.test.ts +1 -1
  142. package/tests/takedown.test.ts +1 -1
  143. package/tests/team.test.ts +1 -1
  144. package/tests/verification-listener.test.ts +40 -13
  145. package/tests/verification.test.ts +1 -1
  146. package/tsconfig.build.tsbuildinfo +1 -1
@@ -37,4 +37,5 @@ export * as _20260313T000000000Z from './20260313T000000000Z-add-report-activity
37
37
  export * as _20260318T152058935Z from './20260318T152058935Z-add-report-stat.js';
38
38
  export * as _20260428T000000000Z from './20260428T000000000Z-add-expiring-tag-table.js';
39
39
  export * as _20260513T202941104Z from './20260513T202941104Z-add-subject-convo-id.js';
40
+ export * as _20260602T120000000Z from './20260602T120000000Z-add-report-activity-created-index.js';
40
41
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/db/migrations/index.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,oBAAoB,MAAM,+BAA+B,CAAA;AACrE,OAAO,KAAK,oBAAoB,MAAM,iDAAiD,CAAA;AACvF,OAAO,KAAK,oBAAoB,MAAM,0CAA0C,CAAA;AAChF,OAAO,KAAK,oBAAoB,MAAM,gEAAgE,CAAA;AACtG,OAAO,KAAK,oBAAoB,MAAM,yCAAyC,CAAA;AAC/E,OAAO,KAAK,oBAAoB,MAAM,yCAAyC,CAAA;AAC/E,OAAO,KAAK,oBAAoB,MAAM,0CAA0C,CAAA;AAChF,OAAO,KAAK,oBAAoB,MAAM,iCAAiC,CAAA;AACvE,OAAO,KAAK,oBAAoB,MAAM,iDAAiD,CAAA;AACvF,OAAO,KAAK,oBAAoB,MAAM,4CAA4C,CAAA;AAClF,OAAO,KAAK,oBAAoB,MAAM,gDAAgD,CAAA;AACtF,OAAO,KAAK,oBAAoB,MAAM,4DAA4D,CAAA;AAClG,OAAO,KAAK,oBAAoB,MAAM,+BAA+B,CAAA;AACrE,OAAO,KAAK,oBAAoB,MAAM,kCAAkC,CAAA;AACxE,OAAO,KAAK,oBAAoB,MAAM,+DAA+D,CAAA;AACrG,OAAO,KAAK,oBAAoB,MAAM,mDAAmD,CAAA;AACzF,OAAO,KAAK,oBAAoB,MAAM,qDAAqD,CAAA;AAC3F,OAAO,KAAK,oBAAoB,MAAM,mDAAmD,CAAA;AACzF,OAAO,KAAK,oBAAoB,MAAM,+DAA+D,CAAA;AACrG,OAAO,KAAK,oBAAoB,MAAM,yCAAyC,CAAA;AAC/E,OAAO,KAAK,oBAAoB,MAAM,mDAAmD,CAAA;AACzF,OAAO,KAAK,oBAAoB,MAAM,uCAAuC,CAAA;AAC7E,OAAO,KAAK,oBAAoB,MAAM,0CAA0C,CAAA;AAChF,OAAO,KAAK,oBAAoB,MAAM,mCAAmC,CAAA;AACzE,OAAO,KAAK,oBAAoB,MAAM,2DAA2D,CAAA;AACjG,OAAO,KAAK,oBAAoB,MAAM,kDAAkD,CAAA;AACxF,OAAO,KAAK,oBAAoB,MAAM,oDAAoD,CAAA;AAC1F,OAAO,KAAK,oBAAoB,MAAM,qDAAqD,CAAA;AAC3F,OAAO,KAAK,oBAAoB,MAAM,kDAAkD,CAAA;AACxF,OAAO,KAAK,oBAAoB,MAAM,4CAA4C,CAAA;AAClF,OAAO,KAAK,oBAAoB,MAAM,4CAA4C,CAAA;AAClF,OAAO,KAAK,oBAAoB,MAAM,uDAAuD,CAAA;AAC7F,OAAO,KAAK,oBAAoB,MAAM,8CAA8C,CAAA;AACpF,OAAO,KAAK,oBAAoB,MAAM,+CAA+C,CAAA;AACrF,OAAO,KAAK,oBAAoB,MAAM,iDAAiD,CAAA;AACvF,OAAO,KAAK,oBAAoB,MAAM,oDAAoD,CAAA;AAC1F,OAAO,KAAK,oBAAoB,MAAM,0CAA0C,CAAA;AAChF,OAAO,KAAK,oBAAoB,MAAM,iDAAiD,CAAA;AACvF,OAAO,KAAK,oBAAoB,MAAM,+CAA+C,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/db/migrations/index.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,oBAAoB,MAAM,+BAA+B,CAAA;AACrE,OAAO,KAAK,oBAAoB,MAAM,iDAAiD,CAAA;AACvF,OAAO,KAAK,oBAAoB,MAAM,0CAA0C,CAAA;AAChF,OAAO,KAAK,oBAAoB,MAAM,gEAAgE,CAAA;AACtG,OAAO,KAAK,oBAAoB,MAAM,yCAAyC,CAAA;AAC/E,OAAO,KAAK,oBAAoB,MAAM,yCAAyC,CAAA;AAC/E,OAAO,KAAK,oBAAoB,MAAM,0CAA0C,CAAA;AAChF,OAAO,KAAK,oBAAoB,MAAM,iCAAiC,CAAA;AACvE,OAAO,KAAK,oBAAoB,MAAM,iDAAiD,CAAA;AACvF,OAAO,KAAK,oBAAoB,MAAM,4CAA4C,CAAA;AAClF,OAAO,KAAK,oBAAoB,MAAM,gDAAgD,CAAA;AACtF,OAAO,KAAK,oBAAoB,MAAM,4DAA4D,CAAA;AAClG,OAAO,KAAK,oBAAoB,MAAM,+BAA+B,CAAA;AACrE,OAAO,KAAK,oBAAoB,MAAM,kCAAkC,CAAA;AACxE,OAAO,KAAK,oBAAoB,MAAM,+DAA+D,CAAA;AACrG,OAAO,KAAK,oBAAoB,MAAM,mDAAmD,CAAA;AACzF,OAAO,KAAK,oBAAoB,MAAM,qDAAqD,CAAA;AAC3F,OAAO,KAAK,oBAAoB,MAAM,mDAAmD,CAAA;AACzF,OAAO,KAAK,oBAAoB,MAAM,+DAA+D,CAAA;AACrG,OAAO,KAAK,oBAAoB,MAAM,yCAAyC,CAAA;AAC/E,OAAO,KAAK,oBAAoB,MAAM,mDAAmD,CAAA;AACzF,OAAO,KAAK,oBAAoB,MAAM,uCAAuC,CAAA;AAC7E,OAAO,KAAK,oBAAoB,MAAM,0CAA0C,CAAA;AAChF,OAAO,KAAK,oBAAoB,MAAM,mCAAmC,CAAA;AACzE,OAAO,KAAK,oBAAoB,MAAM,2DAA2D,CAAA;AACjG,OAAO,KAAK,oBAAoB,MAAM,kDAAkD,CAAA;AACxF,OAAO,KAAK,oBAAoB,MAAM,oDAAoD,CAAA;AAC1F,OAAO,KAAK,oBAAoB,MAAM,qDAAqD,CAAA;AAC3F,OAAO,KAAK,oBAAoB,MAAM,kDAAkD,CAAA;AACxF,OAAO,KAAK,oBAAoB,MAAM,4CAA4C,CAAA;AAClF,OAAO,KAAK,oBAAoB,MAAM,4CAA4C,CAAA;AAClF,OAAO,KAAK,oBAAoB,MAAM,uDAAuD,CAAA;AAC7F,OAAO,KAAK,oBAAoB,MAAM,8CAA8C,CAAA;AACpF,OAAO,KAAK,oBAAoB,MAAM,+CAA+C,CAAA;AACrF,OAAO,KAAK,oBAAoB,MAAM,iDAAiD,CAAA;AACvF,OAAO,KAAK,oBAAoB,MAAM,oDAAoD,CAAA;AAC1F,OAAO,KAAK,oBAAoB,MAAM,0CAA0C,CAAA;AAChF,OAAO,KAAK,oBAAoB,MAAM,iDAAiD,CAAA;AACvF,OAAO,KAAK,oBAAoB,MAAM,+CAA+C,CAAA;AACrF,OAAO,KAAK,oBAAoB,MAAM,4DAA4D,CAAA"}
@@ -40,4 +40,5 @@ export * as _20260313T000000000Z from './20260313T000000000Z-add-report-activity
40
40
  export * as _20260318T152058935Z from './20260318T152058935Z-add-report-stat.js';
41
41
  export * as _20260428T000000000Z from './20260428T000000000Z-add-expiring-tag-table.js';
42
42
  export * as _20260513T202941104Z from './20260513T202941104Z-add-subject-convo-id.js';
43
+ export * as _20260602T120000000Z from './20260602T120000000Z-add-report-activity-created-index.js';
43
44
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/db/migrations/index.ts"],"names":[],"mappings":"AAAA,oGAAoG;AACpG,gGAAgG;AAChG,+FAA+F;AAE/F,OAAO,KAAK,oBAAoB,MAAM,+BAA+B,CAAA;AACrE,OAAO,KAAK,oBAAoB,MAAM,iDAAiD,CAAA;AACvF,OAAO,KAAK,oBAAoB,MAAM,0CAA0C,CAAA;AAChF,OAAO,KAAK,oBAAoB,MAAM,gEAAgE,CAAA;AACtG,OAAO,KAAK,oBAAoB,MAAM,yCAAyC,CAAA;AAC/E,OAAO,KAAK,oBAAoB,MAAM,yCAAyC,CAAA;AAC/E,OAAO,KAAK,oBAAoB,MAAM,0CAA0C,CAAA;AAChF,OAAO,KAAK,oBAAoB,MAAM,iCAAiC,CAAA;AACvE,OAAO,KAAK,oBAAoB,MAAM,iDAAiD,CAAA;AACvF,OAAO,KAAK,oBAAoB,MAAM,4CAA4C,CAAA;AAClF,OAAO,KAAK,oBAAoB,MAAM,gDAAgD,CAAA;AACtF,OAAO,KAAK,oBAAoB,MAAM,4DAA4D,CAAA;AAClG,OAAO,KAAK,oBAAoB,MAAM,+BAA+B,CAAA;AACrE,OAAO,KAAK,oBAAoB,MAAM,kCAAkC,CAAA;AACxE,OAAO,KAAK,oBAAoB,MAAM,+DAA+D,CAAA;AACrG,OAAO,KAAK,oBAAoB,MAAM,mDAAmD,CAAA;AACzF,OAAO,KAAK,oBAAoB,MAAM,qDAAqD,CAAA;AAC3F,OAAO,KAAK,oBAAoB,MAAM,mDAAmD,CAAA;AACzF,OAAO,KAAK,oBAAoB,MAAM,+DAA+D,CAAA;AACrG,OAAO,KAAK,oBAAoB,MAAM,yCAAyC,CAAA;AAC/E,OAAO,KAAK,oBAAoB,MAAM,mDAAmD,CAAA;AACzF,OAAO,KAAK,oBAAoB,MAAM,uCAAuC,CAAA;AAC7E,OAAO,KAAK,oBAAoB,MAAM,0CAA0C,CAAA;AAChF,OAAO,KAAK,oBAAoB,MAAM,mCAAmC,CAAA;AACzE,OAAO,KAAK,oBAAoB,MAAM,2DAA2D,CAAA;AACjG,OAAO,KAAK,oBAAoB,MAAM,kDAAkD,CAAA;AACxF,OAAO,KAAK,oBAAoB,MAAM,oDAAoD,CAAA;AAC1F,OAAO,KAAK,oBAAoB,MAAM,qDAAqD,CAAA;AAC3F,OAAO,KAAK,oBAAoB,MAAM,kDAAkD,CAAA;AACxF,OAAO,KAAK,oBAAoB,MAAM,4CAA4C,CAAA;AAClF,OAAO,KAAK,oBAAoB,MAAM,4CAA4C,CAAA;AAClF,OAAO,KAAK,oBAAoB,MAAM,uDAAuD,CAAA;AAC7F,OAAO,KAAK,oBAAoB,MAAM,8CAA8C,CAAA;AACpF,OAAO,KAAK,oBAAoB,MAAM,+CAA+C,CAAA;AACrF,OAAO,KAAK,oBAAoB,MAAM,iDAAiD,CAAA;AACvF,OAAO,KAAK,oBAAoB,MAAM,oDAAoD,CAAA;AAC1F,OAAO,KAAK,oBAAoB,MAAM,0CAA0C,CAAA;AAChF,OAAO,KAAK,oBAAoB,MAAM,iDAAiD,CAAA;AACvF,OAAO,KAAK,oBAAoB,MAAM,+CAA+C,CAAA","sourcesContent":["// NOTE this file can be edited by hand, but it is also appended to by the migration:create command.\n// It's important that every migration is exported from here with the proper name. We'd simplify\n// this with kysely's FileMigrationProvider, but it doesn't play nicely with the build process.\n\nexport * as _20231219T205730722Z from './20231219T205730722Z-init.js'\nexport * as _20240116T085607200Z from './20240116T085607200Z-communication-template.js'\nexport * as _20240201T051104136Z from './20240201T051104136Z-mod-event-blobs.js'\nexport * as _20240208T213404429Z from './20240208T213404429Z-add-tags-column-to-moderation-subject.js'\nexport * as _20240228T003647759Z from './20240228T003647759Z-add-label-sigs.js'\nexport * as _20240408T192432676Z from './20240408T192432676Z-mute-reporting.js'\nexport * as _20240506T225055595Z from './20240506T225055595Z-message-subject.js'\nexport * as _20240430T211332580Z from './20240521T211332580Z-member.js'\nexport * as _20240814T003647759Z from './20240814T003647759Z-event-created-at-index.js'\nexport * as _20240903T205730722Z from './20240903T205730722Z-add-template-lang.js'\nexport * as _20240904T205730722Z from './20240904T205730722Z-add-subject-did-index.js'\nexport * as _20241001T205730722Z from './20241001T205730722Z-subject-status-review-state-index.js'\nexport * as _20241008T205730722Z from './20241008T205730722Z-sets.js'\nexport * as _20241018T205730722Z from './20241018T205730722Z-setting.js'\nexport * as _20241026T205730722Z from './20241026T205730722Z-add-hosting-status-to-subject-status.js'\nexport * as _20241220T144630860Z from './20241220T144630860Z-stats-materialized-views.js'\nexport * as _20250204T003647759Z from './20250204T003647759Z-add-subject-priority-score.js'\nexport * as _20250211T003647759Z from './20250211T003647759Z-add-reporter-stats-index.js'\nexport * as _20250211T132135150Z from './20250211T132135150Z-moderation-event-message-partial-idx.js'\nexport * as _20250221T132135150Z from './20250221T132135150Z-member-details.js'\nexport * as _20250404T201720309Z from './20250404T201720309Z-subject-status-sort-idxs.js'\nexport * as _20250415T201720309Z from './20250415T201720309Z-verification.js'\nexport * as _20250417T201720309Z from './20250417T201720309Z-firehose-cursor.js'\nexport * as _20250609T110704000Z from './20250609T110704000Z-safelink.js'\nexport * as _20250618T180246000Z from './20250618T180246000Z-add-mod-tool-to-moderation-event.js'\nexport * as _20250701T000000000Z from './20250701T000000000Z-add-age-assurance-state.js'\nexport * as _20250715T000000000Z from './20250715T000000000Z-add-mod-event-external-id.js'\nexport * as _20250718T150931000Z from './20250718T150931000Z-update-appeal-reason-stats.js'\nexport * as _20250813T000000000Z from './20250813T000000000Z-mod-tool-batch-id-index.js'\nexport * as _20250923T000000000Z from './20250923T000000000Z-scheduled-actions.js'\nexport * as _20251008T120000000Z from './20251008T120000000Z-add-strike-system.js'\nexport * as _20260210T154806448Z from './20260210T154806448Z-mod-event-created-by-indexes.js'\nexport * as _20260219T164523000Z from './20260219T164523000Z-create-report-table.js'\nexport * as _20260219T165302248Z from './20260219T165302248Z-moderator-assignment.js'\nexport * as _20260225T000000000Z from './20260225T000000000Z-add-report-queue-table.js'\nexport * as _20260313T000000000Z from './20260313T000000000Z-add-report-activity-table.js'\nexport * as _20260318T152058935Z from './20260318T152058935Z-add-report-stat.js'\nexport * as _20260428T000000000Z from './20260428T000000000Z-add-expiring-tag-table.js'\nexport * as _20260513T202941104Z from './20260513T202941104Z-add-subject-convo-id.js'\n"]}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/db/migrations/index.ts"],"names":[],"mappings":"AAAA,oGAAoG;AACpG,gGAAgG;AAChG,+FAA+F;AAE/F,OAAO,KAAK,oBAAoB,MAAM,+BAA+B,CAAA;AACrE,OAAO,KAAK,oBAAoB,MAAM,iDAAiD,CAAA;AACvF,OAAO,KAAK,oBAAoB,MAAM,0CAA0C,CAAA;AAChF,OAAO,KAAK,oBAAoB,MAAM,gEAAgE,CAAA;AACtG,OAAO,KAAK,oBAAoB,MAAM,yCAAyC,CAAA;AAC/E,OAAO,KAAK,oBAAoB,MAAM,yCAAyC,CAAA;AAC/E,OAAO,KAAK,oBAAoB,MAAM,0CAA0C,CAAA;AAChF,OAAO,KAAK,oBAAoB,MAAM,iCAAiC,CAAA;AACvE,OAAO,KAAK,oBAAoB,MAAM,iDAAiD,CAAA;AACvF,OAAO,KAAK,oBAAoB,MAAM,4CAA4C,CAAA;AAClF,OAAO,KAAK,oBAAoB,MAAM,gDAAgD,CAAA;AACtF,OAAO,KAAK,oBAAoB,MAAM,4DAA4D,CAAA;AAClG,OAAO,KAAK,oBAAoB,MAAM,+BAA+B,CAAA;AACrE,OAAO,KAAK,oBAAoB,MAAM,kCAAkC,CAAA;AACxE,OAAO,KAAK,oBAAoB,MAAM,+DAA+D,CAAA;AACrG,OAAO,KAAK,oBAAoB,MAAM,mDAAmD,CAAA;AACzF,OAAO,KAAK,oBAAoB,MAAM,qDAAqD,CAAA;AAC3F,OAAO,KAAK,oBAAoB,MAAM,mDAAmD,CAAA;AACzF,OAAO,KAAK,oBAAoB,MAAM,+DAA+D,CAAA;AACrG,OAAO,KAAK,oBAAoB,MAAM,yCAAyC,CAAA;AAC/E,OAAO,KAAK,oBAAoB,MAAM,mDAAmD,CAAA;AACzF,OAAO,KAAK,oBAAoB,MAAM,uCAAuC,CAAA;AAC7E,OAAO,KAAK,oBAAoB,MAAM,0CAA0C,CAAA;AAChF,OAAO,KAAK,oBAAoB,MAAM,mCAAmC,CAAA;AACzE,OAAO,KAAK,oBAAoB,MAAM,2DAA2D,CAAA;AACjG,OAAO,KAAK,oBAAoB,MAAM,kDAAkD,CAAA;AACxF,OAAO,KAAK,oBAAoB,MAAM,oDAAoD,CAAA;AAC1F,OAAO,KAAK,oBAAoB,MAAM,qDAAqD,CAAA;AAC3F,OAAO,KAAK,oBAAoB,MAAM,kDAAkD,CAAA;AACxF,OAAO,KAAK,oBAAoB,MAAM,4CAA4C,CAAA;AAClF,OAAO,KAAK,oBAAoB,MAAM,4CAA4C,CAAA;AAClF,OAAO,KAAK,oBAAoB,MAAM,uDAAuD,CAAA;AAC7F,OAAO,KAAK,oBAAoB,MAAM,8CAA8C,CAAA;AACpF,OAAO,KAAK,oBAAoB,MAAM,+CAA+C,CAAA;AACrF,OAAO,KAAK,oBAAoB,MAAM,iDAAiD,CAAA;AACvF,OAAO,KAAK,oBAAoB,MAAM,oDAAoD,CAAA;AAC1F,OAAO,KAAK,oBAAoB,MAAM,0CAA0C,CAAA;AAChF,OAAO,KAAK,oBAAoB,MAAM,iDAAiD,CAAA;AACvF,OAAO,KAAK,oBAAoB,MAAM,+CAA+C,CAAA;AACrF,OAAO,KAAK,oBAAoB,MAAM,4DAA4D,CAAA","sourcesContent":["// NOTE this file can be edited by hand, but it is also appended to by the migration:create command.\n// It's important that every migration is exported from here with the proper name. We'd simplify\n// this with kysely's FileMigrationProvider, but it doesn't play nicely with the build process.\n\nexport * as _20231219T205730722Z from './20231219T205730722Z-init.js'\nexport * as _20240116T085607200Z from './20240116T085607200Z-communication-template.js'\nexport * as _20240201T051104136Z from './20240201T051104136Z-mod-event-blobs.js'\nexport * as _20240208T213404429Z from './20240208T213404429Z-add-tags-column-to-moderation-subject.js'\nexport * as _20240228T003647759Z from './20240228T003647759Z-add-label-sigs.js'\nexport * as _20240408T192432676Z from './20240408T192432676Z-mute-reporting.js'\nexport * as _20240506T225055595Z from './20240506T225055595Z-message-subject.js'\nexport * as _20240430T211332580Z from './20240521T211332580Z-member.js'\nexport * as _20240814T003647759Z from './20240814T003647759Z-event-created-at-index.js'\nexport * as _20240903T205730722Z from './20240903T205730722Z-add-template-lang.js'\nexport * as _20240904T205730722Z from './20240904T205730722Z-add-subject-did-index.js'\nexport * as _20241001T205730722Z from './20241001T205730722Z-subject-status-review-state-index.js'\nexport * as _20241008T205730722Z from './20241008T205730722Z-sets.js'\nexport * as _20241018T205730722Z from './20241018T205730722Z-setting.js'\nexport * as _20241026T205730722Z from './20241026T205730722Z-add-hosting-status-to-subject-status.js'\nexport * as _20241220T144630860Z from './20241220T144630860Z-stats-materialized-views.js'\nexport * as _20250204T003647759Z from './20250204T003647759Z-add-subject-priority-score.js'\nexport * as _20250211T003647759Z from './20250211T003647759Z-add-reporter-stats-index.js'\nexport * as _20250211T132135150Z from './20250211T132135150Z-moderation-event-message-partial-idx.js'\nexport * as _20250221T132135150Z from './20250221T132135150Z-member-details.js'\nexport * as _20250404T201720309Z from './20250404T201720309Z-subject-status-sort-idxs.js'\nexport * as _20250415T201720309Z from './20250415T201720309Z-verification.js'\nexport * as _20250417T201720309Z from './20250417T201720309Z-firehose-cursor.js'\nexport * as _20250609T110704000Z from './20250609T110704000Z-safelink.js'\nexport * as _20250618T180246000Z from './20250618T180246000Z-add-mod-tool-to-moderation-event.js'\nexport * as _20250701T000000000Z from './20250701T000000000Z-add-age-assurance-state.js'\nexport * as _20250715T000000000Z from './20250715T000000000Z-add-mod-event-external-id.js'\nexport * as _20250718T150931000Z from './20250718T150931000Z-update-appeal-reason-stats.js'\nexport * as _20250813T000000000Z from './20250813T000000000Z-mod-tool-batch-id-index.js'\nexport * as _20250923T000000000Z from './20250923T000000000Z-scheduled-actions.js'\nexport * as _20251008T120000000Z from './20251008T120000000Z-add-strike-system.js'\nexport * as _20260210T154806448Z from './20260210T154806448Z-mod-event-created-by-indexes.js'\nexport * as _20260219T164523000Z from './20260219T164523000Z-create-report-table.js'\nexport * as _20260219T165302248Z from './20260219T165302248Z-moderator-assignment.js'\nexport * as _20260225T000000000Z from './20260225T000000000Z-add-report-queue-table.js'\nexport * as _20260313T000000000Z from './20260313T000000000Z-add-report-activity-table.js'\nexport * as _20260318T152058935Z from './20260318T152058935Z-add-report-stat.js'\nexport * as _20260428T000000000Z from './20260428T000000000Z-add-expiring-tag-table.js'\nexport * as _20260513T202941104Z from './20260513T202941104Z-add-subject-convo-id.js'\nexport * as _20260602T120000000Z from './20260602T120000000Z-add-report-activity-created-index.js'\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,OAAO,IAAI,MAAM,WAAW,CAAA;AAI5B,OAAO,OAAO,MAAM,SAAS,CAAA;AAQ7B,OAAO,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAA;AAC7D,OAAO,EAAE,UAAU,EAAE,iBAAiB,EAAE,MAAM,cAAc,CAAA;AAM5D,cAAc,mBAAmB,CAAA;AACjC,OAAO,EAAE,KAAK,gBAAgB,EAAE,MAAM,wBAAwB,CAAA;AAC9D,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAA;AACxC,OAAO,EAAE,WAAW,EAAE,aAAa,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAA;AAC3E,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAA;AACzC,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAA;AAExC,qBAAa,YAAY;IAChB,GAAG,EAAE,UAAU,CAAA;IACf,GAAG,EAAE,OAAO,CAAC,WAAW,CAAA;IACxB,MAAM,CAAC,EAAE,IAAI,CAAC,MAAM,CAAA;IAC3B,OAAO,CAAC,UAAU,CAAC,CAAgB;IACnC,OAAO,CAAC,eAAe,CAAC,CAAgB;IAExC,YAAY,IAAI,EAAE;QAAE,GAAG,EAAE,UAAU,CAAC;QAAC,GAAG,EAAE,OAAO,CAAC,WAAW,CAAA;KAAE,EAG9D;IAED,OAAa,MAAM,CACjB,GAAG,EAAE,WAAW,EAChB,OAAO,EAAE,YAAY,EACrB,SAAS,CAAC,EAAE,OAAO,CAAC,iBAAiB,CAAC,GACrC,OAAO,CAAC,YAAY,CAAC,CA0BvB;IAEK,kBAAkB,kBA4BvB;IAEK,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,CA8BlC;IAEK,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC,CAO7B;CACF;eAEc,YAAY"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,OAAO,IAAI,MAAM,WAAW,CAAA;AAI5B,OAAO,OAAO,MAAM,SAAS,CAAA;AAK7B,OAAO,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAA;AAC7D,OAAO,EAAE,UAAU,EAAE,iBAAiB,EAAE,MAAM,cAAc,CAAA;AAM5D,cAAc,mBAAmB,CAAA;AACjC,OAAO,EAAE,KAAK,gBAAgB,EAAE,MAAM,wBAAwB,CAAA;AAC9D,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAA;AACxC,OAAO,EAAE,WAAW,EAAE,aAAa,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAA;AAC3E,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAA;AACzC,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAA;AAExC,qBAAa,YAAY;IAChB,GAAG,EAAE,UAAU,CAAA;IACf,GAAG,EAAE,OAAO,CAAC,WAAW,CAAA;IACxB,MAAM,CAAC,EAAE,IAAI,CAAC,MAAM,CAAA;IAC3B,OAAO,CAAC,UAAU,CAAC,CAA+B;IAClD,OAAO,CAAC,eAAe,CAAC,CAAgB;IAExC,YAAY,IAAI,EAAE;QAAE,GAAG,EAAE,UAAU,CAAC;QAAC,GAAG,EAAE,OAAO,CAAC,WAAW,CAAA;KAAE,EAG9D;IAED,OAAa,MAAM,CACjB,GAAG,EAAE,WAAW,EAChB,OAAO,EAAE,YAAY,EACrB,SAAS,CAAC,EAAE,OAAO,CAAC,iBAAiB,CAAC,GACrC,OAAO,CAAC,YAAY,CAAC,CA0BvB;IAEK,kBAAkB,kBA4BvB;IAEK,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,CAgClC;IAEK,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC,CAkB7B;CACF;eAEc,YAAY"}
package/dist/index.js CHANGED
@@ -2,10 +2,8 @@ import events from 'node:events';
2
2
  import compression from 'compression';
3
3
  import cors from 'cors';
4
4
  import express from 'express';
5
- // eslint-disable-next-line import/default, import/no-named-as-default-member
5
+ // eslint-disable-next-line import/default
6
6
  import httpTerminator from 'http-terminator';
7
- // eslint-disable-next-line import/no-named-as-default-member
8
- const { createHttpTerminator } = httpTerminator;
9
7
  import { DAY, SECOND } from '@atproto/common';
10
8
  import API, { health, wellKnown } from './api/index.js';
11
9
  import { AppContext } from './context.js';
@@ -73,32 +71,44 @@ export class OzoneService {
73
71
  // Any moderator that are configured via env var may not exist in the database
74
72
  // so we need to sync them from env var to the database
75
73
  await this.seedInitialMembers();
76
- const { db, backgroundQueue } = this.ctx;
77
74
  this.dbStatsInterval = setInterval(() => {
78
75
  dbLogger.info({
79
- idleCount: db.pool.idleCount,
80
- totalCount: db.pool.totalCount,
81
- waitingCount: db.pool.waitingCount,
76
+ idleCount: this.ctx.db.pool.idleCount,
77
+ totalCount: this.ctx.db.pool.totalCount,
78
+ waitingCount: this.ctx.db.pool.waitingCount,
82
79
  }, 'db pool stats');
83
- dbLogger.info(backgroundQueue.getStats(), 'background queue stats');
80
+ dbLogger.info(this.ctx.backgroundQueue.getStats(), 'background queue stats');
84
81
  }, 10000);
85
82
  await this.ctx.sequencer.start();
86
83
  const server = this.app.listen(this.ctx.cfg.service.port);
87
84
  this.server = server;
88
85
  server.keepAliveTimeout = 90000;
89
- this.terminator = createHttpTerminator({ server });
86
+ this.terminator = httpTerminator.createHttpTerminator({ server });
90
87
  await events.once(server, 'listening');
91
88
  const { port } = server.address();
92
89
  this.ctx.assignPort(port);
93
90
  return server;
94
91
  }
95
92
  async destroy() {
96
- await this.terminator?.terminate();
97
- await this.ctx.backgroundQueue.destroy();
98
- await this.ctx.sequencer.destroy();
99
- await this.ctx.db.close();
100
93
  clearInterval(this.dbStatsInterval);
101
94
  this.dbStatsInterval = undefined;
95
+ // @TODO Use a disposable stack when Node24 becomes the min supported version
96
+ try {
97
+ await this.terminator?.terminate();
98
+ }
99
+ finally {
100
+ try {
101
+ await this.ctx.backgroundQueue.destroy();
102
+ }
103
+ finally {
104
+ try {
105
+ await this.ctx.sequencer.destroy();
106
+ }
107
+ finally {
108
+ await this.ctx.db.close();
109
+ }
110
+ }
111
+ }
102
112
  }
103
113
  }
104
114
  export default OzoneService;
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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","sourcesContent":["import events from 'node:events'\nimport http from 'node:http'\nimport { AddressInfo } from 'node:net'\nimport compression from 'compression'\nimport cors from 'cors'\nimport express from 'express'\n// eslint-disable-next-line import/default, import/no-named-as-default-member\nimport httpTerminator from 'http-terminator'\n// eslint-disable-next-line import/no-named-as-default-member\nconst { createHttpTerminator } = httpTerminator\ntype HttpTerminator = ReturnType<typeof createHttpTerminator>\nimport { DAY, SECOND } from '@atproto/common'\nimport API, { health, wellKnown } from './api/index.js'\nimport { OzoneConfig, OzoneSecrets } from './config/index.js'\nimport { AppContext, AppContextOptions } from './context.js'\nimport { Member } from './db/schema/member.js'\nimport * as error from './error.js'\nimport { createServer } from './lexicon/index.js'\nimport { dbLogger, loggerMiddleware } from './logger.js'\n\nexport * from './config/index.js'\nexport { type ImageInvalidator } from './image-invalidator.js'\nexport { Database } from './db/index.js'\nexport { EventPusher, EventReverser, OzoneDaemon } from './daemon/index.js'\nexport { AppContext } from './context.js'\nexport { httpLogger } from './logger.js'\n\nexport class OzoneService {\n public ctx: AppContext\n public app: express.Application\n public server?: http.Server\n private terminator?: HttpTerminator\n private dbStatsInterval?: NodeJS.Timeout\n\n constructor(opts: { ctx: AppContext; app: express.Application }) {\n this.ctx = opts.ctx\n this.app = opts.app\n }\n\n static async create(\n cfg: OzoneConfig,\n secrets: OzoneSecrets,\n overrides?: Partial<AppContextOptions>,\n ): Promise<OzoneService> {\n const app = express()\n app.set('trust proxy', true)\n app.use(cors({ maxAge: DAY / SECOND }))\n app.use(loggerMiddleware)\n app.use(compression())\n\n const ctx = await AppContext.fromConfig(cfg, secrets, overrides)\n\n let server = createServer({\n validateResponse: false,\n payload: {\n jsonLimit: 100 * 1024, // 100kb\n textLimit: 100 * 1024, // 100kb\n blobLimit: 5 * 1024 * 1024, // 5mb\n },\n })\n\n server = API(server, ctx)\n\n app.use(health.createRouter(ctx))\n app.use(wellKnown.createRouter(ctx))\n app.use(server.xrpc.router)\n app.use(error.handler)\n\n return new OzoneService({ ctx, app })\n }\n\n async seedInitialMembers() {\n const members: Array<{ role: Member['role']; did: string }> = []\n this.ctx.cfg.access.admins.forEach((did) =>\n members.push({\n role: 'tools.ozone.team.defs#roleAdmin',\n did,\n }),\n )\n this.ctx.cfg.access.triage.forEach((did) =>\n members.push({\n role: 'tools.ozone.team.defs#roleTriage',\n did,\n }),\n )\n this.ctx.cfg.access.moderators.forEach((did) =>\n members.push({\n role: 'tools.ozone.team.defs#roleModerator',\n did,\n }),\n )\n\n for (const member of members) {\n const service = this.ctx.teamService(this.ctx.db)\n await service.upsert({\n ...member,\n lastUpdatedBy: this.ctx.cfg.service.did,\n })\n }\n }\n\n async start(): Promise<http.Server> {\n if (this.dbStatsInterval) {\n throw new Error(`${this.constructor.name} already started`)\n }\n\n // Any moderator that are configured via env var may not exist in the database\n // so we need to sync them from env var to the database\n await this.seedInitialMembers()\n\n const { db, backgroundQueue } = this.ctx\n this.dbStatsInterval = setInterval(() => {\n dbLogger.info(\n {\n idleCount: db.pool.idleCount,\n totalCount: db.pool.totalCount,\n waitingCount: db.pool.waitingCount,\n },\n 'db pool stats',\n )\n dbLogger.info(backgroundQueue.getStats(), 'background queue stats')\n }, 10000)\n await this.ctx.sequencer.start()\n const server = this.app.listen(this.ctx.cfg.service.port)\n this.server = server\n server.keepAliveTimeout = 90000\n this.terminator = createHttpTerminator({ server })\n await events.once(server, 'listening')\n const { port } = server.address() as AddressInfo\n this.ctx.assignPort(port)\n return server\n }\n\n async destroy(): Promise<void> {\n await this.terminator?.terminate()\n await this.ctx.backgroundQueue.destroy()\n await this.ctx.sequencer.destroy()\n await this.ctx.db.close()\n clearInterval(this.dbStatsInterval)\n this.dbStatsInterval = undefined\n }\n}\n\nexport default OzoneService\n"]}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,MAAM,MAAM,aAAa,CAAA;AAGhC,OAAO,WAAW,MAAM,aAAa,CAAA;AACrC,OAAO,IAAI,MAAM,MAAM,CAAA;AACvB,OAAO,OAAO,MAAM,SAAS,CAAA;AAC7B,0CAA0C;AAC1C,OAAO,cAAc,MAAM,iBAAiB,CAAA;AAC5C,OAAO,EAAE,GAAG,EAAE,MAAM,EAAE,MAAM,iBAAiB,CAAA;AAC7C,OAAO,GAAG,EAAE,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAA;AAEvD,OAAO,EAAE,UAAU,EAAqB,MAAM,cAAc,CAAA;AAE5D,OAAO,KAAK,KAAK,MAAM,YAAY,CAAA;AACnC,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAA;AACjD,OAAO,EAAE,QAAQ,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAA;AAExD,cAAc,mBAAmB,CAAA;AAEjC,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAA;AACxC,OAAO,EAAE,WAAW,EAAE,aAAa,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAA;AAC3E,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAA;AACzC,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAA;AAExC,MAAM,OAAO,YAAY;IAOvB,YAAY,IAAmD;QAC7D,IAAI,CAAC,GAAG,GAAG,IAAI,CAAC,GAAG,CAAA;QACnB,IAAI,CAAC,GAAG,GAAG,IAAI,CAAC,GAAG,CAAA;IACrB,CAAC;IAED,MAAM,CAAC,KAAK,CAAC,MAAM,CACjB,GAAgB,EAChB,OAAqB,EACrB,SAAsC;QAEtC,MAAM,GAAG,GAAG,OAAO,EAAE,CAAA;QACrB,GAAG,CAAC,GAAG,CAAC,aAAa,EAAE,IAAI,CAAC,CAAA;QAC5B,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,GAAG,GAAG,MAAM,EAAE,CAAC,CAAC,CAAA;QACvC,GAAG,CAAC,GAAG,CAAC,gBAAgB,CAAC,CAAA;QACzB,GAAG,CAAC,GAAG,CAAC,WAAW,EAAE,CAAC,CAAA;QAEtB,MAAM,GAAG,GAAG,MAAM,UAAU,CAAC,UAAU,CAAC,GAAG,EAAE,OAAO,EAAE,SAAS,CAAC,CAAA;QAEhE,IAAI,MAAM,GAAG,YAAY,CAAC;YACxB,gBAAgB,EAAE,KAAK;YACvB,OAAO,EAAE;gBACP,SAAS,EAAE,GAAG,GAAG,IAAI,EAAE,QAAQ;gBAC/B,SAAS,EAAE,GAAG,GAAG,IAAI,EAAE,QAAQ;gBAC/B,SAAS,EAAE,CAAC,GAAG,IAAI,GAAG,IAAI,EAAE,MAAM;aACnC;SACF,CAAC,CAAA;QAEF,MAAM,GAAG,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC,CAAA;QAEzB,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC,CAAA;QACjC,GAAG,CAAC,GAAG,CAAC,SAAS,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC,CAAA;QACpC,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAA;QAC3B,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,CAAA;QAEtB,OAAO,IAAI,YAAY,CAAC,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC,CAAA;IACvC,CAAC;IAED,KAAK,CAAC,kBAAkB;QACtB,MAAM,OAAO,GAAiD,EAAE,CAAA;QAChE,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,GAAG,EAAE,EAAE,CACzC,OAAO,CAAC,IAAI,CAAC;YACX,IAAI,EAAE,iCAAiC;YACvC,GAAG;SACJ,CAAC,CACH,CAAA;QACD,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,GAAG,EAAE,EAAE,CACzC,OAAO,CAAC,IAAI,CAAC;YACX,IAAI,EAAE,kCAAkC;YACxC,GAAG;SACJ,CAAC,CACH,CAAA;QACD,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,GAAG,EAAE,EAAE,CAC7C,OAAO,CAAC,IAAI,CAAC;YACX,IAAI,EAAE,qCAAqC;YAC3C,GAAG;SACJ,CAAC,CACH,CAAA;QAED,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE,CAAC;YAC7B,MAAM,OAAO,GAAG,IAAI,CAAC,GAAG,CAAC,WAAW,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,CAAA;YACjD,MAAM,OAAO,CAAC,MAAM,CAAC;gBACnB,GAAG,MAAM;gBACT,aAAa,EAAE,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,OAAO,CAAC,GAAG;aACxC,CAAC,CAAA;QACJ,CAAC;IACH,CAAC;IAED,KAAK,CAAC,KAAK;QACT,IAAI,IAAI,CAAC,eAAe,EAAE,CAAC;YACzB,MAAM,IAAI,KAAK,CAAC,GAAG,IAAI,CAAC,WAAW,CAAC,IAAI,kBAAkB,CAAC,CAAA;QAC7D,CAAC;QAED,8EAA8E;QAC9E,uDAAuD;QACvD,MAAM,IAAI,CAAC,kBAAkB,EAAE,CAAA;QAE/B,IAAI,CAAC,eAAe,GAAG,WAAW,CAAC,GAAG,EAAE;YACtC,QAAQ,CAAC,IAAI,CACX;gBACE,SAAS,EAAE,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,SAAS;gBACrC,UAAU,EAAE,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,UAAU;gBACvC,YAAY,EAAE,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,YAAY;aAC5C,EACD,eAAe,CAChB,CAAA;YACD,QAAQ,CAAC,IAAI,CACX,IAAI,CAAC,GAAG,CAAC,eAAe,CAAC,QAAQ,EAAE,EACnC,wBAAwB,CACzB,CAAA;QACH,CAAC,EAAE,KAAK,CAAC,CAAA;QACT,MAAM,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,KAAK,EAAE,CAAA;QAChC,MAAM,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,OAAO,CAAC,IAAI,CAAC,CAAA;QACzD,IAAI,CAAC,MAAM,GAAG,MAAM,CAAA;QACpB,MAAM,CAAC,gBAAgB,GAAG,KAAK,CAAA;QAC/B,IAAI,CAAC,UAAU,GAAG,cAAc,CAAC,oBAAoB,CAAC,EAAE,MAAM,EAAE,CAAC,CAAA;QACjE,MAAM,MAAM,CAAC,IAAI,CAAC,MAAM,EAAE,WAAW,CAAC,CAAA;QACtC,MAAM,EAAE,IAAI,EAAE,GAAG,MAAM,CAAC,OAAO,EAAiB,CAAA;QAChD,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,IAAI,CAAC,CAAA;QACzB,OAAO,MAAM,CAAA;IACf,CAAC;IAED,KAAK,CAAC,OAAO;QACX,aAAa,CAAC,IAAI,CAAC,eAAe,CAAC,CAAA;QACnC,IAAI,CAAC,eAAe,GAAG,SAAS,CAAA;QAEhC,6EAA6E;QAC7E,IAAI,CAAC;YACH,MAAM,IAAI,CAAC,UAAU,EAAE,SAAS,EAAE,CAAA;QACpC,CAAC;gBAAS,CAAC;YACT,IAAI,CAAC;gBACH,MAAM,IAAI,CAAC,GAAG,CAAC,eAAe,CAAC,OAAO,EAAE,CAAA;YAC1C,CAAC;oBAAS,CAAC;gBACT,IAAI,CAAC;oBACH,MAAM,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,OAAO,EAAE,CAAA;gBACpC,CAAC;wBAAS,CAAC;oBACT,MAAM,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,KAAK,EAAE,CAAA;gBAC3B,CAAC;YACH,CAAC;QACH,CAAC;IACH,CAAC;CACF;AAED,eAAe,YAAY,CAAA","sourcesContent":["import events from 'node:events'\nimport http from 'node:http'\nimport { AddressInfo } from 'node:net'\nimport compression from 'compression'\nimport cors from 'cors'\nimport express from 'express'\n// eslint-disable-next-line import/default\nimport httpTerminator from 'http-terminator'\nimport { DAY, SECOND } from '@atproto/common'\nimport API, { health, wellKnown } from './api/index.js'\nimport { OzoneConfig, OzoneSecrets } from './config/index.js'\nimport { AppContext, AppContextOptions } from './context.js'\nimport { Member } from './db/schema/member.js'\nimport * as error from './error.js'\nimport { createServer } from './lexicon/index.js'\nimport { dbLogger, loggerMiddleware } from './logger.js'\n\nexport * from './config/index.js'\nexport { type ImageInvalidator } from './image-invalidator.js'\nexport { Database } from './db/index.js'\nexport { EventPusher, EventReverser, OzoneDaemon } from './daemon/index.js'\nexport { AppContext } from './context.js'\nexport { httpLogger } from './logger.js'\n\nexport class OzoneService {\n public ctx: AppContext\n public app: express.Application\n public server?: http.Server\n private terminator?: httpTerminator.HttpTerminator\n private dbStatsInterval?: NodeJS.Timeout\n\n constructor(opts: { ctx: AppContext; app: express.Application }) {\n this.ctx = opts.ctx\n this.app = opts.app\n }\n\n static async create(\n cfg: OzoneConfig,\n secrets: OzoneSecrets,\n overrides?: Partial<AppContextOptions>,\n ): Promise<OzoneService> {\n const app = express()\n app.set('trust proxy', true)\n app.use(cors({ maxAge: DAY / SECOND }))\n app.use(loggerMiddleware)\n app.use(compression())\n\n const ctx = await AppContext.fromConfig(cfg, secrets, overrides)\n\n let server = createServer({\n validateResponse: false,\n payload: {\n jsonLimit: 100 * 1024, // 100kb\n textLimit: 100 * 1024, // 100kb\n blobLimit: 5 * 1024 * 1024, // 5mb\n },\n })\n\n server = API(server, ctx)\n\n app.use(health.createRouter(ctx))\n app.use(wellKnown.createRouter(ctx))\n app.use(server.xrpc.router)\n app.use(error.handler)\n\n return new OzoneService({ ctx, app })\n }\n\n async seedInitialMembers() {\n const members: Array<{ role: Member['role']; did: string }> = []\n this.ctx.cfg.access.admins.forEach((did) =>\n members.push({\n role: 'tools.ozone.team.defs#roleAdmin',\n did,\n }),\n )\n this.ctx.cfg.access.triage.forEach((did) =>\n members.push({\n role: 'tools.ozone.team.defs#roleTriage',\n did,\n }),\n )\n this.ctx.cfg.access.moderators.forEach((did) =>\n members.push({\n role: 'tools.ozone.team.defs#roleModerator',\n did,\n }),\n )\n\n for (const member of members) {\n const service = this.ctx.teamService(this.ctx.db)\n await service.upsert({\n ...member,\n lastUpdatedBy: this.ctx.cfg.service.did,\n })\n }\n }\n\n async start(): Promise<http.Server> {\n if (this.dbStatsInterval) {\n throw new Error(`${this.constructor.name} already started`)\n }\n\n // Any moderator that are configured via env var may not exist in the database\n // so we need to sync them from env var to the database\n await this.seedInitialMembers()\n\n this.dbStatsInterval = setInterval(() => {\n dbLogger.info(\n {\n idleCount: this.ctx.db.pool.idleCount,\n totalCount: this.ctx.db.pool.totalCount,\n waitingCount: this.ctx.db.pool.waitingCount,\n },\n 'db pool stats',\n )\n dbLogger.info(\n this.ctx.backgroundQueue.getStats(),\n 'background queue stats',\n )\n }, 10000)\n await this.ctx.sequencer.start()\n const server = this.app.listen(this.ctx.cfg.service.port)\n this.server = server\n server.keepAliveTimeout = 90000\n this.terminator = httpTerminator.createHttpTerminator({ server })\n await events.once(server, 'listening')\n const { port } = server.address() as AddressInfo\n this.ctx.assignPort(port)\n return server\n }\n\n async destroy(): Promise<void> {\n clearInterval(this.dbStatsInterval)\n this.dbStatsInterval = undefined\n\n // @TODO Use a disposable stack when Node24 becomes the min supported version\n try {\n await this.terminator?.terminate()\n } finally {\n try {\n await this.ctx.backgroundQueue.destroy()\n } finally {\n try {\n await this.ctx.sequencer.destroy()\n } finally {\n await this.ctx.db.close()\n }\n }\n }\n }\n}\n\nexport default OzoneService\n"]}
@@ -54,7 +54,7 @@ export declare class Jetstream {
54
54
  /**
55
55
  * Closes the WebSocket connection.
56
56
  */
57
- close(): void;
57
+ close(): Promise<void>;
58
58
  }
59
59
  export {};
60
60
  //# sourceMappingURL=service.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"service.d.ts","sourceRoot":"","sources":["../../src/jetstream/service.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,MAAM,oBAAoB,CAAA;AAEvD,KAAK,eAAe,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;AAC9C,KAAK,gBAAgB,CAAC,CAAC,SAAS,eAAe,IAAI,CACjD,CAAC,EAAE,iBAAiB,CAAC,CAAC,CAAC,KACpB,OAAO,CAAC,IAAI,CAAC,CAAA;AAElB,MAAM,MAAM,gBAAgB,GAAG;IAC7B,QAAQ,EAAE,MAAM,CAAA;IAChB;;;OAGG;IACH,iBAAiB,CAAC,EAAE,MAAM,EAAE,CAAA;IAC5B;;;OAGG;IACH,UAAU,CAAC,EAAE,MAAM,EAAE,CAAA;IAErB;;OAEG;IACH,MAAM,CAAC,EAAE,MAAM,CAAA;CAChB,CAAA;AACD,MAAM,MAAM,SAAS,GAAG;IACtB,GAAG,EAAE,MAAM,CAAA;IACX,OAAO,EAAE,MAAM,CAAA;IAEf,IAAI,EAAE,QAAQ,CAAA;CACf,CAAA;AACD,MAAM,MAAM,UAAU,GAAG;IACvB,UAAU,EAAE,MAAM,CAAA;IAClB,IAAI,EAAE,MAAM,CAAA;IACZ,GAAG,EAAE,MAAM,CAAA;CACZ,CAAA;AACD,MAAM,WAAW,iBAAiB,CAAC,UAAU,SAAS,eAAe,CACnE,SAAQ,SAAS;IACjB,IAAI,EAAE,QAAQ,CAAA;IACd,MAAM,EAAE;QACN,SAAS,EAAE,QAAQ,CAAA;QACnB,MAAM,EAAE,UAAU,CAAA;KACnB,GAAG,UAAU,CAAA;CACf;AAED,MAAM,WAAW,iBAAkB,SAAQ,SAAS;IAClD,IAAI,EAAE,QAAQ,CAAA;IACd,MAAM,EAAE;QACN,SAAS,EAAE,QAAQ,CAAA;KACpB,GAAG,UAAU,CAAA;CACf;AAED,qBAAa,SAAS;IACb,EAAE,CAAC,EAAE,kBAAkB,CAAA;IACvB,GAAG,EAAE,GAAG,CAAA;IACf,0BAA0B;IACnB,MAAM,CAAC,EAAE,MAAM,CAAA;IAEtB,YAAY,IAAI,EAAE,gBAAgB,EASjC;IAEK,KAAK,CAAC,OAAO,EAAE;QACnB,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,gBAAgB,CAAC,GAAG,CAAC,CAAC,CAAA;QAChD,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC,EAAE,iBAAiB,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC,CAAA;KACnE,iBAwBA;IAED;;OAEG;IACH,KAAK,SAEJ;CACF"}
1
+ {"version":3,"file":"service.d.ts","sourceRoot":"","sources":["../../src/jetstream/service.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,MAAM,oBAAoB,CAAA;AAEvD,KAAK,eAAe,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;AAC9C,KAAK,gBAAgB,CAAC,CAAC,SAAS,eAAe,IAAI,CACjD,CAAC,EAAE,iBAAiB,CAAC,CAAC,CAAC,KACpB,OAAO,CAAC,IAAI,CAAC,CAAA;AAElB,MAAM,MAAM,gBAAgB,GAAG;IAC7B,QAAQ,EAAE,MAAM,CAAA;IAChB;;;OAGG;IACH,iBAAiB,CAAC,EAAE,MAAM,EAAE,CAAA;IAC5B;;;OAGG;IACH,UAAU,CAAC,EAAE,MAAM,EAAE,CAAA;IAErB;;OAEG;IACH,MAAM,CAAC,EAAE,MAAM,CAAA;CAChB,CAAA;AACD,MAAM,MAAM,SAAS,GAAG;IACtB,GAAG,EAAE,MAAM,CAAA;IACX,OAAO,EAAE,MAAM,CAAA;IAEf,IAAI,EAAE,QAAQ,CAAA;CACf,CAAA;AACD,MAAM,MAAM,UAAU,GAAG;IACvB,UAAU,EAAE,MAAM,CAAA;IAClB,IAAI,EAAE,MAAM,CAAA;IACZ,GAAG,EAAE,MAAM,CAAA;CACZ,CAAA;AACD,MAAM,WAAW,iBAAiB,CAAC,UAAU,SAAS,eAAe,CACnE,SAAQ,SAAS;IACjB,IAAI,EAAE,QAAQ,CAAA;IACd,MAAM,EAAE;QACN,SAAS,EAAE,QAAQ,CAAA;QACnB,MAAM,EAAE,UAAU,CAAA;KACnB,GAAG,UAAU,CAAA;CACf;AAED,MAAM,WAAW,iBAAkB,SAAQ,SAAS;IAClD,IAAI,EAAE,QAAQ,CAAA;IACd,MAAM,EAAE;QACN,SAAS,EAAE,QAAQ,CAAA;KACpB,GAAG,UAAU,CAAA;CACf;AAED,qBAAa,SAAS;IACb,EAAE,CAAC,EAAE,kBAAkB,CAAA;IACvB,GAAG,EAAE,GAAG,CAAA;IACf,0BAA0B;IACnB,MAAM,CAAC,EAAE,MAAM,CAAA;IAEtB,YAAY,IAAI,EAAE,gBAAgB,EASjC;IAEK,KAAK,CAAC,OAAO,EAAE;QACnB,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,gBAAgB,CAAC,GAAG,CAAC,CAAC,CAAA;QAChD,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC,EAAE,iBAAiB,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC,CAAA;KACnE,iBAwBA;IAED;;OAEG;IACG,KAAK,kBAIV;CACF"}
@@ -36,7 +36,9 @@ export class Jetstream {
36
36
  /**
37
37
  * Closes the WebSocket connection.
38
38
  */
39
- close() {
39
+ async close() {
40
+ // @TODO This should return a promise that fulfills when the connection is
41
+ // fully closed.
40
42
  this.ws?.ws?.close();
41
43
  }
42
44
  }
@@ -1 +1 @@
1
- {"version":3,"file":"service.js","sourceRoot":"","sources":["../../src/jetstream/service.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,MAAM,oBAAoB,CAAA;AAoDvD,MAAM,OAAO,SAAS;IAMpB,YAAY,IAAsB;QAChC,IAAI,CAAC,GAAG,GAAG,IAAI,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAA;QACjC,IAAI,CAAC,iBAAiB,EAAE,OAAO,CAAC,CAAC,UAAU,EAAE,EAAE;YAC7C,IAAI,CAAC,GAAG,CAAC,YAAY,CAAC,MAAM,CAAC,mBAAmB,EAAE,UAAU,CAAC,CAAA;QAC/D,CAAC,CAAC,CAAA;QACF,IAAI,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC,GAAG,EAAE,EAAE;YAC/B,IAAI,CAAC,GAAG,CAAC,YAAY,CAAC,MAAM,CAAC,YAAY,EAAE,GAAG,CAAC,CAAA;QACjD,CAAC,CAAC,CAAA;QACF,IAAI,IAAI,CAAC,MAAM;YAAE,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM,CAAA;IAC5C,CAAC;IAED,KAAK,CAAC,KAAK,CAAC,OAGX;QACC,IAAI,CAAC,EAAE,GAAG,IAAI,kBAAkB,CAAC;YAC/B,MAAM,EAAE,KAAK,IAAI,EAAE;gBACjB,IAAI,IAAI,CAAC,MAAM;oBACb,IAAI,CAAC,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,QAAQ,EAAE,IAAI,CAAC,MAAM,CAAC,QAAQ,EAAE,CAAC,CAAA;gBAC7D,OAAO,IAAI,CAAC,GAAG,CAAC,QAAQ,EAAE,CAAA;YAC5B,CAAC;SACF,CAAC,CAAA;QAEF,IAAI,KAAK,EAAE,MAAM,OAAO,IAAI,IAAI,CAAC,EAAE,EAAE,CAAC;YACpC,MAAM,aAAa,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,QAAQ,EAAE,CAAC,CAAA;YACpD,IAAI,aAAa,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;gBACpC,2GAA2G;gBAC3G,MAAM,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,EAAE,GAAG,aAAa,CAAC,MAAM,IAAI,EAAE,CAAA;gBAEpE,IAAI,SAAS,KAAK,QAAQ,EAAE,CAAC;oBAC3B,OAAO,CAAC,QAAQ,EAAE,CAAC,UAAU,CAAC,EAAE,CAC9B,aAAiD,CAClD,CAAA;gBACH,CAAC;qBAAM,IAAI,SAAS,KAAK,QAAQ,EAAE,CAAC;oBAClC,OAAO,CAAC,QAAQ,EAAE,CAAC,UAAU,CAAC,EAAE,CAAC,aAAkC,CAAC,CAAA;gBACtE,CAAC;YACH,CAAC;QACH,CAAC;IACH,CAAC;IAED;;OAEG;IACH,KAAK;QACH,IAAI,CAAC,EAAE,EAAE,EAAE,EAAE,KAAK,EAAE,CAAA;IACtB,CAAC;CACF","sourcesContent":["import { WebSocketKeepAlive } from '@atproto/ws-client'\n\ntype JetstreamRecord = Record<string, unknown>\ntype OnCreateCallback<T extends JetstreamRecord> = (\n e: CommitCreateEvent<T>,\n) => Promise<void>\n\nexport type JetstreamOptions = {\n endpoint: string\n /**\n * The record collections that you want to receive updates for.\n * Leave this empty to receive updates for all record collections.\n */\n wantedCollections?: string[]\n /**\n * The DIDs that you want to receive updates for.\n * Leave this empty to receive updates for all DIDs.\n */\n wantedDids?: string[]\n\n /**\n * The Unix timestamp in microseconds that you want to receive updates from.\n */\n cursor?: number\n}\nexport type EventBase = {\n did: string\n time_us: number\n // @TODO: Limited to just commit events for now\n kind: 'commit'\n}\nexport type CommitBase = {\n collection: string\n rkey: string\n cid: string\n}\nexport interface CommitCreateEvent<RecordType extends JetstreamRecord>\n extends EventBase {\n kind: 'commit'\n commit: {\n operation: 'create'\n record: RecordType\n } & CommitBase\n}\n\nexport interface CommitDeleteEvent extends EventBase {\n kind: 'commit'\n commit: {\n operation: 'delete'\n } & CommitBase\n}\n\nexport class Jetstream {\n public ws?: WebSocketKeepAlive\n public url: URL\n /** The current cursor. */\n public cursor?: number\n\n constructor(opts: JetstreamOptions) {\n this.url = new URL(opts.endpoint)\n opts.wantedCollections?.forEach((collection) => {\n this.url.searchParams.append('wantedCollections', collection)\n })\n opts.wantedDids?.forEach((did) => {\n this.url.searchParams.append('wantedDids', did)\n })\n if (opts.cursor) this.cursor = opts.cursor\n }\n\n async start(options: {\n onCreate?: Record<string, OnCreateCallback<any>>\n onDelete?: Record<string, (e: CommitDeleteEvent) => Promise<void>>\n }) {\n this.ws = new WebSocketKeepAlive({\n getUrl: async () => {\n if (this.cursor)\n this.url.searchParams.set('cursor', this.cursor.toString())\n return this.url.toString()\n },\n })\n\n for await (const message of this.ws) {\n const parsedMessage = JSON.parse(message.toString())\n if (parsedMessage.kind === 'commit') {\n // eslint-disable-next-line @typescript-eslint/no-unused-vars -- `record` is used via `typeof record` below\n const { collection, operation, record } = parsedMessage.commit || {}\n\n if (operation === 'create') {\n options.onCreate?.[collection]?.(\n parsedMessage as CommitCreateEvent<typeof record>,\n )\n } else if (operation === 'delete') {\n options.onDelete?.[collection]?.(parsedMessage as CommitDeleteEvent)\n }\n }\n }\n }\n\n /**\n * Closes the WebSocket connection.\n */\n close() {\n this.ws?.ws?.close()\n }\n}\n"]}
1
+ {"version":3,"file":"service.js","sourceRoot":"","sources":["../../src/jetstream/service.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,MAAM,oBAAoB,CAAA;AAoDvD,MAAM,OAAO,SAAS;IAMpB,YAAY,IAAsB;QAChC,IAAI,CAAC,GAAG,GAAG,IAAI,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAA;QACjC,IAAI,CAAC,iBAAiB,EAAE,OAAO,CAAC,CAAC,UAAU,EAAE,EAAE;YAC7C,IAAI,CAAC,GAAG,CAAC,YAAY,CAAC,MAAM,CAAC,mBAAmB,EAAE,UAAU,CAAC,CAAA;QAC/D,CAAC,CAAC,CAAA;QACF,IAAI,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC,GAAG,EAAE,EAAE;YAC/B,IAAI,CAAC,GAAG,CAAC,YAAY,CAAC,MAAM,CAAC,YAAY,EAAE,GAAG,CAAC,CAAA;QACjD,CAAC,CAAC,CAAA;QACF,IAAI,IAAI,CAAC,MAAM;YAAE,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM,CAAA;IAC5C,CAAC;IAED,KAAK,CAAC,KAAK,CAAC,OAGX;QACC,IAAI,CAAC,EAAE,GAAG,IAAI,kBAAkB,CAAC;YAC/B,MAAM,EAAE,KAAK,IAAI,EAAE;gBACjB,IAAI,IAAI,CAAC,MAAM;oBACb,IAAI,CAAC,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,QAAQ,EAAE,IAAI,CAAC,MAAM,CAAC,QAAQ,EAAE,CAAC,CAAA;gBAC7D,OAAO,IAAI,CAAC,GAAG,CAAC,QAAQ,EAAE,CAAA;YAC5B,CAAC;SACF,CAAC,CAAA;QAEF,IAAI,KAAK,EAAE,MAAM,OAAO,IAAI,IAAI,CAAC,EAAE,EAAE,CAAC;YACpC,MAAM,aAAa,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,QAAQ,EAAE,CAAC,CAAA;YACpD,IAAI,aAAa,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;gBACpC,2GAA2G;gBAC3G,MAAM,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,EAAE,GAAG,aAAa,CAAC,MAAM,IAAI,EAAE,CAAA;gBAEpE,IAAI,SAAS,KAAK,QAAQ,EAAE,CAAC;oBAC3B,OAAO,CAAC,QAAQ,EAAE,CAAC,UAAU,CAAC,EAAE,CAC9B,aAAiD,CAClD,CAAA;gBACH,CAAC;qBAAM,IAAI,SAAS,KAAK,QAAQ,EAAE,CAAC;oBAClC,OAAO,CAAC,QAAQ,EAAE,CAAC,UAAU,CAAC,EAAE,CAAC,aAAkC,CAAC,CAAA;gBACtE,CAAC;YACH,CAAC;QACH,CAAC;IACH,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,KAAK;QACT,0EAA0E;QAC1E,gBAAgB;QAChB,IAAI,CAAC,EAAE,EAAE,EAAE,EAAE,KAAK,EAAE,CAAA;IACtB,CAAC;CACF","sourcesContent":["import { WebSocketKeepAlive } from '@atproto/ws-client'\n\ntype JetstreamRecord = Record<string, unknown>\ntype OnCreateCallback<T extends JetstreamRecord> = (\n e: CommitCreateEvent<T>,\n) => Promise<void>\n\nexport type JetstreamOptions = {\n endpoint: string\n /**\n * The record collections that you want to receive updates for.\n * Leave this empty to receive updates for all record collections.\n */\n wantedCollections?: string[]\n /**\n * The DIDs that you want to receive updates for.\n * Leave this empty to receive updates for all DIDs.\n */\n wantedDids?: string[]\n\n /**\n * The Unix timestamp in microseconds that you want to receive updates from.\n */\n cursor?: number\n}\nexport type EventBase = {\n did: string\n time_us: number\n // @TODO: Limited to just commit events for now\n kind: 'commit'\n}\nexport type CommitBase = {\n collection: string\n rkey: string\n cid: string\n}\nexport interface CommitCreateEvent<RecordType extends JetstreamRecord>\n extends EventBase {\n kind: 'commit'\n commit: {\n operation: 'create'\n record: RecordType\n } & CommitBase\n}\n\nexport interface CommitDeleteEvent extends EventBase {\n kind: 'commit'\n commit: {\n operation: 'delete'\n } & CommitBase\n}\n\nexport class Jetstream {\n public ws?: WebSocketKeepAlive\n public url: URL\n /** The current cursor. */\n public cursor?: number\n\n constructor(opts: JetstreamOptions) {\n this.url = new URL(opts.endpoint)\n opts.wantedCollections?.forEach((collection) => {\n this.url.searchParams.append('wantedCollections', collection)\n })\n opts.wantedDids?.forEach((did) => {\n this.url.searchParams.append('wantedDids', did)\n })\n if (opts.cursor) this.cursor = opts.cursor\n }\n\n async start(options: {\n onCreate?: Record<string, OnCreateCallback<any>>\n onDelete?: Record<string, (e: CommitDeleteEvent) => Promise<void>>\n }) {\n this.ws = new WebSocketKeepAlive({\n getUrl: async () => {\n if (this.cursor)\n this.url.searchParams.set('cursor', this.cursor.toString())\n return this.url.toString()\n },\n })\n\n for await (const message of this.ws) {\n const parsedMessage = JSON.parse(message.toString())\n if (parsedMessage.kind === 'commit') {\n // eslint-disable-next-line @typescript-eslint/no-unused-vars -- `record` is used via `typeof record` below\n const { collection, operation, record } = parsedMessage.commit || {}\n\n if (operation === 'create') {\n options.onCreate?.[collection]?.(\n parsedMessage as CommitCreateEvent<typeof record>,\n )\n } else if (operation === 'delete') {\n options.onDelete?.[collection]?.(parsedMessage as CommitDeleteEvent)\n }\n }\n }\n }\n\n /**\n * Closes the WebSocket connection.\n */\n async close() {\n // @TODO This should return a promise that fulfills when the connection is\n // fully closed.\n this.ws?.ws?.close()\n }\n}\n"]}
@@ -161,6 +161,8 @@ import * as ChatBskyModerationGetConvos from './types/chat/bsky/moderation/getCo
161
161
  import * as ChatBskyModerationGetMessageContext from './types/chat/bsky/moderation/getMessageContext.js';
162
162
  import * as ChatBskyModerationSubscribeModEvents from './types/chat/bsky/moderation/subscribeModEvents.js';
163
163
  import * as ChatBskyModerationUpdateActorAccess from './types/chat/bsky/moderation/updateActorAccess.js';
164
+ import * as ChatBskyNotificationGetPreferences from './types/chat/bsky/notification/getPreferences.js';
165
+ import * as ChatBskyNotificationPutPreferences from './types/chat/bsky/notification/putPreferences.js';
164
166
  import * as ComAtprotoAdminDeleteAccount from './types/com/atproto/admin/deleteAccount.js';
165
167
  import * as ComAtprotoAdminDisableAccountInvites from './types/com/atproto/admin/disableAccountInvites.js';
166
168
  import * as ComAtprotoAdminDisableInviteCodes from './types/com/atproto/admin/disableInviteCodes.js';
@@ -283,6 +285,7 @@ import * as ToolsOzoneReportGetLatestReport from './types/tools/ozone/report/get
283
285
  import * as ToolsOzoneReportGetLiveStats from './types/tools/ozone/report/getLiveStats.js';
284
286
  import * as ToolsOzoneReportGetReport from './types/tools/ozone/report/getReport.js';
285
287
  import * as ToolsOzoneReportListActivities from './types/tools/ozone/report/listActivities.js';
288
+ import * as ToolsOzoneReportQueryActivities from './types/tools/ozone/report/queryActivities.js';
286
289
  import * as ToolsOzoneReportQueryReports from './types/tools/ozone/report/queryReports.js';
287
290
  import * as ToolsOzoneReportReassignQueue from './types/tools/ozone/report/reassignQueue.js';
288
291
  import * as ToolsOzoneReportRefreshStats from './types/tools/ozone/report/refreshStats.js';
@@ -608,6 +611,7 @@ export declare class ChatBskyNS {
608
611
  embed: ChatBskyEmbedNS;
609
612
  group: ChatBskyGroupNS;
610
613
  moderation: ChatBskyModerationNS;
614
+ notification: ChatBskyNotificationNS;
611
615
  constructor(server: Server);
612
616
  }
613
617
  export declare class ChatBskyActorNS {
@@ -678,6 +682,12 @@ export declare class ChatBskyModerationNS {
678
682
  subscribeModEvents<A extends Auth = void>(cfg: StreamConfigOrHandler<A, ChatBskyModerationSubscribeModEvents.QueryParams, ChatBskyModerationSubscribeModEvents.HandlerOutput>): void;
679
683
  updateActorAccess<A extends Auth = void>(cfg: MethodConfigOrHandler<A, ChatBskyModerationUpdateActorAccess.QueryParams, ChatBskyModerationUpdateActorAccess.HandlerInput, ChatBskyModerationUpdateActorAccess.HandlerOutput>): void;
680
684
  }
685
+ export declare class ChatBskyNotificationNS {
686
+ _server: Server;
687
+ constructor(server: Server);
688
+ getPreferences<A extends Auth = void>(cfg: MethodConfigOrHandler<A, ChatBskyNotificationGetPreferences.QueryParams, ChatBskyNotificationGetPreferences.HandlerInput, ChatBskyNotificationGetPreferences.HandlerOutput>): void;
689
+ putPreferences<A extends Auth = void>(cfg: MethodConfigOrHandler<A, ChatBskyNotificationPutPreferences.QueryParams, ChatBskyNotificationPutPreferences.HandlerInput, ChatBskyNotificationPutPreferences.HandlerOutput>): void;
690
+ }
681
691
  export declare class ComNS {
682
692
  _server: Server;
683
693
  atproto: ComAtprotoNS;
@@ -894,6 +904,7 @@ export declare class ToolsOzoneReportNS {
894
904
  getLiveStats<A extends Auth = void>(cfg: MethodConfigOrHandler<A, ToolsOzoneReportGetLiveStats.QueryParams, ToolsOzoneReportGetLiveStats.HandlerInput, ToolsOzoneReportGetLiveStats.HandlerOutput>): void;
895
905
  getReport<A extends Auth = void>(cfg: MethodConfigOrHandler<A, ToolsOzoneReportGetReport.QueryParams, ToolsOzoneReportGetReport.HandlerInput, ToolsOzoneReportGetReport.HandlerOutput>): void;
896
906
  listActivities<A extends Auth = void>(cfg: MethodConfigOrHandler<A, ToolsOzoneReportListActivities.QueryParams, ToolsOzoneReportListActivities.HandlerInput, ToolsOzoneReportListActivities.HandlerOutput>): void;
907
+ queryActivities<A extends Auth = void>(cfg: MethodConfigOrHandler<A, ToolsOzoneReportQueryActivities.QueryParams, ToolsOzoneReportQueryActivities.HandlerInput, ToolsOzoneReportQueryActivities.HandlerOutput>): void;
897
908
  queryReports<A extends Auth = void>(cfg: MethodConfigOrHandler<A, ToolsOzoneReportQueryReports.QueryParams, ToolsOzoneReportQueryReports.HandlerInput, ToolsOzoneReportQueryReports.HandlerOutput>): void;
898
909
  reassignQueue<A extends Auth = void>(cfg: MethodConfigOrHandler<A, ToolsOzoneReportReassignQueue.QueryParams, ToolsOzoneReportReassignQueue.HandlerInput, ToolsOzoneReportReassignQueue.HandlerOutput>): void;
899
910
  refreshStats<A extends Auth = void>(cfg: MethodConfigOrHandler<A, ToolsOzoneReportRefreshStats.QueryParams, ToolsOzoneReportRefreshStats.HandlerInput, ToolsOzoneReportRefreshStats.HandlerOutput>): void;