@decaf-ts/integrations 0.11.0 → 0.14.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +164 -0
- package/dist/integrations.cjs +1 -1
- package/dist/integrations.cjs.map +1 -1
- package/dist/integrations.js +1 -1
- package/dist/integrations.js.map +1 -1
- package/docker/mailpit-compose.yml +17 -0
- package/docker/postgres-compose.yml +26 -0
- package/lib/cjs/blob/azure/AzureBlobStoreService.cjs +12 -23
- package/lib/cjs/blob/azure/AzureBlobStoreService.cjs.map +1 -1
- package/lib/cjs/blob/core/BlobStoreService.cjs +26 -25
- package/lib/cjs/blob/core/BlobStoreService.cjs.map +1 -1
- package/lib/cjs/blob/gcp/GcsBlobStoreService.cjs +12 -23
- package/lib/cjs/blob/gcp/GcsBlobStoreService.cjs.map +1 -1
- package/lib/cjs/blob/s3/S3BlobStoreService.cjs +11 -16
- package/lib/cjs/blob/s3/S3BlobStoreService.cjs.map +1 -1
- package/lib/cjs/blob/s3/S3CompatibleBlobStoreService.cjs +14 -16
- package/lib/cjs/blob/s3/S3CompatibleBlobStoreService.cjs.map +1 -1
- package/lib/cjs/calendar/environment.cjs +48 -0
- package/lib/cjs/calendar/environment.cjs.map +1 -0
- package/lib/cjs/calendar/google-calendar/GoogleCalendarService.cjs +338 -0
- package/lib/cjs/calendar/google-calendar/GoogleCalendarService.cjs.map +1 -0
- package/lib/cjs/calendar/google-calendar/index.cjs +20 -0
- package/lib/cjs/calendar/google-calendar/index.cjs.map +1 -0
- package/lib/cjs/comms/discord/DiscordService.cjs +318 -0
- package/lib/cjs/comms/discord/DiscordService.cjs.map +1 -0
- package/lib/cjs/comms/discord/index.cjs +19 -0
- package/lib/cjs/comms/discord/index.cjs.map +1 -0
- package/lib/cjs/comms/email/EmailService.cjs +376 -0
- package/lib/cjs/comms/email/EmailService.cjs.map +1 -0
- package/lib/cjs/comms/email/index.cjs +29 -0
- package/lib/cjs/comms/email/index.cjs.map +1 -0
- package/lib/cjs/comms/email/mime.cjs +225 -0
- package/lib/cjs/comms/email/mime.cjs.map +1 -0
- package/lib/cjs/comms/email/smtp.cjs +204 -0
- package/lib/cjs/comms/email/smtp.cjs.map +1 -0
- package/lib/cjs/comms/environment.cjs +79 -0
- package/lib/cjs/comms/environment.cjs.map +1 -0
- package/lib/cjs/comms/gmail/GmailService.cjs +235 -0
- package/lib/cjs/comms/gmail/GmailService.cjs.map +1 -0
- package/lib/cjs/comms/gmail/index.cjs +24 -0
- package/lib/cjs/comms/gmail/index.cjs.map +1 -0
- package/lib/cjs/comms/index.cjs +34 -0
- package/lib/cjs/comms/index.cjs.map +1 -0
- package/lib/cjs/comms/outlook/MicrosoftOutlookService.cjs +325 -0
- package/lib/cjs/comms/outlook/MicrosoftOutlookService.cjs.map +1 -0
- package/lib/cjs/comms/outlook/index.cjs +19 -0
- package/lib/cjs/comms/outlook/index.cjs.map +1 -0
- package/lib/cjs/comms/slack/SlackService.cjs +264 -0
- package/lib/cjs/comms/slack/SlackService.cjs.map +1 -0
- package/lib/cjs/comms/slack/index.cjs +24 -0
- package/lib/cjs/comms/slack/index.cjs.map +1 -0
- package/lib/cjs/comms/teams/TeamsService.cjs +212 -0
- package/lib/cjs/comms/teams/TeamsService.cjs.map +1 -0
- package/lib/cjs/comms/teams/index.cjs +24 -0
- package/lib/cjs/comms/teams/index.cjs.map +1 -0
- package/lib/cjs/comms/telegram/TelegramService.cjs +196 -0
- package/lib/cjs/comms/telegram/TelegramService.cjs.map +1 -0
- package/lib/cjs/comms/telegram/index.cjs +24 -0
- package/lib/cjs/comms/telegram/index.cjs.map +1 -0
- package/lib/cjs/comms/whatsapp/WhatsAppService.cjs +274 -0
- package/lib/cjs/comms/whatsapp/WhatsAppService.cjs.map +1 -0
- package/lib/cjs/comms/whatsapp/index.cjs +19 -0
- package/lib/cjs/comms/whatsapp/index.cjs.map +1 -0
- package/lib/cjs/devops/environment.cjs +43 -0
- package/lib/cjs/devops/environment.cjs.map +1 -0
- package/lib/cjs/devops/github/GithubService.cjs +302 -0
- package/lib/cjs/devops/github/GithubService.cjs.map +1 -0
- package/lib/cjs/devops/github/index.cjs +24 -0
- package/lib/cjs/devops/github/index.cjs.map +1 -0
- package/lib/cjs/devops/gitlab/GitlabService.cjs +282 -0
- package/lib/cjs/devops/gitlab/GitlabService.cjs.map +1 -0
- package/lib/cjs/devops/gitlab/index.cjs +24 -0
- package/lib/cjs/devops/gitlab/index.cjs.map +1 -0
- package/lib/cjs/devops/index.cjs +28 -0
- package/lib/cjs/devops/index.cjs.map +1 -0
- package/lib/cjs/feature-flags/models/FeatureFlag.model.cjs +2 -0
- package/lib/cjs/feature-flags/models/FeatureFlag.model.cjs.map +1 -1
- package/lib/cjs/feature-flags/models/FeatureFlagAccess.model.cjs +2 -0
- package/lib/cjs/feature-flags/models/FeatureFlagAccess.model.cjs.map +1 -1
- package/lib/cjs/index.cjs +3 -3
- package/lib/cjs/io/airtable/AirtableService.cjs +266 -0
- package/lib/cjs/io/airtable/AirtableService.cjs.map +1 -0
- package/lib/cjs/io/airtable/index.cjs +24 -0
- package/lib/cjs/io/airtable/index.cjs.map +1 -0
- package/lib/cjs/io/confluence/ConfluenceService.cjs +317 -0
- package/lib/cjs/io/confluence/ConfluenceService.cjs.map +1 -0
- package/lib/cjs/io/confluence/index.cjs +19 -0
- package/lib/cjs/io/confluence/index.cjs.map +1 -0
- package/lib/cjs/io/environment.cjs +74 -0
- package/lib/cjs/io/environment.cjs.map +1 -0
- package/lib/cjs/io/google-docs/GoogleDocsService.cjs +275 -0
- package/lib/cjs/io/google-docs/GoogleDocsService.cjs.map +1 -0
- package/lib/cjs/io/google-docs/index.cjs +19 -0
- package/lib/cjs/io/google-docs/index.cjs.map +1 -0
- package/lib/cjs/io/google-sheets/GoogleSheetsService.cjs +288 -0
- package/lib/cjs/io/google-sheets/GoogleSheetsService.cjs.map +1 -0
- package/lib/cjs/io/google-sheets/index.cjs +24 -0
- package/lib/cjs/io/google-sheets/index.cjs.map +1 -0
- package/lib/cjs/io/graphql/GraphqlService.cjs +143 -0
- package/lib/cjs/io/graphql/GraphqlService.cjs.map +1 -0
- package/lib/cjs/io/graphql/index.cjs +24 -0
- package/lib/cjs/io/graphql/index.cjs.map +1 -0
- package/lib/cjs/io/index.cjs +35 -0
- package/lib/cjs/io/index.cjs.map +1 -0
- package/lib/cjs/io/jira/JiraService.cjs +354 -0
- package/lib/cjs/io/jira/JiraService.cjs.map +1 -0
- package/lib/cjs/io/jira/index.cjs +19 -0
- package/lib/cjs/io/jira/index.cjs.map +1 -0
- package/lib/cjs/io/microsoft-excel/MicrosoftExcelService.cjs +253 -0
- package/lib/cjs/io/microsoft-excel/MicrosoftExcelService.cjs.map +1 -0
- package/lib/cjs/io/microsoft-excel/index.cjs +19 -0
- package/lib/cjs/io/microsoft-excel/index.cjs.map +1 -0
- package/lib/cjs/io/microsoft-sharepoint/MicrosoftSharePointService.cjs +261 -0
- package/lib/cjs/io/microsoft-sharepoint/MicrosoftSharePointService.cjs.map +1 -0
- package/lib/cjs/io/microsoft-sharepoint/index.cjs +19 -0
- package/lib/cjs/io/microsoft-sharepoint/index.cjs.map +1 -0
- package/lib/cjs/io/spreadsheet/SpreadsheetService.cjs +205 -0
- package/lib/cjs/io/spreadsheet/SpreadsheetService.cjs.map +1 -0
- package/lib/cjs/io/spreadsheet/index.cjs +25 -0
- package/lib/cjs/io/spreadsheet/index.cjs.map +1 -0
- package/lib/cjs/namespaces/index.cjs +1 -0
- package/lib/cjs/namespaces/index.cjs.map +1 -1
- package/lib/cjs/namespaces/models/credential.model.cjs +115 -0
- package/lib/cjs/namespaces/models/credential.model.cjs.map +1 -0
- package/lib/cjs/namespaces/models/effective-permission.model.cjs +2 -0
- package/lib/cjs/namespaces/models/effective-permission.model.cjs.map +1 -1
- package/lib/cjs/namespaces/models/group-membership.model.cjs +2 -0
- package/lib/cjs/namespaces/models/group-membership.model.cjs.map +1 -1
- package/lib/cjs/namespaces/models/group.model.cjs +2 -0
- package/lib/cjs/namespaces/models/group.model.cjs.map +1 -1
- package/lib/cjs/namespaces/models/index.cjs +1 -0
- package/lib/cjs/namespaces/models/index.cjs.map +1 -1
- package/lib/cjs/namespaces/models/inheritance-block.model.cjs +2 -0
- package/lib/cjs/namespaces/models/inheritance-block.model.cjs.map +1 -1
- package/lib/cjs/namespaces/models/org-unit-closure.model.cjs +2 -0
- package/lib/cjs/namespaces/models/org-unit-closure.model.cjs.map +1 -1
- package/lib/cjs/namespaces/models/org-unit-membership.model.cjs +2 -0
- package/lib/cjs/namespaces/models/org-unit-membership.model.cjs.map +1 -1
- package/lib/cjs/namespaces/models/org-unit-profile.model.cjs +2 -0
- package/lib/cjs/namespaces/models/org-unit-profile.model.cjs.map +1 -1
- package/lib/cjs/namespaces/models/org-unit.model.cjs +2 -0
- package/lib/cjs/namespaces/models/org-unit.model.cjs.map +1 -1
- package/lib/cjs/namespaces/models/permission.model.cjs +2 -0
- package/lib/cjs/namespaces/models/permission.model.cjs.map +1 -1
- package/lib/cjs/namespaces/models/principal.model.cjs +2 -0
- package/lib/cjs/namespaces/models/principal.model.cjs.map +1 -1
- package/lib/cjs/namespaces/models/protected-resource.model.cjs +2 -0
- package/lib/cjs/namespaces/models/protected-resource.model.cjs.map +1 -1
- package/lib/cjs/namespaces/models/resource-grant.model.cjs +2 -0
- package/lib/cjs/namespaces/models/resource-grant.model.cjs.map +1 -1
- package/lib/cjs/namespaces/models/role-assignment.model.cjs +2 -0
- package/lib/cjs/namespaces/models/role-assignment.model.cjs.map +1 -1
- package/lib/cjs/namespaces/models/role-permission.model.cjs +2 -0
- package/lib/cjs/namespaces/models/role-permission.model.cjs.map +1 -1
- package/lib/cjs/namespaces/models/role.model.cjs +2 -0
- package/lib/cjs/namespaces/models/role.model.cjs.map +1 -1
- package/lib/cjs/namespaces/models/storage-binding.model.cjs +2 -0
- package/lib/cjs/namespaces/models/storage-binding.model.cjs.map +1 -1
- package/lib/cjs/namespaces/models/tenant-membership.model.cjs +2 -0
- package/lib/cjs/namespaces/models/tenant-membership.model.cjs.map +1 -1
- package/lib/cjs/namespaces/models/tenant-profile.model.cjs +2 -0
- package/lib/cjs/namespaces/models/tenant-profile.model.cjs.map +1 -1
- package/lib/cjs/namespaces/models/tenant.model.cjs +2 -0
- package/lib/cjs/namespaces/models/tenant.model.cjs.map +1 -1
- package/lib/cjs/namespaces/models/user.model.cjs +2 -0
- package/lib/cjs/namespaces/models/user.model.cjs.map +1 -1
- package/lib/cjs/namespaces/rls/index.cjs +28 -0
- package/lib/cjs/namespaces/rls/index.cjs.map +1 -0
- package/lib/cjs/namespaces/rls/principal-resolver.cjs +66 -0
- package/lib/cjs/namespaces/rls/principal-resolver.cjs.map +1 -0
- package/lib/cjs/namespaces/rls/rls-bootstrap.service.cjs +269 -0
- package/lib/cjs/namespaces/rls/rls-bootstrap.service.cjs.map +1 -0
- package/lib/cjs/namespaces/rls/rls.constants.cjs +79 -0
- package/lib/cjs/namespaces/rls/rls.constants.cjs.map +1 -0
- package/lib/cjs/namespaces/rls/rls.template.cjs +719 -0
- package/lib/cjs/namespaces/rls/rls.template.cjs.map +1 -0
- package/lib/cjs/namespaces/rls/rls.types.cjs +4 -0
- package/lib/cjs/namespaces/rls/rls.types.cjs.map +1 -0
- package/lib/cjs/namespaces/rls/session-binding.cjs +70 -0
- package/lib/cjs/namespaces/rls/session-binding.cjs.map +1 -0
- package/lib/cjs/namespaces/services/credential.service.cjs +327 -0
- package/lib/cjs/namespaces/services/credential.service.cjs.map +1 -0
- package/lib/cjs/namespaces/services/index.cjs +1 -0
- package/lib/cjs/namespaces/services/index.cjs.map +1 -1
- package/lib/cjs/namespaces/types.cjs +6 -1
- package/lib/cjs/namespaces/types.cjs.map +1 -1
- package/lib/cjs/redis/adapter.cjs +7 -1
- package/lib/cjs/redis/adapter.cjs.map +1 -1
- package/lib/cjs/secrets/InfraCredentialBootstrap.cjs +80 -0
- package/lib/cjs/secrets/InfraCredentialBootstrap.cjs.map +1 -0
- package/lib/cjs/secrets/aws/AwsSecretService.cjs +2 -15
- package/lib/cjs/secrets/aws/AwsSecretService.cjs.map +1 -1
- package/lib/cjs/secrets/azure/AzureKeyVaultSecretService.cjs +2 -16
- package/lib/cjs/secrets/azure/AzureKeyVaultSecretService.cjs.map +1 -1
- package/lib/cjs/secrets/core/SecretReference.cjs +1 -0
- package/lib/cjs/secrets/core/SecretReference.cjs.map +1 -1
- package/lib/cjs/secrets/fs/FsSecretEnvironment.cjs +28 -0
- package/lib/cjs/secrets/fs/FsSecretEnvironment.cjs.map +1 -0
- package/lib/cjs/secrets/fs/FsSecretService.cjs +420 -0
- package/lib/cjs/secrets/fs/FsSecretService.cjs.map +1 -0
- package/lib/cjs/secrets/fs/FsSecretServiceConfig.cjs +25 -0
- package/lib/cjs/secrets/fs/FsSecretServiceConfig.cjs.map +1 -0
- package/lib/cjs/secrets/fs/index.cjs +27 -0
- package/lib/cjs/secrets/fs/index.cjs.map +1 -0
- package/lib/cjs/secrets/gcp/GcpSecretManagerService.cjs +2 -16
- package/lib/cjs/secrets/gcp/GcpSecretManagerService.cjs.map +1 -1
- package/lib/cjs/secrets/index.cjs +2 -0
- package/lib/cjs/secrets/index.cjs.map +1 -1
- package/lib/cjs/secrets/model/ModelSecretService.cjs +335 -43
- package/lib/cjs/secrets/model/ModelSecretService.cjs.map +1 -1
- package/lib/cjs/secrets/model/Secret.cjs +83 -5
- package/lib/cjs/secrets/model/Secret.cjs.map +1 -1
- package/lib/cjs/secrets/onepassword/OnePasswordSecretService.cjs +2 -16
- package/lib/cjs/secrets/onepassword/OnePasswordSecretService.cjs.map +1 -1
- package/lib/cjs/secrets/vault/VaultSecretService.cjs +2 -16
- package/lib/cjs/secrets/vault/VaultSecretService.cjs.map +1 -1
- package/lib/cjs/shared/environmentValue.cjs +24 -0
- package/lib/cjs/shared/environmentValue.cjs.map +1 -1
- package/lib/cjs/shared/http/HttpApiService.cjs +190 -0
- package/lib/cjs/shared/http/HttpApiService.cjs.map +1 -0
- package/lib/cjs/shared/http/hermeticBoot.cjs +150 -0
- package/lib/cjs/shared/http/hermeticBoot.cjs.map +1 -0
- package/lib/cjs/shared/http/index.cjs +28 -0
- package/lib/cjs/shared/http/index.cjs.map +1 -0
- package/lib/esm/blob/azure/AzureBlobStoreService.js +13 -21
- package/lib/esm/blob/azure/AzureBlobStoreService.js.map +1 -1
- package/lib/esm/blob/core/BlobStoreService.js +26 -25
- package/lib/esm/blob/core/BlobStoreService.js.map +1 -1
- package/lib/esm/blob/gcp/GcsBlobStoreService.js +13 -21
- package/lib/esm/blob/gcp/GcsBlobStoreService.js.map +1 -1
- package/lib/esm/blob/s3/S3BlobStoreService.js +12 -14
- package/lib/esm/blob/s3/S3BlobStoreService.js.map +1 -1
- package/lib/esm/blob/s3/S3CompatibleBlobStoreService.js +14 -16
- package/lib/esm/blob/s3/S3CompatibleBlobStoreService.js.map +1 -1
- package/lib/esm/calendar/environment.js +44 -0
- package/lib/esm/calendar/environment.js.map +1 -0
- package/lib/esm/calendar/google-calendar/GoogleCalendarService.js +333 -0
- package/lib/esm/calendar/google-calendar/GoogleCalendarService.js.map +1 -0
- package/lib/esm/calendar/google-calendar/index.js +3 -0
- package/lib/esm/calendar/google-calendar/index.js.map +1 -0
- package/lib/esm/comms/discord/DiscordService.js +313 -0
- package/lib/esm/comms/discord/DiscordService.js.map +1 -0
- package/lib/esm/comms/discord/index.js +2 -0
- package/lib/esm/comms/discord/index.js.map +1 -0
- package/lib/esm/comms/email/EmailService.js +338 -0
- package/lib/esm/comms/email/EmailService.js.map +1 -0
- package/lib/esm/comms/email/index.js +12 -0
- package/lib/esm/comms/email/index.js.map +1 -0
- package/lib/esm/comms/email/mime.js +218 -0
- package/lib/esm/comms/email/mime.js.map +1 -0
- package/lib/esm/comms/email/smtp.js +166 -0
- package/lib/esm/comms/email/smtp.js.map +1 -0
- package/lib/esm/comms/environment.js +75 -0
- package/lib/esm/comms/environment.js.map +1 -0
- package/lib/esm/comms/gmail/GmailService.js +230 -0
- package/lib/esm/comms/gmail/GmailService.js.map +1 -0
- package/lib/esm/comms/gmail/index.js +7 -0
- package/lib/esm/comms/gmail/index.js.map +1 -0
- package/lib/esm/comms/index.js +17 -0
- package/lib/esm/comms/index.js.map +1 -0
- package/lib/esm/comms/outlook/MicrosoftOutlookService.js +320 -0
- package/lib/esm/comms/outlook/MicrosoftOutlookService.js.map +1 -0
- package/lib/esm/comms/outlook/index.js +2 -0
- package/lib/esm/comms/outlook/index.js.map +1 -0
- package/lib/esm/comms/slack/SlackService.js +259 -0
- package/lib/esm/comms/slack/SlackService.js.map +1 -0
- package/lib/esm/comms/slack/index.js +7 -0
- package/lib/esm/comms/slack/index.js.map +1 -0
- package/lib/esm/comms/teams/TeamsService.js +204 -0
- package/lib/esm/comms/teams/TeamsService.js.map +1 -0
- package/lib/esm/comms/teams/index.js +7 -0
- package/lib/esm/comms/teams/index.js.map +1 -0
- package/lib/esm/comms/telegram/TelegramService.js +191 -0
- package/lib/esm/comms/telegram/TelegramService.js.map +1 -0
- package/lib/esm/comms/telegram/index.js +7 -0
- package/lib/esm/comms/telegram/index.js.map +1 -0
- package/lib/esm/comms/whatsapp/WhatsAppService.js +269 -0
- package/lib/esm/comms/whatsapp/WhatsAppService.js.map +1 -0
- package/lib/esm/comms/whatsapp/index.js +2 -0
- package/lib/esm/comms/whatsapp/index.js.map +1 -0
- package/lib/esm/devops/environment.js +39 -0
- package/lib/esm/devops/environment.js.map +1 -0
- package/lib/esm/devops/github/GithubService.js +297 -0
- package/lib/esm/devops/github/GithubService.js.map +1 -0
- package/lib/esm/devops/github/index.js +7 -0
- package/lib/esm/devops/github/index.js.map +1 -0
- package/lib/esm/devops/gitlab/GitlabService.js +277 -0
- package/lib/esm/devops/gitlab/GitlabService.js.map +1 -0
- package/lib/esm/devops/gitlab/index.js +7 -0
- package/lib/esm/devops/gitlab/index.js.map +1 -0
- package/lib/esm/devops/index.js +11 -0
- package/lib/esm/devops/index.js.map +1 -0
- package/lib/esm/feature-flags/models/FeatureFlag.model.js +2 -0
- package/lib/esm/feature-flags/models/FeatureFlag.model.js.map +1 -1
- package/lib/esm/feature-flags/models/FeatureFlagAccess.model.js +2 -0
- package/lib/esm/feature-flags/models/FeatureFlagAccess.model.js.map +1 -1
- package/lib/esm/index.js +3 -3
- package/lib/esm/io/airtable/AirtableService.js +261 -0
- package/lib/esm/io/airtable/AirtableService.js.map +1 -0
- package/lib/esm/io/airtable/index.js +7 -0
- package/lib/esm/io/airtable/index.js.map +1 -0
- package/lib/esm/io/confluence/ConfluenceService.js +312 -0
- package/lib/esm/io/confluence/ConfluenceService.js.map +1 -0
- package/lib/esm/io/confluence/index.js +2 -0
- package/lib/esm/io/confluence/index.js.map +1 -0
- package/lib/esm/io/environment.js +70 -0
- package/lib/esm/io/environment.js.map +1 -0
- package/lib/esm/io/google-docs/GoogleDocsService.js +270 -0
- package/lib/esm/io/google-docs/GoogleDocsService.js.map +1 -0
- package/lib/esm/io/google-docs/index.js +2 -0
- package/lib/esm/io/google-docs/index.js.map +1 -0
- package/lib/esm/io/google-sheets/GoogleSheetsService.js +283 -0
- package/lib/esm/io/google-sheets/GoogleSheetsService.js.map +1 -0
- package/lib/esm/io/google-sheets/index.js +7 -0
- package/lib/esm/io/google-sheets/index.js.map +1 -0
- package/lib/esm/io/graphql/GraphqlService.js +138 -0
- package/lib/esm/io/graphql/GraphqlService.js.map +1 -0
- package/lib/esm/io/graphql/index.js +7 -0
- package/lib/esm/io/graphql/index.js.map +1 -0
- package/lib/esm/io/index.js +18 -0
- package/lib/esm/io/index.js.map +1 -0
- package/lib/esm/io/jira/JiraService.js +349 -0
- package/lib/esm/io/jira/JiraService.js.map +1 -0
- package/lib/esm/io/jira/index.js +2 -0
- package/lib/esm/io/jira/index.js.map +1 -0
- package/lib/esm/io/microsoft-excel/MicrosoftExcelService.js +248 -0
- package/lib/esm/io/microsoft-excel/MicrosoftExcelService.js.map +1 -0
- package/lib/esm/io/microsoft-excel/index.js +2 -0
- package/lib/esm/io/microsoft-excel/index.js.map +1 -0
- package/lib/esm/io/microsoft-sharepoint/MicrosoftSharePointService.js +256 -0
- package/lib/esm/io/microsoft-sharepoint/MicrosoftSharePointService.js.map +1 -0
- package/lib/esm/io/microsoft-sharepoint/index.js +2 -0
- package/lib/esm/io/microsoft-sharepoint/index.js.map +1 -0
- package/lib/esm/io/spreadsheet/SpreadsheetService.js +200 -0
- package/lib/esm/io/spreadsheet/SpreadsheetService.js.map +1 -0
- package/lib/esm/io/spreadsheet/index.js +8 -0
- package/lib/esm/io/spreadsheet/index.js.map +1 -0
- package/lib/esm/namespaces/index.js +1 -0
- package/lib/esm/namespaces/index.js.map +1 -1
- package/lib/esm/namespaces/models/credential.model.js +106 -0
- package/lib/esm/namespaces/models/credential.model.js.map +1 -0
- package/lib/esm/namespaces/models/effective-permission.model.js +2 -0
- package/lib/esm/namespaces/models/effective-permission.model.js.map +1 -1
- package/lib/esm/namespaces/models/group-membership.model.js +2 -0
- package/lib/esm/namespaces/models/group-membership.model.js.map +1 -1
- package/lib/esm/namespaces/models/group.model.js +2 -0
- package/lib/esm/namespaces/models/group.model.js.map +1 -1
- package/lib/esm/namespaces/models/index.js +1 -0
- package/lib/esm/namespaces/models/index.js.map +1 -1
- package/lib/esm/namespaces/models/inheritance-block.model.js +2 -0
- package/lib/esm/namespaces/models/inheritance-block.model.js.map +1 -1
- package/lib/esm/namespaces/models/org-unit-closure.model.js +2 -0
- package/lib/esm/namespaces/models/org-unit-closure.model.js.map +1 -1
- package/lib/esm/namespaces/models/org-unit-membership.model.js +2 -0
- package/lib/esm/namespaces/models/org-unit-membership.model.js.map +1 -1
- package/lib/esm/namespaces/models/org-unit-profile.model.js +2 -0
- package/lib/esm/namespaces/models/org-unit-profile.model.js.map +1 -1
- package/lib/esm/namespaces/models/org-unit.model.js +2 -0
- package/lib/esm/namespaces/models/org-unit.model.js.map +1 -1
- package/lib/esm/namespaces/models/permission.model.js +2 -0
- package/lib/esm/namespaces/models/permission.model.js.map +1 -1
- package/lib/esm/namespaces/models/principal.model.js +2 -0
- package/lib/esm/namespaces/models/principal.model.js.map +1 -1
- package/lib/esm/namespaces/models/protected-resource.model.js +2 -0
- package/lib/esm/namespaces/models/protected-resource.model.js.map +1 -1
- package/lib/esm/namespaces/models/resource-grant.model.js +2 -0
- package/lib/esm/namespaces/models/resource-grant.model.js.map +1 -1
- package/lib/esm/namespaces/models/role-assignment.model.js +2 -0
- package/lib/esm/namespaces/models/role-assignment.model.js.map +1 -1
- package/lib/esm/namespaces/models/role-permission.model.js +2 -0
- package/lib/esm/namespaces/models/role-permission.model.js.map +1 -1
- package/lib/esm/namespaces/models/role.model.js +2 -0
- package/lib/esm/namespaces/models/role.model.js.map +1 -1
- package/lib/esm/namespaces/models/storage-binding.model.js +2 -0
- package/lib/esm/namespaces/models/storage-binding.model.js.map +1 -1
- package/lib/esm/namespaces/models/tenant-membership.model.js +2 -0
- package/lib/esm/namespaces/models/tenant-membership.model.js.map +1 -1
- package/lib/esm/namespaces/models/tenant-profile.model.js +2 -0
- package/lib/esm/namespaces/models/tenant-profile.model.js.map +1 -1
- package/lib/esm/namespaces/models/tenant.model.js +2 -0
- package/lib/esm/namespaces/models/tenant.model.js.map +1 -1
- package/lib/esm/namespaces/models/user.model.js +2 -0
- package/lib/esm/namespaces/models/user.model.js.map +1 -1
- package/lib/esm/namespaces/rls/index.js +11 -0
- package/lib/esm/namespaces/rls/index.js.map +1 -0
- package/lib/esm/namespaces/rls/principal-resolver.js +61 -0
- package/lib/esm/namespaces/rls/principal-resolver.js.map +1 -0
- package/lib/esm/namespaces/rls/rls-bootstrap.service.js +261 -0
- package/lib/esm/namespaces/rls/rls-bootstrap.service.js.map +1 -0
- package/lib/esm/namespaces/rls/rls.constants.js +75 -0
- package/lib/esm/namespaces/rls/rls.constants.js.map +1 -0
- package/lib/esm/namespaces/rls/rls.template.js +711 -0
- package/lib/esm/namespaces/rls/rls.template.js.map +1 -0
- package/lib/esm/namespaces/rls/rls.types.js +9 -0
- package/lib/esm/namespaces/rls/rls.types.js.map +1 -0
- package/lib/esm/namespaces/rls/session-binding.js +65 -0
- package/lib/esm/namespaces/rls/session-binding.js.map +1 -0
- package/lib/esm/namespaces/services/credential.service.js +322 -0
- package/lib/esm/namespaces/services/credential.service.js.map +1 -0
- package/lib/esm/namespaces/services/index.js +1 -0
- package/lib/esm/namespaces/services/index.js.map +1 -1
- package/lib/esm/namespaces/types.js +6 -0
- package/lib/esm/namespaces/types.js.map +1 -1
- package/lib/esm/redis/adapter.js +7 -1
- package/lib/esm/redis/adapter.js.map +1 -1
- package/lib/esm/secrets/InfraCredentialBootstrap.js +74 -0
- package/lib/esm/secrets/InfraCredentialBootstrap.js.map +1 -0
- package/lib/esm/secrets/aws/AwsSecretService.js +3 -13
- package/lib/esm/secrets/aws/AwsSecretService.js.map +1 -1
- package/lib/esm/secrets/azure/AzureKeyVaultSecretService.js +2 -13
- package/lib/esm/secrets/azure/AzureKeyVaultSecretService.js.map +1 -1
- package/lib/esm/secrets/core/SecretReference.js +1 -0
- package/lib/esm/secrets/core/SecretReference.js.map +1 -1
- package/lib/esm/secrets/fs/FsSecretEnvironment.js +24 -0
- package/lib/esm/secrets/fs/FsSecretEnvironment.js.map +1 -0
- package/lib/esm/secrets/fs/FsSecretService.js +412 -0
- package/lib/esm/secrets/fs/FsSecretService.js.map +1 -0
- package/lib/esm/secrets/fs/FsSecretServiceConfig.js +21 -0
- package/lib/esm/secrets/fs/FsSecretServiceConfig.js.map +1 -0
- package/lib/esm/secrets/fs/index.js +10 -0
- package/lib/esm/secrets/fs/index.js.map +1 -0
- package/lib/esm/secrets/gcp/GcpSecretManagerService.js +2 -13
- package/lib/esm/secrets/gcp/GcpSecretManagerService.js.map +1 -1
- package/lib/esm/secrets/index.js +2 -0
- package/lib/esm/secrets/index.js.map +1 -1
- package/lib/esm/secrets/model/ModelSecretService.js +337 -42
- package/lib/esm/secrets/model/ModelSecretService.js.map +1 -1
- package/lib/esm/secrets/model/Secret.js +86 -7
- package/lib/esm/secrets/model/Secret.js.map +1 -1
- package/lib/esm/secrets/onepassword/OnePasswordSecretService.js +2 -13
- package/lib/esm/secrets/onepassword/OnePasswordSecretService.js.map +1 -1
- package/lib/esm/secrets/vault/VaultSecretService.js +2 -13
- package/lib/esm/secrets/vault/VaultSecretService.js.map +1 -1
- package/lib/esm/shared/environmentValue.js +24 -0
- package/lib/esm/shared/environmentValue.js.map +1 -1
- package/lib/esm/shared/http/HttpApiService.js +181 -0
- package/lib/esm/shared/http/HttpApiService.js.map +1 -0
- package/lib/esm/shared/http/hermeticBoot.js +146 -0
- package/lib/esm/shared/http/hermeticBoot.js.map +1 -0
- package/lib/esm/shared/http/index.js +11 -0
- package/lib/esm/shared/http/index.js.map +1 -0
- package/lib/types/blob/azure/AzureBlobStoreService.d.cts +7 -7
- package/lib/types/blob/azure/AzureBlobStoreService.d.mts +7 -7
- package/lib/types/blob/core/BlobStoreService.d.cts +28 -27
- package/lib/types/blob/core/BlobStoreService.d.mts +28 -27
- package/lib/types/blob/gcp/GcsBlobStoreService.d.cts +7 -7
- package/lib/types/blob/gcp/GcsBlobStoreService.d.mts +7 -7
- package/lib/types/blob/s3/S3BlobStoreService.d.cts +9 -1
- package/lib/types/blob/s3/S3BlobStoreService.d.mts +9 -1
- package/lib/types/blob/s3/S3CompatibleBlobStoreService.d.cts +11 -15
- package/lib/types/blob/s3/S3CompatibleBlobStoreService.d.mts +11 -15
- package/lib/types/calendar/environment.d.cts +48 -0
- package/lib/types/calendar/environment.d.mts +48 -0
- package/lib/types/calendar/google-calendar/GoogleCalendarService.d.cts +316 -0
- package/lib/types/calendar/google-calendar/GoogleCalendarService.d.mts +316 -0
- package/lib/types/calendar/google-calendar/index.d.cts +2 -0
- package/lib/types/calendar/google-calendar/index.d.mts +2 -0
- package/lib/types/comms/discord/DiscordService.d.cts +285 -0
- package/lib/types/comms/discord/DiscordService.d.mts +285 -0
- package/lib/types/comms/discord/index.d.cts +1 -0
- package/lib/types/comms/discord/index.d.mts +1 -0
- package/lib/types/comms/email/EmailService.d.cts +184 -0
- package/lib/types/comms/email/EmailService.d.mts +184 -0
- package/lib/types/comms/email/index.d.cts +11 -0
- package/lib/types/comms/email/index.d.mts +11 -0
- package/lib/types/comms/email/mime.d.cts +84 -0
- package/lib/types/comms/email/mime.d.mts +84 -0
- package/lib/types/comms/email/smtp.d.cts +107 -0
- package/lib/types/comms/email/smtp.d.mts +107 -0
- package/lib/types/comms/environment.d.cts +110 -0
- package/lib/types/comms/environment.d.mts +110 -0
- package/lib/types/comms/gmail/GmailService.d.cts +190 -0
- package/lib/types/comms/gmail/GmailService.d.mts +190 -0
- package/lib/types/comms/gmail/index.d.cts +6 -0
- package/lib/types/comms/gmail/index.d.mts +6 -0
- package/lib/types/comms/index.d.cts +16 -0
- package/lib/types/comms/index.d.mts +16 -0
- package/lib/types/comms/outlook/MicrosoftOutlookService.d.cts +282 -0
- package/lib/types/comms/outlook/MicrosoftOutlookService.d.mts +282 -0
- package/lib/types/comms/outlook/index.d.cts +1 -0
- package/lib/types/comms/outlook/index.d.mts +1 -0
- package/lib/types/comms/slack/SlackService.d.cts +259 -0
- package/lib/types/comms/slack/SlackService.d.mts +259 -0
- package/lib/types/comms/slack/index.d.cts +6 -0
- package/lib/types/comms/slack/index.d.mts +6 -0
- package/lib/types/comms/teams/TeamsService.d.cts +172 -0
- package/lib/types/comms/teams/TeamsService.d.mts +172 -0
- package/lib/types/comms/teams/index.d.cts +6 -0
- package/lib/types/comms/teams/index.d.mts +6 -0
- package/lib/types/comms/telegram/TelegramService.d.cts +202 -0
- package/lib/types/comms/telegram/TelegramService.d.mts +202 -0
- package/lib/types/comms/telegram/index.d.cts +6 -0
- package/lib/types/comms/telegram/index.d.mts +6 -0
- package/lib/types/comms/whatsapp/WhatsAppService.d.cts +258 -0
- package/lib/types/comms/whatsapp/WhatsAppService.d.mts +258 -0
- package/lib/types/comms/whatsapp/index.d.cts +1 -0
- package/lib/types/comms/whatsapp/index.d.mts +1 -0
- package/lib/types/devops/environment.d.cts +62 -0
- package/lib/types/devops/environment.d.mts +62 -0
- package/lib/types/devops/github/GithubService.d.cts +287 -0
- package/lib/types/devops/github/GithubService.d.mts +287 -0
- package/lib/types/devops/github/index.d.cts +6 -0
- package/lib/types/devops/github/index.d.mts +6 -0
- package/lib/types/devops/gitlab/GitlabService.d.cts +277 -0
- package/lib/types/devops/gitlab/GitlabService.d.mts +277 -0
- package/lib/types/devops/gitlab/index.d.cts +6 -0
- package/lib/types/devops/gitlab/index.d.mts +6 -0
- package/lib/types/devops/index.d.cts +10 -0
- package/lib/types/devops/index.d.mts +10 -0
- package/lib/types/index.d.cts +2 -2
- package/lib/types/index.d.mts +2 -2
- package/lib/types/io/airtable/AirtableService.d.cts +268 -0
- package/lib/types/io/airtable/AirtableService.d.mts +268 -0
- package/lib/types/io/airtable/index.d.cts +6 -0
- package/lib/types/io/airtable/index.d.mts +6 -0
- package/lib/types/io/confluence/ConfluenceService.d.cts +250 -0
- package/lib/types/io/confluence/ConfluenceService.d.mts +250 -0
- package/lib/types/io/confluence/index.d.cts +1 -0
- package/lib/types/io/confluence/index.d.mts +1 -0
- package/lib/types/io/environment.d.cts +107 -0
- package/lib/types/io/environment.d.mts +107 -0
- package/lib/types/io/google-docs/GoogleDocsService.d.cts +188 -0
- package/lib/types/io/google-docs/GoogleDocsService.d.mts +188 -0
- package/lib/types/io/google-docs/index.d.cts +1 -0
- package/lib/types/io/google-docs/index.d.mts +1 -0
- package/lib/types/io/google-sheets/GoogleSheetsService.d.cts +204 -0
- package/lib/types/io/google-sheets/GoogleSheetsService.d.mts +204 -0
- package/lib/types/io/google-sheets/index.d.cts +6 -0
- package/lib/types/io/google-sheets/index.d.mts +6 -0
- package/lib/types/io/graphql/GraphqlService.d.cts +173 -0
- package/lib/types/io/graphql/GraphqlService.d.mts +173 -0
- package/lib/types/io/graphql/index.d.cts +6 -0
- package/lib/types/io/graphql/index.d.mts +6 -0
- package/lib/types/io/index.d.cts +17 -0
- package/lib/types/io/index.d.mts +17 -0
- package/lib/types/io/jira/JiraService.d.cts +300 -0
- package/lib/types/io/jira/JiraService.d.mts +300 -0
- package/lib/types/io/jira/index.d.cts +1 -0
- package/lib/types/io/jira/index.d.mts +1 -0
- package/lib/types/io/microsoft-excel/MicrosoftExcelService.d.cts +230 -0
- package/lib/types/io/microsoft-excel/MicrosoftExcelService.d.mts +230 -0
- package/lib/types/io/microsoft-excel/index.d.cts +1 -0
- package/lib/types/io/microsoft-excel/index.d.mts +1 -0
- package/lib/types/io/microsoft-sharepoint/MicrosoftSharePointService.d.cts +226 -0
- package/lib/types/io/microsoft-sharepoint/MicrosoftSharePointService.d.mts +226 -0
- package/lib/types/io/microsoft-sharepoint/index.d.cts +1 -0
- package/lib/types/io/microsoft-sharepoint/index.d.mts +1 -0
- package/lib/types/io/spreadsheet/SpreadsheetService.d.cts +144 -0
- package/lib/types/io/spreadsheet/SpreadsheetService.d.mts +144 -0
- package/lib/types/io/spreadsheet/index.d.cts +7 -0
- package/lib/types/io/spreadsheet/index.d.mts +7 -0
- package/lib/types/namespaces/index.d.cts +1 -0
- package/lib/types/namespaces/index.d.mts +1 -0
- package/lib/types/namespaces/models/credential.model.d.cts +23 -0
- package/lib/types/namespaces/models/credential.model.d.mts +23 -0
- package/lib/types/namespaces/models/index.d.cts +1 -0
- package/lib/types/namespaces/models/index.d.mts +1 -0
- package/lib/types/namespaces/rls/index.d.cts +10 -0
- package/lib/types/namespaces/rls/index.d.mts +10 -0
- package/lib/types/namespaces/rls/principal-resolver.d.cts +47 -0
- package/lib/types/namespaces/rls/principal-resolver.d.mts +47 -0
- package/lib/types/namespaces/rls/rls-bootstrap.service.d.cts +157 -0
- package/lib/types/namespaces/rls/rls-bootstrap.service.d.mts +157 -0
- package/lib/types/namespaces/rls/rls.constants.d.cts +52 -0
- package/lib/types/namespaces/rls/rls.constants.d.mts +52 -0
- package/lib/types/namespaces/rls/rls.template.d.cts +42 -0
- package/lib/types/namespaces/rls/rls.template.d.mts +42 -0
- package/lib/types/namespaces/rls/rls.types.d.cts +77 -0
- package/lib/types/namespaces/rls/rls.types.d.mts +77 -0
- package/lib/types/namespaces/rls/session-binding.d.cts +87 -0
- package/lib/types/namespaces/rls/session-binding.d.mts +87 -0
- package/lib/types/namespaces/services/credential.service.d.cts +175 -0
- package/lib/types/namespaces/services/credential.service.d.mts +175 -0
- package/lib/types/namespaces/services/index.d.cts +1 -0
- package/lib/types/namespaces/services/index.d.mts +1 -0
- package/lib/types/namespaces/types.d.cts +37 -0
- package/lib/types/namespaces/types.d.mts +37 -0
- package/lib/types/redis/adapter.d.cts +2 -0
- package/lib/types/redis/adapter.d.mts +2 -0
- package/lib/types/redis/types.d.cts +27 -2
- package/lib/types/redis/types.d.mts +27 -2
- package/lib/types/secrets/InfraCredentialBootstrap.d.cts +100 -0
- package/lib/types/secrets/InfraCredentialBootstrap.d.mts +100 -0
- package/lib/types/secrets/core/SecretTypes.d.cts +15 -1
- package/lib/types/secrets/core/SecretTypes.d.mts +15 -1
- package/lib/types/secrets/fs/FsSecretEnvironment.d.cts +42 -0
- package/lib/types/secrets/fs/FsSecretEnvironment.d.mts +42 -0
- package/lib/types/secrets/fs/FsSecretService.d.cts +207 -0
- package/lib/types/secrets/fs/FsSecretService.d.mts +207 -0
- package/lib/types/secrets/fs/FsSecretServiceConfig.d.cts +37 -0
- package/lib/types/secrets/fs/FsSecretServiceConfig.d.mts +37 -0
- package/lib/types/secrets/fs/index.d.cts +9 -0
- package/lib/types/secrets/fs/index.d.mts +9 -0
- package/lib/types/secrets/index.d.cts +2 -0
- package/lib/types/secrets/index.d.mts +2 -0
- package/lib/types/secrets/model/ModelSecretService.d.cts +190 -1
- package/lib/types/secrets/model/ModelSecretService.d.mts +190 -1
- package/lib/types/secrets/model/Secret.d.cts +44 -3
- package/lib/types/secrets/model/Secret.d.mts +44 -3
- package/lib/types/shared/environmentValue.d.cts +24 -0
- package/lib/types/shared/environmentValue.d.mts +24 -0
- package/lib/types/shared/http/HttpApiService.d.cts +193 -0
- package/lib/types/shared/http/HttpApiService.d.mts +193 -0
- package/lib/types/shared/http/hermeticBoot.d.cts +84 -0
- package/lib/types/shared/http/hermeticBoot.d.mts +84 -0
- package/lib/types/shared/http/index.d.cts +10 -0
- package/lib/types/shared/http/index.d.mts +10 -0
- package/package.json +279 -6
- package/sql/002_rls.sql +660 -15
- package/sql/004_credentials.sql +46 -0
|
@@ -0,0 +1,193 @@
|
|
|
1
|
+
import { type AxiosInstance } from "axios";
|
|
2
|
+
import { ClientBasedService, MaybeContextualArg } from "@decaf-ts/core";
|
|
3
|
+
/**
|
|
4
|
+
* @module integrations/shared/http/base-service
|
|
5
|
+
* @summary Shared HTTP base service, config contract, and error mapping for the HTTP-backed integration services.
|
|
6
|
+
* @description Provides the `HttpApiServiceConfig` shape consumed by every Stage 3b HTTP-backed
|
|
7
|
+
* integration service (Slack, Telegram, Teams, Gmail, GitHub, GitLab, Google Sheets, Airtable, and
|
|
8
|
+
* GraphQL), the abstract `HttpApiService` client-based service that turns a config into a
|
|
9
|
+
* configured Axios instance, and the `httpError` mapper that converts transport failures into
|
|
10
|
+
* decaf `BadRequestError`/`ConflictError`/`NotFoundError`/`InternalError` errors. Concrete
|
|
11
|
+
* services extend `HttpApiService` and only supply their base URL, auth headers, and environment
|
|
12
|
+
* slice, inheriting initialization and error mapping.
|
|
13
|
+
*/
|
|
14
|
+
/**
|
|
15
|
+
* @description Base configuration shared by every HTTP-backed integration service
|
|
16
|
+
* @summary Carries the optional `baseUrl` override (falling back to the service's
|
|
17
|
+
* `defaultBaseUrl()`), credentials (`token`, or `username`/`password` for basic-auth
|
|
18
|
+
* style APIs), an Axios `timeout` in milliseconds (defaults to `30000`), and any
|
|
19
|
+
* extra default `headers` merged after the service's own `authHeaders`. Concrete
|
|
20
|
+
* services extend this interface with their provider-specific fields.
|
|
21
|
+
* @category Shared
|
|
22
|
+
* @memberOf module:integrations/shared/http/base-service
|
|
23
|
+
*/
|
|
24
|
+
export interface HttpApiServiceConfig {
|
|
25
|
+
/**
|
|
26
|
+
* @description Base URL override for the service client
|
|
27
|
+
* @summary When omitted, the concrete service's `defaultBaseUrl()` is used.
|
|
28
|
+
*/
|
|
29
|
+
baseUrl?: string;
|
|
30
|
+
/**
|
|
31
|
+
* @description Bearer or provider token used for authentication
|
|
32
|
+
* @summary How the token is sent (header name, scheme, or query parameter) is
|
|
33
|
+
* decided by each concrete service's `authHeaders()` implementation.
|
|
34
|
+
*/
|
|
35
|
+
token?: string;
|
|
36
|
+
/**
|
|
37
|
+
* @description Optional username for basic-auth style APIs
|
|
38
|
+
* @summary Used together with {@link HttpApiServiceConfig.password} by services
|
|
39
|
+
* that authenticate with HTTP basic credentials.
|
|
40
|
+
*/
|
|
41
|
+
username?: string;
|
|
42
|
+
/**
|
|
43
|
+
* @description Optional password for basic-auth style APIs
|
|
44
|
+
* @summary Used together with {@link HttpApiServiceConfig.username}.
|
|
45
|
+
*/
|
|
46
|
+
password?: string;
|
|
47
|
+
/**
|
|
48
|
+
* @description Request timeout in milliseconds
|
|
49
|
+
* @summary Applied to the Axios instance created by
|
|
50
|
+
* {@link HttpApiService.initialize}; defaults to `30000` when omitted.
|
|
51
|
+
*/
|
|
52
|
+
timeout?: number;
|
|
53
|
+
/**
|
|
54
|
+
* @description Extra default headers merged into every request
|
|
55
|
+
* @summary Merged after the service's own `authHeaders()`, so explicit
|
|
56
|
+
* `headers` entries take precedence over generated auth headers.
|
|
57
|
+
*/
|
|
58
|
+
headers?: Record<string, string>;
|
|
59
|
+
}
|
|
60
|
+
/**
|
|
61
|
+
* @description Maps a transport or provider failure to a decaf error
|
|
62
|
+
* @summary Normalizes `unknown` caught errors into the decaf error hierarchy.
|
|
63
|
+
* Already-mapped decaf errors are returned unchanged; errors carrying an HTTP
|
|
64
|
+
* response are mapped by status (`404` to `NotFoundError`, `409` to
|
|
65
|
+
* `ConflictError`, everything else to `BadRequestError` with the response body
|
|
66
|
+
* as detail); any other failure becomes an `InternalError` carrying the
|
|
67
|
+
* original message. Concrete services wrap their API calls with this mapper so
|
|
68
|
+
* callers only ever observe decaf errors.
|
|
69
|
+
* @param {string} serviceName - Human-readable provider name used to prefix the error message (e.g. `"Slack"`).
|
|
70
|
+
* @param {string} action - Short description of the failing operation (e.g. `"API chat.postMessage"`).
|
|
71
|
+
* @param {unknown} error - The caught error: a decaf error, an Axios-style error with an HTTP `response`, or anything else.
|
|
72
|
+
* @returns {Error} The corresponding decaf error: the input unchanged when already a decaf error, a status-mapped `NotFoundError`/`ConflictError`/`BadRequestError` when an HTTP response is present, or an `InternalError` otherwise.
|
|
73
|
+
* @category Shared
|
|
74
|
+
* @memberOf module:integrations/shared/http/base-service
|
|
75
|
+
*/
|
|
76
|
+
export declare function httpError(serviceName: string, action: string, error: unknown): Error;
|
|
77
|
+
/**
|
|
78
|
+
* @description Abstract base service for HTTP-backed provider integrations
|
|
79
|
+
* @summary Implements the shared `ClientBasedService` lifecycle for REST-style
|
|
80
|
+
* providers: `initialize()` merges an explicitly provided config with the
|
|
81
|
+
* concrete service's environment slice, resolves the effective base URL
|
|
82
|
+
* (explicit `baseUrl`, then `defaultBaseUrl()`), and builds an `AxiosInstance`
|
|
83
|
+
* with the JSON content type, the service's `authHeaders()`, and any extra
|
|
84
|
+
* config `headers`. Subclasses declare their `serviceName`, supply a
|
|
85
|
+
* `defaultBaseUrl()`, optionally override `authHeaders()` and
|
|
86
|
+
* `configFromEnvironment()`, and use `requireToken()` in operations that
|
|
87
|
+
* mandate a token. Callers always pass a concrete config object (or rely on
|
|
88
|
+
* the environment slice) and receive typed decaf errors through
|
|
89
|
+
* {@link httpError}.
|
|
90
|
+
* @class HttpApiService
|
|
91
|
+
* @category Shared
|
|
92
|
+
* @mermaid
|
|
93
|
+
* sequenceDiagram
|
|
94
|
+
* autonumber
|
|
95
|
+
* participant Caller
|
|
96
|
+
* participant Service as HttpApiService
|
|
97
|
+
* participant Env as Environment slice
|
|
98
|
+
* participant Axios as Axios
|
|
99
|
+
* Caller->>Service: initialize(providedConfig?)
|
|
100
|
+
* activate Service
|
|
101
|
+
* Service->>Env: configFromEnvironment()
|
|
102
|
+
* activate Env
|
|
103
|
+
* Env-->>Service: partial config (or undefined)
|
|
104
|
+
* deactivate Env
|
|
105
|
+
* Service->>Service: merge { ...environment, ...provided }
|
|
106
|
+
* alt baseUrl configured
|
|
107
|
+
* Service->>Service: baseUrl = config.baseUrl
|
|
108
|
+
* else baseUrl missing
|
|
109
|
+
* Service->>Service: baseUrl = defaultBaseUrl()
|
|
110
|
+
* alt still missing
|
|
111
|
+
* Service--xCaller: InternalError (requires a base URL)
|
|
112
|
+
* end
|
|
113
|
+
* end
|
|
114
|
+
* Service->>Axios: create({ baseURL, timeout, headers })
|
|
115
|
+
* activate Axios
|
|
116
|
+
* Axios-->>Service: AxiosInstance
|
|
117
|
+
* deactivate Axios
|
|
118
|
+
* Service-->>Caller: { config, client }
|
|
119
|
+
* deactivate Service
|
|
120
|
+
* @example
|
|
121
|
+
* ```ts
|
|
122
|
+
* import { SlackService } from "@decaf-ts/integrations/comms/slack";
|
|
123
|
+
*
|
|
124
|
+
* const slack = new SlackService();
|
|
125
|
+
* // explicit config; when omitted, initialize() falls back to the
|
|
126
|
+
* // service's environment slice (e.g. GRAPH_CREDENTIAL_SLACK_TOKEN)
|
|
127
|
+
* await slack.initialize({ token: process.env.GRAPH_CREDENTIAL_SLACK_TOKEN });
|
|
128
|
+
* ```
|
|
129
|
+
* @memberOf module:integrations/shared/http/base-service
|
|
130
|
+
*/
|
|
131
|
+
export declare abstract class HttpApiService<CONF extends HttpApiServiceConfig> extends ClientBasedService<AxiosInstance, CONF> {
|
|
132
|
+
constructor();
|
|
133
|
+
/**
|
|
134
|
+
* @description Human-readable provider name used in error messages
|
|
135
|
+
* @summary Subclasses must declare this (e.g. `"Slack"`, `"GitHub"`); it
|
|
136
|
+
* prefixes messages thrown for missing base URLs, tokens, and mapped errors.
|
|
137
|
+
*/
|
|
138
|
+
protected abstract readonly serviceName: string;
|
|
139
|
+
/**
|
|
140
|
+
* @description The provider's default API base URL
|
|
141
|
+
* @summary Used by {@link HttpApiService.initialize} when the resolved
|
|
142
|
+
* config carries no `baseUrl`.
|
|
143
|
+
* @returns {string} The provider's default base URL (e.g. `"https://api.github.com"`).
|
|
144
|
+
*/
|
|
145
|
+
protected abstract defaultBaseUrl(): string;
|
|
146
|
+
/**
|
|
147
|
+
* @description Builds the default authentication headers for a config
|
|
148
|
+
* @summary Invoked by {@link HttpApiService.initialize} when creating the
|
|
149
|
+
* Axios instance. The base implementation returns no headers; subclasses
|
|
150
|
+
* override it to translate `config.token`/`username`/`password` into
|
|
151
|
+
* provider-specific headers (e.g. `Authorization: Bearer ...`).
|
|
152
|
+
* @param {CONF} config - The resolved service configuration.
|
|
153
|
+
* @returns {Record<string, string>} The headers to send with every request; empty when the config carries no credentials.
|
|
154
|
+
*/
|
|
155
|
+
protected authHeaders(_config: CONF): Record<string, string>;
|
|
156
|
+
/**
|
|
157
|
+
* @description Reads the service's credentials and defaults from the environment
|
|
158
|
+
* @summary Invoked by {@link HttpApiService.initialize} and merged under the
|
|
159
|
+
* explicitly provided config (explicit values win). Subclasses override this
|
|
160
|
+
* to read their `LoggedEnvironment` slice with the
|
|
161
|
+
* `envString`/`envNumber`/`envBoolean` helpers and return `undefined` when
|
|
162
|
+
* the slice is not configured at all.
|
|
163
|
+
* @returns {Partial<CONF> | undefined} A partial config from the environment, or `undefined` when the environment carries no usable credentials.
|
|
164
|
+
*/
|
|
165
|
+
protected configFromEnvironment(): Partial<CONF> | undefined;
|
|
166
|
+
/**
|
|
167
|
+
* @description Resolves the config and builds the Axios client
|
|
168
|
+
* @summary Merges the explicitly provided config (first argument, when
|
|
169
|
+
* present) over the environment slice from `configFromEnvironment()`,
|
|
170
|
+
* resolves the effective base URL (explicit `baseUrl`, then
|
|
171
|
+
* `defaultBaseUrl()`), and creates an Axios instance with the resolved
|
|
172
|
+
* `timeout` (default `30000`), JSON content type, `authHeaders(config)`,
|
|
173
|
+
* and any extra config `headers`. The resolved config and client are also
|
|
174
|
+
* stored on the service for subsequent operations.
|
|
175
|
+
* @param {...MaybeContextualArg<any>} args - An optional `Partial<CONF>`, optionally followed by a decaf `Context`.
|
|
176
|
+
* @returns {Promise<{config: CONF, client: AxiosInstance}>} The merged configuration and the configured Axios instance.
|
|
177
|
+
* @throws {InternalError} When neither the config nor `defaultBaseUrl()` yields a base URL.
|
|
178
|
+
*/
|
|
179
|
+
initialize(...args: MaybeContextualArg<any>): Promise<{
|
|
180
|
+
config: CONF;
|
|
181
|
+
client: AxiosInstance;
|
|
182
|
+
}>;
|
|
183
|
+
/**
|
|
184
|
+
* @description Asserts that the service was configured with a token
|
|
185
|
+
* @summary Reads the resolved config and throws when no `token` is present;
|
|
186
|
+
* operations that require authenticated access call this before issuing
|
|
187
|
+
* requests.
|
|
188
|
+
* @param {CONF} [config] - The config to validate; defaults to the service's resolved config.
|
|
189
|
+
* @returns {string} The configured token.
|
|
190
|
+
* @throws {InternalError} When the config carries no `token`.
|
|
191
|
+
*/
|
|
192
|
+
protected requireToken(config?: CONF): string;
|
|
193
|
+
}
|
|
@@ -0,0 +1,193 @@
|
|
|
1
|
+
import { type AxiosInstance } from "axios";
|
|
2
|
+
import { ClientBasedService, MaybeContextualArg } from "@decaf-ts/core";
|
|
3
|
+
/**
|
|
4
|
+
* @module integrations/shared/http/base-service
|
|
5
|
+
* @summary Shared HTTP base service, config contract, and error mapping for the HTTP-backed integration services.
|
|
6
|
+
* @description Provides the `HttpApiServiceConfig` shape consumed by every Stage 3b HTTP-backed
|
|
7
|
+
* integration service (Slack, Telegram, Teams, Gmail, GitHub, GitLab, Google Sheets, Airtable, and
|
|
8
|
+
* GraphQL), the abstract `HttpApiService` client-based service that turns a config into a
|
|
9
|
+
* configured Axios instance, and the `httpError` mapper that converts transport failures into
|
|
10
|
+
* decaf `BadRequestError`/`ConflictError`/`NotFoundError`/`InternalError` errors. Concrete
|
|
11
|
+
* services extend `HttpApiService` and only supply their base URL, auth headers, and environment
|
|
12
|
+
* slice, inheriting initialization and error mapping.
|
|
13
|
+
*/
|
|
14
|
+
/**
|
|
15
|
+
* @description Base configuration shared by every HTTP-backed integration service
|
|
16
|
+
* @summary Carries the optional `baseUrl` override (falling back to the service's
|
|
17
|
+
* `defaultBaseUrl()`), credentials (`token`, or `username`/`password` for basic-auth
|
|
18
|
+
* style APIs), an Axios `timeout` in milliseconds (defaults to `30000`), and any
|
|
19
|
+
* extra default `headers` merged after the service's own `authHeaders`. Concrete
|
|
20
|
+
* services extend this interface with their provider-specific fields.
|
|
21
|
+
* @category Shared
|
|
22
|
+
* @memberOf module:integrations/shared/http/base-service
|
|
23
|
+
*/
|
|
24
|
+
export interface HttpApiServiceConfig {
|
|
25
|
+
/**
|
|
26
|
+
* @description Base URL override for the service client
|
|
27
|
+
* @summary When omitted, the concrete service's `defaultBaseUrl()` is used.
|
|
28
|
+
*/
|
|
29
|
+
baseUrl?: string;
|
|
30
|
+
/**
|
|
31
|
+
* @description Bearer or provider token used for authentication
|
|
32
|
+
* @summary How the token is sent (header name, scheme, or query parameter) is
|
|
33
|
+
* decided by each concrete service's `authHeaders()` implementation.
|
|
34
|
+
*/
|
|
35
|
+
token?: string;
|
|
36
|
+
/**
|
|
37
|
+
* @description Optional username for basic-auth style APIs
|
|
38
|
+
* @summary Used together with {@link HttpApiServiceConfig.password} by services
|
|
39
|
+
* that authenticate with HTTP basic credentials.
|
|
40
|
+
*/
|
|
41
|
+
username?: string;
|
|
42
|
+
/**
|
|
43
|
+
* @description Optional password for basic-auth style APIs
|
|
44
|
+
* @summary Used together with {@link HttpApiServiceConfig.username}.
|
|
45
|
+
*/
|
|
46
|
+
password?: string;
|
|
47
|
+
/**
|
|
48
|
+
* @description Request timeout in milliseconds
|
|
49
|
+
* @summary Applied to the Axios instance created by
|
|
50
|
+
* {@link HttpApiService.initialize}; defaults to `30000` when omitted.
|
|
51
|
+
*/
|
|
52
|
+
timeout?: number;
|
|
53
|
+
/**
|
|
54
|
+
* @description Extra default headers merged into every request
|
|
55
|
+
* @summary Merged after the service's own `authHeaders()`, so explicit
|
|
56
|
+
* `headers` entries take precedence over generated auth headers.
|
|
57
|
+
*/
|
|
58
|
+
headers?: Record<string, string>;
|
|
59
|
+
}
|
|
60
|
+
/**
|
|
61
|
+
* @description Maps a transport or provider failure to a decaf error
|
|
62
|
+
* @summary Normalizes `unknown` caught errors into the decaf error hierarchy.
|
|
63
|
+
* Already-mapped decaf errors are returned unchanged; errors carrying an HTTP
|
|
64
|
+
* response are mapped by status (`404` to `NotFoundError`, `409` to
|
|
65
|
+
* `ConflictError`, everything else to `BadRequestError` with the response body
|
|
66
|
+
* as detail); any other failure becomes an `InternalError` carrying the
|
|
67
|
+
* original message. Concrete services wrap their API calls with this mapper so
|
|
68
|
+
* callers only ever observe decaf errors.
|
|
69
|
+
* @param {string} serviceName - Human-readable provider name used to prefix the error message (e.g. `"Slack"`).
|
|
70
|
+
* @param {string} action - Short description of the failing operation (e.g. `"API chat.postMessage"`).
|
|
71
|
+
* @param {unknown} error - The caught error: a decaf error, an Axios-style error with an HTTP `response`, or anything else.
|
|
72
|
+
* @returns {Error} The corresponding decaf error: the input unchanged when already a decaf error, a status-mapped `NotFoundError`/`ConflictError`/`BadRequestError` when an HTTP response is present, or an `InternalError` otherwise.
|
|
73
|
+
* @category Shared
|
|
74
|
+
* @memberOf module:integrations/shared/http/base-service
|
|
75
|
+
*/
|
|
76
|
+
export declare function httpError(serviceName: string, action: string, error: unknown): Error;
|
|
77
|
+
/**
|
|
78
|
+
* @description Abstract base service for HTTP-backed provider integrations
|
|
79
|
+
* @summary Implements the shared `ClientBasedService` lifecycle for REST-style
|
|
80
|
+
* providers: `initialize()` merges an explicitly provided config with the
|
|
81
|
+
* concrete service's environment slice, resolves the effective base URL
|
|
82
|
+
* (explicit `baseUrl`, then `defaultBaseUrl()`), and builds an `AxiosInstance`
|
|
83
|
+
* with the JSON content type, the service's `authHeaders()`, and any extra
|
|
84
|
+
* config `headers`. Subclasses declare their `serviceName`, supply a
|
|
85
|
+
* `defaultBaseUrl()`, optionally override `authHeaders()` and
|
|
86
|
+
* `configFromEnvironment()`, and use `requireToken()` in operations that
|
|
87
|
+
* mandate a token. Callers always pass a concrete config object (or rely on
|
|
88
|
+
* the environment slice) and receive typed decaf errors through
|
|
89
|
+
* {@link httpError}.
|
|
90
|
+
* @class HttpApiService
|
|
91
|
+
* @category Shared
|
|
92
|
+
* @mermaid
|
|
93
|
+
* sequenceDiagram
|
|
94
|
+
* autonumber
|
|
95
|
+
* participant Caller
|
|
96
|
+
* participant Service as HttpApiService
|
|
97
|
+
* participant Env as Environment slice
|
|
98
|
+
* participant Axios as Axios
|
|
99
|
+
* Caller->>Service: initialize(providedConfig?)
|
|
100
|
+
* activate Service
|
|
101
|
+
* Service->>Env: configFromEnvironment()
|
|
102
|
+
* activate Env
|
|
103
|
+
* Env-->>Service: partial config (or undefined)
|
|
104
|
+
* deactivate Env
|
|
105
|
+
* Service->>Service: merge { ...environment, ...provided }
|
|
106
|
+
* alt baseUrl configured
|
|
107
|
+
* Service->>Service: baseUrl = config.baseUrl
|
|
108
|
+
* else baseUrl missing
|
|
109
|
+
* Service->>Service: baseUrl = defaultBaseUrl()
|
|
110
|
+
* alt still missing
|
|
111
|
+
* Service--xCaller: InternalError (requires a base URL)
|
|
112
|
+
* end
|
|
113
|
+
* end
|
|
114
|
+
* Service->>Axios: create({ baseURL, timeout, headers })
|
|
115
|
+
* activate Axios
|
|
116
|
+
* Axios-->>Service: AxiosInstance
|
|
117
|
+
* deactivate Axios
|
|
118
|
+
* Service-->>Caller: { config, client }
|
|
119
|
+
* deactivate Service
|
|
120
|
+
* @example
|
|
121
|
+
* ```ts
|
|
122
|
+
* import { SlackService } from "@decaf-ts/integrations/comms/slack";
|
|
123
|
+
*
|
|
124
|
+
* const slack = new SlackService();
|
|
125
|
+
* // explicit config; when omitted, initialize() falls back to the
|
|
126
|
+
* // service's environment slice (e.g. GRAPH_CREDENTIAL_SLACK_TOKEN)
|
|
127
|
+
* await slack.initialize({ token: process.env.GRAPH_CREDENTIAL_SLACK_TOKEN });
|
|
128
|
+
* ```
|
|
129
|
+
* @memberOf module:integrations/shared/http/base-service
|
|
130
|
+
*/
|
|
131
|
+
export declare abstract class HttpApiService<CONF extends HttpApiServiceConfig> extends ClientBasedService<AxiosInstance, CONF> {
|
|
132
|
+
constructor();
|
|
133
|
+
/**
|
|
134
|
+
* @description Human-readable provider name used in error messages
|
|
135
|
+
* @summary Subclasses must declare this (e.g. `"Slack"`, `"GitHub"`); it
|
|
136
|
+
* prefixes messages thrown for missing base URLs, tokens, and mapped errors.
|
|
137
|
+
*/
|
|
138
|
+
protected abstract readonly serviceName: string;
|
|
139
|
+
/**
|
|
140
|
+
* @description The provider's default API base URL
|
|
141
|
+
* @summary Used by {@link HttpApiService.initialize} when the resolved
|
|
142
|
+
* config carries no `baseUrl`.
|
|
143
|
+
* @returns {string} The provider's default base URL (e.g. `"https://api.github.com"`).
|
|
144
|
+
*/
|
|
145
|
+
protected abstract defaultBaseUrl(): string;
|
|
146
|
+
/**
|
|
147
|
+
* @description Builds the default authentication headers for a config
|
|
148
|
+
* @summary Invoked by {@link HttpApiService.initialize} when creating the
|
|
149
|
+
* Axios instance. The base implementation returns no headers; subclasses
|
|
150
|
+
* override it to translate `config.token`/`username`/`password` into
|
|
151
|
+
* provider-specific headers (e.g. `Authorization: Bearer ...`).
|
|
152
|
+
* @param {CONF} config - The resolved service configuration.
|
|
153
|
+
* @returns {Record<string, string>} The headers to send with every request; empty when the config carries no credentials.
|
|
154
|
+
*/
|
|
155
|
+
protected authHeaders(_config: CONF): Record<string, string>;
|
|
156
|
+
/**
|
|
157
|
+
* @description Reads the service's credentials and defaults from the environment
|
|
158
|
+
* @summary Invoked by {@link HttpApiService.initialize} and merged under the
|
|
159
|
+
* explicitly provided config (explicit values win). Subclasses override this
|
|
160
|
+
* to read their `LoggedEnvironment` slice with the
|
|
161
|
+
* `envString`/`envNumber`/`envBoolean` helpers and return `undefined` when
|
|
162
|
+
* the slice is not configured at all.
|
|
163
|
+
* @returns {Partial<CONF> | undefined} A partial config from the environment, or `undefined` when the environment carries no usable credentials.
|
|
164
|
+
*/
|
|
165
|
+
protected configFromEnvironment(): Partial<CONF> | undefined;
|
|
166
|
+
/**
|
|
167
|
+
* @description Resolves the config and builds the Axios client
|
|
168
|
+
* @summary Merges the explicitly provided config (first argument, when
|
|
169
|
+
* present) over the environment slice from `configFromEnvironment()`,
|
|
170
|
+
* resolves the effective base URL (explicit `baseUrl`, then
|
|
171
|
+
* `defaultBaseUrl()`), and creates an Axios instance with the resolved
|
|
172
|
+
* `timeout` (default `30000`), JSON content type, `authHeaders(config)`,
|
|
173
|
+
* and any extra config `headers`. The resolved config and client are also
|
|
174
|
+
* stored on the service for subsequent operations.
|
|
175
|
+
* @param {...MaybeContextualArg<any>} args - An optional `Partial<CONF>`, optionally followed by a decaf `Context`.
|
|
176
|
+
* @returns {Promise<{config: CONF, client: AxiosInstance}>} The merged configuration and the configured Axios instance.
|
|
177
|
+
* @throws {InternalError} When neither the config nor `defaultBaseUrl()` yields a base URL.
|
|
178
|
+
*/
|
|
179
|
+
initialize(...args: MaybeContextualArg<any>): Promise<{
|
|
180
|
+
config: CONF;
|
|
181
|
+
client: AxiosInstance;
|
|
182
|
+
}>;
|
|
183
|
+
/**
|
|
184
|
+
* @description Asserts that the service was configured with a token
|
|
185
|
+
* @summary Reads the resolved config and throws when no `token` is present;
|
|
186
|
+
* operations that require authenticated access call this before issuing
|
|
187
|
+
* requests.
|
|
188
|
+
* @param {CONF} [config] - The config to validate; defaults to the service's resolved config.
|
|
189
|
+
* @returns {string} The configured token.
|
|
190
|
+
* @throws {InternalError} When the config carries no `token`.
|
|
191
|
+
*/
|
|
192
|
+
protected requireToken(config?: CONF): string;
|
|
193
|
+
}
|
|
@@ -0,0 +1,84 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @description Minimal boot contract required by the hermetic boot helper
|
|
3
|
+
* @summary Any client-based service exposing the core `boot(...)` shape; kept
|
|
4
|
+
* structural so the helper does not depend on the core service types.
|
|
5
|
+
*/
|
|
6
|
+
interface HermeticBootableService {
|
|
7
|
+
boot(...args: unknown[]): Promise<unknown>;
|
|
8
|
+
}
|
|
9
|
+
/**
|
|
10
|
+
* @description Boots a service with Environment-derived configuration disabled
|
|
11
|
+
* @summary Node-side replacement for the removed `nonEnvironmentService`
|
|
12
|
+
* wrappers (SAA-1293): the service's own `configFromEnvironment()` property
|
|
13
|
+
* descriptor is shadowed with `() => undefined` for the duration of the
|
|
14
|
+
* `boot()` call and restored (or removed, when the service had no own
|
|
15
|
+
* descriptor) in `finally`, so configuration keys absent from
|
|
16
|
+
* the explicit config cannot inherit the service's Environment slice. The
|
|
17
|
+
* shadowing is per-instance (the prototype is never touched): a module-level
|
|
18
|
+
* `WeakMap` (`shadowScopes`) tracks each service's original
|
|
19
|
+
* `configFromEnvironment` descriptor together with a call depth, so
|
|
20
|
+
* overlapping or nested `bootWithoutEnvironment` calls on the same instance
|
|
21
|
+
* share a single shadow; a nested call only increments that depth and never
|
|
22
|
+
* restores the descriptor early, and the original descriptor is restored (or
|
|
23
|
+
* deleted) only when the outermost call completes. The helper fails closed:
|
|
24
|
+
* an explicit config object is mandatory, so a node boot can never silently
|
|
25
|
+
* fall back to Environment configuration. The SAA-1293 undecorated-service
|
|
26
|
+
* contract stands — no decoration, no wrapper classes, no `Injectables`
|
|
27
|
+
* registration.
|
|
28
|
+
* @template CONF The explicit configuration object type passed to `boot()`.
|
|
29
|
+
* @template S The undecorated service type being booted.
|
|
30
|
+
* @param {S} service - The undecorated service instance to boot.
|
|
31
|
+
* @param {CONF} config - Explicit configuration object for the boot; Environment-derived config is disabled for this call.
|
|
32
|
+
* @param {...unknown} rest - Remaining `boot()` arguments (e.g. a decaf `Context`), forwarded unchanged.
|
|
33
|
+
* @returns {Promise<S>} The same service instance, booted with only the explicit configuration.
|
|
34
|
+
* @throws {ValidationError} When `config` is missing or not an object.
|
|
35
|
+
* @example
|
|
36
|
+
* ```ts
|
|
37
|
+
* import { EmailService } from "@decaf-ts/integrations/comms/email";
|
|
38
|
+
* import { bootWithoutEnvironment } from "@decaf-ts/integrations/shared/http";
|
|
39
|
+
*
|
|
40
|
+
* const service = new EmailService();
|
|
41
|
+
* // The comms.email environment slice is ignored even when configured:
|
|
42
|
+
* // allowPlaintextAuth stays false unless the explicit config sets it.
|
|
43
|
+
* await bootWithoutEnvironment(service, {
|
|
44
|
+
* provider: "smtp",
|
|
45
|
+
* host: "smtp.example",
|
|
46
|
+
* port: 587,
|
|
47
|
+
* username: "user@example.com",
|
|
48
|
+
* password: "secret",
|
|
49
|
+
* });
|
|
50
|
+
* ```
|
|
51
|
+
* @category Shared
|
|
52
|
+
* @memberOf module:integrations/shared/http/hermetic-boot
|
|
53
|
+
* @mermaid
|
|
54
|
+
* sequenceDiagram
|
|
55
|
+
* autonumber
|
|
56
|
+
* participant Caller
|
|
57
|
+
* participant Helper as bootWithoutEnvironment
|
|
58
|
+
* participant Service as service
|
|
59
|
+
* Caller->>Helper: bootWithoutEnvironment(service, config, ...rest)
|
|
60
|
+
* activate Helper
|
|
61
|
+
* alt config missing or not an object
|
|
62
|
+
* Helper-->>Caller: ValidationError
|
|
63
|
+
* else explicit config present
|
|
64
|
+
* alt instance not yet shadowed
|
|
65
|
+
* Helper->>Service: capture own configFromEnvironment descriptor
|
|
66
|
+
* Helper->>Service: shadow own configFromEnvironment with () => undefined
|
|
67
|
+
* else re-entrant call on the same instance
|
|
68
|
+
* Helper->>Helper: increment shared scope depth
|
|
69
|
+
* end
|
|
70
|
+
* Helper->>Service: boot(config, ...rest)
|
|
71
|
+
* activate Service
|
|
72
|
+
* Service-->>Helper: boot completes
|
|
73
|
+
* deactivate Service
|
|
74
|
+
* alt outermost call (depth reaches 0)
|
|
75
|
+
* Helper->>Service: restore or remove own configFromEnvironment descriptor
|
|
76
|
+
* else nested call
|
|
77
|
+
* Note over Helper,Service: shared shadow stays in place
|
|
78
|
+
* end
|
|
79
|
+
* Helper-->>Caller: service
|
|
80
|
+
* end
|
|
81
|
+
* deactivate Helper
|
|
82
|
+
*/
|
|
83
|
+
export declare function bootWithoutEnvironment<CONF extends object, S extends HermeticBootableService>(service: S, config: CONF, ...rest: unknown[]): Promise<S>;
|
|
84
|
+
export {};
|
|
@@ -0,0 +1,84 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @description Minimal boot contract required by the hermetic boot helper
|
|
3
|
+
* @summary Any client-based service exposing the core `boot(...)` shape; kept
|
|
4
|
+
* structural so the helper does not depend on the core service types.
|
|
5
|
+
*/
|
|
6
|
+
interface HermeticBootableService {
|
|
7
|
+
boot(...args: unknown[]): Promise<unknown>;
|
|
8
|
+
}
|
|
9
|
+
/**
|
|
10
|
+
* @description Boots a service with Environment-derived configuration disabled
|
|
11
|
+
* @summary Node-side replacement for the removed `nonEnvironmentService`
|
|
12
|
+
* wrappers (SAA-1293): the service's own `configFromEnvironment()` property
|
|
13
|
+
* descriptor is shadowed with `() => undefined` for the duration of the
|
|
14
|
+
* `boot()` call and restored (or removed, when the service had no own
|
|
15
|
+
* descriptor) in `finally`, so configuration keys absent from
|
|
16
|
+
* the explicit config cannot inherit the service's Environment slice. The
|
|
17
|
+
* shadowing is per-instance (the prototype is never touched): a module-level
|
|
18
|
+
* `WeakMap` (`shadowScopes`) tracks each service's original
|
|
19
|
+
* `configFromEnvironment` descriptor together with a call depth, so
|
|
20
|
+
* overlapping or nested `bootWithoutEnvironment` calls on the same instance
|
|
21
|
+
* share a single shadow; a nested call only increments that depth and never
|
|
22
|
+
* restores the descriptor early, and the original descriptor is restored (or
|
|
23
|
+
* deleted) only when the outermost call completes. The helper fails closed:
|
|
24
|
+
* an explicit config object is mandatory, so a node boot can never silently
|
|
25
|
+
* fall back to Environment configuration. The SAA-1293 undecorated-service
|
|
26
|
+
* contract stands — no decoration, no wrapper classes, no `Injectables`
|
|
27
|
+
* registration.
|
|
28
|
+
* @template CONF The explicit configuration object type passed to `boot()`.
|
|
29
|
+
* @template S The undecorated service type being booted.
|
|
30
|
+
* @param {S} service - The undecorated service instance to boot.
|
|
31
|
+
* @param {CONF} config - Explicit configuration object for the boot; Environment-derived config is disabled for this call.
|
|
32
|
+
* @param {...unknown} rest - Remaining `boot()` arguments (e.g. a decaf `Context`), forwarded unchanged.
|
|
33
|
+
* @returns {Promise<S>} The same service instance, booted with only the explicit configuration.
|
|
34
|
+
* @throws {ValidationError} When `config` is missing or not an object.
|
|
35
|
+
* @example
|
|
36
|
+
* ```ts
|
|
37
|
+
* import { EmailService } from "@decaf-ts/integrations/comms/email";
|
|
38
|
+
* import { bootWithoutEnvironment } from "@decaf-ts/integrations/shared/http";
|
|
39
|
+
*
|
|
40
|
+
* const service = new EmailService();
|
|
41
|
+
* // The comms.email environment slice is ignored even when configured:
|
|
42
|
+
* // allowPlaintextAuth stays false unless the explicit config sets it.
|
|
43
|
+
* await bootWithoutEnvironment(service, {
|
|
44
|
+
* provider: "smtp",
|
|
45
|
+
* host: "smtp.example",
|
|
46
|
+
* port: 587,
|
|
47
|
+
* username: "user@example.com",
|
|
48
|
+
* password: "secret",
|
|
49
|
+
* });
|
|
50
|
+
* ```
|
|
51
|
+
* @category Shared
|
|
52
|
+
* @memberOf module:integrations/shared/http/hermetic-boot
|
|
53
|
+
* @mermaid
|
|
54
|
+
* sequenceDiagram
|
|
55
|
+
* autonumber
|
|
56
|
+
* participant Caller
|
|
57
|
+
* participant Helper as bootWithoutEnvironment
|
|
58
|
+
* participant Service as service
|
|
59
|
+
* Caller->>Helper: bootWithoutEnvironment(service, config, ...rest)
|
|
60
|
+
* activate Helper
|
|
61
|
+
* alt config missing or not an object
|
|
62
|
+
* Helper-->>Caller: ValidationError
|
|
63
|
+
* else explicit config present
|
|
64
|
+
* alt instance not yet shadowed
|
|
65
|
+
* Helper->>Service: capture own configFromEnvironment descriptor
|
|
66
|
+
* Helper->>Service: shadow own configFromEnvironment with () => undefined
|
|
67
|
+
* else re-entrant call on the same instance
|
|
68
|
+
* Helper->>Helper: increment shared scope depth
|
|
69
|
+
* end
|
|
70
|
+
* Helper->>Service: boot(config, ...rest)
|
|
71
|
+
* activate Service
|
|
72
|
+
* Service-->>Helper: boot completes
|
|
73
|
+
* deactivate Service
|
|
74
|
+
* alt outermost call (depth reaches 0)
|
|
75
|
+
* Helper->>Service: restore or remove own configFromEnvironment descriptor
|
|
76
|
+
* else nested call
|
|
77
|
+
* Note over Helper,Service: shared shadow stays in place
|
|
78
|
+
* end
|
|
79
|
+
* Helper-->>Caller: service
|
|
80
|
+
* end
|
|
81
|
+
* deactivate Helper
|
|
82
|
+
*/
|
|
83
|
+
export declare function bootWithoutEnvironment<CONF extends object, S extends HermeticBootableService>(service: S, config: CONF, ...rest: unknown[]): Promise<S>;
|
|
84
|
+
export {};
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @module integrations/shared/http
|
|
3
|
+
* @summary Shared HTTP plumbing for client-based API services.
|
|
4
|
+
* @description Re-exports {@link HttpApiService} (Axios-backed base class with
|
|
5
|
+
* environment-driven config), {@link httpError} (the failure-to-decaf-error
|
|
6
|
+
* mapper used by every API service), and {@link bootWithoutEnvironment} (the
|
|
7
|
+
* Environment-hermetic boot path used by as-graph node consumers).
|
|
8
|
+
*/
|
|
9
|
+
export * from "./HttpApiService.d.cts";
|
|
10
|
+
export * from "./hermeticBoot.d.cts";
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @module integrations/shared/http
|
|
3
|
+
* @summary Shared HTTP plumbing for client-based API services.
|
|
4
|
+
* @description Re-exports {@link HttpApiService} (Axios-backed base class with
|
|
5
|
+
* environment-driven config), {@link httpError} (the failure-to-decaf-error
|
|
6
|
+
* mapper used by every API service), and {@link bootWithoutEnvironment} (the
|
|
7
|
+
* Environment-hermetic boot path used by as-graph node consumers).
|
|
8
|
+
*/
|
|
9
|
+
export * from "./HttpApiService.d.mts";
|
|
10
|
+
export * from "./hermeticBoot.d.mts";
|