@decaf-ts/integrations 0.11.0 → 0.14.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +164 -0
- package/dist/integrations.cjs +1 -1
- package/dist/integrations.cjs.map +1 -1
- package/dist/integrations.js +1 -1
- package/dist/integrations.js.map +1 -1
- package/docker/mailpit-compose.yml +17 -0
- package/docker/postgres-compose.yml +26 -0
- package/lib/cjs/blob/azure/AzureBlobStoreService.cjs +12 -23
- package/lib/cjs/blob/azure/AzureBlobStoreService.cjs.map +1 -1
- package/lib/cjs/blob/core/BlobStoreService.cjs +26 -25
- package/lib/cjs/blob/core/BlobStoreService.cjs.map +1 -1
- package/lib/cjs/blob/gcp/GcsBlobStoreService.cjs +12 -23
- package/lib/cjs/blob/gcp/GcsBlobStoreService.cjs.map +1 -1
- package/lib/cjs/blob/s3/S3BlobStoreService.cjs +11 -16
- package/lib/cjs/blob/s3/S3BlobStoreService.cjs.map +1 -1
- package/lib/cjs/blob/s3/S3CompatibleBlobStoreService.cjs +14 -16
- package/lib/cjs/blob/s3/S3CompatibleBlobStoreService.cjs.map +1 -1
- package/lib/cjs/calendar/environment.cjs +48 -0
- package/lib/cjs/calendar/environment.cjs.map +1 -0
- package/lib/cjs/calendar/google-calendar/GoogleCalendarService.cjs +338 -0
- package/lib/cjs/calendar/google-calendar/GoogleCalendarService.cjs.map +1 -0
- package/lib/cjs/calendar/google-calendar/index.cjs +20 -0
- package/lib/cjs/calendar/google-calendar/index.cjs.map +1 -0
- package/lib/cjs/comms/discord/DiscordService.cjs +318 -0
- package/lib/cjs/comms/discord/DiscordService.cjs.map +1 -0
- package/lib/cjs/comms/discord/index.cjs +19 -0
- package/lib/cjs/comms/discord/index.cjs.map +1 -0
- package/lib/cjs/comms/email/EmailService.cjs +376 -0
- package/lib/cjs/comms/email/EmailService.cjs.map +1 -0
- package/lib/cjs/comms/email/index.cjs +29 -0
- package/lib/cjs/comms/email/index.cjs.map +1 -0
- package/lib/cjs/comms/email/mime.cjs +225 -0
- package/lib/cjs/comms/email/mime.cjs.map +1 -0
- package/lib/cjs/comms/email/smtp.cjs +204 -0
- package/lib/cjs/comms/email/smtp.cjs.map +1 -0
- package/lib/cjs/comms/environment.cjs +79 -0
- package/lib/cjs/comms/environment.cjs.map +1 -0
- package/lib/cjs/comms/gmail/GmailService.cjs +235 -0
- package/lib/cjs/comms/gmail/GmailService.cjs.map +1 -0
- package/lib/cjs/comms/gmail/index.cjs +24 -0
- package/lib/cjs/comms/gmail/index.cjs.map +1 -0
- package/lib/cjs/comms/index.cjs +34 -0
- package/lib/cjs/comms/index.cjs.map +1 -0
- package/lib/cjs/comms/outlook/MicrosoftOutlookService.cjs +325 -0
- package/lib/cjs/comms/outlook/MicrosoftOutlookService.cjs.map +1 -0
- package/lib/cjs/comms/outlook/index.cjs +19 -0
- package/lib/cjs/comms/outlook/index.cjs.map +1 -0
- package/lib/cjs/comms/slack/SlackService.cjs +264 -0
- package/lib/cjs/comms/slack/SlackService.cjs.map +1 -0
- package/lib/cjs/comms/slack/index.cjs +24 -0
- package/lib/cjs/comms/slack/index.cjs.map +1 -0
- package/lib/cjs/comms/teams/TeamsService.cjs +212 -0
- package/lib/cjs/comms/teams/TeamsService.cjs.map +1 -0
- package/lib/cjs/comms/teams/index.cjs +24 -0
- package/lib/cjs/comms/teams/index.cjs.map +1 -0
- package/lib/cjs/comms/telegram/TelegramService.cjs +196 -0
- package/lib/cjs/comms/telegram/TelegramService.cjs.map +1 -0
- package/lib/cjs/comms/telegram/index.cjs +24 -0
- package/lib/cjs/comms/telegram/index.cjs.map +1 -0
- package/lib/cjs/comms/whatsapp/WhatsAppService.cjs +274 -0
- package/lib/cjs/comms/whatsapp/WhatsAppService.cjs.map +1 -0
- package/lib/cjs/comms/whatsapp/index.cjs +19 -0
- package/lib/cjs/comms/whatsapp/index.cjs.map +1 -0
- package/lib/cjs/devops/environment.cjs +43 -0
- package/lib/cjs/devops/environment.cjs.map +1 -0
- package/lib/cjs/devops/github/GithubService.cjs +302 -0
- package/lib/cjs/devops/github/GithubService.cjs.map +1 -0
- package/lib/cjs/devops/github/index.cjs +24 -0
- package/lib/cjs/devops/github/index.cjs.map +1 -0
- package/lib/cjs/devops/gitlab/GitlabService.cjs +282 -0
- package/lib/cjs/devops/gitlab/GitlabService.cjs.map +1 -0
- package/lib/cjs/devops/gitlab/index.cjs +24 -0
- package/lib/cjs/devops/gitlab/index.cjs.map +1 -0
- package/lib/cjs/devops/index.cjs +28 -0
- package/lib/cjs/devops/index.cjs.map +1 -0
- package/lib/cjs/feature-flags/models/FeatureFlag.model.cjs +2 -0
- package/lib/cjs/feature-flags/models/FeatureFlag.model.cjs.map +1 -1
- package/lib/cjs/feature-flags/models/FeatureFlagAccess.model.cjs +2 -0
- package/lib/cjs/feature-flags/models/FeatureFlagAccess.model.cjs.map +1 -1
- package/lib/cjs/index.cjs +3 -3
- package/lib/cjs/io/airtable/AirtableService.cjs +266 -0
- package/lib/cjs/io/airtable/AirtableService.cjs.map +1 -0
- package/lib/cjs/io/airtable/index.cjs +24 -0
- package/lib/cjs/io/airtable/index.cjs.map +1 -0
- package/lib/cjs/io/confluence/ConfluenceService.cjs +317 -0
- package/lib/cjs/io/confluence/ConfluenceService.cjs.map +1 -0
- package/lib/cjs/io/confluence/index.cjs +19 -0
- package/lib/cjs/io/confluence/index.cjs.map +1 -0
- package/lib/cjs/io/environment.cjs +74 -0
- package/lib/cjs/io/environment.cjs.map +1 -0
- package/lib/cjs/io/google-docs/GoogleDocsService.cjs +275 -0
- package/lib/cjs/io/google-docs/GoogleDocsService.cjs.map +1 -0
- package/lib/cjs/io/google-docs/index.cjs +19 -0
- package/lib/cjs/io/google-docs/index.cjs.map +1 -0
- package/lib/cjs/io/google-sheets/GoogleSheetsService.cjs +288 -0
- package/lib/cjs/io/google-sheets/GoogleSheetsService.cjs.map +1 -0
- package/lib/cjs/io/google-sheets/index.cjs +24 -0
- package/lib/cjs/io/google-sheets/index.cjs.map +1 -0
- package/lib/cjs/io/graphql/GraphqlService.cjs +143 -0
- package/lib/cjs/io/graphql/GraphqlService.cjs.map +1 -0
- package/lib/cjs/io/graphql/index.cjs +24 -0
- package/lib/cjs/io/graphql/index.cjs.map +1 -0
- package/lib/cjs/io/index.cjs +35 -0
- package/lib/cjs/io/index.cjs.map +1 -0
- package/lib/cjs/io/jira/JiraService.cjs +354 -0
- package/lib/cjs/io/jira/JiraService.cjs.map +1 -0
- package/lib/cjs/io/jira/index.cjs +19 -0
- package/lib/cjs/io/jira/index.cjs.map +1 -0
- package/lib/cjs/io/microsoft-excel/MicrosoftExcelService.cjs +253 -0
- package/lib/cjs/io/microsoft-excel/MicrosoftExcelService.cjs.map +1 -0
- package/lib/cjs/io/microsoft-excel/index.cjs +19 -0
- package/lib/cjs/io/microsoft-excel/index.cjs.map +1 -0
- package/lib/cjs/io/microsoft-sharepoint/MicrosoftSharePointService.cjs +261 -0
- package/lib/cjs/io/microsoft-sharepoint/MicrosoftSharePointService.cjs.map +1 -0
- package/lib/cjs/io/microsoft-sharepoint/index.cjs +19 -0
- package/lib/cjs/io/microsoft-sharepoint/index.cjs.map +1 -0
- package/lib/cjs/io/spreadsheet/SpreadsheetService.cjs +205 -0
- package/lib/cjs/io/spreadsheet/SpreadsheetService.cjs.map +1 -0
- package/lib/cjs/io/spreadsheet/index.cjs +25 -0
- package/lib/cjs/io/spreadsheet/index.cjs.map +1 -0
- package/lib/cjs/namespaces/index.cjs +1 -0
- package/lib/cjs/namespaces/index.cjs.map +1 -1
- package/lib/cjs/namespaces/models/credential.model.cjs +115 -0
- package/lib/cjs/namespaces/models/credential.model.cjs.map +1 -0
- package/lib/cjs/namespaces/models/effective-permission.model.cjs +2 -0
- package/lib/cjs/namespaces/models/effective-permission.model.cjs.map +1 -1
- package/lib/cjs/namespaces/models/group-membership.model.cjs +2 -0
- package/lib/cjs/namespaces/models/group-membership.model.cjs.map +1 -1
- package/lib/cjs/namespaces/models/group.model.cjs +2 -0
- package/lib/cjs/namespaces/models/group.model.cjs.map +1 -1
- package/lib/cjs/namespaces/models/index.cjs +1 -0
- package/lib/cjs/namespaces/models/index.cjs.map +1 -1
- package/lib/cjs/namespaces/models/inheritance-block.model.cjs +2 -0
- package/lib/cjs/namespaces/models/inheritance-block.model.cjs.map +1 -1
- package/lib/cjs/namespaces/models/org-unit-closure.model.cjs +2 -0
- package/lib/cjs/namespaces/models/org-unit-closure.model.cjs.map +1 -1
- package/lib/cjs/namespaces/models/org-unit-membership.model.cjs +2 -0
- package/lib/cjs/namespaces/models/org-unit-membership.model.cjs.map +1 -1
- package/lib/cjs/namespaces/models/org-unit-profile.model.cjs +2 -0
- package/lib/cjs/namespaces/models/org-unit-profile.model.cjs.map +1 -1
- package/lib/cjs/namespaces/models/org-unit.model.cjs +2 -0
- package/lib/cjs/namespaces/models/org-unit.model.cjs.map +1 -1
- package/lib/cjs/namespaces/models/permission.model.cjs +2 -0
- package/lib/cjs/namespaces/models/permission.model.cjs.map +1 -1
- package/lib/cjs/namespaces/models/principal.model.cjs +2 -0
- package/lib/cjs/namespaces/models/principal.model.cjs.map +1 -1
- package/lib/cjs/namespaces/models/protected-resource.model.cjs +2 -0
- package/lib/cjs/namespaces/models/protected-resource.model.cjs.map +1 -1
- package/lib/cjs/namespaces/models/resource-grant.model.cjs +2 -0
- package/lib/cjs/namespaces/models/resource-grant.model.cjs.map +1 -1
- package/lib/cjs/namespaces/models/role-assignment.model.cjs +2 -0
- package/lib/cjs/namespaces/models/role-assignment.model.cjs.map +1 -1
- package/lib/cjs/namespaces/models/role-permission.model.cjs +2 -0
- package/lib/cjs/namespaces/models/role-permission.model.cjs.map +1 -1
- package/lib/cjs/namespaces/models/role.model.cjs +2 -0
- package/lib/cjs/namespaces/models/role.model.cjs.map +1 -1
- package/lib/cjs/namespaces/models/storage-binding.model.cjs +2 -0
- package/lib/cjs/namespaces/models/storage-binding.model.cjs.map +1 -1
- package/lib/cjs/namespaces/models/tenant-membership.model.cjs +2 -0
- package/lib/cjs/namespaces/models/tenant-membership.model.cjs.map +1 -1
- package/lib/cjs/namespaces/models/tenant-profile.model.cjs +2 -0
- package/lib/cjs/namespaces/models/tenant-profile.model.cjs.map +1 -1
- package/lib/cjs/namespaces/models/tenant.model.cjs +2 -0
- package/lib/cjs/namespaces/models/tenant.model.cjs.map +1 -1
- package/lib/cjs/namespaces/models/user.model.cjs +2 -0
- package/lib/cjs/namespaces/models/user.model.cjs.map +1 -1
- package/lib/cjs/namespaces/rls/index.cjs +28 -0
- package/lib/cjs/namespaces/rls/index.cjs.map +1 -0
- package/lib/cjs/namespaces/rls/principal-resolver.cjs +66 -0
- package/lib/cjs/namespaces/rls/principal-resolver.cjs.map +1 -0
- package/lib/cjs/namespaces/rls/rls-bootstrap.service.cjs +269 -0
- package/lib/cjs/namespaces/rls/rls-bootstrap.service.cjs.map +1 -0
- package/lib/cjs/namespaces/rls/rls.constants.cjs +79 -0
- package/lib/cjs/namespaces/rls/rls.constants.cjs.map +1 -0
- package/lib/cjs/namespaces/rls/rls.template.cjs +719 -0
- package/lib/cjs/namespaces/rls/rls.template.cjs.map +1 -0
- package/lib/cjs/namespaces/rls/rls.types.cjs +4 -0
- package/lib/cjs/namespaces/rls/rls.types.cjs.map +1 -0
- package/lib/cjs/namespaces/rls/session-binding.cjs +70 -0
- package/lib/cjs/namespaces/rls/session-binding.cjs.map +1 -0
- package/lib/cjs/namespaces/services/credential.service.cjs +327 -0
- package/lib/cjs/namespaces/services/credential.service.cjs.map +1 -0
- package/lib/cjs/namespaces/services/index.cjs +1 -0
- package/lib/cjs/namespaces/services/index.cjs.map +1 -1
- package/lib/cjs/namespaces/types.cjs +6 -1
- package/lib/cjs/namespaces/types.cjs.map +1 -1
- package/lib/cjs/redis/adapter.cjs +7 -1
- package/lib/cjs/redis/adapter.cjs.map +1 -1
- package/lib/cjs/secrets/InfraCredentialBootstrap.cjs +80 -0
- package/lib/cjs/secrets/InfraCredentialBootstrap.cjs.map +1 -0
- package/lib/cjs/secrets/aws/AwsSecretService.cjs +2 -15
- package/lib/cjs/secrets/aws/AwsSecretService.cjs.map +1 -1
- package/lib/cjs/secrets/azure/AzureKeyVaultSecretService.cjs +2 -16
- package/lib/cjs/secrets/azure/AzureKeyVaultSecretService.cjs.map +1 -1
- package/lib/cjs/secrets/core/SecretReference.cjs +1 -0
- package/lib/cjs/secrets/core/SecretReference.cjs.map +1 -1
- package/lib/cjs/secrets/fs/FsSecretEnvironment.cjs +28 -0
- package/lib/cjs/secrets/fs/FsSecretEnvironment.cjs.map +1 -0
- package/lib/cjs/secrets/fs/FsSecretService.cjs +420 -0
- package/lib/cjs/secrets/fs/FsSecretService.cjs.map +1 -0
- package/lib/cjs/secrets/fs/FsSecretServiceConfig.cjs +25 -0
- package/lib/cjs/secrets/fs/FsSecretServiceConfig.cjs.map +1 -0
- package/lib/cjs/secrets/fs/index.cjs +27 -0
- package/lib/cjs/secrets/fs/index.cjs.map +1 -0
- package/lib/cjs/secrets/gcp/GcpSecretManagerService.cjs +2 -16
- package/lib/cjs/secrets/gcp/GcpSecretManagerService.cjs.map +1 -1
- package/lib/cjs/secrets/index.cjs +2 -0
- package/lib/cjs/secrets/index.cjs.map +1 -1
- package/lib/cjs/secrets/model/ModelSecretService.cjs +335 -43
- package/lib/cjs/secrets/model/ModelSecretService.cjs.map +1 -1
- package/lib/cjs/secrets/model/Secret.cjs +83 -5
- package/lib/cjs/secrets/model/Secret.cjs.map +1 -1
- package/lib/cjs/secrets/onepassword/OnePasswordSecretService.cjs +2 -16
- package/lib/cjs/secrets/onepassword/OnePasswordSecretService.cjs.map +1 -1
- package/lib/cjs/secrets/vault/VaultSecretService.cjs +2 -16
- package/lib/cjs/secrets/vault/VaultSecretService.cjs.map +1 -1
- package/lib/cjs/shared/environmentValue.cjs +24 -0
- package/lib/cjs/shared/environmentValue.cjs.map +1 -1
- package/lib/cjs/shared/http/HttpApiService.cjs +190 -0
- package/lib/cjs/shared/http/HttpApiService.cjs.map +1 -0
- package/lib/cjs/shared/http/hermeticBoot.cjs +150 -0
- package/lib/cjs/shared/http/hermeticBoot.cjs.map +1 -0
- package/lib/cjs/shared/http/index.cjs +28 -0
- package/lib/cjs/shared/http/index.cjs.map +1 -0
- package/lib/esm/blob/azure/AzureBlobStoreService.js +13 -21
- package/lib/esm/blob/azure/AzureBlobStoreService.js.map +1 -1
- package/lib/esm/blob/core/BlobStoreService.js +26 -25
- package/lib/esm/blob/core/BlobStoreService.js.map +1 -1
- package/lib/esm/blob/gcp/GcsBlobStoreService.js +13 -21
- package/lib/esm/blob/gcp/GcsBlobStoreService.js.map +1 -1
- package/lib/esm/blob/s3/S3BlobStoreService.js +12 -14
- package/lib/esm/blob/s3/S3BlobStoreService.js.map +1 -1
- package/lib/esm/blob/s3/S3CompatibleBlobStoreService.js +14 -16
- package/lib/esm/blob/s3/S3CompatibleBlobStoreService.js.map +1 -1
- package/lib/esm/calendar/environment.js +44 -0
- package/lib/esm/calendar/environment.js.map +1 -0
- package/lib/esm/calendar/google-calendar/GoogleCalendarService.js +333 -0
- package/lib/esm/calendar/google-calendar/GoogleCalendarService.js.map +1 -0
- package/lib/esm/calendar/google-calendar/index.js +3 -0
- package/lib/esm/calendar/google-calendar/index.js.map +1 -0
- package/lib/esm/comms/discord/DiscordService.js +313 -0
- package/lib/esm/comms/discord/DiscordService.js.map +1 -0
- package/lib/esm/comms/discord/index.js +2 -0
- package/lib/esm/comms/discord/index.js.map +1 -0
- package/lib/esm/comms/email/EmailService.js +338 -0
- package/lib/esm/comms/email/EmailService.js.map +1 -0
- package/lib/esm/comms/email/index.js +12 -0
- package/lib/esm/comms/email/index.js.map +1 -0
- package/lib/esm/comms/email/mime.js +218 -0
- package/lib/esm/comms/email/mime.js.map +1 -0
- package/lib/esm/comms/email/smtp.js +166 -0
- package/lib/esm/comms/email/smtp.js.map +1 -0
- package/lib/esm/comms/environment.js +75 -0
- package/lib/esm/comms/environment.js.map +1 -0
- package/lib/esm/comms/gmail/GmailService.js +230 -0
- package/lib/esm/comms/gmail/GmailService.js.map +1 -0
- package/lib/esm/comms/gmail/index.js +7 -0
- package/lib/esm/comms/gmail/index.js.map +1 -0
- package/lib/esm/comms/index.js +17 -0
- package/lib/esm/comms/index.js.map +1 -0
- package/lib/esm/comms/outlook/MicrosoftOutlookService.js +320 -0
- package/lib/esm/comms/outlook/MicrosoftOutlookService.js.map +1 -0
- package/lib/esm/comms/outlook/index.js +2 -0
- package/lib/esm/comms/outlook/index.js.map +1 -0
- package/lib/esm/comms/slack/SlackService.js +259 -0
- package/lib/esm/comms/slack/SlackService.js.map +1 -0
- package/lib/esm/comms/slack/index.js +7 -0
- package/lib/esm/comms/slack/index.js.map +1 -0
- package/lib/esm/comms/teams/TeamsService.js +204 -0
- package/lib/esm/comms/teams/TeamsService.js.map +1 -0
- package/lib/esm/comms/teams/index.js +7 -0
- package/lib/esm/comms/teams/index.js.map +1 -0
- package/lib/esm/comms/telegram/TelegramService.js +191 -0
- package/lib/esm/comms/telegram/TelegramService.js.map +1 -0
- package/lib/esm/comms/telegram/index.js +7 -0
- package/lib/esm/comms/telegram/index.js.map +1 -0
- package/lib/esm/comms/whatsapp/WhatsAppService.js +269 -0
- package/lib/esm/comms/whatsapp/WhatsAppService.js.map +1 -0
- package/lib/esm/comms/whatsapp/index.js +2 -0
- package/lib/esm/comms/whatsapp/index.js.map +1 -0
- package/lib/esm/devops/environment.js +39 -0
- package/lib/esm/devops/environment.js.map +1 -0
- package/lib/esm/devops/github/GithubService.js +297 -0
- package/lib/esm/devops/github/GithubService.js.map +1 -0
- package/lib/esm/devops/github/index.js +7 -0
- package/lib/esm/devops/github/index.js.map +1 -0
- package/lib/esm/devops/gitlab/GitlabService.js +277 -0
- package/lib/esm/devops/gitlab/GitlabService.js.map +1 -0
- package/lib/esm/devops/gitlab/index.js +7 -0
- package/lib/esm/devops/gitlab/index.js.map +1 -0
- package/lib/esm/devops/index.js +11 -0
- package/lib/esm/devops/index.js.map +1 -0
- package/lib/esm/feature-flags/models/FeatureFlag.model.js +2 -0
- package/lib/esm/feature-flags/models/FeatureFlag.model.js.map +1 -1
- package/lib/esm/feature-flags/models/FeatureFlagAccess.model.js +2 -0
- package/lib/esm/feature-flags/models/FeatureFlagAccess.model.js.map +1 -1
- package/lib/esm/index.js +3 -3
- package/lib/esm/io/airtable/AirtableService.js +261 -0
- package/lib/esm/io/airtable/AirtableService.js.map +1 -0
- package/lib/esm/io/airtable/index.js +7 -0
- package/lib/esm/io/airtable/index.js.map +1 -0
- package/lib/esm/io/confluence/ConfluenceService.js +312 -0
- package/lib/esm/io/confluence/ConfluenceService.js.map +1 -0
- package/lib/esm/io/confluence/index.js +2 -0
- package/lib/esm/io/confluence/index.js.map +1 -0
- package/lib/esm/io/environment.js +70 -0
- package/lib/esm/io/environment.js.map +1 -0
- package/lib/esm/io/google-docs/GoogleDocsService.js +270 -0
- package/lib/esm/io/google-docs/GoogleDocsService.js.map +1 -0
- package/lib/esm/io/google-docs/index.js +2 -0
- package/lib/esm/io/google-docs/index.js.map +1 -0
- package/lib/esm/io/google-sheets/GoogleSheetsService.js +283 -0
- package/lib/esm/io/google-sheets/GoogleSheetsService.js.map +1 -0
- package/lib/esm/io/google-sheets/index.js +7 -0
- package/lib/esm/io/google-sheets/index.js.map +1 -0
- package/lib/esm/io/graphql/GraphqlService.js +138 -0
- package/lib/esm/io/graphql/GraphqlService.js.map +1 -0
- package/lib/esm/io/graphql/index.js +7 -0
- package/lib/esm/io/graphql/index.js.map +1 -0
- package/lib/esm/io/index.js +18 -0
- package/lib/esm/io/index.js.map +1 -0
- package/lib/esm/io/jira/JiraService.js +349 -0
- package/lib/esm/io/jira/JiraService.js.map +1 -0
- package/lib/esm/io/jira/index.js +2 -0
- package/lib/esm/io/jira/index.js.map +1 -0
- package/lib/esm/io/microsoft-excel/MicrosoftExcelService.js +248 -0
- package/lib/esm/io/microsoft-excel/MicrosoftExcelService.js.map +1 -0
- package/lib/esm/io/microsoft-excel/index.js +2 -0
- package/lib/esm/io/microsoft-excel/index.js.map +1 -0
- package/lib/esm/io/microsoft-sharepoint/MicrosoftSharePointService.js +256 -0
- package/lib/esm/io/microsoft-sharepoint/MicrosoftSharePointService.js.map +1 -0
- package/lib/esm/io/microsoft-sharepoint/index.js +2 -0
- package/lib/esm/io/microsoft-sharepoint/index.js.map +1 -0
- package/lib/esm/io/spreadsheet/SpreadsheetService.js +200 -0
- package/lib/esm/io/spreadsheet/SpreadsheetService.js.map +1 -0
- package/lib/esm/io/spreadsheet/index.js +8 -0
- package/lib/esm/io/spreadsheet/index.js.map +1 -0
- package/lib/esm/namespaces/index.js +1 -0
- package/lib/esm/namespaces/index.js.map +1 -1
- package/lib/esm/namespaces/models/credential.model.js +106 -0
- package/lib/esm/namespaces/models/credential.model.js.map +1 -0
- package/lib/esm/namespaces/models/effective-permission.model.js +2 -0
- package/lib/esm/namespaces/models/effective-permission.model.js.map +1 -1
- package/lib/esm/namespaces/models/group-membership.model.js +2 -0
- package/lib/esm/namespaces/models/group-membership.model.js.map +1 -1
- package/lib/esm/namespaces/models/group.model.js +2 -0
- package/lib/esm/namespaces/models/group.model.js.map +1 -1
- package/lib/esm/namespaces/models/index.js +1 -0
- package/lib/esm/namespaces/models/index.js.map +1 -1
- package/lib/esm/namespaces/models/inheritance-block.model.js +2 -0
- package/lib/esm/namespaces/models/inheritance-block.model.js.map +1 -1
- package/lib/esm/namespaces/models/org-unit-closure.model.js +2 -0
- package/lib/esm/namespaces/models/org-unit-closure.model.js.map +1 -1
- package/lib/esm/namespaces/models/org-unit-membership.model.js +2 -0
- package/lib/esm/namespaces/models/org-unit-membership.model.js.map +1 -1
- package/lib/esm/namespaces/models/org-unit-profile.model.js +2 -0
- package/lib/esm/namespaces/models/org-unit-profile.model.js.map +1 -1
- package/lib/esm/namespaces/models/org-unit.model.js +2 -0
- package/lib/esm/namespaces/models/org-unit.model.js.map +1 -1
- package/lib/esm/namespaces/models/permission.model.js +2 -0
- package/lib/esm/namespaces/models/permission.model.js.map +1 -1
- package/lib/esm/namespaces/models/principal.model.js +2 -0
- package/lib/esm/namespaces/models/principal.model.js.map +1 -1
- package/lib/esm/namespaces/models/protected-resource.model.js +2 -0
- package/lib/esm/namespaces/models/protected-resource.model.js.map +1 -1
- package/lib/esm/namespaces/models/resource-grant.model.js +2 -0
- package/lib/esm/namespaces/models/resource-grant.model.js.map +1 -1
- package/lib/esm/namespaces/models/role-assignment.model.js +2 -0
- package/lib/esm/namespaces/models/role-assignment.model.js.map +1 -1
- package/lib/esm/namespaces/models/role-permission.model.js +2 -0
- package/lib/esm/namespaces/models/role-permission.model.js.map +1 -1
- package/lib/esm/namespaces/models/role.model.js +2 -0
- package/lib/esm/namespaces/models/role.model.js.map +1 -1
- package/lib/esm/namespaces/models/storage-binding.model.js +2 -0
- package/lib/esm/namespaces/models/storage-binding.model.js.map +1 -1
- package/lib/esm/namespaces/models/tenant-membership.model.js +2 -0
- package/lib/esm/namespaces/models/tenant-membership.model.js.map +1 -1
- package/lib/esm/namespaces/models/tenant-profile.model.js +2 -0
- package/lib/esm/namespaces/models/tenant-profile.model.js.map +1 -1
- package/lib/esm/namespaces/models/tenant.model.js +2 -0
- package/lib/esm/namespaces/models/tenant.model.js.map +1 -1
- package/lib/esm/namespaces/models/user.model.js +2 -0
- package/lib/esm/namespaces/models/user.model.js.map +1 -1
- package/lib/esm/namespaces/rls/index.js +11 -0
- package/lib/esm/namespaces/rls/index.js.map +1 -0
- package/lib/esm/namespaces/rls/principal-resolver.js +61 -0
- package/lib/esm/namespaces/rls/principal-resolver.js.map +1 -0
- package/lib/esm/namespaces/rls/rls-bootstrap.service.js +261 -0
- package/lib/esm/namespaces/rls/rls-bootstrap.service.js.map +1 -0
- package/lib/esm/namespaces/rls/rls.constants.js +75 -0
- package/lib/esm/namespaces/rls/rls.constants.js.map +1 -0
- package/lib/esm/namespaces/rls/rls.template.js +711 -0
- package/lib/esm/namespaces/rls/rls.template.js.map +1 -0
- package/lib/esm/namespaces/rls/rls.types.js +9 -0
- package/lib/esm/namespaces/rls/rls.types.js.map +1 -0
- package/lib/esm/namespaces/rls/session-binding.js +65 -0
- package/lib/esm/namespaces/rls/session-binding.js.map +1 -0
- package/lib/esm/namespaces/services/credential.service.js +322 -0
- package/lib/esm/namespaces/services/credential.service.js.map +1 -0
- package/lib/esm/namespaces/services/index.js +1 -0
- package/lib/esm/namespaces/services/index.js.map +1 -1
- package/lib/esm/namespaces/types.js +6 -0
- package/lib/esm/namespaces/types.js.map +1 -1
- package/lib/esm/redis/adapter.js +7 -1
- package/lib/esm/redis/adapter.js.map +1 -1
- package/lib/esm/secrets/InfraCredentialBootstrap.js +74 -0
- package/lib/esm/secrets/InfraCredentialBootstrap.js.map +1 -0
- package/lib/esm/secrets/aws/AwsSecretService.js +3 -13
- package/lib/esm/secrets/aws/AwsSecretService.js.map +1 -1
- package/lib/esm/secrets/azure/AzureKeyVaultSecretService.js +2 -13
- package/lib/esm/secrets/azure/AzureKeyVaultSecretService.js.map +1 -1
- package/lib/esm/secrets/core/SecretReference.js +1 -0
- package/lib/esm/secrets/core/SecretReference.js.map +1 -1
- package/lib/esm/secrets/fs/FsSecretEnvironment.js +24 -0
- package/lib/esm/secrets/fs/FsSecretEnvironment.js.map +1 -0
- package/lib/esm/secrets/fs/FsSecretService.js +412 -0
- package/lib/esm/secrets/fs/FsSecretService.js.map +1 -0
- package/lib/esm/secrets/fs/FsSecretServiceConfig.js +21 -0
- package/lib/esm/secrets/fs/FsSecretServiceConfig.js.map +1 -0
- package/lib/esm/secrets/fs/index.js +10 -0
- package/lib/esm/secrets/fs/index.js.map +1 -0
- package/lib/esm/secrets/gcp/GcpSecretManagerService.js +2 -13
- package/lib/esm/secrets/gcp/GcpSecretManagerService.js.map +1 -1
- package/lib/esm/secrets/index.js +2 -0
- package/lib/esm/secrets/index.js.map +1 -1
- package/lib/esm/secrets/model/ModelSecretService.js +337 -42
- package/lib/esm/secrets/model/ModelSecretService.js.map +1 -1
- package/lib/esm/secrets/model/Secret.js +86 -7
- package/lib/esm/secrets/model/Secret.js.map +1 -1
- package/lib/esm/secrets/onepassword/OnePasswordSecretService.js +2 -13
- package/lib/esm/secrets/onepassword/OnePasswordSecretService.js.map +1 -1
- package/lib/esm/secrets/vault/VaultSecretService.js +2 -13
- package/lib/esm/secrets/vault/VaultSecretService.js.map +1 -1
- package/lib/esm/shared/environmentValue.js +24 -0
- package/lib/esm/shared/environmentValue.js.map +1 -1
- package/lib/esm/shared/http/HttpApiService.js +181 -0
- package/lib/esm/shared/http/HttpApiService.js.map +1 -0
- package/lib/esm/shared/http/hermeticBoot.js +146 -0
- package/lib/esm/shared/http/hermeticBoot.js.map +1 -0
- package/lib/esm/shared/http/index.js +11 -0
- package/lib/esm/shared/http/index.js.map +1 -0
- package/lib/types/blob/azure/AzureBlobStoreService.d.cts +7 -7
- package/lib/types/blob/azure/AzureBlobStoreService.d.mts +7 -7
- package/lib/types/blob/core/BlobStoreService.d.cts +28 -27
- package/lib/types/blob/core/BlobStoreService.d.mts +28 -27
- package/lib/types/blob/gcp/GcsBlobStoreService.d.cts +7 -7
- package/lib/types/blob/gcp/GcsBlobStoreService.d.mts +7 -7
- package/lib/types/blob/s3/S3BlobStoreService.d.cts +9 -1
- package/lib/types/blob/s3/S3BlobStoreService.d.mts +9 -1
- package/lib/types/blob/s3/S3CompatibleBlobStoreService.d.cts +11 -15
- package/lib/types/blob/s3/S3CompatibleBlobStoreService.d.mts +11 -15
- package/lib/types/calendar/environment.d.cts +48 -0
- package/lib/types/calendar/environment.d.mts +48 -0
- package/lib/types/calendar/google-calendar/GoogleCalendarService.d.cts +316 -0
- package/lib/types/calendar/google-calendar/GoogleCalendarService.d.mts +316 -0
- package/lib/types/calendar/google-calendar/index.d.cts +2 -0
- package/lib/types/calendar/google-calendar/index.d.mts +2 -0
- package/lib/types/comms/discord/DiscordService.d.cts +285 -0
- package/lib/types/comms/discord/DiscordService.d.mts +285 -0
- package/lib/types/comms/discord/index.d.cts +1 -0
- package/lib/types/comms/discord/index.d.mts +1 -0
- package/lib/types/comms/email/EmailService.d.cts +184 -0
- package/lib/types/comms/email/EmailService.d.mts +184 -0
- package/lib/types/comms/email/index.d.cts +11 -0
- package/lib/types/comms/email/index.d.mts +11 -0
- package/lib/types/comms/email/mime.d.cts +84 -0
- package/lib/types/comms/email/mime.d.mts +84 -0
- package/lib/types/comms/email/smtp.d.cts +107 -0
- package/lib/types/comms/email/smtp.d.mts +107 -0
- package/lib/types/comms/environment.d.cts +110 -0
- package/lib/types/comms/environment.d.mts +110 -0
- package/lib/types/comms/gmail/GmailService.d.cts +190 -0
- package/lib/types/comms/gmail/GmailService.d.mts +190 -0
- package/lib/types/comms/gmail/index.d.cts +6 -0
- package/lib/types/comms/gmail/index.d.mts +6 -0
- package/lib/types/comms/index.d.cts +16 -0
- package/lib/types/comms/index.d.mts +16 -0
- package/lib/types/comms/outlook/MicrosoftOutlookService.d.cts +282 -0
- package/lib/types/comms/outlook/MicrosoftOutlookService.d.mts +282 -0
- package/lib/types/comms/outlook/index.d.cts +1 -0
- package/lib/types/comms/outlook/index.d.mts +1 -0
- package/lib/types/comms/slack/SlackService.d.cts +259 -0
- package/lib/types/comms/slack/SlackService.d.mts +259 -0
- package/lib/types/comms/slack/index.d.cts +6 -0
- package/lib/types/comms/slack/index.d.mts +6 -0
- package/lib/types/comms/teams/TeamsService.d.cts +172 -0
- package/lib/types/comms/teams/TeamsService.d.mts +172 -0
- package/lib/types/comms/teams/index.d.cts +6 -0
- package/lib/types/comms/teams/index.d.mts +6 -0
- package/lib/types/comms/telegram/TelegramService.d.cts +202 -0
- package/lib/types/comms/telegram/TelegramService.d.mts +202 -0
- package/lib/types/comms/telegram/index.d.cts +6 -0
- package/lib/types/comms/telegram/index.d.mts +6 -0
- package/lib/types/comms/whatsapp/WhatsAppService.d.cts +258 -0
- package/lib/types/comms/whatsapp/WhatsAppService.d.mts +258 -0
- package/lib/types/comms/whatsapp/index.d.cts +1 -0
- package/lib/types/comms/whatsapp/index.d.mts +1 -0
- package/lib/types/devops/environment.d.cts +62 -0
- package/lib/types/devops/environment.d.mts +62 -0
- package/lib/types/devops/github/GithubService.d.cts +287 -0
- package/lib/types/devops/github/GithubService.d.mts +287 -0
- package/lib/types/devops/github/index.d.cts +6 -0
- package/lib/types/devops/github/index.d.mts +6 -0
- package/lib/types/devops/gitlab/GitlabService.d.cts +277 -0
- package/lib/types/devops/gitlab/GitlabService.d.mts +277 -0
- package/lib/types/devops/gitlab/index.d.cts +6 -0
- package/lib/types/devops/gitlab/index.d.mts +6 -0
- package/lib/types/devops/index.d.cts +10 -0
- package/lib/types/devops/index.d.mts +10 -0
- package/lib/types/index.d.cts +2 -2
- package/lib/types/index.d.mts +2 -2
- package/lib/types/io/airtable/AirtableService.d.cts +268 -0
- package/lib/types/io/airtable/AirtableService.d.mts +268 -0
- package/lib/types/io/airtable/index.d.cts +6 -0
- package/lib/types/io/airtable/index.d.mts +6 -0
- package/lib/types/io/confluence/ConfluenceService.d.cts +250 -0
- package/lib/types/io/confluence/ConfluenceService.d.mts +250 -0
- package/lib/types/io/confluence/index.d.cts +1 -0
- package/lib/types/io/confluence/index.d.mts +1 -0
- package/lib/types/io/environment.d.cts +107 -0
- package/lib/types/io/environment.d.mts +107 -0
- package/lib/types/io/google-docs/GoogleDocsService.d.cts +188 -0
- package/lib/types/io/google-docs/GoogleDocsService.d.mts +188 -0
- package/lib/types/io/google-docs/index.d.cts +1 -0
- package/lib/types/io/google-docs/index.d.mts +1 -0
- package/lib/types/io/google-sheets/GoogleSheetsService.d.cts +204 -0
- package/lib/types/io/google-sheets/GoogleSheetsService.d.mts +204 -0
- package/lib/types/io/google-sheets/index.d.cts +6 -0
- package/lib/types/io/google-sheets/index.d.mts +6 -0
- package/lib/types/io/graphql/GraphqlService.d.cts +173 -0
- package/lib/types/io/graphql/GraphqlService.d.mts +173 -0
- package/lib/types/io/graphql/index.d.cts +6 -0
- package/lib/types/io/graphql/index.d.mts +6 -0
- package/lib/types/io/index.d.cts +17 -0
- package/lib/types/io/index.d.mts +17 -0
- package/lib/types/io/jira/JiraService.d.cts +300 -0
- package/lib/types/io/jira/JiraService.d.mts +300 -0
- package/lib/types/io/jira/index.d.cts +1 -0
- package/lib/types/io/jira/index.d.mts +1 -0
- package/lib/types/io/microsoft-excel/MicrosoftExcelService.d.cts +230 -0
- package/lib/types/io/microsoft-excel/MicrosoftExcelService.d.mts +230 -0
- package/lib/types/io/microsoft-excel/index.d.cts +1 -0
- package/lib/types/io/microsoft-excel/index.d.mts +1 -0
- package/lib/types/io/microsoft-sharepoint/MicrosoftSharePointService.d.cts +226 -0
- package/lib/types/io/microsoft-sharepoint/MicrosoftSharePointService.d.mts +226 -0
- package/lib/types/io/microsoft-sharepoint/index.d.cts +1 -0
- package/lib/types/io/microsoft-sharepoint/index.d.mts +1 -0
- package/lib/types/io/spreadsheet/SpreadsheetService.d.cts +144 -0
- package/lib/types/io/spreadsheet/SpreadsheetService.d.mts +144 -0
- package/lib/types/io/spreadsheet/index.d.cts +7 -0
- package/lib/types/io/spreadsheet/index.d.mts +7 -0
- package/lib/types/namespaces/index.d.cts +1 -0
- package/lib/types/namespaces/index.d.mts +1 -0
- package/lib/types/namespaces/models/credential.model.d.cts +23 -0
- package/lib/types/namespaces/models/credential.model.d.mts +23 -0
- package/lib/types/namespaces/models/index.d.cts +1 -0
- package/lib/types/namespaces/models/index.d.mts +1 -0
- package/lib/types/namespaces/rls/index.d.cts +10 -0
- package/lib/types/namespaces/rls/index.d.mts +10 -0
- package/lib/types/namespaces/rls/principal-resolver.d.cts +47 -0
- package/lib/types/namespaces/rls/principal-resolver.d.mts +47 -0
- package/lib/types/namespaces/rls/rls-bootstrap.service.d.cts +157 -0
- package/lib/types/namespaces/rls/rls-bootstrap.service.d.mts +157 -0
- package/lib/types/namespaces/rls/rls.constants.d.cts +52 -0
- package/lib/types/namespaces/rls/rls.constants.d.mts +52 -0
- package/lib/types/namespaces/rls/rls.template.d.cts +42 -0
- package/lib/types/namespaces/rls/rls.template.d.mts +42 -0
- package/lib/types/namespaces/rls/rls.types.d.cts +77 -0
- package/lib/types/namespaces/rls/rls.types.d.mts +77 -0
- package/lib/types/namespaces/rls/session-binding.d.cts +87 -0
- package/lib/types/namespaces/rls/session-binding.d.mts +87 -0
- package/lib/types/namespaces/services/credential.service.d.cts +175 -0
- package/lib/types/namespaces/services/credential.service.d.mts +175 -0
- package/lib/types/namespaces/services/index.d.cts +1 -0
- package/lib/types/namespaces/services/index.d.mts +1 -0
- package/lib/types/namespaces/types.d.cts +37 -0
- package/lib/types/namespaces/types.d.mts +37 -0
- package/lib/types/redis/adapter.d.cts +2 -0
- package/lib/types/redis/adapter.d.mts +2 -0
- package/lib/types/redis/types.d.cts +27 -2
- package/lib/types/redis/types.d.mts +27 -2
- package/lib/types/secrets/InfraCredentialBootstrap.d.cts +100 -0
- package/lib/types/secrets/InfraCredentialBootstrap.d.mts +100 -0
- package/lib/types/secrets/core/SecretTypes.d.cts +15 -1
- package/lib/types/secrets/core/SecretTypes.d.mts +15 -1
- package/lib/types/secrets/fs/FsSecretEnvironment.d.cts +42 -0
- package/lib/types/secrets/fs/FsSecretEnvironment.d.mts +42 -0
- package/lib/types/secrets/fs/FsSecretService.d.cts +207 -0
- package/lib/types/secrets/fs/FsSecretService.d.mts +207 -0
- package/lib/types/secrets/fs/FsSecretServiceConfig.d.cts +37 -0
- package/lib/types/secrets/fs/FsSecretServiceConfig.d.mts +37 -0
- package/lib/types/secrets/fs/index.d.cts +9 -0
- package/lib/types/secrets/fs/index.d.mts +9 -0
- package/lib/types/secrets/index.d.cts +2 -0
- package/lib/types/secrets/index.d.mts +2 -0
- package/lib/types/secrets/model/ModelSecretService.d.cts +190 -1
- package/lib/types/secrets/model/ModelSecretService.d.mts +190 -1
- package/lib/types/secrets/model/Secret.d.cts +44 -3
- package/lib/types/secrets/model/Secret.d.mts +44 -3
- package/lib/types/shared/environmentValue.d.cts +24 -0
- package/lib/types/shared/environmentValue.d.mts +24 -0
- package/lib/types/shared/http/HttpApiService.d.cts +193 -0
- package/lib/types/shared/http/HttpApiService.d.mts +193 -0
- package/lib/types/shared/http/hermeticBoot.d.cts +84 -0
- package/lib/types/shared/http/hermeticBoot.d.mts +84 -0
- package/lib/types/shared/http/index.d.cts +10 -0
- package/lib/types/shared/http/index.d.mts +10 -0
- package/package.json +279 -6
- package/sql/002_rls.sql +660 -15
- package/sql/004_credentials.sql +46 -0
|
@@ -0,0 +1,285 @@
|
|
|
1
|
+
import { HttpApiService, type HttpApiServiceConfig } from "../../shared/http/index.d.mts";
|
|
2
|
+
/**
|
|
3
|
+
* @description Configuration for the Discord service
|
|
4
|
+
* @summary Extends {@link HttpApiServiceConfig} with the Discord bot token
|
|
5
|
+
* sent as `Authorization: Bot <token>`. When omitted, the `comms.discord`
|
|
6
|
+
* environment slice supplies `token` (plus optional `baseUrl`/`timeout`).
|
|
7
|
+
* The token is a credential reference read from configuration, never a value
|
|
8
|
+
* to hard-code in source.
|
|
9
|
+
* @category Comms
|
|
10
|
+
* @memberOf module:integrations/comms/discord/service
|
|
11
|
+
*/
|
|
12
|
+
export interface DiscordServiceConfig extends HttpApiServiceConfig {
|
|
13
|
+
/**
|
|
14
|
+
* @description Discord bot token
|
|
15
|
+
* @summary Sent as `Authorization: Bot <token>` with every API call.
|
|
16
|
+
*/
|
|
17
|
+
token?: string;
|
|
18
|
+
}
|
|
19
|
+
/**
|
|
20
|
+
* @description Input for sending a Discord channel message
|
|
21
|
+
* @summary Carries the destination `channelId`, the message `content`, the
|
|
22
|
+
* optional text-to-speech flag, and optional rich `embeds`.
|
|
23
|
+
* @category Comms
|
|
24
|
+
* @memberOf module:integrations/comms/discord/service
|
|
25
|
+
*/
|
|
26
|
+
export interface DiscordMessageInput {
|
|
27
|
+
/**
|
|
28
|
+
* @description ID of the channel that receives the message
|
|
29
|
+
*/
|
|
30
|
+
channelId: string;
|
|
31
|
+
/**
|
|
32
|
+
* @description Plain-text message body
|
|
33
|
+
*/
|
|
34
|
+
content: string;
|
|
35
|
+
/**
|
|
36
|
+
* @description Whether Discord reads the message with text-to-speech
|
|
37
|
+
*/
|
|
38
|
+
tts?: boolean;
|
|
39
|
+
/**
|
|
40
|
+
* @description Rich embed payloads attached to the message
|
|
41
|
+
*/
|
|
42
|
+
embeds?: unknown[];
|
|
43
|
+
}
|
|
44
|
+
/**
|
|
45
|
+
* @description Input for listing a Discord channel's messages
|
|
46
|
+
* @summary Carries the `channelId` plus optional page size and a `before`
|
|
47
|
+
* message ID cursor for fetching older messages.
|
|
48
|
+
* @category Comms
|
|
49
|
+
* @memberOf module:integrations/comms/discord/service
|
|
50
|
+
*/
|
|
51
|
+
export interface DiscordMessageListInput {
|
|
52
|
+
/**
|
|
53
|
+
* @description ID of the channel to list messages from
|
|
54
|
+
*/
|
|
55
|
+
channelId: string;
|
|
56
|
+
/**
|
|
57
|
+
* @description Maximum number of messages to return
|
|
58
|
+
*/
|
|
59
|
+
limit?: number;
|
|
60
|
+
/**
|
|
61
|
+
* @description Message ID cursor; only older messages are returned
|
|
62
|
+
*/
|
|
63
|
+
before?: string;
|
|
64
|
+
}
|
|
65
|
+
/**
|
|
66
|
+
* @description Input for creating a Discord guild channel
|
|
67
|
+
* @summary Carries the target `guildId`, the new channel `name`, and the
|
|
68
|
+
* optional channel `type` (Discord numeric type, default `0` for text),
|
|
69
|
+
* `topic`, and `parentId` (category).
|
|
70
|
+
* @category Comms
|
|
71
|
+
* @memberOf module:integrations/comms/discord/service
|
|
72
|
+
*/
|
|
73
|
+
export interface DiscordChannelInput {
|
|
74
|
+
/**
|
|
75
|
+
* @description ID of the guild that owns the new channel
|
|
76
|
+
*/
|
|
77
|
+
guildId: string;
|
|
78
|
+
/**
|
|
79
|
+
* @description Name of the new channel
|
|
80
|
+
*/
|
|
81
|
+
name: string;
|
|
82
|
+
/**
|
|
83
|
+
* @description Discord numeric channel type (default `0`, text channel)
|
|
84
|
+
*/
|
|
85
|
+
type?: number;
|
|
86
|
+
/**
|
|
87
|
+
* @description Optional channel topic
|
|
88
|
+
*/
|
|
89
|
+
topic?: string;
|
|
90
|
+
/**
|
|
91
|
+
* @description Optional parent category ID
|
|
92
|
+
*/
|
|
93
|
+
parentId?: string;
|
|
94
|
+
}
|
|
95
|
+
/**
|
|
96
|
+
* @description Input for adding a reaction to a Discord message
|
|
97
|
+
* @summary Identifies the `channelId`, the target `messageId`, and the
|
|
98
|
+
* `emoji` to add as the bot user.
|
|
99
|
+
* @category Comms
|
|
100
|
+
* @memberOf module:integrations/comms/discord/service
|
|
101
|
+
*/
|
|
102
|
+
export interface DiscordReactionInput {
|
|
103
|
+
/**
|
|
104
|
+
* @description ID of the channel containing the message
|
|
105
|
+
*/
|
|
106
|
+
channelId: string;
|
|
107
|
+
/**
|
|
108
|
+
* @description ID of the message to react to
|
|
109
|
+
*/
|
|
110
|
+
messageId: string;
|
|
111
|
+
/**
|
|
112
|
+
* @description Emoji to add (Unicode character or `name:id` custom emoji)
|
|
113
|
+
*/
|
|
114
|
+
emoji: string;
|
|
115
|
+
}
|
|
116
|
+
/**
|
|
117
|
+
* @description Discord Bot API integration service
|
|
118
|
+
* @summary An undecorated HTTP service for channel messages
|
|
119
|
+
* (`sendMessage`, `getMessage`, `listMessages`), channels (`getChannel`,
|
|
120
|
+
* `listChannels`, `createChannel`, `deleteChannel`), and reactions
|
|
121
|
+
* (`addReaction`). Every operation requires a bot token and throws
|
|
122
|
+
* `InternalError` when it is missing or a required identifier is empty;
|
|
123
|
+
* transport failures are mapped to decaf errors via {@link httpError}. This is
|
|
124
|
+
* the callable comms surface (`core.comms.discord`), not the mastra agent
|
|
125
|
+
* trigger/response kinds.
|
|
126
|
+
* @class DiscordService
|
|
127
|
+
* @extends HttpApiService
|
|
128
|
+
* @category Comms
|
|
129
|
+
* @example
|
|
130
|
+
* ```ts
|
|
131
|
+
* import { DiscordService } from "@decaf-ts/integrations/comms/discord";
|
|
132
|
+
*
|
|
133
|
+
* const discord = new DiscordService();
|
|
134
|
+
* await discord.initialize({ token: process.env.GRAPH_CREDENTIAL_DISCORD_TOKEN });
|
|
135
|
+
* await discord.sendMessage({
|
|
136
|
+
* channelId: process.env.DISCORD_CHANNEL_ID ?? "",
|
|
137
|
+
* content: "Deployment finished",
|
|
138
|
+
* });
|
|
139
|
+
* ```
|
|
140
|
+
* @mermaid
|
|
141
|
+
* sequenceDiagram
|
|
142
|
+
* autonumber
|
|
143
|
+
* participant Caller
|
|
144
|
+
* participant Service as DiscordService
|
|
145
|
+
* participant Discord as Discord Bot API
|
|
146
|
+
* Caller->>Service: sendMessage(input)
|
|
147
|
+
* activate Service
|
|
148
|
+
* Service->>Service: requireBotToken()
|
|
149
|
+
* Service->>Discord: POST /channels/{id}/messages
|
|
150
|
+
* activate Discord
|
|
151
|
+
* Discord-->>Service: message payload
|
|
152
|
+
* deactivate Discord
|
|
153
|
+
* Service-->>Caller: message payload
|
|
154
|
+
* deactivate Service
|
|
155
|
+
* @memberOf module:integrations/comms/discord/service
|
|
156
|
+
*/
|
|
157
|
+
export declare class DiscordService extends HttpApiService<DiscordServiceConfig> {
|
|
158
|
+
/**
|
|
159
|
+
* @description The provider name used in error messages
|
|
160
|
+
*/
|
|
161
|
+
protected readonly serviceName = "Discord";
|
|
162
|
+
/**
|
|
163
|
+
* @description The Discord Bot API base URL
|
|
164
|
+
* @summary Used when the resolved config carries no `baseUrl`.
|
|
165
|
+
* @returns {string} `"https://discord.com/api/v10"`.
|
|
166
|
+
*/
|
|
167
|
+
protected defaultBaseUrl(): string;
|
|
168
|
+
/**
|
|
169
|
+
* @description Builds the Discord bot authorization header
|
|
170
|
+
* @summary Returns `Authorization: Bot <token>` when the config carries a
|
|
171
|
+
* token, and no headers otherwise.
|
|
172
|
+
* @param {DiscordServiceConfig} config - The resolved service configuration.
|
|
173
|
+
* @returns {Record<string, string>} The authorization headers (empty without a token).
|
|
174
|
+
*/
|
|
175
|
+
protected authHeaders(config: DiscordServiceConfig): Record<string, string>;
|
|
176
|
+
/**
|
|
177
|
+
* @description Reads the Discord credentials and defaults from the environment
|
|
178
|
+
* @summary Reads the `comms.discord` environment slice and returns a partial
|
|
179
|
+
* config when a bot token is configured, `undefined` otherwise. Values pass
|
|
180
|
+
* through `envString`/`envNumber` to reject unset-leaf proxies.
|
|
181
|
+
* @returns {Partial<DiscordServiceConfig> | undefined} A partial config, or `undefined` when no Discord token is configured.
|
|
182
|
+
*/
|
|
183
|
+
protected configFromEnvironment(): Partial<DiscordServiceConfig> | undefined;
|
|
184
|
+
/**
|
|
185
|
+
* @description Asserts that a Discord bot token is configured
|
|
186
|
+
* @summary Called by every operation before it touches the network.
|
|
187
|
+
* @returns {void}
|
|
188
|
+
* @throws {InternalError} When the resolved config has no `token`.
|
|
189
|
+
*/
|
|
190
|
+
protected requireBotToken(): void;
|
|
191
|
+
/**
|
|
192
|
+
* @description Builds the encoded path for a channel resource
|
|
193
|
+
* @summary Validates the channel ID and URL-encodes it into `/channels/<id>`.
|
|
194
|
+
* @param {string} channelId - The Discord channel ID.
|
|
195
|
+
* @returns {string} The channel API path.
|
|
196
|
+
* @throws {InternalError} When `channelId` is empty.
|
|
197
|
+
*/
|
|
198
|
+
private channelPath;
|
|
199
|
+
/**
|
|
200
|
+
* @description Sends a message to a Discord channel
|
|
201
|
+
* @summary `POST`s the content (and optional `tts`/`embeds`) to the channel
|
|
202
|
+
* messages endpoint and returns Discord's message payload.
|
|
203
|
+
* @param {DiscordMessageInput} input - The destination channel and message content.
|
|
204
|
+
* @returns {Promise<unknown>} The created message payload.
|
|
205
|
+
* @throws {InternalError} When no bot token is configured.
|
|
206
|
+
* @throws {BadRequestError} When Discord rejects the request.
|
|
207
|
+
* @example
|
|
208
|
+
* ```ts
|
|
209
|
+
* await discord.sendMessage({ channelId: "1234567890", content: "Hello" });
|
|
210
|
+
* ```
|
|
211
|
+
*/
|
|
212
|
+
sendMessage(input: DiscordMessageInput): Promise<unknown>;
|
|
213
|
+
/**
|
|
214
|
+
* @description Fetches a single Discord message
|
|
215
|
+
* @summary `GET`s the message by channel and message ID and returns the
|
|
216
|
+
* message payload.
|
|
217
|
+
* @param {string} channelId - The channel containing the message.
|
|
218
|
+
* @param {string} messageId - The message ID to fetch.
|
|
219
|
+
* @returns {Promise<unknown>} The message payload.
|
|
220
|
+
* @throws {InternalError} When no bot token is configured or the message ID is empty.
|
|
221
|
+
* @throws {NotFoundError} When the message does not exist (HTTP 404).
|
|
222
|
+
* @throws {BadRequestError} When Discord rejects the request.
|
|
223
|
+
*/
|
|
224
|
+
getMessage(channelId: string, messageId: string): Promise<unknown>;
|
|
225
|
+
/**
|
|
226
|
+
* @description Lists messages in a Discord channel
|
|
227
|
+
* @summary `GET`s the channel messages with the optional `limit` and
|
|
228
|
+
* `before` cursor and returns Discord's message page.
|
|
229
|
+
* @param {DiscordMessageListInput} input - The channel and paging options.
|
|
230
|
+
* @returns {Promise<unknown>} The message page payload.
|
|
231
|
+
* @throws {InternalError} When no bot token is configured.
|
|
232
|
+
* @throws {BadRequestError} When Discord rejects the request.
|
|
233
|
+
*/
|
|
234
|
+
listMessages(input: DiscordMessageListInput): Promise<unknown>;
|
|
235
|
+
/**
|
|
236
|
+
* @description Fetches a Discord channel
|
|
237
|
+
* @summary `GET`s the channel by ID and returns its payload.
|
|
238
|
+
* @param {string} channelId - The channel ID to fetch.
|
|
239
|
+
* @returns {Promise<unknown>} The channel payload.
|
|
240
|
+
* @throws {InternalError} When no bot token is configured or the channel ID is empty.
|
|
241
|
+
* @throws {NotFoundError} When the channel does not exist (HTTP 404).
|
|
242
|
+
* @throws {BadRequestError} When Discord rejects the request.
|
|
243
|
+
*/
|
|
244
|
+
getChannel(channelId: string): Promise<unknown>;
|
|
245
|
+
/**
|
|
246
|
+
* @description Lists every channel in a Discord guild
|
|
247
|
+
* @summary `GET`s `/guilds/<id>/channels` and returns the channel list.
|
|
248
|
+
* @param {string} guildId - The guild whose channels are listed.
|
|
249
|
+
* @returns {Promise<unknown>} The guild channel list payload.
|
|
250
|
+
* @throws {InternalError} When no bot token is configured or the guild ID is empty.
|
|
251
|
+
* @throws {BadRequestError} When Discord rejects the request.
|
|
252
|
+
*/
|
|
253
|
+
listChannels(guildId: string): Promise<unknown>;
|
|
254
|
+
/**
|
|
255
|
+
* @description Creates a channel in a Discord guild
|
|
256
|
+
* @summary `POST`s the channel `name`, numeric `type` (default text), and
|
|
257
|
+
* optional `topic`/`parentId` to the guild channels endpoint.
|
|
258
|
+
* @param {DiscordChannelInput} input - The guild and new channel definition.
|
|
259
|
+
* @returns {Promise<unknown>} The created channel payload.
|
|
260
|
+
* @throws {InternalError} When no bot token is configured.
|
|
261
|
+
* @throws {BadRequestError} When Discord rejects the request.
|
|
262
|
+
*/
|
|
263
|
+
createChannel(input: DiscordChannelInput): Promise<unknown>;
|
|
264
|
+
/**
|
|
265
|
+
* @description Deletes a Discord channel
|
|
266
|
+
* @summary `DELETE`s the channel and returns the response payload, falling
|
|
267
|
+
* back to `{ deleted: true, channelId }` when Discord returns no body.
|
|
268
|
+
* @param {string} channelId - The channel ID to delete.
|
|
269
|
+
* @returns {Promise<unknown>} The deletion payload.
|
|
270
|
+
* @throws {InternalError} When no bot token is configured or the channel ID is empty.
|
|
271
|
+
* @throws {NotFoundError} When the channel does not exist (HTTP 404).
|
|
272
|
+
* @throws {BadRequestError} When Discord rejects the request.
|
|
273
|
+
*/
|
|
274
|
+
deleteChannel(channelId: string): Promise<unknown>;
|
|
275
|
+
/**
|
|
276
|
+
* @description Adds a reaction to a Discord message as the bot
|
|
277
|
+
* @summary `PUT`s the emoji to the message's `@me` reaction endpoint and
|
|
278
|
+
* echoes the channel and message IDs on success.
|
|
279
|
+
* @param {DiscordReactionInput} input - The channel, message, and emoji.
|
|
280
|
+
* @returns {Promise<unknown>} `{ channelId, messageId }` on success.
|
|
281
|
+
* @throws {InternalError} When no bot token is configured, or the message ID or emoji is empty.
|
|
282
|
+
* @throws {BadRequestError} When Discord rejects the request.
|
|
283
|
+
*/
|
|
284
|
+
addReaction(input: DiscordReactionInput): Promise<unknown>;
|
|
285
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export * from "./DiscordService.d.cts";
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export * from "./DiscordService.d.mts";
|
|
@@ -0,0 +1,184 @@
|
|
|
1
|
+
import { HttpApiService, type HttpApiServiceConfig } from "../../shared/http/index.d.cts";
|
|
2
|
+
import { type EmailMessageInput } from "./mime.d.cts";
|
|
3
|
+
/**
|
|
4
|
+
* @description Delivery provider selected for a send
|
|
5
|
+
* @summary `smtp` delivers through the built-in raw-MIME client; `graph`
|
|
6
|
+
* posts to the Microsoft Graph `sendMail` endpoint.
|
|
7
|
+
* @category Comms
|
|
8
|
+
* @memberOf module:integrations/comms/email/service
|
|
9
|
+
*/
|
|
10
|
+
export type EmailProvider = "smtp" | "graph";
|
|
11
|
+
/**
|
|
12
|
+
* @description Configuration for the Email service
|
|
13
|
+
* @summary Extends {@link HttpApiServiceConfig} with the SMTP connection
|
|
14
|
+
* settings and the Microsoft Graph token/base URL. Every field falls back to
|
|
15
|
+
* the `comms.email` environment slice when omitted. A `host` selects the SMTP
|
|
16
|
+
* provider; a `token` (without `host`) selects Graph.
|
|
17
|
+
* @category Comms
|
|
18
|
+
* @memberOf module:integrations/comms/email/service
|
|
19
|
+
*/
|
|
20
|
+
export interface EmailServiceConfig extends HttpApiServiceConfig {
|
|
21
|
+
provider?: EmailProvider;
|
|
22
|
+
host?: string;
|
|
23
|
+
port?: number;
|
|
24
|
+
secure?: boolean;
|
|
25
|
+
username?: string;
|
|
26
|
+
password?: string;
|
|
27
|
+
/**
|
|
28
|
+
* Explicitly allow SMTP `AUTH LOGIN` over a plaintext session. Defaults to
|
|
29
|
+
* `false`: credentials are only sent after implicit TLS or a STARTTLS upgrade.
|
|
30
|
+
*/
|
|
31
|
+
allowPlaintextAuth?: boolean;
|
|
32
|
+
from?: string;
|
|
33
|
+
graphBaseUrl?: string;
|
|
34
|
+
token?: string;
|
|
35
|
+
}
|
|
36
|
+
/**
|
|
37
|
+
* @description Result of a successful email send
|
|
38
|
+
* @summary Carries the generated RFC 5322 `Message-ID`, the resolved sender,
|
|
39
|
+
* the flattened recipient list, and the provider that delivered it.
|
|
40
|
+
* @category Comms
|
|
41
|
+
* @memberOf module:integrations/comms/email/service
|
|
42
|
+
*/
|
|
43
|
+
export interface EmailSendResult {
|
|
44
|
+
/** @description Generated `Message-ID` (also present in the raw MIME headers) */
|
|
45
|
+
messageId: string;
|
|
46
|
+
/** @description Sender address used for delivery */
|
|
47
|
+
from: string;
|
|
48
|
+
/** @description All To/Cc/Bcc recipients, in that order */
|
|
49
|
+
recipients: string[];
|
|
50
|
+
/** @description Provider that performed the delivery */
|
|
51
|
+
provider: EmailProvider;
|
|
52
|
+
}
|
|
53
|
+
/**
|
|
54
|
+
* @description Filter for inbox reads
|
|
55
|
+
* @summary Applies to both {@link EmailService.listInbox} (Graph) and
|
|
56
|
+
* {@link EmailService.listImapMessages} (IMAP): mailbox path, page size, a
|
|
57
|
+
* lower received-date bound, and a subject filter.
|
|
58
|
+
* @category Comms
|
|
59
|
+
* @memberOf module:integrations/comms/email/service
|
|
60
|
+
*/
|
|
61
|
+
export interface EmailInboxQuery {
|
|
62
|
+
/** @description Mailbox path to read (default `me` on Graph, `INBOX` on IMAP) */
|
|
63
|
+
mailbox?: string;
|
|
64
|
+
/** @description Maximum messages returned (default 25) */
|
|
65
|
+
limit?: number;
|
|
66
|
+
/** @description Only messages received after this date (Graph `$filter`); must be an ISO 8601 date or timestamp */
|
|
67
|
+
since?: string;
|
|
68
|
+
/** @description Subject `contains` filter (Graph only) */
|
|
69
|
+
subject?: string;
|
|
70
|
+
}
|
|
71
|
+
/**
|
|
72
|
+
* @description Multi-provider email send/inbox service
|
|
73
|
+
* @summary Resolves the delivery provider from config (`provider`, or inferred
|
|
74
|
+
* from the presence of `host` vs `token`), builds RFC 5322 MIME with
|
|
75
|
+
* UTF-8-encoded headers via {@link buildEmail}, then delivers through SMTP or
|
|
76
|
+
* posts to Graph. Inbox reads go through Graph `messages` (with `$top`,
|
|
77
|
+
* `$filter`, `$orderby`) or the optional `imapflow` package.
|
|
78
|
+
* @category Comms
|
|
79
|
+
* @memberOf module:integrations/comms/email/service
|
|
80
|
+
*/
|
|
81
|
+
export declare class EmailService extends HttpApiService<EmailServiceConfig> {
|
|
82
|
+
protected readonly serviceName = "Email";
|
|
83
|
+
/**
|
|
84
|
+
* @description Default Microsoft Graph base URL used when no override is configured
|
|
85
|
+
* @returns The Graph v1.0 endpoint URL
|
|
86
|
+
*/
|
|
87
|
+
protected defaultBaseUrl(): string;
|
|
88
|
+
/**
|
|
89
|
+
* @description Authorization headers for Graph requests
|
|
90
|
+
* @param config - Resolved service config
|
|
91
|
+
* @returns A bearer-token `Authorization` header map, empty when no `token` is configured
|
|
92
|
+
*/
|
|
93
|
+
protected authHeaders(config: EmailServiceConfig): Record<string, string>;
|
|
94
|
+
/**
|
|
95
|
+
* @description Pins the SMTP plaintext-AUTH default on top of the base initialization
|
|
96
|
+
* @summary Runs the {@link HttpApiService} initialization (explicit config
|
|
97
|
+
* merged over the `comms.email` environment slice) and then defaults an
|
|
98
|
+
* unresolved `allowPlaintextAuth` to `false`, so credentials are only sent
|
|
99
|
+
* over a TLS-protected session unless the config explicitly opts in. This
|
|
100
|
+
* closes the F1 residual where an environment-only `allowPlaintextAuth`
|
|
101
|
+
* opt-in would otherwise reach a boot whose explicit config omits the key
|
|
102
|
+
* (defense in depth on top of {@link bootWithoutEnvironment}, which disables
|
|
103
|
+
* the environment slice entirely on the node path).
|
|
104
|
+
* @param {...any[]} args - An optional `Partial<EmailServiceConfig>`, optionally followed by a decaf `Context`.
|
|
105
|
+
* @returns {Promise<{config: EmailServiceConfig, client: AxiosInstance}>} The merged configuration, with `allowPlaintextAuth` defaulted to `false` when unset, and the configured Axios instance.
|
|
106
|
+
*/
|
|
107
|
+
initialize(...args: any[]): Promise<{
|
|
108
|
+
config: EmailServiceConfig;
|
|
109
|
+
client: import("axios").AxiosInstance;
|
|
110
|
+
}>;
|
|
111
|
+
/**
|
|
112
|
+
* @description Builds service config from the `comms.email` environment slice
|
|
113
|
+
* @returns A partial config when either an SMTP `host` or a Graph `token` is present, otherwise `undefined`
|
|
114
|
+
*/
|
|
115
|
+
protected configFromEnvironment(): Partial<EmailServiceConfig> | undefined;
|
|
116
|
+
/**
|
|
117
|
+
* @description Selects the delivery provider
|
|
118
|
+
* @summary Prefers an explicit `provider`, then infers `smtp` from a
|
|
119
|
+
* configured `host` and `graph` from a configured `token`.
|
|
120
|
+
* @param config - Resolved service config
|
|
121
|
+
* @returns The resolved provider
|
|
122
|
+
* @throws {InternalError} when neither an SMTP host nor a Graph token is configured
|
|
123
|
+
*/
|
|
124
|
+
protected resolveProvider(config: EmailServiceConfig): EmailProvider;
|
|
125
|
+
/**
|
|
126
|
+
* @description Resolves the fallback sender address
|
|
127
|
+
* @summary Uses `from`, then `username`, then the `From` header override.
|
|
128
|
+
* @param config - Resolved service config
|
|
129
|
+
* @returns The resolved sender address
|
|
130
|
+
* @throws {InternalError} when no sender address can be resolved
|
|
131
|
+
*/
|
|
132
|
+
protected resolveFrom(config: EmailServiceConfig): string;
|
|
133
|
+
/**
|
|
134
|
+
* @description Sends an email through the resolved provider
|
|
135
|
+
* @summary Builds the raw MIME message (honouring `input.from`, else the
|
|
136
|
+
* resolved config sender), then delivers via SMTP or Graph. SMTP config
|
|
137
|
+
* passes `allowPlaintextAuth` through unchanged, so the plaintext-AUTH
|
|
138
|
+
* opt-out is inherited from the service config.
|
|
139
|
+
* @param input - Message input (recipients, subject, text/html body, attachments)
|
|
140
|
+
* @returns The send result with the generated `Message-ID` and provider
|
|
141
|
+
* @throws {BadRequestError} when an address, attachment filename, or content type fails validation (via {@link buildEmail})
|
|
142
|
+
* @throws {InternalError} when the provider cannot be resolved, the SMTP host is missing, plaintext AUTH is refused, or SMTP delivery fails
|
|
143
|
+
*/
|
|
144
|
+
send(input: EmailMessageInput): Promise<EmailSendResult>;
|
|
145
|
+
/**
|
|
146
|
+
* @description Posts a raw MIME message to the Microsoft Graph `sendMail` endpoint
|
|
147
|
+
* @summary Sends the base64-encoded raw message to
|
|
148
|
+
* `/users/<from>/sendMail` (or `/me/sendMail` when no sender is resolved)
|
|
149
|
+
* with the configured `graphBaseUrl`/`baseUrl`.
|
|
150
|
+
* @param raw - Raw RFC 5322 message text
|
|
151
|
+
* @param from - Sender mailbox (UPN) for the Graph path
|
|
152
|
+
* @throws {Error} Graph error mapped through {@link httpError}
|
|
153
|
+
*/
|
|
154
|
+
protected sendViaGraph(raw: string, from: string): Promise<void>;
|
|
155
|
+
/**
|
|
156
|
+
* @description Lists messages from a Graph mailbox
|
|
157
|
+
* @summary Queries `<mailbox>/messages` with `$top`, an optional
|
|
158
|
+
* subject/since `$filter`, and `receivedDateTime desc` ordering. The mailbox
|
|
159
|
+
* is URL-encoded as a single path segment, quotes in the subject are escaped
|
|
160
|
+
* for the OData string literal, and `since` must be an ISO 8601 date.
|
|
161
|
+
* @param query - Inbox filter (mailbox, limit, since, subject)
|
|
162
|
+
* @returns The raw Graph message records
|
|
163
|
+
* @throws {BadRequestError} when `since` is not an ISO 8601 date
|
|
164
|
+
* @throws {InternalError} when no `token` is configured; Graph errors mapped through {@link httpError}
|
|
165
|
+
*/
|
|
166
|
+
listInbox(query?: EmailInboxQuery): Promise<Array<Record<string, unknown>>>;
|
|
167
|
+
/**
|
|
168
|
+
* @description Lists messages directly over IMAP
|
|
169
|
+
* @summary Dynamically imports the optional `imapflow` package, connects to
|
|
170
|
+
* `host` (default port 993, implicit TLS), and fetches the newest messages
|
|
171
|
+
* from `INBOX`.
|
|
172
|
+
*
|
|
173
|
+
* R2 direct-library-wrap justification: IMAP is a stateful protocol
|
|
174
|
+
* (mailbox locks, sequence/UID state, IDLE) whose correct implementation is
|
|
175
|
+
* large and security-sensitive. `imapflow` is the maintained n8n-vetted
|
|
176
|
+
* client for exactly this surface, so wrapping it is deliberate; a local
|
|
177
|
+
* reimplementation would add risk without changing the node contract. The
|
|
178
|
+
* package stays optional so SMTP/Graph-only consumers do not install it.
|
|
179
|
+
* @param query - Inbox filter (limit only is honoured by IMAP)
|
|
180
|
+
* @returns The fetched IMAP message records
|
|
181
|
+
* @throws {InternalError} when `imapflow` is not installed, no `host` is configured, or the IMAP session fails
|
|
182
|
+
*/
|
|
183
|
+
listImapMessages(query?: EmailInboxQuery): Promise<Array<Record<string, unknown>>>;
|
|
184
|
+
}
|
|
@@ -0,0 +1,184 @@
|
|
|
1
|
+
import { HttpApiService, type HttpApiServiceConfig } from "../../shared/http/index.d.mts";
|
|
2
|
+
import { type EmailMessageInput } from "./mime.d.mts";
|
|
3
|
+
/**
|
|
4
|
+
* @description Delivery provider selected for a send
|
|
5
|
+
* @summary `smtp` delivers through the built-in raw-MIME client; `graph`
|
|
6
|
+
* posts to the Microsoft Graph `sendMail` endpoint.
|
|
7
|
+
* @category Comms
|
|
8
|
+
* @memberOf module:integrations/comms/email/service
|
|
9
|
+
*/
|
|
10
|
+
export type EmailProvider = "smtp" | "graph";
|
|
11
|
+
/**
|
|
12
|
+
* @description Configuration for the Email service
|
|
13
|
+
* @summary Extends {@link HttpApiServiceConfig} with the SMTP connection
|
|
14
|
+
* settings and the Microsoft Graph token/base URL. Every field falls back to
|
|
15
|
+
* the `comms.email` environment slice when omitted. A `host` selects the SMTP
|
|
16
|
+
* provider; a `token` (without `host`) selects Graph.
|
|
17
|
+
* @category Comms
|
|
18
|
+
* @memberOf module:integrations/comms/email/service
|
|
19
|
+
*/
|
|
20
|
+
export interface EmailServiceConfig extends HttpApiServiceConfig {
|
|
21
|
+
provider?: EmailProvider;
|
|
22
|
+
host?: string;
|
|
23
|
+
port?: number;
|
|
24
|
+
secure?: boolean;
|
|
25
|
+
username?: string;
|
|
26
|
+
password?: string;
|
|
27
|
+
/**
|
|
28
|
+
* Explicitly allow SMTP `AUTH LOGIN` over a plaintext session. Defaults to
|
|
29
|
+
* `false`: credentials are only sent after implicit TLS or a STARTTLS upgrade.
|
|
30
|
+
*/
|
|
31
|
+
allowPlaintextAuth?: boolean;
|
|
32
|
+
from?: string;
|
|
33
|
+
graphBaseUrl?: string;
|
|
34
|
+
token?: string;
|
|
35
|
+
}
|
|
36
|
+
/**
|
|
37
|
+
* @description Result of a successful email send
|
|
38
|
+
* @summary Carries the generated RFC 5322 `Message-ID`, the resolved sender,
|
|
39
|
+
* the flattened recipient list, and the provider that delivered it.
|
|
40
|
+
* @category Comms
|
|
41
|
+
* @memberOf module:integrations/comms/email/service
|
|
42
|
+
*/
|
|
43
|
+
export interface EmailSendResult {
|
|
44
|
+
/** @description Generated `Message-ID` (also present in the raw MIME headers) */
|
|
45
|
+
messageId: string;
|
|
46
|
+
/** @description Sender address used for delivery */
|
|
47
|
+
from: string;
|
|
48
|
+
/** @description All To/Cc/Bcc recipients, in that order */
|
|
49
|
+
recipients: string[];
|
|
50
|
+
/** @description Provider that performed the delivery */
|
|
51
|
+
provider: EmailProvider;
|
|
52
|
+
}
|
|
53
|
+
/**
|
|
54
|
+
* @description Filter for inbox reads
|
|
55
|
+
* @summary Applies to both {@link EmailService.listInbox} (Graph) and
|
|
56
|
+
* {@link EmailService.listImapMessages} (IMAP): mailbox path, page size, a
|
|
57
|
+
* lower received-date bound, and a subject filter.
|
|
58
|
+
* @category Comms
|
|
59
|
+
* @memberOf module:integrations/comms/email/service
|
|
60
|
+
*/
|
|
61
|
+
export interface EmailInboxQuery {
|
|
62
|
+
/** @description Mailbox path to read (default `me` on Graph, `INBOX` on IMAP) */
|
|
63
|
+
mailbox?: string;
|
|
64
|
+
/** @description Maximum messages returned (default 25) */
|
|
65
|
+
limit?: number;
|
|
66
|
+
/** @description Only messages received after this date (Graph `$filter`); must be an ISO 8601 date or timestamp */
|
|
67
|
+
since?: string;
|
|
68
|
+
/** @description Subject `contains` filter (Graph only) */
|
|
69
|
+
subject?: string;
|
|
70
|
+
}
|
|
71
|
+
/**
|
|
72
|
+
* @description Multi-provider email send/inbox service
|
|
73
|
+
* @summary Resolves the delivery provider from config (`provider`, or inferred
|
|
74
|
+
* from the presence of `host` vs `token`), builds RFC 5322 MIME with
|
|
75
|
+
* UTF-8-encoded headers via {@link buildEmail}, then delivers through SMTP or
|
|
76
|
+
* posts to Graph. Inbox reads go through Graph `messages` (with `$top`,
|
|
77
|
+
* `$filter`, `$orderby`) or the optional `imapflow` package.
|
|
78
|
+
* @category Comms
|
|
79
|
+
* @memberOf module:integrations/comms/email/service
|
|
80
|
+
*/
|
|
81
|
+
export declare class EmailService extends HttpApiService<EmailServiceConfig> {
|
|
82
|
+
protected readonly serviceName = "Email";
|
|
83
|
+
/**
|
|
84
|
+
* @description Default Microsoft Graph base URL used when no override is configured
|
|
85
|
+
* @returns The Graph v1.0 endpoint URL
|
|
86
|
+
*/
|
|
87
|
+
protected defaultBaseUrl(): string;
|
|
88
|
+
/**
|
|
89
|
+
* @description Authorization headers for Graph requests
|
|
90
|
+
* @param config - Resolved service config
|
|
91
|
+
* @returns A bearer-token `Authorization` header map, empty when no `token` is configured
|
|
92
|
+
*/
|
|
93
|
+
protected authHeaders(config: EmailServiceConfig): Record<string, string>;
|
|
94
|
+
/**
|
|
95
|
+
* @description Pins the SMTP plaintext-AUTH default on top of the base initialization
|
|
96
|
+
* @summary Runs the {@link HttpApiService} initialization (explicit config
|
|
97
|
+
* merged over the `comms.email` environment slice) and then defaults an
|
|
98
|
+
* unresolved `allowPlaintextAuth` to `false`, so credentials are only sent
|
|
99
|
+
* over a TLS-protected session unless the config explicitly opts in. This
|
|
100
|
+
* closes the F1 residual where an environment-only `allowPlaintextAuth`
|
|
101
|
+
* opt-in would otherwise reach a boot whose explicit config omits the key
|
|
102
|
+
* (defense in depth on top of {@link bootWithoutEnvironment}, which disables
|
|
103
|
+
* the environment slice entirely on the node path).
|
|
104
|
+
* @param {...any[]} args - An optional `Partial<EmailServiceConfig>`, optionally followed by a decaf `Context`.
|
|
105
|
+
* @returns {Promise<{config: EmailServiceConfig, client: AxiosInstance}>} The merged configuration, with `allowPlaintextAuth` defaulted to `false` when unset, and the configured Axios instance.
|
|
106
|
+
*/
|
|
107
|
+
initialize(...args: any[]): Promise<{
|
|
108
|
+
config: EmailServiceConfig;
|
|
109
|
+
client: import("axios").AxiosInstance;
|
|
110
|
+
}>;
|
|
111
|
+
/**
|
|
112
|
+
* @description Builds service config from the `comms.email` environment slice
|
|
113
|
+
* @returns A partial config when either an SMTP `host` or a Graph `token` is present, otherwise `undefined`
|
|
114
|
+
*/
|
|
115
|
+
protected configFromEnvironment(): Partial<EmailServiceConfig> | undefined;
|
|
116
|
+
/**
|
|
117
|
+
* @description Selects the delivery provider
|
|
118
|
+
* @summary Prefers an explicit `provider`, then infers `smtp` from a
|
|
119
|
+
* configured `host` and `graph` from a configured `token`.
|
|
120
|
+
* @param config - Resolved service config
|
|
121
|
+
* @returns The resolved provider
|
|
122
|
+
* @throws {InternalError} when neither an SMTP host nor a Graph token is configured
|
|
123
|
+
*/
|
|
124
|
+
protected resolveProvider(config: EmailServiceConfig): EmailProvider;
|
|
125
|
+
/**
|
|
126
|
+
* @description Resolves the fallback sender address
|
|
127
|
+
* @summary Uses `from`, then `username`, then the `From` header override.
|
|
128
|
+
* @param config - Resolved service config
|
|
129
|
+
* @returns The resolved sender address
|
|
130
|
+
* @throws {InternalError} when no sender address can be resolved
|
|
131
|
+
*/
|
|
132
|
+
protected resolveFrom(config: EmailServiceConfig): string;
|
|
133
|
+
/**
|
|
134
|
+
* @description Sends an email through the resolved provider
|
|
135
|
+
* @summary Builds the raw MIME message (honouring `input.from`, else the
|
|
136
|
+
* resolved config sender), then delivers via SMTP or Graph. SMTP config
|
|
137
|
+
* passes `allowPlaintextAuth` through unchanged, so the plaintext-AUTH
|
|
138
|
+
* opt-out is inherited from the service config.
|
|
139
|
+
* @param input - Message input (recipients, subject, text/html body, attachments)
|
|
140
|
+
* @returns The send result with the generated `Message-ID` and provider
|
|
141
|
+
* @throws {BadRequestError} when an address, attachment filename, or content type fails validation (via {@link buildEmail})
|
|
142
|
+
* @throws {InternalError} when the provider cannot be resolved, the SMTP host is missing, plaintext AUTH is refused, or SMTP delivery fails
|
|
143
|
+
*/
|
|
144
|
+
send(input: EmailMessageInput): Promise<EmailSendResult>;
|
|
145
|
+
/**
|
|
146
|
+
* @description Posts a raw MIME message to the Microsoft Graph `sendMail` endpoint
|
|
147
|
+
* @summary Sends the base64-encoded raw message to
|
|
148
|
+
* `/users/<from>/sendMail` (or `/me/sendMail` when no sender is resolved)
|
|
149
|
+
* with the configured `graphBaseUrl`/`baseUrl`.
|
|
150
|
+
* @param raw - Raw RFC 5322 message text
|
|
151
|
+
* @param from - Sender mailbox (UPN) for the Graph path
|
|
152
|
+
* @throws {Error} Graph error mapped through {@link httpError}
|
|
153
|
+
*/
|
|
154
|
+
protected sendViaGraph(raw: string, from: string): Promise<void>;
|
|
155
|
+
/**
|
|
156
|
+
* @description Lists messages from a Graph mailbox
|
|
157
|
+
* @summary Queries `<mailbox>/messages` with `$top`, an optional
|
|
158
|
+
* subject/since `$filter`, and `receivedDateTime desc` ordering. The mailbox
|
|
159
|
+
* is URL-encoded as a single path segment, quotes in the subject are escaped
|
|
160
|
+
* for the OData string literal, and `since` must be an ISO 8601 date.
|
|
161
|
+
* @param query - Inbox filter (mailbox, limit, since, subject)
|
|
162
|
+
* @returns The raw Graph message records
|
|
163
|
+
* @throws {BadRequestError} when `since` is not an ISO 8601 date
|
|
164
|
+
* @throws {InternalError} when no `token` is configured; Graph errors mapped through {@link httpError}
|
|
165
|
+
*/
|
|
166
|
+
listInbox(query?: EmailInboxQuery): Promise<Array<Record<string, unknown>>>;
|
|
167
|
+
/**
|
|
168
|
+
* @description Lists messages directly over IMAP
|
|
169
|
+
* @summary Dynamically imports the optional `imapflow` package, connects to
|
|
170
|
+
* `host` (default port 993, implicit TLS), and fetches the newest messages
|
|
171
|
+
* from `INBOX`.
|
|
172
|
+
*
|
|
173
|
+
* R2 direct-library-wrap justification: IMAP is a stateful protocol
|
|
174
|
+
* (mailbox locks, sequence/UID state, IDLE) whose correct implementation is
|
|
175
|
+
* large and security-sensitive. `imapflow` is the maintained n8n-vetted
|
|
176
|
+
* client for exactly this surface, so wrapping it is deliberate; a local
|
|
177
|
+
* reimplementation would add risk without changing the node contract. The
|
|
178
|
+
* package stays optional so SMTP/Graph-only consumers do not install it.
|
|
179
|
+
* @param query - Inbox filter (limit only is honoured by IMAP)
|
|
180
|
+
* @returns The fetched IMAP message records
|
|
181
|
+
* @throws {InternalError} when `imapflow` is not installed, no `host` is configured, or the IMAP session fails
|
|
182
|
+
*/
|
|
183
|
+
listImapMessages(query?: EmailInboxQuery): Promise<Array<Record<string, unknown>>>;
|
|
184
|
+
}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @module integrations/comms/email
|
|
3
|
+
* @summary Email service (SMTP + Microsoft Graph send, Graph/IMAP inbox reads).
|
|
4
|
+
* @description Re-exports the {@link EmailService} and its config/result
|
|
5
|
+
* types, the raw MIME builder, and the nodemailer-backed {@link SmtpClient}
|
|
6
|
+
* with its {@link SmtpConfig}
|
|
7
|
+
* (also available directly from the `./smtp` subpath).
|
|
8
|
+
*/
|
|
9
|
+
export * from "./EmailService.d.cts";
|
|
10
|
+
export * from "./mime.d.cts";
|
|
11
|
+
export * from "./smtp.d.cts";
|