> For the complete documentation index, see [llms.txt](https://newdocs.keeper.io/en/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://newdocs.keeper.io/en/release-notes/enterprise/keeper-secrets-manager/2026/javascript-sdk-17.6.0.md).

# JavaScript SDK 17.6.0

Released on September 17, 2026

> **Breaking changes**
>
> **`cachingPostFunction` removed (Node):** Replaced by `createCachingFunction(storage, options?)`. If you called `cachingPostFunction` directly, switch to the new function and delete the old plaintext cache file in your working directory.

### Updates

* **KSM-1209:** Added a bounded, configurable request timeout to all network calls (queries, file upload, file download). Set `requestTimeoutMs` on `SecretManagerOptions` (default 30s); `downloadFile`, `downloadThumbnail`, and `uploadFile` each also accept an optional per-call `timeoutMs` that overrides it. On timeout, the call rejects with a `KeeperError` naming the applied value.
* **KSM-1073:** Fixed `pamSettings.connection` missing the `dbConnectionMethod` field on `pamDatabase` records.
* **KSM-1079:** Fixed `getFolders()` crashing when a folder in the response has a corrupted or missing key; undecryptable folders are now skipped instead.
* **KSM-1084:** Fixed `deleteSecret()` and `deleteFolder()` silently reporting success when the server rejected some UIDs; per-item server error messages now surface to the caller.
* **KSM-748:** Fixed `getSecrets()` silently dropping records created by Commander or the Vault UI inside shared folders.
* **KSM-1035:** Throttle retry jitter is now one-sided (0 to +25%) instead of two-sided, and a server-supplied `retry_after` is capped at 176s.
* **KSM-1128:** Bounded the server key-rotation retry in `postQuery` to 3 attempts instead of retrying forever; a server-suggested key ID is now validated before being persisted.
* **KSM-1254:** Fixed the Node platform's `hash()` ignoring its `tag` parameter.
* **KSM-1332:** Fixed browser IndexedDB storage hanging forever on a storage failure instead of rejecting.
* **KSM-1251:** Fixed throttle and key-rotation detection failing to parse a response body over 1000 bytes, which silently disabled the retry for that response.
* **KSM-1297:** Fixed `getSharedFolderUid()` hanging forever, and blocking the whole event loop or browser tab, on a cycle in server-supplied folder parent data. It now throws a descriptive error naming the folder where the cycle closes.
* **KSM-1342:** Fixed large file downloads (roughly 75MB and up) failing with a spurious timeout, caused by the new request-timeout tracking re-copying the entire response buffer on every network chunk. Chunks are now concatenated once, when the response ends.
* **KSM-1351:** Fixed `hasEncryptedData()` and `hasReadableData()` misclassifying real encrypted data as unencrypted roughly 1 in 128 times. Both now require an actual JSON parse instead of checking only the first decoded character.
* **KSM-1395:** Fixed throttle retry never firing against the live backend: the retry gate checked only for HTTP 403, but the backend has returned 429 for a throttled Secrets Manager request since 2026-06-15. The gate now accepts both.
* **KSM-1265:** **BREAKING (Node only):** Replaced `cachingPostFunction`, which stored its cache key in plaintext beside the data it protected, with `createCachingFunction(storage, options?)`. The cache is now encrypted with a key derived from the app key, authenticated against tampering, and stored at `~/.keeper/ksm-cache.dat` by default. See Breaking Changes.
* **KSM-1266:** Fixed `localConfigStorage` silently treating a corrupt, unreadable, or malformed config file as "no config yet." These cases now throw a typed `KeeperStorageError` (carrying the filesystem error code when available), and config writes are now atomic.
* **KSM-1267:** `getFolders()` now classifies why an undecryptable folder was skipped and logs a summary line naming the affected folders. A new optional `onDecryptionError` callback on `SecretManagerOptions` lets callers react to, or fail closed on, a partial result.
* **KSM-1263:** Config and cache file permissions are now re-applied on every write, not just on file creation.
* **KSM-1256, KSM-1255:** Fixed a stored `serverPublicKeyId` outside the bundled key table permanently blocking every future request; it now self-heals to the default key. Stopped re-saving `serverPublicKey`/`serverPublicKeyId` on every call when unchanged, and closed a race where concurrent requests could leave a mismatched key/id pair in storage. A custom `serverPublicKey` now always requires its `serverPublicKeyId` in the same call.

### **Resources**

* [npm package](https://www.npmjs.com/package/@keeper-security/secrets-manager-core)
* [JavaScript SDK Documentation](/en/keeperpam/secrets-manager/developer-sdk-library/javascript-sdk.md)


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## Querying This Documentation
If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter, and the optional `goal` query parameter:

```
GET https://newdocs.keeper.io/en/release-notes/enterprise/keeper-secrets-manager/2026/javascript-sdk-17.6.0.md?ask=<question>&goal=<endgoal>
```

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is optional and describes the broader end goal you are ultimately trying to accomplish on behalf of the user. GitBook uses it to tailor the answer towards what is most useful for that goal.

The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
