@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,107 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @description SMTP connection configuration
|
|
3
|
+
* @summary Carries the server address, optional implicit-TLS/STARTTLS
|
|
4
|
+
* selection, credentials, and timeouts.
|
|
5
|
+
*
|
|
6
|
+
* `secure` selects implicit TLS: `true` opens a TLS socket from the first byte
|
|
7
|
+
* (default port 465). `false` connects in plaintext and upgrades with STARTTLS
|
|
8
|
+
* when the server advertises it (default port 587). When credentials are
|
|
9
|
+
* configured, `connect()` refuses to authenticate unless the session is
|
|
10
|
+
* encrypted; `allowPlaintextAuth` is the explicit, documented opt-out for
|
|
11
|
+
* servers that cannot offer TLS.
|
|
12
|
+
* @category Comms
|
|
13
|
+
* @memberOf module:integrations/comms/email/smtp
|
|
14
|
+
*/
|
|
15
|
+
export interface SmtpConfig {
|
|
16
|
+
/** @description SMTP server hostname (required) */
|
|
17
|
+
host: string;
|
|
18
|
+
/** @description Server port; defaults to `465` when `secure` is `true`, `587` otherwise */
|
|
19
|
+
port?: number;
|
|
20
|
+
/** @description `true` opens an implicit-TLS socket from the first byte; `false` (default) connects in plaintext and upgrades via STARTTLS */
|
|
21
|
+
secure?: boolean;
|
|
22
|
+
/** @description Username for `AUTH LOGIN`; when set with `password`, enables the fail-closed plaintext-AUTH check */
|
|
23
|
+
username?: string;
|
|
24
|
+
/** @description Password for `AUTH LOGIN` */
|
|
25
|
+
password?: string;
|
|
26
|
+
/** @description Connection, greeting, and socket timeout in milliseconds (default `30000`) */
|
|
27
|
+
timeout?: number;
|
|
28
|
+
/** @description Explicitly permit `AUTH LOGIN` over a plaintext session (default `false`) */
|
|
29
|
+
allowPlaintextAuth?: boolean;
|
|
30
|
+
/** @description Explicitly accept an otherwise-invalid TLS certificate (default `false`) */
|
|
31
|
+
allowUnauthorizedCerts?: boolean;
|
|
32
|
+
/** @description Client hostname announced in `EHLO` (default `as-graph`) */
|
|
33
|
+
clientHostname?: string;
|
|
34
|
+
}
|
|
35
|
+
/**
|
|
36
|
+
* @description SMTP client for raw MIME delivery
|
|
37
|
+
* @summary Connects and authenticates through a nodemailer SMTP transport
|
|
38
|
+
* (implicit TLS on `secure`, STARTTLS otherwise), then delivers a pre-built
|
|
39
|
+
* message with the envelope sender/recipients and the raw RFC 5322 source.
|
|
40
|
+
* Credentials are never sent over a plaintext session unless
|
|
41
|
+
* `allowPlaintextAuth` is set, and every envelope address is validated before
|
|
42
|
+
* it reaches the transport.
|
|
43
|
+
* @category Comms
|
|
44
|
+
* @memberOf module:integrations/comms/email/smtp
|
|
45
|
+
* @example
|
|
46
|
+
* ```ts
|
|
47
|
+
* import { SmtpClient, buildEmail } from "@decaf-ts/integrations/comms/email";
|
|
48
|
+
*
|
|
49
|
+
* const client = new SmtpClient({
|
|
50
|
+
* host: "smtp.example.com",
|
|
51
|
+
* port: 587,
|
|
52
|
+
* username: "noreply@example.com",
|
|
53
|
+
* password: process.env.SMTP_PASSWORD,
|
|
54
|
+
* });
|
|
55
|
+
* await client.connect();
|
|
56
|
+
* const mail = buildEmail({
|
|
57
|
+
* from: "noreply@example.com",
|
|
58
|
+
* to: ["ops@example.com"],
|
|
59
|
+
* subject: "Nightly report",
|
|
60
|
+
* text: "All systems nominal.",
|
|
61
|
+
* });
|
|
62
|
+
* await client.send(mail.from, mail.recipients, mail.raw);
|
|
63
|
+
* await client.close();
|
|
64
|
+
* ```
|
|
65
|
+
*/
|
|
66
|
+
export declare class SmtpClient {
|
|
67
|
+
private config;
|
|
68
|
+
private transporter?;
|
|
69
|
+
/**
|
|
70
|
+
* @description Creates an SMTP client
|
|
71
|
+
* @summary Stores the config; the nodemailer transport is only created and
|
|
72
|
+
* verified by {@link SmtpClient.connect}.
|
|
73
|
+
* @param config - Server address, optional credentials, and TLS/timeout options
|
|
74
|
+
*/
|
|
75
|
+
constructor(config: SmtpConfig);
|
|
76
|
+
private transportOptions;
|
|
77
|
+
private transportError;
|
|
78
|
+
/**
|
|
79
|
+
* @description Opens the SMTP session
|
|
80
|
+
* @summary Lazily loads the optional `nodemailer` peer, builds the SMTP
|
|
81
|
+
* transport for the configured host/credentials, and verifies it
|
|
82
|
+
* (`EHLO` + TLS upgrade + `AUTH LOGIN` when credentials are configured).
|
|
83
|
+
* Authentication fails closed: with credentials configured and no encrypted
|
|
84
|
+
* session, the transport requires STARTTLS and verification fails unless
|
|
85
|
+
* `allowPlaintextAuth` was set on the config.
|
|
86
|
+
* @throws {InternalError} when `nodemailer` is not installed, or on
|
|
87
|
+
* connection, TLS, or auth failures
|
|
88
|
+
*/
|
|
89
|
+
connect(): Promise<void>;
|
|
90
|
+
/**
|
|
91
|
+
* @description Delivers a raw message over the established session
|
|
92
|
+
* @summary Validates the envelope, then hands the sender, recipients, and
|
|
93
|
+
* raw RFC 5322 source to nodemailer's `sendMail` (the transport performs
|
|
94
|
+
* queueing, dot-stuffing, and CRLF normalization).
|
|
95
|
+
* @param from - Envelope sender address
|
|
96
|
+
* @param recipients - Envelope recipient addresses
|
|
97
|
+
* @param raw - Raw RFC 5322 message text
|
|
98
|
+
* @throws {InternalError} when not connected or the server rejects delivery
|
|
99
|
+
* @throws {BadRequestError} when the envelope sender or a recipient is not an allowlisted mailbox
|
|
100
|
+
*/
|
|
101
|
+
send(from: string, recipients: string[], raw: string): Promise<void>;
|
|
102
|
+
/**
|
|
103
|
+
* @description Closes the session gracefully
|
|
104
|
+
* @summary Closes the nodemailer transport, ignoring shutdown failures.
|
|
105
|
+
*/
|
|
106
|
+
close(): Promise<void>;
|
|
107
|
+
}
|
|
@@ -0,0 +1,107 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @description SMTP connection configuration
|
|
3
|
+
* @summary Carries the server address, optional implicit-TLS/STARTTLS
|
|
4
|
+
* selection, credentials, and timeouts.
|
|
5
|
+
*
|
|
6
|
+
* `secure` selects implicit TLS: `true` opens a TLS socket from the first byte
|
|
7
|
+
* (default port 465). `false` connects in plaintext and upgrades with STARTTLS
|
|
8
|
+
* when the server advertises it (default port 587). When credentials are
|
|
9
|
+
* configured, `connect()` refuses to authenticate unless the session is
|
|
10
|
+
* encrypted; `allowPlaintextAuth` is the explicit, documented opt-out for
|
|
11
|
+
* servers that cannot offer TLS.
|
|
12
|
+
* @category Comms
|
|
13
|
+
* @memberOf module:integrations/comms/email/smtp
|
|
14
|
+
*/
|
|
15
|
+
export interface SmtpConfig {
|
|
16
|
+
/** @description SMTP server hostname (required) */
|
|
17
|
+
host: string;
|
|
18
|
+
/** @description Server port; defaults to `465` when `secure` is `true`, `587` otherwise */
|
|
19
|
+
port?: number;
|
|
20
|
+
/** @description `true` opens an implicit-TLS socket from the first byte; `false` (default) connects in plaintext and upgrades via STARTTLS */
|
|
21
|
+
secure?: boolean;
|
|
22
|
+
/** @description Username for `AUTH LOGIN`; when set with `password`, enables the fail-closed plaintext-AUTH check */
|
|
23
|
+
username?: string;
|
|
24
|
+
/** @description Password for `AUTH LOGIN` */
|
|
25
|
+
password?: string;
|
|
26
|
+
/** @description Connection, greeting, and socket timeout in milliseconds (default `30000`) */
|
|
27
|
+
timeout?: number;
|
|
28
|
+
/** @description Explicitly permit `AUTH LOGIN` over a plaintext session (default `false`) */
|
|
29
|
+
allowPlaintextAuth?: boolean;
|
|
30
|
+
/** @description Explicitly accept an otherwise-invalid TLS certificate (default `false`) */
|
|
31
|
+
allowUnauthorizedCerts?: boolean;
|
|
32
|
+
/** @description Client hostname announced in `EHLO` (default `as-graph`) */
|
|
33
|
+
clientHostname?: string;
|
|
34
|
+
}
|
|
35
|
+
/**
|
|
36
|
+
* @description SMTP client for raw MIME delivery
|
|
37
|
+
* @summary Connects and authenticates through a nodemailer SMTP transport
|
|
38
|
+
* (implicit TLS on `secure`, STARTTLS otherwise), then delivers a pre-built
|
|
39
|
+
* message with the envelope sender/recipients and the raw RFC 5322 source.
|
|
40
|
+
* Credentials are never sent over a plaintext session unless
|
|
41
|
+
* `allowPlaintextAuth` is set, and every envelope address is validated before
|
|
42
|
+
* it reaches the transport.
|
|
43
|
+
* @category Comms
|
|
44
|
+
* @memberOf module:integrations/comms/email/smtp
|
|
45
|
+
* @example
|
|
46
|
+
* ```ts
|
|
47
|
+
* import { SmtpClient, buildEmail } from "@decaf-ts/integrations/comms/email";
|
|
48
|
+
*
|
|
49
|
+
* const client = new SmtpClient({
|
|
50
|
+
* host: "smtp.example.com",
|
|
51
|
+
* port: 587,
|
|
52
|
+
* username: "noreply@example.com",
|
|
53
|
+
* password: process.env.SMTP_PASSWORD,
|
|
54
|
+
* });
|
|
55
|
+
* await client.connect();
|
|
56
|
+
* const mail = buildEmail({
|
|
57
|
+
* from: "noreply@example.com",
|
|
58
|
+
* to: ["ops@example.com"],
|
|
59
|
+
* subject: "Nightly report",
|
|
60
|
+
* text: "All systems nominal.",
|
|
61
|
+
* });
|
|
62
|
+
* await client.send(mail.from, mail.recipients, mail.raw);
|
|
63
|
+
* await client.close();
|
|
64
|
+
* ```
|
|
65
|
+
*/
|
|
66
|
+
export declare class SmtpClient {
|
|
67
|
+
private config;
|
|
68
|
+
private transporter?;
|
|
69
|
+
/**
|
|
70
|
+
* @description Creates an SMTP client
|
|
71
|
+
* @summary Stores the config; the nodemailer transport is only created and
|
|
72
|
+
* verified by {@link SmtpClient.connect}.
|
|
73
|
+
* @param config - Server address, optional credentials, and TLS/timeout options
|
|
74
|
+
*/
|
|
75
|
+
constructor(config: SmtpConfig);
|
|
76
|
+
private transportOptions;
|
|
77
|
+
private transportError;
|
|
78
|
+
/**
|
|
79
|
+
* @description Opens the SMTP session
|
|
80
|
+
* @summary Lazily loads the optional `nodemailer` peer, builds the SMTP
|
|
81
|
+
* transport for the configured host/credentials, and verifies it
|
|
82
|
+
* (`EHLO` + TLS upgrade + `AUTH LOGIN` when credentials are configured).
|
|
83
|
+
* Authentication fails closed: with credentials configured and no encrypted
|
|
84
|
+
* session, the transport requires STARTTLS and verification fails unless
|
|
85
|
+
* `allowPlaintextAuth` was set on the config.
|
|
86
|
+
* @throws {InternalError} when `nodemailer` is not installed, or on
|
|
87
|
+
* connection, TLS, or auth failures
|
|
88
|
+
*/
|
|
89
|
+
connect(): Promise<void>;
|
|
90
|
+
/**
|
|
91
|
+
* @description Delivers a raw message over the established session
|
|
92
|
+
* @summary Validates the envelope, then hands the sender, recipients, and
|
|
93
|
+
* raw RFC 5322 source to nodemailer's `sendMail` (the transport performs
|
|
94
|
+
* queueing, dot-stuffing, and CRLF normalization).
|
|
95
|
+
* @param from - Envelope sender address
|
|
96
|
+
* @param recipients - Envelope recipient addresses
|
|
97
|
+
* @param raw - Raw RFC 5322 message text
|
|
98
|
+
* @throws {InternalError} when not connected or the server rejects delivery
|
|
99
|
+
* @throws {BadRequestError} when the envelope sender or a recipient is not an allowlisted mailbox
|
|
100
|
+
*/
|
|
101
|
+
send(from: string, recipients: string[], raw: string): Promise<void>;
|
|
102
|
+
/**
|
|
103
|
+
* @description Closes the session gracefully
|
|
104
|
+
* @summary Closes the nodemailer transport, ignoring shutdown failures.
|
|
105
|
+
*/
|
|
106
|
+
close(): Promise<void>;
|
|
107
|
+
}
|
|
@@ -0,0 +1,84 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @module integrations/comms/environment
|
|
3
|
+
* @summary Environment contract and accumulated environment for the comms integration services.
|
|
4
|
+
* @description Declares the `CommsEnvironmentShape` consumed by the Slack,
|
|
5
|
+
* Telegram, Teams, and Gmail services' `configFromEnvironment()` implementations and the
|
|
6
|
+
* `CommsEnvironment` singleton created via `LoggedEnvironment.accumulate`.
|
|
7
|
+
* Services read their credentials and defaults from the matching
|
|
8
|
+
* `comms.<provider>` slice, using the `envString`/`envNumber` helpers from
|
|
9
|
+
* `shared/environmentValue` to reject unset-leaf proxies.
|
|
10
|
+
*/
|
|
11
|
+
/**
|
|
12
|
+
* @description Environment shape for the comms integration services
|
|
13
|
+
* @summary Defines the `comms` root with one slice per provider (`slack`,
|
|
14
|
+
* `telegram`, `teams`, `email`, `gmail`). Each slice carries the provider's
|
|
15
|
+
* required credentials (e.g. `token`, `webhookUrl`) plus optional `baseUrl`
|
|
16
|
+
* override and `timeout`. Fields are typed as required here so
|
|
17
|
+
* `LoggedEnvironment.accumulate` registers them; absent values resolve to
|
|
18
|
+
* proxy placeholders at runtime and must pass through `envString`/`envNumber`.
|
|
19
|
+
* @memberOf module:integrations/comms/environment
|
|
20
|
+
*/
|
|
21
|
+
export interface CommsEnvironmentShape {
|
|
22
|
+
comms: {
|
|
23
|
+
slack: {
|
|
24
|
+
token: string;
|
|
25
|
+
baseUrl: string;
|
|
26
|
+
timeout?: number;
|
|
27
|
+
};
|
|
28
|
+
telegram: {
|
|
29
|
+
token: string;
|
|
30
|
+
baseUrl: string;
|
|
31
|
+
timeout?: number;
|
|
32
|
+
};
|
|
33
|
+
teams: {
|
|
34
|
+
token: string;
|
|
35
|
+
webhookUrl: string;
|
|
36
|
+
baseUrl: string;
|
|
37
|
+
timeout?: number;
|
|
38
|
+
};
|
|
39
|
+
email: {
|
|
40
|
+
provider: string;
|
|
41
|
+
host: string;
|
|
42
|
+
port?: number;
|
|
43
|
+
secure?: boolean;
|
|
44
|
+
username: string;
|
|
45
|
+
password: string;
|
|
46
|
+
from: string;
|
|
47
|
+
token: string;
|
|
48
|
+
graphBaseUrl: string;
|
|
49
|
+
/** Explicit opt-in for SMTP AUTH over a plaintext session (default false). */
|
|
50
|
+
allowPlaintextAuth?: boolean;
|
|
51
|
+
timeout?: number;
|
|
52
|
+
};
|
|
53
|
+
gmail: {
|
|
54
|
+
token: string;
|
|
55
|
+
userId: string;
|
|
56
|
+
baseUrl: string;
|
|
57
|
+
timeout?: number;
|
|
58
|
+
};
|
|
59
|
+
};
|
|
60
|
+
}
|
|
61
|
+
/**
|
|
62
|
+
* @description Accumulated comms environment singleton
|
|
63
|
+
* @summary The `LoggedEnvironment.accumulate`-registered instance backing the
|
|
64
|
+
* `CommsEnvironmentShape` contract. Comms services read their provider slice
|
|
65
|
+
* (e.g. `CommsEnvironment.comms.slack`) inside `configFromEnvironment()` and
|
|
66
|
+
* translate it into an `HttpApiServiceConfig`-derived config. Credentials come
|
|
67
|
+
* from environment variables; for as-graph node usage those are provided as
|
|
68
|
+
* `GRAPH_CREDENTIAL_*` values (placeholders in this example).
|
|
69
|
+
* @example
|
|
70
|
+
* ```ts
|
|
71
|
+
* import { SlackService } from "@decaf-ts/integrations/comms/slack";
|
|
72
|
+
*
|
|
73
|
+
* // with comms.slack.token / comms.slack.baseUrl configured in the environment
|
|
74
|
+
* const slack = new SlackService();
|
|
75
|
+
* await slack.initialize();
|
|
76
|
+
* ```
|
|
77
|
+
* @constant {LoggedEnvironment} CommsEnvironment
|
|
78
|
+
* @memberOf module:integrations/comms/environment
|
|
79
|
+
*/
|
|
80
|
+
export declare const CommsEnvironment: import("@decaf-ts/logging").AccumulatedEnvironment<{
|
|
81
|
+
app: string | undefined;
|
|
82
|
+
} & import("@decaf-ts/logging").LoggingConfig<object> & {
|
|
83
|
+
env: any;
|
|
84
|
+
} & CommsEnvironmentShape>;
|
|
@@ -0,0 +1,84 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @module integrations/comms/environment
|
|
3
|
+
* @summary Environment contract and accumulated environment for the comms integration services.
|
|
4
|
+
* @description Declares the `CommsEnvironmentShape` consumed by the Slack,
|
|
5
|
+
* Telegram, Teams, and Gmail services' `configFromEnvironment()` implementations and the
|
|
6
|
+
* `CommsEnvironment` singleton created via `LoggedEnvironment.accumulate`.
|
|
7
|
+
* Services read their credentials and defaults from the matching
|
|
8
|
+
* `comms.<provider>` slice, using the `envString`/`envNumber` helpers from
|
|
9
|
+
* `shared/environmentValue` to reject unset-leaf proxies.
|
|
10
|
+
*/
|
|
11
|
+
/**
|
|
12
|
+
* @description Environment shape for the comms integration services
|
|
13
|
+
* @summary Defines the `comms` root with one slice per provider (`slack`,
|
|
14
|
+
* `telegram`, `teams`, `email`, `gmail`). Each slice carries the provider's
|
|
15
|
+
* required credentials (e.g. `token`, `webhookUrl`) plus optional `baseUrl`
|
|
16
|
+
* override and `timeout`. Fields are typed as required here so
|
|
17
|
+
* `LoggedEnvironment.accumulate` registers them; absent values resolve to
|
|
18
|
+
* proxy placeholders at runtime and must pass through `envString`/`envNumber`.
|
|
19
|
+
* @memberOf module:integrations/comms/environment
|
|
20
|
+
*/
|
|
21
|
+
export interface CommsEnvironmentShape {
|
|
22
|
+
comms: {
|
|
23
|
+
slack: {
|
|
24
|
+
token: string;
|
|
25
|
+
baseUrl: string;
|
|
26
|
+
timeout?: number;
|
|
27
|
+
};
|
|
28
|
+
telegram: {
|
|
29
|
+
token: string;
|
|
30
|
+
baseUrl: string;
|
|
31
|
+
timeout?: number;
|
|
32
|
+
};
|
|
33
|
+
teams: {
|
|
34
|
+
token: string;
|
|
35
|
+
webhookUrl: string;
|
|
36
|
+
baseUrl: string;
|
|
37
|
+
timeout?: number;
|
|
38
|
+
};
|
|
39
|
+
email: {
|
|
40
|
+
provider: string;
|
|
41
|
+
host: string;
|
|
42
|
+
port?: number;
|
|
43
|
+
secure?: boolean;
|
|
44
|
+
username: string;
|
|
45
|
+
password: string;
|
|
46
|
+
from: string;
|
|
47
|
+
token: string;
|
|
48
|
+
graphBaseUrl: string;
|
|
49
|
+
/** Explicit opt-in for SMTP AUTH over a plaintext session (default false). */
|
|
50
|
+
allowPlaintextAuth?: boolean;
|
|
51
|
+
timeout?: number;
|
|
52
|
+
};
|
|
53
|
+
gmail: {
|
|
54
|
+
token: string;
|
|
55
|
+
userId: string;
|
|
56
|
+
baseUrl: string;
|
|
57
|
+
timeout?: number;
|
|
58
|
+
};
|
|
59
|
+
};
|
|
60
|
+
}
|
|
61
|
+
/**
|
|
62
|
+
* @description Accumulated comms environment singleton
|
|
63
|
+
* @summary The `LoggedEnvironment.accumulate`-registered instance backing the
|
|
64
|
+
* `CommsEnvironmentShape` contract. Comms services read their provider slice
|
|
65
|
+
* (e.g. `CommsEnvironment.comms.slack`) inside `configFromEnvironment()` and
|
|
66
|
+
* translate it into an `HttpApiServiceConfig`-derived config. Credentials come
|
|
67
|
+
* from environment variables; for as-graph node usage those are provided as
|
|
68
|
+
* `GRAPH_CREDENTIAL_*` values (placeholders in this example).
|
|
69
|
+
* @example
|
|
70
|
+
* ```ts
|
|
71
|
+
* import { SlackService } from "@decaf-ts/integrations/comms/slack";
|
|
72
|
+
*
|
|
73
|
+
* // with comms.slack.token / comms.slack.baseUrl configured in the environment
|
|
74
|
+
* const slack = new SlackService();
|
|
75
|
+
* await slack.initialize();
|
|
76
|
+
* ```
|
|
77
|
+
* @constant {LoggedEnvironment} CommsEnvironment
|
|
78
|
+
* @memberOf module:integrations/comms/environment
|
|
79
|
+
*/
|
|
80
|
+
export declare const CommsEnvironment: import("@decaf-ts/logging").AccumulatedEnvironment<{
|
|
81
|
+
app: string | undefined;
|
|
82
|
+
} & import("@decaf-ts/logging").LoggingConfig<object> & {
|
|
83
|
+
env: any;
|
|
84
|
+
} & CommsEnvironmentShape>;
|
|
@@ -0,0 +1,190 @@
|
|
|
1
|
+
import { HttpApiService, type HttpApiServiceConfig } from "../../shared/http/index.d.cts";
|
|
2
|
+
import { type EmailMessageInput } from "../email/mime.d.cts";
|
|
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
|
+
}
|