@lssm/lib.contracts-integrations 9.0.1
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/LICENSE +21 -0
- package/README.md +536 -0
- package/dist/contracts-integrations.feature.d.ts +1 -0
- package/dist/contracts-integrations.feature.js +2 -0
- package/dist/index.d.ts +25 -0
- package/dist/index.js +22 -0
- package/dist/integrations/advertising/index.d.ts +4 -0
- package/dist/integrations/advertising/index.js +2 -0
- package/dist/integrations/advertising/recipe-schema.d.ts +114 -0
- package/dist/integrations/advertising/recipe-schema.js +2 -0
- package/dist/integrations/advertising/recipe.d.ts +53 -0
- package/dist/integrations/advertising/recipe.js +1 -0
- package/dist/integrations/advertising/specs.d.ts +5 -0
- package/dist/integrations/advertising/specs.js +2 -0
- package/dist/integrations/advertising/types.d.ts +97 -0
- package/dist/integrations/advertising/types.js +2 -0
- package/dist/integrations/attio/events.d.ts +4 -0
- package/dist/integrations/attio/events.js +2 -0
- package/dist/integrations/attio/events.test.d.ts +1 -0
- package/dist/integrations/attio/index.d.ts +2 -0
- package/dist/integrations/attio/index.js +2 -0
- package/dist/integrations/attio/operations.d.ts +4 -0
- package/dist/integrations/attio/operations.js +2 -0
- package/dist/integrations/attio/operations.test.d.ts +1 -0
- package/dist/integrations/auth-helpers.d.ts +58 -0
- package/dist/integrations/auth-helpers.js +2 -0
- package/dist/integrations/auth-helpers.test.d.ts +1 -0
- package/dist/integrations/auth.d.ts +96 -0
- package/dist/integrations/auth.js +2 -0
- package/dist/integrations/auth.test.d.ts +1 -0
- package/dist/integrations/binding.d.ts +1 -0
- package/dist/integrations/binding.js +1 -0
- package/dist/integrations/byok.d.ts +75 -0
- package/dist/integrations/byok.js +2 -0
- package/dist/integrations/byok.test.d.ts +1 -0
- package/dist/integrations/catalog.d.ts +84 -0
- package/dist/integrations/catalog.js +2 -0
- package/dist/integrations/catalog.test.d.ts +1 -0
- package/dist/integrations/clay/events.d.ts +93 -0
- package/dist/integrations/clay/events.js +2 -0
- package/dist/integrations/clay/events.test.d.ts +1 -0
- package/dist/integrations/clay/index.d.ts +2 -0
- package/dist/integrations/clay/index.js +2 -0
- package/dist/integrations/clay/operations.d.ts +4 -0
- package/dist/integrations/clay/operations.js +2 -0
- package/dist/integrations/clay/operations.test.d.ts +1 -0
- package/dist/integrations/connection.d.ts +68 -0
- package/dist/integrations/connection.js +1 -0
- package/dist/integrations/credentials.d.ts +56 -0
- package/dist/integrations/credentials.js +2 -0
- package/dist/integrations/credentials.test.d.ts +1 -0
- package/dist/integrations/deployment-topology-model.d.ts +75 -0
- package/dist/integrations/deployment-topology-model.js +2 -0
- package/dist/integrations/deployment-topology-receipt.d.ts +8 -0
- package/dist/integrations/deployment-topology-receipt.js +2 -0
- package/dist/integrations/deployment-topology-validation.d.ts +5 -0
- package/dist/integrations/deployment-topology-validation.js +2 -0
- package/dist/integrations/deployment-topology.d.ts +3 -0
- package/dist/integrations/deployment-topology.js +2 -0
- package/dist/integrations/deployment-topology.test.d.ts +1 -0
- package/dist/integrations/docs/integrations.docblock.d.ts +2 -0
- package/dist/integrations/docs/integrations.docblock.js +101 -0
- package/dist/integrations/email-operations.d.ts +152 -0
- package/dist/integrations/email-operations.js +2 -0
- package/dist/integrations/gtm/capability-ledger.d.ts +48 -0
- package/dist/integrations/gtm/capability-ledger.fixture-helpers.d.ts +9 -0
- package/dist/integrations/gtm/capability-ledger.fixture-helpers.js +2 -0
- package/dist/integrations/gtm/capability-ledger.fixtures.d.ts +5 -0
- package/dist/integrations/gtm/capability-ledger.fixtures.js +2 -0
- package/dist/integrations/gtm/capability-ledger.js +2 -0
- package/dist/integrations/gtm/capability-ledger.test.d.ts +1 -0
- package/dist/integrations/gtm/hosted-mcp.d.ts +12 -0
- package/dist/integrations/gtm/hosted-mcp.js +2 -0
- package/dist/integrations/gtm/index.d.ts +5 -0
- package/dist/integrations/gtm/index.js +2 -0
- package/dist/integrations/gtm/inventory/attio.d.ts +2 -0
- package/dist/integrations/gtm/inventory/attio.js +2 -0
- package/dist/integrations/gtm/inventory/clay.d.ts +2 -0
- package/dist/integrations/gtm/inventory/clay.js +2 -0
- package/dist/integrations/gtm/inventory/fullenrich.d.ts +2 -0
- package/dist/integrations/gtm/inventory/fullenrich.js +2 -0
- package/dist/integrations/gtm/inventory/index.d.ts +4 -0
- package/dist/integrations/gtm/inventory/index.js +2 -0
- package/dist/integrations/gtm/inventory/inventory.test.d.ts +1 -0
- package/dist/integrations/gtm/inventory/types.d.ts +26 -0
- package/dist/integrations/gtm/inventory/types.js +1 -0
- package/dist/integrations/gtm/preflight.d.ts +20 -0
- package/dist/integrations/gtm/preflight.js +2 -0
- package/dist/integrations/gtm/preflight.test.d.ts +1 -0
- package/dist/integrations/gtm/schemas.d.ts +291 -0
- package/dist/integrations/gtm/schemas.js +2 -0
- package/dist/integrations/gtm/webhook-ingress.d.ts +37 -0
- package/dist/integrations/gtm/webhook-ingress.js +2 -0
- package/dist/integrations/gtm/webhook-ingress.test.d.ts +1 -0
- package/dist/integrations/health/contracts/activities.d.ts +162 -0
- package/dist/integrations/health/contracts/activities.js +2 -0
- package/dist/integrations/health/contracts/biometrics.d.ts +156 -0
- package/dist/integrations/health/contracts/biometrics.js +2 -0
- package/dist/integrations/health/contracts/contracts.test.d.ts +1 -0
- package/dist/integrations/health/contracts/index.d.ts +10 -0
- package/dist/integrations/health/contracts/index.js +2 -0
- package/dist/integrations/health/contracts/nutrition.d.ts +162 -0
- package/dist/integrations/health/contracts/nutrition.js +2 -0
- package/dist/integrations/health/contracts/sleep.d.ts +166 -0
- package/dist/integrations/health/contracts/sleep.js +2 -0
- package/dist/integrations/health/contracts/webhooks.d.ts +73 -0
- package/dist/integrations/health/contracts/webhooks.js +2 -0
- package/dist/integrations/health/contracts/workouts.d.ts +166 -0
- package/dist/integrations/health/contracts/workouts.js +2 -0
- package/dist/integrations/health/guards.d.ts +8 -0
- package/dist/integrations/health/guards.js +2 -0
- package/dist/integrations/health/guards.test.d.ts +1 -0
- package/dist/integrations/health/health.capability.d.ts +1 -0
- package/dist/integrations/health/health.capability.js +2 -0
- package/dist/integrations/health/health.feature.d.ts +1 -0
- package/dist/integrations/health/health.feature.js +2 -0
- package/dist/integrations/health/models.d.ts +361 -0
- package/dist/integrations/health/models.js +2 -0
- package/dist/integrations/health/telemetry.d.ts +17 -0
- package/dist/integrations/health/telemetry.js +2 -0
- package/dist/integrations/health/telemetry.test.d.ts +1 -0
- package/dist/integrations/health.d.ts +17 -0
- package/dist/integrations/health.js +2 -0
- package/dist/integrations/health.test.d.ts +1 -0
- package/dist/integrations/index.d.ts +30 -0
- package/dist/integrations/index.js +22 -0
- package/dist/integrations/integrations.capability.d.ts +1 -0
- package/dist/integrations/integrations.capability.js +2 -0
- package/dist/integrations/integrations.feature.d.ts +5 -0
- package/dist/integrations/integrations.feature.js +2 -0
- package/dist/integrations/linkedin/advertising.d.ts +52 -0
- package/dist/integrations/linkedin/advertising.js +1 -0
- package/dist/integrations/linkedin/analytics.d.ts +25 -0
- package/dist/integrations/linkedin/analytics.js +1 -0
- package/dist/integrations/linkedin/capabilities.d.ts +54 -0
- package/dist/integrations/linkedin/capabilities.js +2 -0
- package/dist/integrations/linkedin/capability-evaluation.test.d.ts +1 -0
- package/dist/integrations/linkedin/community.d.ts +77 -0
- package/dist/integrations/linkedin/community.js +1 -0
- package/dist/integrations/linkedin/credentials.d.ts +17 -0
- package/dist/integrations/linkedin/credentials.js +2 -0
- package/dist/integrations/linkedin/host.d.ts +53 -0
- package/dist/integrations/linkedin/host.js +2 -0
- package/dist/integrations/linkedin/host.test.d.ts +1 -0
- package/dist/integrations/linkedin/identity.d.ts +29 -0
- package/dist/integrations/linkedin/identity.js +1 -0
- package/dist/integrations/linkedin/index.d.ts +16 -0
- package/dist/integrations/linkedin/index.js +2 -0
- package/dist/integrations/linkedin/installation.d.ts +54 -0
- package/dist/integrations/linkedin/installation.js +2 -0
- package/dist/integrations/linkedin/linkedin.test.d.ts +1 -0
- package/dist/integrations/linkedin/media-job-state.d.ts +70 -0
- package/dist/integrations/linkedin/media-job-state.js +2 -0
- package/dist/integrations/linkedin/media-job.d.ts +88 -0
- package/dist/integrations/linkedin/media-job.js +2 -0
- package/dist/integrations/linkedin/media-session.d.ts +37 -0
- package/dist/integrations/linkedin/media-session.js +2 -0
- package/dist/integrations/linkedin/media.d.ts +51 -0
- package/dist/integrations/linkedin/media.js +2 -0
- package/dist/integrations/linkedin/messaging.d.ts +70 -0
- package/dist/integrations/linkedin/messaging.js +1 -0
- package/dist/integrations/linkedin/models.d.ts +42 -0
- package/dist/integrations/linkedin/models.js +1 -0
- package/dist/integrations/linkedin/native-publication.d.ts +43 -0
- package/dist/integrations/linkedin/native-publication.js +2 -0
- package/dist/integrations/linkedin/native-withdrawal.d.ts +12 -0
- package/dist/integrations/linkedin/native-withdrawal.js +2 -0
- package/dist/integrations/linkedin/operation-catalog.d.ts +314 -0
- package/dist/integrations/linkedin/operation-catalog.js +2 -0
- package/dist/integrations/linkedin/operations.d.ts +66 -0
- package/dist/integrations/linkedin/operations.js +2 -0
- package/dist/integrations/linkedin/provider.d.ts +72 -0
- package/dist/integrations/linkedin/provider.js +2 -0
- package/dist/integrations/linkedin/sales.d.ts +57 -0
- package/dist/integrations/linkedin/sales.js +1 -0
- package/dist/integrations/linkedin/sync.d.ts +41 -0
- package/dist/integrations/linkedin/sync.js +1 -0
- package/dist/integrations/linkedin/webhooks.d.ts +38 -0
- package/dist/integrations/linkedin/webhooks.js +1 -0
- package/dist/integrations/meeting-recorder/contracts/index.d.ts +7 -0
- package/dist/integrations/meeting-recorder/contracts/index.js +2 -0
- package/dist/integrations/meeting-recorder/contracts/meetings.d.ts +451 -0
- package/dist/integrations/meeting-recorder/contracts/meetings.js +2 -0
- package/dist/integrations/meeting-recorder/contracts/transcripts.d.ts +166 -0
- package/dist/integrations/meeting-recorder/contracts/transcripts.js +2 -0
- package/dist/integrations/meeting-recorder/contracts/webhooks.d.ts +85 -0
- package/dist/integrations/meeting-recorder/contracts/webhooks.js +2 -0
- package/dist/integrations/meeting-recorder/meeting-recorder.capability.d.ts +1 -0
- package/dist/integrations/meeting-recorder/meeting-recorder.capability.js +2 -0
- package/dist/integrations/meeting-recorder/meeting-recorder.feature.d.ts +5 -0
- package/dist/integrations/meeting-recorder/meeting-recorder.feature.js +2 -0
- package/dist/integrations/meeting-recorder/models.d.ts +402 -0
- package/dist/integrations/meeting-recorder/models.js +2 -0
- package/dist/integrations/meeting-recorder/telemetry.d.ts +13 -0
- package/dist/integrations/meeting-recorder/telemetry.js +2 -0
- package/dist/integrations/openbanking/contracts/accounts.d.ts +282 -0
- package/dist/integrations/openbanking/contracts/accounts.js +2 -0
- package/dist/integrations/openbanking/contracts/balances.d.ts +158 -0
- package/dist/integrations/openbanking/contracts/balances.js +2 -0
- package/dist/integrations/openbanking/contracts/index.d.ts +7 -0
- package/dist/integrations/openbanking/contracts/index.js +2 -0
- package/dist/integrations/openbanking/contracts/transactions.d.ts +206 -0
- package/dist/integrations/openbanking/contracts/transactions.js +2 -0
- package/dist/integrations/openbanking/guards.d.ts +8 -0
- package/dist/integrations/openbanking/guards.js +2 -0
- package/dist/integrations/openbanking/guards.test.d.ts +1 -0
- package/dist/integrations/openbanking/models.d.ts +223 -0
- package/dist/integrations/openbanking/models.js +2 -0
- package/dist/integrations/openbanking/openbanking.capability.d.ts +1 -0
- package/dist/integrations/openbanking/openbanking.capability.js +2 -0
- package/dist/integrations/openbanking/openbanking.feature.d.ts +5 -0
- package/dist/integrations/openbanking/openbanking.feature.js +2 -0
- package/dist/integrations/openbanking/telemetry.d.ts +12 -0
- package/dist/integrations/openbanking/telemetry.js +2 -0
- package/dist/integrations/operations.d.ts +430 -0
- package/dist/integrations/operations.js +22 -0
- package/dist/integrations/operations.test.d.ts +1 -0
- package/dist/integrations/providers/analytics-reader.d.ts +103 -0
- package/dist/integrations/providers/analytics-reader.js +1 -0
- package/dist/integrations/providers/analytics-writer.d.ts +6 -0
- package/dist/integrations/providers/analytics-writer.js +1 -0
- package/dist/integrations/providers/analytics.d.ts +47 -0
- package/dist/integrations/providers/analytics.js +1 -0
- package/dist/integrations/providers/apify.d.ts +3 -0
- package/dist/integrations/providers/apify.js +2 -0
- package/dist/integrations/providers/apple-health.d.ts +3 -0
- package/dist/integrations/providers/apple-health.js +2 -0
- package/dist/integrations/providers/async-media-record.d.ts +26 -0
- package/dist/integrations/providers/async-media-record.js +2 -0
- package/dist/integrations/providers/async-media.d.ts +112 -0
- package/dist/integrations/providers/async-media.js +1 -0
- package/dist/integrations/providers/attio.d.ts +4 -0
- package/dist/integrations/providers/attio.js +2 -0
- package/dist/integrations/providers/bright-data.d.ts +3 -0
- package/dist/integrations/providers/bright-data.js +2 -0
- package/dist/integrations/providers/browserbase.d.ts +3 -0
- package/dist/integrations/providers/browserbase.js +2 -0
- package/dist/integrations/providers/calendar.d.js +1 -0
- package/dist/integrations/providers/calendar.d.ts +81 -0
- package/dist/integrations/providers/calendar.js +1 -0
- package/dist/integrations/providers/catalog.d.ts +2 -0
- package/dist/integrations/providers/catalog.js +2 -0
- package/dist/integrations/providers/clay.d.ts +4 -0
- package/dist/integrations/providers/clay.js +2 -0
- package/dist/integrations/providers/communication-channel.d.ts +45 -0
- package/dist/integrations/providers/communication-channel.js +2 -0
- package/dist/integrations/providers/communication-channel.test.d.ts +1 -0
- package/dist/integrations/providers/composio.d.ts +3 -0
- package/dist/integrations/providers/composio.js +2 -0
- package/dist/integrations/providers/crm-external-profiles.test.d.ts +1 -0
- package/dist/integrations/providers/crm-fixture-core.d.ts +20 -0
- package/dist/integrations/providers/crm-fixture-core.js +2 -0
- package/dist/integrations/providers/crm-hubspot-fixture.d.ts +14 -0
- package/dist/integrations/providers/crm-hubspot-fixture.js +2 -0
- package/dist/integrations/providers/crm-salesforce-fixture.d.ts +17 -0
- package/dist/integrations/providers/crm-salesforce-fixture.js +2 -0
- package/dist/integrations/providers/crm-write-proposal-types.d.ts +83 -0
- package/dist/integrations/providers/crm-write-proposal-types.js +2 -0
- package/dist/integrations/providers/crm-write-proposal.d.ts +7 -0
- package/dist/integrations/providers/crm-write-proposal.js +2 -0
- package/dist/integrations/providers/crm-write-proposal.test.d.ts +1 -0
- package/dist/integrations/providers/crm.d.ts +94 -0
- package/dist/integrations/providers/crm.js +2 -0
- package/dist/integrations/providers/crm.test.d.ts +1 -0
- package/dist/integrations/providers/database.d.ts +12 -0
- package/dist/integrations/providers/database.js +1 -0
- package/dist/integrations/providers/deepgram.d.ts +3 -0
- package/dist/integrations/providers/deepgram.js +2 -0
- package/dist/integrations/providers/direct-fetch.d.ts +3 -0
- package/dist/integrations/providers/direct-fetch.js +2 -0
- package/dist/integrations/providers/eightsleep.d.ts +3 -0
- package/dist/integrations/providers/eightsleep.js +2 -0
- package/dist/integrations/providers/elevenlabs.d.ts +3 -0
- package/dist/integrations/providers/elevenlabs.js +2 -0
- package/dist/integrations/providers/email-delivery-events.d.ts +22 -0
- package/dist/integrations/providers/email-delivery-events.js +1 -0
- package/dist/integrations/providers/email.d.ts +187 -0
- package/dist/integrations/providers/email.js +1 -0
- package/dist/integrations/providers/embedding.d.ts +52 -0
- package/dist/integrations/providers/embedding.js +1 -0
- package/dist/integrations/providers/embedding.test.d.ts +1 -0
- package/dist/integrations/providers/fal-image.d.ts +3 -0
- package/dist/integrations/providers/fal-image.js +2 -0
- package/dist/integrations/providers/fal.d.ts +3 -0
- package/dist/integrations/providers/fal.js +2 -0
- package/dist/integrations/providers/fathom.d.ts +3 -0
- package/dist/integrations/providers/fathom.js +2 -0
- package/dist/integrations/providers/firecrawl.d.ts +3 -0
- package/dist/integrations/providers/firecrawl.js +2 -0
- package/dist/integrations/providers/fireflies.d.ts +3 -0
- package/dist/integrations/providers/fireflies.js +2 -0
- package/dist/integrations/providers/fitbit.d.ts +3 -0
- package/dist/integrations/providers/fitbit.js +2 -0
- package/dist/integrations/providers/fullenrich.d.ts +3 -0
- package/dist/integrations/providers/fullenrich.js +2 -0
- package/dist/integrations/providers/garmin.d.ts +3 -0
- package/dist/integrations/providers/garmin.js +2 -0
- package/dist/integrations/providers/gcs-storage.d.ts +3 -0
- package/dist/integrations/providers/gcs-storage.js +2 -0
- package/dist/integrations/providers/gmail.d.ts +3 -0
- package/dist/integrations/providers/gmail.js +2 -0
- package/dist/integrations/providers/google-calendar.d.ts +3 -0
- package/dist/integrations/providers/google-calendar.js +2 -0
- package/dist/integrations/providers/google-drive.d.ts +54 -0
- package/dist/integrations/providers/google-drive.js +2 -0
- package/dist/integrations/providers/gradium.d.ts +3 -0
- package/dist/integrations/providers/gradium.js +2 -0
- package/dist/integrations/providers/granola.d.ts +3 -0
- package/dist/integrations/providers/granola.js +2 -0
- package/dist/integrations/providers/gtm-providers.test.d.ts +1 -0
- package/dist/integrations/providers/health-provider-shared.d.ts +28 -0
- package/dist/integrations/providers/health-provider-shared.js +2 -0
- package/dist/integrations/providers/health-providers.test.d.ts +1 -0
- package/dist/integrations/providers/health.d.ts +186 -0
- package/dist/integrations/providers/health.js +1 -0
- package/dist/integrations/providers/higgsfield.d.ts +3 -0
- package/dist/integrations/providers/higgsfield.js +2 -0
- package/dist/integrations/providers/image.d.ts +85 -0
- package/dist/integrations/providers/image.js +2 -0
- package/dist/integrations/providers/index.d.ts +101 -0
- package/dist/integrations/providers/index.js +2 -0
- package/dist/integrations/providers/jira.d.ts +3 -0
- package/dist/integrations/providers/jira.js +2 -0
- package/dist/integrations/providers/linear.d.ts +3 -0
- package/dist/integrations/providers/linear.js +2 -0
- package/dist/integrations/providers/linkedin-community.d.ts +3 -0
- package/dist/integrations/providers/linkedin-community.js +2 -0
- package/dist/integrations/providers/linkedin-marketing.d.ts +3 -0
- package/dist/integrations/providers/linkedin-marketing.js +2 -0
- package/dist/integrations/providers/linkedin-member.d.ts +3 -0
- package/dist/integrations/providers/linkedin-member.js +2 -0
- package/dist/integrations/providers/linkedin-messaging.d.ts +3 -0
- package/dist/integrations/providers/linkedin-messaging.js +2 -0
- package/dist/integrations/providers/linkedin-providers.test.d.ts +1 -0
- package/dist/integrations/providers/linkedin-sales-navigator.d.ts +3 -0
- package/dist/integrations/providers/linkedin-sales-navigator.js +2 -0
- package/dist/integrations/providers/linkedin-spec-shared.d.ts +16 -0
- package/dist/integrations/providers/linkedin-spec-shared.js +2 -0
- package/dist/integrations/providers/linkup.d.ts +3 -0
- package/dist/integrations/providers/linkup.js +2 -0
- package/dist/integrations/providers/llm.d.ts +79 -0
- package/dist/integrations/providers/llm.js +1 -0
- package/dist/integrations/providers/massive.d.ts +5 -0
- package/dist/integrations/providers/massive.js +2 -0
- package/dist/integrations/providers/meeting-capture.d.ts +56 -0
- package/dist/integrations/providers/meeting-capture.js +1 -0
- package/dist/integrations/providers/meeting-recorder.d.ts +129 -0
- package/dist/integrations/providers/meeting-recorder.js +1 -0
- package/dist/integrations/providers/messaging-github.d.ts +9 -0
- package/dist/integrations/providers/messaging-github.js +2 -0
- package/dist/integrations/providers/messaging-matrix.d.ts +3 -0
- package/dist/integrations/providers/messaging-matrix.js +2 -0
- package/dist/integrations/providers/messaging-slack.d.ts +9 -0
- package/dist/integrations/providers/messaging-slack.js +2 -0
- package/dist/integrations/providers/messaging-teams.d.ts +10 -0
- package/dist/integrations/providers/messaging-teams.js +2 -0
- package/dist/integrations/providers/messaging-telegram.d.ts +3 -0
- package/dist/integrations/providers/messaging-telegram.js +2 -0
- package/dist/integrations/providers/messaging-whatsapp-meta.d.ts +3 -0
- package/dist/integrations/providers/messaging-whatsapp-meta.js +2 -0
- package/dist/integrations/providers/messaging-whatsapp-twilio.d.ts +3 -0
- package/dist/integrations/providers/messaging-whatsapp-twilio.js +2 -0
- package/dist/integrations/providers/messaging.d.ts +30 -0
- package/dist/integrations/providers/messaging.js +1 -0
- package/dist/integrations/providers/mistral-conversational.d.ts +3 -0
- package/dist/integrations/providers/mistral-conversational.js +2 -0
- package/dist/integrations/providers/mistral-stt.d.ts +3 -0
- package/dist/integrations/providers/mistral-stt.js +2 -0
- package/dist/integrations/providers/mistral.d.ts +3 -0
- package/dist/integrations/providers/mistral.js +2 -0
- package/dist/integrations/providers/mode-exemptions.d.ts +10 -0
- package/dist/integrations/providers/mode-exemptions.js +2 -0
- package/dist/integrations/providers/myfitnesspal.d.ts +3 -0
- package/dist/integrations/providers/myfitnesspal.js +2 -0
- package/dist/integrations/providers/notion.d.ts +9 -0
- package/dist/integrations/providers/notion.js +2 -0
- package/dist/integrations/providers/openai-image.d.ts +3 -0
- package/dist/integrations/providers/openai-image.js +2 -0
- package/dist/integrations/providers/openai-realtime.d.ts +3 -0
- package/dist/integrations/providers/openai-realtime.js +2 -0
- package/dist/integrations/providers/openbanking.d.ts +125 -0
- package/dist/integrations/providers/openbanking.js +1 -0
- package/dist/integrations/providers/openwearables.d.ts +3 -0
- package/dist/integrations/providers/openwearables.js +2 -0
- package/dist/integrations/providers/oura.d.ts +3 -0
- package/dist/integrations/providers/oura.js +2 -0
- package/dist/integrations/providers/oxylabs.d.ts +3 -0
- package/dist/integrations/providers/oxylabs.js +2 -0
- package/dist/integrations/providers/payments/capabilities-billing.d.ts +67 -0
- package/dist/integrations/providers/payments/capabilities-billing.js +1 -0
- package/dist/integrations/providers/payments/capabilities-payments.d.ts +57 -0
- package/dist/integrations/providers/payments/capabilities-payments.js +1 -0
- package/dist/integrations/providers/payments/capabilities.d.ts +2 -0
- package/dist/integrations/providers/payments/capabilities.js +1 -0
- package/dist/integrations/providers/payments/context.d.ts +75 -0
- package/dist/integrations/providers/payments/context.js +2 -0
- package/dist/integrations/providers/payments/provider.d.ts +22 -0
- package/dist/integrations/providers/payments/provider.js +1 -0
- package/dist/integrations/providers/payments/resources.d.ts +97 -0
- package/dist/integrations/providers/payments/resources.js +1 -0
- package/dist/integrations/providers/payments/shared.d.ts +61 -0
- package/dist/integrations/providers/payments/shared.js +2 -0
- package/dist/integrations/providers/payments.d.ts +5 -0
- package/dist/integrations/providers/payments.js +2 -0
- package/dist/integrations/providers/payments.test.d.ts +1 -0
- package/dist/integrations/providers/paypal.d.ts +3 -0
- package/dist/integrations/providers/paypal.js +2 -0
- package/dist/integrations/providers/peloton.d.ts +3 -0
- package/dist/integrations/providers/peloton.js +2 -0
- package/dist/integrations/providers/posthog-llm-telemetry.d.ts +51 -0
- package/dist/integrations/providers/posthog-llm-telemetry.js +2 -0
- package/dist/integrations/providers/posthog.d.ts +3 -0
- package/dist/integrations/providers/posthog.js +2 -0
- package/dist/integrations/providers/postmark.d.ts +3 -0
- package/dist/integrations/providers/postmark.js +2 -0
- package/dist/integrations/providers/powens.d.ts +3 -0
- package/dist/integrations/providers/powens.js +2 -0
- package/dist/integrations/providers/project-management.d.ts +196 -0
- package/dist/integrations/providers/project-management.js +2 -0
- package/dist/integrations/providers/provider-delta.d.ts +45 -0
- package/dist/integrations/providers/provider-delta.js +2 -0
- package/dist/integrations/providers/provider-delta.test.d.ts +1 -0
- package/dist/integrations/providers/provider-modes-coverage.test.d.ts +1 -0
- package/dist/integrations/providers/providers.test.d.ts +1 -0
- package/dist/integrations/providers/qdrant.d.ts +3 -0
- package/dist/integrations/providers/qdrant.js +2 -0
- package/dist/integrations/providers/registry.d.ts +24 -0
- package/dist/integrations/providers/registry.js +2 -0
- package/dist/integrations/providers/reworkd.d.ts +3 -0
- package/dist/integrations/providers/reworkd.js +2 -0
- package/dist/integrations/providers/serper.d.ts +3 -0
- package/dist/integrations/providers/serper.js +2 -0
- package/dist/integrations/providers/sillage.d.ts +4 -0
- package/dist/integrations/providers/sillage.js +2 -0
- package/dist/integrations/providers/slng.d.ts +3 -0
- package/dist/integrations/providers/slng.js +2 -0
- package/dist/integrations/providers/sms.d.ts +31 -0
- package/dist/integrations/providers/sms.js +1 -0
- package/dist/integrations/providers/social.d.ts +8 -0
- package/dist/integrations/providers/social.js +2 -0
- package/dist/integrations/providers/storage.d.ts +65 -0
- package/dist/integrations/providers/storage.js +1 -0
- package/dist/integrations/providers/strava.d.ts +3 -0
- package/dist/integrations/providers/strava.js +2 -0
- package/dist/integrations/providers/stripe.d.ts +3 -0
- package/dist/integrations/providers/stripe.js +2 -0
- package/dist/integrations/providers/supabase-postgres.d.ts +3 -0
- package/dist/integrations/providers/supabase-postgres.js +2 -0
- package/dist/integrations/providers/supabase-vector.d.ts +3 -0
- package/dist/integrations/providers/supabase-vector.js +2 -0
- package/dist/integrations/providers/tavily.d.ts +8 -0
- package/dist/integrations/providers/tavily.js +2 -0
- package/dist/integrations/providers/tldv.d.ts +3 -0
- package/dist/integrations/providers/tldv.js +2 -0
- package/dist/integrations/providers/twilio-sms.d.ts +3 -0
- package/dist/integrations/providers/twilio-sms.js +2 -0
- package/dist/integrations/providers/vector-store.d.ts +39 -0
- package/dist/integrations/providers/vector-store.js +1 -0
- package/dist/integrations/providers/video.d.ts +181 -0
- package/dist/integrations/providers/video.js +2 -0
- package/dist/integrations/providers/voice-video-sync.d.ts +29 -0
- package/dist/integrations/providers/voice-video-sync.js +1 -0
- package/dist/integrations/providers/voice.d.ts +180 -0
- package/dist/integrations/providers/voice.js +1 -0
- package/dist/integrations/providers/web-access-shared.d.ts +18 -0
- package/dist/integrations/providers/web-access-shared.js +2 -0
- package/dist/integrations/providers/whoop.d.ts +3 -0
- package/dist/integrations/providers/whoop.js +2 -0
- package/dist/integrations/runtime-transport.test.d.ts +1 -0
- package/dist/integrations/runtime.d.ts +140 -0
- package/dist/integrations/runtime.js +2 -0
- package/dist/integrations/runtime.test.d.ts +1 -0
- package/dist/integrations/sales-intelligence/events.d.ts +182 -0
- package/dist/integrations/sales-intelligence/events.js +2 -0
- package/dist/integrations/sales-intelligence/events.test.d.ts +1 -0
- package/dist/integrations/sales-intelligence/fullenrich-cancel-operation.d.ts +39 -0
- package/dist/integrations/sales-intelligence/fullenrich-cancel-operation.js +2 -0
- package/dist/integrations/sales-intelligence/index.d.ts +7 -0
- package/dist/integrations/sales-intelligence/index.js +2 -0
- package/dist/integrations/sales-intelligence/operation-helpers.d.ts +4 -0
- package/dist/integrations/sales-intelligence/operation-helpers.js +2 -0
- package/dist/integrations/sales-intelligence/operations.d.ts +873 -0
- package/dist/integrations/sales-intelligence/operations.js +2 -0
- package/dist/integrations/sales-intelligence/operations.test.d.ts +1 -0
- package/dist/integrations/sales-intelligence/schemas-events.d.ts +78 -0
- package/dist/integrations/sales-intelligence/schemas-events.js +2 -0
- package/dist/integrations/sales-intelligence/schemas-results.d.ts +69 -0
- package/dist/integrations/sales-intelligence/schemas-results.js +2 -0
- package/dist/integrations/sales-intelligence/schemas.d.ts +73 -0
- package/dist/integrations/sales-intelligence/schemas.js +2 -0
- package/dist/integrations/secrets/aws-secret-manager.d.ts +28 -0
- package/dist/integrations/secrets/aws-secret-manager.js +2 -0
- package/dist/integrations/secrets/env-secret-provider.d.ts +28 -0
- package/dist/integrations/secrets/env-secret-provider.js +2 -0
- package/dist/integrations/secrets/gcp-secret-manager.d.ts +29 -0
- package/dist/integrations/secrets/gcp-secret-manager.js +2 -0
- package/dist/integrations/secrets/index.d.ts +6 -0
- package/dist/integrations/secrets/index.js +2 -0
- package/dist/integrations/secrets/manager.d.ts +44 -0
- package/dist/integrations/secrets/manager.js +2 -0
- package/dist/integrations/secrets/provider.d.ts +49 -0
- package/dist/integrations/secrets/provider.js +2 -0
- package/dist/integrations/secrets/provider.test.d.ts +1 -0
- package/dist/integrations/secrets/scaleway-secret-manager.d.ts +35 -0
- package/dist/integrations/secrets/scaleway-secret-manager.js +2 -0
- package/dist/integrations/secrets-types.d.ts +14 -0
- package/dist/integrations/secrets-types.js +1 -0
- package/dist/integrations/social/index.d.ts +7 -0
- package/dist/integrations/social/index.js +2 -0
- package/dist/integrations/social/instagram.d.ts +86 -0
- package/dist/integrations/social/instagram.js +1 -0
- package/dist/integrations/social/models.d.ts +107 -0
- package/dist/integrations/social/models.js +1 -0
- package/dist/integrations/social/provider.d.ts +46 -0
- package/dist/integrations/social/provider.js +2 -0
- package/dist/integrations/social/social.test.d.ts +1 -0
- package/dist/integrations/social/tracking-models.d.ts +153 -0
- package/dist/integrations/social/tracking-models.js +2 -0
- package/dist/integrations/social/tracking-provider.d.ts +53 -0
- package/dist/integrations/social/tracking-provider.js +1 -0
- package/dist/integrations/social/tracking-store.d.ts +78 -0
- package/dist/integrations/social/tracking-store.js +1 -0
- package/dist/integrations/social/x-publication.d.ts +143 -0
- package/dist/integrations/social/x-publication.js +2 -0
- package/dist/integrations/social/x-upload-state.d.ts +53 -0
- package/dist/integrations/social/x-upload-state.js +2 -0
- package/dist/integrations/social/x-upload.d.ts +111 -0
- package/dist/integrations/social/x-upload.js +2 -0
- package/dist/integrations/social/x-withdrawal.d.ts +13 -0
- package/dist/integrations/social/x-withdrawal.js +2 -0
- package/dist/integrations/social/x.d.ts +84 -0
- package/dist/integrations/social/x.js +1 -0
- package/dist/integrations/spec.d.ts +119 -0
- package/dist/integrations/spec.js +2 -0
- package/dist/integrations/spec.test.d.ts +1 -0
- package/dist/integrations/transport.d.ts +115 -0
- package/dist/integrations/transport.js +2 -0
- package/dist/integrations/transport.test.d.ts +1 -0
- package/dist/integrations/versioning.d.ts +51 -0
- package/dist/integrations/versioning.js +2 -0
- package/dist/integrations/versioning.test.d.ts +1 -0
- package/dist/integrations/web-access/browser-automation.d.ts +134 -0
- package/dist/integrations/web-access/browser-automation.js +2 -0
- package/dist/integrations/web-access/capability-ledger.d.ts +50 -0
- package/dist/integrations/web-access/capability-ledger.js +2 -0
- package/dist/integrations/web-access/capability-ledger.test.d.ts +1 -0
- package/dist/integrations/web-access/events.d.ts +105 -0
- package/dist/integrations/web-access/events.js +2 -0
- package/dist/integrations/web-access/index.d.ts +16 -0
- package/dist/integrations/web-access/index.js +22 -0
- package/dist/integrations/web-access/inventory-definitions-expanded.d.ts +2 -0
- package/dist/integrations/web-access/inventory-definitions-expanded.js +2 -0
- package/dist/integrations/web-access/inventory-definitions.d.ts +17 -0
- package/dist/integrations/web-access/inventory-definitions.js +2 -0
- package/dist/integrations/web-access/inventory-evidence.d.ts +24 -0
- package/dist/integrations/web-access/inventory-evidence.js +2 -0
- package/dist/integrations/web-access/inventory-mappings-browserbase.d.ts +2 -0
- package/dist/integrations/web-access/inventory-mappings-browserbase.js +2 -0
- package/dist/integrations/web-access/inventory-mappings.d.ts +54 -0
- package/dist/integrations/web-access/inventory-mappings.js +2 -0
- package/dist/integrations/web-access/inventory.d.ts +4 -0
- package/dist/integrations/web-access/inventory.js +2 -0
- package/dist/integrations/web-access/models.d.ts +145 -0
- package/dist/integrations/web-access/models.js +2 -0
- package/dist/integrations/web-access/operation-definitions.d.ts +19 -0
- package/dist/integrations/web-access/operation-definitions.js +2 -0
- package/dist/integrations/web-access/operation-errors.d.ts +56 -0
- package/dist/integrations/web-access/operation-errors.js +2 -0
- package/dist/integrations/web-access/operation-output-models.d.ts +177 -0
- package/dist/integrations/web-access/operation-output-models.js +2 -0
- package/dist/integrations/web-access/operation-schema-models.d.ts +453 -0
- package/dist/integrations/web-access/operation-schema-models.js +2 -0
- package/dist/integrations/web-access/operation-schemas.d.ts +165 -0
- package/dist/integrations/web-access/operation-schemas.js +2 -0
- package/dist/integrations/web-access/operations.d.ts +22 -0
- package/dist/integrations/web-access/operations.js +22 -0
- package/dist/integrations/web-access/operations.test.d.ts +1 -0
- package/dist/integrations/web-access/providers.d.ts +56 -0
- package/dist/integrations/web-access/providers.js +1 -0
- package/dist/integrations/web-access/providers.test.d.ts +1 -0
- package/dist/integrations/web-access/schemas.d.ts +118 -0
- package/dist/integrations/web-access/schemas.js +2 -0
- package/dist/node/contracts-integrations.feature.js +1 -0
- package/dist/node/index.js +21 -0
- package/dist/node/integrations/advertising/index.js +1 -0
- package/dist/node/integrations/advertising/recipe-schema.js +1 -0
- package/dist/node/integrations/advertising/recipe.js +0 -0
- package/dist/node/integrations/advertising/specs.js +1 -0
- package/dist/node/integrations/advertising/types.js +1 -0
- package/dist/node/integrations/attio/events.js +1 -0
- package/dist/node/integrations/attio/index.js +1 -0
- package/dist/node/integrations/attio/operations.js +1 -0
- package/dist/node/integrations/auth-helpers.js +1 -0
- package/dist/node/integrations/auth.js +1 -0
- package/dist/node/integrations/binding.js +0 -0
- package/dist/node/integrations/byok.js +1 -0
- package/dist/node/integrations/catalog.js +1 -0
- package/dist/node/integrations/clay/events.js +1 -0
- package/dist/node/integrations/clay/index.js +1 -0
- package/dist/node/integrations/clay/operations.js +1 -0
- package/dist/node/integrations/connection.js +0 -0
- package/dist/node/integrations/credentials.js +1 -0
- package/dist/node/integrations/deployment-topology-model.js +1 -0
- package/dist/node/integrations/deployment-topology-receipt.js +1 -0
- package/dist/node/integrations/deployment-topology-validation.js +1 -0
- package/dist/node/integrations/deployment-topology.js +1 -0
- package/dist/node/integrations/docs/integrations.docblock.js +100 -0
- package/dist/node/integrations/email-operations.js +1 -0
- package/dist/node/integrations/gtm/capability-ledger.fixture-helpers.js +1 -0
- package/dist/node/integrations/gtm/capability-ledger.fixtures.js +1 -0
- package/dist/node/integrations/gtm/capability-ledger.js +1 -0
- package/dist/node/integrations/gtm/hosted-mcp.js +1 -0
- package/dist/node/integrations/gtm/index.js +1 -0
- package/dist/node/integrations/gtm/inventory/attio.js +1 -0
- package/dist/node/integrations/gtm/inventory/clay.js +1 -0
- package/dist/node/integrations/gtm/inventory/fullenrich.js +1 -0
- package/dist/node/integrations/gtm/inventory/index.js +1 -0
- package/dist/node/integrations/gtm/inventory/types.js +0 -0
- package/dist/node/integrations/gtm/preflight.js +1 -0
- package/dist/node/integrations/gtm/schemas.js +1 -0
- package/dist/node/integrations/gtm/webhook-ingress.js +1 -0
- package/dist/node/integrations/health/contracts/activities.js +1 -0
- package/dist/node/integrations/health/contracts/biometrics.js +1 -0
- package/dist/node/integrations/health/contracts/index.js +1 -0
- package/dist/node/integrations/health/contracts/nutrition.js +1 -0
- package/dist/node/integrations/health/contracts/sleep.js +1 -0
- package/dist/node/integrations/health/contracts/webhooks.js +1 -0
- package/dist/node/integrations/health/contracts/workouts.js +1 -0
- package/dist/node/integrations/health/guards.js +1 -0
- package/dist/node/integrations/health/health.capability.js +1 -0
- package/dist/node/integrations/health/health.feature.js +1 -0
- package/dist/node/integrations/health/models.js +1 -0
- package/dist/node/integrations/health/telemetry.js +1 -0
- package/dist/node/integrations/health.js +1 -0
- package/dist/node/integrations/index.js +21 -0
- package/dist/node/integrations/integrations.capability.js +1 -0
- package/dist/node/integrations/integrations.feature.js +1 -0
- package/dist/node/integrations/linkedin/advertising.js +0 -0
- package/dist/node/integrations/linkedin/analytics.js +0 -0
- package/dist/node/integrations/linkedin/capabilities.js +1 -0
- package/dist/node/integrations/linkedin/community.js +0 -0
- package/dist/node/integrations/linkedin/credentials.js +1 -0
- package/dist/node/integrations/linkedin/host.js +1 -0
- package/dist/node/integrations/linkedin/identity.js +0 -0
- package/dist/node/integrations/linkedin/index.js +1 -0
- package/dist/node/integrations/linkedin/installation.js +1 -0
- package/dist/node/integrations/linkedin/media-job-state.js +1 -0
- package/dist/node/integrations/linkedin/media-job.js +1 -0
- package/dist/node/integrations/linkedin/media-session.js +1 -0
- package/dist/node/integrations/linkedin/media.js +1 -0
- package/dist/node/integrations/linkedin/messaging.js +0 -0
- package/dist/node/integrations/linkedin/models.js +0 -0
- package/dist/node/integrations/linkedin/native-publication.js +1 -0
- package/dist/node/integrations/linkedin/native-withdrawal.js +1 -0
- package/dist/node/integrations/linkedin/operation-catalog.js +1 -0
- package/dist/node/integrations/linkedin/operations.js +1 -0
- package/dist/node/integrations/linkedin/provider.js +1 -0
- package/dist/node/integrations/linkedin/sales.js +0 -0
- package/dist/node/integrations/linkedin/sync.js +0 -0
- package/dist/node/integrations/linkedin/webhooks.js +0 -0
- package/dist/node/integrations/meeting-recorder/contracts/index.js +1 -0
- package/dist/node/integrations/meeting-recorder/contracts/meetings.js +1 -0
- package/dist/node/integrations/meeting-recorder/contracts/transcripts.js +1 -0
- package/dist/node/integrations/meeting-recorder/contracts/webhooks.js +1 -0
- package/dist/node/integrations/meeting-recorder/meeting-recorder.capability.js +1 -0
- package/dist/node/integrations/meeting-recorder/meeting-recorder.feature.js +1 -0
- package/dist/node/integrations/meeting-recorder/models.js +1 -0
- package/dist/node/integrations/meeting-recorder/telemetry.js +1 -0
- package/dist/node/integrations/openbanking/contracts/accounts.js +1 -0
- package/dist/node/integrations/openbanking/contracts/balances.js +1 -0
- package/dist/node/integrations/openbanking/contracts/index.js +1 -0
- package/dist/node/integrations/openbanking/contracts/transactions.js +1 -0
- package/dist/node/integrations/openbanking/guards.js +1 -0
- package/dist/node/integrations/openbanking/models.js +1 -0
- package/dist/node/integrations/openbanking/openbanking.capability.js +1 -0
- package/dist/node/integrations/openbanking/openbanking.feature.js +1 -0
- package/dist/node/integrations/openbanking/telemetry.js +1 -0
- package/dist/node/integrations/operations.js +21 -0
- package/dist/node/integrations/providers/analytics-reader.js +0 -0
- package/dist/node/integrations/providers/analytics-writer.js +0 -0
- package/dist/node/integrations/providers/analytics.js +0 -0
- package/dist/node/integrations/providers/apify.js +1 -0
- package/dist/node/integrations/providers/apple-health.js +1 -0
- package/dist/node/integrations/providers/async-media-record.js +1 -0
- package/dist/node/integrations/providers/async-media.js +0 -0
- package/dist/node/integrations/providers/attio.js +1 -0
- package/dist/node/integrations/providers/bright-data.js +1 -0
- package/dist/node/integrations/providers/browserbase.js +1 -0
- package/dist/node/integrations/providers/calendar.d.js +0 -0
- package/dist/node/integrations/providers/calendar.js +0 -0
- package/dist/node/integrations/providers/catalog.js +1 -0
- package/dist/node/integrations/providers/clay.js +1 -0
- package/dist/node/integrations/providers/communication-channel.js +1 -0
- package/dist/node/integrations/providers/composio.js +1 -0
- package/dist/node/integrations/providers/crm-fixture-core.js +1 -0
- package/dist/node/integrations/providers/crm-hubspot-fixture.js +1 -0
- package/dist/node/integrations/providers/crm-salesforce-fixture.js +1 -0
- package/dist/node/integrations/providers/crm-write-proposal-types.js +1 -0
- package/dist/node/integrations/providers/crm-write-proposal.js +1 -0
- package/dist/node/integrations/providers/crm.js +1 -0
- package/dist/node/integrations/providers/database.js +0 -0
- package/dist/node/integrations/providers/deepgram.js +1 -0
- package/dist/node/integrations/providers/direct-fetch.js +1 -0
- package/dist/node/integrations/providers/eightsleep.js +1 -0
- package/dist/node/integrations/providers/elevenlabs.js +1 -0
- package/dist/node/integrations/providers/email-delivery-events.js +0 -0
- package/dist/node/integrations/providers/email.js +0 -0
- package/dist/node/integrations/providers/embedding.js +0 -0
- package/dist/node/integrations/providers/fal-image.js +1 -0
- package/dist/node/integrations/providers/fal.js +1 -0
- package/dist/node/integrations/providers/fathom.js +1 -0
- package/dist/node/integrations/providers/firecrawl.js +1 -0
- package/dist/node/integrations/providers/fireflies.js +1 -0
- package/dist/node/integrations/providers/fitbit.js +1 -0
- package/dist/node/integrations/providers/fullenrich.js +1 -0
- package/dist/node/integrations/providers/garmin.js +1 -0
- package/dist/node/integrations/providers/gcs-storage.js +1 -0
- package/dist/node/integrations/providers/gmail.js +1 -0
- package/dist/node/integrations/providers/google-calendar.js +1 -0
- package/dist/node/integrations/providers/google-drive.js +1 -0
- package/dist/node/integrations/providers/gradium.js +1 -0
- package/dist/node/integrations/providers/granola.js +1 -0
- package/dist/node/integrations/providers/health-provider-shared.js +1 -0
- package/dist/node/integrations/providers/health.js +0 -0
- package/dist/node/integrations/providers/higgsfield.js +1 -0
- package/dist/node/integrations/providers/image.js +1 -0
- package/dist/node/integrations/providers/index.js +1 -0
- package/dist/node/integrations/providers/jira.js +1 -0
- package/dist/node/integrations/providers/linear.js +1 -0
- package/dist/node/integrations/providers/linkedin-community.js +1 -0
- package/dist/node/integrations/providers/linkedin-marketing.js +1 -0
- package/dist/node/integrations/providers/linkedin-member.js +1 -0
- package/dist/node/integrations/providers/linkedin-messaging.js +1 -0
- package/dist/node/integrations/providers/linkedin-sales-navigator.js +1 -0
- package/dist/node/integrations/providers/linkedin-spec-shared.js +1 -0
- package/dist/node/integrations/providers/linkup.js +1 -0
- package/dist/node/integrations/providers/llm.js +0 -0
- package/dist/node/integrations/providers/massive.js +1 -0
- package/dist/node/integrations/providers/meeting-capture.js +0 -0
- package/dist/node/integrations/providers/meeting-recorder.js +0 -0
- package/dist/node/integrations/providers/messaging-github.js +1 -0
- package/dist/node/integrations/providers/messaging-matrix.js +1 -0
- package/dist/node/integrations/providers/messaging-slack.js +1 -0
- package/dist/node/integrations/providers/messaging-teams.js +1 -0
- package/dist/node/integrations/providers/messaging-telegram.js +1 -0
- package/dist/node/integrations/providers/messaging-whatsapp-meta.js +1 -0
- package/dist/node/integrations/providers/messaging-whatsapp-twilio.js +1 -0
- package/dist/node/integrations/providers/messaging.js +0 -0
- package/dist/node/integrations/providers/mistral-conversational.js +1 -0
- package/dist/node/integrations/providers/mistral-stt.js +1 -0
- package/dist/node/integrations/providers/mistral.js +1 -0
- package/dist/node/integrations/providers/mode-exemptions.js +1 -0
- package/dist/node/integrations/providers/myfitnesspal.js +1 -0
- package/dist/node/integrations/providers/notion.js +1 -0
- package/dist/node/integrations/providers/openai-image.js +1 -0
- package/dist/node/integrations/providers/openai-realtime.js +1 -0
- package/dist/node/integrations/providers/openbanking.js +0 -0
- package/dist/node/integrations/providers/openwearables.js +1 -0
- package/dist/node/integrations/providers/oura.js +1 -0
- package/dist/node/integrations/providers/oxylabs.js +1 -0
- package/dist/node/integrations/providers/payments/capabilities-billing.js +0 -0
- package/dist/node/integrations/providers/payments/capabilities-payments.js +0 -0
- package/dist/node/integrations/providers/payments/capabilities.js +0 -0
- package/dist/node/integrations/providers/payments/context.js +1 -0
- package/dist/node/integrations/providers/payments/provider.js +0 -0
- package/dist/node/integrations/providers/payments/resources.js +0 -0
- package/dist/node/integrations/providers/payments/shared.js +1 -0
- package/dist/node/integrations/providers/payments.js +1 -0
- package/dist/node/integrations/providers/paypal.js +1 -0
- package/dist/node/integrations/providers/peloton.js +1 -0
- package/dist/node/integrations/providers/posthog-llm-telemetry.js +1 -0
- package/dist/node/integrations/providers/posthog.js +1 -0
- package/dist/node/integrations/providers/postmark.js +1 -0
- package/dist/node/integrations/providers/powens.js +1 -0
- package/dist/node/integrations/providers/project-management.js +1 -0
- package/dist/node/integrations/providers/provider-delta.js +1 -0
- package/dist/node/integrations/providers/qdrant.js +1 -0
- package/dist/node/integrations/providers/registry.js +1 -0
- package/dist/node/integrations/providers/reworkd.js +1 -0
- package/dist/node/integrations/providers/serper.js +1 -0
- package/dist/node/integrations/providers/sillage.js +1 -0
- package/dist/node/integrations/providers/slng.js +1 -0
- package/dist/node/integrations/providers/sms.js +0 -0
- package/dist/node/integrations/providers/social.js +1 -0
- package/dist/node/integrations/providers/storage.js +0 -0
- package/dist/node/integrations/providers/strava.js +1 -0
- package/dist/node/integrations/providers/stripe.js +1 -0
- package/dist/node/integrations/providers/supabase-postgres.js +1 -0
- package/dist/node/integrations/providers/supabase-vector.js +1 -0
- package/dist/node/integrations/providers/tavily.js +1 -0
- package/dist/node/integrations/providers/tldv.js +1 -0
- package/dist/node/integrations/providers/twilio-sms.js +1 -0
- package/dist/node/integrations/providers/vector-store.js +0 -0
- package/dist/node/integrations/providers/video.js +1 -0
- package/dist/node/integrations/providers/voice-video-sync.js +0 -0
- package/dist/node/integrations/providers/voice.js +0 -0
- package/dist/node/integrations/providers/web-access-shared.js +1 -0
- package/dist/node/integrations/providers/whoop.js +1 -0
- package/dist/node/integrations/runtime.js +1 -0
- package/dist/node/integrations/sales-intelligence/events.js +1 -0
- package/dist/node/integrations/sales-intelligence/fullenrich-cancel-operation.js +1 -0
- package/dist/node/integrations/sales-intelligence/index.js +1 -0
- package/dist/node/integrations/sales-intelligence/operation-helpers.js +1 -0
- package/dist/node/integrations/sales-intelligence/operations.js +1 -0
- package/dist/node/integrations/sales-intelligence/schemas-events.js +1 -0
- package/dist/node/integrations/sales-intelligence/schemas-results.js +1 -0
- package/dist/node/integrations/sales-intelligence/schemas.js +1 -0
- package/dist/node/integrations/secrets/aws-secret-manager.js +1 -0
- package/dist/node/integrations/secrets/env-secret-provider.js +1 -0
- package/dist/node/integrations/secrets/gcp-secret-manager.js +1 -0
- package/dist/node/integrations/secrets/index.js +1 -0
- package/dist/node/integrations/secrets/manager.js +1 -0
- package/dist/node/integrations/secrets/provider.js +1 -0
- package/dist/node/integrations/secrets/scaleway-secret-manager.js +1 -0
- package/dist/node/integrations/secrets-types.js +0 -0
- package/dist/node/integrations/social/index.js +1 -0
- package/dist/node/integrations/social/instagram.js +0 -0
- package/dist/node/integrations/social/models.js +0 -0
- package/dist/node/integrations/social/provider.js +1 -0
- package/dist/node/integrations/social/tracking-models.js +1 -0
- package/dist/node/integrations/social/tracking-provider.js +0 -0
- package/dist/node/integrations/social/tracking-store.js +0 -0
- package/dist/node/integrations/social/x-publication.js +1 -0
- package/dist/node/integrations/social/x-upload-state.js +1 -0
- package/dist/node/integrations/social/x-upload.js +1 -0
- package/dist/node/integrations/social/x-withdrawal.js +1 -0
- package/dist/node/integrations/social/x.js +0 -0
- package/dist/node/integrations/spec.js +1 -0
- package/dist/node/integrations/transport.js +1 -0
- package/dist/node/integrations/versioning.js +1 -0
- package/dist/node/integrations/web-access/browser-automation.js +1 -0
- package/dist/node/integrations/web-access/capability-ledger.js +1 -0
- package/dist/node/integrations/web-access/events.js +1 -0
- package/dist/node/integrations/web-access/index.js +21 -0
- package/dist/node/integrations/web-access/inventory-definitions-expanded.js +1 -0
- package/dist/node/integrations/web-access/inventory-definitions.js +1 -0
- package/dist/node/integrations/web-access/inventory-evidence.js +1 -0
- package/dist/node/integrations/web-access/inventory-mappings-browserbase.js +1 -0
- package/dist/node/integrations/web-access/inventory-mappings.js +1 -0
- package/dist/node/integrations/web-access/inventory.js +1 -0
- package/dist/node/integrations/web-access/models.js +1 -0
- package/dist/node/integrations/web-access/operation-definitions.js +1 -0
- package/dist/node/integrations/web-access/operation-errors.js +1 -0
- package/dist/node/integrations/web-access/operation-output-models.js +1 -0
- package/dist/node/integrations/web-access/operation-schema-models.js +1 -0
- package/dist/node/integrations/web-access/operation-schemas.js +1 -0
- package/dist/node/integrations/web-access/operations.js +21 -0
- package/dist/node/integrations/web-access/providers.js +0 -0
- package/dist/node/integrations/web-access/schemas.js +1 -0
- package/package.json +3606 -0
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
// @bun
|
|
2
|
+
import{defineCommand as P,defineQuery as o}from"@lssm/lib.contracts-spec/operations";import{defineCommand as U}from"@lssm/lib.contracts-spec/operations";import{defaultRestPath as D}from"@lssm/lib.contracts-spec/jsonschema";var a="1.0.0";function m(e){return D(e,a)}function T(e){return`${e.replace(/\./g,"_")}-v1_0_0`}function d(e){return`fullenrich_${e}-v1_0_0`}import{ScalarTypeEnum as f,SchemaModel as E}from"@lssm/lib.schema";var y=f.JSONObject(),A=f.String_unsecure(),l=f.NonEmptyString(),p=new E({name:"FullEnrichResultInput",fields:{connectionId:{type:l,isOptional:!1},jobId:{type:l,isOptional:!1},correlationId:{type:l,isOptional:!0}}}),_=new E({name:"FullEnrichWebhookInput",fields:{connectionId:{type:l,isOptional:!1},headers:{type:y,isOptional:!0},payload:{type:y,isOptional:!1},receivedAt:{type:f.DateTime(),isOptional:!0}}}),s=new E({name:"FullEnrichReceiptOutput",fields:{providerKey:{type:l,isOptional:!1},jobId:{type:l,isOptional:!0},correlationId:{type:l,isOptional:!0},status:{type:A,isOptional:!1},data:{type:y,isOptional:!0},rawRedacted:{type:y,isOptional:!0}}}),M=new E({name:"FullEnrichRemoteMcpOutput",fields:{providerKey:{type:l,isOptional:!1},url:{type:l,isOptional:!1},auth:{type:l,isOptional:!1},toolCategories:{type:A,isOptional:!1,isArray:!0}}});var L="sales-intelligence.fullenrich.contact.enrichment.cancel",j=U({meta:{key:L,version:a,title:"Cancel FullEnrich Contact Enrichment",description:"Cancel a pending FullEnrich contact enrichment job.",goal:"Stop pending credit-bearing work when the provider still permits it.",context:"Cancellation is terminal and requires scoped human approval.",owners:["@platform.integrations"],tags:["sales-intelligence","fullenrich","pii-safe"],stability:"experimental"},io:{input:p,output:s},policy:{auth:"user",policies:[],escalate:"human_review"},execution:{effects:["write","external-side-effect"],approval:{required:!0,effects:["write","external-side-effect"]}},transport:{rest:{method:"POST",path:m(L)},mcp:{toolName:d("contact_enrichment_cancel")}}});import{ScalarTypeEnum as g,SchemaModel as O}from"@lssm/lib.schema";var G=g.JSONObject(),K=g.String_unsecure(),i=g.NonEmptyString(),F=new O({name:"FullEnrichCorrelationInput",fields:{connectionId:{type:i,isOptional:!1},correlationId:{type:i,isOptional:!0},idempotencyKey:{type:i,isOptional:!0}}}),I=new O({name:"FullEnrichSearchInput",fields:{connectionId:{type:i,isOptional:!1},query:{type:i,isOptional:!0},filters:{type:G,isOptional:!0},limit:{type:g.Int_unsecure(),isOptional:!0},correlationId:{type:i,isOptional:!0}}}),w=new O({name:"FullEnrichLookupInput",fields:{connectionId:{type:i,isOptional:!1},identifier:{type:i,isOptional:!1},identifierType:{type:K,isOptional:!1},correlationId:{type:i,isOptional:!0}}}),b=new O({name:"FullEnrichAsyncStartInput",fields:{connectionId:{type:i,isOptional:!1},request:{type:G,isOptional:!1},correlationId:{type:i,isOptional:!0},webhookUrl:{type:K,isOptional:!0}}});import{ScalarTypeEnum as u,SchemaModel as x}from"@lssm/lib.schema";var N=u.JSONObject(),R=u.String_unsecure(),r=u.NonEmptyString(),V=new x({name:"FullEnrichCreditOutput",fields:{providerKey:{type:r,isOptional:!1},creditsRemaining:{type:u.Float_unsecure(),isOptional:!0},raw:{type:N,isOptional:!0},correlationId:{type:r,isOptional:!0}}}),W=new x({name:"FullEnrichValidationOutput",fields:{valid:{type:u.Boolean(),isOptional:!1},providerKey:{type:r,isOptional:!1},message:{type:R,isOptional:!0}}}),h=new x({name:"FullEnrichResultListOutput",fields:{providerKey:{type:r,isOptional:!1},items:{type:N,isOptional:!1},correlationId:{type:r,isOptional:!0}}}),C=new x({name:"FullEnrichAsyncStartOutput",fields:{providerKey:{type:r,isOptional:!1},jobId:{type:r,isOptional:!0},correlationId:{type:r,isOptional:!0},status:{type:R,isOptional:!1},expectedWebhookPath:{type:R,isOptional:!0}}});var J=["@platform.integrations"],t={version:a,owners:J,tags:["sales-intelligence","fullenrich","pii-safe"],stability:"experimental"},c={effects:["read"]},v={effects:["write","cost-bearing","external-side-effect"],approval:{required:!0}};function n(e,S,k){return{rest:{method:S,path:m(e)},mcp:{toolName:k??T(e)}}}var B=o({meta:{...t,version:"1.0.0",key:"sales-intelligence.fullenrich.credits.get",title:"Get FullEnrich Credits",description:"Read FullEnrich credit balance without exposing API keys.",goal:"Preflight enrichment usage and quota availability.",context:"Uses the documented FullEnrich credits API via a secret-backed runtime adapter."},io:{input:F,output:V},policy:{auth:"user",policies:[]},execution:c,transport:n("sales-intelligence.fullenrich.credits.get","GET")}),z=o({meta:{...t,version:"1.0.0",key:"sales-intelligence.fullenrich.api-key.validate",title:"Validate FullEnrich API Key",description:"Validate configured FullEnrich credentials with redacted output.",goal:"Fail fast on invalid BYOK setup without logging key material.",context:"Uses provider key-validation endpoint through runtime secrets only."},io:{input:F,output:W},policy:{auth:"admin",policies:[]},execution:c,transport:n("sales-intelligence.fullenrich.api-key.validate","GET")}),Q=o({meta:{...t,version:"1.0.0",key:"sales-intelligence.fullenrich.people.search",title:"Search FullEnrich People",description:"Search people through FullEnrich Search API.",goal:"Find candidate contacts with synthetic-test-safe result handling.",context:"Synchronous FullEnrich people search; no live calls in tests."},io:{input:I,output:h},policy:{auth:"user",policies:[]},execution:c,transport:n("sales-intelligence.fullenrich.people.search","POST")}),Y=o({meta:{...t,version:"1.0.0",key:"sales-intelligence.fullenrich.companies.search",title:"Search FullEnrich Companies",description:"Search companies through FullEnrich Search API.",goal:"Find candidate company records.",context:"Synchronous FullEnrich company search; no live calls in tests."},io:{input:I,output:h},policy:{auth:"user",policies:[]},execution:c,transport:n("sales-intelligence.fullenrich.companies.search","POST")}),H=o({meta:{...t,version:"1.0.0",key:"sales-intelligence.fullenrich.people.lookup",title:"Lookup FullEnrich Person",description:"Lookup/enrich a known person record.",goal:"Resolve a known person identifier through FullEnrich.",context:"Uses lookup/search surface only when provider supports the identifier type."},io:{input:w,output:h},policy:{auth:"user",policies:[]},execution:v,transport:n("sales-intelligence.fullenrich.people.lookup","POST")}),X=o({meta:{...t,version:"1.0.0",key:"sales-intelligence.fullenrich.companies.lookup",title:"Lookup FullEnrich Company",description:"Lookup/enrich a known company record.",goal:"Resolve a known company identifier through FullEnrich.",context:"Uses lookup/search surface only when provider supports the identifier type."},io:{input:w,output:h},policy:{auth:"user",policies:[]},execution:v,transport:n("sales-intelligence.fullenrich.companies.lookup","POST")}),Z=P({meta:{...t,version:"1.0.0",key:"sales-intelligence.fullenrich.contact.enrichment.start",title:"Start FullEnrich Contact Enrichment",description:"Start async FullEnrich contact enrichment.",goal:"Start enrichment and return correlation/job metadata.",context:"Webhook-first async flow; polling is fallback only."},io:{input:b,output:C},policy:{auth:"user",policies:[]},execution:v,transport:n("sales-intelligence.fullenrich.contact.enrichment.start","POST")}),ee=o({meta:{...t,version:"1.0.0",key:"sales-intelligence.fullenrich.contact.enrichment.result.get",title:"Get FullEnrich Contact Enrichment Result",description:"Slow polling fallback for async enrichment results.",goal:"Retrieve a result when webhook delivery is unavailable.",context:"Fallback-only because FullEnrich recommends webhooks for async results."},io:{input:p,output:s},policy:{auth:"user",policies:[]},execution:c,transport:n("sales-intelligence.fullenrich.contact.enrichment.result.get","GET",d("contact_result_get"))}),te=P({meta:{...t,version:"1.0.0",key:"sales-intelligence.fullenrich.reverse-email.start",title:"Start FullEnrich Reverse Email Lookup",description:"Start async reverse-email lookup.",goal:"Resolve a contact from an email address with correlation metadata.",context:"Webhook-first async reverse-email flow."},io:{input:b,output:C},policy:{auth:"user",policies:[]},execution:v,transport:n("sales-intelligence.fullenrich.reverse-email.start","POST")}),ie=o({meta:{...t,version:"1.0.0",key:"sales-intelligence.fullenrich.reverse-email.result.get",title:"Get FullEnrich Reverse Email Result",description:"Slow polling fallback for reverse-email results.",goal:"Retrieve a reverse-email result when webhook delivery is unavailable.",context:"Fallback-only; callers should prefer webhook receipt."},io:{input:p,output:s},policy:{auth:"user",policies:[]},execution:c,transport:n("sales-intelligence.fullenrich.reverse-email.result.get","GET")}),ne=P({meta:{...t,version:"1.0.0",key:"sales-intelligence.fullenrich.webhook.enrichment.received",title:"Receive FullEnrich Enrichment Webhook",description:"Normalize inbound enrichment webhook payloads.",goal:"Produce an idempotent receipt without leaking raw PII or secrets.",context:"Signature verification is only enabled when official signing docs exist."},io:{input:_,output:s},policy:{auth:"admin",policies:[]},execution:{effects:["external-side-effect"]}}),le=o({meta:{...t,version:"1.0.0",key:"sales-intelligence.fullenrich.mcp.remote.describe",title:"Describe FullEnrich Remote MCP",description:"Describe the official FullEnrich remote MCP endpoint and auth.",goal:"Let agents discover remote MCP metadata without proxying OAuth secrets.",context:"Declares https://mcp.fullenrich.com/mcp with OAuth metadata."},io:{input:F,output:M},policy:{auth:"user",policies:[]},execution:c,transport:n("sales-intelligence.fullenrich.mcp.remote.describe","GET")}),q=[B,z,Q,Y,H,X,Z,ee,j,te,ie,ne,le],Se=Object.fromEntries(q.map((e)=>[e.meta.key,e]));function ke(e){return q.reduce((S,k)=>S.register(k),e)}export{z as FullEnrichApiKeyValidate,X as FullEnrichCompaniesLookup,Y as FullEnrichCompaniesSearch,ee as FullEnrichContactEnrichmentResultGet,Z as FullEnrichContactEnrichmentStart,B as FullEnrichCreditsGet,le as FullEnrichMcpRemoteDescribe,H as FullEnrichPeopleLookup,Q as FullEnrichPeopleSearch,ie as FullEnrichReverseEmailResultGet,te as FullEnrichReverseEmailStart,ne as FullEnrichWebhookEnrichmentReceived,q as fullEnrichSalesIntelligenceOperations,ke as registerSalesIntelligenceContracts,Se as salesIntelligenceOperations};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
import { SchemaModel } from '@lssm/lib.schema';
|
|
2
|
+
export declare const FullEnrichResultInput: SchemaModel<{
|
|
3
|
+
connectionId: {
|
|
4
|
+
type: import("@lssm/lib.schema").FieldType<string, string>;
|
|
5
|
+
isOptional: false;
|
|
6
|
+
};
|
|
7
|
+
jobId: {
|
|
8
|
+
type: import("@lssm/lib.schema").FieldType<string, string>;
|
|
9
|
+
isOptional: false;
|
|
10
|
+
};
|
|
11
|
+
correlationId: {
|
|
12
|
+
type: import("@lssm/lib.schema").FieldType<string, string>;
|
|
13
|
+
isOptional: true;
|
|
14
|
+
};
|
|
15
|
+
}>;
|
|
16
|
+
export declare const FullEnrichWebhookInput: SchemaModel<{
|
|
17
|
+
connectionId: {
|
|
18
|
+
type: import("@lssm/lib.schema").FieldType<string, string>;
|
|
19
|
+
isOptional: false;
|
|
20
|
+
};
|
|
21
|
+
headers: {
|
|
22
|
+
type: import("@lssm/lib.schema").FieldType<Record<string, unknown>, Record<string, unknown>>;
|
|
23
|
+
isOptional: true;
|
|
24
|
+
};
|
|
25
|
+
payload: {
|
|
26
|
+
type: import("@lssm/lib.schema").FieldType<Record<string, unknown>, Record<string, unknown>>;
|
|
27
|
+
isOptional: false;
|
|
28
|
+
};
|
|
29
|
+
receivedAt: {
|
|
30
|
+
type: import("@lssm/lib.schema").FieldType<Date, string>;
|
|
31
|
+
isOptional: true;
|
|
32
|
+
};
|
|
33
|
+
}>;
|
|
34
|
+
export declare const FullEnrichReceiptOutput: SchemaModel<{
|
|
35
|
+
providerKey: {
|
|
36
|
+
type: import("@lssm/lib.schema").FieldType<string, string>;
|
|
37
|
+
isOptional: false;
|
|
38
|
+
};
|
|
39
|
+
jobId: {
|
|
40
|
+
type: import("@lssm/lib.schema").FieldType<string, string>;
|
|
41
|
+
isOptional: true;
|
|
42
|
+
};
|
|
43
|
+
correlationId: {
|
|
44
|
+
type: import("@lssm/lib.schema").FieldType<string, string>;
|
|
45
|
+
isOptional: true;
|
|
46
|
+
};
|
|
47
|
+
status: {
|
|
48
|
+
type: import("@lssm/lib.schema").FieldType<string, string>;
|
|
49
|
+
isOptional: false;
|
|
50
|
+
};
|
|
51
|
+
data: {
|
|
52
|
+
type: import("@lssm/lib.schema").FieldType<Record<string, unknown>, Record<string, unknown>>;
|
|
53
|
+
isOptional: true;
|
|
54
|
+
};
|
|
55
|
+
rawRedacted: {
|
|
56
|
+
type: import("@lssm/lib.schema").FieldType<Record<string, unknown>, Record<string, unknown>>;
|
|
57
|
+
isOptional: true;
|
|
58
|
+
};
|
|
59
|
+
}>;
|
|
60
|
+
export declare const FullEnrichRemoteMcpOutput: SchemaModel<{
|
|
61
|
+
providerKey: {
|
|
62
|
+
type: import("@lssm/lib.schema").FieldType<string, string>;
|
|
63
|
+
isOptional: false;
|
|
64
|
+
};
|
|
65
|
+
url: {
|
|
66
|
+
type: import("@lssm/lib.schema").FieldType<string, string>;
|
|
67
|
+
isOptional: false;
|
|
68
|
+
};
|
|
69
|
+
auth: {
|
|
70
|
+
type: import("@lssm/lib.schema").FieldType<string, string>;
|
|
71
|
+
isOptional: false;
|
|
72
|
+
};
|
|
73
|
+
toolCategories: {
|
|
74
|
+
type: import("@lssm/lib.schema").FieldType<string, string>;
|
|
75
|
+
isOptional: false;
|
|
76
|
+
isArray: true;
|
|
77
|
+
};
|
|
78
|
+
}>;
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
// @bun
|
|
2
|
+
import{ScalarTypeEnum as i,SchemaModel as n}from"@lssm/lib.schema";var e=i.JSONObject(),p=i.String_unsecure(),t=i.NonEmptyString(),o=new n({name:"FullEnrichResultInput",fields:{connectionId:{type:t,isOptional:!1},jobId:{type:t,isOptional:!1},correlationId:{type:t,isOptional:!0}}}),a=new n({name:"FullEnrichWebhookInput",fields:{connectionId:{type:t,isOptional:!1},headers:{type:e,isOptional:!0},payload:{type:e,isOptional:!1},receivedAt:{type:i.DateTime(),isOptional:!0}}}),s=new n({name:"FullEnrichReceiptOutput",fields:{providerKey:{type:t,isOptional:!1},jobId:{type:t,isOptional:!0},correlationId:{type:t,isOptional:!0},status:{type:p,isOptional:!1},data:{type:e,isOptional:!0},rawRedacted:{type:e,isOptional:!0}}}),r=new n({name:"FullEnrichRemoteMcpOutput",fields:{providerKey:{type:t,isOptional:!1},url:{type:t,isOptional:!1},auth:{type:t,isOptional:!1},toolCategories:{type:p,isOptional:!1,isArray:!0}}});export{s as FullEnrichReceiptOutput,r as FullEnrichRemoteMcpOutput,o as FullEnrichResultInput,a as FullEnrichWebhookInput};
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
import { SchemaModel } from '@lssm/lib.schema';
|
|
2
|
+
export declare const FullEnrichCreditOutput: SchemaModel<{
|
|
3
|
+
providerKey: {
|
|
4
|
+
type: import("@lssm/lib.schema").FieldType<string, string>;
|
|
5
|
+
isOptional: false;
|
|
6
|
+
};
|
|
7
|
+
creditsRemaining: {
|
|
8
|
+
type: import("@lssm/lib.schema").FieldType<number, number>;
|
|
9
|
+
isOptional: true;
|
|
10
|
+
};
|
|
11
|
+
raw: {
|
|
12
|
+
type: import("@lssm/lib.schema").FieldType<Record<string, unknown>, Record<string, unknown>>;
|
|
13
|
+
isOptional: true;
|
|
14
|
+
};
|
|
15
|
+
correlationId: {
|
|
16
|
+
type: import("@lssm/lib.schema").FieldType<string, string>;
|
|
17
|
+
isOptional: true;
|
|
18
|
+
};
|
|
19
|
+
}>;
|
|
20
|
+
export declare const FullEnrichValidationOutput: SchemaModel<{
|
|
21
|
+
valid: {
|
|
22
|
+
type: import("@lssm/lib.schema").FieldType<boolean, boolean>;
|
|
23
|
+
isOptional: false;
|
|
24
|
+
};
|
|
25
|
+
providerKey: {
|
|
26
|
+
type: import("@lssm/lib.schema").FieldType<string, string>;
|
|
27
|
+
isOptional: false;
|
|
28
|
+
};
|
|
29
|
+
message: {
|
|
30
|
+
type: import("@lssm/lib.schema").FieldType<string, string>;
|
|
31
|
+
isOptional: true;
|
|
32
|
+
};
|
|
33
|
+
}>;
|
|
34
|
+
export declare const FullEnrichResultListOutput: SchemaModel<{
|
|
35
|
+
providerKey: {
|
|
36
|
+
type: import("@lssm/lib.schema").FieldType<string, string>;
|
|
37
|
+
isOptional: false;
|
|
38
|
+
};
|
|
39
|
+
items: {
|
|
40
|
+
type: import("@lssm/lib.schema").FieldType<Record<string, unknown>, Record<string, unknown>>;
|
|
41
|
+
isOptional: false;
|
|
42
|
+
};
|
|
43
|
+
correlationId: {
|
|
44
|
+
type: import("@lssm/lib.schema").FieldType<string, string>;
|
|
45
|
+
isOptional: true;
|
|
46
|
+
};
|
|
47
|
+
}>;
|
|
48
|
+
export declare const FullEnrichAsyncStartOutput: SchemaModel<{
|
|
49
|
+
providerKey: {
|
|
50
|
+
type: import("@lssm/lib.schema").FieldType<string, string>;
|
|
51
|
+
isOptional: false;
|
|
52
|
+
};
|
|
53
|
+
jobId: {
|
|
54
|
+
type: import("@lssm/lib.schema").FieldType<string, string>;
|
|
55
|
+
isOptional: true;
|
|
56
|
+
};
|
|
57
|
+
correlationId: {
|
|
58
|
+
type: import("@lssm/lib.schema").FieldType<string, string>;
|
|
59
|
+
isOptional: true;
|
|
60
|
+
};
|
|
61
|
+
status: {
|
|
62
|
+
type: import("@lssm/lib.schema").FieldType<string, string>;
|
|
63
|
+
isOptional: false;
|
|
64
|
+
};
|
|
65
|
+
expectedWebhookPath: {
|
|
66
|
+
type: import("@lssm/lib.schema").FieldType<string, string>;
|
|
67
|
+
isOptional: true;
|
|
68
|
+
};
|
|
69
|
+
}>;
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
// @bun
|
|
2
|
+
import{ScalarTypeEnum as e,SchemaModel as i}from"@lssm/lib.schema";var l=e.JSONObject(),n=e.String_unsecure(),t=e.NonEmptyString(),o=new i({name:"FullEnrichCreditOutput",fields:{providerKey:{type:t,isOptional:!1},creditsRemaining:{type:e.Float_unsecure(),isOptional:!0},raw:{type:l,isOptional:!0},correlationId:{type:t,isOptional:!0}}}),s=new i({name:"FullEnrichValidationOutput",fields:{valid:{type:e.Boolean(),isOptional:!1},providerKey:{type:t,isOptional:!1},message:{type:n,isOptional:!0}}}),r=new i({name:"FullEnrichResultListOutput",fields:{providerKey:{type:t,isOptional:!1},items:{type:l,isOptional:!1},correlationId:{type:t,isOptional:!0}}}),a=new i({name:"FullEnrichAsyncStartOutput",fields:{providerKey:{type:t,isOptional:!1},jobId:{type:t,isOptional:!0},correlationId:{type:t,isOptional:!0},status:{type:n,isOptional:!1},expectedWebhookPath:{type:n,isOptional:!0}}});export{a as FullEnrichAsyncStartOutput,o as FullEnrichCreditOutput,r as FullEnrichResultListOutput,s as FullEnrichValidationOutput};
|
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
import { SchemaModel } from '@lssm/lib.schema';
|
|
2
|
+
export declare const FullEnrichCorrelationInput: SchemaModel<{
|
|
3
|
+
connectionId: {
|
|
4
|
+
type: import("@lssm/lib.schema").FieldType<string, string>;
|
|
5
|
+
isOptional: false;
|
|
6
|
+
};
|
|
7
|
+
correlationId: {
|
|
8
|
+
type: import("@lssm/lib.schema").FieldType<string, string>;
|
|
9
|
+
isOptional: true;
|
|
10
|
+
};
|
|
11
|
+
idempotencyKey: {
|
|
12
|
+
type: import("@lssm/lib.schema").FieldType<string, string>;
|
|
13
|
+
isOptional: true;
|
|
14
|
+
};
|
|
15
|
+
}>;
|
|
16
|
+
export declare const FullEnrichSearchInput: SchemaModel<{
|
|
17
|
+
connectionId: {
|
|
18
|
+
type: import("@lssm/lib.schema").FieldType<string, string>;
|
|
19
|
+
isOptional: false;
|
|
20
|
+
};
|
|
21
|
+
query: {
|
|
22
|
+
type: import("@lssm/lib.schema").FieldType<string, string>;
|
|
23
|
+
isOptional: true;
|
|
24
|
+
};
|
|
25
|
+
filters: {
|
|
26
|
+
type: import("@lssm/lib.schema").FieldType<Record<string, unknown>, Record<string, unknown>>;
|
|
27
|
+
isOptional: true;
|
|
28
|
+
};
|
|
29
|
+
limit: {
|
|
30
|
+
type: import("@lssm/lib.schema").FieldType<number, number>;
|
|
31
|
+
isOptional: true;
|
|
32
|
+
};
|
|
33
|
+
correlationId: {
|
|
34
|
+
type: import("@lssm/lib.schema").FieldType<string, string>;
|
|
35
|
+
isOptional: true;
|
|
36
|
+
};
|
|
37
|
+
}>;
|
|
38
|
+
export declare const FullEnrichLookupInput: SchemaModel<{
|
|
39
|
+
connectionId: {
|
|
40
|
+
type: import("@lssm/lib.schema").FieldType<string, string>;
|
|
41
|
+
isOptional: false;
|
|
42
|
+
};
|
|
43
|
+
identifier: {
|
|
44
|
+
type: import("@lssm/lib.schema").FieldType<string, string>;
|
|
45
|
+
isOptional: false;
|
|
46
|
+
};
|
|
47
|
+
identifierType: {
|
|
48
|
+
type: import("@lssm/lib.schema").FieldType<string, string>;
|
|
49
|
+
isOptional: false;
|
|
50
|
+
};
|
|
51
|
+
correlationId: {
|
|
52
|
+
type: import("@lssm/lib.schema").FieldType<string, string>;
|
|
53
|
+
isOptional: true;
|
|
54
|
+
};
|
|
55
|
+
}>;
|
|
56
|
+
export declare const FullEnrichAsyncStartInput: SchemaModel<{
|
|
57
|
+
connectionId: {
|
|
58
|
+
type: import("@lssm/lib.schema").FieldType<string, string>;
|
|
59
|
+
isOptional: false;
|
|
60
|
+
};
|
|
61
|
+
request: {
|
|
62
|
+
type: import("@lssm/lib.schema").FieldType<Record<string, unknown>, Record<string, unknown>>;
|
|
63
|
+
isOptional: false;
|
|
64
|
+
};
|
|
65
|
+
correlationId: {
|
|
66
|
+
type: import("@lssm/lib.schema").FieldType<string, string>;
|
|
67
|
+
isOptional: true;
|
|
68
|
+
};
|
|
69
|
+
webhookUrl: {
|
|
70
|
+
type: import("@lssm/lib.schema").FieldType<string, string>;
|
|
71
|
+
isOptional: true;
|
|
72
|
+
};
|
|
73
|
+
}>;
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
// @bun
|
|
2
|
+
import{ScalarTypeEnum as e,SchemaModel as n}from"@lssm/lib.schema";var i=e.JSONObject(),o=e.String_unsecure(),t=e.NonEmptyString(),p=new n({name:"FullEnrichCorrelationInput",fields:{connectionId:{type:t,isOptional:!1},correlationId:{type:t,isOptional:!0},idempotencyKey:{type:t,isOptional:!0}}}),r=new n({name:"FullEnrichSearchInput",fields:{connectionId:{type:t,isOptional:!1},query:{type:t,isOptional:!0},filters:{type:i,isOptional:!0},limit:{type:e.Int_unsecure(),isOptional:!0},correlationId:{type:t,isOptional:!0}}}),s=new n({name:"FullEnrichLookupInput",fields:{connectionId:{type:t,isOptional:!1},identifier:{type:t,isOptional:!1},identifierType:{type:o,isOptional:!1},correlationId:{type:t,isOptional:!0}}}),a=new n({name:"FullEnrichAsyncStartInput",fields:{connectionId:{type:t,isOptional:!1},request:{type:i,isOptional:!1},correlationId:{type:t,isOptional:!0},webhookUrl:{type:o,isOptional:!0}}});export{a as FullEnrichAsyncStartInput,p as FullEnrichCorrelationInput,s as FullEnrichLookupInput,r as FullEnrichSearchInput};
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import { SecretsManagerClient } from '@aws-sdk/client-secrets-manager';
|
|
2
|
+
import type { SecretFetchOptions, SecretProvider, SecretReference, SecretRotationResult, SecretValue, SecretWritePayload } from './provider.js';
|
|
3
|
+
type AwsSecretsManagerClient = Pick<SecretsManagerClient, 'send'>;
|
|
4
|
+
type AwsSecretsManagerClientConfig = ConstructorParameters<typeof SecretsManagerClient>[0];
|
|
5
|
+
interface AwsSecretsManagerProviderOptions {
|
|
6
|
+
region?: string;
|
|
7
|
+
client?: AwsSecretsManagerClient;
|
|
8
|
+
clientConfig?: AwsSecretsManagerClientConfig;
|
|
9
|
+
}
|
|
10
|
+
export declare class AwsSecretsManagerProvider implements SecretProvider {
|
|
11
|
+
readonly id = "aws-secrets-manager";
|
|
12
|
+
private readonly explicitRegion?;
|
|
13
|
+
private readonly injectedClient?;
|
|
14
|
+
private readonly clientConfig?;
|
|
15
|
+
private readonly clientsByRegion;
|
|
16
|
+
constructor(options?: AwsSecretsManagerProviderOptions);
|
|
17
|
+
canHandle(reference: SecretReference): boolean;
|
|
18
|
+
getSecret(reference: SecretReference, options?: SecretFetchOptions): Promise<SecretValue>;
|
|
19
|
+
setSecret(reference: SecretReference, payload: SecretWritePayload): Promise<SecretRotationResult>;
|
|
20
|
+
rotateSecret(reference: SecretReference, payload: SecretWritePayload): Promise<SecretRotationResult>;
|
|
21
|
+
deleteSecret(reference: SecretReference): Promise<void>;
|
|
22
|
+
private getClient;
|
|
23
|
+
private parseReference;
|
|
24
|
+
private resolveRegion;
|
|
25
|
+
private buildVersionSelector;
|
|
26
|
+
private buildReference;
|
|
27
|
+
}
|
|
28
|
+
export {};
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
// @bun
|
|
2
|
+
import{Buffer as f}from"buffer";import{CreateSecretCommand as w,DeleteSecretCommand as v,GetSecretValueCommand as y,PutSecretValueCommand as R,SecretsManagerClient as I}from"@aws-sdk/client-secrets-manager";import{Buffer as g}from"buffer";class c extends Error{provider;reference;code;cause;constructor(e){super(e.message);this.name="SecretProviderError",this.provider=e.provider,this.reference=e.reference,this.code=e.code??"UNKNOWN",this.cause=e.cause}}function S(e){if(!e)throw new c({message:"Secret reference cannot be empty",provider:"unknown",reference:e,code:"INVALID"});let[r,t]=e.split("://");if(!r||!t)throw new c({message:`Invalid secret reference: ${e}`,provider:"unknown",reference:e,code:"INVALID"});let n=t.indexOf("?");if(n===-1)return{provider:r,path:t};let s=t.slice(0,n),i=t.slice(n+1),o=Object.fromEntries(i.split("&").filter(Boolean).map((a)=>{let[p,u]=a.split("="),m=p??"",h=u??"";return[decodeURIComponent(m),decodeURIComponent(h)]}));return{provider:r,path:s,extras:o}}function l(e){if(e.data instanceof Uint8Array)return e.data;if(e.encoding==="base64")return g.from(e.data,"base64");if(e.encoding==="binary")return g.from(e.data,"binary");return g.from(e.data,"utf-8")}var A=7;class C{id="aws-secrets-manager";explicitRegion;injectedClient;clientConfig;clientsByRegion=new Map;constructor(e={}){this.explicitRegion=e.region,this.injectedClient=e.client,this.clientConfig=e.clientConfig}canHandle(e){try{let r=S(e);return r.provider==="aws"&&(r.path==="secretsmanager"||r.path.startsWith("secretsmanager/"))}catch{return!1}}async getSecret(e,r){let t=this.parseReference(e),n=this.getClient(t.region),s=r?.version??t.stage??t.version,i={SecretId:t.secretId,...this.buildVersionSelector(s)};try{let o=await n.send(new y(i));return{data:N(o,e,this.id),version:typeof o.VersionId==="string"&&o.VersionId?o.VersionId:s,metadata:{region:t.region,secretId:t.secretId,...s?{requestedVersion:s}:{}},retrievedAt:new Date}}catch(o){throw d({error:o,provider:this.id,reference:e,operation:"getSecret"})}}async setSecret(e,r){let t=this.parseReference(e),n=this.getClient(t.region),s=l(r);try{let i=await n.send(new R({SecretId:t.secretId,SecretBinary:s})),o=typeof i.VersionId==="string"&&i.VersionId?i.VersionId:"latest";return{reference:this.buildReference(t.region,t.secretId,{version:o}),version:o}}catch(i){if(!V(i))throw d({error:i,provider:this.id,reference:e,operation:"putSecretValue"});if(P(t.secretId))throw new c({message:`Secret not found: ${t.secretId}`,provider:this.id,reference:e,code:"NOT_FOUND",cause:i});try{let o=await n.send(new w({Name:t.secretId,SecretBinary:s})),a=typeof o.VersionId==="string"&&o.VersionId?o.VersionId:"latest";return{reference:this.buildReference(t.region,t.secretId,{version:a}),version:a}}catch(o){throw d({error:o,provider:this.id,reference:e,operation:"createSecret"})}}}async rotateSecret(e,r){return this.setSecret(e,r)}async deleteSecret(e){let r=this.parseReference(e),t=this.getClient(r.region);try{await t.send(new v({SecretId:r.secretId,RecoveryWindowInDays:A}))}catch(n){throw d({error:n,provider:this.id,reference:e,operation:"deleteSecret"})}}getClient(e){if(this.injectedClient)return this.injectedClient;let r=this.clientsByRegion.get(e);if(r)return r;let t=new I({...this.clientConfig??{},region:e});return this.clientsByRegion.set(e,t),t}parseReference(e){let r=S(e);if(r.provider!=="aws")throw new c({message:`Unsupported secret provider: ${r.provider}`,provider:this.id,reference:e,code:"INVALID"});let t=r.path.split("/").filter(Boolean);if(t.length<3||t[0]!=="secretsmanager")throw new c({message:"Expected secret reference format aws://secretsmanager/{region}/{secretIdOrArn}[?version=...]",provider:this.id,reference:e,code:"INVALID"});let n=t[1],s=this.resolveRegion(n),i=t.slice(2).join("/");if(!i)throw new c({message:`Unable to resolve secret id from reference "${r.path}"`,provider:this.id,reference:e,code:"INVALID"});return{region:s,secretId:i,version:r.extras?.version,stage:r.extras?.stage}}resolveRegion(e){let r=e??this.explicitRegion??process.env.AWS_REGION??process.env.AWS_DEFAULT_REGION;if(!r)throw new c({message:"AWS region must be provided either in reference (aws://secretsmanager/{region}/...) or via AWS_REGION/AWS_DEFAULT_REGION.",provider:this.id,reference:"aws://secretsmanager//",code:"INVALID"});return r}buildVersionSelector(e){if(!e)return{};if(e==="latest"||e==="current")return{VersionStage:"AWSCURRENT"};if(e.startsWith("AWS"))return{VersionStage:e};return{VersionId:e}}buildReference(e,r,t){let n=`aws://secretsmanager/${e}/${r}`,s=t?Object.entries(t).filter(([,i])=>Boolean(i)).map(([i,o])=>`${encodeURIComponent(i)}=${encodeURIComponent(o)}`).join("&"):"";return s?`${n}?${s}`:n}}function N(e,r,t){if(!e||typeof e!=="object")throw new c({message:"Invalid AWS Secrets Manager response",provider:t,reference:r,code:"UNKNOWN",cause:e});let n=e;if(n.SecretBinary instanceof Uint8Array)return n.SecretBinary;if(typeof n.SecretBinary==="string")return f.from(n.SecretBinary,"base64");if(typeof n.SecretString==="string")return f.from(n.SecretString,"utf-8");throw new c({message:"AWS secret value is empty",provider:t,reference:r,code:"NOT_FOUND",cause:e})}function P(e){return e.startsWith("arn:aws:secretsmanager:")}function V(e){if(!e||typeof e!=="object")return!1;let r=e;if(typeof r.$metadata?.httpStatusCode==="number")return r.$metadata.httpStatusCode===404;return r.name==="ResourceNotFoundException"}function d(e){let{error:r,provider:t,reference:n,operation:s}=e;if(r instanceof c)return r;let i=typeof r==="object"&&r!==null&&"$metadata"in r&&typeof r.$metadata==="object"&&r.$metadata?.httpStatusCode,o=i===404?"NOT_FOUND":i===401||i===403?"FORBIDDEN":i===400?"INVALID":"UNKNOWN",a=r instanceof Error?r.message:`Unknown error during ${s}`;return new c({message:a,provider:t,reference:n,code:o,cause:r})}export{C as AwsSecretsManagerProvider};
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import type { SecretProvider, SecretReference, SecretRotationResult, SecretValue, SecretWritePayload } from './provider.js';
|
|
2
|
+
interface EnvSecretProviderOptions {
|
|
3
|
+
/**
|
|
4
|
+
* Optional map to alias secret references to environment variable names.
|
|
5
|
+
* Useful when referencing secrets from other providers (e.g. gcp://...)
|
|
6
|
+
* while still allowing local overrides.
|
|
7
|
+
*/
|
|
8
|
+
aliases?: Record<string, string>;
|
|
9
|
+
}
|
|
10
|
+
/**
|
|
11
|
+
* Environment-variable backed secret provider. Read-only by design.
|
|
12
|
+
* Allows overriding other secret providers by deriving environment variable
|
|
13
|
+
* names from secret references (or by using explicit aliases).
|
|
14
|
+
*/
|
|
15
|
+
export declare class EnvSecretProvider implements SecretProvider {
|
|
16
|
+
readonly id = "env";
|
|
17
|
+
private readonly aliases;
|
|
18
|
+
constructor(options?: EnvSecretProviderOptions);
|
|
19
|
+
canHandle(reference: SecretReference): boolean;
|
|
20
|
+
getSecret(reference: SecretReference): Promise<SecretValue>;
|
|
21
|
+
setSecret(reference: SecretReference, _payload: SecretWritePayload): Promise<SecretRotationResult>;
|
|
22
|
+
rotateSecret(reference: SecretReference, _payload: SecretWritePayload): Promise<SecretRotationResult>;
|
|
23
|
+
deleteSecret(reference: SecretReference): Promise<void>;
|
|
24
|
+
private resolveEnvKey;
|
|
25
|
+
private deriveEnvKey;
|
|
26
|
+
private forbiddenError;
|
|
27
|
+
}
|
|
28
|
+
export {};
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
// @bun
|
|
2
|
+
import{Buffer as i}from"buffer";class n extends Error{provider;reference;code;cause;constructor(e){super(e.message);this.name="SecretProviderError",this.provider=e.provider,this.reference=e.reference,this.code=e.code??"UNKNOWN",this.cause=e.cause}}function c(e){if(!e)throw new n({message:"Secret reference cannot be empty",provider:"unknown",reference:e,code:"INVALID"});let[r,t]=e.split("://");if(!r||!t)throw new n({message:`Invalid secret reference: ${e}`,provider:"unknown",reference:e,code:"INVALID"});let o=t.indexOf("?");if(o===-1)return{provider:r,path:t};let s=t.slice(0,o),a=t.slice(o+1),d=Object.fromEntries(a.split("&").filter(Boolean).map((f)=>{let[l,v]=f.split("="),S=l??"",u=v??"";return[decodeURIComponent(S),decodeURIComponent(u)]}));return{provider:r,path:s,extras:d}}function g(e){if(e.data instanceof Uint8Array)return e.data;if(e.encoding==="base64")return i.from(e.data,"base64");if(e.encoding==="binary")return i.from(e.data,"binary");return i.from(e.data,"utf-8")}class p{id="env";aliases;constructor(e={}){this.aliases=e.aliases??{}}canHandle(e){let r=this.resolveEnvKey(e);return r!==void 0&&process.env[r]!==void 0}async getSecret(e){let r=this.resolveEnvKey(e);if(!r)throw new n({message:`Unable to resolve environment variable for reference "${e}".`,provider:this.id,reference:e,code:"INVALID"});let t=process.env[r];if(t===void 0)throw new n({message:`Environment variable "${r}" not found for reference "${e}".`,provider:this.id,reference:e,code:"NOT_FOUND"});return{data:Buffer.from(t,"utf-8"),version:"current",metadata:{source:"env",envKey:r},retrievedAt:new Date}}async setSecret(e,r){throw this.forbiddenError("setSecret",e)}async rotateSecret(e,r){throw this.forbiddenError("rotateSecret",e)}async deleteSecret(e){throw this.forbiddenError("deleteSecret",e)}resolveEnvKey(e){if(!e)return;if(this.aliases[e])return this.aliases[e];if(!e.includes("://"))return e;try{let r=c(e);if(r.provider==="env")return r.path;if(r.extras?.env)return r.extras.env;return this.deriveEnvKey(r.path)}catch{return e}}deriveEnvKey(e){if(!e)return;return e.split(/[\/:\-\.]/).filter(Boolean).map((r)=>r.replace(/[^a-zA-Z0-9]/g,"_").replace(/_{2,}/g,"_").toUpperCase()).join("_")}forbiddenError(e,r){return new n({message:`EnvSecretProvider is read-only. "${e}" is not allowed for ${r}.`,provider:this.id,reference:r,code:"FORBIDDEN"})}}export{p as EnvSecretProvider};
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import { protos, SecretManagerServiceClient } from '@google-cloud/secret-manager';
|
|
2
|
+
import type { CallOptions } from 'google-gax';
|
|
3
|
+
import type { SecretProvider, SecretReference, SecretRotationResult, SecretValue, SecretWritePayload } from './provider.js';
|
|
4
|
+
type SecretManagerClient = SecretManagerServiceClient;
|
|
5
|
+
interface GcpSecretManagerProviderOptions {
|
|
6
|
+
projectId?: string;
|
|
7
|
+
client?: SecretManagerClient;
|
|
8
|
+
clientOptions?: ConstructorParameters<typeof SecretManagerServiceClient>[0];
|
|
9
|
+
defaultReplication?: protos.google.cloud.secretmanager.v1.IReplication;
|
|
10
|
+
}
|
|
11
|
+
export declare class GcpSecretManagerProvider implements SecretProvider {
|
|
12
|
+
readonly id = "gcp-secret-manager";
|
|
13
|
+
private readonly client;
|
|
14
|
+
private readonly explicitProjectId?;
|
|
15
|
+
private readonly replication;
|
|
16
|
+
constructor(options?: GcpSecretManagerProviderOptions);
|
|
17
|
+
canHandle(reference: SecretReference): boolean;
|
|
18
|
+
getSecret(reference: SecretReference, options?: {
|
|
19
|
+
version?: string;
|
|
20
|
+
}, callOptions?: CallOptions): Promise<SecretValue>;
|
|
21
|
+
setSecret(reference: SecretReference, payload: SecretWritePayload): Promise<SecretRotationResult>;
|
|
22
|
+
rotateSecret(reference: SecretReference, payload: SecretWritePayload): Promise<SecretRotationResult>;
|
|
23
|
+
deleteSecret(reference: SecretReference): Promise<void>;
|
|
24
|
+
private parseReference;
|
|
25
|
+
private buildNames;
|
|
26
|
+
private buildVersionName;
|
|
27
|
+
private ensureSecretExists;
|
|
28
|
+
}
|
|
29
|
+
export {};
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
// @bun
|
|
2
|
+
import{SecretManagerServiceClient as m}from"@google-cloud/secret-manager";import{Buffer as f}from"buffer";class s extends Error{provider;reference;code;cause;constructor(e){super(e.message);this.name="SecretProviderError",this.provider=e.provider,this.reference=e.reference,this.code=e.code??"UNKNOWN",this.cause=e.cause}}function S(e){if(!e)throw new s({message:"Secret reference cannot be empty",provider:"unknown",reference:e,code:"INVALID"});let[t,r]=e.split("://");if(!t||!r)throw new s({message:`Invalid secret reference: ${e}`,provider:"unknown",reference:e,code:"INVALID"});let o=r.indexOf("?");if(o===-1)return{provider:t,path:r};let c=r.slice(0,o),n=r.slice(o+1),a=Object.fromEntries(n.split("&").filter(Boolean).map((i)=>{let[d,l]=i.split("="),u=d??"",h=l??"";return[decodeURIComponent(u),decodeURIComponent(h)]}));return{provider:t,path:c,extras:a}}function g(e){if(e.data instanceof Uint8Array)return e.data;if(e.encoding==="base64")return f.from(e.data,"base64");if(e.encoding==="binary")return f.from(e.data,"binary");return f.from(e.data,"utf-8")}var N={automatic:{}};class I{id="gcp-secret-manager";client;explicitProjectId;replication;constructor(e={}){this.client=e.client??new m(e.clientOptions??{}),this.explicitProjectId=e.projectId,this.replication=e.defaultReplication??N}canHandle(e){try{return S(e).provider==="gcp"}catch{return!1}}async getSecret(e,t,r){let o=this.parseReference(e),c=this.buildVersionName(o,t?.version);try{let n=await this.client.accessSecretVersion({name:c},r??{}),[a]=n,i=a.payload;if(!i?.data)throw new s({message:`Secret payload empty for ${c}`,provider:this.id,reference:e,code:"UNKNOWN"});let d=v(a.name??c);return{data:i.data,version:d,metadata:i.dataCrc32c?{crc32c:i.dataCrc32c.toString()}:void 0,retrievedAt:new Date}}catch(n){throw p({error:n,provider:this.id,reference:e,operation:"access"})}}async setSecret(e,t){let r=this.parseReference(e),{secretName:o}=this.buildNames(r),c=g(t);await this.ensureSecretExists(r,t);try{let n=await this.client.addSecretVersion({parent:o,payload:{data:c}});if(!n)throw new s({message:`No version returned when adding secret version for ${o}`,provider:this.id,reference:e,code:"UNKNOWN"});let[a]=n,i=a?.name??`${o}/versions/latest`;return{reference:`gcp://${i}`,version:v(i)??"latest"}}catch(n){throw p({error:n,provider:this.id,reference:e,operation:"addSecretVersion"})}}async rotateSecret(e,t){return this.setSecret(e,t)}async deleteSecret(e){let t=this.parseReference(e),{secretName:r}=this.buildNames(t);try{await this.client.deleteSecret({name:r})}catch(o){throw p({error:o,provider:this.id,reference:e,operation:"delete"})}}parseReference(e){let t=S(e);if(t.provider!=="gcp")throw new s({message:`Unsupported secret provider: ${t.provider}`,provider:this.id,reference:e,code:"INVALID"});let r=t.path.split("/").filter(Boolean);if(r.length<4||r[0]!=="projects")throw new s({message:`Expected secret reference format gcp://projects/{project}/secrets/{secret}[(/versions/{version})] but received "${t.path}"`,provider:this.id,reference:e,code:"INVALID"});let o=r[1]??this.explicitProjectId;if(!o)throw new s({message:`Unable to resolve project or secret from reference "${t.path}"`,provider:this.id,reference:e,code:"INVALID"});let c=r.indexOf("secrets");if(c===-1||c+1>=r.length)throw new s({message:`Unable to resolve project or secret from reference "${t.path}"`,provider:this.id,reference:e,code:"INVALID"});let n=o,a=r[c+1];if(!a)throw new s({message:`Unable to resolve secret ID from reference "${t.path}"`,provider:this.id,reference:e,code:"INVALID"});let i=a,d=r.indexOf("versions"),l=t.extras?.version??(d!==-1&&d+1<r.length?r[d+1]:void 0);return{projectId:n,secretId:i,version:l}}buildNames(e){let t=e.projectId??this.explicitProjectId;if(!t)throw new s({message:"Project ID must be provided either in reference or provider configuration",provider:this.id,reference:`gcp://projects//secrets/${e.secretId}`,code:"INVALID"});let r=`projects/${t}`,o=`${r}/secrets/${e.secretId}`;return{projectParent:r,secretName:o}}buildVersionName(e,t){let{secretName:r}=this.buildNames(e),o=t??e.version??"latest";return`${r}/versions/${o}`}async ensureSecretExists(e,t){let{secretName:r,projectParent:o}=this.buildNames(e);try{await this.client.getSecret({name:r})}catch(c){let n=p({error:c,provider:this.id,reference:`gcp://${r}`,operation:"getSecret",suppressThrow:!0});if(!n||n.code!=="NOT_FOUND"){if(n)throw n;throw c}try{await this.client.createSecret({parent:o,secretId:e.secretId,secret:{replication:this.replication,labels:t.labels}})}catch(a){throw p({error:a,provider:this.id,reference:`gcp://${r}`,operation:"createSecret"})}}}}function v(e){let t=e.split("/").filter(Boolean),r=t.indexOf("versions");if(r===-1||r+1>=t.length)return;return t[r+1]}function p(e){let{error:t,provider:r,reference:o,operation:c,suppressThrow:n}=e;if(t instanceof s)return t;let a=y(t),i=t instanceof Error?t.message:`Unknown error during ${c}`,d=new s({message:i,provider:r,reference:o,code:a,cause:t});if(n)return d;throw d}function y(e){if(typeof e!=="object"||e===null)return"UNKNOWN";let r=e.code;if(r===5||r==="NOT_FOUND")return"NOT_FOUND";if(r===6||r==="ALREADY_EXISTS")return"INVALID";if(r===7||r==="PERMISSION_DENIED"||r===403)return"FORBIDDEN";if(r===3||r==="INVALID_ARGUMENT")return"INVALID";return"UNKNOWN"}export{I as GcpSecretManagerProvider};
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
// @bun
|
|
2
|
+
import{Buffer as y}from"buffer";import{CreateSecretCommand as E,DeleteSecretCommand as N,GetSecretValueCommand as C,PutSecretValueCommand as O,SecretsManagerClient as A}from"@aws-sdk/client-secrets-manager";import{Buffer as v}from"buffer";class s extends Error{provider;reference;code;cause;constructor(e){super(e.message);this.name="SecretProviderError",this.provider=e.provider,this.reference=e.reference,this.code=e.code??"UNKNOWN",this.cause=e.cause}}function d(e){if(!e)throw new s({message:"Secret reference cannot be empty",provider:"unknown",reference:e,code:"INVALID"});let[r,t]=e.split("://");if(!r||!t)throw new s({message:`Invalid secret reference: ${e}`,provider:"unknown",reference:e,code:"INVALID"});let n=t.indexOf("?");if(n===-1)return{provider:r,path:t};let i=t.slice(0,n),o=t.slice(n+1),c=Object.fromEntries(o.split("&").filter(Boolean).map((a)=>{let[p,u]=a.split("="),I=p??"",P=u??"";return[decodeURIComponent(I),decodeURIComponent(P)]}));return{provider:r,path:i,extras:c}}function l(e){if(e.data instanceof Uint8Array)return e.data;if(e.encoding==="base64")return v.from(e.data,"base64");if(e.encoding==="binary")return v.from(e.data,"binary");return v.from(e.data,"utf-8")}var b=7;class D{id="aws-secrets-manager";explicitRegion;injectedClient;clientConfig;clientsByRegion=new Map;constructor(e={}){this.explicitRegion=e.region,this.injectedClient=e.client,this.clientConfig=e.clientConfig}canHandle(e){try{let r=d(e);return r.provider==="aws"&&(r.path==="secretsmanager"||r.path.startsWith("secretsmanager/"))}catch{return!1}}async getSecret(e,r){let t=this.parseReference(e),n=this.getClient(t.region),i=r?.version??t.stage??t.version,o={SecretId:t.secretId,...this.buildVersionSelector(i)};try{let c=await n.send(new C(o));return{data:U(c,e,this.id),version:typeof c.VersionId==="string"&&c.VersionId?c.VersionId:i,metadata:{region:t.region,secretId:t.secretId,...i?{requestedVersion:i}:{}},retrievedAt:new Date}}catch(c){throw g({error:c,provider:this.id,reference:e,operation:"getSecret"})}}async setSecret(e,r){let t=this.parseReference(e),n=this.getClient(t.region),i=l(r);try{let o=await n.send(new O({SecretId:t.secretId,SecretBinary:i})),c=typeof o.VersionId==="string"&&o.VersionId?o.VersionId:"latest";return{reference:this.buildReference(t.region,t.secretId,{version:c}),version:c}}catch(o){if(!_(o))throw g({error:o,provider:this.id,reference:e,operation:"putSecretValue"});if(V(t.secretId))throw new s({message:`Secret not found: ${t.secretId}`,provider:this.id,reference:e,code:"NOT_FOUND",cause:o});try{let c=await n.send(new E({Name:t.secretId,SecretBinary:i})),a=typeof c.VersionId==="string"&&c.VersionId?c.VersionId:"latest";return{reference:this.buildReference(t.region,t.secretId,{version:a}),version:a}}catch(c){throw g({error:c,provider:this.id,reference:e,operation:"createSecret"})}}}async rotateSecret(e,r){return this.setSecret(e,r)}async deleteSecret(e){let r=this.parseReference(e),t=this.getClient(r.region);try{await t.send(new N({SecretId:r.secretId,RecoveryWindowInDays:b}))}catch(n){throw g({error:n,provider:this.id,reference:e,operation:"deleteSecret"})}}getClient(e){if(this.injectedClient)return this.injectedClient;let r=this.clientsByRegion.get(e);if(r)return r;let t=new A({...this.clientConfig??{},region:e});return this.clientsByRegion.set(e,t),t}parseReference(e){let r=d(e);if(r.provider!=="aws")throw new s({message:`Unsupported secret provider: ${r.provider}`,provider:this.id,reference:e,code:"INVALID"});let t=r.path.split("/").filter(Boolean);if(t.length<3||t[0]!=="secretsmanager")throw new s({message:"Expected secret reference format aws://secretsmanager/{region}/{secretIdOrArn}[?version=...]",provider:this.id,reference:e,code:"INVALID"});let n=t[1],i=this.resolveRegion(n),o=t.slice(2).join("/");if(!o)throw new s({message:`Unable to resolve secret id from reference "${r.path}"`,provider:this.id,reference:e,code:"INVALID"});return{region:i,secretId:o,version:r.extras?.version,stage:r.extras?.stage}}resolveRegion(e){let r=e??this.explicitRegion??process.env.AWS_REGION??process.env.AWS_DEFAULT_REGION;if(!r)throw new s({message:"AWS region must be provided either in reference (aws://secretsmanager/{region}/...) or via AWS_REGION/AWS_DEFAULT_REGION.",provider:this.id,reference:"aws://secretsmanager//",code:"INVALID"});return r}buildVersionSelector(e){if(!e)return{};if(e==="latest"||e==="current")return{VersionStage:"AWSCURRENT"};if(e.startsWith("AWS"))return{VersionStage:e};return{VersionId:e}}buildReference(e,r,t){let n=`aws://secretsmanager/${e}/${r}`,i=t?Object.entries(t).filter(([,o])=>Boolean(o)).map(([o,c])=>`${encodeURIComponent(o)}=${encodeURIComponent(c)}`).join("&"):"";return i?`${n}?${i}`:n}}function U(e,r,t){if(!e||typeof e!=="object")throw new s({message:"Invalid AWS Secrets Manager response",provider:t,reference:r,code:"UNKNOWN",cause:e});let n=e;if(n.SecretBinary instanceof Uint8Array)return n.SecretBinary;if(typeof n.SecretBinary==="string")return y.from(n.SecretBinary,"base64");if(typeof n.SecretString==="string")return y.from(n.SecretString,"utf-8");throw new s({message:"AWS secret value is empty",provider:t,reference:r,code:"NOT_FOUND",cause:e})}function V(e){return e.startsWith("arn:aws:secretsmanager:")}function _(e){if(!e||typeof e!=="object")return!1;let r=e;if(typeof r.$metadata?.httpStatusCode==="number")return r.$metadata.httpStatusCode===404;return r.name==="ResourceNotFoundException"}function g(e){let{error:r,provider:t,reference:n,operation:i}=e;if(r instanceof s)return r;let o=typeof r==="object"&&r!==null&&"$metadata"in r&&typeof r.$metadata==="object"&&r.$metadata?.httpStatusCode,c=o===404?"NOT_FOUND":o===401||o===403?"FORBIDDEN":o===400?"INVALID":"UNKNOWN",a=r instanceof Error?r.message:`Unknown error during ${i}`;return new s({message:a,provider:t,reference:n,code:c,cause:r})}class x{id="env";aliases;constructor(e={}){this.aliases=e.aliases??{}}canHandle(e){let r=this.resolveEnvKey(e);return r!==void 0&&process.env[r]!==void 0}async getSecret(e){let r=this.resolveEnvKey(e);if(!r)throw new s({message:`Unable to resolve environment variable for reference "${e}".`,provider:this.id,reference:e,code:"INVALID"});let t=process.env[r];if(t===void 0)throw new s({message:`Environment variable "${r}" not found for reference "${e}".`,provider:this.id,reference:e,code:"NOT_FOUND"});return{data:Buffer.from(t,"utf-8"),version:"current",metadata:{source:"env",envKey:r},retrievedAt:new Date}}async setSecret(e,r){throw this.forbiddenError("setSecret",e)}async rotateSecret(e,r){throw this.forbiddenError("rotateSecret",e)}async deleteSecret(e){throw this.forbiddenError("deleteSecret",e)}resolveEnvKey(e){if(!e)return;if(this.aliases[e])return this.aliases[e];if(!e.includes("://"))return e;try{let r=d(e);if(r.provider==="env")return r.path;if(r.extras?.env)return r.extras.env;return this.deriveEnvKey(r.path)}catch{return e}}deriveEnvKey(e){if(!e)return;return e.split(/[\/:\-\.]/).filter(Boolean).map((r)=>r.replace(/[^a-zA-Z0-9]/g,"_").replace(/_{2,}/g,"_").toUpperCase()).join("_")}forbiddenError(e,r){return new s({message:`EnvSecretProvider is read-only. "${e}" is not allowed for ${r}.`,provider:this.id,reference:r,code:"FORBIDDEN"})}}import{SecretManagerServiceClient as W}from"@google-cloud/secret-manager";var j={automatic:{}};class T{id="gcp-secret-manager";client;explicitProjectId;replication;constructor(e={}){this.client=e.client??new W(e.clientOptions??{}),this.explicitProjectId=e.projectId,this.replication=e.defaultReplication??j}canHandle(e){try{return d(e).provider==="gcp"}catch{return!1}}async getSecret(e,r,t){let n=this.parseReference(e),i=this.buildVersionName(n,r?.version);try{let o=await this.client.accessSecretVersion({name:i},t??{}),[c]=o,a=c.payload;if(!a?.data)throw new s({message:`Secret payload empty for ${i}`,provider:this.id,reference:e,code:"UNKNOWN"});let p=w(c.name??i);return{data:a.data,version:p,metadata:a.dataCrc32c?{crc32c:a.dataCrc32c.toString()}:void 0,retrievedAt:new Date}}catch(o){throw S({error:o,provider:this.id,reference:e,operation:"access"})}}async setSecret(e,r){let t=this.parseReference(e),{secretName:n}=this.buildNames(t),i=l(r);await this.ensureSecretExists(t,r);try{let o=await this.client.addSecretVersion({parent:n,payload:{data:i}});if(!o)throw new s({message:`No version returned when adding secret version for ${n}`,provider:this.id,reference:e,code:"UNKNOWN"});let[c]=o,a=c?.name??`${n}/versions/latest`;return{reference:`gcp://${a}`,version:w(a)??"latest"}}catch(o){throw S({error:o,provider:this.id,reference:e,operation:"addSecretVersion"})}}async rotateSecret(e,r){return this.setSecret(e,r)}async deleteSecret(e){let r=this.parseReference(e),{secretName:t}=this.buildNames(r);try{await this.client.deleteSecret({name:t})}catch(n){throw S({error:n,provider:this.id,reference:e,operation:"delete"})}}parseReference(e){let r=d(e);if(r.provider!=="gcp")throw new s({message:`Unsupported secret provider: ${r.provider}`,provider:this.id,reference:e,code:"INVALID"});let t=r.path.split("/").filter(Boolean);if(t.length<4||t[0]!=="projects")throw new s({message:`Expected secret reference format gcp://projects/{project}/secrets/{secret}[(/versions/{version})] but received "${r.path}"`,provider:this.id,reference:e,code:"INVALID"});let n=t[1]??this.explicitProjectId;if(!n)throw new s({message:`Unable to resolve project or secret from reference "${r.path}"`,provider:this.id,reference:e,code:"INVALID"});let i=t.indexOf("secrets");if(i===-1||i+1>=t.length)throw new s({message:`Unable to resolve project or secret from reference "${r.path}"`,provider:this.id,reference:e,code:"INVALID"});let o=n,c=t[i+1];if(!c)throw new s({message:`Unable to resolve secret ID from reference "${r.path}"`,provider:this.id,reference:e,code:"INVALID"});let a=c,p=t.indexOf("versions"),u=r.extras?.version??(p!==-1&&p+1<t.length?t[p+1]:void 0);return{projectId:o,secretId:a,version:u}}buildNames(e){let r=e.projectId??this.explicitProjectId;if(!r)throw new s({message:"Project ID must be provided either in reference or provider configuration",provider:this.id,reference:`gcp://projects//secrets/${e.secretId}`,code:"INVALID"});let t=`projects/${r}`,n=`${t}/secrets/${e.secretId}`;return{projectParent:t,secretName:n}}buildVersionName(e,r){let{secretName:t}=this.buildNames(e),n=r??e.version??"latest";return`${t}/versions/${n}`}async ensureSecretExists(e,r){let{secretName:t,projectParent:n}=this.buildNames(e);try{await this.client.getSecret({name:t})}catch(i){let o=S({error:i,provider:this.id,reference:`gcp://${t}`,operation:"getSecret",suppressThrow:!0});if(!o||o.code!=="NOT_FOUND"){if(o)throw o;throw i}try{await this.client.createSecret({parent:n,secretId:e.secretId,secret:{replication:this.replication,labels:r.labels}})}catch(c){throw S({error:c,provider:this.id,reference:`gcp://${t}`,operation:"createSecret"})}}}}function w(e){let r=e.split("/").filter(Boolean),t=r.indexOf("versions");if(t===-1||t+1>=r.length)return;return r[t+1]}function S(e){let{error:r,provider:t,reference:n,operation:i,suppressThrow:o}=e;if(r instanceof s)return r;let c=k(r),a=r instanceof Error?r.message:`Unknown error during ${i}`,p=new s({message:a,provider:t,reference:n,code:c,cause:r});if(o)return p;throw p}function k(e){if(typeof e!=="object"||e===null)return"UNKNOWN";let t=e.code;if(t===5||t==="NOT_FOUND")return"NOT_FOUND";if(t===6||t==="ALREADY_EXISTS")return"INVALID";if(t===7||t==="PERMISSION_DENIED"||t===403)return"FORBIDDEN";if(t===3||t==="INVALID_ARGUMENT")return"INVALID";return"UNKNOWN"}class L{id;providers=[];registrationCounter=0;constructor(e={}){this.id=e.id??"secret-provider-manager";let r=e.providers??[];for(let t of r)this.register(t.provider,{priority:t.priority})}register(e,r={}){return this.providers.push({provider:e,priority:r.priority??0,order:this.registrationCounter++}),this.providers.sort((t,n)=>{if(t.priority!==n.priority)return n.priority-t.priority;return t.order-n.order}),this}canHandle(e){return this.providers.some(({provider:r})=>h(r,e))}async getSecret(e,r){let t=[];for(let{provider:n}of this.providers){if(!h(n,e))continue;try{return await n.getSecret(e,r)}catch(i){if(i instanceof s){if(t.push(i),i.code!=="NOT_FOUND")break;continue}throw i}}throw this.composeError("getSecret",e,t,r?.version)}async setSecret(e,r){return this.delegateToFirst("setSecret",e,(t)=>t.setSecret(e,r))}async rotateSecret(e,r){return this.delegateToFirst("rotateSecret",e,(t)=>t.rotateSecret(e,r))}async deleteSecret(e){await this.delegateToFirst("deleteSecret",e,(r)=>r.deleteSecret(e))}async delegateToFirst(e,r,t){let n=[];for(let{provider:i}of this.providers){if(!h(i,r))continue;try{return await t(i)}catch(o){if(o instanceof s){n.push(o);continue}throw o}}throw this.composeError(e,r,n)}composeError(e,r,t,n){if(t.length===1){let[o]=t;if(o)return o}let i=[`No registered secret provider could ${e}`,`reference "${r}"`];if(n)i.push(`(version: ${n})`);if(t.length>1)i.push(`Attempts: ${t.map((o)=>`${o.provider}:${o.code}`).join(", ")}`);return new s({message:i.join(" "),provider:this.id,reference:r,code:t.length>0?t[t.length-1]?.code??"UNKNOWN":"UNKNOWN",cause:t})}}function h(e,r){try{return e.canHandle(r)}catch{return!1}}import{Buffer as R}from"buffer";var m=/^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i;class F{id="scaleway-secret-manager";token;defaultRegion;defaultProjectId;baseUrl;fetchFn;constructor(e={}){this.token=e.token??process.env.SCW_SECRET_KEY??process.env.SCALEWAY_SECRET_KEY??"",this.defaultRegion=e.defaultRegion??process.env.SCW_DEFAULT_REGION??process.env.SCW_REGION,this.defaultProjectId=e.defaultProjectId??process.env.SCW_DEFAULT_PROJECT_ID??process.env.SCW_PROJECT_ID,this.baseUrl=e.baseUrl??"https://api.scaleway.com",this.fetchFn=e.fetch??fetch}canHandle(e){try{let r=d(e);return r.provider==="scw"&&(r.path==="secret-manager"||r.path.startsWith("secret-manager/"))}catch{return!1}}async getSecret(e,r){let t=this.parseReference(e);if(!this.token)throw new s({message:"Scaleway secret manager token is missing (set SCW_SECRET_KEY / SCALEWAY_SECRET_KEY).",provider:this.id,reference:e,code:"FORBIDDEN"});if(!m.test(t.secretIdOrName))throw new s({message:"Scaleway getSecret requires a secretId (uuid) reference, not a secret name.",provider:this.id,reference:e,code:"INVALID"});let n=r?.version??t.revision??"latest",i=`${this.baseUrl}/secret-manager/v1beta1/regions/${encodeURIComponent(t.region)}/secrets/${encodeURIComponent(t.secretIdOrName)}/versions/${encodeURIComponent(n)}/access`,o=await this.fetchFn(i,{method:"GET",headers:{"X-Auth-Token":this.token}});if(!o.ok)throw await f({response:o,provider:this.id,reference:e,operation:"getSecret"});let c=await o.json(),a=B(c);return{data:R.from(a,"base64"),version:n,metadata:{region:t.region,secretId:t.secretIdOrName},retrievedAt:new Date}}async setSecret(e,r){let t=this.parseReference(e);if(!this.token)throw new s({message:"Scaleway secret manager token is missing (set SCW_SECRET_KEY / SCALEWAY_SECRET_KEY).",provider:this.id,reference:e,code:"FORBIDDEN"});let n=l(r),i=R.from(n).toString("base64"),o=m.test(t.secretIdOrName)?t.secretIdOrName:await this.createSecret({region:t.region,name:t.secretIdOrName,reference:e}),c=await this.createSecretVersion({region:t.region,secretId:o,dataB64:i,reference:e});return{reference:this.buildReference(t.region,o,{version:c}),version:c}}async rotateSecret(e,r){return this.setSecret(e,r)}async deleteSecret(e){let r=this.parseReference(e);if(!this.token)throw new s({message:"Scaleway secret manager token is missing (set SCW_SECRET_KEY / SCALEWAY_SECRET_KEY).",provider:this.id,reference:e,code:"FORBIDDEN"});if(!m.test(r.secretIdOrName))throw new s({message:"Scaleway deleteSecret requires a secretId (uuid) reference, not a secret name.",provider:this.id,reference:e,code:"INVALID"});let t=`${this.baseUrl}/secret-manager/v1beta1/regions/${encodeURIComponent(r.region)}/secrets/${encodeURIComponent(r.secretIdOrName)}`,n=await this.fetchFn(t,{method:"DELETE",headers:{"X-Auth-Token":this.token}});if(!n.ok)throw await f({response:n,provider:this.id,reference:e,operation:"deleteSecret"})}parseReference(e){let r=d(e);if(r.provider!=="scw")throw new s({message:`Unsupported secret provider: ${r.provider}`,provider:this.id,reference:e,code:"INVALID"});let t=r.path.split("/").filter(Boolean);if(t.length<2||t[0]!=="secret-manager")throw new s({message:"Expected secret reference format scw://secret-manager/{region}/{secretIdOrName}[?version=...]",provider:this.id,reference:e,code:"INVALID"});let n=t[1]??this.defaultRegion;if(!n)throw new s({message:"Scaleway region must be provided either in reference (scw://secret-manager/{region}/...) or via SCW_DEFAULT_REGION/SCW_REGION.",provider:this.id,reference:e,code:"INVALID"});let i=t.slice(2).join("/");if(!i)throw new s({message:`Unable to resolve secret id/name from reference "${r.path}"`,provider:this.id,reference:e,code:"INVALID"});return{region:n,secretIdOrName:i,revision:r.extras?.version}}async createSecret(e){let r=this.defaultProjectId;if(!r)throw new s({message:"Scaleway project id is required to create secrets by name (set SCW_DEFAULT_PROJECT_ID/SCW_PROJECT_ID).",provider:this.id,reference:e.reference,code:"INVALID"});let t=`${this.baseUrl}/secret-manager/v1beta1/regions/${encodeURIComponent(e.region)}/secrets`,n=await this.fetchFn(t,{method:"POST",headers:{"Content-Type":"application/json","X-Auth-Token":this.token},body:JSON.stringify({name:e.name,project_id:r})});if(!n.ok)throw await f({response:n,provider:this.id,reference:e.reference,operation:"createSecret"});let i=await n.json();return M(i)}async createSecretVersion(e){let r=`${this.baseUrl}/secret-manager/v1beta1/regions/${encodeURIComponent(e.region)}/secrets/${encodeURIComponent(e.secretId)}/versions`,t=await this.fetchFn(r,{method:"POST",headers:{"Content-Type":"application/json","X-Auth-Token":this.token},body:JSON.stringify({data:e.dataB64})});if(!t.ok)throw await f({response:t,provider:this.id,reference:e.reference,operation:"createSecretVersion"});let n=await t.json();return K(n)??"latest"}buildReference(e,r,t){let n=`scw://secret-manager/${e}/${r}`,i=t?Object.entries(t).filter(([,o])=>Boolean(o)).map(([o,c])=>`${encodeURIComponent(o)}=${encodeURIComponent(c)}`).join("&"):"";return i?`${n}?${i}`:n}}function B(e){if(!e||typeof e!=="object")throw Error("Invalid scaleway secret payload");let r=e;if(typeof r.data==="string"&&r.data)return r.data;throw Error("Scaleway secret payload is missing data")}function M(e){if(!e||typeof e!=="object")throw Error("Invalid scaleway createSecret payload");let r=e;if(typeof r.id==="string"&&r.id)return r.id;throw Error("Scaleway createSecret response is missing id")}function K(e){if(!e||typeof e!=="object")return;let r=e;if(typeof r.revision==="number")return String(r.revision);if(typeof r.revision==="string"&&r.revision)return r.revision;if(typeof r.id==="string"&&r.id)return r.id;return}async function f(e){let{response:r,provider:t,reference:n,operation:i}=e,o=r.status===404?"NOT_FOUND":r.status===401||r.status===403?"FORBIDDEN":r.status>=400&&r.status<500?"INVALID":"UNKNOWN",c=await G(r),a=c?`Scaleway Secret Manager ${i} failed (${r.status}): ${c}`:`Scaleway Secret Manager ${i} failed (${r.status})`;return new s({message:a,provider:t,reference:n,code:o})}async function G(e){try{let t=(await e.text()).trim();return t.length?t:void 0}catch{return}}export{D as AwsSecretsManagerProvider,x as EnvSecretProvider,T as GcpSecretManagerProvider,F as ScalewaySecretManagerProvider,s as SecretProviderError,L as SecretProviderManager,l as normalizeSecretPayload,d as parseSecretUri};
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
import type { SecretProvider, SecretReference, SecretRotationResult, SecretValue, SecretWritePayload } from './provider.js';
|
|
2
|
+
interface RegisterOptions {
|
|
3
|
+
/**
|
|
4
|
+
* Larger priority values are attempted first. Defaults to 0.
|
|
5
|
+
*/
|
|
6
|
+
priority?: number;
|
|
7
|
+
}
|
|
8
|
+
export interface SecretProviderManagerOptions {
|
|
9
|
+
/**
|
|
10
|
+
* Override manager identifier. Defaults to "secret-provider-manager".
|
|
11
|
+
*/
|
|
12
|
+
id?: string;
|
|
13
|
+
/**
|
|
14
|
+
* Providers to pre-register. They are registered in array order with
|
|
15
|
+
* descending priority (first entry wins ties).
|
|
16
|
+
*/
|
|
17
|
+
providers?: {
|
|
18
|
+
provider: SecretProvider;
|
|
19
|
+
priority?: number;
|
|
20
|
+
}[];
|
|
21
|
+
}
|
|
22
|
+
/**
|
|
23
|
+
* Composite secret provider that delegates to registered providers.
|
|
24
|
+
* Providers are attempted in order of descending priority, respecting the
|
|
25
|
+
* registration order for ties. This enables privileged overrides (e.g.
|
|
26
|
+
* environment variables) while still supporting durable backends like GCP
|
|
27
|
+
* Secret Manager.
|
|
28
|
+
*/
|
|
29
|
+
export declare class SecretProviderManager implements SecretProvider {
|
|
30
|
+
readonly id: string;
|
|
31
|
+
private readonly providers;
|
|
32
|
+
private registrationCounter;
|
|
33
|
+
constructor(options?: SecretProviderManagerOptions);
|
|
34
|
+
register(provider: SecretProvider, options?: RegisterOptions): this;
|
|
35
|
+
canHandle(reference: SecretReference): boolean;
|
|
36
|
+
getSecret(reference: SecretReference, options?: SecretFetchOptions): Promise<SecretValue>;
|
|
37
|
+
setSecret(reference: SecretReference, payload: SecretWritePayload): Promise<SecretRotationResult>;
|
|
38
|
+
rotateSecret(reference: SecretReference, payload: SecretWritePayload): Promise<SecretRotationResult>;
|
|
39
|
+
deleteSecret(reference: SecretReference): Promise<void>;
|
|
40
|
+
private delegateToFirst;
|
|
41
|
+
private composeError;
|
|
42
|
+
}
|
|
43
|
+
type SecretFetchOptions = Parameters<SecretProvider['getSecret']>[1];
|
|
44
|
+
export {};
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
// @bun
|
|
2
|
+
import{Buffer as s}from"buffer";class c extends Error{provider;reference;code;cause;constructor(e){super(e.message);this.name="SecretProviderError",this.provider=e.provider,this.reference=e.reference,this.code=e.code??"UNKNOWN",this.cause=e.cause}}function y(e){if(!e)throw new c({message:"Secret reference cannot be empty",provider:"unknown",reference:e,code:"INVALID"});let[t,r]=e.split("://");if(!t||!r)throw new c({message:`Invalid secret reference: ${e}`,provider:"unknown",reference:e,code:"INVALID"});let o=r.indexOf("?");if(o===-1)return{provider:t,path:r};let i=r.slice(0,o),n=r.slice(o+1),d=Object.fromEntries(n.split("&").filter(Boolean).map((p)=>{let[S,f]=p.split("="),u=S??"",l=f??"";return[decodeURIComponent(u),decodeURIComponent(l)]}));return{provider:t,path:i,extras:d}}function h(e){if(e.data instanceof Uint8Array)return e.data;if(e.encoding==="base64")return s.from(e.data,"base64");if(e.encoding==="binary")return s.from(e.data,"binary");return s.from(e.data,"utf-8")}class v{id;providers=[];registrationCounter=0;constructor(e={}){this.id=e.id??"secret-provider-manager";let t=e.providers??[];for(let r of t)this.register(r.provider,{priority:r.priority})}register(e,t={}){return this.providers.push({provider:e,priority:t.priority??0,order:this.registrationCounter++}),this.providers.sort((r,o)=>{if(r.priority!==o.priority)return o.priority-r.priority;return r.order-o.order}),this}canHandle(e){return this.providers.some(({provider:t})=>a(t,e))}async getSecret(e,t){let r=[];for(let{provider:o}of this.providers){if(!a(o,e))continue;try{return await o.getSecret(e,t)}catch(i){if(i instanceof c){if(r.push(i),i.code!=="NOT_FOUND")break;continue}throw i}}throw this.composeError("getSecret",e,r,t?.version)}async setSecret(e,t){return this.delegateToFirst("setSecret",e,(r)=>r.setSecret(e,t))}async rotateSecret(e,t){return this.delegateToFirst("rotateSecret",e,(r)=>r.rotateSecret(e,t))}async deleteSecret(e){await this.delegateToFirst("deleteSecret",e,(t)=>t.deleteSecret(e))}async delegateToFirst(e,t,r){let o=[];for(let{provider:i}of this.providers){if(!a(i,t))continue;try{return await r(i)}catch(n){if(n instanceof c){o.push(n);continue}throw n}}throw this.composeError(e,t,o)}composeError(e,t,r,o){if(r.length===1){let[n]=r;if(n)return n}let i=[`No registered secret provider could ${e}`,`reference "${t}"`];if(o)i.push(`(version: ${o})`);if(r.length>1)i.push(`Attempts: ${r.map((n)=>`${n.provider}:${n.code}`).join(", ")}`);return new c({message:i.join(" "),provider:this.id,reference:t,code:r.length>0?r[r.length-1]?.code??"UNKNOWN":"UNKNOWN",cause:r})}}function a(e,t){try{return e.canHandle(t)}catch{return!1}}export{v as SecretProviderManager};
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
export type SecretReference = string;
|
|
2
|
+
export interface SecretValue {
|
|
3
|
+
data: Uint8Array;
|
|
4
|
+
version?: string;
|
|
5
|
+
metadata?: Record<string, string>;
|
|
6
|
+
retrievedAt: Date;
|
|
7
|
+
}
|
|
8
|
+
export interface SecretFetchOptions {
|
|
9
|
+
version?: string;
|
|
10
|
+
}
|
|
11
|
+
export type SecretPayloadEncoding = 'utf-8' | 'base64' | 'binary';
|
|
12
|
+
export interface SecretWritePayload {
|
|
13
|
+
data: string | Uint8Array;
|
|
14
|
+
encoding?: SecretPayloadEncoding;
|
|
15
|
+
contentType?: string;
|
|
16
|
+
labels?: Record<string, string>;
|
|
17
|
+
}
|
|
18
|
+
export interface SecretRotationResult {
|
|
19
|
+
reference: SecretReference;
|
|
20
|
+
version: string;
|
|
21
|
+
}
|
|
22
|
+
export interface SecretProvider {
|
|
23
|
+
readonly id: string;
|
|
24
|
+
canHandle(reference: SecretReference): boolean;
|
|
25
|
+
getSecret(reference: SecretReference, options?: SecretFetchOptions): Promise<SecretValue>;
|
|
26
|
+
setSecret(reference: SecretReference, payload: SecretWritePayload): Promise<SecretRotationResult>;
|
|
27
|
+
rotateSecret(reference: SecretReference, payload: SecretWritePayload): Promise<SecretRotationResult>;
|
|
28
|
+
deleteSecret(reference: SecretReference): Promise<void>;
|
|
29
|
+
}
|
|
30
|
+
export interface ParsedSecretUri {
|
|
31
|
+
provider: string;
|
|
32
|
+
path: string;
|
|
33
|
+
extras?: Record<string, string>;
|
|
34
|
+
}
|
|
35
|
+
export declare class SecretProviderError extends Error {
|
|
36
|
+
readonly provider: string;
|
|
37
|
+
readonly reference: SecretReference;
|
|
38
|
+
readonly code: 'NOT_FOUND' | 'FORBIDDEN' | 'INVALID' | 'UNKNOWN';
|
|
39
|
+
readonly cause?: unknown;
|
|
40
|
+
constructor(params: {
|
|
41
|
+
message: string;
|
|
42
|
+
provider: string;
|
|
43
|
+
reference: SecretReference;
|
|
44
|
+
code?: SecretProviderError['code'];
|
|
45
|
+
cause?: unknown;
|
|
46
|
+
});
|
|
47
|
+
}
|
|
48
|
+
export declare function parseSecretUri(reference: SecretReference): ParsedSecretUri;
|
|
49
|
+
export declare function normalizeSecretPayload(payload: SecretWritePayload): Uint8Array;
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
// @bun
|
|
2
|
+
import{Buffer as o}from"buffer";class c extends Error{provider;reference;code;cause;constructor(e){super(e.message);this.name="SecretProviderError",this.provider=e.provider,this.reference=e.reference,this.code=e.code??"UNKNOWN",this.cause=e.cause}}function g(e){if(!e)throw new c({message:"Secret reference cannot be empty",provider:"unknown",reference:e,code:"INVALID"});let[t,r]=e.split("://");if(!t||!r)throw new c({message:`Invalid secret reference: ${e}`,provider:"unknown",reference:e,code:"INVALID"});let n=r.indexOf("?");if(n===-1)return{provider:t,path:r};let i=r.slice(0,n),s=r.slice(n+1),a=Object.fromEntries(s.split("&").filter(Boolean).map((d)=>{let[f,S]=d.split("="),p=f??"",u=S??"";return[decodeURIComponent(p),decodeURIComponent(u)]}));return{provider:t,path:i,extras:a}}function R(e){if(e.data instanceof Uint8Array)return e.data;if(e.encoding==="base64")return o.from(e.data,"base64");if(e.encoding==="binary")return o.from(e.data,"binary");return o.from(e.data,"utf-8")}export{c as SecretProviderError,R as normalizeSecretPayload,g as parseSecretUri};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
import type { SecretFetchOptions, SecretProvider, SecretReference, SecretRotationResult, SecretValue, SecretWritePayload } from './provider.js';
|
|
2
|
+
interface ScalewaySecretManagerProviderOptions {
|
|
3
|
+
/**
|
|
4
|
+
* Scaleway API token (SCW secret key). If omitted, uses env vars.
|
|
5
|
+
* Header: X-Auth-Token
|
|
6
|
+
*/
|
|
7
|
+
token?: string;
|
|
8
|
+
/** Default region when not present in reference (e.g. fr-par). */
|
|
9
|
+
defaultRegion?: string;
|
|
10
|
+
/** Default project id used when creating secrets by name. */
|
|
11
|
+
defaultProjectId?: string;
|
|
12
|
+
/** Override API base url (defaults to https://api.scaleway.com). */
|
|
13
|
+
baseUrl?: string;
|
|
14
|
+
/** Inject fetch for tests. */
|
|
15
|
+
fetch?: typeof fetch;
|
|
16
|
+
}
|
|
17
|
+
export declare class ScalewaySecretManagerProvider implements SecretProvider {
|
|
18
|
+
readonly id = "scaleway-secret-manager";
|
|
19
|
+
private readonly token;
|
|
20
|
+
private readonly defaultRegion?;
|
|
21
|
+
private readonly defaultProjectId?;
|
|
22
|
+
private readonly baseUrl;
|
|
23
|
+
private readonly fetchFn;
|
|
24
|
+
constructor(options?: ScalewaySecretManagerProviderOptions);
|
|
25
|
+
canHandle(reference: SecretReference): boolean;
|
|
26
|
+
getSecret(reference: SecretReference, options?: SecretFetchOptions): Promise<SecretValue>;
|
|
27
|
+
setSecret(reference: SecretReference, payload: SecretWritePayload): Promise<SecretRotationResult>;
|
|
28
|
+
rotateSecret(reference: SecretReference, payload: SecretWritePayload): Promise<SecretRotationResult>;
|
|
29
|
+
deleteSecret(reference: SecretReference): Promise<void>;
|
|
30
|
+
private parseReference;
|
|
31
|
+
private createSecret;
|
|
32
|
+
private createSecretVersion;
|
|
33
|
+
private buildReference;
|
|
34
|
+
}
|
|
35
|
+
export {};
|