@ciqol/resenv 0.1.0-beta.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/CONTRIBUTING.md +189 -0
- package/LICENSE +21 -0
- package/README.md +243 -0
- package/SECURITY.md +74 -0
- package/assert-safe-diagnostics.cjs +15 -0
- package/bin/resenv.cjs +91 -0
- package/bin/resenv.mjs +1 -0
- package/commands.cjs +85 -0
- package/docs/build.md +136 -0
- package/docs/dependencies.md +505 -0
- package/docs/doppler.md +146 -0
- package/docs/maintainer-handoff.md +112 -0
- package/docs/maturity.md +61 -0
- package/docs/public-readiness.md +138 -0
- package/docs/release-security.md +134 -0
- package/docs/releasing.md +143 -0
- package/docs/security-exceptions.json +139 -0
- package/docs/security-performance-review.md +150 -0
- package/docs/validation.md +700 -0
- package/doppler/auth.cjs +125 -0
- package/doppler/bridge.cjs +66 -0
- package/doppler/http.cjs +77 -0
- package/doppler/references.cjs +28 -0
- package/doppler/resolve.cjs +58 -0
- package/doppler/system.cjs +99 -0
- package/doppler-worker.cjs +28 -0
- package/doppler-worker.mjs +1 -0
- package/errors.cjs +12 -0
- package/index.cjs +88 -0
- package/index.d.cts +1 -0
- package/index.d.mts +1 -0
- package/index.mjs +1 -0
- package/package.json +89 -0
- package/preload.cjs +31 -0
- package/resolve-commands.cjs +5 -0
- package/resolve-commands.d.cts +1 -0
- package/resolve-commands.d.mts +1 -0
- package/resolve-commands.mjs +1 -0
- package/resolve-doppler.cjs +4 -0
- package/resolve-doppler.d.cts +1 -0
- package/resolve-doppler.d.mts +1 -0
- package/resolve-doppler.mjs +1 -0
- package/resolve.cjs +5 -0
- package/resolve.d.cts +1 -0
- package/resolve.d.mts +1 -0
- package/resolve.mjs +1 -0
- package/types/bin/resenv.d.ts +2 -0
- package/types/src/assert-safe-diagnostics.d.ts +1 -0
- package/types/src/commands.d.ts +4 -0
- package/types/src/doppler/auth.d.ts +19 -0
- package/types/src/doppler/bridge.d.ts +4 -0
- package/types/src/doppler/http.d.ts +9 -0
- package/types/src/doppler/references.d.ts +9 -0
- package/types/src/doppler/resolve.d.ts +9 -0
- package/types/src/doppler/system.d.ts +24 -0
- package/types/src/doppler-worker.d.ts +1 -0
- package/types/src/errors.d.ts +5 -0
- package/types/src/index.d.ts +7 -0
- package/types/src/preload.d.ts +4 -0
- package/types/src/resolve-commands.d.ts +1 -0
- package/types/src/resolve-doppler.d.ts +1 -0
- package/types/src/resolve.d.ts +1 -0
- package/types/src/types.d.ts +9 -0
- package/types/src/values.d.ts +5 -0
- package/values.cjs +20 -0
|
@@ -0,0 +1,505 @@
|
|
|
1
|
+
# Dependency review
|
|
2
|
+
|
|
3
|
+
## Release tools admitted with bounded controls - 2026-10-10
|
|
4
|
+
|
|
5
|
+
The current release pipeline and launch state are documented in [releasing](releasing.md).
|
|
6
|
+
The release-tool review and expiring advisory policy are in [release security](release-security.md).
|
|
7
|
+
Earlier dated entries below remain historical evidence and are superseded where
|
|
8
|
+
the current release guide describes a different state.
|
|
9
|
+
|
|
10
|
+
|
|
11
|
+
Entries record decisions at the stated dates. Older version plans and install
|
|
12
|
+
policies are historical; the release guide and CONTRIBUTING describe the current
|
|
13
|
+
workflow. Release-tool intake below is not dependency admission.
|
|
14
|
+
|
|
15
|
+
## Semantic-release intake, not installed - 2026-10-08
|
|
16
|
+
|
|
17
|
+
The user selected semantic-release for beta releases. The existing toolchain
|
|
18
|
+
has no commit-derived release engine; adding one is justified for versions,
|
|
19
|
+
release notes and branch/channel handling. Release-please was considered for
|
|
20
|
+
0.x support, and a custom engine was rejected as unnecessary maintenance.
|
|
21
|
+
Semantic-release's normal initial line is 1.0.0-beta.1 / 1.0.0. The checked-in
|
|
22
|
+
configuration is a preview draft; no release dependencies or workflow are enabled.
|
|
23
|
+
|
|
24
|
+
Registry intake inspected these exact published artifacts:
|
|
25
|
+
|
|
26
|
+
| Package | Version | Release date | Downloads in the last month | Maintainers |
|
|
27
|
+
| --- | --- | --- | --- | --- |
|
|
28
|
+
| semantic-release | 25.0.9 | 2026-08-05 | 12,515,497 | 3 |
|
|
29
|
+
| @semantic-release/commit-analyzer | 13.0.1 | 2025-01-03 | 12,542,138 | 3 |
|
|
30
|
+
| @semantic-release/release-notes-generator | 14.1.1 | 2026-05-08 | 12,802,125 | 3 |
|
|
31
|
+
|
|
32
|
+
All three artifacts include MIT license text, match their canonical source
|
|
33
|
+
repositories in the [semantic-release organization](https://github.com/semantic-release),
|
|
34
|
+
contain no install lifecycle scripts, and expose registry integrity, signatures
|
|
35
|
+
and provenance attestations. The release engine requires Node ^22.14.0 or
|
|
36
|
+
>=24.10.0; the repository's Node 24.19.0 qualifies. The initial lock-only review
|
|
37
|
+
stopped at audit; the isolated follow-up verification is recorded below.
|
|
38
|
+
MFA and historical ownership continuity were not independently verified.
|
|
39
|
+
The analyzer is an older stable component still required by the current engine;
|
|
40
|
+
that alone does not establish its continued maintenance or security.
|
|
41
|
+
|
|
42
|
+
A separate temporary lock-only project resolved 447 package entries, with no
|
|
43
|
+
`hasInstallScript` entries. Its audit reported 10 high and two moderate findings,
|
|
44
|
+
including propagated parent-package findings. The tree also needs complete
|
|
45
|
+
license review; one bundled qrcode-terminal entry lacks license metadata.
|
|
46
|
+
No install scripts or release tooling code were executed during the initial
|
|
47
|
+
lock-only intake.
|
|
48
|
+
|
|
49
|
+
The blocking dependency is `braces@3.0.3`, through `micromatch`, with the
|
|
50
|
+
[high-severity stack-exhaustion advisory](https://github.com/advisories/GHSA-vfj7-8cjw-p6xm).
|
|
51
|
+
The registry's latest braces release is 3.0.3 and the advisory lists no patched
|
|
52
|
+
version. Other findings include brace-expansion, http-cache-semantics, undici,
|
|
53
|
+
ip-address and postcss-selector-parser. They do not remove the braces blocker.
|
|
54
|
+
A normal install of this set would fail the repository's required high-severity
|
|
55
|
+
audit. No audit exception, blanket override, unsupported downgrade or lockfile
|
|
56
|
+
change was applied.
|
|
57
|
+
|
|
58
|
+
### Follow-up verification for the requested beta
|
|
59
|
+
|
|
60
|
+
The user authorized a beta release on October 8. The tooling was installed only
|
|
61
|
+
in a temporary intake directory, using the inspected lockfile and normal npm
|
|
62
|
+
lifecycle behavior. No install lifecycle hooks were found in the installed tree.
|
|
63
|
+
`npm audit signatures` verified 447 registry signatures and 121 attestations.
|
|
64
|
+
The bundled qrcode-terminal artifact, whose metadata omitted a license, includes
|
|
65
|
+
Apache-2.0 license text. Complete transitive license review and dependency
|
|
66
|
+
admission remain unfinished; these checks do not approve the vulnerable tree.
|
|
67
|
+
|
|
68
|
+
A separate temporary clone of the repository history used a local bare Git
|
|
69
|
+
remote, `dryRun: true`, no publishing plugins, and an environment without
|
|
70
|
+
registry or GitHub credentials. The real semantic-release engine and commit
|
|
71
|
+
analyzer calculated `1.0.0-beta.1`, channel `beta`, from the 22 commits through
|
|
72
|
+
`a461ce49903d620ced4c18ce1a90157b46591fc6`. The release-notes generator was then
|
|
73
|
+
called separately with the canonical repository URL. No tag was created, even
|
|
74
|
+
in the temporary remote. This verifies version calculation, not hosted release
|
|
75
|
+
authentication, stable promotion, or publication.
|
|
76
|
+
|
|
77
|
+
The braces advisory affects recursive parsing of deeply nested **patterns**.
|
|
78
|
+
In the inspected upstream branch expansion, the pattern is `branch.name` from
|
|
79
|
+
release configuration; remote branch names are subjects. In commit analysis,
|
|
80
|
+
patterns come from release rules, while commit fields are subjects. The current
|
|
81
|
+
draft uses fixed literal branch names and the analyzer's default rules. This
|
|
82
|
+
suggests narrower exposure than accepting arbitrary user-supplied patterns,
|
|
83
|
+
but it is not a complete reachability audit of the transitive tree. Other
|
|
84
|
+
advisories remain as well. No exception has been approved or applied, and the
|
|
85
|
+
repository's required high-severity audit is unchanged. The beta prerelease of
|
|
86
|
+
semantic-release also retains micromatch, so switching to it does not remove
|
|
87
|
+
this blocker.
|
|
88
|
+
|
|
89
|
+
Sources: [branch expansion](https://github.com/semantic-release/semantic-release/blob/v25.0.9/lib/branches/expand.js),
|
|
90
|
+
[commit matching](https://github.com/semantic-release/commit-analyzer/blob/v13.0.1/lib/analyze-commit.js),
|
|
91
|
+
[default rules](https://github.com/semantic-release/commit-analyzer/blob/v13.0.1/lib/default-release-rules.js).
|
|
92
|
+
|
|
93
|
+
After an acceptable upstream fix or an explicitly reviewed alternative,
|
|
94
|
+
re-run intake and pin exact direct versions plus the lockfile. Keep these tools
|
|
95
|
+
in development dependencies, preserve the five-package runtime closure, and
|
|
96
|
+
verify registry signatures/provenance, licenses, install hooks, audits and a
|
|
97
|
+
real dry run before enabling them. CODEOWNERS remains responsible for review;
|
|
98
|
+
Dependabot can maintain admitted versions. Removing the release configuration
|
|
99
|
+
and dev tooling would restore the existing manual candidate checks if the tool
|
|
100
|
+
must later be replaced. The requested beta publication is authorized, but still
|
|
101
|
+
needs dependency admission and registry setup. The project license was selected
|
|
102
|
+
as MIT on October 8, 2026, with copyright held by ciqol contributors.
|
|
103
|
+
|
|
104
|
+
### Reference comparison and audit refresh - 2026-10-08
|
|
105
|
+
|
|
106
|
+
The reference `ciqol/sonarqube-api-client` uses the same semantic-release engine
|
|
107
|
+
and analyzer family, plus npm and GitHub plugins. Reusing its configuration
|
|
108
|
+
does not establish admission of that tree. A fresh registry audit of the existing
|
|
109
|
+
isolated intake lockfile still reported 10 high and two moderate findings,
|
|
110
|
+
including `braces@3.0.3` through micromatch. No release dependency was added,
|
|
111
|
+
no dependency version changed and the audit gate remains enforced. The selected
|
|
112
|
+
normal release branch is now `beta`, with npm channel `beta`; this branch change
|
|
113
|
+
does not change the dependency findings. See [the reference comparison](releasing.md#reference-sonarqube-api-client).
|
|
114
|
+
|
|
115
|
+
|
|
116
|
+
## Installation policy - 2026-10-07
|
|
117
|
+
|
|
118
|
+
At the user's request, standard setup, CI and clean-consumer checks use normal
|
|
119
|
+
npm lifecycle behavior. The root `.npmrc` no longer disables scripts, and pack
|
|
120
|
+
commands do not suppress lifecycle hooks. No dependency version or integrity
|
|
121
|
+
entry changed as part of this policy update.
|
|
122
|
+
|
|
123
|
+
The installed Node 24/macOS tree was inspected for `preinstall`, `install` and
|
|
124
|
+
`postinstall` scripts and implicit `binding.gyp` builds; none were present. The
|
|
125
|
+
lockfile marks optional `fsevents@2.3.3` with `hasInstallScript`, but its installed
|
|
126
|
+
artifact declares no such script and contains no `binding.gyp`. Platform-specific
|
|
127
|
+
behavior still requires the hosted Linux/macOS clean-install checks. A fresh
|
|
128
|
+
local install on npm 11.17.0 completed and warned that the lockfile's optional
|
|
129
|
+
fsevents entry is not covered by an `allowScripts` decision; no approval or
|
|
130
|
+
blanket script override was added.
|
|
131
|
+
|
|
132
|
+
Review scripts and native setup whenever dependencies change. A lockfile pins
|
|
133
|
+
dependency bytes but does not make executing their code safe. Explicit build,
|
|
134
|
+
advisory, signature and package checks remain part of validation. Older entries
|
|
135
|
+
below describe the installation policy used at the time of those reviews.
|
|
136
|
+
|
|
137
|
+
## Vitest unit runner - 2026-10-07
|
|
138
|
+
|
|
139
|
+
The user requested Vitest with unit specs beside each source module. Added
|
|
140
|
+
`vitest` and `@vitest/coverage-v8`, both exactly 4.1.11, as development-only
|
|
141
|
+
dependencies. Both distributed licenses are MIT; the runner's bundled notices
|
|
142
|
+
also cover BSD-3-Clause and ISC code. The isolated tree contains MIT, ISC,
|
|
143
|
+
BSD-3-Clause, Apache-2.0 and MPL-2.0 packages. MPL applies to unmodified
|
|
144
|
+
Lightning CSS development binaries; none of this tooling is redistributed
|
|
145
|
+
in resenv's archive. Existing runtime dependencies are unchanged.
|
|
146
|
+
|
|
147
|
+
- **Need and fit:** Node's test runner remains suitable for process tests but
|
|
148
|
+
cannot run the requested TypeScript specs and Vitest mocks directly. Keeping
|
|
149
|
+
Node alone or using Jest were alternatives; Vitest matches the requested
|
|
150
|
+
workflow without adding a second TypeScript transform configuration.
|
|
151
|
+
Version 4.1.11 retains Node 20 support, while Vitest 5 requires Node 22.12+.
|
|
152
|
+
The resolved Vite 8.3.3 requires Node 20.19+ or 22.12+, covered by the actual
|
|
153
|
+
test matrix and Node 24 development runtime.
|
|
154
|
+
- **Health:** npm reported 454,419,379 Vitest downloads and 167,168,819 coverage
|
|
155
|
+
provider downloads for September 5 through October 4, 2026. Vitest has five
|
|
156
|
+
registry maintainers. Public repository metadata showed 17,188 stars,
|
|
157
|
+
357 open issues/PRs and a push on October 6. Version 4.1.11 was released on
|
|
158
|
+
August 18; Vitest 5.0.3 was released September 30. Published security reports
|
|
159
|
+
have patched-version ranges; 4.1.11 fixes the redirect-mock advisory
|
|
160
|
+
GHSA-82fw-gwwq-j7x9. Browser/UI packages are not installed or enabled.
|
|
161
|
+
- **Provenance:** package metadata points to the canonical vitest-dev/vitest
|
|
162
|
+
source, and both artifacts declare provenance attestations. The isolated
|
|
163
|
+
installation verified 64 registry signatures and 31 attestations. npm
|
|
164
|
+
integrity pins authenticate archive bytes; account MFA and complete ownership
|
|
165
|
+
history are not exposed by this review.
|
|
166
|
+
- **Security and capabilities:** the isolated tree reported zero known
|
|
167
|
+
vulnerabilities. Installation disables scripts, including the optional
|
|
168
|
+
fsevents hook. Tests execute local code with filesystem/process permissions;
|
|
169
|
+
no real credentials are supplied. The runner uses Node mode with API and
|
|
170
|
+
browser servers disabled. Native transform binaries are development tooling.
|
|
171
|
+
The lock contains 88 dependency entries including platform-specific packages;
|
|
172
|
+
64 were installed on this machine. This is a larger development tree than
|
|
173
|
+
the previous Node-only runner and is accepted for the requested testing setup.
|
|
174
|
+
- **Control:** the maintainer's request authorizes this addition. Exact direct
|
|
175
|
+
versions and lockfile integrity pin the tree. ciqol maintainers own updates
|
|
176
|
+
through the existing dependency review process and advisory checks. Removal
|
|
177
|
+
means returning unit specs to Node's runner with an explicit TypeScript
|
|
178
|
+
compilation step. Clean-consumer checks ensure this tooling is not shipped.
|
|
179
|
+
|
|
180
|
+
Sources: [Vitest 4 requirements](https://v4.vitest.dev/guide/),
|
|
181
|
+
[registry metadata](https://www.npmjs.com/package/vitest/v/4.1.11),
|
|
182
|
+
[coverage provider](https://www.npmjs.com/package/@vitest/coverage-v8/v/4.1.11),
|
|
183
|
+
and [redirect-mock fix](https://github.com/vitest-dev/vitest/security/advisories/GHSA-82fw-gwwq-j7x9).
|
|
184
|
+
|
|
185
|
+
## TypeScript implementation build - 2026-10-06
|
|
186
|
+
|
|
187
|
+
The requested migration needs compiler integration and Node API declarations.
|
|
188
|
+
These additions are development dependencies only:
|
|
189
|
+
|
|
190
|
+
| Package | Version | Distributed license | Purpose |
|
|
191
|
+
| --- | --- | --- | --- |
|
|
192
|
+
| @rollup/plugin-typescript | 12.3.0 | MIT | Compile TypeScript and emit declarations through Rollup |
|
|
193
|
+
| @types/node | 24.19.1 | MIT | Type-check Node APIs against the development runtime |
|
|
194
|
+
| tslib | 2.8.1 | 0BSD | Required peer of the TypeScript plugin |
|
|
195
|
+
|
|
196
|
+
- **Need and alternatives:** the existing compiler can emit JavaScript before
|
|
197
|
+
Rollup, but the requested library-build standard uses Rollup's maintained
|
|
198
|
+
TypeScript plugin. This avoids a custom transpilation plugin. Handwritten
|
|
199
|
+
Node declarations would be incomplete. A declaration bundler was considered;
|
|
200
|
+
generated declaration files with format-specific entry facades need no extra
|
|
201
|
+
bundler. `rollup-plugin-dts` was inspected but is not installed.
|
|
202
|
+
- **Fit:** the plugin supports Rollup 4 and TypeScript >=3.7; all tools fit the
|
|
203
|
+
Node 24 development environment. Production remains Node >=20 and is tested
|
|
204
|
+
separately. The compiler target uses native language features, so tslib must
|
|
205
|
+
not be imported by or bundled into the distributable. Package checks enforce
|
|
206
|
+
that build dependencies stay outside the consumer tree.
|
|
207
|
+
- **Usage and health:** npm reported 13,833,923 plugin downloads, 1,776,524,012
|
|
208
|
+
tslib downloads and 1,843,836,518 Node-types downloads for September 5 through
|
|
209
|
+
October 4, 2026. Releases are dated 2025-10-23, 2024-10-31 and 2026-10-01.
|
|
210
|
+
The plugin has four registry maintainers, tslib eight, and Node types use
|
|
211
|
+
DefinitelyTyped's shared publisher. Their source projects have active issue
|
|
212
|
+
and contribution histories. The older tslib release is accepted as a stable
|
|
213
|
+
compiler helper peer; the chosen target requires no emitted helper imports.
|
|
214
|
+
- **Provenance:** all three archives matched npm SHA-512 metadata. The official
|
|
215
|
+
plugin release points to `973054d`; tslib metadata identifies source commit
|
|
216
|
+
`d72d6f70b36286bc3f94a3dda1e64dcb568b1370`. Node types identify the canonical
|
|
217
|
+
DefinitelyTyped source directory. The isolated tree verified 19 registry
|
|
218
|
+
signatures and four attestations. These checks authenticate registry
|
|
219
|
+
artifacts; they do not establish reproducible builds for every addition.
|
|
220
|
+
Public metadata does not establish account MFA or complete transfer history.
|
|
221
|
+
- **Licenses and capabilities:** licenses were read from the downloaded
|
|
222
|
+
archives. The plugin runs compiler code with local build permissions; Node
|
|
223
|
+
types are declarations. Neither needs provider credentials. Installation
|
|
224
|
+
disables lifecycle scripts. No new component is vendored into runtime output.
|
|
225
|
+
The isolated tree's audit found zero known vulnerabilities; advisory checks
|
|
226
|
+
are not an independent code audit.
|
|
227
|
+
- **Weight and control:** the isolated tree has 19 installed packages including
|
|
228
|
+
the already-reviewed compiler and Rollup. Direct unpacked sizes are about
|
|
229
|
+
160 KB, 2.61 MB and 90 KB respectively. Exact versions and lockfile integrity
|
|
230
|
+
fix the tree. ciqol maintainers own updates through the existing dependency
|
|
231
|
+
review process. Removal means returning to compiler emit before Rollup while
|
|
232
|
+
retaining strict implementation and packed-consumer checks.
|
|
233
|
+
|
|
234
|
+
Sources: [Rollup plugin and requirements](https://github.com/rollup/plugins/tree/master/packages/typescript),
|
|
235
|
+
[plugin release](https://github.com/rollup/plugins/releases/tag/typescript-v12.3.0),
|
|
236
|
+
[tslib release](https://github.com/microsoft/tslib/releases/tag/v2.8.1),
|
|
237
|
+
[Node types source](https://github.com/DefinitelyTyped/DefinitelyTyped/tree/master/types/node).
|
|
238
|
+
|
|
239
|
+
## Lint enforcement - 2026-10-06
|
|
240
|
+
|
|
241
|
+
Selected for the requested TypeScript standards review. These are development
|
|
242
|
+
tools; neither is included in the generated package or loaded at runtime.
|
|
243
|
+
|
|
244
|
+
| Package | Pinned version | Distributed license | Purpose |
|
|
245
|
+
| --- | --- | --- | --- |
|
|
246
|
+
| eslint | 10.12.0 | MIT | Enforce JavaScript correctness and local style rules |
|
|
247
|
+
| typescript-eslint | 8.71.1 | MIT | Parse declarations and enforce public TypeScript contracts |
|
|
248
|
+
|
|
249
|
+
- **Need:** prose alone did not enforce declaration consistency or catch empty
|
|
250
|
+
error handlers. Node's compiler does not enforce those style rules.
|
|
251
|
+
- **Alternatives and fit:** a checker built on the existing TypeScript parser
|
|
252
|
+
would avoid dependencies but require maintaining our own lint rules. ESLint
|
|
253
|
+
directly supports the standards' established rules. Other lint engines would
|
|
254
|
+
require a separate rule mapping. The development toolchain uses Node 24;
|
|
255
|
+
ESLint also supports the tested Node 20.20.2 and 22 versions. The TypeScript
|
|
256
|
+
integration supports the existing TypeScript 6.0.3 compiler. Runtime support
|
|
257
|
+
and dependencies do not change.
|
|
258
|
+
- **Usage and maintenance:** npm reported 672,661,327 ESLint downloads and
|
|
259
|
+
374,467,603 typescript-eslint downloads for September 5 through October 4,
|
|
260
|
+
2026. The releases were published October 2 and October 5 respectively.
|
|
261
|
+
Registry maintainers are `openjsfoundation` / `eslintbot` and `jameshenry` /
|
|
262
|
+
`bradzacher`; both projects have public teams and active release histories.
|
|
263
|
+
At review their issue trackers showed 97 and 174 open issues. Their advisory
|
|
264
|
+
pages listed no published advisories. These signals do not establish safety.
|
|
265
|
+
- **Provenance:** both downloaded archives matched npm's SHA-512 metadata.
|
|
266
|
+
All 411 distributed ESLint JavaScript/license files matched source commit
|
|
267
|
+
`a438ec39512c3381f4785a1f3058982ce9845970`. ESLint supplied registry signatures
|
|
268
|
+
but no provenance attestation for this version. typescript-eslint supplied
|
|
269
|
+
provenance; the isolated tree verified all 95 signatures and 30 attestations.
|
|
270
|
+
Account MFA and a complete ownership-transfer history are not publicly
|
|
271
|
+
established by these checks and are not claimed as verified.
|
|
272
|
+
- **License:** the two distributed LICENSE files are MIT. The isolated tree
|
|
273
|
+
contains MIT, Apache-2.0, BSD-2-Clause, BSD-3-Clause, ISC and BlueOak-1.0.0;
|
|
274
|
+
no license field was missing. The Blue Oak notice requirement was reviewed.
|
|
275
|
+
These tools and their notices stay in the development installation, outside
|
|
276
|
+
the runtime archive. Reassess obligations if vendoring or redistribution changes.
|
|
277
|
+
- **Security and weight:** the isolated review installed 95 packages, including
|
|
278
|
+
the already-used TypeScript compiler. No install lifecycle scripts were
|
|
279
|
+
declared and installation disabled scripts. `npm audit` reported zero known
|
|
280
|
+
vulnerabilities. ESLint is about 2.95 MB unpacked; the TypeScript wrapper is
|
|
281
|
+
about 43 KB before its parser/plugin dependencies. Lint runs local JavaScript
|
|
282
|
+
configuration with the developer/CI account's filesystem permissions; it has
|
|
283
|
+
no provider credentials or publishing grant in CI. No telemetry operation was
|
|
284
|
+
observed in the reviewed setup; this is not a full transitive-code audit.
|
|
285
|
+
- **Control and exit:** exact direct versions and lockfile integrity pin the
|
|
286
|
+
tree. ciqol maintainers review the existing weekly Dependabot updates. Remove
|
|
287
|
+
these tools, the lint configuration and CI step together if replacing them;
|
|
288
|
+
public declaration and installed-package tests must remain.
|
|
289
|
+
|
|
290
|
+
Sources: [ESLint release](https://eslint.org/blog/2026/10/eslint-v10.12.0-released/),
|
|
291
|
+
[TypeScript integration support](https://typescript-eslint.io/users/dependency-versions/),
|
|
292
|
+
[ESLint source](https://github.com/eslint/eslint/tree/a438ec39512c3381f4785a1f3058982ce9845970),
|
|
293
|
+
[TypeScript lint source](https://github.com/typescript-eslint/typescript-eslint),
|
|
294
|
+
[ESLint advisories](https://github.com/eslint/eslint/security/advisories),
|
|
295
|
+
[TypeScript lint advisories](https://github.com/typescript-eslint/typescript-eslint/security/advisories),
|
|
296
|
+
[npm ESLint metadata](https://registry.npmjs.org/eslint/10.12.0),
|
|
297
|
+
[npm TypeScript lint metadata](https://registry.npmjs.org/typescript-eslint/8.71.1).
|
|
298
|
+
|
|
299
|
+
## First public release preparation - 2026-10-06
|
|
300
|
+
|
|
301
|
+
The planned first public version is `0.1.0`; earlier versions identify private
|
|
302
|
+
prototypes. npm dependency versions are unchanged. `npm audit` found no known
|
|
303
|
+
advisories in the installed tree; `npm audit signatures` verified ten registry
|
|
304
|
+
signatures and seven attestations. These results do not establish a security audit.
|
|
305
|
+
|
|
306
|
+
Two CI-only actions carry one built package between jobs:
|
|
307
|
+
|
|
308
|
+
| Action | Release | Pinned commit | License |
|
|
309
|
+
| --- | --- | --- | --- |
|
|
310
|
+
| actions/upload-artifact | v7.0.1 | `043fb46d1a93c77aae656e7c1c64a875d1fc6a0a` | MIT |
|
|
311
|
+
| actions/download-artifact | v8.0.1 | `3e5f45b2cfb9172054b4087a40e8e0b5a5461e7c` | MIT |
|
|
312
|
+
|
|
313
|
+
- **Need and alternatives:** the compatibility jobs must test the same archive.
|
|
314
|
+
Rebuilding per job would not prove that contract. GitHub's own artifact actions
|
|
315
|
+
avoid custom authenticated upload/download code.
|
|
316
|
+
- **Source and maintenance:** the official release pages resolve to the pinned,
|
|
317
|
+
GitHub-signed commits. Both releases are from 2026, maintained by GitHub, and
|
|
318
|
+
already used in the reference client. At review the repositories showed about
|
|
319
|
+
1,100 and 734 forks respectively; these are adoption signals only.
|
|
320
|
+
- **License and execution:** the tagged LICENSE files are MIT; action metadata
|
|
321
|
+
runs bundled JavaScript on Node 24. No action code is shipped in resenv.
|
|
322
|
+
A reproducible build of those bundles and account MFA were not verified.
|
|
323
|
+
- **Authority and limits:** upload receives only the package archive, excludes
|
|
324
|
+
hidden files and expires after seven days. Download selects that artifact
|
|
325
|
+
from the same run and fails on a digest mismatch. Jobs have read-only
|
|
326
|
+
repository permission, no provider credentials, and no OIDC publishing grant.
|
|
327
|
+
- **Advisories:** the upload advisory page lists none. Download's published
|
|
328
|
+
extraction advisory, GHSA-cxww-7g56-2vh6, affects versions >=4.0.0 and <4.1.3;
|
|
329
|
+
v8.0.1 is outside that range. Bundled dependency advisories were not separately
|
|
330
|
+
audited, so npm's clean result above does not cover these actions.
|
|
331
|
+
- **Control:** ciqol maintainers review pinned updates proposed by Dependabot.
|
|
332
|
+
Removing the actions requires replacing artifact transfer or returning to
|
|
333
|
+
independent per-job builds and narrowing the validation claim.
|
|
334
|
+
|
|
335
|
+
Sources: [upload release](https://github.com/actions/upload-artifact/releases/tag/v7.0.1),
|
|
336
|
+
[download release](https://github.com/actions/download-artifact/releases/tag/v8.0.1),
|
|
337
|
+
[upload license](https://github.com/actions/upload-artifact/blob/v7.0.1/LICENSE),
|
|
338
|
+
[download license](https://github.com/actions/download-artifact/blob/v8.0.1/LICENSE),
|
|
339
|
+
[upload inputs](https://github.com/actions/upload-artifact/blob/v7.0.1/action.yml),
|
|
340
|
+
[download inputs](https://github.com/actions/download-artifact/blob/v8.0.1/action.yml),
|
|
341
|
+
[upload advisories](https://github.com/actions/upload-artifact/security/advisories),
|
|
342
|
+
[download advisory](https://github.com/actions/download-artifact/security/advisories/GHSA-cxww-7g56-2vh6).
|
|
343
|
+
|
|
344
|
+
Version 0.6.0 renamed the package to `@ciqol/resenv` on 2026-10-04 without
|
|
345
|
+
changing dependency versions. Earlier review entries retain the original name.
|
|
346
|
+
|
|
347
|
+
## Doppler support — 2026-10-01
|
|
348
|
+
|
|
349
|
+
No npm dependency was added for Doppler. Node's built-in HTTPS `fetch`, child
|
|
350
|
+
process and buffer APIs provide the required operations. Adding the full MCP
|
|
351
|
+
server or SDK would add an unnecessary runtime surface for three authentication
|
|
352
|
+
operations and one public secret-read endpoint. The existing crypto/build
|
|
353
|
+
dependency versions remain unchanged.
|
|
354
|
+
|
|
355
|
+
The documented [Doppler MCP package](https://docs.doppler.com/docs/mcp) identified
|
|
356
|
+
`@dopplerhq/mcp-server` as the official npm package. Version 1.0.5 was downloaded
|
|
357
|
+
for read-only inspection without installation or script execution. The tarball
|
|
358
|
+
matched npm's SHA-512 integrity metadata. Its `dist/device-auth.js` describes
|
|
359
|
+
GET `/v3/auth/cli/generate/2` and POST `/v3/auth/cli/authorize`, including the
|
|
360
|
+
409 pending response. The separately inspected `@dopplerhq/node-sdk` 1.3.0
|
|
361
|
+
artifact also matched registry integrity and confirmed the public API's
|
|
362
|
+
computed-value response and token-revocation request shape. Neither package's
|
|
363
|
+
implementation is vendored or installed. Registry integrity establishes artifact
|
|
364
|
+
consistency; it is not an independent audit or provenance attestation.
|
|
365
|
+
|
|
366
|
+
envref implements these wire operations using the standard library. Browser
|
|
367
|
+
login is isolated because its protocol is not in Doppler's public API contract.
|
|
368
|
+
The live challenge endpoint accepted envref's own `v0.4.1` version on the review
|
|
369
|
+
date. No browser approval or user secret was used for this probe. Maintainers
|
|
370
|
+
must recheck the protocol if Doppler changes it; the supported CLI fallback and
|
|
371
|
+
explicit token mode are the exit paths.
|
|
372
|
+
|
|
373
|
+
Optional platform tools are macOS `/usr/bin/security` (shipped with the OS),
|
|
374
|
+
Linux `/usr/bin/secret-tool`, and the user's existing Doppler CLI. envref does
|
|
375
|
+
not download or install them. The local macOS manual and CLI help were checked
|
|
376
|
+
for stdin command input, keychain lookup and the documented credential lookup.
|
|
377
|
+
A unique dummy keychain item was written, read back and deleted successfully.
|
|
378
|
+
Linux Secret Service behavior is covered with process mocks, not a live Linux
|
|
379
|
+
keyring. Host administrators own these platform binaries and their updates.
|
|
380
|
+
Fallback executables use fixed system/Homebrew paths, arguments and a filtered
|
|
381
|
+
environment; no repository-provided command is evaluated.
|
|
382
|
+
|
|
383
|
+
The ciqol maintainers own this integration. It can be removed by deleting the
|
|
384
|
+
Doppler mode while retaining encryption and explicit command mode. See
|
|
385
|
+
[Doppler setup](doppler.md) for credential permissions, fallback behavior and
|
|
386
|
+
the remaining trust boundaries.
|
|
387
|
+
|
|
388
|
+
## Rollup build and declaration checks
|
|
389
|
+
|
|
390
|
+
Reviewed on 2026-09-29 for the user-requested `.mjs` source migration and dual
|
|
391
|
+
CommonJS/ESM package. These tools are development dependencies only and are
|
|
392
|
+
omitted from the generated package manifest.
|
|
393
|
+
|
|
394
|
+
| Package | Version | Distributed license | Purpose |
|
|
395
|
+
| --- | --- | --- | --- |
|
|
396
|
+
| rollup | 4.63.5 | MIT | Compile the JavaScript source and ESM facades |
|
|
397
|
+
| typescript | 6.0.3 | Apache-2.0 | Check CJS and ESM consumer declarations |
|
|
398
|
+
|
|
399
|
+
- **Need and alternatives:** Node cannot emit CommonJS from ESM source. Rollup
|
|
400
|
+
was explicitly requested and provides module parsing and output generation
|
|
401
|
+
without a custom source rewriter. esbuild or tsup could perform this build,
|
|
402
|
+
but add an alternate toolchain without a requirement. No TypeScript Rollup
|
|
403
|
+
plugin is needed for `.mjs` input. The TypeScript compiler checks the existing
|
|
404
|
+
public declaration contract; file-existence checks alone cannot validate
|
|
405
|
+
consumer type resolution.
|
|
406
|
+
- **Fit and weight:** Rollup supports Node >=18 and TypeScript supports Node
|
|
407
|
+
>=14.17; both cover envref's Node >=20 range. Rollup's registry artifact is
|
|
408
|
+
about 2.9 MB unpacked. TypeScript 6.0.3 is the JavaScript compiler with no
|
|
409
|
+
runtime dependencies; it avoids adopting the newer native compiler's
|
|
410
|
+
platform dependency tree for these small declaration checks. The isolated
|
|
411
|
+
macOS installation contains five packages. Its lockfile includes 30 package
|
|
412
|
+
entries, including optional platform variants. Rollup's tree adds
|
|
413
|
+
`@types/estree` 1.0.9, optional `fsevents` 2.3.3, native `@rollup/*` packages
|
|
414
|
+
pinned to 4.63.5, and optional `@napi-rs/lzma-linux-x64-gnu` 1.5.1. Their
|
|
415
|
+
package licenses are MIT. The upstream source explains the lzma dependency
|
|
416
|
+
as part of its native cross-compilation toolchain.
|
|
417
|
+
- **Usage and health:** npm reported 140,333,279 Rollup downloads and
|
|
418
|
+
330,811,370 TypeScript downloads for September 21-27, 2026. Rollup lists five
|
|
419
|
+
maintainers; TypeScript 6.0.3 lists six. Rollup 4.63.5 was published September
|
|
420
|
+
24; TypeScript 6.0.3 was published April 16. Both canonical repositories had
|
|
421
|
+
activity on the review date. GitHub reported 26,310/111,270 stars and
|
|
422
|
+
610/5,053 open issues plus pull requests, respectively. These counts are
|
|
423
|
+
maintenance signals, not a claim that every issue was reviewed.
|
|
424
|
+
- **Source and provenance:** Rollup's official release tag and npm `gitHead`
|
|
425
|
+
agree on `3722484c33c58b3ab0cbbfcca09b8f267d420329`; TypeScript's agree on
|
|
426
|
+
`050880ce59e30b356b686bd3144efe24f875ebc8`. Both tarball SHA-512 digests were
|
|
427
|
+
verified against registry metadata, and licenses were read from those
|
|
428
|
+
artifacts. `npm audit signatures` verified all five installed packages and
|
|
429
|
+
two provenance attestations. TypeScript does not publish a provenance
|
|
430
|
+
attestation for this version, and the source commit is unsigned. Its trust
|
|
431
|
+
evidence is the verified registry signature, Microsoft-controlled release
|
|
432
|
+
linking the npm distribution, and matching release/source metadata; a
|
|
433
|
+
reproducible compiler build was not performed. Registry MFA enforcement and
|
|
434
|
+
complete ownership histories are not publicly established by these checks.
|
|
435
|
+
- **Security and capabilities:** OSV reported no advisories for either exact
|
|
436
|
+
top-level version; npm audit reported none for the isolated dependency tree.
|
|
437
|
+
That review installed with scripts disabled. Setup and CI now use normal
|
|
438
|
+
npm lifecycle behavior; see the installation-policy update above. Rollup
|
|
439
|
+
loads native parser code and reads/writes
|
|
440
|
+
build files; TypeScript reads consumer fixtures and declarations. Neither
|
|
441
|
+
receives application credentials in CI. Configuration files are executable
|
|
442
|
+
build code and must be reviewed. These checks are not a security audit.
|
|
443
|
+
- **Control and exit:** the user requested Rollup; the ciqol maintainers own
|
|
444
|
+
subsequent updates. Exact direct versions and the committed lockfile fix the
|
|
445
|
+
tree. Updates require license, advisory, provenance and consumer checks.
|
|
446
|
+
No dependency updater or publication is enabled. A replacement bundler only
|
|
447
|
+
needs to preserve the tested package exports, shared implementation and
|
|
448
|
+
declaration contract; TypeScript can be replaced by a reviewed compiler
|
|
449
|
+
release independently of the runtime.
|
|
450
|
+
|
|
451
|
+
Evidence: [Rollup release](https://github.com/rollup/rollup/releases/tag/v4.63.5),
|
|
452
|
+
[Rollup package source](https://github.com/rollup/rollup/blob/v4.63.5/package.json),
|
|
453
|
+
[TypeScript release](https://github.com/microsoft/TypeScript/releases/tag/v6.0.3),
|
|
454
|
+
[Rollup registry metadata](https://registry.npmjs.org/rollup/4.63.5), and
|
|
455
|
+
[TypeScript registry metadata](https://registry.npmjs.org/typescript/6.0.3).
|
|
456
|
+
|
|
457
|
+
Reviewed on 2026-09-28 for the private, unpublished envref prototype.
|
|
458
|
+
|
|
459
|
+
## Runtime dependencies
|
|
460
|
+
|
|
461
|
+
As of October 12, 2026, resenv has no runtime npm dependencies. Removed
|
|
462
|
+
`eciesjs` 0.5.0 and its four transitive crypto packages with dotenvx decryption.
|
|
463
|
+
Doppler resolution uses Node's HTTPS fetch and built-in process/credential
|
|
464
|
+
helpers. The lockfile and clean-consumer check enforce the empty runtime tree.
|
|
465
|
+
|
|
466
|
+
## CI actions
|
|
467
|
+
|
|
468
|
+
Reviewed on 2026-09-29. These actions run only in the test workflow; they are
|
|
469
|
+
not distributed with the npm package.
|
|
470
|
+
|
|
471
|
+
| Action | Version and pinned commit | Purpose |
|
|
472
|
+
| --- | --- | --- |
|
|
473
|
+
| actions/checkout | v6.1.0, `d23441a48e516b6c34aea4fa41551a30e30af803` | Check out the repository |
|
|
474
|
+
| actions/setup-node | v6.5.0, `249970729cb0ef3589644e2896645e5dc5ba9c38` | Install the Node version in `.nvmrc` |
|
|
475
|
+
|
|
476
|
+
Both are maintained by GitHub, use the MIT license, and run committed JavaScript
|
|
477
|
+
bundles on the Actions Node 24 runtime. GitHub's API confirmed the release tags
|
|
478
|
+
and commit pins. The release dates were July 20 and July 14, 2026 respectively;
|
|
479
|
+
both repositories had activity within the preceding day. The review observed
|
|
480
|
+
8,916 stars for checkout and 4,976 for setup-node. These are usage signals,
|
|
481
|
+
not security guarantees. Maintainer account MFA and the full ownership history
|
|
482
|
+
were not independently verified.
|
|
483
|
+
|
|
484
|
+
The checkout release hardens pull-request checkout behavior. The setup-node
|
|
485
|
+
release includes cache and dependency security updates. Both repositories'
|
|
486
|
+
public security-advisory endpoints returned no entries on the review date;
|
|
487
|
+
that does not establish the absence of vulnerabilities.
|
|
488
|
+
|
|
489
|
+
Handwritten checkout and Node installation scripts would duplicate credential
|
|
490
|
+
handling and platform-specific setup. The official actions provide those
|
|
491
|
+
operations across the Linux and macOS test matrix without adding runtime
|
|
492
|
+
dependencies. The workflow grants read-only contents access to the job, does
|
|
493
|
+
not persist checkout credentials, disables package-manager caching and install
|
|
494
|
+
scripts, and has a ten-minute timeout. It has no publication step or registry
|
|
495
|
+
credentials.
|
|
496
|
+
|
|
497
|
+
Updates require manual review of the source, release notes, licenses and
|
|
498
|
+
advisories, followed by new commit pins and a test run. The ciqol maintainers
|
|
499
|
+
own that review; either action can be replaced by another reviewed checkout or
|
|
500
|
+
runtime setup step without changing envref's package or API.
|
|
501
|
+
|
|
502
|
+
Evidence: [checkout release](https://github.com/actions/checkout/releases/tag/v6.1.0),
|
|
503
|
+
[checkout source](https://github.com/actions/checkout/tree/d23441a48e516b6c34aea4fa41551a30e30af803),
|
|
504
|
+
[setup-node release](https://github.com/actions/setup-node/releases/tag/v6.5.0), and
|
|
505
|
+
[setup-node source](https://github.com/actions/setup-node/tree/249970729cb0ef3589644e2896645e5dc5ba9c38).
|
package/docs/doppler.md
ADDED
|
@@ -0,0 +1,146 @@
|
|
|
1
|
+
# Doppler references and login
|
|
2
|
+
|
|
3
|
+
Doppler is resenv's only built-in cloud provider. After Nx or another loader
|
|
4
|
+
populates the environment, resenv fetches referenced values through HTTPS and
|
|
5
|
+
replaces them in memory before application startup. It resolves once per startup;
|
|
6
|
+
restart the application to fetch changed secrets. This mode does not execute
|
|
7
|
+
shell commands.
|
|
8
|
+
The canonical `--require @ciqol/resenv/resolve` preload infers Doppler from
|
|
9
|
+
`doppler://` values. The equivalent `--import` and `resenv run -- ...` do the
|
|
10
|
+
same. The library also infers Doppler from values; call `resolve()` without
|
|
11
|
+
a provider option. `resolve-doppler` and
|
|
12
|
+
`run --doppler` remain supported for compatibility.
|
|
13
|
+
|
|
14
|
+
## Local setup
|
|
15
|
+
|
|
16
|
+
From the checkout, build and log in:
|
|
17
|
+
|
|
18
|
+
```sh
|
|
19
|
+
npm run build
|
|
20
|
+
node dist/bin/resenv.cjs login doppler
|
|
21
|
+
```
|
|
22
|
+
|
|
23
|
+
After installing a packed build, the same command is `resenv login doppler`.
|
|
24
|
+
If the references are already loaded into the shell environment, `resenv login`
|
|
25
|
+
infers Doppler without naming it. No cloud references means no login is needed.
|
|
26
|
+
Neither command loads dotenv files; Nx remains responsible for file selection.
|
|
27
|
+
It requests a browser authorization code, opens Doppler's authorization page,
|
|
28
|
+
and waits up to five minutes for you to approve the login. `--no-browser`
|
|
29
|
+
prints the page and code without opening it. Login requires a terminal outside
|
|
30
|
+
CI; application startup never opens a browser or prompts for credentials.
|
|
31
|
+
If login falls back to the Doppler CLI, that CLI handles its own browser prompt.
|
|
32
|
+
|
|
33
|
+
The native flow follows the protocol observed in Doppler's published
|
|
34
|
+
`@dopplerhq/mcp-server` 1.0.5 package. These login endpoints are not a documented
|
|
35
|
+
third-party OAuth contract. They can change independently of the public API.
|
|
36
|
+
resenv identifies itself with its own version and user agent.
|
|
37
|
+
|
|
38
|
+
The user token is saved in the OS credential store under service
|
|
39
|
+
`ciqol.envref.doppler`, account `default`. The identifier is retained across
|
|
40
|
+
the resenv rename so existing logins continue to work. Nothing is saved in the repository,
|
|
41
|
+
dotenv files or worktree. The current prototype stores one workplace login per
|
|
42
|
+
OS user; logging in again replaces that saved identity. Each developer logs in
|
|
43
|
+
separately and receives the permissions of their own Doppler account.
|
|
44
|
+
|
|
45
|
+
Native persistence supports macOS Keychain via `/usr/bin/security` and Linux
|
|
46
|
+
Secret Service via an installed `/usr/bin/secret-tool`. The token is passed to
|
|
47
|
+
the helper through stdin, never through process arguments. resenv does not
|
|
48
|
+
install these tools or fall back to a plaintext credential file. Windows can
|
|
49
|
+
use a supplied `DOPPLER_TOKEN`; native Windows login/storage is not implemented.
|
|
50
|
+
|
|
51
|
+
## Declare a reference
|
|
52
|
+
|
|
53
|
+
Put references in the dotenv file Nx already selects, such as `.env.serve`:
|
|
54
|
+
|
|
55
|
+
```dotenv
|
|
56
|
+
API_TOKEN=doppler://my-project/dev/API_TOKEN
|
|
57
|
+
```
|
|
58
|
+
|
|
59
|
+
This is **resenv's own syntax**, not an official Doppler URI standard or
|
|
60
|
+
SecretSpec's provider URI. All three fields are required: project, config and
|
|
61
|
+
secret name. Project/config slugs must be lowercase letters, digits, `_` or
|
|
62
|
+
`-`. Secret names can use Doppler's permissive punctuation; percent encoding
|
|
63
|
+
is accepted for a secret name, such as `payments%2Fapi.key`. Query strings,
|
|
64
|
+
fragments, credentials, ports and executable expressions are rejected.
|
|
65
|
+
|
|
66
|
+
For an Nx Node target, put the preload on the application process:
|
|
67
|
+
|
|
68
|
+
```json
|
|
69
|
+
"runtimeArgs": ["--require", "@ciqol/resenv/resolve"]
|
|
70
|
+
```
|
|
71
|
+
|
|
72
|
+
For an Nx command target, use `resenv run -- node app.mjs` inside the
|
|
73
|
+
target. Preloading the outer Nx process would run before Nx loads target files.
|
|
74
|
+
resenv does not choose, read or rewrite dotenv files.
|
|
75
|
+
|
|
76
|
+
## Credentials and CLI fallback
|
|
77
|
+
|
|
78
|
+
Resolution checks these sources in order:
|
|
79
|
+
|
|
80
|
+
1. An explicitly supplied `DOPPLER_TOKEN`.
|
|
81
|
+
2. The resenv credential in the OS store.
|
|
82
|
+
3. The current directory's existing Doppler CLI login, retrieved with the
|
|
83
|
+
documented `doppler configure get token --plain` operation.
|
|
84
|
+
|
|
85
|
+
The fallback captures that token internally and still fetches secrets through
|
|
86
|
+
HTTPS. It does not parse the CLI's private config format. It invokes a fixed
|
|
87
|
+
executable with separate arguments and a restricted environment. Current
|
|
88
|
+
executable locations are `/opt/homebrew/bin/doppler`,
|
|
89
|
+
`/usr/local/bin/doppler` and `/usr/bin/doppler`; a repository's `PATH` cannot
|
|
90
|
+
select a different credential helper. Other installations can supply a token.
|
|
91
|
+
|
|
92
|
+
Native login falls back to `doppler login` when the OS store is unavailable or
|
|
93
|
+
the authorization endpoint returns HTTP 404, 405 or 501. To select it directly:
|
|
94
|
+
|
|
95
|
+
```sh
|
|
96
|
+
resenv login doppler --cli
|
|
97
|
+
```
|
|
98
|
+
|
|
99
|
+
An explicit invalid token, access denial, login rejection, timeout or network
|
|
100
|
+
error stops the operation. These failures do not silently switch identities.
|
|
101
|
+
Unset `DOPPLER_TOKEN` before interactive login because it overrides saved logins.
|
|
102
|
+
In CI, supply a suitably scoped token through the runner's credential facility.
|
|
103
|
+
|
|
104
|
+
`resenv logout doppler` removes only resenv's local credential. It does not
|
|
105
|
+
revoke the remote token, unset an environment variable or log the Doppler CLI
|
|
106
|
+
out. Those other credential sources can still authenticate. Revoke unwanted
|
|
107
|
+
tokens from Doppler's CLI Tokens page.
|
|
108
|
+
|
|
109
|
+
## Resolution and security boundaries
|
|
110
|
+
|
|
111
|
+
- Fetches only named secrets from the public retrieve-secret endpoint. Repeated
|
|
112
|
+
references share one request per startup; values are not cached on disk.
|
|
113
|
+
- Requires the computed value. Restricted, missing, null and invalid values
|
|
114
|
+
fail startup; resenv never substitutes a raw value as a fallback.
|
|
115
|
+
- Keeps fetched output literal, including strings that start with `encrypted:`
|
|
116
|
+
or contain `$()`. Neither fetched nor original ciphertext is decrypted.
|
|
117
|
+
- Resolves everything before applying changes. A failure leaves the caller's
|
|
118
|
+
environment untouched. Existing command mode remains separately opt-in.
|
|
119
|
+
- Uses a fixed HTTPS origin, disables redirects, and has a ten-second timeout
|
|
120
|
+
per request. The synchronous preload uses a private Node worker with a
|
|
121
|
+
sixty-second overall limit. Up to four distinct lookups run concurrently;
|
|
122
|
+
duplicate references share one lookup. After a failure, no new lookups are
|
|
123
|
+
scheduled and active requests settle before failure is returned. Limits are
|
|
124
|
+
128 references, 64 KiB per value and
|
|
125
|
+
1 MiB for each response and the worker's captured output.
|
|
126
|
+
- Preloads use a child Node process to wait for asynchronous HTTPS while
|
|
127
|
+
retaining `--require` compatibility. It receives only references and an
|
|
128
|
+
explicit credential through stdin, with results returned through a private
|
|
129
|
+
pipe. No Doppler CLI is required when a native credential is available.
|
|
130
|
+
- Diagnostics show variable names and error codes, never tokens, provider
|
|
131
|
+
response bodies or resolved values. Only explicit interactive login displays
|
|
132
|
+
its temporary human authorization code.
|
|
133
|
+
|
|
134
|
+
This removes shell evaluation from Doppler lookups. It does not isolate
|
|
135
|
+
untrusted repository code or agents that can access the same user's credential
|
|
136
|
+
store. Doppler account permissions remain the authorization boundary. CLI user
|
|
137
|
+
tokens inherit the user's privileges; a read-only service token can limit CI
|
|
138
|
+
to a specific config.
|
|
139
|
+
|
|
140
|
+
## Sources
|
|
141
|
+
|
|
142
|
+
- [Doppler MCP authentication](https://docs.doppler.com/docs/mcp#1-authenticate)
|
|
143
|
+
- [Published MCP package](https://www.npmjs.com/package/@dopplerhq/mcp-server/v/1.0.5)
|
|
144
|
+
- [Retrieve a secret](https://docs.doppler.com/reference/secrets-get)
|
|
145
|
+
- [API authentication](https://docs.doppler.com/reference/api)
|
|
146
|
+
- [Retrieve the CLI token](https://docs.doppler.com/docs/cli#fetch-cli-token-from-your-local-environment)
|