diff --git a/CHANGELOG.md b/CHANGELOG.md index 00211a2..bbfeae1 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -6,75 +6,25 @@ The format follows [Keep a Changelog](https://keepachangelog.com/en/1.1.0/) loos ## Unreleased -## 2026.08.01.0140 +## 2026.08.01.0245 -_Build produced from commit 74d22a941c33._ +### Added (environment seeding) -## 2026.08.01.0123 +- The seeding script configures enrollment protocols, seeding API on every profile, SCEP with a dynamic challenge on the RSA profile, and ACME on the EC server/client profile. Enabling one is what makes Infisical mint its endpoint, so the run reads back and prints the SCEP, challenge, and ACME directory URLs, and returns them under `Enrollment`. +- Protocols are enabled on the **application-to-profile link**, not on the profile. A profile's own `enrollmentType` is a single value, but the link carries an independent configuration per protocol, which is what the console lists under an application — so one profile can answer several at once. The routes take `PUT`; a `POST` returns 404. +- SCEP defaults to a dynamic challenge, so there is no shared secret to distribute or rotate. `-ScepChallengePassword` supplies one for `ChallengeType = 'static'`, and when that is used without a value the run generates one and prints it once, because Infisical will not hand it back afterwards. +- Auto-renew is on by default for every API profile. It is an API-level setting; neither SCEP nor ACME has an equivalent, because both protocols have the client drive renewal itself. -_Build produced from commit f2a1492b66de._ +### Fixed (environment seeding) -## 2026.07.31.2140 +- Seeded certificate policies now carry subject, SAN, and signature-algorithm constraints, and profiles carry defaults. Infisical refuses any attribute with no policy entry ("no subject policies defined"), refuses a policy defining no signature algorithm, and refuses a request missing a usage the policy marks required — `Request-InfisicalCertificate` sends no key usages of its own, so a profile default has to supply them. The previous configuration omitted all of this and could not issue. +- API responses are read through accessors that tolerate an absent property or a differently shaped payload. The cert-manager routes return bare payloads — a naked array for a list, the resource itself for a create — where the secrets and pki routes wrap theirs in a named property, and under `Set-StrictMode` each mismatch was a terminating error. The application-to-profile listing returns join rows keyed by `profileId` rather than profile objects with an `id`. +- The certificate-authority loop assigned a local `$configuration`, which shadowed the script-level `$Configuration` block because PowerShell variable names are case-insensitive; every authority after the first then failed to resolve its organization details. The `$profile` loop variables were renamed for the same reason — `$profile` is an automatic variable. +- The documented enumeration values dropped `domain_component`, `upn`, and `any_purpose`, none of which the API accepts. -_Build produced from commit 62131e750109._ +### Fixed (build) -## 2026.07.31.2136 - -_Build produced from commit 62131e750109._ - -## 2026.07.31.2019 - -- Build produced from commit e7674af1617c. - -## Unreleased (carried forward) - -## 2026.07.31.2006 - -- Build produced from commit 276958e3a83a. - -## Unreleased (carried forward) - -## 2026.07.31.1958 - -- Build produced from commit 633f40c1fa54. - -## Unreleased (carried forward) - -## 2026.07.31.1924 - -- Build produced from commit 93b0cc1924ec. - -## Unreleased (carried forward) - -## 2026.07.31.0045 - -- Build produced from commit d47a5af6b3a6. - -## Unreleased (carried forward) - -## 2026.07.30.2350 - -- Build produced from commit 67cf0abac2dd. - -## Unreleased (carried forward) - -## 2026.07.30.2344 - -- Build produced from commit dadba2f4c890. - -## Unreleased (carried forward) - -## 2026.07.30.2305 - -- Build produced from commit f65124fd9911. - -## Unreleased (carried forward) - -## 2026.07.30.2259 - -- Build produced from commit f56fd15b3864. - -## Unreleased (carried forward) +- `CHANGELOG.md` no longer accumulates duplicate `## Unreleased (carried forward)` headings. The pre-`62131e7` promotion step appended a suffix on every build instead of consuming the section, stranding release notes under 103 such headings — one had accumulated the suffix seven times — while the version sections the release workflow extracts held only their build line. Existing notes were consolidated and duplicate version sections collapsed, taking the file from 1441 lines to 570 with no content lost. ### Changed (project scoping, follow-up) @@ -158,18 +108,6 @@ _Build produced from commit 62131e750109._ - Reuse detection searches the same store location the install will write to, instead of always searching `CurrentUser`. - Elevation detection moved to `InfisicalCmdletBase` and is shared with `Write-InfisicalScepMdmProfileToWmi`. -## 2026.07.30.2239 - -- Build produced from commit f62b3e90b1b1. - -## Unreleased (carried forward) - -## 2026.07.30.2151 - -- Build produced from commit 14c8c4f3845b. - -## Unreleased (carried forward) - ### Breaking - Operation failures are now reported as **non-terminating** errors, so `-ErrorAction` (and `$ErrorActionPreference`) decides the outcome: `Continue` writes the error and lets a pipeline keep processing, `SilentlyContinue` suppresses it while still populating `$Error` and `-ErrorVariable`, `Ignore` records nothing, and `Stop` is promoted by the engine into a terminating error. Previously every failure was terminating and ignored `-ErrorAction` entirely. @@ -197,76 +135,10 @@ _Build produced from commit 62131e750109._ - `Get-InfisicalCertificateAuthority` table output includes a `DirectIssue` column (`EnableDirectIssuance`), so CAs eligible for `-CertificateAuthorityId` are visible without formatting the full object. - The README end-to-end PKI example issues through a PKI subscriber and documents how to choose among the three issuance parameter sets. -## 2026.06.16.0217 - -- Build produced from commit 6318d06362ad. - -## Unreleased (carried forward) - -## 2026.06.16.0215 - -- Build produced from commit 6318d06362ad. - -## Unreleased (carried forward) - -## 2026.06.16.0213 - -- Build produced from commit 6318d06362ad. - -## Unreleased (carried forward) - -## 2026.06.16.0207 - -- Build produced from commit 6318d06362ad. - -## Unreleased (carried forward) - -## 2026.06.16.0156 - -- Build produced from commit 6318d06362ad. - -## Unreleased (carried forward) - -## 2026.06.10.2018 - -- Build produced from commit daf1cdce6576. - -## Unreleased (carried forward) - - Renamed prefix-related parameters across `ConvertTo-InfisicalSecretDictionary`, `Import-InfisicalSecret`, `Export-InfisicalSecrets`, and `Start-InfisicalProcess`: `-Prefix` is now `-SecretsPrefix` and `-ForcePrefix` is now `-ForceSecretsPrefix`. `Start-InfisicalProcess` also renames the pipeline parameter `-Secret` to `-Secrets`. The previous names remain available as parameter aliases (`Prefix`, `ForcePrefix`, `Secret`) for backward compatibility. -## 2026.06.07.1435 - -- Build produced from commit 97193d46f2ff. - -## Unreleased (carried forward) - -## 2026.06.07.1426 - -- Build produced from commit b5575222eb36. - -## Unreleased (carried forward) - - Added `-ForcePrefix` switch to `ConvertTo-InfisicalSecretDictionary`, `Import-InfisicalSecret`, `Export-InfisicalSecrets`, and `Start-InfisicalProcess`. When `-Prefix` is supplied, names that already start with the prefix (case-insensitive) are now left as-is to prevent double-prefixing (e.g. `MYAPP_API_KEY` stays `MYAPP_API_KEY` when `-Prefix 'MYAPP_'` is supplied). Pass `-ForcePrefix` to restore unconditional prepending. Centralized in a new `PSInfisicalAPI.Common.InfisicalPrefix.Apply` helper. -## 2026.06.07.1421 - -- Build produced from commit b5575222eb36. - -## Unreleased (carried forward) - -## 2026.06.07.1350 - -- Build produced from commit 1aa51b8cbf9c. - -## Unreleased (carried forward) - -## 2026.06.07.0017 - -- Build produced from commit 77cb03ec9845. - -## Unreleased (carried forward) - - Added Organization CRUD cmdlets: `Get-InfisicalOrganization`, `New-InfisicalOrganization`, `Update-InfisicalOrganization`, `Remove-InfisicalOrganization`. `Get` lists every organization the active session can see (List parameter set, default) and returns a single record when `-OrganizationId` is supplied (Single parameter set). `New`/`Update`/`Remove` honor `-WhatIf`/`-Confirm`; `Remove` defaults to High `ConfirmImpact` and supports `-PassThru`. No project context required. Backed by new `InfisicalOrganization` model, DTO, mapper, and client wired into `InfisicalEndpointRegistry` (`ListOrganizations`, `RetrieveOrganization`, `CreateOrganization`, `UpdateOrganization`, `DeleteOrganization`). - Added Sub-Organization CRUD cmdlets: `Get-InfisicalSubOrganization`, `New-InfisicalSubOrganization`, `Update-InfisicalSubOrganization`, `Remove-InfisicalSubOrganization`, targeting the `/api/v1/sub-organizations` Beta endpoints. `Get` lists by default and accepts optional `-Limit`, `-Offset`, `-Search`, `-OrderBy`, `-OrderDirection`, and `-IsAccessible` query parameters; supplying `-SubOrganizationId` returns a single record. `New`/`Update`/`Remove` honor `-WhatIf`/`-Confirm`; `Remove` defaults to High `ConfirmImpact` and supports `-PassThru`. No project context required. Backed by new `InfisicalSubOrganization` model, DTO, mapper, and client wired into `InfisicalEndpointRegistry` (`ListSubOrganizations`, `RetrieveSubOrganization`, `CreateSubOrganization`, `UpdateSubOrganization`, `DeleteSubOrganization`). - Added `Get-InfisicalSANList` cmdlet: emits a deduplicated SAN candidate set containing the local device name, the device name suffixed with each non-empty DNS suffix found across operational adapters and the system primary domain, every IPv4 unicast address falling within RFC 1918 (10/8, 172.16/12, 192.168/16) or CGNAT (100.64/10), and the IPv4/IPv6 loopback addresses (127.0.0.1, ::1). Intended to feed `Request-InfisicalCertificate -DnsName` directly. @@ -274,239 +146,47 @@ _Build produced from commit 62131e750109._ - `Get-InfisicalSANList`: output is a single strongly-typed `System.String[]` array emitted non-enumerated (`OutputType(string[])`), so variable assignment yields `string[]` rather than `object[]`. This lets `[System.Collections.Generic.List[string]]::AddRange()` consume the result directly and lets the array bind straight to `string[]` parameters such as `Request-InfisicalCertificate -DnsName`. - `build.ps1` `CmdletsToExport` and `Test-ModuleImports` expected list now contain 51 cmdlets. `docs/DesignSpec.md` updated with `§16.7` (Organizations) and `§16.8` (Sub-Organizations); full MAML help added for all 9 new cmdlets in `Module/PSInfisicalAPI/en-US/PSInfisicalAPI.dll-Help.xml`. -## 2026.06.06.2229 - -- Build produced from commit 207e7429e448. - -## Unreleased (carried forward) - - `Start-InfisicalProcess`: switched stdout/stderr capture to event-based `OutputDataReceived`/`ErrorDataReceived` with `BeginOutputReadLine`/`BeginErrorReadLine` (removed `Task`/`ReadToEndAsync`/`GetAwaiter().GetResult()` to eliminate PowerShell `SynchronizationContext` deadlock risk). Restored the original `do { log; sleep } while (!HasExited)` polling pattern using `Thread.Sleep(pollInterval)` so verbose "has been running for X" / "Checking again in Y" messages fire at the configured cadence even when no `-ExecutionTimeout` is supplied. - `Start-InfisicalProcess`: TimeSpan values in verbose logs and on the result now use a friendly format ("`7 seconds, and 364 milliseconds`", "`1 minute, and 30 seconds`", "`N/A`" when zero) matching the legacy `Start-ProcessWithOutput` `GetTimeSpanMessage` scriptblock. Added `DurationFriendly` property to `InfisicalProcessResult` and a "The command execution took X" verbose line at completion. -## 2026.06.06.2227 - -- Build produced from commit d3c7b83da717. - -## Unreleased (carried forward) - -## 2026.06.06.2221 - -- Build produced from commit d3c7b83da717. - -## Unreleased (carried forward) - -## 2026.06.06.2207 - -- Build produced from commit d3c7b83da717. - -## Unreleased (carried forward) - -## 2026.06.06.2206 - -- Build produced from commit d3c7b83da717. - -## Unreleased (carried forward) - -## 2026.06.06.2155 - -- Build produced from commit d3c7b83da717. - -## Unreleased (carried forward) - - Added `Start-InfisicalProcess` cmdlet: launches a child process with `InfisicalSecret` objects (pipeline or `-Secret`) decrypted directly into `ProcessStartInfo.Environment`, with optional `-Prefix`, additional `-EnvironmentVariables`, stdout/stderr capture, `-AcceptableExitCodeList` validation, `-ParsingExpression` regex parsing, `-ExecutionTimeout`/`-ExecutionTimeoutInterval` polling, `-NoWait`, `-WindowStyle`/`-CreateNoWindow` parameter sets, `-Priority`, `-StandardInputObjectList`, `-SecureArgumentList`, `-LogOutput`, `-ContinueOnError`, and `ShouldProcess` support. Secret plaintext is never written to user or machine scope. `build.ps1` `CmdletsToExport` and `Test-ModuleImports` expected list now contain 42 cmdlets. -## 2026.06.06.2138 - -- Build produced from commit 318db7048017. - -## Unreleased (carried forward) - -## 2026.06.05.2040 - -- Build produced from commit 1270c9099cae. - -## Unreleased (carried forward) - -## 2026.06.05.0240 - -- Build produced from commit b438abf18f18. - -## Unreleased (carried forward) - -## 2026.06.05.0215 - -- Build produced from commit 82f99ea7d4a4. - -## Unreleased (carried forward) - -## 2026.06.05.0205 - -- Build produced from commit 86968c18cb15. - -## Unreleased (carried forward) - -## 2026.06.05.0117 - -- Build produced from commit cffda99591c9. - -## Unreleased (carried forward) - -## 2026.06.05.0015 - -- Build produced from commit fb27ab8a8503. - -## Unreleased (carried forward) - - Fixed `ParameterNameConflictsWithAlias` registration error on `Get-InfisicalCertificateApplication`, `Get-InfisicalCertificateApplicationEnrollment`, and `New-InfisicalScepDynamicChallenge`. The cmdlets each declared an `[Alias]` entry that matched the parameter's own name, which PowerShell rejects at bind time and made the cmdlets unusable. -## 2026.06.04.2335 - -- Build produced from commit 3c39a99b9a4c. - -## Unreleased (carried forward) - -## 2026.06.04.2305 - -- Build produced from commit 485ee8a7dd6a. - -## Unreleased (carried forward) - - `Get-InfisicalCertificateApplication` added with `List` (default), `ById`, and `ByName` parameter sets. Binds to `/api/v1/cert-manager/applications` (list) and `/api/v1/cert-manager/applications/{applicationId}` / `/by-name/{name}` for single retrieval. Requests carry the `x-infisical-project-id` header so the certificate-manager scope resolves correctly. New `InfisicalCertificateApplication` model surfaces id, project, name, description, and counts. - `Get-InfisicalCertificateApplicationEnrollment` added. Returns the API/EST/ACME/SCEP enrollment configuration for an application/profile pair (`GET /api/v1/cert-manager/applications/{applicationId}/profiles/{profileId}/enrollment`). The new `InfisicalCertificateApplicationEnrollment` model includes sub-blocks for each enrollment protocol; the SCEP block computes a SHA-1 `RaCertificateThumbprint` from the RA certificate PEM so it can be fed directly into MDM payloads. - `New-InfisicalScepDynamicChallenge` added. Wraps `POST /scep/applications/{applicationId}/profiles/{profileId}/challenge` and returns the minted challenge as a `SecureString` (default) or string (`-AsPlainText`). The endpoint is gated by the dynamic-challenge feature on the target Infisical instance and by the calling identity's permission on `certificate-application-enrollment`. - `Get-InfisicalScepMdmProfile` reworked into three parameter sets. `FromEnrollment` (new default) consumes an `InfisicalCertificateApplicationEnrollment` and auto-resolves `ServerUrl` from `scep.scepEndpointUrl`, `CAThumbprint` from the RA certificate, and the SCEP challenge (auto-minting when `challengeType=dynamic` and `-Challenge` is not supplied). `FromProfile` keeps the legacy projection from an `InfisicalCertificateProfile`, now requires `-ApplicationId`, and the default server URL is built against `/scep/applications/{appId}/profiles/{profileId}/pkiclient.exe`. `Manual` requires explicit `-ServerUrl`, `-Challenge`, and `-UniqueId`. - `InfisicalApiInvoker` accepts an optional `extraHeaders` argument so callers can attach the `x-infisical-project-id` header and override `Accept` for plain-text responses (used by the new SCEP challenge endpoint). -## 2026.06.04.2147 - -- Build produced from commit 183fb48c32ce. - -## Unreleased (carried forward) - - `Get-InfisicalScepMdmProfile` added. Projects an `InfisicalCertificateProfile` (pipeline-bound) into a new `InfisicalScepMdmProfile` model that mirrors the Windows `ClientCertificateInstall/SCEP` CSP node set. `-ServerUrl` defaults to `{baseUri}/scep/{profileId}/pkiclient.exe` derived from the active connection (the `pkiclient.exe` suffix is the RFC 8894 / Cisco SCEP client compatibility holdover, not a server-side executable). `-UniqueId` defaults to a sanitized slug. `-Challenge` is a `SecureString` decrypted only when materializing the model. `KeyAlgorithm` and `EkuMapping` are inherited from the source profile defaults unless overridden. - `Export-InfisicalScepMdmProfile` added. Serializes the model via `InfisicalScepMdmProfile.ToSyncMl()` (XDocument build, XmlWriter emit, XmlReader round-trip validation) and writes the result to `-Path` as UTF-8 without BOM. Auto-creates the target directory, honors `-WhatIf`/`-Confirm`, and follows the project rule for `-Force`: if the destination exists without `-Force`, the cmdlet logs a warning and returns instead of throwing. `-PassThru` emits the resulting `FileInfo`. - `Write-InfisicalScepMdmProfileToWmi` added. Submits the same model to the local MDM Bridge WMI provider by invoking `New-CimInstance -Namespace root/cimv2/mdm/dmmap -ClassName MDM_ClientCertificateInstall_SCEP02 -Property ` through the host runspace (no new package references). Guards: throws `PlatformNotSupportedException` off Windows; device-scope enrollment requires an elevated session unless `-SkipElevationCheck` is passed; supports `-WhatIf`/`-Confirm`; `-PassThru` emits the returned CIM instance. Override `-ClassName` when targeting a different SCEP CSP version on the host. -## 2026.06.04.2112 - -- Build produced from commit 3754de74f6c8. - -## Unreleased (carried forward) - - Infisical API error responses are now parsed to surface the server-side `message`, `error`, and `reqId` fields. The 4xx/5xx exception message includes the human-readable explanation (e.g. "The project is of type secret-manager") instead of an opaque `Infisical API returned 400 (Bad Request)`. The `InfisicalApiException` gains `ApiErrorMessage` and `ApiRequestId` properties; `InfisicalErrorDetails` carries the same fields so PowerShell error records and logger output expose them. - `Get-InfisicalCertificateProfile` added with `List` (default) and `ById` parameter sets. List binds to `GET /api/v1/cert-manager/certificate-profiles` (optional `-Limit`, `-Offset`, `-IncludeConfigs`); ById binds to `GET /api/v1/cert-manager/certificate-profiles/{certificateProfileId}`. New `InfisicalCertificateProfile` model surfaces ca/policy ids, slug, enrollment type, per-profile defaults (ttl, key/extended key usages), and the embedded CA/policy/apiConfig summaries. - `Get-InfisicalCertificatePolicy` added with `List` (default) and `ById` parameter sets. List binds to `GET /api/v1/cert-manager/certificate-policies` (optional `-Limit`, `-Offset`); ById binds to `GET /api/v1/cert-manager/certificate-policies/{certificatePolicyId}`. New `InfisicalCertificatePolicy` model surfaces subject, SANs, key usages, extended key usages, algorithms, and validity. Polymorphic string-or-array fields (`allowed`, `required`, `keyAlgorithm`) are normalized to arrays; `sans` is normalized whether the API returns an object or an array. - `Get-InfisicalCertificateAuthority` gains a `-Kind` parameter on the List parameter set with values `Internal` (default, preserves prior behavior against `/api/v1/cert-manager/ca/internal`), `Any` (binds to the generic `/api/v1/cert-manager/ca` endpoint which returns both internal and ACME CAs), and `Acme` (uses the generic endpoint and client-side filters to ACME issuers only). ById retrieval is unchanged and still resolves against the internal CA endpoint. - `Request-InfisicalCertificate` gains a `ByProfile` parameter set bound by the new `-CertificateProfileId` parameter (alias `ProfileId`). The cmdlet generates a local keypair and CSR as usual, then POSTs to `/api/v1/cert-manager/certificates` with the profile id, the CSR, and a subject/attribute envelope (commonName, organization, organizationalUnit, country, state, locality, ttl, notBefore, notAfter, keyUsages, extendedKeyUsages). The wrapped response (`{certificate:{certificate,certificateChain,issuingCaCertificate,serialNumber,certificateId,privateKey}, certificateRequestId, status, message}`) is unwrapped into the existing `InfisicalSignedCertificate` shape so the install / reuse / chain-completion paths continue to work unchanged. Issuance that returns without a certificate body (e.g. status `pending_approval` or `pending_validation`) is logged as a warning and the cmdlet emits a status-only `InfisicalCertificateResult` (new `Status`, `StatusMessage`, `CertificateRequestId` properties) instead of throwing; install / chain / private-key-write steps are skipped in that case. Whether issuance is immediate or pending is dictated by the certificate policy bound to the profile (auto-approve vs. manual review and any required validation). -## 2026.06.04.1920 - -- Build produced from commit 0f8f44afdb38. - -## Unreleased (carried forward) - - `build.ps1` gains a `-CommitArtifacts` switch that, after a successful build, stages and commits only the build outputs (`Module/PSInfisicalAPI/bin/**`, `Module/PSInfisicalAPI/PSInfisicalAPI.psd1`, and the auto-inserted `CHANGELOG.md` build stamp) with a message that references the source commit whose hash is now embedded in `BuildCommitHash`. The switch is mutually exclusive with the older broader `-CommitOnSuccess` (which still uses `git add -A`). README extended with a "Committing source and build artifacts in lockstep" section describing the recommended two-commit workflow. -## 2026.06.04.1917 - -- Build produced from commit a34db831d8bf. - -## Unreleased (carried forward) - -## 2026.06.04.1915 - -- Build produced from commit 2489b7adca98. - -## Unreleased (carried forward) - -## 2026.06.04.1911 - -- Build produced from commit 51bf819c37e5. - -## Unreleased (carried forward) - -## 2026.06.04.1906 - -- Build produced from commit 51bf819c37e5. - -## Unreleased (carried forward) - - **BREAKING**: Removed the plural-noun discovery cmdlets `Get-InfisicalProjects`, `Get-InfisicalEnvironments`, `Get-InfisicalFolders`, `Get-InfisicalTags`, `Get-InfisicalSecrets`, and `Get-InfisicalCertificates`. Their behavior is now folded into the corresponding singular cmdlets via a `List` (default) / single-record parameter set pair, matching the existing `Get-InfisicalCertificateAuthority` precedent. Callers should drop the trailing `s`; invocation without the identity parameter (`-ProjectId`, `-EnvironmentSlugOrId`, `-FolderNameOrId`, `-TagSlugOrId`, `-SecretName`, `-SerialNumber`) now returns the list, and supplying the identity parameter returns the single record. No back-compat aliases were added. - Added `Get-InfisicalPkiSubscriber` with `List` (default) and `ByName` parameter sets, backed by new `InfisicalPkiClient.ListPkiSubscribers` and `GetPkiSubscriber` methods, an `InfisicalPkiSubscriber` model, and corresponding DTOs/mapper. Use the emitted `Name` (slug) on `Request-InfisicalCertificate -PkiSubscriberSlug`. - **Bug fix**: `Request-InfisicalCertificate -PkiSubscriberSlug ...` was returning 404 because the registry's `SignCertificateBySubscriber` endpoint pointed at `/api/v1/pki/pki-subscribers/{subscriberName}/sign-certificate` and `/api/v1/cert-manager/pki-subscribers/...`. Per Infisical's `v1/index.ts`, the subscriber router is mounted at `/pki/subscribers`, so the single correct path is `/api/v1/pki/subscribers/{subscriberName}/sign-certificate`. The redundant `cert-manager` template was removed; the PKI endpoint registry tests were updated to match. - Updated MAML help in `Module/PSInfisicalAPI/en-US/PSInfisicalAPI.dll-Help.xml`: the six consolidated cmdlets and the new `Get-InfisicalPkiSubscriber` each ship three examples — two straight-line invocations (one per parameter set) plus one `OrderedDictionary` splat example. All in-text references to the removed plural cmdlets across other cmdlets' examples were updated to the singular form. - `build.ps1`: `CmdletsToExport` and the `Test-ModuleImports` expected cmdlet list were updated to drop the six plural cmdlets and add `Get-InfisicalPkiSubscriber` (total: 34 exported cmdlets). -## 2026.06.04.1825 - -- Build produced from commit 19615363e356. - -## Unreleased (carried forward) - -## 2026.06.04.1820 - -- Build produced from commit 19615363e356. - -## Unreleased (carried forward) - - `Install-InfisicalCertificate` now routes chain certificates by self-signed status instead of dumping every chain entry into the Intermediate Certification Authorities store. Self-signed roots are installed into `StoreName.Root` (Trusted Root Certification Authorities) and non-self-signed intermediates are installed into `StoreName.CertificateAuthority` (Intermediate Certification Authorities). The leaf continues to use the user-specified `-StoreName`/`-StoreLocation` (default `My`/`CurrentUser`). `Request-InfisicalCertificate` already routed chain certs correctly; the same routing helper is now shared by both cmdlets. - `InfisicalCertificateRequestHelpers` exposes a new public `GetChainCertificateTargetStore(X509Certificate2)` classifier and a new `InstallChain(IEnumerable, StoreLocation, bool, IInfisicalLogger, string)` overload. The existing `InstallChain(InfisicalSignedCertificate, ...)` overload now delegates to the new collection-based overload, so PKI chain-installation routing is centralized in one place. -## 2026.06.04.1810 - -- Build produced from commit 19615363e356. - -## Unreleased (carried forward) - - Authored MAML help (`Module/PSInfisicalAPI/en-US/PSInfisicalAPI.dll-Help.xml`) covering all 39 exported cmdlets. Every entry includes a synopsis, description, notes section, and two examples: a one-liner and an `OrderedDictionary` splat (with `OrdinalIgnoreCase`) that includes preceding `Get-` resolver commands wherever IDs or slugs are required. - `build.ps1` now stages the cmdlet help XML next to the deployed binary. After the publish step, every culture directory under `Module/PSInfisicalAPI/` (matching `xx` or `xx-XX`) that contains `PSInfisicalAPI.dll-Help.xml` is mirrored into `bin//`. The script hard-fails if `bin/en-US/PSInfisicalAPI.dll-Help.xml` is missing or contains zero `` entries. - `Test-ModuleImports` in `build.ps1` now dynamically enumerates exported cmdlets via `Get-Command -Module PSInfisicalAPI -CommandType Cmdlet`, cross-checks the result against an expected list of 39 cmdlet names (including the previously-missing `Copy-InfisicalSecret`), and for each cmdlet asserts that `Get-Help -Full` returns a non-empty synopsis (rejecting PowerShell's auto-generated cmdlet-name fallback), a non-empty description, and that `Get-Help -Examples` returns at least one example node whose `` block is non-empty. -## 2026.06.04.1808 - -- Build produced from commit 19615363e356. - -## Unreleased (carried forward) - -## 2026.06.04.1658 - -- Build produced from commit 19615363e356. - -## Unreleased (carried forward) - - `Request-InfisicalCertificate` reuse path now falls back to the Infisical certificate-bundle endpoint when the local trust stores do not contain the issuing intermediates or root. The cmdlet builds the local chain first; if the result has no intermediates and no root, it fetches `GetCertificateBundle(serialNumber)` and rebuilds the result with the bundle's chain PEM merged in. A new `-LocalChainOnly` switch opts out of the bundle fetch for strict offline behavior. Bundle-fetch failures are logged at verbose level and the cmdlet returns the local-only result. - `InfisicalCertificateRequestHelpers.BuildResultFromExistingLocal` adds a second overload that accepts an `InfisicalCertificateBundle`; when supplied, chain certs from the bundle are deduplicated by thumbprint and merged with the locally-resolved chain before classification. -## 2026.06.04.1652 - -- Build produced from commit 19615363e356. - -## Unreleased (carried forward) - -## 2026.06.04.1651 - -- Build produced from commit 19615363e356. - -## Unreleased (carried forward) - -## 2026.06.04.1634 - -- Build produced from commit 19615363e356. - -## Unreleased (carried forward) - -## 2026.06.04.1631 - -- Build produced from commit 19615363e356. - -## Unreleased (carried forward) - -## 2026.06.04.1622 - -- Build produced from commit 19615363e356. - -## Unreleased (carried forward) - - **PKI contract fixes and cmdlet expansion**: - `InfisicalPkiClient` no longer auto-injects `connection.ProjectId` into PKI CA list/retrieve calls; only the caller's explicit `-ProjectId` is forwarded so that cert-manager primary routes (which do not accept the query parameter) succeed. - List/single CA and single certificate response parsing now tolerate raw arrays, wrapper objects (`{certificate: {...}}`, `{certificates: [...]}`), and nested `configuration` blocks. `InfisicalCaMapper` reads CA detail fields from `configuration` first, falling back to top-level. @@ -518,43 +198,13 @@ _Build produced from commit 62131e750109._ - **Multi-algorithm CSR support** on `Request-InfisicalCertificate` via split parameters: `-KeyAlgorithm` (`Rsa`/`Ecdsa`/`Ed25519`, default `Rsa`), `-KeySize` (`2048`/`3072`/`4096`, default `2048`, applies to RSA only), `-Curve` (`P256`/`P384`, default `P256`, applies to ECDSA only). Signature algorithms are picked automatically: SHA256WITHRSA for RSA, SHA256WITHECDSA / SHA384WITHECDSA for ECDSA P-256/P-384, and Ed25519 (pure-EdDSA) for Ed25519. The underlying `InfisicalCsrBuilder.Build(subject, dns, ip, options)` API was updated to take an `InfisicalCsrOptions` object in place of the prior `keySize` int. - **Sign-certificate endpoint registrations**: `SignCertificateBySubscriber` and `SignCertificateByCa` registered with both `/api/v1/pki/...` and `/api/v1/cert-manager/...` candidate paths and marked `ContainsSecretMaterialInResponse = true`. -## 2026.06.04.1554 - -- Build produced from commit 19615363e356. - -## Unreleased (carried forward) - -## 2026.06.04.1512 - -- Build produced from commit 19615363e356. - -## Unreleased (carried forward) - -## 2026.06.04.1508 - -- Build produced from commit 19615363e356. - -## Unreleased (carried forward) - - **CI — Gitea artifact upload fix**: Replaced `actions/upload-artifact@v4` and `actions/download-artifact@v4` with the Gitea-compatible forks `christopherhx/gitea-upload-artifact@v4` and `christopherhx/gitea-download-artifact@v4` in `.gitea/workflows/publish-psgallery.yml`. The upstream v4 actions abort on Gitea because Gitea is detected as GHES, which the upstream v4 actions do not support (see [go-gitea/gitea#28853](https://github.com/go-gitea/gitea/issues/28853)). -## 2026.06.04.0123 - -- Build produced from commit 2cbd5c2008f5. - -## Unreleased (carried forward) - - **M10 polish — formatting, type metadata, and PKI route aliases**: - Added default table views and `DefaultDisplayPropertySet` entries for `InfisicalCertificateAuthority`, `InfisicalCertificate`, and `InfisicalCertificateBundle` in the module `Format.ps1xml` / `Types.ps1xml`. - Realigned PKI endpoint registry to current Infisical paths: `ListInternalCertificateAuthorities` and `RetrieveInternalCertificateAuthority` now use `/api/v1/cert-manager/ca/internal[/{caId}]` as primary, with legacy `/api/v1/pki/ca/internal[/{caId}]` retained as a fallback alias. `GetCertificateBundle` and `RetrieveCertificate` similarly carry `cert-manager` fallback aliases. - `InfisicalApiInvoker.InvokeWithCandidateFallback` walks the candidate list and falls back on `404`/`405`, used by `InfisicalPkiClient` so older self-hosted Infisical instances are tolerated transparently. -## 2026.06.04.0114 - -- Build produced from commit 2cbd5c2008f5. - -## Unreleased (carried forward) - - **M10 — PKI Internal CAs, Certificates & Windows Store integration**: - **`Get-InfisicalCertificateAuthority`** lists internal certificate authorities for the current project, or returns a single CA with `-CaId`. - **`Search-InfisicalCertificate`** wraps `POST /api/v1/projects/{projectId}/certificates/search` with rich filters (`-CommonName`, `-FriendlyName`, `-Search`, `-Status`, `-CaId`, `-ProfileId`, `-ApplicationId`, `-EnrollmentType`, `-KeyAlgorithm`, `-SignatureAlgorithm`, `-Source`, `-NotAfterFrom/To`, `-NotBeforeFrom/To`, `-SortBy/-SortOrder`, `-Limit/-Offset`). Auto-paginates unless `-NoAutoPage` is set. @@ -564,24 +214,9 @@ _Build produced from commit 62131e750109._ - **BouncyCastle dependency**: Added `BouncyCastle.Cryptography` to bridge PEM/PKCS#8 parsing on .NET Standard 2.0 / Windows PowerShell 5.1 (where `X509Certificate2.CreateFromPem` and `RSA.ImportFromPem` are unavailable). The shared `PemCertificateBuilder` assembles cert + chain + key into an in-memory PKCS#12 blob and imports it back into `X509Certificate2`. The DLL ships in the published module bin directory. - PKI endpoint registry entries for `ListInternalCertificateAuthorities` (`GET /api/v1/pki/ca/internal`), `RetrieveInternalCertificateAuthority` (`GET /api/v1/pki/ca/internal/{caId}`), `SearchCertificates` (`POST /api/v1/projects/{projectId}/certificates/search`), `RetrieveCertificate`, and `GetCertificateBundle` (`GET /api/v1/pki/certificates/{serialNumber}/bundle`). -## 2026.06.04.0020 - -- Build produced from commit 211fbcf34dbb. - -## Unreleased (carried forward) - -## 2026.06.04.0005 - -- Build produced from commit e0a6ef02df3e. - -## Unreleased (carried forward) - - **Bulk v4 batch routes**: Endpoint registry now registers `POST|PATCH|DELETE /api/v4/secrets/batch` as the preferred candidates for `BulkCreateSecret`/`BulkUpdateSecret`/`BulkDeleteSecret`; the existing v3 raw routes (`/api/v3/secrets/batch/raw`) remain as automatic fallback. Batch request DTOs serialize both `projectId` (required by v4) and `workspaceId` (accepted by v3) when populated. - **Strongly-typed bulk input**: `-Secrets` on `New-InfisicalSecret` and `Update-InfisicalSecret` is now `IDictionary[]` instead of `Hashtable[]`. `InfisicalBulkSecretConverter` accepts `IEnumerable>` and parses `TagIds` from a comma-separated string. Nested `Metadata`/`SecretMetadata` dictionaries are no longer accepted in the bulk hashtable surface (set `SecretMetadata` programmatically on `InfisicalBulkCreateSecretItem`/`InfisicalBulkUpdateSecretItem` if needed). -## 2026.06.03.2207 - -- Build produced from commit 09c3d5c68bbc. - **M9 — Bulk, Duplicate & Inheritance**: - **Bulk parameter sets** added to `New-InfisicalSecret`, `Update-InfisicalSecret`, and `Remove-InfisicalSecret` accepting `-Secrets Hashtable[]`; client methods `CreateBatch`/`UpdateBatch`/`DeleteBatch` wrap `POST|PATCH|DELETE /api/v3/secrets/batch/raw`. - **`Copy-InfisicalSecret`** cmdlet added, wrapping `POST /api/v4/secrets/duplicate` with source/destination environment + path parameters and per-attribute copy toggles. @@ -590,17 +225,6 @@ _Build produced from commit 62131e750109._ - `InfisicalBulkSecretConverter` accepts flexible key aliases (`SecretName`/`Name`/`Key`, `SecretValue`/`Value`, `SecretComment`/`Comment`, `Metadata`/`SecretMetadata`). - Test count: 161 (up from 139). Added coverage for bulk DTO shapes, the converter, the duplicate request DTO, registry entries for the four new endpoints, and the resolution helpers. -## Unreleased (carried forward) - -## 2026.06.03.2206 - -- Build produced from commit 09c3d5c68bbc. - -## Unreleased (carried forward) - -## 2026.06.03.2136 - -- Build produced from commit d9822aab7a4a. - **Resource CRUD expansion**: Added full Get/New/Update/Remove cmdlet families for Projects, Environments, Folders, and Tags (20 new cmdlets): - Projects: `Get-InfisicalProjects`, `Get-InfisicalProject`, `New-InfisicalProject`, `Update-InfisicalProject`, `Remove-InfisicalProject`. - Environments: `Get-InfisicalEnvironments`, `Get-InfisicalEnvironment`, `New-InfisicalEnvironment`, `Update-InfisicalEnvironment`, `Remove-InfisicalEnvironment`. @@ -611,820 +235,12 @@ _Build produced from commit 62131e750109._ - Endpoint registry expanded with login routes (`/api/v1/auth/{jwt|oidc|ldap|azure|gcp}-auth/login`) and CRUD routes for projects (v2), environments, folders, tags, and secret mutations. - Test suite expanded to 139 passing tests, including mapper round-trips for projects/environments/folders/tags, secret mutation DTO shapes, and request-body validation for each new auth provider. -## 2026.06.03.0131 - -- Build produced from commit 7be0b7b42008. - **Behavior change**: `Get-InfisicalSecrets` and `Get-InfisicalSecret` now default `-ViewSecretValue` to `$true`. Real secret values are returned by default. To request the redacted/hidden response, pass `-ViewSecretValue:$false`. - `InfisicalSecretMapper` now treats the server-side `` placeholder as a hidden marker rather than a value: when `secretValueHidden=true` (or the placeholder string is detected) `SecretValue` is set to `null` instead of stuffing the literal into a `SecureString`. This prevents downstream consumers (auth, exports, dictionary conversion) from silently using `` as if it were a real secret. -## Unreleased (carried forward) - -## 2026.06.03.0113 - -- Build produced from commit 09c577ebd0fd. - Added `InfisicalSecret.GetPlainTextValue()` for direct plain-text access to secret material from PowerShell without needing `Marshal.SecureStringToBSTR`. - Added `-AsPlainText` switch to `ConvertTo-InfisicalSecretDictionary`; when present the cmdlet emits `Dictionary` instead of the default `Dictionary`. -## Unreleased (carried forward) - -## 2026.06.03.0057 - -- Build produced from commit 7e5209190ac2. - -## Unreleased (carried forward) - -## 2026.06.03.0056 - -- Build produced from commit 7e5209190ac2. - -## Unreleased (carried forward) - -## 2026.06.03.0055 - -- Build produced from commit 7e5209190ac2. - -## Unreleased (carried forward) - -## 2026.06.03.0047 - -- Build produced from commit 7e5209190ac2. - -## Unreleased (carried forward) - -## 2026.06.03.0046 - -- Build produced from commit 7e5209190ac2. - -## Unreleased (carried forward) - -## 2026.06.03.0032 - -- Build produced from commit c86676010532. - -## Unreleased (carried forward) - -## 2026.06.02.1907 - -- Build produced from commit fa65c18bc171. - -## Unreleased (carried forward) - -## 2026.06.02.1902 - -- Build produced from commit fa65c18bc171. - -## Unreleased - -## 2026.06.02.1907 - -- Build produced from commit fa65c18bc171. - -## Unreleased (carried forward) (carried forward) - -## 2026.06.02.1737 - -- Build produced from commit fa65c18bc171. - -## Unreleased - -## 2026.06.02.1907 - -- Build produced from commit fa65c18bc171. - -## Unreleased (carried forward) - -## 2026.06.02.1902 - -- Build produced from commit fa65c18bc171. - -## Unreleased - -## 2026.06.02.1907 - -- Build produced from commit fa65c18bc171. - -## Unreleased (carried forward) (carried forward) (carried forward) - -## 2026.06.02.1724 - -- Build produced from commit 5801b4774af5. - -## Unreleased - -## 2026.06.02.1907 - -- Build produced from commit fa65c18bc171. - -## Unreleased (carried forward) - -## 2026.06.02.1902 - -- Build produced from commit fa65c18bc171. - -## Unreleased - -## 2026.06.02.1907 - -- Build produced from commit fa65c18bc171. - -## Unreleased (carried forward) (carried forward) - -## 2026.06.02.1737 - -- Build produced from commit fa65c18bc171. - -## Unreleased - -## 2026.06.02.1907 - -- Build produced from commit fa65c18bc171. - -## Unreleased (carried forward) - -## 2026.06.02.1902 - -- Build produced from commit fa65c18bc171. - -## Unreleased - -## 2026.06.02.1907 - -- Build produced from commit fa65c18bc171. - -## Unreleased (carried forward) (carried forward) (carried forward) (carried forward) - -## 2026.06.02.1648 - -- Build produced from commit 430e3a00c921. - -## Unreleased - -## 2026.06.02.1907 - -- Build produced from commit fa65c18bc171. - -## Unreleased (carried forward) - -## 2026.06.02.1902 - -- Build produced from commit fa65c18bc171. - -## Unreleased - -## 2026.06.02.1907 - -- Build produced from commit fa65c18bc171. - -## Unreleased (carried forward) (carried forward) - -## 2026.06.02.1737 - -- Build produced from commit fa65c18bc171. - -## Unreleased - -## 2026.06.02.1907 - -- Build produced from commit fa65c18bc171. - -## Unreleased (carried forward) - -## 2026.06.02.1902 - -- Build produced from commit fa65c18bc171. - -## Unreleased - -## 2026.06.02.1907 - -- Build produced from commit fa65c18bc171. - -## Unreleased (carried forward) (carried forward) (carried forward) - -## 2026.06.02.1724 - -- Build produced from commit 5801b4774af5. - -## Unreleased - -## 2026.06.02.1907 - -- Build produced from commit fa65c18bc171. - -## Unreleased (carried forward) - -## 2026.06.02.1902 - -- Build produced from commit fa65c18bc171. - -## Unreleased - -## 2026.06.02.1907 - -- Build produced from commit fa65c18bc171. - -## Unreleased (carried forward) (carried forward) - -## 2026.06.02.1737 - -- Build produced from commit fa65c18bc171. - -## Unreleased - -## 2026.06.02.1907 - -- Build produced from commit fa65c18bc171. - -## Unreleased (carried forward) - -## 2026.06.02.1902 - -- Build produced from commit fa65c18bc171. - -## Unreleased - -## 2026.06.02.1907 - -- Build produced from commit fa65c18bc171. - -## Unreleased (carried forward) (carried forward) (carried forward) (carried forward) (carried forward) - -## 2026.06.02.1638 - -- Build produced from commit 3c47d6ff30ec. - -## Unreleased - -## 2026.06.02.1907 - -- Build produced from commit fa65c18bc171. - -## Unreleased (carried forward) - -## 2026.06.02.1902 - -- Build produced from commit fa65c18bc171. - -## Unreleased - -## 2026.06.02.1907 - -- Build produced from commit fa65c18bc171. - -## Unreleased (carried forward) (carried forward) - -## 2026.06.02.1737 - -- Build produced from commit fa65c18bc171. - -## Unreleased - -## 2026.06.02.1907 - -- Build produced from commit fa65c18bc171. - -## Unreleased (carried forward) - -## 2026.06.02.1902 - -- Build produced from commit fa65c18bc171. - -## Unreleased - -## 2026.06.02.1907 - -- Build produced from commit fa65c18bc171. - -## Unreleased (carried forward) (carried forward) (carried forward) - -## 2026.06.02.1724 - -- Build produced from commit 5801b4774af5. - -## Unreleased - -## 2026.06.02.1907 - -- Build produced from commit fa65c18bc171. - -## Unreleased (carried forward) - -## 2026.06.02.1902 - -- Build produced from commit fa65c18bc171. - -## Unreleased - -## 2026.06.02.1907 - -- Build produced from commit fa65c18bc171. - -## Unreleased (carried forward) (carried forward) - -## 2026.06.02.1737 - -- Build produced from commit fa65c18bc171. - -## Unreleased - -## 2026.06.02.1907 - -- Build produced from commit fa65c18bc171. - -## Unreleased (carried forward) - -## 2026.06.02.1902 - -- Build produced from commit fa65c18bc171. - -## Unreleased - -## 2026.06.02.1907 - -- Build produced from commit fa65c18bc171. - -## Unreleased (carried forward) (carried forward) (carried forward) (carried forward) - -## 2026.06.02.1648 - -- Build produced from commit 430e3a00c921. - -## Unreleased - -## 2026.06.02.1907 - -- Build produced from commit fa65c18bc171. - -## Unreleased (carried forward) - -## 2026.06.02.1902 - -- Build produced from commit fa65c18bc171. - -## Unreleased - -## 2026.06.02.1907 - -- Build produced from commit fa65c18bc171. - -## Unreleased (carried forward) (carried forward) - -## 2026.06.02.1737 - -- Build produced from commit fa65c18bc171. - -## Unreleased - -## 2026.06.02.1907 - -- Build produced from commit fa65c18bc171. - -## Unreleased (carried forward) - -## 2026.06.02.1902 - -- Build produced from commit fa65c18bc171. - -## Unreleased - -## 2026.06.02.1907 - -- Build produced from commit fa65c18bc171. - -## Unreleased (carried forward) (carried forward) (carried forward) - -## 2026.06.02.1724 - -- Build produced from commit 5801b4774af5. - -## Unreleased - -## 2026.06.02.1907 - -- Build produced from commit fa65c18bc171. - -## Unreleased (carried forward) - -## 2026.06.02.1902 - -- Build produced from commit fa65c18bc171. - -## Unreleased - -## 2026.06.02.1907 - -- Build produced from commit fa65c18bc171. - -## Unreleased (carried forward) (carried forward) - -## 2026.06.02.1737 - -- Build produced from commit fa65c18bc171. - -## Unreleased - -## 2026.06.02.1907 - -- Build produced from commit fa65c18bc171. - -## Unreleased (carried forward) - -## 2026.06.02.1902 - -- Build produced from commit fa65c18bc171. - -## Unreleased - -## 2026.06.02.1907 - -- Build produced from commit fa65c18bc171. - -## Unreleased (carried forward) (carried forward) (carried forward) (carried forward) (carried forward) (carried forward) - -## 2026.06.02.1611 - -- Build produced from commit 3c47d6ff30ec. - -## Unreleased - -## 2026.06.02.1907 - -- Build produced from commit fa65c18bc171. - -## Unreleased (carried forward) - -## 2026.06.02.1902 - -- Build produced from commit fa65c18bc171. - -## Unreleased - -## 2026.06.02.1907 - -- Build produced from commit fa65c18bc171. - -## Unreleased (carried forward) (carried forward) - -## 2026.06.02.1737 - -- Build produced from commit fa65c18bc171. - -## Unreleased - -## 2026.06.02.1907 - -- Build produced from commit fa65c18bc171. - -## Unreleased (carried forward) - -## 2026.06.02.1902 - -- Build produced from commit fa65c18bc171. - -## Unreleased - -## 2026.06.02.1907 - -- Build produced from commit fa65c18bc171. - -## Unreleased (carried forward) (carried forward) (carried forward) - -## 2026.06.02.1724 - -- Build produced from commit 5801b4774af5. - -## Unreleased - -## 2026.06.02.1907 - -- Build produced from commit fa65c18bc171. - -## Unreleased (carried forward) - -## 2026.06.02.1902 - -- Build produced from commit fa65c18bc171. - -## Unreleased - -## 2026.06.02.1907 - -- Build produced from commit fa65c18bc171. - -## Unreleased (carried forward) (carried forward) - -## 2026.06.02.1737 - -- Build produced from commit fa65c18bc171. - -## Unreleased - -## 2026.06.02.1907 - -- Build produced from commit fa65c18bc171. - -## Unreleased (carried forward) - -## 2026.06.02.1902 - -- Build produced from commit fa65c18bc171. - -## Unreleased - -## 2026.06.02.1907 - -- Build produced from commit fa65c18bc171. - -## Unreleased (carried forward) (carried forward) (carried forward) (carried forward) - -## 2026.06.02.1648 - -- Build produced from commit 430e3a00c921. - -## Unreleased - -## 2026.06.02.1907 - -- Build produced from commit fa65c18bc171. - -## Unreleased (carried forward) - -## 2026.06.02.1902 - -- Build produced from commit fa65c18bc171. - -## Unreleased - -## 2026.06.02.1907 - -- Build produced from commit fa65c18bc171. - -## Unreleased (carried forward) (carried forward) - -## 2026.06.02.1737 - -- Build produced from commit fa65c18bc171. - -## Unreleased - -## 2026.06.02.1907 - -- Build produced from commit fa65c18bc171. - -## Unreleased (carried forward) - -## 2026.06.02.1902 - -- Build produced from commit fa65c18bc171. - -## Unreleased - -## 2026.06.02.1907 - -- Build produced from commit fa65c18bc171. - -## Unreleased (carried forward) (carried forward) (carried forward) - -## 2026.06.02.1724 - -- Build produced from commit 5801b4774af5. - -## Unreleased - -## 2026.06.02.1907 - -- Build produced from commit fa65c18bc171. - -## Unreleased (carried forward) - -## 2026.06.02.1902 - -- Build produced from commit fa65c18bc171. - -## Unreleased - -## 2026.06.02.1907 - -- Build produced from commit fa65c18bc171. - -## Unreleased (carried forward) (carried forward) - -## 2026.06.02.1737 - -- Build produced from commit fa65c18bc171. - -## Unreleased - -## 2026.06.02.1907 - -- Build produced from commit fa65c18bc171. - -## Unreleased (carried forward) - -## 2026.06.02.1902 - -- Build produced from commit fa65c18bc171. - -## Unreleased - -## 2026.06.02.1907 - -- Build produced from commit fa65c18bc171. - -## Unreleased (carried forward) (carried forward) (carried forward) (carried forward) (carried forward) - -## 2026.06.02.1638 - -- Build produced from commit 3c47d6ff30ec. - -## Unreleased - -## 2026.06.02.1907 - -- Build produced from commit fa65c18bc171. - -## Unreleased (carried forward) - -## 2026.06.02.1902 - -- Build produced from commit fa65c18bc171. - -## Unreleased - -## 2026.06.02.1907 - -- Build produced from commit fa65c18bc171. - -## Unreleased (carried forward) (carried forward) - -## 2026.06.02.1737 - -- Build produced from commit fa65c18bc171. - -## Unreleased - -## 2026.06.02.1907 - -- Build produced from commit fa65c18bc171. - -## Unreleased (carried forward) - -## 2026.06.02.1902 - -- Build produced from commit fa65c18bc171. - -## Unreleased - -## 2026.06.02.1907 - -- Build produced from commit fa65c18bc171. - -## Unreleased (carried forward) (carried forward) (carried forward) - -## 2026.06.02.1724 - -- Build produced from commit 5801b4774af5. - -## Unreleased - -## 2026.06.02.1907 - -- Build produced from commit fa65c18bc171. - -## Unreleased (carried forward) - -## 2026.06.02.1902 - -- Build produced from commit fa65c18bc171. - -## Unreleased - -## 2026.06.02.1907 - -- Build produced from commit fa65c18bc171. - -## Unreleased (carried forward) (carried forward) - -## 2026.06.02.1737 - -- Build produced from commit fa65c18bc171. - -## Unreleased - -## 2026.06.02.1907 - -- Build produced from commit fa65c18bc171. - -## Unreleased (carried forward) - -## 2026.06.02.1902 - -- Build produced from commit fa65c18bc171. - -## Unreleased - -## 2026.06.02.1907 - -- Build produced from commit fa65c18bc171. - -## Unreleased (carried forward) (carried forward) (carried forward) (carried forward) - -## 2026.06.02.1648 - -- Build produced from commit 430e3a00c921. - -## Unreleased - -## 2026.06.02.1907 - -- Build produced from commit fa65c18bc171. - -## Unreleased (carried forward) - -## 2026.06.02.1902 - -- Build produced from commit fa65c18bc171. - -## Unreleased - -## 2026.06.02.1907 - -- Build produced from commit fa65c18bc171. - -## Unreleased (carried forward) (carried forward) - -## 2026.06.02.1737 - -- Build produced from commit fa65c18bc171. - -## Unreleased - -## 2026.06.02.1907 - -- Build produced from commit fa65c18bc171. - -## Unreleased (carried forward) - -## 2026.06.02.1902 - -- Build produced from commit fa65c18bc171. - -## Unreleased - -## 2026.06.02.1907 - -- Build produced from commit fa65c18bc171. - -## Unreleased (carried forward) (carried forward) (carried forward) - -## 2026.06.02.1724 - -- Build produced from commit 5801b4774af5. - -## Unreleased - -## 2026.06.02.1907 - -- Build produced from commit fa65c18bc171. - -## Unreleased (carried forward) - -## 2026.06.02.1902 - -- Build produced from commit fa65c18bc171. - -## Unreleased - -## 2026.06.02.1907 - -- Build produced from commit fa65c18bc171. - -## Unreleased (carried forward) (carried forward) - -## 2026.06.02.1737 - -- Build produced from commit fa65c18bc171. - -## Unreleased - -## 2026.06.02.1907 - -- Build produced from commit fa65c18bc171. - -## Unreleased (carried forward) - -## 2026.06.02.1902 - -- Build produced from commit fa65c18bc171. - -## Unreleased - -## 2026.06.02.1907 - -- Build produced from commit fa65c18bc171. - -## Unreleased (carried forward) (carried forward) (carried forward) (carried forward) (carried forward) (carried forward) (carried forward) - ### Added - Initial repository skeleton, C# `netstandard2.0` project, and PowerShell module layout. @@ -1435,3 +251,342 @@ _Build produced from commit 62131e750109._ - Cmdlets: `Connect-Infisical`, `Disconnect-Infisical`, `Get-InfisicalSecrets`, `Get-InfisicalSecret`, `ConvertTo-InfisicalSecretDictionary`, `Export-InfisicalSecrets`. - Build script (`build.ps1`) generating manifest, copying binaries, creating release folders, and supporting unit/integration tests. - xUnit test project with unit tests and opt-in integration tests. + +_Build produced from commit b27fe6f002f4._ + +## 2026.08.01.0242 + +_Build produced from commit b27fe6f002f4._ + +## 2026.08.01.0140 + +_Build produced from commit 74d22a941c33._ + +## 2026.08.01.0123 + +_Build produced from commit f2a1492b66de._ + +## 2026.07.31.2140 + +_Build produced from commit 62131e750109._ + +## 2026.07.31.2136 + +_Build produced from commit 62131e750109._ + +## 2026.07.31.2019 + +_Build produced from commit e7674af1617c._ + +## 2026.07.31.2006 + +_Build produced from commit 276958e3a83a._ + +## 2026.07.31.1958 + +_Build produced from commit 633f40c1fa54._ + +## 2026.07.31.1924 + +_Build produced from commit 93b0cc1924ec._ + +## 2026.07.31.0045 + +_Build produced from commit d47a5af6b3a6._ + +## 2026.07.30.2350 + +_Build produced from commit 67cf0abac2dd._ + +## 2026.07.30.2344 + +_Build produced from commit dadba2f4c890._ + +## 2026.07.30.2305 + +_Build produced from commit f65124fd9911._ + +## 2026.07.30.2259 + +_Build produced from commit f56fd15b3864._ + +## 2026.07.30.2239 + +_Build produced from commit f62b3e90b1b1._ + +## 2026.07.30.2151 + +_Build produced from commit 14c8c4f3845b._ + +## 2026.06.16.0217 + +_Build produced from commit 6318d06362ad._ + +## 2026.06.16.0215 + +_Build produced from commit 6318d06362ad._ + +## 2026.06.16.0213 + +_Build produced from commit 6318d06362ad._ + +## 2026.06.16.0207 + +_Build produced from commit 6318d06362ad._ + +## 2026.06.16.0156 + +_Build produced from commit 6318d06362ad._ + +## 2026.06.10.2018 + +_Build produced from commit daf1cdce6576._ + +## 2026.06.07.1435 + +_Build produced from commit 97193d46f2ff._ + +## 2026.06.07.1426 + +_Build produced from commit b5575222eb36._ + +## 2026.06.07.1421 + +_Build produced from commit b5575222eb36._ + +## 2026.06.07.1350 + +_Build produced from commit 1aa51b8cbf9c._ + +## 2026.06.07.0017 + +_Build produced from commit 77cb03ec9845._ + +## 2026.06.06.2229 + +_Build produced from commit 207e7429e448._ + +## 2026.06.06.2227 + +_Build produced from commit d3c7b83da717._ + +## 2026.06.06.2221 + +_Build produced from commit d3c7b83da717._ + +## 2026.06.06.2207 + +_Build produced from commit d3c7b83da717._ + +## 2026.06.06.2206 + +_Build produced from commit d3c7b83da717._ + +## 2026.06.06.2155 + +_Build produced from commit d3c7b83da717._ + +## 2026.06.06.2138 + +_Build produced from commit 318db7048017._ + +## 2026.06.05.2040 + +_Build produced from commit 1270c9099cae._ + +## 2026.06.05.0240 + +_Build produced from commit b438abf18f18._ + +## 2026.06.05.0215 + +_Build produced from commit 82f99ea7d4a4._ + +## 2026.06.05.0205 + +_Build produced from commit 86968c18cb15._ + +## 2026.06.05.0117 + +_Build produced from commit cffda99591c9._ + +## 2026.06.05.0015 + +_Build produced from commit fb27ab8a8503._ + +## 2026.06.04.2335 + +_Build produced from commit 3c39a99b9a4c._ + +## 2026.06.04.2305 + +_Build produced from commit 485ee8a7dd6a._ + +## 2026.06.04.2147 + +_Build produced from commit 183fb48c32ce._ + +## 2026.06.04.2112 + +_Build produced from commit 3754de74f6c8._ + +## 2026.06.04.1920 + +_Build produced from commit 0f8f44afdb38._ + +## 2026.06.04.1917 + +_Build produced from commit a34db831d8bf._ + +## 2026.06.04.1915 + +_Build produced from commit 2489b7adca98._ + +## 2026.06.04.1911 + +_Build produced from commit 51bf819c37e5._ + +## 2026.06.04.1906 + +_Build produced from commit 51bf819c37e5._ + +## 2026.06.04.1825 + +_Build produced from commit 19615363e356._ + +## 2026.06.04.1820 + +_Build produced from commit 19615363e356._ + +## 2026.06.04.1810 + +_Build produced from commit 19615363e356._ + +## 2026.06.04.1808 + +_Build produced from commit 19615363e356._ + +## 2026.06.04.1658 + +_Build produced from commit 19615363e356._ + +## 2026.06.04.1652 + +_Build produced from commit 19615363e356._ + +## 2026.06.04.1651 + +_Build produced from commit 19615363e356._ + +## 2026.06.04.1634 + +_Build produced from commit 19615363e356._ + +## 2026.06.04.1631 + +_Build produced from commit 19615363e356._ + +## 2026.06.04.1622 + +_Build produced from commit 19615363e356._ + +## 2026.06.04.1554 + +_Build produced from commit 19615363e356._ + +## 2026.06.04.1512 + +_Build produced from commit 19615363e356._ + +## 2026.06.04.1508 + +_Build produced from commit 19615363e356._ + +## 2026.06.04.0123 + +_Build produced from commit 2cbd5c2008f5._ + +## 2026.06.04.0114 + +_Build produced from commit 2cbd5c2008f5._ + +## 2026.06.04.0020 + +_Build produced from commit 211fbcf34dbb._ + +## 2026.06.04.0005 + +_Build produced from commit e0a6ef02df3e._ + +## 2026.06.03.2207 + +_Build produced from commit 09c3d5c68bbc._ + +## 2026.06.03.2206 + +_Build produced from commit 09c3d5c68bbc._ + +## 2026.06.03.2136 + +_Build produced from commit d9822aab7a4a._ + +## 2026.06.03.0131 + +_Build produced from commit 7be0b7b42008._ + +## 2026.06.03.0113 + +_Build produced from commit 09c577ebd0fd._ + +## 2026.06.03.0057 + +_Build produced from commit 7e5209190ac2._ + +## 2026.06.03.0056 + +_Build produced from commit 7e5209190ac2._ + +## 2026.06.03.0055 + +_Build produced from commit 7e5209190ac2._ + +## 2026.06.03.0047 + +_Build produced from commit 7e5209190ac2._ + +## 2026.06.03.0046 + +_Build produced from commit 7e5209190ac2._ + +## 2026.06.03.0032 + +_Build produced from commit c86676010532._ + +## 2026.06.02.1907 + +_Build produced from commit fa65c18bc171._ + +## 2026.06.02.1902 + +_Build produced from commit fa65c18bc171._ + +## 2026.06.02.1737 + +_Build produced from commit fa65c18bc171._ + +## 2026.06.02.1724 + +_Build produced from commit 5801b4774af5._ + +## 2026.06.02.1648 + +_Build produced from commit 430e3a00c921._ + +## 2026.06.02.1638 + +_Build produced from commit 3c47d6ff30ec._ + +## 2026.06.02.1611 + +_Build produced from commit 3c47d6ff30ec._ + diff --git a/Module/PSInfisicalAPI/PSInfisicalAPI.psd1 b/Module/PSInfisicalAPI/PSInfisicalAPI.psd1 index 81840fb..755c053 100644 --- a/Module/PSInfisicalAPI/PSInfisicalAPI.psd1 +++ b/Module/PSInfisicalAPI/PSInfisicalAPI.psd1 @@ -1,6 +1,6 @@ @{ RootModule = 'PSInfisicalAPI.psm1' - ModuleVersion = '2026.08.01.0140' + ModuleVersion = '2026.08.01.0245' GUID = 'b8a2f3d4-7c51-4d2f-9e6a-1f0c8b3d4e51' Author = 'Grace Solutions' CompanyName = 'Grace Solutions' @@ -89,7 +89,7 @@ LicenseUri = 'https://www.gnu.org/licenses/agpl-3.0.html' ProjectUri = 'https://prod.git.gracesolution.info/gsadmin/PSInfisicalAPI' ReleaseNotes = 'See CHANGELOG.md in the project repository for release history.' - CommitHash = '74d22a941c33' + CommitHash = 'b27fe6f002f4' } } } \ No newline at end of file diff --git a/Module/PSInfisicalAPI/bin/PSInfisicalAPI.dll b/Module/PSInfisicalAPI/bin/PSInfisicalAPI.dll index 6f2e6dc..0dc79cb 100644 Binary files a/Module/PSInfisicalAPI/bin/PSInfisicalAPI.dll and b/Module/PSInfisicalAPI/bin/PSInfisicalAPI.dll differ