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