@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,77 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @module integrations/namespaces/rls/types
|
|
3
|
+
* @summary Types shared by the namespace row-level-security template and services.
|
|
4
|
+
* @description Defines the minimal query-executor contract (compatible with
|
|
5
|
+
* `pg.Client`/`pg.Pool`), the policy descriptor used to generate DDL, and the
|
|
6
|
+
* bootstrap/session configuration shapes.
|
|
7
|
+
*/
|
|
8
|
+
/**
|
|
9
|
+
* @description Minimal asynchronous SQL executor required by the RLS services.
|
|
10
|
+
* @summary Matches the shape of `pg.Client.query()` without importing `pg` at
|
|
11
|
+
* runtime. Consumers can pass a `pg.Client`, a `pg.Pool`, or any compatible
|
|
12
|
+
* wrapper (including test doubles).
|
|
13
|
+
*/
|
|
14
|
+
export interface RlsQueryExecutor {
|
|
15
|
+
query(sql: string, values?: unknown[]): Promise<{
|
|
16
|
+
rowCount?: number | null;
|
|
17
|
+
rows?: unknown[];
|
|
18
|
+
}>;
|
|
19
|
+
}
|
|
20
|
+
/**
|
|
21
|
+
* @description A set of row-level-security policies for one table.
|
|
22
|
+
* @summary Each expression is a PostgreSQL boolean expression evaluated against
|
|
23
|
+
* the row. `insert` uses `WITH CHECK`; `update` uses `USING` and `WITH CHECK`.
|
|
24
|
+
*/
|
|
25
|
+
export interface RlsPolicySet {
|
|
26
|
+
/**
|
|
27
|
+
* @description Table name (optionally schema-qualified) to protect.
|
|
28
|
+
*/
|
|
29
|
+
table: string;
|
|
30
|
+
/**
|
|
31
|
+
* @description `USING` expression for `SELECT`; omit to leave `SELECT` denied.
|
|
32
|
+
*/
|
|
33
|
+
select?: string;
|
|
34
|
+
/**
|
|
35
|
+
* @description `WITH CHECK` expression for `INSERT`; omit to deny inserts.
|
|
36
|
+
*/
|
|
37
|
+
insert?: string;
|
|
38
|
+
/**
|
|
39
|
+
* @description `USING`/`WITH CHECK` expression for `UPDATE`; omit to deny updates.
|
|
40
|
+
*/
|
|
41
|
+
update?: string;
|
|
42
|
+
/**
|
|
43
|
+
* @description `USING` expression for `DELETE`; omit to deny deletes.
|
|
44
|
+
*/
|
|
45
|
+
delete?: string;
|
|
46
|
+
/**
|
|
47
|
+
* @description Whether to also emit `ENABLE`/`FORCE ROW LEVEL SECURITY`.
|
|
48
|
+
* @default true
|
|
49
|
+
*/
|
|
50
|
+
enable?: boolean;
|
|
51
|
+
}
|
|
52
|
+
/**
|
|
53
|
+
* @description Configuration accepted by {@link RlsBootstrapService}.
|
|
54
|
+
*/
|
|
55
|
+
export interface RlsBootstrapConfig {
|
|
56
|
+
/**
|
|
57
|
+
* @description Statements to apply instead of the bundled namespace template.
|
|
58
|
+
* @summary Useful for targeted tests or partial deployments. Statements are
|
|
59
|
+
* executed sequentially and must be idempotent when applied repeatedly.
|
|
60
|
+
*/
|
|
61
|
+
statements?: string[];
|
|
62
|
+
/**
|
|
63
|
+
* @description Policy sets to generate instead of the bundled namespace policy
|
|
64
|
+
* template. Function helpers are still emitted unless `statements` is supplied.
|
|
65
|
+
*/
|
|
66
|
+
policies?: RlsPolicySet[];
|
|
67
|
+
}
|
|
68
|
+
/**
|
|
69
|
+
* @description Options for {@link runAsPrincipal}.
|
|
70
|
+
*/
|
|
71
|
+
export interface RunAsPrincipalOptions {
|
|
72
|
+
/**
|
|
73
|
+
* @description Commit the transaction when the callback succeeds.
|
|
74
|
+
* @default false — the transaction is rolled back to keep tests isolated.
|
|
75
|
+
*/
|
|
76
|
+
commit?: boolean;
|
|
77
|
+
}
|
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @module integrations/namespaces/rls/types
|
|
3
|
+
* @summary Types shared by the namespace row-level-security template and services.
|
|
4
|
+
* @description Defines the minimal query-executor contract (compatible with
|
|
5
|
+
* `pg.Client`/`pg.Pool`), the policy descriptor used to generate DDL, and the
|
|
6
|
+
* bootstrap/session configuration shapes.
|
|
7
|
+
*/
|
|
8
|
+
/**
|
|
9
|
+
* @description Minimal asynchronous SQL executor required by the RLS services.
|
|
10
|
+
* @summary Matches the shape of `pg.Client.query()` without importing `pg` at
|
|
11
|
+
* runtime. Consumers can pass a `pg.Client`, a `pg.Pool`, or any compatible
|
|
12
|
+
* wrapper (including test doubles).
|
|
13
|
+
*/
|
|
14
|
+
export interface RlsQueryExecutor {
|
|
15
|
+
query(sql: string, values?: unknown[]): Promise<{
|
|
16
|
+
rowCount?: number | null;
|
|
17
|
+
rows?: unknown[];
|
|
18
|
+
}>;
|
|
19
|
+
}
|
|
20
|
+
/**
|
|
21
|
+
* @description A set of row-level-security policies for one table.
|
|
22
|
+
* @summary Each expression is a PostgreSQL boolean expression evaluated against
|
|
23
|
+
* the row. `insert` uses `WITH CHECK`; `update` uses `USING` and `WITH CHECK`.
|
|
24
|
+
*/
|
|
25
|
+
export interface RlsPolicySet {
|
|
26
|
+
/**
|
|
27
|
+
* @description Table name (optionally schema-qualified) to protect.
|
|
28
|
+
*/
|
|
29
|
+
table: string;
|
|
30
|
+
/**
|
|
31
|
+
* @description `USING` expression for `SELECT`; omit to leave `SELECT` denied.
|
|
32
|
+
*/
|
|
33
|
+
select?: string;
|
|
34
|
+
/**
|
|
35
|
+
* @description `WITH CHECK` expression for `INSERT`; omit to deny inserts.
|
|
36
|
+
*/
|
|
37
|
+
insert?: string;
|
|
38
|
+
/**
|
|
39
|
+
* @description `USING`/`WITH CHECK` expression for `UPDATE`; omit to deny updates.
|
|
40
|
+
*/
|
|
41
|
+
update?: string;
|
|
42
|
+
/**
|
|
43
|
+
* @description `USING` expression for `DELETE`; omit to deny deletes.
|
|
44
|
+
*/
|
|
45
|
+
delete?: string;
|
|
46
|
+
/**
|
|
47
|
+
* @description Whether to also emit `ENABLE`/`FORCE ROW LEVEL SECURITY`.
|
|
48
|
+
* @default true
|
|
49
|
+
*/
|
|
50
|
+
enable?: boolean;
|
|
51
|
+
}
|
|
52
|
+
/**
|
|
53
|
+
* @description Configuration accepted by {@link RlsBootstrapService}.
|
|
54
|
+
*/
|
|
55
|
+
export interface RlsBootstrapConfig {
|
|
56
|
+
/**
|
|
57
|
+
* @description Statements to apply instead of the bundled namespace template.
|
|
58
|
+
* @summary Useful for targeted tests or partial deployments. Statements are
|
|
59
|
+
* executed sequentially and must be idempotent when applied repeatedly.
|
|
60
|
+
*/
|
|
61
|
+
statements?: string[];
|
|
62
|
+
/**
|
|
63
|
+
* @description Policy sets to generate instead of the bundled namespace policy
|
|
64
|
+
* template. Function helpers are still emitted unless `statements` is supplied.
|
|
65
|
+
*/
|
|
66
|
+
policies?: RlsPolicySet[];
|
|
67
|
+
}
|
|
68
|
+
/**
|
|
69
|
+
* @description Options for {@link runAsPrincipal}.
|
|
70
|
+
*/
|
|
71
|
+
export interface RunAsPrincipalOptions {
|
|
72
|
+
/**
|
|
73
|
+
* @description Commit the transaction when the callback succeeds.
|
|
74
|
+
* @default false — the transaction is rolled back to keep tests isolated.
|
|
75
|
+
*/
|
|
76
|
+
commit?: boolean;
|
|
77
|
+
}
|
|
@@ -0,0 +1,87 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @module integrations/namespaces/rls/session-binding
|
|
3
|
+
* @summary Maps an authenticated request context to the Postgres session settings consumed by the namespace RLS policies.
|
|
4
|
+
* @description Exposes {@link namespaceRlsSessionBinding} and the
|
|
5
|
+
* `namespaceRlsTypeORMOptions()` convenience wrapper: a fail-closed,
|
|
6
|
+
* config-only seam that turns the principal UUID carried on a decaf `Context`
|
|
7
|
+
* into a `{ [RLS_SETTINGS.Principal]: principalId }` settings map the TypeORM
|
|
8
|
+
* adapter binds transaction-locally after `BEGIN`. Nothing is bound when the
|
|
9
|
+
* context carries no UUID-shaped principal, so Postgres RLS denies
|
|
10
|
+
* protected-row access instead of silently serving an anonymous read.
|
|
11
|
+
*/
|
|
12
|
+
import type { Context } from "@decaf-ts/core";
|
|
13
|
+
/**
|
|
14
|
+
* @description Session settings map handed to the persistence adapter's session binding
|
|
15
|
+
* @summary A plain `name -> value` map of Postgres session variables. The
|
|
16
|
+
* binding produced here uses exactly one key: {@link RLS_SETTINGS.Principal}
|
|
17
|
+
* (`app.principal_id`) from `./rls.constants` - the single source of truth
|
|
18
|
+
* also interpolated by `./rls.template` into the RLS helper functions and
|
|
19
|
+
* policies - so renaming the setting in one place renames it everywhere.
|
|
20
|
+
* @typedef {Record<string, string>} NamespaceRlsSessionSettings
|
|
21
|
+
*/
|
|
22
|
+
export type NamespaceRlsSessionSettings = Record<string, string>;
|
|
23
|
+
/**
|
|
24
|
+
* @description Resolver that maps a request context to RLS session settings
|
|
25
|
+
* @summary Invoked by the persistence adapter at transaction start with the
|
|
26
|
+
* request `Context` (if any). Returns the settings to bind
|
|
27
|
+
* transaction-locally, or `undefined` when nothing should be bound. Must be
|
|
28
|
+
* synchronous and side-effect free: the consuming adapter treats a throw from
|
|
29
|
+
* the binding as "no settings" and leaves the transaction unbound (fail
|
|
30
|
+
* closed).
|
|
31
|
+
* @typedef {(context?: Context<any>) => NamespaceRlsSessionSettings | undefined} NamespaceRlsSessionBinding
|
|
32
|
+
*/
|
|
33
|
+
export type NamespaceRlsSessionBinding = (context?: Context<any>) => NamespaceRlsSessionSettings | undefined;
|
|
34
|
+
/**
|
|
35
|
+
* @description Options for the namespace RLS session binding
|
|
36
|
+
* @summary Lets hosts relocate the context keys the default binding reads and
|
|
37
|
+
* override the warning sink. The defaults read `principalId` (the resolved
|
|
38
|
+
* principal UUID carried on the request context) and `user` (the
|
|
39
|
+
* authenticated identity marker), and warn through `console.warn`.
|
|
40
|
+
* @interface NamespaceRlsSessionBindingOptions
|
|
41
|
+
* @property {string} [principalContextKey] - Context key holding the resolved principal UUID. Defaults to `principalId`.
|
|
42
|
+
* @property {string} [authenticatedContextKey] - Context key that marks the context as authenticated; consulted only to decide whether to warn. Defaults to `user`.
|
|
43
|
+
* @property {(message: string) => void} [warn] - Warning sink invoked when an authenticated context has no resolvable principal. Defaults to `console.warn`; the message never contains any setting or principal value.
|
|
44
|
+
*/
|
|
45
|
+
export interface NamespaceRlsSessionBindingOptions {
|
|
46
|
+
principalContextKey?: string;
|
|
47
|
+
authenticatedContextKey?: string;
|
|
48
|
+
warn?: (message: string) => void;
|
|
49
|
+
}
|
|
50
|
+
/**
|
|
51
|
+
* @description Builds the namespace RLS session binding for a request context
|
|
52
|
+
* @summary Returns a resolver that reads the configured principal context key
|
|
53
|
+
* (default `principalId`), trims the candidate, and - when it is a
|
|
54
|
+
* UUID-shaped string - produces
|
|
55
|
+
* `{ [RLS_SETTINGS.Principal]: principalId }` for the adapter to bind
|
|
56
|
+
* transaction-locally. Fail closed: a missing context, an absent, empty, or
|
|
57
|
+
* non-UUID candidate, or a context lookup error yields `undefined`, so
|
|
58
|
+
* nothing is bound and Postgres RLS denies protected-row access. When the
|
|
59
|
+
* context looks authenticated (the configured authenticated context key
|
|
60
|
+
* resolves) but carries no valid principal, the resolver emits a single
|
|
61
|
+
* warning through the configured `warn` sink (default `console.warn`),
|
|
62
|
+
* without logging any setting or principal value.
|
|
63
|
+
* @function namespaceRlsSessionBinding
|
|
64
|
+
* @param {NamespaceRlsSessionBindingOptions} [options] - Overrides for the context keys and the warning sink.
|
|
65
|
+
* @returns {NamespaceRlsSessionBinding} The context-to-settings resolver.
|
|
66
|
+
* @example
|
|
67
|
+
* const binding = namespaceRlsSessionBinding();
|
|
68
|
+
* const settings = binding(ctx); // { "app.principal_id": "<uuid>" } or undefined
|
|
69
|
+
*/
|
|
70
|
+
export declare function namespaceRlsSessionBinding(options?: NamespaceRlsSessionBindingOptions): NamespaceRlsSessionBinding;
|
|
71
|
+
/**
|
|
72
|
+
* @description Builds the `sessionBinding` option for the TypeORM adapter
|
|
73
|
+
* @summary Convenience wrapper that spreads the namespaced RLS binding into a
|
|
74
|
+
* TypeORM adapter configuration: merge the returned object into
|
|
75
|
+
* `TypeORMAdapterOptions` and `TypeORMContextLock` binds the resolved
|
|
76
|
+
* {@link RLS_SETTINGS.Principal} transaction-locally after `BEGIN`. This is
|
|
77
|
+
* configuration only - no subclassing or method overrides.
|
|
78
|
+
* @function namespaceRlsTypeORMOptions
|
|
79
|
+
* @param {NamespaceRlsSessionBindingOptions} [options] - Overrides forwarded to {@link namespaceRlsSessionBinding}.
|
|
80
|
+
* @returns {{ sessionBinding: NamespaceRlsSessionBinding }} An object to spread into the TypeORM adapter options.
|
|
81
|
+
* @example
|
|
82
|
+
* import { namespaceRlsTypeORMOptions } from "@decaf-ts/integrations/namespaces";
|
|
83
|
+
* const adapter = new TypeORMAdapter({ ...dataSourceOptions, ...namespaceRlsTypeORMOptions() });
|
|
84
|
+
*/
|
|
85
|
+
export declare function namespaceRlsTypeORMOptions(options?: NamespaceRlsSessionBindingOptions): {
|
|
86
|
+
sessionBinding: NamespaceRlsSessionBinding;
|
|
87
|
+
};
|
|
@@ -0,0 +1,87 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @module integrations/namespaces/rls/session-binding
|
|
3
|
+
* @summary Maps an authenticated request context to the Postgres session settings consumed by the namespace RLS policies.
|
|
4
|
+
* @description Exposes {@link namespaceRlsSessionBinding} and the
|
|
5
|
+
* `namespaceRlsTypeORMOptions()` convenience wrapper: a fail-closed,
|
|
6
|
+
* config-only seam that turns the principal UUID carried on a decaf `Context`
|
|
7
|
+
* into a `{ [RLS_SETTINGS.Principal]: principalId }` settings map the TypeORM
|
|
8
|
+
* adapter binds transaction-locally after `BEGIN`. Nothing is bound when the
|
|
9
|
+
* context carries no UUID-shaped principal, so Postgres RLS denies
|
|
10
|
+
* protected-row access instead of silently serving an anonymous read.
|
|
11
|
+
*/
|
|
12
|
+
import type { Context } from "@decaf-ts/core";
|
|
13
|
+
/**
|
|
14
|
+
* @description Session settings map handed to the persistence adapter's session binding
|
|
15
|
+
* @summary A plain `name -> value` map of Postgres session variables. The
|
|
16
|
+
* binding produced here uses exactly one key: {@link RLS_SETTINGS.Principal}
|
|
17
|
+
* (`app.principal_id`) from `./rls.constants` - the single source of truth
|
|
18
|
+
* also interpolated by `./rls.template` into the RLS helper functions and
|
|
19
|
+
* policies - so renaming the setting in one place renames it everywhere.
|
|
20
|
+
* @typedef {Record<string, string>} NamespaceRlsSessionSettings
|
|
21
|
+
*/
|
|
22
|
+
export type NamespaceRlsSessionSettings = Record<string, string>;
|
|
23
|
+
/**
|
|
24
|
+
* @description Resolver that maps a request context to RLS session settings
|
|
25
|
+
* @summary Invoked by the persistence adapter at transaction start with the
|
|
26
|
+
* request `Context` (if any). Returns the settings to bind
|
|
27
|
+
* transaction-locally, or `undefined` when nothing should be bound. Must be
|
|
28
|
+
* synchronous and side-effect free: the consuming adapter treats a throw from
|
|
29
|
+
* the binding as "no settings" and leaves the transaction unbound (fail
|
|
30
|
+
* closed).
|
|
31
|
+
* @typedef {(context?: Context<any>) => NamespaceRlsSessionSettings | undefined} NamespaceRlsSessionBinding
|
|
32
|
+
*/
|
|
33
|
+
export type NamespaceRlsSessionBinding = (context?: Context<any>) => NamespaceRlsSessionSettings | undefined;
|
|
34
|
+
/**
|
|
35
|
+
* @description Options for the namespace RLS session binding
|
|
36
|
+
* @summary Lets hosts relocate the context keys the default binding reads and
|
|
37
|
+
* override the warning sink. The defaults read `principalId` (the resolved
|
|
38
|
+
* principal UUID carried on the request context) and `user` (the
|
|
39
|
+
* authenticated identity marker), and warn through `console.warn`.
|
|
40
|
+
* @interface NamespaceRlsSessionBindingOptions
|
|
41
|
+
* @property {string} [principalContextKey] - Context key holding the resolved principal UUID. Defaults to `principalId`.
|
|
42
|
+
* @property {string} [authenticatedContextKey] - Context key that marks the context as authenticated; consulted only to decide whether to warn. Defaults to `user`.
|
|
43
|
+
* @property {(message: string) => void} [warn] - Warning sink invoked when an authenticated context has no resolvable principal. Defaults to `console.warn`; the message never contains any setting or principal value.
|
|
44
|
+
*/
|
|
45
|
+
export interface NamespaceRlsSessionBindingOptions {
|
|
46
|
+
principalContextKey?: string;
|
|
47
|
+
authenticatedContextKey?: string;
|
|
48
|
+
warn?: (message: string) => void;
|
|
49
|
+
}
|
|
50
|
+
/**
|
|
51
|
+
* @description Builds the namespace RLS session binding for a request context
|
|
52
|
+
* @summary Returns a resolver that reads the configured principal context key
|
|
53
|
+
* (default `principalId`), trims the candidate, and - when it is a
|
|
54
|
+
* UUID-shaped string - produces
|
|
55
|
+
* `{ [RLS_SETTINGS.Principal]: principalId }` for the adapter to bind
|
|
56
|
+
* transaction-locally. Fail closed: a missing context, an absent, empty, or
|
|
57
|
+
* non-UUID candidate, or a context lookup error yields `undefined`, so
|
|
58
|
+
* nothing is bound and Postgres RLS denies protected-row access. When the
|
|
59
|
+
* context looks authenticated (the configured authenticated context key
|
|
60
|
+
* resolves) but carries no valid principal, the resolver emits a single
|
|
61
|
+
* warning through the configured `warn` sink (default `console.warn`),
|
|
62
|
+
* without logging any setting or principal value.
|
|
63
|
+
* @function namespaceRlsSessionBinding
|
|
64
|
+
* @param {NamespaceRlsSessionBindingOptions} [options] - Overrides for the context keys and the warning sink.
|
|
65
|
+
* @returns {NamespaceRlsSessionBinding} The context-to-settings resolver.
|
|
66
|
+
* @example
|
|
67
|
+
* const binding = namespaceRlsSessionBinding();
|
|
68
|
+
* const settings = binding(ctx); // { "app.principal_id": "<uuid>" } or undefined
|
|
69
|
+
*/
|
|
70
|
+
export declare function namespaceRlsSessionBinding(options?: NamespaceRlsSessionBindingOptions): NamespaceRlsSessionBinding;
|
|
71
|
+
/**
|
|
72
|
+
* @description Builds the `sessionBinding` option for the TypeORM adapter
|
|
73
|
+
* @summary Convenience wrapper that spreads the namespaced RLS binding into a
|
|
74
|
+
* TypeORM adapter configuration: merge the returned object into
|
|
75
|
+
* `TypeORMAdapterOptions` and `TypeORMContextLock` binds the resolved
|
|
76
|
+
* {@link RLS_SETTINGS.Principal} transaction-locally after `BEGIN`. This is
|
|
77
|
+
* configuration only - no subclassing or method overrides.
|
|
78
|
+
* @function namespaceRlsTypeORMOptions
|
|
79
|
+
* @param {NamespaceRlsSessionBindingOptions} [options] - Overrides forwarded to {@link namespaceRlsSessionBinding}.
|
|
80
|
+
* @returns {{ sessionBinding: NamespaceRlsSessionBinding }} An object to spread into the TypeORM adapter options.
|
|
81
|
+
* @example
|
|
82
|
+
* import { namespaceRlsTypeORMOptions } from "@decaf-ts/integrations/namespaces";
|
|
83
|
+
* const adapter = new TypeORMAdapter({ ...dataSourceOptions, ...namespaceRlsTypeORMOptions() });
|
|
84
|
+
*/
|
|
85
|
+
export declare function namespaceRlsTypeORMOptions(options?: NamespaceRlsSessionBindingOptions): {
|
|
86
|
+
sessionBinding: NamespaceRlsSessionBinding;
|
|
87
|
+
};
|
|
@@ -0,0 +1,175 @@
|
|
|
1
|
+
import { Repository } from "@decaf-ts/core";
|
|
2
|
+
import { DeleteSecretOptions, ExistsSecretOptions, RotateSecretOptions, SecretName, SecretPayload, SecretProvider, SecretReference, StoreSecretOptions } from "../../secrets/core/index.d.cts";
|
|
3
|
+
import { CreateCredentialInput, CredentialSummary, RotateCredentialInput } from "../types.d.cts";
|
|
4
|
+
import { BaseModelService } from "../utils.d.cts";
|
|
5
|
+
import { Credential } from "../models/credential.model.d.cts";
|
|
6
|
+
/**
|
|
7
|
+
* @description Minimal secret-store contract required by the credential service
|
|
8
|
+
* @summary Structural subset of the secret service API used for credential
|
|
9
|
+
* values; `rotate` is optional — when absent, rotation falls back to a
|
|
10
|
+
* re-store under the same secret name.
|
|
11
|
+
*/
|
|
12
|
+
export interface CredentialSecretStore {
|
|
13
|
+
/** @description Fixed provider discriminator of the backing implementation. */
|
|
14
|
+
readonly provider: SecretProvider;
|
|
15
|
+
/** @description Stores (or overwrites) a named secret payload. */
|
|
16
|
+
store<T extends SecretPayload = SecretPayload>(name: SecretName, value: T, options?: StoreSecretOptions, ...args: any[]): Promise<SecretReference>;
|
|
17
|
+
/** @description Deletes a stored secret. */
|
|
18
|
+
delete(nameOrRef: SecretName | SecretReference, options?: DeleteSecretOptions, ...args: any[]): Promise<void>;
|
|
19
|
+
/** @description Checks whether a secret exists. */
|
|
20
|
+
exists(nameOrRef: SecretName | SecretReference, options?: ExistsSecretOptions, ...args: any[]): Promise<boolean>;
|
|
21
|
+
/** @description Optional in-place rotation of a stored secret value. */
|
|
22
|
+
rotate?(nameOrRef: SecretName | SecretReference, value: SecretPayload, options?: RotateSecretOptions, ...args: any[]): Promise<SecretReference>;
|
|
23
|
+
}
|
|
24
|
+
/**
|
|
25
|
+
* @description Injection configuration for the credential service
|
|
26
|
+
* @summary When `secretService` is omitted, the service lazily boots a
|
|
27
|
+
* `{@link ModelSecretService}` on first use; when `repository` is omitted,
|
|
28
|
+
* the base `BaseModelService` repository for `{@link Credential}` is used.
|
|
29
|
+
*/
|
|
30
|
+
export interface CredentialServiceConfig {
|
|
31
|
+
/** @description Secret store for credential values (must have `provider: "model"`). */
|
|
32
|
+
secretService?: CredentialSecretStore;
|
|
33
|
+
/** @description Repository backing the `Credential` metadata rows. */
|
|
34
|
+
repository?: Repository<Credential, any>;
|
|
35
|
+
}
|
|
36
|
+
/**
|
|
37
|
+
* @description Manages namespaced credentials and their encrypted secret values
|
|
38
|
+
* @summary Extends `BaseModelService<Credential>` to create, rotate, read,
|
|
39
|
+
* list, use-mark, and delete credentials. On create, the secret value is
|
|
40
|
+
* stored under a generated name first and the metadata row second; if the
|
|
41
|
+
* row insert fails, the stored secret is force-deleted so no orphaned secret
|
|
42
|
+
* remains. Deletion mirrors that: the row is removed, then the secret value.
|
|
43
|
+
* The secret store must resolve to `provider: "model"` — user/runtime
|
|
44
|
+
* credentials always live in the model-backed secret service.
|
|
45
|
+
* @category Namespaces
|
|
46
|
+
* @example
|
|
47
|
+
* ```ts
|
|
48
|
+
* import { CredentialService } from "@decaf-ts/integrations/namespaces";
|
|
49
|
+
*
|
|
50
|
+
* const credentials = new CredentialService();
|
|
51
|
+
* const credential = await credentials.createCredential({
|
|
52
|
+
* tenantId: "tenant-1",
|
|
53
|
+
* name: "deploy-token",
|
|
54
|
+
* credentialType: "token",
|
|
55
|
+
* secret: { value: "s3cr3t" },
|
|
56
|
+
* });
|
|
57
|
+
* await credentials.rotateCredential({
|
|
58
|
+
* credentialId: credential.id,
|
|
59
|
+
* secret: { value: "n3w-s3cr3t" },
|
|
60
|
+
* });
|
|
61
|
+
* ```
|
|
62
|
+
*/
|
|
63
|
+
export declare class CredentialService extends BaseModelService<Credential> {
|
|
64
|
+
private secretServiceInstance?;
|
|
65
|
+
/**
|
|
66
|
+
* @description Creates the credential service
|
|
67
|
+
* @param {CredentialServiceConfig} [config] - Optional secret store and repository overrides.
|
|
68
|
+
*/
|
|
69
|
+
constructor(config?: CredentialServiceConfig);
|
|
70
|
+
/**
|
|
71
|
+
* @description Resolves the model-backed secret store, booting one lazily
|
|
72
|
+
* @summary Returns the injected secret service or lazily boots a fresh
|
|
73
|
+
* `{@link ModelSecretService}`; rejects with a {@link ValidationError} when
|
|
74
|
+
* the resolved store's provider is not `"model"`.
|
|
75
|
+
* @returns {Promise<CredentialSecretStore>} The model-backed secret store.
|
|
76
|
+
* @throws {ValidationError} When the injected store is not model-backed.
|
|
77
|
+
*/
|
|
78
|
+
protected secretService(): Promise<CredentialSecretStore>;
|
|
79
|
+
/**
|
|
80
|
+
* @description Creates a credential row and stores its secret value
|
|
81
|
+
* @summary Validates the name (trimmed, ≤255 chars, `[A-Za-z0-9][A-Za-z0-9._-]*`),
|
|
82
|
+
* stores the secret under a generated `credential-<uuid>` name scoped to the
|
|
83
|
+
* supplied tenant/org-unit/owner, then inserts the metadata row. If the row
|
|
84
|
+
* insert fails, the just-stored secret is force-deleted before rethrowing.
|
|
85
|
+
* @param {CreateCredentialInput} input - Credential definition (name, type, secret value, scoping, metadata).
|
|
86
|
+
* @param {any[]} args - Optional trailing decaf `Context` forwarded to the store and repository.
|
|
87
|
+
* @returns {Promise<Credential>} The persisted credential row.
|
|
88
|
+
* @throws {ValidationError} When the name is invalid.
|
|
89
|
+
*/
|
|
90
|
+
createCredential(input: CreateCredentialInput, ...args: any[]): Promise<Credential>;
|
|
91
|
+
/**
|
|
92
|
+
* @description Replaces a credential's secret value
|
|
93
|
+
* @summary Uses the backing store's `rotate` when available; otherwise
|
|
94
|
+
* re-stores the value under the existing secret name with the supplied
|
|
95
|
+
* version and the credential's tenant/org-unit/owner scoping. The
|
|
96
|
+
* credential row's `updatedAt` is refreshed afterwards.
|
|
97
|
+
* @param {RotateCredentialInput} input - Credential id, new secret value, and optional version.
|
|
98
|
+
* @param {any[]} args - Optional trailing decaf `Context` forwarded to the store and repository.
|
|
99
|
+
* @returns {Promise<Credential>} The updated credential row.
|
|
100
|
+
*/
|
|
101
|
+
rotateCredential(input: RotateCredentialInput, ...args: any[]): Promise<Credential>;
|
|
102
|
+
/**
|
|
103
|
+
* @description Reads a credential row by id
|
|
104
|
+
* @summary Runs the read inside the explicit `withinTransaction` boundary
|
|
105
|
+
* instead of `@transactional()`: a missing trailing `Context` is synthesized
|
|
106
|
+
* via `logCtx(args, ..., true)`, then the helper reuses an in-flight
|
|
107
|
+
* `ContextLock` or opens a new one (`resolveTransactionLock` + `begin`),
|
|
108
|
+
* rolling back on error and committing when this is the outermost frame. On
|
|
109
|
+
* a TypeORM-backed repository this binds the context's principal to
|
|
110
|
+
* `app.principal_id` for the duration of the transaction so namespace RLS
|
|
111
|
+
* applies to the read.
|
|
112
|
+
* @param {string} credentialId - The credential id.
|
|
113
|
+
* @param {any[]} args - Optional trailing decaf `Context` forwarded to the repository.
|
|
114
|
+
* @returns {Promise<Credential>} The credential row.
|
|
115
|
+
*/
|
|
116
|
+
getCredential(credentialId: string, ...args: any[]): Promise<Credential>;
|
|
117
|
+
/**
|
|
118
|
+
* @description Lists all credentials as summaries (no secret material)
|
|
119
|
+
* @param {any[]} args - Optional trailing decaf `Context` forwarded to the repository.
|
|
120
|
+
* @returns {Promise<CredentialSummary[]>} Summary records for every credential.
|
|
121
|
+
*/
|
|
122
|
+
listCredentials(...args: any[]): Promise<CredentialSummary[]>;
|
|
123
|
+
/**
|
|
124
|
+
* @description Stamps a credential's `lastUsedAt` timestamp
|
|
125
|
+
* @summary Runs the read and the update inside one explicit
|
|
126
|
+
* `withinTransaction` boundary instead of `@transactional()`: a missing
|
|
127
|
+
* trailing `Context` is synthesized via `logCtx(args, ..., true)`, then the
|
|
128
|
+
* helper reuses an in-flight `ContextLock` or opens a new one
|
|
129
|
+
* (`resolveTransactionLock` + `begin`), rolling back on error and committing
|
|
130
|
+
* when this is the outermost frame. On a TypeORM-backed repository this
|
|
131
|
+
* binds the context's principal to `app.principal_id` for the duration of
|
|
132
|
+
* the transaction so namespace RLS applies to both statements.
|
|
133
|
+
* @param {string} credentialId - The credential id.
|
|
134
|
+
* @param {any[]} args - Optional trailing decaf `Context` forwarded to the repository.
|
|
135
|
+
* @returns {Promise<Credential>} The updated credential row.
|
|
136
|
+
*/
|
|
137
|
+
markCredentialUsed(credentialId: string, ...args: any[]): Promise<Credential>;
|
|
138
|
+
/**
|
|
139
|
+
* @description Deletes a credential row and its stored secret value
|
|
140
|
+
* @summary Removes the metadata row first, then force-deletes the
|
|
141
|
+
* referenced secret from the backing store.
|
|
142
|
+
* @param {string} credentialId - The credential id.
|
|
143
|
+
* @param {any[]} args - Optional trailing decaf `Context` forwarded to the repository and store.
|
|
144
|
+
* @returns {Promise<void>} Resolves once the row and secret are removed.
|
|
145
|
+
*/
|
|
146
|
+
deleteCredential(credentialId: string, ...args: any[]): Promise<void>;
|
|
147
|
+
/**
|
|
148
|
+
* @description Runs an operation inside an explicit adapter transaction boundary
|
|
149
|
+
* @summary Mirrors core's `@transactional()` proxy without the decorator:
|
|
150
|
+
* reuses the `ContextLock` already cached on the context (`transactionLock`)
|
|
151
|
+
* when a transaction is in flight, otherwise resolves a fresh lock via
|
|
152
|
+
* `resolveTransactionLock` and `begin`s it, caching it on the context so
|
|
153
|
+
* nested frames share it. Depth is tracked so nested calls only decrement;
|
|
154
|
+
* the outermost frame commits. On error the frame rolls back — unless an
|
|
155
|
+
* inner frame already ended the transaction — and rethrows the original
|
|
156
|
+
* error. When the repository exposes no adapter `transactionLock` (e.g.
|
|
157
|
+
* non-transactional adapters or repository doubles), the operation runs
|
|
158
|
+
* directly with no transaction. If `ctx` is `undefined`, a standalone
|
|
159
|
+
* context is synthesized via `this.context`.
|
|
160
|
+
* @template R - The operation's result type.
|
|
161
|
+
* @param {Context<any> | undefined} ctx - The caller's decaf `Context`, if one was resolved or synthesized.
|
|
162
|
+
* @param {() => Promise<R>} operation - The repository work to run inside the transaction.
|
|
163
|
+
* @returns {Promise<R>} The operation's result, committed when outermost.
|
|
164
|
+
* @throws {InternalError} When the outermost commit fails.
|
|
165
|
+
*/
|
|
166
|
+
private withinTransaction;
|
|
167
|
+
/**
|
|
168
|
+
* @description Maps a credential row to its API summary shape
|
|
169
|
+
* @summary Resolves tenant/org-unit/owner relations to their ids and strips
|
|
170
|
+
* all secret material (the secret value is never exposed).
|
|
171
|
+
* @param {Credential} credential - The credential row.
|
|
172
|
+
* @returns {CredentialSummary} The summary record.
|
|
173
|
+
*/
|
|
174
|
+
private toSummary;
|
|
175
|
+
}
|