@executioncontrolprotocol/secrets 0.10.0
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/README.md +25 -0
- package/dist/constants.d.ts +21 -0
- package/dist/constants.d.ts.map +1 -0
- package/dist/constants.js +21 -0
- package/dist/constants.js.map +1 -0
- package/dist/index.d.ts +23 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +56 -0
- package/dist/index.js.map +1 -0
- package/dist/memory-store.d.ts +8 -0
- package/dist/memory-store.d.ts.map +1 -0
- package/dist/memory-store.js +28 -0
- package/dist/memory-store.js.map +1 -0
- package/dist/os-keychain-account-key.d.ts +16 -0
- package/dist/os-keychain-account-key.d.ts.map +1 -0
- package/dist/os-keychain-account-key.js +32 -0
- package/dist/os-keychain-account-key.js.map +1 -0
- package/dist/os-keychain-store.d.ts +16 -0
- package/dist/os-keychain-store.d.ts.map +1 -0
- package/dist/os-keychain-store.js +90 -0
- package/dist/os-keychain-store.js.map +1 -0
- package/dist/redaction.d.ts +6 -0
- package/dist/redaction.d.ts.map +1 -0
- package/dist/redaction.js +10 -0
- package/dist/redaction.js.map +1 -0
- package/dist/ref.d.ts +11 -0
- package/dist/ref.d.ts.map +1 -0
- package/dist/ref.js +16 -0
- package/dist/ref.js.map +1 -0
- package/dist/store.d.ts +14 -0
- package/dist/store.d.ts.map +1 -0
- package/dist/store.js +2 -0
- package/dist/store.js.map +1 -0
- package/package.json +36 -0
package/README.md
ADDED
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
# @executioncontrolprotocol/secrets
|
|
2
|
+
|
|
3
|
+
OS secrets extension for ECP. Resolves `secrets("key")` / `{ "$secret": "key" }` environment bindings via the OS keychain (Windows Credential Manager, macOS Keychain, Linux where supported).
|
|
4
|
+
|
|
5
|
+
## Usage
|
|
6
|
+
|
|
7
|
+
```ts
|
|
8
|
+
import "@executioncontrolprotocol/secrets"
|
|
9
|
+
import { environment, extension, secrets } from "@executioncontrolprotocol/node"
|
|
10
|
+
|
|
11
|
+
const env = (await environment("demo")).withExtensions([
|
|
12
|
+
extension("@executioncontrolprotocol/secrets").with({}),
|
|
13
|
+
extension("@executioncontrolprotocol/openai").with({
|
|
14
|
+
apiKey: secrets("openai/api-key"),
|
|
15
|
+
}),
|
|
16
|
+
])
|
|
17
|
+
```
|
|
18
|
+
|
|
19
|
+
## CLI
|
|
20
|
+
|
|
21
|
+
Use `ecp config secrets add KEY` (interactive paste) or `ecp config secrets add KEY --value …` for non-interactive input. `get KEY`, `list`, and `remove KEY` manage stored keys.
|
|
22
|
+
|
|
23
|
+
## Tests
|
|
24
|
+
|
|
25
|
+
Unit tests use `setSecretsStore(memorySecretsStore)` to avoid touching the real keychain.
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* URI scheme prefix for OS keyring targets and default ref ids.
|
|
3
|
+
* @category Secrets
|
|
4
|
+
*/
|
|
5
|
+
export declare const ECP_SECRET_REF_PROTOCOL_PREFIX = "ecp://";
|
|
6
|
+
/**
|
|
7
|
+
* Windows `CredEnumerateW` filter for `ecp://` targets.
|
|
8
|
+
* @category Secrets
|
|
9
|
+
*/
|
|
10
|
+
export declare const ECP_SECRET_REF_WIN32_ENUM_FILTER = "ecp://*";
|
|
11
|
+
/**
|
|
12
|
+
* Service name for OS credential stores.
|
|
13
|
+
* @category Secrets
|
|
14
|
+
*/
|
|
15
|
+
export declare const ECP_KEYRING_SERVICE = "ecp";
|
|
16
|
+
/**
|
|
17
|
+
* Legacy dotted prefix for display helpers only.
|
|
18
|
+
* @category Secrets
|
|
19
|
+
*/
|
|
20
|
+
export declare const ECP_KEYRING_ACCOUNT_PREFIX = "ecp.";
|
|
21
|
+
//# sourceMappingURL=constants.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../src/constants.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,eAAO,MAAM,8BAA8B,WAAW,CAAA;AAEtD;;;GAGG;AACH,eAAO,MAAM,gCAAgC,YAAuC,CAAA;AAEpF;;;GAGG;AACH,eAAO,MAAM,mBAAmB,QAAQ,CAAA;AAExC;;;GAGG;AACH,eAAO,MAAM,0BAA0B,SAAS,CAAA"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* URI scheme prefix for OS keyring targets and default ref ids.
|
|
3
|
+
* @category Secrets
|
|
4
|
+
*/
|
|
5
|
+
export const ECP_SECRET_REF_PROTOCOL_PREFIX = "ecp://";
|
|
6
|
+
/**
|
|
7
|
+
* Windows `CredEnumerateW` filter for `ecp://` targets.
|
|
8
|
+
* @category Secrets
|
|
9
|
+
*/
|
|
10
|
+
export const ECP_SECRET_REF_WIN32_ENUM_FILTER = `${ECP_SECRET_REF_PROTOCOL_PREFIX}*`;
|
|
11
|
+
/**
|
|
12
|
+
* Service name for OS credential stores.
|
|
13
|
+
* @category Secrets
|
|
14
|
+
*/
|
|
15
|
+
export const ECP_KEYRING_SERVICE = "ecp";
|
|
16
|
+
/**
|
|
17
|
+
* Legacy dotted prefix for display helpers only.
|
|
18
|
+
* @category Secrets
|
|
19
|
+
*/
|
|
20
|
+
export const ECP_KEYRING_ACCOUNT_PREFIX = "ecp.";
|
|
21
|
+
//# sourceMappingURL=constants.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"constants.js","sourceRoot":"","sources":["../src/constants.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,MAAM,CAAC,MAAM,8BAA8B,GAAG,QAAQ,CAAA;AAEtD;;;GAGG;AACH,MAAM,CAAC,MAAM,gCAAgC,GAAG,GAAG,8BAA8B,GAAG,CAAA;AAEpF;;;GAGG;AACH,MAAM,CAAC,MAAM,mBAAmB,GAAG,KAAK,CAAA;AAExC;;;GAGG;AACH,MAAM,CAAC,MAAM,0BAA0B,GAAG,MAAM,CAAA"}
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import { memorySecretsStore, setMemorySecret, clearMemorySecrets } from "./memory-store.js";
|
|
2
|
+
import type { SecretsStore } from "./store.js";
|
|
3
|
+
/** Replace the active secrets store (e.g. in-memory for tests). @category Secrets */
|
|
4
|
+
export declare function setSecretsStore(store: SecretsStore): void;
|
|
5
|
+
/** Alias for {@link setSecretsStore}. @category Secrets */
|
|
6
|
+
export declare function setSecretsProvider(store: SecretsStore): void;
|
|
7
|
+
/** Restore the default OS keychain store. @category Secrets */
|
|
8
|
+
export declare function resetSecretsStore(): void;
|
|
9
|
+
/** OS secrets extension. @category Secrets */
|
|
10
|
+
export declare const secretsExtension: import("@executioncontrolprotocol/core").ExtensionDefinition;
|
|
11
|
+
/** Register `@executioncontrolprotocol/secrets`. @category Secrets */
|
|
12
|
+
export declare function registerSecretsExtension(registry?: import("@executioncontrolprotocol/core").Registry): Promise<void>;
|
|
13
|
+
export { memorySecretsStore, setMemorySecret, clearMemorySecrets };
|
|
14
|
+
export { createOsSecretsStore, secretRefId, OsKeychainSecretsStore } from "./os-keychain-store.js";
|
|
15
|
+
export { redactSecret } from "./redaction.js";
|
|
16
|
+
export { canonicalSecretKey, secretRefIdFromLogicalKey } from "./ref.js";
|
|
17
|
+
export { normalizeOsKeychainAccountKey, osKeychainCredentialTarget, canonicalSecretKeyForOsStorage, } from "./os-keychain-account-key.js";
|
|
18
|
+
export { ECP_SECRET_REF_PROTOCOL_PREFIX, ECP_KEYRING_SERVICE } from "./constants.js";
|
|
19
|
+
export type { SecretsStore } from "./store.js";
|
|
20
|
+
/** @category Secrets */
|
|
21
|
+
export declare const memorySecretsProvider: SecretsStore;
|
|
22
|
+
export default secretsExtension;
|
|
23
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAWA,OAAO,EAAE,kBAAkB,EAAE,eAAe,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAA;AAC3F,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,YAAY,CAAA;AAM9C,qFAAqF;AACrF,wBAAgB,eAAe,CAAC,KAAK,EAAE,YAAY,GAAG,IAAI,CAEzD;AAED,2DAA2D;AAC3D,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,YAAY,GAAG,IAAI,CAE5D;AAED,+DAA+D;AAC/D,wBAAgB,iBAAiB,IAAI,IAAI,CAExC;AAeD,8CAA8C;AAC9C,eAAO,MAAM,gBAAgB,8DAOnB,CAAA;AAIV,sEAAsE;AACtE,wBAAsB,wBAAwB,CAAC,QAAQ,oDAAiB,GAAG,OAAO,CAAC,IAAI,CAAC,CAIvF;AAED,OAAO,EAAE,kBAAkB,EAAE,eAAe,EAAE,kBAAkB,EAAE,CAAA;AAClE,OAAO,EAAE,oBAAoB,EAAE,WAAW,EAAE,sBAAsB,EAAE,MAAM,wBAAwB,CAAA;AAClG,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAA;AAC7C,OAAO,EAAE,kBAAkB,EAAE,yBAAyB,EAAE,MAAM,UAAU,CAAA;AACxE,OAAO,EACL,6BAA6B,EAC7B,0BAA0B,EAC1B,8BAA8B,GAC/B,MAAM,8BAA8B,CAAA;AACrC,OAAO,EAAE,8BAA8B,EAAE,mBAAmB,EAAE,MAAM,gBAAgB,CAAA;AACpF,YAAY,EAAE,YAAY,EAAE,MAAM,YAAY,CAAA;AAE9C,wBAAwB;AACxB,eAAO,MAAM,qBAAqB,cAAqB,CAAA;AAEvD,eAAe,gBAAgB,CAAA"}
|
package/dist/index.js
ADDED
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
import { defineExtension, hook, globalRegistry, catalogExtension, SECRETS_RESOLVER_ID, } from "@executioncontrolprotocol/core";
|
|
2
|
+
import { z } from "zod";
|
|
3
|
+
import { createOsSecretsStore } from "./os-keychain-store.js";
|
|
4
|
+
import { memorySecretsStore, setMemorySecret, clearMemorySecrets } from "./memory-store.js";
|
|
5
|
+
const EXT_ID = "@executioncontrolprotocol/secrets";
|
|
6
|
+
let activeStore = createOsSecretsStore();
|
|
7
|
+
/** Replace the active secrets store (e.g. in-memory for tests). @category Secrets */
|
|
8
|
+
export function setSecretsStore(store) {
|
|
9
|
+
activeStore = store;
|
|
10
|
+
}
|
|
11
|
+
/** Alias for {@link setSecretsStore}. @category Secrets */
|
|
12
|
+
export function setSecretsProvider(store) {
|
|
13
|
+
setSecretsStore(store);
|
|
14
|
+
}
|
|
15
|
+
/** Restore the default OS keychain store. @category Secrets */
|
|
16
|
+
export function resetSecretsStore() {
|
|
17
|
+
activeStore = createOsSecretsStore();
|
|
18
|
+
}
|
|
19
|
+
function attachSecretsResolver(ctx) {
|
|
20
|
+
const host = ctx.environment;
|
|
21
|
+
if (!host)
|
|
22
|
+
return;
|
|
23
|
+
const resolver = {
|
|
24
|
+
id: SECRETS_RESOLVER_ID,
|
|
25
|
+
async resolve(name) {
|
|
26
|
+
return activeStore.get(name);
|
|
27
|
+
},
|
|
28
|
+
};
|
|
29
|
+
host.registerConfigResolver(resolver);
|
|
30
|
+
}
|
|
31
|
+
/** OS secrets extension. @category Secrets */
|
|
32
|
+
export const secretsExtension = defineExtension("@executioncontrolprotocol", "secrets")
|
|
33
|
+
.withSupportedRuntimes(["@executioncontrolprotocol/node"])
|
|
34
|
+
.withConfig(z.object({}))
|
|
35
|
+
.withHooks([
|
|
36
|
+
hook("environment:configuring", attachSecretsResolver),
|
|
37
|
+
hook("environment:terminate", () => undefined),
|
|
38
|
+
])
|
|
39
|
+
.build();
|
|
40
|
+
catalogExtension(secretsExtension);
|
|
41
|
+
/** Register `@executioncontrolprotocol/secrets`. @category Secrets */
|
|
42
|
+
export async function registerSecretsExtension(registry = globalRegistry) {
|
|
43
|
+
if (!registry.getExtension(EXT_ID)) {
|
|
44
|
+
await registry.registerExtension(secretsExtension);
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
export { memorySecretsStore, setMemorySecret, clearMemorySecrets };
|
|
48
|
+
export { createOsSecretsStore, secretRefId, OsKeychainSecretsStore } from "./os-keychain-store.js";
|
|
49
|
+
export { redactSecret } from "./redaction.js";
|
|
50
|
+
export { canonicalSecretKey, secretRefIdFromLogicalKey } from "./ref.js";
|
|
51
|
+
export { normalizeOsKeychainAccountKey, osKeychainCredentialTarget, canonicalSecretKeyForOsStorage, } from "./os-keychain-account-key.js";
|
|
52
|
+
export { ECP_SECRET_REF_PROTOCOL_PREFIX, ECP_KEYRING_SERVICE } from "./constants.js";
|
|
53
|
+
/** @category Secrets */
|
|
54
|
+
export const memorySecretsProvider = memorySecretsStore;
|
|
55
|
+
export default secretsExtension;
|
|
56
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,eAAe,EACf,IAAI,EACJ,cAAc,EACd,gBAAgB,EAChB,mBAAmB,GAGpB,MAAM,gCAAgC,CAAA;AACvC,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AACvB,OAAO,EAAE,oBAAoB,EAAE,MAAM,wBAAwB,CAAA;AAC7D,OAAO,EAAE,kBAAkB,EAAE,eAAe,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAA;AAG3F,MAAM,MAAM,GAAG,mCAAmC,CAAA;AAElD,IAAI,WAAW,GAAiB,oBAAoB,EAAE,CAAA;AAEtD,qFAAqF;AACrF,MAAM,UAAU,eAAe,CAAC,KAAmB;IACjD,WAAW,GAAG,KAAK,CAAA;AACrB,CAAC;AAED,2DAA2D;AAC3D,MAAM,UAAU,kBAAkB,CAAC,KAAmB;IACpD,eAAe,CAAC,KAAK,CAAC,CAAA;AACxB,CAAC;AAED,+DAA+D;AAC/D,MAAM,UAAU,iBAAiB;IAC/B,WAAW,GAAG,oBAAoB,EAAE,CAAA;AACtC,CAAC;AAED,SAAS,qBAAqB,CAAC,GAAqB;IAClD,MAAM,IAAI,GAAG,GAAG,CAAC,WAAW,CAAA;IAC5B,IAAI,CAAC,IAAI;QAAE,OAAM;IAEjB,MAAM,QAAQ,GAA8B;QAC1C,EAAE,EAAE,mBAAmB;QACvB,KAAK,CAAC,OAAO,CAAC,IAAY;YACxB,OAAO,WAAW,CAAC,GAAG,CAAC,IAAI,CAAC,CAAA;QAC9B,CAAC;KACF,CAAA;IACD,IAAI,CAAC,sBAAsB,CAAC,QAAQ,CAAC,CAAA;AACvC,CAAC;AAED,8CAA8C;AAC9C,MAAM,CAAC,MAAM,gBAAgB,GAAG,eAAe,CAAC,2BAA2B,EAAE,SAAS,CAAC;KACpF,qBAAqB,CAAC,CAAC,gCAAgC,CAAC,CAAC;KACzD,UAAU,CAAC,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;KACxB,SAAS,CAAC;IACT,IAAI,CAAC,yBAAyB,EAAE,qBAAqB,CAAC;IACtD,IAAI,CAAC,uBAAuB,EAAE,GAAG,EAAE,CAAC,SAAS,CAAC;CAC/C,CAAC;KACD,KAAK,EAAE,CAAA;AAEV,gBAAgB,CAAC,gBAAgB,CAAC,CAAA;AAElC,sEAAsE;AACtE,MAAM,CAAC,KAAK,UAAU,wBAAwB,CAAC,QAAQ,GAAG,cAAc;IACtE,IAAI,CAAC,QAAQ,CAAC,YAAY,CAAC,MAAM,CAAC,EAAE,CAAC;QACnC,MAAM,QAAQ,CAAC,iBAAiB,CAAC,gBAAgB,CAAC,CAAA;IACpD,CAAC;AACH,CAAC;AAED,OAAO,EAAE,kBAAkB,EAAE,eAAe,EAAE,kBAAkB,EAAE,CAAA;AAClE,OAAO,EAAE,oBAAoB,EAAE,WAAW,EAAE,sBAAsB,EAAE,MAAM,wBAAwB,CAAA;AAClG,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAA;AAC7C,OAAO,EAAE,kBAAkB,EAAE,yBAAyB,EAAE,MAAM,UAAU,CAAA;AACxE,OAAO,EACL,6BAA6B,EAC7B,0BAA0B,EAC1B,8BAA8B,GAC/B,MAAM,8BAA8B,CAAA;AACrC,OAAO,EAAE,8BAA8B,EAAE,mBAAmB,EAAE,MAAM,gBAAgB,CAAA;AAGpF,wBAAwB;AACxB,MAAM,CAAC,MAAM,qBAAqB,GAAG,kBAAkB,CAAA;AAEvD,eAAe,gBAAgB,CAAA"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import type { SecretsStore } from "./store.js";
|
|
2
|
+
/** In-memory secrets store for tests. @category Secrets */
|
|
3
|
+
export declare const memorySecretsStore: SecretsStore;
|
|
4
|
+
/** Set a value in the in-memory store (tests). @category Secrets */
|
|
5
|
+
export declare function setMemorySecret(key: string, value: string): void;
|
|
6
|
+
/** Clear the in-memory store (tests). @category Secrets */
|
|
7
|
+
export declare function clearMemorySecrets(): void;
|
|
8
|
+
//# sourceMappingURL=memory-store.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"memory-store.d.ts","sourceRoot":"","sources":["../src/memory-store.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,YAAY,CAAA;AAI9C,2DAA2D;AAC3D,eAAO,MAAM,kBAAkB,EAAE,YAgBhC,CAAA;AAED,oEAAoE;AACpE,wBAAgB,eAAe,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI,CAEhE;AAED,2DAA2D;AAC3D,wBAAgB,kBAAkB,IAAI,IAAI,CAEzC"}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
const memoryStore = new Map();
|
|
2
|
+
/** In-memory secrets store for tests. @category Secrets */
|
|
3
|
+
export const memorySecretsStore = {
|
|
4
|
+
async get(key) {
|
|
5
|
+
return memoryStore.get(key);
|
|
6
|
+
},
|
|
7
|
+
async set(key, value) {
|
|
8
|
+
memoryStore.set(key, value);
|
|
9
|
+
},
|
|
10
|
+
async delete(key) {
|
|
11
|
+
memoryStore.delete(key);
|
|
12
|
+
},
|
|
13
|
+
async list() {
|
|
14
|
+
return [...memoryStore.keys()];
|
|
15
|
+
},
|
|
16
|
+
async isAvailable() {
|
|
17
|
+
return true;
|
|
18
|
+
},
|
|
19
|
+
};
|
|
20
|
+
/** Set a value in the in-memory store (tests). @category Secrets */
|
|
21
|
+
export function setMemorySecret(key, value) {
|
|
22
|
+
memoryStore.set(key, value);
|
|
23
|
+
}
|
|
24
|
+
/** Clear the in-memory store (tests). @category Secrets */
|
|
25
|
+
export function clearMemorySecrets() {
|
|
26
|
+
memoryStore.clear();
|
|
27
|
+
}
|
|
28
|
+
//# sourceMappingURL=memory-store.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"memory-store.js","sourceRoot":"","sources":["../src/memory-store.ts"],"names":[],"mappings":"AAEA,MAAM,WAAW,GAAG,IAAI,GAAG,EAAkB,CAAA;AAE7C,2DAA2D;AAC3D,MAAM,CAAC,MAAM,kBAAkB,GAAiB;IAC9C,KAAK,CAAC,GAAG,CAAC,GAAG;QACX,OAAO,WAAW,CAAC,GAAG,CAAC,GAAG,CAAC,CAAA;IAC7B,CAAC;IACD,KAAK,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK;QAClB,WAAW,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,CAAC,CAAA;IAC7B,CAAC;IACD,KAAK,CAAC,MAAM,CAAC,GAAG;QACd,WAAW,CAAC,MAAM,CAAC,GAAG,CAAC,CAAA;IACzB,CAAC;IACD,KAAK,CAAC,IAAI;QACR,OAAO,CAAC,GAAG,WAAW,CAAC,IAAI,EAAE,CAAC,CAAA;IAChC,CAAC;IACD,KAAK,CAAC,WAAW;QACf,OAAO,IAAI,CAAA;IACb,CAAC;CACF,CAAA;AAED,oEAAoE;AACpE,MAAM,UAAU,eAAe,CAAC,GAAW,EAAE,KAAa;IACxD,WAAW,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,CAAC,CAAA;AAC7B,CAAC;AAED,2DAA2D;AAC3D,MAAM,UAAU,kBAAkB;IAChC,WAAW,CAAC,KAAK,EAAE,CAAA;AACrB,CAAC"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Canonical logical key for OS storage.
|
|
3
|
+
* @category Secrets
|
|
4
|
+
*/
|
|
5
|
+
export declare function canonicalSecretKeyForOsStorage(key: string): string;
|
|
6
|
+
/**
|
|
7
|
+
* OS keyring target for `Entry.withTarget`.
|
|
8
|
+
* @category Secrets
|
|
9
|
+
*/
|
|
10
|
+
export declare function osKeychainCredentialTarget(logicalKey: string): string;
|
|
11
|
+
/**
|
|
12
|
+
* Map a key to a dotted `ecp.*` name (legacy display helpers only).
|
|
13
|
+
* @category Secrets
|
|
14
|
+
*/
|
|
15
|
+
export declare function normalizeOsKeychainAccountKey(key: string): string;
|
|
16
|
+
//# sourceMappingURL=os-keychain-account-key.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"os-keychain-account-key.d.ts","sourceRoot":"","sources":["../src/os-keychain-account-key.ts"],"names":[],"mappings":"AAGA;;;GAGG;AACH,wBAAgB,8BAA8B,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAElE;AAED;;;GAGG;AACH,wBAAgB,0BAA0B,CAAC,UAAU,EAAE,MAAM,GAAG,MAAM,CAErE;AAED;;;GAGG;AACH,wBAAgB,6BAA6B,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAUjE"}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
import { ECP_KEYRING_ACCOUNT_PREFIX } from "./constants.js";
|
|
2
|
+
import { canonicalSecretKey, secretRefIdFromLogicalKey } from "./ref.js";
|
|
3
|
+
/**
|
|
4
|
+
* Canonical logical key for OS storage.
|
|
5
|
+
* @category Secrets
|
|
6
|
+
*/
|
|
7
|
+
export function canonicalSecretKeyForOsStorage(key) {
|
|
8
|
+
return canonicalSecretKey(key);
|
|
9
|
+
}
|
|
10
|
+
/**
|
|
11
|
+
* OS keyring target for `Entry.withTarget`.
|
|
12
|
+
* @category Secrets
|
|
13
|
+
*/
|
|
14
|
+
export function osKeychainCredentialTarget(logicalKey) {
|
|
15
|
+
return secretRefIdFromLogicalKey(logicalKey);
|
|
16
|
+
}
|
|
17
|
+
/**
|
|
18
|
+
* Map a key to a dotted `ecp.*` name (legacy display helpers only).
|
|
19
|
+
* @category Secrets
|
|
20
|
+
*/
|
|
21
|
+
export function normalizeOsKeychainAccountKey(key) {
|
|
22
|
+
let k = key.trim().replace(/\\/g, "/");
|
|
23
|
+
if (k.startsWith("ecp/")) {
|
|
24
|
+
k = k.slice(4);
|
|
25
|
+
}
|
|
26
|
+
k = k.replace(/\//g, ".");
|
|
27
|
+
if (!k.startsWith(ECP_KEYRING_ACCOUNT_PREFIX)) {
|
|
28
|
+
k = `${ECP_KEYRING_ACCOUNT_PREFIX}${k}`;
|
|
29
|
+
}
|
|
30
|
+
return k;
|
|
31
|
+
}
|
|
32
|
+
//# sourceMappingURL=os-keychain-account-key.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"os-keychain-account-key.js","sourceRoot":"","sources":["../src/os-keychain-account-key.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,0BAA0B,EAAE,MAAM,gBAAgB,CAAA;AAC3D,OAAO,EAAE,kBAAkB,EAAE,yBAAyB,EAAE,MAAM,UAAU,CAAA;AAExE;;;GAGG;AACH,MAAM,UAAU,8BAA8B,CAAC,GAAW;IACxD,OAAO,kBAAkB,CAAC,GAAG,CAAC,CAAA;AAChC,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,0BAA0B,CAAC,UAAkB;IAC3D,OAAO,yBAAyB,CAAC,UAAU,CAAC,CAAA;AAC9C,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,6BAA6B,CAAC,GAAW;IACvD,IAAI,CAAC,GAAG,GAAG,CAAC,IAAI,EAAE,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,CAAA;IACtC,IAAI,CAAC,CAAC,UAAU,CAAC,MAAM,CAAC,EAAE,CAAC;QACzB,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAA;IAChB,CAAC;IACD,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,CAAA;IACzB,IAAI,CAAC,CAAC,CAAC,UAAU,CAAC,0BAA0B,CAAC,EAAE,CAAC;QAC9C,CAAC,GAAG,GAAG,0BAA0B,GAAG,CAAC,EAAE,CAAA;IACzC,CAAC;IACD,OAAO,CAAC,CAAA;AACV,CAAC"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import type { SecretsStore } from "./store.js";
|
|
2
|
+
/** OS keychain / credential manager store. @category Secrets */
|
|
3
|
+
export declare class OsKeychainSecretsStore implements SecretsStore {
|
|
4
|
+
isAvailable(): Promise<boolean>;
|
|
5
|
+
private entryForLogicalKey;
|
|
6
|
+
private listAccountToKey;
|
|
7
|
+
set(key: string, value: string): Promise<void>;
|
|
8
|
+
get(key: string): Promise<string | undefined>;
|
|
9
|
+
delete(key: string): Promise<void>;
|
|
10
|
+
list(): Promise<string[]>;
|
|
11
|
+
}
|
|
12
|
+
/** Shared OS keychain store for CLI and default runtime resolution. @category Secrets */
|
|
13
|
+
export declare function createOsSecretsStore(): OsKeychainSecretsStore;
|
|
14
|
+
/** Ref id for a logical key (CLI display). @category Secrets */
|
|
15
|
+
export declare function secretRefId(key: string): string;
|
|
16
|
+
//# sourceMappingURL=os-keychain-store.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"os-keychain-store.d.ts","sourceRoot":"","sources":["../src/os-keychain-store.ts"],"names":[],"mappings":"AAUA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,YAAY,CAAA;AAE9C,gEAAgE;AAChE,qBAAa,sBAAuB,YAAW,YAAY;IACnD,WAAW,IAAI,OAAO,CAAC,OAAO,CAAC;IAerC,OAAO,CAAC,kBAAkB;IAS1B,OAAO,CAAC,gBAAgB;IAYlB,GAAG,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAM9C,GAAG,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC;IAY7C,MAAM,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAUlC,IAAI,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;CAYhC;AAID,yFAAyF;AACzF,wBAAgB,oBAAoB,IAAI,sBAAsB,CAG7D;AAED,gEAAgE;AAChE,wBAAgB,WAAW,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAE/C"}
|
|
@@ -0,0 +1,90 @@
|
|
|
1
|
+
import { ECP_KEYRING_SERVICE, ECP_SECRET_REF_PROTOCOL_PREFIX, ECP_SECRET_REF_WIN32_ENUM_FILTER, } from "./constants.js";
|
|
2
|
+
import { canonicalSecretKeyForOsStorage, osKeychainCredentialTarget, } from "./os-keychain-account-key.js";
|
|
3
|
+
import { canonicalSecretKey, secretRefIdFromLogicalKey } from "./ref.js";
|
|
4
|
+
/** OS keychain / credential manager store. @category Secrets */
|
|
5
|
+
export class OsKeychainSecretsStore {
|
|
6
|
+
async isAvailable() {
|
|
7
|
+
try {
|
|
8
|
+
const { Entry } = await import("@napi-rs/keyring");
|
|
9
|
+
const entry = new Entry(ECP_KEYRING_SERVICE, "__ecp_availability_probe__");
|
|
10
|
+
try {
|
|
11
|
+
entry.getPassword();
|
|
12
|
+
}
|
|
13
|
+
catch {
|
|
14
|
+
// NoEntry is expected
|
|
15
|
+
}
|
|
16
|
+
return true;
|
|
17
|
+
}
|
|
18
|
+
catch {
|
|
19
|
+
return false;
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
entryForLogicalKey(logicalKey, Entry) {
|
|
23
|
+
const user = canonicalSecretKeyForOsStorage(logicalKey);
|
|
24
|
+
const target = osKeychainCredentialTarget(logicalKey);
|
|
25
|
+
return Entry.withTarget(target, ECP_KEYRING_SERVICE, user);
|
|
26
|
+
}
|
|
27
|
+
listAccountToKey(account) {
|
|
28
|
+
if (account.startsWith(ECP_SECRET_REF_PROTOCOL_PREFIX)) {
|
|
29
|
+
const rest = account.slice(ECP_SECRET_REF_PROTOCOL_PREFIX.length);
|
|
30
|
+
const legacy = "os.secrets/";
|
|
31
|
+
if (rest.startsWith(legacy)) {
|
|
32
|
+
return canonicalSecretKey(rest.slice(legacy.length));
|
|
33
|
+
}
|
|
34
|
+
return canonicalSecretKey(rest);
|
|
35
|
+
}
|
|
36
|
+
return canonicalSecretKeyForOsStorage(account);
|
|
37
|
+
}
|
|
38
|
+
async set(key, value) {
|
|
39
|
+
const { Entry } = await import("@napi-rs/keyring");
|
|
40
|
+
const entry = this.entryForLogicalKey(key, Entry);
|
|
41
|
+
entry.setPassword(value);
|
|
42
|
+
}
|
|
43
|
+
async get(key) {
|
|
44
|
+
try {
|
|
45
|
+
const { Entry } = await import("@napi-rs/keyring");
|
|
46
|
+
const entry = this.entryForLogicalKey(key, Entry);
|
|
47
|
+
const password = entry.getPassword();
|
|
48
|
+
if (password == null || password === "")
|
|
49
|
+
return undefined;
|
|
50
|
+
return password;
|
|
51
|
+
}
|
|
52
|
+
catch {
|
|
53
|
+
return undefined;
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
async delete(key) {
|
|
57
|
+
const { Entry } = await import("@napi-rs/keyring");
|
|
58
|
+
const entry = this.entryForLogicalKey(key, Entry);
|
|
59
|
+
try {
|
|
60
|
+
entry.deletePassword();
|
|
61
|
+
}
|
|
62
|
+
catch {
|
|
63
|
+
// ignore missing
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
async list() {
|
|
67
|
+
try {
|
|
68
|
+
const { findCredentials } = await import("@napi-rs/keyring");
|
|
69
|
+
const creds = process.platform === "win32"
|
|
70
|
+
? findCredentials(ECP_KEYRING_SERVICE, ECP_SECRET_REF_WIN32_ENUM_FILTER)
|
|
71
|
+
: findCredentials(ECP_KEYRING_SERVICE);
|
|
72
|
+
return creds.map((c) => this.listAccountToKey(c.account));
|
|
73
|
+
}
|
|
74
|
+
catch {
|
|
75
|
+
return [];
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
let osStore;
|
|
80
|
+
/** Shared OS keychain store for CLI and default runtime resolution. @category Secrets */
|
|
81
|
+
export function createOsSecretsStore() {
|
|
82
|
+
if (!osStore)
|
|
83
|
+
osStore = new OsKeychainSecretsStore();
|
|
84
|
+
return osStore;
|
|
85
|
+
}
|
|
86
|
+
/** Ref id for a logical key (CLI display). @category Secrets */
|
|
87
|
+
export function secretRefId(key) {
|
|
88
|
+
return secretRefIdFromLogicalKey(key);
|
|
89
|
+
}
|
|
90
|
+
//# sourceMappingURL=os-keychain-store.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"os-keychain-store.js","sourceRoot":"","sources":["../src/os-keychain-store.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"redaction.d.ts","sourceRoot":"","sources":["../src/redaction.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,wBAAgB,YAAY,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAGlD"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"redaction.js","sourceRoot":"","sources":["../src/redaction.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,MAAM,UAAU,YAAY,CAAC,KAAa;IACxC,IAAI,KAAK,CAAC,MAAM,IAAI,CAAC;QAAE,OAAO,MAAM,CAAA;IACpC,OAAO,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,OAAO,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAA;AACrD,CAAC"}
|
package/dist/ref.d.ts
ADDED
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Normalize a logical secret key (trim, backslashes to `/`).
|
|
3
|
+
* @category Secrets
|
|
4
|
+
*/
|
|
5
|
+
export declare function canonicalSecretKey(key: string): string;
|
|
6
|
+
/**
|
|
7
|
+
* Default secret ref id: `ecp://` plus normalized key.
|
|
8
|
+
* @category Secrets
|
|
9
|
+
*/
|
|
10
|
+
export declare function secretRefIdFromLogicalKey(key: string): string;
|
|
11
|
+
//# sourceMappingURL=ref.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ref.d.ts","sourceRoot":"","sources":["../src/ref.ts"],"names":[],"mappings":"AAEA;;;GAGG;AACH,wBAAgB,kBAAkB,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAEtD;AAED;;;GAGG;AACH,wBAAgB,yBAAyB,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAE7D"}
|
package/dist/ref.js
ADDED
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { ECP_SECRET_REF_PROTOCOL_PREFIX } from "./constants.js";
|
|
2
|
+
/**
|
|
3
|
+
* Normalize a logical secret key (trim, backslashes to `/`).
|
|
4
|
+
* @category Secrets
|
|
5
|
+
*/
|
|
6
|
+
export function canonicalSecretKey(key) {
|
|
7
|
+
return key.trim().replace(/\\/g, "/");
|
|
8
|
+
}
|
|
9
|
+
/**
|
|
10
|
+
* Default secret ref id: `ecp://` plus normalized key.
|
|
11
|
+
* @category Secrets
|
|
12
|
+
*/
|
|
13
|
+
export function secretRefIdFromLogicalKey(key) {
|
|
14
|
+
return `${ECP_SECRET_REF_PROTOCOL_PREFIX}${canonicalSecretKey(key)}`;
|
|
15
|
+
}
|
|
16
|
+
//# sourceMappingURL=ref.js.map
|
package/dist/ref.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ref.js","sourceRoot":"","sources":["../src/ref.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,8BAA8B,EAAE,MAAM,gBAAgB,CAAA;AAE/D;;;GAGG;AACH,MAAM,UAAU,kBAAkB,CAAC,GAAW;IAC5C,OAAO,GAAG,CAAC,IAAI,EAAE,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,CAAA;AACvC,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,yBAAyB,CAAC,GAAW;IACnD,OAAO,GAAG,8BAA8B,GAAG,kBAAkB,CAAC,GAAG,CAAC,EAAE,CAAA;AACtE,CAAC"}
|
package/dist/store.d.ts
ADDED
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
/** OS secrets backend for lookup and CLI CRUD. @category Secrets */
|
|
2
|
+
export interface SecretsStore {
|
|
3
|
+
/** Load a secret value or undefined when missing. */
|
|
4
|
+
get(key: string): Promise<string | undefined>;
|
|
5
|
+
/** Store or replace a secret value. */
|
|
6
|
+
set(key: string, value: string): Promise<void>;
|
|
7
|
+
/** Delete a secret when present. */
|
|
8
|
+
delete(key: string): Promise<void>;
|
|
9
|
+
/** List logical keys in the store. */
|
|
10
|
+
list(): Promise<string[]>;
|
|
11
|
+
/** Whether this backend is available on the current host. */
|
|
12
|
+
isAvailable(): Promise<boolean>;
|
|
13
|
+
}
|
|
14
|
+
//# sourceMappingURL=store.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"store.d.ts","sourceRoot":"","sources":["../src/store.ts"],"names":[],"mappings":"AAAA,oEAAoE;AACpE,MAAM,WAAW,YAAY;IAC3B,qDAAqD;IACrD,GAAG,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,CAAA;IAC7C,uCAAuC;IACvC,GAAG,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;IAC9C,oCAAoC;IACpC,MAAM,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;IAClC,sCAAsC;IACtC,IAAI,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC,CAAA;IACzB,6DAA6D;IAC7D,WAAW,IAAI,OAAO,CAAC,OAAO,CAAC,CAAA;CAChC"}
|
package/dist/store.js
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"store.js","sourceRoot":"","sources":["../src/store.ts"],"names":[],"mappings":""}
|
package/package.json
ADDED
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@executioncontrolprotocol/secrets",
|
|
3
|
+
"version": "0.10.0",
|
|
4
|
+
"description": "OS secrets extension for ECP (keychain / credential manager)",
|
|
5
|
+
"license": "Apache-2.0",
|
|
6
|
+
"type": "module",
|
|
7
|
+
"main": "./dist/index.js",
|
|
8
|
+
"types": "./dist/index.d.ts",
|
|
9
|
+
"exports": {
|
|
10
|
+
".": {
|
|
11
|
+
"types": "./dist/index.d.ts",
|
|
12
|
+
"import": "./dist/index.js"
|
|
13
|
+
}
|
|
14
|
+
},
|
|
15
|
+
"files": [
|
|
16
|
+
"dist",
|
|
17
|
+
"README.md"
|
|
18
|
+
],
|
|
19
|
+
"scripts": {
|
|
20
|
+
"build": "tsc -b"
|
|
21
|
+
},
|
|
22
|
+
"optionalDependencies": {
|
|
23
|
+
"@napi-rs/keyring": "^1.2.0"
|
|
24
|
+
},
|
|
25
|
+
"peerDependencies": {
|
|
26
|
+
"@executioncontrolprotocol/core": "^0.10.0",
|
|
27
|
+
"@executioncontrolprotocol/types": "^0.10.0",
|
|
28
|
+
"zod": "^3.24.0"
|
|
29
|
+
},
|
|
30
|
+
"devDependencies": {
|
|
31
|
+
"@executioncontrolprotocol/core": "0.10.0",
|
|
32
|
+
"@executioncontrolprotocol/types": "0.10.0",
|
|
33
|
+
"typescript": "^5.7.0",
|
|
34
|
+
"zod": "^3.24.0"
|
|
35
|
+
}
|
|
36
|
+
}
|