@ontemper/sdk 0.7.1-postgresql.5 → 0.8.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/LICENSE +28 -0
- package/README.md +8 -81
- package/dist/As2Resource.d.ts +76 -431
- package/dist/As2Resource.d.ts.map +1 -1
- package/dist/As2Resource.js +30 -31
- package/dist/As2Resource.js.map +1 -1
- package/dist/As2Transport.d.ts.map +1 -1
- package/dist/As2Transport.js +1 -3
- package/dist/As2Transport.js.map +1 -1
- package/dist/As2Wire.d.ts +0 -39
- package/dist/As2Wire.d.ts.map +1 -1
- package/dist/Contract/RuntimeApi.d.ts +0 -19
- package/dist/Contract/RuntimeApi.d.ts.map +1 -1
- package/dist/Contract/RuntimeApi.js +1 -1
- package/dist/Contract/RuntimeApi.js.map +1 -1
- package/dist/Edi.d.ts.map +1 -1
- package/dist/Edi.js +5 -6
- package/dist/Edi.js.map +1 -1
- package/dist/HttpApiResource.d.ts +160 -2899
- package/dist/HttpApiResource.d.ts.map +1 -1
- package/dist/HttpApiResource.js +60 -82
- package/dist/HttpApiResource.js.map +1 -1
- package/dist/Manifest.d.ts +1 -1
- package/dist/Manifest.d.ts.map +1 -1
- package/dist/Manifest.js +1 -1
- package/dist/Manifest.js.map +1 -1
- package/dist/Redaction.d.ts +1 -5
- package/dist/Redaction.d.ts.map +1 -1
- package/dist/Redaction.js +6 -28
- package/dist/Redaction.js.map +1 -1
- package/dist/ResourcesErrors.d.ts +1 -5
- package/dist/ResourcesErrors.d.ts.map +1 -1
- package/dist/ResourcesErrors.js +2 -5
- package/dist/ResourcesErrors.js.map +1 -1
- package/dist/ResourcesToken.d.ts +0 -9
- package/dist/ResourcesToken.d.ts.map +1 -1
- package/dist/ResourcesToken.js +7 -20
- package/dist/ResourcesToken.js.map +1 -1
- package/dist/RuntimeResources.d.ts +2 -29
- package/dist/RuntimeResources.d.ts.map +1 -1
- package/dist/RuntimeResources.js +19 -58
- package/dist/RuntimeResources.js.map +1 -1
- package/dist/TransportResource.d.ts +32 -1
- package/dist/TransportResource.d.ts.map +1 -1
- package/dist/TransportResource.js +19 -1
- package/dist/TransportResource.js.map +1 -1
- package/dist/Workflow.js +2 -2
- package/dist/Workflow.js.map +1 -1
- package/package.json +7 -39
- package/dist/DatabaseTunnelAuthorization.d.ts +0 -11
- package/dist/DatabaseTunnelAuthorization.d.ts.map +0 -1
- package/dist/DatabaseTunnelAuthorization.js +0 -35
- package/dist/DatabaseTunnelAuthorization.js.map +0 -1
- package/dist/ExpiringMap.d.ts +0 -21
- package/dist/ExpiringMap.d.ts.map +0 -1
- package/dist/ExpiringMap.js +0 -79
- package/dist/ExpiringMap.js.map +0 -1
- package/dist/Kafka.d.ts +0 -89
- package/dist/Kafka.d.ts.map +0 -1
- package/dist/Kafka.js +0 -297
- package/dist/Kafka.js.map +0 -1
- package/dist/PostgreSql.d.ts +0 -24
- package/dist/PostgreSql.d.ts.map +0 -1
- package/dist/PostgreSql.js +0 -55
- package/dist/PostgreSql.js.map +0 -1
- package/dist/PostgreSqlPool.d.ts +0 -32
- package/dist/PostgreSqlPool.d.ts.map +0 -1
- package/dist/PostgreSqlPool.js +0 -118
- package/dist/PostgreSqlPool.js.map +0 -1
- package/dist/PostgreSqlTimeouts.d.ts +0 -6
- package/dist/PostgreSqlTimeouts.d.ts.map +0 -1
- package/dist/PostgreSqlTimeouts.js +0 -17
- package/dist/PostgreSqlTimeouts.js.map +0 -1
- package/dist/PostgreSqlTunnel.d.ts +0 -25
- package/dist/PostgreSqlTunnel.d.ts.map +0 -1
- package/dist/PostgreSqlTunnel.js +0 -114
- package/dist/PostgreSqlTunnel.js.map +0 -1
- package/dist/ResourceRecords.d.ts +0 -1086
- package/dist/ResourceRecords.d.ts.map +0 -1
- package/dist/ResourceRecords.js +0 -303
- package/dist/ResourceRecords.js.map +0 -1
- package/dist/Resources.d.ts +0 -17
- package/dist/Resources.d.ts.map +0 -1
- package/dist/Resources.js +0 -15
- package/dist/Resources.js.map +0 -1
- package/dist/ResourcesCache.d.ts +0 -33
- package/dist/ResourcesCache.d.ts.map +0 -1
- package/dist/ResourcesCache.js +0 -205
- package/dist/ResourcesCache.js.map +0 -1
- package/dist/ResourcesEnv.d.ts +0 -95
- package/dist/ResourcesEnv.d.ts.map +0 -1
- package/dist/ResourcesEnv.js +0 -135
- package/dist/ResourcesEnv.js.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ResourcesToken.js","sourceRoot":"","sources":["../src/ResourcesToken.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAC5C,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AACpG,OAAO,EAAE,0BAA0B,EAAE,MAAM,sBAAsB,CAAC;AAElE,
|
|
1
|
+
{"version":3,"file":"ResourcesToken.js","sourceRoot":"","sources":["../src/ResourcesToken.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,37 +1,10 @@
|
|
|
1
1
|
import { Context, Effect, Layer, Redacted, Schema } from 'effect';
|
|
2
2
|
import { HttpClient } from 'effect/http';
|
|
3
|
-
import { type
|
|
3
|
+
import { type SelectResourceRuntimeInputSchema } from './Contract/RuntimeApi.js';
|
|
4
4
|
import { InvalidResourceError, ResourceNotFoundError, ResourceNotSelectableError, ResourcesUnauthorizedError, ResourcesUnavailableError } from './ResourcesErrors.js';
|
|
5
|
-
import { type RuntimeTokenPolicy } from './ResourcesToken.js';
|
|
6
5
|
/** Finds the one record of a type whose `x-selectable` field equals the value a tenant presented. */
|
|
7
6
|
export type ResourceSelector = typeof SelectResourceRuntimeInputSchema.Type;
|
|
8
|
-
export type ReadError = ResourceNotFoundError |
|
|
9
|
-
/** The resolver's answer to `inspect`: literal fields and metadata, never a secret. */
|
|
10
|
-
export type InspectedResource = typeof RuntimeInspectedResourceSchema.Type;
|
|
11
|
-
/** Uncached runtime reads and the current runtime token; the promise `env` sends any unexpired token, as legacy did. */
|
|
12
|
-
export declare const runtimeResourceClient: (policy: RuntimeTokenPolicy) => Effect.Effect<{
|
|
13
|
-
/**
|
|
14
|
-
* The token for one database tunnel; re-read on every call, never cached by the caller. The tunnel re-checks it
|
|
15
|
-
* every 2 s, so a token in its 30 s refresh window would end the connection when it expires.
|
|
16
|
-
*/
|
|
17
|
-
tunnelToken: Effect.Effect<string, ResourcesUnauthorizedError, never>;
|
|
18
|
-
variable: (key: string) => Effect.Effect<string, ReadError, never>;
|
|
19
|
-
resolve: (key: string) => Effect.Effect<Schema.Json, ReadError, never>;
|
|
20
|
-
inspect: (key: string) => Effect.Effect<InspectedResource, ReadError>;
|
|
21
|
-
select: (selector: ResourceSelector) => Effect.Effect<string, ResourceNotSelectableError | ReadError, never>;
|
|
22
|
-
}, never, HttpClient.HttpClient>;
|
|
23
|
-
/** The `./postgresql` client: tunnel tokens must outlive their refresh window. */
|
|
24
|
-
export declare const makeRuntimeResourceClient: Effect.Effect<{
|
|
25
|
-
/**
|
|
26
|
-
* The token for one database tunnel; re-read on every call, never cached by the caller. The tunnel re-checks it
|
|
27
|
-
* every 2 s, so a token in its 30 s refresh window would end the connection when it expires.
|
|
28
|
-
*/
|
|
29
|
-
tunnelToken: Effect.Effect<string, ResourcesUnauthorizedError, never>;
|
|
30
|
-
variable: (key: string) => Effect.Effect<string, ReadError, never>;
|
|
31
|
-
resolve: (key: string) => Effect.Effect<Schema.Json, ReadError, never>;
|
|
32
|
-
inspect: (key: string) => Effect.Effect<InspectedResource, ReadError>;
|
|
33
|
-
select: (selector: ResourceSelector) => Effect.Effect<string, ResourceNotSelectableError | ReadError, never>;
|
|
34
|
-
}, never, HttpClient.HttpClient>;
|
|
7
|
+
export type ReadError = ResourceNotFoundError | ResourcesUnauthorizedError | ResourcesUnavailableError;
|
|
35
8
|
/** What declared resources read through: the Temper runtime API in production, fixed values in tests. */
|
|
36
9
|
export interface ResourceReader {
|
|
37
10
|
/** A Variable's live value; `Redacted` because the platform, not the caller, decides what is secret. */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"RuntimeResources.d.ts","sourceRoot":"","sources":["../src/RuntimeResources.ts"],"names":[],"mappings":"AAAA,OAAO,EAAiB,OAAO,EAAY,MAAM,EAAQ,KAAK,EAAU,QAAQ,EAAE,MAAM,EAAc,MAAM,QAAQ,CAAC;AAErH,OAAO,EAAE,UAAU,EAA2C,MAAM,aAAa,CAAC;AAElF,OAAO,EAQL,KAAK,
|
|
1
|
+
{"version":3,"file":"RuntimeResources.d.ts","sourceRoot":"","sources":["../src/RuntimeResources.ts"],"names":[],"mappings":"AAAA,OAAO,EAAiB,OAAO,EAAY,MAAM,EAAQ,KAAK,EAAU,QAAQ,EAAE,MAAM,EAAc,MAAM,QAAQ,CAAC;AAErH,OAAO,EAAE,UAAU,EAA2C,MAAM,aAAa,CAAC;AAElF,OAAO,EAQL,KAAK,gCAAgC,EACtC,MAAM,0BAA0B,CAAC;AAElC,OAAO,EACL,oBAAoB,EACpB,qBAAqB,EACrB,0BAA0B,EAC1B,0BAA0B,EAC1B,yBAAyB,EAC1B,MAAM,sBAAsB,CAAC;AAY9B,qGAAqG;AACrG,MAAM,MAAM,gBAAgB,GAAG,OAAO,gCAAgC,CAAC,IAAI,CAAC;AAE5E,MAAM,MAAM,SAAS,GAAG,qBAAqB,GAAG,0BAA0B,GAAG,yBAAyB,CAAC;AA2KvG,yGAAyG;AACzG,MAAM,WAAW,cAAc;IAC7B,wGAAwG;IACxG,QAAQ,CAAC,QAAQ,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,SAAS,CAAC,CAAC;IACxF,uEAAuE;IACvE,QAAQ,CAAC,OAAO,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,SAAS,GAAG,oBAAoB,CAAC,CAAC;IAChG,oEAAoE;IACpE,QAAQ,CAAC,MAAM,EAAE,CACf,QAAQ,EAAE,gBAAgB,KACvB,MAAM,CAAC,MAAM,CAAC,MAAM,EAAE,SAAS,GAAG,0BAA0B,GAAG,oBAAoB,CAAC,CAAC;CAC3F;;AAED;;;GAGG;AACH,qBAAa,gBAAiB,SAAQ,qBAErC;IAEC,MAAM,CAAC,QAAQ,CAAC,KAAK,8DAAiD;CACvE"}
|
package/dist/RuntimeResources.js
CHANGED
|
@@ -5,7 +5,7 @@ import { HttpApiClient } from 'effect/http-api';
|
|
|
5
5
|
import { ResourcesRuntimeApi, } from './Contract/RuntimeApi.js';
|
|
6
6
|
import { registerSecrets } from './Redaction.js';
|
|
7
7
|
import { InvalidResourceError, ResourceNotFoundError, ResourceNotSelectableError, ResourcesUnauthorizedError, ResourcesUnavailableError, } from './ResourcesErrors.js';
|
|
8
|
-
import {
|
|
8
|
+
import { makeRuntimeTokens } from './ResourcesToken.js';
|
|
9
9
|
// Resolved values are live configuration: an edit, or a revoked secret, reaches a warm process within this window.
|
|
10
10
|
const CACHE_TTL = Duration.seconds(30);
|
|
11
11
|
// Bounds memory for a workflow that selects across many tenants; the least recently read entry goes first.
|
|
@@ -26,9 +26,8 @@ const statusOfRuntimeError = {
|
|
|
26
26
|
RuntimeResourcesConflictError: 409,
|
|
27
27
|
RuntimeResourcesUnavailableError: 503,
|
|
28
28
|
};
|
|
29
|
-
|
|
30
|
-
const
|
|
31
|
-
const tokens = yield* makeRuntimeTokensWith(policy);
|
|
29
|
+
const ResourcesMake = Effect.gen(function* () {
|
|
30
|
+
const tokens = yield* makeRuntimeTokens;
|
|
32
31
|
// Each attempt's scope owns its request: leaving the scope aborts it, so no response outlives its attempt.
|
|
33
32
|
const platform = HttpClient.withScope(yield* HttpClient.HttpClient).pipe(HttpClient.mapRequestEffect((request) => Config.NonEmptyString('UNNBOUND_API_URL').pipe(Effect.map((apiUrl) => HttpClientRequest.prependUrl(request, apiUrl)), Effect.mapError(() => new ApiUrlMissing()))));
|
|
34
33
|
// A 401's body is the fixed `Unauthorized`; failing before it is read lets a refused attempt end at once.
|
|
@@ -46,13 +45,9 @@ const runtimeCaller = (policy) => Effect.gen(function* () {
|
|
|
46
45
|
case 'TokenRefused':
|
|
47
46
|
return new ResourcesUnauthorizedError({ message: failed('401 Unauthorized') });
|
|
48
47
|
case 'HttpClientError':
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
: new ResourcesUnavailableError({
|
|
53
|
-
message: failed(`${error.response.status}`),
|
|
54
|
-
status: error.response.status,
|
|
55
|
-
});
|
|
48
|
+
return new ResourcesUnavailableError({
|
|
49
|
+
message: failed(error.response === undefined ? error.message : `${error.response.status}`),
|
|
50
|
+
});
|
|
56
51
|
case 'SchemaError':
|
|
57
52
|
return new ResourcesUnavailableError({ message: failed('unreadable answer') });
|
|
58
53
|
default: {
|
|
@@ -62,10 +57,7 @@ const runtimeCaller = (policy) => Effect.gen(function* () {
|
|
|
62
57
|
return new ResourcesUnauthorizedError({ message });
|
|
63
58
|
if (status === 404)
|
|
64
59
|
return new ResourceNotFoundError({ target, message });
|
|
65
|
-
return
|
|
66
|
-
(status >= 400 && status < 500
|
|
67
|
-
? new InvalidResourceError({ target, message })
|
|
68
|
-
: new ResourcesUnavailableError({ message })));
|
|
60
|
+
return refuse(status, message) ?? new ResourcesUnavailableError({ message });
|
|
69
61
|
}
|
|
70
62
|
}
|
|
71
63
|
};
|
|
@@ -83,58 +75,27 @@ const runtimeCaller = (policy) => Effect.gen(function* () {
|
|
|
83
75
|
const first = yield* attempt(client.resourcesRuntime, token).pipe(Effect.map(Option.some), Effect.catchTag('TokenRefused', () => Effect.succeedNone));
|
|
84
76
|
if (Option.isSome(first))
|
|
85
77
|
return first.value;
|
|
86
|
-
|
|
87
|
-
const replacement = yield* tokens.replacing(token).pipe(Effect.mapError(() => new TokenRefused()));
|
|
88
|
-
return yield* attempt(client.resourcesRuntime, replacement);
|
|
78
|
+
return yield* attempt(client.resourcesRuntime, yield* tokens.replacing(token));
|
|
89
79
|
}).pipe(Effect.catchIf((error) => error._tag !== 'ResourcesUnauthorizedError' && error._tag !== 'ResourcesUnavailableError', (error) => Effect.fail(toReadError(error))));
|
|
90
80
|
};
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
//
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
const
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
inspect: (key) => call('inspectResource', `key ${key}`, (api, authorization) => api.inspectResource({ headers: { authorization }, payload: { key } })),
|
|
101
|
-
select: (selector) => {
|
|
81
|
+
const cache = (lookup) => Cache.makeWith(lookup, {
|
|
82
|
+
capacity: CACHE_CAPACITY,
|
|
83
|
+
// A failure is not kept: the next read asks the resolver again.
|
|
84
|
+
timeToLive: (exit) => (Exit.isSuccess(exit) ? CACHE_TTL : Duration.zero),
|
|
85
|
+
});
|
|
86
|
+
const variables = yield* cache((key) => call('resolveVariable', `key ${key}`, (api, authorization) => api.resolveVariable({ headers: { authorization }, payload: { key } })));
|
|
87
|
+
const values = yield* cache((key) => call('resolveResource', `key ${key}`, (api, authorization) => api.resolveResource({ headers: { authorization }, payload: { key } }), (status, message) => (status === 409 ? new InvalidResourceError({ target: `key ${key}`, message }) : undefined)));
|
|
88
|
+
// Keyed by value: `{a,b}` and `{b,a}` share one entry, and each tenant's presented value gets its own.
|
|
89
|
+
const selections = yield* cache((selector) => {
|
|
102
90
|
const target = `${selector.resourceTypeKey} matching ${Object.keys(selector.match).join(', ')}`;
|
|
103
91
|
return call('selectResource', target, (api, authorization) => api.selectResource({ headers: { authorization }, payload: selector }), (status, message) => status === 400
|
|
104
92
|
? new ResourceNotSelectableError({ target, message })
|
|
105
93
|
: status === 409
|
|
106
94
|
? new InvalidResourceError({ target, message })
|
|
107
95
|
: undefined);
|
|
108
|
-
},
|
|
109
|
-
});
|
|
110
|
-
/** Uncached runtime reads and the current runtime token; the promise `env` sends any unexpired token, as legacy did. */
|
|
111
|
-
export const runtimeResourceClient = (policy) => Effect.map(runtimeCaller(policy), ({ tokens, call }) => {
|
|
112
|
-
const reads = runtimeReads(call);
|
|
113
|
-
return {
|
|
114
|
-
/**
|
|
115
|
-
* The token for one database tunnel; re-read on every call, never cached by the caller. The tunnel re-checks it
|
|
116
|
-
* every 2 s, so a token in its 30 s refresh window would end the connection when it expires.
|
|
117
|
-
*/
|
|
118
|
-
tunnelToken: tokens.current,
|
|
119
|
-
variable: (key) => unwrap(reads.variable(key)),
|
|
120
|
-
resolve: (key) => unwrap(reads.resolve(key)),
|
|
121
|
-
inspect: (key) => unwrap(reads.inspect(key)),
|
|
122
|
-
select: (selector) => Effect.map(unwrap(reads.select(selector)), (selected) => selected.key),
|
|
123
|
-
};
|
|
124
|
-
});
|
|
125
|
-
/** The `./postgresql` client: tunnel tokens must outlive their refresh window. */
|
|
126
|
-
export const makeRuntimeResourceClient = runtimeResourceClient('refreshWindow');
|
|
127
|
-
const ResourcesMake = Effect.gen(function* () {
|
|
128
|
-
const reads = runtimeReads((yield* makeRuntimeCaller).call);
|
|
129
|
-
const cache = (lookup) => Cache.makeWith(lookup, {
|
|
130
|
-
capacity: CACHE_CAPACITY,
|
|
131
|
-
// A failure is not kept: the next read asks the resolver again.
|
|
132
|
-
timeToLive: (exit) => (Exit.isSuccess(exit) ? CACHE_TTL : Duration.zero),
|
|
133
96
|
});
|
|
134
|
-
|
|
135
|
-
const
|
|
136
|
-
// Keyed by value: `{a,b}` and `{b,a}` share one entry, and each tenant's presented value gets its own.
|
|
137
|
-
const selections = yield* cache(reads.select);
|
|
97
|
+
// Registers the answer's secrets in the caller's context, so a cached read masks them like a fresh one.
|
|
98
|
+
const unwrap = (read) => read.pipe(Effect.tap(({ redactionMasks }) => registerSecrets(redactionMasks ?? [])), Effect.map(({ value }) => value));
|
|
138
99
|
return RuntimeResources.of({
|
|
139
100
|
variable: (key) => Effect.map(unwrap(Cache.get(variables, key)), Redacted.make),
|
|
140
101
|
// Each caller gets its own copy: the cached value is shared across requests for 30 s.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"RuntimeResources.js","sourceRoot":"","sources":["../src/RuntimeResources.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAc,MAAM,QAAQ,CAAC;AACrH,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAC5C,OAAO,EAAE,UAAU,EAAwB,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAClF,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAChD,OAAO,EACL,mBAAmB,
|
|
1
|
+
{"version":3,"file":"RuntimeResources.js","sourceRoot":"","sources":["../src/RuntimeResources.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,2 +1,33 @@
|
|
|
1
|
-
|
|
1
|
+
import { Schema } from 'effect';
|
|
2
|
+
export declare const TransportTls: Schema.Struct<{
|
|
3
|
+
readonly caCertificate: Schema.optionalKey<Schema.String>;
|
|
4
|
+
readonly clientCertificate: Schema.optionalKey<Schema.String>;
|
|
5
|
+
readonly clientKey: Schema.optionalKey<Schema.RedactedFromValue<Schema.String>>;
|
|
6
|
+
readonly clientKeyPassphrase: Schema.optionalKey<Schema.RedactedFromValue<Schema.String>>;
|
|
7
|
+
readonly serverName: Schema.optionalKey<Schema.String>;
|
|
8
|
+
}>;
|
|
9
|
+
export declare const TransportAuth: Schema.withDecodingDefaultKey<Schema.Union<readonly [Schema.Struct<{
|
|
10
|
+
readonly type: Schema.Literal<"none">;
|
|
11
|
+
}>, Schema.Struct<{
|
|
12
|
+
readonly type: Schema.Literal<"basic">;
|
|
13
|
+
readonly username: Schema.String;
|
|
14
|
+
readonly password: Schema.RedactedFromValue<Schema.String>;
|
|
15
|
+
}>]>, never>;
|
|
16
|
+
export declare const TransportProxy: Schema.Struct<{
|
|
17
|
+
readonly url: Schema.String;
|
|
18
|
+
readonly auth: Schema.withDecodingDefaultKey<Schema.Union<readonly [Schema.Struct<{
|
|
19
|
+
readonly type: Schema.Literal<"none">;
|
|
20
|
+
}>, Schema.Struct<{
|
|
21
|
+
readonly type: Schema.Literal<"basic">;
|
|
22
|
+
readonly username: Schema.String;
|
|
23
|
+
readonly password: Schema.RedactedFromValue<Schema.String>;
|
|
24
|
+
}>]>, never>;
|
|
25
|
+
readonly tls: Schema.optionalKey<Schema.Struct<{
|
|
26
|
+
readonly caCertificate: Schema.optionalKey<Schema.String>;
|
|
27
|
+
readonly clientCertificate: Schema.optionalKey<Schema.String>;
|
|
28
|
+
readonly clientKey: Schema.optionalKey<Schema.RedactedFromValue<Schema.String>>;
|
|
29
|
+
readonly clientKeyPassphrase: Schema.optionalKey<Schema.RedactedFromValue<Schema.String>>;
|
|
30
|
+
readonly serverName: Schema.optionalKey<Schema.String>;
|
|
31
|
+
}>>;
|
|
32
|
+
}>;
|
|
2
33
|
//# sourceMappingURL=TransportResource.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TransportResource.d.ts","sourceRoot":"","sources":["../src/TransportResource.ts"],"names":[],"mappings":"AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"TransportResource.d.ts","sourceRoot":"","sources":["../src/TransportResource.ts"],"names":[],"mappings":"AAAA,OAAO,EAAU,MAAM,EAAE,MAAM,QAAQ,CAAC;AAKxC,eAAO,MAAM,YAAY;;;;;;EAMvB,CAAC;AAEH,eAAO,MAAM,aAAa;;;;;;YAGuD,CAAC;AAElF,eAAO,MAAM,cAAc;;;;;;;;;;;;;;;;EAIzB,CAAC"}
|
|
@@ -1,2 +1,20 @@
|
|
|
1
|
-
|
|
1
|
+
import { Effect, Schema } from 'effect';
|
|
2
|
+
const Secret = Schema.RedactedFromValue(Schema.String);
|
|
3
|
+
const NonEmptyString = Schema.String.check(Schema.isMinLength(1));
|
|
4
|
+
export const TransportTls = Schema.Struct({
|
|
5
|
+
caCertificate: Schema.optionalKey(Schema.String),
|
|
6
|
+
clientCertificate: Schema.optionalKey(Schema.String),
|
|
7
|
+
clientKey: Schema.optionalKey(Secret),
|
|
8
|
+
clientKeyPassphrase: Schema.optionalKey(Secret),
|
|
9
|
+
serverName: Schema.optionalKey(NonEmptyString),
|
|
10
|
+
});
|
|
11
|
+
export const TransportAuth = Schema.Union([
|
|
12
|
+
Schema.Struct({ type: Schema.Literal('none') }),
|
|
13
|
+
Schema.Struct({ type: Schema.Literal('basic'), username: Schema.String, password: Secret }),
|
|
14
|
+
]).pipe(Schema.withDecodingDefaultKey(Effect.succeed({ type: 'none' })));
|
|
15
|
+
export const TransportProxy = Schema.Struct({
|
|
16
|
+
url: NonEmptyString,
|
|
17
|
+
auth: TransportAuth,
|
|
18
|
+
tls: Schema.optionalKey(TransportTls),
|
|
19
|
+
});
|
|
2
20
|
//# sourceMappingURL=TransportResource.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TransportResource.js","sourceRoot":"","sources":["../src/TransportResource.ts"],"names":[],"mappings":"AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"TransportResource.js","sourceRoot":"","sources":["../src/TransportResource.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAExC,MAAM,MAAM,GAAG,MAAM,CAAC,iBAAiB,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;AACvD,MAAM,cAAc,GAAG,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC;AAElE,MAAM,CAAC,MAAM,YAAY,GAAG,MAAM,CAAC,MAAM,CAAC;IACxC,aAAa,EAAE,MAAM,CAAC,WAAW,CAAC,MAAM,CAAC,MAAM,CAAC;IAChD,iBAAiB,EAAE,MAAM,CAAC,WAAW,CAAC,MAAM,CAAC,MAAM,CAAC;IACpD,SAAS,EAAE,MAAM,CAAC,WAAW,CAAC,MAAM,CAAC;IACrC,mBAAmB,EAAE,MAAM,CAAC,WAAW,CAAC,MAAM,CAAC;IAC/C,UAAU,EAAE,MAAM,CAAC,WAAW,CAAC,cAAc,CAAC;CAC/C,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,aAAa,GAAG,MAAM,CAAC,KAAK,CAAC;IACxC,MAAM,CAAC,MAAM,CAAC,EAAE,IAAI,EAAE,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC;IAC/C,MAAM,CAAC,MAAM,CAAC,EAAE,IAAI,EAAE,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,CAAC;CAC5F,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,sBAAsB,CAAC,MAAM,CAAC,OAAO,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,CAAC,CAAC,CAAC,CAAC;AAElF,MAAM,CAAC,MAAM,cAAc,GAAG,MAAM,CAAC,MAAM,CAAC;IAC1C,GAAG,EAAE,cAAc;IACnB,IAAI,EAAE,aAAa;IACnB,GAAG,EAAE,MAAM,CAAC,WAAW,CAAC,YAAY,CAAC;CACtC,CAAC,CAAC"}
|
package/dist/Workflow.js
CHANGED
|
@@ -8,7 +8,7 @@ import { Invocation } from './Invocation.js';
|
|
|
8
8
|
import { loggerLayer, writeStdoutLine } from './Logger.js';
|
|
9
9
|
import { HEALTHCHECK_PATH, makeManifest } from './Manifest.js';
|
|
10
10
|
import { EventRequestMiddleware, UnmatchedRequestMiddleware } from './Middleware.js';
|
|
11
|
-
import {
|
|
11
|
+
import { makeSecretMasks, SecretMasks } from './Redaction.js';
|
|
12
12
|
import { declarationLayer, declarationOf } from './Resource.js';
|
|
13
13
|
import { RuntimeResources } from './RuntimeResources.js';
|
|
14
14
|
/**
|
|
@@ -26,7 +26,7 @@ const InMemoryHttpPlatform = Layer.mergeAll(HttpPlatform.layer.pipe(Layer.provid
|
|
|
26
26
|
*/
|
|
27
27
|
const platformLayer = (platform) => Layer.mergeAll(loggerLayer(platform.writeLog ?? writeStdoutLine), httpClientLayer(platform.outboundFetch ?? ((url, init) => globalThis.fetch(url, init)))).pipe(Layer.provideMerge(Layer.mergeAll(
|
|
28
28
|
// Legacy `process.env.X ?? fallback` treated an empty variable as set.
|
|
29
|
-
ConfigProvider.layer(platform.configProvider ?? ConfigProvider.fromEnvRecord(process.env, { preserveEmptyStrings: true })), Layer.succeed(SecretMasks,
|
|
29
|
+
ConfigProvider.layer(platform.configProvider ?? ConfigProvider.fromEnvRecord(process.env, { preserveEmptyStrings: true })), Layer.succeed(SecretMasks, makeSecretMasks()), platform.clock === undefined ? Layer.empty : Layer.succeed(Clock.Clock, platform.clock))));
|
|
30
30
|
/** Platform run metadata travels in `context`; the header copies are removed so handlers cannot drift onto them. */
|
|
31
31
|
const stripPlatformHeaders = (request) => {
|
|
32
32
|
const names = [];
|
package/dist/Workflow.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Workflow.js","sourceRoot":"","sources":["../src/Workflow.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,cAAc,EAAE,OAAO,EAAE,UAAU,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,QAAQ,CAAC;AACzF,OAAO,EAAE,IAAI,EAAmB,YAAY,EAAE,UAAU,EAAE,UAAU,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAC;AAC9G,OAAO,EAAE,OAAO,EAAE,cAAc,EAAqB,MAAM,iBAAiB,CAAC;AAC7E,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EAAE,QAAQ,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAGvD,OAAO,EAAE,eAAe,EAAsB,MAAM,iBAAiB,CAAC;AACtE,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAC7C,OAAO,EAAE,WAAW,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAC3D,OAAO,EAAE,gBAAgB,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAC/D,OAAO,EAAE,sBAAsB,EAAE,0BAA0B,EAAE,MAAM,iBAAiB,CAAC;AACrF,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"Workflow.js","sourceRoot":"","sources":["../src/Workflow.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@ontemper/sdk",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.8.0",
|
|
4
4
|
"description": "Effect workflow SDK for Temper.",
|
|
5
5
|
"repository": {
|
|
6
6
|
"type": "git",
|
|
@@ -42,10 +42,6 @@
|
|
|
42
42
|
"./as2/testing": {
|
|
43
43
|
"types": "./dist/As2Testing.d.ts",
|
|
44
44
|
"default": "./dist/As2Testing.js"
|
|
45
|
-
},
|
|
46
|
-
"./resources": {
|
|
47
|
-
"types": "./dist/Resources.d.ts",
|
|
48
|
-
"default": "./dist/Resources.js"
|
|
49
45
|
}
|
|
50
46
|
},
|
|
51
47
|
"bin": {
|
|
@@ -53,7 +49,8 @@
|
|
|
53
49
|
},
|
|
54
50
|
"files": [
|
|
55
51
|
"dist/**/*",
|
|
56
|
-
"README.md"
|
|
52
|
+
"README.md",
|
|
53
|
+
"LICENSE"
|
|
57
54
|
],
|
|
58
55
|
"engines": {
|
|
59
56
|
"bun": ">=1.3.0",
|
|
@@ -63,53 +60,24 @@
|
|
|
63
60
|
"ssh2": "1.17.0"
|
|
64
61
|
},
|
|
65
62
|
"peerDependencies": {
|
|
66
|
-
"
|
|
67
|
-
"aws-msk-iam-sasl-signer-js": "^1.0.3",
|
|
68
|
-
"effect": "4.0.6",
|
|
69
|
-
"pg": "^8.16.0",
|
|
70
|
-
"ws": "^8.18.0"
|
|
71
|
-
},
|
|
72
|
-
"peerDependenciesMeta": {
|
|
73
|
-
"@aws-sdk/credential-providers": {
|
|
74
|
-
"optional": true
|
|
75
|
-
},
|
|
76
|
-
"aws-msk-iam-sasl-signer-js": {
|
|
77
|
-
"optional": true
|
|
78
|
-
},
|
|
79
|
-
"pg": {
|
|
80
|
-
"optional": true
|
|
81
|
-
},
|
|
82
|
-
"ws": {
|
|
83
|
-
"optional": true
|
|
84
|
-
}
|
|
63
|
+
"effect": "4.0.6"
|
|
85
64
|
},
|
|
86
65
|
"devDependencies": {
|
|
87
|
-
"@aws-sdk/credential-providers": "3.1116.0",
|
|
88
|
-
"@temper/resource-type-fixtures": "0.0.0",
|
|
89
|
-
"@temper/shared": "1.0.0",
|
|
90
|
-
"@testcontainers/postgresql": "^11.14.0",
|
|
91
66
|
"@types/bun": "1.4.1",
|
|
92
67
|
"@types/node": "26.4.1",
|
|
93
|
-
"@types/pg": "^8.20.0",
|
|
94
68
|
"@types/ssh2": "1.15.5",
|
|
95
|
-
"@types/ws": "^8.18.1",
|
|
96
|
-
"aws-msk-iam-sasl-signer-js": "^1.0.3",
|
|
97
69
|
"effect": "4.0.6",
|
|
98
|
-
"
|
|
99
|
-
"pg": "^8.22.0",
|
|
100
|
-
"vitest": "^4.0.15",
|
|
101
|
-
"ws": "^8.21.3"
|
|
70
|
+
"vitest": "^4.0.15"
|
|
102
71
|
},
|
|
103
72
|
"publishConfig": {
|
|
104
73
|
"access": "public"
|
|
105
74
|
},
|
|
106
|
-
"license": "
|
|
75
|
+
"license": "SEE LICENSE IN LICENSE",
|
|
107
76
|
"sideEffects": false,
|
|
108
|
-
"gitHead": "
|
|
77
|
+
"gitHead": "d9bf7783684658682316083a56b33e35f37f41f6",
|
|
109
78
|
"scripts": {
|
|
110
79
|
"build": "tsc -p tsconfig.json",
|
|
111
80
|
"test": "vitest run",
|
|
112
|
-
"test:unit": "vitest run --exclude '**/*.integration.test.ts'",
|
|
113
81
|
"typecheck": "tsc -p tsconfig.json --noEmit"
|
|
114
82
|
}
|
|
115
83
|
}
|
|
@@ -1,11 +0,0 @@
|
|
|
1
|
-
import { Config, Effect } from 'effect';
|
|
2
|
-
export declare const databaseTunnelUrl: (key: string) => Effect.Effect<string, Config.ConfigError | Error, never>;
|
|
3
|
-
/**
|
|
4
|
-
* Current runtime authorization for a PostgreSQL tunnel; never cache its token. No database client is loaded.
|
|
5
|
-
* A token provider that publishes no usable token within 10 s rejects with `ResourcesUnavailableError`.
|
|
6
|
-
*/
|
|
7
|
-
export declare function getDatabaseTunnelAuthorization(key: string): Promise<{
|
|
8
|
-
url: string;
|
|
9
|
-
token: string;
|
|
10
|
-
}>;
|
|
11
|
-
//# sourceMappingURL=DatabaseTunnelAuthorization.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"DatabaseTunnelAuthorization.d.ts","sourceRoot":"","sources":["../src/DatabaseTunnelAuthorization.ts"],"names":[],"mappings":"AAAA,OAAO,EAAS,MAAM,EAA4B,MAAM,EAAQ,MAAM,QAAQ,CAAC;AAQ/E,eAAO,MAAM,iBAAiB,QAAS,MAAM,6DASzC,CAAC;AAKL;;;GAGG;AACH,wBAAsB,8BAA8B,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;IAAE,GAAG,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,CAAC,CAuBzG"}
|
|
@@ -1,35 +0,0 @@
|
|
|
1
|
-
import { Cause, Config, ConfigProvider, Duration, Effect, Exit } from 'effect';
|
|
2
|
-
import { ResourcesUnavailableError } from './ResourcesErrors.js';
|
|
3
|
-
import { makeRuntimeTokens, TOKEN_NOT_PUBLISHED } from './ResourcesToken.js';
|
|
4
|
-
// pg's connect timeout is 10 s, so a token wait ends with the connection attempt, as `./postgresql` bounds it.
|
|
5
|
-
const TOKEN_WAIT = Duration.seconds(10);
|
|
6
|
-
// The tunnel router treats literal dots as a file extension; encode them before the key's path-component encoding.
|
|
7
|
-
export const databaseTunnelUrl = (key) => Effect.gen(function* () {
|
|
8
|
-
const apiUrl = yield* Config.NonEmptyString('UNNBOUND_API_URL');
|
|
9
|
-
const endpoint = new URL(`/api/runtime/databases/${encodeURIComponent(key.replaceAll('.', '%2E'))}/tunnel`, apiUrl);
|
|
10
|
-
if (endpoint.protocol !== 'https:' && endpoint.protocol !== 'http:') {
|
|
11
|
-
return yield* Effect.fail(new Error('Temper API URL must use HTTP or HTTPS.'));
|
|
12
|
-
}
|
|
13
|
-
endpoint.protocol = endpoint.protocol === 'https:' ? 'wss:' : 'ws:';
|
|
14
|
-
return endpoint.href;
|
|
15
|
-
});
|
|
16
|
-
const unavailable = () => new ResourcesUnavailableError({ message: `${TOKEN_NOT_PUBLISHED} No usable token within 10 s.` });
|
|
17
|
-
/**
|
|
18
|
-
* Current runtime authorization for a PostgreSQL tunnel; never cache its token. No database client is loaded.
|
|
19
|
-
* A token provider that publishes no usable token within 10 s rejects with `ResourcesUnavailableError`.
|
|
20
|
-
*/
|
|
21
|
-
export async function getDatabaseTunnelAuthorization(key) {
|
|
22
|
-
const authorization = Effect.gen(function* () {
|
|
23
|
-
const url = yield* databaseTunnelUrl(key).pipe(
|
|
24
|
-
// The legacy message for a missing API URL, instead of Effect's ConfigError.
|
|
25
|
-
Effect.catchTag('ConfigError', () => Effect.fail(new Error('UNNBOUND_API_URL is not defined.'))));
|
|
26
|
-
const tokens = yield* makeRuntimeTokens;
|
|
27
|
-
const token = yield* tokens.current.pipe(Effect.timeoutOrElse({ duration: TOKEN_WAIT, orElse: () => Effect.fail(unavailable()) }), Effect.catchIf((error) => error._tag === 'ResourcesUnauthorizedError' && error.message === TOKEN_NOT_PUBLISHED, () => Effect.fail(unavailable())));
|
|
28
|
-
return { url, token };
|
|
29
|
-
});
|
|
30
|
-
const exit = await Effect.runPromiseExit(authorization.pipe(Effect.provide(ConfigProvider.layer(ConfigProvider.fromEnvRecord(process.env, { preserveEmptyStrings: true })))));
|
|
31
|
-
if (Exit.isSuccess(exit))
|
|
32
|
-
return exit.value;
|
|
33
|
-
throw Cause.squash(exit.cause);
|
|
34
|
-
}
|
|
35
|
-
//# sourceMappingURL=DatabaseTunnelAuthorization.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"DatabaseTunnelAuthorization.js","sourceRoot":"","sources":["../src/DatabaseTunnelAuthorization.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,cAAc,EAAE,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,QAAQ,CAAC;AAC/E,OAAO,EAAE,yBAAyB,EAAE,MAAM,sBAAsB,CAAC;AACjE,OAAO,EAAE,iBAAiB,EAAE,mBAAmB,EAAE,MAAM,qBAAqB,CAAC;AAE7E,+GAA+G;AAC/G,MAAM,UAAU,GAAG,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;AAExC,mHAAmH;AACnH,MAAM,CAAC,MAAM,iBAAiB,GAAG,CAAC,GAAW,EAAE,EAAE,CAC/C,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC;IAClB,MAAM,MAAM,GAAG,KAAK,CAAC,CAAC,MAAM,CAAC,cAAc,CAAC,kBAAkB,CAAC,CAAC;IAChE,MAAM,QAAQ,GAAG,IAAI,GAAG,CAAC,0BAA0B,kBAAkB,CAAC,GAAG,CAAC,UAAU,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC;IACpH,IAAI,QAAQ,CAAC,QAAQ,KAAK,QAAQ,IAAI,QAAQ,CAAC,QAAQ,KAAK,OAAO,EAAE,CAAC;QACpE,OAAO,KAAK,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,KAAK,CAAC,wCAAwC,CAAC,CAAC,CAAC;IACjF,CAAC;IACD,QAAQ,CAAC,QAAQ,GAAG,QAAQ,CAAC,QAAQ,KAAK,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC;IACpE,OAAO,QAAQ,CAAC,IAAI,CAAC;AACvB,CAAC,CAAC,CAAC;AAEL,MAAM,WAAW,GAAG,GAAG,EAAE,CACvB,IAAI,yBAAyB,CAAC,EAAE,OAAO,EAAE,GAAG,mBAAmB,+BAA+B,EAAE,CAAC,CAAC;AAEpG;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,8BAA8B,CAAC,GAAW;IAC9D,MAAM,aAAa,GAAG,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC;QACxC,MAAM,GAAG,GAAG,KAAK,CAAC,CAAC,iBAAiB,CAAC,GAAG,CAAC,CAAC,IAAI;QAC5C,6EAA6E;QAC7E,MAAM,CAAC,QAAQ,CAAC,aAAa,EAAE,GAAG,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,KAAK,CAAC,kCAAkC,CAAC,CAAC,CAAC,CACjG,CAAC;QACF,MAAM,MAAM,GAAG,KAAK,CAAC,CAAC,iBAAiB,CAAC;QACxC,MAAM,KAAK,GAAG,KAAK,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,CACtC,MAAM,CAAC,aAAa,CAAC,EAAE,QAAQ,EAAE,UAAU,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,EAAE,CAAC,EACxF,MAAM,CAAC,OAAO,CACZ,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,IAAI,KAAK,4BAA4B,IAAI,KAAK,CAAC,OAAO,KAAK,mBAAmB,EAC/F,GAAG,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,CACjC,CACF,CAAC;QACF,OAAO,EAAE,GAAG,EAAE,KAAK,EAAE,CAAC;IACxB,CAAC,CAAC,CAAC;IACH,MAAM,IAAI,GAAG,MAAM,MAAM,CAAC,cAAc,CACtC,aAAa,CAAC,IAAI,CAChB,MAAM,CAAC,OAAO,CAAC,cAAc,CAAC,KAAK,CAAC,cAAc,CAAC,aAAa,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,oBAAoB,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAChH,CACF,CAAC;IACF,IAAI,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC;QAAE,OAAO,IAAI,CAAC,KAAK,CAAC;IAC5C,MAAM,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;AACjC,CAAC"}
|
package/dist/ExpiringMap.d.ts
DELETED
|
@@ -1,21 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* A read drops an expired entry; a write sweeps all expired entries at most once per sweep interval. At `maxEntries`, a
|
|
3
|
-
* write evicts one entry in this order: an expired entry, the least recently used entry outside its stale window, then
|
|
4
|
-
* the least recently used entry inside it. Losing a fresh entry costs one re-fetch; losing a stale-window entry during
|
|
5
|
-
* an outage fails the read that needed it.
|
|
6
|
-
*/
|
|
7
|
-
export declare class ExpiringMap<V> {
|
|
8
|
-
private readonly maxEntries;
|
|
9
|
-
private readonly sweepIntervalMs;
|
|
10
|
-
private readonly entries;
|
|
11
|
-
private nextSweepAt;
|
|
12
|
-
constructor(maxEntries: number, sweepIntervalMs?: number);
|
|
13
|
-
get(key: string, now: number): V | undefined;
|
|
14
|
-
peek(key: string): V | undefined;
|
|
15
|
-
extend(key: string, until: number, now: number): void;
|
|
16
|
-
set(key: string, value: V, expiresAt: number, now: number, staleFrom?: number): void;
|
|
17
|
-
delete(key: string): void;
|
|
18
|
-
get size(): number;
|
|
19
|
-
private evictionCandidate;
|
|
20
|
-
}
|
|
21
|
-
//# sourceMappingURL=ExpiringMap.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"ExpiringMap.d.ts","sourceRoot":"","sources":["../src/ExpiringMap.ts"],"names":[],"mappings":"AAWA;;;;;GAKG;AACH,qBAAa,WAAW,CAAC,CAAC;IAKtB,OAAO,CAAC,QAAQ,CAAC,UAAU;IAC3B,OAAO,CAAC,QAAQ,CAAC,eAAe;IALlC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAA+B;IACvD,OAAO,CAAC,WAAW,CAAK;IAExB,YACmB,UAAU,EAAE,MAAM,EAClB,eAAe,SAA4B,EAC1D;IAEJ,GAAG,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,CAAC,GAAG,SAAS,CAQ3C;IAGD,IAAI,CAAC,GAAG,EAAE,MAAM,GAAG,CAAC,GAAG,SAAS,CAE/B;IAGD,MAAM,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,IAAI,CAKpD;IAGD,GAAG,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,EAAE,SAAS,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,SAAS,SAAY,GAAG,IAAI,CActF;IAED,MAAM,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,CAExB;IAED,IAAI,IAAI,IAAI,MAAM,CAEjB;IAGD,OAAO,CAAC,iBAAiB;CAU1B"}
|
package/dist/ExpiringMap.js
DELETED
|
@@ -1,79 +0,0 @@
|
|
|
1
|
-
// A port of `@ontemper/resources` `expiring-map.ts`, so the promise `env` evicts as the legacy resolver does.
|
|
2
|
-
const DEFAULT_SWEEP_INTERVAL_MS = 60_000;
|
|
3
|
-
/**
|
|
4
|
-
* A read drops an expired entry; a write sweeps all expired entries at most once per sweep interval. At `maxEntries`, a
|
|
5
|
-
* write evicts one entry in this order: an expired entry, the least recently used entry outside its stale window, then
|
|
6
|
-
* the least recently used entry inside it. Losing a fresh entry costs one re-fetch; losing a stale-window entry during
|
|
7
|
-
* an outage fails the read that needed it.
|
|
8
|
-
*/
|
|
9
|
-
export class ExpiringMap {
|
|
10
|
-
maxEntries;
|
|
11
|
-
sweepIntervalMs;
|
|
12
|
-
entries = new Map();
|
|
13
|
-
nextSweepAt = 0;
|
|
14
|
-
constructor(maxEntries, sweepIntervalMs = DEFAULT_SWEEP_INTERVAL_MS) {
|
|
15
|
-
this.maxEntries = maxEntries;
|
|
16
|
-
this.sweepIntervalMs = sweepIntervalMs;
|
|
17
|
-
}
|
|
18
|
-
get(key, now) {
|
|
19
|
-
const entry = this.entries.get(key);
|
|
20
|
-
if (!entry)
|
|
21
|
-
return undefined;
|
|
22
|
-
this.entries.delete(key);
|
|
23
|
-
if (entry.expiresAt <= now)
|
|
24
|
-
return undefined;
|
|
25
|
-
// Map iteration follows insertion order, so re-inserting a hit makes the first key the least recently used.
|
|
26
|
-
this.entries.set(key, entry);
|
|
27
|
-
return entry.value;
|
|
28
|
-
}
|
|
29
|
-
// The value without a recency touch or an expiry check, for a caller that only compares it before deleting it.
|
|
30
|
-
peek(key) {
|
|
31
|
-
return this.entries.get(key)?.value;
|
|
32
|
-
}
|
|
33
|
-
// Keeps a live entry that is never served stale at least until `until`, without a recency touch; never shortens it.
|
|
34
|
-
extend(key, until, now) {
|
|
35
|
-
const entry = this.entries.get(key);
|
|
36
|
-
if (!entry || entry.expiresAt <= now || until <= entry.expiresAt)
|
|
37
|
-
return;
|
|
38
|
-
entry.expiresAt = until;
|
|
39
|
-
entry.staleFrom = until;
|
|
40
|
-
}
|
|
41
|
-
// `staleFrom` marks when the entry enters its stale window; omit it for an entry that is never served stale.
|
|
42
|
-
set(key, value, expiresAt, now, staleFrom = expiresAt) {
|
|
43
|
-
this.entries.delete(key);
|
|
44
|
-
if (now >= this.nextSweepAt) {
|
|
45
|
-
for (const [candidate, entry] of this.entries) {
|
|
46
|
-
if (entry.expiresAt <= now)
|
|
47
|
-
this.entries.delete(candidate);
|
|
48
|
-
}
|
|
49
|
-
this.nextSweepAt = now + this.sweepIntervalMs;
|
|
50
|
-
}
|
|
51
|
-
while (this.entries.size >= this.maxEntries) {
|
|
52
|
-
const victim = this.evictionCandidate(now);
|
|
53
|
-
if (victim === undefined)
|
|
54
|
-
break;
|
|
55
|
-
this.entries.delete(victim);
|
|
56
|
-
}
|
|
57
|
-
this.entries.set(key, { value, expiresAt, staleFrom });
|
|
58
|
-
}
|
|
59
|
-
delete(key) {
|
|
60
|
-
this.entries.delete(key);
|
|
61
|
-
}
|
|
62
|
-
get size() {
|
|
63
|
-
return this.entries.size;
|
|
64
|
-
}
|
|
65
|
-
// One pass in least-recently-used order; the scan runs only when the map is full.
|
|
66
|
-
evictionCandidate(now) {
|
|
67
|
-
let outsideStaleWindow;
|
|
68
|
-
let first;
|
|
69
|
-
for (const [candidate, entry] of this.entries) {
|
|
70
|
-
if (entry.expiresAt <= now)
|
|
71
|
-
return candidate;
|
|
72
|
-
first ??= candidate;
|
|
73
|
-
if (outsideStaleWindow === undefined && now < entry.staleFrom)
|
|
74
|
-
outsideStaleWindow = candidate;
|
|
75
|
-
}
|
|
76
|
-
return outsideStaleWindow ?? first;
|
|
77
|
-
}
|
|
78
|
-
}
|
|
79
|
-
//# sourceMappingURL=ExpiringMap.js.map
|