Browse Source

Merge branch 'develop' of git.digitaltelepresence.com:digital-telepresence/dtp-base into develop

develop
Rob Colbert 10 months ago
parent
commit
f8788f151e
  1. 21
      .vscode/launch.json
  2. 2
      app/controllers/admin.js
  3. 4
      app/controllers/admin/announcement.js
  4. 2
      app/controllers/admin/attachment.js
  5. 2
      app/controllers/admin/content-report.js
  6. 2
      app/controllers/admin/core-node.js
  7. 2
      app/controllers/admin/core-user.js
  8. 2
      app/controllers/admin/host.js
  9. 2
      app/controllers/admin/image.js
  10. 2
      app/controllers/admin/job-queue.js
  11. 4
      app/controllers/admin/log.js
  12. 2
      app/controllers/admin/newsletter.js
  13. 4
      app/controllers/admin/newsroom.js
  14. 2
      app/controllers/admin/otp.js
  15. 2
      app/controllers/admin/service-node.js
  16. 2
      app/controllers/admin/settings.js
  17. 2
      app/controllers/admin/user.js
  18. 2
      app/controllers/announcement.js
  19. 2
      app/controllers/auth.js
  20. 2
      app/controllers/chat.js
  21. 2
      app/controllers/comment.js
  22. 2
      app/controllers/email.js
  23. 2
      app/controllers/form.js
  24. 2
      app/controllers/hive.js
  25. 2
      app/controllers/hive/kaleidoscope.js
  26. 2
      app/controllers/hive/user.js
  27. 2
      app/controllers/home.js
  28. 2
      app/controllers/image.js
  29. 2
      app/controllers/manifest.js
  30. 2
      app/controllers/newsletter.js
  31. 2
      app/controllers/newsroom.js
  32. 2
      app/controllers/notification.js
  33. 2
      app/controllers/user.js
  34. 2
      app/controllers/welcome.js
  35. 2
      app/services/announcement.js
  36. 2
      app/services/attachment.js
  37. 2
      app/services/cache.js
  38. 2
      app/services/chat.js
  39. 2
      app/services/comment.js
  40. 2
      app/services/content-report.js
  41. 2
      app/services/content-vote.js
  42. 2
      app/services/core-node.js
  43. 2
      app/services/crypto.js
  44. 2
      app/services/csrf-token.js
  45. 2
      app/services/dashboard.js
  46. 2
      app/services/display-engine.js
  47. 2
      app/services/email.js
  48. 2
      app/services/feed.js
  49. 2
      app/services/hive.js
  50. 2
      app/services/host-cache.js
  51. 2
      app/services/image.js
  52. 2
      app/services/job-queue.js
  53. 2
      app/services/limiter.js
  54. 2
      app/services/log.js
  55. 2
      app/services/logan.js
  56. 2
      app/services/markdown.js
  57. 2
      app/services/media.js
  58. 2
      app/services/minio.js
  59. 2
      app/services/newsletter.js
  60. 2
      app/services/oauth2.js
  61. 2
      app/services/otp-auth.js
  62. 2
      app/services/phone.js
  63. 2
      app/services/resource.js
  64. 2
      app/services/session.js
  65. 2
      app/services/sms.js
  66. 44
      app/services/sticker.js
  67. 2
      app/services/user-notification.js
  68. 2
      app/services/user.js
  69. 2
      app/workers/chat.js
  70. 2
      app/workers/chat/job/chat-room-clear.js
  71. 10
      app/workers/chat/job/chat-room-delete.js
  72. 2
      app/workers/host-services.js
  73. 2
      app/workers/logan.js
  74. 2
      app/workers/media.js
  75. 2
      app/workers/media/job/attachment-delete.js
  76. 2
      app/workers/media/job/attachment-ingest.js
  77. 2
      app/workers/media/job/sticker-delete.js
  78. 2
      app/workers/media/job/sticker-ingest.js
  79. 2
      app/workers/media/job/webpage-screenshot.js
  80. 2
      app/workers/newsletter.js
  81. 2
      app/workers/newsletter/job/email-send.js
  82. 2
      app/workers/newsletter/job/transmit.js
  83. 24
      app/workers/newsroom.js
  84. 2
      app/workers/newsroom/cron/update-feeds.js
  85. 2
      app/workers/newsroom/job/update-feed.js
  86. 2
      app/workers/reeeper.js
  87. 2
      app/workers/reeeper/cron/expire-announcements.js
  88. 2
      app/workers/reeeper/cron/expire-crashed-hosts.js
  89. 2
      app/workers/reeeper/job/archive-user-local.js
  90. 6
      client/js/index-admin.js
  91. 3
      client/js/index.js
  92. 9
      client/js/site-admin-app.js
  93. 2
      client/js/site-app.js
  94. 5
      client/js/site-chat.js
  95. 2
      client/js/site-comments.js
  96. 7
      client/js/site-reactions.js
  97. 13
      docs/samples/controller.js
  98. 3
      docs/samples/service.js
  99. 2
      docs/samples/worker.js
  100. 5
      docs/services.md

21
.vscode/launch.json

@ -30,6 +30,27 @@
"console": "integratedTerminal",
"args": ["--action=reset-indexes", "all"]
},
{
"type": "node",
"request": "launch",
"name": "worker:newsletter",
"skipFiles": [
"<node_internals>/**"
],
"program": "${workspaceFolder:dtp-base}/app/workers/newsletter.js",
"console": "integratedTerminal",
},
{
"type": "node",
"request": "launch",
"name": "worker:newsroom",
"skipFiles": [
"<node_internals>/**"
],
"program": "${workspaceFolder:dtp-base}/app/workers/newsroom.js",
"console": "integratedTerminal",
},
{
"type": "node",
"request": "launch",

2
app/controllers/admin.js

@ -123,7 +123,7 @@ class AdminController extends SiteController {
}
module.exports = {
logId: 'admin',
logId: 'ctl:admin',
index: 'admin',
className: 'AdminController',
create: async (dtp) => { return new AdminController(dtp); },

4
app/controllers/admin/announcement.js

@ -158,8 +158,8 @@ class AnnouncementAdminController extends SiteController {
}
module.exports = {
logId: 'announcement',
index: 'announcement',
logId: 'ctl:admin:announcement',
index: 'adminAnnouncement',
className: 'AnnouncementAdminController',
create: async (dtp) => { return new AnnouncementAdminController(dtp); },
};

2
app/controllers/admin/attachment.js

@ -130,7 +130,7 @@ class AttachmentAdminController extends SiteController {
}
module.exports = {
logId: 'admin-attachment',
logId: 'ctl:admin:attachment',
index: 'adminAttachment',
className: 'AttachmentAdminController',
create: async (dtp) => { return new AttachmentAdminController(dtp); },

2
app/controllers/admin/content-report.js

@ -87,7 +87,7 @@ class ContentReportAdminController extends SiteController {
}
module.exports = {
logId: 'admin-content-report',
logId: 'ctl:admin:content-report',
index: 'adminContentReport',
className: 'ContentReportAdminController',
create: async (dtp) => { return new ContentReportAdminController(dtp); },

2
app/controllers/admin/core-node.js

@ -159,7 +159,7 @@ class CoreNodeAdminController extends SiteController {
}
module.exports = {
logId: 'admin-core-node',
logId: 'ctl:admin:core-node',
index: 'adminCoreNode',
className: 'CoreNodeAdminController',
create: async (dtp) => { return new CoreNodeAdminController(dtp); },

2
app/controllers/admin/core-user.js

@ -88,7 +88,7 @@ class CoreUserAdminController extends SiteController {
}
module.exports = {
logId: 'admin-core-user',
logId: 'ctl:admin:core-user',
index: 'adminCoreUser',
className: 'CoreUserAdminController',
create: async (dtp) => { return new CoreUserAdminController(dtp); },

2
app/controllers/admin/host.js

@ -116,7 +116,7 @@ class HostAdminController extends SiteController {
}
module.exports = {
logId: 'admin-host',
logId: 'ctl:admin:host',
index: 'adminHost',
className: 'HostAdminController',
create: async (dtp) => { return new HostAdminController(dtp); },

2
app/controllers/admin/image.js

@ -114,7 +114,7 @@ class ImageAdminController extends SiteController {
}
module.exports = {
logId: 'admin-image',
logId: 'ctl:admin:image',
index: 'adminImage',
className: 'ImageAdminController',
create: async (dtp) => { return new ImageAdminController(dtp); },

2
app/controllers/admin/job-queue.js

@ -119,7 +119,7 @@ class JobQueueAdminController extends SiteController {
}
module.exports = {
logId: 'admin-job-queue',
logId: 'ctl:admin:job-queue',
index: 'adminJobQueue',
className: 'JobQueueAdminController',
create: async (dtp) => { return new JobQueueAdminController(dtp); },

4
app/controllers/admin/log.js

@ -37,7 +37,7 @@ class LogAdminController extends SiteController {
const search = { };
if (req.query.component) {
search.component = { slug: req.query.component };
search.component = { logId: req.query.component };
}
res.locals.logs = await logService.getRecords(search, res.locals.pagination);
@ -51,7 +51,7 @@ class LogAdminController extends SiteController {
}
module.exports = {
logId: 'admin-log',
logId: 'ctl:admin:log',
index: 'adminLog',
className: 'LogAdminController',
create: async (dtp) => { return new LogAdminController(dtp); },

2
app/controllers/admin/newsletter.js

@ -167,7 +167,7 @@ class NewsletterAdminController extends SiteController {
}
module.exports = {
logId: 'admin-newsletter',
logId: 'ctl:admin:newsletter',
index: 'adminNewsletter',
className: 'NewsletterAdminController',
create: async (dtp) => { return new NewsletterAdminController(dtp); },

4
app/controllers/admin/newsroom.js

@ -158,8 +158,8 @@ class NewsroomAdminController extends SiteController {
}
module.exports = {
logId: 'newsroom-admin',
index: 'newsroomAdmin',
logId: 'ctl:admin:newsroom',
index: 'adminNewsroomAdmin',
className: 'NewsroomAdminController',
create: async (dtp) => { return new NewsroomAdminController(dtp); },
};

2
app/controllers/admin/otp.js

@ -49,7 +49,7 @@ class OtpAdminController extends SiteController {
}
module.exports = {
logId: 'admin-otp',
logId: 'ctl:admin:otp',
index: 'adminOtp',
className: 'OtpAdminController',
create: async (dtp) => { return new OtpAdminController(dtp); },

2
app/controllers/admin/service-node.js

@ -128,7 +128,7 @@ class ServiceNodeAdminController extends SiteController {
}
module.exports = {
logId: 'admin-service-node',
logId: 'ctl:admin:service-node',
index: 'adminServiceNode',
className: 'ServiceNodeAdminController',
create: async (dtp) => { return new ServiceNodeAdminController(dtp); },

2
app/controllers/admin/settings.js

@ -125,7 +125,7 @@ class SettingsAdminController extends SiteController {
}
module.exports = {
logId: 'admin-settings',
logId: 'ctl:admin:settings',
index: 'adminSettings',
className: 'SettingsAdminController',
create: async (dtp) => { return new SettingsAdminController(dtp); },

2
app/controllers/admin/user.js

@ -338,7 +338,7 @@ class UserAdminController extends SiteController {
}
module.exports = {
logId: 'admin-user',
logId: 'ctl:admin:user',
index: 'adminUser',
className: 'UserAdminController',
create: async (dtp) => { return new UserAdminController(dtp); },

2
app/controllers/announcement.js

@ -76,7 +76,7 @@ class AnnouncementController extends SiteController {
}
module.exports = {
logId: 'announcement',
logId: 'ctl:announcement',
index: 'announcement',
className: 'AnnouncementController',
create: async (dtp) => { return new AnnouncementController(dtp); },

2
app/controllers/auth.js

@ -339,7 +339,7 @@ class AuthController extends SiteController {
}
module.exports = {
logId: 'auth',
logId: 'ctl:auth',
index: 'auth',
className: 'AuthController',
create: async (dtp) => { return new AuthController(dtp); },

2
app/controllers/chat.js

@ -648,7 +648,7 @@ class ChatController extends SiteController {
}
module.exports = {
logId: 'chat',
logId: 'ctl:chat',
index: 'chat',
className: 'ChatController',
create: async (dtp) => { return new ChatController(dtp); },

2
app/controllers/comment.js

@ -151,7 +151,7 @@ class CommentController extends SiteController {
}
module.exports = {
logId: 'comment',
logId: 'ctl:comment',
index: 'comment',
className: 'CommentController',
create: async (dtp) => { return new CommentController(dtp); },

2
app/controllers/email.js

@ -81,7 +81,7 @@ class EmailController extends SiteController {
}
module.exports = {
logId: 'email',
logId: 'ctl:email',
index: 'email',
className: 'EmailController',
create: async (dtp) => { return new EmailController(dtp); },

2
app/controllers/form.js

@ -64,7 +64,7 @@ class FormController extends SiteController {
}
module.exports = {
logId: 'form',
logId: 'ctl:form',
index: 'form',
className: 'FormController',
create: async (dtp) => { return new FormController(dtp); },

2
app/controllers/hive.js

@ -57,7 +57,7 @@ class HiveController extends SiteController {
}
module.exports = {
logId: 'hive',
logId: 'ctl:hive',
index: 'hive',
className: 'HiveController',
create: async (dtp) => { return new HiveController(dtp); },

2
app/controllers/hive/kaleidoscope.js

@ -93,7 +93,7 @@ class HiveKaleidoscopeController extends SiteController {
}
module.exports = {
logId: 'hive-kaleidoscope',
logId: 'ctl:hive:kaleidoscope',
index: 'hiveKaleidoscope',
className: 'HiveKaleidoscopeController',
create: async (dtp) => { return new HiveKaleidoscopeController(dtp); },

2
app/controllers/hive/user.js

@ -149,7 +149,7 @@ class HiveUserController extends SiteController {
}
module.exports = {
logId: 'hive-user',
logId: 'ctl:hive:user',
index: 'hiveUser',
className: 'HiveUserController',
create: async (dtp) => { return new HiveUserController(dtp); },

2
app/controllers/home.js

@ -96,7 +96,7 @@ class HomeController extends SiteController {
}
module.exports = {
logId: 'home',
logId: 'ctl:home',
index: 'home',
className: 'HomeController',
create: async (dtp) => { return new HomeController(dtp); },

2
app/controllers/image.js

@ -135,7 +135,7 @@ class ImageController extends SiteController {
}
module.exports = {
logId: 'image',
logId: 'ctl:image',
index: 'image',
className: 'ImageController',
create: async (dtp) => { return new ImageController(dtp); },

2
app/controllers/manifest.js

@ -64,7 +64,7 @@ class ManifestController extends SiteController {
}
module.exports = {
logId: 'manifest',
logId: 'ctl:manifest',
index: 'manifest',
className: 'ManifestController',
create: async (dtp) => { return new ManifestController(dtp); },

2
app/controllers/newsletter.js

@ -92,7 +92,7 @@ class NewsletterController extends SiteController {
}
module.exports = {
logId: 'newsletter',
logId: 'ctl:newsletter',
index: 'newsletter',
className: 'NewsletterController',
create: async (dtp) => { return new NewsletterController(dtp); },

2
app/controllers/newsroom.js

@ -165,7 +165,7 @@ class NewsroomController extends SiteController {
}
module.exports = {
logId: 'newsroom',
logId: 'ctl:newsroom',
index: 'newsroom',
className: 'NewsroomController',
create: (dtp) => { return new NewsroomController(dtp); },

2
app/controllers/notification.js

@ -72,7 +72,7 @@ class NotificationController extends SiteController {
}
module.exports = {
logId: 'notification',
logId: 'ctl:notification',
index: 'notification',
className: 'NotificationController',
create: async (dtp) => { return new NotificationController(dtp); },

2
app/controllers/user.js

@ -645,7 +645,7 @@ class UserController extends SiteController {
}
module.exports = {
logId: 'user',
logId: 'ctl:user',
index: 'user',
className: 'UserController',
create: async (dtp) => { return new UserController(dtp); },

2
app/controllers/welcome.js

@ -120,7 +120,7 @@ class WelcomeController extends SiteController {
}
module.exports = {
logId: 'welcome',
logId: 'ctl:welcome',
index: 'welcome',
className: 'WelcomeController',
create: async (dtp) => { return new WelcomeController(dtp); },

2
app/services/announcement.js

@ -116,7 +116,7 @@ class AnnouncementService extends SiteService {
}
module.exports = {
logId: 'announcement',
logId: 'svc:announcement',
index: 'announcement',
className: 'AnnouncementService',
create: (dtp) => { return new AnnouncementService(dtp); },

2
app/services/attachment.js

@ -211,7 +211,7 @@ class AttachmentService extends SiteService {
}
module.exports = {
logId: 'attachment',
logId: 'svc:attachment',
index: 'attachment',
className: 'AttachmentService',
create: (dtp) => { return new AttachmentService(dtp); },

2
app/services/cache.js

@ -57,7 +57,7 @@ class CacheService extends SiteService {
}
module.exports = {
logId: 'cache',
logId: 'svc:cache',
index: 'cache',
className: 'CacheService',
create: (dtp) => { return new CacheService(dtp); },

2
app/services/chat.js

@ -862,7 +862,7 @@ class ChatService extends SiteService {
}
module.exports = {
logId: 'chat',
logId: 'svc:chat',
index: 'chat',
className: 'ChatService',
create: (dtp) => { return new ChatService(dtp); },

2
app/services/comment.js

@ -350,7 +350,7 @@ class CommentService extends SiteService {
}
module.exports = {
logId: 'comment',
logId: 'svc:comment',
index: 'comment',
className: 'CommentService',
create: (dtp) => { return new CommentService(dtp); },

2
app/services/content-report.js

@ -127,7 +127,7 @@ class ContentReportService extends SiteService {
}
module.exports = {
logId: 'content-report',
logId: 'svc:content-report',
index: 'contentReport',
className: 'ContentReportService',
create: (dtp) => { return new ContentReportService(dtp); },

2
app/services/content-vote.js

@ -117,7 +117,7 @@ class ContentVoteService extends SiteService {
}
module.exports = {
logId: 'content-vote',
logId: 'svc:content-vote',
index: 'contentVote',
className: 'ContentVoteService',
create: (dtp) => { return new ContentVoteService(dtp); },

2
app/services/core-node.js

@ -812,7 +812,7 @@ class CoreNodeService extends SiteService {
}
module.exports = {
logId: 'core-node',
logId: 'svc:core-node',
index: 'coreNode',
className: 'CoreNodeService',
create: (dtp) => { return new CoreNodeService(dtp); },

2
app/services/crypto.js

@ -58,7 +58,7 @@ class CryptoService extends SiteService {
}
module.exports = {
logId: 'crypto',
logId: 'svc:crypto',
index: 'crypto',
className: 'CryptoService',
create: (dtp) => { return new CryptoService(dtp); },

2
app/services/csrf-token.js

@ -76,7 +76,7 @@ class CsrfTokenService extends SiteService {
}
module.exports = {
logId: 'csrf-token',
logId: 'svc:csrf-token',
index: 'csrfToken',
className: 'CsrfTokenService',
create: (dtp) => { return new CsrfTokenService(dtp); },

2
app/services/dashboard.js

@ -270,7 +270,7 @@ class DashboardService extends SiteService {
}
module.exports = {
logId: 'dashboard',
logId: 'svc:dashboard',
index: 'dashboard',
className: 'DashboardService',
create: (dtp) => { return new DashboardService(dtp); },

2
app/services/display-engine.js

@ -150,7 +150,7 @@ class DisplayEngineService extends SiteService {
}
module.exports = {
logId: 'display-engine',
logId: 'svc:display-engine',
index: 'displayEngine',
className: 'DisplayEngineService',
create: (dtp) => { return new DisplayEngineService(dtp); },

2
app/services/email.js

@ -171,7 +171,7 @@ class EmailService extends SiteService {
}
module.exports = {
logId: 'email',
logId: 'svc:email',
index: 'email',
className: 'EmailService',
create: (dtp) => { return new EmailService(dtp); },

2
app/services/feed.js

@ -296,7 +296,7 @@ class FeedService extends SiteService {
}
module.exports = {
logId: 'feed',
logId: 'svc:feed',
index: 'feed',
className: 'FeedService',
create: (dtp) => { return new FeedService(dtp); },

2
app/services/hive.js

@ -330,7 +330,7 @@ class HiveService extends SiteService {
}
module.exports = {
logId: 'hive',
logId: 'svc:hive',
index: 'hive',
className: 'HiveService',
create: (dtp) => { return new HiveService(dtp); },

2
app/services/host-cache.js

@ -97,7 +97,7 @@ class HostCacheService extends SiteService {
}
module.exports = {
logId: 'host-cache',
logId: 'svc:host-cache',
index: 'hostCache',
className: 'HostCacheService',
create: (dtp) => { return new HostCacheService(dtp); },

2
app/services/image.js

@ -371,7 +371,7 @@ class ImageService extends SiteService {
}
module.exports = {
logId: 'image',
logId: 'svc:image',
index: 'image',
className: 'ImageService',
create: (dtp) => { return new ImageService(dtp); },

2
app/services/job-queue.js

@ -62,7 +62,7 @@ class JobQueueService extends SiteService {
}
module.exports = {
logId: 'job-queue',
logId: 'svc:job-queue',
index: 'jobQueue',
className: 'JobQueueService',
create: (dtp) => { return new JobQueueService(dtp); },

2
app/services/limiter.js

@ -69,7 +69,7 @@ class LimiterService extends SiteService {
}
module.exports = {
logId: 'limiter',
logId: 'svc:limiter',
index: 'limiter',
className: 'LimiterService',
create: (dtp) => { return new LimiterService(dtp); },

2
app/services/log.js

@ -38,7 +38,7 @@ class SystemLogService extends SiteService {
}
module.exports = {
logId: 'log',
logId: 'svc:log',
index: 'log',
className: 'SystemLogService',
create: (dtp) => { return new SystemLogService(dtp); },

2
app/services/logan.js

@ -68,7 +68,7 @@ class LoganService extends SiteService {
}
module.exports = {
logId: 'logan',
logId: 'svc:logan',
index: 'logan',
className: 'LoganService',
create: (dtp) => { return new LoganService(dtp); },

2
app/services/markdown.js

@ -32,7 +32,7 @@ class MarkdownService extends SiteService {
}
module.exports = {
logId: 'markdown',
logId: 'svc:markdown',
index: 'markdown',
className: 'MarkdownService',
create: (dtp) => { return new MarkdownService(dtp); },

2
app/services/media.js

@ -94,7 +94,7 @@ class MediaService extends SiteService {
}
module.exports = {
logId: 'media',
logId: 'svc:media',
index: 'media',
className: 'MediaService',
create: (dtp) => { return new MediaService(dtp); },

2
app/services/minio.js

@ -97,7 +97,7 @@ class MinioService extends SiteService {
}
module.exports = {
logId: 'minio',
logId: 'svc:minio',
index: 'minio',
className: 'MinioService',
create: (dtp) => { return new MinioService(dtp); },

2
app/services/newsletter.js

@ -117,7 +117,7 @@ class NewsletterService extends SiteService {
}
module.exports = {
logId: 'newsletter',
logId: 'svc:newsletter',
index: 'newsletter',
className: 'NewsletterService',
create: (dtp) => { return new NewsletterService(dtp); },

2
app/services/oauth2.js

@ -474,7 +474,7 @@ class OAuth2Service extends SiteService {
}
module.exports = {
logId: 'oauth2',
logId: 'svc:oauth2',
index: 'oauth2',
className: 'OAuth2Service',
create: (dtp) => { return new OAuth2Service(dtp); },

2
app/services/otp-auth.js

@ -238,7 +238,7 @@ class OtpAuthService extends SiteService {
}
module.exports = {
logId: 'otp-auth',
logId: 'svc:otp-auth',
index: 'otpAuth',
className: 'OtpAuthService',
create: (dtp) => { return new OtpAuthService(dtp); },

2
app/services/phone.js

@ -55,7 +55,7 @@ class PhoneService extends SiteService {
}
module.exports = {
logId: 'phone',
logId: 'svc:phone',
index: 'phone',
className: 'PhoneService',
create: (dtp) => { return new PhoneService(dtp); },

2
app/services/resource.js

@ -118,7 +118,7 @@ class ResourceService extends SiteService {
}
module.exports = {
logId: 'resource',
logId: 'svc:resource',
index: 'resource',
className: 'ResourceService',
create: (dtp) => { return new ResourceService(dtp); },

2
app/services/session.js

@ -110,7 +110,7 @@ class SessionService extends SiteService {
}
module.exports = {
logId: 'session',
logId: 'svc:session',
index: 'session',
className: 'SessionService',
create: (dtp) => { return new SessionService(dtp); },

2
app/services/sms.js

@ -47,7 +47,7 @@ class SmsService extends SiteService {
}
module.exports = {
logId: 'sms',
logId: 'svc:sms',
index: 'sms',
className: 'SmsService',
create: (dtp) => { return new SmsService(dtp); },

44
app/services/sticker.js

@ -11,7 +11,7 @@ const mongoose = require('mongoose');
const Sticker = mongoose.model('Sticker');
const User = mongoose.model('User');
const { SiteService, SiteError, SiteAsync } = require('../../lib/site-lib');
const { SiteService, SiteError } = require('../../lib/site-lib');
const MAX_CHANNEL_STICKERS = 50;
const MAX_USER_STICKERS = 10;
@ -144,18 +144,42 @@ class StickerService extends SiteService {
await Sticker.updateOne({ _id: sticker._id }, { $set: { status } });
}
/**
* Fetch and populate an Array of Sticker documents matching the input slugs.
*
* The returned Array may be smaller than the input Array (or empty) if some
* or none of the stickers have been deleted or simply don't exist.
*
* @param {Array} slugs an Array of sticker slugs
* @returns Array of populated matching Sticker documents
*/
async resolveStickerSlugs (slugs) {
const stickers = [ ];
await SiteAsync.each(slugs, async (slug) => {
const sticker = await Sticker.findOne({ slug: slug });
if (!sticker) {
return;
}
stickers.push(sticker);
});
const stickers = await Sticker
.find({ slug: { $in: slugs } })
.populate(this.populateSticker)
.lean();
return stickers;
}
/**
* Convert an array of sticker slugs to an array of sticker _id values. This
* is used during chat message ingest where the whole populated sticker just
* isn't needed and is all discarded.
*
* The returned Array may be smaller than the input Array (or empty) if some
* or none of the stickers have been deleted or simply don't exist.
*
* @param {Array} slugs an Array of sticker slugs
* @returns an Array of sticker IDs
*/
async resolveStickerSlugIds (slugs) {
const stickers = await Sticker
.find({ slug: { $in: slugs } })
.select('_id')
.lean();
return stickers.map((sticker) => sticker._id);
}
async removeSticker (sticker) {
const stickerId = sticker._id;
this.log.info('creating sticker delete job', { stickerId });
@ -208,7 +232,7 @@ class StickerService extends SiteService {
}
module.exports = {
logId: 'sticker',
logId: 'svc:sticker',
index: 'sticker',
className: 'StickerService',
create: (dtp) => { return new StickerService(dtp); },

2
app/services/user-notification.js

@ -135,7 +135,7 @@ class UserNotificationService extends SiteService {
}
module.exports = {
logId: 'user-notification',
logId: 'svc:user-notification',
index: 'userNotification',
className: 'UserNotificationService',
create: (dtp) => { return new UserNotificationService(dtp); },

2
app/services/user.js

@ -1079,7 +1079,7 @@ class UserService extends SiteService {
}
module.exports = {
logId: 'user',
logId: 'svc:user',
index: 'user',
className: 'UserService',
create: (dtp) => { return new UserService(dtp); },

2
app/workers/chat.js

@ -17,7 +17,7 @@ module.pkg = require(path.resolve(__dirname, '..', '..', 'package.json'));
module.config = {
environment: process.env.NODE_ENV,
root: module.rootPath,
component: { logId: 'chat-worker', index: 'chatWorker', className: 'ChatWorker' },
component: { logId: 'wrk:chat', index: 'chatWorker', className: 'ChatWorker' },
};
module.config.site = require(path.join(module.rootPath, 'config', 'site'));

2
app/workers/chat/job/chat-room-clear.js

@ -16,7 +16,7 @@ class ChatRoomClearJob extends SiteWorkerProcess {
static get COMPONENT ( ) {
return {
logId: 'chat-room-clear-job',
logId: 'wrk:chat:room-clear:job',
index: 'charRoomClearJob',
className: 'ChatRoomClearJob',
};

10
app/workers/chat/job/chat-room-delete.js

@ -15,18 +15,12 @@ const EmojiReaction = mongoose.model('EmojiReaction');
const { SiteWorkerProcess } = require(path.join(__dirname, '..', '..', '..', '..', 'lib', 'site-lib'));
/**
* DTP Core Chat sticker processor can receive requests to ingest and delete
* stickers to be executed as background jobs in a queue. This processor
* attaches to the `media` queue and registers processors for `sticker-ingest`
* and `sticker-delete`.
*/
class ChatRoomDeleteJob extends SiteWorkerProcess {
static get COMPONENT ( ) {
return {
logId: 'chat-room-processor',
index: 'chatRoomProcessor',
logId: 'wrk:chat:room-delete:job',
index: 'chatRoomDeleteJob',
className: 'ChatRoomDeleteJob',
};
}

2
app/workers/host-services.js

@ -34,7 +34,7 @@ module.config = {
root: module.rootPath,
site: require(path.join(module.rootPath, 'config', 'site')),
http: require(path.join(module.rootPath, 'config', 'http')),
component: { logId: 'host-services-worker', index: 'hostServicesWorker', className: 'HostServicesWorker' },
component: { logId: 'wrk:host-services', index: 'hostServicesWorker', className: 'HostServicesWorker' },
};
module.log = new SiteLog(module, module.config.component);

2
app/workers/logan.js

@ -16,7 +16,7 @@ module.config = {
environment: process.env.NODE_ENV,
root: module.rootPath,
site: require(path.join(module.rootPath, 'config', 'site')),
component: { logId: 'logan-site-worker', index: 'LoganSiteWorker', className: 'LoganSiteWorker' },
component: { logId: 'wrk:logan-site', index: 'loganSite', className: 'LoganSiteWorker' },
};
class LoganSiteWorker extends SiteWorker {

2
app/workers/media.js

@ -15,7 +15,7 @@ module.pkg = require(path.resolve(__dirname, '..', '..', 'package.json'));
module.config = {
environment: process.env.NODE_ENV,
root: path.resolve(__dirname, '..', '..'),
component: { logId: 'media-worker', index: 'mediaWorker', className: 'MediaWorker' },
component: { logId: 'wrk:media', index: 'media', className: 'MediaWorker' },
};
/**

2
app/workers/media/job/attachment-delete.js

@ -15,7 +15,7 @@ class AttachmentDeleteJob extends SiteWorkerProcess {
static get COMPONENT ( ) {
return {
logId: 'attachment-delete-job',
logId: 'wrk:chat:attachment-delete:job',
index: 'attachmentDeleteJob',
className: 'AttachmentDeleteJob',
};

2
app/workers/media/job/attachment-ingest.js

@ -19,7 +19,7 @@ class AttachmentIngestJob extends SiteWorkerProcess {
static get COMPONENT ( ) {
return {
logId: 'attachment-ingest-job',
logId: 'wrk:chat:attachment-ingest:job',
index: 'attachmentIngestJob',
className: 'AttachmentIngestJob',
};

2
app/workers/media/job/sticker-delete.js

@ -15,7 +15,7 @@ class StickerDeleteJob extends SiteWorkerProcess {
static get COMPONENT ( ) {
return {
logId: 'sticker-delete-job',
logId: 'wrk:chat:sticker-delete:job',
index: 'stickerDeleteJob',
className: 'StickerDeleteJob',
};

2
app/workers/media/job/sticker-ingest.js

@ -20,7 +20,7 @@ class StickerIngestJob extends SiteWorkerProcess {
static get COMPONENT ( ) {
return {
logId: 'sticker-ingest-job',
logId: 'wrk:chat:sticker-ingest:job',
index: 'stickerIngestJob',
className: 'StickerIngestJob',
};

2
app/workers/media/job/webpage-screenshot.js

@ -17,7 +17,7 @@ class WebpageScreenshotJob extends SiteWorkerProcess {
static get COMPONENT ( ) {
return {
logId: 'webpage-screenshot-job',
logId: 'wrk:chat:webpage-screenshot:job',
index: 'webpageScreenshotJob',
className: 'WebpageScreenshotJob',
};

2
app/workers/newsletter.js

@ -12,7 +12,7 @@ const { SiteWorker, SiteLog } = require(path.join(__dirname, '..', '..', 'lib',
module.pkg = require(path.resolve(__dirname, '..', '..', 'package.json'));
module.config = {
root: path.resolve(__dirname, '..', '..'),
component: { logId: 'newsletter-worker', index: 'newsletterWorker', className: 'NewsletterWorker' },
component: { logId: 'wrk:newsletter', index: 'newsletter', className: 'NewsletterWorker' },
};
class NewsletterWorker extends SiteWorker {

2
app/workers/newsletter/job/email-send.js

@ -12,7 +12,7 @@ class NewsletterEmailSendJob extends SiteWorkerProcess {
static get COMPONENT ( ) {
return {
logId: 'newsletter-email-send-job',
logId: 'wrk:newsletter:email-send:job',
index: 'newsletterEmailSendJob',
className: 'NewsletterEmailSendJob',
};

2
app/workers/newsletter/job/transmit.js

@ -17,7 +17,7 @@ class NewsletterTransmitJob extends SiteWorkerProcess {
static get COMPONENT ( ) {
return {
logId: 'newsletter-transmit-job',
logId: 'wrk:newsletter:transmit:job',
index: 'newsletterTransmitJob',
className: 'NewsletterTransmitJob',
};

24
app/workers/newsroom.js

@ -9,6 +9,8 @@ const path = require('path');
require('dotenv').config({ path: path.resolve(__dirname, '..', '..', '.env') });
const mongoose = require('mongoose');
const moment = require('moment');
const { read: feedReader } = require('feed-reader');
const {
@ -23,7 +25,7 @@ module.pkg = require(path.resolve(__dirname, '..', '..', 'package.json'));
module.config = {
environment: process.env.NODE_ENV,
root: module.rootPath,
component: { logId: 'newsroom', index: 'newsroom', className: 'NewsroomWorker' },
component: { logId: 'wrk:newsroom', index: 'newsroom', className: 'NewsroomWorker' },
};
module.config.site = require(path.join(module.rootPath, 'config', 'site'));
@ -53,14 +55,30 @@ class NewsroomWorker extends SiteWorker {
const NOW = new Date();
const { feed: feedService } = this.dtp.services;
try {
this.log.info('loading latest feed data', { feedId: feed._id, title: feed.title });
this.log.info('loading latest feed data', {
feed: {
_id: feed._id,
title: feed.title,
published: {
date: feed.published,
moment: moment(feed.published).fromNow(),
},
},
});
await feedService.updateFavicon(feed);
const response = await feedReader(feed.url);
await SiteAsync.each(response.entries, async (entry) => {
await Feed.updateOne({ _id: feed._id }, { $set: { published: feed.published || NOW }});
await feedService.createEntry(feed, entry);
}, 4);
this.log.info('feed updated', { entries: response.entries.length });
this.log.info('feed updated', {
feed: {
_id: feed._id,
title: feed.title,
},
entryCount: response.entries.length,
});
} catch (error) {
this.log.error('failed to update feed', { feedId: feed._id, title: feed.title, error });
}

2
app/workers/newsroom/cron/update-feeds.js

@ -17,7 +17,7 @@ class UpdateFeedsCron extends SiteWorkerProcess {
static get COMPONENT ( ) {
return {
logId: 'update-feeds-cron',
logId: 'wrk:newsroom:update-feeds:cron',
index: 'updateFeeds',
className: 'UpdateFeedsCron',
};

2
app/workers/newsroom/job/update-feed.js

@ -12,7 +12,7 @@ class UpdateFeedJob extends SiteWorkerProcess {
static get COMPONENT ( ) {
return {
logId: 'newsroom-update-feed-job',
logId: 'wrk:newsroom:update-feed:job',
index: 'newsroomUpdateFeedJob',
className: 'UpdateFeedJob',
};

2
app/workers/reeeper.js

@ -19,7 +19,7 @@ module.pkg = require(path.resolve(__dirname, '..', '..', 'package.json'));
module.config = {
environment: process.env.NODE_ENV,
root: module.rootPath,
component: { logId: 'reeeper', index: 'reeeper', className: 'ReeeperWorker' },
component: { logId: 'wrk:reeeper', index: 'reeeper', className: 'ReeeperWorker' },
};
module.config.site = require(path.join(module.rootPath, 'config', 'site'));

2
app/workers/reeeper/cron/expire-announcements.js

@ -29,7 +29,7 @@ class ExpiredAnnouncementsCron extends SiteWorkerProcess {
static get COMPONENT ( ) {
return {
logId: 'expired-announcements-cron',
logId: 'wrk:chat:expired-announcements:cron',
index: 'expiredAnnouncementsCron',
className: 'ExpiredAnnouncementsCron',
};

2
app/workers/reeeper/cron/expire-crashed-hosts.js

@ -28,7 +28,7 @@ class CrashedHostsCron extends SiteWorkerProcess {
static get COMPONENT ( ) {
return {
logId: 'crashed-hosts-cron',
logId: 'wrk:reeeper:crashed-hosts:cron',
index: 'crashedHostsCron',
className: 'CrashedHostsCron',
};

2
app/workers/reeeper/job/archive-user-local.js

@ -30,7 +30,7 @@ class ArchiveUserLocalJob extends SiteWorkerProcess {
static get COMPONENT ( ) {
return {
logId: 'archive-user-local-job',
logId: 'wrk:reeeper:archive-user-local:job',
index: 'archiveUserLocalJob',
className: 'ArchiveUserLocalJob',
};

6
client/js/index-admin.js

@ -4,7 +4,7 @@
'use strict';
const DTP_COMPONENT = { name: 'Site Admin', slug: 'site-admin' };
const DTP_COMPONENT = { logId: 'site-admin-index', index: 'siteAdminIndex', className: 'SiteAdminIndex' };
const dtp = window.dtp = window.dtp || { };
dtp.admin = dtp.admin || { };
@ -13,11 +13,9 @@ import DtpSiteAdminApp from './site-admin-app.js';
import DtpWebLog from 'dtp/dtp-log.js';
window.addEventListener('load', async ( ) => {
// application console log
dtp.admin.log = new DtpWebLog(DTP_COMPONENT);
dtp.adminApp = new DtpSiteAdminApp(dtp.user);
dtp.admin.log.debug('load', 'dispatching load event');
dtp.admin.log.debug('load', 'dispatching admin load event');
window.dispatchEvent(new Event('dtp-load-admin'));
});

3
client/js/index.js

@ -4,13 +4,12 @@
'use strict';
const DTP_COMPONENT = { name: 'Site', slug: 'site' };
const DTP_COMPONENT = { logId: 'site-index', index: 'siteIndex', className: 'SiteIndex' };
const dtp = window. dtp = window.dtp || { };
import DtpSiteApp from './site-app.js';
import DtpWebLog from 'dtp/dtp-log.js';
// import UIkit from 'uikit';
/**
* Monkeypatch to count characters instead of .length's code point count.

9
client/js/site-admin-app.js

@ -4,7 +4,6 @@
'use strict';
const DTP_COMPONENT = { name: 'Site Admin', slug: 'site-admin-app' };
const dtp = window.dtp = window.dtp || { };
const GRID_COLOR = '#a0a0a0';
@ -25,10 +24,12 @@ import numeral from 'numeral';
import UIkit from 'uikit';
// import UIkit from 'uikit';
export default class DtpSiteAdminHostStatsApp extends DtpApp {
export default class DtpSiteAdminApp extends DtpApp {
static get COMPONENT ( ) { return { logId: 'site-admin-app', index: 'siteAdminApp', className: 'SiteAdminApp' }; }
constructor (user) {
super(DTP_COMPONENT, user);
super(DtpSiteAdminApp.COMPONENT, user);
this.log.debug('constructor', 'app instance created');
}
@ -553,4 +554,4 @@ export default class DtpSiteAdminHostStatsApp extends DtpApp {
}
}
dtp.DtpSiteAdminHostStatsApp = DtpSiteAdminHostStatsApp;
dtp.DtpSiteAdminApp = DtpSiteAdminApp;

2
client/js/site-app.js

@ -4,7 +4,7 @@
'use strict';
const DTP_COMPONENT = { name: 'Site App', slug: 'site-app' };
const DTP_COMPONENT = { logId: 'site-app', index: 'siteApp', className: 'DtpSiteApp' };
const dtp = window.dtp = window.dtp || { };
import DtpApp from 'dtp/dtp-app.js';

5
client/js/site-chat.js

@ -4,7 +4,6 @@
'use strict';
const DTP_COMPONENT = { name: 'Site Chat', slug: 'site-chat' };
const dtp = window.dtp = window.dtp || { }; // jshint ignore:line
const EMOJI_EXPLOSION_DURATION = 8000;
@ -17,9 +16,11 @@ import * as picmo from 'picmo';
export default class SiteChat {
static get COMPONENT ( ) { return { logId: 'site-chat', index: 'siteChat', className: 'DtpSiteChat' }; }
constructor (app) {
this.app = app;
this.log = new DtpLog(DTP_COMPONENT);
this.log = new DtpLog(SiteChat.COMPONENT);
this.ui = {
menu: document.querySelector('#chat-room-menu'),

2
client/js/site-comments.js

@ -14,7 +14,7 @@ export default class SiteComments {
constructor (app) {
this.app = app;
this.log = new DtpLog({ name: 'Site Comments', slug: 'comments' });
this.log = new DtpLog({ logId: 'site-comments', index: 'siteComments', className: 'SiteComments' });
this.createEmojiPickers();
}

7
client/js/site-reactions.js

@ -4,13 +4,14 @@
'use strict';
const DTP_COMPONENT = { name: 'Site Reactions', slug: 'site-reactions' };
const dtp = window.dtp = window.dtp || { }; // jshint ignore:line
import DtpLog from 'dtp/dtp-log';
class Reaction {
static get COMPONENT ( ) { return { logId: 'reaction', index: 'reaction', className: 'Reaction' }; }
constructor (container, reaction) {
this.container = container;
this.reaction = reaction;
@ -96,8 +97,10 @@ class Reaction {
export default class SiteReactions {
static get COMPONENT ( ) { return { logId: 'site-reactions', index: 'siteReactions', className: 'SiteReactions' }; }
constructor ( ) {
this.log = new DtpLog(DTP_COMPONENT);
this.log = new DtpLog(SiteReactions.COMPONENT);
this.container = document.querySelector('#chat-reactions');
this.reactions = [ ];

13
docs/samples/controller.js

@ -90,8 +90,15 @@ class HomeController extends SiteController {
}
module.exports = {
slug: 'home',
name: 'home',
isHome: true,
logId: 'home',
index: 'home',
className: 'HomeController',
create: async (dtp) => { return new HomeController(dtp); },
/*
* This attribute must exist and be set to true on your Home controller to
* ensure that it is started last. This matters for ensuring that your root
* route is registered to ExpressJS last.
*/
isHome: true,
};

3
docs/samples/service.js

@ -62,7 +62,8 @@ class SampleService extends SiteService {
}
module.exports = {
logId: 'svc:sample',
name: 'sample',
slug: 'sample',
className: 'SampleService',
create: (dtp) => { return new SampleService(dtp); },
};

2
docs/samples/worker.js

@ -33,7 +33,7 @@ class SampleWorker extends SiteWorker {
try {
module.rootPath = path.resolve(__dirname, '..', '..');
module.pkg = require(path.resolve(__dirname, '..', '..', 'package.json'));
module.component = { name: 'theWorkerName', slug: 'the-worker-name' };
module.component = { logId: 'wrk:sample', index: 'sampleWorker', className: 'SampleWorker' };
module.config = {
environment: process.env.NODE_ENV,

5
docs/services.md

@ -33,8 +33,9 @@ class MyService extends SiteService {
}
module.exports = {
slug: 'my-service',
name: 'myService',
logId: 'my-service',
index: 'myService',
className: 'MyService',
create: (dtp) => { return new MyService(dtp); },
};
```

Some files were not shown because too many files changed in this diff

Loading…
Cancel
Save