alchemy-effect 0.0.0 → 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +179 -0
- package/bin/alchemy-effect.js +15 -0
- package/bin/alchemy-effect.js.map +1 -0
- package/bin/alchemy-effect.ts +10 -0
- package/lib/aws/account.d.ts +17 -0
- package/lib/aws/account.d.ts.map +1 -0
- package/lib/aws/account.js +18 -0
- package/lib/aws/account.js.map +1 -0
- package/lib/aws/arn.d.ts +6 -0
- package/lib/aws/arn.d.ts.map +1 -0
- package/lib/aws/arn.js +1 -0
- package/lib/aws/arn.js.map +1 -0
- package/lib/aws/assets.d.ts +8 -0
- package/lib/aws/assets.d.ts.map +1 -0
- package/lib/aws/assets.js +4 -0
- package/lib/aws/assets.js.map +1 -0
- package/lib/aws/bundle.d.ts +4 -0
- package/lib/aws/bundle.d.ts.map +1 -0
- package/lib/aws/bundle.js +4 -0
- package/lib/aws/bundle.js.map +1 -0
- package/lib/aws/client.d.ts +8 -0
- package/lib/aws/client.d.ts.map +1 -0
- package/lib/aws/client.js +20 -0
- package/lib/aws/client.js.map +1 -0
- package/lib/aws/credentials.d.ts +146 -0
- package/lib/aws/credentials.d.ts.map +1 -0
- package/lib/aws/credentials.js +170 -0
- package/lib/aws/credentials.js.map +1 -0
- package/lib/aws/iam.d.ts +23 -0
- package/lib/aws/iam.d.ts.map +1 -0
- package/lib/aws/iam.js +7 -0
- package/lib/aws/iam.js.map +1 -0
- package/lib/aws/index.d.ts +22 -0
- package/lib/aws/index.d.ts.map +1 -0
- package/lib/aws/index.js +28 -0
- package/lib/aws/index.js.map +1 -0
- package/lib/aws/lambda/consume.d.ts +17 -0
- package/lib/aws/lambda/consume.d.ts.map +1 -0
- package/lib/aws/lambda/consume.js +30 -0
- package/lib/aws/lambda/consume.js.map +1 -0
- package/lib/aws/lambda/function.client.d.ts +8 -0
- package/lib/aws/lambda/function.client.d.ts.map +1 -0
- package/lib/aws/lambda/function.client.js +7 -0
- package/lib/aws/lambda/function.client.js.map +1 -0
- package/lib/aws/lambda/function.d.ts +38 -0
- package/lib/aws/lambda/function.d.ts.map +1 -0
- package/lib/aws/lambda/function.handler.d.ts +7 -0
- package/lib/aws/lambda/function.handler.d.ts.map +1 -0
- package/lib/aws/lambda/function.handler.js +8 -0
- package/lib/aws/lambda/function.handler.js.map +1 -0
- package/lib/aws/lambda/function.invoke.d.ts +10 -0
- package/lib/aws/lambda/function.invoke.d.ts.map +1 -0
- package/lib/aws/lambda/function.invoke.js +31 -0
- package/lib/aws/lambda/function.invoke.js.map +1 -0
- package/lib/aws/lambda/function.js +3 -0
- package/lib/aws/lambda/function.js.map +1 -0
- package/lib/aws/lambda/function.provider.d.ts +9 -0
- package/lib/aws/lambda/function.provider.d.ts.map +1 -0
- package/lib/aws/lambda/function.provider.js +375 -0
- package/lib/aws/lambda/function.provider.js.map +1 -0
- package/lib/aws/lambda/index.d.ts +9 -0
- package/lib/aws/lambda/index.d.ts.map +1 -0
- package/lib/aws/lambda/index.js +9 -0
- package/lib/aws/lambda/index.js.map +1 -0
- package/lib/aws/lambda/serve.d.ts +14 -0
- package/lib/aws/lambda/serve.d.ts.map +1 -0
- package/lib/aws/lambda/serve.js +7 -0
- package/lib/aws/lambda/serve.js.map +1 -0
- package/lib/aws/parse-ini.d.ts +4 -0
- package/lib/aws/parse-ini.d.ts.map +1 -0
- package/lib/aws/parse-ini.js +67 -0
- package/lib/aws/parse-ini.js.map +1 -0
- package/lib/aws/profile.d.ts +6 -0
- package/lib/aws/profile.d.ts.map +1 -0
- package/lib/aws/profile.js +4 -0
- package/lib/aws/profile.js.map +1 -0
- package/lib/aws/region.d.ts +18 -0
- package/lib/aws/region.d.ts.map +1 -0
- package/lib/aws/region.js +21 -0
- package/lib/aws/region.js.map +1 -0
- package/lib/aws/s3.d.ts +8 -0
- package/lib/aws/s3.d.ts.map +1 -0
- package/lib/aws/s3.js +7 -0
- package/lib/aws/s3.js.map +1 -0
- package/lib/aws/sqs/index.d.ts +6 -0
- package/lib/aws/sqs/index.d.ts.map +1 -0
- package/lib/aws/sqs/index.js +6 -0
- package/lib/aws/sqs/index.js.map +1 -0
- package/lib/aws/sqs/queue.client.d.ts +12 -0
- package/lib/aws/sqs/queue.client.d.ts.map +1 -0
- package/lib/aws/sqs/queue.client.js +11 -0
- package/lib/aws/sqs/queue.client.js.map +1 -0
- package/lib/aws/sqs/queue.consume.d.ts +21 -0
- package/lib/aws/sqs/queue.consume.d.ts.map +1 -0
- package/lib/aws/sqs/queue.consume.js +21 -0
- package/lib/aws/sqs/queue.consume.js.map +1 -0
- package/lib/aws/sqs/queue.d.ts +87 -0
- package/lib/aws/sqs/queue.d.ts.map +1 -0
- package/lib/aws/sqs/queue.js +3 -0
- package/lib/aws/sqs/queue.js.map +1 -0
- package/lib/aws/sqs/queue.provider.d.ts +6 -0
- package/lib/aws/sqs/queue.provider.d.ts.map +1 -0
- package/lib/aws/sqs/queue.provider.js +79 -0
- package/lib/aws/sqs/queue.provider.js.map +1 -0
- package/lib/aws/sqs/queue.send-message.d.ts +11 -0
- package/lib/aws/sqs/queue.send-message.d.ts.map +1 -0
- package/lib/aws/sqs/queue.send-message.js +32 -0
- package/lib/aws/sqs/queue.send-message.js.map +1 -0
- package/lib/aws/sts.d.ts +8 -0
- package/lib/aws/sts.d.ts.map +1 -0
- package/lib/aws/sts.js +7 -0
- package/lib/aws/sts.js.map +1 -0
- package/lib/aws/zip.d.ts +3 -0
- package/lib/aws/zip.d.ts.map +1 -0
- package/lib/aws/zip.js +12 -0
- package/lib/aws/zip.js.map +1 -0
- package/lib/cli/approve.d.ts +4 -0
- package/lib/cli/approve.d.ts.map +1 -0
- package/lib/cli/approve.js +18 -0
- package/lib/cli/approve.js.map +1 -0
- package/lib/cli/clack.d.ts +14 -0
- package/lib/cli/clack.d.ts.map +1 -0
- package/lib/cli/clack.js +12 -0
- package/lib/cli/clack.js.map +1 -0
- package/lib/cli/components/ApprovePlan.d.ts +8 -0
- package/lib/cli/components/ApprovePlan.d.ts.map +1 -0
- package/lib/cli/components/ApprovePlan.js +30 -0
- package/lib/cli/components/ApprovePlan.js.map +1 -0
- package/lib/cli/components/Plan.d.ts +7 -0
- package/lib/cli/components/Plan.d.ts.map +1 -0
- package/lib/cli/components/Plan.js +98 -0
- package/lib/cli/components/Plan.js.map +1 -0
- package/lib/cli/components/PlanProgress.d.ts +9 -0
- package/lib/cli/components/PlanProgress.d.ts.map +1 -0
- package/lib/cli/components/PlanProgress.js +166 -0
- package/lib/cli/components/PlanProgress.js.map +1 -0
- package/lib/cli/index.d.ts +361 -0
- package/lib/cli/index.d.ts.map +1 -0
- package/lib/cli/index.js +25260 -0
- package/lib/cli/index.js.map +1 -0
- package/lib/cli/main.d.ts +2 -0
- package/lib/cli/main.d.ts.map +1 -0
- package/lib/cli/main.js +1 -0
- package/lib/cli/main.js.map +1 -0
- package/lib/cli/plan.d.ts +13 -0
- package/lib/cli/plan.d.ts.map +1 -0
- package/lib/cli/plan.js +1 -0
- package/lib/cli/plan.js.map +1 -0
- package/lib/cli/progress.d.ts +7 -0
- package/lib/cli/progress.d.ts.map +1 -0
- package/lib/cli/progress.js +29 -0
- package/lib/cli/progress.js.map +1 -0
- package/lib/cli/spinner.d.ts +2 -0
- package/lib/cli/spinner.d.ts.map +1 -0
- package/lib/cli/spinner.js +13 -0
- package/lib/cli/spinner.js.map +1 -0
- package/lib/cloudflare/api.d.ts +24 -0
- package/lib/cloudflare/api.d.ts.map +1 -0
- package/lib/cloudflare/api.js +34 -0
- package/lib/cloudflare/api.js.map +1 -0
- package/lib/cloudflare/index.d.ts +5 -0
- package/lib/cloudflare/index.d.ts.map +1 -0
- package/lib/cloudflare/index.js +5 -0
- package/lib/cloudflare/index.js.map +1 -0
- package/lib/cloudflare/kv.d.ts +29 -0
- package/lib/cloudflare/kv.d.ts.map +1 -0
- package/lib/cloudflare/kv.js +3 -0
- package/lib/cloudflare/kv.js.map +1 -0
- package/lib/cloudflare/kv.provider.d.ts +4 -0
- package/lib/cloudflare/kv.provider.d.ts.map +1 -0
- package/lib/cloudflare/kv.provider.js +39 -0
- package/lib/cloudflare/kv.provider.js.map +1 -0
- package/lib/cloudflare/worker.d.ts +33 -0
- package/lib/cloudflare/worker.d.ts.map +1 -0
- package/lib/cloudflare/worker.js +4 -0
- package/lib/cloudflare/worker.js.map +1 -0
- package/lib/index.d.ts +3 -0
- package/lib/index.d.ts.map +1 -1
- package/lib/index.js +3 -0
- package/lib/index.js.map +1 -1
- package/package.json +70 -3
- package/src/aws/account.ts +35 -0
- package/src/aws/arn.ts +7 -0
- package/src/aws/assets.ts +8 -0
- package/src/aws/bundle.ts +5 -0
- package/src/aws/client.ts +33 -0
- package/src/aws/credentials.ts +408 -0
- package/src/aws/iam.ts +30 -0
- package/src/aws/index.ts +55 -0
- package/src/aws/lambda/consume.ts +64 -0
- package/src/aws/lambda/function.client.ts +14 -0
- package/src/aws/lambda/function.handler.ts +30 -0
- package/src/aws/lambda/function.invoke.ts +40 -0
- package/src/aws/lambda/function.provider.ts +563 -0
- package/src/aws/lambda/function.ts +39 -0
- package/src/aws/lambda/index.ts +12 -0
- package/src/aws/lambda/serve.ts +29 -0
- package/src/aws/parse-ini.ts +80 -0
- package/src/aws/profile.ts +6 -0
- package/src/aws/region.ts +35 -0
- package/src/aws/s3.ts +10 -0
- package/src/aws/sqs/index.ts +5 -0
- package/src/aws/sqs/queue.client.ts +20 -0
- package/src/aws/sqs/queue.consume.ts +46 -0
- package/src/aws/sqs/queue.provider.ts +94 -0
- package/src/aws/sqs/queue.send-message.ts +51 -0
- package/src/aws/sqs/queue.ts +86 -0
- package/src/aws/sts.ts +13 -0
- package/src/aws/zip.ts +17 -0
- package/src/cli/approve.tsx +30 -0
- package/src/cli/clack.ts +22 -0
- package/src/cli/components/ApprovePlan.tsx +44 -0
- package/src/cli/components/Plan.tsx +152 -0
- package/src/cli/components/PlanProgress.tsx +206 -0
- package/src/cli/index.ts +6 -0
- package/src/cli/main.ts +0 -0
- package/src/cli/plan.ts +16 -0
- package/src/cli/progress.tsx +45 -0
- package/src/cli/spinner.ts +14 -0
- package/src/cloudflare/api.ts +72 -0
- package/src/cloudflare/index.ts +4 -0
- package/src/cloudflare/kv.provider.ts +51 -0
- package/src/cloudflare/kv.ts +20 -0
- package/src/cloudflare/worker.ts +34 -0
- package/src/index.ts +4 -0
|
@@ -0,0 +1,170 @@
|
|
|
1
|
+
import { fromContainerMetadata as _fromContainerMetadata, fromEnv as _fromEnv, fromHttp as _fromHttp, fromIni as _fromIni, fromInstanceMetadata as _fromInstanceMetadata, fromNodeProviderChain as _fromNodeProviderChain, fromProcess as _fromProcess, fromTokenFile as _fromTokenFile, fromWebToken as _fromWebToken, } from "@aws-sdk/credential-providers";
|
|
2
|
+
import { FileSystem, HttpClient } from "@effect/platform";
|
|
3
|
+
import * as ini from "@smithy/shared-ini-file-loader";
|
|
4
|
+
import {} from "@smithy/types";
|
|
5
|
+
import * as Console from "effect/Console";
|
|
6
|
+
import * as Context from "effect/Context";
|
|
7
|
+
import * as Data from "effect/Data";
|
|
8
|
+
import * as Effect from "effect/Effect";
|
|
9
|
+
import * as Layer from "effect/Layer";
|
|
10
|
+
import * as Option from "effect/Option";
|
|
11
|
+
import * as Redacted from "effect/Redacted";
|
|
12
|
+
import { createHash } from "node:crypto";
|
|
13
|
+
import * as path from "node:path";
|
|
14
|
+
import { parseIni, parseSSOSessionData } from "./parse-ini.js";
|
|
15
|
+
import { AwsProfile } from "./profile.js";
|
|
16
|
+
export class Credentials extends Context.Tag("AWS::Credentials")() {
|
|
17
|
+
}
|
|
18
|
+
export const fromAwsCredentialIdentity = (identity) => Credentials.of({
|
|
19
|
+
accessKeyId: Redacted.make(identity.accessKeyId),
|
|
20
|
+
secretAccessKey: Redacted.make(identity.secretAccessKey),
|
|
21
|
+
sessionToken: identity.sessionToken
|
|
22
|
+
? Redacted.make(identity.sessionToken)
|
|
23
|
+
: undefined,
|
|
24
|
+
expiration: identity.expiration?.getTime(),
|
|
25
|
+
});
|
|
26
|
+
const createLayer = (provider) => Layer.effect(Credentials, Effect.gen(function* () {
|
|
27
|
+
return fromAwsCredentialIdentity(yield* Effect.promise(() => provider({})()));
|
|
28
|
+
}));
|
|
29
|
+
export const fromCredentials = (credentials) => Layer.succeed(Credentials, fromAwsCredentialIdentity(credentials));
|
|
30
|
+
export const fromEnv = () => createLayer(_fromEnv);
|
|
31
|
+
export const fromChain = () => createLayer(() => _fromNodeProviderChain());
|
|
32
|
+
// export const fromSSO = () => createLayer(_fromSSO);
|
|
33
|
+
export const fromIni = () => createLayer(_fromIni);
|
|
34
|
+
export const fromContainerMetadata = () => createLayer(_fromContainerMetadata);
|
|
35
|
+
export const fromHttp = () => createLayer(_fromHttp);
|
|
36
|
+
export const fromInstanceMetadata = (...parameters) => createLayer(() => _fromInstanceMetadata(...parameters));
|
|
37
|
+
export const fromProcess = () => createLayer(_fromProcess);
|
|
38
|
+
export const fromTokenFile = () => createLayer(_fromTokenFile);
|
|
39
|
+
export const fromWebToken = (...parameters) => createLayer(() => _fromWebToken(...parameters));
|
|
40
|
+
export const ssoRegion = (region) => Layer.succeed(SsoRegion, region);
|
|
41
|
+
/**
|
|
42
|
+
* The time window (5 mins) that SDK will treat the SSO token expires in before the defined expiration date in token.
|
|
43
|
+
* This is needed because server side may have invalidated the token before the defined expiration date.
|
|
44
|
+
*/
|
|
45
|
+
const EXPIRE_WINDOW_MS = 5 * 60 * 1000;
|
|
46
|
+
const REFRESH_MESSAGE = `To refresh this SSO session run 'aws sso login' with the corresponding profile.`;
|
|
47
|
+
export class SsoRegion extends Context.Tag("AWS::SsoRegion")() {
|
|
48
|
+
}
|
|
49
|
+
export class SsoStartUrl extends Context.Tag("AWS::SsoStartUrl")() {
|
|
50
|
+
}
|
|
51
|
+
export class ProfileNotFound extends Data.TaggedError("Alchemy::AWS::ProfileNotFound") {
|
|
52
|
+
}
|
|
53
|
+
export class ConflictingSSORegion extends Data.TaggedError("Alchemy::AWS::ConflictingSSORegion") {
|
|
54
|
+
}
|
|
55
|
+
export class ConflictingSSOStartUrl extends Data.TaggedError("Alchemy::AWS::ConflictingSSOStartUrl") {
|
|
56
|
+
}
|
|
57
|
+
export class InvalidSSOProfile extends Data.TaggedError("Alchemy::AWS::InvalidSSOProfile") {
|
|
58
|
+
}
|
|
59
|
+
export class InvalidSSOToken extends Data.TaggedError("Alchemy::AWS::InvalidSSOToken") {
|
|
60
|
+
}
|
|
61
|
+
export class ExpiredSSOToken extends Data.TaggedError("Alchemy::AWS::ExpiredSSOToken") {
|
|
62
|
+
}
|
|
63
|
+
export const fromSSO = () => Layer.effect(Credentials, Effect.gen(function* () {
|
|
64
|
+
const client = yield* HttpClient.HttpClient;
|
|
65
|
+
const fs = yield* FileSystem.FileSystem;
|
|
66
|
+
const profileName = Option.getOrElse(yield* Effect.serviceOption(AwsProfile), () => "default");
|
|
67
|
+
const profiles = yield* Effect.promise(() => ini.parseKnownFiles({ profile: profileName }));
|
|
68
|
+
const profile = profiles[profileName];
|
|
69
|
+
if (!profile) {
|
|
70
|
+
yield* Effect.fail(new ProfileNotFound({
|
|
71
|
+
message: `Profile ${profileName} not found`,
|
|
72
|
+
profile: profileName,
|
|
73
|
+
}));
|
|
74
|
+
}
|
|
75
|
+
const awsDir = path.join(ini.getHomeDir(), ".aws");
|
|
76
|
+
const configPath = path.join(awsDir, "config");
|
|
77
|
+
const cachePath = path.join(awsDir, "sso", "cache");
|
|
78
|
+
if (profile.sso_session) {
|
|
79
|
+
const ssoRegion = Option.getOrUndefined(yield* Effect.serviceOption(SsoRegion));
|
|
80
|
+
const ssoStartUrl = Option.getOrElse(yield* Effect.serviceOption(SsoStartUrl), () => profile.sso_start_url);
|
|
81
|
+
const ssoSessions = yield* fs.readFileString(configPath).pipe(Effect.flatMap((config) => Effect.promise(async () => parseIni(config))), Effect.map(parseSSOSessionData));
|
|
82
|
+
const session = ssoSessions[profile.sso_session];
|
|
83
|
+
if (ssoRegion && ssoRegion !== session.sso_region) {
|
|
84
|
+
yield* Effect.fail(new ConflictingSSORegion({
|
|
85
|
+
message: `Conflicting SSO region`,
|
|
86
|
+
ssoRegion: ssoRegion,
|
|
87
|
+
profile: profile.sso_session,
|
|
88
|
+
}));
|
|
89
|
+
}
|
|
90
|
+
if (ssoStartUrl && ssoStartUrl !== session.sso_start_url) {
|
|
91
|
+
yield* Effect.fail(new ConflictingSSOStartUrl({
|
|
92
|
+
message: `Conflicting SSO start url`,
|
|
93
|
+
ssoStartUrl: ssoStartUrl,
|
|
94
|
+
profile: profile.sso_session,
|
|
95
|
+
}));
|
|
96
|
+
}
|
|
97
|
+
profile.sso_region = session.sso_region;
|
|
98
|
+
profile.sso_start_url = session.sso_start_url;
|
|
99
|
+
const ssoFields = [
|
|
100
|
+
"sso_start_url",
|
|
101
|
+
"sso_account_id",
|
|
102
|
+
"sso_region",
|
|
103
|
+
"sso_role_name",
|
|
104
|
+
];
|
|
105
|
+
const missingFields = ssoFields.filter((field) => !profile[field]);
|
|
106
|
+
if (missingFields.length > 0) {
|
|
107
|
+
yield* Effect.fail(new InvalidSSOProfile({
|
|
108
|
+
profile: profileName,
|
|
109
|
+
missingFields,
|
|
110
|
+
message: `Profile is configured with invalid SSO credentials. Required parameters "sso_account_id", ` +
|
|
111
|
+
`"sso_region", "sso_role_name", "sso_start_url". Got ${Object.keys(profile).join(", ")}\nReference: https://docs.aws.amazon.com/cli/latest/userguide/cli-configure-sso.html`,
|
|
112
|
+
}));
|
|
113
|
+
}
|
|
114
|
+
const hasher = createHash("sha1");
|
|
115
|
+
const cacheName = hasher.update(profile.sso_session).digest("hex");
|
|
116
|
+
const ssoTokenFilepath = path.join(cachePath, `${cacheName}.json`);
|
|
117
|
+
const cachedCredsFilePath = path.join(cachePath, `${cacheName}.credentials.json`);
|
|
118
|
+
const cachedCreds = yield* fs.readFileString(cachedCredsFilePath).pipe(Effect.map((text) => JSON.parse(text)), Effect.catchAll(() => Effect.void));
|
|
119
|
+
const isExpired = (expiry) => {
|
|
120
|
+
return (expiry === undefined ||
|
|
121
|
+
new Date(expiry).getTime() - Date.now() <= EXPIRE_WINDOW_MS);
|
|
122
|
+
};
|
|
123
|
+
if (cachedCreds && !isExpired(cachedCreds.expiry)) {
|
|
124
|
+
return Credentials.of({
|
|
125
|
+
accessKeyId: Redacted.make(cachedCreds.accessKeyId),
|
|
126
|
+
secretAccessKey: Redacted.make(cachedCreds.secretAccessKey),
|
|
127
|
+
sessionToken: cachedCreds.sessionToken
|
|
128
|
+
? Redacted.make(cachedCreds.sessionToken)
|
|
129
|
+
: undefined,
|
|
130
|
+
expiration: cachedCreds.expiry,
|
|
131
|
+
});
|
|
132
|
+
}
|
|
133
|
+
const ssoToken = yield* fs.readFileString(ssoTokenFilepath).pipe(Effect.map((text) => JSON.parse(text)), Effect.catchAll(() => Effect.fail(new InvalidSSOToken({
|
|
134
|
+
message: `The SSO session token associated with profile=${profileName} was not found or is invalid. ${REFRESH_MESSAGE}`,
|
|
135
|
+
sso_session: profile.sso_session,
|
|
136
|
+
}))));
|
|
137
|
+
if (isExpired(ssoToken.expiresAt)) {
|
|
138
|
+
yield* Console.log(`The SSO session token associated with profile=${profileName} was not found or is invalid. ${REFRESH_MESSAGE}`);
|
|
139
|
+
yield* Effect.fail(new ExpiredSSOToken({
|
|
140
|
+
message: `The SSO session token associated with profile=${profileName} was not found or is invalid. ${REFRESH_MESSAGE}`,
|
|
141
|
+
profile: profileName,
|
|
142
|
+
}));
|
|
143
|
+
}
|
|
144
|
+
const response = yield* client.get(`https://portal.sso.${profile.sso_region}.amazonaws.com/federation/credentials?account_id=${profile.sso_account_id}&role_name=${profile.sso_role_name}`, {
|
|
145
|
+
headers: {
|
|
146
|
+
"User-Agent": "alchemy.run",
|
|
147
|
+
"Content-Type": "application/json",
|
|
148
|
+
"x-amz-sso_bearer_token": ssoToken.accessToken,
|
|
149
|
+
},
|
|
150
|
+
});
|
|
151
|
+
const credentials = (yield* response.json).roleCredentials;
|
|
152
|
+
yield* fs.writeFileString(cachedCredsFilePath, JSON.stringify({
|
|
153
|
+
accessKeyId: credentials.accessKeyId,
|
|
154
|
+
secretAccessKey: credentials.secretAccessKey,
|
|
155
|
+
sessionToken: credentials.sessionToken,
|
|
156
|
+
expiry: credentials.expiration,
|
|
157
|
+
}));
|
|
158
|
+
return Credentials.of({
|
|
159
|
+
accessKeyId: Redacted.make(credentials.accessKeyId),
|
|
160
|
+
secretAccessKey: Redacted.make(credentials.secretAccessKey),
|
|
161
|
+
sessionToken: Redacted.make(credentials.sessionToken),
|
|
162
|
+
expiration: credentials.expiration,
|
|
163
|
+
});
|
|
164
|
+
}
|
|
165
|
+
return yield* Effect.fail(new ProfileNotFound({
|
|
166
|
+
message: `Profile ${profileName} not found`,
|
|
167
|
+
profile: profileName,
|
|
168
|
+
}));
|
|
169
|
+
}));
|
|
170
|
+
//# sourceMappingURL=credentials.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"credentials.js","sourceRoot":"","sources":["../../src/aws/credentials.ts"],"names":[],"mappings":"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"}
|
package/lib/aws/iam.d.ts
ADDED
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import * as Context from "effect/Context";
|
|
2
|
+
import { IAM } from "itty-aws/iam";
|
|
3
|
+
declare const IAMClient_base: Context.TagClass<IAMClient, "AWS::IAM::Client", IAM>;
|
|
4
|
+
export declare class IAMClient extends IAMClient_base {
|
|
5
|
+
}
|
|
6
|
+
export declare const client: () => import("effect/Layer").Layer<IAMClient, never, import("./credentials.ts").Credentials | import("./region.ts").Region>;
|
|
7
|
+
export interface PolicyDocument {
|
|
8
|
+
Version: "2012-10-17";
|
|
9
|
+
Statement: PolicyStatement[];
|
|
10
|
+
}
|
|
11
|
+
export interface PolicyStatement {
|
|
12
|
+
Effect: "Allow" | "Deny";
|
|
13
|
+
Sid?: string;
|
|
14
|
+
Action: string[];
|
|
15
|
+
Resource: string | string[];
|
|
16
|
+
Condition?: Record<string, Record<string, string | string[]>>;
|
|
17
|
+
Principal?: Record<string, string | string[]>;
|
|
18
|
+
NotPrincipal?: Record<string, string | string[]>;
|
|
19
|
+
NotAction?: string[];
|
|
20
|
+
NotResource?: string[];
|
|
21
|
+
}
|
|
22
|
+
export {};
|
|
23
|
+
//# sourceMappingURL=iam.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"iam.d.ts","sourceRoot":"","sources":["../../src/aws/iam.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,OAAO,MAAM,gBAAgB,CAAC;AAC1C,OAAO,EAAE,GAAG,EAAE,MAAM,cAAc,CAAC;;AAGnC,qBAAa,SAAU,SAAQ,cAG5B;CAAG;AAEN,eAAO,MAAM,MAAM,6HAGlB,CAAC;AAEF,MAAM,WAAW,cAAc;IAC7B,OAAO,EAAE,YAAY,CAAC;IACtB,SAAS,EAAE,eAAe,EAAE,CAAC;CAC9B;AAED,MAAM,WAAW,eAAe;IAC9B,MAAM,EAAE,OAAO,GAAG,MAAM,CAAC;IACzB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,QAAQ,EAAE,MAAM,GAAG,MAAM,EAAE,CAAC;IAC5B,SAAS,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,EAAE,CAAC,CAAC,CAAC;IAC9D,SAAS,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,EAAE,CAAC,CAAC;IAC9C,YAAY,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,EAAE,CAAC,CAAC;IACjD,SAAS,CAAC,EAAE,MAAM,EAAE,CAAC;IACrB,WAAW,CAAC,EAAE,MAAM,EAAE,CAAC;CACxB"}
|
package/lib/aws/iam.js
ADDED
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import * as Context from "effect/Context";
|
|
2
|
+
import { IAM } from "itty-aws/iam";
|
|
3
|
+
import { createAWSServiceClientLayer } from "./client.js";
|
|
4
|
+
export class IAMClient extends Context.Tag("AWS::IAM::Client")() {
|
|
5
|
+
}
|
|
6
|
+
export const client = createAWSServiceClientLayer(IAMClient, IAM);
|
|
7
|
+
//# sourceMappingURL=iam.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"iam.js","sourceRoot":"","sources":["../../src/aws/iam.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,OAAO,MAAM,gBAAgB,CAAC;AAC1C,OAAO,EAAE,GAAG,EAAE,MAAM,cAAc,CAAC;AACnC,OAAO,EAAE,2BAA2B,EAAE,MAAM,aAAa,CAAC;AAE1D,MAAM,OAAO,SAAU,SAAQ,OAAO,CAAC,GAAG,CAAC,kBAAkB,CAAC,EAG3D;CAAG;AAEN,MAAM,CAAC,MAAM,MAAM,GAAG,2BAA2B,CAC/C,SAAS,EACT,GAAG,CACJ,CAAC"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import * as Layer from "effect/Layer";
|
|
2
|
+
import * as Account from "./account.ts";
|
|
3
|
+
import * as Credentials from "./credentials.ts";
|
|
4
|
+
import * as IAM from "./iam.ts";
|
|
5
|
+
import * as Lambda from "./lambda/index.ts";
|
|
6
|
+
export * from "./profile.ts";
|
|
7
|
+
export type * as Alchemy from "../index.ts";
|
|
8
|
+
export * as Account from "./account.ts";
|
|
9
|
+
export * as Credentials from "./credentials.ts";
|
|
10
|
+
export * as IAM from "./iam.ts";
|
|
11
|
+
export * as Lambda from "./lambda/index.ts";
|
|
12
|
+
export * as Region from "./region.ts";
|
|
13
|
+
export * as S3 from "./s3.ts";
|
|
14
|
+
export * as SQS from "./sqs/index.ts";
|
|
15
|
+
export * as STS from "./sts.ts";
|
|
16
|
+
export declare const providers: Layer.Layer<unknown, never, Lambda.Alchemy.Alchemy.App | Lambda.Alchemy.Region.Region | import("@effect/platform/FileSystem").FileSystem | Account.AccountID | IAM.IAMClient | Lambda.Alchemy.Alchemy.DotAlchemy | Credentials.Credentials>;
|
|
17
|
+
export declare const bindings: Layer.Layer<Lambda.Alchemy.Alchemy.Bind<Lambda.Function, Lambda.Alchemy.SQS.Consume<Lambda.Alchemy.SQS.Queue<string, Lambda.Alchemy.SQS.QueueProps<any>>>, "QueueEventSource"> | Lambda.Alchemy.Alchemy.Bind<Lambda.Function, Lambda.Alchemy.SQS.SendMessage<Lambda.Alchemy.SQS.Queue<string, Lambda.Alchemy.SQS.QueueProps<any>>>, "AWS.SQS.SendMessage">, never, never>;
|
|
18
|
+
export declare const clients: Layer.Layer<Lambda.FunctionClient | IAM.IAMClient | Lambda.Alchemy.SQS.QueueClient | Lambda.Alchemy.STS.STSClient | Lambda.Alchemy.S3.S3Client, never, Lambda.Alchemy.Region.Region | Credentials.Credentials>;
|
|
19
|
+
export declare const defaultProviders: Layer.Layer<unknown, Account.FailedToGetAccount, Lambda.Alchemy.Alchemy.App | Lambda.Alchemy.Region.Region | import("@effect/platform/FileSystem").FileSystem | Lambda.Alchemy.Alchemy.DotAlchemy | Credentials.Credentials>;
|
|
20
|
+
export declare const live: Layer.Layer<unknown, import("@effect/platform/Error").PlatformError | Account.FailedToGetAccount | Lambda.Alchemy.Region.EnvironmentVariableNotSet | import("@effect/platform/HttpClientError").HttpClientError | Credentials.InvalidSSOToken | Credentials.ProfileNotFound | Credentials.ConflictingSSORegion | Credentials.ConflictingSSOStartUrl | Credentials.InvalidSSOProfile | Credentials.ExpiredSSOToken, Lambda.Alchemy.Alchemy.App | import("@effect/platform/FileSystem").FileSystem | Lambda.Alchemy.Alchemy.DotAlchemy | import("@effect/platform/HttpClient").HttpClient>;
|
|
21
|
+
export default live;
|
|
22
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/aws/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,cAAc,CAAC;AACtC,OAAO,KAAK,OAAO,MAAM,cAAc,CAAC;AACxC,OAAO,KAAK,WAAW,MAAM,kBAAkB,CAAC;AAChD,OAAO,KAAK,GAAG,MAAM,UAAU,CAAC;AAChC,OAAO,KAAK,MAAM,MAAM,mBAAmB,CAAC;AAO5C,cAAc,cAAc,CAAC;AAE7B,YAAY,KAAK,OAAO,MAAM,aAAa,CAAC;AAE5C,OAAO,KAAK,OAAO,MAAM,cAAc,CAAC;AACxC,OAAO,KAAK,WAAW,MAAM,kBAAkB,CAAC;AAChD,OAAO,KAAK,GAAG,MAAM,UAAU,CAAC;AAChC,OAAO,KAAK,MAAM,MAAM,mBAAmB,CAAC;AAC5C,OAAO,KAAK,MAAM,MAAM,aAAa,CAAC;AACtC,OAAO,KAAK,EAAE,MAAM,SAAS,CAAC;AAC9B,OAAO,KAAK,GAAG,MAAM,gBAAgB,CAAC;AACtC,OAAO,KAAK,GAAG,MAAM,UAAU,CAAC;AAEhC,eAAO,MAAM,SAAS,6OAGrB,CAAC;AAEF,eAAO,MAAM,QAAQ,2WAIpB,CAAC;AAEF,eAAO,MAAM,OAAO,gNAMnB,CAAC;AAEF,eAAO,MAAM,gBAAgB,8NAI5B,CAAC;AAEF,eAAO,MAAM,IAAI,0jBAGhB,CAAC;AAEF,eAAe,IAAI,CAAC"}
|
package/lib/aws/index.js
ADDED
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import * as Layer from "effect/Layer";
|
|
2
|
+
import * as Account from "./account.js";
|
|
3
|
+
import * as Credentials from "./credentials.js";
|
|
4
|
+
import * as IAM from "./iam.js";
|
|
5
|
+
import * as Lambda from "./lambda/index.js";
|
|
6
|
+
import * as Region from "./region.js";
|
|
7
|
+
import * as S3 from "./s3.js";
|
|
8
|
+
import * as SQS from "./sqs/index.js";
|
|
9
|
+
import * as STS from "./sts.js";
|
|
10
|
+
// TODO(sam): should this be named?
|
|
11
|
+
export * from "./profile.js";
|
|
12
|
+
export * as Account from "./account.js";
|
|
13
|
+
export * as Credentials from "./credentials.js";
|
|
14
|
+
export * as IAM from "./iam.js";
|
|
15
|
+
export * as Lambda from "./lambda/index.js";
|
|
16
|
+
export * as Region from "./region.js";
|
|
17
|
+
export * as S3 from "./s3.js";
|
|
18
|
+
export * as SQS from "./sqs/index.js";
|
|
19
|
+
export * as STS from "./sts.js";
|
|
20
|
+
export const providers = Layer.merge(Layer.provide(Lambda.functionProvider(), Lambda.client()), Layer.provide(SQS.queueProvider(), SQS.client()));
|
|
21
|
+
export const bindings = Layer.mergeAll(
|
|
22
|
+
//
|
|
23
|
+
SQS.sendMessageFromLambdaFunction(), SQS.consumeFromLambdaFunction());
|
|
24
|
+
export const clients = Layer.mergeAll(STS.client(), IAM.client(), S3.client(), SQS.client(), Lambda.client());
|
|
25
|
+
export const defaultProviders = providers.pipe(Layer.provideMerge(bindings), Layer.provideMerge(Account.fromIdentity()), Layer.provide(clients));
|
|
26
|
+
export const live = defaultProviders.pipe(Layer.provide(Region.fromEnv()), Layer.provide(Credentials.fromSSO()));
|
|
27
|
+
export default live;
|
|
28
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/aws/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,cAAc,CAAC;AACtC,OAAO,KAAK,OAAO,MAAM,cAAc,CAAC;AACxC,OAAO,KAAK,WAAW,MAAM,kBAAkB,CAAC;AAChD,OAAO,KAAK,GAAG,MAAM,UAAU,CAAC;AAChC,OAAO,KAAK,MAAM,MAAM,mBAAmB,CAAC;AAC5C,OAAO,KAAK,MAAM,MAAM,aAAa,CAAC;AACtC,OAAO,KAAK,EAAE,MAAM,SAAS,CAAC;AAC9B,OAAO,KAAK,GAAG,MAAM,gBAAgB,CAAC;AACtC,OAAO,KAAK,GAAG,MAAM,UAAU,CAAC;AAEhC,mCAAmC;AACnC,cAAc,cAAc,CAAC;AAI7B,OAAO,KAAK,OAAO,MAAM,cAAc,CAAC;AACxC,OAAO,KAAK,WAAW,MAAM,kBAAkB,CAAC;AAChD,OAAO,KAAK,GAAG,MAAM,UAAU,CAAC;AAChC,OAAO,KAAK,MAAM,MAAM,mBAAmB,CAAC;AAC5C,OAAO,KAAK,MAAM,MAAM,aAAa,CAAC;AACtC,OAAO,KAAK,EAAE,MAAM,SAAS,CAAC;AAC9B,OAAO,KAAK,GAAG,MAAM,gBAAgB,CAAC;AACtC,OAAO,KAAK,GAAG,MAAM,UAAU,CAAC;AAEhC,MAAM,CAAC,MAAM,SAAS,GAAG,KAAK,CAAC,KAAK,CAClC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,gBAAgB,EAAE,EAAE,MAAM,CAAC,MAAM,EAAE,CAAC,EACzD,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,aAAa,EAAE,EAAE,GAAG,CAAC,MAAM,EAAE,CAAC,CACjD,CAAC;AAEF,MAAM,CAAC,MAAM,QAAQ,GAAG,KAAK,CAAC,QAAQ;AACpC,EAAE;AACF,GAAG,CAAC,6BAA6B,EAAE,EACnC,GAAG,CAAC,yBAAyB,EAAE,CAChC,CAAC;AAEF,MAAM,CAAC,MAAM,OAAO,GAAG,KAAK,CAAC,QAAQ,CACnC,GAAG,CAAC,MAAM,EAAE,EACZ,GAAG,CAAC,MAAM,EAAE,EACZ,EAAE,CAAC,MAAM,EAAE,EACX,GAAG,CAAC,MAAM,EAAE,EACZ,MAAM,CAAC,MAAM,EAAE,CAChB,CAAC;AAEF,MAAM,CAAC,MAAM,gBAAgB,GAAG,SAAS,CAAC,IAAI,CAC5C,KAAK,CAAC,YAAY,CAAC,QAAQ,CAAC,EAC5B,KAAK,CAAC,YAAY,CAAC,OAAO,CAAC,YAAY,EAAE,CAAC,EAC1C,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,CACvB,CAAC;AAEF,MAAM,CAAC,MAAM,IAAI,GAAG,gBAAgB,CAAC,IAAI,CACvC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC,EAC/B,KAAK,CAAC,OAAO,CAAC,WAAW,CAAC,OAAO,EAAE,CAAC,CACrC,CAAC;AAEF,eAAe,IAAI,CAAC"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import type { Context as LambdaContext, SQSBatchResponse, SQSEvent } from "aws-lambda";
|
|
2
|
+
import * as Effect from "effect/Effect";
|
|
3
|
+
import * as SQS from "../sqs/index.ts";
|
|
4
|
+
import * as Lambda from "./function.ts";
|
|
5
|
+
export declare const consume: <Q extends SQS.Queue, ID extends string, Req>(id: ID, { queue, handle, }: {
|
|
6
|
+
queue: Q;
|
|
7
|
+
handle: (this: unknown, event: SQS.QueueEvent<Q["props"]["schema"]["Type"]>, context: LambdaContext) => Effect.Effect<SQSBatchResponse | void, never, Req>;
|
|
8
|
+
}) => <const Props extends Lambda.FunctionProps<Req>>({ bindings, ...props }: Props) => import("alchemy-effect").Service<ID, Lambda.Function & {
|
|
9
|
+
provider: import("alchemy-effect").ResourceTags<Lambda.Function>;
|
|
10
|
+
}, (event: SQSEvent, context: LambdaContext) => Effect.Effect<{
|
|
11
|
+
batchItemFailures: SQS.lambda.SQSBatchItemFailure[];
|
|
12
|
+
}, never, Req | SQS.Consume<import("alchemy-effect").Instance<Q>>>, Omit<Props, "bindings"> & {
|
|
13
|
+
readonly bindings: import("alchemy-effect").Policy<Lambda.Function, Extract<Req, import("alchemy-effect").Capability<string, unknown, unknown>> | SQS.Consume<import("alchemy-effect").Instance<Q>>, unknown>;
|
|
14
|
+
}, Lambda.FunctionAttr<Extract<Lambda.FunctionProps<any> & Omit<Props, "bindings"> & {
|
|
15
|
+
readonly bindings: import("alchemy-effect").Policy<Lambda.Function, Extract<Req, import("alchemy-effect").Capability<string, unknown, unknown>> | SQS.Consume<import("alchemy-effect").Instance<Q>>, unknown>;
|
|
16
|
+
}, Lambda.FunctionProps<any>>>>;
|
|
17
|
+
//# sourceMappingURL=consume.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"consume.d.ts","sourceRoot":"","sources":["../../../src/aws/lambda/consume.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EACV,OAAO,IAAI,aAAa,EACxB,gBAAgB,EAChB,QAAQ,EACT,MAAM,YAAY,CAAC;AACpB,OAAO,KAAK,MAAM,MAAM,eAAe,CAAC;AAExC,OAAO,KAAK,GAAG,MAAM,iBAAiB,CAAC;AACvC,OAAO,KAAK,MAAM,MAAM,eAAe,CAAC;AAExC,eAAO,MAAM,OAAO,GACjB,CAAC,SAAS,GAAG,CAAC,KAAK,EAAE,EAAE,SAAS,MAAM,EAAE,GAAG,EAC1C,IAAI,EAAE,EACN,oBAGG;IACD,KAAK,EAAE,CAAC,CAAC;IACT,MAAM,EAAE,CACN,IAAI,EAAE,OAAO,EACb,KAAK,EAAE,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,CAAC,EACnD,OAAO,EAAE,aAAa,KACnB,MAAM,CAAC,MAAM,CAAC,gBAAgB,GAAG,IAAI,EAAE,KAAK,EAAE,GAAG,CAAC,CAAC;CACzD,MAEF,KAAK,CAAC,KAAK,SAAS,MAAM,CAAC,aAAa,CAAC,GAAG,CAAC,EAAE,wBAG7C,KAAK;;;;;;;;+BAiC+D,CAAC"}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import { declare } from "alchemy-effect";
|
|
2
|
+
import * as Effect from "effect/Effect";
|
|
3
|
+
import * as S from "effect/Schema";
|
|
4
|
+
import * as SQS from "../sqs/index.js";
|
|
5
|
+
import * as Lambda from "./function.js";
|
|
6
|
+
export const consume = (id, { queue, handle, }) => ({ bindings, ...props }) => Lambda.Function(id, {
|
|
7
|
+
handle: Effect.fn(function* (event, context) {
|
|
8
|
+
yield* declare();
|
|
9
|
+
const records = yield* Effect.all(event.Records.map(Effect.fn(function* (record) {
|
|
10
|
+
return {
|
|
11
|
+
...record,
|
|
12
|
+
body: yield* S.validate(queue.props.schema)(record.body).pipe(Effect.catchAll(() => Effect.void)),
|
|
13
|
+
};
|
|
14
|
+
})));
|
|
15
|
+
const response = yield* handle({
|
|
16
|
+
Records: records.filter((record) => record.body !== undefined),
|
|
17
|
+
}, context);
|
|
18
|
+
return {
|
|
19
|
+
batchItemFailures: [
|
|
20
|
+
...(response?.batchItemFailures ?? []),
|
|
21
|
+
...records
|
|
22
|
+
.filter((record) => record.body === undefined)
|
|
23
|
+
.map((failed) => ({
|
|
24
|
+
itemIdentifier: failed.messageId,
|
|
25
|
+
})),
|
|
26
|
+
],
|
|
27
|
+
};
|
|
28
|
+
}),
|
|
29
|
+
})({ ...props, bindings: bindings.and(SQS.QueueEventSource(queue)) });
|
|
30
|
+
//# sourceMappingURL=consume.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"consume.js","sourceRoot":"","sources":["../../../src/aws/lambda/consume.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,OAAO,EAAE,MAAM,gBAAgB,CAAC;AAMzC,OAAO,KAAK,MAAM,MAAM,eAAe,CAAC;AACxC,OAAO,KAAK,CAAC,MAAM,eAAe,CAAC;AACnC,OAAO,KAAK,GAAG,MAAM,iBAAiB,CAAC;AACvC,OAAO,KAAK,MAAM,MAAM,eAAe,CAAC;AAExC,MAAM,CAAC,MAAM,OAAO,GAClB,CACE,EAAM,EACN,EACE,KAAK,EACL,MAAM,GAQP,EACD,EAAE,CACJ,CAAgD,EAC9C,QAAQ,EACR,GAAG,KAAK,EACF,EAAE,EAAE,CACV,MAAM,CAAC,QAAQ,CAAC,EAAE,EAAE;IAClB,MAAM,EAAE,MAAM,CAAC,EAAE,CAAC,QAAQ,CAAC,EAAE,KAAe,EAAE,OAAsB;QAClE,KAAK,CAAC,CAAC,OAAO,EAAwB,CAAC;QACvC,MAAM,OAAO,GAAG,KAAK,CAAC,CAAC,MAAM,CAAC,GAAG,CAC/B,KAAK,CAAC,OAAO,CAAC,GAAG,CACf,MAAM,CAAC,EAAE,CAAC,QAAQ,CAAC,EAAE,MAAM;YACzB,OAAO;gBACL,GAAG,MAAM;gBACT,IAAI,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,IAAI,CAC3D,MAAM,CAAC,QAAQ,CAAC,GAAG,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,CACnC;aACF,CAAC;QACJ,CAAC,CAAC,CACH,CACF,CAAC;QACF,MAAM,QAAQ,GAAG,KAAK,CAAC,CAAC,MAAM,CAC5B;YACE,OAAO,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,IAAI,KAAK,SAAS,CAAC;SAC/D,EACD,OAAO,CACR,CAAC;QACF,OAAO;YACL,iBAAiB,EAAE;gBACjB,GAAG,CAAC,QAAQ,EAAE,iBAAiB,IAAI,EAAE,CAAC;gBACtC,GAAG,OAAO;qBACP,MAAM,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,IAAI,KAAK,SAAS,CAAC;qBAC7C,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;oBAChB,cAAc,EAAE,MAAM,CAAC,SAAS;iBACjC,CAAC,CAAC;aACN;SACyB,CAAC;IAC/B,CAAC,CAAC;CACH,CAAC,CAAC,EAAE,GAAG,KAAK,EAAE,QAAQ,EAAE,QAAQ,CAAC,GAAG,CAAC,GAAG,CAAC,gBAAgB,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import * as Context from "effect/Context";
|
|
2
|
+
import { Lambda as LambdaClient } from "itty-aws/lambda";
|
|
3
|
+
declare const FunctionClient_base: Context.TagClass<FunctionClient, "AWS::Lambda::Function.Client", LambdaClient>;
|
|
4
|
+
export declare class FunctionClient extends FunctionClient_base {
|
|
5
|
+
}
|
|
6
|
+
export declare const client: () => import("effect/Layer").Layer<FunctionClient, never, import("../credentials.ts").Credentials | import("../region.ts").Region>;
|
|
7
|
+
export {};
|
|
8
|
+
//# sourceMappingURL=function.client.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"function.client.d.ts","sourceRoot":"","sources":["../../../src/aws/lambda/function.client.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,OAAO,MAAM,gBAAgB,CAAC;AAE1C,OAAO,EAAE,MAAM,IAAI,YAAY,EAAE,MAAM,iBAAiB,CAAC;;AAGzD,qBAAa,cAAe,SAAQ,mBAGjC;CAAG;AAEN,eAAO,MAAM,MAAM,oIAGY,CAAC"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import * as Context from "effect/Context";
|
|
2
|
+
import { Lambda as LambdaClient } from "itty-aws/lambda";
|
|
3
|
+
import { createAWSServiceClientLayer } from "../client.js";
|
|
4
|
+
export class FunctionClient extends Context.Tag("AWS::Lambda::Function.Client")() {
|
|
5
|
+
}
|
|
6
|
+
export const client = createAWSServiceClientLayer(FunctionClient, LambdaClient);
|
|
7
|
+
//# sourceMappingURL=function.client.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"function.client.js","sourceRoot":"","sources":["../../../src/aws/lambda/function.client.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,OAAO,MAAM,gBAAgB,CAAC;AAE1C,OAAO,EAAE,MAAM,IAAI,YAAY,EAAE,MAAM,iBAAiB,CAAC;AACzD,OAAO,EAAE,2BAA2B,EAAE,MAAM,cAAc,CAAC;AAE3D,MAAM,OAAO,cAAe,SAAQ,OAAO,CAAC,GAAG,CAAC,8BAA8B,CAAC,EAG5E;CAAG;AAEN,MAAM,CAAC,MAAM,MAAM,GAAG,2BAA2B,CAG/C,cAAc,EAAE,YAAY,CAAC,CAAC"}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
import { Policy, Runtime, type Capability } from "alchemy-effect";
|
|
2
|
+
import type * as IAM from "../iam.ts";
|
|
3
|
+
export type { Context } from "aws-lambda";
|
|
4
|
+
export interface FunctionProps<Req = any> {
|
|
5
|
+
functionName?: string;
|
|
6
|
+
functionArn?: string;
|
|
7
|
+
main: string;
|
|
8
|
+
handler?: string;
|
|
9
|
+
memory?: number;
|
|
10
|
+
runtime?: "nodejs20x" | "nodejs22x";
|
|
11
|
+
architecture?: "x86_64" | "arm64";
|
|
12
|
+
url?: boolean;
|
|
13
|
+
bindings: Policy<Function, Extract<Req, Capability>>;
|
|
14
|
+
}
|
|
15
|
+
export type FunctionAttr<Props extends FunctionProps = FunctionProps> = {
|
|
16
|
+
functionArn: string;
|
|
17
|
+
functionName: string;
|
|
18
|
+
functionUrl: Props["url"] extends true ? string : undefined;
|
|
19
|
+
roleName: string;
|
|
20
|
+
roleArn: string;
|
|
21
|
+
code: {
|
|
22
|
+
hash: string;
|
|
23
|
+
};
|
|
24
|
+
};
|
|
25
|
+
export interface Function extends Runtime<"AWS.Lambda.Function"> {
|
|
26
|
+
props: FunctionProps;
|
|
27
|
+
attr: FunctionAttr<Extract<this["props"], FunctionProps>>;
|
|
28
|
+
binding: {
|
|
29
|
+
env: {
|
|
30
|
+
[key: string]: string;
|
|
31
|
+
};
|
|
32
|
+
policyStatements: IAM.PolicyStatement[];
|
|
33
|
+
};
|
|
34
|
+
}
|
|
35
|
+
export declare const Function: Function & {
|
|
36
|
+
provider: import("alchemy-effect").ResourceTags<Function>;
|
|
37
|
+
};
|
|
38
|
+
//# sourceMappingURL=function.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"function.d.ts","sourceRoot":"","sources":["../../../src/aws/lambda/function.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,KAAK,UAAU,EAAE,MAAM,gBAAgB,CAAC;AAClE,OAAO,KAAK,KAAK,GAAG,MAAM,WAAW,CAAC;AAEtC,YAAY,EAAE,OAAO,EAAE,MAAM,YAAY,CAAC;AAE1C,MAAM,WAAW,aAAa,CAAC,GAAG,GAAG,GAAG;IACtC,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,WAAW,GAAG,WAAW,CAAC;IACpC,YAAY,CAAC,EAAE,QAAQ,GAAG,OAAO,CAAC;IAClC,GAAG,CAAC,EAAE,OAAO,CAAC;IACd,QAAQ,EAAE,MAAM,CAAC,QAAQ,EAAE,OAAO,CAAC,GAAG,EAAE,UAAU,CAAC,CAAC,CAAC;CACtD;AAED,MAAM,MAAM,YAAY,CAAC,KAAK,SAAS,aAAa,GAAG,aAAa,IAAI;IACtE,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,EAAE,MAAM,CAAC;IACrB,WAAW,EAAE,KAAK,CAAC,KAAK,CAAC,SAAS,IAAI,GAAG,MAAM,GAAG,SAAS,CAAC;IAC5D,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE;QACJ,IAAI,EAAE,MAAM,CAAC;KACd,CAAC;CACH,CAAC;AAEF,MAAM,WAAW,QAAS,SAAQ,OAAO,CAAC,qBAAqB,CAAC;IAC9D,KAAK,EAAE,aAAa,CAAC;IACrB,IAAI,EAAE,YAAY,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,aAAa,CAAC,CAAC,CAAC;IAC1D,OAAO,EAAE;QACP,GAAG,EAAE;YACH,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAAC;SACvB,CAAC;QACF,gBAAgB,EAAE,GAAG,CAAC,eAAe,EAAE,CAAC;KACzC,CAAC;CACH;AACD,eAAO,MAAM,QAAQ;;CAA6C,CAAC"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import type { Capability } from "alchemy-effect";
|
|
2
|
+
import type { Context as LambdaContext } from "aws-lambda";
|
|
3
|
+
import * as Effect from "effect/Effect";
|
|
4
|
+
type Handler = (event: any, context: LambdaContext) => Effect.Effect<any, any, never>;
|
|
5
|
+
export declare const toHandler: <H extends Handler>(effect: Effect.Effect<H, any, Capability>) => (event: any, context: LambdaContext) => Promise<Effect.Effect.Success<ReturnType<H>>>;
|
|
6
|
+
export {};
|
|
7
|
+
//# sourceMappingURL=function.handler.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"function.handler.d.ts","sourceRoot":"","sources":["../../../src/aws/lambda/function.handler.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AACjD,OAAO,KAAK,EAAE,OAAO,IAAI,aAAa,EAAE,MAAM,YAAY,CAAC;AAC3D,OAAO,KAAK,MAAM,MAAM,eAAe,CAAC;AAExC,KAAK,OAAO,GAAG,CACb,KAAK,EAAE,GAAG,EACV,OAAO,EAAE,aAAa,KACnB,MAAM,CAAC,MAAM,CAAC,GAAG,EAAE,GAAG,EAAE,KAAK,CAAC,CAAC;AAiBpC,eAAO,MAAM,SAAS,GACnB,CAAC,SAAS,OAAO,EAAE,QAAQ,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE,GAAG,EAAE,UAAU,CAAC,MACtD,OAAO,GAAG,EAAE,SAAS,aAAa,kDAGW,CAAC"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import * as Effect from "effect/Effect";
|
|
2
|
+
const memo = Symbol.for("alchemy::memo");
|
|
3
|
+
// TODO(sam): is there a better way to lazily evaluate the Effect and cache the result?
|
|
4
|
+
const resolveHandler = async (effect) => (effect[memo] ??= await Effect.runPromise(
|
|
5
|
+
// safe to cast away the Capability requirements since they are phantoms
|
|
6
|
+
effect));
|
|
7
|
+
export const toHandler = (effect) => async (event, context) => Effect.runPromise((await resolveHandler(effect))(event, context));
|
|
8
|
+
//# sourceMappingURL=function.handler.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"function.handler.js","sourceRoot":"","sources":["../../../src/aws/lambda/function.handler.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,MAAM,MAAM,eAAe,CAAC;AASxC,MAAM,IAAI,GAAG,MAAM,CAAC,GAAG,CAAC,eAAe,CAAC,CAAC;AAEzC,uFAAuF;AACvF,MAAM,cAAc,GAAG,KAAK,EAC1B,MAEC,EACD,EAAE,CACF,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,MAAM,MAAM,CAAC,UAAU;AACvC,wEAAwE;AACxE,MAA8B,CAC/B,CAAC,CAAC;AAEL,MAAM,CAAC,MAAM,SAAS,GACpB,CAAoB,MAAyC,EAAE,EAAE,CACjE,KAAK,EAAE,KAAU,EAAE,OAAsB,EAAE,EAAE,CAC3C,MAAM,CAAC,UAAU,CACf,CAAC,MAAM,cAAc,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,EAAE,OAAO,CAAC,CACE,CAAC"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import * as Effect from "effect/Effect";
|
|
2
|
+
import { $, Binding, type Capability } from "alchemy-effect";
|
|
3
|
+
import { FunctionClient } from "./function.client.ts";
|
|
4
|
+
import { Function } from "./function.ts";
|
|
5
|
+
export interface InvokeFunction<Resource = unknown> extends Capability<"AWS.Lambda.InvokeFunction", Resource> {
|
|
6
|
+
}
|
|
7
|
+
export declare const InvokeFunction: (<F extends Function>(func: F) => Binding<Function, InvokeFunction<$<F>>>) & import("alchemy-effect").BindingDeclaration<Function, <F extends Function>(func: F) => Binding<Function, InvokeFunction<$<F>>>, "AWS.Lambda.InvokeFunction", InvokeFunction<Function>>;
|
|
8
|
+
export declare const invoke: <F extends Function>(func: F, input: any) => Effect.Effect<import("itty-aws/lambda").InvocationResponse, import("itty-aws/lambda").EC2AccessDeniedException | import("itty-aws/lambda").EC2ThrottledException | import("itty-aws/lambda").EC2UnexpectedException | import("itty-aws/lambda").EFSIOException | import("itty-aws/lambda").EFSMountConnectivityException | import("itty-aws/lambda").EFSMountFailureException | import("itty-aws/lambda").EFSMountTimeoutException | import("itty-aws/lambda").ENILimitReachedException | import("itty-aws/lambda").InvalidParameterValueException | import("itty-aws/lambda").InvalidRequestContentException | import("itty-aws/lambda").InvalidRuntimeException | import("itty-aws/lambda").InvalidSecurityGroupIDException | import("itty-aws/lambda").InvalidSubnetIDException | import("itty-aws/lambda").InvalidZipFileException | import("itty-aws/lambda").KMSAccessDeniedException | import("itty-aws/lambda").KMSDisabledException | import("itty-aws/lambda").KMSInvalidStateException | import("itty-aws/lambda").KMSNotFoundException | import("itty-aws/lambda").RecursiveInvocationException | import("itty-aws/lambda").RequestTooLargeException | import("itty-aws/lambda").ResourceConflictException | import("itty-aws/lambda").ResourceNotFoundException | import("itty-aws/lambda").ResourceNotReadyException | import("itty-aws/lambda").ServiceException | import("itty-aws/lambda").SnapStartException | import("itty-aws/lambda").SnapStartNotReadyException | import("itty-aws/lambda").SnapStartTimeoutException | import("itty-aws/lambda").SubnetIPAddressLimitReachedException | import("itty-aws/lambda").TooManyRequestsException | import("itty-aws/lambda").UnsupportedMediaTypeException | import("itty-aws").CommonAwsError, FunctionClient | InvokeFunction<F>>;
|
|
9
|
+
export declare const invokeFunctionFromLambda: import("effect/Layer").Layer<import("alchemy-effect").Bind<Function, InvokeFunction<Function>, "AWS.Lambda.InvokeFunction">, never, never>;
|
|
10
|
+
//# sourceMappingURL=function.invoke.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"function.invoke.d.ts","sourceRoot":"","sources":["../../../src/aws/lambda/function.invoke.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,MAAM,eAAe,CAAC;AAExC,OAAO,EAAE,CAAC,EAAE,OAAO,EAAE,KAAK,UAAU,EAAqB,MAAM,gBAAgB,CAAC;AAChF,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AACtD,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AAEzC,MAAM,WAAW,cAAc,CAAC,QAAQ,GAAG,OAAO,CAChD,SAAQ,UAAU,CAAC,2BAA2B,EAAE,QAAQ,CAAC;CAAG;AAE9D,eAAO,MAAM,cAAc,IACxB,CAAC,SAAS,QAAQ,QAAQ,CAAC,KAAK,OAAO,CAAC,QAAQ,EAAE,cAAc,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,2DAAvE,CAAC,SAAS,QAAQ,QAAQ,CAAC,KAAK,OAAO,CAAC,QAAQ,EAAE,cAAc,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,wDAClC,CAAC;AAEzC,eAAO,MAAM,MAAM,GAAI,CAAC,SAAS,QAAQ,EAAE,MAAM,CAAC,EAAE,OAAO,GAAG,ysDAU1D,CAAC;AAEL,eAAO,MAAM,wBAAwB,4IAcnC,CAAC"}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import * as Effect from "effect/Effect";
|
|
2
|
+
import { $, Binding, declare, toEnvKey } from "alchemy-effect";
|
|
3
|
+
import { FunctionClient } from "./function.client.js";
|
|
4
|
+
import { Function } from "./function.js";
|
|
5
|
+
export const InvokeFunction = Binding(Function, "AWS.Lambda.InvokeFunction");
|
|
6
|
+
export const invoke = (func, input) => Effect.gen(function* () {
|
|
7
|
+
const lambda = yield* FunctionClient;
|
|
8
|
+
const functionArn = process.env[`${func.id}-functionArn`];
|
|
9
|
+
yield* declare();
|
|
10
|
+
return yield* lambda.invoke({
|
|
11
|
+
FunctionName: functionArn,
|
|
12
|
+
InvocationType: "RequestResponse",
|
|
13
|
+
Payload: JSON.stringify(input),
|
|
14
|
+
});
|
|
15
|
+
});
|
|
16
|
+
export const invokeFunctionFromLambda = InvokeFunction.provider.succeed({
|
|
17
|
+
attach: ({ source: func }) => ({
|
|
18
|
+
env: {
|
|
19
|
+
[toEnvKey(func.id, "FUNCTION_ARN")]: func.attr.functionArn,
|
|
20
|
+
},
|
|
21
|
+
policyStatements: [
|
|
22
|
+
{
|
|
23
|
+
Sid: "AWS.Lambda.InvokeFunction",
|
|
24
|
+
Effect: "Allow",
|
|
25
|
+
Action: ["lambda:InvokeFunction"],
|
|
26
|
+
Resource: [func.attr.functionArn],
|
|
27
|
+
},
|
|
28
|
+
],
|
|
29
|
+
}),
|
|
30
|
+
});
|
|
31
|
+
//# sourceMappingURL=function.invoke.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"function.invoke.js","sourceRoot":"","sources":["../../../src/aws/lambda/function.invoke.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,MAAM,eAAe,CAAC;AAExC,OAAO,EAAE,CAAC,EAAE,OAAO,EAAmB,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAChF,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AACtD,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AAKzC,MAAM,CAAC,MAAM,cAAc,GAAG,OAAO,CAEnC,QAAQ,EAAE,2BAA2B,CAAC,CAAC;AAEzC,MAAM,CAAC,MAAM,MAAM,GAAG,CAAqB,IAAO,EAAE,KAAU,EAAE,EAAE,CAChE,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC;IAClB,MAAM,MAAM,GAAG,KAAK,CAAC,CAAC,cAAc,CAAC;IACrC,MAAM,WAAW,GAAG,OAAO,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,EAAE,cAAc,CAAE,CAAC;IAC3D,KAAK,CAAC,CAAC,OAAO,EAAqB,CAAC;IACpC,OAAO,KAAK,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC;QAC1B,YAAY,EAAE,WAAW;QACzB,cAAc,EAAE,iBAAiB;QACjC,OAAO,EAAE,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC;KAC/B,CAAC,CAAC;AACL,CAAC,CAAC,CAAC;AAEL,MAAM,CAAC,MAAM,wBAAwB,GAAG,cAAc,CAAC,QAAQ,CAAC,OAAO,CAAC;IACtE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC,CAAC;QAC7B,GAAG,EAAE;YACH,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,EAAE,cAAc,CAAC,CAAC,EAAE,IAAI,CAAC,IAAI,CAAC,WAAW;SAC3D;QACD,gBAAgB,EAAE;YAChB;gBACE,GAAG,EAAE,2BAA2B;gBAChC,MAAM,EAAE,OAAO;gBACf,MAAM,EAAE,CAAC,uBAAuB,CAAC;gBACjC,QAAQ,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC;aAClC;SACF;KACF,CAAC;CACH,CAAC,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"function.js","sourceRoot":"","sources":["../../../src/aws/lambda/function.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,OAAO,EAAmB,MAAM,gBAAgB,CAAC;AAsClE,MAAM,CAAC,MAAM,QAAQ,GAAG,OAAO,CAAC,qBAAqB,CAAC,EAAY,CAAC"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { FileSystem } from "@effect/platform";
|
|
2
|
+
import { App, DotAlchemy } from "alchemy-effect";
|
|
3
|
+
import { AccountID } from "../account.ts";
|
|
4
|
+
import * as IAM from "../iam.ts";
|
|
5
|
+
import { Region } from "../region.ts";
|
|
6
|
+
import { FunctionClient } from "./function.client.ts";
|
|
7
|
+
import { Function } from "./function.ts";
|
|
8
|
+
export declare const functionProvider: () => import("effect/Layer").Layer<import("alchemy-effect").Provider<Function>, never, FunctionClient | App | Region | FileSystem.FileSystem | AccountID | IAM.IAMClient | DotAlchemy>;
|
|
9
|
+
//# sourceMappingURL=function.provider.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"function.provider.d.ts","sourceRoot":"","sources":["../../../src/aws/lambda/function.provider.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAI9C,OAAO,EAAE,GAAG,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AAMjD,OAAO,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;AAC1C,OAAO,KAAK,GAAG,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AAEtC,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AACtD,OAAO,EAAE,QAAQ,EAAyC,MAAM,eAAe,CAAC;AAEhF,eAAO,MAAM,gBAAgB,wLA8hB1B,CAAC"}
|