@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,274 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.WhatsAppService = void 0;
|
|
4
|
+
/**
|
|
5
|
+
* @module integrations/comms/whatsapp/service
|
|
6
|
+
* @summary WhatsApp Cloud API integration service for text, template, and media messages.
|
|
7
|
+
* @description Exposes the Meta WhatsApp Cloud API (Graph `v19.0`) as an
|
|
8
|
+
* undecorated client-based service built on {@link HttpApiService}.
|
|
9
|
+
* Configuration comes from an explicit `WhatsAppServiceConfig` or the
|
|
10
|
+
* `comms.whatsApp` environment slice; the access token is sent as
|
|
11
|
+
* `Authorization: Bearer <token>` and the sender is identified by the
|
|
12
|
+
* configured `phoneNumberId`. Credentials are referenced from configuration
|
|
13
|
+
* (and, from as-graph nodes, from the resolved `whatsapp` credential secret)
|
|
14
|
+
* and are never embedded in source. Failures are mapped to decaf errors via
|
|
15
|
+
* {@link httpError}.
|
|
16
|
+
*/
|
|
17
|
+
const db_decorators_1 = require("@decaf-ts/db-decorators");
|
|
18
|
+
const environment_js_1 = require("./../environment.cjs");
|
|
19
|
+
const environmentValue_js_1 = require("./../../shared/environmentValue.cjs");
|
|
20
|
+
const index_js_1 = require("./../../shared/http/index.cjs");
|
|
21
|
+
/**
|
|
22
|
+
* @description WhatsApp Cloud API integration service
|
|
23
|
+
* @summary An undecorated HTTP service for text, template, and media
|
|
24
|
+
* messages, read receipts, and media metadata. Every message operation needs
|
|
25
|
+
* both the access token and the sender phone number ID; missing credentials or
|
|
26
|
+
* identifiers raise `InternalError`, and transport failures are mapped to decaf
|
|
27
|
+
* errors via {@link httpError}.
|
|
28
|
+
* @class WhatsAppService
|
|
29
|
+
* @extends HttpApiService
|
|
30
|
+
* @category Comms
|
|
31
|
+
* @example
|
|
32
|
+
* ```ts
|
|
33
|
+
* import { WhatsAppService } from "@decaf-ts/integrations/comms/whatsapp";
|
|
34
|
+
*
|
|
35
|
+
* const whatsapp = new WhatsAppService();
|
|
36
|
+
* await whatsapp.initialize({
|
|
37
|
+
* token: process.env.GRAPH_CREDENTIAL_WHATSAPP_TOKEN,
|
|
38
|
+
* phoneNumberId: process.env.WHATSAPP_PHONE_NUMBER_ID,
|
|
39
|
+
* });
|
|
40
|
+
* await whatsapp.sendText({ to: "15551234567", text: "Hello" });
|
|
41
|
+
* ```
|
|
42
|
+
* @mermaid
|
|
43
|
+
* sequenceDiagram
|
|
44
|
+
* autonumber
|
|
45
|
+
* participant Caller
|
|
46
|
+
* participant Service as WhatsAppService
|
|
47
|
+
* participant Graph as WhatsApp Cloud API
|
|
48
|
+
* Caller->>Service: sendText(input)
|
|
49
|
+
* activate Service
|
|
50
|
+
* Service->>Service: requireTokenAndPhone()
|
|
51
|
+
* Service->>Graph: POST /{phoneNumberId}/messages
|
|
52
|
+
* activate Graph
|
|
53
|
+
* Graph-->>Service: message payload
|
|
54
|
+
* deactivate Graph
|
|
55
|
+
* Service-->>Caller: message payload
|
|
56
|
+
* deactivate Service
|
|
57
|
+
* @memberOf module:integrations/comms/whatsapp/service
|
|
58
|
+
*/
|
|
59
|
+
class WhatsAppService extends index_js_1.HttpApiService {
|
|
60
|
+
constructor() {
|
|
61
|
+
super(...arguments);
|
|
62
|
+
/**
|
|
63
|
+
* @description The provider name used in error messages
|
|
64
|
+
*/
|
|
65
|
+
this.serviceName = "WhatsApp";
|
|
66
|
+
}
|
|
67
|
+
/**
|
|
68
|
+
* @description The WhatsApp Cloud API base URL
|
|
69
|
+
* @summary Used when the resolved config carries no `baseUrl`.
|
|
70
|
+
* @returns {string} `"https://graph.facebook.com/v19.0"`.
|
|
71
|
+
*/
|
|
72
|
+
defaultBaseUrl() {
|
|
73
|
+
return "https://graph.facebook.com/v19.0";
|
|
74
|
+
}
|
|
75
|
+
/**
|
|
76
|
+
* @description Builds the WhatsApp bearer authorization headers
|
|
77
|
+
* @summary Returns `Authorization: Bearer <token>` when configured, and no
|
|
78
|
+
* headers otherwise.
|
|
79
|
+
* @param {WhatsAppServiceConfig} config - The resolved service configuration.
|
|
80
|
+
* @returns {Record<string, string>} The authorization headers (empty without a token).
|
|
81
|
+
*/
|
|
82
|
+
authHeaders(config) {
|
|
83
|
+
return config.token ? { Authorization: `Bearer ${config.token}` } : {};
|
|
84
|
+
}
|
|
85
|
+
/**
|
|
86
|
+
* @description Reads the WhatsApp credentials and defaults from the environment
|
|
87
|
+
* @summary Reads the `comms.whatsApp` slice and returns a partial config
|
|
88
|
+
* when a token or phone number ID is configured, `undefined` otherwise.
|
|
89
|
+
* Values pass through `envString`/`envNumber` to reject unset-leaf proxies.
|
|
90
|
+
* @returns {Partial<WhatsAppServiceConfig> | undefined} A partial config, or `undefined` when neither credential is configured.
|
|
91
|
+
*/
|
|
92
|
+
configFromEnvironment() {
|
|
93
|
+
const env = environment_js_1.CommsEnvironment.comms.whatsApp;
|
|
94
|
+
const token = (0, environmentValue_js_1.envString)(env?.token);
|
|
95
|
+
const phoneNumberId = (0, environmentValue_js_1.envString)(env?.phoneNumberId);
|
|
96
|
+
if (!token && !phoneNumberId)
|
|
97
|
+
return undefined;
|
|
98
|
+
return {
|
|
99
|
+
token,
|
|
100
|
+
phoneNumberId,
|
|
101
|
+
baseUrl: (0, environmentValue_js_1.envString)(env.baseUrl),
|
|
102
|
+
timeout: (0, environmentValue_js_1.envNumber)(env.timeout),
|
|
103
|
+
};
|
|
104
|
+
}
|
|
105
|
+
/**
|
|
106
|
+
* @description Asserts the access token and sender phone number ID
|
|
107
|
+
* @summary Calls `requireToken()` and returns the configured
|
|
108
|
+
* `phoneNumberId` used to build the messages path.
|
|
109
|
+
* @returns {string} The configured sender phone number ID.
|
|
110
|
+
* @throws {InternalError} When no token or phone number ID is configured.
|
|
111
|
+
*/
|
|
112
|
+
requireTokenAndPhone() {
|
|
113
|
+
this.requireToken();
|
|
114
|
+
const phoneNumberId = this.config.phoneNumberId;
|
|
115
|
+
if (!phoneNumberId) {
|
|
116
|
+
throw new db_decorators_1.InternalError("WhatsApp requires a phone number id");
|
|
117
|
+
}
|
|
118
|
+
return phoneNumberId;
|
|
119
|
+
}
|
|
120
|
+
/**
|
|
121
|
+
* @description Builds the encoded messages path for a sender
|
|
122
|
+
* @summary Encodes the phone number ID into `/<id>/messages`.
|
|
123
|
+
* @param {string} phoneNumberId - The sender phone number ID.
|
|
124
|
+
* @returns {string} The messages API path.
|
|
125
|
+
*/
|
|
126
|
+
messagesPath(phoneNumberId) {
|
|
127
|
+
return `/${encodeURIComponent(phoneNumberId)}/messages`;
|
|
128
|
+
}
|
|
129
|
+
/**
|
|
130
|
+
* @description Sends a WhatsApp text message
|
|
131
|
+
* @summary `POST`s a `text` message to the sender's `/messages` endpoint
|
|
132
|
+
* and returns the WhatsApp message payload.
|
|
133
|
+
* @param {WhatsAppTextInput} input - The recipient, text, and preview flag.
|
|
134
|
+
* @returns {Promise<unknown>} The WhatsApp message payload.
|
|
135
|
+
* @throws {InternalError} When credentials or the phone number ID are missing.
|
|
136
|
+
* @throws {BadRequestError} When WhatsApp rejects the message.
|
|
137
|
+
* @example
|
|
138
|
+
* ```ts
|
|
139
|
+
* await whatsapp.sendText({ to: "15551234567", text: "Deployment finished" });
|
|
140
|
+
* ```
|
|
141
|
+
*/
|
|
142
|
+
async sendText(input) {
|
|
143
|
+
const phoneNumberId = this.requireTokenAndPhone();
|
|
144
|
+
try {
|
|
145
|
+
const response = await this.client.post(this.messagesPath(phoneNumberId), {
|
|
146
|
+
messaging_product: "whatsapp",
|
|
147
|
+
recipient_type: "individual",
|
|
148
|
+
to: input.to,
|
|
149
|
+
type: "text",
|
|
150
|
+
text: {
|
|
151
|
+
body: input.text,
|
|
152
|
+
preview_url: input.previewUrl ?? false,
|
|
153
|
+
},
|
|
154
|
+
});
|
|
155
|
+
return response.data;
|
|
156
|
+
}
|
|
157
|
+
catch (error) {
|
|
158
|
+
throw (0, index_js_1.httpError)("WhatsApp", "send text message", error);
|
|
159
|
+
}
|
|
160
|
+
}
|
|
161
|
+
/**
|
|
162
|
+
* @description Sends a WhatsApp template message
|
|
163
|
+
* @summary `POST`s a `template` message referencing an approved template
|
|
164
|
+
* name and language, with optional components.
|
|
165
|
+
* @param {WhatsAppTemplateInput} input - The recipient and template definition.
|
|
166
|
+
* @returns {Promise<unknown>} The WhatsApp message payload.
|
|
167
|
+
* @throws {InternalError} When credentials or the phone number ID are missing.
|
|
168
|
+
* @throws {BadRequestError} When WhatsApp rejects the template message.
|
|
169
|
+
*/
|
|
170
|
+
async sendTemplate(input) {
|
|
171
|
+
const phoneNumberId = this.requireTokenAndPhone();
|
|
172
|
+
try {
|
|
173
|
+
const response = await this.client.post(this.messagesPath(phoneNumberId), {
|
|
174
|
+
messaging_product: "whatsapp",
|
|
175
|
+
to: input.to,
|
|
176
|
+
type: "template",
|
|
177
|
+
template: {
|
|
178
|
+
name: input.templateName,
|
|
179
|
+
language: { code: input.languageCode },
|
|
180
|
+
...(input.components ? { components: input.components } : {}),
|
|
181
|
+
},
|
|
182
|
+
});
|
|
183
|
+
return response.data;
|
|
184
|
+
}
|
|
185
|
+
catch (error) {
|
|
186
|
+
throw (0, index_js_1.httpError)("WhatsApp", "send template message", error);
|
|
187
|
+
}
|
|
188
|
+
}
|
|
189
|
+
/**
|
|
190
|
+
* @description Sends a WhatsApp media message
|
|
191
|
+
* @summary `POST`s an `image`/`audio`/`video`/`document` message using
|
|
192
|
+
* either an uploaded `mediaId` or a public `link`, with optional caption and
|
|
193
|
+
* filename.
|
|
194
|
+
* @param {WhatsAppMediaInput} input - The recipient and media reference.
|
|
195
|
+
* @returns {Promise<unknown>} The WhatsApp message payload.
|
|
196
|
+
* @throws {InternalError} When credentials or the phone number ID are missing, or neither `mediaId` nor `link` is provided.
|
|
197
|
+
* @throws {BadRequestError} When WhatsApp rejects the media message.
|
|
198
|
+
*/
|
|
199
|
+
async sendMedia(input) {
|
|
200
|
+
const phoneNumberId = this.requireTokenAndPhone();
|
|
201
|
+
if (!input.mediaId && !input.link) {
|
|
202
|
+
throw new db_decorators_1.InternalError("WhatsApp media messages require a media id or link");
|
|
203
|
+
}
|
|
204
|
+
try {
|
|
205
|
+
const response = await this.client.post(this.messagesPath(phoneNumberId), {
|
|
206
|
+
messaging_product: "whatsapp",
|
|
207
|
+
recipient_type: "individual",
|
|
208
|
+
to: input.to,
|
|
209
|
+
type: input.type,
|
|
210
|
+
[input.type]: {
|
|
211
|
+
...(input.mediaId ? { id: input.mediaId } : { link: input.link }),
|
|
212
|
+
...(input.caption ? { caption: input.caption } : {}),
|
|
213
|
+
...(input.filename ? { filename: input.filename } : {}),
|
|
214
|
+
},
|
|
215
|
+
});
|
|
216
|
+
return response.data;
|
|
217
|
+
}
|
|
218
|
+
catch (error) {
|
|
219
|
+
throw (0, index_js_1.httpError)("WhatsApp", "send media message", error);
|
|
220
|
+
}
|
|
221
|
+
}
|
|
222
|
+
/**
|
|
223
|
+
* @description Marks an inbound WhatsApp message as read
|
|
224
|
+
* @summary `POST`s a `read` status for the message to the sender's
|
|
225
|
+
* `/messages` endpoint.
|
|
226
|
+
* @param {WhatsAppReadInput} input - The inbound message ID to acknowledge.
|
|
227
|
+
* @returns {Promise<unknown>} The WhatsApp status payload.
|
|
228
|
+
* @throws {InternalError} When credentials, the phone number ID, or the message ID are missing.
|
|
229
|
+
* @throws {BadRequestError} When WhatsApp rejects the request.
|
|
230
|
+
*/
|
|
231
|
+
async markAsRead(input) {
|
|
232
|
+
const phoneNumberId = this.requireTokenAndPhone();
|
|
233
|
+
if (!input.messageId) {
|
|
234
|
+
throw new db_decorators_1.InternalError("WhatsApp requires a message id");
|
|
235
|
+
}
|
|
236
|
+
try {
|
|
237
|
+
const response = await this.client.post(this.messagesPath(phoneNumberId), {
|
|
238
|
+
messaging_product: "whatsapp",
|
|
239
|
+
status: "read",
|
|
240
|
+
message_id: input.messageId,
|
|
241
|
+
});
|
|
242
|
+
return response.data;
|
|
243
|
+
}
|
|
244
|
+
catch (error) {
|
|
245
|
+
throw (0, index_js_1.httpError)("WhatsApp", "mark message as read", error);
|
|
246
|
+
}
|
|
247
|
+
}
|
|
248
|
+
/**
|
|
249
|
+
* @description Fetches WhatsApp media metadata
|
|
250
|
+
* @summary `GET`s the media descriptor (URL, MIME type, size) by media ID;
|
|
251
|
+
* the descriptor's URL is then used to download the binary.
|
|
252
|
+
* @param {string} mediaId - The WhatsApp media ID.
|
|
253
|
+
* @returns {Promise<unknown>} The media metadata payload.
|
|
254
|
+
* @throws {InternalError} When no token is configured or the media ID is empty.
|
|
255
|
+
* @throws {NotFoundError} When the media does not exist (HTTP 404).
|
|
256
|
+
* @throws {BadRequestError} When WhatsApp rejects the request.
|
|
257
|
+
*/
|
|
258
|
+
async getMedia(mediaId) {
|
|
259
|
+
this.requireToken();
|
|
260
|
+
if (!mediaId) {
|
|
261
|
+
throw new db_decorators_1.InternalError("WhatsApp requires a media id");
|
|
262
|
+
}
|
|
263
|
+
try {
|
|
264
|
+
const response = await this.client.get(`/${encodeURIComponent(mediaId)}`);
|
|
265
|
+
return response.data;
|
|
266
|
+
}
|
|
267
|
+
catch (error) {
|
|
268
|
+
throw (0, index_js_1.httpError)("WhatsApp", "get media", error);
|
|
269
|
+
}
|
|
270
|
+
}
|
|
271
|
+
}
|
|
272
|
+
exports.WhatsAppService = WhatsAppService;
|
|
273
|
+
//# sourceMappingURL=WhatsAppService.js.map
|
|
274
|
+
//# sourceMappingURL=WhatsAppService.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"comms/whatsapp/WhatsAppService.cjs","sourceRoot":"","sources":["comms/whatsapp/WhatsAppService.js"],"names":[],"mappings":";;;AAAA;;;;;;;;;;;;GAYG;AACH,2DAAwD;AACxD,wDAAuD;AACvD,4EAA0E;AAC1E,2DAA0E;AAC1E;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAqCG;AACH,MAAa,eAAgB,SAAQ,yBAAc;IAC/C;QACI,KAAK,CAAC,GAAG,SAAS,CAAC,CAAC;QACpB;;WAEG;QACH,IAAI,CAAC,WAAW,GAAG,UAAU,CAAC;IAClC,CAAC;IACD;;;;OAIG;IACH,cAAc;QACV,OAAO,kCAAkC,CAAC;IAC9C,CAAC;IACD;;;;;;OAMG;IACH,WAAW,CAAC,MAAM;QACd,OAAO,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,aAAa,EAAE,UAAU,MAAM,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;IAC3E,CAAC;IACD;;;;;;OAMG;IACH,qBAAqB;QACjB,MAAM,GAAG,GAAG,iCAAgB,CAAC,KAAK,CAAC,QAAQ,CAAC;QAC5C,MAAM,KAAK,GAAG,IAAA,+BAAS,EAAC,GAAG,EAAE,KAAK,CAAC,CAAC;QACpC,MAAM,aAAa,GAAG,IAAA,+BAAS,EAAC,GAAG,EAAE,aAAa,CAAC,CAAC;QACpD,IAAI,CAAC,KAAK,IAAI,CAAC,aAAa;YACxB,OAAO,SAAS,CAAC;QACrB,OAAO;YACH,KAAK;YACL,aAAa;YACb,OAAO,EAAE,IAAA,+BAAS,EAAC,GAAG,CAAC,OAAO,CAAC;YAC/B,OAAO,EAAE,IAAA,+BAAS,EAAC,GAAG,CAAC,OAAO,CAAC;SAClC,CAAC;IACN,CAAC;IACD;;;;;;OAMG;IACH,oBAAoB;QAChB,IAAI,CAAC,YAAY,EAAE,CAAC;QACpB,MAAM,aAAa,GAAG,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC;QAChD,IAAI,CAAC,aAAa,EAAE,CAAC;YACjB,MAAM,IAAI,6BAAa,CAAC,qCAAqC,CAAC,CAAC;QACnE,CAAC;QACD,OAAO,aAAa,CAAC;IACzB,CAAC;IACD;;;;;OAKG;IACH,YAAY,CAAC,aAAa;QACtB,OAAO,IAAI,kBAAkB,CAAC,aAAa,CAAC,WAAW,CAAC;IAC5D,CAAC;IACD;;;;;;;;;;;;OAYG;IACH,KAAK,CAAC,QAAQ,CAAC,KAAK;QAChB,MAAM,aAAa,GAAG,IAAI,CAAC,oBAAoB,EAAE,CAAC;QAClD,IAAI,CAAC;YACD,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,aAAa,CAAC,EAAE;gBACtE,iBAAiB,EAAE,UAAU;gBAC7B,cAAc,EAAE,YAAY;gBAC5B,EAAE,EAAE,KAAK,CAAC,EAAE;gBACZ,IAAI,EAAE,MAAM;gBACZ,IAAI,EAAE;oBACF,IAAI,EAAE,KAAK,CAAC,IAAI;oBAChB,WAAW,EAAE,KAAK,CAAC,UAAU,IAAI,KAAK;iBACzC;aACJ,CAAC,CAAC;YACH,OAAO,QAAQ,CAAC,IAAI,CAAC;QACzB,CAAC;QACD,OAAO,KAAK,EAAE,CAAC;YACX,MAAM,IAAA,oBAAS,EAAC,UAAU,EAAE,mBAAmB,EAAE,KAAK,CAAC,CAAC;QAC5D,CAAC;IACL,CAAC;IACD;;;;;;;;OAQG;IACH,KAAK,CAAC,YAAY,CAAC,KAAK;QACpB,MAAM,aAAa,GAAG,IAAI,CAAC,oBAAoB,EAAE,CAAC;QAClD,IAAI,CAAC;YACD,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,aAAa,CAAC,EAAE;gBACtE,iBAAiB,EAAE,UAAU;gBAC7B,EAAE,EAAE,KAAK,CAAC,EAAE;gBACZ,IAAI,EAAE,UAAU;gBAChB,QAAQ,EAAE;oBACN,IAAI,EAAE,KAAK,CAAC,YAAY;oBACxB,QAAQ,EAAE,EAAE,IAAI,EAAE,KAAK,CAAC,YAAY,EAAE;oBACtC,GAAG,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,UAAU,EAAE,KAAK,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;iBAChE;aACJ,CAAC,CAAC;YACH,OAAO,QAAQ,CAAC,IAAI,CAAC;QACzB,CAAC;QACD,OAAO,KAAK,EAAE,CAAC;YACX,MAAM,IAAA,oBAAS,EAAC,UAAU,EAAE,uBAAuB,EAAE,KAAK,CAAC,CAAC;QAChE,CAAC;IACL,CAAC;IACD;;;;;;;;;OASG;IACH,KAAK,CAAC,SAAS,CAAC,KAAK;QACjB,MAAM,aAAa,GAAG,IAAI,CAAC,oBAAoB,EAAE,CAAC;QAClD,IAAI,CAAC,KAAK,CAAC,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC;YAChC,MAAM,IAAI,6BAAa,CAAC,oDAAoD,CAAC,CAAC;QAClF,CAAC;QACD,IAAI,CAAC;YACD,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,aAAa,CAAC,EAAE;gBACtE,iBAAiB,EAAE,UAAU;gBAC7B,cAAc,EAAE,YAAY;gBAC5B,EAAE,EAAE,KAAK,CAAC,EAAE;gBACZ,IAAI,EAAE,KAAK,CAAC,IAAI;gBAChB,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE;oBACV,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,EAAE,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,EAAE,CAAC;oBACjE,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;oBACpD,GAAG,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,KAAK,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;iBAC1D;aACJ,CAAC,CAAC;YACH,OAAO,QAAQ,CAAC,IAAI,CAAC;QACzB,CAAC;QACD,OAAO,KAAK,EAAE,CAAC;YACX,MAAM,IAAA,oBAAS,EAAC,UAAU,EAAE,oBAAoB,EAAE,KAAK,CAAC,CAAC;QAC7D,CAAC;IACL,CAAC;IACD;;;;;;;;OAQG;IACH,KAAK,CAAC,UAAU,CAAC,KAAK;QAClB,MAAM,aAAa,GAAG,IAAI,CAAC,oBAAoB,EAAE,CAAC;QAClD,IAAI,CAAC,KAAK,CAAC,SAAS,EAAE,CAAC;YACnB,MAAM,IAAI,6BAAa,CAAC,gCAAgC,CAAC,CAAC;QAC9D,CAAC;QACD,IAAI,CAAC;YACD,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,aAAa,CAAC,EAAE;gBACtE,iBAAiB,EAAE,UAAU;gBAC7B,MAAM,EAAE,MAAM;gBACd,UAAU,EAAE,KAAK,CAAC,SAAS;aAC9B,CAAC,CAAC;YACH,OAAO,QAAQ,CAAC,IAAI,CAAC;QACzB,CAAC;QACD,OAAO,KAAK,EAAE,CAAC;YACX,MAAM,IAAA,oBAAS,EAAC,UAAU,EAAE,sBAAsB,EAAE,KAAK,CAAC,CAAC;QAC/D,CAAC;IACL,CAAC;IACD;;;;;;;;;OASG;IACH,KAAK,CAAC,QAAQ,CAAC,OAAO;QAClB,IAAI,CAAC,YAAY,EAAE,CAAC;QACpB,IAAI,CAAC,OAAO,EAAE,CAAC;YACX,MAAM,IAAI,6BAAa,CAAC,8BAA8B,CAAC,CAAC;QAC5D,CAAC;QACD,IAAI,CAAC;YACD,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,kBAAkB,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;YAC1E,OAAO,QAAQ,CAAC,IAAI,CAAC;QACzB,CAAC;QACD,OAAO,KAAK,EAAE,CAAC;YACX,MAAM,IAAA,oBAAS,EAAC,UAAU,EAAE,WAAW,EAAE,KAAK,CAAC,CAAC;QACpD,CAAC;IACL,CAAC;CACJ;AApND,0CAoNC;AACD,2CAA2C"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
14
|
+
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
15
|
+
};
|
|
16
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
17
|
+
__exportStar(require("./WhatsAppService.cjs"), exports);
|
|
18
|
+
//# sourceMappingURL=index.js.map
|
|
19
|
+
//# sourceMappingURL=index.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"comms/whatsapp/index.cjs","sourceRoot":"","sources":["comms/whatsapp/index.js"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,uDAAqC;AACrC,iCAAiC"}
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.DevopsEnvironment = void 0;
|
|
4
|
+
const logging_1 = require("@decaf-ts/logging");
|
|
5
|
+
/**
|
|
6
|
+
* @description Accumulated devops environment singleton
|
|
7
|
+
* @summary The `LoggedEnvironment.accumulate`-registered instance backing the
|
|
8
|
+
* `DevopsEnvironmentShape` contract. Devops services read their provider
|
|
9
|
+
* slice (e.g. `DevopsEnvironment.devops.github`) inside
|
|
10
|
+
* `configFromEnvironment()` and translate it into an
|
|
11
|
+
* `HttpApiServiceConfig`-derived config. Credentials come from environment
|
|
12
|
+
* variables; for as-graph node usage those are provided as
|
|
13
|
+
* `GRAPH_CREDENTIAL_*` values (placeholders in this example).
|
|
14
|
+
* @example
|
|
15
|
+
* ```ts
|
|
16
|
+
* import { GithubService } from "@decaf-ts/integrations/devops/github";
|
|
17
|
+
*
|
|
18
|
+
* // with devops.github.token / devops.github.owner / devops.github.repo configured
|
|
19
|
+
* const github = new GithubService();
|
|
20
|
+
* await github.initialize();
|
|
21
|
+
* ```
|
|
22
|
+
* @constant {LoggedEnvironment} DevopsEnvironment
|
|
23
|
+
* @memberOf module:integrations/devops/environment
|
|
24
|
+
*/
|
|
25
|
+
exports.DevopsEnvironment = logging_1.LoggedEnvironment.accumulate({
|
|
26
|
+
devops: {
|
|
27
|
+
github: {
|
|
28
|
+
token: "",
|
|
29
|
+
baseUrl: "",
|
|
30
|
+
owner: "",
|
|
31
|
+
repo: "",
|
|
32
|
+
timeout: undefined,
|
|
33
|
+
},
|
|
34
|
+
gitlab: {
|
|
35
|
+
token: "",
|
|
36
|
+
baseUrl: "",
|
|
37
|
+
projectId: "",
|
|
38
|
+
timeout: undefined,
|
|
39
|
+
},
|
|
40
|
+
},
|
|
41
|
+
});
|
|
42
|
+
//# sourceMappingURL=environment.js.map
|
|
43
|
+
//# sourceMappingURL=environment.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"devops/environment.cjs","sourceRoot":"","sources":["devops/environment.js"],"names":[],"mappings":";;;AAAA,+CAAsD;AACtD;;;;;;;;;;;;;;;;;;;GAmBG;AACU,QAAA,iBAAiB,GAAG,2BAAiB,CAAC,UAAU,CAAC;IAC1D,MAAM,EAAE;QACJ,MAAM,EAAE;YACJ,KAAK,EAAE,EAAE;YACT,OAAO,EAAE,EAAE;YACX,KAAK,EAAE,EAAE;YACT,IAAI,EAAE,EAAE;YACR,OAAO,EAAE,SAAS;SACrB;QACD,MAAM,EAAE;YACJ,KAAK,EAAE,EAAE;YACT,OAAO,EAAE,EAAE;YACX,SAAS,EAAE,EAAE;YACb,OAAO,EAAE,SAAS;SACrB;KACJ;CACJ,CAAC,CAAC;AACH,uCAAuC"}
|
|
@@ -0,0 +1,302 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.GithubService = void 0;
|
|
4
|
+
/**
|
|
5
|
+
* @module integrations/devops/github/service
|
|
6
|
+
* @summary GitHub REST API integration service for repositories, issues, and pull requests.
|
|
7
|
+
* @description Exposes a focused subset of the GitHub REST API (`/repos/*`:
|
|
8
|
+
* repository lookup, issue listing/creation/commenting, and pull-request
|
|
9
|
+
* listing) as an undecorated client-based service built on
|
|
10
|
+
* {@link HttpApiService}. Configuration comes from an explicit
|
|
11
|
+
* `GithubServiceConfig` or the `devops.github` environment slice; repository
|
|
12
|
+
* targets default to the configured `owner`/`repo` and can be overridden per
|
|
13
|
+
* call. Raw GitHub responses are normalized to camelCase issue descriptors,
|
|
14
|
+
* and failures are mapped to decaf errors via {@link httpError}.
|
|
15
|
+
*/
|
|
16
|
+
const db_decorators_1 = require("@decaf-ts/db-decorators");
|
|
17
|
+
const environment_js_1 = require("./../environment.cjs");
|
|
18
|
+
const environmentValue_js_1 = require("./../../shared/environmentValue.cjs");
|
|
19
|
+
const index_js_1 = require("./../../shared/http/index.cjs");
|
|
20
|
+
/**
|
|
21
|
+
* @description GitHub REST API integration service
|
|
22
|
+
* @summary An undecorated HTTP service for looking up
|
|
23
|
+
* repositories, listing issues (excluding pull requests), creating issues,
|
|
24
|
+
* commenting on issues, and listing pull requests. Repository targets resolve
|
|
25
|
+
* per call from the input's `owner`/`repo`, falling back to the configured
|
|
26
|
+
* config values, and throw `InternalError` when unresolved. The token is sent
|
|
27
|
+
* as a bearer token with the GitHub `Accept` and API-version headers, and
|
|
28
|
+
* transport failures are mapped to decaf errors via {@link httpError}.
|
|
29
|
+
* @class GithubService
|
|
30
|
+
* @category DevOps
|
|
31
|
+
* @example
|
|
32
|
+
* ```ts
|
|
33
|
+
* import { GithubService } from "@decaf-ts/integrations/devops/github";
|
|
34
|
+
*
|
|
35
|
+
* const github = new GithubService();
|
|
36
|
+
* await github.initialize({
|
|
37
|
+
* token: process.env.GRAPH_CREDENTIAL_GITHUB_TOKEN,
|
|
38
|
+
* owner: "example-org",
|
|
39
|
+
* repo: "example-repo",
|
|
40
|
+
* });
|
|
41
|
+
* const issue = await github.createIssue({
|
|
42
|
+
* title: "Bug report",
|
|
43
|
+
* body: "Something is broken",
|
|
44
|
+
* labels: ["bug"],
|
|
45
|
+
* });
|
|
46
|
+
* ```
|
|
47
|
+
* @memberOf module:integrations/devops/github/service
|
|
48
|
+
*/
|
|
49
|
+
class GithubService extends index_js_1.HttpApiService {
|
|
50
|
+
constructor() {
|
|
51
|
+
super(...arguments);
|
|
52
|
+
/**
|
|
53
|
+
* @description The provider name used in error messages
|
|
54
|
+
*/
|
|
55
|
+
this.serviceName = "GitHub";
|
|
56
|
+
}
|
|
57
|
+
/**
|
|
58
|
+
* @description The GitHub REST API base URL
|
|
59
|
+
* @summary Used when the resolved config carries no `baseUrl`.
|
|
60
|
+
* @returns {string} `"https://api.github.com"`.
|
|
61
|
+
*/
|
|
62
|
+
defaultBaseUrl() {
|
|
63
|
+
return "https://api.github.com";
|
|
64
|
+
}
|
|
65
|
+
/**
|
|
66
|
+
* @description Builds the GitHub authentication and API version headers
|
|
67
|
+
* @summary Returns `Authorization: Bearer <token>`, the GitHub JSON
|
|
68
|
+
* `Accept` header, and the `X-GitHub-Api-Version` header when the config
|
|
69
|
+
* carries a token; without a token only the `Accept` headers are sent.
|
|
70
|
+
* @param {GithubServiceConfig} config - The resolved service configuration.
|
|
71
|
+
* @returns {Record<string, string>} The authorization and version headers.
|
|
72
|
+
*/
|
|
73
|
+
authHeaders(config) {
|
|
74
|
+
return config.token
|
|
75
|
+
? {
|
|
76
|
+
Authorization: `Bearer ${config.token}`,
|
|
77
|
+
Accept: "application/vnd.github+json",
|
|
78
|
+
"X-GitHub-Api-Version": "2022-11-28",
|
|
79
|
+
}
|
|
80
|
+
: { Accept: "application/vnd.github+json" };
|
|
81
|
+
}
|
|
82
|
+
/**
|
|
83
|
+
* @description Reads the GitHub credentials and defaults from the environment
|
|
84
|
+
* @summary Reads the `devops.github` environment slice and returns a
|
|
85
|
+
* partial config when a token is configured, `undefined` otherwise. Values
|
|
86
|
+
* pass through `envString`/`envNumber` to reject unset-leaf proxies.
|
|
87
|
+
* @returns {Partial<GithubServiceConfig> | undefined} A partial config, or `undefined` when no GitHub token is configured.
|
|
88
|
+
*/
|
|
89
|
+
configFromEnvironment() {
|
|
90
|
+
const env = environment_js_1.DevopsEnvironment.devops.github;
|
|
91
|
+
const token = (0, environmentValue_js_1.envString)(env?.token);
|
|
92
|
+
if (!token)
|
|
93
|
+
return undefined;
|
|
94
|
+
return {
|
|
95
|
+
token,
|
|
96
|
+
owner: (0, environmentValue_js_1.envString)(env.owner),
|
|
97
|
+
repo: (0, environmentValue_js_1.envString)(env.repo),
|
|
98
|
+
baseUrl: (0, environmentValue_js_1.envString)(env.baseUrl),
|
|
99
|
+
timeout: (0, environmentValue_js_1.envNumber)(env.timeout),
|
|
100
|
+
};
|
|
101
|
+
}
|
|
102
|
+
/**
|
|
103
|
+
* @description Resolves the URL-encoded repository path for a call
|
|
104
|
+
* @summary Builds `/repos/<owner>/<repo>` from the input's `owner`/`repo`,
|
|
105
|
+
* falling back to the configured config values, and throws when either
|
|
106
|
+
* value is missing.
|
|
107
|
+
* @param {GithubRepositoryRef} [input] - The per-call repository override.
|
|
108
|
+
* @returns {string} The URL-encoded repository API path.
|
|
109
|
+
* @throws {InternalError} When neither the input nor the config yields an owner and repository.
|
|
110
|
+
*/
|
|
111
|
+
repoPath(input = {}) {
|
|
112
|
+
const owner = input.owner ?? this.config.owner;
|
|
113
|
+
const repo = input.repo ?? this.config.repo;
|
|
114
|
+
if (!owner || !repo) {
|
|
115
|
+
throw new db_decorators_1.InternalError("GitHub requires an owner and repository");
|
|
116
|
+
}
|
|
117
|
+
return `/repos/${encodeURIComponent(owner)}/${encodeURIComponent(repo)}`;
|
|
118
|
+
}
|
|
119
|
+
/**
|
|
120
|
+
* @description Normalizes a raw GitHub issue payload
|
|
121
|
+
* @summary Maps the raw issue JSON onto a {@link GithubIssue}: label objects
|
|
122
|
+
* are reduced to names, the author to its `login`, and numeric/string
|
|
123
|
+
* fields are coerced. The repository reference is echoed from the input,
|
|
124
|
+
* falling back to the configured `owner`/`repo`.
|
|
125
|
+
* @param {Record<string, unknown>} raw - The raw GitHub issue payload.
|
|
126
|
+
* @param {GithubRepositoryRef} ref - The repository reference the issue belongs to.
|
|
127
|
+
* @returns {GithubIssue} The normalized issue descriptor.
|
|
128
|
+
*/
|
|
129
|
+
mapIssue(raw, ref) {
|
|
130
|
+
return {
|
|
131
|
+
owner: ref.owner ?? this.config.owner,
|
|
132
|
+
repo: ref.repo ?? this.config.repo,
|
|
133
|
+
number: Number(raw["number"] ?? 0),
|
|
134
|
+
title: String(raw["title"] ?? ""),
|
|
135
|
+
state: (0, environmentValue_js_1.envString)(raw["state"]),
|
|
136
|
+
htmlUrl: (0, environmentValue_js_1.envString)(raw["html_url"]),
|
|
137
|
+
body: (0, environmentValue_js_1.envString)(raw["body"]),
|
|
138
|
+
user: (0, environmentValue_js_1.envString)(raw["user"]?.login),
|
|
139
|
+
labels: Array.isArray(raw["labels"])
|
|
140
|
+
? raw["labels"].map((label) => typeof label === "string" ? label : String(label.name ?? ""))
|
|
141
|
+
: undefined,
|
|
142
|
+
comments: typeof raw["comments"] === "number"
|
|
143
|
+
? raw["comments"]
|
|
144
|
+
: undefined,
|
|
145
|
+
createdAt: (0, environmentValue_js_1.envString)(raw["created_at"]),
|
|
146
|
+
updatedAt: (0, environmentValue_js_1.envString)(raw["updated_at"]),
|
|
147
|
+
};
|
|
148
|
+
}
|
|
149
|
+
/**
|
|
150
|
+
* @description Fetches a GitHub repository
|
|
151
|
+
* @summary `GET`s `/repos/<owner>/<repo>` for the given reference (falling
|
|
152
|
+
* back to the configured `owner`/`repo`) and returns the raw repository
|
|
153
|
+
* payload.
|
|
154
|
+
* @param {GithubRepositoryRef} [ref] - The repository to look up; defaults to the configured `owner`/`repo`.
|
|
155
|
+
* @returns {Promise<unknown>} The raw GitHub repository payload.
|
|
156
|
+
* @throws {InternalError} When the repository reference cannot be resolved.
|
|
157
|
+
* @throws {NotFoundError} When the repository does not exist (HTTP 404).
|
|
158
|
+
* @throws {ConflictError} When GitHub answers with HTTP 409.
|
|
159
|
+
* @throws {BadRequestError} When GitHub answers with any other HTTP error status.
|
|
160
|
+
*/
|
|
161
|
+
async getRepository(ref = {}) {
|
|
162
|
+
try {
|
|
163
|
+
const response = await this.client.get(this.repoPath(ref));
|
|
164
|
+
return response.data;
|
|
165
|
+
}
|
|
166
|
+
catch (error) {
|
|
167
|
+
throw (0, index_js_1.httpError)("GitHub", "get repository", error);
|
|
168
|
+
}
|
|
169
|
+
}
|
|
170
|
+
/**
|
|
171
|
+
* @description Lists GitHub issues with state, label, and page filtering
|
|
172
|
+
* @summary `GET`s `/repos/<owner>/<repo>/issues` with a `state` filter
|
|
173
|
+
* (default `"open"`), a page size (`per_page`, default `30`), a page
|
|
174
|
+
* number, and a comma-separated `labels` filter. Entries carrying a
|
|
175
|
+
* `pull_request` key are filtered out so only true issues are returned.
|
|
176
|
+
* @param {GithubListOptions} [options] - Repository override, state, paging, and label options.
|
|
177
|
+
* @returns {Promise<GithubIssue[]>} The normalized issues for the requested page.
|
|
178
|
+
* @throws {InternalError} When the repository reference cannot be resolved.
|
|
179
|
+
* @throws {NotFoundError} When the repository does not exist (HTTP 404).
|
|
180
|
+
* @throws {ConflictError} When GitHub answers with HTTP 409.
|
|
181
|
+
* @throws {BadRequestError} When GitHub answers with any other HTTP error status.
|
|
182
|
+
* @example
|
|
183
|
+
* ```ts
|
|
184
|
+
* let page = 1;
|
|
185
|
+
* for (;;) {
|
|
186
|
+
* const issues = await github.listIssues({
|
|
187
|
+
* state: "open",
|
|
188
|
+
* labels: "bug,priority:high",
|
|
189
|
+
* limit: 50,
|
|
190
|
+
* page,
|
|
191
|
+
* });
|
|
192
|
+
* if (issues.length === 0) break;
|
|
193
|
+
* page += 1;
|
|
194
|
+
* }
|
|
195
|
+
* ```
|
|
196
|
+
*/
|
|
197
|
+
async listIssues(options = {}) {
|
|
198
|
+
try {
|
|
199
|
+
const response = await this.client.get(`${this.repoPath(options)}/issues`, {
|
|
200
|
+
params: {
|
|
201
|
+
state: options.state ?? "open",
|
|
202
|
+
per_page: options.limit ?? 30,
|
|
203
|
+
page: options.page,
|
|
204
|
+
labels: options.labels,
|
|
205
|
+
},
|
|
206
|
+
});
|
|
207
|
+
return response.data
|
|
208
|
+
.filter((entry) => !entry["pull_request"])
|
|
209
|
+
.map((entry) => this.mapIssue(entry, options));
|
|
210
|
+
}
|
|
211
|
+
catch (error) {
|
|
212
|
+
throw (0, index_js_1.httpError)("GitHub", "list issues", error);
|
|
213
|
+
}
|
|
214
|
+
}
|
|
215
|
+
/**
|
|
216
|
+
* @description Creates a GitHub issue
|
|
217
|
+
* @summary `POST`s the title, body, labels, assignees, and milestone to
|
|
218
|
+
* `/repos/<owner>/<repo>/issues` and returns the normalized issue
|
|
219
|
+
* descriptor. Requires a non-empty `title` and a resolvable repository
|
|
220
|
+
* reference.
|
|
221
|
+
* @param {GithubIssueInput} input - The issue content and repository targeting.
|
|
222
|
+
* @returns {Promise<GithubIssue>} The normalized created issue.
|
|
223
|
+
* @throws {InternalError} When the title is empty or the repository reference cannot be resolved.
|
|
224
|
+
* @throws {NotFoundError} When the repository does not exist (HTTP 404).
|
|
225
|
+
* @throws {ConflictError} When GitHub answers with HTTP 409.
|
|
226
|
+
* @throws {BadRequestError} When GitHub answers with any other HTTP error status (e.g. invalid labels or assignees).
|
|
227
|
+
*/
|
|
228
|
+
async createIssue(input) {
|
|
229
|
+
if (!input.title) {
|
|
230
|
+
throw new db_decorators_1.InternalError("GitHub issue requires a title");
|
|
231
|
+
}
|
|
232
|
+
try {
|
|
233
|
+
const response = await this.client.post(`${this.repoPath(input)}/issues`, {
|
|
234
|
+
title: input.title,
|
|
235
|
+
body: input.body,
|
|
236
|
+
labels: input.labels,
|
|
237
|
+
assignees: input.assignees,
|
|
238
|
+
milestone: input.milestone,
|
|
239
|
+
});
|
|
240
|
+
return this.mapIssue(response.data, input);
|
|
241
|
+
}
|
|
242
|
+
catch (error) {
|
|
243
|
+
throw (0, index_js_1.httpError)("GitHub", "create issue", error);
|
|
244
|
+
}
|
|
245
|
+
}
|
|
246
|
+
/**
|
|
247
|
+
* @description Comments on a GitHub issue
|
|
248
|
+
* @summary `POST`s the comment body to
|
|
249
|
+
* `/repos/<owner>/<repo>/issues/<number>/comments` and returns the comment
|
|
250
|
+
* identifier and its HTML URL. Requires a non-empty issue number and body.
|
|
251
|
+
* @param {GithubRepositoryRef & {number: number, body: string}} input - The repository targeting, issue number, and comment body.
|
|
252
|
+
* @returns {Promise<{id: number, htmlUrl?: string}>} The created comment's ID and HTML URL.
|
|
253
|
+
* @throws {InternalError} When the issue number or body is empty, or the repository reference cannot be resolved.
|
|
254
|
+
* @throws {NotFoundError} When the issue does not exist (HTTP 404).
|
|
255
|
+
* @throws {ConflictError} When GitHub answers with HTTP 409.
|
|
256
|
+
* @throws {BadRequestError} When GitHub answers with any other HTTP error status.
|
|
257
|
+
*/
|
|
258
|
+
async commentOnIssue(input) {
|
|
259
|
+
if (!input.number || !input.body) {
|
|
260
|
+
throw new db_decorators_1.InternalError("GitHub comment requires an issue number and body");
|
|
261
|
+
}
|
|
262
|
+
try {
|
|
263
|
+
const response = await this.client.post(`${this.repoPath(input)}/issues/${input.number}/comments`, {
|
|
264
|
+
body: input.body,
|
|
265
|
+
});
|
|
266
|
+
return { id: Number(response.data.id ?? 0), htmlUrl: response.data.html_url };
|
|
267
|
+
}
|
|
268
|
+
catch (error) {
|
|
269
|
+
throw (0, index_js_1.httpError)("GitHub", "comment on issue", error);
|
|
270
|
+
}
|
|
271
|
+
}
|
|
272
|
+
/**
|
|
273
|
+
* @description Lists GitHub pull requests with state and page filtering
|
|
274
|
+
* @summary `GET`s `/repos/<owner>/<repo>/pulls` with a `state` filter
|
|
275
|
+
* (default `"open"`), a page size (`per_page`, default `30`), and a page
|
|
276
|
+
* number. Pull requests are returned as raw GitHub payloads.
|
|
277
|
+
* @param {GithubListOptions} [options] - Repository override, state, and paging options.
|
|
278
|
+
* @returns {Promise<unknown[]>} The raw GitHub pull-request payloads.
|
|
279
|
+
* @throws {InternalError} When the repository reference cannot be resolved.
|
|
280
|
+
* @throws {NotFoundError} When the repository does not exist (HTTP 404).
|
|
281
|
+
* @throws {ConflictError} When GitHub answers with HTTP 409.
|
|
282
|
+
* @throws {BadRequestError} When GitHub answers with any other HTTP error status.
|
|
283
|
+
*/
|
|
284
|
+
async listPullRequests(options = {}) {
|
|
285
|
+
try {
|
|
286
|
+
const response = await this.client.get(`${this.repoPath(options)}/pulls`, {
|
|
287
|
+
params: {
|
|
288
|
+
state: options.state ?? "open",
|
|
289
|
+
per_page: options.limit ?? 30,
|
|
290
|
+
page: options.page,
|
|
291
|
+
},
|
|
292
|
+
});
|
|
293
|
+
return response.data;
|
|
294
|
+
}
|
|
295
|
+
catch (error) {
|
|
296
|
+
throw (0, index_js_1.httpError)("GitHub", "list pull requests", error);
|
|
297
|
+
}
|
|
298
|
+
}
|
|
299
|
+
}
|
|
300
|
+
exports.GithubService = GithubService;
|
|
301
|
+
//# sourceMappingURL=GithubService.js.map
|
|
302
|
+
//# sourceMappingURL=GithubService.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"devops/github/GithubService.cjs","sourceRoot":"","sources":["devops/github/GithubService.js"],"names":[],"mappings":"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"}
|