@decaf-ts/integrations 0.11.0 → 0.12.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/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 +63 -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 +31 -0
- package/lib/cjs/comms/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/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/environment.cjs +46 -0
- package/lib/cjs/io/environment.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 +30 -0
- package/lib/cjs/io/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/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 +59 -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 +14 -0
- package/lib/esm/comms/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/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/environment.js +42 -0
- package/lib/esm/io/environment.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 +13 -0
- package/lib/esm/io/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/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 +84 -0
- package/lib/types/comms/environment.d.mts +84 -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 +13 -0
- package/lib/types/comms/index.d.mts +13 -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/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/environment.d.cts +67 -0
- package/lib/types/io/environment.d.mts +67 -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 +12 -0
- package/lib/types/io/index.d.mts +12 -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 +180 -3
- package/sql/002_rls.sql +660 -15
- package/sql/004_credentials.sql +46 -0
|
@@ -0,0 +1,230 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @module integrations/comms/gmail/service
|
|
3
|
+
* @summary Gmail API integration service for sending and listing messages.
|
|
4
|
+
* @description Exposes the Gmail REST API (`users.messages.send`,
|
|
5
|
+
* `users.messages.list`, `users.messages.get`, `users.labels.list`) as an
|
|
6
|
+
* undecorated client-based service built on {@link HttpApiService}.
|
|
7
|
+
* Message sending reuses the shared MIME builder from the email integration
|
|
8
|
+
* (`buildEmail`) and posts the raw MIME message as base64url. Configuration
|
|
9
|
+
* comes from an explicit `GmailServiceConfig` or the `comms.gmail` environment
|
|
10
|
+
* slice, and failures are mapped to decaf errors via {@link httpError}.
|
|
11
|
+
*/
|
|
12
|
+
import { InternalError } from "@decaf-ts/db-decorators";
|
|
13
|
+
import { CommsEnvironment } from "./../environment.js";
|
|
14
|
+
import { envNumber, envString } from "./../../shared/environmentValue.js";
|
|
15
|
+
import { HttpApiService, httpError, } from "./../../shared/http/index.js";
|
|
16
|
+
import { buildEmail } from "./../email/mime.js";
|
|
17
|
+
/**
|
|
18
|
+
* @description Gmail API integration service
|
|
19
|
+
* @summary An undecorated HTTP service for sending MIME-built
|
|
20
|
+
* emails, listing messages with Gmail query syntax and page tokens, fetching
|
|
21
|
+
* a single message in a chosen format, and listing labels. All operations
|
|
22
|
+
* require an OAuth token (`requireToken()`) and operate on the configured
|
|
23
|
+
* `userId` mailbox (default `"me"`); transport failures are mapped to decaf
|
|
24
|
+
* errors via {@link httpError}.
|
|
25
|
+
* @class GmailService
|
|
26
|
+
* @category Comms
|
|
27
|
+
* @example
|
|
28
|
+
* ```ts
|
|
29
|
+
* import { GmailService } from "@decaf-ts/integrations/comms/gmail";
|
|
30
|
+
*
|
|
31
|
+
* const gmail = new GmailService();
|
|
32
|
+
* await gmail.initialize({
|
|
33
|
+
* token: process.env.GRAPH_CREDENTIAL_GMAIL_TOKEN,
|
|
34
|
+
* });
|
|
35
|
+
* await gmail.send({
|
|
36
|
+
* from: "bot@example.com",
|
|
37
|
+
* to: "ops@example.com",
|
|
38
|
+
* subject: "Deploy",
|
|
39
|
+
* text: "Release 1.2.0 is live",
|
|
40
|
+
* });
|
|
41
|
+
* ```
|
|
42
|
+
* @memberOf module:integrations/comms/gmail/service
|
|
43
|
+
*/
|
|
44
|
+
export class GmailService extends HttpApiService {
|
|
45
|
+
constructor() {
|
|
46
|
+
super(...arguments);
|
|
47
|
+
/**
|
|
48
|
+
* @description The provider name used in error messages
|
|
49
|
+
*/
|
|
50
|
+
this.serviceName = "Gmail";
|
|
51
|
+
}
|
|
52
|
+
/**
|
|
53
|
+
* @description The Gmail REST API base URL
|
|
54
|
+
* @summary Used when the resolved config carries no `baseUrl`.
|
|
55
|
+
* @returns {string} `"https://gmail.googleapis.com/gmail/v1"`.
|
|
56
|
+
*/
|
|
57
|
+
defaultBaseUrl() {
|
|
58
|
+
return "https://gmail.googleapis.com/gmail/v1";
|
|
59
|
+
}
|
|
60
|
+
/**
|
|
61
|
+
* @description Builds the Gmail OAuth bearer authorization headers
|
|
62
|
+
* @summary Returns the `Authorization: Bearer <token>` header when the
|
|
63
|
+
* config carries a token, and no headers otherwise.
|
|
64
|
+
* @param {GmailServiceConfig} config - The resolved service configuration.
|
|
65
|
+
* @returns {Record<string, string>} The authorization headers (empty without a token).
|
|
66
|
+
*/
|
|
67
|
+
authHeaders(config) {
|
|
68
|
+
return config.token ? { Authorization: `Bearer ${config.token}` } : {};
|
|
69
|
+
}
|
|
70
|
+
/**
|
|
71
|
+
* @description Reads the Gmail credentials and defaults from the environment
|
|
72
|
+
* @summary Reads the `comms.gmail` environment slice and returns a partial
|
|
73
|
+
* config when a token is configured, `undefined` otherwise. Values pass
|
|
74
|
+
* through `envString`/`envNumber` to reject unset-leaf proxies.
|
|
75
|
+
* @returns {Partial<GmailServiceConfig> | undefined} A partial config, or `undefined` when no Gmail token is configured.
|
|
76
|
+
*/
|
|
77
|
+
configFromEnvironment() {
|
|
78
|
+
const env = CommsEnvironment.comms.gmail;
|
|
79
|
+
const token = envString(env?.token);
|
|
80
|
+
if (!token)
|
|
81
|
+
return undefined;
|
|
82
|
+
return {
|
|
83
|
+
token,
|
|
84
|
+
userId: envString(env.userId),
|
|
85
|
+
baseUrl: envString(env.baseUrl),
|
|
86
|
+
timeout: envNumber(env.timeout),
|
|
87
|
+
};
|
|
88
|
+
}
|
|
89
|
+
/**
|
|
90
|
+
* @description Builds the mailbox-scoped API path
|
|
91
|
+
* @summary Returns `/users/<userId>` with the configured `userId` (or
|
|
92
|
+
* `"me"` when unset) URL-encoded; all message and label operations are
|
|
93
|
+
* relative to this path.
|
|
94
|
+
* @returns {string} The URL-encoded mailbox path.
|
|
95
|
+
*/
|
|
96
|
+
userPath() {
|
|
97
|
+
return `/users/${encodeURIComponent(this.config.userId ?? "me")}`;
|
|
98
|
+
}
|
|
99
|
+
/**
|
|
100
|
+
* @description Sends an email through the Gmail API
|
|
101
|
+
* @summary Builds a raw MIME message from the input with the shared email
|
|
102
|
+
* MIME builder (`buildEmail`), base64url-encodes it, and `POST`s it to
|
|
103
|
+
* `users.messages.send`. Requires a token and a `from` sender address.
|
|
104
|
+
* @param {EmailMessageInput} input - The message envelope and body (`from`, `to`, `subject`, and optional `cc`/`bcc`/`text`/`html`/`replyTo`/`attachments`).
|
|
105
|
+
* @returns {Promise<GmailSendResult>} Gmail's identifiers for the sent message.
|
|
106
|
+
* @throws {InternalError} When no token is configured or the sender address is missing.
|
|
107
|
+
* @throws {NotFoundError} When the endpoint answers with HTTP 404.
|
|
108
|
+
* @throws {ConflictError} When Gmail answers with HTTP 409.
|
|
109
|
+
* @throws {BadRequestError} When Gmail answers with any other HTTP error status (e.g. invalid recipients).
|
|
110
|
+
*/
|
|
111
|
+
async send(input) {
|
|
112
|
+
this.requireToken();
|
|
113
|
+
if (!input.from) {
|
|
114
|
+
throw new InternalError("Gmail send requires a sender address");
|
|
115
|
+
}
|
|
116
|
+
const built = buildEmail(input);
|
|
117
|
+
try {
|
|
118
|
+
const response = await this.client.post(`${this.userPath()}/messages/send`, {
|
|
119
|
+
raw: Buffer.from(built.raw, "utf8").toString("base64url"),
|
|
120
|
+
});
|
|
121
|
+
return {
|
|
122
|
+
id: String(response.data.id ?? built.messageId),
|
|
123
|
+
threadId: response.data.threadId,
|
|
124
|
+
labelIds: response.data.labelIds,
|
|
125
|
+
};
|
|
126
|
+
}
|
|
127
|
+
catch (error) {
|
|
128
|
+
throw httpError("Gmail", "send message", error);
|
|
129
|
+
}
|
|
130
|
+
}
|
|
131
|
+
/**
|
|
132
|
+
* @description Lists mailbox messages with Gmail query paging
|
|
133
|
+
* @summary `GET`s `users.messages.list` with an optional Gmail `query`
|
|
134
|
+
* (`q` parameter, e.g. `"from:user@example.com is:unread"`), a page size
|
|
135
|
+
* (default `25`), a `pageToken` from the previous page, and `labelIds`
|
|
136
|
+
* filtering. Returns the message references and the `nextPageToken` to pass
|
|
137
|
+
* back as `pageToken` for the next page.
|
|
138
|
+
* @param {object} [options] - Query and paging options.
|
|
139
|
+
* @param {string} [options.query] - Gmail search query (`q` parameter).
|
|
140
|
+
* @param {number} [options.maxResults] - Page size; defaults to `25`.
|
|
141
|
+
* @param {string} [options.pageToken] - The `nextPageToken` from the previous page.
|
|
142
|
+
* @param {string[]} [options.labelIds] - Label IDs the messages must carry.
|
|
143
|
+
* @returns {Promise<GmailListResult>} One page of message references with the next page token when more pages exist.
|
|
144
|
+
* @throws {InternalError} When no token is configured.
|
|
145
|
+
* @throws {NotFoundError} When the endpoint answers with HTTP 404.
|
|
146
|
+
* @throws {ConflictError} When Gmail answers with HTTP 409.
|
|
147
|
+
* @throws {BadRequestError} When Gmail answers with any other HTTP error status (e.g. invalid query).
|
|
148
|
+
* @example
|
|
149
|
+
* ```ts
|
|
150
|
+
* let pageToken: string | undefined;
|
|
151
|
+
* do {
|
|
152
|
+
* const page = await gmail.listMessages({
|
|
153
|
+
* query: "is:unread",
|
|
154
|
+
* maxResults: 100,
|
|
155
|
+
* pageToken,
|
|
156
|
+
* });
|
|
157
|
+
* console.log(page.messages);
|
|
158
|
+
* pageToken = page.nextPageToken;
|
|
159
|
+
* } while (pageToken);
|
|
160
|
+
* ```
|
|
161
|
+
*/
|
|
162
|
+
async listMessages(options = {}) {
|
|
163
|
+
this.requireToken();
|
|
164
|
+
try {
|
|
165
|
+
const response = await this.client.get(`${this.userPath()}/messages`, {
|
|
166
|
+
params: {
|
|
167
|
+
q: options.query,
|
|
168
|
+
maxResults: options.maxResults ?? 25,
|
|
169
|
+
pageToken: options.pageToken,
|
|
170
|
+
labelIds: options.labelIds,
|
|
171
|
+
},
|
|
172
|
+
});
|
|
173
|
+
return {
|
|
174
|
+
messages: response.data.messages ?? [],
|
|
175
|
+
nextPageToken: response.data.nextPageToken,
|
|
176
|
+
resultSizeEstimate: response.data.resultSizeEstimate,
|
|
177
|
+
};
|
|
178
|
+
}
|
|
179
|
+
catch (error) {
|
|
180
|
+
throw httpError("Gmail", "list messages", error);
|
|
181
|
+
}
|
|
182
|
+
}
|
|
183
|
+
/**
|
|
184
|
+
* @description Fetches a single Gmail message
|
|
185
|
+
* @summary `GET`s `users.messages.get` for the given message ID with the
|
|
186
|
+
* requested `format`. With `"full"` (the default) the payload includes the
|
|
187
|
+
* parsed body parts; `"metadata"` limits it to headers and labels,
|
|
188
|
+
* `"minimal"` to identifiers only, and `"raw"` returns the raw MIME string.
|
|
189
|
+
* @param {string} id - The Gmail message ID.
|
|
190
|
+
* @param {"full" | "metadata" | "minimal" | "raw"} [format] - The message format to request; defaults to `"full"`.
|
|
191
|
+
* @returns {Promise<Record<string, unknown>>} The raw Gmail message payload in the requested format.
|
|
192
|
+
* @throws {InternalError} When no token is configured or the message ID is empty.
|
|
193
|
+
* @throws {NotFoundError} When the message does not exist (HTTP 404).
|
|
194
|
+
* @throws {ConflictError} When Gmail answers with HTTP 409.
|
|
195
|
+
* @throws {BadRequestError} When Gmail answers with any other HTTP error status.
|
|
196
|
+
*/
|
|
197
|
+
async getMessage(id, format = "full") {
|
|
198
|
+
this.requireToken();
|
|
199
|
+
if (!id)
|
|
200
|
+
throw new InternalError("Gmail getMessage requires a message ID");
|
|
201
|
+
try {
|
|
202
|
+
const response = await this.client.get(`${this.userPath()}/messages/${encodeURIComponent(id)}`, { params: { format } });
|
|
203
|
+
return response.data;
|
|
204
|
+
}
|
|
205
|
+
catch (error) {
|
|
206
|
+
throw httpError("Gmail", "get message", error);
|
|
207
|
+
}
|
|
208
|
+
}
|
|
209
|
+
/**
|
|
210
|
+
* @description Lists the mailbox's Gmail labels
|
|
211
|
+
* @summary `GET`s `users.labels.list` and returns the raw label payloads
|
|
212
|
+
* (including `id`, `name`, and `type`).
|
|
213
|
+
* @returns {Promise<Array<Record<string, unknown>>>} The raw Gmail label payloads.
|
|
214
|
+
* @throws {InternalError} When no token is configured.
|
|
215
|
+
* @throws {NotFoundError} When the endpoint answers with HTTP 404.
|
|
216
|
+
* @throws {ConflictError} When Gmail answers with HTTP 409.
|
|
217
|
+
* @throws {BadRequestError} When Gmail answers with any other HTTP error status.
|
|
218
|
+
*/
|
|
219
|
+
async listLabels() {
|
|
220
|
+
this.requireToken();
|
|
221
|
+
try {
|
|
222
|
+
const response = await this.client.get(`${this.userPath()}/labels`);
|
|
223
|
+
return response.data.labels ?? [];
|
|
224
|
+
}
|
|
225
|
+
catch (error) {
|
|
226
|
+
throw httpError("Gmail", "list labels", error);
|
|
227
|
+
}
|
|
228
|
+
}
|
|
229
|
+
}
|
|
230
|
+
//# sourceMappingURL=GmailService.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"GmailService.js","sourceRoot":"","sources":["../../../../src/comms/gmail/GmailService.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @module integrations/comms/gmail
|
|
3
|
+
* @summary Gmail service (REST v1 message send/list/get and label listing).
|
|
4
|
+
* @description Re-exports the Gmail client-based service and its types.
|
|
5
|
+
*/
|
|
6
|
+
export * from "./GmailService.js";
|
|
7
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/comms/gmail/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,kCAA+B"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @module integrations/comms
|
|
3
|
+
* @summary Comms integration services (Slack, Telegram, Teams, Gmail, Email).
|
|
4
|
+
* @description Re-exports the messaging/email services, their per-service
|
|
5
|
+
* modules, and the shared `comms` environment slice. Each sub-module is also
|
|
6
|
+
* available through its own package subpath export.
|
|
7
|
+
*/
|
|
8
|
+
export * from "./email/index.js";
|
|
9
|
+
export * from "./gmail/index.js";
|
|
10
|
+
export * from "./slack/index.js";
|
|
11
|
+
export * from "./teams/index.js";
|
|
12
|
+
export * from "./telegram/index.js";
|
|
13
|
+
export * from "./environment.js";
|
|
14
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/comms/index.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AACH,iCAAwB;AACxB,iCAAwB;AACxB,iCAAwB;AACxB,iCAAwB;AACxB,oCAA2B;AAC3B,iCAA8B"}
|
|
@@ -0,0 +1,259 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @module integrations/comms/slack/service
|
|
3
|
+
* @summary Slack Web API integration service for posting messages and reading conversations and users.
|
|
4
|
+
* @description Exposes the Slack Web API (`chat.postMessage`, `conversations.*`, `users.info`)
|
|
5
|
+
* as an undecorated client-based service built on {@link HttpApiService}.
|
|
6
|
+
* Configuration comes from an explicit `SlackServiceConfig` or the `comms.slack`
|
|
7
|
+
* environment slice; every response is normalized and failures are mapped to decaf
|
|
8
|
+
* errors via {@link httpError}.
|
|
9
|
+
*/
|
|
10
|
+
import { InternalError } from "@decaf-ts/db-decorators";
|
|
11
|
+
import { CommsEnvironment } from "./../environment.js";
|
|
12
|
+
import { envNumber, envString } from "./../../shared/environmentValue.js";
|
|
13
|
+
import { HttpApiService, httpError, } from "./../../shared/http/index.js";
|
|
14
|
+
/**
|
|
15
|
+
* @description Slack Web API integration service
|
|
16
|
+
* @summary An undecorated HTTP service for posting messages,
|
|
17
|
+
* listing conversations with cursor paging, fetching a single conversation,
|
|
18
|
+
* and looking up users. The Slack Bot token is sent as a bearer token, every
|
|
19
|
+
* call requires it (`requireToken()`), non-`ok` Slack responses raise
|
|
20
|
+
* `InternalError`, and transport failures are mapped to decaf errors via
|
|
21
|
+
* {@link httpError}.
|
|
22
|
+
* @class SlackService
|
|
23
|
+
* @category Comms
|
|
24
|
+
* @example
|
|
25
|
+
* ```ts
|
|
26
|
+
* import { SlackService } from "@decaf-ts/integrations/comms/slack";
|
|
27
|
+
*
|
|
28
|
+
* const slack = new SlackService();
|
|
29
|
+
* await slack.initialize({
|
|
30
|
+
* token: process.env.GRAPH_CREDENTIAL_SLACK_TOKEN,
|
|
31
|
+
* });
|
|
32
|
+
* await slack.postMessage({
|
|
33
|
+
* channel: "#general",
|
|
34
|
+
* text: "Deployment finished",
|
|
35
|
+
* });
|
|
36
|
+
* ```
|
|
37
|
+
* @mermaid
|
|
38
|
+
* sequenceDiagram
|
|
39
|
+
* autonumber
|
|
40
|
+
* participant Caller
|
|
41
|
+
* participant Service as SlackService
|
|
42
|
+
* participant Slack as Slack Web API
|
|
43
|
+
* Caller->>Service: postMessage(input)
|
|
44
|
+
* activate Service
|
|
45
|
+
* Service->>Service: requireToken()
|
|
46
|
+
* Service->>Slack: POST /chat.postMessage
|
|
47
|
+
* activate Slack
|
|
48
|
+
* Slack-->>Service: { ok, channel, ts }
|
|
49
|
+
* deactivate Slack
|
|
50
|
+
* alt ok
|
|
51
|
+
* Service-->>Caller: SlackPostMessageResult
|
|
52
|
+
* else error
|
|
53
|
+
* Service--xCaller: InternalError / mapped decaf error
|
|
54
|
+
* end
|
|
55
|
+
* deactivate Service
|
|
56
|
+
* @memberOf module:integrations/comms/slack/service
|
|
57
|
+
*/
|
|
58
|
+
export class SlackService extends HttpApiService {
|
|
59
|
+
constructor() {
|
|
60
|
+
super(...arguments);
|
|
61
|
+
/**
|
|
62
|
+
* @description The provider name used in error messages
|
|
63
|
+
*/
|
|
64
|
+
this.serviceName = "Slack";
|
|
65
|
+
}
|
|
66
|
+
/**
|
|
67
|
+
* @description The Slack Web API base URL
|
|
68
|
+
* @summary Used when the resolved config carries no `baseUrl`.
|
|
69
|
+
* @returns {string} `"https://slack.com/api"`.
|
|
70
|
+
*/
|
|
71
|
+
defaultBaseUrl() {
|
|
72
|
+
return "https://slack.com/api";
|
|
73
|
+
}
|
|
74
|
+
/**
|
|
75
|
+
* @description Builds the Slack bearer authorization headers
|
|
76
|
+
* @summary Returns the `Authorization: Bearer <token>` header when the
|
|
77
|
+
* config carries a token, and no headers otherwise.
|
|
78
|
+
* @param {SlackServiceConfig} config - The resolved service configuration.
|
|
79
|
+
* @returns {Record<string, string>} The authorization headers (empty without a token).
|
|
80
|
+
*/
|
|
81
|
+
authHeaders(config) {
|
|
82
|
+
return config.token ? { Authorization: `Bearer ${config.token}` } : {};
|
|
83
|
+
}
|
|
84
|
+
/**
|
|
85
|
+
* @description Reads the Slack credentials and defaults from the environment
|
|
86
|
+
* @summary Reads the `comms.slack` environment slice and returns a partial
|
|
87
|
+
* config when a token is configured, `undefined` otherwise. Values pass
|
|
88
|
+
* through `envString`/`envNumber` to reject unset-leaf proxies.
|
|
89
|
+
* @returns {Partial<SlackServiceConfig> | undefined} A partial config, or `undefined` when no Slack token is configured.
|
|
90
|
+
*/
|
|
91
|
+
configFromEnvironment() {
|
|
92
|
+
const env = CommsEnvironment.comms.slack;
|
|
93
|
+
const token = envString(env?.token);
|
|
94
|
+
if (!token)
|
|
95
|
+
return undefined;
|
|
96
|
+
return {
|
|
97
|
+
token,
|
|
98
|
+
baseUrl: envString(env.baseUrl),
|
|
99
|
+
timeout: envNumber(env.timeout),
|
|
100
|
+
};
|
|
101
|
+
}
|
|
102
|
+
/**
|
|
103
|
+
* @description Posts a request to a Slack Web API method
|
|
104
|
+
* @summary Shared request path for all Slack operations: asserts a token is
|
|
105
|
+
* configured, `POST`s the payload to `/<method>`, rejects non-`ok` Slack
|
|
106
|
+
* responses with an `InternalError`, and maps transport failures through
|
|
107
|
+
* {@link httpError}.
|
|
108
|
+
* @template T - The expected Slack response shape, extending `SlackApiResponse`.
|
|
109
|
+
* @param {string} method - The Slack Web API method name (e.g. `"chat.postMessage"`).
|
|
110
|
+
* @param {Record<string, unknown>} payload - The JSON body for the method.
|
|
111
|
+
* @returns {Promise<T>} The parsed Slack response payload.
|
|
112
|
+
* @throws {InternalError} When no token is configured or Slack answers with `ok: false`.
|
|
113
|
+
* @throws {NotFoundError} When Slack answers with HTTP 404.
|
|
114
|
+
* @throws {ConflictError} When Slack answers with HTTP 409.
|
|
115
|
+
* @throws {BadRequestError} When Slack answers with any other HTTP error status.
|
|
116
|
+
*/
|
|
117
|
+
async call(method, payload) {
|
|
118
|
+
this.requireToken();
|
|
119
|
+
try {
|
|
120
|
+
const response = await this.client.post(`/${method}`, payload);
|
|
121
|
+
const data = response.data;
|
|
122
|
+
if (!data || data.ok !== true) {
|
|
123
|
+
throw new InternalError(`Slack API ${method} failed: ${data?.error ?? "unknown error"}`);
|
|
124
|
+
}
|
|
125
|
+
return data;
|
|
126
|
+
}
|
|
127
|
+
catch (error) {
|
|
128
|
+
throw httpError("Slack", `API ${method}`, error);
|
|
129
|
+
}
|
|
130
|
+
}
|
|
131
|
+
/**
|
|
132
|
+
* @description Posts a message to a Slack channel or thread
|
|
133
|
+
* @summary Sends the input to Slack's `chat.postMessage` method and returns
|
|
134
|
+
* the destination channel and message timestamp; use the returned `ts` as
|
|
135
|
+
* `threadTs` to reply in the same thread. Provide `blocks` for Block Kit
|
|
136
|
+
* layouts (with `text` as the fallback), or plain text alone.
|
|
137
|
+
* @param {SlackPostMessageInput} input - The message destination and content.
|
|
138
|
+
* @returns {Promise<SlackPostMessageResult>} The posted message's channel, timestamp, text, and raw payload.
|
|
139
|
+
* @throws {InternalError} When no token is configured or Slack rejects the message.
|
|
140
|
+
* @throws {NotFoundError} When the channel cannot be found (HTTP 404).
|
|
141
|
+
* @throws {ConflictError} When Slack answers with HTTP 409.
|
|
142
|
+
* @throws {BadRequestError} When Slack answers with any other HTTP error status.
|
|
143
|
+
* @example
|
|
144
|
+
* ```ts
|
|
145
|
+
* await slack.postMessage({
|
|
146
|
+
* channel: "#deploys",
|
|
147
|
+
* text: "Release 1.2.0 is live",
|
|
148
|
+
* unfurlLinks: false,
|
|
149
|
+
* });
|
|
150
|
+
* ```
|
|
151
|
+
*/
|
|
152
|
+
async postMessage(input) {
|
|
153
|
+
const data = await this.call("chat.postMessage", {
|
|
154
|
+
channel: input.channel,
|
|
155
|
+
text: input.text,
|
|
156
|
+
blocks: input.blocks,
|
|
157
|
+
thread_ts: input.threadTs,
|
|
158
|
+
reply_broadcast: input.replyBroadcast,
|
|
159
|
+
unfurl_links: input.unfurlLinks,
|
|
160
|
+
unfurl_media: input.unfurlMedia,
|
|
161
|
+
});
|
|
162
|
+
return {
|
|
163
|
+
channel: data.channel,
|
|
164
|
+
ts: data.ts,
|
|
165
|
+
text: data.text,
|
|
166
|
+
message: data.message,
|
|
167
|
+
};
|
|
168
|
+
}
|
|
169
|
+
/**
|
|
170
|
+
* @description Lists Slack conversations with cursor paging
|
|
171
|
+
* @summary Calls `conversations.list` with a page size (default `100`),
|
|
172
|
+
* conversation `types` (default public and private channels), and archived
|
|
173
|
+
* exclusion (default `true`), returning normalized channels and the
|
|
174
|
+
* `nextCursor` to pass back as `cursor` for the next page.
|
|
175
|
+
* @param {object} [options] - Paging and filter options.
|
|
176
|
+
* @param {number} [options.limit] - Page size; defaults to `100`.
|
|
177
|
+
* @param {string} [options.cursor] - The `nextCursor` from the previous page.
|
|
178
|
+
* @param {string} [options.types] - Comma-separated conversation types (e.g. `"public_channel,private_channel"`); defaults to `"public_channel,private_channel"`.
|
|
179
|
+
* @param {boolean} [options.excludeArchived] - Whether archived channels are excluded; defaults to `true`.
|
|
180
|
+
* @returns {Promise<{channels: SlackChannel[], nextCursor?: string}>} The page of channels and the cursor for the next page, when more pages exist.
|
|
181
|
+
* @throws {InternalError} When no token is configured or Slack rejects the call.
|
|
182
|
+
* @throws {NotFoundError} When Slack answers with HTTP 404.
|
|
183
|
+
* @throws {ConflictError} When Slack answers with HTTP 409.
|
|
184
|
+
* @throws {BadRequestError} When Slack answers with any other HTTP error status.
|
|
185
|
+
* @example
|
|
186
|
+
* ```ts
|
|
187
|
+
* let cursor: string | undefined;
|
|
188
|
+
* do {
|
|
189
|
+
* const page = await slack.listConversations({ limit: 200, cursor });
|
|
190
|
+
* console.log(page.channels.map((channel) => channel.name));
|
|
191
|
+
* cursor = page.nextCursor;
|
|
192
|
+
* } while (cursor);
|
|
193
|
+
* ```
|
|
194
|
+
*/
|
|
195
|
+
async listConversations(options = {}) {
|
|
196
|
+
const data = await this.call("conversations.list", {
|
|
197
|
+
limit: options.limit ?? 100,
|
|
198
|
+
cursor: options.cursor,
|
|
199
|
+
types: options.types ?? "public_channel,private_channel",
|
|
200
|
+
exclude_archived: options.excludeArchived ?? true,
|
|
201
|
+
});
|
|
202
|
+
return {
|
|
203
|
+
channels: (data.channels ?? []).map((channel) => ({
|
|
204
|
+
id: String(channel["id"] ?? ""),
|
|
205
|
+
name: envString(channel["name"]),
|
|
206
|
+
isPrivate: channel["is_private"] === true,
|
|
207
|
+
isArchived: channel["is_archived"] === true,
|
|
208
|
+
memberCount: typeof channel["num_members"] === "number"
|
|
209
|
+
? channel["num_members"]
|
|
210
|
+
: undefined,
|
|
211
|
+
topic: channel["topic"]?.value,
|
|
212
|
+
purpose: channel["purpose"]?.value,
|
|
213
|
+
})),
|
|
214
|
+
nextCursor: envString(data.response_metadata?.next_cursor),
|
|
215
|
+
};
|
|
216
|
+
}
|
|
217
|
+
/**
|
|
218
|
+
* @description Fetches a single Slack conversation
|
|
219
|
+
* @summary Calls `conversations.info` for the given channel ID (or
|
|
220
|
+
* `#name`) and returns the normalized channel descriptor.
|
|
221
|
+
* @param {string} channel - The channel ID or `#name` to look up.
|
|
222
|
+
* @returns {Promise<SlackChannel>} The normalized conversation descriptor.
|
|
223
|
+
* @throws {InternalError} When no token is configured or Slack rejects the call.
|
|
224
|
+
* @throws {NotFoundError} When the channel does not exist (HTTP 404).
|
|
225
|
+
* @throws {ConflictError} When Slack answers with HTTP 409.
|
|
226
|
+
* @throws {BadRequestError} When Slack answers with any other HTTP error status.
|
|
227
|
+
*/
|
|
228
|
+
async getConversation(channel) {
|
|
229
|
+
const data = await this.call("conversations.info", { channel });
|
|
230
|
+
const found = data.channel ?? {};
|
|
231
|
+
return {
|
|
232
|
+
id: String(found["id"] ?? channel),
|
|
233
|
+
name: envString(found["name"]),
|
|
234
|
+
isPrivate: found["is_private"] === true,
|
|
235
|
+
isArchived: found["is_archived"] === true,
|
|
236
|
+
memberCount: typeof found["num_members"] === "number"
|
|
237
|
+
? found["num_members"]
|
|
238
|
+
: undefined,
|
|
239
|
+
topic: found["topic"]?.value,
|
|
240
|
+
purpose: found["purpose"]?.value,
|
|
241
|
+
};
|
|
242
|
+
}
|
|
243
|
+
/**
|
|
244
|
+
* @description Fetches a Slack user profile
|
|
245
|
+
* @summary Calls `users.info` for the given user ID and returns the raw
|
|
246
|
+
* user payload, or `undefined` when Slack reports no user.
|
|
247
|
+
* @param {string} userId - The Slack user ID to look up (e.g. `"U12345678"`).
|
|
248
|
+
* @returns {Promise<Record<string, unknown> | undefined>} The raw user payload, or `undefined` when the user is not found.
|
|
249
|
+
* @throws {InternalError} When no token is configured or Slack rejects the call.
|
|
250
|
+
* @throws {NotFoundError} When the user does not exist (HTTP 404).
|
|
251
|
+
* @throws {ConflictError} When Slack answers with HTTP 409.
|
|
252
|
+
* @throws {BadRequestError} When Slack answers with any other HTTP error status.
|
|
253
|
+
*/
|
|
254
|
+
async getUser(userId) {
|
|
255
|
+
const data = await this.call("users.info", { user: userId });
|
|
256
|
+
return data.user;
|
|
257
|
+
}
|
|
258
|
+
}
|
|
259
|
+
//# sourceMappingURL=SlackService.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SlackService.js","sourceRoot":"","sources":["../../../../src/comms/slack/SlackService.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/comms/slack/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,kCAA+B"}
|