lambder 11.1.1 → 13.0.1
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/CHANGELOG.md +217 -0
- package/README.md +25 -15
- package/dist/api/LambderApiAnswer.d.ts +7 -0
- package/dist/api/LambderApiDeclarations.d.ts +194 -0
- package/dist/api/LambderApiDeclarations.js +52 -0
- package/dist/api/LambderApiDefinition.d.ts +1 -1
- package/dist/api/LambderApiEnvelope.js +4 -1
- package/dist/api/LambderApiGuards.d.ts +21 -22
- package/dist/api/LambderApiGuards.js +1 -1
- package/dist/api/LambderApiRateLimits.d.ts +19 -19
- package/dist/api/LambderApiRateLimits.js +1 -1
- package/dist/api/LambderApiRefusals.d.ts +22 -0
- package/dist/api/LambderApiRefusals.js +13 -0
- package/dist/api/LambderApiRequest.d.ts +15 -6
- package/dist/api/LambderApiRequest.js +8 -9
- package/dist/build/generateApiFiles.d.ts +60 -0
- package/dist/build/generateApiFiles.js +85 -0
- package/dist/build/generatedTables.d.ts +2 -1
- package/dist/build/generatedTables.js +1 -1
- package/dist/build.d.ts +4 -1
- package/dist/build.js +3 -1
- package/dist/client/LambderCaller.d.ts +36 -23
- package/dist/client/LambderCaller.js +88 -67
- package/dist/client/lambderFetchTransport.js +2 -1
- package/dist/client.d.ts +3 -1
- package/dist/client.js +2 -0
- package/dist/core/Lambder.d.ts +232 -92
- package/dist/core/Lambder.js +400 -103
- package/dist/core/LambderCallSummary.d.ts +43 -0
- package/dist/core/LambderCallSummary.js +10 -0
- package/dist/core/LambderContext.d.ts +15 -2
- package/dist/core/LambderContext.js +32 -9
- package/dist/core/LambderCreateOptions.d.ts +78 -64
- package/dist/core/LambderCreateOptions.js +39 -21
- package/dist/core/LambderInvocationScope.d.ts +25 -0
- package/dist/core/LambderInvocationScope.js +21 -0
- package/dist/core/LambderResponse.d.ts +11 -0
- package/dist/core/LambderResponse.js +12 -0
- package/dist/core/LambderResponseBuilder.js +5 -1
- package/dist/index.d.ts +13 -7
- package/dist/index.js +3 -1
- package/dist/invoke/LambderInvokeCaller.d.ts +48 -31
- package/dist/invoke/LambderInvokeCaller.js +110 -94
- package/dist/invoke/LambderLambdaEvent.d.ts +2 -1
- package/dist/invoke/LambderLambdaEvent.js +8 -3
- package/dist/invoke/lambderHandlerTransport.js +2 -1
- package/dist/mock/LambderMockApp.d.ts +39 -33
- package/dist/mock/LambderMockApp.js +66 -55
- package/dist/mock/LambderMockCreateOptions.d.ts +8 -10
- package/dist/mock/LambderMockTypes.d.ts +44 -7
- package/dist/mock/lambderMockInvokeTransport.d.ts +9 -1
- package/dist/mock/lambderMockInvokeTransport.js +15 -7
- package/dist/mock/lambderMockMswHandler.js +8 -4
- package/dist/mock.d.ts +2 -2
- package/dist/session/LambderSessionManager.d.ts +46 -3
- package/dist/session/LambderSessionManager.js +62 -11
- package/dist/shared/LambderI18n.js +49 -4
- package/dist/shared/contracts/LambderRateLimiter.d.ts +2 -2
- package/dist/shared/contracts/LambderRateLimiter.js +2 -2
- package/dist/shared/transport/LambderApiTransport.d.ts +3 -2
- package/dist/shared/transport/LambderApiTransport.js +2 -3
- package/dist/shared/transport/lambderCookieJarTransport.js +2 -1
- package/dist/shared/util/LambderInvocationScope.d.ts +10 -0
- package/dist/shared/util/LambderInvocationScope.js +5 -0
- package/dist/shared/util/LambderNamedMaps.d.ts +22 -0
- package/dist/shared/util/LambderNamedMaps.js +19 -0
- package/dist/shared/util/LambderTypeUtilities.d.ts +1 -1
- package/dist/shared/wire/LambderApiContract.d.ts +4 -18
- package/dist/shared/wire/LambderApiContract.js +1 -1
- package/dist/shared/wire/LambderApiGroupCalls.d.ts +31 -0
- package/dist/shared/wire/LambderApiGroupCalls.js +68 -0
- package/dist/shared/wire/LambderApiNames.d.ts +55 -0
- package/dist/shared/wire/LambderApiNames.js +81 -0
- package/dist/shared/wire/LambderCallOutcome.d.ts +27 -0
- package/dist/shared/wire/LambderCallOutcome.js +47 -0
- package/dist/shared/wire/LambderInvokeApiId.d.ts +10 -0
- package/dist/shared/wire/LambderInvokeApiId.js +10 -0
- package/dist/shared/wire/LambderUploadSchemas.js +2 -1
- package/dist/stores/LambderDdbRateLimiter.d.ts +24 -16
- package/dist/stores/LambderDdbRateLimiter.js +64 -45
- package/dist/stores/LambderMemoryRateLimiter.d.ts +9 -4
- package/dist/stores/LambderMemoryRateLimiter.js +20 -15
- package/dist/testing/LambderTestApp.d.ts +18 -5
- package/dist/testing/LambderTestApp.js +21 -5
- package/dist/testing/LambderTestVisitor.d.ts +16 -8
- package/dist/testing/LambderTestVisitor.js +33 -25
- package/package.json +1 -1
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { outcomeOfEnvelope } from "../shared/wire/LambderCallOutcome.js";
|
|
1
2
|
import { LambderResponse } from "./LambderResponse.js";
|
|
2
3
|
import { plainRefusalEnvelope } from "../api/LambderApiEnvelope.js";
|
|
3
4
|
/**
|
|
@@ -145,7 +146,10 @@ export default class LambderResponseBuilder {
|
|
|
145
146
|
* request accumulated unless the config names its own.
|
|
146
147
|
*/
|
|
147
148
|
apiRefusal(config, options) {
|
|
148
|
-
|
|
149
|
+
const envelope = plainRefusalEnvelope(this.apiVersion, config, "res.apiRefusal()", this.ctx?.logList);
|
|
150
|
+
const response = this.json(envelope, options);
|
|
151
|
+
response.callOutcome = outcomeOfEnvelope(envelope, response.statusCode);
|
|
152
|
+
return response;
|
|
149
153
|
}
|
|
150
154
|
;
|
|
151
155
|
}
|
package/dist/index.d.ts
CHANGED
|
@@ -2,8 +2,12 @@ import Lambder from './core/Lambder.js';
|
|
|
2
2
|
export default Lambder;
|
|
3
3
|
export { initLambder } from './core/Lambder.js';
|
|
4
4
|
export type { LambderCreatedHook } from './core/Lambder.js';
|
|
5
|
+
export type { LambderAppTypes, LambderPlainAppTypes, LambderApiDeclaration, LambderApiDeclarations, LambderApiGroup, LambderLazyApiGroup, LambderRegistrableApiGroup, LambderApiModeOf, LambderEntryOf, LambderContractOfGroups, } from './api/LambderApiDeclarations.js';
|
|
6
|
+
export { apiCallPath, apiNameOfCallPath, splitApiName, isGroupName, isActionName, LAMBDER_API_NAME_SEGMENT, LAMBDER_CALLER_MEMBER_NAMES, LAMBDER_RESERVED_GROUP_NAMES, LAMBDER_RESERVED_ACTION_NAMES, } from './shared/wire/LambderApiNames.js';
|
|
7
|
+
export type { LambderReservedGroupName, LambderReservedActionName } from './shared/wire/LambderApiNames.js';
|
|
8
|
+
export type { LambderContractGroupsOf, LambderContractNamesInGroup, LambderContractActionOf } from './shared/wire/LambderApiGroupCalls.js';
|
|
5
9
|
export { default as LambderCaller } from "./client/LambderCaller.js";
|
|
6
|
-
export type { LambderApiOutcome, LambderApiFailureReason, LambderValidationError, LambderCallOptions, LambderCallerOptions, LambderGuardInputsProvider, LambderProvidedGuardInputs, LambderLogListHandler } from "./client/LambderCaller.js";
|
|
10
|
+
export type { LambderApiOutcome, LambderApiFailureReason, LambderValidationError, LambderCallOptions, LambderCallerOptions, LambderGuardInputsProvider, LambderProvidedGuardInputs, LambderLogListHandler, LambderCallerEndpoint, LambderCallerGroupCalls, LambderCallerMembers } from "./client/LambderCaller.js";
|
|
7
11
|
export { createIdempotencyKey, createIdempotencyKeyScope } from "./shared/wire/LambderIdempotencyKeyScope.js";
|
|
8
12
|
export type { LambderIdempotencyKeyScope } from "./shared/wire/LambderIdempotencyKeyScope.js";
|
|
9
13
|
export { lambderFetchTransport } from "./client/lambderFetchTransport.js";
|
|
@@ -20,7 +24,7 @@ export { constantTimeEquals } from "./shared/util/LambderTextDigest.js";
|
|
|
20
24
|
export type { LambderStoredCookie } from "./shared/transport/LambderCookieJar.js";
|
|
21
25
|
export { lambderHandlerTransport } from "./invoke/lambderHandlerTransport.js";
|
|
22
26
|
export type { LambderHandlerTransportOptions } from "./invoke/lambderHandlerTransport.js";
|
|
23
|
-
export { synthesizeLambdaHttpEvent, decodeLambdaHttpResult, localLambdaContext, LAMBDER_INVOKE_HEADER, LAMBDER_INVOKED_BY_HEADER, LAMBDER_INVOKE_PROTOCOL, } from "./invoke/LambderLambdaEvent.js";
|
|
27
|
+
export { synthesizeLambdaHttpEvent, decodeLambdaHttpResult, localLambdaContext, LAMBDER_INVOKE_HEADER, LAMBDER_INVOKED_BY_HEADER, LAMBDER_PARENT_REQUEST_HEADER, LAMBDER_INVOKE_PROTOCOL, } from "./invoke/LambderLambdaEvent.js";
|
|
24
28
|
export type { LambderSynthesizedRequest, LambderLambdaHttpResult, LambderInvokeSession } from "./invoke/LambderLambdaEvent.js";
|
|
25
29
|
export { LambderApiPipeline } from "./api/LambderApiPipeline.js";
|
|
26
30
|
export type { LambderApiPipelineOptions, LambderApiSessionsConfig, LambderApiInputRefusal, LambderApiRunResult, LambderApiExec } from "./api/LambderApiPipeline.js";
|
|
@@ -46,7 +50,7 @@ export { checkedRefusal } from "./api/LambderApiRefusals.js";
|
|
|
46
50
|
export { LambderInvokeError, isLambderInvokeError } from "./invoke/LambderInvokeOutcome.js";
|
|
47
51
|
export type { LambderInvokeOutcome, LambderInvokeFailure, LambderInvokeValidationFailure, LambderInvokeCrashFailure, LambderInvokePayloadTooLargeFailure, LambderInvokeEnvelopeFailure, LambderInvokeDeliveryFailure, LambderInvokeFailureReason, LambderInvokeFunctionError, } from "./invoke/LambderInvokeOutcome.js";
|
|
48
52
|
export { default as LambderInvokeCaller, LAMBDER_INVOKE_MAX_EVENT_BYTES, } from "./invoke/LambderInvokeCaller.js";
|
|
49
|
-
export type { LambderInvokeCallerOptions, LambderInvokeCallOptions, LambderInvokeFailureHandler, LambderInvokeLogListHandler, LambderInvokeTransport, LambderInvokeTransportResult, LambderInvokeRequestInit, LambderInvokeEventInit, } from "./invoke/LambderInvokeCaller.js";
|
|
53
|
+
export type { LambderInvokeCallerOptions, LambderInvokeCallOptions, LambderInvokeFailureHandler, LambderInvokeCallCheck, LambderInvokeLogListHandler, LambderInvokeTransport, LambderInvokeTransportResult, LambderInvokeRequestInit, LambderInvokeEventInit, LambderInvokeEndpoint, LambderInvokeGroupCalls, } from "./invoke/LambderInvokeCaller.js";
|
|
50
54
|
export { describeCrash, errorFromCrashDetail } from "./shared/wire/LambderCrashDetail.js";
|
|
51
55
|
export type { LambderCrashDetail, LambderCrashCause } from "./shared/wire/LambderCrashDetail.js";
|
|
52
56
|
export { LambderApiRefusal, isLambderApiRefusal, isLambderRefusalCode, refuse, refusalMessageOf, LAMBDER_REFUSAL_CODES } from "./shared/wire/LambderApiRefusal.js";
|
|
@@ -96,7 +100,7 @@ export { refuseUnacceptedUpload } from "./shared/wire/LambderUploadRefusal.js";
|
|
|
96
100
|
export { LambderUploadRunner, LambderUploadError } from "./client/LambderUploadRunner.js";
|
|
97
101
|
export type { LambderUploadRunnerOptions, LambderUploadProgress, LambderUploadPhase, LambderUploadFailureReason } from "./client/LambderUploadRunner.js";
|
|
98
102
|
export type { LambderSessionCookieOptions } from "./session/LambderSessionController.js";
|
|
99
|
-
export type { LambderCreatedSession, LambderSessionDataRefreshConfig } from "./session/LambderSessionManager.js";
|
|
103
|
+
export type { LambderCreatedSession, LambderSessionDataOptions, LambderSessionDataRefreshConfig } from "./session/LambderSessionManager.js";
|
|
100
104
|
export { resolveCompressionOption, LAMBDER_ENCODINGS } from "./shared/wire/LambderCompressionOption.js";
|
|
101
105
|
export type { LambderCompressionOption, LambderCompressionSettings, LambderCompressionSettingsBase, LambderEncoding, } from "./shared/wire/LambderCompressionOption.js";
|
|
102
106
|
export { compressText, restoreBytes, restoreText, LambderCompressionError, LAMBDER_RESTORE_FAILURES, } from "./shared/wire/LambderCompressionCodec.js";
|
|
@@ -130,7 +134,7 @@ export { lambderGuard, lambderRateLimitKey } from "./core/LambderPolicyBuilders.
|
|
|
130
134
|
export { lambderGuardBuilder } from "./api/LambderApiGuards.js";
|
|
131
135
|
export type { LambderGuardBuilder, LambderApiGuard, LambderGuardMeta, LambderGuardMetaMap, LambderGuardRunAt, LambderAllowedGuardNames, LambderGuardNamesInputLacks, LambderParamlessGuardNames, LambderGuardsOption, LambderGuardDataOf, LambderGuardInputsOf, LambderGuardRefusals, LambderGuardRefusalNamesOf, } from "./api/LambderApiGuards.js";
|
|
132
136
|
export { LambderApiRefusalValidationError } from "./api/LambderApiRefusals.js";
|
|
133
|
-
export type { LambderRefusalDeclaration, LambderRefusalVocabulary, LambderApiAllowedRefusal, LambderApiAllowedRefusals, LambderEndpointRefusals, LambderRefusalsOption, LambderRefusalNamesIn, LambderHandlerRefusalsOf, LambderWireRefusalsOf, } from "./api/LambderApiRefusals.js";
|
|
137
|
+
export type { LambderRefusalDeclaration, LambderRefusalVocabulary, LambderRefusalVocabularyOption, LambderMergedRefusalVocabulary, LambderApiAllowedRefusal, LambderApiAllowedRefusals, LambderEndpointRefusals, LambderRefusalsOption, LambderRefusalNamesIn, LambderHandlerRefusalsOf, LambderWireRefusalsOf, } from "./api/LambderApiRefusals.js";
|
|
134
138
|
export { lambderRateLimitKeyBuilder, rateLimitRefusal, DEFAULT_RATE_LIMIT_REFUSAL } from "./api/LambderApiRateLimits.js";
|
|
135
139
|
export type { LambderRateLimitKeyBuilder } from "./api/LambderApiRateLimits.js";
|
|
136
140
|
export type { LambderContextRateLimit, LambderContextRateLimitCheck, LambderRateLimitCheckResult, LambderChargeablePolicyNames, LambderChargeKeyArgs, LambderRateLimitKeyFn, LambderRateLimitPer, LambderRateLimitBudget, LambderRateLimitChargeAt, LambderApiRateLimitPolicyConfig, LambderApiRateLimitsConfig, LambderAllowedPolicyNames, LambderPolicyNamesInputLacks, LambderRateLimitOption, } from "./api/LambderApiRateLimits.js";
|
|
@@ -140,12 +144,14 @@ export { apiGuardParam } from "./shared/wire/LambderApiOptionEntries.js";
|
|
|
140
144
|
export type { LambderApiOptionEntries, LambderApiOptionEntry, LambderRateLimitPolicyEntry, LambderGuardDeclarationEntry, LambderApisWithGuard, LambderApisGuardedBy, LambderApisWithMode, LambderGuardParamOf, } from "./shared/wire/LambderApiOptionEntries.js";
|
|
141
145
|
export { createLambderI18n } from "./shared/LambderI18n.js";
|
|
142
146
|
export type { LambderLanguageMeta, LambderI18nConfig, LambderI18nInstance, LambderI18nTranslator, LambderI18nExtractParams, LambderI18nDictionaryLoader, LambderI18nCodes, LambderI18nKeys, LambderI18nTranslatorFor, } from "./shared/LambderI18n.js";
|
|
143
|
-
export type { LambderApiContractShape, LambderApiMode, LambderApiEnvelopeBody, LambderApiSuccessEnvelope, LambderApiRefusalEnvelope, LambderRefusalEnvelopeFields, LambderApiRefusalConfig, LambderContractEntry,
|
|
147
|
+
export type { LambderApiContractShape, LambderApiMode, LambderApiEnvelopeBody, LambderApiSuccessEnvelope, LambderApiRefusalEnvelope, LambderRefusalEnvelopeFields, LambderApiRefusalConfig, LambderContractEntry, LambderGuardNamesIn, LambderContractMode, LambderContractKeysWithMode, LambderContractKeysWithGuard, LambderJsonOf, LambderContractRefusalsOf, LambderContractRefusalMessage, LambderContractRefusals, LambderContractAnyRefusalMessage, LambderContractGuardsOf, LambderContractGuardNames, LambderContractGuardInputsOf, LambderContractGuardInput, LambderContractGuardInputNames, LambderContractRateLimitOf, LambderContractRateLimitNames, LambderContractIdempotencyOf, } from "./shared/wire/LambderApiContract.js";
|
|
144
148
|
export type { LambderRenderContext, LambderSessionRenderContext, LambderHttpEvent, LambderHttpEventFormat } from "./core/LambderContext.js";
|
|
145
149
|
export type { LambderApiAnswerOutcome, LambderApiSuccessOutcome, LambderApiCallFailure, LambderApiValidationFailure, LambderApiEnvelopeFailure, LambderApiHttpAnswer, } from "./shared/wire/LambderApiOutcome.js";
|
|
146
150
|
export { resolveApiOutcome } from "./shared/wire/LambderApiOutcome.js";
|
|
147
151
|
export { createContext, isV2HttpEvent } from "./core/LambderContext.js";
|
|
148
|
-
export type { LambderContextOptions } from "./core/LambderContext.js";
|
|
152
|
+
export type { LambderContextOptions, LambderOriginProof } from "./core/LambderContext.js";
|
|
153
|
+
export type { LambderCallSummary, LambderCallSummaryOption } from "./core/LambderCallSummary.js";
|
|
154
|
+
export type { LambderCallOutcome, LambderCallOutcomeHint } from "./shared/wire/LambderCallOutcome.js";
|
|
149
155
|
export { COMPRESSED_PAYLOAD_GZ_FIELD, COMPRESSED_PAYLOAD_BR_FIELD, COMPRESSED_PAYLOAD_BYTES_FIELD, DEFAULT_REQUEST_COMPRESSION_SETTINGS, DEFAULT_MAX_RESTORED_PAYLOAD_BYTES, DEFAULT_INVOKE_REQUEST_COMPRESSION_SETTINGS, compressPayloadBrotli, } from "./shared/wire/LambderRequestPayload.js";
|
|
150
156
|
export type { LambderCompressedGzipPayload, LambderCompressedBrotliPayload, LambderRequestCompressionOption, LambderRequestCompressionSettings, } from "./shared/wire/LambderRequestPayload.js";
|
|
151
157
|
export { serializeCookie, serializeClearCookie, resolveCookieDomain } from "./shared/wire/LambderCookie.js";
|
package/dist/index.js
CHANGED
|
@@ -1,6 +1,8 @@
|
|
|
1
1
|
import Lambder from './core/Lambder.js';
|
|
2
2
|
export default Lambder;
|
|
3
3
|
export { initLambder } from './core/Lambder.js';
|
|
4
|
+
// How an endpoint is named, and where a call to it goes.
|
|
5
|
+
export { apiCallPath, apiNameOfCallPath, splitApiName, isGroupName, isActionName, LAMBDER_API_NAME_SEGMENT, LAMBDER_CALLER_MEMBER_NAMES, LAMBDER_RESERVED_GROUP_NAMES, LAMBDER_RESERVED_ACTION_NAMES, } from './shared/wire/LambderApiNames.js';
|
|
4
6
|
export { default as LambderCaller } from "./client/LambderCaller.js";
|
|
5
7
|
export { createIdempotencyKey, createIdempotencyKeyScope } from "./shared/wire/LambderIdempotencyKeyScope.js";
|
|
6
8
|
// Transports: how a caller reaches a server (fetch in production, a handler in-process for tests, a cookie jar over either)
|
|
@@ -15,7 +17,7 @@ export { LambderBackoffTimer } from "./shared/util/LambderBackoffTimer.js";
|
|
|
15
17
|
export { LambderSignedClaims, keyedDigest, randomSecret } from "./shared/util/LambderSignedClaims.js";
|
|
16
18
|
export { constantTimeEquals } from "./shared/util/LambderTextDigest.js";
|
|
17
19
|
export { lambderHandlerTransport } from "./invoke/lambderHandlerTransport.js";
|
|
18
|
-
export { synthesizeLambdaHttpEvent, decodeLambdaHttpResult, localLambdaContext, LAMBDER_INVOKE_HEADER, LAMBDER_INVOKED_BY_HEADER, LAMBDER_INVOKE_PROTOCOL, } from "./invoke/LambderLambdaEvent.js";
|
|
20
|
+
export { synthesizeLambdaHttpEvent, decodeLambdaHttpResult, localLambdaContext, LAMBDER_INVOKE_HEADER, LAMBDER_INVOKED_BY_HEADER, LAMBDER_PARENT_REQUEST_HEADER, LAMBDER_INVOKE_PROTOCOL, } from "./invoke/LambderLambdaEvent.js";
|
|
19
21
|
// The API core: the request, answer, envelope and pipeline both the server and the mock runtime run
|
|
20
22
|
export { LambderApiPipeline } from "./api/LambderApiPipeline.js";
|
|
21
23
|
export { readApiEnvelope, restoreCompressedPayload } from "./api/LambderApiRequest.js";
|
|
@@ -20,6 +20,7 @@
|
|
|
20
20
|
* LambderInvokeCaller.localTransport runs a callee's handler in-process for
|
|
21
21
|
* tests.
|
|
22
22
|
*/
|
|
23
|
+
import { type LambderContractActionOf, type LambderContractGroupsOf, type LambderContractNamesInGroup } from "../shared/wire/LambderApiGroupCalls.js";
|
|
23
24
|
import type { APIGatewayProxyEventV2, Context } from "aws-lambda";
|
|
24
25
|
import { type LambderInvokeFailure, type LambderInvokeOutcome } from "./LambderInvokeOutcome.js";
|
|
25
26
|
import { type LambderApiSignatureMap } from "../shared/wire/LambderApiSignatureMap.js";
|
|
@@ -52,6 +53,10 @@ export type LambderInvokeTransport = (event: APIGatewayProxyEventV2, options: {
|
|
|
52
53
|
}) => Promise<LambderInvokeTransportResult>;
|
|
53
54
|
/** The onLogList option: each answer's logList, success or failure, when it has entries. */
|
|
54
55
|
export type LambderInvokeLogListHandler = (apiName: string, logList: unknown[]) => void | Promise<void>;
|
|
56
|
+
/** The beforeCall option: every call, by its endpoint name or `METHOD path`, before anything is built or sent. */
|
|
57
|
+
export type LambderInvokeCallCheck = (name: string, info: {
|
|
58
|
+
functionName: string;
|
|
59
|
+
}) => void;
|
|
55
60
|
/** The onFailure option: every failed call, once, awaited before api() throws or apiOutcome() returns. */
|
|
56
61
|
export type LambderInvokeFailureHandler = (failure: LambderInvokeFailure, info: {
|
|
57
62
|
apiName: string;
|
|
@@ -119,6 +124,15 @@ type LambderInvokeCallerBaseOptions = {
|
|
|
119
124
|
* apiOutcome() never throws.
|
|
120
125
|
*/
|
|
121
126
|
onFailure?: LambderInvokeFailureHandler;
|
|
127
|
+
/**
|
|
128
|
+
* Run before every call, api(), apiOutcome(), a group's call and
|
|
129
|
+
* request() alike, before anything is built or sent: the place for a
|
|
130
|
+
* rule the calling code must keep, such as never calling out while a
|
|
131
|
+
* database transaction is open. What it throws is thrown to the caller,
|
|
132
|
+
* from apiOutcome() too, and is no failure of the callee: nothing was
|
|
133
|
+
* sent, so onFailure is not told.
|
|
134
|
+
*/
|
|
135
|
+
beforeCall?: LambderInvokeCallCheck;
|
|
122
136
|
/** The session token cookie's name, when a session is carried and the callee uses a non-default `tokenCookieKey`. The CSRF value rides in the envelope's `token` field, which has no name to configure. */
|
|
123
137
|
sessionTokenCookieKey?: string;
|
|
124
138
|
/** Replaces the Lambda SDK. */
|
|
@@ -159,26 +173,15 @@ export type LambderInvokeEventInit = {
|
|
|
159
173
|
sessionTokenCookieKey?: string;
|
|
160
174
|
};
|
|
161
175
|
/**
|
|
176
|
+
* The invoke caller itself, before the groups: what LambderInvokeCaller is,
|
|
177
|
+
* less the callee's endpoints by group (LambderInvokeGroupCalls), which the
|
|
178
|
+
* constructor adds.
|
|
179
|
+
*
|
|
162
180
|
* @typeParam TContract - The callee's API contract (`typeof lambder.ApiContract`, imported type-only), for typed names, payloads, results and guard inputs.
|
|
163
181
|
* @typeParam TProvidedGuards - Guard names guardInputsProvider covers; those APIs' options argument becomes optional.
|
|
164
182
|
*/
|
|
165
|
-
|
|
166
|
-
private
|
|
167
|
-
private readonly apiPath;
|
|
168
|
-
private readonly apiVersion?;
|
|
169
|
-
private readonly apiSignatures?;
|
|
170
|
-
private readonly host;
|
|
171
|
-
private readonly requestCompression;
|
|
172
|
-
private readonly maxResponsePayloadBytes;
|
|
173
|
-
private readonly timeoutMs?;
|
|
174
|
-
private readonly onLogList?;
|
|
175
|
-
private readonly onFailure?;
|
|
176
|
-
private readonly guardInputsProvider?;
|
|
177
|
-
private readonly sessionTokenCookieKey;
|
|
178
|
-
private readonly transport;
|
|
179
|
-
private readonly clientConfig;
|
|
180
|
-
private client;
|
|
181
|
-
private sdk;
|
|
183
|
+
declare class LambderInvokeCallerCore<TContract extends LambderApiContractShape = any, TProvidedGuards extends string = never> {
|
|
184
|
+
#private;
|
|
182
185
|
constructor(options: LambderInvokeCallerOptions<TContract, TProvidedGuards>);
|
|
183
186
|
/**
|
|
184
187
|
* The event api() would send for this call, with a plain payload. For
|
|
@@ -195,19 +198,6 @@ export default class LambderInvokeCaller<TContract extends LambderApiContractSha
|
|
|
195
198
|
* completion regardless, but timeoutMs still frees the caller.
|
|
196
199
|
*/
|
|
197
200
|
static localTransport(handler: (event: APIGatewayProxyEventV2, context: Context) => Promise<unknown>, context?: Partial<Context>): LambderInvokeTransport;
|
|
198
|
-
private loadSdk;
|
|
199
|
-
private invokeThroughSdk;
|
|
200
|
-
/** Delivers one event, serialized exactly once; an event over the invoke cap, a rejected transport, or one that answered after the call was given up on, is a failure. */
|
|
201
|
-
private deliverEvent;
|
|
202
|
-
/** Builds the failure and its error, reports it once, and hands it back. */
|
|
203
|
-
private failureOutcome;
|
|
204
|
-
private surfaceLogs;
|
|
205
|
-
/**
|
|
206
|
-
* One call, one outcome. Never throws; api() is what throws. A key scope
|
|
207
|
-
* is told how the attempt ended, as it is on LambderCaller.
|
|
208
|
-
*/
|
|
209
|
-
private dispatch;
|
|
210
|
-
private dispatchAttempt;
|
|
211
201
|
/**
|
|
212
202
|
* Full-fidelity call: resolves to a discriminated LambderInvokeOutcome
|
|
213
203
|
* instead of throwing, for sites that degrade gracefully. The output type
|
|
@@ -231,4 +221,31 @@ export default class LambderInvokeCaller<TContract extends LambderApiContractSha
|
|
|
231
221
|
*/
|
|
232
222
|
request(init: LambderInvokeRequestInit): Promise<LambderLambdaHttpResult>;
|
|
233
223
|
}
|
|
234
|
-
|
|
224
|
+
/**
|
|
225
|
+
* One endpoint of the callee as the invoke caller hands it out on its group:
|
|
226
|
+
* called, it is `api` for that endpoint (the output, or a thrown
|
|
227
|
+
* LambderInvokeError); `.outcome` is `apiOutcome` (the outcome, never
|
|
228
|
+
* throwing).
|
|
229
|
+
*/
|
|
230
|
+
export type LambderInvokeEndpoint<TContract, TName extends keyof TContract & string, TProvidedGuards extends string> = {
|
|
231
|
+
(...args: LambderCallArgs<TContract, TName, TProvidedGuards, LambderInvokeCallOptions>): Promise<LambderContractOutputOf<TContract, TName>>;
|
|
232
|
+
outcome(...args: LambderCallArgs<TContract, TName, TProvidedGuards, LambderInvokeCallOptions>): Promise<LambderInvokeOutcome<LambderContractOutputOf<TContract, TName>, LambderContractRefusalMessage<TContract, TName>>>;
|
|
233
|
+
};
|
|
234
|
+
/** Every endpoint of the callee's contract, by group: `caller.email.send(input)`. */
|
|
235
|
+
export type LambderInvokeGroupCalls<TContract, TProvidedGuards extends string> = {
|
|
236
|
+
readonly [TGroup in LambderContractGroupsOf<TContract>]: {
|
|
237
|
+
readonly [TName in LambderContractNamesInGroup<TContract, TGroup> as LambderContractActionOf<TName>]: LambderInvokeEndpoint<TContract, TName, TProvidedGuards>;
|
|
238
|
+
};
|
|
239
|
+
};
|
|
240
|
+
/**
|
|
241
|
+
* A typed client of another Lambder function, over a direct Lambda invoke:
|
|
242
|
+
* `caller.email.send(input)` for the callee's endpoint `email.send`,
|
|
243
|
+
* `.outcome(input)` for its outcome, and `caller.api("email.send", input)`
|
|
244
|
+
* for code that has the name as a value.
|
|
245
|
+
*/
|
|
246
|
+
type LambderInvokeCaller<TContract extends LambderApiContractShape = any, TProvidedGuards extends string = never> = LambderInvokeCallerCore<TContract, TProvidedGuards> & LambderInvokeGroupCalls<TContract, TProvidedGuards>;
|
|
247
|
+
declare const LambderInvokeCaller: Omit<typeof LambderInvokeCallerCore, "prototype"> & {
|
|
248
|
+
new <TContract extends LambderApiContractShape = any, TProvidedGuards extends string = never>(options: LambderInvokeCallerOptions<TContract, TProvidedGuards>): LambderInvokeCaller<TContract, TProvidedGuards>;
|
|
249
|
+
readonly prototype: LambderInvokeCallerCore<any, any>;
|
|
250
|
+
};
|
|
251
|
+
export default LambderInvokeCaller;
|