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.
Files changed (87) hide show
  1. package/CHANGELOG.md +217 -0
  2. package/README.md +25 -15
  3. package/dist/api/LambderApiAnswer.d.ts +7 -0
  4. package/dist/api/LambderApiDeclarations.d.ts +194 -0
  5. package/dist/api/LambderApiDeclarations.js +52 -0
  6. package/dist/api/LambderApiDefinition.d.ts +1 -1
  7. package/dist/api/LambderApiEnvelope.js +4 -1
  8. package/dist/api/LambderApiGuards.d.ts +21 -22
  9. package/dist/api/LambderApiGuards.js +1 -1
  10. package/dist/api/LambderApiRateLimits.d.ts +19 -19
  11. package/dist/api/LambderApiRateLimits.js +1 -1
  12. package/dist/api/LambderApiRefusals.d.ts +22 -0
  13. package/dist/api/LambderApiRefusals.js +13 -0
  14. package/dist/api/LambderApiRequest.d.ts +15 -6
  15. package/dist/api/LambderApiRequest.js +8 -9
  16. package/dist/build/generateApiFiles.d.ts +60 -0
  17. package/dist/build/generateApiFiles.js +85 -0
  18. package/dist/build/generatedTables.d.ts +2 -1
  19. package/dist/build/generatedTables.js +1 -1
  20. package/dist/build.d.ts +4 -1
  21. package/dist/build.js +3 -1
  22. package/dist/client/LambderCaller.d.ts +36 -23
  23. package/dist/client/LambderCaller.js +88 -67
  24. package/dist/client/lambderFetchTransport.js +2 -1
  25. package/dist/client.d.ts +3 -1
  26. package/dist/client.js +2 -0
  27. package/dist/core/Lambder.d.ts +232 -92
  28. package/dist/core/Lambder.js +400 -103
  29. package/dist/core/LambderCallSummary.d.ts +43 -0
  30. package/dist/core/LambderCallSummary.js +10 -0
  31. package/dist/core/LambderContext.d.ts +15 -2
  32. package/dist/core/LambderContext.js +32 -9
  33. package/dist/core/LambderCreateOptions.d.ts +78 -64
  34. package/dist/core/LambderCreateOptions.js +39 -21
  35. package/dist/core/LambderInvocationScope.d.ts +25 -0
  36. package/dist/core/LambderInvocationScope.js +21 -0
  37. package/dist/core/LambderResponse.d.ts +11 -0
  38. package/dist/core/LambderResponse.js +12 -0
  39. package/dist/core/LambderResponseBuilder.js +5 -1
  40. package/dist/index.d.ts +13 -7
  41. package/dist/index.js +3 -1
  42. package/dist/invoke/LambderInvokeCaller.d.ts +48 -31
  43. package/dist/invoke/LambderInvokeCaller.js +110 -94
  44. package/dist/invoke/LambderLambdaEvent.d.ts +2 -1
  45. package/dist/invoke/LambderLambdaEvent.js +8 -3
  46. package/dist/invoke/lambderHandlerTransport.js +2 -1
  47. package/dist/mock/LambderMockApp.d.ts +39 -33
  48. package/dist/mock/LambderMockApp.js +66 -55
  49. package/dist/mock/LambderMockCreateOptions.d.ts +8 -10
  50. package/dist/mock/LambderMockTypes.d.ts +44 -7
  51. package/dist/mock/lambderMockInvokeTransport.d.ts +9 -1
  52. package/dist/mock/lambderMockInvokeTransport.js +15 -7
  53. package/dist/mock/lambderMockMswHandler.js +8 -4
  54. package/dist/mock.d.ts +2 -2
  55. package/dist/session/LambderSessionManager.d.ts +46 -3
  56. package/dist/session/LambderSessionManager.js +62 -11
  57. package/dist/shared/LambderI18n.js +49 -4
  58. package/dist/shared/contracts/LambderRateLimiter.d.ts +2 -2
  59. package/dist/shared/contracts/LambderRateLimiter.js +2 -2
  60. package/dist/shared/transport/LambderApiTransport.d.ts +3 -2
  61. package/dist/shared/transport/LambderApiTransport.js +2 -3
  62. package/dist/shared/transport/lambderCookieJarTransport.js +2 -1
  63. package/dist/shared/util/LambderInvocationScope.d.ts +10 -0
  64. package/dist/shared/util/LambderInvocationScope.js +5 -0
  65. package/dist/shared/util/LambderNamedMaps.d.ts +22 -0
  66. package/dist/shared/util/LambderNamedMaps.js +19 -0
  67. package/dist/shared/util/LambderTypeUtilities.d.ts +1 -1
  68. package/dist/shared/wire/LambderApiContract.d.ts +4 -18
  69. package/dist/shared/wire/LambderApiContract.js +1 -1
  70. package/dist/shared/wire/LambderApiGroupCalls.d.ts +31 -0
  71. package/dist/shared/wire/LambderApiGroupCalls.js +68 -0
  72. package/dist/shared/wire/LambderApiNames.d.ts +55 -0
  73. package/dist/shared/wire/LambderApiNames.js +81 -0
  74. package/dist/shared/wire/LambderCallOutcome.d.ts +27 -0
  75. package/dist/shared/wire/LambderCallOutcome.js +47 -0
  76. package/dist/shared/wire/LambderInvokeApiId.d.ts +10 -0
  77. package/dist/shared/wire/LambderInvokeApiId.js +10 -0
  78. package/dist/shared/wire/LambderUploadSchemas.js +2 -1
  79. package/dist/stores/LambderDdbRateLimiter.d.ts +24 -16
  80. package/dist/stores/LambderDdbRateLimiter.js +64 -45
  81. package/dist/stores/LambderMemoryRateLimiter.d.ts +9 -4
  82. package/dist/stores/LambderMemoryRateLimiter.js +20 -15
  83. package/dist/testing/LambderTestApp.d.ts +18 -5
  84. package/dist/testing/LambderTestApp.js +21 -5
  85. package/dist/testing/LambderTestVisitor.d.ts +16 -8
  86. package/dist/testing/LambderTestVisitor.js +33 -25
  87. 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
- return this.json(plainRefusalEnvelope(this.apiVersion, config, "res.apiRefusal()", this.ctx?.logList), options);
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, LambderMergeContract, LambderGuardNamesIn, LambderContractMode, LambderContractKeysWithMode, LambderContractKeysWithGuard, LambderJsonOf, LambderContractRefusalsOf, LambderContractRefusalMessage, LambderContractRefusals, LambderContractAnyRefusalMessage, LambderContractGuardsOf, LambderContractGuardNames, LambderContractGuardInputsOf, LambderContractGuardInput, LambderContractGuardInputNames, LambderContractRateLimitOf, LambderContractRateLimitNames, LambderContractIdempotencyOf, } from "./shared/wire/LambderApiContract.js";
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
- export default class LambderInvokeCaller<TContract extends LambderApiContractShape = any, TProvidedGuards extends string = never> {
166
- private readonly functionName;
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
- export {};
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;