Optionalopts: ComponentResourceOptionsReadonlyprojectReadonlyprojectThe project slug (the component name).
ReadonlysecretsThe AWS Secrets Manager path this project's sync writes to.
Exposed because the path has two ends and they must agree: the sync WRITES
it, and the service's env.ts (or getSecretContentsAsEcsSecretArgs) READS
it. Three programs had hardcoded the derived string on the read side —
"/cfx/internal-dashboard/doppler" — which is a second, independent
computation of the rule defaultSecretsManagerPath exists to keep singular.
Read it off the project instead.
ReadonlyurnThe stable logical URN used to distinctly address a resource, both before and after deployments.
ProtectedgetRetrieves the data produces by initialize. The data is
immediately available in a derived class's constructor after the
super(...) call to ComponentResource.
Returns the provider for the given module member, if one exists.
ProtectedinitializeCan be overridden by a subclass to asynchronously initialize data for this component automatically when constructed. The data will be available immediately for subclass constructors to use. To access the data use getData.
Optionalopts: ComponentResourceOptionsOptionalname: stringOptionaltype: stringWrite a secret into this stack's config. Masked by default; pass
visibility: "unmasked" for non-sensitive values like an address or
namespace id.
The value is whatever the calling stack computed, so dev and prod hold
genuinely different values — each stack writes only its own config.
Optionalopts: { visibility?: string }ProtectedregisterRegisters synthetic outputs that a component has initialized, usually by allocating other child sub-resources and propagating their resulting property values.
Component resources can call this at the end of their constructor to indicate that they are done creating child resources. This is not strictly necessary as this will automatically be called after the initialize method completes.
Optionaloutputs: Inputs | Promise<Inputs> | Output<Inputs>StaticisReturns true if the given object is a CustomResource. This is designed to work even when multiple copies of the Pulumi SDK have been loaded into the same process.
Owns a package's Doppler project outright — the project, its environments, its Secrets Manager sync, and the secrets written into it. The Doppler analogue of AuroraWorkloadUser / ValkeyWorkloadUser.
One Doppler project per service, owned by that service's Pulumi program, and ONE config per instance — the stack's. A stack is an environment here, so
cfx-deposit-api/devis written by the dev stack andcfx-deposit-api/prodby the prod stack, each with its own values. There is no environment argument because there is no correct value other thanpulumi.getStack().NOTE the asymmetry between the two resources this declares. The environment is per-stack and never contended: dev owns
dev, prod ownsprod. The PROJECT is workplace-scoped and shared, so both stacks declare the same object while holding separate state — exactly one stack can create it, and the other must adopt it with a one-offpulumi import, or its apply dies with Doppler's 400 "Project name already exists in this workplace." That is why every service's project is imported into BOTH stacks, and why a brand-new service needs one import (in whichever environment deploys second) rather than none.There is NO per-service identity and NO per-service GitHub config: one
doppler-<env>identity (matched by a wildcardsub+ref: refs/heads/main) authenticates every deploy. Adding a service is just another instance of this component — no Doppler-side setup, no manual grant.That identity is workplace-admin-scoped, so it can reach every project and every config,
devandprodalike. The environment split is enforced by WHICH identity CI hands a job —doppler-devis matched onsub: …:environment:*-devanddoppler-prodon*-prod— not by Doppler permissions. That is a deliberate trade: Doppler tiesaccess_all_environmentsto the admin role and refuses to scope it down, and admin is the floor for creating a project, creating its environments, or writing its description.