@griffin-app/griffin-executor 0.1.2 → 0.1.4
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/dist/index.d.ts +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -1
- package/dist/index.js.map +1 -1
- package/dist/secrets/index.d.ts +1 -1
- package/dist/secrets/index.d.ts.map +1 -1
- package/dist/secrets/index.js +1 -1
- package/dist/secrets/index.js.map +1 -1
- package/dist/secrets/providers/hub.d.ts +19 -0
- package/dist/secrets/providers/hub.d.ts.map +1 -0
- package/dist/secrets/providers/hub.js +60 -0
- package/dist/secrets/providers/hub.js.map +1 -0
- package/dist/secrets/providers/index.d.ts +1 -0
- package/dist/secrets/providers/index.d.ts.map +1 -1
- package/dist/secrets/providers/index.js +1 -0
- package/dist/secrets/providers/index.js.map +1 -1
- package/package.json +1 -3
- package/src/index.ts +1 -0
- package/src/secrets/index.ts +1 -0
- package/src/secrets/providers/hub.ts +74 -0
- package/src/secrets/providers/index.ts +1 -0
- package/tsconfig.tsbuildinfo +0 -1
package/dist/index.d.ts
CHANGED
|
@@ -5,5 +5,5 @@ export { AxiosAdapter, StubAdapter, type StubResponse, } from "./adapters/index.
|
|
|
5
5
|
export { LocalEventEmitter, DurableEventEmitter, type ExecutionEventEmitter, type DurableEventBusAdapter, } from "./events/emitter.js";
|
|
6
6
|
export type { ExecutionEvent, BaseEvent, MonitorStartEvent, MonitorEndEvent, NodeStartEvent, NodeEndEvent, HttpRequestEvent, HttpResponseEvent, HttpRetryEvent, AssertionResultEvent, WaitStartEvent, NodeStreamEvent, ErrorEvent, } from "./events/types.js";
|
|
7
7
|
export { KinesisAdapter, type KinesisAdapterOptions, InMemoryAdapter, } from "./events/adapters/index.js";
|
|
8
|
-
export { type SecretProvider, type SecretRef, type SecretRefData, type SecretResolveOptions, SecretResolutionError, isSecretRef, resolveSecretsInMonitor, collectSecretsFromMonitor, planHasSecrets, EnvSecretProvider, type EnvSecretProviderOptions, createSecretProvider, type SecretProviderConfig, type EnvProviderConfig, } from "./secrets/index.js";
|
|
8
|
+
export { type SecretProvider, type SecretRef, type SecretRefData, type SecretResolveOptions, SecretResolutionError, isSecretRef, resolveSecretsInMonitor, collectSecretsFromMonitor, planHasSecrets, EnvSecretProvider, type EnvSecretProviderOptions, HubSecretProvider, createSecretProvider, type SecretProviderConfig, type EnvProviderConfig, } from "./secrets/index.js";
|
|
9
9
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAC;AACjD,YAAY,EACV,gBAAgB,EAChB,eAAe,EACf,UAAU,EACV,iBAAiB,EACjB,WAAW,EACX,YAAY,EACZ,eAAe,EACf,eAAe,GAChB,MAAM,YAAY,CAAC;AACpB,YAAY,EACV,WAAW,EACX,WAAW,IAAI,eAAe,EAC9B,QAAQ,EACR,aAAa,EACb,IAAI,GACL,MAAM,yBAAyB,CAAC;AACjC,OAAO,EACL,YAAY,EACZ,WAAW,EACX,KAAK,YAAY,GAClB,MAAM,qBAAqB,CAAC;AAE7B,OAAO,EACL,iBAAiB,EACjB,mBAAmB,EACnB,KAAK,qBAAqB,EAC1B,KAAK,sBAAsB,GAC5B,MAAM,qBAAqB,CAAC;AAC7B,YAAY,EACV,cAAc,EACd,SAAS,EACT,iBAAiB,EACjB,eAAe,EACf,cAAc,EACd,YAAY,EACZ,gBAAgB,EAChB,iBAAiB,EACjB,cAAc,EACd,oBAAoB,EACpB,cAAc,EACd,eAAe,EACf,UAAU,GACX,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EAEL,cAAc,EACd,KAAK,qBAAqB,EAC1B,eAAe,GAChB,MAAM,4BAA4B,CAAC;AAGpC,OAAO,EAEL,KAAK,cAAc,EACnB,KAAK,SAAS,EACd,KAAK,aAAa,EAClB,KAAK,oBAAoB,EACzB,qBAAqB,EACrB,WAAW,EAEX,uBAAuB,EACvB,yBAAyB,EACzB,cAAc,EAEd,iBAAiB,EACjB,KAAK,wBAAwB,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAC;AACjD,YAAY,EACV,gBAAgB,EAChB,eAAe,EACf,UAAU,EACV,iBAAiB,EACjB,WAAW,EACX,YAAY,EACZ,eAAe,EACf,eAAe,GAChB,MAAM,YAAY,CAAC;AACpB,YAAY,EACV,WAAW,EACX,WAAW,IAAI,eAAe,EAC9B,QAAQ,EACR,aAAa,EACb,IAAI,GACL,MAAM,yBAAyB,CAAC;AACjC,OAAO,EACL,YAAY,EACZ,WAAW,EACX,KAAK,YAAY,GAClB,MAAM,qBAAqB,CAAC;AAE7B,OAAO,EACL,iBAAiB,EACjB,mBAAmB,EACnB,KAAK,qBAAqB,EAC1B,KAAK,sBAAsB,GAC5B,MAAM,qBAAqB,CAAC;AAC7B,YAAY,EACV,cAAc,EACd,SAAS,EACT,iBAAiB,EACjB,eAAe,EACf,cAAc,EACd,YAAY,EACZ,gBAAgB,EAChB,iBAAiB,EACjB,cAAc,EACd,oBAAoB,EACpB,cAAc,EACd,eAAe,EACf,UAAU,GACX,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EAEL,cAAc,EACd,KAAK,qBAAqB,EAC1B,eAAe,GAChB,MAAM,4BAA4B,CAAC;AAGpC,OAAO,EAEL,KAAK,cAAc,EACnB,KAAK,SAAS,EACd,KAAK,aAAa,EAClB,KAAK,oBAAoB,EACzB,qBAAqB,EACrB,WAAW,EAEX,uBAAuB,EACvB,yBAAyB,EACzB,cAAc,EAEd,iBAAiB,EACjB,KAAK,wBAAwB,EAC7B,iBAAiB,EAEjB,oBAAoB,EACpB,KAAK,oBAAoB,EACzB,KAAK,iBAAiB,GACvB,MAAM,oBAAoB,CAAC"}
|
package/dist/index.js
CHANGED
|
@@ -9,7 +9,7 @@ export { SecretResolutionError, isSecretRef,
|
|
|
9
9
|
// Resolution utilities
|
|
10
10
|
resolveSecretsInMonitor, collectSecretsFromMonitor, planHasSecrets,
|
|
11
11
|
// Providers
|
|
12
|
-
EnvSecretProvider,
|
|
12
|
+
EnvSecretProvider, HubSecretProvider,
|
|
13
13
|
// Factory functions
|
|
14
14
|
createSecretProvider, } from "./secrets/index.js";
|
|
15
15
|
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAC;AAkBjD,OAAO,EACL,YAAY,EACZ,WAAW,GAEZ,MAAM,qBAAqB,CAAC;AAE7B,OAAO,EACL,iBAAiB,EACjB,mBAAmB,GAGpB,MAAM,qBAAqB,CAAC;AAgB7B,OAAO;AACL,qBAAqB;AACrB,cAAc,EAEd,eAAe,GAChB,MAAM,4BAA4B,CAAC;AAEpC,wBAAwB;AACxB,OAAO,EAML,qBAAqB,EACrB,WAAW;AACX,uBAAuB;AACvB,uBAAuB,EACvB,yBAAyB,EACzB,cAAc;AACd,YAAY;AACZ,iBAAiB;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAC;AAkBjD,OAAO,EACL,YAAY,EACZ,WAAW,GAEZ,MAAM,qBAAqB,CAAC;AAE7B,OAAO,EACL,iBAAiB,EACjB,mBAAmB,GAGpB,MAAM,qBAAqB,CAAC;AAgB7B,OAAO;AACL,qBAAqB;AACrB,cAAc,EAEd,eAAe,GAChB,MAAM,4BAA4B,CAAC;AAEpC,wBAAwB;AACxB,OAAO,EAML,qBAAqB,EACrB,WAAW;AACX,uBAAuB;AACvB,uBAAuB,EACvB,yBAAyB,EACzB,cAAc;AACd,YAAY;AACZ,iBAAiB,EAEjB,iBAAiB;AACjB,oBAAoB;AACpB,oBAAoB,GAGrB,MAAM,oBAAoB,CAAC"}
|
package/dist/secrets/index.d.ts
CHANGED
|
@@ -11,6 +11,6 @@
|
|
|
11
11
|
*/
|
|
12
12
|
export { type SecretProvider, type SecretRef, type SecretRefData, type SecretResolveOptions, SecretResolutionError, isSecretRef, isStringLiteral, } from "./types.js";
|
|
13
13
|
export { resolveSecretsInMonitor, collectSecretsFromMonitor, planHasSecrets, } from "./resolver.js";
|
|
14
|
-
export { EnvSecretProvider, type EnvSecretProviderOptions, } from "./providers/index.js";
|
|
14
|
+
export { EnvSecretProvider, type EnvSecretProviderOptions, HubSecretProvider, } from "./providers/index.js";
|
|
15
15
|
export { createSecretProvider, type SecretProviderConfig, type EnvProviderConfig, } from "./factory.js";
|
|
16
16
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/secrets/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAGH,OAAO,EACL,KAAK,cAAc,EACnB,KAAK,SAAS,EACd,KAAK,aAAa,EAClB,KAAK,oBAAoB,EACzB,qBAAqB,EACrB,WAAW,EACX,eAAe,GAChB,MAAM,YAAY,CAAC;AAGpB,OAAO,EACL,uBAAuB,EACvB,yBAAyB,EACzB,cAAc,GACf,MAAM,eAAe,CAAC;AAGvB,OAAO,EACL,iBAAiB,EACjB,KAAK,wBAAwB,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/secrets/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAGH,OAAO,EACL,KAAK,cAAc,EACnB,KAAK,SAAS,EACd,KAAK,aAAa,EAClB,KAAK,oBAAoB,EACzB,qBAAqB,EACrB,WAAW,EACX,eAAe,GAChB,MAAM,YAAY,CAAC;AAGpB,OAAO,EACL,uBAAuB,EACvB,yBAAyB,EACzB,cAAc,GACf,MAAM,eAAe,CAAC;AAGvB,OAAO,EACL,iBAAiB,EACjB,KAAK,wBAAwB,EAC7B,iBAAiB,GAClB,MAAM,sBAAsB,CAAC;AAG9B,OAAO,EACL,oBAAoB,EACpB,KAAK,oBAAoB,EACzB,KAAK,iBAAiB,GACvB,MAAM,cAAc,CAAC"}
|
package/dist/secrets/index.js
CHANGED
|
@@ -14,7 +14,7 @@ export { SecretResolutionError, isSecretRef, isStringLiteral, } from "./types.js
|
|
|
14
14
|
// Resolution utilities
|
|
15
15
|
export { resolveSecretsInMonitor, collectSecretsFromMonitor, planHasSecrets, } from "./resolver.js";
|
|
16
16
|
// Providers
|
|
17
|
-
export { EnvSecretProvider, } from "./providers/index.js";
|
|
17
|
+
export { EnvSecretProvider, HubSecretProvider, } from "./providers/index.js";
|
|
18
18
|
// Factory functions
|
|
19
19
|
export { createSecretProvider, } from "./factory.js";
|
|
20
20
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/secrets/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,aAAa;AACb,OAAO,EAKL,qBAAqB,EACrB,WAAW,EACX,eAAe,GAChB,MAAM,YAAY,CAAC;AAEpB,uBAAuB;AACvB,OAAO,EACL,uBAAuB,EACvB,yBAAyB,EACzB,cAAc,GACf,MAAM,eAAe,CAAC;AAEvB,YAAY;AACZ,OAAO,EACL,iBAAiB,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/secrets/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,aAAa;AACb,OAAO,EAKL,qBAAqB,EACrB,WAAW,EACX,eAAe,GAChB,MAAM,YAAY,CAAC;AAEpB,uBAAuB;AACvB,OAAO,EACL,uBAAuB,EACvB,yBAAyB,EACzB,cAAc,GACf,MAAM,eAAe,CAAC;AAEvB,YAAY;AACZ,OAAO,EACL,iBAAiB,EAEjB,iBAAiB,GAClB,MAAM,sBAAsB,CAAC;AAE9B,oBAAoB;AACpB,OAAO,EACL,oBAAoB,GAGrB,MAAM,cAAc,CAAC"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Hub secret provider.
|
|
3
|
+
*
|
|
4
|
+
* Resolves secrets via the hub's POST /secrets/resolve endpoint.
|
|
5
|
+
* The hub is the sole gateway for AWS Secrets Manager — no credentials leave the hub.
|
|
6
|
+
*/
|
|
7
|
+
import type { GriffinHubSdk } from "@griffin-app/griffin-hub-sdk";
|
|
8
|
+
import type { SecretProvider, SecretResolveOptions } from "../types.js";
|
|
9
|
+
export declare class HubSecretProvider implements SecretProvider {
|
|
10
|
+
readonly name = "hub";
|
|
11
|
+
private readonly sdk;
|
|
12
|
+
private readonly environment;
|
|
13
|
+
private readonly cache?;
|
|
14
|
+
private readonly cacheExpires?;
|
|
15
|
+
private readonly ttlMs;
|
|
16
|
+
constructor(sdk: GriffinHubSdk, environment: string, cache?: Map<string, string>, ttlMs?: number);
|
|
17
|
+
resolve(ref: string, options?: SecretResolveOptions): Promise<string>;
|
|
18
|
+
}
|
|
19
|
+
//# sourceMappingURL=hub.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"hub.d.ts","sourceRoot":"","sources":["../../../src/secrets/providers/hub.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,8BAA8B,CAAC;AAClE,OAAO,KAAK,EAAE,cAAc,EAAE,oBAAoB,EAAE,MAAM,aAAa,CAAC;AAQxE,qBAAa,iBAAkB,YAAW,cAAc;IACtD,QAAQ,CAAC,IAAI,SAAS;IACtB,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAgB;IACpC,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAS;IACrC,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAsB;IAC7C,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAC,CAAsB;IACpD,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAS;gBAG7B,GAAG,EAAE,aAAa,EAClB,WAAW,EAAE,MAAM,EACnB,KAAK,CAAC,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,EAC3B,KAAK,CAAC,EAAE,MAAM;IAWV,OAAO,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,oBAAoB,GAAG,OAAO,CAAC,MAAM,CAAC;CAkC5E"}
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Hub secret provider.
|
|
3
|
+
*
|
|
4
|
+
* Resolves secrets via the hub's POST /secrets/resolve endpoint.
|
|
5
|
+
* The hub is the sole gateway for AWS Secrets Manager — no credentials leave the hub.
|
|
6
|
+
*/
|
|
7
|
+
import { SecretResolutionError } from "../types.js";
|
|
8
|
+
function cacheKey(ref, options) {
|
|
9
|
+
if (!options?.version && !options?.field)
|
|
10
|
+
return ref;
|
|
11
|
+
return `${ref}\0${options.version ?? ""}\0${options.field ?? ""}`;
|
|
12
|
+
}
|
|
13
|
+
export class HubSecretProvider {
|
|
14
|
+
name = "hub";
|
|
15
|
+
sdk;
|
|
16
|
+
environment;
|
|
17
|
+
cache;
|
|
18
|
+
cacheExpires;
|
|
19
|
+
ttlMs;
|
|
20
|
+
constructor(sdk, environment, cache, ttlMs) {
|
|
21
|
+
this.sdk = sdk;
|
|
22
|
+
this.environment = environment;
|
|
23
|
+
this.cache = cache;
|
|
24
|
+
this.ttlMs = ttlMs ?? 0;
|
|
25
|
+
if (this.cache != null && this.ttlMs > 0) {
|
|
26
|
+
this.cacheExpires = new Map();
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
async resolve(ref, options) {
|
|
30
|
+
const key = cacheKey(ref, options);
|
|
31
|
+
if (this.cache != null) {
|
|
32
|
+
const expiresAt = this.cacheExpires?.get(key);
|
|
33
|
+
const now = Date.now();
|
|
34
|
+
if (expiresAt == null || now < expiresAt) {
|
|
35
|
+
const cached = this.cache.get(key);
|
|
36
|
+
if (cached !== undefined)
|
|
37
|
+
return cached;
|
|
38
|
+
}
|
|
39
|
+
else {
|
|
40
|
+
this.cache.delete(key);
|
|
41
|
+
this.cacheExpires?.delete(key);
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
const response = await this.sdk.postSecretsResolve({
|
|
45
|
+
body: { name: ref, environment: this.environment },
|
|
46
|
+
});
|
|
47
|
+
const value = response.data?.data?.value;
|
|
48
|
+
if (value === undefined) {
|
|
49
|
+
throw new SecretResolutionError(`Secret "${ref}" not found for environment "${this.environment}"`, { ref });
|
|
50
|
+
}
|
|
51
|
+
if (this.cache != null) {
|
|
52
|
+
this.cache.set(key, value);
|
|
53
|
+
if (this.cacheExpires != null && this.ttlMs > 0) {
|
|
54
|
+
this.cacheExpires.set(key, Date.now() + this.ttlMs);
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
return value;
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
//# sourceMappingURL=hub.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"hub.js","sourceRoot":"","sources":["../../../src/secrets/providers/hub.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/secrets/providers/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,iBAAiB,EAAE,KAAK,wBAAwB,EAAE,MAAM,UAAU,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/secrets/providers/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,iBAAiB,EAAE,KAAK,wBAAwB,EAAE,MAAM,UAAU,CAAC;AAC5E,OAAO,EAAE,iBAAiB,EAAE,MAAM,UAAU,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/secrets/providers/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,iBAAiB,EAAiC,MAAM,UAAU,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/secrets/providers/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,iBAAiB,EAAiC,MAAM,UAAU,CAAC;AAC5E,OAAO,EAAE,iBAAiB,EAAE,MAAM,UAAU,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@griffin-app/griffin-executor",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.4",
|
|
4
4
|
"description": "Executor for griffin JSON test monitors",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "dist/index.js",
|
|
@@ -22,8 +22,6 @@
|
|
|
22
22
|
"license": "MIT",
|
|
23
23
|
"dependencies": {
|
|
24
24
|
"@aws-sdk/client-kinesis": "^3.975.0",
|
|
25
|
-
"@aws-sdk/client-secrets-manager": "^3.981.0",
|
|
26
|
-
"@aws-sdk/client-sts": "^3.981.0",
|
|
27
25
|
"@griffin-app/griffin-hub-sdk": "1.0.27",
|
|
28
26
|
"@griffin-app/griffin-core": "0.2.2",
|
|
29
27
|
"axios": "^1.13.2",
|
package/src/index.ts
CHANGED
package/src/secrets/index.ts
CHANGED
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Hub secret provider.
|
|
3
|
+
*
|
|
4
|
+
* Resolves secrets via the hub's POST /secrets/resolve endpoint.
|
|
5
|
+
* The hub is the sole gateway for AWS Secrets Manager — no credentials leave the hub.
|
|
6
|
+
*/
|
|
7
|
+
|
|
8
|
+
import type { GriffinHubSdk } from "@griffin-app/griffin-hub-sdk";
|
|
9
|
+
import type { SecretProvider, SecretResolveOptions } from "../types.js";
|
|
10
|
+
import { SecretResolutionError } from "../types.js";
|
|
11
|
+
|
|
12
|
+
function cacheKey(ref: string, options?: SecretResolveOptions): string {
|
|
13
|
+
if (!options?.version && !options?.field) return ref;
|
|
14
|
+
return `${ref}\0${options.version ?? ""}\0${options.field ?? ""}`;
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
export class HubSecretProvider implements SecretProvider {
|
|
18
|
+
readonly name = "hub";
|
|
19
|
+
private readonly sdk: GriffinHubSdk;
|
|
20
|
+
private readonly environment: string;
|
|
21
|
+
private readonly cache?: Map<string, string>;
|
|
22
|
+
private readonly cacheExpires?: Map<string, number>;
|
|
23
|
+
private readonly ttlMs: number;
|
|
24
|
+
|
|
25
|
+
constructor(
|
|
26
|
+
sdk: GriffinHubSdk,
|
|
27
|
+
environment: string,
|
|
28
|
+
cache?: Map<string, string>,
|
|
29
|
+
ttlMs?: number,
|
|
30
|
+
) {
|
|
31
|
+
this.sdk = sdk;
|
|
32
|
+
this.environment = environment;
|
|
33
|
+
this.cache = cache;
|
|
34
|
+
this.ttlMs = ttlMs ?? 0;
|
|
35
|
+
if (this.cache != null && this.ttlMs > 0) {
|
|
36
|
+
this.cacheExpires = new Map();
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
async resolve(ref: string, options?: SecretResolveOptions): Promise<string> {
|
|
41
|
+
const key = cacheKey(ref, options);
|
|
42
|
+
if (this.cache != null) {
|
|
43
|
+
const expiresAt = this.cacheExpires?.get(key);
|
|
44
|
+
const now = Date.now();
|
|
45
|
+
if (expiresAt == null || now < expiresAt) {
|
|
46
|
+
const cached = this.cache.get(key);
|
|
47
|
+
if (cached !== undefined) return cached;
|
|
48
|
+
} else {
|
|
49
|
+
this.cache.delete(key);
|
|
50
|
+
this.cacheExpires?.delete(key);
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
const response = await this.sdk.postSecretsResolve({
|
|
55
|
+
body: { name: ref, environment: this.environment },
|
|
56
|
+
});
|
|
57
|
+
|
|
58
|
+
const value = response.data?.data?.value;
|
|
59
|
+
if (value === undefined) {
|
|
60
|
+
throw new SecretResolutionError(
|
|
61
|
+
`Secret "${ref}" not found for environment "${this.environment}"`,
|
|
62
|
+
{ ref },
|
|
63
|
+
);
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
if (this.cache != null) {
|
|
67
|
+
this.cache.set(key, value);
|
|
68
|
+
if (this.cacheExpires != null && this.ttlMs > 0) {
|
|
69
|
+
this.cacheExpires.set(key, Date.now() + this.ttlMs);
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
return value;
|
|
73
|
+
}
|
|
74
|
+
}
|
package/tsconfig.tsbuildinfo
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"root":["./src/executor.test.ts","./src/executor.ts","./src/index.ts","./src/shared.ts","./src/test-monitor-types.ts","./src/types.ts","./src/adapters/axios.ts","./src/adapters/index.ts","./src/adapters/stub.ts","./src/events/emitter.test.ts","./src/events/emitter.ts","./src/events/index.ts","./src/events/types.ts","./src/events/adapters/in-memory.test.ts","./src/events/adapters/in-memory.ts","./src/events/adapters/index.ts","./src/events/adapters/kinesis.test.ts","./src/events/adapters/kinesis.ts","./src/secrets/factory.ts","./src/secrets/index.ts","./src/secrets/resolver.ts","./src/secrets/secrets.test.ts","./src/secrets/types.ts","./src/secrets/providers/aws.ts","./src/secrets/providers/env.ts","./src/secrets/providers/index.ts","./src/secrets/providers/vault.ts","./src/utils/dates.ts"],"version":"5.9.3"}
|